Subversion Repositories Sites.obs-saisons.fr

Compare Revisions

No changes between revisions

Ignore whitespace Rev 1 → Rev HEAD

/obs_saisons/.project
File deleted
/obs_saisons/SPIP-v1-8-3/odsadultes.css
File deleted
/obs_saisons/SPIP-v1-8-3/squelettes/article.html
File deleted
/obs_saisons/SPIP-v1-8-3/squelettes/sommaire.html
File deleted
/obs_saisons/SPIP-v1-8-3/squelettes/rubrique.html
File deleted
/obs_saisons/SPIP-v1-8-3/mes_fonctions.php3
File deleted
/obs_saisons/SPIP-v1-8-3/admin/odsadmin.css
File deleted
/obs_saisons/SPIP-v1-8-3/admin/exportobservations.php
File deleted
/obs_saisons/SPIP-v1-8-3/admin/export.php
File deleted
/obs_saisons/SPIP-v1-8-3/admin/participants.php
File deleted
/obs_saisons/SPIP-v1-8-3/admin/exportadultes.php
File deleted
/obs_saisons/SPIP-v1-8-3/admin/exportparticipants.php
File deleted
/obs_saisons/SPIP-v1-8-3/admin/telech.php
File deleted
/obs_saisons/SPIP-v1-8-3/admin/oldindex.php
File deleted
/obs_saisons/SPIP-v1-8-3/admin/especes.php
File deleted
/obs_saisons/SPIP-v1-8-3/admin/index.php
File deleted
/obs_saisons/SPIP-v1-8-3/admin/exportjunior.php
File deleted
/obs_saisons/SPIP-v1-8-3/admin/exportobsmoyennees.php
File deleted
/obs_saisons/SPIP-v1-8-3/admin/evenements.php
File deleted
/obs_saisons/SPIP-v1-8-3/admin/tmp/req.sql
File deleted
/obs_saisons/SPIP-v1-8-3/admin/tmp/res.sql
File deleted
/obs_saisons/SPIP-v1-8-3/modules/genere_sql_maj_station.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/nb_inscrits.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/modif_inscription.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/configuration/Auth.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/configuration/Container.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/configuration/URL.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/configuration/car_config.inc.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/configuration/DB.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/configuration/Auth/Auth.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/configuration/Auth/Controller.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/configuration/Auth/Anonymous.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/configuration/Container/Array.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/configuration/Container/File.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/configuration/Container/LDAP.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/configuration/Container/POP3.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/configuration/Container/SAP.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/configuration/Container/MDB2.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/configuration/Container/DB.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/configuration/Container/IMAP.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/configuration/Container/SOAP5.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/configuration/Container/vpopmail.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/configuration/Container/PEAR.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/configuration/Container/RADIUS.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/configuration/Container/Multiple.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/configuration/Container/KADM5.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/configuration/Container/NetVPOPMaild.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/configuration/Container/MDB.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/configuration/Container/SOAP.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/configuration/Container/SMBPasswd.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/configuration/Container/DBLite.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/configuration/DB/sqlite.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/configuration/DB/oci8.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/configuration/DB/ibase.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/configuration/DB/storage.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/configuration/DB/mysql.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/configuration/DB/ifx.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/configuration/DB/pgsql.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/configuration/DB/sybase.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/configuration/DB/fbsql.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/configuration/DB/odbc.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/configuration/DB/common.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/configuration/DB/msql.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/configuration/DB/dbase.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/configuration/DB/mysqli.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/configuration/DB/mssql.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/graphiques/manscaleex1.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/graphiques/manscaleex2.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/graphiques/manscaleex3.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/graphiques/manscaleex4.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/graphiques/index.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/graphiques/gen_graphbon.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/graphiques/gen_graph.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/graphiques/gen_graphexemple.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/graphiques/traitement.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/genere_sql_maj_bdd.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/amandier5.wmv
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/obs_saisons/SPIP-v1-8-3/modules/cartes/gen_carte.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/cartes/index.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/cartes/puces/3.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/obs_saisons/SPIP-v1-8-3/modules/cartes/puces/4.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/obs_saisons/SPIP-v1-8-3/modules/cartes/puces/ombre.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/obs_saisons/SPIP-v1-8-3/modules/cartes/puces/5.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/obs_saisons/SPIP-v1-8-3/modules/cartes/puces/6.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/obs_saisons/SPIP-v1-8-3/modules/cartes/puces/7.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/obs_saisons/SPIP-v1-8-3/modules/cartes/puces/8.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/obs_saisons/SPIP-v1-8-3/modules/cartes/puces/9.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/obs_saisons/SPIP-v1-8-3/modules/cartes/puces/liste_couleursv2.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/obs_saisons/SPIP-v1-8-3/modules/cartes/puces/phenoclim/0.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/obs_saisons/SPIP-v1-8-3/modules/cartes/puces/phenoclim/1.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/obs_saisons/SPIP-v1-8-3/modules/cartes/puces/phenoclim/2.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/obs_saisons/SPIP-v1-8-3/modules/cartes/puces/phenoclim/3.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/obs_saisons/SPIP-v1-8-3/modules/cartes/puces/phenoclim/4.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/obs_saisons/SPIP-v1-8-3/modules/cartes/puces/phenoclim/ombre.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/obs_saisons/SPIP-v1-8-3/modules/cartes/puces/phenoclim/5.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/obs_saisons/SPIP-v1-8-3/modules/cartes/puces/phenoclim/6.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/obs_saisons/SPIP-v1-8-3/modules/cartes/puces/phenoclim/7.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/obs_saisons/SPIP-v1-8-3/modules/cartes/puces/phenoclim/8.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/obs_saisons/SPIP-v1-8-3/modules/cartes/puces/phenoclim/9.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/obs_saisons/SPIP-v1-8-3/modules/cartes/puces/phenoclim/contenu_phenoclim.tgz
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/obs_saisons/SPIP-v1-8-3/modules/cartes/puces/legende.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/obs_saisons/SPIP-v1-8-3/modules/cartes/puces/ombre.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/obs_saisons/SPIP-v1-8-3/modules/cartes/puces/0.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/obs_saisons/SPIP-v1-8-3/modules/cartes/puces/1.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/obs_saisons/SPIP-v1-8-3/modules/cartes/puces/liste_couleurs.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/obs_saisons/SPIP-v1-8-3/modules/cartes/puces/2.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/obs_saisons/SPIP-v1-8-3/modules/cartes/local_participants.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/cartes/analyse.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/cartes/traitement.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/cartes/cartetest.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/historique.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/protocoles_obs.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/annuaire.php
File deleted
\ No newline at end of file
/obs_saisons/SPIP-v1-8-3/modules/maj_participant.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/genere_sql_maj_altitude.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/rss.php
File deleted
\ No newline at end of file
/obs_saisons/SPIP-v1-8-3/modules/messages.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/cartographie.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/maj_station.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/liste_inscrit.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/test.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/maj_bdd.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/liste.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/envoi_obs.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/fonds/monde_masque5c.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/obs_saisons/SPIP-v1-8-3/modules/fonds/samerique_masque.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/obs_saisons/SPIP-v1-8-3/modules/fonds/afrique_masque.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/obs_saisons/SPIP-v1-8-3/modules/fonds/moyenorient.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/obs_saisons/SPIP-v1-8-3/modules/fonds/france_masque.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/obs_saisons/SPIP-v1-8-3/modules/fonds/europe_masque.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/obs_saisons/SPIP-v1-8-3/modules/fonds/oceanie_masque.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/obs_saisons/SPIP-v1-8-3/modules/fonds/carto_ad.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/fonds/asie.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/obs_saisons/SPIP-v1-8-3/modules/fonds/moyenorient_masque.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/obs_saisons/SPIP-v1-8-3/modules/fonds/namerique.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/obs_saisons/SPIP-v1-8-3/modules/fonds/monde5c.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/obs_saisons/SPIP-v1-8-3/modules/fonds/samerique.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/obs_saisons/SPIP-v1-8-3/modules/fonds/afrique.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/obs_saisons/SPIP-v1-8-3/modules/fonds/asie_masque.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/obs_saisons/SPIP-v1-8-3/modules/fonds/france.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/obs_saisons/SPIP-v1-8-3/modules/fonds/europe.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/obs_saisons/SPIP-v1-8-3/modules/fonds/namerique_masque.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/obs_saisons/SPIP-v1-8-3/modules/fonds/france_region.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/obs_saisons/SPIP-v1-8-3/modules/fonds/oceanie.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/obs_saisons/SPIP-v1-8-3/modules/graphique.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/bibliotheque/lib.carto.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/bibliotheque/lib.carto.extractimg.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/bibliotheque/lib.couleur.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/bibliotheque/car_cartographie.fonct.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/bibliotheque/jpgraph/flags_thumb35x35.dat
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/obs_saisons/SPIP-v1-8-3/modules/bibliotheque/jpgraph/jpgraph_canvas.php
File deleted
\ No newline at end of file
/obs_saisons/SPIP-v1-8-3/modules/bibliotheque/jpgraph/jpgraph_antispam.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/bibliotheque/jpgraph/jpgraph_gantt.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/bibliotheque/jpgraph/jpgraph.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/bibliotheque/jpgraph/jpgraph_stock.php
File deleted
\ No newline at end of file
/obs_saisons/SPIP-v1-8-3/modules/bibliotheque/jpgraph/jpgraph_iconplot.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/bibliotheque/jpgraph/gd_image.inc.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/bibliotheque/jpgraph/jpgraph_error.php
File deleted
\ No newline at end of file
/obs_saisons/SPIP-v1-8-3/modules/bibliotheque/jpgraph/jpgraph_radar.php
File deleted
\ No newline at end of file
/obs_saisons/SPIP-v1-8-3/modules/bibliotheque/jpgraph/flags_thumb100x100.dat
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/obs_saisons/SPIP-v1-8-3/modules/bibliotheque/jpgraph/jpgraph_gb2312.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/bibliotheque/jpgraph/jpgraph_plotmark.inc.php
File deleted
\ No newline at end of file
/obs_saisons/SPIP-v1-8-3/modules/bibliotheque/jpgraph/flags.dat
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/obs_saisons/SPIP-v1-8-3/modules/bibliotheque/jpgraph/imgdata_bevels.inc.php
File deleted
\ No newline at end of file
/obs_saisons/SPIP-v1-8-3/modules/bibliotheque/jpgraph/jpgraph_pie3d.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/bibliotheque/jpgraph/jpgraph_bar.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/bibliotheque/jpgraph/jpgraph_led.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/bibliotheque/jpgraph/imgdata_squares.inc.php
File deleted
\ No newline at end of file
/obs_saisons/SPIP-v1-8-3/modules/bibliotheque/jpgraph/jpgraph_canvtools.php
File deleted
\ No newline at end of file
/obs_saisons/SPIP-v1-8-3/modules/bibliotheque/jpgraph/jpgraph_utils.inc.php
File deleted
\ No newline at end of file
/obs_saisons/SPIP-v1-8-3/modules/bibliotheque/jpgraph/jpgraph_regstat.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/bibliotheque/jpgraph/jpgraph_date.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/bibliotheque/jpgraph/jpgraph_pie.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/bibliotheque/jpgraph/jpgraph_polar.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/bibliotheque/jpgraph/jpgraph_mgraph.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/bibliotheque/jpgraph/imgdata_stars.inc.php
File deleted
\ No newline at end of file
/obs_saisons/SPIP-v1-8-3/modules/bibliotheque/jpgraph/jpg-config.inc.php
File deleted
\ No newline at end of file
/obs_saisons/SPIP-v1-8-3/modules/bibliotheque/jpgraph/lang/en.inc.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/bibliotheque/jpgraph/lang/prod.inc.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/bibliotheque/jpgraph/lang/de.inc.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/bibliotheque/jpgraph/imgdata_balls.inc.php
File deleted
\ No newline at end of file
/obs_saisons/SPIP-v1-8-3/modules/bibliotheque/jpgraph/imgdata_diamonds.inc.php
File deleted
\ No newline at end of file
/obs_saisons/SPIP-v1-8-3/modules/bibliotheque/jpgraph/jpgraph_log.php
File deleted
\ No newline at end of file
/obs_saisons/SPIP-v1-8-3/modules/bibliotheque/jpgraph/jpgraph_imgtrans.php
File deleted
\ No newline at end of file
/obs_saisons/SPIP-v1-8-3/modules/bibliotheque/jpgraph/jpgraph_line.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/bibliotheque/jpgraph/imgdata_pushpins.inc.php
File deleted
\ No newline at end of file
/obs_saisons/SPIP-v1-8-3/modules/bibliotheque/jpgraph/jpgraph_flags.php
File deleted
\ No newline at end of file
/obs_saisons/SPIP-v1-8-3/modules/bibliotheque/jpgraph/jpgraph_antispam-digits.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/bibliotheque/jpgraph/jpgraph_gradient.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/bibliotheque/jpgraph/jpgraph_errhandler.inc.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/bibliotheque/jpgraph/jpgraph_plotband.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/bibliotheque/jpgraph/jpgraph_ttf.inc.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/bibliotheque/jpgraph/jpgraph_scatter.php
File deleted
\ No newline at end of file
/obs_saisons/SPIP-v1-8-3/modules/bibliotheque/jpgraph/flags_thumb60x60.dat
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/obs_saisons/SPIP-v1-8-3/modules/bibliotheque/annuaire.fonct.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/bibliotheque/tmp/france729c5bf0bc6a4dfa01f6db422673f516.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/obs_saisons/SPIP-v1-8-3/modules/bibliotheque/tmp/continent041d9d6b8916776fcca27b0c4df863ad.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/obs_saisons/SPIP-v1-8-3/modules/bibliotheque/tmp/europe74a466dbdbd143b3072968bc1f36345b.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/obs_saisons/SPIP-v1-8-3/modules/bibliotheque/tmp/francea358f1c882e17a54702f7af7aa1922e6.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/obs_saisons/SPIP-v1-8-3/modules/bibliotheque/tmp/europef6c3afa0a2772e27cb81b5eee7c1bae1.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/obs_saisons/SPIP-v1-8-3/modules/observations/saisie.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/observations/encours.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/observations/commune.php2308
File deleted
/obs_saisons/SPIP-v1-8-3/modules/observations/station.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/observations/evenement.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/observations/annee.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/observations/sauvegarde_station.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/observations/environnement.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/observations/modif_encours_old.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/observations/modif_encours.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/observations/backup.dmp
File deleted
/obs_saisons/SPIP-v1-8-3/modules/observations/modif_station.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/observations/commune.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/observations/espece.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/observations/type_espece.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/observations/altitude.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/analyse.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/mail_tous.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/inscription.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/maj_altitude.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/login.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/langues/car_langue_fr.inc.php
File deleted
/obs_saisons/SPIP-v1-8-3/modules/genere_sql_maj_participant.php
File deleted
/trunk/documents/mails/ALIRE.txt
New file
0,0 → 1,16
 
 
Ce dossier contient les templates pour les lettres d'actualités pour ODS.
Le fichier à utiliser est lettre_actu.tpl.html
 
Le fichier lettre_actu_modele.tpl.html est, quant à lui, un modèle idéal de
ce que devrait être la lettre d'actualité. Malheureusement les lecteurs de mails
sont bien pauvres en matière d'interprétation du html. Ainsi le fichier lettre_actu.tpl.html
contient un compromis fonctionnant au moins sous hotmail, gmail, orange et thunderbird.
Il est laissé pour qu'il soit repris le jour où les lecteurs de mails utiliseront des moteurs de rendu
digne de ce nom.
 
Les bandeaux du haut sont modifiables suivant les quatres saisons :
il suffit de chercher ceci :
http://www.obs-saisons.fr/themes/ods/images/bandeaux/bandeau-ete.png
et remplacer bandeau-ete par bandeau-automne bandeau-hiver ou bandeau-printemps
Property changes:
Added: svn:eol-style
+native
\ No newline at end of property
/trunk/documents/mails/lettre_actu.tpl.html
New file
0,0 → 1,85
<html>
<head>
 
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
</head>
<body>
<div id="fond">
<div id="lettre-actu" style="width:955px;">
<table style="border:none; border-collapse: collapse; background-color:#FFFFFF">
<tr>
<td>
<table style="border:none; border-collapse: collapse;">
<tr>
<td style="height:1px; font-size:0.01em;">&#8203;</td>
<td rowspan="2">
<a target="_blank" title="Aller sur le site d'observatoire des saisons" href="http://www.obs-saisons.fr">
<img style="border-top-right-radius: 20px; border-top-left-radius: 20px;" src="http://www.obs-saisons.fr/themes/ods/images/bandeaux/bandeau-ete.png" />
</a>
</td>
</tr>
<tr style="width:155px; vertical-align:top">
<td colspan="2">
<div id="logo-floater">
<a target="_blank" title="Aller sur le site d'observatoire des saisons" href="http://www.obs-saisons.fr">
<img id="logo" style="float:none" alt="logo observatoire des saisons" src="http://www.obs-saisons.fr/themes/ods/logo.png">
</a>
<table style="border:none; border-collapse: collapse;">
<tr>
<td style="width:43px;">
</td>
<td style="width:47px;">
<a target="_blank" title="Aller sur le site de tela botanica" href="http://www.tela-botanica.org">
<img src="http://www.obs-saisons.fr/themes/ods/logo_tela.png" alt="logo tela botanica" title="Tela Botanica" width="43px;" class="petit_logo_tela"></a>
</td>
<td>
<a target="_blank" title="Aller sur le site du gdr" href="http://www.gdr2968.cnrs.fr/">
<img src="http://www.obs-saisons.fr/themes/ods/logo_cnrs.png" alt="logo cnrs" title="cnrs" width="35px" class="petit_logo_cnrs"></a>
</td>
</tr>
</table>
</div>
</td>
</table>
</td>
</tr>
<tr>
<td>
<div id="contenu">
<h1> Lettre d'actualité du mois de septembre </h1>
<p> Le texte commence ici </p>
</div>
</td>
</tr>
<tr>
<td>
<div id="footer">
<strong>
<b>
Toute l'&eacute;quipe de l'ODS vous remercie pour vos
observations&nbsp;!<br />
A bientôt ! <br />
L'équipe de l'Observatoire Des Saisons <br />
</b>
</strong>
<p class="liens-autres">
Rejoignez-nous sur <a target="_blank" href="https://www.facebook.com/pages/Observatoire-des-Saisons/167300616656493">Facebook</a> ou <a target="_blank" href="https://twitter.com/ObservSaisons">Twitter</a> et envoyez nous vos actualités, <br />
initiatives régionales en rapport avec les saisons ou l'ODS par mail: contact@obs-saisons.fr
<br />
Si vous souhaitez vous désabonner de la lettre d'actualité, <br />
rendez vous sur le site de l'<a href="http://www.obs-saisons.fr">ODS</a>, allez dans votre profil et décochez « abonnement à la lettre d'actualité ».
<br />
</p>
<div id="bandeau-footer">
<img src="http://www.obs-saisons.fr/themes/ods/images/bandeaux/bandeau-bas.png" />
</div>
</div>
</td>
</tr>
</table>
</div>
</div>
</body>
</html>
/trunk/documents/mails/lettre_actu_modele.tpl.html
New file
0,0 → 1,118
<html>
<head>
 
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<style>
#header {
height: 175px;
border-top-left-radius: 15px;
border-top-right-radius: 15px;
background-color: #FFFFFF;
}
 
.automne {
background: url("http://www.obs-saisons.fr/themes/ods/images/bandeaux/bandeau-automne.png") no-repeat scroll transparent;
}
 
.printemps {
background: url("http://www.obs-saisons.fr/themes/ods/images/bandeaux/bandeau-printemps.png") no-repeat scroll transparent;
}
.ete {
background: url("http://www.obs-saisons.fr/themes/ods/images/bandeaux/bandeau-ete.png") no-repeat scroll transparent;
}
.hiver {
background: url("http://www.obs-saisons.fr/themes/ods/images/bandeaux/bandeau-hiver.png") no-repeat scroll transparent;
}
 
body {
width: 955px;
margin: auto;
background-color: #C6B895;
}
 
#contenu {
padding: 5px;
background-color: #FFFFFF;
min-height: 250px;
}
 
.petit_logo_tela {
margin-left: 62px;
position: relative;
top: -35px;
width: 43px;
}
 
.petit_logo_cnrs {
margin-left: 5px;
position: relative;
top: -28px;
width: 35px;
}
 
#logo-floater {
padding-left: 20px;
padding-top: 1px;
}
#footer {
background: url("http://www.obs-saisons.fr/themes/ods/images/bandeaux/bandeau-bas.png") no-repeat scroll 50% 135px #ffffff;
clear: both;
height: 240px;
margin-left: auto;
margin-right: auto;
text-align: center;
vertical-align: bottom;
width: 955px;
border-bottom-left-radius: 20px;
border-bottom-right-radius: 20px;
}
 
.liens-autres {
font-size: 0.8em;
color: #888;
}
</style>
</head>
<body>
 
<div class="automne" id="header">
<div id="logo-floater">
<h1>
<a target="_blank" title="Aller sur le site d'observatoire des saisons" href="http://www.obs-saisons.fr">
<img id="logo" alt="logo observatoire des saisons" src="http://www.obs-saisons.fr/themes/ods/logo.png">
</a>
</h1>
</div>
<a target="_blank" title="Aller sur le site de tela botanica" href="http://www.tela-botanica.org"><img src="http://www.obs-saisons.fr/themes/ods/logo_tela.png" alt="logo tela botanica" title="Tela Botanica" class="petit_logo_tela"></a>
<a target="_blank" title="Aller sur le site du gdr" href="http://www.gdr2968.cnrs.fr/"><img src="http://www.obs-saisons.fr/themes/ods/logo_cnrs.png" alt="logo cnrs" title="cnrs" class="petit_logo_cnrs"></a>
</div>
 
<div id="contenu">
<h1> Lettre d'actualité du mois de septembre </h1>
<p> Le texte commence ici </p>
</div>
 
<div id="footer">
<strong>
<b>
Toute l'&eacute;quipe de l'ODS vous remercie pour vos
observations&nbsp;!<br />
A bientôt ! <br />
L'équipe de l'Observatoire Des Saisons <br />
</b>
</strong>
<p class="liens-autres">
Rejoignez-nous sur <a target="_blank" href="https://www.facebook.com/pages/Observatoire-des-Saisons/167300616656493">Facebook</a> ou <a target="_blank" href="https://twitter.com/ObservSaisons">Twitter</a> et envoyez nous vos actualités, <br />
initiatives régionales en rapport avec les saisons ou l'ODS par mail: contact@obs-saisons.fr
<br />
Si vous souhaitez vous désabonner de la lettre d'actualité, <br />
rendez vous sur le site de l'<a href="http://www.obs-saisons.fr">ODS</a>, allez dans votre profil et décochez « abonnement à la lettre d'actualité ».
<br />
</p>
</div>
</body>
</html>
/trunk/php.ini
New file
0,0 → 1,3
; modification spécifique pour drupal étant donné que le serveur
; ne supporte pas le changement de directive pas .htaccess
register_globals = Off
/trunk/themes/ods/font/BorisBlackBloxx.ttf
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/themes/ods/font/BorisBlackBloxx.ttf
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/themes/ods/font/boris_black_bloxx.zip
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/themes/ods/font/boris_black_bloxx.zip
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/themes/ods/page-node-15.tpl.php
New file
0,0 → 1,108
<?php /** Inclusion du fichier principal de l'application*/
require_once '/home/ods/www/applications/saisie/saisie.php';
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<?php print $head ?>
<title><?php print $head_title ?></title>
<?php print $styles ?>
<?php print $scripts ?>
<!--[if lt IE 7]>
<?php print phptemplate_get_ie_styles(); ?>
<![endif]-->
<?= Liens::renvoyerStylesInclus() ?>
<?= Liens::renvoyerScriptsInclus() ?>
<link href="http://www.obs-saisons.fr/rss" title="Observatoire des saisons : les derniers articles" type="application/rss+xml" rel="alternate" />
<link href="http://www.obs-saisons.fr/applications/jrest/OdsSyndicationObservation/par-defaut/rss2" title="Observatoire des saisons : les dernieres observations" type="application/rss+xml" rel="alternate" />
</head>
<body<?php print phptemplate_body_class($left, $right); ?>>
<div id="header-region" class="clear-block">
<?php print $header; ?>
</div>
<div class="titre_site">
<span id="observatoire">Observatoire </span>
<span id="des">des</span>
<span id="saisons"> Saisons</span>
</div>
<div id="wrapper" class="zone_principale">
<div class="navigation_niveau_1">
<?php if (isset($primary_links)) : ?>
<?php print primary_links( $primary_links, array('class' => 'links primary-links')) ?>
<?php endif; ?>
<?php if (isset($secondary_links)) : ?>
<?php print theme('links', $secondary_links, array('class' => 'links secondary-links')) ?>
<?php endif; ?>
</div>
<?php $saisons = array('printemps', 'ete', 'automne','hiver'); $saison = $saisons[rand(0,3)]; ?>
<div id="header" class="<?= $saison; ?>">
<div id="logo-floater">
<?php
if ($logo || $site_title) {
if(!isset($site_title)) {
$site_title = 'ODS';
}
print '<h1><a href="'. check_url($front_page) .'" title="'. $site_title .'">';
if ($logo) {
print '<img src="'. check_url($logo) .'" alt="'. $site_title .'" id="logo" />';
}
print '</a></h1>';
}
?>
</div>
<img class="petit_logo_tela" title="tela botanica" alt="logo tela botanica" src="http://www.obs-saisons.fr/themes/ods/logo_tela.png">
<img class="petit_logo_cnrs" title="cnrs" alt="logo cnrs" src="http://www.obs-saisons.fr/themes/ods/logo_cnrs.png">
</div> <!-- /header -->
<div id="left">
<div class="menu_recourbe"></div>
<div id="sidebar-left" class="sidebar general">
<?php if(AppControleur::utilisateurEstIdentifie()) { ?>
<?php print AppControleur::getContenuNavigation(); ?>
<?php } else { ?>
<?php print $left ?>
<?php } ?>
</div>
 
</div><!-- /navigation -->
<div id="center">
<?php print AppControleur::getContenuTete(); ?>
<?php print $help; ?>
<?php print AppControleur::getContenuCorps(); ?>
<?php print $feed_icons ?>
</div><!-- centre -->
<div id="footer">
<?php print AppControleur::getContenuPied(); print $footer_message; ?>
<div class="liens_bas_page">
<div class="liens_internes">
<a id="lien_aide" class="lien_interne" href="http://www.obs-saisons.fr/aide" > Aide </a>
<a id="lien_rss" class="lien_interne" href="http://www.obs-saisons.fr/rss" > RSS </a>
<a id="lien_contact" class="lien_interne" href="http://www.obs-saisons.fr/about/contact" > Contact </a>
</div>
 
<div class="liens_externes">
<a id="lien_tela" class="lien_externe" href="http://www.tela-botanica.org"> Réalisation : Tela Botanica 2010 </a> -
<a id="lien_CMS" class="lien_externe" href="http://drupal.org/"> Drupal </a> -
</div>
</div>
</div><!-- pied de page -->
</div> <!--fermeture div zone-principale-->
</body>
</html>
/trunk/themes/ods/minnelli/color/preview.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/themes/ods/minnelli/color/preview.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/themes/ods/minnelli/color/color.inc
New file
0,0 → 1,75
<?php
// $Id: color.inc,v 1.4 2007/12/14 17:00:14 goba Exp $
 
$info = array(
 
// Pre-defined color schemes.
'schemes' => array(
'#0072b9,#027ac6,#2385c2,#5ab5ee,#494949' => t('Blue Lagoon (Default)'),
'#464849,#2f416f,#2a2b2d,#5d6779,#494949' => t('Ash'),
'#55c0e2,#000000,#085360,#007e94,#696969' => t('Aquamarine'),
'#d5b048,#6c420e,#331900,#971702,#494949' => t('Belgian Chocolate'),
'#3f3f3f,#336699,#6598cb,#6598cb,#000000' => t('Bluemarine'),
'#d0cb9a,#917803,#efde01,#e6fb2d,#494949' => t('Citrus Blast'),
'#0f005c,#434f8c,#4d91ff,#1a1575,#000000' => t('Cold Day'),
'#c9c497,#0c7a00,#03961e,#7be000,#494949' => t('Greenbeam'),
'#ffe23d,#a9290a,#fc6d1d,#a30f42,#494949' => t('Mediterrano'),
'#788597,#3f728d,#a9adbc,#d4d4d4,#707070' => t('Mercury'),
'#5b5fa9,#5b5faa,#0a2352,#9fa8d5,#494949' => t('Nocturnal'),
'#7db323,#6a9915,#b5d52a,#7db323,#191a19' => t('Olivia'),
'#12020b,#1b1a13,#f391c6,#f41063,#898080' => t('Pink Plastic'),
'#b7a0ba,#c70000,#a1443a,#f21107,#515d52' => t('Shiny Tomato'),
'#18583d,#1b5f42,#34775a,#52bf90,#2d2d2d' => t('Teal Top'),
),
 
// Images to copy over.
'copy' => array(
'../images/menu-collapsed.gif',
'../images/menu-collapsed-rtl.gif',
'../images/menu-expanded.gif',
'../images/menu-leaf.gif',
),
 
// CSS files (excluding @import) to rewrite with new color scheme.
'css' => array(
'../style.css',
),
 
// Coordinates of gradient (x, y, width, height).
'gradient' => array(0, 37, 760, 121),
 
// Color areas to fill (x, y, width, height).
'fill' => array(
'base' => array(0, 0, 760, 568),
'link' => array(107, 533, 41, 23),
),
 
// Coordinates of all the theme slices (x, y, width, height)
// with their filename as used in the stylesheet.
'slices' => array(
'../images/body.png' => array(0, 37, 1, 280),
'../images/bg-bar.png' => array(202, 530, 76, 14),
'../images/bg-bar-white.png' => array(202, 506, 76, 14),
'../images/bg-tab.png' => array(107, 533, 41, 23),
'../images/bg-navigation.png' => array(0, 0, 7, 37),
'../images/bg-content-left.png' => array(40, 117, 50, 352),
'../images/bg-content-right.png' => array(510, 117, 50, 352),
'../images/bg-content.png' => array(299, 117, 7, 200),
'../images/bg-navigation-item.png' => array(32, 37, 17, 12),
'../images/bg-navigation-item-hover.png' => array(54, 37, 17, 12),
'../images/gradient-inner.png' => array(646, 307, 112, 42),
 
'logo.png' => array(622, 51, 64, 73),
'screenshot.png' => array(0, 37, 400, 240),
),
 
// Reference color used for blending. Matches the base.png's colors.
'blend_target' => '#ffffff',
 
// Preview files.
'preview_image' => 'color/preview.png',
'preview_css' => '../color/preview.css',
 
// Base file for image generation.
'base_image' => 'color/base.png',
);
/trunk/themes/ods/minnelli/color/base.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/themes/ods/minnelli/color/base.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/themes/ods/minnelli/minnelli.css
New file
0,0 → 1,20
/* $Id: minnelli.css,v 1.3.2.1 2008/02/05 09:27:26 goba Exp $ */
 
/**
* Minnelli, for Drupal 6.x
* Stefan Nagtegaal, iStyledThis [dot] nl
* Steven Wittens, acko [dot] net
*/
 
body #wrapper #container {
width: 560px;
}
 
body.sidebars #wrapper #container {
width: 980px;
}
 
body.sidebar-left #wrapper #container,
body.sidebar-right #wrapper #container {
width: 770px;
}
/trunk/themes/ods/minnelli/screenshot.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/themes/ods/minnelli/screenshot.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/themes/ods/minnelli/minnelli.info
New file
0,0 → 1,13
; $Id: minnelli.info,v 1.7 2007/12/04 20:58:44 goba Exp $
name = Minnelli
description = Tableless, recolorable, multi-column, fixed width theme.
version = VERSION
core = 6.x
base theme = garland
stylesheets[all][] = minnelli.css
 
; Information added by drupal.org packaging script on 2010-06-02
version = "6.17"
project = "drupal"
datestamp = "1275505216"
 
/trunk/themes/ods/minnelli/logo.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/themes/ods/minnelli/logo.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/themes/ods/fix-ie-rtl.css
New file
0,0 → 1,63
/* $Id: fix-ie-rtl.css,v 1.2 2007/11/09 22:14:41 goba Exp $ */
 
body {
/* Center layout */
text-align: center;
/* Allow text resizing */
font-size: 80%;
}
 
#squeeze {
zoom: 1;
direction: ltr;
}
 
#squeeze .left-corner{
direction: rtl
}
 
#header-region, #wrapper #container {
/* Reset text alignment */
text-align: right;
}
 
#wrapper #container #center {
/* Reduce amount of damage done by extremely wide content */
overflow: hidden;
}
 
#wrapper #container #center .right-corner .left-corner {
/* Because of the lack of min-height, we use height as an alternative */
height: 400px;
}
 
fieldset {
/* Don't draw backgrounds on fieldsets in IE, as they look really bad. */
background: none;
}
 
/* Prevent fieldsets from shifting when changing collapsed state. */
html.js fieldset.collapsible {
position: relative;
top: -1em;
}
 
html.js fieldset.collapsed {
top: 0;
margin-bottom: 1em;
}
 
tr.menu-disabled {
/* Use filter to emulate CSS3 opacity */
filter: alpha(opacity=50);
}
 
#header-region {
/* Because of the lack of min-height, we use height as an alternative */
height: 1em;
}
 
#attach-hide label, #uploadprogress div.message {
/* Fading elements in IE causes the text to bleed unless they have a background. */
background-color: #ffffff;
}
/trunk/themes/ods/logo_cnrs.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/themes/ods/logo_cnrs.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/themes/ods/fix-ie.css
New file
0,0 → 1,69
/* $Id: fix-ie.css,v 1.8.2.1 2008/02/05 09:27:26 goba Exp $ */
 
/**
* Garland, for Drupal 6.x
* Stefan Nagtegaal, iStyledThis [dot] nl
* Steven Wittens, acko [dot] net
*/
 
body {
/* Center layout */
text-align: center;
/* Allow text resizing */
font-size: 80%;
}
 
#header-region, #wrapper #container {
/* Reset text alignment */
text-align: left; /* LTR */
}
 
#wrapper #container #center {
/* Reduce amount of damage done by extremely wide content */
overflow: hidden;
}
 
#wrapper #container #center .right-corner .left-corner {
/* Because of the lack of min-height, we use height as an alternative */
height: 400px;
}
 
fieldset {
/* Don't draw backgrounds on fieldsets in IE, as they look really bad. */
background: none;
}
 
ul.primary {
/* Fix missing top margin */
position: relative; /* LTR */
/* top: 0.5em; */
}
 
/* Prevent fieldsets from shifting when changing collapsed state. */
html.js fieldset.collapsible {
position: relative;
top: -1em;
}
html.js fieldset.collapsed {
top: 0;
margin-bottom: 1em;
}
 
tr.menu-disabled {
/* Use filter to emulate CSS3 opacity */
filter: alpha(opacity=50);
}
 
#header-region {
/* Because of the lack of min-height, we use height as an alternative */
height: 1em;
}
 
tr.taxonomy-term-preview {
filter: alpha(opacity=50);
}
 
#attach-hide label, #uploadprogress div.message {
/* Fading elements in IE causes the text to bleed unless they have a background. */
background-color: #ffffff;
}
/trunk/themes/ods/node.tpl.php
New file
0,0 → 1,32
<?php
// $Id: node.tpl.php,v 1.5 2007/10/11 09:51:29 goba Exp $
?>
<div id="node-<?php print $node->nid; ?>" class="node<?php if ($sticky) { print ' sticky'; } ?><?php if (!$status) { print ' node-unpublished'; } ?>">
 
<?php print $picture ?>
 
<?php if ($page == 0): ?>
<h2><a href="<?php print $node_url ?>" title="<?php print $title ?>"><?php print $title ?></a></h2>
<?php endif; ?>
 
<?php if ($submitted): ?>
<span class="submitted"><?php print $submitted; ?></span>
<?php endif; ?>
 
<div class="content clear-block">
<?php print $content ?>
</div>
 
<div class="clear-block">
<div class="meta">
<?php if ($taxonomy): ?>
<div class="terms"><?php print $terms ?></div>
<?php endif;?>
</div>
 
<?php if ($links): ?>
<div class="links"><?php print $links; ?></div>
<?php endif; ?>
</div>
 
</div>
/trunk/themes/ods/js/ods.js
New file
0,0 → 1,18
/*$(document).ready(function() {
$('a.lien_fiche_espece').fancybox({
'autoDimension' : true,
'autoScale' : false,
'showCloseButton' : true,
'showNavArrows' : true,
'titlePosition' : 'inside',
'transitionIn' : 'fade',
'transitionOut' : 'elastic',
'cyclic' : true,
});
});*/
 
$(document).ready(function() {
$("form#user-register #edit-profile-lettre-actu").ready(function() {
$('#edit-profile-lettre-actu').attr('checked', true);
});
});
/trunk/themes/ods/js/fancybox/fancy_shadow_n.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/themes/ods/js/fancybox/fancy_shadow_n.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/themes/ods/js/fancybox/fancy_close.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/themes/ods/js/fancybox/fancy_close.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/themes/ods/js/fancybox/index.html
New file
0,0 → 1,165
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="imagetoolbar" content="no" />
<title>FancyBox 1.3.4 | Demonstration</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4/jquery.min.js"></script>
<script>
!window.jQuery && document.write('<script src="jquery-1.4.3.min.js"><\/script>');
</script>
<script type="text/javascript" src="./fancybox/jquery.mousewheel-3.0.4.pack.js"></script>
<script type="text/javascript" src="./fancybox/jquery.fancybox-1.3.4.pack.js"></script>
<link rel="stylesheet" type="text/css" href="./fancybox/jquery.fancybox-1.3.4.css" media="screen" />
<link rel="stylesheet" href="style.css" />
<script type="text/javascript">
$(document).ready(function() {
/*
* Examples - images
*/
 
$("a#example1").fancybox();
 
$("a#example2").fancybox({
'overlayShow' : false,
'transitionIn' : 'elastic',
'transitionOut' : 'elastic'
});
 
$("a#example3").fancybox({
'transitionIn' : 'none',
'transitionOut' : 'none'
});
 
$("a#example4").fancybox({
'opacity' : true,
'overlayShow' : false,
'transitionIn' : 'elastic',
'transitionOut' : 'none'
});
 
$("a#example5").fancybox();
 
$("a#example6").fancybox({
'titlePosition' : 'outside',
'overlayColor' : '#000',
'overlayOpacity' : 0.9
});
 
$("a#example7").fancybox({
'titlePosition' : 'inside'
});
 
$("a#example8").fancybox({
'titlePosition' : 'over'
});
 
$("a[rel=example_group]").fancybox({
'transitionIn' : 'none',
'transitionOut' : 'none',
'titlePosition' : 'over',
'titleFormat' : function(title, currentArray, currentIndex, currentOpts) {
return '<span id="fancybox-title-over">Image ' + (currentIndex + 1) + ' / ' + currentArray.length + (title.length ? ' &nbsp; ' + title : '') + '</span>';
}
});
 
/*
* Examples - various
*/
 
$("#various1").fancybox({
'titlePosition' : 'inside',
'transitionIn' : 'none',
'transitionOut' : 'none'
});
 
$("#various2").fancybox();
 
$("#various3").fancybox({
'width' : '75%',
'height' : '75%',
'autoScale' : false,
'transitionIn' : 'none',
'transitionOut' : 'none',
'type' : 'iframe'
});
 
$("#various4").fancybox({
'padding' : 0,
'autoScale' : false,
'transitionIn' : 'none',
'transitionOut' : 'none'
});
});
</script>
</head>
<body>
<div id="content">
<h1>fancybox <span>v1.3.4</span></h1>
 
<p>This is a demonstration. <a href="http://fancybox.net">Home page</a></p>
 
<hr />
 
<p>
Different animations<br />
 
<a id="example1" href="./example/1_b.jpg"><img alt="example1" src="./example/1_s.jpg" /></a>
 
<a id="example2" href="./example/2_b.jpg"><img alt="example2" src="./example/2_s.jpg" /></a>
 
<a id="example3" href="./example/3_b.jpg"><img alt="example3" src="./example/3_s.jpg" /></a>
<a id="example4" href="./example/4_b.jpg"><img class="last" alt="example4" src="./example/4_s.jpg" /></a>
</p>
 
<p>
Different title positions<br />
 
<a id="example5" href="./example/5_b.jpg" title="Lorem ipsum dolor sit amet, consectetur adipiscing elit."><img alt="example4" src="./example/5_s.jpg" /></a>
<a id="example6" href="./example/6_b.jpg" title="Etiam quis mi eu elit tempor facilisis id et neque. Nulla sit amet sem sapien. Vestibulum imperdiet porta ante ac ornare. Vivamus fringilla congue laoreet."><img alt="example5" src="./example/6_s.jpg" /></a>
 
<a id="example7" href="./example/7_b.jpg" title="Cras neque mi, semper at interdum id, dapibus in leo. Suspendisse nunc leo, eleifend sit amet iaculis et, cursus sed turpis."><img alt="example6" src="./example/7_s.jpg" /></a>
 
<a id="example8" href="./example/8_b.jpg" title="Sed vel sapien vel sem tempus placerat eu ut tortor. Nulla facilisi. Sed adipiscing, turpis ut cursus molestie, sem eros viverra mauris, quis sollicitudin sapien enim nec est. ras pulvinar placerat diam eu consectetur."><img class="last" alt="example7" src="./example/8_s.jpg" /></a>
</p>
 
<p>
Image gallery (ps, try using mouse scroll wheel)<br />
 
<a rel="example_group" href="./example/9_b.jpg" title="Lorem ipsum dolor sit amet"><img alt="" src="./example/9_s.jpg" /></a>
 
<a rel="example_group" href="./example/10_b.jpg" title=""><img alt="" src="./example/10_s.jpg" /></a>
 
<a rel="example_group" href="./example/11_b.jpg" title=""><img alt="" src="./example/11_s.jpg" /></a>
<a rel="example_group" href="./example/12_b.jpg" title=""><img class="last" alt="" src="./example/12_s.jpg" /></a>
</p>
 
<p>
Various examples
</p>
 
<ul>
<li><a id="various1" href="#inline1" title="Lorem ipsum dolor sit amet">Inline</a></li>
<li><a id="various2" href="ajax.txt">Ajax</a></li>
<li><a id="various3" href="http://google.ca">Iframe</a></li>
<li><a id="various4" href="http://www.adobe.com/jp/events/cs3_web_edition_tour/swfs/perform.swf">Swf</a></li>
</ul>
 
<div style="display: none;">
<div id="inline1" style="width:400px;height:100px;overflow:auto;">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Etiam quis mi eu elit tempor facilisis id et neque. Nulla sit amet sem sapien. Vestibulum imperdiet porta ante ac ornare. Nulla et lorem eu nibh adipiscing ultricies nec at lacus. Cras laoreet ultricies sem, at blandit mi eleifend aliquam. Nunc enim ipsum, vehicula non pretium varius, cursus ac tortor. Vivamus fringilla congue laoreet. Quisque ultrices sodales orci, quis rhoncus justo auctor in. Phasellus dui eros, bibendum eu feugiat ornare, faucibus eu mi. Nunc aliquet tempus sem, id aliquam diam varius ac. Maecenas nisl nunc, molestie vitae eleifend vel, iaculis sed magna. Aenean tempus lacus vitae orci posuere porttitor eget non felis. Donec lectus elit, aliquam nec eleifend sit amet, vestibulum sed nunc.
</div>
</div>
 
<p>
Ajax example will not run from your local computer and requires a server to run.
</p>
<p>
Photo Credit: <a href="http://www.flickr.com/people/kharied/">Katie Harris</a>
</p>
</div>
</body>
</html>
/trunk/themes/ods/js/fancybox/fancy_shadow_ne.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/themes/ods/js/fancybox/fancy_shadow_ne.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/themes/ods/js/fancybox/fancy_shadow_s.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/themes/ods/js/fancybox/fancy_shadow_s.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/themes/ods/js/fancybox/jquery.easing-1.3.pack.js
New file
0,0 → 1,72
/*
* jQuery Easing v1.3 - http://gsgd.co.uk/sandbox/jquery/easing/
*
* Uses the built in easing capabilities added In jQuery 1.1
* to offer multiple easing options
*
* TERMS OF USE - jQuery Easing
*
* Open source under the BSD License.
*
* Copyright © 2008 George McGinley Smith
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* Neither the name of the author nor the names of contributors may be used to endorse
* or promote products derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
 
// t: current time, b: begInnIng value, c: change In value, d: duration
eval(function(p,a,c,k,e,r){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--)r[e(c)]=k[c]||e(c);k=[function(e){return r[e]}];e=function(){return'\\w+'};c=1};while(c--)if(k[c])p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c]);return p}('h.i[\'1a\']=h.i[\'z\'];h.O(h.i,{y:\'D\',z:9(x,t,b,c,d){6 h.i[h.i.y](x,t,b,c,d)},17:9(x,t,b,c,d){6 c*(t/=d)*t+b},D:9(x,t,b,c,d){6-c*(t/=d)*(t-2)+b},13:9(x,t,b,c,d){e((t/=d/2)<1)6 c/2*t*t+b;6-c/2*((--t)*(t-2)-1)+b},X:9(x,t,b,c,d){6 c*(t/=d)*t*t+b},U:9(x,t,b,c,d){6 c*((t=t/d-1)*t*t+1)+b},R:9(x,t,b,c,d){e((t/=d/2)<1)6 c/2*t*t*t+b;6 c/2*((t-=2)*t*t+2)+b},N:9(x,t,b,c,d){6 c*(t/=d)*t*t*t+b},M:9(x,t,b,c,d){6-c*((t=t/d-1)*t*t*t-1)+b},L:9(x,t,b,c,d){e((t/=d/2)<1)6 c/2*t*t*t*t+b;6-c/2*((t-=2)*t*t*t-2)+b},K:9(x,t,b,c,d){6 c*(t/=d)*t*t*t*t+b},J:9(x,t,b,c,d){6 c*((t=t/d-1)*t*t*t*t+1)+b},I:9(x,t,b,c,d){e((t/=d/2)<1)6 c/2*t*t*t*t*t+b;6 c/2*((t-=2)*t*t*t*t+2)+b},G:9(x,t,b,c,d){6-c*8.C(t/d*(8.g/2))+c+b},15:9(x,t,b,c,d){6 c*8.n(t/d*(8.g/2))+b},12:9(x,t,b,c,d){6-c/2*(8.C(8.g*t/d)-1)+b},Z:9(x,t,b,c,d){6(t==0)?b:c*8.j(2,10*(t/d-1))+b},Y:9(x,t,b,c,d){6(t==d)?b+c:c*(-8.j(2,-10*t/d)+1)+b},W:9(x,t,b,c,d){e(t==0)6 b;e(t==d)6 b+c;e((t/=d/2)<1)6 c/2*8.j(2,10*(t-1))+b;6 c/2*(-8.j(2,-10*--t)+2)+b},V:9(x,t,b,c,d){6-c*(8.o(1-(t/=d)*t)-1)+b},S:9(x,t,b,c,d){6 c*8.o(1-(t=t/d-1)*t)+b},Q:9(x,t,b,c,d){e((t/=d/2)<1)6-c/2*(8.o(1-t*t)-1)+b;6 c/2*(8.o(1-(t-=2)*t)+1)+b},P:9(x,t,b,c,d){f s=1.l;f p=0;f a=c;e(t==0)6 b;e((t/=d)==1)6 b+c;e(!p)p=d*.3;e(a<8.w(c)){a=c;f s=p/4}m f s=p/(2*8.g)*8.r(c/a);6-(a*8.j(2,10*(t-=1))*8.n((t*d-s)*(2*8.g)/p))+b},H:9(x,t,b,c,d){f s=1.l;f p=0;f a=c;e(t==0)6 b;e((t/=d)==1)6 b+c;e(!p)p=d*.3;e(a<8.w(c)){a=c;f s=p/4}m f s=p/(2*8.g)*8.r(c/a);6 a*8.j(2,-10*t)*8.n((t*d-s)*(2*8.g)/p)+c+b},T:9(x,t,b,c,d){f s=1.l;f p=0;f a=c;e(t==0)6 b;e((t/=d/2)==2)6 b+c;e(!p)p=d*(.3*1.5);e(a<8.w(c)){a=c;f s=p/4}m f s=p/(2*8.g)*8.r(c/a);e(t<1)6-.5*(a*8.j(2,10*(t-=1))*8.n((t*d-s)*(2*8.g)/p))+b;6 a*8.j(2,-10*(t-=1))*8.n((t*d-s)*(2*8.g)/p)*.5+c+b},F:9(x,t,b,c,d,s){e(s==u)s=1.l;6 c*(t/=d)*t*((s+1)*t-s)+b},E:9(x,t,b,c,d,s){e(s==u)s=1.l;6 c*((t=t/d-1)*t*((s+1)*t+s)+1)+b},16:9(x,t,b,c,d,s){e(s==u)s=1.l;e((t/=d/2)<1)6 c/2*(t*t*(((s*=(1.B))+1)*t-s))+b;6 c/2*((t-=2)*t*(((s*=(1.B))+1)*t+s)+2)+b},A:9(x,t,b,c,d){6 c-h.i.v(x,d-t,0,c,d)+b},v:9(x,t,b,c,d){e((t/=d)<(1/2.k)){6 c*(7.q*t*t)+b}m e(t<(2/2.k)){6 c*(7.q*(t-=(1.5/2.k))*t+.k)+b}m e(t<(2.5/2.k)){6 c*(7.q*(t-=(2.14/2.k))*t+.11)+b}m{6 c*(7.q*(t-=(2.18/2.k))*t+.19)+b}},1b:9(x,t,b,c,d){e(t<d/2)6 h.i.A(x,t*2,0,c,d)*.5+b;6 h.i.v(x,t*2-d,0,c,d)*.5+c*.5+b}});',62,74,'||||||return||Math|function|||||if|var|PI|jQuery|easing|pow|75|70158|else|sin|sqrt||5625|asin|||undefined|easeOutBounce|abs||def|swing|easeInBounce|525|cos|easeOutQuad|easeOutBack|easeInBack|easeInSine|easeOutElastic|easeInOutQuint|easeOutQuint|easeInQuint|easeInOutQuart|easeOutQuart|easeInQuart|extend|easeInElastic|easeInOutCirc|easeInOutCubic|easeOutCirc|easeInOutElastic|easeOutCubic|easeInCirc|easeInOutExpo|easeInCubic|easeOutExpo|easeInExpo||9375|easeInOutSine|easeInOutQuad|25|easeOutSine|easeInOutBack|easeInQuad|625|984375|jswing|easeInOutBounce'.split('|'),0,{}))
 
/*
*
* TERMS OF USE - EASING EQUATIONS
*
* Open source under the BSD License.
*
* Copyright © 2001 Robert Penner
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* Redistributions of source code must retain the above copyright notice, this list of
* conditions and the following disclaimer.
* Redistributions in binary form must reproduce the above copyright notice, this list
* of conditions and the following disclaimer in the documentation and/or other materials
* provided with the distribution.
*
* Neither the name of the author nor the names of contributors may be used to endorse
* or promote products derived from this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY
* EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
* COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
* GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
* AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED
* OF THE POSSIBILITY OF SUCH DAMAGE.
*
*/
/trunk/themes/ods/js/fancybox/jquery-1.4.3.min.js
New file
0,0 → 1,166
/*!
* jQuery JavaScript Library v1.4.3
* http://jquery.com/
*
* Copyright 2010, John Resig
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* Includes Sizzle.js
* http://sizzlejs.com/
* Copyright 2010, The Dojo Foundation
* Released under the MIT, BSD, and GPL Licenses.
*
* Date: Thu Oct 14 23:10:06 2010 -0400
*/
(function(E,A){function U(){return false}function ba(){return true}function ja(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function Ga(a){var b,d,e=[],f=[],h,k,l,n,s,v,B,D;k=c.data(this,this.nodeType?"events":"__events__");if(typeof k==="function")k=k.events;if(!(a.liveFired===this||!k||!k.live||a.button&&a.type==="click")){if(a.namespace)D=RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)");a.liveFired=this;var H=k.live.slice(0);for(n=0;n<H.length;n++){k=H[n];k.origType.replace(X,
"")===a.type?f.push(k.selector):H.splice(n--,1)}f=c(a.target).closest(f,a.currentTarget);s=0;for(v=f.length;s<v;s++){B=f[s];for(n=0;n<H.length;n++){k=H[n];if(B.selector===k.selector&&(!D||D.test(k.namespace))){l=B.elem;h=null;if(k.preType==="mouseenter"||k.preType==="mouseleave"){a.type=k.preType;h=c(a.relatedTarget).closest(k.selector)[0]}if(!h||h!==l)e.push({elem:l,handleObj:k,level:B.level})}}}s=0;for(v=e.length;s<v;s++){f=e[s];if(d&&f.level>d)break;a.currentTarget=f.elem;a.data=f.handleObj.data;
a.handleObj=f.handleObj;D=f.handleObj.origHandler.apply(f.elem,arguments);if(D===false||a.isPropagationStopped()){d=f.level;if(D===false)b=false}}return b}}function Y(a,b){return(a&&a!=="*"?a+".":"")+b.replace(Ha,"`").replace(Ia,"&")}function ka(a,b,d){if(c.isFunction(b))return c.grep(a,function(f,h){return!!b.call(f,h,f)===d});else if(b.nodeType)return c.grep(a,function(f){return f===b===d});else if(typeof b==="string"){var e=c.grep(a,function(f){return f.nodeType===1});if(Ja.test(b))return c.filter(b,
e,!d);else b=c.filter(b,e)}return c.grep(a,function(f){return c.inArray(f,b)>=0===d})}function la(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var e=c.data(a[d++]),f=c.data(this,e);if(e=e&&e.events){delete f.handle;f.events={};for(var h in e)for(var k in e[h])c.event.add(this,h,e[h][k],e[h][k].data)}}})}function Ka(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}
function ma(a,b,d){var e=b==="width"?a.offsetWidth:a.offsetHeight;if(d==="border")return e;c.each(b==="width"?La:Ma,function(){d||(e-=parseFloat(c.css(a,"padding"+this))||0);if(d==="margin")e+=parseFloat(c.css(a,"margin"+this))||0;else e-=parseFloat(c.css(a,"border"+this+"Width"))||0});return e}function ca(a,b,d,e){if(c.isArray(b)&&b.length)c.each(b,function(f,h){d||Na.test(a)?e(a,h):ca(a+"["+(typeof h==="object"||c.isArray(h)?f:"")+"]",h,d,e)});else if(!d&&b!=null&&typeof b==="object")c.isEmptyObject(b)?
e(a,""):c.each(b,function(f,h){ca(a+"["+f+"]",h,d,e)});else e(a,b)}function S(a,b){var d={};c.each(na.concat.apply([],na.slice(0,b)),function(){d[this]=a});return d}function oa(a){if(!da[a]){var b=c("<"+a+">").appendTo("body"),d=b.css("display");b.remove();if(d==="none"||d==="")d="block";da[a]=d}return da[a]}function ea(a){return c.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var u=E.document,c=function(){function a(){if(!b.isReady){try{u.documentElement.doScroll("left")}catch(i){setTimeout(a,
1);return}b.ready()}}var b=function(i,r){return new b.fn.init(i,r)},d=E.jQuery,e=E.$,f,h=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/,k=/\S/,l=/^\s+/,n=/\s+$/,s=/\W/,v=/\d/,B=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,D=/^[\],:{}\s]*$/,H=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,w=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,G=/(?:^|:|,)(?:\s*\[)+/g,M=/(webkit)[ \/]([\w.]+)/,g=/(opera)(?:.*version)?[ \/]([\w.]+)/,j=/(msie) ([\w.]+)/,o=/(mozilla)(?:.*? rv:([\w.]+))?/,m=navigator.userAgent,p=false,
q=[],t,x=Object.prototype.toString,C=Object.prototype.hasOwnProperty,P=Array.prototype.push,N=Array.prototype.slice,R=String.prototype.trim,Q=Array.prototype.indexOf,L={};b.fn=b.prototype={init:function(i,r){var y,z,F;if(!i)return this;if(i.nodeType){this.context=this[0]=i;this.length=1;return this}if(i==="body"&&!r&&u.body){this.context=u;this[0]=u.body;this.selector="body";this.length=1;return this}if(typeof i==="string")if((y=h.exec(i))&&(y[1]||!r))if(y[1]){F=r?r.ownerDocument||r:u;if(z=B.exec(i))if(b.isPlainObject(r)){i=
[u.createElement(z[1])];b.fn.attr.call(i,r,true)}else i=[F.createElement(z[1])];else{z=b.buildFragment([y[1]],[F]);i=(z.cacheable?z.fragment.cloneNode(true):z.fragment).childNodes}return b.merge(this,i)}else{if((z=u.getElementById(y[2]))&&z.parentNode){if(z.id!==y[2])return f.find(i);this.length=1;this[0]=z}this.context=u;this.selector=i;return this}else if(!r&&!s.test(i)){this.selector=i;this.context=u;i=u.getElementsByTagName(i);return b.merge(this,i)}else return!r||r.jquery?(r||f).find(i):b(r).find(i);
else if(b.isFunction(i))return f.ready(i);if(i.selector!==A){this.selector=i.selector;this.context=i.context}return b.makeArray(i,this)},selector:"",jquery:"1.4.3",length:0,size:function(){return this.length},toArray:function(){return N.call(this,0)},get:function(i){return i==null?this.toArray():i<0?this.slice(i)[0]:this[i]},pushStack:function(i,r,y){var z=b();b.isArray(i)?P.apply(z,i):b.merge(z,i);z.prevObject=this;z.context=this.context;if(r==="find")z.selector=this.selector+(this.selector?" ":
"")+y;else if(r)z.selector=this.selector+"."+r+"("+y+")";return z},each:function(i,r){return b.each(this,i,r)},ready:function(i){b.bindReady();if(b.isReady)i.call(u,b);else q&&q.push(i);return this},eq:function(i){return i===-1?this.slice(i):this.slice(i,+i+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(N.apply(this,arguments),"slice",N.call(arguments).join(","))},map:function(i){return this.pushStack(b.map(this,function(r,y){return i.call(r,
y,r)}))},end:function(){return this.prevObject||b(null)},push:P,sort:[].sort,splice:[].splice};b.fn.init.prototype=b.fn;b.extend=b.fn.extend=function(){var i=arguments[0]||{},r=1,y=arguments.length,z=false,F,I,K,J,fa;if(typeof i==="boolean"){z=i;i=arguments[1]||{};r=2}if(typeof i!=="object"&&!b.isFunction(i))i={};if(y===r){i=this;--r}for(;r<y;r++)if((F=arguments[r])!=null)for(I in F){K=i[I];J=F[I];if(i!==J)if(z&&J&&(b.isPlainObject(J)||(fa=b.isArray(J)))){if(fa){fa=false;clone=K&&b.isArray(K)?K:[]}else clone=
K&&b.isPlainObject(K)?K:{};i[I]=b.extend(z,clone,J)}else if(J!==A)i[I]=J}return i};b.extend({noConflict:function(i){E.$=e;if(i)E.jQuery=d;return b},isReady:false,readyWait:1,ready:function(i){i===true&&b.readyWait--;if(!b.readyWait||i!==true&&!b.isReady){if(!u.body)return setTimeout(b.ready,1);b.isReady=true;if(!(i!==true&&--b.readyWait>0)){if(q){for(var r=0;i=q[r++];)i.call(u,b);q=null}b.fn.triggerHandler&&b(u).triggerHandler("ready")}}},bindReady:function(){if(!p){p=true;if(u.readyState==="complete")return setTimeout(b.ready,
1);if(u.addEventListener){u.addEventListener("DOMContentLoaded",t,false);E.addEventListener("load",b.ready,false)}else if(u.attachEvent){u.attachEvent("onreadystatechange",t);E.attachEvent("onload",b.ready);var i=false;try{i=E.frameElement==null}catch(r){}u.documentElement.doScroll&&i&&a()}}},isFunction:function(i){return b.type(i)==="function"},isArray:Array.isArray||function(i){return b.type(i)==="array"},isWindow:function(i){return i&&typeof i==="object"&&"setInterval"in i},isNaN:function(i){return i==
null||!v.test(i)||isNaN(i)},type:function(i){return i==null?String(i):L[x.call(i)]||"object"},isPlainObject:function(i){if(!i||b.type(i)!=="object"||i.nodeType||b.isWindow(i))return false;if(i.constructor&&!C.call(i,"constructor")&&!C.call(i.constructor.prototype,"isPrototypeOf"))return false;for(var r in i);return r===A||C.call(i,r)},isEmptyObject:function(i){for(var r in i)return false;return true},error:function(i){throw i;},parseJSON:function(i){if(typeof i!=="string"||!i)return null;i=b.trim(i);
if(D.test(i.replace(H,"@").replace(w,"]").replace(G,"")))return E.JSON&&E.JSON.parse?E.JSON.parse(i):(new Function("return "+i))();else b.error("Invalid JSON: "+i)},noop:function(){},globalEval:function(i){if(i&&k.test(i)){var r=u.getElementsByTagName("head")[0]||u.documentElement,y=u.createElement("script");y.type="text/javascript";if(b.support.scriptEval)y.appendChild(u.createTextNode(i));else y.text=i;r.insertBefore(y,r.firstChild);r.removeChild(y)}},nodeName:function(i,r){return i.nodeName&&i.nodeName.toUpperCase()===
r.toUpperCase()},each:function(i,r,y){var z,F=0,I=i.length,K=I===A||b.isFunction(i);if(y)if(K)for(z in i){if(r.apply(i[z],y)===false)break}else for(;F<I;){if(r.apply(i[F++],y)===false)break}else if(K)for(z in i){if(r.call(i[z],z,i[z])===false)break}else for(y=i[0];F<I&&r.call(y,F,y)!==false;y=i[++F]);return i},trim:R?function(i){return i==null?"":R.call(i)}:function(i){return i==null?"":i.toString().replace(l,"").replace(n,"")},makeArray:function(i,r){var y=r||[];if(i!=null){var z=b.type(i);i.length==
null||z==="string"||z==="function"||z==="regexp"||b.isWindow(i)?P.call(y,i):b.merge(y,i)}return y},inArray:function(i,r){if(r.indexOf)return r.indexOf(i);for(var y=0,z=r.length;y<z;y++)if(r[y]===i)return y;return-1},merge:function(i,r){var y=i.length,z=0;if(typeof r.length==="number")for(var F=r.length;z<F;z++)i[y++]=r[z];else for(;r[z]!==A;)i[y++]=r[z++];i.length=y;return i},grep:function(i,r,y){var z=[],F;y=!!y;for(var I=0,K=i.length;I<K;I++){F=!!r(i[I],I);y!==F&&z.push(i[I])}return z},map:function(i,
r,y){for(var z=[],F,I=0,K=i.length;I<K;I++){F=r(i[I],I,y);if(F!=null)z[z.length]=F}return z.concat.apply([],z)},guid:1,proxy:function(i,r,y){if(arguments.length===2)if(typeof r==="string"){y=i;i=y[r];r=A}else if(r&&!b.isFunction(r)){y=r;r=A}if(!r&&i)r=function(){return i.apply(y||this,arguments)};if(i)r.guid=i.guid=i.guid||r.guid||b.guid++;return r},access:function(i,r,y,z,F,I){var K=i.length;if(typeof r==="object"){for(var J in r)b.access(i,J,r[J],z,F,y);return i}if(y!==A){z=!I&&z&&b.isFunction(y);
for(J=0;J<K;J++)F(i[J],r,z?y.call(i[J],J,F(i[J],r)):y,I);return i}return K?F(i[0],r):A},now:function(){return(new Date).getTime()},uaMatch:function(i){i=i.toLowerCase();i=M.exec(i)||g.exec(i)||j.exec(i)||i.indexOf("compatible")<0&&o.exec(i)||[];return{browser:i[1]||"",version:i[2]||"0"}},browser:{}});b.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(i,r){L["[object "+r+"]"]=r.toLowerCase()});m=b.uaMatch(m);if(m.browser){b.browser[m.browser]=true;b.browser.version=
m.version}if(b.browser.webkit)b.browser.safari=true;if(Q)b.inArray=function(i,r){return Q.call(r,i)};if(!/\s/.test("\u00a0")){l=/^[\s\xA0]+/;n=/[\s\xA0]+$/}f=b(u);if(u.addEventListener)t=function(){u.removeEventListener("DOMContentLoaded",t,false);b.ready()};else if(u.attachEvent)t=function(){if(u.readyState==="complete"){u.detachEvent("onreadystatechange",t);b.ready()}};return E.jQuery=E.$=b}();(function(){c.support={};var a=u.documentElement,b=u.createElement("script"),d=u.createElement("div"),
e="script"+c.now();d.style.display="none";d.innerHTML=" <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";var f=d.getElementsByTagName("*"),h=d.getElementsByTagName("a")[0],k=u.createElement("select"),l=k.appendChild(u.createElement("option"));if(!(!f||!f.length||!h)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(h.getAttribute("style")),
hrefNormalized:h.getAttribute("href")==="/a",opacity:/^0.55$/.test(h.style.opacity),cssFloat:!!h.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:l.selected,optDisabled:false,checkClone:false,scriptEval:false,noCloneEvent:true,boxModel:null,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableHiddenOffsets:true};k.disabled=true;c.support.optDisabled=!l.disabled;b.type="text/javascript";try{b.appendChild(u.createTextNode("window."+e+"=1;"))}catch(n){}a.insertBefore(b,
a.firstChild);if(E[e]){c.support.scriptEval=true;delete E[e]}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function s(){c.support.noCloneEvent=false;d.detachEvent("onclick",s)});d.cloneNode(true).fireEvent("onclick")}d=u.createElement("div");d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";a=u.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var s=u.createElement("div");
s.style.width=s.style.paddingLeft="1px";u.body.appendChild(s);c.boxModel=c.support.boxModel=s.offsetWidth===2;if("zoom"in s.style){s.style.display="inline";s.style.zoom=1;c.support.inlineBlockNeedsLayout=s.offsetWidth===2;s.style.display="";s.innerHTML="<div style='width:4px;'></div>";c.support.shrinkWrapBlocks=s.offsetWidth!==2}s.innerHTML="<table><tr><td style='padding:0;display:none'></td><td>t</td></tr></table>";var v=s.getElementsByTagName("td");c.support.reliableHiddenOffsets=v[0].offsetHeight===
0;v[0].style.display="";v[1].style.display="none";c.support.reliableHiddenOffsets=c.support.reliableHiddenOffsets&&v[0].offsetHeight===0;s.innerHTML="";u.body.removeChild(s).style.display="none"});a=function(s){var v=u.createElement("div");s="on"+s;var B=s in v;if(!B){v.setAttribute(s,"return;");B=typeof v[s]==="function"}return B};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=f=h=null}})();c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",
cellspacing:"cellSpacing",rowspan:"rowSpan",colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};var pa={},Oa=/^(?:\{.*\}|\[.*\])$/;c.extend({cache:{},uuid:0,expando:"jQuery"+c.now(),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},data:function(a,b,d){if(c.acceptData(a)){a=a==E?pa:a;var e=a.nodeType,f=e?a[c.expando]:null,h=c.cache;if(!(e&&!f&&typeof b==="string"&&d===A)){if(e)f||(a[c.expando]=f=++c.uuid);else h=a;if(typeof b==="object")if(e)h[f]=
c.extend(h[f],b);else c.extend(h,b);else if(e&&!h[f])h[f]={};a=e?h[f]:h;if(d!==A)a[b]=d;return typeof b==="string"?a[b]:a}}},removeData:function(a,b){if(c.acceptData(a)){a=a==E?pa:a;var d=a.nodeType,e=d?a[c.expando]:a,f=c.cache,h=d?f[e]:e;if(b){if(h){delete h[b];d&&c.isEmptyObject(h)&&c.removeData(a)}}else if(d&&c.support.deleteExpando)delete a[c.expando];else if(a.removeAttribute)a.removeAttribute(c.expando);else if(d)delete f[e];else for(var k in a)delete a[k]}},acceptData:function(a){if(a.nodeName){var b=
c.noData[a.nodeName.toLowerCase()];if(b)return!(b===true||a.getAttribute("classid")!==b)}return true}});c.fn.extend({data:function(a,b){if(typeof a==="undefined")return this.length?c.data(this[0]):null;else if(typeof a==="object")return this.each(function(){c.data(this,a)});var d=a.split(".");d[1]=d[1]?"."+d[1]:"";if(b===A){var e=this.triggerHandler("getData"+d[1]+"!",[d[0]]);if(e===A&&this.length){e=c.data(this[0],a);if(e===A&&this[0].nodeType===1){e=this[0].getAttribute("data-"+a);if(typeof e===
"string")try{e=e==="true"?true:e==="false"?false:e==="null"?null:!c.isNaN(e)?parseFloat(e):Oa.test(e)?c.parseJSON(e):e}catch(f){}else e=A}}return e===A&&d[1]?this.data(d[0]):e}else return this.each(function(){var h=c(this),k=[d[0],b];h.triggerHandler("setData"+d[1]+"!",k);c.data(this,a,b);h.triggerHandler("changeData"+d[1]+"!",k)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var e=c.data(a,b);if(!d)return e||
[];if(!e||c.isArray(d))e=c.data(a,b,c.makeArray(d));else e.push(d);return e}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),e=d.shift();if(e==="inprogress")e=d.shift();if(e){b==="fx"&&d.unshift("inprogress");e.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===A)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,
a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var qa=/[\n\t]/g,ga=/\s+/,Pa=/\r/g,Qa=/^(?:href|src|style)$/,Ra=/^(?:button|input)$/i,Sa=/^(?:button|input|object|select|textarea)$/i,Ta=/^a(?:rea)?$/i,ra=/^(?:radio|checkbox)$/i;c.fn.extend({attr:function(a,b){return c.access(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,
a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(s){var v=c(this);v.addClass(a.call(this,s,v.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ga),d=0,e=this.length;d<e;d++){var f=this[d];if(f.nodeType===1)if(f.className){for(var h=" "+f.className+" ",k=f.className,l=0,n=b.length;l<n;l++)if(h.indexOf(" "+b[l]+" ")<0)k+=" "+b[l];f.className=c.trim(k)}else f.className=a}return this},removeClass:function(a){if(c.isFunction(a))return this.each(function(n){var s=
c(this);s.removeClass(a.call(this,n,s.attr("class")))});if(a&&typeof a==="string"||a===A)for(var b=(a||"").split(ga),d=0,e=this.length;d<e;d++){var f=this[d];if(f.nodeType===1&&f.className)if(a){for(var h=(" "+f.className+" ").replace(qa," "),k=0,l=b.length;k<l;k++)h=h.replace(" "+b[k]+" "," ");f.className=c.trim(h)}else f.className=""}return this},toggleClass:function(a,b){var d=typeof a,e=typeof b==="boolean";if(c.isFunction(a))return this.each(function(f){var h=c(this);h.toggleClass(a.call(this,
f,h.attr("class"),b),b)});return this.each(function(){if(d==="string")for(var f,h=0,k=c(this),l=b,n=a.split(ga);f=n[h++];){l=e?l:!k.hasClass(f);k[l?"addClass":"removeClass"](f)}else if(d==="undefined"||d==="boolean"){this.className&&c.data(this,"__className__",this.className);this.className=this.className||a===false?"":c.data(this,"__className__")||""}})},hasClass:function(a){a=" "+a+" ";for(var b=0,d=this.length;b<d;b++)if((" "+this[b].className+" ").replace(qa," ").indexOf(a)>-1)return true;return false},
val:function(a){if(!arguments.length){var b=this[0];if(b){if(c.nodeName(b,"option")){var d=b.attributes.value;return!d||d.specified?b.value:b.text}if(c.nodeName(b,"select")){var e=b.selectedIndex;d=[];var f=b.options;b=b.type==="select-one";if(e<0)return null;var h=b?e:0;for(e=b?e+1:f.length;h<e;h++){var k=f[h];if(k.selected&&(c.support.optDisabled?!k.disabled:k.getAttribute("disabled")===null)&&(!k.parentNode.disabled||!c.nodeName(k.parentNode,"optgroup"))){a=c(k).val();if(b)return a;d.push(a)}}return d}if(ra.test(b.type)&&
!c.support.checkOn)return b.getAttribute("value")===null?"on":b.value;return(b.value||"").replace(Pa,"")}return A}var l=c.isFunction(a);return this.each(function(n){var s=c(this),v=a;if(this.nodeType===1){if(l)v=a.call(this,n,s.val());if(v==null)v="";else if(typeof v==="number")v+="";else if(c.isArray(v))v=c.map(v,function(D){return D==null?"":D+""});if(c.isArray(v)&&ra.test(this.type))this.checked=c.inArray(s.val(),v)>=0;else if(c.nodeName(this,"select")){var B=c.makeArray(v);c("option",this).each(function(){this.selected=
c.inArray(c(this).val(),B)>=0});if(!B.length)this.selectedIndex=-1}else this.value=v}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},attr:function(a,b,d,e){if(!a||a.nodeType===3||a.nodeType===8)return A;if(e&&b in c.attrFn)return c(a)[b](d);e=a.nodeType!==1||!c.isXMLDoc(a);var f=d!==A;b=e&&c.props[b]||b;if(a.nodeType===1){var h=Qa.test(b);if((b in a||a[b]!==A)&&e&&!h){if(f){b==="type"&&Ra.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");
if(d===null)a.nodeType===1&&a.removeAttribute(b);else a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&b.specified?b.value:Sa.test(a.nodeName)||Ta.test(a.nodeName)&&a.href?0:A;return a[b]}if(!c.support.style&&e&&b==="style"){if(f)a.style.cssText=""+d;return a.style.cssText}f&&a.setAttribute(b,""+d);if(!a.attributes[b]&&a.hasAttribute&&!a.hasAttribute(b))return A;a=!c.support.hrefNormalized&&e&&
h?a.getAttribute(b,2):a.getAttribute(b);return a===null?A:a}}});var X=/\.(.*)$/,ha=/^(?:textarea|input|select)$/i,Ha=/\./g,Ia=/ /g,Ua=/[^\w\s.|`]/g,Va=function(a){return a.replace(Ua,"\\$&")},sa={focusin:0,focusout:0};c.event={add:function(a,b,d,e){if(!(a.nodeType===3||a.nodeType===8)){if(c.isWindow(a)&&a!==E&&!a.frameElement)a=E;if(d===false)d=U;var f,h;if(d.handler){f=d;d=f.handler}if(!d.guid)d.guid=c.guid++;if(h=c.data(a)){var k=a.nodeType?"events":"__events__",l=h[k],n=h.handle;if(typeof l===
"function"){n=l.handle;l=l.events}else if(!l){a.nodeType||(h[k]=h=function(){});h.events=l={}}if(!n)h.handle=n=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(n.elem,arguments):A};n.elem=a;b=b.split(" ");for(var s=0,v;k=b[s++];){h=f?c.extend({},f):{handler:d,data:e};if(k.indexOf(".")>-1){v=k.split(".");k=v.shift();h.namespace=v.slice(0).sort().join(".")}else{v=[];h.namespace=""}h.type=k;if(!h.guid)h.guid=d.guid;var B=l[k],D=c.event.special[k]||{};if(!B){B=l[k]=[];
if(!D.setup||D.setup.call(a,e,v,n)===false)if(a.addEventListener)a.addEventListener(k,n,false);else a.attachEvent&&a.attachEvent("on"+k,n)}if(D.add){D.add.call(a,h);if(!h.handler.guid)h.handler.guid=d.guid}B.push(h);c.event.global[k]=true}a=null}}},global:{},remove:function(a,b,d,e){if(!(a.nodeType===3||a.nodeType===8)){if(d===false)d=U;var f,h,k=0,l,n,s,v,B,D,H=a.nodeType?"events":"__events__",w=c.data(a),G=w&&w[H];if(w&&G){if(typeof G==="function"){w=G;G=G.events}if(b&&b.type){d=b.handler;b=b.type}if(!b||
typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(f in G)c.event.remove(a,f+b)}else{for(b=b.split(" ");f=b[k++];){v=f;l=f.indexOf(".")<0;n=[];if(!l){n=f.split(".");f=n.shift();s=RegExp("(^|\\.)"+c.map(n.slice(0).sort(),Va).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(B=G[f])if(d){v=c.event.special[f]||{};for(h=e||0;h<B.length;h++){D=B[h];if(d.guid===D.guid){if(l||s.test(D.namespace)){e==null&&B.splice(h--,1);v.remove&&v.remove.call(a,D)}if(e!=null)break}}if(B.length===0||e!=null&&B.length===1){if(!v.teardown||
v.teardown.call(a,n)===false)c.removeEvent(a,f,w.handle);delete G[f]}}else for(h=0;h<B.length;h++){D=B[h];if(l||s.test(D.namespace)){c.event.remove(a,v,D.handler,h);B.splice(h--,1)}}}if(c.isEmptyObject(G)){if(b=w.handle)b.elem=null;delete w.events;delete w.handle;if(typeof w==="function")c.removeData(a,H);else c.isEmptyObject(w)&&c.removeData(a)}}}}},trigger:function(a,b,d,e){var f=a.type||a;if(!e){a=typeof a==="object"?a[c.expando]?a:c.extend(c.Event(f),a):c.Event(f);if(f.indexOf("!")>=0){a.type=
f=f.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[f]&&c.each(c.cache,function(){this.events&&this.events[f]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===8)return A;a.result=A;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(e=d.nodeType?c.data(d,"handle"):(c.data(d,"__events__")||{}).handle)&&e.apply(d,b);e=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+f]&&d["on"+f].apply(d,b)===
false){a.result=false;a.preventDefault()}}catch(h){}if(!a.isPropagationStopped()&&e)c.event.trigger(a,b,e,true);else if(!a.isDefaultPrevented()){e=a.target;var k,l=f.replace(X,""),n=c.nodeName(e,"a")&&l==="click",s=c.event.special[l]||{};if((!s._default||s._default.call(d,a)===false)&&!n&&!(e&&e.nodeName&&c.noData[e.nodeName.toLowerCase()])){try{if(e[l]){if(k=e["on"+l])e["on"+l]=null;c.event.triggered=true;e[l]()}}catch(v){}if(k)e["on"+l]=k;c.event.triggered=false}}},handle:function(a){var b,d,e;
d=[];var f,h=c.makeArray(arguments);a=h[0]=c.event.fix(a||E.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive;if(!b){e=a.type.split(".");a.type=e.shift();d=e.slice(0).sort();e=RegExp("(^|\\.)"+d.join("\\.(?:.*\\.)?")+"(\\.|$)")}a.namespace=a.namespace||d.join(".");f=c.data(this,this.nodeType?"events":"__events__");if(typeof f==="function")f=f.events;d=(f||{})[a.type];if(f&&d){d=d.slice(0);f=0;for(var k=d.length;f<k;f++){var l=d[f];if(b||e.test(l.namespace)){a.handler=l.handler;a.data=
l.data;a.handleObj=l;l=l.handler.apply(this,h);if(l!==A){a.result=l;if(l===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}}return a.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
fix:function(a){if(a[c.expando])return a;var b=a;a=c.Event(b);for(var d=this.props.length,e;d;){e=this.props[--d];a[e]=b[e]}if(!a.target)a.target=a.srcElement||u;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=u.documentElement;d=u.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop||
d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(a.which==null&&(a.charCode!=null||a.keyCode!=null))a.which=a.charCode!=null?a.charCode:a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==A)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1E8,proxy:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a){c.event.add(this,Y(a.origType,a.selector),c.extend({},a,{handler:Ga,guid:a.handler.guid}))},remove:function(a){c.event.remove(this,
Y(a.origType,a.selector),a)}},beforeunload:{setup:function(a,b,d){if(c.isWindow(this))this.onbeforeunload=d},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};c.removeEvent=u.removeEventListener?function(a,b,d){a.removeEventListener&&a.removeEventListener(b,d,false)}:function(a,b,d){a.detachEvent&&a.detachEvent("on"+b,d)};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type){this.originalEvent=a;this.type=a.type}else this.type=a;this.timeStamp=
c.now();this[c.expando]=true};c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=ba;var a=this.originalEvent;if(a)if(a.preventDefault)a.preventDefault();else a.returnValue=false},stopPropagation:function(){this.isPropagationStopped=ba;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=ba;this.stopPropagation()},isDefaultPrevented:U,isPropagationStopped:U,isImmediatePropagationStopped:U};
var ta=function(a){var b=a.relatedTarget;try{for(;b&&b!==this;)b=b.parentNode;if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}}catch(d){}},ua=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?ua:ta,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?ua:ta)}}});if(!c.support.submitBubbles)c.event.special.submit={setup:function(){if(this.nodeName.toLowerCase()!==
"form"){c.event.add(this,"click.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="submit"||d==="image")&&c(b).closest("form").length){a.liveFired=A;return ja("submit",this,arguments)}});c.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="text"||d==="password")&&c(b).closest("form").length&&a.keyCode===13){a.liveFired=A;return ja("submit",this,arguments)}})}else return false},teardown:function(){c.event.remove(this,".specialSubmit")}};if(!c.support.changeBubbles){var V,
va=function(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex>-1?c.map(a.options,function(e){return e.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},Z=function(a,b){var d=a.target,e,f;if(!(!ha.test(d.nodeName)||d.readOnly)){e=c.data(d,"_change_data");f=va(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",f);if(!(e===A||f===e))if(e!=null||f){a.type="change";a.liveFired=
A;return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:Z,beforedeactivate:Z,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return Z.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return Z.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a,"_change_data",va(a))}},setup:function(){if(this.type===
"file")return false;for(var a in V)c.event.add(this,a+".specialChange",V[a]);return ha.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return ha.test(this.nodeName)}};V=c.event.special.change.filters;V.focus=V.beforeactivate}u.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(e){e=c.event.fix(e);e.type=b;return c.event.trigger(e,null,e.target)}c.event.special[b]={setup:function(){sa[b]++===0&&u.addEventListener(a,d,true)},teardown:function(){--sa[b]===
0&&u.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,e,f){if(typeof d==="object"){for(var h in d)this[b](h,e,d[h],f);return this}if(c.isFunction(e)||e===false){f=e;e=A}var k=b==="one"?c.proxy(f,function(n){c(this).unbind(n,k);return f.apply(this,arguments)}):f;if(d==="unload"&&b!=="one")this.one(d,e,f);else{h=0;for(var l=this.length;h<l;h++)c.event.add(this[h],d,k,e)}return this}});c.fn.extend({unbind:function(a,b){if(typeof a==="object"&&!a.preventDefault)for(var d in a)this.unbind(d,
a[d]);else{d=0;for(var e=this.length;d<e;d++)c.event.remove(this[d],a,b)}return this},delegate:function(a,b,d,e){return this.live(b,d,e,a)},undelegate:function(a,b,d){return arguments.length===0?this.unbind("live"):this.die(b,null,d,a)},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){var d=c.Event(a);d.preventDefault();d.stopPropagation();c.event.trigger(d,b,this[0]);return d.result}},toggle:function(a){for(var b=arguments,d=
1;d<b.length;)c.proxy(a,b[d++]);return this.click(c.proxy(a,function(e){var f=(c.data(this,"lastToggle"+a.guid)||0)%d;c.data(this,"lastToggle"+a.guid,f+1);e.preventDefault();return b[f].apply(this,arguments)||false}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var wa={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};c.each(["live","die"],function(a,b){c.fn[b]=function(d,e,f,h){var k,l=0,n,s,v=h||this.selector;h=h?this:c(this.context);if(typeof d===
"object"&&!d.preventDefault){for(k in d)h[b](k,e,d[k],v);return this}if(c.isFunction(e)){f=e;e=A}for(d=(d||"").split(" ");(k=d[l++])!=null;){n=X.exec(k);s="";if(n){s=n[0];k=k.replace(X,"")}if(k==="hover")d.push("mouseenter"+s,"mouseleave"+s);else{n=k;if(k==="focus"||k==="blur"){d.push(wa[k]+s);k+=s}else k=(wa[k]||k)+s;if(b==="live"){s=0;for(var B=h.length;s<B;s++)c.event.add(h[s],"live."+Y(k,v),{data:e,selector:v,handler:f,origType:k,origHandler:f,preType:n})}else h.unbind("live."+Y(k,v),f)}}return this}});
c.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),function(a,b){c.fn[b]=function(d,e){if(e==null){e=d;d=null}return arguments.length>0?this.bind(b,d,e):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});E.attachEvent&&!E.addEventListener&&c(E).bind("unload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}});
(function(){function a(g,j,o,m,p,q){p=0;for(var t=m.length;p<t;p++){var x=m[p];if(x){x=x[g];for(var C=false;x;){if(x.sizcache===o){C=m[x.sizset];break}if(x.nodeType===1&&!q){x.sizcache=o;x.sizset=p}if(x.nodeName.toLowerCase()===j){C=x;break}x=x[g]}m[p]=C}}}function b(g,j,o,m,p,q){p=0;for(var t=m.length;p<t;p++){var x=m[p];if(x){x=x[g];for(var C=false;x;){if(x.sizcache===o){C=m[x.sizset];break}if(x.nodeType===1){if(!q){x.sizcache=o;x.sizset=p}if(typeof j!=="string"){if(x===j){C=true;break}}else if(l.filter(j,
[x]).length>0){C=x;break}}x=x[g]}m[p]=C}}}var d=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,e=0,f=Object.prototype.toString,h=false,k=true;[0,0].sort(function(){k=false;return 0});var l=function(g,j,o,m){o=o||[];var p=j=j||u;if(j.nodeType!==1&&j.nodeType!==9)return[];if(!g||typeof g!=="string")return o;var q=[],t,x,C,P,N=true,R=l.isXML(j),Q=g,L;do{d.exec("");if(t=d.exec(Q)){Q=t[3];q.push(t[1]);if(t[2]){P=t[3];
break}}}while(t);if(q.length>1&&s.exec(g))if(q.length===2&&n.relative[q[0]])x=M(q[0]+q[1],j);else for(x=n.relative[q[0]]?[j]:l(q.shift(),j);q.length;){g=q.shift();if(n.relative[g])g+=q.shift();x=M(g,x)}else{if(!m&&q.length>1&&j.nodeType===9&&!R&&n.match.ID.test(q[0])&&!n.match.ID.test(q[q.length-1])){t=l.find(q.shift(),j,R);j=t.expr?l.filter(t.expr,t.set)[0]:t.set[0]}if(j){t=m?{expr:q.pop(),set:D(m)}:l.find(q.pop(),q.length===1&&(q[0]==="~"||q[0]==="+")&&j.parentNode?j.parentNode:j,R);x=t.expr?l.filter(t.expr,
t.set):t.set;if(q.length>0)C=D(x);else N=false;for(;q.length;){t=L=q.pop();if(n.relative[L])t=q.pop();else L="";if(t==null)t=j;n.relative[L](C,t,R)}}else C=[]}C||(C=x);C||l.error(L||g);if(f.call(C)==="[object Array]")if(N)if(j&&j.nodeType===1)for(g=0;C[g]!=null;g++){if(C[g]&&(C[g]===true||C[g].nodeType===1&&l.contains(j,C[g])))o.push(x[g])}else for(g=0;C[g]!=null;g++)C[g]&&C[g].nodeType===1&&o.push(x[g]);else o.push.apply(o,C);else D(C,o);if(P){l(P,p,o,m);l.uniqueSort(o)}return o};l.uniqueSort=function(g){if(w){h=
k;g.sort(w);if(h)for(var j=1;j<g.length;j++)g[j]===g[j-1]&&g.splice(j--,1)}return g};l.matches=function(g,j){return l(g,null,null,j)};l.matchesSelector=function(g,j){return l(j,null,null,[g]).length>0};l.find=function(g,j,o){var m;if(!g)return[];for(var p=0,q=n.order.length;p<q;p++){var t=n.order[p],x;if(x=n.leftMatch[t].exec(g)){var C=x[1];x.splice(1,1);if(C.substr(C.length-1)!=="\\"){x[1]=(x[1]||"").replace(/\\/g,"");m=n.find[t](x,j,o);if(m!=null){g=g.replace(n.match[t],"");break}}}}m||(m=j.getElementsByTagName("*"));
return{set:m,expr:g}};l.filter=function(g,j,o,m){for(var p=g,q=[],t=j,x,C,P=j&&j[0]&&l.isXML(j[0]);g&&j.length;){for(var N in n.filter)if((x=n.leftMatch[N].exec(g))!=null&&x[2]){var R=n.filter[N],Q,L;L=x[1];C=false;x.splice(1,1);if(L.substr(L.length-1)!=="\\"){if(t===q)q=[];if(n.preFilter[N])if(x=n.preFilter[N](x,t,o,q,m,P)){if(x===true)continue}else C=Q=true;if(x)for(var i=0;(L=t[i])!=null;i++)if(L){Q=R(L,x,i,t);var r=m^!!Q;if(o&&Q!=null)if(r)C=true;else t[i]=false;else if(r){q.push(L);C=true}}if(Q!==
A){o||(t=q);g=g.replace(n.match[N],"");if(!C)return[];break}}}if(g===p)if(C==null)l.error(g);else break;p=g}return t};l.error=function(g){throw"Syntax error, unrecognized expression: "+g;};var n=l.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+\-]*)\))?/,
POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(g){return g.getAttribute("href")}},relative:{"+":function(g,j){var o=typeof j==="string",m=o&&!/\W/.test(j);o=o&&!m;if(m)j=j.toLowerCase();m=0;for(var p=g.length,q;m<p;m++)if(q=g[m]){for(;(q=q.previousSibling)&&q.nodeType!==1;);g[m]=o||q&&q.nodeName.toLowerCase()===
j?q||false:q===j}o&&l.filter(j,g,true)},">":function(g,j){var o=typeof j==="string",m,p=0,q=g.length;if(o&&!/\W/.test(j))for(j=j.toLowerCase();p<q;p++){if(m=g[p]){o=m.parentNode;g[p]=o.nodeName.toLowerCase()===j?o:false}}else{for(;p<q;p++)if(m=g[p])g[p]=o?m.parentNode:m.parentNode===j;o&&l.filter(j,g,true)}},"":function(g,j,o){var m=e++,p=b,q;if(typeof j==="string"&&!/\W/.test(j)){q=j=j.toLowerCase();p=a}p("parentNode",j,m,g,q,o)},"~":function(g,j,o){var m=e++,p=b,q;if(typeof j==="string"&&!/\W/.test(j)){q=
j=j.toLowerCase();p=a}p("previousSibling",j,m,g,q,o)}},find:{ID:function(g,j,o){if(typeof j.getElementById!=="undefined"&&!o)return(g=j.getElementById(g[1]))&&g.parentNode?[g]:[]},NAME:function(g,j){if(typeof j.getElementsByName!=="undefined"){for(var o=[],m=j.getElementsByName(g[1]),p=0,q=m.length;p<q;p++)m[p].getAttribute("name")===g[1]&&o.push(m[p]);return o.length===0?null:o}},TAG:function(g,j){return j.getElementsByTagName(g[1])}},preFilter:{CLASS:function(g,j,o,m,p,q){g=" "+g[1].replace(/\\/g,
"")+" ";if(q)return g;q=0;for(var t;(t=j[q])!=null;q++)if(t)if(p^(t.className&&(" "+t.className+" ").replace(/[\t\n]/g," ").indexOf(g)>=0))o||m.push(t);else if(o)j[q]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},CHILD:function(g){if(g[1]==="nth"){var j=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=j[1]+(j[2]||1)-0;g[3]=j[3]-0}g[0]=e++;return g},ATTR:function(g,j,o,
m,p,q){j=g[1].replace(/\\/g,"");if(!q&&n.attrMap[j])g[1]=n.attrMap[j];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,j,o,m,p){if(g[1]==="not")if((d.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=l(g[3],null,null,j);else{g=l.filter(g[3],j,o,true^p);o||m.push.apply(m,g);return false}else if(n.match.POS.test(g[0])||n.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===
true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,j,o){return!!l(o[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===
g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},setFilters:{first:function(g,j){return j===0},last:function(g,j,o,m){return j===m.length-1},even:function(g,j){return j%2===0},odd:function(g,j){return j%2===1},lt:function(g,j,o){return j<o[3]-0},gt:function(g,j,o){return j>o[3]-0},nth:function(g,j,o){return o[3]-
0===j},eq:function(g,j,o){return o[3]-0===j}},filter:{PSEUDO:function(g,j,o,m){var p=j[1],q=n.filters[p];if(q)return q(g,o,j,m);else if(p==="contains")return(g.textContent||g.innerText||l.getText([g])||"").indexOf(j[3])>=0;else if(p==="not"){j=j[3];o=0;for(m=j.length;o<m;o++)if(j[o]===g)return false;return true}else l.error("Syntax error, unrecognized expression: "+p)},CHILD:function(g,j){var o=j[1],m=g;switch(o){case "only":case "first":for(;m=m.previousSibling;)if(m.nodeType===1)return false;if(o===
"first")return true;m=g;case "last":for(;m=m.nextSibling;)if(m.nodeType===1)return false;return true;case "nth":o=j[2];var p=j[3];if(o===1&&p===0)return true;var q=j[0],t=g.parentNode;if(t&&(t.sizcache!==q||!g.nodeIndex)){var x=0;for(m=t.firstChild;m;m=m.nextSibling)if(m.nodeType===1)m.nodeIndex=++x;t.sizcache=q}m=g.nodeIndex-p;return o===0?m===0:m%o===0&&m/o>=0}},ID:function(g,j){return g.nodeType===1&&g.getAttribute("id")===j},TAG:function(g,j){return j==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===
j},CLASS:function(g,j){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(j)>-1},ATTR:function(g,j){var o=j[1];o=n.attrHandle[o]?n.attrHandle[o](g):g[o]!=null?g[o]:g.getAttribute(o);var m=o+"",p=j[2],q=j[4];return o==null?p==="!=":p==="="?m===q:p==="*="?m.indexOf(q)>=0:p==="~="?(" "+m+" ").indexOf(q)>=0:!q?m&&o!==false:p==="!="?m!==q:p==="^="?m.indexOf(q)===0:p==="$="?m.substr(m.length-q.length)===q:p==="|="?m===q||m.substr(0,q.length+1)===q+"-":false},POS:function(g,j,o,m){var p=n.setFilters[j[2]];
if(p)return p(g,o,j,m)}}},s=n.match.POS,v=function(g,j){return"\\"+(j-0+1)},B;for(B in n.match){n.match[B]=RegExp(n.match[B].source+/(?![^\[]*\])(?![^\(]*\))/.source);n.leftMatch[B]=RegExp(/(^(?:.|\r|\n)*?)/.source+n.match[B].source.replace(/\\(\d+)/g,v))}var D=function(g,j){g=Array.prototype.slice.call(g,0);if(j){j.push.apply(j,g);return j}return g};try{Array.prototype.slice.call(u.documentElement.childNodes,0)}catch(H){D=function(g,j){var o=j||[],m=0;if(f.call(g)==="[object Array]")Array.prototype.push.apply(o,
g);else if(typeof g.length==="number")for(var p=g.length;m<p;m++)o.push(g[m]);else for(;g[m];m++)o.push(g[m]);return o}}var w,G;if(u.documentElement.compareDocumentPosition)w=function(g,j){if(g===j){h=true;return 0}if(!g.compareDocumentPosition||!j.compareDocumentPosition)return g.compareDocumentPosition?-1:1;return g.compareDocumentPosition(j)&4?-1:1};else{w=function(g,j){var o=[],m=[],p=g.parentNode,q=j.parentNode,t=p;if(g===j){h=true;return 0}else if(p===q)return G(g,j);else if(p){if(!q)return 1}else return-1;
for(;t;){o.unshift(t);t=t.parentNode}for(t=q;t;){m.unshift(t);t=t.parentNode}p=o.length;q=m.length;for(t=0;t<p&&t<q;t++)if(o[t]!==m[t])return G(o[t],m[t]);return t===p?G(g,m[t],-1):G(o[t],j,1)};G=function(g,j,o){if(g===j)return o;for(g=g.nextSibling;g;){if(g===j)return-1;g=g.nextSibling}return 1}}l.getText=function(g){for(var j="",o,m=0;g[m];m++){o=g[m];if(o.nodeType===3||o.nodeType===4)j+=o.nodeValue;else if(o.nodeType!==8)j+=l.getText(o.childNodes)}return j};(function(){var g=u.createElement("div"),
j="script"+(new Date).getTime();g.innerHTML="<a name='"+j+"'/>";var o=u.documentElement;o.insertBefore(g,o.firstChild);if(u.getElementById(j)){n.find.ID=function(m,p,q){if(typeof p.getElementById!=="undefined"&&!q)return(p=p.getElementById(m[1]))?p.id===m[1]||typeof p.getAttributeNode!=="undefined"&&p.getAttributeNode("id").nodeValue===m[1]?[p]:A:[]};n.filter.ID=function(m,p){var q=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&q&&q.nodeValue===p}}o.removeChild(g);
o=g=null})();(function(){var g=u.createElement("div");g.appendChild(u.createComment(""));if(g.getElementsByTagName("*").length>0)n.find.TAG=function(j,o){var m=o.getElementsByTagName(j[1]);if(j[1]==="*"){for(var p=[],q=0;m[q];q++)m[q].nodeType===1&&p.push(m[q]);m=p}return m};g.innerHTML="<a href='#'></a>";if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")n.attrHandle.href=function(j){return j.getAttribute("href",2)};g=null})();u.querySelectorAll&&
function(){var g=l,j=u.createElement("div");j.innerHTML="<p class='TEST'></p>";if(!(j.querySelectorAll&&j.querySelectorAll(".TEST").length===0)){l=function(m,p,q,t){p=p||u;if(!t&&!l.isXML(p))if(p.nodeType===9)try{return D(p.querySelectorAll(m),q)}catch(x){}else if(p.nodeType===1&&p.nodeName.toLowerCase()!=="object"){var C=p.id,P=p.id="__sizzle__";try{return D(p.querySelectorAll("#"+P+" "+m),q)}catch(N){}finally{if(C)p.id=C;else p.removeAttribute("id")}}return g(m,p,q,t)};for(var o in g)l[o]=g[o];
j=null}}();(function(){var g=u.documentElement,j=g.matchesSelector||g.mozMatchesSelector||g.webkitMatchesSelector||g.msMatchesSelector,o=false;try{j.call(u.documentElement,":sizzle")}catch(m){o=true}if(j)l.matchesSelector=function(p,q){try{if(o||!n.match.PSEUDO.test(q))return j.call(p,q)}catch(t){}return l(q,null,null,[p]).length>0}})();(function(){var g=u.createElement("div");g.innerHTML="<div class='test e'></div><div class='test'></div>";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===
0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){n.order.splice(1,0,"CLASS");n.find.CLASS=function(j,o,m){if(typeof o.getElementsByClassName!=="undefined"&&!m)return o.getElementsByClassName(j[1])};g=null}}})();l.contains=u.documentElement.contains?function(g,j){return g!==j&&(g.contains?g.contains(j):true)}:function(g,j){return!!(g.compareDocumentPosition(j)&16)};l.isXML=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false};var M=function(g,
j){for(var o=[],m="",p,q=j.nodeType?[j]:j;p=n.match.PSEUDO.exec(g);){m+=p[0];g=g.replace(n.match.PSEUDO,"")}g=n.relative[g]?g+"*":g;p=0;for(var t=q.length;p<t;p++)l(g,q[p],o);return l.filter(m,o)};c.find=l;c.expr=l.selectors;c.expr[":"]=c.expr.filters;c.unique=l.uniqueSort;c.text=l.getText;c.isXMLDoc=l.isXML;c.contains=l.contains})();var Wa=/Until$/,Xa=/^(?:parents|prevUntil|prevAll)/,Ya=/,/,Ja=/^.[^:#\[\.,]*$/,Za=Array.prototype.slice,$a=c.expr.match.POS;c.fn.extend({find:function(a){for(var b=this.pushStack("",
"find",a),d=0,e=0,f=this.length;e<f;e++){d=b.length;c.find(a,this[e],b);if(e>0)for(var h=d;h<b.length;h++)for(var k=0;k<d;k++)if(b[k]===b[h]){b.splice(h--,1);break}}return b},has:function(a){var b=c(a);return this.filter(function(){for(var d=0,e=b.length;d<e;d++)if(c.contains(this,b[d]))return true})},not:function(a){return this.pushStack(ka(this,a,false),"not",a)},filter:function(a){return this.pushStack(ka(this,a,true),"filter",a)},is:function(a){return!!a&&c.filter(a,this).length>0},closest:function(a,
b){var d=[],e,f,h=this[0];if(c.isArray(a)){var k={},l,n=1;if(h&&a.length){e=0;for(f=a.length;e<f;e++){l=a[e];k[l]||(k[l]=c.expr.match.POS.test(l)?c(l,b||this.context):l)}for(;h&&h.ownerDocument&&h!==b;){for(l in k){e=k[l];if(e.jquery?e.index(h)>-1:c(h).is(e))d.push({selector:l,elem:h,level:n})}h=h.parentNode;n++}}return d}k=$a.test(a)?c(a,b||this.context):null;e=0;for(f=this.length;e<f;e++)for(h=this[e];h;)if(k?k.index(h)>-1:c.find.matchesSelector(h,a)){d.push(h);break}else{h=h.parentNode;if(!h||
!h.ownerDocument||h===b)break}d=d.length>1?c.unique(d):d;return this.pushStack(d,"closest",a)},index:function(a){if(!a||typeof a==="string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var d=typeof a==="string"?c(a,b||this.context):c.makeArray(a),e=c.merge(this.get(),d);return this.pushStack(!d[0]||!d[0].parentNode||d[0].parentNode.nodeType===11||!e[0]||!e[0].parentNode||e[0].parentNode.nodeType===11?e:c.unique(e))},andSelf:function(){return this.add(this.prevObject)}});
c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",
d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,b){c.fn[a]=function(d,e){var f=c.map(this,b,d);Wa.test(a)||(e=d);if(e&&typeof e==="string")f=c.filter(e,f);f=this.length>1?c.unique(f):f;if((this.length>1||Ya.test(e))&&Xa.test(a))f=f.reverse();return this.pushStack(f,a,Za.call(arguments).join(","))}});
c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return b.length===1?c.find.matchesSelector(b[0],a)?[b[0]]:[]:c.find.matches(a,b)},dir:function(a,b,d){var e=[];for(a=a[b];a&&a.nodeType!==9&&(d===A||a.nodeType!==1||!c(a).is(d));){a.nodeType===1&&e.push(a);a=a[b]}return e},nth:function(a,b,d){b=b||1;for(var e=0;a;a=a[d])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var xa=/ jQuery\d+="(?:\d+|null)"/g,
$=/^\s+/,ya=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,za=/<([\w:]+)/,ab=/<tbody/i,bb=/<|&#?\w+;/,Aa=/<(?:script|object|embed|option|style)/i,Ba=/checked\s*(?:[^=]|=\s*.checked.)/i,cb=/\=([^="'>\s]+\/)>/g,O={option:[1,"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],
area:[1,"<map>","</map>"],_default:[0,"",""]};O.optgroup=O.option;O.tbody=O.tfoot=O.colgroup=O.caption=O.thead;O.th=O.td;if(!c.support.htmlSerialize)O._default=[1,"div<div>","</div>"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==A)return this.empty().append((this[0]&&this[0].ownerDocument||u).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,
d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},
unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=
c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,e;(e=this[d])!=null;d++)if(!a||c.filter(a,[e]).length){if(!b&&e.nodeType===1){c.cleanData(e.getElementsByTagName("*"));
c.cleanData([e])}e.parentNode&&e.parentNode.removeChild(e)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild);return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,e=this.ownerDocument;if(!d){d=e.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(xa,"").replace(cb,'="$1">').replace($,
"")],e)[0]}else return this.cloneNode(true)});if(a===true){la(this,b);la(this.find("*"),b.find("*"))}return b},html:function(a){if(a===A)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(xa,""):null;else if(typeof a==="string"&&!Aa.test(a)&&(c.support.leadingWhitespace||!$.test(a))&&!O[(za.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(ya,"<$1></$2>");try{for(var b=0,d=this.length;b<d;b++)if(this[b].nodeType===1){c.cleanData(this[b].getElementsByTagName("*"));this[b].innerHTML=a}}catch(e){this.empty().append(a)}}else c.isFunction(a)?
this.each(function(f){var h=c(this);h.html(a.call(this,f,h.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(c.isFunction(a))return this.each(function(b){var d=c(this),e=d.html();d.replaceWith(a.call(this,b,e))});if(typeof a!=="string")a=c(a).detach();return this.each(function(){var b=this.nextSibling,d=this.parentNode;c(this).remove();b?c(b).before(a):c(d).append(a)})}else return this.pushStack(c(c.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a,
true)},domManip:function(a,b,d){var e,f,h=a[0],k=[],l;if(!c.support.checkClone&&arguments.length===3&&typeof h==="string"&&Ba.test(h))return this.each(function(){c(this).domManip(a,b,d,true)});if(c.isFunction(h))return this.each(function(s){var v=c(this);a[0]=h.call(this,s,b?v.html():A);v.domManip(a,b,d)});if(this[0]){e=h&&h.parentNode;e=c.support.parentNode&&e&&e.nodeType===11&&e.childNodes.length===this.length?{fragment:e}:c.buildFragment(a,this,k);l=e.fragment;if(f=l.childNodes.length===1?l=l.firstChild:
l.firstChild){b=b&&c.nodeName(f,"tr");f=0;for(var n=this.length;f<n;f++)d.call(b?c.nodeName(this[f],"table")?this[f].getElementsByTagName("tbody")[0]||this[f].appendChild(this[f].ownerDocument.createElement("tbody")):this[f]:this[f],f>0||e.cacheable||this.length>1?l.cloneNode(true):l)}k.length&&c.each(k,Ka)}return this}});c.buildFragment=function(a,b,d){var e,f,h;b=b&&b[0]?b[0].ownerDocument||b[0]:u;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===u&&!Aa.test(a[0])&&(c.support.checkClone||
!Ba.test(a[0]))){f=true;if(h=c.fragments[a[0]])if(h!==1)e=h}if(!e){e=b.createDocumentFragment();c.clean(a,b,e,d)}if(f)c.fragments[a[0]]=h?e:1;return{fragment:e,cacheable:f}};c.fragments={};c.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var e=[];d=c(d);var f=this.length===1&&this[0].parentNode;if(f&&f.nodeType===11&&f.childNodes.length===1&&d.length===1){d[b](this[0]);return this}else{f=0;for(var h=
d.length;f<h;f++){var k=(f>0?this.clone(true):this).get();c(d[f])[b](k);e=e.concat(k)}return this.pushStack(e,a,d.selector)}}});c.extend({clean:function(a,b,d,e){b=b||u;if(typeof b.createElement==="undefined")b=b.ownerDocument||b[0]&&b[0].ownerDocument||u;for(var f=[],h=0,k;(k=a[h])!=null;h++){if(typeof k==="number")k+="";if(k){if(typeof k==="string"&&!bb.test(k))k=b.createTextNode(k);else if(typeof k==="string"){k=k.replace(ya,"<$1></$2>");var l=(za.exec(k)||["",""])[1].toLowerCase(),n=O[l]||O._default,
s=n[0],v=b.createElement("div");for(v.innerHTML=n[1]+k+n[2];s--;)v=v.lastChild;if(!c.support.tbody){s=ab.test(k);l=l==="table"&&!s?v.firstChild&&v.firstChild.childNodes:n[1]==="<table>"&&!s?v.childNodes:[];for(n=l.length-1;n>=0;--n)c.nodeName(l[n],"tbody")&&!l[n].childNodes.length&&l[n].parentNode.removeChild(l[n])}!c.support.leadingWhitespace&&$.test(k)&&v.insertBefore(b.createTextNode($.exec(k)[0]),v.firstChild);k=v.childNodes}if(k.nodeType)f.push(k);else f=c.merge(f,k)}}if(d)for(h=0;f[h];h++)if(e&&
c.nodeName(f[h],"script")&&(!f[h].type||f[h].type.toLowerCase()==="text/javascript"))e.push(f[h].parentNode?f[h].parentNode.removeChild(f[h]):f[h]);else{f[h].nodeType===1&&f.splice.apply(f,[h+1,0].concat(c.makeArray(f[h].getElementsByTagName("script"))));d.appendChild(f[h])}return f},cleanData:function(a){for(var b,d,e=c.cache,f=c.event.special,h=c.support.deleteExpando,k=0,l;(l=a[k])!=null;k++)if(!(l.nodeName&&c.noData[l.nodeName.toLowerCase()]))if(d=l[c.expando]){if((b=e[d])&&b.events)for(var n in b.events)f[n]?
c.event.remove(l,n):c.removeEvent(l,n,b.handle);if(h)delete l[c.expando];else l.removeAttribute&&l.removeAttribute(c.expando);delete e[d]}}});var Ca=/alpha\([^)]*\)/i,db=/opacity=([^)]*)/,eb=/-([a-z])/ig,fb=/([A-Z])/g,Da=/^-?\d+(?:px)?$/i,gb=/^-?\d/,hb={position:"absolute",visibility:"hidden",display:"block"},La=["Left","Right"],Ma=["Top","Bottom"],W,ib=u.defaultView&&u.defaultView.getComputedStyle,jb=function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){if(arguments.length===2&&b===A)return this;
return c.access(this,a,b,true,function(d,e,f){return f!==A?c.style(d,e,f):c.css(d,e)})};c.extend({cssHooks:{opacity:{get:function(a,b){if(b){var d=W(a,"opacity","opacity");return d===""?"1":d}else return a.style.opacity}}},cssNumber:{zIndex:true,fontWeight:true,opacity:true,zoom:true,lineHeight:true},cssProps:{"float":c.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,d,e){if(!(!a||a.nodeType===3||a.nodeType===8||!a.style)){var f,h=c.camelCase(b),k=a.style,l=c.cssHooks[h];b=c.cssProps[h]||
h;if(d!==A){if(!(typeof d==="number"&&isNaN(d)||d==null)){if(typeof d==="number"&&!c.cssNumber[h])d+="px";if(!l||!("set"in l)||(d=l.set(a,d))!==A)try{k[b]=d}catch(n){}}}else{if(l&&"get"in l&&(f=l.get(a,false,e))!==A)return f;return k[b]}}},css:function(a,b,d){var e,f=c.camelCase(b),h=c.cssHooks[f];b=c.cssProps[f]||f;if(h&&"get"in h&&(e=h.get(a,true,d))!==A)return e;else if(W)return W(a,b,f)},swap:function(a,b,d){var e={},f;for(f in b){e[f]=a.style[f];a.style[f]=b[f]}d.call(a);for(f in b)a.style[f]=
e[f]},camelCase:function(a){return a.replace(eb,jb)}});c.curCSS=c.css;c.each(["height","width"],function(a,b){c.cssHooks[b]={get:function(d,e,f){var h;if(e){if(d.offsetWidth!==0)h=ma(d,b,f);else c.swap(d,hb,function(){h=ma(d,b,f)});return h+"px"}},set:function(d,e){if(Da.test(e)){e=parseFloat(e);if(e>=0)return e+"px"}else return e}}});if(!c.support.opacity)c.cssHooks.opacity={get:function(a,b){return db.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":
b?"1":""},set:function(a,b){var d=a.style;d.zoom=1;var e=c.isNaN(b)?"":"alpha(opacity="+b*100+")",f=d.filter||"";d.filter=Ca.test(f)?f.replace(Ca,e):d.filter+" "+e}};if(ib)W=function(a,b,d){var e;d=d.replace(fb,"-$1").toLowerCase();if(!(b=a.ownerDocument.defaultView))return A;if(b=b.getComputedStyle(a,null)){e=b.getPropertyValue(d);if(e===""&&!c.contains(a.ownerDocument.documentElement,a))e=c.style(a,d)}return e};else if(u.documentElement.currentStyle)W=function(a,b){var d,e,f=a.currentStyle&&a.currentStyle[b],
h=a.style;if(!Da.test(f)&&gb.test(f)){d=h.left;e=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;h.left=b==="fontSize"?"1em":f||0;f=h.pixelLeft+"px";h.left=d;a.runtimeStyle.left=e}return f};if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=a.offsetHeight;return a.offsetWidth===0&&b===0||!c.support.reliableHiddenOffsets&&(a.style.display||c.css(a,"display"))==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var kb=c.now(),lb=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
mb=/^(?:select|textarea)/i,nb=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,ob=/^(?:GET|HEAD|DELETE)$/,Na=/\[\]$/,T=/\=\?(&|$)/,ia=/\?/,pb=/([?&])_=[^&]*/,qb=/^(\w+:)?\/\/([^\/?#]+)/,rb=/%20/g,sb=/#.*$/,Ea=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!=="string"&&Ea)return Ea.apply(this,arguments);else if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var f=a.slice(e,a.length);a=a.slice(0,e)}e="GET";if(b)if(c.isFunction(b)){d=
b;b=null}else if(typeof b==="object"){b=c.param(b,c.ajaxSettings.traditional);e="POST"}var h=this;c.ajax({url:a,type:e,dataType:"html",data:b,complete:function(k,l){if(l==="success"||l==="notmodified")h.html(f?c("<div>").append(k.responseText.replace(lb,"")).find(f):k.responseText);d&&h.each(d,[k.responseText,l,k])}});return this},serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&
!this.disabled&&(this.checked||mb.test(this.nodeName)||nb.test(this.type))}).map(function(a,b){var d=c(this).val();return d==null?null:c.isArray(d)?c.map(d,function(e){return{name:b.name,value:e}}):{name:b.name,value:d}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,e){if(c.isFunction(b)){e=e||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:e})},
getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,e){if(c.isFunction(b)){e=e||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:e})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return new E.XMLHttpRequest},accepts:{xml:"application/xml, text/xml",html:"text/html",
script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},ajax:function(a){var b=c.extend(true,{},c.ajaxSettings,a),d,e,f,h=b.type.toUpperCase(),k=ob.test(h);b.url=b.url.replace(sb,"");b.context=a&&a.context!=null?a.context:b;if(b.data&&b.processData&&typeof b.data!=="string")b.data=c.param(b.data,b.traditional);if(b.dataType==="jsonp"){if(h==="GET")T.test(b.url)||(b.url+=(ia.test(b.url)?"&":"?")+(b.jsonp||"callback")+"=?");else if(!b.data||
!T.test(b.data))b.data=(b.data?b.data+"&":"")+(b.jsonp||"callback")+"=?";b.dataType="json"}if(b.dataType==="json"&&(b.data&&T.test(b.data)||T.test(b.url))){d=b.jsonpCallback||"jsonp"+kb++;if(b.data)b.data=(b.data+"").replace(T,"="+d+"$1");b.url=b.url.replace(T,"="+d+"$1");b.dataType="script";var l=E[d];E[d]=function(m){f=m;c.handleSuccess(b,w,e,f);c.handleComplete(b,w,e,f);if(c.isFunction(l))l(m);else{E[d]=A;try{delete E[d]}catch(p){}}v&&v.removeChild(B)}}if(b.dataType==="script"&&b.cache===null)b.cache=
false;if(b.cache===false&&h==="GET"){var n=c.now(),s=b.url.replace(pb,"$1_="+n);b.url=s+(s===b.url?(ia.test(b.url)?"&":"?")+"_="+n:"")}if(b.data&&h==="GET")b.url+=(ia.test(b.url)?"&":"?")+b.data;b.global&&c.active++===0&&c.event.trigger("ajaxStart");n=(n=qb.exec(b.url))&&(n[1]&&n[1]!==location.protocol||n[2]!==location.host);if(b.dataType==="script"&&h==="GET"&&n){var v=u.getElementsByTagName("head")[0]||u.documentElement,B=u.createElement("script");if(b.scriptCharset)B.charset=b.scriptCharset;B.src=
b.url;if(!d){var D=false;B.onload=B.onreadystatechange=function(){if(!D&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){D=true;c.handleSuccess(b,w,e,f);c.handleComplete(b,w,e,f);B.onload=B.onreadystatechange=null;v&&B.parentNode&&v.removeChild(B)}}}v.insertBefore(B,v.firstChild);return A}var H=false,w=b.xhr();if(w){b.username?w.open(h,b.url,b.async,b.username,b.password):w.open(h,b.url,b.async);try{if(b.data!=null&&!k||a&&a.contentType)w.setRequestHeader("Content-Type",
b.contentType);if(b.ifModified){c.lastModified[b.url]&&w.setRequestHeader("If-Modified-Since",c.lastModified[b.url]);c.etag[b.url]&&w.setRequestHeader("If-None-Match",c.etag[b.url])}n||w.setRequestHeader("X-Requested-With","XMLHttpRequest");w.setRequestHeader("Accept",b.dataType&&b.accepts[b.dataType]?b.accepts[b.dataType]+", */*; q=0.01":b.accepts._default)}catch(G){}if(b.beforeSend&&b.beforeSend.call(b.context,w,b)===false){b.global&&c.active--===1&&c.event.trigger("ajaxStop");w.abort();return false}b.global&&
c.triggerGlobal(b,"ajaxSend",[w,b]);var M=w.onreadystatechange=function(m){if(!w||w.readyState===0||m==="abort"){H||c.handleComplete(b,w,e,f);H=true;if(w)w.onreadystatechange=c.noop}else if(!H&&w&&(w.readyState===4||m==="timeout")){H=true;w.onreadystatechange=c.noop;e=m==="timeout"?"timeout":!c.httpSuccess(w)?"error":b.ifModified&&c.httpNotModified(w,b.url)?"notmodified":"success";var p;if(e==="success")try{f=c.httpData(w,b.dataType,b)}catch(q){e="parsererror";p=q}if(e==="success"||e==="notmodified")d||
c.handleSuccess(b,w,e,f);else c.handleError(b,w,e,p);d||c.handleComplete(b,w,e,f);m==="timeout"&&w.abort();if(b.async)w=null}};try{var g=w.abort;w.abort=function(){w&&g.call&&g.call(w);M("abort")}}catch(j){}b.async&&b.timeout>0&&setTimeout(function(){w&&!H&&M("timeout")},b.timeout);try{w.send(k||b.data==null?null:b.data)}catch(o){c.handleError(b,w,null,o);c.handleComplete(b,w,e,f)}b.async||M();return w}},param:function(a,b){var d=[],e=function(h,k){k=c.isFunction(k)?k():k;d[d.length]=encodeURIComponent(h)+
"="+encodeURIComponent(k)};if(b===A)b=c.ajaxSettings.traditional;if(c.isArray(a)||a.jquery)c.each(a,function(){e(this.name,this.value)});else for(var f in a)ca(f,a[f],b,e);return d.join("&").replace(rb,"+")}});c.extend({active:0,lastModified:{},etag:{},handleError:function(a,b,d,e){a.error&&a.error.call(a.context,b,d,e);a.global&&c.triggerGlobal(a,"ajaxError",[b,a,e])},handleSuccess:function(a,b,d,e){a.success&&a.success.call(a.context,e,d,b);a.global&&c.triggerGlobal(a,"ajaxSuccess",[b,a])},handleComplete:function(a,
b,d){a.complete&&a.complete.call(a.context,b,d);a.global&&c.triggerGlobal(a,"ajaxComplete",[b,a]);a.global&&c.active--===1&&c.event.trigger("ajaxStop")},triggerGlobal:function(a,b,d){(a.context&&a.context.url==null?c(a.context):c.event).trigger(b,d)},httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===1223}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),e=a.getResponseHeader("Etag");
if(d)c.lastModified[b]=d;if(e)c.etag[b]=e;return a.status===304},httpData:function(a,b,d){var e=a.getResponseHeader("content-type")||"",f=b==="xml"||!b&&e.indexOf("xml")>=0;a=f?a.responseXML:a.responseText;f&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b==="json"||!b&&e.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&e.indexOf("javascript")>=0)c.globalEval(a);return a}});if(E.ActiveXObject)c.ajaxSettings.xhr=
function(){if(E.location.protocol!=="file:")try{return new E.XMLHttpRequest}catch(a){}try{return new E.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}};c.support.ajax=!!c.ajaxSettings.xhr();var da={},tb=/^(?:toggle|show|hide)$/,ub=/^([+\-]=)?([\d+.\-]+)(.*)$/,aa,na=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b,d){if(a||a===0)return this.animate(S("show",3),a,b,d);else{a=
0;for(b=this.length;a<b;a++){if(!c.data(this[a],"olddisplay")&&this[a].style.display==="none")this[a].style.display="";this[a].style.display===""&&c.css(this[a],"display")==="none"&&c.data(this[a],"olddisplay",oa(this[a].nodeName))}for(a=0;a<b;a++)this[a].style.display=c.data(this[a],"olddisplay")||"";return this}},hide:function(a,b,d){if(a||a===0)return this.animate(S("hide",3),a,b,d);else{a=0;for(b=this.length;a<b;a++){d=c.css(this[a],"display");d!=="none"&&c.data(this[a],"olddisplay",d)}for(a=
0;a<b;a++)this[a].style.display="none";return this}},_toggle:c.fn.toggle,toggle:function(a,b,d){var e=typeof a==="boolean";if(c.isFunction(a)&&c.isFunction(b))this._toggle.apply(this,arguments);else a==null||e?this.each(function(){var f=e?a:c(this).is(":hidden");c(this)[f?"show":"hide"]()}):this.animate(S("toggle",3),a,b,d);return this},fadeTo:function(a,b,d,e){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,d,e)},animate:function(a,b,d,e){var f=c.speed(b,d,e);if(c.isEmptyObject(a))return this.each(f.complete);
return this[f.queue===false?"each":"queue"](function(){var h=c.extend({},f),k,l=this.nodeType===1,n=l&&c(this).is(":hidden"),s=this;for(k in a){var v=c.camelCase(k);if(k!==v){a[v]=a[k];delete a[k];k=v}if(a[k]==="hide"&&n||a[k]==="show"&&!n)return h.complete.call(this);if(l&&(k==="height"||k==="width")){h.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY];if(c.css(this,"display")==="inline"&&c.css(this,"float")==="none")if(c.support.inlineBlockNeedsLayout)if(oa(this.nodeName)===
"inline")this.style.display="inline-block";else{this.style.display="inline";this.style.zoom=1}else this.style.display="inline-block"}if(c.isArray(a[k])){(h.specialEasing=h.specialEasing||{})[k]=a[k][1];a[k]=a[k][0]}}if(h.overflow!=null)this.style.overflow="hidden";h.curAnim=c.extend({},a);c.each(a,function(B,D){var H=new c.fx(s,h,B);if(tb.test(D))H[D==="toggle"?n?"show":"hide":D](a);else{var w=ub.exec(D),G=H.cur(true)||0;if(w){var M=parseFloat(w[2]),g=w[3]||"px";if(g!=="px"){c.style(s,B,(M||1)+g);
G=(M||1)/H.cur(true)*G;c.style(s,B,G+g)}if(w[1])M=(w[1]==="-="?-1:1)*M+G;H.custom(G,M,g)}else H.custom(G,D,"")}});return true})},stop:function(a,b){var d=c.timers;a&&this.queue([]);this.each(function(){for(var e=d.length-1;e>=0;e--)if(d[e].elem===this){b&&d[e](true);d.splice(e,1)}});b||this.dequeue();return this}});c.each({slideDown:S("show",1),slideUp:S("hide",1),slideToggle:S("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(a,b){c.fn[a]=function(d,e,f){return this.animate(b,
d,e,f)}});c.extend({speed:function(a,b,d){var e=a&&typeof a==="object"?c.extend({},a):{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};e.duration=c.fx.off?0:typeof e.duration==="number"?e.duration:e.duration in c.fx.speeds?c.fx.speeds[e.duration]:c.fx.speeds._default;e.old=e.complete;e.complete=function(){e.queue!==false&&c(this).dequeue();c.isFunction(e.old)&&e.old.call(this)};return e},easing:{linear:function(a,b,d,e){return d+e*a},swing:function(a,b,d,e){return(-Math.cos(a*
Math.PI)/2+0.5)*e+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]||c.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a=parseFloat(c.css(this.elem,this.prop));return a&&a>-1E4?a:0},custom:function(a,b,d){function e(h){return f.step(h)}
this.startTime=c.now();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start;this.pos=this.state=0;var f=this;a=c.fx;e.elem=this.elem;if(e()&&c.timers.push(e)&&!aa)aa=setInterval(a.tick,a.interval)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;
this.custom(this.cur(),0)},step:function(a){var b=c.now(),d=true;if(a||b>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var e in this.options.curAnim)if(this.options.curAnim[e]!==true)d=false;if(d){if(this.options.overflow!=null&&!c.support.shrinkWrapBlocks){var f=this.elem,h=this.options;c.each(["","X","Y"],function(l,n){f.style["overflow"+n]=h.overflow[l]})}this.options.hide&&c(this.elem).hide();if(this.options.hide||
this.options.show)for(var k in this.options.curAnim)c.style(this.elem,k,this.options.orig[k]);this.options.complete.call(this.elem)}return false}else{a=b-this.startTime;this.state=a/this.options.duration;b=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||b](this.state,a,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=
c.timers,b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length||c.fx.stop()},interval:13,stop:function(){clearInterval(aa);aa=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){c.style(a.elem,"opacity",a.now)},_default:function(a){if(a.elem.style&&a.elem.style[a.prop]!=null)a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit;else a.elem[a.prop]=a.now}}});if(c.expr&&c.expr.filters)c.expr.filters.animated=function(a){return c.grep(c.timers,function(b){return a===
b.elem}).length};var vb=/^t(?:able|d|h)$/i,Fa=/^(?:body|html)$/i;c.fn.offset="getBoundingClientRect"in u.documentElement?function(a){var b=this[0],d;if(a)return this.each(function(k){c.offset.setOffset(this,a,k)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);try{d=b.getBoundingClientRect()}catch(e){}var f=b.ownerDocument,h=f.documentElement;if(!d||!c.contains(h,b))return d||{top:0,left:0};b=f.body;f=ea(f);return{top:d.top+(f.pageYOffset||c.support.boxModel&&
h.scrollTop||b.scrollTop)-(h.clientTop||b.clientTop||0),left:d.left+(f.pageXOffset||c.support.boxModel&&h.scrollLeft||b.scrollLeft)-(h.clientLeft||b.clientLeft||0)}}:function(a){var b=this[0];if(a)return this.each(function(s){c.offset.setOffset(this,a,s)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);c.offset.initialize();var d=b.offsetParent,e=b.ownerDocument,f,h=e.documentElement,k=e.body;f=(e=e.defaultView)?e.getComputedStyle(b,null):b.currentStyle;
for(var l=b.offsetTop,n=b.offsetLeft;(b=b.parentNode)&&b!==k&&b!==h;){if(c.offset.supportsFixedPosition&&f.position==="fixed")break;f=e?e.getComputedStyle(b,null):b.currentStyle;l-=b.scrollTop;n-=b.scrollLeft;if(b===d){l+=b.offsetTop;n+=b.offsetLeft;if(c.offset.doesNotAddBorder&&!(c.offset.doesAddBorderForTableAndCells&&vb.test(b.nodeName))){l+=parseFloat(f.borderTopWidth)||0;n+=parseFloat(f.borderLeftWidth)||0}d=b.offsetParent}if(c.offset.subtractsBorderForOverflowNotVisible&&f.overflow!=="visible"){l+=
parseFloat(f.borderTopWidth)||0;n+=parseFloat(f.borderLeftWidth)||0}f=f}if(f.position==="relative"||f.position==="static"){l+=k.offsetTop;n+=k.offsetLeft}if(c.offset.supportsFixedPosition&&f.position==="fixed"){l+=Math.max(h.scrollTop,k.scrollTop);n+=Math.max(h.scrollLeft,k.scrollLeft)}return{top:l,left:n}};c.offset={initialize:function(){var a=u.body,b=u.createElement("div"),d,e,f,h=parseFloat(c.css(a,"marginTop"))||0;c.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",
height:"1px",visibility:"hidden"});b.innerHTML="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";a.insertBefore(b,a.firstChild);d=b.firstChild;e=d.firstChild;f=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=e.offsetTop!==5;this.doesAddBorderForTableAndCells=
f.offsetTop===5;e.style.position="fixed";e.style.top="20px";this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15;e.style.position=e.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==h;a.removeChild(b);c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.css(a,
"marginTop"))||0;d+=parseFloat(c.css(a,"marginLeft"))||0}return{top:b,left:d}},setOffset:function(a,b,d){var e=c.css(a,"position");if(e==="static")a.style.position="relative";var f=c(a),h=f.offset(),k=c.css(a,"top"),l=c.css(a,"left"),n=e==="absolute"&&c.inArray("auto",[k,l])>-1;e={};var s={};if(n)s=f.position();k=n?s.top:parseInt(k,10)||0;l=n?s.left:parseInt(l,10)||0;if(c.isFunction(b))b=b.call(a,d,h);if(b.top!=null)e.top=b.top-h.top+k;if(b.left!=null)e.left=b.left-h.left+l;"using"in b?b.using.call(a,
e):f.css(e)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),e=Fa.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.css(a,"marginTop"))||0;d.left-=parseFloat(c.css(a,"marginLeft"))||0;e.top+=parseFloat(c.css(b[0],"borderTopWidth"))||0;e.left+=parseFloat(c.css(b[0],"borderLeftWidth"))||0;return{top:d.top-e.top,left:d.left-e.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||u.body;a&&!Fa.test(a.nodeName)&&
c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(e){var f=this[0],h;if(!f)return null;if(e!==A)return this.each(function(){if(h=ea(this))h.scrollTo(!a?e:c(h).scrollLeft(),a?e:c(h).scrollTop());else this[d]=e});else return(h=ea(f))?"pageXOffset"in h?h[a?"pageYOffset":"pageXOffset"]:c.support.boxModel&&h.document.documentElement[d]||h.document.body[d]:f[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();
c.fn["inner"+b]=function(){return this[0]?parseFloat(c.css(this[0],d,"padding")):null};c.fn["outer"+b]=function(e){return this[0]?parseFloat(c.css(this[0],d,e?"margin":"border")):null};c.fn[d]=function(e){var f=this[0];if(!f)return e==null?null:this;if(c.isFunction(e))return this.each(function(h){var k=c(this);k[d](e.call(this,h,k[d]()))});return c.isWindow(f)?f.document.compatMode==="CSS1Compat"&&f.document.documentElement["client"+b]||f.document.body["client"+b]:f.nodeType===9?Math.max(f.documentElement["client"+
b],f.body["scroll"+b],f.documentElement["scroll"+b],f.body["offset"+b],f.documentElement["offset"+b]):e===A?parseFloat(c.css(f,d)):this.css(d,typeof e==="string"?e:e+"px")}})})(window);
/trunk/themes/ods/js/fancybox/fancy_shadow_w.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/themes/ods/js/fancybox/fancy_shadow_w.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/themes/ods/js/fancybox/jquery.fancybox-1.3.4.css
New file
0,0 → 1,359
/*
* FancyBox - jQuery Plugin
* Simple and fancy lightbox alternative
*
* Examples and documentation at: http://fancybox.net
*
* Copyright (c) 2008 - 2010 Janis Skarnelis
* That said, it is hardly a one-person project. Many people have submitted bugs, code, and offered their advice freely. Their support is greatly appreciated.
*
* Version: 1.3.4 (11/11/2010)
* Requires: jQuery v1.3+
*
* Dual licensed under the MIT and GPL licenses:
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl.html
*/
 
#fancybox-loading {
position: fixed;
top: 50%;
left: 50%;
width: 40px;
height: 40px;
margin-top: -20px;
margin-left: -20px;
cursor: pointer;
overflow: hidden;
z-index: 1104;
display: none;
}
 
#fancybox-loading div {
position: absolute;
top: 0;
left: 0;
width: 40px;
height: 480px;
background-image: url('fancybox.png');
}
 
#fancybox-overlay {
position: absolute;
top: 0;
left: 0;
width: 100%;
z-index: 1100;
display: none;
}
 
#fancybox-tmp {
padding: 0;
margin: 0;
border: 0;
overflow: auto;
display: none;
}
 
#fancybox-wrap {
position: absolute;
top: 0;
left: 0;
padding: 20px;
z-index: 1101;
outline: none;
display: none;
}
 
#fancybox-outer {
position: relative;
width: 100%;
height: 100%;
background: #fff;
}
 
#fancybox-content {
width: 0;
height: 0;
padding: 0;
outline: none;
position: relative;
overflow: hidden;
z-index: 1102;
border: 0px solid #fff;
}
 
#fancybox-hide-sel-frame {
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
background: transparent;
z-index: 1101;
}
 
#fancybox-close {
position: absolute;
top: -15px;
right: -15px;
width: 30px;
height: 30px;
background: transparent url('fancybox.png') -40px 0px;
cursor: pointer;
z-index: 1103;
display: none;
}
 
#fancybox-error {
color: #444;
font: normal 12px/20px Arial;
padding: 14px;
margin: 0;
}
 
#fancybox-img {
width: 100%;
height: 100%;
padding: 0;
margin: 0;
border: none;
outline: none;
line-height: 0;
vertical-align: top;
}
 
#fancybox-frame {
width: 100%;
height: 100%;
border: none;
display: block;
}
 
#fancybox-left, #fancybox-right {
position: absolute;
bottom: 0px;
height: 100%;
width: 35%;
cursor: pointer;
outline: none;
background: transparent url('blank.gif');
z-index: 1102;
display: none;
}
 
#fancybox-left {
left: 0px;
}
 
#fancybox-right {
right: 0px;
}
 
#fancybox-left-ico, #fancybox-right-ico {
position: absolute;
top: 50%;
left: -9999px;
width: 30px;
height: 30px;
margin-top: -15px;
cursor: pointer;
z-index: 1102;
display: block;
}
 
#fancybox-left-ico {
background-image: url('fancybox.png');
background-position: -40px -30px;
}
 
#fancybox-right-ico {
background-image: url('fancybox.png');
background-position: -40px -60px;
}
 
#fancybox-left:hover, #fancybox-right:hover {
visibility: visible; /* IE6 */
}
 
#fancybox-left:hover span {
left: 20px;
}
 
#fancybox-right:hover span {
left: auto;
right: 20px;
}
 
.fancybox-bg {
position: absolute;
padding: 0;
margin: 0;
border: 0;
width: 20px;
height: 20px;
z-index: 1001;
}
 
#fancybox-bg-n {
top: -20px;
left: 0;
width: 100%;
background-image: url('fancybox-x.png');
}
 
#fancybox-bg-ne {
top: -20px;
right: -20px;
background-image: url('fancybox.png');
background-position: -40px -162px;
}
 
#fancybox-bg-e {
top: 0;
right: -20px;
height: 100%;
background-image: url('fancybox-y.png');
background-position: -20px 0px;
}
 
#fancybox-bg-se {
bottom: -20px;
right: -20px;
background-image: url('fancybox.png');
background-position: -40px -182px;
}
 
#fancybox-bg-s {
bottom: -20px;
left: 0;
width: 100%;
background-image: url('fancybox-x.png');
background-position: 0px -20px;
}
 
#fancybox-bg-sw {
bottom: -20px;
left: -20px;
background-image: url('fancybox.png');
background-position: -40px -142px;
}
 
#fancybox-bg-w {
top: 0;
left: -20px;
height: 100%;
background-image: url('fancybox-y.png');
}
 
#fancybox-bg-nw {
top: -20px;
left: -20px;
background-image: url('fancybox.png');
background-position: -40px -122px;
}
 
#fancybox-title {
font-family: Helvetica;
font-size: 12px;
z-index: 1102;
}
 
.fancybox-title-inside {
padding-bottom: 10px;
text-align: center;
color: #333;
background: #fff;
position: relative;
}
 
.fancybox-title-outside {
padding-top: 10px;
color: #fff;
}
 
.fancybox-title-over {
position: absolute;
bottom: 0;
left: 0;
color: #FFF;
text-align: left;
}
 
#fancybox-title-over {
padding: 10px;
background-image: url('fancy_title_over.png');
display: block;
}
 
.fancybox-title-float {
position: absolute;
left: 0;
bottom: -20px;
height: 32px;
}
 
#fancybox-title-float-wrap {
border: none;
border-collapse: collapse;
width: auto;
}
 
#fancybox-title-float-wrap td {
border: none;
white-space: nowrap;
}
 
#fancybox-title-float-left {
padding: 0 0 0 15px;
background: url('fancybox.png') -40px -90px no-repeat;
}
 
#fancybox-title-float-main {
color: #FFF;
line-height: 29px;
font-weight: bold;
padding: 0 0 3px 0;
background: url('fancybox-x.png') 0px -40px;
}
 
#fancybox-title-float-right {
padding: 0 0 0 15px;
background: url('fancybox.png') -55px -90px no-repeat;
}
 
/* IE6 */
 
.fancybox-ie6 #fancybox-close { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_close.png', sizingMethod='scale'); }
 
.fancybox-ie6 #fancybox-left-ico { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_nav_left.png', sizingMethod='scale'); }
.fancybox-ie6 #fancybox-right-ico { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_nav_right.png', sizingMethod='scale'); }
 
.fancybox-ie6 #fancybox-title-over { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_title_over.png', sizingMethod='scale'); zoom: 1; }
.fancybox-ie6 #fancybox-title-float-left { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_title_left.png', sizingMethod='scale'); }
.fancybox-ie6 #fancybox-title-float-main { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_title_main.png', sizingMethod='scale'); }
.fancybox-ie6 #fancybox-title-float-right { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_title_right.png', sizingMethod='scale'); }
 
.fancybox-ie6 #fancybox-bg-w, .fancybox-ie6 #fancybox-bg-e, .fancybox-ie6 #fancybox-left, .fancybox-ie6 #fancybox-right, #fancybox-hide-sel-frame {
height: expression(this.parentNode.clientHeight + "px");
}
 
#fancybox-loading.fancybox-ie6 {
position: absolute; margin-top: 0;
top: expression( (-20 + (document.documentElement.clientHeight ? document.documentElement.clientHeight/2 : document.body.clientHeight/2 ) + ( ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop )) + 'px');
}
 
#fancybox-loading.fancybox-ie6 div { background: transparent; filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_loading.png', sizingMethod='scale'); }
 
/* IE6, IE7, IE8 */
 
.fancybox-ie .fancybox-bg { background: transparent !important; }
 
.fancybox-ie #fancybox-bg-n { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_n.png', sizingMethod='scale'); }
.fancybox-ie #fancybox-bg-ne { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_ne.png', sizingMethod='scale'); }
.fancybox-ie #fancybox-bg-e { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_e.png', sizingMethod='scale'); }
.fancybox-ie #fancybox-bg-se { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_se.png', sizingMethod='scale'); }
.fancybox-ie #fancybox-bg-s { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_s.png', sizingMethod='scale'); }
.fancybox-ie #fancybox-bg-sw { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_sw.png', sizingMethod='scale'); }
.fancybox-ie #fancybox-bg-w { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_w.png', sizingMethod='scale'); }
.fancybox-ie #fancybox-bg-nw { filter: progid:DXImageTransform.Microsoft.AlphaImageLoader(src='fancybox/fancy_shadow_nw.png', sizingMethod='scale'); }
/trunk/themes/ods/js/fancybox/fancy_title_over.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/themes/ods/js/fancybox/fancy_title_over.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/themes/ods/js/fancybox/fancy_shadow_se.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/themes/ods/js/fancybox/fancy_shadow_se.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/themes/ods/js/fancybox/jquery.fancybox-1.3.4.pack.js
New file
0,0 → 1,46
/*
* FancyBox - jQuery Plugin
* Simple and fancy lightbox alternative
*
* Examples and documentation at: http://fancybox.net
*
* Copyright (c) 2008 - 2010 Janis Skarnelis
* That said, it is hardly a one-person project. Many people have submitted bugs, code, and offered their advice freely. Their support is greatly appreciated.
*
* Version: 1.3.4 (11/11/2010)
* Requires: jQuery v1.3+
*
* Dual licensed under the MIT and GPL licenses:
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl.html
*/
 
;(function(b){var m,t,u,f,D,j,E,n,z,A,q=0,e={},o=[],p=0,d={},l=[],G=null,v=new Image,J=/\.(jpg|gif|png|bmp|jpeg)(.*)?$/i,W=/[^\.]\.(swf)\s*$/i,K,L=1,y=0,s="",r,i,h=false,B=b.extend(b("<div/>")[0],{prop:0}),M=b.browser.msie&&b.browser.version<7&&!window.XMLHttpRequest,N=function(){t.hide();v.onerror=v.onload=null;G&&G.abort();m.empty()},O=function(){if(false===e.onError(o,q,e)){t.hide();h=false}else{e.titleShow=false;e.width="auto";e.height="auto";m.html('<p id="fancybox-error">The requested content cannot be loaded.<br />Please try again later.</p>');
F()}},I=function(){var a=o[q],c,g,k,C,P,w;N();e=b.extend({},b.fn.fancybox.defaults,typeof b(a).data("fancybox")=="undefined"?e:b(a).data("fancybox"));w=e.onStart(o,q,e);if(w===false)h=false;else{if(typeof w=="object")e=b.extend(e,w);k=e.title||(a.nodeName?b(a).attr("title"):a.title)||"";if(a.nodeName&&!e.orig)e.orig=b(a).children("img:first").length?b(a).children("img:first"):b(a);if(k===""&&e.orig&&e.titleFromAlt)k=e.orig.attr("alt");c=e.href||(a.nodeName?b(a).attr("href"):a.href)||null;if(/^(?:javascript)/i.test(c)||
c=="#")c=null;if(e.type){g=e.type;if(!c)c=e.content}else if(e.content)g="html";else if(c)g=c.match(J)?"image":c.match(W)?"swf":b(a).hasClass("iframe")?"iframe":c.indexOf("#")===0?"inline":"ajax";if(g){if(g=="inline"){a=c.substr(c.indexOf("#"));g=b(a).length>0?"inline":"ajax"}e.type=g;e.href=c;e.title=k;if(e.autoDimensions)if(e.type=="html"||e.type=="inline"||e.type=="ajax"){e.width="auto";e.height="auto"}else e.autoDimensions=false;if(e.modal){e.overlayShow=true;e.hideOnOverlayClick=false;e.hideOnContentClick=
false;e.enableEscapeButton=false;e.showCloseButton=false}e.padding=parseInt(e.padding,10);e.margin=parseInt(e.margin,10);m.css("padding",e.padding+e.margin);b(".fancybox-inline-tmp").unbind("fancybox-cancel").bind("fancybox-change",function(){b(this).replaceWith(j.children())});switch(g){case "html":m.html(e.content);F();break;case "inline":if(b(a).parent().is("#fancybox-content")===true){h=false;break}b('<div class="fancybox-inline-tmp" />').hide().insertBefore(b(a)).bind("fancybox-cleanup",function(){b(this).replaceWith(j.children())}).bind("fancybox-cancel",
function(){b(this).replaceWith(m.children())});b(a).appendTo(m);F();break;case "image":h=false;b.fancybox.showActivity();v=new Image;v.onerror=function(){O()};v.onload=function(){h=true;v.onerror=v.onload=null;e.width=v.width;e.height=v.height;b("<img />").attr({id:"fancybox-img",src:v.src,alt:e.title}).appendTo(m);Q()};v.src=c;break;case "swf":e.scrolling="no";C='<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="'+e.width+'" height="'+e.height+'"><param name="movie" value="'+c+
'"></param>';P="";b.each(e.swf,function(x,H){C+='<param name="'+x+'" value="'+H+'"></param>';P+=" "+x+'="'+H+'"'});C+='<embed src="'+c+'" type="application/x-shockwave-flash" width="'+e.width+'" height="'+e.height+'"'+P+"></embed></object>";m.html(C);F();break;case "ajax":h=false;b.fancybox.showActivity();e.ajax.win=e.ajax.success;G=b.ajax(b.extend({},e.ajax,{url:c,data:e.ajax.data||{},error:function(x){x.status>0&&O()},success:function(x,H,R){if((typeof R=="object"?R:G).status==200){if(typeof e.ajax.win==
"function"){w=e.ajax.win(c,x,H,R);if(w===false){t.hide();return}else if(typeof w=="string"||typeof w=="object")x=w}m.html(x);F()}}}));break;case "iframe":Q()}}else O()}},F=function(){var a=e.width,c=e.height;a=a.toString().indexOf("%")>-1?parseInt((b(window).width()-e.margin*2)*parseFloat(a)/100,10)+"px":a=="auto"?"auto":a+"px";c=c.toString().indexOf("%")>-1?parseInt((b(window).height()-e.margin*2)*parseFloat(c)/100,10)+"px":c=="auto"?"auto":c+"px";m.wrapInner('<div style="width:'+a+";height:"+c+
";overflow: "+(e.scrolling=="auto"?"auto":e.scrolling=="yes"?"scroll":"hidden")+';position:relative;"></div>');e.width=m.width();e.height=m.height();Q()},Q=function(){var a,c;t.hide();if(f.is(":visible")&&false===d.onCleanup(l,p,d)){b.event.trigger("fancybox-cancel");h=false}else{h=true;b(j.add(u)).unbind();b(window).unbind("resize.fb scroll.fb");b(document).unbind("keydown.fb");f.is(":visible")&&d.titlePosition!=="outside"&&f.css("height",f.height());l=o;p=q;d=e;if(d.overlayShow){u.css({"background-color":d.overlayColor,
opacity:d.overlayOpacity,cursor:d.hideOnOverlayClick?"pointer":"auto",height:b(document).height()});if(!u.is(":visible")){M&&b("select:not(#fancybox-tmp select)").filter(function(){return this.style.visibility!=="hidden"}).css({visibility:"hidden"}).one("fancybox-cleanup",function(){this.style.visibility="inherit"});u.show()}}else u.hide();i=X();s=d.title||"";y=0;n.empty().removeAttr("style").removeClass();if(d.titleShow!==false){if(b.isFunction(d.titleFormat))a=d.titleFormat(s,l,p,d);else a=s&&s.length?
d.titlePosition=="float"?'<table id="fancybox-title-float-wrap" cellpadding="0" cellspacing="0"><tr><td id="fancybox-title-float-left"></td><td id="fancybox-title-float-main">'+s+'</td><td id="fancybox-title-float-right"></td></tr></table>':'<div id="fancybox-title-'+d.titlePosition+'">'+s+"</div>":false;s=a;if(!(!s||s==="")){n.addClass("fancybox-title-"+d.titlePosition).html(s).appendTo("body").show();switch(d.titlePosition){case "inside":n.css({width:i.width-d.padding*2,marginLeft:d.padding,marginRight:d.padding});
y=n.outerHeight(true);n.appendTo(D);i.height+=y;break;case "over":n.css({marginLeft:d.padding,width:i.width-d.padding*2,bottom:d.padding}).appendTo(D);break;case "float":n.css("left",parseInt((n.width()-i.width-40)/2,10)*-1).appendTo(f);break;default:n.css({width:i.width-d.padding*2,paddingLeft:d.padding,paddingRight:d.padding}).appendTo(f)}}}n.hide();if(f.is(":visible")){b(E.add(z).add(A)).hide();a=f.position();r={top:a.top,left:a.left,width:f.width(),height:f.height()};c=r.width==i.width&&r.height==
i.height;j.fadeTo(d.changeFade,0.3,function(){var g=function(){j.html(m.contents()).fadeTo(d.changeFade,1,S)};b.event.trigger("fancybox-change");j.empty().removeAttr("filter").css({"border-width":d.padding,width:i.width-d.padding*2,height:e.autoDimensions?"auto":i.height-y-d.padding*2});if(c)g();else{B.prop=0;b(B).animate({prop:1},{duration:d.changeSpeed,easing:d.easingChange,step:T,complete:g})}})}else{f.removeAttr("style");j.css("border-width",d.padding);if(d.transitionIn=="elastic"){r=V();j.html(m.contents());
f.show();if(d.opacity)i.opacity=0;B.prop=0;b(B).animate({prop:1},{duration:d.speedIn,easing:d.easingIn,step:T,complete:S})}else{d.titlePosition=="inside"&&y>0&&n.show();j.css({width:i.width-d.padding*2,height:e.autoDimensions?"auto":i.height-y-d.padding*2}).html(m.contents());f.css(i).fadeIn(d.transitionIn=="none"?0:d.speedIn,S)}}}},Y=function(){if(d.enableEscapeButton||d.enableKeyboardNav)b(document).bind("keydown.fb",function(a){if(a.keyCode==27&&d.enableEscapeButton){a.preventDefault();b.fancybox.close()}else if((a.keyCode==
37||a.keyCode==39)&&d.enableKeyboardNav&&a.target.tagName!=="INPUT"&&a.target.tagName!=="TEXTAREA"&&a.target.tagName!=="SELECT"){a.preventDefault();b.fancybox[a.keyCode==37?"prev":"next"]()}});if(d.showNavArrows){if(d.cyclic&&l.length>1||p!==0)z.show();if(d.cyclic&&l.length>1||p!=l.length-1)A.show()}else{z.hide();A.hide()}},S=function(){if(!b.support.opacity){j.get(0).style.removeAttribute("filter");f.get(0).style.removeAttribute("filter")}e.autoDimensions&&j.css("height","auto");f.css("height","auto");
s&&s.length&&n.show();d.showCloseButton&&E.show();Y();d.hideOnContentClick&&j.bind("click",b.fancybox.close);d.hideOnOverlayClick&&u.bind("click",b.fancybox.close);b(window).bind("resize.fb",b.fancybox.resize);d.centerOnScroll&&b(window).bind("scroll.fb",b.fancybox.center);if(d.type=="iframe")b('<iframe id="fancybox-frame" name="fancybox-frame'+(new Date).getTime()+'" frameborder="0" hspace="0" '+(b.browser.msie?'allowtransparency="true""':"")+' scrolling="'+e.scrolling+'" src="'+d.href+'"></iframe>').appendTo(j);
f.show();h=false;b.fancybox.center();d.onComplete(l,p,d);var a,c;if(l.length-1>p){a=l[p+1].href;if(typeof a!=="undefined"&&a.match(J)){c=new Image;c.src=a}}if(p>0){a=l[p-1].href;if(typeof a!=="undefined"&&a.match(J)){c=new Image;c.src=a}}},T=function(a){var c={width:parseInt(r.width+(i.width-r.width)*a,10),height:parseInt(r.height+(i.height-r.height)*a,10),top:parseInt(r.top+(i.top-r.top)*a,10),left:parseInt(r.left+(i.left-r.left)*a,10)};if(typeof i.opacity!=="undefined")c.opacity=a<0.5?0.5:a;f.css(c);
j.css({width:c.width-d.padding*2,height:c.height-y*a-d.padding*2})},U=function(){return[b(window).width()-d.margin*2,b(window).height()-d.margin*2,b(document).scrollLeft()+d.margin,b(document).scrollTop()+d.margin]},X=function(){var a=U(),c={},g=d.autoScale,k=d.padding*2;c.width=d.width.toString().indexOf("%")>-1?parseInt(a[0]*parseFloat(d.width)/100,10):d.width+k;c.height=d.height.toString().indexOf("%")>-1?parseInt(a[1]*parseFloat(d.height)/100,10):d.height+k;if(g&&(c.width>a[0]||c.height>a[1]))if(e.type==
"image"||e.type=="swf"){g=d.width/d.height;if(c.width>a[0]){c.width=a[0];c.height=parseInt((c.width-k)/g+k,10)}if(c.height>a[1]){c.height=a[1];c.width=parseInt((c.height-k)*g+k,10)}}else{c.width=Math.min(c.width,a[0]);c.height=Math.min(c.height,a[1])}c.top=parseInt(Math.max(a[3]-20,a[3]+(a[1]-c.height-40)*0.5),10);c.left=parseInt(Math.max(a[2]-20,a[2]+(a[0]-c.width-40)*0.5),10);return c},V=function(){var a=e.orig?b(e.orig):false,c={};if(a&&a.length){c=a.offset();c.top+=parseInt(a.css("paddingTop"),
10)||0;c.left+=parseInt(a.css("paddingLeft"),10)||0;c.top+=parseInt(a.css("border-top-width"),10)||0;c.left+=parseInt(a.css("border-left-width"),10)||0;c.width=a.width();c.height=a.height();c={width:c.width+d.padding*2,height:c.height+d.padding*2,top:c.top-d.padding-20,left:c.left-d.padding-20}}else{a=U();c={width:d.padding*2,height:d.padding*2,top:parseInt(a[3]+a[1]*0.5,10),left:parseInt(a[2]+a[0]*0.5,10)}}return c},Z=function(){if(t.is(":visible")){b("div",t).css("top",L*-40+"px");L=(L+1)%12}else clearInterval(K)};
b.fn.fancybox=function(a){if(!b(this).length)return this;b(this).data("fancybox",b.extend({},a,b.metadata?b(this).metadata():{})).unbind("click.fb").bind("click.fb",function(c){c.preventDefault();if(!h){h=true;b(this).blur();o=[];q=0;c=b(this).attr("rel")||"";if(!c||c==""||c==="nofollow")o.push(this);else{o=b("a[rel="+c+"], area[rel="+c+"]");q=o.index(this)}I()}});return this};b.fancybox=function(a,c){var g;if(!h){h=true;g=typeof c!=="undefined"?c:{};o=[];q=parseInt(g.index,10)||0;if(b.isArray(a)){for(var k=
0,C=a.length;k<C;k++)if(typeof a[k]=="object")b(a[k]).data("fancybox",b.extend({},g,a[k]));else a[k]=b({}).data("fancybox",b.extend({content:a[k]},g));o=jQuery.merge(o,a)}else{if(typeof a=="object")b(a).data("fancybox",b.extend({},g,a));else a=b({}).data("fancybox",b.extend({content:a},g));o.push(a)}if(q>o.length||q<0)q=0;I()}};b.fancybox.showActivity=function(){clearInterval(K);t.show();K=setInterval(Z,66)};b.fancybox.hideActivity=function(){t.hide()};b.fancybox.next=function(){return b.fancybox.pos(p+
1)};b.fancybox.prev=function(){return b.fancybox.pos(p-1)};b.fancybox.pos=function(a){if(!h){a=parseInt(a);o=l;if(a>-1&&a<l.length){q=a;I()}else if(d.cyclic&&l.length>1){q=a>=l.length?0:l.length-1;I()}}};b.fancybox.cancel=function(){if(!h){h=true;b.event.trigger("fancybox-cancel");N();e.onCancel(o,q,e);h=false}};b.fancybox.close=function(){function a(){u.fadeOut("fast");n.empty().hide();f.hide();b.event.trigger("fancybox-cleanup");j.empty();d.onClosed(l,p,d);l=e=[];p=q=0;d=e={};h=false}if(!(h||f.is(":hidden"))){h=
true;if(d&&false===d.onCleanup(l,p,d))h=false;else{N();b(E.add(z).add(A)).hide();b(j.add(u)).unbind();b(window).unbind("resize.fb scroll.fb");b(document).unbind("keydown.fb");j.find("iframe").attr("src",M&&/^https/i.test(window.location.href||"")?"javascript:void(false)":"about:blank");d.titlePosition!=="inside"&&n.empty();f.stop();if(d.transitionOut=="elastic"){r=V();var c=f.position();i={top:c.top,left:c.left,width:f.width(),height:f.height()};if(d.opacity)i.opacity=1;n.empty().hide();B.prop=1;
b(B).animate({prop:0},{duration:d.speedOut,easing:d.easingOut,step:T,complete:a})}else f.fadeOut(d.transitionOut=="none"?0:d.speedOut,a)}}};b.fancybox.resize=function(){u.is(":visible")&&u.css("height",b(document).height());b.fancybox.center(true)};b.fancybox.center=function(a){var c,g;if(!h){g=a===true?1:0;c=U();!g&&(f.width()>c[0]||f.height()>c[1])||f.stop().animate({top:parseInt(Math.max(c[3]-20,c[3]+(c[1]-j.height()-40)*0.5-d.padding)),left:parseInt(Math.max(c[2]-20,c[2]+(c[0]-j.width()-40)*0.5-
d.padding))},typeof a=="number"?a:200)}};b.fancybox.init=function(){if(!b("#fancybox-wrap").length){b("body").append(m=b('<div id="fancybox-tmp"></div>'),t=b('<div id="fancybox-loading"><div></div></div>'),u=b('<div id="fancybox-overlay"></div>'),f=b('<div id="fancybox-wrap"></div>'));D=b('<div id="fancybox-outer"></div>').append('<div class="fancybox-bg" id="fancybox-bg-n"></div><div class="fancybox-bg" id="fancybox-bg-ne"></div><div class="fancybox-bg" id="fancybox-bg-e"></div><div class="fancybox-bg" id="fancybox-bg-se"></div><div class="fancybox-bg" id="fancybox-bg-s"></div><div class="fancybox-bg" id="fancybox-bg-sw"></div><div class="fancybox-bg" id="fancybox-bg-w"></div><div class="fancybox-bg" id="fancybox-bg-nw"></div>').appendTo(f);
D.append(j=b('<div id="fancybox-content"></div>'),E=b('<a id="fancybox-close"></a>'),n=b('<div id="fancybox-title"></div>'),z=b('<a href="javascript:;" id="fancybox-left"><span class="fancy-ico" id="fancybox-left-ico"></span></a>'),A=b('<a href="javascript:;" id="fancybox-right"><span class="fancy-ico" id="fancybox-right-ico"></span></a>'));E.click(b.fancybox.close);t.click(b.fancybox.cancel);z.click(function(a){a.preventDefault();b.fancybox.prev()});A.click(function(a){a.preventDefault();b.fancybox.next()});
b.fn.mousewheel&&f.bind("mousewheel.fb",function(a,c){if(h)a.preventDefault();else if(b(a.target).get(0).clientHeight==0||b(a.target).get(0).scrollHeight===b(a.target).get(0).clientHeight){a.preventDefault();b.fancybox[c>0?"prev":"next"]()}});b.support.opacity||f.addClass("fancybox-ie");if(M){t.addClass("fancybox-ie6");f.addClass("fancybox-ie6");b('<iframe id="fancybox-hide-sel-frame" src="'+(/^https/i.test(window.location.href||"")?"javascript:void(false)":"about:blank")+'" scrolling="no" border="0" frameborder="0" tabindex="-1"></iframe>').prependTo(D)}}};
b.fn.fancybox.defaults={padding:10,margin:40,opacity:false,modal:false,cyclic:false,scrolling:"auto",width:560,height:340,autoScale:true,autoDimensions:true,centerOnScroll:false,ajax:{},swf:{wmode:"transparent"},hideOnOverlayClick:true,hideOnContentClick:false,overlayShow:true,overlayOpacity:0.7,overlayColor:"#777",titleShow:true,titlePosition:"float",titleFormat:null,titleFromAlt:false,transitionIn:"fade",transitionOut:"fade",speedIn:300,speedOut:300,changeSpeed:300,changeFade:"fast",easingIn:"swing",
easingOut:"swing",showCloseButton:true,showNavArrows:true,enableEscapeButton:true,enableKeyboardNav:true,onStart:function(){},onCancel:function(){},onComplete:function(){},onCleanup:function(){},onClosed:function(){},onError:function(){}};b(document).ready(function(){b.fancybox.init()})})(jQuery);
/trunk/themes/ods/js/fancybox/fancy_loading.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/themes/ods/js/fancybox/fancy_loading.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/themes/ods/js/fancybox/fancy_title_right.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/themes/ods/js/fancybox/fancy_title_right.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/themes/ods/js/fancybox/jquery.mousewheel-3.0.4.pack.js
New file
0,0 → 1,14
/*! Copyright (c) 2010 Brandon Aaron (http://brandonaaron.net)
* Licensed under the MIT License (LICENSE.txt).
*
* Thanks to: http://adomas.org/javascript-mouse-wheel/ for some pointers.
* Thanks to: Mathias Bank(http://www.mathias-bank.de) for a scope bug fix.
* Thanks to: Seamus Leahy for adding deltaX and deltaY
*
* Version: 3.0.4
*
* Requires: 1.2.2+
*/
 
(function(d){function g(a){var b=a||window.event,i=[].slice.call(arguments,1),c=0,h=0,e=0;a=d.event.fix(b);a.type="mousewheel";if(a.wheelDelta)c=a.wheelDelta/120;if(a.detail)c=-a.detail/3;e=c;if(b.axis!==undefined&&b.axis===b.HORIZONTAL_AXIS){e=0;h=-1*c}if(b.wheelDeltaY!==undefined)e=b.wheelDeltaY/120;if(b.wheelDeltaX!==undefined)h=-1*b.wheelDeltaX/120;i.unshift(a,c,h,e);return d.event.handle.apply(this,i)}var f=["DOMMouseScroll","mousewheel"];d.event.special.mousewheel={setup:function(){if(this.addEventListener)for(var a=
f.length;a;)this.addEventListener(f[--a],g,false);else this.onmousewheel=g},teardown:function(){if(this.removeEventListener)for(var a=f.length;a;)this.removeEventListener(f[--a],g,false);else this.onmousewheel=null}};d.fn.extend({mousewheel:function(a){return a?this.bind("mousewheel",a):this.trigger("mousewheel")},unmousewheel:function(a){return this.unbind("mousewheel",a)}})})(jQuery);
/trunk/themes/ods/js/fancybox/fancy_nav_right.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/themes/ods/js/fancybox/fancy_nav_right.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/themes/ods/js/fancybox/style.css
New file
0,0 → 1,65
html, body, div, ul {
margin: 0;
padding: 0;
}
 
body {
color: #262626;
background: #f4f4f4;
font: normal 12px/18px Verdana, sans-serif;
}
 
#content {
width: 400px;
margin: 40px auto 0 auto;
padding: 0 60px 30px 60px;
border: solid 1px #cbcbcb;
background: #fafafa;
-moz-box-shadow: 0px 0px 10px #cbcbcb;
-webkit-box-shadow: 0px 0px 10px #cbcbcb;
}
 
h1 {
margin: 30px 0 15px 0;
font-size: 30px;
font-weight: bold;
font-family: Arial;
}
 
h1 span {
font-size: 50%;
letter-spacing: -0.05em;
}
 
hr {
border: none;
height: 1px; line-height: 1px;
background: #E5E5E5;
margin-bottom: 20px;
padding: 0;
}
 
p {
margin: 0;
padding: 7px 0;
}
 
a {
outline: none;
}
 
a img {
border: 1px solid #BBB;
padding: 2px;
margin: 10px 20px 10px 0;
vertical-align: top;
}
 
a img.last {
margin-right: 0;
}
 
ul {
margin-bottom: 24px;
padding-left: 30px;
}
/trunk/themes/ods/js/fancybox/fancy_title_main.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/themes/ods/js/fancybox/fancy_title_main.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/themes/ods/js/fancybox/blank.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/themes/ods/js/fancybox/blank.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/themes/ods/js/fancybox/fancy_shadow_nw.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/themes/ods/js/fancybox/fancy_shadow_nw.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/themes/ods/js/fancybox/fancy_shadow_e.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/themes/ods/js/fancybox/fancy_shadow_e.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/themes/ods/js/fancybox/fancybox.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/themes/ods/js/fancybox/fancybox.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/themes/ods/js/fancybox/fancy_title_left.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/themes/ods/js/fancybox/fancy_title_left.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/themes/ods/js/fancybox/fancy_shadow_sw.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/themes/ods/js/fancybox/fancy_shadow_sw.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/themes/ods/js/fancybox/fancy_nav_left.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/themes/ods/js/fancybox/fancy_nav_left.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/themes/ods/js/fancybox/ajax.txt
New file
0,0 → 1,6
<div style="width:400px;">
<h2>This comes from ajax request</h2>
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aenean non velit. Donec pharetra, felis ut tristique adipiscing, diam magna rhoncus neque, sit amet convallis nibh nibh vel libero. Nulla facilisi. In eleifend nisl quis lorem. Duis semper fringilla justo. Proin imperdiet sapien sed lectus. Integer quis nisl et est elementum tempor. Morbi quis tellus nec turpis suscipit molestie. Praesent sed pede. Pellentesque ac orci. Sed sit amet urna eget tellus hendrerit aliquet. Nulla consectetur, pede aliquam ornare placerat, nunc augue commodo leo, sit amet elementum dolor est eleifend magna.
</p>
</div>
/trunk/themes/ods/js/fancybox/fancybox-x.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/themes/ods/js/fancybox/fancybox-x.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/themes/ods/js/fancybox/fancybox-y.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/themes/ods/js/fancybox/fancybox-y.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/themes/ods/js/fancybox/jquery.fancybox-1.3.4.js
New file
0,0 → 1,1156
/*
* FancyBox - jQuery Plugin
* Simple and fancy lightbox alternative
*
* Examples and documentation at: http://fancybox.net
*
* Copyright (c) 2008 - 2010 Janis Skarnelis
* That said, it is hardly a one-person project. Many people have submitted bugs, code, and offered their advice freely. Their support is greatly appreciated.
*
* Version: 1.3.4 (11/11/2010)
* Requires: jQuery v1.3+
*
* Dual licensed under the MIT and GPL licenses:
* http://www.opensource.org/licenses/mit-license.php
* http://www.gnu.org/licenses/gpl.html
*/
 
;(function($) {
var tmp, loading, overlay, wrap, outer, content, close, title, nav_left, nav_right,
 
selectedIndex = 0, selectedOpts = {}, selectedArray = [], currentIndex = 0, currentOpts = {}, currentArray = [],
 
ajaxLoader = null, imgPreloader = new Image(), imgRegExp = /\.(jpg|gif|png|bmp|jpeg)(.*)?$/i, swfRegExp = /[^\.]\.(swf)\s*$/i,
 
loadingTimer, loadingFrame = 1,
 
titleHeight = 0, titleStr = '', start_pos, final_pos, busy = false, fx = $.extend($('<div/>')[0], { prop: 0 }),
 
isIE6 = $.browser.msie && $.browser.version < 7 && !window.XMLHttpRequest,
 
/*
* Private methods
*/
 
_abort = function() {
loading.hide();
 
imgPreloader.onerror = imgPreloader.onload = null;
 
if (ajaxLoader) {
ajaxLoader.abort();
}
 
tmp.empty();
},
 
_error = function() {
if (false === selectedOpts.onError(selectedArray, selectedIndex, selectedOpts)) {
loading.hide();
busy = false;
return;
}
 
selectedOpts.titleShow = false;
 
selectedOpts.width = 'auto';
selectedOpts.height = 'auto';
 
tmp.html( '<p id="fancybox-error">The requested content cannot be loaded.<br />Please try again later.</p>' );
 
_process_inline();
},
 
_start = function() {
var obj = selectedArray[ selectedIndex ],
href,
type,
title,
str,
emb,
ret;
 
_abort();
 
selectedOpts = $.extend({}, $.fn.fancybox.defaults, (typeof $(obj).data('fancybox') == 'undefined' ? selectedOpts : $(obj).data('fancybox')));
 
ret = selectedOpts.onStart(selectedArray, selectedIndex, selectedOpts);
 
if (ret === false) {
busy = false;
return;
} else if (typeof ret == 'object') {
selectedOpts = $.extend(selectedOpts, ret);
}
 
title = selectedOpts.title || (obj.nodeName ? $(obj).attr('title') : obj.title) || '';
 
if (obj.nodeName && !selectedOpts.orig) {
selectedOpts.orig = $(obj).children("img:first").length ? $(obj).children("img:first") : $(obj);
}
 
if (title === '' && selectedOpts.orig && selectedOpts.titleFromAlt) {
title = selectedOpts.orig.attr('alt');
}
 
href = selectedOpts.href || (obj.nodeName ? $(obj).attr('href') : obj.href) || null;
 
if ((/^(?:javascript)/i).test(href) || href == '#') {
href = null;
}
 
if (selectedOpts.type) {
type = selectedOpts.type;
 
if (!href) {
href = selectedOpts.content;
}
 
} else if (selectedOpts.content) {
type = 'html';
 
} else if (href) {
if (href.match(imgRegExp)) {
type = 'image';
 
} else if (href.match(swfRegExp)) {
type = 'swf';
 
} else if ($(obj).hasClass("iframe")) {
type = 'iframe';
 
} else if (href.indexOf("#") === 0) {
type = 'inline';
 
} else {
type = 'ajax';
}
}
 
if (!type) {
_error();
return;
}
 
if (type == 'inline') {
obj = href.substr(href.indexOf("#"));
type = $(obj).length > 0 ? 'inline' : 'ajax';
}
 
selectedOpts.type = type;
selectedOpts.href = href;
selectedOpts.title = title;
 
if (selectedOpts.autoDimensions) {
if (selectedOpts.type == 'html' || selectedOpts.type == 'inline' || selectedOpts.type == 'ajax') {
selectedOpts.width = 'auto';
selectedOpts.height = 'auto';
} else {
selectedOpts.autoDimensions = false;
}
}
 
if (selectedOpts.modal) {
selectedOpts.overlayShow = true;
selectedOpts.hideOnOverlayClick = false;
selectedOpts.hideOnContentClick = false;
selectedOpts.enableEscapeButton = false;
selectedOpts.showCloseButton = false;
}
 
selectedOpts.padding = parseInt(selectedOpts.padding, 10);
selectedOpts.margin = parseInt(selectedOpts.margin, 10);
 
tmp.css('padding', (selectedOpts.padding + selectedOpts.margin));
 
$('.fancybox-inline-tmp').unbind('fancybox-cancel').bind('fancybox-change', function() {
$(this).replaceWith(content.children());
});
 
switch (type) {
case 'html' :
tmp.html( selectedOpts.content );
_process_inline();
break;
 
case 'inline' :
if ( $(obj).parent().is('#fancybox-content') === true) {
busy = false;
return;
}
 
$('<div class="fancybox-inline-tmp" />')
.hide()
.insertBefore( $(obj) )
.bind('fancybox-cleanup', function() {
$(this).replaceWith(content.children());
}).bind('fancybox-cancel', function() {
$(this).replaceWith(tmp.children());
});
 
$(obj).appendTo(tmp);
 
_process_inline();
break;
 
case 'image':
busy = false;
 
$.fancybox.showActivity();
 
imgPreloader = new Image();
 
imgPreloader.onerror = function() {
_error();
};
 
imgPreloader.onload = function() {
busy = true;
 
imgPreloader.onerror = imgPreloader.onload = null;
 
_process_image();
};
 
imgPreloader.src = href;
break;
 
case 'swf':
selectedOpts.scrolling = 'no';
 
str = '<object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" width="' + selectedOpts.width + '" height="' + selectedOpts.height + '"><param name="movie" value="' + href + '"></param>';
emb = '';
 
$.each(selectedOpts.swf, function(name, val) {
str += '<param name="' + name + '" value="' + val + '"></param>';
emb += ' ' + name + '="' + val + '"';
});
 
str += '<embed src="' + href + '" type="application/x-shockwave-flash" width="' + selectedOpts.width + '" height="' + selectedOpts.height + '"' + emb + '></embed></object>';
 
tmp.html(str);
 
_process_inline();
break;
 
case 'ajax':
busy = false;
 
$.fancybox.showActivity();
 
selectedOpts.ajax.win = selectedOpts.ajax.success;
 
ajaxLoader = $.ajax($.extend({}, selectedOpts.ajax, {
url : href,
data : selectedOpts.ajax.data || {},
error : function(XMLHttpRequest, textStatus, errorThrown) {
if ( XMLHttpRequest.status > 0 ) {
_error();
}
},
success : function(data, textStatus, XMLHttpRequest) {
var o = typeof XMLHttpRequest == 'object' ? XMLHttpRequest : ajaxLoader;
if (o.status == 200) {
if ( typeof selectedOpts.ajax.win == 'function' ) {
ret = selectedOpts.ajax.win(href, data, textStatus, XMLHttpRequest);
 
if (ret === false) {
loading.hide();
return;
} else if (typeof ret == 'string' || typeof ret == 'object') {
data = ret;
}
}
 
tmp.html( data );
_process_inline();
}
}
}));
 
break;
 
case 'iframe':
_show();
break;
}
},
 
_process_inline = function() {
var
w = selectedOpts.width,
h = selectedOpts.height;
 
if (w.toString().indexOf('%') > -1) {
w = parseInt( ($(window).width() - (selectedOpts.margin * 2)) * parseFloat(w) / 100, 10) + 'px';
 
} else {
w = w == 'auto' ? 'auto' : w + 'px';
}
 
if (h.toString().indexOf('%') > -1) {
h = parseInt( ($(window).height() - (selectedOpts.margin * 2)) * parseFloat(h) / 100, 10) + 'px';
 
} else {
h = h == 'auto' ? 'auto' : h + 'px';
}
 
tmp.wrapInner('<div style="width:' + w + ';height:' + h + ';overflow: ' + (selectedOpts.scrolling == 'auto' ? 'auto' : (selectedOpts.scrolling == 'yes' ? 'scroll' : 'hidden')) + ';position:relative;"></div>');
 
selectedOpts.width = tmp.width();
selectedOpts.height = tmp.height();
 
_show();
},
 
_process_image = function() {
selectedOpts.width = imgPreloader.width;
selectedOpts.height = imgPreloader.height;
 
$("<img />").attr({
'id' : 'fancybox-img',
'src' : imgPreloader.src,
'alt' : selectedOpts.title
}).appendTo( tmp );
 
_show();
},
 
_show = function() {
var pos, equal;
 
loading.hide();
 
if (wrap.is(":visible") && false === currentOpts.onCleanup(currentArray, currentIndex, currentOpts)) {
$.event.trigger('fancybox-cancel');
 
busy = false;
return;
}
 
busy = true;
 
$(content.add( overlay )).unbind();
 
$(window).unbind("resize.fb scroll.fb");
$(document).unbind('keydown.fb');
 
if (wrap.is(":visible") && currentOpts.titlePosition !== 'outside') {
wrap.css('height', wrap.height());
}
 
currentArray = selectedArray;
currentIndex = selectedIndex;
currentOpts = selectedOpts;
 
if (currentOpts.overlayShow) {
overlay.css({
'background-color' : currentOpts.overlayColor,
'opacity' : currentOpts.overlayOpacity,
'cursor' : currentOpts.hideOnOverlayClick ? 'pointer' : 'auto',
'height' : $(document).height()
});
 
if (!overlay.is(':visible')) {
if (isIE6) {
$('select:not(#fancybox-tmp select)').filter(function() {
return this.style.visibility !== 'hidden';
}).css({'visibility' : 'hidden'}).one('fancybox-cleanup', function() {
this.style.visibility = 'inherit';
});
}
 
overlay.show();
}
} else {
overlay.hide();
}
 
final_pos = _get_zoom_to();
 
_process_title();
 
if (wrap.is(":visible")) {
$( close.add( nav_left ).add( nav_right ) ).hide();
 
pos = wrap.position(),
 
start_pos = {
top : pos.top,
left : pos.left,
width : wrap.width(),
height : wrap.height()
};
 
equal = (start_pos.width == final_pos.width && start_pos.height == final_pos.height);
 
content.fadeTo(currentOpts.changeFade, 0.3, function() {
var finish_resizing = function() {
content.html( tmp.contents() ).fadeTo(currentOpts.changeFade, 1, _finish);
};
 
$.event.trigger('fancybox-change');
 
content
.empty()
.removeAttr('filter')
.css({
'border-width' : currentOpts.padding,
'width' : final_pos.width - currentOpts.padding * 2,
'height' : selectedOpts.autoDimensions ? 'auto' : final_pos.height - titleHeight - currentOpts.padding * 2
});
 
if (equal) {
finish_resizing();
 
} else {
fx.prop = 0;
 
$(fx).animate({prop: 1}, {
duration : currentOpts.changeSpeed,
easing : currentOpts.easingChange,
step : _draw,
complete : finish_resizing
});
}
});
 
return;
}
 
wrap.removeAttr("style");
 
content.css('border-width', currentOpts.padding);
 
if (currentOpts.transitionIn == 'elastic') {
start_pos = _get_zoom_from();
 
content.html( tmp.contents() );
 
wrap.show();
 
if (currentOpts.opacity) {
final_pos.opacity = 0;
}
 
fx.prop = 0;
 
$(fx).animate({prop: 1}, {
duration : currentOpts.speedIn,
easing : currentOpts.easingIn,
step : _draw,
complete : _finish
});
 
return;
}
 
if (currentOpts.titlePosition == 'inside' && titleHeight > 0) {
title.show();
}
 
content
.css({
'width' : final_pos.width - currentOpts.padding * 2,
'height' : selectedOpts.autoDimensions ? 'auto' : final_pos.height - titleHeight - currentOpts.padding * 2
})
.html( tmp.contents() );
 
wrap
.css(final_pos)
.fadeIn( currentOpts.transitionIn == 'none' ? 0 : currentOpts.speedIn, _finish );
},
 
_format_title = function(title) {
if (title && title.length) {
if (currentOpts.titlePosition == 'float') {
return '<table id="fancybox-title-float-wrap" cellpadding="0" cellspacing="0"><tr><td id="fancybox-title-float-left"></td><td id="fancybox-title-float-main">' + title + '</td><td id="fancybox-title-float-right"></td></tr></table>';
}
 
return '<div id="fancybox-title-' + currentOpts.titlePosition + '">' + title + '</div>';
}
 
return false;
},
 
_process_title = function() {
titleStr = currentOpts.title || '';
titleHeight = 0;
 
title
.empty()
.removeAttr('style')
.removeClass();
 
if (currentOpts.titleShow === false) {
title.hide();
return;
}
 
titleStr = $.isFunction(currentOpts.titleFormat) ? currentOpts.titleFormat(titleStr, currentArray, currentIndex, currentOpts) : _format_title(titleStr);
 
if (!titleStr || titleStr === '') {
title.hide();
return;
}
 
title
.addClass('fancybox-title-' + currentOpts.titlePosition)
.html( titleStr )
.appendTo( 'body' )
.show();
 
switch (currentOpts.titlePosition) {
case 'inside':
title
.css({
'width' : final_pos.width - (currentOpts.padding * 2),
'marginLeft' : currentOpts.padding,
'marginRight' : currentOpts.padding
});
 
titleHeight = title.outerHeight(true);
 
title.appendTo( outer );
 
final_pos.height += titleHeight;
break;
 
case 'over':
title
.css({
'marginLeft' : currentOpts.padding,
'width' : final_pos.width - (currentOpts.padding * 2),
'bottom' : currentOpts.padding
})
.appendTo( outer );
break;
 
case 'float':
title
.css('left', parseInt((title.width() - final_pos.width - 40)/ 2, 10) * -1)
.appendTo( wrap );
break;
 
default:
title
.css({
'width' : final_pos.width - (currentOpts.padding * 2),
'paddingLeft' : currentOpts.padding,
'paddingRight' : currentOpts.padding
})
.appendTo( wrap );
break;
}
 
title.hide();
},
 
_set_navigation = function() {
if (currentOpts.enableEscapeButton || currentOpts.enableKeyboardNav) {
$(document).bind('keydown.fb', function(e) {
if (e.keyCode == 27 && currentOpts.enableEscapeButton) {
e.preventDefault();
$.fancybox.close();
 
} else if ((e.keyCode == 37 || e.keyCode == 39) && currentOpts.enableKeyboardNav && e.target.tagName !== 'INPUT' && e.target.tagName !== 'TEXTAREA' && e.target.tagName !== 'SELECT') {
e.preventDefault();
$.fancybox[ e.keyCode == 37 ? 'prev' : 'next']();
}
});
}
 
if (!currentOpts.showNavArrows) {
nav_left.hide();
nav_right.hide();
return;
}
 
if ((currentOpts.cyclic && currentArray.length > 1) || currentIndex !== 0) {
nav_left.show();
}
 
if ((currentOpts.cyclic && currentArray.length > 1) || currentIndex != (currentArray.length -1)) {
nav_right.show();
}
},
 
_finish = function () {
if (!$.support.opacity) {
content.get(0).style.removeAttribute('filter');
wrap.get(0).style.removeAttribute('filter');
}
 
if (selectedOpts.autoDimensions) {
content.css('height', 'auto');
}
 
wrap.css('height', 'auto');
 
if (titleStr && titleStr.length) {
title.show();
}
 
if (currentOpts.showCloseButton) {
close.show();
}
 
_set_navigation();
if (currentOpts.hideOnContentClick) {
content.bind('click', $.fancybox.close);
}
 
if (currentOpts.hideOnOverlayClick) {
overlay.bind('click', $.fancybox.close);
}
 
$(window).bind("resize.fb", $.fancybox.resize);
 
if (currentOpts.centerOnScroll) {
$(window).bind("scroll.fb", $.fancybox.center);
}
 
if (currentOpts.type == 'iframe') {
$('<iframe id="fancybox-frame" name="fancybox-frame' + new Date().getTime() + '" frameborder="0" hspace="0" ' + ($.browser.msie ? 'allowtransparency="true""' : '') + ' scrolling="' + selectedOpts.scrolling + '" src="' + currentOpts.href + '"></iframe>').appendTo(content);
}
 
wrap.show();
 
busy = false;
 
$.fancybox.center();
 
currentOpts.onComplete(currentArray, currentIndex, currentOpts);
 
_preload_images();
},
 
_preload_images = function() {
var href,
objNext;
 
if ((currentArray.length -1) > currentIndex) {
href = currentArray[ currentIndex + 1 ].href;
 
if (typeof href !== 'undefined' && href.match(imgRegExp)) {
objNext = new Image();
objNext.src = href;
}
}
 
if (currentIndex > 0) {
href = currentArray[ currentIndex - 1 ].href;
 
if (typeof href !== 'undefined' && href.match(imgRegExp)) {
objNext = new Image();
objNext.src = href;
}
}
},
 
_draw = function(pos) {
var dim = {
width : parseInt(start_pos.width + (final_pos.width - start_pos.width) * pos, 10),
height : parseInt(start_pos.height + (final_pos.height - start_pos.height) * pos, 10),
 
top : parseInt(start_pos.top + (final_pos.top - start_pos.top) * pos, 10),
left : parseInt(start_pos.left + (final_pos.left - start_pos.left) * pos, 10)
};
 
if (typeof final_pos.opacity !== 'undefined') {
dim.opacity = pos < 0.5 ? 0.5 : pos;
}
 
wrap.css(dim);
 
content.css({
'width' : dim.width - currentOpts.padding * 2,
'height' : dim.height - (titleHeight * pos) - currentOpts.padding * 2
});
},
 
_get_viewport = function() {
return [
$(window).width() - (currentOpts.margin * 2),
$(window).height() - (currentOpts.margin * 2),
$(document).scrollLeft() + currentOpts.margin,
$(document).scrollTop() + currentOpts.margin
];
},
 
_get_zoom_to = function () {
var view = _get_viewport(),
to = {},
resize = currentOpts.autoScale,
double_padding = currentOpts.padding * 2,
ratio;
 
if (currentOpts.width.toString().indexOf('%') > -1) {
to.width = parseInt((view[0] * parseFloat(currentOpts.width)) / 100, 10);
} else {
to.width = currentOpts.width + double_padding;
}
 
if (currentOpts.height.toString().indexOf('%') > -1) {
to.height = parseInt((view[1] * parseFloat(currentOpts.height)) / 100, 10);
} else {
to.height = currentOpts.height + double_padding;
}
 
if (resize && (to.width > view[0] || to.height > view[1])) {
if (selectedOpts.type == 'image' || selectedOpts.type == 'swf') {
ratio = (currentOpts.width ) / (currentOpts.height );
 
if ((to.width ) > view[0]) {
to.width = view[0];
to.height = parseInt(((to.width - double_padding) / ratio) + double_padding, 10);
}
 
if ((to.height) > view[1]) {
to.height = view[1];
to.width = parseInt(((to.height - double_padding) * ratio) + double_padding, 10);
}
 
} else {
to.width = Math.min(to.width, view[0]);
to.height = Math.min(to.height, view[1]);
}
}
 
to.top = parseInt(Math.max(view[3] - 20, view[3] + ((view[1] - to.height - 40) * 0.5)), 10);
to.left = parseInt(Math.max(view[2] - 20, view[2] + ((view[0] - to.width - 40) * 0.5)), 10);
 
return to;
},
 
_get_obj_pos = function(obj) {
var pos = obj.offset();
 
pos.top += parseInt( obj.css('paddingTop'), 10 ) || 0;
pos.left += parseInt( obj.css('paddingLeft'), 10 ) || 0;
 
pos.top += parseInt( obj.css('border-top-width'), 10 ) || 0;
pos.left += parseInt( obj.css('border-left-width'), 10 ) || 0;
 
pos.width = obj.width();
pos.height = obj.height();
 
return pos;
},
 
_get_zoom_from = function() {
var orig = selectedOpts.orig ? $(selectedOpts.orig) : false,
from = {},
pos,
view;
 
if (orig && orig.length) {
pos = _get_obj_pos(orig);
 
from = {
width : pos.width + (currentOpts.padding * 2),
height : pos.height + (currentOpts.padding * 2),
top : pos.top - currentOpts.padding - 20,
left : pos.left - currentOpts.padding - 20
};
 
} else {
view = _get_viewport();
 
from = {
width : currentOpts.padding * 2,
height : currentOpts.padding * 2,
top : parseInt(view[3] + view[1] * 0.5, 10),
left : parseInt(view[2] + view[0] * 0.5, 10)
};
}
 
return from;
},
 
_animate_loading = function() {
if (!loading.is(':visible')){
clearInterval(loadingTimer);
return;
}
 
$('div', loading).css('top', (loadingFrame * -40) + 'px');
 
loadingFrame = (loadingFrame + 1) % 12;
};
 
/*
* Public methods
*/
 
$.fn.fancybox = function(options) {
if (!$(this).length) {
return this;
}
 
$(this)
.data('fancybox', $.extend({}, options, ($.metadata ? $(this).metadata() : {})))
.unbind('click.fb')
.bind('click.fb', function(e) {
e.preventDefault();
 
if (busy) {
return;
}
 
busy = true;
 
$(this).blur();
 
selectedArray = [];
selectedIndex = 0;
 
var rel = $(this).attr('rel') || '';
 
if (!rel || rel == '' || rel === 'nofollow') {
selectedArray.push(this);
 
} else {
selectedArray = $("a[rel=" + rel + "], area[rel=" + rel + "]");
selectedIndex = selectedArray.index( this );
}
 
_start();
 
return;
});
 
return this;
};
 
$.fancybox = function(obj) {
var opts;
 
if (busy) {
return;
}
 
busy = true;
opts = typeof arguments[1] !== 'undefined' ? arguments[1] : {};
 
selectedArray = [];
selectedIndex = parseInt(opts.index, 10) || 0;
 
if ($.isArray(obj)) {
for (var i = 0, j = obj.length; i < j; i++) {
if (typeof obj[i] == 'object') {
$(obj[i]).data('fancybox', $.extend({}, opts, obj[i]));
} else {
obj[i] = $({}).data('fancybox', $.extend({content : obj[i]}, opts));
}
}
 
selectedArray = jQuery.merge(selectedArray, obj);
 
} else {
if (typeof obj == 'object') {
$(obj).data('fancybox', $.extend({}, opts, obj));
} else {
obj = $({}).data('fancybox', $.extend({content : obj}, opts));
}
 
selectedArray.push(obj);
}
 
if (selectedIndex > selectedArray.length || selectedIndex < 0) {
selectedIndex = 0;
}
 
_start();
};
 
$.fancybox.showActivity = function() {
clearInterval(loadingTimer);
 
loading.show();
loadingTimer = setInterval(_animate_loading, 66);
};
 
$.fancybox.hideActivity = function() {
loading.hide();
};
 
$.fancybox.next = function() {
return $.fancybox.pos( currentIndex + 1);
};
 
$.fancybox.prev = function() {
return $.fancybox.pos( currentIndex - 1);
};
 
$.fancybox.pos = function(pos) {
if (busy) {
return;
}
 
pos = parseInt(pos);
 
selectedArray = currentArray;
 
if (pos > -1 && pos < currentArray.length) {
selectedIndex = pos;
_start();
 
} else if (currentOpts.cyclic && currentArray.length > 1) {
selectedIndex = pos >= currentArray.length ? 0 : currentArray.length - 1;
_start();
}
 
return;
};
 
$.fancybox.cancel = function() {
if (busy) {
return;
}
 
busy = true;
 
$.event.trigger('fancybox-cancel');
 
_abort();
 
selectedOpts.onCancel(selectedArray, selectedIndex, selectedOpts);
 
busy = false;
};
 
// Note: within an iframe use - parent.$.fancybox.close();
$.fancybox.close = function() {
if (busy || wrap.is(':hidden')) {
return;
}
 
busy = true;
 
if (currentOpts && false === currentOpts.onCleanup(currentArray, currentIndex, currentOpts)) {
busy = false;
return;
}
 
_abort();
 
$(close.add( nav_left ).add( nav_right )).hide();
 
$(content.add( overlay )).unbind();
 
$(window).unbind("resize.fb scroll.fb");
$(document).unbind('keydown.fb');
 
content.find('iframe').attr('src', isIE6 && /^https/i.test(window.location.href || '') ? 'javascript:void(false)' : 'about:blank');
 
if (currentOpts.titlePosition !== 'inside') {
title.empty();
}
 
wrap.stop();
 
function _cleanup() {
overlay.fadeOut('fast');
 
title.empty().hide();
wrap.hide();
 
$.event.trigger('fancybox-cleanup');
 
content.empty();
 
currentOpts.onClosed(currentArray, currentIndex, currentOpts);
 
currentArray = selectedOpts = [];
currentIndex = selectedIndex = 0;
currentOpts = selectedOpts = {};
 
busy = false;
}
 
if (currentOpts.transitionOut == 'elastic') {
start_pos = _get_zoom_from();
 
var pos = wrap.position();
 
final_pos = {
top : pos.top ,
left : pos.left,
width : wrap.width(),
height : wrap.height()
};
 
if (currentOpts.opacity) {
final_pos.opacity = 1;
}
 
title.empty().hide();
 
fx.prop = 1;
 
$(fx).animate({ prop: 0 }, {
duration : currentOpts.speedOut,
easing : currentOpts.easingOut,
step : _draw,
complete : _cleanup
});
 
} else {
wrap.fadeOut( currentOpts.transitionOut == 'none' ? 0 : currentOpts.speedOut, _cleanup);
}
};
 
$.fancybox.resize = function() {
if (overlay.is(':visible')) {
overlay.css('height', $(document).height());
}
 
$.fancybox.center(true);
};
 
$.fancybox.center = function() {
var view, align;
 
if (busy) {
return;
}
 
align = arguments[0] === true ? 1 : 0;
view = _get_viewport();
 
if (!align && (wrap.width() > view[0] || wrap.height() > view[1])) {
return;
}
 
wrap
.stop()
.animate({
'top' : parseInt(Math.max(view[3] - 20, view[3] + ((view[1] - content.height() - 40) * 0.5) - currentOpts.padding)),
'left' : parseInt(Math.max(view[2] - 20, view[2] + ((view[0] - content.width() - 40) * 0.5) - currentOpts.padding))
}, typeof arguments[0] == 'number' ? arguments[0] : 200);
};
 
$.fancybox.init = function() {
if ($("#fancybox-wrap").length) {
return;
}
 
$('body').append(
tmp = $('<div id="fancybox-tmp"></div>'),
loading = $('<div id="fancybox-loading"><div></div></div>'),
overlay = $('<div id="fancybox-overlay"></div>'),
wrap = $('<div id="fancybox-wrap"></div>')
);
 
outer = $('<div id="fancybox-outer"></div>')
.append('<div class="fancybox-bg" id="fancybox-bg-n"></div><div class="fancybox-bg" id="fancybox-bg-ne"></div><div class="fancybox-bg" id="fancybox-bg-e"></div><div class="fancybox-bg" id="fancybox-bg-se"></div><div class="fancybox-bg" id="fancybox-bg-s"></div><div class="fancybox-bg" id="fancybox-bg-sw"></div><div class="fancybox-bg" id="fancybox-bg-w"></div><div class="fancybox-bg" id="fancybox-bg-nw"></div>')
.appendTo( wrap );
 
outer.append(
content = $('<div id="fancybox-content"></div>'),
close = $('<a id="fancybox-close"></a>'),
title = $('<div id="fancybox-title"></div>'),
 
nav_left = $('<a href="javascript:;" id="fancybox-left"><span class="fancy-ico" id="fancybox-left-ico"></span></a>'),
nav_right = $('<a href="javascript:;" id="fancybox-right"><span class="fancy-ico" id="fancybox-right-ico"></span></a>')
);
 
close.click($.fancybox.close);
loading.click($.fancybox.cancel);
 
nav_left.click(function(e) {
e.preventDefault();
$.fancybox.prev();
});
 
nav_right.click(function(e) {
e.preventDefault();
$.fancybox.next();
});
 
if ($.fn.mousewheel) {
wrap.bind('mousewheel.fb', function(e, delta) {
if (busy) {
e.preventDefault();
 
} else if ($(e.target).get(0).clientHeight == 0 || $(e.target).get(0).scrollHeight === $(e.target).get(0).clientHeight) {
e.preventDefault();
$.fancybox[ delta > 0 ? 'prev' : 'next']();
}
});
}
 
if (!$.support.opacity) {
wrap.addClass('fancybox-ie');
}
 
if (isIE6) {
loading.addClass('fancybox-ie6');
wrap.addClass('fancybox-ie6');
 
$('<iframe id="fancybox-hide-sel-frame" src="' + (/^https/i.test(window.location.href || '') ? 'javascript:void(false)' : 'about:blank' ) + '" scrolling="no" border="0" frameborder="0" tabindex="-1"></iframe>').prependTo(outer);
}
};
 
$.fn.fancybox.defaults = {
padding : 10,
margin : 40,
opacity : false,
modal : false,
cyclic : false,
scrolling : 'auto', // 'auto', 'yes' or 'no'
 
width : 560,
height : 340,
 
autoScale : true,
autoDimensions : true,
centerOnScroll : false,
 
ajax : {},
swf : { wmode: 'transparent' },
 
hideOnOverlayClick : true,
hideOnContentClick : false,
 
overlayShow : true,
overlayOpacity : 0.7,
overlayColor : '#777',
 
titleShow : true,
titlePosition : 'float', // 'float', 'outside', 'inside' or 'over'
titleFormat : null,
titleFromAlt : false,
 
transitionIn : 'fade', // 'elastic', 'fade' or 'none'
transitionOut : 'fade', // 'elastic', 'fade' or 'none'
 
speedIn : 300,
speedOut : 300,
 
changeSpeed : 300,
changeFade : 'fast',
 
easingIn : 'swing',
easingOut : 'swing',
 
showCloseButton : true,
showNavArrows : true,
enableEscapeButton : true,
enableKeyboardNav : true,
 
onStart : function(){},
onCancel : function(){},
onComplete : function(){},
onCleanup : function(){},
onClosed : function(){},
onError : function(){}
};
 
$(document).ready(function() {
$.fancybox.init();
});
 
})(jQuery);
/trunk/themes/ods/color/preview.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/themes/ods/color/preview.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/themes/ods/color/color.inc
New file
0,0 → 1,75
<?php
// $Id: color.inc,v 1.4 2007/12/14 17:00:14 goba Exp $
 
$info = array(
 
// Pre-defined color schemes.
'schemes' => array(
'#0072b9,#027ac6,#2385c2,#5ab5ee,#494949' => t('Blue Lagoon (Default)'),
'#464849,#2f416f,#2a2b2d,#5d6779,#494949' => t('Ash'),
'#55c0e2,#000000,#085360,#007e94,#696969' => t('Aquamarine'),
'#d5b048,#6c420e,#331900,#971702,#494949' => t('Belgian Chocolate'),
'#3f3f3f,#336699,#6598cb,#6598cb,#000000' => t('Bluemarine'),
'#d0cb9a,#917803,#efde01,#e6fb2d,#494949' => t('Citrus Blast'),
'#0f005c,#434f8c,#4d91ff,#1a1575,#000000' => t('Cold Day'),
'#c9c497,#0c7a00,#03961e,#7be000,#494949' => t('Greenbeam'),
'#ffe23d,#a9290a,#fc6d1d,#a30f42,#494949' => t('Mediterrano'),
'#788597,#3f728d,#a9adbc,#d4d4d4,#707070' => t('Mercury'),
'#5b5fa9,#5b5faa,#0a2352,#9fa8d5,#494949' => t('Nocturnal'),
'#7db323,#6a9915,#b5d52a,#7db323,#191a19' => t('Olivia'),
'#12020b,#1b1a13,#f391c6,#f41063,#898080' => t('Pink Plastic'),
'#b7a0ba,#c70000,#a1443a,#f21107,#515d52' => t('Shiny Tomato'),
'#18583d,#1b5f42,#34775a,#52bf90,#2d2d2d' => t('Teal Top'),
),
 
// Images to copy over.
'copy' => array(
'images/menu-collapsed.gif',
'images/menu-collapsed-rtl.gif',
'images/menu-expanded.gif',
'images/menu-leaf.gif',
),
 
// CSS files (excluding @import) to rewrite with new color scheme.
'css' => array(
'style.css',
),
 
// Coordinates of gradient (x, y, width, height).
'gradient' => array(0, 37, 760, 121),
 
// Color areas to fill (x, y, width, height).
'fill' => array(
'base' => array(0, 0, 760, 568),
'link' => array(107, 533, 41, 23),
),
 
// Coordinates of all the theme slices (x, y, width, height)
// with their filename as used in the stylesheet.
'slices' => array(
'images/body.png' => array(0, 37, 1, 280),
'images/bg-bar.png' => array(202, 530, 76, 14),
'images/bg-bar-white.png' => array(202, 506, 76, 14),
'images/bg-tab.png' => array(107, 533, 41, 23),
'images/bg-navigation.png' => array(0, 0, 7, 37),
'images/bg-content-left.png' => array(40, 117, 50, 352),
'images/bg-content-right.png' => array(510, 117, 50, 352),
'images/bg-content.png' => array(299, 117, 7, 200),
'images/bg-navigation-item.png' => array(32, 37, 17, 12),
'images/bg-navigation-item-hover.png' => array(54, 37, 17, 12),
'images/gradient-inner.png' => array(646, 307, 112, 42),
 
'logo.png' => array(622, 51, 64, 73),
'screenshot.png' => array(0, 37, 400, 240),
),
 
// Reference color used for blending. Matches the base.png's colors.
'blend_target' => '#ffffff',
 
// Preview files.
'preview_image' => 'color/preview.png',
'preview_css' => 'color/preview.css',
 
// Base file for image generation.
'base_image' => 'color/base.png',
);
/trunk/themes/ods/color/preview.css
New file
0,0 → 1,58
/* $Id: preview.css,v 1.1 2006/10/29 13:17:38 unconed Exp $ */
 
/* Positioning */
#preview {
overflow: hidden;
max-width: 100%;
}
#preview, #preview #img {
width: 596px;
height: 371px;
}
#preview #gradient {
position: absolute;
left: 0;
right: 0;
top: 19px;
height: 120px;
z-index: 2;
}
#preview #text {
position: absolute;
left: 80px;
width: 436px;
top: 160px;
height: 120px;
z-index: 4;
}
#preview #img {
position: relative;
z-index: 3;
}
#preview #gradient .gradient-line {
height: 10px;
overflow: hidden;
}
 
/* Basic styles to match */
#preview {
font: 12px/170% Verdana;
}
#preview h2 {
margin: 0;
padding: 0;
font-weight: normal;
font-family: Helvetica, Arial, sans-serif;
font-size: 160%;
line-height: 130%;
}
#preview p {
margin: .5em 0;
}
#preview a:link, #preview a:visited {
text-decoration: none;
font-weight: normal;
}
#preview a:hover {
text-decoration: underline;
}
/trunk/themes/ods/color/base.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/themes/ods/color/base.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/themes/ods/block.tpl.php
New file
0,0 → 1,11
<?php
// $Id: block.tpl.php,v 1.3 2007/08/07 08:39:36 goba Exp $
?>
<div id="block-<?php print $block->module .'-'. $block->delta; ?>" class="clear-block block block-<?php print $block->module ?>">
 
<?php if (!empty($block->subject)): ?>
<h2><?php print $block->subject ?></h2>
<?php endif;?>
 
<div class="content"><?php print $block->content ?></div>
</div>
/trunk/themes/ods/ods.info
New file
0,0 → 1,14
; $Id: garland.info,v 1.5 2007/07/01 23:27:32 goba Exp $
name = ODS
description = Template du nouveau site ods
version = VERSION
core = 6.x
engine = phptemplate
stylesheets[all][] = style.css
stylesheets[print][] = print.css
 
; Information added by drupal.org packaging script on 2010-06-02
version = "6.17"
project = "drupal"
datestamp = "1275505216"
 
/trunk/themes/ods/maintenance-page.tpl.php
New file
0,0 → 1,91
<?php
// $Id: maintenance-page.tpl.php,v 1.3.2.1 2009/04/30 00:13:31 goba Exp $
 
/**
* @file maintenance-page.tpl.php
*
* This is an override of the default maintenance page. Used for Garland and
* Minnelli, this file should not be moved or modified since the installation
* and update pages depend on this file.
*
* This mirrors closely page.tpl.php for Garland in order to share the same
* styles.
*/
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php print $language->language ?>" lang="<?php print $language->language ?>" dir="<?php print $language->dir ?>">
<head>
<?php print $head ?>
<title><?php print $head_title ?></title>
<?php print $styles ?>
<?php print $scripts ?>
<!--[if lt IE 7]>
<?php print phptemplate_get_ie_styles(); ?>
<![endif]-->
</head>
<body<?php print phptemplate_body_class($left, $right); ?>>
 
<!-- Layout -->
<div id="header-region" class="clear-block"><?php print $header; ?></div>
 
<div id="wrapper">
<div id="container" class="clear-block">
 
<div id="header">
<div id="logo-floater">
<?php
// Prepare header
$site_fields = array();
if ($site_name) {
$site_fields[] = check_plain($site_name);
}
if ($site_slogan) {
$site_fields[] = check_plain($site_slogan);
}
$site_title = implode(' ', $site_fields);
if ($site_fields) {
$site_fields[0] = '<span>'. $site_fields[0] .'</span>';
}
$site_html = implode(' ', $site_fields);
 
if ($logo || $site_title) {
print '<h1><a href="'. check_url($base_path) .'" title="'. $site_title .'">';
if ($logo) {
print '<img src="'. check_url($logo) .'" alt="'. $site_title .'" id="logo" />';
}
print $site_html .'</a></h1>';
}
?>
</div>
 
</div> <!-- /header -->
 
<?php if ($left): ?>
<div id="sidebar-left" class="sidebar">
<?php if ($search_box): ?><div class="block block-theme"><?php print $search_box ?></div><?php endif; ?>
<?php print $left ?>
</div>
<?php endif; ?>
 
<div id="center"><div id="squeeze"><div class="right-corner"><div class="left-corner">
<?php if ($title): print '<h2'. ($tabs ? ' class="with-tabs"' : '') .'>'. $title .'</h2>'; endif; ?>
<?php print $help; ?>
<?php print $messages; ?>
<div class="clear-block">
<?php print $content ?>
</div>
<div id="footer"><?php print $footer_message . $footer ?></div>
</div></div></div></div> <!-- /.left-corner, /.right-corner, /#squeeze, /#center -->
 
<?php if ($right): ?>
<div id="sidebar-right" class="sidebar">
<?php print $right ?>
</div>
<?php endif; ?>
 
</div> <!-- /container -->
</div>
<!-- /layout -->
 
</body>
</html>
/trunk/themes/ods/translations/themes-garland.fr.po
New file
0,0 → 1,18
# French translation of Drupal (6.8)
# Copyright (c) 2009 by the French translation team
# Generated from file: template.php,v 1.16 2007/10/11 09:51:29 goba
#
msgid ""
msgstr ""
"Project-Id-Version: Drupal (6.8)\n"
"POT-Creation-Date: 2009-01-13 08:54+0000\n"
"PO-Revision-Date: YYYY-mm-DD HH:MM+ZZZZ\n"
"Language-Team: French\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=utf-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n>1);\n"
 
#: themes/garland/template.php:75,83
msgid "!datetime — !username"
msgstr "!datetime — !username"
/trunk/themes/ods/loading.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/themes/ods/loading.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/themes/ods/search-block-form.tpl.php
New file
0,0 → 1,39
<?php
// $Id: search-block-form.tpl.php,v 1.1 2007/10/31 18:06:38 dries Exp $
 
/**
* @file search-block-form.tpl.php
* Default theme implementation for displaying a search form within a block region.
*
* Available variables:
* - $search_form: The complete search form ready for print.
* - $search: Array of keyed search elements. Can be used to print each form
* element separately.
*
* Default keys within $search:
* - $search['search_block_form']: Text input area wrapped in a div.
* - $search['submit']: Form submit button.
* - $search['hidden']: Hidden form elements. Used to validate forms when submitted.
*
* Since $search is keyed, a direct print of the form element is possible.
* Modules can add to the search form so it is recommended to check for their
* existance before printing. The default keys will always exist.
*
* <?php if (isset($search['extra_field'])): ?>
* <div class="extra-field">
* <?php print $search['extra_field']; ?>
* </div>
* <?php endif; ?>
*
* To check for all available data within $search, use the code below.
*
* <?php print '<pre>'. check_plain(print_r($search, 1)) .'</pre>'; ?>
*
* @see template_preprocess_search_block_form()
*/
?>
<div class="container-inline">
<?php print $search['search_block_form'] ?>
<?php print $search['submit'] ?>
<?php print $search['hidden'] ?>
</div>
/trunk/themes/ods/print.css
New file
0,0 → 1,55
/* $Id: print.css,v 1.3 2007/09/06 21:23:32 goba Exp $ */
 
/**
* Garland, for Drupal 5.0
* Stefan Nagtegaal, iStyledThis [dot] nl
* Steven Wittens, acko [dot] net`
*
* If you use a customized color scheme, you must regenerate it after
* modifying this file.
*/
 
body, input, textarea, select {
color: #000;
background: none;
}
 
ul.primary-links, ul.secondary-links,
#header-region, .sidebar {
display: none;
}
 
body.sidebars, body.sideber-left, body.sidebar-right, body {
width: 640px;
}
 
body.sidebar-left #center, body.sidebar-right #center, body.sidebars #center,
body.sidebar-left #squeeze, body.sidebar-right #squeeze, body.sidebars #squeeze {
margin: 0;
}
 
#wrapper,
#wrapper #container .breadcrumb,
#wrapper #container #center,
#wrapper #container #center .right-corner,
#wrapper #container #center .right-corner .left-corner,
#wrapper #container #footer,
#wrapper #container #center #squeeze {
position: static;
left: 0;
padding: 0;
margin: 0;
width: auto;
float: none;
clear: both;
background: none;
}
 
#wrapper #container #header {
height: 130px;
}
 
#wrapper #container #header h1, #wrapper #container #header h1 a:link, #wrapper #container #header h1 a:visited {
text-shadow: none;
color: #000;
}
/trunk/themes/ods/logo.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/themes/ods/logo.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/themes/ods/style-rtl.css
New file
0,0 → 1,293
/* $Id: style-rtl.css,v 1.6 2007/12/17 15:05:10 goba Exp $ */
 
html {
direction: rtl;
}
 
/**
* Generic elements
*/
body {
direction: rtl;
}
 
ol li, ul li {
margin: 0.4em .5em 0.4em 0;
}
 
ul.menu, .item-list ul {
margin: 0.35em -0.5em 0 0;
}
 
ul.menu ul, .item-list ul ul {
margin-left: 0;
margin-right: 0em;
}
 
ol li, ul li, ul.menu li, .item-list ul li, li.leaf {
margin: 0.15em .5em 0.15em 0;
}
 
ul li, ul.menu li, .item-list ul li, li.leaf {
padding: 0 1.5em .2em 0;
background: transparent url("images/menu-leaf.gif") no-repeat 100% .35em;
}
 
ol li {
margin-left: 0;
margin-right: 2em;
}
 
ul li.expanded {
background: transparent url("images/menu-expanded.gif") no-repeat 100% .35em;
}
 
ul li.collapsed {
background: transparent url("images/menu-collapsed-rtl.gif") no-repeat 100% .35em;
}
 
ul.inline li {
padding: 0 0 0 1em;
}
 
ol.task-list {
margin-left: 0;
margin-right: 0;
}
 
ol.task-list li {
padding: 0.5em 2em 0.5em 1em;
}
 
ol.task-list li.active {
background: transparent url(images/task-list.png) no-repeat 97px 50%;
}
 
ol.task-list li.done {
background: transparent url(../../misc/watchdog-ok.png) no-repeat 100% 50%;
}
 
ol.task-list li.active {
margin-right: 0;
margin-left: 1em;
}
 
dl {
margin: 0.5em 1.5em 1em 0;
}
 
dl dt {
}
 
dl dd {
margin: 0 1.5em .5em 0;
}
 
.form-button, .form-submit {
margin: 2em 0 1em 0.5em;
}
 
#header-region h2 {
margin: 0 0 0 1em;
}
 
#wrapper {
background: #edf5fa url("images/body.png") repeat-x 50% 0;
}
 
#wrapper #container #header h1 img {
padding-right: 0;
padding-left: 20px;
float: right;
}
 
#sidebar-left .block-region {
margin: 0 0 0 15px;
}
 
#sidebar-right .block-region {
margin: 0 15px 0px 0;
}
 
/* Now we add the backgrounds for the main content shading */
#wrapper #container #center #squeeze {
background: #fff url("images/bg-content.png") repeat-x 50% 0;
}
 
#wrapper #container .breadcrumb {
position: absolute;
top: 15px;
left: 0;
right: 35px;
z-index: 3;
}
 
/**
* Primary navigation
*/
ul.primary-links {
float: left;
width:70%;
}
 
ul.primary-links li {
float: right;
}
 
/**
* Secondary navigation
*/
ul.secondary-links {
float: left;
clear: left;
}
 
ul.secondary-links li {
float: right;
}
 
ul.primary {
float: right;
}
ul.secondary {
clear: both;
text-align: right;
}
h2.with-tabs {
float: right;
margin: 0 0 0 2em;
}
 
ul.primary li a, ul.primary li.active a, ul.primary li a:hover, ul.primary li a:visited,
ul.secondary li a, ul.secondary li.active a, ul.secondary li a:hover, ul.secondary li a:visited {
margin: 0 1px 0 0;
 
}
ul.primary li a:after {
/* Fix Firefox 2 RTL bug. */
content: " ";
}
 
ul.links li, ul.inline li {
padding-left: 1em;
padding-right: 0;
}
 
.node .links, .comment .links {
text-align: right;
}
 
.node .links ul.links li, .comment .links ul.links li {}
.terms ul.links li {
padding-right: 1em;
padding-left: 0;
}
 
.picture, .comment .submitted {
padding-left: 0;
float: left;
clear: left;
padding-right: 1em;
}
 
.new {
float: left;
}
 
.terms {
float: left;
}
 
.indented {
margin-left: 0;
margin-right: 25px;
}
 
html.js fieldset.collapsible legend a {
padding-left: 0;
padding-right: 2em;
background: url("images/menu-expanded.gif") no-repeat 100% 50%;
}
 
html.js fieldset.collapsed legend a {
background: url("images/menu-collapsed-rtl.gif") no-repeat 100% 50%;
}
 
/**
* Syndication Block
*/
#block-node-0 h2 {
float: right;
padding-right: 0;
padding-left: 20px;
}
 
#block-node-0 img {
float: left;
}
 
#block-node-0 .content {
clear: left;
}
 
/**
* Login Block
*/
#user-login-form ul {
text-align: right;
}
 
div.admin .left {
float: right;
}
 
div.admin .right {
float: left;
}
 
/* Fix Opera, IE6 and IE7 header width */
#wrapper #container #header {
position: relative;
width: 100%;
}
 
#wrapper #container #header #logo-floater {
width: 100%;
left: 0;
top:0;
}
 
/**
* Fixes for IE7 - Does not break other browsers
*/
 
/* Position:relative on these breaks IE7. */
ul.primary li a, ul.primary li.active a, ul.primary li a:hover, ul.primary li a:visited,
ul.secondary li a, ul.secondary li.active a, ul.secondary li a:hover, ul.secondary li a:visited {
position: static;
}
 
/* Fix right and left cloumns position breaking on window resize */
#container {
position: relative;
}
 
#center {
position: relative;
}
 
#sidebar-right{
position: absolute;
right: 0;
}
 
/**
* Apply hasLayout to elements in IE7, using standard property "min-height"
* (see http://www.satzansatz.de/cssd/onhavinglayout.html)
*/
 
/* Fix background bleed in center column. */
#squeeze,
#squeeze .right-corner {
min-height: 1%;
}
/trunk/themes/ods/comment.tpl.php
New file
0,0 → 1,33
<?php
// $Id: comment.tpl.php,v 1.10 2008/01/04 19:24:24 goba Exp $
?>
<div class="comment<?php print ($comment->new) ? ' comment-new' : ''; print ' '. $status; print ' '. $zebra; ?>">
 
<div class="clear-block">
<?php if ($submitted): ?>
<span class="submitted"><?php print $submitted; ?></span>
<?php endif; ?>
 
<?php if ($comment->new) : ?>
<span class="new"><?php print drupal_ucfirst($new) ?></span>
<?php endif; ?>
 
<?php print $picture ?>
 
<h3><?php print $title ?></h3>
 
<div class="content">
<?php print $content ?>
<?php if ($signature): ?>
<div class="clear-block">
<div>—</div>
<?php print $signature ?>
</div>
<?php endif; ?>
</div>
</div>
 
<?php if ($links): ?>
<div class="links"><?php print $links ?></div>
<?php endif; ?>
</div>
/trunk/themes/ods/style.css
New file
0,0 → 1,1699
/* $Id: style.css,v 1.38.2.4 2009/09/14 13:10:47 goba Exp $ */
 
/**
* ODS, for Drupal 6.x
*
* If you use a customized color scheme, you must regenerate it after
* modifying this file.
*/
 
/**
* Generic elements
*/
body {
margin: 0;
margin-top: 0px;
padding: 0;
background: transparent;
font: 11px/170% Verdana, sans-serif;
color: #494949;
background-color: #C6B895;
}
 
input {
font: 12px/100% Verdana, sans-serif;
color: #494949;
}
 
textarea, select {
font: 12px/160% Verdana, sans-serif;
color: #494949;
}
 
h1, h2, h3, h4, h5, h6 {
margin: 0;
padding: 0;
font-weight: normal;
font-family: Helvetica, Arial, sans-serif;
}
 
h1 {
font-size: 170%;
}
 
h2 {
font-size: 160%;
line-height: 130%;
}
 
h3 {
font-size: 145%;
}
 
h4 {
font-size: 122%;
}
 
h5 {
font-size: 120%;
}
 
h6 {
font-size: 110%;
}
 
ul, quote, code, fieldset {
margin: .5em 0;
}
 
p {
margin: 0.6em 0 1.2em;
padding: 0;
}
 
a:link, a:visited {
color: #027AC6;
text-decoration: none;
}
 
a:hover {
color: #0062A0;
text-decoration: underline;
}
 
a:active, a.active {
color: #5895be;
}
 
hr {
margin: 0;
padding: 0;
border: none;
height: 1px;
background: #5294c1;
}
 
ul {
margin: 0.5em 0 1em;
padding: 0;
}
 
ol {
margin: 0.75em 0 1.25em;
padding: 0;
}
 
ol li, ul li {
margin: 0.4em 0 0.4em .5em; /* LTR */
}
 
ul.menu, .item-list ul {
margin: 0.35em 0 0 -0.5em; /* LTR */
padding: 0;
}
 
ul.menu ul, .item-list ul ul {
margin-left: 0em; /* LTR */
}
 
ol li, ul li, ul.menu li, .item-list ul li, li.leaf {
margin: 0.15em 0 0.15em .5em; /* LTR */
}
 
ul li, ul.menu li, .item-list ul li, li.leaf {
padding: 0 0 .2em 1.5em;
list-style-type: none;
list-style-image: none;
/**background: transparent url(images/menu-leaf.gif) no-repeat 1px .35em; /* LTR */
}
 
ol li {
padding: 0 0 .3em;
margin-left: 2em; /* LTR */
}
 
ul li.expanded {
/**background: transparent url(images/menu-expanded.gif) no-repeat 1px .35em; /* LTR */
}
 
ul li.collapsed {
/**background: transparent url(images/menu-collapsed.gif) no-repeat 0px .35em; /* LTR */
}
 
ul li.leaf a, ul li.expanded a, ul li.collapsed a {
display: block;
}
 
ul.inline li {
background: none;
margin: 0;
padding: 0 1em 0 0; /* LTR */
}
 
ol.task-list {
margin-left: 0; /* LTR */
list-style-type: none;
list-style-image: none;
}
ol.task-list li {
padding: 0.5em 1em 0.5em 2em; /* LTR */
}
ol.task-list li.active {
/**background: transparent url(images/task-list.png) no-repeat 3px 50%; /* LTR */
}
ol.task-list li.done {
color: #393;
/**background: transparent url(../../misc/watchdog-ok.png) no-repeat 0px 50%; /* LTR */
}
ol.task-list li.active {
margin-right: 1em; /* LTR */
}
 
fieldset ul.clear-block li {
margin: 0;
padding: 0;
background-image: none;
}
 
dl {
margin: 0.5em 0 1em 1.5em; /* LTR */
}
 
dl dt {
}
 
dl dd {
margin: 0 0 .5em 1.5em; /* LTR */
}
 
img, a img {
border: none;
}
 
table {
margin: 1em 0;
width: 500px;
}
 
thead th {
border-bottom: 2px solid #d3e7f4;
color: #494949;
font-weight: bold;
}
 
th a:link, th a:visited {
color: #6f9dbd;
}
 
td, th {
padding: .3em .5em;
}
 
tr.even, tr.odd, tbody th {
border: solid #d3e7f4;
border-width: 1px 0;
}
 
tr.odd, tr.info {
background-color: #edf5fa;
}
 
tr.even {
background-color: #fff;
}
 
tr.drag {
background-color: #fffff0;
}
 
tr.drag-previous {
background-color: #ffd;
}
 
tr.odd td.active {
background-color: #ddecf5;
}
 
tr.even td.active {
background-color: #e6f1f7;
}
 
td.region, td.module, td.container, td.category {
border-top: 1.5em solid #fff;
border-bottom: 1px solid #b4d7f0;
background-color: #d4e7f3;
color: #455067;
font-weight: bold;
}
 
tr:first-child td.region, tr:first-child td.module, tr:first-child td.container, tr:first-child td.category {
border-top-width: 0;
}
 
span.form-required {
color: #ffae00;
}
 
span.submitted, .description {
font-size: 0.92em;
color: #898989;
}
 
.description {
line-height: 150%;
margin-bottom: 0.75em;
color: #898989;
}
 
.messages, .preview {
margin: .75em 0 .75em;
padding: .5em 1em;
}
 
.messages ul {
margin: 0;
}
 
.form-checkboxes, .form-radios, .form-checkboxes .form-item, .form-radios .form-item {
margin: 0.25em 0;
}
 
#center form {
margin-bottom: 2em;
}
 
.form-button, .form-submit {
margin: 2em 0.5em 1em 0; /* LTR */
}
 
.form-submit#edit-submit {
margin-bottom: -7px;
}
 
#dblog-form-overview .form-submit,
.confirmation .form-submit,
.search-form .form-submit,
.poll .form-submit,
fieldset .form-button, fieldset .form-submit,
.sidebar .form-button, .sidebar .form-submit,
table .form-button, table .form-submit {
margin: 0;
}
 
.box {
margin-bottom: 2.5em;
}
 
/**
* Layout
*/
#header-region {
min-height: 1em;
/**background: #d2e6f3 url(images/bg-navigation.png) repeat-x 50% 100%; **/
}
 
@font-face {
/* Fonte pour le titre en haut � gauche */
font-family: "BorisBlackBloxx";
src: url("font/BorisBlackBloxx.ttf") format("truetype");
}
 
.titre_site {
font-family: BorisBlackBloxx, Cursive;
font-size: 14px;
margin-left: auto;
margin-right: auto;
padding-left: 0px;
padding-top: 5px;
padding-bottom: 10px;
width: 955px;
}
 
.titre_site #observatoire {
color: #0396A6;
font-size: 30px;
}
 
.titre_site #des {
color: #0396A6;
font-size: 20px
}
 
.titre_site #saisons {
color: #FF7F00;
text-transform: uppercase;
font-size: 40px
}
 
.petit_logo_tela {
width: 43px;
margin-left:62px;
margin-bottom:14px;
}
 
.petit_logo_cnrs {
width: 35px;
margin-left:5px;
margin-bottom:10px;
}
 
#header-region .block {
display: block;
margin: 0 1em;
}
 
#header-region .block-region {
display: block;
margin: 0 0.5em 1em;
padding: 0.5em;
position: relative;
top: 0.5em;
}
 
#header-region * {
display: inline;
line-height: 1.5em;
margin-top: 0;
margin-bottom: 0;
}
 
/* Prevent the previous directive from showing the content of script elements in Mozilla browsers. */
#header-region script {
display: none;
}
 
#header-region p, #header-region img {
margin-top: 0.5em;
}
 
#header-region h2 {
margin: 0 1em 0 0; /* LTR */
}
 
#header-region h3, #header-region label, #header-region li {
margin: 0 1em;
padding: 0;
background: none;
}
 
#wrapper {
/** background: #edf5fa url(images/body.png) repeat-x 50% 0; **/
}
 
#wrapper {
width: 955px;
margin-left:auto;
margin-right:auto;
background-color: #FFFFFF;
-moz-box-shadow: 3px 0px 0 #aaa;
-webkit-box-shadow: 3px 0px 0 #aaa;
box-shadow: 3px 0px 0 #aaa;
}
 
#wrapper #container {
margin: 0 auto;
padding: 0 20px;
}
 
#wrapper #container {
height: 80px;
}
 
#wrapper #container #header #logo-floater {
position: absolute;
}
 
#wrapper #container #header h1, #wrapper #container #header h1 a:link, #wrapper #container #header h1 a:visited {
line-height: 120px;
position: relative;
z-index: 2;
white-space: nowrap;
}
 
#wrapper #container #header h1 span {
font-weight: bold;
}
 
#wrapper #container #header h1 img {
padding-top: 14px;
padding-right: 20px; /* LTR */
float: left; /* LTR */
}
 
#logo-floater {
padding-left: 20px;
padding-top: 10px;
}
 
/* We must define 100% width to avoid the body being too narrow for near-empty pages */
#wrapper #container {
float: left;
width: 100%;
background-color: #FFFFFF;
}
 
#center {
width: 555px;
min-height: 650px;
background-color: #FFFFFF;
height: auto;
float: left;
}
 
#center h2 {
background: url("images/puce_titre_2.png") no-repeat scroll 13px 0 transparent;
color: #4F3F1B;
font-weight: bold;
padding: 0 0 10px 42px;
width: 100%;
}
 
#center h3 {
color: #9AC343;
font-weight: bold;
padding: 10px 0 5px 0;
}
 
#center h4 {
color: #0396A6;
font-weight: bold;
padding: 5px 0 0 0;
}
 
#center li {
margin-left: 20px;
padding: 0 0 0 0;
list-style-type: disc;
}
 
#center li.num {
list-style-type: decimal;
margin-left: 20px;
}
 
.placement_image {
display: inline;
float: left;
}
 
#left {
width: 190px;
padding:5px;
padding-left: 0px;
float: left;
min-height: 650px;
background-color: #FFFFFF;
}
 
#sidebar-left > div > div > div > ul.menu > li {
padding-left:20px;
}
 
#sidebar-left > div > div > div > ul.menu > li > a.active-trail {
color: #FFFFFF;
font-weight: bold;
padding-left: 5px;
-moz-border-radius: 0.9em 0.9em 0.9em 0.9em;
}
 
#sidebar-left a.active-trail {
color: #800000;
text-decoration: underline;
}
 
#sidebar-left {
-webkit-border-radius-topright: 20px 20px;
-webkit-border-radius-bottomright: 20px 20px;
-moz-border-radius-topright: 20px 20px;
-moz-border-radius-bottomright: 0px 0px;
border-top-right-radius: 20px 20px;
border-bottom-right-radius: 20px 20px;
position:absolute;
width: inherit;
}
 
#sidebar-left.general {
background-color: #0396A6;
}
 
#sidebar-left.relais {
background-color: #BF3600;
}
 
#sidebar-left.enseignants {
background-color: #9AC343;
}
 
#sidebar-left.jeunes {
background-color: #EF7B1D;
}
 
#sidebar-left > div > h2 {
display: none;
}
 
#sidebar-left a {
color: #FFFFFF;
font-weight: bold;
padding-left: 5px;
}
 
.content > div > ul > li {
background: transparent url(images/puce_menu_niveau_1_triangle.png) no-repeat 3px 0.55em;
}
 
ul.menu > li {
padding-top:5px;
padding-left:5px;
}
 
.menu_recourbe {
 
-moz-border-radius-bottomleft: 901px 158px;
-moz-border-radius-bottomright: 300px 24px;
border-bottom-left-radius: 901px 158px;
border-bottom-right-radius: 300px 24px;
 
background-color: #FFFFFF;
width:inherit;
height: 30px;
position: absolute;
z-index: 50;
}
 
#right {
width: 200px;
float: right;
background-color: #FFFFFF;
}
 
#right h2 {
display: none;
}
 
.titre_bloc {
color: #FFFFFF;
font-weight: bold;
background-color: #5F8DBF;
-webkit-border-radius-topleft: 20px 20px;
-moz-border-radius-topleft: 20px 20px;
border-top-left-radius: 20px 20px;
}
 
.ods_ou_phenoclim .titre_bloc {
background-color: #99CC32;
}
 
.info_utilisateur, .formulaire_identification_ods, .ods_ou_phenoclim, .info_reseau {
 
-webkit-border-radius-topleft: 20px 20px;
-webkit-border-radius-bottomleft: 20px 20px;
-moz-border-radius-topleft: 20px 20px;
-moz-border-radius-bottomleft: 20px 20px;
border-top-left-radius: 20px 20px;
border-bottom-left-radius: 20px 20px;
border: solid 1px;
background-color: #FFFFFF;
text-align: center;
border-color: #D1C6A8;
padding-bottom: 6px;
}
 
.info_utilisateur a {
padding: 10px 10px 10px 25px;
}
 
.info_reseau a {
padding: 10px 10px 10px 0;
}
 
.info_reseau .titre_bloc {
background-color:#EF7B1D;
}
 
#lien_mes_obs {
background: url("images/mes_obs.png") no-repeat scroll 5px 0.75em transparent;
}
 
#lien_admin {
background: transparent url(images/admin.png) no-repeat 1px 0.7em;
}
 
#lien_mon_profil {
background: transparent url(images/mon_profil.png) no-repeat 1px 0.7em;
}
 
#lien_deconnexion {
background: transparent url(images/deconnexion.png) no-repeat 1px 0.7em;
}
 
.nb_inscrits {
background: transparent url(images/puce-inscrits.png) no-repeat;
padding: 5px;
padding-left: 30px;
text-align: right;
font-size: 1.2em;
}
 
 
/** Bloc de description en haut de la page d'accueil **/
#node-2 {
visibility: hidden;
height: 0px;
padding-bottom : 0px;
padding-top : 0px;
}
 
#block-block-6 {
border: 2px dashed #D2C7AA;
text-align: center;
margin-left: 0.6em;
}
 
#block-block-6 h2 {
padding: 0 0 0 0;
background: none;
font-weight: bold;
}
 
#block-block-6 p {
color : #546F83;
font-weight: normal;
margin: 0;
}
 
/** Bloc des derni�res new ods en page d'accueil **/
 
.views-row {
clear: both;
padding-top: 20px;
}
 
.views-row .views-field-field-image-fid {
display: inline;
float: left;
padding-top: 8px;
}
 
.views-row .views-field-title {
display: inline;
float: left;
padding-left: 10px;
padding-right: 10px;
font-size: 1.2em;
max-width: 400px;
}
 
.views-row .views-field-title a {
color: #9AC343;
}
 
.views-row .views-field-teaser {
display: inline;
float: right;
width: 420px;
}
 
.derniers_articles .views-row .views-field-teaser {
width: 445px;
}
 
.derniers_articles .views-field-field-image-fid {
width: 100px;
}
 
#dernieres_obs li a {
color: #494949;
}
 
.lire_toutes_actus {
text-align: right;
float: right;
padding-bottom: 15px;
}
 
.separation_invisible {
visibility: hidden;
clear: both;
}
 
/** Styles des onglets des derni�res actualit�s **/
#onglets {
margin-right: auto;
position: relative;
bottom: -2px;
z-index: 1;
clear:left;
}
 
.conteneur_onglets {
overflow: hidden;
float: left;
background: #D1C6AB;
position: relative;
width:545px;
}
 
.contenu_onglet {
padding: 20px;
font-size: 1em;
}
 
ul.liste_onglets {
margin: 0;
padding: 0;
float: left;
list-style: none;
height: 32px; /*--Set height of tabs--*/
}
 
#onglets ul.liste_onglets li {
float: left;
margin: 0;
padding: 0;
height: 31px; /*--Subtract 1px from the height of the unordered list--*/
line-height: 31px; /*--Vertically aligns the text within the tab--*/
border-left: none;
margin-bottom: -1px; /*--Pull the list item down 1px--*/
margin-right: 3px;
overflow: hidden;
position: relative;
background: #DFDBD1;
list-style-type: none;
-webkit-border-radius-topleft: 10px 10px;
-webkit-border-radius-topright: 10px 10px;
-moz-border-radius-topleft: 10px 10px;
-moz-border-radius-topright: 10px 10px;
border-top-left-radius: 10px 10px;
border-top-right-radius: 10px 10px;
}
 
#onglets ul.liste_onglets li.active {
background: #D1C6AB;
}
 
#onglets ul.liste_onglets li a {
text-decoration: none;
color: #546F83;
display: block;
font-size: 1.1em;
padding-left: 7px;
padding-right: 7px;
outline: none;
}
 
.conteneur_onglets tbody {
border-top: none;
}
 
/* We ensure the sidebars are still clickable using z-index */
#wrapper #container .sidebar {
margin: 60px 0 5em;
width: 210px;
float: left;
z-index: 2;
position: relative;
background-color: #FFFFFF;
}
 
#wrapper #container .sidebar .block {
margin: 0 0 1.5em 0;
}
 
#sidebar-left .block {
padding: 25px 15px 0 0px;
}
 
#sidebar-right .block {
padding: 0 0px 0 15px;
}
 
.block .content {
margin: 0.5em 0;
}
 
#sidebar-left .block-region {
margin: 0 15px 0 0px; /* LTR */
}
 
#sidebar-right .block-region {
margin: 0 0px 0 15px; /* LTR */
}
 
.block-region {
padding: 1em;
background: transparent;
border: 2px dashed #b4d7f0;
text-align: center;
font-size: 1.3em;
}
 
/** Style g�n�ral applicable � toute les pages **/
.cadre_information {
background: url("images/information.png") no-repeat scroll 5px 12px #DFDBD1;
border: 1px solid #DFDBD1;
padding: 10px 10px 10px 30px;
}
 
.bouton {
-moz-border-radius: 5px 5px 5px 5px;
-moz-box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);
color: #FFFFFF !important;
cursor: pointer;
display: inline-block;
font-weight: bold;
overflow: visible;
position: relative;
text-decoration: none !important;
width: auto;
}
 
.bouton.orange, .bouton.orange:hover {
background-color: #FF7F00;
border: 1px solid #FF6600;
}
 
.bouton.vert, .bouton.vert:hover {
background-color: #9AC343;
border: 1px solid #7bb401;
}
 
.bouton.medium {
font-size: 12px;
padding: 6px 14px;
}
 
.bouton a {
color: #FFFFFF;
}
 
.bouton a:hover {
color: #404040;
}
 
.bouton_plante {
background : url("http://www.obs-saisons.fr/images/boutonplante.jpg") no-repeat;
width:152px;
height:147px;
margin: 0 4px 0 89px;
}
 
.bouton_plante:hover {
background : url("http://www.obs-saisons.fr/images/boutonplante-hover.jpg") no-repeat;
cursor:pointer;
}
 
.bouton_animaux {
background : url("http://www.obs-saisons.fr/images/boutonanimaux.jpg") no-repeat;
width:151px;
height:147px;
margin: 0 29px 0 30px;
}
 
.bouton_animaux:hover {
background : url("http://www.obs-saisons.fr/images/boutonanimaux-hover.jpg") no-repeat;
cursor:pointer;
}
 
/* Now we add the backgrounds for the main content shading */
#wrapper #container #center #squeeze {
/** background: #fff url(images/bg-content.png) repeat-x 50% 0;**/
position: relative;
}
 
#wrapper #container #center .right-corner {
/** background: transparent url(images/bg-content-right.png) no-repeat 100% 0; **/
position: relative;
left: 10px;
}
 
#wrapper #container #center .right-corner .left-corner {
padding: 60px 25px 5em 35px;
/** background: transparent url(images/bg-content-left.png) no-repeat 0 0; **/
margin-left: -10px;
position: relative;
left: -10px;
min-height: 400px;
}
 
#wrapper #container #footer {
float: none;
clear: both;
text-align: center;
margin: 4em 0 -3em;
color: #898989;
}
 
#wrapper #container .breadcrumb {
position: absolute;
top: 15px;
left: 35px; /* LTR */
z-index: 3;
}
 
/**
* Header
*/
#wrapper #container #header h1, #wrapper #container #header h1 a:link, #wrapper #container #header h1 a:visited {
color: #fff;
font-weight: normal;
text-shadow: #1659ac 0px 1px 3px;
font-size: 1.5em;
}
 
#header {
height: 180px;
background-color: #FFFFFF;
width: 955px;
}
 
.printemps {
background: transparent url(images/bandeaux/bandeau-printemps.png) no-repeat 50% 0;
}
 
.ete {
background: transparent url(images/bandeaux/bandeau-ete.png) no-repeat 50% 0;
}
 
.automne {
background: transparent url(images/bandeaux/bandeau-automne.png) no-repeat 50% 0;
}
 
.hiver {
background: transparent url(images/bandeaux/bandeau-hiver.png) no-repeat 50% 0;
}
 
#wrapper #container #header h1 a:hover {
text-decoration: none;
}
 
#wrapper #container .breadcrumb {
font-size: 0.92em;
}
 
#wrapper #container .breadcrumb, #wrapper #container .breadcrumb a {
color: #529ad6;
}
 
#mission {
padding: 1em;
background-color: #fff;
border: 1px solid #e0e5fb;
margin-bottom: 2em;
}
 
#footer {
height: 120px;
background: transparent url(images/bandeaux/bandeau-bas.png) no-repeat 50% 0;
clear:both;
width:955px;
margin-left:auto;
margin-right: auto;
background-color: #FFFFFF;
text-align: center;
vertical-align: bottom;
}
 
.liens_bas_page {
padding-top: 75px;
color: #766F64;
font-weight: bold;
}
 
.liens_bas_page a {
color: #766F64;
margin-left: 10px;
padding : 4px 0 0 20px;
font-size: 1em;
}
 
#lien_aide {
background : url("images/faq.png") no-repeat scroll 0 2px transparent
}
 
#lien_rss {
background : url("images/rss.png") no-repeat scroll 0 2px transparent
}
 
#lien_contact {
background : url("images/contact.png") no-repeat scroll 0 2px transparent
}
 
#lien_CMS {
background : url("images/logo_drupal.jpg") no-repeat scroll 0 2px transparent
}
 
/**
* Primary navigation
*/
ul.primary-links {
margin: 0;
margin: -25px 0 0;
padding: 0;
float: right; /* LTR */
position: relative;
z-index: 4;
height: 25px;
}
 
ul.primary-links li {
padding: 0;
height: 25px;
margin-left: 2px;
float: left; /* LTR */
background-image: none;
-moz-border-radius-topright: 1em;
-moz-border-radius-topleft: 1em;
border-top-right-radius: 1em;
border-top-left-radius: 1em;
}
 
ul.primary-links li.lien_primaire {
margin-left: 3px;
margin-top: 0px;
margin-bottom: 0px;
margin-right: 0px;
-moz-box-shadow: 3px 0px 0 #aaa;
-webkit-box-shadow: 3px 0px 0 #aaa;
box-shadow: 3px 0px 0 #aaa;
}
 
 
li#lien_primaire_1 {
width: 20px;
background-color : #6C9ED8;
}
 
li#lien_primaire_1 a img {
padding-top: 2px;
}
 
li#lien_primaire_2 {
background-color : #BF3600;
}
 
li#lien_primaire_3 {
background-color : #9AC343;
}
 
li#lien_primaire_4 {
background-color : #EF7B1D;
}
 
li#lien_primaire_5 {
background-color : #708090;
}
 
ul.primary-links li a, ul.primary-links li a:link, ul.primary-links li a:visited {
display: block;
margin: 0 1em;
font-weight: bold;
color: #FFFFFF;
padding-top: 2px;
}
 
ul.primary-links li a:hover, ul.primary-links li a.active {
color: #fff;
}
 
ul.primary-links li.active-trail {
height:35px;
margin-top:-10px;
}
 
ul.primary-links li.active-trail a {
padding-top: 5px;
}
 
/**
* Secondary navigation
*/
ul.secondary-links {
margin: 0;
padding: 18px 0 0;
float: right; /* LTR */
clear: right; /* LTR */
position: relative;
z-index: 4;
}
 
ul.secondary-links li {
margin: 0;
padding: 0;
float: left; /* LTR */
background-image: none;
}
 
ul.secondary-links li a, ul.secondary-links li a:link, ul.secondary-links li a:visited {
display: block;
margin: 0 1em;
padding: .75em 0 0;
color: #cde3f1;
background: transparent;
}
 
ul.secondary-links li a:hover, ul.secondary-links li a.active {
color: #cde3f1;
background: transparent;
}
 
/**
* Local tasks
*/
ul.primary, ul.primary li, ul.secondary, ul.secondary li {
border: 0;
background: none;
margin: 0;
padding: 0;
}
 
#tabs-wrapper {
border-bottom: 1px solid #e9eff3;
position: relative;
}
ul.primary {
padding: 0.5em 0 10px;
float: left; /* LTR */
}
ul.secondary {
clear: both;
text-align: left; /* LTR */
border-bottom: 1px solid #e9eff3;
margin: -0.2em -26px 1em;
padding: 0 26px 0.6em;
}
h2.with-tabs {
float: left; /* LTR */
margin: 0 2em 0 0; /* LTR */
padding: 0;
}
 
ul.primary li a, ul.primary li.active a, ul.primary li a:hover, ul.primary li a:visited,
ul.secondary li a, ul.secondary li.active a, ul.secondary li a:hover, ul.secondary li a:visited {
border: 0;
background: transparent;
padding: 4px 1em;
margin: 0 0 0 1px; /* LTR */
height: auto;
text-decoration: none;
position: relative;
top: -1px;
display: inline-block;
}
ul.primary li.active a, ul.primary li.active a:link, ul.primary li.active a:visited, ul.primary li a:hover,
ul.secondary li.active a, ul.secondary li.active a:link, ul.secondary li.active a:visited, ul.secondary li a:hover {
background: url(images/bg-tab.png) repeat-x 0 50%;
color: #fff;
}
ul.primary li.active a,
ul.secondary li.active a {
font-weight: bold;
}
 
/**
* Nodes & comments
*/
.node {
border-bottom: 1px solid #e9eff3;
margin: 0 0px 1.5em;
padding: 1.5em 13px;
}
 
ul.links li, ul.inline li {
margin-left: 0;
margin-right: 0;
padding-left: 0; /* LTR */
padding-right: 1em; /* LTR */
background-image: none;
}
 
.node .links, .comment .links {
text-align: left; /* LTR */
}
 
.node .links ul.links li, .comment .links ul.links li {}
.terms ul.links li {
margin-left: 0;
margin-right: 0;
padding-right: 0;
padding-left: 1em;
}
 
.picture, .comment .submitted {
float: right; /* LTR */
clear: right; /* LTR */
padding-left: 1em; /* LTR */
}
 
.new {
color: #ffae00;
font-size: 0.92em;
font-weight: bold;
float: right; /* LTR */
}
 
.terms {
float: right; /* LTR */
}
 
.preview .node, .preview .comment, .sticky {
margin: 0;
padding: 0.5em 0;
border: 0;
background: 0;
}
 
.sticky {
padding: 1em;
background-color: #fff;
border: 1px solid #e0e5fb;
margin-bottom: 2em;
}
 
#comments {
position: relative;
top: -1px;
border-bottom: 1px solid #e9eff3;
margin: -1.5em -25px 0;
padding: 0 25px;
}
 
#comments h2.comments {
margin: 0 -25px;
padding: .5em 25px;
background: #fff url(images/gradient-inner.png) repeat-x 0 0;
}
 
.comment {
margin: 0 -25px;
padding: 1.5em 25px 1.5em;
border-top: 1px solid #e9eff3;
}
 
/* bouton ajout de commentaires */
#center li.comment_add a {
-moz-border-radius: 5px 5px 5px 5px;
-moz-box-shadow: 1px 1px 2px rgba(0, 0, 0, 0.3);
cursor: pointer;
display: inline-block;
font-weight: bold;
overflow: visible;
position: relative;
text-decoration: none !important;
width: auto;
font-size: 12px;
background-color: #9AC343;
border: 1px solid #7bb401;
padding-top: 10px;
padding-top: 10px;
}
 
#center li.comment_add a:before {
content:" >> ";
}
 
#center li.comment_add a, #center .comment_add a:hover {
border: 1px solid #7bb401;
}
 
#center .comment_add a:hover {
color: #FFFFFF;
}
 
#center li.comment_add a {
padding: 6px 14px;
}
 
.indented {
margin-left: 25px; /* LTR */
}
 
.comment h3 a.active {
color: #494949;
}
 
.node .content, .comment .content {
margin: 0.6em 0;
}
 
/**
* Aggregator.module
*/
#aggregator {
margin-top: 1em;
}
#aggregator .feed-item-title {
font-size: 160%;
line-height: 130%;
}
#aggregator .feed-item {
border-bottom: 1px solid #e9eff3;
margin: -1.5em -31px 1.75em;
padding: 1.5em 31px;
}
#aggregator .feed-item-categories {
font-size: 0.92em;
}
#aggregator .feed-item-meta {
font-size: 0.92em;
color: #898989;
}
 
/**
* Color.module
*/
#palette .form-item {
border: 1px solid #fff;
}
#palette .item-selected {
background: #fff url(images/gradient-inner.png) repeat-x 0 0;
border: 1px solid #d9eaf5;
}
 
/**
* Menu.module
*/
tr.menu-disabled {
opacity: 0.5;
}
tr.odd td.menu-disabled {
background-color: #edf5fa;
}
tr.even td.menu-disabled {
background-color: #fff;
}
 
/**
* Poll.module
*/
.poll .bar {
background: #fff url(images/bg-bar-white.png) repeat-x 0 0;
border: solid #f0f0f0;
border-width: 0 1px 1px;
}
 
.poll .bar .foreground {
background: #71a7cc url(images/bg-bar.png) repeat-x 0 100%;
}
 
.poll .percent {
font-size: .9em;
}
 
/**
* Autocomplete.
*/
#autocomplete li {
cursor: default;
padding: 2px;
margin: 0;
}
 
/**
* Collapsible fieldsets
*/
fieldset {
margin: 1em 0;
padding: 1em;
border: 1px solid #d9eaf5;
background: #fff url(images/gradient-inner.png) repeat-x 0 0;
}
 
/* Targets IE 7. Fixes background image in field sets. */
*:first-child+html fieldset {
padding: 0 1em 1em;
background-position: 0 .75em;
background-color: transparent;
}
 
*:first-child+html fieldset > .description, *:first-child+html fieldset .fieldset-wrapper .description {
padding-top: 1em;
}
 
fieldset legend {
/* Fix disappearing legend in FFox */
display: block;
}
 
*:first-child+html fieldset legend, *:first-child+html fieldset.collapsed legend {
display: inline;
}
 
html.js fieldset.collapsed {
background: transparent;
padding-top: 0;
padding-bottom: .6em;
}
 
html.js fieldset.collapsible legend a {
padding-left: 2em; /* LTR */
background: url(images/menu-expanded.gif) no-repeat 0% 50%; /* LTR */
}
 
html.js fieldset.collapsed legend a {
background: url(images/menu-collapsed.gif) no-repeat 0% 50%; /* LTR */
}
 
/**
* Syndication icons and block
*/
#block-node-0 h2 {
float: left; /* LTR */
padding-right: 20px; /* LTR */
}
 
#block-node-0 img, .feed-icon {
float: right; /* LTR */
padding-top: 4px;
}
 
#block-node-0 .content {
clear: right; /* LTR */
}
 
/**
* Login Block
*/
#user-login-form {
text-align: center;
}
#user-login-form ul {
text-align: left; /* LTR */
}
 
/**
* User profiles.
*/
.profile {
margin-top: 1.5em;
}
.profile h3 {
border-bottom: 0;
margin-bottom: 1em;
}
.profile dl {
margin: 0;
}
 
.profile dt {
font-weight: normal;
color: #898989;
font-size: 0.92em;
line-height: 1.3em;
margin-top: 1.4em;
margin-bottom: 0.45em;
}
.profile dd {
margin-bottom: 1.6em;
}
 
form fieldset {
margin-top: 35px;
}
 
/**
* Admin Styles
*/
div.admin-panel,
div.admin-panel .description,
div.admin-panel .body,
div.admin,
div.admin .left,
div.admin .right,
div.admin .expert-link,
div.item-list,
.menu {
margin: 0;
padding: 0;
}
 
div.admin .left {
float: left; /* LTR */
width: 48%;
}
div.admin .right {
float: right; /* LTR */
width: 48%;
}
 
div.admin-panel {
background: #fff url(images/gradient-inner.png) repeat-x 0 0;
padding: 1em 1em 1.5em;
}
div.admin-panel .description {
margin-bottom: 1.5em;
}
div.admin-panel dl {
margin: 0;
}
div.admin-panel dd {
color: #898989;
font-size: 0.92em;
line-height: 1.3em;
margin-top: -.2em;
margin-bottom: .65em;
}
 
table.system-status-report th {
border-color: #d3e7f4;
}
 
#autocomplete li.selected, tr.selected td, tr.selected td.active {
background: #027ac6;
color: #fff;
}
 
tr.selected td a:link, tr.selected td a:visited, tr.selected td a:active {
color: #d3e7f4;
}
 
tr.taxonomy-term-preview {
opacity: 0.5;
}
 
tr.taxonomy-term-divider-top {
border-bottom: none;
}
 
tr.taxonomy-term-divider-bottom {
border-top: 1px dotted #CCC;
}
 
/**
* CSS support
*/
 
/*******************************************************************
* Color Module: Don't touch *
*******************************************************************/
 
/**
* Generic elements.
*/
.messages {
background-color: #fff;
border: 1px solid #b8d3e5;
}
 
.preview {
background-color: #fcfce8;
border: 1px solid #e5e58f;
}
 
div.status {
color: #33a333;
border-color: #c7f2c8;
}
 
div.error, tr.error {
color: #a30000;
background-color: #FFCCCC;
}
 
.form-item input.error, .form-item textarea.error {
border: 1px solid #c52020;
color: #363636;
}
 
/**
* dblog.module
*/
tr.dblog-user {
background-color: #fcf9e5;
}
 
tr.dblog-user td.active {
background-color: #fbf5cf;
}
 
tr.dblog-content {
background-color: #fefefe;
}
 
tr.dblog-content td.active {
background-color: #f5f5f5;
}
 
tr.dblog-warning {
background-color: #fdf5e6;
}
 
tr.dblog-warning td.active {
background-color: #fdf2de;
}
 
tr.dblog-error {
background-color: #fbe4e4;
}
 
tr.dblog-error td.active {
background-color: #fbdbdb;
}
tr.dblog-page-not-found, tr.dblog-access-denied {
background: #d7ffd7;
}
tr.dblog-page-not-found td.active, tr.dblog-access-denied td.active {
background: #c7eec7;
}
 
/**
* Status report colors.
*/
table.system-status-report tr.error, table.system-status-report tr.error th {
background-color: #fcc;
border-color: #ebb;
color: #200;
}
table.system-status-report tr.warning, table.system-status-report tr.warning th {
background-color: #ffd;
border-color: #eeb;
}
table.system-status-report tr.ok, table.system-status-report tr.ok th {
background-color: #dfd;
border-color: #beb;
}
 
.forum-add-node.forum-add-forum {
width: 230px;
}
 
/**
* Style des onglets de la page des actus par années
*/
 
.lien_filtre_actu {
font-size: 1.2em;
margin-right: 5px;
}
 
.lien_filtre_actu.lien_filtre_actu_actif {
background: url("/themes/ods/images/bg-tab.png") repeat-x scroll 0 50% rgba(0, 0, 0, 0);
color: #ffffff !important;
font-size: 1.3em;
font-weight: bold;
padding: 4px;
}
 
.lien_filtre_actu.lien_filtre_actu_actif > a {
color: #FFFFFF;
}
/trunk/themes/ods/logo_tela.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/themes/ods/logo_tela.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/themes/ods/search-theme-form.tpl.php
New file
0,0 → 1,38
<?php
// $Id: search-theme-form.tpl.php,v 1.1 2007/10/31 18:06:38 dries Exp $
 
/**
* @file search-theme-form.tpl.php
* Default theme implementation for displaying a search form directly into the
* theme layout. Not to be confused with the search block or the search page.
*
* Available variables:
* - $search_form: The complete search form ready for print.
* - $search: Array of keyed search elements. Can be used to print each form
* element separately.
*
* Default keys within $search:
* - $search['search_theme_form']: Text input area wrapped in a div.
* - $search['submit']: Form submit button.
* - $search['hidden']: Hidden form elements. Used to validate forms when submitted.
*
* Since $search is keyed, a direct print of the form element is possible.
* Modules can add to the search form so it is recommended to check for their
* existance before printing. The default keys will always exist.
*
* <?php if (isset($search['extra_field'])): ?>
* <div class="extra-field">
* <?php print $search['extra_field']; ?>
* </div>
* <?php endif; ?>
*
* To check for all available data within $search, use the code below.
*
* <?php print '<pre>'. check_plain(print_r($search, 1)) .'</pre>'; ?>
*
* @see template_preprocess_search_theme_form()
*/
?>
<div id="search" class="container-inline">
<?php print $search_form; ?>
</div>
/trunk/themes/ods/README
New file
0,0 → 1,0
Thème Drupal de l'Observatoire des saisons (http://www.obs-saisons.fr)
/trunk/themes/ods/favicon.ico
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/themes/ods/favicon.ico
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/themes/ods/screenshot.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/themes/ods/screenshot.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/themes/ods/page.tpl.php
New file
0,0 → 1,120
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<?php print $head ?>
<title><?php print $head_title ?></title>
<?php print $styles ?>
<?php print $scripts ?>
<!--[if lt IE 7]>
<?php print phptemplate_get_ie_styles(); ?>
<![endif]-->
<link href="http://www.obs-saisons.fr/rss" title="Observatoire des saisons : les derniers articles" type="application/rss+xml" rel="alternate" />
<link href="http://www.obs-saisons.fr/applications/jrest/OdsSyndicationObservation/par-defaut/rss2" title="Observatoire des saisons : les dernieres observations" type="application/rss+xml" rel="alternate" />
<script type="text/javascript" src="http://www.obs-saisons.fr/themes/ods/js/ods.js"></script>
</head>
<body<?php print phptemplate_body_class($left, $right); ?>>
<div id="header-region" class="clear-block">
<?php print $header; ?>
<?php print $closure; ?>
</div>
<div class="titre_site">
<span id="observatoire">Observatoire </span>
<span id="des">des</span>
<span id="saisons"> Saisons</span>
</div>
<div id="wrapper" class="zone_principale">
<div class="navigation_niveau_1">
<?php if (isset($primary_links)) : ?>
<?php print primary_links( $primary_links, array('class' => 'links primary-links')) ?>
<?php endif; ?>
<?php if (isset($secondary_links)) : ?>
<?php print theme('links', $secondary_links, array('class' => 'links secondary-links')) ?>
<?php endif; ?>
</div>
<?php $saisons = array('printemps', 'ete', 'automne','hiver'); $saison = $saisons[rand(0,3)]; ?>
<div id="header" class="<?= $saison; ?>">
<div id="logo-floater">
<?php
if ($logo || $site_title) {
print '<h1><a href="'. check_url($front_page) .'" title="'. $site_title .'">';
if ($logo) {
print '<img src="'. check_url($logo) .'" alt="'. $site_title .'" id="logo" />';
}
print $site_html .'</a></h1>';
}
?>
</div>
<img class="petit_logo_tela" title="tela botanica" alt="logo tela botanica" src="http://www.obs-saisons.fr/themes/ods/logo_tela.png">
<img class="petit_logo_cnrs" title="cnrs" alt="logo cnrs" src="http://www.obs-saisons.fr/themes/ods/logo_cnrs.png">
</div> <!-- /header -->
 
<?php
$styles_menu = array('general','relais','enseignants','jeunes');
$style_en_cours = 'general';
$i = 0;
foreach($primary_links as $name => $link) {
if(strpos($name,'active-trail') !== false) {
$style_en_cours = $styles_menu[$i];
}
$i++;
}
?>
<div id="left">
<?php if ($left): ?>
<div class="menu_recourbe"></div>
<div id="sidebar-left" class="sidebar <?= $style_en_cours; ?>">
<?php print $left ?>
</div>
<?php endif; ?>
</div><!-- /navigation -->
<div id="center">
<?php print $breadcrumb; ?>
<?php if ($tabs): print '<div id="tabs-wrapper" class="clear-block">'; endif; ?>
<?php if ($title): print '<h2'. ($tabs ? ' class="with-tabs"' : '') .'>'. $title .'</h2>'; endif; ?>
<?php if ($tabs): print '<ul class="tabs primary">'. $tabs .'</ul></div>'; endif; ?>
<?php if ($tabs2): print '<ul class="tabs secondary">'. $tabs2 .'</ul>'; endif; ?>
<?php print $help; ?>
<?php print $content ?>
<!-- remove rss feed from pages - maybe suppress this line - just commented to test--> <?php// print $feed_icons ?> <!--end remove feed-->
</div><!-- centre -->
<div id="right">
<?php if ($right): ?>
<div id="sidebar-right" class="sidebar">
<?php print $right; ?>
</div><!-- zone droite -->
<?php endif; ?>
</div>
<div id="footer">
<?php print $footer_message; ?>
<?php print $footer ;?>
<div class="liens_bas_page">
<div class="liens_internes">
<a id="lien_aide" class="lien_interne" href="http://www.obs-saisons.fr/aide" > Aide </a>
<a id="lien_rss" class="lien_interne" href="http://www.obs-saisons.fr/rss" > RSS </a>
<a id="lien_contact" class="lien_interne" href="http://www.obs-saisons.fr/about/contact" > Contact </a>
</div>
 
<div class="liens_externes">
<a id="lien_tela" class="lien_externe" href="http://www.tela-botanica.org"> Réalisation : Tela Botanica 2010 </a> -
<a id="lien_CMS" class="lien_externe" href="http://drupal.org/"> Drupal </a> -
</div>
</div>
</div><!-- pied de page -->
</div> <!--fermeture div zone-principale-->
</body>
</html>
/trunk/themes/ods/template.php
New file
0,0 → 1,257
<?php
// $Id: template.php,v 1.16.2.3 2010/05/11 09:41:22 goba Exp $
 
/**
* Sets the body-tag class attribute.
*
* Adds 'sidebar-left', 'sidebar-right' or 'sidebars' classes as needed.
*/
function phptemplate_body_class($left, $right) {
if ($left != '' && $right != '') {
$class = 'sidebars';
}
else {
if ($left != '') {
$class = 'sidebar-left';
}
if ($right != '') {
$class = 'sidebar-right';
}
}
 
if (isset($class)) {
print ' class="'. $class .'"';
}
}
 
/**
* Return a themed set of links.
*
* @param $links
* A keyed array of links to be themed.
* @param $attributes
* A keyed array of attributes
* @return
* A string containing an unordered list of links.
*/
function primary_links($links, $attributes = array('class' => 'links')) {
global $language;
$output = '';
 
if (count($links) > 0) {
$output = '<ul'. drupal_attributes($attributes) .'>';
 
$num_links = count($links);
$i = 1;
 
foreach ($links as $key => $link) {
$class = $key;
 
// Add first, last and active classes to the list of links to help out themers.
if ($i == 1) {
$class .= ' first';
}
if ($i == $num_links) {
$class .= ' last';
}
if (isset($link['href']) && ($link['href'] == $_GET['q'] || ($link['href'] == '<front>' && drupal_is_front_page()))
&& (empty($link['language']) || $link['language']->language == $language->language)) {
$class .= ' active';
}
$id = 'lien_primaire_'.$i;
$class .= ' lien_primaire';
$output .= '<li'. drupal_attributes(array('id' => $id, 'class' => $class)) .'>';
 
if (isset($link['href'])) {
if($i == 1) {
$link['html'] = true;
$link['title'] = '<img class="icone_acceuil" alt="'.$link['title'].'" src="'.base_path().path_to_theme().'/images/accueil.png" />';
}
// Pass in $link as $options, they share the same keys.
$output .= l($link['title'], $link['href'], $link);
}
else if (!empty($link['title'])) {
// Some links are actually not links, but we wrap these in <span> for adding title and class attributes
if (empty($link['html'])) {
$link['title'] = check_plain($link['title']);
}
$span_attributes = '';
if (isset($link['attributes'])) {
$span_attributes = drupal_attributes($link['attributes']);
}
$output .= '<span'. $span_attributes .'>'. $link['title'] .'</span>';
}
 
$i++;
$output .= "</li>\n";
}
 
$output .= '</ul>';
}
 
return $output;
}
 
/**
* Override or insert PHPTemplate variables into the search_theme_form template.
*
* @param $vars
* A sequential array of variables to pass to the theme template.
* @param $hook
* The name of the theme function being called (not used in this case.)
*/
function ods_preprocess_search_theme_form(&$vars, $hook) {
// Remove the "Search this site" label from the form.
$vars['form']['search_theme_form']['#title'] = t('');
// Set a default value for text inside the search box field.
$vars['form']['search_theme_form']['#value'] = t('');
// Add a custom class and placeholder text to the search box.
$vars['form']['search_theme_form']['#attributes'] = array('class' => 'NormalTextBox txtSearch',
'onfocus' => "if (this.value == '') {this.value = '';}",
'onblur' => "if (this.value == '') {this.value = '';}");
// Change the text on the submit button
//$vars['form']['submit']['#value'] = t('Go');
 
// Rebuild the rendered version (search form only, rest remains unchanged)
unset($vars['form']['search_theme_form']['#printed']);
$vars['search']['search_theme_form'] = drupal_render($vars['form']['search_theme_form']);
 
$vars['form']['submit']['#type'] = 'image_button';
$vars['form']['submit']['#src'] = path_to_theme() . '/images/search.jpg';
// Rebuild the rendered version (submit button, rest remains unchanged)
unset($vars['form']['submit']['#printed']);
$vars['search']['submit'] = drupal_render($vars['form']['submit']);
 
// Collect all form elements to make it easier to print the whole form.
$vars['search_form'] = implode($vars['search']);
}
 
/**
* Override or insert PHPTemplate variables into the search_block_form template.
*
* @param $vars
* A sequential array of variables to pass to the theme template.
* @param $hook
* The name of the theme function being called (not used in this case.)
*/
function ods_preprocess_search_block_form(&$vars, $hook) {
// Remove the "Search this site" label from the form.
$vars['form']['search_block_form']['#title'] = t('');
// Set a default value for text inside the search box field.
$vars['form']['search_block_form']['#value'] = t('Rechercher');
// Add a custom class and placeholder text to the search box.
$vars['form']['search_block_form']['#attributes'] = array('class' => 'NormalTextBox txtSearch',
'onfocus' => "if (this.value == 'Rechercher') {this.value = '';}",
'onblur' => "if (this.value == 'Rechercher') {this.value = '';}");
// Change the text on the submit button
//$vars['form']['submit']['#value'] = t('Go');
$vars['form']['search_block_form']['#label'] = t('');
// Rebuild the rendered version (search form only, rest remains unchanged)
unset($vars['form']['search_block_form']['#printed']);
$vars['search']['search_block_form'] = drupal_render($vars['form']['search_block_form']);
 
$vars['form']['submit']['#type'] = 'image_button';
$vars['form']['submit']['#src'] = path_to_theme() . '/images/search.jpg';
// Rebuild the rendered version (submit button, rest remains unchanged)
unset($vars['form']['submit']['#printed']);
$vars['search']['submit'] = drupal_render($vars['form']['submit']);
 
// Collect all form elements to make it easier to print the whole form.
$vars['search_form'] = implode($vars['search']);
}
 
/**
* Return a themed breadcrumb trail.
*
* @param $breadcrumb
* An array containing the breadcrumb links.
* @return a string containing the breadcrumb output.
*/
function phptemplate_breadcrumb($breadcrumb) {
if (!empty($breadcrumb)) {
return '<div class="breadcrumb">'. implode(' › ', $breadcrumb) .'</div>';
}
}
 
/**
* Override or insert PHPTemplate variables into the templates.
*/
function phptemplate_preprocess_page(&$vars) {
$vars['tabs2'] = menu_secondary_local_tasks();
 
// Hook into color.module
if (module_exists('color')) {
_color_page_alter($vars);
}
}
 
/**
* Add a "Comments" heading above comments except on forum pages.
*/
function ods_preprocess_comment_wrapper(&$vars) {
if ($vars['content'] && $vars['node']->type != 'forum') {
$vars['content'] = '<h2 class="comments">'. t('Comments') .'</h2>'. $vars['content'];
}
}
 
/**
* Returns the rendered local tasks. The default implementation renders
* them as tabs. Overridden to split the secondary tasks.
*
* @ingroup themeable
*/
function phptemplate_menu_local_tasks() {
return menu_primary_local_tasks();
}
 
/**
* Returns the themed submitted-by string for the comment.
*/
function phptemplate_comment_submitted($comment) {
return t('!datetime — !username',
array(
'!username' => theme('username', $comment),
'!datetime' => format_date($comment->timestamp)
));
}
 
/**
* Returns the themed submitted-by string for the node.
*/
function phptemplate_node_submitted($node) {
return t('!datetime — !username',
array(
'!username' => theme('username', $node),
'!datetime' => format_date($node->created),
));
}
 
/**
* Generates IE CSS links for LTR and RTL languages.
*/
function phptemplate_get_ie_styles() {
global $language;
 
$iecss = '<link type="text/css" rel="stylesheet" media="all" href="'. base_path() . path_to_theme() .'/fix-ie.css" />';
if ($language->direction == LANGUAGE_RTL) {
$iecss .= '<style type="text/css" media="all">@import "'. base_path() . path_to_theme() .'/fix-ie-rtl.css";</style>';
}
 
return $iecss;
}
/trunk/themes/ods/images/puce_titre_2.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/themes/ods/images/puce_titre_2.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/themes/ods/images/information.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/themes/ods/images/information.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/themes/ods/images/mes_obs.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/themes/ods/images/mes_obs.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/themes/ods/images/admin.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/themes/ods/images/admin.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/themes/ods/images/puce-inscrits.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/themes/ods/images/puce-inscrits.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/themes/ods/images/contact.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/themes/ods/images/contact.png
New file
Property changes:
Added: svn:executable
+*
\ No newline at end of property
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/themes/ods/images/bg-tab.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/themes/ods/images/bg-tab.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/themes/ods/images/puce_menu_niveau_1_triangle.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/themes/ods/images/puce_menu_niveau_1_triangle.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/themes/ods/images/search.jpg
Cannot display: file marked as a binary type.
svn:mime-type = image/jpeg
/trunk/themes/ods/images/search.jpg
New file
Property changes:
Added: svn:mime-type
+image/jpeg
\ No newline at end of property
/trunk/themes/ods/images/retour.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/themes/ods/images/retour.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/themes/ods/images/puce_titre_enseignants.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/themes/ods/images/puce_titre_enseignants.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/themes/ods/images/puce_titre_relais.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/themes/ods/images/puce_titre_relais.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/themes/ods/images/logo_drupal.jpg
Cannot display: file marked as a binary type.
svn:mime-type = image/jpeg
/trunk/themes/ods/images/logo_drupal.jpg
New file
Property changes:
Added: svn:mime-type
+image/jpeg
\ No newline at end of property
/trunk/themes/ods/images/bandeaux/bandeau-printemps.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/themes/ods/images/bandeaux/bandeau-printemps.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/themes/ods/images/bandeaux/bandeau-bas.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/themes/ods/images/bandeaux/bandeau-bas.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/themes/ods/images/bandeaux/bandeau-automne.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/themes/ods/images/bandeaux/bandeau-automne.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/themes/ods/images/bandeaux/bandeau-ete.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/themes/ods/images/bandeaux/bandeau-ete.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/themes/ods/images/bandeaux/bandeau-hiver.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/themes/ods/images/bandeaux/bandeau-hiver.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/themes/ods/images/mon_profil.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/themes/ods/images/mon_profil.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/themes/ods/images/accueil.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/themes/ods/images/accueil.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/themes/ods/images/rss.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/themes/ods/images/rss.png
New file
Property changes:
Added: svn:executable
+*
\ No newline at end of property
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/themes/ods/images/faq.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/themes/ods/images/faq.png
New file
Property changes:
Added: svn:executable
+*
\ No newline at end of property
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/themes/ods/images/deconnexion.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/themes/ods/images/deconnexion.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/themes/ods/images/puce_titre_jeunes.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/themes/ods/images/puce_titre_jeunes.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/themes/ods/images/retour.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/themes/ods/images/retour.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/themes/ods/images/archives/bg-navigation-item.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/themes/ods/images/archives/bg-navigation-item.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/themes/ods/images/archives/bg-navigation.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/themes/ods/images/archives/bg-navigation.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/themes/ods/images/archives/bg-content-left.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/themes/ods/images/archives/bg-content-left.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/themes/ods/images/archives/menu-collapsed-rtl.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/themes/ods/images/archives/menu-collapsed-rtl.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/themes/ods/images/archives/menu-collapsed.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/themes/ods/images/archives/menu-collapsed.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/themes/ods/images/archives/bg-bar.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/themes/ods/images/archives/bg-bar.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/themes/ods/images/archives/menu-leaf.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/themes/ods/images/archives/menu-leaf.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/themes/ods/images/archives/bg-tab.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/themes/ods/images/archives/bg-tab.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/themes/ods/images/archives/body.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/themes/ods/images/archives/body.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/themes/ods/images/archives/bg-content.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/themes/ods/images/archives/bg-content.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/themes/ods/images/archives/bg-navigation-item-hover.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/themes/ods/images/archives/bg-navigation-item-hover.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/themes/ods/images/archives/gradient-inner.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/themes/ods/images/archives/gradient-inner.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/themes/ods/images/archives/bg-bar-white.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/themes/ods/images/archives/bg-bar-white.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/themes/ods/images/archives/bg-content-right.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/themes/ods/images/archives/bg-content-right.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/themes/ods/images/archives/menu-expanded.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/themes/ods/images/archives/menu-expanded.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/themes/ods/images/archives/task-list.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/themes/ods/images/archives/task-list.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/themes
New file
Property changes:
Added: svn:ignore
+.fr-7YgeYx
+.fr-UvY1ju
+bluemarine
+chameleon
+engines
+garland
+pushbutton
+zen
/trunk/applications/blocs_applettes/applette_rendu.php
New file
0,0 → 1,5
<?php include '/home/ods/www/applications/rendu/rendu.php' ?><?php
echo Liens::renvoyerStylesInclus();
echo Liens::renvoyerScriptsInclus();
echo AppControleur::getContenuCorps();
?>
/trunk/applications/blocs_applettes/applette_phenoclim.php
New file
0,0 → 1,16
<div class="ods_ou_phenoclim">
<div class="titre_bloc">
ODS ou phenoclim</div>
<form action="" id="form_commune_phenoclim" method="post">
<label for="code_postal_commune">Entrez votre code postal </label> <input id="code_postal_commune" name="code_postal_commune" size="5" type="text" /> <input type="submit" value="tester" />&nbsp;</form>
<?php if(isset($_POST['code_postal_commune'])):
 
$adresse_test = 'http://www.obs-saisons.fr/applications/jrest/OdsCommune/estUneCommunePhenoclim/?code_postal='.$_POST['code_postal_commune'];
 
 
$commune_phenoclim = file_get_contents($adresse_test);
 
?> <div class="info_ods_ou_phenoclim">
Votre commune est une commune : <?= ($commune_phenoclim == 'true') ? 'phenoclim' : 'ODS' ?></div>
<?php endif; ?></div>
 
/trunk/applications/stations/config.defaut.js
New file
0,0 → 1,0
var BASE_URL_JREST = 'http://obs-saisons.fr/applications/jrest/';
/trunk/applications/stations/stations.php
New file
0,0 → 1,48
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="Content-style-type" content="text/css" />
<meta http-equiv="Content-script-type" content="text/javascript" />
<meta http-equiv="Content-language" content="fr" />
<base href="<?= dirname($_SERVER['PHP_SELF'])."/"; ?>" />
 
<title>Carte des stations</title>
<meta name="revisit-after" content="15 days" />
<meta name="robots" content="index,follow" />
<meta name="author" content="Tela Botanica" />
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
<script type="text/javascript" src="<?= dirname($_SERVER['PHP_SELF'])."/"; ?>jquery-1.4.4.min.js"></script>
<script type="text/javascript" src="<?= dirname($_SERVER['PHP_SELF'])."/"; ?>config.js"></script>
<script type="text/javascript" src="<?= dirname($_SERVER['PHP_SELF'])."/"; ?>stations.js"></script>
<link media="screen" href="stations.css" type="text/css" rel="stylesheet" />
</head>
<body>
<div id="reducteur">
<div id="bandeau">
<div id="bandeau_contenu">
<div id="titre_monde">
<h1>Observatoire des saisons</h1>
</div>
</div>
</div>
<div id="conteneur_nb_stations">
</div>
<div class="conteneur_carte">
<div id="map_canvas" style="width:600px;height:600px">
</div>
</div>
<div id="conteneur_legende" class="droite">
</div>
</div>
</body>
</html>
/trunk/applications/stations/stations.css
New file
0,0 → 1,44
#rendu_stations {
width:100%;
}
 
.separation_invisible {
clear:both;
visibility:hidden;
}
 
.droite {
float: left;
padding-left: 10px;
}
 
.separation_en_deux > * {
width: 49%;
}
 
.conteneur_carte {
height: 450px;
float: left;
padding-top: 10px;
}
 
.selecteur_critere {
padding-right: 5px;
}
 
.criteres {
padding-bottom: 10px;
}
 
.lien_vers_profil {
cursor: pointer;
text-decoration: underline;
}
 
.legende {
border: 1px solid black;
display: block;
float: left;
height: 1em;
width: 20px;
}
/trunk/applications/stations/stations_widget.php
New file
0,0 → 1,15
<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>
<script type="text/javascript" src="<?php echo dirname($_SERVER['PHP_SELF'])."/"; ?>jquery-1.4.4.min.js"></script>
<script type="text/javascript" src="<?php echo dirname($_SERVER['PHP_SELF'])."/"; ?>config.js"></script>
<script type="text/javascript" src="<?php echo dirname($_SERVER['PHP_SELF'])."/"; ?>stations.js"></script>
<link media="screen" href="<?php echo dirname($_SERVER['PHP_SELF'])."/"; ?>stations.css" type="text/css" rel="stylesheet" />
<div id="rendu_stations">
<div id="conteneur_nb_stations">
</div>
<div class="conteneur_carte">
<div id="map_canvas" style="width:500px;height:500px">
</div>
</div>
<div id="conteneur_legende" class="droite">
</div>
</div>
/trunk/applications/stations/jquery-1.4.4.min.js
New file
0,0 → 1,167
/*!
* jQuery JavaScript Library v1.4.4
* http://jquery.com/
*
* Copyright 2010, John Resig
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* Includes Sizzle.js
* http://sizzlejs.com/
* Copyright 2010, The Dojo Foundation
* Released under the MIT, BSD, and GPL Licenses.
*
* Date: Thu Nov 11 19:04:53 2010 -0500
*/
(function(E,B){function ka(a,b,d){if(d===B&&a.nodeType===1){d=a.getAttribute("data-"+b);if(typeof d==="string"){try{d=d==="true"?true:d==="false"?false:d==="null"?null:!c.isNaN(d)?parseFloat(d):Ja.test(d)?c.parseJSON(d):d}catch(e){}c.data(a,b,d)}else d=B}return d}function U(){return false}function ca(){return true}function la(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function Ka(a){var b,d,e,f,h,l,k,o,x,r,A,C=[];f=[];h=c.data(this,this.nodeType?"events":"__events__");if(typeof h==="function")h=
h.events;if(!(a.liveFired===this||!h||!h.live||a.button&&a.type==="click")){if(a.namespace)A=RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)");a.liveFired=this;var J=h.live.slice(0);for(k=0;k<J.length;k++){h=J[k];h.origType.replace(X,"")===a.type?f.push(h.selector):J.splice(k--,1)}f=c(a.target).closest(f,a.currentTarget);o=0;for(x=f.length;o<x;o++){r=f[o];for(k=0;k<J.length;k++){h=J[k];if(r.selector===h.selector&&(!A||A.test(h.namespace))){l=r.elem;e=null;if(h.preType==="mouseenter"||
h.preType==="mouseleave"){a.type=h.preType;e=c(a.relatedTarget).closest(h.selector)[0]}if(!e||e!==l)C.push({elem:l,handleObj:h,level:r.level})}}}o=0;for(x=C.length;o<x;o++){f=C[o];if(d&&f.level>d)break;a.currentTarget=f.elem;a.data=f.handleObj.data;a.handleObj=f.handleObj;A=f.handleObj.origHandler.apply(f.elem,arguments);if(A===false||a.isPropagationStopped()){d=f.level;if(A===false)b=false;if(a.isImmediatePropagationStopped())break}}return b}}function Y(a,b){return(a&&a!=="*"?a+".":"")+b.replace(La,
"`").replace(Ma,"&")}function ma(a,b,d){if(c.isFunction(b))return c.grep(a,function(f,h){return!!b.call(f,h,f)===d});else if(b.nodeType)return c.grep(a,function(f){return f===b===d});else if(typeof b==="string"){var e=c.grep(a,function(f){return f.nodeType===1});if(Na.test(b))return c.filter(b,e,!d);else b=c.filter(b,e)}return c.grep(a,function(f){return c.inArray(f,b)>=0===d})}function na(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var e=c.data(a[d++]),f=c.data(this,
e);if(e=e&&e.events){delete f.handle;f.events={};for(var h in e)for(var l in e[h])c.event.add(this,h,e[h][l],e[h][l].data)}}})}function Oa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function oa(a,b,d){var e=b==="width"?a.offsetWidth:a.offsetHeight;if(d==="border")return e;c.each(b==="width"?Pa:Qa,function(){d||(e-=parseFloat(c.css(a,"padding"+this))||0);if(d==="margin")e+=parseFloat(c.css(a,
"margin"+this))||0;else e-=parseFloat(c.css(a,"border"+this+"Width"))||0});return e}function da(a,b,d,e){if(c.isArray(b)&&b.length)c.each(b,function(f,h){d||Ra.test(a)?e(a,h):da(a+"["+(typeof h==="object"||c.isArray(h)?f:"")+"]",h,d,e)});else if(!d&&b!=null&&typeof b==="object")c.isEmptyObject(b)?e(a,""):c.each(b,function(f,h){da(a+"["+f+"]",h,d,e)});else e(a,b)}function S(a,b){var d={};c.each(pa.concat.apply([],pa.slice(0,b)),function(){d[this]=a});return d}function qa(a){if(!ea[a]){var b=c("<"+
a+">").appendTo("body"),d=b.css("display");b.remove();if(d==="none"||d==="")d="block";ea[a]=d}return ea[a]}function fa(a){return c.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var t=E.document,c=function(){function a(){if(!b.isReady){try{t.documentElement.doScroll("left")}catch(j){setTimeout(a,1);return}b.ready()}}var b=function(j,s){return new b.fn.init(j,s)},d=E.jQuery,e=E.$,f,h=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/,l=/\S/,k=/^\s+/,o=/\s+$/,x=/\W/,r=/\d/,A=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,
C=/^[\],:{}\s]*$/,J=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,w=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,I=/(?:^|:|,)(?:\s*\[)+/g,L=/(webkit)[ \/]([\w.]+)/,g=/(opera)(?:.*version)?[ \/]([\w.]+)/,i=/(msie) ([\w.]+)/,n=/(mozilla)(?:.*? rv:([\w.]+))?/,m=navigator.userAgent,p=false,q=[],u,y=Object.prototype.toString,F=Object.prototype.hasOwnProperty,M=Array.prototype.push,N=Array.prototype.slice,O=String.prototype.trim,D=Array.prototype.indexOf,R={};b.fn=b.prototype={init:function(j,
s){var v,z,H;if(!j)return this;if(j.nodeType){this.context=this[0]=j;this.length=1;return this}if(j==="body"&&!s&&t.body){this.context=t;this[0]=t.body;this.selector="body";this.length=1;return this}if(typeof j==="string")if((v=h.exec(j))&&(v[1]||!s))if(v[1]){H=s?s.ownerDocument||s:t;if(z=A.exec(j))if(b.isPlainObject(s)){j=[t.createElement(z[1])];b.fn.attr.call(j,s,true)}else j=[H.createElement(z[1])];else{z=b.buildFragment([v[1]],[H]);j=(z.cacheable?z.fragment.cloneNode(true):z.fragment).childNodes}return b.merge(this,
j)}else{if((z=t.getElementById(v[2]))&&z.parentNode){if(z.id!==v[2])return f.find(j);this.length=1;this[0]=z}this.context=t;this.selector=j;return this}else if(!s&&!x.test(j)){this.selector=j;this.context=t;j=t.getElementsByTagName(j);return b.merge(this,j)}else return!s||s.jquery?(s||f).find(j):b(s).find(j);else if(b.isFunction(j))return f.ready(j);if(j.selector!==B){this.selector=j.selector;this.context=j.context}return b.makeArray(j,this)},selector:"",jquery:"1.4.4",length:0,size:function(){return this.length},
toArray:function(){return N.call(this,0)},get:function(j){return j==null?this.toArray():j<0?this.slice(j)[0]:this[j]},pushStack:function(j,s,v){var z=b();b.isArray(j)?M.apply(z,j):b.merge(z,j);z.prevObject=this;z.context=this.context;if(s==="find")z.selector=this.selector+(this.selector?" ":"")+v;else if(s)z.selector=this.selector+"."+s+"("+v+")";return z},each:function(j,s){return b.each(this,j,s)},ready:function(j){b.bindReady();if(b.isReady)j.call(t,b);else q&&q.push(j);return this},eq:function(j){return j===
-1?this.slice(j):this.slice(j,+j+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(N.apply(this,arguments),"slice",N.call(arguments).join(","))},map:function(j){return this.pushStack(b.map(this,function(s,v){return j.call(s,v,s)}))},end:function(){return this.prevObject||b(null)},push:M,sort:[].sort,splice:[].splice};b.fn.init.prototype=b.fn;b.extend=b.fn.extend=function(){var j,s,v,z,H,G=arguments[0]||{},K=1,Q=arguments.length,ga=false;
if(typeof G==="boolean"){ga=G;G=arguments[1]||{};K=2}if(typeof G!=="object"&&!b.isFunction(G))G={};if(Q===K){G=this;--K}for(;K<Q;K++)if((j=arguments[K])!=null)for(s in j){v=G[s];z=j[s];if(G!==z)if(ga&&z&&(b.isPlainObject(z)||(H=b.isArray(z)))){if(H){H=false;v=v&&b.isArray(v)?v:[]}else v=v&&b.isPlainObject(v)?v:{};G[s]=b.extend(ga,v,z)}else if(z!==B)G[s]=z}return G};b.extend({noConflict:function(j){E.$=e;if(j)E.jQuery=d;return b},isReady:false,readyWait:1,ready:function(j){j===true&&b.readyWait--;
if(!b.readyWait||j!==true&&!b.isReady){if(!t.body)return setTimeout(b.ready,1);b.isReady=true;if(!(j!==true&&--b.readyWait>0))if(q){var s=0,v=q;for(q=null;j=v[s++];)j.call(t,b);b.fn.trigger&&b(t).trigger("ready").unbind("ready")}}},bindReady:function(){if(!p){p=true;if(t.readyState==="complete")return setTimeout(b.ready,1);if(t.addEventListener){t.addEventListener("DOMContentLoaded",u,false);E.addEventListener("load",b.ready,false)}else if(t.attachEvent){t.attachEvent("onreadystatechange",u);E.attachEvent("onload",
b.ready);var j=false;try{j=E.frameElement==null}catch(s){}t.documentElement.doScroll&&j&&a()}}},isFunction:function(j){return b.type(j)==="function"},isArray:Array.isArray||function(j){return b.type(j)==="array"},isWindow:function(j){return j&&typeof j==="object"&&"setInterval"in j},isNaN:function(j){return j==null||!r.test(j)||isNaN(j)},type:function(j){return j==null?String(j):R[y.call(j)]||"object"},isPlainObject:function(j){if(!j||b.type(j)!=="object"||j.nodeType||b.isWindow(j))return false;if(j.constructor&&
!F.call(j,"constructor")&&!F.call(j.constructor.prototype,"isPrototypeOf"))return false;for(var s in j);return s===B||F.call(j,s)},isEmptyObject:function(j){for(var s in j)return false;return true},error:function(j){throw j;},parseJSON:function(j){if(typeof j!=="string"||!j)return null;j=b.trim(j);if(C.test(j.replace(J,"@").replace(w,"]").replace(I,"")))return E.JSON&&E.JSON.parse?E.JSON.parse(j):(new Function("return "+j))();else b.error("Invalid JSON: "+j)},noop:function(){},globalEval:function(j){if(j&&
l.test(j)){var s=t.getElementsByTagName("head")[0]||t.documentElement,v=t.createElement("script");v.type="text/javascript";if(b.support.scriptEval)v.appendChild(t.createTextNode(j));else v.text=j;s.insertBefore(v,s.firstChild);s.removeChild(v)}},nodeName:function(j,s){return j.nodeName&&j.nodeName.toUpperCase()===s.toUpperCase()},each:function(j,s,v){var z,H=0,G=j.length,K=G===B||b.isFunction(j);if(v)if(K)for(z in j){if(s.apply(j[z],v)===false)break}else for(;H<G;){if(s.apply(j[H++],v)===false)break}else if(K)for(z in j){if(s.call(j[z],
z,j[z])===false)break}else for(v=j[0];H<G&&s.call(v,H,v)!==false;v=j[++H]);return j},trim:O?function(j){return j==null?"":O.call(j)}:function(j){return j==null?"":j.toString().replace(k,"").replace(o,"")},makeArray:function(j,s){var v=s||[];if(j!=null){var z=b.type(j);j.length==null||z==="string"||z==="function"||z==="regexp"||b.isWindow(j)?M.call(v,j):b.merge(v,j)}return v},inArray:function(j,s){if(s.indexOf)return s.indexOf(j);for(var v=0,z=s.length;v<z;v++)if(s[v]===j)return v;return-1},merge:function(j,
s){var v=j.length,z=0;if(typeof s.length==="number")for(var H=s.length;z<H;z++)j[v++]=s[z];else for(;s[z]!==B;)j[v++]=s[z++];j.length=v;return j},grep:function(j,s,v){var z=[],H;v=!!v;for(var G=0,K=j.length;G<K;G++){H=!!s(j[G],G);v!==H&&z.push(j[G])}return z},map:function(j,s,v){for(var z=[],H,G=0,K=j.length;G<K;G++){H=s(j[G],G,v);if(H!=null)z[z.length]=H}return z.concat.apply([],z)},guid:1,proxy:function(j,s,v){if(arguments.length===2)if(typeof s==="string"){v=j;j=v[s];s=B}else if(s&&!b.isFunction(s)){v=
s;s=B}if(!s&&j)s=function(){return j.apply(v||this,arguments)};if(j)s.guid=j.guid=j.guid||s.guid||b.guid++;return s},access:function(j,s,v,z,H,G){var K=j.length;if(typeof s==="object"){for(var Q in s)b.access(j,Q,s[Q],z,H,v);return j}if(v!==B){z=!G&&z&&b.isFunction(v);for(Q=0;Q<K;Q++)H(j[Q],s,z?v.call(j[Q],Q,H(j[Q],s)):v,G);return j}return K?H(j[0],s):B},now:function(){return(new Date).getTime()},uaMatch:function(j){j=j.toLowerCase();j=L.exec(j)||g.exec(j)||i.exec(j)||j.indexOf("compatible")<0&&n.exec(j)||
[];return{browser:j[1]||"",version:j[2]||"0"}},browser:{}});b.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(j,s){R["[object "+s+"]"]=s.toLowerCase()});m=b.uaMatch(m);if(m.browser){b.browser[m.browser]=true;b.browser.version=m.version}if(b.browser.webkit)b.browser.safari=true;if(D)b.inArray=function(j,s){return D.call(s,j)};if(!/\s/.test("\u00a0")){k=/^[\s\xA0]+/;o=/[\s\xA0]+$/}f=b(t);if(t.addEventListener)u=function(){t.removeEventListener("DOMContentLoaded",u,
false);b.ready()};else if(t.attachEvent)u=function(){if(t.readyState==="complete"){t.detachEvent("onreadystatechange",u);b.ready()}};return E.jQuery=E.$=b}();(function(){c.support={};var a=t.documentElement,b=t.createElement("script"),d=t.createElement("div"),e="script"+c.now();d.style.display="none";d.innerHTML=" <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";var f=d.getElementsByTagName("*"),h=d.getElementsByTagName("a")[0],l=t.createElement("select"),
k=l.appendChild(t.createElement("option"));if(!(!f||!f.length||!h)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(h.getAttribute("style")),hrefNormalized:h.getAttribute("href")==="/a",opacity:/^0.55$/.test(h.style.opacity),cssFloat:!!h.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:k.selected,deleteExpando:true,optDisabled:false,checkClone:false,
scriptEval:false,noCloneEvent:true,boxModel:null,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableHiddenOffsets:true};l.disabled=true;c.support.optDisabled=!k.disabled;b.type="text/javascript";try{b.appendChild(t.createTextNode("window."+e+"=1;"))}catch(o){}a.insertBefore(b,a.firstChild);if(E[e]){c.support.scriptEval=true;delete E[e]}try{delete b.test}catch(x){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function r(){c.support.noCloneEvent=
false;d.detachEvent("onclick",r)});d.cloneNode(true).fireEvent("onclick")}d=t.createElement("div");d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";a=t.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var r=t.createElement("div");r.style.width=r.style.paddingLeft="1px";t.body.appendChild(r);c.boxModel=c.support.boxModel=r.offsetWidth===2;if("zoom"in r.style){r.style.display="inline";r.style.zoom=
1;c.support.inlineBlockNeedsLayout=r.offsetWidth===2;r.style.display="";r.innerHTML="<div style='width:4px;'></div>";c.support.shrinkWrapBlocks=r.offsetWidth!==2}r.innerHTML="<table><tr><td style='padding:0;display:none'></td><td>t</td></tr></table>";var A=r.getElementsByTagName("td");c.support.reliableHiddenOffsets=A[0].offsetHeight===0;A[0].style.display="";A[1].style.display="none";c.support.reliableHiddenOffsets=c.support.reliableHiddenOffsets&&A[0].offsetHeight===0;r.innerHTML="";t.body.removeChild(r).style.display=
"none"});a=function(r){var A=t.createElement("div");r="on"+r;var C=r in A;if(!C){A.setAttribute(r,"return;");C=typeof A[r]==="function"}return C};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=f=h=null}})();var ra={},Ja=/^(?:\{.*\}|\[.*\])$/;c.extend({cache:{},uuid:0,expando:"jQuery"+c.now(),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},data:function(a,b,d){if(c.acceptData(a)){a=a==E?ra:a;var e=a.nodeType,f=e?a[c.expando]:null,h=
c.cache;if(!(e&&!f&&typeof b==="string"&&d===B)){if(e)f||(a[c.expando]=f=++c.uuid);else h=a;if(typeof b==="object")if(e)h[f]=c.extend(h[f],b);else c.extend(h,b);else if(e&&!h[f])h[f]={};a=e?h[f]:h;if(d!==B)a[b]=d;return typeof b==="string"?a[b]:a}}},removeData:function(a,b){if(c.acceptData(a)){a=a==E?ra:a;var d=a.nodeType,e=d?a[c.expando]:a,f=c.cache,h=d?f[e]:e;if(b){if(h){delete h[b];d&&c.isEmptyObject(h)&&c.removeData(a)}}else if(d&&c.support.deleteExpando)delete a[c.expando];else if(a.removeAttribute)a.removeAttribute(c.expando);
else if(d)delete f[e];else for(var l in a)delete a[l]}},acceptData:function(a){if(a.nodeName){var b=c.noData[a.nodeName.toLowerCase()];if(b)return!(b===true||a.getAttribute("classid")!==b)}return true}});c.fn.extend({data:function(a,b){var d=null;if(typeof a==="undefined"){if(this.length){var e=this[0].attributes,f;d=c.data(this[0]);for(var h=0,l=e.length;h<l;h++){f=e[h].name;if(f.indexOf("data-")===0){f=f.substr(5);ka(this[0],f,d[f])}}}return d}else if(typeof a==="object")return this.each(function(){c.data(this,
a)});var k=a.split(".");k[1]=k[1]?"."+k[1]:"";if(b===B){d=this.triggerHandler("getData"+k[1]+"!",[k[0]]);if(d===B&&this.length){d=c.data(this[0],a);d=ka(this[0],a,d)}return d===B&&k[1]?this.data(k[0]):d}else return this.each(function(){var o=c(this),x=[k[0],b];o.triggerHandler("setData"+k[1]+"!",x);c.data(this,a,b);o.triggerHandler("changeData"+k[1]+"!",x)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var e=
c.data(a,b);if(!d)return e||[];if(!e||c.isArray(d))e=c.data(a,b,c.makeArray(d));else e.push(d);return e}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),e=d.shift();if(e==="inprogress")e=d.shift();if(e){b==="fx"&&d.unshift("inprogress");e.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===B)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,
a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var sa=/[\n\t]/g,ha=/\s+/,Sa=/\r/g,Ta=/^(?:href|src|style)$/,Ua=/^(?:button|input)$/i,Va=/^(?:button|input|object|select|textarea)$/i,Wa=/^a(?:rea)?$/i,ta=/^(?:radio|checkbox)$/i;c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",
colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};c.fn.extend({attr:function(a,b){return c.access(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(x){var r=c(this);r.addClass(a.call(this,x,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ha),d=0,e=this.length;d<e;d++){var f=this[d];if(f.nodeType===
1)if(f.className){for(var h=" "+f.className+" ",l=f.className,k=0,o=b.length;k<o;k++)if(h.indexOf(" "+b[k]+" ")<0)l+=" "+b[k];f.className=c.trim(l)}else f.className=a}return this},removeClass:function(a){if(c.isFunction(a))return this.each(function(o){var x=c(this);x.removeClass(a.call(this,o,x.attr("class")))});if(a&&typeof a==="string"||a===B)for(var b=(a||"").split(ha),d=0,e=this.length;d<e;d++){var f=this[d];if(f.nodeType===1&&f.className)if(a){for(var h=(" "+f.className+" ").replace(sa," "),
l=0,k=b.length;l<k;l++)h=h.replace(" "+b[l]+" "," ");f.className=c.trim(h)}else f.className=""}return this},toggleClass:function(a,b){var d=typeof a,e=typeof b==="boolean";if(c.isFunction(a))return this.each(function(f){var h=c(this);h.toggleClass(a.call(this,f,h.attr("class"),b),b)});return this.each(function(){if(d==="string")for(var f,h=0,l=c(this),k=b,o=a.split(ha);f=o[h++];){k=e?k:!l.hasClass(f);l[k?"addClass":"removeClass"](f)}else if(d==="undefined"||d==="boolean"){this.className&&c.data(this,
"__className__",this.className);this.className=this.className||a===false?"":c.data(this,"__className__")||""}})},hasClass:function(a){a=" "+a+" ";for(var b=0,d=this.length;b<d;b++)if((" "+this[b].className+" ").replace(sa," ").indexOf(a)>-1)return true;return false},val:function(a){if(!arguments.length){var b=this[0];if(b){if(c.nodeName(b,"option")){var d=b.attributes.value;return!d||d.specified?b.value:b.text}if(c.nodeName(b,"select")){var e=b.selectedIndex;d=[];var f=b.options;b=b.type==="select-one";
if(e<0)return null;var h=b?e:0;for(e=b?e+1:f.length;h<e;h++){var l=f[h];if(l.selected&&(c.support.optDisabled?!l.disabled:l.getAttribute("disabled")===null)&&(!l.parentNode.disabled||!c.nodeName(l.parentNode,"optgroup"))){a=c(l).val();if(b)return a;d.push(a)}}return d}if(ta.test(b.type)&&!c.support.checkOn)return b.getAttribute("value")===null?"on":b.value;return(b.value||"").replace(Sa,"")}return B}var k=c.isFunction(a);return this.each(function(o){var x=c(this),r=a;if(this.nodeType===1){if(k)r=
a.call(this,o,x.val());if(r==null)r="";else if(typeof r==="number")r+="";else if(c.isArray(r))r=c.map(r,function(C){return C==null?"":C+""});if(c.isArray(r)&&ta.test(this.type))this.checked=c.inArray(x.val(),r)>=0;else if(c.nodeName(this,"select")){var A=c.makeArray(r);c("option",this).each(function(){this.selected=c.inArray(c(this).val(),A)>=0});if(!A.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},
attr:function(a,b,d,e){if(!a||a.nodeType===3||a.nodeType===8)return B;if(e&&b in c.attrFn)return c(a)[b](d);e=a.nodeType!==1||!c.isXMLDoc(a);var f=d!==B;b=e&&c.props[b]||b;var h=Ta.test(b);if((b in a||a[b]!==B)&&e&&!h){if(f){b==="type"&&Ua.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");if(d===null)a.nodeType===1&&a.removeAttribute(b);else a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&
b.specified?b.value:Va.test(a.nodeName)||Wa.test(a.nodeName)&&a.href?0:B;return a[b]}if(!c.support.style&&e&&b==="style"){if(f)a.style.cssText=""+d;return a.style.cssText}f&&a.setAttribute(b,""+d);if(!a.attributes[b]&&a.hasAttribute&&!a.hasAttribute(b))return B;a=!c.support.hrefNormalized&&e&&h?a.getAttribute(b,2):a.getAttribute(b);return a===null?B:a}});var X=/\.(.*)$/,ia=/^(?:textarea|input|select)$/i,La=/\./g,Ma=/ /g,Xa=/[^\w\s.|`]/g,Ya=function(a){return a.replace(Xa,"\\$&")},ua={focusin:0,focusout:0};
c.event={add:function(a,b,d,e){if(!(a.nodeType===3||a.nodeType===8)){if(c.isWindow(a)&&a!==E&&!a.frameElement)a=E;if(d===false)d=U;else if(!d)return;var f,h;if(d.handler){f=d;d=f.handler}if(!d.guid)d.guid=c.guid++;if(h=c.data(a)){var l=a.nodeType?"events":"__events__",k=h[l],o=h.handle;if(typeof k==="function"){o=k.handle;k=k.events}else if(!k){a.nodeType||(h[l]=h=function(){});h.events=k={}}if(!o)h.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,
arguments):B};o.elem=a;b=b.split(" ");for(var x=0,r;l=b[x++];){h=f?c.extend({},f):{handler:d,data:e};if(l.indexOf(".")>-1){r=l.split(".");l=r.shift();h.namespace=r.slice(0).sort().join(".")}else{r=[];h.namespace=""}h.type=l;if(!h.guid)h.guid=d.guid;var A=k[l],C=c.event.special[l]||{};if(!A){A=k[l]=[];if(!C.setup||C.setup.call(a,e,r,o)===false)if(a.addEventListener)a.addEventListener(l,o,false);else a.attachEvent&&a.attachEvent("on"+l,o)}if(C.add){C.add.call(a,h);if(!h.handler.guid)h.handler.guid=
d.guid}A.push(h);c.event.global[l]=true}a=null}}},global:{},remove:function(a,b,d,e){if(!(a.nodeType===3||a.nodeType===8)){if(d===false)d=U;var f,h,l=0,k,o,x,r,A,C,J=a.nodeType?"events":"__events__",w=c.data(a),I=w&&w[J];if(w&&I){if(typeof I==="function"){w=I;I=I.events}if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(f in I)c.event.remove(a,f+b)}else{for(b=b.split(" ");f=b[l++];){r=f;k=f.indexOf(".")<0;o=[];if(!k){o=f.split(".");f=o.shift();x=RegExp("(^|\\.)"+
c.map(o.slice(0).sort(),Ya).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(A=I[f])if(d){r=c.event.special[f]||{};for(h=e||0;h<A.length;h++){C=A[h];if(d.guid===C.guid){if(k||x.test(C.namespace)){e==null&&A.splice(h--,1);r.remove&&r.remove.call(a,C)}if(e!=null)break}}if(A.length===0||e!=null&&A.length===1){if(!r.teardown||r.teardown.call(a,o)===false)c.removeEvent(a,f,w.handle);delete I[f]}}else for(h=0;h<A.length;h++){C=A[h];if(k||x.test(C.namespace)){c.event.remove(a,r,C.handler,h);A.splice(h--,1)}}}if(c.isEmptyObject(I)){if(b=
w.handle)b.elem=null;delete w.events;delete w.handle;if(typeof w==="function")c.removeData(a,J);else c.isEmptyObject(w)&&c.removeData(a)}}}}},trigger:function(a,b,d,e){var f=a.type||a;if(!e){a=typeof a==="object"?a[c.expando]?a:c.extend(c.Event(f),a):c.Event(f);if(f.indexOf("!")>=0){a.type=f=f.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[f]&&c.each(c.cache,function(){this.events&&this.events[f]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===
8)return B;a.result=B;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(e=d.nodeType?c.data(d,"handle"):(c.data(d,"__events__")||{}).handle)&&e.apply(d,b);e=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+f]&&d["on"+f].apply(d,b)===false){a.result=false;a.preventDefault()}}catch(h){}if(!a.isPropagationStopped()&&e)c.event.trigger(a,b,e,true);else if(!a.isDefaultPrevented()){var l;e=a.target;var k=f.replace(X,""),o=c.nodeName(e,"a")&&k===
"click",x=c.event.special[k]||{};if((!x._default||x._default.call(d,a)===false)&&!o&&!(e&&e.nodeName&&c.noData[e.nodeName.toLowerCase()])){try{if(e[k]){if(l=e["on"+k])e["on"+k]=null;c.event.triggered=true;e[k]()}}catch(r){}if(l)e["on"+k]=l;c.event.triggered=false}}},handle:function(a){var b,d,e,f;d=[];var h=c.makeArray(arguments);a=h[0]=c.event.fix(a||E.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive;if(!b){e=a.type.split(".");a.type=e.shift();d=e.slice(0).sort();e=RegExp("(^|\\.)"+
d.join("\\.(?:.*\\.)?")+"(\\.|$)")}a.namespace=a.namespace||d.join(".");f=c.data(this,this.nodeType?"events":"__events__");if(typeof f==="function")f=f.events;d=(f||{})[a.type];if(f&&d){d=d.slice(0);f=0;for(var l=d.length;f<l;f++){var k=d[f];if(b||e.test(k.namespace)){a.handler=k.handler;a.data=k.data;a.handleObj=k;k=k.handler.apply(this,h);if(k!==B){a.result=k;if(k===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}}return a.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
fix:function(a){if(a[c.expando])return a;var b=a;a=c.Event(b);for(var d=this.props.length,e;d;){e=this.props[--d];a[e]=b[e]}if(!a.target)a.target=a.srcElement||t;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=t.documentElement;d=t.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop||
d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(a.which==null&&(a.charCode!=null||a.keyCode!=null))a.which=a.charCode!=null?a.charCode:a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==B)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1E8,proxy:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a){c.event.add(this,Y(a.origType,a.selector),c.extend({},a,{handler:Ka,guid:a.handler.guid}))},remove:function(a){c.event.remove(this,
Y(a.origType,a.selector),a)}},beforeunload:{setup:function(a,b,d){if(c.isWindow(this))this.onbeforeunload=d},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};c.removeEvent=t.removeEventListener?function(a,b,d){a.removeEventListener&&a.removeEventListener(b,d,false)}:function(a,b,d){a.detachEvent&&a.detachEvent("on"+b,d)};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type){this.originalEvent=a;this.type=a.type}else this.type=a;this.timeStamp=
c.now();this[c.expando]=true};c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=ca;var a=this.originalEvent;if(a)if(a.preventDefault)a.preventDefault();else a.returnValue=false},stopPropagation:function(){this.isPropagationStopped=ca;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=ca;this.stopPropagation()},isDefaultPrevented:U,isPropagationStopped:U,isImmediatePropagationStopped:U};
var va=function(a){var b=a.relatedTarget;try{for(;b&&b!==this;)b=b.parentNode;if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}}catch(d){}},wa=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?wa:va,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?wa:va)}}});if(!c.support.submitBubbles)c.event.special.submit={setup:function(){if(this.nodeName.toLowerCase()!==
"form"){c.event.add(this,"click.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="submit"||d==="image")&&c(b).closest("form").length){a.liveFired=B;return la("submit",this,arguments)}});c.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="text"||d==="password")&&c(b).closest("form").length&&a.keyCode===13){a.liveFired=B;return la("submit",this,arguments)}})}else return false},teardown:function(){c.event.remove(this,".specialSubmit")}};if(!c.support.changeBubbles){var V,
xa=function(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex>-1?c.map(a.options,function(e){return e.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},Z=function(a,b){var d=a.target,e,f;if(!(!ia.test(d.nodeName)||d.readOnly)){e=c.data(d,"_change_data");f=xa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",f);if(!(e===B||f===e))if(e!=null||f){a.type="change";a.liveFired=
B;return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:Z,beforedeactivate:Z,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return Z.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return Z.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a,"_change_data",xa(a))}},setup:function(){if(this.type===
"file")return false;for(var a in V)c.event.add(this,a+".specialChange",V[a]);return ia.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return ia.test(this.nodeName)}};V=c.event.special.change.filters;V.focus=V.beforeactivate}t.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(e){e=c.event.fix(e);e.type=b;return c.event.trigger(e,null,e.target)}c.event.special[b]={setup:function(){ua[b]++===0&&t.addEventListener(a,d,true)},teardown:function(){--ua[b]===
0&&t.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,e,f){if(typeof d==="object"){for(var h in d)this[b](h,e,d[h],f);return this}if(c.isFunction(e)||e===false){f=e;e=B}var l=b==="one"?c.proxy(f,function(o){c(this).unbind(o,l);return f.apply(this,arguments)}):f;if(d==="unload"&&b!=="one")this.one(d,e,f);else{h=0;for(var k=this.length;h<k;h++)c.event.add(this[h],d,l,e)}return this}});c.fn.extend({unbind:function(a,b){if(typeof a==="object"&&!a.preventDefault)for(var d in a)this.unbind(d,
a[d]);else{d=0;for(var e=this.length;d<e;d++)c.event.remove(this[d],a,b)}return this},delegate:function(a,b,d,e){return this.live(b,d,e,a)},undelegate:function(a,b,d){return arguments.length===0?this.unbind("live"):this.die(b,null,d,a)},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){var d=c.Event(a);d.preventDefault();d.stopPropagation();c.event.trigger(d,b,this[0]);return d.result}},toggle:function(a){for(var b=arguments,d=
1;d<b.length;)c.proxy(a,b[d++]);return this.click(c.proxy(a,function(e){var f=(c.data(this,"lastToggle"+a.guid)||0)%d;c.data(this,"lastToggle"+a.guid,f+1);e.preventDefault();return b[f].apply(this,arguments)||false}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var ya={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};c.each(["live","die"],function(a,b){c.fn[b]=function(d,e,f,h){var l,k=0,o,x,r=h||this.selector;h=h?this:c(this.context);if(typeof d===
"object"&&!d.preventDefault){for(l in d)h[b](l,e,d[l],r);return this}if(c.isFunction(e)){f=e;e=B}for(d=(d||"").split(" ");(l=d[k++])!=null;){o=X.exec(l);x="";if(o){x=o[0];l=l.replace(X,"")}if(l==="hover")d.push("mouseenter"+x,"mouseleave"+x);else{o=l;if(l==="focus"||l==="blur"){d.push(ya[l]+x);l+=x}else l=(ya[l]||l)+x;if(b==="live"){x=0;for(var A=h.length;x<A;x++)c.event.add(h[x],"live."+Y(l,r),{data:e,selector:r,handler:f,origType:l,origHandler:f,preType:o})}else h.unbind("live."+Y(l,r),f)}}return this}});
c.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),function(a,b){c.fn[b]=function(d,e){if(e==null){e=d;d=null}return arguments.length>0?this.bind(b,d,e):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});E.attachEvent&&!E.addEventListener&&c(E).bind("unload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}});
(function(){function a(g,i,n,m,p,q){p=0;for(var u=m.length;p<u;p++){var y=m[p];if(y){var F=false;for(y=y[g];y;){if(y.sizcache===n){F=m[y.sizset];break}if(y.nodeType===1&&!q){y.sizcache=n;y.sizset=p}if(y.nodeName.toLowerCase()===i){F=y;break}y=y[g]}m[p]=F}}}function b(g,i,n,m,p,q){p=0;for(var u=m.length;p<u;p++){var y=m[p];if(y){var F=false;for(y=y[g];y;){if(y.sizcache===n){F=m[y.sizset];break}if(y.nodeType===1){if(!q){y.sizcache=n;y.sizset=p}if(typeof i!=="string"){if(y===i){F=true;break}}else if(k.filter(i,
[y]).length>0){F=y;break}}y=y[g]}m[p]=F}}}var d=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,e=0,f=Object.prototype.toString,h=false,l=true;[0,0].sort(function(){l=false;return 0});var k=function(g,i,n,m){n=n||[];var p=i=i||t;if(i.nodeType!==1&&i.nodeType!==9)return[];if(!g||typeof g!=="string")return n;var q,u,y,F,M,N=true,O=k.isXML(i),D=[],R=g;do{d.exec("");if(q=d.exec(R)){R=q[3];D.push(q[1]);if(q[2]){F=q[3];
break}}}while(q);if(D.length>1&&x.exec(g))if(D.length===2&&o.relative[D[0]])u=L(D[0]+D[1],i);else for(u=o.relative[D[0]]?[i]:k(D.shift(),i);D.length;){g=D.shift();if(o.relative[g])g+=D.shift();u=L(g,u)}else{if(!m&&D.length>1&&i.nodeType===9&&!O&&o.match.ID.test(D[0])&&!o.match.ID.test(D[D.length-1])){q=k.find(D.shift(),i,O);i=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]}if(i){q=m?{expr:D.pop(),set:C(m)}:k.find(D.pop(),D.length===1&&(D[0]==="~"||D[0]==="+")&&i.parentNode?i.parentNode:i,O);u=q.expr?k.filter(q.expr,
q.set):q.set;if(D.length>0)y=C(u);else N=false;for(;D.length;){q=M=D.pop();if(o.relative[M])q=D.pop();else M="";if(q==null)q=i;o.relative[M](y,q,O)}}else y=[]}y||(y=u);y||k.error(M||g);if(f.call(y)==="[object Array]")if(N)if(i&&i.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&k.contains(i,y[g])))n.push(u[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&n.push(u[g]);else n.push.apply(n,y);else C(y,n);if(F){k(F,p,n,m);k.uniqueSort(n)}return n};k.uniqueSort=function(g){if(w){h=
l;g.sort(w);if(h)for(var i=1;i<g.length;i++)g[i]===g[i-1]&&g.splice(i--,1)}return g};k.matches=function(g,i){return k(g,null,null,i)};k.matchesSelector=function(g,i){return k(i,null,null,[g]).length>0};k.find=function(g,i,n){var m;if(!g)return[];for(var p=0,q=o.order.length;p<q;p++){var u,y=o.order[p];if(u=o.leftMatch[y].exec(g)){var F=u[1];u.splice(1,1);if(F.substr(F.length-1)!=="\\"){u[1]=(u[1]||"").replace(/\\/g,"");m=o.find[y](u,i,n);if(m!=null){g=g.replace(o.match[y],"");break}}}}m||(m=i.getElementsByTagName("*"));
return{set:m,expr:g}};k.filter=function(g,i,n,m){for(var p,q,u=g,y=[],F=i,M=i&&i[0]&&k.isXML(i[0]);g&&i.length;){for(var N in o.filter)if((p=o.leftMatch[N].exec(g))!=null&&p[2]){var O,D,R=o.filter[N];D=p[1];q=false;p.splice(1,1);if(D.substr(D.length-1)!=="\\"){if(F===y)y=[];if(o.preFilter[N])if(p=o.preFilter[N](p,F,n,y,m,M)){if(p===true)continue}else q=O=true;if(p)for(var j=0;(D=F[j])!=null;j++)if(D){O=R(D,p,j,F);var s=m^!!O;if(n&&O!=null)if(s)q=true;else F[j]=false;else if(s){y.push(D);q=true}}if(O!==
B){n||(F=y);g=g.replace(o.match[N],"");if(!q)return[];break}}}if(g===u)if(q==null)k.error(g);else break;u=g}return F};k.error=function(g){throw"Syntax error, unrecognized expression: "+g;};var o=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+\-]*)\))?/,
POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(g){return g.getAttribute("href")}},relative:{"+":function(g,i){var n=typeof i==="string",m=n&&!/\W/.test(i);n=n&&!m;if(m)i=i.toLowerCase();m=0;for(var p=g.length,q;m<p;m++)if(q=g[m]){for(;(q=q.previousSibling)&&q.nodeType!==1;);g[m]=n||q&&q.nodeName.toLowerCase()===
i?q||false:q===i}n&&k.filter(i,g,true)},">":function(g,i){var n,m=typeof i==="string",p=0,q=g.length;if(m&&!/\W/.test(i))for(i=i.toLowerCase();p<q;p++){if(n=g[p]){n=n.parentNode;g[p]=n.nodeName.toLowerCase()===i?n:false}}else{for(;p<q;p++)if(n=g[p])g[p]=m?n.parentNode:n.parentNode===i;m&&k.filter(i,g,true)}},"":function(g,i,n){var m,p=e++,q=b;if(typeof i==="string"&&!/\W/.test(i)){m=i=i.toLowerCase();q=a}q("parentNode",i,p,g,m,n)},"~":function(g,i,n){var m,p=e++,q=b;if(typeof i==="string"&&!/\W/.test(i)){m=
i=i.toLowerCase();q=a}q("previousSibling",i,p,g,m,n)}},find:{ID:function(g,i,n){if(typeof i.getElementById!=="undefined"&&!n)return(g=i.getElementById(g[1]))&&g.parentNode?[g]:[]},NAME:function(g,i){if(typeof i.getElementsByName!=="undefined"){for(var n=[],m=i.getElementsByName(g[1]),p=0,q=m.length;p<q;p++)m[p].getAttribute("name")===g[1]&&n.push(m[p]);return n.length===0?null:n}},TAG:function(g,i){return i.getElementsByTagName(g[1])}},preFilter:{CLASS:function(g,i,n,m,p,q){g=" "+g[1].replace(/\\/g,
"")+" ";if(q)return g;q=0;for(var u;(u=i[q])!=null;q++)if(u)if(p^(u.className&&(" "+u.className+" ").replace(/[\t\n]/g," ").indexOf(g)>=0))n||m.push(u);else if(n)i[q]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},CHILD:function(g){if(g[1]==="nth"){var i=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=i[1]+(i[2]||1)-0;g[3]=i[3]-0}g[0]=e++;return g},ATTR:function(g,i,n,
m,p,q){i=g[1].replace(/\\/g,"");if(!q&&o.attrMap[i])g[1]=o.attrMap[i];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,i,n,m,p){if(g[1]==="not")if((d.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,i);else{g=k.filter(g[3],i,n,true^p);n||m.push.apply(m,g);return false}else if(o.match.POS.test(g[0])||o.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===
true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,i,n){return!!k(n[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===
g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},setFilters:{first:function(g,i){return i===0},last:function(g,i,n,m){return i===m.length-1},even:function(g,i){return i%2===0},odd:function(g,i){return i%2===1},lt:function(g,i,n){return i<n[3]-0},gt:function(g,i,n){return i>n[3]-0},nth:function(g,i,n){return n[3]-
0===i},eq:function(g,i,n){return n[3]-0===i}},filter:{PSEUDO:function(g,i,n,m){var p=i[1],q=o.filters[p];if(q)return q(g,n,i,m);else if(p==="contains")return(g.textContent||g.innerText||k.getText([g])||"").indexOf(i[3])>=0;else if(p==="not"){i=i[3];n=0;for(m=i.length;n<m;n++)if(i[n]===g)return false;return true}else k.error("Syntax error, unrecognized expression: "+p)},CHILD:function(g,i){var n=i[1],m=g;switch(n){case "only":case "first":for(;m=m.previousSibling;)if(m.nodeType===1)return false;if(n===
"first")return true;m=g;case "last":for(;m=m.nextSibling;)if(m.nodeType===1)return false;return true;case "nth":n=i[2];var p=i[3];if(n===1&&p===0)return true;var q=i[0],u=g.parentNode;if(u&&(u.sizcache!==q||!g.nodeIndex)){var y=0;for(m=u.firstChild;m;m=m.nextSibling)if(m.nodeType===1)m.nodeIndex=++y;u.sizcache=q}m=g.nodeIndex-p;return n===0?m===0:m%n===0&&m/n>=0}},ID:function(g,i){return g.nodeType===1&&g.getAttribute("id")===i},TAG:function(g,i){return i==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===
i},CLASS:function(g,i){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(i)>-1},ATTR:function(g,i){var n=i[1];n=o.attrHandle[n]?o.attrHandle[n](g):g[n]!=null?g[n]:g.getAttribute(n);var m=n+"",p=i[2],q=i[4];return n==null?p==="!=":p==="="?m===q:p==="*="?m.indexOf(q)>=0:p==="~="?(" "+m+" ").indexOf(q)>=0:!q?m&&n!==false:p==="!="?m!==q:p==="^="?m.indexOf(q)===0:p==="$="?m.substr(m.length-q.length)===q:p==="|="?m===q||m.substr(0,q.length+1)===q+"-":false},POS:function(g,i,n,m){var p=o.setFilters[i[2]];
if(p)return p(g,n,i,m)}}},x=o.match.POS,r=function(g,i){return"\\"+(i-0+1)},A;for(A in o.match){o.match[A]=RegExp(o.match[A].source+/(?![^\[]*\])(?![^\(]*\))/.source);o.leftMatch[A]=RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[A].source.replace(/\\(\d+)/g,r))}var C=function(g,i){g=Array.prototype.slice.call(g,0);if(i){i.push.apply(i,g);return i}return g};try{Array.prototype.slice.call(t.documentElement.childNodes,0)}catch(J){C=function(g,i){var n=0,m=i||[];if(f.call(g)==="[object Array]")Array.prototype.push.apply(m,
g);else if(typeof g.length==="number")for(var p=g.length;n<p;n++)m.push(g[n]);else for(;g[n];n++)m.push(g[n]);return m}}var w,I;if(t.documentElement.compareDocumentPosition)w=function(g,i){if(g===i){h=true;return 0}if(!g.compareDocumentPosition||!i.compareDocumentPosition)return g.compareDocumentPosition?-1:1;return g.compareDocumentPosition(i)&4?-1:1};else{w=function(g,i){var n,m,p=[],q=[];n=g.parentNode;m=i.parentNode;var u=n;if(g===i){h=true;return 0}else if(n===m)return I(g,i);else if(n){if(!m)return 1}else return-1;
for(;u;){p.unshift(u);u=u.parentNode}for(u=m;u;){q.unshift(u);u=u.parentNode}n=p.length;m=q.length;for(u=0;u<n&&u<m;u++)if(p[u]!==q[u])return I(p[u],q[u]);return u===n?I(g,q[u],-1):I(p[u],i,1)};I=function(g,i,n){if(g===i)return n;for(g=g.nextSibling;g;){if(g===i)return-1;g=g.nextSibling}return 1}}k.getText=function(g){for(var i="",n,m=0;g[m];m++){n=g[m];if(n.nodeType===3||n.nodeType===4)i+=n.nodeValue;else if(n.nodeType!==8)i+=k.getText(n.childNodes)}return i};(function(){var g=t.createElement("div"),
i="script"+(new Date).getTime(),n=t.documentElement;g.innerHTML="<a name='"+i+"'/>";n.insertBefore(g,n.firstChild);if(t.getElementById(i)){o.find.ID=function(m,p,q){if(typeof p.getElementById!=="undefined"&&!q)return(p=p.getElementById(m[1]))?p.id===m[1]||typeof p.getAttributeNode!=="undefined"&&p.getAttributeNode("id").nodeValue===m[1]?[p]:B:[]};o.filter.ID=function(m,p){var q=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&q&&q.nodeValue===p}}n.removeChild(g);
n=g=null})();(function(){var g=t.createElement("div");g.appendChild(t.createComment(""));if(g.getElementsByTagName("*").length>0)o.find.TAG=function(i,n){var m=n.getElementsByTagName(i[1]);if(i[1]==="*"){for(var p=[],q=0;m[q];q++)m[q].nodeType===1&&p.push(m[q]);m=p}return m};g.innerHTML="<a href='#'></a>";if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")o.attrHandle.href=function(i){return i.getAttribute("href",2)};g=null})();t.querySelectorAll&&
function(){var g=k,i=t.createElement("div");i.innerHTML="<p class='TEST'></p>";if(!(i.querySelectorAll&&i.querySelectorAll(".TEST").length===0)){k=function(m,p,q,u){p=p||t;m=m.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!u&&!k.isXML(p))if(p.nodeType===9)try{return C(p.querySelectorAll(m),q)}catch(y){}else if(p.nodeType===1&&p.nodeName.toLowerCase()!=="object"){var F=p.getAttribute("id"),M=F||"__sizzle__";F||p.setAttribute("id",M);try{return C(p.querySelectorAll("#"+M+" "+m),q)}catch(N){}finally{F||
p.removeAttribute("id")}}return g(m,p,q,u)};for(var n in g)k[n]=g[n];i=null}}();(function(){var g=t.documentElement,i=g.matchesSelector||g.mozMatchesSelector||g.webkitMatchesSelector||g.msMatchesSelector,n=false;try{i.call(t.documentElement,"[test!='']:sizzle")}catch(m){n=true}if(i)k.matchesSelector=function(p,q){q=q.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(p))try{if(n||!o.match.PSEUDO.test(q)&&!/!=/.test(q))return i.call(p,q)}catch(u){}return k(q,null,null,[p]).length>0}})();(function(){var g=
t.createElement("div");g.innerHTML="<div class='test e'></div><div class='test'></div>";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){o.order.splice(1,0,"CLASS");o.find.CLASS=function(i,n,m){if(typeof n.getElementsByClassName!=="undefined"&&!m)return n.getElementsByClassName(i[1])};g=null}}})();k.contains=t.documentElement.contains?function(g,i){return g!==i&&(g.contains?g.contains(i):true)}:t.documentElement.compareDocumentPosition?
function(g,i){return!!(g.compareDocumentPosition(i)&16)}:function(){return false};k.isXML=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false};var L=function(g,i){for(var n,m=[],p="",q=i.nodeType?[i]:i;n=o.match.PSEUDO.exec(g);){p+=n[0];g=g.replace(o.match.PSEUDO,"")}g=o.relative[g]?g+"*":g;n=0;for(var u=q.length;n<u;n++)k(g,q[n],m);return k.filter(p,m)};c.find=k;c.expr=k.selectors;c.expr[":"]=c.expr.filters;c.unique=k.uniqueSort;c.text=k.getText;c.isXMLDoc=k.isXML;
c.contains=k.contains})();var Za=/Until$/,$a=/^(?:parents|prevUntil|prevAll)/,ab=/,/,Na=/^.[^:#\[\.,]*$/,bb=Array.prototype.slice,cb=c.expr.match.POS;c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,e=0,f=this.length;e<f;e++){d=b.length;c.find(a,this[e],b);if(e>0)for(var h=d;h<b.length;h++)for(var l=0;l<d;l++)if(b[l]===b[h]){b.splice(h--,1);break}}return b},has:function(a){var b=c(a);return this.filter(function(){for(var d=0,e=b.length;d<e;d++)if(c.contains(this,b[d]))return true})},
not:function(a){return this.pushStack(ma(this,a,false),"not",a)},filter:function(a){return this.pushStack(ma(this,a,true),"filter",a)},is:function(a){return!!a&&c.filter(a,this).length>0},closest:function(a,b){var d=[],e,f,h=this[0];if(c.isArray(a)){var l,k={},o=1;if(h&&a.length){e=0;for(f=a.length;e<f;e++){l=a[e];k[l]||(k[l]=c.expr.match.POS.test(l)?c(l,b||this.context):l)}for(;h&&h.ownerDocument&&h!==b;){for(l in k){e=k[l];if(e.jquery?e.index(h)>-1:c(h).is(e))d.push({selector:l,elem:h,level:o})}h=
h.parentNode;o++}}return d}l=cb.test(a)?c(a,b||this.context):null;e=0;for(f=this.length;e<f;e++)for(h=this[e];h;)if(l?l.index(h)>-1:c.find.matchesSelector(h,a)){d.push(h);break}else{h=h.parentNode;if(!h||!h.ownerDocument||h===b)break}d=d.length>1?c.unique(d):d;return this.pushStack(d,"closest",a)},index:function(a){if(!a||typeof a==="string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var d=typeof a==="string"?c(a,b||this.context):
c.makeArray(a),e=c.merge(this.get(),d);return this.pushStack(!d[0]||!d[0].parentNode||d[0].parentNode.nodeType===11||!e[0]||!e[0].parentNode||e[0].parentNode.nodeType===11?e:c.unique(e))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,
2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,
b){c.fn[a]=function(d,e){var f=c.map(this,b,d);Za.test(a)||(e=d);if(e&&typeof e==="string")f=c.filter(e,f);f=this.length>1?c.unique(f):f;if((this.length>1||ab.test(e))&&$a.test(a))f=f.reverse();return this.pushStack(f,a,bb.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return b.length===1?c.find.matchesSelector(b[0],a)?[b[0]]:[]:c.find.matches(a,b)},dir:function(a,b,d){var e=[];for(a=a[b];a&&a.nodeType!==9&&(d===B||a.nodeType!==1||!c(a).is(d));){a.nodeType===1&&
e.push(a);a=a[b]}return e},nth:function(a,b,d){b=b||1;for(var e=0;a;a=a[d])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var za=/ jQuery\d+="(?:\d+|null)"/g,$=/^\s+/,Aa=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Ba=/<([\w:]+)/,db=/<tbody/i,eb=/<|&#?\w+;/,Ca=/<(?:script|object|embed|option|style)/i,Da=/checked\s*(?:[^=]|=\s*.checked.)/i,fb=/\=([^="'>\s]+\/)>/g,P={option:[1,
"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};P.optgroup=P.option;P.tbody=P.tfoot=P.colgroup=P.caption=P.thead;P.th=P.td;if(!c.support.htmlSerialize)P._default=[1,"div<div>","</div>"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=
c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==B)return this.empty().append((this[0]&&this[0].ownerDocument||t).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},
wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},
prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,
this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,e;(e=this[d])!=null;d++)if(!a||c.filter(a,[e]).length){if(!b&&e.nodeType===1){c.cleanData(e.getElementsByTagName("*"));c.cleanData([e])}e.parentNode&&e.parentNode.removeChild(e)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild);
return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,e=this.ownerDocument;if(!d){d=e.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(za,"").replace(fb,'="$1">').replace($,"")],e)[0]}else return this.cloneNode(true)});if(a===true){na(this,b);na(this.find("*"),b.find("*"))}return b},html:function(a){if(a===B)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(za,""):null;
else if(typeof a==="string"&&!Ca.test(a)&&(c.support.leadingWhitespace||!$.test(a))&&!P[(Ba.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Aa,"<$1></$2>");try{for(var b=0,d=this.length;b<d;b++)if(this[b].nodeType===1){c.cleanData(this[b].getElementsByTagName("*"));this[b].innerHTML=a}}catch(e){this.empty().append(a)}}else c.isFunction(a)?this.each(function(f){var h=c(this);h.html(a.call(this,f,h.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(c.isFunction(a))return this.each(function(b){var d=
c(this),e=d.html();d.replaceWith(a.call(this,b,e))});if(typeof a!=="string")a=c(a).detach();return this.each(function(){var b=this.nextSibling,d=this.parentNode;c(this).remove();b?c(b).before(a):c(d).append(a)})}else return this.pushStack(c(c.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a,true)},domManip:function(a,b,d){var e,f,h,l=a[0],k=[];if(!c.support.checkClone&&arguments.length===3&&typeof l==="string"&&Da.test(l))return this.each(function(){c(this).domManip(a,
b,d,true)});if(c.isFunction(l))return this.each(function(x){var r=c(this);a[0]=l.call(this,x,b?r.html():B);r.domManip(a,b,d)});if(this[0]){e=l&&l.parentNode;e=c.support.parentNode&&e&&e.nodeType===11&&e.childNodes.length===this.length?{fragment:e}:c.buildFragment(a,this,k);h=e.fragment;if(f=h.childNodes.length===1?h=h.firstChild:h.firstChild){b=b&&c.nodeName(f,"tr");f=0;for(var o=this.length;f<o;f++)d.call(b?c.nodeName(this[f],"table")?this[f].getElementsByTagName("tbody")[0]||this[f].appendChild(this[f].ownerDocument.createElement("tbody")):
this[f]:this[f],f>0||e.cacheable||this.length>1?h.cloneNode(true):h)}k.length&&c.each(k,Oa)}return this}});c.buildFragment=function(a,b,d){var e,f,h;b=b&&b[0]?b[0].ownerDocument||b[0]:t;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===t&&!Ca.test(a[0])&&(c.support.checkClone||!Da.test(a[0]))){f=true;if(h=c.fragments[a[0]])if(h!==1)e=h}if(!e){e=b.createDocumentFragment();c.clean(a,b,e,d)}if(f)c.fragments[a[0]]=h?e:1;return{fragment:e,cacheable:f}};c.fragments={};c.each({appendTo:"append",
prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var e=[];d=c(d);var f=this.length===1&&this[0].parentNode;if(f&&f.nodeType===11&&f.childNodes.length===1&&d.length===1){d[b](this[0]);return this}else{f=0;for(var h=d.length;f<h;f++){var l=(f>0?this.clone(true):this).get();c(d[f])[b](l);e=e.concat(l)}return this.pushStack(e,a,d.selector)}}});c.extend({clean:function(a,b,d,e){b=b||t;if(typeof b.createElement==="undefined")b=b.ownerDocument||
b[0]&&b[0].ownerDocument||t;for(var f=[],h=0,l;(l=a[h])!=null;h++){if(typeof l==="number")l+="";if(l){if(typeof l==="string"&&!eb.test(l))l=b.createTextNode(l);else if(typeof l==="string"){l=l.replace(Aa,"<$1></$2>");var k=(Ba.exec(l)||["",""])[1].toLowerCase(),o=P[k]||P._default,x=o[0],r=b.createElement("div");for(r.innerHTML=o[1]+l+o[2];x--;)r=r.lastChild;if(!c.support.tbody){x=db.test(l);k=k==="table"&&!x?r.firstChild&&r.firstChild.childNodes:o[1]==="<table>"&&!x?r.childNodes:[];for(o=k.length-
1;o>=0;--o)c.nodeName(k[o],"tbody")&&!k[o].childNodes.length&&k[o].parentNode.removeChild(k[o])}!c.support.leadingWhitespace&&$.test(l)&&r.insertBefore(b.createTextNode($.exec(l)[0]),r.firstChild);l=r.childNodes}if(l.nodeType)f.push(l);else f=c.merge(f,l)}}if(d)for(h=0;f[h];h++)if(e&&c.nodeName(f[h],"script")&&(!f[h].type||f[h].type.toLowerCase()==="text/javascript"))e.push(f[h].parentNode?f[h].parentNode.removeChild(f[h]):f[h]);else{f[h].nodeType===1&&f.splice.apply(f,[h+1,0].concat(c.makeArray(f[h].getElementsByTagName("script"))));
d.appendChild(f[h])}return f},cleanData:function(a){for(var b,d,e=c.cache,f=c.event.special,h=c.support.deleteExpando,l=0,k;(k=a[l])!=null;l++)if(!(k.nodeName&&c.noData[k.nodeName.toLowerCase()]))if(d=k[c.expando]){if((b=e[d])&&b.events)for(var o in b.events)f[o]?c.event.remove(k,o):c.removeEvent(k,o,b.handle);if(h)delete k[c.expando];else k.removeAttribute&&k.removeAttribute(c.expando);delete e[d]}}});var Ea=/alpha\([^)]*\)/i,gb=/opacity=([^)]*)/,hb=/-([a-z])/ig,ib=/([A-Z])/g,Fa=/^-?\d+(?:px)?$/i,
jb=/^-?\d/,kb={position:"absolute",visibility:"hidden",display:"block"},Pa=["Left","Right"],Qa=["Top","Bottom"],W,Ga,aa,lb=function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){if(arguments.length===2&&b===B)return this;return c.access(this,a,b,true,function(d,e,f){return f!==B?c.style(d,e,f):c.css(d,e)})};c.extend({cssHooks:{opacity:{get:function(a,b){if(b){var d=W(a,"opacity","opacity");return d===""?"1":d}else return a.style.opacity}}},cssNumber:{zIndex:true,fontWeight:true,opacity:true,
zoom:true,lineHeight:true},cssProps:{"float":c.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,d,e){if(!(!a||a.nodeType===3||a.nodeType===8||!a.style)){var f,h=c.camelCase(b),l=a.style,k=c.cssHooks[h];b=c.cssProps[h]||h;if(d!==B){if(!(typeof d==="number"&&isNaN(d)||d==null)){if(typeof d==="number"&&!c.cssNumber[h])d+="px";if(!k||!("set"in k)||(d=k.set(a,d))!==B)try{l[b]=d}catch(o){}}}else{if(k&&"get"in k&&(f=k.get(a,false,e))!==B)return f;return l[b]}}},css:function(a,b,d){var e,f=c.camelCase(b),
h=c.cssHooks[f];b=c.cssProps[f]||f;if(h&&"get"in h&&(e=h.get(a,true,d))!==B)return e;else if(W)return W(a,b,f)},swap:function(a,b,d){var e={},f;for(f in b){e[f]=a.style[f];a.style[f]=b[f]}d.call(a);for(f in b)a.style[f]=e[f]},camelCase:function(a){return a.replace(hb,lb)}});c.curCSS=c.css;c.each(["height","width"],function(a,b){c.cssHooks[b]={get:function(d,e,f){var h;if(e){if(d.offsetWidth!==0)h=oa(d,b,f);else c.swap(d,kb,function(){h=oa(d,b,f)});if(h<=0){h=W(d,b,b);if(h==="0px"&&aa)h=aa(d,b,b);
if(h!=null)return h===""||h==="auto"?"0px":h}if(h<0||h==null){h=d.style[b];return h===""||h==="auto"?"0px":h}return typeof h==="string"?h:h+"px"}},set:function(d,e){if(Fa.test(e)){e=parseFloat(e);if(e>=0)return e+"px"}else return e}}});if(!c.support.opacity)c.cssHooks.opacity={get:function(a,b){return gb.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var d=a.style;d.zoom=1;var e=c.isNaN(b)?"":"alpha(opacity="+b*100+")",f=
d.filter||"";d.filter=Ea.test(f)?f.replace(Ea,e):d.filter+" "+e}};if(t.defaultView&&t.defaultView.getComputedStyle)Ga=function(a,b,d){var e;d=d.replace(ib,"-$1").toLowerCase();if(!(b=a.ownerDocument.defaultView))return B;if(b=b.getComputedStyle(a,null)){e=b.getPropertyValue(d);if(e===""&&!c.contains(a.ownerDocument.documentElement,a))e=c.style(a,d)}return e};if(t.documentElement.currentStyle)aa=function(a,b){var d,e,f=a.currentStyle&&a.currentStyle[b],h=a.style;if(!Fa.test(f)&&jb.test(f)){d=h.left;
e=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;h.left=b==="fontSize"?"1em":f||0;f=h.pixelLeft+"px";h.left=d;a.runtimeStyle.left=e}return f===""?"auto":f};W=Ga||aa;if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=a.offsetHeight;return a.offsetWidth===0&&b===0||!c.support.reliableHiddenOffsets&&(a.style.display||c.css(a,"display"))==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var mb=c.now(),nb=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
ob=/^(?:select|textarea)/i,pb=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,qb=/^(?:GET|HEAD)$/,Ra=/\[\]$/,T=/\=\?(&|$)/,ja=/\?/,rb=/([?&])_=[^&]*/,sb=/^(\w+:)?\/\/([^\/?#]+)/,tb=/%20/g,ub=/#.*$/,Ha=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!=="string"&&Ha)return Ha.apply(this,arguments);else if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var f=a.slice(e,a.length);a=a.slice(0,e)}e="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b===
"object"){b=c.param(b,c.ajaxSettings.traditional);e="POST"}var h=this;c.ajax({url:a,type:e,dataType:"html",data:b,complete:function(l,k){if(k==="success"||k==="notmodified")h.html(f?c("<div>").append(l.responseText.replace(nb,"")).find(f):l.responseText);d&&h.each(d,[l.responseText,k,l])}});return this},serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&
!this.disabled&&(this.checked||ob.test(this.nodeName)||pb.test(this.type))}).map(function(a,b){var d=c(this).val();return d==null?null:c.isArray(d)?c.map(d,function(e){return{name:b.name,value:e}}):{name:b.name,value:d}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,e){if(c.isFunction(b)){e=e||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:e})},
getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,e){if(c.isFunction(b)){e=e||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:e})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return new E.XMLHttpRequest},accepts:{xml:"application/xml, text/xml",html:"text/html",
script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},ajax:function(a){var b=c.extend(true,{},c.ajaxSettings,a),d,e,f,h=b.type.toUpperCase(),l=qb.test(h);b.url=b.url.replace(ub,"");b.context=a&&a.context!=null?a.context:b;if(b.data&&b.processData&&typeof b.data!=="string")b.data=c.param(b.data,b.traditional);if(b.dataType==="jsonp"){if(h==="GET")T.test(b.url)||(b.url+=(ja.test(b.url)?"&":"?")+(b.jsonp||"callback")+"=?");else if(!b.data||
!T.test(b.data))b.data=(b.data?b.data+"&":"")+(b.jsonp||"callback")+"=?";b.dataType="json"}if(b.dataType==="json"&&(b.data&&T.test(b.data)||T.test(b.url))){d=b.jsonpCallback||"jsonp"+mb++;if(b.data)b.data=(b.data+"").replace(T,"="+d+"$1");b.url=b.url.replace(T,"="+d+"$1");b.dataType="script";var k=E[d];E[d]=function(m){if(c.isFunction(k))k(m);else{E[d]=B;try{delete E[d]}catch(p){}}f=m;c.handleSuccess(b,w,e,f);c.handleComplete(b,w,e,f);r&&r.removeChild(A)}}if(b.dataType==="script"&&b.cache===null)b.cache=
false;if(b.cache===false&&l){var o=c.now(),x=b.url.replace(rb,"$1_="+o);b.url=x+(x===b.url?(ja.test(b.url)?"&":"?")+"_="+o:"")}if(b.data&&l)b.url+=(ja.test(b.url)?"&":"?")+b.data;b.global&&c.active++===0&&c.event.trigger("ajaxStart");o=(o=sb.exec(b.url))&&(o[1]&&o[1].toLowerCase()!==location.protocol||o[2].toLowerCase()!==location.host);if(b.dataType==="script"&&h==="GET"&&o){var r=t.getElementsByTagName("head")[0]||t.documentElement,A=t.createElement("script");if(b.scriptCharset)A.charset=b.scriptCharset;
A.src=b.url;if(!d){var C=false;A.onload=A.onreadystatechange=function(){if(!C&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){C=true;c.handleSuccess(b,w,e,f);c.handleComplete(b,w,e,f);A.onload=A.onreadystatechange=null;r&&A.parentNode&&r.removeChild(A)}}}r.insertBefore(A,r.firstChild);return B}var J=false,w=b.xhr();if(w){b.username?w.open(h,b.url,b.async,b.username,b.password):w.open(h,b.url,b.async);try{if(b.data!=null&&!l||a&&a.contentType)w.setRequestHeader("Content-Type",
b.contentType);if(b.ifModified){c.lastModified[b.url]&&w.setRequestHeader("If-Modified-Since",c.lastModified[b.url]);c.etag[b.url]&&w.setRequestHeader("If-None-Match",c.etag[b.url])}o||w.setRequestHeader("X-Requested-With","XMLHttpRequest");w.setRequestHeader("Accept",b.dataType&&b.accepts[b.dataType]?b.accepts[b.dataType]+", */*; q=0.01":b.accepts._default)}catch(I){}if(b.beforeSend&&b.beforeSend.call(b.context,w,b)===false){b.global&&c.active--===1&&c.event.trigger("ajaxStop");w.abort();return false}b.global&&
c.triggerGlobal(b,"ajaxSend",[w,b]);var L=w.onreadystatechange=function(m){if(!w||w.readyState===0||m==="abort"){J||c.handleComplete(b,w,e,f);J=true;if(w)w.onreadystatechange=c.noop}else if(!J&&w&&(w.readyState===4||m==="timeout")){J=true;w.onreadystatechange=c.noop;e=m==="timeout"?"timeout":!c.httpSuccess(w)?"error":b.ifModified&&c.httpNotModified(w,b.url)?"notmodified":"success";var p;if(e==="success")try{f=c.httpData(w,b.dataType,b)}catch(q){e="parsererror";p=q}if(e==="success"||e==="notmodified")d||
c.handleSuccess(b,w,e,f);else c.handleError(b,w,e,p);d||c.handleComplete(b,w,e,f);m==="timeout"&&w.abort();if(b.async)w=null}};try{var g=w.abort;w.abort=function(){w&&Function.prototype.call.call(g,w);L("abort")}}catch(i){}b.async&&b.timeout>0&&setTimeout(function(){w&&!J&&L("timeout")},b.timeout);try{w.send(l||b.data==null?null:b.data)}catch(n){c.handleError(b,w,null,n);c.handleComplete(b,w,e,f)}b.async||L();return w}},param:function(a,b){var d=[],e=function(h,l){l=c.isFunction(l)?l():l;d[d.length]=
encodeURIComponent(h)+"="+encodeURIComponent(l)};if(b===B)b=c.ajaxSettings.traditional;if(c.isArray(a)||a.jquery)c.each(a,function(){e(this.name,this.value)});else for(var f in a)da(f,a[f],b,e);return d.join("&").replace(tb,"+")}});c.extend({active:0,lastModified:{},etag:{},handleError:function(a,b,d,e){a.error&&a.error.call(a.context,b,d,e);a.global&&c.triggerGlobal(a,"ajaxError",[b,a,e])},handleSuccess:function(a,b,d,e){a.success&&a.success.call(a.context,e,d,b);a.global&&c.triggerGlobal(a,"ajaxSuccess",
[b,a])},handleComplete:function(a,b,d){a.complete&&a.complete.call(a.context,b,d);a.global&&c.triggerGlobal(a,"ajaxComplete",[b,a]);a.global&&c.active--===1&&c.event.trigger("ajaxStop")},triggerGlobal:function(a,b,d){(a.context&&a.context.url==null?c(a.context):c.event).trigger(b,d)},httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===1223}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),
e=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(e)c.etag[b]=e;return a.status===304},httpData:function(a,b,d){var e=a.getResponseHeader("content-type")||"",f=b==="xml"||!b&&e.indexOf("xml")>=0;a=f?a.responseXML:a.responseText;f&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b==="json"||!b&&e.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&e.indexOf("javascript")>=0)c.globalEval(a);return a}});
if(E.ActiveXObject)c.ajaxSettings.xhr=function(){if(E.location.protocol!=="file:")try{return new E.XMLHttpRequest}catch(a){}try{return new E.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}};c.support.ajax=!!c.ajaxSettings.xhr();var ea={},vb=/^(?:toggle|show|hide)$/,wb=/^([+\-]=)?([\d+.\-]+)(.*)$/,ba,pa=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b,d){if(a||a===0)return this.animate(S("show",
3),a,b,d);else{d=0;for(var e=this.length;d<e;d++){a=this[d];b=a.style.display;if(!c.data(a,"olddisplay")&&b==="none")b=a.style.display="";b===""&&c.css(a,"display")==="none"&&c.data(a,"olddisplay",qa(a.nodeName))}for(d=0;d<e;d++){a=this[d];b=a.style.display;if(b===""||b==="none")a.style.display=c.data(a,"olddisplay")||""}return this}},hide:function(a,b,d){if(a||a===0)return this.animate(S("hide",3),a,b,d);else{a=0;for(b=this.length;a<b;a++){d=c.css(this[a],"display");d!=="none"&&c.data(this[a],"olddisplay",
d)}for(a=0;a<b;a++)this[a].style.display="none";return this}},_toggle:c.fn.toggle,toggle:function(a,b,d){var e=typeof a==="boolean";if(c.isFunction(a)&&c.isFunction(b))this._toggle.apply(this,arguments);else a==null||e?this.each(function(){var f=e?a:c(this).is(":hidden");c(this)[f?"show":"hide"]()}):this.animate(S("toggle",3),a,b,d);return this},fadeTo:function(a,b,d,e){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,d,e)},animate:function(a,b,d,e){var f=c.speed(b,
d,e);if(c.isEmptyObject(a))return this.each(f.complete);return this[f.queue===false?"each":"queue"](function(){var h=c.extend({},f),l,k=this.nodeType===1,o=k&&c(this).is(":hidden"),x=this;for(l in a){var r=c.camelCase(l);if(l!==r){a[r]=a[l];delete a[l];l=r}if(a[l]==="hide"&&o||a[l]==="show"&&!o)return h.complete.call(this);if(k&&(l==="height"||l==="width")){h.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY];if(c.css(this,"display")==="inline"&&c.css(this,"float")==="none")if(c.support.inlineBlockNeedsLayout)if(qa(this.nodeName)===
"inline")this.style.display="inline-block";else{this.style.display="inline";this.style.zoom=1}else this.style.display="inline-block"}if(c.isArray(a[l])){(h.specialEasing=h.specialEasing||{})[l]=a[l][1];a[l]=a[l][0]}}if(h.overflow!=null)this.style.overflow="hidden";h.curAnim=c.extend({},a);c.each(a,function(A,C){var J=new c.fx(x,h,A);if(vb.test(C))J[C==="toggle"?o?"show":"hide":C](a);else{var w=wb.exec(C),I=J.cur()||0;if(w){var L=parseFloat(w[2]),g=w[3]||"px";if(g!=="px"){c.style(x,A,(L||1)+g);I=(L||
1)/J.cur()*I;c.style(x,A,I+g)}if(w[1])L=(w[1]==="-="?-1:1)*L+I;J.custom(I,L,g)}else J.custom(I,C,"")}});return true})},stop:function(a,b){var d=c.timers;a&&this.queue([]);this.each(function(){for(var e=d.length-1;e>=0;e--)if(d[e].elem===this){b&&d[e](true);d.splice(e,1)}});b||this.dequeue();return this}});c.each({slideDown:S("show",1),slideUp:S("hide",1),slideToggle:S("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){c.fn[a]=function(d,e,f){return this.animate(b,
d,e,f)}});c.extend({speed:function(a,b,d){var e=a&&typeof a==="object"?c.extend({},a):{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};e.duration=c.fx.off?0:typeof e.duration==="number"?e.duration:e.duration in c.fx.speeds?c.fx.speeds[e.duration]:c.fx.speeds._default;e.old=e.complete;e.complete=function(){e.queue!==false&&c(this).dequeue();c.isFunction(e.old)&&e.old.call(this)};return e},easing:{linear:function(a,b,d,e){return d+e*a},swing:function(a,b,d,e){return(-Math.cos(a*
Math.PI)/2+0.5)*e+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]||c.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a=parseFloat(c.css(this.elem,this.prop));return a&&a>-1E4?a:0},custom:function(a,b,d){function e(l){return f.step(l)}
var f=this,h=c.fx;this.startTime=c.now();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start;this.pos=this.state=0;e.elem=this.elem;if(e()&&c.timers.push(e)&&!ba)ba=setInterval(h.tick,h.interval)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;
this.custom(this.cur(),0)},step:function(a){var b=c.now(),d=true;if(a||b>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var e in this.options.curAnim)if(this.options.curAnim[e]!==true)d=false;if(d){if(this.options.overflow!=null&&!c.support.shrinkWrapBlocks){var f=this.elem,h=this.options;c.each(["","X","Y"],function(k,o){f.style["overflow"+o]=h.overflow[k]})}this.options.hide&&c(this.elem).hide();if(this.options.hide||
this.options.show)for(var l in this.options.curAnim)c.style(this.elem,l,this.options.orig[l]);this.options.complete.call(this.elem)}return false}else{a=b-this.startTime;this.state=a/this.options.duration;b=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||b](this.state,a,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=
c.timers,b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length||c.fx.stop()},interval:13,stop:function(){clearInterval(ba);ba=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){c.style(a.elem,"opacity",a.now)},_default:function(a){if(a.elem.style&&a.elem.style[a.prop]!=null)a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit;else a.elem[a.prop]=a.now}}});if(c.expr&&c.expr.filters)c.expr.filters.animated=function(a){return c.grep(c.timers,function(b){return a===
b.elem}).length};var xb=/^t(?:able|d|h)$/i,Ia=/^(?:body|html)$/i;c.fn.offset="getBoundingClientRect"in t.documentElement?function(a){var b=this[0],d;if(a)return this.each(function(l){c.offset.setOffset(this,a,l)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);try{d=b.getBoundingClientRect()}catch(e){}var f=b.ownerDocument,h=f.documentElement;if(!d||!c.contains(h,b))return d||{top:0,left:0};b=f.body;f=fa(f);return{top:d.top+(f.pageYOffset||c.support.boxModel&&
h.scrollTop||b.scrollTop)-(h.clientTop||b.clientTop||0),left:d.left+(f.pageXOffset||c.support.boxModel&&h.scrollLeft||b.scrollLeft)-(h.clientLeft||b.clientLeft||0)}}:function(a){var b=this[0];if(a)return this.each(function(x){c.offset.setOffset(this,a,x)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);c.offset.initialize();var d,e=b.offsetParent,f=b.ownerDocument,h=f.documentElement,l=f.body;d=(f=f.defaultView)?f.getComputedStyle(b,null):b.currentStyle;
for(var k=b.offsetTop,o=b.offsetLeft;(b=b.parentNode)&&b!==l&&b!==h;){if(c.offset.supportsFixedPosition&&d.position==="fixed")break;d=f?f.getComputedStyle(b,null):b.currentStyle;k-=b.scrollTop;o-=b.scrollLeft;if(b===e){k+=b.offsetTop;o+=b.offsetLeft;if(c.offset.doesNotAddBorder&&!(c.offset.doesAddBorderForTableAndCells&&xb.test(b.nodeName))){k+=parseFloat(d.borderTopWidth)||0;o+=parseFloat(d.borderLeftWidth)||0}e=b.offsetParent}if(c.offset.subtractsBorderForOverflowNotVisible&&d.overflow!=="visible"){k+=
parseFloat(d.borderTopWidth)||0;o+=parseFloat(d.borderLeftWidth)||0}d=d}if(d.position==="relative"||d.position==="static"){k+=l.offsetTop;o+=l.offsetLeft}if(c.offset.supportsFixedPosition&&d.position==="fixed"){k+=Math.max(h.scrollTop,l.scrollTop);o+=Math.max(h.scrollLeft,l.scrollLeft)}return{top:k,left:o}};c.offset={initialize:function(){var a=t.body,b=t.createElement("div"),d,e,f,h=parseFloat(c.css(a,"marginTop"))||0;c.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",
height:"1px",visibility:"hidden"});b.innerHTML="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";a.insertBefore(b,a.firstChild);d=b.firstChild;e=d.firstChild;f=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=e.offsetTop!==5;this.doesAddBorderForTableAndCells=
f.offsetTop===5;e.style.position="fixed";e.style.top="20px";this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15;e.style.position=e.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==h;a.removeChild(b);c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.css(a,
"marginTop"))||0;d+=parseFloat(c.css(a,"marginLeft"))||0}return{top:b,left:d}},setOffset:function(a,b,d){var e=c.css(a,"position");if(e==="static")a.style.position="relative";var f=c(a),h=f.offset(),l=c.css(a,"top"),k=c.css(a,"left"),o=e==="absolute"&&c.inArray("auto",[l,k])>-1;e={};var x={};if(o)x=f.position();l=o?x.top:parseInt(l,10)||0;k=o?x.left:parseInt(k,10)||0;if(c.isFunction(b))b=b.call(a,d,h);if(b.top!=null)e.top=b.top-h.top+l;if(b.left!=null)e.left=b.left-h.left+k;"using"in b?b.using.call(a,
e):f.css(e)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),e=Ia.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.css(a,"marginTop"))||0;d.left-=parseFloat(c.css(a,"marginLeft"))||0;e.top+=parseFloat(c.css(b[0],"borderTopWidth"))||0;e.left+=parseFloat(c.css(b[0],"borderLeftWidth"))||0;return{top:d.top-e.top,left:d.left-e.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||t.body;a&&!Ia.test(a.nodeName)&&
c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(e){var f=this[0],h;if(!f)return null;if(e!==B)return this.each(function(){if(h=fa(this))h.scrollTo(!a?e:c(h).scrollLeft(),a?e:c(h).scrollTop());else this[d]=e});else return(h=fa(f))?"pageXOffset"in h?h[a?"pageYOffset":"pageXOffset"]:c.support.boxModel&&h.document.documentElement[d]||h.document.body[d]:f[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();
c.fn["inner"+b]=function(){return this[0]?parseFloat(c.css(this[0],d,"padding")):null};c.fn["outer"+b]=function(e){return this[0]?parseFloat(c.css(this[0],d,e?"margin":"border")):null};c.fn[d]=function(e){var f=this[0];if(!f)return e==null?null:this;if(c.isFunction(e))return this.each(function(l){var k=c(this);k[d](e.call(this,l,k[d]()))});if(c.isWindow(f))return f.document.compatMode==="CSS1Compat"&&f.document.documentElement["client"+b]||f.document.body["client"+b];else if(f.nodeType===9)return Math.max(f.documentElement["client"+
b],f.body["scroll"+b],f.documentElement["scroll"+b],f.body["offset"+b],f.documentElement["offset"+b]);else if(e===B){f=c.css(f,d);var h=parseFloat(f);return c.isNaN(h)?f:h}else return this.css(d,typeof e==="string"?e:e+"px")}})})(window);
/trunk/applications/stations/stations.js
New file
0,0 → 1,203
var tableau_couleurs = {"particulier": "#A9582B", "etablissement_scolaire" :"#8DC7B8",
"association": "#0000FF","professionnel": "#A7BD5B",
"autre": "#FFC730"};
 
var infowindow = new google.maps.InfoWindow();
var types_affiches = new Array();
var marqueurs = new Array();
 
function getUrlBaseJrest() {
// injecté depuis le fichier de config
return BASE_URL_JREST;
}
 
function initialiserCarte() {
 
if($('#map_canvas').length == 0) {
return;
}
 
var latlng = new google.maps.LatLng(47.0504, 2.2347);
var myOptions = {
zoom: 5,
center: latlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
 
map = new google.maps.Map(document.getElementById("map_canvas"),
myOptions);
 
$('.lien_vers_profil').live('click', function(event) {
event.preventDefault();
window.open($(this).attr('href'));
return false;
});
 
obtenirStations();
}
 
function obtenirStations() {
 
$.get(getUrlBaseJrest()+'OdsExport/ExportStationJson/', function(data) {
 
var infos_stations = data.stations;
var stats = data.stats;
 
for(i in infos_stations) {
creerEtAjouterMarqueur(i, infos_stations[i]);
}
genererLegende(stats);
});
}
 
function obtenirImagePourChaineCouleur(chaine_couleur) {
 
chaine_couleur = encodeURIComponent(chaine_couleur);
var image = getUrlBaseJrest()+"OdsMarqueur/point?couleurs="+chaine_couleur;
 
return image;
}
 
function genererLegende(stats) {
chaine_legende = '<div class="critere" id="legende">';
for(i in stats) {
if(i != 'total') {
var intitule_type = i.formaterTypePourBalise();
var id_legende = 'type_'+intitule_type;
var legende = i+' ('+stats[i]+')';
var couleur = tableau_couleurs[intitule_type];
chaine_legende += '<input class="selecteur_type" type="checkbox" value="'+intitule_type+'" id="selecteur_'+id_legende+'" />'+
'<span class="legende" style="background-color:'+couleur+'"></span>'+
'<label id="'+id_legende+'">'+legende+'</label>'+
'<br />';
} else {
$('#conteneur_nb_stations').text(stats[i]+' stations au total');
}
}
chaine_legende += '</div>';
$("#conteneur_legende").html(chaine_legende);
 
$('.selecteur_type').change(function() {
types_affiches = new Array();
$('.selecteur_type:checked').each(function(){
types_affiches.push($(this).attr("id").replace("selecteur_type_",''));
});
afficherMarqueursSelectionnes();
})
}
 
function creerEtAjouterMarqueur(id_marqueur, infos_station) {
 
latlng = new google.maps.LatLng(infos_station['latitude'],infos_station['longitude']);
var intitule_type = infos_station['type_participant'].formaterTypePourBalise();
var chaine_couleur = tableau_couleurs[intitule_type];
var image = obtenirImagePourChaineCouleur(chaine_couleur);
var nom_station = infos_station['nom'];
 
var marqueur_station = new google.maps.Marker({
position: latlng,
icon:image,
code:intitule_type,
title:nom_station,
optimized: true
});
 
google.maps.event.addListener(marqueur_station, 'click', function() {
 
contenu_fenetre = formaterContenuFenetre(infos_station);
infowindow.close();
infowindow.setContent(contenu_fenetre);
infowindow.open(map,this);
});
 
marqueur_station.setDraggable(false);
marqueur_station.setClickable(true);
 
marqueur_station.setMap(map);
marqueurs.push(marqueur_station);
}
 
function afficherMarqueursSelectionnes() {
for(i in marqueurs) {
var afficher = (types_affiches.length == 0 || jQuery.inArray(marqueurs[i].code, types_affiches) > -1) ? true : false;
marqueurs[i].setVisible(afficher);
}
}
 
function formaterContenuFenetre(infos_station) {
 
var contenu_fenetre = "";
contenu_fenetre = "<h3> "+infos_station['nom']+"</h3>";
contenu_fenetre += '<div class="infos_participant"> Participant : '+construireUrlProfilParticipant(infos_station['participant'])+'</div>';
contenu_fenetre += '<div class="infos_commune"> ';
if(infos_station['nom_commune'] != null && infos_station['nom_commune'] != "") {
contenu_fenetre += 'Commune : '+infos_station['nom_commune'];
}
 
if(infos_station['code_commune'] != null && infos_station['code_commune'] != "") {
contenu_fenetre += ' ('+infos_station['code_commune']+')';
}
contenu_fenetre += '</div>';
contenu_fenetre += '<div class="infos_altitude"> Altitude : '+infos_station['altitude']+' m</div>';
 
 
return contenu_fenetre;
}
 
function obtenirImagePourChaineCouleur(chaine_couleur) {
 
chaine_couleur = encodeURIComponent(chaine_couleur);
var image = getUrlBaseJrest()+"OdsMarqueur/point?couleurs="+chaine_couleur;
 
return image;
}
 
function construireUrlProfilParticipant(participant) {
 
if(participant['id'] == null && participant['nom'] == null) {
return "anonyme";
}
 
var id = participant['id'];
 
if(participant['nom'] == null || participant['nom'] == "null") {
var pseudo = participant['id'];
} else {
var pseudo = participant['nom'];
}
 
return '<a class="lien_vers_profil" href="http://obs-saisons.fr/user/'+id+'"> '+pseudo+' </a>';
}
 
$('#map_canvas').ready(function() {
initialiserCarte();
});
 
String.prototype.formaterTypePourBalise = function() {
var s = this;
return s.removeDiacritics().replace(' ','_').toLowerCase();
}
 
String.prototype.removeDiacritics = function() {
var diacritics = [
[/[\300-\306]/g, 'A'],
[/[\340-\346]/g, 'a'],
[/[\310-\313]/g, 'E'],
[/[\350-\353]/g, 'e'],
[/[\314-\317]/g, 'I'],
[/[\354-\357]/g, 'i'],
[/[\322-\330]/g, 'O'],
[/[\362-\370]/g, 'o'],
[/[\331-\334]/g, 'U'],
[/[\371-\374]/g, 'u'],
[/[\321]/g, 'N'],
[/[\361]/g, 'n'],
[/[\307]/g, 'C'],
[/[\347]/g, 'c'],
];
var s = this;
for (var i = 0; i < diacritics.length; i++) {
s = s.replace(diacritics[i][0], diacritics[i][1]);
}
return s;
}
/trunk/applications/doc/sql/ods_saisie.sql
New file
0,0 → 1,244
-- phpMyAdmin SQL Dump
-- version 3.1.1
-- http://www.phpmyadmin.net
--
-- Serveur: localhost
-- Généré le : Ven 12 Novembre 2010 à 10:49
-- Version du serveur: 5.1.30
-- Version de PHP: 5.2.8
 
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
 
 
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
 
--
-- Base de données: `ods_saisie`
--
 
-- --------------------------------------------------------
 
--
-- Structure de la table `ods_communes`
--
 
CREATE TABLE IF NOT EXISTS `ods_communes` (
`oc_id_commune` int(10) unsigned NOT NULL AUTO_INCREMENT,
`oc_code_insee` int(10) unsigned DEFAULT NULL,
`oc_nom` text,
`oc_secteur` varchar(50) DEFAULT NULL,
`oc_latitude` float DEFAULT NULL,
`oc_longitude` float DEFAULT NULL,
PRIMARY KEY (`oc_id_commune`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
 
--
-- Contenu de la table `ods_communes`
--
 
 
-- --------------------------------------------------------
 
--
-- Structure de la table `ods_especes`
--
 
CREATE TABLE IF NOT EXISTS `ods_especes` (
`oe_id_espece` int(10) unsigned NOT NULL AUTO_INCREMENT,
`oe_nom_vernaculaire` varchar(255) DEFAULT NULL,
`oe_nom_scientifique` varchar(255) DEFAULT NULL,
`oe_espece_ecole` tinyint(1) DEFAULT NULL,
`oe_description` text,
`oe_ce_climat` int(10) unsigned DEFAULT NULL,
`oe_ce_evenements` varchar(50) DEFAULT '',
`oe_ce_type` int(10) unsigned DEFAULT NULL,
PRIMARY KEY (`oe_id_espece`),
KEY `oe_ce_climat` (`oe_ce_climat`),
KEY `oe_ce_evenements` (`oe_ce_evenements`),
KEY `oe_ce_type` (`oe_ce_type`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=135 ;
 
--
-- Contenu de la table `ods_especes`
--
 
INSERT INTO `ods_especes` (`oe_id_espece`, `oe_nom_vernaculaire`, `oe_nom_scientifique`, `oe_espece_ecole`, `oe_description`, `oe_ce_climat`, `oe_ce_evenements`, `oe_ce_type`) VALUES
(1, 'marronnier', 'Aesculus hipposcastanum', 1, 'http://fr.wikipedia.org/wiki/Marronnier', 0, '13,14,15,16,17', 2),
(6, 'bouleau', 'Betula pendula', 1, 'http://fr.wikipedia.org/wiki/Bouleau', 0, '13,14,15,16,18,19', 2),
(12, 'micocoulier', 'Celtis australis', 1, 'http://fr.wikipedia.org/wiki/Micocoulier_de_Provence', 0, '13,14,15,16,17,18,19', 2),
(19, 'noisetier', 'Corylus avellana', 1, 'http://fr.wikipedia.org/wiki/Corylus_avellana', 0, '13,14,15,16', 2),
(23, 'forsythia', 'Forsythia intermedia', 1, 'http://fr.wikipedia.org/wiki/Forsythia', 0, '13,14,15,16,18,19', 2),
(27, 'frêne commun', 'Fraxinus excelsior', 1, 'http://fr.wikipedia.org/wiki/Fraxinus_excelsior', 0, '13,14,15,16,17', 2),
(32, 'mélèze', 'Larix decidua', 1, 'http://fr.wikipedia.org/wiki/Larix_decidua', 0, '13,14,15,16,18,19', 2),
(38, 'épicea', 'Picea abies', 1, 'http://fr.wikipedia.org/wiki/%C3%89pic%C3%A9a_commun', 0, '13,14,15,16', 2),
(42, 'pin d''alep', 'Pinus halepensis', 1, 'http://fr.wikipedia.org/wiki/Pin_d%27Alep', 0, '13,14,15,16', 2),
(50, 'platane', 'Platanus acerifolia', 1, 'http://fr.wikipedia.org/wiki/Platane', 0, '13,14,15,16,18,19', 2),
(56, 'chêne blanc', 'Quercus pubescens', 1, 'http://fr.wikipedia.org/wiki/Quercus_pubescens', 0, '13,14,15,16,17,18,19', 2),
(63, 'robinier faux-acacia', 'Robinia pseudoacacia', 1, 'http://fr.wikipedia.org/wiki/Robinier', 0, '13,14,15,16,18,19', 2),
(70, 'sorbier des oiseleurs', 'Sorbus aucuparia', 1, 'http://fr.wikipedia.org/wiki/Sorbus_aucuparia', 0, '13,14,15,16,17,18,19', 2),
(77, 'lilas', 'Syringa vulgaris', 1, ' http://fr.wikipedia.org/wiki/Lilas', 0, '13,14,15,16', 2),
(81, 'tilleul à grande feuille', 'Tilia platyphyllos', 1, 'http://fr.wikipedia.org/wiki/Tilia', 0, '13,14,15,16', 2),
(85, 'tilleul à petite feuille', 'Tilia cordata', 1, 'http://fr.wikipedia.org/wiki/Tilia', 0, '13,14,15,16,17', 2),
(89, 'viorne tin', 'Viburnum tinus', 1, 'http://fr.wikipedia.org/wiki/Viburnum_tinus', 0, '13,14,15,16,17', 2),
(94, 'pâquerette', 'Bellis perennis', 1, ' http://fr.wikipedia.org/wiki/Bellis', 0, '15', 3),
(95, 'primevère coucou', 'Primula veris', 1, 'http://fr.wikipedia.org/wiki/Primula_veris', 0, '15', 3),
(96, 'pissenlit', 'Taraxacum officinale', 1, 'http://fr.wikipedia.org/wiki/Taraxacum', 0, '15', 3),
(97, 'coucou', 'Cuculus canorus', 1, 'http://www.oiseaux.net/oiseaux/cuculiformes/coucou.gris.html', 0, '20', 4),
(98, 'hirondelle des fenêtres', 'Delichon urbica', 1, 'http://www.oiseaux.net/oiseaux/passeriformes/hirondelle.de.fenetre.html', 0, '20', 4),
(99, 'hirondelle rustique', 'Hirundo rustica', 1, 'http://www.oiseaux.net/oiseaux/passeriformes/hirondelle.rustique.html', 0, '20', 4),
(100, 'martinet', 'Apus apus', 1, 'http://www.oiseaux.net/oiseaux/apodiformes/martinet.noir.html', 0, '20', 4),
(101, 'citron', 'Gonepteryx rhamni', 1, 'http://expopapillon.free.fr/esp.php3?num=20#haut', 0, '20', 5),
(102, 'coccinelle', 'Coccinella sp.', 1, 'http://fr.wikipedia.org/wiki/Coccinella', 0, '20', 5),
(103, 'mauve', 'Malva sylvestris', 1, 'http://fr.wikipedia.org/wiki/Malva_sylvestris', 0, '15', 3),
(104, 'tussilage', 'Tussilago farfara', 1, 'http://fr.wikipedia.org/wiki/Tussilago_farfara', 0, '15', 3),
(105, 'amandier', 'Prunus dulcis', 1, 'http://fr.wikipedia.org/wiki/Amandier', 0, '13,14,15,16,17,18,19', 2),
(106, 'poirier', 'Pyrus communis', 1, 'http://fr.wikipedia.org/wiki/Poirier', 0, '13,14,15,16,17,18,19', 2),
(107, 'cerisier', 'Prunus cerasus', 1, 'http://fr.wikipedia.org/wiki/Cerisier', 0, '13,14,15,16,17,18,19', 2),
(108, 'guépier', 'Merops apiaster', 0, 'http://www.oiseaux.net/oiseaux/coraciiformes/guepier.d.europe.html', 0, '20', 4),
(109, 'rossignol philomèle', 'Luscinia megarhynchos', 0, 'http://www.oiseaux.net/oiseaux/passeriformes/rossignol.philomele.html', 0, '20', 4),
(110, 'milan noir', 'Milvus migrans', 0, 'http://www.oiseaux.net/oiseaux/accipitriformes/milan.noir.html', 0, '20', 4),
(111, 'échasse blanche', 'Himantopus himantopus', 0, 'http://www.oiseaux.net/oiseaux/charadriiformes/echasse.blanche.html', 0, '20', 4),
(112, 'prunier', 'Prunus domestica', 1, 'http://fr.wikipedia.org/wiki/Prunier', 0, '13,14,15,16,17,18,19', 2),
(125, 'Ophrys abeille', 'Ophrys apifera', 0, 'http://fr.wikipedia.org/wiki/Ophrys_abeille', 0, '15', 3),
(126, 'Orchis pyramidal', 'Anacamptis pyramidalis', 0, 'http://fr.wikipedia.org/wiki/Orchis_pyramidal', 0, '15', 3),
(127, 'épipactis des marais', 'Epipactis palustris', 0, 'http://fr.wikipedia.org/wiki/%C3%89pipactis_des_marais ', 0, '15', 3),
(128, 'Orchis sureau', 'Dactylorhiza sambucina', 0, 'http://fr.wikipedia.org/wiki/Orchis_sureau', 0, '15', 3),
(129, 'sérapias en langue', 'Serapias lingua', 0, 'http://fr.wikipedia.org/wiki/Orchis_sureau ', 0, '15', 3),
(130, 'Orchis pourpre', 'Orchis purpurea', 0, 'http://fr.wikipedia.org/wiki/Orchis_pourpre', 0, '15', 3),
(131, 'Orchis brûlé', 'Neotinea ustulata', 0, 'http://fr.wikipedia.org/wiki/Orchis_br%C3%BBl%C3%A9', 0, '15', 3),
(132, 'Orchis bouc', 'Himantoglossum hircinum', 0, 'http://fr.wikipedia.org/wiki/Orchis_bouc', 0, '15', 3),
(133, 'spiranthe d''automne', 'Spiranthes spiralis', 0, 'http://fr.wikipedia.org/wiki/Spiranthe_d%27automne', 0, '15', 3),
(134, 'céphalanthère à longues feuilles ', 'Cephalanthera longifolia', 0, 'http://fr.wikipedia.org/wiki/C%C3%A9phalanth%C3%A8re_%C3%A0_feuilles_%C3%A9troites', 0, '15', 3);
 
-- --------------------------------------------------------
 
--
-- Structure de la table `ods_individus`
--
 
CREATE TABLE IF NOT EXISTS `ods_individus` (
`oi_id_individu` int(10) unsigned NOT NULL AUTO_INCREMENT,
`oi_ce_espece` int(10) unsigned DEFAULT NULL,
`oi_ce_station` int(10) unsigned DEFAULT NULL,
`oi_nom` text CHARACTER SET utf8 NOT NULL,
`oi_commentaire` text CHARACTER SET utf8 NOT NULL,
PRIMARY KEY (`oi_id_individu`),
KEY `oi_ce_espece` (`oi_ce_espece`),
KEY `oi_ce_station` (`oi_ce_station`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=32 ;
 
 
-- --------------------------------------------------------
 
--
-- Structure de la table `ods_observations`
--
 
CREATE TABLE IF NOT EXISTS `ods_observations` (
`oo_id_observation` int(10) unsigned NOT NULL AUTO_INCREMENT,
`oo_ce_participant` int(11) NOT NULL,
`oo_ordre` int(10) unsigned NOT NULL,
`oo_ce_individu` int(10) unsigned DEFAULT NULL,
`oo_ce_evenement` int(10) unsigned DEFAULT NULL,
`oo_date` date DEFAULT NULL,
`oo_commentaire` text,
`oo_date_saisie` date DEFAULT NULL,
`oo_date_modification` date DEFAULT NULL,
`oo_absence_evenement` tinyint(1) NOT NULL,
PRIMARY KEY (`oo_id_observation`),
KEY `oo_ce_evenement` (`oo_ce_evenement`),
KEY `oo_ce_individu` (`oo_ce_individu`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=97 ;
 
 
CREATE TABLE IF NOT EXISTS `ods_stations` (
`os_id_station` int(10) unsigned NOT NULL AUTO_INCREMENT,
`os_ce_participant` int(10) unsigned DEFAULT NULL,
`os_nom` varchar(255) DEFAULT NULL,
`os_ce_commune` int(10) unsigned DEFAULT NULL,
`os_latitude` float DEFAULT NULL,
`os_longitude` float DEFAULT NULL,
`os_altitude` float DEFAULT NULL,
`os_ce_environnement` int(10) unsigned DEFAULT NULL,
`os_commentaire` text,
PRIMARY KEY (`os_id_station`),
KEY `os_ce_participant` (`os_ce_participant`),
KEY `os_ce_commune` (`os_ce_commune`),
KEY `os_ce_environnement` (`os_ce_environnement`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC AUTO_INCREMENT=12 ;
 
 
-- --------------------------------------------------------
 
--
-- Structure de la table `ods_triples`
--
 
CREATE TABLE IF NOT EXISTS `ods_triples` (
`ot_id_triple` int(10) unsigned NOT NULL AUTO_INCREMENT,
`ot_cle` varchar(255) DEFAULT NULL,
`ot_ce_parent` int(10) unsigned DEFAULT NULL,
`ot_valeur` varchar(255) DEFAULT NULL,
`ot_description` text,
PRIMARY KEY (`ot_id_triple`),
KEY `ot_ce_parent` (`ot_ce_parent`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=36 ;
 
--
-- Contenu de la table `ods_triples`
--
 
INSERT INTO `ods_triples` (`ot_id_triple`, `ot_cle`, `ot_ce_parent`, `ot_valeur`, `ot_description`) VALUES
(1, 'type_espece', 0, 'Types d''especes', 'Liste des types d''especes'),
(2, 'type_espece_arbre', 1, 'arbre', 'Type d''espèce arbre'),
(3, 'type_espece_herbacee', 1, 'herbacée', 'Type d''espece herbacée'),
(4, 'type_espece_oiseau', 1, 'oiseau', 'Type d''espèce oiseau'),
(5, 'type_espece_insecte', 1, 'insecte', 'Type d''espèce insecte'),
(6, 'environnement', 0, 'Environnements', 'Liste des environnements'),
(7, 'environnement_ville', 6, 'ville', 'Environnement ville'),
(8, 'environnement_jardin_parc', 6, 'jardin/parc', 'Environnement jardin/parc'),
(9, 'environnement_foret', 6, 'forêt', 'Environnement forêt'),
(10, 'environnement_champ_prairie', 6, 'champ/prairie', 'Environnement champ/prairie'),
(11, 'environnement_village', 6, 'village', 'Environnement village'),
(12, 'evenement', 0, 'Evenements', 'Liste des évènements'),
(13, 'evenement_feuillaison_stade_11', 12, 'feuillaison stade 11', 'Evènement feuillaison stade 11'),
(14, 'evenement_feuillaison_stade_15', 12, 'feuillaison stade 15', 'Evènement feuillaison stade 15'),
(15, 'evenement_floraison_stade_61', 12, 'floraison stade 61', 'Evènement floraison stade 61'),
(16, 'evenement_floraison_stade_65', 12, 'floraison stade 65', 'Evènement floraison stade 65'),
(17, 'evenement_fructification_stade_85', 12, 'fructification stade 85', 'Evènement fructification stade 85'),
(18, 'evenement_senescence_stade_91', 12, 'sénescence stade 91', 'Evènement sénéscence stade 91'),
(19, 'evenement_senescence_stade_95', 12, 'sénescence stade 95', 'Evènement senescence stade 95'),
(20, 'evenement_1ere_apparition', 12, '1ere apparition', 'Evènement 1ere apparation'),
(21, 'niveau', 0, 'Niveaux', 'Liste des niveaux scolaires'),
(22, 'niveau_CP', 21, 'niveau CP', 'Niveau scolaire CP'),
(23, 'niveau_CE1', 21, 'niveau CE1', 'Niveau scolaire CE1'),
(24, 'niveau_CE2', 21, 'niveau CE1', 'Niveau scolaire CE2'),
(25, 'niveau_CM1', 21, 'niveau CM1', 'Niveau scolaire CM1'),
(26, 'niveau_CM2', 21, 'niveau CM2', 'Niveau scolaire CM2'),
(27, 'niveau_6eme', 21, 'niveau 6eme', 'Niveau scolaire 6eme'),
(28, 'niveau_5eme', 21, 'niveau 5eme', 'Niveau scolaire 5eme'),
(29, 'niveau_4eme', 21, 'niveau scolaire 4eme', 'Niveau 4eme'),
(30, 'niveau_3eme', 21, 'niveau 3eme', 'Niveau scolaire 3eme'),
(31, 'type_inscription', 0, 'types d''inscription', 'Liste des type d''inscription à ODS'),
(32, 'type_inscription_ma_classe', 31, 'ma classe', 'Type d''inscription ma classe'),
(33, 'type_inscription_mon_association', 31, 'mon association', 'Type d''inscription mon association'),
(34, 'type_inscription_mon_club', 31, 'mon club', 'Type d''inscription mon club'),
(35, 'type_inscription_mes_parents', 31, 'mes parents', 'Type d''inscription mes parents');
 
-- --------------------------------------------------------
 
--
-- Structure de la table `participants`
--
 
CREATE TABLE IF NOT EXISTS `participants` (
`id_participant` int(10) unsigned NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id_participant`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ;
 
--
-- Contenu de la table `participants`
--
/trunk/applications/doc/sql/ods_communes.sql
New file
0,0 → 1,43932
-- phpMyAdmin SQL Dump
-- version 3.3.9.2
-- http://www.phpmyadmin.net
--
-- Serveur: localhost
-- Généré le : Ven 18 Février 2011 à 12:09
-- Version du serveur: 5.1.32
-- Version de PHP: 5.2.17
 
SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO";
 
 
/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARACTER_SET_RESULTS */;
/*!40101 SET @OLD_COLLATION_CONNECTION=@@COLLATION_CONNECTION */;
/*!40101 SET NAMES utf8 */;
 
--
-- Base de données: `ods`
--
 
-- --------------------------------------------------------
 
--
-- Structure de la table `ods_communes`
--
 
CREATE TABLE IF NOT EXISTS `ods_communes` (
`oc_code_insee` varchar(5) NOT NULL DEFAULT '',
`oc_nom` text,
`oc_secteur` varchar(50) DEFAULT NULL,
`oc_x_utm` int(11) NOT NULL,
`oc_y_utm` int(11) NOT NULL,
`oc_latitude` float DEFAULT NULL,
`oc_longitude` float DEFAULT NULL,
`oc_altitude` int(10) NOT NULL,
PRIMARY KEY (`oc_code_insee`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
 
--
-- Contenu de la table `ods_communes`
--
 
INSERT INTO `ods_communes` (`oc_code_insee`, `oc_nom`, `oc_secteur`, `oc_x_utm`, `oc_y_utm`, `oc_latitude`, `oc_longitude`, `oc_altitude`) VALUES
('01001', 'L''Abergement-Clémenciat', '31T', 648196, 5112751, 46.1522, 4.91916, 257),
('01002', 'L''Abergement-de-Varey', '31T', 687659, 5097768, 46.0078, 5.42389, 367),
('01004', 'Ambérieu-en-Bugey', '31T', 682022, 5091854, 45.9561, 5.34889, 247),
('01005', 'Ambérieux-en-Dombes', '31T', 647453, 5095378, 45.9961, 4.90416, 293),
('01006', 'Ambléon', '31T', 702399, 5069596, 45.7503, 5.60222, 400),
('01007', 'Ambronay', '31T', 682669, 5097649, 46.0081, 5.35944, 250),
('01008', 'Ambutrix', '31T', 681560, 5089987, 45.9394, 5.34222, 270),
('01009', 'Andert-et-Condon', '31T', 706423, 5074764, 45.7956, 5.65611, 330),
('01010', 'Anglefort', '31T', 717841, 5088101, 45.9119, 5.80889, 250),
('01011', 'Apremont', '31T', 705465, 5120829, 46.21, 5.66361, 900),
('01012', 'Aranc', '31T', 694141, 5097691, 46.0053, 5.5075, 781),
('01013', 'Arandas', '31T', 693078, 5085548, 45.8964, 5.48889, 740),
('01014', 'Arbent', '31T', 706301, 5130374, 46.2956, 5.67862, 560),
('01015', 'Arbignieu', '31T', 706258, 5067375, 45.7292, 5.65084, 280),
('01016', 'Arbigny', '31T', 651345, 5148343, 46.4717, 4.97138, 200),
('01017', 'Argis', '31T', 693139, 5089813, 45.9347, 5.49139, 320),
('01019', 'Armix', '31T', 700811, 5080573, 45.8494, 5.58639, 721),
('01021', 'Ars-sur-Formans', '31T', 641046, 5095105, 45.995, 4.82139, 250),
('01022', 'Artemare', '31T', 709107, 5083598, 45.8742, 5.69444, 260),
('01023', 'Asnières-sur-Saône', '31T', 644757, 5138269, 46.3825, 4.88249, 174),
('01024', 'Attignat', '31T', 666462, 5128539, 46.29, 5.16111, 222),
('01025', 'Bâgé-la-Ville', '31T', 649768, 5130948, 46.3156, 4.94528, 210),
('01026', 'Bâgé-le-Châtel', '31T', 648547, 5130115, 46.3083, 4.92917, 205),
('01027', 'Balan', '31T', 663071, 5077736, 45.8339, 5.09972, 194),
('01028', 'Baneins', '31T', 647210, 5108249, 46.1119, 4.905, 240),
('01029', 'Beaupont', '31T', 674038, 5142125, 46.4103, 5.26444, 210),
('01030', 'Beauregard', '31T', 635603, 5096002, 46.0042, 4.75139, 180),
('01031', 'Bellignat', '31T', 702538, 5124347, 46.2425, 5.62722, 526),
('01032', 'Béligneux', '31T', 665281, 5081500, 45.8672, 5.12945, 250),
('01033', 'Bellegarde-sur-Valserine', '31T', 717776, 5110625, 46.1144, 5.81833, 350),
('01034', 'Belley', '31T', 709128, 5070807, 45.7592, 5.68917, 290),
('01035', 'Belleydoux', '31T', 713869, 5125876, 46.2528, 5.77472, 850),
('01036', 'Belmont-Luthézieu', '31T', 706580, 5084316, 45.8814, 5.66222, 429),
('01037', 'Bénonces', '31T', 692193, 5077921, 45.8281, 5.47445, 488),
('01038', 'Bény', '31T', 675714, 5132196, 46.3206, 5.2825, 230),
('01039', 'Béon', '31T', 713811, 5081750, 45.8561, 5.75416, 241),
('01040', 'Béréziat', '31T', 657186, 5137033, 46.3686, 5.04361, 210),
('01041', 'Bettant', '31T', 683380, 5090381, 45.9425, 5.36583, 260),
('01042', 'Bey', '31T', 642424, 5119191, 46.2114, 4.84639, 210),
('01043', 'Beynost', '31T', 655266, 5078215, 45.84, 4.99944, 190),
('01044', 'Billiat', '31T', 715171, 5106485, 46.0781, 5.78278, 551),
('01045', 'Birieux', '31T', 658158, 5090888, 45.9533, 5.04083, 285),
('01046', 'Biziat', '31T', 649908, 5119988, 46.2169, 4.94361, 210),
('01047', 'Blyes', '31T', 674680, 5079473, 45.8467, 5.24972, 210),
('01049', 'La Boisse', '31T', 657763, 5078494, 45.8419, 5.03167, 205),
('01050', 'Boissey', '31T', 653369, 5138326, 46.3811, 4.99444, 200),
('01051', 'Bolozon', '31T', 690929, 5118567, 46.1939, 5.47444, 310),
('01052', 'Bouligneux', '31T', 654043, 5098689, 46.0244, 4.99028, 283),
('01053', 'Bourg-en-Bresse', '31T', 671754, 5119265, 46.2053, 5.22639, 230),
('01054', 'Bourg-Saint-Christophe', '31T', 667729, 5084315, 45.8919, 5.16195, 250),
('01056', 'Boyeux-Saint-Jérôme', '31T', 689987, 5100465, 46.0314, 5.455, 540),
('01057', 'Boz', '31T', 646784, 5141066, 46.4072, 4.90972, 184),
('01058', 'Brégnier-Cordon', '31T', 704168, 5058501, 45.65, 5.62028, 226),
('01059', 'Brénaz', '31T', 711028, 5091819, 45.9475, 5.72278, 700),
('01060', 'Brénod', '31T', 701571, 5104171, 46.0614, 5.60611, 840),
('01061', 'Brens', '31T', 709763, 5066719, 45.7222, 5.69555, 253),
('01062', 'Bressolles', '31T', 662961, 5081933, 45.8717, 5.09973, 280),
('01063', 'Brion', '31T', 696962, 5116441, 46.1731, 5.55167, 480),
('01064', 'Briord', '31T', 691289, 5072920, 45.7833, 5.46083, 205),
('01065', 'Buellas', '31T', 664472, 5119713, 46.2111, 5.13222, 230),
('01066', 'La Burbanche', '31T', 698944, 5080204, 45.8467, 5.56222, 340),
('01067', 'Ceignes', '31T', 693028, 5110508, 46.1208, 5.49834, 630),
('01068', 'Cerdon', '31T', 690560, 5106260, 46.0833, 5.46472, 320),
('01069', 'Certines', '31T', 674917, 5111385, 46.1336, 5.26445, 250),
('01071', 'Cessy', '32T', 274557, 5133493, 46.3175, 6.07166, 540),
('01072', 'Ceyzériat', '31T', 679274, 5116608, 46.1794, 5.32278, 300),
('01073', 'Ceyzérieu', '31T', 711775, 5079424, 45.8358, 5.72694, 270),
('01074', 'Chalamont', '31T', 668188, 5095940, 45.9964, 5.17194, 300),
('01075', 'Chaleins', '31T', 639597, 5099240, 46.0325, 4.80389, 240),
('01076', 'Chaley', '31T', 696213, 5092103, 45.9544, 5.53194, 440),
('01077', 'Challes-la-Montagne', '31T', 690305, 5111040, 46.1264, 5.46334, 500),
('01078', 'Challex', '31T', 729585, 5118411, 46.1806, 5.97472, 490),
('01079', 'Champagne-en-Valromey', '31T', 707830, 5086922, 45.9044, 5.67944, 0),
('01080', 'Champdor', '31T', 700910, 5099391, 46.0186, 5.59555, 826),
('01081', 'Champfromier', '31T', 716898, 5119648, 46.1958, 5.81111, 700),
('01082', 'Chanay', '31T', 715471, 5098524, 46.0064, 5.78306, 490),
('01083', 'Chaneins', '31T', 643081, 5106608, 46.0981, 4.8511, 260),
('01084', 'Chanoz-Châtenay', '31T', 656426, 5116600, 46.185, 5.02695, 257),
('01085', 'La Chapelle-du-Châtelard', '31T', 656621, 5103881, 46.0706, 5.02527, 275),
('01087', 'Charix', '31T', 706977, 5117976, 46.1839, 5.68194, 780),
('01088', 'Charnoz-sur-Ain', '31T', 672576, 5082193, 45.8717, 5.22361, 229),
('01089', 'Château-Gaillard', '31T', 678460, 5093603, 45.9728, 5.30361, 230),
('01090', 'Châtenay', '31T', 670283, 5100352, 46.0356, 5.20055, 300),
('01091', 'Châtillon-en-Michaille', '31T', 716049, 5113901, 46.1444, 5.7975, 540),
('01092', 'Châtillon-la-Palud', '31T', 674301, 5093670, 45.9744, 5.24999, 312),
('01093', 'Châtillon-sur-Chalaronne', '31T', 651111, 5109425, 46.1217, 4.95583, 230),
('01094', 'Chavannes-sur-Reyssouze', '31T', 652999, 5143690, 46.4294, 4.99139, 183),
('01095', 'Chavannes-sur-Suran', '31T', 686875, 5126257, 46.2642, 5.425, 320),
('01096', 'Chaveyriat', '31T', 658978, 5118271, 46.1994, 5.06056, 245),
('01097', 'Chavornay', '31T', 710783, 5084458, 45.8814, 5.71639, 431),
('01098', 'Chazey-Bons', '31T', 708423, 5075696, 45.8033, 5.68222, 236),
('01099', 'Chazey-sur-Ain', '31T', 675008, 5084671, 45.8933, 5.25583, 230),
('01100', 'Cheignieu-la-Balme', '31T', 702617, 5078160, 45.8272, 5.60862, 343),
('01101', 'Chevillard', '31T', 699420, 5109507, 46.11, 5.58056, 841),
('01102', 'Chevroux', '31T', 649697, 5138172, 46.3806, 4.94667, 200),
('01103', 'Chevry', '32T', 271864, 5129606, 46.2817, 6.03862, 490),
('01104', 'Chézery-Forens', '31T', 720930, 5122697, 46.2219, 5.86473, 600),
('01105', 'Civrieux', '31T', 645950, 5087036, 45.9214, 4.88222, 290),
('01106', 'Cize', '31T', 688595, 5119823, 46.2058, 5.44472, 321),
('01107', 'Cleyzieu', '31T', 688494, 5086642, 45.9075, 5.43028, 594),
('01108', 'Coligny', '31T', 680293, 5139435, 46.3844, 5.34472, 294),
('01109', 'Collonges', '31T', 724138, 5113574, 46.1389, 5.90195, 500),
('01110', 'Colomieu', '31T', 703972, 5067794, 45.7336, 5.62167, 330),
('01111', 'Conand', '31T', 691884, 5085109, 45.8928, 5.47334, 420),
('01112', 'Condamine', '31T', 697037, 5109430, 46.11, 5.54972, 580),
('01113', 'Condeissiat', '31T', 660468, 5113770, 46.1586, 5.07833, 240),
('01114', 'Confort', '31T', 717847, 5114676, 46.1508, 5.82111, 561),
('01115', 'Confrançon', '31T', 659122, 5125903, 46.2681, 5.065, 200),
('01116', 'Contrevoz', '31T', 704286, 5075991, 45.8072, 5.62916, 360),
('01117', 'Conzieu', '31T', 702828, 5067046, 45.7272, 5.60667, 350),
('01118', 'Corbonod', '31T', 717611, 5094613, 45.9706, 5.80889, 351),
('01119', 'Corcelles', '31T', 699143, 5101465, 46.0378, 5.57362, 843),
('01121', 'Corlier', '31T', 693232, 5100597, 46.0317, 5.49695, 780),
('01122', 'Cormaranche-en-Bugey', '31T', 702437, 5092211, 45.9536, 5.61222, 860),
('01123', 'Cormoranche-sur-Saône', '31T', 641085, 5122403, 46.2406, 4.83, 175),
('01124', 'Cormoz', '31T', 671294, 5146279, 46.4483, 5.23029, 210),
('01125', 'Corveissiat', '31T', 691291, 5124139, 46.2439, 5.48139, 460),
('01127', 'Courmangoux', '31T', 682263, 5133625, 46.3317, 5.36806, 290),
('01128', 'Courtes', '31T', 661102, 5147390, 46.4608, 5.09806, 210),
('01129', 'Crans', '31T', 671631, 5092112, 45.9611, 5.215, 310),
('01130', 'Cras-sur-Reyssouze', '31T', 666682, 5130645, 46.3089, 5.16472, 198),
('01133', 'Cressin-Rochefort', '31T', 714693, 5073098, 45.7781, 5.76166, 270),
('01134', 'Crottet', '31T', 645849, 5126591, 46.2772, 4.89306, 200),
('01135', 'Crozet', '32T', 269849, 5129589, 46.2808, 6.01251, 560),
('01136', 'Cruzilles-lès-Mépillat', '31T', 645002, 5120765, 46.225, 4.88028, 215),
('01138', 'Culoz', '31T', 716033, 5081178, 45.8503, 5.7825, 255),
('01139', 'Curciat-Dongalon', '31T', 665435, 5148927, 46.4736, 5.155, 216),
('01140', 'Curtafond', '31T', 660931, 5126352, 46.2717, 5.08861, 220),
('01141', 'Cuzieu', '31T', 708605, 5077370, 45.8183, 5.68528, 332),
('01142', 'Dagneux', '31T', 661316, 5079635, 45.8514, 5.07777, 195),
('01143', 'Divonne-les-Bains', '32T', 281862, 5139562, 46.3744, 6.16361, 490),
('01144', 'Dommartin', '31T', 653107, 5133471, 46.3375, 4.98945, 207),
('01145', 'Dompierre-sur-Veyle', '31T', 670446, 5104588, 46.0736, 5.20417, 285),
('01146', 'Dompierre-sur-Chalaronne', '31T', 646868, 5111762, 46.1436, 4.90167, 246),
('01147', 'Domsure', '31T', 676295, 5143148, 46.4189, 5.29417, 220),
('01148', 'Dortan', '31T', 704639, 5133284, 46.3222, 5.65833, 310),
('01149', 'Douvres', '31T', 683985, 5095371, 45.9872, 5.37555, 270),
('01150', 'Drom', '31T', 682423, 5121087, 46.2189, 5.36527, 325),
('01151', 'Druillat', '31T', 679081, 5103351, 46.0603, 5.31528, 270),
('01152', 'Échallon', '31T', 711225, 5121118, 46.2108, 5.73833, 750),
('01153', 'Échenevex', '32T', 272128, 5132656, 46.3092, 6.04056, 570),
('01154', 'Étrez', '31T', 668249, 5133592, 46.335, 5.18611, 220),
('01155', 'Évosges', '31T', 693719, 5092611, 45.9597, 5.5, 750),
('01156', 'Faramans', '31T', 665002, 5085477, 45.9031, 5.12722, 276),
('01157', 'Fareins', '31T', 636317, 5097777, 46.02, 4.76111, 197),
('01158', 'Farges', '31T', 724266, 5117101, 46.1706, 5.90527, 510),
('01159', 'Feillens', '31T', 645393, 5133127, 46.3361, 4.88917, 180),
('01160', 'Ferney-Voltaire', '32T', 277343, 5126499, 46.2556, 6.11111, 436),
('01162', 'Flaxieu', '31T', 712521, 5076576, 45.81, 5.73528, 285),
('01163', 'Foissiat', '31T', 667204, 5137362, 46.3692, 5.17388, 221),
('01165', 'Francheleins', '31T', 639813, 5103908, 46.0744, 4.80805, 216),
('01166', 'Frans', '31T', 637485, 5094592, 45.9911, 4.77528, 200),
('01167', 'Garnerans', '31T', 641967, 5118563, 46.2058, 4.84028, 205),
('01169', 'Genouilleux', '31T', 637939, 5108899, 46.1197, 4.78528, 180),
('01170', 'Géovreissiat', '31T', 697266, 5118335, 46.19, 5.55639, 550),
('01171', 'Géovreisset', '31T', 701610, 5125830, 46.2561, 5.61583, 650),
('01172', 'Germagnat', '31T', 688452, 5131403, 46.31, 5.4475, 340),
('01173', 'Gex', '32T', 273596, 5135290, 46.3333, 6.05833, 610),
('01174', 'Giron', '31T', 713760, 5122875, 46.2258, 5.77195, 1000),
('01175', 'Gorrevod', '31T', 649059, 5142388, 46.4186, 4.93972, 185),
('01176', 'Le Grand-Abergement', '31T', 706911, 5101444, 46.0353, 5.67389, 770),
('01177', 'Grand-Corent', '31T', 687630, 5119113, 46.1997, 5.43194, 490),
('01179', 'Grièges', '31T', 642610, 5124075, 46.2553, 4.85028, 185),
('01180', 'Grilly', '32T', 278030, 5134787, 46.3303, 6.11611, 510),
('01181', 'Groissiat', '31T', 700988, 5121947, 46.2214, 5.60611, 550),
('01182', 'Groslée', '31T', 699957, 5065501, 45.7142, 5.56917, 250),
('01183', 'Guéreins', '31T', 637415, 5107343, 46.1058, 4.77805, 180),
('01184', 'Hautecourt-Romanèche', '31T', 686664, 5114914, 46.1622, 5.41778, 360),
('01185', 'Hauteville-Lompnes', '31T', 701806, 5095033, 45.9792, 5.60528, 800),
('01186', 'Hostias', '31T', 696636, 5086247, 45.9017, 5.53499, 750),
('01187', 'Hotonnes', '31T', 708687, 5097302, 45.9975, 5.695, 736),
('01188', 'Illiat', '31T', 645801, 5116924, 46.1903, 4.88945, 217),
('01189', 'Injoux-Génissiat', '31T', 714170, 5104349, 46.0592, 5.76889, 550),
('01190', 'Innimond', '31T', 700077, 5073197, 45.7833, 5.57389, 880),
('01191', 'Izenave', '31T', 695397, 5101531, 46.0394, 5.52528, 690),
('01192', 'Izernore', '31T', 696900, 5121691, 46.2203, 5.55305, 466),
('01193', 'Izieu', '31T', 705908, 5058960, 45.6536, 5.64278, 388),
('01194', 'Jassans-Riottier', '31T', 636209, 5093885, 45.985, 4.75861, 173),
('01195', 'Jasseron', '31T', 679442, 5120381, 46.2133, 5.32639, 300),
('01196', 'Jayat', '31T', 662994, 5137310, 46.3697, 5.11917, 203),
('01197', 'Journans', '31T', 680112, 5112895, 46.1458, 5.33222, 300),
('01198', 'Joyeux', '31T', 662719, 5091932, 45.9617, 5.1, 290),
('01199', 'Jujurieux', '31T', 686340, 5101528, 46.0419, 5.40833, 300),
('01200', 'Labalme', '31T', 692064, 5107666, 46.0956, 5.48472, 590),
('01202', 'Lagnieu', '31T', 682110, 5085957, 45.9031, 5.34778, 220),
('01203', 'Laiz', '31T', 645885, 5123288, 46.2475, 4.8925, 185),
('01204', 'Lalleyriat', '31T', 709493, 5114693, 46.1536, 5.71306, 820),
('01205', 'Lancrans', '31T', 718737, 5112019, 46.1267, 5.83139, 490),
('01206', 'Lantenay', '31T', 696640, 5103702, 46.0586, 5.54222, 730),
('01207', 'Lapeyrouse', '31T', 653149, 5093973, 45.9822, 4.97722, 290),
('01208', 'Lavours', '31T', 715217, 5076700, 45.8103, 5.77, 235),
('01209', 'Léaz', '31T', 722796, 5109106, 46.0992, 5.8825, 490),
('01210', 'Lélex', '31T', 726497, 5132203, 46.3056, 5.94139, 889),
('01211', 'Lent', '31T', 669550, 5109783, 46.1206, 5.19445, 255),
('01212', 'Lescheroux', '31T', 664742, 5141434, 46.4064, 5.14333, 220),
('01213', 'Leyment', '31T', 678171, 5087942, 45.9219, 5.29778, 260),
('01214', 'Leyssard', '31T', 691079, 5114462, 46.1569, 5.47473, 570),
('01215', 'Lhôpital', '31T', 714913, 5100327, 46.0228, 5.77667, 490),
('01216', 'Lhuis', '31T', 697135, 5069179, 45.7481, 5.53444, 400),
('01218', 'Lochieu', '31T', 711523, 5089952, 45.9306, 5.72834, 610),
('01219', 'Lompnas', '31T', 695839, 5075317, 45.8036, 5.52028, 630),
('01221', 'Lompnieu', '31T', 706175, 5093200, 45.9614, 5.66083, 660),
('01224', 'Loyettes', '31T', 671620, 5071511, 45.7758, 5.2075, 192),
('01225', 'Lurcy', '31T', 637926, 5102754, 46.0644, 4.78333, 208),
('01227', 'Magnieu', '31T', 711415, 5072862, 45.7769, 5.71944, 274),
('01228', 'Maillat', '31T', 695973, 5111806, 46.1317, 5.53695, 510),
('01229', 'Malafretaz', '31T', 665136, 5132426, 46.3253, 5.14528, 219),
('01230', 'Mantenay-Montlin', '31T', 661211, 5143254, 46.4236, 5.09805, 200),
('01231', 'Manziat', '31T', 646716, 5135907, 46.3608, 4.90722, 200),
('01232', 'Marboz', '31T', 673526, 5134605, 46.3428, 5.25499, 233),
('01233', 'Marchamp', '31T', 697601, 5073581, 45.7875, 5.54223, 568),
('01234', 'Marignieu', '31T', 711383, 5075085, 45.7969, 5.72, 351),
('01235', 'Marlieux', '31T', 660070, 5103506, 46.0664, 5.06972, 270),
('01236', 'Marsonnas', '31T', 659337, 5134063, 46.3414, 5.07055, 215),
('01237', 'Martignat', '31T', 701205, 5120564, 46.2089, 5.60833, 510),
('01238', 'Massieux', '31T', 642275, 5085653, 45.9097, 4.83444, 210),
('01239', 'Massignieu-de-Rives', '31T', 715192, 5070551, 45.755, 5.76694, 279),
('01240', 'Matafelon-Granges', '31T', 696753, 5126259, 46.2614, 5.55305, 460),
('01241', 'Meillonnas', '31T', 681220, 5124048, 46.2458, 5.35083, 270),
('01242', 'Mérignat', '31T', 688482, 5104620, 46.0692, 5.43722, 430),
('01243', 'Messimy-sur-Saône', '31T', 636480, 5101116, 46.05, 4.76417, 190),
('01244', 'Meximieux', '31T', 670190, 5085772, 45.9044, 5.19416, 220),
('01245', 'Bohas-Meyriat-Rignat', '31T', 684622, 5112164, 46.1381, 5.39028, 300),
('01246', 'Mézériat', '31T', 657893, 5122103, 46.2342, 5.04778, 204),
('01247', 'Mijoux', '31T', 730324, 5139177, 46.3669, 5.99444, 990),
('01248', 'Mionnay', '31T', 649897, 5084259, 45.8956, 4.93222, 280),
('01249', 'Miribel', '31T', 651810, 5076554, 45.8258, 4.95444, 180),
('01250', 'Misérieux', '31T', 640325, 5092741, 45.9739, 4.81139, 240),
('01252', 'Mogneneins', '31T', 639879, 5111382, 46.1417, 4.81111, 210),
('01254', 'Montagnat', '31T', 676362, 5115658, 46.1717, 5.28473, 262),
('01255', 'Montagnieu', '31T', 692032, 5074055, 45.7933, 5.47084, 320),
('01257', 'Montanges', '31T', 716227, 5116163, 46.1647, 5.80083, 604),
('01258', 'Montceaux', '31T', 638852, 5106511, 46.0981, 4.79639, 216),
('01259', 'Montcet', '31T', 662858, 5119948, 46.2136, 5.11139, 245),
('01260', 'Le Montellier', '31T', 660786, 5088392, 45.9303, 5.07388, 290),
('01261', 'Monthieux', '31T', 650361, 5090878, 45.955, 4.94028, 290),
('01262', 'Montluel', '31T', 659762, 5079657, 45.8519, 5.05778, 199),
('01263', 'Montmerle-sur-Saône', '31T', 635883, 5104746, 46.0828, 4.75749, 180),
('01264', 'Montracol', '31T', 663717, 5118304, 46.1986, 5.12195, 230),
('01265', 'Montréal-la-Cluse', '31T', 698131, 5118116, 46.1878, 5.5675, 500),
('01266', 'Montrevel-en-Bresse', '31T', 663756, 5133624, 46.3364, 5.12778, 210),
('01267', 'Nurieux-Volognat', '31T', 694226, 5118794, 46.195, 5.51722, 482),
('01268', 'Murs-et-Gélignieux', '31T', 707502, 5057931, 45.6439, 5.66278, 230),
('01269', 'Nantua', '31T', 701165, 5114600, 46.1553, 5.60528, 478),
('01271', 'Nattages', '31T', 715089, 5067921, 45.7314, 5.76445, 310),
('01272', 'Neuville-les-Dames', '31T', 654625, 5114022, 46.1622, 5.00278, 228),
('01273', 'Neuville-sur-Ain', '31T', 683255, 5106161, 46.0844, 5.37028, 290),
('01274', 'Les Neyrolles', '31T', 703733, 5112923, 46.1394, 5.63778, 510),
('01275', 'Neyron', '31T', 649834, 5075271, 45.8147, 4.92861, 190),
('01276', 'Niévroz', '31T', 660373, 5076893, 45.8269, 5.06472, 184),
('01277', 'Nivollet-Montgriffon', '31T', 689415, 5095969, 45.9911, 5.44583, 598),
('01279', 'Oncieu', '31T', 691660, 5092331, 45.9578, 5.47334, 460),
('01280', 'Ordonnaz', '31T', 697167, 5079066, 45.8369, 5.53889, 800),
('01281', 'Ornex', '32T', 276338, 5128328, 46.2717, 6.09722, 476),
('01282', 'Outriaz', '31T', 697058, 5104735, 46.0678, 5.54805, 704),
('01283', 'Oyonnax', '31T', 704590, 5126454, 46.2608, 5.65472, 540),
('01284', 'Ozan', '31T', 647210, 5139347, 46.3917, 4.91472, 190),
('01285', 'Parcieux', '31T', 641592, 5086317, 45.9158, 4.82583, 190),
('01286', 'Parves', '31T', 713312, 5069250, 45.7439, 5.74222, 500),
('01288', 'Péron', '31T', 725602, 5119313, 46.19, 5.92361, 530),
('01289', 'Péronnas', '31T', 669595, 5116703, 46.1828, 5.1975, 238),
('01290', 'Pérouges', '31T', 669185, 5085466, 45.9019, 5.18111, 270),
('01291', 'Perrex', '31T', 652531, 5123110, 46.2444, 4.97861, 200),
('01292', 'Le Petit-Abergement', '31T', 705976, 5101103, 46.0325, 5.66167, 785),
('01293', 'Peyriat', '31T', 693765, 5114361, 46.1553, 5.50944, 630),
('01294', 'Peyrieu', '31T', 708475, 5061887, 45.6792, 5.67694, 243),
('01295', 'Peyzieux-sur-Saône', '31T', 640363, 5109942, 46.1286, 4.81694, 228),
('01296', 'Pirajoux', '31T', 676680, 5137970, 46.3722, 5.29722, 231),
('01297', 'Pizay', '31T', 662180, 5083735, 45.8881, 5.09028, 285),
('01298', 'Plagne', '31T', 710391, 5119174, 46.1936, 5.72666, 770),
('01299', 'Le Plantay', '31T', 661589, 5098883, 46.0244, 5.08778, 275),
('01300', 'Le Poizat', '31T', 708043, 5113748, 46.1456, 5.69388, 890),
('01301', 'Polliat', '31T', 663906, 5124053, 46.2503, 5.12639, 226),
('01302', 'Pollieu', '31T', 713227, 5075519, 45.8003, 5.74389, 280),
('01303', 'Poncin', '31T', 686079, 5106586, 46.0875, 5.40694, 260),
('01304', 'Pont-d''Ain', '31T', 680637, 5102346, 46.0508, 5.335, 250),
('01305', 'Pont-de-Vaux', '31T', 648806, 5144019, 46.4333, 4.93695, 175),
('01306', 'Pont-de-Veyle', '31T', 645477, 5125100, 46.2639, 4.88777, 175),
('01307', 'Port', '31T', 698520, 5115379, 46.1631, 5.57139, 480),
('01308', 'Pougny', '31T', 727853, 5113618, 46.1381, 5.95, 410),
('01309', 'Pouillat', '31T', 686853, 5133269, 46.3272, 5.4275, 360),
('01310', 'Prémeyzel', '31T', 706208, 5062337, 45.6839, 5.64806, 340),
('01311', 'Prémillieu', '31T', 699578, 5083314, 45.8744, 5.57167, 896),
('01312', 'Pressiat', '31T', 683531, 5132736, 46.3233, 5.38417, 330),
('01313', 'Prévessin-Moëns', '32T', 275067, 5126397, 46.2539, 6.08167, 470),
('01314', 'Priay', '31T', 677111, 5097085, 46.0044, 5.2875, 240),
('01316', 'Pugieu', '31T', 705789, 5077585, 45.8211, 5.64916, 245),
('01317', 'Ramasse', '31T', 681687, 5118440, 46.1953, 5.35472, 340),
('01318', 'Rancé', '31T', 644868, 5091827, 45.9647, 4.86972, 280),
('01319', 'Relevant', '31T', 650725, 5105895, 46.09, 4.94972, 270),
('01320', 'Replonges', '31T', 645270, 5130221, 46.31, 4.88667, 186),
('01321', 'Revonnas', '31T', 679927, 5114836, 46.1633, 5.33056, 320),
('01322', 'Reyrieux', '31T', 641522, 5088446, 45.935, 4.82556, 210),
('01323', 'Reyssouze', '31T', 647505, 5143925, 46.4328, 4.92, 190),
('01325', 'Rignieux-le-Franc', '31T', 669801, 5089745, 45.9403, 5.19056, 270),
('01328', 'Romans', '31T', 656155, 5109551, 46.1217, 5.02111, 265),
('01329', 'Rossillon', '31T', 701607, 5078653, 45.8319, 5.59583, 360),
('01330', 'Ruffieu', '31T', 706273, 5096726, 45.9931, 5.66361, 740),
('01331', 'Saint-Alban', '31T', 689680, 5107623, 46.0958, 5.45389, 520),
('01332', 'Saint-André-de-Bâgé', '31T', 648197, 5129520, 46.3031, 4.92444, 200),
('01333', 'Saint-André-de-Corcy', '31T', 651494, 5087694, 45.9261, 4.95388, 290),
('01334', 'Saint-André-d''Huiriat', '31T', 647324, 5119586, 46.2139, 4.91, 200),
('01335', 'Saint-André-le-Bouchoux', '31T', 660586, 5109264, 46.1181, 5.07833, 268),
('01336', 'Saint-André-sur-Vieux-Jonc', '31T', 665620, 5113753, 46.1572, 5.145, 250),
('01337', 'Saint-Bénigne', '31T', 651264, 5144759, 46.4394, 4.96917, 211),
('01338', 'Saint-Benoît', '31T', 701431, 5063416, 45.695, 5.58722, 210),
('01339', 'Saint-Bernard', '31T', 634414, 5089337, 45.9444, 4.73416, 180),
('01340', 'Saint-Bois', '31T', 705688, 5064297, 45.7017, 5.64222, 310),
('01341', 'Saint-Champ', '31T', 712613, 5072625, 45.7744, 5.73473, 340),
('01342', 'Sainte-Croix', '31T', 659319, 5084309, 45.8939, 5.05362, 250),
('01343', 'Saint-Cyr-sur-Menthon', '31T', 651798, 5126736, 46.2772, 4.97028, 205),
('01344', 'Saint-Denis-lès-Bourg', '31T', 668781, 5118997, 46.2036, 5.18778, 230),
('01345', 'Saint-Denis-en-Bugey', '31T', 680494, 5091067, 45.9494, 5.32889, 245),
('01346', 'Saint-Didier-d''Aussiat', '31T', 658755, 5130156, 46.3064, 5.06167, 217),
('01347', 'Saint-Didier-de-Formans', '31T', 638026, 5090621, 45.9553, 4.78111, 210),
('01348', 'Saint-Didier-sur-Chalaronne', '31T', 640300, 5115530, 46.1789, 4.81778, 179),
('01349', 'Saint-Éloi', '31T', 666849, 5088954, 45.9339, 5.15223, 290),
('01350', 'Saint-Étienne-du-Bois', '31T', 676611, 5128546, 46.2875, 5.29277, 240),
('01351', 'Saint-Étienne-sur-Chalaronne', '31T', 643983, 5112126, 46.1475, 4.86444, 195),
('01352', 'Saint-Étienne-sur-Reyssouze', '31T', 653749, 5141918, 46.4133, 5.00056, 197),
('01353', 'Sainte-Euphémie', '31T', 639424, 5092629, 45.9731, 4.79973, 210),
('01354', 'Saint-Genis-Pouilly', '32T', 270356, 5125429, 46.2436, 6.0211, 450),
('01355', 'Saint-Genis-sur-Menthon', '31T', 654652, 5127364, 46.2822, 5.0075, 200),
('01356', 'Saint-Georges-sur-Renon', '31T', 656925, 5107996, 46.1075, 5.03056, 263),
('01357', 'Saint-Germain-de-Joux', '31T', 711109, 5117653, 46.1797, 5.73528, 530),
('01358', 'Saint-Germain-les-Paroisses', '31T', 703633, 5072200, 45.7733, 5.61917, 390),
('01359', 'Saint-Germain-sur-Renon', '31T', 659017, 5105178, 46.0817, 5.05667, 270),
('01360', 'Saint-Jean-de-Gonville', '31T', 727437, 5121916, 46.2128, 5.94861, 510),
('01361', 'Saint-Jean-de-Niost', '31T', 672307, 5078665, 45.84, 5.21889, 220),
('01362', 'Saint-Jean-de-Thurigneux', '31T', 646001, 5090372, 45.9514, 4.88389, 285),
('01363', 'Saint-Jean-le-Vieux', '31T', 684683, 5100118, 46.0297, 5.38639, 260),
('01364', 'Saint-Jean-sur-Reyssouze', '31T', 658535, 5140218, 46.3969, 5.06222, 207),
('01365', 'Saint-Jean-sur-Veyle', '31T', 647567, 5124594, 46.2589, 4.91472, 180),
('01366', 'Sainte-Julie', '31T', 676849, 5084414, 45.8906, 5.27945, 225),
('01367', 'Saint-Julien-sur-Reyssouze', '31T', 662021, 5140928, 46.4025, 5.10778, 188),
('01368', 'Saint-Julien-sur-Veyle', '31T', 650782, 5118434, 46.2028, 4.95444, 210),
('01369', 'Saint-Just', '31T', 675745, 5117710, 46.1903, 5.2775, 255),
('01370', 'Saint-Laurent-sur-Saône', '31T', 641625, 5129580, 46.305, 4.83916, 173),
('01371', 'Saint-Marcel', '31T', 653953, 5090225, 45.9483, 4.98639, 285),
('01372', 'Saint-Martin-de-Bavel', '31T', 707884, 5080807, 45.8494, 5.67749, 323),
('01373', 'Saint-Martin-du-Frêne', '31T', 697059, 5112767, 46.14, 5.55139, 520),
('01374', 'Saint-Martin-du-Mont', '31T', 679950, 5108164, 46.1033, 5.32833, 357),
('01375', 'Saint-Martin-le-Châtel', '31T', 663039, 5127613, 46.2825, 5.11639, 221),
('01376', 'Saint-Maurice-de-Beynost', '31T', 653578, 5077555, 45.8344, 4.97751, 200),
('01378', 'Saint-Maurice-de-Gourdans', '31T', 670550, 5076609, 45.8219, 5.19555, 205),
('01379', 'Saint-Maurice-de-Rémens', '31T', 676463, 5091878, 45.9578, 5.27722, 234),
('01380', 'Saint-Nizier-le-Bouchoux', '31T', 664988, 5147340, 46.4594, 5.14862, 210),
('01381', 'Saint-Nizier-le-Désert', '31T', 666092, 5102616, 46.0569, 5.14722, 281),
('01382', 'Sainte-Olive', '31T', 649148, 5098291, 46.0219, 4.92695, 291),
('01383', 'Saint-Paul-de-Varax', '31T', 664399, 5107234, 46.0989, 5.12694, 260),
('01384', 'Saint-Rambert-en-Bugey', '31T', 688920, 5091042, 45.9469, 5.4375, 300),
('01385', 'Saint-Rémy', '31T', 667151, 5117408, 46.1897, 5.16611, 250),
('01386', 'Saint-Sorlin-en-Bugey', '31T', 684264, 5083858, 45.8836, 5.37472, 200),
('01387', 'Saint-Sulpice', '31T', 657109, 5131719, 46.3208, 5.04083, 215),
('01388', 'Saint-Trivier-de-Courtes', '31T', 659826, 5147202, 46.4594, 5.08139, 215),
('01389', 'Saint-Trivier-sur-Moignans', '31T', 646733, 5103946, 46.0733, 4.8975, 254),
('01390', 'Saint-Vulbas', '31T', 678086, 5078149, 45.8339, 5.29306, 207),
('01391', 'Salavre', '31T', 680529, 5137249, 46.3647, 5.34694, 240),
('01392', 'Samognat', '31T', 698498, 5125975, 46.2583, 5.57555, 430),
('01393', 'Sandrans', '31T', 653114, 5103175, 46.065, 4.97973, 280),
('01396', 'Sault-Brénaz', '31T', 686161, 5081753, 45.8642, 5.39834, 210),
('01397', 'Sauverny', '32T', 277888, 5133216, 46.3161, 6.11501, 480),
('01398', 'Savigneux', '31T', 643134, 5096017, 46.0028, 4.84861, 260),
('01399', 'Ségny', '32T', 274795, 5131228, 46.2972, 6.07584, 486),
('01400', 'Seillonnaz', '31T', 693520, 5075522, 45.8061, 5.49055, 540),
('01401', 'Sergy', '31T', 730721, 5126427, 46.2522, 5.99334, 472),
('01402', 'Sermoyer', '31T', 651894, 5151136, 46.4967, 4.97944, 197),
('01403', 'Serrières-de-Briord', '31T', 690685, 5075682, 45.8083, 5.45416, 230),
('01404', 'Serrières-sur-Ain', '31T', 689286, 5114129, 46.1544, 5.45139, 320),
('01405', 'Servas', '31T', 667191, 5111232, 46.1342, 5.16445, 265),
('01406', 'Servignat', '31T', 658918, 5144367, 46.4342, 5.06861, 210),
('01407', 'Seyssel', '31T', 719338, 5093314, 45.9583, 5.83055, 260),
('01408', 'Simandre-sur-Suran', '31T', 686278, 5121945, 46.2256, 5.41555, 310),
('01409', 'Songieu', '31T', 709423, 5094638, 45.9733, 5.70333, 730),
('01410', 'Sonthonnax-la-Montagne', '31T', 694602, 5123162, 46.2342, 5.52389, 670),
('01411', 'Souclin', '31T', 687649, 5083219, 45.8769, 5.41806, 600),
('01412', 'Sulignat', '31T', 651599, 5115737, 46.1783, 4.96416, 260),
('01413', 'Surjoux', '31T', 716797, 5100610, 46.0247, 5.80111, 370),
('01414', 'Sutrieu', '31T', 706044, 5091960, 45.9503, 5.65861, 610),
('01415', 'Talissieu', '31T', 710456, 5083272, 45.8708, 5.71166, 250),
('01416', 'Tenay', '31T', 694681, 5088069, 45.9186, 5.51055, 327),
('01417', 'Thézillieu', '31T', 701470, 5085507, 45.8936, 5.59694, 870),
('01418', 'Thil', '31T', 657082, 5075543, 45.8156, 5.02194, 178),
('01419', 'Thoiry', '31T', 729609, 5124624, 46.2364, 5.97805, 480),
('01420', 'Thoissey', '31T', 639069, 5114915, 46.1736, 4.80166, 177),
('01421', 'Torcieu', '31T', 685797, 5088105, 45.9214, 5.39611, 262),
('01422', 'Tossiat', '31T', 678816, 5112425, 46.1419, 5.31527, 267),
('01423', 'Toussieux', '31T', 641649, 5091351, 45.9611, 4.82806, 238),
('01424', 'Tramoyes', '31T', 652724, 5082413, 45.8783, 4.96806, 300),
('01425', 'La Tranclière', '31T', 674621, 5108968, 46.1119, 5.25973, 275),
('01426', 'Treffort-Cuisiat', '31T', 682481, 5127051, 46.2725, 5.36833, 300),
('01427', 'Trévoux', '31T', 637564, 5089128, 45.9419, 4.77472, 170),
('01428', 'Valeins', '31T', 644523, 5108340, 46.1133, 4.87028, 260),
('01429', 'Vandeins', '31T', 660276, 5120312, 46.2175, 5.07806, 240),
('01430', 'Varambon', '31T', 679095, 5101374, 46.0425, 5.31472, 250),
('01431', 'Vaux-en-Bugey', '31T', 682652, 5088753, 45.9281, 5.35583, 277),
('01432', 'Verjon', '31T', 680868, 5135189, 46.3461, 5.35055, 230),
('01433', 'Vernoux', '31T', 661898, 5149542, 46.48, 5.10917, 212),
('01434', 'Versailleux', '31T', 663073, 5094011, 45.9803, 5.10527, 296),
('01435', 'Versonnex', '32T', 276487, 5131815, 46.3031, 6.0975, 479),
('01436', 'Vesancy', '32T', 276115, 5136835, 46.3481, 6.09028, 660),
('01437', 'Vescours', '31T', 655437, 5148539, 46.4725, 5.02472, 208),
('01439', 'Vésines', '31T', 643556, 5135739, 46.36, 4.86611, 172),
('01441', 'Vieu-d''Izenave', '31T', 695546, 5106324, 46.0825, 5.52917, 650),
('01442', 'Vieu', '31T', 708114, 5086190, 45.8978, 5.68278, 520),
('01443', 'Villars-les-Dombes', '31T', 657110, 5096512, 46.0042, 5.02916, 278),
('01444', 'Villebois', '31T', 689108, 5079958, 45.8472, 5.43556, 240),
('01445', 'Villemotier', '31T', 678565, 5134967, 46.3447, 5.32056, 238),
('01446', 'Villeneuve', '31T', 642135, 5098280, 46.0233, 4.83639, 270),
('01447', 'Villereversure', '31T', 683777, 5117421, 46.1856, 5.38139, 290),
('01448', 'Villes', '31T', 715273, 5107848, 46.0903, 5.78472, 547),
('01449', 'Villette-sur-Ain', '31T', 675757, 5095502, 45.9906, 5.26945, 250),
('01450', 'Villieu-Loyes-Mollon', '31T', 672428, 5087502, 45.9194, 5.22362, 226),
('01451', 'Viriat', '31T', 670788, 5124674, 46.2542, 5.21583, 227),
('01452', 'Virieu-le-Grand', '31T', 705879, 5080740, 45.8494, 5.65167, 270),
('01453', 'Virieu-le-Petit', '31T', 711392, 5087475, 45.9083, 5.72556, 635),
('01454', 'Virignin', '31T', 711101, 5066208, 45.7172, 5.7125, 225),
('01456', 'Vongnes', '31T', 711722, 5077167, 45.8156, 5.72527, 320),
('01457', 'Vonnas', '31T', 653629, 5120358, 46.2194, 4.99195, 192),
('02001', 'Abbécourt', '31T', 513108, 5493649, 49.5953, 3.18138, 40),
('02002', 'Achery', '31T', 528188, 5504454, 49.6919, 3.39083, 55),
('02003', 'Acy', '31T', 529922, 5465891, 49.345, 3.41195, 140),
('02004', 'Agnicourt-et-Séchelles', '31T', 568722, 5507627, 49.7172, 3.95333, 108),
('02005', 'Aguilcourt', '31T', 570148, 5473022, 49.4058, 3.96695, 56),
('02006', 'Aisonville-et-Bernoville', '31T', 537556, 5531535, 49.935, 3.52333, 155),
('02007', 'Aizelles', '31T', 558864, 5482185, 49.4894, 3.81278, 86),
('02008', 'Aizy-Jouy', '31T', 537480, 5476036, 49.4358, 3.51695, 90),
('02009', 'Alaincourt', '31T', 527146, 5512602, 49.7653, 3.37695, 62),
('02010', 'Allemant', '31T', 532770, 5478785, 49.4608, 3.45222, 100),
('02011', 'Ambleny', '31T', 513267, 5469747, 49.3803, 3.18278, 50),
('02012', 'Ambrief', '31T', 529191, 5463045, 49.3194, 3.40167, 140),
('02013', 'Amifontaine', '31T', 566515, 5481686, 49.4842, 3.91833, 70),
('02014', 'Amigny-Rouy', '31T', 521895, 5495129, 49.6083, 3.30306, 95),
('02015', 'Ancienville', '31T', 515576, 5451595, 49.2169, 3.21388, 130),
('02016', 'Andelain', '31T', 526854, 5498826, 49.6414, 3.37195, 84),
('02017', 'Anguilcourt-le-Sart', '31T', 531355, 5504255, 49.69, 3.43472, 54),
('02018', 'Anizy-le-Château', '31T', 532701, 5483726, 49.5053, 3.45167, 70),
('02019', 'Annois', '31T', 512935, 5507577, 49.7206, 3.17945, 67),
('02020', 'Any-Martin-Rieux', '31T', 587687, 5526188, 49.8817, 4.22055, 220),
('02021', 'Archon', '31T', 580535, 5510508, 49.7417, 4.11777, 180),
('02022', 'Arcy-Sainte-Restitue', '31T', 533779, 5455598, 49.2522, 3.46417, 131),
('02023', 'Armentières-sur-Ourcq', '31T', 528117, 5447846, 49.1828, 3.38583, 116),
('02024', 'Arrancy', '31T', 554616, 5482449, 49.4922, 3.75417, 120),
('02025', 'Artemps', '31T', 513723, 5512489, 49.7647, 3.19055, 77),
('02026', 'Artonges', '31T', 540569, 5419822, 48.93, 3.55388, 170),
('02027', 'Assis-sur-Serre', '31T', 540313, 5504005, 49.6872, 3.55889, 65),
('02028', 'Athies-sous-Laon', '31T', 549384, 5491480, 49.5739, 3.68306, 70),
('02029', 'Attilly', '31T', 509564, 5522857, 49.8581, 3.13306, 110),
('02030', 'Aubencheul-aux-Bois', '31T', 518981, 5541753, 50.0278, 3.265, 137),
('02031', 'Aubenton', '31T', 586467, 5521381, 49.8386, 4.2025, 180),
('02032', 'Aubigny-aux-Kaisnes', '31T', 508400, 5513590, 49.7747, 3.11666, 85),
('02033', 'Aubigny-en-Laonnois', '31T', 557365, 5483096, 49.4978, 3.79222, 143),
('02034', 'Audignicourt', '31T', 509759, 5480548, 49.4775, 3.13472, 80),
('02035', 'Audigny', '31T', 546609, 5524440, 49.8706, 3.64862, 140),
('02036', 'Augy', '31T', 537392, 5465226, 49.3386, 3.51472, 70),
('02037', 'Aulnois-sous-Laon', '31T', 543443, 5495938, 49.6144, 3.60138, 72),
('02038', 'Les Autels', '31T', 588178, 5513222, 49.765, 4.22444, 217),
('02039', 'Autremencourt', '31T', 556682, 5506159, 49.7053, 3.78612, 100),
('02040', 'Autreppes', '31T', 561397, 5528295, 49.9039, 3.855, 130),
('02041', 'Autreville', '31T', 517368, 5492549, 49.5853, 3.24028, 66),
('02042', 'Azy-sur-Marne', '31T', 526737, 5427613, 49.0008, 3.36555, 70),
('02043', 'Bagneux', '31T', 520251, 5478384, 49.4578, 3.27944, 80),
('02044', 'Bancigny', '31T', 574379, 5517123, 49.8019, 4.03361, 170),
('02046', 'Barenton-Bugny', '31T', 547037, 5498099, 49.6336, 3.65139, 68),
('02047', 'Barenton-Cel', '31T', 547067, 5499180, 49.6433, 3.65194, 69),
('02048', 'Barenton-sur-Serre', '31T', 549245, 5502288, 49.6711, 3.68249, 73),
('02049', 'Barisis', '31T', 524157, 5491958, 49.5797, 3.33417, 70),
('02050', 'Barzy-en-Thiérache', '31T', 553484, 5543561, 50.0419, 3.74694, 165),
('02051', 'Barzy-sur-Marne', '31T', 540403, 5437114, 49.0856, 3.55334, 80),
('02052', 'Bassoles-Aulers', '31T', 527599, 5486260, 49.5283, 3.38138, 130),
('02053', 'Baulne-en-Brie', '31T', 545034, 5426280, 48.9878, 3.61555, 100),
('02054', 'Bazoches-sur-Vesles', '31T', 544947, 5461793, 49.3072, 3.61833, 60),
('02055', 'Beaumé', '31T', 582592, 5521289, 49.8383, 4.14861, 180),
('02056', 'Beaumont-en-Beine', '31T', 509517, 5504204, 49.6903, 3.13195, 106),
('02057', 'Beaurevoir', '31T', 522218, 5538460, 49.9981, 3.31, 150),
('02058', 'Beaurieux', '31T', 553718, 5471415, 49.3931, 3.74027, 81),
('02059', 'Beautor', '31T', 524662, 5500206, 49.6539, 3.34167, 51),
('02060', 'Beauvois-en-Vermandois', '31T', 507610, 5520723, 49.8389, 3.10583, 92),
('02061', 'Becquigny', '31T', 533594, 5540311, 50.0142, 3.46889, 157),
('02062', 'Belleau', '31T', 521480, 5436700, 49.0828, 3.29416, 123),
('02063', 'Bellenglise', '31T', 517706, 5530043, 49.9225, 3.24666, 95),
('02064', 'Belleu', '31T', 524790, 5467409, 49.3589, 3.34139, 67),
('02065', 'Bellicourt', '31T', 516855, 5534364, 49.9614, 3.235, 121),
('02066', 'Benay', '31T', 522047, 5512023, 49.7603, 3.30611, 110),
('02067', 'Bergues-sur-Sambre', '31T', 550530, 5542606, 50.0336, 3.70556, 150),
('02068', 'Berlancourt', '31T', 554555, 5514415, 49.7797, 3.75778, 150),
('02069', 'Berlise', '31T', 579881, 5501942, 49.6647, 4.10694, 130),
('02070', 'Bernot', '31T', 535851, 5524235, 49.8694, 3.4989, 91),
('02071', 'Berny-Rivière', '31T', 510115, 5473014, 49.4097, 3.13944, 60),
('02072', 'Berrieux', '31T', 561501, 5482029, 49.4878, 3.84917, 90),
('02073', 'Berry-au-Bac', '31T', 565556, 5472717, 49.4036, 3.90361, 55),
('02074', 'Bertaucourt-Epourdon', '31T', 527727, 5496792, 49.6231, 3.38389, 103),
('02075', 'Berthenicourt', '31T', 527682, 5513284, 49.7714, 3.38444, 62),
('02076', 'Bertricourt', '31T', 573265, 5472012, 49.3964, 4.00972, 61),
('02077', 'Berzy-le-Sec', '31T', 522764, 5464590, 49.3336, 3.31333, 130),
('02078', 'Besmé', '31T', 511777, 5487315, 49.5383, 3.16278, 65),
('02079', 'Besmont', '31T', 580635, 5521290, 49.8386, 4.1214, 175),
('02080', 'Besny-et-Loizy', '31T', 541970, 5494413, 49.6008, 3.58083, 80),
('02081', 'Béthancourt-en-Vaux', '31T', 510672, 5497411, 49.6292, 3.14778, 99),
('02082', 'Beugneux', '31T', 530191, 5453601, 49.2344, 3.41472, 146),
('02083', 'Beuvardes', '31T', 535698, 5443196, 49.1406, 3.48944, 170),
('02084', 'Bézu-le-Guéry', '31T', 516536, 5428345, 49.0078, 3.22611, 140),
('02085', 'Bézu-Saint-Germain', '31T', 529863, 5439548, 49.1081, 3.40917, 170),
('02086', 'Bichancourt', '31T', 515602, 5491988, 49.5803, 3.21583, 60),
('02087', 'Bieuxy', '31T', 519068, 5477176, 49.4469, 3.26306, 130),
('02088', 'Bièvres', '31T', 551677, 5482575, 49.4936, 3.71361, 116),
('02089', 'Billy-sur-Aisne', '31T', 527858, 5467053, 49.3556, 3.38361, 73),
('02090', 'Billy-sur-Ourcq', '31T', 521948, 5451647, 49.2172, 3.30138, 150),
('02091', 'Blanzy-lès-Fismes', '31T', 548956, 5465224, 49.3378, 3.67389, 150),
('02093', 'Blérancourt', '31T', 511099, 5484843, 49.5161, 3.15334, 70),
('02094', 'Blesmes', '31T', 533053, 5431599, 49.0364, 3.45223, 100),
('02095', 'Bohain-en-Vermandois', '31T', 532577, 5537340, 49.9875, 3.45444, 135),
('02096', 'Bois-lès-Pargny', '31T', 546822, 5508999, 49.7317, 3.64972, 138),
('02097', 'Boncourt', '31T', 568322, 5496410, 49.6164, 3.94583, 100),
('02098', 'Bonneil', '31T', 525555, 5428348, 49.0075, 3.34944, 77),
('02099', 'Bonnesvalyn', '31T', 523227, 5440937, 49.1208, 3.31833, 120),
('02100', 'Bony', '31T', 516069, 5537358, 49.9883, 3.22416, 135),
('02101', 'Bosmont-sur-Serre', '31T', 561814, 5509273, 49.7328, 3.85778, 100),
('02102', 'Bouconville-Vauclair', '31T', 554746, 5479486, 49.4656, 3.75555, 105),
('02103', 'Boué', '31T', 550113, 5540317, 50.0131, 3.69944, 150),
('02104', 'Bouffignereux', '31T', 561321, 5469364, 49.3739, 3.84472, 75),
('02105', 'Bouresches', '31T', 522646, 5434388, 49.0619, 3.31, 130),
('02106', 'Bourg-et-Comin', '31T', 547607, 5471790, 49.3969, 3.65611, 60),
('02107', 'Bourguignon-sous-Coucy', '31T', 511474, 5487963, 49.5442, 3.15861, 58),
('02108', 'Bourguignon-sous-Montbavin', '31T', 539017, 5486392, 49.5289, 3.53917, 90),
('02109', 'La Bouteille', '31T', 570078, 5523459, 49.8594, 3.975, 210),
('02110', 'Braine', '31T', 538782, 5465637, 49.3422, 3.53389, 55),
('02111', 'Brancourt-en-Laonnois', '31T', 530241, 5484792, 49.515, 3.41778, 85),
('02112', 'Brancourt-le-Grand', '31T', 527525, 5536200, 49.9775, 3.38389, 130),
('02114', 'Brasles', '31T', 531339, 5433010, 49.0492, 3.42889, 70),
('02115', 'Braye-en-Laonnois', '31T', 544202, 5476642, 49.4408, 3.60973, 100),
('02116', 'Braye-en-Thiérache', '31T', 569114, 5514582, 49.7797, 3.96, 150),
('02117', 'Bray-Saint-Christophe', '31T', 510461, 5513316, 49.7722, 3.14528, 75),
('02118', 'Braye', '31T', 526913, 5474676, 49.4242, 3.37111, 60),
('02119', 'Brécy', '31T', 531298, 5443910, 49.1472, 3.42917, 111),
('02120', 'Brenelle', '31T', 539447, 5468452, 49.3675, 3.54333, 150),
('02121', 'Breny', '31T', 525707, 5448082, 49.185, 3.35277, 90),
('02122', 'Brie', '31T', 534945, 5494363, 49.6008, 3.48361, 95),
('02123', 'Brissay-Choigny', '31T', 527390, 5507785, 49.7219, 3.38, 64),
('02124', 'Brissy-Hamégicourt', '31T', 527399, 5510009, 49.7419, 3.38028, 65),
('02125', 'Brumetz', '31T', 511760, 5438709, 49.1011, 3.16111, 100),
('02126', 'Brunehamel', '31T', 585007, 5513851, 49.7711, 4.18056, 234),
('02127', 'Bruyères-sur-Fère', '31T', 532344, 5448549, 49.1889, 3.44389, 135),
('02128', 'Bruyères-et-Montbérault', '31T', 548106, 5486033, 49.525, 3.66472, 84),
('02129', 'Bruys', '31T', 541000, 5457686, 49.2706, 3.56361, 110),
('02130', 'Bucilly', '31T', 578413, 5525706, 49.8786, 4.09139, 156),
('02131', 'Bucy-le-Long', '31T', 528380, 5471379, 49.3944, 3.39111, 60),
('02132', 'Bucy-lès-Cerny', '31T', 537488, 5492342, 49.5825, 3.51861, 120),
('02133', 'Bucy-lès-Pierrepont', '31T', 565131, 5499830, 49.6475, 3.90223, 90),
('02134', 'Buire', '31T', 575817, 5528603, 49.905, 4.05584, 165),
('02135', 'Buironfosse', '31T', 559963, 5535260, 49.9667, 3.83612, 200),
('02136', 'Burelles', '31T', 564651, 5514836, 49.7825, 3.89806, 130),
('02137', 'Bussiares', '31T', 518800, 5437493, 49.09, 3.2575, 100),
('02138', 'Buzancy', '31T', 525298, 5462347, 49.3133, 3.34806, 133),
('02139', 'Caillouël-Crépigny', '31T', 509249, 5496544, 49.6214, 3.12805, 110),
('02140', 'Camelin', '31T', 509750, 5485891, 49.5256, 3.13472, 80),
('02141', 'La Capelle', '31T', 565685, 5536531, 49.9775, 3.91611, 223),
('02142', 'Castres', '31T', 517150, 5517008, 49.8053, 3.23834, 75),
('02143', 'Le Catelet', '31T', 517578, 5538906, 50.0022, 3.24528, 100),
('02144', 'Caulaincourt', '31T', 507686, 5523688, 49.8656, 3.10695, 70),
('02145', 'Caumont', '31T', 512797, 5497849, 49.6331, 3.17722, 81),
('02146', 'Celles-lès-Condé', '31T', 541804, 5428879, 49.0114, 3.57167, 86),
('02147', 'La Celle-sous-Montmirail', '31T', 534186, 5412244, 48.8622, 3.46611, 120),
('02148', 'Celles-sur-Aisne', '31T', 534902, 5472776, 49.4067, 3.48111, 70),
('02149', 'Cerizy', '31T', 523667, 5512153, 49.7614, 3.32861, 105),
('02150', 'Cerny-en-Laonnois', '31T', 548509, 5476895, 49.4428, 3.66917, 180),
('02151', 'Cerny-lès-Bucy', '31T', 539580, 5491894, 49.5783, 3.5475, 86),
('02152', 'Cerseuil', '31T', 537665, 5463684, 49.3247, 3.51833, 110),
('02153', 'Cessières', '31T', 535980, 5489676, 49.5586, 3.4975, 110),
('02154', 'Chacrise', '31T', 529342, 5461193, 49.3028, 3.40361, 70),
('02155', 'Chaillevois', '31T', 538023, 5484748, 49.5142, 3.52528, 100),
('02156', 'Chalandry', '31T', 546333, 5502942, 49.6772, 3.64222, 70),
('02157', 'Chambry', '31T', 547358, 5493469, 49.5919, 3.65528, 71),
('02158', 'Chamouille', '31T', 548257, 5480382, 49.4742, 3.66612, 100),
('02159', 'Champs', '31T', 518449, 5487581, 49.5406, 3.255, 55),
('02160', 'Chaourse', '31T', 571882, 5506402, 49.7058, 3.99694, 120),
('02161', 'La Chapelle-Monthodon', '31T', 546546, 5430245, 49.0233, 3.63667, 140),
('02162', 'La Chapelle-sur-Chézy', '31T', 527640, 5421781, 48.9483, 3.3775, 217),
('02163', 'Charly-sur-Marne', '31T', 520855, 5424994, 48.9775, 3.285, 62),
('02164', 'Le Charmel', '31T', 540158, 5440077, 49.1122, 3.55028, 187),
('02165', 'Charmes', '31T', 527308, 5500311, 49.6547, 3.37834, 60),
('02166', 'Chartèves', '31T', 536902, 5435885, 49.0747, 3.50528, 80),
('02167', 'Chassemy', '31T', 536696, 5469792, 49.3797, 3.50556, 70),
('02168', 'Château-Thierry', '31T', 529352, 5432567, 49.0453, 3.40166, 80),
('02169', 'Châtillon-lès-Sons', '31T', 549237, 5512048, 49.7589, 3.68361, 140),
('02170', 'Châtillon-sur-Oise', '31T', 530270, 5515645, 49.7925, 3.42056, 70),
('02171', 'Chaudardes', '31T', 557448, 5471391, 49.3925, 3.79167, 70),
('02172', 'Chaudun', '31T', 519300, 5462786, 49.3175, 3.26556, 150),
('02173', 'Chauny', '31T', 515832, 5496035, 49.6167, 3.21917, 49),
('02174', 'Chavignon', '31T', 537720, 5481998, 49.4894, 3.52083, 87),
('02175', 'Chavigny', '31T', 522178, 5474871, 49.4261, 3.30583, 135),
('02176', 'Chavonne', '31T', 541451, 5472883, 49.4072, 3.57139, 70),
('02177', 'Chérêt', '31T', 549383, 5484901, 49.5147, 3.68222, 110),
('02178', 'Chermizy-Ailles', '31T', 552549, 5479835, 49.4689, 3.72528, 120),
('02179', 'Chéry-Chartreuve', '31T', 544766, 5456758, 49.2619, 3.61527, 160),
('02180', 'Chéry-lès-Pouilly', '31T', 543706, 5500696, 49.6572, 3.60556, 62),
('02181', 'Chéry-lès-Rozoy', '31T', 578748, 5508134, 49.7206, 4.09249, 140),
('02182', 'Chevennes', '31T', 552676, 5518381, 49.8156, 3.73222, 124),
('02183', 'Chevregny', '31T', 542805, 5480151, 49.4725, 3.59084, 100),
('02184', 'Chevresis-Monceau', '31T', 541177, 5511579, 49.7553, 3.57166, 70),
('02185', 'Chézy-en-Orxois', '31T', 513336, 5441059, 49.1222, 3.18278, 133),
('02186', 'Chézy-sur-Marne', '31T', 526866, 5426224, 48.9883, 3.36722, 63),
('02187', 'Chierry', '31T', 531671, 5431808, 49.0383, 3.43334, 81),
('02188', 'Chigny', '31T', 555358, 5529712, 49.9172, 3.77111, 160),
('02189', 'Chivres-en-Laonnois', '31T', 560836, 5498298, 49.6342, 3.8425, 75),
('02190', 'Chivres-Val', '31T', 531584, 5471551, 49.3958, 3.43527, 80),
('02191', 'Chivy-lès-Étouvelles', '31T', 542314, 5486324, 49.5281, 3.58472, 65),
('02192', 'Chouy', '31T', 518129, 5450368, 49.2058, 3.24889, 150),
('02193', 'Cierges', '31T', 543718, 5446249, 49.1675, 3.59973, 155),
('02194', 'Cilly', '31T', 559945, 5509901, 49.7386, 3.83194, 90),
('02195', 'Ciry-Salsogne', '31T', 533662, 5467920, 49.3631, 3.4636, 70),
('02196', 'Clacy-et-Thierret', '31T', 541352, 5488571, 49.5483, 3.57167, 65),
('02197', 'Clairfontaine', '31T', 570897, 5537092, 49.9819, 3.98889, 225),
('02198', 'Clamecy', '31T', 526306, 5475168, 49.4286, 3.36278, 140),
('02199', 'Clastres', '31T', 516790, 5510460, 49.7464, 3.23305, 75),
('02200', 'Clermont-les-Fermes', '31T', 567648, 5502208, 49.6686, 3.9375, 140),
('02203', 'Coincy', '31T', 530864, 5445452, 49.1611, 3.42334, 110),
('02204', 'Coingt', '31T', 578629, 5516349, 49.7944, 4.0925, 200),
('02205', 'Colligis-Crandelain', '31T', 546485, 5480459, 49.475, 3.64167, 100),
('02206', 'Colonfay', '31T', 551153, 5523061, 49.8578, 3.71166, 150),
('02207', 'Commenchon', '31T', 511853, 5498773, 49.6414, 3.16417, 95),
('02208', 'Concevreux', '31T', 557325, 5469629, 49.3767, 3.78972, 55),
('02209', 'Condé-en-Brie', '31T', 541200, 5428041, 49.0039, 3.56333, 91),
('02210', 'Condé-sur-Aisne', '31T', 534001, 5471844, 49.3983, 3.46861, 70),
('02211', 'Condé-sur-Suippe', '31T', 568837, 5474673, 49.4208, 3.94916, 55),
('02212', 'Condren', '31T', 520320, 5497593, 49.6306, 3.28138, 49),
('02213', 'Connigis', '31T', 538883, 5431051, 49.0311, 3.53194, 90),
('02214', 'Contescourt', '31T', 516734, 5515679, 49.7933, 3.2325, 96),
('02215', 'Corbeny', '31T', 559661, 5479198, 49.4625, 3.82334, 90),
('02216', 'Corcy', '31T', 515403, 5455547, 49.2525, 3.21166, 80),
('02217', 'Coucy-le-Château-Auffrique', '31T', 523362, 5485253, 49.5194, 3.32277, 122),
('02218', 'Coucy-lès-Eppes', '31T', 555733, 5489224, 49.5531, 3.77055, 100),
('02219', 'Coucy-la-Ville', '31T', 523758, 5486767, 49.5331, 3.32834, 78),
('02220', 'Coulonges-Cohan', '31T', 546299, 5450007, 49.2011, 3.63556, 140),
('02221', 'Coupru', '31T', 519899, 5430950, 49.0311, 3.27223, 163),
('02222', 'Courbes', '31T', 532560, 5503830, 49.6861, 3.45139, 70),
('02223', 'Courboin', '31T', 537022, 5426992, 48.9947, 3.50611, 199),
('02224', 'Courcelles-sur-Vesles', '31T', 541529, 5465256, 49.3386, 3.57167, 70),
('02225', 'Courchamps', '31T', 519319, 5439903, 49.1117, 3.26472, 154),
('02226', 'Courmelles', '31T', 522719, 5465918, 49.3456, 3.31278, 60),
('02227', 'Courmont', '31T', 542073, 5444167, 49.1489, 3.57694, 170),
('02228', 'Courtemont-Varennes', '31T', 540434, 5435570, 49.0717, 3.55361, 93),
('02229', 'Courtrizy-et-Fussigny', '31T', 557198, 5485595, 49.5203, 3.79028, 120),
('02230', 'Couvrelles', '31T', 535455, 5465275, 49.3392, 3.48806, 80),
('02231', 'Couvron-et-Aumencourt', '31T', 537382, 5499043, 49.6428, 3.51778, 86),
('02232', 'Coyolles', '31T', 503215, 5453488, 49.2342, 3.04416, 110),
('02233', 'Cramaille', '31T', 532925, 5453030, 49.2292, 3.45223, 150),
('02234', 'Craonne', '31T', 557071, 5476576, 49.4392, 3.78722, 90),
('02235', 'Craonnelle', '31T', 555751, 5475697, 49.4314, 3.76889, 100),
('02236', 'Crécy-au-Mont', '31T', 522996, 5481514, 49.4858, 3.3175, 110),
('02237', 'Crécy-sur-Serre', '31T', 544993, 5505092, 49.6967, 3.62389, 64),
('02238', 'Crépy', '31T', 537070, 5494810, 49.6047, 3.51306, 87),
('02239', 'Crézancy', '31T', 537349, 5432800, 49.0469, 3.51111, 80),
('02240', 'Croix-Fonsommes', '31T', 528993, 5529999, 49.9217, 3.4039, 100),
('02241', 'La Croix-sur-Ourcq', '31T', 525838, 5446168, 49.1678, 3.35445, 120),
('02242', 'Crouttes-sur-Marne', '31T', 517642, 5425322, 48.9806, 3.24111, 80),
('02243', 'Crouy', '31T', 526279, 5472326, 49.4031, 3.36222, 51),
('02244', 'Crupilly', '31T', 554171, 5530688, 49.9261, 3.75472, 154),
('02245', 'Cuffies', '31T', 523234, 5472745, 49.4069, 3.32027, 80),
('02246', 'Cugny', '31T', 511116, 5506121, 49.7075, 3.15417, 72),
('02248', 'Cuirieux', '31T', 558853, 5503557, 49.6817, 3.81583, 83),
('02249', 'Cuiry-Housse', '31T', 535789, 5460367, 49.295, 3.49222, 100),
('02250', 'Cuiry-lès-Chaudardes', '31T', 555943, 5470727, 49.3867, 3.77084, 50),
('02251', 'Cuiry-lès-Iviers', '31T', 580001, 5512817, 49.7625, 4.11084, 180),
('02252', 'Cuissy-et-Geny', '31T', 550858, 5473302, 49.4103, 3.70111, 160),
('02253', 'Cuisy-en-Almont', '31T', 517790, 5473929, 49.4178, 3.24528, 130),
('02254', 'Cutry', '31T', 513478, 5466011, 49.3467, 3.18556, 131),
('02255', 'Cys-la-Commune', '31T', 541403, 5471215, 49.3922, 3.57055, 52),
('02256', 'Dagny-Lambercy', '31T', 575085, 5513796, 49.7719, 4.04278, 170),
('02257', 'Dallon', '31T', 517384, 5518800, 49.8214, 3.24167, 75),
('02258', 'Dammard', '31T', 514404, 5443439, 49.1436, 3.1975, 140),
('02259', 'Dampleux', '31T', 511322, 5454488, 49.2431, 3.15555, 150),
('02260', 'Danizy', '31T', 528324, 5501459, 49.665, 3.3925, 74),
('02261', 'Dercy', '31T', 549472, 5506058, 49.705, 3.68612, 70),
('02262', 'Deuillet', '31T', 526038, 5497494, 49.6294, 3.36056, 52),
('02263', 'Dhuizel', '31T', 544915, 5468278, 49.3656, 3.61862, 100),
('02264', 'Dizy-le-Gros', '31T', 573779, 5498057, 49.6306, 4.02167, 125),
('02265', 'Dohis', '31T', 581759, 5512967, 49.7636, 4.13527, 205),
('02266', 'Dolignon', '31T', 578068, 5509453, 49.7325, 4.08333, 160),
('02267', 'Dommiers', '31T', 515198, 5463946, 49.3281, 3.20916, 130),
('02268', 'Domptin', '31T', 520250, 5429253, 49.0158, 3.27694, 120),
('02269', 'Dorengt', '31T', 549076, 5536261, 49.9767, 3.68445, 140),
('02270', 'Douchy', '31T', 509776, 5515940, 49.7958, 3.13583, 90),
('02271', 'Dravegny', '31T', 546393, 5453220, 49.23, 3.63722, 150),
('02272', 'Droizy', '31T', 528569, 5458410, 49.2778, 3.39278, 130),
('02273', 'Dury', '31T', 509505, 5511029, 49.7517, 3.13195, 75),
('02274', 'Ébouleau', '31T', 563112, 5502710, 49.6736, 3.87473, 110),
('02275', 'Effry', '31T', 570623, 5530632, 49.9239, 3.98389, 150),
('02276', 'Englancourt', '31T', 557473, 5529642, 49.9164, 3.80056, 160),
('02277', 'Épagny', '31T', 517553, 5478715, 49.4608, 3.24223, 75),
('02278', 'Éparcy', '31T', 576103, 5525302, 49.8753, 4.05917, 160),
('02279', 'Épaux-Bézu', '31T', 525565, 5439404, 49.1069, 3.35027, 120),
('02280', 'Épieds', '31T', 532460, 5439100, 49.1039, 3.44472, 170),
('02281', 'L''Épine-aux-Bois', '31T', 532806, 5414861, 48.8858, 3.4475, 160),
('02282', 'Eppes', '31T', 553358, 5489695, 49.5575, 3.73778, 80),
('02283', 'Erlon', '31T', 551469, 5508764, 49.7292, 3.71417, 80),
('02284', 'Erloy', '31T', 559469, 5529416, 49.9142, 3.82833, 138),
('02286', 'Esquéhéries', '31T', 553469, 5537168, 49.9844, 3.74584, 173),
('02287', 'Essigny-le-Grand', '31T', 520079, 5513899, 49.7772, 3.27888, 105),
('02288', 'Essigny-le-Petit', '31T', 526412, 5527577, 49.9, 3.36778, 85),
('02289', 'Essises', '31T', 530763, 5423372, 48.9625, 3.42027, 140),
('02290', 'Essômes-sur-Marne', '31T', 527413, 5430704, 49.0286, 3.375, 70);
INSERT INTO `ods_communes` (`oc_code_insee`, `oc_nom`, `oc_secteur`, `oc_x_utm`, `oc_y_utm`, `oc_latitude`, `oc_longitude`, `oc_altitude`) VALUES
('02291', 'Estrées', '31T', 520658, 5535150, 49.9683, 3.28806, 125),
('02292', 'Étampes-sur-Marne', '31T', 530678, 5431339, 49.0342, 3.41972, 93),
('02293', 'Étaves-et-Bocquiaux', '31T', 532808, 5532122, 49.9406, 3.45722, 146),
('02294', 'Étouvelles', '31T', 542158, 5485643, 49.5219, 3.58249, 62),
('02295', 'Étréaupont', '31T', 565647, 5528253, 49.9031, 3.91417, 126),
('02296', 'Étreillers', '31T', 511527, 5519680, 49.8294, 3.16027, 90),
('02297', 'Étrépilly', '31T', 524705, 5436929, 49.0847, 3.33834, 170),
('02298', 'Étreux', '31T', 546908, 5538095, 49.9933, 3.65444, 80),
('02299', 'Évergnicourt', '31T', 575451, 5477262, 49.4433, 4.04084, 740),
('02301', 'Faucoucourt', '31T', 533687, 5486789, 49.5328, 3.46555, 90),
('02302', 'Faverolles', '31T', 512844, 5452329, 49.2236, 3.17639, 150),
('02303', 'Fayet', '31T', 518185, 5524146, 49.8694, 3.25306, 110),
('02304', 'La Fère', '31T', 526441, 5501233, 49.6631, 3.36639, 50),
('02305', 'Fère-en-Tardenois', '31T', 537538, 5449755, 49.1994, 3.51528, 120),
('02306', 'La Ferté-Chevresis', '31T', 540392, 5509504, 49.7367, 3.56055, 72),
('02307', 'La Ferté-Milon', '31T', 509475, 5446887, 49.1747, 3.13, 70),
('02308', 'Fesmy-le-Sart', '31T', 548533, 5543422, 50.0411, 3.67778, 150),
('02309', 'Festieux', '31T', 554642, 5485878, 49.5231, 3.755, 110),
('02310', 'Fieulaine', '31T', 532297, 5527579, 49.8997, 3.44972, 139),
('02311', 'Filain', '31T', 540321, 5478588, 49.4586, 3.55639, 95),
('02312', 'La Flamengrie', '31T', 565927, 5539530, 50.0044, 3.92, 200),
('02313', 'Flavigny-le-Grand-et-Beaurain', '31T', 547609, 5526457, 49.8886, 3.66278, 108),
('02315', 'Flavy-le-Martel', '31T', 513997, 5507024, 49.7156, 3.19416, 70),
('02316', 'Fleury', '31T', 511601, 5456433, 49.2606, 3.15944, 120),
('02317', 'Fluquières', '31T', 511114, 5516807, 49.8036, 3.15445, 95),
('02318', 'Folembray', '31T', 521181, 5487899, 49.5433, 3.29278, 88),
('02319', 'Fonsommes', '31T', 528725, 5527898, 49.9028, 3.40001, 95),
('02320', 'Fontaine-lès-Clercs', '31T', 516110, 5517159, 49.8067, 3.22389, 84),
('02321', 'Fontaine-lès-Vervins', '31T', 564596, 5522680, 49.8531, 3.8986, 193),
('02322', 'Fontaine-Notre-Dame', '31T', 530851, 5525809, 49.8839, 3.42944, 131),
('02323', 'Fontaine-Uterte', '31T', 526659, 5530049, 49.9222, 3.37139, 145),
('02324', 'Fontenelle', '31T', 562030, 5542511, 50.0317, 3.8661, 200),
('02325', 'Fontenelle-en-Brie', '31T', 535164, 5418766, 48.9208, 3.48, 216),
('02326', 'Fontenoy', '31T', 514428, 5472776, 49.4075, 3.19889, 55),
('02327', 'Foreste', '31T', 507215, 5517449, 49.8094, 3.10028, 75),
('02328', 'Fossoy', '31T', 535257, 5432910, 49.0481, 3.4825, 100),
('02329', 'Fourdrain', '31T', 534115, 5495439, 49.6106, 3.47222, 85),
('02330', 'Francilly-Selency', '31T', 516174, 5522317, 49.8531, 3.225, 111),
('02331', 'Franqueville', '31T', 558357, 5517945, 49.8111, 3.81111, 104),
('02332', 'Fresnes-en-Tardenois', '31T', 540516, 5443785, 49.1456, 3.55555, 160),
('02333', 'Fresnes', '31T', 526720, 5489314, 49.5558, 3.36944, 180),
('02334', 'Fresnoy-le-Grand', '31T', 529912, 5533247, 49.9508, 3.41695, 115),
('02335', 'Fressancourt', '31T', 531032, 5497737, 49.6314, 3.42973, 60),
('02336', 'Frières-Faillouël', '31T', 517171, 5503914, 49.6875, 3.23805, 75),
('02337', 'Froidestrées', '31T', 564937, 5532506, 49.9414, 3.905, 202),
('02338', 'Froidmont-Cohartille', '31T', 551113, 5504035, 49.6867, 3.70861, 70),
('02339', 'Gandelu', '31T', 513526, 5437817, 49.0931, 3.18527, 80),
('02340', 'Gauchy', '31T', 519520, 5519240, 49.8253, 3.27139, 80),
('02341', 'Gercy', '31T', 562329, 5518422, 49.815, 3.86639, 120),
('02342', 'Gergny', '31T', 566699, 5531910, 49.9358, 3.92945, 150),
('02343', 'Germaine', '31T', 508394, 5517790, 49.8125, 3.11667, 75),
('02344', 'Gernicourt', '31T', 563385, 5472260, 49.3997, 3.87361, 60),
('02345', 'Gibercourt', '31T', 520556, 5509484, 49.7375, 3.28528, 85),
('02346', 'Gizy', '31T', 555959, 5494632, 49.6017, 3.77444, 76),
('02347', 'Gland', '31T', 533857, 5432840, 49.0475, 3.46333, 81),
('02348', 'Glennes', '31T', 551843, 5467228, 49.3556, 3.71389, 100),
('02349', 'Goudelancourt-lès-Berrieux', '31T', 561470, 5482985, 49.4964, 3.84889, 100),
('02350', 'Goudelancourt-lès-Pierrepont', '31T', 561654, 5502230, 49.6694, 3.85444, 100),
('02351', 'Goussancourt', '31T', 548780, 5446261, 49.1672, 3.66916, 190),
('02352', 'Gouy', '31T', 518295, 5538724, 50.0006, 3.25528, 100),
('02353', 'Grandlup-et-Fay', '31T', 553227, 5501028, 49.6594, 3.7375, 95),
('02354', 'Grandrieux', '31T', 585297, 5509438, 49.7314, 4.18362, 193),
('02355', 'Gricourt', '31T', 517579, 5526337, 49.8892, 3.24472, 90),
('02356', 'Grisolles', '31T', 526156, 5443204, 49.1411, 3.35862, 160),
('02357', 'Gronard', '31T', 563637, 5515997, 49.7931, 3.88417, 138),
('02358', 'Grougis', '31T', 538366, 5532653, 49.945, 3.53473, 150),
('02359', 'Grugies', '31T', 519065, 5518064, 49.8147, 3.265, 75),
('02360', 'Guignicourt', '31T', 570105, 5476326, 49.4356, 3.96694, 60),
('02361', 'Guise', '31T', 545082, 5527917, 49.9019, 3.62777, 100),
('02362', 'Guivry', '31T', 508683, 5499384, 49.6469, 3.12028, 100),
('02363', 'Guny', '31T', 519342, 5485144, 49.5186, 3.26723, 50),
('02364', 'Guyencourt', '31T', 560958, 5467537, 49.3575, 3.83944, 110),
('02366', 'Hannapes', '31T', 544876, 5535884, 49.9736, 3.62583, 110),
('02367', 'Happencourt', '31T', 513460, 5513847, 49.7769, 3.18695, 75),
('02368', 'Haramont', '31T', 504546, 5458399, 49.2783, 3.0625, 131),
('02369', 'Harcigny', '31T', 570409, 5516452, 49.7964, 3.97833, 170),
('02370', 'Hargicourt', '31T', 512910, 5534508, 49.9628, 3.18, 108),
('02371', 'Harly', '31T', 523666, 5521480, 49.8453, 3.32917, 75),
('02372', 'Hartennes-et-Taux', '31T', 525663, 5457654, 49.2711, 3.35278, 150),
('02373', 'Hary', '31T', 566885, 5515264, 49.7861, 3.92916, 115),
('02374', 'Lehaucourt', '31T', 520259, 5529836, 49.9206, 3.28222, 160),
('02375', 'Hautevesnes', '31T', 517110, 5439649, 49.1094, 3.23444, 173),
('02376', 'Hauteville', '31T', 537540, 5525296, 49.8789, 3.5225, 80),
('02377', 'Haution', '31T', 560346, 5524145, 49.8667, 3.83972, 182),
('02378', 'La Hérie', '31T', 574992, 5526212, 49.8836, 4.04389, 150),
('02379', 'Le Hérie-la-Viéville', '31T', 546456, 5519003, 49.8217, 3.64584, 134),
('02380', 'Hinacourt', '31T', 521393, 5510414, 49.7458, 3.29694, 90),
('02381', 'Hirson', '31T', 577746, 5530422, 49.9211, 4.08306, 189),
('02382', 'Holnon', '31T', 515553, 5523211, 49.8611, 3.21639, 115),
('02383', 'Homblières', '31T', 526419, 5522049, 49.8503, 3.3675, 84),
('02384', 'Houry', '31T', 561150, 5514887, 49.7833, 3.84944, 100),
('02385', 'Housset', '31T', 550999, 5516110, 49.7953, 3.70861, 135),
('02386', 'Iron', '31T', 547344, 5533867, 49.9553, 3.66, 130),
('02387', 'Itancourt', '31T', 525003, 5517410, 49.8086, 3.3475, 115),
('02388', 'Iviers', '31T', 582244, 5515322, 49.7847, 4.1425, 224),
('02389', 'Jaulgonne', '31T', 538961, 5437413, 49.0883, 3.53362, 70),
('02390', 'Jeancourt', '31T', 510547, 5530518, 49.9269, 3.14694, 92),
('02391', 'Jeantes', '31T', 575873, 5517514, 49.8053, 4.05444, 180),
('02392', 'Joncourt', '31T', 521420, 5533763, 49.9558, 3.29861, 145),
('02393', 'Jouaignes', '31T', 539057, 5460914, 49.2997, 3.53722, 90),
('02395', 'Jumencourt', '31T', 525640, 5484120, 49.5092, 3.35417, 68),
('02396', 'Jumigny', '31T', 552148, 5473346, 49.4106, 3.71889, 100),
('02397', 'Jussy', '31T', 516719, 5507402, 49.7189, 3.23194, 73),
('02398', 'Juvigny', '31T', 523195, 5477346, 49.4483, 3.32, 132),
('02399', 'Juvincourt-et-Damary', '31T', 564674, 5477463, 49.4464, 3.89223, 62),
('02400', 'Laffaux', '31T', 530946, 5477508, 49.4494, 3.42695, 150),
('02401', 'Laigny', '31T', 561415, 5523230, 49.8583, 3.85445, 165),
('02402', 'Lanchy', '31T', 505334, 5519362, 49.8267, 3.07416, 90),
('02403', 'Landifay-et-Bertaignemont', '31T', 543602, 5518516, 49.8175, 3.60611, 110),
('02404', 'Landouzy-la-Cour', '31T', 570834, 5522172, 49.8478, 3.98528, 180),
('02405', 'Landouzy-la-Ville', '31T', 575184, 5523899, 49.8628, 4.04611, 170),
('02406', 'Landricourt', '31T', 526524, 5484124, 49.5092, 3.36638, 74),
('02407', 'Laniscourt', '31T', 539283, 5488525, 49.5481, 3.54306, 75),
('02408', 'Laon', '31T', 545291, 5490919, 49.5692, 3.62639, 160),
('02409', 'Lappion', '31T', 569598, 5495531, 49.6083, 3.96333, 91),
('02410', 'Largny-sur-Automne', '31T', 503012, 5456360, 49.26, 3.0414, 125),
('02411', 'Latilly', '31T', 522625, 5444578, 49.1536, 3.31028, 130),
('02412', 'Launoy', '31T', 529386, 5456747, 49.2628, 3.40389, 105),
('02413', 'Laval-en-Laonnois', '31T', 543102, 5483335, 49.5011, 3.59528, 70),
('02414', 'Lavaqueresse', '31T', 550482, 5532907, 49.9464, 3.70362, 150),
('02415', 'Laversine', '31T', 512326, 5466471, 49.3508, 3.16972, 60),
('02416', 'Lemé', '31T', 554888, 5520997, 49.8389, 3.76333, 160),
('02417', 'Lempire', '31T', 512305, 5537811, 49.9925, 3.17167, 135),
('02418', 'Lerzy', '31T', 563239, 5532826, 49.9444, 3.88139, 170),
('02419', 'Leschelles', '31T', 555290, 5534345, 49.9589, 3.77083, 170),
('02420', 'Lesdins', '31T', 523581, 5527286, 49.8975, 3.32834, 85),
('02421', 'Lesges', '31T', 536791, 5461547, 49.3056, 3.50611, 110),
('02422', 'Lesquielles-Saint-Germain', '31T', 544615, 5531342, 49.9328, 3.62167, 138),
('02423', 'Leuilly-sous-Coucy', '31T', 526037, 5480941, 49.4806, 3.35945, 70),
('02424', 'Leury', '31T', 524492, 5475530, 49.4319, 3.33778, 140),
('02425', 'Leuze', '31T', 583446, 5522939, 49.8531, 4.16084, 180),
('02426', 'Levergies', '31T', 522489, 5530771, 49.9289, 3.31334, 103),
('02427', 'Lhuys', '31T', 540406, 5458824, 49.2808, 3.55556, 83),
('02428', 'Licy-Clignon', '31T', 520074, 5438516, 49.0992, 3.275, 100),
('02429', 'Lierval', '31T', 544666, 5481402, 49.4836, 3.61667, 110),
('02430', 'Liesse-Notre-Dame', '31T', 558177, 5495582, 49.61, 3.80528, 75),
('02431', 'Liez', '31T', 521056, 5504483, 49.6925, 3.29195, 59),
('02432', 'Limé', '31T', 539766, 5463513, 49.3231, 3.54723, 65),
('02433', 'Lislet', '31T', 573734, 5504326, 49.6869, 4.02223, 120),
('02434', 'Lizy', '31T', 534866, 5484696, 49.5139, 3.48166, 100),
('02435', 'Logny-lès-Aubenton', '31T', 587121, 5520434, 49.83, 4.21138, 180),
('02438', 'Longpont', '31T', 515882, 5457926, 49.2739, 3.21834, 85),
('02439', 'Longueval-Barbonval', '31T', 547483, 5467528, 49.3586, 3.65389, 100),
('02440', 'Lor', '31T', 575817, 5487120, 49.5319, 4.04778, 85),
('02441', 'Louâtre', '31T', 518030, 5456080, 49.2572, 3.24778, 160),
('02442', 'Loupeigne', '31T', 539016, 5455355, 49.2497, 3.53611, 108),
('02443', 'Lucy-le-Bocage', '31T', 520457, 5433731, 49.0561, 3.28, 180),
('02444', 'Lugny', '31T', 558312, 5514732, 49.7822, 3.81, 90),
('02445', 'Luzoir', '31T', 568946, 5530796, 49.9256, 3.96056, 150),
('02446', 'Ly-Fontaine', '31T', 522279, 5509213, 49.735, 3.30917, 90),
('02447', 'Maast-et-Violaine', '31T', 532687, 5458989, 49.2828, 3.44945, 114),
('02448', 'Mâchecourt', '31T', 560690, 5500581, 49.6547, 3.84083, 83),
('02449', 'Macogny', '31T', 516666, 5445885, 49.1656, 3.22862, 140),
('02450', 'Macquigny', '31T', 539730, 5525991, 49.885, 3.55305, 85),
('02451', 'Magny-la-Fosse', '31T', 519795, 5531286, 49.9336, 3.27583, 105),
('02452', 'Maissemy', '31T', 513487, 5526973, 49.895, 3.18778, 80),
('02453', 'Maizy', '31T', 553192, 5469588, 49.3767, 3.73278, 60),
('02454', 'La Malmaison', '31T', 571016, 5485264, 49.5158, 3.98111, 105),
('02455', 'Malzy', '31T', 552017, 5528659, 49.9081, 3.72444, 130),
('02456', 'Manicamp', '31T', 512211, 5491084, 49.5722, 3.16889, 41),
('02457', 'Marchais', '31T', 559132, 5492658, 49.5836, 3.81805, 80),
('02458', 'Marchais-en-Brie', '31T', 535597, 5414724, 48.8844, 3.48556, 200),
('02459', 'Marcy', '31T', 529075, 5522124, 49.8508, 3.40445, 120),
('02460', 'Marcy-sous-Marle', '31T', 553099, 5509953, 49.7397, 3.73694, 78),
('02461', 'Marest-Dampcourt', '31T', 511020, 5494200, 49.6003, 3.15251, 57),
('02462', 'Mareuil-en-Dôle', '31T', 540701, 5454410, 49.2411, 3.55917, 140),
('02463', 'Marfontaine', '31T', 555447, 5517173, 49.8044, 3.77056, 105),
('02464', 'Margival', '31T', 529323, 5475955, 49.4356, 3.40444, 91),
('02465', 'Marigny-en-Orxois', '31T', 516762, 5433997, 49.0586, 3.22944, 172),
('02466', 'Marizy-Sainte-Geneviève', '31T', 514778, 5447702, 49.1819, 3.20278, 130),
('02467', 'Marizy-Saint-Mard', '31T', 516337, 5447367, 49.1789, 3.22416, 100),
('02468', 'Marle', '31T', 555701, 5510010, 49.74, 3.77306, 90),
('02469', 'Marly-Gomont', '31T', 556848, 5528338, 49.9047, 3.79166, 120),
('02470', 'Martigny', '31T', 581677, 5523684, 49.86, 4.13639, 161),
('02471', 'Martigny-Courpierre', '31T', 549227, 5482120, 49.4897, 3.67972, 150),
('02472', 'Mauregny-en-Haye', '31T', 557607, 5486866, 49.5317, 3.79611, 105),
('02473', 'Mayot', '31T', 527881, 5505873, 49.7047, 3.38667, 56),
('02474', 'Mennessis', '31T', 519713, 5504725, 49.6947, 3.27334, 70),
('02475', 'Menneville', '31T', 573048, 5474665, 49.4203, 4.00722, 60),
('02476', 'Mennevret', '31T', 539947, 5537112, 49.985, 3.55722, 157),
('02477', 'Mercin-et-Vaux', '31T', 520123, 5469335, 49.3764, 3.27722, 60),
('02478', 'Merlieux-et-Fouquerolles', '31T', 536592, 5485202, 49.5183, 3.50555, 100),
('02479', 'Merval', '31T', 550635, 5466969, 49.3533, 3.69723, 150),
('02480', 'Mesbrecourt-Richecourt', '31T', 539238, 5505851, 49.7039, 3.54417, 58),
('02481', 'Mesnil-Saint-Laurent', '31T', 525651, 5519760, 49.8297, 3.35666, 118),
('02482', 'Meurival', '31T', 555289, 5467539, 49.3581, 3.76138, 109),
('02483', 'Mézières-sur-Oise', '31T', 528875, 5514680, 49.7839, 3.40111, 70),
('02484', 'Mézy-Moulins', '31T', 536947, 5435175, 49.0683, 3.50583, 66),
('02485', 'Missy-aux-Bois', '31T', 518142, 5464943, 49.3369, 3.24973, 141),
('02486', 'Missy-lès-Pierrepont', '31T', 556705, 5498130, 49.6331, 3.78527, 71),
('02487', 'Missy-sur-Aisne', '31T', 531751, 5470595, 49.3872, 3.4375, 70),
('02488', 'Molain', '31T', 538237, 5542288, 50.0317, 3.53389, 130),
('02489', 'Molinchart', '31T', 539092, 5489944, 49.5608, 3.54056, 85),
('02490', 'Monampteuil', '31T', 541393, 5480511, 49.4758, 3.57139, 150),
('02491', 'Monceau-le-Neuf-et-Faucouzy', '31T', 544425, 5513241, 49.77, 3.61694, 90),
('02492', 'Monceau-lès-Leups', '31T', 535636, 5502274, 49.6719, 3.49389, 109),
('02493', 'Monceau-le-Waast', '31T', 551565, 5496534, 49.6192, 3.71389, 81),
('02494', 'Monceau-sur-Oise', '31T', 550029, 5527992, 49.9022, 3.69667, 110),
('02495', 'Mondrepuis', '31T', 575585, 5535117, 49.9636, 4.05388, 195),
('02496', 'Monnes', '31T', 516003, 5443876, 49.1475, 3.21944, 130),
('02497', 'Mons-en-Laonnois', '31T', 540055, 5487357, 49.5375, 3.55361, 80),
('02498', 'Montaigu', '31T', 560095, 5487325, 49.5356, 3.83056, 110),
('02499', 'Montbavin', '31T', 538298, 5485646, 49.5222, 3.52916, 176),
('02500', 'Montbrehain', '31T', 525121, 5534983, 49.9667, 3.35028, 140),
('02501', 'Montchâlons', '31T', 552662, 5484747, 49.5131, 3.7275, 130),
('02502', 'Montcornet', '31T', 573298, 5505401, 49.6967, 4.01639, 130),
('02503', 'Mont-d''Origny', '31T', 535889, 5521486, 49.8447, 3.49917, 85),
('02504', 'Montescourt-Lizerolles', '31T', 518714, 5509540, 49.7381, 3.25972, 80),
('02505', 'Montfaucon', '31T', 531132, 5422788, 48.9572, 3.42527, 163),
('02506', 'Montgobert', '31T', 510560, 5461681, 49.3078, 3.14527, 120),
('02507', 'Montgru-Saint-Hilaire', '31T', 523985, 5448475, 49.1886, 3.32917, 100),
('02508', 'Monthenault', '31T', 548324, 5481834, 49.4872, 3.66722, 180),
('02509', 'Monthiers', '31T', 521898, 5438801, 49.1017, 3.3, 100),
('02510', 'Monthurel', '31T', 539967, 5430039, 49.0219, 3.54667, 106),
('02511', 'Montigny-en-Arrouaise', '31T', 534307, 5528456, 49.9075, 3.47778, 147),
('02512', 'Montigny-l''Allier', '31T', 507582, 5439905, 49.1119, 3.10389, 75),
('02513', 'Montigny-le-Franc', '31T', 565395, 5504497, 49.6894, 3.90666, 136),
('02514', 'Montigny-Lengrain', '31T', 507260, 5468747, 49.3714, 3.1, 131),
('02515', 'Montigny-lès-Condé', '31T', 541540, 5426098, 48.9864, 3.56778, 180),
('02516', 'Montigny-sous-Marle', '31T', 557032, 5510951, 49.7483, 3.79167, 89),
('02517', 'Montigny-sur-Crécy', '31T', 542171, 5507293, 49.7167, 3.585, 115),
('02518', 'Montlevon', '31T', 539544, 5423860, 48.9664, 3.54028, 170),
('02519', 'Montloué', '31T', 577300, 5502986, 49.6744, 4.07139, 130),
('02520', 'Mont-Notre-Dame', '31T', 542392, 5460568, 49.2964, 3.58305, 100),
('02521', 'Montreuil-aux-Lions', '31T', 514440, 5429636, 49.0194, 3.1975, 150),
('02522', 'Mont-Saint-Jean', '31T', 586932, 5516075, 49.7908, 4.20778, 243),
('02523', 'Mont-Saint-Martin', '31T', 546546, 5458996, 49.2819, 3.64, 170),
('02524', 'Mont-Saint-Père', '31T', 535847, 5435878, 49.0747, 3.49083, 90),
('02525', 'Morcourt', '31T', 523411, 5524969, 49.8767, 3.32583, 80),
('02526', 'Morgny-en-Thiérache', '31T', 577522, 5512657, 49.7614, 4.07639, 160),
('02527', 'Morsain', '31T', 514253, 5478242, 49.4567, 3.19667, 61),
('02528', 'Mortefontaine', '31T', 505530, 5464360, 49.3319, 3.07611, 130),
('02529', 'Mortiers', '31T', 548167, 5504101, 49.6875, 3.66778, 65),
('02530', 'Moulins', '31T', 549760, 5474466, 49.4208, 3.68612, 90),
('02531', 'Moussy-Verneuil', '31T', 546118, 5473816, 49.4153, 3.63583, 70),
('02532', 'Moÿ-de-l''Aisne', '31T', 526313, 5511054, 49.7514, 3.36528, 59),
('02533', 'Muret-et-Crouttes', '31T', 530343, 5459068, 49.2836, 3.41722, 86),
('02534', 'Muscourt', '31T', 554297, 5467961, 49.3619, 3.74778, 80),
('02535', 'Nampcelles-la-Cour', '31T', 572293, 5514623, 49.7797, 4.00416, 167),
('02536', 'Nampteuil-sous-Muret', '31T', 530879, 5460677, 49.2981, 3.42472, 80),
('02537', 'Nanteuil-la-Fosse', '31T', 532747, 5475974, 49.4356, 3.45167, 94),
('02538', 'Nanteuil-Notre-Dame', '31T', 529873, 5448813, 49.1914, 3.41, 100),
('02539', 'Nauroy', '31T', 518273, 5533566, 49.9542, 3.25473, 140),
('02540', 'Nesles-la-Montagne', '31T', 531176, 5429550, 49.0181, 3.42639, 150),
('02541', 'Neufchâtel-sur-Aisne', '31T', 574985, 5475989, 49.4319, 4.03417, 62),
('02542', 'Neuflieux', '31T', 511717, 5496364, 49.6197, 3.16222, 83),
('02543', 'Neuilly-Saint-Front', '31T', 519154, 5446511, 49.1711, 3.26277, 100),
('02544', 'Neuve-Maison', '31T', 574143, 5531359, 49.93, 4.03306, 150),
('02545', 'La Neuville-Bosmont', '31T', 560516, 5507190, 49.7142, 3.83944, 131),
('02546', 'La Neuville-en-Beine', '31T', 510903, 5502508, 49.675, 3.15112, 120),
('02547', 'La Neuville-Housset', '31T', 552402, 5515815, 49.7925, 3.72806, 145),
('02548', 'La Neuville-lès-Dorengt', '31T', 548337, 5536470, 49.9786, 3.67417, 140),
('02549', 'Neuville-Saint-Amand', '31T', 523975, 5519289, 49.8256, 3.33333, 120),
('02550', 'Neuville-sur-Ailette', '31T', 550579, 5479538, 49.4664, 3.69806, 101),
('02551', 'Neuville-sur-Margival', '31T', 529011, 5477837, 49.4525, 3.40028, 140),
('02552', 'Neuvillette', '31T', 534784, 5522529, 49.8542, 3.48389, 80),
('02553', 'Nizy-le-Comte', '31T', 576182, 5491233, 49.5689, 4.05362, 90),
('02554', 'Nogentel', '31T', 529493, 5429078, 49.0139, 3.40334, 70),
('02555', 'Nogent-l''Artaud', '31T', 523666, 5423708, 48.9658, 3.32334, 70),
('02556', 'Noircourt', '31T', 578830, 5502514, 49.67, 4.0925, 130),
('02557', 'Noroy-sur-Ourcq', '31T', 515539, 5450329, 49.2056, 3.21333, 151),
('02558', 'Le Nouvion-en-Thiérache', '31T', 556258, 5540810, 50.0169, 3.78527, 190),
('02559', 'Nouvion-et-Catillon', '31T', 534913, 5505574, 49.7017, 3.48417, 57),
('02560', 'Nouvion-le-Comte', '31T', 533573, 5505226, 49.6986, 3.46555, 55),
('02561', 'Nouvion-le-Vineux', '31T', 544286, 5483560, 49.5031, 3.61166, 80),
('02562', 'Nouvron-Vingré', '31T', 514543, 5475124, 49.4286, 3.20056, 120),
('02563', 'Noyales', '31T', 539838, 5527598, 49.8994, 3.55472, 85),
('02564', 'Noyant-et-Aconin', '31T', 524621, 5464721, 49.3347, 3.33889, 89),
('02566', 'Ognes', '31T', 514188, 5495505, 49.6119, 3.19639, 58),
('02567', 'Ohis', '31T', 572330, 5531242, 49.9292, 4.00778, 150),
('02568', 'Oigny-en-Valois', '31T', 510053, 5451829, 49.2192, 3.13805, 150),
('02569', 'Oisy', '31T', 547916, 5541161, 50.0208, 3.66888, 147),
('02570', 'Ollezy', '31T', 510409, 5509239, 49.7356, 3.14445, 68),
('02571', 'Omissy', '31T', 522551, 5525398, 49.8806, 3.31389, 80),
('02572', 'Orainville', '31T', 574254, 5470450, 49.3822, 4.02306, 65),
('02573', 'Orgeval', '31T', 550879, 5484050, 49.5069, 3.70278, 120),
('02574', 'Origny-en-Thiérache', '31T', 573297, 5527610, 49.8964, 4.02056, 141),
('02575', 'Origny-Sainte-Benoite', '31T', 535354, 5520834, 49.8389, 3.49167, 77),
('02576', 'Osly-Courtil', '31T', 516486, 5472103, 49.4014, 3.22723, 50),
('02577', 'Ostel', '31T', 541351, 5475384, 49.4297, 3.57027, 100),
('02578', 'Oulches-la-Vallée-Foulon', '31T', 554103, 5475310, 49.4281, 3.74611, 100),
('02579', 'Oulchy-la-Ville', '31T', 525571, 5451231, 49.2133, 3.35111, 140),
('02580', 'Oulchy-le-Château', '31T', 527033, 5450281, 49.2047, 3.37112, 110),
('02581', 'Paars', '31T', 543636, 5464160, 49.3286, 3.60055, 84),
('02582', 'Paissy', '31T', 550663, 5474845, 49.4242, 3.69862, 160),
('02583', 'Pancy-Courtecon', '31T', 547432, 5480313, 49.4736, 3.65472, 90),
('02584', 'Papleux', '31T', 563418, 5541292, 50.0206, 3.88528, 198),
('02585', 'Parcy-et-Tigny', '31T', 523379, 5457613, 49.2708, 3.32138, 140),
('02586', 'Parfondeval', '31T', 583356, 5510644, 49.7425, 4.15695, 211),
('02587', 'Parfondru', '31T', 551480, 5486403, 49.5281, 3.71139, 100),
('02588', 'Pargnan', '31T', 550285, 5472155, 49.4, 3.69306, 150),
('02589', 'Pargny-Filain', '31T', 539331, 5479075, 49.4631, 3.54278, 100),
('02590', 'Pargny-la-Dhuys', '31T', 540510, 5422446, 48.9536, 3.55334, 130),
('02591', 'Pargny-les-Bois', '31T', 544965, 5508428, 49.7267, 3.62389, 129),
('02592', 'Parpeville', '31T', 539413, 5514839, 49.7847, 3.54751, 120),
('02593', 'Pasly', '31T', 521604, 5472244, 49.4025, 3.29778, 70),
('02594', 'Passy-en-Valois', '31T', 514174, 5446063, 49.1672, 3.19444, 138),
('02595', 'Passy-sur-Marne', '31T', 541720, 5434561, 49.0625, 3.57111, 80),
('02596', 'Pavant', '31T', 521088, 5422555, 48.9556, 3.28806, 70),
('02597', 'Perles', '31T', 547676, 5463855, 49.3256, 3.65611, 165),
('02598', 'Pernant', '31T', 517279, 5469758, 49.3803, 3.23805, 51),
('02599', 'Pierremande', '31T', 518215, 5491224, 49.5733, 3.25194, 62),
('02600', 'Pierrepont', '31T', 557121, 5500543, 49.6547, 3.79138, 72),
('02601', 'Pignicourt', '31T', 574750, 5474009, 49.4142, 4.03056, 61),
('02602', 'Pinon', '31T', 532449, 5481995, 49.4897, 3.44805, 77),
('02604', 'Pithon', '31T', 507143, 5511242, 49.7536, 3.09916, 65),
('02605', 'Pleine-Selve', '31T', 537908, 5515570, 49.7914, 3.52667, 145),
('02606', 'Le Plessier-Huleu', '31T', 525033, 5454038, 49.2386, 3.3439, 190),
('02607', 'Ploisy', '31T', 521211, 5464553, 49.3333, 3.29195, 100),
('02608', 'Plomion', '31T', 573288, 5517973, 49.8097, 4.01861, 180),
('02609', 'Ployart-et-Vaurseine', '31T', 554017, 5481980, 49.4881, 3.74583, 120),
('02610', 'Pommiers', '31T', 519754, 5471249, 49.3936, 3.27223, 60),
('02612', 'Pont-Arcy', '31T', 545735, 5471466, 49.3942, 3.63028, 55),
('02613', 'Pontavert', '31T', 559687, 5473083, 49.4075, 3.82277, 53),
('02614', 'Pontru', '31T', 515519, 5528060, 49.9047, 3.21612, 75),
('02615', 'Pontruet', '31T', 516554, 5528619, 49.9097, 3.23055, 92),
('02616', 'Pont-Saint-Mard', '31T', 520778, 5482895, 49.4983, 3.28695, 71),
('02617', 'Pouilly-sur-Serre', '31T', 542522, 5503405, 49.6817, 3.58945, 61),
('02618', 'Prémont', '31T', 528162, 5540064, 50.0122, 3.39306, 155),
('02619', 'Prémontré', '31T', 529883, 5487755, 49.5417, 3.41306, 110),
('02620', 'Presles-et-Boves', '31T', 540515, 5471301, 49.3931, 3.55833, 50),
('02621', 'Presles-et-Thierny', '31T', 545366, 5484403, 49.5106, 3.62667, 90),
('02622', 'Priez', '31T', 519350, 5442590, 49.1358, 3.26527, 130),
('02623', 'Prisces', '31T', 562095, 5514466, 49.7794, 3.8625, 110),
('02624', 'Proisy', '31T', 553285, 5527529, 49.8978, 3.74194, 110),
('02625', 'Proix', '31T', 540813, 5527914, 49.9022, 3.56833, 90),
('02626', 'Prouvais', '31T', 570528, 5479482, 49.4639, 3.97333, 110),
('02627', 'Proviseux-et-Plesnoy', '31T', 573182, 5479702, 49.4656, 4.00999, 100),
('02628', 'Puiseux-en-Retz', '31T', 509492, 5460475, 49.2969, 3.13055, 97),
('02629', 'Puisieux-et-Clanlieu', '31T', 548700, 5522729, 49.855, 3.6775, 140),
('02631', 'Quierzy', '31T', 510263, 5490987, 49.5714, 3.14195, 45),
('02632', 'Quincy-Basse', '31T', 527325, 5484839, 49.5156, 3.3775, 81),
('02633', 'Quincy-sous-le-Mont', '31T', 540223, 5461726, 49.3069, 3.55334, 80),
('02634', 'Raillimont', '31T', 583155, 5506779, 49.7078, 4.15333, 170),
('02635', 'Ramicourt', '31T', 523709, 5534298, 49.9606, 3.33055, 125),
('02636', 'Regny', '31T', 530945, 5519942, 49.8311, 3.43028, 75),
('02637', 'Remaucourt', '31T', 524479, 5527259, 49.8972, 3.34084, 85),
('02638', 'Remies', '31T', 537675, 5503091, 49.6792, 3.52223, 60),
('02639', 'Remigny', '31T', 520964, 5507571, 49.7203, 3.29084, 92),
('02640', 'Renansart', '31T', 533508, 5509209, 49.7344, 3.465, 120),
('02641', 'Renneval', '31T', 575472, 5510466, 49.7419, 4.0475, 190),
('02642', 'Résigny', '31T', 586886, 5510205, 49.7381, 4.20583, 190),
('02643', 'Ressons-le-Long', '31T', 510886, 5470637, 49.3883, 3.15, 70),
('02644', 'Retheuil', '31T', 500727, 5463369, 49.3231, 3.01, 90),
('02645', 'Reuilly-Sauvigny', '31T', 540689, 5434028, 49.0578, 3.55694, 100),
('02646', 'Révillon', '31T', 550865, 5468269, 49.365, 3.70056, 70),
('02647', 'Ribeauville', '31T', 541750, 5543426, 50.0417, 3.58306, 150),
('02648', 'Ribemont', '31T', 533186, 5516064, 49.7961, 3.46111, 90),
('02649', 'Rocourt-Saint-Martin', '31T', 528338, 5444358, 49.1514, 3.38861, 130),
('02650', 'Rocquigny', '31T', 570318, 5541717, 50.0236, 3.98166, 170),
('02651', 'Rogécourt', '31T', 530858, 5500052, 49.6522, 3.4275, 59),
('02652', 'Rogny', '31T', 558306, 5513404, 49.7703, 3.80972, 100),
('02653', 'Romeny-sur-Marne', '31T', 524616, 5424886, 48.9764, 3.33639, 63),
('02654', 'Romery', '31T', 552069, 5527424, 49.8969, 3.72499, 105),
('02655', 'Ronchères', '31T', 544002, 5443658, 49.1442, 3.60334, 210),
('02656', 'Roucy', '31T', 559187, 5469001, 49.3708, 3.81527, 100),
('02657', 'Rougeries', '31T', 556588, 5516999, 49.8028, 3.78639, 100),
('02658', 'Roupy', '31T', 513269, 5517986, 49.8142, 3.18444, 95),
('02659', 'Rouvroy', '31T', 522883, 5522558, 49.855, 3.31834, 80),
('02660', 'Rouvroy-sur-Serre', '31T', 584593, 5508346, 49.7217, 4.17361, 180),
('02661', 'Royaucourt-et-Chailvet', '31T', 539102, 5485713, 49.5228, 3.54028, 119),
('02662', 'Rozet-Saint-Albin', '31T', 521857, 5449146, 49.1947, 3.3, 100),
('02663', 'Rozières-sur-Crise', '31T', 525775, 5463800, 49.3264, 3.35472, 70),
('02664', 'Rozoy-Bellevalle', '31T', 533453, 5419003, 48.9231, 3.45667, 193),
('02665', 'Grand-Rozoy', '31T', 528169, 5453559, 49.2342, 3.38694, 160),
('02666', 'Rozoy-sur-Serre', '31T', 581386, 5507185, 49.7117, 4.12889, 150),
('02667', 'Saconin-et-Breuil', '31T', 518014, 5467136, 49.3567, 3.24806, 73),
('02668', 'Sains-Richaumont', '31T', 551108, 5519416, 49.825, 3.71056, 142),
('02669', 'Saint-Agnan', '31T', 543543, 5429881, 49.0203, 3.59556, 113),
('02670', 'Saint-Algis', '31T', 559129, 5527714, 49.8989, 3.82333, 140),
('02671', 'Saint-Aubin', '31T', 513815, 5484108, 49.5094, 3.19083, 66),
('02672', 'Saint-Bandry', '31T', 512281, 5468818, 49.3719, 3.16917, 70),
('02673', 'Saint-Christophe-à-Berry', '31T', 509649, 5474464, 49.4228, 3.13305, 60),
('02674', 'Saint-Clément', '31T', 577158, 5514351, 49.7767, 4.07167, 171),
('02675', 'Sainte-Croix', '31T', 556499, 5481233, 49.4811, 3.77999, 129),
('02676', 'Saint-Erme-Outre-et-Ramecourt', '31T', 560803, 5485047, 49.515, 3.83999, 130),
('02677', 'Saint-Eugène', '31T', 538771, 5429753, 49.0194, 3.53028, 81),
('02678', 'Sainte-Geneviève', '31T', 577386, 5508176, 49.7211, 4.07361, 140),
('02679', 'Saint-Gengoulph', '31T', 516013, 5440664, 49.1186, 3.21945, 134),
('02680', 'Saint-Gobain', '31T', 527241, 5493702, 49.5953, 3.37695, 160),
('02681', 'Saint-Gobert', '31T', 558849, 5516869, 49.8014, 3.81778, 105),
('02682', 'Saint-Mard', '31T', 542315, 5470635, 49.3869, 3.58306, 80),
('02683', 'Saint-Martin-Rivière', '31T', 538546, 5543557, 50.0431, 3.53833, 100),
('02684', 'Saint-Michel', '31T', 581197, 5530380, 49.9203, 4.13112, 200),
('02685', 'Saint-Nicolas-aux-Bois', '31T', 531137, 5493445, 49.5928, 3.43084, 96),
('02686', 'Saint-Paul-aux-Bois', '31T', 514833, 5486798, 49.5336, 3.20499, 60),
('02687', 'Saint-Pierre-Aigle', '31T', 513444, 5463293, 49.3222, 3.185, 100),
('02688', 'Saint-Pierre-lès-Franqueville', '31T', 559147, 5518850, 49.8192, 3.82223, 115),
('02689', 'Saint-Pierremont', '31T', 563487, 5508273, 49.7236, 3.88083, 95),
('02690', 'Sainte-Preuve', '31T', 565609, 5496747, 49.6197, 3.90833, 90),
('02691', 'Saint-Quentin', '31T', 520549, 5521869, 49.8489, 3.28583, 96),
('02693', 'Saint-Rémy-Blanzy', '31T', 522727, 5454245, 49.2406, 3.31223, 150),
('02694', 'Saint-Simon', '31T', 512548, 5510325, 49.7453, 3.17417, 75),
('02695', 'Saint-Thibaut', '31T', 544874, 5460927, 49.2994, 3.61722, 80),
('02696', 'Saint-Thomas', '31T', 559479, 5482994, 49.4967, 3.8214, 110),
('02697', 'Samoussy', '31T', 553027, 5492687, 49.5844, 3.73361, 75),
('02698', 'Sancy-les-Cheminots', '31T', 534219, 5475736, 49.4333, 3.47195, 110),
('02699', 'Saponay', '31T', 534898, 5451251, 49.2131, 3.47917, 120),
('02701', 'Saulchery', '31T', 522441, 5424846, 48.9761, 3.30667, 78),
('02702', 'Savy', '31T', 514004, 5519779, 49.8303, 3.19472, 105),
('02703', 'Seboncourt', '31T', 534313, 5533737, 49.955, 3.47834, 153),
('02704', 'Selens', '31T', 515125, 5483278, 49.5019, 3.2089, 73),
('02705', 'La Selve', '31T', 572002, 5491299, 49.57, 3.99583, 94),
('02706', 'Septmonts', '31T', 525973, 5464666, 49.3342, 3.3575, 67),
('02707', 'Septvaux', '31T', 527335, 5490984, 49.5708, 3.37806, 113),
('02708', 'Sequehart', '31T', 524023, 5530902, 49.93, 3.33472, 135),
('02709', 'Serain', '31T', 526223, 5541722, 50.0272, 3.36611, 150),
('02710', 'Seraucourt-le-Grand', '31T', 515338, 5514254, 49.7806, 3.21305, 78),
('02711', 'Serches', '31T', 532609, 5465381, 49.3403, 3.44889, 90),
('02712', 'Sergy', '31T', 541640, 5447901, 49.1825, 3.57139, 140),
('02713', 'Seringes-et-Nesles', '31T', 539214, 5450230, 49.2036, 3.53833, 160),
('02714', 'Sermoise', '31T', 532808, 5469119, 49.3739, 3.45194, 55),
('02715', 'Serval', '31T', 549868, 5466962, 49.3533, 3.68666, 130),
('02716', 'Servais', '31T', 524878, 5496624, 49.6217, 3.34444, 50),
('02717', 'Séry-lès-Mézières', '31T', 530321, 5513607, 49.7742, 3.42111, 75),
('02718', 'Silly-la-Poterie', '31T', 510746, 5449360, 49.1969, 3.1475, 100),
('02719', 'Sinceny', '31T', 517825, 5493817, 49.5967, 3.24666, 65),
('02720', 'Sissonne', '31T', 564609, 5491454, 49.5722, 3.89362, 75),
('02721', 'Sissy', '31T', 531142, 5516824, 49.8031, 3.43277, 75),
('02722', 'Soissons', '31T', 523670, 5469844, 49.3808, 3.32611, 48),
('02723', 'Soize', '31T', 578098, 5506025, 49.7017, 4.08306, 150),
('02724', 'Sommelans', '31T', 521397, 5442597, 49.1358, 3.29334, 150),
('02725', 'Sommeron', '31T', 567393, 5533741, 49.9522, 3.93944, 208),
('02726', 'Sommette-Eaucourt', '31T', 508526, 5509761, 49.7403, 3.11833, 65),
('02727', 'Sons-et-Ronchères', '31T', 548653, 5512475, 49.7628, 3.67556, 120),
('02728', 'Sorbais', '31T', 564104, 5528821, 49.9083, 3.89278, 125),
('02729', 'Soucy', '31T', 509166, 5462358, 49.3139, 3.12611, 105),
('02730', 'Soupir', '31T', 543526, 5472899, 49.4072, 3.59999, 58),
('02731', 'Le Sourd', '31T', 553783, 5523611, 49.8625, 3.74833, 102),
('02732', 'Surfontaine', '31T', 533537, 5511032, 49.7508, 3.46555, 115),
('02733', 'Suzy', '31T', 533856, 5488736, 49.5503, 3.46806, 91),
('02734', 'Taillefontaine', '31T', 503049, 5462073, 49.3114, 3.04195, 130),
('02735', 'Tannières', '31T', 540216, 5459934, 49.2908, 3.55306, 110),
('02736', 'Tartiers', '31T', 517401, 5475719, 49.4339, 3.24, 135),
('02737', 'Tavaux-et-Pontséricourt', '31T', 565059, 5509157, 49.7314, 3.90278, 100),
('02738', 'Tergnier', '31T', 521052, 5500438, 49.6561, 3.29167, 52),
('02739', 'Terny-Sorny', '31T', 526799, 5477332, 49.4481, 3.36972, 150),
('02740', 'Thenailles', '31T', 567716, 5519135, 49.8208, 3.94138, 150),
('02741', 'Thenelles', '31T', 533801, 5520052, 49.8319, 3.47, 75),
('02742', 'Thiernu', '31T', 556837, 5512369, 49.7611, 3.78917, 85),
('02743', 'Le Thuel', '31T', 577699, 5500304, 49.6503, 4.07639, 170),
('02744', 'Torcy-en-Valois', '31T', 520444, 5437190, 49.0872, 3.28, 105),
('02745', 'Toulis-et-Attencourt', '31T', 553582, 5505696, 49.7014, 3.74306, 81),
('02746', 'Travecy', '31T', 525867, 5503979, 49.6878, 3.35862, 70),
('02747', 'Trefcon', '31T', 506948, 5522884, 49.8583, 3.09666, 97),
('02748', 'Trélou-sur-Marne', '31T', 544447, 5436095, 49.0761, 3.60861, 69),
('02749', 'Troësnes', '31T', 512548, 5448962, 49.1933, 3.17222, 80),
('02750', 'Trosly-Loire', '31T', 516627, 5485290, 49.52, 3.22972, 64),
('02751', 'Trucy', '31T', 544294, 5480132, 49.4722, 3.61139, 90),
('02752', 'Tugny-et-Pont', '31T', 511204, 5511866, 49.7592, 3.15556, 75),
('02753', 'Tupigny', '31T', 543536, 5534082, 49.9575, 3.60694, 103),
('02754', 'Ugny-le-Gay', '31T', 511587, 5500872, 49.6603, 3.16055, 90),
('02755', 'Urcel', '31T', 540557, 5481987, 49.4892, 3.56, 79),
('02756', 'Urvillers', '31T', 522413, 5515391, 49.7906, 3.31139, 115),
('02757', 'Vadencourt', '31T', 541447, 5531070, 49.9306, 3.5775, 95),
('02758', 'Vailly-sur-Aisne', '31T', 537439, 5473132, 49.4097, 3.51611, 50),
('02759', 'La Vallée-au-Blé', '31T', 556743, 5523210, 49.8586, 3.78945, 169),
('02760', 'La Vallée-Mulâtre', '31T', 539958, 5540973, 50.0197, 3.55778, 135),
('02761', 'Variscourt', '31T', 571502, 5474305, 49.4172, 3.98584, 67),
('02762', 'Vassens', '31T', 511311, 5479378, 49.4669, 3.15611, 67),
('02763', 'Vasseny', '31T', 535424, 5466819, 49.3531, 3.48777, 60),
('02764', 'Vassogne', '31T', 552841, 5474618, 49.4219, 3.72862, 100),
('02765', 'Vaucelles-et-Beffecourt', '31T', 540162, 5486524, 49.53, 3.55501, 80),
('02766', 'Vaudesson', '31T', 535199, 5479881, 49.4706, 3.48583, 103),
('02767', 'Vauxrezis', '31T', 520330, 5473444, 49.4133, 3.28028, 60),
('02768', 'Vauxaillon', '31T', 529439, 5480650, 49.4778, 3.40639, 66),
('02769', 'Vaux-Andigny', '31T', 536791, 5541352, 50.0233, 3.51361, 125),
('02770', 'Vauxbuin', '31T', 521321, 5467271, 49.3578, 3.29361, 60),
('02771', 'Vauxcéré', '31T', 546289, 5465572, 49.3411, 3.63723, 150),
('02772', 'Vaux-en-Vermandois', '31T', 510190, 5518998, 49.8233, 3.14167, 80),
('02773', 'Vauxtin', '31T', 543819, 5466571, 49.3503, 3.60333, 153),
('02774', 'Vendelles', '31T', 509833, 5528695, 49.9106, 3.13695, 110),
('02775', 'Vendeuil', '31T', 525371, 5507189, 49.7167, 3.35195, 60),
('02776', 'Vendhuile', '31T', 514808, 5539639, 50.0089, 3.20666, 100),
('02777', 'Vendières', '31T', 532815, 5413348, 48.8722, 3.4475, 150),
('02778', 'Vendresse-Beaulne', '31T', 548343, 5475195, 49.4275, 3.66667, 110),
('02779', 'Vénérolles', '31T', 545965, 5536604, 49.98, 3.6411, 120),
('02780', 'Venizel', '31T', 528437, 5468292, 49.3667, 3.39167, 50),
('02781', 'Verdilly', '31T', 531061, 5435541, 49.0719, 3.42528, 150),
('02782', 'Le Verguier', '31T', 512123, 5530336, 49.9253, 3.1689, 125),
('02783', 'Grand-Verly', '31T', 541957, 5532123, 49.94, 3.58472, 110),
('02784', 'Petit-Verly', '31T', 539977, 5535753, 49.9728, 3.5575, 164),
('02785', 'Vermand', '31T', 510698, 5524898, 49.8764, 3.14889, 95),
('02786', 'Verneuil-sous-Coucy', '31T', 522748, 5487813, 49.5425, 3.31444, 86),
('02787', 'Verneuil-sur-Serre', '31T', 548645, 5499966, 49.6503, 3.67389, 80),
('02788', 'Versigny', '31T', 531438, 5500272, 49.6542, 3.43555, 66),
('02789', 'Vervins', '31T', 565380, 5520682, 49.835, 3.90917, 170),
('02790', 'Vesles-et-Caumont', '31T', 556502, 5502266, 49.6703, 3.78306, 70),
('02791', 'Veslud', '31T', 553022, 5487036, 49.5336, 3.73278, 100),
('02792', 'Veuilly-la-Poterie', '31T', 515537, 5436958, 49.0853, 3.21278, 100),
('02793', 'Vézaponin', '31T', 516648, 5478465, 49.4586, 3.22973, 70),
('02794', 'Vézilly', '31T', 550407, 5447789, 49.1808, 3.69167, 170),
('02795', 'Vic-sur-Aisne', '31T', 508363, 5472578, 49.4058, 3.11528, 41),
('02796', 'Vichel-Nanteuil', '31T', 521152, 5448217, 49.1864, 3.29027, 130),
('02797', 'Viel-Arcy', '31T', 545385, 5469981, 49.3808, 3.62528, 80),
('02798', 'Viels-Maisons', '31T', 529276, 5416107, 48.8972, 3.39944, 180),
('02799', 'Vierzy', '31T', 520724, 5459796, 49.2906, 3.285, 102),
('02800', 'Viffort', '31T', 533569, 5423327, 48.9619, 3.4586, 180),
('02801', 'Vigneux-Hocquet', '31T', 571353, 5510132, 49.7394, 3.99028, 150),
('02802', 'La Ville-aux-Bois-lès-Dizy', '31T', 571545, 5501610, 49.6628, 3.99139, 145),
('02803', 'La Ville-aux-Bois-lès-Pontavert', '31T', 561697, 5475359, 49.4278, 3.85083, 65),
('02804', 'Villemontoire', '31T', 524356, 5460768, 49.2992, 3.33501, 138),
('02805', 'Villeneuve-Saint-Germain', '31T', 526071, 5469638, 49.3789, 3.35917, 50),
('02806', 'Villeneuve-sur-Fère', '31T', 534559, 5447265, 49.1772, 3.47417, 200),
('02807', 'Villequier-Aumont', '31T', 514856, 5500417, 49.6561, 3.20583, 80),
('02808', 'Villeret', '31T', 513849, 5533522, 49.9539, 3.19306, 140),
('02809', 'Villers-Agron-Aiguizy', '31T', 550913, 5445601, 49.1611, 3.69834, 130),
('02810', 'Villers-Cotterêts', '31T', 506913, 5455592, 49.2531, 3.095, 138),
('02811', 'Villers-en-Prayères', '31T', 549177, 5469797, 49.3789, 3.6775, 60),
('02812', 'Villers-Hélon', '31T', 519038, 5456732, 49.2631, 3.26167, 150),
('02813', 'Villers-le-Sec', '31T', 536098, 5514137, 49.7786, 3.50139, 125),
('02814', 'Villers-lès-Guise', '31T', 548696, 5529833, 49.9189, 3.67834, 150),
('02815', 'Villers-Saint-Christophe', '31T', 506719, 5514206, 49.7803, 3.09333, 86),
('02816', 'Villers-sur-Fère', '31T', 538928, 5447850, 49.1822, 3.53417, 160),
('02817', 'Ville-Savoye', '31T', 546616, 5460355, 49.2942, 3.64112, 90),
('02818', 'Villiers-Saint-Denis', '31T', 519630, 5426502, 48.9911, 3.26833, 95),
('02819', 'Vincy-Reuil-et-Magny', '31T', 576072, 5507664, 49.7167, 4.05528, 137),
('02820', 'Viry-Noureuil', '31T', 517672, 5497800, 49.6325, 3.24472, 55),
('02821', 'Vivaise', '31T', 540448, 5496594, 49.6206, 3.55999, 77),
('02822', 'Vivières', '31T', 507532, 5460997, 49.3017, 3.1036, 136),
('02823', 'Voharies', '31T', 557145, 5515338, 49.7878, 3.79388, 105),
('02824', 'Vorges', '31T', 547308, 5485346, 49.5189, 3.65361, 90),
('02826', 'Voulpaix', '31T', 559702, 5521049, 49.8389, 3.83028, 146),
('02827', 'Voyenne', '31T', 552654, 5508343, 49.7253, 3.73055, 75),
('02828', 'Vregny', '31T', 530790, 5472905, 49.4081, 3.42444, 130),
('02829', 'Vuillery', '31T', 528077, 5475423, 49.4308, 3.38722, 90),
('02830', 'Wassigny', '31T', 542889, 5540254, 50.0131, 3.59861, 150),
('02831', 'Watigny', '31T', 586033, 5528509, 49.9028, 4.19805, 238),
('02832', 'Wiège-Faty', '31T', 551588, 5525659, 49.8811, 3.71806, 150),
('02833', 'Wimy', '31T', 571565, 5531757, 49.9339, 3.99722, 160),
('02834', 'Wissignicourt', '31T', 532386, 5485824, 49.5242, 3.44749, 100),
('03001', 'Abrest', '31T', 534438, 5105255, 46.1, 3.44555, 280),
('03002', 'Agonges', '31T', 512211, 5161345, 46.6056, 3.15945, 230),
('03003', 'Ainay-le-Château', '31T', 476603, 5173138, 46.7114, 2.69389, 216),
('03004', 'Andelaroche', '31T', 557656, 5122807, 46.2564, 3.74806, 400),
('03005', 'Archignat', '31T', 455711, 5135505, 46.3717, 2.42416, 370),
('03006', 'Arfeuilles', '31T', 556237, 5111650, 46.1561, 3.72832, 426),
('03007', 'Arpheuilles-Saint-Priest', '31T', 475236, 5118943, 46.2236, 2.67889, 520),
('03008', 'Arronnes', '31T', 543981, 5100933, 46.0606, 3.56861, 360),
('03009', 'Aubigny', '31T', 512491, 5170019, 46.6836, 3.16334, 210),
('03010', 'Audes', '31T', 466084, 5145007, 46.4578, 2.55833, 260),
('03011', 'Aurouër', '31T', 522983, 5170451, 46.6872, 3.30056, 246),
('03012', 'Autry-Issards', '31T', 510477, 5155045, 46.5489, 3.13666, 257),
('03013', 'Avermes', '31T', 523557, 5159465, 46.5883, 3.3075, 219),
('03014', 'Avrilly', '31T', 575404, 5131643, 46.3342, 3.97972, 280),
('03015', 'Bagneux', '31T', 515769, 5167218, 46.6583, 3.20611, 207),
('03016', 'Barberier', '31T', 519366, 5118738, 46.2219, 3.25111, 269),
('03017', 'Barrais-Bussolles', '31T', 555073, 5126641, 46.2911, 3.715, 456),
('03018', 'Bayet', '31T', 520813, 5121614, 46.2478, 3.27, 285),
('03019', 'Beaulon', '31T', 551570, 5161028, 46.6008, 3.67333, 210),
('03020', 'Beaune-d''Allier', '31T', 491354, 5125257, 46.2808, 2.88777, 480),
('03021', 'Bègues', '31T', 512039, 5108287, 46.1281, 3.15584, 456),
('03022', 'Bellenaves', '31T', 506215, 5116303, 46.2003, 3.08055, 340),
('03023', 'Bellerive-sur-Allier', '31T', 531423, 5107121, 46.1169, 3.40667, 277),
('03024', 'Bert', '31T', 554398, 5130401, 46.325, 3.70667, 330),
('03025', 'Bessay-sur-Allier', '31T', 527951, 5143433, 46.4439, 3.36389, 220),
('03026', 'Besson', '31T', 520388, 5146335, 46.4703, 3.26556, 260),
('03027', 'Bézenet', '31T', 488112, 5130540, 46.3283, 2.84556, 310),
('03028', 'Billezois', '31T', 544204, 5117694, 46.2114, 3.57306, 304),
('03029', 'Billy', '31T', 533283, 5120280, 46.2353, 3.43167, 264),
('03030', 'Biozat', '31T', 520749, 5102662, 46.0772, 3.26834, 360),
('03031', 'Bizeneuille', '31T', 479931, 5139389, 46.4078, 2.73889, 301),
('03032', 'Blomard', '31T', 498417, 5126053, 46.2881, 2.97945, 408),
('03033', 'Bost', '31T', 540007, 5113869, 46.1772, 3.51833, 299),
('03034', 'Boucé', '31T', 537981, 5129412, 46.3172, 3.49333, 260),
('03035', 'Le Bouchaud', '31T', 569004, 5128480, 46.3064, 3.89611, 310),
('03036', 'Bourbon-l''Archambault', '31T', 504384, 5158957, 46.5842, 3.05722, 250),
('03037', 'Braize', '31T', 473544, 5168088, 46.6658, 2.65416, 234),
('03038', 'Bransat', '31T', 517728, 5129721, 46.3208, 3.23028, 281),
('03039', 'Bresnay', '31T', 519396, 5143122, 46.4414, 3.25251, 265),
('03040', 'Bressolles', '31T', 524306, 5153047, 46.5306, 3.31694, 230),
('03041', 'Le Brethon', '31T', 478394, 5157543, 46.5711, 2.71805, 340),
('03042', 'Le Breuil', '31T', 550765, 5114628, 46.1833, 3.65778, 360),
('03043', 'Broût-Vernet', '31T', 521200, 5115071, 46.1889, 3.27472, 300),
('03044', 'Brugheas', '31T', 528438, 5102693, 46.0772, 3.36777, 310),
('03045', 'Busset', '31T', 539748, 5100904, 46.0606, 3.51389, 500),
('03046', 'Buxières-les-Mines', '31T', 497185, 5146054, 46.4681, 2.96334, 310),
('03047', 'La Celle', '31T', 483549, 5119409, 46.2281, 2.78667, 480),
('03048', 'Cérilly', '31T', 486197, 5162706, 46.6178, 2.81972, 330),
('03049', 'Cesset', '31T', 516688, 5126786, 46.2944, 3.21667, 310),
('03050', 'La Chabanne', '31T', 558351, 5096885, 46.0231, 3.75389, 680),
('03051', 'Chambérat', '31T', 454938, 5140696, 46.4183, 2.41361, 407),
('03052', 'Chamblet', '31T', 477060, 5131097, 46.3331, 2.70195, 355),
('03053', 'Chantelle', '31T', 511843, 5120540, 46.2383, 3.15361, 323),
('03054', 'Chapeau', '31T', 540144, 5148440, 46.4883, 3.52306, 250),
('03055', 'La Chapelaude', '31T', 461835, 5140957, 46.4211, 2.50334, 250),
('03056', 'La Chapelle', '31T', 544364, 5104362, 46.0914, 3.57388, 427),
('03057', 'La Chapelle-aux-Chasses', '31T', 540688, 5168816, 46.6717, 3.53194, 220),
('03058', 'Chappes', '31T', 494426, 5137136, 46.3878, 2.92751, 365),
('03059', 'Chareil-Cintrat', '31T', 517124, 5123793, 46.2675, 3.22222, 280),
('03060', 'Charmeil', '31T', 530434, 5111808, 46.1592, 3.39417, 260),
('03061', 'Charmes', '31T', 519482, 5102597, 46.0767, 3.25195, 371),
('03062', 'Charroux', '31T', 512605, 5114708, 46.1858, 3.16334, 400),
('03063', 'Chassenard', '31T', 575259, 5143372, 46.4397, 3.97972, 236),
('03064', 'Château-sur-Allier', '31T', 502291, 5179205, 46.7664, 3.03, 200),
('03065', 'Châtel-de-Neuvre', '31T', 524063, 5139157, 46.4056, 3.31306, 250),
('03066', 'Châtel-Montagne', '31T', 552803, 5106959, 46.1142, 3.68333, 520),
('03067', 'Châtelperron', '31T', 548921, 5138689, 46.4, 3.63639, 270),
('03068', 'Châtelus', '31T', 556585, 5115821, 46.1936, 3.73333, 382),
('03069', 'Châtillon', '31T', 511239, 5146249, 46.4697, 3.14639, 360),
('03070', 'Chavenon', '31T', 496051, 5139913, 46.4128, 2.94862, 370),
('03071', 'Chavroches', '31T', 545307, 5133568, 46.3542, 3.58889, 280),
('03072', 'Chazemais', '31T', 463626, 5147768, 46.4825, 2.52611, 281),
('03073', 'Chemilly', '31T', 524154, 5148386, 46.4886, 3.31472, 240),
('03074', 'Chevagnes', '31T', 542138, 5162004, 46.6103, 3.55027, 223),
('03075', 'Chezelle', '31T', 509620, 5118283, 46.2181, 3.12473, 300),
('03076', 'Chézy', '31T', 535800, 5161840, 46.6092, 3.4675, 236),
('03077', 'Chirat-l''Église', '31T', 502762, 5121177, 46.2442, 3.03583, 420),
('03078', 'Chouvigny', '31T', 499506, 5108121, 46.1267, 2.99361, 400),
('03079', 'Cindré', '31T', 543469, 5130529, 46.3269, 3.56472, 290),
('03080', 'Cognat-Lyonne', '31T', 523721, 5106068, 46.1078, 3.30694, 368),
('03081', 'Colombier', '31T', 484226, 5124530, 46.2742, 2.79527, 400),
('03082', 'Commentry', '31T', 480101, 5126209, 46.2892, 2.74167, 376),
('03083', 'Contigny', '31T', 523488, 5133259, 46.3525, 3.30528, 230),
('03084', 'Cosne-d''Allier', '31T', 487013, 5146778, 46.4744, 2.83083, 230),
('03085', 'Coulandon', '31T', 519952, 5155470, 46.5525, 3.26027, 257),
('03086', 'Coulanges', '31T', 565898, 5148541, 46.4872, 3.85861, 224),
('03087', 'Couleuvre', '31T', 493073, 5168713, 46.6719, 2.90944, 263),
('03088', 'Courçais', '31T', 456623, 5146517, 46.4708, 2.435, 330),
('03089', 'Coutansouze', '31T', 500964, 5118276, 46.2181, 3.0125, 493),
('03090', 'Couzon', '31T', 509394, 5167204, 46.6583, 3.12278, 220),
('03091', 'Créchy', '31T', 532668, 5123116, 46.2608, 3.42389, 250),
('03092', 'Cressanges', '31T', 512524, 5143412, 46.4442, 3.16305, 423),
('03093', 'Creuzier-le-Neuf', '31T', 534452, 5114206, 46.1806, 3.44638, 300),
('03094', 'Creuzier-le-Vieux', '31T', 533816, 5112968, 46.1694, 3.43806, 363),
('03095', 'Cusset', '31T', 535361, 5109118, 46.1347, 3.45778, 271),
('03096', 'Deneuille-lès-Chantelle', '31T', 510964, 5121341, 46.2456, 3.14223, 329),
('03097', 'Deneuille-les-Mines', '31T', 483274, 5136262, 46.3797, 2.7825, 280),
('03098', 'Désertines', '31T', 470701, 5133593, 46.3553, 2.61917, 240),
('03099', 'Deux-Chaises', '31T', 503033, 5136270, 46.38, 3.03944, 450),
('03100', 'Diou', '31T', 556959, 5153698, 46.5344, 3.74278, 230),
('03101', 'Domérat', '31T', 464292, 5134121, 46.3597, 2.53583, 240),
('03102', 'Dompierre-sur-Besbre', '31T', 552071, 5152327, 46.5225, 3.67889, 221),
('03103', 'Le Donjon', '31T', 560933, 5133333, 46.3508, 3.79194, 295),
('03104', 'Doyet', '31T', 484479, 5131382, 46.3358, 2.79833, 317),
('03105', 'Droiturier', '31T', 555475, 5120008, 46.2314, 3.71944, 440),
('03106', 'Durdat-Larequille', '31T', 477090, 5122022, 46.2514, 2.70278, 497),
('03107', 'Ébreuil', '31T', 506911, 5107045, 46.1169, 3.08944, 308),
('03108', 'Échassières', '31T', 495027, 5114574, 46.1847, 2.93556, 574),
('03109', 'Escurolles', '31T', 520616, 5110070, 46.1439, 3.26694, 300),
('03110', 'Espinasse-Vozelle', '31T', 524915, 5108048, 46.1256, 3.3225, 331),
('03111', 'Estivareilles', '31T', 470737, 5141248, 46.4242, 2.61916, 210),
('03112', 'Étroussat', '31T', 517182, 5118485, 46.2197, 3.22278, 290),
('03113', 'Ferrières-sur-Sichon', '31T', 550200, 5097122, 46.0258, 3.64861, 541),
('03114', 'La Ferté-Hauterive', '31T', 526074, 5138301, 46.3978, 3.33917, 230),
('03115', 'Fleuriel', '31T', 513717, 5125266, 46.2808, 3.17805, 370),
('03116', 'Fourilles', '31T', 515076, 5120948, 46.2419, 3.19555, 260),
('03117', 'Franchesse', '31T', 502636, 5164883, 46.6375, 3.03444, 314),
('03118', 'Gannat', '31T', 515222, 5105332, 46.1014, 3.19694, 341),
('03119', 'Gannay-sur-Loire', '31T', 546608, 5175465, 46.7311, 3.61, 203),
('03120', 'Garnat-sur-Engièvre', '31T', 550647, 5164570, 46.6328, 3.66166, 207),
('03121', 'Gennetines', '31T', 531529, 5164965, 46.6375, 3.41194, 240),
('03122', 'Gipcy', '31T', 504263, 5149790, 46.5017, 3.05556, 380),
('03123', 'Givarlais', '31T', 473102, 5145095, 46.4589, 2.64972, 323),
('03124', 'Gouise', '31T', 533155, 5139848, 46.4114, 3.43139, 266),
('03125', 'La Guillermie', '31T', 549485, 5092394, 45.9833, 3.63888, 720),
('03126', 'Hauterive', '31T', 534531, 5104021, 46.0889, 3.44667, 268),
('03127', 'Hérisson', '31T', 477965, 5150693, 46.5094, 2.71278, 200),
('03128', 'Huriel', '31T', 459814, 5135569, 46.3725, 2.4775, 327),
('03129', 'Hyds', '31T', 486968, 5125604, 46.2839, 2.83083, 486),
('03130', 'Isle-et-Bardais', '31T', 484282, 5170705, 46.6897, 2.79444, 230),
('03131', 'Isserpent', '31T', 546966, 5112344, 46.1631, 3.60833, 389),
('03132', 'Jaligny-sur-Besbre', '31T', 545542, 5136471, 46.3803, 3.59222, 250),
('03133', 'Jenzat', '31T', 515120, 5111720, 46.1589, 3.19583, 300),
('03134', 'Laféline', '31T', 512995, 5132857, 46.3492, 3.16889, 400),
('03135', 'Lalizolle', '31T', 500279, 5111331, 46.1556, 3.00361, 557),
('03136', 'Lamaids', '31T', 456189, 5127661, 46.3011, 2.43111, 497),
('03137', 'Langy', '31T', 536367, 5123939, 46.2681, 3.47195, 300),
('03138', 'Lapalisse', '31T', 548498, 5121986, 46.2497, 3.62916, 280),
('03139', 'Laprugne', '31T', 557616, 5092742, 45.9858, 3.74389, 700),
('03140', 'Lavault-Sainte-Anne', '31T', 469200, 5128384, 46.3083, 2.60001, 230),
('03141', 'Lavoine', '31T', 553987, 5091846, 45.9781, 3.69694, 800),
('03142', 'Lenax', '31T', 562852, 5127581, 46.2989, 3.81611, 360),
('03143', 'Lételon', '31T', 468056, 5167004, 46.6558, 2.5825, 200),
('03144', 'Liernolles', '31T', 557766, 5138242, 46.3953, 3.75139, 310),
('03145', 'Lignerolles', '31T', 466851, 5125310, 46.2806, 2.56972, 359),
('03146', 'Limoise', '31T', 504079, 5169236, 46.6767, 3.05333, 276),
('03147', 'Loddes', '31T', 558906, 5126368, 46.2883, 3.76472, 430),
('03148', 'Loriges', '31T', 526520, 5124043, 46.2694, 3.34417, 257),
('03149', 'Louchy-Montfand', '31T', 518844, 5128181, 46.3069, 3.24472, 270),
('03150', 'Louroux-Bourbonnais', '31T', 487773, 5153412, 46.5342, 2.84055, 319),
('03151', 'Louroux-de-Beaune', '31T', 488875, 5126681, 46.2936, 2.85556, 450),
('03152', 'Louroux-de-Bouble', '31T', 498586, 5119202, 46.2264, 2.98166, 500),
('03153', 'Louroux-Hodement', '31T', 478137, 5145260, 46.4606, 2.71528, 290),
('03154', 'Luneau', '31T', 573163, 5134826, 46.3631, 3.95111, 270),
('03155', 'Lurcy-Lévis', '31T', 495373, 5175348, 46.7317, 2.93944, 220),
('03156', 'Lusigny', '31T', 537623, 5159474, 46.5878, 3.49111, 240),
('03157', 'Magnet', '31T', 538542, 5118428, 46.2183, 3.49972, 289),
('03158', 'Maillet', '31T', 473389, 5147285, 46.4786, 2.65333, 300),
('03159', 'Malicorne', '31T', 483250, 5127527, 46.3011, 2.7825, 390),
('03160', 'Marcenat', '31T', 530606, 5120266, 46.2353, 3.39695, 260),
('03161', 'Marcillat-en-Combraille', '31T', 471801, 5112723, 46.1675, 2.63472, 494),
('03162', 'Marigny', '31T', 515962, 5158637, 46.5811, 3.20833, 260),
('03163', 'Mariol', '31T', 538487, 5096482, 46.0208, 3.49723, 300),
('03164', 'Le Mayet-d''École', '31T', 518485, 5112439, 46.1653, 3.23944, 318),
('03165', 'Le Mayet-de-Montagne', '31T', 551599, 5102134, 46.0708, 3.66723, 541),
('03166', 'Mazerier', '31T', 514679, 5107861, 46.1242, 3.19, 400),
('03167', 'Mazirat', '31T', 464674, 5118933, 46.2231, 2.54194, 410),
('03168', 'Meaulne', '31T', 470639, 5160571, 46.5981, 2.61667, 180),
('03169', 'Meillard', '31T', 518239, 5137408, 46.39, 3.23722, 348),
('03170', 'Meillers', '31T', 507267, 5150349, 46.5067, 3.09472, 360),
('03171', 'Mercy', '31T', 539717, 5145165, 46.4589, 3.51722, 281),
('03172', 'Mesples', '31T', 450789, 5142364, 46.4331, 2.35945, 395);
INSERT INTO `ods_communes` (`oc_code_insee`, `oc_nom`, `oc_secteur`, `oc_x_utm`, `oc_y_utm`, `oc_latitude`, `oc_longitude`, `oc_altitude`) VALUES
('03173', 'Molinet', '31T', 571328, 5145547, 46.4597, 3.92889, 240),
('03174', 'Molles', '31T', 543213, 5106236, 46.1083, 3.55917, 464),
('03175', 'Monestier', '31T', 508885, 5122541, 46.2564, 3.11528, 316),
('03176', 'Monétay-sur-Allier', '31T', 523518, 5136500, 46.3817, 3.30583, 280),
('03177', 'Monétay-sur-Loire', '31T', 562808, 5142181, 46.4303, 3.8175, 270),
('03178', 'Montaiguët-en-Forez', '31T', 561706, 5124513, 46.2714, 3.80083, 410),
('03179', 'Montaigu-le-Blin', '31T', 539452, 5126798, 46.2936, 3.51222, 291),
('03180', 'Montbeugny', '31T', 537471, 5153053, 46.53, 3.48861, 270),
('03181', 'Montcombroux-les-Mines', '31T', 556870, 5133541, 46.3531, 3.73916, 381),
('03182', 'Monteignet-sur-l''Andelot', '31T', 519981, 5107598, 46.1217, 3.25861, 310),
('03183', 'Le Montet', '31T', 504206, 5139481, 46.4089, 3.05472, 463),
('03184', 'Montilly', '31T', 519228, 5162135, 46.6125, 3.25111, 233),
('03185', 'Montluçon', '31T', 469688, 5132024, 46.3411, 2.60611, 207),
('03186', 'Montmarault', '31T', 496536, 5129295, 46.3172, 2.95501, 477),
('03187', 'Montoldre', '31T', 534527, 5131305, 46.3344, 3.44861, 290),
('03188', 'Montord', '31T', 517844, 5126511, 46.2919, 3.23167, 290),
('03189', 'Montvicq', '31T', 486442, 5129649, 46.3203, 2.82389, 360),
('03190', 'Moulins', '31T', 525652, 5157158, 46.5675, 3.33472, 219),
('03191', 'Murat', '31T', 492996, 5138681, 46.4017, 2.90889, 303),
('03192', 'Nades', '31T', 497834, 5111640, 46.1583, 2.97195, 620),
('03193', 'Nassigny', '31T', 469689, 5149340, 46.4969, 2.605, 190),
('03194', 'Naves', '31T', 508705, 5113621, 46.1761, 3.11278, 413),
('03195', 'Néris-les-Bains', '31T', 473853, 5126047, 46.2875, 2.66056, 352),
('03196', 'Neuilly-en-Donjon', '31T', 568293, 5132732, 46.3447, 3.8875, 290),
('03197', 'Neuilly-le-Réal', '31T', 533187, 5145774, 46.4647, 3.43223, 250),
('03198', 'Neure', '31T', 498578, 5177137, 46.7478, 2.98138, 214),
('03200', 'Neuvy', '31T', 522376, 5156528, 46.5619, 3.29194, 240),
('03201', 'Nizerolles', '31T', 549426, 5105141, 46.0981, 3.63944, 480),
('03202', 'Noyant-d''Allier', '31T', 509744, 5147296, 46.4792, 3.12694, 329),
('03203', 'Paray-le-Frésil', '31T', 546736, 5167070, 46.6556, 3.61083, 225),
('03204', 'Paray-sous-Briailles', '31T', 528093, 5126365, 46.2903, 3.36472, 243),
('03205', 'Périgny', '31T', 542757, 5122376, 46.2536, 3.55473, 315),
('03206', 'La Petite-Marche', '31T', 467057, 5115771, 46.1947, 2.57306, 460),
('03207', 'Pierrefitte-sur-Loire', '31T', 562635, 5150729, 46.5072, 3.81639, 231),
('03208', 'Le Pin', '31T', 568636, 5140268, 46.4125, 3.89306, 270),
('03209', 'Poëzat', '31T', 517334, 5102652, 46.0772, 3.22417, 339),
('03210', 'Pouzy-Mésangy', '31T', 500446, 5172907, 46.7097, 3.00583, 210),
('03211', 'Prémilhat', '31T', 464347, 5128843, 46.3122, 2.53695, 335),
('03212', 'Quinssaines', '31T', 462409, 5130305, 46.3253, 2.51166, 394),
('03213', 'Reugny', '31T', 470524, 5145601, 46.4633, 2.61612, 201),
('03214', 'Rocles', '31T', 502433, 5141054, 46.4231, 3.03166, 390),
('03215', 'Rongères', '31T', 534789, 5126708, 46.2931, 3.45167, 280),
('03216', 'Ronnet', '31T', 476899, 5116961, 46.2058, 2.70055, 500),
('03217', 'Saint-Angel', '31T', 476814, 5133813, 46.3575, 2.69862, 363),
('03218', 'Saint-Aubin-le-Monial', '31T', 500170, 5152567, 46.5267, 3.00222, 290),
('03219', 'Saint-Bonnet-de-Four', '31T', 493199, 5128804, 46.3128, 2.91167, 384),
('03220', 'Saint-Bonnet-de-Rochefort', '31T', 510597, 5110414, 46.1472, 3.13722, 337),
('03221', 'Saint-Bonnet-Tronçais', '31T', 476644, 5167489, 46.6606, 2.69472, 221),
('03222', 'Saint-Caprais', '31T', 479770, 5155162, 46.5497, 2.73611, 360),
('03223', 'Saint-Christophe', '31T', 544453, 5112850, 46.1678, 3.57583, 380),
('03224', 'Saint-Clément', '31T', 554506, 5101295, 46.0631, 3.70472, 500),
('03225', 'Saint-Désiré', '31T', 456474, 5149543, 46.4981, 2.43277, 330),
('03226', 'Saint-Didier-en-Donjon', '31T', 565996, 5137523, 46.3881, 3.85833, 290),
('03227', 'Saint-Didier-la-Forêt', '31T', 526584, 5119197, 46.2258, 3.34472, 290),
('03228', 'Saint-Éloy-d''Allier', '31T', 450731, 5148353, 46.4869, 2.35806, 360),
('03229', 'Saint-Ennemond', '31T', 532335, 5169321, 46.6767, 3.42277, 225),
('03230', 'Saint-Étienne-de-Vicq', '31T', 541123, 5113815, 46.1767, 3.53278, 330),
('03231', 'Saint-Fargeol', '31T', 471185, 5109485, 46.1383, 2.62694, 540),
('03232', 'Saint-Félix', '31T', 537207, 5119623, 46.2292, 3.48251, 360),
('03233', 'Saint-Genest', '31T', 468875, 5123478, 46.2642, 2.59611, 400),
('03234', 'Saint-Gérand-de-Vaux', '31T', 530568, 5136254, 46.3792, 3.39749, 270),
('03235', 'Saint-Gérand-le-Puy', '31T', 539521, 5122755, 46.2572, 3.51278, 320),
('03236', 'Saint-Germain-des-Fossés', '31T', 533728, 5117288, 46.2083, 3.43722, 245),
('03237', 'Saint-Germain-de-Salles', '31T', 516530, 5114007, 46.1794, 3.21417, 290),
('03238', 'Saint-Hilaire', '31T', 501663, 5148894, 46.4936, 3.02167, 310),
('03239', 'Saint-Léger-sur-Vouzance', '31T', 571885, 5139966, 46.4094, 3.93528, 263),
('03240', 'Saint-Léon', '31T', 552890, 5139031, 46.4028, 3.68806, 380),
('03241', 'Saint-Léopardin-d''Augy', '31T', 508157, 5169950, 46.6831, 3.10666, 250),
('03242', 'Saint-Loup', '31T', 529216, 5133099, 46.3508, 3.37972, 240),
('03243', 'Saint-Marcel-en-Murat', '31T', 500855, 5129788, 46.3217, 3.01111, 456),
('03244', 'Saint-Marcel-en-Marcillat', '31T', 468293, 5110240, 46.145, 2.58945, 520),
('03245', 'Saint-Martin-des-Lais', '31T', 549998, 5168454, 46.6678, 3.65361, 205),
('03246', 'Saint-Martinien', '31T', 459188, 5131437, 46.3353, 2.46972, 370),
('03247', 'Saint-Menoux', '31T', 512407, 5158938, 46.5839, 3.16194, 236),
('03248', 'Saint-Nicolas-des-Biefs', '31T', 560589, 5101043, 46.0603, 3.78333, 882),
('03249', 'Saint-Palais', '31T', 446356, 5143081, 46.4392, 2.30167, 380),
('03250', 'Saint-Pierre-Laval', '31T', 560220, 5116751, 46.2017, 3.78055, 420),
('03251', 'Saint-Plaisir', '31T', 497639, 5163277, 46.6231, 2.96916, 248),
('03252', 'Saint-Pont', '31T', 522947, 5112269, 46.1636, 3.29723, 330),
('03253', 'Saint-Pourçain-sur-Besbre', '31T', 548937, 5147208, 46.4767, 3.63749, 250),
('03254', 'Saint-Pourçain-sur-Sioule', '31T', 522352, 5128162, 46.3067, 3.29027, 250),
('03255', 'Saint-Priest-d''Andelot', '31T', 513189, 5102179, 46.0731, 3.17055, 440),
('03256', 'Saint-Priest-en-Murat', '31T', 493332, 5132909, 46.3497, 2.91334, 400),
('03257', 'Saint-Prix', '31T', 550269, 5120149, 46.2331, 3.65194, 300),
('03258', 'Saint-Rémy-en-Rollat', '31T', 530227, 5114523, 46.1836, 3.39166, 268),
('03259', 'Saint-Sauvier', '31T', 448483, 5137290, 46.3872, 2.32999, 460),
('03260', 'Saint-Sornin', '31T', 501260, 5139726, 46.4111, 3.01639, 390),
('03261', 'Sainte-Thérence', '31T', 466292, 5120961, 46.2414, 2.56277, 400),
('03262', 'Saint-Victor', '31T', 470038, 5138010, 46.395, 2.61027, 200),
('03263', 'Saint-Voir', '31T', 539947, 5139364, 46.4067, 3.51972, 281),
('03264', 'Saint-Yorre', '31T', 535813, 5101497, 46.0661, 3.46306, 280),
('03265', 'Saligny-sur-Roudon', '31T', 557665, 5146575, 46.4703, 3.7511, 248),
('03266', 'Sanssat', '31T', 536631, 5122645, 46.2564, 3.47527, 270),
('03267', 'Saulcet', '31T', 520677, 5130132, 46.3244, 3.26861, 270),
('03268', 'Saulzet', '31T', 517144, 5109102, 46.1353, 3.22195, 310),
('03269', 'Sauvagny', '31T', 486153, 5143477, 46.4447, 2.81972, 230),
('03270', 'Sazeret', '31T', 496687, 5131795, 46.3397, 2.95695, 420),
('03271', 'Serbannes', '31T', 527697, 5105097, 46.0989, 3.35833, 358),
('03272', 'Servilly', '31T', 545284, 5125234, 46.2792, 3.58778, 290),
('03273', 'Seuillet', '31T', 536561, 5116471, 46.2008, 3.47388, 270),
('03274', 'Sorbier', '31T', 550982, 5134847, 46.3653, 3.66278, 350),
('03275', 'Souvigny', '31T', 514783, 5153387, 46.5339, 3.19278, 250),
('03276', 'Sussat', '31T', 504998, 5111086, 46.1533, 3.06473, 400),
('03277', 'Target', '31T', 504793, 5126209, 46.2894, 3.06222, 423),
('03278', 'Taxat-Senat', '31T', 510780, 5116341, 46.2006, 3.13972, 297),
('03279', 'Teillet-Argenty', '31T', 463911, 5123938, 46.2681, 2.53166, 399),
('03280', 'Terjat', '31T', 470512, 5116680, 46.2031, 2.61778, 500),
('03281', 'Le Theil', '31T', 510408, 5133500, 46.355, 3.13528, 450),
('03282', 'Theneuille', '31T', 489529, 5158934, 46.5839, 2.86333, 330),
('03283', 'Thiel-sur-Acolin', '31T', 544485, 5152483, 46.5244, 3.58001, 244),
('03284', 'Thionne', '31T', 544219, 5139270, 46.4056, 3.57528, 280),
('03285', 'Tortezais', '31T', 489078, 5144397, 46.4531, 2.85778, 250),
('03286', 'Toulon-sur-Allier', '31T', 527657, 5151642, 46.5178, 3.36055, 230),
('03287', 'Treban', '31T', 513430, 5139031, 46.4047, 3.17472, 370),
('03288', 'Treignat', '31T', 449153, 5133025, 46.3489, 2.33917, 440),
('03289', 'Treteau', '31T', 540252, 5135230, 46.3694, 3.52333, 283),
('03290', 'Trévol', '31T', 523390, 5164063, 46.6297, 3.30556, 231),
('03291', 'Trézelles', '31T', 545669, 5130854, 46.3297, 3.59333, 260),
('03292', 'Tronget', '31T', 505358, 5140840, 46.4211, 3.06973, 460),
('03293', 'Urçay', '31T', 468612, 5163606, 46.6253, 2.59, 168),
('03294', 'Ussel-d''Allier', '31T', 514828, 5117336, 46.2094, 3.19222, 300),
('03295', 'Valignat', '31T', 505896, 5113679, 46.1767, 3.07639, 443),
('03296', 'Valigny', '31T', 486094, 5173201, 46.7122, 2.81806, 220),
('03297', 'Vallon-en-Sully', '31T', 469775, 5153691, 46.5361, 2.60583, 190),
('03298', 'Varennes-sur-Allier', '31T', 531247, 5128880, 46.3128, 3.40583, 240),
('03299', 'Varennes-sur-Tèche', '31T', 548451, 5130598, 46.3272, 3.62944, 270),
('03300', 'Vaumas', '31T', 548367, 5143901, 46.4469, 3.62973, 234),
('03301', 'Vaux', '31T', 468688, 5141227, 46.4239, 2.5925, 190),
('03302', 'Veauce', '31T', 504589, 5112444, 46.1656, 3.05944, 425),
('03303', 'Venas', '31T', 481917, 5146976, 46.4761, 2.76444, 270),
('03304', 'Vendat', '31T', 527258, 5112102, 46.1619, 3.35306, 335),
('03305', 'Verneix', '31T', 474695, 5138297, 46.3978, 2.67083, 353),
('03306', 'Le Vernet', '31T', 535742, 5106219, 46.1086, 3.4625, 410),
('03307', 'Verneuil-en-Bourbonnais', '31T', 519558, 5132443, 46.3453, 3.25417, 270),
('03308', 'Vernusse', '31T', 498523, 5123955, 46.2692, 2.98083, 419),
('03309', 'Le Veurdre', '31T', 503012, 5178032, 46.7558, 3.03944, 190),
('03310', 'Vichy', '31T', 533024, 5108704, 46.1311, 3.4275, 268),
('03311', 'Vicq', '31T', 507186, 5110378, 46.1469, 3.09305, 332),
('03312', 'Vieure', '31T', 490409, 5149611, 46.5, 2.87501, 250),
('03313', 'Le Vilhain', '31T', 484522, 5156506, 46.5619, 2.79806, 362),
('03314', 'Villebret', '31T', 472130, 5123771, 46.2669, 2.63833, 420),
('03315', 'Villefranche-d''Allier', '31T', 489045, 5138069, 46.3961, 2.8575, 280),
('03316', 'Villeneuve-sur-Allier', '31T', 519212, 5167320, 46.6592, 3.25111, 206),
('03317', 'Viplaix', '31T', 452329, 5145500, 46.4614, 2.37917, 340),
('03318', 'Vitray', '31T', 475833, 5161103, 46.6031, 2.68445, 270),
('03319', 'Voussac', '31T', 504875, 5130531, 46.3283, 3.06333, 450),
('03320', 'Ygrande', '31T', 495826, 5155222, 46.5506, 2.94555, 333),
('03321', 'Yzeure', '31T', 527376, 5157166, 46.5675, 3.35722, 240),
('04001', 'Aiglun', '32T', 270146, 4883036, 44.0644, 6.13, 780),
('04004', 'Allemagne-en-Provence', '32T', 259202, 4852131, 43.7831, 6.0075, 420),
('04005', 'Allons', '32T', 307064, 4872280, 43.9783, 6.59444, 1073),
('04006', 'Allos', '32T', 310473, 4901547, 44.2425, 6.62639, 1414),
('04007', 'Angles', '32T', 303967, 4868573, 43.9442, 6.55723, 961),
('04008', 'Annot', '32T', 312960, 4871030, 43.9686, 6.66833, 730),
('04009', 'Archail', '32T', 286799, 4889024, 44.1233, 6.33528, 960),
('04012', 'Aubenas-les-Alpes', '31T', 715274, 4867718, 43.9311, 5.68194, 580),
('04013', 'Aubignosc', '31T', 737532, 4890630, 44.1303, 5.96916, 480),
('04016', 'Authon', '32T', 270556, 4902391, 44.2386, 6.12667, 1140),
('04017', 'Auzet', '32T', 285979, 4908201, 44.2956, 6.31722, 1200),
('04018', 'Banon', '31T', 710585, 4879675, 44.04, 5.62833, 770),
('04019', 'Barcelonnette', '32T', 312849, 4917814, 44.3894, 6.65028, 1140),
('04020', 'Barles', '32T', 281922, 4904937, 44.265, 6.26778, 990),
('04021', 'Barras', '32T', 268991, 4887556, 44.1047, 6.11362, 640),
('04022', 'Barrême', '32T', 288795, 4870027, 43.9531, 6.36778, 760),
('04023', 'Bayons', '32T', 273890, 4913396, 44.3386, 6.16361, 880),
('04024', 'Beaujeu', '32T', 289976, 4897940, 44.2044, 6.37139, 888),
('04025', 'Beauvezer', '32T', 307343, 4890954, 44.1464, 6.59111, 1160),
('04026', 'Bellaffaire', '32T', 275331, 4922397, 44.42, 6.17778, 860),
('04027', 'Bevons', '31T', 730396, 4896153, 44.1822, 5.8825, 640),
('04028', 'Beynes', '32T', 277437, 4874662, 43.9914, 6.22445, 760),
('04030', 'Blieux', '32T', 288932, 4861005, 43.8719, 6.37306, 960),
('04031', 'Bras-d''Asse', '32T', 269186, 4867655, 43.9258, 6.12472, 480),
('04032', 'Braux', '32T', 315382, 4873092, 43.9878, 6.69778, 940),
('04033', 'La Bréole', '32T', 284908, 4926152, 44.4567, 6.29639, 940),
('04034', 'La Brillanne', '31T', 732127, 4867762, 43.9264, 5.89167, 380),
('04035', 'Brunet', '32T', 261399, 4864069, 43.8911, 6.02945, 480),
('04036', 'Le Brusquet', '32T', 284850, 4893381, 44.1619, 6.30917, 780),
('04037', 'Le Caire', '32T', 265734, 4917205, 44.3703, 6.05972, 786),
('04039', 'Castellane', '32T', 300009, 4857944, 43.8475, 6.51194, 720),
('04040', 'Le Castellard-Melan', '32T', 270253, 4896934, 44.1894, 6.12527, 1060),
('04041', 'Le Castellet', '31T', 739349, 4869348, 43.9383, 5.98223, 480),
('04042', 'Castellet-lès-Sausses', '32T', 320598, 4873905, 43.9964, 6.7625, 840),
('04043', 'Val-de-Chalvagne', '32T', 323896, 4864678, 43.9142, 6.80666, 860),
('04045', 'Céreste', '31T', 708240, 4859309, 43.8575, 5.59112, 400),
('04046', 'Le Chaffaut-Saint-Jurson', '32T', 271696, 4880202, 44.0394, 6.15055, 520),
('04047', 'Champtercier', '32T', 273006, 4886520, 44.0967, 6.16417, 700),
('04049', 'Château-Arnoux-Saint-Auban', '32T', 260524, 4886746, 44.0947, 6.00833, 450),
('04050', 'Châteaufort', '32T', 262007, 4906743, 44.275, 6.01777, 620),
('04051', 'Châteauneuf-Miravail', '31T', 717967, 4893597, 44.1631, 5.72612, 670),
('04053', 'Châteauneuf-Val-Saint-Donat', '31T', 736006, 4886652, 44.095, 5.94833, 560),
('04054', 'Châteauredon', '32T', 276857, 4877307, 44.015, 6.21611, 617),
('04055', 'Chaudon-Norante', '32T', 284324, 4873198, 43.9803, 6.31083, 700),
('04057', 'Clamensane', '32T', 266371, 4912085, 44.3244, 6.07, 700),
('04058', 'Claret', '31T', 735472, 4917558, 44.3731, 5.95556, 640),
('04059', 'Clumanc', '32T', 290572, 4878217, 44.0272, 6.38667, 840),
('04061', 'Colmars', '32T', 310169, 4894886, 44.1825, 6.62499, 1240),
('04062', 'La Condamine-Châtelard', '32T', 320607, 4925347, 44.4592, 6.74501, 1300),
('04063', 'Corbières', '31T', 721473, 4849143, 43.7622, 5.75139, 300),
('04065', 'Cruis', '31T', 727034, 4882784, 44.0631, 5.83473, 713),
('04066', 'Curbans', '32T', 264402, 4923865, 44.4297, 6.04, 620),
('04067', 'Curel', '31T', 712740, 4895032, 44.1775, 5.66139, 740),
('04068', 'Dauphin', '31T', 723713, 4864384, 43.8986, 5.78556, 418),
('04069', 'Demandolx', '32T', 305508, 4860282, 43.87, 6.57944, 1160),
('04070', 'Digne-les-Bains', '32T', 278670, 4886142, 44.095, 6.235, 600),
('04072', 'Draix', '32T', 287398, 4890364, 44.1356, 6.34222, 860),
('04073', 'Enchastrayes', '32T', 316500, 4915364, 44.3683, 6.69695, 1440),
('04074', 'Entrages', '32T', 281115, 4880686, 44.0467, 6.26777, 1006),
('04075', 'Entrepierres', '31T', 738973, 4898128, 44.1972, 5.99056, 608),
('04076', 'Entrevaux', '32T', 324308, 4869267, 43.9556, 6.81027, 480),
('04077', 'Entrevennes', '32T', 261028, 4869273, 43.9378, 6.0225, 640),
('04079', 'L''Escale', '32T', 261818, 4885587, 44.0847, 6.025, 440),
('04081', 'Esparron-de-Verdon', '31T', 739570, 4847082, 43.7381, 5.975, 386),
('04084', 'Estoublon', '32T', 272930, 4869410, 43.9428, 6.17055, 510),
('04085', 'Faucon-du-Caire', '32T', 268408, 4920106, 44.3972, 6.09194, 867),
('04086', 'Faucon-de-Barcelonnette', '32T', 315123, 4918367, 44.395, 6.67861, 1186),
('04087', 'Fontienne', '31T', 723942, 4876747, 44.0097, 5.79361, 720),
('04088', 'Forcalquier', '31T', 723174, 4871100, 43.9592, 5.78167, 560),
('04090', 'Le Fugeret', '32T', 310870, 4875134, 44.005, 6.64084, 843),
('04091', 'Ganagobie', '31T', 733318, 4875774, 43.9981, 5.91, 660),
('04092', 'La Garde', '32T', 303571, 4855954, 43.8306, 6.55694, 930),
('04093', 'Gigors', '32T', 273980, 4922382, 44.4194, 6.16083, 881),
('04094', 'Gréoux-les-Bains', '31T', 732314, 4848987, 43.7575, 5.88584, 340),
('04095', 'L''Hospitalet', '31T', 716043, 4885133, 44.0875, 5.69861, 891),
('04096', 'Jausiers', '32T', 319601, 4920990, 44.4197, 6.73389, 1220),
('04097', 'La Javie', '32T', 288278, 4894876, 44.1764, 6.35139, 810),
('04099', 'Lambruisse', '32T', 295213, 4880573, 44.0497, 6.44361, 1145),
('04100', 'Larche', '32T', 328610, 4924452, 44.4531, 6.84583, 1680),
('04101', 'Lardiers', '31T', 717105, 4881955, 44.0586, 5.71055, 766),
('04102', 'Le Lauzet-Ubaye', '32T', 295689, 4922870, 44.4303, 6.43305, 959),
('04104', 'Limans', '31T', 719112, 4873836, 43.985, 5.73223, 560),
('04106', 'Lurs', '31T', 731802, 4872570, 43.9697, 5.88972, 580),
('04107', 'Majastres', '32T', 282299, 4865883, 43.9139, 6.28861, 1162),
('04108', 'Malijai', '32T', 262090, 4881406, 44.0472, 6.03027, 430),
('04109', 'Mallefougasse-Augès', '31T', 731980, 4883388, 44.0669, 5.89667, 712),
('04110', 'Mallemoisson', '32T', 269602, 4881479, 44.0503, 6.12389, 555),
('04111', 'Mane', '31T', 722228, 4868689, 43.9378, 5.76888, 442),
('04112', 'Manosque', '31T', 723958, 4857103, 43.8331, 5.78555, 400),
('04113', 'Marcoux', '32T', 282156, 4889918, 44.13, 6.27694, 710),
('04115', 'Méailles', '32T', 310291, 4877467, 44.0258, 6.63278, 1040),
('04116', 'Les Mées', '31T', 738427, 4879417, 44.0292, 5.97528, 420),
('04118', 'Melve', '31T', 738385, 4915470, 44.3533, 5.99112, 820),
('04120', 'Meyronnes', '32T', 324994, 4927327, 44.4781, 6.79944, 1540),
('04121', 'Mézel', '32T', 275052, 4875361, 43.9969, 6.19444, 580),
('04122', 'Mirabeau', '32T', 266942, 4883118, 44.0642, 6.09001, 620),
('04123', 'Mison', '31T', 726702, 4905261, 44.2653, 5.84028, 660),
('04124', 'Montagnac-Montpezat', '32T', 266048, 4851423, 43.7789, 6.09278, 580),
('04126', 'Montclar', '32T', 288122, 4919529, 44.3981, 6.33945, 1180),
('04127', 'Montfort', '31T', 737842, 4883288, 44.0642, 5.96973, 540),
('04128', 'Montfuron', '31T', 716756, 4857204, 43.8361, 5.69611, 660),
('04129', 'Montjustin', '31T', 711908, 4858499, 43.8492, 5.63639, 560),
('04130', 'Montlaux', '31T', 727823, 4881205, 44.0486, 5.84389, 600),
('04132', 'Montsalier', '31T', 709208, 4876728, 44.0139, 5.61, 680),
('04133', 'Moriez', '32T', 297164, 4870846, 43.9628, 6.47167, 920),
('04134', 'La Motte-du-Caire', '32T', 263090, 4914551, 44.3456, 6.02778, 710),
('04135', 'Moustiers-Sainte-Marie', '32T', 276538, 4858569, 43.8464, 6.22, 640),
('04136', 'La Mure-Argens', '32T', 301288, 4873007, 43.9833, 6.52222, 958),
('04137', 'Nibles', '32T', 262128, 4907634, 44.2831, 6.01888, 600),
('04138', 'Niozelles', '31T', 727767, 4868600, 43.9353, 5.83778, 420),
('04139', 'Noyers-sur-Jabron', '31T', 726071, 4894582, 44.1694, 5.82778, 560),
('04140', 'Les Omergues', '31T', 708405, 4894337, 44.1725, 5.60694, 820),
('04141', 'Ongles', '31T', 719020, 4878621, 44.0281, 5.73306, 620),
('04142', 'Oppedette', '31T', 708011, 4868011, 43.9358, 5.59167, 460),
('04143', 'Oraison', '31T', 734460, 4866825, 43.9172, 5.92028, 360),
('04144', 'La Palud-sur-Verdon', '32T', 286105, 4850934, 43.7806, 6.34194, 939),
('04145', 'Peipin', '31T', 736433, 4891486, 44.1383, 5.95583, 510),
('04148', 'Peyroules', '32T', 306935, 4854003, 43.8139, 6.59945, 1040),
('04149', 'Peyruis', '31T', 735319, 4879058, 44.0269, 5.93638, 397),
('04150', 'Piégut', '32T', 271566, 4926143, 44.4525, 6.12889, 1040),
('04151', 'Pierrerue', '31T', 727443, 4870874, 43.9558, 5.83472, 500),
('04152', 'Pierrevert', '31T', 721181, 4854570, 43.8111, 5.75, 428),
('04154', 'Pontis', '32T', 289962, 4931237, 44.5039, 6.35778, 1110),
('04155', 'Prads-Haute-Bléone', '32T', 295671, 4899614, 44.2211, 6.44194, 1040),
('04156', 'Puimichel', '32T', 260972, 4873291, 43.9739, 6.02, 700),
('04157', 'Puimoisson', '32T', 269006, 4860556, 43.8619, 6.12555, 694),
('04158', 'Quinson', '32T', 261453, 4843122, 43.7028, 6.03944, 372),
('04159', 'Redortiers', '31T', 709587, 4882330, 44.0642, 5.61694, 1000),
('04160', 'Reillanne', '31T', 713767, 4861863, 43.8789, 5.66084, 540),
('04161', 'Méolans-Revel', '32T', 301962, 4919556, 44.4022, 6.51306, 1040),
('04162', 'Revest-des-Brousses', '31T', 714460, 4872171, 43.9714, 5.67361, 590),
('04163', 'Revest-du-Bion', '31T', 704002, 4884347, 44.0839, 5.54805, 920),
('04164', 'Revest-Saint-Martin', '31T', 726587, 4876992, 44.0111, 5.82667, 681),
('04166', 'Riez', '32T', 265959, 4855906, 43.8192, 6.08972, 520),
('04167', 'La Robine-sur-Galabre', '32T', 277570, 4894427, 44.1692, 6.21778, 720),
('04169', 'La Rochegiron', '31T', 712585, 4884001, 44.0783, 5.65501, 822),
('04170', 'La Rochette', '32T', 330593, 4864720, 43.9161, 6.89, 920),
('04171', 'Rougon', '32T', 290954, 4852849, 43.7992, 6.40139, 1060),
('04172', 'Roumoules', '32T', 269138, 4856629, 43.8267, 6.12889, 584),
('04173', 'Saint-André-les-Alpes', '32T', 300193, 4871434, 43.9689, 6.50917, 889),
('04174', 'Saint-Benoît', '32T', 317394, 4870875, 43.9683, 6.72361, 700),
('04175', 'Sainte-Croix-à-Lauze', '31T', 710248, 4865024, 43.9083, 5.61833, 618),
('04176', 'Sainte-Croix-du-Verdon', '32T', 270598, 4849010, 43.7586, 6.15028, 500),
('04177', 'Hautes-Duyes', '32T', 272753, 4895951, 44.1814, 6.15694, 840),
('04178', 'Saint-Étienne-les-Orgues', '31T', 722670, 4880751, 44.0461, 5.77945, 500),
('04179', 'Saint-Geniez', '32T', 264729, 4903432, 44.2461, 6.05333, 1114),
('04180', 'Saint-Jacques', '32T', 289433, 4871860, 43.9697, 6.375, 867),
('04181', 'Saint-Jeannet', '32T', 268886, 4870569, 43.9519, 6.11972, 583),
('04182', 'Saint-Julien-d''Asse', '32T', 266636, 4866879, 43.9181, 6.09333, 470),
('04183', 'Saint-Julien-du-Verdon', '32T', 302600, 4865402, 43.9153, 6.54138, 920),
('04184', 'Saint-Jurs', '32T', 275058, 4864364, 43.8981, 6.19917, 900),
('04186', 'Saint-Laurent-du-Verdon', '32T', 263779, 4845510, 43.725, 6.06722, 468),
('04187', 'Saint-Lions', '32T', 291358, 4873498, 43.985, 6.39833, 840),
('04188', 'Saint-Maime', '31T', 724456, 4864873, 43.9028, 5.795, 410),
('04189', 'Saint-Martin-de-Brômes', '31T', 737183, 4850580, 43.7703, 5.94694, 380),
('04190', 'Saint-Martin-les-Eaux', '31T', 719805, 4861659, 43.8753, 5.73583, 560),
('04191', 'Saint-Martin-lès-Seyne', '32T', 281506, 4918388, 44.3858, 6.25694, 1134),
('04192', 'Saint-Michel-l''Observatoire', '31T', 717913, 4865519, 43.9106, 5.71388, 560),
('04193', 'Saint-Paul-sur-Ubaye', '32T', 321354, 4931626, 44.5158, 6.75222, 1466),
('04194', 'Saint-Pierre', '32T', 333415, 4864247, 43.9125, 6.92527, 740),
('04195', 'Saint-Pons', '32T', 311091, 4918297, 44.3933, 6.62806, 1157),
('04197', 'Sainte-Tulle', '31T', 722521, 4851958, 43.7872, 5.76556, 320),
('04198', 'Saint-Vincent-les-Forts', '32T', 291169, 4924773, 44.4461, 6.37556, 1260),
('04199', 'Saint-Vincent-sur-Jabron', '31T', 719175, 4894688, 44.1725, 5.74166, 640),
('04200', 'Salignac', '31T', 738510, 4893724, 44.1578, 5.98277, 520),
('04201', 'Saumane', '31T', 715269, 4885663, 44.0925, 5.68917, 880),
('04202', 'Sausses', '32T', 322286, 4875342, 44.0097, 6.78306, 720),
('04203', 'Selonnet', '32T', 285902, 4916667, 44.3717, 6.31278, 1067),
('04204', 'Senez', '32T', 291624, 4865645, 43.9144, 6.40472, 780),
('04205', 'Seyne', '32T', 289197, 4914428, 44.3525, 6.355, 1199),
('04206', 'Sigonce', '31T', 727934, 4875401, 43.9964, 5.84277, 480),
('04207', 'Sigoyer', '31T', 735882, 4911734, 44.3206, 5.95806, 820),
('04208', 'Simiane-la-Rotonde', '31T', 705693, 4872942, 43.9808, 5.56472, 670),
('04209', 'Sisteron', '31T', 735186, 4897744, 44.195, 5.94306, 490),
('04210', 'Soleilhas', '32T', 311118, 4858792, 43.8581, 6.64973, 1140),
('04211', 'Sourribes', '32T', 261208, 4892715, 44.1486, 6.01416, 490),
('04214', 'Tartonne', '32T', 290751, 4883184, 44.0719, 6.38694, 960),
('04216', 'Thèze', '31T', 732849, 4911563, 44.32, 5.92, 572),
('04217', 'Thoard', '32T', 271943, 4892457, 44.1497, 6.14833, 780),
('04218', 'Thorame-Basse', '32T', 299941, 4885184, 44.0925, 6.50083, 1126),
('04219', 'Thorame-Haute', '32T', 304253, 4885733, 44.0986, 6.55445, 1140),
('04220', 'Les Thuiles', '32T', 306268, 4918439, 44.3933, 6.5675, 1100),
('04222', 'Turriers', '32T', 274640, 4920352, 44.4014, 6.16999, 1020),
('04224', 'Ubraye', '32T', 315075, 4864486, 43.9103, 6.69695, 980),
('04226', 'Uvernet-Fours', '32T', 310836, 4914846, 44.3622, 6.62611, 1183),
('04227', 'Vachères', '31T', 711817, 4867638, 43.9314, 5.63889, 720),
('04228', 'Valavoire', '32T', 265956, 4907311, 44.2814, 6.06694, 1120),
('04229', 'Valbelle', '31T', 729893, 4892738, 44.1517, 5.87472, 570),
('04230', 'Valensole', '31T', 740062, 4858252, 43.8383, 5.9861, 550),
('04231', 'Valernes', '31T', 735998, 4905435, 44.2639, 5.95667, 620),
('04233', 'Vaumeilh', '31T', 736006, 4908278, 44.2894, 5.95805, 620),
('04234', 'Venterol', '32T', 269254, 4925236, 44.4436, 6.10027, 1040),
('04235', 'Verdaches', '32T', 287737, 4904931, 44.2667, 6.34056, 1124),
('04236', 'Vergons', '32T', 306263, 4865448, 43.9167, 6.58695, 1038),
('04237', 'Le Vernet', '32T', 291827, 4905850, 44.2761, 6.39138, 1208),
('04240', 'Villars-Colmars', '32T', 308456, 4893268, 44.1675, 6.60417, 1240),
('04241', 'Villemus', '31T', 717120, 4859748, 43.8589, 5.70167, 580),
('04242', 'Villeneuve', '31T', 729861, 4864224, 43.8953, 5.86195, 400),
('04244', 'Volonne', '32T', 260966, 4888491, 44.1106, 6.01306, 440),
('04245', 'Volx', '31T', 728455, 4862229, 43.8778, 5.84361, 380),
('05001', 'Abriès', '32T', 336072, 4962206, 44.7944, 6.9275, 1520),
('05002', 'Agnières-en-Dévoluy', '31T', 728329, 4952925, 44.6933, 5.88167, 1260),
('05003', 'Aiguilles', '32T', 331444, 4960967, 44.7822, 6.86944, 1470),
('05004', 'Ancelle', '32T', 278206, 4944943, 44.6236, 6.20416, 1340),
('05005', 'Antonaves', '31T', 723789, 4905408, 44.2675, 5.80389, 600),
('05006', 'L''Argentière-la-Bessée', '32T', 306870, 4962955, 44.7939, 6.55833, 990),
('05007', 'Arvieux', '32T', 321069, 4959579, 44.7672, 6.73888, 1540),
('05008', 'Aspremont', '31T', 716840, 4930102, 44.4917, 5.72722, 720),
('05009', 'Aspres-lès-Corps', '31T', 735639, 4965145, 44.8008, 5.97945, 980),
('05010', 'Aspres-sur-Buëch', '31T', 718627, 4933528, 44.5219, 5.75112, 766),
('05011', 'Avançon', '32T', 276354, 4934101, 44.5256, 6.18555, 920),
('05012', 'Baratier', '32T', 300966, 4934751, 44.5386, 6.49472, 853),
('05013', 'Barcillonnette', '31T', 732168, 4924452, 44.4361, 5.91722, 840),
('05014', 'Barret-sur-Méouge', '31T', 718177, 4904632, 44.2622, 5.73333, 657),
('05016', 'La Bâtie-Montsaléon', '31T', 718854, 4926122, 44.4553, 5.75083, 763),
('05017', 'La Bâtie-Neuve', '32T', 277261, 4938611, 44.5664, 6.19501, 856),
('05018', 'La Bâtie-Vieille', '32T', 274608, 4937282, 44.5536, 6.16222, 1040),
('05019', 'La Beaume', '31T', 709374, 4936745, 44.5536, 5.63611, 905),
('05020', 'Bénévent-et-Charbillac', '32T', 267689, 4955569, 44.7158, 6.06694, 1160),
('05021', 'Le Bersac', '31T', 718992, 4921370, 44.4125, 5.75056, 711),
('05022', 'Bréziers', '32T', 277148, 4923076, 44.4267, 6.20028, 840),
('05023', 'Briançon', '32T', 313596, 4974183, 44.8967, 6.63917, 1200),
('05024', 'Bruis', '31T', 699534, 4927076, 44.4694, 5.50861, 685),
('05025', 'Buissard', '32T', 273640, 4948746, 44.6564, 6.145, 1200),
('05026', 'Ceillac', '32T', 323849, 4948571, 44.6689, 6.77778, 1633),
('05027', 'Cervières', '32T', 319903, 4971316, 44.8725, 6.72, 1636),
('05028', 'Chabestan', '31T', 721374, 4928772, 44.4783, 5.78361, 780),
('05029', 'Chabottes', '32T', 276099, 4948444, 44.6544, 6.17611, 1100),
('05031', 'Champcella', '32T', 307603, 4955088, 44.7233, 6.57056, 1190),
('05032', 'Champoléon', '32T', 283038, 4955436, 44.7194, 6.26056, 1280),
('05033', 'Chanousse', '31T', 711675, 4914858, 44.3561, 5.65611, 760),
('05034', 'Châteauneuf-de-Chabre', '31T', 724410, 4906078, 44.2733, 5.81194, 569),
('05035', 'Châteauneuf-d''Oze', '31T', 727693, 4932759, 44.5122, 5.86472, 980),
('05036', 'Châteauroux-les-Alpes', '32T', 303319, 4943111, 44.6144, 6.52111, 975),
('05037', 'Châteauvieux', '32T', 265436, 4929822, 44.4836, 6.05028, 768),
('05038', 'Château-Ville-Vieille', '32T', 325365, 4958195, 44.7558, 6.79361, 850),
('05039', 'Chauffayer', '32T', 263156, 4959906, 44.7533, 6.00777, 910),
('05040', 'Chorges', '32T', 283687, 4935984, 44.5447, 6.27694, 860),
('05042', 'La Cluse', '31T', 725984, 4946879, 44.6397, 5.84944, 1200),
('05043', 'Les Costes', '32T', 265152, 4959091, 44.7467, 6.03333, 1100),
('05044', 'Crévoux', '32T', 309952, 4935377, 44.5467, 6.60749, 1600),
('05045', 'Crots', '32T', 299053, 4934316, 44.5342, 6.47083, 810),
('05046', 'Embrun', '32T', 301139, 4937494, 44.5633, 6.49583, 849),
('05047', 'Éourres', '31T', 715608, 4899079, 44.2131, 5.69889, 980),
('05048', 'L''Épine', '31T', 708221, 4921696, 44.4186, 5.61555, 820),
('05049', 'Esparron', '31T', 730925, 4926416, 44.4542, 5.9025, 1000),
('05050', 'Espinasses', '32T', 278895, 4927589, 44.4678, 6.22028, 680),
('05051', 'Étoile-Saint-Cyrice', '31T', 709574, 4910589, 44.3183, 5.62805, 960),
('05052', 'Eygliers', '32T', 312491, 4949787, 44.6769, 6.63417, 1027),
('05053', 'Eyguians', '31T', 720943, 4914084, 44.3464, 5.77194, 593),
('05054', 'La Fare-en-Champsaur', '32T', 267061, 4950370, 44.6689, 6.06139, 1100),
('05055', 'La Faurie', '31T', 717966, 4938727, 44.5689, 5.74501, 841),
('05056', 'Forest-Saint-Julien', '32T', 272520, 4947611, 44.6458, 6.13139, 1042),
('05057', 'Fouillouse', '32T', 261712, 4927176, 44.4586, 6.00473, 800),
('05058', 'Freissinières', '32T', 305246, 4958711, 44.7553, 6.53944, 1200),
('05059', 'La Freissinouse', '32T', 262245, 4935684, 44.5353, 6.00751, 944),
('05060', 'Furmeyer', '31T', 728161, 4935803, 44.5394, 5.87195, 1019),
('05061', 'Gap', '32T', 267854, 4938046, 44.5583, 6.07695, 767),
('05062', 'Le Glaizil', '31T', 736007, 4959906, 44.7536, 5.98167, 940),
('05063', 'La Grave', '32T', 287829, 4991604, 45.0461, 6.30584, 1481),
('05064', 'La Chapelle-en-Valgaudémar', '32T', 278306, 4966410, 44.8167, 6.19611, 1100),
('05065', 'Guillestre', '32T', 313759, 4947928, 44.6606, 6.65083, 987),
('05066', 'La Haute-Beaume', '31T', 708677, 4937803, 44.5633, 5.62777, 1173),
('05067', 'Les Infournas', '32T', 269731, 4955372, 44.7147, 6.09278, 1260),
('05068', 'Jarjayes', '32T', 270312, 4931995, 44.5047, 6.11055, 920),
('05069', 'Lagrand', '31T', 719613, 4913421, 44.3408, 5.755, 660),
('05070', 'Laragne-Montéglin', '31T', 725020, 4910918, 44.3167, 5.82166, 566),
('05071', 'Lardier-et-Valença', '31T', 737277, 4924575, 44.4356, 5.98139, 826),
('05072', 'Laye', '32T', 268795, 4947064, 44.6397, 6.08473, 1140),
('05073', 'Lazer', '31T', 726135, 4914602, 44.3494, 5.83723, 640),
('05074', 'Lettret', '32T', 266282, 4928123, 44.4686, 6.06167, 600),
('05075', 'Manteyer', '31T', 735407, 4935846, 44.5375, 5.96306, 1013),
('05076', 'Méreuil', '31T', 717384, 4918443, 44.3867, 5.72916, 680),
('05077', 'Molines-en-Queyras', '32T', 329270, 4955250, 44.7303, 6.84389, 1775),
('05078', 'Monêtier-Allemont', '31T', 734332, 4919061, 44.3869, 5.94195, 572),
('05079', 'Le Monêtier-les-Bains', '32T', 303602, 4983284, 44.9758, 6.50917, 1495),
('05080', 'Montbrand', '31T', 712859, 4940905, 44.59, 5.68166, 986),
('05081', 'Montclus', '31T', 713695, 4921534, 44.4156, 5.68417, 720),
('05082', 'Mont-Dauphin', '32T', 311651, 4948946, 44.6692, 6.62389, 1000),
('05084', 'Montgardin', '32T', 280752, 4936731, 44.5506, 6.23972, 920),
('05085', 'Montgenèvre', '32T', 322569, 4978776, 44.9403, 6.75111, 1849),
('05086', 'Montjay', '31T', 707632, 4915191, 44.3603, 5.60556, 804),
('05087', 'Montmaur', '31T', 728102, 4939354, 44.5714, 5.87278, 913),
('05088', 'Montmorin', '31T', 702208, 4925028, 44.4503, 5.54139, 800),
('05089', 'Montrond', '31T', 718420, 4917953, 44.3819, 5.74195, 650),
('05090', 'La Motte-en-Champsaur', '32T', 267735, 4957452, 44.7328, 6.06666, 1100),
('05091', 'Moydans', '31T', 699396, 4919320, 44.3997, 5.50389, 760),
('05092', 'Neffes', '32T', 263155, 4932160, 44.5039, 6.02056, 760),
('05093', 'Névache', '32T', 311258, 4987933, 45.0197, 6.60444, 1600),
('05094', 'Nossage-et-Bénévent', '31T', 719109, 4910624, 44.3158, 5.7475, 700),
('05095', 'Le Noyer', '32T', 263193, 4953725, 44.6978, 6.01111, 1127),
('05096', 'Orcières', '32T', 288036, 4951378, 44.6844, 6.32528, 1400),
('05097', 'Orpierre', '31T', 714595, 4910320, 44.3144, 5.69084, 780),
('05098', 'Les Orres', '32T', 305168, 4931967, 44.5147, 6.54861, 1460),
('05099', 'Oze', '31T', 722861, 4931850, 44.5056, 5.80361, 840),
('05100', 'Pelleautier', '32T', 262788, 4933625, 44.5169, 6.01528, 980),
('05101', 'Pelvoux', '32T', 301528, 4971549, 44.8697, 6.4875, 1236),
('05102', 'La Piarre', '31T', 711199, 4928155, 44.4758, 5.65555, 880),
('05103', 'Le Poët', '31T', 731096, 4908442, 44.2925, 5.89666, 591),
('05104', 'Poligny', '32T', 266074, 4952940, 44.6917, 6.04778, 1057),
('05106', 'Prunières', '32T', 288152, 4935373, 44.5406, 6.33334, 980),
('05107', 'Puy-Saint-André', '32T', 310311, 4972241, 44.8783, 6.59833, 1516),
('05108', 'Puy-Saint-Eusèbe', '32T', 295053, 4937746, 44.5639, 6.41917, 1280),
('05109', 'Puy-Saint-Pierre', '32T', 311872, 4973801, 44.8928, 6.6175, 1540),
('05110', 'Puy-Saint-Vincent', '32T', 301198, 4967267, 44.8311, 6.485, 1400),
('05111', 'Puy-Sanières', '32T', 296308, 4936934, 44.5569, 6.43528, 1180),
('05112', 'Rabou', '32T', 262248, 4941802, 44.5903, 6.00472, 1160),
('05113', 'Rambaud', '32T', 272282, 4936467, 44.5456, 6.13333, 960),
('05114', 'Réallon', '32T', 290795, 4941280, 44.5944, 6.36417, 1381),
('05115', 'Remollon', '32T', 274742, 4927762, 44.4681, 6.16805, 680),
('05116', 'Réotier', '32T', 309366, 4949199, 44.6708, 6.595, 1100),
('05117', 'Ribeyret', '31T', 703282, 4921077, 44.4144, 5.55333, 840),
('05118', 'Ribiers', '31T', 728115, 4901665, 44.2325, 5.85639, 510),
('05119', 'Risoul', '32T', 312934, 4946840, 44.6506, 6.64083, 1100),
('05120', 'Ristolas', '32T', 338322, 4959864, 44.7739, 6.95667, 1590),
('05121', 'Rochebrune', '32T', 275495, 4926500, 44.4569, 6.17806, 649),
('05122', 'La Roche-de-Rame', '32T', 308436, 4957936, 44.7492, 6.58, 980),
('05123', 'La Roche-des-Arnauds', '31T', 734947, 4938795, 44.5642, 5.95862, 960),
('05124', 'La Rochette', '32T', 274304, 4941865, 44.5947, 6.15639, 1200),
('05126', 'Rosans', '31T', 696786, 4918499, 44.3931, 5.47084, 700),
('05127', 'Rousset', '32T', 281009, 4928629, 44.4778, 6.24639, 1009),
('05128', 'Saint-André-d''Embrun', '32T', 304215, 4939933, 44.5861, 6.53361, 960),
('05129', 'Saint-André-de-Rosans', '31T', 700200, 4916936, 44.3781, 5.51306, 730),
('05130', 'Saint-Apollinaire', '32T', 290366, 4936907, 44.555, 6.36055, 1300),
('05131', 'Saint-Auban-d''Oze', '31T', 726384, 4930983, 44.4967, 5.84749, 922),
('05132', 'Saint-Bonnet-en-Champsaur', '32T', 268062, 4951848, 44.6825, 6.07333, 1000),
('05133', 'Saint-Chaffrey', '32T', 311213, 4977496, 44.9258, 6.60778, 1360),
('05134', 'Saint-Clément-sur-Durance', '32T', 307844, 4946928, 44.65, 6.57666, 880),
('05135', 'Sainte-Colombe', '31T', 713040, 4906995, 44.285, 5.67001, 1000),
('05136', 'Saint-Crépin', '32T', 310564, 4953209, 44.7072, 6.60861, 910),
('05138', 'Saint-Disdier', '31T', 729183, 4957404, 44.7333, 5.89444, 1021),
('05139', 'Saint-Étienne-en-Dévoluy', '31T', 732974, 4953060, 44.6931, 5.94028, 1281),
('05140', 'Saint-Étienne-le-Laus', '32T', 274426, 4931388, 44.5006, 6.16251, 760),
('05141', 'Saint-Eusèbe-en-Champsaur', '32T', 265532, 4956822, 44.7264, 6.03917, 1040),
('05142', 'Saint-Firmin', '32T', 264813, 4963058, 44.7822, 6.02722, 900),
('05143', 'Saint-Genis', '31T', 720544, 4918024, 44.3819, 5.76861, 720),
('05144', 'Saint-Jacques-en-Valgodemard', '32T', 266081, 4962239, 44.7753, 6.04361, 920),
('05145', 'Saint-Jean-Saint-Nicolas', '32T', 279393, 4949968, 44.6692, 6.21695, 1180),
('05146', 'Saint-Julien-en-Beauchêne', '31T', 715010, 4943941, 44.6167, 5.71, 940),
('05147', 'Saint-Julien-en-Champsaur', '32T', 272337, 4949317, 44.6611, 6.12833, 1100),
('05148', 'Saint-Laurent-du-Cros', '32T', 270839, 4947486, 44.6442, 6.11028, 1094),
('05149', 'Saint-Léger-les-Mélèzes', '32T', 277999, 4947266, 44.6444, 6.20055, 1240),
('05150', 'Sainte-Marie', '31T', 696808, 4926561, 44.4656, 5.47417, 660),
('05151', 'Saint-Martin-de-Queyrières', '32T', 309134, 4968106, 44.8408, 6.58499, 1169),
('05152', 'Saint-Maurice-en-Valgodemard', '32T', 270347, 4965206, 44.8033, 6.09611, 980),
('05153', 'Saint-Michel-de-Chaillol', '32T', 275854, 4950275, 44.6708, 6.17222, 1369),
('05154', 'Saint-Pierre-d''Argençon', '31T', 714311, 4933045, 44.5189, 5.69666, 780),
('05155', 'Saint-Pierre-Avez', '31T', 720346, 4904179, 44.2575, 5.76028, 740),
('05156', 'Saint-Sauveur', '32T', 302987, 4935091, 44.5422, 6.52, 1212),
('05157', 'Saint-Véran', '32T', 331077, 4951991, 44.7014, 6.86777, 2040),
('05158', 'Le Saix', '31T', 724545, 4928541, 44.4753, 5.82333, 820),
('05159', 'Saléon', '31T', 721148, 4913288, 44.3392, 5.77417, 640),
('05160', 'Salérans', '31T', 716120, 4902401, 44.2428, 5.70667, 680),
('05161', 'La Salle les Alpes', '32T', 308557, 4979674, 44.9447, 6.57333, 1436),
('05162', 'La Saulce', '32T', 261754, 4923498, 44.4256, 6.00695, 580),
('05163', 'Le Sauze-du-Lac', '32T', 286224, 4928487, 44.4781, 6.31194, 1040),
('05164', 'Savines-le-Lac', '32T', 293837, 4933553, 44.5258, 6.40555, 810),
('05165', 'Savournon', '31T', 722183, 4922590, 44.4225, 5.79112, 735),
('05166', 'Serres', '31T', 716097, 4923188, 44.4297, 5.715, 666),
('05167', 'Sigottier', '31T', 714194, 4925875, 44.4544, 5.69222, 721),
('05168', 'Sigoyer', '31T', 736726, 4929375, 44.4789, 5.97667, 1006),
('05169', 'Sorbiers', '31T', 704260, 4916722, 44.375, 5.56389, 859),
('05170', 'Tallard', '32T', 265661, 4927465, 44.4625, 6.05417, 600),
('05171', 'Théus', '32T', 276369, 4928756, 44.4775, 6.18806, 900),
('05172', 'Trescléoux', '31T', 715824, 4914716, 44.3536, 5.70805, 680),
('05173', 'Upaix', '31T', 729067, 4911275, 44.3186, 5.87251, 740),
('05174', 'Val-des-Prés', '32T', 316768, 4979928, 44.9492, 6.67723, 1387),
('05175', 'Vallouise', '32T', 301513, 4968925, 44.8461, 6.48834, 1200),
('05176', 'Valserres', '32T', 271485, 4930131, 44.4883, 6.12611, 670),
('05177', 'Vars', '32T', 316552, 4942259, 44.6103, 6.68806, 1620),
('05178', 'Ventavon', '31T', 731539, 4917231, 44.3714, 5.90611, 660),
('05179', 'Veynes', '31T', 723967, 4935039, 44.5339, 5.81889, 840),
('05180', 'Les Vigneaux', '32T', 305675, 4966327, 44.8239, 6.54195, 1113),
('05181', 'Villar-d''Arêne', '32T', 290219, 4991031, 45.0417, 6.33639, 1660),
('05182', 'Villar-Loubière', '32T', 274279, 4967569, 44.8258, 6.14472, 1033),
('05183', 'Villar-Saint-Pancrace', '32T', 312621, 4971617, 44.8733, 6.62778, 1240),
('05184', 'Vitrolles', '31T', 734730, 4924606, 44.4367, 5.94944, 760),
('06001', 'Aiglun', '32T', 332616, 4858216, 43.8581, 6.91722, 600),
('06002', 'Amirat', '32T', 325368, 4862076, 43.8911, 6.82583, 882),
('06003', 'Andon', '32T', 321739, 4849144, 43.7739, 6.785, 1195),
('06004', 'Antibes', '32T', 348146, 4827006, 43.5806, 7.11916, 10),
('06005', 'Ascros', '32T', 340571, 4864843, 43.9194, 7.01417, 1149),
('06006', 'Aspremont', '32T', 358630, 4849494, 43.785, 7.24306, 499),
('06007', 'Auribeau-sur-Siagne', '32T', 331361, 4829692, 43.6011, 6.91056, 60),
('06008', 'Auvare', '32T', 332253, 4872982, 43.9908, 6.90806, 1171),
('06009', 'Bairols', '32T', 349830, 4871695, 43.9831, 7.1275, 900),
('06010', 'Le Bar-sur-Loup', '32T', 337797, 4840708, 43.7017, 6.98694, 300),
('06011', 'Beaulieu-sur-Mer', '32T', 365271, 4840622, 43.7064, 7.32778, 20),
('06012', 'Beausoleil', '32T', 373230, 4844725, 43.7447, 7.42556, 163),
('06013', 'Belvédère', '32T', 365416, 4875342, 44.0189, 7.32083, 760),
('06014', 'Bendejun', '32T', 363038, 4855081, 43.8361, 7.29639, 360),
('06015', 'Berre-les-Alpes', '32T', 365779, 4854716, 43.8333, 7.33056, 640),
('06016', 'Beuil', '32T', 339174, 4884418, 44.0953, 6.99084, 1442),
('06017', 'Bézaudun-les-Alpes', '32T', 346935, 4852469, 43.8094, 7.09694, 880),
('06018', 'Biot', '32T', 346429, 4832386, 43.6286, 7.09638, 40),
('06019', 'Blausasc', '32T', 368534, 4851698, 43.8067, 7.36555, 320),
('06020', 'La Bollène-Vésubie', '32T', 366358, 4872359, 43.9922, 7.33333, 660),
('06021', 'Bonson', '32T', 354461, 4858257, 43.8631, 7.18889, 507),
('06022', 'Bouyon', '32T', 349099, 4854210, 43.8256, 7.12334, 640),
('06023', 'Breil-sur-Roya', '32T', 381152, 4866089, 43.9383, 7.51917, 290),
('06024', 'Briançonnet', '32T', 319871, 4859445, 43.8661, 6.75834, 1007),
('06025', 'Le Broc', '32T', 352764, 4852214, 43.8083, 7.16944, 460),
('06026', 'Cabris', '32T', 328581, 4835906, 43.6564, 6.87417, 545),
('06027', 'Cagnes-sur-Mer', '32T', 350692, 4836518, 43.6667, 7.14806, 20),
('06028', 'Caille', '32T', 317329, 4849850, 43.7792, 6.73, 1140),
('06029', 'Cannes', '32T', 339901, 4824698, 43.5581, 7.01778, 10),
('06030', 'Le Cannet', '32T', 339970, 4826672, 43.5758, 7.01805, 70),
('06031', 'Cantaron', '32T', 364415, 4846966, 43.7633, 7.31556, 120),
('06032', 'Cap-d''Ail', '32T', 371710, 4842501, 43.7244, 7.40722, 40),
('06033', 'Carros', '32T', 354222, 4850391, 43.7922, 7.18806, 365),
('06034', 'Castagniers', '32T', 357549, 4850165, 43.7908, 7.22945, 340),
('06035', 'Castellar', '32T', 379187, 4851219, 43.8042, 7.49806, 371),
('06036', 'Castillon', '32T', 377485, 4854706, 43.8353, 7.47611, 540),
('06037', 'Caussols', '32T', 330865, 4845572, 43.7439, 6.89944, 1100),
('06038', 'Châteauneuf-Grasse', '32T', 336740, 4837770, 43.675, 6.97472, 420),
('06039', 'Châteauneuf-Villevieille', '32T', 363023, 4852149, 43.8097, 7.29695, 520),
('06040', 'Châteauneuf-d''Entraunes', '32T', 326600, 4888534, 44.1294, 6.83251, 1274),
('06041', 'Cipières', '32T', 335494, 4849933, 43.7842, 6.95556, 740),
('06042', 'Clans', '32T', 351580, 4873199, 43.9969, 7.14889, 640),
('06043', 'Coaraze', '32T', 363171, 4858288, 43.865, 7.29722, 667),
('06044', 'La Colle-sur-Loup', '32T', 347052, 4839007, 43.6883, 7.10222, 96),
('06045', 'Collongues', '32T', 328311, 4861907, 43.8903, 6.8625, 640),
('06046', 'Colomars', '32T', 356624, 4846697, 43.7594, 7.21889, 300),
('06047', 'Conségudes', '32T', 343277, 4856598, 43.8458, 7.05027, 640),
('06048', 'Contes', '32T', 364643, 4852702, 43.815, 7.31694, 300),
('06049', 'Courmes', '32T', 339700, 4845354, 43.7439, 7.00916, 623),
('06050', 'Coursegoules', '32T', 342364, 4851063, 43.7958, 7.04055, 1002),
('06051', 'La Croix-sur-Roudoule', '32T', 329597, 4872834, 43.9889, 6.875, 860),
('06052', 'Cuébris', '32T', 340884, 4861162, 43.8864, 7.01916, 596),
('06053', 'Daluis', '32T', 324516, 4877073, 44.0258, 6.81028, 667),
('06054', 'Drap', '32T', 365112, 4846057, 43.7553, 7.32444, 100),
('06055', 'Duranus', '32T', 360094, 4861655, 43.8947, 7.25806, 580),
('06056', 'Entraunes', '32T', 320073, 4895441, 44.19, 6.74862, 1240),
('06057', 'L''Escarène', '32T', 367611, 4854710, 43.8336, 7.35334, 360),
('06058', 'Escragnolles', '32T', 321432, 4844367, 43.7308, 6.78277, 1020),
('06059', 'Èze', '32T', 368094, 4843003, 43.7283, 7.36222, 427),
('06060', 'Falicon', '32T', 361386, 4845485, 43.7494, 7.27833, 309),
('06061', 'Les Ferres', '32T', 346658, 4856920, 43.8494, 7.09222, 640),
('06062', 'Fontan', '32T', 384071, 4873599, 44.0064, 7.55388, 424),
('06063', 'Gars', '32T', 323622, 4859406, 43.8667, 6.80499, 740),
('06064', 'Gattières', '32T', 353473, 4846858, 43.7603, 7.17972, 263),
('06065', 'La Gaude', '32T', 351060, 4842991, 43.725, 7.15083, 250),
('06066', 'Gilette', '32T', 352442, 4856851, 43.85, 7.16416, 480),
('06067', 'Gorbio', '32T', 374883, 4849354, 43.7867, 7.445, 350),
('06068', 'Gourdon', '32T', 337199, 4842821, 43.7206, 6.97889, 720),
('06069', 'Grasse', '32T', 332508, 4836115, 43.6592, 6.92277, 300),
('06070', 'Gréolières', '32T', 334700, 4851280, 43.7961, 6.94528, 836),
('06071', 'Guillaumes', '32T', 328338, 4884413, 44.0928, 6.85556, 800),
('06072', 'Ilonse', '32T', 347710, 4877362, 44.0336, 7.09945, 1160),
('06073', 'Isola', '32T', 344197, 4894546, 44.1875, 7.05055, 880),
('06074', 'Lantosque', '32T', 364718, 4870603, 43.9761, 7.31333, 480),
('06075', 'Levens', '32T', 357424, 4857915, 43.8606, 7.22583, 605),
('06076', 'Lieuche', '32T', 340887, 4873355, 43.9961, 7.01555, 880),
('06077', 'Lucéram', '32T', 368347, 4860313, 43.8842, 7.36111, 604),
('06078', 'Malaussène', '32T', 350025, 4865517, 43.9275, 7.13167, 400),
('06079', 'Mandelieu-la-Napoule', '32T', 333387, 4824579, 43.5556, 6.93722, 10),
('06080', 'Marie', '32T', 350803, 4877260, 44.0333, 7.13806, 602),
('06081', 'Le Mas', '32T', 327841, 4856702, 43.8433, 6.85833, 920),
('06082', 'Massoins', '32T', 349615, 4867132, 43.9419, 7.12611, 448),
('06083', 'Menton', '32T', 378906, 4848076, 43.7758, 7.49527, 12),
('06084', 'Mouans-Sartoux', '32T', 336323, 4831730, 43.6206, 6.97139, 130),
('06085', 'Mougins', '32T', 338107, 4829464, 43.6006, 6.99416, 240),
('06086', 'Moulinet', '32T', 372622, 4866711, 43.9425, 7.41277, 800),
('06087', 'Les Mujouls', '32T', 328250, 4861291, 43.8847, 6.86194, 780),
('06088', 'Nice', '32T', 359988, 4840700, 43.7061, 7.26222, 10),
('06089', 'Opio', '32T', 337285, 4837139, 43.6694, 6.98167, 300),
('06090', 'Pégomas', '32T', 333031, 4829218, 43.5972, 6.93139, 25),
('06091', 'Peille', '32T', 371522, 4851331, 43.8039, 7.40277, 660),
('06092', 'Peillon', '32T', 369859, 4848586, 43.7789, 7.38277, 360),
('06093', 'La Penne', '32T', 335088, 4865996, 43.9286, 6.94556, 820),
('06094', 'Péone', '32T', 332544, 4887084, 44.1178, 6.90722, 1160),
('06095', 'Peymeinade', '32T', 328920, 4834261, 43.6417, 6.87889, 200),
('06096', 'Pierlas', '32T', 342542, 4877329, 44.0322, 7.035, 1020),
('06097', 'Pierrefeu', '32T', 345786, 4859780, 43.875, 7.08055, 653),
('06098', 'Puget-Rostang', '32T', 333077, 4871201, 43.975, 6.91888, 700),
('06099', 'Puget-Théniers', '32T', 330982, 4869464, 43.9589, 6.89334, 420),
('06100', 'Revest-les-Roches', '32T', 351854, 4860506, 43.8828, 7.15584, 860),
('06101', 'Rigaud', '32T', 338871, 4872910, 43.9917, 6.99056, 680),
('06102', 'Rimplas', '32T', 350375, 4880974, 44.0667, 7.13167, 1020),
('06103', 'Roquebillière', '32T', 364706, 4875448, 44.0197, 7.31195, 650),
('06104', 'Roquebrune-Cap-Martin', '32T', 377602, 4846464, 43.7611, 7.47944, 100),
('06105', 'Roquefort-les-Pins', '32T', 342630, 4836733, 43.6669, 7.04805, 200),
('06106', 'Roquesteron', '32T', 339737, 4859893, 43.8747, 7.00527, 340),
('06107', 'Roquestéron-Grasse', '32T', 339618, 4859587, 43.8719, 7.00388, 340),
('06108', 'La Roquette-sur-Siagne', '32T', 334872, 4829265, 43.5981, 6.95417, 160),
('06109', 'La Roquette-sur-Var', '32T', 355275, 4854628, 43.8306, 7.19999, 360),
('06110', 'Roubion', '32T', 343865, 4884305, 44.0953, 7.04944, 1300),
('06111', 'Roure', '32T', 346906, 4883987, 44.0931, 7.0875, 1104),
('06112', 'Le Rouret', '32T', 339834, 4837880, 43.6767, 7.01305, 300),
('06113', 'Sainte-Agnès', '32T', 376409, 4850899, 43.8008, 7.46361, 640),
('06114', 'Saint-André-de-la-Roche', '32T', 362170, 4844420, 43.74, 7.28833, 60),
('06115', 'Saint-Antonin', '32T', 338112, 4863760, 43.9092, 6.98388, 840),
('06116', 'Saint-Auban', '32T', 317188, 4857727, 43.85, 6.72556, 1100),
('06117', 'Saint-Blaise', '32T', 358317, 4853698, 43.8228, 7.23806, 350),
('06118', 'Saint-Cézaire-sur-Siagne', '32T', 321956, 4835430, 43.6506, 6.79223, 477),
('06119', 'Saint-Dalmas-le-Selvage', '32T', 329760, 4905742, 44.285, 6.86639, 1500),
('06120', 'Saint-Étienne-de-Tinée', '32T', 334332, 4902383, 44.2558, 6.92472, 1161),
('06121', 'Saint-Jean-Cap-Ferrat', '32T', 365528, 4838919, 43.6911, 7.33139, 20),
('06122', 'Saint-Jeannet', '32T', 350400, 4845476, 43.7472, 7.14195, 407),
('06123', 'Saint-Laurent-du-Var', '32T', 353827, 4837436, 43.6756, 7.18667, 20),
('06124', 'Saint-Léger', '32T', 325984, 4874472, 44.0028, 6.82944, 1040),
('06125', 'Saint-Martin-d''Entraunes', '32T', 321152, 4890193, 44.1431, 6.76389, 1060),
('06126', 'Saint-Martin-du-Var', '32T', 354518, 4853688, 43.8219, 7.19084, 120),
('06127', 'Saint-Martin-Vésubie', '32T', 360507, 4881246, 44.0711, 7.25805, 940),
('06128', 'Saint-Paul', '32T', 348706, 4839834, 43.6961, 7.1225, 181),
('06129', 'Saint-Sauveur-sur-Tinée', '32T', 348328, 4882935, 44.0839, 7.10556, 500),
('06130', 'Saint-Vallier-de-Thiey', '32T', 326596, 4840619, 43.6983, 6.84805, 715),
('06131', 'Sallagriffon', '32T', 331863, 4861106, 43.8839, 6.90695, 768),
('06132', 'Saorge', '32T', 381072, 4872788, 43.9986, 7.51667, 600),
('06133', 'Sauze', '32T', 326637, 4884026, 44.0889, 6.83445, 1300),
('06134', 'Séranon', '32T', 315346, 4849349, 43.7742, 6.70555, 1100),
('06135', 'Sigale', '32T', 336408, 4859819, 43.8733, 6.96389, 620),
('06136', 'Sospel', '32T', 375410, 4859590, 43.8789, 7.44917, 348),
('06137', 'Spéracèdes', '32T', 327309, 4835259, 43.6503, 6.85861, 380),
('06138', 'Théoule-sur-Mer', '32T', 333455, 4819174, 43.5069, 6.93972, 3),
('06139', 'Thiéry', '32T', 342067, 4871413, 43.9789, 7.03084, 1042),
('06140', 'Le Tignet', '32T', 326230, 4834268, 43.6411, 6.84556, 380),
('06141', 'Toudon', '32T', 348556, 4862741, 43.9022, 7.11417, 980),
('06142', 'Touët-de-l''Escarène', '32T', 368538, 4856389, 43.8489, 7.36445, 380),
('06143', 'Touët-sur-Var', '32T', 340189, 4868433, 43.9517, 7.00833, 400),
('06144', 'La Tour', '32T', 354355, 4867643, 43.9475, 7.185, 603),
('06145', 'Tourette-du-Château', '32T', 350984, 4860557, 43.8831, 7.145, 941),
('06146', 'Tournefort', '32T', 351784, 4867360, 43.9444, 7.15306, 629),
('06147', 'Tourrette-Levens', '32T', 361429, 4849682, 43.7872, 7.27778, 449),
('06148', 'Tourrettes-sur-Loup', '32T', 343592, 4842391, 43.7181, 7.05833, 400),
('06149', 'La Trinité', '32T', 364436, 4844713, 43.7431, 7.31639, 90),
('06150', 'La Turbie', '32T', 371218, 4844856, 43.7456, 7.40055, 480),
('06151', 'Utelle', '32T', 359257, 4864296, 43.9183, 7.24695, 822),
('06152', 'Valbonne', '32T', 339343, 4834188, 43.6433, 7.00806, 227),
('06153', 'Valdeblore', '32T', 356139, 4880970, 44.0678, 7.20361, 1290),
('06154', 'Valderoure', '32T', 315620, 4851966, 43.7978, 6.70805, 1100),
('06155', 'Vallauris', '32T', 342824, 4826851, 43.5781, 7.05333, 115),
('06156', 'Venanson', '32T', 360225, 4879462, 44.055, 7.255, 1164),
('06157', 'Vence', '32T', 347948, 4842969, 43.7242, 7.11222, 280),
('06158', 'Villars-sur-Var', '32T', 347244, 4866815, 43.9386, 7.09667, 433),
('06159', 'Villefranche-sur-Mer', '32T', 363679, 4840500, 43.705, 7.30806, 20),
('06160', 'Villeneuve-d''Entraunes', '32T', 323933, 4887772, 44.1219, 6.79945, 960),
('06161', 'Villeneuve-Loubet', '32T', 348640, 4835946, 43.6611, 7.12278, 14),
('06162', 'La Brigue', '32T', 389296, 4879651, 44.0617, 7.61778, 772),
('06163', 'Tende', '32T', 387362, 4882399, 44.0861, 7.59305, 820),
('07001', 'Accons', '31T', 609595, 4971236, 44.8861, 4.38778, 620),
('07002', 'Ailhon', '31T', 606503, 4939146, 44.5978, 4.34194, 450),
('07003', 'Aizac', '31T', 605708, 4952682, 44.7197, 4.33472, 680),
('07004', 'Ajoux', '31T', 618749, 4957971, 44.7653, 4.50056, 716),
('07005', 'Alba-la-Romaine', '31T', 626745, 4934819, 44.5556, 4.59583, 190),
('07006', 'Albon-d''Ardèche', '31T', 612922, 4964194, 44.8222, 4.42833, 630),
('07007', 'Alboussière', '31T', 636418, 4978172, 44.9439, 4.72917, 546);
INSERT INTO `ods_communes` (`oc_code_insee`, `oc_nom`, `oc_secteur`, `oc_x_utm`, `oc_y_utm`, `oc_latitude`, `oc_longitude`, `oc_altitude`) VALUES
('07008', 'Alissas', '31T', 629130, 4952399, 44.7133, 4.63028, 240),
('07009', 'Andance', '31T', 641249, 5011342, 45.2414, 4.79973, 149),
('07010', 'Annonay', '31T', 630998, 5011307, 45.2431, 4.66916, 359),
('07011', 'Antraigues-sur-Volane', '31T', 607624, 4952591, 44.7186, 4.35889, 460),
('07012', 'Arcens', '31T', 604984, 4972732, 44.9003, 4.32972, 640),
('07013', 'Ardoix', '31T', 636387, 5005153, 45.1867, 4.73611, 370),
('07014', 'Arlebosc', '31T', 630030, 4988226, 45.0356, 4.65083, 423),
('07015', 'Arras-sur-Rhône', '31T', 642235, 5000434, 45.1431, 4.80917, 140),
('07016', 'Asperjoc', '31T', 607729, 4948950, 44.6858, 4.35944, 560),
('07017', 'Les Assions', '31T', 593380, 4919377, 44.4217, 4.17305, 220),
('07018', 'Astet', '31T', 584024, 4948413, 44.6842, 4.06028, 860),
('07019', 'Aubenas', '31T', 610148, 4941398, 44.6175, 4.38834, 251),
('07020', 'Aubignas', '31T', 629671, 4938581, 44.5889, 4.63361, 340),
('07022', 'Baix', '31T', 639720, 4952311, 44.7106, 4.76389, 98),
('07023', 'Balazuc', '31T', 609049, 4929374, 44.5094, 4.37194, 190),
('07024', 'Banne', '31T', 592163, 4913188, 44.3661, 4.15667, 280),
('07025', 'Barnas', '31T', 592786, 4946959, 44.67, 4.17056, 480),
('07026', 'Le Béage', '31T', 588284, 4966894, 44.85, 4.11723, 1200),
('07027', 'Beauchastel', '31T', 642470, 4965306, 44.8269, 4.80222, 120),
('07028', 'Beaulieu', '31T', 598413, 4912724, 44.3611, 4.235, 140),
('07029', 'Beaumont', '31T', 592663, 4932421, 44.5392, 4.16639, 600),
('07030', 'Beauvène', '31T', 619157, 4970357, 44.8767, 4.50862, 460),
('07031', 'Berrias-et-Casteljau', '31T', 595822, 4914228, 44.375, 4.20277, 123),
('07032', 'Berzème', '31T', 624067, 4945540, 44.6525, 4.56472, 760),
('07033', 'Bessas', '31T', 603863, 4911080, 44.3456, 4.30305, 260),
('07034', 'Bidon', '31T', 622307, 4913745, 44.3667, 4.535, 308),
('07035', 'Boffres', '31T', 634611, 4975478, 44.92, 4.70556, 670),
('07036', 'Bogy', '31T', 638112, 5016120, 45.285, 4.76111, 380),
('07037', 'Borée', '31T', 597990, 4972529, 44.8994, 4.24112, 1140),
('07038', 'Borne', '31T', 580663, 4940778, 44.6158, 4.01667, 940),
('07039', 'Bozas', '31T', 629963, 4990478, 45.0558, 4.65056, 540),
('07040', 'Boucieu-le-Roi', '31T', 632586, 4988464, 45.0372, 4.68333, 320),
('07041', 'Boulieu-lès-Annonay', '31T', 630915, 5014299, 45.27, 4.66889, 430),
('07042', 'Bourg-Saint-Andéol', '31T', 630877, 4914806, 44.3747, 4.64278, 55),
('07044', 'Brossainc', '31T', 631622, 5021137, 45.3314, 4.67972, 470),
('07045', 'Burzet', '31T', 598502, 4954790, 44.7397, 4.24416, 540),
('07047', 'Cellier-du-Luc', '31T', 571349, 4947829, 44.6803, 3.90028, 980),
('07048', 'Chalencon', '31T', 624484, 4970643, 44.8783, 4.57611, 700),
('07049', 'Le Chambon', '31T', 603168, 4965604, 44.8364, 4.30527, 780),
('07050', 'Chambonas', '31T', 589959, 4918866, 44.4175, 4.13, 170),
('07051', 'Champagne', '31T', 641301, 5014863, 45.2731, 4.80139, 137),
('07052', 'Champis', '31T', 636730, 4979969, 44.96, 4.73361, 600),
('07053', 'Chandolas', '31T', 599780, 4917435, 44.4033, 4.25306, 120),
('07054', 'Chanéac', '31T', 604136, 4976299, 44.9325, 4.31972, 700),
('07055', 'Charmes-sur-Rhône', '31T', 644865, 4969157, 44.8611, 4.8336, 138),
('07056', 'Charnas', '31T', 636702, 5021862, 45.3369, 4.74472, 332),
('07058', 'Chassiers', '31T', 602902, 4934026, 44.5522, 4.29556, 360),
('07059', 'Châteaubourg', '31T', 645467, 4984237, 44.9967, 4.84556, 120),
('07060', 'Châteauneuf-de-Vernoux', '31T', 629966, 4975259, 44.9189, 4.64667, 600),
('07061', 'Chauzon', '31T', 608187, 4926798, 44.4864, 4.36056, 153),
('07062', 'Chazeaux', '31T', 604059, 4938952, 44.5964, 4.31112, 480),
('07063', 'Cheminas', '31T', 637801, 4998361, 45.1253, 4.75223, 460),
('07064', 'Le Cheylard', '31T', 612077, 4973594, 44.9069, 4.41972, 440),
('07065', 'Chirols', '31T', 601961, 4948918, 44.6864, 4.28667, 420),
('07066', 'Chomérac', '31T', 631606, 4951863, 44.7081, 4.66139, 190),
('07067', 'Colombier-le-Cardinal', '31T', 636716, 5014175, 45.2678, 4.74278, 370),
('07068', 'Colombier-le-Jeune', '31T', 634156, 4985626, 45.0114, 4.70249, 510),
('07069', 'Colombier-le-Vieux', '31T', 633483, 4991631, 45.0656, 4.69555, 420),
('07070', 'Cornas', '31T', 645639, 4980505, 44.9631, 4.84666, 130),
('07071', 'Coucouron', '31T', 576778, 4961531, 44.8031, 3.97083, 1160),
('07072', 'Coux', '31T', 628423, 4954762, 44.7347, 4.62195, 220),
('07073', 'Le Crestet', '31T', 630143, 4985944, 45.015, 4.65167, 460),
('07074', 'Creysseilles', '31T', 622154, 4956986, 44.7558, 4.54333, 500),
('07075', 'Cros-de-Géorand', '31T', 589095, 4960641, 44.7936, 4.12639, 1060),
('07076', 'Cruas', '31T', 639671, 4946414, 44.6575, 4.76166, 90),
('07077', 'Darbres', '31T', 619295, 4945048, 44.6489, 4.50444, 420),
('07078', 'Davézieux', '31T', 633826, 5012693, 45.255, 4.70555, 430),
('07079', 'Désaignes', '31T', 619659, 4983392, 44.9939, 4.51806, 480),
('07080', 'Devesset', '31T', 609250, 4991386, 45.0675, 4.38778, 1146),
('07081', 'Dompnac', '31T', 587768, 4935316, 44.5658, 4.10527, 500),
('07082', 'Dornas', '31T', 606870, 4967517, 44.8531, 4.3525, 660),
('07083', 'Dunière-sur-Eyrieux', '31T', 631147, 4964664, 44.8233, 4.65889, 156),
('07084', 'Eclassan', '31T', 638505, 5002143, 45.1592, 4.76222, 430),
('07085', 'Empurany', '31T', 626709, 4986831, 45.0236, 4.60833, 493),
('07086', 'Étables', '31T', 635761, 4995600, 45.1008, 4.72555, 497),
('07087', 'Fabras', '31T', 602000, 4945061, 44.6517, 4.28639, 460),
('07088', 'Faugères', '31T', 590420, 4925477, 44.4769, 4.13694, 440),
('07089', 'Félines', '31T', 635511, 5019552, 45.3164, 4.72889, 400),
('07090', 'Flaviac', '31T', 632395, 4956355, 44.7483, 4.67251, 160),
('07091', 'Fons', '31T', 607102, 4937582, 44.5836, 4.34916, 309),
('07092', 'Freyssenet', '31T', 622198, 4948868, 44.6828, 4.54195, 795),
('07093', 'Genestelle', '31T', 610307, 4952728, 44.7194, 4.39278, 660),
('07094', 'Gilhac-et-Bruzac', '31T', 636593, 4968914, 44.8606, 4.72889, 528),
('07095', 'Gilhoc-sur-Ormèze', '31T', 633209, 4982765, 44.9858, 4.68972, 480),
('07096', 'Gluiras', '31T', 620444, 4967232, 44.8483, 4.52416, 800),
('07097', 'Glun', '31T', 644870, 4986384, 45.0161, 4.83861, 117),
('07098', 'Gourdon', '31T', 614707, 4954040, 44.7306, 4.44862, 640),
('07099', 'Gras', '31T', 622717, 4922549, 44.4458, 4.54222, 356),
('07100', 'Gravières', '31T', 587146, 4919198, 44.4208, 4.09473, 220),
('07101', 'Grospierres', '31T', 602725, 4917265, 44.4014, 4.29, 144),
('07102', 'Guilherand-Granges', '31T', 648079, 4977350, 44.9342, 4.87666, 112),
('07103', 'Intres', '31T', 607486, 4981818, 44.9817, 4.36334, 700),
('07104', 'Issamoulenc', '31T', 615441, 4959701, 44.7814, 4.45916, 840),
('07105', 'Issanlas', '31T', 580148, 4957344, 44.765, 4.01278, 1220),
('07106', 'Issarlès', '31T', 581489, 4966002, 44.8428, 4.03111, 949),
('07107', 'Jaujac', '31T', 599559, 4943356, 44.6367, 4.25528, 400),
('07108', 'Jaunac', '31T', 610473, 4975016, 44.92, 4.39972, 600),
('07109', 'Joannas', '31T', 599327, 4935483, 44.5658, 4.25084, 454),
('07110', 'Joyeuse', '31T', 598477, 4926026, 44.4808, 4.23833, 180),
('07111', 'Juvinas', '31T', 603392, 4951688, 44.7111, 4.30528, 680),
('07112', 'Labastide-sur-Bésorgues', '31T', 603235, 4953228, 44.725, 4.30361, 620),
('07113', 'Labastide-de-Virac', '31T', 611644, 4911980, 44.3525, 4.40084, 240),
('07114', 'Labatie-d''Andaure', '31T', 617822, 4986785, 45.0247, 4.49556, 520),
('07115', 'Labeaume', '31T', 603945, 4922623, 44.4494, 4.30639, 120),
('07116', 'Labégude', '31T', 608459, 4944796, 44.6483, 4.36777, 235),
('07117', 'Lablachère', '31T', 596670, 4924240, 44.465, 4.21528, 256),
('07118', 'Laboule', '31T', 592584, 4937975, 44.5892, 4.16639, 680),
('07119', 'Le Lac-d''Issarlès', '31T', 583825, 4963718, 44.8219, 4.06028, 1000),
('07120', 'Lachamp-Raphaël', '31T', 602052, 4962623, 44.8097, 4.29056, 1320),
('07121', 'Lachapelle-Graillouse', '31T', 580630, 4962751, 44.8136, 4.01972, 1100),
('07122', 'Lachapelle-sous-Aubenas', '31T', 608284, 4935502, 44.5647, 4.36361, 209),
('07123', 'Lachapelle-sous-Chanéac', '31T', 604986, 4977980, 44.9475, 4.33084, 611),
('07124', 'Lafarre', '31T', 618760, 4992852, 45.0792, 4.50889, 740),
('07126', 'Lagorce', '31T', 612744, 4922647, 44.4483, 4.41695, 181),
('07127', 'Lalevade-d''Ardèche', '31T', 604798, 4945044, 44.6511, 4.32167, 267),
('07128', 'Lalouvesc', '31T', 620860, 4997399, 45.1197, 4.53666, 1080),
('07129', 'Lamastre', '31T', 624389, 4982341, 44.9836, 4.57778, 380),
('07130', 'Lanarce', '31T', 579758, 4953297, 44.7286, 4.00722, 1168),
('07131', 'Lanas', '31T', 611170, 4931940, 44.5322, 4.39917, 160),
('07132', 'Largentière', '31T', 602568, 4932786, 44.5411, 4.29111, 240),
('07133', 'Larnas', '31T', 627152, 4923035, 44.4494, 4.59806, 306),
('07134', 'Laurac-en-Vivarais', '31T', 602559, 4929206, 44.5089, 4.29028, 200),
('07135', 'Laval-d''Aurelle', '31T', 576413, 4934771, 44.5622, 3.96222, 725),
('07136', 'Laveyrune', '31T', 571081, 4942178, 44.6294, 3.89611, 980),
('07137', 'Lavillatte', '31T', 575185, 4954939, 44.7439, 3.94972, 1200),
('07138', 'Lavilledieu', '31T', 615384, 4937045, 44.5775, 4.45334, 229),
('07139', 'Laviolle', '31T', 605961, 4957409, 44.7622, 4.33889, 660),
('07140', 'Lemps', '31T', 638823, 4996592, 45.1092, 4.76473, 450),
('07141', 'Lentillères', '31T', 604158, 4940991, 44.6147, 4.31278, 500),
('07142', 'Lespéron', '31T', 571090, 4953349, 44.73, 3.89778, 1080),
('07143', 'Limony', '31T', 637708, 5023675, 45.3531, 4.75806, 144),
('07144', 'Loubaresse', '31T', 583418, 4939024, 44.5997, 4.05111, 1220),
('07145', 'Lussas', '31T', 616813, 4940960, 44.6125, 4.47222, 286),
('07146', 'Lyas', '31T', 626525, 4957286, 44.7578, 4.59861, 580),
('07147', 'Malarce-sur-la-Thines', '31T', 585470, 4922200, 44.4481, 4.07417, 380),
('07148', 'Malbosc', '31T', 585707, 4910878, 44.3461, 4.07528, 480),
('07149', 'Marcols-les-Eaux', '31T', 610960, 4963357, 44.815, 4.40334, 780),
('07150', 'Mariac', '31T', 608495, 4971371, 44.8875, 4.37389, 600),
('07151', 'Mars', '31T', 604302, 4986302, 45.0225, 4.32389, 1060),
('07152', 'Mauves', '31T', 644179, 4988870, 45.0386, 4.83056, 120),
('07153', 'Mayres', '31T', 588367, 4946404, 44.6656, 4.11472, 576),
('07154', 'Mazan-l''Abbaye', '31T', 586160, 4953318, 44.7281, 4.08805, 1120),
('07155', 'Mercuer', '31T', 607677, 4942838, 44.6308, 4.3575, 320),
('07156', 'Meyras', '31T', 600427, 4948431, 44.6822, 4.26722, 420),
('07157', 'Meysse', '31T', 636703, 4940886, 44.6083, 4.72277, 80),
('07158', 'Mézilhac', '31T', 607195, 4962491, 44.8078, 4.35555, 1160),
('07159', 'Mirabel', '31T', 618800, 4940810, 44.6108, 4.49722, 520),
('07160', 'Monestier', '31T', 620235, 5006185, 45.1989, 4.53084, 820),
('07161', 'Montpezat-sous-Bauzon', '31T', 595513, 4951659, 44.7119, 4.20583, 600),
('07162', 'Montréal', '31T', 602678, 4931430, 44.5289, 4.29222, 280),
('07163', 'Montselgues', '31T', 579928, 4930616, 44.5244, 4.00583, 1020),
('07165', 'Nonières', '31T', 617398, 4976498, 44.9322, 4.48778, 680),
('07166', 'Nozières', '31T', 621490, 4987316, 45.0289, 4.54223, 921),
('07167', 'Les Ollières-sur-Eyrieux', '31T', 627611, 4962401, 44.8036, 4.61361, 200),
('07168', 'Orgnac-l''Aven', '31T', 614345, 4906934, 44.3067, 4.43361, 280),
('07169', 'Ozon', '31T', 641719, 5002985, 45.1661, 4.80333, 260),
('07170', 'Pailharès', '31T', 623154, 4992936, 45.0792, 4.56472, 680),
('07171', 'Payzac', '31T', 591583, 4922932, 44.4539, 4.15111, 390),
('07172', 'Peaugres', '31T', 635665, 5016406, 45.2881, 4.73, 380),
('07173', 'Péreyres', '31T', 599296, 4958969, 44.7772, 4.255, 840),
('07174', 'Peyraud', '31T', 639012, 5017837, 45.3003, 4.77306, 140),
('07175', 'Le Plagnal', '31T', 574913, 4949998, 44.6994, 3.94556, 1170),
('07176', 'Planzolles', '31T', 591752, 4926637, 44.4872, 4.15389, 507),
('07177', 'Plats', '31T', 640355, 4985574, 45.0097, 4.78111, 480),
('07178', 'Pont-de-Labeaume', '31T', 602085, 4946606, 44.6656, 4.28777, 300),
('07179', 'Pourchères', '31T', 619355, 4956100, 44.7483, 4.50778, 680),
('07181', 'Le Pouzin', '31T', 638224, 4957403, 44.7567, 4.74639, 95),
('07182', 'Prades', '31T', 604203, 4943676, 44.6389, 4.31389, 321),
('07183', 'Pradons', '31T', 608119, 4925531, 44.475, 4.35944, 133),
('07184', 'Pranles', '31T', 624865, 4958952, 44.7731, 4.57805, 540),
('07185', 'Préaux', '31T', 630878, 5000221, 45.1433, 4.66472, 519),
('07186', 'Privas', '31T', 626463, 4954846, 44.7358, 4.59722, 298),
('07187', 'Prunet', '31T', 600109, 4939136, 44.5986, 4.26139, 620),
('07188', 'Quintenas', '31T', 632584, 5005350, 45.1892, 4.68778, 395),
('07189', 'Ribes', '31T', 596021, 4927748, 44.4967, 4.20778, 328),
('07190', 'Rochecolombe', '31T', 613957, 4930384, 44.5178, 4.4339, 187),
('07191', 'Rochemaure', '31T', 635295, 4938634, 44.5883, 4.70444, 80),
('07192', 'Rochepaule', '31T', 614676, 4992530, 45.0769, 4.45695, 891),
('07193', 'Rocher', '31T', 601910, 4936788, 44.5772, 4.28362, 343),
('07194', 'Rochessauve', '31T', 628853, 4948658, 44.6797, 4.62584, 400),
('07195', 'La Rochette', '31T', 597894, 4974472, 44.9169, 4.24028, 900),
('07196', 'Rocles', '31T', 596464, 4935131, 44.5631, 4.21473, 460),
('07197', 'Roiffieux', '31T', 629900, 5009586, 45.2278, 4.65473, 460),
('07198', 'Rompon', '31T', 637257, 4959420, 44.775, 4.73472, 310),
('07199', 'Rosières', '31T', 599951, 4926450, 44.4844, 4.25694, 160),
('07200', 'Le Roux', '31T', 590786, 4952918, 44.7239, 4.14639, 870),
('07201', 'Ruoms', '31T', 606811, 4923102, 44.4533, 4.3425, 117),
('07202', 'Sablières', '31T', 585280, 4931580, 44.5325, 4.07333, 500),
('07203', 'Sagnes-et-Goudoulet', '31T', 596967, 4960323, 44.7897, 4.22583, 1220),
('07204', 'Saint-Agrève', '31T', 610258, 4984921, 45.0092, 4.39916, 1060),
('07205', 'Saint-Alban-d''Ay', '31T', 628616, 5005083, 45.1875, 4.63722, 480),
('07206', 'Saint-Alban-en-Montagne', '31T', 572026, 4950274, 44.7022, 3.90916, 1080),
('07207', 'Saint-Alban-Auriolles', '31T', 603433, 4920023, 44.4261, 4.29944, 120),
('07208', 'Saint-Andéol-de-Berg', '31T', 621308, 4931690, 44.5283, 4.52667, 376),
('07209', 'Saint-Andéol-de-Fourchades', '31T', 602664, 4966954, 44.8486, 4.29917, 1040),
('07210', 'Saint-Andéol-de-Vals', '31T', 610996, 4949777, 44.6928, 4.40084, 467),
('07211', 'Saint-André-de-Cruzières', '31T', 597092, 4907704, 44.3161, 4.21749, 180),
('07212', 'Saint-André-en-Vivarais', '31T', 611136, 4997376, 45.1211, 4.41306, 1100),
('07213', 'Saint-André-Lachamp', '31T', 592494, 4928777, 44.5064, 4.16361, 700),
('07214', 'Saint-Apollinaire-de-Rias', '31T', 626071, 4975891, 44.9253, 4.5975, 660),
('07215', 'Saint-Barthélemy-le-Meil', '31T', 618282, 4971359, 44.8858, 4.49778, 520),
('07216', 'Saint-Barthélemy-Grozon', '31T', 628490, 4979952, 44.9614, 4.62917, 560),
('07217', 'Saint-Barthélemy-le-Plain', '31T', 637708, 4990517, 45.0547, 4.74889, 430),
('07218', 'Saint-Basile', '31T', 624012, 4979185, 44.9553, 4.57223, 680),
('07219', 'Saint-Bauzile', '31T', 632712, 4948428, 44.6769, 4.67445, 320),
('07220', 'Saint-Christol', '31T', 613842, 4969334, 44.8683, 4.44112, 612),
('07221', 'Saint-Cierge-la-Serre', '31T', 633390, 4961407, 44.7936, 4.68639, 550),
('07222', 'Saint-Cierge-sous-le-Cheylard', '31T', 614172, 4975421, 44.9231, 4.44667, 620),
('07223', 'Saint-Cirgues-de-Prades', '31T', 600792, 4941956, 44.6239, 4.27055, 420),
('07224', 'Saint-Cirgues-en-Montagne', '31T', 586581, 4956378, 44.7556, 4.09389, 1060),
('07225', 'Saint-Clair', '31T', 631919, 5015246, 45.2783, 4.68194, 457),
('07226', 'Saint-Clément', '31T', 599716, 4978574, 44.9536, 4.26417, 1160),
('07227', 'Saint-Cyr', '31T', 635860, 5012428, 45.2522, 4.73139, 393),
('07228', 'Saint-Désirat', '31T', 640165, 5012985, 45.2564, 4.78639, 157),
('07229', 'Saint-Didier-sous-Aubenas', '31T', 612326, 4940355, 44.6078, 4.41555, 185),
('07230', 'Saint-Étienne-de-Boulogne', '31T', 615577, 4950907, 44.7022, 4.45889, 503),
('07231', 'Saint-Étienne-de-Fontbellon', '31T', 610069, 4939545, 44.6008, 4.38695, 204),
('07232', 'Saint-Étienne-de-Lugdarès', '31T', 575657, 4944699, 44.6517, 3.95416, 1030),
('07233', 'Saint-Étienne-de-Serre', '31T', 621838, 4962042, 44.8014, 4.54055, 590),
('07234', 'Saint-Étienne-de-Valoux', '31T', 639776, 5011834, 45.2461, 4.78111, 175),
('07235', 'Sainte-Eulalie', '31T', 594032, 4962655, 44.8111, 4.18917, 1220),
('07236', 'Saint-Félicien', '31T', 628166, 4993837, 45.0864, 4.62861, 534),
('07237', 'Saint-Fortunat-sur-Eyrieux', '31T', 632583, 4965342, 44.8292, 4.67722, 160),
('07238', 'Saint-Genest-de-Beauzon', '31T', 594586, 4921648, 44.4419, 4.18861, 240),
('07239', 'Saint-Genest-Lachamp', '31T', 612587, 4967028, 44.8478, 4.42472, 1060),
('07240', 'Saint-Georges-les-Bains', '31T', 642958, 4969022, 44.8603, 4.80944, 230),
('07241', 'Saint-Germain', '31T', 615140, 4934602, 44.5556, 4.44972, 200),
('07242', 'Saint-Gineis-en-Coiron', '31T', 621574, 4943393, 44.6336, 4.53278, 661),
('07243', 'Saint-Jacques-d''Atticieux', '31T', 630679, 5021457, 45.3344, 4.66777, 500),
('07244', 'Saint-Jean-Chambre', '31T', 623682, 4973529, 44.9044, 4.56666, 740),
('07245', 'Saint-Jean-de-Muzols', '31T', 642863, 4993872, 45.0839, 4.81528, 130),
('07247', 'Saint-Jean-le-Centenier', '31T', 621836, 4938830, 44.5925, 4.535, 320),
('07248', 'Saint-Jean-Roure', '31T', 612820, 4977496, 44.9419, 4.43, 960),
('07249', 'Saint-Jeure-d''Andaure', '31T', 614804, 4989076, 45.0458, 4.45778, 1000),
('07250', 'Saint-Jeure-d''Ay', '31T', 634209, 5000754, 45.1475, 4.70722, 470),
('07251', 'Saint-Joseph-des-Bancs', '31T', 611857, 4954669, 44.7367, 4.41277, 667),
('07252', 'Saint-Julien-Boutières', '31T', 606579, 4981000, 44.9744, 4.35166, 680),
('07253', 'Saint-Julien-du-Gua', '31T', 614280, 4958230, 44.7683, 4.44416, 680),
('07254', 'Saint-Julien-du-Serre', '31T', 611809, 4946026, 44.6589, 4.41028, 330),
('07255', 'Saint-Julien-en-Saint-Alban', '31T', 634449, 4957014, 44.7539, 4.69862, 130),
('07256', 'Saint-Julien-Labrousse', '31T', 619137, 4974956, 44.9181, 4.50945, 760),
('07257', 'Saint-Julien-le-Roux', '31T', 632937, 4969486, 44.8664, 4.68278, 599),
('07258', 'Saint-Julien-Vocance', '31T', 618188, 5003615, 45.1761, 4.50417, 659),
('07259', 'Saint-Just', '31T', 628662, 4906984, 44.3047, 4.61306, 83),
('07260', 'Saint-Lager-Bressac', '31T', 635403, 4950336, 44.6936, 4.70889, 190),
('07261', 'Saint-Laurent-du-Pape', '31T', 639647, 4964781, 44.8228, 4.76639, 110),
('07262', 'Saint-Laurent-les-Bains', '31T', 576994, 4939715, 44.6067, 3.97028, 860),
('07263', 'Saint-Laurent-sous-Coiron', '31T', 617600, 4943752, 44.6375, 4.48277, 520),
('07264', 'Saint-Marcel-d''Ardèche', '31T', 628988, 4909552, 44.3278, 4.61778, 145),
('07265', 'Saint-Marcel-lès-Annonay', '31T', 627501, 5016020, 45.2861, 4.62583, 460),
('07266', 'Sainte-Marguerite-Lafigère', '31T', 578775, 4925541, 44.4789, 3.99055, 340),
('07267', 'Saint-Martial', '31T', 600791, 4968776, 44.8653, 4.27584, 900),
('07268', 'Saint-Martin-d''Ardèche', '31T', 625009, 4906790, 44.3036, 4.56723, 50),
('07269', 'Saint-Martin-de-Valamas', '31T', 607986, 4976857, 44.9369, 4.36861, 560),
('07270', 'Saint-Martin-sur-Lavezon', '31T', 630993, 4944133, 44.6386, 4.65167, 240),
('07272', 'Saint-Maurice-d''Ardèche', '31T', 611254, 4930892, 44.5228, 4.4, 160),
('07273', 'Saint-Maurice-d''Ibie', '31T', 617830, 4928694, 44.5019, 4.48223, 219),
('07274', 'Saint-Maurice-en-Chalencon', '31T', 625953, 4967400, 44.8489, 4.59389, 560),
('07275', 'Saint-Mélany', '31T', 588682, 4931440, 44.5308, 4.11612, 500),
('07276', 'Saint-Michel-d''Aurance', '31T', 615531, 4973038, 44.9014, 4.46334, 640),
('07277', 'Saint-Michel-de-Boulogne', '31T', 613522, 4950099, 44.6953, 4.43278, 500),
('07278', 'Saint-Michel-de-Chabrillanoux', '31T', 626718, 4966458, 44.8403, 4.60333, 540),
('07279', 'Saint-Montan', '31T', 629249, 4922089, 44.4406, 4.62417, 140),
('07280', 'Saint-Paul-le-Jeune', '31T', 591716, 4910312, 44.3403, 4.15055, 255),
('07281', 'Saint-Péray', '31T', 645508, 4978557, 44.9456, 4.84444, 130),
('07282', 'Saint-Pierre-de-Colombier', '31T', 599928, 4950800, 44.7036, 4.26139, 404),
('07283', 'Saint-Pierre-la-Roche', '31T', 629899, 4945901, 44.6547, 4.63833, 520),
('07284', 'Saint-Pierre-Saint-Jean', '31T', 588262, 4923349, 44.4581, 4.10945, 432),
('07285', 'Saint-Pierre-sur-Doux', '31T', 615179, 4997324, 45.12, 4.46444, 950),
('07286', 'Saint-Pierreville', '31T', 617722, 4963632, 44.8164, 4.48889, 600),
('07287', 'Saint-Pons', '31T', 625205, 4939141, 44.5947, 4.5775, 350),
('07288', 'Saint-Priest', '31T', 622412, 4952638, 44.7167, 4.54555, 420),
('07289', 'Saint-Privat', '31T', 611847, 4942569, 44.6278, 4.41, 220),
('07290', 'Saint-Prix', '31T', 618519, 4977537, 44.9414, 4.50222, 560),
('07291', 'Saint-Remèze', '31T', 619619, 4916658, 44.3933, 4.50194, 371),
('07292', 'Saint-Romain-d''Ay', '31T', 633219, 5003172, 45.1694, 4.69527, 460),
('07293', 'Saint-Romain-de-Lerps', '31T', 641834, 4982087, 44.9781, 4.79889, 612),
('07294', 'Saint-Sauveur-de-Cruzières', '31T', 600108, 4906114, 44.3014, 4.255, 170),
('07295', 'Saint-Sauveur-de-Montagut', '31T', 625044, 4964449, 44.8225, 4.58167, 200),
('07296', 'Saint-Sernin', '31T', 610408, 4936464, 44.5731, 4.39055, 183),
('07297', 'Saint-Sylvestre', '31T', 637843, 4983234, 44.9892, 4.74861, 410),
('07298', 'Saint-Symphorien-sous-Chomérac', '31T', 635074, 4953416, 44.7214, 4.70556, 160),
('07299', 'Saint-Symphorien-de-Mahun', '31T', 622621, 5002433, 45.1647, 4.56028, 720),
('07300', 'Saint-Thomé', '31T', 629313, 4928881, 44.5017, 4.62667, 180),
('07301', 'Saint-Victor', '31T', 631717, 4995577, 45.1014, 4.67417, 608),
('07302', 'Saint-Vincent-de-Barrès', '31T', 635372, 4946569, 44.6597, 4.70751, 260),
('07303', 'Saint-Vincent-de-Durfort', '31T', 630066, 4962697, 44.8058, 4.64472, 400),
('07304', 'Salavas', '31T', 609926, 4916673, 44.395, 4.38028, 100),
('07305', 'Les Salelles', '31T', 588012, 4918901, 44.4181, 4.10555, 223),
('07306', 'Sampzon', '31T', 606736, 4919582, 44.4217, 4.34083, 300),
('07307', 'Sanilhac', '31T', 599331, 4932335, 44.5375, 4.25028, 440),
('07308', 'Sarras', '31T', 641448, 5005357, 45.1875, 4.80056, 140),
('07309', 'Satillieu', '31T', 626952, 5001006, 45.1511, 4.61501, 475),
('07310', 'Savas', '31T', 632746, 5017394, 45.2975, 4.69305, 550),
('07311', 'Sceautres', '31T', 627470, 4941685, 44.6172, 4.60666, 460),
('07312', 'Sécheras', '31T', 639253, 4998917, 45.13, 4.77084, 420),
('07313', 'Serrières', '31T', 637906, 5019573, 45.3161, 4.75944, 140),
('07314', 'Silhac', '31T', 627134, 4970942, 44.8806, 4.60972, 580),
('07315', 'La Souche', '31T', 594987, 4942516, 44.6297, 4.1975, 544),
('07316', 'Soyons', '31T', 646113, 4972242, 44.8886, 4.85028, 110),
('07317', 'Talencieux', '31T', 639682, 5009208, 45.2225, 4.77917, 372),
('07318', 'Tauriers', '31T', 601709, 4934131, 44.5533, 4.28056, 420),
('07319', 'Le Teil', '31T', 633877, 4934653, 44.5528, 4.68555, 71),
('07321', 'Thorrenc', '31T', 638468, 5010817, 45.2372, 4.76416, 230),
('07322', 'Thueyts', '31T', 596715, 4947850, 44.6775, 4.22028, 480),
('07323', 'Toulaud', '31T', 643460, 4973108, 44.8969, 4.81695, 270),
('07324', 'Tournon-sur-Rhône', '31T', 644507, 4991779, 45.0647, 4.83556, 121),
('07325', 'Ucel', '31T', 609659, 4944199, 44.6428, 4.38277, 240),
('07326', 'Usclades-et-Rieutord', '31T', 591628, 4958670, 44.7756, 4.15805, 1260),
('07327', 'Uzer', '31T', 605494, 4930703, 44.5219, 4.3275, 160),
('07328', 'Vagnas', '31T', 608864, 4911346, 44.3472, 4.36583, 231),
('07329', 'Valgorge', '31T', 588544, 4938258, 44.5922, 4.11555, 588),
('07330', 'Vallon-Pont-d''Arc', '31T', 611163, 4918113, 44.4078, 4.39611, 105),
('07331', 'Vals-les-Bains', '31T', 608482, 4946092, 44.66, 4.36834, 269),
('07332', 'Valvignères', '31T', 625120, 4928645, 44.5003, 4.57388, 186),
('07333', 'Vanosc', '31T', 621599, 5009020, 45.2242, 4.54889, 640),
('07334', 'Les Vans', '31T', 590155, 4917511, 44.4053, 4.13222, 180),
('07335', 'Vaudevant', '31T', 627363, 4995735, 45.1036, 4.61889, 590),
('07336', 'Vernon', '31T', 597326, 4929126, 44.5089, 4.22445, 283),
('07337', 'Vernosc-lès-Annonay', '31T', 634590, 5008572, 45.2178, 4.71417, 390),
('07338', 'Vernoux-en-Vivarais', '31T', 629910, 4972603, 44.895, 4.64528, 580),
('07339', 'Vesseaux', '31T', 614310, 4945360, 44.6525, 4.44166, 265),
('07340', 'Veyras', '31T', 623847, 4954734, 44.7353, 4.56417, 434),
('07341', 'Villeneuve-de-Berg', '31T', 619172, 4934984, 44.5583, 4.50056, 320),
('07342', 'Villevocance', '31T', 624695, 5009142, 45.2247, 4.58834, 440),
('07343', 'Vinezac', '31T', 605373, 4932677, 44.5397, 4.32638, 240),
('07344', 'Vinzieux', '31T', 633371, 5020834, 45.3283, 4.70195, 460),
('07345', 'Vion', '31T', 642074, 4996849, 45.1108, 4.80611, 128),
('07346', 'Viviers', '31T', 634299, 4927068, 44.4844, 4.68889, 73),
('07347', 'Vocance', '31T', 622020, 5006404, 45.2006, 4.55361, 500),
('07348', 'Vogüé', '31T', 612433, 4934185, 44.5522, 4.41555, 161),
('07349', 'La Voulte-sur-Rhône', '31T', 640922, 4962771, 44.8044, 4.78195, 95),
('08001', 'Acy-Romance', '31T', 596880, 5484148, 49.5022, 4.33806, 80),
('08003', 'Aiglemont', '31T', 627056, 5516067, 49.7836, 4.765, 250),
('08004', 'Aire', '31T', 584104, 5481620, 49.4814, 4.16111, 70),
('08005', 'Alincourt', '31T', 597535, 5473348, 49.405, 4.34445, 96),
('08006', 'Alland''Huy-et-Sausseuil', '31T', 612760, 5485812, 49.5144, 4.55778, 96),
('08007', 'Les Alleux', '31T', 625734, 5481462, 49.4728, 4.73555, 180),
('08008', 'Amagne', '31T', 608569, 5486129, 49.5181, 4.49999, 80),
('08009', 'Amblimont', '31T', 648897, 5499628, 49.6308, 5.06195, 220),
('08010', 'Ambly-Fleury', '31T', 607450, 5482709, 49.4875, 4.48361, 79),
('08011', 'Anchamps', '31T', 620127, 5532500, 49.9328, 4.67389, 130),
('08013', 'Angecourt', '31T', 642885, 5500023, 49.6358, 4.97889, 180),
('08014', 'Annelles', '31T', 602826, 5476040, 49.4283, 4.41805, 115),
('08015', 'Antheny', '31T', 594355, 5522718, 49.8494, 4.3125, 209),
('08016', 'Aouste', '31T', 594828, 5517381, 49.8014, 4.31777, 200),
('08017', 'Apremont', '31T', 644520, 5459308, 49.2694, 4.98667, 172),
('08018', 'Ardeuil-et-Montfauxelles', '31T', 624134, 5458749, 49.2689, 4.70639, 117),
('08019', 'Les Grandes-Armoises', '31T', 636953, 5488530, 49.5339, 4.89278, 210),
('08020', 'Les Petites-Armoises', '31T', 632204, 5485354, 49.5064, 4.82612, 170),
('08021', 'Arnicourt', '31T', 597472, 5490368, 49.5581, 4.34777, 90),
('08022', 'Arreux', '31T', 618753, 5520636, 49.8264, 4.65111, 256),
('08023', 'Artaise-le-Vivier', '31T', 636985, 5493660, 49.58, 4.89501, 201),
('08024', 'Asfeld', '31T', 581026, 5480183, 49.4689, 4.11833, 65),
('08025', 'Attigny', '31T', 614230, 5481858, 49.4786, 4.57694, 95),
('08026', 'Aubigny-les-Pothées', '31T', 603396, 5514790, 49.7767, 4.43611, 200),
('08027', 'Auboncourt-Vauzelles', '31T', 607928, 5490071, 49.5536, 4.49222, 110),
('08028', 'Aubrives', '31T', 625979, 5551606, 50.1033, 4.76166, 110),
('08029', 'Auflance', '31T', 665578, 5498999, 49.6208, 5.2925, 197),
('08030', 'Auge', '31T', 591117, 5524052, 49.8619, 4.26778, 250),
('08031', 'Aure', '31T', 618966, 5459314, 49.275, 4.63555, 130),
('08032', 'Aussonce', '31T', 596028, 5467298, 49.3508, 4.32222, 103),
('08033', 'Authe', '31T', 636132, 5480321, 49.4603, 4.87861, 180),
('08034', 'Autrecourt-et-Pourron', '31T', 646659, 5497775, 49.6147, 5.03028, 162),
('08035', 'Autruche', '31T', 637773, 5479930, 49.4564, 4.90111, 180),
('08036', 'Autry', '31T', 633769, 5459098, 49.27, 4.83889, 120),
('08037', 'Auvillers-les-Forges', '31T', 597579, 5524505, 49.865, 4.35778, 285),
('08038', 'Avançon', '31T', 590170, 5481161, 49.4764, 4.24473, 100),
('08039', 'Avaux', '31T', 578509, 5478880, 49.4575, 4.08334, 65),
('08040', 'Les Ayvelles', '31T', 626487, 5509596, 49.7256, 4.755, 149),
('08041', 'Baâlons', '31T', 620642, 5495003, 49.5956, 4.66944, 215),
('08042', 'Balaives-et-Butz', '31T', 625099, 5503786, 49.6736, 4.73389, 184),
('08043', 'Balan', '31T', 641617, 5506293, 49.6925, 4.96361, 160),
('08044', 'Balham', '31T', 584065, 5482855, 49.4925, 4.16083, 64),
('08045', 'Ballay', '31T', 626788, 5476821, 49.4308, 4.74861, 110),
('08046', 'Banogne-Recouvrance', '31T', 581497, 5491804, 49.5733, 4.12723, 135),
('08047', 'Barbaise', '31T', 614490, 5502382, 49.6631, 4.5865, 209),
('08048', 'Barby', '31T', 595090, 5486403, 49.5228, 4.31389, 84),
('08049', 'Bar-lès-Buzancy', '31T', 640773, 5477658, 49.4353, 4.94167, 190),
('08052', 'Bayonville', '31T', 645453, 5473671, 49.3983, 5.00472, 231),
('08053', 'Bazeilles', '31T', 642560, 5504742, 49.6783, 4.97611, 160),
('08055', 'Beaumont-en-Argonne', '31T', 648850, 5489584, 49.5406, 5.05749, 170),
('08056', 'Beffu-et-le-Morthomme', '31T', 637954, 5470356, 49.3703, 4.90028, 150),
('08057', 'Belleville-et-Châtillon-sur-Bar', '31T', 632581, 5478905, 49.4483, 4.82916, 235),
('08058', 'Belval', '31T', 617710, 5515299, 49.7786, 4.635, 153),
('08059', 'Belval-Bois-des-Dames', '31T', 647472, 5481790, 49.4708, 5.03555, 240),
('08060', 'Bergnicourt', '31T', 591017, 5474966, 49.4206, 4.25499, 80),
('08061', 'La Berlière', '31T', 638972, 5487437, 49.5236, 4.92028, 200),
('08062', 'Bertoncourt', '31T', 601291, 5488182, 49.5378, 4.4, 110),
('08063', 'La Besace', '31T', 641882, 5491530, 49.5597, 4.96194, 230),
('08064', 'Biermes', '31T', 600370, 5482512, 49.4869, 4.38583, 85),
('08065', 'Bièvres', '31T', 663800, 5492052, 49.5589, 5.26501, 210),
('08066', 'Bignicourt', '31T', 603388, 5472961, 49.4006, 4.425, 105),
('08067', 'Blagny', '31T', 658268, 5499059, 49.6233, 5.19139, 180),
('08069', 'Blanchefosse-et-Bay', '31T', 588851, 5514870, 49.7797, 4.23416, 265),
('08070', 'Blanzy-la-Salonnaise', '31T', 584834, 5482558, 49.4897, 4.17139, 70),
('08071', 'Blombay', '31T', 604393, 5520122, 49.8244, 4.45139, 270),
('08072', 'Bosseval-et-Briancourt', '31T', 635030, 5513232, 49.7564, 4.87473, 240),
('08073', 'Bossus-lès-Rumigny', '31T', 590298, 5521660, 49.8406, 4.25583, 200),
('08074', 'Bouconville', '31T', 628311, 5457331, 49.2553, 4.76333, 135),
('08075', 'Boult-aux-Bois', '31T', 633712, 5477140, 49.4322, 4.84416, 175),
('08076', 'Boulzicourt', '31T', 622333, 5506379, 49.6975, 4.69638, 160),
('08077', 'Bourcq', '31T', 618434, 5471783, 49.3872, 4.63194, 150),
('08078', 'Bourg-Fidèle', '31T', 610655, 5527631, 49.8908, 4.54056, 370),
('08079', 'Boutancourt', '31T', 627591, 5505234, 49.6861, 4.76889, 161),
('08080', 'Bouvellemont', '31T', 620086, 5493816, 49.585, 4.66139, 245),
('08081', 'Bogny-sur-Meuse', '31T', 626978, 5523604, 49.8514, 4.76638, 150),
('08082', 'Brécy-Brières', '31T', 628295, 5464931, 49.3236, 4.76555, 103),
('08083', 'Brévilly', '31T', 649957, 5503396, 49.6644, 5.07806, 160),
('08084', 'Brienne-sur-Aisne', '31T', 576251, 5476161, 49.4333, 4.05166, 57),
('08085', 'Brieulles-sur-Bar', '31T', 634392, 5482286, 49.4783, 4.85528, 185),
('08086', 'Briquenay', '31T', 636279, 5474423, 49.4072, 4.87861, 174),
('08087', 'Brognon', '31T', 592163, 5531762, 49.9311, 4.28417, 286),
('08088', 'Bulson', '31T', 638371, 5499195, 49.6294, 4.91612, 285),
('08089', 'Buzancy', '31T', 641757, 5477004, 49.4292, 4.955, 176),
('08090', 'Carignan', '31T', 656486, 5500274, 49.6347, 5.16722, 170),
('08092', 'Cauroy', '31T', 606624, 5467278, 49.3489, 4.46806, 140),
('08094', 'Cernion', '31T', 602905, 5517468, 49.8008, 4.43, 272),
('08095', 'Chagny', '31T', 623216, 5493083, 49.5778, 4.70444, 200),
('08096', 'Chalandry-Elaire', '31T', 626042, 5508071, 49.7119, 4.74834, 160),
('08097', 'Challerange', '31T', 626856, 5463414, 49.3103, 4.74527, 110),
('08098', 'Champigneulle', '31T', 639777, 5468517, 49.3533, 4.92473, 163),
('08099', 'Champigneul-sur-Vence', '31T', 619395, 5506932, 49.7031, 4.65583, 250),
('08100', 'Champlin', '31T', 595647, 5521968, 49.8425, 4.33028, 255),
('08101', 'La Chapelle', '31T', 645130, 5512103, 49.7439, 5.01445, 309),
('08102', 'Chappes', '31T', 591727, 5496199, 49.6114, 4.26972, 126),
('08103', 'Charbogne', '31T', 615159, 5484596, 49.5031, 4.59056, 100),
('08104', 'Chardeny', '31T', 616100, 5475317, 49.4194, 4.60083, 120),
('08105', 'Charleville-Mézières', '31T', 623890, 5513645, 49.7625, 4.72027, 150),
('08106', 'Charnois', '31T', 630747, 5552524, 50.1106, 4.82862, 220),
('08107', 'Château-Porcien', '31T', 589970, 5487181, 49.5306, 4.24334, 80),
('08109', 'Chatel-Chéhéry', '31T', 642118, 5460729, 49.2828, 4.95417, 170),
('08110', 'Le Châtelet-sur-Sormonne', '31T', 609338, 5520715, 49.8289, 4.52028, 180),
('08111', 'Le Châtelet-sur-Retourne', '31T', 592493, 5474713, 49.4181, 4.27528, 90),
('08113', 'Chaumont-Porcien', '31T', 589929, 5500555, 49.6508, 4.24583, 152),
('08114', 'Chéhéry', '31T', 635219, 5500815, 49.6447, 4.87305, 160),
('08115', 'Chémery-sur-Bar', '31T', 634935, 5496111, 49.6025, 4.8675, 170),
('08116', 'Le Chesne', '31T', 627797, 5486237, 49.5153, 4.76556, 165),
('08117', 'Chesnois-Auboncourt', '31T', 613376, 5491973, 49.5697, 4.56806, 123),
('08119', 'Cheveuges', '31T', 635756, 5503424, 49.6681, 4.88139, 169),
('08120', 'Chevières', '31T', 637877, 5466214, 49.3331, 4.89778, 125),
('08121', 'Chilly', '31T', 605938, 5521882, 49.84, 4.47334, 220),
('08122', 'Chooz', '31T', 629094, 5551835, 50.1047, 4.80528, 105),
('08123', 'Chuffilly-Roche', '31T', 616577, 5478478, 49.4478, 4.60833, 101),
('08124', 'Clavy-Warby', '31T', 612185, 5512555, 49.755, 4.55749, 170),
('08125', 'Cliron', '31T', 616092, 5518909, 49.8114, 4.61361, 176),
('08126', 'Condé-lès-Herpy', '31T', 588544, 5487034, 49.5294, 4.2236, 70),
('08128', 'Condé-lès-Autry', '31T', 634990, 5457150, 49.2522, 4.85501, 119),
('08130', 'Contreuve', '31T', 617890, 5468960, 49.3619, 4.62361, 110),
('08131', 'Cornay', '31T', 641756, 5463006, 49.3033, 4.95, 170),
('08132', 'Corny-Machéroménil', '31T', 604317, 5492904, 49.5797, 4.44306, 95),
('08133', 'Coucy', '31T', 605436, 5484894, 49.5075, 4.45639, 77),
('08134', 'Coulommes-et-Marqueny', '31T', 614473, 5477013, 49.435, 4.57889, 105),
('08135', 'La Croix-aux-Bois', '31T', 630143, 5473872, 49.4036, 4.79389, 205),
('08136', 'Daigny', '31T', 643662, 5507799, 49.7056, 4.9925, 190),
('08137', 'Damouzy', '31T', 620657, 5517743, 49.8, 4.67667, 180),
('08138', 'Les Deux-Villes', '31T', 661456, 5502583, 49.6542, 5.23695, 230),
('08139', 'Deville', '31T', 622349, 5526865, 49.8817, 4.70305, 150),
('08140', 'Dom-le-Mesnil', '31T', 630284, 5505793, 49.6906, 4.80639, 158),
('08141', 'Dommery', '31T', 606311, 5503879, 49.6781, 4.47361, 210),
('08142', 'Donchery', '31T', 635232, 5506748, 49.6981, 4.87528, 150),
('08143', 'Doumely-Bégny', '31T', 593878, 5498367, 49.6306, 4.3, 100),
('08144', 'Doux', '31T', 603508, 5484702, 49.5061, 4.42972, 75),
('08145', 'Douzy', '31T', 647431, 5504069, 49.6711, 5.04333, 160),
('08146', 'Draize', '31T', 596330, 5501530, 49.6586, 4.33472, 118),
('08147', 'Dricourt', '31T', 609645, 5472620, 49.3964, 4.51111, 125),
('08148', 'L''Écaille', '31T', 587860, 5474605, 49.4178, 4.21139, 75),
('08149', 'L''Échelle', '31T', 605900, 5517680, 49.8022, 4.47166, 250),
('08150', 'Écly', '31T', 593174, 5489088, 49.5472, 4.28806, 78),
('08151', 'Écordal', '31T', 614354, 5487452, 49.5289, 4.58027, 107),
('08152', 'Élan', '31T', 626702, 5502958, 49.6658, 4.75583, 186),
('08153', 'Escombres-et-le-Chesnois', '31T', 653064, 5507006, 49.6961, 5.1225, 250),
('08154', 'Estrebay', '31T', 597387, 5520733, 49.8311, 4.35416, 260),
('08155', 'Étalle', '31T', 603762, 5522798, 49.8486, 4.44333, 220),
('08156', 'Éteignières', '31T', 599708, 5527046, 49.8875, 4.38805, 310),
('08158', 'Étrépigny', '31T', 626464, 5505424, 49.6881, 4.75333, 180),
('08159', 'Euilly-et-Lombut', '31T', 653207, 5499810, 49.6314, 5.12166, 200),
('08160', 'Évigny', '31T', 620483, 5510293, 49.7331, 4.67195, 190),
('08161', 'Exermont', '31T', 645777, 5462246, 49.2956, 5.005, 150),
('08162', 'Fagnon', '31T', 617830, 5510729, 49.7375, 4.63528, 171),
('08163', 'Faissault', '31T', 608970, 5496239, 49.6089, 4.50833, 185),
('08164', 'Falaise', '31T', 625549, 5471108, 49.3797, 4.72972, 110),
('08165', 'FAUX', '31T', 608462, 5488475, 49.5392, 4.49916, 112),
('08166', 'Fépin', '31T', 623881, 5542658, 50.0233, 4.72944, 120),
('08167', 'La Férée', '31T', 593658, 5513407, 49.7658, 4.30056, 240),
('08168', 'La Ferté-sur-Chiers', '31T', 662194, 5493983, 49.5767, 5.24361, 169),
('08169', 'Flaignes-Havys', '31T', 600705, 5519620, 49.8206, 4.4, 250),
('08170', 'Fleigneux', '31T', 640310, 5512656, 49.75, 4.94778, 270),
('08171', 'Fléville', '31T', 643421, 5463451, 49.3069, 4.97305, 140),
('08172', 'Fligny', '31T', 590815, 5526518, 49.8842, 4.26416, 240),
('08173', 'Flize', '31T', 627815, 5506815, 49.7003, 4.77251, 150),
('08174', 'Floing', '31T', 638922, 5509777, 49.7244, 4.9275, 180),
('08175', 'Foisches', '31T', 627003, 5554504, 50.1292, 4.77694, 200),
('08176', 'Fossé', '31T', 645309, 5479105, 49.4472, 5.00473, 276),
('08178', 'Fraillicourt', '31T', 583805, 5502341, 49.6678, 4.16139, 142),
('08179', 'Francheval', '31T', 647593, 5507689, 49.7036, 5.04694, 225),
('08180', 'La Francheville', '31T', 623368, 5510234, 49.7319, 4.71195, 154),
('08182', 'Le Fréty', '31T', 592284, 5510665, 49.7414, 4.28084, 233),
('08183', 'Fromelennes', '31T', 632709, 5554334, 50.1264, 4.85667, 120),
('08184', 'Fromy', '31T', 662781, 5496534, 49.5994, 5.25278, 170),
('08185', 'Fumay', '31T', 622362, 5539440, 49.9947, 4.70722, 120),
('08186', 'Germont', '31T', 636153, 5477850, 49.4381, 4.87805, 175),
('08187', 'Gernelle', '31T', 630851, 5514674, 49.7703, 4.81722, 260),
('08188', 'Gespunsart', '31T', 631547, 5520593, 49.8233, 4.82889, 208),
('08189', 'Girondelle', '31T', 599852, 5522508, 49.8467, 4.38889, 250),
('08190', 'Givet', '31T', 630388, 5555791, 50.14, 4.82472, 100),
('08191', 'Givonne', '31T', 643410, 5509740, 49.7231, 4.98972, 200),
('08192', 'Givron', '31T', 593017, 5500576, 49.6506, 4.28861, 120),
('08193', 'Givry', '31T', 611247, 5483063, 49.49, 4.53612, 85),
('08194', 'Glaire', '31T', 638034, 5508456, 49.7128, 4.91472, 154),
('08195', 'Gomont', '31T', 584069, 5483935, 49.5022, 4.16112, 90),
('08196', 'Grandchamp', '31T', 601026, 5500256, 49.6464, 4.39944, 170),
('08197', 'Grandham', '31T', 635181, 5462531, 49.3006, 4.85945, 122),
('08198', 'Grandpré', '31T', 635894, 5467183, 49.3422, 4.87083, 130),
('08199', 'La Grandville', '31T', 629238, 5515995, 49.7825, 4.79527, 250),
('08200', 'Grivy-Loisy', '31T', 618099, 5475144, 49.4175, 4.62833, 109),
('08201', 'Gruyères', '31T', 615531, 5507744, 49.7111, 4.6025, 211),
('08202', 'Gué-d''Hossus', '31T', 609981, 5535187, 49.9589, 4.53333, 310),
('08203', 'Guignicourt-sur-Vence', '31T', 619164, 5504702, 49.6831, 4.65195, 179),
('08204', 'Guincourt', '31T', 617399, 5490823, 49.5586, 4.62334, 150),
('08205', 'Hagnicourt', '31T', 614607, 5496479, 49.61, 4.58639, 190),
('08206', 'Ham-les-Moines', '31T', 614946, 5517309, 49.7972, 4.59722, 153),
('08207', 'Ham-sur-Meuse', '31T', 627182, 5552840, 50.1142, 4.77889, 120),
('08208', 'Hannappes', '31T', 588407, 5520022, 49.8261, 4.22917, 177),
('08209', 'Hannogne-Saint-Martin', '31T', 632026, 5504228, 49.6761, 4.83, 190),
('08210', 'Hannogne-Saint-Rémy', '31T', 582163, 5495552, 49.6069, 4.13722, 120),
('08211', 'Haraucourt', '31T', 641936, 5498700, 49.6242, 4.96528, 190),
('08212', 'Harcy', '31T', 612333, 5521827, 49.8383, 4.56223, 250),
('08214', 'Hargnies', '31T', 628202, 5542605, 50.0219, 4.78972, 300),
('08215', 'Harricourt', '31T', 639888, 5477573, 49.4347, 4.92944, 180),
('08216', 'Haudrecy', '31T', 616248, 5516317, 49.7881, 4.615, 155),
('08217', 'Haulmé', '31T', 628165, 5524961, 49.8633, 4.78334, 150),
('08218', 'Les Hautes-Rivières', '31T', 632378, 5527442, 49.8847, 4.84278, 170),
('08219', 'Hauteville', '31T', 593924, 5493364, 49.5856, 4.29944, 86),
('08220', 'Hauviné', '31T', 601734, 5462119, 49.3033, 4.39944, 100),
('08222', 'Haybes', '31T', 622101, 5541289, 50.0114, 4.70417, 120),
('08223', 'Herbeuval', '31T', 669063, 5497344, 49.605, 5.33999, 236),
('08225', 'Herpy-l''Arlésienne', '31T', 587366, 5486521, 49.525, 4.20722, 70),
('08226', 'Hierges', '31T', 624318, 5552092, 50.1081, 4.73861, 120),
('08228', 'La Horgne', '31T', 620560, 5498708, 49.6289, 4.66945, 219),
('08229', 'Houdilcourt', '31T', 581438, 5475525, 49.4269, 4.12306, 65),
('08230', 'Houldizy', '31T', 620085, 5519151, 49.8128, 4.66916, 232),
('08232', 'Illy', '31T', 641305, 5511353, 49.7381, 4.96111, 250),
('08233', 'Imécourt', '31T', 643205, 5470954, 49.3744, 4.97278, 170),
('08234', 'Inaumont', '31T', 594937, 5490570, 49.5603, 4.31278, 87),
('08235', 'Issancourt-et-Rumel', '31T', 631289, 5513109, 49.7561, 4.82278, 184),
('08236', 'Jandun', '31T', 612313, 5502548, 49.665, 4.55639, 200),
('08237', 'Joigny-sur-Meuse', '31T', 626591, 5522236, 49.8392, 4.76056, 150),
('08238', 'Jonval', '31T', 620395, 5492557, 49.5736, 4.66528, 230),
('08239', 'Juniville', '31T', 600390, 5472659, 49.3983, 4.38361, 90),
('08240', 'Justine-Herbigny', '31T', 595765, 5494878, 49.5989, 4.32527, 104),
('08242', 'Laifour', '31T', 621587, 5530555, 49.915, 4.69361, 140),
('08243', 'Lalobbe', '31T', 599232, 5502911, 49.6706, 4.37527, 130),
('08244', 'Lametz', '31T', 622245, 5487995, 49.5322, 4.68944, 160),
('08245', 'Lançon', '31T', 636240, 5459746, 49.2753, 4.87306, 115),
('08246', 'Landres-et-Saint-Georges', '31T', 646010, 5468679, 49.3533, 5.01056, 190),
('08247', 'Landrichamps', '31T', 630777, 5550455, 50.0919, 4.82833, 150),
('08248', 'Launois-sur-Vence', '31T', 611031, 5501471, 49.6556, 4.53833, 200),
('08249', 'Laval-Morency', '31T', 607131, 5521164, 49.8333, 4.48973, 200),
('08250', 'Leffincourt', '31T', 612163, 5471744, 49.3881, 4.54556, 125),
('08251', 'Lépron-les-Vallées', '31T', 604606, 5513237, 49.7625, 4.45249, 210),
('08252', 'Létanne', '31T', 650437, 5490400, 49.5475, 5.07973, 170),
('08254', 'Liart', '31T', 596485, 5514167, 49.7722, 4.33999, 210),
('08255', 'Linay', '31T', 660651, 5498572, 49.6183, 5.22416, 169),
('08256', 'Liry', '31T', 620582, 5463057, 49.3083, 4.65889, 120),
('08257', 'Logny-Bogny', '31T', 600330, 5515071, 49.7797, 4.39361, 200),
('08259', 'Longwé', '31T', 629773, 5472473, 49.3911, 4.78834, 170),
('08260', 'Lonny', '31T', 614316, 5519675, 49.8186, 4.58916, 184),
('08261', 'Louvergny', '31T', 625889, 5490426, 49.5533, 4.74055, 200),
('08262', 'Lucquy', '31T', 607034, 5488539, 49.54, 4.47945, 100),
('08263', 'Lumes', '31T', 628435, 5511063, 49.7383, 4.7825, 150),
('08264', 'Machault', '31T', 608808, 5468062, 49.3556, 4.49834, 135),
('08267', 'Mairy', '31T', 647914, 5501826, 49.6508, 5.04917, 190),
('08268', 'Maisoncelle-et-Villers', '31T', 638054, 5495850, 49.5994, 4.91055, 260),
('08269', 'Malandry', '31T', 658746, 5494375, 49.5811, 5.19611, 190),
('08271', 'Manre', '31T', 621078, 5457970, 49.2625, 4.66417, 120),
('08272', 'Maranwez', '31T', 596608, 5509536, 49.7306, 4.34055, 220),
('08273', 'Marby', '31T', 602782, 5520771, 49.8306, 4.42917, 280),
('08274', 'Marcq', '31T', 639887, 5464966, 49.3214, 4.925, 169),
('08275', 'Margny', '31T', 669865, 5498698, 49.6169, 5.35167, 240),
('08276', 'Margut', '31T', 663429, 5495008, 49.5856, 5.26111, 170),
('08277', 'Marlemont', '31T', 598906, 5511987, 49.7522, 4.37305, 250),
('08278', 'Marquigny', '31T', 623520, 5490309, 49.5528, 4.70778, 190),
('08279', 'Mars-sous-Bourcq', '31T', 618913, 5472937, 49.3975, 4.63889, 102),
('08280', 'Marvaux-Vieux', '31T', 622160, 5461114, 49.2906, 4.67999, 150),
('08281', 'Matton-et-Clémency', '31T', 659026, 5504026, 49.6678, 5.20389, 197),
('08282', 'Maubert-Fontaine', '31T', 602600, 5525093, 49.8694, 4.42778, 280),
('08283', 'Mazerny', '31T', 616509, 5496705, 49.6117, 4.61278, 220),
('08284', 'Les Mazures', '31T', 616799, 5527792, 49.8911, 4.62611, 340),
('08286', 'Ménil-Annelles', '31T', 604675, 5477372, 49.44, 4.44389, 111),
('08287', 'Ménil-Lépinois', '31T', 593271, 5470432, 49.3794, 4.285, 110),
('08288', 'Mesmont', '31T', 601109, 5496891, 49.6161, 4.39972, 130),
('08289', 'Messincourt', '31T', 655271, 5505555, 49.6825, 5.1525, 220),
('08291', 'Mogues', '31T', 664608, 5502524, 49.6528, 5.28056, 290),
('08293', 'Moiry', '31T', 664504, 5496030, 49.5944, 5.2764, 173),
('08294', 'La Moncelle', '31T', 643529, 5506004, 49.6894, 4.99, 175),
('08295', 'Mondigny', '31T', 618073, 5507861, 49.7117, 4.63778, 240),
('08296', 'Montcheutin', '31T', 632397, 5461505, 49.2919, 4.82083, 140),
('08297', 'Montcornet', '31T', 617140, 5521280, 49.8325, 4.62889, 250),
('08298', 'Montcy-Notre-Dame', '31T', 625474, 5515288, 49.7769, 4.74278, 160),
('08300', 'Le Mont-Dieu', '31T', 635087, 5489966, 49.5472, 4.8675, 200),
('08301', 'Montgon', '31T', 624120, 5485164, 49.5064, 4.71445, 150),
('08302', 'Monthermé', '31T', 624605, 5527751, 49.8892, 4.73472, 150),
('08303', 'Monthois', '31T', 624164, 5463662, 49.3131, 4.70833, 120),
('08304', 'Montigny-sur-Meuse', '31T', 622758, 5545629, 50.0503, 4.71473, 120),
('08305', 'Montigny-sur-Vence', '31T', 616663, 5500724, 49.6478, 4.61611, 180),
('08306', 'Mont-Laurent', '31T', 607127, 5480726, 49.4697, 4.47861, 100),
('08307', 'Montmeillant', '31T', 595895, 5505723, 49.6964, 4.32973, 160),
('08308', 'Mont-Saint-Martin', '31T', 619605, 5466186, 49.3367, 4.64639, 140),
('08309', 'Mont-Saint-Remy', '31T', 607423, 5471803, 49.3894, 4.48028, 105),
('08310', 'Mouron', '31T', 629640, 5463572, 49.3111, 4.78361, 120),
('08311', 'Mouzon', '31T', 649913, 5496998, 49.6069, 5.075, 160),
('08312', 'Murtin-et-Bogny', '31T', 610518, 5519688, 49.8194, 4.53639, 190),
('08313', 'Nanteuil-sur-Aisne', '31T', 593922, 5485332, 49.5133, 4.2975, 90),
('08314', 'Neuflize', '31T', 594379, 5474034, 49.4117, 4.30112, 85),
('08315', 'Neufmaison', '31T', 608546, 5513377, 49.7631, 4.50722, 276),
('08316', 'Neufmanil', '31T', 629141, 5519206, 49.8114, 4.79499, 190),
('08317', 'La Neuville-à-Maire', '31T', 634286, 5493902, 49.5828, 4.85777, 163),
('08318', 'La Neuville-aux-Joûtes', '31T', 588149, 5530891, 49.9239, 4.22806, 242),
('08319', 'Neuville-lez-Beaulieu', '31T', 595354, 5524960, 49.8694, 4.32694, 250),
('08320', 'La Neuville-en-Tourne-à-Fuy', '31T', 599868, 5466996, 49.3475, 4.375, 135),
('08321', 'Neuville-Day', '31T', 622234, 5484039, 49.4967, 4.68806, 138),
('08322', 'Neuville-lès-This', '31T', 615133, 5511381, 49.7439, 4.59806, 181),
('08323', 'La Neuville-lès-Wasigny', '31T', 598180, 5500111, 49.6456, 4.35999, 104),
('08324', 'Neuvizy', '31T', 610710, 5498560, 49.6294, 4.53306, 220),
('08325', 'Noirval', '31T', 630194, 5480207, 49.4606, 4.79667, 160),
('08326', 'Nouart', '31T', 648605, 5478638, 49.4422, 5.04999, 205),
('08327', 'Nouvion-sur-Meuse', '31T', 629408, 5507224, 49.7036, 4.79472, 160),
('08328', 'Nouzonville', '31T', 625473, 5519614, 49.8158, 4.74417, 150),
('08329', 'Novion-Porcien', '31T', 602825, 5495286, 49.6014, 4.42305, 120),
('08330', 'Novy-Chevrières', '31T', 604626, 5488307, 49.5383, 4.44611, 99),
('08331', 'Noyers-Pont-Maugis', '31T', 639756, 5503062, 49.6639, 4.93666, 270),
('08332', 'Oches', '31T', 639403, 5485502, 49.5061, 4.92555, 190),
('08333', 'Olizy-Primat', '31T', 629060, 5467636, 49.3478, 4.77695, 110),
('08334', 'Omicourt', '31T', 632204, 5499381, 49.6325, 4.83083, 170),
('08335', 'Omont', '31T', 625149, 5495537, 49.5994, 4.73195, 250),
('08336', 'Osnes', '31T', 656072, 5502797, 49.6575, 5.1625, 180),
('08338', 'Pauvres', '31T', 608059, 5474287, 49.4117, 4.48972, 113),
('08339', 'Perthes', '31T', 597828, 5478389, 49.4503, 4.34973, 130),
('08340', 'Poilcourt-Sydney', '31T', 579792, 5475099, 49.4233, 4.10028, 65),
('08341', 'Poix-Terron', '31T', 618501, 5501073, 49.6506, 4.64166, 176),
('08342', 'Pouru-aux-Bois', '31T', 650802, 5508334, 49.7086, 5.09166, 224),
('08343', 'Pouru-Saint-Remy', '31T', 650202, 5505412, 49.6825, 5.08222, 165),
('08344', 'Prez', '31T', 597186, 5517454, 49.8017, 4.35055, 220),
('08346', 'Prix-lès-Mézières', '31T', 621507, 5512849, 49.7558, 4.68695, 152),
('08347', 'Puilly-et-Charbeaux', '31T', 663891, 5500338, 49.6333, 5.26972, 220),
('08348', 'Puiseux', '31T', 611291, 5494649, 49.5942, 4.53999, 175),
('08349', 'Pure', '31T', 656955, 5504892, 49.6761, 5.17556, 190),
('08350', 'Quatre-Champs', '31T', 628098, 5478551, 49.4461, 4.76723, 130),
('08351', 'Quilly', '31T', 616043, 5474235, 49.4097, 4.59973, 110),
('08352', 'Raillicourt', '31T', 614447, 5501202, 49.6525, 4.58556, 190),
('08353', 'Rancennes', '31T', 629771, 5553427, 50.1189, 4.81528, 160),
('08354', 'Raucourt-et-Flaba', '31T', 641494, 5496402, 49.6036, 4.95833, 200),
('08355', 'Regniowez', '31T', 602571, 5532877, 49.9394, 4.42945, 340),
('08356', 'Remaucourt', '31T', 589223, 5495910, 49.6092, 4.235, 127),
('08357', 'Remilly-Aillicourt', '31T', 643879, 5501903, 49.6525, 4.99334, 170),
('08358', 'Remilly-les-Pothées', '31T', 610141, 5515633, 49.7831, 4.53, 238),
('08360', 'Renneville', '31T', 581554, 5501380, 49.6594, 4.13001, 140),
('08361', 'Renwez', '31T', 615203, 5522165, 49.8408, 4.60223, 280),
('08362', 'Rethel', '31T', 598915, 5485049, 49.51, 4.36638, 130),
('08363', 'Revin', '31T', 617383, 5533057, 49.9383, 4.63584, 153),
('08364', 'Rilly-sur-Aisne', '31T', 618275, 5482871, 49.4869, 4.63306, 90),
('08365', 'Rimogne', '31T', 610564, 5522346, 49.8433, 4.53778, 250),
('08366', 'Rocquigny', '31T', 589892, 5505188, 49.6925, 4.24638, 160),
('08367', 'Rocroi', '31T', 608940, 5531458, 49.9256, 4.51777, 380),
('08368', 'Roizy', '31T', 585227, 5475460, 49.4258, 4.17528, 70),
('08369', 'La Romagne', '31T', 594723, 5504004, 49.6811, 4.31306, 177),
('08370', 'Rouvroy-sur-Audry', '31T', 607566, 5516385, 49.7903, 4.49445, 175),
('08371', 'Rubécourt-et-Lamécourt', '31T', 645724, 5506402, 49.6925, 5.02056, 170),
('08372', 'Rubigny', '31T', 586135, 5504571, 49.6875, 4.19417, 175),
('08373', 'Rumigny', '31T', 591034, 5518305, 49.8103, 4.26528, 190),
('08374', 'La Sabotterie', '31T', 620860, 5489725, 49.5481, 4.67084, 207),
('08375', 'Sachy', '31T', 653945, 5504250, 49.6711, 5.13362, 170),
('08376', 'Sailly', '31T', 657117, 5497882, 49.6131, 5.17499, 164),
('08377', 'Saint-Aignan', '31T', 633291, 5501695, 49.6531, 4.84666, 165),
('08378', 'Saint-Clément-à-Arnes', '31T', 603699, 5461847, 49.3006, 4.42639, 110),
('08379', 'Saint-Étienne-à-Arnes', '31T', 608561, 5463176, 49.3117, 4.49361, 119),
('08380', 'Saint-Fergeux', '31T', 587758, 5490913, 49.5644, 4.21361, 90),
('08381', 'Saint-Germainmont', '31T', 581947, 5484583, 49.5083, 4.13195, 80),
('08382', 'Saint-Jean-aux-Bois', '31T', 594033, 5509089, 49.7269, 4.30472, 220),
('08383', 'Saint-Juvin', '31T', 640921, 5466414, 49.3342, 4.93973, 140),
('08384', 'Saint-Lambert-et-Mont-de-Jeux', '31T', 618674, 5483930, 49.4964, 4.63889, 110),
('08385', 'Saint-Laurent', '31T', 627502, 5514130, 49.7661, 4.77056, 250),
('08386', 'Saint-Loup-en-Champagne', '31T', 588294, 5478875, 49.4561, 4.21833, 81),
('08387', 'Saint-Loup-Terrier', '31T', 616672, 5492846, 49.5769, 4.61389, 160),
('08388', 'Saint-Marceau', '31T', 624019, 5508025, 49.7119, 4.72027, 230),
('08389', 'Saint-Marcel', '31T', 613243, 5513658, 49.7647, 4.5725, 190),
('08390', 'Sainte-Marie', '31T', 621009, 5470233, 49.3728, 4.66694, 110),
('08391', 'Saint-Menges', '31T', 638756, 5511565, 49.7406, 4.92584, 200),
('08392', 'Saint-Morel', '31T', 623073, 5466386, 49.3378, 4.69417, 127),
('08393', 'Saint-Pierre-à-Arnes', '31T', 605700, 5461761, 49.2994, 4.45388, 110),
('08394', 'Saint-Pierremont', '31T', 640462, 5483459, 49.4875, 4.93944, 210),
('08395', 'Saint-Pierre-sur-Vence', '31T', 620554, 5506185, 49.6961, 4.67166, 170),
('08396', 'Saint-Quentin-le-Petit', '31T', 577941, 5493234, 49.5867, 4.07834, 90);
INSERT INTO `ods_communes` (`oc_code_insee`, `oc_nom`, `oc_secteur`, `oc_x_utm`, `oc_y_utm`, `oc_latitude`, `oc_longitude`, `oc_altitude`) VALUES
('08397', 'Saint-Remy-le-Petit', '31T', 589879, 5474329, 49.415, 4.23916, 79),
('08398', 'Sainte-Vaubourg', '31T', 615074, 5480053, 49.4622, 4.58806, 93),
('08399', 'Sapogne-sur-Marche', '31T', 667510, 5496925, 49.6017, 5.31834, 200),
('08400', 'Sapogne-et-Feuchères', '31T', 629660, 5502564, 49.6617, 4.79667, 222),
('08401', 'Saulces-Champenoises', '31T', 608860, 5478597, 49.4503, 4.50194, 100),
('08402', 'Saulces-Monclin', '31T', 608279, 5492642, 49.5767, 4.49778, 120),
('08403', 'Sault-lès-Rethel', '31T', 598840, 5483627, 49.4972, 4.36499, 80),
('08404', 'Sault-Saint-Remy', '31T', 584237, 5475599, 49.4272, 4.16166, 70),
('08405', 'Sauville', '31T', 629738, 5490887, 49.5567, 4.79389, 170),
('08406', 'Savigny-sur-Aisne', '31T', 625374, 5469034, 49.3611, 4.72666, 118),
('08407', 'Séchault', '31T', 626426, 5458430, 49.2656, 4.73778, 120),
('08408', 'Sécheval', '31T', 619208, 5524446, 49.8606, 4.6586, 266),
('08409', 'Sedan', '31T', 640201, 5507554, 49.7042, 4.94444, 155),
('08410', 'Semide', '31T', 614912, 5466611, 49.3414, 4.58194, 120),
('08411', 'Semuy', '31T', 620019, 5483187, 49.4894, 4.65723, 90),
('08412', 'Senuc', '31T', 633651, 5463946, 49.3136, 4.83889, 120),
('08413', 'Seraincourt', '31T', 586729, 5496209, 49.6122, 4.20055, 109),
('08415', 'Sery', '31T', 597376, 5493517, 49.5864, 4.34722, 120),
('08416', 'Seuil', '31T', 605230, 5482017, 49.4817, 4.45278, 90),
('08417', 'Sévigny-la-Forêt', '31T', 607286, 5527408, 49.8894, 4.49361, 366),
('08418', 'Sévigny-Waleppe', '31T', 578009, 5495459, 49.6067, 4.07972, 97),
('08419', 'Signy-l''Abbaye', '31T', 602359, 5506150, 49.6992, 4.41944, 140),
('08420', 'Signy-le-Petit', '31T', 591792, 5528944, 49.9058, 4.27833, 251),
('08421', 'Signy-Montlibert', '31T', 666458, 5494544, 49.5806, 5.30278, 230),
('08422', 'Singly', '31T', 622651, 5500300, 49.6428, 4.69888, 264),
('08424', 'Sommauthe', '31T', 643740, 5484347, 49.4947, 4.985, 260),
('08425', 'Sommerance', '31T', 644263, 5466007, 49.3297, 4.98555, 180),
('08426', 'Son', '31T', 592222, 5493057, 49.5831, 4.27583, 105),
('08427', 'Sorbon', '31T', 598090, 5488433, 49.5406, 4.35583, 107),
('08428', 'Sorcy-Bauthémont', '31T', 611118, 5488405, 49.5381, 4.53584, 110),
('08429', 'Sormonne', '31T', 612692, 5518961, 49.8125, 4.56639, 170),
('08430', 'Stonne', '31T', 639373, 5490600, 49.5519, 4.92694, 330),
('08431', 'Sugny', '31T', 620298, 5468642, 49.3586, 4.65667, 105),
('08432', 'Sury', '31T', 615818, 5513960, 49.7669, 4.60833, 220),
('08433', 'Suzanne', '31T', 618161, 5486267, 49.5175, 4.6325, 130),
('08434', 'Sy', '31T', 635393, 5486544, 49.5164, 4.87055, 190),
('08435', 'Tagnon', '31T', 593418, 5477168, 49.44, 4.28861, 118),
('08436', 'Taillette', '31T', 606653, 5532153, 49.9322, 4.48611, 355),
('08437', 'Tailly', '31T', 650895, 5478175, 49.4375, 5.08139, 210),
('08438', 'Taizy', '31T', 591032, 5486179, 49.5214, 4.25778, 67),
('08439', 'Tannay', '31T', 632708, 5487776, 49.5281, 4.83389, 192),
('08440', 'Tarzy', '31T', 592974, 5525196, 49.8719, 4.29389, 242),
('08441', 'Termes', '31T', 632434, 5464998, 49.3233, 4.8225, 113),
('08443', 'Terron-sur-Aisne', '31T', 622824, 5479264, 49.4536, 4.69472, 94),
('08444', 'Tétaigne', '31T', 653841, 5502238, 49.6531, 5.13139, 165),
('08445', 'Thelonne', '31T', 640325, 5501995, 49.6542, 4.94416, 170),
('08446', 'Thénorgues', '31T', 639945, 5474578, 49.4078, 4.92917, 188),
('08448', 'Thilay', '31T', 629788, 5526390, 49.8758, 4.80639, 154),
('08449', 'Thin-le-Moutier', '31T', 608423, 5508524, 49.7194, 4.50416, 188),
('08450', 'This', '31T', 615777, 5512137, 49.7506, 4.60722, 170),
('08451', 'Le Thour', '31T', 578798, 5488089, 49.5403, 4.08916, 80),
('08452', 'Thugny-Trugny', '31T', 603011, 5482283, 49.4844, 4.42223, 85),
('08453', 'Toges', '31T', 628714, 5476310, 49.4258, 4.77499, 150),
('08454', 'Touligny', '31T', 616567, 5503348, 49.6714, 4.61556, 260),
('08455', 'Tourcelles-Chaumont', '31T', 616302, 5473437, 49.4025, 4.60306, 110),
('08456', 'Tournavaux', '31T', 628275, 5526199, 49.8744, 4.78528, 147),
('08457', 'Tournes', '31T', 617796, 5517772, 49.8008, 4.63694, 156),
('08458', 'Tourteron', '31T', 618565, 5488964, 49.5417, 4.63889, 130),
('08459', 'Tremblois-lès-Carignan', '31T', 662799, 5503272, 49.66, 5.25583, 270),
('08460', 'Tremblois-lès-Rocroi', '31T', 607655, 5522936, 49.8492, 4.4975, 280),
('08461', 'Vandy', '31T', 623513, 5477271, 49.4356, 4.7036, 100),
('08462', 'Vaux-Champagne', '31T', 612718, 5478058, 49.4447, 4.55499, 130),
('08463', 'Vaux-en-Dieulet', '31T', 644253, 5483218, 49.4844, 4.99167, 205),
('08464', 'Vaux-lès-Mouron', '31T', 629668, 5462398, 49.3006, 4.78361, 110),
('08465', 'Vaux-lès-Rubigny', '31T', 585424, 5505147, 49.6928, 4.18444, 180),
('08466', 'Vaux-lès-Mouzon', '31T', 653899, 5497357, 49.6092, 5.13027, 200),
('08467', 'Vaux-Montreuil', '31T', 612934, 5492891, 49.5781, 4.56222, 140),
('08468', 'Vaux-Villaine', '31T', 606066, 5514347, 49.7722, 4.47306, 200),
('08469', 'Vendresse', '31T', 629587, 5496352, 49.6058, 4.79361, 163),
('08470', 'Verpel', '31T', 640292, 5472022, 49.3847, 4.93305, 163),
('08471', 'Verrières', '31T', 635756, 5484112, 49.4944, 4.87473, 190),
('08472', 'Viel-Saint-Remy', '31T', 608499, 5498701, 49.6311, 4.50249, 192),
('08473', 'Vieux-lès-Asfeld', '31T', 579997, 5478994, 49.4583, 4.10389, 61),
('08475', 'Villers-Cernay', '31T', 646425, 5509388, 49.7192, 5.03139, 218),
('08476', 'Villers-devant-le-Thour', '31T', 578709, 5484566, 49.5086, 4.08723, 80),
('08477', 'Villers-devant-Mouzon', '31T', 646479, 5499222, 49.6278, 5.02833, 160),
('08478', 'Villers-le-Tilleul', '31T', 624595, 5499541, 49.6356, 4.72556, 260),
('08479', 'Villers-le-Tourneur', '31T', 613178, 5498549, 49.6289, 4.56722, 240),
('08480', 'Villers-Semeuse', '31T', 625966, 5511314, 49.7411, 4.74833, 159),
('08481', 'Villers-sur-Bar', '31T', 633495, 5504851, 49.6814, 4.85056, 160),
('08482', 'Villers-sur-le-Mont', '31T', 621151, 5502800, 49.6656, 4.67889, 284),
('08483', 'Ville-sur-Lumes', '31T', 628891, 5512959, 49.7553, 4.78945, 215),
('08484', 'Ville-sur-Retourne', '31T', 604806, 5472587, 49.3969, 4.44444, 105),
('08485', 'Villy', '31T', 660865, 5496106, 49.5961, 5.22611, 175),
('08486', 'Vireux-Molhain', '31T', 623198, 5549811, 50.0878, 4.72222, 130),
('08487', 'Vireux-Wallerand', '31T', 623622, 5549573, 50.0856, 4.72806, 120),
('08488', 'Vivier-au-Court', '31T', 631602, 5510954, 49.7367, 4.82639, 203),
('08489', 'Voncq', '31T', 620483, 5481282, 49.4722, 4.66305, 140),
('08490', 'Vouziers', '31T', 623225, 5473094, 49.3981, 4.69834, 100),
('08491', 'Vrigne-aux-Bois', '31T', 633640, 5511127, 49.7378, 4.85472, 170),
('08492', 'Vrigne-Meuse', '31T', 633047, 5507559, 49.7058, 4.84528, 150),
('08493', 'Vrizy', '31T', 621541, 5476269, 49.4269, 4.67611, 130),
('08494', 'Wadelincourt', '31T', 639830, 5505660, 49.6872, 4.93862, 155),
('08496', 'Wagnon', '31T', 603324, 5498600, 49.6311, 4.43083, 127),
('08497', 'Warcq', '31T', 620867, 5514596, 49.7717, 4.67861, 143),
('08498', 'Warnécourt', '31T', 619078, 5510416, 49.7344, 4.6525, 177),
('08499', 'Wasigny', '31T', 597983, 5498841, 49.6342, 4.35695, 100),
('08500', 'Wignicourt', '31T', 614220, 5492918, 49.5781, 4.58001, 150),
('08501', 'Williers', '31T', 666718, 5504380, 49.6689, 5.31056, 300),
('08502', 'Yoncq', '31T', 645733, 5492589, 49.5683, 5.01555, 187),
('08503', 'Yvernaumont', '31T', 619673, 5504343, 49.6797, 4.65889, 90),
('09001', 'Aigues-Juntes', '31T', 375517, 4768148, 43.0558, 1.47139, 380),
('09002', 'Aigues-Vives', '31T', 408458, 4761211, 42.9981, 1.87694, 420),
('09003', 'L''Aiguillon', '31T', 410537, 4752144, 42.9167, 1.90389, 463),
('09004', 'Albiès', '31T', 394022, 4737044, 42.7786, 1.70444, 580),
('09005', 'Aleu', '31T', 358450, 4750397, 42.8931, 1.26639, 736),
('09006', 'Alliat', '31T', 384459, 4741456, 42.8169, 1.58666, 580),
('09007', 'Allières', '31T', 366902, 4766182, 43.0367, 1.36611, 560),
('09008', 'Alos', '31T', 348689, 4752302, 42.9083, 1.14639, 680),
('09009', 'Alzen', '31T', 375518, 4760712, 42.9889, 1.47306, 700),
('09011', 'Antras', '31T', 331950, 4749759, 42.8819, 0.942217, 940),
('09012', 'Appy', '31T', 396407, 4738427, 42.7914, 1.73334, 945),
('09013', 'Arabaux', '31T', 389415, 4760042, 42.985, 1.64361, 520),
('09014', 'Argein', '31T', 336277, 4755087, 42.9308, 0.993614, 548),
('09015', 'Arignac', '31T', 385718, 4747482, 42.8714, 1.60084, 500),
('09016', 'Arnave', '31T', 389564, 4745322, 42.8525, 1.64833, 560),
('09017', 'Arrien-en-Bethmale', '31T', 340132, 4751169, 42.8964, 1.04195, 680),
('09018', 'Arrout', '31T', 339147, 4756593, 42.945, 1.02833, 620),
('09019', 'Artigat', '31T', 373172, 4777079, 43.1358, 1.44056, 264),
('09020', 'Artigues', '31T', 423737, 4729865, 42.7175, 2.06861, 1160),
('09021', 'Artix', '31T', 383233, 4769432, 43.0686, 1.56584, 461),
('09022', 'Arvigna', '31T', 396747, 4768505, 43.0622, 1.73195, 320),
('09023', 'Ascou', '31T', 406959, 4730626, 42.7225, 1.86362, 1040),
('09024', 'Aston', '31T', 391539, 4736682, 42.775, 1.67416, 560),
('09025', 'Aucazein', '31T', 334865, 4755800, 42.9369, 0.976111, 550),
('09026', 'Audressein', '31T', 338654, 4754907, 42.9297, 1.02278, 508),
('09027', 'Augirein', '31T', 330108, 4755113, 42.9297, 0.918054, 629),
('09028', 'Aulos', '31T', 391685, 4738716, 42.7933, 1.67556, 540),
('09029', 'Aulus-les-Bains', '31T', 364146, 4738956, 42.7911, 1.33889, 760),
('09030', 'Auzat', '31T', 375729, 4736023, 42.7667, 1.48111, 740),
('09031', 'Axiat', '31T', 398372, 4737657, 42.7847, 1.7575, 900),
('09032', 'Ax-les-Thermes', '31T', 405065, 4730220, 42.7186, 1.84056, 740),
('09033', 'Bagert', '31T', 343951, 4771359, 43.0789, 1.08305, 540),
('09034', 'Balacet', '31T', 335178, 4749928, 42.8842, 0.98167, 920),
('09035', 'Balaguères', '31T', 338680, 4758888, 42.9656, 1.02195, 659),
('09037', 'Barjac', '31T', 348149, 4769875, 43.0664, 1.135, 470),
('09038', 'La Bastide-de-Besplas', '31T', 359888, 4780642, 43.1656, 1.27639, 238),
('09039', 'La Bastide-de-Bousignac', '31T', 409309, 4767308, 43.0531, 1.88639, 336),
('09040', 'La Bastide-de-Lordat', '31T', 395234, 4777537, 43.1433, 1.71167, 300),
('09041', 'La Bastide-du-Salat', '31T', 336160, 4769133, 43.0572, 0.98806, 315),
('09042', 'La Bastide-de-Sérou', '31T', 371901, 4763525, 43.0136, 1.42806, 453),
('09043', 'La Bastide-sur-l''Hers', '31T', 411092, 4756487, 42.9558, 1.91, 440),
('09044', 'Baulou', '31T', 380639, 4763398, 43.0139, 1.53528, 500),
('09045', 'Bédeilhac-et-Aynat', '31T', 382793, 4747624, 42.8722, 1.56501, 600),
('09046', 'Bédeille', '31T', 345737, 4772306, 43.0878, 1.10472, 450),
('09047', 'Bélesta', '31T', 412990, 4750693, 42.9039, 1.93417, 490),
('09048', 'Belloc', '31T', 412826, 4762789, 43.0128, 1.93027, 410),
('09049', 'Bénac', '31T', 380140, 4756896, 42.9553, 1.53055, 580),
('09050', 'Benagues', '31T', 386867, 4770296, 43.0769, 1.61028, 330),
('09051', 'Bénaix', '31T', 407008, 4751080, 42.9067, 1.86084, 620),
('09052', 'Besset', '31T', 405365, 4770046, 43.0772, 1.8375, 300),
('09053', 'Bestiac', '31T', 400869, 4735863, 42.7689, 1.78833, 860),
('09054', 'Betchat', '31T', 338197, 4772974, 43.0922, 1.01194, 422),
('09055', 'Bethmale', '31T', 341668, 4749899, 42.8853, 1.06111, 750),
('09056', 'Bézac', '31T', 384084, 4778274, 43.1483, 1.57444, 280),
('09057', 'Biert', '31T', 362501, 4750993, 42.8992, 1.31584, 590),
('09058', 'Bompas', '31T', 387133, 4746626, 42.8639, 1.61833, 480),
('09059', 'Bonac-Irazein', '31T', 334617, 4749262, 42.8781, 0.975001, 712),
('09060', 'Bonnac', '31T', 385428, 4780226, 43.1661, 1.59056, 260),
('09061', 'Les Bordes-sur-Arize', '31T', 367390, 4773795, 43.1053, 1.37028, 270),
('09062', 'Les Bordes-sur-Lez', '31T', 339279, 4751590, 42.9, 1.03138, 580),
('09063', 'Le Bosc', '31T', 374484, 4756195, 42.9481, 1.46139, 700),
('09064', 'Bouan', '31T', 389335, 4739524, 42.8003, 1.64667, 540),
('09065', 'Boussenac', '31T', 364567, 4751106, 42.9006, 1.34111, 740),
('09066', 'Brassac', '31T', 380756, 4755836, 42.9458, 1.53833, 580),
('09067', 'Brie', '31T', 379678, 4784614, 43.2047, 1.51889, 260),
('09068', 'Burret', '31T', 376105, 4756844, 42.9542, 1.48111, 720),
('09069', 'Buzan', '31T', 333837, 4756411, 42.9422, 0.963338, 720),
('09070', 'Les Cabannes', '31T', 392692, 4737743, 42.7847, 1.68805, 580),
('09071', 'Cadarcet', '31T', 377808, 4763386, 43.0133, 1.50055, 520),
('09072', 'Calzan', '31T', 397181, 4765783, 43.0378, 1.73778, 364),
('09073', 'Camarade', '31T', 360518, 4771710, 43.0853, 1.28639, 470),
('09074', 'Camon', '31T', 415804, 4763708, 43.0214, 1.96667, 340),
('09075', 'Campagne-sur-Arize', '31T', 364955, 4776465, 43.1289, 1.33972, 260),
('09076', 'Canté', '31T', 380970, 4790053, 43.2539, 1.53362, 230),
('09077', 'Capoulet-et-Junac', '31T', 384327, 4738990, 42.7947, 1.58556, 600),
('09078', 'Carcanières', '31T', 426870, 4729306, 42.7128, 2.10694, 1180),
('09079', 'Carla-Bayle', '31T', 369453, 4778785, 43.1506, 1.39445, 386),
('09080', 'Carla-de-Roquefort', '31T', 399499, 4758714, 42.9744, 1.7675, 400),
('09081', 'Le Carlaret', '31T', 395029, 4775967, 43.1292, 1.70944, 310),
('09082', 'Castelnau-Durban', '31T', 364813, 4762427, 43.0025, 1.34138, 400),
('09083', 'Castéras', '31T', 369906, 4776493, 43.13, 1.40056, 390),
('09084', 'Castex', '31T', 362802, 4780675, 43.1664, 1.31222, 360),
('09085', 'Castillon-en-Couserans', '31T', 339561, 4753929, 42.9211, 1.03417, 542),
('09086', 'Caumont', '31T', 343895, 4765928, 43.03, 1.08389, 355),
('09087', 'Caussou', '31T', 402370, 4735872, 42.7692, 1.80667, 880),
('09088', 'Caychax', '31T', 395296, 4738598, 42.7928, 1.71972, 900),
('09089', 'Cazals-des-Baylès', '31T', 414334, 4771069, 43.0875, 1.9475, 350),
('09090', 'Cazaux', '31T', 378816, 4767874, 43.0539, 1.51194, 370),
('09091', 'Cazavet', '31T', 340520, 4762950, 43.0025, 1.04334, 430),
('09092', 'Cazenave-Serres-et-Allens', '31T', 391517, 4743902, 42.84, 1.67251, 840),
('09093', 'Celles', '31T', 392808, 4752428, 42.9169, 1.68667, 500),
('09094', 'Cérizols', '31T', 342361, 4776951, 43.1289, 1.06195, 390),
('09095', 'Cescau', '31T', 340112, 4755182, 42.9325, 1.04056, 580),
('09096', 'Château-Verdun', '31T', 392074, 4737445, 42.7819, 1.68056, 547),
('09097', 'Clermont', '31T', 361637, 4766657, 43.04, 1.30138, 370),
('09098', 'Contrazy', '31T', 354626, 4769086, 43.0606, 1.21472, 550),
('09099', 'Cos', '31T', 383448, 4759462, 42.9789, 1.57056, 490),
('09100', 'Couflens', '31T', 351873, 4738963, 42.7889, 1.18889, 698),
('09101', 'Coussa', '31T', 392473, 4768663, 43.0631, 1.67944, 350),
('09102', 'Coutens', '31T', 404252, 4769753, 43.0744, 1.82388, 290),
('09103', 'Crampagna', '31T', 386394, 4764966, 43.0289, 1.60556, 350),
('09104', 'Dalou', '31T', 389436, 4765503, 43.0342, 1.64278, 360),
('09105', 'Daumazan-sur-Arize', '31T', 362323, 4778185, 43.1439, 1.30695, 247),
('09106', 'Dreuilhe', '31T', 407342, 4755703, 42.9483, 1.86417, 500),
('09107', 'Dun', '31T', 402189, 4764630, 43.0281, 1.79945, 332),
('09108', 'Durban-sur-Arize', '31T', 365076, 4764274, 43.0192, 1.34416, 380),
('09109', 'Durfort', '31T', 374828, 4784794, 43.2056, 1.45917, 330),
('09110', 'Encourtiech', '31T', 351690, 4757854, 42.9589, 1.18167, 550),
('09111', 'Engomer', '31T', 341624, 4756813, 42.9475, 1.05861, 462),
('09113', 'Ercé', '31T', 360397, 4745697, 42.8511, 1.29139, 615),
('09114', 'Erp', '31T', 353306, 4756029, 42.9428, 1.20195, 601),
('09115', 'Esclagne', '31T', 406167, 4759267, 42.9803, 1.84917, 507),
('09116', 'Escosse', '31T', 382050, 4775593, 43.1239, 1.55, 290),
('09117', 'Esplas', '31T', 378018, 4782669, 43.1869, 1.49889, 360),
('09118', 'Esplas-de-Sérou', '31T', 367494, 4759320, 42.975, 1.375, 640),
('09119', 'Eycheil', '31T', 350218, 4758966, 42.9686, 1.16333, 406),
('09120', 'Fabas', '31T', 345901, 4774555, 43.1081, 1.10611, 390),
('09121', 'Ferrières-sur-Ariège', '31T', 386954, 4755022, 42.9394, 1.61444, 433),
('09122', 'Foix', '31T', 386538, 4757281, 42.9597, 1.60889, 380),
('09123', 'Fornex', '31T', 357773, 4781087, 43.1692, 1.25027, 280),
('09124', 'Le Fossat', '31T', 370541, 4781357, 43.1739, 1.40722, 240),
('09125', 'Fougax-et-Barrineuf', '31T', 410288, 4748753, 42.8861, 1.90138, 550),
('09126', 'Freychenet', '31T', 395650, 4751459, 42.9086, 1.72166, 800),
('09127', 'Gabre', '31T', 371216, 4770450, 43.0758, 1.41806, 373),
('09128', 'Gajan', '31T', 347448, 4764829, 43.0208, 1.12778, 373),
('09129', 'Galey', '31T', 329922, 4755859, 42.9364, 0.91555, 800),
('09130', 'Ganac', '31T', 382844, 4755985, 42.9475, 1.56388, 560),
('09131', 'Garanou', '31T', 397938, 4735967, 42.7694, 1.7525, 600),
('09132', 'Gaudiès', '31T', 396802, 4781093, 43.1756, 1.73028, 250),
('09133', 'Génat', '31T', 383359, 4742215, 42.8236, 1.57306, 960),
('09134', 'Gestiès', '31T', 383228, 4735830, 42.7661, 1.57277, 958),
('09135', 'Goulier', '31T', 377549, 4734818, 42.7561, 1.50361, 1080),
('09136', 'Gourbit', '31T', 380105, 4744492, 42.8436, 1.53277, 840),
('09137', 'Gudas', '31T', 392064, 4762776, 43.01, 1.67556, 418),
('09138', 'L''Herm', '31T', 392857, 4758475, 42.9714, 1.68611, 500),
('09139', 'L''Hospitalet-près-l''Andorre', '31T', 401581, 4715552, 42.5861, 1.80056, 1440),
('09140', 'Ignaux', '31T', 405015, 4731547, 42.7306, 1.83972, 1020),
('09141', 'Illartein', '31T', 334068, 4755665, 42.9356, 0.966389, 560),
('09142', 'Ilhat', '31T', 400517, 4757064, 42.9597, 1.78028, 530),
('09143', 'Illier-et-Laramade', '31T', 380636, 4738405, 42.7889, 1.54056, 880),
('09145', 'Les Issards', '31T', 397022, 4770228, 43.0778, 1.73501, 310),
('09146', 'Justiniac', '31T', 377496, 4785054, 43.2083, 1.49194, 360),
('09147', 'Labatut', '31T', 379698, 4790847, 43.2608, 1.51778, 260),
('09148', 'Lacave', '31T', 336934, 4767448, 43.0422, 0.998052, 325),
('09149', 'Lacourt', '31T', 351205, 4756383, 42.9456, 1.17611, 430),
('09150', 'Lagarde', '31T', 413240, 4766825, 43.0492, 1.93472, 388),
('09151', 'Lanoux', '31T', 372029, 4775187, 43.1186, 1.42695, 371),
('09152', 'Lapège', '31T', 383318, 4739809, 42.8019, 1.57305, 1000),
('09153', 'Lapenne', '31T', 398446, 4777766, 43.1458, 1.75112, 320),
('09154', 'Larbont', '31T', 369233, 4761385, 42.9939, 1.39584, 580),
('09155', 'Larcat', '31T', 390434, 4737193, 42.7794, 1.66056, 845),
('09156', 'Larnat', '31T', 388082, 4739360, 42.7986, 1.63139, 900),
('09157', 'Laroque-d''Olmes', '31T', 408191, 4758160, 42.9706, 1.87417, 450),
('09158', 'Lasserre', '31T', 351192, 4770364, 43.0714, 1.17223, 560),
('09159', 'Lassur', '31T', 396527, 4735865, 42.7683, 1.73527, 620),
('09160', 'Lavelanet', '31T', 406230, 4753898, 42.9319, 1.85084, 536),
('09161', 'Léran', '31T', 411297, 4760063, 42.9881, 1.91195, 390),
('09162', 'Lercoul', '31T', 381009, 4736362, 42.7706, 1.54555, 1120),
('09163', 'Lescousse', '31T', 379148, 4778915, 43.1533, 1.51361, 370),
('09164', 'Lescure', '31T', 356638, 4762501, 43.0017, 1.24111, 480),
('09165', 'Lesparrou', '31T', 410784, 4753714, 42.9308, 1.90667, 465),
('09166', 'Leychert', '31T', 396302, 4755553, 42.9456, 1.72889, 607),
('09167', 'Lézat-sur-Lèze', '31T', 365979, 4792802, 43.2761, 1.34834, 219),
('09168', 'Lieurac', '31T', 401073, 4759493, 42.9817, 1.78666, 365),
('09169', 'Limbrassac', '31T', 405657, 4763378, 43.0172, 1.84222, 390),
('09170', 'Lissac', '31T', 379354, 4791779, 43.2692, 1.51334, 220),
('09171', 'Lordat', '31T', 397767, 4736648, 42.7756, 1.75028, 900),
('09172', 'Loubaut', '31T', 360641, 4783249, 43.1892, 1.28499, 363),
('09173', 'Loubens', '31T', 381515, 4766900, 43.0456, 1.54528, 450),
('09174', 'Loubières', '31T', 385995, 4762782, 43.0092, 1.60111, 372),
('09175', 'Ludiès', '31T', 395417, 4774757, 43.1183, 1.71444, 320),
('09176', 'Luzenac', '31T', 398883, 4735305, 42.7636, 1.76416, 700),
('09177', 'Madière', '31T', 379210, 4773513, 43.1047, 1.51555, 380),
('09178', 'Malegoude', '31T', 413533, 4773887, 43.1128, 1.93722, 350),
('09179', 'Malléon', '31T', 395087, 4765044, 43.0308, 1.71222, 410),
('09180', 'Manses', '31T', 403230, 4772637, 43.1003, 1.81083, 300),
('09181', 'Le Mas-d''Azil', '31T', 366634, 4770971, 43.0797, 1.36167, 287),
('09182', 'Massat', '31T', 365064, 4749801, 42.8889, 1.3475, 650),
('09183', 'Mauvezin-de-Prat', '31T', 336862, 4766308, 43.0319, 0.997503, 370),
('09184', 'Mauvezin-de-Sainte-Croix', '31T', 355732, 4771099, 43.0789, 1.22777, 530),
('09185', 'Mazères', '31T', 392668, 4789580, 43.2514, 1.67778, 240),
('09186', 'Méras', '31T', 362768, 4782311, 43.1811, 1.31139, 385),
('09187', 'Mercenac', '31T', 343448, 4767173, 43.0411, 1.07806, 385),
('09188', 'Mercus-Garrabet', '31T', 389044, 4748261, 42.8789, 1.64139, 500),
('09189', 'Mérens-les-Vals', '31T', 405178, 4723523, 42.6583, 1.84306, 1060),
('09190', 'Mérigon', '31T', 353085, 4772143, 43.0878, 1.195, 340),
('09192', 'Miglos', '31T', 385458, 4738693, 42.7922, 1.59944, 759),
('09193', 'Mijanès', '31T', 422707, 4731326, 42.7306, 2.05584, 1130),
('09194', 'Mirepoix', '31T', 408386, 4771054, 43.0867, 1.87444, 308),
('09195', 'Monesple', '31T', 375359, 4773089, 43.1003, 1.46834, 430),
('09196', 'Montagagne', '31T', 370417, 4759325, 42.9756, 1.41083, 770),
('09197', 'Montaillou', '31T', 409896, 4737837, 42.7878, 1.89833, 1280),
('09198', 'Montardit', '31T', 353365, 4770409, 43.0722, 1.19889, 420),
('09199', 'Montaut', '31T', 389802, 4782529, 43.1875, 1.64389, 290),
('09200', 'Montbel', '31T', 416739, 4758729, 42.9767, 1.97889, 420),
('09201', 'Montégut-en-Couserans', '31T', 344702, 4760570, 42.9819, 1.09528, 525),
('09202', 'Montégut-Plantaurel', '31T', 378073, 4769337, 43.0669, 1.5025, 390),
('09203', 'Montels', '31T', 375502, 4762348, 43.0036, 1.4725, 440),
('09204', 'Montesquieu-Avantès', '31T', 353138, 4765106, 43.0244, 1.1975, 510),
('09205', 'Montfa', '31T', 360326, 4773380, 43.1003, 1.28361, 420),
('09206', 'Montferrier', '31T', 401546, 4749829, 42.8947, 1.79416, 680),
('09207', 'Montgaillard', '31T', 388736, 4754499, 42.935, 1.63638, 420),
('09208', 'Montgauch', '31T', 343492, 4763159, 43.005, 1.07972, 500),
('09209', 'Montjoie-en-Couserans', '31T', 350005, 4762674, 43.0019, 1.15972, 452),
('09210', 'Montoulieu', '31T', 388052, 4751424, 42.9072, 1.62862, 659),
('09211', 'Montségur', '31T', 404844, 4747160, 42.8711, 1.835, 890),
('09212', 'Montseron', '31T', 363794, 4763558, 43.0125, 1.32861, 490),
('09213', 'Moulin-Neuf', '31T', 414135, 4769621, 43.0744, 1.94528, 330),
('09214', 'Moulis', '31T', 344308, 4758202, 42.9606, 1.09111, 434),
('09215', 'Nalzen', '31T', 398725, 4752369, 42.9172, 1.75916, 640),
('09216', 'Nescus', '31T', 371948, 4761210, 42.9928, 1.42917, 428),
('09217', 'Niaux', '31T', 385024, 4741261, 42.8153, 1.59361, 547),
('09218', 'Orgeix', '31T', 407303, 4729140, 42.7092, 1.86806, 823),
('09219', 'Orgibet', '31T', 331659, 4755446, 42.9331, 0.936949, 660),
('09220', 'Orlu', '31T', 409045, 4728408, 42.7028, 1.88945, 833),
('09221', 'Ornolac-Ussat-les-Bains', '31T', 388348, 4741762, 42.8203, 1.63416, 500),
('09222', 'Orus', '31T', 377874, 4737743, 42.7825, 1.50694, 1000),
('09223', 'Oust', '31T', 354143, 4748450, 42.8747, 1.21417, 500),
('09224', 'Pailhès', '31T', 373194, 4773438, 43.1031, 1.44166, 292),
('09225', 'Pamiers', '31T', 387297, 4774424, 43.1142, 1.61472, 295),
('09226', 'Pech', '31T', 392688, 4737435, 42.7819, 1.68806, 700),
('09227', 'Péreille', '31T', 402318, 4754631, 42.9381, 1.80278, 600),
('09228', 'Perles-et-Castelet', '31T', 400762, 4733180, 42.7447, 1.7875, 700),
('09229', 'Le Peyrat', '31T', 412158, 4756535, 42.9564, 1.92306, 430),
('09230', 'Le Pla', '31T', 424621, 4729547, 42.7147, 2.07945, 1082),
('09231', 'Le Port', '31T', 367176, 4747538, 42.8689, 1.37389, 720),
('09232', 'Prades', '31T', 408235, 4737673, 42.7861, 1.87805, 1160),
('09233', 'Pradettes', '31T', 403893, 4760286, 42.9892, 1.82111, 510),
('09234', 'Pradières', '31T', 390174, 4757900, 42.9658, 1.65333, 500),
('09235', 'Prat-Bonrepaux', '31T', 338598, 4765989, 43.0294, 1.01889, 335),
('09236', 'Prayols', '31T', 387680, 4753652, 42.9272, 1.62361, 428),
('09237', 'Le Puch', '31T', 426216, 4729838, 42.7175, 2.09889, 1180),
('09238', 'Les Pujols', '31T', 395704, 4771329, 43.0875, 1.71861, 320),
('09239', 'Quérigut', '31T', 426148, 4727741, 42.6986, 2.09833, 1205),
('09240', 'Quié', '31T', 385059, 4744716, 42.8464, 1.59334, 500),
('09241', 'Rabat-les-Trois-Seigneurs', '31T', 381809, 4745882, 42.8564, 1.55333, 600),
('09242', 'Raissac', '31T', 403276, 4755081, 42.9422, 1.81444, 582),
('09243', 'Régat', '31T', 409282, 4760151, 42.9886, 1.88722, 440),
('09244', 'Rieucros', '31T', 399541, 4770839, 43.0836, 1.76583, 280),
('09245', 'Rieux-de-Pelleport', '31T', 386808, 4768137, 43.0575, 1.61, 340),
('09246', 'Rimont', '31T', 359727, 4761820, 42.9961, 1.27916, 524),
('09247', 'Rivèrenert', '31T', 355625, 4757430, 42.9558, 1.23, 561),
('09249', 'Roquefixade', '31T', 398552, 4754408, 42.9356, 1.75667, 760),
('09250', 'Roquefort-les-Cascades', '31T', 399177, 4756867, 42.9578, 1.76389, 460),
('09251', 'Roumengoux', '31T', 413272, 4769386, 43.0722, 1.93472, 390),
('09252', 'Rouze', '31T', 423844, 4731344, 42.7308, 2.06972, 1080),
('09253', 'Sabarat', '31T', 368778, 4773089, 43.0992, 1.3875, 270),
('09254', 'Saint-Amadou', '31T', 396127, 4773852, 43.1103, 1.72334, 281),
('09255', 'Saint-Amans', '31T', 381865, 4779268, 43.1569, 1.54695, 370),
('09256', 'Saint-Bauzeil', '31T', 383837, 4770347, 43.0769, 1.57306, 400),
('09257', 'Sainte-Croix-Volvestre', '31T', 351686, 4776433, 43.1261, 1.17667, 300),
('09258', 'Saint-Félix-de-Rieutord', '31T', 391924, 4766821, 43.0464, 1.67306, 361),
('09259', 'Saint-Félix-de-Tournegat', '31T', 398105, 4776167, 43.1314, 1.74722, 310),
('09260', 'Sainte-Foi', '31T', 411928, 4775635, 43.1283, 1.91722, 366),
('09261', 'Saint-Girons', '31T', 348560, 4760854, 42.9853, 1.1425, 390),
('09262', 'Saint-Jean-d''Aigues-Vives', '31T', 408235, 4752945, 42.9236, 1.87556, 540),
('09263', 'Saint-Jean-du-Castillonnais', '31T', 331235, 4755734, 42.9356, 0.931669, 700),
('09264', 'Saint-Jean-de-Verges', '31T', 386998, 4763198, 43.0131, 1.61333, 351),
('09265', 'Saint-Jean-du-Falga', '31T', 388248, 4771755, 43.0903, 1.62695, 310),
('09266', 'Saint-Julien-de-Gras-Capou', '31T', 406706, 4765554, 43.0369, 1.85472, 370),
('09267', 'Saint-Lary', '31T', 328314, 4755035, 42.9286, 0.896108, 675),
('09268', 'Saint-Lizier', '31T', 348194, 4762714, 43.0019, 1.13751, 409),
('09269', 'Saint-Martin-de-Caralp', '31T', 381432, 4760823, 42.9908, 1.54555, 600),
('09270', 'Saint-Martin-d''Oydes', '31T', 377780, 4780729, 43.1694, 1.49639, 279),
('09271', 'Saint-Michel', '31T', 378252, 4776832, 43.1344, 1.50306, 400),
('09272', 'Saint-Paul-de-Jarrat', '31T', 390602, 4752062, 42.9133, 1.65972, 480),
('09273', 'Saint-Pierre-de-Rivière', '31T', 382509, 4757596, 42.9619, 1.55944, 460),
('09274', 'Saint-Quentin-la-Tour', '31T', 410391, 4765227, 43.0344, 1.90001, 380),
('09275', 'Saint-Quirc', '31T', 378579, 4792564, 43.2761, 1.50362, 220),
('09276', 'Saint-Victor-Rouzaud', '31T', 382150, 4772228, 43.0936, 1.55195, 330),
('09277', 'Saint-Ybars', '31T', 368850, 4788549, 43.2383, 1.38472, 292),
('09279', 'Salsein', '31T', 337673, 4752739, 42.91, 1.01139, 705),
('09280', 'Saurat', '31T', 380534, 4748280, 42.8778, 1.53722, 673),
('09281', 'Sautel', '31T', 403034, 4758786, 42.9756, 1.81083, 390),
('09282', 'Saverdun', '31T', 384334, 4787619, 43.2325, 1.57556, 230),
('09283', 'Savignac-les-Ormeaux', '31T', 403285, 4731478, 42.7297, 1.81861, 679),
('09284', 'Ségura', '31T', 393399, 4765625, 43.0358, 1.69139, 410),
('09285', 'Seix', '31T', 353009, 4747456, 42.8656, 1.20056, 520),
('09286', 'Sem', '31T', 378983, 4736150, 42.7683, 1.52084, 980),
('09287', 'Senconac', '31T', 394651, 4739534, 42.8011, 1.71166, 900),
('09289', 'Lorp-Sentaraille', '31T', 345794, 4765823, 43.0294, 1.10722, 362),
('09290', 'Sentein', '31T', 332840, 4748997, 42.8753, 0.953335, 740),
('09291', 'Sentenac-d''Oust', '31T', 351265, 4748697, 42.8764, 1.17889, 660),
('09292', 'Sentenac-de-Sérou', '31T', 368577, 4759083, 42.9731, 1.38833, 676),
('09293', 'Serres-sur-Arget', '31T', 379128, 4758642, 42.9708, 1.51777, 560),
('09294', 'Sieuras', '31T', 365032, 4782605, 43.1842, 1.33917, 340),
('09295', 'Siguer', '31T', 382635, 4735717, 42.765, 1.56555, 743),
('09296', 'Sinsat', '31T', 390582, 4739412, 42.7994, 1.66194, 510),
('09297', 'Sor', '31T', 337608, 4753851, 42.92, 1.01027, 660),
('09298', 'Sorgeat', '31T', 405968, 4731380, 42.7292, 1.85139, 1040),
('09299', 'Soueix-Rogalle', '31T', 353934, 4750399, 42.8922, 1.21111, 490),
('09300', 'Soula', '31T', 393511, 4755379, 42.9436, 1.69472, 640),
('09301', 'Soulan', '31T', 356971, 4752372, 42.9106, 1.24778, 560),
('09302', 'Suc-et-Sentenac', '31T', 375330, 4737820, 42.7828, 1.47584, 980),
('09303', 'Surba', '31T', 384397, 4745838, 42.8564, 1.58501, 555),
('09304', 'Suzan', '31T', 372196, 4764785, 43.025, 1.43139, 490),
('09305', 'Tabre', '31T', 408458, 4761211, 42.9981, 1.87694, 478),
('09306', 'Tarascon-sur-Ariège', '31T', 386059, 4744792, 42.8472, 1.60555, 480),
('09307', 'Taurignan-Castet', '31T', 344510, 4767087, 43.0406, 1.09111, 357),
('09308', 'Taurignan-Vieux', '31T', 346542, 4765837, 43.0297, 1.11639, 365),
('09309', 'Teilhet', '31T', 400595, 4771780, 43.0922, 1.77861, 280),
('09310', 'Thouars-sur-Arize', '31T', 357087, 4782799, 43.1844, 1.24139, 240),
('09311', 'Tignac', '31T', 401402, 4733387, 42.7467, 1.79528, 860),
('09312', 'La Tour-du-Crieu', '31T', 390442, 4773231, 43.1039, 1.65361, 312),
('09313', 'Tourtouse', '31T', 347402, 4772917, 43.0936, 1.125, 364),
('09314', 'Tourtrol', '31T', 402138, 4769012, 43.0675, 1.79805, 300),
('09315', 'Trémoulet', '31T', 395753, 4778980, 43.1564, 1.71778, 265),
('09316', 'Troye-d''Ariège', '31T', 408570, 4764449, 43.0272, 1.87778, 426),
('09317', 'Uchentein', '31T', 336911, 4750257, 42.8875, 1.00278, 960),
('09318', 'Unac', '31T', 399903, 4735105, 42.7619, 1.77666, 680),
('09319', 'Unzent', '31T', 380386, 4781269, 43.1747, 1.52833, 360),
('09320', 'Urs', '31T', 396356, 4736577, 42.7747, 1.73305, 590),
('09321', 'Ussat', '31T', 387254, 4742921, 42.8306, 1.62055, 520),
('09322', 'Ustou', '31T', 357533, 4741189, 42.81, 1.2575, 690),
('09323', 'Vals', '31T', 399087, 4772265, 43.0964, 1.76, 290),
('09324', 'Varilhes', '31T', 388279, 4766725, 43.045, 1.62834, 332),
('09325', 'Vaychis', '31T', 402168, 4732882, 42.7422, 1.80472, 880),
('09326', 'Vèbre', '31T', 395450, 4736745, 42.7761, 1.72195, 600),
('09327', 'Ventenac', '31T', 396494, 4762245, 43.0058, 1.73001, 441),
('09328', 'Verdun', '31T', 392802, 4738976, 42.7958, 1.68916, 560),
('09329', 'Vernajoul', '31T', 386249, 4760340, 42.9872, 1.60472, 400),
('09330', 'Vernaux', '31T', 398489, 4736298, 42.7725, 1.75917, 740),
('09331', 'Le Vernet', '31T', 386499, 4782182, 43.1839, 1.60333, 250),
('09332', 'Verniolle', '31T', 390063, 4770738, 43.0814, 1.64944, 322),
('09334', 'Vicdessos', '31T', 377192, 4736459, 42.7708, 1.49889, 708),
('09335', 'Villeneuve', '31T', 335367, 4755911, 42.9381, 0.982227, 600),
('09336', 'Villeneuve-d''Olmes', '31T', 403902, 4751215, 42.9075, 1.82277, 610),
('09338', 'Villeneuve-du-Latou', '31T', 372747, 4784586, 43.2033, 1.43361, 241),
('09339', 'Villeneuve-du-Paréage', '31T', 389199, 4778775, 43.1536, 1.63723, 280),
('09340', 'Vira', '31T', 398900, 4767269, 43.0514, 1.75861, 310),
('09341', 'Viviès', '31T', 400837, 4768167, 43.0597, 1.78223, 390),
('09342', 'Sainte-Suzanne', '31T', 368993, 4785429, 43.2103, 1.38722, 240),
('10002', 'Ailleville', '31T', 624707, 5345668, 48.2519, 4.68, 170),
('10003', 'Aix-en-Othe', '31T', 554591, 5341323, 48.2228, 3.735, 140),
('10004', 'Allibaudières', '31T', 581673, 5382101, 48.5867, 4.1075, 97),
('10005', 'Amance', '31T', 612512, 5350047, 48.2936, 4.51694, 160),
('10006', 'Arcis-sur-Aube', '31T', 584337, 5376551, 48.5364, 4.14249, 100),
('10007', 'Arconville', '31T', 628190, 5335706, 48.1617, 4.72389, 290),
('10008', 'Argançon', '31T', 619033, 5345732, 48.2536, 4.60361, 170),
('10009', 'Arrelles', '31T', 595019, 5322489, 48.0486, 4.275, 190),
('10010', 'Arrembécourt', '31T', 617869, 5377800, 48.5422, 4.59694, 135),
('10011', 'Arrentières', '31T', 629361, 5346945, 48.2625, 4.74306, 210),
('10012', 'Arsonval', '31T', 622340, 5347346, 48.2675, 4.64861, 145),
('10013', 'Assenay', '31T', 579185, 5337041, 48.1817, 4.06528, 131),
('10014', 'Assencières', '31T', 588625, 5356789, 48.3581, 4.19639, 160),
('10015', 'Aubeterre', '31T', 582953, 5364640, 48.4294, 4.12138, 129),
('10017', 'Aulnay', '31T', 603948, 5369774, 48.4725, 4.4064, 105),
('10018', 'Auxon', '31T', 568407, 5328256, 48.1039, 3.91889, 170),
('10019', 'Val-d''Auzon', '31T', 600938, 5362338, 48.4061, 4.36389, 110),
('10020', 'Avant-lès-Marcilly', '31T', 542274, 5363450, 48.4228, 3.5714, 105),
('10021', 'Avant-lès-Ramerupt', '31T', 595082, 5366931, 48.4483, 4.28583, 115),
('10022', 'Avirey-Lingey', '31T', 596845, 5319802, 48.0242, 4.29889, 200),
('10023', 'Avon-la-Pèze', '31T', 548594, 5359764, 48.3892, 3.65639, 130),
('10024', 'Avreuil', '31T', 574344, 5321752, 48.0447, 3.9975, 130),
('10025', 'Bagneux-la-Fosse', '31T', 596757, 5316435, 47.9939, 4.29695, 220),
('10026', 'Bailly-le-Franc', '31T', 622181, 5375699, 48.5225, 4.65472, 122),
('10027', 'Balignicourt', '31T', 607840, 5374603, 48.5153, 4.46028, 113),
('10028', 'Balnot-la-Grange', '31T', 589183, 5315633, 47.9878, 4.19528, 240),
('10029', 'Balnot-sur-Laignes', '31T', 601781, 5320660, 48.0311, 4.36527, 180),
('10030', 'Barberey-Saint-Sulpice', '31T', 576453, 5354420, 48.3383, 4.03167, 100),
('10031', 'Barbuise', '31T', 542571, 5378459, 48.5578, 3.57694, 71),
('10032', 'Baroville', '31T', 627992, 5339006, 48.1914, 4.72222, 220),
('10033', 'Bar-sur-Aube', '31T', 626880, 5343523, 48.2322, 4.70862, 166),
('10034', 'Bar-sur-Seine', '31T', 602366, 5329657, 48.1119, 4.37527, 150),
('10035', 'Bayel', '31T', 632005, 5339654, 48.1964, 4.77639, 190),
('10037', 'Bercenay-en-Othe', '31T', 566410, 5339904, 48.2089, 3.89389, 177),
('10039', 'Bergères', '31T', 623899, 5338237, 48.1853, 4.66695, 250),
('10040', 'Bernon', '31T', 574301, 5315514, 47.9886, 3.99584, 150),
('10041', 'Bertignolles', '31T', 613000, 5331618, 48.1278, 4.51861, 210),
('10042', 'Bérulle', '31T', 549416, 5336150, 48.1767, 3.66473, 150),
('10043', 'Bessy', '31T', 575524, 5377723, 48.5481, 4.02334, 84),
('10044', 'Bétignicourt', '31T', 607637, 5366940, 48.4464, 4.45556, 115),
('10045', 'Beurey', '31T', 609057, 5337780, 48.1839, 4.46722, 240),
('10046', 'Blaincourt-sur-Aube', '31T', 607736, 5360610, 48.3894, 4.45527, 120),
('10047', 'Blignicourt', '31T', 613313, 5368749, 48.4617, 4.53278, 115),
('10048', 'Bligny', '31T', 620172, 5336706, 48.1722, 4.61639, 230),
('10049', 'Les Bordes-Aumont', '31T', 583408, 5337749, 48.1875, 4.12222, 138),
('10050', 'Bossancourt', '31T', 618820, 5349001, 48.2831, 4.60166, 160),
('10051', 'Bouilly', '31T', 574110, 5338239, 48.1931, 3.99722, 160),
('10052', 'Boulages', '31T', 567548, 5381142, 48.5797, 3.91584, 77),
('10053', 'Bouranton', '31T', 587388, 5351613, 48.3117, 4.17862, 120),
('10054', 'Bourdenay', '31T', 543622, 5356451, 48.3597, 3.58889, 100),
('10055', 'Bourguignons', '31T', 601210, 5331922, 48.1325, 4.36028, 145),
('10056', 'Bouy-Luxembourg', '31T', 593074, 5359084, 48.3781, 4.25694, 141),
('10057', 'Bouy-sur-Orvin', '31T', 536876, 5362269, 48.4125, 3.49833, 90),
('10058', 'Bragelogne-Beauvoir', '31T', 594482, 5313556, 47.9683, 4.26583, 240),
('10059', 'Braux', '31T', 608789, 5371132, 48.4839, 4.47223, 116),
('10060', 'Bréviandes', '31T', 581297, 5345315, 48.2558, 4.09527, 123),
('10061', 'Brévonnes', '31T', 603705, 5357199, 48.3594, 4.4, 115),
('10062', 'Briel-sur-Barse', '31T', 600812, 5340408, 48.2089, 4.35695, 140),
('10063', 'Brienne-la-Vieille', '31T', 613259, 5359080, 48.3747, 4.52944, 130),
('10064', 'Brienne-le-Château', '31T', 612951, 5361113, 48.3931, 4.52583, 130),
('10065', 'Brillecourt', '31T', 600932, 5369596, 48.4714, 4.36556, 105),
('10066', 'Bucey-en-Othe', '31T', 563993, 5345651, 48.2608, 3.86223, 150),
('10067', 'Buchères', '31T', 582838, 5342867, 48.2336, 4.11555, 119),
('10068', 'Buxeuil', '31T', 603973, 5323201, 48.0536, 4.39528, 170),
('10069', 'Buxières-sur-Arce', '31T', 608440, 5331128, 48.1242, 4.45722, 187),
('10070', 'Celles-sur-Ource', '31T', 604424, 5325710, 48.0761, 4.40195, 170),
('10071', 'Chacenay', '31T', 613670, 5330148, 48.1144, 4.52722, 250),
('10072', 'La Chaise', '31T', 622940, 5357737, 48.3608, 4.65972, 150),
('10073', 'Chalette-sur-Voire', '31T', 605360, 5366711, 48.4447, 4.42472, 110),
('10074', 'Chamoy', '31T', 572524, 5329788, 48.1172, 3.97444, 156),
('10075', 'Champfleury', '31T', 574130, 5385487, 48.6181, 4.00584, 114),
('10076', 'Champignol-lez-Mondeville', '31T', 624547, 5333124, 48.1392, 4.67416, 260),
('10077', 'Champigny-sur-Aube', '31T', 579131, 5379255, 48.5614, 4.0725, 87),
('10078', 'Champ-sur-Barse', '31T', 604511, 5343563, 48.2367, 4.4075, 150),
('10079', 'Channes', '31T', 593661, 5310485, 47.9408, 4.25416, 300),
('10080', 'Chaource', '31T', 584737, 5323286, 48.0572, 4.13722, 152),
('10081', 'La Chapelle-Saint-Luc', '31T', 578207, 5352622, 48.3219, 4.055, 113),
('10082', 'Chapelle-Vallon', '31T', 576841, 5365233, 48.4356, 4.03888, 160),
('10083', 'Chappes', '31T', 592490, 5335450, 48.1656, 4.24388, 130),
('10084', 'Charmont-sous-Barbuise', '31T', 586790, 5362413, 48.4089, 4.17278, 130),
('10085', 'Charmoy', '31T', 543401, 5361142, 48.4019, 3.58639, 131),
('10086', 'Charny-le-Bachot', '31T', 569777, 5378205, 48.5531, 3.94556, 85),
('10087', 'Chaserey', '31T', 579695, 5312159, 47.9578, 4.0675, 210),
('10089', 'Châtres', '31T', 562869, 5372565, 48.5031, 3.85111, 79),
('10090', 'Chauchigny', '31T', 571598, 5363868, 48.4239, 3.96778, 90),
('10091', 'Chaudrey', '31T', 594282, 5373033, 48.5033, 4.27639, 104),
('10092', 'Chauffour-lès-Bailly', '31T', 598670, 5338888, 48.1956, 4.32777, 137),
('10093', 'Chaumesnil', '31T', 618127, 5357543, 48.36, 4.59472, 140),
('10094', 'Chavanges', '31T', 616077, 5374211, 48.5103, 4.57167, 132),
('10095', 'Le Chêne', '31T', 586777, 5377977, 48.5489, 4.17584, 95),
('10096', 'Chennegy', '31T', 563461, 5341569, 48.2242, 3.85445, 160),
('10097', 'Chervey', '31T', 610983, 5331146, 48.1239, 4.49139, 210),
('10098', 'Chesley', '31T', 582693, 5314301, 47.9767, 4.10806, 210),
('10099', 'Chessy-les-Prés', '31T', 568222, 5319422, 48.0244, 3.915, 120),
('10100', 'Clérey', '31T', 588513, 5340142, 48.2083, 4.19139, 147),
('10101', 'Coclois', '31T', 598936, 5369777, 48.4733, 4.3386, 105),
('10102', 'Colombé-la-Fosse', '31T', 632593, 5347205, 48.2642, 4.78667, 234),
('10103', 'Colombé-le-Sec', '31T', 633278, 5346140, 48.2544, 4.79556, 240),
('10104', 'Cormost', '31T', 584453, 5335541, 48.1675, 4.13584, 138),
('10105', 'Courcelles-sur-Voire', '31T', 613804, 5369871, 48.4717, 4.53972, 115),
('10106', 'Courceroy', '31T', 530698, 5368068, 48.465, 3.41527, 59),
('10107', 'Coursan-en-Othe', '31T', 562636, 5324515, 48.0708, 3.84083, 150),
('10108', 'Courtaoult', '31T', 564412, 5319316, 48.0239, 3.86389, 120),
('10109', 'Courtenot', '31T', 596836, 5333792, 48.15, 4.30194, 142),
('10110', 'Courteranges', '31T', 591792, 5346772, 48.2675, 4.23695, 115),
('10111', 'Courteron', '31T', 607707, 5319502, 48.0197, 4.44445, 180),
('10112', 'Coussegrey', '31T', 575926, 5311706, 47.9542, 4.01694, 180),
('10113', 'Couvignon', '31T', 622671, 5340589, 48.2067, 4.65111, 210),
('10114', 'Crancey', '31T', 547261, 5374049, 48.5178, 3.64, 75),
('10115', 'Creney-près-Troyes', '31T', 583543, 5353902, 48.3328, 4.12722, 120),
('10116', 'Crésantignes', '31T', 575631, 5332515, 48.1414, 4.01667, 161),
('10117', 'Crespy-le-Neuf', '31T', 618109, 5361403, 48.3947, 4.59556, 129),
('10118', 'Les Croûtes', '31T', 564426, 5316260, 47.9964, 3.86361, 115),
('10119', 'Cunfin', '31T', 624310, 5322123, 48.0403, 4.66778, 246),
('10120', 'Cussangy', '31T', 582447, 5318404, 48.0136, 4.10555, 215),
('10121', 'Dampierre', '31T', 600999, 5378461, 48.5511, 4.36861, 110),
('10122', 'Davrey', '31T', 570838, 5322325, 48.0503, 3.95056, 125),
('10123', 'Dienville', '31T', 613626, 5356184, 48.3486, 4.53361, 130),
('10124', 'Dierrey-Saint-Julien', '31T', 561686, 5351152, 48.3106, 3.83195, 150),
('10125', 'Dierrey-Saint-Pierre', '31T', 561418, 5353064, 48.3278, 3.82861, 150),
('10126', 'Dolancourt', '31T', 620015, 5347081, 48.2656, 4.61722, 160),
('10127', 'Dommartin-le-Coq', '31T', 600276, 5372982, 48.5019, 4.3575, 107),
('10128', 'Donnement', '31T', 606041, 5374199, 48.5119, 4.43583, 110),
('10129', 'Dosches', '31T', 592500, 5352651, 48.3203, 4.24778, 150),
('10130', 'Dosnon', '31T', 590701, 5385111, 48.6125, 4.23055, 110),
('10131', 'Droupt-Saint-Basle', '31T', 569571, 5369926, 48.4786, 3.94139, 90),
('10132', 'Droupt-Sainte-Marie', '31T', 568318, 5371702, 48.4947, 3.92473, 87),
('10133', 'Eaux-Puiseaux', '31T', 565971, 5329617, 48.1164, 3.88638, 180),
('10134', 'Échemines', '31T', 561820, 5359584, 48.3864, 3.83499, 150),
('10135', 'Éclance', '31T', 621241, 5351493, 48.305, 4.635, 180),
('10136', 'Éguilly-sous-Bois', '31T', 614174, 5332907, 48.1392, 4.53473, 220),
('10137', 'Engente', '31T', 630230, 5347707, 48.2692, 4.755, 222),
('10138', 'Épagne', '31T', 608531, 5361027, 48.3931, 4.46612, 120),
('10139', 'Épothémont', '31T', 622679, 5364095, 48.4181, 4.65806, 150),
('10140', 'Ervy-le-Châtel', '31T', 567889, 5321363, 48.0419, 3.91084, 150),
('10141', 'Essoyes', '31T', 614335, 5323799, 48.0572, 4.53445, 192),
('10142', 'Estissac', '31T', 560069, 5346256, 48.2667, 3.80945, 130),
('10143', 'Étourvy', '31T', 584401, 5312318, 47.9586, 4.13055, 210),
('10144', 'Étrelles-sur-Aube', '31T', 564539, 5379038, 48.5611, 3.87472, 82),
('10145', 'Faux-Villecerf', '31T', 554928, 5353430, 48.3317, 3.74111, 160),
('10146', 'Fay-lès-Marcilly', '31T', 544696, 5361245, 48.4028, 3.6039, 160),
('10147', 'Fays-la-Chapelle', '31T', 575793, 5331220, 48.1297, 4.01862, 170),
('10148', 'Ferreux-Quincey', '31T', 545311, 5366592, 48.4508, 3.61278, 100),
('10149', 'Feuges', '31T', 582285, 5361110, 48.3978, 4.11166, 158),
('10150', 'Fontaine', '31T', 627383, 5341310, 48.2122, 4.71472, 170),
('10151', 'Fontaine-les-Grès', '31T', 566814, 5363501, 48.4211, 3.90306, 100),
('10153', 'Fontaine-Mâcon', '31T', 537618, 5368110, 48.465, 3.50888, 80),
('10154', 'Fontenay-de-Bossery', '31T', 533868, 5366820, 48.4536, 3.45805, 70),
('10155', 'Fontette', '31T', 619885, 5326723, 48.0825, 4.60972, 300),
('10156', 'Fontvannes', '31T', 564753, 5347697, 48.2792, 3.87278, 150),
('10157', 'La Fosse-Corduan', '31T', 548255, 5365782, 48.4433, 3.6525, 96),
('10158', 'Fouchères', '31T', 594227, 5334119, 48.1533, 4.26694, 130),
('10159', 'Fralignes', '31T', 602243, 5335399, 48.1636, 4.375, 220),
('10160', 'Fravaux', '31T', 621631, 5343841, 48.2361, 4.63805, 200),
('10161', 'Fresnay', '31T', 629725, 5352699, 48.3142, 4.74973, 233),
('10162', 'Fresnoy-le-Château', '31T', 590906, 5340242, 48.2089, 4.22361, 150),
('10163', 'Fuligny', '31T', 626429, 5354509, 48.3311, 4.70583, 174),
('10164', 'Gélannes', '31T', 549777, 5370304, 48.4839, 3.67362, 72),
('10165', 'Géraudot', '31T', 598187, 5351357, 48.3078, 4.32417, 150),
('10166', 'Les Grandes-Chapelles', '31T', 575132, 5368638, 48.4664, 4.01639, 114),
('10167', 'Grandville', '31T', 590814, 5383229, 48.5956, 4.23167, 111),
('10168', 'Les Granges', '31T', 578590, 5323198, 48.0572, 4.05472, 133),
('10169', 'Gumery', '31T', 531900, 5366192, 48.4481, 3.43139, 80),
('10170', 'Gyé-sur-Seine', '31T', 606633, 5320439, 48.0283, 4.43028, 172),
('10171', 'Hampigny', '31T', 617578, 5368126, 48.4553, 4.59027, 120),
('10172', 'Herbisse', '31T', 582064, 5386214, 48.6236, 4.11362, 106),
('10173', 'Isle-Aumont', '31T', 583536, 5340314, 48.2106, 4.12444, 120),
('10174', 'Isle-Aubigny', '31T', 593525, 5375367, 48.5244, 4.26667, 100),
('10175', 'Jasseines', '31T', 602451, 5373021, 48.5019, 4.38694, 110),
('10176', 'Jaucourt', '31T', 622136, 5346261, 48.2578, 4.64555, 145),
('10177', 'Javernant', '31T', 574489, 5334538, 48.1597, 4.00167, 220),
('10178', 'Jessains', '31T', 616978, 5350384, 48.2958, 4.57723, 150),
('10179', 'Jeugny', '31T', 577177, 5331301, 48.1303, 4.03723, 150),
('10180', 'Joncreuil', '31T', 618982, 5375630, 48.5225, 4.61139, 130),
('10181', 'Jully-sur-Sarce', '31T', 597123, 5329072, 48.1075, 4.30472, 160),
('10182', 'Juvancourt', '31T', 633951, 5330618, 48.1147, 4.79972, 210),
('10183', 'Juvanzé', '31T', 615736, 5352644, 48.3164, 4.56111, 140),
('10184', 'Juzanvigny', '31T', 617633, 5363494, 48.4136, 4.58972, 125),
('10185', 'Lagesse', '31T', 584590, 5319208, 48.0206, 4.13444, 220),
('10186', 'Laines-aux-Bois', '31T', 573700, 5342803, 48.2342, 3.9925, 140),
('10187', 'Landreville', '31T', 609792, 5325316, 48.0717, 4.47389, 180),
('10188', 'Lantages', '31T', 590155, 5325036, 48.0722, 4.21028, 170),
('10189', 'Lassicourt', '31T', 610069, 5366523, 48.4422, 4.48833, 113),
('10190', 'Laubressel', '31T', 589986, 5350109, 48.2978, 4.21333, 165),
('10191', 'Lavau', '31T', 580570, 5352995, 48.325, 4.08694, 105),
('10192', 'Lentilles', '31T', 619032, 5371307, 48.4836, 4.61084, 120),
('10193', 'Lesmont', '31T', 604634, 5364845, 48.4281, 4.41444, 110),
('10194', 'Lévigny', '31T', 626565, 5351176, 48.3011, 4.70667, 240),
('10195', 'Lhuître', '31T', 592088, 5380471, 48.5706, 4.24834, 100),
('10196', 'Lignières', '31T', 572197, 5311319, 47.9511, 3.96694, 200),
('10197', 'Lignol-le-Château', '31T', 634268, 5342641, 48.2228, 4.80778, 271),
('10198', 'Lirey', '31T', 577882, 5334182, 48.1561, 4.04723, 140),
('10199', 'Loches-sur-Ource', '31T', 612212, 5324344, 48.0625, 4.50611, 188),
('10200', 'La Loge-aux-Chèvres', '31T', 604812, 5347367, 48.2708, 4.4125, 160),
('10201', 'La Loge-Pomblin', '31T', 577145, 5322870, 48.0544, 4.03527, 132),
('10202', 'Les Loges-Margueron', '31T', 582786, 5326500, 48.0864, 4.11166, 146),
('10203', 'Longchamp-sur-Aujon', '31T', 636298, 5334565, 48.1497, 4.8325, 203),
('10204', 'Longeville-sur-Mogne', '31T', 578700, 5333267, 48.1478, 4.05806, 135),
('10205', 'Longpré-le-Sec', '31T', 613284, 5338171, 48.1867, 4.52417, 220),
('10206', 'Longsols', '31T', 595219, 5364895, 48.43, 4.28722, 114),
('10207', 'Longueville-sur-Aube', '31T', 567477, 5378455, 48.5556, 3.91444, 82),
('10208', 'La Louptière-Thénard', '31T', 532267, 5359463, 48.3875, 3.43583, 100),
('10209', 'Lusigny-sur-Barse', '31T', 594037, 5345635, 48.2569, 4.26694, 120),
('10210', 'Luyères', '31T', 588442, 5359288, 48.3806, 4.19444, 150),
('10211', 'Macey', '31T', 567949, 5349309, 48.2933, 3.91611, 190),
('10212', 'Machy', '31T', 577908, 5332237, 48.1386, 4.04722, 135),
('10213', 'Magnant', '31T', 605722, 5336080, 48.1692, 4.42194, 228),
('10214', 'Magnicourt', '31T', 602121, 5367424, 48.4517, 4.38111, 110),
('10215', 'Magny-Fouchard', '31T', 614071, 5344271, 48.2414, 4.5364, 219),
('10216', 'Mailly-le-Camp', '31T', 588409, 5391530, 48.6706, 4.20083, 130),
('10217', 'Maison-des-Champs', '31T', 616440, 5344443, 48.2425, 4.56834, 239),
('10218', 'Maisons-lès-Chaource', '31T', 586887, 5318007, 48.0094, 4.165, 235),
('10219', 'Maisons-lès-Soulaines', '31T', 632508, 5349952, 48.2889, 4.78638, 280),
('10220', 'Maizières-la-Grande-Paroisse', '31T', 558119, 5373502, 48.5119, 3.78694, 80),
('10221', 'Maizières-lès-Brienne', '31T', 617392, 5366207, 48.4381, 4.58722, 120),
('10222', 'Maraye-en-Othe', '31T', 563536, 5334807, 48.1633, 3.85444, 220),
('10223', 'Marcilly-le-Hayer', '31T', 547132, 5355089, 48.3472, 3.63612, 121),
('10224', 'Marigny-le-Châtel', '31T', 554666, 5361394, 48.4033, 3.73861, 110),
('10225', 'Marnay-sur-Seine', '31T', 541358, 5373447, 48.5128, 3.56, 65),
('10226', 'Marolles-lès-Bailly', '31T', 600178, 5337679, 48.1844, 4.34777, 170),
('10227', 'Marolles-sous-Lignières', '31T', 568613, 5310997, 47.9486, 3.91889, 185),
('10228', 'Mathaux', '31T', 608477, 5356300, 48.3506, 4.46417, 130),
('10229', 'Maupas', '31T', 580287, 5332115, 48.1372, 4.07917, 135),
('10230', 'Mergey', '31T', 574384, 5359889, 48.3878, 4.00472, 95),
('10231', 'Le Mériot', '31T', 532521, 5372463, 48.5044, 3.44027, 64),
('10232', 'Merrey-sur-Arce', '31T', 603371, 5327853, 48.0956, 4.38833, 160),
('10233', 'Méry-sur-Seine', '31T', 565815, 5373309, 48.5094, 3.8911, 82),
('10234', 'Mesgrigny', '31T', 565371, 5370926, 48.4881, 3.88472, 90),
('10235', 'Mesnil-la-Comtesse', '31T', 588423, 5372351, 48.4981, 4.19694, 119),
('10236', 'Mesnil-Lettre', '31T', 593611, 5367678, 48.4553, 4.26611, 122),
('10237', 'Mesnil-Saint-Loup', '31T', 556898, 5349991, 48.3006, 3.76722, 180),
('10238', 'Mesnil-Saint-Père', '31T', 599330, 5344891, 48.2494, 4.33806, 132),
('10239', 'Mesnil-Sellières', '31T', 590448, 5354749, 48.3394, 4.22055, 170),
('10240', 'Messon', '31T', 567285, 5346245, 48.2658, 3.90667, 160),
('10241', 'Metz-Robert', '31T', 582493, 5325322, 48.0758, 4.1075, 151),
('10242', 'Meurville', '31T', 620598, 5339989, 48.2017, 4.62305, 200),
('10243', 'Molins-sur-Aube', '31T', 602215, 5365604, 48.4353, 4.38194, 110),
('10245', 'Montaulin', '31T', 588622, 5345085, 48.2528, 4.19389, 115),
('10246', 'Montceaux-lès-Vaudes', '31T', 586157, 5334856, 48.1611, 4.15861, 141),
('10247', 'Montfey', '31T', 565289, 5324174, 48.0675, 3.87639, 170),
('10248', 'Montgueux', '31T', 571249, 5350709, 48.3056, 3.96083, 220),
('10249', 'Montiéramey', '31T', 596790, 5342623, 48.2294, 4.30333, 125),
('10250', 'Montier-en-l''Isle', '31T', 623308, 5346471, 48.2594, 4.6614, 160),
('10251', 'Montigny-les-Monts', '31T', 570537, 5328250, 48.1036, 3.9475, 150),
('10252', 'Montmartin-le-Haut', '31T', 615325, 5340405, 48.2064, 4.55223, 260),
('10253', 'Montmorency-Beaufort', '31T', 615473, 5371603, 48.4869, 4.56277, 120),
('10254', 'Montpothier', '31T', 538421, 5379911, 48.5711, 3.52083, 160),
('10255', 'Montreuil-sur-Barse', '31T', 596141, 5341964, 48.2236, 4.29445, 127),
('10256', 'Montsuzain', '31T', 583790, 5366413, 48.4453, 4.13305, 120),
('10257', 'Morembert', '31T', 598303, 5373132, 48.5036, 4.33083, 107),
('10258', 'Morvilliers', '31T', 619892, 5359773, 48.3797, 4.61917, 150),
('10259', 'La Motte-Tilly', '31T', 532540, 5369129, 48.4744, 3.44027, 61),
('10260', 'Moussey', '31T', 581385, 5340623, 48.2136, 4.09556, 130),
('10261', 'Mussy-sur-Seine', '31T', 611916, 5315073, 47.9792, 4.49972, 191),
('10262', 'Neuville-sur-Seine', '31T', 605199, 5321802, 48.0408, 4.41139, 170),
('10263', 'Neuville-sur-Vannes', '31T', 558040, 5345093, 48.2564, 3.78195, 142),
('10264', 'Noë-les-Mallets', '31T', 616888, 5328576, 48.0997, 4.57001, 260),
('10265', 'Les Noës-près-Troyes', '31T', 577247, 5350509, 48.3031, 4.04167, 108),
('10266', 'Nogent-en-Othe', '31T', 560047, 5332639, 48.1442, 3.80722, 198),
('10267', 'Nogent-sur-Aube', '31T', 596782, 5372087, 48.4944, 4.31, 100),
('10268', 'Nogent-sur-Seine', '31T', 537044, 5371132, 48.4922, 3.50139, 75),
('10269', 'Nozay', '31T', 580935, 5373567, 48.51, 4.09584, 95),
('10270', 'Onjon', '31T', 594750, 5360996, 48.395, 4.28, 126),
('10271', 'Origny-le-Sec', '31T', 557309, 5368399, 48.4661, 3.77528, 100),
('10272', 'Ormes', '31T', 582324, 5378219, 48.5517, 4.11556, 88),
('10273', 'Ortillon', '31T', 592255, 5373988, 48.5122, 4.24916, 100),
('10274', 'Orvilliers-Saint-Julien', '31T', 561298, 5366063, 48.4447, 3.82889, 109),
('10275', 'Ossey-les-Trois-Maisons', '31T', 555123, 5365197, 48.4375, 3.74528, 110),
('10276', 'Paisy-Cosdon', '31T', 553073, 5342544, 48.2339, 3.71472, 130),
('10277', 'Palis', '31T', 552877, 5348192, 48.2847, 3.71278, 165),
('10278', 'Pargues', '31T', 589314, 5320545, 48.0319, 4.19806, 200);
INSERT INTO `ods_communes` (`oc_code_insee`, `oc_nom`, `oc_secteur`, `oc_x_utm`, `oc_y_utm`, `oc_latitude`, `oc_longitude`, `oc_altitude`) VALUES
('10279', 'Pars-lès-Chavanges', '31T', 610666, 5373855, 48.5081, 4.49834, 120),
('10280', 'Pars-lès-Romilly', '31T', 554106, 5370467, 48.485, 3.73222, 75),
('10281', 'Le Pavillon-Sainte-Julie', '31T', 566799, 5357726, 48.3692, 3.90194, 130),
('10282', 'Payns', '31T', 572398, 5359184, 48.3817, 3.97778, 95),
('10283', 'Pel-et-Der', '31T', 604897, 5361761, 48.4003, 4.41723, 120),
('10284', 'Périgny-la-Rose', '31T', 546126, 5377375, 48.5478, 3.62499, 69),
('10285', 'Perthes-lès-Brienne', '31T', 613875, 5365301, 48.4306, 4.53944, 120),
('10286', 'Petit-Mesnil', '31T', 617640, 5356205, 48.3481, 4.58777, 135),
('10287', 'Piney', '31T', 598821, 5357545, 48.3633, 4.33417, 110),
('10288', 'Plaines-Saint-Lange', '31T', 609920, 5316455, 47.9919, 4.47333, 190),
('10289', 'Plancy-l''Abbaye', '31T', 571393, 5380078, 48.5697, 3.96778, 85),
('10290', 'Planty', '31T', 548666, 5346549, 48.2703, 3.65583, 190),
('10291', 'Plessis-Barbuise', '31T', 543170, 5380563, 48.5767, 3.58527, 90),
('10293', 'Poivres', '31T', 592557, 5393048, 48.6836, 4.2575, 140),
('10294', 'Poligny', '31T', 599827, 5336499, 48.1739, 4.34278, 150),
('10295', 'Polisot', '31T', 602219, 5325146, 48.0714, 4.37222, 170),
('10296', 'Polisy', '31T', 602986, 5323955, 48.0606, 4.38223, 160),
('10297', 'Pont-Sainte-Marie', '31T', 581467, 5352205, 48.3178, 4.09889, 116),
('10298', 'Pont-sur-Seine', '31T', 543957, 5374208, 48.5194, 3.59527, 71),
('10299', 'Pouan-les-Vallées', '31T', 578711, 5377025, 48.5414, 4.06638, 90),
('10300', 'Pougy', '31T', 600365, 5366837, 48.4467, 4.35723, 110),
('10301', 'Pouy-sur-Vannes', '31T', 543626, 5350522, 48.3064, 3.58833, 160),
('10302', 'Praslin', '31T', 589395, 5321998, 48.045, 4.19945, 200),
('10303', 'Précy-Notre-Dame', '31T', 606376, 5362932, 48.4106, 4.4375, 115),
('10304', 'Précy-Saint-Martin', '31T', 607271, 5363474, 48.4153, 4.44973, 130),
('10305', 'Prémierfait', '31T', 575898, 5372756, 48.5033, 4.0275, 105),
('10306', 'Proverville', '31T', 625957, 5343255, 48.23, 4.69611, 170),
('10307', 'Prugny', '31T', 570137, 5343994, 48.2453, 3.94472, 189),
('10308', 'Prunay-Belleville', '31T', 557091, 5357404, 48.3672, 3.77083, 145),
('10309', 'Prusy', '31T', 578014, 5313803, 47.9728, 4.04528, 229),
('10310', 'Puits-et-Nuisement', '31T', 611517, 5340854, 48.2111, 4.50111, 200),
('10312', 'Racines', '31T', 562951, 5322203, 48.05, 3.84472, 131),
('10313', 'Radonvilliers', '31T', 611689, 5357320, 48.3592, 4.50778, 130),
('10314', 'Ramerupt', '31T', 595463, 5374813, 48.5192, 4.29278, 110),
('10315', 'Rances', '31T', 614228, 5369231, 48.4658, 4.54528, 115),
('10316', 'Rhèges', '31T', 573515, 5377696, 48.5481, 3.99612, 85),
('10317', 'Les Riceys', '31T', 602207, 5316529, 47.9939, 4.37, 180),
('10318', 'Rigny-la-Nonneuse', '31T', 549169, 5362239, 48.4114, 3.66444, 110),
('10319', 'Rigny-le-Ferron', '31T', 547136, 5339589, 48.2078, 3.63444, 130),
('10320', 'Rilly-Sainte-Syre', '31T', 570911, 5366206, 48.445, 3.95889, 90),
('10321', 'La Rivière-de-Corps', '31T', 576816, 5348835, 48.2881, 4.03555, 110),
('10323', 'Romilly-sur-Seine', '31T', 553891, 5373707, 48.5142, 3.72973, 75),
('10324', 'Roncenay', '31T', 578065, 5338878, 48.1983, 4.05055, 130),
('10325', 'Rosières-près-Troyes', '31T', 579867, 5345882, 48.2611, 4.07612, 115),
('10326', 'Rosnay-l''Hôpital', '31T', 610974, 5368610, 48.4608, 4.50111, 115),
('10327', 'La Rothière', '31T', 615322, 5355786, 48.3447, 4.55638, 137),
('10328', 'Rouilly-Sacey', '31T', 593546, 5355417, 48.345, 4.2625, 150),
('10329', 'Rouilly-Saint-Loup', '31T', 585285, 5346177, 48.2631, 4.14916, 115),
('10330', 'Rouvres-les-Vignes', '31T', 635271, 5344735, 48.2414, 4.82194, 250),
('10331', 'Rumilly-lès-Vaudes', '31T', 590425, 5332822, 48.1422, 4.21556, 140),
('10332', 'Ruvigny', '31T', 587432, 5347383, 48.2736, 4.17833, 114),
('10333', 'Saint-André-les-Vergers', '31T', 578536, 5348149, 48.2817, 4.05861, 110),
('10334', 'Saint-Aubin', '31T', 541264, 5369402, 48.4764, 3.55833, 80),
('10335', 'Saint-Benoist-sur-Vanne', '31T', 549792, 5342730, 48.2358, 3.67056, 130),
('10336', 'Saint-Benoît-sur-Seine', '31T', 576284, 5357753, 48.3683, 4.02999, 100),
('10337', 'Saint-Christophe-Dodinicourt', '31T', 608680, 5366095, 48.4386, 4.46944, 112),
('10338', 'Saint-Étienne-sous-Barbuise', '31T', 581975, 5372594, 48.5011, 4.10972, 100),
('10339', 'Saint-Flavy', '31T', 556146, 5361408, 48.4033, 3.75861, 117),
('10340', 'Saint-Germain', '31T', 573993, 5345648, 48.2597, 3.99694, 120),
('10341', 'Saint-Hilaire-sous-Romilly', '31T', 548433, 5373751, 48.515, 3.65583, 80),
('10342', 'Saint-Jean-de-Bonneval', '31T', 577965, 5335665, 48.1694, 4.04861, 150),
('10343', 'Saint-Julien-les-Villas', '31T', 581831, 5346929, 48.2703, 4.10278, 112),
('10344', 'Saint-Léger-près-Troyes', '31T', 580134, 5342983, 48.235, 4.07916, 125),
('10345', 'Saint-Léger-sous-Brienne', '31T', 611222, 5362252, 48.4036, 4.50278, 130),
('10346', 'Saint-Léger-sous-Margerie', '31T', 609958, 5376466, 48.5317, 4.48944, 116),
('10347', 'Saint-Loup-de-Buffigny', '31T', 547283, 5366515, 48.45, 3.63944, 90),
('10348', 'Saint-Lupien', '31T', 552058, 5356584, 48.3603, 3.70278, 132),
('10349', 'Saint-Lyé', '31T', 574361, 5356893, 48.3608, 4.00388, 95),
('10350', 'Saint-Mards-en-Othe', '31T', 559437, 5335689, 48.1717, 3.79945, 176),
('10351', 'Saint-Martin-de-Bossenay', '31T', 550477, 5365462, 48.4403, 3.68251, 100),
('10352', 'Sainte-Maure', '31T', 578518, 5355436, 48.3472, 4.05972, 100),
('10353', 'Saint-Mesmin', '31T', 568446, 5366145, 48.4447, 3.92555, 90),
('10354', 'Saint-Nabord-sur-Aube', '31T', 589726, 5375584, 48.5269, 4.21527, 94),
('10355', 'Saint-Nicolas-la-Chapelle', '31T', 534638, 5375285, 48.5297, 3.46917, 87),
('10356', 'Saint-Oulph', '31T', 564244, 5374402, 48.5194, 3.87, 80),
('10357', 'Saint-Parres-aux-Tertres', '31T', 582361, 5350179, 48.2994, 4.11055, 121),
('10358', 'Saint-Parres-lès-Vaudes', '31T', 590336, 5335847, 48.1694, 4.21501, 130),
('10359', 'Saint-Phal', '31T', 574213, 5330304, 48.1217, 3.99722, 180),
('10360', 'Saint-Pouange', '31T', 577341, 5342080, 48.2272, 4.04139, 122),
('10361', 'Saint-Remy-sous-Barbuise', '31T', 582454, 5370717, 48.4842, 4.11584, 105),
('10362', 'Sainte-Savine', '31T', 577900, 5349468, 48.2936, 4.05028, 120),
('10363', 'Saint-Thibault', '31T', 584785, 5339591, 48.2039, 4.14111, 119),
('10364', 'Saint-Usage', '31T', 619762, 5328636, 48.0997, 4.60861, 260),
('10365', 'Salon', '31T', 573973, 5388017, 48.6408, 4.00416, 103),
('10366', 'Saulcy', '31T', 636022, 5348707, 48.2769, 4.83333, 260),
('10367', 'La Saulsotte', '31T', 537028, 5376659, 48.5419, 3.50166, 75),
('10368', 'Savières', '31T', 570531, 5362064, 48.4078, 3.95305, 90),
('10369', 'Semoine', '31T', 580277, 5392334, 48.6789, 4.09056, 131),
('10370', 'Soligny-les-Étangs', '31T', 537847, 5361596, 48.4064, 3.51139, 85),
('10371', 'Sommeval', '31T', 571837, 5335091, 48.165, 3.96611, 210),
('10372', 'Soulaines-Dhuys', '31T', 628336, 5359463, 48.3753, 4.73306, 142),
('10373', 'Souligny', '31T', 574094, 5339474, 48.2042, 3.99722, 160),
('10374', 'Spoy', '31T', 620290, 5342855, 48.2275, 4.61972, 180),
('10375', 'Thennelières', '31T', 587156, 5349232, 48.2903, 4.175, 110),
('10376', 'Thieffrain', '31T', 607052, 5339008, 48.1953, 4.44056, 180),
('10377', 'Thil', '31T', 632110, 5356461, 48.3475, 4.78306, 190),
('10378', 'Thors', '31T', 634303, 5351662, 48.3039, 4.81111, 229),
('10379', 'Torcy-le-Grand', '31T', 586392, 5376335, 48.5342, 4.17028, 99),
('10380', 'Torcy-le-Petit', '31T', 588160, 5376053, 48.5314, 4.19417, 95),
('10381', 'Torvilliers', '31T', 572487, 5347358, 48.2753, 3.97695, 130),
('10382', 'Traînel', '31T', 532785, 5362399, 48.4139, 3.44306, 75),
('10384', 'Trannes', '31T', 617605, 5350953, 48.3008, 4.58583, 150),
('10386', 'Trouans', '31T', 591034, 5387341, 48.6325, 4.23556, 117),
('10387', 'Troyes', '31T', 579482, 5349799, 48.2964, 4.07167, 107),
('10388', 'Turgy', '31T', 577753, 5319296, 48.0222, 4.04278, 170),
('10389', 'Unienville', '31T', 614583, 5353640, 48.3256, 4.54583, 140),
('10390', 'Urville', '31T', 622905, 5336424, 48.1692, 4.65306, 230),
('10391', 'Vailly', '31T', 583174, 5358004, 48.3697, 4.12306, 140),
('10392', 'Vallant-Saint-Georges', '31T', 566770, 5368904, 48.4697, 3.90333, 90),
('10393', 'Vallentigny', '31T', 616839, 5367122, 48.4464, 4.58, 118),
('10394', 'Vallières', '31T', 579239, 5316630, 47.9981, 4.06222, 200),
('10395', 'Vanlay', '31T', 575861, 5319796, 48.0269, 4.0175, 140),
('10396', 'Vauchassis', '31T', 568701, 5341599, 48.2239, 3.92499, 184),
('10397', 'Vauchonvilliers', '31T', 613235, 5346880, 48.265, 4.52584, 220),
('10398', 'Vaucogne', '31T', 599323, 5375806, 48.5275, 4.34527, 106),
('10399', 'Vaudes', '31T', 588381, 5336682, 48.1772, 4.18889, 127),
('10400', 'Vaupoisson', '31T', 591222, 5374465, 48.5167, 4.23528, 100),
('10401', 'Vendeuvre-sur-Barse', '31T', 609130, 5343711, 48.2372, 4.46973, 160),
('10402', 'La Vendue-Mignot', '31T', 582645, 5334866, 48.1617, 4.11139, 137),
('10403', 'Vernonvilliers', '31T', 624617, 5352585, 48.3142, 4.68083, 182),
('10404', 'Verpillières-sur-Ource', '31T', 616897, 5321998, 48.0406, 4.56833, 190),
('10405', 'Verricourt', '31T', 599679, 5367257, 48.4506, 4.34805, 107),
('10406', 'Verrières', '31T', 585400, 5342658, 48.2314, 4.15, 119),
('10408', 'Viâpres-le-Petit', '31T', 576894, 5379440, 48.5633, 4.04222, 85),
('10409', 'Villacerf', '31T', 573401, 5361173, 48.3994, 3.99167, 116),
('10410', 'Villadin', '31T', 550556, 5351876, 48.3181, 3.68194, 191),
('10411', 'La Ville-aux-Bois', '31T', 625114, 5362758, 48.4056, 4.69055, 139),
('10412', 'Villechétif', '31T', 584835, 5351513, 48.3111, 4.14417, 110),
('10414', 'Villeloup', '31T', 564877, 5356685, 48.36, 3.87583, 160),
('10415', 'Villemaur-sur-Vanne', '31T', 554080, 5345208, 48.2578, 3.72862, 140),
('10416', 'Villemereuil', '31T', 581036, 5339043, 48.1994, 4.09056, 130),
('10417', 'Villemoiron-en-Othe', '31T', 557999, 5338948, 48.2011, 3.78055, 150),
('10418', 'Villemorien', '31T', 596464, 5326436, 48.0839, 4.29527, 170),
('10419', 'Villemoyenne', '31T', 591315, 5336635, 48.1764, 4.22834, 130),
('10420', 'Villenauxe-la-Grande', '31T', 541028, 5382060, 48.5903, 3.55638, 83),
('10421', 'La Villeneuve-au-Châtelot', '31T', 545242, 5377708, 48.5508, 3.61305, 69),
('10422', 'Villeneuve-au-Chemin', '31T', 563379, 5326592, 48.0894, 3.85111, 150),
('10423', 'La Villeneuve-au-Chêne', '31T', 603086, 5343630, 48.2375, 4.38833, 164),
('10424', 'Villeret', '31T', 617445, 5370594, 48.4775, 4.58917, 115),
('10425', 'Villery', '31T', 575795, 5335759, 48.1706, 4.01945, 169),
('10426', 'Ville-sous-la-Ferté', '31T', 633152, 5331186, 48.12, 4.78917, 205),
('10427', 'Ville-sur-Arce', '31T', 607586, 5329228, 48.1072, 4.44527, 190),
('10428', 'Ville-sur-Terre', '31T', 629452, 5354701, 48.3322, 4.74666, 200),
('10429', 'Villette-sur-Aube', '31T', 581264, 5376320, 48.5347, 4.10083, 90),
('10430', 'Villiers-Herbisse', '31T', 581961, 5387634, 48.6364, 4.1125, 110),
('10431', 'Villiers-le-Bois', '31T', 588714, 5312414, 47.9589, 4.18833, 310),
('10432', 'Villiers-sous-Praslin', '31T', 593028, 5323939, 48.0619, 4.24861, 230),
('10433', 'Villy-en-Trodes', '31T', 602693, 5339114, 48.1969, 4.38195, 160),
('10434', 'Villy-le-Bois', '31T', 581282, 5334785, 48.1611, 4.09305, 130),
('10435', 'Villy-le-Maréchal', '31T', 579795, 5337698, 48.1875, 4.07361, 133),
('10436', 'Vinets', '31T', 591395, 5376414, 48.5342, 4.23805, 95),
('10437', 'Virey-sous-Bar', '31T', 597375, 5332504, 48.1383, 4.30889, 150),
('10438', 'Vitry-le-Croisé', '31T', 616432, 5333694, 48.1458, 4.56528, 230),
('10439', 'Viviers-sur-Artaut', '31T', 611457, 5328035, 48.0958, 4.49694, 230),
('10440', 'Voigny', '31T', 631192, 5344454, 48.2397, 4.76694, 220),
('10441', 'Vosnon', '31T', 562734, 5328808, 48.1094, 3.84278, 190),
('10442', 'Voué', '31T', 583052, 5367699, 48.4569, 4.12333, 110),
('10443', 'Vougrey', '31T', 591390, 5326723, 48.0872, 4.22722, 170),
('10444', 'Vulaines', '31T', 546287, 5342485, 48.2339, 3.62333, 113),
('10445', 'Yèvres-le-Petit', '31T', 610095, 5370477, 48.4778, 4.48972, 120),
('11001', 'Aigues-Vives', '31T', 462129, 4786678, 43.2319, 2.53361, 60),
('11002', 'Airoux', '31T', 408216, 4801848, 43.3639, 1.86723, 190),
('11003', 'Ajac', '31T', 429755, 4766605, 43.0489, 2.1375, 270),
('11004', 'Alaigne', '31T', 426063, 4772505, 43.1017, 2.09139, 320),
('11005', 'Alairac', '31T', 438329, 4781546, 43.1842, 2.24111, 220),
('11006', 'Albas', '31T', 478063, 4761714, 43.0078, 2.73083, 250),
('11007', 'Albières', '31T', 457149, 4755118, 42.9475, 2.47472, 490),
('11008', 'Alet-les-Bains', '31T', 439318, 4760744, 42.9969, 2.25555, 200),
('11009', 'Alzonne', '31T', 433168, 4789338, 43.2539, 2.17666, 131),
('11010', 'Antugnac', '31T', 436854, 4756263, 42.9564, 2.22583, 291),
('11011', 'Aragon', '31T', 444414, 4794050, 43.2972, 2.31472, 200),
('11012', 'Argeliers', '31T', 492702, 4795584, 43.3131, 2.91, 40),
('11013', 'Argens-Minervois', '31T', 481214, 4787863, 43.2433, 2.76861, 40),
('11014', 'Armissan', '31T', 507855, 4781610, 43.1872, 3.09666, 35),
('11015', 'Arques', '31T', 448905, 4755761, 42.9528, 2.37361, 350),
('11016', 'Arquettes-en-Val', '31T', 459361, 4772658, 43.1056, 2.50056, 260),
('11017', 'Artigues', '31T', 435562, 4739246, 42.8031, 2.21194, 547),
('11018', 'Arzens', '31T', 435840, 4783328, 43.2, 2.21028, 180),
('11019', 'Aunat', '31T', 425967, 4738417, 42.7947, 2.09472, 940),
('11020', 'Auriac', '31T', 458588, 4753290, 42.9311, 2.4925, 520),
('11021', 'Axat', '31T', 437334, 4739322, 42.8039, 2.23361, 448),
('11022', 'Azille', '31T', 472435, 4791626, 43.2769, 2.66028, 86),
('11023', 'Badens', '31T', 460046, 4785333, 43.2197, 2.50806, 82),
('11024', 'Bages', '31T', 499322, 4774634, 43.1244, 2.99166, 10),
('11025', 'Bagnoles', '31T', 454309, 4791199, 43.2722, 2.43694, 140),
('11026', 'Baraigne', '31T', 404651, 4798134, 43.33, 1.82388, 260),
('11027', 'Barbaira', '31T', 460272, 4781629, 43.1864, 2.51111, 80),
('11028', 'Belcaire', '31T', 414887, 4740858, 42.8156, 1.95889, 1002),
('11029', 'Belcastel-et-Buc', '31T', 447340, 4764473, 43.0311, 2.35361, 364),
('11030', 'Belflou', '31T', 401524, 4796821, 43.3178, 1.78556, 234),
('11031', 'Belfort-sur-Rebenty', '31T', 421985, 4741916, 42.8258, 2.04555, 720),
('11032', 'Bellegarde-du-Razès', '31T', 422321, 4773504, 43.1103, 2.04527, 310),
('11033', 'Belpech', '31T', 398733, 4783440, 43.1969, 1.75361, 242),
('11034', 'Belvèze-du-Razès', '31T', 426409, 4775278, 43.1267, 2.09528, 234),
('11035', 'Belvianes-et-Cavirac', '31T', 434319, 4744656, 42.8517, 2.19611, 320),
('11036', 'Belvis', '31T', 424422, 4744603, 42.8503, 2.075, 1000),
('11037', 'Berriac', '31T', 452350, 4785043, 43.2167, 2.41333, 100),
('11038', 'Bessède-de-Sault', '31T', 428551, 4737834, 42.7897, 2.12639, 940),
('11039', 'La Bezole', '31T', 427362, 4765025, 43.0344, 2.10833, 430),
('11040', 'Bizanet', '31T', 489455, 4779115, 43.1647, 2.87028, 50),
('11041', 'Bize-Minervois', '31T', 489594, 4796390, 43.3203, 2.87166, 61),
('11042', 'Blomac', '31T', 467166, 4783598, 43.2044, 2.59583, 72),
('11043', 'Bouilhonnac', '31T', 454550, 4786724, 43.2319, 2.44028, 120),
('11044', 'Bouisse', '31T', 455388, 4759510, 42.9869, 2.45279, 646),
('11045', 'Bouriège', '31T', 431858, 4759704, 42.9869, 2.16417, 300),
('11046', 'Bourigeole', '31T', 429211, 4760008, 42.9894, 2.13166, 350),
('11047', 'Le Bousquet', '31T', 431339, 4732654, 42.7433, 2.16111, 1106),
('11048', 'Boutenac', '31T', 483015, 4777401, 43.1492, 2.79111, 90),
('11049', 'Bram', '31T', 428036, 4788034, 43.2417, 2.11362, 135),
('11050', 'Brenac', '31T', 430869, 4749225, 42.8925, 2.15333, 390),
('11051', 'Brézilhac', '31T', 425194, 4779888, 43.1681, 2.07972, 250),
('11052', 'Brousses-et-Villaret', '31T', 439593, 4799212, 43.3433, 2.25472, 410),
('11053', 'Brugairolles', '31T', 431581, 4774977, 43.1244, 2.15889, 191),
('11054', 'Les Brunels', '31T', 422919, 4806108, 43.4039, 2.04806, 600),
('11055', 'Bugarach', '31T', 447027, 4747323, 42.8767, 2.35139, 460),
('11056', 'Cabrespine', '31T', 456358, 4801305, 43.3633, 2.46139, 320),
('11057', 'Cahuzac', '31T', 406625, 4782740, 43.1917, 1.85084, 340),
('11058', 'Cailhau', '31T', 429798, 4777402, 43.1461, 2.13667, 260),
('11059', 'Cailhavel', '31T', 429071, 4779168, 43.1619, 2.1275, 246),
('11060', 'Cailla', '31T', 434325, 4740553, 42.8147, 2.19667, 520),
('11061', 'Cambieure', '31T', 429620, 4775460, 43.1286, 2.13473, 200),
('11062', 'Campagna-de-Sault', '31T', 422539, 4734629, 42.7603, 2.05333, 1080),
('11063', 'Campagne-sur-Aude', '31T', 435159, 4751929, 42.9172, 2.20555, 257),
('11064', 'Camplong-d''Aude', '31T', 471713, 4775310, 43.13, 2.65222, 115),
('11065', 'Camps-sur-l''Agly', '31T', 453752, 4745362, 42.8594, 2.43389, 520),
('11066', 'Camurac', '31T', 411456, 4738989, 42.7983, 1.91722, 1220),
('11067', 'Canet', '31T', 487661, 4786306, 43.2294, 2.84805, 25),
('11068', 'Capendu', '31T', 464109, 4781546, 43.1858, 2.55833, 85),
('11069', 'Carcassonne', '31T', 447071, 4785082, 43.2167, 2.34834, 110),
('11070', 'Carlipa', '31T', 429149, 4795303, 43.3072, 2.12639, 200),
('11071', 'Cascastel-des-Corbières', '31T', 480252, 4759239, 42.9856, 2.75777, 150),
('11072', 'La Cassaigne', '31T', 418309, 4783824, 43.2028, 1.99445, 250),
('11073', 'Cassaignes', '31T', 442714, 4755162, 42.9469, 2.29778, 420),
('11074', 'Les Cassés', '31T', 408305, 4808450, 43.4233, 1.86722, 257),
('11075', 'Castans', '31T', 458122, 4806168, 43.4072, 2.48278, 660),
('11076', 'Castelnaudary', '31T', 415218, 4796543, 43.3169, 1.95445, 170),
('11077', 'Castelnau-d''Aude', '31T', 473452, 4786748, 43.2331, 2.67305, 61),
('11078', 'Castelreng', '31T', 429821, 4764229, 43.0275, 2.13861, 270),
('11079', 'Caudebronde', '31T', 444082, 4802999, 43.3778, 2.30972, 550),
('11080', 'Caudeval', '31T', 416556, 4769684, 43.0753, 1.975, 360),
('11081', 'Caunes-Minervois', '31T', 461647, 4797293, 43.3275, 2.52694, 190),
('11082', 'Caunette-sur-Lauquet', '31T', 452274, 4764436, 43.0311, 2.41417, 429),
('11083', 'Caunettes-en-Val', '31T', 463677, 4768129, 43.065, 2.55389, 210),
('11084', 'Caux-et-Sauzens', '31T', 439589, 4786131, 43.2256, 2.25611, 150),
('11085', 'Cavanac', '31T', 445313, 4779789, 43.1689, 2.32722, 157),
('11086', 'Caves', '31T', 498119, 4753381, 42.9331, 2.97695, 31),
('11087', 'Cazalrenoux', '31T', 414624, 4783376, 43.1983, 1.94917, 330),
('11088', 'Cazilhac', '31T', 448034, 4781187, 43.1817, 2.36056, 140),
('11089', 'Cenne-Monestiés', '31T', 428277, 4798027, 43.3317, 2.11528, 180),
('11090', 'Cépie', '31T', 438500, 4772906, 43.1064, 2.24417, 162),
('11091', 'Chalabre', '31T', 419012, 4759381, 42.9828, 2.00666, 380),
('11092', 'Citou', '31T', 462826, 4802808, 43.3772, 2.54111, 360),
('11093', 'Le Clat', '31T', 431864, 4737400, 42.7861, 2.16695, 1080),
('11094', 'Clermont-sur-Lauquet', '31T', 452964, 4766066, 43.0458, 2.4225, 365),
('11095', 'Comigne', '31T', 465929, 4779933, 43.1714, 2.58083, 130),
('11096', 'Comus', '31T', 409501, 4740619, 42.8128, 1.89306, 1180),
('11097', 'Conilhac-de-la-Montagne', '31T', 434182, 4758818, 42.9792, 2.19277, 442),
('11098', 'Conilhac-Corbières', '31T', 476910, 4782046, 43.1908, 2.71584, 80),
('11099', 'Conques-sur-Orbiel', '31T', 451400, 4790942, 43.2697, 2.40112, 130),
('11100', 'Corbières', '31T', 417844, 4765874, 43.0411, 1.99139, 500),
('11101', 'Coudons', '31T', 428409, 4746041, 42.8636, 2.12361, 883),
('11102', 'Couffoulens', '31T', 443585, 4778354, 43.1558, 2.30611, 126),
('11103', 'Couiza', '31T', 439037, 4754577, 42.9414, 2.25278, 225),
('11104', 'Counozouls', '31T', 436670, 4731308, 42.7317, 2.22638, 980),
('11105', 'Cournanel', '31T', 437656, 4764739, 43.0328, 2.23472, 190),
('11106', 'Coursan', '31T', 504782, 4787037, 43.2361, 3.05889, 6),
('11107', 'Courtauly', '31T', 422210, 4765730, 43.0403, 2.045, 402),
('11108', 'La Courtète', '31T', 422185, 4777423, 43.1456, 2.04305, 260),
('11109', 'Coustaussa', '31T', 441078, 4754714, 42.9428, 2.27778, 300),
('11110', 'Coustouge', '31T', 479164, 4766368, 43.0497, 2.74416, 180),
('11111', 'Cruscades', '31T', 485035, 4781962, 43.1903, 2.81583, 36),
('11112', 'Cubières-sur-Cinoble', '31T', 455819, 4745564, 42.8614, 2.45917, 460),
('11113', 'Cucugnan', '31T', 467500, 4744450, 42.8519, 2.60222, 320),
('11114', 'Cumiès', '31T', 405973, 4794351, 43.2961, 1.84084, 248),
('11115', 'Cuxac-Cabardès', '31T', 441916, 4802277, 43.3711, 2.28306, 505),
('11116', 'Cuxac-d''Aude', '31T', 499910, 4788176, 43.2464, 2.99889, 10),
('11117', 'Davejean', '31T', 467874, 4756510, 42.9606, 2.60611, 395),
('11118', 'Dernacueillette', '31T', 467178, 4753058, 42.9294, 2.59778, 340),
('11119', 'La Digne-d''Amont', '31T', 431737, 4765721, 43.0411, 2.16195, 231),
('11120', 'La Digne-d''Aval', '31T', 433213, 4766231, 43.0458, 2.18, 220),
('11121', 'Donazac', '31T', 428251, 4769952, 43.0789, 2.11861, 280),
('11122', 'Douzens', '31T', 467405, 4781561, 43.1861, 2.59889, 90),
('11123', 'Duilhac-sous-Peyrepertuse', '31T', 464465, 4745699, 42.8631, 2.565, 336),
('11124', 'Durban-Corbières', '31T', 485146, 4760368, 42.9958, 2.81777, 90),
('11125', 'Embres-et-Castelmaure', '31T', 484770, 4754107, 42.9394, 2.81333, 180),
('11126', 'Escales', '31T', 475411, 4785784, 43.2244, 2.69722, 60),
('11127', 'Escouloubre', '31T', 428287, 4732130, 42.7383, 2.12389, 980),
('11128', 'Escueillens-et-Saint-Just-de-Bélengard', '31T', 420354, 4773464, 43.1097, 2.02111, 322),
('11129', 'Espéraza', '31T', 436357, 4753953, 42.9356, 2.22, 241),
('11130', 'Espezel', '31T', 419867, 4741416, 42.8211, 2.01972, 900),
('11131', 'Fa', '31T', 434049, 4754376, 42.9392, 2.19167, 260),
('11132', 'Fabrezan', '31T', 475512, 4776159, 43.1378, 2.69889, 70),
('11133', 'Fajac-en-Val', '31T', 455892, 4774592, 43.1228, 2.45777, 360),
('11134', 'Fajac-la-Relenque', '31T', 396549, 4792698, 43.28, 1.72499, 290),
('11135', 'La Fajolle', '31T', 415393, 4735793, 42.77, 1.96584, 1100),
('11136', 'Fanjeaux', '31T', 421470, 4782028, 43.1869, 2.03361, 330),
('11137', 'Félines-Termenès', '31T', 468636, 4759622, 42.9886, 2.61528, 340),
('11138', 'Fendeille', '31T', 414204, 4791187, 43.2686, 1.94278, 200),
('11139', 'Fenouillet-du-Razès', '31T', 421049, 4778794, 43.1578, 2.02889, 340),
('11140', 'Ferrals-les-Corbières', '31T', 477887, 4777261, 43.1478, 2.72805, 70),
('11141', 'Ferran', '31T', 425990, 4778275, 43.1536, 2.08973, 260),
('11142', 'Festes-et-Saint-André', '31T', 430235, 4758270, 42.9739, 2.14444, 350),
('11143', 'Feuilla', '31T', 492679, 4753200, 42.9314, 2.91028, 170),
('11144', 'Fitou', '31T', 498208, 4748970, 42.8933, 2.97805, 60),
('11145', 'Fleury', '31T', 511098, 4786396, 43.2303, 3.13667, 30),
('11146', 'Floure', '31T', 458576, 4781176, 43.1822, 2.49027, 80),
('11147', 'Fontanès-de-Sault', '31T', 424846, 4735591, 42.7692, 2.08139, 905),
('11148', 'Fontcouverte', '31T', 474644, 4779648, 43.1692, 2.68806, 78),
('11149', 'Fonters-du-Razès', '31T', 413582, 4786659, 43.2278, 1.93583, 350),
('11150', 'Fontiers-Cabardès', '31T', 438921, 4802149, 43.3697, 2.24611, 600),
('11151', 'Fontiès-d''Aude', '31T', 455690, 4781719, 43.1869, 2.45472, 105),
('11152', 'Fontjoncouse', '31T', 482739, 4766297, 43.0492, 2.78806, 250),
('11153', 'La Force', '31T', 426309, 4782745, 43.1939, 2.09305, 190),
('11154', 'Fournes-Cabardès', '31T', 451193, 4799766, 43.3492, 2.39778, 510),
('11155', 'Fourtou', '31T', 453426, 4750793, 42.9083, 2.42945, 666),
('11156', 'Fraisse-Cabardès', '31T', 440881, 4797227, 43.3256, 2.27083, 310),
('11157', 'Fraissé-des-Corbières', '31T', 488559, 4756567, 42.9617, 2.85972, 160),
('11158', 'Gaja-et-Villedieu', '31T', 433951, 4770080, 43.0806, 2.18861, 200),
('11159', 'Gaja-la-Selve', '31T', 410355, 4783122, 43.1956, 1.89667, 320),
('11160', 'Galinagues', '31T', 421872, 4739912, 42.8078, 2.04445, 940),
('11161', 'Gardie', '31T', 443036, 4769381, 43.075, 2.30028, 235),
('11162', 'Generville', '31T', 413177, 4784968, 43.2125, 1.93111, 320),
('11163', 'Gincla', '31T', 444656, 4734570, 42.7617, 2.32361, 594),
('11164', 'Ginestas', '31T', 489698, 4790621, 43.2683, 2.87305, 60),
('11165', 'Ginoles', '31T', 431432, 4746474, 42.8678, 2.16056, 360),
('11166', 'Gourvieille', '31T', 401289, 4799231, 43.3394, 1.78223, 260),
('11167', 'Gramazie', '31T', 426538, 4776758, 43.14, 2.09667, 222),
('11168', 'Granès', '31T', 438495, 4749739, 42.8978, 2.24666, 390),
('11169', 'Greffeil', '31T', 449371, 4769794, 43.0792, 2.37805, 260),
('11170', 'Gruissan', '31T', 507187, 4772756, 43.1075, 3.08833, 10),
('11171', 'Gueytes-et-Labastide', '31T', 419170, 4768943, 43.0689, 2.00722, 360),
('11172', 'Homps', '31T', 477367, 4790589, 43.2678, 2.72111, 44),
('11173', 'Hounoux', '31T', 418798, 4775673, 43.1294, 2.00166, 400),
('11174', 'Les Ilhes', '31T', 449483, 4799995, 43.3511, 2.37666, 240),
('11175', 'Issel', '31T', 418235, 4802059, 43.3669, 1.99083, 220),
('11176', 'Jonquières', '31T', 477985, 4765416, 43.0411, 2.72972, 310),
('11177', 'Joucou', '31T', 425325, 4742033, 42.8272, 2.0864, 600),
('11178', 'Labastide-d''Anjou', '31T', 407018, 4799921, 43.3464, 1.85277, 180),
('11179', 'Labastide-en-Val', '31T', 457035, 4769402, 43.0761, 2.47222, 242),
('11180', 'Labastide-Esparbairenque', '31T', 450815, 4803533, 43.3831, 2.39278, 448),
('11181', 'Labécède-Lauragais', '31T', 419369, 4804668, 43.3906, 2.00444, 306),
('11182', 'Lacombe', '31T', 437778, 4805121, 43.3964, 2.23166, 719),
('11183', 'Ladern-sur-Lauquet', '31T', 447383, 4772986, 43.1078, 2.35333, 190),
('11184', 'Lafage', '31T', 407659, 4780752, 43.1739, 1.86389, 320),
('11185', 'Lagrasse', '31T', 469163, 4771002, 43.0911, 2.62111, 132),
('11186', 'Lairière', '31T', 457809, 4762981, 43.0183, 2.48222, 380),
('11187', 'Lanet', '31T', 458928, 4757020, 42.9647, 2.49639, 360),
('11188', 'La Palme', '31T', 499411, 4758100, 42.9756, 2.99278, 10),
('11189', 'Laprade', '31T', 440070, 4809821, 43.4389, 2.25945, 840),
('11190', 'La Redorte', '31T', 471905, 4788944, 43.2528, 2.65389, 56),
('11191', 'Laroque-de-Fa', '31T', 464588, 4756372, 42.9592, 2.56583, 460),
('11192', 'Lasbordes', '31T', 422487, 4793987, 43.2947, 2.04444, 160),
('11193', 'Lasserre-de-Prouille', '31T', 425478, 4781027, 43.1783, 2.08306, 240),
('11194', 'Lastours', '31T', 449649, 4798081, 43.3339, 2.37889, 200),
('11195', 'Laurabuc', '31T', 417173, 4788805, 43.2475, 1.97972, 200),
('11196', 'Laurac', '31T', 416696, 4786713, 43.2286, 1.97416, 275),
('11197', 'Lauraguel', '31T', 432863, 4772065, 43.0983, 2.175, 193),
('11198', 'Laure-Minervois', '31T', 461026, 4791126, 43.2719, 2.51972, 83),
('11199', 'Lavalette', '31T', 440612, 4781834, 43.1869, 2.26917, 180),
('11200', 'Lespinassière', '31T', 462617, 4805586, 43.4022, 2.53834, 449),
('11201', 'Leuc', '31T', 445024, 4777540, 43.1486, 2.32389, 134),
('11202', 'Leucate', '31T', 502358, 4750883, 42.9106, 3.02889, 30),
('11203', 'Lézignan-Corbières', '31T', 480615, 4783207, 43.2014, 2.76139, 49),
('11204', 'Lignairolles', '31T', 418123, 4772164, 43.0978, 1.99388, 390),
('11205', 'Limousis', '31T', 451496, 4798129, 43.3344, 2.40167, 371),
('11206', 'Limoux', '31T', 436388, 4767095, 43.0539, 2.21888, 169),
('11207', 'Loupia', '31T', 427826, 4768229, 43.0633, 2.11361, 260),
('11208', 'La Louvière-Lauragais', '31T', 398687, 4790907, 43.2642, 1.75167, 330),
('11209', 'Luc-sur-Aude', '31T', 440415, 4756694, 42.9606, 2.26944, 260),
('11210', 'Luc-sur-Orbieu', '31T', 482571, 4780549, 43.1775, 2.78555, 45),
('11211', 'Magrie', '31T', 434869, 4764302, 43.0286, 2.20056, 230),
('11212', 'Mailhac', '31T', 486054, 4794607, 43.3042, 2.82805, 70),
('11213', 'Maisons', '31T', 470078, 4752829, 42.9275, 2.63333, 310),
('11214', 'Malras', '31T', 432891, 4768085, 43.0625, 2.17583, 240),
('11215', 'Malves-en-Minervois', '31T', 454611, 4789100, 43.2533, 2.44083, 130),
('11216', 'Malviès', '31T', 433721, 4774309, 43.1186, 2.18528, 200),
('11217', 'Marcorignan', '31T', 493796, 4785866, 43.2256, 2.9236, 30),
('11218', 'Marquein', '31T', 396704, 4795473, 43.305, 1.72638, 260),
('11219', 'Marsa', '31T', 430769, 4741483, 42.8228, 2.15306, 500),
('11220', 'Marseillette', '31T', 462856, 4783527, 43.2036, 2.54278, 84),
('11221', 'Les Martys', '31T', 443871, 4807320, 43.4167, 2.30667, 780),
('11222', 'Mas-Cabardès', '31T', 448330, 4802225, 43.3711, 2.36223, 330),
('11223', 'Mas-des-Cours', '31T', 452825, 4775415, 43.13, 2.42, 270),
('11224', 'Massac', '31T', 465223, 4751865, 42.9186, 2.57389, 480),
('11225', 'Mas-Saintes-Puelles', '31T', 408949, 4796161, 43.3128, 1.87722, 210),
('11226', 'Mayreville', '31T', 405885, 4788027, 43.2392, 1.84083, 300),
('11227', 'Mayronnes', '31T', 461365, 4767248, 43.0569, 2.52556, 280),
('11228', 'Mazerolles-du-Razès', '31T', 424548, 4776594, 43.1383, 2.07222, 250),
('11229', 'Mazuby', '31T', 420819, 4739245, 42.8017, 2.03167, 920),
('11230', 'Mérial', '31T', 416644, 4737752, 42.7878, 1.98084, 940),
('11231', 'Mézerville', '31T', 401949, 4790396, 43.26, 1.79194, 330),
('11232', 'Miraval-Cabardes', '31T', 446810, 4803563, 43.3831, 2.34334, 400),
('11233', 'Mirepeisset', '31T', 491616, 4792346, 43.2839, 2.89666, 40),
('11234', 'Mireval-Lauragais', '31T', 415469, 4789597, 43.2544, 1.95861, 260),
('11235', 'Missègre', '31T', 448925, 4761561, 43.005, 2.37333, 579),
('11236', 'Molandier', '31T', 395815, 4788883, 43.2456, 1.71667, 230),
('11238', 'Molleville', '31T', 405545, 4795992, 43.3108, 1.83528, 280),
('11239', 'Montauriol', '31T', 405605, 4792196, 43.2767, 1.83667, 260),
('11240', 'Montazels', '31T', 438475, 4755075, 42.9458, 2.24583, 264),
('11241', 'Montbrun-des-Corbières', '31T', 474385, 4782980, 43.1992, 2.68472, 110),
('11242', 'Montclar', '31T', 438800, 4776112, 43.1353, 2.24751, 260),
('11243', 'Montferrand', '31T', 404366, 4801840, 43.3633, 1.81972, 230),
('11244', 'Montfort-sur-Boulzane', '31T', 443275, 4732484, 42.7428, 2.30694, 720),
('11245', 'Montgaillard', '31T', 469345, 4751074, 42.9117, 2.62444, 430),
('11246', 'Montgradail', '31T', 420732, 4774817, 43.1219, 2.02556, 336),
('11247', 'Monthaut', '31T', 423749, 4769816, 43.0772, 2.06333, 480),
('11248', 'Montirat', '31T', 454348, 4780124, 43.1725, 2.43834, 225),
('11249', 'Montjardin', '31T', 420711, 4759392, 42.9831, 2.0275, 420),
('11250', 'Montjoi', '31T', 457861, 4760328, 42.9944, 2.48306, 380),
('11251', 'Montlaur', '31T', 464054, 4775438, 43.1308, 2.55805, 197),
('11252', 'Montmaur', '31T', 406504, 4805081, 43.3928, 1.84555, 269),
('11253', 'Montolieu', '31T', 436248, 4795541, 43.31, 2.21388, 188),
('11254', 'Montréal', '31T', 430107, 4783261, 43.1989, 2.13973, 243),
('11255', 'Montredon-des-Corbières', '31T', 494199, 4782133, 43.1919, 2.92861, 40),
('11256', 'Montséret', '31T', 484675, 4772338, 43.1036, 2.81167, 80),
('11257', 'Monze', '31T', 456233, 4778384, 43.1569, 2.46166, 160),
('11258', 'Moussan', '31T', 495940, 4786697, 43.2331, 2.95, 50),
('11259', 'Moussoulens', '31T', 437456, 4792136, 43.2794, 2.22917, 170),
('11260', 'Mouthoumet', '31T', 461327, 4756513, 42.9603, 2.52584, 538),
('11261', 'Moux', '31T', 471759, 4781048, 43.1817, 2.65249, 90),
('11262', 'Narbonne', '31T', 500429, 4781390, 43.1853, 3.00528, 13),
('11263', 'Nébias', '31T', 427699, 4749782, 42.8972, 2.11444, 580),
('11264', 'Névian', '31T', 492238, 4784541, 43.2136, 2.90444, 26),
('11265', 'Niort-de-Sault', '31T', 418367, 4739336, 42.8022, 2.00167, 860),
('11266', 'Port-la-Nouvelle', '31T', 503734, 4763407, 43.0233, 3.04583, 2),
('11267', 'Ornaisons', '31T', 486839, 4780971, 43.1814, 2.83805, 31),
('11268', 'Orsans', '31T', 417123, 4779149, 43.1606, 1.98055, 350),
('11269', 'Ouveillan', '31T', 497724, 4793020, 43.29, 2.97194, 28),
('11270', 'Padern', '31T', 471932, 4746097, 42.8669, 2.65638, 200),
('11271', 'Palairac', '31T', 472336, 4756213, 42.9581, 2.66083, 364),
('11272', 'Palaja', '31T', 449900, 4780217, 43.1731, 2.38361, 160),
('11273', 'Paraza', '31T', 486381, 4788714, 43.2511, 2.83223, 40),
('11274', 'Pauligne', '31T', 431659, 4769208, 43.0725, 2.16056, 240),
('11275', 'Payra-sur-l''Hers', '31T', 407168, 4791094, 43.2669, 1.85611, 244),
('11276', 'Paziols', '31T', 477058, 4745245, 42.8594, 2.71917, 140),
('11277', 'Pécharic-et-le-Py', '31T', 405377, 4782326, 43.1878, 1.83555, 330),
('11278', 'Pech-Luna', '31T', 406074, 4785402, 43.2156, 1.84361, 300),
('11279', 'Pennautier', '31T', 444637, 4788279, 43.2453, 2.31805, 110),
('11280', 'Pépieux', '31T', 474021, 4794026, 43.2986, 2.67972, 80),
('11281', 'Pexiora', '31T', 421733, 4791096, 43.2686, 2.03556, 140),
('11282', 'Peyrefitte-du-Razès', '31T', 420427, 4768065, 43.0611, 2.02278, 370),
('11283', 'Peyrefitte-sur-l''Hers', '31T', 404907, 4789027, 43.2481, 1.82862, 300),
('11284', 'Peyrens', '31T', 415752, 4801504, 43.3617, 1.96027, 180),
('11285', 'Peyriac-de-Mer', '31T', 496631, 4770656, 43.0886, 2.95861, 10),
('11286', 'Peyriac-Minervois', '31T', 464713, 4793420, 43.2928, 2.565, 122),
('11287', 'Peyrolles', '31T', 444313, 4756722, 42.9611, 2.31723, 358),
('11288', 'Pezens', '31T', 440520, 4789394, 43.255, 2.26722, 110),
('11289', 'Pieusse', '31T', 437569, 4769984, 43.08, 2.23306, 180),
('11290', 'Plaigne', '31T', 403503, 4780747, 43.1733, 1.81277, 307),
('11291', 'Plavilla', '31T', 411820, 4777765, 43.1475, 1.91555, 340),
('11292', 'La Pomarède', '31T', 415025, 4806326, 43.405, 1.95055, 276),
('11293', 'Pomas', '31T', 442459, 4773365, 43.1108, 2.29278, 150),
('11294', 'Pomy', '31T', 423818, 4767841, 43.0594, 2.06445, 340),
('11295', 'Portel-des-Corbières', '31T', 493779, 4767018, 43.0558, 2.92361, 30),
('11296', 'Pouzols-Minervois', '31T', 485848, 4792818, 43.2881, 2.82556, 60),
('11297', 'Pradelles-Cabardès', '31T', 455042, 4806465, 43.4097, 2.44472, 820),
('11298', 'Pradelles-en-Val', '31T', 460652, 4777093, 43.1456, 2.51611, 200),
('11299', 'Preixan', '31T', 442085, 4777163, 43.145, 2.28778, 160),
('11300', 'Puginier', '31T', 413118, 4803203, 43.3767, 1.9275, 180),
('11301', 'Puichéric', '31T', 469546, 4785869, 43.225, 2.625, 53),
('11302', 'Puilaurens', '31T', 443010, 4738934, 42.8008, 2.30306, 460),
('11303', 'Puivert', '31T', 422354, 4752432, 42.9206, 2.04861, 490),
('11304', 'Quillan', '31T', 433368, 4747226, 42.8747, 2.18417, 289),
('11305', 'Quintillan', '31T', 476418, 4757092, 42.9661, 2.71084, 330),
('11306', 'Quirbajou', '31T', 432887, 4742140, 42.8289, 2.17889, 820),
('11307', 'Raissac-d''Aude', '31T', 490413, 4786301, 43.2294, 2.88194, 20),
('11308', 'Raissac-sur-Lampy', '31T', 431822, 4792283, 43.2803, 2.15972, 150),
('11309', 'Rennes-le-Château', '31T', 439794, 4753059, 42.9278, 2.26222, 500),
('11310', 'Rennes-les-Bains', '31T', 444343, 4752095, 42.9194, 2.31805, 300),
('11311', 'Ribaute', '31T', 470324, 4772817, 43.1075, 2.63528, 100),
('11312', 'Ribouisse', '31T', 410448, 4781671, 43.1825, 1.89805, 311),
('11313', 'Ricaud', '31T', 410080, 4799818, 43.3458, 1.89056, 179),
('11314', 'Rieux-en-Val', '31T', 461810, 4770114, 43.0828, 2.53083, 190),
('11315', 'Rieux-Minervois', '31T', 466352, 4792332, 43.2831, 2.58527, 112),
('11316', 'Rivel', '31T', 418485, 4755068, 42.9439, 2.00083, 410),
('11317', 'Rodome', '31T', 423927, 4738840, 42.7983, 2.06972, 920),
('11318', 'Roquecourbe-Minervois', '31T', 471551, 4785244, 43.2194, 2.64972, 60),
('11319', 'Roquefère', '31T', 449637, 4802462, 43.3733, 2.37834, 330),
('11320', 'Roquefeuil', '31T', 417981, 4741315, 42.82, 1.99666, 936),
('11321', 'Roquefort-de-Sault', '31T', 434002, 4732875, 42.7456, 2.19361, 980),
('11322', 'Roquefort-des-Corbières', '31T', 496264, 4759798, 42.9908, 2.95417, 60),
('11323', 'Roquetaillade', '31T', 434606, 4760479, 42.9942, 2.19778, 340),
('11324', 'Roubia', '31T', 483809, 4788504, 43.2492, 2.80055, 40),
('11325', 'Rouffiac-d''Aude', '31T', 442949, 4775243, 43.1278, 2.29861, 140),
('11326', 'Rouffiac-des-Corbières', '31T', 463477, 4747648, 42.8806, 2.55278, 370),
('11327', 'Roullens', '31T', 440975, 4779486, 43.1658, 2.27389, 220),
('11328', 'Routier', '31T', 428963, 4773122, 43.1075, 2.12695, 260),
('11329', 'Rouvenac', '31T', 430173, 4754353, 42.9386, 2.14417, 310),
('11330', 'Rustiques', '31T', 457200, 4784949, 43.2161, 2.47305, 120),
('11331', 'Saint-Amans', '31T', 409611, 4786618, 43.2269, 1.88695, 320),
('11332', 'Saint-André-de-Roquelongue', '31T', 486644, 4773599, 43.115, 2.83583, 60),
('11333', 'Saint-Benoît', '31T', 423676, 4763214, 43.0178, 2.06334, 450),
('11334', 'Sainte-Camelle', '31T', 402819, 4791310, 43.2683, 1.8025, 250),
('11335', 'Sainte-Colombe-sur-Guette', '31T', 437303, 4733307, 42.7497, 2.23389, 612),
('11336', 'Sainte-Colombe-sur-l''Hers', '31T', 415935, 4755993, 42.9519, 1.96944, 410),
('11337', 'Saint-Couat-d''Aude', '31T', 469851, 4783493, 43.2036, 2.62888, 57),
('11338', 'Saint-Couat-du-Razès', '31T', 427437, 4761446, 43.0022, 2.10972, 358),
('11339', 'Saint-Denis', '31T', 436706, 4801090, 43.36, 2.21889, 530),
('11340', 'Sainte-Eulalie', '31T', 436003, 4788663, 43.2481, 2.21166, 120),
('11341', 'Saint-Ferriol', '31T', 436541, 4749294, 42.8936, 2.22278, 420),
('11342', 'Saint-Frichoux', '31T', 463607, 4788983, 43.2528, 2.55166, 60),
('11343', 'Saint-Gaudéric', '31T', 414323, 4775605, 43.1283, 1.94667, 386),
('11344', 'Saint-Hilaire', '31T', 443912, 4771441, 43.0936, 2.31083, 180),
('11345', 'Saint-Jean-de-Barrou', '31T', 487040, 4756169, 42.9581, 2.84111, 136),
('11346', 'Saint-Jean-de-Paracol', '31T', 427766, 4753915, 42.9344, 2.11473, 370),
('11347', 'Saint-Julia-de-Bec', '31T', 438354, 4746593, 42.8694, 2.24528, 464),
('11348', 'Saint-Julien-de-Briola', '31T', 414163, 4779031, 43.1592, 1.94417, 370),
('11350', 'Saint-Just-et-le-Bézu', '31T', 440110, 4747688, 42.8794, 2.26666, 560),
('11351', 'Saint-Laurent-de-la-Cabrerisse', '31T', 475649, 4770390, 43.0858, 2.70083, 117),
('11352', 'Saint-Louis-et-Parahou', '31T', 444256, 4744106, 42.8475, 2.31778, 602),
('11353', 'Saint-Marcel-sur-Aude', '31T', 493798, 4787871, 43.2436, 2.92361, 20),
('11354', 'Saint-Martin-des-Puits', '31T', 464862, 4765532, 43.0417, 2.56861, 200),
('11355', 'Saint-Martin-de-Villereglan', '31T', 435742, 4772963, 43.1067, 2.21027, 180),
('11356', 'Saint-Martin-Lalande', '31T', 420509, 4794381, 43.2981, 2.02, 160),
('11357', 'Saint-Martin-le-Vieil', '31T', 430577, 4793930, 43.295, 2.14417, 160),
('11358', 'Saint-Martin-Lys', '31T', 436951, 4742102, 42.8289, 2.22861, 380),
('11359', 'Saint-Michel-de-Lanès', '31T', 399486, 4797622, 43.3247, 1.76028, 210),
('11360', 'Saint-Nazaire-d''Aude', '31T', 491476, 4787997, 43.2447, 2.895, 25),
('11361', 'Saint-Papoul', '31T', 421859, 4798098, 43.3317, 2.03612, 170),
('11362', 'Saint-Paulet', '31T', 409020, 4806435, 43.4053, 1.87639, 250),
('11363', 'Saint-Pierre-des-Champs', '31T', 467881, 4767492, 43.0594, 2.60556, 150),
('11364', 'Saint-Polycarpe', '31T', 442056, 4765780, 43.0425, 2.28861, 230),
('11365', 'Saint-Sernin', '31T', 402717, 4787331, 43.2325, 1.80194, 330),
('11366', 'Sainte-Valière', '31T', 487129, 4791119, 43.2728, 2.84139, 84),
('11367', 'Saissac', '31T', 432540, 4800976, 43.3586, 2.1675, 450),
('11368', 'Sallèles-Cabardès', '31T', 452862, 4797009, 43.3244, 2.41861, 270),
('11369', 'Sallèles-d''Aude', '31T', 495626, 4789443, 43.2578, 2.94611, 15),
('11370', 'Salles-d''Aude', '31T', 509653, 4787350, 43.2389, 3.11889, 30),
('11371', 'Salles-sur-l''Hers', '31T', 401551, 4794012, 43.2925, 1.78639, 220),
('11372', 'Salsigne', '31T', 447823, 4797755, 43.3308, 2.35639, 283),
('11373', 'Salvezines', '31T', 443264, 4736711, 42.7808, 2.30639, 540),
('11374', 'Salza', '31T', 458850, 4759180, 42.9842, 2.49527, 540),
('11375', 'Seignalens', '31T', 416249, 4772310, 43.0989, 1.97084, 370),
('11376', 'La Serpent', '31T', 433265, 4757654, 42.9686, 2.18167, 419),
('11377', 'Serres', '31T', 444778, 4755361, 42.9489, 2.32306, 271),
('11378', 'Serviès-en-Val', '31T', 461001, 4770952, 43.0903, 2.52083, 210),
('11379', 'Sigean', '31T', 498325, 4764054, 43.0292, 2.97944, 10),
('11380', 'Sonnac-sur-l''Hers', '31T', 417772, 4761710, 43.0036, 1.99112, 380),
('11381', 'Sougraigne', '31T', 447366, 4750158, 42.9022, 2.35527, 398),
('11382', 'Souilhanels', '31T', 412336, 4800189, 43.3494, 1.91833, 170),
('11383', 'Souilhe', '31T', 412007, 4802569, 43.3708, 1.91389, 203),
('11384', 'Soulatgé', '31T', 459416, 4747454, 42.8786, 2.50307, 400),
('11385', 'Soupex', '31T', 410622, 4803359, 43.3778, 1.89667, 190),
('11386', 'Talairan', '31T', 472650, 4766730, 43.0528, 2.66416, 180),
('11387', 'Taurize', '31T', 459704, 4769509, 43.0772, 2.505, 220),
('11388', 'Termes', '31T', 464387, 4761216, 43.0028, 2.56306, 338),
('11389', 'Terroles', '31T', 446009, 4759239, 42.9839, 2.33778, 600),
('11390', 'Thézan-des-Corbières', '31T', 481330, 4772408, 43.1042, 2.77056, 110),
('11391', 'La Tourette-Cabardès', '31T', 445908, 4803324, 43.3808, 2.33222, 480),
('11392', 'Tournissan', '31T', 472732, 4770123, 43.0833, 2.665, 140),
('11393', 'Tourouzelle', '31T', 477407, 4789078, 43.2542, 2.72166, 70),
('11394', 'Tourreilles', '31T', 432419, 4763740, 43.0233, 2.17056, 330),
('11395', 'Trassanel', '31T', 454388, 4799467, 43.3467, 2.43723, 440),
('11396', 'Trausse', '31T', 464499, 4795673, 43.3131, 2.56222, 150),
('11397', 'Trèbes', '31T', 454737, 4784317, 43.2103, 2.44278, 90),
('11398', 'Treilles', '31T', 495512, 4752457, 42.9247, 2.94501, 130),
('11399', 'Tréville', '31T', 415109, 4804072, 43.3847, 1.95194, 253),
('11400', 'Tréziers', '31T', 414857, 4767669, 43.0569, 1.95445, 380),
('11401', 'Tuchan', '31T', 477069, 4748545, 42.8892, 2.71917, 170),
('11402', 'Valmigère', '31T', 449087, 4758906, 42.9811, 2.37556, 660),
('11404', 'Ventenac-Cabardès', '31T', 441906, 4790615, 43.2661, 2.28417, 120),
('11405', 'Ventenac-en-Minervois', '31T', 488680, 4788618, 43.2503, 2.86055, 30),
('11406', 'Véraza', '31T', 443406, 4759445, 42.9856, 2.30583, 440),
('11407', 'Verdun-en-Lauragais', '31T', 423748, 4801840, 43.3656, 2.05889, 290),
('11408', 'Verzeille', '31T', 445275, 4774977, 43.1256, 2.32723, 150),
('11409', 'Vignevieille', '31T', 461310, 4761634, 43.0064, 2.52528, 250),
('11410', 'Villalier', '31T', 452270, 4789640, 43.2581, 2.41195, 110),
('11411', 'Villanière', '31T', 448170, 4798987, 43.3419, 2.36056, 370),
('11412', 'Villardebelle', '31T', 450502, 4763492, 43.0225, 2.3925, 540),
('11413', 'Villardonnel', '31T', 444179, 4798340, 43.3358, 2.31139, 360),
('11414', 'Villar-en-Val', '31T', 455955, 4770334, 43.0844, 2.45888, 271),
('11415', 'Villar-Saint-Anselme', '31T', 442881, 4767038, 43.0539, 2.29861, 260),
('11416', 'Villarzel-Cabardès', '31T', 456095, 4792020, 43.2797, 2.45888, 189),
('11417', 'Villarzel-du-Razès', '31T', 435552, 4776697, 43.1403, 2.2075, 260),
('11418', 'Villasavary', '31T', 422145, 4785784, 43.2208, 2.04138, 200),
('11419', 'Villautou', '31T', 404996, 4779276, 43.1603, 1.83139, 330),
('11420', 'Villebazy', '31T', 445018, 4768316, 43.0656, 2.32473, 250),
('11421', 'Villedaigne', '31T', 488787, 4784916, 43.2169, 2.86194, 24),
('11422', 'Villedubert', '31T', 452970, 4786581, 43.2306, 2.42083, 120),
('11423', 'Villefloure', '31T', 449635, 4774851, 43.1247, 2.38083, 260),
('11424', 'Villefort', '31T', 421218, 4756178, 42.9542, 2.03417, 410),
('11425', 'Villegailhenc', '31T', 447567, 4790909, 43.2692, 2.35389, 129),
('11426', 'Villegly', '31T', 454432, 4792710, 43.2858, 2.43833, 140),
('11427', 'Villelongue-d''Aude', '31T', 426368, 4767319, 43.055, 2.09583, 310),
('11428', 'Villemagne', '31T', 427970, 4800992, 43.3583, 2.11111, 410),
('11429', 'Villemoustaussou', '31T', 448410, 4789082, 43.2528, 2.36445, 110),
('11430', 'Villeneuve-la-Comptal', '31T', 412605, 4793090, 43.2856, 1.92278, 210),
('11431', 'Villeneuve-les-Corbières', '31T', 481835, 4758309, 42.9772, 2.77722, 140),
('11432', 'Villeneuve-lès-Montréal', '31T', 427670, 4781250, 43.1806, 2.11, 187),
('11433', 'Villeneuve-Minervois', '31T', 456369, 4796060, 43.3161, 2.46194, 200),
('11434', 'Villepinte', '31T', 426011, 4792652, 43.2831, 2.08806, 140),
('11435', 'Villerouge-Termenès', '31T', 469620, 4761807, 43.0083, 2.62723, 310),
('11436', 'Villesèque-des-Corbières', '31T', 487890, 4762676, 43.0167, 2.85139, 130),
('11437', 'Villesèquelande', '31T', 437661, 4787506, 43.2378, 2.23222, 120),
('11438', 'Villesiscle', '31T', 426574, 4786414, 43.2269, 2.09583, 160),
('11439', 'Villespy', '31T', 426777, 4796778, 43.3203, 2.09695, 180),
('11440', 'Villetritouls', '31T', 458373, 4769980, 43.0814, 2.48862, 240),
('11441', 'Vinassan', '31T', 506138, 4783490, 43.2042, 3.07556, 24),
('12001', 'Agen-d''Aveyron', '31T', 474543, 4911600, 44.3572, 2.68056, 580),
('12002', 'Aguessac', '31T', 507930, 4889217, 44.1561, 3.09917, 380),
('12003', 'Les Albres', '31T', 434411, 4931783, 44.5364, 2.17444, 495),
('12004', 'Almont-les-Junies', '31T', 443849, 4938483, 44.5975, 2.2925, 444),
('12005', 'Alpuech', '31T', 488239, 4956640, 44.7631, 2.85139, 1080),
('12006', 'Alrance', '31T', 474601, 4886577, 44.1319, 2.6825, 760),
('12007', 'Ambeyrac', '31T', 416123, 4929154, 44.5108, 1.94472, 180),
('12008', 'Anglars-Saint-Félix', '31T', 437821, 4919036, 44.4219, 2.21889, 470),
('12009', 'Arnac-sur-Dourdou', '31T', 494452, 4841672, 43.7281, 2.93111, 539),
('12010', 'Arques', '31T', 484028, 4907034, 44.3164, 2.79972, 760),
('12011', 'Arvieu', '31T', 472850, 4893001, 44.1897, 2.66028, 720),
('12012', 'Asprières', '31T', 432192, 4932762, 44.545, 2.14639, 383),
('12013', 'Aubin', '31T', 440185, 4930894, 44.5289, 2.24722, 240),
('12014', 'Aurelle-Verlac', '31T', 500662, 4927903, 44.5044, 3.00833, 909),
('12015', 'Auriac-Lagast', '31T', 466521, 4888155, 44.1458, 2.58139, 700),
('12016', 'Auzits', '31T', 446077, 4927941, 44.5028, 2.32167, 400),
('12017', 'Ayssènes', '31T', 482159, 4879487, 44.0683, 2.77722, 380),
('12018', 'Balaguier-d''Olt', '31T', 418330, 4930792, 44.5258, 1.97222, 200),
('12019', 'Balaguier-sur-Rance', '31T', 465912, 4860514, 43.8969, 2.57556, 280),
('12020', 'Balsac', '31T', 455761, 4916760, 44.4028, 2.44444, 580),
('12021', 'La Bastide-l''Évêque', '31T', 431090, 4909939, 44.3394, 2.13555, 478),
('12022', 'La Bastide-Pradines', '31T', 503741, 4872213, 44.0031, 3.04666, 540),
('12023', 'La Bastide-Solages', '31T', 461816, 4865967, 43.9458, 2.52417, 420),
('12024', 'Belcastel', '31T', 447055, 4915220, 44.3883, 2.33527, 410),
('12025', 'Belmont-sur-Rance', '31T', 480231, 4851725, 43.8183, 2.75417, 440),
('12026', 'Bertholène', '31T', 482723, 4915985, 44.3969, 2.78305, 600),
('12027', 'Bessuéjouls', '31T', 478080, 4929760, 44.5208, 2.72417, 340),
('12028', 'Boisse-Penchot', '31T', 437095, 4937712, 44.59, 2.2075, 200),
('12029', 'Bor-et-Bar', '31T', 426461, 4894066, 44.1961, 2.07972, 300),
('12030', 'Bouillac', '31T', 433530, 4936297, 44.5769, 2.16277, 200),
('12031', 'Bournazel', '31T', 444271, 4923421, 44.4619, 2.29944, 510),
('12032', 'Boussac', '31T', 449350, 4903014, 44.2786, 2.36527, 637),
('12033', 'Bozouls', '31T', 477818, 4924115, 44.47, 2.72112, 544),
('12034', 'Brandonnet', '31T', 431145, 4915153, 44.3864, 2.13555, 480),
('12035', 'Brasc', '31T', 465669, 4869617, 43.9789, 2.57195, 590),
('12036', 'Brommat', '31T', 475210, 4964268, 44.8314, 2.68639, 660),
('12037', 'Broquiès', '31T', 475571, 4872504, 44.0053, 2.69527, 387),
('12038', 'Brousse-le-Château', '31T', 470045, 4871663, 43.9975, 2.62639, 240),
('12039', 'Brusque', '31T', 495976, 4845990, 43.7669, 2.95, 460),
('12040', 'Buzeins', '31T', 497743, 4913247, 44.3725, 2.97167, 743),
('12041', 'Cabanès', '31T', 444407, 4892532, 44.1839, 2.30445, 500),
('12042', 'Calmels-et-le-Viala', '31T', 479960, 4865825, 43.9453, 2.75027, 351),
('12043', 'Calmont', '31T', 460945, 4899572, 44.2483, 2.51083, 580),
('12044', 'Camarès', '31T', 490239, 4851980, 43.8208, 2.87862, 400),
('12045', 'Camboulazet', '31T', 455497, 4897385, 44.2283, 2.44278, 630),
('12046', 'Camjac', '31T', 450399, 4892145, 44.1808, 2.37945, 525),
('12047', 'Campagnac', '31T', 506966, 4918187, 44.4169, 3.0875, 720),
('12048', 'Campouriez', '31T', 468899, 4948620, 44.6903, 2.6075, 520),
('12049', 'Campuac', '31T', 467400, 4935174, 44.5692, 2.58944, 650),
('12050', 'Canet-de-Salars', '31T', 480391, 4898035, 44.2353, 2.75445, 860),
('12051', 'Cantoin', '31T', 485466, 4965008, 44.8383, 2.81611, 940),
('12052', 'Capdenac-Gare', '31T', 426910, 4935967, 44.5733, 2.07945, 180),
('12053', 'La Capelle-Balaguier', '31T', 415245, 4921049, 44.4378, 1.935, 381),
('12054', 'La Capelle-Bleys', '31T', 434915, 4904870, 44.2942, 2.18416, 613),
('12055', 'La Capelle-Bonance', '31T', 501127, 4920775, 44.4403, 3.01416, 640),
('12056', 'Baraqueville', '31T', 453773, 4901500, 44.2653, 2.42083, 780),
('12057', 'Cassagnes-Bégonhès', '31T', 462426, 4890831, 44.1697, 2.53, 547),
('12058', 'Cassuéjouls', '31T', 485702, 4952603, 44.7267, 2.81944, 920),
('12059', 'Castanet', '31T', 443498, 4902970, 44.2778, 2.29195, 660),
('12060', 'Castelmary', '31T', 439720, 4892358, 44.1819, 2.24583, 440),
('12061', 'Castelnau-de-Mandailles', '31T', 491040, 4931426, 44.5361, 2.88722, 542),
('12062', 'Castelnau-Pégayrols', '31T', 494689, 4886314, 44.13, 2.93361, 752),
('12063', 'La Cavalerie', '31T', 512715, 4872872, 44.0089, 3.15862, 801),
('12064', 'Le Cayrol', '31T', 483529, 4937057, 44.5867, 2.7925, 860),
('12065', 'Centrès', '31T', 452671, 4890123, 44.1628, 2.40805, 540),
('12066', 'Clairvaux-d''Aveyron', '31T', 453015, 4919402, 44.4264, 2.40972, 340),
('12067', 'Le Clapier', '31T', 513802, 4853160, 43.8314, 3.17166, 639),
('12068', 'Colombiès', '31T', 447127, 4910406, 44.345, 2.33667, 680),
('12069', 'Combret', '31T', 473741, 4854463, 43.8428, 2.67334, 400),
('12070', 'Compeyre', '31T', 508173, 4889896, 44.1622, 3.10222, 460),
('12071', 'Compolibat', '31T', 435914, 4914024, 44.3767, 2.19556, 377),
('12072', 'Comprégnac', '31T', 497198, 4881160, 44.0836, 2.965, 340),
('12073', 'Comps-la-Grand-Ville', '31T', 465482, 4897664, 44.2314, 2.56778, 700),
('12074', 'Condom-d''Aubrac', '31T', 489353, 4938958, 44.6039, 2.86583, 940),
('12075', 'Connac', '31T', 468052, 4874141, 44.0197, 2.60139, 520),
('12076', 'Conques', '31T', 452318, 4938816, 44.6011, 2.39917, 320),
('12077', 'Cornus', '31T', 514321, 4860997, 43.9019, 3.17833, 640),
('12078', 'Les Costes-Gozon', '31T', 484126, 4873805, 44.0172, 2.80195, 660),
('12079', 'Coubisou', '31T', 478643, 4933368, 44.5533, 2.73111, 400),
('12080', 'Coupiac', '31T', 466301, 4866961, 43.955, 2.57999, 375),
('12081', 'Coussergues', '31T', 490335, 4917666, 44.4122, 2.87861, 587),
('12082', 'La Couvertoirade', '31T', 525425, 4862327, 43.9136, 3.31666, 776),
('12083', 'Cransac', '31T', 442919, 4930499, 44.5256, 2.28167, 280),
('12084', 'Creissels', '31T', 505070, 4881223, 44.0842, 3.06333, 374),
('12085', 'Crespin', '31T', 442584, 4889709, 44.1583, 2.28195, 480),
('12086', 'La Cresse', '31T', 510369, 4891565, 44.1772, 3.12972, 420),
('12087', 'Cruéjouls', '31T', 488440, 4921156, 44.4436, 2.85473, 570),
('12088', 'Curières', '31T', 489428, 4944450, 44.6533, 2.86667, 960),
('12089', 'Decazeville', '31T', 440679, 4934191, 44.5586, 2.25305, 220),
('12090', 'Druelle', '31T', 460333, 4911886, 44.3592, 2.50223, 580),
('12091', 'Drulhe', '31T', 430770, 4923612, 44.4625, 2.12972, 490),
('12092', 'Durenque', '31T', 469212, 4884132, 44.1097, 2.61528, 720),
('12093', 'Le Fel', '31T', 462827, 4945381, 44.6608, 2.53111, 500),
('12094', 'Entraygues-sur-Truyère', '31T', 465748, 4943792, 44.6467, 2.56806, 260),
('12095', 'Escandolières', '31T', 447416, 4924320, 44.4703, 2.33888, 520),
('12096', 'Espalion', '31T', 479199, 4927720, 44.5025, 2.73833, 340);
INSERT INTO `ods_communes` (`oc_code_insee`, `oc_nom`, `oc_secteur`, `oc_x_utm`, `oc_y_utm`, `oc_latitude`, `oc_longitude`, `oc_altitude`) VALUES
('12097', 'Espeyrac', '31T', 461188, 4940145, 44.6136, 2.51083, 380),
('12098', 'Estaing', '31T', 473968, 4933725, 44.5564, 2.67223, 340),
('12099', 'Fayet', '31T', 495799, 4850124, 43.8042, 2.94777, 440),
('12100', 'Firmi', '31T', 445250, 4932083, 44.54, 2.31083, 260),
('12101', 'Flagnac', '31T', 440462, 4939408, 44.6056, 2.24972, 220),
('12102', 'Flavin', '31T', 468308, 4904037, 44.2889, 2.60278, 640),
('12103', 'Florentin-la-Capelle', '31T', 470849, 4941884, 44.6297, 2.63249, 660),
('12104', 'Foissac', '31T', 420804, 4929126, 44.5111, 2.00361, 340),
('12105', 'La Fouillade', '31T', 423397, 4897866, 44.23, 2.04083, 420),
('12106', 'Gabriac', '31T', 483447, 4922123, 44.4522, 2.79195, 560),
('12107', 'Gaillac-d''Aveyron', '31T', 494355, 4911182, 44.3539, 2.92917, 620),
('12108', 'Galgan', '31T', 434792, 4927983, 44.5022, 2.17972, 472),
('12109', 'Gissac', '31T', 494418, 4854968, 43.8478, 2.93055, 588),
('12110', 'Golinhac', '31T', 467046, 4939187, 44.6053, 2.58472, 630),
('12111', 'Goutrens', '31T', 449823, 4921216, 44.4425, 2.36944, 532),
('12112', 'Graissac', '31T', 482656, 4957085, 44.7669, 2.78083, 920),
('12113', 'Gramond', '31T', 449383, 4901440, 44.2644, 2.36584, 620),
('12114', 'Grand-Vabre', '31T', 449192, 4942203, 44.6314, 2.35945, 220),
('12115', 'L''Hospitalet-du-Larzac', '31T', 515752, 4868991, 43.9739, 3.19639, 758),
('12116', 'Huparlac', '31T', 481299, 4951257, 44.7144, 2.76389, 857),
('12117', 'Lacalm', '31T', 490901, 4957839, 44.7739, 2.885, 1120),
('12118', 'Lacroix-Barrez', '31T', 471408, 4958606, 44.7803, 2.63861, 772),
('12119', 'Laguiole', '31T', 487937, 4947908, 44.6844, 2.84778, 1034),
('12120', 'Laissac', '31T', 485883, 4914157, 44.3806, 2.82278, 601),
('12121', 'Lanuéjouls', '31T', 433423, 4919326, 44.4242, 2.16361, 517),
('12122', 'Lapanouse-de-Cernon', '31T', 507795, 4871476, 43.9964, 3.09722, 540),
('12123', 'Lapanouse', '31T', 502569, 4909082, 44.335, 3.03222, 658),
('12124', 'Lassouts', '31T', 489133, 4925968, 44.4869, 2.86333, 660),
('12125', 'Laval-Roquecezière', '31T', 469297, 4849669, 43.7994, 2.61833, 860),
('12126', 'Lavernhe', '31T', 500975, 4907663, 44.3222, 3.01223, 698),
('12127', 'Lédergues', '31T', 455303, 4881959, 44.0894, 2.44166, 490),
('12128', 'Lescure-Jaoul', '31T', 431784, 4897897, 44.2311, 2.14583, 500),
('12129', 'Lestrade-et-Thouels', '31T', 472746, 4878655, 44.0606, 2.65972, 740),
('12130', 'Livinhac-le-Haut', '31T', 438840, 4938003, 44.5928, 2.22945, 200),
('12131', 'La Loubière', '31T', 473574, 4912930, 44.3692, 2.66833, 560),
('12133', 'Luc-la-Primaube', '31T', 462849, 4906780, 44.3133, 2.53416, 680),
('12134', 'Lugan', '31T', 441043, 4925702, 44.4822, 2.25861, 460),
('12135', 'Lunac', '31T', 429126, 4898234, 44.2339, 2.11251, 469),
('12136', 'Maleville', '31T', 428302, 4916202, 44.3956, 2.09972, 460),
('12137', 'Manhac', '31T', 457645, 4900148, 44.2533, 2.46945, 710),
('12138', 'Marcillac-Vallon', '31T', 457561, 4924801, 44.4753, 2.46639, 290),
('12139', 'Marnhagues-et-Latour', '31T', 504797, 4859256, 43.8864, 3.05972, 424),
('12140', 'Martiel', '31T', 414183, 4914274, 44.3767, 1.92278, 380),
('12141', 'Martrin', '31T', 469369, 4865187, 43.9392, 2.61833, 540),
('12142', 'Mayran', '31T', 449201, 4915173, 44.3881, 2.36222, 618),
('12143', 'Mélagues', '31T', 501499, 4842934, 43.7394, 3.01862, 685),
('12144', 'Meljac', '31T', 454785, 4887454, 44.1389, 2.43472, 560),
('12145', 'Millau', '31T', 506581, 4882829, 44.0986, 3.08222, 366),
('12146', 'Le Monastère', '31T', 466366, 4909970, 44.3422, 2.57806, 530),
('12147', 'Montagnol', '31T', 500916, 4854040, 43.8394, 3.01139, 656),
('12148', 'Montbazens', '31T', 438741, 4925168, 44.4772, 2.22972, 480),
('12149', 'Montclar', '31T', 471657, 4868355, 43.9678, 2.64667, 640),
('12150', 'Monteils', '31T', 419875, 4901920, 44.2661, 1.99612, 237),
('12151', 'Montézic', '31T', 471681, 4950675, 44.7089, 2.6425, 658),
('12152', 'Montfranc', '31T', 465390, 4854655, 43.8442, 2.56944, 820),
('12153', 'Montjaux', '31T', 492441, 4883293, 44.1028, 2.90555, 680),
('12154', 'Montlaur', '31T', 486611, 4858589, 43.8803, 2.83334, 360),
('12155', 'Fondamente', '31T', 509307, 4857225, 43.8681, 3.11583, 430),
('12156', 'Montpeyroux', '31T', 486188, 4943283, 44.6428, 2.82583, 960),
('12157', 'Montrozier', '31T', 479961, 4916949, 44.4056, 2.74834, 560),
('12158', 'Montsalès', '31T', 417599, 4927129, 44.4928, 1.96361, 310),
('12159', 'Morlhon-le-Haut', '31T', 424074, 4908412, 44.325, 2.04777, 520),
('12160', 'Mostuéjouls', '31T', 514670, 4894474, 44.2033, 3.1836, 480),
('12161', 'Mouret', '31T', 461412, 4929653, 44.5192, 2.51444, 320),
('12162', 'Moyrazès', '31T', 455273, 4910068, 44.3425, 2.43889, 727),
('12163', 'Murasson', '31T', 481128, 4845306, 43.7606, 2.76555, 600),
('12164', 'Mur-de-Barrez', '31T', 473263, 4965819, 44.8453, 2.66167, 780),
('12165', 'Muret-le-Château', '31T', 466232, 4926849, 44.4942, 2.57528, 400),
('12166', 'Murols', '31T', 466669, 4955759, 44.7544, 2.57889, 600),
('12167', 'Najac', '31T', 417813, 4896669, 44.2186, 1.97111, 260),
('12168', 'Nant', '31T', 524088, 4874323, 44.0217, 3.30056, 498),
('12169', 'Naucelle', '31T', 447328, 4894082, 44.1981, 2.34083, 482),
('12170', 'Naussac', '31T', 428058, 4930122, 44.5208, 2.09472, 340),
('12171', 'Nauviale', '31T', 454439, 4930099, 44.5228, 2.42667, 269),
('12172', 'Le Nayrac', '31T', 473310, 4940084, 44.6136, 2.66361, 700),
('12173', 'Noailhac', '31T', 450437, 4935066, 44.5672, 2.37583, 540),
('12174', 'Olemps', '31T', 464110, 4910445, 44.3464, 2.54972, 580),
('12175', 'Ols-et-Rinhodes', '31T', 417365, 4924355, 44.4678, 1.96111, 350),
('12176', 'Onet-le-Château', '31T', 463252, 4915294, 44.39, 2.53861, 620),
('12177', 'Palmas', '31T', 487412, 4915573, 44.3933, 2.84194, 640),
('12178', 'Paulhe', '31T', 508419, 4888693, 44.1514, 3.10528, 400),
('12179', 'Peux-et-Couffouleux', '31T', 488620, 4846276, 43.7694, 2.85861, 740),
('12180', 'Peyreleau', '31T', 516606, 4892658, 44.1869, 3.20778, 453),
('12181', 'Peyrusse-le-Roc', '31T', 431561, 4927307, 44.4958, 2.13917, 436),
('12182', 'Pierrefiche', '31T', 495866, 4920931, 44.4417, 2.94805, 624),
('12183', 'Plaisance', '31T', 463766, 4863950, 43.9278, 2.54861, 260),
('12184', 'Pomayrols', '31T', 501988, 4924015, 44.4694, 3.02499, 560),
('12185', 'Pont-de-Salars', '31T', 478521, 4902915, 44.2792, 2.73083, 680),
('12186', 'Pousthomy', '31T', 468836, 4856242, 43.8586, 2.61222, 480),
('12187', 'Prades-d''Aubrac', '31T', 495034, 4930990, 44.5322, 2.9375, 880),
('12188', 'Prades-Salars', '31T', 482883, 4901175, 44.2636, 2.78555, 840),
('12189', 'Pradinas', '31T', 441354, 4898699, 44.2392, 2.26556, 540),
('12190', 'Prévinquières', '31T', 438632, 4913628, 44.3733, 2.22972, 760),
('12191', 'Privezac', '31T', 435376, 4917856, 44.4111, 2.18833, 500),
('12192', 'Mounes-Prohencoux', '31T', 488199, 4848313, 43.7878, 2.85333, 640),
('12193', 'Pruines', '31T', 460603, 4930861, 44.53, 2.50417, 420),
('12194', 'Quins', '31T', 449955, 4897949, 44.2331, 2.37334, 600),
('12195', 'Rebourguil', '31T', 481793, 4859495, 43.8883, 2.77333, 480),
('12196', 'Recoules-Prévinquières', '31T', 497564, 4909668, 44.3403, 2.96944, 640),
('12197', 'Réquista', '31T', 462873, 4875525, 44.0319, 2.53667, 561),
('12198', 'Rieupeyroux', '31T', 439204, 4906124, 44.3058, 2.23777, 700),
('12199', 'Rignac', '31T', 443359, 4917627, 44.4097, 2.28861, 504),
('12200', 'Rivière-sur-Tarn', '31T', 510545, 4892769, 44.1881, 3.13194, 380),
('12201', 'Rodelle', '31T', 470448, 4926396, 44.4903, 2.62833, 460),
('12202', 'Rodez', '31T', 465841, 4911238, 44.3536, 2.57139, 618),
('12203', 'Roquefort-sur-Soulzon', '31T', 499087, 4869281, 43.9767, 2.98862, 550),
('12204', 'La Roque-Sainte-Marguerite', '31T', 517801, 4885811, 44.1253, 3.2225, 420),
('12205', 'La Rouquette', '31T', 418219, 4906044, 44.3031, 1.97473, 280),
('12206', 'Roussennac', '31T', 440528, 4922528, 44.4536, 2.2525, 490),
('12207', 'Rullac-Saint-Cirq', '31T', 459177, 4886222, 44.1281, 2.48972, 620),
('12208', 'Saint-Affrique', '31T', 490840, 4867313, 43.9589, 2.88583, 325),
('12209', 'Saint-Amans-des-Cots', '31T', 473058, 4948447, 44.6889, 2.66, 740),
('12210', 'Saint-André-de-Najac', '31T', 423211, 4893301, 44.1889, 2.03917, 380),
('12211', 'Saint-André-de-Vézines', '31T', 520659, 4888751, 44.1517, 3.25834, 860),
('12212', 'Saint-Beaulize', '31T', 508767, 4860556, 43.8981, 3.10916, 540),
('12213', 'Saint-Beauzély', '31T', 496624, 4890046, 44.1636, 2.95778, 640),
('12214', 'Saint-Chély-d''Aubrac', '31T', 493760, 4937533, 44.5911, 2.92138, 800),
('12215', 'Saint-Christophe-Vallon', '31T', 453206, 4924430, 44.4717, 2.41166, 340),
('12216', 'Saint-Côme-d''Olt', '31T', 485319, 4929154, 44.5156, 2.81528, 360),
('12217', 'Sainte-Croix', '31T', 417617, 4919815, 44.4269, 1.965, 380),
('12218', 'Saint-Cyprien-sur-Dourdou', '31T', 453221, 4932669, 44.5458, 2.41111, 260),
('12219', 'Sainte-Eulalie-d''Olt', '31T', 495603, 4923461, 44.4644, 2.94472, 420),
('12220', 'Sainte-Eulalie-de-Cernon', '31T', 510849, 4870062, 43.9836, 3.13528, 580),
('12221', 'Saint-Félix-de-Lunel', '31T', 463272, 4934487, 44.5628, 2.5375, 580),
('12222', 'Saint-Félix-de-Sorgues', '31T', 498661, 4858884, 43.8831, 2.98333, 420),
('12223', 'Sainte-Geneviève-sur-Argence', '31T', 481173, 4961131, 44.8033, 2.76194, 806),
('12224', 'Saint-Geniez-d''Olt', '31T', 497989, 4923399, 44.4639, 2.97472, 427),
('12225', 'Saint-Georges-de-Luzençon', '31T', 499021, 4878969, 44.0639, 2.98778, 380),
('12226', 'Saint-Hippolyte', '31T', 467743, 4950878, 44.7106, 2.59277, 675),
('12227', 'Saint-Igest', '31T', 427338, 4920965, 44.4383, 2.08695, 387),
('12228', 'Saint-Izaire', '31T', 477342, 4869258, 43.9761, 2.7175, 280),
('12229', 'Saint-Jean-d''Alcapiès', '31T', 498150, 4866566, 43.9522, 2.97694, 500),
('12230', 'Saint-Jean-Delnous', '31T', 459453, 4876965, 44.0447, 2.49388, 510),
('12231', 'Saint-Jean-du-Bruel', '31T', 528807, 4874404, 44.0222, 3.35944, 520),
('12232', 'Saint-Jean-et-Saint-Paul', '31T', 500401, 4863882, 43.9281, 3.005, 600),
('12233', 'Saint-Juéry', '31T', 475600, 4862076, 43.9114, 2.69611, 501),
('12234', 'Sainte-Juliette-sur-Viaur', '31T', 461744, 4895741, 44.2139, 2.52111, 618),
('12235', 'Saint-Just-sur-Viaur', '31T', 449443, 4886197, 44.1272, 2.36806, 320),
('12236', 'Saint-Laurent-de-Lévézou', '31T', 496716, 4894983, 44.2081, 2.9589, 800),
('12237', 'Saint-Laurent-d''Olt', '31T', 508997, 4920998, 44.4422, 3.11306, 505),
('12238', 'Saint-Léons', '31T', 498935, 4895907, 44.2164, 2.98667, 780),
('12239', 'Saint-Martin-de-Lenne', '31T', 497170, 4919758, 44.4311, 2.96444, 623),
('12240', 'Saint-Parthem', '31T', 445596, 4941769, 44.6272, 2.31416, 208),
('12241', 'Sainte-Radegonde', '31T', 470171, 4909181, 44.3353, 2.62583, 660),
('12242', 'Saint-Rémy', '31T', 423329, 4916629, 44.3989, 2.03722, 300),
('12243', 'Saint-Rome-de-Cernon', '31T', 497128, 4873293, 44.0128, 2.96417, 420),
('12244', 'Saint-Rome-de-Tarn', '31T', 492012, 4877524, 44.0508, 2.90028, 394),
('12245', 'Saint-Salvadou', '31T', 428295, 4903458, 44.2808, 2.10139, 460),
('12246', 'Saint-Santin', '31T', 438130, 4944491, 44.6511, 2.21972, 340),
('12247', 'Saint-Saturnin-de-Lenne', '31T', 501282, 4918801, 44.4225, 3.0161, 640),
('12248', 'Saint-Sernin-sur-Rance', '31T', 468068, 4858992, 43.8833, 2.60249, 320),
('12249', 'Saint-Sever-du-Moustier', '31T', 475680, 4847297, 43.7783, 2.69778, 540),
('12250', 'Saint-Symphorien-de-Thénières', '31T', 478667, 4953857, 44.7378, 2.73056, 760),
('12251', 'Saint-Victor-et-Melvieu', '31T', 486538, 4877502, 44.0506, 2.83195, 620),
('12252', 'Salles-Courbatiès', '31T', 426738, 4924644, 44.4714, 2.07889, 280),
('12253', 'Salles-Curan', '31T', 482904, 4892073, 44.1817, 2.78611, 855),
('12254', 'Salles-la-Source', '31T', 461423, 4920304, 44.435, 2.51528, 400),
('12255', 'Salmiech', '31T', 465764, 4892140, 44.1817, 2.57167, 600),
('12256', 'Salvagnac-Cajarc', '31T', 408582, 4925244, 44.4747, 1.85055, 180),
('12257', 'Causse-et-Diège', '31T', 424559, 4931118, 44.5294, 2.05055, 347),
('12258', 'La Salvetat-Peyralès', '31T', 436209, 4896587, 44.2197, 2.20139, 520),
('12259', 'Sanvensa', '31T', 424119, 4904585, 44.2906, 2.04889, 484),
('12260', 'Sauclières', '31T', 529341, 4869531, 43.9783, 3.36583, 740),
('12261', 'Saujac', '31T', 411930, 4927697, 44.4972, 1.89222, 180),
('12262', 'Sauveterre-de-Rouergue', '31T', 445417, 4896504, 44.2197, 2.31667, 479),
('12263', 'Savignac', '31T', 417476, 4912195, 44.3583, 1.96444, 380),
('12264', 'Sébazac-Concourès', '31T', 468193, 4916903, 44.4047, 2.60055, 600),
('12265', 'Sébrazac', '31T', 472630, 4930336, 44.5258, 2.65556, 380),
('12266', 'Ségur', '31T', 486881, 4904343, 44.2922, 2.83556, 780),
('12267', 'La Selve', '31T', 462834, 4884473, 44.1125, 2.53556, 520),
('12268', 'Sénergues', '31T', 459023, 4939387, 44.6067, 2.48361, 506),
('12269', 'La Serre', '31T', 470260, 4860092, 43.8933, 2.62972, 600),
('12270', 'Sévérac-le-Château', '31T', 504873, 4908158, 44.3267, 3.06112, 740),
('12271', 'Sévérac-l''Église', '31T', 487759, 4911962, 44.3608, 2.84639, 630),
('12272', 'Sonnac', '31T', 429283, 4933133, 44.5481, 2.10972, 400),
('12273', 'Soulages-Bonneval', '31T', 483466, 4947054, 44.6767, 2.79139, 860),
('12274', 'Sylvanès', '31T', 496717, 4853579, 43.8353, 2.95916, 460),
('12275', 'Tauriac-de-Camarès', '31T', 502414, 4847501, 43.7806, 3.03, 515),
('12276', 'Tauriac-de-Naucelle', '31T', 444444, 4889076, 44.1528, 2.30527, 480),
('12277', 'Taussac', '31T', 471696, 4964097, 44.8297, 2.64194, 740),
('12278', 'Tayrac', '31T', 438786, 4894588, 44.2019, 2.23388, 500),
('12279', 'La Terrisse', '31T', 485995, 4955904, 44.7564, 2.82305, 960),
('12280', 'Thérondels', '31T', 481116, 4971623, 44.8978, 2.76083, 950),
('12281', 'Toulonjac', '31T', 420561, 4914595, 44.3803, 2.00278, 308),
('12282', 'Tournemire', '31T', 501627, 4868664, 43.9711, 3.02028, 500),
('12283', 'Trémouilles', '31T', 471656, 4899208, 44.2456, 2.645, 811),
('12284', 'Le Truel', '31T', 480463, 4877424, 44.0497, 2.75611, 280),
('12285', 'Vabre-Tizac', '31T', 432073, 4902183, 44.2697, 2.14889, 500),
('12286', 'Vabres-l''Abbaye', '31T', 486893, 4865654, 43.9439, 2.83667, 311),
('12287', 'Vailhourles', '31T', 412705, 4906394, 44.3056, 1.90555, 340),
('12288', 'Valady', '31T', 454408, 4922571, 44.455, 2.42694, 320),
('12289', 'Valzergues', '31T', 438168, 4927641, 44.4994, 2.22222, 442),
('12290', 'Vaureilles', '31T', 436152, 4922539, 44.4533, 2.1975, 500),
('12291', 'Verrières', '31T', 504683, 4894150, 44.2006, 3.05861, 460),
('12292', 'Versols-et-Lapeyre', '31T', 495650, 4860336, 43.8961, 2.94584, 373),
('12293', 'Veyreau', '31T', 523933, 4892403, 44.1844, 3.29944, 880),
('12294', 'Vézins-de-Lévézou', '31T', 496232, 4902788, 44.2783, 2.95278, 931),
('12295', 'Viala-du-Pas-de-Jaux', '31T', 504546, 4867246, 43.9583, 3.05666, 810),
('12296', 'Viala-du-Tarn', '31T', 489656, 4879625, 44.0697, 2.87083, 520),
('12297', 'Le Vibal', '31T', 480528, 4906920, 44.3153, 2.75583, 780),
('12298', 'Villecomtal', '31T', 465376, 4931914, 44.5397, 2.56417, 305),
('12299', 'Villefranche-de-Panat', '31T', 476450, 4881572, 44.0869, 2.70583, 740),
('12300', 'Villefranche-de-Rouergue', '31T', 422957, 4911326, 44.3511, 2.03334, 323),
('12301', 'Villeneuve', '31T', 422714, 4920740, 44.4358, 2.02889, 402),
('12303', 'Vimenet', '31T', 494337, 4916180, 44.3989, 2.92889, 637),
('12304', 'Vitrac-en-Viadène', '31T', 486884, 4960346, 44.7964, 2.83417, 1001),
('12305', 'Viviez', '31T', 437699, 4933972, 44.5564, 2.21556, 200),
('12307', 'Curan', '31T', 488392, 4894035, 44.1994, 2.85473, 960),
('13001', 'Aix-en-Provence', '31T', 697780, 4822306, 43.5275, 5.4475, 200),
('13002', 'Allauch', '31T', 701110, 4801006, 43.335, 5.48083, 191),
('13003', 'Alleins', '31T', 674155, 4840175, 43.6942, 5.16112, 159),
('13004', 'Arles', '31T', 631410, 4837469, 43.6786, 4.63027, 5),
('13005', 'Aubagne', '31T', 708326, 4796531, 43.2928, 5.56806, 110),
('13006', 'Aureille', '31T', 656926, 4841322, 43.7083, 4.94778, 130),
('13007', 'Auriol', '31T', 713306, 4805270, 43.37, 5.63278, 230),
('13008', 'Aurons', '31T', 673970, 4836960, 43.6653, 5.15778, 250),
('13009', 'La Barben', '31T', 675505, 4833110, 43.6303, 5.17556, 100),
('13010', 'Barbentane', '31T', 640318, 4862250, 43.9, 4.74722, 40),
('13011', 'Les Baux-de-Provence', '31T', 644601, 4844872, 43.7428, 4.79583, 190),
('13012', 'Beaurecueil', '31T', 705686, 4820938, 43.5131, 5.54473, 254),
('13013', 'Belcodène', '31T', 709464, 4811450, 43.4267, 5.58778, 390),
('13014', 'Berre-l''Étang', '31T', 675378, 4816497, 43.4808, 5.16862, 1),
('13015', 'Bouc-Bel-Air', '31T', 695102, 4813922, 43.4528, 5.41139, 260),
('13016', 'La Bouilladisse', '31T', 710302, 4807678, 43.3925, 5.59667, 221),
('13017', 'Boulbon', '31T', 635984, 4858086, 43.8633, 4.69222, 20),
('13018', 'Cabannes', '31T', 656751, 4858235, 43.8606, 4.95055, 50),
('13019', 'Cabriès', '31T', 692532, 4812551, 43.4411, 5.37917, 180),
('13020', 'Cadolive', '31T', 706083, 4807949, 43.3961, 5.54473, 360),
('13021', 'Carry-le-Rouet', '31T', 674478, 4799958, 43.3322, 5.15222, 20),
('13022', 'Cassis', '31T', 706238, 4788037, 43.2169, 5.53917, 23),
('13023', 'Ceyreste', '31T', 713784, 4787962, 43.2142, 5.63195, 71),
('13024', 'Charleval', '31T', 680840, 4843131, 43.7192, 5.245, 140),
('13025', 'Châteauneuf-le-Rouge', '31T', 707658, 4818188, 43.4878, 5.56805, 230),
('13026', 'Châteauneuf-les-Martigues', '31T', 675434, 4805694, 43.3836, 5.16584, 40),
('13027', 'Châteaurenard', '31T', 649235, 4860747, 43.8847, 4.85778, 40),
('13028', 'La Ciotat', '31T', 711655, 4783788, 43.1772, 5.60417, 20),
('13029', 'Cornillon-Confoux', '31T', 667444, 4825463, 43.5633, 5.07334, 110),
('13030', 'Cuges-les-Pins', '31T', 719201, 4795052, 43.2764, 5.70139, 191),
('13031', 'La Destrousse', '31T', 711097, 4806004, 43.3772, 5.60583, 193),
('13032', 'Éguilles', '31T', 690152, 4826686, 43.5689, 5.35472, 280),
('13033', 'Ensuès-la-Redonne', '31T', 678576, 4802658, 43.3556, 5.20361, 100),
('13034', 'Eygalières', '31T', 656946, 4847126, 43.7606, 4.94972, 110),
('13035', 'Eyguières', '31T', 663649, 4840187, 43.6967, 5.03083, 100),
('13036', 'Eyragues', '31T', 648050, 4855813, 43.8406, 4.84167, 20),
('13037', 'La Fare-les-Oliviers', '31T', 677194, 4824325, 43.5508, 5.19361, 55),
('13038', 'Fontvieille', '31T', 637682, 4842904, 43.7264, 4.70944, 22),
('13039', 'Fos-sur-Mer', '31T', 657500, 4811055, 43.4358, 4.94611, 9),
('13040', 'Fuveau', '31T', 707252, 4814593, 43.4556, 5.56167, 250),
('13041', 'Gardanne', '31T', 699743, 4814459, 43.4564, 5.46889, 200),
('13042', 'Gémenos', '31T', 713265, 4797271, 43.2981, 5.62917, 133),
('13043', 'Gignac-la-Nerthe', '31T', 681162, 4807018, 43.3942, 5.23694, 57),
('13044', 'Grans', '31T', 666644, 4830568, 43.6094, 5.06501, 50),
('13045', 'Graveson', '31T', 642596, 4856990, 43.8522, 4.77417, 15),
('13046', 'Gréasque', '31T', 705957, 4812052, 43.4331, 5.54472, 320),
('13047', 'Istres', '31T', 660777, 4819837, 43.5142, 4.98917, 20),
('13048', 'Jouques', '31T', 712946, 4835061, 43.6381, 5.64, 270),
('13049', 'Lamanon', '31T', 668111, 4840884, 43.7019, 5.08639, 120),
('13050', 'Lambesc', '31T', 682468, 4835982, 43.6544, 5.26278, 200),
('13051', 'Lançon-Provence', '31T', 671559, 4828685, 43.5914, 5.12527, 80),
('13052', 'Maillane', '31T', 643380, 4854815, 43.8325, 4.78334, 14),
('13053', 'Mallemort', '31T', 675726, 4844291, 43.7308, 5.18194, 120),
('13054', 'Marignane', '31T', 679566, 4809476, 43.4167, 5.21805, 10),
('13055', 'Marseille', '31T', 694635, 4796646, 43.2975, 5.39948, 20),
('13056', 'Martigues', '31T', 666338, 4807532, 43.4022, 5.05417, 12),
('13057', 'Mas-Blanc-des-Alpilles', '31T', 641558, 4850115, 43.7906, 4.75944, 14),
('13058', 'Maussane-les-Alpilles', '31T', 645457, 4842575, 43.7219, 4.80584, 35),
('13059', 'Meyrargues', '31T', 704014, 4834504, 43.6356, 5.52917, 240),
('13060', 'Meyreuil', '31T', 701686, 4817913, 43.4869, 5.49416, 270),
('13061', 'Saint-Pierre-de-Mézoargues', '31T', 632466, 4857582, 43.8594, 4.64833, 11),
('13062', 'Mimet', '31T', 702895, 4809859, 43.4142, 5.50611, 480),
('13063', 'Miramas', '31T', 661557, 4827542, 43.5833, 5.00111, 50),
('13064', 'Mollégès', '31T', 656892, 4852249, 43.8067, 4.95055, 55),
('13065', 'Mouriès', '31T', 650819, 4839083, 43.6894, 4.87139, 15),
('13066', 'Noves', '31T', 652824, 4860026, 43.8775, 4.90223, 41),
('13067', 'Orgon', '31T', 664107, 4850694, 43.7911, 5.03972, 100),
('13068', 'Paradou', '31T', 643940, 4842326, 43.72, 4.78695, 20),
('13069', 'Pélissanne', '31T', 673683, 4833309, 43.6325, 5.15305, 80),
('13070', 'La Penne-sur-Huveaune', '31T', 704364, 4794774, 43.2781, 5.51861, 111),
('13071', 'Les Pennes-Mirabeau', '31T', 686776, 4809178, 43.4122, 5.30694, 110),
('13072', 'Peynier', '31T', 713702, 4814084, 43.4492, 5.64111, 270),
('13073', 'Peypin', '31T', 708752, 4806827, 43.3853, 5.57722, 300),
('13074', 'Peyrolles-en-Provence', '31T', 708346, 4835842, 43.6464, 5.58333, 215),
('13075', 'Plan-de-Cuques', '31T', 699603, 4802443, 43.3483, 5.46278, 133),
('13076', 'Plan-d''Orgon', '31T', 660598, 4852492, 43.8081, 4.99667, 70),
('13077', 'Port-de-Bouc', '31T', 660559, 4808225, 43.4097, 4.98305, 5),
('13078', 'Port-Saint-Louis-du-Rhône', '31T', 646463, 4805590, 43.3889, 4.80834, 7),
('13079', 'Puyloubier', '31T', 716168, 4822780, 43.5267, 5.67501, 360),
('13080', 'Le Puy-Sainte-Réparade', '31T', 696171, 4837358, 43.6633, 5.43306, 200),
('13081', 'Rognac', '31T', 680585, 4817623, 43.4897, 5.23333, 20),
('13082', 'Rognes', '31T', 689557, 4837383, 43.6653, 5.35111, 330),
('13083', 'Rognonas', '31T', 644737, 4862252, 43.8992, 4.80222, 21),
('13084', 'La Roque-d''Anthéron', '31T', 686199, 4842877, 43.7156, 5.31139, 160),
('13085', 'Roquefort-la-Bédoule', '31T', 713064, 4792169, 43.2522, 5.62472, 274),
('13086', 'Roquevaire', '31T', 711127, 4802886, 43.3492, 5.605, 162),
('13087', 'Rousset', '31T', 712037, 4817645, 43.4817, 5.62194, 230),
('13088', 'Le Rove', '31T', 682470, 4804460, 43.3708, 5.25222, 150),
('13089', 'Saint-Andiol', '31T', 656587, 4855730, 43.8381, 4.94778, 53),
('13090', 'Saint-Antonin-sur-Bayon', '31T', 708939, 4821841, 43.5203, 5.58528, 416),
('13091', 'Saint-Cannat', '31T', 685348, 4832356, 43.6211, 5.29722, 200),
('13092', 'Saint-Chamas', '31T', 664407, 4823907, 43.55, 5.03528, 30),
('13093', 'Saint-Estève-Janson', '31T', 693116, 4839893, 43.6869, 5.39611, 93),
('13094', 'Saint-Étienne-du-Grès', '31T', 638585, 4849034, 43.7814, 4.72223, 15),
('13095', 'Saint-Marc-Jaumegarde', '31T', 703819, 4824679, 43.5472, 5.52305, 389),
('13096', 'Saintes-Maries-de-la-Mer', '31T', 615657, 4811873, 43.4508, 4.42945, 2),
('13097', 'Saint-Martin-de-Crau', '31T', 646015, 4833389, 43.6392, 4.81027, 21),
('13098', 'Saint-Mitre-les-Remparts', '31T', 662983, 4813160, 43.4536, 5.01445, 90),
('13099', 'Saint-Paul-lès-Durance', '31T', 718505, 4840645, 43.6867, 5.71111, 250),
('13100', 'Saint-Rémy-de-Provence', '31T', 647327, 4850117, 43.7894, 4.83111, 50),
('13101', 'Saint-Savournin', '31T', 704741, 4809113, 43.4069, 5.52861, 440),
('13102', 'Saint-Victoret', '31T', 680862, 4809820, 43.4194, 5.23416, 26),
('13103', 'Salon-de-Provence', '31T', 669019, 4834208, 43.6417, 5.09556, 82),
('13104', 'Sausset-les-Pins', '31T', 670593, 4801248, 43.3447, 5.10473, 30),
('13105', 'Sénas', '31T', 667366, 4845589, 43.7444, 5.07861, 92),
('13106', 'Septèmes-les-Vallons', '31T', 691854, 4807931, 43.3997, 5.36917, 200),
('13107', 'Simiane-Collongue', '31T', 697291, 4811391, 43.4294, 5.4375, 221),
('13108', 'Tarascon', '31T', 634173, 4851567, 43.805, 4.66806, 10),
('13109', 'Le Tholonet', '31T', 703092, 4821970, 43.5231, 5.51305, 180),
('13110', 'Trets', '31T', 717343, 4814201, 43.4492, 5.68611, 250),
('13111', 'Vauvenargues', '31T', 710071, 4825890, 43.5564, 5.60084, 410),
('13112', 'Velaux', '31T', 682083, 4821244, 43.5219, 5.25305, 130),
('13113', 'Venelles', '31T', 700300, 4830470, 43.6003, 5.48167, 400),
('13114', 'Ventabren', '31T', 685308, 4823247, 43.5392, 5.29361, 210),
('13115', 'Vernègues', '31T', 674918, 4839269, 43.6858, 5.17028, 310),
('13116', 'Verquières', '31T', 654347, 4855956, 43.8406, 4.92, 48),
('13117', 'Vitrolles', '31T', 682047, 4814266, 43.4592, 5.25027, 120),
('13118', 'Coudoux', '31T', 681747, 4825372, 43.5592, 5.25028, 103),
('13119', 'Carnoux-en-Provence', '31T', 708514, 4792615, 43.2575, 5.56889, 245),
('14001', 'Ablon', '31T', 303783, 5474668, 49.3931, 0.29584, 100),
('14002', 'Acqueville', '30T', 692602, 5427799, 48.9731, -0.36805, 156),
('14003', 'Agy', '30T', 662722, 5456510, 49.2397, -0.764444, 50),
('14004', 'Aignerville', '30T', 651071, 5465201, 49.3208, -0.921114, 10),
('14005', 'Airan', '30T', 708085, 5442549, 49.1006, -0.149165, 27),
('14006', 'Amayé-sur-Orne', '30T', 686956, 5440125, 49.0856, -0.43944, 60),
('14007', 'Amayé-sur-Seulles', '30T', 666902, 5438710, 49.0786, -0.714442, 160),
('14008', 'Amblie', '30T', 682775, 5462673, 49.2894, -0.486395, 20),
('14009', 'Amfreville', '30T', 701237, 5458835, 49.2492, -0.234723, 50),
('14011', 'Anctoville', '30T', 667178, 5441655, 49.105, -0.709448, 114),
('14012', 'Angerville', '30T', 716135, 5458318, 49.2394, -0.0305616, 20),
('14013', 'Angoville', '30T', 692238, 5424201, 48.9408, -0.374717, 214),
('14014', 'Anguerny', '30T', 689122, 5460384, 49.2669, -0.400283, 60),
('14015', 'Anisy', '30T', 689827, 5458739, 49.2519, -0.391382, 53),
('14016', 'Annebault', '31T', 285884, 5459754, 49.2531, 0.0574946, 137),
('14019', 'Arganchy', '30T', 664416, 5456035, 49.235, -0.741385, 38),
('14020', 'Argences', '30T', 706921, 5445442, 49.1269, -0.163609, 17),
('14021', 'Arromanches-les-Bains', '30T', 672667, 5467816, 49.3386, -0.623051, 20),
('14022', 'Asnelles', '30T', 675689, 5467418, 49.3342, -0.581664, 10),
('14023', 'Asnières-en-Bessin', '30T', 649801, 5470296, 49.3669, -0.936663, 38),
('14024', 'Auberville', '30T', 715719, 5466342, 49.3117, -0.0319432, 120),
('14025', 'Aubigny', '30T', 704102, 5422212, 48.9192, -0.213887, 150),
('14026', 'Audrieu', '30T', 675230, 5453278, 49.2072, -0.594168, 70),
('14027', 'Aunay-sur-Odon', '30T', 673088, 5432411, 49.0203, -0.632497, 130),
('14028', 'Auquainville', '31T', 298544, 5437264, 49.0553, 0.242504, 160),
('14029', 'Les Autels-Saint-Bazile', '31T', 288950, 5425439, 48.9458, 0.117496, 180),
('14030', 'Authie', '30T', 687186, 5453671, 49.2072, -0.430002, 65),
('14031', 'Les Authieux-Papion', '31T', 284732, 5438990, 49.0661, 0.0527839, 40),
('14032', 'Les Authieux-sur-Calonne', '31T', 302649, 5463919, 49.2961, 0.285552, 40),
('14033', 'Auvillars', '31T', 286700, 5453106, 49.1936, 0.0722266, 60),
('14034', 'Avenay', '30T', 685054, 5441730, 49.1006, -0.464729, 65),
('14035', 'Balleroy', '30T', 657694, 5449782, 49.1806, -0.836111, 100),
('14036', 'Banneville-la-Campagne', '30T', 702651, 5450663, 49.1753, -0.219441, 14),
('14037', 'Banneville-sur-Ajon', '30T', 677527, 5437249, 49.0625, -0.569717, 141),
('14038', 'Banville', '30T', 682530, 5465199, 49.3122, -0.488607, 40),
('14039', 'Barbery', '30T', 693664, 5431761, 49.0083, -0.351666, 150),
('14040', 'Barbeville', '30T', 664127, 5460971, 49.2794, -0.743329, 28),
('14041', 'Barneville-la-Bertran', '31T', 295977, 5474242, 49.3867, 0.188614, 43),
('14042', 'Baron-sur-Odon', '30T', 683850, 5444997, 49.1303, -0.479719, 84),
('14043', 'Barou-en-Auge', '30T', 716476, 5424164, 48.9325, -0.0441673, 70),
('14044', 'Basly', '30T', 687358, 5461714, 49.2794, -0.423883, 60),
('14045', 'Basseneville', '30T', 707365, 5454672, 49.2097, -0.152776, 12),
('14046', 'Bavent', '30T', 704731, 5456862, 49.2303, -0.187779, 32),
('14047', 'Bayeux', '30T', 667050, 5460596, 49.2753, -0.703329, 50),
('14049', 'Bazenville', '30T', 675458, 5463887, 49.3025, -0.586393, 65),
('14050', 'La Bazoque', '30T', 655506, 5447618, 49.1617, -0.866949, 120),
('14052', 'Beaulieu', '30T', 659833, 5419776, 48.9103, -0.818617, 150),
('14053', 'Beaumais', '30T', 714295, 5419967, 48.8956, -0.0761097, 60),
('14054', 'Beaumesnil', '30T', 647911, 5417778, 48.8953, -0.981941, 110),
('14055', 'Beaumont-en-Auge', '31T', 289749, 5462357, 49.2778, 0.109171, 90),
('14056', 'Bauquay', '30T', 674280, 5433931, 49.0336, -0.615554, 129),
('14057', 'Bellengreville', '30T', 703871, 5445050, 49.1244, -0.205563, 23),
('14058', 'Bellou', '31T', 297410, 5429020, 48.9808, 0.231116, 202),
('14059', 'Benerville-sur-Mer', '31T', 284758, 5469724, 49.3422, 0.0366726, 30),
('14060', 'Bénouville', '30T', 698215, 5458447, 49.2467, -0.276392, 10),
('14061', 'Le Bény-Bocage', '30T', 658234, 5423005, 48.9397, -0.839171, 180),
('14062', 'Bény-sur-Mer', '30T', 686732, 5462868, 49.29, -0.431942, 60),
('14063', 'Bernesq', '30T', 649660, 5459909, 49.2736, -0.942499, 35),
('14064', 'Bernières-d''Ailly', '30T', 712914, 5427273, 48.9617, -0.0911134, 42),
('14065', 'Bernières-le-Patry', '30T', 666235, 5409332, 48.8147, -0.735555, 190),
('14066', 'Bernières-sur-Mer', '30T', 687300, 5467555, 49.3319, -0.421941, 6),
('14068', 'Biéville-Beuville', '30T', 694509, 5457944, 49.2433, -0.3275, 12),
('14069', 'Beuvillers', '31T', 299062, 5445376, 49.1283, 0.245553, 60),
('14070', 'Beuvron-en-Auge', '30T', 715113, 5452867, 49.1908, -0.0475036, 10),
('14073', 'La Bigne', '30T', 666700, 5431226, 49.0114, -0.720285, 240),
('14074', 'Billy', '30T', 704848, 5441160, 49.0892, -0.194161, 31),
('14075', 'Bissières', '30T', 712207, 5444128, 49.1133, -0.091938, 40),
('14076', 'Blainville-sur-Orne', '30T', 696503, 5456531, 49.23, -0.300828, 23),
('14077', 'Blangy-le-Château', '31T', 301609, 5458052, 49.2431, 0.274172, 53),
('14078', 'Blay', '30T', 657182, 5459903, 49.2717, -0.839166, 30),
('14079', 'Blonville-sur-Mer', '31T', 284346, 5469030, 49.3358, 0.0313838, 10),
('14080', 'Le Bô', '30T', 686741, 5419315, 48.8986, -0.451943, 60),
('14081', 'Boissey', '31T', 284011, 5433545, 49.0169, 0.0458277, 70),
('14082', 'La Boissière', '31T', 290709, 5446613, 49.1367, 0.130557, 165),
('14083', 'Bonnebosq', '31T', 287277, 5454413, 49.2056, 0.0794438, 70),
('14084', 'Bonnemaison', '30T', 676737, 5431444, 49.0106, -0.583053, 220),
('14085', 'Bonneville-la-Louvet', '31T', 306300, 5461378, 49.2744, 0.336942, 50),
('14086', 'Bonneville-sur-Touques', '31T', 290727, 5468906, 49.3369, 0.119169, 50),
('14088', 'Bons-Tassilly', '30T', 702294, 5426536, 48.9586, -0.236391, 140),
('14089', 'Bougy', '30T', 680652, 5442913, 49.1125, -0.524448, 89),
('14090', 'Boulon', '30T', 690641, 5435706, 49.0447, -0.391106, 105),
('14091', 'Bourgeauville', '31T', 285828, 5461952, 49.2728, 0.0555504, 128),
('14092', 'Bourguébus', '30T', 697197, 5444468, 49.1214, -0.297218, 50),
('14093', 'Branville', '31T', 283629, 5462100, 49.2733, 0.025281, 140),
('14096', 'Brémoy', '30T', 662483, 5428783, 48.9906, -0.778886, 239),
('14097', 'Bretteville-le-Rabet', '30T', 700281, 5433790, 49.0244, -0.260284, 100),
('14098', 'Bretteville-l''Orgueilleuse', '30T', 681307, 5453846, 49.2106, -0.510558, 55),
('14099', 'Bretteville-sur-Dives', '30T', 717901, 5436124, 49.0394, -0.0183281, 25),
('14100', 'Bretteville-sur-Laize', '30T', 695467, 5435998, 49.0458, -0.324996, 54),
('14101', 'Bretteville-sur-Odon', '30T', 688474, 5449171, 49.1664, -0.414446, 20),
('14102', 'Le Breuil-en-Auge', '31T', 297921, 5456300, 49.2261, 0.224445, 30),
('14103', 'Le Breuil-en-Bessin', '30T', 655712, 5458254, 49.2572, -0.860001, 20),
('14104', 'Le Brévedent', '31T', 303655, 5456402, 49.2289, 0.303059, 85),
('14105', 'La Brévière', '31T', 292399, 5428339, 48.9731, 0.163063, 90),
('14106', 'Bréville-les-Monts', '30T', 701880, 5457869, 49.2403, -0.226385, 56),
('14107', 'Bricqueville', '30T', 648220, 5461570, 49.2889, -0.961667, 20),
('14109', 'Brouay', '30T', 677565, 5454342, 49.2161, -0.561669, 64),
('14110', 'Brucourt', '30T', 710933, 5458828, 49.2458, -0.101665, 10),
('14111', 'Bucéels', '30T', 672251, 5451392, 49.1911, -0.63584, 50),
('14113', 'Burcy', '30T', 661084, 5415269, 48.8694, -0.803333, 130),
('14115', 'Bures-les-Monts', '30T', 649031, 5423864, 48.9497, -0.964447, 150),
('14116', 'Le Bû-sur-Rouvres', '30T', 706274, 5435030, 49.0336, -0.177776, 80),
('14117', 'Cabourg', '30T', 709452, 5463687, 49.29, -0.119446, 4),
('14118', 'Caen', '30T', 692372, 5451315, 49.1844, -0.360006, 25),
('14119', 'Cagny', '30T', 700319, 5447332, 49.1461, -0.253057, 20),
('14120', 'Cahagnes', '30T', 663134, 5437053, 49.0647, -0.766668, 167),
('14121', 'Cahagnolles', '30T', 663213, 5447439, 49.1581, -0.761389, 100),
('14122', 'La Caine', '30T', 681284, 5434156, 49.0336, -0.519719, 176),
('14123', 'Cairon', '30T', 685631, 5457143, 49.2389, -0.449723, 39),
('14124', 'La Cambe', '30T', 644932, 5467446, 49.3425, -1.00472, 30),
('14125', 'Cambes-en-Plaine', '30T', 690411, 5456471, 49.2314, -0.384443, 56),
('14126', 'Cambremer', '31T', 284859, 5448508, 49.1517, 0.0494499, 104),
('14127', 'Campagnolles', '30T', 652199, 5417429, 48.8911, -0.923606, 140),
('14128', 'Campandré-Valcongrain', '30T', 676709, 5427858, 48.9783, -0.584995, 280),
('14129', 'Campeaux', '30T', 651520, 5424394, 48.9539, -0.930277, 150),
('14130', 'Campigny', '30T', 659558, 5456758, 49.2428, -0.80778, 50),
('14131', 'Canapville', '31T', 291929, 5466510, 49.3158, 0.136943, 10),
('14132', 'Canchy', '30T', 646540, 5466191, 49.3308, -0.98306, 9),
('14134', 'Canteloup', '30T', 709466, 5446280, 49.1336, -0.128333, 41),
('14135', 'Carcagny', '30T', 673268, 5456430, 49.2361, -0.61972, 50),
('14136', 'Cardonville', '30T', 640567, 5467610, 49.345, -1.06472, 23),
('14137', 'Carpiquet', '30T', 686189, 5451412, 49.1872, -0.444722, 60),
('14138', 'Cartigny-l''Épinay', '30T', 644914, 5455858, 49.2383, -1.00917, 20),
('14139', 'Carville', '30T', 656695, 5422004, 48.9311, -0.860557, 140),
('14140', 'Castillon', '30T', 660555, 5452398, 49.2033, -0.795837, 80),
('14141', 'Castillon-en-Auge', '31T', 287556, 5434768, 49.0292, 0.093608, 156),
('14142', 'Castilly', '30T', 643507, 5460147, 49.2772, -1.02695, 30),
('14143', 'Caumont-l''Éventé', '30T', 660291, 5439875, 49.0908, -0.80444, 240),
('14144', 'Caumont-sur-Orne', '30T', 684552, 5425702, 48.9567, -0.478892, 30),
('14145', 'Cauvicourt', '30T', 699971, 5436190, 49.0461, -0.263336, 110),
('14146', 'Cauville', '30T', 677854, 5424494, 48.9478, -0.570831, 180),
('14147', 'Cernay', '31T', 304446, 5432941, 49.0183, 0.325281, 183),
('14148', 'Cerqueux', '31T', 307158, 5430249, 48.995, 0.363612, 200),
('14149', 'Cesny-aux-Vignes', '30T', 710489, 5441248, 49.0881, -0.11695, 25),
('14150', 'Cesny-Bois-Halbout', '30T', 690617, 5428689, 48.9817, -0.394729, 170),
('14151', 'Champ-du-Boult', '30T', 646371, 5406583, 48.795, -1.00694, 331),
('14152', 'La Chapelle-Engerbold', '30T', 675365, 5418203, 48.8919, -0.607498, 150),
('14153', 'La Chapelle-Haute-Grue', '31T', 291117, 5427831, 48.9681, 0.145827, 140),
('14154', 'La Chapelle-Yvon', '31T', 306031, 5438140, 49.0656, 0.344448, 100),
('14155', 'Cheffreville-Tonnencourt', '31T', 298615, 5434201, 49.0278, 0.244997, 90),
('14156', 'Chênedollé', '30T', 664267, 5413786, 48.8553, -0.760557, 230),
('14157', 'Cheux', '30T', 680414, 5448963, 49.1669, -0.524998, 84),
('14158', 'Chicheboville', '30T', 703081, 5443383, 49.1097, -0.217216, 22),
('14159', 'Chouain', '30T', 672627, 5453628, 49.2111, -0.629723, 50),
('14160', 'Cintheaux', '30T', 697991, 5437015, 49.0542, -0.289998, 115),
('14161', 'Clarbec', '31T', 291302, 5459051, 49.2486, 0.132219, 70),
('14162', 'Clécy', '30T', 684437, 5421185, 48.9161, -0.482505, 50),
('14163', 'Cléville', '30T', 711776, 5448996, 49.1572, -0.09528, 11),
('14164', 'Clinchamps-sur-Orne', '30T', 689781, 5439448, 49.0786, -0.401108, 60),
('14165', 'Colleville-sur-Mer', '30T', 656657, 5468386, 49.3481, -0.84305, 60),
('14166', 'Colleville-Montgomery', '30T', 696508, 5461477, 49.2744, -0.298333, 10),
('14167', 'Colombelles', '30T', 696668, 5453600, 49.2036, -0.3, 30),
('14168', 'Colombières', '30T', 646785, 5462335, 49.2961, -0.981108, 10),
('14169', 'Colombiers-sur-Seulles', '30T', 680976, 5463293, 49.2956, -0.51083, 10),
('14170', 'Colomby-sur-Thaon', '30T', 688241, 5460137, 49.265, -0.412497, 56),
('14171', 'Combray', '30T', 687548, 5424998, 48.9494, -0.438331, 190),
('14172', 'Commes', '30T', 664338, 5467406, 49.3372, -0.737782, 25),
('14173', 'Condé-sur-Ifs', '30T', 709995, 5436066, 49.0417, -0.126396, 40),
('14174', 'Condé-sur-Noireau', '30T', 679698, 5414015, 48.8531, -0.550279, 80),
('14175', 'Condé-sur-Seulles', '30T', 672159, 5455005, 49.2236, -0.635553, 60),
('14176', 'Conteville', '30T', 701849, 5440988, 49.0886, -0.235274, 45),
('14177', 'Coquainvilliers', '31T', 296713, 5453191, 49.1978, 0.209448, 50),
('14178', 'Corbon', '30T', 716401, 5447413, 49.1414, -0.0327819, 7),
('14179', 'Cordebugle', '31T', 308841, 5443051, 49.1106, 0.380554, 165),
('14180', 'Cordey', '30T', 703231, 5414792, 48.8528, -0.229451, 169),
('14181', 'Cormelles-le-Royal', '30T', 694614, 5448086, 49.1547, -0.330834, 30),
('14182', 'Cormolain', '30T', 656499, 5444062, 49.1294, -0.854719, 100),
('14183', 'Cossesseville', '30T', 689068, 5419208, 48.8969, -0.420275, 111),
('14184', 'Cottun', '30T', 660856, 5460133, 49.2728, -0.788605, 45),
('14185', 'Coudray-Rabut', '31T', 294385, 5464624, 49.2997, 0.171665, 18),
('14186', 'Coulombs', '30T', 677538, 5458328, 49.2519, -0.560275, 60),
('14187', 'Coulonces', '30T', 652923, 5415534, 48.8739, -0.914445, 115),
('14188', 'Coulvain', '30T', 666238, 5435137, 49.0467, -0.724995, 168),
('14189', 'Coupesarte', '31T', 288697, 5438033, 49.0589, 0.107495, 40),
('14190', 'Courcy', '30T', 716240, 5428669, 48.9731, -0.0449938, 50),
('14191', 'Courseulles-sur-Mer', '30T', 684844, 5467286, 49.3303, -0.455835, 5),
('14192', 'Courson', '30T', 640857, 5413146, 48.8553, -1.07972, 160),
('14193', 'Courtonne-la-Meurdrac', '31T', 304685, 5444896, 49.1258, 0.322776, 76),
('14194', 'Courtonne-les-Deux-Églises', '31T', 308206, 5439950, 49.0825, 0.373334, 118),
('14195', 'Courvaudon', '30T', 677253, 5433748, 49.0311, -0.574996, 180),
('14196', 'Crépon', '30T', 678069, 5465640, 49.3175, -0.549729, 50),
('14197', 'Cresserons', '30T', 692506, 5463129, 49.2906, -0.352497, 30),
('14198', 'Cresseveuille', '31T', 283571, 5458051, 49.2369, 0.0266722, 111),
('14200', 'Creully', '30T', 678936, 5461990, 49.2844, -0.539445, 30),
('14203', 'Cricqueville-en-Auge', '30T', 713862, 5458477, 49.2417, -0.0616618, 10),
('14204', 'Cricqueville-en-Bessin', '30T', 645252, 5471378, 49.3778, -0.998885, 11),
('14205', 'Cristot', '30T', 676485, 5452020, 49.1956, -0.577506, 90),
('14206', 'Crocy', '30T', 715175, 5418301, 48.8803, -0.0649961, 75),
('14207', 'Croisilles', '30T', 686148, 5430330, 48.9978, -0.454994, 151),
('14208', 'Croissanville', '30T', 711471, 5444780, 49.1194, -0.101669, 15),
('14209', 'Crouay', '30T', 659743, 5459452, 49.2669, -0.804166, 39),
('14210', 'La Croupte', '31T', 301616, 5433412, 49.0217, 0.286388, 170),
('14211', 'Culey-le-Patry', '30T', 680870, 5425025, 48.9517, -0.529442, 120),
('14212', 'Cully', '30T', 679645, 5458242, 49.2506, -0.531387, 30),
('14213', 'Curcy-sur-Orne', '30T', 681537, 5432001, 49.0142, -0.517225, 180),
('14214', 'Cussy', '30T', 662698, 5461423, 49.2839, -0.762777, 55),
('14215', 'Cuverville', '30T', 699409, 5452307, 49.1911, -0.263056, 28),
('14216', 'Damblainville', '30T', 711582, 5422151, 48.9161, -0.111946, 60),
('14217', 'Dampierre', '30T', 655730, 5434615, 49.0447, -0.868892, 110),
('14218', 'Danestal', '31T', 282821, 5460091, 49.255, 0.0152779, 61),
('14219', 'Danvou-la-Ferrière', '30T', 670461, 5425283, 48.9569, -0.671387, 220),
('14220', 'Deauville', '31T', 287400, 5471167, 49.3561, 0.0722261, 5),
('14221', 'Démouville', '30T', 699363, 5450791, 49.1775, -0.264438, 15),
('14222', 'Le Désert', '30T', 660579, 5419364, 48.9064, -0.808606, 147),
('14223', 'Le Détroit', '30T', 694455, 5416086, 48.8672, -0.348338, 210),
('14224', 'Deux-Jumeaux', '30T', 648080, 5468272, 49.3492, -0.961105, 42),
('14225', 'Dives-sur-Mer', '30T', 711164, 5463351, 49.2864, -0.09611, 10),
('14226', 'Donnay', '30T', 689136, 5425578, 48.9542, -0.416394, 200),
('14227', 'Douville-en-Auge', '30T', 716443, 5460804, 49.2617, -0.0249932, 90),
('14228', 'Douvres-la-Délivrande', '30T', 690265, 5463020, 49.2903, -0.383335, 30),
('14229', 'Dozulé', '30T', 715355, 5457576, 49.2331, -0.0416613, 30),
('14230', 'Drubec', '31T', 289912, 5459754, 49.2544, 0.112775, 130),
('14231', 'Beaufour-Druval', '31T', 283827, 5454795, 49.2078, 0.031938, 132),
('14232', 'Ducy-Sainte-Marguerite', '30T', 673912, 5455245, 49.2253, -0.611394, 73),
('14235', 'Écrammeville', '30T', 649369, 5465402, 49.3231, -0.944444, 10),
('14236', 'Ellon', '30T', 669117, 5454509, 49.22, -0.677504, 78),
('14237', 'Émiéville', '30T', 702601, 5448714, 49.1578, -0.221107, 11),
('14238', 'Englesqueville-en-Auge', '31T', 292665, 5468338, 49.3325, 0.146108, 45),
('14239', 'Englesqueville-la-Percée', '30T', 648785, 5471288, 49.3761, -0.950277, 14),
('14240', 'Épaney', '30T', 707475, 5425738, 48.9497, -0.166108, 105),
('14241', 'Épinay-sur-Odon', '30T', 673703, 5438704, 49.0767, -0.621394, 90),
('14242', 'Épron', '30T', 691461, 5455395, 49.2214, -0.370549, 54),
('14243', 'Équemauville', '31T', 297406, 5474684, 49.3911, 0.208055, 110),
('14244', 'Eraines', '30T', 708149, 5421311, 48.9097, -0.159173, 100),
('14245', 'Ernes', '30T', 710300, 5433388, 49.0175, -0.123616, 40),
('14246', 'Escoville', '30T', 701091, 5454533, 49.2106, -0.238884, 18),
('14248', 'Espins', '30T', 689065, 5430676, 49, -0.414994, 150),
('14249', 'Esquay-Notre-Dame', '30T', 684522, 5443103, 49.1131, -0.471382, 80),
('14250', 'Esquay-sur-Seulles', '30T', 672959, 5460469, 49.2725, -0.622217, 30),
('14251', 'Esson', '30T', 686314, 5426595, 48.9642, -0.454438, 160),
('14252', 'Estrées-la-Campagne', '30T', 702332, 5432751, 49.0144, -0.23278, 99),
('14253', 'Estry', '30T', 666101, 5418630, 48.8983, -0.733607, 210),
('14254', 'Éterville', '30T', 687735, 5446457, 49.1422, -0.425838, 50),
('14255', 'Étouvy', '30T', 654753, 5417902, 48.8947, -0.888609, 100),
('14256', 'Étréham', '30T', 660111, 5465550, 49.3217, -0.796668, 30),
('14257', 'Évrecy', '30T', 682561, 5441647, 49.1006, -0.498886, 71),
('14258', 'Falaise', '30T', 705708, 5419550, 48.8947, -0.193333, 150),
('14259', 'Familly', '31T', 306479, 5427120, 48.9667, 0.355828, 217),
('14260', 'Fauguernon', '31T', 301100, 5452382, 49.1919, 0.269996, 130),
('14261', 'Le Faulq', '31T', 304758, 5456115, 49.2267, 0.318331, 147),
('14264', 'La Ferrière-Harang', '30T', 654314, 5427098, 48.9775, -0.891113, 184),
('14265', 'Fervaques', '31T', 299375, 5435533, 49.04, 0.254722, 90),
('14266', 'Feuguerolles-Bully', '30T', 689417, 5443547, 49.1156, -0.404166, 58),
('14268', 'Fierville-Bray', '30T', 705319, 5438859, 49.0683, -0.188885, 40),
('14269', 'Fierville-les-Parcs', '31T', 298059, 5457841, 49.24, 0.225562, 50),
('14270', 'Firfol', '31T', 304653, 5447988, 49.1536, 0.32084, 150),
('14271', 'Fleury-sur-Orne', '30T', 691454, 5447419, 49.1497, -0.374443, 40),
('14272', 'La Folie', '30T', 647157, 5458235, 49.2592, -0.977503, 35),
('14273', 'La Folletière-Abenon', '31T', 311656, 5428549, 48.9811, 0.425827, 140),
('14274', 'Fontaine-Étoupefour', '30T', 685860, 5446734, 49.1453, -0.451393, 53),
('14275', 'Fontaine-Henry', '30T', 685224, 5461426, 49.2775, -0.453328, 40),
('14276', 'Fontaine-le-Pin', '30T', 698834, 5428235, 48.975, -0.282774, 175),
('14277', 'Fontenay-le-Marmion', '30T', 693498, 5441153, 49.0928, -0.349448, 50),
('14278', 'Fontenay-le-Pesnel', '30T', 675977, 5448913, 49.1678, -0.585832, 82),
('14279', 'Fontenermont', '30T', 639189, 5409705, 48.8247, -1.10362, 210),
('14280', 'Formentin', '31T', 291851, 5453218, 49.1964, 0.142778, 108),
('14281', 'Formigny', '30T', 652655, 5467068, 49.3372, -0.898617, 30),
('14282', 'Foulognes', '30T', 659135, 5445466, 49.1414, -0.818058, 120),
('14283', 'Fourches', '30T', 714092, 5416218, 48.8619, -0.080838, 90),
('14284', 'Fourneaux-le-Val', '30T', 700547, 5415127, 48.8567, -0.265832, 130),
('14285', 'Le Fournet', '31T', 289286, 5453965, 49.2022, 0.107224, 139),
('14286', 'Fourneville', '31T', 299279, 5470719, 49.3561, 0.235835, 100),
('14287', 'Frénouville', '30T', 701150, 5446249, 49.1361, -0.242216, 20),
('14288', 'Le Fresne-Camilly', '30T', 682681, 5459424, 49.2603, -0.48917, 55),
('14289', 'Fresné-la-Mère', '30T', 711169, 5419600, 48.8933, -0.118894, 100),
('14290', 'Fresney-le-Puceux', '30T', 692214, 5437801, 49.0631, -0.368609, 70),
('14291', 'Fresney-le-Vieux', '30T', 691200, 5431274, 49.0047, -0.385553, 180),
('14292', 'Friardel', '31T', 309278, 5430979, 49.0022, 0.392221, 195),
('14293', 'Fumichon', '31T', 308634, 5449951, 49.1725, 0.374445, 163),
('14294', 'Garcelles-Secqueville', '30T', 697993, 5442054, 49.0994, -0.287505, 79),
('14296', 'Le Gast', '30T', 641411, 5406548, 48.7958, -1.07445, 260),
('14297', 'Gavrus', '30T', 681522, 5443622, 49.1186, -0.512219, 80),
('14298', 'Géfosse-Fontenay', '30T', 638395, 5468884, 49.3569, -1.09416, 8),
('14299', 'Genneville', '31T', 302231, 5471942, 49.3681, 0.275831, 110),
('14300', 'Gerrots', '30T', 718117, 5453263, 49.1933, -0.00611651, 32),
('14301', 'Giberville', '30T', 697879, 5451479, 49.1842, -0.284438, 14),
('14302', 'Glanville', '31T', 287963, 5463261, 49.2853, 0.0841687, 60),
('14303', 'Glos', '31T', 301596, 5444759, 49.1236, 0.280552, 71),
('14304', 'Gonneville-sur-Honfleur', '31T', 299728, 5474166, 49.3872, 0.240276, 115),
('14305', 'Gonneville-sur-Mer', '30T', 715144, 5462948, 49.2814, -0.0416704, 70),
('14306', 'Gonneville-en-Auge', '30T', 704286, 5460123, 49.2597, -0.192221, 10),
('14307', 'Goupillières', '30T', 684130, 5434126, 49.0325, -0.480834, 117),
('14308', 'Goustranville', '30T', 711169, 5455837, 49.2189, -0.100002, 28),
('14309', 'Gouvix', '30T', 697175, 5434822, 49.0347, -0.302221, 90),
('14310', 'Grainville-Langannerie', '30T', 699581, 5432342, 49.0117, -0.270561, 120),
('14311', 'Grainville-sur-Odon', '30T', 680244, 5446083, 49.1411, -0.528617, 100),
('14312', 'Grandcamp-Maisy', '30T', 642139, 5472378, 49.3875, -1.04139, 10),
('14313', 'Grandchamp-le-Château', '31T', 286300, 5440134, 49.0769, 0.0736177, 30),
('14316', 'Grangues', '30T', 714078, 5461237, 49.2664, -0.0572233, 66),
('14317', 'La Graverie', '30T', 655531, 5417769, 48.8933, -0.878052, 100),
('14318', 'Graye-sur-Mer', '30T', 683696, 5467186, 49.3297, -0.471666, 5),
('14319', 'Grentheville', '30T', 697981, 5447495, 49.1483, -0.284999, 24),
('14320', 'Grimbosq', '30T', 686077, 5435458, 49.0439, -0.453612, 80),
('14322', 'Guéron', '30T', 666452, 5457611, 49.2486, -0.712784, 70),
('14324', 'Hamars', '30T', 679545, 5430112, 48.9978, -0.545278, 170),
('14325', 'Hermanville-sur-Mer', '30T', 695363, 5462395, 49.2831, -0.313609, 10),
('14326', 'Hermival-les-Vaux', '31T', 302027, 5449412, 49.1656, 0.284167, 70),
('14327', 'Hérouville-Saint-Clair', '30T', 695263, 5453797, 49.2058, -0.319171, 10),
('14328', 'Hérouvillette', '30T', 700829, 5455605, 49.2203, -0.241941, 13),
('14329', 'Heuland', '31T', 281911, 5461642, 49.2686, 0.00194491, 100),
('14330', 'Heurtevent', '31T', 290622, 5429798, 48.9856, 0.13806, 130),
('14331', 'Hiéville', '30T', 718397, 5434350, 49.0233, -0.0125059, 50),
('14332', 'La Hoguette', '30T', 708215, 5417912, 48.8792, -0.160005, 220),
('14333', 'Honfleur', '31T', 299193, 5477741, 49.4192, 0.231106, 25),
('14334', 'L''Hôtellerie', '31T', 310783, 5446415, 49.1414, 0.405559, 160),
('14335', 'Hotot-en-Auge', '30T', 714750, 5450224, 49.1672, -0.0538898, 30),
('14336', 'Hottot-les-Bagues', '30T', 671493, 5447103, 49.1528, -0.648062, 120),
('14337', 'La Houblonnière', '31T', 288510, 5445337, 49.1244, 0.101117, 90),
('14338', 'Houlgate', '30T', 712565, 5465291, 49.3033, -0.0758383, 10),
('14339', 'Hubert-Folie', '30T', 695929, 5445319, 49.1294, -0.314164, 50),
('14341', 'Ifs', '30T', 693483, 5446222, 49.1383, -0.347223, 44),
('14342', 'Isigny-sur-Mer', '30T', 637959, 5464547, 49.3181, -1.10166, 5),
('14343', 'Les Isles-Bardel', '30T', 695240, 5413486, 48.8436, -0.338885, 88),
('14344', 'Janville', '30T', 707654, 5449675, 49.1647, -0.151393, 25),
('14345', 'Jort', '30T', 713680, 5428539, 48.9728, -0.0799977, 40),
('14346', 'Juaye-Mondaye', '30T', 667890, 5453606, 49.2122, -0.694718, 78),
('14347', 'Jurques', '30T', 665136, 5431890, 49.0178, -0.741386, 210),
('14348', 'Juvigny-sur-Seulles', '30T', 674073, 5448235, 49.1622, -0.612221, 70),
('14349', 'Laize-la-Ville', '30T', 691332, 5439811, 49.0814, -0.37972, 36),
('14350', 'La Lande-sur-Drôme', '30T', 655834, 5437430, 49.07, -0.866387, 100),
('14352', 'Landelles-et-Coupigny', '30T', 646955, 5416949, 48.8881, -0.995274, 120),
('14353', 'Landes-sur-Ajon', '30T', 676848, 5438772, 49.0764, -0.578338, 110),
('14354', 'Langrune-sur-Mer', '30T', 691064, 5466788, 49.3239, -0.370556, 5),
('14355', 'Lantheuil', '30T', 680573, 5460158, 49.2675, -0.517783, 32),
('14356', 'Lasson', '30T', 684499, 5456486, 49.2333, -0.465561, 40),
('14357', 'Lassy', '30T', 670255, 5420702, 48.9158, -0.676111, 160),
('14358', 'Léaupartie', '31T', 284403, 5451897, 49.1819, 0.0413899, 36),
('14359', 'Lécaude', '31T', 286588, 5442875, 49.1017, 0.0761093, 70),
('14360', 'Leffard', '30T', 697743, 5421704, 48.9167, -0.300835, 211),
('14361', 'Lénault', '30T', 673738, 5422664, 48.9325, -0.627777, 240),
('14362', 'Lessard-et-le-Chêne', '31T', 289504, 5439486, 49.0722, 0.117771, 120),
('14364', 'Lingèvres', '30T', 669596, 5449486, 49.1747, -0.673052, 90),
('14365', 'Lion-sur-Mer', '30T', 694912, 5464265, 49.3, -0.318891, 8),
('14366', 'Lisieux', '31T', 297729, 5447187, 49.1442, 0.226395, 46),
('14367', 'Lison', '30T', 642219, 5456808, 49.2475, -1.04583, 45),
('14368', 'Lisores', '31T', 295499, 5426864, 48.9608, 0.206113, 187),
('14369', 'Litteau', '30T', 652923, 5446495, 49.1522, -0.902781, 122),
('14370', 'Le Molay-Littry', '30T', 654170, 5454812, 49.2267, -0.882502, 41),
('14371', 'Livarot', '31T', 291679, 5431953, 49.0053, 0.151385, 70),
('14372', 'Livry', '30T', 663214, 5441907, 49.1083, -0.763614, 160),
('14373', 'Le Locheur', '30T', 678723, 5441707, 49.1022, -0.55139, 67),
('14374', 'Les Loges', '30T', 660323, 5434561, 49.0431, -0.806107, 171),
('14375', 'Les Loges-Saulces', '30T', 698124, 5416154, 48.8667, -0.298331, 190),
('14376', 'Longraye', '30T', 667677, 5447264, 49.1553, -0.700285, 86),
('14377', 'Longues-sur-Mer', '30T', 667392, 5467282, 49.3353, -0.695829, 51),
('14378', 'Longueville', '30T', 647961, 5467434, 49.3417, -0.963053, 38),
('14379', 'Longvillers', '30T', 673104, 5435811, 49.0508, -0.630826, 125),
('14380', 'Loucelles', '30T', 676207, 5455009, 49.2225, -0.580007, 67),
('14381', 'Louvagny', '30T', 716383, 5425521, 48.9447, -0.0447151, 70),
('14382', 'Louvières', '30T', 651223, 5469964, 49.3636, -0.917217, 41),
('14383', 'Louvigny', '30T', 690272, 5448182, 49.1569, -0.390274, 15),
('14384', 'Luc-sur-Mer', '30T', 692236, 5465067, 49.3081, -0.355274, 10),
('14385', 'Magny-en-Bessin', '30T', 669891, 5464175, 49.3067, -0.662782, 52),
('14386', 'Magny-la-Campagne', '30T', 712000, 5436792, 49.0475, -0.0986158, 50),
('14387', 'Magny-le-Freule', '30T', 714036, 5442498, 49.0981, -0.0677715, 10),
('14388', 'Maisoncelles-la-Jourdan', '30T', 657855, 5407637, 48.8017, -0.850273, 240),
('14389', 'Maisoncelles-Pelvey', '30T', 669999, 5436363, 49.0567, -0.673054, 139),
('14390', 'Maisoncelles-sur-Ajon', '30T', 679730, 5436331, 49.0536, -0.539995, 122),
('14391', 'Maisons', '30T', 663447, 5464783, 49.3139, -0.751112, 21);
INSERT INTO `ods_communes` (`oc_code_insee`, `oc_nom`, `oc_secteur`, `oc_x_utm`, `oc_y_utm`, `oc_latitude`, `oc_longitude`, `oc_altitude`) VALUES
('14393', 'Maizet', '30T', 684646, 5439367, 49.0794, -0.471392, 90),
('14394', 'Maizières', '30T', 707828, 5433171, 49.0164, -0.157494, 50),
('14395', 'Malloué', '30T', 649394, 5422483, 48.9372, -0.959998, 140),
('14396', 'Maltot', '30T', 688032, 5444890, 49.1281, -0.422501, 64),
('14397', 'Mandeville-en-Bessin', '30T', 654199, 5463156, 49.3017, -0.87889, 49),
('14398', 'Manerbe', '31T', 293951, 5451933, 49.1856, 0.172226, 58),
('14399', 'Manneville-la-Pipard', '31T', 297853, 5459951, 49.2589, 0.221671, 30),
('14400', 'Le Manoir', '30T', 674939, 5461799, 49.2839, -0.59444, 20),
('14401', 'Manvieux', '30T', 670270, 5467587, 49.3372, -0.656117, 55),
('14402', 'Le Marais-la-Chapelle', '30T', 717995, 5418657, 48.8825, -0.0263952, 70),
('14403', 'Marolles', '31T', 308384, 5446250, 49.1392, 0.372779, 167),
('14404', 'Martainville', '30T', 694589, 5425673, 48.9533, -0.341944, 181),
('14405', 'Martigny-sur-l''Ante', '30T', 699107, 5420022, 48.9011, -0.283059, 220),
('14406', 'Martragny', '30T', 674975, 5458122, 49.2508, -0.595553, 60),
('14407', 'Mathieu', '30T', 691187, 5459188, 49.2556, -0.372499, 41),
('14408', 'May-sur-Orne', '30T', 691825, 5441991, 49.1008, -0.371941, 48),
('14409', 'Merville-Franceville-Plage', '30T', 703577, 5462322, 49.2797, -0.200836, 5),
('14410', 'Méry-Corbon', '30T', 712821, 5446625, 49.1356, -0.0822182, 12),
('14411', 'Meslay', '30T', 690562, 5426740, 48.9642, -0.396392, 180),
('14412', 'Le Mesnil-au-Grain', '30T', 675509, 5434897, 49.0419, -0.598337, 150),
('14413', 'Le Mesnil-Auzouf', '30T', 664525, 5427792, 48.9811, -0.751395, 270),
('14414', 'Le Mesnil-Bacley', '31T', 291041, 5431204, 48.9983, 0.143057, 100),
('14415', 'Le Mesnil-Benoist', '30T', 647567, 5414586, 48.8667, -0.987784, 120),
('14416', 'Le Mesnil-Caussois', '30T', 645562, 5413328, 48.8558, -1.01555, 140),
('14417', 'Mesnil-Clinchamps', '30T', 647445, 5413038, 48.8528, -0.990004, 150),
('14418', 'Le Mesnil-Durand', '31T', 290862, 5436157, 49.0428, 0.138061, 61),
('14419', 'Le Mesnil-Eudes', '31T', 294074, 5441633, 49.0931, 0.179173, 101),
('14420', 'Le Mesnil-Germain', '31T', 294732, 5436384, 49.0461, 0.190837, 140),
('14421', 'Le Mesnil-Guillaume', '31T', 302047, 5442609, 49.1044, 0.28778, 65),
('14422', 'Le Mesnil-Mauger', '31T', 282372, 5441493, 49.0878, 0.0191725, 20),
('14423', 'Le Mesnil-Patry', '30T', 678856, 5452004, 49.1947, -0.544999, 80),
('14424', 'Le Mesnil-Robert', '30T', 649963, 5415700, 48.8761, -0.954725, 140),
('14425', 'Le Mesnil-Simon', '31T', 288665, 5441435, 49.0894, 0.10528, 60),
('14426', 'Le Mesnil-sur-Blangy', '31T', 300699, 5459754, 49.2581, 0.260837, 75),
('14427', 'Le Mesnil-Villement', '30T', 692999, 5414552, 48.8539, -0.368894, 90),
('14429', 'Meulles', '31T', 304663, 5428142, 48.9753, 0.330553, 214),
('14430', 'Meuvaines', '30T', 676927, 5466592, 49.3264, -0.565006, 15),
('14431', 'Mézidon-Canon', '30T', 714423, 5440348, 49.0786, -0.0636173, 20),
('14432', 'Missy', '30T', 678818, 5443781, 49.1208, -0.549171, 95),
('14433', 'Mittois', '31T', 282394, 5432742, 49.0092, 0.0241728, 50),
('14435', 'Les Monceaux', '31T', 289904, 5443583, 49.1092, 0.121112, 160),
('14436', 'Monceaux-en-Bessin', '30T', 667931, 5457563, 49.2478, -0.692499, 70),
('14437', 'Mondeville', '30T', 695467, 5450342, 49.1747, -0.318053, 20),
('14438', 'Mondrainville', '30T', 681367, 5445873, 49.1389, -0.513329, 89),
('14439', 'Monfréville', '30T', 642991, 5463687, 49.3092, -1.03277, 30),
('14440', 'Montamy', '30T', 663614, 5426962, 48.9739, -0.76417, 250),
('14441', 'Mont-Bertrand', '30T', 652529, 5426183, 48.9697, -0.915833, 150),
('14442', 'Montchamp', '30T', 663722, 5421217, 48.9222, -0.765004, 170),
('14443', 'Montchauvet', '30T', 665641, 5423808, 48.945, -0.737776, 226),
('14444', 'Monteille', '31T', 284399, 5443486, 49.1064, 0.045834, 25),
('14445', 'Montfiquet', '30T', 653621, 5448369, 49.1689, -0.8925, 120),
('14446', 'Montigny', '30T', 680331, 5435330, 49.0444, -0.532223, 146),
('14448', 'Montreuil-en-Auge', '31T', 285425, 5450558, 49.1703, 0.0561092, 60),
('14449', 'Monts-en-Bessin', '30T', 674680, 5443154, 49.1164, -0.606104, 130),
('14450', 'Montviette', '31T', 287608, 5431334, 48.9983, 0.0961149, 120),
('14453', 'Mosles', '30T', 658555, 5464176, 49.3097, -0.81861, 30),
('14454', 'Mouen', '30T', 683428, 5447301, 49.1511, -0.48445, 70),
('14455', 'Moulines', '30T', 694730, 5429789, 48.9903, -0.33805, 130),
('14456', 'Moult', '30T', 706924, 5444267, 49.1164, -0.16417, 22),
('14457', 'Les Moutiers-en-Auge', '30T', 718874, 5420702, 48.9006, -0.0133269, 102),
('14458', 'Les Moutiers-en-Cinglais', '30T', 688278, 5434080, 49.0308, -0.424164, 140),
('14459', 'Les Moutiers-Hubert', '31T', 300159, 5428518, 48.9772, 0.268889, 120),
('14460', 'Moyaux', '31T', 307484, 5452433, 49.1944, 0.357496, 155),
('14461', 'Mutrécy', '30T', 688152, 5437785, 49.0642, -0.424165, 85),
('14462', 'Neuilly-la-Forêt', '30T', 638214, 5459239, 49.2703, -1.09999, 30),
('14465', 'Nonant', '30T', 671871, 5457097, 49.2425, -0.638608, 50),
('14466', 'Norolles', '31T', 298941, 5453171, 49.1983, 0.240004, 130),
('14467', 'Noron-l''Abbaye', '30T', 701862, 5419379, 48.8944, -0.245828, 180),
('14468', 'Noron-la-Poterie', '30T', 662370, 5454707, 49.2236, -0.770006, 54),
('14469', 'Norrey-en-Auge', '30T', 718656, 5422085, 48.9131, -0.015557, 90),
('14471', 'Notre-Dame-de-Courson', '31T', 299805, 5429984, 48.9903, 0.263336, 110),
('14473', 'Notre-Dame-de-Livaye', '31T', 284459, 5444504, 49.1156, 0.0461116, 40),
('14474', 'Notre-Dame-d''Estrées', '31T', 282108, 5447688, 49.1433, 0.0122182, 40),
('14475', 'Noyers-Bocage', '30T', 677606, 5444267, 49.1256, -0.565553, 126),
('14476', 'Olendon', '30T', 707050, 5427855, 48.9689, -0.170829, 110),
('14477', 'Ondefontaine', '30T', 669310, 5429667, 48.9967, -0.685272, 310),
('14478', 'Orbec', '31T', 310368, 5433106, 49.0217, 0.406115, 120),
('14480', 'Osmanville', '30T', 639358, 5465911, 49.33, -1.08195, 16),
('14481', 'Les Oubeaux', '30T', 640491, 5461120, 49.2867, -1.06805, 30),
('14483', 'Ouffières', '30T', 683390, 5433143, 49.0239, -0.491392, 116),
('14484', 'Ouilly-du-Houley', '31T', 305510, 5449318, 49.1658, 0.331938, 80),
('14486', 'Ouilly-le-Tesson', '30T', 703429, 5430009, 48.9894, -0.219168, 110),
('14487', 'Ouilly-le-Vicomte', '31T', 296616, 5451123, 49.1792, 0.209164, 60),
('14488', 'Ouistreham', '30T', 699423, 5462541, 49.2831, -0.257774, 5),
('14489', 'Ouville-la-Bien-Tournée', '30T', 717695, 5437724, 49.0539, -0.0202835, 21),
('14491', 'Parfouru-sur-Odon', '30T', 674695, 5440095, 49.0889, -0.607222, 106),
('14492', 'Pennedepie', '31T', 295340, 5476647, 49.4081, 0.178609, 10),
('14493', 'Percy-en-Auge', '30T', 714600, 5437881, 49.0564, -0.0625046, 28),
('14494', 'Périers-en-Auge', '30T', 710478, 5461191, 49.2672, -0.106667, 20),
('14495', 'Périers-sur-le-Dan', '30T', 693479, 5459608, 49.2586, -0.340833, 26),
('14496', 'Périgny', '30T', 675775, 5421987, 48.9258, -0.600281, 220),
('14497', 'Perrières', '30T', 709747, 5427029, 48.9606, -0.13445, 70),
('14498', 'Pertheville-Ners', '30T', 711697, 5417518, 48.8744, -0.112778, 101),
('14499', 'Petiville', '30T', 705589, 5458285, 49.2428, -0.175278, 15),
('14500', 'Pierrefitte-en-Auge', '31T', 296474, 5459878, 49.2578, 0.202779, 60),
('14501', 'Pierrefitte-en-Cinglais', '30T', 691445, 5420000, 48.9033, -0.387506, 240),
('14502', 'Pierrepont', '30T', 696208, 5419022, 48.8931, -0.323052, 202),
('14503', 'Pierres', '30T', 666208, 5415729, 48.8722, -0.733328, 190),
('14504', 'Le Pin', '31T', 306069, 5454245, 49.2103, 0.337221, 140),
('14505', 'Placy', '30T', 689180, 5427897, 48.975, -0.414716, 170),
('14506', 'Planquery', '30T', 657573, 5446935, 49.155, -0.838885, 80),
('14508', 'Le Plessis-Grimoult', '30T', 675056, 5426074, 48.9628, -0.608332, 280),
('14509', 'Plumetot', '30T', 692370, 5461795, 49.2786, -0.355007, 37),
('14510', 'La Pommeraye', '30T', 688778, 5420527, 48.9089, -0.423618, 180),
('14511', 'Pont-Bellanger', '30T', 648344, 5422177, 48.9347, -0.974438, 159),
('14512', 'Pontécoulant', '30T', 676981, 5416740, 48.8783, -0.586105, 101),
('14513', 'Pont-Farcy', '30T', 643717, 5422395, 48.9378, -1.0375, 60),
('14514', 'Pont-l''Évêque', '31T', 295083, 5462743, 49.2831, 0.182218, 10),
('14515', 'Port-en-Bessin-Huppain', '30T', 662974, 5468478, 49.3472, -0.756105, 10),
('14516', 'Potigny', '30T', 701647, 5428089, 48.9728, -0.24445, 164),
('14517', 'Poussy-la-Campagne', '30T', 702973, 5440226, 49.0814, -0.22028, 48),
('14518', 'Préaux-Saint-Sébastien', '31T', 303022, 5429498, 48.9869, 0.307496, 210),
('14519', 'Préaux-Bocage', '30T', 681895, 5436587, 49.0553, -0.510277, 90),
('14520', 'Le Pré-d''Auge', '31T', 291873, 5448424, 49.1533, 0.145559, 140),
('14521', 'Presles', '30T', 662683, 5416366, 48.8789, -0.781109, 158),
('14522', 'Prêtreville', '31T', 299353, 5439399, 49.0747, 0.252506, 80),
('14523', 'Proussy', '30T', 680512, 5417224, 48.8817, -0.537777, 190),
('14524', 'Putot-en-Auge', '30T', 713525, 5455681, 49.2167, -0.0677737, 20),
('14525', 'Putot-en-Bessin', '30T', 679133, 5454084, 49.2133, -0.540273, 74),
('14527', 'Biéville-Quétiéville', '30T', 716138, 5443260, 49.1042, -0.0386073, 11),
('14528', 'Quetteville', '31T', 304307, 5468435, 49.3372, 0.306116, 100),
('14529', 'Ranchy', '30T', 663182, 5458069, 49.2536, -0.757495, 50),
('14530', 'Ranville', '30T', 699876, 5456745, 49.2308, -0.254445, 9),
('14531', 'Rapilly', '30T', 695412, 5414976, 48.8569, -0.335832, 150),
('14532', 'Le Reculey', '30T', 657985, 5419599, 48.9092, -0.843888, 120),
('14533', 'Repentigny', '31T', 284807, 5452901, 49.1911, 0.0463889, 100),
('14534', 'Reux', '31T', 292779, 5461716, 49.2731, 0.151109, 100),
('14535', 'Reviers', '30T', 684146, 5464017, 49.3011, -0.466941, 10),
('14536', 'La Rivière-Saint-Sauveur', '31T', 302088, 5476368, 49.4078, 0.271661, 5),
('14538', 'Rocquancourt', '30T', 695663, 5441353, 49.0939, -0.319728, 78),
('14539', 'La Rocque', '30T', 670384, 5417801, 48.8897, -0.675562, 210),
('14540', 'Rocques', '31T', 299171, 5450040, 49.1703, 0.244721, 60),
('14541', 'La Roque-Baignard', '31T', 288702, 5451421, 49.1792, 0.100554, 92),
('14542', 'Rosel', '30T', 684981, 5456008, 49.2289, -0.459167, 40),
('14543', 'Rots', '30T', 683976, 5453965, 49.2108, -0.473894, 55),
('14544', 'Roucamps', '30T', 674108, 5429043, 48.9897, -0.620002, 270),
('14545', 'Roullours', '30T', 658490, 5411147, 48.8331, -0.840276, 230),
('14546', 'Rouvres', '30T', 706795, 5431957, 49.0058, -0.172223, 60),
('14547', 'Rubercy', '30T', 654151, 5461269, 49.2847, -0.880277, 20),
('14548', 'Rucqueville', '30T', 675965, 5458803, 49.2567, -0.581662, 50),
('14549', 'Rully', '30T', 667809, 5410616, 48.8258, -0.713607, 203),
('14550', 'Rumesnil', '31T', 283584, 5452207, 49.1844, 0.0299998, 30),
('14551', 'Russy', '30T', 658462, 5466677, 49.3322, -0.818896, 40),
('14552', 'Ryes', '30T', 672762, 5464790, 49.3114, -0.623055, 19),
('14553', 'Saint-Agnan-le-Malherbe', '30T', 677047, 5435100, 49.0433, -0.577222, 180),
('14554', 'Saint-Aignan-de-Cramesnil', '30T', 698961, 5439987, 49.0806, -0.275276, 102),
('14555', 'Saint-André-d''Hébertot', '31T', 302234, 5465851, 49.3133, 0.278894, 100),
('14556', 'Saint-André-sur-Orne', '30T', 691194, 5443793, 49.1172, -0.379723, 30),
('14557', 'Saint-Arnoult', '31T', 288407, 5468995, 49.3369, 0.087228, 30),
('14558', 'Saint-Aubin-d''Arquenay', '30T', 697245, 5460113, 49.2619, -0.288885, 38),
('14559', 'Saint-Aubin-des-Bois', '30T', 637416, 5410496, 48.8322, -1.12749, 149),
('14562', 'Saint-Aubin-sur-Mer', '30T', 689388, 5467348, 49.3294, -0.39333, 1),
('14563', 'Saint-Benoît-d''Hébertot', '31T', 301618, 5466151, 49.3158, 0.270279, 135),
('14564', 'Saint-Charles-de-Percy', '30T', 661940, 5421598, 48.9261, -0.78916, 165),
('14565', 'Saint-Côme-de-Fresné', '30T', 673943, 5467702, 49.3372, -0.605552, 19),
('14566', 'Saint-Contest', '30T', 689303, 5454547, 49.2144, -0.400554, 76),
('14568', 'Sainte-Croix-Grand-Tonne', '30T', 677749, 5456171, 49.2325, -0.558334, 50),
('14569', 'Sainte-Croix-sur-Mer', '30T', 680911, 5465269, 49.3133, -0.510829, 46),
('14570', 'Saint-Cyr-du-Ronceray', '31T', 302476, 5436999, 49.0542, 0.296391, 165),
('14571', 'Saint-Denis-de-Mailloc', '31T', 304031, 5441333, 49.0936, 0.315551, 100),
('14572', 'Saint-Denis-de-Méré', '30T', 682104, 5415916, 48.8694, -0.516665, 160),
('14573', 'Saint-Denis-Maisoncelles', '30T', 656758, 5427722, 48.9825, -0.857496, 180),
('14574', 'Saint-Désir', '31T', 296601, 5446857, 49.1408, 0.211113, 82),
('14575', 'Saint-Étienne-la-Thillaye', '31T', 290592, 5463778, 49.2908, 0.120002, 15),
('14576', 'Sainte-Foy-de-Montgommery', '31T', 293355, 5426696, 48.9586, 0.176944, 90),
('14577', 'Saint-Gabriel-Brécy', '30T', 677167, 5461036, 49.2764, -0.56417, 20),
('14578', 'Saint-Gatien-des-Bois', '31T', 295710, 5469800, 49.3467, 0.187218, 145),
('14579', 'Saint-Georges-d''Aunay', '30T', 669462, 5433998, 49.0356, -0.681387, 170),
('14580', 'Saint-Georges-en-Auge', '31T', 284871, 5430543, 48.9903, 0.0591639, 130),
('14581', 'Saint-Germain-d''Ectot', '30T', 666493, 5443519, 49.1219, -0.718057, 141),
('14582', 'Saint-Germain-de-Livet', '31T', 296878, 5441158, 49.0897, 0.217774, 160),
('14583', 'Saint-Germain-de-Montgommery', '31T', 293654, 5424892, 48.9425, 0.181938, 170),
('14584', 'Saint-Germain-de-Tallevende-la-Lande-Vaumont', '30T', 654084, 5407439, 48.8008, -0.901665, 180),
('14585', 'Saint-Germain-du-Crioult', '30T', 675669, 5414380, 48.8575, -0.604997, 162),
('14586', 'Saint-Germain-du-Pert', '30T', 642286, 5466697, 49.3364, -1.04139, 20),
('14587', 'Saint-Germain-la-Blanche-Herbe', '30T', 688886, 5451937, 49.1911, -0.407501, 60),
('14588', 'Saint-Germain-Langot', '30T', 696066, 5422479, 48.9242, -0.323327, 180),
('14589', 'Saint-Germain-le-Vasson', '30T', 697290, 5431024, 49.0006, -0.302496, 161),
('14590', 'Sainte-Honorine-de-Ducy', '30T', 661996, 5446074, 49.1461, -0.778616, 130),
('14591', 'Sainte-Honorine-des-Pertes', '30T', 659520, 5468500, 49.3483, -0.803615, 50),
('14592', 'Sainte-Honorine-du-Fay', '30T', 683175, 5439040, 49.0769, -0.491664, 115),
('14593', 'Saint-Hymer', '31T', 294273, 5459465, 49.2533, 0.172779, 60),
('14595', 'Saint-Jean-de-Livet', '31T', 297946, 5440934, 49.0881, 0.232496, 169),
('14596', 'Saint-Jean-des-Essartiers', '30T', 658042, 5434742, 49.0453, -0.837227, 125),
('14597', 'Saint-Jean-le-Blanc', '30T', 671936, 5422979, 48.9358, -0.652227, 220),
('14598', 'Saint-Jouin', '30T', 717331, 5455211, 49.2111, -0.0158361, 130),
('14599', 'Saint-Julien-de-Mailloc', '31T', 305234, 5440332, 49.085, 0.332494, 81),
('14600', 'Saint-Julien-le-Faucon', '31T', 287382, 5439227, 49.0692, 0.088891, 40),
('14601', 'Saint-Julien-sur-Calonne', '31T', 298441, 5463299, 49.2892, 0.228056, 50),
('14602', 'Saint-Lambert', '30T', 679578, 5423437, 48.9378, -0.547772, 190),
('14603', 'Saint-Laurent-de-Condel', '30T', 689051, 5435250, 49.0411, -0.413054, 120),
('14604', 'Saint-Laurent-du-Mont', '31T', 283453, 5447326, 49.1406, 0.0308295, 147),
('14605', 'Saint-Laurent-sur-Mer', '30T', 654123, 5469458, 49.3583, -0.877499, 48),
('14606', 'Saint-Léger-Dubosq', '30T', 716095, 5457296, 49.2303, -0.0316611, 40),
('14607', 'Saint-Louet-sur-Seulles', '30T', 670307, 5440885, 49.0972, -0.666938, 93),
('14608', 'Saint-Loup-de-Fribois', '31T', 281972, 5444230, 49.1122, 0.0122247, 20),
('14609', 'Saint-Loup-Hors', '30T', 666380, 5459339, 49.2642, -0.713055, 64),
('14610', 'Saint-Manvieu-Norrey', '30T', 682169, 5450443, 49.1797, -0.500276, 80),
('14611', 'Saint-Manvieu-Bocage', '30T', 648541, 5410163, 48.8267, -0.976115, 210),
('14613', 'Saint-Marcouf', '30T', 646187, 5457436, 49.2522, -0.991117, 40),
('14614', 'Sainte-Marguerite-d''Elle', '30T', 644174, 5452440, 49.2078, -1.02056, 46),
('14615', 'Sainte-Marguerite-des-Loges', '31T', 295732, 5433193, 49.0178, 0.206113, 130),
('14616', 'Sainte-Marguerite-de-Viette', '31T', 287283, 5432954, 49.0128, 0.090829, 109),
('14618', 'Sainte-Marie-Laumont', '30T', 653932, 5421061, 48.9233, -0.898611, 120),
('14619', 'Sainte-Marie-Outre-l''Eau', '30T', 644780, 5422237, 48.9361, -1.02305, 50),
('14620', 'Saint-Martin-aux-Chartrains', '31T', 293372, 5466177, 49.3133, 0.156945, 9),
('14621', 'Saint-Martin-de-Bienfaite-la-Cressonnière', '31T', 307362, 5435528, 49.0425, 0.363892, 102),
('14622', 'Saint-Martin-de-Blagny', '30T', 649207, 5457240, 49.2497, -0.949718, 31),
('14623', 'Saint-Martin-de-Fontenay', '30T', 691996, 5443481, 49.1142, -0.368893, 37),
('14625', 'Saint-Martin-de-la-Lieue', '31T', 297086, 5443500, 49.1108, 0.219443, 60),
('14626', 'Saint-Martin-de-Mailloc', '31T', 302782, 5441038, 49.0906, 0.298606, 90),
('14627', 'Saint-Martin-de-Mieux', '30T', 703301, 5416804, 48.8708, -0.227498, 201),
('14628', 'Saint-Martin-de-Sallen', '30T', 681322, 5426770, 48.9672, -0.522496, 150),
('14629', 'Saint-Martin-des-Besaces', '30T', 657643, 5430930, 49.0111, -0.844165, 210),
('14630', 'Saint-Martin-des-Entrées', '30T', 669379, 5459802, 49.2675, -0.671673, 60),
('14632', 'Saint-Martin-Don', '30T', 650594, 5421774, 48.9306, -0.943885, 120),
('14633', 'Saint-Martin-du-Mesnil-Oury', '31T', 290092, 5435166, 49.0336, 0.12805, 160),
('14634', 'Saint-Michel-de-Livet', '31T', 290330, 5433395, 49.0178, 0.132218, 150),
('14635', 'Saint-Omer', '30T', 686492, 5422490, 48.9272, -0.453887, 224),
('14636', 'Saint-Ouen-des-Besaces', '30T', 657467, 5432130, 49.0219, -0.846104, 160),
('14637', 'Saint-Ouen-du-Mesnil-Oger', '30T', 709936, 5448864, 49.1567, -0.120553, 10),
('14638', 'Saint-Ouen-le-Houx', '31T', 294205, 5428767, 48.9775, 0.187495, 126),
('14639', 'Saint-Ouen-le-Pin', '31T', 289135, 5447910, 49.1478, 0.108327, 160),
('14640', 'Saint-Pair', '30T', 705104, 5450105, 49.1694, -0.186111, 38),
('14643', 'Saint-Paul-du-Vernay', '30T', 663052, 5450834, 49.1886, -0.762219, 125),
('14644', 'Saint-Philbert-des-Champs', '31T', 302137, 5454168, 49.2083, 0.283333, 150),
('14645', 'Saint-Pierre-Azif', '31T', 285016, 5464457, 49.295, 0.0430561, 110),
('14646', 'Saint-Pierre-Canivet', '30T', 703789, 5423530, 48.9311, -0.217496, 150),
('14647', 'Saint-Pierre-de-Mailloc', '31T', 304034, 5438551, 49.0686, 0.31694, 90),
('14648', 'Saint-Pierre-des-Ifs', '31T', 293472, 5443479, 49.1094, 0.169993, 160),
('14649', 'Saint-Pierre-du-Bû', '30T', 704108, 5416493, 48.8678, -0.216662, 203),
('14650', 'Saint-Pierre-du-Fresne', '30T', 663837, 5433891, 49.0361, -0.75833, 210),
('14651', 'Saint-Pierre-du-Jonquet', '30T', 709619, 5450274, 49.1694, -0.124161, 8),
('14652', 'Saint-Pierre-du-Mont', '30T', 646857, 5472472, 49.3872, -0.976383, 37),
('14653', 'Saint-Pierre-la-Vieille', '30T', 677629, 5421335, 48.9194, -0.575277, 220),
('14654', 'Saint-Pierre-sur-Dives', '30T', 716869, 5433919, 49.02, -0.0336086, 30),
('14655', 'Saint-Pierre-Tarentaine', '30T', 661465, 5426003, 48.9658, -0.793895, 200),
('14656', 'Saint-Rémy', '30T', 683093, 5423026, 48.9331, -0.500005, 60),
('14657', 'Saint-Samson', '30T', 707020, 5452000, 49.1858, -0.158883, 18),
('14658', 'Saint-Sever-Calvados', '30T', 643241, 5411600, 48.8408, -1.04778, 210),
('14659', 'Saint-Sylvain', '30T', 703303, 5437331, 49.0553, -0.21722, 50),
('14660', 'Saint-Vaast-en-Auge', '31T', 281941, 5463929, 49.2892, 0.00111023, 134),
('14661', 'Saint-Vaast-sur-Seulles', '30T', 672847, 5445971, 49.1422, -0.629995, 70),
('14662', 'Saint-Vigor-des-Mézerets', '30T', 672921, 5420136, 48.91, -0.639994, 194),
('14663', 'Saint-Vigor-le-Grand', '30T', 668144, 5461185, 49.2803, -0.688053, 60),
('14664', 'Sallen', '30T', 658515, 5442358, 49.1136, -0.827774, 130),
('14665', 'Sallenelles', '30T', 701523, 5460422, 49.2633, -0.23, 5),
('14666', 'Sannerville', '30T', 702418, 5451489, 49.1828, -0.222219, 13),
('14667', 'Saon', '30T', 655870, 5459804, 49.2711, -0.857228, 12),
('14668', 'Saonnet', '30T', 654369, 5459978, 49.2731, -0.87778, 11),
('14669', 'Sassy', '30T', 709439, 5429800, 48.9856, -0.137226, 60),
('14670', 'Secqueville-en-Bessin', '30T', 680740, 5456331, 49.2331, -0.517216, 53),
('14671', 'Sept-Frères', '30T', 644539, 5414229, 48.8642, -1.02917, 180),
('14672', 'Sept-Vents', '30T', 659265, 5438146, 49.0756, -0.819164, 191),
('14674', 'Soignolles', '30T', 703915, 5434509, 49.0297, -0.210273, 70),
('14675', 'Soliers', '30T', 697443, 5446084, 49.1358, -0.29306, 32),
('14676', 'Sommervieu', '30T', 671152, 5462638, 49.2925, -0.646108, 52),
('14677', 'Soulangy', '30T', 703639, 5424823, 48.9428, -0.218896, 148),
('14678', 'Soumont-Saint-Quentin', '30T', 702393, 5428858, 48.9794, -0.233886, 141),
('14679', 'Subles', '30T', 663570, 5456566, 49.24, -0.75278, 50),
('14680', 'Sully', '30T', 664729, 5463122, 49.2986, -0.734172, 20),
('14681', 'Surrain', '30T', 655185, 5466181, 49.3286, -0.864161, 27),
('14682', 'Surville', '31T', 297323, 5464793, 49.3022, 0.211942, 40),
('14684', 'Tessel', '30T', 676873, 5447520, 49.155, -0.574163, 87),
('14685', 'Thaon', '30T', 684972, 5459284, 49.2583, -0.457779, 30),
('14686', 'Le Theil-Bocage', '30T', 667437, 5416878, 48.8822, -0.716111, 220),
('14687', 'Le Theil-en-Auge', '31T', 300187, 5469604, 49.3464, 0.248883, 130),
('14688', 'Thiéville', '30T', 717267, 5435697, 49.0358, -0.0272201, 28),
('14689', 'Thury-Harcourt', '30T', 684688, 5428952, 48.9858, -0.475561, 60),
('14690', 'Tierceville', '30T', 679528, 5463060, 49.2939, -0.530832, 13),
('14691', 'Tilly-la-Campagne', '30T', 696668, 5443367, 49.1117, -0.304997, 70),
('14692', 'Tilly-sur-Seulles', '30T', 673074, 5449718, 49.1758, -0.625275, 70),
('14693', 'Tordouet', '31T', 305054, 5436351, 49.0492, 0.331948, 120),
('14694', 'Le Torquesne', '31T', 293615, 5455409, 49.2167, 0.165835, 129),
('14695', 'Torteval-Quesnay', '30T', 665343, 5443979, 49.1264, -0.733617, 120),
('14696', 'Tortisambert', '31T', 288829, 5427608, 48.9653, 0.114721, 159),
('14697', 'L''Oudon', '31T', 283258, 5428843, 48.9744, 0.0380507, 60),
('14698', 'Touffréville', '30T', 702161, 5452408, 49.1911, -0.225279, 12),
('14699', 'Touques', '31T', 289605, 5469691, 49.3436, 0.10333, 5),
('14700', 'Tour-en-Bessin', '30T', 661603, 5462905, 49.2975, -0.777223, 40),
('14701', 'Tourgéville', '31T', 286872, 5467477, 49.3228, 0.0669372, 12),
('14702', 'Tournay-sur-Odon', '30T', 676403, 5441292, 49.0992, -0.583327, 120),
('14703', 'Tournebu', '30T', 694720, 5427749, 48.9719, -0.339163, 160),
('14704', 'Le Tourneur', '30T', 659454, 5425914, 48.9656, -0.821385, 150),
('14705', 'Tournières', '30T', 650671, 5455456, 49.2333, -0.930285, 64),
('14706', 'Tourville-en-Auge', '31T', 296662, 5467137, 49.3231, 0.201667, 50),
('14707', 'Tourville-sur-Odon', '30T', 682447, 5446311, 49.1425, -0.498338, 70),
('14708', 'Tracy-Bocage', '30T', 668708, 5438055, 49.0722, -0.690005, 135),
('14709', 'Tracy-sur-Mer', '30T', 671142, 5467490, 49.3361, -0.644166, 56),
('14710', 'Tréprel', '30T', 694440, 5419455, 48.8975, -0.34694, 210),
('14711', 'Trévières', '30T', 652262, 5463782, 49.3078, -0.905277, 10),
('14712', 'Troarn', '30T', 705275, 5451502, 49.1819, -0.183055, 30),
('14713', 'Trois-Monts', '30T', 683767, 5435876, 49.0483, -0.485002, 130),
('14714', 'Le Tronquay', '30T', 658369, 5455209, 49.2292, -0.824716, 85),
('14715', 'Trouville-sur-Mer', '31T', 288471, 5472239, 49.3661, 0.0863857, 50),
('14716', 'Trungy', '30T', 665530, 5451958, 49.1981, -0.727775, 78),
('14717', 'Truttemer-le-Grand', '30T', 660634, 5404688, 48.7744, -0.813608, 270),
('14718', 'Truttemer-le-Petit', '30T', 660701, 5404474, 48.7725, -0.812781, 274),
('14719', 'Urville', '30T', 697640, 5433757, 49.025, -0.296385, 90),
('14720', 'Ussy', '30T', 699059, 5425368, 48.9492, -0.281104, 177),
('14721', 'Vacognes-Neuilly', '30T', 680726, 5438805, 49.0756, -0.525272, 134),
('14722', 'La Vacquerie', '30T', 656476, 5439858, 49.0917, -0.856664, 120),
('14723', 'Valsemé', '31T', 289022, 5457129, 49.2306, 0.101942, 141),
('14724', 'Varaville', '30T', 706915, 5459633, 49.2544, -0.156387, 9),
('14726', 'Vassy', '30T', 670753, 5413764, 48.8533, -0.672218, 152),
('14727', 'Vaubadon', '30T', 657549, 5452713, 49.2069, -0.83695, 100),
('14728', 'Vaucelles', '30T', 664917, 5461582, 49.2847, -0.732223, 28),
('14729', 'Vaudeloges', '30T', 719110, 5425566, 48.9442, -0.00749933, 100),
('14730', 'Vaudry', '30T', 657504, 5412108, 48.8419, -0.853333, 231),
('14731', 'Vauville', '31T', 285917, 5466308, 49.3119, 0.0544396, 35),
('14732', 'Vaux-sur-Aure', '30T', 667199, 5463660, 49.3028, -0.700001, 30),
('14733', 'Vaux-sur-Seulles', '30T', 672574, 5459190, 49.2611, -0.628056, 30),
('14734', 'Vendes', '30T', 675156, 5446693, 49.1481, -0.59805, 102),
('14735', 'Vendeuvre', '30T', 714003, 5430716, 48.9922, -0.0744443, 30),
('14737', 'Versainville', '30T', 706875, 5422160, 48.9178, -0.176108, 132),
('14738', 'Verson', '30T', 686144, 5447949, 49.1561, -0.446941, 30),
('14739', 'Ver-sur-Mer', '30T', 679776, 5467828, 49.3367, -0.525277, 23),
('14740', 'La Vespière', '31T', 311007, 5432775, 49.0189, 0.415, 130),
('14741', 'Le Vey', '30T', 685023, 5421328, 48.9172, -0.474449, 50),
('14742', 'Vicques', '30T', 714006, 5425893, 48.9489, -0.0769396, 43),
('14743', 'Victot-Pontfol', '30T', 717288, 5450139, 49.1656, -0.0191666, 8),
('14744', 'Vienne-en-Bessin', '30T', 673963, 5461336, 49.28, -0.60805, 20),
('14745', 'Vierville-sur-Mer', '30T', 652259, 5471167, 49.3742, -0.902498, 44),
('14746', 'Viessoix', '30T', 661666, 5412072, 48.8406, -0.796665, 190),
('14747', 'Vieux', '30T', 687307, 5442331, 49.1053, -0.433616, 60),
('14748', 'Vieux-Bourg', '31T', 300245, 5465645, 49.3108, 0.251663, 110),
('14749', 'Vieux-Fumé', '30T', 710620, 5437821, 49.0572, -0.116942, 46),
('14750', 'Vieux-Pont-en-Auge', '31T', 283663, 5436094, 49.0397, 0.0397153, 69),
('14751', 'Vignats', '30T', 712449, 5415444, 48.8556, -0.103612, 120),
('14752', 'Villers-Bocage', '30T', 671343, 5438877, 49.0789, -0.653609, 150),
('14753', 'Villers-Canivet', '30T', 700985, 5424448, 48.9403, -0.255283, 160),
('14754', 'Villers-sur-Mer', '30T', 717552, 5467527, 49.3217, -0.00611345, 30),
('14755', 'Villerville', '31T', 291665, 5476044, 49.4014, 0.128329, 34),
('14756', 'La Villette', '30T', 680017, 5420546, 48.9117, -0.543059, 250),
('14757', 'Villiers-le-Sec', '30T', 677016, 5462577, 49.2903, -0.565562, 40),
('14758', 'Villons-les-Buissons', '30T', 688798, 5457467, 49.2408, -0.406107, 65),
('14759', 'Villy-lez-Falaise', '30T', 709886, 5420108, 48.8983, -0.136115, 100),
('14760', 'Villy-Bocage', '30T', 672221, 5440666, 49.0947, -0.640834, 150),
('14761', 'Vimont', '30T', 704530, 5444797, 49.1219, -0.196669, 23),
('14762', 'Vire', '30T', 655155, 5412227, 48.8436, -0.88528, 160),
('14763', 'Vouilly', '30T', 643507, 5461723, 49.2914, -1.02638, 40),
('14764', 'Pont-d''Ouilly', '30T', 689752, 5416480, 48.8722, -0.412218, 46),
('15001', 'Allanche', '31T', 495028, 5008287, 45.2281, 2.93666, 980),
('15002', 'Alleuze', '31T', 506638, 4978788, 44.9625, 3.08417, 880),
('15003', 'Ally', '31T', 446088, 5002527, 45.1742, 2.31389, 710),
('15004', 'Andelat', '31T', 505008, 4989864, 45.0622, 3.06361, 860),
('15005', 'Anglards-de-Saint-Flour', '31T', 512111, 4980832, 44.9808, 3.15361, 848),
('15006', 'Anglards-de-Salers', '31T', 456043, 5005845, 45.2047, 2.44028, 820),
('15007', 'Anterrieux', '31T', 503513, 4964776, 44.8364, 3.04445, 960),
('15008', 'Antignac', '31T', 464375, 5021130, 45.3428, 2.54527, 500),
('15009', 'Apchon', '31T', 476043, 5010460, 45.2472, 2.69472, 1080),
('15010', 'Arches', '31T', 447388, 5017144, 45.3058, 2.32888, 590),
('15011', 'Arnac', '31T', 439745, 4989685, 45.0581, 2.23472, 620),
('15012', 'Arpajon-sur-Cère', '31T', 457345, 4972107, 44.9011, 2.45973, 630),
('15013', 'Auriac-l''Église', '31T', 510024, 5012305, 45.2642, 3.12777, 600),
('15014', 'Aurillac', '31T', 456158, 4974954, 44.9267, 2.44445, 620),
('15015', 'Auzers', '31T', 457702, 5012623, 45.2658, 2.46083, 760),
('15016', 'Ayrens', '31T', 446806, 4981320, 44.9833, 2.32528, 600),
('15017', 'Badailhac', '31T', 470358, 4973947, 44.9183, 2.62444, 940),
('15018', 'Barriac-les-Bosquets', '31T', 441757, 4999140, 45.1433, 2.25917, 660),
('15019', 'Bassignac', '31T', 453539, 5018454, 45.3181, 2.40722, 400),
('15020', 'Beaulieu', '31T', 461841, 5033860, 45.4572, 2.51195, 662),
('15021', 'Boisset', '31T', 441125, 4958905, 44.7811, 2.25583, 420),
('15022', 'Bonnac', '31T', 512390, 5006045, 45.2078, 3.15777, 600),
('15024', 'Brageac', '31T', 444198, 5006093, 45.2061, 2.28944, 600),
('15025', 'Albepierre-Bredons', '31T', 489838, 4994222, 45.1014, 2.87084, 1060),
('15026', 'Brezons', '31T', 484841, 4979296, 44.9669, 2.80777, 820),
('15027', 'Calvinet', '31T', 449113, 4951801, 44.7178, 2.3575, 562),
('15028', 'Carlat', '31T', 465605, 4970576, 44.8878, 2.56445, 780),
('15029', 'Cassaniouze', '31T', 451158, 4948761, 44.6906, 2.38361, 540),
('15030', 'Cayrols', '31T', 439531, 4964690, 44.8331, 2.23499, 580),
('15031', 'Celles', '31T', 496832, 4996344, 45.1206, 2.95972, 894),
('15032', 'Celoux', '31T', 520768, 4999185, 45.1458, 3.26417, 1010),
('15033', 'Cézens', '31T', 488503, 4981171, 44.9839, 2.85417, 1100),
('15034', 'Chaliers', '31T', 517659, 4978161, 44.9567, 3.22389, 829),
('15035', 'Chalinargues', '31T', 494738, 5000264, 45.1558, 2.93305, 1060),
('15036', 'Chalvignac', '31T', 440832, 5010043, 45.2414, 2.24611, 520),
('15037', 'Champagnac', '31T', 453006, 5022810, 45.3572, 2.40001, 620),
('15038', 'Champs-sur-Tarentaine-Marchal', '31T', 465692, 5027079, 45.3964, 2.56167, 500),
('15040', 'Chanterelle', '31T', 485494, 5025213, 45.3803, 2.81472, 1000),
('15041', 'La Chapelle-d''Alagnon', '31T', 491915, 4994990, 45.1083, 2.89722, 880),
('15042', 'La Chapelle-Laurent', '31T', 519184, 5002759, 45.1781, 3.24416, 968),
('15043', 'Charmensac', '31T', 506936, 5007085, 45.2172, 3.08834, 927),
('15044', 'Chastel-sur-Murat', '31T', 488881, 4996877, 45.1253, 2.85861, 1120),
('15045', 'Chaudes-Aigues', '31T', 500351, 4966843, 44.855, 3.00444, 748),
('15046', 'Chaussenac', '31T', 443168, 5003047, 45.1786, 2.27667, 680),
('15047', 'Chavagnac', '31T', 490677, 5000083, 45.1542, 2.88139, 1100),
('15048', 'Chazelles', '31T', 526441, 4994855, 45.1067, 3.3361, 980),
('15049', 'Cheylade', '31T', 477903, 5006194, 45.2089, 2.71861, 960),
('15050', 'Le Claux', '31T', 476859, 5000952, 45.1617, 2.70556, 1020),
('15051', 'Clavières', '31T', 521877, 4981353, 44.9853, 3.2775, 1050),
('15052', 'Collandres', '31T', 473139, 5009206, 45.2358, 2.65778, 1080),
('15053', 'Coltines', '31T', 499191, 4993504, 45.095, 2.98972, 960),
('15054', 'Condat', '31T', 481219, 5020965, 45.3419, 2.76028, 740),
('15055', 'Coren', '31T', 508461, 4991503, 45.0769, 3.1075, 940),
('15056', 'Crandelles', '31T', 448098, 4978625, 44.9592, 2.34194, 664),
('15057', 'Cros-de-Montvert', '31T', 433115, 4989380, 45.0547, 2.15056, 571),
('15058', 'Cros-de-Ronesque', '31T', 469369, 4968829, 44.8722, 2.61222, 712),
('15059', 'Cussac', '31T', 494656, 4981039, 44.9828, 2.93222, 1060),
('15060', 'Deux-Verges', '31T', 501977, 4961320, 44.8053, 3.025, 1020),
('15061', 'Dienne', '31T', 483363, 5000561, 45.1583, 2.78833, 1080),
('15063', 'Drugeac', '31T', 451648, 5001773, 45.1678, 2.38472, 680),
('15064', 'Escorailles', '31T', 447311, 5002641, 45.1753, 2.32944, 700),
('15065', 'Espinasse', '31T', 495458, 4968634, 44.8711, 2.9425, 957),
('15066', 'Le Falgoux', '31T', 470306, 5000362, 45.1561, 2.62222, 920),
('15067', 'Le Fau', '31T', 467373, 4994544, 45.1036, 2.58528, 1000),
('15068', 'Faverolles', '31T', 511593, 4976357, 44.9406, 3.14694, 937),
('15069', 'Ferrières-Saint-Mary', '31T', 504670, 5003442, 45.1844, 3.05944, 680),
('15070', 'Fontanges', '31T', 460977, 4995876, 45.1153, 2.50388, 700),
('15071', 'Fournoulès', '31T', 442648, 4947226, 44.6761, 2.27639, 420),
('15072', 'Freix-Anglards', '31T', 451810, 4985570, 45.0219, 2.38834, 780),
('15073', 'Fridefont', '31T', 506755, 4972031, 44.9017, 3.08556, 920),
('15074', 'Giou-de-Mamou', '31T', 461619, 4975382, 44.9308, 2.51361, 740),
('15075', 'Girgols', '31T', 459174, 4987247, 45.0375, 2.48167, 920),
('15076', 'Glénat', '31T', 435371, 4972384, 44.9019, 2.18139, 600),
('15077', 'Gourdièges', '31T', 490751, 4975891, 44.9364, 2.88278, 1080),
('15078', 'Jabrun', '31T', 497035, 4961567, 44.8075, 2.96251, 1031),
('15079', 'Jaleyrac', '31T', 450684, 5012519, 45.2644, 2.37139, 480),
('15080', 'Joursac', '31T', 500611, 4998873, 45.1433, 3.00777, 880),
('15081', 'Jou-sous-Monjou', '31T', 473525, 4976155, 44.9383, 2.66445, 780),
('15082', 'Junhac', '31T', 456721, 4951159, 44.7125, 2.45361, 520),
('15083', 'Jussac', '31T', 454649, 4981661, 44.9869, 2.42472, 632),
('15084', 'Labesserette', '31T', 457360, 4954487, 44.7425, 2.4614, 560),
('15085', 'Labrousse', '31T', 463698, 4967100, 44.8564, 2.54055, 800),
('15086', 'Lacapelle-Barrès', '31T', 478126, 4975736, 44.9347, 2.72278, 1008),
('15087', 'Lacapelle-del-Fraisse', '31T', 455366, 4958728, 44.7806, 2.43584, 800),
('15088', 'Lacapelle-Viescamp', '31T', 441838, 4974513, 44.9217, 2.26305, 540),
('15089', 'Ladinhac', '31T', 461040, 4955760, 44.7542, 2.50778, 620),
('15090', 'Lafeuillade-en-Vézie', '31T', 457218, 4959611, 44.7886, 2.45917, 760),
('15091', 'Landeyrat', '31T', 489258, 5013355, 45.2736, 2.86305, 1100),
('15092', 'Lanobre', '31T', 463565, 5031535, 45.4364, 2.53417, 648),
('15093', 'Lapeyrugue', '31T', 463838, 4952812, 44.7278, 2.54334, 600),
('15094', 'Laroquebrou', '31T', 436234, 4979751, 44.9683, 2.19139, 447),
('15095', 'Laroquevieille', '31T', 461545, 4984918, 45.0167, 2.51195, 740),
('15096', 'Lascelle', '31T', 466758, 4985567, 45.0228, 2.57806, 749),
('15097', 'Lastic', '31T', 516563, 4995438, 45.1122, 3.21056, 1100),
('15098', 'Laurie', '31T', 507844, 5013659, 45.2764, 3.10001, 900),
('15099', 'Lavastrie', '31T', 503156, 4975576, 44.9336, 3.04, 970),
('15100', 'Laveissenet', '31T', 491321, 4992121, 45.0825, 2.88972, 1110),
('15101', 'Laveissière', '31T', 484859, 4995990, 45.1172, 2.8075, 960),
('15102', 'Lavigerie', '31T', 480410, 4998533, 45.14, 2.75084, 1100),
('15103', 'Leucamp', '31T', 463121, 4958278, 44.7769, 2.53389, 610),
('15104', 'Leynhac', '31T', 444624, 4954245, 44.7394, 2.30056, 453),
('15105', 'Leyvaux', '31T', 505509, 5017823, 45.3139, 3.07028, 800),
('15106', 'Lieutadès', '31T', 491965, 4965151, 44.8397, 2.89834, 934),
('15107', 'Lorcières', '31T', 521756, 4978297, 44.9578, 3.27584, 860),
('15108', 'Loubaresse', '31T', 516702, 4975628, 44.9339, 3.21167, 930),
('15110', 'Lugarde', '31T', 481354, 5015256, 45.2906, 2.76222, 1020),
('15111', 'Madic', '31T', 457613, 5025308, 45.38, 2.45861, 440),
('15112', 'Malbo', '31T', 480901, 4980140, 44.9744, 2.75778, 1120),
('15113', 'Mandailles-Saint-Julien', '31T', 472950, 4990475, 45.0672, 2.65639, 940),
('15114', 'Marcenat', '31T', 486477, 5016971, 45.3061, 2.8275, 1060),
('15116', 'Marchastel', '31T', 478389, 5014525, 45.2839, 2.72444, 920),
('15117', 'Marcolès', '31T', 448861, 4958838, 44.7811, 2.35361, 688),
('15118', 'Marmanhac', '31T', 459238, 4983543, 45.0042, 2.48278, 660),
('15119', 'Massiac', '31T', 515759, 5010989, 45.2522, 3.20083, 540),
('15120', 'Mauriac', '31T', 447767, 5007636, 45.2203, 2.33472, 700),
('15121', 'Maurines', '31T', 506714, 4968667, 44.8714, 3.085, 960),
('15122', 'Maurs', '31T', 436411, 4951111, 44.7106, 2.19722, 280),
('15123', 'Méallet', '31T', 455231, 5011344, 45.2542, 2.42945, 700),
('15124', 'Menet', '31T', 467396, 5015991, 45.2967, 2.58417, 700),
('15125', 'Mentières', '31T', 510868, 4990767, 45.0703, 3.13806, 900),
('15126', 'Molèdes', '31T', 503116, 5012205, 45.2633, 3.03972, 1080),
('15127', 'Molompize', '31T', 509965, 5008509, 45.23, 3.12694, 580),
('15128', 'La Monselie', '31T', 465256, 5019089, 45.3244, 2.55666, 740),
('15129', 'Montboudif', '31T', 479097, 5024305, 45.3719, 2.73305, 936),
('15130', 'Montchamp', '31T', 516006, 4990901, 45.0714, 3.20334, 1080),
('15131', 'Le Monteil', '31T', 460819, 5016245, 45.2986, 2.50027, 800),
('15132', 'Montgreleix', '31T', 489837, 5021131, 45.3436, 2.87028, 1220),
('15133', 'Montmurat', '31T', 436655, 4942283, 44.6311, 2.20139, 360),
('15134', 'Montsalvy', '31T', 460239, 4950612, 44.7078, 2.49806, 780),
('15135', 'Montvert', '31T', 433941, 4982613, 44.9939, 2.16194, 640),
('15136', 'Mourjou', '31T', 446866, 4948795, 44.6906, 2.32944, 471),
('15137', 'Moussages', '31T', 458402, 5009656, 45.2392, 2.47, 860),
('15138', 'Murat', '31T', 489555, 4995179, 45.11, 2.86722, 940),
('15139', 'Narnhac', '31T', 482529, 4975013, 44.9283, 2.77861, 1000),
('15140', 'Naucelles', '31T', 453838, 4978519, 44.9586, 2.41472, 640),
('15141', 'Neussargues-Moissac', '31T', 498515, 4997701, 45.1328, 2.98111, 780),
('15142', 'Neuvéglise', '31T', 498641, 4974866, 44.9272, 2.98278, 940),
('15143', 'Nieudan', '31T', 440344, 4981223, 44.9819, 2.24333, 600),
('15144', 'Omps', '31T', 442912, 4969565, 44.8772, 2.27722, 621),
('15145', 'Oradour', '31T', 494826, 4974004, 44.9194, 2.93444, 920),
('15146', 'Pailherols', '31T', 475108, 4977537, 44.9508, 2.68444, 1040),
('15147', 'Parlan', '31T', 434784, 4964242, 44.8286, 2.175, 600),
('15148', 'Paulhac', '31T', 492579, 4983726, 45.0069, 2.90583, 1110),
('15149', 'Paulhenc', '31T', 485588, 4970531, 44.8881, 2.8175, 920),
('15150', 'Pers', '31T', 439807, 4970705, 44.8872, 2.23777, 554),
('15151', 'Peyrusse', '31T', 502356, 5005508, 45.2031, 3.03, 920),
('15152', 'Pierrefort', '31T', 487285, 4974200, 44.9211, 2.83889, 940),
('15153', 'Pleaux', '31T', 439302, 4998237, 45.135, 2.22806, 631),
('15154', 'Polminhac', '31T', 466585, 4977730, 44.9522, 2.57639, 660),
('15155', 'Pradiers', '31T', 494073, 5012917, 45.2697, 2.92444, 1160),
('15156', 'Prunet', '31T', 457593, 4963280, 44.8217, 2.46361, 740),
('15157', 'Quézac', '31T', 435660, 4955254, 44.7478, 2.18722, 470),
('15158', 'Rageade', '31T', 521897, 4994621, 45.1047, 3.27833, 1048),
('15159', 'Raulhac', '31T', 472805, 4971776, 44.8989, 2.65556, 740),
('15160', 'Reilhac', '31T', 454374, 4979966, 44.9717, 2.42139, 660),
('15161', 'Rézentières', '31T', 508169, 4997952, 45.135, 3.10389, 1040),
('15162', 'Riom-ès-Montagnes', '31T', 473052, 5014452, 45.2831, 2.65639, 840),
('15163', 'Roannes-Saint-Mary', '31T', 451869, 4967270, 44.8572, 2.39083, 600),
('15164', 'Roffiac', '31T', 502953, 4988876, 45.0533, 3.0375, 840),
('15165', 'Rouffiac', '31T', 432073, 4986058, 45.0247, 2.13778, 540),
('15166', 'Roumégoux', '31T', 436768, 4967216, 44.8556, 2.19973, 630),
('15167', 'Rouziers', '31T', 438140, 4959241, 44.7839, 2.21806, 540),
('15168', 'Ruynes-en-Margeride', '31T', 517601, 4983283, 45.0028, 3.22333, 901),
('15169', 'Saignes', '31T', 459213, 5020390, 45.3358, 2.47945, 500),
('15170', 'Saint-Amandin', '31T', 476323, 5021105, 45.3431, 2.69778, 800),
('15171', 'Sainte-Anastasie', '31T', 497665, 5002206, 45.1733, 2.97028, 900),
('15172', 'Saint-Antoine', '31T', 447646, 4955392, 44.75, 2.33861, 680),
('15173', 'Saint-Bonnet-de-Condat', '31T', 483421, 5014108, 45.2803, 2.78861, 900),
('15174', 'Saint-Bonnet-de-Salers', '31T', 457079, 5001024, 45.1614, 2.45389, 880),
('15175', 'Saint-Cernin', '31T', 454510, 4989747, 45.0597, 2.42223, 762),
('15176', 'Saint-Chamant', '31T', 455999, 4993286, 45.0917, 2.44083, 740),
('15178', 'Saint-Cirgues-de-Jordanne', '31T', 467133, 4986213, 45.0286, 2.58278, 760),
('15179', 'Saint-Cirgues-de-Malbert', '31T', 450586, 4991412, 45.0744, 2.37223, 580),
('15180', 'Saint-Clément', '31T', 473300, 4980106, 44.9739, 2.66139, 1018),
('15181', 'Saint-Constant', '31T', 439113, 4948246, 44.685, 2.23167, 260),
('15182', 'Saint-Étienne-Cantalès', '31T', 438929, 4977472, 44.9481, 2.22584, 540),
('15183', 'Saint-Étienne-de-Carlat', '31T', 466536, 4972515, 44.9053, 2.57611, 780),
('15184', 'Saint-Étienne-de-Maurs', '31T', 437319, 4951750, 44.7164, 2.20861, 280),
('15185', 'Saint-Étienne-de-Chomeil', '31T', 468837, 5021200, 45.3436, 2.60222, 740),
('15186', 'Sainte-Eulalie', '31T', 450798, 4996317, 45.1186, 2.37444, 644),
('15187', 'Saint-Flour', '31T', 507461, 4986812, 45.0347, 3.09472, 860),
('15188', 'Saint-Georges', '31T', 510286, 4985242, 45.0206, 3.13055, 800),
('15189', 'Saint-Gérons', '31T', 438098, 4977727, 44.9503, 2.21527, 480),
('15190', 'Saint-Hippolyte', '31T', 476841, 5007957, 45.2247, 2.70501, 1002),
('15191', 'Saint-Illide', '31T', 446114, 4990090, 45.0622, 2.31556, 660),
('15192', 'Saint-Jacques-des-Blats', '31T', 477252, 4988885, 45.0531, 2.71111, 980),
('15194', 'Saint-Julien-de-Toursac', '31T', 437513, 4958136, 44.7739, 2.21027, 500),
('15195', 'Saint-Just', '31T', 516407, 4970752, 44.89, 3.20777, 920),
('15196', 'Saint-Mamet-la-Salvetat', '31T', 445109, 4967263, 44.8567, 2.30528, 720),
('15197', 'Saint-Marc', '31T', 515110, 4972045, 44.9017, 3.19139, 980),
('15198', 'Sainte-Marie', '31T', 490895, 4969225, 44.8764, 2.88472, 820),
('15199', 'Saint-Martial', '31T', 503576, 4968911, 44.8736, 3.04527, 900),
('15200', 'Saint-Martin-Cantalès', '31T', 444963, 4993618, 45.0939, 2.30055, 620),
('15201', 'Saint-Martin-sous-Vigouroux', '31T', 484501, 4974391, 44.9228, 2.80361, 760),
('15202', 'Saint-Martin-Valmeroux', '31T', 455038, 4996409, 45.1197, 2.42834, 651),
('15203', 'Saint-Mary-le-Plain', '31T', 512831, 5003731, 45.1869, 3.16333, 862),
('15204', 'Saint-Paul-des-Landes', '31T', 446001, 4976791, 44.9425, 2.31555, 550),
('15205', 'Saint-Paul-de-Salers', '31T', 462087, 4998678, 45.1406, 2.51778, 780),
('15206', 'Saint-Pierre', '31T', 452099, 5026612, 45.3914, 2.38806, 592),
('15207', 'Saint-Poncy', '31T', 514539, 5001297, 45.165, 3.185, 840),
('15208', 'Saint-Projet-de-Salers', '31T', 462925, 4992563, 45.0856, 2.52889, 800),
('15209', 'Saint-Rémy-de-Chaudes-Aigues', '31T', 502528, 4957802, 44.7736, 3.03195, 1100),
('15211', 'Saint-Santin-Cantalès', '31T', 441533, 4986644, 45.0308, 2.25778, 620),
('15212', 'Saint-Santin-de-Maurs', '31T', 437823, 4944617, 44.6522, 2.21583, 340),
('15213', 'Saint-Saturnin', '31T', 483785, 5011546, 45.2572, 2.79334, 960),
('15214', 'Saint-Saury', '31T', 432062, 4968529, 44.8669, 2.14, 700),
('15215', 'Saint-Simon', '31T', 459931, 4978848, 44.9619, 2.49195, 680),
('15216', 'Saint-Urcize', '31T', 500308, 4949286, 44.6969, 3.00389, 1113),
('15217', 'Saint-Victor', '31T', 443570, 4984341, 45.0103, 2.28389, 600),
('15218', 'Saint-Vincent-de-Salers', '31T', 463198, 5005861, 45.2053, 2.53138, 680),
('15219', 'Salers', '31T', 460273, 4998627, 45.14, 2.49472, 940),
('15220', 'Salins', '31T', 452192, 5004361, 45.1911, 2.39139, 640),
('15221', 'Sansac-de-Marmiesse', '31T', 448490, 4970105, 44.8825, 2.34778, 557),
('15222', 'Sansac-Veinazès', '31T', 456215, 4954372, 44.7414, 2.44694, 580),
('15223', 'Sauvat', '31T', 456367, 5018125, 45.3153, 2.44333, 540),
('15224', 'La Ségalassière', '31T', 437422, 4971314, 44.8925, 2.2075, 560),
('15225', 'Ségur-les-Villas', '31T', 485694, 5007807, 45.2236, 2.81778, 1047),
('15226', 'Sénezergues', '31T', 453436, 4950194, 44.7036, 2.41222, 440),
('15227', 'Sériers', '31T', 503088, 4980174, 44.975, 3.03916, 1000),
('15228', 'Siran', '31T', 431158, 4978322, 44.955, 2.12722, 620),
('15229', 'Soulages', '31T', 521444, 4992954, 45.0897, 3.2725, 990),
('15230', 'Sourniac', '31T', 448362, 5013742, 45.2753, 2.34166, 686),
('15231', 'Talizat', '31T', 503714, 4995603, 45.1139, 3.04722, 987),
('15232', 'Tanavelle', '31T', 499869, 4985697, 45.0247, 2.99834, 1072),
('15233', 'Teissières-de-Cornet', '31T', 449377, 4979633, 44.9683, 2.35805, 660),
('15234', 'Teissières-lès-Bouliès', '31T', 463809, 4963427, 44.8233, 2.54222, 740),
('15235', 'Les Ternes', '31T', 501182, 4982580, 44.9967, 3.015, 980),
('15236', 'Thiézac', '31T', 473779, 4984825, 45.0164, 2.66722, 800),
('15237', 'Tiviers', '31T', 512553, 4989721, 45.0608, 3.15944, 860),
('15238', 'Tournemire', '31T', 459208, 4989067, 45.0539, 2.48195, 780),
('15240', 'Trémouille', '31T', 474552, 5024476, 45.3733, 2.675, 700),
('15241', 'La Trinitat', '31T', 495228, 4955089, 44.7492, 2.93972, 1220),
('15242', 'Le Trioulou', '31T', 435747, 4946334, 44.6675, 2.18944, 380),
('15243', 'Trizac', '31T', 463752, 5011166, 45.2531, 2.53805, 960),
('15244', 'Ussel', '31T', 494993, 4991840, 45.08, 2.93638, 1020),
('15245', 'Vabres', '31T', 516410, 4986921, 45.0356, 3.20834, 910),
('15246', 'Valette', '31T', 469079, 5012835, 45.2683, 2.60583, 900),
('15247', 'Valjouze', '31T', 504825, 5001251, 45.1647, 3.0614, 900),
('15248', 'Valuéjols', '31T', 494794, 4989001, 45.0544, 2.93388, 1064),
('15249', 'Le Vaulmier', '31T', 466156, 5004178, 45.1903, 2.56916, 800),
('15250', 'Vebret', '31T', 462523, 5020802, 45.3397, 2.52166, 480),
('15251', 'Védrines-Saint-Loup', '31T', 522347, 4990951, 45.0717, 3.28389, 1035),
('15252', 'Velzic', '31T', 464950, 4983263, 45.0019, 2.55527, 720),
('15253', 'Vernols', '31T', 491452, 5008136, 45.2267, 2.89111, 1156),
('15254', 'Veyrières', '31T', 451047, 5019893, 45.3308, 2.37528, 600),
('15255', 'Vézac', '31T', 462142, 4971151, 44.8928, 2.52056, 680),
('15256', 'Vèze', '31T', 499433, 5012574, 45.2667, 2.99277, 1080),
('15257', 'Vezels-Roussy', '31T', 467160, 4961558, 44.8067, 2.58472, 735),
('15258', 'Vic-sur-Cère', '31T', 470456, 4980766, 44.9797, 2.62528, 672),
('15259', 'Vieillespesse', '31T', 511884, 4997002, 45.1264, 3.15112, 960),
('15260', 'Vieillevie', '31T', 454161, 4943801, 44.6461, 2.42195, 215),
('15261', 'Le Vigean', '31T', 449387, 5008364, 45.2269, 2.35528, 720),
('15262', 'Villedieu', '31T', 505123, 4983261, 45.0028, 3.065, 940),
('15263', 'Virargues', '31T', 493009, 4996871, 45.1253, 2.9111, 1040),
('15264', 'Vitrac', '31T', 445860, 4962566, 44.8144, 2.31528, 580),
('15265', 'Ydes', '31T', 457363, 5020402, 45.3358, 2.45584, 460),
('15266', 'Yolet', '31T', 463239, 4975064, 44.9281, 2.53416, 680),
('15267', 'Ytrac', '31T', 449703, 4973706, 44.915, 2.36278, 591),
('15268', 'Le Rouget', '31T', 439488, 4967036, 44.8542, 2.23417, 600),
('15269', 'Besse', '31T', 448747, 4993926, 45.0969, 2.34861, 720),
('16001', 'Abzac', '31T', 322472, 5107970, 46.1022, 0.703057, 190),
('16002', 'Les Adjots', '31T', 284134, 5106293, 46.0761, 0.208327, 126),
('16003', 'Agris', '31T', 292860, 5072718, 45.7769, 0.335551, 80),
('16004', 'Aignes-et-Puypéroux', '31T', 276646, 5036973, 45.4506, 0.143616, 144),
('16005', 'Aigre', '31T', 268239, 5086784, 45.8956, 0.0124966, 66),
('16007', 'Alloue', '31T', 307756, 5099856, 46.0253, 0.516106, 150),
('16008', 'Ambérac', '31T', 272249, 5081999, 45.8539, 0.0663841, 60),
('16009', 'Ambernac', '31T', 309580, 5094795, 45.9803, 0.541668, 183),
('16010', 'Ambleville', '30T', 716858, 5048115, 45.5528, -0.221665, 50),
('16011', 'Anais', '31T', 283023, 5072714, 45.7739, 0.209167, 80),
('16012', 'Angeac-Champagne', '30T', 710795, 5054118, 45.6086, -0.296664, 70),
('16013', 'Angeac-Charente', '30T', 727878, 5057252, 45.6314, -0.0763946, 20),
('16014', 'Angeduc', '30T', 730400, 5039977, 45.4753, -0.0522179, 100),
('16015', 'Angoulême', '31T', 278311, 5059408, 45.6528, 0.154716, 86),
('16016', 'Ansac-sur-Vienne', '31T', 317652, 5096126, 45.9944, 0.645279, 140),
('16017', 'Anville', '30T', 724404, 5079003, 45.8281, -0.110836, 120),
('16018', 'Ars', '30T', 703933, 5057752, 45.6433, -0.38305, 10),
('16019', 'Asnières-sur-Nouère', '31T', 270112, 5066256, 45.7117, 0.0463833, 70),
('16020', 'Aubeterre-sur-Dronne', '31T', 278036, 5017149, 45.2728, 0.170276, 90),
('16021', 'Aubeville', '30T', 732720, 5042473, 45.4969, -0.0213923, 89),
('16023', 'Aunac', '31T', 285997, 5088677, 45.9183, 0.240282, 70),
('16024', 'Aussac-Vadalle', '31T', 282506, 5077707, 45.8186, 0.200276, 150),
('16025', 'Baignes-Sainte-Radegonde', '30T', 716375, 5029344, 45.3842, -0.236113, 80),
('16026', 'Balzac', '31T', 275118, 5065795, 45.7092, 0.110831, 70),
('16027', 'Barbezières', '30T', 725554, 5088347, 45.9117, -0.0916678, 89),
('16028', 'Barbezieux-Saint-Hilaire', '30T', 722596, 5039356, 45.4722, -0.152219, 100),
('16029', 'Bardenac', '30T', 734248, 5020652, 45.3003, -0.0122269, 120),
('16030', 'Barret', '30T', 718990, 5040527, 45.4839, -0.197774, 80),
('16031', 'Barro', '31T', 285295, 5097632, 45.9986, 0.227224, 80),
('16032', 'Bassac', '30T', 725428, 5060871, 45.6647, -0.106111, 20),
('16033', 'Bayers', '31T', 285080, 5088987, 45.9208, 0.228332, 100),
('16034', 'Bazac', '31T', 268503, 5013010, 45.2325, 0.0508307, 70),
('16035', 'Beaulieu-sur-Sonnette', '31T', 297074, 5089138, 45.9258, 0.382778, 140),
('16036', 'Bécheresse', '31T', 272174, 5042603, 45.4997, 0.0838881, 160),
('16037', 'Bellon', '31T', 274276, 5020589, 45.3025, 0.120836, 110),
('16038', 'Benest', '31T', 302919, 5101337, 46.0372, 0.453059, 157),
('16039', 'Bernac', '31T', 280845, 5102702, 46.0428, 0.167497, 120),
('16040', 'Berneuil', '30T', 729168, 5030817, 45.3933, -0.0722242, 130),
('16041', 'Bessac', '30T', 733148, 5035042, 45.43, -0.0194468, 90),
('16042', 'Bessé', '31T', 273119, 5093340, 45.9561, 0.072217, 100),
('16043', 'Bignac', '31T', 271627, 5075656, 45.7967, 0.061387, 50),
('16044', 'Bioussac', '31T', 289135, 5100990, 46.03, 0.275275, 110),
('16045', 'Birac', '30T', 729187, 5049358, 45.56, -0.0633296, 76),
('16046', 'Blanzac-Porcheresse', '31T', 267627, 5040112, 45.4758, 0.0269451, 80),
('16047', 'Blanzaguet-Saint-Cybard', '31T', 290535, 5038749, 45.4708, 0.320278, 107),
('16048', 'Boisbreteau', '30T', 723311, 5022851, 45.3236, -0.150557, 128),
('16049', 'Bonnes', '31T', 276357, 5013470, 45.2392, 0.150554, 49),
('16050', 'Bonneuil', '30T', 723077, 5050868, 45.5756, -0.140831, 90),
('16051', 'Bonneville', '30T', 729822, 5080283, 45.8378, -0.0405625, 80),
('16052', 'Bors(Canton de Montmoreau-Saint-Cybard)', '31T', 278071, 5024965, 45.3431, 0.167221, 143),
('16053', 'Bors(Canton de Baignes-Sainte-Radegonde)', '30T', 719540, 5022224, 45.3192, -0.198894, 100),
('16054', 'Le Bouchage', '31T', 298325, 5102320, 46.0447, 0.393335, 170),
('16055', 'Bouëx', '31T', 290860, 5054958, 45.6167, 0.317504, 130),
('16056', 'Bourg-Charente', '30T', 716114, 5061437, 45.6728, -0.225281, 20),
('16057', 'Bouteville', '30T', 722978, 5053645, 45.6006, -0.14083, 77),
('16058', 'Boutiers-Saint-Trojan', '30T', 710319, 5065657, 45.7125, -0.297772, 45),
('16059', 'Brettes', '31T', 270889, 5098861, 46.005, 0.0408338, 93),
('16060', 'Bréville', '30T', 712764, 5075132, 45.7969, -0.262228, 22),
('16061', 'Brie', '31T', 285282, 5068619, 45.7378, 0.240006, 110),
('16062', 'Brie-sous-Barbezieux', '30T', 731403, 5034576, 45.4264, -0.0419438, 118),
('16063', 'Brie-sous-Chalais', '31T', 290723, 5021512, 45.3159, 0.329994, 110),
('16064', 'Brigueuil', '31T', 334092, 5091091, 45.9533, 0.859163, 290),
('16065', 'Brillac', '31T', 327990, 5103242, 46.0611, 0.776106, 211),
('16066', 'Brossac', '30T', 731625, 5023799, 45.3294, -0.044166, 150),
('16067', 'Bunzac', '31T', 293682, 5064256, 45.7011, 0.349717, 110),
('16068', 'Cellefrouin', '31T', 297556, 5085415, 45.8925, 0.390558, 100),
('16069', 'Cellettes', '31T', 278610, 5082943, 45.8644, 0.147781, 90),
('16070', 'Chabanais', '31T', 322947, 5082567, 45.8739, 0.718608, 160),
('16071', 'Chabrac', '31T', 324663, 5089066, 45.9328, 0.738328, 213),
('16072', 'Chadurie', '31T', 276217, 5042025, 45.4958, 0.135835, 150),
('16073', 'Chalais', '31T', 267751, 5017488, 45.2725, 0.0391706, 60),
('16074', 'Challignac', '30T', 728551, 5033420, 45.4169, -0.0788897, 110),
('16075', 'Champagne-Vigny', '31T', 268368, 5043700, 45.5083, 0.0347194, 103),
('16076', 'Champagne-Mouton', '31T', 299430, 5096599, 45.9936, 0.410006, 147),
('16077', 'Champmillon', '31T', 266381, 5058545, 45.6411, 0.00221953, 60),
('16078', 'Champniers', '31T', 282429, 5066246, 45.7156, 0.204442, 80);
INSERT INTO `ods_communes` (`oc_code_insee`, `oc_nom`, `oc_secteur`, `oc_x_utm`, `oc_y_utm`, `oc_latitude`, `oc_longitude`, `oc_altitude`) VALUES
('16079', 'Chantillac', '30T', 715938, 5023027, 45.3275, -0.244448, 120),
('16081', 'La Chapelle', '31T', 269908, 5080603, 45.8406, 0.0369376, 50),
('16082', 'Charmant', '31T', 280014, 5041859, 45.4956, 0.184448, 140),
('16083', 'Charmé', '31T', 276542, 5092628, 45.9508, 0.116664, 80),
('16084', 'Charras', '31T', 298220, 5046560, 45.5433, 0.415277, 195),
('16085', 'Chasseneuil-sur-Bonnieure', '31T', 301905, 5077736, 45.8247, 0.449719, 117),
('16086', 'Chassenon', '31T', 326520, 5079964, 45.8514, 0.76555, 210),
('16087', 'Chassiecq', '31T', 297029, 5092353, 45.9547, 0.380836, 160),
('16088', 'Chassors', '30T', 717251, 5064257, 45.6978, -0.209439, 40),
('16089', 'Châteaubernard', '30T', 709146, 5061261, 45.6733, -0.314719, 30),
('16090', 'Châteauneuf-sur-Charente', '30T', 729917, 5053711, 45.5989, -0.0519394, 30),
('16091', 'Châtignac', '30T', 734274, 5025844, 45.3469, -0.00943893, 160),
('16092', 'Chavenat', '31T', 278645, 5037551, 45.4564, 0.168889, 160),
('16093', 'Chazelles', '31T', 294766, 5058381, 45.6486, 0.366108, 90),
('16094', 'Chenommet', '31T', 286392, 5090765, 45.9372, 0.24444, 80),
('16095', 'Chenon', '31T', 286341, 5091786, 45.9464, 0.243327, 80),
('16096', 'Cherves-Châtelars', '31T', 309432, 5075987, 45.8111, 0.547221, 200),
('16097', 'Cherves-Richemont', '30T', 705989, 5068941, 45.7433, -0.351948, 57),
('16098', 'La Chèvrerie', '31T', 278533, 5103031, 46.045, 0.1375, 120),
('16099', 'Chillac', '30T', 728520, 5027672, 45.3653, -0.0819479, 150),
('16100', 'Chirac', '31T', 318085, 5087434, 45.9164, 0.654168, 170),
('16101', 'Claix', '31T', 269994, 5048337, 45.5506, 0.0533295, 110),
('16102', 'Cognac', '30T', 708263, 5063703, 45.6956, -0.324997, 21),
('16103', 'Combiers', '31T', 298040, 5040975, 45.4931, 0.415275, 100),
('16104', 'Condac', '31T', 285458, 5100469, 46.0242, 0.228052, 90),
('16105', 'Condéon', '30T', 723915, 5032234, 45.4078, -0.138606, 80),
('16106', 'Confolens', '31T', 319753, 5098041, 46.0122, 0.671665, 150),
('16107', 'Coulgens', '31T', 288986, 5076401, 45.8089, 0.284166, 82),
('16108', 'Coulonges', '31T', 274156, 5079797, 45.8347, 0.0919481, 90),
('16109', 'Courbillac', '30T', 719179, 5072204, 45.7686, -0.18111, 40),
('16110', 'Courcôme', '31T', 277844, 5096444, 45.9856, 0.131671, 110),
('16111', 'Courgeac', '31T', 271683, 5030879, 45.3942, 0.0830534, 100),
('16112', 'Courlac', '31T', 271094, 5020641, 45.3019, 0.0802779, 80),
('16113', 'La Couronne', '31T', 273805, 5054657, 45.6086, 0.0991632, 60),
('16114', 'Couture', '31T', 289466, 5089856, 45.93, 0.284448, 100),
('16115', 'Cressac-Saint-Genis', '31T', 266444, 5036942, 45.4469, 0.0133364, 90),
('16116', 'Criteuil-la-Magdeleine', '30T', 717419, 5046342, 45.5367, -0.215274, 50),
('16117', 'Curac', '31T', 266885, 5020053, 45.2953, 0.02694, 80),
('16118', 'Deviat', '31T', 265977, 5033746, 45.4181, 0.00889198, 100),
('16119', 'Dignac', '31T', 287430, 5048462, 45.5572, 0.276388, 150),
('16120', 'Dirac', '31T', 285205, 5053821, 45.6047, 0.245556, 140),
('16121', 'Douzat', '31T', 266636, 5066509, 45.7128, 0.001663, 70),
('16122', 'Ébréon', '31T', 270006, 5091353, 45.9372, 0.0330533, 90),
('16123', 'Échallat', '30T', 730123, 5067501, 45.7228, -0.0427773, 96),
('16124', 'Écuras', '31T', 310494, 5061899, 45.6847, 0.566392, 218),
('16125', 'Édon', '31T', 293181, 5040546, 45.4878, 0.353336, 150),
('16127', 'Empuré', '31T', 271882, 5100679, 46.0217, 0.0527734, 111),
('16128', 'Épenède', '31T', 309585, 5104000, 46.0631, 0.538059, 168),
('16129', 'Éraville', '30T', 727416, 5050900, 45.5744, -0.0852751, 70),
('16130', 'Les Essards', '31T', 273659, 5013720, 45.2406, 0.116108, 120),
('16131', 'Esse', '31T', 323752, 5100149, 46.0322, 0.722501, 220),
('16132', 'Étagnac', '31T', 327757, 5084840, 45.8956, 0.779724, 240),
('16133', 'Étriac', '30T', 732309, 5045950, 45.5283, -0.0249978, 120),
('16134', 'Exideuil', '31T', 319435, 5084213, 45.8878, 0.672774, 160),
('16135', 'Eymouthiers', '31T', 309084, 5057587, 45.6456, 0.549995, 240),
('16136', 'La Faye', '31T', 279164, 5100228, 46.02, 0.146944, 130),
('16137', 'Feuillade', '31T', 302676, 5053616, 45.6081, 0.46945, 110),
('16138', 'Fléac', '31T', 273841, 5061021, 45.6658, 0.0966689, 50),
('16139', 'Fleurac', '30T', 726845, 5067164, 45.7208, -0.0850039, 70),
('16140', 'Fontclaireau', '31T', 282916, 5086313, 45.8961, 0.201667, 110),
('16141', 'Fontenille', '31T', 280169, 5088542, 45.9153, 0.165279, 80),
('16142', 'La Forêt-de-Tessé', '31T', 274399, 5107076, 46.08, 0.0822206, 140),
('16143', 'Fouquebrune', '31T', 282179, 5045399, 45.5281, 0.210551, 150),
('16144', 'Fouqueure', '31T', 273021, 5085370, 45.8844, 0.0747245, 60),
('16145', 'Foussignac', '30T', 723929, 5066410, 45.715, -0.122775, 70),
('16146', 'Garat', '31T', 286747, 5056426, 45.6286, 0.264167, 100),
('16147', 'Gardes-le-Pontaroux', '31T', 289482, 5044284, 45.5203, 0.304447, 120),
('16148', 'Genac', '31T', 268897, 5076066, 45.7994, 0.0261098, 63),
('16149', 'Genouillac', '31T', 311364, 5080561, 45.8528, 0.570275, 200),
('16150', 'Gensac-la-Pallue', '30T', 714141, 5058990, 45.6514, -0.251661, 16),
('16151', 'Genté', '30T', 709465, 5056267, 45.6283, -0.312778, 70),
('16152', 'Gimeux', '30T', 704828, 5056885, 45.6353, -0.371942, 20),
('16153', 'Gondeville', '30T', 722073, 5061399, 45.6706, -0.148884, 14),
('16154', 'Gond-Pontouvre', '31T', 279592, 5060691, 45.6647, 0.170555, 30),
('16155', 'Les Gours', '30T', 727106, 5094244, 45.9642, -0.0688885, 85),
('16156', 'Gourville', '30T', 731711, 5079458, 45.8297, -0.0166675, 70),
('16157', 'Le Grand-Madieu', '31T', 301904, 5090495, 45.9394, 0.444448, 173),
('16158', 'Grassac', '31T', 297442, 5051343, 45.5861, 0.403339, 177),
('16160', 'Guimps', '30T', 715116, 5038137, 45.4636, -0.248335, 60),
('16161', 'Guizengeard', '30T', 726780, 5020348, 45.3, -0.107494, 80),
('16162', 'Gurat', '31T', 286366, 5034410, 45.4306, 0.268889, 95),
('16163', 'Hiersac', '31T', 266785, 5061806, 45.6706, 0.00583335, 70),
('16164', 'Hiesse', '31T', 313684, 5103041, 46.0556, 0.591384, 190),
('16165', 'Houlette', '30T', 716791, 5071224, 45.7606, -0.212224, 30),
('16166', 'L''Isle-d''Espagnac', '31T', 281364, 5060567, 45.6642, 0.193331, 60),
('16167', 'Jarnac', '30T', 719950, 5062621, 45.6822, -0.175554, 30),
('16168', 'Jauldes', '31T', 286841, 5073725, 45.7842, 0.257772, 123),
('16169', 'Javrezac', '30T', 705539, 5064230, 45.7011, -0.359724, 20),
('16170', 'Juignac', '31T', 277945, 5028800, 45.3775, 0.163891, 150),
('16171', 'Juillac-le-Coq', '30T', 713575, 5052080, 45.5894, -0.261944, 60),
('16172', 'Juillaguet', '31T', 282066, 5039625, 45.4761, 0.211671, 170),
('16173', 'Juillé', '31T', 278521, 5090115, 45.9289, 0.143329, 80),
('16174', 'Julienne', '30T', 715546, 5064074, 45.6967, -0.231395, 30),
('16175', 'Jurignac', '30T', 731359, 5046379, 45.5325, -0.0369446, 120),
('16176', 'Lachaise', '30T', 715560, 5045475, 45.5294, -0.239438, 30),
('16177', 'Ladiville', '30T', 729238, 5044385, 45.5153, -0.0650056, 50),
('16178', 'Lagarde-sur-le-Né', '30T', 718653, 5043944, 45.5147, -0.200558, 50),
('16179', 'Lamérac', '30T', 717135, 5035086, 45.4356, -0.223886, 80),
('16180', 'Laprade', '31T', 279124, 5017698, 45.2781, 0.183886, 45),
('16181', 'Lessac', '31T', 320189, 5104114, 46.0669, 0.675001, 150),
('16182', 'Lesterps', '31T', 328334, 5097827, 46.0125, 0.7825, 230),
('16183', 'Lésignac-Durand', '31T', 316492, 5075866, 45.8119, 0.638056, 247),
('16184', 'Lichères', '31T', 284902, 5086954, 45.9025, 0.22695, 70),
('16185', 'Ligné', '31T', 275892, 5089561, 45.9231, 0.109722, 70),
('16186', 'Lignières-Sonneville', '30T', 719885, 5049086, 45.5606, -0.182494, 53),
('16187', 'Linars', '31T', 272810, 5060069, 45.6569, 0.0838953, 60),
('16188', 'Le Lindois', '31T', 312666, 5068598, 45.7456, 0.591672, 282),
('16189', 'Londigny', '31T', 278667, 5107353, 46.0839, 0.137221, 130),
('16190', 'Longré', '30T', 731384, 5098544, 46.0014, -0.0116698, 80),
('16191', 'Lonnes', '31T', 280368, 5091100, 45.9383, 0.166671, 120),
('16192', 'Roumazières-Loubert', '31T', 311723, 5085956, 45.9014, 0.572782, 180),
('16193', 'Louzac-Saint-André', '30T', 701364, 5065484, 45.7136, -0.412778, 60),
('16194', 'Lupsault', '30T', 726724, 5091727, 45.9417, -0.0750037, 90),
('16195', 'Lussac', '31T', 303158, 5081805, 45.8617, 0.464171, 154),
('16196', 'Luxé', '31T', 276375, 5086206, 45.8931, 0.117506, 70),
('16197', 'La Magdeleine', '31T', 273680, 5103888, 46.0511, 0.0744492, 150),
('16198', 'Magnac-Lavalette-Villars', '31T', 285285, 5042233, 45.5006, 0.251667, 170),
('16199', 'Magnac-sur-Touvre', '31T', 284853, 5060600, 45.6656, 0.238053, 50),
('16200', 'Maine-de-Boixe', '31T', 280607, 5081420, 45.8514, 0.174171, 91),
('16201', 'Mainfonds', '31T', 267196, 5044887, 45.5186, 0.0191725, 90),
('16202', 'Mainxe', '30T', 719128, 5058267, 45.6433, -0.188059, 27),
('16203', 'Mainzac', '31T', 303524, 5047504, 45.5533, 0.482773, 160),
('16204', 'Malaville', '30T', 726484, 5049074, 45.5583, -0.0980508, 70),
('16205', 'Manot', '31T', 316859, 5090435, 45.9431, 0.637226, 160),
('16206', 'Mansle', '31T', 280963, 5084157, 45.8761, 0.177505, 68),
('16207', 'Marcillac-Lanville', '31T', 268581, 5081487, 45.8481, 0.0194475, 60),
('16208', 'Mareuil', '30T', 722245, 5072931, 45.7742, -0.141392, 70),
('16209', 'Marillac-le-Franc', '31T', 300077, 5067909, 45.7358, 0.430274, 112),
('16210', 'Marsac', '31T', 272722, 5069528, 45.7419, 0.0783383, 45),
('16211', 'Marthon', '31T', 300682, 5054328, 45.6139, 0.443612, 101),
('16212', 'Massignac', '31T', 317705, 5072310, 45.7803, 0.654998, 252),
('16213', 'Mazerolles', '31T', 308223, 5069012, 45.7481, 0.534442, 315),
('16214', 'Mazières', '31T', 311266, 5078742, 45.8364, 0.569726, 200),
('16215', 'Médillac', '31T', 266515, 5012960, 45.2314, 0.025562, 70),
('16216', 'Mérignac', '30T', 727278, 5064800, 45.6994, -0.0805546, 40),
('16217', 'Merpins', '30T', 702834, 5061546, 45.6778, -0.395556, 20),
('16218', 'Mesnac', '30T', 705387, 5072752, 45.7778, -0.358061, 15),
('16220', 'Les Métairies', '30T', 719903, 5065184, 45.7053, -0.174996, 30),
('16221', 'Mons', '30T', 731637, 5083750, 45.8683, -0.0155547, 90),
('16222', 'Montboyer', '31T', 270730, 5023219, 45.325, 0.0744479, 80),
('16223', 'Montbron', '31T', 305268, 5060269, 45.6686, 0.499998, 130),
('16224', 'Montchaude', '30T', 718997, 5036572, 45.4483, -0.199447, 110),
('16226', 'Montignac-Charente', '31T', 276434, 5074091, 45.7842, 0.123886, 44),
('16227', 'Montignac-le-Coq', '31T', 282397, 5024041, 45.3361, 0.22278, 128),
('16228', 'Montigné', '30T', 727054, 5078606, 45.8236, -0.076949, 100),
('16229', 'Montjean', '31T', 277284, 5107743, 46.0869, 0.119173, 140),
('16230', 'Montmoreau-Saint-Cybard', '31T', 276028, 5033689, 45.4208, 0.137217, 100),
('16231', 'Montrollet', '31T', 336956, 5094288, 45.9828, 0.895005, 290),
('16232', 'Mornac', '31T', 287637, 5062204, 45.6808, 0.27305, 80),
('16233', 'Mosnac', '30T', 732412, 5056028, 45.6189, -0.0188872, 24),
('16234', 'Moulidars', '30T', 730743, 5060694, 45.6614, -0.0380552, 90),
('16236', 'Mouthiers-sur-Boëme', '31T', 275635, 5048843, 45.5569, 0.125273, 70),
('16237', 'Mouton', '31T', 286303, 5085670, 45.8914, 0.245562, 71),
('16238', 'Moutonneau', '31T', 285826, 5087479, 45.9075, 0.238614, 80),
('16239', 'Mouzon', '31T', 314640, 5075335, 45.8067, 0.614444, 280),
('16240', 'Nabinaud', '31T', 281350, 5018362, 45.2847, 0.21194, 52),
('16241', 'Nanclars', '31T', 284156, 5080430, 45.8436, 0.220272, 100),
('16242', 'Nanteuil-en-Vallée', '31T', 292640, 5097689, 46.0014, 0.321948, 110),
('16243', 'Nercillac', '30T', 714398, 5065981, 45.7142, -0.245281, 13),
('16244', 'Nersac', '31T', 270268, 5056949, 45.6281, 0.0527829, 30),
('16245', 'Nieuil', '31T', 306172, 5083656, 45.8792, 0.502216, 140),
('16246', 'Nonac', '31T', 269568, 5033767, 45.4194, 0.0547182, 133),
('16247', 'Nonaville', '30T', 727908, 5046932, 45.5386, -0.0808266, 90),
('16248', 'Oradour', '30T', 730144, 5087898, 45.9061, -0.0327783, 80),
('16249', 'Oradour-Fanais', '31T', 328514, 5109683, 46.1192, 0.780553, 183),
('16250', 'Orgedeuil', '31T', 304914, 5062782, 45.6911, 0.494448, 150),
('16251', 'Oriolles', '30T', 725097, 5027178, 45.3619, -0.125827, 130),
('16252', 'Orival', '31T', 270428, 5017915, 45.2772, 0.0730559, 100),
('16253', 'Paizay-Naudouin-Embourie', '30T', 731930, 5101779, 46.0303, -0.00305625, 94),
('16254', 'Palluaud', '31T', 284470, 5025422, 45.3492, 0.248605, 80),
('16255', 'Parzac', '31T', 299711, 5090010, 45.9344, 0.416389, 140),
('16256', 'Passirac', '30T', 729950, 5025500, 45.3453, -0.0647223, 150),
('16257', 'Péreuil', '30T', 732616, 5040584, 45.48, -0.0236168, 70),
('16258', 'Pérignac', '31T', 271597, 5038699, 45.4644, 0.0783285, 159),
('16259', 'La Péruse', '31T', 315317, 5082821, 45.8742, 0.620279, 245),
('16260', 'Pillac', '31T', 279868, 5022770, 45.3239, 0.191107, 90),
('16261', 'Les Pins', '31T', 297209, 5077455, 45.8208, 0.389443, 110),
('16262', 'Plaizac', '30T', 723725, 5070883, 45.7553, -0.123327, 90),
('16263', 'Plassac-Rouffiac', '31T', 270763, 5045621, 45.5264, 0.0644402, 140),
('16264', 'Pleuville', '31T', 306288, 5107192, 46.0908, 0.494173, 160),
('16267', 'Poullignac', '30T', 733228, 5031708, 45.4, -0.0200036, 100),
('16268', 'Poursac', '31T', 287468, 5093199, 45.9594, 0.257224, 80),
('16269', 'Pranzac', '31T', 293506, 5060894, 45.6708, 0.348888, 86),
('16270', 'Pressignac', '31T', 324715, 5077173, 45.8258, 0.743335, 238),
('16271', 'Puymoyen', '31T', 280192, 5054954, 45.6133, 0.180838, 138),
('16272', 'Puyréaux', '31T', 283559, 5082490, 45.8619, 0.211666, 100),
('16273', 'Raix', '31T', 276420, 5098164, 46.0006, 0.112505, 130),
('16274', 'Rancogne', '31T', 297666, 5063600, 45.6964, 0.401114, 100),
('16275', 'Ranville-Breuillaud', '30T', 723459, 5087220, 45.9022, -0.119171, 110),
('16276', 'Reignac', '30T', 720356, 5033808, 45.4231, -0.183327, 100),
('16277', 'Réparsac', '30T', 715114, 5067829, 45.7306, -0.235272, 23),
('16279', 'Rioux-Martin', '31T', 264816, 5014846, 45.2478, 0.00305559, 50),
('16280', 'Rivières', '31T', 294762, 5070090, 45.7539, 0.361105, 91),
('16281', 'La Rochefoucauld', '31T', 296657, 5068514, 45.7403, 0.386106, 80),
('16282', 'La Rochette', '31T', 290901, 5075533, 45.8017, 0.309161, 76),
('16283', 'Ronsenac', '31T', 285044, 5039646, 45.4772, 0.249719, 102),
('16284', 'Rouffiac', '31T', 271264, 5016896, 45.2683, 0.0841701, 145),
('16285', 'Rougnac', '31T', 293812, 5045870, 45.5358, 0.359162, 170),
('16286', 'Rouillac', '30T', 728261, 5073396, 45.7764, -0.0638939, 108),
('16287', 'Roullet-Saint-Estèphe', '31T', 269612, 5052090, 45.5842, 0.0466732, 50),
('16289', 'Roussines', '31T', 314863, 5066123, 45.7239, 0.620837, 238),
('16290', 'Rouzède', '31T', 309581, 5064615, 45.7089, 0.553613, 230),
('16291', 'Ruelle-sur-Touvre', '31T', 283542, 5062129, 45.6789, 0.220562, 45),
('16292', 'Ruffec', '31T', 283277, 5100885, 46.0272, 0.199718, 100),
('16293', 'Saint-Adjutory', '31T', 303552, 5071073, 45.7653, 0.473612, 196),
('16294', 'Saint-Amant', '31T', 277385, 5030829, 45.3956, 0.155833, 130),
('16295', 'Saint-Amant-de-Boixe', '31T', 277466, 5075722, 45.7992, 0.136394, 70),
('16296', 'Saint-Amant-de-Bonnieure', '31T', 289866, 5081315, 45.8533, 0.293337, 73),
('16297', 'Graves-Saint-Amant', '30T', 726395, 5058712, 45.645, -0.0947176, 23),
('16298', 'Saint-Amant-de-Nouère', '31T', 266817, 5070180, 45.7458, 0.00221909, 90),
('16300', 'Saint-Angeau', '31T', 289502, 5080771, 45.8483, 0.288892, 92),
('16301', 'Saint-Aulais-la-Chapelle', '30T', 730642, 5036927, 45.4478, -0.050557, 80),
('16302', 'Saint-Avit', '31T', 268736, 5014609, 45.2469, 0.0530514, 110),
('16303', 'Saint-Bonnet', '30T', 726808, 5040094, 45.4775, -0.0980608, 66),
('16304', 'Saint-Brice', '30T', 712051, 5063089, 45.6889, -0.276666, 20),
('16306', 'Saint-Christophe', '31T', 333596, 5096664, 46.0033, 0.850829, 270),
('16307', 'Saint-Ciers-sur-Bonnieure', '31T', 286004, 5082034, 45.8586, 0.24333, 70),
('16308', 'Saint-Claud', '31T', 303455, 5085719, 45.8969, 0.466393, 151),
('16309', 'Sainte-Colombe', '31T', 291561, 5079095, 45.8339, 0.316106, 90),
('16310', 'Saint-Coutant', '31T', 302582, 5097548, 46.0031, 0.450276, 175),
('16312', 'Saint-Cybardeaux', '30T', 731186, 5072670, 45.7689, -0.0266678, 90),
('16314', 'Saint-Eutrope', '31T', 273988, 5033236, 45.4161, 0.111383, 180),
('16315', 'Saint-Félix', '31T', 265666, 5028905, 45.3744, 0.00722247, 140),
('16316', 'Saint-Fort-sur-le-Né', '30T', 710284, 5050609, 45.5772, -0.304721, 30),
('16317', 'Saint-Fraigne', '30T', 731501, 5093140, 45.9528, -0.0127761, 76),
('16318', 'Saint-Front', '31T', 289632, 5085865, 45.8942, 0.288336, 90),
('16320', 'Saint-Genis-d''Hiersac', '31T', 268959, 5070749, 45.7517, 0.0294474, 130),
('16321', 'Saint-Georges', '31T', 288639, 5094674, 45.9731, 0.271667, 100),
('16322', 'Saint-Germain-de-Confolens', '31T', 320938, 5102516, 46.0528, 0.685279, 150),
('16323', 'Saint-Germain-de-Montbron', '31T', 298796, 5055686, 45.6256, 0.418887, 120),
('16325', 'Saint-Gourson', '31T', 292409, 5092105, 45.9511, 0.321392, 110),
('16326', 'Saint-Groux', '31T', 280424, 5086617, 45.8981, 0.169444, 60),
('16328', 'Saint-Laurent-de-Belzagot', '31T', 274405, 5030286, 45.3897, 0.118056, 140),
('16329', 'Saint-Laurent-de-Céris', '31T', 304626, 5090717, 45.9422, 0.479438, 160),
('16330', 'Saint-Laurent-de-Cognac', '30T', 701791, 5063675, 45.6972, -0.40805, 20),
('16331', 'Saint-Laurent-des-Combes', '31T', 267877, 5026846, 45.3567, 0.0363894, 100),
('16332', 'Saint-Léger', '31T', 268797, 5038245, 45.4594, 0.0427729, 124),
('16334', 'Saint-Martial', '31T', 269483, 5028456, 45.3717, 0.0561153, 106),
('16335', 'Saint-Martin-du-Clocher', '31T', 279988, 5104617, 46.0597, 0.15555, 110),
('16336', 'Saint-Mary', '31T', 297167, 5078816, 45.8331, 0.38833, 100),
('16337', 'Saint-Maurice-des-Lions', '31T', 321748, 5092609, 45.9639, 0.69944, 200),
('16338', 'Saint-Médard', '30T', 723697, 5043844, 45.5122, -0.136105, 90),
('16339', 'Auge-Saint-Médard', '30T', 726269, 5081172, 45.8469, -0.085837, 95),
('16340', 'Saint-Même-les-Carrières', '30T', 722494, 5058695, 45.6461, -0.144723, 50),
('16341', 'Saint-Michel', '31T', 274646, 5058118, 45.64, 0.108334, 50),
('16342', 'Saint-Palais-du-Né', '30T', 713389, 5046729, 45.5414, -0.266662, 31),
('16343', 'Saint-Preuil', '30T', 720629, 5053221, 45.5975, -0.171105, 90),
('16344', 'Saint-Projet-Saint-Constant', '31T', 294646, 5068519, 45.7397, 0.360281, 115),
('16345', 'Saint-Quentin-sur-Charente', '31T', 319038, 5078726, 45.8383, 0.669725, 220),
('16346', 'Saint-Quentin-de-Chalais', '31T', 270001, 5015768, 45.2578, 0.0686134, 90),
('16347', 'Saint-Romain', '31T', 276207, 5017862, 45.2786, 0.146667, 90),
('16348', 'Saint-Saturnin', '31T', 269735, 5060738, 45.6619, 0.044162, 99),
('16349', 'Sainte-Sévère', '30T', 714698, 5071708, 45.7656, -0.238892, 19),
('16350', 'Saint-Séverin', '31T', 284640, 5021462, 45.3136, 0.252496, 100),
('16351', 'Saint-Simeux', '30T', 731759, 5056684, 45.625, -0.0269398, 25),
('16352', 'Saint-Simon', '30T', 727822, 5059382, 45.6506, -0.0761155, 22),
('16353', 'Saint-Sornin', '31T', 300408, 5063388, 45.6953, 0.436385, 129),
('16354', 'Sainte-Souline', '30T', 733636, 5029529, 45.3803, -0.0158294, 140),
('16355', 'Saint-Sulpice-de-Cognac', '30T', 703616, 5070747, 45.7603, -0.381662, 17),
('16356', 'Saint-Sulpice-de-Ruffec', '31T', 291897, 5090979, 45.9408, 0.315282, 110),
('16357', 'Saint-Vallier', '30T', 730351, 5019890, 45.2947, -0.06222, 120),
('16358', 'Saint-Yrieix-sur-Charente', '31T', 276675, 5061506, 45.6711, 0.132782, 50),
('16359', 'Salles-d''Angles', '30T', 707964, 5055135, 45.6186, -0.332496, 50),
('16360', 'Salles-de-Barbezieux', '30T', 724394, 5037102, 45.4514, -0.130274, 70),
('16361', 'Salles-de-Villefagnan', '31T', 280039, 5093367, 45.9586, 0.161391, 90),
('16362', 'Salles-Lavalette', '31T', 283467, 5029195, 45.3828, 0.234162, 80),
('16363', 'Saulgond', '31T', 328207, 5090943, 45.9506, 0.783334, 200),
('16364', 'Sauvagnac', '31T', 317066, 5068962, 45.75, 0.648051, 277),
('16365', 'Sauvignac', '30T', 728892, 5015604, 45.2567, -0.0827795, 100),
('16366', 'Segonzac', '30T', 716778, 5055435, 45.6186, -0.219439, 60),
('16368', 'Sers', '31T', 291138, 5052910, 45.5983, 0.321943, 160),
('16369', 'Sigogne', '30T', 721093, 5068842, 45.7378, -0.15806, 64),
('16370', 'Sireuil', '31T', 266999, 5055927, 45.6178, 0.0113908, 25),
('16371', 'Sonneville', '30T', 722791, 5076411, 45.8053, -0.132774, 96),
('16372', 'Souffrignac', '31T', 305395, 5051832, 45.5928, 0.504997, 130),
('16373', 'Souvigné', '31T', 272168, 5095013, 45.9708, 0.0591649, 100),
('16374', 'Soyaux', '31T', 282093, 5058471, 45.6456, 0.203617, 130),
('16375', 'Suaux', '31T', 306251, 5080657, 45.8522, 0.50444, 191),
('16376', 'Suris', '31T', 316532, 5080128, 45.8503, 0.636948, 200),
('16377', 'La Tâche', '31T', 294709, 5082852, 45.8686, 0.354994, 130),
('16378', 'Taizé-Aizie', '31T', 286576, 5104756, 46.0631, 0.24056, 100),
('16379', 'Taponnat-Fleurignac', '31T', 298591, 5072776, 45.7792, 0.409167, 109),
('16380', 'Le Tâtre', '30T', 718786, 5030756, 45.3961, -0.204726, 90),
('16381', 'Theil-Rabier', '31T', 270941, 5103742, 46.0489, 0.039161, 140),
('16382', 'Torsac', '31T', 282822, 5049516, 45.5653, 0.216948, 110),
('16383', 'Tourriers', '31T', 281823, 5075475, 45.7983, 0.192504, 112),
('16384', 'Touvérac', '30T', 718954, 5029063, 45.3808, -0.203333, 92),
('16385', 'Touvre', '31T', 285979, 5060592, 45.6658, 0.252494, 70),
('16386', 'Touzac', '30T', 721999, 5048234, 45.5522, -0.155827, 80),
('16387', 'Triac-Lautrait', '30T', 724636, 5062418, 45.6789, -0.11555, 20),
('16388', 'Trois-Palis', '31T', 270517, 5058423, 45.6414, 0.0552785, 30),
('16389', 'Turgon', '31T', 298562, 5091808, 45.9503, 0.400827, 170),
('16390', 'Tusson', '31T', 272665, 5090946, 45.9344, 0.0675019, 120),
('16391', 'Tuzie', '31T', 279716, 5095202, 45.975, 0.156383, 120),
('16392', 'Valence', '31T', 291232, 5085347, 45.89, 0.309162, 80),
('16393', 'Vars', '31T', 276284, 5071717, 45.7628, 0.123057, 50),
('16394', 'Vaux-Lavalette', '31T', 283592, 5033455, 45.4211, 0.233887, 150),
('16395', 'Vaux-Rouillac', '30T', 726213, 5069675, 45.7436, -0.0919424, 100),
('16396', 'Ventouse', '31T', 292938, 5086031, 45.8967, 0.330832, 110),
('16397', 'Verdille', '30T', 724531, 5085034, 45.8822, -0.10639, 100),
('16398', 'Verneuil', '31T', 320797, 5072343, 45.7814, 0.694728, 275),
('16399', 'Verrières', '30T', 713273, 5050124, 45.5719, -0.266666, 60),
('16400', 'Verteuil-sur-Charente', '31T', 285424, 5095773, 45.9819, 0.229723, 90),
('16401', 'Vervant', '31T', 276551, 5079741, 45.835, 0.122773, 90),
('16402', 'Vibrac', '30T', 728867, 5058678, 45.6439, -0.0630527, 20),
('16403', 'Le Vieux-Cérier', '31T', 301958, 5093521, 45.9667, 0.443893, 160),
('16404', 'Vieux-Ruffec', '31T', 297894, 5098380, 46.0092, 0.389439, 140),
('16405', 'Vignolles', '30T', 727433, 5043855, 45.5111, -0.0883312, 106),
('16406', 'Vilhonneur', '31T', 299043, 5062011, 45.6825, 0.41944, 100),
('16408', 'Villebois-Lavalette', '31T', 287237, 5040220, 45.4831, 0.277497, 150),
('16409', 'Villefagnan', '31T', 273988, 5099396, 46.0108, 0.0805539, 120),
('16410', 'Villegats', '31T', 282598, 5096892, 45.9911, 0.192773, 120),
('16411', 'Villejésus', '31T', 269461, 5086553, 45.8939, 0.0283381, 70),
('16412', 'Villejoubert', '31T', 280418, 5076081, 45.8033, 0.174171, 120),
('16413', 'Villiers-le-Roux', '31T', 276075, 5103491, 46.0483, 0.105555, 130),
('16414', 'Villognon', '31T', 274756, 5082650, 45.8606, 0.0983296, 60),
('16415', 'Vindelle', '31T', 275857, 5067066, 45.7208, 0.119726, 40),
('16416', 'Vitrac-Saint-Vincent', '31T', 305454, 5074504, 45.7967, 0.496667, 154),
('16417', 'Viville', '30T', 724876, 5044875, 45.5211, -0.120557, 50),
('16419', 'Vouharte', '31T', 272678, 5077781, 45.8161, 0.0738922, 51),
('16420', 'Voulgézac', '31T', 274954, 5043769, 45.5111, 0.118891, 114),
('16421', 'Vouthon', '31T', 302307, 5060455, 45.6694, 0.461945, 100),
('16422', 'Vouzan', '31T', 293692, 5053412, 45.6036, 0.354443, 130),
('16423', 'Xambes', '31T', 275295, 5079045, 45.8283, 0.106946, 100),
('16424', 'Yviers', '30T', 734875, 5017863, 45.275, -0.00556119, 60),
('16425', 'Yvrac-et-Malleyrand', '31T', 301599, 5069498, 45.7506, 0.449166, 140),
('17002', 'Agudelle', '30T', 697864, 5028890, 45.3856, -0.472504, 72),
('17003', 'Aigrefeuille-d''Aunis', '30T', 659644, 5109147, 46.1172, -0.933892, 20),
('17004', 'Île-d''Aix', '30T', 641432, 5097059, 46.0125, -1.17305, 5),
('17005', 'Allas-Bocage', '30T', 696367, 5028750, 45.3847, -0.491664, 70),
('17006', 'Allas-Champagne', '30T', 708401, 5038714, 45.4708, -0.33389, 67),
('17007', 'Anais', '30T', 661412, 5117038, 46.1878, -0.908338, 16),
('17008', 'Andilly', '30T', 652056, 5124118, 46.2536, -1.02722, 16),
('17009', 'Angliers', '30T', 658023, 5119543, 46.2111, -0.951388, 10),
('17010', 'Angoulins', '30T', 646088, 5107574, 46.1061, -1.10972, 5),
('17011', 'Annepont', '30T', 685164, 5079715, 45.8461, -0.615282, 20),
('17012', 'Annezay', '30T', 677072, 5097671, 46.0097, -0.712782, 50),
('17013', 'Antezant-la-Chapelle', '30T', 696795, 5095489, 45.9847, -0.459162, 25),
('17015', 'Arces', '30T', 667053, 5046712, 45.5539, -0.859719, 20),
('17016', 'Archiac', '30T', 710818, 5044418, 45.5214, -0.300552, 100),
('17017', 'Archingeay', '30T', 677792, 5089105, 45.9325, -0.706672, 24),
('17018', 'Ardillières', '30T', 663250, 5102787, 46.0592, -0.889439, 16),
('17019', 'Ars-en-Ré', '30T', 614534, 5118174, 46.2075, -1.51528, 3),
('17020', 'Arthenac', '30T', 709716, 5043608, 45.5144, -0.314994, 72),
('17021', 'Arvert', '30T', 645710, 5066959, 45.7408, -1.12695, 20),
('17022', 'Asnières-la-Giraud', '30T', 692304, 5084782, 45.8897, -0.521386, 40),
('17023', 'Aujac', '30T', 702272, 5080126, 45.845, -0.394996, 24),
('17024', 'Aulnay', '30T', 705394, 5099848, 46.0214, -0.346383, 55),
('17025', 'Aumagne', '30T', 701513, 5083531, 45.8758, -0.403335, 38),
('17026', 'Authon-Ébéon', '30T', 701286, 5079229, 45.8372, -0.408056, 20),
('17027', 'Avy', '30T', 694370, 5047531, 45.5542, -0.509718, 50),
('17028', 'Aytré', '30T', 645798, 5110717, 46.1344, -1.1125, 10),
('17029', 'Bagnizeau', '30T', 708621, 5085219, 45.8889, -0.31111, 49),
('17030', 'Balanzac', '30T', 668117, 5067586, 45.7414, -0.838886, 34),
('17031', 'Ballans', '30T', 715996, 5077283, 45.8153, -0.219726, 72),
('17032', 'Ballon', '30T', 658481, 5102601, 46.0586, -0.951116, 9),
('17033', 'La Barde', '30T', 732770, 5000914, 45.1233, -0.0402786, 50),
('17034', 'Barzan', '30T', 667459, 5043696, 45.5267, -0.855553, 10),
('17035', 'Bazauges', '30T', 719208, 5089076, 45.9203, -0.173059, 84),
('17036', 'Beaugeay', '30T', 655637, 5082362, 45.8772, -0.994444, 8),
('17037', 'Beauvais-sur-Matha', '30T', 718172, 5084837, 45.8825, -0.188329, 125),
('17038', 'Bedenac', '30T', 712297, 5004861, 45.1653, -0.298617, 60),
('17039', 'Belluire', '30T', 690485, 5045403, 45.5361, -0.560276, 20),
('17040', 'La Benâte', '30T', 688031, 5098274, 46.0122, -0.571113, 70),
('17041', 'Benon', '30T', 668559, 5119238, 46.2058, -0.815006, 22),
('17042', 'Bercloux', '30T', 696329, 5078946, 45.8361, -0.471939, 50),
('17043', 'Bernay-Saint-Martin', '30T', 684047, 5104115, 46.0658, -0.620276, 30),
('17044', 'Berneuil', '30T', 686894, 5057311, 45.6442, -0.601669, 60),
('17045', 'Beurlay', '30T', 668013, 5080987, 45.8619, -0.835557, 20),
('17046', 'Bignay', '30T', 685897, 5087645, 45.9172, -0.602783, 40),
('17047', 'Biron', '30T', 696871, 5049432, 45.5706, -0.476941, 42),
('17048', 'Blanzac-lès-Matha', '30T', 705596, 5083418, 45.8736, -0.350827, 40),
('17049', 'Blanzay-sur-Boutonne', '30T', 698932, 5102663, 46.0486, -0.428609, 33),
('17050', 'Bois', '30T', 687672, 5040006, 45.4883, -0.598339, 40),
('17051', 'Le Bois-Plage-en-Ré', '30T', 624115, 5116138, 46.1875, -1.39167, 5),
('17052', 'Boisredon', '30T', 692886, 5020859, 45.3147, -0.539167, 40),
('17053', 'Bords', '30T', 670987, 5085021, 45.8975, -0.795838, 10),
('17054', 'Boresse-et-Martron', '30T', 726499, 5018453, 45.2831, -0.111939, 70),
('17055', 'Boscamnant', '30T', 730377, 5008984, 45.1967, -0.0669429, 80),
('17056', 'Bougneau', '30T', 693745, 5052299, 45.5972, -0.515827, 31),
('17057', 'Bouhet', '30T', 665251, 5114700, 46.1658, -0.859442, 12),
('17058', 'Bourcefranc-le-Chapus', '30T', 644119, 5078656, 45.8464, -1.14389, 6),
('17059', 'Bourgneuf', '30T', 652506, 5114648, 46.1683, -1.02445, 31),
('17060', 'Boutenac-Touvent', '30T', 674827, 5040253, 45.4939, -0.762499, 50),
('17061', 'Bran', '30T', 714422, 5025323, 45.3486, -0.262776, 71),
('17062', 'Bresdon', '30T', 720434, 5084330, 45.8772, -0.159446, 81),
('17063', 'Breuil-la-Réorte', '30T', 677060, 5104065, 46.0672, -0.710562, 50),
('17064', 'Breuillet', '30T', 651607, 5061881, 45.6939, -1.05277, 25),
('17065', 'Breuil-Magné', '30T', 658075, 5094128, 45.9825, -0.959169, 21),
('17066', 'Brie-sous-Archiac', '30T', 710938, 5038892, 45.4717, -0.301394, 100),
('17067', 'Brie-sous-Matha', '30T', 713539, 5077755, 45.8203, -0.251107, 45),
('17068', 'Brie-sous-Mortagne', '30T', 676191, 5040414, 45.495, -0.744998, 50),
('17069', 'Brives-sur-Charente', '30T', 697899, 5060801, 45.6725, -0.459163, 10),
('17070', 'Brizambourg', '30T', 695708, 5077413, 45.8225, -0.48055, 60),
('17071', 'La Brousse', '30T', 704737, 5085243, 45.8903, -0.361106, 60),
('17072', 'Burie', '30T', 700309, 5072030, 45.7728, -0.423612, 60),
('17073', 'Bussac-sur-Charente', '30T', 683882, 5072727, 45.7836, -0.634442, 15),
('17074', 'Bussac-Forêt', '30T', 706450, 5009951, 45.2128, -0.37083, 62),
('17075', 'Cabariot', '30T', 666180, 5088164, 45.9269, -0.856671, 10),
('17076', 'Celles', '30T', 704939, 5053490, 45.6047, -0.371947, 30),
('17077', 'Cercoux', '30T', 719637, 5001188, 45.13, -0.206942, 80),
('17078', 'Chadenac', '30T', 699640, 5046276, 45.5414, -0.442778, 40),
('17079', 'Chaillevette', '30T', 651030, 5066005, 45.7311, -1.05889, 5),
('17080', 'Chambon', '30T', 666160, 5110462, 46.1275, -0.849161, 21),
('17081', 'Chamouillac', '30T', 698681, 5020915, 45.3136, -0.465284, 60),
('17082', 'Champagnac', '30T', 704812, 5033468, 45.4247, -0.381941, 50),
('17083', 'Champagne', '30T', 662405, 5077626, 45.8331, -0.908887, 10),
('17084', 'Champagnolles', '30T', 684596, 5042664, 45.5131, -0.636668, 35),
('17085', 'Champdolent', '30T', 670552, 5087511, 45.92, -0.800556, 5),
('17086', 'Chaniers', '30T', 690109, 5065563, 45.7175, -0.55722, 10),
('17087', 'Chantemerle-sur-la-Soie', '30T', 682567, 5094557, 45.9803, -0.643053, 10),
('17089', 'La Chapelle-des-Pots', '30T', 691216, 5070385, 45.7606, -0.541106, 40),
('17091', 'Charron', '30T', 645825, 5128474, 46.2942, -1.10667, 5),
('17092', 'Chartuzac', '30T', 702313, 5023903, 45.3394, -0.417773, 94),
('17093', 'Le Château-d''Oléron', '30T', 639830, 5083220, 45.8883, -1.19778, 3),
('17094', 'Châtelaillon-Plage', '30T', 647876, 5103788, 46.0717, -1.08777, 3),
('17095', 'Chatenet', '30T', 711311, 5019997, 45.3017, -0.304719, 100),
('17096', 'Chaunac', '30T', 706824, 5026521, 45.3617, -0.359162, 50),
('17097', 'Le Chay', '30T', 664069, 5056237, 45.6403, -0.894721, 13),
('17098', 'Chenac-Saint-Seurin-d''Uzet', '30T', 669700, 5042706, 45.5172, -0.827219, 40),
('17099', 'Chepniers', '30T', 711243, 5014836, 45.2553, -0.307782, 92),
('17100', 'Chérac', '30T', 699408, 5064402, 45.7044, -0.438329, 60),
('17101', 'Cherbonnières', '30T', 706189, 5093448, 45.9636, -0.338884, 66),
('17102', 'Chermignac', '30T', 681334, 5061502, 45.6833, -0.671395, 51),
('17103', 'Chervettes', '30T', 677603, 5102412, 46.0522, -0.704163, 30),
('17104', 'Chevanceaux', '30T', 716960, 5020559, 45.305, -0.232503, 110),
('17105', 'Chives', '30T', 722716, 5093466, 45.9586, -0.125836, 92),
('17106', 'Cierzac', '30T', 709747, 5049788, 45.57, -0.311949, 26),
('17107', 'Ciré-d''Aunis', '30T', 660075, 5102487, 46.0572, -0.93056, 10),
('17108', 'Clam', '30T', 699201, 5040948, 45.4936, -0.450561, 60),
('17109', 'Clavette', '30T', 652282, 5111585, 46.1408, -1.02833, 21),
('17110', 'Clérac', '30T', 718060, 5006972, 45.1825, -0.224448, 80),
('17111', 'Clion', '30T', 695447, 5039409, 45.4808, -0.499172, 30),
('17112', 'La Clisse', '30T', 674187, 5067043, 45.735, -0.761111, 30),
('17113', 'La Clotte', '30T', 724270, 5000052, 45.1183, -0.148608, 30),
('17114', 'Coivert', '30T', 696575, 5105059, 46.0708, -0.458056, 33),
('17115', 'Colombiers', '30T', 690789, 5057460, 45.6444, -0.551673, 11),
('17116', 'Consac', '30T', 688231, 5032239, 45.4183, -0.594165, 66),
('17117', 'Contré', '30T', 710264, 5099054, 46.0128, -0.283885, 80),
('17118', 'Corignac', '30T', 704774, 5013819, 45.2481, -0.390559, 63),
('17119', 'Corme-Écluse', '30T', 667102, 5055421, 45.6322, -0.85611, 15),
('17120', 'Corme-Royal', '30T', 670238, 5068292, 45.7472, -0.811392, 34),
('17121', 'La Couarde-sur-Mer', '30T', 621635, 5116829, 46.1942, -1.42361, 5),
('17122', 'Coulonges', '30T', 700782, 5053974, 45.6103, -0.425001, 23),
('17124', 'Courant', '30T', 687870, 5101451, 46.0408, -0.57194, 50),
('17125', 'Courcelles', '30T', 695713, 5092242, 45.9558, -0.474446, 20),
('17126', 'Courcerac', '30T', 704569, 5079862, 45.8419, -0.365557, 25),
('17127', 'Courçon', '30T', 668548, 5123531, 46.2444, -0.813616, 20),
('17128', 'Courcoury', '30T', 688308, 5065014, 45.7131, -0.580554, 5),
('17129', 'Courpignac', '30T', 696642, 5022704, 45.3303, -0.490561, 51),
('17130', 'Coux', '30T', 703453, 5020975, 45.3128, -0.404441, 100),
('17131', 'Cozes', '30T', 669087, 5050101, 45.5839, -0.832506, 40),
('17132', 'Cramchaban', '30T', 675434, 5121068, 46.2206, -0.725277, 8),
('17133', 'Cravans', '30T', 678511, 5051969, 45.5983, -0.711112, 35),
('17134', 'Crazannes', '30T', 678315, 5079946, 45.85, -0.703331, 10),
('17135', 'Cressé', '30T', 715691, 5088520, 45.9164, -0.21861, 70),
('17136', 'Croix-Chapeau', '30T', 654148, 5108204, 46.11, -1.00528, 24),
('17137', 'La Croix-Comtesse', '30T', 693671, 5105770, 46.0781, -0.495282, 50),
('17138', 'Dampierre-sur-Boutonne', '30T', 700111, 5104772, 46.0672, -0.412498, 50),
('17140', 'Dolus-d''Oléron', '30T', 634751, 5085732, 45.9119, -1.2625, 4),
('17141', 'Dompierre-sur-Charente', '30T', 695151, 5064174, 45.7036, -0.493055, 20),
('17142', 'Dompierre-sur-Mer', '30T', 649490, 5116890, 46.1892, -1.06278, 20),
('17143', 'Le Douhet', '30T', 688834, 5076891, 45.8197, -0.569165, 50),
('17145', 'Échebrune', '30T', 699241, 5050619, 45.5806, -0.446113, 70),
('17146', 'Échillais', '30T', 658978, 5084979, 45.9, -0.950554, 10),
('17147', 'Écoyeux', '30T', 693848, 5077479, 45.8236, -0.504445, 50),
('17148', 'Écurat', '30T', 680793, 5072667, 45.7839, -0.67417, 31),
('17149', 'Les Éduts', '30T', 715613, 5096922, 45.9919, -0.215832, 140),
('17150', 'Les Églises-d''Argenteuil', '30T', 698917, 5094445, 45.9747, -0.432226, 30),
('17151', 'L''Éguille', '30T', 657428, 5063570, 45.7078, -0.977506, 5),
('17152', 'Épargnes', '30T', 671444, 5045595, 45.5428, -0.803894, 56),
('17153', 'Esnandes', '30T', 645383, 5123646, 46.2508, -1.1139, 10),
('17154', 'Les Essards', '30T', 674155, 5073589, 45.7939, -0.759165, 45),
('17155', 'Étaules', '30T', 647869, 5066176, 45.7333, -1.09945, 20),
('17156', 'Expiremont', '30T', 706110, 5022358, 45.3244, -0.370004, 110),
('17157', 'Fenioux', '30T', 686540, 5084915, 45.8925, -0.595559, 50),
('17158', 'Ferrières', '30T', 665065, 5121583, 46.2278, -0.859446, 26),
('17159', 'Fléac-sur-Seugne', '30T', 692271, 5045211, 45.5339, -0.537497, 25),
('17160', 'Floirac', '30T', 675942, 5038431, 45.4772, -0.748893, 40),
('17161', 'La Flotte', '30T', 629217, 5116243, 46.1875, -1.32555, 5),
('17162', 'Fontaine-Chalendray', '30T', 718473, 5092171, 45.9483, -0.181116, 121),
('17163', 'Fontaines-d''Ozillac', '30T', 705146, 5029216, 45.3864, -0.379445, 60),
('17164', 'Fontcouverte', '30T', 687202, 5071560, 45.7722, -0.592221, 30),
('17165', 'Fontenet', '30T', 697563, 5087636, 45.9139, -0.452495, 30),
('17166', 'Forges', '30T', 662706, 5107899, 46.1053, -0.894719, 19),
('17167', 'Le Fouilloux', '30T', 725775, 5008169, 45.1908, -0.125828, 106),
('17168', 'Fouras', '30T', 648029, 5094713, 45.99, -1.08861, 10),
('17169', 'La Frédière', '30T', 687188, 5082031, 45.8664, -0.588337, 50),
('17171', 'Geay', '30T', 673477, 5082373, 45.8731, -0.76472, 26),
('17172', 'Gémozac', '30T', 681287, 5048961, 45.5706, -0.676664, 40),
('17173', 'La Genétouze', '30T', 733362, 5011565, 45.2189, -0.027781, 100),
('17174', 'Genouillé', '30T', 671571, 5098936, 46.0225, -0.783328, 20),
('17175', 'Germignac', '30T', 707769, 5049908, 45.5717, -0.33722, 37),
('17176', 'Gibourne', '30T', 708383, 5090370, 45.9353, -0.311938, 80),
('17177', 'Le Gicq', '30T', 713626, 5090240, 45.9325, -0.244442, 70),
('17178', 'Givrezac', '30T', 685101, 5046138, 45.5442, -0.628895, 40),
('17179', 'Les Gonds', '30T', 685507, 5065331, 45.7167, -0.61639, 10),
('17180', 'Gourvillette', '30T', 715530, 5085702, 45.8911, -0.221949, 100),
('17181', 'Grandjean', '30T', 685597, 5083280, 45.8781, -0.608335, 15),
('17182', 'La Grève-sur-Mignon', '30T', 672339, 5124378, 46.2511, -0.764167, 8),
('17183', 'Grézac', '30T', 668358, 5052213, 45.6031, -0.841115, 47),
('17184', 'La Gripperie-Saint-Symphorien', '30T', 659216, 5074022, 45.8014, -0.951111, 33),
('17185', 'Le Gua', '30T', 659925, 5065764, 45.7269, -0.944724, 5),
('17186', 'Le Gué-d''Alleré', '30T', 664901, 5117347, 46.1897, -0.86305, 8),
('17187', 'Guitinières', '30T', 694629, 5034967, 45.4411, -0.511388, 40),
('17188', 'Haimps', '30T', 712796, 5083013, 45.8678, -0.258337, 55),
('17189', 'Hiers-Brouage', '30T', 649564, 5079279, 45.8508, -1.07361, 10),
('17190', 'L''Houmeau', '30T', 639921, 5117096, 46.1931, -1.18666, 10),
('17191', 'La Jard', '30T', 688131, 5058676, 45.6561, -0.585281, 40),
('17192', 'Jarnac-Champagne', '30T', 702785, 5048354, 45.5592, -0.401673, 55),
('17193', 'La Jarne', '30T', 648883, 5110112, 46.1283, -1.07278, 6),
('17194', 'La Jarrie', '30T', 653775, 5110263, 46.1286, -1.00944, 30),
('17195', 'La Jarrie-Audouin', '30T', 694451, 5100141, 46.0272, -0.487501, 70),
('17196', 'Jazennes', '30T', 685885, 5050455, 45.5828, -0.61722, 45),
('17197', 'Jonzac', '30T', 700347, 5035671, 45.4458, -0.438061, 40),
('17198', 'Juicq', '30T', 689375, 5079688, 45.8447, -0.561108, 70),
('17199', 'Jussas', '30T', 708285, 5017857, 45.2833, -0.344173, 100),
('17200', 'Lagord', '30T', 642455, 5116907, 46.1908, -1.15389, 20),
('17201', 'La Laigne', '30T', 672858, 5120408, 46.2153, -0.758894, 14),
('17202', 'Landes', '30T', 685993, 5095926, 45.9917, -0.59833, 25),
('17203', 'Landrais', '30T', 665236, 5104075, 46.0703, -0.863334, 10),
('17204', 'Léoville', '30T', 708477, 5028553, 45.3794, -0.337221, 50),
('17205', 'Loire-les-Marais', '30T', 660303, 5095390, 45.9933, -0.93, 20),
('17206', 'Loiré-sur-Nie', '30T', 710492, 5092357, 45.9525, -0.283891, 70),
('17207', 'Loix', '30T', 620434, 5120140, 46.2242, -1.43833, 6),
('17208', 'Longèves', '30T', 655080, 5121445, 46.2289, -0.988893, 7),
('17209', 'Lonzac', '30T', 703151, 5052474, 45.5961, -0.395275, 40),
('17210', 'Lorignac', '30T', 680652, 5036341, 45.4572, -0.689448, 40),
('17211', 'Loulay', '30T', 692767, 5102375, 46.0478, -0.508336, 50),
('17212', 'Louzignac', '30T', 714576, 5079613, 45.8367, -0.236946, 58),
('17213', 'Lozay', '30T', 689865, 5101635, 46.0419, -0.546107, 60),
('17214', 'Luchat', '30T', 674084, 5065310, 45.7194, -0.763057, 42),
('17215', 'Lussac', '30T', 697649, 5038490, 45.4719, -0.471394, 43),
('17216', 'Lussant', '30T', 668772, 5091910, 45.96, -0.821945, 10),
('17217', 'Macqueville', '30T', 716548, 5075727, 45.8011, -0.213328, 50),
('17218', 'Marans', '30T', 654208, 5130502, 46.3106, -0.997228, 12),
('17219', 'Marennes', '30T', 646914, 5076375, 45.8253, -1.10861, 16),
('17220', 'Marignac', '30T', 697042, 5044000, 45.5217, -0.476939, 60),
('17221', 'Marsais', '30T', 685348, 5110858, 46.1261, -0.600839, 40),
('17222', 'Marsilly', '30T', 643636, 5121412, 46.2311, -1.13723, 20),
('17223', 'Massac', '30T', 715687, 5083051, 45.8672, -0.221117, 70),
('17224', 'Matha', '30T', 708072, 5082944, 45.8686, -0.319163, 40),
('17225', 'Les Mathes', '30T', 644234, 5064393, 45.7181, -1.14667, 17),
('17226', 'Mazeray', '30T', 688832, 5086869, 45.9094, -0.565275, 70),
('17227', 'Mazerolles', '30T', 688728, 5046802, 45.5492, -0.582219, 40),
('17228', 'Médis', '30T', 658475, 5056432, 45.6433, -0.966392, 21),
('17229', 'Mérignac', '30T', 712135, 5022712, 45.3258, -0.293058, 80),
('17230', 'Meschers-sur-Gironde', '30T', 659887, 5046957, 45.5578, -0.951389, 21),
('17231', 'Messac', '30T', 710551, 5025131, 45.3481, -0.312218, 70),
('17232', 'Meursac', '30T', 670727, 5057558, 45.6506, -0.808886, 30),
('17233', 'Meux', '30T', 707414, 5035685, 45.4439, -0.347782, 60),
('17234', 'Migré', '30T', 688937, 5105221, 46.0744, -0.556667, 35),
('17235', 'Migron', '30T', 702205, 5075552, 45.8039, -0.397776, 20),
('17236', 'Mirambeau', '30T', 690166, 5027232, 45.3728, -0.571386, 60),
('17237', 'Moëze', '30T', 652282, 5085459, 45.9058, -1.03667, 5),
('17238', 'Moings', '30T', 706397, 5039513, 45.4786, -0.359165, 50),
('17239', 'Mons', '30T', 706131, 5077689, 45.8219, -0.346393, 24),
('17240', 'Montendre', '30T', 703331, 5017974, 45.2858, -0.407227, 103),
('17241', 'Montguyon', '30T', 720910, 5011088, 45.2186, -0.18639, 64),
('17242', 'Montils', '30T', 694477, 5058037, 45.6486, -0.504161, 40),
('17243', 'Montlieu-la-Garde', '30T', 715356, 5013893, 45.2456, -0.255832, 140),
('17244', 'Montpellier-de-Médillan', '30T', 675751, 5056061, 45.6358, -0.744998, 30),
('17245', 'Montroy', '30T', 653723, 5113196, 46.155, -1.00916, 47),
('17246', 'Moragne', '30T', 670110, 5093367, 45.9728, -0.804173, 50),
('17247', 'Mornac-sur-Seudre', '30T', 653486, 5063749, 45.7103, -1.02806, 11),
('17248', 'Mortagne-sur-Gironde', '30T', 673185, 5039157, 45.4844, -0.783885, 40),
('17249', 'Mortiers', '30T', 709694, 5031219, 45.4031, -0.320561, 70),
('17250', 'Mosnac', '30T', 693539, 5042099, 45.5056, -0.522502, 20),
('17252', 'Le Mung', '30T', 677550, 5082519, 45.8733, -0.712227, 5),
('17253', 'Muron', '30T', 668066, 5100415, 46.0367, -0.828058, 18),
('17254', 'Nachamps', '30T', 683863, 5098735, 46.0175, -0.624728, 24),
('17255', 'Nancras', '30T', 664862, 5068024, 45.7461, -0.88055, 30),
('17256', 'Nantillé', '30T', 694693, 5082880, 45.8719, -0.491394, 50),
('17257', 'Néré', '30T', 714193, 5095018, 45.9753, -0.235, 85),
('17258', 'Neuillac', '30T', 703193, 5043826, 45.5183, -0.39833, 40),
('17259', 'Neulles', '30T', 701726, 5042172, 45.5039, -0.417775, 35),
('17260', 'Neuvicq', '30T', 721030, 5013903, 45.2439, -0.183613, 90),
('17261', 'Neuvicq-le-Château', '30T', 720315, 5076138, 45.8036, -0.164724, 95),
('17262', 'Nieul-lès-Saintes', '30T', 676500, 5070135, 45.7622, -0.730277, 40),
('17263', 'Nieul-le-Virouil', '30T', 693130, 5031369, 45.4092, -0.531948, 40),
('17264', 'Nieul-sur-Mer', '30T', 641727, 5118743, 46.2075, -1.16277, 10),
('17265', 'Nieulle-sur-Seudre', '30T', 655629, 5068033, 45.7483, -0.99917, 5),
('17266', 'Les Nouillers', '30T', 681086, 5089232, 45.9328, -0.664171, 30),
('17267', 'Nuaillé-d''Aunis', '30T', 659459, 5121218, 46.2258, -0.932219, 6),
('17268', 'Nuaillé-sur-Boutonne', '30T', 698566, 5098666, 46.0128, -0.434999, 25),
('17269', 'Orignolles', '30T', 717246, 5012227, 45.23, -0.232505, 90),
('17270', 'Ozillac', '30T', 704094, 5030108, 45.3947, -0.392501, 84),
('17271', 'Paillé', '30T', 701921, 5096118, 45.9889, -0.392782, 37),
('17272', 'Péré', '30T', 668801, 5106550, 46.0917, -0.816391, 37),
('17273', 'Pérignac', '30T', 697610, 5055540, 45.6253, -0.465006, 35),
('17274', 'Périgny', '30T', 646629, 5112775, 46.1528, -1.10111, 7),
('17275', 'Pessines', '30T', 677661, 5066585, 45.73, -0.716662, 40),
('17276', 'Le Pin', '30T', 712706, 5021280, 45.3128, -0.286395, 100),
('17277', 'Saint-Denis-du-Pin', '30T', 691727, 5095700, 45.9881, -0.524448, 40),
('17278', 'Pisany', '30T', 672668, 5063325, 45.7019, -0.781945, 35),
('17279', 'Plassac', '30T', 690109, 5037732, 45.4672, -0.568061, 32),
('17280', 'Plassay', '30T', 676710, 5076441, 45.8189, -0.725272, 49),
('17281', 'Polignac', '30T', 711225, 5017986, 45.2836, -0.306671, 110),
('17282', 'Pommiers-Moulons', '30T', 707727, 5022226, 45.3228, -0.349449, 93),
('17283', 'Pons', '30T', 691241, 5049782, 45.5753, -0.548889, 16),
('17284', 'Pont-l''Abbé-d''Arnoult', '30T', 665089, 5077357, 45.83, -0.874444, 20),
('17285', 'Port-d''Envaux', '30T', 680126, 5078516, 45.8367, -0.68056, 10),
('17286', 'Les Portes-en-Ré', '30T', 615838, 5122891, 46.2497, -1.49723, 2),
('17287', 'Pouillac', '30T', 715768, 5016533, 45.2692, -0.249441, 141),
('17288', 'Poursay-Garnaud', '30T', 696829, 5092370, 45.9567, -0.460006, 20),
('17289', 'Préguillac', '30T', 685634, 5060331, 45.6717, -0.616671, 60),
('17290', 'Prignac', '30T', 705346, 5078559, 45.83, -0.356117, 20),
('17291', 'Puilboreau', '30T', 645297, 5116449, 46.1861, -1.11723, 20),
('17292', 'Puy-du-Lac', '30T', 676027, 5092823, 45.9664, -0.728054, 10),
('17293', 'Puyravault', '30T', 668994, 5111250, 46.1339, -0.812223, 38),
('17294', 'Puyrolland', '30T', 683188, 5101186, 46.0397, -0.632499, 50),
('17295', 'Réaux', '30T', 705228, 5039382, 45.4778, -0.374161, 40),
('17296', 'Rétaud', '30T', 676960, 5060789, 45.6781, -0.727778, 40),
('17297', 'Rivedoux-Plage', '30T', 633078, 5113238, 46.1597, -1.27639, 6),
('17298', 'Rioux', '30T', 678389, 5056228, 45.6367, -0.711117, 45),
('17299', 'Rochefort', '30T', 657864, 5089768, 45.9433, -0.963329, 10),
('17300', 'La Rochelle', '30T', 642680, 5113701, 46.1619, -1.15195, 10),
('17301', 'Romazières', '30T', 718816, 5097096, 45.9925, -0.174443, 108),
('17302', 'Romegoux', '30T', 670348, 5082379, 45.8739, -0.805005, 20),
('17303', 'La Ronde', '30T', 668851, 5129624, 46.2992, -0.807503, 7),
('17304', 'Rouffiac', '30T', 695511, 5062363, 45.6872, -0.489164, 16),
('17305', 'Rouffignac', '30T', 699802, 5023391, 45.3356, -0.449997, 80),
('17306', 'Royan', '30T', 653455, 5054485, 45.6269, -1.03138, 5),
('17307', 'Sablonceaux', '30T', 664354, 5065139, 45.7203, -0.888055, 31),
('17308', 'Saint-Agnant', '30T', 658037, 5081311, 45.8672, -0.963883, 18),
('17309', 'Saint-Aigulin', '30T', 734902, 5004793, 45.1575, -0.0113837, 28),
('17310', 'Saint-André-de-Lidon', '30T', 675643, 5052197, 45.6011, -0.747775, 20),
('17311', 'Saint-Augustin', '30T', 646922, 5061399, 45.6906, -1.11306, 5),
('17312', 'Saint-Bonnet-sur-Gironde', '30T', 683263, 5025051, 45.355, -0.660278, 10),
('17313', 'Saint-Bris-des-Bois', '30T', 695014, 5071306, 45.7678, -0.491942, 50),
('17314', 'Saint-Césaire', '30T', 693913, 5069850, 45.755, -0.506672, 31),
('17315', 'Saint-Christophe', '30T', 658510, 5112298, 46.1458, -0.947506, 16),
('17316', 'Saint-Ciers-Champagne', '30T', 711266, 5035628, 45.4422, -0.298605, 60),
('17317', 'Saint-Ciers-du-Taillon', '30T', 684696, 5032629, 45.4228, -0.639162, 20),
('17318', 'Saint-Clément-des-Baleines', '30T', 612541, 5120514, 46.2289, -1.54055, 3),
('17319', 'Sainte-Colombe', '30T', 713404, 5018059, 45.2836, -0.278887, 120),
('17320', 'Saint-Coutant-le-Grand', '30T', 672878, 5091437, 45.9547, -0.769167, 10),
('17321', 'Saint-Crépin', '30T', 675613, 5096765, 46.0019, -0.731946, 40),
('17322', 'Saint-Cyr-du-Doret', '30T', 668084, 5125618, 46.2633, -0.818886, 7),
('17323', 'Saint-Denis-d''Oléron', '30T', 625514, 5099092, 46.0339, -1.37805, 10),
('17324', 'Saint-Dizant-du-Bois', '30T', 689928, 5030066, 45.3983, -0.573332, 70),
('17325', 'Saint-Dizant-du-Gua', '30T', 679597, 5033716, 45.4339, -0.703889, 10),
('17326', 'Saint-Eugène', '30T', 712060, 5043007, 45.5083, -0.285278, 110),
('17327', 'Saint-Félix', '30T', 685537, 5106755, 46.0892, -0.599998, 80),
('17328', 'Saint-Fort-sur-Gironde', '30T', 678166, 5036641, 45.4606, -0.721109, 30),
('17329', 'Saint-Froult', '30T', 650482, 5086805, 45.9183, -1.05944, 5),
('17330', 'Sainte-Gemme', '30T', 664090, 5071061, 45.7736, -0.889438, 32),
('17331', 'Saint-Genis-de-Saintonge', '30T', 690015, 5039428, 45.4825, -0.568606, 33),
('17332', 'Saint-Georges-Antignac', '30T', 695098, 5040850, 45.4939, -0.503061, 30),
('17333', 'Saint-Georges-de-Didonne', '30T', 655893, 5052291, 45.6067, -1.00083, 5),
('17334', 'Saint-Georges-de-Longuepierre', '30T', 701298, 5101999, 46.0419, -0.398338, 44),
('17335', 'Saint-Georges-des-Agoûts', '30T', 684282, 5027428, 45.3761, -0.646393, 20),
('17336', 'Saint-Georges-des-Coteaux', '30T', 677940, 5070423, 45.7644, -0.711668, 60),
('17337', 'Saint-Georges-d''Oléron', '30T', 629121, 5093207, 45.9803, -1.33305, 5),
('17338', 'Saint-Georges-du-Bois', '30T', 675018, 5112346, 46.1422, -0.733893, 47),
('17339', 'Saint-Germain-de-Lusignan', '30T', 698636, 5036143, 45.4506, -0.459728, 30),
('17340', 'Saint-Germain-de-Marencennes', '30T', 671054, 5105130, 46.0783, -0.787778, 20),
('17341', 'Saint-Germain-de-Vibrac', '30T', 709483, 5033652, 45.425, -0.322219, 52),
('17342', 'Saint-Germain-du-Seudre', '30T', 682190, 5042532, 45.5125, -0.667495, 30),
('17343', 'Saint-Grégoire-d''Ardennes', '30T', 695531, 5042315, 45.5069, -0.49694, 35),
('17344', 'Saint-Hilaire-de-Villefranche', '30T', 691833, 5080474, 45.8511, -0.529169, 40),
('17345', 'Saint-Hilaire-du-Bois', '30T', 695861, 5032410, 45.4178, -0.496668, 40),
('17346', 'Saint-Hippolyte', '30T', 663748, 5087235, 45.9192, -0.888334, 5),
('17347', 'Saint-Jean-d''Angély', '30T', 692325, 5091023, 45.9458, -0.518614, 20),
('17348', 'Saint-Jean-d''Angle', '30T', 659443, 5076128, 45.8203, -0.947496, 20),
('17349', 'Saint-Jean-de-Liversay', '30T', 663913, 5126184, 46.2694, -0.872775, 10),
('17350', 'Saint-Julien-de-l''Escap', '30T', 694518, 5089825, 45.9344, -0.490833, 16),
('17351', 'Saint-Just-Luzac', '30T', 652539, 5074133, 45.8039, -1.03695, 14),
('17352', 'Saint-Laurent-de-la-Barrière', '30T', 678091, 5100388, 46.0339, -0.698616, 22),
('17353', 'Saint-Laurent-de-la-Prée', '30T', 651773, 5093908, 45.9819, -1.04055, 7),
('17354', 'Saint-Léger', '30T', 688285, 5055005, 45.6231, -0.584726, 50),
('17355', 'Sainte-Lheurine', '30T', 705683, 5045359, 45.5314, -0.365838, 100),
('17356', 'Saint-Loup', '30T', 683948, 5096637, 45.9986, -0.624439, 15),
('17357', 'Saint-Maigrin', '30T', 712830, 5033085, 45.4189, -0.279728, 70),
('17358', 'Saint-Mandé-sur-Brédoire', '30T', 708735, 5100331, 46.0247, -0.303055, 70),
('17359', 'Saint-Mard', '30T', 677084, 5106227, 46.0867, -0.709447, 30),
('17360', 'Sainte-Marie-de-Ré', '30T', 630334, 5112129, 46.1503, -1.31222, 10),
('17361', 'Saint-Martial', '30T', 696096, 5102541, 46.0483, -0.46528, 50),
('17362', 'Saint-Martial-de-Mirambeau', '30T', 688328, 5028258, 45.3825, -0.594447, 52),
('17363', 'Saint-Martial-de-Vitaterne', '30T', 700849, 5037665, 45.4636, -0.430834, 70),
('17364', 'Saint-Martial-sur-Né', '30T', 705757, 5051046, 45.5825, -0.362499, 30),
('17365', 'Saint-Martin-d''Ary', '30T', 718982, 5011916, 45.2267, -0.210553, 50),
('17366', 'Saint-Martin-de-Coux', '30T', 727268, 5003062, 45.1444, -0.109171, 75),
('17367', 'Saint-Martin-de-Juillers', '30T', 704607, 5091109, 45.9431, -0.360279, 50),
('17369', 'Saint-Martin-de-Ré', '30T', 626093, 5117969, 46.2036, -1.36556, 10),
('17371', 'Saint-Maurice-de-Tavernole', '30T', 702942, 5039493, 45.4794, -0.403333, 63),
('17372', 'Saint-Médard', '30T', 707146, 5030610, 45.3983, -0.353339, 40),
('17373', 'Saint-Médard-d''Aunis', '30T', 656715, 5113673, 46.1586, -0.970279, 30),
('17374', 'Sainte-Même', '30T', 696959, 5083569, 45.8775, -0.461943, 32);
INSERT INTO `ods_communes` (`oc_code_insee`, `oc_nom`, `oc_secteur`, `oc_x_utm`, `oc_y_utm`, `oc_latitude`, `oc_longitude`, `oc_altitude`) VALUES
('17375', 'Saint-Nazaire-sur-Charente', '30T', 651011, 5088979, 45.9378, -1.05194, 10),
('17376', 'Saint-Ouen-d''Aunis', '30T', 651578, 5120925, 46.225, -1.03445, 5),
('17377', 'Saint-Ouen', '30T', 720176, 5083703, 45.8717, -0.163054, 80),
('17378', 'Saint-Palais-de-Négrignac', '30T', 717781, 5016355, 45.2669, -0.223888, 90),
('17379', 'Saint-Palais-de-Phiolin', '30T', 687446, 5043212, 45.5172, -0.600003, 40),
('17380', 'Saint-Palais-sur-Mer', '30T', 649123, 5056232, 45.6436, -1.08639, 10),
('17381', 'Saint-Pardoult', '30T', 697391, 5097053, 45.9986, -0.450828, 25),
('17382', 'Saint-Pierre-d''Amilly', '30T', 679326, 5116300, 46.1767, -0.676663, 20),
('17383', 'Saint-Pierre-de-Juillers', '30T', 703740, 5091266, 45.9447, -0.371386, 50),
('17384', 'Saint-Pierre-de-l''Île', '30T', 698713, 5100772, 46.0317, -0.432225, 29),
('17385', 'Saint-Pierre-d''Oléron', '30T', 631290, 5089393, 45.9456, -1.30611, 6),
('17386', 'Saint-Pierre-du-Palais', '30T', 723557, 5005372, 45.1664, -0.155282, 30),
('17387', 'Saint-Porchaire', '30T', 672081, 5076713, 45.8225, -0.784717, 21),
('17388', 'Saint-Quantin-de-Rançanne', '30T', 687871, 5044985, 45.5331, -0.593886, 40),
('17389', 'Sainte-Radegonde', '30T', 665080, 5079302, 45.8475, -0.873893, 30),
('17390', 'Sainte-Ramée', '30T', 683082, 5032766, 45.4244, -0.659724, 10),
('17391', 'Saint-Rogatien', '30T', 648801, 5112611, 46.1508, -1.07305, 16),
('17392', 'Saint-Romain-sur-Gironde', '30T', 675330, 5035449, 45.4506, -0.757781, 5),
('17393', 'Saint-Romain-de-Benet', '30T', 667636, 5062138, 45.6925, -0.846948, 40),
('17394', 'Saint-Saturnin-du-Bois', '30T', 680117, 5111999, 46.1378, -0.668059, 50),
('17395', 'Saint-Sauvant', '30T', 694010, 5068124, 45.7394, -0.506117, 40),
('17396', 'Saint-Sauveur-d''Aunis', '30T', 662938, 5120167, 46.2156, -0.887498, 19),
('17397', 'Saint-Savinien', '30T', 680034, 5083178, 45.8786, -0.679999, 10),
('17398', 'Saint-Seurin-de-Palenne', '30T', 693860, 5055577, 45.6267, -0.513051, 24),
('17400', 'Saint-Sever-de-Saintonge', '30T', 693846, 5062990, 45.6933, -0.510276, 10),
('17401', 'Saint-Séverin-sur-Boutonne', '30T', 699319, 5106630, 46.0842, -0.42195, 50),
('17402', 'Saint-Sigismond-de-Clermont', '30T', 692615, 5036109, 45.4519, -0.536669, 32),
('17403', 'Saint-Simon-de-Bordes', '30T', 699328, 5030110, 45.3961, -0.453329, 60),
('17404', 'Saint-Simon-de-Pellouaille', '30T', 679519, 5053852, 45.615, -0.697505, 40),
('17405', 'Saint-Sorlin-de-Conac', '30T', 681848, 5026554, 45.3689, -0.677775, 20),
('17406', 'Saint-Sornin', '30T', 657300, 5070360, 45.7689, -0.976944, 10),
('17407', 'Sainte-Soulle', '30T', 653527, 5116712, 46.1867, -1.01056, 32),
('17408', 'Saint-Sulpice-d''Arnoult', '30T', 667080, 5074785, 45.8064, -0.849718, 20),
('17409', 'Saint-Sulpice-de-Royan', '30T', 654971, 5059741, 45.6739, -1.01027, 20),
('17410', 'Saint-Thomas-de-Conac', '30T', 681086, 5028817, 45.3894, -0.686668, 70),
('17411', 'Saint-Trojan-les-Bains', '30T', 639189, 5078142, 45.8428, -1.2075, 10),
('17412', 'Saint-Vaize', '30T', 684062, 5076130, 45.8142, -0.630831, 20),
('17413', 'Saint-Vivien', '30T', 650520, 5104655, 46.0789, -1.05333, 5),
('17414', 'Saint-Xandre', '30T', 646449, 5118515, 46.2044, -1.10167, 20),
('17415', 'Saintes', '30T', 683697, 5068737, 45.7478, -0.638335, 20),
('17416', 'Saleignes', '30T', 717800, 5099038, 46.0103, -0.186661, 134),
('17417', 'Salignac-de-Mirambeau', '30T', 697134, 5024419, 45.3456, -0.483605, 77),
('17418', 'Salignac-sur-Charente', '30T', 700259, 5060815, 45.6719, -0.428887, 10),
('17420', 'Salles-sur-Mer', '30T', 650405, 5107586, 46.1053, -1.05389, 8),
('17421', 'Saujon', '30T', 661573, 5059754, 45.6725, -0.925559, 5),
('17422', 'Seigné', '30T', 716069, 5092519, 45.9522, -0.211939, 85),
('17423', 'Semillac', '30T', 688241, 5029707, 45.3956, -0.595004, 70),
('17424', 'Semoussac', '30T', 686014, 5028498, 45.3853, -0.623888, 60),
('17425', 'Semussac', '30T', 662843, 5051758, 45.6003, -0.911939, 30),
('17426', 'Le Seure', '30T', 704756, 5074183, 45.7908, -0.365562, 16),
('17427', 'Siecq', '30T', 717987, 5079052, 45.8306, -0.19333, 75),
('17428', 'Sonnac', '30T', 711910, 5079892, 45.84, -0.271113, 38),
('17429', 'Soubise', '30T', 654356, 5087889, 45.9272, -1.00916, 13),
('17430', 'Soubran', '30T', 694623, 5025299, 45.3542, -0.51528, 106),
('17431', 'Soulignonne', '30T', 672002, 5071769, 45.7781, -0.787495, 30),
('17432', 'Souméras', '30T', 701930, 5019505, 45.3, -0.42445, 50),
('17433', 'Sousmoulins', '30T', 709286, 5020578, 45.3075, -0.330274, 80),
('17434', 'Surgères', '30T', 673748, 5108665, 46.1094, -0.751672, 36),
('17435', 'Taillant', '30T', 684631, 5086001, 45.9028, -0.619727, 42),
('17436', 'Taillebourg', '30T', 682929, 5078660, 45.8372, -0.644442, 10),
('17437', 'Talmont-sur-Gironde', '30T', 663312, 5044575, 45.5356, -0.908329, 3),
('17438', 'Tanzac', '30T', 685097, 5048485, 45.5653, -0.628058, 43),
('17439', 'Taugon', '30T', 666789, 5130679, 46.3092, -0.833884, 8),
('17440', 'Ternant', '30T', 687849, 5091534, 45.9517, -0.57611, 20),
('17441', 'Tesson', '30T', 682883, 5055957, 45.6331, -0.653605, 47),
('17442', 'Thaims', '30T', 672715, 5054586, 45.6233, -0.784445, 20),
('17443', 'Thairé', '30T', 654443, 5104165, 46.0736, -1.00278, 10),
('17444', 'Thénac', '30T', 682873, 5059972, 45.6692, -0.652224, 62),
('17445', 'Thézac', '30T', 672154, 5060006, 45.6722, -0.789719, 37),
('17446', 'Thors', '30T', 708766, 5078982, 45.8328, -0.311949, 31),
('17447', 'Le Thou', '30T', 661070, 5105540, 46.0844, -0.916672, 25),
('17448', 'Tonnay-Boutonne', '30T', 677699, 5093087, 45.9683, -0.706394, 10),
('17449', 'Tonnay-Charente', '30T', 662977, 5090334, 45.9472, -0.897216, 10),
('17450', 'Torxé', '30T', 683962, 5091819, 45.9553, -0.626112, 10),
('17451', 'Les Touches-de-Périgny', '30T', 711864, 5087553, 45.9089, -0.26833, 55),
('17452', 'La Tremblade', '30T', 644294, 5070199, 45.7703, -1.14417, 5),
('17453', 'Trizay', '30T', 663161, 5083359, 45.8844, -0.897215, 14),
('17454', 'Tugéras-Saint-Maurice', '30T', 702999, 5026273, 45.3606, -0.408053, 80),
('17455', 'La Vallée', '30T', 667599, 5084342, 45.8922, -0.839717, 5),
('17457', 'Vandré', '30T', 672929, 5102650, 46.0556, -0.764449, 20),
('17458', 'Vanzac', '30T', 711229, 5026327, 45.3586, -0.303062, 61),
('17459', 'Varaize', '30T', 699805, 5088975, 45.9253, -0.423057, 32),
('17460', 'Varzay', '30T', 676308, 5063921, 45.7064, -0.735006, 30),
('17461', 'Vaux-sur-Mer', '30T', 651102, 5056805, 45.6483, -1.06083, 8),
('17462', 'Vénérand', '30T', 689722, 5073984, 45.7933, -0.558887, 70),
('17463', 'Vergeroux', '30T', 656114, 5091669, 45.9608, -0.985273, 8),
('17464', 'Vergné', '30T', 691992, 5105161, 46.0731, -0.517221, 50),
('17465', 'La Vergne', '30T', 688574, 5093193, 45.9664, -0.56611, 12),
('17466', 'Vérines', '30T', 656828, 5117629, 46.1942, -0.967506, 37),
('17467', 'Vervant', '30T', 697189, 5094606, 45.9767, -0.454444, 25),
('17468', 'Vibrac', '30T', 708284, 5025828, 45.355, -0.340832, 70),
('17469', 'Villars-en-Pons', '30T', 685531, 5052884, 45.6047, -0.62083, 40),
('17470', 'Villars-les-Bois', '30T', 699243, 5074931, 45.7992, -0.436113, 70),
('17471', 'La Villedieu', '30T', 707197, 5104450, 46.0622, -0.321114, 80),
('17472', 'Villedoux', '30T', 649133, 5122748, 46.2419, -1.06556, 10),
('17473', 'Villemorin', '30T', 709287, 5098032, 46.0039, -0.296939, 70),
('17474', 'Villeneuve-la-Comtesse', '30T', 692719, 5108026, 46.0986, -0.506667, 50),
('17476', 'Villexavier', '30T', 700652, 5027464, 45.3719, -0.437506, 70),
('17477', 'Villiers-Couture', '30T', 720657, 5096204, 45.9839, -0.151112, 102),
('17478', 'Vinax', '30T', 716181, 5102225, 46.0394, -0.206105, 140),
('17479', 'Virollet', '30T', 678093, 5046861, 45.5525, -0.71833, 30),
('17480', 'Virson', '30T', 662018, 5111989, 46.1422, -0.902218, 15),
('17481', 'Voissay', '30T', 685518, 5091649, 45.9533, -0.606116, 5),
('17482', 'Vouhé', '30T', 670023, 5112854, 46.1481, -0.798337, 24),
('17483', 'Yves', '30T', 651154, 5098062, 46.0194, -1.04722, 9),
('17484', 'Port-des-Barques', '30T', 648871, 5090163, 45.9489, -1.07916, 10),
('17485', 'Le Grand-Village-Plage', '30T', 636910, 5080715, 45.8664, -1.23611, 6),
('17486', 'La Brée-les-Bains', '30T', 627769, 5097131, 46.0158, -1.34945, 5),
('18001', 'Achères', '31T', 458383, 5236273, 47.2786, 2.44972, 240),
('18002', 'Ainay-le-Vieil', '31T', 465620, 5168376, 46.6681, 2.55056, 168),
('18003', 'Les Aix-d''Angillon', '31T', 467662, 5227324, 47.1986, 2.57306, 186),
('18004', 'Allogny', '31T', 448542, 5230485, 47.2258, 2.32028, 207),
('18005', 'Allouis', '31T', 441518, 5224129, 47.1681, 2.22833, 129),
('18006', 'Annoix', '31T', 464706, 5200823, 46.96, 2.53611, 155),
('18007', 'Apremont-sur-Allier', '31T', 503660, 5194855, 46.9072, 3.04806, 180),
('18008', 'Arçay', '31T', 449859, 5199540, 46.9475, 2.34112, 165),
('18009', 'Arcomps', '31T', 455959, 5169488, 46.6775, 2.42416, 216),
('18010', 'Ardenais', '31T', 451877, 5166463, 46.65, 2.37111, 200),
('18011', 'Argent-sur-Sauldre', '31T', 458312, 5267639, 47.5608, 2.44583, 171),
('18012', 'Argenvières', '31T', 500548, 5220475, 47.1378, 3.00723, 160),
('18013', 'Arpheuilles', '31T', 466562, 5181119, 46.7828, 2.56195, 200),
('18014', 'Assigny', '31T', 481523, 5252732, 47.4278, 2.755, 280),
('18015', 'Aubigny-sur-Nère', '31T', 457795, 5259678, 47.4892, 2.43972, 190),
('18016', 'Aubinges', '31T', 468433, 5229882, 47.2217, 2.58306, 202),
('18017', 'Augy-sur-Aubois', '31T', 488148, 5181253, 46.7847, 2.84473, 210),
('18018', 'Avord', '31T', 473660, 5208710, 47.0314, 2.65333, 171),
('18019', 'Azy', '31T', 477986, 5225579, 47.1833, 2.70944, 205),
('18020', 'Bannay', '31T', 491258, 5248326, 47.3883, 2.88417, 160),
('18021', 'Bannegon', '31T', 478273, 5182978, 46.8, 2.71528, 175),
('18022', 'Barlieu', '31T', 472128, 5259438, 47.4878, 2.63001, 250),
('18023', 'Baugy', '31T', 479357, 5214214, 47.0811, 2.72806, 174),
('18024', 'Beddes', '31T', 439711, 5161541, 46.6047, 2.21278, 235),
('18025', 'Beffes', '31T', 500506, 5215382, 47.0919, 3.00667, 164),
('18026', 'Belleville-sur-Loire', '31T', 488725, 5261420, 47.5061, 2.85027, 142),
('18027', 'Bengy-sur-Craon', '31T', 480760, 5204918, 46.9975, 2.74694, 195),
('18028', 'Berry-Bouy', '31T', 446196, 5217663, 47.1103, 2.29083, 135),
('18029', 'Bessais-le-Fromental', '31T', 481965, 5177040, 46.7467, 2.76389, 215),
('18030', 'Blancafort', '31T', 464625, 5264449, 47.5325, 2.53001, 180),
('18031', 'Blet', '31T', 479623, 5193531, 46.895, 2.7325, 181),
('18032', 'Boulleret', '31T', 490447, 5252310, 47.4242, 2.87334, 170),
('18033', 'Bourges', '31T', 454221, 5214261, 47.0803, 2.39694, 130),
('18034', 'Bouzais', '31T', 459889, 5172609, 46.7058, 2.47527, 180),
('18035', 'Brécy', '31T', 471303, 5218878, 47.1228, 2.62167, 161),
('18036', 'Brinay', '31T', 433928, 5225104, 47.1761, 2.12805, 110),
('18037', 'Brinon-sur-Sauldre', '31T', 443984, 5268407, 47.5667, 2.25528, 140),
('18038', 'Bruère-Allichamps', '31T', 456819, 5179761, 46.77, 2.43444, 160),
('18039', 'Bué', '31T', 484463, 5239604, 47.3097, 2.79444, 236),
('18040', 'Bussy', '31T', 471206, 5194399, 46.9025, 2.62195, 183),
('18041', 'La Celette', '31T', 463293, 5166630, 46.6522, 2.52028, 186),
('18042', 'La Celle', '31T', 457879, 5179630, 46.7689, 2.44834, 170),
('18043', 'La Celle-Condé', '31T', 437884, 5182396, 46.7922, 2.18611, 160),
('18044', 'Cerbois', '31T', 431508, 5217907, 47.1111, 2.09722, 126),
('18045', 'Chalivoy-Milon', '31T', 477683, 5189617, 46.8597, 2.70722, 215),
('18046', 'Chambon', '31T', 448627, 5181678, 46.7867, 2.32694, 172),
('18047', 'La Chapelle-d''Angillon', '31T', 457192, 5245821, 47.3644, 2.43306, 190),
('18048', 'La Chapelle-Hugon', '31T', 495832, 5194516, 46.9042, 2.94527, 200),
('18049', 'La Chapelle-Montlinard', '31T', 498926, 5224087, 47.1703, 2.98583, 180),
('18050', 'La Chapelle-Saint-Ursin', '31T', 448533, 5212425, 47.0633, 2.32223, 145),
('18051', 'La Chapelotte', '31T', 469140, 5244357, 47.3519, 2.59139, 310),
('18052', 'Charenton-du-Cher', '31T', 472706, 5175254, 46.7303, 2.64278, 178),
('18053', 'Charentonnay', '31T', 490459, 5221347, 47.1456, 2.87416, 201),
('18054', 'Charly', '31T', 481000, 5193866, 46.8981, 2.75056, 185),
('18055', 'Chârost', '31T', 433532, 5204732, 46.9928, 2.12583, 130),
('18056', 'Chassy', '31T', 487677, 5209838, 47.0419, 2.83778, 192),
('18057', 'Châteaumeillant', '31T', 439237, 5156668, 46.5608, 2.20723, 240),
('18058', 'Châteauneuf-sur-Cher', '31T', 448334, 5189428, 46.8564, 2.32223, 160),
('18059', 'Le Châtelet', '31T', 445193, 5165440, 46.6403, 2.28389, 221),
('18060', 'Chaumont', '31T', 481235, 5187846, 46.8439, 2.75389, 252),
('18061', 'Chaumoux-Marcilly', '31T', 483230, 5219295, 47.1269, 2.77889, 202),
('18062', 'Le Chautay', '31T', 497591, 5202572, 46.9767, 2.96833, 180),
('18063', 'Chavannes', '31T', 452650, 5188961, 46.8525, 2.37889, 165),
('18064', 'Chéry', '31T', 427621, 5218910, 47.1197, 2.04583, 110),
('18065', 'Chezal-Benoît', '31T', 432626, 5186158, 46.8256, 2.11667, 170),
('18066', 'Civray', '31T', 437304, 5201821, 46.9669, 2.17584, 150),
('18067', 'Clémont', '31T', 447829, 5268526, 47.5681, 2.30638, 140),
('18068', 'Cogny', '31T', 472234, 5188035, 46.8453, 2.63583, 187),
('18069', 'Colombiers', '31T', 464748, 5171961, 46.7003, 2.53889, 182),
('18070', 'Concressault', '31T', 468027, 5259644, 47.4894, 2.57555, 190),
('18071', 'Contres', '31T', 461342, 5190473, 46.8667, 2.49277, 165),
('18072', 'Cornusse', '31T', 479730, 5200105, 46.9542, 2.73361, 210),
('18073', 'Corquoy', '31T', 446456, 5192594, 46.8847, 2.29722, 150),
('18074', 'Couargues', '31T', 493678, 5237611, 47.2919, 2.91639, 149),
('18075', 'Cours-les-Barres', '31T', 502470, 5207912, 47.0247, 3.0325, 178),
('18076', 'Coust', '31T', 469203, 5171073, 46.6925, 2.59722, 190),
('18077', 'Couy', '31T', 486788, 5218144, 47.1167, 2.82584, 205),
('18078', 'Crézançay-sur-Cher', '31T', 451025, 5184528, 46.8125, 2.35805, 160),
('18079', 'Crézancy-en-Sancerre', '31T', 480829, 5238966, 47.3039, 2.74639, 287),
('18080', 'Croisy', '31T', 485623, 5198267, 46.9378, 2.81111, 241),
('18081', 'Crosses', '31T', 468329, 5206452, 47.0108, 2.58333, 150),
('18082', 'Cuffy', '31T', 504184, 5200844, 46.9611, 3.05499, 189),
('18083', 'Culan', '31T', 450168, 5155118, 46.5478, 2.35, 276),
('18084', 'Dampierre-en-Crot', '31T', 468596, 5256368, 47.46, 2.58334, 273),
('18085', 'Dampierre-en-Graçay', '31T', 419875, 5225833, 47.1811, 1.9425, 134),
('18086', 'Drevant', '31T', 463830, 5171133, 46.6928, 2.52694, 168),
('18087', 'Dun-sur-Auron', '31T', 467577, 5192442, 46.8847, 2.57444, 180),
('18088', 'Ennordres', '31T', 453537, 5253196, 47.4306, 2.38388, 170),
('18089', 'Épineuil-le-Fleuriel', '31T', 468127, 5156231, 46.5589, 2.58417, 180),
('18090', 'Étréchy', '31T', 479241, 5223228, 47.1622, 2.72612, 202),
('18091', 'Farges-Allichamps', '31T', 454308, 5178606, 46.7594, 2.40167, 191),
('18092', 'Farges-en-Septaine', '31T', 473427, 5213280, 47.0725, 2.65, 175),
('18093', 'Faverdines', '31T', 459588, 5165635, 46.6431, 2.47195, 200),
('18094', 'Feux', '31T', 489318, 5230733, 47.23, 2.85889, 170),
('18095', 'Flavigny', '31T', 485292, 5201293, 46.965, 2.80666, 194),
('18096', 'Foëcy', '31T', 436791, 5225103, 47.1764, 2.16583, 116),
('18097', 'Fussy', '31T', 456803, 5221343, 47.1442, 2.43027, 150),
('18098', 'Gardefort', '31T', 487245, 5234874, 47.2672, 2.83138, 200),
('18099', 'Garigny', '31T', 491440, 5214801, 47.0867, 2.88722, 180),
('18100', 'Genouilly', '31T', 415473, 5227098, 47.1919, 1.88417, 137),
('18101', 'Germigny-l''Exempt', '31T', 492280, 5196032, 46.9178, 2.89861, 186),
('18102', 'Givardon', '31T', 486041, 5187308, 46.8392, 2.81694, 195),
('18103', 'Graçay', '31T', 412574, 5221799, 47.1439, 1.84694, 110),
('18104', 'Groises', '31T', 485654, 5228487, 47.2097, 2.81056, 180),
('18105', 'Gron', '31T', 480594, 5218624, 47.1208, 2.74417, 200),
('18106', 'Grossouvre', '31T', 495407, 5191522, 46.8772, 2.93972, 200),
('18107', 'La Groutte', '31T', 462573, 5170523, 46.6872, 2.51055, 198),
('18108', 'La Guerche-sur-l''Aubois', '31T', 496364, 5199701, 46.9508, 2.95222, 185),
('18109', 'Henrichemont', '31T', 464092, 5238859, 47.3022, 2.525, 287),
('18110', 'Herry', '31T', 496572, 5229181, 47.2161, 2.95473, 160),
('18111', 'Humbligny', '31T', 474442, 5233434, 47.2539, 2.66222, 320),
('18112', 'Ids-Saint-Roch', '31T', 441990, 5172817, 46.7064, 2.24111, 187),
('18113', 'Ignol', '31T', 488462, 5201471, 46.9667, 2.84833, 230),
('18114', 'Ineuil', '31T', 445797, 5180529, 46.7761, 2.29, 170),
('18115', 'Ivoy-le-Pré', '31T', 461162, 5243601, 47.3447, 2.48583, 275),
('18116', 'Jalognes', '31T', 483810, 5231333, 47.2353, 2.7861, 190),
('18117', 'Jars', '31T', 476082, 5249017, 47.3942, 2.68306, 260),
('18118', 'Jouet-sur-l''Aubois', '31T', 499283, 5210319, 47.0464, 2.99056, 170),
('18119', 'Jussy-Champagne', '31T', 473024, 5203496, 46.9844, 2.64527, 177),
('18120', 'Jussy-le-Chaudrier', '31T', 495049, 5219273, 47.1269, 2.93472, 180),
('18121', 'Lantan', '31T', 474339, 5194816, 46.9064, 2.66306, 191),
('18122', 'Lapan', '31T', 446747, 5196727, 46.9219, 2.30056, 150),
('18123', 'Laverdines', '31T', 484066, 5208921, 47.0336, 2.79028, 209),
('18124', 'Lazenay', '31T', 428629, 5213341, 47.0697, 2.06, 120),
('18125', 'Léré', '31T', 490392, 5257589, 47.4717, 2.87249, 147),
('18126', 'Levet', '31T', 454893, 5197123, 46.9261, 2.4075, 170),
('18127', 'Lignières', '31T', 437137, 5177804, 46.7508, 2.17695, 161),
('18128', 'Limeux', '31T', 432326, 5213791, 47.0742, 2.10862, 135),
('18129', 'Lissay-Lochy', '31T', 454783, 5202125, 46.9711, 2.40556, 172),
('18130', 'Loye-sur-Arnon', '31T', 453176, 5166731, 46.6525, 2.38806, 204),
('18131', 'Lugny-Bourbonnais', '31T', 477522, 5197520, 46.9308, 2.70472, 184),
('18132', 'Lugny-Champagne', '31T', 486510, 5225893, 47.1864, 2.82194, 180),
('18133', 'Lunery', '31T', 444413, 5198169, 46.9347, 2.26973, 133),
('18134', 'Lury-sur-Arnon', '31T', 428663, 5219700, 47.1269, 2.05944, 110),
('18135', 'Maisonnais', '31T', 439920, 5165428, 46.6397, 2.215, 230),
('18136', 'Marçais', '31T', 451919, 5171741, 46.6975, 2.37111, 211),
('18137', 'Mareuil-sur-Arnon', '31T', 436060, 5192202, 46.8803, 2.16084, 157),
('18138', 'Marmagne', '31T', 445723, 5216587, 47.1006, 2.28472, 120),
('18139', 'Marseilles-lès-Aubigny', '31T', 500865, 5212789, 47.0686, 3.01139, 170),
('18140', 'Massay', '31T', 423646, 5222758, 47.1539, 1.99278, 123),
('18141', 'Mehun-sur-Yèvre', '31T', 440395, 5221330, 47.1428, 2.21389, 120),
('18142', 'Meillant', '31T', 462299, 5181020, 46.7817, 2.50611, 175),
('18143', 'Menetou-Couture', '31T', 493607, 5210230, 47.0456, 2.91584, 195),
('18144', 'Menetou-Râtel', '31T', 481496, 5244212, 47.3511, 2.755, 300),
('18145', 'Menetou-Salon', '31T', 461184, 5231005, 47.2314, 2.48722, 244),
('18146', 'Ménétréol-sous-Sancerre', '31T', 489105, 5240427, 47.3172, 2.85584, 170),
('18147', 'Ménétréol-sur-Sauldre', '31T', 447857, 5255189, 47.4481, 2.30833, 150),
('18148', 'Méreau', '31T', 428038, 5223690, 47.1628, 2.05056, 115),
('18149', 'Méry-ès-Bois', '31T', 451839, 5240243, 47.3139, 2.36277, 237),
('18150', 'Méry-sur-Cher', '31T', 423290, 5232673, 47.2431, 1.98639, 140),
('18151', 'Montigny', '31T', 475885, 5231637, 47.2378, 2.68139, 271),
('18152', 'Montlouis', '31T', 442041, 5184732, 46.8136, 2.24027, 179),
('18153', 'Morlac', '31T', 447183, 5174158, 46.7189, 2.30889, 229),
('18154', 'Mornay-Berry', '31T', 490189, 5210574, 47.0486, 2.87083, 217),
('18155', 'Mornay-sur-Allier', '31T', 502394, 5185162, 46.82, 3.03138, 210),
('18156', 'Morogues', '31T', 469642, 5231944, 47.2403, 2.59889, 220),
('18157', 'Morthomiers', '31T', 444706, 5209280, 47.0347, 2.27222, 140),
('18158', 'Moulins-sur-Yèvre', '31T', 463312, 5214631, 47.0842, 2.51667, 139),
('18159', 'Nançay', '31T', 439221, 5244373, 47.35, 2.19527, 133),
('18160', 'Nérondes', '31T', 486209, 5204841, 46.9969, 2.81861, 187),
('18161', 'Neuilly-en-Dun', '31T', 483656, 5182684, 46.7975, 2.78583, 200),
('18162', 'Neuilly-en-Sancerre', '31T', 476292, 5238705, 47.3014, 2.68639, 271),
('18163', 'Neuvy-Deux-Clochers', '31T', 477332, 5236046, 47.2775, 2.70028, 265),
('18164', 'Neuvy-le-Barrois', '31T', 502922, 5190070, 46.8642, 3.03834, 205),
('18165', 'Neuvy-sur-Barangeon', '31T', 443716, 5240408, 47.3147, 2.25528, 144),
('18166', 'Nohant-en-Goût', '31T', 467663, 5215964, 47.0964, 2.57389, 148),
('18167', 'Nohant-en-Graçay', '31T', 416101, 5220945, 47.1367, 1.89361, 120),
('18168', 'Le Noyer', '31T', 475888, 5247844, 47.3836, 2.68055, 250),
('18169', 'Nozières', '31T', 456981, 5175654, 46.7331, 2.43695, 200),
('18170', 'Oizon', '31T', 463539, 5257972, 47.4742, 2.51611, 230),
('18171', 'Orcenais', '31T', 456120, 5174024, 46.7183, 2.42584, 200),
('18172', 'Orval', '31T', 460392, 5174828, 46.7258, 2.48166, 170),
('18173', 'Osmery', '31T', 473930, 5197998, 46.935, 2.6575, 170),
('18174', 'Osmoy', '31T', 463768, 5213362, 47.0728, 2.52277, 142),
('18175', 'Ourouer-les-Bourdelins', '31T', 484266, 5196850, 46.925, 2.79333, 225),
('18176', 'Parassy', '31T', 465832, 5231162, 47.2331, 2.54861, 262),
('18177', 'Parnay', '31T', 467365, 5188461, 46.8489, 2.57194, 169),
('18178', 'La Perche', '31T', 467221, 5165805, 46.645, 2.57167, 186),
('18179', 'Pigny', '31T', 457566, 5224949, 47.1767, 2.44, 178),
('18180', 'Plaimpied-Givaudins', '31T', 458479, 5205000, 46.9972, 2.45388, 150),
('18181', 'Plou', '31T', 434066, 5209079, 47.0319, 2.13222, 134),
('18182', 'Poisieux', '31T', 431593, 5208768, 47.0289, 2.09972, 140),
('18183', 'Le Pondy', '31T', 473272, 5183369, 46.8033, 2.64972, 170),
('18184', 'Précy', '31T', 494604, 5216310, 47.1003, 2.92889, 185),
('18185', 'Presly', '31T', 451613, 5248488, 47.3881, 2.35889, 200),
('18186', 'Preuilly', '31T', 437453, 5215989, 47.0944, 2.17583, 120),
('18187', 'Préveranges', '31T', 442808, 5142496, 46.4336, 2.25556, 419),
('18188', 'Primelles', '31T', 440107, 5194784, 46.9039, 2.21361, 150),
('18189', 'Quantilly', '31T', 458025, 5230255, 47.2244, 2.44556, 201),
('18190', 'Quincy', '31T', 436213, 5220263, 47.1328, 2.15889, 130),
('18191', 'Raymond', '31T', 476292, 5201970, 46.9708, 2.68833, 190),
('18192', 'Reigny', '31T', 450429, 5158326, 46.5767, 2.35306, 260),
('18193', 'Rezay', '31T', 437216, 5169160, 46.6731, 2.17916, 174),
('18194', 'Rians', '31T', 470727, 5225950, 47.1864, 2.61361, 170),
('18195', 'Sagonne', '31T', 486679, 5188170, 46.8469, 2.82528, 195),
('18196', 'Saint-Aignan-des-Noyers', '31T', 486022, 5179004, 46.7644, 2.81694, 240),
('18197', 'Saint-Amand-Montrond', '31T', 462156, 5175156, 46.7289, 2.50472, 160),
('18198', 'Saint-Ambroix', '31T', 433076, 5197946, 46.9317, 2.12084, 140),
('18199', 'Saint-Baudel', '31T', 439611, 5187503, 46.8383, 2.20806, 155),
('18200', 'Saint-Bouize', '31T', 491325, 5236904, 47.2856, 2.88528, 160),
('18201', 'Saint-Caprais', '31T', 446391, 5201855, 46.9681, 2.29527, 150),
('18202', 'Saint-Céols', '31T', 472113, 5229833, 47.2214, 2.63166, 234),
('18203', 'Saint-Christophe-le-Chaudry', '31T', 451668, 5158964, 46.5825, 2.36916, 220),
('18204', 'Saint-Denis-de-Palin', '31T', 464946, 5198445, 46.9386, 2.53945, 150),
('18205', 'Saint-Doulchard', '31T', 451313, 5217063, 47.1053, 2.35833, 150),
('18206', 'Saint-Éloy-de-Gy', '31T', 450242, 5222567, 47.1547, 2.34361, 159),
('18207', 'Saint-Florent-sur-Cher', '31T', 443016, 5204696, 46.9933, 2.25055, 130),
('18208', 'Sainte-Gemme-en-Sancerrois', '31T', 486186, 5249015, 47.3944, 2.81695, 250),
('18209', 'Saint-Georges-de-Poisieux', '31T', 460236, 5170507, 46.6869, 2.47999, 204),
('18210', 'Saint-Georges-sur-la-Prée', '31T', 419564, 5230808, 47.2258, 1.9375, 125),
('18211', 'Saint-Georges-sur-Moulon', '31T', 456314, 5226347, 47.1892, 2.42334, 170),
('18212', 'Saint-Germain-des-Bois', '31T', 457886, 5195682, 46.9133, 2.44695, 178),
('18213', 'Saint-Germain-du-Puy', '31T', 460814, 5216314, 47.0992, 2.48361, 149),
('18214', 'Saint-Hilaire-de-Court', '31T', 425950, 5228471, 47.2056, 2.02223, 100),
('18215', 'Saint-Hilaire-de-Gondilly', '31T', 491476, 5210603, 47.0489, 2.88778, 208),
('18216', 'Saint-Hilaire-en-Lignières', '31T', 436981, 5175151, 46.7269, 2.17527, 180),
('18217', 'Saint-Jeanvrin', '31T', 441360, 5160413, 46.5947, 2.23445, 221),
('18218', 'Saint-Just', '31T', 462806, 5204570, 46.9936, 2.51083, 150),
('18219', 'Saint-Laurent', '31T', 439731, 5230537, 47.2256, 2.2039, 120),
('18220', 'Saint-Léger-le-Petit', '31T', 500337, 5218777, 47.1225, 3.00444, 160),
('18221', 'Saint-Loup-des-Chaumes', '31T', 453451, 5185805, 46.8242, 2.38972, 163),
('18222', 'Sainte-Lunaise', '31T', 450424, 5196325, 46.9186, 2.34889, 170),
('18223', 'Saint-Martin-d''Auxigny', '31T', 455905, 5227955, 47.2036, 2.41778, 161),
('18224', 'Saint-Martin-des-Champs', '31T', 494336, 5222762, 47.1583, 2.92528, 180),
('18225', 'Saint-Maur', '31T', 446217, 5158701, 46.5797, 2.29805, 250),
('18226', 'Saint-Michel-de-Volangis', '31T', 461355, 5221619, 47.1469, 2.49028, 150),
('18227', 'Sainte-Montaine', '31T', 448777, 5259843, 47.49, 2.32, 158),
('18228', 'Saint-Outrille', '31T', 412047, 5221776, 47.1436, 1.84, 108),
('18229', 'Saint-Palais', '31T', 456138, 5231072, 47.2317, 2.42055, 190),
('18230', 'Saint-Pierre-les-Bois', '31T', 444835, 5168129, 46.6644, 2.27889, 190),
('18231', 'Saint-Pierre-les-Étieux', '31T', 471116, 5175662, 46.7339, 2.62195, 175),
('18232', 'Saint-Priest-la-Marche', '31T', 436337, 5144134, 46.4478, 2.17111, 390),
('18233', 'Saint-Satur', '31T', 489110, 5243051, 47.3408, 2.85584, 170),
('18234', 'Saint-Saturnin', '31T', 441564, 5150749, 46.5078, 2.23833, 368),
('18235', 'Sainte-Solange', '31T', 465770, 5220296, 47.1353, 2.54862, 155),
('18236', 'Saint-Symphorien', '31T', 447528, 5184496, 46.8119, 2.31222, 145),
('18237', 'Sainte-Thorette', '31T', 439249, 5214365, 47.08, 2.19972, 130),
('18238', 'Saint-Vitte', '31T', 464371, 5154863, 46.5464, 2.53527, 228),
('18239', 'Saligny-le-Vif', '31T', 482276, 5210222, 47.0453, 2.76667, 220),
('18240', 'Sancergues', '31T', 493873, 5222546, 47.1564, 2.91917, 178),
('18241', 'Sancerre', '31T', 487785, 5241880, 47.3303, 2.83833, 280),
('18242', 'Sancoins', '31T', 494005, 5186616, 46.8331, 2.92139, 201),
('18243', 'Santranges', '31T', 482949, 5260508, 47.4978, 2.77361, 208),
('18244', 'Saugy', '31T', 432871, 5202270, 46.9706, 2.1175, 129),
('18245', 'Saulzais-le-Potier', '31T', 461384, 5160653, 46.5983, 2.49583, 226),
('18246', 'Savigny-en-Sancerre', '31T', 485758, 5254233, 47.4414, 2.81111, 211),
('18247', 'Savigny-en-Septaine', '31T', 466534, 5210074, 47.0433, 2.55945, 150),
('18248', 'Senneçay', '31T', 457153, 5199700, 46.9494, 2.43694, 170),
('18249', 'Sens-Beaujeu', '31T', 477920, 5241538, 47.3269, 2.70778, 290),
('18250', 'Serruelles', '31T', 453103, 5192754, 46.8867, 2.38444, 175),
('18251', 'Sévry', '31T', 485170, 5219907, 47.1325, 2.80445, 202),
('18252', 'Sidiailles', '31T', 447787, 5150662, 46.5075, 2.31945, 327),
('18253', 'Soulangis', '31T', 463488, 5226021, 47.1867, 2.51806, 176),
('18254', 'Soye-en-Septaine', '31T', 461204, 5208223, 47.0264, 2.48945, 170),
('18255', 'Le Subdray', '31T', 446391, 5206517, 47.01, 2.29472, 158),
('18256', 'Subligny', '31T', 481619, 5249892, 47.4022, 2.75639, 240),
('18257', 'Sury-près-Léré', '31T', 489955, 5258948, 47.4839, 2.86666, 141),
('18258', 'Sury-en-Vaux', '31T', 485277, 5246023, 47.3675, 2.805, 240),
('18259', 'Sury-ès-Bois', '31T', 477747, 5256820, 47.4644, 2.70473, 260),
('18260', 'Tendron', '31T', 488422, 5202367, 46.9747, 2.84778, 216),
('18261', 'Thaumiers', '31T', 473811, 5185466, 46.8222, 2.65666, 180),
('18262', 'Thauvenay', '31T', 489858, 5239191, 47.3061, 2.86583, 160),
('18263', 'Thénioux', '31T', 418790, 5234153, 47.2558, 1.92667, 90),
('18264', 'Thou', '31T', 474462, 5252481, 47.4253, 2.66139, 240),
('18265', 'Torteron', '31T', 497530, 5207511, 47.0211, 2.9675, 199),
('18266', 'Touchay', '31T', 439852, 5173547, 46.7128, 2.21305, 227),
('18267', 'Trouy', '31T', 451077, 5206291, 47.0083, 2.35639, 168),
('18268', 'Uzay-le-Venon', '31T', 458888, 5184469, 46.8125, 2.46112, 180),
('18269', 'Vailly-sur-Sauldre', '31T', 473640, 5256066, 47.4575, 2.65028, 200),
('18270', 'Vallenay', '31T', 452061, 5181464, 46.785, 2.37195, 163),
('18271', 'Vasselay', '31T', 453740, 5222848, 47.1575, 2.38972, 177),
('18272', 'Veaugues', '31T', 481568, 5233778, 47.2572, 2.75638, 220),
('18273', 'Venesmes', '31T', 447617, 5187366, 46.8378, 2.31306, 150),
('18274', 'Verdigny', '31T', 485502, 5243707, 47.3467, 2.80806, 251),
('18275', 'Vereaux', '31T', 490899, 5191805, 46.8797, 2.88056, 220),
('18276', 'Vernais', '31T', 478111, 5179183, 46.7658, 2.71333, 190),
('18277', 'Verneuil', '31T', 469888, 5184712, 46.8153, 2.60528, 180),
('18278', 'Vesdun', '31T', 456252, 5154113, 46.5392, 2.42945, 325),
('18279', 'Vierzon', '31T', 429256, 5230499, 47.2242, 2.06555, 120),
('18280', 'Vignoux-sous-les-Aix', '31T', 459426, 5226078, 47.1869, 2.46444, 194),
('18281', 'Vignoux-sur-Barangeon', '31T', 437326, 5227938, 47.2019, 2.17249, 108),
('18282', 'Villabon', '31T', 475357, 5215803, 47.0953, 2.67528, 179),
('18283', 'Villecelin', '31T', 437799, 5186411, 46.8283, 2.18445, 170),
('18284', 'Villegenon', '31T', 470231, 5252655, 47.4267, 2.60528, 280),
('18285', 'Villeneuve-sur-Cher', '31T', 441005, 5208544, 47.0278, 2.22361, 120),
('18286', 'Villequiers', '31T', 485173, 5212900, 47.0694, 2.80472, 211),
('18287', 'Vinon', '31T', 487061, 5236912, 47.2856, 2.82889, 170),
('18288', 'Vorly', '31T', 459390, 5199159, 46.9447, 2.46639, 178),
('18289', 'Vornay', '31T', 468392, 5202315, 46.9736, 2.58445, 165),
('18290', 'Vouzeron', '31T', 441176, 5234227, 47.2589, 2.2225, 125),
('19001', 'Affieux', '31T', 403547, 5041398, 45.5194, 1.765, 510),
('19002', 'Aix', '31T', 451964, 5051581, 45.6161, 2.38389, 858),
('19003', 'Albignac', '31T', 396193, 4999196, 45.1386, 1.67972, 340),
('19004', 'Albussac', '31T', 408315, 4999072, 45.1392, 1.83388, 400),
('19005', 'Allassac', '31T', 380613, 5012960, 45.26, 1.47833, 179),
('19006', 'Alleyrat', '31T', 438907, 5047498, 45.5783, 2.21694, 762),
('19007', 'Altillac', '31T', 409171, 4980942, 44.9761, 1.84805, 150),
('19008', 'Ambrugeat', '31T', 431021, 5041869, 45.5269, 2.11667, 650),
('19009', 'Les Angles-sur-Corrèze', '31T', 405754, 5017783, 45.3072, 1.79777, 240),
('19010', 'Argentat', '31T', 416678, 4993802, 45.0928, 1.94111, 188),
('19011', 'Arnac-Pompadour', '31T', 373420, 5028258, 45.3964, 1.38277, 420),
('19012', 'Astaillac', '31T', 407798, 4978369, 44.9528, 1.83111, 180),
('19013', 'Aubazines', '31T', 395690, 5003156, 45.1742, 1.6725, 280),
('19014', 'Auriac', '31T', 433245, 5005921, 45.2036, 2.15, 605),
('19015', 'Ayen', '31T', 368876, 5011556, 45.2453, 1.32917, 300),
('19016', 'Bar', '31T', 407143, 5021898, 45.3444, 1.81472, 300),
('19017', 'Bassignac-le-Bas', '31T', 409721, 4985687, 45.0189, 1.85417, 300),
('19018', 'Bassignac-le-Haut', '31T', 427213, 5006944, 45.2122, 2.07306, 550),
('19019', 'Beaulieu-sur-Dordogne', '31T', 408365, 4981200, 44.9783, 1.83778, 150),
('19020', 'Beaumont', '31T', 406444, 5030459, 45.4214, 1.80417, 460),
('19021', 'Bellechassagne', '31T', 439694, 5054866, 45.6447, 2.22612, 729),
('19022', 'Benayes', '31T', 380571, 5041701, 45.5186, 1.47084, 410),
('19023', 'Beynat', '31T', 399640, 4997505, 45.1239, 1.72389, 400),
('19024', 'Beyssac', '31T', 375038, 5025385, 45.3708, 1.40417, 380),
('19025', 'Beyssenac', '31T', 366069, 5029305, 45.4044, 1.28861, 350),
('19026', 'Billac', '31T', 403444, 4977384, 44.9433, 1.77611, 200),
('19027', 'Bonnefond', '31T', 420658, 5042455, 45.5311, 1.98389, 830),
('19028', 'Bort-les-Orgues', '31T', 460717, 5027695, 45.4017, 2.49806, 454),
('19029', 'Branceilles', '31T', 398264, 4985242, 45.0133, 1.70889, 160),
('19030', 'Brignac-la-Plaine', '31T', 369663, 5005304, 45.1892, 1.34083, 125),
('19031', 'Brive-la-Gaillarde', '31T', 384852, 5001491, 45.1575, 1.53499, 118),
('19032', 'Brivezac', '31T', 408570, 4986383, 45.025, 1.83944, 180),
('19033', 'Bugeat', '31T', 416399, 5050011, 45.5986, 1.92806, 680),
('19034', 'Camps-Saint-Mathurin-Léobazel', '31T', 420418, 4981626, 44.9836, 1.99056, 520),
('19035', 'Chabrignac', '31T', 370108, 5019496, 45.3169, 1.34278, 270),
('19036', 'Chamberet', '31T', 400317, 5048425, 45.5822, 1.72222, 470),
('19037', 'Chamboulive', '31T', 398790, 5031688, 45.4314, 1.70611, 440),
('19038', 'Chameyrat', '31T', 397938, 5009848, 45.2347, 1.69973, 352),
('19039', 'Champagnac-la-Noaille', '31T', 422893, 5017643, 45.3081, 2.01639, 568),
('19040', 'Champagnac-la-Prune', '31T', 417665, 5004160, 45.1861, 1.95194, 460),
('19041', 'Chanac-les-Mines', '31T', 407513, 5012911, 45.2636, 1.82112, 390),
('19042', 'Chanteix', '31T', 393129, 5018231, 45.3094, 1.63667, 394),
('19043', 'La Chapelle-aux-Brocs', '31T', 392294, 4999848, 45.1439, 1.63, 240),
('19044', 'La Chapelle-aux-Saints', '31T', 399509, 4982229, 44.9864, 1.72528, 140),
('19045', 'La Chapelle-Saint-Géraud', '31T', 417718, 4987987, 45.0406, 1.95528, 541),
('19046', 'Chapelle-Spinasse', '31T', 424944, 5023452, 45.3606, 2.04167, 600),
('19047', 'Chartrier-Ferrière', '31T', 378224, 4991798, 45.0692, 1.45306, 300),
('19048', 'Le Chastang', '31T', 400686, 5002921, 45.1728, 1.73611, 518),
('19049', 'Chasteaux', '31T', 379581, 4994180, 45.0908, 1.46972, 201),
('19050', 'Chauffour-sur-Vell', '31T', 394909, 4986223, 45.0217, 1.66611, 150),
('19051', 'Chaumeil', '31T', 412580, 5034105, 45.455, 1.88194, 634),
('19052', 'Chavanac', '31T', 429433, 5052998, 45.6269, 2.09473, 870),
('19053', 'Chaveroche', '31T', 442263, 5047095, 45.575, 2.26, 698),
('19054', 'Chenailler-Mascheix', '31T', 408943, 4989495, 45.0531, 1.84361, 400),
('19055', 'Chirac-Bellevue', '31T', 445700, 5033392, 45.4519, 2.30557, 660),
('19056', 'Clergoux', '31T', 419433, 5014414, 45.2786, 1.97278, 560),
('19057', 'Collonges-la-Rouge', '31T', 394213, 4990494, 45.06, 1.65638, 220),
('19058', 'Combressol', '31T', 434519, 5036153, 45.4758, 2.16222, 606),
('19059', 'Concèze', '31T', 370519, 5023624, 45.3542, 1.34694, 390),
('19060', 'Condat-sur-Ganaveix', '31T', 390212, 5035845, 45.4675, 1.59555, 340),
('19061', 'Cornil', '31T', 397394, 5007233, 45.2111, 1.69334, 260),
('19062', 'Corrèze', '31T', 411997, 5024977, 45.3728, 1.87611, 480),
('19063', 'Cosnac', '31T', 388826, 4998920, 45.135, 1.58611, 219),
('19064', 'Couffy-sur-Sarsonne', '31T', 447697, 5056708, 45.6619, 2.32861, 753),
('19065', 'Courteix', '31T', 448725, 5055341, 45.6497, 2.34195, 752),
('19066', 'Cublac', '31T', 366894, 5000267, 45.1433, 1.30694, 105),
('19067', 'Curemonte', '31T', 401047, 4983995, 45.0025, 1.74444, 160),
('19068', 'Dampniat', '31T', 392646, 5002589, 45.1686, 1.63389, 250),
('19069', 'Darazac', '31T', 428193, 5002982, 45.1767, 2.08611, 560),
('19070', 'Darnets', '31T', 430398, 5030672, 45.4261, 2.11028, 620),
('19071', 'Davignac', '31T', 429168, 5037230, 45.485, 2.09361, 652),
('19072', 'Donzenac', '31T', 384210, 5009343, 45.2281, 1.525, 180),
('19073', 'Égletons', '31T', 425395, 5028477, 45.4058, 2.04667, 600),
('19074', 'L''Église-aux-Bois', '31T', 406862, 5055640, 45.6481, 1.80472, 676),
('19075', 'Espagnac', '31T', 413607, 5009059, 45.2297, 1.89945, 467),
('19076', 'Espartignac', '31T', 390326, 5029916, 45.4142, 1.59833, 340),
('19077', 'Estivals', '31T', 378991, 4987245, 45.0283, 1.46389, 300),
('19078', 'Estivaux', '31T', 381229, 5019030, 45.3147, 1.48473, 360),
('19079', 'Eyburie', '31T', 393409, 5034802, 45.4586, 1.63666, 440),
('19080', 'Eygurande', '31T', 457132, 5056697, 45.6625, 2.44972, 743),
('19081', 'Eyrein', '31T', 417488, 5020674, 45.3347, 1.94695, 570),
('19082', 'Favars', '31T', 396529, 5013050, 45.2633, 1.68111, 400),
('19083', 'Feyt', '31T', 397940, 5009971, 45.2358, 1.69973, 740),
('19084', 'Forgès', '31T', 411159, 5000883, 45.1558, 1.86973, 224),
('19085', 'Gimel-les-Cascades', '31T', 409901, 5016827, 45.2992, 1.85084, 420),
('19086', 'Goulles', '31T', 427609, 4988082, 45.0425, 2.08083, 545),
('19087', 'Gourdon-Murat', '31T', 413756, 5043750, 45.5419, 1.89528, 720),
('19088', 'Grandsaigne', '31T', 415609, 5038014, 45.4906, 1.92, 600),
('19089', 'Gros-Chastang', '31T', 420755, 5006898, 45.2111, 1.99083, 520),
('19090', 'Gumond', '31T', 419917, 5007927, 45.2203, 1.98, 480),
('19091', 'Hautefage', '31T', 421542, 4992907, 45.0853, 2.00305, 500),
('19092', 'Le Jardin', '31T', 424240, 5019170, 45.3219, 2.03334, 610),
('19093', 'Jugeals-Nazareth', '31T', 386750, 4992783, 45.0794, 1.56111, 333),
('19094', 'Juillac', '31T', 368503, 5019838, 45.3197, 1.32222, 300),
('19095', 'Lacelle', '31T', 408698, 5055366, 45.6458, 1.82833, 656),
('19096', 'Ladignac-sur-Rondelles', '31T', 409011, 5009463, 45.2328, 1.84084, 420),
('19097', 'Lafage-sur-Sombre', '31T', 427342, 5016263, 45.2961, 2.07334, 620),
('19098', 'Lagarde-Enval', '31T', 406428, 5004408, 45.1869, 1.80889, 480),
('19099', 'Lagleygeolle', '31T', 397373, 4992448, 45.0781, 1.69611, 440),
('19100', 'Lagraulière', '31T', 393491, 5022916, 45.3517, 1.64028, 420),
('19101', 'Laguenne', '31T', 404601, 5010608, 45.2425, 1.78445, 233),
('19102', 'Lamazière-Basse', '31T', 435250, 5024880, 45.3744, 2.17305, 579),
('19103', 'Lamazière-Haute', '31T', 453006, 5057622, 45.6706, 2.39667, 818),
('19104', 'Lamongerie', '31T', 389000, 5043430, 45.5356, 1.57834, 420),
('19105', 'Lanteuil', '31T', 394690, 4998110, 45.1286, 1.66084, 189),
('19106', 'Lapleau', '31T', 434723, 5015997, 45.2944, 2.1675, 530),
('19107', 'Larche', '31T', 375494, 4997624, 45.1211, 1.41694, 96),
('19108', 'Laroche-près-Feyt', '31T', 461727, 5061328, 45.7044, 2.50833, 759),
('19109', 'Lascaux', '31T', 371899, 5021898, 45.3389, 1.365, 340),
('19110', 'Latronche', '31T', 439516, 5016104, 45.2958, 2.22861, 540),
('19111', 'Laval-sur-Luzège', '31T', 434193, 5011065, 45.25, 2.16139, 300),
('19112', 'Lestards', '31T', 412046, 5040934, 45.5164, 1.87389, 800),
('19113', 'Liginiac', '31T', 448012, 5029330, 45.4156, 2.33556, 560),
('19114', 'Lignareix', '31T', 445402, 5051573, 45.6156, 2.29973, 720),
('19115', 'Ligneyrac', '31T', 391534, 4989860, 45.0539, 1.6225, 220),
('19116', 'Liourdres', '31T', 405832, 4975836, 44.9297, 1.80666, 132),
('19117', 'Lissac-sur-Couze', '31T', 378995, 4995550, 45.1031, 1.46194, 186),
('19118', 'Le Lonzac', '31T', 400672, 5035239, 45.4636, 1.72945, 461),
('19119', 'Lostanges', '31T', 402789, 4990543, 45.0617, 1.76527, 300),
('19120', 'Louignac', '31T', 365082, 5009567, 45.2267, 1.28138, 273),
('19121', 'Lubersac', '31T', 375175, 5033379, 45.4428, 1.40389, 360),
('19122', 'Madranges', '31T', 405596, 5036274, 45.4736, 1.79222, 580),
('19123', 'Malemort-sur-Corrèze', '31T', 387060, 5002840, 45.17, 1.56277, 117),
('19124', 'Mansac', '31T', 373063, 5002827, 45.1675, 1.38472, 203),
('19125', 'Marcillac-la-Croisille', '31T', 424045, 5013833, 45.2739, 2.03167, 560),
('19126', 'Marcillac-la-Croze', '31T', 401040, 4987760, 45.0364, 1.74361, 197),
('19127', 'Marc-la-Tour', '31T', 409359, 5006402, 45.2053, 1.84583, 460),
('19128', 'Margerides', '31T', 453042, 5033518, 45.4536, 2.39944, 640),
('19129', 'Masseret', '31T', 384611, 5044250, 45.5422, 1.52195, 470),
('19130', 'Maussac', '31T', 433017, 5035768, 45.4722, 2.14306, 600),
('19131', 'Meilhards', '31T', 394746, 5045862, 45.5583, 1.65138, 470),
('19132', 'Ménoire', '31T', 405193, 4994796, 45.1003, 1.795, 500),
('19134', 'Merlines', '31T', 458543, 5054064, 45.6389, 2.46805, 718),
('19135', 'Mestes', '31T', 446484, 5038879, 45.5014, 2.31499, 634),
('19136', 'Meymac', '31T', 433267, 5042987, 45.5372, 2.14527, 656),
('19137', 'Meyrignac-l''Église', '31T', 410280, 5028150, 45.4011, 1.85361, 550),
('19138', 'Meyssac', '31T', 395803, 4990035, 45.0561, 1.67667, 200),
('19139', 'Millevaches', '31T', 429584, 5054880, 45.6439, 2.09639, 914),
('19140', 'Monceaux-sur-Dordogne', '31T', 414236, 4992631, 45.0819, 1.91028, 183),
('19141', 'Monestier-Merlines', '31T', 458962, 5055173, 45.6489, 2.47334, 716),
('19142', 'Monestier-Port-Dieu', '31T', 461040, 5037722, 45.4919, 2.50139, 700),
('19143', 'Montaignac-Saint-Hippolyte', '31T', 422415, 5023050, 45.3567, 2.00944, 620),
('19144', 'Montgibaud', '31T', 376878, 5041526, 45.5164, 1.42361, 460),
('19145', 'Moustier-Ventadour', '31T', 429927, 5027406, 45.3967, 2.10472, 562),
('19146', 'Naves', '31T', 403326, 5018498, 45.3133, 1.76667, 408),
('19147', 'Nespouls', '31T', 382249, 4989438, 45.0486, 1.50472, 320),
('19148', 'Neuvic', '31T', 443109, 5025576, 45.3814, 2.27334, 620),
('19149', 'Neuville', '31T', 408051, 4995897, 45.1106, 1.83111, 501),
('19150', 'Noailhac', '31T', 391351, 4991993, 45.0731, 1.61972, 250),
('19151', 'Noailles', '31T', 384219, 4995483, 45.1033, 1.52834, 288),
('19152', 'Nonards', '31T', 405180, 4986556, 45.0261, 1.79639, 220),
('19153', 'Objat', '31T', 375236, 5013373, 45.2628, 1.40972, 120),
('19154', 'Orgnac-sur-Vézère', '31T', 377976, 5020913, 45.3311, 1.44278, 294),
('19155', 'Orliac-de-Bar', '31T', 406233, 5023640, 45.36, 1.80277, 400),
('19156', 'Palazinges', '31T', 397496, 5001429, 45.1589, 1.69583, 460),
('19157', 'Palisse', '31T', 437996, 5029853, 45.4194, 2.2075, 600),
('19158', 'Pandrignes', '31T', 410224, 5008921, 45.2281, 1.85639, 349),
('19159', 'Péret-Bel-Air', '31T', 425015, 5036691, 45.4797, 2.04056, 810),
('19160', 'Pérols-sur-Vézère', '31T', 420651, 5048721, 45.5875, 1.98278, 760),
('19161', 'Perpezac-le-Blanc', '31T', 369149, 5008927, 45.2217, 1.33334, 265),
('19162', 'Perpezac-le-Noir', '31T', 386479, 5020322, 45.3272, 1.55139, 360),
('19163', 'Le Pescher', '31T', 400860, 4991652, 45.0714, 1.74056, 200),
('19164', 'Peyrelevade', '31T', 426394, 5061614, 45.7042, 2.05444, 800),
('19165', 'Peyrissac', '31T', 398397, 5039659, 45.5031, 1.69944, 372),
('19166', 'Pierrefitte', '31T', 394408, 5030865, 45.4233, 1.65028, 395),
('19167', 'Confolent-Port-Dieu', '31T', 460772, 5043526, 45.5442, 2.4975, 760),
('19168', 'Pradines', '31T', 414853, 5039907, 45.5075, 1.91, 661),
('19169', 'Puy-d''Arnac', '31T', 404400, 4987061, 45.0306, 1.78639, 300),
('19170', 'Queyssac-les-Vignes', '31T', 402845, 4979831, 44.9653, 1.76805, 220),
('19171', 'Reygade', '31T', 414180, 4985225, 45.0153, 1.91084, 440),
('19172', 'Rilhac-Treignac', '31T', 397486, 5042359, 45.5272, 1.68722, 440),
('19173', 'Rilhac-Xaintrie', '31T', 436915, 5001995, 45.1686, 2.19723, 620),
('19174', 'La Roche-Canillac', '31T', 419142, 5005313, 45.1967, 1.97055, 440),
('19175', 'Roche-le-Peyroux', '31T', 451841, 5029948, 45.4214, 2.38443, 600),
('19176', 'Rosiers-d''Égletons', '31T', 422119, 5025492, 45.3786, 2.00528, 592),
('19177', 'Rosiers-de-Juillac', '31T', 367158, 5016995, 45.2939, 1.30583, 160),
('19178', 'Sadroc', '31T', 386282, 5015418, 45.2831, 1.55, 388),
('19179', 'Saillac', '31T', 392990, 4987952, 45.0369, 1.6414, 180),
('19180', 'Saint-Angel', '31T', 440043, 5039370, 45.5053, 2.2325, 640),
('19181', 'Saint-Augustin', '31T', 409078, 5030729, 45.4242, 1.83778, 560),
('19182', 'Saint-Aulaire', '31T', 372352, 5009818, 45.2303, 1.37389, 250),
('19183', 'Saint-Bazile-de-la-Roche', '31T', 418261, 5001313, 45.1606, 1.96, 229),
('19184', 'Saint-Bazile-de-Meyssac', '31T', 399558, 4989512, 45.0519, 1.72445, 220),
('19185', 'Saint-Bonnet-Avalouze', '31T', 408656, 5012123, 45.2567, 1.83583, 340),
('19186', 'Saint-Bonnet-Elvert', '31T', 413740, 5001249, 45.1594, 1.90249, 525),
('19187', 'Saint-Bonnet-la-Rivière', '31T', 372289, 5017506, 45.2994, 1.37111, 160),
('19188', 'Saint-Bonnet-l''Enfantier', '31T', 384267, 5017245, 45.2992, 1.52389, 385),
('19189', 'Saint-Bonnet-les-Tours-de-Merle', '31T', 426189, 4990105, 45.0606, 2.06251, 479),
('19190', 'Saint-Bonnet-près-Bort', '31T', 454366, 5039310, 45.5058, 2.41584, 692),
('19191', 'Saint-Cernin-de-Larche', '31T', 375389, 4995619, 45.1031, 1.41611, 105),
('19192', 'Saint-Chamant', '31T', 413340, 4997519, 45.1258, 1.89805, 200),
('19193', 'Saint-Cirgues-la-Loutre', '31T', 429099, 4992201, 45.0797, 2.09917, 440),
('19194', 'Saint-Clément', '31T', 397083, 5021622, 45.3406, 1.68639, 450),
('19195', 'Saint-Cyprien', '31T', 370828, 5012103, 45.2506, 1.35389, 204),
('19196', 'Saint-Cyr-la-Roche', '31T', 373879, 5014202, 45.27, 1.39222, 180),
('19198', 'Saint-Éloy-les-Tuileries', '31T', 366670, 5034078, 45.4475, 1.295, 324),
('19199', 'Saint-Étienne-aux-Clos', '31T', 457819, 5046261, 45.5686, 2.45944, 772),
('19200', 'Saint-Étienne-la-Geneste', '31T', 448757, 5032812, 45.447, 2.34472, 588),
('19201', 'Saint-Exupéry-les-Roches', '31T', 451099, 5040632, 45.5175, 2.37389, 727),
('19202', 'Sainte-Féréole', '31T', 388661, 5009448, 45.2297, 1.58166, 423),
('19203', 'Sainte-Fortunade', '31T', 403604, 5006703, 45.2072, 1.7725, 432),
('19204', 'Saint-Fréjoux', '31T', 451103, 5043934, 45.5472, 2.37361, 690),
('19205', 'Saint-Geniez-ô-Merle', '31T', 427993, 4991103, 45.0697, 2.08527, 492),
('19206', 'Saint-Germain-Lavolps', '31T', 438166, 5051455, 45.6139, 2.20694, 699),
('19207', 'Saint-Germain-les-Vergnes', '31T', 392995, 5014220, 45.2733, 1.63583, 384),
('19208', 'Saint-Hilaire-Foissac', '31T', 431523, 5020198, 45.3319, 2.12611, 574),
('19209', 'Saint-Hilaire-les-Courbes', '31T', 409052, 5051410, 45.6103, 1.83361, 620),
('19210', 'Saint-Hilaire-Luc', '31T', 437936, 5023680, 45.3639, 2.20751, 559),
('19211', 'Saint-Hilaire-Peyroux', '31T', 393954, 5007722, 45.215, 1.64944, 300),
('19212', 'Saint-Hilaire-Taurieux', '31T', 409316, 4991125, 45.0678, 1.84805, 400),
('19213', 'Saint-Jal', '31T', 393900, 5027818, 45.3958, 1.64445, 430),
('19214', 'Saint-Julien-aux-Bois', '31T', 432484, 4997966, 45.1319, 2.14139, 579),
('19215', 'Saint-Julien-le-Pèlerin', '31T', 427470, 4985430, 45.0186, 2.07945, 520),
('19216', 'Saint-Julien-le-Vendômois', '31T', 369287, 5035535, 45.4611, 1.32806, 358),
('19217', 'Saint-Julien-Maumont', '31T', 397959, 4988056, 45.0386, 1.70444, 160),
('19218', 'Saint-Julien-près-Bort', '31T', 453381, 5029380, 45.4164, 2.40417, 612),
('19219', 'Sainte-Marie-Lapanouze', '31T', 448548, 5031116, 45.4317, 2.34222, 600),
('19220', 'Saint-Martial-de-Gimel', '31T', 411658, 5013191, 45.2667, 1.87389, 500),
('19221', 'Saint-Martial-Entraygues', '31T', 419339, 4996792, 45.12, 1.97444, 440),
('19222', 'Saint-Martin-la-Méanne', '31T', 420458, 5002334, 45.17, 1.98778, 500),
('19223', 'Saint-Martin-Sepert', '31T', 380524, 5032379, 45.4347, 1.4725, 400),
('19225', 'Saint-Merd-de-Lapleau', '31T', 427838, 5011998, 45.2578, 2.08028, 560),
('19226', 'Saint-Merd-les-Oussines', '31T', 425221, 5053912, 45.6347, 2.04056, 813),
('19227', 'Saint-Mexant', '31T', 394654, 5015643, 45.2864, 1.65667, 424),
('19228', 'Saint-Pantaléon-de-Lapleau', '31T', 437477, 5019117, 45.3228, 2.20222, 600),
('19229', 'Saint-Pantaléon-de-Larche', '31T', 378028, 4999828, 45.1414, 1.44861, 101),
('19230', 'Saint-Pardoux-Corbier', '31T', 378866, 5032071, 45.4317, 1.45139, 400),
('19231', 'Saint-Pardoux-la-Croisille', '31T', 420260, 5010886, 45.2469, 1.98389, 520),
('19232', 'Saint-Pardoux-le-Neuf', '31T', 447891, 5051366, 45.6139, 2.33167, 750),
('19233', 'Saint-Pardoux-le-Vieux', '31T', 443510, 5050787, 45.6083, 2.27555, 720),
('19234', 'Saint-Pardoux-l''Ortigier', '31T', 388600, 5017136, 45.2989, 1.57916, 360),
('19235', 'Saint-Paul', '31T', 413394, 5007828, 45.2186, 1.89695, 530),
('19236', 'Saint-Priest-de-Gimel', '31T', 411472, 5017021, 45.3011, 1.87084, 530),
('19237', 'Saint-Privat', '31T', 429130, 4998867, 45.1397, 2.09862, 580),
('19238', 'Saint-Rémy', '31T', 443256, 5056191, 45.6569, 2.27167, 730),
('19239', 'Saint-Robert', '31T', 366105, 5012540, 45.2536, 1.29361, 300),
('19240', 'Saint-Salvadour', '31T', 403461, 5027355, 45.3931, 1.76666, 473),
('19241', 'Saint-Setiers', '31T', 432158, 5060653, 45.6961, 2.12861, 810),
('19242', 'Saint-Solve', '31T', 374662, 5018478, 45.3086, 1.40112, 242),
('19243', 'Saint-Sornin-Lavolps', '31T', 373333, 5026099, 45.3769, 1.38222, 405),
('19244', 'Saint-Sulpice-les-Bois', '31T', 433275, 5051845, 45.6169, 2.14417, 810),
('19245', 'Saint-Sylvain', '31T', 411779, 5003066, 45.1756, 1.87723, 258),
('19246', 'Saint-Viance', '31T', 378605, 5008275, 45.2175, 1.45389, 103),
('19247', 'Saint-Victour', '31T', 451444, 5034703, 45.4642, 2.37889, 660),
('19248', 'Saint-Ybard', '31T', 384635, 5033784, 45.4481, 1.52472, 400),
('19249', 'Saint-Yrieix-le-Déjalat', '31T', 419510, 5034074, 45.4556, 1.97056, 747),
('19250', 'Salon-la-Tour', '31T', 385964, 5039903, 45.5033, 1.54028, 400),
('19251', 'Sarran', '31T', 416988, 5028983, 45.4094, 1.93917, 648),
('19252', 'Sarroux', '31T', 455531, 5029149, 45.4144, 2.43167, 600),
('19253', 'Segonzac', '31T', 365089, 5015001, 45.2756, 1.28, 260),
('19254', 'Ségur-le-Château', '31T', 367651, 5032143, 45.4303, 1.30806, 282),
('19255', 'Seilhac', '31T', 399368, 5024332, 45.3653, 1.715, 490),
('19256', 'Sérandon', '31T', 448113, 5023188, 45.3603, 2.3375, 601),
('19257', 'Sérilhac', '31T', 399884, 4993550, 45.0883, 1.72778, 250),
('19258', 'Servières-le-Château', '31T', 423418, 4997977, 45.1311, 2.02611, 494),
('19259', 'Sexcles', '31T', 421971, 4988643, 45.0469, 2.00917, 440),
('19260', 'Sioniac', '31T', 406783, 4980915, 44.9756, 1.81778, 327),
('19261', 'Sornac', '31T', 437208, 5057452, 45.6678, 2.19388, 711),
('19262', 'Soudaine-Lavinadière', '31T', 401899, 5045653, 45.5575, 1.74305, 412),
('19263', 'Soudeilles', '31T', 427903, 5032923, 45.4461, 2.07806, 570),
('19264', 'Soursac', '31T', 437166, 5014121, 45.2778, 2.19889, 538),
('19265', 'Tarnac', '31T', 417992, 5059157, 45.6811, 1.94694, 690),
('19266', 'Thalamy', '31T', 457779, 5040213, 45.5142, 2.45945, 740),
('19268', 'Toy-Viam', '31T', 416775, 5055469, 45.6478, 1.93195, 690),
('19269', 'Treignac', '31T', 406089, 5043088, 45.535, 1.79722, 430),
('19270', 'Troche', '31T', 378096, 5027116, 45.3869, 1.44278, 380),
('19271', 'Tudeils', '31T', 404934, 4989152, 45.0494, 1.79277, 321),
('19272', 'Tulle', '31T', 403371, 5012911, 45.2631, 1.76833, 220),
('19273', 'Turenne', '31T', 388427, 4989852, 45.0533, 1.58306, 271),
('19274', 'Ussac', '31T', 383003, 5005445, 45.1928, 1.51055, 160),
('19275', 'Ussel', '31T', 446118, 5044221, 45.5494, 2.30972, 620),
('19276', 'Uzerche', '31T', 387714, 5030981, 45.4233, 1.56472, 300),
('19277', 'Valiergues', '31T', 444684, 5036549, 45.4803, 2.29222, 644),
('19278', 'Varetz', '31T', 378600, 5005744, 45.1947, 1.45444, 103),
('19279', 'Vars-sur-Roseix', '31T', 371698, 5013042, 45.2592, 1.36473, 200),
('19280', 'Végennes', '31T', 400771, 4981715, 44.9819, 1.74139, 208),
('19281', 'Veix', '31T', 409126, 5040080, 45.5083, 1.83667, 620),
('19282', 'Venarsal', '31T', 391999, 5005656, 45.1961, 1.625, 360),
('19283', 'Veyrières', '31T', 452683, 5037718, 45.4914, 2.39445, 635),
('19284', 'Viam', '31T', 413080, 5051322, 45.61, 1.88528, 670),
('19285', 'Vigeois', '31T', 384147, 5026106, 45.3789, 1.52028, 340),
('19286', 'Vignols', '31T', 374098, 5019693, 45.3194, 1.39362, 260),
('19287', 'Vitrac-sur-Montane', '31T', 416831, 5025343, 45.3767, 1.93778, 600),
('19288', 'Voutezac', '31T', 377650, 5016443, 45.2908, 1.43972, 267),
('19289', 'Yssandon', '31T', 371956, 5007480, 45.2092, 1.36945, 231),
('21001', 'Agencourt', '31T', 650168, 5221328, 47.1283, 4.98, 220),
('21002', 'Agey', '31T', 633322, 5238312, 47.2847, 4.76306, 330),
('21003', 'Ahuy', '31T', 652613, 5248171, 47.3692, 5.02139, 290),
('21004', 'Aignay-le-Duc', '31T', 630090, 5280553, 47.6653, 4.73278, 330),
('21005', 'Aiserey', '31T', 663893, 5226634, 47.1728, 5.16278, 197);
INSERT INTO `ods_communes` (`oc_code_insee`, `oc_nom`, `oc_secteur`, `oc_x_utm`, `oc_y_utm`, `oc_latitude`, `oc_longitude`, `oc_altitude`) VALUES
('21006', 'Aisey-sur-Seine', '31T', 618363, 5289814, 47.7508, 4.57916, 260),
('21007', 'Aisy-sous-Thil', '31T', 597181, 5249772, 47.3942, 4.28778, 353),
('21008', 'Alise-Sainte-Reine', '31T', 612011, 5265971, 47.5375, 4.48834, 330),
('21009', 'Allerey', '31T', 609068, 5227160, 47.1889, 4.43972, 400),
('21010', 'Aloxe-Corton', '31T', 641255, 5214097, 47.0653, 4.86028, 250),
('21011', 'Ampilly-les-Bordes', '31T', 622304, 5276770, 47.6328, 4.62806, 365),
('21012', 'Ampilly-le-Sec', '31T', 614802, 5296105, 47.8081, 4.53333, 280),
('21013', 'Ancey', '31T', 638037, 5243363, 47.3292, 4.82694, 400),
('21014', 'Antheuil', '31T', 632062, 5226023, 47.1744, 4.74277, 440),
('21015', 'Antigny-la-Ville', '31T', 618208, 5217516, 47.1006, 4.55778, 450),
('21016', 'Arceau', '31T', 665372, 5250431, 47.3864, 5.1911, 220),
('21017', 'Arcenant', '31T', 639923, 5222250, 47.1389, 4.84528, 340),
('21018', 'Arcey', '31T', 638094, 5237341, 47.275, 4.82583, 380),
('21020', 'Arconcey', '31T', 610143, 5230485, 47.2186, 4.45472, 400),
('21021', 'Arc-sur-Tille', '31T', 665442, 5245737, 47.3442, 5.19028, 220),
('21022', 'Argilly', '31T', 652801, 5214846, 47.0694, 5.0125, 210),
('21023', 'Arnay-le-Duc', '31T', 612997, 5220965, 47.1325, 4.49, 360),
('21024', 'Arnay-sous-Vitteaux', '31T', 612875, 5255858, 47.4464, 4.49723, 300),
('21025', 'Arrans', '31T', 599126, 5283370, 47.6961, 4.32112, 314),
('21026', 'Asnières-en-Montagne', '31T', 595707, 5285876, 47.7192, 4.27611, 270),
('21027', 'Asnières-lès-Dijon', '31T', 654262, 5250098, 47.3861, 5.04389, 330),
('21028', 'Athée', '31T', 679588, 5233577, 47.2311, 5.37251, 200),
('21029', 'Athie', '31T', 594294, 5268900, 47.5667, 4.25362, 230),
('21030', 'Aubaine', '31T', 630345, 5221785, 47.1367, 4.7189, 390),
('21031', 'Aubigny-en-Plaine', '31T', 665216, 5222222, 47.1328, 5.1786, 190),
('21032', 'Aubigny-la-Ronce', '31T', 622308, 5204753, 46.985, 4.60834, 480),
('21033', 'Aubigny-lès-Sombernon', '31T', 624141, 5240212, 47.3036, 4.64223, 420),
('21034', 'Autricourt', '31T', 620908, 5317417, 47.9986, 4.62083, 203),
('21035', 'Auvillars-sur-Saône', '31T', 659246, 5214552, 47.0653, 5.09723, 200),
('21036', 'Auxant', '31T', 623149, 5220211, 47.1239, 4.62361, 400),
('21037', 'Auxey-Duresses', '31T', 632953, 5205012, 46.9853, 4.74833, 270),
('21038', 'Auxonne', '31T', 680912, 5229509, 47.1942, 5.38834, 185),
('21039', 'Avelanges', '31T', 652257, 5272317, 47.5864, 5.02501, 380),
('21040', 'Avosnes', '31T', 623786, 5247091, 47.3656, 4.63945, 500),
('21041', 'Avot', '31T', 651390, 5275909, 47.6189, 5.01472, 320),
('21042', 'Bagnot', '31T', 657640, 5213830, 47.0592, 5.07584, 200),
('21043', 'Baigneux-les-Juifs', '31T', 623990, 5273038, 47.5989, 4.64944, 410),
('21044', 'Balot', '31T', 606950, 5296572, 47.8136, 4.42861, 275),
('21045', 'Barbirey-sur-Ouche', '31T', 632645, 5234776, 47.2531, 4.75306, 330),
('21046', 'Bard-le-Régulier', '31T', 599786, 5222149, 47.1453, 4.31611, 440),
('21047', 'Bard-lès-Époisses', '31T', 591514, 5264873, 47.5308, 4.21583, 250),
('21048', 'Barges', '31T', 656158, 5230780, 47.2119, 5.06222, 215),
('21049', 'Barjon', '31T', 647191, 5275122, 47.6128, 4.95861, 400),
('21050', 'Baubigny', '31T', 628092, 5203052, 46.9686, 4.68388, 410),
('21051', 'Baulme-la-Roche', '31T', 635873, 5245258, 47.3467, 4.79889, 430),
('21052', 'Beaulieu', '31T', 629605, 5287306, 47.7261, 4.72833, 330),
('21053', 'Beaumont-sur-Vingeanne', '31T', 678061, 5259608, 47.4656, 5.36278, 240),
('21054', 'Beaune', '31T', 639843, 5209493, 47.0242, 4.84027, 220),
('21055', 'Beaunotte', '31T', 628283, 5282057, 47.6792, 4.70917, 310),
('21056', 'Beire-le-Châtel', '31T', 666458, 5253582, 47.4144, 5.20667, 240),
('21057', 'Beire-le-Fort', '31T', 670734, 5233377, 47.2317, 5.25556, 197),
('21058', 'Belan-sur-Ource', '31T', 623337, 5311445, 47.9444, 4.65166, 220),
('21059', 'Bellefond', '31T', 656206, 5249562, 47.3808, 5.06944, 290),
('21060', 'Belleneuve', '31T', 672289, 5247108, 47.3547, 5.28139, 200),
('21061', 'Bellenod-sur-Seine', '31T', 623443, 5284052, 47.6981, 4.64528, 310),
('21062', 'Bellenot-sous-Pouilly', '31T', 616879, 5237748, 47.2828, 4.54555, 410),
('21063', 'Beneuvre', '31T', 645756, 5284044, 47.6933, 4.9425, 430),
('21064', 'Benoisey', '31T', 605154, 5270475, 47.5792, 4.39833, 320),
('21065', 'Bessey-en-Chaume', '31T', 632272, 5215651, 47.0811, 4.74249, 604),
('21066', 'Bessey-la-Cour', '31T', 622430, 5217262, 47.0975, 4.61333, 420),
('21067', 'Bessey-lès-Cîteaux', '31T', 663777, 5224715, 47.1556, 5.16055, 190),
('21068', 'Beurey-Bauguay', '31T', 607821, 5232078, 47.2333, 4.42444, 420),
('21069', 'Beurizot', '31T', 612845, 5245389, 47.3522, 4.49416, 360),
('21070', 'Bévy', '31T', 640511, 5226773, 47.1794, 4.85445, 409),
('21071', 'Bèze', '31T', 671020, 5259645, 47.4678, 5.26944, 220),
('21072', 'Bézouotte', '31T', 676111, 5250589, 47.385, 5.33334, 200),
('21073', 'Bierre-lès-Semur', '31T', 598077, 5252628, 47.4197, 4.30028, 361),
('21074', 'Billey', '31T', 684448, 5224149, 47.145, 5.43277, 200),
('21075', 'Billy-lès-Chanceaux', '31T', 628523, 5267361, 47.5469, 4.70805, 380),
('21076', 'Binges', '31T', 671321, 5244299, 47.3297, 5.2675, 217),
('21077', 'Bissey-la-Côte', '31T', 627769, 5308145, 47.9139, 4.71001, 280),
('21078', 'Bissey-la-Pierre', '31T', 606730, 5300614, 47.85, 4.42667, 230),
('21079', 'Blagny-sur-Vingeanne', '31T', 678588, 5256750, 47.4397, 5.36861, 205),
('21080', 'Blaisy-Bas', '31T', 631129, 5248054, 47.3728, 4.73694, 410),
('21081', 'Blaisy-Haut', '31T', 632958, 5246983, 47.3628, 4.76084, 560),
('21082', 'Blancey', '31T', 610824, 5240163, 47.3056, 4.46611, 430),
('21083', 'Blanot', '31T', 593715, 5225045, 47.1722, 4.23666, 405),
('21084', 'Blessey', '31T', 627073, 5260967, 47.4897, 4.68695, 470),
('21085', 'Bligny-le-Sec', '31T', 631392, 5255997, 47.4442, 4.74278, 510),
('21086', 'Bligny-lès-Beaune', '31T', 638895, 5204900, 46.9831, 4.82639, 215),
('21087', 'Bligny-sur-Ouche', '31T', 626841, 5218096, 47.1042, 4.67167, 370),
('21088', 'Boncourt-le-Bois', '31T', 651197, 5222311, 47.1369, 4.99389, 230),
('21089', 'Bonnencontre', '31T', 663046, 5216818, 47.0847, 5.14805, 195),
('21090', 'Boudreville', '31T', 636490, 5310785, 47.9358, 4.8275, 250),
('21091', 'Bouhey', '31T', 626190, 5228860, 47.2011, 4.66612, 430),
('21092', 'Bouilland', '31T', 634631, 5221417, 47.1325, 4.77528, 400),
('21093', 'Bouix', '31T', 610992, 5304894, 47.8878, 4.48472, 245),
('21094', 'Bourberain', '31T', 673005, 5263380, 47.5008, 5.29722, 250),
('21095', 'Bousselange', '31T', 671771, 5206221, 46.9872, 5.25889, 185),
('21096', 'Boussenois', '31T', 666049, 5277514, 47.6297, 5.21027, 360),
('21097', 'Boussey', '31T', 617205, 5247760, 47.3728, 4.5525, 350),
('21098', 'Boux-sous-Salmaise', '31T', 623344, 5259096, 47.4736, 4.63694, 310),
('21099', 'Bouze-lès-Beaune', '31T', 634540, 5212397, 47.0514, 4.77139, 390),
('21100', 'Brain', '31T', 613715, 5257882, 47.4644, 4.50889, 320),
('21101', 'Braux', '31T', 607632, 5251591, 47.4089, 4.42667, 350),
('21102', 'Brazey-en-Morvan', '31T', 597675, 5224954, 47.1708, 4.28889, 500),
('21103', 'Brazey-en-Plaine', '31T', 668116, 5222551, 47.135, 5.21694, 184),
('21104', 'Brémur-et-Vaurois', '31T', 620317, 5288032, 47.7344, 4.60473, 292),
('21105', 'Bressey-sur-Tille', '31T', 664918, 5241923, 47.31, 5.18194, 212),
('21106', 'Bretenière', '31T', 660022, 5234219, 47.2419, 5.11444, 210),
('21107', 'Bretigny', '31T', 658433, 5251815, 47.4006, 5.09973, 255),
('21108', 'Brianny', '31T', 603533, 5252227, 47.4153, 4.3725, 324),
('21109', 'Brion-sur-Ource', '31T', 624149, 5308436, 47.9172, 4.66166, 230),
('21110', 'Brochon', '31T', 648849, 5233526, 47.2383, 4.96667, 300),
('21111', 'Brognon', '31T', 663239, 5252472, 47.4053, 5.16362, 235),
('21112', 'Broin', '31T', 660132, 5216121, 47.0792, 5.10944, 220),
('21113', 'Broindon', '31T', 654852, 5229201, 47.1981, 5.04444, 220),
('21114', 'Buffon', '31T', 595935, 5278376, 47.6517, 4.2775, 220),
('21115', 'Buncey', '31T', 616892, 5297691, 47.8219, 4.56166, 240),
('21116', 'Bure-les-Templiers', '31T', 642068, 5289018, 47.7389, 4.895, 360),
('21117', 'Busseaut', '31T', 623623, 5288349, 47.7367, 4.64889, 300),
('21118', 'Busserotte-et-Montenaille', '31T', 648326, 5280588, 47.6617, 4.97556, 380),
('21119', 'Bussières', '31T', 647528, 5280784, 47.6636, 4.965, 440),
('21120', 'La Bussière-sur-Ouche', '31T', 630507, 5230652, 47.2164, 4.72361, 310),
('21121', 'Bussy-la-Pesle', '31T', 628898, 5247417, 47.3675, 4.70722, 450),
('21122', 'Bussy-le-Grand', '31T', 614146, 5270119, 47.5744, 4.51778, 370),
('21123', 'Buxerolles', '31T', 644647, 5296712, 47.8075, 4.93194, 370),
('21124', 'Censerey', '31T', 602477, 5228525, 47.2022, 4.35305, 400),
('21125', 'Cérilly', '31T', 611929, 5302658, 47.8675, 4.49667, 222),
('21126', 'Cessey-sur-Tille', '31T', 667971, 5238766, 47.2808, 5.22111, 205),
('21127', 'Chaignay', '31T', 656068, 5260278, 47.4772, 5.07139, 340),
('21128', 'Chailly-sur-Armançon', '31T', 612406, 5236487, 47.2722, 4.48611, 390),
('21129', 'Chambain', '31T', 643925, 5295613, 47.7978, 4.92194, 380),
('21130', 'Chambeire', '31T', 671199, 5239105, 47.2831, 5.26389, 207),
('21131', 'Chamblanc', '31T', 663455, 5209601, 47.0197, 5.15083, 180),
('21133', 'Chambolle-Musigny', '31T', 647883, 5227571, 47.185, 4.95195, 280),
('21134', 'Chamesson', '31T', 615464, 5294234, 47.7911, 4.54167, 250),
('21135', 'Champagne-sur-Vingeanne', '31T', 680342, 5257669, 47.4475, 5.39223, 210),
('21136', 'Champagny', '31T', 632931, 5257422, 47.4567, 4.76361, 480),
('21137', 'Champ-d''Oiseau', '31T', 601234, 5267596, 47.5539, 4.34556, 300),
('21138', 'Champdôtre', '31T', 674535, 5227927, 47.1817, 5.30361, 190),
('21139', 'Champeau-en-Morvan', '31T', 586556, 5236576, 47.2769, 4.14444, 551),
('21140', 'Champignolles', '31T', 618877, 5212527, 47.0556, 4.56528, 400),
('21141', 'Champrenault', '31T', 626766, 5250923, 47.3994, 4.67999, 450),
('21142', 'Chanceaux', '31T', 629303, 5264259, 47.5189, 4.7175, 460),
('21143', 'Channay', '31T', 599559, 5304191, 47.8833, 4.33166, 220),
('21144', 'Charencey', '31T', 626001, 5253377, 47.4217, 4.67056, 352),
('21145', 'Charigny', '31T', 607587, 5254029, 47.4308, 4.42666, 400),
('21146', 'Charmes', '31T', 677141, 5249817, 47.3778, 5.34666, 200),
('21147', 'Charny', '31T', 607843, 5243504, 47.3361, 4.4275, 500),
('21148', 'Charrey-sur-Saône', '31T', 664343, 5217224, 47.0881, 5.16528, 184),
('21149', 'Charrey-sur-Seine', '31T', 613089, 5311297, 47.945, 4.51444, 195),
('21150', 'Chassagne-Montrachet', '31T', 631617, 5199485, 46.9358, 4.72917, 250),
('21151', 'Chassey', '31T', 608916, 5259180, 47.4769, 4.44555, 320),
('21152', 'Châteauneuf', '31T', 624069, 5230606, 47.2172, 4.63861, 460),
('21153', 'Châtellenot', '31T', 612819, 5232511, 47.2364, 4.49056, 490),
('21154', 'Châtillon-sur-Seine', '31T', 617764, 5301847, 47.8592, 4.57444, 230),
('21155', 'Chaudenay-la-Ville', '31T', 624889, 5224663, 47.1636, 4.64778, 430),
('21156', 'Chaudenay-le-Château', '31T', 624641, 5226418, 47.1794, 4.64499, 440),
('21157', 'Chaugey', '31T', 646152, 5290664, 47.7528, 4.95, 400),
('21158', 'Chaume-et-Courchamp', '31T', 676828, 5271250, 47.5706, 5.3511, 280),
('21159', 'La Chaume', '31T', 637469, 5304537, 47.8794, 4.83861, 290),
('21160', 'Chaume-lès-Baigneux', '31T', 618998, 5276084, 47.6272, 4.58389, 360),
('21161', 'Chaumont-le-Bois', '31T', 617927, 5309139, 47.9247, 4.57861, 230),
('21162', 'Chaux', '31T', 644500, 5221218, 47.1286, 4.90528, 380),
('21163', 'Chazeuil', '31T', 670799, 5270082, 47.5617, 5.27056, 300),
('21164', 'Chazilly', '31T', 619814, 5226689, 47.1828, 4.58139, 410),
('21165', 'Chemin-d''Aisey', '31T', 617301, 5288774, 47.7417, 4.56472, 320),
('21166', 'Chenôve', '31T', 652299, 5240039, 47.2961, 5.01445, 280),
('21167', 'Cheuge', '31T', 680553, 5251465, 47.3917, 5.39249, 200),
('21168', 'Chevannay', '31T', 624847, 5250480, 47.3958, 4.65445, 370),
('21169', 'Chevannes', '31T', 640143, 5224510, 47.1592, 4.84889, 409),
('21170', 'Chevigny-en-Valière', '31T', 650456, 5203235, 46.9656, 4.97777, 187),
('21171', 'Chevigny-Saint-Sauveur', '31T', 661436, 5240962, 47.3022, 5.13555, 215),
('21172', 'Chivres', '31T', 659241, 5204452, 46.9744, 5.09361, 190),
('21173', 'Chorey-les-Beaune', '31T', 641784, 5212257, 47.0486, 4.86667, 220),
('21175', 'Cirey-lès-Pontailler', '31T', 673509, 5242046, 47.3089, 5.29556, 209),
('21176', 'Civry-en-Montagne', '31T', 621881, 5238775, 47.2911, 4.61195, 520),
('21177', 'Clamerey', '31T', 607675, 5249245, 47.3878, 4.42667, 340),
('21178', 'Clémencey', '31T', 642353, 5234200, 47.2458, 4.88111, 376),
('21179', 'Clénay', '31T', 660054, 5252353, 47.405, 5.12139, 247),
('21180', 'Cléry', '31T', 688764, 5240136, 47.2875, 5.49639, 198),
('21181', 'Clomot', '31T', 612625, 5227227, 47.1889, 4.48667, 380),
('21182', 'Collonges-lès-Bévy', '31T', 640371, 5225566, 47.1686, 4.85222, 420),
('21183', 'Collonges-lès-Premières', '31T', 671638, 5232692, 47.2253, 5.26723, 195),
('21184', 'Colombier', '31T', 626755, 5225073, 47.1669, 4.6725, 440),
('21185', 'Combertault', '31T', 644390, 5205772, 46.9897, 4.89889, 194),
('21186', 'Comblanchien', '31T', 645817, 5218223, 47.1014, 4.92166, 243),
('21187', 'Commarin', '31T', 624670, 5235035, 47.2569, 4.64778, 380),
('21189', 'Corberon', '31T', 651704, 5208208, 47.01, 4.99583, 193),
('21190', 'Corcelles-les-Arts', '31T', 636633, 5201235, 46.9506, 4.79556, 207),
('21191', 'Corcelles-lès-Cîteaux', '31T', 657576, 5226555, 47.1736, 5.07945, 225),
('21192', 'Corcelles-les-Monts', '31T', 646737, 5239774, 47.295, 4.94084, 460),
('21193', 'Corgengoux', '31T', 651194, 5205817, 46.9886, 4.98833, 180),
('21194', 'Corgoloin', '31T', 645255, 5216201, 47.0833, 4.91361, 230),
('21195', 'Cormot-le-Grand', '31T', 624961, 5202152, 46.9611, 4.64249, 350),
('21196', 'Corpeau', '31T', 633413, 5198629, 46.9278, 4.7525, 230),
('21197', 'Corpoyer-la-Chapelle', '31T', 621255, 5266927, 47.5444, 4.61138, 340),
('21198', 'Corrombles', '31T', 590178, 5263370, 47.5175, 4.19777, 272),
('21199', 'Corsaint', '31T', 590310, 5265688, 47.5383, 4.2, 280),
('21200', 'Couchey', '31T', 649754, 5235989, 47.2603, 4.97945, 290),
('21201', 'Coulmier-le-Sec', '31T', 611909, 5289717, 47.7511, 4.49306, 328),
('21202', 'Courban', '31T', 629775, 5308467, 47.9164, 4.73694, 260),
('21203', 'Courcelles-Frémoy', '31T', 588513, 5255903, 47.4506, 4.17417, 320),
('21204', 'Courcelles-lès-Montbard', '31T', 605105, 5272050, 47.5933, 4.39806, 240),
('21205', 'Courcelles-lès-Semur', '31T', 597968, 5256640, 47.4558, 4.29972, 352),
('21207', 'Courlon', '31T', 650460, 5279561, 47.6519, 5.00361, 360),
('21208', 'Courtivron', '31T', 647997, 5267235, 47.5417, 4.96667, 320),
('21209', 'Couternon', '31T', 662514, 5244544, 47.3342, 5.15111, 217),
('21210', 'Créancey', '31T', 619965, 5233764, 47.2464, 4.58527, 400),
('21211', 'Crécey-sur-Tille', '31T', 660110, 5269439, 47.5586, 5.12833, 280),
('21212', 'Crépand', '31T', 598492, 5274003, 47.6119, 4.31056, 250),
('21213', 'Crimolois', '31T', 660513, 5237816, 47.2742, 5.12222, 220),
('21214', 'Crugey', '31T', 626735, 5226987, 47.1842, 4.67278, 350),
('21215', 'Cuiserey', '31T', 675332, 5249268, 47.3733, 5.3225, 195),
('21216', 'Culètre', '31T', 619537, 5222699, 47.1469, 4.57667, 440),
('21217', 'Curley', '31T', 644325, 5229275, 47.2011, 4.90556, 440),
('21218', 'Curtil-Saint-Seine', '31T', 645365, 5256975, 47.45, 4.92833, 556),
('21219', 'Curtil-Vergy', '31T', 643165, 5225849, 47.1706, 4.88916, 350),
('21220', 'Cussey-les-Forges', '31T', 656093, 5278875, 47.6444, 5.07833, 315),
('21221', 'Cussy-la-Colonne', '31T', 624692, 5210978, 47.0406, 4.64139, 490),
('21222', 'Cussy-le-Châtel', '31T', 620002, 5224716, 47.165, 4.58334, 440),
('21223', 'Daix', '31T', 650940, 5246305, 47.3528, 4.99861, 340),
('21224', 'Dampierre-en-Montagne', '31T', 617512, 5254436, 47.4328, 4.55833, 468),
('21225', 'Dampierre-et-Flée', '31T', 678429, 5260608, 47.4744, 5.36806, 220),
('21226', 'Darcey', '31T', 618210, 5267606, 47.5511, 4.57112, 277),
('21227', 'Darois', '31T', 646634, 5250613, 47.3925, 4.94305, 490),
('21228', 'Détain-et-Bruant', '31T', 635647, 5225826, 47.1719, 4.79, 590),
('21229', 'Diancey', '31T', 603378, 5226348, 47.1825, 4.36444, 390),
('21230', 'Diénay', '31T', 655474, 5265297, 47.5225, 5.06528, 290),
('21231', 'Dijon', '31T', 653818, 5243012, 47.3225, 5.03555, 245),
('21232', 'Dompierre-en-Morvan', '31T', 593011, 5249643, 47.3936, 4.23251, 380),
('21233', 'Drambon', '31T', 678434, 5245252, 47.3364, 5.36194, 190),
('21234', 'Drée', '31T', 627640, 5245444, 47.35, 4.69, 480),
('21235', 'Duesme', '31T', 626409, 5278063, 47.6436, 4.68306, 320),
('21236', 'Ébaty', '31T', 635802, 5198714, 46.9281, 4.78389, 201),
('21237', 'Échalot', '31T', 638068, 5274930, 47.6131, 4.83722, 440),
('21238', 'Échannay', '31T', 626799, 5237705, 47.2806, 4.67666, 430),
('21239', 'Échenon', '31T', 673222, 5220257, 47.1131, 5.28333, 184),
('21240', 'Échevannes', '31T', 663278, 5266097, 47.5278, 5.16917, 265),
('21241', 'Échevronne', '31T', 640411, 5218525, 47.1053, 4.85055, 360),
('21242', 'Échigey', '31T', 666407, 5227878, 47.1833, 5.19639, 195),
('21243', 'Écutigny', '31T', 623220, 5215765, 47.0839, 4.62333, 418),
('21244', 'Éguilly', '31T', 613452, 5240058, 47.3042, 4.50084, 370),
('21245', 'Épagny', '31T', 655297, 5256983, 47.4478, 5.06, 320),
('21246', 'Épernay-sous-Gevrey', '31T', 653954, 5227293, 47.1811, 5.03194, 225),
('21247', 'Époisses', '31T', 588375, 5262293, 47.5081, 4.17362, 265),
('21248', 'Éringes', '31T', 610118, 5272080, 47.5928, 4.46473, 370),
('21249', 'Esbarres', '31T', 668033, 5218069, 47.0947, 5.21417, 182),
('21250', 'Essarois', '31T', 633700, 5290457, 47.7536, 4.78388, 310),
('21251', 'Essey', '31T', 615241, 5229069, 47.205, 4.52166, 401),
('21252', 'Étais', '31T', 607812, 5284915, 47.7086, 4.43723, 341),
('21253', 'Étalante', '31T', 632257, 5277914, 47.6411, 4.76084, 362),
('21254', 'L''Étang-Vergy', '31T', 642303, 5226662, 47.1781, 4.87805, 317),
('21255', 'Étaules', '31T', 646640, 5252065, 47.4056, 4.94361, 510),
('21256', 'Étevaux', '31T', 675102, 5243607, 47.3225, 5.31723, 200),
('21257', 'Étormay', '31T', 618380, 5272613, 47.5961, 4.57473, 380),
('21258', 'Étrochey', '31T', 613847, 5305506, 47.8928, 4.52306, 206),
('21259', 'Fain-lès-Montbard', '31T', 605288, 5273473, 47.6061, 4.40084, 230),
('21260', 'Fain-lès-Moutiers', '31T', 591170, 5270858, 47.5847, 4.2125, 320),
('21261', 'Fauverney', '31T', 662354, 5235859, 47.2561, 5.14583, 220),
('21262', 'Faverolles-lès-Lucey', '31T', 639351, 5299733, 47.8358, 4.86222, 320),
('21263', 'Fénay', '31T', 656201, 5233129, 47.2331, 5.06361, 230),
('21264', 'Le Fête', '31T', 615030, 5225884, 47.1764, 4.51806, 400),
('21265', 'Fixin', '31T', 649354, 5234342, 47.2456, 4.97361, 295),
('21266', 'Flacey', '31T', 662114, 5255221, 47.4303, 5.14972, 250),
('21267', 'Flagey-Echézeaux', '31T', 650061, 5225525, 47.1661, 4.98, 224),
('21268', 'Flagey-lès-Auxonne', '31T', 681241, 5224266, 47.1469, 5.39056, 190),
('21269', 'Flammerans', '31T', 685270, 5233567, 47.2294, 5.4475, 190),
('21270', 'Flavignerot', '31T', 644975, 5237908, 47.2786, 4.91694, 500),
('21271', 'Flavigny-sur-Ozerain', '31T', 615286, 5263193, 47.5119, 4.53111, 400),
('21272', 'Flée', '31T', 600163, 5254392, 47.4353, 4.32833, 330),
('21273', 'Fleurey-sur-Ouche', '31T', 640519, 5241445, 47.3114, 4.85917, 280),
('21274', 'Foissy', '31T', 618496, 5219961, 47.1225, 4.56222, 440),
('21275', 'Foncegrive', '31T', 662078, 5275394, 47.6117, 5.15667, 320),
('21276', 'Fontaines-en-Duesmois', '31T', 615985, 5278525, 47.6497, 4.54444, 360),
('21277', 'Fontaine-Française', '31T', 678501, 5266480, 47.5272, 5.37139, 230),
('21278', 'Fontaine-lès-Dijon', '31T', 652516, 5245419, 47.3444, 5.01916, 300),
('21279', 'Fontaines-les-Sèches', '31T', 601507, 5292645, 47.7792, 4.35501, 270),
('21280', 'Fontangy', '31T', 602513, 5244613, 47.3469, 4.35722, 418),
('21281', 'Fontenelle', '31T', 678749, 5263831, 47.5033, 5.37361, 230),
('21282', 'Forléans', '31T', 590759, 5259643, 47.4839, 4.20472, 320),
('21283', 'Fraignot-et-Vesvrotte', '31T', 645595, 5279654, 47.6539, 4.93889, 470),
('21284', 'Francheville', '31T', 641875, 5257477, 47.4553, 4.88223, 480),
('21285', 'Franxault', '31T', 673035, 5213641, 47.0536, 5.27833, 182),
('21286', 'Frénois', '31T', 642302, 5265734, 47.5294, 4.89055, 360),
('21287', 'Fresnes', '31T', 608166, 5273680, 47.6075, 4.43917, 300),
('21288', 'Frôlois', '31T', 622733, 5265260, 47.5292, 4.63055, 420),
('21289', 'Fussey', '31T', 639302, 5219981, 47.1186, 4.8364, 465),
('21290', 'Gemeaux', '31T', 661050, 5260382, 47.4769, 5.1375, 310),
('21291', 'Genay', '31T', 597672, 5264324, 47.525, 4.2975, 230),
('21292', 'Genlis', '31T', 668054, 5234381, 47.2414, 5.22056, 199),
('21293', 'Gergueil', '31T', 637576, 5233438, 47.24, 4.81778, 510),
('21294', 'Gerland', '31T', 652350, 5217615, 47.0944, 5.0075, 220),
('21295', 'Gevrey-Chambertin', '31T', 649031, 5232140, 47.2258, 4.96861, 280),
('21296', 'Gevrolles', '31T', 632621, 5316563, 47.9886, 4.77751, 225),
('21297', 'Gilly-lès-Cîteaux', '31T', 650042, 5226297, 47.1731, 4.98, 225),
('21298', 'Gissey-le-Vieil', '31T', 612067, 5242162, 47.3233, 4.48305, 360),
('21299', 'Gissey-sous-Flavigny', '31T', 619780, 5263407, 47.5131, 4.59083, 290),
('21300', 'Gissey-sur-Ouche', '31T', 633710, 5236036, 47.2642, 4.7675, 310),
('21301', 'Glanon', '31T', 660184, 5211859, 47.0408, 5.10862, 190),
('21302', 'Gomméville', '31T', 611766, 5313217, 47.9625, 4.49723, 195),
('21303', 'Les Goulles', '31T', 642486, 5305030, 47.8828, 4.90584, 280),
('21304', 'Grancey-le-Château-Neuvelle', '31T', 652184, 5281490, 47.6689, 5.02722, 400),
('21305', 'Grancey-sur-Ource', '31T', 618421, 5318415, 48.0081, 4.58778, 210),
('21306', 'Grenant-lès-Sombernon', '31T', 629342, 5236741, 47.2714, 4.70999, 500),
('21307', 'Grésigny-Sainte-Reine', '31T', 613118, 5268154, 47.5569, 4.5036, 258),
('21308', 'Grignon', '31T', 606109, 5268516, 47.5614, 4.41056, 350),
('21309', 'Griselles', '31T', 601126, 5302521, 47.8681, 4.35223, 205),
('21310', 'Grosbois-en-Montagne', '31T', 620682, 5241900, 47.3194, 4.59695, 390),
('21311', 'Grosbois-lès-Tichey', '31T', 670359, 5208281, 47.0061, 5.24111, 185),
('21312', 'Gurgy-la-Ville', '31T', 645174, 5301421, 47.8497, 4.94056, 300),
('21313', 'Gurgy-le-Château', '31T', 644114, 5298892, 47.8272, 4.92555, 354),
('21314', 'Hauteroche', '31T', 619076, 5262034, 47.5008, 4.58111, 370),
('21315', 'Hauteville-lès-Dijon', '31T', 650633, 5247656, 47.365, 4.99501, 390),
('21316', 'Heuilley-sur-Saône', '31T', 685526, 5244823, 47.3306, 5.45556, 190),
('21317', 'Is-sur-Tille', '31T', 659046, 5265517, 47.5236, 5.11278, 280),
('21318', 'Ivry-en-Montagne', '31T', 624297, 5209673, 47.0289, 4.63583, 471),
('21319', 'Izeure', '31T', 662051, 5226181, 47.1692, 5.13833, 192),
('21320', 'Izier', '31T', 665701, 5238763, 47.2814, 5.19111, 205),
('21321', 'Jailly-les-Moulins', '31T', 620363, 5257458, 47.4594, 4.59695, 310),
('21322', 'Jallanges', '31T', 663682, 5205962, 46.9869, 5.1525, 180),
('21323', 'Jancigny', '31T', 681753, 5250668, 47.3842, 5.40805, 200),
('21324', 'Jeux-lès-Bard', '31T', 594291, 5265164, 47.5331, 4.25278, 230),
('21325', 'Jouey', '31T', 609647, 5223188, 47.1531, 4.44639, 360),
('21326', 'Jours-lès-Baigneux', '31T', 620266, 5276357, 47.6294, 4.60083, 373),
('21327', 'Jours-en-Vaux', '31T', 620612, 5211234, 47.0436, 4.58777, 400),
('21328', 'Juillenay', '31T', 596425, 5245992, 47.3603, 4.27694, 380),
('21329', 'Juilly', '31T', 605564, 5260508, 47.4894, 4.40139, 310),
('21330', 'Labergement-Foigney', '31T', 670272, 5236267, 47.2578, 5.25056, 207),
('21331', 'Labergement-lès-Auxonne', '31T', 680385, 5225352, 47.1569, 5.37972, 183),
('21332', 'Labergement-lès-Seurre', '31T', 659055, 5206701, 46.9947, 5.09195, 200),
('21333', 'Labruyère', '31T', 663490, 5212197, 47.0431, 5.15223, 179),
('21334', 'Lacanche', '31T', 618537, 5214743, 47.0756, 4.56139, 410),
('21335', 'Lacour-d''Arcenay', '31T', 594618, 5246148, 47.3619, 4.25305, 390),
('21336', 'Laignes', '31T', 602194, 5299698, 47.8425, 4.36584, 220),
('21337', 'Lamarche-sur-Saône', '31T', 680444, 5237929, 47.27, 5.38556, 190),
('21338', 'Lamargelle', '31T', 638421, 5266197, 47.5344, 4.83916, 352),
('21339', 'Lantenay', '31T', 640921, 5244852, 47.3419, 4.86556, 370),
('21340', 'Lanthes', '31T', 667552, 5206656, 46.9922, 5.20361, 190),
('21341', 'Lantilly', '31T', 603613, 5266619, 47.5447, 4.37694, 372),
('21342', 'Laperrière-sur-Saône', '31T', 677717, 5220174, 47.1111, 5.3425, 190),
('21343', 'Larrey', '31T', 607345, 5304424, 47.8842, 4.43583, 230),
('21344', 'Lechâtelet', '31T', 662911, 5214065, 47.06, 5.14528, 180),
('21345', 'Léry', '31T', 638381, 5268759, 47.5575, 4.83944, 360),
('21346', 'Leuglay', '31T', 634125, 5297324, 47.8153, 4.79167, 270),
('21347', 'Levernois', '31T', 642461, 5206003, 46.9922, 4.87361, 198),
('21348', 'Licey-sur-Vingeanne', '31T', 679345, 5261470, 47.4819, 5.38056, 230),
('21349', 'Liernais', '31T', 597064, 5228835, 47.2058, 4.28167, 496),
('21350', 'Lignerolles', '31T', 641144, 5307221, 47.9028, 4.88861, 271),
('21351', 'Longchamp', '31T', 673102, 5236597, 47.26, 5.28806, 205),
('21352', 'Longeault', '31T', 670479, 5232010, 47.2194, 5.25167, 195),
('21353', 'Longecourt-en-Plaine', '31T', 662883, 5229633, 47.2, 5.15055, 202),
('21354', 'Longecourt-lès-Culêtre', '31T', 617805, 5223962, 47.1586, 4.55416, 450),
('21355', 'Longvic', '31T', 656006, 5238900, 47.285, 5.06305, 226),
('21356', 'Losne', '31T', 671793, 5218609, 47.0986, 5.26388, 180),
('21357', 'Louesme', '31T', 631464, 5306343, 47.8969, 4.75889, 300),
('21358', 'Lucenay-le-Duc', '31T', 614127, 5274288, 47.6119, 4.51861, 390),
('21359', 'Lucey', '31T', 639261, 5301739, 47.8539, 4.86166, 310),
('21360', 'Lusigny-sur-Ouche', '31T', 626998, 5216678, 47.0914, 4.67334, 380),
('21361', 'Lux', '31T', 666678, 5262053, 47.4906, 5.21277, 253),
('21362', 'Maconge', '31T', 619308, 5230909, 47.2208, 4.57583, 410),
('21363', 'Magnien', '31T', 609243, 5217715, 47.1039, 4.43973, 410),
('21364', 'Magny-Lambert', '31T', 618120, 5282336, 47.6836, 4.57389, 352),
('21365', 'Magny-la-Ville', '31T', 607441, 5259740, 47.4822, 4.42612, 350),
('21366', 'Magny-lès-Aubigny', '31T', 665260, 5219906, 47.1119, 5.17833, 195),
('21367', 'Magny-Montarlot', '31T', 677618, 5235372, 47.2478, 5.34722, 215),
('21368', 'Magny-lès-Villers', '31T', 642288, 5217643, 47.0969, 4.875, 340),
('21369', 'Magny-Saint-Médard', '31T', 670105, 5250010, 47.3814, 5.2536, 210),
('21370', 'Magny-sur-Tille', '31T', 664436, 5238141, 47.2761, 5.17417, 214),
('21371', 'Les Maillys', '31T', 677441, 5223039, 47.1369, 5.34, 182),
('21372', 'Maisey-le-Duc', '31T', 625420, 5300588, 47.8464, 4.67639, 250),
('21373', 'Mâlain', '31T', 635883, 5243004, 47.3264, 4.79834, 330),
('21374', 'Maligny', '31T', 614532, 5215683, 47.0847, 4.50889, 395),
('21375', 'Manlay', '31T', 601860, 5220362, 47.1289, 4.34305, 410),
('21376', 'Marandeuil', '31T', 677283, 5246515, 47.3481, 5.34723, 190),
('21377', 'Marcellois', '31T', 621787, 5245320, 47.35, 4.6125, 517),
('21378', 'Marcenay', '31T', 605081, 5302128, 47.8639, 4.405, 219),
('21379', 'Marcheseuil', '31T', 602399, 5222132, 47.1447, 4.35056, 400),
('21380', 'Marcigny-sous-Thil', '31T', 604460, 5249588, 47.3914, 4.38416, 320),
('21381', 'Marcilly-et-Dracy', '31T', 613033, 5250920, 47.4019, 4.49806, 350),
('21382', 'Marcilly-Ogny', '31T', 606437, 5234184, 47.2525, 4.40667, 400),
('21383', 'Marcilly-sur-Tille', '31T', 660564, 5265095, 47.5194, 5.13277, 280),
('21384', 'Marey-lès-Fussey', '31T', 640962, 5220175, 47.12, 4.85833, 410),
('21385', 'Marey-sur-Tille', '31T', 656082, 5273840, 47.5992, 5.07639, 295),
('21386', 'Marigny-le-Cahouët', '31T', 610073, 5257781, 47.4642, 4.46055, 300),
('21387', 'Marigny-lès-Reullée', '31T', 649293, 5206603, 46.9961, 4.9636, 185),
('21388', 'Marliens', '31T', 665515, 5231127, 47.2128, 5.18583, 199),
('21389', 'Marmagne', '31T', 602874, 5275345, 47.6233, 4.36917, 220),
('21390', 'Marsannay-la-Côte', '31T', 650486, 5236965, 47.2689, 4.98945, 271),
('21391', 'Marsannay-le-Bois', '31T', 657892, 5256311, 47.4411, 5.09416, 300),
('21392', 'Martrois', '31T', 616060, 5240943, 47.3117, 4.53556, 450),
('21393', 'Massingy', '31T', 619316, 5307222, 47.9072, 4.59667, 240),
('21394', 'Massingy-lès-Semur', '31T', 605560, 5263041, 47.5122, 4.40195, 340),
('21395', 'Massingy-lès-Vitteaux', '31T', 619408, 5250830, 47.4, 4.58249, 420),
('21396', 'Mauvilly', '31T', 627461, 5285313, 47.7086, 4.69917, 380),
('21397', 'Mavilly-Mandelot', '31T', 631972, 5212062, 47.0489, 4.73749, 430),
('21398', 'Maxilly-sur-Saône', '31T', 683221, 5245307, 47.3356, 5.42528, 195),
('21399', 'Meilly-sur-Rouvres', '31T', 618269, 5229221, 47.2058, 4.56167, 432),
('21400', 'Le Meix', '31T', 645867, 5273792, 47.6011, 4.94056, 400),
('21401', 'Meloisey', '31T', 631909, 5210146, 47.0317, 4.73611, 400),
('21402', 'Menesble', '31T', 641993, 5292909, 47.7739, 4.89527, 370),
('21403', 'Ménessaire', '31T', 586999, 5220712, 47.1342, 4.14722, 552),
('21404', 'Ménétreux-le-Pitois', '31T', 610627, 5268353, 47.5592, 4.47056, 330),
('21405', 'Merceuil', '31T', 640025, 5200850, 46.9464, 4.84, 195),
('21406', 'Mesmont', '31T', 631801, 5241459, 47.3133, 4.74388, 409),
('21407', 'Messanges', '31T', 641923, 5224954, 47.1628, 4.8725, 330),
('21408', 'Messigny-et-Vantoux', '31T', 652233, 5252300, 47.4064, 5.01778, 310),
('21409', 'Meuilley', '31T', 642273, 5222677, 47.1422, 4.87639, 290),
('21410', 'Meulson', '31T', 627406, 5283026, 47.6881, 4.69777, 400),
('21411', 'Meursanges', '31T', 647791, 5205824, 46.9894, 4.94361, 185),
('21412', 'Meursault', '31T', 634920, 5204006, 46.9758, 4.77389, 240),
('21413', 'Millery', '31T', 599007, 5263327, 47.5158, 4.315, 240),
('21414', 'Mimeure', '31T', 613443, 5222981, 47.1506, 4.49639, 380),
('21415', 'Minot', '31T', 640758, 5281141, 47.6683, 4.87499, 420),
('21416', 'Mirebeau-sur-Bèze', '31T', 674932, 5252129, 47.3992, 5.31834, 200),
('21417', 'Missery', '31T', 603826, 5240344, 47.3083, 4.3736, 370),
('21418', 'Moitron', '31T', 636647, 5282093, 47.6778, 4.82056, 410),
('21419', 'Molesme', '31T', 601470, 5310123, 47.9364, 4.35861, 210),
('21420', 'Molinot', '31T', 620850, 5207842, 47.0131, 4.59, 390),
('21421', 'Moloy', '31T', 645347, 5266952, 47.5397, 4.93138, 330),
('21422', 'Molphey', '31T', 591625, 5244341, 47.3461, 4.21305, 470),
('21423', 'Montagny-lès-Beaune', '31T', 640655, 5205528, 46.9883, 4.84972, 210),
('21424', 'Montagny-lès-Seurre', '31T', 671378, 5210349, 47.0244, 5.25528, 190),
('21425', 'Montbard', '31T', 600782, 5275586, 47.6258, 4.34139, 211),
('21426', 'Montberthault', '31T', 587311, 5257861, 47.4683, 4.15861, 300),
('21427', 'Montceau-et-Écharnant', '31T', 625952, 5213259, 47.0608, 4.65861, 510),
('21428', 'Monthelie', '31T', 634228, 5205658, 46.9908, 4.76528, 290),
('21429', 'Montigny-Montfort', '31T', 601211, 5270097, 47.5764, 4.34583, 300),
('21430', 'Montigny-Saint-Barthélemy', '31T', 595746, 5252898, 47.4225, 4.26944, 350),
('21431', 'Montigny-sur-Armançon', '31T', 603624, 5254205, 47.4331, 4.37417, 300),
('21432', 'Montigny-sur-Aube', '31T', 632792, 5312706, 47.9539, 4.77861, 240),
('21433', 'Montigny-Mornay-Villeneuve-sur-Vingeanne', '31T', 683343, 5270895, 47.5656, 5.4375, 250),
('21434', 'Montlay-en-Auxois', '31T', 596776, 5245072, 47.3519, 4.28139, 381),
('21435', 'Montliot-et-Courcelles', '31T', 616548, 5305467, 47.8919, 4.55917, 220),
('21436', 'Montmain', '31T', 656843, 5210442, 47.0289, 5.06417, 205),
('21437', 'Montmançon', '31T', 679678, 5247144, 47.3531, 5.37916, 210),
('21438', 'Montmoyen', '31T', 634397, 5288249, 47.7336, 4.7925, 310),
('21439', 'Montoillot', '31T', 625356, 5236377, 47.2689, 4.65722, 400),
('21440', 'Montot', '31T', 670225, 5223260, 47.1408, 5.245, 195),
('21441', 'Mont-Saint-Jean', '31T', 606186, 5238780, 47.2939, 4.40444, 478),
('21442', 'Morey-Saint-Denis', '31T', 648569, 5228762, 47.1956, 4.96139, 270),
('21444', 'Mosson', '31T', 621675, 5308600, 47.9192, 4.62861, 256),
('21445', 'La Motte-Ternant', '31T', 600557, 5242418, 47.3275, 4.33084, 380),
('21446', 'Moutiers-Saint-Jean', '31T', 591732, 5268304, 47.5617, 4.21944, 260),
('21447', 'Musigny', '31T', 615162, 5224466, 47.1636, 4.51944, 400),
('21448', 'Mussy-la-Fosse', '31T', 608199, 5264015, 47.5206, 4.43722, 290),
('21449', 'Nan-sous-Thil', '31T', 602629, 5247610, 47.3739, 4.35945, 380),
('21450', 'Nantoux', '31T', 633702, 5210248, 47.0322, 4.75972, 310),
('21451', 'Nesle-et-Massoult', '31T', 607171, 5292500, 47.7769, 4.43055, 290),
('21452', 'Neuilly-lès-Dijon', '31T', 659254, 5238524, 47.2808, 5.10584, 225),
('21454', 'Nicey', '31T', 598352, 5301886, 47.8628, 4.315, 210),
('21455', 'Nod-sur-Seine', '31T', 617972, 5291660, 47.7675, 4.57445, 280),
('21456', 'Nogent-lès-Montbard', '31T', 603887, 5273572, 47.6072, 4.38222, 220),
('21457', 'Noidan', '31T', 606565, 5244530, 47.3456, 4.41083, 381),
('21458', 'Noiron-sous-Gevrey', '31T', 657472, 5228869, 47.1944, 5.07889, 210),
('21459', 'Noiron-sur-Bèze', '31T', 673250, 5256498, 47.4389, 5.29777, 213),
('21460', 'Noiron-sur-Seine', '31T', 610987, 5311627, 47.9483, 4.48638, 200),
('21461', 'Nolay', '31T', 624436, 5200968, 46.9506, 4.63527, 330),
('21462', 'Norges-la-Ville', '31T', 656673, 5252541, 47.4075, 5.07667, 270),
('21463', 'Normier', '31T', 608369, 5246880, 47.3664, 4.43528, 350),
('21464', 'Nuits-Saint-Georges', '31T', 647952, 5222260, 47.1372, 4.95111, 244),
('21465', 'Obtrée', '31T', 616293, 5308828, 47.9222, 4.55666, 205),
('21466', 'Oigny', '31T', 628550, 5269925, 47.57, 4.70916, 430),
('21467', 'Oisilly', '31T', 678191, 5254637, 47.4208, 5.3625, 210),
('21468', 'Orain', '31T', 682481, 5275719, 47.6092, 5.42806, 260),
('21469', 'Orgeux', '31T', 662678, 5247730, 47.3628, 5.15445, 226),
('21470', 'Origny', '31T', 622808, 5284502, 47.7022, 4.63694, 350),
('21471', 'Orret', '31T', 627269, 5273078, 47.5986, 4.69305, 410),
('21472', 'Orville', '31T', 666465, 5270265, 47.5644, 5.21305, 290),
('21473', 'Ouges', '31T', 657041, 5236363, 47.2619, 5.07584, 220),
('21474', 'Pagny-la-Ville', '31T', 665076, 5214372, 47.0622, 5.17388, 180),
('21475', 'Pagny-le-Château', '31T', 666913, 5212878, 47.0483, 5.1975, 180),
('21476', 'Painblanc', '31T', 623371, 5222716, 47.1464, 4.62722, 420),
('21477', 'Panges', '31T', 635773, 5247758, 47.3692, 4.79833, 570),
('21478', 'Pasques', '31T', 640645, 5247594, 47.3667, 4.86278, 520),
('21479', 'Pellerey', '31T', 634018, 5263006, 47.5067, 4.77972, 390),
('21480', 'Pernand-Vergelesses', '31T', 640728, 5215845, 47.0811, 4.85389, 300),
('21481', 'Perrigny-lès-Dijon', '31T', 651756, 5236627, 47.2656, 5.00611, 253),
('21482', 'Perrigny-sur-l''Ognon', '31T', 685090, 5242646, 47.3111, 5.44889, 188),
('21483', 'Pichanges', '31T', 661867, 5258860, 47.4631, 5.14778, 290),
('21484', 'Planay', '31T', 603261, 5288816, 47.7444, 4.3775, 289),
('21485', 'Plombières-lès-Dijon', '31T', 648873, 5245048, 47.3419, 4.97084, 270),
('21486', 'Pluvault', '31T', 670589, 5231117, 47.2114, 5.25278, 194),
('21487', 'Pluvet', '31T', 671593, 5230590, 47.2064, 5.26583, 192),
('21488', 'Poinçon-lès-Larrey', '31T', 608780, 5304358, 47.8833, 4.455, 240),
('21489', 'Poiseul-la-Grange', '31T', 635618, 5270733, 47.5758, 4.80334, 408),
('21490', 'Poiseul-la-Ville-et-Laperrière', '31T', 625579, 5269088, 47.5631, 4.66944, 440),
('21491', 'Poiseul-lès-Saulx', '31T', 649681, 5270892, 47.5742, 4.99028, 427),
('21492', 'Pommard', '31T', 636416, 5207900, 47.0106, 4.79472, 250),
('21493', 'Poncey-lès-Athée', '31T', 680876, 5234791, 47.2417, 5.39, 190),
('21494', 'Poncey-sur-l''Ignon', '31T', 632481, 5261581, 47.4942, 4.75889, 400),
('21495', 'Pont', '31T', 675625, 5227403, 47.1767, 5.31778, 190),
('21496', 'Pontailler-sur-Saône', '31T', 682424, 5241883, 47.305, 5.41333, 200),
('21497', 'Pont-et-Massène', '31T', 602359, 5258259, 47.4697, 4.35834, 276),
('21498', 'Posanges', '31T', 615048, 5252905, 47.4194, 4.52527, 310),
('21499', 'Pothières', '31T', 613512, 5308804, 47.9225, 4.51944, 200),
('21500', 'Pouillenay', '31T', 610546, 5262670, 47.5081, 4.46805, 250),
('21501', 'Pouilly-en-Auxois', '31T', 617659, 5235509, 47.2625, 4.55527, 400),
('21502', 'Pouilly-sur-Saône', '31T', 661268, 5209232, 47.0169, 5.12194, 180),
('21503', 'Pouilly-sur-Vingeanne', '31T', 682842, 5268191, 47.5414, 5.42972, 235),
('21504', 'Prâlon', '31T', 634182, 5241143, 47.31, 4.77528, 310),
('21505', 'Précy-sous-Thil', '31T', 599105, 5248847, 47.3856, 4.31306, 335),
('21506', 'Premeaux-Prissey', '31T', 646738, 5219358, 47.1114, 4.93416, 230),
('21507', 'Premières', '31T', 672976, 5233689, 47.2339, 5.28527, 195),
('21508', 'Prenois', '31T', 643135, 5248735, 47.3764, 4.89611, 490),
('21510', 'Prusly-sur-Ource', '31T', 624406, 5303253, 47.8706, 4.66361, 240),
('21511', 'Puits', '31T', 609611, 5287882, 47.735, 4.46195, 300),
('21512', 'Puligny-Montrachet', '31T', 633395, 5200389, 46.9436, 4.75278, 230),
('21513', 'Quemigny-Poisot', '31T', 641137, 5232286, 47.2289, 4.86444, 397),
('21514', 'Quemigny-sur-Seine', '31T', 625133, 5280135, 47.6625, 4.66667, 300),
('21515', 'Quetigny', '31T', 659844, 5242339, 47.315, 5.115, 220),
('21516', 'Quincerot', '31T', 595319, 5273950, 47.6119, 4.26834, 250),
('21517', 'Quincey', '31T', 649604, 5219429, 47.1114, 4.97194, 220),
('21518', 'Quincy-le-Vicomte', '31T', 594448, 5273535, 47.6083, 4.25666, 220),
('21519', 'Recey-sur-Ource', '31T', 639538, 5293714, 47.7817, 4.86278, 300),
('21520', 'Remilly-en-Montagne', '31T', 631117, 5239190, 47.2931, 4.73417, 400),
('21521', 'Remilly-sur-Tille', '31T', 666976, 5242722, 47.3167, 5.20944, 214),
('21522', 'Renève', '31T', 681598, 5252981, 47.405, 5.40695, 200),
('21523', 'Reulle-Vergy', '31T', 643459, 5227617, 47.1864, 4.8936, 420),
('21524', 'Riel-les-Eaux', '31T', 625005, 5314910, 47.9753, 4.675, 220),
('21525', 'La Roche-en-Brenil', '31T', 588994, 5247635, 47.3761, 4.17888, 430),
('21526', 'Rochefort-sur-Brévon', '31T', 627667, 5289209, 47.7436, 4.70306, 396),
('21527', 'La Rochepot', '31T', 627721, 5201655, 46.9561, 4.67862, 450),
('21528', 'La Roche-Vanneau', '31T', 615076, 5258989, 47.4742, 4.52723, 340),
('21529', 'Roilly', '31T', 601051, 5252709, 47.42, 4.33972, 350),
('21530', 'Rougemont', '31T', 593590, 5280190, 47.6683, 4.24667, 240),
('21531', 'Rouvray', '31T', 583173, 5252892, 47.4242, 4.10278, 400),
('21532', 'Rouvres-en-Plaine', '31T', 662203, 5233692, 47.2367, 5.14305, 206),
('21533', 'Rouvres-sous-Meilly', '31T', 619288, 5229797, 47.2108, 4.57527, 420),
('21534', 'Ruffey-lès-Beaune', '31T', 645555, 5209105, 47.0194, 4.91527, 195),
('21535', 'Ruffey-lès-Echirey', '31T', 657105, 5248135, 47.3678, 5.08083, 240),
('21536', 'Sacquenay', '31T', 674273, 5273490, 47.5914, 5.31805, 290),
('21537', 'Saffres', '31T', 619060, 5247333, 47.3686, 4.57695, 380),
('21538', 'Saint-Andeux', '31T', 582875, 5250263, 47.4006, 4.09833, 390),
('21539', 'Saint-Anthot', '31T', 624260, 5241511, 47.3153, 4.64416, 520),
('21540', 'Saint-Apollinaire', '31T', 657394, 5244374, 47.3339, 5.08333, 250),
('21541', 'Saint-Aubin', '31T', 630044, 5200809, 46.9481, 4.70889, 300),
('21542', 'Saint-Bernard', '31T', 652841, 5224732, 47.1583, 5.01638, 220),
('21543', 'Saint-Broing-les-Moines', '31T', 638257, 5284571, 47.6997, 4.84278, 390),
('21544', 'Sainte-Colombe', '31T', 609877, 5253701, 47.4275, 4.45694, 420),
('21545', 'Sainte-Colombe-sur-Seine', '31T', 615055, 5303275, 47.8725, 4.53862, 212),
('21546', 'Saint-Didier', '31T', 589280, 5242606, 47.3308, 4.18166, 490),
('21547', 'Saint-Euphrône', '31T', 604038, 5259215, 47.4781, 4.38084, 289),
('21548', 'Saint-Germain-de-Modéon', '31T', 585528, 5248016, 47.38, 4.13305, 410),
('21549', 'Saint-Germain-le-Rocheux', '31T', 625043, 5290109, 47.7522, 4.66833, 375),
('21550', 'Saint-Germain-lès-Senailly', '31T', 595719, 5272443, 47.5983, 4.27333, 275),
('21551', 'Saint-Germain-Source-Seine', '31T', 627874, 5261664, 47.4958, 4.69778, 485),
('21552', 'Saint-Hélier', '31T', 626969, 5249321, 47.385, 4.68222, 400),
('21554', 'Saint-Jean-de-Losne', '31T', 672030, 5219172, 47.1036, 5.26722, 180),
('21555', 'Saint-Julien', '31T', 661656, 5252058, 47.4019, 5.1425, 235),
('21556', 'Saint-Léger-Triey', '31T', 678841, 5242916, 47.3153, 5.36639, 200),
('21557', 'Saint-Marc-sur-Seine', '31T', 620225, 5284386, 47.7017, 4.60249, 280),
('21558', 'Sainte-Marie-la-Blanche', '31T', 643753, 5204150, 46.9753, 4.89, 200),
('21559', 'Sainte-Marie-sur-Ouche', '31T', 635876, 5238741, 47.2881, 4.79694, 290),
('21560', 'Saint-Martin-de-la-Mer', '31T', 593434, 5232204, 47.2367, 4.23445, 540),
('21561', 'Saint-Martin-du-Mont', '31T', 634709, 5254806, 47.4328, 4.78639, 530),
('21562', 'Saint-Maurice-sur-Vingeanne', '31T', 681120, 5272432, 47.58, 5.40861, 240),
('21563', 'Saint-Mesmin', '31T', 624911, 5244490, 47.3419, 4.65361, 470),
('21564', 'Saint-Nicolas-lès-Cîteaux', '31T', 655872, 5220054, 47.1156, 5.05472, 210),
('21565', 'Saint-Philibert', '31T', 652348, 5229970, 47.2056, 5.01166, 225),
('21566', 'Saint-Pierre-en-Vaux', '31T', 615940, 5212685, 47.0575, 4.52666, 350),
('21567', 'Saint-Prix-lès-Arnay', '31T', 613477, 5218998, 47.1147, 4.49583, 400),
('21568', 'Saint-Rémy', '31T', 597383, 5276640, 47.6358, 4.29639, 230),
('21569', 'Saint-Romain', '31T', 629907, 5206118, 46.9958, 4.70861, 360),
('21570', 'Sainte-Sabine', '31T', 622951, 5227710, 47.1914, 4.62305, 360),
('21571', 'Saint-Sauveur', '31T', 682258, 5247934, 47.3594, 5.41362, 199),
('21572', 'Saint-Seine-en-Bâche', '31T', 679704, 5221408, 47.1217, 5.36916, 197),
('21573', 'Saint-Seine-l''Abbaye', '31T', 634711, 5255640, 47.4403, 4.78667, 450),
('21574', 'Saint-Seine-sur-Vingeanne', '31T', 682718, 5265468, 47.5169, 5.42695, 240),
('21575', 'Saint-Symphorien-sur-Saône', '31T', 674925, 5219010, 47.1014, 5.30528, 188),
('21576', 'Saint-Thibault', '31T', 611162, 5247858, 47.3747, 4.47251, 356),
('21577', 'Saint-Usage', '31T', 671589, 5219839, 47.1097, 5.26167, 185),
('21578', 'Saint-Victor-sur-Ouche', '31T', 632254, 5232513, 47.2328, 4.74722, 320),
('21579', 'Salives', '31T', 644112, 5275478, 47.6167, 4.91778, 400),
('21580', 'Salmaise', '31T', 625433, 5257380, 47.4578, 4.66417, 402),
('21581', 'Samerey', '31T', 679197, 5217963, 47.0908, 5.36111, 195),
('21582', 'Santenay', '31T', 629519, 5196721, 46.9114, 4.70083, 230),
('21583', 'Santosse', '31T', 623993, 5207042, 47.0053, 4.63111, 450),
('21584', 'Saulieu', '31T', 593122, 5237293, 47.2825, 4.23139, 540),
('21585', 'Saulon-la-Chapelle', '31T', 658144, 5231296, 47.2161, 5.08861, 208),
('21586', 'Saulon-la-Rue', '31T', 656193, 5231831, 47.2214, 5.06305, 225),
('21587', 'Saulx-le-Duc', '31T', 651991, 5267244, 47.5408, 5.01972, 420),
('21588', 'Saussey', '31T', 622008, 5214196, 47.07, 4.60694, 430),
('21589', 'Saussy', '31T', 647953, 5259048, 47.4681, 4.96334, 550),
('21590', 'Savigny-lès-Beaune', '31T', 638120, 5213684, 47.0622, 4.81889, 268),
('21591', 'Savigny-le-Sec', '31T', 654866, 5255026, 47.4303, 5.05361, 309),
('21592', 'Savigny-sous-Mâlain', '31T', 632909, 5243584, 47.3322, 4.75917, 440),
('21593', 'Savilly', '31T', 597126, 5219943, 47.1258, 4.28056, 527),
('21594', 'Savoisy', '31T', 606078, 5287384, 47.7311, 4.41472, 315),
('21595', 'Savolles', '31T', 671840, 5249536, 47.3767, 5.27639, 241),
('21596', 'Savouges', '31T', 656219, 5227662, 47.1839, 5.06194, 226),
('21597', 'Segrois', '31T', 643424, 5224743, 47.1606, 4.89222, 330),
('21598', 'Seigny', '31T', 607924, 5269816, 47.5728, 4.435, 270),
('21599', 'Selongey', '31T', 664258, 5272890, 47.5886, 5.18472, 300),
('21600', 'Semarey', '31T', 623553, 5236185, 47.2675, 4.63334, 410),
('21601', 'Semezanges', '31T', 640773, 5230795, 47.2156, 4.85917, 438),
('21602', 'Semond', '31T', 619292, 5286189, 47.7181, 4.59056, 370),
('21603', 'Semur-en-Auxois', '31T', 600284, 5260817, 47.4931, 4.33139, 280),
('21604', 'Senailly', '31T', 595222, 5270922, 47.5847, 4.26639, 220),
('21605', 'Sennecey-lès-Dijon', '31T', 658904, 5239780, 47.2922, 5.10166, 225),
('21606', 'Ladoix-Serrigny', '31T', 643385, 5214148, 47.0653, 4.88834, 215),
('21607', 'Seurre', '31T', 663191, 5206906, 46.9956, 5.14638, 180),
('21608', 'Sincey-lès-Rouvray', '31T', 585404, 5253634, 47.4306, 4.13249, 366),
('21609', 'Soirans', '31T', 673313, 5230826, 47.2081, 5.28861, 192),
('21610', 'Soissons-sur-Nacey', '31T', 685735, 5236857, 47.2589, 5.455, 195),
('21611', 'Sombernon', '31T', 628977, 5240964, 47.3094, 4.70639, 556),
('21612', 'Souhey', '31T', 606829, 5260006, 47.4847, 4.41806, 331),
('21613', 'Soussey-sur-Brionne', '31T', 615778, 5242451, 47.3253, 4.53222, 390),
('21614', 'Spoy', '31T', 665057, 5257157, 47.4469, 5.18944, 250),
('21615', 'Sussey', '31T', 603300, 5230824, 47.2228, 4.36444, 440),
('21616', 'Tailly', '31T', 637983, 5203211, 46.9681, 4.81389, 206),
('21617', 'Talant', '31T', 651366, 5244432, 47.3358, 5.00361, 360),
('21618', 'Talmay', '31T', 684199, 5247623, 47.3561, 5.43917, 200),
('21619', 'Tanay', '31T', 671829, 5253490, 47.4122, 5.27777, 240),
('21620', 'Tarsul', '31T', 649261, 5266062, 47.5308, 4.98306, 310),
('21621', 'Tart-l''Abbaye', '31T', 669789, 5228190, 47.1853, 5.24112, 199),
('21622', 'Tart-le-Bas', '31T', 668268, 5230556, 47.2069, 5.22194, 194),
('21623', 'Tart-le-Haut', '31T', 667076, 5230275, 47.2047, 5.20611, 231),
('21624', 'Tellecey', '31T', 672503, 5240534, 47.2956, 5.28167, 215),
('21625', 'Ternant', '31T', 640538, 5229152, 47.2008, 4.85555, 430),
('21626', 'Terrefondrée', '31T', 639775, 5288191, 47.7319, 4.86417, 350),
('21627', 'Thenissey', '31T', 622285, 5261699, 47.4972, 4.62361, 310),
('21628', 'Thoires', '31T', 625123, 5310465, 47.9353, 4.67528, 220),
('21629', 'Thoisy-la-Berchère', '31T', 602004, 5235186, 47.2622, 4.34833, 389),
('21630', 'Thoisy-le-Désert', '31T', 615277, 5233701, 47.2467, 4.52333, 390),
('21631', 'Thomirey', '31T', 620780, 5215437, 47.0814, 4.59111, 415),
('21632', 'Thorey-en-Plaine', '31T', 661573, 5231358, 47.2158, 5.13389, 204),
('21633', 'Thorey-sous-Charny', '31T', 609358, 5242204, 47.3242, 4.44723, 380),
('21634', 'Thorey-sur-Ouche', '31T', 628784, 5222801, 47.1461, 4.69861, 350),
('21635', 'Thoste', '31T', 592474, 5254389, 47.4364, 4.22638, 350),
('21636', 'Thury', '31T', 615992, 5210030, 47.0336, 4.52667, 380),
('21637', 'Tichey', '31T', 673653, 5209118, 47.0128, 5.28473, 185),
('21638', 'Til-Châtel', '31T', 663830, 5265062, 47.5183, 5.17611, 280),
('21639', 'Tillenay', '31T', 678050, 5228032, 47.1817, 5.35, 190),
('21640', 'Torcy-et-Pouligny', '31T', 592018, 5260774, 47.4939, 4.22167, 305),
('21641', 'Touillon', '31T', 607219, 5278604, 47.6519, 4.42777, 320),
('21642', 'Toutry', '31T', 584514, 5261587, 47.5022, 4.12222, 230),
('21643', 'Tréclun', '31T', 673495, 5228916, 47.1908, 5.29027, 190),
('21644', 'Trochères', '31T', 674143, 5246174, 47.3458, 5.30555, 195),
('21645', 'Trouhans', '31T', 672347, 5224248, 47.1492, 5.27334, 185),
('21646', 'Trouhaut', '31T', 632614, 5250125, 47.3911, 4.75722, 460),
('21647', 'Trugny', '31T', 663109, 5205266, 46.9808, 5.14472, 180),
('21648', 'Turcey', '31T', 629497, 5251693, 47.4058, 4.7164, 370),
('21649', 'Uncey-le-Franc', '31T', 618779, 5244610, 47.3442, 4.5725, 360),
('21650', 'Urcy', '31T', 640023, 5235812, 47.2608, 4.85084, 450),
('21651', 'Val-Suzon', '31T', 643495, 5252914, 47.4139, 4.90223, 360),
('21652', 'Vandenesse-en-Auxois', '31T', 622259, 5230661, 47.2181, 4.61473, 361),
('21653', 'Vannaire', '31T', 617162, 5307981, 47.9144, 4.56806, 220),
('21655', 'Vanvey', '31T', 627800, 5299219, 47.8336, 4.70778, 250),
('21656', 'Varanges', '31T', 666154, 5233122, 47.2306, 5.195, 199),
('21657', 'Varois-et-Chaignot', '31T', 660621, 5246191, 47.3494, 5.12667, 230),
('21658', 'Vauchignon', '31T', 625097, 5203730, 46.9753, 4.64472, 389),
('21659', 'Vaux-Saules', '31T', 636088, 5258606, 47.4667, 4.80584, 460),
('21660', 'Veilly', '31T', 621373, 5220483, 47.1267, 4.60028, 395),
('21661', 'Velars-sur-Ouche', '31T', 643770, 5242512, 47.3203, 4.9025, 290),
('21662', 'Velogny', '31T', 610264, 5250991, 47.4031, 4.46139, 400),
('21663', 'Venarey-les-Laumes', '31T', 609699, 5266575, 47.5433, 4.45778, 240),
('21664', 'Verdonnet', '31T', 599944, 5287924, 47.7369, 4.33306, 290),
('21665', 'Vernois-lès-Vesvres', '31T', 661082, 5278919, 47.6436, 5.14472, 330),
('21666', 'Vernot', '31T', 648679, 5261785, 47.4925, 4.97389, 340),
('21667', 'Véronnes', '31T', 667893, 5267155, 47.5361, 5.23084, 270),
('21669', 'Verrey-sous-Drée', '31T', 627413, 5247200, 47.3658, 4.6875, 450),
('21670', 'Verrey-sous-Salmaise', '31T', 625586, 5255128, 47.4375, 4.66556, 340),
('21671', 'Vertault', '31T', 600866, 5307858, 47.9161, 4.35, 210),
('21672', 'Vesvres', '31T', 615463, 5248868, 47.3831, 4.52972, 380),
('21673', 'Veuvey-sur-Ouche', '31T', 629783, 5227208, 47.1856, 4.71306, 330),
('21674', 'Veuxhaulles-sur-Aube', '31T', 634472, 5311849, 47.9458, 4.80083, 240),
('21675', 'Vianges', '31T', 600643, 5223769, 47.1597, 4.32778, 430),
('21676', 'Vic-de-Chassenay', '31T', 595297, 5258634, 47.4742, 4.26473, 330),
('21677', 'Vic-des-Prés', '31T', 624607, 5218048, 47.1042, 4.64222, 370),
('21678', 'Vic-sous-Thil', '31T', 598839, 5247175, 47.3706, 4.30916, 330),
('21679', 'Vieilmoulin', '31T', 626787, 5241226, 47.3122, 4.67751, 483),
('21680', 'Vielverge', '31T', 685475, 5237776, 47.2672, 5.45195, 190),
('21681', 'Vieux-Château', '31T', 585382, 5258018, 47.47, 4.13305, 280),
('21682', 'Viévigne', '31T', 668189, 5256103, 47.4367, 5.23055, 270),
('21683', 'Viévy', '31T', 610246, 5212484, 47.0567, 4.45166, 380),
('21684', 'Vignoles', '31T', 643541, 5210292, 47.0306, 4.88916, 205),
('21685', 'Villaines-en-Duesmois', '31T', 614560, 5281986, 47.6811, 4.52638, 344),
('21686', 'Villaines-les-Prévôtes', '31T', 598243, 5267699, 47.5553, 4.30584, 250),
('21687', 'Villargoix', '31T', 598000, 5238330, 47.2911, 4.29611, 380),
('21688', 'Villars-Fontaine', '31T', 643431, 5223570, 47.15, 4.89194, 318),
('21689', 'Villars-et-Villenotte', '31T', 603742, 5262885, 47.5111, 4.37777, 340),
('21690', 'Villeberny', '31T', 620539, 5254992, 47.4372, 4.59861, 341),
('21691', 'Villebichot', '31T', 654832, 5222714, 47.1397, 5.04194, 210),
('21692', 'Villecomte', '31T', 653270, 5263942, 47.5108, 5.03555, 300),
('21693', 'Villedieu', '31T', 601861, 5307968, 47.9169, 4.36334, 205),
('21694', 'Villeferry', '31T', 614154, 5256871, 47.4553, 4.51445, 350),
('21695', 'La Villeneuve-les-Convers', '31T', 618495, 5270021, 47.5728, 4.57555, 390),
('21696', 'Villeneuve-sous-Charigny', '31T', 605205, 5254820, 47.4383, 4.39527, 330),
('21698', 'Villers-la-Faye', '31T', 642579, 5218700, 47.1064, 4.87917, 360),
('21699', 'Villers-les-Pots', '31T', 678329, 5231346, 47.2114, 5.355, 200),
('21700', 'Villers-Patras', '31T', 615174, 5309763, 47.9308, 4.54194, 204),
('21701', 'Villers-Rotin', '31T', 682426, 5225477, 47.1575, 5.40667, 196),
('21702', 'Villey-sur-Tille', '31T', 659113, 5269967, 47.5636, 5.11528, 290),
('21703', 'Villiers-en-Morvan', '31T', 595257, 5222136, 47.1458, 4.25639, 450),
('21704', 'Villiers-le-Duc', '31T', 627789, 5297829, 47.8211, 4.70722, 260),
('21705', 'Villotte-Saint-Seine', '31T', 628688, 5254145, 47.4281, 4.70639, 400),
('21706', 'Villotte-sur-Ource', '31T', 625606, 5302568, 47.8642, 4.67945, 247),
('21707', 'Villy-en-Auxois', '31T', 623362, 5253290, 47.4214, 4.63556, 346);
INSERT INTO `ods_communes` (`oc_code_insee`, `oc_nom`, `oc_secteur`, `oc_x_utm`, `oc_y_utm`, `oc_latitude`, `oc_longitude`, `oc_altitude`) VALUES
('21708', 'Villy-le-Moutier', '31T', 651373, 5211258, 47.0375, 4.9925, 190),
('21709', 'Viserny', '31T', 596394, 5268286, 47.5608, 4.28139, 240),
('21710', 'Vitteaux', '31T', 616312, 5250490, 47.3975, 4.54139, 323),
('21711', 'Vix', '31T', 615203, 5307293, 47.9086, 4.54167, 205),
('21712', 'Volnay', '31T', 635402, 5206981, 47.0025, 4.78111, 290),
('21713', 'Vonges', '31T', 681720, 5240873, 47.2961, 5.40362, 190),
('21714', 'Vosne-Romanée', '31T', 648099, 5224827, 47.1603, 4.95389, 250),
('21715', 'Voudenay', '31T', 605095, 5216188, 47.0908, 4.38472, 320),
('21716', 'Vougeot', '31T', 648784, 5226883, 47.1786, 4.96361, 250),
('21717', 'Voulaines-les-Templiers', '31T', 633028, 5297947, 47.8211, 4.77722, 280),
('22001', 'Allineuc', '30T', 509453, 5350980, 48.3119, -2.87251, 180),
('22002', 'Andel', '30T', 532099, 5371010, 48.4914, -2.56555, 80),
('22003', 'Aucaleuc', '30T', 564550, 5367334, 48.4558, -2.12694, 100),
('22004', 'Bégard', '30T', 477875, 5386370, 48.63, -3.30027, 120),
('22005', 'Belle-Isle-en-Terre', '30T', 470867, 5376860, 48.5442, -3.39472, 101),
('22006', 'Berhet', '30T', 477699, 5393719, 48.6961, -3.30306, 80),
('22007', 'Binic', '30T', 513045, 5383315, 48.6028, -2.82305, 20),
('22008', 'Bobital', '30T', 566454, 5362601, 48.4131, -2.10195, 90),
('22009', 'Le Bodéo', '30T', 504777, 5352148, 48.3225, -2.93556, 193),
('22011', 'Boqueho', '30T', 503017, 5369931, 48.4825, -2.95917, 170),
('22012', 'La Bouillie', '30T', 541800, 5380275, 48.5742, -2.43333, 100),
('22013', 'Bourbriac', '30T', 486183, 5369175, 48.4756, -3.18695, 200),
('22014', 'Bourseul', '30T', 555048, 5370785, 48.4878, -2.25499, 60),
('22015', 'Bréhand', '30T', 531620, 5361157, 48.4028, -2.57278, 82),
('22016', 'Île-de-Bréhat', '30T', 500000, 5410133, 48.8442, -3, 25),
('22018', 'Brélidy', '30T', 483964, 5389961, 48.6625, -3.21778, 70),
('22019', 'Bringolo', '30T', 499959, 5380089, 48.5739, -3.00056, 120),
('22020', 'Broons', '30T', 554799, 5351823, 48.3172, -2.26084, 90),
('22021', 'Brusvily', '30T', 564796, 5360204, 48.3917, -2.12472, 115),
('22023', 'Bulat-Pestivien', '30T', 475486, 5364148, 48.43, -3.33139, 260),
('22024', 'Calanhel', '30T', 464353, 5364855, 48.4358, -3.48194, 250),
('22025', 'Callac', '30T', 468588, 5361527, 48.4061, -3.42444, 160),
('22026', 'Calorguen', '30T', 571948, 5362236, 48.4092, -2.02777, 50),
('22027', 'Le Cambout', '30T', 529286, 5323044, 48.06, -2.60695, 110),
('22028', 'Camlez', '30T', 477837, 5402673, 48.7767, -3.30166, 70),
('22029', 'Canihuel', '30T', 492178, 5354127, 48.3403, -3.10555, 200),
('22030', 'Caouënnec-Lanvézéac', '30T', 472409, 5394546, 48.7033, -3.375, 90),
('22031', 'Carnoët', '30T', 461487, 5357278, 48.3675, -3.52, 200),
('22032', 'Caulnes', '30T', 562825, 5348726, 48.2886, -2.15305, 75),
('22033', 'Caurel', '30T', 497441, 5340321, 48.2161, -3.03445, 187),
('22034', 'Cavan', '30T', 474580, 5390984, 48.6714, -3.34528, 96),
('22035', 'Les Champs-Géraux', '30T', 576316, 5363065, 48.4161, -1.96861, 38),
('22036', 'La Chapelle-Blanche', '30T', 563676, 5346327, 48.2669, -2.14194, 70),
('22037', 'La Chapelle-Neuve', '30T', 469033, 5367792, 48.4625, -3.41889, 250),
('22038', 'Châtelaudren', '30T', 502358, 5376569, 48.5422, -2.96805, 100),
('22039', 'La Chèze', '30T', 525629, 5330992, 48.1317, -2.65555, 70),
('22040', 'Coadout', '30T', 486072, 5373900, 48.5181, -3.18861, 150),
('22041', 'Coatascorn', '30T', 481657, 5391296, 48.6744, -3.24916, 73),
('22042', 'Coatréven', '30T', 474873, 5401698, 48.7678, -3.34195, 100),
('22043', 'Coëtlogon', '30T', 534075, 5332240, 48.1425, -2.54194, 160),
('22044', 'Coëtmieux', '30T', 529574, 5370996, 48.4914, -2.59973, 60),
('22045', 'Cohiniac', '30T', 503861, 5367647, 48.4619, -2.94777, 160),
('22046', 'Collinée', '30T', 535782, 5350004, 48.3022, -2.51749, 230),
('22047', 'Corlay', '30T', 495675, 5351530, 48.3169, -3.05834, 180),
('22048', 'Corseul', '30T', 561562, 5370142, 48.4814, -2.16694, 80),
('22049', 'Créhen', '30T', 558182, 5377363, 48.5467, -2.21167, 40),
('22050', 'Dinan', '30T', 570449, 5367003, 48.4522, -2.04722, 69),
('22051', 'Dolo', '30T', 549729, 5359342, 48.3853, -2.32833, 61),
('22052', 'Duault', '30T', 467696, 5356591, 48.3617, -3.43611, 165),
('22053', 'Éréac', '30T', 548539, 5346980, 48.2742, -2.34583, 140),
('22054', 'Erquy', '30T', 539768, 5386498, 48.6303, -2.46028, 11),
('22055', 'Étables-sur-Mer', '30T', 512261, 5386092, 48.6278, -2.8336, 70),
('22056', 'Évran', '30T', 575564, 5359287, 48.3822, -1.97945, 20),
('22057', 'Le Faouët', '30T', 494664, 5392350, 48.6842, -3.0725, 70),
('22058', 'La Ferrière', '30T', 529466, 5332245, 48.1428, -2.6039, 160),
('22060', 'Gausson', '30T', 518417, 5349613, 48.2994, -2.75167, 200),
('22061', 'Glomel', '30T', 470414, 5341076, 48.2222, -3.39833, 230),
('22062', 'Gomené', '30T', 538246, 5335756, 48.1739, -2.48556, 200),
('22063', 'Gommenec''h', '30T', 496460, 5387593, 48.6414, -3.04805, 80),
('22064', 'Gouarec', '30T', 486756, 5341664, 48.2281, -3.17833, 131),
('22065', 'Goudelin', '30T', 498669, 5383485, 48.6044, -3.01805, 90),
('22066', 'Le Gouray', '30T', 538049, 5352922, 48.3283, -2.48666, 140),
('22067', 'Grâces', '30T', 486328, 5378191, 48.5567, -3.18528, 130),
('22068', 'Grâce-Uzel', '30T', 514911, 5343181, 48.2417, -2.79917, 190),
('22069', 'Guenroc', '30T', 568617, 5352035, 48.3178, -2.07444, 99),
('22070', 'Guingamp', '30T', 489117, 5378679, 48.5611, -3.1475, 100),
('22071', 'Guitté', '30T', 567182, 5349702, 48.2969, -2.09417, 80),
('22072', 'Gurunhuel', '30T', 477948, 5373679, 48.5158, -3.29861, 290),
('22073', 'La Harmoye', '30T', 502964, 5353690, 48.3364, -2.96001, 191),
('22074', 'Le Haut-Corlay', '30T', 495799, 5352271, 48.3236, -3.05667, 200),
('22075', 'Hémonstoir', '30T', 512766, 5334129, 48.1603, -2.82833, 110),
('22076', 'Hénanbihen', '30T', 546238, 5378796, 48.5606, -2.37333, 67),
('22077', 'Hénansal', '30T', 541909, 5376601, 48.5411, -2.43222, 90),
('22078', 'Hengoat', '30T', 485541, 5398850, 48.7425, -3.19667, 50),
('22079', 'Hénon', '30T', 523549, 5359111, 48.3847, -2.68194, 145),
('22080', 'L''Hermitage-Lorge', '30T', 513423, 5353119, 48.3311, -2.81889, 235),
('22081', 'Hillion', '30T', 524576, 5373473, 48.5139, -2.66722, 30),
('22082', 'Le Hinglé', '30T', 568228, 5360368, 48.3928, -2.07834, 70),
('22083', 'Illifaut', '30T', 548640, 5332623, 48.145, -2.34611, 116),
('22084', 'Jugon-les-Lacs', '30T', 550240, 5361971, 48.4089, -2.32112, 60),
('22085', 'Kerbors', '30T', 486422, 5408358, 48.8281, -3.185, 40),
('22086', 'Kerfot', '30T', 498039, 5398245, 48.7372, -3.02667, 80),
('22087', 'Kergrist-Moëlou', '30T', 476479, 5350805, 48.31, -3.31722, 260),
('22088', 'Kerien', '30T', 484371, 5359670, 48.39, -3.21111, 261),
('22090', 'Kermaria-Sulard', '30T', 472772, 5402047, 48.7708, -3.37056, 90),
('22091', 'Kermoroc''h', '30T', 484893, 5385636, 48.6236, -3.205, 110),
('22092', 'Kerpert', '30T', 490250, 5357959, 48.3747, -3.13166, 260),
('22093', 'Lamballe', '30T', 535892, 5368346, 48.4672, -2.51444, 55),
('22094', 'Lancieux', '30T', 562696, 5384390, 48.6094, -2.14945, 21),
('22095', 'Landebaëron', '30T', 484569, 5386996, 48.6358, -3.20945, 80),
('22096', 'Landébia', '30T', 549069, 5373787, 48.5153, -2.33555, 60),
('22097', 'La Landec', '30T', 560899, 5364947, 48.4347, -2.17667, 100),
('22098', 'Landéhen', '30T', 534151, 5364136, 48.4294, -2.53834, 90),
('22099', 'Lanfains', '30T', 506380, 5355576, 48.3533, -2.91388, 287),
('22100', 'Langast', '30T', 525019, 5347446, 48.2797, -2.66278, 160),
('22101', 'Langoat', '30T', 479439, 5399795, 48.7508, -3.27972, 30),
('22102', 'Langourla', '30T', 543396, 5348359, 48.2869, -2.415, 180),
('22103', 'Langrolay-sur-Rance', '30T', 573545, 5378500, 48.5553, -2.00333, 50),
('22104', 'Languédias', '30T', 558466, 5359795, 48.3886, -2.21027, 95),
('22105', 'Languenan', '30T', 564603, 5373511, 48.5114, -2.12527, 101),
('22106', 'Langueux', '30T', 521158, 5371359, 48.495, -2.71361, 100),
('22107', 'Laniscat', '30T', 490946, 5343230, 48.2422, -3.12195, 200),
('22108', 'Lanleff', '30T', 496688, 5393367, 48.6933, -3.04501, 45),
('22109', 'Lanloup', '30T', 502513, 5395404, 48.7117, -2.96584, 60),
('22110', 'Lanmérin', '30T', 474267, 5398613, 48.74, -3.35, 40),
('22111', 'Lanmodez', '30T', 492295, 5409675, 48.84, -3.10501, 50),
('22112', 'Lannebert', '30T', 499366, 5389444, 48.6581, -3.00861, 70),
('22113', 'Lannion', '30T', 466421, 5397975, 48.7339, -3.45666, 10),
('22114', 'Lanrelas', '30T', 552705, 5344423, 48.2508, -2.29001, 100),
('22115', 'Lanrivain', '30T', 484275, 5354823, 48.3464, -3.21223, 250),
('22116', 'Lanrodec', '30T', 497764, 5373852, 48.5178, -3.03028, 200),
('22117', 'Lantic', '30T', 508764, 5383739, 48.6067, -2.88111, 68),
('22118', 'Lanvallay', '30T', 571963, 5367486, 48.4564, -2.02667, 67),
('22119', 'Lanvellec', '30T', 460346, 5385292, 48.6194, -3.53806, 108),
('22121', 'Lanvollon', '30T', 501126, 5386388, 48.6306, -2.98472, 90),
('22122', 'Laurenan', '30T', 534780, 5338543, 48.1992, -2.53195, 170),
('22123', 'Léhon', '30T', 571079, 5365930, 48.4425, -2.03889, 30),
('22124', 'Lescouët-Gouarec', '30T', 481925, 5334143, 48.1603, -3.24306, 227),
('22126', 'Le Leslay', '30T', 502569, 5364003, 48.4292, -2.96527, 200),
('22127', 'Lézardrieux', '30T', 492185, 5403561, 48.785, -3.10639, 30),
('22128', 'Locarn', '30T', 468781, 5351830, 48.3189, -3.42111, 170),
('22129', 'Loc-Envel', '30T', 469926, 5373592, 48.5147, -3.40723, 140),
('22131', 'Loguivy-Plougras', '30T', 463941, 5374276, 48.5206, -3.48833, 160),
('22132', 'Lohuec', '30T', 461475, 5367591, 48.4603, -3.52111, 240),
('22133', 'Loscouët-sur-Meu', '30T', 556560, 5336309, 48.1775, -2.23916, 100),
('22134', 'Louannec', '30T', 469745, 5404564, 48.7933, -3.41194, 60),
('22135', 'Louargat', '30T', 474998, 5379156, 48.565, -3.33888, 182),
('22136', 'Loudéac', '30T', 518296, 5336089, 48.1778, -2.75388, 155),
('22137', 'Maël-Carhaix', '30T', 468636, 5347910, 48.2836, -3.42278, 200),
('22138', 'Maël-Pestivien', '30T', 478080, 5360092, 48.3936, -3.29611, 278),
('22139', 'Magoar', '30T', 486059, 5360407, 48.3967, -3.18834, 275),
('22140', 'La Malhoure', '30T', 537483, 5360575, 48.3972, -2.49362, 120),
('22141', 'Mantallot', '30T', 478134, 5395230, 48.7097, -3.29723, 78),
('22143', 'Matignon', '30T', 552432, 5382711, 48.5953, -2.28889, 70),
('22144', 'La Méaugon', '30T', 512066, 5371981, 48.5008, -2.83666, 120),
('22145', 'Mégrit', '30T', 555704, 5358286, 48.3753, -2.24778, 90),
('22146', 'Mellionnec', '30T', 478028, 5335886, 48.1758, -3.29555, 240),
('22147', 'Merdrignac', '30T', 543682, 5337925, 48.1931, -2.41222, 140),
('22148', 'Mérillac', '30T', 545133, 5344976, 48.2564, -2.39194, 145),
('22149', 'Merléac', '30T', 507481, 5347149, 48.2775, -2.89917, 240),
('22150', 'Le Merzer', '30T', 495226, 5380245, 48.5753, -3.06472, 120),
('22151', 'Meslin', '30T', 531964, 5365760, 48.4442, -2.56778, 70),
('22152', 'Minihy-Tréguier', '30T', 483326, 5402469, 48.775, -3.22695, 33),
('22153', 'Moncontour', '30T', 527223, 5356225, 48.3586, -2.6325, 120),
('22154', 'Morieux', '30T', 528982, 5374451, 48.5225, -2.6075, 70),
('22155', 'La Motte', '30T', 520008, 5342424, 48.2347, -2.73056, 220),
('22156', 'Moustéru', '30T', 482338, 5373818, 48.5172, -3.23917, 230),
('22157', 'Le Moustoir', '30T', 462379, 5346002, 48.2661, -3.50695, 130),
('22158', 'Mûr-de-Bretagne', '30T', 501053, 5338746, 48.2019, -2.98583, 150),
('22160', 'Noyal', '30T', 538166, 5366107, 48.4469, -2.48389, 76),
('22161', 'Pabu', '30T', 490045, 5381672, 48.5881, -3.13499, 110),
('22162', 'Paimpol', '30T', 496755, 5402846, 48.7786, -3.04417, 30),
('22163', 'Paule', '30T', 467080, 5342546, 48.2353, -3.44333, 180),
('22164', 'Pédernec', '30T', 480257, 5382748, 48.5975, -3.26777, 130),
('22165', 'Penguily', '30T', 537501, 5357858, 48.3728, -2.49362, 145),
('22166', 'Penvénan', '30T', 478321, 5406531, 48.8114, -3.29528, 70),
('22167', 'Perret', '30T', 488539, 5335793, 48.1753, -3.15417, 230),
('22168', 'Perros-Guirec', '30T', 467085, 5406741, 48.8128, -3.44833, 50),
('22169', 'Peumerit-Quintin', '30T', 479835, 5356350, 48.36, -3.27222, 250),
('22170', 'Plaine-Haute', '30T', 510826, 5365772, 48.445, -2.85361, 190),
('22171', 'Plaintel', '30T', 513609, 5361548, 48.4069, -2.81611, 200),
('22172', 'Plancoët', '30T', 556588, 5374753, 48.5233, -2.23362, 10),
('22173', 'Planguenoual', '30T', 531376, 5375545, 48.5322, -2.57499, 75),
('22174', 'Pléboulle', '30T', 548896, 5384222, 48.6092, -2.33667, 40),
('22175', 'Plédéliac', '30T', 545477, 5366346, 48.4486, -2.385, 90),
('22176', 'Plédran', '30T', 518755, 5365701, 48.4442, -2.74639, 150),
('22177', 'Pléguien', '30T', 504523, 5386791, 48.6342, -2.93861, 71),
('22178', 'Pléhédel', '30T', 499469, 5393582, 48.6953, -3.00722, 100),
('22179', 'Fréhel', '30T', 546974, 5386398, 48.6289, -2.3625, 72),
('22180', 'Plélan-le-Petit', '30T', 557941, 5364854, 48.4342, -2.21667, 93),
('22181', 'Plélauff', '30T', 484460, 5339292, 48.2067, -3.20916, 150),
('22182', 'Plélo', '30T', 503997, 5378083, 48.5558, -2.94583, 110),
('22183', 'Plémet', '30T', 530312, 5336387, 48.18, -2.59223, 150),
('22184', 'Plémy', '30T', 523612, 5353677, 48.3358, -2.68139, 235),
('22185', 'Plénée-Jugon', '30T', 544605, 5357014, 48.3647, -2.39778, 70),
('22186', 'Pléneuf-Val-André', '30T', 533944, 5381457, 48.5853, -2.53973, 50),
('22187', 'Plérin', '30T', 517266, 5375823, 48.5353, -2.76611, 113),
('22188', 'Plerneuf', '30T', 508554, 5373518, 48.5147, -2.88417, 170),
('22189', 'Plésidy', '30T', 491003, 5366078, 48.4478, -3.12167, 200),
('22190', 'Pleslin-Trigavou', '30T', 569700, 5376104, 48.5342, -2.05583, 72),
('22191', 'Plessala', '30T', 528380, 5346998, 48.2756, -2.61751, 197),
('22192', 'Plessix-Balisson', '30T', 563317, 5376523, 48.5386, -2.14223, 50),
('22193', 'Plestan', '30T', 541000, 5363379, 48.4222, -2.44583, 96),
('22194', 'Plestin-les-Grèves', '30T', 453645, 5389450, 48.6564, -3.62945, 40),
('22195', 'Pleubian', '30T', 489992, 5409710, 48.8403, -3.13639, 40),
('22196', 'Pleudaniel', '30T', 489713, 5401651, 48.7678, -3.13999, 48),
('22197', 'Pleudihen-sur-Rance', '30T', 577528, 5373581, 48.5106, -1.95028, 50),
('22198', 'Pleumeur-Bodou', '30T', 462039, 5402388, 48.7733, -3.51666, 90),
('22199', 'Pleumeur-Gautier', '30T', 488374, 5405575, 48.8031, -3.15833, 80),
('22200', 'Pléven', '30T', 550509, 5371051, 48.4906, -2.31639, 80),
('22202', 'Plévin', '30T', 462598, 5341586, 48.2264, -3.50361, 201),
('22204', 'Ploëzal', '30T', 484961, 5395764, 48.7147, -3.20445, 75),
('22205', 'Plorec-sur-Arguenon', '30T', 552039, 5369861, 48.4797, -2.29583, 78),
('22206', 'Plouagat', '30T', 500103, 5375828, 48.5356, -2.9986, 140),
('22207', 'Plouaret', '30T', 465213, 5384396, 48.6117, -3.47195, 120),
('22208', 'Plouasne', '30T', 573686, 5350245, 48.3011, -2.00639, 60),
('22209', 'Ploubalay', '30T', 563490, 5381218, 48.5808, -2.13917, 24),
('22210', 'Ploubazlanec', '30T', 497654, 5405131, 48.7992, -3.03195, 60),
('22211', 'Ploubezre', '30T', 467055, 5394698, 48.7044, -3.44778, 89),
('22212', 'Plouëc-du-Trieux', '30T', 485992, 5391345, 48.675, -3.19028, 92),
('22213', 'Plouër-sur-Rance', '30T', 573585, 5375474, 48.5281, -2.00333, 50),
('22214', 'Plouézec', '30T', 501327, 5399480, 48.7483, -2.98195, 100),
('22215', 'Ploufragan', '30T', 514942, 5370753, 48.4897, -2.79777, 140),
('22216', 'Plougonver', '30T', 471941, 5370185, 48.4842, -3.37972, 220),
('22217', 'Plougras', '30T', 458476, 5373109, 48.5097, -3.56222, 220),
('22218', 'Plougrescant', '30T', 483125, 5410220, 48.8447, -3.23, 53),
('22219', 'Plouguenast', '30T', 522050, 5347681, 48.2819, -2.70278, 147),
('22220', 'Plouguernével', '30T', 481417, 5342944, 48.2394, -3.25028, 210),
('22221', 'Plouguiel', '30T', 482558, 5404849, 48.7964, -3.2375, 60),
('22222', 'Plouha', '30T', 505378, 5391331, 48.675, -2.92695, 100),
('22223', 'Plouisy', '30T', 486478, 5380599, 48.5783, -3.18333, 130),
('22224', 'Ploulec''h', '30T', 463018, 5396236, 48.7181, -3.50278, 98),
('22225', 'Ploumagoar', '30T', 490344, 5377009, 48.5461, -3.13083, 110),
('22226', 'Ploumilliau', '30T', 461477, 5391954, 48.6794, -3.52333, 119),
('22227', 'Plounérin', '30T', 460058, 5379335, 48.5658, -3.5414, 200),
('22228', 'Plounévez-Moëdec', '30T', 467245, 5378208, 48.5561, -3.44389, 210),
('22229', 'Plounévez-Quintin', '30T', 482877, 5348497, 48.2894, -3.23084, 180),
('22231', 'Plourac''h', '30T', 459508, 5362603, 48.4153, -3.54723, 220),
('22232', 'Plourhan', '30T', 509681, 5386365, 48.6303, -2.86861, 76),
('22233', 'Plourivo', '30T', 494854, 5399081, 48.7447, -3.07, 70),
('22234', 'Plouvara', '30T', 506237, 5372651, 48.5069, -2.91556, 160),
('22235', 'Plouzélambre', '30T', 459998, 5388105, 48.6447, -3.54305, 100),
('22236', 'Pludual', '30T', 501370, 5390309, 48.6658, -2.98139, 60),
('22237', 'Pluduno', '30T', 554057, 5375593, 48.5311, -2.26778, 69),
('22238', 'Plufur', '30T', 457615, 5384108, 48.6086, -3.57499, 130),
('22239', 'Plumaudan', '30T', 564859, 5356499, 48.3583, -2.12444, 80),
('22240', 'Plumaugat', '30T', 556721, 5345049, 48.2561, -2.23583, 110),
('22241', 'Plumieux', '30T', 531144, 5327685, 48.1017, -2.58167, 137),
('22242', 'Plurien', '30T', 543987, 5386127, 48.6267, -2.40306, 45),
('22243', 'Plusquellec', '30T', 464091, 5359145, 48.3844, -3.485, 165),
('22244', 'Plussulien', '30T', 494766, 5347702, 48.2825, -3.07055, 200),
('22245', 'Pluzunet', '30T', 472805, 5387658, 48.6414, -3.36917, 110),
('22246', 'Pommeret', '30T', 527701, 5367837, 48.4631, -2.62528, 69),
('22247', 'Pommerit-Jaudy', '30T', 482311, 5397562, 48.7308, -3.24055, 77),
('22248', 'Pommerit-le-Vicomte', '30T', 493633, 5385094, 48.6189, -3.08639, 100),
('22249', 'Pont-Melvez', '30T', 477349, 5367629, 48.4614, -3.30639, 240),
('22250', 'Pontrieux', '30T', 488431, 5393687, 48.6961, -3.15722, 10),
('22251', 'Pordic', '30T', 513340, 5379641, 48.5697, -2.81917, 100),
('22253', 'Pouldouran', '30T', 485425, 5401197, 48.7636, -3.19833, 10),
('22254', 'Prat', '30T', 478140, 5391525, 48.6764, -3.29695, 80),
('22255', 'La Prénessaye', '30T', 527193, 5336618, 48.1822, -2.63417, 109),
('22256', 'Quemper-Guézennec', '30T', 492315, 5394452, 48.7031, -3.10445, 70),
('22257', 'Quemperven', '30T', 476445, 5396874, 48.7244, -3.32028, 60),
('22258', 'Quessoy', '30T', 525423, 5363164, 48.4211, -2.65638, 90),
('22259', 'Quévert', '30T', 567474, 5368418, 48.4653, -2.08723, 95),
('22260', 'Le Quillio', '30T', 508910, 5343168, 48.2417, -2.87999, 180),
('22261', 'Quintenic', '30T', 542463, 5373857, 48.5164, -2.42499, 70),
('22262', 'Quintin', '30T', 506558, 5361258, 48.4044, -2.91139, 180),
('22263', 'Le Quiou', '30T', 573654, 5355896, 48.3519, -2.00584, 30),
('22264', 'La Roche-Derrien', '30T', 480805, 5399296, 48.7464, -3.26111, 40),
('22265', 'Rospez', '30T', 471769, 5397328, 48.7283, -3.38389, 80),
('22266', 'Rostrenen', '30T', 476569, 5342592, 48.2361, -3.31555, 237),
('22267', 'Rouillac', '30T', 547105, 5350890, 48.3094, -2.36472, 150),
('22268', 'Ruca', '30T', 548751, 5379744, 48.5689, -2.33916, 50),
('22269', 'Runan', '30T', 484260, 5393419, 48.6936, -3.21389, 90),
('22271', 'Saint-Adrien', '30T', 490087, 5370618, 48.4886, -3.13416, 190),
('22272', 'Saint-Agathon', '30T', 492293, 5378427, 48.5589, -3.10445, 110),
('22273', 'Saint-Alban', '30T', 534558, 5378342, 48.5572, -2.53166, 90),
('22274', 'Saint-André-des-Eaux', '30T', 573543, 5358087, 48.3717, -2.00695, 21),
('22275', 'Saint-Barnabé', '30T', 522175, 5331595, 48.1372, -2.70194, 140),
('22276', 'Saint-Bihy', '30T', 502304, 5358383, 48.3786, -2.96889, 240),
('22277', 'Saint-Brandan', '30T', 509706, 5359626, 48.3897, -2.86889, 200),
('22278', 'Saint-Brieuc', '30T', 516760, 5373475, 48.5142, -2.77306, 100),
('22279', 'Saint-Caradec', '30T', 511313, 5337738, 48.1928, -2.84777, 102),
('22280', 'Saint-Carné', '30T', 569245, 5363036, 48.4167, -2.06416, 100),
('22281', 'Saint-Carreuc', '30T', 519923, 5360641, 48.3986, -2.73084, 200),
('22282', 'Saint-Cast-le-Guildo', '30T', 554512, 5385787, 48.6228, -2.26028, 11),
('22283', 'Saint-Clet', '30T', 490244, 5390102, 48.6639, -3.13249, 89),
('22284', 'Saint-Connan', '30T', 495396, 5362615, 48.4167, -3.06222, 210),
('22285', 'Saint-Connec', '30T', 505947, 5336001, 48.1772, -2.92, 140),
('22286', 'Saint-Denoual', '30T', 544320, 5375075, 48.5272, -2.39972, 60),
('22287', 'Saint-Donan', '30T', 508521, 5368609, 48.4706, -2.88472, 180),
('22288', 'Saint-Étienne-du-Gué-de-l''Isle', '30T', 526676, 5328002, 48.1047, -2.64167, 80),
('22289', 'Saint-Fiacre', '30T', 495400, 5367616, 48.4617, -3.06222, 170),
('22290', 'Saint-Gelven', '30T', 492903, 5341437, 48.2261, -3.09556, 189),
('22291', 'Saint-Gildas', '30T', 499815, 5363261, 48.4225, -3.0025, 240),
('22292', 'Saint-Gilles-du-Mené', '30T', 533695, 5344094, 48.2492, -2.54611, 230),
('22293', 'Saint-Gilles-les-Bois', '30T', 492349, 5388863, 48.6528, -3.10388, 97),
('22294', 'Saint-Gilles-Pligeaux', '30T', 492945, 5358480, 48.3794, -3.09528, 260),
('22295', 'Saint-Gilles-Vieux-Marché', '30T', 501939, 5343316, 48.2431, -2.97388, 190),
('22296', 'Saint-Glen', '30T', 535309, 5356424, 48.36, -2.52333, 150),
('22297', 'Saint-Gouéno', '30T', 532259, 5346309, 48.2692, -2.56528, 180),
('22298', 'Saint-Guen', '30T', 504870, 5340384, 48.2167, -2.93444, 170),
('22299', 'Saint-Hélen', '30T', 577197, 5369315, 48.4722, -1.95555, 73),
('22300', 'Saint-Hervé', '30T', 513046, 5347066, 48.2767, -2.82417, 180),
('22302', 'Saint-Jacut-de-la-Mer', '30T', 559800, 5383309, 48.6, -2.18889, 31),
('22303', 'Saint-Jacut-du-Mené', '30T', 538576, 5348046, 48.2844, -2.48, 183),
('22304', 'Saint-Jean-Kerdaniel', '30T', 498463, 5379008, 48.5642, -3.02083, 120),
('22305', 'Saint-Jouan-de-l''Isle', '30T', 562439, 5346313, 48.2669, -2.15861, 100),
('22306', 'Saint-Judoce', '30T', 577547, 5357214, 48.3633, -1.95305, 31),
('22307', 'Saint-Julien', '30T', 513700, 5366520, 48.4517, -2.81472, 160),
('22308', 'Saint-Juvat', '30T', 570976, 5356109, 48.3542, -2.04194, 45),
('22309', 'Saint-Launeuc', '30T', 546638, 5342425, 48.2333, -2.37195, 147),
('22310', 'Saint-Laurent', '30T', 482866, 5385302, 48.6206, -3.23249, 115),
('22311', 'Saint-Lormel', '30T', 556933, 5377196, 48.5453, -2.22861, 40),
('22312', 'Saint-Maden', '30T', 568518, 5353423, 48.3303, -2.07555, 40),
('22313', 'Saint-Martin-des-Prés', '30T', 503357, 5350541, 48.3081, -2.95473, 190),
('22314', 'Saint-Maudan', '30T', 516933, 5328922, 48.1133, -2.7725, 98),
('22315', 'Saint-Maudez', '30T', 560651, 5367013, 48.4533, -2.17972, 100),
('22316', 'Saint-Mayeux', '30T', 499691, 5344767, 48.2561, -3.00416, 270),
('22317', 'Saint-Méloir-des-Bois', '30T', 555594, 5367363, 48.4569, -2.24806, 80),
('22318', 'Saint-Michel-de-Plélan', '30T', 558274, 5368440, 48.4664, -2.21167, 69),
('22319', 'Saint-Michel-en-Grève', '30T', 458455, 5392501, 48.6842, -3.56444, 20),
('22320', 'Saint-Nicodème', '30T', 474930, 5354517, 48.3433, -3.33833, 270),
('22321', 'Saint-Nicolas-du-Pélem', '30T', 488158, 5351201, 48.3139, -3.15972, 180),
('22322', 'Saint-Péver', '30T', 492466, 5369812, 48.4814, -3.10195, 160),
('22323', 'Saint-Pôtan', '30T', 552390, 5378479, 48.5572, -2.29, 55),
('22324', 'Saint-Quay-Perros', '30T', 467253, 5404053, 48.7886, -3.44583, 30),
('22325', 'Saint-Quay-Portrieux', '30T', 512254, 5388871, 48.6528, -2.83362, 30),
('22326', 'Saint-Rieul', '30T', 543263, 5365773, 48.4436, -2.415, 90),
('22327', 'Saint-Samson-sur-Rance', '30T', 571767, 5371590, 48.4933, -2.02861, 65),
('22328', 'Saint-Servais', '30T', 471311, 5359289, 48.3861, -3.38749, 163),
('22330', 'Saint-Thélo', '30T', 510975, 5341813, 48.2294, -2.85222, 123),
('22331', 'Sainte-Tréphine', '30T', 488622, 5346229, 48.2692, -3.15333, 150),
('22332', 'Saint-Trimoël', '30T', 533502, 5359284, 48.3858, -2.5475, 110),
('22333', 'Saint-Vran', '30T', 541560, 5342973, 48.2386, -2.44027, 210),
('22334', 'Saint-Igeaux', '30T', 492291, 5346593, 48.2725, -3.10389, 200),
('22335', 'Senven-Léhart', '30T', 494883, 5363479, 48.4244, -3.06917, 200),
('22337', 'Sévignac', '30T', 549101, 5353500, 48.3328, -2.3375, 64),
('22338', 'Squiffiec', '30T', 488743, 5386152, 48.6283, -3.15277, 100),
('22339', 'Taden', '30T', 572655, 5369625, 48.4756, -2.01694, 46),
('22340', 'Tonquédec', '30T', 470877, 5390848, 48.67, -3.39556, 90),
('22341', 'Tramain', '30T', 544429, 5361089, 48.4014, -2.39973, 100),
('22342', 'Trébédan', '30T', 561311, 5361061, 48.3997, -2.17166, 100),
('22343', 'Trébeurden', '30T', 458627, 5402010, 48.7697, -3.56306, 81),
('22344', 'Trébrivan', '30T', 464861, 5350649, 48.3081, -3.47389, 170),
('22345', 'Trébry', '30T', 533192, 5355979, 48.3561, -2.55195, 150),
('22346', 'Trédaniel', '30T', 528437, 5356262, 48.3589, -2.61611, 150),
('22347', 'Trédarzec', '30T', 485370, 5403760, 48.7867, -3.19917, 59),
('22348', 'Trédias', '30T', 556609, 5356287, 48.3572, -2.23583, 70),
('22349', 'Trédrez-Locquémeau', '30T', 458406, 5394199, 48.6994, -3.56528, 90),
('22350', 'Tréduder', '30T', 458550, 5388764, 48.6506, -3.56278, 90),
('22351', 'Treffrin', '30T', 461683, 5349774, 48.3, -3.51667, 140),
('22352', 'Tréfumel', '30T', 572294, 5354427, 48.3389, -2.02444, 24),
('22353', 'Trégastel', '30T', 463453, 5406392, 48.8094, -3.49777, 50),
('22354', 'Tréglamus', '30T', 479667, 5378273, 48.5572, -3.27556, 210),
('22356', 'Trégomeur', '30T', 508791, 5379386, 48.5675, -2.88084, 90),
('22357', 'Trégon', '30T', 560449, 5380073, 48.5708, -2.18056, 39),
('22358', 'Trégonneau', '30T', 487961, 5384424, 48.6128, -3.16333, 110),
('22359', 'Trégrom', '30T', 470120, 5383101, 48.6003, -3.40528, 110),
('22360', 'Trégueux', '30T', 519539, 5370736, 48.4894, -2.73556, 112),
('22361', 'Tréguidel', '30T', 504382, 5383271, 48.6025, -2.94056, 103),
('22362', 'Tréguier', '30T', 483105, 5403550, 48.7847, -3.23, 45),
('22363', 'Trélévern', '30T', 472691, 5406278, 48.8089, -3.37195, 76),
('22364', 'Trélivan', '30T', 565094, 5364685, 48.4319, -2.12, 97),
('22365', 'Trémargat', '30T', 480297, 5353168, 48.3314, -3.26584, 260),
('22366', 'Trémel', '30T', 455009, 5383449, 48.6025, -3.61027, 120),
('22367', 'Tréméloir', '30T', 510516, 5377876, 48.5539, -2.85749, 110),
('22368', 'Tréméreuc', '30T', 569196, 5378753, 48.5581, -2.06222, 68),
('22369', 'Trémeur', '30T', 554706, 5355126, 48.3469, -2.26167, 60),
('22370', 'Tréméven', '30T', 497955, 5391174, 48.6736, -3.02778, 60),
('22371', 'Trémorel', '30T', 552985, 5338776, 48.2, -2.28694, 120),
('22372', 'Trémuson', '30T', 511240, 5374295, 48.5217, -2.84778, 140),
('22373', 'Tréogan', '30T', 461331, 5337364, 48.1883, -3.52028, 214),
('22375', 'Tressignaux', '30T', 501146, 5384968, 48.6178, -2.98445, 75),
('22376', 'Trévé', '30T', 515353, 5339970, 48.2128, -2.79333, 159),
('22377', 'Tréveneuc', '30T', 509634, 5390194, 48.6647, -2.86916, 50),
('22378', 'Trévérec', '30T', 495827, 5389199, 48.6558, -3.05666, 90),
('22379', 'Trévou-Tréguignec', '30T', 473876, 5406643, 48.8122, -3.35583, 50),
('22380', 'Trévron', '30T', 569464, 5360259, 48.3917, -2.06166, 60),
('22381', 'Trézény', '30T', 473050, 5400409, 48.7561, -3.36667, 100),
('22383', 'Troguéry', '30T', 483421, 5400184, 48.7544, -3.22556, 40),
('22384', 'Uzel', '30T', 511809, 5347372, 48.2794, -2.84083, 210),
('22385', 'La Vicomté-sur-Rance', '30T', 575346, 5371050, 48.4881, -1.98028, 40),
('22386', 'Le Vieux-Bourg', '30T', 500144, 5359371, 48.3875, -2.99805, 260),
('22387', 'Le Vieux-Marché', '30T', 467073, 5383798, 48.6064, -3.44667, 120),
('22388', 'Vildé-Guingalan', '30T', 562455, 5365427, 48.4389, -2.15556, 93),
('22389', 'Yffiniac', '30T', 523995, 5370290, 48.4853, -2.67527, 10),
('22390', 'Yvias', '30T', 496302, 5395745, 48.7147, -3.05027, 72),
('22391', 'Yvignac-la-Tour', '30T', 561146, 5355346, 48.3483, -2.17473, 90),
('23001', 'Ahun', '31T', 426275, 5104088, 46.0864, 2.04639, 460),
('23002', 'Ajain', '31T', 422600, 5117530, 46.2069, 1.99667, 478),
('23003', 'Alleyrat', '31T', 433825, 5093137, 45.9886, 2.14556, 460),
('23004', 'Anzême', '31T', 412367, 5124367, 46.2672, 1.86277, 330),
('23005', 'Arfeuille-Châtain', '31T', 456582, 5101515, 46.0658, 2.43861, 580),
('23006', 'Arrènes', '31T', 389350, 5102974, 46.0714, 1.56916, 396),
('23007', 'Ars', '31T', 429852, 5093798, 45.9942, 2.09417, 508),
('23008', 'Aubusson', '31T', 435614, 5089353, 45.9547, 2.16916, 440),
('23009', 'Auge', '31T', 447832, 5121091, 46.2414, 2.32333, 410),
('23010', 'Augères', '31T', 401903, 5104614, 46.0881, 1.73111, 452),
('23011', 'Aulon', '31T', 398819, 5103830, 46.0806, 1.69139, 460),
('23012', 'Auriat', '31T', 394734, 5080930, 45.8739, 1.64362, 460),
('23013', 'Auzances', '31T', 461368, 5097286, 46.0281, 2.50083, 566),
('23014', 'Azat-Châtenet', '31T', 404050, 5103160, 46.0753, 1.75917, 463),
('23015', 'Azerables', '31T', 382842, 5134495, 46.3539, 1.47722, 330),
('23016', 'Banize', '31T', 422214, 5086914, 45.9314, 1.99667, 520),
('23017', 'Basville', '31T', 453240, 5079996, 45.8719, 2.39751, 703),
('23018', 'Bazelat', '31T', 387670, 5134281, 46.3528, 1.54, 348),
('23019', 'Beissat', '31T', 444151, 5069022, 45.7725, 2.28168, 720),
('23020', 'Bellegarde-en-Marche', '31T', 445177, 5092223, 45.9814, 2.29222, 603),
('23021', 'Bénévent-l''Abbaye', '31T', 394099, 5107985, 46.1172, 1.62944, 480),
('23022', 'Bétête', '31T', 429053, 5134275, 46.3583, 2.07778, 380),
('23023', 'Blaudeix', '31T', 429447, 5120256, 46.2322, 2.08501, 440),
('23024', 'Blessac', '31T', 432475, 5089726, 45.9578, 2.12861, 580),
('23025', 'Bonnat', '31T', 415714, 5131080, 46.3281, 1.905, 350),
('23026', 'Bord-Saint-Georges', '31T', 445882, 5123330, 46.2614, 2.29778, 440),
('23027', 'Bosmoreau-les-Mines', '31T', 403641, 5094862, 46.0006, 1.75556, 430),
('23028', 'Bosroger', '31T', 441855, 5093643, 45.9939, 2.24917, 600),
('23029', 'Le Bourg-d''Hem', '31T', 409805, 5127738, 46.2972, 1.82889, 340),
('23030', 'Bourganeuf', '31T', 403580, 5089553, 45.9528, 1.75584, 440),
('23031', 'Boussac', '31T', 439663, 5133142, 46.3492, 2.21583, 367),
('23032', 'Boussac-Bourg', '31T', 441107, 5134363, 46.3603, 2.23444, 420),
('23033', 'La Brionne', '31T', 406398, 5113435, 46.1681, 1.7875, 480),
('23034', 'Brousse', '31T', 457757, 5091198, 45.9731, 2.45472, 636),
('23035', 'Budelière', '31T', 459038, 5118629, 46.22, 2.46889, 405),
('23036', 'Bussière-Dunoise', '31T', 404796, 5123523, 46.2586, 1.76472, 422),
('23037', 'Bussière-Nouvelle', '31T', 455621, 5096399, 46.0197, 2.42666, 654),
('23038', 'Bussière-Saint-Georges', '31T', 433509, 5139164, 46.4028, 2.135, 440),
('23039', 'La Celle-Dunoise', '31T', 405316, 5129381, 46.3114, 1.77028, 246),
('23040', 'La Celle-sous-Gouzon', '31T', 439213, 5117991, 46.2128, 2.21194, 385),
('23041', 'La Cellette', '31T', 424350, 5139364, 46.4036, 2.01584, 350),
('23042', 'Ceyroux', '31T', 396821, 5102598, 46.0692, 1.66583, 440),
('23043', 'Chamberaud', '31T', 426225, 5099952, 46.0492, 2.04639, 520),
('23044', 'Chambon-Sainte-Croix', '31T', 405756, 5134313, 46.3558, 1.775, 290),
('23045', 'Chambon-sur-Voueize', '31T', 455564, 5115165, 46.1886, 2.42417, 330),
('23046', 'Chambonchard', '31T', 465416, 5113651, 46.1756, 2.55195, 320),
('23047', 'Chamborand', '31T', 389840, 5112289, 46.1553, 1.57334, 400),
('23048', 'Champagnat', '31T', 444591, 5096488, 46.0197, 2.28417, 560),
('23049', 'Champsanglard', '31T', 413730, 5125366, 46.2764, 1.88027, 403),
('23050', 'La Chapelle-Baloue', '31T', 390485, 5135063, 46.3603, 1.57639, 300),
('23051', 'La Chapelle-Saint-Martial', '31T', 416993, 5097508, 46.0261, 1.9275, 520),
('23052', 'La Chapelle-Taillefert', '31T', 410277, 5105844, 46.1003, 1.83917, 486),
('23053', 'Chard', '31T', 459350, 5087947, 45.9439, 2.47555, 620),
('23054', 'Charron', '31T', 466289, 5100775, 46.0597, 2.56417, 500),
('23055', 'Châtelard', '31T', 458524, 5090020, 45.9625, 2.46472, 700),
('23056', 'Châtelus-le-Marcheix', '31T', 392063, 5094714, 45.9975, 1.60611, 390),
('23057', 'Châtelus-Malvaleix', '31T', 424984, 5128428, 46.3053, 2.02583, 410),
('23058', 'Le Chauchet', '31T', 448522, 5106207, 46.1075, 2.3339, 460),
('23059', 'La Chaussade', '31T', 440709, 5093098, 45.9889, 2.23444, 610),
('23060', 'Chavanat', '31T', 419577, 5089510, 45.9544, 1.96223, 550),
('23061', 'Chénérailles', '31T', 436528, 5106968, 46.1133, 2.17861, 530),
('23062', 'Chéniers', '31T', 409833, 5133943, 46.3531, 1.82806, 260),
('23063', 'Clairavaux', '31T', 435222, 5070312, 45.7833, 2.16667, 720),
('23064', 'Clugnat', '31T', 432133, 5128715, 46.3086, 2.11862, 340),
('23065', 'Colondannes', '31T', 393170, 5127266, 46.2906, 1.61306, 344),
('23066', 'Le Compas', '31T', 458542, 5092675, 45.9864, 2.46472, 600),
('23067', 'La Courtine', '31T', 442630, 5061073, 45.7008, 2.26306, 770),
('23068', 'Cressat', '31T', 431173, 5109927, 46.1394, 2.10889, 526),
('23069', 'Crocq', '31T', 450929, 5079582, 45.8681, 2.36777, 720),
('23070', 'Crozant', '31T', 393983, 5138304, 46.39, 1.62112, 260),
('23071', 'Croze', '31T', 435373, 5074508, 45.8211, 2.16805, 600),
('23072', 'Domeyrot', '31T', 434886, 5122110, 46.2494, 2.15528, 420),
('23073', 'Dontreix', '31T', 465965, 5092660, 45.9867, 2.56056, 643),
('23074', 'Le Donzeil', '31T', 421575, 5097633, 46.0278, 1.98667, 560),
('23075', 'Dun-le-Palestel', '31T', 397349, 5128892, 46.3058, 1.66694, 365),
('23076', 'Évaux-les-Bains', '31T', 460292, 5113713, 46.1758, 2.48556, 470),
('23077', 'Faux-la-Montagne', '31T', 417252, 5066945, 45.7511, 1.93611, 720),
('23078', 'Faux-Mazuras', '31T', 405032, 5088790, 45.9461, 1.77472, 580),
('23079', 'Felletin', '31T', 436072, 5081570, 45.8847, 2.17611, 520),
('23080', 'Féniers', '31T', 432180, 5066672, 45.7503, 2.12805, 840),
('23081', 'Flayat', '31T', 451865, 5069575, 45.7781, 2.38083, 766),
('23082', 'Fleurat', '31T', 398104, 5121532, 46.2397, 1.67834, 407),
('23083', 'Fontanières', '31T', 461446, 5106298, 46.1092, 2.50111, 541),
('23084', 'La Forêt-du-Temple', '31T', 415857, 5141358, 46.4206, 1.90501, 400),
('23086', 'Fransèches', '31T', 426487, 5096646, 46.0194, 2.05028, 510),
('23087', 'Fresselines', '31T', 398796, 5137451, 46.3831, 1.68388, 260),
('23088', 'Gartempe', '31T', 402615, 5111548, 46.1506, 1.73889, 400),
('23089', 'Genouillac', '31T', 422442, 5133770, 46.3531, 1.99194, 301),
('23090', 'Gentioux-Pigerolles', '31T', 421836, 5070590, 45.7844, 1.99445, 760),
('23091', 'Gioux', '31T', 431777, 5073251, 45.8094, 2.12194, 791),
('23092', 'Glénic', '31T', 417077, 5119578, 46.2247, 1.92473, 310),
('23093', 'Gouzon', '31T', 441440, 5115500, 46.1906, 2.24112, 377),
('23095', 'Le Grand-Bourg', '31T', 395296, 5112688, 46.1597, 1.64389, 385),
('23096', 'Guéret', '31T', 413133, 5113459, 46.1692, 1.87472, 431),
('23097', 'Issoudun-Létrieix', '31T', 433868, 5101193, 46.0611, 2.14499, 531),
('23098', 'Jalesches', '31T', 430454, 5127838, 46.3006, 2.09694, 400),
('23099', 'Janaillat', '31T', 402967, 5101232, 46.0578, 1.74556, 440),
('23100', 'Jarnages', '31T', 429425, 5114639, 46.1817, 2.08556, 480),
('23101', 'Jouillat', '31T', 418215, 5123020, 46.2558, 1.93888, 393),
('23102', 'Ladapeyre', '31T', 426877, 5122139, 46.2489, 2.05139, 420),
('23103', 'Lafat', '31T', 393235, 5132204, 46.335, 1.61278, 320),
('23104', 'Lavaufranche', '31T', 444080, 5129951, 46.3208, 2.27361, 422),
('23105', 'Lavaveix-les-Mines', '31T', 429689, 5102165, 46.0694, 2.09083, 396),
('23106', 'Lépaud', '31T', 452798, 5120741, 46.2386, 2.38777, 456),
('23107', 'Lépinas', '31T', 417113, 5103217, 46.0775, 1.92806, 600),
('23108', 'Leyrat', '31T', 445511, 5134538, 46.3622, 2.29166, 427),
('23109', 'Linard', '31T', 413369, 5134571, 46.3592, 1.87389, 340),
('23110', 'Lioux-les-Monges', '31T', 457806, 5088791, 45.9514, 2.45556, 660),
('23111', 'Lizières', '31T', 390057, 5118429, 46.2106, 1.57472, 420),
('23112', 'Lourdoueix-Saint-Pierre', '31T', 409565, 5140399, 46.4111, 1.82333, 380),
('23113', 'Lupersat', '31T', 449824, 5092122, 45.9808, 2.35223, 566),
('23114', 'Lussat', '31T', 449256, 5114566, 46.1828, 2.3425, 417),
('23115', 'Magnat-l''Étrange', '31T', 443977, 5071277, 45.7928, 2.27918, 680),
('23116', 'Mainsat', '31T', 452617, 5100001, 46.0519, 2.3875, 550),
('23117', 'Maison-Feyne', '31T', 397691, 5132715, 46.3403, 1.67055, 330),
('23118', 'Maisonnisses', '31T', 414791, 5101551, 46.0622, 1.89833, 571),
('23119', 'Malleret', '31T', 446953, 5068380, 45.7669, 2.31778, 821),
('23120', 'Malleret-Boussac', '31T', 433907, 5132585, 46.3436, 2.14111, 310),
('23121', 'Malval', '31T', 414294, 5133508, 46.3497, 1.88611, 290),
('23122', 'Mansat-la-Courrière', '31T', 407536, 5090604, 45.9628, 1.80667, 540),
('23123', 'Les Mars', '31T', 459657, 5092050, 45.9808, 2.47917, 600),
('23124', 'Marsac', '31T', 391119, 5105783, 46.0969, 1.59139, 369),
('23125', 'Le Mas-d''Artige', '31T', 437280, 5064550, 45.7317, 2.19389, 800),
('23126', 'Masbaraud-Mérignat', '31T', 402696, 5092253, 45.9769, 1.74389, 433),
('23127', 'Mautes', '31T', 452224, 5088029, 45.9442, 2.38362, 620),
('23128', 'Mazeirat', '31T', 421330, 5110415, 46.1428, 1.98139, 431),
('23129', 'La Mazière-aux-Bons-Hommes', '31T', 456419, 5081424, 45.885, 2.43834, 780),
('23130', 'Méasnes', '31T', 406012, 5141194, 46.4178, 1.77695, 370),
('23131', 'Mérinchal', '31T', 460342, 5084885, 45.9164, 2.48861, 700),
('23132', 'Montaigut-le-Blanc', '31T', 402305, 5108250, 46.1208, 1.73556, 481),
('23133', 'Montboucher', '31T', 397727, 5089833, 45.9544, 1.68027, 501),
('23134', 'Le Monteil-au-Vicomte', '31T', 417497, 5086944, 45.9311, 1.93583, 560),
('23136', 'Mortroux', '31T', 416569, 5138817, 46.3978, 1.91472, 385),
('23137', 'Mourioux-Vieilleville', '31T', 395203, 5103428, 46.0764, 1.64473, 400),
('23138', 'Moutier-d''Ahun', '31T', 427076, 5104665, 46.0917, 2.05666, 380),
('23139', 'Moutier-Malcard', '31T', 418869, 5138323, 46.3936, 1.94472, 360),
('23140', 'Moutier-Rozeille', '31T', 437961, 5085100, 45.9167, 2.2, 520),
('23141', 'Naillat', '31T', 395029, 5124609, 46.2669, 1.63778, 360),
('23142', 'Néoux', '31T', 442591, 5084839, 45.9147, 2.25973, 590),
('23143', 'Noth', '31T', 391025, 5121036, 46.2342, 1.58666, 380),
('23144', 'La Nouaille', '31T', 427596, 5077527, 45.8475, 2.0675, 698),
('23145', 'Nouhant', '31T', 452967, 5125957, 46.2856, 2.38944, 440),
('23146', 'Nouzerines', '31T', 431526, 5137550, 46.3881, 2.10944, 418),
('23147', 'Nouzerolles', '31T', 403216, 5137255, 46.3819, 1.74139, 317),
('23148', 'Nouziers', '31T', 419956, 5141426, 46.4217, 1.95833, 410),
('23149', 'Parsac', '31T', 434573, 5116927, 46.2028, 2.15194, 386),
('23150', 'Peyrabout', '31T', 415957, 5106628, 46.1081, 1.91251, 620),
('23151', 'Peyrat-la-Nonière', '31T', 442706, 5104222, 46.0892, 2.25888, 454),
('23152', 'Pierrefitte', '31T', 440919, 5110412, 46.1447, 2.235, 395),
('23154', 'Pionnat', '31T', 424800, 5113459, 46.1706, 2.02583, 460),
('23155', 'Pontarion', '31T', 410928, 5094413, 45.9975, 1.84973, 450),
('23156', 'Pontcharraud', '31T', 443552, 5079244, 45.8644, 2.27278, 580),
('23157', 'La Pouge', '31T', 418388, 5092396, 45.9803, 1.94639, 600),
('23158', 'Poussanges', '31T', 438982, 5074997, 45.8258, 2.21444, 680),
('23159', 'Puy-Malsignat', '31T', 439645, 5098695, 46.0392, 2.21999, 550),
('23160', 'Reterre', '31T', 459402, 5105570, 46.1025, 2.47473, 535),
('23161', 'Rimondeix', '31T', 430791, 5119840, 46.2286, 2.10249, 400),
('23162', 'Roches', '31T', 422796, 5126264, 46.2856, 1.99778, 481),
('23164', 'Rougnat', '31T', 461602, 5100371, 46.0558, 2.50361, 557),
('23165', 'Royère-de-Vassivière', '31T', 415381, 5077064, 45.8419, 1.91028, 740),
('23166', 'Sagnat', '31T', 394331, 5128820, 46.3047, 1.62778, 318),
('23167', 'Sannat', '31T', 454306, 5107458, 46.1192, 2.40861, 505),
('23168', 'Sardent', '31T', 411530, 5100393, 46.0514, 1.85639, 535),
('23169', 'La Saunière', '31T', 417838, 5109227, 46.1317, 1.93639, 460),
('23170', 'Savennes', '31T', 414323, 5106496, 46.1067, 1.89139, 600),
('23171', 'Sermur', '31T', 455780, 5091552, 45.9761, 2.42917, 700),
('23172', 'La Serre-Bussière-Vieille', '31T', 447464, 5100568, 46.0567, 2.32083, 512),
('23173', 'Soubrebost', '31T', 410433, 5090006, 45.9578, 1.84416, 640),
('23174', 'Soumans', '31T', 446669, 5127644, 46.3003, 2.3075, 410),
('23175', 'Sous-Parsat', '31T', 421204, 5100601, 46.0544, 1.98139, 576),
('23176', 'La Souterraine', '31T', 383624, 5121636, 46.2383, 1.49056, 371),
('23177', 'Saint-Agnant-de-Versillat', '31T', 385380, 5126172, 46.2794, 1.51222, 310),
('23178', 'Saint-Agnant-près-Crocq', '31T', 449448, 5072403, 45.8033, 2.34945, 760),
('23179', 'Saint-Alpinien', '31T', 441000, 5091953, 45.9786, 2.23834, 620),
('23180', 'Saint-Amand', '31T', 438508, 5092409, 45.9825, 2.20611, 542),
('23181', 'Saint-Amand-Jartoudeix', '31T', 395782, 5085543, 45.9156, 1.65612, 480),
('23182', 'Saint-Avit-de-Tardes', '31T', 444470, 5085378, 45.9197, 2.28389, 560),
('23183', 'Saint-Avit-le-Pauvre', '31T', 425937, 5093844, 45.9942, 2.04361, 592),
('23184', 'Saint-Bard', '31T', 453533, 5084624, 45.9136, 2.40083, 647),
('23185', 'Saint-Chabrais', '31T', 438631, 5109014, 46.1319, 2.20556, 440),
('23186', 'Saint-Christophe', '31T', 412170, 5106126, 46.1031, 1.8636, 500),
('23187', 'Saint-Dizier-la-Tour', '31T', 435351, 5109326, 46.1344, 2.16306, 490),
('23188', 'Saint-Dizier-les-Domaines', '31T', 425836, 5129899, 46.3186, 2.03666, 350),
('23189', 'Saint-Dizier-Leyrenne', '31T', 400315, 5098064, 46.0289, 1.71194, 420),
('23190', 'Saint-Domet', '31T', 445926, 5099130, 46.0436, 2.30111, 502),
('23191', 'Saint-Éloi', '31T', 409653, 5102828, 46.0731, 1.83167, 532),
('23192', 'Saint-Étienne-de-Fursac', '31T', 385332, 5111014, 46.1431, 1.51528, 340),
('23193', 'Sainte-Feyre', '31T', 416154, 5110083, 46.1392, 1.91444, 440),
('23194', 'Sainte-Feyre-la-Montagne', '31T', 441195, 5083031, 45.8983, 2.24195, 600),
('23195', 'Saint-Fiel', '31T', 414768, 5118406, 46.2139, 1.895, 354),
('23196', 'Saint-Frion', '31T', 440231, 5079151, 45.8633, 2.23001, 680),
('23197', 'Saint-Georges-la-Pouge', '31T', 420299, 5093791, 45.9931, 1.97083, 505),
('23198', 'Saint-Georges-Nigremont', '31T', 442728, 5076381, 45.8386, 2.2625, 746),
('23199', 'Saint-Germain-Beaupré', '31T', 388072, 5129395, 46.3089, 1.54639, 330),
('23200', 'Saint-Goussaud', '31T', 390080, 5099319, 46.0386, 1.57944, 668),
('23201', 'Saint-Hilaire-la-Plaine', '31T', 420747, 5108509, 46.1256, 1.97416, 420),
('23202', 'Saint-Hilaire-le-Château', '31T', 414432, 5092696, 45.9825, 1.89528, 460),
('23203', 'Saint-Julien-la-Genête', '31T', 459438, 5111033, 46.1517, 2.47472, 480),
('23204', 'Saint-Julien-le-Châtel', '31T', 443637, 5107361, 46.1175, 2.27055, 430),
('23205', 'Saint-Junien-la-Bregère', '31T', 403350, 5081716, 45.8822, 1.75445, 520),
('23206', 'Saint-Laurent', '31T', 419885, 5113182, 46.1675, 1.96222, 380),
('23207', 'Saint-Léger-Bridereix', '31T', 391324, 5126990, 46.2878, 1.58916, 300),
('23208', 'Saint-Léger-le-Guérétois', '31T', 408450, 5111489, 46.1508, 1.81445, 522),
('23209', 'Saint-Loup', '31T', 443700, 5109521, 46.1369, 2.27111, 435),
('23210', 'Saint-Maixant', '31T', 438628, 5093612, 45.9933, 2.20751, 560),
('23211', 'Saint-Marc-à-Frongier', '31T', 431967, 5086613, 45.9297, 2.1225, 572),
('23212', 'Saint-Marc-à-Loubaud', '31T', 422078, 5077810, 45.8494, 1.99639, 705),
('23213', 'Saint-Marien', '31T', 440404, 5141068, 46.4206, 2.22445, 460),
('23214', 'Saint-Martial-le-Mont', '31T', 429987, 5099970, 46.0497, 2.095, 404),
('23215', 'Saint-Martial-le-Vieux', '31T', 443964, 5057944, 45.6728, 2.28055, 740),
('23216', 'Saint-Martin-Château', '31T', 406910, 5079069, 45.8589, 1.80083, 560),
('23217', 'Saint-Martin-Sainte-Catherine', '31T', 389584, 5090806, 45.9619, 1.575, 360),
('23218', 'Saint-Maurice-près-Crocq', '31T', 447808, 5080225, 45.8736, 2.3275, 700),
('23219', 'Saint-Maurice-la-Souterraine', '31T', 378967, 5119102, 46.2147, 1.43083, 371),
('23220', 'Saint-Médard-la-Rochette', '31T', 434022, 5099524, 46.0461, 2.14722, 541),
('23221', 'Saint-Merd-la-Breuille', '31T', 455618, 5065843, 45.7447, 2.42945, 780),
('23222', 'Saint-Michel-de-Veisse', '31T', 426784, 5089080, 45.9514, 2.05528, 640),
('23223', 'Saint-Moreil', '31T', 398149, 5078805, 45.8553, 1.68806, 420),
('23224', 'Saint-Oradoux-de-Chirouze', '31T', 447568, 5064486, 45.7319, 2.32611, 800),
('23225', 'Saint-Oradoux-près-Crocq', '31T', 452513, 5080773, 45.8789, 2.38806, 720),
('23226', 'Saint-Pardoux-d''Arnet', '31T', 448265, 5080653, 45.8775, 2.33334, 660),
('23227', 'Saint-Pardoux-Morterolles', '31T', 408503, 5083212, 45.8964, 1.82056, 600),
('23228', 'Saint-Pardoux-le-Neuf', '31T', 440519, 5086680, 45.9311, 2.23278, 600),
('23229', 'Saint-Pardoux-les-Cards', '31T', 432048, 5103651, 46.0831, 2.12112, 491),
('23230', 'Saint-Pierre-Chérignat', '31T', 391912, 5092216, 45.975, 1.60472, 440),
('23231', 'Saint-Pierre-de-Fursac', '31T', 385171, 5111603, 46.1483, 1.51306, 322),
('23232', 'Saint-Pierre-Bellevue', '31T', 413793, 5085420, 45.9169, 1.88834, 642),
('23233', 'Saint-Pierre-le-Bost', '31T', 443585, 5138877, 46.4011, 2.26611, 476),
('23234', 'Saint-Priest', '31T', 449406, 5104101, 46.0886, 2.34556, 490),
('23235', 'Saint-Priest-la-Feuille', '31T', 386972, 5117312, 46.2, 1.53501, 420),
('23236', 'Saint-Priest-la-Plaine', '31T', 394152, 5115980, 46.1892, 1.62834, 373),
('23237', 'Saint-Priest-Palus', '31T', 395748, 5083537, 45.8975, 1.65611, 465),
('23238', 'Saint-Quentin-la-Chabanne', '31T', 434346, 5079427, 45.8653, 2.15416, 544),
('23239', 'Saint-Sébastien', '31T', 386981, 5138616, 46.3917, 1.53, 300),
('23240', 'Saint-Silvain-Bas-le-Roc', '31T', 440669, 5131003, 46.33, 2.22917, 440),
('23241', 'Saint-Silvain-Bellegarde', '31T', 445900, 5091260, 45.9728, 2.30167, 580),
('23242', 'Saint-Silvain-Montaigut', '31T', 403585, 5110514, 46.1414, 1.75166, 403),
('23243', 'Saint-Silvain-sous-Toulx', '31T', 436853, 5123911, 46.2658, 2.18055, 480),
('23244', 'Saint-Sulpice-le-Dunois', '31T', 402322, 5128100, 46.2994, 1.73167, 356),
('23245', 'Saint-Sulpice-le-Guérétois', '31T', 409733, 5117027, 46.2008, 1.83, 380),
('23246', 'Saint-Sulpice-les-Champs', '31T', 424432, 5093955, 45.995, 2.02416, 590),
('23247', 'Saint-Vaury', '31T', 403973, 5117454, 46.2039, 1.75528, 463),
('23248', 'Saint-Victor-en-Marche', '31T', 408397, 5107971, 46.1192, 1.81444, 478),
('23249', 'Saint-Yrieix-la-Montagne', '31T', 424173, 5081549, 45.8833, 2.02278, 613),
('23250', 'Saint-Yrieix-les-Bois', '31T', 417879, 5105862, 46.1014, 1.9375, 520),
('23251', 'Tardes', '31T', 449645, 5109655, 46.1386, 2.34806, 400),
('23252', 'Tercillat', '31T', 427388, 5139851, 46.4083, 2.05528, 394),
('23253', 'Thauron', '31T', 408374, 5094882, 46.0014, 1.81666, 525),
('23254', 'Toulx-Sainte-Croix', '31T', 439165, 5126079, 46.2856, 2.21027, 656),
('23255', 'Trois-Fonds', '31T', 441385, 5120995, 46.24, 2.23972, 440),
('23257', 'Vallière', '31T', 425432, 5084065, 45.9061, 2.03861, 573),
('23258', 'Vareilles', '31T', 382877, 5128504, 46.3, 1.47917, 362),
('23259', 'Verneiges', '31T', 448863, 5123953, 46.2672, 2.33639, 430),
('23260', 'Vidaillat', '31T', 415278, 5090061, 45.9589, 1.90666, 480),
('23261', 'Viersat', '31T', 456143, 5124205, 46.27, 2.43083, 450),
('23262', 'Vigeville', '31T', 428539, 5112272, 46.1603, 2.07444, 520),
('23263', 'Villard', '31T', 400049, 5131780, 46.3322, 1.70138, 320),
('23264', 'La Villedieu', '31T', 413251, 5065178, 45.7347, 1.88499, 540),
('23265', 'La Villeneuve', '31T', 454188, 5082921, 45.8983, 2.40944, 711),
('23266', 'La Villetelle', '31T', 448799, 5085278, 45.9192, 2.33972, 640),
('24001', 'Abjat-sur-Bandiat', '31T', 324959, 5050451, 45.5856, 0.756115, 260),
('24002', 'Agonac', '31T', 323591, 5017844, 45.2919, 0.750283, 130),
('24004', 'Ajat', '31T', 344083, 5002052, 45.1547, 1.01639, 200),
('24005', 'Alles-sur-Dordogne', '31T', 331470, 4969488, 44.8589, 0.866942, 60),
('24006', 'Allas-les-Mines', '31T', 347556, 4966276, 44.8336, 1.07138, 71),
('24007', 'Allemans', '31T', 289035, 5018595, 45.2892, 0.309724, 118),
('24008', 'Angoisse', '31T', 354324, 5032129, 45.4275, 1.13777, 340),
('24009', 'Anlhiac', '31T', 353203, 5020391, 45.3217, 1.12694, 220),
('24010', 'Annesse-et-Beaulieu', '31T', 309267, 5004053, 45.1642, 0.573057, 87),
('24011', 'Antonne-et-Trigonant', '31T', 329840, 5008687, 45.2111, 0.833053, 100),
('24012', 'Archignac', '31T', 366981, 4985571, 45.0111, 1.31194, 290),
('24013', 'Atur', '31T', 322947, 5001032, 45.1406, 0.748056, 239),
('24014', 'Aubas', '31T', 357740, 4993457, 45.0803, 1.19249, 80),
('24015', 'Audrix', '31T', 337896, 4971731, 44.8806, 0.947504, 220),
('24016', 'Augignac', '31T', 320615, 5050975, 45.5892, 0.70028, 270),
('24018', 'Auriac-du-Périgord', '31T', 353456, 4996426, 45.1061, 1.13722, 120),
('24019', 'Azerat', '31T', 352695, 5001322, 45.15, 1.12611, 140),
('24020', 'La Bachellerie', '31T', 354974, 5000652, 45.1444, 1.15528, 140),
('24021', 'Badefols-d''Ans', '31T', 358633, 5009924, 45.2286, 1.19917, 320),
('24022', 'Badefols-sur-Dordogne', '31T', 325516, 4967794, 44.8422, 0.792221, 40),
('24023', 'Baneuil', '31T', 317385, 4969256, 44.8533, 0.688893, 130),
('24024', 'Bardou', '31T', 316668, 4956430, 44.7378, 0.684447, 170),
('24025', 'Bars', '31T', 347537, 4995793, 45.0992, 1.06222, 220),
('24026', 'Bassillac', '31T', 328318, 5006474, 45.1908, 0.814447, 124),
('24027', 'Bayac', '31T', 320120, 4963404, 44.8014, 0.725551, 58),
('24028', 'Beaumont-du-Périgord', '31T', 323189, 4959861, 44.7703, 0.765557, 144),
('24029', 'Beaupouyet', '31T', 284952, 4986171, 44.9964, 0.271667, 100),
('24030', 'Beauregard-de-Terrasson', '31T', 361074, 5000855, 45.1475, 1.23278, 240),
('24031', 'Beauregard-et-Bassac', '31T', 314002, 4984363, 44.9883, 0.640557, 190),
('24032', 'Beauronne', '31T', 293848, 4996905, 45.0956, 0.380005, 70),
('24033', 'Beaussac', '31T', 304751, 5040886, 45.4942, 0.501116, 120),
('24034', 'Beleymas', '31T', 303309, 4985177, 44.9928, 0.504721, 140),
('24035', 'Belvès', '31T', 342104, 4959863, 44.7747, 1.00444, 160),
('24036', 'Berbiguières', '31T', 345163, 4966333, 44.8336, 1.04111, 165),
('24037', 'Bergerac', '31T', 301204, 4969614, 44.8522, 0.484162, 39),
('24038', 'Bertric-Burée', '31T', 292946, 5020165, 45.3044, 0.358888, 180),
('24039', 'Besse', '31T', 349830, 4947884, 44.6686, 1.10555, 240),
('24040', 'Beynac-et-Cazenac', '31T', 353507, 4967095, 44.8422, 1.14639, 71),
('24041', 'Bézenac', '31T', 348964, 4967262, 44.8428, 1.08889, 100),
('24042', 'Biras', '31T', 314604, 5017670, 45.2881, 0.635834, 168),
('24043', 'Biron', '31T', 331071, 4944179, 44.6311, 0.870275, 200),
('24044', 'Blis-et-Born', '31T', 335665, 5005198, 45.1811, 0.908333, 210),
('24045', 'Boisse', '31T', 314067, 4954034, 44.7156, 0.652495, 160),
('24046', 'Boisseuilh', '31T', 357210, 5016501, 45.2875, 1.17916, 244),
('24047', 'La Boissière-d''Ans', '31T', 341016, 5010465, 45.2297, 0.974716, 121),
('24048', 'Bonneville-et-Saint-Avit-de-Fumadières', '31T', 270175, 4973307, 44.8761, 0.090276, 80),
('24050', 'Borrèze', '31T', 372965, 4979275, 44.9556, 1.38944, 151),
('24051', 'Bosset', '31T', 291311, 4980894, 44.9508, 0.354441, 129),
('24052', 'Bouillac', '31T', 335360, 4958426, 44.7603, 0.919726, 160),
('24053', 'Boulazac', '31T', 325002, 5004217, 45.1697, 0.773057, 100),
('24054', 'Bouniagues', '31T', 304157, 4959083, 44.7583, 0.525553, 140),
('24055', 'Bourdeilles', '31T', 310832, 5021302, 45.3197, 0.586389, 113),
('24056', 'Le Bourdeix', '31T', 315176, 5051134, 45.5892, 0.630551, 230),
('24057', 'Bourg-des-Maisons', '31T', 299135, 5023517, 45.3364, 0.436393, 160);
INSERT INTO `ods_communes` (`oc_code_insee`, `oc_nom`, `oc_secteur`, `oc_x_utm`, `oc_y_utm`, `oc_latitude`, `oc_longitude`, `oc_altitude`) VALUES
('24058', 'Bourg-du-Bost', '31T', 284742, 5016763, 45.2714, 0.255836, 81),
('24059', 'Bourgnac', '31T', 295303, 4988394, 45.0194, 0.401948, 69),
('24060', 'Bourniquel', '31T', 323722, 4964076, 44.8083, 0.770828, 161),
('24061', 'Bourrou', '31T', 310708, 4990791, 45.0453, 0.596389, 200),
('24062', 'Bouteilles-Saint-Sébastien', '31T', 288808, 5024843, 45.3453, 0.304168, 100),
('24063', 'Bouzic', '31T', 358932, 4954069, 44.7261, 1.21861, 113),
('24064', 'Brantôme', '31T', 315994, 5026462, 45.3675, 0.650275, 110),
('24065', 'Breuilh', '31T', 323172, 4991822, 45.0578, 0.754167, 210),
('24066', 'Brouchaud', '31T', 342809, 5007981, 45.2078, 0.998327, 150),
('24067', 'Le Bugue', '31T', 336538, 4976181, 44.9203, 0.928884, 60),
('24068', 'Le Buisson-de-Cadouin', '31T', 334775, 4968198, 44.8481, 0.909165, 64),
('24069', 'Bussac', '31T', 312198, 5015949, 45.2719, 0.60583, 140),
('24070', 'Busserolles', '31T', 316417, 5060857, 45.6769, 0.642782, 160),
('24071', 'Bussière-Badil', '31T', 313306, 5058201, 45.6522, 0.603892, 189),
('24073', 'Calès', '31T', 327203, 4969262, 44.8558, 0.813051, 90),
('24074', 'Calviac-en-Périgord', '31T', 368268, 4968287, 44.8558, 1.33278, 100),
('24075', 'Campagnac-lès-Quercy', '31T', 355243, 4950508, 44.6933, 1.17306, 240),
('24076', 'Campagne', '31T', 339482, 4974593, 44.9067, 0.966666, 60),
('24077', 'Campsegret', '31T', 307471, 4978564, 44.9344, 0.559996, 80),
('24079', 'Cantillac', '31T', 315566, 5029687, 45.3964, 0.643609, 220),
('24080', 'Capdrot', '31T', 335288, 4949597, 44.6808, 0.921664, 214),
('24081', 'Carlux', '31T', 369976, 4971309, 44.8833, 1.35361, 180),
('24082', 'Carsac-Aillac', '31T', 363296, 4966817, 44.8417, 1.27027, 199),
('24083', 'Carsac-de-Gurson', '31T', 270591, 4981233, 44.9475, 0.0919417, 95),
('24084', 'Carves', '31T', 346948, 4961011, 44.7861, 1.06528, 240),
('24085', 'La Cassagne', '31T', 367588, 4989479, 45.0464, 1.31861, 270),
('24086', 'Castelnaud-la-Chapelle', '31T', 353482, 4964101, 44.8153, 1.14694, 140),
('24087', 'Castels', '31T', 346326, 4970875, 44.8747, 1.05444, 140),
('24088', 'Cause-de-Clérans', '31T', 316328, 4970707, 44.8661, 0.675002, 70),
('24089', 'Cazoulès', '31T', 376227, 4971123, 44.8828, 1.43278, 100),
('24090', 'Celles', '31T', 297167, 5019225, 45.2972, 0.413059, 100),
('24091', 'Cénac-et-Saint-Julien', '31T', 357951, 4962488, 44.8017, 1.20389, 80),
('24092', 'Cendrieux', '31T', 328323, 4984764, 44.9956, 0.82195, 232),
('24093', 'Cercles', '31T', 301192, 5026572, 45.3644, 0.461391, 150),
('24094', 'Chalagnac', '31T', 317288, 4995787, 45.0919, 0.678052, 210),
('24095', 'Chaleix', '31T', 338300, 5041414, 45.5075, 0.930005, 280),
('24096', 'Champagnac-de-Belair', '31T', 319924, 5029128, 45.3925, 0.699447, 136),
('24097', 'Champagne-et-Fontaine', '31T', 290133, 5033233, 45.4211, 0.317495, 99),
('24098', 'Champcevinel', '31T', 321411, 5009351, 45.215, 0.725556, 200),
('24099', 'Champeaux-et-la-Chapelle-Pommier', '31T', 310866, 5038382, 45.4733, 0.580272, 150),
('24100', 'Champniers-et-Reilhac', '31T', 323262, 5060227, 45.6731, 0.730831, 290),
('24101', 'Champs-Romain', '31T', 326415, 5044326, 45.5308, 0.77694, 300),
('24102', 'Chancelade', '31T', 316669, 5008406, 45.2053, 0.665561, 100),
('24103', 'Le Change', '31T', 334699, 5006675, 45.1942, 0.895556, 106),
('24104', 'Chantérac', '31T', 299345, 5005409, 45.1736, 0.446384, 140),
('24105', 'Chapdeuil', '31T', 302285, 5023943, 45.3411, 0.476386, 124),
('24106', 'La Chapelle-Aubareil', '31T', 356760, 4985854, 45.0117, 1.18222, 260),
('24107', 'La Chapelle-Faucher', '31T', 324121, 5026693, 45.3717, 0.753891, 150),
('24108', 'La Chapelle-Gonaguet', '31T', 312674, 5011395, 45.2311, 0.61361, 200),
('24109', 'La Chapelle-Grésignac', '31T', 291640, 5030124, 45.3936, 0.33805, 110),
('24110', 'La Chapelle-Montabourlet', '31T', 301396, 5029593, 45.3917, 0.462778, 196),
('24111', 'La Chapelle-Montmoreau', '31T', 315687, 5035305, 45.4469, 0.643051, 179),
('24113', 'La Chapelle-Saint-Jean', '31T', 355716, 5006377, 45.1961, 1.16306, 293),
('24114', 'Chassaignes', '31T', 284432, 5014703, 45.2528, 0.252782, 90),
('24115', 'Château-l''Évêque', '31T', 318393, 5012958, 45.2467, 0.685834, 107),
('24116', 'Châtres', '31T', 359011, 5005346, 45.1875, 1.20528, 306),
('24117', 'Chavagnac', '31T', 372016, 4994204, 45.0897, 1.37361, 320),
('24118', 'Chenaud', '31T', 272436, 5011261, 45.2181, 0.10167, 40),
('24119', 'Cherval', '31T', 294557, 5030121, 45.3944, 0.375279, 120),
('24120', 'Cherveix-Cubas', '31T', 352356, 5016768, 45.2889, 1.11722, 160),
('24121', 'Chourgnac', '31T', 347687, 5011135, 45.2372, 1.05944, 200),
('24122', 'Cladech', '31T', 347465, 4964272, 44.8156, 1.07083, 251),
('24123', 'Clermont-de-Beauregard', '31T', 313931, 4980412, 44.9528, 0.641115, 120),
('24124', 'Clermont-d''Excideuil', '31T', 347418, 5025252, 45.3642, 1.05167, 280),
('24126', 'Colombier', '31T', 304367, 4960899, 44.7747, 0.527506, 156),
('24127', 'Coly', '31T', 363807, 4993819, 45.0847, 1.26945, 120),
('24128', 'Comberanche-et-Épeluche', '31T', 286613, 5017255, 45.2764, 0.279449, 70),
('24129', 'Condat-sur-Trincou', '31T', 320655, 5028057, 45.3831, 0.709167, 120),
('24130', 'Condat-sur-Vézère', '31T', 360866, 4997340, 45.1158, 1.23111, 87),
('24131', 'Connezac', '31T', 306524, 5042036, 45.505, 0.523332, 170),
('24132', 'Conne-de-Labarde', '31T', 306517, 4961452, 44.7803, 0.554444, 90),
('24133', 'La Coquille', '31T', 342107, 5045177, 45.5422, 0.977497, 340),
('24134', 'Corgnac-sur-l''Isle', '31T', 339362, 5026904, 45.3772, 0.94833, 138),
('24135', 'Cornille', '31T', 326143, 5013173, 45.2506, 0.784439, 196),
('24136', 'Coubjours', '31T', 363255, 5011829, 45.2467, 1.2575, 280),
('24137', 'Coulaures', '31T', 341969, 5018902, 45.3058, 0.984163, 120),
('24138', 'Coulounieix-Chamiers', '31T', 318391, 5006812, 45.1914, 0.688051, 210),
('24139', 'Coursac', '31T', 314500, 4999945, 45.1286, 0.641111, 150),
('24140', 'Cours-de-Pile', '31T', 306082, 4968167, 44.8406, 0.54639, 44),
('24141', 'Coutures', '31T', 295763, 5023008, 45.3308, 0.393611, 130),
('24142', 'Coux-et-Bigaroque', '31T', 339562, 4966379, 44.8328, 0.970278, 80),
('24143', 'Couze-et-Saint-Front', '31T', 318554, 4966320, 44.8272, 0.704725, 50),
('24144', 'Creyssac', '31T', 308222, 5020022, 45.3075, 0.553614, 90),
('24145', 'Creysse', '31T', 307887, 4969750, 44.8553, 0.568609, 35),
('24146', 'Creyssensac-et-Pissot', '31T', 315921, 4994653, 45.0814, 0.661111, 208),
('24147', 'Cubjac', '31T', 338186, 5009858, 45.2236, 0.938886, 130),
('24148', 'Cunèges', '31T', 292157, 4961622, 44.7778, 0.373053, 110),
('24150', 'Daglan', '31T', 356770, 4955815, 44.7414, 1.19084, 100),
('24151', 'Doissat', '31T', 347132, 4954894, 44.7311, 1.06944, 261),
('24152', 'Domme', '31T', 358693, 4962224, 44.7994, 1.21334, 160),
('24153', 'La Dornac', '31T', 370882, 4993301, 45.0814, 1.35944, 347),
('24154', 'Douchapt', '31T', 299371, 5013100, 45.2428, 0.443616, 110),
('24155', 'Douville', '31T', 309846, 4985381, 44.9964, 0.587499, 145),
('24156', 'La Douze', '31T', 331821, 4991959, 45.0611, 0.863891, 200),
('24157', 'Douzillac', '31T', 296476, 4995616, 45.0847, 0.413894, 100),
('24158', 'Dussac', '31T', 350002, 5028680, 45.3956, 1.08361, 300),
('24159', 'Échourgnac', '31T', 282119, 5000725, 45.1264, 0.229448, 101),
('24160', 'Église-Neuve-de-Vergt', '31T', 321482, 4994773, 45.0839, 0.731669, 230),
('24161', 'Église-Neuve-d''Issac', '31T', 297338, 4984190, 44.9822, 0.429443, 120),
('24162', 'Escoire', '31T', 331302, 5008648, 45.2111, 0.851671, 120),
('24163', 'Étouars', '31T', 314980, 5052560, 45.6019, 0.6275, 270),
('24164', 'Excideuil', '31T', 347214, 5022231, 45.3369, 1.05, 170),
('24165', 'Eygurande-et-Gardedeuil', '31T', 273494, 4994384, 45.0667, 0.122777, 70),
('24166', 'Eyliac', '31T', 331478, 5002961, 45.16, 0.855833, 144),
('24167', 'Eymet', '31T', 293609, 4949251, 44.6669, 0.396384, 50),
('24168', 'Plaisance', '31T', 307264, 4952597, 44.7008, 0.567222, 100),
('24170', 'Eyvirat', '31T', 323752, 5021268, 45.3228, 0.751116, 190),
('24171', 'Eyzerac', '31T', 337286, 5028254, 45.3889, 0.921388, 170),
('24172', 'Les Eyzies-de-Tayac-Sireuil', '31T', 343312, 4977772, 44.9361, 1.01417, 69),
('24174', 'Fanlac', '31T', 350073, 4992059, 45.0661, 1.09555, 220),
('24175', 'Les Farges', '31T', 357608, 4997320, 45.115, 1.18972, 240),
('24176', 'Faurilles', '31T', 317243, 4952646, 44.7039, 0.693058, 120),
('24177', 'FAUX', '31T', 313624, 4962292, 44.7897, 0.643889, 154),
('24178', 'Festalemps', '31T', 283526, 5011830, 45.2267, 0.2425, 130),
('24179', 'La Feuillade', '31T', 374472, 4996779, 45.1133, 1.40416, 140),
('24180', 'Firbeix', '31T', 342188, 5051814, 45.6019, 0.97639, 360),
('24181', 'Flaugeac', '31T', 297497, 4957931, 44.7461, 0.441944, 137),
('24182', 'Le Fleix', '31T', 282391, 4972726, 44.8747, 0.245004, 20),
('24183', 'Fleurac', '31T', 342607, 4985662, 45.0069, 1.00277, 256),
('24184', 'Florimont-Gaumier', '31T', 360518, 4951102, 44.6997, 1.23944, 265),
('24186', 'Fonroque', '31T', 295430, 4953146, 44.7025, 0.417776, 105),
('24188', 'Fossemagne', '31T', 341561, 4999058, 45.1272, 0.985278, 210),
('24189', 'Fougueyrolles', '31T', 277728, 4971929, 44.8661, 0.186389, 106),
('24190', 'Fouleix', '31T', 317187, 4983869, 44.9847, 0.681106, 190),
('24191', 'Fraisse', '31T', 287574, 4978669, 44.9297, 0.308054, 102),
('24192', 'Gabillou', '31T', 345684, 5007695, 45.2058, 1.035, 170),
('24193', 'Gageac-et-Rouillac', '31T', 290080, 4964037, 44.7989, 0.345834, 110),
('24194', 'Gardonne', '31T', 289164, 4968299, 44.8369, 0.332497, 30),
('24195', 'Gaugeac', '31T', 331262, 4948126, 44.6667, 0.871383, 150),
('24196', 'Génis', '31T', 356196, 5020755, 45.3256, 1.16501, 260),
('24197', 'Ginestet', '31T', 297042, 4976231, 44.9106, 0.428892, 120),
('24198', 'La Gonterie-Boulouneix', '31T', 311278, 5028918, 45.3883, 0.589166, 190),
('24199', 'Gout-Rossignol', '31T', 295365, 5032226, 45.4136, 0.384717, 120),
('24200', 'Grand-Brassac', '31T', 302253, 5018724, 45.2942, 0.478062, 150),
('24202', 'Granges-d''Ans', '31T', 352245, 5008248, 45.2122, 1.11834, 244),
('24203', 'Les Graulges', '31T', 300042, 5041065, 45.4944, 0.440835, 140),
('24204', 'Grèzes', '31T', 371567, 4995788, 45.1039, 1.3675, 300),
('24205', 'Grignols', '31T', 306374, 4995152, 45.0833, 0.539724, 90),
('24206', 'Grives', '31T', 347947, 4958641, 44.765, 1.07861, 148),
('24207', 'Groléjac', '31T', 365193, 4964030, 44.8169, 1.29501, 80),
('24208', 'Grun-Bordas', '31T', 313672, 4991815, 45.0553, 0.633614, 150),
('24209', 'Hautefaye', '31T', 304292, 5045688, 45.5372, 0.493329, 190),
('24210', 'Hautefort', '31T', 354961, 5013465, 45.2597, 1.15139, 231),
('24211', 'Issac', '31T', 299206, 4987807, 45.0153, 0.451671, 70),
('24212', 'Issigeac', '31T', 310416, 4955684, 44.7294, 0.605827, 110),
('24213', 'Jaure', '31T', 307288, 4992098, 45.0561, 0.5525, 141),
('24214', 'Javerlhac-et-la-Chapelle-Saint-Robert', '31T', 309712, 5049012, 45.5686, 0.561392, 128),
('24215', 'Jayac', '31T', 369567, 4987802, 45.0317, 1.34417, 280),
('24216', 'La Jemaye', '31T', 284444, 5005435, 45.1694, 0.256947, 100),
('24217', 'Journiac', '31T', 333162, 4981301, 44.9656, 0.884446, 126),
('24218', 'Jumilhac-le-Grand', '31T', 348704, 5039796, 45.4953, 1.06361, 280),
('24219', 'Labouquerie', '31T', 325606, 4956521, 44.7408, 0.797221, 170),
('24220', 'Lacropte', '31T', 329188, 4989280, 45.0364, 0.831383, 200),
('24221', 'Rudeau-Ladosse', '31T', 308478, 5039165, 45.4797, 0.549443, 170),
('24222', 'La Force', '31T', 292545, 4971587, 44.8675, 0.373884, 60),
('24223', 'Lalinde', '31T', 321260, 4967232, 44.8361, 0.738608, 40),
('24224', 'Lamonzie-Montastruc', '31T', 310081, 4974101, 44.895, 0.594721, 70),
('24225', 'Lamonzie-Saint-Martin', '31T', 293243, 4968692, 44.8417, 0.383891, 30),
('24226', 'Lamothe-Montravel', '31T', 264858, 4970905, 44.8528, 0.024163, 21),
('24227', 'Lanouaille', '31T', 354383, 5028082, 45.3911, 1.13972, 291),
('24228', 'Lanquais', '31T', 315713, 4966123, 44.8247, 0.668888, 60),
('24229', 'Le Lardin-Saint-Lazare', '31T', 360528, 4998891, 45.1297, 1.22639, 88),
('24230', 'Larzac', '31T', 342247, 4956710, 44.7464, 1.00722, 140),
('24231', 'Lavalade', '31T', 330796, 4951350, 44.6956, 0.864443, 200),
('24232', 'Lavaur', '31T', 343228, 4941835, 44.6128, 1.02416, 240),
('24233', 'Laveyssière', '31T', 298093, 4979626, 44.9414, 0.440836, 69),
('24234', 'Les Lèches', '31T', 293795, 4985138, 44.9897, 0.384162, 90),
('24235', 'Léguillac-de-Cercles', '31T', 305399, 5029530, 45.3922, 0.513894, 180),
('24236', 'Léguillac-de-l''Auche', '31T', 308027, 5006407, 45.185, 0.556387, 130),
('24237', 'Lembras', '31T', 304450, 4973004, 44.8836, 0.523895, 50),
('24238', 'Lempzours', '31T', 329093, 5025445, 45.3617, 0.817772, 160),
('24239', 'Ligueux', '31T', 328999, 5019549, 45.3086, 0.818611, 160),
('24240', 'Limeuil', '31T', 333394, 4972526, 44.8867, 0.890278, 100),
('24241', 'Limeyrat', '31T', 341215, 5002710, 45.16, 0.979721, 238),
('24242', 'Liorac-sur-Louyre', '31T', 314124, 4974229, 44.8972, 0.645834, 120),
('24243', 'Lisle', '31T', 307666, 5016796, 45.2783, 0.547779, 90),
('24244', 'Lolme', '31T', 329216, 4953213, 44.7119, 0.843893, 170),
('24245', 'Loubejac', '31T', 348246, 4939524, 44.5931, 1.08805, 260),
('24246', 'Lunas', '31T', 294940, 4977101, 44.9178, 0.401938, 147),
('24247', 'Lusignac', '31T', 289419, 5022907, 45.3281, 0.312782, 130),
('24248', 'Lussas-et-Nontronneau', '31T', 311345, 5042012, 45.5061, 0.584999, 180),
('24249', 'Manaurie', '31T', 341622, 4980376, 44.9592, 0.991944, 78),
('24251', 'Manzac-sur-Vern', '31T', 310070, 4995813, 45.0903, 0.586394, 100),
('24252', 'Marcillac-Saint-Quentin', '31T', 357775, 4980274, 44.9617, 1.19667, 231),
('24253', 'Mareuil', '31T', 300861, 5036066, 45.4497, 0.453333, 120),
('24254', 'Marnac', '31T', 343984, 4966640, 44.8361, 1.02611, 140),
('24255', 'Marquay', '31T', 352844, 4978410, 44.9439, 1.13472, 225),
('24256', 'Marsac-sur-l''Isle', '31T', 316406, 5006128, 45.1847, 0.663055, 80),
('24257', 'Marsalès', '31T', 332364, 4951494, 44.6972, 0.884172, 180),
('24258', 'Marsaneix', '31T', 325705, 4996385, 45.0994, 0.784727, 210),
('24259', 'Maurens', '31T', 301552, 4978714, 44.9342, 0.484995, 120),
('24260', 'Mauzac-et-Grand-Castang', '31T', 325848, 4970318, 44.865, 0.795552, 50),
('24261', 'Mauzens-et-Miremont', '31T', 335760, 4984322, 44.9933, 0.916383, 210),
('24262', 'Mayac', '31T', 338717, 5016143, 45.2803, 0.943605, 120),
('24263', 'Mazeyrolles', '31T', 342546, 4948212, 44.67, 1.01361, 220),
('24264', 'Ménesplet', '31T', 272166, 4989086, 45.0186, 0.108331, 29),
('24266', 'Mensignac', '31T', 308488, 5010810, 45.2247, 0.560557, 190),
('24267', 'Mescoules', '31T', 296577, 4958083, 44.7472, 0.430274, 130),
('24268', 'Meyrals', '31T', 347182, 4973602, 44.8994, 1.06445, 160),
('24269', 'Mialet', '31T', 336404, 5046157, 45.5497, 0.904166, 320),
('24270', 'Milhac-d''Auberoche', '31T', 336029, 4997284, 45.11, 0.91556, 210),
('24271', 'Milhac-de-Nontron', '31T', 326613, 5037341, 45.4681, 0.781943, 190),
('24272', 'Minzac', '31T', 266706, 4984185, 44.9728, 0.0413946, 57),
('24273', 'Molières', '31T', 327702, 4964092, 44.8094, 0.821116, 160),
('24274', 'Monbazillac', '31T', 301661, 4963051, 44.7933, 0.492501, 160),
('24276', 'Monestier', '31T', 288556, 4961152, 44.7725, 0.327784, 100),
('24277', 'Monfaucon', '31T', 281959, 4976819, 44.9114, 0.237778, 108),
('24278', 'Monmadalès', '31T', 311638, 4959818, 44.7669, 0.619719, 137),
('24279', 'Monmarvès', '31T', 311031, 4953350, 44.7086, 0.61445, 150),
('24280', 'Monpazier', '31T', 332937, 4949843, 44.6825, 0.891938, 200),
('24281', 'Monsac', '31T', 317608, 4960881, 44.7781, 0.694718, 100),
('24282', 'Monsaguel', '31T', 308463, 4956607, 44.7372, 0.580839, 111),
('24283', 'Monsec', '31T', 307066, 5032814, 45.4222, 0.533885, 160),
('24284', 'Montagnac-d''Auberoche', '31T', 339500, 5005718, 45.1867, 0.956946, 220),
('24285', 'Montagnac-la-Crempse', '31T', 306558, 4983904, 44.9822, 0.546389, 140),
('24286', 'Montagrier', '31T', 302013, 5015951, 45.2692, 0.476111, 140),
('24287', 'Montaut', '31T', 312276, 4957544, 44.7467, 0.628612, 152),
('24288', 'Montazeau', '31T', 273485, 4974951, 44.8919, 0.131395, 100),
('24289', 'Montcaret', '31T', 268003, 4971563, 44.8597, 0.0636111, 34),
('24290', 'Montferrand-du-Périgord', '31T', 331089, 4957487, 44.7508, 0.866109, 120),
('24291', 'Montignac', '31T', 355190, 4991910, 45.0658, 1.16056, 79),
('24292', 'Montpeyroux', '31T', 267714, 4978123, 44.9186, 0.0569494, 93),
('24293', 'Monplaisant', '31T', 341460, 4961391, 44.7883, 0.995831, 163),
('24294', 'Montpon-Ménestérol', '31T', 276289, 4987921, 45.0094, 0.161114, 43),
('24295', 'Montrem', '31T', 310543, 5000679, 45.1342, 0.590558, 154),
('24296', 'Mouleydier', '31T', 310125, 4969652, 44.855, 0.596944, 37),
('24297', 'Moulin-Neuf', '31T', 267590, 4988603, 45.0128, 0.0505522, 25),
('24298', 'Mouzens', '31T', 342762, 4967843, 44.8467, 1.01028, 100),
('24299', 'Mussidan', '31T', 292276, 4990315, 45.0358, 0.362776, 50),
('24300', 'Nabirat', '31T', 365198, 4956929, 44.7531, 1.29695, 161),
('24301', 'Nadaillac', '31T', 373828, 4988519, 45.0389, 1.39806, 260),
('24302', 'Nailhac', '31T', 355049, 5009666, 45.2256, 1.15362, 220),
('24303', 'Nanteuil-Auriac-de-Bourzac', '31T', 287976, 5029258, 45.3847, 0.291664, 90),
('24304', 'Nantheuil', '31T', 339116, 5030894, 45.4131, 0.943889, 210),
('24305', 'Nanthiat', '31T', 342335, 5030040, 45.4061, 0.985275, 240),
('24306', 'Nastringues', '31T', 274958, 4973138, 44.8761, 0.150831, 84),
('24307', 'Naussannes', '31T', 319889, 4958285, 44.7553, 0.724443, 140),
('24308', 'Négrondes', '31T', 332806, 5023430, 45.3444, 0.86583, 170),
('24309', 'Neuvic', '31T', 300880, 4997206, 45.1003, 0.469167, 70),
('24310', 'Nojals-et-Clotte', '31T', 322456, 4954816, 44.7247, 0.758056, 156),
('24311', 'Nontron', '31T', 317545, 5044609, 45.5311, 0.663331, 200),
('24312', 'Notre-Dame-de-Sanilhac', '31T', 320244, 4998976, 45.1214, 0.714443, 140),
('24313', 'Orliac', '31T', 347048, 4953198, 44.7158, 1.06889, 220),
('24314', 'Orliaguet', '31T', 370876, 4974594, 44.9131, 1.36416, 135),
('24316', 'Parcoul', '31T', 267211, 5009937, 45.2044, 0.0358302, 60),
('24317', 'Paulin', '31T', 369741, 4984526, 45.0022, 1.34722, 280),
('24318', 'Paunat', '31T', 330968, 4974596, 44.9047, 0.858888, 120),
('24319', 'Paussac-et-Saint-Vivien', '31T', 307222, 5024408, 45.3467, 0.539161, 140),
('24320', 'Payzac', '31T', 360736, 5029081, 45.4014, 1.22056, 320),
('24321', 'Pazayac', '31T', 372525, 4997775, 45.1219, 1.37917, 119),
('24322', 'Périgueux', '31T', 320968, 5006028, 45.185, 0.721113, 90),
('24323', 'Petit-Bersac', '31T', 282911, 5018710, 45.2883, 0.231669, 50),
('24324', 'Peyrignac', '31T', 357949, 5001820, 45.1556, 1.19277, 200),
('24325', 'Peyrillac-et-Millac', '31T', 374202, 4971903, 44.8894, 1.40695, 89),
('24326', 'Peyzac-le-Moustier', '31T', 348539, 4983636, 44.99, 1.07861, 114),
('24327', 'Pezuls', '31T', 326964, 4975846, 44.915, 0.807779, 120),
('24328', 'Piégut-Pluviers', '31T', 320007, 5054730, 45.6228, 0.691106, 280),
('24329', 'Le Pizou', '31T', 268492, 4989898, 45.0247, 0.0613881, 30),
('24330', 'Plazac', '31T', 345814, 4988733, 45.0353, 1.0425, 130),
('24331', 'Pomport', '31T', 295767, 4961692, 44.7794, 0.418606, 127),
('24333', 'Ponteyraud', '31T', 283444, 5008156, 45.1936, 0.243055, 56),
('24334', 'Pontours', '31T', 323142, 4966964, 44.8342, 0.762494, 40),
('24335', 'Port-Sainte-Foy-et-Ponchapt', '31T', 279352, 4969309, 44.8431, 0.208061, 23),
('24336', 'Prats-de-Carlux', '31T', 366932, 4973718, 44.9044, 1.31445, 160),
('24337', 'Prats-du-Périgord', '31T', 346545, 4950555, 44.6919, 1.06333, 220),
('24338', 'Pressignac-Vicq', '31T', 320056, 4973659, 44.8936, 0.721106, 139),
('24339', 'Preyssac-d''Excideuil', '31T', 351524, 5022159, 45.3372, 1.105, 260),
('24340', 'Prigonrieux', '31T', 294660, 4970406, 44.8575, 0.401108, 25),
('24341', 'Proissans', '31T', 362132, 4976999, 44.9331, 1.25278, 190),
('24343', 'Puymangou', '31T', 270324, 5008433, 45.1919, 0.0761099, 125),
('24344', 'Puyrenier', '31T', 302650, 5039036, 45.4769, 0.474996, 170),
('24345', 'Queyssac', '31T', 306587, 4975441, 44.9061, 0.549998, 80),
('24346', 'Quinsac', '31T', 320516, 5033095, 45.4283, 0.705559, 120),
('24347', 'Rampieux', '31T', 325324, 4953410, 44.7128, 0.794726, 221),
('24348', 'Razac-d''Eymet', '31T', 298542, 4951937, 44.6925, 0.457495, 110),
('24349', 'Razac-de-Saussignac', '31T', 285265, 4964752, 44.8039, 0.28472, 95),
('24350', 'Razac-sur-l''Isle', '31T', 311474, 5004049, 45.1647, 0.601116, 80),
('24351', 'Ribagnac', '31T', 301874, 4959956, 44.7656, 0.496395, 139),
('24352', 'Ribérac', '31T', 291147, 5013891, 45.2475, 0.338606, 80),
('24353', 'La Rochebeaucourt-et-Argentine', '31T', 295231, 5040108, 45.4844, 0.379724, 100),
('24354', 'La Roche-Chalais', '31T', 264855, 5004122, 45.1514, 0.00861214, 66),
('24355', 'La Roque-Gageac', '31T', 356567, 4965451, 44.8281, 1.18556, 80),
('24356', 'Rouffignac-Saint-Cernin-de-Reilhac', '31T', 340748, 4990155, 45.0469, 0.977776, 280),
('24357', 'Rouffignac-de-Sigoulès', '31T', 298195, 4961924, 44.7822, 0.449172, 140),
('24359', 'Sadillac', '31T', 300844, 4956560, 44.7347, 0.484718, 130),
('24360', 'Sagelat', '31T', 343250, 4960853, 44.7839, 1.01861, 100),
('24361', 'Saint-Agne', '31T', 312984, 4967499, 44.8364, 0.63389, 50),
('24362', 'Sainte-Alvère', '31T', 327123, 4979300, 44.9461, 0.80861, 170),
('24363', 'Saint-Amand-de-Belvès', '31T', 345109, 4958616, 44.7642, 1.04278, 160),
('24364', 'Saint-Amand-de-Coly', '31T', 362046, 4991264, 45.0614, 1.24778, 180),
('24365', 'Saint-Amand-de-Vergt', '31T', 318489, 4984172, 44.9878, 0.697499, 200),
('24366', 'Saint-André-d''Allas', '31T', 355195, 4971842, 44.8853, 1.16639, 200),
('24367', 'Saint-André-de-Double', '31T', 289291, 5002677, 45.1461, 0.319722, 111),
('24368', 'Saint-Antoine-Cumond', '31T', 280215, 5015188, 45.2558, 0.19889, 60),
('24369', 'Saint-Antoine-d''Auberoche', '31T', 338200, 5000995, 45.1439, 0.94194, 190),
('24370', 'Saint-Antoine-de-Breuilh', '31T', 274991, 4969676, 44.845, 0.152784, 19),
('24371', 'Saint-Aquilin', '31T', 303075, 5006620, 45.1856, 0.493329, 150),
('24372', 'Saint-Astier', '31T', 305643, 5002032, 45.145, 0.527773, 78),
('24373', 'Saint-Aubin-de-Cadelech', '31T', 300345, 4951819, 44.6919, 0.480274, 150),
('24374', 'Saint-Aubin-de-Lanquais', '31T', 309878, 4962773, 44.7931, 0.596395, 115),
('24375', 'Saint-Aubin-de-Nabirat', '31T', 363559, 4955358, 44.7386, 1.27667, 195),
('24376', 'Saint-Aulaye', '31T', 274901, 5009350, 45.2017, 0.133889, 61),
('24377', 'Saint-Avit-de-Vialard', '31T', 331888, 4978710, 44.9419, 0.869165, 180),
('24378', 'Saint-Avit-Rivière', '31T', 332368, 4957577, 44.7519, 0.882226, 120),
('24379', 'Saint-Avit-Sénieur', '31T', 327156, 4960154, 44.7739, 0.815553, 171),
('24380', 'Saint-Barthélemy-de-Bellegarde', '31T', 280290, 4995258, 45.0767, 0.208617, 120),
('24381', 'Saint-Barthélemy-de-Bussière', '31T', 325047, 5056687, 45.6417, 0.755004, 310),
('24382', 'Saint-Capraise-de-Lalinde', '31T', 314671, 4968098, 44.8422, 0.654997, 50),
('24383', 'Saint-Capraise-d''Eymet', '31T', 302337, 4953549, 44.7081, 0.504721, 130),
('24384', 'Saint-Cassien', '31T', 329142, 4950436, 44.6869, 0.843887, 170),
('24385', 'Saint-Cernin-de-Labarde', '31T', 307825, 4959591, 44.7639, 0.571664, 100),
('24386', 'Saint-Cernin-de-l''Herm', '31T', 343940, 4944813, 44.6397, 1.03223, 160),
('24388', 'Saint-Chamassy', '31T', 336249, 4970847, 44.8722, 0.92695, 175),
('24389', 'Saint-Cirq', '31T', 339534, 4976661, 44.9253, 0.966668, 80),
('24390', 'Saint-Crépin-d''Auberoche', '31T', 334123, 4998846, 45.1236, 0.890829, 150),
('24391', 'Saint-Crépin-de-Richemont', '31T', 312290, 5032193, 45.4181, 0.600836, 147),
('24392', 'Saint-Crépin-et-Carlucet', '31T', 364143, 4979796, 44.9586, 1.2775, 261),
('24393', 'Sainte-Croix', '31T', 328257, 4956079, 44.7375, 0.830831, 164),
('24394', 'Sainte-Croix-de-Mareuil', '31T', 298914, 5037734, 45.4642, 0.427777, 110),
('24395', 'Saint-Cybranet', '31T', 355148, 4961006, 44.7878, 1.16888, 80),
('24396', 'Saint-Cyprien', '31T', 345280, 4970252, 44.8689, 1.04139, 64),
('24397', 'Saint-Cyr-les-Champagnes', '31T', 366072, 5026403, 45.3783, 1.28944, 340),
('24398', 'Saint-Estèphe', '31T', 317720, 5051337, 45.5917, 0.663062, 222),
('24399', 'Saint-Étienne-de-Puycorbier', '31T', 289664, 4996764, 45.0931, 0.326947, 120),
('24401', 'Sainte-Eulalie-d''Ans', '31T', 344508, 5012262, 45.2467, 1.01861, 130),
('24402', 'Sainte-Eulalie-d''Eymet', '31T', 291327, 4952969, 44.6997, 0.366112, 80),
('24403', 'Saint-Félix-de-Bourdeilles', '31T', 309695, 5031993, 45.4156, 0.567776, 190),
('24404', 'Saint-Félix-de-Reillac-et-Mortemart', '31T', 335884, 4987437, 45.0214, 0.916939, 172),
('24405', 'Saint-Félix-de-Villadeix', '31T', 317105, 4977170, 44.9244, 0.682494, 125),
('24406', 'Sainte-Foy-de-Belvès', '31T', 344701, 4955353, 44.7347, 1.03862, 200),
('24407', 'Sainte-Foy-de-Longas', '31T', 322563, 4976986, 44.9242, 0.751664, 126),
('24408', 'Saint-Front-d''Alemps', '31T', 325952, 5021269, 45.3233, 0.779166, 150),
('24409', 'Saint-Front-de-Pradoux', '31T', 292347, 4992475, 45.0553, 0.362783, 50),
('24410', 'Saint-Front-la-Rivière', '31T', 322370, 5037922, 45.4722, 0.727497, 130),
('24411', 'Saint-Front-sur-Nizonne', '31T', 315421, 5038833, 45.4786, 0.638327, 178),
('24412', 'Saint-Geniès', '31T', 362081, 4983792, 44.9942, 1.25028, 222),
('24413', 'Saint-Georges-Blancaneix', '31T', 290787, 4977606, 44.9211, 0.349167, 100),
('24414', 'Saint-Georges-de-Montclard', '31T', 311673, 4979705, 44.9458, 0.612778, 100),
('24415', 'Saint-Géraud-de-Corps', '31T', 281257, 4981323, 44.9517, 0.226946, 96),
('24416', 'Saint-Germain-de-Belvès', '31T', 345855, 4963137, 44.805, 1.05083, 220),
('24417', 'Saint-Germain-des-Prés', '31T', 342803, 5022617, 45.3394, 0.993615, 160),
('24418', 'Saint-Germain-du-Salembre', '31T', 299503, 5001420, 45.1378, 0.449994, 90),
('24419', 'Saint-Germain-et-Mons', '31T', 309916, 4968547, 44.845, 0.594716, 45),
('24420', 'Saint-Géry', '31T', 289091, 4984735, 44.9847, 0.324722, 120),
('24421', 'Saint-Geyrac', '31T', 335966, 4994846, 45.0881, 0.915558, 176),
('24422', 'Saint-Hilaire-d''Estissac', '31T', 303663, 4987421, 45.0131, 0.508332, 120),
('24423', 'Sainte-Innocence', '31T', 294733, 4955455, 44.7231, 0.40806, 130),
('24424', 'Saint-Jean-d''Ataux', '31T', 296377, 5002106, 45.1431, 0.409997, 120),
('24425', 'Saint-Jean-de-Côle', '31T', 330814, 5031945, 45.4206, 0.837501, 149),
('24426', 'Saint-Jean-d''Estissac', '31T', 304136, 4989260, 45.0297, 0.513613, 131),
('24427', 'Saint-Jean-d''Eyraud', '31T', 299169, 4981075, 44.9547, 0.453885, 90),
('24428', 'Saint-Jory-de-Chalais', '31T', 335842, 5040428, 45.4981, 0.898891, 250),
('24429', 'Saint-Jory-las-Bloux', '31T', 340777, 5025200, 45.3622, 0.966941, 190),
('24430', 'Saint-Julien-de-Bourdeilles', '31T', 311138, 5025710, 45.3594, 0.588607, 180),
('24431', 'Saint-Julien-de-Crempse', '31T', 304702, 4980563, 44.9517, 0.524163, 130),
('24432', 'Saint-Julien-de-Lampon', '31T', 370672, 4968825, 44.8611, 1.36305, 89),
('24433', 'Saint-Julien-d''Eymet', '31T', 297179, 4955531, 44.7244, 0.438885, 123),
('24434', 'Saint-Just', '31T', 304595, 5023253, 45.3356, 0.506115, 110),
('24435', 'Saint-Laurent-des-Bâtons', '31T', 321683, 4980808, 44.9583, 0.739173, 140),
('24436', 'Saint-Laurent-des-Hommes', '31T', 283789, 4990659, 45.0364, 0.255, 50),
('24437', 'Saint-Laurent-des-Vignes', '31T', 298773, 4965643, 44.8158, 0.455, 46),
('24438', 'Saint-Laurent-la-Vallée', '31T', 350478, 4956822, 44.7492, 1.11111, 220),
('24439', 'Saint-Laurent-sur-Manoire', '31T', 326725, 5001730, 45.1478, 0.79583, 113),
('24441', 'Saint-Léon-d''Issigeac', '31T', 317118, 4954472, 44.7203, 0.690828, 150),
('24442', 'Saint-Léon-sur-l''Isle', '31T', 303451, 4998979, 45.1169, 0.501117, 63),
('24443', 'Saint-Léon-sur-Vézère', '31T', 349643, 4985863, 45.0103, 1.09195, 70),
('24444', 'Saint-Louis-en-l''Isle', '31T', 294574, 4992959, 45.0603, 0.390839, 54),
('24445', 'Saint-Marcel-du-Périgord', '31T', 319380, 4976148, 44.9158, 0.711663, 130),
('24446', 'Saint-Marcory', '31T', 336225, 4954390, 44.7242, 0.931944, 200),
('24447', 'Sainte-Marie-de-Chignac', '31T', 329271, 4999685, 45.13, 0.828892, 120),
('24448', 'Saint-Martial-d''Albarède', '31T', 346071, 5020901, 45.3247, 1.03584, 140),
('24449', 'Saint-Martial-d''Artenset', '31T', 279821, 4988663, 45.0172, 0.205556, 40),
('24450', 'Saint-Martial-de-Nabirat', '31T', 362076, 4955977, 44.7439, 1.25778, 212),
('24451', 'Saint-Martial-de-Valette', '31T', 316259, 5042948, 45.5158, 0.647499, 153),
('24452', 'Saint-Martial-Viveyrol', '31T', 291574, 5026141, 45.3578, 0.338889, 100),
('24453', 'Saint-Martin-de-Fressengeas', '31T', 331443, 5034306, 45.4419, 0.844727, 210),
('24454', 'Saint-Martin-de-Gurson', '31T', 271989, 4981677, 44.9519, 0.10944, 74),
('24455', 'Saint-Martin-de-Ribérac', '31T', 292759, 5011799, 45.2292, 0.359997, 93),
('24456', 'Saint-Martin-des-Combes', '31T', 311774, 4980907, 44.9567, 0.613609, 101),
('24457', 'Saint-Martin-l''Astier', '31T', 290199, 4992422, 45.0542, 0.335555, 50),
('24458', 'Saint-Martin-le-Pin', '31T', 313545, 5047321, 45.5544, 0.611115, 190),
('24459', 'Saint-Maime-de-Péreyrol', '31T', 314613, 4987310, 45.015, 0.647216, 190),
('24460', 'Saint-Méard-de-Drône', '31T', 297667, 5013741, 45.2481, 0.421665, 70),
('24461', 'Saint-Méard-de-Gurçon', '31T', 277739, 4976686, 44.9089, 0.18444, 74),
('24462', 'Saint-Médard-de-Mussidan', '31T', 291011, 4991128, 45.0428, 0.346395, 50),
('24463', 'Saint-Médard-d''Excideuil', '31T', 348968, 5022745, 45.3419, 1.07222, 166),
('24464', 'Saint-Mesmin', '31T', 359572, 5023735, 45.3531, 1.20722, 295),
('24465', 'Saint-Michel-de-Double', '31T', 286615, 4995259, 45.0786, 0.288883, 106),
('24466', 'Saint-Michel-de-Montaigne', '31T', 265559, 4973228, 44.8739, 0.0319488, 81),
('24468', 'Saint-Michel-de-Villadeix', '31T', 320434, 4983962, 44.9864, 0.722226, 160),
('24470', 'Sainte-Mondane', '31T', 368529, 4967109, 44.8453, 1.33638, 100),
('24471', 'Sainte-Nathalène', '31T', 364782, 4973732, 44.9042, 1.28722, 120),
('24472', 'Saint-Nexans', '31T', 306226, 4964210, 44.805, 0.549719, 100),
('24473', 'Sainte-Orse', '31T', 348753, 5007343, 45.2033, 1.07417, 200),
('24474', 'Saint-Pancrace', '31T', 317408, 5033154, 45.4281, 0.665838, 180),
('24475', 'Saint-Pantaly-d''Ans', '31T', 342640, 5011691, 45.2411, 0.995003, 126),
('24476', 'Saint-Pantaly-d''Excideuil', '31T', 344481, 5020013, 45.3164, 1.01584, 131),
('24477', 'Saint-Pardoux-de-Drône', '31T', 297278, 5011128, 45.2244, 0.417778, 170),
('24478', 'Saint-Pardoux-et-Vielvic', '31T', 340117, 4959541, 44.7714, 0.979444, 140),
('24479', 'Saint-Pardoux-la-Rivière', '31T', 323937, 5040318, 45.4942, 0.746669, 143),
('24480', 'Saint-Paul-de-Serre', '31T', 313848, 4995578, 45.0892, 0.63445, 120),
('24481', 'Saint-Paul-la-Roche', '31T', 343663, 5037943, 45.4775, 0.999723, 250),
('24482', 'Saint-Paul-Lizonne', '31T', 286977, 5022248, 45.3214, 0.281939, 90),
('24483', 'Saint-Perdoux', '31T', 305198, 4957106, 44.7408, 0.539448, 140),
('24484', 'Saint-Pierre-de-Chignac', '31T', 331276, 4998643, 45.1211, 0.854722, 140),
('24485', 'Saint-Pierre-de-Côle', '31T', 327211, 5026670, 45.3722, 0.793331, 127),
('24486', 'Saint-Pierre-de-Frugie', '31T', 343887, 5048653, 45.5739, 0.999173, 340),
('24487', 'Saint-Pierre-d''Eyraud', '31T', 288039, 4969510, 44.8475, 0.317774, 24),
('24488', 'Saint-Pompont', '31T', 353345, 4954225, 44.7264, 1.14805, 140),
('24489', 'Saint-Priest-les-Fougères', '31T', 344799, 5045202, 45.5431, 1.01195, 370),
('24490', 'Saint-Privat-des-Prés', '31T', 281364, 5011812, 45.2258, 0.215001, 80),
('24491', 'Saint-Rabier', '31T', 354712, 5003529, 45.1703, 1.15112, 200),
('24492', 'Sainte-Radegonde', '31T', 315866, 4949937, 44.6792, 0.676665, 90),
('24493', 'Saint-Raphaël', '31T', 349041, 5018482, 45.3036, 1.07445, 288),
('24494', 'Saint-Rémy', '31T', 278058, 4980815, 44.9461, 0.186663, 90),
('24495', 'Saint-Romain-de-Monpazier', '31T', 331371, 4953959, 44.7192, 0.870834, 160),
('24496', 'Saint-Romain-et-Saint-Clément', '31T', 332781, 5032325, 45.4244, 0.862496, 221),
('24497', 'Sainte-Sabine-Born', '31T', 321809, 4951314, 44.6931, 0.751113, 131),
('24498', 'Saint-Saud-Lacoussière', '31T', 329838, 5045683, 45.5439, 0.820273, 295),
('24499', 'Saint-Sauveur', '31T', 309379, 4971157, 44.8683, 0.586946, 106),
('24500', 'Saint-Sauveur-Lalande', '31T', 283398, 4984957, 44.985, 0.252496, 105),
('24501', 'Saint-Seurin-de-Prats', '31T', 268915, 4968193, 44.8297, 0.0766732, 10),
('24502', 'Saint-Séverin-d''Estissac', '31T', 301389, 4991785, 45.0517, 0.477777, 171),
('24503', 'Saint-Sulpice-de-Mareuil', '31T', 305139, 5038001, 45.4683, 0.507222, 149),
('24504', 'Saint-Sulpice-de-Roumagnac', '31T', 295305, 5008844, 45.2033, 0.393611, 170),
('24505', 'Saint-Sulpice-d''Excideuil', '31T', 344025, 5027991, 45.3881, 1.00751, 280),
('24507', 'Sainte-Trie', '31T', 358765, 5017794, 45.2994, 1.19862, 249),
('24508', 'Saint-Victor', '31T', 299026, 5015304, 45.2625, 0.438333, 130),
('24509', 'Saint-Vincent-de-Connezac', '31T', 295308, 5004210, 45.1617, 0.395552, 110),
('24510', 'Saint-Vincent-de-Cosse', '31T', 349694, 4966565, 44.8367, 1.09833, 80),
('24511', 'Saint-Vincent-Jalmoutiers', '31T', 279375, 5009254, 45.2022, 0.190828, 50),
('24512', 'Saint-Vincent-le-Paluel', '31T', 364576, 4972285, 44.8911, 1.285, 103),
('24513', 'Saint-Vincent-sur-l''Isle', '31T', 335109, 5012346, 45.2453, 0.898894, 110),
('24514', 'Saint-Vivien', '31T', 271402, 4975056, 44.8922, 0.105001, 100),
('24515', 'Salagnac', '31T', 358924, 5019056, 45.3108, 1.20028, 200),
('24516', 'Salignac-Eyvigues', '31T', 367727, 4981419, 44.9739, 1.3225, 295),
('24517', 'Salles-de-Belvès', '31T', 341534, 4952775, 44.7108, 0.999442, 227),
('24518', 'Salon', '31T', 324585, 4987491, 45.0192, 0.773611, 150),
('24519', 'Sarlande', '31T', 352843, 5034788, 45.4511, 1.11806, 320),
('24520', 'Sarlat-la-Canéda', '31T', 359085, 4972064, 44.8881, 1.21556, 129),
('24521', 'Sarliac-sur-l''Isle', '31T', 333262, 5011808, 45.24, 0.875555, 104),
('24522', 'Sarrazac', '31T', 345874, 5033318, 45.4364, 1.02945, 290),
('24523', 'Saussignac', '31T', 288482, 4964275, 44.8006, 0.325552, 122),
('24524', 'Savignac-de-Miremont', '31T', 338090, 4982008, 44.9731, 0.946667, 144),
('24525', 'Savignac-de-Nontron', '31T', 322310, 5045769, 45.5428, 0.723886, 245),
('24526', 'Savignac-Lédrier', '31T', 360707, 5024821, 45.3631, 1.22139, 280),
('24527', 'Savignac-les-Églises', '31T', 336563, 5015457, 45.2736, 0.916385, 110),
('24528', 'Sceau-Saint-Angel', '31T', 319930, 5039196, 45.4831, 0.695839, 230),
('24529', 'Segonzac', '31T', 299241, 5009026, 45.2061, 0.443605, 200),
('24530', 'Sencenac-Puy-de-Fourches', '31T', 319489, 5020030, 45.3106, 0.697216, 156),
('24531', 'Sergeac', '31T', 350826, 4984940, 45.0022, 1.10722, 82),
('24532', 'Serres-et-Montguyard', '31T', 298146, 4949818, 44.6733, 0.453338, 56),
('24533', 'Servanches', '31T', 276731, 5003013, 45.1453, 0.159997, 121),
('24534', 'Sigoulès', '31T', 294921, 4959278, 44.7575, 0.408895, 90),
('24535', 'Simeyrols', '31T', 368842, 4973802, 44.9056, 1.33861, 220),
('24536', 'Singleyrac', '31T', 299274, 4957041, 44.7386, 0.46472, 138),
('24537', 'Siorac-de-Ribérac', '31T', 292619, 5008189, 45.1967, 0.359719, 150),
('24538', 'Siorac-en-Périgord', '31T', 340781, 4965051, 44.8211, 0.986107, 60),
('24540', 'Sorges', '31T', 333284, 5019249, 45.3069, 0.873335, 177),
('24541', 'Soudat', '31T', 310074, 5055209, 45.6244, 0.563615, 200),
('24542', 'Soulaures', '31T', 335310, 4946138, 44.6497, 0.923053, 241),
('24543', 'Sourzac', '31T', 295088, 4991922, 45.0511, 0.397784, 87),
('24544', 'Tamniès', '31T', 353975, 4980884, 44.9664, 1.14833, 180),
('24545', 'Teillots', '31T', 360555, 5013000, 45.2567, 1.22278, 280),
('24546', 'Temple-Laguyon', '31T', 350862, 5010720, 45.2342, 1.1, 226),
('24547', 'Terrasson-Lavilledieu', '31T', 366495, 4998917, 45.1311, 1.30223, 88),
('24548', 'Teyjat', '31T', 310874, 5050861, 45.5856, 0.575554, 150),
('24549', 'Thénac', '31T', 289570, 4958525, 44.7492, 0.341669, 170),
('24550', 'Thenon', '31T', 348315, 4999974, 45.1369, 1.07083, 231),
('24551', 'Thiviers', '31T', 337227, 5031035, 45.4139, 0.919716, 276),
('24552', 'Thonac', '31T', 351757, 4987295, 45.0236, 1.11834, 70),
('24553', 'Tocane-Saint-Apre', '31T', 303526, 5014112, 45.2531, 0.496107, 85),
('24554', 'La Tour-Blanche', '31T', 299996, 5026641, 45.3647, 0.446107, 150),
('24555', 'Tourtoirac', '31T', 347643, 5014749, 45.2697, 1.05777, 140),
('24557', 'Trélissac', '31T', 323970, 5006407, 45.1892, 0.759162, 94),
('24558', 'Trémolat', '31T', 328627, 4971571, 44.8769, 0.83028, 50),
('24559', 'Tursac', '31T', 345765, 4981294, 44.9683, 1.04416, 79),
('24560', 'Urval', '31T', 337726, 4964140, 44.8122, 0.947781, 80),
('24561', 'Valeuil', '31T', 313357, 5022679, 45.3328, 0.618058, 100),
('24562', 'Vallereuil', '31T', 303453, 4994099, 45.0731, 0.503057, 150),
('24563', 'Valojoulx', '31T', 353652, 4986851, 45.02, 1.14251, 97),
('24564', 'Vanxains', '31T', 287064, 5010567, 45.2164, 0.288057, 110),
('24565', 'Varaignes', '31T', 307454, 5052479, 45.5992, 0.531115, 150),
('24566', 'Varennes', '31T', 316174, 4966882, 44.8317, 0.674439, 57),
('24567', 'Vaunac', '31T', 332755, 5025593, 45.3639, 0.864447, 200),
('24568', 'Vélines', '31T', 271445, 4971347, 44.8589, 0.107218, 70),
('24569', 'Vendoire', '31T', 289172, 5032462, 45.4139, 0.305555, 130),
('24570', 'Verdon', '31T', 312745, 4964572, 44.81, 0.631947, 160),
('24571', 'Vergt', '31T', 319902, 4988424, 45.0264, 0.713887, 130),
('24572', 'Vergt-de-Biron', '31T', 328783, 4944363, 44.6322, 0.841389, 180),
('24573', 'Verteillac', '31T', 293709, 5024836, 45.3467, 0.366664, 130),
('24574', 'Veyrignac', '31T', 366391, 4965671, 44.8319, 1.30972, 123),
('24575', 'Veyrines-de-Domme', '31T', 350176, 4961800, 44.7939, 1.10583, 220),
('24576', 'Veyrines-de-Vergt', '31T', 324406, 4985767, 45.0036, 0.771943, 190),
('24577', 'Vézac', '31T', 354649, 4966143, 44.8339, 1.16111, 96),
('24579', 'Vieux-Mareuil', '31T', 304519, 5033449, 45.4272, 0.501107, 130),
('24580', 'Villac', '31T', 363108, 5005040, 45.1856, 1.25749, 146),
('24581', 'Villamblard', '31T', 306254, 4988330, 45.0219, 0.540833, 124),
('24582', 'Villars', '31T', 324381, 5032121, 45.4206, 0.755276, 142),
('24584', 'Villefranche-de-Lonchat', '31T', 267874, 4981331, 44.9475, 0.0575003, 105),
('24585', 'Villefranche-du-Périgord', '31T', 347572, 4943677, 44.6303, 1.07833, 223),
('24586', 'Villetoureix', '31T', 293278, 5015644, 45.2639, 0.365003, 70),
('24587', 'Vitrac', '31T', 359914, 4965809, 44.8319, 1.22778, 120),
('25001', 'Abbans-Dessous', '31T', 717916, 5224019, 47.1336, 5.87361, 260),
('25002', 'Abbans-Dessus', '31T', 718536, 5222651, 47.1211, 5.88111, 400),
('25003', 'Abbenans', '32T', 308038, 5263817, 47.4994, 6.45111, 330),
('25004', 'Abbévillers', '32T', 343106, 5255234, 47.4317, 6.91945, 560),
('25005', 'Accolans', '32T', 314091, 5263189, 47.4956, 6.53167, 428),
('25006', 'Adam-lès-Passavant', '32T', 300480, 5241665, 47.2981, 6.36083, 450),
('25007', 'Adam-lès-Vercel', '32T', 302309, 5227203, 47.1686, 6.39139, 660),
('25008', 'Aibre', '32T', 326592, 5268830, 47.5497, 6.69528, 359),
('25009', 'Aïssey', '32T', 298249, 5238527, 47.2692, 6.33278, 440),
('25011', 'Allenjoie', '32T', 341677, 5266733, 47.5347, 6.89638, 336),
('25012', 'Les Alliés', '32T', 305653, 5202496, 46.9475, 6.44611, 971),
('25013', 'Allondans', '32T', 330548, 5265346, 47.5194, 6.74916, 330),
('25014', 'Amagney', '32T', 284662, 5243211, 47.3069, 6.15111, 290),
('25015', 'Amancey', '32T', 277729, 5213610, 47.0386, 6.07417, 595),
('25016', 'Amathay-Vésigneux', '32T', 287126, 5211690, 47.0244, 6.19861, 670),
('25017', 'Amondans', '32T', 275366, 5217068, 47.0689, 6.04139, 500),
('25018', 'Anteuil', '32T', 315913, 5251204, 47.3883, 6.56083, 450),
('25019', 'Appenans', '32T', 316374, 5257215, 47.4425, 6.56444, 290),
('25020', 'Arbouans', '32T', 334895, 5262133, 47.4917, 6.80806, 345),
('25021', 'Arc-et-Senans', '31T', 711834, 5213012, 47.0367, 5.78834, 243),
('25022', 'Arcey', '32T', 323651, 5265674, 47.5206, 6.65749, 374),
('25024', 'Arçon', '32T', 300304, 5202642, 46.9472, 6.37583, 810),
('25025', 'Arc-sous-Cicon', '32T', 301078, 5214389, 47.0531, 6.38083, 790),
('25026', 'Arc-sous-Montenot', '32T', 271750, 5199834, 46.9128, 6.00251, 650),
('25027', 'Arguel', '32T', 273030, 5231592, 47.1986, 6.00333, 400),
('25028', 'Athose', '32T', 295751, 5217320, 47.0778, 6.30944, 650),
('25029', 'Aubonne', '32T', 296983, 5212581, 47.0356, 6.32778, 720),
('25030', 'Audeux', '31T', 717117, 5238300, 47.2622, 5.87001, 251),
('25031', 'Audincourt', '32T', 337362, 5260519, 47.4778, 6.84138, 322),
('25032', 'Autechaux', '32T', 302645, 5250430, 47.3775, 6.38555, 425),
('25033', 'Autechaux-Roide', '32T', 335127, 5251035, 47.3919, 6.81528, 500),
('25034', 'Auxon-Dessous', '31T', 722989, 5242692, 47.2997, 5.94972, 230),
('25035', 'Auxon-Dessus', '31T', 724684, 5242911, 47.3011, 5.97222, 260),
('25036', 'Avanne-Aveney', '31T', 724622, 5231843, 47.2017, 5.96584, 250),
('25038', 'Avilley', '32T', 293863, 5256202, 47.4267, 6.26666, 250),
('25039', 'Avoudrey', '32T', 305567, 5223758, 47.1386, 6.43583, 710),
('25040', 'Badevel', '32T', 344895, 5262631, 47.4986, 6.94056, 360),
('25041', 'Bannans', '32T', 289687, 5196208, 46.8861, 6.23945, 815),
('25042', 'Le Barboux', '32T', 326889, 5221150, 47.1211, 6.71778, 940),
('25043', 'Bart', '32T', 332074, 5262367, 47.4931, 6.77055, 314),
('25044', 'Bartherans', '31T', 722344, 5213922, 47.0414, 5.92695, 450),
('25045', 'Battenans-les-Mines', '32T', 294049, 5254310, 47.4097, 6.27001, 300),
('25046', 'Battenans-Varin', '32T', 326885, 5235423, 47.2494, 6.71222, 550),
('25047', 'Baume-les-Dames', '32T', 300671, 5247932, 47.3544, 6.36055, 280),
('25048', 'Bavans', '32T', 328945, 5261345, 47.4831, 6.72944, 330),
('25049', 'Belfays', '32T', 340854, 5236266, 47.2606, 6.89639, 876),
('25050', 'Le Bélieu', '32T', 320604, 5221152, 47.1194, 6.635, 980),
('25051', 'Belleherbe', '32T', 322916, 5237055, 47.2631, 6.65917, 730),
('25052', 'Belmont', '32T', 300632, 5233100, 47.2211, 6.36667, 610),
('25053', 'Belvoir', '32T', 318945, 5243355, 47.3186, 6.60416, 620),
('25054', 'Berche', '32T', 330045, 5260263, 47.4736, 6.74444, 315),
('25055', 'Berthelange', '31T', 710543, 5230891, 47.1978, 5.77973, 276),
('25056', 'Besançon', '32T', 274932, 5236713, 47.2453, 6.02583, 261),
('25057', 'Bethoncourt', '32T', 334463, 5266871, 47.5342, 6.80055, 354),
('25058', 'Beure', '32T', 273174, 5232607, 47.2078, 6.00472, 250),
('25059', 'Beutal', '32T', 322193, 5260373, 47.4725, 6.64028, 340),
('25060', 'Bians-les-Usiers', '32T', 292173, 5204310, 46.9597, 6.26834, 750),
('25061', 'Bief', '32T', 331291, 5243822, 47.3261, 6.76722, 310),
('25062', 'Le Bizot', '32T', 323461, 5222889, 47.1358, 6.67195, 940),
('25063', 'Blamont', '32T', 337913, 5250123, 47.3844, 6.8525, 548),
('25065', 'Blarians', '32T', 287268, 5254800, 47.4119, 6.17999, 240),
('25066', 'Blussangeaux', '32T', 319982, 5255929, 47.4319, 6.61277, 295),
('25067', 'Blussans', '32T', 319449, 5255637, 47.4292, 6.60583, 300),
('25070', 'Bolandoz', '32T', 280398, 5211502, 47.0206, 6.11028, 640),
('25071', 'Bondeval', '32T', 337759, 5256708, 47.4436, 6.84805, 450),
('25072', 'Bonnal', '32T', 300913, 5264920, 47.5072, 6.35611, 260),
('25073', 'Bonnay', '32T', 277196, 5246487, 47.3339, 6.05083, 240),
('25074', 'Bonnétage', '32T', 326049, 5229887, 47.1994, 6.70333, 896),
('25075', 'Bonnevaux', '32T', 285141, 5187624, 46.8075, 6.18389, 850),
('25076', 'Bonnevaux-le-Prieuré', '32T', 285455, 5223927, 47.1339, 6.17083, 520),
('25077', 'La Bosse', '32T', 321869, 5223245, 47.1386, 6.65083, 1039),
('25078', 'Bouclans', '32T', 290877, 5236466, 47.2483, 6.23639, 439),
('25079', 'Boujailles', '32T', 277569, 5196864, 46.8881, 6.08027, 811),
('25082', 'Bourguignon', '32T', 332534, 5253518, 47.4136, 6.78001, 343),
('25083', 'Bournois', '32T', 311592, 5263640, 47.4989, 6.49833, 413),
('25084', 'Boussières', '31T', 719884, 5226688, 47.1569, 5.90083, 270),
('25085', 'Bouverans', '32T', 287149, 5192775, 46.8544, 6.20777, 830),
('25086', 'Braillans', '32T', 279963, 5244034, 47.3128, 6.08862, 360),
('25087', 'Branne', '32T', 309204, 5250090, 47.3764, 6.4725, 280),
('25088', 'Breconchaux', '32T', 293654, 5246659, 47.3408, 6.26833, 346),
('25089', 'Bremondans', '32T', 303052, 5234316, 47.2328, 6.39806, 540),
('25090', 'Brères', '31T', 717229, 5215710, 47.0592, 5.86056, 260),
('25091', 'Les Bréseux', '32T', 334249, 5237714, 47.2719, 6.80861, 740),
('25092', 'La Bretenière', '32T', 294213, 5251214, 47.3819, 6.27361, 335),
('25093', 'Bretigney', '32T', 321969, 5261986, 47.4869, 6.63666, 400),
('25094', 'Bretigney-Notre-Dame', '32T', 296213, 5243511, 47.3133, 6.30361, 390),
('25095', 'Bretonvillers', '32T', 321128, 5232196, 47.2189, 6.6375, 700),
('25096', 'Brey-et-Maison-du-Bois', '32T', 289924, 5179975, 46.7403, 6.25001, 913),
('25097', 'Brognard', '32T', 339240, 5266336, 47.5306, 6.86417, 340),
('25098', 'Buffard', '31T', 714570, 5213296, 47.0383, 5.82444, 250),
('25099', 'Bugny', '32T', 298706, 5207949, 46.9944, 6.3525, 860),
('25100', 'Bulle', '32T', 288448, 5197117, 46.8939, 6.22278, 820),
('25101', 'Burgille', '31T', 709947, 5238751, 47.2686, 5.77556, 222),
('25102', 'Burnevillers', '32T', 349540, 5243729, 47.3297, 7.00861, 780),
('25103', 'Busy', '31T', 723418, 5228026, 47.1678, 5.94806, 306),
('25104', 'By', '31T', 719677, 5210608, 47.0125, 5.89027, 580),
('25105', 'Byans-sur-Doubs', '31T', 716746, 5221998, 47.1158, 5.85723, 288),
('25106', 'Cademène', '32T', 274488, 5220625, 47.1006, 6.02806, 410),
('25107', 'Cendrey', '32T', 292160, 5253697, 47.4036, 6.24528, 270),
('25108', 'Cernay-l''Église', '32T', 336018, 5236305, 47.2597, 6.8325, 865),
('25109', 'Cessey', '31T', 721098, 5221262, 47.1078, 5.91416, 300),
('25110', 'Chaffois', '32T', 291995, 5199218, 46.9139, 6.26833, 850),
('25111', 'Chalèze', '32T', 279964, 5238996, 47.2675, 6.09112, 250),
('25112', 'Chalezeule', '32T', 278732, 5238145, 47.2594, 6.07527, 250),
('25113', 'Chamesey', '32T', 322096, 5234268, 47.2378, 6.64945, 720),
('25114', 'Chamesol', '32T', 336503, 5246208, 47.3489, 6.83527, 670),
('25115', 'Champagney', '31T', 719766, 5237780, 47.2567, 5.90472, 280),
('25116', 'Champlive', '32T', 291776, 5241070, 47.29, 6.24611, 390),
('25117', 'Champoux', '32T', 283704, 5246306, 47.3344, 6.13695, 340),
('25119', 'Champvans-les-Moulins', '31T', 720551, 5237624, 47.255, 5.91501, 250),
('25120', 'Chantrans', '32T', 283527, 5213859, 47.0428, 6.15027, 636),
('25121', 'Chapelle-des-Bois', '32T', 278967, 5164514, 46.5978, 6.11417, 1080),
('25122', 'Chapelle-d''Huin', '32T', 284264, 5201532, 46.9322, 6.16583, 790),
('25123', 'Charbonnières-les-Sapins', '32T', 288800, 5225444, 47.1486, 6.21417, 530),
('25124', 'Charmauvillers', '32T', 342282, 5233849, 47.2392, 6.91611, 850),
('25125', 'Charmoille', '32T', 323935, 5235263, 47.2472, 6.67333, 690),
('25126', 'Charnay', '31T', 724092, 5223569, 47.1275, 5.95472, 367),
('25127', 'Charquemont', '32T', 335161, 5231232, 47.2139, 6.82305, 870),
('25128', 'Chasnans', '32T', 296144, 5218296, 47.0867, 6.31417, 720),
('25129', 'Chassagne-Saint-Denis', '32T', 280935, 5218621, 47.0847, 6.11388, 555),
('25130', 'Châteauvieux-les-Fossés', '32T', 287480, 5216282, 47.0658, 6.20111, 448),
('25131', 'Châtelblanc', '32T', 279398, 5172781, 46.6722, 6.11584, 1020),
('25132', 'Châtillon-Guyotte', '32T', 286194, 5246030, 47.3328, 6.17, 280),
('25133', 'Châtillon-le-Duc', '32T', 273748, 5243713, 47.3078, 6.00666, 300),
('25134', 'Châtillon-sur-Lison', '31T', 726191, 5216663, 47.0647, 5.97889, 464),
('25136', 'Chaucenne', '31T', 719037, 5240968, 47.2856, 5.89666, 220),
('25137', 'Chaudefontaine', '32T', 285451, 5246984, 47.3411, 6.15972, 290),
('25138', 'Les Terres-de-Chaux', '32T', 329087, 5243175, 47.3197, 6.73833, 740),
('25139', 'La Chaux', '32T', 304978, 5210954, 47.0233, 6.43361, 884),
('25140', 'Chaux-lès-Clerval', '32T', 312037, 5250740, 47.3831, 6.50972, 330),
('25141', 'Chaux-lès-Passavant', '32T', 299955, 5234853, 47.2367, 6.35695, 540),
('25142', 'Chaux-Neuve', '32T', 280744, 5173535, 46.6794, 6.13306, 1000),
('25143', 'Chay', '31T', 717155, 5213111, 47.0358, 5.85834, 260),
('25145', 'Chazot', '32T', 314539, 5244203, 47.325, 6.54556, 461),
('25147', 'Chemaudin', '31T', 718826, 5234191, 47.2247, 5.89056, 300),
('25148', 'La Chenalotte', '32T', 324360, 5219803, 47.1083, 6.685, 932),
('25149', 'Chenecey-Buillon', '31T', 724440, 5224973, 47.14, 5.96, 280),
('25150', 'Chevigney-sur-l''Ognon', '31T', 714533, 5242223, 47.2983, 5.83778, 220),
('25151', 'Chevigney-lès-Vercel', '32T', 300650, 5226764, 47.1642, 6.36972, 650),
('25152', 'La Chevillotte', '32T', 285256, 5233546, 47.2203, 6.16361, 430),
('25153', 'Chevroz', '31T', 726429, 5246749, 47.335, 5.99722, 220),
('25154', 'Chouzelot', '31T', 719475, 5221233, 47.1081, 5.89278, 270),
('25155', 'Cléron', '32T', 276959, 5218986, 47.0867, 6.06139, 322),
('25156', 'Clerval', '32T', 311300, 5251969, 47.3939, 6.49944, 290),
('25157', 'La Cluse-et-Mijoux', '32T', 299941, 5194960, 46.8781, 6.37444, 850),
('25159', 'Colombier-Fontaine', '32T', 326019, 5258002, 47.4522, 6.69195, 310),
('25160', 'Les Combes', '32T', 315849, 5212677, 47.0419, 6.57583, 880),
('25161', 'Consolation-Maisonnettes', '32T', 318456, 5225357, 47.1567, 6.60501, 540),
('25162', 'Corcelles-Ferrières', '31T', 712637, 5234150, 47.2264, 5.80889, 225),
('25163', 'Corcelle-Mieslot', '32T', 287653, 5249191, 47.3617, 6.18778, 260),
('25164', 'Corcondray', '31T', 713883, 5234628, 47.2303, 5.82555, 233),
('25166', 'Côtebrune', '32T', 296680, 5236943, 47.2544, 6.31278, 483),
('25170', 'Courcelles-lès-Montbéliard', '32T', 332565, 5263403, 47.5025, 6.77667, 310),
('25171', 'Courcelles', '31T', 724315, 5219899, 47.0944, 5.95583, 680),
('25172', 'Courchapon', '31T', 707903, 5238246, 47.2647, 5.74833, 202),
('25173', 'Cour-Saint-Maurice', '32T', 326197, 5236339, 47.2575, 6.70278, 510),
('25174', 'Courtefontaine', '32T', 342082, 5242843, 47.32, 6.91028, 760),
('25175', 'Courtetain-et-Salans', '32T', 304591, 5236953, 47.2569, 6.41722, 540),
('25176', 'Courvières', '32T', 279714, 5194682, 46.8692, 6.10944, 821),
('25177', 'Crosey-le-Grand', '32T', 313178, 5247675, 47.3558, 6.52611, 550),
('25178', 'Crosey-le-Petit', '32T', 310189, 5247432, 47.3528, 6.48667, 510),
('25179', 'Le Crouzet', '32T', 281202, 5176177, 46.7033, 6.13778, 1028),
('25180', 'Crouzet-Migette', '32T', 272441, 5204630, 46.9561, 6.00917, 626),
('25181', 'Cubrial', '32T', 304697, 5263495, 47.4956, 6.40694, 282),
('25182', 'Cubry', '32T', 305865, 5263333, 47.4944, 6.4225, 310),
('25183', 'Cusance', '32T', 305406, 5244405, 47.3242, 6.42473, 305),
('25184', 'Cuse-et-Adrisans', '32T', 303447, 5261806, 47.48, 6.39111, 291),
('25185', 'Cussey-sur-Lison', '31T', 724440, 5216041, 47.0597, 5.95555, 335),
('25186', 'Cussey-sur-l''Ognon', '31T', 722005, 5247045, 47.3392, 5.93889, 210),
('25187', 'Dambelin', '32T', 324489, 5249582, 47.3761, 6.675, 424),
('25188', 'Dambenois', '32T', 339573, 5267810, 47.5439, 6.86805, 335),
('25189', 'Dammartin-les-Templiers', '32T', 293335, 5241170, 47.2914, 6.26666, 410);
INSERT INTO `ods_communes` (`oc_code_insee`, `oc_nom`, `oc_secteur`, `oc_x_utm`, `oc_y_utm`, `oc_latitude`, `oc_longitude`, `oc_altitude`) VALUES
('25190', 'Dampierre-les-Bois', '32T', 342726, 5263708, 47.5078, 6.91139, 370),
('25191', 'Dampierre-sur-le-Doubs', '32T', 329127, 5260382, 47.4744, 6.73222, 310),
('25192', 'Dampjoux', '32T', 330631, 5245726, 47.3431, 6.75777, 360),
('25193', 'Damprichard', '32T', 339716, 5234659, 47.2458, 6.88194, 812),
('25194', 'Dannemarie', '32T', 341395, 5250862, 47.3919, 6.89834, 470),
('25195', 'Dannemarie-sur-Crète', '31T', 716944, 5232112, 47.2067, 5.86472, 286),
('25196', 'Dasle', '32T', 341488, 5260529, 47.4789, 6.89611, 390),
('25197', 'Deluz', '32T', 287965, 5242102, 47.2981, 6.19528, 262),
('25198', 'Désandans', '32T', 325162, 5267204, 47.5347, 6.67694, 387),
('25199', 'Déservillers', '32T', 277267, 5209733, 47.0036, 6.07, 700),
('25200', 'Devecey', '32T', 274578, 5245598, 47.325, 6.01667, 230),
('25201', 'Dommartin', '32T', 294867, 5200200, 46.9236, 6.30556, 810),
('25202', 'Dompierre-les-Tilleuls', '32T', 285546, 5194779, 46.8719, 6.18583, 840),
('25203', 'Domprel', '32T', 308341, 5230620, 47.2011, 6.46945, 709),
('25204', 'Doubs', '32T', 298330, 5200576, 46.9281, 6.35083, 810),
('25207', 'Dung', '32T', 330733, 5263765, 47.5053, 6.75222, 324),
('25208', 'Durnes', '32T', 290011, 5220951, 47.1086, 6.23222, 595),
('25209', 'Échay', '31T', 723870, 5214350, 47.0447, 5.94722, 344),
('25210', 'Échenans', '32T', 326475, 5266300, 47.5269, 6.69473, 350),
('25211', 'Échevannes', '32T', 289756, 5217344, 47.0761, 6.23055, 652),
('25212', 'École-Valentin', '31T', 725484, 5239603, 47.2711, 5.98111, 317),
('25213', 'Les Écorces', '32T', 333306, 5231871, 47.2192, 6.79834, 900),
('25214', 'Écot', '32T', 328907, 5255013, 47.4261, 6.73139, 530),
('25215', 'L''Écouvotte', '32T', 292330, 5246644, 47.3403, 6.25083, 336),
('25216', 'Écurcey', '32T', 334856, 5252587, 47.4058, 6.81111, 560),
('25217', 'Émagny', '31T', 716738, 5244004, 47.3136, 5.86777, 220),
('25218', 'Épenouse', '32T', 303195, 5232303, 47.2147, 6.40083, 660),
('25219', 'Épenoy', '32T', 300419, 5223033, 47.1306, 6.36833, 740),
('25220', 'Épeugney', '32T', 274330, 5222578, 47.1181, 6.025, 465),
('25221', 'Esnans', '32T', 297845, 5246359, 47.3394, 6.32389, 290),
('25222', 'Étalans', '32T', 292954, 5225483, 47.1503, 6.26888, 590),
('25223', 'Éternoz', '32T', 274223, 5210311, 47.0078, 6.02973, 520),
('25224', 'Étouvans', '32T', 328192, 5259236, 47.4639, 6.72027, 350),
('25225', 'Étrabonne', '31T', 707578, 5234928, 47.235, 5.7425, 202),
('25226', 'Étrappe', '32T', 317639, 5260791, 47.475, 6.57973, 400),
('25227', 'Étray', '32T', 298536, 5222232, 47.1228, 6.34389, 710),
('25228', 'Étupes', '32T', 339171, 5263836, 47.5081, 6.86417, 340),
('25229', 'Évillers', '32T', 289268, 5208925, 47.0003, 6.22805, 730),
('25230', 'Exincourt', '32T', 337224, 5263086, 47.5008, 6.83861, 333),
('25231', 'Eysson', '32T', 305416, 5230684, 47.2008, 6.43084, 650),
('25232', 'Faimbe', '32T', 320280, 5262223, 47.4886, 6.61416, 359),
('25233', 'Fallerans', '32T', 294617, 5223571, 47.1336, 6.29167, 620),
('25234', 'Ferrières-le-Lac', '32T', 340540, 5237108, 47.2681, 6.89194, 810),
('25235', 'Ferrières-les-Bois', '31T', 712196, 5231785, 47.2053, 5.80195, 266),
('25236', 'Fertans', '32T', 277062, 5214995, 47.0508, 6.06472, 550),
('25237', 'Fesches-le-Châtel', '32T', 341749, 5265495, 47.5236, 6.89778, 340),
('25238', 'Fessevillers', '32T', 342280, 5238482, 47.2808, 6.91445, 861),
('25239', 'Feule', '32T', 328775, 5246150, 47.3464, 6.73306, 492),
('25240', 'Les Fins', '32T', 320023, 5216597, 47.0783, 6.62916, 850),
('25241', 'Flagey', '32T', 281379, 5213474, 47.0386, 6.12222, 610),
('25242', 'Flagey-Rigney', '32T', 290523, 5255455, 47.4189, 6.22278, 240),
('25243', 'Flangebouche', '32T', 308373, 5223821, 47.14, 6.47277, 741),
('25244', 'Fleurey', '32T', 332145, 5241357, 47.3042, 6.77945, 630),
('25245', 'Fontain', '32T', 274671, 5231530, 47.1986, 6.025, 445),
('25246', 'Fontaine-lès-Clerval', '32T', 309316, 5255463, 47.4247, 6.47167, 390),
('25247', 'Fontenelle-Montby', '32T', 305050, 5258353, 47.4494, 6.41389, 420),
('25248', 'Les Fontenelles', '32T', 328825, 5229775, 47.1992, 6.74, 901),
('25249', 'Fontenotte', '32T', 297945, 5250497, 47.3767, 6.32333, 370),
('25250', 'Foucherans', '32T', 283088, 5226671, 47.1578, 6.13833, 490),
('25251', 'Fourbanne', '32T', 296536, 5245570, 47.3319, 6.30694, 270),
('25252', 'Fourcatier-et-Maison-Neuve', '32T', 295454, 5182689, 46.7664, 6.32111, 970),
('25253', 'Fourg', '31T', 713338, 5219958, 47.0986, 5.81139, 273),
('25254', 'Les Fourgs', '32T', 301815, 5190108, 46.835, 6.40111, 1080),
('25255', 'Fournet-Blancheroche', '32T', 335066, 5226292, 47.1694, 6.82362, 965),
('25256', 'Frambouhans', '32T', 330950, 5231938, 47.2192, 6.76722, 870),
('25257', 'Franey', '31T', 713085, 5238061, 47.2614, 5.81666, 211),
('25258', 'Franois', '31T', 721353, 5235305, 47.2339, 5.92444, 294),
('25259', 'Frasne', '32T', 283491, 5193030, 46.8556, 6.15973, 850),
('25261', 'Froidevaux', '32T', 325544, 5241271, 47.3017, 6.69223, 702),
('25262', 'Fuans', '32T', 315903, 5222562, 47.1308, 6.5725, 720),
('25263', 'Gellin', '32T', 289110, 5179201, 46.7331, 6.23972, 920),
('25264', 'Gémonval', '32T', 318552, 5267282, 47.5336, 6.58916, 330),
('25265', 'Geneuille', '31T', 724526, 5245409, 47.3236, 5.97139, 220),
('25266', 'Geney', '32T', 316717, 5262117, 47.4867, 6.56695, 377),
('25267', 'Gennes', '32T', 282187, 5236533, 47.2461, 6.12167, 400),
('25268', 'Germéfontaine', '32T', 308264, 5233434, 47.2264, 6.46723, 685),
('25269', 'Germondans', '32T', 288020, 5254710, 47.4114, 6.18999, 250),
('25270', 'Gevresin', '32T', 274917, 5205741, 46.9669, 6.04111, 670),
('25271', 'Gilley', '32T', 308595, 5213679, 47.0489, 6.48, 890),
('25273', 'Glamondans', '32T', 294069, 5238084, 47.2639, 6.27778, 400),
('25274', 'Glay', '32T', 340828, 5252391, 47.4056, 6.89028, 400),
('25275', 'Glère', '32T', 348451, 5245487, 47.3453, 6.99361, 420),
('25276', 'Gondenans-Montby', '32T', 308005, 5256433, 47.4331, 6.45388, 410),
('25277', 'Gondenans-les-Moulins', '32T', 302758, 5260624, 47.4692, 6.38251, 330),
('25278', 'Gonsans', '32T', 295689, 5234443, 47.2317, 6.30084, 530),
('25279', 'Gouhelans', '32T', 300571, 5259184, 47.4556, 6.35417, 280),
('25280', 'Goumois', '32T', 344556, 5236321, 47.2619, 6.94527, 557),
('25281', 'Goux-lès-Dambelin', '32T', 324244, 5251938, 47.3972, 6.67083, 540),
('25282', 'Goux-les-Usiers', '32T', 292761, 5205403, 46.9697, 6.27556, 750),
('25283', 'Goux-sous-Landet', '31T', 722688, 5218262, 47.0803, 5.93361, 434),
('25284', 'Grand-Charmont', '32T', 336278, 5265924, 47.5261, 6.825, 340),
('25285', 'Grand''Combe-Châteleu', '32T', 315250, 5211058, 47.0272, 6.56861, 770),
('25286', 'Grand''Combe-des-Bois', '32T', 332572, 5223025, 47.1394, 6.79195, 995),
('25287', 'Grandfontaine', '31T', 719670, 5231317, 47.1986, 5.90028, 240),
('25288', 'Fournets-Luisans', '32T', 314736, 5222321, 47.1283, 6.55723, 723),
('25289', 'Grandfontaine-sur-Creuse', '32T', 307177, 5229792, 47.1933, 6.45445, 702),
('25290', 'La Grange', '32T', 323458, 5239016, 47.2808, 6.66555, 710),
('25293', 'Granges-Narboz', '32T', 295035, 5195250, 46.8792, 6.30999, 840),
('25295', 'Les Grangettes', '32T', 294949, 5189628, 46.8286, 6.31139, 900),
('25296', 'Les Gras', '32T', 313218, 5207569, 46.9953, 6.54333, 890),
('25297', 'Le Gratteris', '32T', 283068, 5229577, 47.1839, 6.13666, 470),
('25298', 'Grosbois', '32T', 296588, 5247052, 47.3453, 6.30695, 380),
('25299', 'Guillon-les-Bains', '32T', 303058, 5243957, 47.3194, 6.39389, 300),
('25300', 'Guyans-Durnes', '32T', 290862, 5222343, 47.1214, 6.24278, 605),
('25301', 'Guyans-Vennes', '32T', 316013, 5225432, 47.1567, 6.57278, 730),
('25302', 'Hautepierre-le-Châtelet', '32T', 294079, 5214133, 47.0486, 6.28889, 800),
('25303', 'Hauterive-la-Fresse', '32T', 305775, 5205582, 46.9753, 6.44639, 830),
('25304', 'Hérimoncourt', '32T', 340292, 5256576, 47.4431, 6.88167, 361),
('25305', 'L''Hôpital-du-Grosbois', '32T', 289211, 5228119, 47.1728, 6.21833, 576),
('25306', 'L''Hôpital-Saint-Lieffroy', '32T', 308173, 5252595, 47.3986, 6.45777, 337),
('25307', 'Les Hôpitaux-Neufs', '32T', 299505, 5183820, 46.7778, 6.37361, 1000),
('25308', 'Les Hôpitaux-Vieux', '32T', 299217, 5185343, 46.7914, 6.36917, 1040),
('25309', 'Houtaud', '32T', 295112, 5199326, 46.9158, 6.30917, 810),
('25310', 'Huanne-Montmartin', '32T', 299707, 5256587, 47.4319, 6.34389, 310),
('25311', 'Hyémondans', '32T', 322789, 5250993, 47.3883, 6.65194, 428),
('25312', 'Hyèvre-Magny', '32T', 306455, 5248851, 47.3644, 6.43666, 280),
('25313', 'Hyèvre-Paroisse', '32T', 306040, 5249637, 47.3714, 6.43083, 280),
('25314', 'Indevillers', '32T', 345481, 5241919, 47.3125, 6.95555, 730),
('25315', 'L''Isle-sur-le-Doubs', '32T', 318002, 5257659, 47.4469, 6.58583, 296),
('25316', 'Issans', '32T', 328907, 5266475, 47.5292, 6.72694, 336),
('25317', 'Jallerange', '31T', 705531, 5236896, 47.2533, 5.71639, 242),
('25318', 'Jougne', '32T', 300761, 5182016, 46.7619, 6.39083, 1001),
('25319', 'Labergement-du-Navois', '32T', 277893, 5206680, 46.9764, 6.07972, 750),
('25320', 'Labergement-Sainte-Marie', '32T', 292693, 5183897, 46.7764, 6.28444, 860),
('25321', 'Villers-le-Lac', '32T', 323045, 5214590, 47.0611, 6.66972, 780),
('25322', 'Laire', '32T', 329316, 5268997, 47.5519, 6.73139, 390),
('25323', 'Laissey', '32T', 290575, 5242194, 47.2997, 6.22972, 270),
('25324', 'Lanans', '32T', 307074, 5241445, 47.2981, 6.44806, 510),
('25325', 'Landresse', '32T', 308437, 5236827, 47.2569, 6.46805, 570),
('25326', 'Lantenne-Vertière', '31T', 709335, 5235237, 47.2372, 5.76583, 240),
('25327', 'Lanthenans', '32T', 320966, 5251759, 47.3947, 6.6275, 460),
('25328', 'Larnod', '31T', 725229, 5230289, 47.1875, 5.97306, 410),
('25329', 'Laval-le-Prieuré', '32T', 319974, 5228153, 47.1822, 6.62389, 588),
('25330', 'Lavans-Quingey', '31T', 718330, 5219089, 47.0892, 5.87667, 270),
('25331', 'Lavans-Vuillafans', '32T', 290728, 5218546, 47.0872, 6.24278, 630),
('25332', 'Lavernay', '31T', 713168, 5236364, 47.2461, 5.81695, 225),
('25333', 'Laviron', '32T', 314846, 5236592, 47.2567, 6.55278, 720),
('25334', 'Levier', '32T', 280546, 5204047, 46.9536, 6.11583, 720),
('25335', 'Liebvillers', '32T', 332578, 5244774, 47.335, 6.78389, 519),
('25336', 'Liesle', '31T', 713844, 5215866, 47.0617, 5.81611, 250),
('25338', 'Lizine', '31T', 727368, 5215719, 47.0558, 5.99389, 405),
('25339', 'Lods', '32T', 291056, 5214084, 47.0472, 6.24916, 370),
('25340', 'Lombard', '31T', 716521, 5217755, 47.0778, 5.85223, 282),
('25341', 'Lomont-sur-Crête', '32T', 305964, 5246055, 47.3392, 6.43139, 530),
('25342', 'Longechaux', '32T', 305302, 5226579, 47.1639, 6.43112, 720),
('25343', 'Longemaison', '32T', 307026, 5217406, 47.0819, 6.45777, 830),
('25344', 'Longevelle-lès-Russey', '32T', 322249, 5233058, 47.2269, 6.65195, 700),
('25345', 'Longevelle-sur-Doubs', '32T', 323072, 5258276, 47.4539, 6.65278, 300),
('25346', 'Longeville', '32T', 289286, 5212416, 47.0317, 6.22667, 656),
('25347', 'La Longeville', '32T', 307865, 5208728, 47.0042, 6.47251, 830),
('25348', 'Longevilles-Mont-d''Or', '32T', 295068, 5181312, 46.7539, 6.31667, 920),
('25349', 'Loray', '32T', 310235, 5225337, 47.1542, 6.49666, 754),
('25350', 'Lougres', '32T', 325829, 5260078, 47.4708, 6.68861, 320),
('25351', 'Le Luhier', '32T', 322348, 5226567, 47.1686, 6.65583, 810),
('25354', 'Luxiol', '32T', 299916, 5251048, 47.3822, 6.34916, 395),
('25355', 'Magny-Châtelard', '32T', 297147, 5233991, 47.2281, 6.32028, 570),
('25356', 'Maîche', '32T', 333706, 5235629, 47.2531, 6.80222, 790),
('25357', 'Maisons-du-Bois-Lièvremont', '32T', 303700, 5204878, 46.9683, 6.41944, 820),
('25359', 'Malans', '32T', 274346, 5214664, 47.0469, 6.02917, 427),
('25360', 'Malbrans', '32T', 278599, 5222757, 47.1211, 6.08111, 560),
('25361', 'Malbuisson', '32T', 294237, 5186192, 46.7975, 6.30361, 880),
('25362', 'Malpas', '32T', 293353, 5189467, 46.8267, 6.29056, 926),
('25364', 'Mamirolle', '32T', 284995, 5230990, 47.1972, 6.16139, 480),
('25365', 'Mancenans', '32T', 314675, 5258504, 47.4536, 6.54138, 320),
('25366', 'Mancenans-Lizerne', '32T', 331884, 5236638, 47.2617, 6.77778, 721),
('25367', 'Mandeure', '32T', 334665, 5257721, 47.4519, 6.80666, 335),
('25368', 'Marchaux', '32T', 283475, 5245233, 47.3247, 6.13444, 297),
('25369', 'Marvelise', '32T', 318831, 5266130, 47.5233, 6.59334, 400),
('25370', 'Mathay', '32T', 332965, 5256132, 47.4372, 6.78473, 335),
('25371', 'Mazerolles-le-Salin', '31T', 717155, 5236107, 47.2425, 5.86944, 260),
('25372', 'Médière', '32T', 319190, 5258796, 47.4575, 6.60111, 300),
('25373', 'Le Mémont', '32T', 324268, 5225212, 47.1569, 6.68167, 997),
('25374', 'Mercey-le-Grand', '31T', 707455, 5233038, 47.2181, 5.74, 291),
('25375', 'Mérey-sous-Montrond', '32T', 277863, 5226216, 47.1519, 6.06972, 455),
('25376', 'Mérey-Vieilley', '32T', 277947, 5246335, 47.3328, 6.06083, 270),
('25377', 'Mésandans', '32T', 301607, 5256337, 47.4303, 6.36917, 330),
('25378', 'Meslières', '32T', 340720, 5253846, 47.4186, 6.88833, 400),
('25379', 'Mesmay', '31T', 716439, 5215929, 47.0614, 5.85027, 260),
('25380', 'Métabief', '32T', 297601, 5183389, 46.7733, 6.34888, 950),
('25381', 'Miserey-Salines', '31T', 724593, 5240898, 47.2831, 5.97, 300),
('25382', 'Moncey', '32T', 282503, 5249627, 47.3639, 6.11945, 240),
('25383', 'Moncley', '31T', 718537, 5243669, 47.31, 5.89138, 220),
('25384', 'Mondon', '32T', 297313, 5257720, 47.4414, 6.31166, 330),
('25385', 'Montagney-Servigney', '32T', 297069, 5262147, 47.4811, 6.3064, 255),
('25386', 'Montancy', '32T', 350729, 5247560, 47.3644, 7.02305, 830),
('25387', 'Montandon', '32T', 336532, 5241203, 47.3039, 6.8375, 753),
('25388', 'Montbéliard', '32T', 334352, 5264403, 47.5119, 6.80001, 330),
('25389', 'Montbéliardot', '32T', 322353, 5227432, 47.1764, 6.65555, 810),
('25390', 'Montbenoît', '32T', 306977, 5207428, 46.9922, 6.46139, 800),
('25391', 'Mont-de-Laval', '32T', 320289, 5226753, 47.1697, 6.62861, 810),
('25392', 'Mont-de-Vougney', '32T', 327204, 5234116, 47.2378, 6.71694, 730),
('25393', 'Montécheroux', '32T', 334408, 5246360, 47.3497, 6.8075, 620),
('25394', 'Montenois', '32T', 324191, 5262722, 47.4942, 6.66584, 410),
('25395', 'Montfaucon', '32T', 279033, 5235507, 47.2358, 6.08055, 490),
('25397', 'Montferrand-le-Château', '31T', 721586, 5229101, 47.1781, 5.92445, 290),
('25398', 'Montflovin', '32T', 305623, 5206761, 46.9858, 6.44389, 861),
('25399', 'Montfort', '31T', 720293, 5215669, 47.0578, 5.90083, 351),
('25400', 'Montgesoye', '32T', 287077, 5217996, 47.0811, 6.195, 340),
('25401', 'Montivernage', '32T', 305548, 5243628, 47.3172, 6.42694, 467),
('25402', 'Montjoie-le-Château', '32T', 341481, 5246288, 47.3508, 6.90111, 410),
('25403', 'Montlebon', '32T', 318646, 5212282, 47.0392, 6.61277, 800),
('25404', 'Montmahoux', '32T', 274285, 5207496, 46.9825, 6.03194, 670),
('25405', 'Montperreux', '32T', 297247, 5189241, 46.8258, 6.34166, 1000),
('25406', 'Montrond-le-Château', '32T', 276059, 5225326, 47.1433, 6.04639, 451),
('25408', 'Montussaint', '32T', 295755, 5256909, 47.4336, 6.29139, 280),
('25410', 'Morre', '32T', 277749, 5234380, 47.2253, 6.06417, 300),
('25411', 'Morteau', '32T', 317907, 5214344, 47.0575, 6.60222, 760),
('25413', 'Mouthe', '32T', 285371, 5176830, 46.7106, 6.19195, 938),
('25414', 'Le Moutherot', '31T', 706745, 5235888, 47.2439, 5.73195, 320),
('25415', 'Mouthier-Haute-Pierre', '32T', 292974, 5213337, 47.0411, 6.27473, 432),
('25416', 'Myon', '31T', 723573, 5212144, 47.025, 5.94222, 340),
('25417', 'Naisey-les-Granges', '32T', 290716, 5232515, 47.2128, 6.23612, 480),
('25418', 'Nancray', '32T', 286830, 5236302, 47.2456, 6.18306, 410),
('25419', 'Nans', '32T', 304962, 5261385, 47.4767, 6.41139, 355),
('25420', 'Nans-sous-Sainte-Anne', '32T', 271857, 5207063, 46.9778, 6.00028, 370),
('25421', 'Narbief', '32T', 325001, 5222225, 47.1303, 6.6925, 902),
('25422', 'Neuchâtel-Urtière', '32T', 328568, 5249122, 47.3731, 6.72917, 415),
('25424', 'Nods', '32T', 298159, 5219216, 47.0956, 6.34028, 710),
('25425', 'Noël-Cerneux', '32T', 322882, 5219044, 47.1011, 6.66583, 934),
('25426', 'Noirefontaine', '32T', 331056, 5246609, 47.3511, 6.76306, 370),
('25427', 'Noironte', '31T', 717538, 5239428, 47.2722, 5.87611, 230),
('25428', 'Nommay', '32T', 338012, 5267328, 47.5392, 6.8475, 330),
('25429', 'Novillars', '32T', 283118, 5241228, 47.2886, 6.13167, 260),
('25430', 'Ollans', '32T', 292194, 5255272, 47.4178, 6.24499, 241),
('25431', 'Onans', '32T', 320053, 5263682, 47.5017, 6.61056, 380),
('25432', 'Orchamps-Vennes', '32T', 312304, 5222768, 47.1317, 6.525, 750),
('25433', 'Orgeans-Blanchefontaine', '32T', 329282, 5236836, 47.2628, 6.74333, 460),
('25434', 'Ornans', '32T', 283192, 5220857, 47.1056, 6.1425, 345),
('25435', 'Orsans', '32T', 302288, 5236011, 47.2478, 6.38723, 530),
('25436', 'Orve', '32T', 315213, 5244274, 47.3258, 6.55444, 470),
('25437', 'Osse', '32T', 289144, 5238629, 47.2672, 6.2125, 400),
('25438', 'Osselle', '31T', 716527, 5225081, 47.1436, 5.85583, 225),
('25439', 'Ougney-Douvot', '32T', 294383, 5244687, 47.3233, 6.27888, 270),
('25440', 'Ouhans', '32T', 294178, 5208444, 46.9975, 6.29278, 630),
('25441', 'Ouvans', '32T', 309602, 5239014, 47.2769, 6.48251, 638),
('25442', 'Oye-et-Pallet', '32T', 296917, 5192621, 46.8561, 6.33584, 870),
('25443', 'Palantine', '31T', 723409, 5219309, 47.0894, 5.94361, 371),
('25444', 'Palise', '32T', 280310, 5250512, 47.3711, 6.09, 230),
('25445', 'Paroy', '31T', 718810, 5214068, 47.0439, 5.88056, 325),
('25446', 'Passavant', '32T', 302203, 5239135, 47.2758, 6.38472, 560),
('25447', 'Passonfontaine', '32T', 304171, 5220436, 47.1083, 6.41888, 730),
('25448', 'Pelousey', '31T', 720946, 5239988, 47.2761, 5.92139, 242),
('25449', 'Péseux', '32T', 324610, 5243091, 47.3178, 6.67917, 660),
('25450', 'Pessans', '31T', 718977, 5216980, 47.07, 5.88416, 305),
('25451', 'Petite-Chaux', '32T', 283173, 5174838, 46.6919, 6.16416, 980),
('25452', 'Pierrefontaine-lès-Blamont', '32T', 336883, 5249287, 47.3767, 6.83917, 560),
('25453', 'Pierrefontaine-les-Varans', '32T', 313776, 5232022, 47.2153, 6.54056, 700),
('25454', 'Pirey', '31T', 724427, 5238636, 47.2628, 5.96667, 300),
('25455', 'Placey', '31T', 715320, 5237956, 47.2597, 5.84612, 257),
('25456', 'Plaimbois-du-Miroir', '32T', 321797, 5229241, 47.1925, 6.6475, 840),
('25457', 'Plaimbois-Vennes', '32T', 313796, 5228653, 47.185, 6.54222, 760),
('25458', 'Les Plains-et-Grands-Essarts', '32T', 340858, 5241115, 47.3042, 6.89472, 748),
('25459', 'La Planée', '32T', 292795, 5191124, 46.8414, 6.2825, 950),
('25460', 'Pointvillers', '31T', 720289, 5216349, 47.0639, 5.90111, 340),
('25461', 'Pompierre-sur-Doubs', '32T', 313381, 5254714, 47.4192, 6.52583, 290),
('25462', 'Pontarlier', '32T', 298582, 5198003, 46.905, 6.35528, 840),
('25463', 'Pont-de-Roide', '32T', 331795, 5250419, 47.3856, 6.77139, 350),
('25464', 'Les Pontets', '32T', 283878, 5177872, 46.7194, 6.17195, 1040),
('25465', 'Pont-les-Moulins', '32T', 300642, 5244595, 47.3244, 6.36166, 285),
('25466', 'Pouilley-Français', '31T', 715363, 5232147, 47.2075, 5.84389, 255),
('25467', 'Pouilley-les-Vignes', '31T', 722098, 5237898, 47.2569, 5.93556, 240),
('25468', 'Pouligney-Lusans', '32T', 288763, 5245597, 47.3297, 6.20417, 285),
('25469', 'Présentevillers', '32T', 329049, 5263443, 47.5019, 6.73, 340),
('25470', 'La Prétière', '32T', 319795, 5257325, 47.4444, 6.60973, 300),
('25471', 'Provenchère', '32T', 321959, 5240173, 47.2908, 6.64528, 690),
('25472', 'Puessans', '32T', 298111, 5256518, 47.4308, 6.32278, 290),
('25473', 'Pugey', '31T', 726590, 5229970, 47.1842, 5.99084, 400),
('25474', 'Le Puy', '32T', 290549, 5247357, 47.3461, 6.22695, 327),
('25475', 'Quingey', '31T', 718588, 5220675, 47.1033, 5.88084, 265),
('25476', 'Rahon', '32T', 318055, 5243784, 47.3222, 6.59222, 540),
('25477', 'Rancenay', '31T', 723417, 5230282, 47.1881, 5.94917, 260),
('25478', 'Randevillers', '32T', 312809, 5242681, 47.3108, 6.52333, 500),
('25479', 'Rang', '32T', 316232, 5255335, 47.4256, 6.56334, 290),
('25480', 'Rantechaux', '32T', 300816, 5221042, 47.1128, 6.37444, 750),
('25481', 'Raynans', '32T', 328356, 5266955, 47.5333, 6.71944, 350),
('25482', 'Recologne', '31T', 713880, 5239356, 47.2728, 5.82778, 230),
('25483', 'Reculfoz', '32T', 282241, 5176695, 46.7083, 6.15111, 1030),
('25485', 'Rémondans-Vaivre', '32T', 327425, 5249526, 47.3764, 6.71389, 412),
('25486', 'Remoray-Boujeons', '32T', 289354, 5183117, 46.7683, 6.24111, 907),
('25487', 'Renédale', '32T', 293145, 5210983, 47.02, 6.27805, 750),
('25488', 'Rennes-sur-Loue', '31T', 716874, 5210382, 47.0114, 5.85333, 255),
('25489', 'Reugney', '32T', 283582, 5210705, 47.0144, 6.1525, 700),
('25490', 'Rigney', '32T', 286860, 5252218, 47.3886, 6.17583, 250),
('25491', 'Rignosot', '32T', 288330, 5252227, 47.3892, 6.19528, 250),
('25492', 'Rillans', '32T', 301162, 5254343, 47.4122, 6.36417, 400),
('25493', 'La Rivière-Drugeon', '32T', 287709, 5194208, 46.8675, 6.21445, 820),
('25494', 'Rochejean', '32T', 293170, 5180481, 46.7458, 6.29222, 900),
('25495', 'Roche-lez-Beaupré', '32T', 281743, 5239888, 47.2761, 6.11417, 250),
('25496', 'Roche-lès-Clerval', '32T', 309824, 5249143, 47.3681, 6.48111, 300),
('25497', 'Roches-lès-Blamont', '32T', 338017, 5253148, 47.4117, 6.85277, 550),
('25498', 'Rognon', '32T', 297291, 5255866, 47.4247, 6.31222, 290),
('25499', 'Romain', '32T', 302110, 5257587, 47.4417, 6.37528, 350),
('25500', 'Ronchaux', '31T', 720126, 5215045, 47.0522, 5.89833, 342),
('25501', 'Rondefontaine', '32T', 284607, 5179237, 46.7319, 6.18084, 1036),
('25502', 'Roset-Fluans', '31T', 714234, 5227254, 47.1639, 5.82666, 240),
('25503', 'Rosières-sur-Barbèche', '32T', 323070, 5242889, 47.3156, 6.65889, 545),
('25504', 'Rosureux', '32T', 324763, 5231964, 47.2178, 6.68556, 450),
('25505', 'Rougemont', '32T', 300892, 5261831, 47.4794, 6.35723, 255),
('25506', 'Rougemontot', '32T', 293307, 5252914, 47.3969, 6.26083, 263),
('25507', 'Rouhe', '31T', 724976, 5218626, 47.0828, 5.96389, 375),
('25508', 'Roulans', '32T', 290643, 5244108, 47.3169, 6.22972, 360),
('25509', 'Routelle', '31T', 715945, 5227748, 47.1678, 5.84944, 221),
('25510', 'Ruffey-le-Château', '31T', 711632, 5241037, 47.2886, 5.79889, 230),
('25511', 'Rurey', '32T', 272975, 5220250, 47.0967, 6.00834, 390),
('25512', 'Le Russey', '32T', 327867, 5225786, 47.1631, 6.72889, 880),
('25513', 'Sainte-Anne', '31T', 727152, 5204212, 46.9525, 5.98528, 631),
('25514', 'Saint-Antoine', '32T', 296725, 5183851, 46.7772, 6.33722, 960),
('25515', 'Sainte-Colombe', '32T', 291748, 5195178, 46.8775, 6.26694, 824),
('25516', 'Saint-Georges-Armont', '32T', 315678, 5252386, 47.3989, 6.55723, 420),
('25517', 'Saint-Gorgon-Main', '32T', 296555, 5211205, 47.0231, 6.32277, 690),
('25518', 'Saint-Hilaire', '32T', 291660, 5246112, 47.3353, 6.24222, 350),
('25519', 'Saint-Hippolyte', '32T', 334748, 5242766, 47.3175, 6.81333, 380),
('25520', 'Saint-Juan', '32T', 300136, 5240811, 47.2903, 6.35667, 470),
('25521', 'Saint-Julien-lès-Montbéliard', '32T', 327736, 5265799, 47.5228, 6.71166, 360),
('25522', 'Saint-Julien-lès-Russey', '32T', 327879, 5231285, 47.2125, 6.72694, 868),
('25523', 'Sainte-Marie', '32T', 326437, 5264324, 47.5092, 6.695, 380),
('25524', 'Saint-Maurice-Colombier', '32T', 322550, 5256963, 47.4419, 6.64638, 310),
('25525', 'Saint-Point-Lac', '32T', 294210, 5187893, 46.8128, 6.30249, 860),
('25526', 'Sainte-Suzanne', '32T', 332051, 5263758, 47.5056, 6.76972, 320),
('25527', 'Saint-Vit', '31T', 713006, 5229187, 47.1817, 5.8114, 257),
('25528', 'Samson', '31T', 718624, 5215113, 47.0533, 5.87862, 318),
('25529', 'Sancey-le-Grand', '32T', 317289, 5240749, 47.2947, 6.58334, 500),
('25530', 'Sancey-le-Long', '32T', 318923, 5241965, 47.3061, 6.60444, 505),
('25531', 'Santoche', '32T', 311826, 5253312, 47.4061, 6.50583, 290),
('25532', 'Saône', '32T', 281742, 5234170, 47.2247, 6.11695, 390),
('25533', 'Saraz', '31T', 726735, 5209049, 46.9961, 5.98223, 507),
('25534', 'Sarrageois', '32T', 287133, 5178559, 46.7267, 6.21417, 940),
('25535', 'Saules', '32T', 287435, 5222681, 47.1233, 6.1975, 570),
('25536', 'Sauvagney', '31T', 719484, 5245342, 47.3247, 5.90472, 210),
('25537', 'Scey-Maisières', '32T', 278108, 5220365, 47.0994, 6.07583, 351),
('25538', 'Séchin', '32T', 294833, 5246124, 47.3364, 6.28417, 358),
('25539', 'Seloncourt', '32T', 338759, 5258750, 47.4622, 6.86056, 345),
('25540', 'Semondans', '32T', 326529, 5268121, 47.5433, 6.69473, 350),
('25541', 'Septfontaines', '32T', 285749, 5206917, 46.9811, 6.18277, 770),
('25542', 'Serre-les-Sapins', '31T', 721593, 5236210, 47.2419, 5.92806, 300),
('25544', 'Servin', '32T', 308180, 5242491, 47.3078, 6.46223, 500),
('25545', 'Silley-Amancey', '32T', 282833, 5212772, 47.0328, 6.14167, 622),
('25546', 'Silley-Bléfond', '32T', 297913, 5244657, 47.3242, 6.32556, 409),
('25547', 'Sochaux', '32T', 336666, 5264832, 47.5164, 6.83056, 320),
('25548', 'Solemont', '32T', 326545, 5245999, 47.3444, 6.70362, 510),
('25549', 'Sombacour', '32T', 291280, 5203600, 46.9531, 6.25694, 740),
('25550', 'La Sommette', '32T', 311450, 5229716, 47.1939, 6.51084, 715),
('25551', 'Soulce-Cernay', '32T', 338251, 5243349, 47.3236, 6.85944, 390),
('25552', 'Sourans', '32T', 321557, 5253255, 47.4083, 6.63472, 370),
('25553', 'Soye', '32T', 311446, 5257804, 47.4464, 6.49889, 310),
('25554', 'Surmont', '32T', 319463, 5238983, 47.2794, 6.61278, 680),
('25555', 'Taillecourt', '32T', 338218, 5262688, 47.4975, 6.85194, 340),
('25556', 'Tallans', '32T', 295533, 5255371, 47.4197, 6.28916, 260),
('25557', 'Tallenay', '32T', 275102, 5243383, 47.3053, 6.02472, 420),
('25558', 'Tarcenay', '32T', 280955, 5226564, 47.1561, 6.11028, 492),
('25559', 'Thiébouhans', '32T', 337175, 5238621, 47.2808, 6.84694, 805),
('25560', 'Thise', '32T', 279237, 5240939, 47.2847, 6.08056, 280),
('25561', 'Thoraise', '31T', 719964, 5228514, 47.1733, 5.90278, 250),
('25562', 'Thulay', '32T', 338704, 5254457, 47.4236, 6.8614, 500),
('25563', 'Thurey-le-Mont', '32T', 282897, 5250632, 47.3731, 6.12417, 240),
('25564', 'Torpes', '31T', 719117, 5228050, 47.1694, 5.89139, 250),
('25565', 'Touillon-et-Loutelet', '32T', 297758, 5185516, 46.7925, 6.35, 1020),
('25566', 'La Tour-de-Sçay', '32T', 290649, 5251927, 47.3872, 6.22612, 290),
('25567', 'Tournans', '32T', 298340, 5254656, 47.4142, 6.32666, 380),
('25569', 'Trépot', '32T', 283924, 5227630, 47.1667, 6.14889, 550),
('25570', 'Tressandans', '32T', 299283, 5263802, 47.4967, 6.335, 260),
('25571', 'Trévillers', '32T', 338757, 5238794, 47.2828, 6.86778, 776),
('25572', 'Trouvans', '32T', 299943, 5255528, 47.4225, 6.3475, 329),
('25573', 'Urtière', '32T', 343029, 5235806, 47.2569, 6.92528, 930),
('25574', 'Uzelle', '32T', 306765, 5260151, 47.4661, 6.43583, 390),
('25575', 'Vaire-Arcier', '32T', 284289, 5240474, 47.2822, 6.1475, 260),
('25576', 'Vaire-le-Petit', '32T', 284331, 5241059, 47.2875, 6.14778, 250),
('25578', 'Valdahon', '32T', 298798, 5224973, 47.1475, 6.34611, 650),
('25579', 'Val-de-Roulans', '32T', 293464, 5249015, 47.3619, 6.26472, 400),
('25580', 'Valentigney', '32T', 336724, 5259393, 47.4675, 6.83334, 326),
('25582', 'Valleroy', '32T', 282450, 5252163, 47.3867, 6.1175, 259),
('25583', 'Valonne', '32T', 323294, 5246127, 47.3447, 6.66056, 540),
('25584', 'Valoreille', '32T', 329445, 5241002, 47.3003, 6.74389, 730),
('25585', 'Vanclans', '32T', 299777, 5219625, 47.0997, 6.36139, 720),
('25586', 'Vandoncourt', '32T', 341854, 5259314, 47.4681, 6.90139, 420),
('25587', 'Vauchamps', '32T', 291349, 5239107, 47.2722, 6.24139, 400),
('25588', 'Vaucluse', '32T', 324897, 5236470, 47.2583, 6.68556, 500),
('25589', 'Vauclusotte', '32T', 328727, 5238737, 47.2797, 6.73527, 452),
('25590', 'Vaudrivillers', '32T', 305334, 5239710, 47.2819, 6.42583, 516),
('25591', 'Vaufrey', '32T', 343237, 5245994, 47.3486, 6.92445, 420),
('25592', 'Vaux-et-Chantegrue', '32T', 290407, 5187715, 46.81, 6.25278, 805),
('25593', 'Vaux-les-Prés', '31T', 718313, 5235531, 47.2369, 5.88444, 250),
('25594', 'Velesmes-Essarts', '31T', 717722, 5230440, 47.1914, 5.87417, 286),
('25595', 'Vellerot-lès-Belvoir', '32T', 318806, 5247036, 47.3517, 6.60083, 600),
('25596', 'Vellerot-lès-Vercel', '32T', 306811, 5235366, 47.2433, 6.44722, 630),
('25597', 'Vellevans', '32T', 310880, 5242805, 47.3114, 6.49778, 510),
('25598', 'Venise', '32T', 281636, 5247773, 47.3469, 6.10889, 240),
('25599', 'Vennans', '32T', 291135, 5245512, 47.3297, 6.23556, 317),
('25600', 'Vennes', '32T', 314180, 5225459, 47.1564, 6.5486, 802),
('25601', 'Vercel-Villedieu-le-Camp', '32T', 302955, 5228881, 47.1839, 6.39917, 650),
('25602', 'Vergranne', '32T', 303242, 5253840, 47.4083, 6.39194, 450),
('25604', 'Verne', '32T', 300312, 5252796, 47.3981, 6.35361, 380),
('25605', 'Vernierfontaine', '32T', 295047, 5220775, 47.1086, 6.29861, 711),
('25607', 'Vernois-lès-Belvoir', '32T', 321707, 5244352, 47.3283, 6.64028, 515),
('25608', 'Le Vernoy', '32T', 325160, 5269923, 47.5592, 6.67583, 389),
('25609', 'Verrières-de-Joux', '32T', 305683, 5196902, 46.8972, 6.44889, 910),
('25610', 'Verrières-du-Grosbois', '32T', 293828, 5231201, 47.2019, 6.27777, 600),
('25611', 'La Vèze', '32T', 277920, 5232767, 47.2108, 6.06722, 392),
('25612', 'Vieilley', '32T', 279331, 5246809, 47.3375, 6.07889, 250),
('25613', 'Viéthorey', '32T', 306175, 5255628, 47.4253, 6.42999, 436),
('25614', 'Vieux-Charmont', '32T', 337380, 5265677, 47.5242, 6.83972, 330),
('25615', 'Villars-lès-Blamont', '32T', 339431, 5248846, 47.3733, 6.87306, 600),
('25616', 'Villars-Saint-Georges', '31T', 714364, 5223086, 47.1264, 5.82639, 285),
('25617', 'Villars-sous-Dampjoux', '32T', 330482, 5246379, 47.3489, 6.75555, 370),
('25618', 'Villars-sous-Écot', '32T', 326423, 5254653, 47.4222, 6.69862, 360),
('25619', 'Les Villedieu', '32T', 289472, 5178601, 46.7278, 6.24473, 940),
('25620', 'Ville-du-Pont', '32T', 308267, 5208746, 47.0044, 6.47778, 790),
('25621', 'Villeneuve-d''Amont', '32T', 274125, 5202711, 46.9394, 6.03222, 670),
('25622', 'Villers-Buzon', '31T', 715767, 5234356, 47.2272, 5.85028, 240),
('25623', 'Villers-Chief', '32T', 306348, 5233435, 47.2258, 6.44194, 648),
('25624', 'Villers-Grélot', '32T', 290444, 5248535, 47.3567, 6.225, 370),
('25625', 'Villers-la-Combe', '32T', 307540, 5234478, 47.2356, 6.45722, 630),
('25626', 'Villers-Saint-Martin', '32T', 304363, 5246541, 47.3431, 6.41, 340),
('25627', 'Villers-sous-Chalamont', '32T', 274737, 5198731, 46.9039, 6.04222, 710),
('25628', 'Villers-sous-Montrond', '32T', 279264, 5225329, 47.1444, 6.08861, 478),
('25629', 'Voillans', '32T', 304794, 5251285, 47.3858, 6.41361, 390),
('25630', 'Voires', '32T', 291253, 5219671, 47.0975, 6.24917, 630),
('25631', 'Vorges-les-Pins', '31T', 721940, 5226950, 47.1586, 5.92805, 320),
('25632', 'Voujeaucourt', '32T', 332289, 5260353, 47.475, 6.77417, 317),
('25633', 'Vuillafans', '32T', 288727, 5216299, 47.0664, 6.2175, 350),
('25634', 'Vuillecin', '32T', 296067, 5201858, 46.9389, 6.32056, 810),
('25635', 'Vyt-lès-Belvoir', '32T', 320369, 5246617, 47.3483, 6.62167, 570),
('26001', 'Aix-en-Diois', '31T', 691436, 4953361, 44.7081, 5.41667, 580),
('26002', 'Albon', '31T', 645247, 5011988, 45.2464, 4.85083, 174),
('26003', 'Aleyrac', '31T', 654167, 4928960, 44.4975, 4.93917, 480),
('26004', 'Alixan', '31T', 659717, 4982076, 44.9742, 5.02556, 184),
('26005', 'Allan', '31T', 641994, 4928899, 44.4994, 4.78612, 150),
('26006', 'Allex', '31T', 651553, 4958383, 44.7628, 4.915, 160),
('26007', 'Ambonil', '31T', 650766, 4961945, 44.795, 4.90612, 140),
('26008', 'Ancône', '31T', 637179, 4938211, 44.5842, 4.72805, 72),
('26009', 'Andancette', '31T', 641768, 5011539, 45.2431, 4.80639, 140),
('26010', 'Anneyron', '31T', 648211, 5014897, 45.2719, 4.88945, 210),
('26011', 'Aouste-sur-Sye', '31T', 662852, 4953440, 44.7158, 5.05611, 203),
('26012', 'Arnayon', '31T', 684206, 4928785, 44.4889, 5.31667, 800),
('26013', 'Arpavon', '31T', 680684, 4915501, 44.3703, 5.26778, 522),
('26014', 'Arthémonay', '31T', 661629, 5000837, 45.1425, 5.05584, 360),
('26015', 'Aubenasson', '31T', 669494, 4950369, 44.6867, 5.13889, 280),
('26016', 'Aubres', '31T', 672652, 4916025, 44.3769, 5.16722, 300),
('26017', 'Aucelon', '31T', 685871, 4943934, 44.6247, 5.34306, 740),
('26018', 'Aulan', '31T', 693893, 4899544, 44.2233, 5.4275, 780),
('26019', 'Aurel', '31T', 681971, 4951635, 44.695, 5.29667, 460),
('26020', 'La Répara-Auriples', '31T', 658914, 4947970, 44.6675, 5.00472, 321),
('26021', 'Autichamp', '31T', 655664, 4949372, 44.6808, 4.96417, 330),
('26022', 'Ballons', '31T', 710927, 4903684, 44.2558, 5.64222, 800),
('26023', 'Barbières', '31T', 668885, 4980151, 44.9547, 5.14111, 440),
('26024', 'Barcelonne', '31T', 661944, 4970276, 44.8675, 5.05001, 300),
('26025', 'Barnave', '31T', 687852, 4947851, 44.6594, 5.36944, 580),
('26026', 'Barret-de-Lioure', '31T', 699119, 4895655, 44.1869, 5.49139, 960),
('26027', 'Barsac', '31T', 681287, 4955569, 44.7306, 5.28944, 400),
('26028', 'Bathernay', '31T', 656825, 5005101, 45.1819, 4.99611, 373),
('26030', 'La Bâtie-des-Fonds', '31T', 709651, 4932275, 44.5133, 5.63778, 1060),
('26031', 'La Bâtie-Rolland', '31T', 648239, 4935028, 44.5533, 4.86639, 170),
('26032', 'La Baume-Cornillane', '31T', 661124, 4965315, 44.8231, 5.03806, 320),
('26033', 'La Baume-de-Transit', '31T', 648737, 4911238, 44.3392, 4.86583, 120),
('26034', 'La Baume-d''Hostun', '31T', 675302, 4991595, 45.0561, 5.22639, 240),
('26035', 'Beaufort-sur-Gervanne', '31T', 669295, 4960430, 44.7772, 5.13972, 380),
('26036', 'Beaumont-en-Diois', '31T', 696453, 4938255, 44.5708, 5.47416, 660),
('26037', 'Beaumont-lès-Valence', '31T', 653359, 4969324, 44.8608, 4.94111, 140),
('26038', 'Beaumont-Monteux', '31T', 651319, 4986843, 45.0189, 4.92055, 134),
('26039', 'Beauregard-Baret', '31T', 672183, 4984716, 44.995, 5.18445, 440),
('26040', 'Beaurières', '31T', 703138, 4938399, 44.5703, 5.55833, 740),
('26041', 'Beausemblant', '31T', 643900, 5008900, 45.2189, 4.83278, 150),
('26042', 'Beauvallon', '31T', 650164, 4968877, 44.8575, 4.90056, 120),
('26043', 'Beauvoisin', '31T', 676420, 4907696, 44.3011, 5.21166, 570),
('26045', 'La Bégude-de-Mazenc', '31T', 653687, 4934290, 44.5456, 4.93473, 220),
('26046', 'Bellecombe-Tarendol', '31T', 687424, 4913715, 44.3525, 5.35166, 620),
('26047', 'Bellegarde-en-Diois', '31T', 692725, 4934468, 44.5378, 5.42584, 847),
('26048', 'Bénivay-Ollon', '31T', 674700, 4907341, 44.2983, 5.19, 430),
('26049', 'Bésayes', '31T', 663756, 4980974, 44.9633, 5.07639, 250),
('26050', 'Bésignan', '31T', 685466, 4910108, 44.3206, 5.32583, 550),
('26051', 'Bézaudun-sur-Bîne', '31T', 671784, 4940456, 44.5969, 5.16445, 500),
('26052', 'Bonlieu-sur-Roubion', '31T', 649259, 4939620, 44.5944, 4.88056, 150),
('26054', 'Bouchet', '31T', 649390, 4906930, 44.3003, 4.87278, 105),
('26055', 'Boulc', '31T', 703348, 4947178, 44.6492, 5.56444, 800),
('26056', 'Bourdeaux', '31T', 669301, 4939217, 44.5864, 5.13278, 410),
('26057', 'Bourg-de-Péage', '31T', 661618, 4989195, 45.0378, 5.05194, 160),
('26058', 'Bourg-lès-Valence', '31T', 649238, 4978458, 44.9439, 4.89167, 125),
('26059', 'Bouvante', '31T', 678983, 4981321, 44.9628, 5.26945, 500),
('26060', 'Bouvières', '31T', 676016, 4931646, 44.5167, 5.21472, 620),
('26061', 'Bren', '31T', 653259, 4999950, 45.1364, 4.94916, 283),
('26062', 'Brette', '31T', 683343, 4939754, 44.5878, 5.30972, 700),
('26063', 'Buis-les-Baronnies', '31T', 681328, 4905051, 44.2761, 5.27223, 380),
('26064', 'Chabeuil', '31T', 659243, 4973790, 44.8997, 5.01694, 220),
('26065', 'Chabrillan', '31T', 653767, 4954082, 44.7236, 4.94166, 240),
('26066', 'Le Chaffal', '31T', 672202, 4972581, 44.8858, 5.18055, 933),
('26067', 'Chalancon', '31T', 686372, 4931101, 44.5092, 5.34472, 760),
('26068', 'Le Chalon', '31T', 664190, 5002354, 45.1556, 5.08889, 360),
('26069', 'Chamaloc', '31T', 688457, 4963310, 44.7983, 5.38277, 560),
('26070', 'Chamaret', '31T', 649895, 4917747, 44.3975, 4.88222, 180),
('26071', 'Chanos-Curson', '31T', 650770, 4991554, 45.0614, 4.915, 157),
('26072', 'Chantemerle-les-Blés', '31T', 649240, 4997075, 45.1114, 4.89722, 210),
('26073', 'Chantemerle-lès-Grignan', '31T', 646185, 4918372, 44.4039, 4.83584, 200),
('26074', 'La Chapelle-en-Vercors', '31T', 690384, 4982083, 44.9667, 5.41417, 880),
('26075', 'La Charce', '31T', 694757, 4927086, 44.4708, 5.44861, 617),
('26076', 'Charens', '31T', 699408, 4934794, 44.5389, 5.51, 860),
('26077', 'Charmes-sur-l''Herbasse', '31T', 658444, 5001497, 45.1492, 5.01556, 243),
('26078', 'Charols', '31T', 654819, 4939565, 44.5928, 4.95055, 210),
('26079', 'Charpey', '31T', 664972, 4978011, 44.9364, 5.09083, 320),
('26080', 'Chastel-Arnaud', '31T', 675266, 4947899, 44.6631, 5.21083, 500),
('26081', 'Châteaudouble', '31T', 665409, 4973822, 44.8986, 5.095, 380),
('26082', 'Châteauneuf-de-Bordette', '31T', 672871, 4911090, 44.3325, 5.16833, 540),
('26083', 'Châteauneuf-de-Galaure', '31T', 653587, 5010765, 45.2336, 4.95667, 255),
('26084', 'Châteauneuf-sur-Isère', '31T', 652903, 4986541, 45.0158, 4.94055, 150),
('26085', 'Châteauneuf-du-Rhône', '31T', 636460, 4927268, 44.4858, 4.71611, 100),
('26086', 'Châtillon-en-Diois', '31T', 696785, 4952008, 44.6944, 5.48361, 560),
('26087', 'Châtillon-Saint-Jean', '31T', 667729, 4994942, 45.0881, 5.1314, 200),
('26088', 'Chatuzange-le-Goubet', '31T', 664855, 4985943, 45.0078, 5.09194, 210),
('26089', 'Chaudebonne', '31T', 676315, 4927146, 44.4761, 5.21695, 680),
('26090', 'La Chaudière', '31T', 675670, 4944390, 44.6314, 5.21472, 880),
('26091', 'Chauvac-Laux-Montaux', '31T', 701371, 4910548, 44.3203, 5.52527, 860),
('26092', 'Chavannes', '31T', 651704, 4996423, 45.105, 4.92833, 190),
('26093', 'Clansayes', '31T', 644073, 4914806, 44.3722, 4.80834, 250),
('26094', 'Claveyson', '31T', 651652, 5005006, 45.1822, 4.93027, 230),
('26095', 'Cléon-d''Andran', '31T', 653448, 4941570, 44.6111, 4.93389, 185),
('26096', 'Clérieux', '31T', 654334, 4993461, 45.0778, 4.96083, 160),
('26097', 'Cliousclat', '31T', 645229, 4953050, 44.7161, 4.83361, 220),
('26098', 'Cobonne', '31T', 664200, 4958445, 44.7606, 5.07472, 310),
('26099', 'Colonzelle', '31T', 651321, 4917317, 44.3933, 4.89999, 170),
('26100', 'Combovin', '31T', 664036, 4970885, 44.8725, 5.07667, 360),
('26101', 'Comps', '31T', 667402, 4934166, 44.5414, 5.10723, 680),
('26102', 'Condillac', '31T', 643570, 4944492, 44.6394, 4.81028, 180),
('26103', 'Condorcet', '31T', 674936, 4919204, 44.405, 5.19694, 360),
('26104', 'Cornillac', '31T', 689937, 4924040, 44.4447, 5.38694, 600),
('26105', 'Cornillon-sur-l''Oule', '31T', 688233, 4925597, 44.4592, 5.36611, 540),
('26106', 'La Coucourde', '31T', 641343, 4945555, 44.6494, 4.78251, 100),
('26107', 'Crépol', '31T', 662654, 5004321, 45.1736, 5.07, 340),
('26108', 'Crest', '31T', 660132, 4954823, 44.7289, 5.02222, 190),
('26110', 'Crozes-Hermitage', '31T', 645402, 4994732, 45.0911, 4.84778, 160),
('26111', 'Crupies', '31T', 672528, 4935690, 44.5539, 5.17222, 480),
('26112', 'Curnier', '31T', 677939, 4917062, 44.385, 5.23389, 340),
('26113', 'Die', '31T', 687429, 4958617, 44.7564, 5.36806, 402),
('26114', 'Dieulefit', '31T', 663985, 4932165, 44.5242, 5.06361, 379),
('26115', 'Divajeu', '31T', 659697, 4951941, 44.7031, 5.01583, 320),
('26116', 'Donzère', '31T', 636293, 4922603, 44.4439, 4.71278, 72),
('26117', 'Échevis', '31T', 687889, 4988618, 45.0261, 5.385, 360),
('26118', 'Épinouze', '31T', 651202, 5019260, 45.3106, 4.92889, 210),
('26119', 'Érôme', '31T', 643210, 4997894, 45.12, 4.82084, 132),
('26121', 'Espeluche', '31T', 644824, 4930783, 44.5158, 4.82222, 160),
('26122', 'Espenel', '31T', 677013, 4950108, 44.6825, 5.23361, 360),
('26123', 'Establet', '31T', 693473, 4930846, 44.505, 5.43389, 780),
('26124', 'Étoile-sur-Rhône', '31T', 649604, 4966518, 44.8364, 4.89278, 150),
('26125', 'Eurre', '31T', 657344, 4958151, 44.7594, 4.98806, 210),
('26126', 'Eygalayes', '31T', 708146, 4901803, 44.2397, 5.60667, 780),
('26127', 'Eygaliers', '31T', 682170, 4901091, 44.2403, 5.28139, 380),
('26128', 'Eygluy-Escoulin', '31T', 673544, 4961933, 44.7897, 5.19389, 620),
('26129', 'Eymeux', '31T', 671581, 4994026, 45.0789, 5.18, 160),
('26130', 'Eyroles', '31T', 677197, 4920747, 44.4183, 5.22584, 560),
('26131', 'Eyzahut', '31T', 659678, 4936658, 44.5656, 5.01083, 500),
('26133', 'Fay-le-Clos', '31T', 649713, 5008511, 45.2142, 4.90666, 262),
('26134', 'Félines-sur-Rimandoule', '31T', 663138, 4938627, 44.5825, 5.055, 360),
('26135', 'Ferrassières', '31T', 698113, 4889942, 44.1358, 5.47667, 940),
('26136', 'Val-Maravel', '31T', 703640, 4940700, 44.5908, 5.56555, 826),
('26137', 'Francillon-sur-Roubion', '31T', 665337, 4943253, 44.6236, 5.08417, 360),
('26138', 'La Garde-Adhémar', '31T', 639685, 4917026, 44.3931, 4.75388, 170),
('26139', 'Génissieux', '31T', 664351, 4994452, 45.0844, 5.08834, 200),
('26140', 'Geyssans', '31T', 664682, 4998537, 45.1211, 5.09388, 320),
('26141', 'Gigors-et-Lozeron', '31T', 666653, 4962245, 44.7942, 5.10694, 600),
('26142', 'Glandage', '31T', 705787, 4951579, 44.6881, 5.59694, 860),
('26143', 'Le Grand-Serre', '31T', 665078, 5015222, 45.2711, 5.10444, 450),
('26144', 'Grane', '31T', 652141, 4954907, 44.7314, 4.92139, 170),
('26145', 'Les Granges-Gontardes', '31T', 640223, 4919816, 44.4181, 4.76139, 90),
('26146', 'Grignan', '31T', 651981, 4920357, 44.4206, 4.90917, 190),
('26147', 'Gumiane', '31T', 680284, 4930713, 44.5072, 5.26806, 772),
('26148', 'Hauterives', '31T', 658868, 5013334, 45.2556, 5.02472, 300),
('26149', 'Hostun', '31T', 673429, 4989660, 45.0392, 5.20195, 300),
('26150', 'Izon-la-Bruisse', '31T', 706978, 4903619, 44.2564, 5.59277, 1040),
('26152', 'Jonchères', '31T', 690781, 4938209, 44.5719, 5.40277, 911),
('26153', 'Laborel', '31T', 707096, 4907607, 44.2922, 5.59583, 827),
('26154', 'Lachau', '31T', 710525, 4901015, 44.2319, 5.63611, 720),
('26155', 'Lapeyrouse-Mornay', '31T', 656412, 5020900, 45.3242, 4.99583, 258),
('26156', 'Larnage', '31T', 646719, 4995473, 45.0975, 4.86472, 200),
('26157', 'La Laupie', '31T', 646303, 4940571, 44.6036, 4.8436, 160),
('26159', 'Laval-d''Aix', '31T', 692495, 4954041, 44.7139, 5.43028, 560),
('26160', 'Laveyron', '31T', 643048, 5007955, 45.2106, 4.82166, 150),
('26161', 'Lemps', '31T', 692741, 4913747, 44.3514, 5.41833, 814),
('26162', 'Lens-Lestang', '31T', 660223, 5017537, 45.2931, 5.04334, 300),
('26163', 'Léoncel', '31T', 672967, 4975165, 44.9089, 5.19111, 913),
('26164', 'Lesches-en-Diois', '31T', 700510, 4941282, 44.5969, 5.52639, 1024),
('26165', 'Livron-sur-Drôme', '31T', 645770, 4959267, 44.7719, 4.84222, 130),
('26166', 'Loriol-sur-Drôme', '31T', 644127, 4957038, 44.7522, 4.82083, 120),
('26167', 'Luc-en-Diois', '31T', 694406, 4943196, 44.6158, 5.45027, 562),
('26168', 'Lus-la-Croix-Haute', '31T', 714388, 4949388, 44.6658, 5.70444, 1020),
('26169', 'Malataverne', '31T', 639199, 4927357, 44.4861, 4.75056, 110),
('26170', 'Malissard', '31T', 654350, 4973763, 44.9006, 4.955, 145),
('26171', 'Manas', '31T', 657423, 4940431, 44.6, 4.98361, 230),
('26172', 'Manthes', '31T', 657385, 5018577, 45.3031, 5.0075, 240),
('26173', 'Marches', '31T', 666243, 4982274, 44.9744, 5.10834, 320),
('26174', 'Margès', '31T', 660148, 5001509, 45.1489, 5.03723, 285),
('26175', 'Marignac-en-Diois', '31T', 684447, 4963595, 44.8019, 5.33222, 614),
('26176', 'Marsanne', '31T', 648517, 4945036, 44.6433, 4.87278, 260),
('26177', 'Marsaz', '31T', 652962, 4997781, 45.1169, 4.94473, 228),
('26178', 'Menglon', '31T', 695149, 4948562, 44.6639, 5.46167, 640),
('26179', 'Mercurol', '31T', 649044, 4993304, 45.0775, 4.89361, 200),
('26180', 'Mérindol-les-Oliviers', '31T', 672114, 4904494, 44.2733, 5.15666, 420),
('26181', 'Mévouillon', '31T', 696664, 4901912, 44.2439, 5.46305, 840),
('26182', 'Mirabel-aux-Baronnies', '31T', 667305, 4908661, 44.3119, 5.09778, 260),
('26183', 'Mirabel-et-Blacons', '31T', 665553, 4952861, 44.71, 5.09, 220),
('26184', 'Miribel', '31T', 665723, 5007241, 45.1992, 5.11, 433),
('26185', 'Mirmande', '31T', 645407, 4950985, 44.6975, 4.83527, 240),
('26186', 'Miscon', '31T', 700073, 4944728, 44.6281, 5.52223, 812),
('26187', 'Molières-Glandaz', '31T', 690102, 4955267, 44.7256, 5.40055, 440),
('26188', 'Mollans-sur-Ouvèze', '31T', 675098, 4900744, 44.2389, 5.19277, 290),
('26189', 'Montauban-sur-l''Ouvèze', '31T', 699575, 4905459, 44.275, 5.50083, 750),
('26190', 'Montaulieu', '31T', 677249, 4913925, 44.3569, 5.22417, 500),
('26191', 'Montboucher-sur-Jabron', '31T', 643448, 4935043, 44.5544, 4.8061, 150),
('26192', 'Montbrison-sur-Lez', '31T', 661081, 4922799, 44.4406, 5.02417, 280),
('26193', 'Montbrun-les-Bains', '31T', 695247, 4894334, 44.1761, 5.4425, 620),
('26194', 'Montchenu', '31T', 659556, 5006774, 45.1964, 5.03138, 380),
('26195', 'Montclar-sur-Gervanne', '31T', 669514, 4957132, 44.7475, 5.14139, 400),
('26196', 'Montéléger', '31T', 652700, 4968413, 44.8528, 4.9325, 140),
('26197', 'Montélier', '31T', 659998, 4977853, 44.9361, 5.02778, 210),
('26198', 'Montélimar', '31T', 638786, 4935281, 44.5575, 4.7475, 79),
('26199', 'Montferrand-la-Fare', '31T', 695170, 4914776, 44.36, 5.44917, 580),
('26200', 'Montfroc', '31T', 710861, 4894694, 44.175, 5.63778, 760),
('26201', 'Montguers', '31T', 695971, 4906524, 44.2856, 5.45611, 650),
('26202', 'Montjoux', '31T', 666659, 4929547, 44.5, 5.09639, 460),
('26203', 'Montjoyer', '31T', 647327, 4926548, 44.4772, 4.85249, 330),
('26204', 'Montlaur-en-Diois', '31T', 692543, 4945025, 44.6328, 5.4275, 530),
('26205', 'Montmaur-en-Diois', '31T', 688477, 4949846, 44.6772, 5.37805, 520),
('26206', 'Montmeyran', '31T', 655980, 4966300, 44.8331, 4.97333, 190),
('26207', 'Montmiral', '31T', 668888, 5002353, 45.1544, 5.14861, 364),
('26208', 'Montoison', '31T', 653305, 4962407, 44.7986, 4.93834, 190),
('26209', 'Montréal-les-Sources', '31T', 683195, 4919153, 44.4025, 5.30056, 600),
('26210', 'Montrigaud', '31T', 667319, 5009630, 45.2203, 5.13111, 462),
('26211', 'Montségur-sur-Lauzon', '31T', 648194, 4913695, 44.3614, 4.85972, 150),
('26212', 'Montvendre', '31T', 659652, 4970589, 44.8708, 5.02111, 200),
('26213', 'Moras-en-Valloire', '31T', 656415, 5017256, 45.2914, 4.99472, 280),
('26214', 'Mornans', '31T', 668476, 4942932, 44.62, 5.12361, 461),
('26215', 'La Motte-Chalancon', '31T', 689145, 4928464, 44.4847, 5.37862, 550),
('26216', 'La Motte-de-Galaure', '31T', 649644, 5006811, 45.1989, 4.90527, 207),
('26217', 'La Motte-Fanjas', '31T', 678663, 4991163, 45.0514, 5.26889, 230),
('26218', 'Mours-Saint-Eusèbe', '31T', 661810, 4992844, 45.0706, 5.05555, 160),
('26219', 'Mureils', '31T', 651622, 5008093, 45.21, 4.93083, 228),
('26220', 'Nyons', '31T', 670203, 4913984, 44.3592, 5.13583, 280),
('26221', 'Omblèze', '31T', 675214, 4970007, 44.8619, 5.21777, 710),
('26222', 'Orcinas', '31T', 669520, 4935055, 44.5489, 5.13416, 622),
('26223', 'Oriol-en-Royans', '31T', 679162, 4985094, 44.9967, 5.27306, 300),
('26224', 'Ourches', '31T', 661551, 4963164, 44.8036, 5.04277, 323),
('26225', 'Parnans', '31T', 668864, 4997504, 45.1108, 5.14667, 240),
('26226', 'Le Pègue', '31T', 663101, 4921614, 44.4294, 5.04916, 400),
('26227', 'Pelonne', '31T', 690445, 4917261, 44.3836, 5.39083, 600),
('26228', 'Pennes-le-Sec', '31T', 683652, 4945198, 44.6367, 5.31556, 780),
('26229', 'La Penne-sur-l''Ouvèze', '31T', 677518, 4903187, 44.2603, 5.22389, 385),
('26231', 'Peyrins', '31T', 661135, 4995328, 45.0931, 5.04778, 240),
('26232', 'Peyrus', '31T', 666160, 4975324, 44.9119, 5.105, 400),
('26233', 'Piégon', '31T', 669636, 4907671, 44.3025, 5.12667, 340),
('26234', 'Piégros-la-Clastre', '31T', 666112, 4951702, 44.6994, 5.09667, 240),
('26235', 'Pierrelatte', '31T', 635143, 4915140, 44.3769, 4.69639, 55),
('26236', 'Pierrelongue', '31T', 676944, 4901442, 44.2447, 5.21611, 304),
('26238', 'Les Pilles', '31T', 674434, 4916473, 44.3806, 5.18972, 320),
('26239', 'Plaisians', '31T', 685087, 4900000, 44.2297, 5.31751, 640),
('26240', 'Plan-de-Baix', '31T', 671125, 4964400, 44.8125, 5.16416, 720),
('26241', 'Le Poët-Célard', '31T', 666723, 4940787, 44.6011, 5.10083, 520),
('26242', 'Le Poët-en-Percip', '31T', 690972, 4903010, 44.2553, 5.39223, 1000),
('26243', 'Le Poët-Laval', '31T', 660071, 4933240, 44.5347, 5.01472, 340),
('26244', 'Le Poët-Sigillat', '31T', 684559, 4915517, 44.3694, 5.31638, 760),
('26245', 'Pommerol', '31T', 696478, 4922814, 44.4319, 5.46861, 980),
('26246', 'Ponet-et-Saint-Auban', '31T', 683152, 4961983, 44.7878, 5.31528, 460),
('26247', 'Ponsas', '31T', 644593, 5002433, 45.1606, 4.83973, 140),
('26248', 'Pontaix', '31T', 679024, 4957791, 44.7511, 5.26166, 360),
('26249', 'Pont-de-Barret', '31T', 659623, 4940670, 44.6017, 5.01139, 250),
('26250', 'Pont-de-l''Isère', '31T', 647547, 4985211, 45.005, 4.87222, 125),
('26251', 'Portes-en-Valdaine', '31T', 651831, 4932456, 44.5294, 4.91083, 227),
('26252', 'Portes-lès-Valence', '31T', 648216, 4970500, 44.8725, 4.87639, 107),
('26253', 'Poyols', '31T', 691950, 4941239, 44.5989, 5.41861, 620),
('26254', 'Pradelle', '31T', 681757, 4941995, 44.6083, 5.29055, 520),
('26255', 'Les Prés', '31T', 704989, 4933639, 44.5269, 5.57972, 860),
('26256', 'Propiac', '31T', 675423, 4905199, 44.2789, 5.19833, 360),
('26257', 'Puygiron', '31T', 646786, 4933852, 44.5431, 4.84777, 170),
('26258', 'Puy-Saint-Martin', '31T', 656379, 4943493, 44.6278, 4.97139, 220),
('26259', 'Ratières', '31T', 654620, 5005108, 45.1825, 4.96806, 387),
('26261', 'Réauville', '31T', 646792, 4922862, 44.4442, 4.84473, 260),
('26262', 'Recoubeau-Jansac', '31T', 691195, 4947363, 44.6542, 5.41139, 500),
('26263', 'Reilhanette', '31T', 693474, 4893417, 44.1683, 5.42, 600),
('26264', 'Rémuzat', '31T', 687632, 4920361, 44.4122, 5.35667, 460),
('26266', 'Rimon-et-Savel', '31T', 683083, 4948147, 44.6633, 5.30944, 1000),
('26267', 'Rioms', '31T', 696249, 4905389, 44.2753, 5.45916, 900),
('26268', 'Rochebaudin', '31T', 661225, 4938332, 44.5803, 5.03083, 320),
('26269', 'Rochebrune', '31T', 678971, 4911718, 44.3367, 5.245, 580),
('26270', 'Rochechinard', '31T', 677367, 4988965, 45.0319, 5.25166, 480),
('26271', 'La Roche-de-Glun', '31T', 645469, 4986028, 45.0128, 4.84611, 118),
('26272', 'Rochefort-en-Valdaine', '31T', 647783, 4930788, 44.5153, 4.85944, 230),
('26273', 'Rochefort-Samson', '31T', 669538, 4981990, 44.9711, 5.15, 380),
('26274', 'Rochefourchat', '31T', 678195, 4940784, 44.5983, 5.24528, 844),
('26275', 'Rochegude', '31T', 646080, 4901268, 44.25, 4.82973, 130),
('26276', 'Roche-Saint-Secret-Béconne', '31T', 661267, 4926879, 44.4772, 5.02778, 350),
('26277', 'La Roche-sur-Grane', '31T', 653745, 4949481, 44.6822, 4.94, 300),
('26278', 'La Roche-sur-le-Buis', '31T', 684603, 4905328, 44.2778, 5.31333, 562),
('26279', 'La Rochette-du-Buis', '31T', 693121, 4904617, 44.2692, 5.41972, 760),
('26281', 'Romans-sur-Isère', '31T', 661639, 4990091, 45.0458, 5.0525, 160),
('26282', 'Romeyer', '31T', 690457, 4961115, 44.7781, 5.40722, 500),
('26283', 'Rottier', '31T', 692328, 4927724, 44.4772, 5.41833, 660),
('26284', 'Roussas', '31T', 643461, 4921460, 44.4322, 4.8025, 120),
('26285', 'Rousset-les-Vignes', '31T', 664081, 4920466, 44.4189, 5.06111, 460),
('26286', 'Roussieux', '31T', 697099, 4911777, 44.3325, 5.47222, 867),
('26287', 'Roynac', '31T', 653829, 4945006, 44.6419, 4.93972, 200),
('26288', 'Sahune', '31T', 680414, 4920434, 44.4147, 5.26611, 357);
INSERT INTO `ods_communes` (`oc_code_insee`, `oc_nom`, `oc_secteur`, `oc_x_utm`, `oc_y_utm`, `oc_latitude`, `oc_longitude`, `oc_altitude`) VALUES
('26289', 'Saillans', '31T', 674039, 4951725, 44.6978, 5.19666, 280),
('26290', 'Saint-Agnan-en-Vercors', '31T', 691605, 4978630, 44.9353, 5.42833, 800),
('26291', 'Saint-Andéol', '31T', 678592, 4963059, 44.7986, 5.25805, 500),
('26292', 'Saint-Auban-sur-l''Ouvèze', '31T', 692682, 4906735, 44.2883, 5.415, 620),
('26293', 'Saint-Avit', '31T', 654776, 5006749, 45.1972, 4.97056, 350),
('26294', 'Saint-Bardoux', '31T', 655425, 4994475, 45.0867, 4.975, 266),
('26295', 'Saint-Barthélemy-de-Vals', '31T', 647187, 5003573, 45.1703, 4.87305, 170),
('26296', 'Saint-Benoit-en-Diois', '31T', 679959, 4947935, 44.6622, 5.26999, 390),
('26297', 'Saint-Bonnet-de-Valclérieux', '31T', 668308, 5006908, 45.1956, 5.14278, 405),
('26298', 'Saint-Christophe-et-le-Laris', '31T', 662701, 5008429, 45.2106, 5.07194, 340),
('26299', 'Sainte-Croix', '31T', 680576, 4959749, 44.7683, 5.28195, 390),
('26300', 'Saint-Dizier-en-Diois', '31T', 696802, 4931872, 44.5133, 5.47612, 1100),
('26301', 'Saint-Donat-sur-l''Herbasse', '31T', 656138, 4998414, 45.1219, 4.98528, 210),
('26302', 'Sainte-Eulalie-en-Royans', '31T', 684426, 4990988, 45.0483, 5.34195, 280),
('26303', 'Sainte-Euphémie-sur-Ouvèze', '31T', 689668, 4908160, 44.3019, 5.37778, 533),
('26304', 'Saint-Ferréol-Trente-Pas', '31T', 676504, 4921809, 44.4281, 5.2175, 420),
('26305', 'Saint-Gervais-sur-Roubion', '31T', 650019, 4938218, 44.5817, 4.88972, 170),
('26306', 'Sainte-Jalle', '31T', 682023, 4912760, 44.3453, 5.28362, 403),
('26307', 'Saint-Jean-en-Royans', '31T', 680669, 4987576, 45.0186, 5.29305, 280),
('26308', 'Saint-Julien-en-Quint', '31T', 681044, 4967328, 44.8364, 5.29055, 560),
('26309', 'Saint-Julien-en-Vercors', '31T', 692929, 4991425, 45.05, 5.44999, 905),
('26310', 'Saint-Laurent-d''Onay', '31T', 665115, 5005435, 45.1831, 5.10167, 379),
('26311', 'Saint-Laurent-en-Royans', '31T', 683350, 4988795, 45.0289, 5.32749, 320),
('26312', 'Saint-Marcel-lès-Sauzet', '31T', 643237, 4939607, 44.5956, 4.80472, 111),
('26313', 'Saint-Marcel-lès-Valence', '31T', 654318, 4981481, 44.97, 4.95695, 160),
('26314', 'Saint-Martin-d''Août', '31T', 655831, 5009121, 45.2183, 4.98472, 370),
('26315', 'Saint-Martin-en-Vercors', '31T', 692499, 4988292, 45.0219, 5.44334, 733),
('26316', 'Saint-Martin-le-Colonel', '31T', 679130, 4983888, 44.9858, 5.27222, 340),
('26317', 'Saint-Maurice-sur-Eygues', '31T', 660341, 4906973, 44.2983, 5.01, 190),
('26318', 'Saint-May', '31T', 684488, 4921938, 44.4272, 5.31777, 520),
('26319', 'Saint-Michel-sur-Savasse', '31T', 666797, 5001279, 45.1453, 5.12167, 332),
('26320', 'Saint-Nazaire-en-Royans', '31T', 677377, 4991776, 45.0572, 5.25278, 190),
('26321', 'Saint-Nazaire-le-Désert', '31T', 680597, 4937701, 44.57, 5.27444, 565),
('26322', 'Saint-Pantaléon-les-Vignes', '31T', 662767, 4918179, 44.3986, 5.04389, 321),
('26323', 'Saint-Paul-lès-Romans', '31T', 668045, 4992881, 45.0694, 5.13472, 180),
('26324', 'Saint-Paul-Trois-Châteaux', '31T', 640940, 4912207, 44.3494, 4.76833, 100),
('26325', 'Saint-Rambert-d''Albon', '31T', 642401, 5017296, 45.2947, 4.81611, 150),
('26326', 'Saint-Restitut', '31T', 642707, 4910424, 44.3331, 4.79, 168),
('26327', 'Saint-Roman', '31T', 692787, 4951641, 44.6922, 5.43306, 520),
('26328', 'Saint-Sauveur-en-Diois', '31T', 670746, 4949661, 44.68, 5.15444, 400),
('26329', 'Saint-Sauveur-Gouvernet', '31T', 687381, 4912139, 44.3383, 5.35056, 560),
('26330', 'Saint-Sorlin-en-Valloire', '31T', 653131, 5016991, 45.2897, 4.95278, 210),
('26331', 'Saint-Thomas-en-Royans', '31T', 680813, 4991008, 45.0494, 5.29611, 240),
('26332', 'Saint-Uze', '31T', 646362, 5005283, 45.1858, 4.86306, 182),
('26333', 'Saint-Vallier', '31T', 643050, 5004003, 45.175, 4.82055, 140),
('26334', 'Salettes', '31T', 656123, 4936725, 44.5669, 4.96611, 270),
('26335', 'Salles-sous-Bois', '31T', 653910, 4923922, 44.4522, 4.93444, 250),
('26336', 'Saou', '31T', 663378, 4945704, 44.6461, 5.06027, 330),
('26337', 'Saulce-sur-Rhône', '31T', 642485, 4951692, 44.7044, 4.79861, 110),
('26338', 'Sauzet', '31T', 644256, 4940402, 44.6025, 4.81778, 130),
('26339', 'Savasse', '31T', 641165, 4940581, 44.6047, 4.77889, 155),
('26340', 'Séderon', '31T', 702586, 4897799, 44.2053, 5.53556, 820),
('26341', 'Serves-sur-Rhône', '31T', 643141, 4999961, 45.1386, 4.82055, 130),
('26342', 'Solérieux', '31T', 646013, 4912194, 44.3483, 4.83194, 117),
('26343', 'Souspierre', '31T', 655748, 4933968, 44.5422, 4.96056, 270),
('26344', 'Soyans', '31T', 660364, 4943714, 44.6289, 5.02167, 350),
('26345', 'Suze-la-Rousse', '31T', 646753, 4905883, 44.2914, 4.83945, 100),
('26346', 'Suze', '31T', 666750, 4959376, 44.7683, 5.10723, 500),
('26347', 'Tain-l''Hermitage', '31T', 645207, 4992752, 45.0733, 4.84473, 125),
('26348', 'Taulignan', '31T', 657511, 4923144, 44.4444, 4.97944, 267),
('26349', 'Tersanne', '31T', 658427, 5010050, 45.2261, 5.01806, 400),
('26350', 'Teyssières', '31T', 669626, 4924220, 44.4514, 5.13194, 700),
('26351', 'Les Tonils', '31T', 674344, 4938796, 44.5814, 5.19612, 560),
('26352', 'La Touche', '31T', 649993, 4930777, 44.5147, 4.88723, 250),
('26353', 'Les Tourrettes', '31T', 642260, 4946902, 44.6614, 4.79444, 90),
('26354', 'Treschenu-Creyers', '31T', 702135, 4957023, 44.7381, 5.55305, 860),
('26355', 'Triors', '31T', 666526, 4995744, 45.0956, 5.11639, 220),
('26356', 'Truinas', '31T', 665200, 4938247, 44.5786, 5.08084, 500),
('26357', 'Tulette', '31T', 654078, 4905557, 44.2869, 4.93111, 140),
('26358', 'Upie', '31T', 656411, 4963037, 44.8036, 4.97778, 210),
('26359', 'Vachères-en-Quint', '31T', 678602, 4961917, 44.7883, 5.25778, 560),
('26360', 'Valaurie', '31T', 644301, 4920491, 44.4233, 4.81278, 130),
('26361', 'Valdrôme', '31T', 704475, 4931029, 44.5036, 5.57223, 818),
('26362', 'Valence', '31T', 649545, 4976582, 44.9269, 4.895, 126),
('26363', 'Valouse', '31T', 674321, 4925641, 44.4631, 5.19138, 673),
('26364', 'Vassieux-en-Vercors', '31T', 687004, 4973953, 44.8944, 5.36834, 1057),
('26365', 'Vaunaveys-la-Rochette', '31T', 660837, 4959194, 44.7681, 5.0325, 270),
('26366', 'Veaunes', '31T', 651104, 4994063, 45.0839, 4.92, 250),
('26367', 'Venterol', '31T', 667173, 4917271, 44.3894, 5.09889, 420),
('26368', 'Vercheny', '31T', 678137, 4953258, 44.7106, 5.24888, 420),
('26369', 'Verclause', '31T', 693529, 4917074, 44.3811, 5.42945, 560),
('26370', 'Vercoiran', '31T', 686607, 4908195, 44.3031, 5.33945, 618),
('26371', 'Véronne', '31T', 674738, 4956006, 44.7361, 5.20694, 415),
('26372', 'Vers-sur-Méouge', '31T', 705226, 4900754, 44.2311, 5.56973, 800),
('26373', 'Vesc', '31T', 670860, 4931971, 44.5208, 5.15, 600),
('26374', 'Villebois-les-Pins', '31T', 707899, 4910258, 44.3158, 5.60694, 855),
('26375', 'Villefranche-le-Château', '31T', 701398, 4899585, 44.2217, 5.52139, 797),
('26376', 'Villeperdrix', '31T', 681986, 4923566, 44.4425, 5.28694, 480),
('26377', 'Vinsobres', '31T', 664231, 4910991, 44.3336, 5.06, 300),
('26378', 'Volvent', '31T', 686573, 4936388, 44.5567, 5.34916, 840),
('26379', 'Granges-les-Beaumont', '31T', 656265, 4990544, 45.0511, 4.98444, 155),
('26380', 'Gervans', '31T', 644286, 4996683, 45.1089, 4.83416, 130),
('26381', 'Jaillans', '31T', 671293, 4988491, 45.0292, 5.17445, 250),
('26382', 'Saint-Vincent-la-Commanderie', '31T', 667117, 4978190, 44.9375, 5.11806, 380),
('27001', 'Aclou', '31T', 332654, 5448830, 49.1694, 0.70417, 140),
('27002', 'Acon', '31T', 360608, 5403222, 48.7664, 1.10305, 130),
('27003', 'Acquigny', '31T', 367079, 5448140, 49.1717, 1.17639, 20),
('27004', 'Aigleville', '31T', 384577, 5429521, 49.0078, 1.42167, 120),
('27005', 'Ailly', '31T', 372334, 5446750, 49.1603, 1.24889, 150),
('27006', 'Aizier', '31T', 328019, 5478056, 49.4308, 0.628058, 10),
('27007', 'Ajou', '31T', 337610, 5427791, 48.9817, 0.780552, 140),
('27008', 'Alizay', '31T', 367415, 5464600, 49.3197, 1.17555, 20),
('27009', 'Ambenay', '31T', 333370, 5411816, 48.8369, 0.72917, 190),
('27010', 'Amécourt', '31T', 408100, 5470378, 49.3792, 1.73389, 150),
('27011', 'Amfreville-la-Campagne', '31T', 349306, 5453170, 49.2128, 0.930828, 159),
('27012', 'Amfreville-les-Champs', '31T', 377249, 5463630, 49.3131, 1.31111, 140),
('27013', 'Amfreville-sous-les-Monts', '31T', 373554, 5462818, 49.305, 1.26055, 20),
('27014', 'Amfreville-sur-Iton', '31T', 365208, 5445374, 49.1464, 1.15166, 25),
('27015', 'Andé', '31T', 371968, 5454544, 49.2303, 1.24139, 21),
('27016', 'Les Andelys', '31T', 385252, 5456104, 49.2469, 1.42333, 30),
('27017', 'Angerville-la-Campagne', '31T', 365691, 5427659, 48.9872, 1.16416, 135),
('27018', 'Appeville-Annebault', '31T', 329095, 5464732, 49.3114, 0.648607, 27),
('27019', 'Armentières-sur-Avre', '31T', 338972, 5394502, 48.6828, 0.812227, 186),
('27020', 'Arnières-sur-Iton', '31T', 361508, 5428689, 48.9956, 1.10667, 95),
('27021', 'Asnières', '31T', 310361, 5452426, 49.1953, 0.396947, 155),
('27022', 'Aubevoye', '31T', 378409, 5447539, 49.1686, 1.33194, 23),
('27023', 'Aulnay-sur-Iton', '31T', 358280, 5428863, 48.9964, 1.0625, 80),
('27024', 'Le Roncenay-Authenay', '31T', 356734, 5413825, 48.8608, 1.04666, 150),
('27025', 'Autheuil-Authouillet', '31T', 374352, 5439289, 49.0936, 1.27888, 34),
('27026', 'Authevernes', '31T', 401001, 5452493, 49.2172, 1.64055, 110),
('27027', 'Les Authieux', '31T', 370630, 5417934, 48.9008, 1.23473, 149),
('27028', 'Authou', '31T', 332035, 5455771, 49.2317, 0.692783, 51),
('27031', 'Aviron', '31T', 362449, 5434659, 49.0494, 1.1175, 138),
('27032', 'Avrilly', '31T', 363845, 5421185, 48.9286, 1.14111, 155),
('27033', 'Bacquepuis', '31T', 357292, 5439424, 49.0911, 1.04528, 147),
('27034', 'Bacqueville', '31T', 381650, 5463502, 49.3128, 1.37167, 150),
('27035', 'Bailleul-la-Vallée', '31T', 312608, 5452967, 49.2008, 0.427505, 100),
('27036', 'Bâlines', '31T', 351296, 5400959, 48.7439, 0.977225, 170),
('27037', 'Barc', '31T', 341098, 5437332, 49.0683, 0.824451, 155),
('27038', 'Les Barils', '31T', 339740, 5399919, 48.7317, 0.820551, 200),
('27039', 'Barneville-sur-Seine', '31T', 343626, 5471901, 49.3797, 0.845563, 130),
('27040', 'Barquet', '31T', 343500, 5434698, 49.0453, 0.85833, 156),
('27041', 'La Barre-en-Ouche', '31T', 329034, 5424093, 48.9461, 0.664993, 195),
('27042', 'Barville', '31T', 316288, 5447929, 49.1567, 0.480272, 171),
('27043', 'Les Baux-de-Breteuil', '31T', 339543, 5416518, 48.8808, 0.811387, 183),
('27044', 'Les Baux-Sainte-Croix', '31T', 360890, 5425924, 48.9706, 1.09917, 139),
('27045', 'Bazincourt-sur-Epte', '31T', 410396, 5462834, 49.3117, 1.76722, 70),
('27046', 'Bazoques', '31T', 321437, 5449151, 49.1692, 0.550283, 175),
('27047', 'Beaubray', '31T', 347294, 5419730, 48.9117, 0.915834, 167),
('27048', 'Beauficel-en-Lyons', '31T', 392834, 5473590, 49.4056, 1.52278, 159),
('27049', 'Beaumesnil', '31T', 332430, 5431376, 49.0125, 0.708335, 169),
('27050', 'Beaumontel', '31T', 336949, 5439863, 49.09, 0.76667, 90),
('27051', 'Beaumont-le-Roger', '31T', 337684, 5438636, 49.0792, 0.777222, 90),
('27052', 'Le Bec-Hellouin', '31T', 334179, 5455737, 49.2319, 0.722223, 50),
('27053', 'Le Bec-Thomas', '31T', 353171, 5455384, 49.2336, 0.983053, 145),
('27054', 'Bémécourt', '31T', 344113, 5412309, 48.8442, 0.875279, 185),
('27055', 'Bérengeville-la-Campagne', '31T', 359140, 5441879, 49.1136, 1.06973, 140),
('27056', 'Bernay', '31T', 324722, 5440268, 49.0903, 0.599169, 110),
('27057', 'Bernienville', '31T', 355583, 5438511, 49.0825, 1.02222, 137),
('27058', 'Bernières-sur-Seine', '31T', 379312, 5454532, 49.2317, 1.34223, 15),
('27059', 'Bernouville', '31T', 405042, 5460361, 49.2886, 1.69416, 70),
('27060', 'Berthenonville', '31T', 402513, 5448729, 49.1836, 1.66222, 50),
('27061', 'Berthouville', '31T', 327769, 5450093, 49.1794, 0.63667, 160),
('27062', 'Berville-en-Roumois', '31T', 341760, 5462498, 49.2947, 0.823605, 140),
('27063', 'Berville-la-Campagne', '31T', 346570, 5432573, 49.0269, 0.901117, 150),
('27064', 'Berville-sur-Mer', '31T', 308809, 5478756, 49.4314, 0.363059, 10),
('27065', 'Beuzeville', '31T', 307120, 5469170, 49.3447, 0.34444, 131),
('27066', 'Bézu-la-Forêt', '31T', 400677, 5473659, 49.4075, 1.63084, 114),
('27067', 'Bézu-Saint-Éloi', '31T', 405680, 5461029, 49.2947, 1.70278, 60),
('27068', 'Bois-Anzeray', '31T', 330450, 5421794, 48.9258, 0.685272, 194),
('27069', 'Bois-Arnault', '31T', 333446, 5409589, 48.8169, 0.731109, 205),
('27070', 'Boisemont', '31T', 390087, 5461226, 49.2939, 1.48834, 153),
('27071', 'Le Bois-Hellain', '31T', 309968, 5461590, 49.2775, 0.387215, 150),
('27072', 'Bois-Jérôme-Saint-Ouen', '31T', 393052, 5440100, 49.1044, 1.53472, 130),
('27073', 'Bois-le-Roi', '31T', 378731, 5413983, 48.8669, 1.34639, 130),
('27074', 'Boisney', '31T', 329068, 5446900, 49.1511, 0.655835, 158),
('27075', 'Bois-Normand-près-Lyre', '31T', 331377, 5418768, 48.8989, 0.699167, 198),
('27076', 'Boisset-les-Prévanches', '31T', 377637, 5425375, 48.9692, 1.32806, 130),
('27077', 'Boissey-le-Châtel', '31T', 338631, 5459870, 49.2703, 0.781664, 135),
('27078', 'La Boissière', '31T', 380443, 5422503, 48.9439, 1.36723, 136),
('27079', 'Boissy-Lamberville', '31T', 323352, 5448842, 49.1669, 0.576666, 175),
('27081', 'Boncourt', '31T', 376294, 5431738, 49.0261, 1.30778, 127),
('27082', 'La Bonneville-sur-Iton', '31T', 356502, 5428507, 48.9928, 1.03834, 83),
('27083', 'Bonneville-Aptot', '31T', 337134, 5458492, 49.2575, 0.761662, 145),
('27084', 'Bosc-Bénard-Commin', '31T', 343950, 5464877, 49.3167, 0.852774, 113),
('27085', 'Bosc-Bénard-Crescy', '31T', 340735, 5465464, 49.3211, 0.808336, 130),
('27088', 'Bosc-Renoult-en-Ouche', '31T', 332324, 5424487, 48.9506, 0.709727, 180),
('27089', 'Bosc-Renoult-en-Roumois', '31T', 338565, 5462437, 49.2933, 0.779721, 136),
('27090', 'Le Bosc-Roger-en-Roumois', '31T', 348970, 5461554, 49.2881, 0.923057, 140),
('27091', 'Bosgouet', '31T', 343974, 5469264, 49.3561, 0.851388, 120),
('27092', 'Bosguérard-de-Marcouville', '31T', 342547, 5459602, 49.2689, 0.835562, 127),
('27093', 'Bosnormand', '31T', 347132, 5460863, 49.2814, 0.898063, 149),
('27094', 'Bosquentin', '31T', 397689, 5474486, 49.4144, 1.58945, 160),
('27095', 'Bosrobert', '31T', 336462, 5454927, 49.2253, 0.753888, 130),
('27096', 'Les Bottereaux', '31T', 329168, 5415837, 48.8719, 0.670276, 214),
('27097', 'Bouafles', '31T', 382683, 5452297, 49.2122, 1.38916, 15),
('27098', 'Bouchevilliers', '31T', 406150, 5473129, 49.4036, 1.70639, 99),
('27099', 'Le Boulay-Morin', '31T', 367242, 5438065, 49.0811, 1.18194, 146),
('27100', 'Boulleville', '31T', 309803, 5470808, 49.3603, 0.380557, 121),
('27101', 'Bouquelon', '31T', 318020, 5474454, 49.3956, 0.491939, 111),
('27102', 'Bouquetot', '31T', 339034, 5470149, 49.3628, 0.783055, 140),
('27103', 'Bourg-Achard', '31T', 341612, 5469240, 49.3553, 0.818895, 134),
('27104', 'Bourg-Beaudouin', '31T', 377191, 5471849, 49.3869, 1.30778, 145),
('27105', 'Bourgtheroulde-Infreville', '31T', 345360, 5462550, 49.2961, 0.873063, 125),
('27106', 'Bournainville-Faverolles', '31T', 316866, 5444571, 49.1267, 0.489718, 178),
('27107', 'Bourneville', '31T', 327293, 5473597, 49.3906, 0.619994, 120),
('27108', 'Bourth', '31T', 339132, 5404355, 48.7714, 0.810556, 196),
('27109', 'Bray', '31T', 342597, 5441491, 49.1061, 0.843339, 147),
('27110', 'Brestot', '31T', 331937, 5469095, 49.3514, 0.685836, 135),
('27111', 'Bretagnolles', '31T', 379463, 5423327, 48.9511, 1.35361, 130),
('27112', 'Breteuil', '31T', 347106, 5411392, 48.8367, 0.916387, 169),
('27113', 'Brétigny', '31T', 330734, 5453617, 49.2119, 0.675836, 135),
('27114', 'Breuilpont', '31T', 385023, 5424569, 48.9633, 1.42917, 50),
('27115', 'Breux-sur-Avre', '31T', 359308, 5402668, 48.7611, 1.08556, 130),
('27116', 'Brionne', '31T', 333510, 5451678, 49.1953, 0.714724, 67),
('27117', 'Broglie', '31T', 319314, 5431293, 49.0081, 0.529168, 140),
('27118', 'Brosville', '31T', 362379, 5440840, 49.105, 1.11444, 40),
('27119', 'Bueil', '31T', 385829, 5421216, 48.9333, 1.44111, 64),
('27120', 'Burey', '31T', 350157, 5427717, 48.9842, 0.951945, 155),
('27121', 'Bus-Saint-Rémy', '31T', 399642, 5444518, 49.1453, 1.62389, 140),
('27122', 'Cahaignes', '31T', 398128, 5451403, 49.2069, 1.60139, 130),
('27123', 'Caillouet-Orgeville', '31T', 376346, 5429512, 49.0061, 1.30917, 122),
('27124', 'Cailly-sur-Eure', '31T', 369563, 5441809, 49.1153, 1.2125, 29),
('27125', 'Calleville', '31T', 336736, 5451180, 49.1917, 0.759171, 130),
('27126', 'Campigny', '31T', 322252, 5464950, 49.3114, 0.554449, 120),
('27127', 'Canappeville', '31T', 361527, 5446485, 49.1556, 1.10083, 145),
('27128', 'Cantiers', '31T', 396930, 5454421, 49.2339, 1.58417, 120),
('27129', 'Caorches-Saint-Nicolas', '31T', 321328, 5439511, 49.0825, 0.553059, 167),
('27130', 'Capelle-les-Grands', '31T', 315430, 5435562, 49.0453, 0.474166, 190),
('27131', 'Carsix', '31T', 329871, 5445330, 49.1372, 0.667501, 158),
('27132', 'Caugé', '31T', 356347, 5431940, 49.0236, 1.035, 140),
('27133', 'Caumont', '31T', 347252, 5470285, 49.3661, 0.896104, 127),
('27134', 'Cauverville-en-Roumois', '31T', 329149, 5469057, 49.3503, 0.647496, 130),
('27135', 'Cesseville', '31T', 352687, 5449371, 49.1794, 0.978614, 153),
('27136', 'Chaignes', '31T', 386058, 5430416, 49.0161, 1.44166, 150),
('27137', 'Chaise-Dieu-du-Theil', '31T', 335486, 5403997, 48.7672, 0.761115, 200),
('27138', 'Chamblac', '31T', 320482, 5429061, 48.9883, 0.546111, 197),
('27139', 'Chambord', '31T', 324849, 5417888, 48.8892, 0.61055, 211),
('27140', 'Chambray', '31T', 376394, 5437142, 49.0747, 1.3075, 35),
('27141', 'Champ-Dolent', '31T', 354762, 5424968, 48.9606, 1.01583, 146),
('27142', 'Champenard', '31T', 378355, 5440497, 49.1053, 1.33333, 130),
('27143', 'Champignolles', '31T', 336283, 5424864, 48.955, 0.763608, 150),
('27144', 'Champigny-la-Futelaye', '31T', 375076, 5413662, 48.8633, 1.29667, 136),
('27145', 'Chanteloup', '31T', 354739, 5416287, 48.8825, 1.0186, 170),
('27146', 'La Chapelle-Bayvel', '31T', 310953, 5460814, 49.2708, 0.40111, 155),
('27147', 'La Chapelle-du-Bois-des-Faulx', '31T', 366327, 5441362, 49.1106, 1.16833, 130),
('27148', 'La Chapelle-Gauthier', '31T', 314318, 5429047, 48.9864, 0.461944, 201),
('27149', 'La Chapelle-Hareng', '31T', 311322, 5443212, 49.1128, 0.414439, 188),
('27150', 'La Chapelle-Réanville', '31T', 381802, 5439464, 49.0967, 1.38084, 120),
('27151', 'Charleval', '31T', 382514, 5469909, 49.3706, 1.38167, 30),
('27152', 'Château-sur-Epte', '31T', 402643, 5450364, 49.1983, 1.66361, 80),
('27153', 'Chauvincourt-Provemont', '31T', 401201, 5459100, 49.2767, 1.64167, 90),
('27154', 'Chavigny-Bailleul', '31T', 368367, 5415268, 48.8764, 1.20472, 147),
('27155', 'Chennebrun', '31T', 336836, 5394224, 48.6797, 0.783339, 200),
('27156', 'Chéronvilliers', '31T', 334008, 5406513, 48.7894, 0.740002, 201),
('27157', 'Le Chesne', '31T', 349880, 5417435, 48.8917, 0.951948, 180),
('27158', 'Cierrey', '31T', 373887, 5429537, 49.0058, 1.27555, 127),
('27159', 'Cintray', '31T', 345309, 5406900, 48.7958, 0.893608, 167),
('27160', 'Civières', '31T', 397321, 5447217, 49.1692, 1.59138, 130),
('27161', 'Claville', '31T', 355318, 5434563, 49.0469, 1.02, 150),
('27162', 'Collandres-Quincarnon', '31T', 343513, 5429383, 48.9975, 0.860558, 155),
('27163', 'Colletot', '31T', 326547, 5469139, 49.3503, 0.611665, 100),
('27164', 'Combon', '31T', 345894, 5440410, 49.0972, 0.888893, 145),
('27165', 'Conches-en-Ouche', '31T', 349305, 5424805, 48.9578, 0.941386, 155),
('27166', 'Condé-sur-Iton', '31T', 350620, 5410834, 48.8325, 0.964446, 162),
('27167', 'Condé-sur-Risle', '31T', 326705, 5465178, 49.3147, 0.61556, 30),
('27168', 'Connelles', '31T', 374275, 5457240, 49.255, 1.27222, 12),
('27169', 'Conteville', '31T', 311192, 5477128, 49.4175, 0.396664, 30),
('27170', 'Cormeilles', '31T', 309208, 5458339, 49.2481, 0.378326, 90),
('27171', 'Le Cormier', '31T', 376009, 5426276, 48.9769, 1.30555, 135),
('27172', 'Corneuil', '31T', 363635, 5415938, 48.8814, 1.14, 155),
('27173', 'Corneville-la-Fouquetière', '31T', 332445, 5437247, 49.0653, 0.706113, 150),
('27174', 'Corneville-sur-Risle', '31T', 324679, 5468179, 49.3411, 0.58639, 20),
('27175', 'Corny', '31T', 388019, 5459909, 49.2817, 1.46027, 139),
('27176', 'Coudray', '31T', 391412, 5465895, 49.3361, 1.50528, 120),
('27177', 'Coudres', '31T', 371412, 5413869, 48.8644, 1.24667, 146),
('27179', 'Courbépine', '31T', 322156, 5444430, 49.1269, 0.562222, 165),
('27180', 'Courcelles-sur-Seine', '31T', 380345, 5449010, 49.1822, 1.35805, 15),
('27181', 'Courdemanche', '31T', 373726, 5408039, 48.8125, 1.28, 130),
('27182', 'Courteilles', '31T', 353461, 5399358, 48.73, 1.00723, 150),
('27183', 'La Couture-Boussey', '31T', 383245, 5417377, 48.8983, 1.40695, 130),
('27184', 'Crasville', '31T', 360012, 5452270, 49.2072, 1.07805, 160),
('27185', 'Crestot', '31T', 352175, 5452197, 49.2047, 0.970554, 150),
('27187', 'Criquebeuf-la-Campagne', '31T', 354409, 5451704, 49.2008, 1.00138, 148),
('27188', 'Criquebeuf-sur-Seine', '31T', 361822, 5463069, 49.3047, 1.09916, 10),
('27189', 'La Croisille', '31T', 352220, 5426518, 48.9739, 0.980559, 140),
('27190', 'Croisy-sur-Eure', '31T', 378917, 5431865, 49.0278, 1.34361, 40),
('27191', 'La Croix-Saint-Leufroy', '31T', 371937, 5440981, 49.1083, 1.24528, 30),
('27192', 'Crosville-la-Vieille', '31T', 349418, 5446864, 49.1561, 0.934726, 146),
('27193', 'Croth', '31T', 380903, 5411650, 48.8464, 1.37667, 67),
('27194', 'Cuverville', '31T', 381607, 5460599, 49.2867, 1.37194, 150),
('27195', 'Dame-Marie', '31T', 352910, 5407961, 48.8072, 0.996661, 175),
('27196', 'Les Damps', '31T', 367565, 5462433, 49.3003, 1.17834, 10),
('27197', 'Dampsmesnil', '31T', 400900, 5446873, 49.1667, 1.64055, 110),
('27198', 'Damville', '31T', 359046, 5414971, 48.8717, 1.07777, 140),
('27199', 'Dangu', '31T', 405276, 5456341, 49.2525, 1.69833, 50),
('27200', 'Dardez', '31T', 369070, 5438113, 49.0819, 1.20695, 133),
('27201', 'Daubeuf-la-Campagne', '31T', 356651, 5450688, 49.1922, 1.0325, 149),
('27202', 'Daubeuf-près-Vatteville', '31T', 376570, 5458578, 49.2675, 1.30333, 40),
('27203', 'Douains', '31T', 385220, 5433091, 49.04, 1.42945, 130),
('27204', 'Doudeauville-en-Vexin', '31T', 397468, 5464821, 49.3275, 1.58889, 100),
('27205', 'Douville-sur-Andelle', '31T', 376544, 5466395, 49.3378, 1.30056, 30),
('27206', 'Droisy', '31T', 363519, 5407847, 48.8086, 1.14111, 149),
('27207', 'Drucourt', '31T', 315043, 5443427, 49.1158, 0.465279, 180),
('27208', 'Duranville', '31T', 318382, 5446870, 49.1478, 0.509442, 177),
('27209', 'Écaquelon', '31T', 334317, 5462316, 49.2911, 0.721395, 70),
('27210', 'Écardenville-la-Campagne', '31T', 343038, 5442746, 49.1175, 0.848889, 145),
('27211', 'Écardenville-sur-Eure', '31T', 373620, 5440109, 49.1008, 1.26861, 31),
('27212', 'Écauville', '31T', 353655, 5443104, 49.1233, 0.994165, 140),
('27213', 'Écos', '31T', 398573, 5445865, 49.1572, 1.60889, 105),
('27214', 'Écouis', '31T', 386104, 5463068, 49.3097, 1.43305, 155),
('27215', 'Ecquetot', '31T', 354877, 5447922, 49.1669, 1.00917, 150),
('27216', 'Émalleville', '31T', 365619, 5439772, 49.0961, 1.15916, 140),
('27217', 'Émanville', '31T', 347469, 5436473, 49.0622, 0.911939, 151),
('27218', 'Épaignes', '31T', 313812, 5461613, 49.2789, 0.44, 153),
('27219', 'Épégard', '31T', 345485, 5449722, 49.1808, 0.879725, 140),
('27220', 'Épieds', '31T', 382618, 5421468, 48.935, 1.39722, 130),
('27221', 'Épinay', '31T', 327591, 5428093, 48.9817, 0.643609, 188),
('27222', 'Épreville-en-Lieuvin', '31T', 320523, 5452827, 49.2019, 0.536116, 165),
('27223', 'Épreville-en-Roumois', '31T', 338105, 5465355, 49.3194, 0.772217, 130),
('27224', 'Épreville-près-le-Neubourg', '31T', 345064, 5444821, 49.1367, 0.875838, 136),
('27225', 'Les Essarts', '31T', 352297, 5417154, 48.8897, 0.985003, 175),
('27226', 'Étrépagny', '31T', 399117, 5462289, 49.305, 1.61222, 90),
('27227', 'Étréville', '31T', 329423, 5471367, 49.3711, 0.650276, 130),
('27228', 'Éturqueraye', '31T', 332723, 5471049, 49.3692, 0.695829, 122),
('27229', 'Évreux', '31T', 365037, 5431692, 49.0233, 1.15389, 70),
('27230', 'Ézy-sur-Eure', '31T', 384147, 5413744, 48.8658, 1.42028, 70),
('27231', 'Fains', '31T', 382094, 5428399, 48.9972, 1.38806, 43),
('27232', 'Farceaux', '31T', 392172, 5460413, 49.2869, 1.51722, 132),
('27233', 'Fatouville-Grestain', '31T', 306231, 5476003, 49.4058, 0.328887, 100),
('27234', 'Fauville', '31T', 368224, 5432418, 49.0306, 1.19722, 125),
('27235', 'Faverolles-la-Campagne', '31T', 348363, 5430546, 49.0092, 0.926385, 150),
('27237', 'Le Favril', '31T', 320148, 5450645, 49.1822, 0.531949, 170),
('27238', 'Ferrières-Haut-Clocher', '31T', 352457, 5431610, 49.0197, 0.981947, 140),
('27239', 'Ferrières-Saint-Hilaire', '31T', 322163, 5433921, 49.0325, 0.566938, 133),
('27240', 'La Ferrière-sur-Risle', '31T', 338104, 5427283, 48.9772, 0.787501, 130),
('27241', 'Feuguerolles', '31T', 357402, 5443716, 49.1297, 1.04527, 138),
('27242', 'Le Fidelaire', '31T', 339972, 5424355, 48.9514, 0.814161, 182),
('27243', 'Fiquefleur-Équainville', '31T', 304920, 5474318, 49.3903, 0.311663, 20),
('27244', 'Flancourt-Catelon', '31T', 338305, 5466647, 49.3311, 0.774443, 120),
('27245', 'Fleury-la-Forêt', '31T', 395321, 5475025, 49.4189, 1.55667, 160),
('27246', 'Fleury-sur-Andelle', '31T', 380600, 5469086, 49.3628, 1.35556, 35),
('27247', 'Flipou', '31T', 374949, 5463743, 49.3136, 1.27944, 135),
('27248', 'Folleville', '31T', 318104, 5447652, 49.1547, 0.50528, 175),
('27249', 'Fontaine-Bellenger', '31T', 373492, 5449534, 49.1856, 1.26389, 145),
('27250', 'Fontaine-Heudebourg', '31T', 369640, 5443352, 49.1292, 1.21306, 30),
('27251', 'Fontaine-l''Abbé', '31T', 331757, 5439987, 49.0897, 0.695563, 90),
('27252', 'Fontaine-la-Louvet', '31T', 313868, 5448906, 49.1647, 0.446663, 152),
('27253', 'Fontaine-la-Soret', '31T', 333576, 5446484, 49.1486, 0.717778, 70),
('27254', 'Fontaine-sous-Jouy', '31T', 375195, 5436149, 49.0656, 1.29139, 33),
('27255', 'Fontenay', '31T', 395946, 5451598, 49.2083, 1.57139, 105),
('27256', 'La Forêt-du-Parc', '31T', 372134, 5421359, 48.9319, 1.25416, 145),
('27257', 'Forêt-la-Folie', '31T', 392738, 5453173, 49.2219, 1.52694, 105),
('27258', 'Fort-Moville', '31T', 312583, 5467683, 49.3331, 0.420272, 70),
('27259', 'Foucrainville', '31T', 377175, 5421061, 48.9303, 1.32305, 145),
('27260', 'Foulbec', '31T', 313022, 5475210, 49.4008, 0.422773, 10),
('27261', 'Fouqueville', '31T', 350780, 5453748, 49.2183, 0.950839, 160),
('27262', 'Fourges', '31T', 400929, 5441714, 49.1203, 1.64222, 30),
('27263', 'Fourmetot', '31T', 323874, 5472655, 49.3811, 0.573339, 115),
('27264', 'Fours-en-Vexin', '31T', 398213, 5449424, 49.1892, 1.60306, 110),
('27265', 'Francheville', '31T', 342081, 5406094, 48.7878, 0.849995, 180),
('27266', 'Franqueville', '31T', 331596, 5449357, 49.1739, 0.689447, 144),
('27267', 'Freneuse-sur-Risle', '31T', 330604, 5457948, 49.2508, 0.672223, 60),
('27268', 'Le Fresne', '31T', 351809, 5424088, 48.9519, 0.975831, 165),
('27269', 'Fresne-Cauverville', '31T', 315219, 5452910, 49.2011, 0.463337, 165),
('27270', 'Fresne-l''Archevêque', '31T', 384195, 5460667, 49.2878, 1.4075, 143),
('27271', 'Fresney', '31T', 375840, 5423253, 48.9497, 1.30416, 140),
('27273', 'Gadencourt', '31T', 383038, 5426896, 48.9839, 1.40139, 45),
('27274', 'Gaillardbois-Cressenville', '31T', 384242, 5466691, 49.3419, 1.4064, 130),
('27275', 'Gaillon', '31T', 379058, 5446629, 49.1606, 1.34112, 17),
('27276', 'Gamaches-en-Vexin', '31T', 399449, 5458328, 49.2694, 1.61778, 90),
('27277', 'Garencières', '31T', 373008, 5423965, 48.9556, 1.26528, 145),
('27278', 'Garennes-sur-Eure', '31T', 385656, 5418748, 48.9111, 1.43945, 55),
('27279', 'Gasny', '31T', 397948, 5438371, 49.0897, 1.60222, 24),
('27280', 'Gauciel', '31T', 371514, 5432372, 49.0308, 1.24222, 140),
('27281', 'Gaudreville-la-Rivière', '31T', 355470, 5425568, 48.9661, 1.02528, 93),
('27282', 'Gauville-la-Campagne', '31T', 360304, 5434960, 49.0517, 1.08806, 135),
('27283', 'Gisay-la-Coudre', '31T', 326260, 5424550, 48.9494, 0.626946, 191),
('27284', 'Gisors', '31T', 411393, 5459513, 49.2819, 1.78167, 55),
('27285', 'Giverny', '31T', 392364, 5437086, 49.0772, 1.5261, 30),
('27286', 'Giverville', '31T', 322926, 5451977, 49.195, 0.569448, 165),
('27287', 'Glisolles', '31T', 355341, 5427641, 48.9847, 1.02278, 90),
('27288', 'Glos-sur-Risle', '31T', 331349, 5459810, 49.2678, 0.681668, 38),
('27289', 'La Goulafrière', '31T', 312334, 5425126, 48.9506, 0.436662, 190),
('27290', 'Goupillières', '31T', 336643, 5443951, 49.1267, 0.760829, 148),
('27291', 'Gournay-le-Guérin', '31T', 336638, 5397289, 48.7072, 0.77944, 208),
('27292', 'Gouttières', '31T', 335246, 5432435, 49.0228, 0.746385, 140),
('27293', 'Gouville', '31T', 352735, 5412909, 48.8517, 0.992502, 149),
('27294', 'Grainville', '31T', 381427, 5467245, 49.3464, 1.36749, 135),
('27295', 'Grand-Camp', '31T', 319349, 5435495, 49.0458, 0.527775, 170),
('27296', 'Grandchain', '31T', 329011, 5434540, 49.04, 0.660284, 160),
('27297', 'Grandvilliers', '31T', 357727, 5408764, 48.8156, 1.06195, 170),
('27298', 'Graveron-Sémerville', '31T', 352353, 5439894, 49.0942, 0.977505, 140),
('27299', 'Gravigny', '31T', 366217, 5434258, 49.0467, 1.16917, 60),
('27300', 'Grosley-sur-Risle', '31T', 339524, 5434874, 49.0458, 0.803891, 100),
('27302', 'Le Gros-Theil', '31T', 342810, 5454681, 49.2247, 0.841105, 144),
('27303', 'Guernanville', '31T', 341871, 5417379, 48.8892, 0.842784, 190),
('27304', 'Guerny', '31T', 404082, 5452809, 49.2206, 1.68277, 40),
('27305', 'La Guéroulde', '31T', 345076, 5408791, 48.8128, 0.889724, 174),
('27306', 'Guichainville', '31T', 367619, 5426624, 48.9783, 1.19084, 145),
('27307', 'Guiseniers', '31T', 389157, 5452194, 49.2125, 1.47805, 140),
('27308', 'Guitry', '31T', 394102, 5452529, 49.2164, 1.54584, 125),
('27309', 'L''Habit', '31T', 379868, 5414731, 48.8739, 1.36167, 100),
('27310', 'Hacqueville', '31T', 395151, 5459799, 49.2819, 1.55833, 120),
('27311', 'Harcourt', '31T', 338660, 5448404, 49.1672, 0.786671, 135),
('27312', 'Hardencourt-Cocherel', '31T', 377305, 5433353, 49.0408, 1.32112, 41),
('27313', 'La Harengère', '31T', 354151, 5454956, 49.23, 0.996662, 154),
('27315', 'Harquency', '31T', 389816, 5456783, 49.2539, 1.48583, 50),
('27316', 'Hauville', '31T', 338319, 5473971, 49.3969, 0.771661, 146),
('27317', 'La Haye-Aubrée', '31T', 332583, 5473062, 49.3872, 0.693055, 130),
('27318', 'La Haye-de-Calleville', '31T', 338509, 5450170, 49.1831, 0.783893, 135),
('27319', 'La Haye-de-Routot', '31T', 335179, 5474838, 49.4039, 0.728061, 122),
('27320', 'La Haye-du-Theil', '31T', 345387, 5455628, 49.2339, 0.876107, 162),
('27321', 'La Haye-le-Comte', '31T', 365168, 5451184, 49.1986, 1.14917, 37),
('27322', 'La Haye-Malherbe', '31T', 359308, 5454018, 49.2228, 1.06778, 140),
('27323', 'La Haye-Saint-Sylvestre', '31T', 324775, 5420053, 48.9086, 0.608613, 197),
('27324', 'Hébécourt', '31T', 406789, 5466848, 49.3472, 1.71666, 120),
('27325', 'Hecmanville', '31T', 329470, 5449422, 49.1739, 0.660275, 150),
('27326', 'Hécourt', '31T', 384695, 5426429, 48.98, 1.42416, 58),
('27327', 'Hectomare', '31T', 350408, 5450514, 49.1892, 0.946938, 147),
('27329', 'Hennezis', '31T', 388144, 5450113, 49.1936, 1.46473, 150),
('27330', 'Herqueville', '31T', 373636, 5455833, 49.2422, 1.26389, 20),
('27331', 'Heubécourt-Haricourt', '31T', 395147, 5443643, 49.1367, 1.5625, 134),
('27332', 'Heudebouville', '31T', 371935, 5450528, 49.1942, 1.24222, 140),
('27333', 'Heudicourt', '31T', 402756, 5465899, 49.3381, 1.66139, 116),
('27334', 'Heudreville-en-Lieuvin', '31T', 317990, 5452200, 49.1956, 0.501661, 170),
('27335', 'Heudreville-sur-Eure', '31T', 368008, 5444627, 49.1403, 1.19028, 30),
('27336', 'La Heunière', '31T', 384150, 5435368, 49.0603, 1.41416, 130),
('27337', 'Heuqueville', '31T', 379363, 5460555, 49.2858, 1.34111, 140),
('27338', 'Les Hogues', '31T', 383737, 5476217, 49.4275, 1.39666, 160),
('27339', 'Hondouville', '31T', 362772, 5444384, 49.1369, 1.11862, 35),
('27340', 'Honguemare-Guenouville', '31T', 341582, 5471002, 49.3711, 0.817781, 120),
('27341', 'L''Hosmes', '31T', 355733, 5405849, 48.7889, 1.03583, 170),
('27342', 'Houetteville', '31T', 361990, 5443106, 49.1253, 1.10834, 50),
('27343', 'Houlbec-Cocherel', '31T', 380526, 5436773, 49.0722, 1.36416, 130),
('27344', 'Houlbec-près-le-Gros-Theil', '31T', 342276, 5457910, 49.2536, 0.832506, 159),
('27345', 'La Houssaye', '31T', 339195, 5429136, 48.9942, 0.801666, 160),
('27346', 'Houville-en-Vexin', '31T', 380538, 5461611, 49.2956, 1.35695, 150),
('27347', 'Huest', '31T', 369073, 5433109, 49.0369, 1.20861, 133),
('27348', 'Igoville', '31T', 365392, 5464464, 49.3181, 1.14778, 10),
('27349', 'Illeville-sur-Montfort', '31T', 334858, 5466194, 49.3261, 0.727225, 125),
('27350', 'Illiers-l''Évêque', '31T', 372909, 5408892, 48.82, 1.26862, 130),
('27351', 'Incarville', '31T', 367412, 5455269, 49.2358, 1.17861, 15),
('27353', 'Irreville', '31T', 368960, 5439475, 49.0942, 1.205, 137),
('27354', 'Iville', '31T', 348710, 5449139, 49.1764, 0.924167, 152),
('27355', 'Ivry-la-Bataille', '31T', 386914, 5415510, 48.8822, 1.4575, 60),
('27356', 'Jonquerets-de-Livet', '31T', 325209, 5432556, 49.0211, 0.609162, 172),
('27358', 'Jouy-sur-Eure', '31T', 376003, 5434154, 49.0478, 1.30306, 37),
('27359', 'Juignettes', '31T', 328176, 5412746, 48.8439, 0.658057, 223),
('27360', 'Jumelles', '31T', 368755, 5419616, 48.9156, 1.20861, 150),
('27361', 'La Lande-Saint-Léger', '31T', 308293, 5463997, 49.2986, 0.363057, 140),
('27362', 'Landepéreuse', '31T', 327383, 5430542, 49.0036, 0.639728, 172),
('27363', 'Le Landin', '31T', 340450, 5474403, 49.4014, 0.800835, 138),
('27364', 'Launay', '31T', 335202, 5441182, 49.1014, 0.742223, 75),
('27365', 'Léry', '31T', 369643, 5460623, 49.2844, 1.20749, 10),
('27366', 'Letteguives', '31T', 378872, 5475828, 49.4231, 1.32972, 130),
('27367', 'Lieurey', '31T', 317974, 5456002, 49.2297, 0.499718, 167),
('27368', 'Lignerolles', '31T', 373365, 5411940, 48.8475, 1.27388, 144),
('27369', 'Lilly', '31T', 396141, 5473650, 49.4067, 1.56833, 152),
('27370', 'Lisors', '31T', 389121, 5467424, 49.3494, 1.47333, 80),
('27371', 'Livet-sur-Authou', '31T', 329649, 5455845, 49.2317, 0.660005, 60),
('27372', 'Longchamps', '31T', 400239, 5468446, 49.3606, 1.62611, 115),
('27373', 'Lorleau', '31T', 391483, 5474574, 49.4142, 1.50389, 100),
('27374', 'Louversey', '31T', 347861, 5428552, 48.9911, 0.920272, 150),
('27375', 'Louviers', '31T', 366360, 5452761, 49.2131, 1.165, 26),
('27376', 'Louye', '31T', 376734, 5406613, 48.8003, 1.32138, 104),
('27377', 'Lyons-la-Forêt', '31T', 389452, 5472823, 49.3981, 1.47639, 100),
('27378', 'La Madeleine-de-Nonancourt', '31T', 368022, 5404124, 48.7761, 1.2036, 143),
('27379', 'Mainneville', '31T', 404357, 5469732, 49.3728, 1.6825, 100),
('27380', 'Malleville-sur-le-Bec', '31T', 335971, 5456116, 49.2358, 0.746663, 140),
('27381', 'Malouy', '31T', 318984, 5444811, 49.1294, 0.518613, 169),
('27382', 'Mandeville', '31T', 355237, 5453907, 49.2208, 1.01195, 156),
('27383', 'Mandres', '31T', 343345, 5402381, 48.7547, 0.868605, 190),
('27384', 'Manneville-la-Raoult', '31T', 305222, 5472576, 49.3747, 0.316673, 100),
('27385', 'Manneville-sur-Risle', '31T', 323042, 5469406, 49.3517, 0.563331, 80),
('27386', 'Le Manoir', '31T', 369391, 5463595, 49.3111, 1.20306, 20),
('27387', 'Manthelon', '31T', 356961, 5419473, 48.9117, 1.04778, 150),
('27388', 'Marais-Vernier', '31T', 315446, 5477075, 49.4183, 0.455283, 20),
('27389', 'Marbeuf', '31T', 351878, 5446395, 49.1525, 0.968616, 140),
('27390', 'Marcilly-la-Campagne', '31T', 368112, 5410517, 48.8336, 1.20278, 145),
('27391', 'Marcilly-sur-Eure', '31T', 378261, 5409236, 48.8242, 1.34139, 71),
('27392', 'Martagny', '31T', 402808, 5472230, 49.395, 1.66055, 120),
('27393', 'Martainville', '31T', 311374, 5464818, 49.3069, 0.405002, 120),
('27394', 'Martot', '31T', 359331, 5462051, 49.295, 1.06528, 10),
('27395', 'Mélicourt', '31T', 317308, 5420973, 48.9147, 0.506394, 180),
('27396', 'Ménesqueville', '31T', 384672, 5468906, 49.3619, 1.41167, 50),
('27397', 'Ménilles', '31T', 380779, 5432474, 49.0336, 1.36889, 50),
('27398', 'Menneval', '31T', 326694, 5441009, 49.0975, 0.625838, 100),
('27399', 'Mercey', '31T', 382652, 5437469, 49.0789, 1.39306, 130),
('27400', 'Merey', '31T', 383183, 5425070, 48.9675, 1.4039, 49),
('27401', 'Le Mesnil-Fuguet', '31T', 361508, 5436815, 49.0686, 1.10389, 140),
('27402', 'Le Mesnil-Hardray', '31T', 352840, 5422300, 48.9361, 0.99055, 157),
('27403', 'Le Mesnil-Jourdain', '31T', 362333, 5448751, 49.1761, 1.11111, 140),
('27404', 'Mesnil-Rousset', '31T', 320615, 5418022, 48.8892, 0.552785, 230),
('27405', 'Mesnil-sous-Vienne', '31T', 403410, 5470922, 49.3833, 1.66917, 100),
('27406', 'Mesnil-sur-l''Estrée', '31T', 375075, 5403591, 48.7728, 1.29972, 133),
('27407', 'Mesnil-Verclives', '31T', 388750, 5464033, 49.3189, 1.46917, 174),
('27408', 'Mézières-en-Vexin', '31T', 391110, 5447552, 49.1711, 1.50611, 155),
('27410', 'Miserey', '31T', 373639, 5431118, 49.02, 1.27167, 130),
('27411', 'Moisville', '31T', 365288, 5411820, 48.8447, 1.16389, 150),
('27412', 'Montaure', '31T', 360874, 5455122, 49.2331, 1.08889, 130),
('27413', 'Montfort-sur-Risle', '31T', 330294, 5462995, 49.2961, 0.665827, 40),
('27414', 'Montreuil-l''Argillé', '31T', 315522, 5423659, 48.9383, 0.480827, 172),
('27415', 'Morainville-Jouveaux', '31T', 314044, 5455299, 49.2222, 0.446117, 164),
('27416', 'Buis-sur-Damville', '31T', 362134, 5410414, 48.8314, 1.12139, 155),
('27417', 'Morgny', '31T', 397762, 5470870, 49.3819, 1.59138, 135),
('27418', 'Morsan', '31T', 324557, 5450410, 49.1814, 0.592498, 165),
('27419', 'Mouettes', '31T', 379880, 5417171, 48.8958, 1.36111, 130),
('27420', 'Mouflaines', '31T', 394951, 5455663, 49.2447, 1.55667, 120),
('27421', 'Mousseaux-Neuville', '31T', 378790, 5418585, 48.9083, 1.34583, 135),
('27422', 'Muids', '31T', 375543, 5453380, 49.2206, 1.29084, 10),
('27423', 'Muzy', '31T', 378307, 5403860, 48.7758, 1.34361, 77),
('27424', 'Nagel-Séez-Mesnil', '31T', 349307, 5421127, 48.9247, 0.942773, 175),
('27425', 'Nassandres', '31T', 334890, 5443632, 49.1233, 0.73695, 75),
('27426', 'Neaufles-Saint-Martin', '31T', 407182, 5459057, 49.2772, 1.72389, 70),
('27427', 'Neaufles-Auvergny', '31T', 333943, 5415322, 48.8686, 0.735551, 186),
('27428', 'Le Neubourg', '31T', 347229, 5446120, 49.1489, 0.905006, 137),
('27429', 'Neuilly', '31T', 384318, 5421000, 48.9311, 1.42055, 60),
('27430', 'La Neuve-Grange', '31T', 395057, 5468604, 49.3611, 1.55473, 144),
('27431', 'La Neuve-Lyre', '31T', 335234, 5419672, 48.9081, 0.751388, 170),
('27432', 'La Neuville-du-Bosc', '31T', 340744, 5451124, 49.1922, 0.814162, 140),
('27433', 'Neuville-sur-Authou', '31T', 327999, 5453578, 49.2108, 0.638332, 138),
('27434', 'Noards', '31T', 318461, 5454193, 49.2136, 0.507219, 165),
('27435', 'La Noë-Poulain', '31T', 319341, 5460006, 49.2661, 0.516671, 155),
('27436', 'Nogent-le-Sec', '31T', 353794, 5420637, 48.9214, 1.00417, 142),
('27437', 'Nojeon-en-Vexin', '31T', 395716, 5465101, 49.3297, 1.56472, 100),
('27438', 'Nonancourt', '31T', 367545, 5403795, 48.7731, 1.19722, 110),
('27439', 'Normanville', '31T', 365488, 5437705, 49.0775, 1.15806, 50),
('27440', 'Notre-Dame-de-l''Isle', '31T', 385603, 5444729, 49.1447, 1.43139, 20),
('27441', 'Notre-Dame-d''Épine', '31T', 325239, 5452120, 49.1969, 0.601105, 160),
('27442', 'Notre-Dame-du-Hamel', '31T', 317139, 5417702, 48.8853, 0.505554, 200),
('27444', 'Le Noyer-en-Ouche', '31T', 337199, 5430399, 49.005, 0.773895, 157),
('27445', 'Noyers', '31T', 403928, 5455561, 49.2453, 1.68, 12),
('27446', 'Ormes', '31T', 351209, 5435073, 49.0506, 0.963617, 140),
('27447', 'Orvaux', '31T', 356104, 5422554, 48.9392, 1.035, 154),
('27448', 'Pacy-sur-Eure', '31T', 381727, 5430260, 49.0139, 1.3825, 55),
('27449', 'Panilleuse', '31T', 390900, 5445147, 49.1494, 1.50389, 150),
('27451', 'Parville', '31T', 360676, 5432788, 49.0322, 1.09389, 134),
('27452', 'Perriers-la-Campagne', '31T', 337647, 5445652, 49.1422, 0.773895, 140),
('27453', 'Perriers-sur-Andelle', '31T', 381813, 5474806, 49.4144, 1.37056, 50),
('27454', 'Perruel', '31T', 382271, 5476433, 49.4292, 1.37639, 55),
('27455', 'Piencourt', '31T', 310394, 5449272, 49.1669, 0.398886, 168),
('27456', 'Pinterville', '31T', 367008, 5450243, 49.1906, 1.17472, 15),
('27457', 'Piseux', '31T', 351324, 5404326, 48.7742, 0.976389, 181),
('27458', 'Pîtres', '31T', 371149, 5464480, 49.3194, 1.22695, 10),
('27459', 'Les Places', '31T', 311552, 5447563, 49.1519, 0.415555, 170),
('27460', 'Plainville', '31T', 317361, 5439887, 49.0847, 0.498614, 170),
('27462', 'Le Planquay', '31T', 312272, 5441294, 49.0958, 0.428335, 201),
('27463', 'Plasnes', '31T', 326665, 5445275, 49.1358, 0.623609, 157),
('27464', 'Le Plessis-Grohan', '31T', 363522, 5422954, 48.9444, 1.13611, 155),
('27465', 'Le Plessis-Hébert', '31T', 379374, 5427623, 48.9897, 1.35112, 122),
('27466', 'Le Plessis-Sainte-Opportune', '31T', 344634, 5436737, 49.0639, 0.873056, 155),
('27467', 'Pont-Audemer', '31T', 319300, 5469806, 49.3542, 0.511673, 10),
('27468', 'Pont-Authou', '31T', 332640, 5457051, 49.2433, 0.700552, 50),
('27469', 'Pont-de-l''Arche', '31T', 365994, 5462657, 49.3019, 1.15666, 22),
('27470', 'Pont-Saint-Pierre', '31T', 374737, 5465942, 49.3333, 1.27584, 14),
('27471', 'Porte-Joie', '31T', 372978, 5456219, 49.2456, 1.25473, 10),
('27472', 'Portes', '31T', 350327, 5432501, 49.0272, 0.952504, 130),
('27473', 'Port-Mort', '31T', 383875, 5447390, 49.1683, 1.40694, 16),
('27474', 'Poses', '31T', 372537, 5462532, 49.3022, 1.24666, 10),
('27475', 'La Poterie-Mathieu', '31T', 320411, 5459322, 49.2603, 0.531671, 163),
('27476', 'Les Préaux', '31T', 316713, 5466739, 49.3258, 0.477495, 80),
('27477', 'Pressagny-l''Orgueilleux', '31T', 386670, 5443409, 49.1331, 1.44639, 30),
('27478', 'Prey', '31T', 369429, 5424913, 48.9633, 1.21611, 145),
('27480', 'Puchay', '31T', 393523, 5466503, 49.3419, 1.53417, 120),
('27481', 'Pullay', '31T', 343989, 5399799, 48.7317, 0.878338, 180),
('27482', 'La Pyle', '31T', 346816, 5451694, 49.1989, 0.897224, 150),
('27483', 'Quatremare', '31T', 360232, 5449762, 49.1847, 1.08195, 145),
('27484', 'Quessigny', '31T', 373310, 5421147, 48.9303, 1.27028, 145),
('27485', 'Quillebeuf-sur-Seine', '31T', 320875, 5482768, 49.4711, 0.527493, 17),
('27486', 'Quittebeuf', '31T', 354885, 5441279, 49.1072, 1.01167, 140),
('27487', 'Radepont', '31T', 378594, 5467801, 49.3508, 1.32834, 30),
('27488', 'Renneville', '31T', 378258, 5473586, 49.4028, 1.32194, 130),
('27489', 'Reuilly', '31T', 370311, 5437405, 49.0758, 1.22416, 134),
('27490', 'Richeville', '31T', 393602, 5458068, 49.2661, 1.5375, 140),
('27491', 'Roman', '31T', 356672, 5412189, 48.8461, 1.04639, 140),
('27492', 'Romilly-la-Puthenaye', '31T', 342469, 5429845, 49.0014, 0.846116, 155),
('27493', 'Romilly-sur-Andelle', '31T', 373745, 5465841, 49.3322, 1.26222, 10),
('27495', 'La Roquette', '31T', 379623, 5456750, 49.2517, 1.34583, 130),
('27496', 'Rosay-sur-Lieure', '31T', 386108, 5470050, 49.3725, 1.43111, 125),
('27497', 'Rougemontiers', '31T', 334602, 5469756, 49.3581, 0.722227, 130),
('27498', 'Rouge-Perriers', '31T', 342035, 5445988, 49.1464, 0.833884, 134),
('27499', 'La Roussière', '31T', 322864, 5425924, 48.9608, 0.580006, 202),
('27500', 'Routot', '31T', 335595, 5471920, 49.3778, 0.734997, 130),
('27501', 'Rouvray', '31T', 378580, 5435951, 49.0644, 1.33777, 120),
('27502', 'Rugles', '31T', 332015, 5410188, 48.8219, 0.711386, 180),
('27503', 'Le Sacq', '31T', 358631, 5417083, 48.8906, 1.07138, 149),
('27504', 'Sacquenville', '31T', 359359, 5438537, 49.0836, 1.07389, 140),
('27505', 'Saint-Agnan-de-Cernières', '31T', 318221, 5425240, 48.9533, 0.516941, 180),
('27506', 'Saint-Amand-des-Hautes-Terres', '31T', 349493, 5455544, 49.2342, 0.932503, 120),
('27507', 'Saint-André-de-l''Eure', '31T', 373735, 5418357, 48.9053, 1.27694, 140),
('27508', 'Saint-Antonin-de-Sommaire', '31T', 328930, 5411394, 48.8319, 0.668889, 220),
('27510', 'Saint-Aquilin-de-Pacy', '31T', 380135, 5429955, 49.0108, 1.36083, 50),
('27511', 'Saint-Aubin-d''Écrosville', '31T', 353751, 5445202, 49.1422, 0.994719, 140),
('27512', 'Saint-Aubin-de-Scellon', '31T', 316019, 5449576, 49.1714, 0.475834, 170),
('27513', 'Saint-Aubin-des-Hayes', '31T', 330406, 5431004, 49.0086, 0.680834, 160),
('27514', 'Saint-Aubin-du-Thenney', '31T', 316575, 5432712, 49.02, 0.491109, 180),
('27515', 'Saint-Aubin-le-Guichard', '31T', 332048, 5434199, 49.0378, 0.701947, 160),
('27516', 'Saint-Aubin-le-Vertueux', '31T', 325189, 5435771, 49.05, 0.607502, 164),
('27517', 'Saint-Aubin-sur-Gaillon', '31T', 378214, 5445134, 49.1469, 1.33, 110),
('27518', 'Saint-Aubin-sur-Quillebeuf', '31T', 320787, 5481905, 49.4633, 0.52667, 6),
('27519', 'Sainte-Barbe-sur-Gaillon', '31T', 377612, 5447217, 49.1656, 1.32111, 110),
('27520', 'Saint-Benoît-des-Ombres', '31T', 326938, 5455898, 49.2314, 0.622777, 130),
('27521', 'Saint-Christophe-sur-Avre', '31T', 339292, 5396409, 48.7, 0.81583, 200),
('27522', 'Saint-Christophe-sur-Condé', '31T', 325456, 5462127, 49.2869, 0.599723, 90),
('27523', 'Saint-Clair-d''Arcey', '31T', 329336, 5437187, 49.0639, 0.663612, 160),
('27524', 'Sainte-Colombe-la-Commanderie', '31T', 349615, 5442192, 49.1142, 0.939169, 136),
('27525', 'Sainte-Colombe-près-Vernon', '31T', 378672, 5439223, 49.0939, 1.33805, 130),
('27526', 'Sainte-Croix-sur-Aizier', '31T', 328231, 5476473, 49.4167, 0.631665, 120),
('27527', 'Saint-Cyr-de-Salerne', '31T', 329667, 5450559, 49.1842, 0.662494, 140),
('27528', 'Le Vaudreuil', '31T', 369464, 5457321, 49.2547, 1.20611, 14),
('27529', 'Saint-Cyr-la-Campagne', '31T', 355672, 5457387, 49.2522, 1.01666, 50),
('27530', 'Saint-Denis-d''Augerons', '31T', 315072, 5422345, 48.9264, 0.475284, 200),
('27531', 'Saint-Denis-des-Monts', '31T', 340693, 5458450, 49.2581, 0.810553, 150),
('27532', 'Saint-Denis-du-Béhélan', '31T', 350303, 5414210, 48.8628, 0.958896, 185),
('27533', 'Saint-Denis-le-Ferment', '31T', 406752, 5464686, 49.3278, 1.71666, 70),
('27534', 'Saint-Didier-des-Bois', '31T', 356431, 5455452, 49.235, 1.02778, 141),
('27535', 'Saint-Élier', '31T', 351343, 5427190, 48.9797, 0.968337, 110),
('27536', 'Saint-Éloi-de-Fourques', '31T', 339676, 5455482, 49.2311, 0.797774, 137),
('27537', 'Saint-Étienne-du-Vauvray', '31T', 370209, 5456315, 49.2458, 1.21667, 10),
('27538', 'Saint-Étienne-l''Allier', '31T', 321962, 5459735, 49.2644, 0.552785, 150),
('27539', 'Saint-Étienne-sous-Bailleul', '31T', 383707, 5442297, 49.1225, 1.40611, 90),
('27540', 'Sainte-Geneviève-lès-Gasny', '31T', 396719, 5437714, 49.0836, 1.58556, 20),
('27541', 'Saint-Georges-du-Mesnil', '31T', 322201, 5454009, 49.2131, 0.558606, 165),
('27542', 'Saint-Georges-du-Vièvre', '31T', 324435, 5457369, 49.2439, 0.587782, 140),
('27543', 'Saint-Georges-Motel', '31T', 379941, 5405771, 48.7933, 1.36528, 80),
('27544', 'Saint-Germain-de-Fresney', '31T', 375010, 5424352, 48.9594, 1.2925, 130),
('27545', 'Saint-Germain-de-Pasquier', '31T', 354552, 5456336, 49.2425, 1.00167, 80),
('27546', 'Saint-Germain-des-Angles', '31T', 364530, 5439211, 49.0908, 1.14444, 50),
('27547', 'Saint-Germain-la-Campagne', '31T', 310570, 5436036, 49.0481, 0.407506, 180),
('27548', 'Saint-Germain-sur-Avre', '31T', 372445, 5402879, 48.7658, 1.26416, 100),
('27549', 'Saint-Germain-Village', '31T', 318957, 5469230, 49.3489, 0.507217, 16),
('27550', 'Saint-Grégoire-du-Vièvre', '31T', 328013, 5457256, 49.2439, 0.636947, 150),
('27551', 'Saint-Jean-de-la-Léqueraye', '31T', 322413, 5454930, 49.2214, 0.561107, 150),
('27552', 'Saint-Jean-du-Thenney', '31T', 314540, 5432038, 49.0133, 0.46361, 182),
('27553', 'Saint-Julien-de-la-Liègue', '31T', 375635, 5443987, 49.1361, 1.295, 130),
('27554', 'Saint-Just', '31T', 386289, 5440637, 49.1081, 1.44195, 25),
('27555', 'Saint-Laurent-des-Bois', '31T', 376578, 5411559, 48.8447, 1.31777, 129),
('27556', 'Saint-Laurent-du-Tencement', '31T', 313305, 5417644, 48.8836, 0.453334, 223),
('27557', 'Saint-Léger-de-Rôtes', '31T', 328414, 5442161, 49.1083, 0.64889, 144),
('27558', 'Saint-Léger-du-Gennetey', '31T', 336588, 5461877, 49.2878, 0.752781, 116),
('27560', 'Saint-Luc', '31T', 370964, 5426206, 48.9753, 1.23666, 140),
('27561', 'Saint-Maclou', '31T', 311878, 5471262, 49.365, 0.408889, 113),
('27562', 'Saint-Marcel', '31T', 386605, 5439240, 49.0956, 1.44667, 50),
('27563', 'Saint-Mards-de-Blacarville', '31T', 319868, 5472353, 49.3772, 0.518335, 120),
('27564', 'Saint-Mards-de-Fresne', '31T', 314783, 5438706, 49.0733, 0.463883, 186),
('27565', 'Sainte-Marguerite-de-l''Autel', '31T', 342880, 5418493, 48.8994, 0.85611, 185),
('27566', 'Sainte-Marguerite-en-Ouche', '31T', 328735, 5432848, 49.0247, 0.657225, 165),
('27567', 'Sainte-Marie-de-Vatimesnil', '31T', 395925, 5457993, 49.2658, 1.56944, 127),
('27568', 'Sainte-Marthe', '31T', 344744, 5426135, 48.9686, 0.878616, 140),
('27569', 'Saint-Martin-du-Tilleul', '31T', 319822, 5442527, 49.1092, 0.531109, 173),
('27570', 'Saint-Martin-la-Campagne', '31T', 359361, 5436220, 49.0628, 1.07472, 142),
('27571', 'Saint-Martin-Saint-Firmin', '31T', 322093, 5461926, 49.2842, 0.553609, 90),
('27572', 'Saint-Meslin-du-Bosc', '31T', 345629, 5453427, 49.2142, 0.880276, 150),
('27573', 'Saint-Nicolas-d''Attez', '31T', 348713, 5408197, 48.8083, 0.93945, 166),
('27574', 'Saint-Nicolas-du-Bosc', '31T', 344766, 5452956, 49.2097, 0.868616, 145),
('27576', 'Sainte-Opportune-du-Bosc', '31T', 342407, 5447646, 49.1614, 0.838332, 140),
('27577', 'Sainte-Opportune-la-Mare', '31T', 321910, 5476799, 49.4178, 0.544448, 119),
('27578', 'Saint-Ouen-d''Attez', '31T', 349820, 5407642, 48.8036, 0.95472, 160),
('27579', 'Saint-Ouen-de-Pontcheuil', '31T', 350950, 5455567, 49.2347, 0.952496, 150),
('27580', 'Saint-Ouen-de-Thouberville', '31T', 346414, 5469164, 49.3558, 0.885003, 130),
('27581', 'Saint-Ouen-des-Champs', '31T', 321509, 5473783, 49.3906, 0.540279, 125),
('27582', 'Saint-Ouen-du-Tilleul', '31T', 350659, 5461971, 49.2922, 0.946112, 133),
('27584', 'Saint-Paul-de-Fourques', '31T', 339418, 5454253, 49.22, 0.794725, 140),
('27586', 'Saint-Philbert-sur-Boissey', '31T', 338472, 5457896, 49.2525, 0.780276, 155),
('27587', 'Saint-Philbert-sur-Risle', '31T', 329179, 5462875, 49.2947, 0.650555, 40),
('27588', 'Saint-Pierre-d''Autils', '31T', 385970, 5441910, 49.1194, 1.43722, 20),
('27589', 'Saint-Pierre-de-Bailleul', '31T', 382593, 5442321, 49.1225, 1.39084, 90),
('27590', 'Saint-Pierre-de-Cernières', '31T', 318052, 5424410, 48.9458, 0.515006, 169),
('27591', 'Saint-Pierre-de-Cormeilles', '31T', 309548, 5457029, 49.2364, 0.383616, 80),
('27592', 'Saint-Pierre-de-Salerne', '31T', 329687, 5452506, 49.2017, 0.661943, 140),
('27593', 'Saint-Pierre-des-Fleurs', '31T', 351967, 5457270, 49.2503, 0.965828, 150),
('27594', 'Saint-Pierre-des-Ifs', '31T', 327148, 5460003, 49.2683, 0.623888, 146),
('27595', 'Saint-Pierre-du-Bosguérard', '31T', 345626, 5459082, 49.265, 0.878057, 125),
('27596', 'Saint-Pierre-du-Mesnil', '31T', 322572, 5423152, 48.9358, 0.577228, 208),
('27597', 'Saint-Pierre-du-Val', '31T', 308519, 5475088, 49.3983, 0.360833, 50),
('27598', 'Saint-Pierre-du-Vauvray', '31T', 370554, 5454638, 49.2308, 1.22195, 40),
('27599', 'Saint-Pierre-la-Garenne', '31T', 383362, 5446104, 49.1567, 1.40028, 21);
INSERT INTO `ods_communes` (`oc_code_insee`, `oc_nom`, `oc_secteur`, `oc_x_utm`, `oc_y_utm`, `oc_latitude`, `oc_longitude`, `oc_altitude`) VALUES
('27600', 'Saint-Quentin-des-Isles', '31T', 323129, 5435528, 49.0472, 0.579441, 127),
('27601', 'Saint-Samson-de-la-Roque', '31T', 313709, 5478185, 49.4278, 0.430836, 80),
('27602', 'Saint-Sébastien-de-Morsent', '31T', 360083, 5430238, 49.0092, 1.08666, 131),
('27603', 'Saint-Siméon', '31T', 319286, 5462048, 49.2844, 0.514993, 96),
('27604', 'Saint-Sulpice-de-Grimbouville', '31T', 314530, 5472655, 49.3783, 0.444729, 20),
('27605', 'Saint-Sylvestre-de-Cormeilles', '31T', 310844, 5457046, 49.2369, 0.401392, 155),
('27606', 'Saint-Symphorien', '31T', 315741, 5465473, 49.3142, 0.464716, 110),
('27607', 'Saint-Thurien', '31T', 322758, 5475597, 49.4072, 0.556665, 120),
('27608', 'Saint-Victor-de-Chrétienville', '31T', 318743, 5438698, 49.0744, 0.518056, 170),
('27609', 'Saint-Victor-d''Épine', '31T', 325806, 5453369, 49.2083, 0.608339, 150),
('27610', 'Saint-Victor-sur-Avre', '31T', 342246, 5396696, 48.7033, 0.855838, 200),
('27611', 'Saint-Vigor', '31T', 373318, 5438416, 49.0856, 1.265, 34),
('27612', 'Saint-Vincent-des-Bois', '31T', 383179, 5436469, 49.07, 1.40056, 142),
('27613', 'Saint-Vincent-du-Boulay', '31T', 316756, 5441855, 49.1022, 0.489444, 185),
('27614', 'Sancourt', '31T', 404542, 5467597, 49.3536, 1.68556, 98),
('27615', 'Sassey', '31T', 370287, 5434625, 49.0508, 1.22472, 135),
('27616', 'La Saussaye', '31T', 353121, 5458042, 49.2575, 0.981392, 137),
('27617', 'Saussay-la-Campagne', '31T', 391974, 5463691, 49.3164, 1.51361, 125),
('27618', 'Sébécourt', '31T', 341971, 5426646, 48.9725, 0.840556, 155),
('27620', 'Selles', '31T', 317173, 5463540, 49.2972, 0.485284, 120),
('27621', 'Serez', '31T', 380133, 5421336, 48.9333, 1.36334, 140),
('27622', 'Serquigny', '31T', 333139, 5442078, 49.1089, 0.713613, 81),
('27623', 'Surtauville', '31T', 358467, 5452031, 49.2047, 1.05694, 160),
('27624', 'Surville', '31T', 361849, 5451266, 49.1986, 1.10361, 145),
('27625', 'Suzay', '31T', 392245, 5458990, 49.2742, 1.51861, 130),
('27626', 'Theillement', '31T', 340078, 5461651, 49.2867, 0.800828, 110),
('27627', 'Le Theil-Nolent', '31T', 320715, 5447536, 49.1544, 0.541107, 180),
('27628', 'Thevray', '31T', 333960, 5427467, 48.9778, 0.730839, 173),
('27629', 'Thiberville', '31T', 314312, 5445831, 49.1372, 0.454165, 170),
('27630', 'Thibouville', '31T', 339002, 5446231, 49.1478, 0.792228, 145),
('27631', 'Thierville', '31T', 334196, 5459662, 49.2672, 0.720832, 125),
('27632', 'Le Thil', '31T', 394748, 5463019, 49.3108, 1.55195, 110),
('27633', 'Les Thilliers-en-Vexin', '31T', 398855, 5454602, 49.2358, 1.61056, 120),
('27634', 'Thomer-la-Sôgne', '31T', 366010, 5418939, 48.9089, 1.17139, 150),
('27635', 'Le Thuit', '31T', 380688, 5457375, 49.2575, 1.36027, 140),
('27636', 'Le Thuit-Anger', '31T', 352258, 5459796, 49.2731, 0.968892, 127),
('27637', 'Thuit-Hébert', '31T', 342594, 5465503, 49.3219, 0.833883, 129),
('27638', 'Le Thuit-Signol', '31T', 350318, 5459106, 49.2664, 0.942497, 130),
('27639', 'Le Thuit-Simer', '31T', 347620, 5459520, 49.2694, 0.905279, 130),
('27640', 'Tilleul-Dame-Agnès', '31T', 345723, 5429908, 49.0028, 0.890552, 155),
('27641', 'Le Tilleul-Lambert', '31T', 350019, 5438411, 49.0803, 0.946105, 140),
('27642', 'Le Tilleul-Othon', '31T', 338691, 5442531, 49.1144, 0.789447, 145),
('27643', 'Tillières-sur-Avre', '31T', 357380, 5402377, 48.7581, 1.05944, 150),
('27644', 'Tilly', '31T', 392957, 5444612, 49.145, 1.53223, 150),
('27645', 'Tocqueville', '31T', 326706, 5475439, 49.4069, 0.611108, 130),
('27646', 'Le Torpt', '31T', 309172, 5467769, 49.3328, 0.373331, 128),
('27647', 'Tosny', '31T', 381563, 5452908, 49.2175, 1.37361, 30),
('27648', 'Tostes', '31T', 362701, 5457795, 49.2575, 1.11306, 120),
('27649', 'Touffreville', '31T', 386903, 5467500, 49.3497, 1.44278, 59),
('27650', 'Tournedos-Bois-Hubert', '31T', 352789, 5437997, 49.0772, 0.984164, 138),
('27651', 'Tournedos-sur-Seine', '31T', 373431, 5459237, 49.2728, 1.26, 10),
('27652', 'Tourneville', '31T', 362454, 5439757, 49.0953, 1.11584, 50),
('27653', 'Tourny', '31T', 394075, 5449039, 49.185, 1.54639, 145),
('27654', 'Tourville-la-Campagne', '31T', 347384, 5454645, 49.2256, 0.903894, 163),
('27655', 'Tourville-sur-Pont-Audemer', '31T', 319049, 5467125, 49.33, 0.509437, 34),
('27656', 'Toutainville', '31T', 315807, 5471035, 49.3642, 0.463054, 20),
('27657', 'Touville', '31T', 336927, 5463103, 49.2989, 0.756939, 130),
('27658', 'Le Tremblay-Omonville', '31T', 347068, 5442510, 49.1164, 0.904169, 135),
('27659', 'La Trinité', '31T', 370978, 5427658, 48.9883, 1.23639, 119),
('27660', 'La Trinité-de-Réville', '31T', 318181, 5427127, 48.9703, 0.515553, 186),
('27661', 'La Trinité-de-Thouberville', '31T', 345815, 5470109, 49.3642, 0.876394, 120),
('27662', 'Triqueville', '31T', 314088, 5467971, 49.3361, 0.440832, 60),
('27663', 'Le Troncq', '31T', 347947, 5450859, 49.1917, 0.913055, 145),
('27664', 'Le Tronquay', '31T', 389736, 5475907, 49.4258, 1.47945, 160),
('27665', 'Trouville-la-Haule', '31T', 324027, 5476792, 49.4183, 0.573613, 125),
('27666', 'La Vacherie', '31T', 363400, 5443565, 49.1297, 1.1275, 40),
('27667', 'Valailles', '31T', 324976, 5443814, 49.1222, 0.601108, 157),
('27668', 'Le Val-David', '31T', 372179, 5427722, 48.9892, 1.25278, 133),
('27669', 'Valletot', '31T', 327562, 5470591, 49.3636, 0.625, 125),
('27670', 'Vandrimare', '31T', 379771, 5470865, 49.3786, 1.34361, 120),
('27671', 'Vannecrocq', '31T', 312822, 5464614, 49.3056, 0.424997, 130),
('27673', 'Vatteville', '31T', 376284, 5459357, 49.2744, 1.29916, 140),
('27674', 'Vaux-sur-Eure', '31T', 378644, 5433293, 49.0406, 1.33945, 37),
('27676', 'Venables', '31T', 375855, 5451056, 49.1997, 1.29584, 120),
('27677', 'Venon', '31T', 357706, 5448436, 49.1722, 1.04777, 150),
('27678', 'Les Ventes', '31T', 359959, 5423692, 48.9503, 1.08722, 140),
('27679', 'Verneuil-sur-Avre', '31T', 347610, 5400688, 48.7406, 0.927219, 170),
('27680', 'Verneusses', '31T', 313276, 5419809, 48.9031, 0.451949, 225),
('27681', 'Vernon', '31T', 389187, 5438508, 49.0894, 1.48223, 25),
('27682', 'Vesly', '31T', 401919, 5455195, 49.2417, 1.65249, 90),
('27683', 'Vézillon', '31T', 383502, 5453670, 49.2247, 1.40001, 15),
('27684', 'Le Vieil-Évreux', '31T', 370897, 5429420, 49.0042, 1.23473, 136),
('27685', 'La Vieille-Lyre', '31T', 335187, 5420817, 48.9183, 0.750284, 160),
('27686', 'Vieux-Port', '31T', 326652, 5477543, 49.4258, 0.609446, 19),
('27687', 'Vieux-Villez', '31T', 375359, 5447916, 49.1714, 1.29, 120),
('27688', 'Villalet', '31T', 357521, 5421467, 48.9297, 1.05472, 120),
('27689', 'Villegats', '31T', 387688, 5428623, 49.0003, 1.46444, 130),
('27690', 'Villers-en-Vexin', '31T', 397528, 5456140, 49.2494, 1.59194, 131),
('27691', 'Villers-sur-le-Roule', '31T', 378192, 5450541, 49.1956, 1.32806, 70),
('27692', 'Villettes', '31T', 357372, 5445663, 49.1472, 1.04417, 140),
('27693', 'Sylvains-les-Moulins', '31T', 360096, 5420228, 48.9192, 1.09028, 155),
('27694', 'Villez-sous-Bailleul', '31T', 381590, 5440952, 49.11, 1.3775, 100),
('27695', 'Villez-sur-le-Neubourg', '31T', 344051, 5446302, 49.1497, 0.861386, 140),
('27697', 'Vironvay', '31T', 370797, 5452068, 49.2078, 1.22611, 129),
('27698', 'Vitot', '31T', 347064, 5447484, 49.1611, 0.902227, 146),
('27699', 'Voiscreville', '31T', 337797, 5461069, 49.2808, 0.769722, 120),
('27700', 'Vraiville', '31T', 357047, 5453458, 49.2172, 1.03695, 150),
('27701', 'Val-de-Reuil', '31T', 369486, 5457413, 49.2556, 1.20638, 12),
('28001', 'Abondant', '31T', 385600, 5405096, 48.7883, 1.44249, 140),
('28002', 'Allaines-Mervilliers', '31T', 412862, 5339658, 48.2042, 1.82722, 141),
('28003', 'Allainville', '31T', 375174, 5397967, 48.7222, 1.30277, 137),
('28004', 'Allonnes', '31T', 400584, 5354127, 48.3325, 1.65861, 145),
('28005', 'Alluyes', '31T', 378411, 5342913, 48.2278, 1.36278, 130),
('28006', 'Amilly', '31T', 381350, 5366974, 48.4447, 1.39556, 163),
('28007', 'Anet', '31T', 385579, 5413004, 48.8594, 1.44, 70),
('28008', 'Ardelles', '31T', 365209, 5378704, 48.5469, 1.17362, 227),
('28009', 'Ardelu', '31T', 419394, 5356238, 48.3542, 1.91195, 145),
('28010', 'Argenvilliers', '31T', 348439, 5347555, 48.2631, 0.957776, 260),
('28012', 'Arrou', '31T', 360361, 5328962, 48.0986, 1.12444, 154),
('28013', 'Aunay-sous-Auneau', '31T', 412138, 5366197, 48.4428, 1.81194, 140),
('28014', 'Aunay-sous-Crécy', '31T', 375293, 5392249, 48.6708, 1.30612, 110),
('28015', 'Auneau', '31T', 409482, 5368401, 48.4622, 1.77556, 140),
('28016', 'Les Autels-Villevillon', '31T', 351374, 5337468, 48.1731, 1.00083, 191),
('28017', 'Autheuil', '31T', 372665, 5318359, 48.0058, 1.29277, 134),
('28018', 'Authon-du-Perche', '31T', 343574, 5340147, 48.1953, 0.895002, 230),
('28019', 'Baigneaux', '31T', 412093, 5331208, 48.1281, 1.81862, 124),
('28020', 'Baignolet', '31T', 397754, 5336388, 48.1725, 1.62472, 135),
('28021', 'Bailleau-le-Pin', '31T', 376236, 5358651, 48.3689, 1.32889, 175),
('28022', 'Bailleau-l''Évêque', '31T', 381478, 5372130, 48.4911, 1.39583, 169),
('28023', 'Bailleau-Armenonville', '31T', 400443, 5376521, 48.5339, 1.65139, 120),
('28024', 'Barjouville', '31T', 387561, 5363079, 48.4108, 1.48056, 130),
('28025', 'Barmainville', '31T', 423294, 5346333, 48.2656, 1.96639, 138),
('28026', 'Baudreville', '31T', 419030, 5353803, 48.3322, 1.90751, 147),
('28027', 'La Bazoche-Gouet', '31T', 350031, 5333548, 48.1375, 0.984163, 185),
('28028', 'Bazoches-en-Dunois', '31T', 393376, 5328685, 48.1025, 1.56778, 135),
('28029', 'Bazoches-les-Hautes', '31T', 410977, 5333881, 48.1519, 1.80306, 134),
('28030', 'Beauche', '31T', 350326, 5394466, 48.6853, 0.966394, 192),
('28031', 'Beaumont-les-Autels', '31T', 348560, 5346655, 48.255, 0.959728, 260),
('28032', 'Beauvilliers', '31T', 400353, 5350332, 48.2983, 1.65639, 145),
('28033', 'Belhomert-Guéhouville', '31T', 356710, 5374403, 48.5064, 1.06, 200),
('28034', 'Berchères-Saint-Germain', '31T', 387556, 5377288, 48.5386, 1.47667, 170),
('28035', 'Berchères-les-Pierres', '31T', 393039, 5360286, 48.3867, 1.55527, 150),
('28036', 'Berchères-sur-Vesgre', '31T', 393040, 5410941, 48.8422, 1.54223, 80),
('28037', 'Bérou-la-Mulotière', '31T', 356714, 5401096, 48.7464, 1.05083, 140),
('28038', 'Béthonvilliers', '31T', 344788, 5343018, 48.2214, 0.910277, 210),
('28039', 'Béville-le-Comte', '31T', 405060, 5365601, 48.4364, 1.71639, 147),
('28040', 'Billancelles', '31T', 368137, 5372364, 48.4906, 1.21527, 190),
('28041', 'Blandainville', '31T', 373473, 5351947, 48.3081, 1.29361, 160),
('28042', 'Bleury', '31T', 407577, 5375040, 48.5217, 1.74833, 130),
('28044', 'Boisgasson', '31T', 362478, 5323165, 48.0469, 1.15472, 155),
('28045', 'Boissy-en-Drouais', '31T', 372252, 5398867, 48.7297, 1.26278, 140),
('28046', 'Boissy-lès-Perche', '31T', 344629, 5394868, 48.6875, 0.888892, 185),
('28047', 'Boisville-la-Saint-Père', '31T', 403316, 5353709, 48.3292, 1.69556, 150),
('28048', 'La Bourdinière-Saint-Loup', '31T', 385538, 5350456, 48.2969, 1.45667, 156),
('28049', 'Boncé', '31T', 389377, 5351801, 48.3097, 1.50806, 155),
('28050', 'Boncourt', '31T', 387286, 5411765, 48.8486, 1.46361, 70),
('28051', 'Bonneval', '31T', 379733, 5338067, 48.1844, 1.38195, 124),
('28052', 'Bouglainval', '31T', 390074, 5380203, 48.5653, 1.51, 140),
('28053', 'Le Boullay-les-Deux-Églises', '31T', 376884, 5387395, 48.6275, 1.32916, 176),
('28054', 'Le Boullay-Mivoye', '31T', 382565, 5389745, 48.6497, 1.40556, 144),
('28055', 'Le Boullay-Thierry', '31T', 384401, 5388471, 48.6386, 1.43083, 150),
('28056', 'Boutigny-Prouais', '31T', 396183, 5400164, 48.7458, 1.58777, 125),
('28057', 'Bouville', '31T', 379704, 5346499, 48.2603, 1.37916, 152),
('28058', 'Bréchamps', '31T', 391191, 5392351, 48.6747, 1.52195, 110),
('28059', 'Brezolles', '31T', 358441, 5395028, 48.6922, 1.07639, 160),
('28060', 'Briconville', '31T', 380930, 5376312, 48.5286, 1.38722, 179),
('28061', 'Brou', '31T', 364051, 5341384, 48.2111, 1.17, 155),
('28062', 'Broué', '31T', 391514, 5400592, 48.7489, 1.52417, 150),
('28063', 'Brunelles', '31T', 343905, 5354474, 48.3242, 0.894167, 187),
('28064', 'Bû', '31T', 389745, 5406218, 48.7992, 1.49861, 135),
('28065', 'Bullainville', '31T', 389429, 5336419, 48.1714, 1.51277, 138),
('28066', 'Bullou', '31T', 370234, 5344545, 48.2408, 1.25222, 160),
('28067', 'Cernay', '31T', 369813, 5360370, 48.3831, 1.24167, 180),
('28068', 'Challet', '31T', 384477, 5379203, 48.5553, 1.43444, 190),
('28069', 'Champagne', '31T', 394954, 5402164, 48.7636, 1.57055, 126),
('28070', 'Champhol', '31T', 389310, 5369439, 48.4683, 1.50251, 150),
('28071', 'Champrond-en-Gâtine', '31T', 357591, 5362889, 48.4031, 1.07584, 249),
('28072', 'Champrond-en-Perchet', '31T', 341793, 5353358, 48.3136, 0.866114, 190),
('28073', 'Champseru', '31T', 400876, 5371942, 48.4928, 1.65834, 145),
('28074', 'La Chapelle-d''Aunainville', '31T', 412376, 5364278, 48.4256, 1.81556, 150),
('28075', 'La Chapelle-du-Noyer', '31T', 374132, 5320952, 48.0294, 1.31167, 139),
('28076', 'La Chapelle-Forainvilliers', '31T', 389861, 5398616, 48.7308, 1.50222, 133),
('28077', 'La Chapelle-Fortin', '31T', 342741, 5390286, 48.6458, 0.864999, 222),
('28078', 'Chapelle-Guillaume', '31T', 344149, 5330925, 48.1125, 0.906112, 200),
('28079', 'Chapelle-Royale', '31T', 355114, 5334220, 48.1447, 1.05222, 170),
('28080', 'Charbonnières', '31T', 346579, 5339757, 48.1925, 0.935553, 210),
('28081', 'Charonville', '31T', 374334, 5348963, 48.2814, 1.30611, 150),
('28082', 'Charpont', '31T', 385553, 5395769, 48.7044, 1.44445, 85),
('28083', 'Charray', '31T', 375094, 5314691, 47.9733, 1.32639, 120),
('28084', 'Chartainvilliers', '31T', 393126, 5377921, 48.5453, 1.55194, 155),
('28085', 'Chartres', '31T', 388480, 5366953, 48.4458, 1.49194, 140),
('28086', 'Chassant', '31T', 356712, 5350893, 48.295, 1.06805, 220),
('28087', 'Châtaincourt', '31T', 369629, 5395066, 48.695, 1.22833, 160),
('28088', 'Châteaudun', '31T', 375890, 5325639, 48.0719, 1.33388, 141),
('28089', 'Châteauneuf-en-Thymerais', '31T', 370403, 5382506, 48.5822, 1.24277, 216),
('28090', 'Les Châtelets', '31T', 353581, 5390642, 48.6517, 1.01194, 180),
('28091', 'Les Châtelliers-Notre-Dame', '31T', 367046, 5356449, 48.3472, 1.20556, 206),
('28092', 'Châtenay', '31T', 417590, 5356789, 48.3589, 1.8875, 150),
('28093', 'Châtillon-en-Dunois', '31T', 365039, 5330765, 48.1158, 1.18667, 158),
('28094', 'Chaudon', '31T', 389432, 5391336, 48.6653, 1.49834, 90),
('28095', 'Chauffours', '31T', 377637, 5361586, 48.3956, 1.34694, 155),
('28096', 'La Chaussée-d''Ivry', '31T', 388629, 5415692, 48.8842, 1.48084, 60),
('28098', 'Cherisy', '31T', 383960, 5400775, 48.7492, 1.42139, 95),
('28099', 'Chuisnes', '31T', 367737, 5367554, 48.4472, 1.21138, 168),
('28100', 'Cintray', '31T', 379166, 5367700, 48.4508, 1.36583, 157),
('28101', 'Civry', '31T', 387847, 5327370, 48.0897, 1.49389, 134),
('28102', 'Clévilliers', '31T', 380950, 5378226, 48.5458, 1.38694, 195),
('28103', 'Cloyes-sur-le-Loir', '31T', 368560, 5317401, 47.9964, 1.23806, 100),
('28104', 'Coltainville', '31T', 395489, 5371514, 48.4881, 1.58555, 140),
('28105', 'Combres', '31T', 356529, 5354234, 48.325, 1.06445, 223),
('28106', 'Conie-Molitard', '31T', 383947, 5329918, 48.1119, 1.44084, 126),
('28107', 'Corancez', '31T', 390428, 5358205, 48.3675, 1.52056, 138),
('28108', 'Cormainville', '31T', 396591, 5332610, 48.1383, 1.61, 135),
('28109', 'Les Corvées-les-Yys', '31T', 362395, 5358290, 48.3628, 1.14222, 227),
('28110', 'Le Coudray', '31T', 389169, 5364345, 48.4225, 1.50195, 140),
('28111', 'Coudray-au-Perche', '31T', 340861, 5344362, 48.2325, 0.856939, 160),
('28112', 'Coudreceau', '31T', 345989, 5356858, 48.3461, 0.921391, 200),
('28113', 'Coulombs', '31T', 392784, 5390097, 48.6547, 1.54417, 95),
('28114', 'Courbehaye', '31T', 396798, 5334923, 48.1592, 1.61222, 120),
('28115', 'Courtalain', '31T', 361385, 5326806, 48.0794, 1.13888, 150),
('28116', 'Courville-sur-Eure', '31T', 369882, 5367875, 48.4506, 1.24028, 170),
('28117', 'Crécy-Couvé', '31T', 373372, 5392385, 48.6717, 1.27999, 160),
('28118', 'Croisilles', '31T', 389550, 5394206, 48.6911, 1.49917, 130),
('28119', 'La Croix-du-Perche', '31T', 355441, 5348732, 48.2753, 1.05167, 216),
('28120', 'Crucey-Villages', '31T', 358537, 5392368, 48.6683, 1.07861, 160),
('28121', 'Dambron', '31T', 416286, 5329539, 48.1136, 1.87528, 125),
('28122', 'Dammarie', '31T', 388584, 5355523, 48.3431, 1.49638, 145),
('28123', 'Dampierre-sous-Brou', '31T', 359924, 5341483, 48.2111, 1.11445, 160),
('28124', 'Dampierre-sur-Avre', '31T', 364156, 5402981, 48.765, 1.15139, 130),
('28126', 'Dancy', '31T', 385789, 5334143, 48.1503, 1.46444, 143),
('28127', 'Dangeau', '31T', 372856, 5340934, 48.2089, 1.28861, 140),
('28128', 'Dangers', '31T', 378239, 5374269, 48.5097, 1.35138, 199),
('28129', 'Denonville', '31T', 412134, 5360638, 48.3928, 1.81305, 150),
('28130', 'Digny', '31T', 363828, 5377594, 48.5367, 1.15528, 204),
('28132', 'Donnemain-Saint-Mamès', '31T', 378829, 5329530, 48.1075, 1.37222, 136),
('28133', 'Douy', '31T', 371140, 5321512, 48.0339, 1.27139, 120),
('28134', 'Dreux', '31T', 380263, 5398875, 48.7314, 1.37167, 100),
('28135', 'Droue-sur-Drouette', '31T', 404405, 5383957, 48.6014, 1.70333, 130),
('28136', 'Écluzelles', '31T', 384061, 5396788, 48.7133, 1.42389, 83),
('28137', 'Écrosnes', '31T', 406146, 5377782, 48.5461, 1.72834, 140),
('28139', 'Épeautrolles', '31T', 376032, 5352138, 48.3103, 1.32805, 165),
('28140', 'Épernon', '31T', 402622, 5385069, 48.6111, 1.67889, 114),
('28141', 'Ermenonville-la-Grande', '31T', 380337, 5354980, 48.3367, 1.38528, 158),
('28142', 'Ermenonville-la-Petite', '31T', 377913, 5350491, 48.2958, 1.35389, 155),
('28143', 'Escorpain', '31T', 368218, 5397663, 48.7181, 1.20834, 150),
('28144', 'Les Étilleux', '31T', 338282, 5344404, 48.2322, 0.822218, 229),
('28145', 'Fains-la-Folie', '31T', 399135, 5342077, 48.2239, 1.64194, 142),
('28146', 'Faverolles', '31T', 395391, 5393847, 48.6889, 1.57861, 130),
('28147', 'Favières', '31T', 369249, 5376910, 48.5317, 1.22889, 240),
('28148', 'Le Favril', '31T', 363770, 5370058, 48.4689, 1.15695, 191),
('28149', 'La Ferté-Vidame', '31T', 345319, 5386475, 48.6122, 0.901396, 246),
('28150', 'La Ferté-Villeneuil', '31T', 376443, 5315713, 47.9828, 1.34417, 125),
('28151', 'Fessanvilliers-Mattanvilliers', '31T', 356420, 5397582, 48.7147, 1.04806, 175),
('28153', 'Flacey', '31T', 377392, 5333885, 48.1464, 1.35167, 152),
('28154', 'Fontaine-la-Guyon', '31T', 375362, 5370347, 48.4739, 1.31362, 180),
('28155', 'Fontaine-les-Ribouts', '31T', 371633, 5390571, 48.655, 1.25695, 128),
('28156', 'Fontaine-Simon', '31T', 353627, 5374266, 48.5044, 1.01833, 195),
('28157', 'Fontenay-sur-Conie', '31T', 401126, 5335495, 48.165, 1.67027, 122),
('28158', 'Fontenay-sur-Eure', '31T', 382433, 5361732, 48.3978, 1.41167, 150),
('28159', 'La Framboisière', '31T', 353563, 5384432, 48.5958, 1.01389, 220),
('28160', 'Francourville', '31T', 401054, 5362148, 48.4047, 1.66306, 150),
('28161', 'Frazé', '31T', 359129, 5346909, 48.2597, 1.10195, 190),
('28162', 'Fresnay-le-Comte', '31T', 387241, 5351133, 48.3033, 1.47944, 150),
('28163', 'Fresnay-le-Gilmert', '31T', 383238, 5374812, 48.5156, 1.41889, 155),
('28164', 'Fresnay-l''Évêque', '31T', 412822, 5346483, 48.2656, 1.82527, 140),
('28165', 'Frétigny', '31T', 349774, 5359815, 48.3736, 0.971386, 220),
('28166', 'Friaize', '31T', 362134, 5366143, 48.4333, 1.13612, 216),
('28167', 'Fruncé', '31T', 368803, 5362988, 48.4064, 1.22722, 190),
('28168', 'Gallardon', '31T', 403360, 5375574, 48.5258, 1.69111, 130),
('28169', 'Garancières-en-Beauce', '31T', 420306, 5365489, 48.4375, 1.9225, 153),
('28170', 'Garancières-en-Drouais', '31T', 373961, 5395832, 48.7028, 1.28694, 143),
('28171', 'Garnay', '31T', 377752, 5396180, 48.7067, 1.33834, 100),
('28172', 'Gas', '31T', 401736, 5380111, 48.5664, 1.66805, 130),
('28173', 'Gasville-Oisème', '31T', 393832, 5370711, 48.4806, 1.56334, 150),
('28175', 'La Gaudaine', '31T', 346578, 5351992, 48.3025, 0.931106, 210),
('28176', 'Le Gault-Saint-Denis', '31T', 387586, 5344578, 48.2444, 1.48583, 145),
('28177', 'Gellainville', '31T', 391254, 5362668, 48.4078, 1.53055, 147),
('28178', 'Germainville', '31T', 388501, 5400095, 48.7439, 1.48333, 131),
('28179', 'Germignonville', '31T', 406256, 5338404, 48.1919, 1.7386, 135),
('28180', 'Gilles', '31T', 391236, 5418822, 48.9128, 1.51555, 100),
('28182', 'Gohory', '31T', 368623, 5336396, 48.1672, 1.23306, 172),
('28183', 'Gommerville', '31T', 422017, 5355398, 48.3469, 1.94751, 141),
('28184', 'Gouillons', '31T', 413985, 5355174, 48.3439, 1.83917, 150),
('28185', 'Goussainville', '31T', 393841, 5403760, 48.7778, 1.555, 128),
('28187', 'Guainville', '31T', 389618, 5419348, 48.9172, 1.49334, 100),
('28188', 'Le Gué-de-Longroi', '31T', 405487, 5372728, 48.5006, 1.72055, 120),
('28189', 'Guilleville', '31T', 412072, 5341924, 48.2244, 1.81612, 135),
('28190', 'Guillonville', '31T', 400549, 5327228, 48.0906, 1.66444, 130),
('28191', 'Hanches', '31T', 400253, 5384307, 48.6039, 1.64695, 112),
('28192', 'Happonvilliers', '31T', 360173, 5354143, 48.325, 1.11361, 212),
('28193', 'Havelu', '31T', 392457, 5405053, 48.7892, 1.53583, 130),
('28194', 'Houville-la-Branche', '31T', 399611, 5366590, 48.4444, 1.64251, 150),
('28195', 'Houx', '31T', 398233, 5380204, 48.5667, 1.62056, 110),
('28196', 'Illiers-Combray', '31T', 370072, 5351005, 48.2989, 1.24806, 160),
('28197', 'Intréville', '31T', 421282, 5349880, 48.2972, 1.93862, 143),
('28198', 'Jallans', '31T', 378898, 5325946, 48.0753, 1.37416, 129),
('28199', 'Janville', '31T', 417210, 5339099, 48.1997, 1.88583, 136),
('28200', 'Jaudrais', '31T', 361936, 5382429, 48.5797, 1.12806, 176),
('28201', 'Jouy', '31T', 393160, 5374276, 48.5125, 1.55334, 110),
('28202', 'Lamblore', '31T', 346650, 5387953, 48.6258, 0.918895, 229),
('28203', 'Landelles', '31T', 366971, 5369920, 48.4683, 1.20028, 190),
('28204', 'Langey', '31T', 364971, 5322612, 48.0425, 1.18833, 154),
('28205', 'Lanneray', '31T', 369101, 5327489, 48.0872, 1.24222, 150),
('28206', 'Laons', '31T', 365874, 5396267, 48.705, 1.17694, 160),
('28207', 'Léthuin', '31T', 416373, 5357949, 48.3692, 1.87084, 150),
('28208', 'Levainville', '31T', 406876, 5372303, 48.4969, 1.73945, 143),
('28209', 'Lèves', '31T', 387795, 5369715, 48.4706, 1.48194, 120),
('28210', 'Levesville-la-Chenard', '31T', 413049, 5350525, 48.3019, 1.8275, 145),
('28211', 'Logron', '31T', 371069, 5333993, 48.1461, 1.26667, 162),
('28212', 'Loigny-la-Bataille', '31T', 405965, 5330719, 48.1228, 1.73639, 125),
('28213', 'Lormaye', '31T', 392524, 5389360, 48.6481, 1.54083, 95),
('28214', 'La Loupe', '31T', 353250, 5370815, 48.4733, 1.01445, 220),
('28215', 'Louville-la-Chenard', '31T', 410412, 5353130, 48.325, 1.7914, 150),
('28216', 'Louvilliers-en-Drouais', '31T', 373855, 5399294, 48.7339, 1.28444, 133),
('28217', 'Louvilliers-lès-Perche', '31T', 358701, 5387483, 48.6244, 1.0825, 186),
('28218', 'Lucé', '31T', 386396, 5366531, 48.4417, 1.46389, 155),
('28219', 'Luigny', '31T', 353386, 5345015, 48.2414, 1.02527, 235),
('28220', 'Luisant', '31T', 386923, 5365131, 48.4292, 1.47139, 155),
('28221', 'Lumeau', '31T', 409818, 5329885, 48.1158, 1.78833, 124),
('28222', 'Luplanté', '31T', 381344, 5350975, 48.3008, 1.39999, 155),
('28223', 'Luray', '31T', 382116, 5397601, 48.7203, 1.39723, 134),
('28224', 'Lutz-en-Dunois', '31T', 381860, 5324031, 48.0586, 1.41444, 137),
('28225', 'Magny', '31T', 371520, 5356717, 48.3506, 1.26583, 184),
('28226', 'Maillebois', '31T', 363621, 5388505, 48.6347, 1.14889, 160),
('28227', 'Maintenon', '31T', 395414, 5382943, 48.5908, 1.58167, 100),
('28229', 'Mainvilliers', '31T', 386234, 5367647, 48.4517, 1.46139, 160),
('28230', 'Maisons', '31T', 414648, 5362329, 48.4083, 1.84666, 155),
('28231', 'La Mancelière', '31T', 352222, 5390337, 48.6486, 0.993613, 197),
('28232', 'Manou', '31T', 350907, 5376222, 48.5214, 0.980834, 223),
('28233', 'Marboué', '31T', 375847, 5330304, 48.1139, 1.33195, 120),
('28234', 'Marchéville', '31T', 370800, 5358556, 48.3669, 1.25555, 195),
('28235', 'Marchezais', '31T', 390592, 5403575, 48.7756, 1.51084, 138),
('28236', 'Margon', '31T', 339613, 5355706, 48.3342, 0.835839, 120),
('28237', 'Marolles-les-Buis', '31T', 346632, 5358571, 48.3617, 0.929439, 170),
('28239', 'Marville-Moutiers-Brûlé', '31T', 381443, 5392827, 48.6772, 1.38945, 133),
('28240', 'Meaucé', '31T', 352366, 5372352, 48.4869, 1.00195, 205),
('28241', 'Le Mée', '31T', 381880, 5315938, 47.9858, 1.41694, 128),
('28242', 'Méréglise', '31T', 365577, 5350059, 48.2894, 1.18778, 163),
('28243', 'Mérouville', '31T', 418335, 5349891, 48.2969, 1.89889, 138),
('28245', 'Meslay-le-Grenet', '31T', 380304, 5358317, 48.3667, 1.38389, 170),
('28246', 'Meslay-le-Vidame', '31T', 386019, 5348748, 48.2817, 1.46361, 150),
('28247', 'Le Mesnil-Simon', '31T', 392896, 5417245, 48.8989, 1.53862, 130),
('28248', 'Le Mesnil-Thomas', '31T', 359515, 5384806, 48.6006, 1.09445, 190),
('28249', 'Mévoisins', '31T', 396153, 5378606, 48.5519, 1.59277, 110),
('28250', 'Mézières-au-Perche', '31T', 371988, 5345463, 48.2494, 1.27556, 150),
('28251', 'Mézières-en-Drouais', '31T', 384191, 5398113, 48.7253, 1.42528, 90),
('28252', 'Miermaigne', '31T', 351109, 5345538, 48.2456, 0.99444, 240),
('28253', 'Mignières', '31T', 383457, 5357510, 48.36, 1.42667, 161),
('28254', 'Mittainvilliers', '31T', 375036, 5373288, 48.5003, 1.30833, 223),
('28255', 'Moinville-la-Jeulin', '31T', 403804, 5359414, 48.3806, 1.70084, 152),
('28256', 'Moléans', '31T', 380011, 5330617, 48.1175, 1.38778, 120),
('28257', 'Mondonville-Saint-Jean', '31T', 413217, 5357471, 48.3644, 1.82833, 150),
('28258', 'Montainville', '31T', 392281, 5347391, 48.2706, 1.54833, 155),
('28259', 'Montboissier', '31T', 380643, 5342063, 48.2206, 1.39306, 139),
('28260', 'Montharville', '31T', 375953, 5338085, 48.1839, 1.33111, 175),
('28261', 'Montigny-le-Chartif', '31T', 363257, 5349620, 48.285, 1.15666, 180),
('28262', 'Montigny-le-Gannelon', '31T', 368291, 5319261, 48.0131, 1.23388, 142),
('28263', 'Montigny-sur-Avre', '31T', 354605, 5399328, 48.73, 1.02278, 153),
('28264', 'Montireau', '31T', 354026, 5363473, 48.4075, 1.0275, 270),
('28265', 'Montlandon', '31T', 353633, 5361784, 48.3922, 1.02278, 250),
('28267', 'Montreuil', '31T', 380635, 5403903, 48.7767, 1.37527, 80),
('28268', 'Morainville', '31T', 413307, 5359292, 48.3808, 1.82917, 150),
('28269', 'Morancez', '31T', 388578, 5361484, 48.3967, 1.49472, 140),
('28270', 'Moriers', '31T', 384078, 5341467, 48.2158, 1.43945, 136),
('28271', 'Morvilliers', '31T', 347915, 5390051, 48.645, 0.935281, 210),
('28272', 'Mottereau', '31T', 364949, 5346181, 48.2544, 1.18056, 170),
('28273', 'Moulhard', '31T', 355004, 5341267, 48.2081, 1.04833, 190),
('28274', 'Moutiers', '31T', 409477, 5350025, 48.2969, 1.77945, 150),
('28275', 'Néron', '31T', 390465, 5384489, 48.6039, 1.51417, 110),
('28276', 'Neuvy-en-Beauce', '31T', 416948, 5346638, 48.2675, 1.88083, 142),
('28277', 'Neuvy-en-Dunois', '31T', 391673, 5340329, 48.2069, 1.54195, 142),
('28278', 'Nogent-le-Phaye', '31T', 394721, 5366648, 48.4442, 1.57639, 135),
('28279', 'Nogent-le-Roi', '31T', 391891, 5389434, 48.6486, 1.53222, 100),
('28280', 'Nogent-le-Rotrou', '31T', 338398, 5354288, 48.3211, 0.82, 110),
('28281', 'Nogent-sur-Eure', '31T', 378774, 5360882, 48.3894, 1.3625, 160),
('28282', 'Nonvilliers-Grandhoux', '31T', 364605, 5356013, 48.3428, 1.17277, 208),
('28283', 'Nottonville', '31T', 388929, 5329819, 48.1119, 1.50777, 120),
('28284', 'Oinville-Saint-Liphard', '31T', 419739, 5342799, 48.2333, 1.91916, 140),
('28285', 'Oinville-sous-Auneau', '31T', 405978, 5368921, 48.4664, 1.72806, 140),
('28286', 'Ollé', '31T', 373938, 5360833, 48.3881, 1.29722, 170),
('28287', 'Orgères-en-Beauce', '31T', 402452, 5333279, 48.1453, 1.68861, 131),
('28288', 'Orlu', '31T', 420100, 5358173, 48.3717, 1.92111, 149),
('28289', 'Ormoy', '31T', 387475, 5386587, 48.6222, 1.47306, 141),
('28290', 'Orrouer', '31T', 373527, 5363622, 48.4131, 1.29083, 162),
('28291', 'Ouarville', '31T', 409414, 5356450, 48.3547, 1.77722, 151),
('28292', 'Ouerre', '31T', 387104, 5395644, 48.7036, 1.46555, 100),
('28293', 'Oulins', '31T', 387895, 5413668, 48.8658, 1.47138, 70),
('28294', 'Oysonville', '31T', 422913, 5360790, 48.3956, 1.95861, 150),
('28295', 'Ozoir-le-Breuil', '31T', 386748, 5318867, 48.0131, 1.48138, 131),
('28296', 'Péronville', '31T', 394640, 5324307, 48.0633, 1.58584, 120),
('28297', 'Pézy', '31T', 394424, 5352879, 48.3203, 1.57583, 160),
('28298', 'Pierres', '31T', 394089, 5383308, 48.5939, 1.56361, 100),
('28299', 'Les Pinthières', '31T', 394745, 5395372, 48.7025, 1.56944, 135),
('28300', 'Poinville', '31T', 418455, 5336611, 48.1775, 1.90306, 135),
('28301', 'Poisvilliers', '31T', 386894, 5373965, 48.5086, 1.46861, 165),
('28302', 'Pontgouin', '31T', 364275, 5371436, 48.4814, 1.16333, 180),
('28303', 'Poupry', '31T', 413864, 5328001, 48.0994, 1.84306, 122),
('28304', 'Prasville', '31T', 404637, 5347726, 48.2756, 1.71473, 145),
('28305', 'Pré-Saint-Évroult', '31T', 386359, 5337869, 48.1839, 1.47111, 132),
('28306', 'Pré-Saint-Martin', '31T', 386114, 5341117, 48.2131, 1.46694, 135),
('28308', 'Prudemanche', '31T', 362786, 5397917, 48.7192, 1.13444, 178),
('28309', 'Prunay-le-Gillon', '31T', 399086, 5357921, 48.3664, 1.63749, 150),
('28310', 'La Puisaye', '31T', 349527, 5386021, 48.6092, 0.958613, 230),
('28311', 'Le Puiset', '31T', 415841, 5340076, 48.2083, 1.86722, 140),
('28312', 'Puiseux', '31T', 380304, 5388372, 48.6369, 1.37527, 160),
('28313', 'Réclainville', '31T', 407267, 5354817, 48.3397, 1.74861, 150),
('28314', 'Les Ressuintes', '31T', 348077, 5384670, 48.5967, 0.939449, 235),
('28315', 'Revercourt', '31T', 359243, 5398468, 48.7233, 1.08611, 159),
('28316', 'Rohaire', '31T', 341821, 5393247, 48.6722, 0.851386, 200),
('28317', 'Roinville', '31T', 407728, 5366637, 48.4461, 1.75223, 150),
('28318', 'Romilly-sur-Aigre', '31T', 371903, 5315781, 47.9825, 1.28333, 100),
('28319', 'Rouvray-Saint-Denis', '31T', 421789, 5347835, 48.2789, 1.94583, 140),
('28320', 'Rouvray-Saint-Florentin', '31T', 393823, 5346033, 48.2586, 1.56945, 140),
('28321', 'Rouvres', '31T', 389022, 5410865, 48.8408, 1.48751, 72),
('28322', 'Rueil-la-Gadelière', '31T', 350942, 5398404, 48.7208, 0.973336, 160),
('28323', 'Saint-Ange-et-Torçay', '31T', 369446, 5388953, 48.64, 1.22778, 140),
('28324', 'Saint-Arnoult-des-Bois', '31T', 371634, 5372623, 48.4936, 1.2625, 188),
('28325', 'Saint-Aubin-des-Bois', '31T', 379048, 5369834, 48.47, 1.36362, 170),
('28326', 'Saint-Avit-les-Guespières', '31T', 372040, 5347810, 48.2706, 1.27555, 148),
('28327', 'Saint-Bomer', '31T', 338540, 5340380, 48.1961, 0.827222, 190),
('28329', 'Saint-Christophe', '31T', 378524, 5331699, 48.1269, 1.3675, 110),
('28330', 'Saint-Cloud-en-Dunois', '31T', 386037, 5321661, 48.0381, 1.47111, 132),
('28331', 'Saint-Denis-d''Authou', '31T', 350866, 5356728, 48.3461, 0.987217, 240),
('28332', 'Sainte-Gemme-Moronval', '31T', 383792, 5399604, 48.7386, 1.41944, 81),
('28333', 'Saint-Denis-des-Puits', '31T', 365173, 5361715, 48.3942, 1.1786, 200),
('28334', 'Saint-Denis-les-Ponts', '31T', 372736, 5325276, 48.0681, 1.29167, 120),
('28335', 'Saint-Éliph', '31T', 354006, 5368263, 48.4506, 1.02556, 232),
('28336', 'Saint-Éman', '31T', 367970, 5353679, 48.3225, 1.21889, 160),
('28337', 'Saint-Georges-sur-Eure', '31T', 378333, 5364320, 48.4203, 1.35555, 149),
('28339', 'Saint-Germain-le-Gaillard', '31T', 371333, 5364784, 48.4231, 1.26084, 174),
('28340', 'Saint-Hilaire-sur-Yerre', '31T', 369959, 5320612, 48.0256, 1.25583, 110),
('28341', 'Saint-Jean-de-Rebervilliers', '31T', 371096, 5385919, 48.6131, 1.25111, 175),
('28342', 'Saint-Jean-Pierre-Fixte', '31T', 339545, 5351135, 48.2931, 0.836661, 120),
('28343', 'Saint-Laurent-la-Gâtine', '31T', 392805, 5395502, 48.7033, 1.54305, 135),
('28344', 'Saint-Léger-des-Aubées', '31T', 406761, 5362855, 48.4119, 1.74, 140),
('28346', 'Saint-Lubin-de-Cravant', '31T', 359522, 5397349, 48.7133, 1.09028, 150),
('28347', 'Saint-Lubin-de-la-Haye', '31T', 395218, 5408614, 48.8217, 1.5725, 110),
('28348', 'Saint-Lubin-des-Joncherets', '31T', 367758, 5403296, 48.7686, 1.20028, 110),
('28349', 'Saint-Lucien', '31T', 398788, 5389399, 48.6494, 1.62584, 123),
('28350', 'Saint-Luperce', '31T', 375558, 5366203, 48.4367, 1.3175, 154),
('28351', 'Saint-Maixme-Hauterive', '31T', 366078, 5383348, 48.5889, 1.18389, 190),
('28352', 'Saint-Martin-de-Nigelles', '31T', 397546, 5385282, 48.6122, 1.61, 105),
('28353', 'Saint-Maur-sur-le-Loir', '31T', 382571, 5334456, 48.1525, 1.42111, 130),
('28354', 'Saint-Maurice-Saint-Germain', '31T', 358000, 5373444, 48.4981, 1.07778, 190),
('28355', 'Saint-Ouen-Marchefroy', '31T', 391890, 5411612, 48.8481, 1.52638, 90),
('28356', 'Saint-Pellerin', '31T', 361714, 5325840, 48.0708, 1.14361, 149),
('28357', 'Saint-Piat', '31T', 395491, 5378247, 48.5486, 1.58389, 108),
('28358', 'Saint-Prest', '31T', 391519, 5372175, 48.4933, 1.53167, 115),
('28359', 'Saint-Rémy-sur-Avre', '31T', 370949, 5402635, 48.7633, 1.24389, 100),
('28360', 'Saint-Sauveur-Marville', '31T', 373269, 5384139, 48.5975, 1.28112, 183),
('28361', 'Saint-Symphorien-le-Château', '31T', 408411, 5374594, 48.5178, 1.75972, 150),
('28362', 'Saint-Victor-de-Buthon', '31T', 349837, 5363737, 48.4089, 0.970834, 221),
('28363', 'Sainville', '31T', 417252, 5363217, 48.4167, 1.88167, 153),
('28364', 'Sancheville', '31T', 394324, 5338581, 48.1917, 1.57806, 139),
('28365', 'Sandarville', '31T', 377896, 5356422, 48.3492, 1.35194, 165),
('28366', 'Santeuil', '31T', 406368, 5360205, 48.3881, 1.73528, 145),
('28367', 'Santilly', '31T', 416298, 5333214, 48.1467, 1.87472, 135),
('28368', 'La Saucelle', '31T', 354855, 5388446, 48.6322, 1.03, 191),
('28369', 'Saulnières', '31T', 372753, 5391225, 48.6611, 1.27195, 127),
('28370', 'Saumeray', '31T', 375354, 5345635, 48.2517, 1.32083, 136),
('28371', 'Saussay', '31T', 383376, 5412926, 48.8583, 1.41, 62),
('28372', 'Senantes', '31T', 394844, 5390830, 48.6617, 1.57194, 120),
('28373', 'Senonches', '31T', 355245, 5380496, 48.5608, 1.03806, 222),
('28374', 'Serazereux', '31T', 384493, 5383960, 48.5981, 1.43334, 177),
('28375', 'Serville', '31T', 388724, 5403087, 48.7708, 1.48555, 138),
('28376', 'Soizé', '31T', 342932, 5337075, 48.1675, 0.887505, 240),
('28377', 'Sorel-Moussel', '31T', 380141, 5410338, 48.8344, 1.36667, 80),
('28378', 'Souancé-au-Perche', '31T', 340947, 5348160, 48.2667, 0.856669, 145),
('28379', 'Soulaires', '31T', 395549, 5374756, 48.5172, 1.58555, 140),
('28380', 'Sours', '31T', 396506, 5363125, 48.4128, 1.60139, 150),
('28382', 'Terminiers', '31T', 406284, 5326174, 48.0819, 1.74167, 129),
('28383', 'Theuville', '31T', 396413, 5354633, 48.3364, 1.60222, 157),
('28385', 'Le Thieulin', '31T', 361984, 5363398, 48.4086, 1.13499, 238),
('28386', 'Thimert-Gâtelles', '31T', 371112, 5381223, 48.5708, 1.25278, 220),
('28387', 'Thiron Gardais', '31T', 351156, 5352828, 48.3111, 0.992505, 250),
('28388', 'Thivars', '31T', 385270, 5359635, 48.3794, 1.45055, 140),
('28389', 'Thiville', '31T', 378966, 5320323, 48.0247, 1.37666, 129),
('28390', 'Tillay-le-Péneux', '31T', 409028, 5334807, 48.16, 1.77667, 125),
('28391', 'Toury', '31T', 421273, 5338794, 48.1975, 1.94056, 135),
('28392', 'Trancrainville', '31T', 415521, 5343540, 48.2394, 1.86222, 136),
('28393', 'Tremblay-les-Villages', '31T', 380896, 5384406, 48.6014, 1.38444, 190),
('28394', 'Tréon', '31T', 376556, 5392932, 48.6772, 1.32306, 110),
('28395', 'Trizay-Coutretot-Saint-Serge', '31T', 341834, 5351132, 48.2936, 0.867501, 150),
('28396', 'Trizay-lès-Bonneval', '31T', 376281, 5339870, 48.2, 1.335, 140),
('28397', 'Umpeau', '31T', 401935, 5370317, 48.4783, 1.67305, 156),
('28398', 'Unverre', '31T', 358530, 5340220, 48.1994, 1.09612, 166),
('28400', 'Varize', '31T', 389429, 5327833, 48.0942, 1.515, 116),
('28401', 'Vaupillon', '31T', 351841, 5369585, 48.4619, 0.995829, 205),
('28402', 'Vérigny', '31T', 376111, 5375489, 48.5203, 1.32222, 219),
('28403', 'Ver-lès-Chartres', '31T', 387959, 5360354, 48.3864, 1.48666, 140),
('28404', 'Vernouillet', '31T', 379198, 5397848, 48.7219, 1.3575, 120),
('28405', 'Vert-en-Drouais', '31T', 374416, 5402432, 48.7622, 1.29111, 91),
('28406', 'Viabon', '31T', 403825, 5341162, 48.2164, 1.70528, 135),
('28407', 'Vichères', '31T', 345154, 5348137, 48.2675, 0.913329, 190),
('28408', 'Vierville', '31T', 419897, 5359813, 48.3864, 1.91806, 150),
('28409', 'Vieuvicq', '31T', 367509, 5347172, 48.2639, 1.21472, 167),
('28410', 'Villampuy', '31T', 389140, 5321446, 48.0367, 1.51278, 130),
('28411', 'Villars', '31T', 392568, 5342907, 48.2303, 1.55334, 145),
('28412', 'Villeau', '31T', 396079, 5344232, 48.2428, 1.60028, 144),
('28414', 'Villebon', '31T', 367353, 5361663, 48.3942, 1.20806, 195),
('28415', 'Villemeux-sur-Eure', '31T', 386712, 5392440, 48.6747, 1.46111, 88),
('28416', 'Villeneuve-Saint-Nicolas', '31T', 393636, 5349311, 48.2881, 1.56611, 158),
('28417', 'Villiers-le-Morhier', '31T', 394290, 5386362, 48.6214, 1.56556, 100),
('28418', 'Villiers-Saint-Orien', '31T', 387776, 5332158, 48.1328, 1.49167, 130),
('28419', 'Vitray-en-Beauce', '31T', 383022, 5348345, 48.2775, 1.42334, 145),
('28421', 'Voise', '31T', 404397, 5361628, 48.4006, 1.70834, 140),
('28422', 'Voves', '31T', 398240, 5347435, 48.2719, 1.62861, 145),
('28423', 'Yermenonville', '31T', 398353, 5378936, 48.5553, 1.62249, 110),
('28424', 'Yèvres', '31T', 365678, 5341222, 48.21, 1.19195, 156),
('28425', 'Ymeray', '31T', 404048, 5373802, 48.51, 1.70083, 120),
('28426', 'Ymonville', '31T', 407288, 5345953, 48.26, 1.75084, 140),
('29001', 'Argol', '30T', 402354, 5344430, 48.2456, -4.31527, 70),
('29002', 'Arzano', '30T', 467011, 5305373, 47.9008, -3.44139, 92),
('29003', 'Audierne', '30T', 385090, 5319888, 48.0219, -4.54111, 34),
('29004', 'Bannalec', '30T', 447879, 5308787, 47.9303, -3.69778, 100),
('29005', 'Baye', '30T', 454850, 5300638, 47.8575, -3.60361, 65),
('29006', 'Bénodet', '30T', 416856, 5303129, 47.8761, -4.11195, 12),
('29007', 'Berrien', '30T', 444449, 5361279, 48.4022, -3.75055, 261),
('29008', 'Beuzec-Cap-Sizun', '30T', 387527, 5325801, 48.0756, -4.51, 80),
('29010', 'Bodilis', '30T', 417807, 5375901, 48.5308, -4.11333, 117),
('29011', 'Bohars', '30T', 388135, 5365107, 48.4292, -4.51223, 60),
('29012', 'Bolazec', '30T', 456800, 5365927, 48.445, -3.58417, 240),
('29013', 'Botmeur', '30T', 432273, 5359312, 48.3833, -3.91472, 261),
('29014', 'Botsorhel', '30T', 452685, 5374945, 48.5258, -3.64083, 200),
('29015', 'Bourg-Blanc', '30T', 388989, 5372966, 48.5, -4.50277, 70),
('29016', 'Brasparts', '30T', 429198, 5350209, 48.3011, -3.95472, 130),
('29017', 'Brélès', '30T', 373462, 5370821, 48.4778, -4.71222, 50),
('29018', 'Brennilis', '30T', 436932, 5356510, 48.3586, -3.85139, 253),
('29019', 'Brest', '30T', 389669, 5360475, 48.3878, -4.49028, 50),
('29020', 'Briec', '30T', 425490, 5328115, 48.1019, -4.00083, 140),
('29021', 'Brignogan-Plage', '30T', 402375, 5390910, 48.6636, -4.32583, 10),
('29022', 'Camaret-sur-Mer', '30T', 381551, 5348036, 48.2744, -4.59639, 20),
('29023', 'Carantec', '30T', 432655, 5391207, 48.6703, -3.91472, 40),
('29024', 'Carhaix-Plouguer', '30T', 457585, 5347179, 48.2764, -3.57166, 130),
('29025', 'Cast', '30T', 415407, 5334432, 48.1575, -4.1375, 103),
('29026', 'Châteaulin', '30T', 418896, 5338581, 48.1953, -4.09138, 40),
('29027', 'Châteauneuf-du-Faou', '30T', 439510, 5337677, 48.1894, -3.81389, 100),
('29028', 'Cléden-Cap-Sizun', '30T', 377259, 5322861, 48.0472, -4.64695, 50),
('29029', 'Cléden-Poher', '30T', 450413, 5342574, 48.2344, -3.66778, 150),
('29030', 'Cléder', '30T', 419002, 5390522, 48.6625, -4.1, 40),
('29031', 'Clohars-Carnoët', '30T', 456503, 5293895, 47.7969, -3.58083, 50),
('29032', 'Clohars-Fouesnant', '30T', 420419, 5305364, 47.8967, -4.06472, 50),
('29033', 'Le Cloître-Pleyben', '30T', 433962, 5345334, 48.2578, -3.88973, 150),
('29034', 'Le Cloître-Saint-Thégonnec', '30T', 441414, 5370018, 48.4806, -3.79278, 213),
('29035', 'Coat-Méal', '30T', 386177, 5374010, 48.5089, -4.54111, 60),
('29036', 'Collorec', '30T', 442611, 5348329, 48.2856, -3.77362, 137),
('29037', 'Combrit', '30T', 413592, 5304350, 47.8867, -4.15583, 35),
('29038', 'Commana', '30T', 429210, 5362715, 48.4136, -3.95666, 250),
('29039', 'Concarneau', '30T', 431185, 5302755, 47.8744, -3.92028, 3),
('29040', 'Le Conquet', '30T', 368663, 5357833, 48.36, -4.77306, 29),
('29041', 'Coray', '30T', 438117, 5323395, 48.0608, -3.83056, 220),
('29042', 'Crozon', '30T', 389490, 5344881, 48.2475, -4.48861, 70),
('29043', 'Daoulas', '30T', 406752, 5357265, 48.3617, -4.25888, 10),
('29044', 'Dinéault', '30T', 413425, 5341379, 48.2197, -4.16556, 100),
('29045', 'Dirinon', '30T', 406158, 5361197, 48.3969, -4.26778, 130),
('29046', 'Douarnenez', '30T', 400932, 5327839, 48.0961, -4.33056, 48),
('29047', 'Le Drennec', '30T', 398882, 5376394, 48.5325, -4.36972, 60),
('29048', 'Edern', '30T', 427165, 5328094, 48.1019, -3.97833, 138),
('29049', 'Elliant', '30T', 433667, 5316220, 47.9958, -3.88917, 120),
('29051', 'Ergué-Gabéric', '30T', 423494, 5316438, 47.9967, -4.02555, 60),
('29052', 'Esquibien', '30T', 383581, 5320042, 48.0231, -4.56139, 50),
('29053', 'Le Faou', '30T', 412584, 5349729, 48.2947, -4.1786, 15),
('29054', 'La Feuillée', '30T', 436952, 5360184, 48.3917, -3.85167, 270),
('29055', 'Le Folgoët', '30T', 401355, 5379377, 48.5597, -4.33694, 70),
('29056', 'La Forest-Landerneau', '30T', 402968, 5364679, 48.4278, -4.31167, 60),
('29057', 'La Forêt-Fouesnant', '30T', 426787, 5306484, 47.9075, -3.97972, 20),
('29058', 'Fouesnant', '30T', 424504, 5304938, 47.8933, -4.01, 60),
('29059', 'Garlan', '30T', 444236, 5383452, 48.6017, -3.75639, 80),
('29060', 'Gouesnach', '30T', 416747, 5307114, 47.9119, -4.11417, 40),
('29061', 'Gouesnou', '30T', 391801, 5367630, 48.4525, -4.46334, 80),
('29062', 'Gouézec', '30T', 427654, 5335684, 48.1703, -3.97306, 100),
('29063', 'Goulien', '30T', 381399, 5323731, 48.0558, -4.59166, 77),
('29064', 'Goulven', '30T', 404333, 5386923, 48.6281, -4.29833, 20),
('29065', 'Gourlizon', '30T', 405715, 5319266, 48.0197, -4.26444, 125),
('29066', 'Guengat', '30T', 410309, 5321601, 48.0414, -4.20334, 133),
('29067', 'Guerlesquin', '30T', 456677, 5373987, 48.5175, -3.58666, 200),
('29068', 'Guiclan', '30T', 429033, 5378065, 48.5517, -3.96166, 100),
('29069', 'Guilers', '30T', 384841, 5364833, 48.4261, -4.55666, 95),
('29070', 'Guiler-sur-Goyen', '30T', 398748, 5318983, 48.0161, -4.35778, 89),
('29071', 'Guilligomarc''h', '30T', 469109, 5309344, 47.9367, -3.41361, 102),
('29072', 'Guilvinec', '30T', 403770, 5294531, 47.7969, -4.285, 14),
('29073', 'Guimaëc', '30T', 447888, 5390767, 48.6678, -3.70778, 90),
('29074', 'Guimiliau', '30T', 426174, 5371091, 48.4886, -3.99916, 126),
('29075', 'Guipavas', '30T', 396595, 5365718, 48.4361, -4.39805, 99),
('29076', 'Guipronvel', '30T', 383675, 5372116, 48.4914, -4.57444, 65),
('29077', 'Guissény', '30T', 396281, 5387746, 48.6342, -4.40778, 22),
('29078', 'Hanvec', '30T', 414182, 5353257, 48.3267, -4.15778, 100),
('29079', 'Henvic', '30T', 431644, 5387112, 48.6333, -3.92777, 60),
('29080', 'Hôpital-Camfrout', '30T', 408194, 5353536, 48.3283, -4.23861, 10),
('29081', 'Huelgoat', '30T', 444796, 5356798, 48.3619, -3.74528, 200),
('29082', 'Île-de-Batz', '30T', 426176, 5399349, 48.7428, -4.00416, 20),
('29083', 'Île-de-Sein', '30T', 362013, 5321910, 48.0356, -4.85111, 5),
('29084', 'Île-Molène', '30T', 355185, 5362115, 48.3956, -4.95638, 20),
('29085', 'Île-Tudy', '30T', 412812, 5299483, 47.8428, -4.16528, 3),
('29086', 'Irvillac', '30T', 410388, 5358133, 48.37, -4.20999, 95),
('29087', 'Le Juch', '30T', 406482, 5324380, 48.0658, -4.25528, 35),
('29089', 'Kergloff', '30T', 453956, 5347114, 48.2756, -3.62056, 103),
('29090', 'Kerlaz', '30T', 405349, 5327208, 48.0911, -4.27111, 80),
('29091', 'Kerlouan', '30T', 399556, 5388891, 48.645, -4.36362, 20),
('29093', 'Kernilis', '30T', 395376, 5380905, 48.5725, -4.41833, 65),
('29094', 'Kernouës', '30T', 400676, 5382755, 48.59, -4.34695, 60),
('29095', 'Kersaint-Plabennec', '30T', 398598, 5369728, 48.4725, -4.37195, 90),
('29097', 'Lampaul-Guimiliau', '30T', 423265, 5371563, 48.4925, -4.03861, 100),
('29098', 'Lampaul-Plouarzel', '30T', 369998, 5367563, 48.4478, -4.75806, 60),
('29099', 'Lampaul-Ploudalmézeau', '30T', 378033, 5379895, 48.5603, -4.65305, 20),
('29100', 'Lanarvily', '30T', 397546, 5378487, 48.5511, -4.38833, 55),
('29101', 'Landéda', '30T', 384202, 5382761, 48.5872, -4.57027, 58),
('29102', 'Landeleau', '30T', 445784, 5341751, 48.2267, -3.73001, 105),
('29103', 'Landerneau', '30T', 407430, 5367291, 48.4519, -4.25195, 15),
('29104', 'Landévennec', '30T', 406066, 5349401, 48.2908, -4.26639, 19),
('29105', 'Landivisiau', '30T', 421117, 5373569, 48.5103, -4.06806, 90),
('29106', 'Landrévarzec', '30T', 421421, 5326996, 48.0914, -4.05527, 100),
('29107', 'Landudal', '30T', 427087, 5323556, 48.0611, -3.97861, 115),
('29108', 'Landudec', '30T', 400480, 5317254, 48.0008, -4.33416, 121),
('29109', 'Landunvez', '30T', 372593, 5376926, 48.5325, -4.72584, 33),
('29110', 'Langolen', '30T', 432102, 5324050, 48.0661, -3.91138, 140),
('29111', 'Lanhouarneau', '30T', 410817, 5381381, 48.5792, -4.20916, 94),
('29112', 'Lanildut', '30T', 370560, 5370578, 48.475, -4.7514, 20),
('29113', 'Lanmeur', '30T', 447274, 5388549, 48.6478, -3.71583, 110),
('29114', 'Lannéanou', '30T', 450495, 5370826, 48.4886, -3.67, 250),
('29115', 'Lannédern', '30T', 433483, 5350219, 48.3017, -3.89695, 160),
('29116', 'Lanneuffret', '30T', 411330, 5372293, 48.4975, -4.20027, 80),
('29117', 'Lannilis', '30T', 387852, 5380834, 48.5706, -4.52028, 45),
('29119', 'Lanrivoaré', '30T', 378932, 5370207, 48.4733, -4.63806, 100),
('29120', 'Lanvéoc', '30T', 391697, 5349193, 48.2867, -4.45999, 60),
('29122', 'Laz', '30T', 437941, 5331950, 48.1378, -3.83417, 230),
('29123', 'Lennon', '30T', 433279, 5337993, 48.1917, -3.89777, 100),
('29124', 'Lesneven', '30T', 402565, 5380622, 48.5711, -4.32084, 60),
('29125', 'Leuhan', '30T', 441514, 5327621, 48.0992, -3.78555, 174),
('29126', 'Loc-Brévalaire', '30T', 396401, 5378693, 48.5528, -4.40389, 60),
('29127', 'Loc-Eguiner-Saint-Thégonnec', '30T', 428394, 5368130, 48.4622, -3.96861, 120),
('29128', 'Loc-Eguiner', '30T', 419129, 5369428, 48.4728, -4.09417, 130),
('29129', 'Locmaria-Berrien', '30T', 448510, 5355683, 48.3522, -3.695, 123),
('29130', 'Locmaria-Plouzané', '30T', 378305, 5359163, 48.3739, -4.64333, 50),
('29131', 'Locmélar', '30T', 421419, 5367203, 48.4531, -4.06277, 110),
('29132', 'Locquénolé', '30T', 436505, 5386190, 48.6256, -3.86166, 20),
('29133', 'Locquirec', '30T', 452451, 5393413, 48.6919, -3.64611, 10),
('29134', 'Locronan', '30T', 410160, 5327934, 48.0983, -4.20667, 152),
('29135', 'Loctudy', '30T', 412354, 5298039, 47.8297, -4.17111, 8),
('29136', 'Locunolé', '30T', 464379, 5309371, 47.9367, -3.47694, 102),
('29137', 'Logonna-Daoulas', '30T', 403855, 5352712, 48.3203, -4.29695, 46),
('29139', 'Lopérec', '30T', 422301, 5347582, 48.2767, -4.04722, 40),
('29140', 'Loperhet', '30T', 403399, 5358618, 48.3733, -4.30445, 62),
('29141', 'Loqueffret', '30T', 436391, 5352316, 48.3208, -3.85806, 210),
('29142', 'Lothey', '30T', 423807, 5336877, 48.1806, -4.025, 80),
('29143', 'Mahalon', '30T', 393111, 5321123, 48.0344, -4.43389, 53),
('29144', 'La Martyre', '30T', 414203, 5366845, 48.4489, -4.16027, 185),
('29145', 'Confort-Meilars', '30T', 393647, 5322101, 48.0433, -4.42694, 50),
('29146', 'Melgven', '30T', 437663, 5306263, 47.9067, -3.83417, 92),
('29147', 'Mellac', '30T', 456986, 5305778, 47.9039, -3.57556, 94),
('29148', 'Mespaul', '30T', 424663, 5385533, 48.6183, -4.02222, 70),
('29149', 'Milizac', '30T', 384107, 5369172, 48.465, -4.56778, 89),
('29150', 'Moëlan-sur-Mer', '30T', 452920, 5295837, 47.8142, -3.62888, 53),
('29151', 'Morlaix', '30T', 438784, 5381193, 48.5808, -3.83, 80),
('29152', 'Motreff', '30T', 458842, 5338678, 48.2, -3.55389, 220),
('29153', 'Névez', '30T', 440801, 5296443, 47.8186, -3.79083, 39),
('29155', 'Ouessant', '30T', 345199, 5369393, 48.4586, -5.09389, 20),
('29156', 'Pencran', '30T', 408760, 5365663, 48.4375, -4.23361, 160),
('29158', 'Penmarch', '30T', 399990, 5296139, 47.8108, -4.33583, 6),
('29159', 'Peumérit', '30T', 402311, 5310367, 47.9392, -4.30806, 80),
('29160', 'Plabennec', '30T', 394741, 5373227, 48.5033, -4.425, 87),
('29161', 'Pleuven', '30T', 422283, 5306604, 47.9081, -4.04, 60),
('29162', 'Pleyben', '30T', 428142, 5341637, 48.2239, -3.9675, 100),
('29163', 'Pleyber-Christ', '30T', 435390, 5372862, 48.5056, -3.87472, 130),
('29165', 'Plobannalec-Lesconil', '30T', 407975, 5297273, 47.8222, -4.22944, 14),
('29166', 'Ploéven', '30T', 408364, 5334602, 48.1581, -4.23222, 60),
('29167', 'Plogastel-Saint-Germain', '30T', 405337, 5315165, 47.9828, -4.26861, 100),
('29168', 'Plogoff', '30T', 375909, 5321716, 48.0367, -4.66472, 62),
('29169', 'Plogonnec', '30T', 411365, 5325599, 48.0775, -4.19, 129),
('29170', 'Plomelin', '30T', 413879, 5309688, 47.9347, -4.15306, 60),
('29171', 'Plomeur', '30T', 403912, 5299346, 47.8403, -4.28417, 34),
('29172', 'Plomodiern', '30T', 408569, 5337131, 48.1808, -4.23001, 101),
('29173', 'Plonéis', '30T', 409976, 5318858, 48.0167, -4.20723, 135),
('29174', 'Plonéour-Lanvern', '30T', 404213, 5306166, 47.9017, -4.28166, 70),
('29175', 'Plonévez-du-Faou', '30T', 438842, 5344693, 48.2525, -3.82389, 151),
('29176', 'Plonévez-Porzay', '30T', 409461, 5330817, 48.1242, -4.21666, 80),
('29177', 'Plouarzel', '30T', 372036, 5365880, 48.4331, -4.73, 76),
('29178', 'Ploudalmézeau', '30T', 377577, 5377773, 48.5411, -4.6586, 55),
('29179', 'Ploudaniel', '30T', 403299, 5376780, 48.5367, -4.31, 80),
('29180', 'Ploudiry', '30T', 415689, 5367316, 48.4533, -4.14028, 189),
('29181', 'Plouédern', '30T', 408003, 5370926, 48.4847, -4.245, 100),
('29182', 'Plouégat-Guérand', '30T', 450418, 5385402, 48.6197, -3.67278, 80),
('29183', 'Plouégat-Moysan', '30T', 455043, 5380052, 48.5719, -3.60945, 170),
('29184', 'Plouénan', '30T', 427195, 5386550, 48.6278, -3.98805, 60),
('29185', 'Plouescat', '30T', 413715, 5389952, 48.6567, -4.17166, 23),
('29186', 'Plouezoc''h', '30T', 439510, 5387763, 48.64, -3.82112, 80),
('29187', 'Plougar', '30T', 415950, 5379357, 48.5617, -4.13917, 90),
('29188', 'Plougasnou', '30T', 441723, 5393885, 48.6953, -3.79194, 80),
('29189', 'Plougastel-Daoulas', '30T', 398710, 5358762, 48.3739, -4.36778, 110),
('29190', 'Plougonvelin', '30T', 372749, 5355516, 48.34, -4.71722, 50),
('29191', 'Plougonven', '30T', 447595, 5374651, 48.5228, -3.70972, 172),
('29192', 'Plougoulm', '30T', 423218, 5390679, 48.6644, -4.04278, 51),
('29193', 'Plougourvest', '30T', 419974, 5378310, 48.5528, -4.08444, 107),
('29195', 'Plouguerneau', '30T', 389062, 5385011, 48.6083, -4.50499, 52),
('29196', 'Plouguin', '30T', 382048, 5375794, 48.5242, -4.5975, 57),
('29197', 'Plouhinec', '30T', 389383, 5319001, 48.0147, -4.48333, 96),
('29198', 'Plouider', '30T', 404318, 5384854, 48.6094, -4.29805, 60),
('29199', 'Plouigneau', '30T', 448360, 5379801, 48.5692, -3.7, 159),
('29201', 'Ploumoguer', '30T', 372614, 5362346, 48.4014, -4.72111, 85),
('29202', 'Plounéour-Ménez', '30T', 434155, 5365466, 48.4389, -3.89028, 230);
INSERT INTO `ods_communes` (`oc_code_insee`, `oc_nom`, `oc_secteur`, `oc_x_utm`, `oc_y_utm`, `oc_latitude`, `oc_longitude`, `oc_altitude`) VALUES
('29203', 'Plounéour-Trez', '30T', 403189, 5389475, 48.6508, -4.31445, 26),
('29204', 'Plounéventer', '30T', 410556, 5374004, 48.5128, -4.21111, 105),
('29205', 'Plounévézel', '30T', 455931, 5349229, 48.2947, -3.59417, 120),
('29206', 'Plounévez-Lochrist', '30T', 410803, 5385674, 48.6178, -4.21027, 69),
('29207', 'Plourin-lès-Morlaix', '30T', 441766, 5376314, 48.5372, -3.78889, 100),
('29208', 'Plourin', '30T', 375367, 5374300, 48.5094, -4.68749, 60),
('29209', 'Plouvien', '30T', 392869, 5376258, 48.5303, -4.45111, 70),
('29210', 'Plouvorn', '30T', 423517, 5381071, 48.5781, -4.03695, 100),
('29211', 'Plouyé', '30T', 445404, 5351574, 48.315, -3.73639, 150),
('29212', 'Plouzané', '30T', 380072, 5359990, 48.3817, -4.61972, 64),
('29213', 'Plouzévédé', '30T', 418157, 5383061, 48.5953, -4.11, 73),
('29214', 'Plovan', '30T', 398345, 5307872, 47.9161, -4.36056, 20),
('29215', 'Plozévet', '30T', 393818, 5315705, 47.9858, -4.42306, 72),
('29216', 'Pluguffan', '30T', 412171, 5314686, 47.9794, -4.17694, 94),
('29217', 'Pont-Aven', '30T', 444311, 5300298, 47.8536, -3.74444, 22),
('29218', 'Pont-Croix', '30T', 389148, 5321878, 48.0406, -4.48723, 20),
('29219', 'Le Ponthou', '30T', 452968, 5379359, 48.5656, -3.63749, 110),
('29220', 'Pont-l''Abbé', '30T', 408794, 5301738, 47.8625, -4.21945, 10),
('29221', 'Porspoder', '30T', 369809, 5374518, 48.5103, -4.76278, 20),
('29222', 'Port-Launay', '30T', 420495, 5340782, 48.2153, -4.07028, 30),
('29224', 'Pouldergat', '30T', 401203, 5321966, 48.0433, -4.32556, 70),
('29225', 'Pouldreuzic', '30T', 398565, 5312099, 47.9542, -4.35861, 55),
('29226', 'Poullan-sur-Mer', '30T', 394777, 5326158, 48.08, -4.41278, 80),
('29227', 'Poullaouen', '30T', 452634, 5354196, 48.3392, -3.63917, 140),
('29228', 'Primelin', '30T', 380000, 5320208, 48.0239, -4.60944, 40),
('29229', 'Quéménéven', '30T', 416553, 5329443, 48.1128, -4.12111, 106),
('29230', 'Querrien', '30T', 460102, 5312023, 47.9603, -3.53445, 156),
('29232', 'Quimper', '30T', 417254, 5316340, 47.995, -4.10916, 30),
('29233', 'Quimperlé', '30T', 459058, 5302244, 47.8722, -3.5475, 43),
('29234', 'Rédené', '30T', 465635, 5300873, 47.8603, -3.45945, 60),
('29235', 'Le Relecq-Kerhuon', '30T', 397374, 5362245, 48.405, -4.38667, 41),
('29236', 'Riec-sur-Belon', '30T', 448166, 5299120, 47.8433, -3.69277, 60),
('29237', 'La Roche-Maurice', '30T', 411224, 5369454, 48.4719, -4.2011, 60),
('29238', 'Roscanvel', '30T', 385393, 5352467, 48.315, -4.54583, 20),
('29239', 'Roscoff', '30T', 427620, 5397292, 48.7244, -3.98416, 10),
('29240', 'Rosnoën', '30T', 411378, 5346413, 48.2647, -4.19417, 140),
('29241', 'Rosporden', '30T', 437911, 5311973, 47.9581, -3.83167, 120),
('29243', 'Saint-Coulitz', '30T', 421219, 5337869, 48.1892, -4.06, 60),
('29244', 'Saint-Derrien', '30T', 412933, 5377735, 48.5467, -4.17972, 80),
('29245', 'Saint-Divy', '30T', 401371, 5367393, 48.4519, -4.33389, 110),
('29246', 'Saint-Eloy', '30T', 416871, 5356861, 48.3594, -4.12222, 155),
('29247', 'Saint-Évarzec', '30T', 423881, 5309671, 47.9358, -4.01917, 60),
('29248', 'Saint-Frégant', '30T', 399309, 5384231, 48.6031, -4.36584, 40),
('29249', 'Saint-Goazec', '30T', 441772, 5334689, 48.1628, -3.78305, 116),
('29250', 'Saint-Hernin', '30T', 452935, 5340669, 48.2175, -3.63361, 120),
('29251', 'Saint-Jean-du-Doigt', '30T', 443213, 5393684, 48.6936, -3.77167, 22),
('29252', 'Saint-Jean-Trolimon', '30T', 404269, 5302058, 47.8647, -4.28, 22),
('29254', 'Saint-Martin-des-Champs', '30T', 437940, 5380832, 48.5775, -3.84139, 80),
('29255', 'Saint-Méen', '30T', 406927, 5379159, 48.5586, -4.26139, 60),
('29256', 'Saint-Nic', '30T', 404705, 5339479, 48.2014, -4.2825, 60),
('29257', 'Saint-Pabu', '30T', 382302, 5380113, 48.5631, -4.59528, 20),
('29259', 'Saint-Pol-de-Léon', '30T', 427297, 5392880, 48.6847, -3.98778, 40),
('29260', 'Saint-Renan', '30T', 379941, 5365460, 48.4308, -4.62305, 60),
('29261', 'Saint-Rivoal', '30T', 426094, 5355498, 48.3483, -3.9975, 177),
('29262', 'Saint-Sauveur', '30T', 425620, 5366436, 48.4467, -4.00583, 180),
('29263', 'Saint-Ségal', '30T', 421130, 5343398, 48.2389, -4.06222, 90),
('29264', 'Saint-Servais', '30T', 414800, 5373753, 48.5111, -4.15361, 89),
('29265', 'Sainte-Sève', '30T', 435478, 5378790, 48.5589, -3.87445, 90),
('29266', 'Saint-Thégonnec', '30T', 430282, 5374683, 48.5214, -3.94417, 83),
('29267', 'Saint-Thois', '30T', 434318, 5334986, 48.1647, -3.88333, 80),
('29268', 'Saint-Thonan', '30T', 401405, 5370512, 48.48, -4.33417, 80),
('29269', 'Saint-Thurien', '30T', 453486, 5311888, 47.9586, -3.62305, 129),
('29270', 'Saint-Urbain', '30T', 409079, 5361242, 48.3978, -4.22834, 110),
('29271', 'Saint-Vougay', '30T', 416126, 5382875, 48.5933, -4.1375, 86),
('29272', 'Saint-Yvi', '30T', 430479, 5313046, 47.9669, -3.93138, 100),
('29273', 'Santec', '30T', 424646, 5394922, 48.7028, -4.02416, 10),
('29274', 'Scaër', '30T', 447645, 5319595, 48.0275, -3.70223, 182),
('29275', 'Scrignac', '30T', 449886, 5364625, 48.4328, -3.6775, 230),
('29276', 'Sibiril', '30T', 421806, 5390637, 48.6639, -4.06194, 52),
('29277', 'Sizun', '30T', 420275, 5361815, 48.4044, -4.07722, 105),
('29278', 'Spézet', '30T', 446904, 5337943, 48.1925, -3.71445, 110),
('29279', 'Taulé', '30T', 433694, 5383906, 48.6047, -3.89944, 80),
('29280', 'Telgruc-sur-Mer', '30T', 399253, 5342877, 48.2311, -4.35666, 90),
('29281', 'Tourch', '30T', 438445, 5319192, 48.0231, -3.82555, 170),
('29282', 'Trébabu', '30T', 371390, 5359161, 48.3725, -4.73667, 38),
('29284', 'Treffiagat', '30T', 405375, 5295956, 47.81, -4.26388, 17),
('29285', 'Tréflaouénan', '30T', 419253, 5386627, 48.6275, -4.09583, 50),
('29286', 'Tréflévénez', '30T', 413570, 5363056, 48.4147, -4.16805, 150),
('29287', 'Tréflez', '30T', 407252, 5386411, 48.6239, -4.25861, 40),
('29288', 'Trégarantec', '30T', 404640, 5378487, 48.5522, -4.29223, 80),
('29289', 'Trégarvan', '30T', 409212, 5345088, 48.2525, -4.22306, 27),
('29290', 'Tréglonou', '30T', 386578, 5378667, 48.5508, -4.53695, 40),
('29291', 'Trégourez', '30T', 435875, 5328329, 48.105, -3.86139, 130),
('29292', 'Tréguennec', '30T', 400495, 5304932, 47.89, -4.33111, 39),
('29293', 'Trégunc', '30T', 436438, 5300565, 47.8553, -3.84972, 30),
('29294', 'Le Tréhou', '30T', 416310, 5360667, 48.3936, -4.13055, 87),
('29295', 'Trémaouézan', '30T', 407565, 5373033, 48.5036, -4.25139, 90),
('29296', 'Tréméoc', '30T', 409472, 5306513, 47.9056, -4.21138, 50),
('29297', 'Tréméven', '30T', 460304, 5305137, 47.8983, -3.53111, 90),
('29298', 'Tréogat', '30T', 401361, 5308191, 47.9194, -4.32028, 30),
('29299', 'Tréouergat', '30T', 381777, 5372680, 48.4961, -4.60028, 35),
('29300', 'Le Trévoux', '30T', 452245, 5304766, 47.8944, -3.63889, 80),
('29301', 'Trézilidé', '30T', 419938, 5384456, 48.6081, -4.08611, 80),
('29302', 'Pont-de-Buis-lès-Quimerch', '30T', 418005, 5348445, 48.2839, -4.10528, 44),
('2A001', 'Afa', '32T', 483479, 4648068, 41.9844, 8.80056, 0),
('2A004', 'Ajaccio', '32T', 478026, 4640990, 41.9206, 8.735, 0),
('2A006', 'Alata', '32T', 478644, 4647310, 41.9775, 8.74222, 0),
('2A008', 'Albitreccia', '32T', 495113, 4634635, 41.8636, 8.94112, 0),
('2A011', 'Altagène', '32T', 505893, 4617149, 41.7061, 9.07083, 0),
('2A014', 'Ambiegna', '32T', 482952, 4658864, 42.0817, 8.79389, 0),
('2A017', 'Appietto', '32T', 480726, 4651221, 42.0128, 8.76723, 0),
('2A018', 'Arbellara', '32T', 499260, 4614556, 41.6828, 8.99111, 0),
('2A019', 'Arbori', '32T', 483312, 4665402, 42.1406, 8.79805, 0),
('2A021', 'Argiusta-Moriccio', '32T', 501846, 4629298, 41.8156, 9.02223, 0),
('2A022', 'Arro', '32T', 484747, 4659940, 42.0914, 8.81556, 0),
('2A024', 'Aullène', '32T', 506695, 4624490, 41.7722, 9.08055, 0),
('2A026', 'Azilone-Ampaza', '32T', 501245, 4634818, 41.8653, 9.015, 0),
('2A027', 'Azzana', '32T', 493593, 4662609, 42.1156, 8.9225, 0),
('2A028', 'Balogna', '32T', 481647, 4669323, 42.1758, 8.77778, 0),
('2A031', 'Bastelica', '32T', 503980, 4650086, 42.0028, 9.04806, 0),
('2A032', 'Bastelicaccia', '32T', 485835, 4641186, 41.9225, 8.82917, 0),
('2A035', 'Belvédère-Campomoro', '32T', 487483, 4609139, 41.6339, 8.84972, 0),
('2A038', 'Bilia', '32T', 492387, 4608331, 41.6267, 8.90861, 0),
('2A040', 'Bocognano', '32T', 505468, 4659000, 42.0831, 9.06611, 0),
('2A041', 'Bonifacio', '32T', 513006, 4581786, 41.3875, 9.15556, 0),
('2A048', 'Calcatoggio', '32T', 480684, 4652825, 42.0272, 8.76667, 0),
('2A056', 'Campo', '32T', 500346, 4637841, 41.8925, 9.00417, 0),
('2A060', 'Cannelle', '32T', 485219, 4655220, 42.0489, 8.82139, 0),
('2A061', 'Carbini', '32T', 512161, 4614196, 41.6794, 9.14611, 0),
('2A062', 'Carbuccia', '32T', 496161, 4654126, 42.0392, 8.95362, 0),
('2A064', 'Cardo-Torgia', '32T', 498363, 4635343, 41.87, 8.98027, 0),
('2A065', 'Cargèse', '32T', 466597, 4664567, 42.1325, 8.59583, 0),
('2A066', 'Cargiaca', '32T', 503997, 4619923, 41.7311, 9.04806, 0),
('2A070', 'Casaglione', '32T', 482650, 4657323, 42.0678, 8.79028, 0),
('2A071', 'Casalabriva', '32T', 494943, 4622330, 41.7528, 8.93917, 0),
('2A085', 'Cauro', '32T', 492928, 4640620, 41.9175, 8.91472, 0),
('2A089', 'Ciamannacce', '32T', 511994, 4644574, 41.9531, 9.14472, 0),
('2A090', 'Coggia', '32T', 480207, 4663036, 42.1192, 8.76056, 0),
('2A091', 'Cognocoli-Monticchi', '32T', 492042, 4630813, 41.8292, 8.90417, 0),
('2A092', 'Conca', '32T', 527858, 4620470, 41.7356, 9.33499, 0),
('2A094', 'Corrano', '32T', 505254, 4637627, 41.8906, 9.06333, 0),
('2A098', 'Coti-Chiavari', '32T', 480977, 4624574, 41.7728, 8.77112, 0),
('2A099', 'Cozzano', '32T', 512689, 4642540, 41.9347, 9.15306, 0),
('2A100', 'Cristinacce', '32T', 486775, 4676097, 42.2369, 8.83972, 0),
('2A103', 'Cuttoli-Corticchiato', '32T', 492246, 4648670, 41.99, 8.90639, 0),
('2A104', 'Eccica-Suarella', '32T', 492999, 4641638, 41.9267, 8.91556, 0),
('2A108', 'Évisa', '32T', 483594, 4677738, 42.2517, 8.80112, 0),
('2A114', 'Figari', '32T', 510941, 4595444, 41.5106, 9.13111, 0),
('2A115', 'Foce', '32T', 501041, 4608142, 41.625, 9.0125, 0),
('2A117', 'Forciolo', '32T', 500830, 4633708, 41.8553, 9.01, 0),
('2A118', 'Fozzano', '32T', 500069, 4616407, 41.6994, 9.00083, 0),
('2A119', 'Frasseto', '32T', 502051, 4638273, 41.8964, 9.02472, 0),
('2A127', 'Giuncheto', '32T', 496272, 4603918, 41.5869, 8.95527, 0),
('2A128', 'Granace', '32T', 500856, 4610455, 41.6458, 9.01028, 0),
('2A129', 'Grossa', '32T', 489840, 4606576, 41.6108, 8.87806, 0),
('2A130', 'Grosseto-Prugna', '32T', 496980, 4635559, 41.8719, 8.96361, 0),
('2A131', 'Guagno', '32T', 495893, 4668406, 42.1678, 8.95028, 0),
('2A132', 'Guargualé', '32T', 493888, 4631706, 41.8372, 8.92639, 0),
('2A133', 'Guitera-les-Bains', '32T', 507118, 4640250, 41.9142, 9.08583, 0),
('2A139', 'Lecci', '32T', 527122, 4613559, 41.6733, 9.32583, 0),
('2A141', 'Letia', '32T', 487201, 4670791, 42.1892, 8.845, 0),
('2A142', 'Levie', '32T', 510192, 4616846, 41.7033, 9.1225, 0),
('2A144', 'Lopigna', '32T', 486954, 4661046, 42.1014, 8.84222, 0),
('2A146', 'Loreto-di-Tallano', '32T', 503189, 4618381, 41.7172, 9.03834, 0),
('2A154', 'Marignana', '32T', 483474, 4675734, 42.2336, 8.79972, 0),
('2A158', 'Mela', '32T', 507789, 4616226, 41.6978, 9.09361, 0),
('2A160', 'Moca-Croce', '32T', 500992, 4628558, 41.8089, 9.01194, 0),
('2A163', 'Monacia-d''Aullène', '32T', 501043, 4595775, 41.5136, 9.0125, 0),
('2A174', 'Murzo', '32T', 485797, 4668326, 42.1669, 8.82805, 0),
('2A181', 'Ocana', '32T', 494706, 4645676, 41.9631, 8.93611, 0),
('2A186', 'Olivese', '32T', 504658, 4632754, 41.8467, 9.05611, 0),
('2A189', 'Olmeto', '32T', 493184, 4618476, 41.7181, 8.91806, 0),
('2A191', 'Olmiccia', '32T', 505062, 4615669, 41.6928, 9.06083, 0),
('2A196', 'Orto', '32T', 494426, 4670473, 42.1864, 8.9325, 0),
('2A197', 'Osani', '32T', 469673, 4685619, 42.3222, 8.63195, 0),
('2A198', 'Ota', '32T', 479127, 4678244, 42.2561, 8.74695, 0),
('2A200', 'Palneca', '32T', 514178, 4646491, 41.9703, 9.17112, 0),
('2A203', 'Partinello', '32T', 473626, 4683968, 42.3075, 8.68, 0),
('2A204', 'Pastricciola', '32T', 498646, 4665074, 42.1378, 8.98362, 0),
('2A209', 'Peri', '32T', 493329, 4650119, 42.0031, 8.91945, 0),
('2A211', 'Petreto-Bicchisano', '32T', 498084, 4626029, 41.7861, 8.97694, 0),
('2A212', 'Piana', '32T', 469976, 4676333, 42.2386, 8.63611, 0),
('2A215', 'Pianottoli-Caldarello', '32T', 505055, 4592570, 41.4847, 9.06055, 0),
('2A228', 'Pietrosella', '32T', 487061, 4631653, 41.8367, 8.84416, 0),
('2A232', 'Pila-Canale', '32T', 492548, 4629024, 41.8131, 8.91028, 0),
('2A240', 'Poggiolo', '32T', 492475, 4669242, 42.1753, 8.90889, 0),
('2A247', 'Porto-Vecchio', '32T', 523198, 4604479, 41.5917, 9.27834, 0),
('2A249', 'Propriano', '32T', 492162, 4613820, 41.6761, 8.90583, 0),
('2A253', 'Quasquara', '32T', 500876, 4638859, 41.9017, 9.01056, 0),
('2A254', 'Quenza', '32T', 511498, 4623848, 41.7664, 9.13833, 0),
('2A258', 'Renno', '32T', 485692, 4673015, 42.2092, 8.82667, 0),
('2A259', 'Rezza', '32T', 495523, 4663502, 42.1236, 8.94584, 0),
('2A262', 'Rosazia', '32T', 489645, 4663879, 42.1269, 8.87472, 0),
('2A266', 'Salice', '32T', 491986, 4662981, 42.1189, 8.90305, 0),
('2A268', 'Sampolo', '32T', 510177, 4643307, 41.9417, 9.12277, 0),
('2A269', 'Sari-Solenzara', '32T', 530835, 4631863, 41.8381, 9.37138, 0),
('2A270', 'Sari-d''Orcino', '32T', 485566, 4656329, 42.0589, 8.82555, 0),
('2A271', 'Sarrola-Carcopino', '32T', 486800, 4652472, 42.0242, 8.84055, 0),
('2A272', 'Sartène', '32T', 497848, 4607803, 41.6219, 8.97417, 0),
('2A276', 'Serra-di-Ferro', '32T', 483205, 4619726, 41.7292, 8.79806, 0),
('2A278', 'Serra-di-Scopamène', '32T', 508314, 4622426, 41.7536, 9.1, 0),
('2A279', 'Serriera', '32T', 476072, 4682941, 42.2983, 8.70972, 0),
('2A282', 'Soccia', '32T', 492362, 4670568, 42.1872, 8.9075, 0),
('2A284', 'Sollacaro', '32T', 492632, 4621283, 41.7433, 8.91139, 0),
('2A285', 'Sorbollano', '32T', 509191, 4622334, 41.7528, 9.11055, 0),
('2A288', 'Sotta', '32T', 516310, 4599340, 41.5456, 9.19555, 0),
('2A295', 'Sant''Andréa-d''Orcino', '32T', 484161, 4654821, 42.0453, 8.80861, 0),
('2A300', 'San-Gavino-di-Carbini', '32T', 512338, 4618977, 41.7225, 9.14834, 0),
('2A308', 'Sainte-Lucie-de-Tallano', '32T', 505779, 4615700, 41.6931, 9.06945, 0),
('2A310', 'Santa-Maria-Figaniella', '32T', 500532, 4617239, 41.7069, 9.00639, 0),
('2A312', 'Santa-Maria-Siché', '32T', 498456, 4636330, 41.8789, 8.98139, 0),
('2A322', 'Tasso', '32T', 508634, 4643521, 41.9436, 9.10416, 0),
('2A323', 'Tavaco', '32T', 491585, 4653636, 42.0347, 8.89834, 0),
('2A324', 'Tavera', '32T', 501310, 4657271, 42.0675, 9.01583, 0),
('2A326', 'Tolla', '32T', 497837, 4647155, 41.9764, 8.97389, 0),
('2A330', 'Ucciani', '32T', 498046, 4654680, 42.0442, 8.97639, 0),
('2A331', 'Urbalacone', '32T', 495710, 4631674, 41.8369, 8.94833, 0),
('2A336', 'Valle-di-Mezzana', '32T', 485466, 4652382, 42.0233, 8.82444, 0),
('2A345', 'Vero', '32T', 494392, 4656595, 42.0614, 8.93222, 0),
('2A348', 'Vico', '32T', 483296, 4668147, 42.1653, 8.79778, 0),
('2A349', 'Viggianello', '32T', 496000, 4614465, 41.6819, 8.95194, 0),
('2A351', 'Villanova', '32T', 472607, 4645388, 41.96, 8.66944, 0),
('2A357', 'Zérubia', '32T', 506259, 4622177, 41.7514, 9.07528, 0),
('2A358', 'Zévaco', '32T', 503894, 4638243, 41.8961, 9.04694, 0),
('2A359', 'Zicavo', '32T', 510643, 4639730, 41.9094, 9.12833, 0),
('2A360', 'Zigliara', '32T', 499516, 4632783, 41.8469, 8.99417, 0),
('2A362', 'Zonza', '32T', 514181, 4621971, 41.7494, 9.17056, 0),
('2A363', 'Zoza', '32T', 505823, 4618321, 41.7167, 9.07, 0),
('2B002', 'Aghione', '32T', 533024, 4662129, 42.1106, 9.39945, 0),
('2B003', 'Aiti', '32T', 520209, 4693910, 42.3972, 9.24555, 0),
('2B005', 'Alando', '32T', 523993, 4683744, 42.3056, 9.29111, 0),
('2B007', 'Albertacce', '32T', 498650, 4686047, 42.3267, 8.98361, 0),
('2B009', 'Aléria', '32T', 542398, 4661407, 42.1036, 9.51278, 0),
('2B010', 'Algajola', '32T', 488698, 4717085, 42.6061, 8.86222, 0),
('2B012', 'Altiani', '32T', 523906, 4675847, 42.2344, 9.28972, 0),
('2B013', 'Alzi', '32T', 524589, 4683746, 42.3056, 9.29834, 0),
('2B015', 'Ampriani', '32T', 529467, 4677781, 42.2517, 9.35722, 0),
('2B016', 'Antisanti', '32T', 528636, 4668247, 42.1658, 9.34667, 0),
('2B020', 'Aregno', '32T', 491384, 4714151, 42.5797, 8.89501, 0),
('2B023', 'Asco', '32T', 502695, 4699988, 42.4522, 9.03277, 0),
('2B025', 'Avapessa', '32T', 491267, 4711961, 42.56, 8.89361, 0),
('2B029', 'Barbaggio', '32T', 531174, 4726399, 42.6894, 9.38055, 0),
('2B030', 'Barrettali', '32T', 529084, 4747211, 42.8769, 9.35611, 0),
('2B033', 'Bastia', '32T', 536610, 4726981, 42.6944, 9.44695, 0),
('2B034', 'Belgodère', '32T', 501595, 4714824, 42.5858, 9.01944, 0),
('2B036', 'Bigorno', '32T', 524640, 4708113, 42.525, 9.3, 0),
('2B037', 'Biguglia', '32T', 534440, 4719382, 42.6261, 9.42, 0),
('2B039', 'Bisinchi', '32T', 526737, 4702753, 42.4767, 9.32528, 0),
('2B042', 'Borgo', '32T', 535005, 4711272, 42.5531, 9.42639, 0),
('2B043', 'Brando', '32T', 538745, 4735784, 42.7736, 9.47361, 0),
('2B045', 'Bustanico', '32T', 524652, 4685226, 42.3189, 9.29916, 0),
('2B046', 'Cagnano', '32T', 535212, 4746778, 42.8728, 9.43112, 0),
('2B047', 'Calacuccia', '32T', 501419, 4687003, 42.3353, 9.01722, 0),
('2B049', 'Calenzana', '32T', 488110, 4706321, 42.5092, 8.85527, 0),
('2B050', 'Calvi', '32T', 479891, 4712756, 42.5669, 8.755, 0),
('2B051', 'Cambia', '32T', 524177, 4690221, 42.3639, 9.29361, 0),
('2B052', 'Campana', '32T', 529198, 4693017, 42.3889, 9.35473, 0),
('2B053', 'Campi', '32T', 534934, 4679749, 42.2692, 9.42361, 0),
('2B054', 'Campile', '32T', 529197, 4704213, 42.4897, 9.35528, 0),
('2B055', 'Campitello', '32T', 525895, 4708210, 42.5258, 9.31528, 0),
('2B057', 'Canale-di-Verde', '32T', 539077, 4680449, 42.2753, 9.47389, 0),
('2B058', 'Canari', '32T', 527147, 4743687, 42.8453, 9.33223, 0),
('2B059', 'Canavaggia', '32T', 521796, 4705605, 42.5025, 9.26528, 0),
('2B063', 'Carcheto-Brustico', '32T', 530375, 4690461, 42.3658, 9.36889, 0),
('2B067', 'Carpineto', '32T', 531249, 4689417, 42.3564, 9.37945, 0),
('2B068', 'Carticasi', '32T', 523975, 4689265, 42.3553, 9.29112, 0),
('2B069', 'Casabianca', '32T', 529880, 4699158, 42.4442, 9.36333, 0),
('2B072', 'Casalta', '32T', 533606, 4698712, 42.44, 9.40861, 0),
('2B073', 'Casamaccioli', '32T', 500229, 4684967, 42.3169, 9.00278, 0),
('2B074', 'Casanova', '32T', 514642, 4677858, 42.2528, 9.1775, 0),
('2B075', 'Casevecchie', '32T', 529772, 4665383, 42.14, 9.36028, 0),
('2B077', 'Castellare-di-Casinca', '32T', 538959, 4701608, 42.4658, 9.47389, 0),
('2B078', 'Castellare-di-Mercurio', '32T', 520238, 4684164, 42.3094, 9.24556, 0),
('2B079', 'Castello-di-Rostino', '32T', 524847, 4701359, 42.4642, 9.30223, 0),
('2B080', 'Castifao', '32T', 509198, 4705577, 42.5025, 9.11195, 0),
('2B081', 'Castiglione', '32T', 510604, 4696110, 42.4172, 9.12889, 0),
('2B082', 'Castineta', '32T', 524658, 4696577, 42.4211, 9.29972, 0),
('2B083', 'Castirla', '32T', 511892, 4691393, 42.3747, 9.14444, 0),
('2B084', 'Cateri', '32T', 491337, 4713009, 42.5694, 8.89445, 0),
('2B086', 'Centuri', '32T', 530067, 4755639, 42.9528, 9.3686, 0),
('2B087', 'Cervione', '32T', 540416, 4686595, 42.3306, 9.49056, 0),
('2B088', 'Chiatra', '32T', 539365, 4682148, 42.2906, 9.4775, 0),
('2B093', 'Corbara', '32T', 492094, 4717789, 42.6125, 8.90361, 0),
('2B095', 'Corscia', '32T', 503454, 4688823, 42.3517, 9.04194, 0),
('2B096', 'Corte', '32T', 512478, 4683560, 42.3042, 9.15139, 0),
('2B097', 'Costa', '32T', 500182, 4713467, 42.5736, 9.00222, 0),
('2B101', 'Croce', '32T', 529736, 4695548, 42.4117, 9.36139, 0),
('2B102', 'Crocicchia', '32T', 528865, 4701590, 42.4661, 9.35111, 0),
('2B105', 'Erbajolo', '32T', 523437, 4678992, 42.2628, 9.28417, 0),
('2B106', 'Érone', '32T', 522505, 4690956, 42.3706, 9.27333, 0),
('2B107', 'Ersa', '32T', 531755, 4758267, 42.9764, 9.38944, 0),
('2B109', 'Farinole', '32T', 529994, 4730928, 42.7303, 9.36639, 0),
('2B110', 'Favalello', '32T', 522532, 4682628, 42.2956, 9.27334, 0),
('2B111', 'Felce', '32T', 534410, 4688568, 42.3486, 9.41778, 0),
('2B112', 'Feliceto', '32T', 494731, 4709983, 42.5422, 8.93583, 0),
('2B113', 'Ficaja', '32T', 530303, 4696445, 42.4197, 9.36833, 0),
('2B116', 'Focicchia', '32T', 524680, 4677361, 42.2481, 9.29917, 0),
('2B120', 'Furiani', '32T', 533831, 4722834, 42.6572, 9.41277, 0),
('2B121', 'Galéria', '32T', 471291, 4695204, 42.4086, 8.65111, 0),
('2B122', 'Gavignano', '32T', 523631, 4696172, 42.4175, 9.28722, 0),
('2B123', 'Ghisonaccia', '32T', 533580, 4651459, 42.0144, 9.40556, 0),
('2B124', 'Ghisoni', '32T', 517479, 4661055, 42.1014, 9.21139, 0),
('2B125', 'Giocatojo', '32T', 528510, 4699182, 42.4444, 9.34667, 0),
('2B126', 'Giuncaggio', '32T', 530379, 4673621, 42.2142, 9.36805, 0),
('2B134', 'L''Île-Rousse', '32T', 494921, 4719854, 42.6311, 8.93806, 0),
('2B135', 'Isolaccio-di-Fiumorbo', '32T', 523418, 4650000, 42.0017, 9.28277, 0),
('2B136', 'Lama', '32T', 514202, 4713636, 42.575, 9.17305, 0),
('2B137', 'Lano', '32T', 520512, 4692153, 42.3814, 9.24917, 0),
('2B138', 'Lavatoggio', '32T', 490061, 4713535, 42.5742, 8.87889, 0),
('2B140', 'Lento', '32T', 523227, 4707584, 42.5203, 9.28277, 0),
('2B143', 'Linguizzetta', '32T', 539108, 4678969, 42.2619, 9.47417, 0),
('2B145', 'Loreto-di-Casinca', '32T', 535460, 4702546, 42.4744, 9.43139, 0),
('2B147', 'Lozzi', '32T', 500412, 4688113, 42.3453, 9.005, 0),
('2B148', 'Lucciana', '32T', 534189, 4710343, 42.5447, 9.41639, 0),
('2B149', 'Lugo-di-Nazza', '32T', 525115, 4658055, 42.0742, 9.30361, 0),
('2B150', 'Lumio', '32T', 486436, 4713850, 42.5769, 8.83472, 0),
('2B152', 'Luri', '32T', 533430, 4749236, 42.895, 9.40944, 0),
('2B153', 'Manso', '32T', 481910, 4691283, 42.3736, 8.78028, 0),
('2B155', 'Matra', '32T', 532226, 4680847, 42.2792, 9.39083, 0),
('2B156', 'Mausoléo', '32T', 500799, 4707422, 42.5192, 9.00973, 0),
('2B157', 'Mazzola', '32T', 525622, 4682947, 42.2983, 9.31083, 0),
('2B159', 'Meria', '32T', 536769, 4752616, 42.9253, 9.45056, 0),
('2B161', 'Moïta', '32T', 534128, 4680701, 42.2778, 9.41389, 0),
('2B162', 'Moltifao', '32T', 509679, 4703819, 42.4867, 9.11777, 0),
('2B164', 'Monacia-d''Orezza', '32T', 532815, 4692077, 42.3803, 9.39861, 0),
('2B165', 'Moncale', '32T', 486582, 4706447, 42.5103, 8.83667, 0),
('2B166', 'Monte', '32T', 532153, 4701758, 42.4675, 9.39111, 0),
('2B167', 'Montegrosso', '32T', 489621, 4709125, 42.5344, 8.87361, 0),
('2B168', 'Monticello', '32T', 496332, 4718125, 42.6156, 8.95528, 0),
('2B169', 'Morosaglia', '32T', 524516, 4698088, 42.4347, 9.29806, 0),
('2B170', 'Morsiglia', '32T', 530030, 4754002, 42.9381, 9.36806, 0),
('2B171', 'Muracciole', '32T', 515442, 4668360, 42.1672, 9.18695, 0),
('2B172', 'Murato', '32T', 526922, 4713797, 42.5761, 9.32805, 0),
('2B173', 'Muro', '32T', 492861, 4710263, 42.5447, 8.91305, 0),
('2B175', 'Nessa', '32T', 495849, 4710815, 42.5497, 8.94944, 0),
('2B176', 'Nocario', '32T', 529107, 4692924, 42.3881, 9.35362, 0),
('2B177', 'Noceta', '32T', 517361, 4671480, 42.1953, 9.21027, 0),
('2B178', 'Nonza', '32T', 528286, 4737029, 42.7853, 9.34583, 0),
('2B179', 'Novale', '32T', 534272, 4684095, 42.3083, 9.41584, 0),
('2B180', 'Novella', '32T', 509619, 4714707, 42.5847, 9.11723, 0),
('2B182', 'Occhiatana', '32T', 500775, 4713220, 42.5714, 9.00944, 0),
('2B183', 'Ogliastro', '32T', 528454, 4740546, 42.8169, 9.34806, 0),
('2B184', 'Olcani', '32T', 530548, 4739383, 42.8064, 9.37361, 0),
('2B185', 'Oletta', '32T', 529040, 4719943, 42.6314, 9.35417, 0),
('2B187', 'Olmeta-di-Capocorso', '32T', 530476, 4735187, 42.7686, 9.37251, 0),
('2B188', 'Olmeta-di-Tuda', '32T', 529118, 4717538, 42.6097, 9.355, 0),
('2B190', 'Olmi-Cappella', '32T', 501528, 4708624, 42.53, 9.01861, 0),
('2B192', 'Olmo', '32T', 533303, 4704848, 42.4953, 9.40528, 0),
('2B193', 'Omessa', '32T', 516559, 4690878, 42.37, 9.20111, 0),
('2B194', 'Ortale', '32T', 534886, 4684776, 42.3144, 9.42333, 0),
('2B195', 'Ortiporio', '32T', 528162, 4700446, 42.4558, 9.3425, 0),
('2B199', 'Palasca', '32T', 503624, 4715133, 42.5886, 9.04417, 0),
('2B201', 'Pancheraccia', '32T', 530676, 4673900, 42.2167, 9.37167, 0),
('2B202', 'Parata', '32T', 533667, 4690785, 42.3686, 9.40889, 0),
('2B205', 'Patrimonio', '32T', 529622, 4727565, 42.7, 9.36167, 0),
('2B206', 'Penta-Acquatella', '32T', 529849, 4701224, 42.4628, 9.36306, 0),
('2B207', 'Penta-di-Casinca', '32T', 537771, 4701571, 42.4656, 9.45944, 0),
('2B208', 'Perelli', '32T', 532365, 4685535, 42.3214, 9.39278, 0),
('2B210', 'Pero-Casevecchie', '32T', 538260, 4695744, 42.4131, 9.465, 0),
('2B213', 'Pianello', '32T', 529702, 4681884, 42.2886, 9.36028, 0),
('2B214', 'Piano', '32T', 533192, 4699327, 42.4456, 9.40361, 0),
('2B216', 'Piazzali', '32T', 533534, 4685140, 42.3178, 9.40694, 0),
('2B217', 'Piazzole', '32T', 533037, 4693404, 42.3922, 9.40139, 0),
('2B218', 'Piedicorte-di-Gaggio', '32T', 527206, 4675859, 42.2344, 9.32972, 0),
('2B219', 'Piedicroce', '32T', 530257, 4691232, 42.3728, 9.3675, 0),
('2B220', 'Piedigriggio', '32T', 514140, 4699354, 42.4464, 9.17194, 0),
('2B221', 'Piedipartino', '32T', 529620, 4690581, 42.3669, 9.35973, 0),
('2B222', 'Pie-d''Orezza', '32T', 529137, 4691228, 42.3728, 9.35389, 0),
('2B223', 'Pietralba', '32T', 515281, 4710368, 42.5456, 9.18611, 0),
('2B224', 'Pietracorbara', '32T', 535272, 4743816, 42.8461, 9.43166, 0),
('2B225', 'Pietra-di-Verde', '32T', 537231, 4682907, 42.2975, 9.45166, 0),
('2B226', 'Pietraserena', '32T', 528468, 4675618, 42.2322, 9.345, 0),
('2B227', 'Pietricaggio', '32T', 532107, 4686891, 42.3336, 9.38972, 0),
('2B229', 'Pietroso', '32T', 522168, 4667329, 42.1578, 9.26834, 0),
('2B230', 'Piève', '32T', 523593, 4714124, 42.5792, 9.2875, 0),
('2B231', 'Pigna', '32T', 491865, 4716278, 42.5989, 8.90084, 0),
('2B233', 'Pino', '32T', 528706, 4750880, 42.91, 9.35167, 0),
('2B234', 'Piobetta', '32T', 531622, 4687876, 42.3425, 9.38389, 0),
('2B235', 'Pioggiola', '32T', 499772, 4709303, 42.5361, 8.99722, 0),
('2B236', 'Poggio-di-Nazza', '32T', 524801, 4656019, 42.0558, 9.29973, 0),
('2B238', 'Poggio-di-Venaco', '32T', 515512, 4678199, 42.2558, 9.18806, 0),
('2B239', 'Poggio-d''Oletta', '32T', 529742, 4720717, 42.6383, 9.36277, 0),
('2B241', 'Poggio-Marinaccio', '32T', 528170, 4698318, 42.4367, 9.3425, 0),
('2B242', 'Poggio-Mezzana', '32T', 540648, 4693876, 42.3961, 9.49389, 0),
('2B243', 'Polveroso', '32T', 529033, 4694188, 42.3994, 9.35278, 0),
('2B244', 'Popolasca', '32T', 511059, 4697683, 42.4314, 9.13445, 0),
('2B245', 'Porri', '32T', 535678, 4700018, 42.4517, 9.43388, 0),
('2B246', 'La Porta', '32T', 528954, 4696686, 42.4219, 9.35195, 0),
('2B248', 'Prato-di-Giovellina', '32T', 513437, 4696824, 42.4236, 9.16334, 0),
('2B250', 'Prunelli-di-Casacconi', '32T', 533047, 4705742, 42.5033, 9.40222, 0),
('2B251', 'Prunelli-di-Fiumorbo', '32T', 526934, 4650999, 42.0106, 9.32527, 0),
('2B252', 'Pruno', '32T', 536179, 4695949, 42.415, 9.43972, 0),
('2B255', 'Quercitello', '32T', 528656, 4696962, 42.4244, 9.34834, 0),
('2B256', 'Rapaggio', '32T', 532042, 4691086, 42.3714, 9.38917, 0),
('2B257', 'Rapale', '32T', 524866, 4715084, 42.5878, 9.30305, 0),
('2B260', 'Riventosa', '32T', 515055, 4677458, 42.2492, 9.1825, 0),
('2B261', 'Rogliano', '32T', 533919, 4755840, 42.9544, 9.41583, 0),
('2B263', 'Rospigliani', '32T', 518969, 4670774, 42.1889, 9.22973, 0),
('2B264', 'Rusio', '32T', 521639, 4689874, 42.3608, 9.26277, 0),
('2B265', 'Rutali', '32T', 529816, 4714117, 42.5789, 9.36333, 0),
('2B267', 'Saliceto', '32T', 524324, 4694139, 42.3992, 9.29556, 0),
('2B273', 'Scata', '32T', 533025, 4695902, 42.4147, 9.40138, 0),
('2B274', 'Scolca', '32T', 529771, 4708626, 42.5294, 9.3625, 0),
('2B275', 'Sermano', '32T', 522022, 4684446, 42.3119, 9.26722, 0),
('2B277', 'Serra-di-Fiumorbo', '32T', 527843, 4647980, 41.9833, 9.33611, 0),
('2B280', 'Silvareccio', '32T', 533852, 4699731, 42.4492, 9.41166, 0),
('2B281', 'Sisco', '32T', 535154, 4740207, 42.8136, 9.43, 0),
('2B283', 'Solaro', '32T', 527164, 4639157, 41.9039, 9.32751, 0),
('2B286', 'Sorbo-Ocagnano', '32T', 537538, 4702618, 42.475, 9.45667, 0),
('2B287', 'Sorio', '32T', 522657, 4714522, 42.5828, 9.27611, 0),
('2B289', 'Soveria', '32T', 513588, 4689638, 42.3589, 9.165, 0),
('2B290', 'Speloncato', '32T', 498495, 4711987, 42.5603, 8.98167, 0),
('2B291', 'Stazzona', '32T', 530670, 4690894, 42.3697, 9.3725, 0),
('2B292', 'Sant''Andréa-di-Bozio', '32T', 525394, 4682546, 42.2947, 9.30805, 0),
('2B293', 'Sant''Andréa-di-Cotone', '32T', 539877, 4684772, 42.3142, 9.48389, 0),
('2B296', 'Sant''Antonino', '32T', 492251, 4714952, 42.5869, 8.90556, 0),
('2B297', 'San-Damiano', '32T', 533942, 4695351, 42.4097, 9.4125, 0),
('2B298', 'Saint-Florent', '32T', 524920, 4725387, 42.6806, 9.30416, 0),
('2B299', 'San-Gavino-d''Ampugnani', '32T', 534764, 4695540, 42.4114, 9.4225, 0),
('2B301', 'San-Gavino-di-Tenda', '32T', 522036, 4716154, 42.5975, 9.26861, 0),
('2B302', 'San-Giovanni-di-Moriani', '32T', 538879, 4691275, 42.3728, 9.47222, 0),
('2B303', 'San-Giuliano', '32T', 540542, 4684560, 42.3122, 9.49195, 0),
('2B304', 'San-Lorenzo', '32T', 523873, 4692349, 42.3831, 9.29001, 0),
('2B305', 'San-Martino-di-Lota', '32T', 535881, 4731481, 42.735, 9.43833, 0),
('2B306', 'Santa-Lucia-di-Mercurio', '32T', 518150, 4685885, 42.325, 9.22028, 0),
('2B307', 'Santa-Lucia-di-Moriani', '32T', 540547, 4691593, 42.3756, 9.4925, 0),
('2B309', 'Santa-Maria-di-Lota', '32T', 535260, 4732773, 42.7467, 9.43083, 0),
('2B311', 'Santa-Maria-Poggio', '32T', 540933, 4688140, 42.3444, 9.49694, 0),
('2B313', 'San-Nicolao', '32T', 541058, 4690300, 42.3639, 9.49861, 0),
('2B314', 'Santo-Pietro-di-Tenda', '32T', 521579, 4716832, 42.6036, 9.26306, 0),
('2B315', 'Santo-Pietro-di-Venaco', '32T', 514483, 4676870, 42.2439, 9.17555, 0),
('2B316', 'Santa-Reparata-di-Balagna', '32T', 494076, 4716770, 42.6033, 8.92778, 0),
('2B317', 'Santa-Reparata-di-Moriani', '32T', 537106, 4689291, 42.355, 9.45056, 0),
('2B318', 'Taglio-Isolaccio', '32T', 538705, 4697998, 42.4333, 9.47056, 0),
('2B319', 'Talasani', '32T', 539522, 4694980, 42.4061, 9.48028, 0),
('2B320', 'Tallone', '32T', 534223, 4675273, 42.2289, 9.41472, 0),
('2B321', 'Tarrano', '32T', 533106, 4688469, 42.3478, 9.40194, 0),
('2B327', 'Tomino', '32T', 535986, 4754863, 42.9456, 9.44111, 0),
('2B328', 'Tox', '32T', 535656, 4677563, 42.2494, 9.43223, 0),
('2B329', 'Tralonca', '32T', 517138, 4687856, 42.3428, 9.20806, 0),
('2B332', 'Urtaca', '32T', 513742, 4715763, 42.5942, 9.1675, 0),
('2B333', 'Vallecalle', '32T', 527802, 4716083, 42.5967, 9.33889, 0),
('2B334', 'Valle-d''Alesani', '32T', 534217, 4686007, 42.3256, 9.41528, 0),
('2B335', 'Valle-di-Campoloro', '32T', 540849, 4686906, 42.3333, 9.49584, 0),
('2B337', 'Valle-di-Rostino', '32T', 523182, 4700582, 42.4572, 9.28194, 0),
('2B338', 'Valle-d''Orezza', '32T', 532730, 4690565, 42.3667, 9.3975, 0),
('2B339', 'Vallica', '32T', 504312, 4707639, 42.5211, 9.0525, 0),
('2B340', 'Velone-Orneto', '32T', 539528, 4693931, 42.3967, 9.48028, 0),
('2B341', 'Venaco', '32T', 514326, 4675328, 42.23, 9.17361, 0),
('2B342', 'Ventiseri', '32T', 527630, 4643662, 41.9444, 9.33333, 0),
('2B343', 'Venzolasca', '32T', 537511, 4703389, 42.4819, 9.45639, 0),
('2B344', 'Verdèse', '32T', 529952, 4693174, 42.3903, 9.36389, 0),
('2B346', 'Vescovato', '32T', 536067, 4704399, 42.4911, 9.43889, 0),
('2B347', 'Vezzani', '32T', 520327, 4668927, 42.1722, 9.24611, 0),
('2B350', 'Vignale', '32T', 531411, 4709250, 42.535, 9.3825, 0),
('2B352', 'Ville-di-Paraso', '32T', 499202, 4712325, 42.5633, 8.99028, 0),
('2B353', 'Ville-di-Pietrabugno', '32T', 535212, 4728855, 42.7114, 9.43, 0),
('2B354', 'Vivario', '32T', 514064, 4668881, 42.1719, 9.17028, 0),
('2B355', 'Volpajola', '32T', 529408, 4708286, 42.5264, 9.35806, 0),
('2B356', 'Zalana', '32T', 530792, 4678712, 42.26, 9.37333, 0),
('2B361', 'Zilia', '32T', 491833, 4708567, 42.5294, 8.90056, 0),
('2B364', 'Zuani', '32T', 528498, 4679597, 42.2681, 9.34556, 0),
('2B365', 'San-Gavino-di-Fiumorbo', '32T', 522229, 4647961, 41.9833, 9.26834, 0),
('2B366', 'Chisa', '32T', 521857, 4641421, 41.9244, 9.26361, 0),
('30001', 'Aigaliers', '31T', 605925, 4879294, 44.0592, 4.3225, 200),
('30002', 'Aigremont', '31T', 590046, 4868752, 43.9664, 4.12249, 150),
('30003', 'Aigues-Mortes', '31T', 596390, 4824468, 43.5669, 4.19361, 2),
('30004', 'Aigues-Vives', '31T', 595157, 4843366, 43.7372, 4.18167, 40),
('30005', 'Aiguèze', '31T', 624123, 4906711, 44.3031, 4.55611, 89),
('30006', 'Aimargues', '31T', 597523, 4837599, 43.685, 4.21, 6),
('30007', 'Alès', '31T', 586512, 4886695, 44.1283, 4.08138, 140),
('30008', 'Allègre-les-Fumades', '31T', 598571, 4894827, 44.2, 4.23361, 130),
('30009', 'Alzon', '31T', 535274, 4868326, 43.9672, 3.43973, 580),
('30010', 'Anduze', '31T', 579077, 4878424, 44.0547, 3.98722, 120),
('30011', 'Les Angles', '31T', 641704, 4868422, 43.9553, 4.76612, 70),
('30012', 'Aramon', '31T', 635073, 4861153, 43.8911, 4.68166, 20),
('30013', 'Argilliers', '31T', 620290, 4870189, 43.975, 4.49972, 73),
('30014', 'Arpaillargues-et-Aureillac', '31T', 610238, 4872884, 44.0008, 4.375, 120),
('30015', 'Arphy', '31T', 547593, 4875037, 44.0269, 3.59389, 500),
('30016', 'Arre', '31T', 541647, 4868333, 43.9669, 3.51917, 320),
('30017', 'Arrigas', '31T', 538535, 4870782, 43.9892, 3.48055, 490),
('30018', 'Aspères', '31T', 583582, 4851110, 43.8083, 4.03916, 80),
('30019', 'Aubais', '31T', 592514, 4845149, 43.7536, 4.14917, 60),
('30020', 'Aubord', '31T', 605657, 4845776, 43.7575, 4.31251, 20),
('30021', 'Aubussargues', '31T', 606373, 4873593, 44.0078, 4.32694, 123),
('30022', 'Aujac', '31T', 580921, 4911064, 44.3483, 4.01527, 500),
('30023', 'Aujargues', '31T', 590225, 4849006, 43.7886, 4.12139, 80),
('30024', 'Aulas', '31T', 547144, 4872411, 44.0033, 3.58805, 340),
('30025', 'Aumessas', '31T', 540494, 4871041, 43.9914, 3.505, 480),
('30026', 'Avèze', '31T', 548171, 4868994, 43.9725, 3.60055, 260),
('30027', 'Bagard', '31T', 584213, 4880556, 44.0733, 4.05167, 154),
('30028', 'Bagnols-sur-Cèze', '31T', 629572, 4891198, 44.1625, 4.62056, 50),
('30029', 'Barjac', '31T', 607672, 4907098, 44.3092, 4.35, 160),
('30030', 'Baron', '31T', 602848, 4878258, 44.0503, 4.28389, 150),
('30031', 'La Bastide-d''Engras', '31T', 618356, 4883549, 44.0956, 4.47861, 230),
('30032', 'Beaucaire', '31T', 632038, 4852142, 43.8106, 4.64167, 10),
('30033', 'Beauvoisin', '31T', 606485, 4841500, 43.7189, 4.32194, 90),
('30034', 'Bellegarde', '31T', 621941, 4845746, 43.7547, 4.51472, 5),
('30035', 'Belvézet', '31T', 609391, 4882314, 44.0858, 4.36638, 174),
('30036', 'Bernis', '31T', 603563, 4846639, 43.7656, 4.28667, 20),
('30037', 'Bessèges', '31T', 587602, 4904978, 44.2928, 4.09806, 180),
('30038', 'Bez-et-Esparon', '31T', 542601, 4869017, 43.9731, 3.53112, 300),
('30039', 'Bezouce', '31T', 619813, 4859595, 43.8797, 4.49139, 70),
('30040', 'Blandas', '31T', 541194, 4862375, 43.9133, 3.51306, 660),
('30041', 'Blauzac', '31T', 609792, 4868927, 43.9653, 4.36862, 102),
('30042', 'Boisset-et-Gaujac', '31T', 581776, 4877933, 44.05, 4.02084, 150),
('30043', 'Boissières', '31T', 599189, 4847529, 43.7742, 4.2325, 50),
('30044', 'Bonnevaux', '31T', 582178, 4913301, 44.3683, 4.03139, 724),
('30045', 'Bordezac', '31T', 586082, 4907612, 44.3167, 4.07944, 440),
('30046', 'Boucoiran-et-Nozières', '31T', 595035, 4872124, 43.9961, 4.18528, 100),
('30047', 'Bouillargues', '31T', 614762, 4850896, 43.8022, 4.42667, 67),
('30048', 'Bouquet', '31T', 602561, 4890968, 44.1647, 4.28278, 270),
('30049', 'Bourdic', '31T', 606750, 4870945, 43.9839, 4.33111, 80),
('30050', 'Bragassargues', '31T', 584211, 4863214, 43.9172, 4.04889, 100),
('30051', 'Branoux-les-Taillades', '31T', 579167, 4896786, 44.22, 3.99111, 292),
('30052', 'Bréau-et-Salagosse', '31T', 545819, 4870797, 43.9889, 3.57139, 312),
('30053', 'Brignon', '31T', 597317, 4871478, 43.99, 4.21361, 80),
('30054', 'Brouzet-lès-Quissac', '31T', 579556, 4857046, 43.8622, 3.99, 90),
('30055', 'Brouzet-lès-Alès', '31T', 599743, 4887808, 44.1367, 4.24694, 193),
('30056', 'La Bruguière', '31T', 613255, 4885280, 44.1119, 4.41527, 274),
('30057', 'Cabrières', '31T', 618200, 4862405, 43.9053, 4.47195, 155),
('30058', 'La Cadière-et-Cambo', '31T', 564809, 4867532, 43.9581, 3.80778, 240),
('30059', 'Le Cailar', '31T', 599601, 4836364, 43.6736, 4.23555, 4),
('30060', 'Caissargues', '31T', 610906, 4850244, 43.7969, 4.37862, 30),
('30061', 'La Calmette', '31T', 601505, 4864227, 43.9242, 4.26444, 80),
('30062', 'Calvisson', '31T', 595995, 4848809, 43.7861, 4.19305, 60),
('30064', 'Campestre-et-Luc', '31T', 533632, 4866837, 43.9539, 3.41916, 789),
('30065', 'Canaules-et-Argentières', '31T', 584410, 4870344, 43.9814, 4.0525, 100),
('30066', 'Cannes-et-Clairan', '31T', 587023, 4861367, 43.9003, 4.08361, 80),
('30067', 'La Capelle-et-Masmolène', '31T', 622891, 4878941, 44.0533, 4.53417, 189),
('30068', 'Cardet', '31T', 586616, 4875403, 44.0267, 4.08083, 105),
('30069', 'Carnas', '31T', 579462, 4853713, 43.8322, 3.98833, 90),
('30070', 'Carsan', '31T', 627276, 4899580, 44.2383, 4.59388, 140),
('30071', 'Cassagnoles', '31T', 590696, 4875025, 44.0228, 4.13167, 130),
('30072', 'Castelnau-Valence', '31T', 600315, 4873590, 44.0086, 4.25139, 140),
('30073', 'Castillon-du-Gard', '31T', 624664, 4869869, 43.9714, 4.55416, 70),
('30074', 'Causse-Bégon', '31T', 528788, 4878754, 44.0614, 3.35944, 869),
('30075', 'Caveirac', '31T', 601425, 4853364, 43.8264, 4.26138, 94),
('30076', 'Cavillargues', '31T', 621828, 4885834, 44.1156, 4.5225, 134),
('30077', 'Cendras', '31T', 583010, 4889489, 44.1539, 4.03806, 200),
('30079', 'Chambon', '31T', 581426, 4906102, 44.3036, 4.02083, 280),
('30080', 'Chamborigaud', '31T', 577901, 4906244, 44.3053, 3.97667, 297),
('30081', 'Chusclan', '31T', 634710, 4889851, 44.1494, 4.68444, 40),
('30082', 'Clarensac', '31T', 597895, 4853403, 43.8272, 4.2175, 70),
('30083', 'Codognan', '31T', 598319, 4842825, 43.7319, 4.22083, 19),
('30084', 'Codolet', '31T', 636185, 4887319, 44.1264, 4.70223, 33),
('30085', 'Collias', '31T', 618548, 4867905, 43.9547, 4.4775, 50),
('30086', 'Collorgues', '31T', 603594, 4873271, 44.0053, 4.29222, 150),
('30087', 'Colognac', '31T', 566000, 4875411, 44.0289, 3.82361, 600),
('30088', 'Combas', '31T', 589367, 4856307, 43.8544, 4.11194, 90),
('30089', 'Comps', '31T', 628978, 4856649, 43.8517, 4.60472, 12),
('30090', 'Concoules', '31T', 574612, 4914815, 44.3828, 3.93667, 640),
('30091', 'Congénies', '31T', 593305, 4847783, 43.7772, 4.15945, 70),
('30092', 'Connaux', '31T', 627545, 4883412, 44.0928, 4.59333, 76),
('30093', 'Conqueyrac', '31T', 572823, 4866350, 43.9467, 3.9075, 126),
('30094', 'Corbès', '31T', 576288, 4880984, 44.0781, 3.95278, 199),
('30095', 'Corconne', '31T', 575481, 4858110, 43.8722, 3.93945, 140),
('30096', 'Cornillon', '31T', 618807, 4897970, 44.2253, 4.4875, 130),
('30097', 'Courry', '31T', 592465, 4905878, 44.3003, 4.15916, 300),
('30098', 'Crespian', '31T', 588054, 4859344, 43.8819, 4.09611, 80),
('30099', 'Cros', '31T', 566105, 4871648, 43.995, 3.82445, 240),
('30100', 'Cruviers-Lascours', '31T', 596647, 4873073, 44.0044, 4.20555, 88),
('30101', 'Deaux', '31T', 592116, 4880137, 44.0686, 4.15027, 150),
('30102', 'Dions', '31T', 603922, 4865129, 43.9319, 4.29472, 60),
('30103', 'Domazan', '31T', 632553, 4865516, 43.9308, 4.65139, 72),
('30104', 'Domessargues', '31T', 593729, 4869945, 43.9767, 4.16861, 130),
('30105', 'Dourbies', '31T', 535795, 4879035, 44.0636, 3.44694, 880),
('30106', 'Durfort-et-Saint-Martin-de-Sossenac', '31T', 576623, 4871237, 43.9903, 3.95555, 180),
('30107', 'Estézargues', '31T', 631392, 4866697, 43.9417, 4.63722, 132),
('30108', 'L''Estréchure', '31T', 562733, 4884173, 44.1081, 3.78388, 300),
('30109', 'Euzet', '31T', 598821, 4881098, 44.0764, 4.23416, 136),
('30110', 'Flaux', '31T', 620530, 4875348, 44.0214, 4.50389, 161),
('30111', 'Foissac', '31T', 604087, 4877321, 44.0417, 4.29917, 160),
('30112', 'Fons', '31T', 595889, 4862385, 43.9083, 4.19417, 110),
('30113', 'Fons-sur-Lussan', '31T', 606343, 4893343, 44.1856, 4.33055, 288),
('30114', 'Fontanès', '31T', 587438, 4853597, 43.8303, 4.0875, 60),
('30115', 'Fontarèches', '31T', 615239, 4885006, 44.1092, 4.44, 230),
('30116', 'Fournès', '31T', 628566, 4865222, 43.9289, 4.60167, 50),
('30117', 'Fourques', '31T', 629831, 4839197, 43.6944, 4.61111, 4),
('30119', 'Fressac', '31T', 574276, 4871951, 43.9969, 3.92638, 200),
('30120', 'Gagnières', '31T', 590015, 4906801, 44.3089, 4.12861, 200),
('30121', 'Gailhan', '31T', 582953, 4854990, 43.8433, 4.03195, 90),
('30122', 'Gajan', '31T', 597424, 4861173, 43.8972, 4.21306, 100),
('30123', 'Gallargues-le-Montueux', '31T', 594533, 4841598, 43.7214, 4.17361, 40),
('30124', 'Le Garn', '31T', 617469, 4906989, 44.3067, 4.47278, 247),
('30125', 'Garons', '31T', 614733, 4847346, 43.7703, 4.42555, 95),
('30126', 'Garrigues-Sainte-Eulalie', '31T', 605306, 4872032, 43.9939, 4.31333, 103),
('30127', 'Gaujac', '31T', 626458, 4882095, 44.0811, 4.57944, 127),
('30128', 'Générac', '31T', 608636, 4842738, 43.7297, 4.34889, 80),
('30129', 'Générargues', '31T', 578864, 4881384, 44.0814, 3.985, 162),
('30130', 'Génolhac', '31T', 575803, 4911311, 44.3511, 3.95111, 500),
('30131', 'Goudargues', '31T', 617296, 4896832, 44.2153, 4.46833, 77),
('30132', 'La Grand-Combe', '31T', 582592, 4896211, 44.2144, 4.03389, 204),
('30133', 'Le Grau-du-Roi', '31T', 591928, 4821011, 43.5364, 4.13778, 2),
('30134', 'Issirac', '31T', 618202, 4903237, 44.2728, 4.48111, 260),
('30135', 'Jonquières-Saint-Vincent', '31T', 625657, 4853901, 43.8275, 4.56277, 30),
('30136', 'Junas', '31T', 590364, 4847002, 43.7706, 4.12278, 70),
('30137', 'Lamelouze', '31T', 577115, 4893922, 44.1944, 3.965, 488),
('30138', 'Langlade', '31T', 600545, 4851005, 43.8053, 4.25, 80),
('30139', 'Lanuéjols', '31T', 530555, 4886383, 44.13, 3.38194, 920),
('30140', 'Lasalle', '31T', 568521, 4877103, 44.0439, 3.85528, 280),
('30141', 'Laudun-l''Ardoise', '31T', 632697, 4884995, 44.1061, 4.65806, 80),
('30142', 'Laval-Pradel', '31T', 585155, 4895410, 44.2069, 4.06584, 239),
('30143', 'Laval-Saint-Roman', '31T', 620252, 4906299, 44.3, 4.5075, 134),
('30144', 'Lecques', '31T', 585397, 4854249, 43.8364, 4.06223, 50),
('30145', 'Lédenon', '31T', 621076, 4863753, 43.9169, 4.50805, 120),
('30146', 'Lédignan', '31T', 588656, 4871048, 43.9872, 4.10555, 150),
('30147', 'Lézan', '31T', 584299, 4873830, 44.0128, 4.05167, 120),
('30148', 'Liouc', '31T', 580114, 4860725, 43.8953, 3.9975, 90),
('30149', 'Lirac', '31T', 635459, 4877211, 44.0356, 4.69056, 110),
('30150', 'Logrian-Florian', '31T', 582551, 4867513, 43.9561, 4.02889, 90),
('30151', 'Lussan', '31T', 609399, 4889906, 44.1542, 4.36806, 298),
('30152', 'Les Mages', '31T', 593376, 4897960, 44.2289, 4.16917, 200),
('30153', 'Malons-et-Elze', '31T', 581666, 4918788, 44.4178, 4.02583, 880),
('30154', 'Mandagout', '31T', 550248, 4874254, 44.0197, 3.62694, 500),
('30155', 'Manduel', '31T', 618438, 4852781, 43.8186, 4.47277, 53),
('30156', 'Marguerittes', '31T', 616057, 4857337, 43.86, 4.44416, 50),
('30157', 'Mars', '31T', 544008, 4871773, 43.9978, 3.54888, 400),
('30158', 'Martignargues', '31T', 594334, 4877514, 44.0447, 4.1775, 110),
('30159', 'Le Martinet', '31T', 586730, 4900523, 44.2528, 4.08639, 250),
('30160', 'Maruéjols-lès-Gardon', '31T', 590611, 4873111, 44.0056, 4.13028, 105),
('30161', 'Massanes', '31T', 589250, 4874944, 44.0222, 4.11362, 120),
('30162', 'Massillargues-Attuech', '31T', 582159, 4873988, 44.0144, 4.025, 130),
('30163', 'Mauressargues', '31T', 592976, 4868083, 43.96, 4.1589, 150),
('30164', 'Méjannes-le-Clap', '31T', 607605, 4897684, 44.2244, 4.34723, 304),
('30165', 'Méjannes-lès-Alès', '31T', 592421, 4883782, 44.1014, 4.15472, 141),
('30166', 'Meynes', '31T', 625630, 4860073, 43.8831, 4.56389, 30),
('30167', 'Meyrannes', '31T', 593040, 4902893, 44.2733, 4.16584, 170),
('30168', 'Mialet', '31T', 575468, 4884646, 44.1111, 3.94306, 180),
('30169', 'Milhaud', '31T', 605176, 4849318, 43.7894, 4.30723, 30),
('30170', 'Molières-Cavaillac', '31T', 546119, 4869319, 43.9756, 3.575, 340),
('30171', 'Molières-sur-Cèze', '31T', 592395, 4901433, 44.2603, 4.1575, 170),
('30172', 'Monoblet', '31T', 571088, 4872286, 44.0003, 3.88667, 300),
('30173', 'Mons', '31T', 594045, 4885286, 44.1147, 4.17527, 200),
('30174', 'Montaren-et-Saint-Médiers', '31T', 610672, 4876256, 44.0311, 4.38111, 110),
('30175', 'Montclus', '31T', 613566, 4902013, 44.2625, 4.42278, 100),
('30176', 'Montdardier', '31T', 547606, 4863899, 43.9267, 3.59305, 615),
('30177', 'Monteils', '31T', 594574, 4882547, 44.09, 4.18139, 180),
('30178', 'Montfaucon', '31T', 640574, 4881670, 44.0747, 4.75555, 30),
('30179', 'Montfrin', '31T', 627943, 4859345, 43.8761, 4.5925, 20),
('30180', 'Montignargues', '31T', 596186, 4864981, 43.9317, 4.19834, 140),
('30181', 'Montmirat', '31T', 588497, 4861295, 43.8994, 4.10195, 90),
('30182', 'Montpezat', '31T', 592945, 4855955, 43.8508, 4.15639, 160),
('30183', 'Moulézan', '31T', 590325, 4864683, 43.9297, 4.12528, 102),
('30184', 'Moussac', '31T', 598355, 4870599, 43.9819, 4.22639, 80),
('30185', 'Mus', '31T', 596588, 4843417, 43.7375, 4.19945, 50),
('30186', 'Nages-et-Solorgues', '31T', 598870, 4849406, 43.7911, 4.22888, 70),
('30187', 'Navacelles', '31T', 599233, 4890670, 44.1625, 4.24111, 178),
('30188', 'Ners', '31T', 593005, 4875490, 44.0267, 4.16055, 100),
('30189', 'Nîmes', '31T', 609399, 4854848, 43.8386, 4.36083, 46),
('30190', 'Notre-Dame-de-la-Rouvière', '31T', 556188, 4877419, 44.0478, 3.70139, 402),
('30191', 'Orsan', '31T', 633417, 4887880, 44.1319, 4.66778, 50),
('30192', 'Orthoux-Sérignac-Quilhan', '31T', 582552, 4860262, 43.8908, 4.02777, 100),
('30193', 'Parignargues', '31T', 596970, 4858605, 43.8742, 4.20694, 130),
('30194', 'Peyremale', '31T', 584862, 4905991, 44.3022, 4.06389, 220),
('30195', 'Peyrolles', '31T', 566685, 4884737, 44.1128, 3.83333, 340),
('30196', 'Le Pin', '31T', 623412, 4883179, 44.0914, 4.54166, 182),
('30197', 'Les Plans', '31T', 597326, 4888975, 44.1475, 4.21695, 160),
('30198', 'Les Plantiers', '31T', 557901, 4885116, 44.1169, 3.72361, 404),
('30199', 'Pommiers', '31T', 548857, 4866623, 43.9511, 3.60889, 474),
('30200', 'Pompignan', '31T', 568827, 4860475, 43.8942, 3.85695, 190),
('30201', 'Ponteils-et-Brésis', '31T', 577792, 4917198, 44.4039, 3.97694, 552),
('30202', 'Pont-Saint-Esprit', '31T', 631228, 4901726, 44.2569, 4.64389, 50),
('30203', 'Portes', '31T', 581605, 4902432, 44.2706, 4.0225, 557),
('30204', 'Potelières', '31T', 599065, 4897396, 44.2231, 4.24028, 140),
('30205', 'Pougnadoresse', '31T', 620696, 4883345, 44.0933, 4.50778, 214),
('30206', 'Poulx', '31T', 614396, 4863048, 43.9117, 4.42473, 170),
('30207', 'Pouzilhac', '31T', 626653, 4877746, 44.0419, 4.58083, 220),
('30208', 'Puechredon', '31T', 584043, 4867624, 43.9569, 4.0475, 100),
('30209', 'Pujaut', '31T', 642341, 4874053, 44.0058, 4.77556, 90),
('30210', 'Quissac', '31T', 580364, 4862209, 43.9086, 4.00083, 80),
('30211', 'Redessan', '31T', 620442, 4854422, 43.8331, 4.49805, 58),
('30212', 'Remoulins', '31T', 625421, 4866396, 43.94, 4.56278, 25),
('30213', 'Revens', '31T', 523861, 4881635, 44.0875, 3.29805, 800),
('30214', 'Ribaute-les-Tavernes', '31T', 586578, 4876636, 44.0378, 4.08056, 110),
('30215', 'Rivières', '31T', 602055, 4897781, 44.2261, 4.27778, 130),
('30216', 'Robiac-Rochessadoule', '31T', 589799, 4903125, 44.2758, 4.12527, 210),
('30217', 'Rochefort-du-Gard', '31T', 635640, 4870517, 43.9753, 4.69111, 90),
('30218', 'Rochegude', '31T', 603563, 4899224, 44.2389, 4.29694, 130),
('30219', 'Rogues', '31T', 546007, 4859722, 43.8892, 3.57277, 580),
('30220', 'Roquedur', '31T', 553982, 4869594, 43.9775, 3.67305, 380),
('30221', 'Roquemaure', '31T', 642430, 4879210, 44.0522, 4.77806, 24),
('30222', 'La Roque-sur-Cèze', '31T', 621444, 4894592, 44.1944, 4.51972, 100),
('30223', 'Rousson', '31T', 591517, 4894416, 44.1972, 4.14528, 300),
('30224', 'La Rouvière', '31T', 599060, 4865147, 43.9328, 4.23416, 80),
('30225', 'Sabran', '31T', 623820, 4889884, 44.1517, 4.54833, 240),
('30226', 'Saint-Alexandre', '31T', 629515, 4898605, 44.2292, 4.62167, 120),
('30227', 'Saint-Ambroix', '31T', 595718, 4901697, 44.2622, 4.19917, 141),
('30228', 'Sainte-Anastasie', '31T', 606056, 4865595, 43.9358, 4.32139, 90),
('30229', 'Saint-André-de-Majencoules', '31T', 554070, 4875179, 44.0278, 3.67472, 380),
('30230', 'Saint-André-de-Roquepertuis', '31T', 616269, 4899653, 44.2408, 4.4561, 100),
('30231', 'Saint-André-de-Valborgne', '31T', 554464, 4889438, 44.1561, 3.68111, 450),
('30232', 'Saint-André-d''Olérargues', '31T', 618822, 4890995, 44.1625, 4.48611, 220),
('30233', 'Saint-Bauzély', '31T', 596137, 4863746, 43.9206, 4.1975, 120),
('30234', 'Saint-Bénézet', '31T', 591075, 4871729, 43.9931, 4.13583, 180),
('30235', 'Saint-Bonnet-du-Gard', '31T', 624019, 4865042, 43.9281, 4.545, 50),
('30236', 'Saint-Bonnet-de-Salendrinque', '31T', 569666, 4876097, 44.0347, 3.86944, 300),
('30237', 'Saint-Brès', '31T', 595469, 4903545, 44.2789, 4.19639, 200),
('30238', 'Saint-Bresson', '31T', 551797, 4866923, 43.9536, 3.64555, 520),
('30239', 'Sainte-Cécile-d''Andorge', '31T', 578170, 4900415, 44.2528, 3.97917, 310),
('30240', 'Saint-Césaire-de-Gauzignan', '31T', 596629, 4875850, 44.0294, 4.20583, 105),
('30241', 'Saint-Chaptes', '31T', 602606, 4869490, 43.9714, 4.27917, 71),
('30242', 'Saint-Christol-de-Rodières', '31T', 620982, 4902794, 44.2683, 4.51583, 226),
('30243', 'Saint-Christol-lès-Alès', '31T', 585908, 4881904, 44.0853, 4.07305, 140),
('30244', 'Saint-Clément', '31T', 582589, 4853690, 43.8317, 4.02722, 70),
('30245', 'Saint-Côme-et-Maruéjols', '31T', 596576, 4853446, 43.8278, 4.20111, 70),
('30246', 'Sainte-Croix-de-Caderle', '31T', 569159, 4879887, 44.0689, 3.86361, 540),
('30247', 'Saint-Denis', '31T', 600091, 4898522, 44.2331, 4.25333, 121),
('30248', 'Saint-Dézéry', '31T', 601884, 4872935, 44.0025, 4.27083, 114),
('30249', 'Saint-Dionizy', '31T', 598802, 4850979, 43.8053, 4.22833, 70),
('30250', 'Saint-Étienne-de-l''Olm', '31T', 594891, 4879065, 44.0586, 4.18473, 120),
('30251', 'Saint-Étienne-des-Sorts', '31T', 636335, 4893990, 44.1864, 4.70583, 36),
('30252', 'Saint-Félix-de-Pallières', '31T', 574756, 4874826, 44.0228, 3.93278, 320),
('30253', 'Saint-Florent-sur-Auzonnet', '31T', 588807, 4899471, 44.2431, 4.11223, 260),
('30254', 'Saint-Geniès-de-Comolas', '31T', 638124, 4880723, 44.0667, 4.72472, 60),
('30255', 'Saint-Geniès-de-Malgoirès', '31T', 597633, 4866638, 43.9464, 4.21666, 85),
('30256', 'Saint-Gervais', '31T', 625927, 4893597, 44.1847, 4.57556, 60),
('30257', 'Saint-Gervasy', '31T', 618075, 4859410, 43.8783, 4.46973, 68),
('30258', 'Saint-Gilles', '31T', 615536, 4837145, 43.6783, 4.43334, 10),
('30259', 'Saint-Hilaire-de-Brethmas', '31T', 590164, 4881375, 44.08, 4.12611, 140),
('30260', 'Saint-Hilaire-d''Ozilhan', '31T', 627695, 4869927, 43.9714, 4.59195, 54),
('30261', 'Saint-Hippolyte-de-Caton', '31T', 596407, 4880383, 44.0703, 4.20389, 131),
('30262', 'Saint-Hippolyte-de-Montaigu', '31T', 619661, 4876598, 44.0328, 4.49333, 137),
('30263', 'Saint-Hippolyte-du-Fort', '31T', 568768, 4868281, 43.9644, 3.85722, 170),
('30264', 'Saint-Jean-de-Ceyrargues', '31T', 598350, 4878375, 44.0519, 4.22777, 184),
('30265', 'Saint-Jean-de-Crieulon', '31T', 579632, 4869297, 43.9725, 3.99278, 140),
('30266', 'Saint-Jean-de-Maruéjols-et-Avéjan', '31T', 603265, 4901256, 44.2572, 4.29361, 119);
INSERT INTO `ods_communes` (`oc_code_insee`, `oc_nom`, `oc_secteur`, `oc_x_utm`, `oc_y_utm`, `oc_latitude`, `oc_longitude`, `oc_altitude`) VALUES
('30267', 'Saint-Jean-de-Serres', '31T', 585728, 4871781, 43.9942, 4.06917, 120),
('30268', 'Saint-Jean-de-Valériscle', '31T', 591438, 4898519, 44.2342, 4.145, 200),
('30269', 'Saint-Jean-du-Gard', '31T', 570895, 4884009, 44.1058, 3.88584, 189),
('30270', 'Saint-Jean-du-Pin', '31T', 584086, 4885244, 44.1156, 4.05083, 200),
('30271', 'Saint-Julien-de-Cassagnas', '31T', 595800, 4896082, 44.2117, 4.19917, 170),
('30272', 'Saint-Julien-de-la-Nef', '31T', 555465, 4868095, 43.9639, 3.69139, 170),
('30273', 'Saint-Julien-de-Peyrolas', '31T', 624885, 4905121, 44.2886, 4.56528, 100),
('30274', 'Saint-Julien-les-Rosiers', '31T', 588425, 4891596, 44.1722, 4.10611, 169),
('30275', 'Saint-Just-et-Vacquières', '31T', 597942, 4884911, 44.1108, 4.22389, 200),
('30276', 'Saint-Laurent-d''Aigouze', '31T', 596528, 4832061, 43.6353, 4.19667, 3),
('30277', 'Saint-Laurent-de-Carnols', '31T', 622273, 4896583, 44.2122, 4.53055, 90),
('30278', 'Saint-Laurent-des-Arbres', '31T', 636262, 4879296, 44.0542, 4.70112, 80),
('30279', 'Saint-Laurent-la-Vernède', '31T', 616711, 4884754, 44.1067, 4.45833, 213),
('30280', 'Saint-Laurent-le-Minier', '31T', 552529, 4864584, 43.9325, 3.65444, 180),
('30281', 'Saint-Mamert-du-Gard', '31T', 595453, 4860095, 43.8878, 4.18833, 110),
('30282', 'Saint-Marcel-de-Careiret', '31T', 619128, 4888840, 44.1431, 4.48944, 212),
('30283', 'Saint-Martial', '31T', 559050, 4875932, 44.0342, 3.73694, 464),
('30284', 'Saint-Martin-de-Valgalgues', '31T', 586598, 4890337, 44.1611, 4.08306, 171),
('30285', 'Saint-Maurice-de-Cazevieille', '31T', 598918, 4876162, 44.0319, 4.23445, 140),
('30286', 'Saint-Maximin', '31T', 616240, 4872370, 43.9953, 4.44972, 124),
('30287', 'Saint-Michel-d''Euzet', '31T', 623537, 4895465, 44.2019, 4.54611, 100),
('30288', 'Saint-Nazaire', '31T', 629916, 4895156, 44.1981, 4.62583, 82),
('30289', 'Saint-Nazaire-des-Gardies', '31T', 581203, 4870212, 43.9806, 4.0125, 150),
('30290', 'Saint-Paulet-de-Caisson', '31T', 627532, 4902393, 44.2636, 4.59777, 80),
('30291', 'Saint-Paul-la-Coste', '31T', 577572, 4889021, 44.1503, 3.96999, 420),
('30292', 'Saint-Pons-la-Calm', '31T', 624678, 4884499, 44.1031, 4.55778, 121),
('30293', 'Saint-Privat-de-Champclos', '31T', 609329, 4904749, 44.2878, 4.37028, 260),
('30294', 'Saint-Privat-des-Vieux', '31T', 590379, 4888383, 44.1431, 4.13, 190),
('30295', 'Saint-Quentin-la-Poterie', '31T', 615540, 4878006, 44.0461, 4.44223, 152),
('30296', 'Saint-Roman-de-Codières', '31T', 562334, 4872352, 44.0017, 3.7775, 623),
('30297', 'Saint-Sauveur-Camprieu', '31T', 535786, 4884805, 44.1156, 3.44722, 1120),
('30298', 'Saint-Sébastien-d''Aigrefeuille', '31T', 579653, 4884202, 44.1067, 3.99528, 200),
('30299', 'Saint-Siffret', '31T', 617621, 4874894, 44.0178, 4.4675, 150),
('30300', 'Saint-Théodorit', '31T', 586872, 4866087, 43.9428, 4.0825, 140),
('30301', 'Saint-Victor-des-Oules', '31T', 619041, 4877635, 44.0422, 4.48583, 200),
('30302', 'Saint-Victor-la-Coste', '31T', 631507, 4879971, 44.0611, 4.64195, 120),
('30303', 'Saint-Victor-de-Malcap', '31T', 597671, 4900121, 44.2478, 4.22334, 150),
('30304', 'Salazac', '31T', 621884, 4902008, 44.2611, 4.52695, 240),
('30305', 'Salindres', '31T', 592731, 4891748, 44.1731, 4.15999, 191),
('30306', 'Salinelles', '31T', 585836, 4851355, 43.8103, 4.06722, 40),
('30307', 'Les Salles-du-Gardon', '31T', 582177, 4895650, 44.2094, 4.02861, 189),
('30308', 'Sanilhac-Sagriès', '31T', 614290, 4867892, 43.9553, 4.42445, 119),
('30309', 'Sardan', '31T', 583625, 4858331, 43.8733, 4.04083, 60),
('30310', 'Saumane', '31T', 560922, 4885329, 44.1186, 3.76139, 327),
('30311', 'Sauve', '31T', 576150, 4865893, 43.9422, 3.94889, 100),
('30312', 'Sauveterre', '31T', 643714, 4876460, 44.0272, 4.79333, 50),
('30313', 'Sauzet', '31T', 597050, 4868388, 43.9622, 4.20972, 100),
('30314', 'Savignargues', '31T', 586975, 4868403, 43.9636, 4.08416, 120),
('30315', 'Saze', '31T', 634979, 4866893, 43.9428, 4.68195, 81),
('30316', 'Sénéchas', '31T', 581970, 4908670, 44.3267, 4.02806, 465),
('30317', 'Sernhac', '31T', 624475, 4863322, 43.9125, 4.55027, 50),
('30318', 'Servas', '31T', 595642, 4890123, 44.1581, 4.19611, 190),
('30319', 'Serviers-et-Labaume', '31T', 608548, 4876776, 44.0361, 4.35472, 120),
('30320', 'Seynes', '31T', 602866, 4885665, 44.1169, 4.28556, 260),
('30321', 'Sommières', '31T', 587596, 4848384, 43.7833, 4.08862, 40),
('30322', 'Soudorgues', '31T', 566360, 4879488, 44.0656, 3.82861, 480),
('30323', 'Soustelle', '31T', 581026, 4891840, 44.1753, 4.01361, 310),
('30324', 'Souvignargues', '31T', 590210, 4851783, 43.8136, 4.12167, 100),
('30325', 'Sumène', '31T', 557322, 4869869, 43.9797, 3.71472, 200),
('30326', 'Tavel', '31T', 636381, 4874607, 44.0119, 4.70139, 100),
('30327', 'Tharaux', '31T', 604757, 4899490, 44.2411, 4.31194, 150),
('30328', 'Théziers', '31T', 630317, 4862386, 43.9031, 4.62278, 49),
('30329', 'Thoiras', '31T', 574277, 4879819, 44.0678, 3.9275, 220),
('30330', 'Tornac', '31T', 579793, 4874422, 44.0186, 3.99556, 140),
('30331', 'Tresques', '31T', 627046, 4885100, 44.1081, 4.5875, 73),
('30332', 'Trèves', '31T', 531249, 4880740, 44.0792, 3.39028, 570),
('30333', 'Uchaud', '31T', 602193, 4845568, 43.7561, 4.26944, 20),
('30334', 'Uzès', '31T', 613886, 4874520, 44.015, 4.42084, 120),
('30335', 'Vabres', '31T', 571206, 4875774, 44.0317, 3.88861, 311),
('30336', 'Vallabrègues', '31T', 630874, 4856748, 43.8522, 4.62833, 11),
('30337', 'Vallabrix', '31T', 618536, 4879725, 44.0611, 4.48, 150),
('30338', 'Vallérargues', '31T', 608327, 4887512, 44.1328, 4.35417, 280),
('30339', 'Valleraugue', '31T', 551420, 4880959, 44.08, 3.64222, 350),
('30340', 'Valliguières', '31T', 626659, 4873981, 44.0081, 4.58001, 125),
('30341', 'Vauvert', '31T', 602816, 4838511, 43.6925, 4.27583, 30),
('30342', 'Vénéjan', '31T', 632471, 4895084, 44.1969, 4.65778, 84),
('30343', 'Verfeuil', '31T', 615698, 4891773, 44.17, 4.44722, 120),
('30344', 'Vergèze', '31T', 598210, 4844151, 43.7439, 4.21972, 30),
('30345', 'La Vernarède', '31T', 580428, 4904361, 44.2881, 4.00806, 372),
('30346', 'Vers-Pont-du-Gard', '31T', 622199, 4869391, 43.9675, 4.52333, 55),
('30347', 'Vestric-et-Candiac', '31T', 601458, 4843922, 43.7414, 4.26001, 17),
('30348', 'Vézénobres', '31T', 591095, 4878363, 44.0528, 4.13722, 160),
('30349', 'Vic-le-Fesq', '31T', 586980, 4857849, 43.8686, 4.0825, 60),
('30350', 'Le Vigan', '31T', 548425, 4870878, 43.9894, 3.60389, 233),
('30351', 'Villeneuve-lès-Avignon', '31T', 644262, 4869712, 43.9664, 4.79833, 30),
('30352', 'Villevieille', '31T', 588258, 4849041, 43.7892, 4.09695, 90),
('30353', 'Vissec', '31T', 536785, 4860961, 43.9008, 3.45805, 460),
('30354', 'Montagnac', '31T', 592053, 4865509, 43.9369, 4.14695, 180),
('30355', 'Saint-Paul-les-Fonts', '31T', 629324, 4882335, 44.0828, 4.61528, 86),
('30356', 'Rodilhan', '31T', 614914, 4853706, 43.8275, 4.42916, 40),
('31001', 'Agassac', '31T', 328896, 4804194, 43.3711, 0.888052, 300),
('31002', 'Aignes', '31T', 385558, 4797318, 43.32, 1.58861, 300),
('31003', 'Aigrefeuille', '31T', 386138, 4824896, 43.5683, 1.59001, 220),
('31004', 'Ayguesvives', '31T', 386389, 4810543, 43.4392, 1.59611, 172),
('31005', 'Alan', '31T', 332718, 4788417, 43.23, 0.939998, 373),
('31006', 'Albiac', '31T', 401500, 4822925, 43.5528, 1.78055, 240),
('31007', 'Ambax', '31T', 332736, 4803727, 43.3678, 0.935562, 270),
('31008', 'Anan', '31T', 323134, 4802582, 43.3553, 0.817502, 210),
('31009', 'Antichan-de-Frontignes', '31T', 309615, 4760498, 42.9733, 0.665283, 617),
('31010', 'Antignac', '31T', 303847, 4744267, 42.8258, 0.600283, 610),
('31011', 'Arbas', '31T', 329475, 4762476, 42.9958, 0.908058, 400),
('31012', 'Arbon', '31T', 316360, 4763525, 43.0022, 0.74694, 600),
('31013', 'Ardiège', '31T', 308151, 4771345, 43.0706, 0.643613, 406),
('31014', 'Arguenos', '31T', 314478, 4760118, 42.9711, 0.724999, 600),
('31015', 'Argut-Dessous', '31T', 313663, 4750971, 42.8886, 0.718054, 728),
('31017', 'Arlos', '31T', 312151, 4751290, 42.8911, 0.699445, 520),
('31018', 'Arnaud-Guilhem', '31T', 329137, 4778844, 43.1431, 0.898886, 410),
('31019', 'Artigue', '31T', 305504, 4745023, 42.8331, 0.620276, 1220),
('31020', 'Aspet', '31T', 321016, 4764821, 43.015, 0.803606, 480),
('31021', 'Aspret-Sarrat', '31T', 314294, 4770866, 43.0678, 0.719165, 420),
('31022', 'Aucamville', '31T', 373552, 4835769, 43.6642, 1.43166, 133),
('31023', 'Aulon', '31T', 322929, 4784374, 43.1914, 0.82083, 340),
('31024', 'Auragne', '31T', 379189, 4805267, 43.3906, 1.50834, 230),
('31025', 'Aureville', '31T', 375013, 4815527, 43.4822, 1.45444, 200),
('31026', 'Auriac-sur-Vendinelle', '31T', 405248, 4819755, 43.5247, 1.8275, 200),
('31027', 'Auribail', '31T', 368915, 4801200, 43.3522, 1.3825, 286),
('31028', 'Aurignac', '31T', 328037, 4787175, 43.2178, 0.882779, 390),
('31029', 'Aurin', '31T', 393641, 4821255, 43.5367, 1.68361, 240),
('31030', 'Ausseing', '31T', 338831, 4779688, 43.1528, 1.01778, 459),
('31031', 'Ausson', '31T', 304254, 4772814, 43.0828, 0.595272, 410),
('31032', 'Aussonne', '31T', 364480, 4838076, 43.6833, 1.31861, 144),
('31033', 'Auterive', '31T', 376865, 4801267, 43.3542, 1.48055, 190),
('31034', 'Auzas', '31T', 327924, 4781807, 43.1694, 0.883059, 350),
('31035', 'Auzeville-Tolosane', '31T', 377133, 4820858, 43.5306, 1.47944, 168),
('31036', 'Auzielle', '31T', 384158, 4821998, 43.5419, 1.56611, 200),
('31037', 'Avignonet-Lauragais', '31T', 401758, 4802063, 43.365, 1.7875, 200),
('31038', 'Azas', '31T', 393348, 4842274, 43.7258, 1.67583, 200),
('31039', 'Bachas', '31T', 332646, 4790085, 43.245, 0.938606, 280),
('31040', 'Bachos', '31T', 305525, 4752185, 42.8975, 0.618055, 680),
('31041', 'Bagiry', '31T', 306256, 4761179, 42.9786, 0.62389, 459),
('31042', 'Bagnères-de-Luchon', '31T', 303218, 4740550, 42.7922, 0.593892, 630),
('31043', 'Balesta', '31T', 302444, 4786081, 43.2017, 0.568327, 402),
('31044', 'Balma', '31T', 378799, 4829777, 43.6111, 1.49806, 151),
('31045', 'Barbazan', '31T', 306611, 4767313, 43.0339, 0.626115, 480),
('31046', 'Baren', '31T', 305502, 4748975, 42.8686, 0.618885, 880),
('31047', 'Bax', '31T', 361066, 4787438, 43.2269, 1.28917, 310),
('31048', 'Baziège', '31T', 387924, 4812276, 43.455, 1.61472, 160),
('31049', 'Bazus', '31T', 380572, 4843694, 43.7367, 1.51694, 176),
('31050', 'Beauchalot', '31T', 326667, 4775048, 43.1083, 0.869719, 320),
('31051', 'Beaufort', '31T', 347303, 4813598, 43.4597, 1.1125, 274),
('31052', 'Beaumont-sur-Lèze', '31T', 366952, 4804448, 43.3811, 1.3575, 185),
('31053', 'Beaupuy', '31T', 383441, 4833706, 43.6472, 1.55472, 158),
('31054', 'Beauteville', '31T', 397833, 4800084, 43.3467, 1.73944, 250),
('31055', 'Beauville', '31T', 401013, 4814200, 43.4742, 1.77611, 230),
('31056', 'Beauzelle', '31T', 369353, 4836405, 43.6692, 1.37945, 139),
('31057', 'Belberaud', '31T', 384361, 4818137, 43.5072, 1.56945, 181),
('31058', 'Belbèze-de-Lauragais', '31T', 383090, 4810907, 43.4419, 1.55528, 260),
('31059', 'Belbèze-en-Comminges', '31T', 339638, 4777478, 43.1331, 1.02834, 386),
('31060', 'Bélesta-en-Lauragais', '31T', 404783, 4810659, 43.4428, 1.82333, 250),
('31061', 'Bellegarde-Sainte-Marie', '31T', 347931, 4837290, 43.6731, 1.11361, 230),
('31062', 'Bellesserre', '31T', 347808, 4850535, 43.7922, 1.10834, 240),
('31063', 'Benque', '31T', 331043, 4791854, 43.2606, 0.918331, 360),
('31064', 'Benque-Dessous-et-Dessus', '31T', 300090, 4743233, 42.8156, 0.554727, 1000),
('31065', 'Bérat', '31T', 352432, 4804472, 43.3786, 1.17833, 246),
('31066', 'Bessières', '31T', 388118, 4850692, 43.8008, 1.60916, 106),
('31067', 'Bezins-Garraux', '31T', 312078, 4756077, 42.9342, 0.696948, 720),
('31068', 'Billière', '31T', 297874, 4742866, 42.8117, 0.527778, 1080),
('31069', 'Blagnac', '31T', 370625, 4832708, 43.6361, 1.3961, 140),
('31070', 'Blajan', '31T', 308858, 4792473, 43.2608, 0.644995, 360),
('31071', 'Bois-de-la-Pierre', '31T', 350280, 4800785, 43.345, 1.15278, 232),
('31072', 'Boissède', '31T', 323780, 4808369, 43.4075, 0.823605, 230),
('31073', 'Bondigoux', '31T', 382770, 4855382, 43.8422, 1.54167, 102),
('31074', 'Bonrepos-Riquet', '31T', 389076, 4837005, 43.6778, 1.62389, 200),
('31075', 'Bonrepos-sur-Aussonnelle', '31T', 350532, 4823311, 43.5478, 1.14972, 220),
('31076', 'Bordes-de-Rivière', '31T', 307612, 4775497, 43.1078, 0.635561, 390),
('31077', 'Le Born', '31T', 383212, 4860251, 43.8861, 1.5461, 210),
('31078', 'Boudrac', '31T', 299093, 4785036, 43.1914, 0.527498, 498),
('31079', 'Bouloc', '31T', 371767, 4848919, 43.7822, 1.4064, 196),
('31080', 'Boulogne-sur-Gesse', '31T', 309088, 4795801, 43.2908, 0.646672, 330),
('31081', 'Bourg-d''Oueil', '31T', 295717, 4748302, 42.86, 0.499447, 1340),
('31082', 'Bourg-Saint-Bernard', '31T', 396091, 4828654, 43.6036, 1.7125, 223),
('31083', 'Boussan', '31T', 328785, 4789996, 43.2433, 0.891107, 300),
('31084', 'Boussens', '31T', 335258, 4782397, 43.1764, 0.973053, 276),
('31085', 'Boutx', '31T', 313436, 4754311, 42.9186, 0.714166, 700),
('31086', 'Bouzin', '31T', 328125, 4784426, 43.1931, 0.884717, 340),
('31087', 'Bragayrac', '31T', 343971, 4816299, 43.4833, 1.07056, 272),
('31088', 'Brax', '31T', 358078, 4830863, 43.6172, 1.24111, 190),
('31089', 'Bretx', '31T', 354932, 4840900, 43.7069, 1.19944, 180),
('31090', 'Brignemont', '31T', 338217, 4849712, 43.7828, 0.989443, 250),
('31091', 'Bruguières', '31T', 372101, 4843049, 43.7294, 1.41194, 125),
('31092', 'Burgalays', '31T', 306465, 4751695, 42.8933, 0.629728, 660),
('31093', 'Le Burgaud', '31T', 352106, 4850777, 43.7953, 1.16166, 167),
('31094', 'Buzet-sur-Tarn', '31T', 390046, 4848284, 43.7794, 1.63362, 109),
('31095', 'Cabanac-Cazaux', '31T', 315871, 4767212, 43.0353, 0.739727, 400),
('31096', 'Cabanac-Séguenville', '31T', 341981, 4850949, 43.7947, 1.03583, 280),
('31097', 'Le Cabanial', '31T', 408961, 4818716, 43.5158, 1.87361, 248),
('31098', 'Cadours', '31T', 342997, 4843732, 43.73, 1.05056, 230),
('31099', 'Caignac', '31T', 395561, 4797280, 43.3211, 1.71195, 250),
('31100', 'Calmont', '31T', 389103, 4793680, 43.2878, 1.63305, 210),
('31101', 'Cambernard', '31T', 352869, 4815172, 43.475, 1.18084, 220),
('31102', 'Cambiac', '31T', 402294, 4815785, 43.4886, 1.79166, 249),
('31103', 'Canens', '31T', 364381, 4786198, 43.2164, 1.33028, 350),
('31104', 'Capens', '31T', 358836, 4799582, 43.3358, 1.25861, 190),
('31105', 'Caragoudes', '31T', 395215, 4817095, 43.4994, 1.70388, 220),
('31106', 'Caraman', '31T', 399802, 4820420, 43.53, 1.76, 280),
('31107', 'Carbonne', '31T', 356123, 4794886, 43.2931, 1.22638, 204),
('31108', 'Cardeilhac', '31T', 311778, 4785476, 43.1986, 0.683329, 440),
('31109', 'Cassagnabère-Tournas', '31T', 320598, 4788479, 43.2278, 0.790831, 380),
('31110', 'Cassagne', '31T', 336539, 4776471, 43.1233, 0.990553, 323),
('31111', 'Castagnac', '31T', 366371, 4787517, 43.2286, 1.35445, 307),
('31112', 'Castagnède', '31T', 335499, 4768964, 43.0556, 0.979998, 323),
('31113', 'Castanet-Tolosan', '31T', 378789, 4819316, 43.5169, 1.50028, 170),
('31114', 'Castelbiague', '31T', 331013, 4766975, 43.0367, 0.92555, 366),
('31115', 'Castelgaillard', '31T', 329907, 4802316, 43.3544, 0.901106, 270),
('31116', 'Castelginest', '31T', 373504, 4839133, 43.6944, 1.43028, 129),
('31117', 'Castelmaurou', '31T', 381777, 4837192, 43.6783, 1.53333, 218),
('31118', 'Castelnau-d''Estrétefonds', '31T', 368017, 4849301, 43.785, 1.35972, 120),
('31119', 'Castelnau-Picampeau', '31T', 339192, 4796810, 43.3069, 1.01722, 370),
('31120', 'Le Castéra', '31T', 349902, 4837246, 43.6731, 1.13806, 254),
('31121', 'Castéra-Vignoles', '31T', 319858, 4793747, 43.275, 0.780003, 363),
('31122', 'Casties-Labrande', '31T', 338472, 4799698, 43.3328, 1.0075, 310),
('31123', 'Castillon-de-Larboust', '31T', 298421, 4742139, 42.8053, 0.534722, 960),
('31124', 'Castillon-de-Saint-Martory', '31T', 325928, 4777999, 43.1347, 0.859717, 390),
('31125', 'Cathervielle', '31T', 296152, 4743040, 42.8128, 0.506672, 1220),
('31126', 'Caubiac', '31T', 345892, 4842152, 43.7164, 1.08694, 270),
('31127', 'Caubous', '31T', 297734, 4747377, 42.8522, 0.524447, 1260),
('31128', 'Caujac', '31T', 375921, 4795174, 43.2992, 1.47028, 210),
('31129', 'Cazaril-Laspènes', '31T', 301949, 4741481, 42.8003, 0.578062, 1000),
('31130', 'Cazaril-Tambourès', '31T', 300541, 4784315, 43.1853, 0.545562, 460),
('31131', 'Cazaunous', '31T', 315183, 4761889, 42.9872, 0.733051, 560),
('31132', 'Cazaux-Layrisse', '31T', 304752, 4748934, 42.8681, 0.609726, 660),
('31133', 'Cazeaux-de-Larboust', '31T', 298015, 4742244, 42.8061, 0.529723, 980),
('31134', 'Cazeneuve-Montaut', '31T', 326043, 4783367, 43.1831, 0.859444, 370),
('31135', 'Cazères', '31T', 344503, 4785606, 43.2072, 1.08583, 243),
('31136', 'Cépet', '31T', 373823, 4845331, 43.7503, 1.43278, 128),
('31137', 'Cessales', '31T', 398265, 4812297, 43.4567, 1.7425, 215),
('31138', 'Charlas', '31T', 312704, 4788754, 43.2283, 0.693606, 390),
('31139', 'Chaum', '31T', 308782, 4756662, 42.9386, 0.656387, 480),
('31140', 'Chein-Dessus', '31T', 327707, 4765143, 43.0194, 0.885559, 418),
('31141', 'Ciadoux', '31T', 316409, 4792172, 43.26, 0.738056, 350),
('31142', 'Cier-de-Luchon', '31T', 303972, 4747876, 42.8583, 0.600554, 640),
('31143', 'Cier-de-Rivière', '31T', 307317, 4770658, 43.0642, 0.633616, 450),
('31144', 'Cierp-Gaud', '31T', 307172, 4754238, 42.9164, 0.637505, 520),
('31145', 'Cintegabelle', '31T', 380948, 4796534, 43.3122, 1.53194, 200),
('31146', 'Cirès', '31T', 297219, 4747639, 42.8544, 0.518055, 1280),
('31147', 'Clarac', '31T', 306856, 4774376, 43.0975, 0.626668, 395),
('31148', 'Clermont-le-Fort', '31T', 373257, 4812968, 43.4589, 1.43333, 210),
('31149', 'Colomiers', '31T', 366067, 4830081, 43.6117, 1.34027, 182),
('31150', 'Cornebarrieu', '31T', 364988, 4834393, 43.6503, 1.32583, 149),
('31151', 'Corronsac', '31T', 378478, 4814538, 43.4739, 1.4975, 230),
('31152', 'Coueilles', '31T', 328812, 4801757, 43.3492, 0.887777, 220),
('31153', 'Couladère', '31T', 344893, 4784887, 43.2008, 1.09083, 246),
('31155', 'Couret', '31T', 322361, 4768614, 43.0494, 0.818891, 400),
('31156', 'Cox', '31T', 342431, 4847264, 43.7617, 1.0425, 296),
('31157', 'Cugnaux', '31T', 366330, 4821866, 43.5378, 1.34556, 165),
('31158', 'Cuguron', '31T', 300174, 4774908, 43.1006, 0.544441, 520),
('31159', 'Le Cuing', '31T', 305719, 4779719, 43.1453, 0.610838, 500),
('31160', 'Daux', '31T', 360612, 4839483, 43.6953, 1.27027, 177),
('31161', 'Deyme', '31T', 380983, 4815110, 43.4794, 1.52833, 220),
('31162', 'Donneville', '31T', 382609, 4814279, 43.4722, 1.54861, 180),
('31163', 'Drémil-Lafage', '31T', 387176, 4827964, 43.5961, 1.60222, 200),
('31164', 'Drudas', '31T', 347068, 4846570, 43.7564, 1.10027, 200),
('31165', 'Eaunes', '31T', 366722, 4808742, 43.4197, 1.35362, 212),
('31166', 'Empeaux', '31T', 345507, 4821541, 43.5308, 1.08805, 310),
('31167', 'Encausse-les-Thermes', '31T', 315915, 4768877, 43.0503, 0.739717, 379),
('31168', 'Eoux', '31T', 328510, 4793368, 43.2736, 0.886672, 307),
('31169', 'Escalquens', '31T', 383843, 4819381, 43.5183, 1.56277, 175),
('31170', 'Escanecrabe', '31T', 317463, 4793626, 43.2733, 0.75055, 350),
('31171', 'Espanès', '31T', 377604, 4812208, 43.4528, 1.48722, 270),
('31172', 'Esparron', '31T', 321993, 4792579, 43.265, 0.806673, 365),
('31173', 'Esperce', '31T', 370487, 4795090, 43.2975, 1.40333, 320),
('31174', 'Estadens', '31T', 324674, 4767011, 43.0356, 0.847775, 470),
('31175', 'Estancarbon', '31T', 319925, 4774975, 43.1061, 0.786942, 376),
('31176', 'Esténos', '31T', 307335, 4757629, 42.9469, 0.638335, 470),
('31177', 'Eup', '31T', 311518, 4755506, 42.9289, 0.690283, 540),
('31178', 'Fabas', '31T', 329414, 4797945, 43.315, 0.896385, 330),
('31179', 'Le Faget', '31T', 405137, 4824570, 43.5681, 1.82528, 260),
('31180', 'Falga', '31T', 407893, 4814504, 43.4778, 1.86111, 260),
('31181', 'Le Fauga', '31T', 361879, 4806247, 43.3964, 1.29445, 186),
('31182', 'Fenouillet', '31T', 370694, 4837428, 43.6786, 1.39583, 125),
('31183', 'Figarol', '31T', 328884, 4772368, 43.0847, 0.897774, 399),
('31184', 'Flourens', '31T', 384036, 4827926, 43.5953, 1.56334, 200),
('31185', 'Folcarde', '31T', 402316, 4806405, 43.4042, 1.79361, 260),
('31186', 'Fonbeauzard', '31T', 374953, 4837563, 43.6806, 1.44862, 132),
('31187', 'Fonsorbes', '31T', 357123, 4821809, 43.5356, 1.23167, 200),
('31188', 'Fontenilles', '31T', 353958, 4823914, 43.5539, 1.19195, 200),
('31189', 'Forgues', '31T', 341907, 4810698, 43.4325, 1.04667, 290),
('31190', 'Fos', '31T', 315050, 4749359, 42.8744, 0.735558, 560),
('31191', 'Fougaron', '31T', 331401, 4761564, 42.9881, 0.931945, 500),
('31192', 'Fourquevaux', '31T', 388176, 4817949, 43.5061, 1.61667, 200),
('31193', 'Le Fousseret', '31T', 343091, 4793879, 43.2814, 1.06611, 290),
('31194', 'Francarville', '31T', 398912, 4826882, 43.5881, 1.74778, 210),
('31195', 'Francazal', '31T', 336963, 4764855, 43.0189, 0.999167, 439),
('31196', 'Francon', '31T', 335596, 4791680, 43.26, 0.974444, 350),
('31197', 'Franquevielle', '31T', 299320, 4778947, 43.1367, 0.532496, 520),
('31198', 'Le Fréchet', '31T', 332424, 4783793, 43.1883, 0.937783, 372),
('31199', 'Fronsac', '31T', 308212, 4758191, 42.9522, 0.648883, 468),
('31200', 'Frontignan-de-Comminges', '31T', 308995, 4760238, 42.9708, 0.657775, 480),
('31201', 'Frontignan-Savès', '31T', 331737, 4807055, 43.3975, 0.922217, 200),
('31202', 'Fronton', '31T', 370488, 4855610, 43.8422, 1.38889, 140),
('31203', 'Frouzins', '31T', 364596, 4819401, 43.5153, 1.32472, 171),
('31204', 'Fustignac', '31T', 336447, 4796073, 43.2997, 0.983617, 360),
('31205', 'Gagnac-sur-Garonne', '31T', 369195, 4839803, 43.6997, 1.37666, 115),
('31206', 'Gaillac-Toulza', '31T', 375965, 4790235, 43.2547, 1.47194, 233),
('31207', 'Galié', '31T', 307087, 4762514, 42.9908, 0.633612, 480),
('31208', 'Ganties', '31T', 323469, 4770314, 43.065, 0.831946, 390),
('31209', 'Garac', '31T', 346009, 4839433, 43.6919, 1.08917, 240),
('31210', 'Gardouch', '31T', 393476, 4805088, 43.3911, 1.68472, 200),
('31211', 'Gargas', '31T', 376656, 4846111, 43.7578, 1.46778, 160),
('31212', 'Garidech', '31T', 384188, 4840576, 43.7092, 1.5625, 178),
('31213', 'Garin', '31T', 296941, 4742831, 42.8111, 0.516389, 1120),
('31215', 'Gauré', '31T', 389609, 4829961, 43.6144, 1.63194, 226),
('31216', 'Gémil', '31T', 386612, 4843589, 43.7367, 1.59195, 198),
('31217', 'Génos', '31T', 310519, 4763684, 43.0022, 0.67528, 534),
('31218', 'Gensac-de-Boulogne', '31T', 304186, 4791649, 43.2522, 0.587775, 420),
('31219', 'Gensac-sur-Garonne', '31T', 348300, 4786785, 43.2186, 1.13223, 240),
('31220', 'Gibel', '31T', 392876, 4794206, 43.2931, 1.67944, 301),
('31221', 'Gouaux-de-Larboust', '31T', 294640, 4741139, 42.7953, 0.488888, 1320),
('31222', 'Gouaux-de-Luchon', '31T', 305628, 4747798, 42.8581, 0.620834, 940),
('31223', 'Goudex', '31T', 334244, 4804647, 43.3764, 0.953884, 270),
('31224', 'Gourdan-Polignan', '31T', 302566, 4771566, 43.0711, 0.574997, 434),
('31225', 'Goutevernisse', '31T', 351444, 4786067, 43.2128, 1.17111, 264),
('31226', 'Gouzens', '31T', 352801, 4783075, 43.1861, 1.18861, 290),
('31227', 'Goyrans', '31T', 373237, 4815499, 43.4817, 1.4325, 272),
('31228', 'Gragnague', '31T', 385904, 4837522, 43.6819, 1.58444, 145),
('31229', 'Gratens', '31T', 347138, 4798324, 43.3222, 1.11472, 283),
('31230', 'Gratentour', '31T', 373764, 4842246, 43.7225, 1.43277, 174),
('31231', 'Grazac', '31T', 374798, 4796614, 43.3119, 1.45611, 246),
('31232', 'Grenade', '31T', 362671, 4848113, 43.7733, 1.29361, 110),
('31233', 'Grépiac', '31T', 374517, 4806957, 43.405, 1.45028, 184),
('31234', 'Le Grès', '31T', 346989, 4843114, 43.7253, 1.10028, 280),
('31235', 'Guran', '31T', 305229, 4751360, 42.89, 0.614719, 640),
('31236', 'Herran', '31T', 329978, 4759932, 42.9731, 0.914998, 805),
('31237', 'His', '31T', 334603, 4770282, 43.0672, 0.96861, 320),
('31238', 'Huos', '31T', 304309, 4772349, 43.0786, 0.596111, 425),
('31239', 'L''Isle-en-Dodon', '31T', 324786, 4805472, 43.3817, 0.836949, 200),
('31240', 'Issus', '31T', 379006, 4808850, 43.4228, 1.50528, 220),
('31241', 'Izaut-de-l''Hôtel', '31T', 317128, 4765109, 43.0167, 0.755836, 420),
('31242', 'Jurvielle', '31T', 294629, 4743826, 42.8194, 0.487775, 1260),
('31243', 'Juzes', '31T', 401963, 4811563, 43.4506, 1.78833, 240),
('31244', 'Juzet-de-Luchon', '31T', 304541, 4742303, 42.8083, 0.609447, 625),
('31245', 'Juzet-d''Izaut', '31T', 317303, 4760629, 42.9764, 0.759448, 580),
('31246', 'Labarthe-Inard', '31T', 324089, 4775052, 43.1078, 0.838056, 325),
('31247', 'Labarthe-Rivière', '31T', 310536, 4772482, 43.0814, 0.672496, 395),
('31248', 'Labarthe-sur-Lèze', '31T', 370704, 4812306, 43.4525, 1.40194, 165),
('31249', 'Labastide-Beauvoir', '31T', 392131, 4815293, 43.4828, 1.66611, 252),
('31250', 'Labastide-Clermont', '31T', 347813, 4801272, 43.3489, 1.12223, 292),
('31251', 'Labastide-Paumès', '31T', 332855, 4800359, 43.3375, 0.938056, 260),
('31252', 'Labastide-Saint-Sernin', '31T', 376978, 4844161, 43.7403, 1.47222, 130),
('31253', 'Labastidette', '31T', 358186, 4813639, 43.4622, 1.24695, 187),
('31254', 'Labège', '31T', 381262, 4820722, 43.53, 1.53056, 150),
('31255', 'Labroquère', '31T', 303866, 4767947, 43.0389, 0.592225, 460),
('31256', 'Labruyère-Dorsa', '31T', 376298, 4807171, 43.4072, 1.47222, 240),
('31258', 'Lacaugne', '31T', 359760, 4794131, 43.2869, 1.27139, 302),
('31259', 'Lacroix-Falgarde', '31T', 371613, 4817535, 43.4997, 1.41194, 153),
('31260', 'Laffite-Toupière', '31T', 329810, 4781358, 43.1658, 0.906384, 380),
('31261', 'Lafitte-Vigordane', '31T', 351001, 4795707, 43.2994, 1.16305, 230),
('31262', 'Lagarde', '31T', 395671, 4800056, 43.3461, 1.71278, 280),
('31263', 'Lagardelle-sur-Lèze', '31T', 369560, 4807792, 43.4117, 1.38889, 183),
('31264', 'Lagrâce-Dieu', '31T', 372062, 4799720, 43.3394, 1.42167, 200),
('31265', 'Lagraulet-Saint-Nicolas', '31T', 345335, 4850931, 43.7953, 1.0775, 271),
('31266', 'Lahage', '31T', 343255, 4811624, 43.4411, 1.06305, 330),
('31267', 'Lahitère', '31T', 353141, 4777852, 43.1392, 1.19417, 485),
('31268', 'Lalouret-Laffiteau', '31T', 313455, 4784041, 43.1861, 0.704438, 410),
('31269', 'Lamasquère', '31T', 358122, 4815955, 43.4831, 1.24555, 184),
('31270', 'Landorthe', '31T', 319843, 4777848, 43.1319, 0.785003, 367),
('31271', 'Lanta', '31T', 391464, 4824037, 43.5614, 1.65611, 250),
('31272', 'Lapeyrère', '31T', 363140, 4785112, 43.2064, 1.31527, 370),
('31273', 'Lapeyrouse-Fossat', '31T', 380596, 4838787, 43.6925, 1.51833, 200),
('31274', 'Larcan', '31T', 314736, 4782956, 43.1767, 0.720553, 430),
('31275', 'Laréole', '31T', 340893, 4844677, 43.7381, 1.02417, 200),
('31276', 'Larroque', '31T', 305744, 4785337, 43.1958, 0.609173, 340),
('31277', 'Lasserre', '31T', 352374, 4833548, 43.6403, 1.16972, 170),
('31278', 'Latoue', '31T', 320021, 4782042, 43.1697, 0.785827, 350),
('31279', 'Latour', '31T', 360420, 4784550, 43.2008, 1.28195, 360),
('31280', 'Latrape', '31T', 361129, 4789412, 43.2447, 1.28945, 354),
('31281', 'Launac', '31T', 353501, 4845036, 43.7439, 1.18056, 175),
('31282', 'Launaguet', '31T', 375659, 4836995, 43.6756, 1.4575, 140),
('31283', 'Lautignac', '31T', 342606, 4805002, 43.3814, 1.05694, 330),
('31284', 'Lauzerville', '31T', 384140, 4823541, 43.5558, 1.56556, 210),
('31285', 'Lavalette', '31T', 386832, 4832784, 43.6394, 1.59695, 220),
('31286', 'Lavelanet-de-Comminges', '31T', 347309, 4790912, 43.2556, 1.11889, 246),
('31287', 'Lavernose-Lacasse', '31T', 359201, 4806241, 43.3958, 1.26139, 190),
('31288', 'Layrac-sur-Tarn', '31T', 383896, 4854653, 43.8358, 1.55583, 111),
('31289', 'Lécussan', '31T', 296913, 4781643, 43.1603, 0.501939, 530),
('31290', 'Lège', '31T', 304850, 4749981, 42.8775, 0.610561, 620),
('31291', 'Léguevin', '31T', 357525, 4829085, 43.6011, 1.23473, 190),
('31292', 'Lescuns', '31T', 338795, 4789597, 43.2419, 1.01444, 370),
('31293', 'Lespinasse', '31T', 369950, 4840591, 43.7069, 1.38584, 122),
('31294', 'Lespiteau', '31T', 317846, 4770801, 43.0681, 0.762779, 360),
('31295', 'Lespugue', '31T', 310668, 4789397, 43.2336, 0.668334, 384),
('31296', 'Lestelle-de-Saint-Martory', '31T', 330235, 4776625, 43.1233, 0.913059, 310),
('31297', 'Lévignac', '31T', 354389, 4836529, 43.6675, 1.19389, 134),
('31298', 'Lez', '31T', 312343, 4753323, 42.9094, 0.701115, 540),
('31299', 'Lherm', '31T', 356197, 4810008, 43.4292, 1.22333, 222),
('31301', 'Lilhac', '31T', 322459, 4794882, 43.2858, 0.811668, 370),
('31302', 'Lodes', '31T', 311559, 4782457, 43.1714, 0.681665, 400),
('31303', 'Longages', '31T', 357372, 4801711, 43.3547, 1.24, 201),
('31304', 'Loubens-Lauragais', '31T', 401894, 4825265, 43.5739, 1.785, 219),
('31305', 'Loudet', '31T', 302725, 4780175, 43.1486, 0.573889, 490),
('31306', 'Lourde', '31T', 309173, 4761745, 42.9844, 0.659442, 600),
('31307', 'Lunax', '31T', 312620, 4801198, 43.3403, 0.688334, 290),
('31308', 'Luscan', '31T', 306406, 4764880, 43.0119, 0.624445, 451),
('31309', 'Lussan-Adeilhac', '31T', 332927, 4795974, 43.2981, 0.940278, 373),
('31310', 'Lux', '31T', 401649, 4810056, 43.4369, 1.78472, 240),
('31311', 'La Magdelaine-sur-Tarn', '31T', 382824, 4852110, 43.8128, 1.54306, 116),
('31312', 'Mailholas', '31T', 357776, 4789851, 43.2481, 1.24805, 290),
('31313', 'Malvezie', '31T', 311687, 4764146, 43.0067, 0.689442, 531),
('31314', 'Mancioux', '31T', 333629, 4780430, 43.1583, 0.953614, 290),
('31315', 'Mane', '31T', 333313, 4772135, 43.0836, 0.952221, 300),
('31316', 'Marignac', '31T', 308954, 4753879, 42.9136, 0.659442, 520),
('31317', 'Marignac-Lasclares', '31T', 345792, 4796626, 43.3067, 1.09861, 307),
('31318', 'Marignac-Laspeyres', '31T', 334800, 4786791, 43.2158, 0.966108, 380),
('31319', 'Marliac', '31T', 376226, 4787207, 43.2275, 1.47583, 330),
('31320', 'Marquefave', '31T', 357936, 4797471, 43.3167, 1.24805, 200),
('31321', 'Marsoulas', '31T', 337241, 4774633, 43.1069, 0.999716, 384),
('31322', 'Martisserre', '31T', 328392, 4806522, 43.3919, 0.881106, 310),
('31323', 'Martres-de-Rivière', '31T', 308112, 4772396, 43.08, 0.642772, 405),
('31324', 'Martres-Tolosane', '31T', 338482, 4784974, 43.2003, 1.01194, 265),
('31325', 'Mascarville', '31T', 399662, 4823076, 43.5539, 1.75777, 238),
('31326', 'Massabrac', '31T', 367809, 4787211, 43.2261, 1.37222, 280),
('31327', 'Mauran', '31T', 340102, 4783763, 43.1897, 1.03222, 250),
('31328', 'Mauremont', '31T', 393165, 4812468, 43.4575, 1.67944, 220),
('31329', 'Maurens', '31T', 402572, 4813251, 43.4658, 1.79555, 240),
('31330', 'Mauressac', '31T', 373089, 4798003, 43.3242, 1.43473, 220),
('31331', 'Maureville', '31T', 395237, 4819903, 43.5247, 1.70362, 190),
('31332', 'Mauvaisin', '31T', 382538, 4801135, 43.3539, 1.55056, 250),
('31333', 'Mauvezin', '31T', 332244, 4805684, 43.3853, 0.928894, 210),
('31334', 'Mauzac', '31T', 361741, 4803905, 43.3753, 1.29334, 185),
('31335', 'Mayrègne', '31T', 299005, 4746568, 42.8453, 0.540277, 1200),
('31336', 'Mazères-sur-Salat', '31T', 335374, 4777857, 43.1356, 0.975829, 285),
('31337', 'Melles', '31T', 317006, 4748659, 42.8686, 0.759716, 719),
('31338', 'Menville', '31T', 354484, 4837792, 43.6789, 1.19472, 130),
('31339', 'Mérenvielle', '31T', 351518, 4832332, 43.6292, 1.15945, 180),
('31340', 'Mervilla', '31T', 376616, 4818398, 43.5083, 1.47361, 270),
('31341', 'Merville', '31T', 362892, 4842522, 43.7231, 1.29778, 155),
('31342', 'Milhas', '31T', 321323, 4761819, 42.9881, 0.808332, 520),
('31343', 'Mirambeau', '31T', 327275, 4807723, 43.4025, 0.866944, 304),
('31344', 'Miramont-de-Comminges', '31T', 316592, 4773830, 43.095, 0.74639, 351),
('31345', 'Miremont', '31T', 371722, 4803152, 43.3703, 1.41667, 201),
('31346', 'Mirepoix-sur-Tarn', '31T', 385420, 4852374, 43.8156, 1.57527, 106),
('31347', 'Molas', '31T', 320566, 4807682, 43.4006, 0.784165, 230),
('31348', 'Moncaup', '31T', 312867, 4760903, 42.9778, 0.704996, 560),
('31349', 'Mondavezan', '31T', 340890, 4789424, 43.2408, 1.04028, 300),
('31350', 'Mondilhan', '31T', 314191, 4796061, 43.2944, 0.709438, 370),
('31351', 'Mondonville', '31T', 361991, 4836861, 43.6719, 1.28805, 180),
('31352', 'Mondouzil', '31T', 383639, 4832222, 43.6339, 1.55749, 200),
('31353', 'Monès', '31T', 340940, 4808807, 43.4153, 1.03528, 270),
('31354', 'Monestrol', '31T', 392406, 4798687, 43.3333, 1.67277, 250),
('31355', 'Mons', '31T', 385032, 4829791, 43.6122, 1.57527, 220),
('31356', 'Montaigut-sur-Save', '31T', 357583, 4839207, 43.6922, 1.23278, 124),
('31357', 'Montastruc-de-Salies', '31T', 328531, 4766389, 43.0308, 0.895282, 390),
('31358', 'Montastruc-la-Conseillère', '31T', 386622, 4841552, 43.7183, 1.5925, 236),
('31359', 'Montastruc-Savès', '31T', 339760, 4802723, 43.3603, 1.0225, 300),
('31360', 'Montauban-de-Luchon', '31T', 304537, 4740574, 42.7928, 0.609997, 640),
('31361', 'Montaut', '31T', 362146, 4801705, 43.3556, 1.29889, 270),
('31362', 'Montberaud', '31T', 349296, 4779788, 43.1558, 1.14639, 400),
('31363', 'Montbernard', '31T', 319488, 4796813, 43.3025, 0.774441, 300),
('31364', 'Montberon', '31T', 377715, 4841617, 43.7175, 1.48195, 186),
('31365', 'Montbrun-Bocage', '31T', 359034, 4776524, 43.1283, 1.26694, 280),
('31366', 'Montbrun-Lauragais', '31T', 380381, 4812868, 43.4592, 1.52138, 279),
('31367', 'Montclar-de-Comminges', '31T', 339190, 4782427, 43.1775, 1.02139, 360),
('31368', 'Montclar-Lauragais', '31T', 395944, 4801717, 43.3611, 1.71583, 250),
('31369', 'Mont-de-Galié', '31T', 308238, 4762327, 42.9894, 0.647783, 720),
('31370', 'Montégut-Bourjac', '31T', 336847, 4793996, 43.2811, 0.989162, 330),
('31371', 'Montégut-Lauragais', '31T', 412992, 4814405, 43.4775, 1.92416, 230),
('31372', 'Montespan', '31T', 325272, 4772675, 43.0867, 0.853333, 400),
('31373', 'Montesquieu-Guittaut', '31T', 319575, 4800916, 43.3394, 0.774165, 265),
('31374', 'Montesquieu-Lauragais', '31T', 389072, 4808214, 43.4186, 1.62973, 230),
('31375', 'Montesquieu-Volvestre', '31T', 356262, 4785470, 43.2083, 1.23055, 226),
('31376', 'Montgaillard-de-Salies', '31T', 331781, 4769641, 43.0608, 0.934167, 325),
('31377', 'Montgaillard-Lauragais', '31T', 394762, 4809666, 43.4325, 1.69972, 240),
('31378', 'Montgaillard-sur-Save', '31T', 315739, 4791604, 43.2547, 0.729998, 360),
('31379', 'Montgazin', '31T', 362448, 4796607, 43.3097, 1.30389, 290),
('31380', 'Montgeard', '31T', 389306, 4799200, 43.3375, 1.63444, 280),
('31381', 'Montgiscard', '31T', 384490, 4812550, 43.4569, 1.57223, 180),
('31382', 'Montgras', '31T', 342817, 4813084, 43.4542, 1.05722, 299),
('31383', 'Montjoire', '31T', 382028, 4847588, 43.7719, 1.53416, 230),
('31384', 'Montlaur', '31T', 384324, 4815978, 43.4878, 1.56945, 167),
('31385', 'Montmaurin', '31T', 308138, 4788542, 43.2253, 0.637499, 380),
('31386', 'Montoulieu-Saint-Bernard', '31T', 330225, 4788911, 43.2339, 0.909166, 340),
('31387', 'Montoussin', '31T', 338637, 4793366, 43.2758, 1.01139, 290),
('31388', 'Montpitol', '31T', 391320, 4840054, 43.7056, 1.65111, 200),
('31389', 'Montrabé', '31T', 381171, 4833345, 43.6436, 1.52666, 170),
('31390', 'Montréjeau', '31T', 302255, 4773335, 43.0869, 0.570551, 420),
('31391', 'Montsaunès', '31T', 332285, 4775401, 43.1128, 0.938614, 340),
('31392', 'Mourvilles-Basses', '31T', 395259, 4815552, 43.4856, 1.70473, 220),
('31393', 'Mourvilles-Hautes', '31T', 404308, 4808845, 43.4264, 1.81778, 290),
('31394', 'Moustajon', '31T', 303563, 4743102, 42.8153, 0.597217, 620),
('31395', 'Muret', '31T', 364654, 4813351, 43.4608, 1.32694, 169),
('31396', 'Nailloux', '31T', 388508, 4801342, 43.3567, 1.62416, 270),
('31397', 'Nénigan', '31T', 313933, 4803045, 43.3572, 0.703893, 290),
('31398', 'Nizan-Gesse', '31T', 305008, 4789619, 43.2342, 0.59861, 370),
('31399', 'Noé', '31T', 360183, 4801529, 43.3536, 1.27472, 195),
('31400', 'Nogaret', '31T', 413328, 4816036, 43.4922, 1.92806, 240),
('31401', 'Noueilles', '31T', 380386, 4808054, 43.4158, 1.5225, 219),
('31402', 'Odars', '31T', 386077, 4820021, 43.5244, 1.59027, 226),
('31403', 'Ondes', '31T', 363898, 4849045, 43.7819, 1.30861, 108),
('31404', 'Oô', '31T', 296130, 4741558, 42.7994, 0.506939, 960),
('31405', 'Ore', '31T', 308512, 4760807, 42.9758, 0.651662, 480),
('31406', 'Palaminy', '31T', 343322, 4785324, 43.2044, 1.07138, 250),
('31407', 'Paulhac', '31T', 383855, 4845920, 43.7572, 1.55722, 180),
('31408', 'Payssous', '31T', 313606, 4767211, 43.0347, 0.711945, 420),
('31409', 'Péchabou', '31T', 379409, 4817576, 43.5014, 1.50833, 210),
('31410', 'Pechbonnieu', '31T', 376592, 4840218, 43.7047, 1.46833, 206),
('31411', 'Pechbusque', '31T', 375448, 4820796, 43.5297, 1.45861, 257),
('31412', 'Péguilhan', '31T', 314031, 4798443, 43.3158, 0.706661, 320),
('31413', 'Pelleport', '31T', 348525, 4844685, 43.7397, 1.11889, 270),
('31414', 'Peyrissas', '31T', 330505, 4794707, 43.2861, 0.910829, 330),
('31415', 'Peyrouzet', '31T', 323954, 4785582, 43.2025, 0.833051, 400),
('31416', 'Peyssies', '31T', 352318, 4798209, 43.3222, 1.17861, 225),
('31417', 'Pibrac', '31T', 361715, 4831064, 43.6197, 1.28611, 180),
('31418', 'Pin-Balma', '31T', 381769, 4831638, 43.6283, 1.53445, 170),
('31419', 'Le Pin-Murelet', '31T', 339441, 4807299, 43.4014, 1.01722, 324),
('31420', 'Pinsaguel', '31T', 370034, 4818368, 43.5069, 1.39222, 151),
('31421', 'Pins-Justaret', '31T', 369327, 4815481, 43.4808, 1.38417, 161),
('31422', 'Plagne', '31T', 342390, 4780160, 43.1578, 1.06139, 390),
('31423', 'Plagnole', '31T', 342530, 4808492, 43.4128, 1.055, 320),
('31424', 'Plaisance-du-Touch', '31T', 362354, 4825064, 43.5658, 1.29555, 165),
('31425', 'Le Plan', '31T', 347224, 4781099, 43.1672, 1.12056, 261),
('31426', 'Pointis-de-Rivière', '31T', 306192, 4773314, 43.0878, 0.618886, 415),
('31427', 'Pointis-Inard', '31T', 322017, 4772791, 43.0869, 0.813334, 335),
('31428', 'Polastron', '31T', 334415, 4798747, 43.3233, 0.957775, 300),
('31429', 'Pompertuzat', '31T', 380154, 4816483, 43.4917, 1.51778, 200),
('31430', 'Ponlat-Taillebourg', '31T', 304795, 4775886, 43.1106, 0.600833, 410),
('31431', 'Portet-d''Aspet', '31T', 325946, 4756453, 42.9408, 0.866669, 860),
('31432', 'Portet-de-Luchon', '31T', 294428, 4743183, 42.8136, 0.485553, 1260),
('31433', 'Portet-sur-Garonne', '31T', 371348, 4820133, 43.5231, 1.40805, 150),
('31434', 'Poubeau', '31T', 295407, 4743216, 42.8142, 0.497504, 1238),
('31435', 'Poucharramet', '31T', 352144, 4808768, 43.4172, 1.17361, 235),
('31436', 'Pouy-de-Touges', '31T', 340999, 4800811, 43.3433, 1.03833, 260),
('31437', 'Pouze', '31T', 380893, 4810020, 43.4336, 1.52833, 255),
('31438', 'Pradère-les-Bourguets', '31T', 351162, 4834470, 43.6483, 1.15445, 137),
('31439', 'Préserville', '31T', 388861, 4820006, 43.5247, 1.62472, 220),
('31440', 'Proupiary', '31T', 326249, 4780831, 43.1603, 0.862773, 470),
('31441', 'Prunet', '31T', 397556, 4824774, 43.5689, 1.73139, 263),
('31442', 'Puydaniel', '31T', 372978, 4799332, 43.3361, 1.43305, 230),
('31443', 'Puymaurin', '31T', 318982, 4804853, 43.3747, 0.765554, 270),
('31444', 'Puysségur', '31T', 343988, 4845931, 43.75, 1.06222, 260),
('31445', 'Quint-Fonsegrives', '31T', 383418, 4825930, 43.5772, 1.55611, 173),
('31446', 'Ramonville-Saint-Agne', '31T', 376808, 4822715, 43.5472, 1.475, 162),
('31447', 'Razecueillé', '31T', 320454, 4759774, 42.9694, 0.798337, 620),
('31448', 'Rebigue', '31T', 377320, 4816349, 43.49, 1.48278, 260),
('31449', 'Régades', '31T', 314565, 4769161, 43.0525, 0.723059, 409),
('31450', 'Renneville', '31T', 396676, 4803959, 43.3814, 1.72444, 220),
('31451', 'Revel', '31T', 419370, 4812196, 43.4583, 2.00334, 208),
('31452', 'Rieucazé', '31T', 317556, 4771797, 43.0769, 0.758893, 390),
('31453', 'Rieumajou', '31T', 402109, 4807673, 43.4156, 1.79083, 240),
('31454', 'Rieumes', '31T', 347791, 4808310, 43.4122, 1.12, 280),
('31455', 'Rieux', '31T', 354032, 4790949, 43.2572, 1.20166, 218),
('31456', 'Riolas', '31T', 331108, 4801699, 43.3492, 0.916106, 338),
('31457', 'Roquefort-sur-Garonne', '31T', 335429, 4781035, 43.1642, 0.97556, 277),
('31458', 'Roques', '31T', 368829, 4818762, 43.5103, 1.37722, 156),
('31459', 'Roquesérière', '31T', 390323, 4843373, 43.7353, 1.63806, 190),
('31460', 'Roquettes', '31T', 367952, 4817545, 43.4992, 1.36667, 158),
('31461', 'Rouède', '31T', 327641, 4768819, 43.0525, 0.883613, 400),
('31462', 'Rouffiac-Tolosan', '31T', 381172, 4835876, 43.6664, 1.52612, 210),
('31463', 'Roumens', '31T', 413354, 4812795, 43.4631, 1.92889, 200),
('31464', 'Sabonnères', '31T', 343501, 4814458, 43.4667, 1.06528, 270),
('31465', 'Saccourvielle', '31T', 300771, 4743213, 42.8156, 0.563057, 1020),
('31466', 'Saiguède', '31T', 350083, 4821314, 43.5297, 1.14472, 230),
('31467', 'Saint-Alban', '31T', 372270, 4839003, 43.6931, 1.415, 129),
('31468', 'Saint-André', '31T', 325783, 4793468, 43.2739, 0.853058, 340),
('31469', 'Saint-Araille', '31T', 337235, 4802598, 43.3586, 0.991392, 310),
('31470', 'Saint-Aventin', '31T', 299334, 4742267, 42.8067, 0.545832, 940),
('31471', 'Saint-Béat', '31T', 311473, 4753871, 42.9142, 0.690281, 561),
('31472', 'Saint-Bertrand-de-Comminges', '31T', 302362, 4766848, 43.0286, 0.574167, 500),
('31473', 'Saint-Cézert', '31T', 354714, 4849362, 43.7831, 1.19445, 160),
('31474', 'Saint-Christaud', '31T', 348070, 4783580, 43.1897, 1.13028, 372),
('31475', 'Saint-Clar-de-Rivière', '31T', 355724, 4814154, 43.4664, 1.21639, 216),
('31476', 'Saint-Élix-le-Château', '31T', 349127, 4793526, 43.2794, 1.14056, 232),
('31477', 'Saint-Élix-Séglan', '31T', 325606, 4784829, 43.1961, 0.853609, 327),
('31478', 'Saint-Félix-Lauragais', '31T', 410030, 4811266, 43.4489, 1.88806, 325),
('31479', 'Saint-Ferréol-de-Comminges', '31T', 316956, 4800709, 43.3369, 0.741948, 320),
('31480', 'Sainte-Foy-d''Aigrefeuille', '31T', 387728, 4822030, 43.5428, 1.61028, 170),
('31481', 'Sainte-Foy-de-Peyrolières', '31T', 350196, 4817299, 43.4936, 1.14722, 260),
('31482', 'Saint-Frajou', '31T', 325774, 4800137, 43.3339, 0.850833, 320),
('31483', 'Saint-Gaudens', '31T', 314850, 4775513, 43.1097, 0.724441, 401),
('31484', 'Saint-Geniès-Bellevue', '31T', 377938, 4837940, 43.6844, 1.48555, 203),
('31485', 'Saint-Germier', '31T', 397524, 4813820, 43.4703, 1.73306, 240),
('31486', 'Saint-Hilaire', '31T', 360589, 4809175, 43.4225, 1.27778, 193),
('31487', 'Saint-Ignan', '31T', 312565, 4781255, 43.1608, 0.694438, 433),
('31488', 'Saint-Jean', '31T', 379491, 4835844, 43.6658, 1.50528, 206),
('31489', 'Saint-Jean-Lherm', '31T', 388072, 4839954, 43.7042, 1.61083, 230),
('31490', 'Saint-Jory', '31T', 369023, 4844714, 43.7439, 1.37333, 118),
('31491', 'Saint-Julia', '31T', 410854, 4815821, 43.49, 1.8975, 280),
('31492', 'Saint-Julien-sur-Garonne', '31T', 349987, 4789587, 43.2442, 1.15223, 230),
('31493', 'Saint-Lary-Boujean', '31T', 316269, 4788687, 43.2286, 0.737494, 370),
('31494', 'Saint-Laurent', '31T', 321786, 4799315, 43.3256, 0.801941, 230),
('31495', 'Saint-Léon', '31T', 383415, 4806304, 43.4006, 1.56028, 250),
('31496', 'Sainte-Livrade', '31T', 347183, 4834930, 43.6517, 1.105, 190),
('31497', 'Saint-Loup-Cammas', '31T', 377583, 4839304, 43.6967, 1.48084, 205),
('31498', 'Saint-Loup-en-Comminges', '31T', 303783, 4790982, 43.2461, 0.583052, 417),
('31499', 'Saint-Lys', '31T', 352650, 4819560, 43.5144, 1.17694, 210),
('31500', 'Saint-Mamet', '31T', 304051, 4739476, 42.7828, 0.604441, 640),
('31501', 'Saint-Marcel-Paulel', '31T', 387570, 4835364, 43.6628, 1.60556, 190),
('31502', 'Saint-Marcet', '31T', 316402, 4785226, 43.1975, 0.740281, 368),
('31503', 'Saint-Martory', '31T', 331672, 4778966, 43.1447, 0.930002, 300),
('31504', 'Saint-Médard', '31T', 324124, 4777305, 43.1281, 0.837772, 400),
('31505', 'Saint-Michel', '31T', 344426, 4781255, 43.1681, 1.08611, 400),
('31506', 'Saint-Orens-de-Gameville', '31T', 382363, 4823326, 43.5536, 1.54361, 199),
('31507', 'Saint-Paul-sur-Save', '31T', 356968, 4839776, 43.6972, 1.225, 126),
('31508', 'Saint-Paul-d''Oueil', '31T', 299816, 4744785, 42.8294, 0.550827, 1123),
('31509', 'Saint-Pé-d''Ardet', '31T', 309921, 4761725, 42.9844, 0.668616, 598),
('31510', 'Saint-Pé-Delbosc', '31T', 312924, 4793441, 43.2706, 0.694722, 310),
('31511', 'Saint-Pierre', '31T', 391009, 4831944, 43.6325, 1.64889, 210),
('31512', 'Saint-Pierre-de-Lages', '31T', 389190, 4824938, 43.5692, 1.62778, 245),
('31513', 'Saint-Plancard', '31T', 303003, 4782761, 43.1719, 0.576385, 380),
('31514', 'Saint-Rome', '31T', 393001, 4807812, 43.4156, 1.67833, 170),
('31515', 'Saint-Rustice', '31T', 365520, 4851851, 43.8075, 1.32806, 140),
('31516', 'Saint-Sauveur', '31T', 371231, 4845504, 43.7514, 1.40056, 140),
('31517', 'Saint-Sulpice-sur-Lèze', '31T', 363998, 4798612, 43.3281, 1.3225, 199),
('31518', 'Saint-Thomas', '31T', 345087, 4819853, 43.5156, 1.08334, 319),
('31519', 'Saint-Vincent', '31T', 399609, 4810456, 43.4403, 1.75945, 240),
('31520', 'Sajas', '31T', 339557, 4804580, 43.3769, 1.01945, 330),
('31521', 'Saleich', '31T', 334605, 4765683, 43.0258, 0.970001, 400),
('31522', 'Salerm', '31T', 323464, 4797109, 43.3061, 0.823331, 330),
('31523', 'Salies-du-Salat', '31T', 334004, 4774495, 43.105, 0.96, 297),
('31524', 'Salles-et-Pratviel', '31T', 304338, 4744778, 42.8306, 0.606107, 620),
('31525', 'Salles-sur-Garonne', '31T', 352360, 4792868, 43.2742, 1.18056, 216),
('31526', 'La Salvetat-Saint-Gilles', '31T', 360589, 4826520, 43.5786, 1.27333, 191),
('31527', 'La Salvetat-Lauragais', '31T', 402581, 4821613, 43.5411, 1.79417, 230),
('31528', 'Saman', '31T', 314826, 4789560, 43.2361, 0.719445, 370),
('31529', 'Samouillan', '31T', 333532, 4792163, 43.2639, 0.948885, 360),
('31530', 'Sana', '31T', 338575, 4787935, 43.2269, 1.01222, 300),
('31531', 'Sarrecave', '31T', 304700, 4787528, 43.2153, 0.59556, 374),
('31532', 'Sarremezan', '31T', 310569, 4786652, 43.2089, 0.668057, 415),
('31533', 'Saubens', '31T', 366633, 4815657, 43.4819, 1.35083, 161),
('31534', 'Saussens', '31T', 396826, 4826914, 43.5881, 1.72194, 200),
('31535', 'Sauveterre-de-Comminges', '31T', 310053, 4767309, 43.0347, 0.668333, 489),
('31536', 'Saux-et-Pomarède', '31T', 315034, 4780602, 43.1556, 0.725003, 450),
('31537', 'Savarthès', '31T', 321596, 4776599, 43.1211, 0.806942, 370),
('31538', 'Savères', '31T', 346429, 4803803, 43.3714, 1.10445, 262),
('31539', 'Sédeilhac', '31T', 301316, 4780710, 43.1531, 0.556384, 420),
('31540', 'Ségreville', '31T', 398388, 4815967, 43.4897, 1.74333, 214),
('31541', 'Seilh', '31T', 367532, 4839496, 43.6967, 1.35611, 133),
('31542', 'Seilhan', '31T', 302883, 4769210, 43.05, 0.579721, 470),
('31543', 'Sénarens', '31T', 336111, 4801761, 43.3508, 0.977779, 310),
('31544', 'Sengouagnet', '31T', 319666, 4761708, 42.9867, 0.788057, 520),
('31545', 'Sepx', '31T', 324450, 4780290, 43.155, 0.840832, 420),
('31546', 'Seyre', '31T', 392256, 4801991, 43.3631, 1.67027, 250),
('31547', 'Seysses', '31T', 363660, 4817538, 43.4983, 1.31361, 175),
('31548', 'Signac', '31T', 306368, 4753087, 42.9058, 0.62806, 629),
('31549', 'Sode', '31T', 304979, 4743340, 42.8178, 0.614441, 900),
('31550', 'Soueich', '31T', 319162, 4768359, 43.0464, 0.779724, 390),
('31551', 'Tarabel', '31T', 393127, 4818548, 43.5122, 1.67778, 230),
('31552', 'Terrebasse', '31T', 334726, 4789324, 43.2386, 0.964438, 280),
('31553', 'Thil', '31T', 351881, 4841646, 43.7131, 1.16139, 200),
('31554', 'Touille', '31T', 335182, 4771781, 43.0808, 0.975273, 350),
('31555', 'Toulouse', '31T', 374920, 4828614, 43.6, 1.45028, 146),
('31556', 'Les Tourreilles', '31T', 300894, 4776308, 43.1133, 0.552779, 525),
('31557', 'Tournefeuille', '31T', 366682, 4827168, 43.5856, 1.34861, 158),
('31558', 'Toutens', '31T', 398481, 4814670, 43.4781, 1.74473, 250),
('31559', 'Trébons-de-Luchon', '31T', 301055, 4742032, 42.805, 0.566944, 900),
('31560', 'Trébons-sur-la-Grasse', '31T', 396658, 4811581, 43.45, 1.72278, 190),
('31561', 'L''Union', '31T', 377595, 4835107, 43.6589, 1.48194, 165),
('31562', 'Urau', '31T', 333585, 4764720, 43.0169, 0.957777, 460),
('31563', 'Vacquiers', '31T', 377729, 4848499, 43.7794, 1.48056, 200),
('31564', 'Valcabrère', '31T', 303031, 4767261, 43.0325, 0.582226, 450),
('31565', 'Valentine', '31T', 313292, 4773950, 43.0953, 0.705833, 362),
('31566', 'Vallègue', '31T', 399313, 4808732, 43.4247, 1.75611, 230),
('31567', 'Vallesvilles', '31T', 390556, 4827538, 43.5928, 1.64417, 245),
('31568', 'Varennes', '31T', 394054, 4814676, 43.4775, 1.69, 240),
('31569', 'Vaudreuille', '31T', 417730, 4808606, 43.4258, 1.98361, 240),
('31570', 'Vaux', '31T', 405951, 4812185, 43.4567, 1.8375, 270),
('31571', 'Vendine', '31T', 400492, 4826057, 43.5808, 1.7675, 170),
('31572', 'Venerque', '31T', 374082, 4810175, 43.4339, 1.44417, 178),
('31573', 'Verfeil', '31T', 392128, 4834610, 43.6567, 1.66222, 229),
('31574', 'Vernet', '31T', 373160, 4810192, 43.4339, 1.43278, 167),
('31575', 'Vieille-Toulouse', '31T', 374411, 4820569, 43.5275, 1.44584, 260),
('31576', 'Vieillevigne', '31T', 391110, 4806268, 43.4014, 1.65528, 210),
('31577', 'Vignaux', '31T', 344448, 4838790, 43.6858, 1.06999, 190),
('31578', 'Vigoulet-Auzil', '31T', 375380, 4818360, 43.5078, 1.45833, 252),
('31579', 'Villariès', '31T', 378708, 4845796, 43.7553, 1.49333, 170),
('31580', 'Villate', '31T', 368898, 4814255, 43.4697, 1.37916, 169),
('31581', 'Villaudric', '31T', 374018, 4854463, 43.8325, 1.43305, 130),
('31582', 'Villefranche-de-Lauragais', '31T', 396322, 4805816, 43.3981, 1.71972, 175),
('31583', 'Villematier', '31T', 380222, 4854101, 43.8303, 1.51027, 100),
('31584', 'Villemur-sur-Tarn', '31T', 379706, 4857690, 43.8625, 1.50305, 100),
('31585', 'Villeneuve-de-Rivière', '31T', 310300, 4776996, 43.1219, 0.668057, 382),
('31586', 'Villeneuve-Lécussan', '31T', 296536, 4780357, 43.1486, 0.497779, 540),
('31587', 'Villeneuve-lès-Bouloc', '31T', 373215, 4847503, 43.7697, 1.42472, 160),
('31588', 'Villeneuve-Tolosane', '31T', 365963, 4820361, 43.5242, 1.34139, 169),
('31589', 'Villenouvelle', '31T', 391755, 4810022, 43.4353, 1.6625, 170),
('31590', 'Binos', '31T', 305470, 4752650, 42.9017, 0.617221, 780),
('31591', 'Escoulis', '31T', 339718, 4775129, 43.1119, 1.03, 350),
('31592', 'Larra', '31T', 357719, 4844513, 43.74, 1.23306, 160),
('31593', 'Cazac', '31T', 333421, 4801395, 43.3469, 0.94472, 357),
('32001', 'Aignan', '31T', 264902, 4842413, 43.6975, 0.0824983, 170),
('32002', 'Ansan', '31T', 320620, 4839974, 43.6911, 0.774161, 207),
('32003', 'Antras', '31T', 294604, 4844984, 43.7294, 0.449725, 160),
('32004', 'Arblade-le-Bas', '30T', 727651, 4843267, 43.7075, -0.17444, 143),
('32005', 'Arblade-le-Haut', '30T', 735937, 4848466, 43.7517, -0.0694455, 146),
('32007', 'Ardizas', '31T', 339135, 4842342, 43.7167, 1.00305, 200),
('32008', 'Armentieux', '31T', 264905, 4822674, 43.52, 0.0911097, 170),
('32009', 'Armous-et-Cau', '31T', 271716, 4827319, 43.5639, 0.173329, 250),
('32010', 'Arrouède', '31T', 304399, 4803685, 43.3606, 0.586113, 310),
('32012', 'Aubiet', '31T', 321450, 4834981, 43.6464, 0.786105, 150),
('32013', 'Auch', '31T', 305472, 4835272, 43.645, 0.58805, 134),
('32014', 'Augnax', '31T', 320627, 4843555, 43.7233, 0.773055, 200),
('32015', 'Aujan-Mournède', '31T', 297740, 4806258, 43.3819, 0.503061, 260),
('32016', 'Auradé', '31T', 343154, 4825609, 43.5669, 1.05777, 190),
('32017', 'Aurensan', '30T', 725765, 4833411, 43.6194, -0.201944, 120),
('32018', 'Aurimont', '31T', 324108, 4826914, 43.5744, 0.821661, 160),
('32019', 'Auterive', '31T', 307315, 4828395, 43.5836, 0.613331, 150);
INSERT INTO `ods_communes` (`oc_code_insee`, `oc_nom`, `oc_secteur`, `oc_x_utm`, `oc_y_utm`, `oc_latitude`, `oc_longitude`, `oc_altitude`) VALUES
('32020', 'Aux-Aussat', '31T', 278706, 4813125, 43.4383, 0.265554, 250),
('32021', 'Avensac', '31T', 331251, 4855472, 43.8331, 0.901115, 170),
('32022', 'Avéron-Bergelle', '31T', 263976, 4847913, 43.7467, 0.0686092, 190),
('32023', 'Avezan', '31T', 322875, 4860692, 43.8781, 0.795278, 160),
('32024', 'Ayguetinte', '31T', 293221, 4856700, 43.8344, 0.428053, 110),
('32025', 'Ayzieu', '30T', 739730, 4859414, 43.8489, -0.0174981, 140),
('32026', 'Bajonnette', '31T', 320508, 4853252, 43.8106, 0.768336, 180),
('32027', 'Barcelonne-du-Gers', '30T', 722766, 4842608, 43.7031, -0.235274, 86),
('32028', 'Barcugnan', '31T', 289848, 4805974, 43.3772, 0.405838, 260),
('32029', 'Barran', '31T', 293708, 4832629, 43.6181, 0.443336, 170),
('32030', 'Bars', '31T', 281309, 4821193, 43.5117, 0.294445, 250),
('32031', 'Bascous', '31T', 270368, 4853374, 43.7978, 0.145562, 170),
('32032', 'Bassoues', '31T', 277720, 4828878, 43.5797, 0.246947, 220),
('32033', 'Bazian', '31T', 284233, 4838702, 43.67, 0.323606, 170),
('32034', 'Bazugues', '31T', 285124, 4813967, 43.4478, 0.344443, 270),
('32035', 'Beaucaire', '31T', 289729, 4857273, 43.8386, 0.384438, 90),
('32036', 'Beaumarchés', '31T', 265030, 4830083, 43.5867, 0.089447, 177),
('32037', 'Beaumont', '31T', 282064, 4869597, 43.9472, 0.284161, 120),
('32038', 'Beaupuy', '31T', 339122, 4834347, 43.6447, 1.00528, 190),
('32039', 'Beccas', '31T', 269591, 4812473, 43.4297, 0.153333, 180),
('32040', 'Bédéchan', '31T', 322380, 4826898, 43.5739, 0.800281, 210),
('32041', 'Bellegarde', '31T', 307684, 4810661, 43.4242, 0.624167, 300),
('32042', 'Belloc-Saint-Clamens', '31T', 292484, 4814787, 43.4572, 0.434998, 260),
('32043', 'Belmont', '31T', 277567, 4841145, 43.69, 0.240006, 183),
('32044', 'Béraut', '31T', 291685, 4866168, 43.9192, 0.405272, 120),
('32045', 'Berdoues', '31T', 290279, 4817665, 43.4825, 0.406663, 163),
('32046', 'Bernède', '30T', 724094, 4839069, 43.6708, -0.220283, 120),
('32047', 'Berrac', '31T', 303575, 4876428, 44.0147, 0.54944, 180),
('32048', 'Betcave-Aguin', '31T', 312797, 4812462, 43.4417, 0.686663, 250),
('32049', 'Bétous', '31T', 260372, 4844829, 43.7178, 0.0252811, 146),
('32050', 'Betplan', '31T', 273284, 4810495, 43.4131, 0.199726, 180),
('32051', 'Bézéril', '31T', 328600, 4823495, 43.5447, 0.878335, 233),
('32052', 'Bezolles', '31T', 287106, 4855627, 43.8231, 0.3525, 186),
('32053', 'Bézues-Bajon', '31T', 305511, 4806308, 43.3844, 0.598893, 312),
('32054', 'Biran', '31T', 291846, 4841302, 43.6956, 0.416939, 207),
('32055', 'Bivès', '31T', 323459, 4855767, 43.8339, 0.80417, 150),
('32056', 'Blanquefort', '31T', 323821, 4838160, 43.6756, 0.814445, 155),
('32057', 'Blaziert', '31T', 297494, 4867779, 43.9353, 0.476945, 170),
('32058', 'Blousson-Sérian', '31T', 272828, 4816348, 43.4656, 0.191665, 224),
('32059', 'Bonas', '31T', 291921, 4850873, 43.7817, 0.414164, 190),
('32060', 'Boucagnères', '31T', 307268, 4825987, 43.5619, 0.613606, 151),
('32061', 'Boulaur', '31T', 320153, 4823376, 43.5417, 0.773889, 200),
('32062', 'Bourrouillan', '30T', 740226, 4856188, 43.8197, -0.0127842, 162),
('32063', 'Bouzon-Gellenave', '31T', 259068, 4843486, 43.7053, 0.0097161, 100),
('32064', 'Bretagne-d''Armagnac', '31T', 270222, 4863387, 43.8878, 0.139447, 150),
('32065', 'Le Brouilh-Monbert', '31T', 289959, 4838273, 43.6678, 0.394726, 123),
('32066', 'Brugnens', '31T', 317474, 4856762, 43.8414, 0.729445, 180),
('32067', 'Cabas-Loumassès', '31T', 305458, 4802913, 43.3539, 0.599445, 270),
('32068', 'Cadeilhan', '31T', 320813, 4855436, 43.8303, 0.771394, 180),
('32069', 'Cadeillan', '31T', 325846, 4809921, 43.4219, 0.848609, 220),
('32070', 'Cahuzac-sur-Adour', '30T', 740129, 4835888, 43.6372, -0.023051, 126),
('32071', 'Caillavet', '31T', 285122, 4843337, 43.7119, 0.332774, 170),
('32072', 'Callian', '31T', 280278, 4834322, 43.6294, 0.276384, 150),
('32073', 'Campagne-d''Armagnac', '30T', 741008, 4861159, 43.8642, -0.000832788, 130),
('32074', 'Cannet', '30T', 737713, 4833145, 43.6133, -0.0541694, 180),
('32075', 'Cassaigne', '31T', 285916, 4865178, 43.9086, 0.333889, 140),
('32076', 'Castelnau-Barbarens', '31T', 316330, 4827308, 43.5761, 0.725274, 200),
('32077', 'Castelnau-d''Anglès', '31T', 281750, 4831989, 43.6089, 0.295552, 233),
('32078', 'Castelnau-d''Arbieu', '31T', 315530, 4861602, 43.8844, 0.70361, 190),
('32079', 'Castelnau-d''Auzan', '31T', 266247, 4870415, 43.9497, 0.0869394, 150),
('32080', 'Castelnau-sur-l''Auvignon', '31T', 296064, 4872054, 43.9733, 0.457506, 166),
('32081', 'Castelnavet', '31T', 268574, 4839720, 43.6744, 0.129166, 230),
('32082', 'Castéra-Lectourois', '31T', 308287, 4872152, 43.9775, 0.60972, 170),
('32083', 'Castéra-Verduzan', '31T', 293499, 4853418, 43.805, 0.432774, 120),
('32084', 'Castéron', '31T', 328230, 4862249, 43.8933, 0.861386, 258),
('32085', 'Castet-Arrouy', '31T', 316717, 4872221, 43.9803, 0.714717, 103),
('32086', 'Castex', '31T', 282085, 4806251, 43.3775, 0.310001, 310),
('32087', 'Castex-d''Armagnac', '30T', 727759, 4860383, 43.8614, -0.165833, 90),
('32088', 'Castillon-Debats', '31T', 275862, 4845773, 43.7311, 0.216948, 210),
('32089', 'Castillon-Massas', '31T', 302290, 4843672, 43.7197, 0.545551, 204),
('32090', 'Castillon-Savès', '31T', 337376, 4826117, 43.5703, 0.986114, 220),
('32091', 'Castin', '31T', 302289, 4840584, 43.6919, 0.546673, 235),
('32092', 'Catonvielle', '31T', 335785, 4836311, 43.6617, 0.963329, 210),
('32093', 'Caumont', '30T', 733509, 4841708, 43.6917, -0.102498, 170),
('32094', 'Caupenne-d''Armagnac', '30T', 736012, 4852670, 43.7894, -0.0666666, 110),
('32095', 'Caussens', '31T', 293267, 4868929, 43.9444, 0.423885, 203),
('32096', 'Cazaubon', '30T', 735239, 4868768, 43.9344, -0.0691728, 134),
('32097', 'Cazaux-d''Anglès', '31T', 279018, 4837607, 43.6586, 0.259439, 171),
('32098', 'Cazaux-Savès', '31T', 336964, 4823040, 43.5425, 0.98194, 154),
('32099', 'Cazaux-Villecomtal', '31T', 271184, 4814982, 43.4528, 0.171939, 240),
('32100', 'Cazeneuve', '31T', 272138, 4862579, 43.8811, 0.163615, 150),
('32101', 'Céran', '31T', 314028, 4854203, 43.8175, 0.687502, 108),
('32102', 'Cézan', '31T', 298869, 4854211, 43.8136, 0.499172, 200),
('32103', 'Chélan', '31T', 301307, 4801953, 43.3442, 0.548617, 240),
('32104', 'Clermont-Pouyguillès', '31T', 299655, 4816144, 43.4714, 0.523054, 200),
('32105', 'Clermont-Savès', '31T', 341091, 4831368, 43.6183, 1.03055, 204),
('32106', 'Cologne', '31T', 337138, 4843070, 43.7228, 0.978056, 201),
('32107', 'Condom', '31T', 289083, 4870667, 43.9589, 0.371112, 73),
('32108', 'Corneillan', '30T', 727393, 4837667, 43.6572, -0.18, 130),
('32109', 'Couloumé-Mondebat', '31T', 265487, 4836091, 43.6408, 0.0924967, 180),
('32110', 'Courrensan', '31T', 278497, 4858997, 43.8508, 0.244165, 130),
('32111', 'Courties', '31T', 270254, 4827246, 43.5628, 0.155279, 190),
('32112', 'Crastes', '31T', 317096, 4843805, 43.7247, 0.729165, 240),
('32113', 'Cravencères', '31T', 261414, 4850167, 43.7661, 0.03583, 146),
('32114', 'Cuélas', '31T', 293608, 4802987, 43.3514, 0.453331, 273),
('32115', 'Dému', '31T', 272058, 4849825, 43.7664, 0.168052, 154),
('32116', 'Duffort', '31T', 290301, 4802440, 43.3456, 0.412776, 310),
('32117', 'Duran', '31T', 303559, 4838076, 43.6697, 0.563332, 222),
('32118', 'Durban', '31T', 304345, 4823540, 43.5392, 0.578327, 270),
('32119', 'Eauze', '31T', 266995, 4860565, 43.8614, 0.100555, 160),
('32120', 'Encausse', '31T', 342024, 4840483, 43.7006, 1.03944, 230),
('32121', 'Endoufielle', '31T', 340376, 4823915, 43.5511, 1.02389, 200),
('32122', 'Esclassan-Labastide', '31T', 302414, 4810535, 43.4217, 0.559165, 260),
('32124', 'Espaon', '31T', 327371, 4809727, 43.4206, 0.867496, 194),
('32125', 'Espas', '31T', 264270, 4851795, 43.7817, 0.0705515, 140),
('32126', 'Estampes', '31T', 279441, 4808746, 43.3992, 0.276394, 260),
('32127', 'Estang', '30T', 732357, 4861191, 43.8672, -0.108336, 100),
('32128', 'Estipouy', '31T', 288336, 4825230, 43.55, 0.379717, 230),
('32129', 'Estramiac', '31T', 327109, 4856042, 43.8372, 0.849448, 190),
('32130', 'Faget-Abbatial', '31T', 313625, 4819602, 43.5061, 0.694444, 230),
('32131', 'Flamarens', '31T', 323224, 4876243, 44.0181, 0.794449, 190),
('32132', 'Fleurance', '31T', 311988, 4857965, 43.8508, 0.660833, 98),
('32133', 'Fourcès', '31T', 277912, 4874862, 43.9933, 0.230278, 80),
('32134', 'Frégouville', '31T', 334893, 4828307, 43.5894, 0.954717, 230),
('32135', 'Fustérouau', '31T', 259193, 4841350, 43.6861, 0.0122201, 146),
('32136', 'Galiax', '31T', 259046, 4833539, 43.6158, 0.0138836, 131),
('32138', 'Garravet', '31T', 331155, 4808952, 43.4144, 0.914449, 300),
('32139', 'Gaudonville', '31T', 326915, 4861449, 43.8858, 0.845284, 210),
('32140', 'Gaujac', '31T', 324799, 4816369, 43.4797, 0.833613, 303),
('32141', 'Gaujan', '31T', 315574, 4808712, 43.4086, 0.722218, 250),
('32142', 'Gavarret-sur-Aulouste', '31T', 311044, 4849099, 43.7708, 0.652227, 130),
('32143', 'Gazaupouy', '31T', 295605, 4875990, 44.0086, 0.450273, 176),
('32144', 'Gazax-et-Baccarisse', '31T', 273338, 4832113, 43.6075, 0.191384, 250),
('32145', 'Gée-Rivière', '30T', 727263, 4839516, 43.6739, -0.180832, 90),
('32146', 'Gimbrède', '31T', 317326, 4878905, 44.0406, 0.720001, 110),
('32147', 'Gimont', '31T', 328613, 4832787, 43.6283, 0.875556, 160),
('32148', 'Giscaro', '31T', 332882, 4830425, 43.6081, 0.929168, 210),
('32149', 'Gondrin', '31T', 278121, 4863118, 43.8878, 0.23778, 170),
('32150', 'Goutz', '31T', 317812, 4852801, 43.8058, 0.734995, 190),
('32151', 'Goux', '30T', 739507, 4833827, 43.6189, -0.0316648, 130),
('32152', 'Haget', '31T', 270133, 4811188, 43.4183, 0.160562, 200),
('32153', 'Haulies', '31T', 311584, 4825371, 43.5575, 0.667216, 280),
('32154', 'Homps', '31T', 327258, 4853198, 43.8117, 0.852218, 115),
('32155', 'Le Houga', '30T', 727083, 4850722, 43.7747, -0.178332, 148),
('32156', 'Idrac-Respaillès', '31T', 294425, 4822354, 43.5258, 0.45611, 170),
('32157', 'L''Isle-Arné', '31T', 320419, 4831643, 43.6161, 0.77444, 170),
('32158', 'L''Isle-Bouzon', '31T', 317833, 4866571, 43.9297, 0.730558, 160),
('32159', 'L''Isle-de-Noé', '31T', 291180, 4829279, 43.5872, 0.413329, 136),
('32160', 'L''Isle-Jourdain', '31T', 345182, 4830809, 43.6142, 1.08139, 145),
('32161', 'Izotges', '30T', 741171, 4837470, 43.6511, -0.00944407, 119),
('32162', 'Jegun', '31T', 295486, 4848200, 43.7586, 0.459442, 211),
('32163', 'Jû-Belloc', '31T', 258128, 4829865, 43.5825, 0.00416326, 139),
('32164', 'Juillac', '31T', 267927, 4824916, 43.5411, 0.127498, 150),
('32165', 'Juilles', '31T', 324816, 4829952, 43.6019, 0.829441, 210),
('32166', 'Justian', '31T', 282827, 4855395, 43.8197, 0.299439, 140),
('32167', 'Laas', '31T', 282438, 4816493, 43.4697, 0.310276, 230),
('32168', 'Labarrère', '31T', 270992, 4871453, 43.9606, 0.145552, 170),
('32169', 'Labarthe', '31T', 304341, 4816439, 43.4753, 0.580832, 200),
('32170', 'Labarthète', '30T', 728737, 4835736, 43.6394, -0.164171, 150),
('32171', 'Labastide-Savès', '31T', 336924, 4820448, 43.5192, 0.982223, 170),
('32172', 'Labéjan', '31T', 297969, 4823637, 43.5383, 0.499446, 260),
('32173', 'Labrihe', '31T', 328999, 4848737, 43.7719, 0.875273, 150),
('32174', 'Ladevèze-Rivière', '31T', 263683, 4826269, 43.5519, 0.0744451, 160),
('32175', 'Ladevèze-Ville', '31T', 262663, 4825378, 43.5436, 0.0622235, 230),
('32176', 'Lagarde', '31T', 303860, 4870984, 43.9658, 0.555005, 180),
('32177', 'Lagarde-Hachan', '31T', 297109, 4809242, 43.4086, 0.494172, 280),
('32178', 'Lagardère', '31T', 285005, 4857733, 43.8414, 0.325554, 200),
('32180', 'Lagraulet-du-Gers', '31T', 276038, 4864948, 43.9036, 0.21111, 160),
('32181', 'Laguian-Mazous', '31T', 278011, 4811140, 43.4203, 0.257783, 270),
('32182', 'Lahas', '31T', 329730, 4824670, 43.5556, 0.891944, 270),
('32183', 'Lahitte', '31T', 312890, 4836728, 43.66, 0.679446, 210),
('32184', 'Lalanne', '31T', 313654, 4852021, 43.7978, 0.683614, 140),
('32185', 'Lalanne-Arqué', '31T', 308872, 4800130, 43.3297, 0.642506, 330),
('32186', 'Lamaguère', '31T', 311961, 4817950, 43.4908, 0.674447, 200),
('32187', 'Lamazère', '31T', 294268, 4826034, 43.5589, 0.452774, 150),
('32188', 'Lamothe-Goas', '31T', 303816, 4859714, 43.8644, 0.558608, 146),
('32189', 'Lannemaignan', '30T', 724953, 4864704, 43.9011, -0.198887, 114),
('32190', 'Lannepax', '31T', 276973, 4853550, 43.8014, 0.227496, 180),
('32191', 'Lanne-Soubiran', '30T', 732774, 4847984, 43.7483, -0.108892, 134),
('32192', 'Lannux', '30T', 724606, 4836523, 43.6478, -0.214998, 150),
('32193', 'Larée', '30T', 736931, 4865801, 43.9072, -0.0494397, 105),
('32194', 'Larressingle', '31T', 284041, 4869316, 43.9453, 0.308885, 143),
('32195', 'Larroque-Engalin', '31T', 302851, 4873824, 43.9911, 0.541384, 156),
('32196', 'Larroque-Saint-Sernin', '31T', 296053, 4855749, 43.8267, 0.463606, 145),
('32197', 'Larroque-sur-l''Osse', '31T', 281415, 4872244, 43.9708, 0.274994, 140),
('32198', 'Lartigue', '31T', 315907, 4822504, 43.5328, 0.721669, 260),
('32199', 'Lasserade', '31T', 263187, 4834473, 43.6256, 0.0647267, 180),
('32200', 'Lasséran', '31T', 301357, 4829587, 43.5928, 0.539162, 209),
('32201', 'Lasseube-Propre', '31T', 305722, 4827638, 43.5764, 0.593888, 220),
('32202', 'Laujuzan', '30T', 732188, 4854512, 43.8072, -0.113336, 122),
('32203', 'Lauraët', '31T', 279116, 4868181, 43.9336, 0.248054, 170),
('32204', 'Lavardens', '31T', 299900, 4848344, 43.7611, 0.514169, 193),
('32205', 'Laveraët', '31T', 274844, 4823476, 43.5303, 0.213609, 230),
('32206', 'Laymont', '31T', 337159, 4809731, 43.4228, 0.988331, 270),
('32207', 'Leboulin', '31T', 312678, 4837969, 43.6711, 0.676388, 173),
('32208', 'Lectoure', '31T', 309089, 4867496, 43.9358, 0.621384, 164),
('32209', 'Lelin-Lapujolle', '30T', 730202, 4843354, 43.7075, -0.142779, 130),
('32210', 'Lias', '31T', 349495, 4825093, 43.5636, 1.1364, 270),
('32211', 'Lias-d''Armagnac', '30T', 735338, 4860956, 43.8642, -0.071389, 120),
('32212', 'Ligardes', '31T', 298386, 4879456, 44.0406, 0.483612, 160),
('32213', 'Lombez', '31T', 331035, 4815839, 43.4764, 0.910835, 170),
('32214', 'Loubédat', '31T', 260512, 4848099, 43.7472, 0.0255606, 150),
('32215', 'Loubersan', '31T', 297742, 4819073, 43.4972, 0.498337, 260),
('32216', 'Lourties-Monbrun', '31T', 300931, 4814408, 43.4561, 0.539449, 270),
('32217', 'Louslitges', '31T', 271005, 4830834, 43.5953, 0.163051, 170),
('32218', 'Loussous-Débat', '31T', 264012, 4837502, 43.6531, 0.0736165, 181),
('32219', 'Lupiac', '31T', 272701, 4840444, 43.6822, 0.179995, 240),
('32220', 'Luppé-Violles', '30T', 730902, 4847085, 43.7408, -0.1325, 140),
('32221', 'Lussan', '31T', 317289, 4832839, 43.6261, 0.735275, 200),
('32222', 'Magnan', '30T', 731573, 4850321, 43.7697, -0.122782, 128),
('32223', 'Magnas', '31T', 317322, 4862602, 43.8939, 0.725558, 170),
('32224', 'Maignaut-Tauzia', '31T', 291697, 4862987, 43.8906, 0.406665, 160),
('32225', 'Malabat', '31T', 272168, 4812787, 43.4333, 0.185002, 170),
('32226', 'Manas-Bastanous', '31T', 286229, 4805502, 43.3719, 0.361394, 270),
('32227', 'Manciet', '31T', 261954, 4853978, 43.8006, 0.0408388, 150),
('32228', 'Manent-Montané', '31T', 305532, 4800781, 43.3347, 0.601113, 330),
('32229', 'Mansempuy', '31T', 323899, 4845351, 43.7403, 0.81306, 180),
('32230', 'Mansencôme', '31T', 286345, 4861149, 43.8725, 0.340839, 170),
('32231', 'Marambat', '31T', 283861, 4850729, 43.7781, 0.314165, 141),
('32232', 'Maravat', '31T', 319098, 4847456, 43.7581, 0.752773, 180),
('32233', 'Marciac', '31T', 270625, 4822970, 43.5244, 0.161673, 155),
('32234', 'Marestaing', '31T', 340160, 4827099, 43.5797, 1.02028, 180),
('32235', 'Margouët-Meymes', '31T', 266498, 4845755, 43.7281, 0.10083, 120),
('32236', 'Marguestau', '30T', 737756, 4863328, 43.8847, -0.0402819, 130),
('32237', 'Marsan', '31T', 316240, 4836295, 43.6569, 0.721107, 210),
('32238', 'Marseillan', '31T', 283045, 4818574, 43.4886, 0.316943, 210),
('32239', 'Marsolan', '31T', 302561, 4868583, 43.9439, 0.539719, 171),
('32240', 'Mascaras', '31T', 276496, 4825182, 43.5461, 0.233328, 280),
('32241', 'Mas-d''Auvignon', '31T', 299450, 4863087, 43.8936, 0.503058, 218),
('32242', 'Masseube', '31T', 304060, 4811414, 43.43, 0.579165, 200),
('32243', 'Mauléon-d''Armagnac', '30T', 728736, 4865111, 43.9036, -0.151663, 120),
('32244', 'Maulichères', '30T', 734935, 4841295, 43.6875, -0.0850059, 180),
('32245', 'Maumusson-Laguian', '30T', 733938, 4832642, 43.61, -0.101109, 167),
('32246', 'Maupas', '30T', 730313, 4858926, 43.8475, -0.134718, 100),
('32247', 'Maurens', '31T', 331818, 4829156, 43.5964, 0.916386, 200),
('32248', 'Mauroux', '31T', 324296, 4864606, 43.9136, 0.811663, 170),
('32249', 'Mauvezin', '31T', 329153, 4844257, 43.7317, 0.87861, 140),
('32250', 'Meilhan', '31T', 312496, 4810526, 43.4242, 0.683611, 270),
('32251', 'Mérens', '31T', 301775, 4847423, 43.7533, 0.537781, 235),
('32252', 'Miélan', '31T', 281955, 4812000, 43.4292, 0.306106, 270),
('32253', 'Miradoux', '31T', 320027, 4874230, 43.9992, 0.755275, 200),
('32254', 'Miramont-d''Astarac', '31T', 295279, 4824583, 43.5461, 0.465827, 210),
('32255', 'Miramont-Latour', '31T', 313451, 4849587, 43.7758, 0.681939, 160),
('32256', 'Mirande', '31T', 290168, 4821312, 43.5153, 0.403886, 163),
('32257', 'Mirannes', '31T', 288782, 4832937, 43.6194, 0.382228, 210),
('32258', 'Mirepoix', '31T', 312443, 4846342, 43.7464, 0.670558, 150),
('32260', 'Monbardon', '31T', 314460, 4805840, 43.3825, 0.709445, 250),
('32261', 'Monblanc', '31T', 337409, 4814479, 43.4656, 0.990003, 240),
('32262', 'Monbrun', '31T', 340696, 4836440, 43.6639, 1.02416, 227),
('32263', 'Moncassin', '31T', 296250, 4814363, 43.4544, 0.481662, 230),
('32264', 'Monclar', '30T', 732426, 4866877, 43.9183, -0.105001, 143),
('32265', 'Monclar-sur-Losse', '31T', 284948, 4823238, 43.5311, 0.338608, 180),
('32266', 'Moncorneil-Grazan', '31T', 310068, 4813805, 43.4531, 0.6525, 212),
('32267', 'Monferran-Plavès', '31T', 309135, 4818184, 43.4922, 0.639444, 285),
('32268', 'Monferran-Savès', '31T', 337028, 4829366, 43.5994, 0.98083, 219),
('32269', 'Monfort', '31T', 324821, 4851470, 43.7956, 0.822504, 150),
('32270', 'Mongausy', '31T', 322686, 4819789, 43.51, 0.80639, 280),
('32271', 'Monguilhem', '30T', 726640, 4859757, 43.8561, -0.180006, 81),
('32272', 'Monlaur-Bernet', '31T', 298337, 4802875, 43.3517, 0.511669, 339),
('32273', 'Monlezun', '31T', 274757, 4820205, 43.5008, 0.213888, 230),
('32274', 'Monlezun-d''Armagnac', '30T', 729415, 4856424, 43.8253, -0.14695, 100),
('32275', 'Monpardiac', '31T', 277002, 4816023, 43.4639, 0.243338, 260),
('32276', 'Montadet', '31T', 330958, 4810995, 43.4328, 0.911385, 220),
('32277', 'Montamat', '31T', 325808, 4817145, 43.4869, 0.845832, 280),
('32278', 'Montaut', '31T', 290988, 4807885, 43.3947, 0.419166, 250),
('32279', 'Montaut-les-Créneaux', '31T', 311140, 4840636, 43.6947, 0.656391, 246),
('32280', 'Mont-d''Astarac', '31T', 302876, 4800148, 43.3283, 0.568606, 340),
('32281', 'Mont-de-Marrast', '31T', 286067, 4806804, 43.3836, 0.358888, 260),
('32282', 'Montégut', '31T', 310247, 4836030, 43.6531, 0.646939, 210),
('32283', 'Montégut-Arros', '31T', 274202, 4806325, 43.3758, 0.212772, 230),
('32284', 'Montégut-Savès', '31T', 334853, 4812010, 43.4428, 0.959172, 240),
('32285', 'Montesquiou', '31T', 284270, 4828695, 43.58, 0.328057, 210),
('32286', 'Montestruc-sur-Gers', '31T', 309218, 4851776, 43.7944, 0.628605, 100),
('32287', 'Monties', '31T', 311578, 4806661, 43.3892, 0.673611, 338),
('32288', 'Montiron', '31T', 326252, 4828217, 43.5867, 0.847777, 230),
('32289', 'Montpézat', '31T', 335485, 4806592, 43.3942, 0.968609, 304),
('32290', 'Montréal', '31T', 275549, 4870278, 43.9514, 0.20278, 110),
('32291', 'Mormès', '30T', 729250, 4853422, 43.7983, -0.150284, 120),
('32292', 'Mouchan', '31T', 283005, 4864933, 43.9056, 0.297776, 90),
('32293', 'Mouchès', '31T', 290969, 4826105, 43.5586, 0.411942, 140),
('32294', 'Mourède', '31T', 282513, 4853305, 43.8008, 0.296388, 128),
('32295', 'Nizas', '31T', 338240, 4818194, 43.4992, 0.999167, 240),
('32296', 'Nogaro', '30T', 738864, 4849281, 43.7581, -0.0327749, 100),
('32297', 'Noilhan', '31T', 332951, 4822397, 43.5358, 0.932496, 240),
('32298', 'Nougaroulet', '31T', 317161, 4840469, 43.6947, 0.731105, 180),
('32299', 'Noulens', '31T', 272091, 4854704, 43.8103, 0.166388, 165),
('32300', 'Orbessan', '31T', 306718, 4824027, 43.5442, 0.6075, 169),
('32301', 'Ordan-Larroque', '31T', 295198, 4840272, 43.6872, 0.458886, 199),
('32302', 'Ornézan', '31T', 306096, 4820371, 43.5111, 0.601111, 173),
('32303', 'Pallanne', '31T', 277788, 4820753, 43.5067, 0.251114, 190),
('32304', 'Panassac', '31T', 302858, 4806478, 43.3853, 0.566107, 226),
('32305', 'Panjas', '30T', 734233, 4856160, 43.8214, -0.0872232, 123),
('32306', 'Pauilhac', '31T', 308097, 4860948, 43.8767, 0.611392, 140),
('32307', 'Pavie', '31T', 305515, 4831349, 43.6097, 0.589994, 139),
('32308', 'Pébées', '31T', 340362, 4813883, 43.4608, 1.02666, 220),
('32309', 'Pellefigue', '31T', 321569, 4815806, 43.4739, 0.793887, 300),
('32310', 'Perchède', '30T', 731084, 4851509, 43.7806, -0.128339, 106),
('32311', 'Pergain-Taillac', '31T', 306748, 4881275, 44.0592, 0.587221, 151),
('32312', 'Pessan', '31T', 310236, 4832449, 43.6208, 0.648061, 164),
('32313', 'Pessoulens', '31T', 329409, 4857742, 43.8531, 0.877495, 170),
('32314', 'Peyrecave', '31T', 325193, 4874060, 43.9989, 0.819718, 85),
('32315', 'Peyrusse-Grande', '31T', 275314, 4834796, 43.6322, 0.214726, 241),
('32316', 'Peyrusse-Massas', '31T', 302934, 4845752, 43.7386, 0.552777, 219),
('32317', 'Peyrusse-Vieille', '31T', 272550, 4834673, 43.6303, 0.180555, 245),
('32318', 'Pis', '31T', 315717, 4850605, 43.7856, 0.709725, 167),
('32319', 'Plaisance', '31T', 261629, 4832334, 43.6058, 0.0463831, 135),
('32320', 'Plieux', '31T', 318302, 4869028, 43.9519, 0.735557, 181),
('32321', 'Polastron', '31T', 325936, 4822081, 43.5314, 0.845835, 192),
('32322', 'Pompiac', '31T', 339132, 4819777, 43.5136, 1.00973, 240),
('32323', 'Ponsampère', '31T', 287508, 4814406, 43.4524, 0.373704, 265),
('32324', 'Ponsan-Soubiran', '31T', 296153, 4802940, 43.3517, 0.484722, 239),
('32325', 'Pouydraguin', '31T', 261030, 4838163, 43.6581, 0.036394, 161),
('32326', 'Pouylebon', '31T', 281532, 4825294, 43.5486, 0.295552, 264),
('32327', 'Pouy-Loubrin', '31T', 307345, 4815333, 43.4661, 0.618333, 289),
('32328', 'Pouy-Roquelaure', '31T', 301294, 4879121, 44.0383, 0.519999, 180),
('32329', 'Préchac', '31T', 304964, 4851621, 43.7919, 0.575831, 170),
('32330', 'Préchac-sur-Adour', '30T', 741908, 4831967, 43.6014, -0.00277928, 130),
('32331', 'Preignan', '31T', 309382, 4842632, 43.7122, 0.633887, 180),
('32332', 'Préneron', '31T', 280568, 4845184, 43.7272, 0.275555, 170),
('32333', 'Projan', '30T', 723106, 4831068, 43.5992, -0.235827, 150),
('32334', 'Pujaudran', '31T', 350664, 4828215, 43.5919, 1.15, 300),
('32335', 'Puycasquier', '31T', 318599, 4846388, 43.7483, 0.74694, 250),
('32336', 'Puylausic', '31T', 332756, 4812740, 43.4489, 0.933051, 260),
('32337', 'Puységur', '31T', 307175, 4849951, 43.7775, 0.603889, 150),
('32338', 'Ramouzens', '31T', 273559, 4855118, 43.8144, 0.184443, 160),
('32339', 'Razengues', '31T', 338468, 4834178, 43.6431, 0.997223, 229),
('32340', 'Réans', '31T', 261458, 4860730, 43.8611, 0.031671, 140),
('32341', 'Réjaumont', '31T', 302987, 4854335, 43.8158, 0.550282, 168),
('32342', 'Ricourt', '31T', 271815, 4818976, 43.4889, 0.178056, 190),
('32343', 'Riguepeu', '31T', 285726, 4836307, 43.6489, 0.343057, 140),
('32344', 'Riscle', '30T', 735009, 4837931, 43.6572, -0.0855545, 110),
('32345', 'La Romieu', '31T', 299306, 4873066, 43.9833, 0.497503, 187),
('32346', 'Roquebrune', '31T', 282488, 4844319, 43.72, 0.299717, 160),
('32347', 'Roquefort', '31T', 306939, 4847982, 43.7597, 0.601667, 150),
('32348', 'Roquelaure', '31T', 304842, 4843627, 43.72, 0.577221, 200),
('32349', 'Roquelaure-Saint-Aubin', '31T', 337243, 4837264, 43.6706, 0.981113, 190),
('32350', 'Roquepine', '31T', 296705, 4865333, 43.9131, 0.468058, 200),
('32351', 'Roques', '31T', 282755, 4858640, 43.8489, 0.297227, 180),
('32352', 'Rozès', '31T', 288872, 4854212, 43.8108, 0.374997, 180),
('32353', 'Sabaillan', '31T', 322918, 4812374, 43.4433, 0.811668, 230),
('32354', 'Sabazan', '31T', 262068, 4843378, 43.7053, 0.0469487, 150),
('32355', 'Sadeillan', '31T', 285067, 4807947, 43.3936, 0.346107, 270),
('32356', 'Saint-André', '31T', 326926, 4825637, 43.5636, 0.856944, 184),
('32357', 'Sainte-Anne', '31T', 336013, 4845598, 43.7453, 0.963327, 170),
('32358', 'Saint-Antoine', '31T', 326930, 4878245, 44.0369, 0.84, 80),
('32359', 'Saint-Antonin', '31T', 324052, 4843525, 43.7239, 0.815556, 190),
('32360', 'Saint-Arailles', '31T', 286788, 4833741, 43.6261, 0.357224, 150),
('32361', 'Saint-Arroman', '31T', 299346, 4812572, 43.4392, 0.520551, 239),
('32362', 'Saint-Aunix-Lengros', '31T', 261535, 4829033, 43.5761, 0.0466729, 150),
('32363', 'Sainte-Aurence-Cazaux', '31T', 291009, 4805661, 43.3747, 0.420274, 280),
('32364', 'Saint-Avit-Frandat', '31T', 311765, 4872144, 43.9783, 0.653051, 180),
('32365', 'Saint-Blancard', '31T', 309279, 4801786, 43.3447, 0.646947, 332),
('32366', 'Saint-Brès', '31T', 320531, 4849979, 43.7811, 0.769717, 180),
('32367', 'Saint-Christaud', '31T', 278747, 4823254, 43.5294, 0.261946, 280),
('32368', 'Sainte-Christie', '31T', 309277, 4847575, 43.7567, 0.630831, 150),
('32369', 'Sainte-Christie-d''Armagnac', '30T', 740750, 4852222, 43.7839, -0.00805874, 130),
('32370', 'Saint-Clar', '31T', 320779, 4862477, 43.8936, 0.768609, 157),
('32371', 'Saint-Créac', '31T', 323548, 4865829, 43.9244, 0.801949, 210),
('32372', 'Saint-Cricq', '31T', 338870, 4840620, 43.7011, 1.00028, 200),
('32373', 'Sainte-Dode', '31T', 286575, 4810771, 43.4194, 0.363605, 260),
('32374', 'Saint-Élix', '31T', 319940, 4817948, 43.4928, 0.773053, 220),
('32375', 'Saint-Élix-Theux', '31T', 295200, 4811615, 43.4294, 0.469727, 207),
('32376', 'Sainte-Gemme', '31T', 322949, 4850038, 43.7822, 0.799725, 170),
('32377', 'Saint-Georges', '31T', 333820, 4843800, 43.7286, 0.936663, 190),
('32378', 'Saint-Germé', '30T', 730040, 4840260, 43.6797, -0.146108, 100),
('32379', 'Saint-Germier', '31T', 334794, 4837015, 43.6678, 0.95083, 190),
('32380', 'Saint-Griède', '30T', 734088, 4845652, 43.7269, -0.0936078, 137),
('32381', 'Saint-Jean-le-Comtal', '31T', 299716, 4828000, 43.5781, 0.519438, 220),
('32382', 'Saint-Jean-Poutge', '31T', 288552, 4844834, 43.7264, 0.374717, 110),
('32383', 'Saint-Justin', '31T', 269636, 4818402, 43.4831, 0.151384, 210),
('32384', 'Saint-Lary', '31T', 298627, 4843997, 43.7217, 0.499998, 215),
('32385', 'Saint-Léonard', '31T', 320616, 4858900, 43.8614, 0.767783, 196),
('32386', 'Saint-Lizier-du-Planté', '31T', 334145, 4808847, 43.4142, 0.951389, 260),
('32387', 'Saint-Loube', '31T', 337540, 4811512, 43.4389, 0.992505, 189),
('32388', 'Sainte-Marie', '31T', 328663, 4836490, 43.6617, 0.875, 212),
('32389', 'Saint-Martin', '31T', 287809, 4820614, 43.5083, 0.375002, 220),
('32390', 'Saint-Martin-d''Armagnac', '30T', 736684, 4844446, 43.7153, -0.0619484, 140),
('32391', 'Saint-Martin-de-Goyne', '31T', 304988, 4875212, 44.0042, 0.5675, 160),
('32392', 'Saint-Martin-Gimois', '31T', 322779, 4820775, 43.5189, 0.807218, 270),
('32393', 'Saint-Maur', '31T', 285006, 4817307, 43.4778, 0.341669, 270),
('32394', 'Saint-Médard', '31T', 294640, 4818364, 43.49, 0.460274, 182),
('32395', 'Sainte-Mère', '31T', 313141, 4875070, 44.005, 0.669162, 180),
('32396', 'Saint-Mézard', '31T', 304413, 4878379, 44.0325, 0.559165, 177),
('32397', 'Saint-Michel', '31T', 290656, 4811693, 43.4289, 0.413613, 179),
('32398', 'Saint-Mont', '30T', 729971, 4837045, 43.6508, -0.148333, 130),
('32399', 'Saint-Orens', '31T', 331548, 4842467, 43.7161, 0.908889, 170),
('32400', 'Saint-Orens-Pouy-Petit', '31T', 293913, 4866005, 43.9183, 0.433059, 170),
('32401', 'Saint-Ost', '31T', 295072, 4805938, 43.3783, 0.470275, 240),
('32402', 'Saint-Paul-de-Baïse', '31T', 288456, 4850272, 43.7753, 0.371385, 170),
('32403', 'Saint-Pierre-d''Aubézies', '31T', 271322, 4836167, 43.6433, 0.164719, 238),
('32404', 'Saint-Puy', '31T', 296028, 4861462, 43.8781, 0.461115, 180),
('32405', 'Sainte-Radegonde', '31T', 306012, 4856871, 43.8394, 0.586944, 160),
('32406', 'Saint-Sauvy', '31T', 324323, 4840215, 43.6942, 0.819998, 160),
('32407', 'Saint-Soulan', '31T', 326769, 4819559, 43.5089, 0.85694, 277),
('32408', 'Salles-d''Armagnac', '30T', 738135, 4855248, 43.8119, -0.0391694, 127),
('32409', 'Samaran', '31T', 299213, 4807326, 43.3919, 0.520837, 330),
('32410', 'Samatan', '31T', 332698, 4817650, 43.4931, 0.930827, 170),
('32411', 'Sansan', '31T', 307318, 4822250, 43.5283, 0.615551, 165),
('32412', 'Saramon', '31T', 319424, 4821327, 43.5231, 0.765554, 190),
('32413', 'Sarcos', '31T', 312625, 4805459, 43.3786, 0.686939, 309),
('32414', 'Sarragachies', '30T', 737524, 4840985, 43.6839, -0.0530608, 150),
('32415', 'Sarraguzan', '31T', 284265, 4803989, 43.3578, 0.337773, 330),
('32416', 'Sarrant', '31T', 333367, 4848967, 43.775, 0.92944, 125),
('32417', 'La Sauvetat', '31T', 301010, 4858532, 43.8531, 0.524161, 204),
('32418', 'Sauveterre', '31T', 326580, 4813946, 43.4583, 0.856391, 270),
('32419', 'Sauviac', '31T', 293812, 4808909, 43.4047, 0.453616, 260),
('32420', 'Sauvimont', '31T', 335591, 4812763, 43.4497, 0.96806, 240),
('32421', 'Savignac-Mona', '31T', 338977, 4817064, 43.4892, 1.00861, 238),
('32422', 'Scieurac-et-Flourès', '31T', 274369, 4826735, 43.5594, 0.206383, 240),
('32423', 'Séailles', '31T', 268010, 4847988, 43.7486, 0.118616, 207),
('32424', 'Ségos', '30T', 721325, 4834004, 43.6261, -0.256667, 110),
('32425', 'Ségoufielle', '31T', 349356, 4832905, 43.6339, 1.1325, 143),
('32426', 'Seissan', '31T', 305297, 4818387, 43.4931, 0.591945, 180),
('32427', 'Sembouès', '31T', 270590, 4816022, 43.4619, 0.164168, 180),
('32428', 'Sémézies-Cachan', '31T', 316648, 4820044, 43.5108, 0.731662, 220),
('32429', 'Sempesserre', '31T', 311510, 4876475, 44.0172, 0.648335, 160),
('32430', 'Sère', '31T', 309535, 4809250, 43.4119, 0.647506, 228),
('32431', 'Sérempuy', '31T', 324793, 4847859, 43.7631, 0.823336, 189),
('32432', 'Seysses-Savès', '31T', 341608, 4819039, 43.5075, 1.04056, 238),
('32433', 'Simorre', '31T', 316826, 4813370, 43.4508, 0.736107, 197),
('32434', 'Sion', '31T', 259091, 4847223, 43.7389, 0.00832807, 140),
('32435', 'Sirac', '31T', 334981, 4841857, 43.7114, 0.951666, 185),
('32436', 'Solomiac', '31T', 330887, 4852579, 43.8069, 0.897504, 120),
('32437', 'Sorbets', '30T', 740441, 4845291, 43.7217, -0.0149957, 140),
('32438', 'Tachoires', '31T', 311190, 4816120, 43.4742, 0.665554, 206),
('32439', 'Tarsac', '30T', 732987, 4839311, 43.6703, -0.110003, 100),
('32440', 'Tasque', '31T', 259633, 4836113, 43.6392, 0.0200043, 121),
('32441', 'Taybosc', '31T', 317882, 4850421, 43.7844, 0.736673, 230),
('32442', 'Terraube', '31T', 303425, 4864605, 43.9083, 0.551944, 170),
('32443', 'Termes-d''Armagnac', '30T', 741065, 4839783, 43.6719, -0.00972372, 158),
('32444', 'Thoux', '31T', 338221, 4838783, 43.6844, 0.992782, 202),
('32445', 'Tieste-Uragnoux', '31T', 260752, 4825971, 43.5483, 0.0383387, 200),
('32446', 'Tillac', '31T', 279717, 4817199, 43.4753, 0.276388, 185),
('32447', 'Tirent-Pontéjac', '31T', 321884, 4825121, 43.5578, 0.794727, 165),
('32448', 'Touget', '31T', 331949, 4839710, 43.6914, 0.914725, 150),
('32449', 'Toujouse', '30T', 726969, 4857329, 43.8342, -0.176948, 110),
('32450', 'Tourdun', '31T', 269563, 4825447, 43.5464, 0.147497, 220),
('32451', 'Tournan', '31T', 320753, 4811320, 43.4333, 0.785279, 270),
('32452', 'Tournecoupe', '31T', 324176, 4859206, 43.865, 0.81195, 150),
('32453', 'Tourrenquets', '31T', 314077, 4847161, 43.7542, 0.690552, 190),
('32454', 'Traversères', '31T', 310150, 4823096, 43.5367, 0.650272, 280),
('32455', 'Troncens', '31T', 274762, 4815665, 43.46, 0.215827, 230),
('32456', 'Tudelle', '31T', 281403, 4839906, 43.68, 0.288053, 210),
('32457', 'Urdens', '31T', 315205, 4858739, 43.8586, 0.700558, 153),
('32458', 'Urgosse', '30T', 739752, 4846996, 43.7372, -0.022778, 135),
('32459', 'Valence-sur-Baïse', '31T', 289755, 4862307, 43.8839, 0.38278, 110),
('32460', 'Vergoignan', '30T', 725838, 4844533, 43.7194, -0.196385, 135),
('32461', 'Verlus', '30T', 726256, 4831482, 43.6019, -0.196672, 140),
('32462', 'Vic-Fezensac', '31T', 282971, 4848812, 43.7606, 0.303893, 124),
('32463', 'Viella', '30T', 730907, 4831363, 43.5994, -0.139167, 240),
('32464', 'Villecomtal-sur-Arros', '31T', 273376, 4809225, 43.4017, 0.201387, 177),
('32465', 'Villefranche', '31T', 316095, 4810457, 43.4244, 0.728061, 217),
('32466', 'Viozan', '31T', 295349, 4807628, 43.3936, 0.473059, 229),
('32467', 'Saint-Caprais', '31T', 321522, 4829237, 43.5947, 0.788893, 230),
('32468', 'Aussos', '31T', 309847, 4805166, 43.3753, 0.652776, 330),
('33001', 'Abzac', '30T', 726504, 4988885, 45.0172, -0.125281, 20),
('33002', 'Aillas', '30T', 732863, 4928524, 44.4725, -0.072224, 64),
('33003', 'Ambarès-et-Lagrave', '30T', 698385, 4977909, 44.9269, -0.486108, 20),
('33004', 'Ambès', '30T', 694673, 4987370, 45.0131, -0.52945, 4),
('33005', 'Andernos-les-Bains', '30T', 650662, 4956046, 44.7419, -1.09694, 8),
('33006', 'Anglade', '30T', 685733, 5009155, 45.2114, -0.634722, 11),
('33007', 'Arbanats', '30T', 706687, 4950310, 44.6764, -0.392227, 10),
('33008', 'Arbis', '30T', 718347, 4950973, 44.6789, -0.244995, 39),
('33009', 'Arcachon', '30T', 645065, 4946625, 44.6583, -1.17028, 10),
('33010', 'Arcins', '30T', 679121, 4993554, 45.0728, -0.724449, 10),
('33011', 'Arès', '30T', 647361, 4958964, 44.7689, -1.13777, 5),
('33012', 'Arsac', '30T', 682379, 4985247, 44.9972, -0.686107, 25),
('33013', 'Artigues-près-Bordeaux', '30T', 698457, 4970622, 44.8614, -0.488053, 70),
('33014', 'Les Artigues-de-Lussac', '30T', 725634, 4983756, 44.9714, -0.138606, 50),
('33015', 'Arveyres', '30T', 714657, 4973646, 44.8839, -0.281945, 20),
('33016', 'Asques', '30T', 704261, 4980782, 44.9511, -0.410562, 32),
('33017', 'Aubiac', '30T', 719031, 4928075, 44.4728, -0.246117, 96),
('33018', 'Aubie-et-Espessas', '30T', 704237, 4988410, 45.0197, -0.407774, 49),
('33019', 'Audenge', '30T', 657422, 4949539, 44.6819, -1.01361, 7),
('33020', 'Auriolles', '31T', 266537, 4958423, 44.7411, 0.0511093, 93),
('33021', 'Auros', '30T', 726876, 4930846, 44.4953, -0.146386, 104),
('33022', 'Avensan', '30T', 676635, 4989316, 45.0353, -0.757498, 30),
('33023', 'Ayguemorte-les-Graves', '30T', 699571, 4953824, 44.71, -0.480551, 10),
('33024', 'Bagas', '30T', 733513, 4945479, 44.6247, -0.0563826, 30),
('33025', 'Baigneaux', '30T', 722027, 4956103, 44.7239, -0.19639, 50),
('33026', 'Balizac', '30T', 703360, 4929202, 44.4875, -0.442503, 43),
('33027', 'Barie', '30T', 729213, 4939177, 44.5694, -0.113327, 13),
('33028', 'Baron', '30T', 712559, 4966719, 44.8222, -0.311383, 53),
('33029', 'Le Barp', '30T', 677070, 4941587, 44.6058, -0.76861, 72),
('33030', 'Barsac', '30T', 713039, 4942826, 44.6072, -0.315278, 10),
('33031', 'Bassanne', '30T', 731172, 4938103, 44.5592, -0.0891695, 12),
('33032', 'Bassens', '30T', 696058, 4975058, 44.9019, -0.516673, 40),
('33033', 'Baurech', '30T', 702883, 4955657, 44.7256, -0.438052, 10),
('33034', 'Bayas', '30T', 719922, 4993566, 45.0614, -0.206668, 76),
('33035', 'Bayon-sur-Gironde', '30T', 689089, 4991742, 45.0539, -0.598607, 40),
('33036', 'Bazas', '30T', 721938, 4923910, 44.4344, -0.211394, 90),
('33037', 'Beautiran', '30T', 702212, 4953165, 44.7033, -0.447503, 8),
('33038', 'Bégadan', '30T', 665069, 5024733, 45.3567, -0.892501, 10),
('33039', 'Bègles', '30T', 694026, 4964588, 44.8083, -0.546391, 6),
('33040', 'Béguey', '30T', 712020, 4946993, 44.645, -0.326385, 20),
('33042', 'Belin-Béliet', '30T', 675735, 4928983, 44.4928, -0.789718, 40),
('33043', 'Bellebat', '30T', 720516, 4957781, 44.7394, -0.214723, 70),
('33044', 'Bellefond', '30T', 723998, 4960867, 44.7661, -0.169441, 60),
('33045', 'Belvès-de-Castillon', '30T', 734534, 4973694, 44.8781, -0.0305573, 100),
('33046', 'Bernos-Beaulac', '30T', 718563, 4917649, 44.3792, -0.256387, 90),
('33047', 'Berson', '30T', 689849, 4997818, 45.1083, -0.586663, 65),
('33048', 'Berthez', '30T', 727649, 4929607, 44.4839, -0.137221, 107),
('33049', 'Beychac-et-Caillau', '30T', 705508, 4972698, 44.8781, -0.398055, 50),
('33050', 'Bieujac', '30T', 726078, 4935977, 44.5417, -0.154164, 26),
('33051', 'Biganos', '30T', 660277, 4945441, 44.6444, -0.978889, 10),
('33052', 'Les Billaux', '30T', 717997, 4981328, 44.9519, -0.23639, 10),
('33053', 'Birac', '30T', 727997, 4922204, 44.4172, -0.136107, 129),
('33054', 'Blaignac', '30T', 733933, 4937492, 44.5528, -0.0547269, 50),
('33055', 'Blaignan', '30T', 666323, 5020937, 45.3222, -0.877778, 12),
('33056', 'Blanquefort', '30T', 686686, 4975797, 44.9111, -0.635005, 27),
('33057', 'Blasimon', '30T', 731624, 4959345, 44.75, -0.073889, 60),
('33058', 'Blaye', '30T', 684170, 4999813, 45.1278, -0.658058, 8),
('33059', 'Blésignac', '30T', 717079, 4961773, 44.7764, -0.256385, 59),
('33060', 'Bommes', '30T', 709993, 4936054, 44.5472, -0.356385, 30),
('33061', 'Bonnetan', '30T', 704718, 4966464, 44.8222, -0.410562, 50),
('33062', 'Bonzac', '30T', 719394, 4987277, 45.005, -0.216111, 40),
('33063', 'Bordeaux', '30T', 691649, 4968377, 44.8431, -0.574994, 16),
('33064', 'Bossugan', '30T', 733302, 4964071, 44.7919, -0.0505552, 30),
('33065', 'Bouliac', '30T', 697514, 4965559, 44.8161, -0.501947, 74),
('33066', 'Bourdelles', '31T', 261996, 4937949, 44.5556, 0.00333019, 15),
('33067', 'Bourg', '30T', 692390, 4990451, 45.0414, -0.557217, 31),
('33068', 'Bourideys', '30T', 702863, 4916061, 44.3694, -0.453887, 80),
('33069', 'Le Bouscat', '30T', 689974, 4970767, 44.865, -0.595275, 10),
('33070', 'Brach', '30T', 662396, 4989586, 45.0411, -0.938062, 31),
('33071', 'Branne', '30T', 722451, 4968042, 44.8311, -0.185829, 20),
('33072', 'Brannens', '30T', 726442, 4933766, 44.5217, -0.150558, 45),
('33073', 'Braud-et-Saint-Louis', '30T', 686443, 5013222, 45.2478, -0.624164, 8),
('33074', 'Brouqueyran', '30T', 724824, 4929446, 44.4833, -0.172773, 105),
('33075', 'Bruges', '30T', 688686, 4972736, 44.8831, -0.610831, 20),
('33076', 'Budos', '30T', 707836, 4934440, 44.5333, -0.384162, 65),
('33077', 'Cabanac-et-Villagrains', '30T', 694263, 4942111, 44.6061, -0.551938, 48),
('33078', 'Cabara', '30T', 724572, 4967745, 44.8278, -0.159161, 10),
('33079', 'Cadarsac', '30T', 714698, 4971115, 44.8611, -0.282498, 10),
('33080', 'Cadaujac', '30T', 695657, 4958676, 44.7547, -0.528057, 9),
('33081', 'Cadillac', '30T', 712847, 4945970, 44.6356, -0.316392, 10),
('33082', 'Cadillac-en-Fronsadais', '30T', 707185, 4982606, 44.9667, -0.372784, 28),
('33083', 'Camarsac', '30T', 708546, 4967730, 44.8325, -0.361673, 30),
('33084', 'Cambes', '30T', 701013, 4956309, 44.7319, -0.461386, 6),
('33085', 'Camblanes-et-Meynac', '30T', 698848, 4960102, 44.7667, -0.487224, 40),
('33086', 'Camiac-et-Saint-Denis', '30T', 714379, 4964215, 44.7992, -0.289443, 50),
('33087', 'Camiran', '30T', 732682, 4945881, 44.6286, -0.0666621, 30),
('33088', 'Camps-sur-l''Isle', '30T', 733767, 4989239, 45.0181, -0.0330584, 15),
('33089', 'Campugnan', '30T', 691450, 5005650, 45.1783, -0.563329, 35),
('33090', 'Canéjan', '30T', 685801, 4959372, 44.7636, -0.652217, 42),
('33091', 'Cantenac', '30T', 684924, 4988902, 45.0294, -0.652502, 5),
('33092', 'Cantois', '30T', 719371, 4952614, 44.6933, -0.231386, 56),
('33093', 'Capian', '30T', 711556, 4954391, 44.7117, -0.329173, 91),
('33094', 'Caplong', '31T', 273477, 4962284, 44.7781, 0.136943, 80),
('33095', 'Captieux', '30T', 718754, 4907956, 44.2919, -0.25806, 95),
('33096', 'Carbon-Blanc', '30T', 697308, 4974386, 44.8956, -0.501117, 20),
('33097', 'Carcans', '30T', 653827, 4993634, 45.0794, -1.04556, 21),
('33098', 'Cardan', '30T', 711196, 4951260, 44.6836, -0.335006, 80),
('33099', 'Carignan-de-Bordeaux', '30T', 700074, 4965237, 44.8125, -0.469728, 60),
('33100', 'Cars', '30T', 687107, 5000301, 45.1314, -0.62056, 50),
('33101', 'Cartelègue', '30T', 690179, 5006507, 45.1864, -0.579164, 22),
('33102', 'Casseuil', '30T', 729319, 4941158, 44.5872, -0.111111, 25),
('33103', 'Castelmoron-d''Albret', '30T', 736853, 4951872, 44.6811, -0.0113829, 55),
('33104', 'Castelnau-de-Médoc', '30T', 673334, 4988299, 45.0269, -0.799726, 20),
('33105', 'Castelviel', '30T', 725832, 4949963, 44.6675, -0.151112, 119),
('33106', 'Castets-en-Dorthe', '30T', 726140, 4937988, 44.5597, -0.152502, 30),
('33107', 'Castillon-de-Castets', '30T', 729248, 4936923, 44.5492, -0.11389, 53),
('33108', 'Castillon-la-Bataille', '30T', 733575, 4971064, 44.8547, -0.0438945, 20),
('33109', 'Castres-Gironde', '30T', 702433, 4952461, 44.6969, -0.444995, 10),
('33111', 'Caudrot', '30T', 726889, 4939929, 44.5769, -0.142228, 15),
('33112', 'Caumont', '30T', 737242, 4953277, 44.6936, -0.00582993, 80),
('33113', 'Cauvignac', '30T', 734007, 4922541, 44.4183, -0.0605605, 134),
('33114', 'Cavignac', '30T', 705475, 4997563, 45.1017, -0.38833, 67),
('33115', 'Cazalis', '30T', 708911, 4913286, 44.3428, -0.37917, 102),
('33116', 'Cazats', '30T', 722241, 4927998, 44.4711, -0.205838, 100),
('33117', 'Cazaugitat', '31T', 262891, 4955682, 44.7153, 0.00639111, 112),
('33118', 'Cénac', '30T', 700892, 4961587, 44.7794, -0.460834, 70),
('33119', 'Cenon', '30T', 695040, 4969560, 44.8528, -0.531671, 9),
('33120', 'Cérons', '30T', 711584, 4945496, 44.6317, -0.332494, 10),
('33121', 'Cessac', '30T', 723493, 4958285, 44.7431, -0.176946, 60),
('33122', 'Cestas', '30T', 683318, 4956923, 44.7422, -0.684447, 41),
('33123', 'Cézac', '30T', 703024, 4996218, 45.0903, -0.419997, 38),
('33124', 'Chamadelle', '30T', 730058, 4998497, 45.1025, -0.0758277, 50),
('33125', 'Cissac-Médoc', '30T', 670222, 5010449, 45.2269, -0.831661, 28),
('33126', 'Civrac-de-Blaye', '30T', 701176, 4998599, 45.1122, -0.442501, 40),
('33127', 'Civrac-sur-Dordogne', '30T', 730779, 4968151, 44.8294, -0.0805583, 6),
('33128', 'Civrac-en-Médoc', '30T', 664795, 5022719, 45.3386, -0.896668, 10),
('33129', 'Cleyrac', '30T', 734712, 4956182, 44.7206, -0.0363841, 70),
('33130', 'Coimères', '30T', 721882, 4930735, 44.4958, -0.209172, 102),
('33131', 'Coirac', '30T', 724531, 4952513, 44.6908, -0.166386, 53),
('33132', 'Comps', '30T', 689398, 4993111, 45.0661, -0.594169, 60),
('33133', 'Coubeyrac', '31T', 267314, 4963462, 44.7867, 0.0586108, 80),
('33134', 'Couquèques', '30T', 668612, 5023314, 45.3431, -0.847782, 7),
('33135', 'Courpiac', '30T', 723130, 4959879, 44.7575, -0.180828, 60),
('33136', 'Cours-de-Monségur', '31T', 271514, 4948481, 44.6533, 0.118334, 86),
('33137', 'Cours-les-Bains', '30T', 737612, 4918408, 44.38, -0.0172276, 140),
('33138', 'Coutras', '30T', 726238, 4991440, 45.0403, -0.127503, 10),
('33139', 'Coutures', '31T', 264125, 4947851, 44.6453, 0.0255574, 39),
('33140', 'Créon', '30T', 709984, 4961413, 44.7753, -0.346108, 100),
('33141', 'Croignon', '30T', 710022, 4966296, 44.8192, -0.343613, 50),
('33142', 'Cubnezais', '30T', 704065, 4994459, 45.0742, -0.407497, 45),
('33143', 'Cubzac-les-Ponts', '30T', 701130, 4982721, 44.9694, -0.449442, 30),
('33144', 'Cudos', '30T', 721519, 4918675, 44.3875, -0.218886, 110),
('33145', 'Cursan', '30T', 710826, 4964592, 44.8036, -0.334161, 70),
('33146', 'Cussac-Fort-Médoc', '30T', 678716, 4997866, 45.1117, -0.728052, 11),
('33147', 'Daignac', '30T', 717676, 4964264, 44.7986, -0.247783, 50),
('33148', 'Dardenac', '30T', 718189, 4962768, 44.785, -0.241946, 50),
('33149', 'Daubèze', '30T', 726558, 4955025, 44.7128, -0.139724, 60),
('33150', 'Dieulivol', '31T', 270989, 4951095, 44.6767, 0.110553, 70),
('33151', 'Donnezac', '30T', 700722, 5013628, 45.2475, -0.442219, 52),
('33152', 'Donzac', '30T', 716749, 4948015, 44.6528, -0.266386, 105),
('33153', 'Doulezon', '30T', 736969, 4964267, 44.7925, -0.00416786, 89),
('33154', 'Les Églisottes-et-Chalaures', '30T', 732555, 4997816, 45.0956, -0.0444476, 24),
('33155', 'Escaudes', '30T', 723274, 4910086, 44.3097, -0.20056, 89),
('33156', 'Escoussans', '30T', 716768, 4951383, 44.6831, -0.264722, 51),
('33157', 'Espiet', '30T', 717030, 4965169, 44.8069, -0.255556, 50),
('33158', 'Les Esseintes', '30T', 732735, 4943782, 44.6097, -0.0669459, 62),
('33159', 'Étauliers', '30T', 690661, 5010815, 45.225, -0.571385, 6),
('33160', 'Eynesse', '31T', 275002, 4967483, 44.8253, 0.153895, 19),
('33161', 'Eyrans', '30T', 687244, 5006790, 45.1897, -0.616385, 27),
('33162', 'Eysines', '30T', 685610, 4972801, 44.8844, -0.649723, 26),
('33163', 'Faleyras', '30T', 719514, 4961330, 44.7717, -0.225836, 76),
('33164', 'Fargues', '30T', 714804, 4934853, 44.535, -0.296386, 60),
('33165', 'Fargues-Saint-Hilaire', '30T', 702874, 4966406, 44.8222, -0.433886, 80),
('33166', 'Le Fieu', '30T', 733664, 4993839, 45.0594, -0.0322251, 80),
('33167', 'Floirac', '30T', 695615, 4967292, 44.8322, -0.525275, 70),
('33168', 'Flaujagues', '31T', 265791, 4968152, 44.8283, 0.0372246, 10),
('33169', 'Floudès', '30T', 732885, 4939617, 44.5722, -0.0669436, 12),
('33170', 'Fontet', '30T', 736191, 4938593, 44.5619, -0.0258314, 20),
('33171', 'Fossès-et-Baleyssac', '31T', 265469, 4942333, 44.5961, 0.0450027, 70),
('33172', 'Fours', '30T', 686359, 5004942, 45.1733, -0.628332, 20),
('33173', 'Francs', '30T', 736101, 4981230, 44.9453, -0.00722739, 80),
('33174', 'Fronsac', '30T', 715320, 4978086, 44.9236, -0.27167, 10),
('33175', 'Frontenac', '30T', 724720, 4957833, 44.7386, -0.161665, 61),
('33176', 'Gabarnac', '30T', 715900, 4943724, 44.6144, -0.278886, 80),
('33177', 'Gaillan-en-Médoc', '30T', 660263, 5021089, 45.325, -0.955002, 13),
('33178', 'Gajac', '30T', 728527, 4924138, 44.4344, -0.128606, 124),
('33179', 'Galgon', '30T', 715138, 4985464, 44.99, -0.270828, 25),
('33180', 'Gans', '30T', 727253, 4926380, 44.455, -0.143611, 97),
('33181', 'Gardegan-et-Tourtirac', '30T', 735385, 4976259, 44.9008, -0.0186053, 90),
('33182', 'Gauriac', '30T', 687862, 4993250, 45.0678, -0.613611, 60),
('33183', 'Gauriaguet', '30T', 705459, 4990581, 45.0389, -0.391393, 39),
('33184', 'Générac', '30T', 692647, 5005779, 45.1792, -0.548058, 44),
('33185', 'Génissac', '30T', 716668, 4970687, 44.8567, -0.257775, 20),
('33186', 'Gensac', '31T', 268595, 4965424, 44.8047, 0.0738908, 80),
('33187', 'Gironde-sur-Dropt', '30T', 731360, 4940891, 44.5842, -0.0855527, 20),
('33188', 'Giscos', '30T', 725651, 4906121, 44.2733, -0.172505, 100),
('33189', 'Gornac', '30T', 723537, 4949389, 44.6631, -0.180279, 106),
('33190', 'Goualade', '30T', 727682, 4910269, 44.31, -0.14528, 100),
('33191', 'Gours', '31T', 265390, 4986582, 44.9939, 0.0236119, 60),
('33192', 'Gradignan', '30T', 688912, 4960544, 44.7733, -0.612506, 36),
('33193', 'Grayan-et-l''Hôpital', '30T', 649758, 5034170, 45.445, -1.085, 5),
('33194', 'Grézillac', '30T', 720132, 4966418, 44.8172, -0.215835, 70),
('33195', 'Grignols', '30T', 735459, 4919133, 44.3872, -0.0438903, 140),
('33196', 'Guillac', '30T', 720479, 4964638, 44.8011, -0.212223, 70),
('33197', 'Guillos', '30T', 698471, 4935815, 44.5483, -0.501387, 80),
('33198', 'Guîtres', '30T', 721704, 4991435, 45.0417, -0.185002, 30),
('33199', 'Gujan-Mestras', '30T', 653266, 4944591, 44.6383, -1.0675, 4),
('33200', 'Le Haillan', '30T', 683402, 4971687, 44.875, -0.678062, 30),
('33201', 'Haux', '30T', 708323, 4956973, 44.7358, -0.368892, 70),
('33202', 'Hostens', '30T', 687793, 4929351, 44.4931, -0.63805, 76),
('33203', 'Hourtin', '30T', 652517, 5005366, 45.1853, -1.05861, 17),
('33204', 'Hure', '31T', 261844, 4936811, 44.5453, 0.00194474, 20),
('33205', 'Illats', '30T', 708729, 4941666, 44.5981, -0.370006, 30),
('33206', 'Isle-Saint-Georges', '30T', 700221, 4955574, 44.7256, -0.471667, 5),
('33207', 'Izon', '30T', 708118, 4977539, 44.9208, -0.363054, 7),
('33208', 'Jau-Dignac-et-Loirac', '30T', 658433, 5031511, 45.4192, -0.974994, 12),
('33209', 'Jugazan', '30T', 725170, 4962576, 44.7811, -0.153893, 60),
('33210', 'Juillac', '31T', 265765, 4966237, 44.8111, 0.0377786, 91),
('33211', 'Labarde', '30T', 686019, 4987421, 45.0158, -0.639161, 10),
('33212', 'Labescau', '30T', 731841, 4926171, 44.4517, -0.0861104, 130),
('33213', 'La Brède', '30T', 695948, 4950563, 44.6817, -0.527495, 18),
('33214', 'Lacanau', '30T', 651515, 4982278, 44.9778, -1.07834, 16),
('33215', 'Ladaux', '30T', 718440, 4953416, 44.7008, -0.24278, 50),
('33216', 'Lados', '30T', 727071, 4927794, 44.4678, -0.145276, 110),
('33218', 'Lagorce', '30T', 725267, 4994742, 45.0703, -0.138335, 70),
('33219', 'La Lande-de-Fronsac', '30T', 706577, 4983791, 44.9775, -0.38, 42),
('33220', 'Lamarque', '30T', 679661, 4996133, 45.0958, -0.71667, 10),
('33221', 'Lamothe-Landerron', '31T', 266192, 4938507, 44.5619, 0.0558381, 28),
('33222', 'Lalande-de-Pomerol', '30T', 720045, 4981738, 44.955, -0.210279, 20),
('33223', 'Landerrouat', '31T', 275190, 4958393, 44.7436, 0.160283, 96),
('33224', 'Landerrouet-sur-Ségur', '30T', 736086, 4948724, 44.6531, -0.0224983, 50),
('33225', 'Landiras', '30T', 705400, 4938100, 44.5669, -0.413332, 40),
('33226', 'Langoiran', '30T', 707821, 4953436, 44.7042, -0.376664, 90),
('33227', 'Langon', '30T', 718538, 4936800, 44.5514, -0.248617, 20),
('33228', 'Lansac', '30T', 693570, 4992680, 45.0611, -0.541389, 35),
('33229', 'Lanton', '30T', 655869, 4951817, 44.7028, -1.0325, 4),
('33230', 'Lapouyade', '30T', 713563, 4995821, 45.0836, -0.286385, 86),
('33231', 'Laroque', '30T', 713859, 4948722, 44.66, -0.302499, 60),
('33232', 'Lartigue', '30T', 731856, 4903897, 44.2514, -0.0958376, 120),
('33233', 'Laruscade', '30T', 709272, 4998521, 45.1092, -0.33972, 70),
('33234', 'Latresne', '30T', 699001, 4962269, 44.7861, -0.484445, 26),
('33235', 'Lavazan', '30T', 730238, 4919564, 44.3928, -0.109163, 117),
('33236', 'Lège-Cap-Ferret', '30T', 646739, 4962099, 44.7972, -1.14473, 9),
('33237', 'Léogeats', '30T', 709394, 4932020, 44.5111, -0.365555, 46),
('33238', 'Léognan', '30T', 690178, 4955671, 44.7292, -0.598337, 35),
('33239', 'Lerm-et-Musset', '30T', 726660, 4912241, 44.3281, -0.157221, 114),
('33240', 'Lesparre-Médoc', '30T', 661837, 5019184, 45.3075, -0.935553, 10),
('33241', 'Lestiac-sur-Garonne', '30T', 708101, 4952271, 44.6936, -0.373608, 10),
('33242', 'Les Lèves-et-Thoumeyragues', '31T', 276686, 4964087, 44.7953, 0.176662, 50),
('33243', 'Libourne', '30T', 718327, 4977446, 44.9169, -0.233889, 10),
('33244', 'Lignan-de-Bazas', '30T', 716865, 4923399, 44.4314, -0.275277, 103),
('33245', 'Lignan-de-Bordeaux', '30T', 703450, 4963489, 44.7958, -0.427774, 35),
('33246', 'Ligueux', '31T', 283862, 4962915, 44.7869, 0.26778, 65),
('33247', 'Listrac-de-Durèze', '31T', 266100, 4960941, 44.7636, 0.0444423, 70),
('33248', 'Listrac-Médoc', '30T', 674112, 4993508, 45.0736, -0.788051, 39),
('33249', 'Lormont', '30T', 695576, 4972171, 44.8761, -0.523887, 50),
('33250', 'Loubens', '30T', 735100, 4946123, 44.63, -0.0361089, 40),
('33251', 'Louchats', '30T', 693470, 4931711, 44.5128, -0.565828, 72),
('33252', 'Loupes', '30T', 705903, 4965174, 44.8103, -0.396111, 90),
('33253', 'Loupiac', '30T', 714393, 4944569, 44.6225, -0.297506, 16),
('33254', 'Loupiac-de-la-Réole', '30T', 734691, 4937303, 44.5508, -0.0452822, 52),
('33255', 'Lucmau', '30T', 714668, 4913473, 44.3428, -0.306948, 73),
('33256', 'Ludon-Médoc', '30T', 689065, 4983680, 44.9814, -0.601941, 10),
('33257', 'Lugaignac', '30T', 721978, 4966450, 44.8169, -0.192501, 50);
INSERT INTO `ods_communes` (`oc_code_insee`, `oc_nom`, `oc_secteur`, `oc_x_utm`, `oc_y_utm`, `oc_latitude`, `oc_longitude`, `oc_altitude`) VALUES
('33258', 'Lugasson', '30T', 724782, 4959195, 44.7508, -0.160283, 65),
('33259', 'Lugon-et-l''Île-du-Carnay', '30T', 709465, 4981290, 44.9542, -0.34445, 40),
('33260', 'Lugos', '30T', 668496, 4927711, 44.4831, -0.881116, 38),
('33261', 'Lussac', '30T', 729071, 4981468, 44.9497, -0.0961141, 70),
('33262', 'Macau', '30T', 688141, 4986773, 45.0094, -0.612496, 5),
('33263', 'Madirac', '30T', 706363, 4959073, 44.7553, -0.392772, 83),
('33264', 'Maransin', '30T', 715180, 4994578, 45.0719, -0.266395, 80),
('33266', 'Marcenais', '30T', 709632, 4992910, 45.0586, -0.337495, 34),
('33267', 'Marcillac', '30T', 694372, 5015777, 45.2686, -0.522218, 50),
('33268', 'Margaux', '30T', 682945, 4989957, 45.0394, -0.677219, 16),
('33269', 'Margueron', '31T', 282256, 4960313, 44.7631, 0.248614, 120),
('33270', 'Marimbault', '30T', 717563, 4921044, 44.41, -0.267504, 100),
('33271', 'Marions', '30T', 731781, 4918538, 44.3831, -0.090272, 113),
('33272', 'Marsas', '30T', 706096, 4993907, 45.0686, -0.381949, 61),
('33273', 'Martignas-sur-Jalle', '30T', 675897, 4967555, 44.8397, -0.774438, 35),
('33274', 'Martillac', '30T', 694807, 4954049, 44.7133, -0.540551, 40),
('33275', 'Martres', '30T', 724344, 4954700, 44.7106, -0.167784, 50),
('33276', 'Masseilles', '30T', 734654, 4921174, 44.4058, -0.0530618, 140),
('33277', 'Massugas', '31T', 269332, 4961443, 44.7692, 0.0850015, 78),
('33278', 'Mauriac', '30T', 734719, 4958994, 44.7458, -0.0350032, 80),
('33279', 'Mazères', '30T', 717958, 4930417, 44.4942, -0.258606, 80),
('33280', 'Mazion', '30T', 687400, 5003707, 45.1619, -0.615559, 30),
('33281', 'Mérignac', '30T', 686138, 4968215, 44.8431, -0.644727, 35),
('33282', 'Mérignas', '30T', 730535, 4963322, 44.7861, -0.0858297, 76),
('33283', 'Mesterrieux', '30T', 736730, 4948006, 44.6464, -0.0147186, 50),
('33284', 'Mios', '30T', 663864, 4941332, 44.6067, -0.934997, 13),
('33285', 'Mombrier', '30T', 692595, 4994534, 45.0781, -0.55305, 40),
('33287', 'Mongauzy', '31T', 264522, 4939371, 44.5692, 0.034442, 22),
('33288', 'Monprimblanc', '30T', 716692, 4945109, 44.6267, -0.268331, 100),
('33289', 'Monségur', '31T', 268493, 4948496, 44.6525, 0.0802758, 60),
('33290', 'Montagne', '30T', 726541, 4979184, 44.93, -0.12917, 70),
('33291', 'Montagoudin', '31T', 261986, 4940669, 44.58, 0.00194747, 90),
('33292', 'Montignac', '30T', 720088, 4954831, 44.7131, -0.221394, 60),
('33293', 'Montussan', '30T', 703324, 4972999, 44.8814, -0.425558, 48),
('33294', 'Morizès', '30T', 731117, 4943971, 44.6119, -0.0872255, 16),
('33295', 'Mouillac', '30T', 708678, 4987257, 45.0081, -0.351946, 48),
('33296', 'Mouliets-et-Villemartin', '30T', 735911, 4969697, 44.8417, -0.0150056, 10),
('33297', 'Moulis-en-Médoc', '30T', 675486, 4992064, 45.0603, -0.771114, 19),
('33298', 'Moulon', '30T', 719552, 4969889, 44.8486, -0.221662, 10),
('33299', 'Mourens', '30T', 721434, 4947710, 44.6486, -0.2075, 110),
('33300', 'Naujac-sur-Mer', '30T', 654992, 5013084, 45.2542, -1.02472, 18),
('33301', 'Naujan-et-Postiac', '30T', 723074, 4963399, 44.7892, -0.179994, 59),
('33302', 'Néac', '30T', 722442, 4979689, 44.9358, -0.180829, 20),
('33303', 'Nérigean', '30T', 714390, 4969158, 44.8436, -0.287219, 70),
('33304', 'Neuffons', '31T', 262580, 4948433, 44.65, 0.00583157, 70),
('33305', 'Le Nizan', '30T', 717292, 4928510, 44.4772, -0.267774, 107),
('33306', 'Noaillac', '30T', 737744, 4933583, 44.5164, -0.0086114, 40),
('33307', 'Noaillan', '30T', 709553, 4928473, 44.4792, -0.364995, 30),
('33308', 'Omet', '30T', 715891, 4947955, 44.6525, -0.27722, 102),
('33309', 'Ordonnac', '30T', 669743, 5019330, 45.3069, -0.834722, 10),
('33310', 'Origne', '30T', 698771, 4929616, 44.4925, -0.500001, 55),
('33311', 'Paillet', '30T', 708923, 4951371, 44.6853, -0.363612, 10),
('33312', 'Parempuyre', '30T', 689128, 4980069, 44.9489, -0.602497, 9),
('33314', 'Pauillac', '30T', 676933, 5007699, 45.2006, -0.747217, 4),
('33315', 'Les Peintures', '30T', 728555, 4994643, 45.0683, -0.0966642, 15),
('33316', 'Pellegrue', '31T', 268394, 4958634, 44.7436, 0.0744388, 100),
('33317', 'Périssac', '30T', 710934, 4988628, 45.0197, -0.322774, 56),
('33318', 'Pessac', '30T', 687618, 4964181, 44.8064, -0.627505, 26),
('33319', 'Pessac-sur-Dordogne', '31T', 269211, 4967255, 44.8214, 0.0808389, 10),
('33320', 'Petit-Palais-et-Cornemps', '30T', 731579, 4984926, 44.98, -0.0627749, 30),
('33321', 'Peujard', '30T', 701748, 4990215, 45.0367, -0.438609, 33),
('33322', 'Le Pian-Médoc', '30T', 685760, 4982008, 44.9672, -0.644442, 20),
('33323', 'Le Pian-sur-Garonne', '30T', 721300, 4940662, 44.5853, -0.212224, 100),
('33324', 'Pineuilh', '31T', 281479, 4967228, 44.825, 0.235838, 32),
('33325', 'Plassac', '30T', 685278, 4997066, 45.1028, -0.644997, 10),
('33326', 'Pleine-Selve', '30T', 689906, 5022127, 45.3269, -0.576665, 50),
('33327', 'Podensac', '30T', 709972, 4947575, 44.6508, -0.351944, 10),
('33328', 'Pomerol', '30T', 720473, 4978231, 44.9233, -0.20639, 36),
('33329', 'Pompéjac', '30T', 715826, 4920029, 44.4014, -0.289717, 90),
('33330', 'Pompignac', '30T', 702575, 4969608, 44.8511, -0.436387, 70),
('33331', 'Pondaurat', '30T', 731505, 4935582, 44.5364, -0.0861139, 27),
('33332', 'Porchères', '31T', 264461, 4990510, 45.0289, 0.0100037, 20),
('33333', 'Le Porge', '30T', 650716, 4970619, 44.8731, -1.09194, 20),
('33334', 'Portets', '30T', 704238, 4952487, 44.6967, -0.422226, 16),
('33335', 'Le Pout', '30T', 709135, 4964506, 44.8033, -0.355556, 95),
('33336', 'Préchac', '30T', 710881, 4919558, 44.3986, -0.35194, 51),
('33337', 'Preignac', '30T', 714732, 4940348, 44.5844, -0.295001, 10),
('33338', 'Prignac-en-Médoc', '30T', 663653, 5021423, 45.3272, -0.911663, 16),
('33339', 'Prignac-et-Marcamps', '30T', 697470, 4989742, 45.0336, -0.493056, 30),
('33341', 'Pugnac', '30T', 697076, 4995382, 45.0844, -0.495839, 40),
('33342', 'Puisseguin', '30T', 731064, 4978543, 44.9228, -0.0722199, 80),
('33343', 'Pujols-sur-Ciron', '30T', 710287, 4937886, 44.5636, -0.351941, 21),
('33344', 'Pujols', '30T', 734728, 4965977, 44.8086, -0.0316723, 52),
('33345', 'Le Puy', '31T', 265898, 4949300, 44.6589, 0.0472241, 60),
('33346', 'Puybarban', '30T', 732478, 4937409, 44.5525, -0.0730592, 51),
('33347', 'Puynormand', '30T', 736327, 4985224, 44.9811, -0.00249576, 100),
('33348', 'Queyrac', '30T', 658415, 5025304, 45.3633, -0.977218, 5),
('33349', 'Quinsac', '30T', 698970, 4958994, 44.7567, -0.486116, 50),
('33350', 'Rauzan', '30T', 727420, 4962439, 44.7792, -0.125551, 60),
('33351', 'Reignac', '30T', 695624, 5011955, 45.2339, -0.507778, 60),
('33352', 'La Réole', '30T', 735356, 4940911, 44.5831, -0.0352724, 30),
('33353', 'Rimons', '31T', 262701, 4951117, 44.6742, 0.00611275, 60),
('33354', 'Riocaud', '31T', 279116, 4960543, 44.7642, 0.208884, 80),
('33355', 'Rions', '30T', 710145, 4949032, 44.6639, -0.349168, 21),
('33356', 'La Rivière', '30T', 712521, 4979105, 44.9336, -0.306668, 10),
('33357', 'Roaillan', '30T', 716174, 4930852, 44.4986, -0.280837, 74),
('33358', 'Romagne', '30T', 721910, 4960146, 44.7603, -0.196108, 60),
('33359', 'Roquebrune', '31T', 263928, 4946097, 44.6294, 0.0238834, 40),
('33360', 'La Roquille', '31T', 281086, 4962793, 44.785, 0.232781, 90),
('33361', 'Ruch', '30T', 734330, 4962440, 44.7769, -0.0383268, 70),
('33362', 'Sablons', '30T', 721045, 4989589, 45.0253, -0.194171, 5),
('33363', 'Sadirac', '30T', 704996, 4961901, 44.7811, -0.408888, 60),
('33364', 'Saillans', '30T', 714941, 4982182, 44.9606, -0.274724, 60),
('33365', 'Saint-Aignan', '30T', 713253, 4980179, 44.9431, -0.296949, 50),
('33366', 'Saint-André-de-Cubzac', '30T', 701309, 4985383, 44.9933, -0.446111, 30),
('33367', 'Saint-André-du-Bois', '30T', 723629, 4942905, 44.6047, -0.181945, 110),
('33369', 'Saint-André-et-Appelles', '31T', 279740, 4965897, 44.8125, 0.214444, 86),
('33370', 'Saint-Androny', '30T', 684710, 5006809, 45.1906, -0.648609, 5),
('33371', 'Saint-Antoine', '30T', 703175, 4988037, 45.0167, -0.42139, 40),
('33372', 'Saint-Antoine-du-Queyret', '31T', 263245, 4961108, 44.7642, 0.00833777, 100),
('33373', 'Saint-Antoine-sur-l''Isle', '31T', 266867, 4990390, 45.0286, 0.0405608, 31),
('33374', 'Saint-Aubin-de-Blaye', '30T', 691411, 5015594, 45.2678, -0.56, 20),
('33375', 'Saint-Aubin-de-Branne', '30T', 723743, 4965647, 44.8092, -0.170558, 70),
('33376', 'Saint-Aubin-de-Médoc', '30T', 679666, 4975720, 44.9122, -0.723892, 35),
('33377', 'Saint-Avit-de-Soulège', '31T', 272804, 4966262, 44.8136, 0.126672, 80),
('33378', 'Saint-Avit-Saint-Nazaire', '31T', 283402, 4970159, 44.8519, 0.258885, 23),
('33379', 'Saint-Brice', '30T', 726043, 4953369, 44.6981, -0.14695, 70),
('33380', 'Saint-Caprais-de-Blaye', '30T', 691288, 5017505, 45.285, -0.56083, 30),
('33381', 'Saint-Caprais-de-Bordeaux', '30T', 703097, 4958629, 44.7522, -0.43417, 69),
('33382', 'Saint-Christoly-de-Blaye', '30T', 696042, 5000539, 45.1311, -0.506945, 39),
('33383', 'Saint-Christoly-Médoc', '30T', 670340, 5024657, 45.3547, -0.825278, 10),
('33384', 'Saint-Christophe-des-Bardes', '30T', 727221, 4975501, 44.8967, -0.122218, 80),
('33385', 'Saint-Christophe-de-Double', '31T', 265140, 4996448, 45.0825, 0.0158339, 90),
('33386', 'Saint-Cibard', '30T', 735004, 4980046, 44.935, -0.0216647, 60),
('33387', 'Saint-Ciers-d''Abzac', '30T', 714628, 4990173, 45.0325, -0.275282, 40),
('33388', 'Saint-Ciers-de-Canesse', '30T', 688338, 4994901, 45.0825, -0.60695, 40),
('33389', 'Saint-Ciers-sur-Gironde', '30T', 687432, 5018131, 45.2917, -0.609719, 30),
('33390', 'Sainte-Colombe', '30T', 731592, 4973649, 44.8786, -0.0677776, 40),
('33391', 'Saint-Côme', '30T', 724422, 4923130, 44.4267, -0.180558, 80),
('33392', 'Sainte-Croix-du-Mont', '30T', 716043, 4941412, 44.5936, -0.278058, 80),
('33393', 'Saint-Denis-de-Pile', '30T', 720370, 4985673, 44.9903, -0.204444, 10),
('33394', 'Saint-Émilion', '30T', 724630, 4974853, 44.8917, -0.15528, 70),
('33395', 'Saint-Estèphe', '30T', 674837, 5014805, 45.265, -0.771386, 15),
('33396', 'Saint-Étienne-de-Lisse', '30T', 729285, 4973659, 44.8794, -0.0969447, 21),
('33397', 'Sainte-Eulalie', '30T', 699589, 4975877, 44.9083, -0.471668, 35),
('33398', 'Saint-Exupéry', '30T', 730025, 4945508, 44.6261, -0.100282, 50),
('33399', 'Saint-Félix-de-Foncaude', '30T', 729289, 4948849, 44.6564, -0.108055, 60),
('33400', 'Saint-Ferme', '31T', 266920, 4953187, 44.6942, 0.0583288, 100),
('33401', 'Sainte-Florence', '30T', 730076, 4966303, 44.8131, -0.0902766, 20),
('33402', 'Sainte-Foy-la-Grande', '31T', 280331, 4969028, 44.8408, 0.220555, 20),
('33403', 'Sainte-Foy-la-Longue', '30T', 726609, 4943534, 44.6094, -0.144162, 110),
('33404', 'Sainte-Gemme', '31T', 267512, 4945133, 44.6219, 0.0694433, 70),
('33405', 'Saint-Genès-de-Blaye', '30T', 685484, 5003496, 45.1606, -0.639996, 20),
('33406', 'Saint-Genès-de-Castillon', '30T', 731737, 4975724, 44.8972, -0.0649948, 70),
('33407', 'Saint-Genès-de-Fronsac', '30T', 708333, 4989099, 45.0247, -0.355556, 60),
('33408', 'Saint-Genès-de-Lombaud', '30T', 708285, 4958825, 44.7525, -0.368616, 50),
('33409', 'Saint-Genis-du-Bois', '30T', 723798, 4953940, 44.7039, -0.175001, 50),
('33411', 'Saint-Germain-de-Grave', '30T', 720578, 4944993, 44.6244, -0.21945, 100),
('33412', 'Saint-Germain-d''Esteuil', '30T', 667529, 5017356, 45.2897, -0.863612, 12),
('33413', 'Saint-Germain-du-Puch', '30T', 711771, 4970585, 44.8572, -0.319727, 60),
('33414', 'Saint-Germain-de-la-Rivière', '30T', 710604, 4980679, 44.9483, -0.33028, 10),
('33415', 'Saint-Gervais', '30T', 699863, 4988148, 45.0186, -0.463339, 40),
('33416', 'Saint-Girons-d''Aiguevives', '30T', 693324, 5001475, 45.1403, -0.541116, 40),
('33417', 'Sainte-Hélène', '30T', 667013, 4981306, 44.9656, -0.882227, 42),
('33418', 'Saint-Hilaire-de-la-Noaille', '31T', 262140, 4943073, 44.6017, 0.00277306, 60),
('33419', 'Saint-Hilaire-du-Bois', '30T', 731555, 4949610, 44.6625, -0.0791681, 60),
('33420', 'Saint-Hippolyte', '30T', 727546, 4973751, 44.8808, -0.118894, 90),
('33421', 'Saint-Jean-de-Blaignac', '30T', 726387, 4966141, 44.8128, -0.136944, 20),
('33422', 'Saint-Jean-d''Illac', '30T', 675630, 4964429, 44.8117, -0.778894, 46),
('33423', 'Saint-Julien-Beychevelle', '30T', 677720, 5003768, 45.165, -0.738605, 16),
('33424', 'Saint-Laurent-Médoc', '30T', 671257, 5002015, 45.1508, -0.821384, 10),
('33425', 'Saint-Laurent-d''Arce', '30T', 699303, 4989953, 45.035, -0.469724, 36),
('33426', 'Saint-Laurent-des-Combes', '30T', 726242, 4973983, 44.8833, -0.13528, 60),
('33427', 'Saint-Laurent-du-Bois', '30T', 727301, 4946431, 44.6353, -0.134169, 87),
('33428', 'Saint-Laurent-du-Plan', '30T', 728802, 4945156, 44.6233, -0.115837, 53),
('33429', 'Saint-Léger-de-Balson', '30T', 701871, 4923040, 44.4325, -0.463613, 52),
('33431', 'Saint-Léon', '30T', 715370, 4960233, 44.7631, -0.278611, 70),
('33432', 'Saint-Loubert', '30T', 724951, 4937884, 44.5592, -0.167501, 30),
('33433', 'Saint-Loubès', '30T', 702868, 4977000, 44.9175, -0.429722, 20),
('33434', 'Saint-Louis-de-Montferrand', '30T', 694598, 4980480, 44.9511, -0.533061, 5),
('33435', 'Saint-Macaire', '30T', 720233, 4938278, 44.5642, -0.22667, 10),
('33436', 'Saint-Magne', '30T', 686339, 4933015, 44.5264, -0.655001, 68),
('33437', 'Saint-Magne-de-Castillon', '30T', 731804, 4972050, 44.8642, -0.0658281, 21),
('33438', 'Saint-Maixant', '30T', 717272, 4939661, 44.5775, -0.263331, 11),
('33439', 'Saint-Mariens', '30T', 704265, 4999130, 45.1161, -0.403055, 67),
('33440', 'Saint-Martial', '30T', 724141, 4946599, 44.6378, -0.173889, 85),
('33441', 'Saint-Martin-Lacaussade', '30T', 685203, 5001882, 45.1461, -0.644166, 18),
('33442', 'Saint-Martin-de-Laye', '30T', 719229, 4990793, 45.0367, -0.21667, 60),
('33443', 'Saint-Martin-de-Lerm', '30T', 734744, 4948026, 44.6472, -0.0397205, 60),
('33444', 'Saint-Martin-de-Sescas', '30T', 725572, 4939729, 44.5756, -0.158883, 20),
('33445', 'Saint-Martin-du-Bois', '30T', 715436, 4989613, 45.0272, -0.265276, 40),
('33446', 'Saint-Martin-du-Puy', '30T', 735811, 4950815, 44.6719, -0.0249998, 53),
('33447', 'Saint-Médard-de-Guizières', '30T', 731891, 4989016, 45.0167, -0.0569396, 15),
('33448', 'Saint-Médard-d''Eyrans', '30T', 697554, 4954935, 44.7206, -0.50556, 19),
('33449', 'Saint-Médard-en-Jalles', '30T', 680557, 4973707, 44.8939, -0.713332, 20),
('33450', 'Saint-Michel-de-Castelnau', '30T', 730606, 4907251, 44.2819, -0.109996, 102),
('33451', 'Saint-Michel-de-Fronsac', '30T', 712932, 4978624, 44.9292, -0.301668, 10),
('33452', 'Saint-Michel-de-Rieufret', '30T', 703841, 4944135, 44.6217, -0.430553, 34),
('33453', 'Saint-Michel-de-Lapujade', '31T', 267381, 4940874, 44.5836, 0.0697213, 85),
('33454', 'Saint-Morillon', '30T', 698169, 4947110, 44.65, -0.500832, 20),
('33456', 'Saint-Palais', '30T', 688970, 5020648, 45.3139, -0.589163, 70),
('33457', 'Saint-Pardon-de-Conques', '30T', 723942, 4937695, 44.5578, -0.180273, 20),
('33458', 'Saint-Paul', '30T', 688321, 5002128, 45.1475, -0.604446, 31),
('33459', 'Saint-Pey-d''Armens', '30T', 728103, 4971083, 44.8567, -0.11305, 12),
('33460', 'Saint-Pey-de-Castets', '30T', 731948, 4966216, 44.8117, -0.0666723, 70),
('33461', 'Saint-Philippe-d''Aiguille', '30T', 734411, 4977645, 44.9136, -0.0302833, 107),
('33462', 'Saint-Philippe-du-Seignal', '31T', 283071, 4967514, 44.8281, 0.255831, 25),
('33463', 'Saint-Pierre-d''Aurillac', '30T', 722963, 4939175, 44.5714, -0.191944, 20),
('33464', 'Saint-Pierre-de-Bat', '30T', 719643, 4950430, 44.6736, -0.228894, 40),
('33465', 'Saint-Pierre-de-Mons', '30T', 720373, 4936769, 44.5506, -0.225554, 20),
('33466', 'Saint-Quentin-de-Baron', '30T', 714862, 4966208, 44.8169, -0.282501, 60),
('33467', 'Saint-Quentin-de-Caplong', '31T', 272996, 4962981, 44.7842, 0.13056, 92),
('33468', 'Sainte-Radegonde', '31T', 263919, 4965687, 44.8056, 0.0147202, 70),
('33470', 'Saint-Romain-la-Virvée', '30T', 705176, 4982355, 44.965, -0.398335, 40),
('33471', 'Saint-Sauveur', '30T', 670139, 5007852, 45.2036, -0.833605, 24),
('33472', 'Saint-Sauveur-de-Puynormand', '30T', 734534, 4986270, 44.9911, -0.02472, 78),
('33473', 'Saint-Savin', '30T', 700646, 5001517, 45.1386, -0.448062, 90),
('33474', 'Saint-Selve', '30T', 699838, 4949446, 44.6706, -0.478893, 15),
('33475', 'Saint-Seurin-de-Bourg', '30T', 690648, 4991573, 45.0519, -0.57889, 40),
('33476', 'Saint-Seurin-de-Cadourne', '30T', 673488, 5017054, 45.2856, -0.787782, 20),
('33477', 'Saint-Seurin-de-Cursac', '30T', 686445, 5003493, 45.1603, -0.62778, 20),
('33478', 'Saint-Seurin-sur-l''Isle', '30T', 736108, 4988770, 45.0131, -0.00360732, 20),
('33479', 'Saint-Sève', '30T', 735952, 4943930, 44.61, -0.0263896, 60),
('33480', 'Saint-Sulpice-de-Faleyrens', '30T', 721911, 4972843, 44.8744, -0.190553, 10),
('33481', 'Saint-Sulpice-de-Guilleragues', '31T', 266139, 4946202, 44.6311, 0.0516723, 60),
('33482', 'Saint-Sulpice-de-Pommiers', '30T', 728832, 4950532, 44.6717, -0.11306, 60),
('33483', 'Saint-Sulpice-et-Cameyrac', '30T', 706119, 4976239, 44.9097, -0.388885, 20),
('33484', 'Saint-Symphorien', '30T', 699916, 4922579, 44.4289, -0.48833, 50),
('33485', 'Sainte-Terre', '30T', 728189, 4968027, 44.8292, -0.113337, 6),
('33486', 'Saint-Trojan', '30T', 690508, 4995522, 45.0875, -0.579166, 80),
('33487', 'Saint-Vincent-de-Paul', '30T', 699628, 4980975, 44.9542, -0.469161, 4),
('33488', 'Saint-Vincent-de-Pertignas', '30T', 728635, 4964768, 44.7997, -0.109167, 60),
('33489', 'Saint-Vivien-de-Blaye', '30T', 695624, 4997067, 45.1, -0.513613, 20),
('33490', 'Saint-Vivien-de-Médoc', '30T', 653639, 5032781, 45.4317, -1.03584, 10),
('33491', 'Saint-Vivien-de-Monségur', '31T', 270470, 4944533, 44.6175, 0.10695, 76),
('33492', 'Saint-Yzan-de-Soudiac', '30T', 703607, 5001920, 45.1414, -0.410276, 67),
('33493', 'Saint-Yzans-de-Médoc', '30T', 670849, 5021151, 45.3231, -0.819996, 10),
('33494', 'Salaunes', '30T', 671285, 4978146, 44.9361, -0.829167, 48),
('33495', 'Salignac', '30T', 706504, 4988082, 45.0161, -0.379166, 50),
('33498', 'Salles', '30T', 669265, 4935511, 44.5531, -0.868895, 28),
('33499', 'Les Salles-de-Castillon', '31T', 264440, 4976266, 44.9008, 0.0163885, 80),
('33500', 'Samonac', '30T', 691385, 4994004, 45.0736, -0.568611, 50),
('33501', 'Saucats', '30T', 690695, 4947131, 44.6522, -0.594997, 50),
('33502', 'Saugon', '30T', 696207, 5005826, 45.1786, -0.502772, 50),
('33503', 'Saumos', '30T', 658901, 4976097, 44.9206, -0.986663, 30),
('33504', 'Sauternes', '30T', 711146, 4934547, 44.5333, -0.342503, 50),
('33505', 'La Sauve', '30T', 712945, 4961017, 44.7708, -0.308892, 100),
('33506', 'Sauveterre-de-Guyenne', '30T', 730949, 4952987, 44.6931, -0.0852792, 80),
('33507', 'Sauviac', '30T', 724104, 4920803, 44.4058, -0.185553, 90),
('33508', 'Savignac', '30T', 729971, 4933982, 44.5225, -0.10611, 50),
('33509', 'Savignac-de-l''Isle', '30T', 718139, 4985534, 44.9897, -0.232772, 20),
('33510', 'Semens', '30T', 719210, 4943712, 44.6133, -0.237222, 100),
('33511', 'Sendets', '30T', 731955, 4922962, 44.4228, -0.0861149, 130),
('33512', 'Sigalens', '30T', 735434, 4925960, 44.4486, -0.0411072, 130),
('33513', 'Sillas', '30T', 734441, 4918479, 44.3817, -0.056949, 125),
('33514', 'Soulac-sur-Mer', '30T', 646624, 5041784, 45.5142, -1.12278, 10),
('33515', 'Soulignac', '30T', 715391, 4953005, 44.6981, -0.281395, 70),
('33516', 'Soussac', '31T', 263984, 4957249, 44.7297, 0.0194482, 111),
('33517', 'Soussans', '30T', 681330, 4992072, 45.0589, -0.696944, 10),
('33518', 'Tabanac', '30T', 705581, 4955279, 44.7214, -0.40417, 70),
('33519', 'Le Taillan-Médoc', '30T', 684142, 4974982, 44.9044, -0.667503, 20),
('33520', 'Taillecavat', '31T', 274027, 4947837, 44.6483, 0.150273, 90),
('33521', 'Talais', '30T', 651727, 5037243, 45.4722, -1.05889, 5),
('33522', 'Talence', '30T', 690749, 4964644, 44.8097, -0.587774, 20),
('33523', 'Targon', '30T', 716682, 4957218, 44.7356, -0.263332, 70),
('33524', 'Tarnès', '30T', 708540, 4984101, 44.9797, -0.355002, 25),
('33525', 'Tauriac', '30T', 696825, 4991482, 45.0494, -0.500555, 22),
('33526', 'Tayac', '30T', 735961, 4982059, 44.9528, -0.00861216, 80),
('33527', 'Le Teich', '30T', 656794, 4944553, 44.6372, -1.02306, 5),
('33528', 'Le Temple', '30T', 658754, 4971400, 44.8783, -0.989998, 35),
('33529', 'La Teste-de-Buch', '30T', 647200, 4943833, 44.6328, -1.14416, 10),
('33530', 'Teuillac', '30T', 692967, 4995966, 45.0908, -0.547777, 40),
('33531', 'Tizac-de-Curton', '30T', 717567, 4966856, 44.8219, -0.248051, 59),
('33532', 'Tizac-de-Lapouyade', '30T', 712074, 4994536, 45.0725, -0.305827, 50),
('33533', 'Toulenne', '30T', 716929, 4937364, 44.5569, -0.268613, 30),
('33534', 'Le Tourne', '30T', 706145, 4954185, 44.7114, -0.397497, 7),
('33535', 'Tresses', '30T', 700521, 4969235, 44.8483, -0.462502, 60),
('33536', 'Le Tuzan', '30T', 692946, 4924778, 44.4506, -0.575001, 85),
('33537', 'Uzeste', '30T', 713136, 4924388, 44.4414, -0.32167, 68),
('33538', 'Valeyrac', '30T', 664737, 5029110, 45.3961, -0.895276, 5),
('33539', 'Vayres', '30T', 712195, 4975047, 44.8972, -0.312498, 11),
('33540', 'Vendays-Montalivet', '30T', 651952, 5024311, 45.3558, -1.06, 8),
('33541', 'Vensac', '30T', 653379, 5029193, 45.3994, -1.04027, 8),
('33542', 'Vérac', '30T', 709686, 4985251, 44.9897, -0.340004, 60),
('33543', 'Verdelais', '30T', 718421, 4940935, 44.5886, -0.248334, 40),
('33544', 'Le Verdon-sur-Mer', '30T', 651207, 5045290, 45.5447, -1.06305, 4),
('33545', 'Vertheuil', '30T', 669911, 5013065, 45.2506, -0.834726, 20),
('33546', 'Vignonet', '30T', 724219, 4969649, 44.845, -0.16278, 6),
('33547', 'Villandraut', '30T', 708990, 4926014, 44.4572, -0.373059, 30),
('33548', 'Villegouge', '30T', 712484, 4982872, 44.9675, -0.305551, 54),
('33549', 'Villenave-de-Rions', '30T', 711016, 4952057, 44.6908, -0.336946, 100),
('33550', 'Villenave-d''Ornon', '30T', 694667, 4960839, 44.7744, -0.539727, 10),
('33551', 'Villeneuve', '30T', 686743, 4994854, 45.0825, -0.627216, 30),
('33552', 'Virelade', '30T', 707619, 4948765, 44.6622, -0.381106, 15),
('33553', 'Virsac', '30T', 701795, 4989414, 45.0294, -0.438335, 47),
('33554', 'Yvrac', '30T', 700603, 4972944, 44.8817, -0.459998, 70),
('33555', 'Marcheprime', '30T', 669984, 4951000, 44.6922, -0.854721, 50),
('34001', 'Abeilhan', '31T', 523891, 4810800, 43.4497, 3.29527, 90),
('34002', 'Adissan', '31T', 534608, 4820348, 43.5353, 3.42833, 60),
('34003', 'Agde', '31T', 538158, 4795780, 43.3139, 3.47055, 7),
('34004', 'Agel', '31T', 487999, 4798398, 43.3383, 2.85195, 100),
('34005', 'Agonès', '31T', 558613, 4859883, 43.8897, 3.72972, 180),
('34006', 'Aigne', '31T', 483494, 4797791, 43.3328, 2.79639, 148),
('34007', 'Aigues-Vives', '31T', 485252, 4798372, 43.3381, 2.81806, 120),
('34008', 'Les Aires', '31T', 506369, 4825692, 43.5842, 3.07889, 179),
('34009', 'Alignan-du-Vent', '31T', 527613, 4813005, 43.4694, 3.34139, 96),
('34010', 'Aniane', '31T', 547328, 4837086, 43.6853, 3.58722, 70),
('34011', 'Arboras', '31T', 539028, 4839932, 43.7114, 3.48445, 252),
('34012', 'Argelliers', '31T', 554124, 4838402, 43.6967, 3.67167, 235),
('34013', 'Aspiran', '31T', 536317, 4823843, 43.5667, 3.44972, 80),
('34014', 'Assas', '31T', 572517, 4839194, 43.7022, 3.9, 120),
('34015', 'Assignan', '31T', 490980, 4805026, 43.3981, 2.88861, 284),
('34016', 'Aumelas', '31T', 548378, 4828177, 43.605, 3.59945, 180),
('34017', 'Aumes', '31T', 537433, 4812774, 43.4669, 3.46277, 50),
('34018', 'Autignac', '31T', 513609, 4816386, 43.5003, 3.16834, 160),
('34019', 'Avène', '31T', 508855, 4844729, 43.7556, 3.11, 373),
('34020', 'Azillanet', '31T', 478649, 4796878, 43.3244, 2.73666, 100),
('34021', 'Babeau-Bouldoux', '31T', 492514, 4809219, 43.4358, 2.9075, 190),
('34022', 'Baillargues', '31T', 581751, 4834579, 43.6597, 4.01389, 25),
('34023', 'Balaruc-les-Bains', '31T', 554982, 4810087, 43.4417, 3.67944, 10),
('34024', 'Balaruc-le-Vieux', '31T', 555348, 4812095, 43.4597, 3.68417, 15),
('34025', 'Bassan', '31T', 520533, 4806563, 43.4117, 3.25361, 83),
('34026', 'Beaufort', '31T', 480263, 4793974, 43.2983, 2.75667, 86),
('34027', 'Beaulieu', '31T', 582284, 4842238, 43.7286, 4.02167, 100),
('34028', 'Bédarieux', '31T', 512776, 4829218, 43.6158, 3.15834, 201),
('34029', 'Bélarga', '31T', 539422, 4822288, 43.5525, 3.48805, 20),
('34030', 'Berlou', '31T', 496474, 4815324, 43.4908, 2.95639, 200),
('34031', 'Bessan', '31T', 534393, 4800973, 43.3608, 3.42445, 11),
('34032', 'Béziers', '31T', 517696, 4799151, 43.345, 3.21833, 50),
('34033', 'Boisseron', '31T', 586914, 4845783, 43.76, 4.07972, 30),
('34034', 'Boisset', '31T', 475821, 4805680, 43.4036, 2.70139, 400),
('34035', 'La Boissière', '31T', 552003, 4834776, 43.6642, 3.645, 210),
('34036', 'Le Bosc', '31T', 530949, 4839859, 43.7111, 3.38416, 220),
('34037', 'Boujan-sur-Libron', '31T', 520164, 4802212, 43.3725, 3.24889, 50),
('34038', 'Le Bousquet-d''Orb', '31T', 513185, 4837857, 43.6936, 3.16361, 250),
('34039', 'Bouzigues', '31T', 553312, 4810876, 43.4489, 3.65888, 5),
('34040', 'Brenas', '31T', 520697, 4833557, 43.6547, 3.25667, 440),
('34041', 'Brignac', '31T', 538188, 4830117, 43.6231, 3.47333, 64),
('34042', 'Brissac', '31T', 556393, 4858568, 43.8781, 3.70194, 145),
('34043', 'Buzignargues', '31T', 580729, 4846848, 43.7703, 4.00306, 60),
('34044', 'Cabrerolles', '31T', 510031, 4821439, 43.5458, 3.12417, 307),
('34045', 'Cabrières', '31T', 529157, 4824888, 43.5764, 3.36111, 110),
('34046', 'Cambon-et-Salvergues', '31T', 488637, 4829370, 43.6172, 2.85917, 878),
('34047', 'Campagnan', '31T', 540262, 4820781, 43.5389, 3.49834, 50),
('34048', 'Campagne', '31T', 582805, 4848910, 43.7886, 4.02917, 54),
('34049', 'Camplong', '31T', 509427, 4835598, 43.6733, 3.11694, 320),
('34050', 'Candillargues', '31T', 586423, 4830164, 43.6194, 4.07112, 2),
('34051', 'Canet', '31T', 539592, 4827749, 43.6017, 3.49055, 35),
('34052', 'Capestang', '31T', 503581, 4797216, 43.3278, 3.04417, 20),
('34053', 'Carlencas-et-Levas', '31T', 518284, 4831174, 43.6333, 3.22666, 458),
('34054', 'Cassagnoles', '31T', 469154, 4803856, 43.3869, 2.61916, 420),
('34055', 'Castanet-le-Haut', '31T', 496306, 4837320, 43.6889, 2.95416, 440),
('34056', 'Castelnau-de-Guers', '31T', 535519, 4809309, 43.4358, 3.43889, 50),
('34057', 'Castelnau-le-Lez', '31T', 572354, 4831509, 43.6331, 3.89695, 40),
('34058', 'Castries', '31T', 579511, 4836496, 43.6772, 3.98639, 55),
('34059', 'La Caunette', '31T', 482014, 4800139, 43.3539, 2.77806, 150),
('34060', 'Causse-de-la-Selle', '31T', 552105, 4850357, 43.8044, 3.64777, 244),
('34061', 'Causses-et-Veyran', '31T', 506942, 4813538, 43.4747, 3.08583, 150),
('34062', 'Caussiniojouls', '31T', 512206, 4822152, 43.5522, 3.15111, 310),
('34063', 'Caux', '31T', 529752, 4817240, 43.5075, 3.36806, 93),
('34064', 'Le Caylar', '31T', 525492, 4856558, 43.8617, 3.31722, 760),
('34065', 'Cazedarnes', '31T', 501889, 4807797, 43.4231, 3.02334, 150),
('34066', 'Cazevieille', '31T', 563359, 4846567, 43.7694, 3.78722, 300),
('34067', 'Cazilhac', '31T', 555887, 4863038, 43.9183, 3.69612, 162),
('34068', 'Cazouls-d''Hérault', '31T', 536937, 4817276, 43.5075, 3.45695, 17),
('34069', 'Cazouls-lès-Béziers', '31T', 508279, 4804469, 43.3931, 3.10223, 70),
('34070', 'Cébazan', '31T', 497796, 4805668, 43.4039, 2.97278, 157),
('34071', 'Ceilhes-et-Rocozels', '31T', 508915, 4850129, 43.8042, 3.11083, 440),
('34072', 'Celles', '31T', 527413, 4834476, 43.6628, 3.34, 140),
('34073', 'Cers', '31T', 524775, 4796736, 43.3231, 3.30556, 10),
('34074', 'Cessenon-sur-Orb', '31T', 504046, 4810821, 43.4503, 3.05001, 60),
('34075', 'Cesseras', '31T', 476826, 4797039, 43.3258, 2.71417, 84),
('34076', 'Ceyras', '31T', 536897, 4832609, 43.6456, 3.4575, 55),
('34077', 'Clapiers', '31T', 571653, 4834186, 43.6572, 3.88862, 60),
('34078', 'Claret', '31T', 572726, 4856876, 43.8614, 3.90499, 163),
('34079', 'Clermont-l''Hérault', '31T', 534622, 4830653, 43.6281, 3.42916, 100),
('34080', 'Colombières-sur-Orb', '31T', 500359, 4825195, 43.5797, 3.00445, 240),
('34081', 'Colombiers', '31T', 511331, 4795528, 43.3125, 3.13973, 40),
('34082', 'Combaillaux', '31T', 561866, 4836341, 43.6775, 3.7675, 151),
('34083', 'Combes', '31T', 503677, 4827942, 43.6044, 3.04556, 500),
('34084', 'Corneilhan', '31T', 515521, 4805315, 43.4006, 3.19167, 80),
('34085', 'Coulobres', '31T', 522520, 4810888, 43.4506, 3.27833, 80),
('34086', 'Courniou', '31T', 476635, 4813513, 43.4742, 2.71111, 362),
('34087', 'Cournonsec', '31T', 556860, 4821919, 43.5481, 3.70388, 90),
('34088', 'Cournonterral', '31T', 558242, 4823011, 43.5578, 3.72111, 50),
('34089', 'Creissan', '31T', 500833, 4802397, 43.3744, 3.01028, 110),
('34090', 'Le Crès', '31T', 575580, 4833520, 43.6508, 3.93722, 60),
('34091', 'Le Cros', '31T', 529239, 4857283, 43.8681, 3.36389, 711),
('34092', 'Cruzy', '31T', 495183, 4800363, 43.3561, 2.94056, 80),
('34093', 'Dio-et-Valquières', '31T', 516885, 4835119, 43.6689, 3.20944, 400),
('34094', 'Espondeilhan', '31T', 521197, 4809773, 43.4406, 3.26194, 80),
('34095', 'Fabrègues', '31T', 562804, 4822281, 43.5508, 3.7775, 36),
('34096', 'Faugères', '31T', 515187, 4823731, 43.5664, 3.18806, 260),
('34097', 'Félines-Minervois', '31T', 467549, 4797509, 43.3297, 2.59972, 160),
('34098', 'Ferrals-les-Montagnes', '31T', 470130, 4805703, 43.4036, 2.63111, 433),
('34099', 'Ferrières-les-Verreries', '31T', 564138, 4858484, 43.8767, 3.79833, 320),
('34100', 'Ferrières-Poussarou', '31T', 491846, 4814773, 43.4858, 2.89916, 480),
('34101', 'Florensac', '31T', 537530, 4803489, 43.3833, 3.46333, 10),
('34102', 'Fontanès', '31T', 573500, 4849510, 43.795, 3.91361, 105),
('34103', 'Fontès', '31T', 530701, 4820854, 43.54, 3.38001, 90),
('34104', 'Fos', '31T', 519807, 4823805, 43.5669, 3.24527, 250),
('34105', 'Fouzilhon', '31T', 519851, 4816587, 43.5019, 3.24555, 160),
('34106', 'Fozières', '31T', 528759, 4844415, 43.7522, 3.35722, 320),
('34107', 'Fraisse-sur-Agout', '31T', 483636, 4828300, 43.6075, 2.79723, 770),
('34108', 'Frontignan', '31T', 561203, 4810758, 43.4472, 3.75639, 4),
('34109', 'Gabian', '31T', 522048, 4817828, 43.5131, 3.27278, 100),
('34110', 'Galargues', '31T', 582093, 4846833, 43.77, 4.02, 45),
('34111', 'Ganges', '31T', 556518, 4864864, 43.9347, 3.70417, 150),
('34112', 'Garrigues', '31T', 581524, 4849511, 43.7942, 4.01334, 70),
('34113', 'Gigean', '31T', 557534, 4816649, 43.5006, 3.71167, 44),
('34114', 'Gignac', '31T', 544486, 4833518, 43.6533, 3.55167, 57),
('34115', 'Gorniès', '31T', 550001, 4859751, 43.8892, 3.6225, 210),
('34116', 'Grabels', '31T', 564315, 4833217, 43.6492, 3.79751, 65),
('34117', 'Graissessac', '31T', 507545, 4836583, 43.6822, 3.09361, 350),
('34118', 'Guzargues', '31T', 574552, 4841345, 43.7214, 3.92555, 120),
('34119', 'Hérépian', '31T', 509305, 4826744, 43.5936, 3.11528, 184),
('34120', 'Jacou', '31T', 573507, 4834669, 43.6614, 3.91167, 64),
('34121', 'Joncels', '31T', 515569, 4842674, 43.7369, 3.19334, 375),
('34122', 'Jonquières', '31T', 538402, 4835949, 43.6756, 3.47639, 110),
('34123', 'Juvignac', '31T', 565989, 4829222, 43.6131, 3.81777, 35),
('34124', 'Lacoste', '31T', 535171, 4832815, 43.6475, 3.43611, 176),
('34125', 'Lagamas', '31T', 542164, 4835848, 43.6744, 3.52305, 98),
('34126', 'Lamalou-les-Bains', '31T', 506569, 4826988, 43.5958, 3.08138, 200),
('34127', 'Lansargues', '31T', 586646, 4833654, 43.6508, 4.07444, 8),
('34128', 'Laroque', '31T', 558425, 4863523, 43.9225, 3.72778, 143),
('34129', 'Lattes', '31T', 572746, 4824232, 43.5675, 3.90083, 3),
('34130', 'Laurens', '31T', 515916, 4818982, 43.5236, 3.19695, 147),
('34131', 'Lauret', '31T', 571105, 4854050, 43.8361, 3.88445, 150),
('34132', 'Lauroux', '31T', 523225, 4847232, 43.7778, 3.28861, 306),
('34133', 'Lavalette', '31T', 521848, 4837663, 43.6917, 3.27111, 300),
('34134', 'Lavérune', '31T', 564854, 4826064, 43.5847, 3.80333, 30),
('34135', 'Lespignan', '31T', 514178, 4791276, 43.2742, 3.17472, 40),
('34136', 'Lézignan-la-Cèbe', '31T', 535485, 4815756, 43.4939, 3.43889, 25),
('34137', 'Liausson', '31T', 529778, 4831493, 43.6358, 3.36917, 210),
('34138', 'Lieuran-Cabrières', '31T', 533503, 4825896, 43.5853, 3.415, 140),
('34139', 'Lieuran-lès-Béziers', '31T', 519204, 4807330, 43.4186, 3.23722, 60),
('34140', 'Lignan-sur-Orb', '31T', 513589, 4803985, 43.3886, 3.16778, 20),
('34141', 'La Livinière', '31T', 470448, 4796138, 43.3175, 2.63555, 150),
('34142', 'Lodève', '31T', 525994, 4842337, 43.7336, 3.32278, 160),
('34143', 'Loupian', '31T', 549738, 4810910, 43.4494, 3.61472, 20),
('34144', 'Lunas', '31T', 515800, 4839313, 43.7067, 3.19611, 280),
('34145', 'Lunel', '31T', 591447, 4836495, 43.6758, 4.13444, 5),
('34146', 'Lunel-Viel', '31T', 588040, 4836758, 43.6786, 4.09223, 12),
('34147', 'Magalas', '31T', 517974, 4813249, 43.4719, 3.22223, 130),
('34148', 'Maraussan', '31T', 512805, 4801824, 43.3692, 3.15805, 40),
('34149', 'Margon', '31T', 524865, 4814937, 43.4869, 3.3075, 90),
('34150', 'Marseillan', '31T', 542814, 4800559, 43.3567, 3.52834, 3),
('34151', 'Marsillargues', '31T', 595092, 4835342, 43.665, 4.17945, 6),
('34152', 'Mas-de-Londres', '31T', 560507, 4847867, 43.7814, 3.75194, 240),
('34153', 'Les Matelles', '31T', 565189, 4842296, 43.7308, 3.80944, 100),
('34154', 'Mauguio', '31T', 581498, 4829609, 43.615, 4.01, 6),
('34155', 'Maureilhan', '31T', 509724, 4800584, 43.3581, 3.12, 60),
('34156', 'Mérifons', '31T', 523774, 4831130, 43.6328, 3.29472, 173),
('34157', 'Mèze', '31T', 548991, 4808529, 43.4281, 3.60527, 5),
('34158', 'Minerve', '31T', 479268, 4800239, 43.3547, 2.74417, 200),
('34159', 'Mireval', '31T', 564756, 4817578, 43.5083, 3.80111, 6),
('34160', 'Mons', '31T', 496389, 4824332, 43.5719, 2.95528, 240),
('34161', 'Montady', '31T', 509706, 4797530, 43.3306, 3.11972, 40),
('34162', 'Montagnac', '31T', 539222, 4814327, 43.4808, 3.485, 50),
('34163', 'Montarnaud', '31T', 556317, 4833145, 43.6492, 3.69833, 130),
('34164', 'Montaud', '31T', 576884, 4844858, 43.7528, 3.955, 100),
('34165', 'Montbazin', '31T', 556286, 4818150, 43.5142, 3.69639, 30),
('34166', 'Montblanc', '31T', 529806, 4804993, 43.3972, 3.36806, 30),
('34167', 'Montels', '31T', 502614, 4793483, 43.2942, 3.03222, 10),
('34168', 'Montesquieu', '31T', 520573, 4822759, 43.5575, 3.25472, 250),
('34169', 'Montferrier-sur-Lez', '31T', 569267, 4835241, 43.6669, 3.85916, 90),
('34170', 'Montouliers', '31T', 492525, 4798391, 43.3383, 2.90778, 100),
('34171', 'Montoulieu', '31T', 563570, 4864156, 43.9278, 3.79194, 200),
('34172', 'Montpellier', '31T', 570544, 4828806, 43.6089, 3.87416, 35),
('34173', 'Montpeyroux', '31T', 540784, 4838153, 43.6953, 3.50611, 150),
('34174', 'Moulès-et-Baucels', '31T', 558689, 4866394, 43.9483, 3.73138, 200),
('34175', 'Mourèze', '31T', 528755, 4829638, 43.6192, 3.35639, 200),
('34176', 'Mudaison', '31T', 583939, 4833342, 43.6483, 4.04083, 13),
('34177', 'Murles', '31T', 560221, 4837467, 43.6878, 3.74722, 190),
('34178', 'Murviel-lès-Béziers', '31T', 511689, 4809781, 43.4408, 3.14445, 80),
('34179', 'Murviel-lès-Montpellier', '31T', 559431, 4828174, 43.6042, 3.7364, 130),
('34180', 'Nébian', '31T', 534836, 4828309, 43.6069, 3.43166, 130),
('34181', 'Neffiès', '31T', 526641, 4820158, 43.5339, 3.32972, 110),
('34182', 'Nézignan-l''Évêque', '31T', 532807, 4807691, 43.4214, 3.40528, 40),
('34183', 'Nissan-lez-Enserune', '31T', 510456, 4793028, 43.29, 3.12889, 20),
('34184', 'Nizas', '31T', 532982, 4817903, 43.5133, 3.40806, 67),
('34185', 'Notre-Dame-de-Londres', '31T', 562494, 4852946, 43.8269, 3.77722, 192),
('34186', 'Octon', '31T', 524505, 4833600, 43.655, 3.30389, 190),
('34187', 'Olargues', '31T', 492955, 4822669, 43.5569, 2.91278, 190),
('34188', 'Olmet-et-Villecun', '31T', 523140, 4839488, 43.7081, 3.28722, 300),
('34189', 'Olonzac', '31T', 478140, 4792438, 43.2844, 2.73056, 52),
('34190', 'Oupia', '31T', 480981, 4793139, 43.2908, 2.76555, 84),
('34191', 'Pailhès', '31T', 515108, 4808739, 43.4314, 3.18667, 135),
('34192', 'Palavas-les-Flots', '31T', 575598, 4820037, 43.5294, 3.93556, 1),
('34193', 'Pardailhan', '31T', 487504, 4810954, 43.4514, 2.84556, 540),
('34194', 'Paulhan', '31T', 536984, 4820917, 43.5403, 3.45778, 36),
('34195', 'Pégairolles-de-Buèges', '31T', 547166, 4850474, 43.8058, 3.58639, 240),
('34196', 'Pégairolles-de-l''Escalette', '31T', 525986, 4850050, 43.8031, 3.32305, 310),
('34197', 'Péret', '31T', 532006, 4824870, 43.5761, 3.39639, 150),
('34198', 'Pérols', '31T', 577015, 4823693, 43.5622, 3.95361, 4),
('34199', 'Pézenas', '31T', 534404, 4811987, 43.46, 3.42528, 19),
('34200', 'Pézènes-les-Mines', '31T', 520316, 4826398, 43.5903, 3.25167, 250),
('34201', 'Pierrerue', '31T', 498246, 4808321, 43.4278, 2.97833, 140),
('34202', 'Pignan', '31T', 561761, 4825880, 43.5833, 3.765, 40),
('34203', 'Pinet', '31T', 541273, 4805917, 43.405, 3.50973, 22),
('34204', 'Plaissan', '31T', 542536, 4823109, 43.5597, 3.52667, 60),
('34205', 'Les Plans', '31T', 521646, 4844728, 43.7553, 3.26888, 320),
('34206', 'Poilhes', '31T', 506060, 4795089, 43.3086, 3.07472, 23),
('34207', 'Pomérols', '31T', 540405, 4804277, 43.3903, 3.49888, 30),
('34208', 'Popian', '31T', 543188, 4829808, 43.62, 3.53527, 70),
('34209', 'Portiragnes', '31T', 527216, 4794617, 43.3039, 3.33556, 10),
('34210', 'Le Pouget', '31T', 542266, 4826809, 43.5931, 3.52361, 100),
('34211', 'Le Poujol-sur-Orb', '31T', 504867, 4825073, 43.5786, 3.06028, 180),
('34212', 'Poujols', '31T', 526047, 4845823, 43.765, 3.32361, 300),
('34213', 'Poussan', '31T', 554221, 4815326, 43.4889, 3.67056, 40),
('34214', 'Pouzolles', '31T', 522643, 4814559, 43.4836, 3.28001, 80),
('34215', 'Pouzols', '31T', 541419, 4829611, 43.6183, 3.51333, 60),
('34216', 'Le Pradal', '31T', 508336, 4830568, 43.6281, 3.10333, 310),
('34217', 'Prades-le-Lez', '31T', 569545, 4838699, 43.6981, 3.86306, 70),
('34218', 'Prades-sur-Vernazobre', '31T', 498876, 4810511, 43.4475, 2.98611, 110),
('34219', 'Prémian', '31T', 486465, 4819687, 43.53, 2.8325, 240),
('34220', 'Le Puech', '31T', 525227, 4838015, 43.6947, 3.31305, 200),
('34221', 'Puéchabon', '31T', 549901, 4840375, 43.7147, 3.61945, 160),
('34222', 'Puilacher', '31T', 540960, 4824024, 43.5681, 3.50722, 60),
('34223', 'Puimisson', '31T', 516792, 4809761, 43.4406, 3.2075, 110),
('34224', 'Puissalicon', '31T', 519101, 4811803, 43.4589, 3.23611, 120),
('34225', 'Puisserguier', '31T', 503173, 4801750, 43.3686, 3.03916, 87),
('34226', 'Quarante', '31T', 496938, 4799406, 43.3475, 2.96222, 100),
('34227', 'Restinclières', '31T', 583522, 4841667, 43.7233, 4.03695, 80),
('34228', 'Rieussec', '31T', 478885, 4807274, 43.4181, 2.73917, 500),
('34229', 'Riols', '31T', 483047, 4816980, 43.5056, 2.79028, 270),
('34230', 'Les Rives', '31T', 521503, 4854445, 43.8428, 3.2675, 771),
('34231', 'Romiguières', '31T', 518407, 4851690, 43.8181, 3.22889, 620),
('34232', 'Roquebrun', '31T', 502335, 4816527, 43.5017, 3.02888, 100),
('34233', 'Roqueredonde', '31T', 516915, 4849743, 43.8006, 3.21028, 680),
('34234', 'Roquessels', '31T', 518062, 4822196, 43.5525, 3.22361, 250),
('34235', 'Rosis', '31T', 500381, 4830039, 43.6233, 3.00472, 770),
('34236', 'Rouet', '31T', 563710, 4851939, 43.8178, 3.79222, 216),
('34237', 'Roujan', '31T', 525105, 4816975, 43.5053, 3.31056, 120),
('34238', 'Saint-André-de-Buèges', '31T', 553317, 4855272, 43.8486, 3.66333, 200),
('34239', 'Saint-André-de-Sangonis', '31T', 540568, 4833154, 43.6503, 3.50305, 171),
('34240', 'Saint-Aunès', '31T', 577949, 4832158, 43.6383, 3.96639, 40),
('34241', 'Saint-Bauzille-de-la-Sylve', '31T', 544087, 4829536, 43.6175, 3.54639, 90),
('34242', 'Saint-Bauzille-de-Montmel', '31T', 576841, 4846647, 43.7689, 3.95473, 120),
('34243', 'Saint-Bauzille-de-Putois', '31T', 558987, 4860504, 43.8953, 3.73444, 134),
('34244', 'Saint-Brès', '31T', 583042, 4835244, 43.6656, 4.03, 20),
('34245', 'Saint-Chinian', '31T', 495615, 4807643, 43.4217, 2.94583, 119),
('34246', 'Saint-Christol', '31T', 586873, 4842111, 43.7269, 4.07862, 59),
('34247', 'Saint-Clément-de-Rivière', '31T', 568619, 4837301, 43.6856, 3.85139, 80),
('34248', 'Sainte-Croix-de-Quintillargues', '31T', 573124, 4847068, 43.7731, 3.90861, 117),
('34249', 'Saint-Drézéry', '31T', 579212, 4842818, 43.7342, 3.98362, 90),
('34250', 'Saint-Étienne-d''Albagnan', '31T', 488172, 4819961, 43.5325, 2.85362, 230),
('34251', 'Saint-Étienne-de-Gourgas', '31T', 530337, 4846459, 43.7706, 3.37694, 300),
('34252', 'Saint-Étienne-Estréchoux', '31T', 508555, 4834641, 43.6647, 3.10611, 260),
('34253', 'Saint-Félix-de-l''Héras', '31T', 524142, 4853436, 43.8336, 3.30028, 660),
('34254', 'Saint-Félix-de-Lodez', '31T', 537022, 4834429, 43.6619, 3.45917, 91),
('34255', 'Saint-Gély-du-Fesc', '31T', 564939, 4838067, 43.6928, 3.80583, 120),
('34256', 'Saint-Geniès-des-Mourgues', '31T', 583557, 4838798, 43.6975, 4.03694, 59),
('34257', 'Saint-Geniès-de-Varensal', '31T', 500202, 4836425, 43.6808, 3.00251, 380),
('34258', 'Saint-Geniès-de-Fontedit', '31T', 514447, 4812778, 43.4678, 3.17861, 100),
('34259', 'Saint-Georges-d''Orques', '31T', 563145, 4828948, 43.6108, 3.7825, 60),
('34260', 'Saint-Gervais-sur-Mare', '31T', 503270, 4833310, 43.6528, 3.04055, 340),
('34261', 'Saint-Guilhem-le-Désert', '31T', 544248, 4842464, 43.7339, 3.54945, 100),
('34262', 'Saint-Guiraud', '31T', 536632, 4836062, 43.6767, 3.45444, 160),
('34263', 'Saint-Hilaire-de-Beauvoir', '31T', 581485, 4845375, 43.7569, 4.01223, 71),
('34264', 'Saint-Jean-de-Buèges', '31T', 549672, 4853023, 43.8286, 3.61778, 160),
('34265', 'Saint-Jean-de-Cornies', '31T', 580697, 4843916, 43.7439, 4.00222, 70),
('34266', 'Saint-Jean-de-Cuculles', '31T', 567268, 4844754, 43.7528, 3.83556, 118),
('34267', 'Saint-Jean-de-Fos', '31T', 544405, 4838917, 43.7019, 3.55111, 100),
('34268', 'Saint-Jean-de-la-Blaquière', '31T', 534102, 4840368, 43.7156, 3.42333, 160),
('34269', 'Saint-Jean-de-Minervois', '31T', 486321, 4803985, 43.3886, 2.83111, 270),
('34270', 'Saint-Jean-de-Védas', '31T', 566656, 4825279, 43.5775, 3.82555, 40),
('34271', 'Saint-Julien', '31T', 494033, 4824210, 43.5708, 2.92611, 250),
('34272', 'Saint-Just', '31T', 589886, 4834344, 43.6567, 4.11472, 4),
('34273', 'Saint-Martin-de-l''Arçon', '31T', 498587, 4824794, 43.5761, 2.9825, 260),
('34274', 'Saint-Martin-de-Londres', '31T', 559023, 4848872, 43.7906, 3.73361, 200),
('34276', 'Saint-Mathieu-de-Tréviers', '31T', 569060, 4846593, 43.7692, 3.85805, 120),
('34277', 'Saint-Maurice-Navacelles', '31T', 541620, 4854942, 43.8464, 3.51779, 580),
('34278', 'Saint-Michel', '31T', 531098, 4855841, 43.855, 3.38694, 775),
('34279', 'Saint-Nazaire-de-Ladarez', '31T', 506062, 4817393, 43.5094, 3.075, 200),
('34280', 'Saint-Nazaire-de-Pézan', '31T', 590263, 4832930, 43.6439, 4.11916, 3),
('34281', 'Saint-Pargoire', '31T', 541975, 4819557, 43.5278, 3.51945, 80),
('34282', 'Saint-Paul-et-Valmalle', '31T', 554434, 4830599, 43.6264, 3.67473, 145),
('34283', 'Saint-Pierre-de-la-Fage', '31T', 534259, 4849100, 43.7942, 3.42584, 623),
('34284', 'Saint-Pons-de-Thomières', '31T', 480729, 4815166, 43.4892, 2.76167, 320),
('34285', 'Saint-Pons-de-Mauchiens', '31T', 541536, 4817950, 43.5133, 3.51389, 100),
('34286', 'Saint-Privat', '31T', 534125, 4844656, 43.7542, 3.42389, 300),
('34287', 'Saint-Saturnin-de-Lucian', '31T', 538053, 4838137, 43.6953, 3.47222, 160),
('34288', 'Saint-Sériès', '31T', 589035, 4842726, 43.7322, 4.10556, 30),
('34289', 'Saint-Thibéry', '31T', 533832, 4805074, 43.3978, 3.41778, 20),
('34290', 'Saint-Vincent-de-Barbeyrargues', '31T', 570699, 4839606, 43.7061, 3.8775, 130),
('34291', 'Saint-Vincent-d''Olargues', '31T', 490264, 4823228, 43.5619, 2.87945, 380),
('34292', 'Salasc', '31T', 525482, 4829810, 43.6208, 3.31583, 194),
('34293', 'La Salvetat-sur-Agout', '31T', 475989, 4827675, 43.6017, 2.7025, 689),
('34294', 'Saturargues', '31T', 589675, 4841716, 43.7231, 4.11333, 37),
('34295', 'Saussan', '31T', 562512, 4824715, 43.5728, 3.77417, 30),
('34296', 'Saussines', '31T', 585053, 4846161, 43.7636, 4.05666, 40),
('34297', 'Sauteyrargues', '31T', 573961, 4854297, 43.8381, 3.92, 130),
('34298', 'Sauvian', '31T', 521293, 4793639, 43.2953, 3.2625, 5),
('34299', 'Sérignan', '31T', 522763, 4792256, 43.2828, 3.28056, 7),
('34300', 'Servian', '31T', 524552, 4808242, 43.4267, 3.30333, 50),
('34301', 'Sète', '31T', 556386, 4806211, 43.4067, 3.69639, 30),
('34302', 'Siran', '31T', 472451, 4795698, 43.3136, 2.66028, 100),
('34303', 'Sorbs', '31T', 532039, 4859918, 43.8917, 3.39889, 700),
('34304', 'Soubès', '31T', 527745, 4846200, 43.7683, 3.34472, 260),
('34305', 'Le Soulié', '31T', 475027, 4822095, 43.5514, 2.69084, 900),
('34306', 'Soumont', '31T', 528435, 4841730, 43.7281, 3.35306, 400),
('34307', 'Sussargues', '31T', 580829, 4840431, 43.7125, 4.00333, 68),
('34308', 'Taussac-la-Billière', '31T', 505849, 4829856, 43.6217, 3.07249, 240),
('34309', 'Teyran', '31T', 574711, 4837181, 43.6839, 3.92695, 80),
('34310', 'Thézan-lès-Béziers', '31T', 513784, 4807656, 43.4217, 3.17028, 70),
('34311', 'Tourbes', '31T', 530658, 4810488, 43.4467, 3.37889, 60),
('34312', 'La Tour-sur-Orb', '31T', 512051, 4833351, 43.6531, 3.14944, 230),
('34313', 'Tressan', '31T', 539677, 4824819, 43.5753, 3.49139, 80),
('34314', 'Le Triadou', '31T', 568714, 4843257, 43.7392, 3.85333, 90),
('34315', 'Usclas-d''Hérault', '31T', 537491, 4818575, 43.5192, 3.46389, 25),
('34316', 'Usclas-du-Bosc', '31T', 532442, 4841285, 43.7239, 3.40278, 250),
('34317', 'La Vacquerie-et-Saint-Martin-de-Castries', '31T', 537032, 4848714, 43.7906, 3.46028, 640),
('34318', 'Vacquières', '31T', 575940, 4855030, 43.8444, 3.94472, 110),
('34319', 'Vailhan', '31T', 524501, 4822247, 43.5528, 3.30333, 180),
('34320', 'Vailhauquès', '31T', 557886, 4835688, 43.6719, 3.71806, 150),
('34321', 'Valergues', '31T', 585615, 4835492, 43.6675, 4.06195, 15),
('34322', 'Valflaunès', '31T', 570119, 4850091, 43.8006, 3.87167, 150),
('34323', 'Valmascle', '31T', 524036, 4826997, 43.5956, 3.29778, 257),
('34324', 'Valras-Plage', '31T', 523723, 4788311, 43.2472, 3.29222, 1),
('34325', 'Valros', '31T', 529727, 4807522, 43.42, 3.36722, 56),
('34326', 'Vélieux', '31T', 478177, 4803975, 43.3883, 2.73056, 480),
('34327', 'Vendargues', '31T', 578171, 4834259, 43.6572, 3.96945, 43),
('34328', 'Vendémian', '31T', 545369, 4825472, 43.5808, 3.56194, 127),
('34329', 'Vendres', '31T', 518304, 4790792, 43.2697, 3.22555, 20),
('34330', 'Vérargues', '31T', 588634, 4840869, 43.7156, 4.10027, 41),
('34331', 'Verreries-de-Moussans', '31T', 474580, 4810837, 43.45, 2.68583, 480),
('34332', 'Vias', '31T', 533924, 4795758, 43.3139, 3.41834, 10),
('34333', 'Vic-la-Gardiole', '31T', 564439, 4815601, 43.4906, 3.79695, 5),
('34334', 'Vieussan', '31T', 498137, 4820876, 43.5408, 2.97694, 160),
('34335', 'Villemagne-l''Argentière', '31T', 509548, 4829552, 43.6189, 3.11834, 193),
('34336', 'Villeneuve-lès-Béziers', '31T', 522751, 4795865, 43.3153, 3.28056, 5),
('34337', 'Villeneuve-lès-Maguelone', '31T', 569691, 4820281, 43.5322, 3.8625, 7),
('34338', 'Villeneuvette', '31T', 532301, 4828790, 43.6114, 3.40028, 130),
('34339', 'Villespassans', '31T', 493160, 4803110, 43.3808, 2.91556, 250),
('34340', 'Villetelle', '31T', 591784, 4842918, 43.7336, 4.13972, 14),
('34341', 'Villeveyrac', '31T', 549068, 4816582, 43.5006, 3.60695, 61),
('34342', 'Viols-en-Laval', '31T', 558344, 4844763, 43.7536, 3.72472, 250),
('34343', 'Viols-le-Fort', '31T', 556699, 4843638, 43.7436, 3.70417, 249),
('34344', 'La Grande-Motte', '31T', 587991, 4823396, 43.5583, 4.08945, 1),
('35001', 'Acigné', '30T', 608856, 5332062, 48.1325, -1.53695, 40),
('35002', 'Amanlis', '30T', 613682, 5318041, 48.0056, -1.47584, 40),
('35003', 'Andouillé-Neuville', '30T', 604478, 5349832, 48.2931, -1.59139, 80),
('35004', 'Antrain', '30T', 612284, 5368822, 48.4625, -1.48111, 40),
('35005', 'Arbrissel', '30T', 626758, 5309728, 47.9283, -1.30305, 70),
('35006', 'Argentré-du-Plessis', '30T', 637889, 5324255, 48.0567, -1.14945, 80),
('35007', 'Aubigné', '30T', 601346, 5349837, 48.2936, -1.63361, 87),
('35008', 'Availles-sur-Seiche', '30T', 634661, 5313552, 47.9611, -1.19611, 60),
('35009', 'Baguer-Morvan', '30T', 590430, 5375194, 48.5233, -1.77528, 31),
('35010', 'Baguer-Pican', '30T', 596094, 5378715, 48.5542, -1.69778, 35),
('35011', 'Baillé', '30T', 619981, 5357489, 48.3592, -1.38028, 101),
('35012', 'Bain-de-Bretagne', '30T', 598642, 5299513, 47.8414, -1.68167, 100),
('35013', 'Bains-sur-Oust', '30T', 569788, 5283994, 47.7056, -2.06973, 60),
('35014', 'Bais', '30T', 627617, 5318736, 48.0092, -1.28888, 74),
('35015', 'Balazé', '30T', 634575, 5336625, 48.1686, -1.19, 90),
('35016', 'Baulon', '30T', 579652, 5315277, 47.9858, -1.9325, 100),
('35017', 'La Baussaine', '30T', 581803, 5351746, 48.3136, -1.89667, 75),
('35018', 'La Bazouge-du-Désert', '30T', 640135, 5367527, 48.4453, -1.105, 175),
('35019', 'Bazouges-la-Pérouse', '30T', 605499, 5364768, 48.4272, -1.57389, 90),
('35021', 'Beaucé', '30T', 636724, 5355520, 48.3381, -1.15501, 90),
('35022', 'Bécherel', '30T', 578309, 5349659, 48.2953, -1.94417, 160),
('35023', 'Bédée', '30T', 578448, 5336567, 48.1775, -1.94472, 80),
('35024', 'Betton', '30T', 600782, 5337412, 48.1819, -1.64417, 50),
('35025', 'Billé', '30T', 630100, 5349804, 48.2881, -1.24611, 108),
('35026', 'Bléruais', '30T', 565295, 5329145, 48.1122, -2.12277, 88),
('35027', 'Boisgervilly', '30T', 569665, 5335342, 48.1675, -2.06306, 90),
('35028', 'Boistrudan', '30T', 619395, 5314420, 47.9719, -1.40028, 68),
('35029', 'Bonnemain', '30T', 591187, 5368998, 48.4675, -1.76638, 71),
('35030', 'La Bosse-de-Bretagne', '30T', 604798, 5302833, 47.8703, -1.59861, 50),
('35031', 'La Bouëxière', '30T', 616058, 5337825, 48.1831, -1.43862, 105),
('35032', 'Bourgbarré', '30T', 603279, 5316857, 47.9967, -1.61555, 50),
('35033', 'Bourg-des-Comptes', '30T', 594264, 5309136, 47.9286, -1.73806, 65),
('35034', 'La Boussac', '30T', 598921, 5374193, 48.5131, -1.66055, 37),
('35035', 'Bovel', '30T', 576368, 5311249, 47.95, -1.97722, 80),
('35037', 'Bréal-sous-Montfort', '30T', 584462, 5322263, 48.0481, -1.86667, 50),
('35038', 'Bréal-sous-Vitré', '30T', 644380, 5329666, 48.1039, -1.06056, 120),
('35039', 'Brécé', '30T', 613146, 5329459, 48.1083, -1.48, 50),
('35040', 'Breteil', '30T', 581989, 5333035, 48.1453, -1.89778, 56),
('35041', 'Brie', '30T', 609178, 5311840, 47.9506, -1.53778, 70),
('35042', 'Brielles', '30T', 642552, 5319118, 48.0094, -1.08861, 85),
('35044', 'Broualan', '30T', 599856, 5370009, 48.4753, -1.6489, 113),
('35045', 'Bruc-sur-Aff', '30T', 573469, 5296143, 47.8144, -2.01861, 50),
('35046', 'Les Brulais', '30T', 571682, 5304427, 47.8892, -2.0411, 89),
('35047', 'Bruz', '30T', 593491, 5319685, 48.0236, -1.74611, 41),
('35048', 'Campel', '30T', 574169, 5309677, 47.9361, -2.00694, 80),
('35049', 'Cancale', '30T', 584739, 5392122, 48.6764, -1.84888, 29),
('35050', 'Cardroc', '30T', 582488, 5348575, 48.285, -1.88805, 130),
('35051', 'Cesson-Sévigné', '30T', 603823, 5330332, 48.1178, -1.60499, 40),
('35052', 'Champeaux', '30T', 625663, 5334075, 48.1475, -1.31056, 90),
('35053', 'Chancé', '30T', 620781, 5321491, 48.0353, -1.37973, 60),
('35054', 'Chanteloup', '30T', 603504, 5313557, 47.9669, -1.61333, 82),
('35055', 'Chantepie', '30T', 603058, 5326859, 48.0867, -1.61611, 50),
('35056', 'La Chapelle-aux-Filtzméens', '30T', 587078, 5359699, 48.3844, -1.82389, 35),
('35057', 'La Chapelle-Bouëxic', '30T', 579097, 5308908, 47.9286, -1.94111, 70);
INSERT INTO `ods_communes` (`oc_code_insee`, `oc_nom`, `oc_secteur`, `oc_x_utm`, `oc_y_utm`, `oc_latitude`, `oc_longitude`, `oc_altitude`) VALUES
('35058', 'La Chapelle-Chaussée', '30T', 585066, 5347069, 48.2711, -1.85361, 120),
('35059', 'La Chapelle-des-Fougeretz', '30T', 594310, 5336591, 48.1756, -1.73139, 83),
('35060', 'La Chapelle-du-Lou', '30T', 574928, 5340442, 48.2128, -1.99138, 90),
('35061', 'La Chapelle-Erbrée', '30T', 641258, 5333759, 48.1414, -1.10112, 70),
('35062', 'La Chapelle-Janson', '30T', 640732, 5356699, 48.3478, -1.10056, 120),
('35063', 'La Chapelle-Saint-Aubert', '30T', 625421, 5352572, 48.3139, -1.30834, 100),
('35064', 'La Chapelle-de-Brain', '30T', 580135, 5283356, 47.6986, -1.93194, 58),
('35065', 'La Chapelle-Thouarault', '30T', 584379, 5330723, 48.1242, -1.86611, 50),
('35066', 'Chartres-de-Bretagne', '30T', 596688, 5321776, 48.0419, -1.70277, 35),
('35067', 'Chasné-sur-Illet', '30T', 606831, 5344162, 48.2417, -1.56111, 52),
('35068', 'Châteaubourg', '30T', 618812, 5329573, 48.1083, -1.40388, 51),
('35069', 'Châteaugiron', '30T', 611647, 5322542, 48.0464, -1.50194, 50),
('35070', 'Châteauneuf-d''Ille-et-Vilaine', '30T', 579270, 5379565, 48.5642, -1.92556, 12),
('35071', 'Le Châtellier', '30T', 629320, 5364119, 48.4169, -1.25222, 181),
('35072', 'Châtillon-en-Vendelais', '30T', 635376, 5342915, 48.225, -1.17722, 139),
('35075', 'Chauvigné', '30T', 614079, 5359282, 48.3764, -1.45944, 82),
('35076', 'Chavagne', '30T', 590293, 5322815, 48.0522, -1.78833, 30),
('35077', 'Chelun', '30T', 632943, 5301651, 47.8544, -1.22278, 100),
('35078', 'Cherrueix', '30T', 595074, 5384504, 48.6064, -1.71027, 6),
('35079', 'Chevaigné', '30T', 601962, 5340706, 48.2114, -1.6275, 60),
('35080', 'Cintré', '30T', 584079, 5328618, 48.1053, -1.87056, 40),
('35081', 'Clayes', '30T', 585328, 5336388, 48.175, -1.85223, 88),
('35082', 'Coësmes', '30T', 616607, 5304603, 47.8842, -1.44028, 70),
('35083', 'Coglès', '30T', 620893, 5368752, 48.4603, -1.36473, 120),
('35084', 'Comblessac', '30T', 568606, 5302815, 47.875, -2.0825, 52),
('35085', 'Combourg', '30T', 592483, 5362564, 48.4094, -1.75027, 50),
('35086', 'Combourtillé', '30T', 630309, 5347893, 48.2708, -1.24388, 100),
('35087', 'Cornillé', '30T', 626243, 5326551, 48.0797, -1.30499, 92),
('35088', 'Corps-Nuds', '30T', 605493, 5314828, 47.9781, -1.58638, 76),
('35089', 'La Couyère', '30T', 611720, 5304847, 47.8872, -1.50556, 85),
('35090', 'Crevin', '30T', 599849, 5310219, 47.9375, -1.66306, 100),
('35091', 'Le Crouais', '30T', 564101, 5339692, 48.2072, -2.13722, 100),
('35092', 'Cuguen', '30T', 598901, 5367120, 48.4494, -1.6625, 107),
('35093', 'Dinard', '30T', 569154, 5387152, 48.6336, -2.06139, 28),
('35094', 'Dingé', '30T', 595271, 5356897, 48.3581, -1.71389, 90),
('35095', 'Dol-de-Bretagne', '30T', 592354, 5378004, 48.5483, -1.74861, 15),
('35096', 'Domagné', '30T', 619832, 5325270, 48.0694, -1.39139, 80),
('35097', 'Domalain', '30T', 631194, 5317272, 47.9953, -1.24139, 100),
('35098', 'La Dominelais', '30T', 598332, 5290830, 47.7633, -1.68778, 57),
('35099', 'Domloup', '30T', 610186, 5324212, 48.0617, -1.52111, 60),
('35100', 'Dompierre-du-Chemin', '30T', 637760, 5347636, 48.2669, -1.14361, 140),
('35101', 'Dourdain', '30T', 621323, 5338923, 48.1919, -1.3675, 74),
('35102', 'Drouges', '30T', 629726, 5306984, 47.9031, -1.26416, 76),
('35103', 'Eancé', '30T', 631549, 5298067, 47.8225, -1.2425, 74),
('35104', 'Epiniac', '30T', 596299, 5373901, 48.5108, -1.69611, 45),
('35105', 'Erbrée', '30T', 639762, 5328996, 48.0989, -1.12278, 121),
('35106', 'Ercé-en-Lamée', '30T', 607932, 5298598, 47.8317, -1.55777, 70),
('35107', 'Ercé-près-Liffré', '30T', 610245, 5345771, 48.2556, -1.51473, 60),
('35108', 'Essé', '30T', 617706, 5312841, 47.9581, -1.42333, 50),
('35109', 'Étrelles', '30T', 634756, 5324521, 48.0597, -1.19139, 90),
('35110', 'Feins', '30T', 600763, 5353656, 48.3281, -1.64055, 100),
('35111', 'Le Ferré', '30T', 626007, 5372539, 48.4933, -1.29444, 136),
('35112', 'Fleurigné', '30T', 639403, 5355492, 48.3372, -1.11888, 100),
('35113', 'La Fontenelle', '30T', 610730, 5369501, 48.4689, -1.50195, 81),
('35114', 'Forges-la-Forêt', '30T', 628938, 5302271, 47.8608, -1.27611, 93),
('35115', 'Fougères', '30T', 633248, 5357074, 48.3528, -1.2014, 90),
('35116', 'La Fresnais', '30T', 585486, 5383331, 48.5972, -1.84055, 7),
('35117', 'Gaël', '30T', 558097, 5331322, 48.1325, -2.21917, 80),
('35118', 'Gahard', '30T', 609866, 5350489, 48.2981, -1.5186, 80),
('35119', 'Gennes-sur-Seiche', '30T', 640019, 5316738, 47.9886, -1.12334, 70),
('35120', 'Gévezé', '30T', 589938, 5341431, 48.2197, -1.78916, 70),
('35121', 'Gosné', '30T', 614165, 5344705, 48.2453, -1.46222, 103),
('35122', 'La Gouesnière', '30T', 581537, 5384385, 48.6072, -1.89389, 19),
('35123', 'Goven', '30T', 586105, 5317655, 48.0064, -1.84556, 100),
('35124', 'Grand-Fougeray', '30T', 595093, 5286453, 47.7244, -1.73195, 62),
('35125', 'La Guerche-de-Bretagne', '30T', 632114, 5311517, 47.9433, -1.23084, 80),
('35126', 'Guichen', '30T', 589838, 5313513, 47.9686, -1.79639, 75),
('35127', 'Guignen', '30T', 585148, 5308068, 47.9203, -1.86028, 73),
('35128', 'Guipel', '30T', 594952, 5350128, 48.2972, -1.71973, 80),
('35129', 'Guipry', '30T', 586697, 5297531, 47.8253, -1.84167, 40),
('35130', 'Hédé', '30T', 588964, 5349630, 48.2936, -1.80055, 94),
('35131', 'L''Hermitage', '30T', 588097, 5330964, 48.1258, -1.81611, 51),
('35132', 'Hirel', '30T', 588440, 5384334, 48.6058, -1.80028, 8),
('35133', 'Iffendic', '30T', 571969, 5331202, 48.13, -2.03277, 50),
('35134', 'Les Iffs', '30T', 584172, 5348939, 48.2881, -1.86528, 120),
('35135', 'Irodouër', '30T', 577988, 5344528, 48.2492, -1.94945, 100),
('35136', 'Janzé', '30T', 612308, 5313073, 47.9611, -1.49555, 91),
('35137', 'Javené', '30T', 632304, 5353438, 48.3203, -1.21527, 90),
('35138', 'Laignelet', '30T', 637129, 5359236, 48.3714, -1.14833, 170),
('35139', 'Laillé', '30T', 595584, 5314686, 47.9783, -1.71916, 100),
('35140', 'Lalleu', '30T', 611477, 5301321, 47.8556, -1.50972, 59),
('35141', 'Landavran', '30T', 627269, 5335284, 48.1581, -1.28862, 110),
('35142', 'Landéan', '30T', 636785, 5364109, 48.4153, -1.15139, 145),
('35143', 'Landujan', '30T', 574584, 5344575, 48.25, -1.99528, 100),
('35144', 'Langan', '30T', 585253, 5344169, 48.245, -1.85167, 100),
('35145', 'Langon', '30T', 586372, 5285823, 47.72, -1.84834, 20),
('35146', 'Langouet', '30T', 587498, 5344450, 48.2472, -1.82138, 80),
('35147', 'Lanhélin', '30T', 586540, 5367968, 48.4589, -1.82945, 66),
('35148', 'Lanrigan', '30T', 596353, 5361054, 48.3953, -1.69834, 71),
('35149', 'Lassy', '30T', 584284, 5314663, 47.9797, -1.87055, 90),
('35150', 'Lécousse', '30T', 631997, 5358651, 48.3672, -1.21778, 160),
('35151', 'Lieuron', '30T', 579068, 5300416, 47.8522, -1.94305, 40),
('35152', 'Liffré', '30T', 610933, 5341183, 48.2142, -1.50666, 97),
('35153', 'Lillemer', '30T', 583860, 5379724, 48.565, -1.86333, 13),
('35154', 'Livré-sur-Changeon', '30T', 623243, 5341806, 48.2175, -1.34084, 115),
('35155', 'Lohéac', '30T', 583638, 5301994, 47.8658, -1.88167, 46),
('35156', 'Longaulnay', '30T', 578720, 5351270, 48.3097, -1.93833, 100),
('35157', 'Le Loroux', '30T', 643294, 5362077, 48.3956, -1.06417, 168),
('35158', 'Le Lou-du-Lac', '30T', 575181, 5340013, 48.2089, -1.98805, 88),
('35159', 'Lourmais', '30T', 594094, 5367069, 48.4497, -1.7275, 95),
('35160', 'Loutehel', '30T', 568753, 5309640, 47.9364, -2.07945, 60),
('35161', 'Louvigné-de-Bais', '30T', 624440, 5322805, 48.0464, -1.33028, 82),
('35162', 'Louvigné-du-Désert', '30T', 638845, 5371512, 48.4814, -1.12111, 174),
('35163', 'Luitré', '30T', 639566, 5349657, 48.2847, -1.11862, 140),
('35164', 'Marcillé-Raoul', '30T', 603237, 5360279, 48.3872, -1.60556, 50),
('35165', 'Marcillé-Robert', '30T', 622802, 5312237, 47.9517, -1.35527, 59),
('35166', 'Marpiré', '30T', 623529, 5333379, 48.1417, -1.33944, 108),
('35167', 'Martigné-Ferchaud', '30T', 625871, 5298961, 47.8317, -1.31806, 80),
('35168', 'Maure-de-Bretagne', '30T', 575520, 5304692, 47.8911, -1.98973, 40),
('35169', 'Maxent', '30T', 572255, 5314963, 47.9839, -2.03167, 120),
('35170', 'Mecé', '30T', 626169, 5343908, 48.2358, -1.30084, 119),
('35171', 'Médréac', '30T', 569508, 5346487, 48.2678, -2.06334, 90),
('35172', 'Meillac', '30T', 587957, 5362708, 48.4114, -1.81139, 45),
('35173', 'Melesse', '30T', 596834, 5341235, 48.2169, -1.69639, 81),
('35174', 'Mellé', '30T', 633858, 5372194, 48.4886, -1.18834, 192),
('35175', 'Mernel', '30T', 577130, 5305454, 47.8978, -1.96805, 60),
('35176', 'Messac', '30T', 589422, 5297479, 47.8244, -1.80528, 25),
('35177', 'La Mézière', '30T', 592540, 5341318, 48.2183, -1.75417, 100),
('35178', 'Mézières-sur-Couesnon', '30T', 616380, 5350372, 48.2958, -1.43084, 90),
('35179', 'Miniac-Morvan', '30T', 581358, 5374098, 48.5147, -1.89833, 37),
('35180', 'Miniac-sous-Bécherel', '30T', 579314, 5348561, 48.2853, -1.93083, 159),
('35181', 'Le Minihic-sur-Rance', '30T', 572876, 5381085, 48.5786, -2.01195, 40),
('35183', 'Mondevert', '30T', 641684, 5327406, 48.0842, -1.0975, 120),
('35184', 'Montauban-de-Bretagne', '30T', 570838, 5339000, 48.2003, -2.04667, 70),
('35185', 'Montautour', '30T', 637720, 5340747, 48.205, -1.14638, 180),
('35186', 'Mont-Dol', '30T', 590922, 5380328, 48.5694, -1.7675, 61),
('35187', 'Monterfil', '30T', 576033, 5323997, 48.0647, -1.97945, 90),
('35188', 'Montfort-sur-Meu', '30T', 577869, 5332051, 48.1369, -1.95334, 38),
('35189', 'Montgermont', '30T', 595505, 5334294, 48.1547, -1.71584, 55),
('35190', 'Monthault', '30T', 634415, 5374710, 48.5111, -1.18, 160),
('35191', 'Montours', '30T', 625064, 5366897, 48.4428, -1.30889, 152),
('35192', 'Montreuil-des-Landes', '30T', 631811, 5345333, 48.2475, -1.22445, 110),
('35193', 'Montreuil-le-Gast', '30T', 594822, 5344351, 48.2453, -1.72277, 100),
('35194', 'Montreuil-sous-Pérouse', '30T', 631319, 5334418, 48.1494, -1.23445, 70),
('35195', 'Montreuil-sur-Ille', '30T', 598682, 5351334, 48.3075, -1.66916, 60),
('35196', 'Mordelles', '30T', 585809, 5325000, 48.0725, -1.84805, 40),
('35197', 'Mouazé', '30T', 603368, 5342893, 48.2308, -1.60805, 50),
('35198', 'Moulins', '30T', 621523, 5317770, 48.0017, -1.37083, 56),
('35199', 'Moussé', '30T', 629256, 5309413, 47.925, -1.26972, 60),
('35200', 'Moutiers', '30T', 633566, 5314237, 47.9675, -1.21056, 70),
('35201', 'Muel', '30T', 562919, 5330786, 48.1272, -2.15445, 53),
('35202', 'La Noë-Blanche', '30T', 594346, 5295241, 47.8036, -1.74, 55),
('35203', 'La Nouaye', '30T', 575932, 5334773, 48.1617, -1.97888, 50),
('35204', 'Nouvoitou', '30T', 608367, 5321861, 48.0408, -1.54611, 60),
('35205', 'Noyal-sous-Bazouges', '30T', 601703, 5363217, 48.4139, -1.62556, 70),
('35206', 'Noyal-Châtillon-sur-Seiche', '30T', 599729, 5321921, 48.0428, -1.66195, 25),
('35207', 'Noyal-sur-Vilaine', '30T', 610012, 5330046, 48.1142, -1.52194, 73),
('35208', 'Orgères', '30T', 599300, 5316818, 47.9969, -1.66889, 54),
('35209', 'Ossé', '30T', 615539, 5323607, 48.0553, -1.44945, 60),
('35210', 'Pacé', '30T', 591366, 5333424, 48.1475, -1.77167, 60),
('35211', 'Paimpont', '30T', 561995, 5318765, 48.0192, -2.16861, 150),
('35212', 'Pancé', '30T', 600059, 5304139, 47.8828, -1.66166, 97),
('35214', 'Parcé', '30T', 633598, 5348309, 48.2739, -1.19945, 110),
('35215', 'Parigné', '30T', 633933, 5365586, 48.4292, -1.18944, 150),
('35216', 'Parthenay-de-Bretagne', '30T', 586953, 5338234, 48.1914, -1.83, 80),
('35217', 'Le Pertre', '30T', 646418, 5321964, 48.0342, -1.03584, 150),
('35218', 'Le Petit-Fougeray', '30T', 604059, 5309274, 47.9283, -1.60694, 100),
('35219', 'Pipriac', '30T', 578864, 5295504, 47.8081, -1.94667, 60),
('35220', 'Piré-sur-Seiche', '30T', 617159, 5318328, 48.0075, -1.42916, 52),
('35221', 'Pléchâtel', '30T', 593452, 5305449, 47.8956, -1.74973, 67),
('35222', 'Pleine-Fougères', '30T', 606099, 5376609, 48.5336, -1.56277, 40),
('35223', 'Plélan-le-Grand', '30T', 567278, 5316941, 48.0022, -2.09805, 130),
('35224', 'Plerguer', '30T', 585129, 5375760, 48.5292, -1.84694, 25),
('35225', 'Plesder', '30T', 579795, 5362680, 48.4122, -1.92167, 76),
('35226', 'Pleugueneuc', '30T', 581340, 5361034, 48.3972, -1.90112, 67),
('35227', 'Pleumeleuc', '30T', 580482, 5337306, 48.1839, -1.91723, 85),
('35228', 'Pleurtuit', '30T', 569435, 5380980, 48.5781, -2.05861, 62),
('35229', 'Pocé-les-Bois', '30T', 630269, 5330625, 48.1156, -1.24972, 65),
('35230', 'Poilley', '30T', 628497, 5369568, 48.4661, -1.26167, 170),
('35231', 'Poligné', '30T', 598221, 5304694, 47.8881, -1.68611, 60),
('35232', 'Princé', '30T', 641960, 5342117, 48.2164, -1.08889, 150),
('35233', 'Québriac', '30T', 587084, 5355283, 48.3447, -1.82472, 50),
('35234', 'Quédillac', '30T', 563923, 5344477, 48.2503, -2.13889, 90),
('35235', 'Rannée', '30T', 631497, 5309464, 47.925, -1.23972, 75),
('35236', 'Redon', '30T', 569127, 5278243, 47.6539, -2.07945, 50),
('35237', 'Renac', '30T', 576872, 5285781, 47.7208, -1.97499, 40),
('35238', 'Rennes', '30T', 598239, 5329122, 48.1078, -1.68028, 35),
('35239', 'Retiers', '30T', 621084, 5308093, 47.9147, -1.37944, 59),
('35240', 'Le Rheu', '30T', 591402, 5325951, 48.0803, -1.77278, 30),
('35241', 'La Richardais', '30T', 571279, 5384245, 48.6072, -2.03305, 18),
('35242', 'Rimou', '30T', 610246, 5361677, 48.3986, -1.51055, 30),
('35243', 'Romagné', '30T', 627820, 5355837, 48.3428, -1.275, 114),
('35244', 'Romazy', '30T', 611365, 5359136, 48.3756, -1.49611, 60),
('35245', 'Romillé', '30T', 582373, 5340822, 48.2153, -1.89111, 102),
('35246', 'Roz-Landrieux', '30T', 587481, 5377494, 48.5444, -1.81473, 20),
('35247', 'Roz-sur-Couesnon', '30T', 603872, 5382806, 48.5897, -1.59138, 8),
('35248', 'Sains', '30T', 604397, 5378801, 48.5536, -1.58527, 65),
('35249', 'Sainte-Anne-sur-Vilaine', '30T', 588101, 5287269, 47.7328, -1.825, 30),
('35250', 'Saint-Armel', '30T', 605113, 5318558, 48.0117, -1.59056, 40),
('35251', 'Saint-Aubin-d''Aubigné', '30T', 603448, 5346416, 48.2625, -1.60611, 90),
('35252', 'Saint-Aubin-des-Landes', '30T', 626890, 5328140, 48.0939, -1.29584, 60),
('35253', 'Saint-Aubin-du-Cormier', '30T', 618893, 5346501, 48.2606, -1.39806, 112),
('35254', 'Saint-Aubin-du-Pavail', '30T', 614678, 5322138, 48.0422, -1.46139, 52),
('35255', 'Saint-Benoît-des-Ondes', '30T', 584713, 5385698, 48.6186, -1.85055, 8),
('35256', 'Saint-Briac-sur-Mer', '30T', 564015, 5385517, 48.6194, -2.13138, 19),
('35257', 'Saint-Brice-en-Coglès', '30T', 620948, 5363316, 48.4114, -1.36555, 110),
('35258', 'Saint-Brieuc-des-Iffs', '30T', 585279, 5349358, 48.2917, -1.85028, 78),
('35259', 'Saint-Broladre', '30T', 598983, 5382348, 48.5864, -1.65777, 7),
('35260', 'Saint-Christophe-des-Bois', '30T', 630360, 5342922, 48.2261, -1.24473, 129),
('35261', 'Saint-Christophe-de-Valains', '30T', 615141, 5355597, 48.3431, -1.44611, 73),
('35262', 'Sainte-Colombe', '30T', 615519, 5305014, 47.8881, -1.45472, 80),
('35263', 'Saint-Coulomb', '30T', 580138, 5392054, 48.6764, -1.91139, 40),
('35264', 'Saint-Didier', '30T', 621283, 5328112, 48.0947, -1.37112, 70),
('35265', 'Saint-Domineuc', '30T', 583334, 5358315, 48.3725, -1.87472, 35),
('35266', 'Saint-Erblon', '30T', 600562, 5319341, 48.0194, -1.65138, 30),
('35267', 'Saint-Étienne-en-Coglès', '30T', 624031, 5362426, 48.4028, -1.32417, 110),
('35268', 'Saint-Ganton', '30T', 583756, 5289521, 47.7536, -1.8825, 70),
('35269', 'Saint-Georges-de-Chesné', '30T', 626944, 5348034, 48.2728, -1.28917, 90),
('35270', 'Saint-Georges-de-Gréhaigne', '30T', 607113, 5380458, 48.5681, -1.54805, 20),
('35271', 'Saint-Georges-de-Reintembault', '30T', 629845, 5374387, 48.5092, -1.24194, 135),
('35272', 'Saint-Germain-du-Pinel', '30T', 636912, 5319197, 48.0114, -1.16417, 94),
('35273', 'Saint-Germain-en-Coglès', '30T', 628546, 5362897, 48.4061, -1.26305, 124),
('35274', 'Saint-Germain-sur-Ille', '30T', 599662, 5344742, 48.2481, -1.65751, 80),
('35275', 'Saint-Gilles', '30T', 587142, 5333976, 48.1531, -1.82833, 50),
('35276', 'Saint-Gondran', '30T', 586536, 5346628, 48.2669, -1.83389, 110),
('35277', 'Saint-Gonlay', '30T', 569654, 5329475, 48.1147, -2.06416, 62),
('35278', 'Saint-Grégoire', '30T', 598153, 5334123, 48.1528, -1.68028, 32),
('35279', 'Saint-Guinoux', '30T', 582408, 5380846, 48.5753, -1.88278, 10),
('35280', 'Saint-Hilaire-des-Landes', '30T', 621646, 5356629, 48.3511, -1.35806, 110),
('35281', 'Saint-Jacques-de-la-Lande', '30T', 595313, 5324718, 48.0686, -1.72056, 34),
('35282', 'Saint-Jean-sur-Couesnon', '30T', 621131, 5349884, 48.2906, -1.36695, 52),
('35283', 'Saint-Jean-sur-Vilaine', '30T', 622039, 5330506, 48.1161, -1.36028, 77),
('35284', 'Saint-Jouan-des-Guérets', '30T', 575755, 5383377, 48.5989, -1.9725, 46),
('35285', 'Saint-Just', '30T', 577846, 5290797, 47.7658, -1.96111, 70),
('35286', 'Saint-Léger-des-Prés', '30T', 599870, 5361084, 48.395, -1.65083, 50),
('35287', 'Saint-Lunaire', '30T', 565736, 5387111, 48.6336, -2.10778, 21),
('35288', 'Saint-Malo', '30T', 572816, 5387322, 48.6347, -2.01167, 30),
('35289', 'Saint-Malo-de-Phily', '30T', 590701, 5303428, 47.8778, -1.78695, 80),
('35290', 'Saint-Malon-sur-Mel', '30T', 567263, 5327069, 48.0933, -2.09666, 80),
('35291', 'Saint-Marcan', '30T', 600659, 5382594, 48.5883, -1.63499, 40),
('35292', 'Saint-Marc-le-Blanc', '30T', 617870, 5358032, 48.3644, -1.40861, 100),
('35293', 'Saint-Marc-sur-Couesnon', '30T', 621305, 5351401, 48.3042, -1.36417, 105),
('35294', 'Sainte-Marie', '30T', 574786, 5282728, 47.6936, -2.00333, 50),
('35295', 'Saint-Maugan', '30T', 568262, 5331712, 48.135, -2.0825, 60),
('35296', 'Saint-Médard-sur-Ille', '30T', 599657, 5347398, 48.2719, -1.65695, 80),
('35297', 'Saint-Méen-le-Grand', '30T', 560368, 5337459, 48.1875, -2.18778, 107),
('35299', 'Saint-Méloir-des-Ondes', '30T', 580872, 5387896, 48.6389, -1.90223, 50),
('35300', 'Saint-M''Hervé', '30T', 639962, 5337743, 48.1775, -1.11722, 116),
('35301', 'Saint-M''Hervon', '30T', 570139, 5342141, 48.2286, -2.05556, 80),
('35302', 'Saint-Onen-la-Chapelle', '30T', 561659, 5336454, 48.1783, -2.17056, 100),
('35303', 'Saint-Ouen-la-Rouërie', '30T', 615261, 5368912, 48.4628, -1.44084, 70),
('35304', 'Saint-Ouen-des-Alleux', '30T', 616862, 5353996, 48.3283, -1.42334, 85),
('35305', 'Saint-Péran', '30T', 570356, 5322783, 48.0544, -2.05583, 130),
('35306', 'Saint-Père', '30T', 579335, 5382284, 48.5886, -1.92416, 50),
('35307', 'Saint-Pern', '30T', 575065, 5348812, 48.2881, -1.98805, 100),
('35308', 'Saint-Pierre-de-Plesguen', '30T', 580356, 5366610, 48.4475, -1.91334, 71),
('35309', 'Saint-Rémy-du-Plain', '30T', 605969, 5358322, 48.3692, -1.56916, 100),
('35310', 'Saint-Sauveur-des-Landes', '30T', 625045, 5355621, 48.3414, -1.3125, 115),
('35311', 'Saint-Séglin', '30T', 574431, 5300540, 47.8539, -2.00501, 50),
('35312', 'Saint-Senoux', '30T', 590529, 5306482, 47.9053, -1.78861, 70),
('35314', 'Saint-Suliac', '30T', 575777, 5380228, 48.5706, -1.97278, 21),
('35315', 'Saint-Sulpice-la-Forêt', '30T', 605602, 5341483, 48.2178, -1.57833, 60),
('35316', 'Saint-Sulpice-des-Landes', '30T', 603091, 5291314, 47.7669, -1.62417, 40),
('35318', 'Saint-Thual', '30T', 579028, 5354301, 48.3369, -1.93361, 83),
('35319', 'Saint-Thurial', '30T', 579958, 5320098, 48.0292, -1.9275, 60),
('35320', 'Saint-Uniac', '30T', 572382, 5336086, 48.1739, -2.02639, 64),
('35321', 'Saulnières', '30T', 605453, 5307909, 47.9158, -1.58862, 97),
('35322', 'Le Sel-de-Bretagne', '30T', 603915, 5305720, 47.8964, -1.60972, 70),
('35323', 'La Selle-en-Coglès', '30T', 622466, 5366315, 48.4381, -1.34417, 122),
('35324', 'La Selle-en-Luitré', '30T', 638961, 5352485, 48.3103, -1.12584, 100),
('35325', 'La Selle-Guerchaise', '30T', 636489, 5311711, 47.9442, -1.17222, 74),
('35326', 'Sens-de-Bretagne', '30T', 608558, 5354202, 48.3317, -1.53528, 83),
('35327', 'Servon-sur-Vilaine', '30T', 614650, 5330816, 48.1203, -1.45944, 50),
('35328', 'Sixt-sur-Aff', '30T', 569090, 5291890, 47.7767, -2.07777, 47),
('35329', 'Sougéal', '30T', 609122, 5374072, 48.5103, -1.5225, 50),
('35330', 'Taillis', '30T', 631010, 5338890, 48.1897, -1.23722, 110),
('35331', 'Talensac', '30T', 580000, 5328962, 48.1089, -1.92528, 75),
('35332', 'Teillay', '30T', 609438, 5295908, 47.8072, -1.53834, 70),
('35333', 'Le Theil-de-Bretagne', '30T', 617376, 5308696, 47.9208, -1.42888, 80),
('35334', 'Thorigné-Fouillard', '30T', 605589, 5334348, 48.1536, -1.58028, 78),
('35335', 'Thourie', '30T', 613637, 5301394, 47.8558, -1.48083, 55),
('35336', 'Le Tiercent', '30T', 618272, 5356526, 48.3508, -1.40361, 80),
('35337', 'Tinténiac', '30T', 586451, 5353575, 48.3294, -1.83361, 40),
('35338', 'Torcé', '30T', 629183, 5324639, 48.0619, -1.26612, 90),
('35339', 'Trans-la-Forêt', '30T', 604309, 5372437, 48.4964, -1.58806, 90),
('35340', 'Treffendel', '30T', 574247, 5321257, 48.0403, -2.00389, 121),
('35341', 'Tremblay', '30T', 612804, 5364384, 48.4225, -1.47528, 70),
('35342', 'Trémeheuc', '30T', 596271, 5364697, 48.4281, -1.69861, 95),
('35344', 'Tressé', '30T', 582457, 5370470, 48.4819, -1.88417, 59),
('35345', 'Trévérien', '30T', 579366, 5358135, 48.3714, -1.92833, 17),
('35346', 'Trimer', '30T', 582048, 5354745, 48.3406, -1.89278, 70),
('35347', 'Val-d''Izé', '30T', 626194, 5337206, 48.1756, -1.3025, 90),
('35348', 'Vendel', '30T', 625293, 5350901, 48.2989, -1.31056, 60),
('35350', 'Vergéal', '30T', 629416, 5321679, 48.0353, -1.26388, 89),
('35351', 'Le Verger', '30T', 579523, 5324570, 48.0694, -1.9325, 50),
('35352', 'Vern-sur-Seiche', '30T', 604235, 5322403, 48.0464, -1.60139, 50),
('35353', 'Vezin-le-Coquet', '30T', 592575, 5330201, 48.1183, -1.75612, 40),
('35354', 'Vieux-Viel', '30T', 607702, 5374292, 48.5125, -1.54167, 27),
('35355', 'Vieux-Vy-sur-Couesnon', '30T', 612014, 5355442, 48.3422, -1.48834, 67),
('35356', 'Vignoc', '30T', 590425, 5344527, 48.2475, -1.78195, 100),
('35357', 'Villamée', '30T', 631628, 5369208, 48.4622, -1.21945, 140),
('35358', 'La Ville-ès-Nonais', '30T', 577286, 5377777, 48.5483, -1.95278, 40),
('35359', 'Visseiche', '30T', 626896, 5312882, 47.9567, -1.30028, 55),
('35360', 'Vitré', '30T', 633074, 5331864, 48.1261, -1.21166, 112),
('35361', 'Le Vivier-sur-Mer', '30T', 590104, 5384021, 48.6028, -1.77778, 8),
('35362', 'Le Tronchet', '30T', 585979, 5371078, 48.4869, -1.8364, 47),
('35363', 'Pont-Péan', '30T', 596782, 5318628, 48.0136, -1.70222, 40),
('36001', 'Aigurande', '31T', 409860, 5142988, 46.4344, 1.82667, 420),
('36002', 'Aize', '31T', 401567, 5217371, 47.1025, 1.70277, 120),
('36003', 'Ambrault', '31T', 420534, 5181922, 46.7861, 1.95889, 170),
('36004', 'Anjouin', '31T', 409304, 5226974, 47.19, 1.80278, 120),
('36005', 'Ardentes', '31T', 411027, 5177208, 46.7425, 1.83528, 170),
('36006', 'Argenton-sur-Creuse', '31T', 386512, 5160330, 46.5869, 1.51861, 120),
('36007', 'Argy', '31T', 381374, 5199675, 46.94, 1.44139, 124),
('36008', 'Arpheuilles', '31T', 368910, 5195551, 46.9006, 1.27889, 110),
('36009', 'Arthon', '31T', 400606, 5172061, 46.6947, 1.7, 140),
('36010', 'Azay-le-Ferron', '31T', 352762, 5190522, 46.8519, 1.06862, 110),
('36011', 'Bagneux', '31T', 405546, 5226261, 47.1831, 1.75333, 115),
('36012', 'Baraize', '31T', 389654, 5149342, 46.4886, 1.56222, 220),
('36013', 'Baudres', '31T', 391972, 5212597, 47.0581, 1.57751, 140),
('36014', 'Bazaiges', '31T', 387649, 5150460, 46.4983, 1.53583, 260),
('36015', 'Beaulieu', '31T', 369887, 5138556, 46.3881, 1.30777, 210),
('36016', 'Bélâbre', '31T', 358951, 5157082, 46.5525, 1.16001, 110),
('36017', 'La Berthenoux', '31T', 428256, 5167933, 46.6611, 2.06223, 245),
('36018', 'Le Blanc', '31T', 351831, 5166486, 46.6356, 1.06417, 90),
('36019', 'Bommiers', '31T', 422412, 5182885, 46.795, 1.98333, 160),
('36020', 'Bonneuil', '31T', 363553, 5137181, 46.3744, 1.22584, 210),
('36021', 'Les Bordes', '31T', 422047, 5203637, 46.9817, 1.97499, 150),
('36022', 'Bouesse', '31T', 399374, 5163190, 46.6147, 1.68583, 187),
('36023', 'Bouges-le-Château', '31T', 399197, 5210618, 47.0414, 1.67306, 131),
('36024', 'Bretagne', '31T', 399905, 5206314, 47.0028, 1.68333, 142),
('36025', 'Briantes', '31T', 425244, 5156454, 46.5575, 2.02472, 220),
('36026', 'Brion', '31T', 403391, 5201131, 46.9567, 1.73028, 180),
('36027', 'Brives', '31T', 419795, 5188477, 46.845, 1.94806, 144),
('36028', 'La Buxerette', '31T', 407513, 5150062, 46.4978, 1.79472, 360),
('36029', 'Buxeuil', '31T', 400466, 5220848, 47.1336, 1.6875, 110),
('36030', 'Buxières-d''Aillac', '31T', 404711, 5165697, 46.6381, 1.755, 170),
('36031', 'Buzançais', '31T', 380057, 5194113, 46.8897, 1.42556, 130),
('36032', 'Ceaulmont', '31T', 390939, 5153178, 46.5233, 1.57806, 230),
('36033', 'Celon', '31T', 385414, 5152941, 46.5203, 1.50611, 200),
('36034', 'Chabris', '31T', 398316, 5234254, 47.2539, 1.65611, 90),
('36035', 'Chaillac', '31T', 369487, 5143783, 46.435, 1.30111, 190),
('36036', 'Chalais', '31T', 361953, 5155129, 46.5356, 1.19973, 103),
('36037', 'La Champenoise', '31T', 408817, 5199255, 46.9406, 1.80195, 173),
('36038', 'Champillet', '31T', 432151, 5155231, 46.5472, 2.115, 240),
('36040', 'La Chapelle-Orthemale', '31T', 382156, 5188914, 46.8433, 1.45444, 140),
('36041', 'La Chapelle-Saint-Laurian', '31T', 407590, 5212859, 47.0628, 1.78306, 145),
('36042', 'Chasseneuil', '31T', 385047, 5167212, 46.6486, 1.49778, 154),
('36043', 'Chassignolles', '31T', 418769, 5154748, 46.5414, 1.94056, 283),
('36044', 'Châteauroux', '31T', 400735, 5185027, 46.8114, 1.69889, 143),
('36045', 'Châtillon-sur-Indre', '31T', 361287, 5205421, 46.9878, 1.17584, 100),
('36046', 'La Châtre', '31T', 422596, 5159204, 46.5819, 1.98972, 210),
('36047', 'La Châtre-Langlin', '31T', 376233, 5140647, 46.4081, 1.38972, 252),
('36048', 'Chavin', '31T', 393611, 5157299, 46.5608, 1.61194, 205),
('36049', 'Chazelet', '31T', 380637, 5151705, 46.5083, 1.44417, 210),
('36050', 'Chezelles', '31T', 391607, 5193707, 46.8881, 1.57722, 140),
('36051', 'Chitray', '31T', 374772, 5165997, 46.6358, 1.36389, 90),
('36052', 'Chouday', '31T', 428775, 5195556, 46.9097, 2.06472, 160),
('36053', 'Ciron', '31T', 366129, 5165689, 46.6314, 1.25111, 90),
('36054', 'Cléré-du-Bois', '31T', 355706, 5198388, 46.9233, 1.10472, 132),
('36055', 'Clion', '31T', 365669, 5200132, 46.9411, 1.235, 100),
('36056', 'Cluis', '31T', 404014, 5155241, 46.5439, 1.74806, 280),
('36057', 'Coings', '31T', 402161, 5193123, 46.8844, 1.71584, 158),
('36058', 'Concremiers', '31T', 348150, 5162254, 46.5967, 1.01749, 80),
('36059', 'Condé', '31T', 422703, 5192267, 46.8794, 1.98555, 145),
('36060', 'Crevant', '31T', 419200, 5148722, 46.4872, 1.94723, 371),
('36061', 'Crozon-sur-Vauvre', '31T', 413277, 5149082, 46.4897, 1.87, 273),
('36062', 'Cuzion', '31T', 393112, 5148292, 46.4797, 1.6075, 250),
('36063', 'Déols', '31T', 401446, 5186991, 46.8292, 1.70778, 150),
('36064', 'Diors', '31T', 410723, 5186691, 46.8278, 1.82945, 160),
('36065', 'Diou', '31T', 426004, 5210872, 47.0472, 2.02583, 120),
('36066', 'Douadic', '31T', 355799, 5174049, 46.7044, 1.11361, 93),
('36067', 'Dunet', '31T', 368841, 5147472, 46.4681, 1.29167, 170),
('36068', 'Dun-le-Poëlier', '31T', 405602, 5228452, 47.2028, 1.75361, 95),
('36069', 'Écueillé', '31T', 374396, 5215784, 47.0836, 1.34527, 150),
('36070', 'Éguzon-Chantôme', '31T', 391222, 5144003, 46.4408, 1.58389, 260),
('36071', 'Étrechet', '31T', 407355, 5181339, 46.7792, 1.78638, 155),
('36072', 'Faverolles', '31T', 379423, 5225438, 47.1714, 1.40888, 120),
('36073', 'Feusines', '31T', 431119, 5152526, 46.5228, 2.10194, 290),
('36074', 'Fléré-la-Rivière', '31T', 356303, 5209091, 47.0197, 1.10917, 86),
('36075', 'Fontenay', '31T', 404823, 5212655, 47.0606, 1.74667, 130),
('36076', 'Fontgombault', '31T', 346117, 5170984, 46.6747, 0.988059, 94),
('36077', 'Fontguenand', '31T', 389373, 5230494, 47.2186, 1.53889, 110),
('36078', 'Fougerolles', '31T', 413309, 5157262, 46.5633, 1.86889, 250),
('36079', 'Francillon', '31T', 390594, 5199623, 46.9411, 1.5625, 185),
('36080', 'Frédille', '31T', 384490, 5206562, 47.0025, 1.48056, 168),
('36081', 'Gargilesse-Dampierre', '31T', 392475, 5152101, 46.5139, 1.59833, 150),
('36082', 'Gehée', '31T', 386337, 5211498, 47.0472, 1.50361, 125),
('36083', 'Giroux', '31T', 417510, 5213145, 47.0667, 1.91361, 151),
('36084', 'Gournay', '31T', 402785, 5159614, 46.5831, 1.73112, 200),
('36085', 'Guilly', '31T', 403361, 5214902, 47.0806, 1.72694, 140),
('36086', 'Heugnes', '31T', 379145, 5207626, 47.0111, 1.40999, 150),
('36087', 'Ingrandes', '31T', 344067, 5162420, 46.5972, 0.964165, 87),
('36088', 'Issoudun', '31T', 423203, 5199824, 46.9475, 1.99084, 140),
('36089', 'Jeu-les-Bois', '31T', 407980, 5169505, 46.6728, 1.79694, 171),
('36090', 'Jeu-Maloches', '31T', 382879, 5210577, 47.0383, 1.45834, 140),
('36091', 'Lacs', '31T', 425579, 5159414, 46.5842, 2.02861, 220),
('36092', 'Langé', '31T', 387407, 5214504, 47.0744, 1.51694, 110),
('36093', 'Levroux', '31T', 394706, 5203717, 46.9786, 1.61556, 137),
('36094', 'Lignac', '31T', 363379, 5147499, 46.4672, 1.22056, 156),
('36095', 'Lignerolles', '31T', 434218, 5149436, 46.4953, 2.14278, 351),
('36096', 'Lingé', '31T', 353811, 5179656, 46.7544, 1.08584, 110),
('36097', 'Liniez', '31T', 405158, 5208544, 47.0236, 1.75194, 158),
('36098', 'Lizeray', '31T', 416852, 5203830, 46.9828, 1.90666, 160),
('36099', 'Lourdoueix-Saint-Michel', '31T', 402440, 5142176, 46.4261, 1.73027, 350),
('36100', 'Lourouer-Saint-Laurent', '31T', 424378, 5163813, 46.6236, 2.01222, 210),
('36101', 'Luant', '31T', 389894, 5176447, 46.7325, 1.55889, 142),
('36102', 'Luçay-le-Libre', '31T', 416824, 5215409, 47.0869, 1.90416, 137),
('36103', 'Luçay-le-Mâle', '31T', 381682, 5220452, 47.1269, 1.44, 140),
('36104', 'Lurais', '31T', 343506, 5174418, 46.705, 0.952776, 80),
('36105', 'Lureuil', '31T', 350497, 5178718, 46.7453, 1.04278, 141),
('36106', 'Luzeret', '31T', 376836, 5155610, 46.5428, 1.39361, 150),
('36107', 'Lye', '31T', 384533, 5231543, 47.2272, 1.47472, 90),
('36108', 'Lys-Saint-Georges', '31T', 410120, 5166169, 46.6431, 1.82556, 210),
('36109', 'Le Magny', '31T', 420317, 5157475, 46.5661, 1.96028, 250),
('36110', 'Maillet', '31T', 398936, 5158597, 46.5733, 1.68111, 220),
('36111', 'Malicornay', '31T', 396431, 5159071, 46.5772, 1.64833, 225),
('36112', 'Mâron', '31T', 413506, 5184242, 46.8061, 1.86639, 160),
('36113', 'Martizay', '31T', 350755, 5185661, 46.8078, 1.04389, 80),
('36114', 'Mauvières', '31T', 353705, 5159553, 46.5736, 1.09083, 95),
('36115', 'Menetou-sur-Nahon', '31T', 397595, 5230283, 47.2181, 1.6475, 90),
('36116', 'Ménétréols-sous-Vatan', '31T', 412030, 5207759, 47.0175, 1.84251, 210),
('36117', 'Le Menoux', '31T', 390509, 5156490, 46.5531, 1.57167, 159),
('36118', 'Méobecq', '31T', 378806, 5177247, 46.7378, 1.41361, 121),
('36119', 'Mérigny', '31T', 341340, 5166382, 46.6322, 0.927226, 80),
('36120', 'Mers-sur-Indre', '31T', 414375, 5167898, 46.6592, 1.88083, 180),
('36121', 'Meunet-Planches', '31T', 420443, 5187820, 46.8392, 1.95667, 145),
('36122', 'Meunet-sur-Vatan', '31T', 413903, 5214617, 47.0794, 1.86584, 130),
('36123', 'Mézières-en-Brenne', '31T', 363504, 5186840, 46.8211, 1.21055, 90),
('36124', 'Migné', '31T', 371500, 5175144, 46.7175, 1.31861, 110),
('36125', 'Migny', '31T', 429139, 5208302, 47.0244, 2.0675, 120),
('36126', 'Montchevrier', '31T', 403540, 5148241, 46.4808, 1.74333, 336),
('36127', 'Montgivray', '31T', 421924, 5161560, 46.6031, 1.98055, 200),
('36128', 'Montierchaume', '31T', 406464, 5190770, 46.8639, 1.77278, 160),
('36129', 'Montipouret', '31T', 415997, 5166826, 46.6497, 1.90222, 210),
('36130', 'Montlevicq', '31T', 428804, 5158542, 46.5767, 2.07084, 247),
('36131', 'Mosnay', '31T', 395135, 5164127, 46.6225, 1.63027, 170),
('36132', 'La Motte-Feuilly', '31T', 430314, 5154789, 46.5431, 2.0911, 250),
('36133', 'Mouhers', '31T', 406307, 5157521, 46.5647, 1.7775, 238),
('36134', 'Mouhet', '31T', 379572, 5137770, 46.3828, 1.43389, 260),
('36135', 'Moulins-sur-Céphons', '31T', 390313, 5207348, 47.0106, 1.55694, 130),
('36136', 'Murs', '31T', 360143, 5197202, 46.9136, 1.16333, 130),
('36137', 'Néons-sur-Creuse', '31T', 342077, 5179057, 46.7464, 0.932501, 80),
('36138', 'Néret', '31T', 434839, 5157578, 46.5686, 2.14972, 248),
('36139', 'Neuillay-les-Bois', '31T', 383791, 5180360, 46.7667, 1.47805, 130),
('36140', 'Neuvy-Pailloux', '31T', 413191, 5193262, 46.8872, 1.86055, 150),
('36141', 'Neuvy-Saint-Sépulchre', '31T', 408767, 5161064, 46.5969, 1.80889, 185),
('36142', 'Niherne', '31T', 390557, 5187180, 46.8292, 1.565, 130),
('36143', 'Nohant-Vic', '31T', 421599, 5164342, 46.6281, 1.97584, 210),
('36144', 'Nuret-le-Ferron', '31T', 380172, 5171198, 46.6836, 1.43306, 145),
('36145', 'Obterre', '31T', 350757, 5197645, 46.9156, 1.04, 110),
('36146', 'Orsennes', '31T', 398906, 5147884, 46.4769, 1.68305, 289),
('36147', 'Orville', '31T', 408420, 5222911, 47.1533, 1.79194, 113),
('36148', 'Oulches', '31T', 369533, 5163730, 46.6144, 1.29611, 127),
('36149', 'Palluau-sur-Indre', '31T', 371637, 5200279, 46.9436, 1.31334, 130),
('36150', 'Parnac', '31T', 380473, 5145564, 46.4531, 1.44361, 240),
('36151', 'Parpeçay', '31T', 398058, 5229040, 47.2069, 1.65389, 91),
('36152', 'Paudy', '31T', 417974, 5210082, 47.0392, 1.92028, 152),
('36153', 'Paulnay', '31T', 359004, 5190187, 46.8503, 1.15055, 104),
('36154', 'Le Pêchereau', '31T', 388879, 5159391, 46.5789, 1.54972, 150),
('36155', 'Pellevoisin', '31T', 379611, 5204528, 46.9833, 1.41695, 150),
('36156', 'Pérassay', '31T', 434574, 5146839, 46.4719, 2.14778, 350),
('36157', 'La Pérouille', '31T', 386630, 5173358, 46.7042, 1.51695, 157),
('36158', 'Badecon-le-Pin', '31T', 392189, 5155163, 46.5414, 1.59389, 200),
('36159', 'Le Poinçonnet', '31T', 402322, 5179629, 46.7631, 1.72083, 165),
('36160', 'Pommiers', '31T', 396947, 5153104, 46.5236, 1.65638, 250),
('36161', 'Le Pont-Chrétien-Chabenet', '31T', 383778, 5165384, 46.6319, 1.48166, 105),
('36162', 'Poulaines', '31T', 398668, 5222885, 47.1517, 1.66334, 114),
('36163', 'Pouligny-Notre-Dame', '31T', 424424, 5148778, 46.4883, 2.01527, 324),
('36164', 'Pouligny-Saint-Martin', '31T', 424590, 5151801, 46.5156, 2.01694, 281),
('36165', 'Pouligny-Saint-Pierre', '31T', 350085, 5171563, 46.6808, 1.03972, 114),
('36166', 'Préaux', '31T', 370344, 5208923, 47.0211, 1.29388, 150),
('36167', 'Preuilly-la-Ville', '31T', 345149, 5173851, 46.7003, 0.974447, 100),
('36168', 'Prissac', '31T', 370221, 5152135, 46.5103, 1.30834, 160),
('36169', 'Pruniers', '31T', 427406, 5182020, 46.7878, 2.04889, 168),
('36170', 'Reboursin', '31T', 410615, 5217568, 47.1056, 1.82195, 115),
('36171', 'Reuilly', '31T', 427385, 5215085, 47.0853, 2.04333, 120),
('36172', 'Rivarennes', '31T', 376683, 5165834, 46.6347, 1.38889, 90),
('36173', 'Rosnay', '31T', 363499, 5173530, 46.7014, 1.21445, 114),
('36174', 'Roussines', '31T', 376436, 5147467, 46.4694, 1.39056, 229),
('36175', 'Rouvres-les-Bois', '31T', 398137, 5214033, 47.0719, 1.65834, 140),
('36176', 'Ruffec', '31T', 360237, 5165729, 46.6306, 1.17416, 81),
('36177', 'Sacierges-Saint-Martin', '31T', 374643, 5150498, 46.4964, 1.3664, 142),
('36178', 'Saint-Aigny', '31T', 349073, 5167636, 46.6453, 1.02778, 80),
('36179', 'Saint-Aoustrille', '31T', 418073, 5198873, 46.9383, 1.92361, 152),
('36180', 'Saint-Août', '31T', 421005, 5175803, 46.7311, 1.96611, 198),
('36181', 'Saint-Aubin', '31T', 425733, 5189080, 46.8511, 2.02583, 165),
('36182', 'Saint-Benoît-du-Sault', '31T', 376481, 5144440, 46.4422, 1.39194, 200),
('36183', 'Sainte-Cécile', '31T', 399305, 5226888, 47.1878, 1.67084, 100),
('36184', 'Saint-Chartier', '31T', 421693, 5166718, 46.6494, 1.97666, 195),
('36185', 'Saint-Christophe-en-Bazelle', '31T', 402489, 5227236, 47.1914, 1.71278, 107),
('36186', 'Saint-Christophe-en-Boucherie', '31T', 433016, 5169792, 46.6783, 2.12417, 270),
('36187', 'Saint-Civran', '31T', 376671, 5150612, 46.4978, 1.39278, 170),
('36188', 'Saint-Cyran-du-Jambot', '31T', 358784, 5208630, 47.0161, 1.14194, 90),
('36189', 'Saint-Denis-de-Jouhet', '31T', 413363, 5153619, 46.5306, 1.87028, 270),
('36190', 'Sainte-Fauste', '31T', 413631, 5190014, 46.8581, 1.86694, 160),
('36191', 'Saint-Florentin', '31T', 408966, 5214567, 47.0783, 1.80083, 130),
('36192', 'Saint-Gaultier', '31T', 379388, 5165995, 46.6367, 1.42417, 110),
('36193', 'Sainte-Gemme', '31T', 373433, 5190204, 46.8533, 1.33973, 110),
('36194', 'Saint-Genou', '31T', 373652, 5198568, 46.9286, 1.34028, 102),
('36195', 'Saint-Georges-sur-Arnon', '31T', 431109, 5205285, 46.9975, 2.09388, 138),
('36196', 'Saint-Gilles', '31T', 381855, 5148563, 46.4803, 1.46084, 230),
('36197', 'Saint-Hilaire-sur-Benaize', '31T', 352477, 5158101, 46.5603, 1.07528, 92),
('36198', 'Saint-Lactencin', '31T', 385387, 5194965, 46.8983, 1.49528, 150),
('36199', 'Sainte-Lizaigne', '31T', 425845, 5206583, 47.0086, 2.02444, 120),
('36200', 'Saint-Marcel', '31T', 386015, 5162192, 46.6036, 1.51166, 150),
('36201', 'Saint-Martin-de-Lamps', '31T', 388014, 5205260, 46.9914, 1.52722, 140),
('36202', 'Saint-Maur', '31T', 396275, 5184546, 46.8064, 1.64055, 140),
('36203', 'Saint-Médard', '31T', 368072, 5206440, 46.9983, 1.26473, 126),
('36204', 'Saint-Michel-en-Brenne', '31T', 360038, 5185468, 46.8081, 1.16555, 85),
('36205', 'Saint-Pierre-de-Jards', '31T', 421648, 5216640, 47.0986, 1.96749, 144),
('36206', 'Saint-Pierre-de-Lamps', '31T', 386982, 5203180, 46.9725, 1.51417, 160),
('36207', 'Saint-Plantaire', '31T', 397846, 5145741, 46.4575, 1.66972, 317),
('36208', 'Sainte-Sévère-sur-Indre', '31T', 428792, 5148509, 46.4864, 2.07222, 300),
('36209', 'Saint-Valentin', '31T', 413844, 5200353, 46.9511, 1.86778, 156),
('36210', 'Sarzay', '31T', 416220, 5161420, 46.6011, 1.90611, 210),
('36211', 'Sassierges-Saint-Germain', '31T', 415589, 5180137, 46.7694, 1.89445, 160),
('36212', 'Saulnay', '31T', 368136, 5192140, 46.8697, 1.26972, 110),
('36213', 'Sauzelles', '31T', 347468, 5169776, 46.6642, 1.00611, 106),
('36214', 'Sazeray', '31T', 427287, 5142137, 46.4289, 2.05361, 396),
('36215', 'Ségry', '31T', 430083, 5193411, 46.8906, 2.08222, 150),
('36216', 'Selles-sur-Nahon', '31T', 383205, 5207853, 47.0139, 1.46333, 154),
('36217', 'Sembleçay', '31T', 400419, 5230544, 47.2208, 1.68473, 87),
('36218', 'Sougé', '31T', 385080, 5202135, 46.9628, 1.48944, 135),
('36219', 'Tendu', '31T', 389800, 5166692, 46.6447, 1.56, 169),
('36220', 'Thenay', '31T', 379924, 5165182, 46.6294, 1.43139, 100),
('36221', 'Thevet-Saint-Julien', '31T', 428820, 5165302, 46.6375, 2.07001, 210),
('36222', 'Thizay', '31T', 417208, 5194440, 46.8983, 1.91305, 152),
('36223', 'Tilly', '31T', 361816, 5140679, 46.4056, 1.20223, 203),
('36224', 'Tournon-Saint-Martin', '31T', 343783, 5177716, 46.7347, 0.955277, 72),
('36225', 'Le Tranger', '31T', 366259, 5201941, 46.9575, 1.24222, 100),
('36226', 'Tranzault', '31T', 412101, 5164967, 46.6325, 1.85167, 230),
('36227', 'Urciers', '31T', 433478, 5153827, 46.5347, 2.13251, 282),
('36228', 'Valençay', '31T', 391565, 5223814, 47.1589, 1.56945, 120),
('36229', 'Varennes-sur-Fouzon', '31T', 394472, 5229752, 47.2128, 1.60639, 85),
('36230', 'Vatan', '31T', 409675, 5214000, 47.0733, 1.81028, 130),
('36231', 'Velles', '31T', 396668, 5171603, 46.69, 1.64861, 138),
('36233', 'La Vernelle', '31T', 389769, 5233698, 47.2475, 1.54333, 83),
('36234', 'Verneuil-sur-Igneraie', '31T', 424465, 5167362, 46.6556, 2.01278, 234),
('36235', 'Veuil', '31T', 388285, 5219675, 47.1211, 1.52722, 120),
('36236', 'Vicq-Exemplet', '31T', 434314, 5164159, 46.6278, 2.14194, 260),
('36237', 'Vicq-sur-Nahon', '31T', 388761, 5218060, 47.1067, 1.53389, 138),
('36238', 'Vigoulant', '31T', 428815, 5143199, 46.4386, 2.07333, 346),
('36239', 'Vigoux', '31T', 384050, 5151824, 46.51, 1.48861, 200),
('36240', 'Vijon', '31T', 432283, 5142265, 46.4306, 2.11861, 390),
('36241', 'Villedieu-sur-Indre', '31T', 388837, 5189311, 46.8481, 1.54194, 130),
('36242', 'Villegongis', '31T', 393243, 5196364, 46.9122, 1.59806, 156),
('36243', 'Villegouin', '31T', 376526, 5202522, 46.9647, 1.37694, 126),
('36244', 'Villentrois', '31T', 383664, 5227978, 47.195, 1.46417, 100),
('36245', 'Villers-les-Ormes', '31T', 395889, 5191593, 46.8697, 1.63389, 167),
('36246', 'Villiers', '31T', 361894, 5194196, 46.8869, 1.18723, 140),
('36247', 'Vineuil', '31T', 396137, 5194892, 46.8994, 1.63639, 175),
('36248', 'Vouillon', '31T', 418044, 5185907, 46.8217, 1.92556, 150),
('37001', 'Abilly', '31T', 327131, 5201186, 46.9417, 0.728604, 60),
('37002', 'Ambillou', '31T', 307463, 5258428, 47.4508, 0.445836, 95),
('37003', 'Amboise', '31T', 348041, 5252355, 47.4069, 0.985834, 60),
('37004', 'Anché', '31T', 296003, 5224018, 47.1381, 0.309722, 36),
('37005', 'Antogny le Tillac', '31T', 315899, 5205415, 46.9767, 0.579438, 50),
('37006', 'Artannes-sur-Indre', '31T', 318494, 5238240, 47.2725, 0.600284, 50),
('37007', 'Assay', '31T', 294367, 5216966, 47.0742, 0.291391, 45),
('37008', 'Athée-sur-Cher', '31T', 342608, 5242891, 47.3206, 0.917223, 90),
('37009', 'Autrèche', '31T', 349321, 5265419, 47.5247, 0.998333, 100),
('37010', 'Auzouer-en-Touraine', '31T', 343498, 5267518, 47.5422, 0.920283, 97),
('37011', 'Avoine', '31T', 286707, 5231732, 47.2044, 0.18361, 32),
('37012', 'Avon-les-Roches', '31T', 306703, 5225606, 47.1556, 0.450001, 70),
('37013', 'Avrillé-les-Ponceaux', '31T', 295243, 5252476, 47.3936, 0.286661, 80),
('37014', 'Azay-le-Rideau', '31T', 308307, 5237357, 47.2617, 0.466111, 45),
('37015', 'Azay-sur-Cher', '31T', 337406, 5246214, 47.3492, 0.847219, 60),
('37016', 'Azay-sur-Indre', '31T', 344483, 5230331, 47.2081, 0.946393, 70),
('37018', 'Ballan-Miré', '31T', 319713, 5245772, 47.3406, 0.613338, 80),
('37019', 'Barrou', '31T', 330255, 5192725, 46.8664, 0.772775, 56),
('37020', 'Beaulieu-lès-Loches', '31T', 349412, 5221369, 47.1286, 1.01445, 79),
('37021', 'Beaumont-la-Ronce', '31T', 324927, 5271227, 47.5708, 0.672219, 124),
('37022', 'Beaumont-en-Véron', '31T', 286998, 5230454, 47.1931, 0.188056, 42),
('37023', 'Beaumont-Village', '31T', 364279, 5226291, 47.1761, 1.20888, 105),
('37024', 'Benais', '31T', 289570, 5241704, 47.295, 0.216673, 50),
('37025', 'Berthenay', '31T', 313077, 5248451, 47.3628, 0.524446, 40),
('37026', 'Betz-le-Château', '31T', 341971, 5206335, 46.9917, 0.921662, 110),
('37027', 'Bléré', '31T', 348353, 5243296, 47.3256, 0.99306, 60),
('37028', 'Bossay-sur-Claise', '31T', 344591, 5188413, 46.8311, 0.962218, 76),
('37029', 'Bossée', '31T', 327808, 5220134, 47.1122, 0.730278, 115),
('37030', 'Le Boulay', '31T', 339158, 5274741, 47.6061, 0.860005, 120),
('37031', 'Bourgueil', '31T', 285880, 5240292, 47.2811, 0.168605, 40),
('37032', 'Bournan', '31T', 327624, 5214518, 47.0617, 0.730002, 115),
('37033', 'Boussay', '31T', 338946, 5189735, 46.8417, 0.887783, 95),
('37034', 'Braslou', '31T', 301853, 5208492, 47.0003, 0.393605, 80),
('37035', 'Braye-sous-Faye', '31T', 298398, 5207589, 46.9911, 0.348609, 65),
('37036', 'Braye-sur-Maulne', '31T', 293030, 5270572, 47.5556, 0.248888, 70),
('37037', 'Brèches', '31T', 303615, 5271782, 47.5697, 0.388892, 100),
('37038', 'Bréhémont', '31T', 300318, 5241238, 47.2942, 0.358885, 35),
('37039', 'Bridoré', '31T', 354356, 5209787, 47.0256, 1.08334, 130),
('37040', 'Brizay', '31T', 302966, 5219703, 47.1014, 0.403339, 57),
('37041', 'Bueil-en-Touraine', '31T', 316142, 5279748, 47.645, 0.551946, 90),
('37042', 'Candes-Saint-Martin', '31T', 278258, 5232785, 47.2111, 0.0716725, 50),
('37043', 'Cangey', '31T', 353864, 5258817, 47.4664, 1.06083, 60),
('37044', 'La Celle-Guenand', '31T', 339915, 5201385, 46.9467, 0.896388, 90),
('37045', 'La Celle-Saint-Avant', '31T', 318058, 5210323, 47.0214, 0.605828, 60),
('37046', 'Céré-la-Ronde', '31T', 363210, 5235581, 47.2594, 1.19194, 130),
('37047', 'Cerelles', '31T', 325484, 5263270, 47.4994, 0.682774, 100),
('37048', 'Chambon', '31T', 333230, 5189984, 46.8425, 0.812782, 70),
('37049', 'Chambourg-sur-Indre', '31T', 346197, 5227444, 47.1825, 0.970003, 75),
('37050', 'Chambray-lès-Tours', '31T', 327300, 5245266, 47.3381, 0.713888, 90),
('37051', 'Champigny-sur-Veude', '31T', 296866, 5215953, 47.0658, 0.324727, 45),
('37052', 'Chançay', '31T', 339629, 5257645, 47.4525, 0.872496, 70),
('37053', 'Chanceaux-près-Loches', '31T', 343714, 5223524, 47.1467, 0.938617, 90),
('37054', 'Chanceaux-sur-Choisille', '31T', 326878, 5260140, 47.4717, 0.702496, 100),
('37055', 'Channay-sur-Lathan', '31T', 293883, 5262135, 47.48, 0.264161, 85),
('37056', 'La Chapelle-aux-Naux', '31T', 305655, 5243686, 47.3178, 0.428333, 44),
('37057', 'La Chapelle-Blanche-Saint-Martin', '31T', 332423, 5217037, 47.0856, 0.792215, 120),
('37058', 'La Chapelle-sur-Loire', '31T', 289850, 5236595, 47.2492, 0.222777, 38),
('37059', 'Charentilly', '31T', 319921, 5260071, 47.4692, 0.610279, 90),
('37060', 'Chargé', '31T', 351508, 5255108, 47.4325, 1.03084, 70),
('37061', 'Charnizay', '31T', 346860, 5197527, 46.9136, 0.98889, 110),
('37062', 'Château-la-Vallière', '31T', 298476, 5269547, 47.5481, 0.321665, 90),
('37063', 'Château-Renault', '31T', 342935, 5273032, 47.5917, 0.910835, 100),
('37064', 'Chaumussay', '31T', 337194, 5193119, 46.8717, 0.863615, 69),
('37065', 'Chaveignes', '31T', 298722, 5212769, 47.0378, 0.350562, 50),
('37066', 'Chédigny', '31T', 348672, 5230346, 47.2092, 1.00167, 70),
('37067', 'Cheillé', '31T', 303785, 5237382, 47.2606, 0.406388, 50),
('37068', 'Chemillé-sur-Dême', '31T', 323299, 5280948, 47.6578, 0.646672, 100),
('37069', 'Chemillé-sur-Indrois', '31T', 361022, 5224792, 47.1619, 1.16639, 97),
('37070', 'Chenonceaux', '31T', 354080, 5243893, 47.3322, 1.06861, 65),
('37071', 'Chezelles', '31T', 305884, 5214755, 47.0578, 0.443885, 60),
('37072', 'Chinon', '31T', 291359, 5227486, 47.1678, 0.246939, 50),
('37073', 'Chisseaux', '31T', 356179, 5243872, 47.3325, 1.09639, 70),
('37074', 'Chouzé-sur-Loire', '31T', 282612, 5235497, 47.2369, 0.127779, 33),
('37075', 'Cigogné', '31T', 343497, 5236040, 47.2592, 0.931384, 96),
('37076', 'Cinais', '31T', 286437, 5225406, 47.1475, 0.18306, 60),
('37077', 'Cinq-Mars-la-Pile', '31T', 308278, 5246783, 47.3464, 0.461672, 46),
('37078', 'Ciran', '31T', 338522, 5213964, 47.0594, 0.87361, 84),
('37079', 'Civray-de-Touraine', '31T', 352612, 5243991, 47.3328, 1.04916, 70),
('37080', 'Civray-sur-Esves', '31T', 326159, 5212799, 47.0458, 0.711388, 70),
('37081', 'Cléré-les-Pins', '31T', 303200, 5255696, 47.425, 0.390559, 94),
('37082', 'Continvoir', '31T', 290317, 5252032, 47.3881, 0.221672, 70),
('37083', 'Cormery', '31T', 336289, 5236978, 47.2658, 0.835835, 70),
('37084', 'Couesmes', '31T', 300020, 5271256, 47.5639, 0.341385, 70),
('37085', 'Courçay', '31T', 339416, 5235223, 47.2508, 0.877774, 70),
('37086', 'Courcelles-de-Touraine', '31T', 297153, 5262175, 47.4814, 0.307496, 90),
('37087', 'Courcoué', '31T', 302143, 5212098, 47.0328, 0.395839, 90),
('37088', 'Couziers', '31T', 279004, 5226822, 47.1578, 0.0844492, 70),
('37089', 'Cravant-les-Côteaux', '31T', 298901, 5226143, 47.1581, 0.346947, 38),
('37090', 'Crissay-sur-Manse', '31T', 309372, 5224716, 47.1483, 0.485554, 60),
('37091', 'La Croix-en-Touraine', '31T', 348286, 5244781, 47.3389, 0.991668, 55),
('37092', 'Crotelles', '31T', 337228, 5267720, 47.5425, 0.836948, 103),
('37093', 'Crouzilles', '31T', 307536, 5222056, 47.1239, 0.462499, 45),
('37094', 'Cussay', '31T', 332082, 5210157, 47.0236, 0.790285, 100),
('37095', 'Dame-Marie-les-Bois', '31T', 351917, 5267114, 47.5406, 1.03223, 117),
('37096', 'Dierre', '31T', 345496, 5245687, 47.3464, 0.954444, 60),
('37097', 'Dolus-le-Sec', '31T', 340396, 5225528, 47.1639, 0.894171, 108),
('37098', 'Draché', '31T', 319713, 5214011, 47.055, 0.626116, 62),
('37099', 'Druye', '31T', 313998, 5242397, 47.3086, 0.539163, 95),
('37100', 'Épeigné-les-Bois', '31T', 357319, 5238037, 47.2803, 1.11333, 90),
('37101', 'Épeigné-sur-Dême', '31T', 320752, 5282323, 47.6694, 0.612217, 80),
('37102', 'Les Essards', '31T', 296253, 5247094, 47.3456, 0.3025, 60),
('37103', 'Esves-le-Moutier', '31T', 341039, 5211765, 47.0403, 0.907506, 100),
('37104', 'Esvres', '31T', 332523, 5239122, 47.2842, 0.785284, 60),
('37105', 'Faye-la-Vineuse', '31T', 297867, 5203775, 46.9567, 0.343333, 110),
('37106', 'La Ferrière', '31T', 330797, 5277511, 47.6289, 0.747779, 150),
('37107', 'Ferrière-Larçon', '31T', 339083, 5206597, 46.9933, 0.883614, 120),
('37108', 'Ferrière-sur-Beaulieu', '31T', 351232, 5222497, 47.1392, 1.03806, 110),
('37109', 'Fondettes', '31T', 319066, 5252744, 47.4031, 0.601939, 90),
('37110', 'Francueil', '31T', 355266, 5241732, 47.3131, 1.085, 90),
('37111', 'Genillé', '31T', 355718, 5227544, 47.1856, 1.09556, 80),
('37112', 'Gizeux', '31T', 288304, 5252691, 47.3933, 0.194718, 60),
('37113', 'Le Grand-Pressigny', '31T', 332731, 5198679, 46.9206, 0.803051, 60),
('37114', 'La Guerche', '31T', 327369, 5194754, 46.8839, 0.734169, 56),
('37115', 'Descartes', '31T', 325123, 5204859, 46.9742, 0.700827, 60),
('37116', 'Les Hermites', '31T', 331412, 5281448, 47.6644, 0.754441, 115),
('37117', 'Hommes', '31T', 296103, 5256062, 47.4261, 0.296394, 85),
('37118', 'Huismes', '31T', 291967, 5234573, 47.2317, 0.251662, 90),
('37119', 'L''Île-Bouchard', '31T', 304476, 5221353, 47.1167, 0.422502, 40),
('37120', 'Ingrandes-de-Touraine', '31T', 293197, 5240217, 47.2828, 0.26528, 45),
('37121', 'Jaulnay', '31T', 303414, 5202600, 46.9478, 0.41667, 80),
('37122', 'Joué-lès-Tours', '31T', 323463, 5246864, 47.3514, 0.662505, 85),
('37123', 'Langeais', '31T', 304007, 5244668, 47.3261, 0.406117, 50),
('37124', 'Larçay', '31T', 332428, 5248362, 47.3672, 0.78055, 80),
('37125', 'Lémeré', '31T', 297840, 5217898, 47.0836, 0.336669, 92),
('37126', 'Lerné', '31T', 281754, 5224216, 47.1353, 0.121948, 70),
('37127', 'Le Liège', '31T', 356510, 5232435, 47.2297, 1.10444, 120),
('37128', 'Lignières-de-Touraine', '31T', 304696, 5241369, 47.2967, 0.416672, 40),
('37129', 'Ligré', '31T', 293502, 5221230, 47.1122, 0.278057, 50),
('37130', 'Ligueil', '31T', 334313, 5212165, 47.0422, 0.818886, 80),
('37131', 'Limeray', '31T', 352441, 5258050, 47.4592, 1.04222, 60),
('37132', 'Loches', '31T', 347979, 5221375, 47.1283, 0.995562, 80),
('37133', 'Loché-sur-Indrois', '31T', 364821, 5216797, 47.0908, 1.21889, 110),
('37134', 'Louans', '31T', 329263, 5228156, 47.1847, 0.746394, 108),
('37135', 'Louestault', '31T', 323458, 5276555, 47.6183, 0.65056, 110),
('37136', 'Le Louroux', '31T', 332383, 5225286, 47.1597, 0.788616, 95),
('37137', 'Lublé', '31T', 292556, 5266045, 47.5147, 0.244729, 85),
('37138', 'Lussault-sur-Loire', '31T', 343153, 5251495, 47.3981, 0.921393, 60),
('37139', 'Luynes', '31T', 315496, 5250599, 47.3828, 0.55556, 50),
('37140', 'Luzé', '31T', 306435, 5210906, 47.0233, 0.452782, 80),
('37141', 'Luzillé', '31T', 353254, 5236006, 47.2611, 1.06028, 90),
('37142', 'Maillé', '31T', 316286, 5213807, 47.0522, 0.581115, 50),
('37143', 'Manthelan', '31T', 332621, 5222530, 47.135, 0.79278, 105),
('37144', 'Marçay', '31T', 288923, 5220032, 47.1, 0.218332, 70),
('37145', 'Marcé-sur-Esves', '31T', 321842, 5211073, 47.0292, 0.655283, 60),
('37146', 'Marcilly-sur-Maulne', '31T', 292482, 5269881, 47.5492, 0.241939, 60),
('37147', 'Marcilly-sur-Vienne', '31T', 313131, 5212886, 47.0431, 0.539995, 40),
('37148', 'Marigny-Marmande', '31T', 309052, 5206218, 46.9819, 0.489162, 100),
('37149', 'Marray', '31T', 327165, 5276877, 47.6222, 0.699724, 110),
('37150', 'Mazières-de-Touraine', '31T', 305724, 5250853, 47.3822, 0.426113, 90);
INSERT INTO `ods_communes` (`oc_code_insee`, `oc_nom`, `oc_secteur`, `oc_x_utm`, `oc_y_utm`, `oc_latitude`, `oc_longitude`, `oc_altitude`) VALUES
('37151', 'La Membrolle-sur-Choisille', '31T', 322013, 5256516, 47.4378, 0.639448, 60),
('37152', 'Mettray', '31T', 322838, 5258159, 47.4528, 0.649722, 60),
('37153', 'Monnaie', '31T', 333212, 5263354, 47.5022, 0.785274, 108),
('37154', 'Montbazon', '31T', 327195, 5239554, 47.2867, 0.714716, 60),
('37155', 'Monthodon', '31T', 337644, 5279665, 47.65, 0.83805, 140),
('37156', 'Montlouis-sur-Loire', '31T', 336326, 5250384, 47.3864, 0.831393, 80),
('37157', 'Montrésor', '31T', 363766, 5224110, 47.1564, 1.20278, 110),
('37158', 'Montreuil-en-Touraine', '31T', 345533, 5261409, 47.4878, 0.94945, 100),
('37159', 'Monts', '31T', 320416, 5238521, 47.2756, 0.625559, 50),
('37160', 'Morand', '31T', 350455, 5269683, 47.5633, 1.01194, 125),
('37161', 'Mosnes', '31T', 357015, 5257473, 47.455, 1.10306, 70),
('37162', 'Mouzay', '31T', 340130, 5217226, 47.0892, 0.893614, 110),
('37163', 'Nazelles-Négron', '31T', 345745, 5255164, 47.4317, 0.954442, 60),
('37165', 'Neuil', '31T', 311474, 5227182, 47.1711, 0.512218, 80),
('37166', 'Neuillé-le-Lierre', '31T', 342596, 5264330, 47.5133, 0.909445, 80),
('37167', 'Neuillé-Pont-Pierre', '31T', 315378, 5268803, 47.5464, 0.54639, 119),
('37168', 'Neuilly-le-Brignon', '31T', 331949, 5204725, 46.9747, 0.790551, 80),
('37169', 'Neuville-sur-Brenne', '31T', 342935, 5276152, 47.6197, 0.909717, 100),
('37170', 'Neuvy-le-Roi', '31T', 319380, 5275074, 47.6039, 0.596948, 110),
('37171', 'Noizay', '31T', 341043, 5254147, 47.4214, 0.892498, 51),
('37172', 'Notre-Dame-d''Oé', '31T', 327352, 5258457, 47.4567, 0.709439, 100),
('37173', 'Nouans-les-Fontaines', '31T', 371002, 5221663, 47.1358, 1.29889, 115),
('37174', 'Nouâtre', '31T', 313916, 5213664, 47.0503, 0.549998, 40),
('37175', 'Nouzilly', '31T', 330249, 5268011, 47.5433, 0.744165, 120),
('37176', 'Noyant-de-Touraine', '31T', 314963, 5220151, 47.1089, 0.561109, 90),
('37177', 'Orbigny', '31T', 366385, 5229980, 47.2097, 1.23556, 120),
('37178', 'Panzoult', '31T', 303089, 5224674, 47.1461, 0.402783, 40),
('37179', 'Parçay-Meslay', '31T', 330110, 5256708, 47.4417, 0.746673, 110),
('37180', 'Parçay-sur-Vienne', '31T', 308646, 5219857, 47.1044, 0.478054, 39),
('37181', 'Paulmy', '31T', 335752, 5205391, 46.9817, 0.840273, 80),
('37182', 'Pernay', '31T', 311412, 5257404, 47.4428, 0.498608, 80),
('37183', 'Perrusson', '31T', 349287, 5218098, 47.0992, 1.0139, 75),
('37184', 'Le Petit-Pressigny', '31T', 341693, 5198249, 46.9189, 0.920828, 83),
('37185', 'Pocé-sur-Cisse', '31T', 348754, 5256414, 47.4436, 0.993892, 60),
('37186', 'Pont-de-Ruan', '31T', 316600, 5236846, 47.2594, 0.575839, 50),
('37187', 'Ports', '31T', 314193, 5209670, 47.0144, 0.555283, 42),
('37188', 'Pouzay', '31T', 312907, 5217157, 47.0814, 0.535278, 40),
('37189', 'Preuilly-sur-Claise', '31T', 342206, 5191193, 46.8556, 0.930005, 80),
('37190', 'Pussigny', '31T', 315319, 5207163, 46.9922, 0.571107, 46),
('37191', 'Razines', '31T', 300767, 5205716, 46.975, 0.380555, 64),
('37192', 'Reignac-sur-Indre', '31T', 342137, 5232370, 47.2258, 0.914716, 70),
('37193', 'Restigné', '31T', 290593, 5240339, 47.2831, 0.230829, 35),
('37194', 'Reugny', '31T', 340620, 5260923, 47.4822, 0.88445, 80),
('37195', 'La Riche', '31T', 323843, 5251146, 47.39, 0.665833, 47),
('37196', 'Richelieu', '31T', 296659, 5209904, 47.0114, 0.324725, 55),
('37197', 'Rigny-Ussé', '31T', 295719, 5236544, 47.2506, 0.300272, 40),
('37198', 'Rillé', '31T', 292573, 5258844, 47.45, 0.248339, 80),
('37199', 'Rilly-sur-Vienne', '31T', 309591, 5214450, 47.0561, 0.492779, 100),
('37200', 'Rivarennes', '31T', 299725, 5238013, 47.265, 0.352498, 40),
('37201', 'Rivière', '31T', 293778, 5224929, 47.1456, 0.279995, 25),
('37202', 'La Roche-Clermault', '31T', 288586, 5224185, 47.1372, 0.211946, 60),
('37203', 'Rochecorbon', '31T', 330677, 5253849, 47.4161, 0.755281, 58),
('37204', 'Rouziers-de-Touraine', '31T', 322949, 5265293, 47.5169, 0.648331, 120),
('37205', 'Saché', '31T', 314175, 5235346, 47.2453, 0.544439, 60),
('37206', 'Saint-Antoine-du-Rocher', '31T', 321643, 5262954, 47.4956, 0.631945, 100),
('37207', 'Saint-Aubin-le-Dépeint', '31T', 303972, 5279280, 47.6372, 0.390281, 90),
('37208', 'Saint-Avertin', '31T', 328545, 5248350, 47.3661, 0.729166, 50),
('37209', 'Saint-Bauld', '31T', 336191, 5227373, 47.1794, 0.838056, 96),
('37210', 'Saint-Benoît-la-Forêt', '31T', 297264, 5233122, 47.2203, 0.322219, 91),
('37211', 'Saint-Branchs', '31T', 331353, 5232760, 47.2267, 0.772225, 97),
('37212', 'Sainte-Catherine-de-Fierbois', '31T', 322308, 5225209, 47.1564, 0.655837, 110),
('37213', 'Saint-Christophe-sur-le-Nais', '31T', 310279, 5276692, 47.6158, 0.475282, 80),
('37214', 'Saint-Cyr-sur-Loire', '31T', 323738, 5252540, 47.4025, 0.663889, 51),
('37216', 'Saint-Épain', '31T', 313361, 5224187, 47.1447, 0.538339, 55),
('37217', 'Saint-Étienne-de-Chigny', '31T', 312413, 5249369, 47.3708, 0.515273, 50),
('37218', 'Saint-Flovier', '31T', 350121, 5203498, 46.9681, 1.02972, 127),
('37219', 'Saint-Genouph', '31T', 318890, 5249752, 47.3761, 0.600831, 49),
('37220', 'Saint-Germain-sur-Vienne', '31T', 280259, 5230546, 47.1917, 0.0991608, 40),
('37221', 'Saint-Hippolyte', '31T', 355857, 5213364, 47.0581, 1.10194, 90),
('37222', 'Saint-Jean-Saint-Germain', '31T', 351122, 5216445, 47.0847, 1.03861, 80),
('37223', 'Saint-Laurent-de-Lin', '31T', 293507, 5265116, 47.5067, 0.25778, 85),
('37224', 'Saint-Laurent-en-Gâtines', '31T', 332873, 5272694, 47.5861, 0.777227, 160),
('37225', 'Saint-Martin-le-Beau', '31T', 342126, 5246858, 47.3561, 0.909441, 60),
('37226', 'Sainte-Maure-de-Touraine', '31T', 319400, 5220385, 47.1122, 0.619445, 80),
('37227', 'Saint-Michel-sur-Loire', '31T', 299593, 5242777, 47.3078, 0.348614, 80),
('37228', 'Saint-Nicolas-de-Bourgueil', '31T', 282739, 5240654, 47.2833, 0.126947, 43),
('37229', 'Saint-Nicolas-des-Motets', '31T', 352418, 5272043, 47.585, 1.03723, 150),
('37230', 'Saint-Ouen-les-Vignes', '31T', 348967, 5259003, 47.4669, 0.99583, 80),
('37231', 'Saint-Paterne-Racan', '31T', 310855, 5275128, 47.6019, 0.483615, 70),
('37232', 'Saint-Patrice', '31T', 296318, 5240478, 47.2861, 0.306385, 37),
('37233', 'Saint-Pierre-des-Corps', '31T', 327932, 5251056, 47.3903, 0.720004, 47),
('37234', 'Saint-Quentin-sur-Indrois', '31T', 350468, 5229775, 47.2044, 1.02556, 100),
('37236', 'Saint-Règle', '31T', 353136, 5252318, 47.4078, 1.05334, 90),
('37237', 'Saint-Roch', '31T', 317659, 5257391, 47.4444, 0.581394, 90),
('37238', 'Saint-Senoch', '31T', 345824, 5212288, 47.0461, 0.970274, 104),
('37240', 'Saunay', '31T', 347606, 5274267, 47.6039, 0.972495, 110),
('37241', 'Savigné-sur-Lathan', '31T', 298057, 5258003, 47.4442, 0.321389, 85),
('37242', 'Savigny-en-Véron', '31T', 283766, 5231375, 47.2003, 0.144998, 34),
('37243', 'Savonnières', '31T', 314995, 5246691, 47.3475, 0.550556, 60),
('37244', 'Sazilly', '31T', 298540, 5223591, 47.135, 0.343334, 35),
('37245', 'Semblançay', '31T', 317634, 5263325, 47.4978, 0.578613, 110),
('37246', 'Sennevières', '31T', 356052, 5218764, 47.1067, 1.10278, 110),
('37247', 'Sepmes', '31T', 323320, 5215324, 47.0678, 0.673055, 100),
('37248', 'Seuilly', '31T', 285581, 5223891, 47.1336, 0.172506, 50),
('37249', 'Sonzay', '31T', 308991, 5266721, 47.5258, 0.462495, 110),
('37250', 'Sorigny', '31T', 325534, 5234536, 47.2411, 0.694728, 95),
('37251', 'Souvigné', '31T', 304083, 5266421, 47.5217, 0.397496, 90),
('37252', 'Souvigny-de-Touraine', '31T', 355975, 5252680, 47.4117, 1.09083, 80),
('37253', 'Sublaines', '31T', 348030, 5236478, 47.2642, 0.991113, 110),
('37254', 'Tauxigny', '31T', 336105, 5231113, 47.2131, 0.835554, 80),
('37255', 'Tavant', '31T', 302043, 5222391, 47.1253, 0.390006, 50),
('37256', 'Theneuil', '31T', 305670, 5219181, 47.0975, 0.439163, 60),
('37257', 'Thilouze', '31T', 316769, 5232824, 47.2233, 0.579719, 75),
('37258', 'Thizay', '31T', 283499, 5227522, 47.1656, 0.143337, 40),
('37259', 'Tournon-Saint-Pierre', '31T', 343670, 5178275, 46.7397, 0.953609, 80),
('37260', 'La Tour-Saint-Gelin', '31T', 302795, 5213930, 47.0494, 0.403612, 116),
('37261', 'Tours', '31T', 325194, 5251415, 47.3928, 0.683613, 52),
('37262', 'Trogues', '31T', 310151, 5220736, 47.1128, 0.497499, 50),
('37263', 'Truyes', '31T', 337423, 5237687, 47.2725, 0.850557, 80),
('37264', 'Vallères', '31T', 309115, 5242831, 47.3111, 0.474438, 80),
('37265', 'Varennes', '31T', 341880, 5214831, 47.0681, 0.917495, 100),
('37266', 'Veigné', '31T', 328959, 5239472, 47.2864, 0.738057, 57),
('37267', 'Véretz', '31T', 334098, 5247264, 47.3578, 0.803062, 50),
('37268', 'Verneuil-le-Château', '31T', 306914, 5212652, 47.0392, 0.458333, 68),
('37269', 'Verneuil-sur-Indre', '31T', 351420, 5213164, 47.0553, 1.04361, 100),
('37270', 'Vernou-sur-Brenne', '31T', 337671, 5254269, 47.4217, 0.847778, 55),
('37271', 'Villaines-les-Rochers', '31T', 310430, 5232715, 47.2206, 0.496114, 65),
('37272', 'Villandry', '31T', 311918, 5245707, 47.3378, 0.510273, 50),
('37273', 'La Ville-aux-Dames', '31T', 331283, 5251608, 47.3961, 0.764162, 50),
('37274', 'Villebourg', '31T', 314514, 5280418, 47.6506, 0.530006, 65),
('37275', 'Villedômain', '31T', 367721, 5212501, 47.0528, 1.25834, 120),
('37276', 'Villedômer', '31T', 341164, 5267859, 47.5447, 0.889165, 80),
('37277', 'Villeloin-Coulangé', '31T', 365410, 5222312, 47.1406, 1.22499, 110),
('37278', 'Villeperdue', '31T', 320596, 5229926, 47.1983, 0.631385, 110),
('37279', 'Villiers-au-Bouin', '31T', 297931, 5272533, 47.5747, 0.313057, 57),
('37280', 'Vou', '31T', 337651, 5216861, 47.0853, 0.861106, 100),
('37281', 'Vouvray', '31T', 333993, 5253229, 47.4114, 0.79944, 55),
('37282', 'Yzeures-sur-Creuse', '31T', 337507, 5183565, 46.7858, 0.871115, 76),
('38001', 'Les Abrets', '31T', 701973, 5045949, 45.5378, 5.58694, 400),
('38002', 'Les Adrets', '31T', 732577, 5017469, 45.2722, 5.965, 740),
('38003', 'Agnin', '31T', 645526, 5022585, 45.3417, 4.85749, 240),
('38004', 'L''Albenc', '31T', 693861, 5008935, 45.2072, 5.46861, 256),
('38005', 'Allemond', '32T', 267066, 5001816, 45.1314, 6.03778, 820),
('38006', 'Allevard', '32T', 271005, 5030779, 45.3931, 6.07445, 460),
('38008', 'Ambel', '31T', 731669, 4965433, 44.8047, 5.92945, 900),
('38009', 'Anjou', '31T', 647406, 5023215, 45.3469, 4.88167, 250),
('38010', 'Annoisin-Chatelans', '31T', 678151, 5069101, 45.7525, 5.29056, 400),
('38011', 'Anthon', '31T', 668827, 5073288, 45.7925, 5.17223, 210),
('38012', 'Aoste', '31T', 703372, 5051679, 45.5889, 5.60722, 220),
('38013', 'Apprieu', '31T', 696121, 5030349, 45.3992, 5.50583, 490),
('38014', 'Arandon', '31T', 689156, 5064885, 45.7117, 5.43028, 230),
('38015', 'Artas', '31T', 668969, 5044848, 45.5367, 5.16417, 420),
('38016', 'Arzay', '31T', 669801, 5032549, 45.4258, 5.17056, 450),
('38017', 'Assieu', '31T', 646248, 5029950, 45.4078, 4.86889, 260),
('38018', 'Auberives-en-Royans', '31T', 681359, 4992598, 45.0636, 5.30361, 180),
('38019', 'Auberives-sur-Varèze', '31T', 642163, 5031739, 45.4247, 4.81723, 220),
('38020', 'Auris', '32T', 270658, 4992230, 45.0464, 6.08778, 1300),
('38021', 'Autrans', '31T', 699800, 5005475, 45.1744, 5.54277, 1040),
('38022', 'Les Avenières', '31T', 699672, 5056811, 45.6361, 5.56194, 250),
('38023', 'Avignonet', '31T', 711853, 4981399, 44.9544, 5.68584, 620),
('38024', 'Badinières', '31T', 679900, 5042095, 45.5092, 5.30305, 530),
('38025', 'Balbins', '31T', 674242, 5029211, 45.3947, 5.22611, 370),
('38026', 'La Balme-les-Grottes', '31T', 681390, 5080345, 45.8528, 5.33639, 216),
('38027', 'Barraux', '31T', 733014, 5035717, 45.4361, 5.97916, 360),
('38028', 'La Bâtie-Divisin', '31T', 702998, 5043140, 45.5122, 5.59889, 510),
('38029', 'La Bâtie-Montgascon', '31T', 697230, 5050431, 45.5794, 5.52806, 375),
('38030', 'Beaucroissant', '31T', 693563, 5023660, 45.3397, 5.47056, 420),
('38031', 'Beaufin', '31T', 734133, 4963607, 44.7875, 5.95972, 940),
('38032', 'Beaufort', '31T', 666332, 5021431, 45.3267, 5.1225, 340),
('38033', 'Beaulieu', '31T', 688086, 5007093, 45.1922, 5.39444, 240),
('38034', 'Beaurepaire', '31T', 660874, 5022741, 45.3397, 5.05333, 259),
('38035', 'Beauvoir-de-Marc', '31T', 662427, 5042699, 45.5189, 5.07972, 370),
('38036', 'Beauvoir-en-Royans', '31T', 683979, 4998881, 45.1194, 5.33917, 260),
('38037', 'Bellegarde-Poussieu', '31T', 652727, 5026460, 45.375, 4.95055, 320),
('38038', 'Belmont', '31T', 685355, 5038300, 45.4736, 5.37139, 500),
('38039', 'Bernin', '31T', 725038, 5017196, 45.2722, 5.86889, 280),
('38040', 'Besse', '32T', 277367, 4994927, 45.0728, 6.17167, 1560),
('38041', 'Bessins', '31T', 677842, 5007971, 45.2028, 5.26444, 460),
('38042', 'Bévenais', '31T', 686989, 5030102, 45.3994, 5.38916, 470),
('38043', 'Bilieu', '31T', 699442, 5036106, 45.45, 5.55055, 640),
('38044', 'Biol', '31T', 686596, 5040406, 45.4922, 5.38806, 460),
('38045', 'Biviers', '31T', 720324, 5013508, 45.2406, 5.80723, 440),
('38046', 'Bizonnes', '31T', 686040, 5036437, 45.4567, 5.37944, 560),
('38047', 'Blandin', '31T', 691375, 5038295, 45.4719, 5.44834, 410),
('38048', 'Bonnefamille', '31T', 666079, 5051534, 45.5975, 5.12945, 334),
('38049', 'Bossieu', '31T', 668063, 5031668, 45.4183, 5.14806, 450),
('38050', 'Le Bouchage', '31T', 696624, 5060699, 45.6719, 5.52444, 208),
('38051', 'Bougé-Chambalud', '31T', 648969, 5021554, 45.3317, 4.90111, 210),
('38052', 'Le Bourg-d''Oisans', '32T', 266008, 4993265, 45.0542, 6.02833, 724),
('38053', 'Bourgoin-Jallieu', '31T', 677668, 5051111, 45.5908, 5.27777, 220),
('38054', 'Bouvesse-Quirieu', '31T', 687789, 5074296, 45.7967, 5.41639, 260),
('38055', 'Brangues', '31T', 696999, 5063213, 45.6944, 5.53027, 220),
('38056', 'Bressieux', '31T', 678442, 5021515, 45.3244, 5.27695, 460),
('38057', 'Bresson', '31T', 716296, 5001691, 45.1356, 5.75084, 280),
('38058', 'Brézins', '31T', 680767, 5024763, 45.3531, 5.30778, 363),
('38059', 'Brié-et-Angonnes', '31T', 719291, 4999167, 45.1119, 5.78778, 480),
('38060', 'Brion', '31T', 683374, 5018228, 45.2936, 5.33861, 560),
('38061', 'La Buisse', '31T', 705373, 5023601, 45.3358, 5.62112, 220),
('38062', 'La Buissière', '31T', 733121, 5032260, 45.405, 5.97889, 260),
('38063', 'Burcin', '31T', 690790, 5033922, 45.4328, 5.43916, 520),
('38064', 'Cessieu', '31T', 685410, 5048896, 45.5689, 5.37611, 305),
('38065', 'Châbons', '31T', 690144, 5035139, 45.4439, 5.43138, 510),
('38066', 'Châlons', '31T', 651766, 5034712, 45.4494, 4.94083, 380),
('38067', 'Chamagnieu', '31T', 668795, 5060903, 45.6811, 5.1675, 220),
('38068', 'Champagnier', '31T', 714803, 4998613, 45.1083, 5.73055, 363),
('38069', 'Champier', '31T', 679170, 5035711, 45.4519, 5.29138, 500),
('38070', 'Le Champ-près-Froges', '31T', 730586, 5018230, 45.2797, 5.94, 380),
('38071', 'Champ-sur-Drac', '31T', 715187, 4994393, 45.0703, 5.73361, 300),
('38072', 'Chanas', '31T', 642560, 5019923, 45.3183, 4.81889, 160),
('38073', 'Chantelouve', '31T', 733952, 4985384, 44.9833, 5.9675, 1110),
('38074', 'Chantesse', '31T', 691837, 5013043, 45.2447, 5.44444, 300),
('38075', 'Chapareillan', '31T', 733716, 5039080, 45.4661, 5.98972, 280),
('38076', 'La Chapelle-de-la-Tour', '31T', 692159, 5050984, 45.5858, 5.46334, 440),
('38077', 'La Chapelle-de-Surieu', '31T', 649463, 5028296, 45.3922, 4.90945, 331),
('38078', 'La Chapelle-du-Bard', '32T', 272816, 5033927, 45.4219, 6.09611, 420),
('38080', 'Charancieu', '31T', 701715, 5044520, 45.525, 5.58305, 410),
('38081', 'Charantonnay', '31T', 664625, 5044980, 45.5389, 5.10861, 380),
('38082', 'Charavines', '31T', 696937, 5033494, 45.4272, 5.51751, 480),
('38083', 'Charette', '31T', 684182, 5075732, 45.8106, 5.37056, 250),
('38084', 'Charnècles', '31T', 698116, 5024357, 45.3447, 5.52889, 384),
('38085', 'Charvieu-Chavagneux', '31T', 668078, 5068234, 45.7472, 5.16084, 210),
('38086', 'Chasselay', '31T', 683448, 5014184, 45.2572, 5.33806, 504),
('38087', 'Chasse-sur-Rhône', '31T', 640250, 5049203, 45.5822, 4.79778, 170),
('38089', 'Chassignieu', '31T', 695425, 5041509, 45.4997, 5.50138, 450),
('38090', 'Château-Bernard', '31T', 702953, 4983304, 44.9742, 5.57389, 920),
('38091', 'Châteauvilain', '31T', 681992, 5043360, 45.52, 5.33028, 500),
('38092', 'Châtelus', '31T', 686955, 4992081, 45.0575, 5.37444, 524),
('38093', 'Châtenay', '31T', 674818, 5020981, 45.3206, 5.23055, 380),
('38094', 'Châtonnay', '31T', 672436, 5039507, 45.4878, 5.20666, 460),
('38095', 'Chatte', '31T', 679531, 5001503, 45.1442, 5.28361, 280),
('38097', 'Chavanoz', '31T', 668675, 5071708, 45.7783, 5.16972, 220),
('38098', 'Chélieu', '31T', 694041, 5041312, 45.4983, 5.48361, 390),
('38099', 'Chevrières', '31T', 679915, 5006455, 45.1886, 5.29027, 400),
('38100', 'Le Cheylas', '31T', 734389, 5028598, 45.3717, 5.99333, 250),
('38101', 'Cheyssieu', '31T', 643932, 5032336, 45.4297, 4.84, 220),
('38102', 'Chèzeneuve', '31T', 673530, 5047876, 45.5628, 5.22362, 470),
('38103', 'Chichilianne', '31T', 703327, 4965277, 44.8119, 5.57139, 1000),
('38104', 'Chimilin', '31T', 702935, 5050428, 45.5778, 5.60111, 250),
('38105', 'Chirens', '31T', 700176, 5032175, 45.4144, 5.55833, 464),
('38106', 'Cholonge', '31T', 720487, 4987376, 45.0056, 5.79778, 1054),
('38107', 'Chonas-l''Amballan', '31T', 641591, 5035895, 45.4622, 4.81112, 260),
('38108', 'Choranche', '31T', 688410, 4993205, 45.0672, 5.39333, 280),
('38109', 'Chozeau', '31T', 671823, 5062560, 45.6953, 5.20694, 230),
('38110', 'Chuzelles', '31T', 646566, 5049842, 45.5867, 4.87889, 235),
('38111', 'Claix', '31T', 710261, 4999696, 45.1194, 5.67333, 291),
('38112', 'Clavans-en-Haut-Oisans', '32T', 276004, 4994789, 45.0711, 6.15444, 1380),
('38113', 'Clelles', '31T', 707337, 4967073, 44.8269, 5.62278, 760),
('38114', 'Clonas-sur-Varèze', '31T', 640209, 5030615, 45.415, 4.79194, 190),
('38115', 'Saint-Martin-de-la-Cluze', '31T', 709518, 4984381, 44.9819, 5.65751, 771),
('38116', 'Cognet', '31T', 719297, 4973464, 44.8808, 5.77666, 720),
('38117', 'Cognin-les-Gorges', '31T', 689619, 5004761, 45.1708, 5.41305, 280),
('38118', 'Colombe', '31T', 691690, 5030089, 45.3981, 5.44917, 480),
('38120', 'La Combe-de-Lancey', '31T', 727438, 5012338, 45.2278, 5.89722, 560),
('38121', 'Commelle', '31T', 674184, 5032884, 45.4278, 5.22667, 443),
('38124', 'Corbelin', '31T', 698494, 5053653, 45.6081, 5.54556, 280),
('38125', 'Cordéac', '31T', 724547, 4967807, 44.8283, 5.84055, 920),
('38126', 'Corenc', '31T', 717106, 5011234, 45.2211, 5.76528, 480),
('38127', 'Cornillon-en-Trièves', '31T', 713961, 4968186, 44.835, 5.70695, 880),
('38128', 'Corps', '31T', 733000, 4966934, 44.8178, 5.94694, 940),
('38129', 'Corrençon-en-Vercors', '31T', 699054, 4989513, 45.0311, 5.52694, 1111),
('38130', 'La Côte-Saint-André', '31T', 676919, 5029193, 45.3939, 5.26028, 369),
('38131', 'Les Côtes-d''Arey', '31T', 646055, 5035441, 45.4572, 4.86805, 290),
('38132', 'Les Côtes-de-Corps', '31T', 730747, 4968428, 44.8319, 5.91916, 920),
('38133', 'Coublevie', '31T', 705015, 5025875, 45.3564, 5.6175, 340),
('38134', 'Cour-et-Buis', '31T', 656785, 5033909, 45.4411, 5.00472, 340),
('38135', 'Courtenay', '31T', 685184, 5066742, 45.7294, 5.38, 350),
('38136', 'Crachier', '31T', 673613, 5046426, 45.5497, 5.22416, 430),
('38137', 'Cras', '31T', 692106, 5015677, 45.2683, 5.44888, 300),
('38138', 'Crémieu', '31T', 675346, 5065840, 45.7239, 5.25334, 220),
('38139', 'Creys-Mépieu', '31T', 693570, 5066997, 45.7294, 5.48778, 259),
('38140', 'Crolles', '31T', 726438, 5018915, 45.2872, 5.88749, 252),
('38141', 'Culin', '31T', 675920, 5043866, 45.5261, 5.25278, 500),
('38144', 'Diémoz', '31T', 663307, 5050565, 45.5894, 5.09361, 360),
('38145', 'Dionay', '31T', 674283, 5007996, 45.2039, 5.21917, 500),
('38146', 'Dizimieu', '31T', 678881, 5064767, 45.7133, 5.29833, 330),
('38147', 'Doissin', '31T', 689197, 5041318, 45.4997, 5.42167, 510),
('38148', 'Dolomieu', '31T', 694888, 5053879, 45.6111, 5.49945, 407),
('38149', 'Domarin', '31T', 675062, 5050482, 45.5858, 5.24417, 270),
('38150', 'Domène', '31T', 722973, 5009553, 45.2042, 5.83917, 220),
('38151', 'Échirolles', '31T', 713836, 5002009, 45.1392, 5.71972, 231),
('38152', 'Eclose', '31T', 679757, 5041041, 45.4997, 5.30084, 520),
('38153', 'Engins', '31T', 705649, 5006372, 45.1808, 5.6175, 939),
('38154', 'Entraigues', '31T', 732815, 4976258, 44.9017, 5.94889, 810),
('38155', 'Entre-deux-Guiers', '31T', 715340, 5034777, 45.4333, 5.75306, 390),
('38156', 'Les Éparres', '31T', 680190, 5044852, 45.5339, 5.30777, 480),
('38157', 'Estrablin', '31T', 653536, 5042320, 45.5175, 4.96583, 223),
('38158', 'Eybens', '31T', 716311, 5003174, 45.1489, 5.75167, 244),
('38159', 'Eydoche', '31T', 682288, 5034658, 45.4417, 5.33084, 500),
('38160', 'Eyzin-Pinet', '31T', 656391, 5037512, 45.4736, 5.00083, 280),
('38161', 'Faramans', '31T', 669457, 5029142, 45.3953, 5.165, 390),
('38162', 'Faverges-de-la-Tour', '31T', 696708, 5051836, 45.5922, 5.52194, 370),
('38163', 'La Ferrière', '32T', 271688, 5022597, 45.3197, 6.08694, 940),
('38165', 'Fitilieu', '31T', 700138, 5047002, 45.5478, 5.56389, 380),
('38166', 'La Flachère', '31T', 731924, 5031659, 45.4, 5.96333, 410),
('38167', 'Flachères', '31T', 680891, 5037861, 45.4708, 5.31417, 600),
('38169', 'Fontaine', '31T', 711803, 5007872, 45.1925, 5.69638, 206),
('38170', 'Fontanil-Cornillon', '31T', 709282, 5014770, 45.2553, 5.66722, 200),
('38171', 'La Forteresse', '31T', 688420, 5018624, 45.2958, 5.40306, 540),
('38172', 'Four', '31T', 671175, 5050683, 45.5886, 5.19444, 320),
('38173', 'Le Freney-d''Oisans', '32T', 273626, 4991939, 45.0447, 6.12555, 930),
('38174', 'La Frette', '31T', 684995, 5029116, 45.3911, 5.36334, 425),
('38175', 'Froges', '31T', 729517, 5017635, 45.2747, 5.92611, 240),
('38176', 'Frontonas', '31T', 670077, 5057540, 45.6506, 5.18277, 220),
('38177', 'La Garde', '32T', 267441, 4994726, 45.0678, 6.04583, 1000),
('38179', 'Gières', '31T', 719304, 5007015, 45.1825, 5.79139, 220),
('38180', 'Gillonnay', '31T', 679771, 5029150, 45.3928, 5.29667, 400),
('38181', 'Goncelin', '31T', 733348, 5025532, 45.3444, 5.97861, 280),
('38182', 'Le Grand-Lemps', '31T', 689339, 5030110, 45.3989, 5.41917, 474),
('38183', 'Granieu', '31T', 701770, 5052924, 45.6006, 5.58722, 250),
('38184', 'Grenay', '31T', 662025, 5059024, 45.6658, 5.08, 300),
('38185', 'Grenoble', '31T', 713904, 5007109, 45.185, 5.72277, 212),
('38186', 'Gresse-en-Vercors', '31T', 702551, 4975229, 44.9017, 5.56556, 1186),
('38187', 'Le Gua', '31T', 706002, 4988004, 45.0156, 5.61444, 960),
('38188', 'Herbeys', '31T', 719690, 5002178, 45.1389, 5.79417, 500),
('38189', 'Heyrieux', '31T', 660977, 5055168, 45.6314, 5.06528, 295),
('38190', 'Hières-sur-Amby', '31T', 678309, 5074140, 45.7978, 5.29444, 230),
('38191', 'Huez', '32T', 267999, 4996220, 45.0814, 6.05222, 1460),
('38192', 'Hurtières', '31T', 732901, 5019335, 45.2889, 5.97, 740),
('38193', 'L''Isle-d''Abeau', '31T', 673405, 5054729, 45.6244, 5.22445, 230),
('38194', 'Izeaux', '31T', 689966, 5023025, 45.335, 5.42445, 420),
('38195', 'Izeron', '31T', 686815, 5002052, 45.1472, 5.37638, 240),
('38197', 'Janneyrias', '31T', 663975, 5068834, 45.7536, 5.10833, 240),
('38198', 'Jarcieu', '31T', 652597, 5021949, 45.3344, 4.9475, 230),
('38199', 'Jardin', '31T', 649188, 5039868, 45.4964, 4.90945, 270),
('38200', 'Jarrie', '31T', 715930, 4996364, 45.0878, 5.74389, 334),
('38203', 'Laffrey', '31T', 718549, 4989565, 45.0258, 5.77417, 904),
('38204', 'Lalley', '31T', 711759, 4959618, 44.7586, 5.67556, 840),
('38205', 'Lans-en-Vercors', '31T', 703697, 5000471, 45.1283, 5.59028, 1004),
('38206', 'Laval', '31T', 730145, 5015371, 45.2542, 5.93306, 600),
('38207', 'Lavaldens', '31T', 727545, 4984905, 44.9811, 5.88612, 1060),
('38208', 'Lavars', '31T', 711013, 4969602, 44.8486, 5.67028, 740),
('38209', 'Lentiol', '31T', 665710, 5018574, 45.3011, 5.11362, 399),
('38210', 'Leyrieu', '31T', 675455, 5069642, 45.7581, 5.25612, 231),
('38211', 'Lieudieu', '31T', 670592, 5036245, 45.4589, 5.18195, 500),
('38212', 'Livet-et-Gavet', '31T', 730908, 4999177, 45.1083, 5.93528, 657),
('38213', 'Longechenal', '31T', 683710, 5032105, 45.4183, 5.34805, 500),
('38214', 'Lumbin', '31T', 728360, 5021270, 45.3078, 5.91306, 238),
('38215', 'Luzinay', '31T', 652559, 5050356, 45.59, 4.95584, 225),
('38216', 'Malleval-en-Vercors', '31T', 691796, 5002139, 45.1467, 5.43972, 940),
('38217', 'Marcieu', '31T', 712160, 4976776, 44.9128, 5.68778, 640),
('38218', 'Marcilloles', '31T', 671147, 5023011, 45.3397, 5.18445, 308),
('38219', 'Marcollin', '31T', 663627, 5019044, 45.3058, 5.08722, 314),
('38221', 'Marnans', '31T', 675375, 5018217, 45.2956, 5.23667, 480),
('38222', 'Massieu', '31T', 703186, 5035299, 45.4417, 5.59805, 470),
('38223', 'Maubec', '31T', 676889, 5048773, 45.57, 5.26695, 430),
('38224', 'Mayres-Savel', '31T', 714850, 4972479, 44.8733, 5.72, 675),
('38225', 'Méaudre', '31T', 698811, 5000100, 45.1264, 5.52806, 1000),
('38226', 'Mens', '31T', 717432, 4966295, 44.8169, 5.75, 755),
('38228', 'Merlas', '31T', 708387, 5035871, 45.4453, 5.66473, 630),
('38229', 'Meylan', '31T', 718316, 5010967, 45.2183, 5.78056, 290),
('38230', 'Meyrié', '31T', 678440, 5047612, 45.5592, 5.28639, 367),
('38231', 'Meyrieu-les-Étangs', '31T', 671681, 5042513, 45.515, 5.19806, 430),
('38232', 'Meyssiès', '31T', 660527, 5037215, 45.47, 5.05361, 314),
('38235', 'Miribel-Lanchâtre', '31T', 706431, 4983570, 44.9756, 5.61806, 760),
('38236', 'Miribel-les-Échelles', '31T', 711943, 5034229, 45.4294, 5.70944, 590),
('38237', 'Mizoën', '32T', 275029, 4992599, 45.0511, 6.14305, 1186),
('38238', 'Moidieu-Détourbe', '31T', 659456, 5040029, 45.4956, 5.04084, 287),
('38239', 'Moirans', '31T', 701202, 5022508, 45.3272, 5.56749, 200),
('38240', 'Moissieu-sur-Dolon', '31T', 655777, 5028079, 45.3889, 4.98999, 400),
('38241', 'Monestier-d''Ambel', '31T', 731358, 4962456, 44.7781, 5.92417, 940),
('38242', 'Monestier-de-Clermont', '31T', 707930, 4977255, 44.9183, 5.63445, 805),
('38243', 'Le Monestier-du-Percy', '31T', 710332, 4963556, 44.7944, 5.65917, 780),
('38244', 'Monsteroux-Milieu', '31T', 652320, 5032502, 45.4294, 4.94723, 330),
('38245', 'Montagne', '31T', 672400, 5000935, 45.1408, 5.19277, 440),
('38246', 'Montagnieu', '31T', 691544, 5044139, 45.5244, 5.45278, 530),
('38247', 'Montalieu-Vercieu', '31T', 686800, 5076304, 45.815, 5.40445, 210),
('38248', 'Montaud', '31T', 700910, 5015271, 45.2622, 5.56084, 740),
('38249', 'Montbonnot-Saint-Martin', '31T', 719940, 5011980, 45.2269, 5.80166, 320),
('38250', 'Montcarra', '31T', 686408, 5053991, 45.6144, 5.39083, 359),
('38252', 'Montchaboud', '31T', 717450, 4997343, 45.0961, 5.76361, 520),
('38253', 'Mont-de-Lans', '32T', 274054, 4991027, 45.0367, 6.13139, 1260),
('38254', 'Monteynard', '31T', 712952, 4982641, 44.9653, 5.70028, 840),
('38255', 'Montfalcon', '31T', 670377, 5013603, 45.2553, 5.17139, 440),
('38256', 'Montferrat', '31T', 702731, 5040629, 45.4897, 5.59444, 540),
('38257', 'Montrevel', '31T', 687940, 5039056, 45.4797, 5.40472, 500),
('38258', 'Mont-Saint-Martin', '31T', 709941, 5016615, 45.2717, 5.67639, 740),
('38259', 'Montseveroux', '31T', 654229, 5032673, 45.4306, 4.97167, 403),
('38260', 'Moras', '31T', 675844, 5061993, 45.6892, 5.25834, 350),
('38261', 'Morestel', '31T', 692387, 5061154, 45.6772, 5.47028, 220),
('38262', 'Morêtel-de-Mailles', '32T', 265068, 5027475, 45.3614, 6.00028, 440),
('38263', 'Morette', '31T', 692199, 5017656, 45.2861, 5.45083, 460),
('38264', 'La Morte', '31T', 725719, 4989413, 45.0222, 5.86501, 1380),
('38265', 'La Motte-d''Aveillans', '31T', 716306, 4982043, 44.9589, 5.7425, 872),
('38266', 'La Motte-Saint-Martin', '31T', 714288, 4980739, 44.9478, 5.71639, 720),
('38267', 'Mottier', '31T', 681290, 5032313, 45.4208, 5.31722, 490),
('38268', 'Le Moutaret', '32T', 272292, 5035059, 45.4319, 6.08889, 559),
('38269', 'La Mure', '31T', 720019, 4976115, 44.9044, 5.78694, 880),
('38270', 'La Murette', '31T', 699025, 5028679, 45.3833, 5.54223, 450),
('38271', 'Murianette', '31T', 721540, 5008051, 45.1911, 5.82027, 240),
('38272', 'Murinais', '31T', 681753, 5009379, 45.2144, 5.31472, 520),
('38273', 'Nantes-en-Ratier', '31T', 722950, 4979583, 44.9347, 5.82555, 970),
('38274', 'Nantoin', '31T', 677502, 5033966, 45.4367, 5.26944, 470),
('38275', 'Serre-Nerpol', '31T', 686275, 5014483, 45.2592, 5.37417, 300),
('38276', 'Nivolas-Vermelle', '31T', 679870, 5047684, 45.5594, 5.30472, 300),
('38277', 'Notre-Dame-de-Commiers', '31T', 712892, 4987736, 45.0111, 5.70167, 500),
('38278', 'Notre-Dame-de-l''Osier', '31T', 688932, 5012431, 45.24, 5.40722, 380),
('38279', 'Notre-Dame-de-Mésage', '31T', 716744, 4994292, 45.0689, 5.75333, 498),
('38280', 'Notre-Dame-de-Vaulx', '31T', 716539, 4984862, 44.9842, 5.74667, 962),
('38281', 'Noyarey', '31T', 706256, 5013898, 45.2483, 5.62834, 240),
('38282', 'Optevoz', '31T', 681183, 5068941, 45.7503, 5.32945, 285),
('38283', 'Oris-en-Rattier', '31T', 726489, 4978194, 44.9211, 5.86973, 1030),
('38284', 'Ornacieux', '31T', 672913, 5030070, 45.4028, 5.20944, 423),
('38285', 'Ornon', '31T', 734606, 4992638, 45.0483, 5.97916, 1240),
('38286', 'Oulles', '31T', 734871, 4995552, 45.0744, 5.98389, 1420),
('38287', 'Oyeu', '31T', 693645, 5033021, 45.4239, 5.47528, 550),
('38288', 'Oytier-Saint-Oblas', '31T', 657704, 5047488, 45.5631, 5.02083, 250),
('38289', 'Oz', '32T', 268152, 5002796, 45.1406, 6.05111, 860),
('38290', 'Pact', '31T', 655898, 5024099, 45.3531, 4.99028, 260),
('38291', 'Pajay', '31T', 667742, 5025730, 45.365, 5.14194, 358),
('38292', 'Paladru', '31T', 699631, 5039047, 45.4764, 5.55416, 503),
('38293', 'Panissage', '31T', 692555, 5040895, 45.495, 5.46444, 440),
('38294', 'Panossas', '31T', 671679, 5060734, 45.6789, 5.20444, 290),
('38295', 'Parmilieu', '31T', 682897, 5078999, 45.8403, 5.35528, 317),
('38296', 'Le Passage', '31T', 696198, 5045271, 45.5333, 5.51277, 478),
('38297', 'Passins', '31T', 689214, 5062261, 45.6881, 5.43, 290),
('38298', 'Le Péage-de-Roussillon', '31T', 640698, 5026242, 45.3756, 4.79694, 160),
('38299', 'Pellafol', '31T', 729852, 4964565, 44.7975, 5.90611, 940),
('38300', 'Penol', '31T', 671492, 5028734, 45.3911, 5.19083, 370),
('38301', 'Percy', '31T', 709497, 4964209, 44.8006, 5.64889, 780),
('38302', 'Le Périer', '31T', 734691, 4980189, 44.9364, 5.97444, 910),
('38303', 'La Pierre', '31T', 731183, 5019797, 45.2936, 5.94833, 260),
('38304', 'Pierre-Châtel', '31T', 718968, 4981794, 44.9558, 5.77611, 920),
('38305', 'Le Pin', '31T', 695963, 5036831, 45.4575, 5.5064, 520),
('38306', 'Pinsot', '32T', 272905, 5026725, 45.3572, 6.10056, 760),
('38307', 'Pisieu', '31T', 661392, 5028035, 45.3872, 5.06166, 408),
('38308', 'Plan', '31T', 687639, 5020701, 45.3147, 5.39389, 600),
('38309', 'Poisat', '31T', 717260, 5004195, 45.1578, 5.76417, 240),
('38310', 'Poliénas', '31T', 694062, 5013791, 45.2508, 5.47306, 200),
('38311', 'Pommier-de-Beaurepaire', '31T', 665852, 5029726, 45.4014, 5.11917, 456),
('38312', 'Pommiers-la-Placette', '31T', 708458, 5021879, 45.3194, 5.65972, 520),
('38313', 'Ponsonnas', '31T', 720887, 4974507, 44.8897, 5.79722, 800),
('38314', 'Pontcharra', '32T', 266619, 5035205, 45.4314, 6.0164, 271),
('38315', 'Le Pont-de-Beauvoisin', '31T', 708459, 5046130, 45.5375, 5.67, 270),
('38316', 'Pont-de-Chéruy', '31T', 669512, 5068767, 45.7517, 5.17945, 200),
('38317', 'Le Pont-de-Claix', '31T', 712236, 5000812, 45.1289, 5.69889, 240),
('38318', 'Pont-Évêque', '31T', 649313, 5043731, 45.5311, 4.91222, 200),
('38319', 'Pont-en-Royans', '31T', 684444, 4992625, 45.0631, 5.34278, 220),
('38320', 'Porcieu-Amblagnieu', '31T', 686611, 5078276, 45.8328, 5.40278, 260),
('38321', 'Prébois', '31T', 713093, 4963184, 44.7903, 5.69388, 780),
('38322', 'Presles', '31T', 687566, 4995867, 45.0914, 5.38361, 863),
('38323', 'Pressins', '31T', 706122, 5043921, 45.5183, 5.63917, 330),
('38324', 'Primarette', '31T', 658934, 5029733, 45.4031, 5.03083, 400),
('38325', 'Proveysieux', '31T', 711868, 5015722, 45.2631, 5.70055, 490),
('38326', 'Prunières', '31T', 718264, 4974788, 44.8931, 5.76417, 860),
('38328', 'Quaix-en-Chartreuse', '31T', 713406, 5014753, 45.2539, 5.71972, 520),
('38329', 'Quet-en-Beaumont', '31T', 727093, 4968575, 44.8344, 5.87306, 760),
('38330', 'Quincieu', '31T', 687180, 5016332, 45.2756, 5.38639, 600),
('38331', 'Réaumont', '31T', 697929, 5026822, 45.3669, 5.5275, 370),
('38332', 'Renage', '31T', 694692, 5023077, 45.3342, 5.48472, 318),
('38333', 'Rencurel', '31T', 694669, 4997531, 45.1044, 5.47444, 820),
('38334', 'Revel', '31T', 725510, 5007635, 45.1861, 5.87056, 640),
('38335', 'Revel-Tourdan', '31T', 659660, 5027682, 45.3844, 5.03944, 410),
('38336', 'Reventin-Vaugris', '31T', 643920, 5036627, 45.4683, 4.84111, 260),
('38337', 'Rives', '31T', 695920, 5024906, 45.3503, 5.50111, 380),
('38338', 'La Rivière', '31T', 696939, 5012490, 45.2383, 5.50917, 200),
('38339', 'Roche', '31T', 668289, 5050759, 45.59, 5.1575, 380),
('38340', 'Les Roches-de-Condrieu', '31T', 638246, 5034833, 45.4533, 4.76805, 152),
('38341', 'Rochetoirin', '31T', 688597, 5050412, 45.5817, 5.4175, 450),
('38342', 'Roissard', '31T', 708385, 4973377, 44.8833, 5.63861, 740),
('38343', 'Romagnieu', '31T', 706166, 5049824, 45.5714, 5.64222, 250),
('38344', 'Roussillon', '31T', 641923, 5025961, 45.3728, 4.8125, 200),
('38345', 'Rovon', '31T', 693558, 5008154, 45.2003, 5.46445, 200),
('38346', 'Royas', '31T', 664484, 5041239, 45.5053, 5.10555, 342),
('38347', 'Roybon', '31T', 676160, 5014286, 45.26, 5.24528, 516),
('38348', 'Ruy', '31T', 680751, 5050984, 45.5889, 5.31722, 260),
('38349', 'Sablons', '31T', 639075, 5019938, 45.3192, 4.77445, 136),
('38350', 'Sainte-Agnès', '31T', 729361, 5013520, 45.2378, 5.92223, 700),
('38351', 'Saint-Agnin-sur-Bion', '31T', 675196, 5045699, 45.5428, 5.24417, 440),
('38352', 'Saint-Alban-de-Roche', '31T', 673488, 5051735, 45.5975, 5.22445, 284),
('38353', 'Saint-Alban-du-Rhône', '31T', 637377, 5031849, 45.4267, 4.75611, 150),
('38354', 'Saint-Albin-de-Vaulserre', '31T', 711334, 5042643, 45.5053, 5.70528, 300),
('38355', 'Saint-Andéol', '31T', 701204, 4981766, 44.9608, 5.55112, 1020),
('38356', 'Saint-André-en-Royans', '31T', 684152, 4995149, 45.0858, 5.34, 377),
('38357', 'Saint-André-le-Gaz', '31T', 697856, 5047084, 45.5492, 5.53472, 400),
('38358', 'Sainte-Anne-sur-Gervonde', '31T', 674437, 5040983, 45.5006, 5.23277, 510),
('38359', 'Saint-Antoine-l''Abbaye', '31T', 674372, 5004756, 45.1747, 5.21917, 380),
('38360', 'Saint-Appolinard', '31T', 677795, 5006518, 45.1897, 5.26333, 447),
('38361', 'Saint-Arey', '31T', 715826, 4972203, 44.8706, 5.73223, 650),
('38362', 'Saint-Aupre', '31T', 709143, 5030799, 45.3994, 5.67223, 463),
('38363', 'Saint-Barthélemy', '31T', 663182, 5023634, 45.3472, 5.08306, 270),
('38364', 'Saint-Barthélemy-de-Séchilienne', '31T', 722656, 4991777, 45.0444, 5.82722, 460),
('38365', 'Saint-Baudille-de-la-Tour', '31T', 681678, 5073465, 45.7908, 5.33751, 360),
('38366', 'Saint-Baudille-et-Pipet', '31T', 718981, 4962764, 44.7847, 5.76805, 840),
('38367', 'Saint-Bernard', '31T', 727551, 5023744, 45.3303, 5.90389, 920),
('38368', 'Saint-Blaise-du-Buis', '31T', 697172, 5028065, 45.3783, 5.51833, 450),
('38369', 'Sainte-Blandine', '31T', 690513, 5046609, 45.5469, 5.44055, 440),
('38370', 'Saint-Bonnet-de-Chavagne', '31T', 675569, 4999384, 45.1261, 5.2325, 320),
('38372', 'Saint-Bueil', '31T', 709702, 5039468, 45.4772, 5.68306, 380),
('38373', 'Saint-Cassien', '31T', 700059, 5026272, 45.3614, 5.55445, 360),
('38374', 'Saint-Chef', '31T', 684327, 5056215, 45.635, 5.365, 300),
('38375', 'Saint-Christophe-en-Oisans', '32T', 277316, 4982169, 44.9581, 6.17667, 1440),
('38376', 'Saint-Christophe-sur-Guiers', '31T', 717017, 5035360, 45.4381, 5.77473, 408),
('38377', 'Saint-Clair-de-la-Tour', '31T', 693389, 5049786, 45.5747, 5.47862, 400),
('38378', 'Saint-Clair-du-Rhône', '31T', 638820, 5033456, 45.4408, 4.775, 180),
('38379', 'Saint-Clair-sur-Galaure', '31T', 668265, 5014287, 45.2619, 5.14473, 420),
('38380', 'Saint-Didier-de-Bizonnes', '31T', 683883, 5037361, 45.4656, 5.35222, 550),
('38381', 'Saint-Didier-de-la-Tour', '31T', 693711, 5047788, 45.5567, 5.48195, 380),
('38382', 'Saint-Égrève', '31T', 710865, 5013093, 45.2397, 5.68667, 220),
('38383', 'Saint-Étienne-de-Crossey', '31T', 707282, 5028482, 45.3792, 5.6475, 451),
('38384', 'Saint-Étienne-de-Saint-Geoirs', '31T', 683813, 5023368, 45.3397, 5.34611, 397),
('38386', 'Saint-Geoire-en-Valdaine', '31T', 706279, 5037130, 45.4572, 5.63833, 420),
('38387', 'Saint-Geoirs', '31T', 684607, 5021538, 45.3231, 5.35556, 440),
('38388', 'Saint-Georges-de-Commiers', '31T', 713035, 4990645, 45.0372, 5.70472, 400),
('38389', 'Saint-Georges-d''Espéranche', '31T', 662210, 5046893, 45.5567, 5.07833, 390),
('38390', 'Saint-Gervais', '31T', 694925, 5008412, 45.2022, 5.48194, 200),
('38391', 'Saint-Guillaume', '31T', 704032, 4981114, 44.9542, 5.58667, 701),
('38392', 'Saint-Hilaire-de-Brens', '31T', 678466, 5060369, 45.6739, 5.29139, 320),
('38393', 'Saint-Hilaire-de-la-Côte', '31T', 682530, 5029292, 45.3933, 5.33194, 388),
('38394', 'Saint-Hilaire-du-Rosier', '31T', 677161, 4996371, 45.0986, 5.25167, 240),
('38395', 'Saint-Hilaire', '31T', 726344, 5021537, 45.3108, 5.88749, 980),
('38396', 'Saint-Honoré', '31T', 722067, 4980356, 44.9419, 5.81472, 910),
('38397', 'Saint-Ismier', '31T', 721663, 5014543, 45.2494, 5.82473, 360),
('38398', 'Saint-Jean-d''Avelanne', '31T', 708855, 5042715, 45.5067, 5.67361, 332),
('38399', 'Saint-Jean-de-Bournay', '31T', 667011, 5040966, 45.5022, 5.13778, 381),
('38400', 'Saint-Jean-de-Moirans', '31T', 702239, 5024148, 45.3417, 5.58138, 220),
('38401', 'Saint-Jean-de-Soudain', '31T', 689577, 5049577, 45.5739, 5.42972, 400),
('38402', 'Saint-Jean-de-Vaulx', '31T', 717439, 4988044, 45.0125, 5.75944, 1020),
('38403', 'Saint-Jean-d''Hérans', '31T', 718087, 4970302, 44.8528, 5.76, 810),
('38404', 'Saint-Jean-le-Vieux', '31T', 726227, 5010781, 45.2142, 5.8811, 720),
('38405', 'Saint-Joseph-de-Rivière', '31T', 711357, 5028371, 45.3769, 5.69945, 410),
('38406', 'Saint-Julien-de-l''Herms', '31T', 663865, 5033348, 45.4344, 5.095, 480),
('38407', 'Saint-Julien-de-Raz', '31T', 708671, 5025315, 45.3503, 5.66389, 620),
('38408', 'Saint-Just-Chaleyssin', '31T', 655881, 5050160, 45.5875, 4.99834, 260),
('38409', 'Saint-Just-de-Claix', '31T', 679770, 4993820, 45.075, 5.28389, 208),
('38410', 'Saint-Lattier', '31T', 673342, 4995247, 45.0894, 5.20278, 200),
('38412', 'Saint-Laurent-du-Pont', '31T', 714030, 5029789, 45.3889, 5.73416, 408),
('38413', 'Saint-Laurent-en-Beaumont', '31T', 725056, 4973354, 44.8781, 5.84944, 910),
('38414', 'Sainte-Luce', '31T', 730064, 4970319, 44.8492, 5.91139, 1253),
('38415', 'Saint-Marcel-Bel-Accueil', '31T', 674240, 5057408, 45.6483, 5.23611, 250),
('38416', 'Saint-Marcellin', '31T', 682379, 5002819, 45.1553, 5.32028, 283),
('38417', 'Sainte-Marie-d''Alloix', '31T', 732558, 5029828, 45.3833, 5.97056, 260),
('38418', 'Sainte-Marie-du-Mont', '31T', 730544, 5032474, 45.4078, 5.94611, 934),
('38419', 'Saint-Martin-de-Clelles', '31T', 707160, 4969137, 44.8456, 5.62138, 700),
('38420', 'Saint-Martin-de-Vaulserre', '31T', 709599, 5041256, 45.4933, 5.6825, 400),
('38421', 'Saint-Martin-d''Hères', '31T', 717601, 5005072, 45.1656, 5.76889, 220),
('38422', 'Saint-Martin-d''Uriage', '31T', 723176, 5003782, 45.1522, 5.83917, 600),
('38423', 'Saint-Martin-le-Vinoux', '31T', 714001, 5012642, 45.2347, 5.72638, 240),
('38424', 'Saint-Maurice-en-Trièves', '31T', 710835, 4960267, 44.7647, 5.66416, 850),
('38425', 'Saint-Maurice-l''Exil', '31T', 638606, 5029345, 45.4039, 4.77111, 150),
('38426', 'Saint-Maximin', '32T', 267854, 5033892, 45.42, 6.03278, 380),
('38427', 'Saint-Michel-de-Saint-Geoirs', '31T', 684684, 5019656, 45.3061, 5.35583, 580),
('38428', 'Saint-Michel-en-Beaumont', '31T', 728979, 4972381, 44.8681, 5.89861, 1220),
('38429', 'Saint-Michel-les-Portes', '31T', 704885, 4971566, 44.8681, 5.59361, 881),
('38430', 'Saint-Mury-Monteymond', '31T', 729737, 5012174, 45.2256, 5.92639, 680),
('38431', 'Saint-Nazaire-les-Eymes', '31T', 723676, 5014398, 45.2475, 5.85028, 260),
('38432', 'Saint-Nicolas-de-Macherin', '31T', 703991, 5030599, 45.3992, 5.60639, 490),
('38433', 'Saint-Nizier-du-Moucherotte', '31T', 706754, 5005296, 45.1708, 5.63111, 1160),
('38434', 'Saint-Ondras', '31T', 699151, 5043912, 45.5203, 5.55, 450),
('38435', 'Saint-Pancrasse', '31T', 724408, 5019584, 45.2939, 5.86194, 991),
('38436', 'Saint-Paul-de-Varces', '31T', 708014, 4994186, 45.0706, 5.64251, 400),
('38437', 'Saint-Paul-d''Izeaux', '31T', 690373, 5021092, 45.3175, 5.42889, 560),
('38438', 'Saint-Paul-lès-Monestier', '31T', 707256, 4978407, 44.9289, 5.62639, 800),
('38439', 'Saint-Pierre-d''Allevard', '32T', 268728, 5028669, 45.3733, 6.04639, 520),
('38440', 'Saint-Pierre-de-Bressieux', '31T', 679122, 5020577, 45.3158, 5.28528, 460),
('38442', 'Saint-Pierre-de-Chartreuse', '31T', 720562, 5024793, 45.3419, 5.81527, 880),
('38443', 'Saint-Pierre-de-Chérennes', '31T', 685827, 4999213, 45.1219, 5.36277, 380),
('38444', 'Saint-Pierre-de-Méaroz', '31T', 723008, 4972881, 44.8744, 5.82334, 750),
('38445', 'Saint-Pierre-de-Mésage', '31T', 717642, 4992376, 45.0514, 5.76389, 340),
('38446', 'Saint-Pierre-d''Entremont', '31T', 723065, 5029176, 45.3806, 5.84916, 650),
('38448', 'Saint-Prim', '31T', 640287, 5033951, 45.445, 4.79389, 227),
('38449', 'Saint-Quentin-Fallavier', '31T', 664501, 5055476, 45.6333, 5.11056, 260),
('38450', 'Saint-Quentin-sur-Isère', '31T', 699797, 5017336, 45.2811, 5.5475, 220),
('38451', 'Saint-Romain-de-Jalionas', '31T', 672962, 5068306, 45.7467, 5.22361, 200),
('38452', 'Saint-Romain-de-Surieu', '31T', 647517, 5027756, 45.3878, 4.88444, 280),
('38453', 'Saint-Romans', '31T', 683187, 4998271, 45.1142, 5.32889, 213),
('38454', 'Saint-Sauveur', '31T', 684378, 5002445, 45.1514, 5.34556, 260),
('38455', 'Saint-Savin', '31T', 679776, 5055496, 45.6297, 5.3064, 230),
('38456', 'Saint-Sébastien', '31T', 721180, 4969821, 44.8475, 5.79889, 865),
('38457', 'Saint-Siméon-de-Bressieux', '31T', 677143, 5022003, 45.3292, 5.26056, 380),
('38458', 'Saint-Sorlin-de-Morestel', '31T', 693019, 5056818, 45.6381, 5.47666, 260),
('38459', 'Saint-Sorlin-de-Vienne', '31T', 651868, 5036814, 45.4683, 4.94278, 350),
('38460', 'Saint-Sulpice-des-Rivoires', '31T', 704108, 5038388, 45.4692, 5.61111, 570),
('38462', 'Saint-Théoffrey', '31T', 718076, 4984791, 44.9831, 5.76611, 950),
('38463', 'Saint-Vérand', '31T', 683365, 5004978, 45.1744, 5.33361, 296),
('38464', 'Saint-Victor-de-Cessieu', '31T', 686604, 5045966, 45.5422, 5.39028, 410),
('38465', 'Saint-Victor-de-Morestel', '31T', 694751, 5063112, 45.6942, 5.50139, 220),
('38466', 'Saint-Vincent-de-Mercuze', '31T', 730960, 5028843, 45.375, 5.94972, 360),
('38467', 'Salagnon', '31T', 683352, 5059893, 45.6683, 5.35389, 270),
('38468', 'Salaise-sur-Sanne', '31T', 642429, 5022854, 45.3447, 4.81806, 170),
('38469', 'La Salette-Fallavaux', '31T', 735342, 4969645, 44.8414, 5.97778, 1130),
('38470', 'La Salle-en-Beaumont', '31T', 726191, 4971695, 44.8628, 5.86305, 800),
('38471', 'Le Sappey-en-Chartreuse', '31T', 717950, 5015897, 45.2628, 5.77806, 1000),
('38472', 'Sarcenas', '31T', 716426, 5017049, 45.2736, 5.75916, 1080),
('38473', 'Sardieu', '31T', 673122, 5026432, 45.37, 5.21083, 340),
('38474', 'Sassenage', '31T', 708955, 5009477, 45.2078, 5.66084, 208),
('38475', 'Satolas-et-Bonce', '31T', 665772, 5062242, 45.6939, 5.12916, 250),
('38476', 'Savas-Mépin', '31T', 660856, 5041330, 45.5069, 5.05917, 310),
('38478', 'Séchilienne', '31T', 723296, 4992881, 45.0542, 5.83583, 364),
('38479', 'Semons', '31T', 671881, 5033624, 45.435, 5.19751, 433),
('38480', 'Septème', '31T', 656427, 5046530, 45.5547, 5.00417, 240),
('38481', 'Sérézin-de-la-Tour', '31T', 682953, 5047619, 45.5581, 5.34417, 310),
('38483', 'Sermérieu', '31T', 687776, 5060395, 45.6717, 5.41083, 310),
('38484', 'Serpaize', '31T', 649593, 5047443, 45.5644, 4.91694, 275),
('38485', 'Seyssinet-Pariset', '31T', 710776, 5005274, 45.1694, 5.68223, 280),
('38486', 'Seyssins', '31T', 710949, 5004013, 45.1581, 5.68389, 335),
('38487', 'Seyssuel', '31T', 644053, 5046912, 45.5608, 4.84583, 300),
('38488', 'Siccieu-Saint-Julien-et-Carisieu', '31T', 680381, 5067497, 45.7375, 5.31861, 310),
('38489', 'Siévoz', '31T', 723952, 4976035, 44.9025, 5.83667, 800),
('38490', 'Sillans', '31T', 687139, 5023589, 45.3408, 5.38861, 400),
('38492', 'Sinard', '31T', 709436, 4980177, 44.9442, 5.65472, 800),
('38494', 'Soleymieu', '31T', 682846, 5064573, 45.7106, 5.34916, 310),
('38495', 'La Sône', '31T', 679151, 4997940, 45.1122, 5.2775, 200),
('38496', 'Sonnay', '31T', 649364, 5024218, 45.3556, 4.90695, 260),
('38497', 'Sousville', '31T', 721598, 4976169, 44.9044, 5.80694, 820),
('38498', 'Succieu', '31T', 682654, 5044491, 45.53, 5.33917, 460),
('38499', 'Susville', '31T', 718879, 4978640, 44.9275, 5.77361, 950),
('38500', 'Têche', '31T', 686909, 5006287, 45.1853, 5.37917, 309),
('38501', 'Tencin', '31T', 732134, 5021810, 45.3114, 5.96139, 240),
('38503', 'La Terrasse', '31T', 729847, 5023549, 45.3278, 5.93306, 240),
('38504', 'Theys', '31T', 734849, 5020921, 45.3025, 5.99556, 620),
('38505', 'Thodure', '31T', 670077, 5020667, 45.3189, 5.16999, 310),
('38507', 'Tignieu-Jameyzieu', '31T', 670106, 5066806, 45.7339, 5.18639, 222),
('38508', 'Torchefelon', '31T', 687432, 5043675, 45.5214, 5.4, 520),
('38509', 'La Tour-du-Pin', '31T', 690800, 5048595, 45.5647, 5.445, 330),
('38511', 'Le Touvet', '31T', 731202, 5026998, 45.3583, 5.95194, 260),
('38512', 'Tramolé', '31T', 677070, 5043126, 45.5192, 5.26722, 480),
('38513', 'Treffort', '31T', 709697, 4976911, 44.9147, 5.65667, 620),
('38514', 'Tréminis', '31T', 719104, 4958505, 44.7464, 5.76777, 920),
('38515', 'Trept', '31T', 680669, 5062069, 45.6886, 5.32028, 270),
('38516', 'La Tronche', '31T', 715466, 5009386, 45.205, 5.74362, 240),
('38517', 'Tullins', '31T', 694771, 5019094, 45.2983, 5.48417, 231),
('38518', 'Valbonnais', '31T', 729142, 4975816, 44.8989, 5.90222, 800),
('38519', 'Valencin', '31T', 657151, 5053125, 45.6139, 5.01556, 300),
('38520', 'Valencogne', '31T', 698528, 5041638, 45.5, 5.54111, 570),
('38521', 'La Valette', '31T', 725142, 4980278, 44.9403, 5.85361, 1000),
('38522', 'Valjouffrey', '32T', 264492, 4974101, 44.8814, 6.01805, 980),
('38523', 'Varacieux', '31T', 683616, 5011379, 45.2319, 5.33916, 440),
('38524', 'Varces-Allières-et-Risset', '31T', 710925, 4996166, 45.0875, 5.68028, 300),
('38525', 'Vasselin', '31T', 691266, 5056054, 45.6317, 5.45389, 255),
('38526', 'Vatilieu', '31T', 689096, 5014227, 45.2561, 5.41, 580),
('38527', 'Vaujany', '32T', 270252, 5004635, 45.1578, 6.07694, 1220),
('38528', 'Vaulnaveys-le-Bas', '31T', 720570, 4998254, 45.1033, 5.80362, 320),
('38529', 'Vaulnaveys-le-Haut', '31T', 721161, 5000128, 45.12, 5.81195, 350),
('38530', 'Vaulx-Milieu', '31T', 670059, 5053432, 45.6136, 5.18111, 225),
('38531', 'Velanne', '31T', 707090, 5040895, 45.4908, 5.65028, 540),
('38532', 'Vénérieu', '31T', 677108, 5059373, 45.6653, 5.2736, 310),
('38533', 'Venon', '31T', 720410, 5006003, 45.1731, 5.805, 540),
('38534', 'Vénosc', '32T', 272797, 4985882, 44.99, 6.11778, 1050),
('38535', 'Vernas', '31T', 677397, 5072013, 45.7789, 5.28194, 240),
('38536', 'Vernioz', '31T', 647221, 5032041, 45.4264, 4.88194, 266),
('38537', 'La Verpillière', '31T', 667356, 5055645, 45.6342, 5.14722, 212),
('38538', 'Le Versoud', '31T', 724804, 5010885, 45.2156, 5.86305, 220),
('38539', 'Vertrieu', '31T', 683802, 5082702, 45.8733, 5.36833, 210),
('38540', 'Veurey-Voroize', '31T', 705161, 5016705, 45.2739, 5.61556, 200),
('38541', 'Veyrins-Thuellin', '31T', 697975, 5055675, 45.6264, 5.53973, 233),
('38542', 'Veyssilieu', '31T', 672797, 5061012, 45.6811, 5.21889, 280),
('38543', 'Vézeronce-Curtin', '31T', 692499, 5058223, 45.6508, 5.47055, 225),
('38544', 'Vienne', '31T', 646487, 5043016, 45.5253, 4.87584, 160),
('38545', 'Vif', '31T', 710216, 4992466, 45.0544, 5.66973, 311),
('38546', 'Vignieu', '31T', 689004, 5055613, 45.6283, 5.42472, 290),
('38547', 'Villard-Bonnot', '31T', 726682, 5013330, 45.2369, 5.88805, 240),
('38548', 'Villard-de-Lans', '31T', 700819, 4993985, 45.0708, 5.55112, 1020),
('38549', 'Villard-Notre-Dame', '32T', 266961, 4989367, 45.0194, 6.04223, 1500),
('38550', 'Villard-Reculas', '32T', 266425, 4997452, 45.0919, 6.03167, 1440),
('38551', 'Villard-Reymond', '32T', 265008, 4991077, 45.0342, 6.01667, 1640),
('38552', 'Villard-Saint-Christophe', '31T', 721184, 4984311, 44.9778, 5.80527, 1060),
('38553', 'Villefontaine', '31T', 667437, 5053423, 45.6142, 5.1475, 280),
('38554', 'Villemoirieu', '31T', 673021, 5065435, 45.7208, 5.22334, 210),
('38555', 'Villeneuve-de-Marc', '31T', 664328, 5038085, 45.4769, 5.1025, 420),
('38556', 'Ville-sous-Anjou', '31T', 644990, 5026031, 45.3728, 4.85167, 240),
('38557', 'Villette-d''Anthon', '31T', 664411, 5073602, 45.7964, 5.11555, 210),
('38558', 'Villette-de-Vienne', '31T', 649356, 5050124, 45.5886, 4.91473, 215),
('38559', 'Vinay', '31T', 688657, 5009210, 45.2111, 5.4025, 280),
('38560', 'Virieu', '31T', 693437, 5039780, 45.4847, 5.47528, 406),
('38561', 'Viriville', '31T', 672914, 5020527, 45.3169, 5.20612, 363),
('38562', 'Vizille', '31T', 718245, 4995238, 45.0769, 5.77278, 290),
('38563', 'Voiron', '31T', 702799, 5027070, 45.3678, 5.58972, 310),
('38564', 'Voissant', '31T', 711824, 5040342, 45.4844, 5.71055, 370),
('38565', 'Voreppe', '31T', 706839, 5019416, 45.2978, 5.63806, 220),
('38566', 'Vourey', '31T', 697498, 5021805, 45.3219, 5.51999, 200),
('38567', 'Chamrousse', '31T', 723176, 5003782, 45.1522, 5.83917, 620),
('39001', 'Abergement-la-Ronce', '31T', 679410, 5215807, 47.0714, 5.36306, 180),
('39002', 'Abergement-le-Grand', '31T', 703927, 5198953, 46.9128, 5.67806, 278),
('39003', 'Abergement-le-Petit', '31T', 705223, 5197607, 46.9003, 5.69445, 275),
('39004', 'Abergement-lès-Thésy', '31T', 723730, 5200065, 46.9164, 5.93833, 680),
('39006', 'Aiglepierre', '31T', 714264, 5203611, 46.9514, 5.81584, 360),
('39007', 'Alièze', '31T', 697201, 5162514, 46.5872, 5.57417, 600),
('39008', 'Amange', '31T', 694335, 5226721, 47.1653, 5.56416, 230),
('39009', 'Andelot-en-Montagne', '31T', 723599, 5192827, 46.8514, 5.93306, 610),
('39010', 'Andelot-Morval', '31T', 685577, 5144228, 46.4261, 5.41528, 470),
('39011', 'Annoire', '31T', 673163, 5202708, 46.9553, 5.27584, 186),
('39013', 'Arbois', '31T', 711187, 5197846, 46.9006, 5.77277, 292),
('39014', 'Archelange', '31T', 690675, 5224562, 47.1469, 5.515, 260),
('39015', 'Ardon', '31T', 720256, 5183956, 46.7728, 5.885, 588),
('39016', 'Arinthod', '31T', 697263, 5140950, 46.3933, 5.56584, 450),
('39017', 'Arlay', '31T', 693141, 5181477, 46.7589, 5.52917, 222),
('39018', 'Aromas', '31T', 690954, 5129442, 46.2917, 5.47917, 473),
('39019', 'Les Arsures', '31T', 712249, 5203137, 46.9478, 5.78917, 300),
('39020', 'Arsure-Arsurette', '32T', 276834, 5178223, 46.7203, 6.07972, 924),
('39021', 'Arthenas', '31T', 693805, 5162126, 46.5847, 5.52972, 490),
('39022', 'Asnans-Beauvoisin', '31T', 683398, 5202119, 46.9472, 5.41, 200),
('39023', 'L''Aubépin', '31T', 682224, 5145640, 46.4397, 5.37223, 470),
('39024', 'Audelange', '31T', 696232, 5223539, 47.1361, 5.58777, 210),
('39025', 'Augea', '31T', 684633, 5158379, 46.5536, 5.40862, 300),
('39026', 'Augerans', '31T', 696265, 5210407, 47.0181, 5.5825, 213),
('39027', 'Augisey', '31T', 691090, 5158394, 46.5519, 5.49278, 500);
INSERT INTO `ods_communes` (`oc_code_insee`, `oc_nom`, `oc_secteur`, `oc_x_utm`, `oc_y_utm`, `oc_latitude`, `oc_longitude`, `oc_altitude`) VALUES
('39028', 'Aumont', '31T', 700286, 5198274, 46.9078, 5.62999, 240),
('39029', 'Aumur', '31T', 678415, 5214480, 47.0597, 5.34944, 188),
('39030', 'Authume', '31T', 689970, 5222222, 47.1261, 5.50472, 250),
('39031', 'Auxange', '31T', 700864, 5228113, 47.1758, 5.65084, 230),
('39032', 'Avignon-lès-Saint-Claude', '31T', 718677, 5141220, 46.3892, 5.84417, 721),
('39034', 'Balaiseaux', '31T', 687635, 5203980, 46.9628, 5.46639, 216),
('39035', 'Balanod', '31T', 680894, 5147268, 46.4547, 5.35556, 245),
('39036', 'La Balme-d''Épy', '31T', 685691, 5139103, 46.38, 5.41472, 400),
('39037', 'Bans', '31T', 696149, 5206232, 46.9806, 5.57916, 228),
('39038', 'Barésia-sur-l''Ain', '31T', 707690, 5158571, 46.5486, 5.70917, 490),
('39039', 'La Barre', '31T', 703332, 5224953, 47.1467, 5.68194, 249),
('39040', 'Barretaine', '31T', 706593, 5188600, 46.8189, 5.70834, 550),
('39041', 'Baume-les-Messieurs', '31T', 702108, 5175623, 46.7036, 5.64389, 300),
('39042', 'Baverans', '31T', 692831, 5219843, 47.1039, 5.54139, 217),
('39043', 'Beaufort', '31T', 686825, 5160547, 46.5725, 5.43806, 250),
('39045', 'Beffia', '31T', 695322, 5155409, 46.5239, 5.54667, 490),
('39046', 'Bellecombe', '31T', 723659, 5133087, 46.3144, 5.905, 1200),
('39047', 'Bellefontaine', '32T', 275186, 5160234, 46.5581, 6.06694, 1030),
('39048', 'Belmont', '31T', 697284, 5210287, 47.0167, 5.59584, 212),
('39049', 'Bersaillin', '31T', 698100, 5192670, 46.8581, 5.59888, 250),
('39050', 'Besain', '31T', 713191, 5184999, 46.7844, 5.79306, 530),
('39051', 'Biarne', '31T', 686401, 5224396, 47.1467, 5.45861, 205),
('39052', 'Bief-des-Maisons', '32T', 273589, 5176737, 46.7058, 6.03805, 940),
('39053', 'Bief-du-Fourg', '32T', 279487, 5187953, 46.8086, 6.10972, 870),
('39054', 'Biefmorin', '31T', 694689, 5197193, 46.8997, 5.55611, 229),
('39055', 'Billecul', '32T', 274792, 5182162, 46.755, 6.05111, 850),
('39056', 'Bletterans', '31T', 687229, 5179714, 46.7447, 5.45111, 203),
('39057', 'Blois-sur-Seille', '31T', 703914, 5180659, 46.7483, 5.66972, 346),
('39058', 'Blye', '31T', 706855, 5166762, 46.6225, 5.70195, 476),
('39059', 'Bois-d''Amont', '32T', 280732, 5157373, 46.5342, 6.14056, 1073),
('39060', 'Bois-de-Gand', '31T', 690578, 5188625, 46.8239, 5.49861, 216),
('39061', 'Boissia', '31T', 708475, 5161780, 46.5772, 5.72084, 484),
('39062', 'La Boissière', '31T', 694259, 5143974, 46.4214, 5.52806, 492),
('39063', 'Bonlieu', '31T', 718451, 5164637, 46.5997, 5.85222, 770),
('39064', 'Bonnaud', '31T', 685717, 5165394, 46.6164, 5.42556, 200),
('39065', 'Bonnefontaine', '31T', 709658, 5178571, 46.7278, 5.74389, 580),
('39066', 'Bornay', '31T', 695401, 5165484, 46.6144, 5.55195, 500),
('39068', 'Les Bouchoux', '31T', 717165, 5130844, 46.2964, 5.81972, 970),
('39069', 'Bourcia', '31T', 685228, 5136031, 46.3525, 5.40749, 360),
('39070', 'Bourg-de-Sirod', '31T', 725767, 5179154, 46.7278, 5.95472, 584),
('39072', 'Bracon', '31T', 718804, 5201582, 46.9317, 5.87445, 350),
('39073', 'Brainans', '31T', 699862, 5193872, 46.8683, 5.6225, 260),
('39074', 'Brans', '31T', 694408, 5234109, 47.2317, 5.56833, 210),
('39075', 'Bréry', '31T', 696767, 5184222, 46.7825, 5.57778, 270),
('39076', 'La Bretenière', '31T', 701756, 5222952, 47.1292, 5.66028, 240),
('39077', 'Bretenières', '31T', 693568, 5199103, 46.9172, 5.54222, 224),
('39078', 'Brevans', '31T', 691570, 5219029, 47.0969, 5.52444, 210),
('39079', 'Briod', '31T', 700574, 5170628, 46.6592, 5.62167, 533),
('39080', 'Broissia', '31T', 686980, 5136825, 46.3592, 5.43056, 350),
('39081', 'Buvilly', '31T', 707002, 5193930, 46.8667, 5.71611, 375),
('39083', 'Censeau', '32T', 276352, 5188656, 46.8139, 6.06834, 840),
('39084', 'Cernans', '31T', 722929, 5201673, 46.9311, 5.92861, 654),
('39085', 'Cerniébaud', '32T', 278583, 5179548, 46.7328, 6.10194, 984),
('39086', 'Cernon', '31T', 703593, 5142148, 46.4022, 5.6486, 507),
('39088', 'Cesancey', '31T', 691133, 5166459, 46.6244, 5.49667, 270),
('39089', 'Cézia', '31T', 697906, 5137604, 46.3631, 5.57278, 508),
('39090', 'Chaînée-des-Coupis', '31T', 685671, 5199810, 46.9258, 5.43889, 218),
('39091', 'Les Chalesmes', '32T', 272376, 5173877, 46.6797, 6.02362, 899),
('39092', 'Chambéria', '31T', 696474, 5148804, 46.4642, 5.55889, 400),
('39093', 'Chamblay', '31T', 705577, 5208219, 46.9956, 5.7039, 225),
('39094', 'Chamole', '31T', 707684, 5190770, 46.8381, 5.72361, 550),
('39095', 'Champagne-sur-Loue', '31T', 713696, 5213512, 47.0406, 5.81305, 250),
('39096', 'Champagney', '31T', 690250, 5237094, 47.2597, 5.51472, 205),
('39097', 'Champagnole', '31T', 722135, 5180811, 46.7439, 5.90805, 540),
('39099', 'Champdivers', '31T', 681238, 5209127, 47.0108, 5.38444, 190),
('39100', 'Champrougier', '31T', 692063, 5193894, 46.8708, 5.52028, 214),
('39101', 'Champvans', '31T', 684946, 5219684, 47.1047, 5.4375, 230),
('39102', 'Chancia', '31T', 703142, 5135829, 46.3456, 5.64, 315),
('39103', 'La Chapelle-sur-Furieuse', '31T', 717107, 5208628, 46.9956, 5.85555, 270),
('39104', 'Chapelle-Voland', '31T', 681188, 5185677, 46.8, 5.37445, 190),
('39105', 'Chapois', '31T', 725604, 5191388, 46.8378, 5.95862, 610),
('39106', 'Charchilla', '31T', 708004, 5149435, 46.4664, 5.70917, 577),
('39107', 'Charcier', '31T', 710435, 5167287, 46.6261, 5.74889, 521),
('39108', 'Charency', '31T', 728437, 5183830, 46.7689, 5.99194, 770),
('39109', 'Charézier', '31T', 708583, 5165431, 46.61, 5.72389, 485),
('39110', 'La Charme', '31T', 695025, 5190777, 46.8419, 5.55778, 250),
('39111', 'Charnod', '31T', 691519, 5133939, 46.3319, 5.48833, 510),
('39112', 'La Chassagne', '31T', 686994, 5192683, 46.8614, 5.45333, 200),
('39113', 'Chassal', '31T', 714358, 5137574, 46.3578, 5.78639, 370),
('39114', 'Château-Chalon', '31T', 700345, 5181312, 46.7553, 5.62333, 439),
('39115', 'Château-des-Prés', '31T', 722204, 5153524, 46.4986, 5.89584, 1000),
('39116', 'La Châtelaine', '31T', 714591, 5195093, 46.8747, 5.81611, 570),
('39117', 'Chatelay', '31T', 705388, 5211828, 47.0281, 5.70305, 230),
('39118', 'Châtel-de-Joux', '31T', 714079, 5156353, 46.5267, 5.79138, 800),
('39119', 'Le Chateley', '31T', 694482, 5194436, 46.875, 5.55222, 230),
('39120', 'Châtelneuf', '31T', 722927, 5173207, 46.6753, 5.91472, 770),
('39121', 'Châtenois', '31T', 693457, 5224591, 47.1464, 5.55167, 221),
('39122', 'Châtillon', '31T', 708672, 5170842, 46.6586, 5.7275, 500),
('39123', 'Chatonnay', '31T', 695317, 5144286, 46.4239, 5.54194, 390),
('39124', 'Chaumergy', '31T', 688787, 5190948, 46.8453, 5.47611, 213),
('39126', 'La Chaumusse', '31T', 725120, 5163460, 46.5869, 5.93861, 884),
('39127', 'Chaussenans', '31T', 708228, 5189769, 46.8289, 5.73028, 555),
('39128', 'Chaussin', '31T', 682954, 5204175, 46.9658, 5.40499, 188),
('39129', 'Chaux-des-Crotenay', '31T', 726738, 5171433, 46.6581, 5.96361, 766),
('39130', 'Chaux-des-Prés', '31T', 719862, 5154520, 46.5083, 5.86583, 876),
('39131', 'La Chaux-du-Dombief', '31T', 722178, 5165236, 46.6039, 5.90111, 892),
('39132', 'La Chaux-en-Bresse', '31T', 689118, 5188517, 46.8233, 5.47944, 220),
('39133', 'Chaux-Champagny', '31T', 719776, 5197600, 46.8956, 5.88528, 570),
('39134', 'Chavéria', '31T', 696850, 5153666, 46.5078, 5.56584, 493),
('39135', 'Chazelles', '31T', 679826, 5141491, 46.4031, 5.33944, 260),
('39136', 'Chemenot', '31T', 692933, 5193212, 46.8644, 5.5314, 219),
('39137', 'Chemilla', '31T', 696864, 5136766, 46.3558, 5.55889, 450),
('39138', 'Chemin', '31T', 676023, 5205418, 46.9789, 5.31444, 186),
('39139', 'Chêne-Bernard', '31T', 689028, 5199390, 46.9211, 5.48277, 215),
('39140', 'Chêne-Sec', '31T', 685972, 5191477, 46.8508, 5.43944, 210),
('39141', 'Chevigny', '31T', 687643, 5227772, 47.1767, 5.47639, 210),
('39142', 'Chevreaux', '31T', 684425, 5153306, 46.5081, 5.40389, 440),
('39143', 'Chevrotaine', '31T', 718093, 5170990, 46.6569, 5.85055, 644),
('39145', 'Chille', '31T', 696750, 5174364, 46.6939, 5.57333, 350),
('39146', 'Chilly-le-Vignoble', '31T', 691190, 5170045, 46.6567, 5.49889, 240),
('39147', 'Chilly-sur-Salins', '31T', 718363, 5196837, 46.8892, 5.86639, 624),
('39148', 'Chisséria', '31T', 697082, 5139276, 46.3783, 5.56278, 451),
('39149', 'Chissey-sur-Loue', '31T', 706889, 5211200, 47.0219, 5.72249, 225),
('39150', 'Choisey', '31T', 686883, 5215111, 47.0631, 5.46111, 200),
('39151', 'Choux', '31T', 712985, 5131562, 46.3042, 5.76584, 810),
('39153', 'Cize', '31T', 722677, 5178792, 46.7256, 5.91416, 530),
('39154', 'Clairvaux-les-Lacs', '31T', 710530, 5161512, 46.5742, 5.7475, 540),
('39155', 'Clucy', '31T', 720819, 5203202, 46.9456, 5.90167, 604),
('39156', 'Cogna', '31T', 711208, 5162215, 46.5803, 5.75666, 541),
('39157', 'Coiserette', '31T', 717968, 5135941, 46.3419, 5.8325, 650),
('39158', 'Coisia', '31T', 698631, 5131108, 46.3044, 5.57944, 350),
('39159', 'Colonne', '31T', 695977, 5195381, 46.8831, 5.57223, 230),
('39160', 'Commenailles', '31T', 686947, 5186039, 46.8017, 5.45, 217),
('39161', 'Communailles-en-Montagne', '32T', 278687, 5186962, 46.7994, 6.09972, 860),
('39162', 'Condamine', '31T', 686565, 5168942, 46.6481, 5.43806, 218),
('39163', 'Condes', '31T', 701785, 5134796, 46.3367, 5.62194, 320),
('39164', 'Conliège', '31T', 698701, 5170010, 46.6542, 5.59695, 300),
('39165', 'Conte', '32T', 271013, 5181656, 46.7492, 6.00195, 681),
('39166', 'Cornod', '31T', 696227, 5131957, 46.3128, 5.54861, 320),
('39167', 'Cosges', '31T', 683358, 5179935, 46.7478, 5.40056, 200),
('39168', 'Courbette', '31T', 696421, 5163570, 46.5969, 5.56444, 537),
('39169', 'Courbouzon', '31T', 693335, 5169496, 46.6511, 5.52667, 270),
('39170', 'Courlans', '31T', 690839, 5171702, 46.6717, 5.495, 227),
('39171', 'Courlaoux', '31T', 688268, 5170942, 46.6656, 5.46111, 220),
('39172', 'Courtefontaine', '31T', 712645, 5223395, 47.1297, 5.80389, 263),
('39173', 'Cousance', '31T', 683291, 5155527, 46.5283, 5.39, 230),
('39174', 'Coyrière', '31T', 718713, 5136060, 46.3428, 5.84223, 706),
('39175', 'Coyron', '31T', 707452, 5154329, 46.5106, 5.70417, 535),
('39176', 'Cramans', '31T', 711273, 5210366, 47.0131, 5.77973, 233),
('39177', 'Crançot', '31T', 703279, 5173685, 46.6858, 5.65834, 513),
('39178', 'Crans', '31T', 727076, 5176576, 46.7042, 5.97056, 710),
('39179', 'Crenans', '31T', 709851, 5148510, 46.4575, 5.73278, 650),
('39180', 'Cressia', '31T', 690068, 5155643, 46.5275, 5.47833, 447),
('39182', 'Crissey', '31T', 688613, 5215814, 47.0689, 5.48417, 210),
('39183', 'Crotenay', '31T', 714916, 5181290, 46.7506, 5.81389, 520),
('39184', 'Les Crozets', '31T', 714359, 5149038, 46.4608, 5.79166, 829),
('39185', 'Cuisia', '31T', 684116, 5156448, 46.5364, 5.40111, 290),
('39186', 'Cuttura', '31T', 715673, 5143924, 46.4144, 5.80639, 620),
('39187', 'Cuvier', '32T', 276491, 5190104, 46.8269, 6.06945, 830),
('39188', 'Dammartin-Marpain', '31T', 692491, 5236765, 47.2561, 5.54417, 235),
('39189', 'Damparis', '31T', 683114, 5216167, 47.0736, 5.41195, 200),
('39190', 'Dampierre', '31T', 707806, 5226035, 47.155, 5.74138, 240),
('39191', 'Darbonnay', '31T', 698659, 5187961, 46.8156, 5.60416, 260),
('39192', 'Denezières', '31T', 714780, 5165432, 46.6081, 5.80472, 620),
('39193', 'Le Deschaux', '31T', 690373, 5202368, 46.9475, 5.50167, 225),
('39194', 'Desnes', '31T', 688738, 5181708, 46.7622, 5.47166, 205),
('39195', 'Dessia', '31T', 692320, 5139741, 46.3839, 5.50111, 616),
('39196', 'Les Deux-Fays', '31T', 688938, 5194876, 46.8806, 5.47972, 207),
('39197', 'Digna', '31T', 683935, 5153971, 46.5142, 5.39777, 264),
('39198', 'Dole', '31T', 689460, 5218375, 47.0917, 5.49639, 225),
('39199', 'Domblans', '31T', 698514, 5182085, 46.7628, 5.59972, 255),
('39200', 'Dompierre-sur-Mont', '31T', 699923, 5159422, 46.5586, 5.60833, 515),
('39201', 'Doucier', '31T', 712456, 5170356, 46.6531, 5.77667, 516),
('39202', 'Dournon', '31T', 725653, 5201868, 46.9319, 5.96445, 610),
('39203', 'Doye', '32T', 272003, 5183659, 46.7675, 6.0139, 790),
('39204', 'Dramelay', '31T', 694911, 5142296, 46.4061, 5.53583, 460),
('39205', 'Éclans-Nenon', '31T', 697663, 5222382, 47.1253, 5.60612, 220),
('39206', 'Écleux', '31T', 707941, 5208332, 46.9958, 5.735, 229),
('39207', 'Écrille', '31T', 701801, 5153613, 46.5058, 5.63028, 410),
('39208', 'Entre-deux-Monts', '31T', 727672, 5169799, 46.6431, 5.975, 795),
('39209', 'Val-d''Épy', '31T', 684336, 5139371, 46.3828, 5.39723, 370),
('39210', 'Équevillon', '31T', 724336, 5182748, 46.7606, 5.93778, 616),
('39211', 'Les Essards-Taignevaux', '31T', 684015, 5197905, 46.9092, 5.41639, 214),
('39213', 'Esserval-Combe', '32T', 274116, 5187318, 46.8011, 6.03973, 750),
('39214', 'Esserval-Tartre', '32T', 274656, 5188133, 46.8086, 6.04639, 841),
('39215', 'Essia', '31T', 695147, 5162138, 46.5844, 5.54722, 480),
('39216', 'Étival', '31T', 714202, 5154101, 46.5064, 5.79195, 810),
('39217', 'L''Étoile', '31T', 693769, 5176492, 46.7139, 5.53528, 282),
('39218', 'Étrepigney', '31T', 704129, 5223250, 47.1311, 5.69167, 240),
('39219', 'Évans', '31T', 709670, 5228759, 47.1789, 5.76722, 250),
('39220', 'Falletans', '31T', 694437, 5219772, 47.1028, 5.5625, 210),
('39221', 'La Favière', '32T', 273406, 5182029, 46.7533, 6.03305, 800),
('39222', 'Fay-en-Montagne', '31T', 708024, 5180955, 46.7497, 5.72361, 527),
('39223', 'La Ferté', '31T', 702043, 5202072, 46.9414, 5.65473, 240),
('39224', 'Fétigny', '31T', 699498, 5146430, 46.4419, 5.59722, 421),
('39225', 'Le Fied', '31T', 707269, 5183154, 46.7697, 5.71473, 535),
('39226', 'Florentia', '31T', 686258, 5140820, 46.3953, 5.42277, 450),
('39227', 'Foncine-le-Bas', '32T', 272599, 5169078, 46.6367, 6.02889, 830),
('39228', 'Foncine-le-Haut', '32T', 276263, 5171444, 46.6592, 6.07555, 860),
('39229', 'Fontainebrux', '31T', 685029, 5174610, 46.6994, 5.42028, 205),
('39230', 'Fontenu', '31T', 715777, 5172081, 46.6675, 5.82083, 592),
('39232', 'Fort-du-Plasne', '31T', 728733, 5167088, 46.6183, 5.9875, 887),
('39233', 'Foucherans', '31T', 686337, 5217040, 47.0806, 5.45472, 212),
('39234', 'Foulenay', '31T', 689319, 5192880, 46.8625, 5.48389, 220),
('39235', 'Fraisans', '31T', 709324, 5225440, 47.1492, 5.76111, 220),
('39236', 'Francheville', '31T', 690408, 5189979, 46.8361, 5.49695, 215),
('39237', 'Fraroz', '32T', 277529, 5179773, 46.7344, 6.08806, 952),
('39238', 'Frasne-les-Meulières', '31T', 689671, 5230895, 47.2042, 5.50445, 240),
('39239', 'La Frasnée', '31T', 715283, 5159702, 46.5564, 5.80862, 555),
('39240', 'Le Frasnois', '31T', 721699, 5168989, 46.6378, 5.89666, 780),
('39241', 'Frébuans', '31T', 690120, 5169548, 46.6525, 5.48472, 235),
('39243', 'Froideville', '31T', 689593, 5186895, 46.8086, 5.48499, 221),
('39244', 'Frontenay', '31T', 699507, 5184806, 46.7869, 5.61389, 350),
('39245', 'Gatey', '31T', 685166, 5201740, 46.9433, 5.43305, 212),
('39246', 'Gendrey', '31T', 703192, 5231499, 47.2056, 5.68306, 270),
('39247', 'Genod', '31T', 694650, 5136417, 46.3533, 5.53, 444),
('39248', 'Geraise', '31T', 724158, 5204470, 46.9558, 5.94612, 660),
('39249', 'Germigney', '31T', 704106, 5211630, 47.0267, 5.68611, 232),
('39250', 'Geruge', '31T', 693445, 5166718, 46.6261, 5.52694, 440),
('39251', 'Gevingey', '31T', 691796, 5167685, 46.6353, 5.50583, 280),
('39252', 'Gevry', '31T', 685721, 5212448, 47.0394, 5.44473, 195),
('39253', 'Gigny', '31T', 688902, 5147203, 46.4519, 5.45972, 380),
('39254', 'Gillois', '32T', 272202, 5179973, 46.7344, 6.01833, 820),
('39255', 'Gizia', '31T', 685469, 5155439, 46.5269, 5.41834, 244),
('39258', 'Grande-Rivière', '31T', 723651, 5158831, 46.5458, 5.91723, 850),
('39259', 'Grange-de-Vaivre', '31T', 715980, 5209391, 47.0028, 5.84111, 250),
('39260', 'Granges-sur-Baume', '31T', 701964, 5176731, 46.7136, 5.6425, 495),
('39261', 'Graye-et-Charnay', '31T', 688229, 5148943, 46.4678, 5.45166, 390),
('39262', 'Gredisans', '31T', 690598, 5225641, 47.1567, 5.51444, 290),
('39263', 'Grozon', '31T', 705561, 5196383, 46.8892, 5.69833, 270),
('39264', 'Grusse', '31T', 691554, 5163259, 46.5956, 5.50083, 250),
('39265', 'Hautecour', '31T', 711857, 5160724, 46.5667, 5.76444, 625),
('39266', 'Les Hays', '31T', 681758, 5196940, 46.9011, 5.38639, 212),
('39267', 'Ivory', '31T', 717554, 5199280, 46.9114, 5.85695, 600),
('39268', 'Ivrey', '31T', 719922, 5207990, 46.9889, 5.89222, 430),
('39269', 'Jeurre', '31T', 708232, 5138412, 46.3672, 5.70723, 327),
('39270', 'Jouhe', '31T', 688842, 5223855, 47.1411, 5.49055, 230),
('39271', 'Lac-des-Rouges-Truites', '31T', 728706, 5164986, 46.5994, 5.98611, 930),
('39272', 'Ladoye-sur-Seille', '31T', 704694, 5182076, 46.7608, 5.68056, 360),
('39273', 'Lains', '31T', 691106, 5140290, 46.3892, 5.48556, 472),
('39274', 'Lajoux', '31T', 728587, 5139853, 46.3736, 5.97222, 1178),
('39275', 'Lamoura', '31T', 727854, 5142298, 46.3958, 5.96389, 1154),
('39277', 'Le Larderet', '31T', 724637, 5188879, 46.8156, 5.94472, 659),
('39278', 'Largillay-Marsonnay', '31T', 704965, 5159096, 46.5542, 5.67389, 480),
('39279', 'Larnaud', '31T', 687410, 5175951, 46.7108, 5.45194, 222),
('39280', 'Larrivoire', '31T', 714375, 5135875, 46.3425, 5.78584, 720),
('39281', 'Le Latet', '31T', 723728, 5187670, 46.805, 5.93223, 590),
('39282', 'La Latette', '32T', 277682, 5181622, 46.7511, 6.08916, 871),
('39283', 'Lavancia-Epercy', '31T', 706257, 5134204, 46.33, 5.67973, 342),
('39284', 'Lavangeot', '31T', 697942, 5225388, 47.1522, 5.61112, 215),
('39285', 'Lavans-lès-Dole', '31T', 699194, 5225770, 47.1553, 5.62778, 220),
('39286', 'Lavans-lès-Saint-Claude', '31T', 713787, 5140427, 46.3836, 5.78028, 520),
('39287', 'Lavans-sur-Valouse', '31T', 696623, 5134287, 46.3336, 5.55472, 450),
('39288', 'Lavigny', '31T', 698285, 5176794, 46.7153, 5.59444, 310),
('39289', 'Lect', '31T', 705567, 5140669, 46.3883, 5.67361, 520),
('39290', 'Légna', '31T', 699281, 5144600, 46.4256, 5.59361, 450),
('39291', 'Lemuy', '31T', 725932, 5197860, 46.8958, 5.96612, 627),
('39292', 'Lent', '31T', 727188, 5180908, 46.7431, 5.97416, 756),
('39293', 'Leschères', '31T', 716979, 5148050, 46.4511, 5.82528, 730),
('39294', 'Lézat', '31T', 724979, 5153503, 46.4975, 5.93195, 750),
('39295', 'Loisia', '31T', 688941, 5150758, 46.4839, 5.46166, 380),
('39296', 'Lombard', '31T', 691280, 5183890, 46.7811, 5.50583, 250),
('39297', 'Longchaumois', '31T', 725043, 5149487, 46.4614, 5.93084, 884),
('39298', 'Longcochon', '32T', 276274, 5184301, 46.7747, 6.06944, 784),
('39299', 'Longwy-sur-le-Doubs', '31T', 680473, 5202987, 46.9558, 5.37194, 186),
('39300', 'Lons-le-Saunier', '31T', 695213, 5171935, 46.6725, 5.55222, 267),
('39301', 'Loulle', '31T', 720140, 5176689, 46.7075, 5.88, 681),
('39302', 'Louvatange', '31T', 705771, 5230600, 47.1967, 5.71666, 250),
('39303', 'Louvenne', '31T', 689547, 5143670, 46.42, 5.46667, 369),
('39304', 'Le Louverot', '31T', 697243, 5178119, 46.7275, 5.58139, 290),
('39305', 'La Loye', '31T', 694333, 5211333, 47.0269, 5.5575, 219),
('39306', 'Macornay', '31T', 694336, 5168786, 46.6444, 5.53944, 280),
('39307', 'Maisod', '31T', 706146, 5150700, 46.4783, 5.68556, 520),
('39308', 'Malange', '31T', 698207, 5228178, 47.1772, 5.61584, 246),
('39309', 'Mallerey', '31T', 687221, 5167016, 46.6306, 5.44584, 200),
('39310', 'Mantry', '31T', 695280, 5185563, 46.795, 5.55889, 300),
('39312', 'Marigna-sur-Valouse', '31T', 694152, 5146659, 46.4456, 5.52778, 400),
('39313', 'Marigny', '31T', 712743, 5173672, 46.6828, 5.78195, 510),
('39314', 'Marnézia', '31T', 702272, 5161199, 46.5739, 5.63972, 525),
('39315', 'Marnoz', '31T', 715312, 5203309, 46.9483, 5.82945, 330),
('39317', 'La Marre', '31T', 706027, 5179125, 46.7339, 5.69667, 528),
('39318', 'Martigna', '31T', 707363, 5140669, 46.3878, 5.69694, 660),
('39319', 'Mathenay', '31T', 703630, 5200828, 46.9297, 5.675, 244),
('39320', 'Maynal', '31T', 685512, 5158900, 46.5581, 5.42028, 290),
('39321', 'Menétru-le-Vignoble', '31T', 700031, 5182445, 46.7656, 5.61972, 400),
('39322', 'Menétrux-en-Joux', '31T', 716508, 5167132, 46.6228, 5.82805, 700),
('39323', 'Menotey', '31T', 689460, 5226285, 47.1628, 5.49972, 270),
('39324', 'Mérona', '31T', 701895, 5159116, 46.5553, 5.63389, 641),
('39325', 'Mesnay', '31T', 712734, 5197839, 46.9, 5.79306, 321),
('39326', 'Mesnois', '31T', 705788, 5164346, 46.6011, 5.68695, 462),
('39327', 'Messia-sur-Sorne', '31T', 692663, 5170525, 46.6606, 5.51833, 250),
('39328', 'Meussia', '31T', 709076, 5152994, 46.4981, 5.72472, 590),
('39329', 'Mièges', '32T', 273955, 5185315, 46.7831, 6.03861, 745),
('39330', 'Miéry', '31T', 703929, 5187705, 46.8117, 5.67306, 390),
('39331', 'Mignovillard', '32T', 280110, 5187003, 46.8003, 6.11833, 866),
('39332', 'Mirebel', '31T', 708377, 5175065, 46.6967, 5.72555, 583),
('39333', 'Moirans-en-Montagne', '31T', 709189, 5145397, 46.4297, 5.72278, 630),
('39334', 'Moiron', '31T', 695981, 5167944, 46.6364, 5.56056, 330),
('39335', 'Moissey', '31T', 691254, 5230112, 47.1967, 5.52499, 230),
('39336', 'Molain', '31T', 713883, 5189412, 46.8239, 5.80417, 578),
('39337', 'Molamboz', '31T', 704189, 5201805, 46.9383, 5.68277, 270),
('39338', 'Molay', '31T', 683953, 5210199, 47.0197, 5.42056, 192),
('39339', 'Molinges', '31T', 712601, 5137018, 46.3533, 5.76333, 360),
('39340', 'Molpré', '32T', 276243, 5185755, 46.7878, 6.06833, 786),
('39341', 'Les Molunes', '31T', 724840, 5136468, 46.3444, 5.92194, 1280),
('39342', 'Monay', '31T', 697742, 5190031, 46.8344, 5.59305, 254),
('39343', 'Monnetay', '31T', 692848, 5147358, 46.4522, 5.51111, 598),
('39344', 'Monnet-la-Ville', '31T', 713472, 5177685, 46.7186, 5.79333, 500),
('39345', 'Monnières', '31T', 686751, 5220637, 47.1128, 5.46166, 280),
('39346', 'Montagna-le-Reconduit', '31T', 683190, 5147584, 46.4569, 5.38556, 380),
('39347', 'Montagna-le-Templier', '31T', 688623, 5136258, 46.3536, 5.45167, 360),
('39348', 'Montaigu', '31T', 696241, 5170424, 46.6586, 5.56501, 429),
('39349', 'Montain', '31T', 696999, 5177153, 46.7189, 5.57778, 350),
('39350', 'Montbarrey', '31T', 700732, 5210804, 47.0203, 5.64139, 220),
('39351', 'Montcusel', '31T', 704406, 5136428, 46.3506, 5.65667, 660),
('39352', 'Monteplain', '31T', 705356, 5226166, 47.1569, 5.70916, 240),
('39353', 'Montfleur', '31T', 687533, 5133444, 46.3286, 5.43639, 360),
('39354', 'Montholier', '31T', 701406, 5197106, 46.8969, 5.64417, 300),
('39355', 'Montigny-lès-Arsures', '31T', 711665, 5200520, 46.9244, 5.78028, 340),
('39356', 'Montigny-sur-l''Ain', '31T', 712623, 5176450, 46.7078, 5.78166, 480),
('39359', 'Montmarlon', '31T', 725535, 5195465, 46.8744, 5.95973, 641),
('39360', 'Montmirey-la-Ville', '31T', 690824, 5232354, 47.2169, 5.52028, 220),
('39361', 'Montmirey-le-Château', '31T', 691977, 5233164, 47.2239, 5.53584, 237),
('39362', 'Montmorot', '31T', 693370, 5172370, 46.6769, 5.52833, 260),
('39363', 'Montrevel', '31T', 690975, 5143777, 46.4206, 5.48528, 415),
('39364', 'Montrond', '31T', 716004, 5186459, 46.7967, 5.83055, 590),
('39365', 'Mont-sous-Vaudrey', '31T', 697780, 5206162, 46.9794, 5.60056, 215),
('39366', 'Mont-sur-Monnet', '31T', 716720, 5176627, 46.7081, 5.83528, 650),
('39367', 'Morbier', '32T', 271256, 5157785, 46.5347, 6.01695, 910),
('39368', 'Morez', '32T', 271791, 5155571, 46.515, 6.025, 750),
('39370', 'Mouchard', '31T', 712479, 5206174, 46.975, 5.79361, 281),
('39371', 'La Mouille', '31T', 728527, 5154501, 46.5053, 5.97861, 920),
('39372', 'Mournans-Charbonny', '31T', 727265, 5184496, 46.7753, 5.97695, 800),
('39373', 'Les Moussières', '31T', 722334, 5134182, 46.3247, 5.88833, 1144),
('39375', 'Moutonne', '31T', 696205, 5155777, 46.5269, 5.55833, 480),
('39376', 'Moutoux', '31T', 724209, 5186143, 46.7911, 5.93778, 650),
('39377', 'Mutigney', '31T', 692303, 5239293, 47.2789, 5.54278, 200),
('39378', 'Nanc-lès-Saint-Amour', '31T', 681127, 5143754, 46.4231, 5.35723, 320),
('39379', 'Nance', '31T', 685297, 5179036, 46.7392, 5.42556, 210),
('39380', 'Nancuise', '31T', 694422, 5148892, 46.4656, 5.53223, 390),
('39381', 'Les Nans', '31T', 726885, 5186120, 46.79, 5.97278, 660),
('39382', 'Nantey', '31T', 684398, 5142246, 46.4086, 5.39916, 402),
('39385', 'Neublans-Abergement', '31T', 677172, 5198068, 46.9125, 5.32667, 211),
('39386', 'Neuvilley', '31T', 697348, 5196847, 46.8958, 5.59084, 230),
('39387', 'Nevy-lès-Dole', '31T', 691468, 5208459, 47.0019, 5.51862, 210),
('39388', 'Nevy-sur-Seille', '31T', 700782, 5179689, 46.7406, 5.62834, 280),
('39389', 'Ney', '31T', 720407, 5179851, 46.7358, 5.885, 500),
('39390', 'Nogna', '31T', 702249, 5163794, 46.5972, 5.64055, 550),
('39391', 'Nozeroy', '32T', 273967, 5184511, 46.7758, 6.03916, 780),
('39392', 'Offlanges', '31T', 693085, 5231439, 47.2081, 5.54972, 301),
('39393', 'Onglières', '32T', 271926, 5186660, 46.7944, 6.01139, 820),
('39394', 'Onoz', '31T', 703611, 5147988, 46.4547, 5.65138, 591),
('39395', 'Orbagna', '31T', 687543, 5161434, 46.5803, 5.44778, 240),
('39396', 'Orchamps', '31T', 701722, 5225176, 47.1492, 5.66083, 240),
('39397', 'Orgelet', '31T', 700205, 5155414, 46.5225, 5.61027, 500),
('39398', 'Ougney', '31T', 701928, 5235195, 47.2392, 5.66806, 209),
('39399', 'Ounans', '31T', 702565, 5207868, 46.9933, 5.66417, 221),
('39400', 'Our', '31T', 700947, 5223172, 47.1314, 5.64972, 230),
('39401', 'Oussières', '31T', 696910, 5197914, 46.9056, 5.58555, 227),
('39402', 'Pagney', '31T', 704388, 5236485, 47.25, 5.70111, 215),
('39403', 'Pagnoz', '31T', 714238, 5205496, 46.9683, 5.81639, 290),
('39404', 'Pannessières', '31T', 698454, 5174915, 46.6983, 5.59584, 400),
('39405', 'Parcey', '31T', 688776, 5210690, 47.0228, 5.48417, 199),
('39406', 'Le Pasquier', '31T', 721647, 5187129, 46.8008, 5.90473, 591),
('39407', 'Passenans', '31T', 699723, 5185957, 46.7972, 5.61722, 300),
('39408', 'Patornay', '31T', 707035, 5162751, 46.5864, 5.7025, 450),
('39409', 'Peintre', '31T', 688045, 5229700, 47.1939, 5.4825, 220),
('39411', 'Perrigny', '31T', 697565, 5171548, 46.6683, 5.58278, 310),
('39412', 'Peseux', '31T', 679831, 5206737, 46.9897, 5.36499, 189),
('39413', 'La Pesse', '31T', 719283, 5129715, 46.2856, 5.84666, 1170),
('39414', 'Le Petit-Mercey', '31T', 707892, 5230180, 47.1922, 5.74444, 260),
('39415', 'Petit-Noir', '31T', 678072, 5200536, 46.9344, 5.33945, 185),
('39417', 'Les Piards', '31T', 716998, 5152872, 46.4944, 5.82777, 910),
('39418', 'Picarreau', '31T', 709559, 5181410, 46.7533, 5.74389, 550),
('39419', 'Pillemoine', '31T', 722081, 5175957, 46.7003, 5.905, 670),
('39420', 'Pimorin', '31T', 692026, 5153079, 46.5039, 5.50278, 500),
('39421', 'Le Pin', '31T', 696383, 5175835, 46.7072, 5.56917, 340),
('39422', 'Plainoiseau', '31T', 695120, 5178081, 46.7278, 5.55361, 300),
('39423', 'Plaisia', '31T', 701832, 5156518, 46.5319, 5.63194, 530),
('39424', 'Les Planches-en-Montagne', '32T', 271080, 5171144, 46.6547, 6.00805, 688),
('39425', 'Les Planches-près-Arbois', '31T', 713732, 5195402, 46.8778, 5.805, 330),
('39426', 'Plasne', '31T', 704784, 5186282, 46.7986, 5.68361, 570),
('39427', 'Plénise', '32T', 273414, 5187840, 46.8056, 6.03028, 825),
('39428', 'Plénisette', '32T', 272686, 5187125, 46.7989, 6.02111, 826),
('39429', 'Pleure', '31T', 686983, 5198460, 46.9133, 5.45556, 215),
('39430', 'Plumont', '31T', 705874, 5222785, 47.1264, 5.71444, 250),
('39431', 'Poids-de-Fiole', '31T', 701217, 5163450, 46.5944, 5.62694, 540),
('39432', 'Pointre', '31T', 689175, 5233228, 47.2253, 5.49889, 205),
('39434', 'Poligny', '31T', 706469, 5190326, 46.8344, 5.7075, 347),
('39435', 'Pont-de-Poitte', '31T', 706337, 5162603, 46.5853, 5.69333, 444),
('39436', 'Pont-d''Héry', '31T', 720914, 5194891, 46.8708, 5.89889, 591),
('39437', 'Pont-du-Navoy', '31T', 712505, 5178578, 46.7269, 5.78111, 480),
('39438', 'Ponthoux', '31T', 715944, 5141709, 46.3944, 5.80889, 590),
('39439', 'Port-Lesney', '31T', 714613, 5209187, 47.0014, 5.82306, 280),
('39440', 'Pratz', '31T', 712292, 5139757, 46.3781, 5.76056, 690),
('39441', 'Prémanon', '32T', 272015, 5149628, 46.4617, 6.03083, 1120),
('39442', 'Prénovel', '31T', 717619, 5154594, 46.5097, 5.83666, 912),
('39443', 'Présilly', '31T', 698080, 5159082, 46.5561, 5.58416, 520),
('39444', 'Pretin', '31T', 715893, 5201878, 46.9353, 5.8364, 365),
('39445', 'Publy', '31T', 702072, 5167804, 46.6333, 5.63999, 530),
('39446', 'Pupillin', '31T', 710364, 5195963, 46.8839, 5.76111, 462),
('39447', 'Quintigny', '31T', 692849, 5178656, 46.7336, 5.52416, 240),
('39448', 'Rahon', '31T', 686983, 5206555, 46.9861, 5.45889, 200),
('39449', 'Rainans', '31T', 688354, 5225292, 47.1542, 5.48472, 250),
('39451', 'Ranchot', '31T', 706283, 5225580, 47.1514, 5.72111, 240),
('39452', 'Rans', '31T', 706804, 5224548, 47.1419, 5.7275, 235),
('39453', 'Ravilloles', '31T', 715178, 5145235, 46.4264, 5.80056, 650),
('39454', 'Recanoz', '31T', 691100, 5186881, 46.8081, 5.50472, 220),
('39455', 'Reithouse', '31T', 695754, 5159192, 46.5578, 5.55389, 503),
('39456', 'Relans', '31T', 686812, 5181524, 46.7611, 5.44639, 210),
('39457', 'Les Repôts', '31T', 684643, 5172652, 46.6819, 5.41445, 219),
('39458', 'Revigny', '31T', 699172, 5167986, 46.6358, 5.60222, 350),
('39460', 'La Rixouse', '31T', 721348, 5150062, 46.4678, 5.88305, 726),
('39461', 'Rix', '32T', 274406, 5183753, 46.7692, 6.04528, 781),
('39462', 'Rochefort-sur-Nenon', '31T', 694287, 5222424, 47.1267, 5.56167, 205),
('39463', 'Rogna', '31T', 711400, 5134040, 46.3269, 5.74639, 782),
('39464', 'Romain', '31T', 705982, 5232399, 47.2128, 5.72027, 280),
('39465', 'Romange', '31T', 697303, 5226201, 47.1597, 5.60305, 220),
('39466', 'Rosay', '31T', 687907, 5155885, 46.5303, 5.45028, 450),
('39467', 'Rotalier', '31T', 689666, 5162335, 46.5878, 5.47583, 300),
('39468', 'Rothonay', '31T', 694088, 5155307, 46.5233, 5.53056, 470),
('39469', 'Rouffange', '31T', 704910, 5233567, 47.2236, 5.70667, 240),
('39470', 'Les Rousses', '32T', 274394, 5152135, 46.485, 6.06056, 1100),
('39471', 'Ruffey-sur-Seille', '31T', 690283, 5179872, 46.7453, 5.49111, 211),
('39472', 'Rye', '31T', 685038, 5193580, 46.87, 5.42806, 210),
('39473', 'Saffloz', '31T', 717557, 5172299, 46.6689, 5.84417, 650),
('39474', 'Sainte-Agnès', '31T', 689365, 5164457, 46.6069, 5.47277, 230),
('39475', 'Saint-Amour', '31T', 679825, 5145136, 46.4358, 5.34083, 225),
('39476', 'Saint-Aubin', '31T', 677046, 5211534, 47.0336, 5.33028, 188),
('39477', 'Saint-Baraing', '31T', 684637, 5205833, 46.9803, 5.42777, 200),
('39478', 'Saint-Claude', '31T', 720176, 5141150, 46.3881, 5.86361, 434),
('39479', 'Saint-Cyr-Montmalin', '31T', 707387, 5202966, 46.9478, 5.72527, 300),
('39480', 'Saint-Didier', '31T', 691967, 5175693, 46.7072, 5.51139, 270),
('39481', 'Saint-Germain-en-Montagne', '31T', 724307, 5184663, 46.7778, 5.93833, 630),
('39482', 'Saint-Germain-lès-Arlay', '31T', 695328, 5181486, 46.7583, 5.55778, 236),
('39483', 'Saint-Hymetière', '31T', 696655, 5137254, 46.3603, 5.55638, 449),
('39484', 'Saint-Jean-d''Étreux', '31T', 681127, 5141591, 46.4036, 5.35639, 430),
('39485', 'Saint-Julien', '31T', 688506, 5140704, 46.3936, 5.45194, 386),
('39486', 'Saint-Lamain', '31T', 697460, 5186376, 46.8017, 5.58778, 290),
('39487', 'Saint-Laurent-en-Grandvaux', '31T', 726170, 5162170, 46.575, 5.95167, 900),
('39488', 'Saint-Laurent-la-Roche', '31T', 692369, 5163749, 46.5997, 5.51167, 490),
('39489', 'Saint-Lothain', '31T', 701551, 5189015, 46.8242, 5.6425, 320),
('39490', 'Saint-Loup', '31T', 675655, 5208558, 47.0072, 5.31083, 185),
('39491', 'Saint-Lupicin', '31T', 714372, 5142024, 46.3978, 5.78861, 582),
('39492', 'Saint-Maur', '31T', 698058, 5165601, 46.6147, 5.58666, 590),
('39493', 'Saint-Maurice-Crillat', '31T', 716713, 5161422, 46.5714, 5.82805, 770),
('39494', 'Saint-Pierre', '31T', 723780, 5161679, 46.5714, 5.92028, 885),
('39495', 'Saint-Thiébaud', '31T', 717799, 5205903, 46.9708, 5.86334, 570),
('39497', 'Saizenay', '31T', 721579, 5204960, 46.9611, 5.9125, 510),
('39498', 'Salans', '31T', 711528, 5227496, 47.1669, 5.79111, 218),
('39499', 'Saligney', '31T', 699959, 5233058, 47.2206, 5.64111, 226),
('39500', 'Salins-les-Bains', '31T', 719020, 5202610, 46.9408, 5.87778, 357),
('39501', 'Sampans', '31T', 686240, 5222135, 47.1264, 5.45555, 220),
('39502', 'Santans', '31T', 702243, 5211133, 47.0228, 5.66139, 220),
('39503', 'Sapois', '31T', 724715, 5181711, 46.7511, 5.94222, 620),
('39504', 'Sarrogna', '31T', 700362, 5149394, 46.4683, 5.60973, 527),
('39505', 'Saugeot', '31T', 716533, 5164660, 46.6006, 5.82722, 723),
('39506', 'Savigna', '31T', 697798, 5146189, 46.4403, 5.57501, 400),
('39507', 'Séligney', '31T', 693139, 5201252, 46.9367, 5.53751, 220),
('39508', 'Sellières', '31T', 695463, 5189061, 46.8264, 5.56278, 230),
('39509', 'Senaud', '31T', 682778, 5140714, 46.3953, 5.37751, 440),
('39510', 'Septmoncel', '31T', 723961, 5139434, 46.3714, 5.91195, 940),
('39511', 'Sergenaux', '31T', 687101, 5195374, 46.8856, 5.45584, 216),
('39512', 'Sergenon', '31T', 686940, 5197131, 46.9014, 5.45445, 217),
('39513', 'Sermange', '31T', 700713, 5230055, 47.1933, 5.64972, 250),
('39514', 'Serre-les-Moulières', '31T', 698119, 5231420, 47.2064, 5.61611, 270),
('39517', 'Sirod', '31T', 728019, 5179734, 46.7322, 5.98444, 629),
('39518', 'Songeson', '31T', 715585, 5170313, 46.6517, 5.8175, 610),
('39519', 'Soucia', '31T', 710487, 5157833, 46.5411, 5.74527, 600),
('39520', 'Souvans', '31T', 694144, 5207403, 46.9917, 5.55333, 210),
('39522', 'Supt', '31T', 725195, 5192671, 46.8494, 5.95389, 650),
('39523', 'Syam', '31T', 725483, 5175960, 46.6992, 5.94945, 570),
('39525', 'Tassenières', '31T', 691353, 5199526, 46.9217, 5.51334, 240),
('39526', 'Tavaux', '31T', 682617, 5211734, 47.0339, 5.40362, 193),
('39527', 'Taxenne', '31T', 702975, 5233501, 47.2236, 5.68111, 243),
('39528', 'Thervay', '31T', 697897, 5236141, 47.2489, 5.61527, 200),
('39529', 'Thésy', '31T', 722437, 5199522, 46.9119, 5.92111, 700),
('39530', 'Thoirette', '31T', 694990, 5127129, 46.2697, 5.53056, 300),
('39531', 'Thoiria', '31T', 709580, 5156936, 46.5333, 5.73305, 567),
('39532', 'Thoissia', '31T', 683861, 5143743, 46.4222, 5.39277, 470),
('39533', 'Toulouse-le-Château', '31T', 697111, 5188589, 46.8217, 5.58416, 280),
('39534', 'La Tour-du-Meix', '31T', 704159, 5155824, 46.525, 5.66195, 474),
('39535', 'Tourmont', '31T', 704257, 5193000, 46.8592, 5.67972, 266),
('39537', 'Trenal', '31T', 688602, 5168449, 46.6431, 5.46445, 210),
('39538', 'Uxelles', '31T', 713569, 5164740, 46.6022, 5.78861, 598),
('39539', 'Vadans', '31T', 705500, 5201232, 46.9328, 5.69972, 250),
('39540', 'Valempoulières', '31T', 718282, 5189757, 46.8256, 5.86194, 665),
('39542', 'Valfin-sur-Valouse', '31T', 693444, 5138016, 46.3681, 5.515, 370),
('39543', 'Vannoz', '31T', 722526, 5184009, 46.7725, 5.91472, 596),
('39544', 'Varessia', '31T', 694684, 5159312, 46.5592, 5.54, 590),
('39545', 'Le Vaudioux', '31T', 723277, 5175229, 46.6933, 5.92027, 655),
('39546', 'Vaudrey', '31T', 699227, 5205902, 46.9767, 5.61945, 220),
('39547', 'Vaux-lès-Saint-Claude', '31T', 710322, 5137340, 46.3569, 5.73388, 340),
('39548', 'Vaux-sur-Poligny', '31T', 707416, 5189308, 46.825, 5.71944, 400),
('39549', 'Vercia', '31T', 688236, 5162445, 46.5892, 5.45723, 240),
('39550', 'Verges', '31T', 705104, 5170039, 46.6525, 5.68055, 517),
('39551', 'Véria', '31T', 686008, 5146898, 46.45, 5.42195, 420),
('39552', 'Vernantois', '31T', 697034, 5166989, 46.6275, 5.57389, 342),
('39553', 'Le Vernois', '31T', 698038, 5178485, 46.7306, 5.59194, 290),
('39554', 'Vers-en-Montagne', '31T', 722183, 5188694, 46.8147, 5.9125, 608),
('39555', 'Vers-sous-Sellières', '31T', 693272, 5188588, 46.8228, 5.53388, 220),
('39556', 'Vertamboz', '31T', 709703, 5163832, 46.5953, 5.73777, 490),
('39557', 'Vescles', '31T', 700869, 5137268, 46.3592, 5.61111, 556),
('39558', 'Vevy', '31T', 702530, 5171281, 46.6644, 5.6475, 517),
('39559', 'La Vieille-Loye', '31T', 700033, 5213376, 47.0436, 5.63334, 241),
('39560', 'Villard-Saint-Sauveur', '31T', 719883, 5138018, 46.36, 5.85833, 560),
('39561', 'Villards-d''Héria', '31T', 710052, 5143913, 46.4161, 5.73333, 640),
('39562', 'Villard-sur-Bienne', '31T', 722281, 5150838, 46.4744, 5.89556, 710),
('39564', 'Villechantria', '31T', 687636, 5138421, 46.3733, 5.43972, 360),
('39565', 'Villeneuve-d''Aval', '31T', 708825, 5205427, 46.9694, 5.74528, 260),
('39566', 'Villeneuve-lès-Charnod', '31T', 690627, 5134405, 46.3364, 5.47694, 514),
('39567', 'Villeneuve-sous-Pymont', '31T', 694959, 5173873, 46.69, 5.54973, 290),
('39568', 'Villerserine', '31T', 701260, 5192621, 46.8567, 5.64027, 256),
('39569', 'Villers-Farlay', '31T', 709016, 5208431, 46.9964, 5.74917, 240),
('39570', 'Villers-les-Bois', '31T', 696250, 5198665, 46.9125, 5.57722, 227),
('39571', 'Villers-Robert', '31T', 691588, 5202747, 46.9506, 5.51778, 214),
('39572', 'Villette-lès-Arbois', '31T', 709482, 5199980, 46.9203, 5.75139, 259),
('39573', 'Villette-lès-Dole', '31T', 689580, 5213311, 47.0461, 5.49584, 200),
('39574', 'Villevieux', '31T', 688066, 5178783, 46.7361, 5.46167, 203),
('39575', 'Le Villey', '31T', 691059, 5190834, 46.8436, 5.50584, 210),
('39576', 'Vincelles', '31T', 689819, 5163575, 46.5989, 5.47833, 230),
('39577', 'Vincent', '31T', 689997, 5184189, 46.7842, 5.48916, 218),
('39579', 'Viry', '31T', 710840, 5131024, 46.3, 5.73777, 780),
('39581', 'Vitreux', '31T', 703434, 5236081, 47.2467, 5.68834, 210),
('39582', 'Voiteur', '31T', 699355, 5181063, 46.7533, 5.61028, 266),
('39583', 'Vosbles', '31T', 694181, 5135012, 46.3408, 5.52333, 530),
('39584', 'Vriange', '31T', 695609, 5228370, 47.1797, 5.58167, 240),
('39585', 'Vulvoz', '31T', 714562, 5134213, 46.3275, 5.7875, 575),
('39586', 'Aresches', '31T', 721596, 5198223, 46.9006, 5.90944, 700),
('40001', 'Aire-sur-l''Adour', '30T', 720642, 4842444, 43.7022, -0.261672, 80),
('40002', 'Amou', '30T', 682160, 4829181, 43.5933, -0.743331, 47),
('40003', 'Angoumé', '30T', 650386, 4839382, 43.6922, -1.13389, 45),
('40004', 'Angresse', '30T', 631113, 4835488, 43.6608, -1.37389, 10),
('40005', 'Arboucave', '30T', 707068, 4832220, 43.6142, -0.433885, 92),
('40006', 'Arengosse', '30T', 676995, 4874736, 44.0044, -0.792222, 73),
('40007', 'Argelos', '30T', 691492, 4828515, 43.585, -0.628053, 135),
('40008', 'Argelouse', '30T', 687908, 4915366, 44.3672, -0.641672, 61),
('40009', 'Arjuzanx', '30T', 671757, 4875648, 44.0139, -0.857218, 60),
('40011', 'Arsague', '30T', 678001, 4827773, 43.5817, -0.795279, 70),
('40012', 'Artassenx', '30T', 709092, 4857792, 43.8436, -0.398886, 95),
('40013', 'Arthez-d''Armagnac', '30T', 720372, 4864118, 43.8972, -0.256106, 95),
('40014', 'Arue', '30T', 712050, 4881945, 44.06, -0.352494, 86),
('40015', 'Arx', '31T', 265912, 4888004, 44.1078, 0.0749957, 144),
('40016', 'Aubagnan', '30T', 702488, 4838225, 43.6694, -0.488338, 130),
('40017', 'Audignon', '30T', 692931, 4843964, 43.7236, -0.604723, 50),
('40018', 'Audon', '30T', 675363, 4852154, 43.8017, -0.819995, 40),
('40019', 'Aureilhan', '30T', 643563, 4897663, 44.2181, -1.20277, 12),
('40020', 'Aurice', '30T', 692657, 4854208, 43.8158, -0.604445, 74),
('40021', 'Azur', '30T', 636620, 4851061, 43.8, -1.30166, 20),
('40022', 'Bahus-Soubiran', '30T', 713307, 4839210, 43.6753, -0.353887, 113),
('40023', 'Baigts', '30T', 677933, 4839596, 43.6881, -0.792228, 95),
('40024', 'Banos', '30T', 691673, 4845657, 43.7392, -0.619725, 110),
('40025', 'Bascons', '30T', 707646, 4855430, 43.8228, -0.417773, 85),
('40026', 'Bas-Mauco', '30T', 696335, 4850795, 43.7842, -0.560002, 55),
('40027', 'Bassercles', '30T', 692131, 4825013, 43.5533, -0.621386, 150),
('40028', 'Bastennes', '30T', 678733, 4835665, 43.6525, -0.783611, 80),
('40029', 'Bats', '30T', 704984, 4837252, 43.66, -0.457777, 130),
('40030', 'Baudignan', '31T', 264002, 4886250, 44.0914, 0.0519453, 150),
('40031', 'Bégaar', '30T', 673152, 4854597, 43.8242, -0.846671, 15),
('40032', 'Belhade', '30T', 684792, 4916697, 44.38, -0.680274, 57),
('40033', 'Bélis', '30T', 703294, 4882040, 44.0633, -0.46167, 85),
('40034', 'Bélus', '30T', 652384, 4828376, 43.5928, -1.11222, 120),
('40035', 'Bénesse-lès-Dax', '30T', 658596, 4834139, 43.6433, -1.03362, 50),
('40036', 'Bénesse-Maremne', '30T', 631999, 4832635, 43.635, -1.36361, 17),
('40037', 'Benquet', '30T', 701275, 4856841, 43.8372, -0.496394, 70),
('40038', 'Bergouey', '30T', 683899, 4837750, 43.67, -0.718889, 122),
('40039', 'Betbezer-d''Armagnac', '30T', 727093, 4873272, 43.9775, -0.168615, 127),
('40040', 'Beylongue', '30T', 674355, 4865805, 43.9247, -0.82806, 92),
('40041', 'Beyries', '30T', 690962, 4827419, 43.5753, -0.634999, 130),
('40042', 'Biarrotte', '30T', 639317, 4824543, 43.5608, -1.27501, 30),
('40043', 'Bias', '30T', 642562, 4889554, 44.1453, -1.2175, 40),
('40044', 'Biaudos', '30T', 636869, 4823536, 43.5522, -1.30556, 50),
('40046', 'Biscarrosse', '30T', 645986, 4917380, 44.395, -1.16694, 26),
('40047', 'Bonnegarde', '30T', 685506, 4826648, 43.5697, -0.702779, 90),
('40048', 'Boos', '30T', 661331, 4861863, 43.8922, -0.991391, 75),
('40049', 'Bordères-et-Lamensans', '30T', 712311, 4850081, 43.7733, -0.36194, 65),
('40050', 'Bostens', '30T', 711761, 4872176, 43.9722, -0.360002, 98),
('40051', 'Bougue', '30T', 709443, 4862961, 43.89, -0.392497, 50),
('40052', 'Bourdalat', '30T', 724534, 4857925, 43.8403, -0.206949, 100),
('40053', 'Bourriot-Bergonce', '30T', 720172, 4889501, 44.1256, -0.24805, 100),
('40054', 'Brassempouy', '30T', 686047, 4833857, 43.6344, -0.693607, 120),
('40055', 'Bretagne-de-Marsan', '30T', 704386, 4858170, 43.8483, -0.457227, 80),
('40056', 'Brocas', '30T', 697527, 4879796, 44.0447, -0.534448, 70),
('40057', 'Buanes', '30T', 707744, 4842926, 43.7103, -0.421395, 130),
('40058', 'Cachen', '30T', 705635, 4882668, 44.0683, -0.432225, 80),
('40059', 'Cagnotte', '30T', 655984, 4828861, 43.5964, -1.0675, 40),
('40060', 'Callen', '30T', 701357, 4908138, 44.2986, -0.47583, 89),
('40061', 'Campagne', '30T', 689460, 4859704, 43.8661, -0.642216, 60),
('40062', 'Campet-et-Lamolère', '30T', 692344, 4865778, 43.92, -0.604166, 44),
('40063', 'Candresse', '30T', 662700, 4842356, 43.7164, -0.980282, 10),
('40064', 'Canenx-et-Réaut', '30T', 705005, 4875700, 44.0058, -0.442783, 76),
('40065', 'Capbreton', '30T', 626530, 4833795, 43.6464, -1.43111, 5),
('40066', 'Carcarès-Sainte-Croix', '30T', 677653, 4856816, 43.8431, -0.79, 34),
('40067', 'Carcen-Ponson', '30T', 676172, 4861253, 43.8833, -0.806947, 44),
('40068', 'Cassen', '30T', 672183, 4847996, 43.765, -0.860834, 59),
('40069', 'Castaignos-Souslens', '30T', 689903, 4829149, 43.5911, -0.647497, 140),
('40070', 'Castandet', '30T', 712933, 4854424, 43.8122, -0.352494, 97),
('40071', 'Castelnau-Chalosse', '30T', 673759, 4837293, 43.6683, -0.844724, 83),
('40072', 'Castelnau-Tursan', '30T', 709132, 4837257, 43.6589, -0.406383, 150),
('40073', 'Castelner', '30T', 695291, 4825228, 43.5544, -0.582221, 200),
('40074', 'Castel-Sarrazin', '30T', 678318, 4831054, 43.6111, -0.790275, 34),
('40075', 'Castets', '30T', 648834, 4860707, 43.8844, -1.14722, 50),
('40076', 'Cauna', '30T', 689946, 4850486, 43.7831, -0.639445, 40),
('40077', 'Cauneille', '30T', 655844, 4823332, 43.5467, -1.07083, 50),
('40078', 'Caupenne', '30T', 681772, 4839328, 43.6847, -0.74472, 53),
('40079', 'Cazalis', '30T', 688738, 4833068, 43.6267, -0.66055, 117),
('40080', 'Cazères-sur-l''Adour', '30T', 716042, 4848873, 43.7614, -0.316116, 73),
('40081', 'Cère', '30T', 697830, 4874154, 43.9939, -0.532776, 60),
('40082', 'Classun', '30T', 708545, 4843106, 43.7117, -0.411393, 110),
('40083', 'Clèdes', '30T', 711571, 4833133, 43.6211, -0.377781, 160),
('40084', 'Clermont', '30T', 667889, 4835446, 43.6531, -0.918061, 50),
('40085', 'Commensacq', '30T', 673891, 4897717, 44.2119, -0.823335, 72),
('40086', 'Coudures', '30T', 699996, 4840621, 43.6917, -0.518331, 100),
('40087', 'Créon-d''Armagnac', '30T', 732105, 4875392, 43.995, -0.105276, 155),
('40088', 'Dax', '30T', 656682, 4841193, 43.7072, -1.05528, 13),
('40089', 'Doazit', '30T', 689921, 4840358, 43.6919, -0.643334, 110),
('40090', 'Donzacq', '30T', 677127, 4836209, 43.6578, -0.803334, 90),
('40091', 'Duhort-Bachen', '30T', 715726, 4844816, 43.725, -0.321666, 93),
('40092', 'Dumes', '30T', 694840, 4842228, 43.7075, -0.581672, 100),
('40093', 'Escalans', '31T', 262911, 4873839, 43.9794, 0.0438923, 133),
('40094', 'Escource', '30T', 657176, 4891924, 44.1636, -1.03417, 50),
('40095', 'Estibeaux', '30T', 668997, 4829762, 43.6017, -0.906107, 90),
('40096', 'Estigarde', '30T', 731443, 4879014, 44.0278, -0.111941, 143),
('40097', 'Eugénie-les-Bains', '30T', 711242, 4841430, 43.6958, -0.378607, 100),
('40098', 'Eyres-Moncube', '30T', 697684, 4843794, 43.7208, -0.545829, 50),
('40099', 'Fargues', '30T', 705051, 4844572, 43.7258, -0.454161, 110),
('40100', 'Le Frêche', '30T', 721579, 4868081, 43.9325, -0.239447, 100),
('40101', 'Gaas', '30T', 658581, 4830990, 43.615, -1.03473, 80),
('40102', 'Gabarret', '31T', 260330, 4874642, 43.9858, 0.0113921, 153),
('40103', 'Gaillères', '30T', 710820, 4868811, 43.9422, -0.373056, 90),
('40104', 'Gamarde-les-Bains', '30T', 671378, 4844518, 43.7339, -0.871938, 79),
('40105', 'Garein', '30T', 688287, 4879680, 44.0461, -0.649726, 82),
('40106', 'Garrey', '30T', 668576, 4837562, 43.6719, -0.908886, 40),
('40107', 'Garrosse', '30T', 666219, 4875228, 44.0114, -0.926394, 64),
('40108', 'Gastes', '30T', 647822, 4909611, 44.3247, -1.1461, 24),
('40109', 'Gaujacq', '30T', 682348, 4834620, 43.6422, -0.73917, 77),
('40110', 'Geaune', '30T', 711614, 4835327, 43.6408, -0.37639, 110),
('40111', 'Geloux', '30T', 689555, 4872738, 43.9833, -0.636394, 56),
('40112', 'Gibret', '30T', 675737, 4839630, 43.6889, -0.819445, 70),
('40113', 'Goos', '30T', 669058, 4844181, 43.7314, -0.900833, 60),
('40114', 'Gourbera', '30T', 657186, 4852102, 43.8053, -1.04584, 68),
('40115', 'Gousse', '30T', 668672, 4848802, 43.7731, -0.904172, 10),
('40116', 'Gouts', '30T', 677074, 4850872, 43.7897, -0.799164, 20),
('40117', 'Grenade-sur-l''Adour', '30T', 707256, 4849983, 43.7739, -0.424725, 55),
('40118', 'Habas', '30T', 667152, 4826382, 43.5717, -0.929995, 104),
('40119', 'Hagetmau', '30T', 694089, 4836463, 43.6558, -0.593061, 110),
('40120', 'Hastingues', '30T', 649482, 4821675, 43.5331, -1.15, 30),
('40121', 'Hauriet', '30T', 685671, 4844962, 43.7344, -0.69444, 80),
('40122', 'Haut-Mauco', '30T', 696552, 4855556, 43.8269, -0.555561, 80),
('40123', 'Herm', '30T', 649359, 4852230, 43.8081, -1.14306, 60),
('40124', 'Herré', '30T', 738525, 4876702, 44.0047, -0.0247247, 149),
('40125', 'Heugas', '30T', 654828, 4834236, 43.645, -1.08028, 50),
('40126', 'Hinx', '30T', 666920, 4841040, 43.7036, -0.928337, 40),
('40127', 'Hontanx', '30T', 719523, 4855997, 43.8244, -0.270003, 90),
('40128', 'Horsarrieu', '30T', 693636, 4839723, 43.6853, -0.597503, 126),
('40129', 'Josse', '30T', 643165, 4833544, 43.6411, -1.225, 10),
('40130', 'Labastide-Chalosse', '30T', 692875, 4831920, 43.6153, -0.609724, 110),
('40131', 'Labastide-d''Armagnac', '30T', 725938, 4872491, 43.9708, -0.18333, 90),
('40132', 'Labatut', '30T', 662898, 4824086, 43.5519, -0.983333, 50),
('40133', 'Labenne', '30T', 627130, 4828128, 43.5953, -1.425, 13),
('40134', 'Labouheyre', '30T', 666368, 4897522, 44.2119, -0.917502, 73),
('40135', 'Labrit', '30T', 696478, 4886589, 44.1061, -0.545003, 81),
('40136', 'Lacajunte', '30T', 707965, 4830056, 43.5944, -0.423611, 150),
('40137', 'Lacquy', '30T', 718810, 4870151, 43.9519, -0.273054, 90),
('40138', 'Lacrabe', '30T', 694378, 4831933, 43.615, -0.591109, 110),
('40139', 'Laglorieuse', '30T', 708581, 4860524, 43.8683, -0.40417, 80),
('40140', 'Lagrange', '30T', 732704, 4872942, 43.9728, -0.0988891, 100),
('40141', 'Lahosse', '30T', 677962, 4841881, 43.7086, -0.791113, 91),
('40142', 'Laluque', '30T', 661391, 4857574, 43.8536, -0.991941, 60),
('40143', 'Lamothe', '30T', 688554, 4851465, 43.7922, -0.656385, 50),
('40144', 'Larbey', '30T', 683928, 4841579, 43.7044, -0.717223, 101),
('40145', 'Larrivière-Saint-Savin', '30T', 707161, 4849455, 43.7692, -0.426108, 55),
('40146', 'Latrille', '30T', 718939, 4834235, 43.6289, -0.286115, 175),
('40147', 'Laurède', '30T', 678044, 4847224, 43.7567, -0.788327, 90),
('40148', 'Lauret', '30T', 714551, 4826958, 43.5647, -0.343332, 200),
('40149', 'Lencouacq', '30T', 707678, 4886377, 44.1011, -0.405281, 90),
('40150', 'Léon', '30T', 636447, 4859453, 43.8756, -1.30167, 20),
('40151', 'Lesgor', '30T', 668864, 4858006, 43.8558, -0.898885, 40),
('40152', 'Lesperon', '30T', 653034, 4870248, 43.9694, -1.09222, 70),
('40153', 'Le Leuy', '30T', 688597, 4854678, 43.8211, -0.65472, 70),
('40154', 'Lévignacq', '30T', 646922, 4874401, 44.0081, -1.16723, 30),
('40155', 'Linxe', '30T', 640735, 4864666, 43.9217, -1.24695, 35),
('40156', 'Liposthey', '30T', 669146, 4909449, 44.3186, -0.878895, 65),
('40157', 'Lit-et-Mixe', '30T', 639536, 4877080, 44.0336, -1.25861, 13),
('40158', 'Losse', '30T', 731909, 4887927, 44.1078, -0.102222, 140),
('40159', 'Louer', '30T', 669766, 4847163, 43.7581, -0.891106, 38),
('40160', 'Lourquen', '30T', 678158, 4844603, 43.7331, -0.787781, 70),
('40161', 'Lubbon', '30T', 737966, 4887865, 44.1053, -0.0266657, 145),
('40162', 'Lucbardez-et-Bargues', '30T', 708285, 4872066, 43.9722, -0.403336, 78),
('40163', 'Lüe', '30T', 661037, 4899427, 44.2303, -0.983606, 57),
('40164', 'Retjons', '30T', 716706, 4886637, 44.1008, -0.292501, 90),
('40165', 'Luglon', '30T', 682768, 4883539, 44.0822, -0.717227, 90),
('40166', 'Lussagnet', '30T', 722280, 4851116, 43.7797, -0.23778, 120),
('40167', 'Luxey', '30T', 698107, 4904117, 44.2633, -0.518058, 87),
('40168', 'Magescq', '30T', 643524, 4849169, 43.7817, -1.21639, 25),
('40169', 'Maillas', '30T', 723998, 4903191, 44.2475, -0.194448, 111),
('40170', 'Maillères', '30T', 705101, 4878359, 44.0297, -0.440557, 80),
('40171', 'Mano', '30T', 685488, 4921009, 44.4186, -0.670005, 63),
('40172', 'Mant', '30T', 701197, 4828984, 43.5867, -0.507776, 130),
('40173', 'Marpaps', '30T', 687000, 4826999, 43.5725, -0.684172, 120),
('40174', 'Mauries', '30T', 715301, 4832974, 43.6186, -0.331663, 210),
('40175', 'Maurrin', '30T', 711562, 4856017, 43.8269, -0.368893, 100),
('40176', 'Mauvezin-d''Armagnac', '30T', 731152, 4870755, 43.9536, -0.119165, 90),
('40177', 'Maylis', '30T', 687034, 4841048, 43.6989, -0.678889, 110),
('40178', 'Mazerolles', '30T', 705989, 4861247, 43.8756, -0.436117, 68),
('40179', 'Mées', '30T', 652285, 4840567, 43.7025, -1.11001, 10),
('40180', 'Meilhan', '30T', 684240, 4859434, 43.865, -0.707219, 61),
('40181', 'Messanges', '30T', 630464, 4852635, 43.8153, -1.37778, 5),
('40182', 'Mézos', '30T', 646911, 4881932, 44.0758, -1.16527, 23),
('40183', 'Mimbaste', '30T', 663440, 4834996, 43.65, -0.973333, 18),
('40184', 'Mimizan', '30T', 641495, 4895735, 44.2011, -1.22917, 20),
('40185', 'Miramont-Sensacq', '30T', 715831, 4830459, 43.5958, -0.326105, 220),
('40186', 'Misson', '30T', 664503, 4828200, 43.5886, -0.962227, 90),
('40187', 'Moliets-et-Maa', '30T', 632019, 4856493, 43.8497, -1.3575, 20),
('40188', 'Momuy', '30T', 690656, 4831856, 43.6153, -0.637223, 100),
('40189', 'Monget', '30T', 700433, 4826738, 43.5667, -0.518061, 131),
('40190', 'Monségur', '30T', 698602, 4830945, 43.605, -0.539172, 120),
('40191', 'Montaut', '30T', 688628, 4845693, 43.7403, -0.657495, 110),
('40192', 'Mont-de-Marsan', '30T', 700715, 4862814, 43.8911, -0.501109, 52),
('40193', 'Montégut', '30T', 725084, 4862145, 43.8781, -0.198337, 70),
('40194', 'Montfort-en-Chalosse', '30T', 674215, 4842152, 43.7119, -0.837501, 100),
('40195', 'Montgaillard', '30T', 702686, 4846476, 43.7436, -0.482779, 110),
('40196', 'Montsoué', '30T', 700674, 4844902, 43.73, -0.50833, 100);
INSERT INTO `ods_communes` (`oc_code_insee`, `oc_nom`, `oc_secteur`, `oc_x_utm`, `oc_y_utm`, `oc_latitude`, `oc_longitude`, `oc_altitude`) VALUES
('40197', 'Morcenx', '30T', 667140, 4877598, 44.0325, -0.914164, 75),
('40198', 'Morganx', '30T', 696281, 4831278, 43.6086, -0.567784, 110),
('40199', 'Mouscardès', '30T', 671159, 4827656, 43.5822, -0.880003, 100),
('40200', 'Moustey', '30T', 678437, 4914235, 44.3594, -0.760832, 50),
('40201', 'Mugron', '30T', 680961, 4846901, 43.7531, -0.752228, 89),
('40202', 'Narrosse', '30T', 660517, 4840976, 43.7044, -1.00778, 10),
('40203', 'Nassiet', '30T', 687450, 4830192, 43.6011, -0.677499, 120),
('40204', 'Nerbis', '30T', 682362, 4847248, 43.7558, -0.734721, 90),
('40205', 'Nousse', '30T', 675225, 4842920, 43.7186, -0.824723, 70),
('40206', 'Oeyregave', '30T', 653651, 4822016, 43.5353, -1.09833, 10),
('40207', 'Oeyreluy', '30T', 654798, 4837476, 43.6742, -1.07972, 14),
('40208', 'Onard', '30T', 674261, 4849810, 43.7808, -0.834446, 15),
('40209', 'Ondres', '30T', 625315, 4824421, 43.5622, -1.44834, 30),
('40210', 'Onesse-et-Laharie', '30T', 654663, 4880628, 44.0625, -1.06889, 39),
('40211', 'Orist', '30T', 647218, 4833755, 43.6422, -1.17472, 30),
('40212', 'Orthevielle', '30T', 649723, 4823934, 43.5533, -1.14639, 10),
('40213', 'Orx', '30T', 631797, 4829206, 43.6042, -1.36694, 22),
('40214', 'Ossages', '30T', 671155, 4825187, 43.56, -0.880832, 140),
('40215', 'Ousse-Suzan', '30T', 679653, 4869590, 43.9575, -0.760834, 62),
('40216', 'Ozourt', '30T', 671240, 4836796, 43.6644, -0.876106, 30),
('40217', 'Parentis-en-Born', '30T', 653601, 4912616, 44.3506, -1.07278, 33),
('40218', 'Parleboscq', '31T', 259769, 4869627, 43.9406, 0.00667303, 160),
('40219', 'Payros-Cazautets', '30T', 710571, 4833565, 43.6253, -0.389994, 151),
('40220', 'Pécorade', '30T', 711776, 4837309, 43.6586, -0.373606, 170),
('40221', 'Perquie', '30T', 718278, 4861917, 43.8781, -0.283051, 90),
('40222', 'Pey', '30T', 645115, 4832537, 43.6317, -1.20111, 30),
('40223', 'Peyre', '30T', 698066, 4827069, 43.5703, -0.547224, 130),
('40224', 'Peyrehorade', '30T', 653151, 4823239, 43.5464, -1.10417, 10),
('40225', 'Philondenx', '30T', 706319, 4826639, 43.5642, -0.445284, 218),
('40226', 'Pimbo', '30T', 711862, 4828201, 43.5767, -0.376108, 190),
('40227', 'Pissos', '30T', 677172, 4908612, 44.3092, -0.778606, 55),
('40228', 'Pomarez', '30T', 675099, 4833192, 43.6311, -0.829444, 49),
('40229', 'Pontenx-les-Forges', '30T', 650111, 4900588, 44.2431, -1.12, 26),
('40230', 'Pontonx-sur-l''Adour', '30T', 666885, 4850517, 43.7889, -0.925828, 25),
('40231', 'Port-de-Lanne', '30T', 646228, 4825677, 43.5697, -1.18917, 27),
('40232', 'Poudenx', '30T', 695160, 4828188, 43.5811, -0.582776, 130),
('40233', 'Pouillon', '30T', 661698, 4830076, 43.6061, -0.996393, 40),
('40234', 'Pouydesseaux', '30T', 714506, 4872141, 43.9711, -0.325831, 120),
('40235', 'Poyanne', '30T', 675803, 4847319, 43.7581, -0.816114, 86),
('40236', 'Poyartin', '30T', 671958, 4839377, 43.6875, -0.866383, 40),
('40237', 'Préchacq-les-Bains', '30T', 666925, 4846226, 43.7503, -0.926666, 28),
('40238', 'Pujo-le-Plan', '30T', 713984, 4860666, 43.8681, -0.336943, 70),
('40239', 'Puyol-Cazalet', '30T', 709432, 4831244, 43.6047, -0.404996, 150),
('40240', 'Renung', '30T', 712803, 4847286, 43.7481, -0.35694, 128),
('40242', 'Rimbez-et-Baudiets', '31T', 264154, 4881795, 44.0514, 0.0558298, 145),
('40243', 'Rion-des-Landes', '30T', 666854, 4866847, 43.9358, -0.921111, 70),
('40244', 'Rivière-Saas-et-Gourby', '30T', 648825, 4838081, 43.6808, -1.15361, 16),
('40245', 'Roquefort', '30T', 714723, 4879190, 44.0344, -0.320275, 70),
('40246', 'Sabres', '30T', 680787, 4890863, 44.1486, -0.739438, 75),
('40247', 'Saint-Agnet', '30T', 720249, 4831930, 43.6078, -0.270833, 185),
('40248', 'Saint-André-de-Seignanx', '30T', 633036, 4824385, 43.5606, -1.35278, 51),
('40249', 'Saint-Aubin', '30T', 685583, 4842459, 43.7119, -0.696395, 60),
('40250', 'Saint-Avit', '30T', 705069, 4868599, 43.9419, -0.444727, 66),
('40251', 'Saint-Barthélemy', '30T', 634907, 4819515, 43.5164, -1.33084, 18),
('40252', 'Sainte-Colombe', '30T', 696936, 4839511, 43.6825, -0.556673, 80),
('40253', 'Saint-Cricq-Chalosse', '30T', 686766, 4836193, 43.6553, -0.683894, 120),
('40254', 'Saint-Cricq-du-Gave', '30T', 660607, 4822240, 43.5358, -1.01222, 20),
('40255', 'Saint-Cricq-Villeneuve', '30T', 712629, 4863185, 43.8911, -0.352784, 55),
('40256', 'Saint-Étienne-d''Orthe', '30T', 647052, 4828041, 43.5908, -1.17833, 40),
('40257', 'Sainte-Eulalie-en-Born', '30T', 645092, 4903778, 44.2728, -1.18195, 23),
('40258', 'Sainte-Foy', '30T', 714026, 4868357, 43.9372, -0.333332, 84),
('40259', 'Saint-Gein', '30T', 717091, 4857215, 43.8361, -0.29972, 88),
('40260', 'Saint-Geours-d''Auribat', '30T', 674170, 4847307, 43.7583, -0.836389, 60),
('40261', 'Saint-Geours-de-Maremne', '30T', 642626, 4838841, 43.6889, -1.23028, 36),
('40262', 'Saint-Gor', '30T', 721130, 4881502, 44.0533, -0.239441, 114),
('40263', 'Saint-Jean-de-Lier', '30T', 670746, 4850830, 43.7908, -0.877773, 12),
('40264', 'Saint-Jean-de-Marsacq', '30T', 640554, 4831945, 43.6272, -1.25778, 35),
('40265', 'Saint-Julien-d''Armagnac', '30T', 730411, 4874097, 43.9839, -0.126939, 130),
('40266', 'Saint-Julien-en-Born', '30T', 642162, 4880284, 44.0619, -1.225, 20),
('40267', 'Saint-Justin', '30T', 722261, 4873694, 43.9828, -0.228613, 90),
('40268', 'Saint-Laurent-de-Gosse', '30T', 639962, 4821594, 43.5342, -1.26778, 40),
('40269', 'Saint-Lon-les-Mines', '30T', 651185, 4830788, 43.6147, -1.12639, 100),
('40270', 'Saint-Loubouer', '30T', 707903, 4839256, 43.6772, -0.420839, 150),
('40271', 'Sainte-Marie-de-Gosse', '30T', 642174, 4824263, 43.5578, -1.23972, 59),
('40272', 'Saint-Martin-de-Hinx', '30T', 640053, 4826935, 43.5822, -1.26528, 40),
('40273', 'Saint-Martin-de-Seignanx', '30T', 630330, 4822727, 43.5461, -1.38667, 40),
('40274', 'Saint-Martin-d''Oney', '30T', 689633, 4866904, 43.9308, -0.637504, 50),
('40275', 'Saint-Maurice-sur-Adour', '30T', 703910, 4851115, 43.785, -0.46583, 50),
('40276', 'Saint-Michel-Escalus', '30T', 639576, 4861463, 43.8931, -1.26222, 23),
('40277', 'Saint-Pandelon', '30T', 657937, 4837395, 43.6728, -1.04083, 50),
('40278', 'Saint-Paul-en-Born', '30T', 647857, 4898221, 44.2222, -1.14889, 13),
('40279', 'Saint-Paul-lès-Dax', '30T', 657036, 4843301, 43.7261, -1.05028, 25),
('40280', 'Saint-Perdon', '30T', 693654, 4859887, 43.8667, -0.590002, 80),
('40281', 'Saint-Pierre-du-Mont', '30T', 699177, 4861965, 43.8839, -0.520556, 73),
('40282', 'Saint-Sever', '30T', 695584, 4848179, 43.7608, -0.570281, 90),
('40283', 'Saint-Vincent-de-Paul', '30T', 661106, 4845311, 43.7433, -0.999172, 14),
('40284', 'Saint-Vincent-de-Tyrosse', '30T', 636489, 4835565, 43.6606, -1.30723, 26),
('40285', 'Saint-Yaguen', '30T', 681595, 4862202, 43.8906, -0.739167, 37),
('40286', 'Samadet', '30T', 702853, 4835056, 43.6408, -0.485006, 140),
('40287', 'Sanguinet', '30T', 653165, 4927393, 44.4836, -1.07389, 24),
('40288', 'Sarbazan', '30T', 715690, 4877554, 44.0194, -0.308886, 97),
('40289', 'Sarraziet', '30T', 702416, 4842083, 43.7042, -0.487782, 120),
('40290', 'Sarron', '30T', 720171, 4830198, 43.5922, -0.272503, 195),
('40291', 'Saubion', '30T', 633104, 4836793, 43.6722, -1.34889, 21),
('40292', 'Saubrigues', '30T', 636083, 4830217, 43.6125, -1.31361, 40),
('40293', 'Saubusse', '30T', 646060, 4835458, 43.6578, -1.18861, 10),
('40294', 'Saugnac-et-Cambran', '30T', 661789, 4837456, 43.6725, -0.993056, 10),
('40295', 'Saugnacq-et-Muret', '30T', 676692, 4918943, 44.4022, -0.781114, 41),
('40296', 'Seignosse', '30T', 631116, 4838760, 43.6903, -1.37306, 15),
('40297', 'Le Sen', '30T', 699971, 4888825, 44.1253, -0.500551, 100),
('40298', 'Serres-Gaston', '30T', 700947, 4836573, 43.655, -0.50805, 90),
('40299', 'Serreslous-et-Arribans', '30T', 689806, 4837298, 43.6644, -0.645837, 132),
('40300', 'Seyresse', '30T', 656069, 4838679, 43.6847, -1.06362, 10),
('40301', 'Siest', '30T', 651074, 4834736, 43.6503, -1.12666, 17),
('40302', 'Sindères', '30T', 661588, 4876935, 44.0278, -0.98361, 78),
('40303', 'Solférino', '30T', 668294, 4889946, 44.1433, -0.895836, 81),
('40304', 'Soorts-Hossegor', '30T', 629378, 4836010, 43.6658, -1.39528, 10),
('40305', 'Sorbets', '30T', 715487, 4834864, 43.6356, -0.328607, 170),
('40306', 'Sorde-l''Abbaye', '30T', 657116, 4821726, 43.5319, -1.05556, 10),
('40307', 'Sore', '30T', 692922, 4910633, 44.3233, -0.580552, 75),
('40308', 'Sort-en-Chalosse', '30T', 666702, 4839028, 43.6856, -0.931664, 20),
('40309', 'Souprosse', '30T', 684429, 4851010, 43.7892, -0.707772, 40),
('40310', 'Soustons', '30T', 634572, 4846174, 43.7564, -1.32834, 10),
('40311', 'Taller', '30T', 654952, 4859735, 43.8744, -1.07138, 81),
('40312', 'Tarnos', '30T', 624463, 4821968, 43.5403, -1.45945, 44),
('40313', 'Tartas', '30T', 676543, 4855705, 43.8333, -0.804165, 20),
('40314', 'Tercis-les-Bains', '30T', 652523, 4837022, 43.6706, -1.10806, 30),
('40315', 'Téthieu', '30T', 663024, 4846531, 43.7539, -0.974996, 10),
('40316', 'Tilh', '30T', 674764, 4827101, 43.5764, -0.835561, 126),
('40317', 'Tosse', '30T', 634427, 4838949, 43.6914, -1.33194, 25),
('40318', 'Toulouzette', '30T', 686428, 4847515, 43.7572, -0.684161, 25),
('40319', 'Trensacq', '30T', 679722, 4898060, 44.2136, -0.750283, 74),
('40320', 'Uchacq-et-Parentis', '30T', 696080, 4866999, 43.93, -0.557222, 40),
('40321', 'Urgons', '30T', 706248, 4836240, 43.6506, -0.442503, 140),
('40322', 'Uza', '30T', 644032, 4877177, 44.0336, -1.20251, 26),
('40323', 'Vert', '30T', 693681, 4884869, 44.0914, -0.580552, 82),
('40324', 'Vicq-d''Auribat', '30T', 672415, 4850287, 43.7856, -0.857218, 15),
('40325', 'Vielle-Tursan', '30T', 705644, 4839125, 43.6767, -0.448886, 133),
('40326', 'Vielle-Saint-Girons', '30T', 636131, 4864015, 43.9167, -1.30444, 14),
('40327', 'Vielle-Soubiran', '30T', 725548, 4880632, 44.0442, -0.184723, 121),
('40328', 'Vieux-Boucau-les-Bains', '30T', 628937, 4849519, 43.7875, -1.39751, 3),
('40329', 'Le Vignau', '30T', 717881, 4850847, 43.7786, -0.292494, 95),
('40330', 'Villenave', '30T', 675894, 4870878, 43.97, -0.807225, 57),
('40331', 'Villeneuve-de-Marsan', '30T', 716481, 4863557, 43.8933, -0.304728, 87),
('40332', 'Ychoux', '30T', 662428, 4910452, 44.3292, -0.962773, 50),
('40333', 'Ygos-Saint-Saturnin', '30T', 681488, 4871801, 43.9769, -0.737225, 71),
('40334', 'Yzosse', '30T', 659952, 4842135, 43.715, -1.01444, 10),
('41001', 'Ambloy', '31T', 347550, 5286440, 47.7133, 0.967505, 110),
('41002', 'Angé', '31T', 367300, 5243549, 47.3319, 1.24361, 66),
('41003', 'Areines', '31T', 357336, 5296107, 47.8025, 1.09473, 82),
('41004', 'Artins', '31T', 330567, 5290402, 47.7447, 0.739716, 85),
('41005', 'Arville', '31T', 347123, 5325284, 48.0625, 0.948061, 170),
('41006', 'Autainville', '31T', 381555, 5304147, 47.8797, 1.41583, 131),
('41007', 'Authon', '31T', 341991, 5279051, 47.6456, 0.896116, 121),
('41008', 'Avaray', '31T', 392363, 5286487, 47.7228, 1.56472, 80),
('41009', 'Averdon', '31T', 372127, 5282697, 47.685, 1.2961, 105),
('41010', 'Azé', '31T', 350009, 5301698, 47.8511, 0.994998, 100),
('41011', 'Baigneaux', '31T', 369283, 5293447, 47.7811, 1.255, 127),
('41012', 'Baillou', '31T', 338966, 5315033, 47.9683, 0.842505, 108),
('41013', 'Bauzy', '31T', 395239, 5265558, 47.535, 1.60806, 85),
('41014', 'Beauchêne', '31T', 348398, 5311595, 47.9397, 0.97, 176),
('41015', 'Beauvilliers', '31T', 369488, 5299774, 47.8381, 1.25583, 134),
('41016', 'Billy', '31T', 389608, 5240772, 47.3111, 1.53945, 90),
('41017', 'Binas', '31T', 385118, 5306731, 47.9036, 1.46278, 130),
('41018', 'Blois', '31T', 374252, 5271933, 47.5886, 1.3275, 100),
('41019', 'Boisseau', '31T', 372423, 5292357, 47.7719, 1.29722, 120),
('41020', 'Bonneveau', '31T', 331475, 5297945, 47.8128, 0.748892, 130),
('41022', 'Bouffry', '31T', 358107, 5318947, 48.0081, 1.0975, 220),
('41023', 'Bourré', '31T', 366120, 5245213, 47.3467, 1.22749, 100),
('41024', 'Boursay', '31T', 348650, 5320393, 48.0189, 0.970272, 180),
('41025', 'Bracieux', '31T', 390271, 5267194, 47.5489, 1.54167, 80),
('41026', 'Brévainville', '31T', 372057, 5312442, 47.9525, 1.28639, 131),
('41027', 'Briou', '31T', 386144, 5296611, 47.8128, 1.47917, 125),
('41028', 'Busloup', '31T', 360491, 5306100, 47.8931, 1.13361, 107),
('41029', 'Candé-sur-Beuvron', '31T', 369131, 5261576, 47.4944, 1.2625, 80),
('41030', 'Cellé', '31T', 333976, 5300252, 47.8342, 0.78139, 90),
('41031', 'Cellettes', '31T', 378159, 5264901, 47.5261, 1.38139, 80),
('41032', 'Chailles', '31T', 372970, 5266803, 47.5422, 1.31194, 80),
('41033', 'Chambon-sur-Cisse', '31T', 365708, 5269282, 47.5631, 1.21473, 80),
('41034', 'Chambord', '31T', 388755, 5274325, 47.6128, 1.51972, 80),
('41035', 'Champigny-en-Beauce', '31T', 369274, 5285663, 47.7111, 1.25722, 120),
('41036', 'Chaon', '31T', 437828, 5273101, 47.6083, 2.17278, 127),
('41037', 'La Chapelle-Enchérie', '31T', 365590, 5298473, 47.8256, 1.20417, 110),
('41038', 'La Chapelle-Montmartin', '31T', 404587, 5235971, 47.2703, 1.73861, 115),
('41039', 'La Chapelle-Saint-Martin-en-Plaine', '31T', 381374, 5286145, 47.7178, 1.41833, 119),
('41040', 'La Chapelle-Vendômoise', '31T', 367777, 5281219, 47.6708, 1.23862, 117),
('41041', 'La Chapelle-Vicomtesse', '31T', 353580, 5317022, 47.9897, 1.0375, 185),
('41042', 'Châteauvieux', '31T', 377624, 5232115, 47.2311, 1.38333, 100),
('41043', 'Châtillon-sur-Cher', '31T', 386107, 5236762, 47.2744, 1.49417, 110),
('41044', 'Châtres-sur-Cher', '31T', 417417, 5235222, 47.2653, 1.90833, 100),
('41045', 'Chaumont-sur-Loire', '31T', 363678, 5260217, 47.4811, 1.19056, 70),
('41046', 'Chaumont-sur-Tharonne', '31T', 417708, 5273752, 47.6119, 1.905, 130),
('41047', 'La Chaussée-Saint-Victor', '31T', 377405, 5274800, 47.615, 1.36862, 100),
('41048', 'Chauvigny-du-Perche', '31T', 356684, 5313422, 47.9581, 1.08028, 180),
('41049', 'Chémery', '31T', 385189, 5244655, 47.3453, 1.48, 97),
('41050', 'Cheverny', '31T', 384038, 5261786, 47.4992, 1.46028, 91),
('41051', 'Chissay-en-Touraine', '31T', 359127, 5244202, 47.3361, 1.13528, 70),
('41052', 'Chitenay', '31T', 377421, 5261643, 47.4967, 1.3725, 90),
('41053', 'Choue', '31T', 345524, 5318221, 47.9986, 0.92916, 150),
('41054', 'Choussy', '31T', 375225, 5247915, 47.3728, 1.34723, 100),
('41055', 'Chouzy-sur-Cisse', '31T', 367862, 5264692, 47.5222, 1.24473, 70),
('41056', 'La Colombe', '31T', 378295, 5305203, 47.8886, 1.37195, 130),
('41057', 'Conan', '31T', 371679, 5289748, 47.7483, 1.28806, 120),
('41058', 'Concriers', '31T', 385808, 5292202, 47.7731, 1.47584, 115),
('41059', 'Contres', '31T', 381535, 5252880, 47.4186, 1.42945, 100),
('41060', 'Cormenon', '31T', 342823, 5314958, 47.9686, 0.894171, 111),
('41061', 'Cormeray', '31T', 380082, 5260754, 47.4892, 1.40806, 100),
('41062', 'Couddes', '31T', 379335, 5246841, 47.3639, 1.40194, 110),
('41063', 'Couffy', '31T', 382244, 5233843, 47.2475, 1.44388, 74),
('41064', 'Coulanges', '31T', 366322, 5266890, 47.5417, 1.22361, 90),
('41065', 'Coulommiers-la-Tour', '31T', 360757, 5293861, 47.7831, 1.14111, 120),
('41066', 'Courbouzon', '31T', 390909, 5285587, 47.7144, 1.54556, 80),
('41067', 'Cour-Cheverny', '31T', 383746, 5262904, 47.5092, 1.45611, 80),
('41068', 'Courmemin', '31T', 396642, 5258585, 47.4725, 1.62833, 95),
('41069', 'Cour-sur-Loire', '31T', 381785, 5278662, 47.6506, 1.42584, 80),
('41070', 'Couture-sur-Loir', '31T', 326495, 5291511, 47.7536, 0.684997, 59),
('41071', 'Crouy-sur-Cosson', '31T', 395595, 5278429, 47.6508, 1.60973, 81),
('41072', 'Crucheray', '31T', 356611, 5287816, 47.7278, 1.08778, 129),
('41073', 'Danzé', '31T', 352579, 5306266, 47.8928, 1.02777, 140),
('41074', 'Dhuizon', '31T', 399148, 5271542, 47.5894, 1.65861, 120),
('41075', 'Droué', '31T', 356702, 5322441, 48.0392, 1.07751, 150),
('41077', 'Épiais', '31T', 369204, 5296413, 47.8078, 1.25305, 127),
('41078', 'Épuisay', '31T', 345252, 5307292, 47.9003, 0.929447, 162),
('41079', 'Les Essarts', '31T', 329056, 5289303, 47.7344, 0.720007, 120),
('41080', 'Faverolles-sur-Cher', '31T', 362784, 5242541, 47.3219, 1.18417, 90),
('41081', 'Faye', '31T', 363575, 5295957, 47.8025, 1.17805, 128),
('41082', 'Feings', '31T', 375900, 5255035, 47.4369, 1.35417, 90),
('41083', 'La Ferté-Beauharnais', '31T', 413438, 5266032, 47.5419, 1.84972, 100),
('41084', 'La Ferté-Imbault', '31T', 421169, 5248540, 47.3856, 1.95556, 98),
('41085', 'La Ferté-Saint-Cyr', '31T', 400359, 5278809, 47.655, 1.67306, 90),
('41086', 'Fontaines-en-Sologne', '31T', 390836, 5262767, 47.5092, 1.55027, 110),
('41087', 'Fontaine-les-Coteaux', '31T', 337339, 5296294, 47.7994, 0.827782, 100),
('41088', 'Fontaine-Raoul', '31T', 361211, 5317018, 47.9914, 1.13972, 220),
('41089', 'La Fontenelle', '31T', 352789, 5324981, 48.0611, 1.02417, 170),
('41090', 'Fortan', '31T', 344006, 5301178, 47.845, 0.914994, 120),
('41091', 'Fossé', '31T', 371189, 5277034, 47.6339, 1.28528, 115),
('41092', 'Fougères-sur-Bièvre', '31T', 375088, 5256257, 47.4478, 1.34306, 90),
('41093', 'Françay', '31T', 359188, 5275490, 47.6175, 1.12611, 116),
('41094', 'Fresnes', '31T', 380314, 5254696, 47.4347, 1.41278, 95),
('41095', 'Fréteval', '31T', 366270, 5305376, 47.8878, 1.21111, 91),
('41096', 'Le Gault-Perche', '31T', 349515, 5328866, 48.0953, 0.978884, 210),
('41097', 'Gièvres', '31T', 399617, 5236609, 47.2753, 1.67277, 90),
('41098', 'Gombergean', '31T', 356023, 5279243, 47.6506, 1.08278, 121),
('41099', 'Gy-en-Sologne', '31T', 392971, 5244385, 47.3442, 1.58306, 85),
('41100', 'Les Hayes', '31T', 333247, 5287204, 47.7167, 0.776664, 135),
('41101', 'Herbault', '31T', 360197, 5274013, 47.6044, 1.14, 135),
('41102', 'Houssay', '31T', 345436, 5290852, 47.7525, 0.937773, 110),
('41103', 'Huisseau-en-Beauce', '31T', 350702, 5287408, 47.7228, 1.00917, 123),
('41104', 'Huisseau-sur-Cosson', '31T', 383699, 5272077, 47.5917, 1.45306, 79),
('41105', 'Josnes', '31T', 389481, 5294848, 47.7975, 1.52417, 120),
('41106', 'Lamotte-Beuvron', '31T', 426857, 5272426, 47.6011, 2.02694, 115),
('41107', 'Lancé', '31T', 354870, 5284059, 47.6936, 1.06583, 125),
('41108', 'Lancôme', '31T', 359293, 5278946, 47.6486, 1.12639, 120),
('41109', 'Landes-le-Gaulois', '31T', 363623, 5279368, 47.6533, 1.18389, 110),
('41110', 'Langon', '31T', 411169, 5237567, 47.2856, 1.82528, 90),
('41112', 'Lassay-sur-Croisne', '31T', 396113, 5247633, 47.3739, 1.62389, 90),
('41113', 'Lavardin', '31T', 341406, 5289756, 47.7417, 0.884441, 70),
('41114', 'Lestiou', '31T', 394202, 5287873, 47.7356, 1.58889, 80),
('41115', 'Lignières', '31T', 364197, 5302923, 47.8653, 1.18417, 95),
('41116', 'Lisle', '31T', 359238, 5301590, 47.8522, 1.11833, 100),
('41118', 'Loreux', '31T', 411902, 5250061, 47.3981, 1.8325, 100),
('41119', 'Lorges', '31T', 387647, 5297941, 47.825, 1.49889, 130),
('41120', 'Lunay', '31T', 343941, 5297194, 47.8092, 0.915561, 100),
('41121', 'La Madeleine-Villefrouin', '31T', 379752, 5292355, 47.7733, 1.395, 110),
('41122', 'Maray', '31T', 415814, 5233300, 47.2478, 1.8875, 100),
('41123', 'Marchenoir', '31T', 379973, 5298002, 47.8242, 1.39638, 133),
('41124', 'Marcilly-en-Beauce', '31T', 350277, 5291960, 47.7636, 1.00194, 93),
('41125', 'Marcilly-en-Gault', '31T', 415176, 5257516, 47.4656, 1.87445, 115),
('41126', 'Mareuil-sur-Cher', '31T', 373691, 5239023, 47.2925, 1.32944, 65),
('41127', 'La Marolle-en-Sologne', '31T', 408266, 5270835, 47.5844, 1.78, 115),
('41128', 'Marolles', '31T', 372790, 5278636, 47.6486, 1.30612, 110),
('41129', 'Maslives', '31T', 385896, 5276542, 47.6322, 1.48111, 86),
('41130', 'Maves', '31T', 377432, 5288944, 47.7422, 1.36501, 114),
('41131', 'Mazangé', '31T', 346228, 5298708, 47.8233, 0.94555, 83),
('41132', 'Méhers', '31T', 383471, 5242712, 47.3275, 1.45778, 84),
('41133', 'Membrolles', '31T', 385734, 5315799, 47.9853, 1.46861, 129),
('41134', 'Menars', '31T', 380365, 5277611, 47.6408, 1.40722, 90),
('41135', 'Mennetou-sur-Cher', '31T', 414398, 5235728, 47.2694, 1.86833, 100),
('41136', 'Mer', '31T', 387685, 5284877, 47.7075, 1.50277, 90),
('41137', 'Mesland', '31T', 358689, 5263486, 47.5094, 1.12333, 79),
('41138', 'Meslay', '31T', 357651, 5297088, 47.8114, 1.09861, 83),
('41139', 'Meusnes', '31T', 386326, 5233948, 47.2492, 1.49778, 80),
('41140', 'Millançay', '31T', 407438, 5255502, 47.4464, 1.77222, 100),
('41141', 'Moisy', '31T', 374140, 5308041, 47.9133, 1.31556, 130),
('41142', 'Molineuf', '31T', 366034, 5270757, 47.5764, 1.21861, 79),
('41143', 'Mondoubleau', '31T', 342944, 5316375, 47.9814, 0.895273, 136),
('41144', 'Monteaux', '31T', 357834, 5261005, 47.4869, 1.11278, 70),
('41145', 'Monthou-sur-Bièvre', '31T', 371577, 5259514, 47.4764, 1.29556, 80),
('41146', 'Monthou-sur-Cher', '31T', 371173, 5244914, 47.345, 1.29445, 70),
('41147', 'Les Montils', '31T', 371830, 5261546, 47.4947, 1.29833, 90),
('41148', 'Montlivault', '31T', 383223, 5277522, 47.6406, 1.44528, 80),
('41149', 'Montoire-sur-le-Loir', '31T', 339754, 5291037, 47.7528, 0.861948, 67),
('41150', 'Mont-près-Chambord', '31T', 383759, 5268802, 47.5622, 1.45473, 100),
('41151', 'Montrichard', '31T', 362946, 5245007, 47.3442, 1.18556, 70),
('41152', 'Montrieux-en-Sologne', '31T', 404221, 5267535, 47.5542, 1.72694, 110),
('41153', 'Montrouveau', '31T', 329491, 5287097, 47.7147, 0.726667, 120),
('41154', 'Morée', '31T', 368196, 5306907, 47.9019, 1.2364, 100),
('41155', 'Muides-sur-Loire', '31T', 389309, 5280398, 47.6675, 1.52555, 82),
('41156', 'Mulsans', '31T', 378950, 5283817, 47.6964, 1.38667, 110),
('41157', 'Mur-de-Sologne', '31T', 394972, 5251852, 47.4117, 1.60778, 113),
('41158', 'Naveil', '31T', 352359, 5295181, 47.7931, 1.02861, 79),
('41159', 'Neung-sur-Beuvron', '31T', 410143, 5265187, 47.5339, 1.80612, 95),
('41160', 'Neuvy', '31T', 395023, 5268681, 47.5631, 1.60445, 85),
('41161', 'Nouan-le-Fuzelier', '31T', 427521, 5265316, 47.5372, 2.03695, 110),
('41163', 'Nourray', '31T', 354457, 5286695, 47.7172, 1.05945, 127),
('41164', 'Noyers-sur-Cher', '31T', 378927, 5237183, 47.2769, 1.39916, 70),
('41165', 'Oigny', '31T', 345426, 5325360, 48.0628, 0.925271, 150),
('41166', 'Oisly', '31T', 377655, 5249779, 47.39, 1.37889, 110),
('41167', 'Onzain', '31T', 362471, 5262346, 47.5, 1.17388, 70),
('41168', 'Orçay', '31T', 432829, 5237681, 47.2892, 2.11166, 160),
('41169', 'Orchaise', '31T', 364528, 5272491, 47.5917, 1.19806, 138),
('41170', 'Ouchamps', '31T', 372530, 5259091, 47.4728, 1.30833, 90),
('41171', 'Oucques', '31T', 372443, 5297978, 47.8225, 1.29583, 126),
('41172', 'Ouzouer-le-Doyen', '31T', 376138, 5311179, 47.9419, 1.34139, 125),
('41173', 'Ouzouer-le-Marché', '31T', 390033, 5307469, 47.9111, 1.52833, 130),
('41174', 'Périgny', '31T', 361309, 5289091, 47.7403, 1.15, 110),
('41175', 'Pezou', '31T', 361058, 5302905, 47.8644, 1.14222, 88),
('41176', 'Pierrefitte-sur-Sauldre', '31T', 436063, 5262561, 47.5133, 2.15084, 122),
('41177', 'Le Plessis-Dorin', '31T', 341057, 5328353, 48.0886, 0.865558, 190),
('41178', 'Le Plessis-l''Échelle', '31T', 382446, 5296840, 47.8142, 1.42973, 133),
('41179', 'Le Poislay', '31T', 355993, 5325579, 48.0672, 1.06694, 163),
('41180', 'Pontlevoy', '31T', 368305, 5249981, 47.39, 1.25499, 100),
('41181', 'Pouillé', '31T', 370852, 5241771, 47.3167, 1.29111, 70),
('41182', 'Pray', '31T', 358576, 5282084, 47.6767, 1.11583, 129),
('41183', 'Prénouvellon', '31T', 390923, 5313876, 47.9689, 1.53862, 126),
('41184', 'Prunay-Cassereau', '31T', 344246, 5284520, 47.6953, 0.924171, 122),
('41185', 'Pruniers-en-Sologne', '31T', 399537, 5241737, 47.3214, 1.67056, 86),
('41186', 'Rahart', '31T', 355527, 5303689, 47.8703, 1.06805, 140),
('41187', 'Renay', '31T', 362888, 5300328, 47.8417, 1.1675, 130),
('41188', 'Rhodon', '31T', 370211, 5290244, 47.7525, 1.26834, 124),
('41189', 'Rilly-sur-Loire', '31T', 359494, 5258648, 47.4661, 1.13555, 64),
('41190', 'Rocé', '31T', 361343, 5296596, 47.8078, 1.14805, 120),
('41191', 'Roches', '31T', 383963, 5294709, 47.7953, 1.45055, 120),
('41192', 'Les Roches-l''Évêque', '31T', 341901, 5293388, 47.7744, 0.889719, 70),
('41193', 'Romilly', '31T', 353674, 5312540, 47.9494, 1.04028, 170),
('41194', 'Romorantin-Lanthenay', '31T', 405358, 5245994, 47.3606, 1.74667, 90),
('41195', 'Rougeou', '31T', 389485, 5246549, 47.3631, 1.53639, 110),
('41196', 'Ruan-sur-Egvonne', '31T', 361805, 5319289, 48.0119, 1.14695, 146),
('41197', 'Saint-Agil', '31T', 345448, 5322301, 48.0353, 0.926671, 171),
('41198', 'Saint-Aignan', '31T', 376743, 5236240, 47.2681, 1.37056, 70),
('41199', 'Saint-Amand-Longpré', '31T', 351167, 5283597, 47.6886, 1.01667, 124),
('41200', 'Sainte-Anne', '31T', 356734, 5291118, 47.7575, 1.08834, 131),
('41201', 'Saint-Arnoult', '31T', 340435, 5286260, 47.71, 0.872779, 110),
('41202', 'Saint-Avit', '31T', 344787, 5328497, 48.0908, 0.915561, 210),
('41203', 'Saint-Bohaire', '31T', 369672, 5278272, 47.6447, 1.26473, 90),
('41204', 'Saint-Claude-de-Diray', '31T', 380975, 5274788, 47.6156, 1.41611, 80),
('41205', 'Saint-Cyr-du-Gault', '31T', 352168, 5276220, 47.6225, 1.03249, 120),
('41206', 'Saint-Denis-sur-Loire', '31T', 378886, 5275757, 47.6239, 1.38805, 90),
('41207', 'Saint-Dyé-sur-Loire', '31T', 386552, 5279154, 47.6558, 1.48916, 85),
('41208', 'Saint-Étienne-des-Guérets', '31T', 354525, 5273596, 47.5994, 1.06472, 133),
('41209', 'Saint-Firmin-des-Prés', '31T', 358983, 5300484, 47.8422, 1.11528, 85),
('41210', 'Sainte-Gemmes', '31T', 370540, 5294716, 47.7928, 1.27139, 128),
('41211', 'Saint-Georges-sur-Cher', '31T', 358465, 5242859, 47.3239, 1.12695, 70),
('41212', 'Saint-Gervais-la-Forêt', '31T', 376522, 5269599, 47.5681, 1.35834, 95),
('41213', 'Saint-Gourgon', '31T', 351067, 5280510, 47.6608, 1.01639, 125),
('41214', 'Saint-Hilaire-la-Gravelle', '31T', 366240, 5309454, 47.9244, 1.20945, 91),
('41215', 'Saint-Jacques-des-Guérets', '31T', 334408, 5293535, 47.7739, 0.789723, 64),
('41216', 'Saint-Jean-Froidmentel', '31T', 368748, 5312918, 47.9561, 1.24195, 96),
('41217', 'Saint-Julien-de-Chédon', '31T', 365097, 5241777, 47.3156, 1.215, 110),
('41218', 'Saint-Julien-sur-Cher', '31T', 407150, 5237227, 47.2819, 1.77222, 97),
('41219', 'Saint-Laurent-des-Bois', '31T', 383943, 5300979, 47.8517, 1.44861, 145),
('41220', 'Saint-Laurent-Nouan', '31T', 395914, 5285804, 47.7172, 1.61222, 81),
('41221', 'Saint-Léonard-en-Beauce', '31T', 378805, 5298799, 47.8311, 1.38056, 140),
('41222', 'Saint-Loup', '31T', 412143, 5235298, 47.2653, 1.83861, 120),
('41223', 'Saint-Lubin-en-Vergonnois', '31T', 367630, 5274767, 47.6128, 1.23861, 90),
('41224', 'Saint-Marc-du-Cor', '31T', 347270, 5315239, 47.9722, 0.953611, 190),
('41225', 'Saint-Martin-des-Bois', '31T', 337164, 5287834, 47.7233, 0.828616, 110),
('41226', 'Saint-Ouen', '31T', 356692, 5296988, 47.8103, 1.08584, 100),
('41228', 'Saint-Rimay', '31T', 344299, 5291963, 47.7622, 0.922216, 80),
('41229', 'Saint-Romain-sur-Cher', '31T', 379171, 5241873, 47.3192, 1.40112, 90),
('41230', 'Saint-Sulpice-de-Pommeray', '31T', 369634, 5273795, 47.6044, 1.26555, 110),
('41231', 'Saint-Viâtre', '31T', 419764, 5263812, 47.5228, 1.93417, 104),
('41232', 'Salbris', '31T', 428643, 5252736, 47.4242, 2.05389, 110),
('41233', 'Sambin', '31T', 371588, 5255252, 47.4381, 1.29695, 100),
('41234', 'Santenay', '31T', 358321, 5269858, 47.5667, 1.11639, 110),
('41235', 'Sargé-sur-Braye', '31T', 339696, 5309946, 47.9228, 0.854173, 90),
('41236', 'Sasnières', '31T', 345383, 5287270, 47.7203, 0.938339, 100),
('41237', 'Sassay', '31T', 382380, 5250084, 47.3936, 1.44139, 110),
('41238', 'Savigny-sur-Braye', '31T', 336255, 5305068, 47.8781, 0.809998, 87),
('41239', 'Seigy', '31T', 378706, 5234625, 47.2539, 1.39694, 75),
('41240', 'Seillac', '31T', 361354, 5267314, 47.5444, 1.1575, 110),
('41241', 'Selles-Saint-Denis', '31T', 418655, 5248728, 47.3869, 1.92222, 97),
('41242', 'Selles-sur-Cher', '31T', 390838, 5236889, 47.2764, 1.55667, 78),
('41243', 'Selommes', '31T', 364617, 5290650, 47.755, 1.19361, 115),
('41244', 'Semerville', '31T', 379020, 5310067, 47.9325, 1.38028, 130),
('41245', 'Séris', '31T', 387730, 5290435, 47.7575, 1.50194, 110),
('41246', 'Seur', '31T', 374592, 5262444, 47.5033, 1.33473, 80),
('41247', 'Soings-en-Sologne', '31T', 388728, 5251998, 47.4119, 1.525, 110),
('41248', 'Souday', '31T', 340980, 5322577, 48.0367, 0.866673, 165),
('41249', 'Souesmes', '31T', 438173, 5256425, 47.4583, 2.17972, 126),
('41250', 'Sougé', '31T', 329839, 5293266, 47.7703, 0.728891, 70),
('41251', 'Souvigny-en-Sologne', '31T', 437286, 5277090, 47.6442, 2.165, 140),
('41252', 'Suèvres', '31T', 384533, 5280429, 47.6669, 1.46195, 80),
('41253', 'Talcy', '31T', 383490, 5291877, 47.7697, 1.445, 119),
('41254', 'Le Temple', '31T', 345804, 5310860, 47.9325, 0.935551, 180),
('41255', 'Ternay', '31T', 333457, 5288712, 47.7303, 0.778886, 80),
('41256', 'Theillay', '31T', 427380, 5240402, 47.3131, 2.03916, 120),
('41257', 'Thenay', '31T', 370858, 5249677, 47.3878, 1.28889, 95),
('41258', 'Thésée', '31T', 372219, 5242822, 47.3264, 1.30889, 68),
('41259', 'Thoré-la-Rochette', '31T', 347472, 5294598, 47.7867, 0.963605, 80),
('41260', 'Thoury', '31T', 394550, 5276039, 47.6292, 1.59639, 86),
('41261', 'Tourailles', '31T', 361830, 5282932, 47.685, 1.15889, 120),
('41262', 'Tour-en-Sologne', '31T', 387135, 5266142, 47.5389, 1.50027, 80),
('41263', 'Tréhet', '31T', 321852, 5289582, 47.735, 0.623892, 60),
('41264', 'Tripleville', '31T', 386930, 5311235, 47.9444, 1.48583, 116),
('41265', 'Troo', '31T', 334778, 5294081, 47.7789, 0.79445, 120),
('41266', 'Valaire', '31T', 369653, 5258722, 47.4689, 1.27027, 90),
('41267', 'Vallières-les-Grandes', '31T', 360300, 5253811, 47.4228, 1.14777, 85),
('41268', 'Veilleins', '31T', 399746, 5252757, 47.4206, 1.67084, 118),
('41269', 'Vendôme', '31T', 355210, 5295171, 47.7936, 1.06666, 80),
('41270', 'Verdes', '31T', 382711, 5312925, 47.9589, 1.42889, 120),
('41271', 'Vernou-en-Sologne', '31T', 400587, 5261574, 47.5, 1.68, 90),
('41272', 'Veuves', '31T', 358719, 5259501, 47.4736, 1.125, 64),
('41273', 'Vievy-le-Rayé', '31T', 373853, 5302518, 47.8636, 1.31334, 140),
('41274', 'Villavard', '31T', 343060, 5291564, 47.7583, 0.905837, 80),
('41275', 'La Ville-aux-Clercs', '31T', 356948, 5308997, 47.9183, 1.08528, 140),
('41276', 'Villebarou', '31T', 373999, 5275676, 47.6222, 1.32306, 118),
('41277', 'Villebout', '31T', 364272, 5316666, 47.9889, 1.18084, 140),
('41278', 'Villechauve', '31T', 345554, 5279604, 47.6514, 0.94333, 120),
('41279', 'Villedieu-le-Château', '31T', 323530, 5287862, 47.72, 0.64695, 80),
('41280', 'Villefranche-sur-Cher', '31T', 407001, 5238403, 47.2925, 1.77, 97),
('41282', 'Villeherviers', '31T', 409247, 5246489, 47.3656, 1.79805, 95),
('41283', 'Villemardy', '31T', 364293, 5288372, 47.7344, 1.19, 125),
('41284', 'Villeneuve-Frouville', '31T', 373332, 5293912, 47.7861, 1.30889, 123),
('41285', 'Villeny', '31T', 406497, 5275187, 47.6233, 1.75556, 130),
('41286', 'Villeporcher', '31T', 349340, 5278300, 47.6406, 0.994163, 120),
('41287', 'Villerable', '31T', 352486, 5291162, 47.7569, 1.03167, 123),
('41288', 'Villerbon', '31T', 377851, 5280164, 47.6633, 1.37305, 110),
('41289', 'Villermain', '31T', 390138, 5302093, 47.8628, 1.53111, 127),
('41290', 'Villeromain', '31T', 360947, 5287895, 47.7294, 1.14555, 119),
('41291', 'Villetrun', '31T', 362348, 5294225, 47.7867, 1.16222, 117),
('41292', 'Villexanton', '31T', 381826, 5288884, 47.7425, 1.42361, 120),
('41293', 'Villiersfaux', '31T', 349241, 5290566, 47.7508, 0.988607, 120),
('41294', 'Villiers-sur-Loir', '31T', 349983, 5296663, 47.8058, 0.996394, 90),
('41295', 'Vineuil', '31T', 377930, 5270990, 47.5808, 1.37666, 80),
('41296', 'Vouzon', '31T', 429235, 5277367, 47.6458, 2.05778, 130),
('41297', 'Yvoy-le-Marron', '31T', 413859, 5276092, 47.6325, 1.85334, 127),
('42001', 'Aboën', '31T', 588591, 5029615, 45.4144, 4.13223, 720),
('42002', 'Ailleux', '31T', 573175, 5072505, 45.8022, 3.94167, 680),
('42003', 'Ambierle', '31T', 569194, 5105949, 46.1036, 3.89528, 420),
('42004', 'Amions', '31T', 580254, 5081019, 45.8781, 4.03417, 473),
('42005', 'Andrézieux-Bouthéon', '31T', 598154, 5042258, 45.5269, 4.25694, 360),
('42006', 'Apinac', '31T', 577880, 5025554, 45.3792, 3.99472, 936),
('42007', 'Arcinges', '31T', 599043, 5109846, 46.135, 4.28222, 510),
('42008', 'Arcon', '31T', 568706, 5095757, 46.0119, 3.8875, 800),
('42009', 'Arthun', '31T', 580230, 5069505, 45.7744, 4.03195, 381),
('42010', 'Aveizieux', '31T', 607060, 5046757, 45.5661, 4.37195, 580),
('42011', 'Balbigny', '31T', 592102, 5074423, 45.8172, 4.18556, 334),
('42012', 'Bard', '31T', 578785, 5048806, 45.5883, 4.01001, 760),
('42013', 'Bellegarde-en-Forez', '31T', 601167, 5055857, 45.6489, 4.29834, 420),
('42014', 'Belleroche', '31T', 608887, 5113903, 46.17, 4.41055, 523),
('42015', 'Belmont-de-la-Loire', '31T', 603941, 5113416, 46.1664, 4.34639, 532),
('42016', 'La Bénisson-Dieu', '31T', 580634, 5111213, 46.1497, 4.04417, 266),
('42017', 'Le Bessat', '31T', 618659, 5024985, 45.3683, 4.51527, 1160),
('42018', 'Bessey', '31T', 632801, 5027213, 45.3858, 4.69639, 380),
('42019', 'Boën', '31T', 578130, 5066453, 45.7472, 4.00445, 440),
('42020', 'Boisset-lès-Montrond', '31T', 594459, 5052727, 45.6217, 4.21166, 350),
('42021', 'Boisset-Saint-Priest', '31T', 586182, 5040384, 45.5117, 4.10333, 598),
('42022', 'Bonson', '31T', 595997, 5041453, 45.52, 4.22917, 380),
('42023', 'Bourg-Argental', '31T', 622421, 5017278, 45.2983, 4.56139, 560),
('42025', 'Boyer', '31T', 593335, 5105589, 46.0975, 4.2075, 340),
('42026', 'Briennon', '31T', 583705, 5110976, 46.1472, 4.08389, 275),
('42027', 'Bully', '31T', 577921, 5086514, 45.9278, 4.00501, 460),
('42028', 'Burdignes', '31T', 622786, 5014167, 45.2703, 4.56527, 892),
('42029', 'Bussières', '31T', 598521, 5076621, 45.8361, 4.26861, 600),
('42030', 'Bussy-Albieux', '31T', 580545, 5071824, 45.7953, 4.03638, 380),
('42031', 'Caloire', '31T', 597080, 5030296, 45.4194, 4.24083, 540),
('42032', 'Cellieu', '31T', 620460, 5042277, 45.5236, 4.5425, 520),
('42033', 'Le Cergne', '31T', 600911, 5108488, 46.1225, 4.30611, 650),
('42034', 'Cervières', '31T', 559895, 5077362, 45.8472, 3.77139, 860),
('42035', 'Cezay', '31T', 574793, 5072555, 45.8025, 3.9625, 620),
('42036', 'Chagnon', '31T', 621369, 5043529, 45.5347, 4.55445, 350),
('42037', 'Chalain-d''Uzore', '31T', 583426, 5058281, 45.6731, 4.07112, 400),
('42038', 'Chalain-le-Comtal', '31T', 591128, 5055394, 45.6461, 4.16944, 380),
('42039', 'Chalmazel', '31T', 566190, 5061469, 45.7036, 3.85028, 900),
('42040', 'La Chamba', '31T', 558955, 5067230, 45.7561, 3.75805, 1080),
('42041', 'Chambéon', '31T', 591478, 5061079, 45.6972, 4.175, 340),
('42042', 'Chambles', '31T', 596955, 5032763, 45.4417, 4.23972, 620),
('42044', 'Le Chambon-Feugerolles', '31T', 603601, 5027714, 45.3953, 4.32361, 501),
('42045', 'La Chambonie', '31T', 558251, 5066359, 45.7483, 3.7489, 1020),
('42046', 'Champdieu', '31T', 581560, 5055293, 45.6464, 4.04666, 400),
('42047', 'Champoly', '31T', 564844, 5078462, 45.8567, 3.83527, 720),
('42048', 'Chandon', '31T', 593658, 5111151, 46.1475, 4.21278, 340),
('42049', 'Changy', '31T', 568909, 5110237, 46.1422, 3.89222, 345),
('42050', 'La Chapelle-en-Lafaye', '31T', 577374, 5034930, 45.4636, 3.98973, 1060),
('42051', 'La Chapelle-Villars', '31T', 634333, 5036970, 45.4733, 4.71862, 420),
('42052', 'Charlieu', '31T', 590377, 5112522, 46.1603, 4.17056, 274),
('42053', 'Châteauneuf', '31T', 628909, 5044050, 45.5381, 4.65111, 250),
('42054', 'Châtelneuf', '31T', 576378, 5054240, 45.6375, 3.98001, 840),
('42055', 'Châtelus', '31T', 614347, 5050251, 45.5964, 4.46611, 680),
('42056', 'Chavanay', '31T', 635450, 5030480, 45.4147, 4.73111, 160),
('42058', 'Chazelles-sur-Lavieu', '31T', 578177, 5043675, 45.5422, 4.00139, 900),
('42059', 'Chazelles-sur-Lyon', '31T', 608435, 5054992, 45.64, 4.39139, 620),
('42060', 'Chenereilles', '31T', 584248, 5037364, 45.4847, 4.07806, 680),
('42061', 'Cherier', '31T', 571093, 5092050, 45.9783, 3.91777, 850),
('42062', 'Chevrières', '31T', 609356, 5049359, 45.5892, 4.40194, 620),
('42063', 'Chirassimont', '31T', 599631, 5085406, 45.915, 4.28472, 540),
('42064', 'Chuyer', '31T', 632458, 5035202, 45.4578, 4.69416, 450),
('42065', 'Civens', '31T', 597306, 5070181, 45.7783, 4.25167, 384),
('42066', 'Cleppé', '31T', 591792, 5069079, 45.7692, 4.18055, 349),
('42067', 'Colombier', '31T', 625295, 5021780, 45.3383, 4.59917, 812),
('42068', 'Combre', '31T', 597796, 5097848, 46.0272, 4.26361, 471),
('42069', 'Commelle-Vernay', '31T', 582794, 5094171, 45.9961, 4.06917, 342),
('42070', 'Cordelle', '31T', 582182, 5088391, 45.9442, 4.06028, 477),
('42071', 'Le Coteau', '31T', 584295, 5097680, 46.0275, 4.08917, 277),
('42072', 'La Côte-en-Couzan', '31T', 563778, 5068883, 45.7706, 3.82028, 882),
('42073', 'Cottance', '31T', 600907, 5071844, 45.7928, 4.29833, 540),
('42074', 'Coutouvre', '31T', 593523, 5103123, 46.0753, 4.20945, 450),
('42075', 'Craintilleux', '31T', 596212, 5048618, 45.5844, 4.23333, 360),
('42076', 'Cremeaux', '31T', 572004, 5084066, 45.9064, 3.92833, 660),
('42077', 'Croizet-sur-Gand', '31T', 595322, 5085400, 45.9156, 4.22917, 480),
('42078', 'Le Crozet', '31T', 566110, 5113169, 46.1689, 3.85639, 400),
('42079', 'Cuinzier', '31T', 597920, 5108933, 46.1269, 4.26749, 470),
('42081', 'Cuzieu', '31T', 598334, 5051522, 45.6103, 4.26111, 358),
('42082', 'Dancé', '31T', 579571, 5083788, 45.9031, 4.02583, 525),
('42083', 'Dargoire', '31T', 630111, 5046761, 45.5622, 4.66722, 260),
('42084', 'Débats-Rivière-d''Orpra', '31T', 573059, 5067626, 45.7583, 3.93944, 440),
('42085', 'Doizieux', '31T', 623967, 5031694, 45.4278, 4.58472, 580),
('42086', 'Écoche', '31T', 600092, 5112673, 46.1603, 4.29639, 448),
('42087', 'Écotay-l''Olme', '31T', 581124, 5048898, 45.5889, 4.04, 500),
('42088', 'Épercieux-Saint-Paul', '31T', 594323, 5071709, 45.7925, 4.21361, 340),
('42089', 'Essertines-en-Châtelneuf', '31T', 577637, 5052187, 45.6189, 3.99583, 700),
('42090', 'Essertines-en-Donzy', '31T', 604651, 5067522, 45.7533, 4.34555, 517),
('42091', 'Estivareilles', '31T', 578938, 5029703, 45.4164, 4.00889, 900),
('42092', 'L''Étrat', '31T', 607797, 5037941, 45.4867, 4.37945, 453),
('42093', 'Farnay', '31T', 624800, 5038996, 45.4933, 4.59722, 450),
('42094', 'Feurs', '31T', 595204, 5066352, 45.7442, 4.22389, 346),
('42095', 'Firminy', '31T', 600611, 5027017, 45.3894, 4.28528, 472),
('42096', 'Fontanès', '31T', 612061, 5044745, 45.5472, 4.43555, 860),
('42097', 'La Fouillouse', '31T', 603123, 5039591, 45.5022, 4.32, 413),
('42098', 'Fourneaux', '31T', 598192, 5087852, 45.9372, 4.26667, 500),
('42099', 'Fraisses', '31T', 598953, 5027300, 45.3922, 4.26416, 480),
('42100', 'La Gimond', '31T', 610088, 5045945, 45.5583, 4.41055, 650),
('42101', 'Graix', '31T', 622792, 5022842, 45.3483, 4.5675, 980),
('42102', 'Grammond', '31T', 612500, 5046883, 45.5664, 4.44166, 730),
('42103', 'La Grand-Croix', '31T', 621995, 5040331, 45.5058, 4.56166, 316),
('42104', 'La Gresle', '31T', 598976, 5103362, 46.0767, 4.28, 532),
('42105', 'Grézieux-le-Fromental', '31T', 589851, 5052382, 45.6192, 4.1525, 370),
('42106', 'Grézolles', '31T', 573873, 5079149, 45.8619, 3.95167, 577),
('42107', 'Gumières', '31T', 576956, 5042425, 45.5311, 3.98556, 880),
('42108', 'L''Hôpital-le-Grand', '31T', 593356, 5049748, 45.595, 4.19695, 365),
('42109', 'L''Hôpital-sous-Rochefort', '31T', 572457, 5069286, 45.7733, 3.93195, 420),
('42110', 'L''Horme', '31T', 620756, 5038177, 45.4867, 4.54528, 320),
('42112', 'Jarnosse', '31T', 595118, 5106944, 46.1094, 4.23083, 380),
('42113', 'Jas', '31T', 601899, 5066674, 45.7461, 4.31, 532),
('42114', 'Jeansagnière', '31T', 565075, 5064637, 45.7322, 3.83639, 1080),
('42115', 'Jonzieux', '31T', 606751, 5018908, 45.3156, 4.36194, 880),
('42116', 'Juré', '31T', 569188, 5081502, 45.8836, 3.89166, 560),
('42117', 'Lavieu', '31T', 580675, 5043367, 45.5392, 4.03333, 697),
('42118', 'Lay', '31T', 594454, 5090017, 45.9572, 4.21889, 461),
('42119', 'Leigneux', '31T', 575880, 5066672, 45.7494, 3.97556, 420),
('42120', 'Lentigny', '31T', 575825, 5094051, 45.9958, 3.97917, 374),
('42121', 'Lérigneux', '31T', 575019, 5050180, 45.6011, 3.96195, 920),
('42122', 'Lézigneux', '31T', 582845, 5046605, 45.5681, 4.06167, 526),
('42123', 'Lorette', '31T', 623546, 5040948, 45.5111, 4.58167, 303),
('42124', 'Lupé', '31T', 633549, 5025808, 45.3731, 4.70556, 340),
('42125', 'Luré', '31T', 572661, 5081326, 45.8817, 3.93639, 560),
('42126', 'Luriecq', '31T', 584386, 5033539, 45.4503, 4.07917, 716),
('42127', 'Mably', '31T', 582337, 5104197, 46.0864, 4.065, 290),
('42128', 'Machézal', '31T', 600996, 5086262, 45.9225, 4.3025, 620),
('42129', 'Maclas', '31T', 631987, 5024540, 45.3619, 4.68528, 401),
('42130', 'Magneux-Haute-Rive', '31T', 591352, 5057867, 45.6683, 4.17278, 340),
('42131', 'Maizilly', '31T', 596135, 5114678, 46.1789, 4.24556, 390),
('42132', 'Malleval', '31T', 635415, 5027052, 45.3839, 4.72972, 250),
('42133', 'Marcenod', '31T', 615737, 5047745, 45.5736, 4.48334, 754),
('42134', 'Marcilly-le-Châtel', '31T', 580346, 5060462, 45.6931, 4.03194, 480),
('42135', 'Marclopt', '31T', 594190, 5057631, 45.6658, 4.20916, 346),
('42136', 'Marcoux', '31T', 578807, 5062449, 45.7111, 4.0125, 480),
('42137', 'Margerie-Chantagret', '31T', 583277, 5041765, 45.5244, 4.06638, 642),
('42138', 'Maringes', '31T', 605298, 5057408, 45.6622, 4.35167, 620),
('42139', 'Marlhes', '31T', 609360, 5015372, 45.2833, 4.39444, 940),
('42140', 'Marols', '31T', 581587, 5036619, 45.4783, 4.04389, 840),
('42141', 'Mars', '31T', 596180, 5111776, 46.1528, 4.24555, 380),
('42142', 'Merle-Leignec', '31T', 580313, 5027529, 45.3967, 4.02611, 900),
('42143', 'Mizérieux', '31T', 590758, 5071872, 45.7944, 4.16778, 337),
('42145', 'Montagny', '31T', 595483, 5098614, 46.0344, 4.23388, 490),
('42146', 'Montarcher', '31T', 577771, 5034379, 45.4586, 3.99472, 1140),
('42147', 'Montbrison', '31T', 583046, 5051022, 45.6078, 4.065, 420),
('42148', 'Montchal', '31T', 602100, 5075506, 45.8256, 4.31445, 633),
('42149', 'Montrond-les-Bains', '31T', 596065, 5055376, 45.6453, 4.23278, 352),
('42150', 'Montverdun', '31T', 583039, 5062905, 45.7147, 4.06694, 368),
('42151', 'Mornand-en-Forez', '31T', 587567, 5059202, 45.6808, 4.12444, 354),
('42152', 'Nandax', '31T', 590092, 5105572, 46.0978, 4.16555, 330),
('42153', 'Neaux', '31T', 591580, 5090715, 45.9639, 4.18194, 394),
('42154', 'Néronde', '31T', 595992, 5076890, 45.8389, 4.23611, 460),
('42155', 'Nervieux', '31T', 589810, 5073217, 45.8067, 4.15583, 335),
('42156', 'Neulise', '31T', 591641, 5083708, 45.9008, 4.18139, 540),
('42157', 'Noailly', '31T', 578101, 5109606, 46.1356, 4.01111, 310),
('42158', 'Les Noës', '31T', 566091, 5099001, 46.0414, 3.85417, 603),
('42159', 'Noirétable', '31T', 559517, 5074025, 45.8172, 3.76611, 701),
('42160', 'Nollieux', '31T', 577385, 5074161, 45.8167, 3.99611, 510),
('42161', 'Notre-Dame-de-Boisset', '31T', 587464, 5094020, 45.9942, 4.12944, 331),
('42162', 'Ouches', '31T', 576484, 5096405, 46.0169, 3.98806, 323),
('42163', 'La Pacaudière', '31T', 567024, 5113920, 46.1756, 3.86833, 340),
('42164', 'Palogneux', '31T', 571677, 5065728, 45.7414, 3.92139, 800),
('42165', 'Panissières', '31T', 604167, 5071898, 45.7928, 4.34027, 604),
('42166', 'Parigny', '31T', 585018, 5093553, 45.9903, 4.09778, 310),
('42167', 'Pavezin', '31T', 630614, 5036120, 45.4664, 4.67083, 600),
('42168', 'Pélussin', '31T', 631745, 5030864, 45.4189, 4.68388, 370),
('42169', 'Périgneux', '31T', 590395, 5032635, 45.4414, 4.15583, 640),
('42170', 'Perreux', '31T', 586943, 5098982, 46.0389, 4.12362, 327),
('42171', 'Pinay', '31T', 588214, 5080664, 45.8739, 4.13666, 412),
('42172', 'Planfoy', '31T', 612975, 5026486, 45.3828, 4.44306, 950),
('42173', 'Pommiers', '31T', 582956, 5075622, 45.8292, 4.06806, 350),
('42174', 'Poncins', '31T', 590454, 5064521, 45.7283, 4.16249, 342),
('42175', 'Pouilly-lès-Feurs', '31T', 595845, 5072443, 45.7989, 4.23333, 360),
('42176', 'Pouilly-les-Nonains', '31T', 575895, 5098805, 46.0386, 3.98083, 320),
('42177', 'Pouilly-sous-Charlieu', '31T', 585745, 5110850, 46.1458, 4.11028, 263),
('42178', 'Pradines', '31T', 591136, 5094536, 45.9983, 4.17694, 440),
('42179', 'Pralong', '31T', 580254, 5057560, 45.6669, 4.03028, 420),
('42180', 'Précieux', '31T', 589729, 5048799, 45.5869, 4.15028, 370),
('42181', 'Régny', '31T', 594052, 5093777, 45.9911, 4.21444, 323),
('42182', 'Renaison', '31T', 571428, 5100326, 46.0528, 3.92334, 382),
('42183', 'La Ricamarie', '31T', 607036, 5029037, 45.4067, 4.36777, 577),
('42184', 'Riorges', '31T', 580923, 5098993, 46.0397, 4.04583, 300),
('42185', 'Rivas', '31T', 597378, 5048883, 45.5867, 4.24833, 350),
('42186', 'Rive-de-Gier', '31T', 626305, 5042978, 45.5289, 4.6175, 250),
('42187', 'Roanne', '31T', 582779, 5098462, 46.0347, 4.06972, 278),
('42188', 'Roche', '31T', 573680, 5051614, 45.6142, 3.94499, 923),
('42189', 'Roche-la-Molière', '31T', 603551, 5032097, 45.4347, 4.32389, 530),
('42191', 'Roisey', '31T', 630903, 5027451, 45.3883, 4.67222, 500),
('42192', 'Rozier-Côtes-d''Aurec', '31T', 586374, 5024800, 45.3714, 4.10305, 840),
('42193', 'Rozier-en-Donzy', '31T', 599239, 5072218, 45.7964, 4.27695, 508),
('42194', 'Sail-les-Bains', '31T', 565278, 5120784, 46.2375, 3.84666, 300),
('42195', 'Sail-sous-Couzan', '31T', 575491, 5064877, 45.7333, 3.97028, 440),
('42196', 'Sainte-Agathe-en-Donzy', '31T', 601493, 5076947, 45.8386, 4.30694, 690),
('42197', 'Sainte-Agathe-la-Bouteresse', '31T', 582145, 5065147, 45.735, 4.05583, 380),
('42198', 'Saint-Alban-les-Eaux', '31T', 572471, 5095677, 46.0108, 3.93611, 428),
('42199', 'Saint-André-d''Apchon', '31T', 571946, 5098295, 46.0344, 3.92973, 402),
('42200', 'Saint-André-le-Puy', '31T', 599418, 5055552, 45.6464, 4.27583, 374),
('42201', 'Saint-Appolinard', '31T', 629379, 5022233, 45.3417, 4.65139, 460),
('42202', 'Saint-Barthélemy-Lestra', '31T', 604258, 5063935, 45.7211, 4.33973, 540),
('42203', 'Saint-Bonnet-des-Quarts', '31T', 565167, 5109115, 46.1325, 3.84362, 480),
('42204', 'Saint-Bonnet-le-Château', '31T', 583447, 5030625, 45.4242, 4.06667, 864),
('42205', 'Saint-Bonnet-le-Courreau', '31T', 573405, 5056581, 45.6589, 3.94222, 1012),
('42206', 'Saint-Bonnet-les-Oules', '31T', 603805, 5044294, 45.5444, 4.32972, 500),
('42207', 'Saint-Chamond', '31T', 617833, 5036578, 45.4728, 4.5075, 367),
('42208', 'Saint-Christo-en-Jarez', '31T', 616035, 5044509, 45.5444, 4.48639, 816),
('42209', 'Sainte-Colombe-sur-Gand', '31T', 598983, 5081475, 45.8797, 4.27556, 581),
('42210', 'Sainte-Croix-en-Jarez', '31T', 628805, 5037503, 45.4792, 4.64806, 420),
('42211', 'Saint-Cyprien', '31T', 596400, 5043435, 45.5378, 4.23472, 371),
('42212', 'Saint-Cyr-de-Favières', '31T', 584925, 5090928, 45.9667, 4.09611, 429),
('42213', 'Saint-Cyr-de-Valorges', '31T', 601313, 5082686, 45.8903, 4.30583, 635),
('42214', 'Saint-Cyr-les-Vignes', '31T', 601118, 5058882, 45.6761, 4.29834, 420),
('42215', 'Saint-Denis-de-Cabanne', '31T', 593336, 5114017, 46.1733, 4.20917, 300),
('42216', 'Saint-Denis-sur-Coise', '31T', 610990, 5052567, 45.6178, 4.42361, 480),
('42217', 'Saint-Didier-sur-Rochefort', '31T', 565673, 5071464, 45.7936, 3.845, 700),
('42218', 'Saint-Étienne', '31T', 608710, 5032863, 45.4408, 4.39, 515),
('42219', 'Saint-Étienne-le-Molard', '31T', 584740, 5065058, 45.7339, 4.08917, 380),
('42220', 'Saint-Forgeux-Lespinasse', '31T', 571831, 5108109, 46.1228, 3.92972, 320),
('42221', 'Sainte-Foy-Saint-Sulpice', '31T', 587690, 5068958, 45.7686, 4.12778, 391),
('42222', 'Saint-Galmier', '31T', 602894, 5049558, 45.5919, 4.31916, 420),
('42223', 'Saint-Genest-Lerpt', '31T', 604529, 5033347, 45.4458, 4.33666, 570),
('42224', 'Saint-Genest-Malifaux', '31T', 611276, 5021702, 45.34, 4.42028, 960),
('42225', 'Genilac', '31T', 623607, 5043357, 45.5328, 4.58306, 400),
('42226', 'Saint-Georges-de-Baroille', '31T', 587757, 5077972, 45.8497, 4.13028, 389),
('42227', 'Saint-Georges-en-Couzan', '31T', 572334, 5061260, 45.7011, 3.92917, 760),
('42228', 'Saint-Georges-Haute-Ville', '31T', 585770, 5045132, 45.5544, 4.09889, 440),
('42229', 'Saint-Germain-la-Montagne', '31T', 606229, 5117530, 46.2031, 4.37695, 595),
('42230', 'Saint-Germain-Laval', '31T', 578661, 5075720, 45.8306, 4.01278, 420),
('42231', 'Saint-Germain-Lespinasse', '31T', 574539, 5106073, 46.1042, 3.96445, 333),
('42232', 'Saint-Haon-le-Châtel', '31T', 570723, 5101830, 46.0664, 3.91445, 449),
('42233', 'Saint-Haon-le-Vieux', '31T', 570196, 5102843, 46.0756, 3.90778, 427),
('42234', 'Saint-Héand', '31T', 607260, 5042685, 45.5294, 4.37361, 669),
('42235', 'Saint-Hilaire-Cusson-la-Valmitte', '31T', 581769, 5024245, 45.3669, 4.04416, 920),
('42236', 'Saint-Hilaire-sous-Charlieu', '31T', 591362, 5108307, 46.1222, 4.1825, 367),
('42237', 'Saint-Jean-Bonnefonds', '31T', 613119, 5034206, 45.4522, 4.44667, 520),
('42238', 'Saint-Jean-la-Vêtre', '31T', 562549, 5070845, 45.7883, 3.80473, 700),
('42239', 'Saint-Jean-Saint-Maurice-sur-Loire', '31T', 577693, 5090925, 45.9675, 4.00278, 400),
('42240', 'Saint-Jean-Soleymieux', '31T', 581117, 5039391, 45.5033, 4.03834, 760),
('42241', 'Saint-Jodard', '31T', 587858, 5081461, 45.8811, 4.13222, 420),
('42242', 'Saint-Joseph', '31T', 626218, 5046218, 45.5581, 4.61722, 370),
('42243', 'Saint-Julien-d''Oddes', '31T', 577406, 5077710, 45.8486, 3.99695, 489),
('42245', 'Saint-Julien-la-Vêtre', '31T', 564027, 5074039, 45.8169, 3.82416, 602),
('42246', 'Saint-Julien-Molin-Molette', '31T', 626571, 5020015, 45.3222, 4.615, 600),
('42247', 'Saint-Just-en-Bas', '31T', 568255, 5064454, 45.7303, 3.87723, 820),
('42248', 'Saint-Just-en-Chevalet', '31T', 565640, 5084798, 45.9136, 3.84639, 647),
('42249', 'Saint-Just-la-Pendue', '31T', 596243, 5082975, 45.8936, 4.24056, 582),
('42251', 'Saint-Laurent-la-Conche', '31T', 594224, 5059700, 45.6844, 4.21, 344),
('42252', 'Saint-Laurent-Rochefort', '31T', 571809, 5069248, 45.7731, 3.92361, 433),
('42253', 'Saint-Léger-sur-Roanne', '31T', 577140, 5098944, 46.0397, 3.99694, 321),
('42254', 'Saint-Marcel-de-Félines', '31T', 592557, 5080079, 45.8681, 4.1925, 480),
('42255', 'Saint-Marcel-d''Urfé', '31T', 568665, 5080108, 45.8711, 3.88472, 676),
('42256', 'Saint-Marcellin-en-Forez', '31T', 591066, 5038849, 45.4972, 4.16556, 400),
('42257', 'Saint-Martin-d''Estréaux', '31T', 561630, 5117197, 46.2056, 3.79889, 460),
('42259', 'Saint-Martin-la-Plaine', '31T', 624271, 5044883, 45.5464, 4.59194, 450),
('42260', 'Saint-Martin-la-Sauveté', '31T', 571602, 5075974, 45.8336, 3.92195, 660),
('42261', 'Saint-Martin-Lestra', '31T', 605295, 5063983, 45.7214, 4.35306, 540),
('42262', 'Saint-Maurice-en-Gourgois', '31T', 592587, 5028407, 45.4031, 4.18306, 793),
('42264', 'Saint-Médard-en-Forez', '31T', 606241, 5050293, 45.5981, 4.36222, 540),
('42265', 'Saint-Michel-sur-Rhône', '31T', 636441, 5033929, 45.4456, 4.74473, 280),
('42266', 'Saint-Nizier-de-Fornas', '31T', 584674, 5028265, 45.4028, 4.08194, 794),
('42267', 'Saint-Nizier-sous-Charlieu', '31T', 586675, 5111851, 46.1547, 4.1225, 271),
('42268', 'Saint-Paul-de-Vézelin', '31T', 584189, 5081781, 45.8844, 4.085, 420),
('42269', 'Saint-Paul-d''Uzore', '31T', 584177, 5058723, 45.6769, 4.08083, 380),
('42270', 'Saint-Paul-en-Cornillon', '31T', 596073, 5027935, 45.3983, 4.2275, 453),
('42271', 'Saint-Paul-en-Jarez', '31T', 623000, 5037788, 45.4828, 4.57389, 414),
('42273', 'Saint-Pierre-la-Noaille', '31T', 584811, 5114757, 46.1811, 4.09889, 280),
('42274', 'Saint-Polgues', '31T', 575594, 5084757, 45.9122, 3.97472, 582);
INSERT INTO `ods_communes` (`oc_code_insee`, `oc_nom`, `oc_secteur`, `oc_x_utm`, `oc_y_utm`, `oc_latitude`, `oc_longitude`, `oc_altitude`) VALUES
('42275', 'Saint-Priest-en-Jarez', '31T', 607732, 5036674, 45.4753, 4.37834, 520),
('42276', 'Saint-Priest-la-Prugne', '31T', 558202, 5089877, 45.96, 3.75111, 753),
('42277', 'Saint-Priest-la-Roche', '31T', 584832, 5085154, 45.9147, 4.09389, 440),
('42278', 'Saint-Priest-la-Vêtre', '31T', 563092, 5072641, 45.8044, 3.81195, 660),
('42279', 'Saint-Just-Saint-Rambert', '31T', 596964, 5039246, 45.5, 4.24111, 387),
('42280', 'Saint-Régis-du-Coin', '31T', 613302, 5015503, 45.2839, 4.44472, 1060),
('42281', 'Saint-Rirand', '31T', 565620, 5102854, 46.0761, 3.84862, 595),
('42282', 'Saint-Romain-d''Urfé', '31T', 564206, 5081788, 45.8867, 3.8275, 680),
('42283', 'Saint-Romain-en-Jarez', '31T', 619761, 5045937, 45.5567, 4.53445, 530),
('42284', 'Saint-Romain-la-Motte', '31T', 575982, 5103930, 46.0847, 3.98277, 320),
('42285', 'Saint-Romain-le-Puy', '31T', 587588, 5045343, 45.5561, 4.12222, 400),
('42286', 'Saint-Romain-les-Atheux', '31T', 607674, 5023523, 45.3569, 4.37472, 880),
('42287', 'Saint-Sauveur-en-Rue', '31T', 617233, 5013908, 45.2689, 4.49445, 760),
('42288', 'Saint-Sixte', '31T', 576341, 5069610, 45.7758, 3.98195, 600),
('42289', 'Saint-Symphorien-de-Lay', '31T', 593632, 5088831, 45.9467, 4.20805, 440),
('42290', 'Saint-Thomas-la-Garde', '31T', 584298, 5046532, 45.5672, 4.08028, 460),
('42291', 'Saint-Thurin', '31T', 567739, 5074110, 45.8172, 3.87195, 500),
('42293', 'Saint-Victor-sur-Rhins', '31T', 599468, 5095498, 46.0058, 4.28472, 390),
('42294', 'Saint-Vincent-de-Boisset', '31T', 586221, 5095237, 46.0053, 4.11361, 300),
('42295', 'Les Salles', '31T', 561577, 5077410, 45.8475, 3.79306, 660),
('42296', 'Salt-en-Donzy', '31T', 600230, 5065628, 45.7369, 4.28833, 370),
('42297', 'Salvizinet', '31T', 599196, 5068112, 45.7594, 4.27555, 420),
('42298', 'Sauvain', '31T', 570511, 5057998, 45.6719, 3.90528, 885),
('42299', 'Savigneux', '31T', 584584, 5051042, 45.6078, 4.08472, 387),
('42300', 'Sevelinges', '31T', 600138, 5105882, 46.0992, 4.29555, 500),
('42301', 'Soleymieux', '31T', 581326, 5040011, 45.5089, 4.04111, 710),
('42302', 'Sorbiers', '31T', 613370, 5038317, 45.4892, 4.45083, 560),
('42303', 'Souternon', '31T', 576795, 5079987, 45.8692, 3.98944, 520),
('42304', 'Sury-le-Comtal', '31T', 592494, 5043561, 45.5394, 4.18472, 379),
('42305', 'La Talaudière', '31T', 612040, 5037428, 45.4814, 4.43361, 520),
('42306', 'Tarentaise', '31T', 616538, 5025533, 45.3736, 4.48833, 1087),
('42307', 'Tartaras', '31T', 630194, 5045898, 45.5544, 4.66806, 300),
('42308', 'La Terrasse-sur-Dorlay', '31T', 623794, 5033883, 45.4475, 4.58306, 460),
('42310', 'Thélis-la-Combe', '31T', 621900, 5020540, 45.3278, 4.55555, 840),
('42311', 'La Tour-en-Jarez', '31T', 608642, 5038048, 45.4875, 4.39028, 560),
('42312', 'La Tourette', '31T', 584787, 5029594, 45.4147, 4.08361, 797),
('42313', 'Trelins', '31T', 578435, 5064543, 45.73, 4.00806, 420),
('42314', 'La Tuilière', '31T', 562136, 5088249, 45.945, 3.80166, 679),
('42315', 'Unias', '31T', 595635, 5050955, 45.6056, 4.2264, 350),
('42316', 'Unieux', '31T', 598674, 5028469, 45.4028, 4.26083, 460),
('42317', 'Urbise', '31T', 568791, 5122706, 46.2544, 3.8925, 280),
('42318', 'Usson-en-Forez', '31T', 573581, 5026767, 45.3906, 3.94, 920),
('42319', 'Valeille', '31T', 601623, 5062409, 45.7078, 4.30556, 400),
('42320', 'Valfleury', '31T', 616621, 5042173, 45.5233, 4.49333, 650),
('42321', 'La Valla-sur-Rochefort', '31T', 566168, 5067549, 45.7583, 3.85083, 820),
('42322', 'La Valla-en-Gier', '31T', 618558, 5030355, 45.4167, 4.51528, 650),
('42323', 'Veauche', '31T', 599782, 5046297, 45.5631, 4.27861, 386),
('42324', 'Veauchette', '31T', 598742, 5046250, 45.5628, 4.26528, 360),
('42325', 'Vendranges', '31T', 587850, 5088098, 45.9408, 4.13333, 500),
('42326', 'Véranne', '31T', 630318, 5025247, 45.3686, 4.66417, 560),
('42327', 'Vérin', '31T', 637069, 5035023, 45.4553, 4.75306, 150),
('42328', 'Verrières-en-Forez', '31T', 577596, 5046785, 45.5703, 3.99444, 833),
('42329', 'La Versanne', '31T', 619656, 5019448, 45.3183, 4.52666, 900),
('42330', 'Villars', '31T', 605959, 5036181, 45.4711, 4.35555, 470),
('42331', 'Villemontais', '31T', 573720, 5091988, 45.9775, 3.95167, 492),
('42332', 'Villerest', '31T', 580367, 5093800, 45.9931, 4.03777, 356),
('42333', 'Villers', '31T', 594410, 5108291, 46.1217, 4.22194, 475),
('42334', 'Violay', '31T', 605457, 5078588, 45.8528, 4.35833, 840),
('42335', 'Viricelles', '31T', 607131, 5056544, 45.6542, 4.37501, 570),
('42336', 'Virigneux', '31T', 605268, 5060463, 45.6897, 4.35195, 544),
('42337', 'Vivans', '31T', 572710, 5115466, 46.1889, 3.94223, 330),
('42338', 'Vougy', '31T', 586843, 5106050, 46.1025, 4.12361, 270),
('42339', 'Chausseterre', '31T', 560941, 5082805, 45.8961, 3.78555, 720),
('43001', 'Agnat', '31T', 535145, 5021251, 45.3439, 3.44861, 580),
('43002', 'Aiguilhe', '31T', 569671, 4988731, 45.0486, 3.88473, 620),
('43003', 'Allègre', '31T', 555897, 5005168, 45.1978, 3.71167, 1040),
('43004', 'Alleyrac', '31T', 577978, 4971267, 44.8906, 3.9875, 1080),
('43005', 'Alleyras', '31T', 553900, 4972840, 44.9069, 3.68277, 790),
('43006', 'Ally', '31T', 524757, 5000989, 45.1619, 3.315, 995),
('43007', 'Araules', '31T', 592396, 4993681, 45.0906, 4.17416, 1032),
('43008', 'Arlempdes', '31T', 572768, 4968367, 44.865, 3.92111, 840),
('43009', 'Arlet', '31T', 533013, 4996151, 45.1181, 3.41973, 600),
('43010', 'Arsac-en-Velay', '31T', 574362, 4982242, 44.9897, 3.94333, 740),
('43011', 'Aubazat', '31T', 534442, 4998473, 45.1389, 3.43806, 520),
('43012', 'Aurec-sur-Loire', '31T', 594098, 5024756, 45.37, 4.20167, 451),
('43013', 'Vissac-Auteyrac', '31T', 550712, 4995958, 45.1153, 3.64472, 920),
('43014', 'Autrac', '31T', 510318, 5019588, 45.3297, 3.13167, 807),
('43015', 'Auvers', '31T', 531660, 4982566, 44.9958, 3.40167, 1200),
('43016', 'Auzon', '31T', 528811, 5026435, 45.3908, 3.36806, 460),
('43017', 'Azérat', '31T', 529912, 5023354, 45.3631, 3.38194, 452),
('43018', 'Bains', '31T', 561049, 4984353, 45.01, 3.77472, 980),
('43019', 'Barges', '31T', 570718, 4965196, 44.8367, 3.89472, 1130),
('43020', 'Bas-en-Basset', '31T', 586886, 5017647, 45.3069, 4.10833, 460),
('43021', 'Beaulieu', '31T', 573833, 4997697, 45.1289, 3.93889, 580),
('43022', 'Beaumont', '31T', 526825, 5017815, 45.3133, 3.34222, 455),
('43023', 'Beaune-sur-Arzon', '31T', 563943, 5014348, 45.2797, 3.81528, 920),
('43024', 'Beaux', '31T', 585803, 5004360, 45.1875, 4.09223, 751),
('43025', 'Beauzac', '31T', 586152, 5012359, 45.2594, 4.09805, 550),
('43026', 'Bellevue-la-Montagne', '31T', 564380, 5007779, 45.2206, 3.82, 960),
('43027', 'Berbezit', '31T', 546487, 5014874, 45.2858, 3.59278, 960),
('43028', 'Bessamorel', '31T', 585597, 4996950, 45.1208, 4.08834, 900),
('43029', 'La Besseyre-Saint-Mary', '31T', 532966, 4979703, 44.97, 3.41805, 1100),
('43030', 'Blanzac', '31T', 566143, 4995576, 45.1106, 3.84083, 711),
('43031', 'Blassac', '31T', 531454, 5002098, 45.1717, 3.40028, 520),
('43032', 'Blavozy', '31T', 577182, 4989929, 45.0586, 3.98028, 680),
('43033', 'Blesle', '31T', 513389, 5018390, 45.3189, 3.17083, 504),
('43034', 'Boisset', '31T', 576892, 5019245, 45.3225, 3.98112, 888),
('43035', 'Bonneval', '31T', 558115, 5017841, 45.3117, 3.74139, 840),
('43036', 'Borne', '31T', 562809, 4994585, 45.1019, 3.79833, 740),
('43037', 'Le Bouchet-Saint-Nicolas', '31T', 562295, 4971064, 44.8903, 3.78889, 1220),
('43038', 'Bournoncle-Saint-Pierre', '31T', 524896, 5021202, 45.3439, 3.31778, 467),
('43039', 'Le Brignon', '31T', 569480, 4976076, 44.9347, 3.88056, 940),
('43040', 'Brioude', '31T', 530014, 5015763, 45.2947, 3.38278, 421),
('43041', 'Brives-Charensac', '31T', 573017, 4988830, 45.0492, 3.92723, 600),
('43042', 'Cayres', '31T', 563770, 4974936, 44.925, 3.80805, 1120),
('43043', 'Céaux-d''Allègre', '31T', 558661, 5003619, 45.1836, 3.74667, 900),
('43044', 'Cerzat', '31T', 537659, 5001021, 45.1617, 3.47916, 610),
('43045', 'Ceyssac', '31T', 565765, 4987702, 45.0397, 3.835, 740),
('43046', 'Chadrac', '31T', 570789, 4990472, 45.0642, 3.89917, 600),
('43047', 'Chadron', '31T', 573699, 4978962, 44.9603, 3.93444, 770),
('43048', 'La Chaise-Dieu', '31T', 554384, 5018703, 45.3197, 3.69389, 1050),
('43049', 'Chamalières-sur-Loire', '31T', 577319, 5005640, 45.2, 3.98445, 520),
('43050', 'Chambezon', '31T', 518746, 5025378, 45.3817, 3.23944, 537),
('43051', 'Le Chambon-sur-Lignon', '31T', 602482, 4990563, 45.0611, 4.30166, 980),
('43052', 'Champagnac-le-Vieux', '31T', 539466, 5022881, 45.3583, 3.50389, 880),
('43053', 'Champclause', '31T', 592546, 4986368, 45.0247, 4.17472, 1200),
('43054', 'Chanaleilles', '31T', 538405, 4967760, 44.8622, 3.48611, 1150),
('43055', 'Chaniat', '31T', 537904, 5018397, 45.3181, 3.4836, 650),
('43056', 'Chanteuges', '31T', 541872, 4991235, 45.0733, 3.53195, 540),
('43057', 'La Chapelle-Bertin', '31T', 550861, 5007409, 45.2183, 3.64778, 1100),
('43058', 'La Chapelle-d''Aurec', '31T', 594440, 5020810, 45.3344, 4.20528, 878),
('43059', 'La Chapelle-Geneste', '31T', 552201, 5021987, 45.3494, 3.66638, 1000),
('43060', 'Charraix', '31T', 544947, 4986226, 45.0281, 3.57056, 920),
('43061', 'Chaspinhac', '31T', 574346, 4993012, 45.0867, 3.94472, 900),
('43062', 'Chaspuzac', '31T', 558865, 4990937, 45.0694, 3.74778, 860),
('43063', 'Chassagnes', '31T', 542401, 5006946, 45.2147, 3.54, 589),
('43064', 'Chassignolles', '31T', 538461, 5027072, 45.3961, 3.49139, 922),
('43065', 'Chastel', '31T', 525578, 4992290, 45.0836, 3.325, 980),
('43066', 'Chaudeyrolles', '31T', 595033, 4978133, 44.9503, 4.20473, 1280),
('43067', 'Chavaniac-Lafayette', '31T', 545455, 5000856, 45.1597, 3.57834, 700),
('43068', 'Chazelles', '31T', 538561, 4985535, 45.0222, 3.48945, 700),
('43069', 'Chenereilles', '31T', 598595, 4998620, 45.1342, 4.25389, 860),
('43070', 'Chilhac', '31T', 534431, 5000571, 45.1578, 3.43806, 520),
('43071', 'Chomelix', '31T', 564987, 5012352, 45.2617, 3.82833, 897),
('43072', 'La Chomette', '31T', 537353, 5008488, 45.2289, 3.47583, 660),
('43073', 'Cistrières', '31T', 548678, 5018872, 45.3217, 3.62111, 1000),
('43074', 'Cohade', '31T', 529186, 5020573, 45.3381, 3.37251, 411),
('43075', 'Collat', '31T', 547784, 5010440, 45.2458, 3.60889, 1010),
('43076', 'Connangles', '31T', 550744, 5016450, 45.2997, 3.64722, 1000),
('43077', 'Costaros', '31T', 567008, 4971390, 44.8928, 3.84861, 1071),
('43078', 'Coubon', '31T', 572405, 4982960, 44.9964, 3.91861, 640),
('43079', 'Couteuges', '31T', 539082, 5004054, 45.1889, 3.49751, 560),
('43080', 'Craponne-sur-Arzon', '31T', 566148, 5020204, 45.3322, 3.84417, 940),
('43081', 'Croisances', '31T', 548425, 4971840, 44.8983, 3.61333, 900),
('43082', 'Cronce', '31T', 528457, 4993691, 45.0961, 3.36166, 680),
('43083', 'Cubelles', '31T', 545750, 4983978, 45.0078, 3.58055, 940),
('43084', 'Cussac-sur-Loire', '31T', 569722, 4982035, 44.9883, 3.88445, 680),
('43085', 'Desges', '31T', 535564, 4985179, 45.0192, 3.45138, 720),
('43086', 'Domeyrat', '31T', 539301, 5010876, 45.2503, 3.50083, 500),
('43087', 'Dunières', '31T', 605496, 5007959, 45.2172, 4.34361, 760),
('43088', 'Espalem', '31T', 518183, 5017168, 45.3078, 3.23195, 628),
('43089', 'Espaly-Saint-Marcel', '31T', 568555, 4988719, 45.0486, 3.87055, 650),
('43090', 'Esplantas', '31T', 543111, 4972789, 44.9072, 3.54611, 1060),
('43091', 'Les Estables', '31T', 591051, 4973013, 44.9047, 4.15334, 1367),
('43092', 'Fay-sur-Lignon', '31T', 596856, 4982173, 44.9864, 4.22861, 1150),
('43093', 'Félines', '31T', 558351, 5013522, 45.2728, 3.74389, 1020),
('43094', 'Ferrussac', '31T', 531474, 4993520, 45.0944, 3.4, 964),
('43095', 'Fix-Saint-Geneys', '31T', 552368, 4999120, 45.1436, 3.66611, 1109),
('43096', 'Fontannes', '31T', 533196, 5015254, 45.29, 3.42333, 440),
('43097', 'Freycenet-la-Cuche', '31T', 585977, 4971955, 44.8958, 4.0889, 1190),
('43098', 'Freycenet-la-Tour', '31T', 583634, 4976646, 44.9383, 4.06, 1128),
('43099', 'Frugerès-les-Mines', '31T', 524007, 5026013, 45.3872, 3.30667, 445),
('43100', 'Frugières-le-Pin', '31T', 538351, 5012907, 45.2686, 3.48888, 520),
('43101', 'Goudet', '31T', 573221, 4970963, 44.8883, 3.92722, 830),
('43102', 'Grazac', '31T', 592852, 5004397, 45.1869, 4.18195, 788),
('43103', 'Grenier-Montgon', '31T', 515357, 5015000, 45.2883, 3.19583, 520),
('43104', 'Grèzes', '31T', 538410, 4974209, 44.9203, 3.48667, 1100),
('43105', 'Javaugues', '31T', 537576, 5015000, 45.2875, 3.47916, 500),
('43106', 'Jax', '31T', 548525, 5001990, 45.1697, 3.61751, 1020),
('43107', 'Josat', '31T', 547833, 5006799, 45.2131, 3.60916, 746),
('43108', 'Jullianges', '31T', 561955, 5017137, 45.305, 3.79028, 955),
('43109', 'Lafarre', '31T', 578176, 4965807, 44.8414, 3.98916, 960),
('43110', 'Lamothe', '31T', 533247, 5017970, 45.3144, 3.42416, 440),
('43111', 'Landos', '31T', 565661, 4965852, 44.8431, 3.83083, 1100),
('43112', 'Langeac', '31T', 538725, 4994455, 45.1025, 3.49222, 504),
('43113', 'Lantriac', '31T', 579140, 4983749, 45.0028, 4.00417, 720),
('43114', 'Lapte', '31T', 595605, 5004222, 45.185, 4.21695, 840),
('43115', 'Laussonne', '31T', 583063, 4980065, 44.9692, 4.05333, 922),
('43116', 'Laval-sur-Doulon', '31T', 543888, 5022108, 45.3511, 3.56028, 740),
('43117', 'Lavaudieu', '31T', 535587, 5012335, 45.2636, 3.45361, 463),
('43118', 'Lavoûte-Chilhac', '31T', 532055, 4999756, 45.1506, 3.40778, 494),
('43119', 'Lavoûte-sur-Loire', '31T', 571246, 4996526, 45.1186, 3.90583, 562),
('43120', 'Lempdes-sur-Allagnon', '31T', 521115, 5025972, 45.3869, 3.26973, 440),
('43121', 'Léotoing', '31T', 517708, 5023184, 45.3619, 3.22611, 620),
('43122', 'Lissac', '31T', 560196, 4998202, 45.1347, 3.76556, 840),
('43123', 'Lorlanges', '31T', 520829, 5020323, 45.3361, 3.26583, 580),
('43124', 'Loudes', '31T', 558780, 4993096, 45.0889, 3.74695, 840),
('43125', 'Lubilhac', '31T', 519159, 5011091, 45.2531, 3.24416, 820),
('43126', 'Malrevers', '31T', 575990, 4994482, 45.0997, 3.96583, 640),
('43127', 'Malvalette', '31T', 590619, 5023100, 45.3556, 4.15694, 576),
('43128', 'Malvières', '31T', 557285, 5020549, 45.3361, 3.73111, 950),
('43129', 'Le Mas-de-Tence', '31T', 606984, 4997335, 45.1214, 4.36028, 1020),
('43130', 'Mazet-Saint-Voy', '31T', 598045, 4988919, 45.0469, 4.245, 1040),
('43131', 'Mazerat-Aurouze', '31T', 543904, 5004117, 45.1892, 3.55889, 600),
('43132', 'Mazeyrat-d''Allier', '31T', 541552, 4996695, 45.1225, 3.52833, 620),
('43134', 'Mézères', '31T', 580145, 5001261, 45.1603, 4.01972, 952),
('43135', 'Le Monastier-sur-Gazeille', '31T', 578417, 4976611, 44.9386, 3.99389, 940),
('43136', 'Monistrol-d''Allier', '31T', 550799, 4979511, 44.9672, 3.64417, 600),
('43137', 'Monistrol-sur-Loire', '31T', 591701, 5016047, 45.2919, 4.16945, 589),
('43138', 'Monlet', '31T', 556007, 5007576, 45.2194, 3.71334, 1020),
('43139', 'Montclard', '31T', 544234, 5013099, 45.27, 3.56389, 760),
('43140', 'Le Monteil', '31T', 572033, 4990702, 45.0661, 3.915, 640),
('43141', 'Montfaucon-en-Velay', '31T', 603154, 5004433, 45.1858, 4.31306, 920),
('43142', 'Montregard', '31T', 605998, 5001393, 45.1581, 4.3486, 1000),
('43143', 'Montusclat', '31T', 588602, 4985139, 45.0142, 4.12445, 1060),
('43144', 'Moudeyres', '31T', 586764, 4978602, 44.9556, 4.1, 1165),
('43145', 'Ouides', '31T', 558225, 4972415, 44.9028, 3.73751, 1080),
('43147', 'Paulhac', '31T', 527113, 5016552, 45.3019, 3.34583, 480),
('43148', 'Paulhaguet', '31T', 540356, 5006099, 45.2072, 3.51389, 520),
('43149', 'Pébrac', '31T', 540021, 4986594, 45.0317, 3.50806, 674),
('43150', 'Le Pertuis', '31T', 583185, 4994263, 45.0969, 4.05723, 1020),
('43151', 'Pinols', '31T', 532525, 4988927, 45.0531, 3.41306, 1010),
('43152', 'Polignac', '31T', 567784, 4991241, 45.0714, 3.86111, 760),
('43153', 'Pont-Salomon', '31T', 597891, 5021511, 45.3403, 4.24945, 630),
('43154', 'Pradelles', '31T', 569657, 4957716, 44.7694, 3.88028, 1130),
('43155', 'Prades', '31T', 546785, 4986208, 45.0278, 3.59389, 560),
('43156', 'Présailles', '31T', 581230, 4972603, 44.9022, 4.02889, 1103),
('43157', 'Le Puy-en-Velay', '31T', 569898, 4987993, 45.0419, 3.88751, 628),
('43158', 'Queyrières', '31T', 586413, 4991560, 45.0722, 4.09778, 1140),
('43159', 'Raucoules', '31T', 601819, 5004628, 45.1878, 4.29611, 880),
('43160', 'Rauret', '31T', 562594, 4962920, 44.8169, 3.79167, 981),
('43162', 'Retournac', '31T', 581131, 5006150, 45.2042, 4.03306, 544),
('43163', 'Riotord', '31T', 609939, 5009671, 45.2319, 4.40056, 840),
('43164', 'Roche-en-Régnier', '31T', 573649, 5007942, 45.2211, 3.93807, 894),
('43165', 'Rosières', '31T', 577628, 4998205, 45.1331, 3.98722, 640),
('43166', 'Saint-André-de-Chalencon', '31T', 575955, 5013802, 45.2736, 3.96833, 830),
('43167', 'Saint-Arcons-d''Allier', '31T', 543295, 4990966, 45.0708, 3.55, 520),
('43168', 'Saint-Arcons-de-Barges', '31T', 572956, 4965375, 44.8381, 3.92306, 940),
('43169', 'Saint-Austremoine', '31T', 529122, 4996564, 45.1219, 3.37028, 620),
('43170', 'Saint-Beauzire', '31T', 520916, 5013596, 45.2756, 3.26666, 680),
('43171', 'Saint-Bérain', '31T', 549867, 4986725, 45.0322, 3.63306, 1000),
('43172', 'Saint-Bonnet-le-Froid', '31T', 612950, 4999785, 45.1425, 4.43666, 1120),
('43173', 'Saint-Christophe-d''Allier', '31T', 555616, 4967146, 44.8556, 3.70388, 960),
('43174', 'Saint-Christophe-sur-Dolaison', '31T', 564589, 4982845, 44.9961, 3.81944, 910),
('43175', 'Saint-Cirgues', '31T', 531665, 4999199, 45.1456, 3.40278, 480),
('43176', 'Saint-Didier-d''Allier', '31T', 554476, 4979881, 44.9703, 3.69083, 825),
('43177', 'Saint-Didier-en-Velay', '31T', 599959, 5017346, 45.3025, 4.275, 833),
('43178', 'Saint-Didier-sur-Doulon', '31T', 542032, 5016540, 45.3011, 3.53611, 585),
('43180', 'Saint-Étienne-du-Vigan', '31T', 566085, 4958789, 44.7794, 3.83528, 954),
('43181', 'Saint-Étienne-Lardeyrol', '31T', 578869, 4991492, 45.0725, 4.00195, 800),
('43182', 'Saint-Étienne-sur-Blesle', '31T', 510669, 5017644, 45.3122, 3.13611, 580),
('43183', 'Sainte-Eugénie-de-Villeneuve', '31T', 548943, 4998722, 45.1403, 3.6225, 980),
('43184', 'Saint-Ferréol-d''Auroure', '31T', 598236, 5023122, 45.3547, 4.25417, 730),
('43185', 'Sainte-Florine', '31T', 524738, 5027991, 45.405, 3.31611, 440),
('43186', 'Saint-Front', '31T', 590038, 4981085, 44.9775, 4.14195, 1230),
('43187', 'Saint-Geneys-près-Saint-Paulien', '31T', 564707, 5001394, 45.1631, 3.82333, 900),
('43188', 'Saint-Georges-d''Aurac', '31T', 542530, 5000775, 45.1592, 3.54112, 620),
('43189', 'Saint-Georges-Lagricol', '31T', 569477, 5016320, 45.2969, 3.88611, 840),
('43190', 'Saint-Germain-Laprade', '31T', 576310, 4987820, 45.0397, 3.96888, 673),
('43191', 'Saint-Géron', '31T', 523111, 5021103, 45.3431, 3.295, 510),
('43192', 'Saint-Haon', '31T', 560126, 4966137, 44.8461, 3.76084, 1000),
('43193', 'Saint-Hilaire', '31T', 534035, 5025442, 45.3817, 3.43473, 740),
('43194', 'Saint-Hostien', '31T', 582389, 4991568, 45.0728, 4.04667, 830),
('43195', 'Saint-Ilpize', '31T', 530394, 5004655, 45.1947, 3.38695, 480),
('43196', 'Saint-Jean-d''Aubrigoux', '31T', 563592, 5023264, 45.36, 3.81195, 980),
('43197', 'Saint-Jean-de-Nay', '31T', 554949, 4991087, 45.0711, 3.69805, 940),
('43198', 'Saint-Jean-Lachalm', '31T', 556659, 4978295, 44.9558, 3.71833, 1150),
('43199', 'Saint-Jeures', '31T', 595012, 4994244, 45.0953, 4.20751, 1040),
('43200', 'Saint-Julien-Chapteuil', '31T', 583580, 4987417, 45.0353, 4.06111, 840),
('43201', 'Saint-Julien-d''Ance', '31T', 571561, 5016991, 45.3028, 3.91278, 780),
('43202', 'Saint-Julien-des-Chazes', '31T', 546025, 4988362, 45.0472, 3.58444, 560),
('43203', 'Saint-Julien-du-Pinet', '31T', 581818, 5000264, 45.1511, 4.04084, 860),
('43204', 'Saint-Julien-Molhesabate', '31T', 611882, 5004643, 45.1864, 4.42417, 1053),
('43205', 'Saint-Just-Malmont', '31T', 602745, 5021496, 45.3394, 4.31139, 830),
('43206', 'Saint-Just-près-Brioude', '31T', 527601, 5009610, 45.2394, 3.35167, 564),
('43207', 'Saint-Laurent-Chabreuges', '31T', 526644, 5014143, 45.2803, 3.33972, 520),
('43208', 'Sainte-Marguerite', '31T', 546289, 5006201, 45.2078, 3.58944, 629),
('43210', 'Saint-Martin-de-Fugères', '31T', 573726, 4972852, 44.9053, 3.93389, 1010),
('43211', 'Saint-Maurice-de-Lignon', '31T', 589301, 5008544, 45.2247, 4.1375, 770),
('43212', 'Saint-Pal-de-Chalencon', '31T', 574692, 5022953, 45.3561, 3.95361, 890),
('43213', 'Saint-Pal-de-Mons', '31T', 600035, 5011174, 45.2469, 4.27472, 820),
('43214', 'Saint-Pal-de-Senouire', '31T', 551085, 5011978, 45.2594, 3.65111, 860),
('43215', 'Saint-Paul-de-Tartas', '31T', 571682, 4961441, 44.8028, 3.90639, 1200),
('43216', 'Saint-Paulien', '31T', 564036, 4998671, 45.1386, 3.81445, 810),
('43217', 'Saint-Pierre-du-Champ', '31T', 570541, 5010776, 45.2469, 3.89889, 951),
('43218', 'Saint-Pierre-Eynac', '31T', 581529, 4988687, 45.0469, 4.03528, 860),
('43219', 'Saint-Préjet-Armandon', '31T', 542327, 5011512, 45.2558, 3.53945, 661),
('43220', 'Saint-Préjet-d''Allier', '31T', 549091, 4973665, 44.9147, 3.62194, 860),
('43221', 'Saint-Privat-d''Allier', '31T', 553472, 4982064, 44.99, 3.67833, 880),
('43222', 'Saint-Privat-du-Dragon', '31T', 535176, 5003939, 45.1881, 3.44778, 680),
('43223', 'Saint-Romain-Lachalm', '31T', 604839, 5013381, 45.2661, 4.33639, 920),
('43224', 'Sainte-Sigolène', '31T', 596944, 5010817, 45.2442, 4.23527, 817),
('43225', 'Saint-Vénérand', '31T', 553741, 4968333, 44.8664, 3.68028, 1020),
('43226', 'Saint-Vert', '31T', 541632, 5024377, 45.3717, 3.53167, 780),
('43227', 'Saint-Victor-Malescours', '31T', 602897, 5016189, 45.2917, 4.31222, 880),
('43228', 'Saint-Victor-sur-Arlanc', '31T', 560660, 5020395, 45.3344, 3.77416, 980),
('43229', 'Saint-Vidal', '31T', 563101, 4991626, 45.0753, 3.80167, 760),
('43230', 'Saint-Vincent', '31T', 571453, 4999491, 45.1453, 3.90889, 580),
('43231', 'Salettes', '31T', 576393, 4968039, 44.8617, 3.96694, 900),
('43232', 'Salzuit', '31T', 538193, 5006641, 45.2122, 3.48639, 568),
('43233', 'Sanssac-l''Église', '31T', 561377, 4989016, 45.0519, 3.77945, 850),
('43234', 'Saugues', '31T', 543051, 4978497, 44.9586, 3.54583, 960),
('43236', 'La Séauve-sur-Semène', '31T', 597988, 5016605, 45.2961, 4.24972, 722),
('43237', 'Sembadel', '31T', 553729, 5013759, 45.2753, 3.685, 1061),
('43238', 'Séneujols', '31T', 561650, 4978866, 44.9606, 3.78167, 1040),
('43239', 'Siaugues-Sainte-Marie', '31T', 549638, 4993636, 45.0944, 3.63084, 906),
('43240', 'Solignac-sous-Roche', '31T', 578054, 5011513, 45.2528, 3.99472, 780),
('43241', 'Solignac-sur-Loire', '31T', 569965, 4979816, 44.9683, 3.88722, 850),
('43242', 'Tailhac', '31T', 536010, 4987711, 45.0419, 3.45722, 760),
('43244', 'Tence', '31T', 601576, 4996629, 45.1158, 4.29139, 849),
('43245', 'Thoras', '31T', 544482, 4968046, 44.8644, 3.56306, 1080),
('43246', 'Tiranges', '31T', 577396, 5017153, 45.3036, 3.98722, 860),
('43247', 'Torsiac', '31T', 516754, 5022194, 45.3531, 3.21389, 500),
('43249', 'Valprivas', '31T', 581849, 5018135, 45.3119, 4.04417, 830),
('43250', 'Vals-le-Chastel', '31T', 540900, 5013077, 45.27, 3.52139, 520),
('43251', 'Vals-près-le-Puy', '31T', 568949, 4986656, 45.03, 3.87527, 656),
('43252', 'Varennes-Saint-Honorat', '31T', 549979, 5003051, 45.1792, 3.63611, 1068),
('43253', 'Les Vastres', '31T', 599588, 4982554, 44.9894, 4.26333, 1120),
('43254', 'Vazeilles-Limandre', '31T', 554888, 4995685, 45.1125, 3.69778, 1000),
('43255', 'Vazeilles-près-Saugues', '31T', 546495, 4971887, 44.8989, 3.58889, 1020),
('43256', 'Venteuges', '31T', 539353, 4981251, 44.9836, 3.49916, 1060),
('43257', 'Vergezac', '31T', 557239, 4986972, 45.0339, 3.72667, 1040),
('43258', 'Vergongheon', '31T', 525144, 5024351, 45.3722, 3.32111, 460),
('43259', 'Vernassal', '31T', 555158, 4999853, 45.15, 3.70167, 930),
('43260', 'Le Vernet', '31T', 552968, 4987367, 45.0378, 3.67249, 1100),
('43261', 'Vézézoux', '31T', 527152, 5027847, 45.4036, 3.34695, 458),
('43262', 'Vieille-Brioude', '31T', 531708, 5012253, 45.2631, 3.40416, 460),
('43263', 'Vielprat', '31T', 575391, 4967440, 44.8564, 3.95417, 950),
('43264', 'Villeneuve-d''Allier', '31T', 529847, 5004899, 45.1969, 3.38, 470),
('43265', 'Les Villettes', '31T', 592928, 5009615, 45.2339, 4.18389, 730),
('43267', 'Vorey', '31T', 571292, 5004149, 45.1872, 3.90751, 540),
('43268', 'Yssingeaux', '31T', 588338, 4999395, 45.1425, 4.12361, 869),
('44001', 'Abbaretz', '30T', 610474, 5267578, 47.5522, -1.53167, 70),
('44002', 'Aigrefeuille-sur-Maine', '30T', 621573, 5214835, 47.0758, -1.39861, 43),
('44003', 'Ancenis', '30T', 637553, 5247922, 47.3703, -1.17805, 19),
('44004', 'Anetz', '30T', 643289, 5249326, 47.3817, -1.10166, 22),
('44005', 'Arthon-en-Retz', '30T', 580392, 5218519, 47.1153, -1.94028, 10),
('44006', 'Assérac', '30T', 546169, 5253163, 47.4303, -2.38778, 10),
('44007', 'Avessac', '30T', 575970, 5278236, 47.6531, -1.98833, 55),
('44008', 'Barbechat', '30T', 629767, 5237492, 47.2781, -1.28417, 77),
('44009', 'Basse-Goulaine', '30T', 616227, 5230292, 47.2158, -1.46501, 10),
('44010', 'Batz-sur-Mer', '30T', 539475, 5236104, 47.2772, -2.47806, 23),
('44011', 'Belligné', '30T', 648732, 5258882, 47.4664, -1.02639, 60),
('44012', 'La Bernerie-en-Retz', '30T', 573083, 5214782, 47.0825, -2.03722, 10),
('44013', 'Besné', '30T', 568584, 5249770, 47.3978, -2.09111, 10),
('44014', 'Le Bignon', '30T', 614590, 5217013, 47.0967, -1.49001, 20),
('44015', 'Blain', '30T', 593263, 5258817, 47.4761, -1.76222, 21),
('44016', 'La Boissière-du-Doré', '30T', 634757, 5232508, 47.2322, -1.21973, 80),
('44018', 'Bouaye', '30T', 599010, 5221951, 47.1436, -1.69416, 12),
('44019', 'Bouée', '30T', 582500, 5241118, 47.3183, -1.90833, 18),
('44020', 'Bouguenais', '30T', 604648, 5225969, 47.1789, -1.61889, 20),
('44021', 'Bourgneuf-en-Retz', '30T', 579826, 5210485, 47.0431, -1.94916, 10),
('44022', 'Boussay', '30T', 637809, 5211638, 47.0439, -1.18583, 70),
('44023', 'Bouvron', '30T', 586977, 5252113, 47.4167, -1.84695, 48),
('44024', 'Brains', '30T', 597067, 5224821, 47.1697, -1.71916, 25),
('44025', 'Campbon', '30T', 577974, 5251523, 47.4125, -1.96638, 40),
('44026', 'Carquefou', '30T', 613951, 5239203, 47.2964, -1.49278, 30),
('44027', 'Casson', '30T', 608893, 5249143, 47.3867, -1.55723, 34),
('44028', 'Le Cellier', '30T', 625090, 5241992, 47.3194, -1.34472, 63),
('44029', 'La Chapelle-Basse-Mer', '30T', 625727, 5236756, 47.2722, -1.33777, 50),
('44030', 'La Chapelle-des-Marais', '30T', 557294, 5255237, 47.4481, -2.24001, 5),
('44031', 'La Chapelle-Glain', '30T', 635618, 5276108, 47.6242, -1.195, 60),
('44032', 'La Chapelle-Heulin', '30T', 625806, 5226134, 47.1767, -1.33972, 13),
('44033', 'La Chapelle-Launay', '30T', 577657, 5246949, 47.3714, -1.97139, 50),
('44034', 'La Chapelle-Saint-Sauveur', '30T', 651986, 5256155, 47.4411, -0.984172, 70),
('44035', 'La Chapelle-sur-Erdre', '30T', 609601, 5239306, 47.2981, -1.55027, 30),
('44036', 'Châteaubriant', '30T', 621851, 5286397, 47.7194, -1.37528, 60),
('44037', 'Château-Thébaud', '30T', 619840, 5220204, 47.1244, -1.42, 50),
('44038', 'Chauvé', '30T', 576906, 5222456, 47.1511, -1.98555, 30),
('44039', 'Cheix-en-Retz', '30T', 589930, 5226128, 47.1825, -1.81305, 15),
('44040', 'Chéméré', '30T', 582343, 5219225, 47.1214, -1.91444, 10),
('44041', 'La Chevrolière', '30T', 605343, 5216502, 47.0936, -1.61194, 8),
('44043', 'Clisson', '30T', 630488, 5216229, 47.0867, -1.28083, 30),
('44044', 'Conquereuil', '30T', 594150, 5275197, 47.6233, -1.74694, 30),
('44045', 'Cordemais', '30T', 584916, 5238096, 47.2908, -1.87695, 10),
('44046', 'Corsept', '30T', 571409, 5236373, 47.2769, -2.05583, 5),
('44047', 'Couëron', '30T', 596316, 5229533, 47.2122, -1.72806, 10),
('44048', 'Couffé', '30T', 628779, 5250009, 47.3908, -1.29361, 20),
('44049', 'Le Croisic', '30T', 536923, 5237693, 47.2917, -2.51167, 10),
('44050', 'Crossac', '30T', 562679, 5251155, 47.4108, -2.16916, 5),
('44051', 'Derval', '30T', 600015, 5280112, 47.6667, -1.66778, 58),
('44052', 'Donges', '30T', 569923, 5241202, 47.3206, -2.07472, 11),
('44053', 'Drefféac', '30T', 571120, 5258476, 47.4758, -2.05611, 10),
('44054', 'Erbray', '30T', 626378, 5279482, 47.6564, -1.31695, 60),
('44055', 'La Baule-Escoublac', '30T', 547263, 5236963, 47.2844, -2.375, 7),
('44056', 'Fay-de-Bretagne', '30T', 591297, 5251993, 47.415, -1.78972, 40),
('44057', 'Fégréac', '30T', 571933, 5270620, 47.585, -2.04334, 30),
('44058', 'Fercé', '30T', 618818, 5295074, 47.7981, -1.41333, 90),
('44059', 'Fresnay-en-Retz', '30T', 585385, 5208400, 47.0236, -1.87639, 5),
('44060', 'Le Fresne-sur-Loire', '30T', 656422, 5251730, 47.4003, -0.926938, 26),
('44061', 'Frossay', '30T', 580787, 5232789, 47.2436, -1.9325, 34),
('44062', 'Le Gâvre', '30T', 594376, 5263806, 47.5208, -1.74639, 30),
('44063', 'Gétigné', '30T', 633047, 5214989, 47.075, -1.2475, 30),
('44064', 'Gorges', '30T', 628787, 5217798, 47.1011, -1.30278, 39),
('44065', 'Grand-Auverné', '30T', 625575, 5272207, 47.5911, -1.32972, 65),
('44066', 'Grandchamps-des-Fontaines', '30T', 605393, 5246671, 47.365, -1.60417, 30),
('44067', 'Guémené-Penfao', '30T', 587796, 5275715, 47.6289, -1.83139, 30),
('44068', 'Guenrouet', '30T', 578736, 5263390, 47.5192, -1.95417, 39),
('44069', 'Guérande', '30T', 543299, 5241903, 47.3292, -2.42694, 54),
('44070', 'La Haie-Fouassière', '30T', 621415, 5223602, 47.1547, -1.39833, 35),
('44071', 'Haute-Goulaine', '30T', 619147, 5228436, 47.1986, -1.42695, 20),
('44072', 'Herbignac', '30T', 551701, 5255401, 47.45, -2.31417, 10),
('44073', 'Héric', '30T', 601839, 5252012, 47.4136, -1.65, 36),
('44074', 'Indre', '30T', 600630, 5228246, 47.2, -1.67139, 10),
('44075', 'Issé', '30T', 616295, 5275566, 47.6231, -1.45222, 38),
('44076', 'Jans', '30T', 604170, 5275275, 47.6225, -1.61361, 20),
('44077', 'Joué-sur-Erdre', '30T', 619086, 5261509, 47.4961, -1.41889, 23),
('44078', 'Juigné-des-Moutiers', '30T', 636391, 5282334, 47.68, -1.18277, 80),
('44079', 'Le Landreau', '30T', 628387, 5229432, 47.2058, -1.30473, 66),
('44080', 'Lavau-sur-Loire', '30T', 578194, 5239670, 47.3058, -1.96556, 7),
('44081', 'Legé', '30T', 606749, 5193276, 46.8844, -1.59889, 36),
('44082', 'Ligné', '30T', 622440, 5252282, 47.4125, -1.37694, 38),
('44083', 'La Limouzinière', '30T', 606768, 5205195, 46.9917, -1.59584, 26),
('44084', 'Le Loroux-Bottereau', '30T', 625155, 5232976, 47.2383, -1.34639, 50),
('44085', 'Louisfert', '30T', 617679, 5281431, 47.6756, -1.43222, 71),
('44086', 'Lusanger', '30T', 605971, 5281854, 47.6814, -1.58805, 67),
('44087', 'Machecoul', '30T', 589615, 5205097, 46.9933, -1.82139, 5),
('44088', 'Maisdon-sur-Sèvre', '30T', 622641, 5217266, 47.0975, -1.38389, 55),
('44089', 'Malville', '30T', 585981, 5245738, 47.3594, -1.86139, 80),
('44090', 'La Marne', '30T', 595886, 5205319, 46.9944, -1.73889, 16),
('44091', 'Marsac-sur-Don', '30T', 599546, 5272168, 47.5953, -1.67584, 50),
('44092', 'Massérac', '30T', 581551, 5280442, 47.6722, -1.91361, 10),
('44093', 'Maumusson', '30T', 642870, 5260497, 47.4822, -1.1036, 52),
('44094', 'Mauves-sur-Loire', '30T', 621424, 5239507, 47.2978, -1.39389, 40),
('44095', 'La Meilleraye-de-Bretagne', '30T', 620260, 5268543, 47.5592, -1.40139, 85),
('44096', 'Mésanger', '30T', 633430, 5254808, 47.4331, -1.23056, 35),
('44097', 'Mesquer', '30T', 540914, 5249759, 47.4, -2.45778, 10),
('44098', 'Missillac', '30T', 563638, 5259285, 47.4839, -2.15528, 29),
('44099', 'Moisdon-la-Rivière', '30T', 622413, 5275537, 47.6217, -1.37083, 60),
('44100', 'Monnières', '30T', 624712, 5221046, 47.1311, -1.35556, 30),
('44101', 'La Montagne', '30T', 599702, 5227118, 47.19, -1.68389, 5),
('44102', 'Montbert', '30T', 614889, 5212479, 47.0558, -1.48722, 20),
('44103', 'Montoir-de-Bretagne', '30T', 564014, 5242030, 47.3286, -2.15278, 5),
('44104', 'Montrelais', '30T', 653671, 5250237, 47.3875, -0.963891, 16),
('44105', 'Mouais', '30T', 601689, 5283445, 47.6964, -1.64472, 30),
('44106', 'Les Moutiers-en-Retz', '30T', 575806, 5212871, 47.065, -2.00167, 5),
('44107', 'Mouzeil', '30T', 624596, 5256374, 47.4489, -1.34722, 40),
('44108', 'Mouzillon', '30T', 630355, 5222249, 47.1408, -1.28084, 30),
('44109', 'Nantes', '30T', 609490, 5230534, 47.2192, -1.55389, 20),
('44110', 'Nort-sur-Erdre', '30T', 612971, 5255181, 47.4403, -1.50167, 10),
('44111', 'Notre-Dame-des-Landes', '30T', 597393, 5248355, 47.3814, -1.70973, 60),
('44112', 'Noyal-sur-Brutz', '30T', 624027, 5292805, 47.7767, -1.34445, 80),
('44113', 'Nozay', '30T', 603450, 5268777, 47.5642, -1.62472, 57),
('44114', 'Orvault', '30T', 604386, 5236000, 47.2692, -1.62001, 40),
('44115', 'Oudon', '30T', 629490, 5245330, 47.3486, -1.28555, 20),
('44117', 'Le Pallet', '30T', 626194, 5221726, 47.1369, -1.33584, 30),
('44118', 'Pannecé', '30T', 632669, 5260689, 47.4861, -1.23888, 32),
('44119', 'Paulx', '30T', 594636, 5201563, 46.9608, -1.75611, 15),
('44120', 'Le Pellerin', '30T', 594338, 5228266, 47.2011, -1.75444, 10),
('44121', 'Petit-Auverné', '30T', 628619, 5274374, 47.61, -1.28862, 50),
('44122', 'Petit-Mars', '30T', 616654, 5250157, 47.3944, -1.45417, 27),
('44123', 'Pierric', '30T', 594994, 5282344, 47.6875, -1.73416, 20),
('44124', 'Le Pin', '30T', 638860, 5272385, 47.59, -1.15305, 74),
('44125', 'Piriac-sur-Mer', '30T', 536660, 5246242, 47.3686, -2.51444, 7),
('44126', 'La Plaine-sur-Mer', '30T', 561443, 5220855, 47.1383, -2.18972, 23),
('44127', 'La Planche', '30T', 618967, 5208020, 47.015, -1.43472, 20),
('44128', 'Plessé', '30T', 583805, 5265807, 47.5403, -1.88639, 30),
('44129', 'Pontchâteau', '30T', 568452, 5253875, 47.4347, -2.09223, 20),
('44130', 'Pont-Saint-Martin', '30T', 607474, 5219875, 47.1236, -1.58306, 5),
('44131', 'Pornic', '30T', 568019, 5218643, 47.1178, -2.10334, 20),
('44132', 'Pornichet', '30T', 550201, 5234889, 47.2656, -2.33639, 12),
('44133', 'Port-Saint-Père', '30T', 595024, 5220928, 47.135, -1.74694, 10),
('44134', 'Pouillé-les-Côteaux', '30T', 638587, 5257429, 47.4556, -1.16139, 70),
('44135', 'Le Pouliguen', '30T', 543219, 5235636, 47.2728, -2.4286, 5),
('44136', 'Préfailles', '30T', 559283, 5219876, 47.1297, -2.21833, 20),
('44137', 'Prinquiau', '30T', 574691, 5245954, 47.3628, -2.01084, 10),
('44138', 'Puceul', '30T', 604223, 5264097, 47.5219, -1.61555, 50),
('44139', 'Quilly', '30T', 578843, 5257000, 47.4617, -1.95389, 20),
('44140', 'La Regrippière', '30T', 638083, 5227025, 47.1822, -1.1775, 80),
('44141', 'La Remaudière', '30T', 632998, 5233117, 47.2381, -1.24277, 79),
('44142', 'Remouillé', '30T', 623268, 5212462, 47.0542, -1.37694, 37),
('44143', 'Rezé', '30T', 610318, 5226751, 47.185, -1.54389, 10),
('44144', 'Riaillé', '30T', 628548, 5264334, 47.5197, -1.2925, 50),
('44145', 'Rouans', '30T', 586557, 5226448, 47.1858, -1.8575, 17),
('44146', 'Rougé', '30T', 616228, 5293478, 47.7842, -1.44833, 79),
('44147', 'La Rouxière', '30T', 645804, 5256152, 47.4425, -1.06612, 60),
('44148', 'Ruffigné', '30T', 612915, 5290447, 47.7575, -1.49333, 80),
('44149', 'Saffré', '30T', 607088, 5261864, 47.5014, -1.57805, 30),
('44150', 'Saint-Aignan-Grandlieu', '30T', 603831, 5219717, 47.1228, -1.63111, 5),
('44151', 'Saint-André-des-Eaux', '30T', 552234, 5240247, 47.3136, -2.30889, 20),
('44152', 'Sainte-Anne-sur-Brivet', '30T', 575036, 5256734, 47.4597, -2.00444, 20),
('44153', 'Saint-Aubin-des-Châteaux', '30T', 613682, 5286355, 47.7206, -1.48417, 70),
('44154', 'Saint-Brevin-les-Pins', '30T', 563542, 5233288, 47.25, -2.16028, 10),
('44155', 'Saint-Colomban', '30T', 607830, 5207221, 47.0097, -1.58139, 20),
('44156', 'Corcoué-sur-Logne', '30T', 608362, 5202352, 46.9658, -1.57556, 30),
('44157', 'Saint-Étienne-de-Mer-Morte', '30T', 595726, 5198153, 46.93, -1.74251, 30),
('44158', 'Saint-Étienne-de-Montluc', '30T', 592373, 5236788, 47.2781, -1.77862, 20),
('44159', 'Saint-Fiacre-sur-Maine', '30T', 620135, 5222310, 47.1433, -1.41555, 46),
('44160', 'Saint-Géréon', '30T', 636084, 5247919, 47.3706, -1.1975, 30),
('44161', 'Saint-Gildas-des-Bois', '30T', 572405, 5262907, 47.5156, -2.03833, 20),
('44162', 'Saint-Herblain', '30T', 602289, 5229664, 47.2125, -1.64917, 17),
('44163', 'Saint-Herblon', '30T', 643743, 5252210, 47.4075, -1.09472, 60),
('44164', 'Saint-Hilaire-de-Chaléons', '30T', 586314, 5217121, 47.1019, -1.8625, 10),
('44165', 'Saint-Hilaire-de-Clisson', '30T', 628613, 5213193, 47.0597, -1.30639, 43),
('44166', 'Saint-Jean-de-Boiseau', '30T', 596769, 5227595, 47.1947, -1.7225, 20),
('44168', 'Saint-Joachim', '30T', 560403, 5248259, 47.385, -2.19972, 5),
('44169', 'Saint-Julien-de-Concelles', '30T', 621821, 5234543, 47.2531, -1.39, 10),
('44170', 'Saint-Julien-de-Vouvantes', '30T', 632336, 5278101, 47.6428, -1.23806, 74),
('44171', 'Saint-Léger-les-Vignes', '30T', 596267, 5220917, 47.1347, -1.73055, 5),
('44172', 'Sainte-Luce-sur-Loire', '30T', 614448, 5234179, 47.2511, -1.4875, 10),
('44173', 'Saint-Lumine-de-Clisson', '30T', 626239, 5215643, 47.0822, -1.33695, 30),
('44174', 'Saint-Lumine-de-Coutais', '30T', 596854, 5212065, 47.055, -1.72472, 22),
('44175', 'Saint-Lyphard', '30T', 552507, 5249666, 47.3983, -2.30416, 5),
('44176', 'Saint-Malo-de-Guersac', '30T', 561889, 5244570, 47.3517, -2.18055, 10),
('44178', 'Saint-Mars-de-Coutais', '30T', 596032, 5218505, 47.1131, -1.73417, 10),
('44179', 'Saint-Mars-du-Désert', '30T', 620448, 5247146, 47.3667, -1.40473, 60),
('44180', 'Saint-Mars-la-Jaille', '30T', 636753, 5265077, 47.5247, -1.18334, 30),
('44181', 'Saint-Même-le-Tenu', '30T', 591788, 5208064, 47.0197, -1.79222, 10),
('44182', 'Saint-Michel-Chef-Chef', '30T', 564635, 5225613, 47.1808, -2.14694, 30),
('44183', 'Saint-Molf', '30T', 543603, 5248945, 47.3925, -2.42222, 10),
('44184', 'Saint-Nazaire', '30T', 559053, 5236514, 47.2794, -2.21917, 10),
('44185', 'Saint-Nicolas-de-Redon', '30T', 570163, 5277082, 47.6433, -2.06584, 10),
('44186', 'Sainte-Pazanne', '30T', 590442, 5217398, 47.1039, -1.80806, 10),
('44187', 'Saint-Père-en-Retz', '30T', 572365, 5228604, 47.2069, -2.04445, 14),
('44188', 'Saint-Philbert-de-Grand-Lieu', '30T', 603304, 5210043, 47.0358, -1.64028, 5),
('44189', 'Sainte-Reine-de-Bretagne', '30T', 560819, 5254655, 47.4425, -2.19333, 10),
('44190', 'Saint-Sébastien-sur-Loire', '30T', 613117, 5228997, 47.2047, -1.50639, 10),
('44191', 'Saint-Sulpice-des-Landes', '30T', 634992, 5270688, 47.5756, -1.20499, 65),
('44192', 'Saint-Viaud', '30T', 574273, 5234216, 47.2572, -2.01833, 10),
('44193', 'Saint-Vincent-des-Landes', '30T', 613051, 5279147, 47.6558, -1.49445, 50),
('44194', 'Sautron', '30T', 600492, 5235098, 47.2617, -1.67167, 64),
('44195', 'Savenay', '30T', 579999, 5245931, 47.3619, -1.94056, 50),
('44196', 'Sévérac', '30T', 569416, 5266205, 47.5456, -2.0775, 35),
('44197', 'Sion-les-Mines', '30T', 605631, 5287932, 47.7361, -1.59111, 70),
('44198', 'Les Sorinières', '30T', 611641, 5222484, 47.1464, -1.5275, 31),
('44199', 'Soudan', '30T', 627013, 5288608, 47.7383, -1.30584, 80),
('44200', 'Soulvache', '30T', 614400, 5298537, 47.83, -1.47139, 54),
('44201', 'Sucé-sur-Erdre', '30T', 611254, 5244092, 47.3408, -1.52722, 20),
('44202', 'Teillé', '30T', 629714, 5257967, 47.4622, -1.27889, 47),
('44203', 'Le Temple-de-Bretagne', '30T', 591384, 5242330, 47.3281, -1.79055, 85),
('44204', 'Thouaré-sur-Loire', '30T', 617924, 5235946, 47.2664, -1.44111, 14),
('44205', 'Les Touches', '30T', 618369, 5255565, 47.4428, -1.43, 30),
('44206', 'Touvois', '30T', 600221, 5194985, 46.9008, -1.68417, 50),
('44207', 'Trans-sur-Erdre', '30T', 622622, 5259575, 47.4781, -1.3725, 40),
('44208', 'Treffieux', '30T', 609790, 5275039, 47.6194, -1.53889, 25),
('44209', 'Treillières', '30T', 603846, 5242784, 47.3303, -1.62556, 55),
('44210', 'Trignac', '30T', 561131, 5240703, 47.3169, -2.19112, 5),
('44211', 'La Turballe', '30T', 537114, 5244146, 47.3497, -2.50861, 7),
('44212', 'Vallet', '30T', 631333, 5224741, 47.1631, -1.26722, 50),
('44213', 'Varades', '30T', 648797, 5249710, 47.3839, -1.02861, 30),
('44214', 'Vay', '30T', 597848, 5267538, 47.5539, -1.69945, 60),
('44215', 'Vertou', '30T', 615802, 5225158, 47.1697, -1.47194, 30),
('44216', 'Vieillevigne', '30T', 619192, 5203114, 46.9708, -1.43305, 40),
('44217', 'Vigneux-de-Bretagne', '30T', 595500, 5242241, 47.3267, -1.73611, 60),
('44218', 'Villepot', '30T', 629147, 5292886, 47.7764, -1.27611, 90),
('44219', 'Vritz', '30T', 645189, 5271643, 47.5819, -1.06916, 50),
('44220', 'Vue', '30T', 585082, 5228064, 47.2006, -1.87666, 14),
('44221', 'La Chevallerais', '30T', 600144, 5257974, 47.4675, -1.67111, 25),
('44222', 'La Roche-Blanche', '30T', 640217, 5255831, 47.4408, -1.14028, 76),
('44223', 'Geneston', '30T', 613057, 5212259, 47.0542, -1.51139, 28),
('44224', 'La Grigonnais', '30T', 598983, 5263512, 47.5175, -1.68527, 50),
('45001', 'Adon', '31T', 484763, 5290078, 47.7639, 2.79666, 150),
('45002', 'Aillant-sur-Milleron', '31T', 494820, 5293302, 47.7931, 2.93084, 165),
('45004', 'Amilly', '31T', 482793, 5313578, 47.9753, 2.76944, 110),
('45005', 'Andonville', '31T', 428104, 5346764, 48.27, 2.03112, 136),
('45006', 'Ardon', '31T', 415638, 5292277, 47.7783, 1.87388, 106),
('45008', 'Artenay', '31T', 416606, 5325984, 48.0817, 1.88027, 122),
('45009', 'Aschères-le-Marché', '31T', 426242, 5328693, 48.1072, 2.00917, 125),
('45010', 'Ascoux', '31T', 444398, 5330680, 48.1269, 2.25278, 115),
('45011', 'Attray', '31T', 433932, 5330235, 48.1219, 2.11222, 130),
('45012', 'Audeville', '31T', 443551, 5347486, 48.2781, 2.23917, 127),
('45013', 'Augerville-la-Rivière', '31T', 458204, 5344487, 48.2522, 2.43695, 80),
('45014', 'Aulnay-la-Rivière', '31T', 453926, 5338191, 48.1953, 2.38, 90),
('45015', 'Autruy-sur-Juine', '31T', 433366, 5347256, 48.275, 2.10194, 110),
('45016', 'Autry-le-Châtel', '31T', 470098, 5271673, 47.5978, 2.60223, 170),
('45017', 'Auvilliers-en-Gâtinais', '31T', 462739, 5312531, 47.965, 2.50083, 120),
('45018', 'Auxy', '31T', 460927, 5329586, 48.1183, 2.475, 110),
('45019', 'Baccon', '31T', 397404, 5305140, 47.8914, 1.6275, 120),
('45020', 'Le Bardon', '31T', 399138, 5299798, 47.8436, 1.65194, 110),
('45021', 'Barville-en-Gâtinais', '31T', 455546, 5328853, 48.1114, 2.40278, 105),
('45022', 'Batilly-en-Gâtinais', '31T', 453878, 5324575, 48.0728, 2.38083, 111),
('45023', 'Batilly-en-Puisaye', '31T', 491274, 5273177, 47.6119, 2.88389, 185),
('45024', 'Baule', '31T', 400550, 5296068, 47.8103, 1.67166, 102),
('45025', 'Bazoches-les-Gallerandes', '31T', 428882, 5334773, 48.1622, 2.04361, 130),
('45026', 'Bazoches-sur-le-Betz', '31T', 499091, 5330965, 48.1319, 2.98778, 131),
('45027', 'Beauchamps-sur-Huillard', '31T', 459111, 5309745, 47.9397, 2.45249, 110),
('45028', 'Beaugency', '31T', 397347, 5292572, 47.7783, 1.62972, 100),
('45029', 'Beaulieu-sur-Loire', '31T', 486183, 5265500, 47.5428, 2.81639, 160),
('45030', 'Beaune-la-Rolande', '31T', 457579, 5324145, 48.0692, 2.43056, 105),
('45031', 'Bellegarde', '31T', 458426, 5315370, 47.9903, 2.44278, 113),
('45032', 'Le Bignon-Mirabeau', '31T', 494339, 5332543, 48.1461, 2.9239, 125),
('45033', 'Boësses', '31T', 458927, 5333243, 48.1511, 2.44777, 118),
('45034', 'Boigny-sur-Bionne', '31T', 425990, 5309057, 47.9306, 2.00917, 110),
('45035', 'Boiscommun', '31T', 453970, 5320560, 48.0367, 2.3825, 135),
('45036', 'Boismorand', '31T', 478986, 5292597, 47.7864, 2.71945, 150),
('45037', 'Boisseaux', '31T', 424869, 5345324, 48.2567, 1.98778, 135),
('45038', 'Bondaroy', '31T', 446041, 5336191, 48.1767, 2.27416, 100),
('45039', 'Bonnée', '31T', 454007, 5293976, 47.7975, 2.38583, 113),
('45040', 'Bonny-sur-Loire', '31T', 487943, 5267380, 47.5597, 2.83973, 140),
('45041', 'Bordeaux-en-Gâtinais', '31T', 464738, 5327338, 48.0983, 2.52639, 85),
('45042', 'Les Bordes', '31T', 455311, 5295818, 47.8142, 2.40306, 130),
('45043', 'Bou', '31T', 428816, 5302630, 47.8731, 2.04806, 100),
('45044', 'Bougy-lez-Neuville', '31T', 427450, 5321173, 48.0397, 2.02667, 129),
('45045', 'Bouilly-en-Gâtinais', '31T', 446721, 5327076, 48.0947, 2.28445, 105),
('45046', 'Boulay-les-Barres', '31T', 409250, 5314855, 47.9806, 1.78389, 125),
('45047', 'Bouzonville-aux-Bois', '31T', 443151, 5327913, 48.1019, 2.2364, 114),
('45049', 'Bouzy-la-Forêt', '31T', 453474, 5300063, 47.8522, 2.37806, 125),
('45050', 'Boynes', '31T', 452390, 5329774, 48.1194, 2.36028, 115),
('45051', 'Bray-en-Val', '31T', 452496, 5297416, 47.8283, 2.36528, 129),
('45052', 'Breteau', '31T', 492057, 5281049, 47.6828, 2.89417, 170),
('45053', 'Briare', '31T', 480178, 5276230, 47.6392, 2.73611, 130),
('45054', 'Briarres-sur-Essonne', '31T', 457482, 5341683, 48.2269, 2.4275, 95),
('45055', 'Bricy', '31T', 409156, 5316771, 47.9978, 1.78222, 125),
('45056', 'Bromeilles', '31T', 462589, 5337078, 48.1858, 2.49667, 110),
('45057', 'Labrosse', '31T', 454938, 5343524, 48.2433, 2.39305, 130),
('45058', 'Bucy-le-Roi', '31T', 419448, 5323534, 48.06, 1.91889, 125),
('45059', 'Bucy-Saint-Liphard', '31T', 407821, 5309751, 47.9344, 1.76584, 120),
('45060', 'La Bussière', '31T', 481301, 5287958, 47.7447, 2.75056, 160),
('45061', 'Cepoy', '31T', 480477, 5321397, 48.0456, 2.73805, 96),
('45062', 'Cercottes', '31T', 416534, 5315331, 47.9858, 1.88138, 121),
('45063', 'Cerdon', '31T', 452113, 5276208, 47.6375, 2.3625, 145),
('45064', 'Cernoy-en-Berry', '31T', 474455, 5265262, 47.5403, 2.66056, 190),
('45065', 'Césarville-Dossainville', '31T', 446253, 5345514, 48.2606, 2.27583, 135),
('45066', 'Chailly-en-Gâtinais', '31T', 466087, 5310534, 47.9472, 2.54584, 100),
('45067', 'Chaingy', '31T', 408250, 5304093, 47.8836, 1.77278, 109),
('45068', 'Châlette-sur-Loing', '31T', 480237, 5317631, 48.0117, 2.735, 87),
('45069', 'Chambon-la-Forêt', '31T', 447571, 5322745, 48.0558, 2.29639, 122),
('45070', 'Champoulet', '31T', 494056, 5278268, 47.6578, 2.92084, 187),
('45072', 'Chanteau', '31T', 423095, 5312986, 47.9656, 1.96972, 130),
('45073', 'Chantecoq', '31T', 496936, 5322013, 48.0514, 2.95888, 140),
('45074', 'La Chapelle-Onzerain', '31T', 396669, 5320904, 48.0331, 1.61388, 130),
('45075', 'La Chapelle-Saint-Mesmin', '31T', 413136, 5304388, 47.8869, 1.83806, 107),
('45076', 'La Chapelle-Saint-Sépulcre', '31T', 488587, 5318226, 48.0172, 2.84695, 117),
('45077', 'La Chapelle-sur-Aveyron', '31T', 489820, 5301397, 47.8658, 2.86388, 130),
('45078', 'Chapelon', '31T', 468567, 5320369, 48.0358, 2.57833, 87),
('45079', 'Le Charme', '31T', 499688, 5294009, 47.7994, 2.99583, 179),
('45080', 'Charmont-en-Beauce', '31T', 433661, 5342497, 48.2322, 2.10666, 125),
('45081', 'Charsonville', '31T', 393970, 5309279, 47.9281, 1.58056, 120),
('45082', 'Châteauneuf-sur-Loire', '31T', 441872, 5301650, 47.8656, 2.22277, 120),
('45083', 'Château-Renard', '31T', 494647, 5308924, 47.9336, 2.92833, 165),
('45084', 'Châtenoy', '31T', 454986, 5307430, 47.9186, 2.3975, 125),
('45085', 'Châtillon-Coligny', '31T', 488543, 5296398, 47.8208, 2.84694, 140),
('45086', 'Châtillon-le-Roi', '31T', 433758, 5334807, 48.1631, 2.10917, 130),
('45087', 'Châtillon-sur-Loire', '31T', 481497, 5271039, 47.5925, 2.75389, 150),
('45088', 'Chaussy', '31T', 424287, 5335666, 48.1697, 1.98167, 129),
('45089', 'Chécy', '31T', 427160, 5304812, 47.8925, 2.02555, 102),
('45091', 'Chevannes', '31T', 489728, 5331253, 48.1344, 2.86194, 100),
('45092', 'Chevillon-sur-Huillard', '31T', 472110, 5312200, 47.9625, 2.62639, 100),
('45093', 'Chevilly', '31T', 416168, 5320030, 48.0281, 1.87556, 124),
('45094', 'Chevry-sous-le-Bignon', '31T', 492499, 5331773, 48.1392, 2.89917, 120),
('45095', 'Chilleurs-aux-Bois', '31T', 435523, 5324628, 48.0717, 2.13444, 128),
('45096', 'Les Choux', '31T', 475766, 5293906, 47.7981, 2.67639, 145),
('45097', 'Chuelles', '31T', 497555, 5316517, 48.0019, 2.96722, 155),
('45098', 'Cléry-Saint-André', '31T', 406809, 5297168, 47.8211, 1.755, 90),
('45099', 'Coinces', '31T', 406049, 5318149, 48.0097, 1.74028, 120),
('45100', 'Combleux', '31T', 424575, 5305648, 47.8997, 1.99083, 100),
('45101', 'Combreux', '31T', 448113, 5311687, 47.9564, 2.30501, 130),
('45102', 'Conflans-sur-Loing', '31T', 484217, 5311073, 47.9528, 2.78861, 100),
('45103', 'Corbeilles', '31T', 466435, 5324055, 48.0689, 2.54944, 85),
('45104', 'Corquilleroy', '31T', 477496, 5321253, 48.0442, 2.69806, 95),
('45105', 'Cortrat', '31T', 482560, 5304872, 47.8969, 2.76667, 110),
('45106', 'Coudray', '31T', 453088, 5346750, 48.2722, 2.36778, 135),
('45107', 'Coudroy', '31T', 460229, 5306280, 47.9086, 2.46778, 110),
('45108', 'Coullons', '31T', 461825, 5274345, 47.6214, 2.49195, 160),
('45109', 'Coulmiers', '31T', 400179, 5309477, 47.9308, 1.66361, 115),
('45110', 'Courcelles', '31T', 449369, 5327175, 48.0958, 2.32, 105),
('45111', 'Courcy-aux-Loges', '31T', 441411, 5323638, 48.0633, 2.21361, 125),
('45112', 'La Cour-Marigny', '31T', 469956, 5304646, 47.8944, 2.59806, 107),
('45113', 'Courtemaux', '31T', 495342, 5321797, 48.0494, 2.9375, 120),
('45114', 'Courtempierre', '31T', 471525, 5327949, 48.1042, 2.6175, 85),
('45115', 'Courtenay', '31T', 504472, 5320655, 48.0392, 3.06, 170),
('45116', 'Cravant', '31T', 393268, 5298267, 47.8289, 1.57388, 118),
('45118', 'Crottes-en-Pithiverais', '31T', 430545, 5330491, 48.1239, 2.06667, 130),
('45119', 'Dadonville', '31T', 445898, 5334185, 48.1586, 2.27249, 115),
('45120', 'Dammarie-en-Puisaye', '31T', 490421, 5274877, 47.6272, 2.8725, 180),
('45121', 'Dammarie-sur-Loing', '31T', 491178, 5292349, 47.7844, 2.88223, 160),
('45122', 'Dampierre-en-Burly', '31T', 464030, 5290015, 47.7625, 2.52, 140),
('45123', 'Darvoy', '31T', 432563, 5301504, 47.8633, 2.09834, 102),
('45124', 'Desmonts', '31T', 462639, 5341678, 48.2272, 2.49694, 130),
('45125', 'Dimancheville', '31T', 457736, 5342608, 48.2353, 2.43083, 90),
('45126', 'Donnery', '31T', 432984, 5307335, 47.9158, 2.10306, 105),
('45127', 'Dordives', '31T', 482582, 5332659, 48.1469, 2.76583, 70),
('45129', 'Douchy', '31T', 504086, 5310003, 47.9433, 3.05472, 140),
('45130', 'Dry', '31T', 403815, 5294747, 47.7989, 1.71555, 90),
('45131', 'Échilleuses', '31T', 458607, 5334697, 48.1642, 2.44333, 121),
('45132', 'Égry', '31T', 458164, 5327722, 48.1014, 2.43806, 110),
('45133', 'Engenville', '31T', 444001, 5342973, 48.2375, 2.24583, 130),
('45134', 'Épieds-en-Beauce', '31T', 396753, 5311730, 47.9506, 1.61722, 122),
('45135', 'Erceville', '31T', 428535, 5343393, 48.2397, 2.03749, 132),
('45136', 'Ervauville', '31T', 498738, 5326149, 48.0886, 2.98305, 152),
('45137', 'Escrennes', '31T', 439526, 5331347, 48.1325, 2.18722, 115),
('45138', 'Escrignelles', '31T', 486666, 5284702, 47.7156, 2.82222, 165),
('45139', 'Estouy', '31T', 449912, 5337237, 48.1864, 2.32611, 110),
('45141', 'Faverelles', '31T', 494861, 5269129, 47.5756, 2.93167, 170),
('45142', 'Fay-aux-Loges', '31T', 435863, 5308661, 47.9281, 2.14139, 107),
('45143', 'Feins-en-Gâtinais', '31T', 488090, 5288125, 47.7464, 2.84112, 160),
('45144', 'Férolles', '31T', 433482, 5298375, 47.8353, 2.11111, 101),
('45145', 'Ferrières-en-Gâtinais', '31T', 484425, 5326541, 48.0919, 2.79084, 97),
('45146', 'La Ferté-Saint-Aubin', '31T', 420458, 5285571, 47.7186, 1.93944, 108),
('45147', 'Fleury-les-Aubrais', '31T', 419120, 5309026, 47.9294, 1.91722, 120),
('45148', 'Fontenay-sur-Loing', '31T', 483125, 5327810, 48.1033, 2.77333, 75),
('45149', 'Foucherolles', '31T', 501220, 5326550, 48.0922, 3.01638, 163),
('45150', 'Fréville-du-Gâtinais', '31T', 458535, 5318981, 48.0228, 2.44389, 104),
('45151', 'Gaubertin', '31T', 457147, 5330014, 48.1219, 2.42417, 105),
('45152', 'Gémigny', '31T', 402565, 5313080, 47.9636, 1.69473, 117);
INSERT INTO `ods_communes` (`oc_code_insee`, `oc_nom`, `oc_secteur`, `oc_x_utm`, `oc_y_utm`, `oc_latitude`, `oc_longitude`, `oc_altitude`) VALUES
('45153', 'Germigny-des-Prés', '31T', 445155, 5299426, 47.8458, 2.26695, 110),
('45154', 'Gidy', '31T', 413121, 5315783, 47.9894, 1.83556, 120),
('45155', 'Gien', '31T', 472235, 5282036, 47.6911, 2.63, 152),
('45156', 'Girolles', '31T', 478931, 5323100, 48.0608, 2.71722, 95),
('45157', 'Givraines', '31T', 452995, 5332949, 48.1481, 2.36806, 115),
('45158', 'Gondreville', '31T', 474227, 5321853, 48.0494, 2.65417, 92),
('45159', 'Grangermont', '31T', 457327, 5337516, 48.1894, 2.42584, 125),
('45160', 'Greneville-en-Beauce', '31T', 434071, 5336872, 48.1817, 2.11306, 125),
('45161', 'Griselles', '31T', 487297, 5325144, 48.0794, 2.82945, 108),
('45162', 'Guigneville', '31T', 438869, 5339474, 48.2056, 2.17722, 129),
('45164', 'Guilly', '31T', 445859, 5294757, 47.8039, 2.27694, 110),
('45165', 'Gy-les-Nonains', '31T', 489006, 5310290, 47.9458, 2.85277, 105),
('45166', 'Huêtre', '31T', 410207, 5319008, 48.0181, 1.79584, 120),
('45167', 'Huisseau-sur-Mauves', '31T', 403135, 5305072, 47.8917, 1.70416, 108),
('45168', 'Ingrannes', '31T', 441288, 5315674, 47.9917, 2.21305, 120),
('45169', 'Ingré', '31T', 412545, 5307917, 47.9186, 1.82944, 115),
('45170', 'Intville-la-Guétard', '31T', 441615, 5345591, 48.2608, 2.21334, 123),
('45171', 'Isdes', '31T', 444158, 5280015, 47.6711, 2.25612, 150),
('45173', 'Jargeau', '31T', 434312, 5301855, 47.8667, 2.12167, 110),
('45174', 'Jouy-en-Pithiverais', '31T', 434020, 5332457, 48.1419, 2.11306, 121),
('45175', 'Jouy-le-Potier', '31T', 410841, 5288891, 47.7472, 1.81056, 115),
('45176', 'Juranville', '31T', 462430, 5322320, 48.0531, 2.49583, 95),
('45177', 'Laas', '31T', 441702, 5329873, 48.1194, 2.21667, 115),
('45178', 'Ladon', '31T', 465460, 5316651, 48.0022, 2.53695, 99),
('45179', 'Lailly-en-Val', '31T', 402121, 5291749, 47.7717, 1.69361, 90),
('45180', 'Langesse', '31T', 474549, 5296258, 47.8192, 2.66, 130),
('45181', 'Léouville', '31T', 432268, 5341556, 48.2236, 2.08806, 130),
('45182', 'Ligny-le-Ribault', '31T', 408502, 5281856, 47.6836, 1.78084, 91),
('45183', 'Lion-en-Beauce', '31T', 420848, 5331945, 48.1358, 1.93611, 130),
('45184', 'Lion-en-Sullias', '31T', 461693, 5286017, 47.7264, 2.48917, 130),
('45185', 'Lombreuil', '31T', 472597, 5309882, 47.9417, 2.63306, 100),
('45186', 'Lorcy', '31T', 465288, 5322580, 48.0556, 2.53416, 90),
('45187', 'Lorris', '31T', 463682, 5304096, 47.8892, 2.51417, 120),
('45188', 'Loury', '31T', 431932, 5316734, 48.0003, 2.0875, 120),
('45189', 'Louzouer', '31T', 491283, 5320444, 48.0372, 2.88306, 127),
('45190', 'Mainvilliers', '31T', 446563, 5349927, 48.3003, 2.27945, 132),
('45191', 'Malesherbes', '31T', 456426, 5349256, 48.295, 2.4125, 100),
('45192', 'Manchecourt', '31T', 451077, 5342970, 48.2381, 2.34112, 133),
('45193', 'Marcilly-en-Villette', '31T', 426690, 5290645, 47.765, 2.02166, 120),
('45194', 'Mardié', '31T', 429518, 5304041, 47.8858, 2.05722, 110),
('45195', 'Mareau-aux-Bois', '31T', 439614, 5327888, 48.1014, 2.18889, 113),
('45196', 'Mareau-aux-Prés', '31T', 410222, 5299986, 47.8469, 1.80001, 101),
('45197', 'Marigny-les-Usages', '31T', 426607, 5311952, 47.9567, 2.01694, 130),
('45198', 'Marsainvilliers', '31T', 446831, 5341093, 48.2208, 2.28417, 130),
('45199', 'Melleroy', '31T', 496553, 5304600, 47.8947, 2.95388, 166),
('45200', 'Ménestreau-en-Villette', '31T', 426704, 5283482, 47.7006, 2.02306, 120),
('45201', 'Mérinville', '31T', 495635, 5325379, 48.0817, 2.94139, 145),
('45202', 'Messas', '31T', 397739, 5295901, 47.8083, 1.63417, 110),
('45203', 'Meung-sur-Loire', '31T', 402245, 5297892, 47.8269, 1.69388, 90),
('45204', 'Mézières-lez-Cléry', '31T', 410630, 5296830, 47.8186, 1.80611, 97),
('45205', 'Mézières-en-Gâtinais', '31T', 461961, 5320224, 48.0342, 2.48973, 98),
('45206', 'Mignères', '31T', 471928, 5321586, 48.0469, 2.62333, 89),
('45207', 'Mignerette', '31T', 470213, 5322305, 48.0533, 2.60027, 85),
('45208', 'Montargis', '31T', 481143, 5316146, 47.9983, 2.74722, 90),
('45209', 'Montbarrois', '31T', 455405, 5321382, 48.0442, 2.40166, 130),
('45210', 'Montbouy', '31T', 486496, 5301003, 47.8622, 2.81945, 120),
('45211', 'Montcorbon', '31T', 505225, 5312845, 47.9689, 3.07, 160),
('45212', 'Montcresson', '31T', 485552, 5305945, 47.9067, 2.80666, 120),
('45213', 'Montereau', '31T', 468085, 5300489, 47.8569, 2.57334, 120),
('45214', 'Montigny', '31T', 433754, 5329095, 48.1117, 2.11, 130),
('45215', 'Montliard', '31T', 455032, 5318637, 48.0194, 2.39695, 126),
('45216', 'Mormant-sur-Vernisson', '31T', 480544, 5310529, 47.9478, 2.73944, 95),
('45217', 'Morville-en-Beauce', '31T', 438592, 5344418, 48.25, 2.17278, 127),
('45218', 'Le Moulinet-sur-Solin', '31T', 472106, 5298368, 47.8381, 2.62723, 130),
('45219', 'Moulon', '31T', 469531, 5318604, 48.02, 2.59139, 100),
('45220', 'Nancray-sur-Rimarde', '31T', 450418, 5324078, 48.0681, 2.33444, 110),
('45221', 'Nangeville', '31T', 449785, 5350885, 48.3092, 2.32278, 138),
('45222', 'Nargis', '31T', 481887, 5328555, 48.11, 2.75667, 90),
('45223', 'Nesploy', '31T', 452359, 5316065, 47.9961, 2.36139, 130),
('45224', 'Neuville-aux-Bois', '31T', 429519, 5324451, 48.0694, 2.05388, 127),
('45225', 'La Neuville-sur-Essonne', '31T', 453649, 5337205, 48.1864, 2.37638, 92),
('45226', 'Neuvy-en-Sullias', '31T', 443438, 5293915, 47.7961, 2.24472, 114),
('45227', 'Nevoy', '31T', 468746, 5284400, 47.7122, 2.58333, 128),
('45228', 'Nibelle', '31T', 449856, 5318958, 48.0219, 2.3275, 123),
('45229', 'Nogent-sur-Vernisson', '31T', 480672, 5299291, 47.8467, 2.74166, 125),
('45230', 'Noyers', '31T', 464571, 5306900, 47.9144, 2.52583, 110),
('45231', 'Oison', '31T', 423393, 5332158, 48.1381, 1.97028, 135),
('45232', 'Olivet', '31T', 417750, 5301727, 47.8636, 1.90028, 100),
('45233', 'Ondreville-sur-Essonne', '31T', 456076, 5338668, 48.1997, 2.40888, 90),
('45234', 'Orléans', '31T', 418333, 5306196, 47.9039, 1.90722, 110),
('45235', 'Ormes', '31T', 411672, 5310555, 47.9422, 1.81722, 120),
('45236', 'Orveau-Bellesauve', '31T', 450233, 5347917, 48.2825, 2.32917, 120),
('45237', 'Orville', '31T', 458258, 5343376, 48.2422, 2.43778, 90),
('45238', 'Ousson-sur-Loire', '31T', 484065, 5270723, 47.5897, 2.78806, 133),
('45239', 'Oussoy-en-Gâtinais', '31T', 473264, 5306050, 47.9072, 2.64223, 103),
('45240', 'Outarville', '31T', 427278, 5340228, 48.2111, 2.02111, 134),
('45241', 'Ouvrouer-les-Champs', '31T', 438656, 5298071, 47.8331, 2.18028, 105),
('45242', 'Ouzouer-des-Champs', '31T', 478027, 5303221, 47.8819, 2.70611, 110),
('45243', 'Ouzouer-sous-Bellegarde', '31T', 460292, 5315511, 47.9917, 2.46777, 108),
('45244', 'Ouzouer-sur-Loire', '31T', 461057, 5290497, 47.7667, 2.48028, 140),
('45245', 'Ouzouer-sur-Trézée', '31T', 485612, 5279888, 47.6722, 2.80833, 150),
('45246', 'Pannecières', '31T', 436769, 5349224, 48.2931, 2.14751, 131),
('45247', 'Pannes', '31T', 475226, 5318329, 48.0178, 2.66777, 92),
('45248', 'Patay', '31T', 402807, 5322495, 48.0483, 1.69584, 121),
('45249', 'Paucourt', '31T', 484697, 5320180, 48.0347, 2.79472, 120),
('45250', 'Pers-en-Gâtinais', '31T', 492930, 5329457, 48.1183, 2.905, 120),
('45251', 'Pierrefitte-ès-Bois', '31T', 478664, 5261633, 47.5078, 2.71666, 210),
('45252', 'Pithiviers', '31T', 444737, 5335895, 48.1739, 2.25666, 110),
('45253', 'Pithiviers-le-Vieil', '31T', 441274, 5334509, 48.1611, 2.21028, 110),
('45254', 'Poilly-lez-Gien', '31T', 469810, 5280566, 47.6778, 2.59778, 125),
('45255', 'Préfontaines', '31T', 477027, 5328356, 48.1081, 2.69139, 90),
('45256', 'Presnoy', '31T', 466840, 5311672, 47.9575, 2.55583, 100),
('45257', 'Pressigny-les-Pins', '31T', 481433, 5303178, 47.8817, 2.75166, 110),
('45258', 'Puiseaux', '31T', 460868, 5339096, 48.2039, 2.47333, 95),
('45259', 'Quiers-sur-Bézonde', '31T', 458061, 5316453, 48, 2.43778, 110),
('45260', 'Ramoulu', '31T', 447557, 5341549, 48.225, 2.29389, 126),
('45261', 'Rebréchien', '31T', 428682, 5315322, 47.9872, 2.04417, 120),
('45262', 'Rouvray-Sainte-Croix', '31T', 405622, 5323683, 48.0594, 1.73334, 128),
('45263', 'Rouvres-Saint-Jean', '31T', 441562, 5352446, 48.3225, 2.21167, 133),
('45264', 'Rozières-en-Beauce', '31T', 403002, 5310726, 47.9425, 1.70111, 115),
('45265', 'Rosoy-le-Vieil', '31T', 495886, 5330041, 48.1236, 2.94472, 130),
('45266', 'Ruan', '31T', 421183, 5329254, 48.1117, 1.94111, 125),
('45267', 'Saint-Aignan-des-Gués', '31T', 449119, 5298741, 47.84, 2.32001, 115),
('45268', 'Saint-Aignan-le-Jaillard', '31T', 457916, 5287926, 47.7433, 2.43862, 130),
('45269', 'Saint-Ay', '31T', 406857, 5301429, 47.8594, 1.75473, 100),
('45270', 'Saint-Benoît-sur-Loire', '31T', 448195, 5295384, 47.8097, 2.30806, 111),
('45271', 'Saint-Brisson-sur-Loire', '31T', 476092, 5277141, 47.6472, 2.68166, 150),
('45272', 'Saint-Cyr-en-Val', '31T', 422813, 5298075, 47.8314, 1.96861, 100),
('45273', 'Saint-Denis-de-l''Hôtel', '31T', 434735, 5302529, 47.8728, 2.12722, 110),
('45274', 'Saint-Denis-en-Val', '31T', 421968, 5303274, 47.8781, 1.95638, 95),
('45275', 'Saint-Firmin-des-Bois', '31T', 493531, 5312537, 47.9661, 2.91334, 150),
('45276', 'Saint-Firmin-sur-Loire', '31T', 479839, 5274749, 47.6258, 2.73166, 140),
('45277', 'Saint-Florent', '31T', 460624, 5281979, 47.69, 2.47528, 150),
('45278', 'Sainte-Geneviève-des-Bois', '31T', 486505, 5296156, 47.8186, 2.81972, 130),
('45279', 'Saint-Germain-des-Prés', '31T', 488801, 5311340, 47.9553, 2.85, 110),
('45280', 'Saint-Gondon', '31T', 465591, 5282874, 47.6983, 2.54139, 126),
('45281', 'Saint-Hilaire-les-Andrésis', '31T', 501076, 5322043, 48.0517, 3.01444, 133),
('45282', 'Saint-Hilaire-Saint-Mesmin', '31T', 412514, 5301742, 47.8631, 1.83028, 100),
('45283', 'Saint-Hilaire-sur-Puiseaux', '31T', 478118, 5305320, 47.9008, 2.70722, 105),
('45284', 'Saint-Jean-de-Braye', '31T', 422695, 5306321, 47.9056, 1.96556, 110),
('45285', 'Saint-Jean-de-la-Ruelle', '31T', 415912, 5306787, 47.9089, 1.87472, 115),
('45286', 'Saint-Jean-le-Blanc', '31T', 419948, 5304351, 47.8875, 1.92917, 95),
('45287', 'Saint-Loup-de-Gonois', '31T', 494205, 5322756, 48.0581, 2.92223, 121),
('45288', 'Saint-Loup-des-Vignes', '31T', 456872, 5320970, 48.0406, 2.42139, 130),
('45289', 'Saint-Lyé-la-Forêt', '31T', 424284, 5321369, 48.0411, 1.98417, 126),
('45290', 'Saint-Martin-d''Abbat', '31T', 445208, 5300691, 47.8572, 2.2675, 125),
('45291', 'Saint-Martin-sur-Ocre', '31T', 474325, 5278476, 47.6592, 2.65806, 134),
('45292', 'Saint-Maurice-sur-Aveyron', '31T', 494514, 5299724, 47.8508, 2.92667, 163),
('45293', 'Saint-Maurice-sur-Fessard', '31T', 471691, 5315413, 47.9914, 2.62056, 92),
('45294', 'Saint-Michel', '31T', 453832, 5324019, 48.0678, 2.38028, 115),
('45296', 'Saint-Péravy-la-Colombe', '31T', 403091, 5317240, 48.0011, 1.70083, 125),
('45297', 'Saint-Père-sur-Loire', '31T', 452987, 5291329, 47.7736, 2.3725, 116),
('45298', 'Saint-Pryvé-Saint-Mesmin', '31T', 415496, 5303859, 47.8825, 1.86973, 92),
('45299', 'Saint-Sigismond', '31T', 401582, 5315073, 47.9814, 1.68111, 124),
('45300', 'Sandillon', '31T', 427718, 5299586, 47.8456, 2.03389, 98),
('45301', 'Santeau', '31T', 437365, 5326522, 48.0889, 2.15889, 120),
('45302', 'Saran', '31T', 416270, 5311413, 47.9506, 1.87861, 120),
('45303', 'Sceaux-du-Gâtinais', '31T', 469974, 5328080, 48.1053, 2.59666, 85),
('45305', 'Seichebrières', '31T', 445596, 5313161, 47.9694, 2.27111, 133),
('45306', 'La Selle-en-Hermoy', '31T', 492190, 5317448, 48.0103, 2.89528, 130),
('45307', 'La Selle-sur-le-Bied', '31T', 492260, 5323375, 48.0636, 2.89611, 110),
('45308', 'Semoy', '31T', 421614, 5309300, 47.9322, 1.95055, 122),
('45309', 'Sennely', '31T', 436120, 5281085, 47.68, 2.1489, 130),
('45310', 'Sermaises', '31T', 440851, 5349427, 48.2953, 2.20251, 125),
('45311', 'Sigloy', '31T', 442045, 5298159, 47.8342, 2.22555, 110),
('45312', 'Solterre', '31T', 480798, 5305866, 47.9058, 2.74305, 110),
('45313', 'Sougy', '31T', 409793, 5322999, 48.0539, 1.78945, 129),
('45314', 'Sully-la-Chapelle', '31T', 438969, 5313938, 47.9758, 2.18222, 110),
('45315', 'Sully-sur-Loire', '31T', 453041, 5290341, 47.7647, 2.37333, 115),
('45316', 'Sury-aux-Bois', '31T', 450860, 5312774, 47.9664, 2.34167, 127),
('45317', 'Tavers', '31T', 396142, 5290340, 47.7581, 1.61417, 82),
('45320', 'Thignonville', '31T', 438669, 5347721, 48.2797, 2.17334, 127),
('45321', 'Thimory', '31T', 470200, 5307794, 47.9228, 2.60111, 102),
('45322', 'Thorailles', '31T', 492482, 5318868, 48.0231, 2.89917, 140),
('45323', 'Thou', '31T', 493149, 5269625, 47.58, 2.9089, 185),
('45324', 'Tigy', '31T', 439985, 5293919, 47.7958, 2.19862, 110),
('45325', 'Tivernon', '31T', 420611, 5334233, 48.1564, 1.9325, 132),
('45326', 'Tournoisis', '31T', 397945, 5318102, 48.0081, 1.63166, 125),
('45327', 'Traînou', '31T', 433164, 5313909, 47.975, 2.10445, 135),
('45328', 'Treilles-en-Gâtinais', '31T', 474716, 5324815, 48.0761, 2.66055, 95),
('45329', 'Triguères', '31T', 499004, 5309662, 47.9403, 2.98666, 117),
('45330', 'Trinay', '31T', 422240, 5326368, 48.0858, 1.95584, 123),
('45331', 'Vannes-sur-Cosson', '31T', 440889, 5284678, 47.7128, 2.21194, 130),
('45332', 'Varennes-Changy', '31T', 474614, 5301475, 47.8661, 2.66056, 140),
('45333', 'Vennecy', '31T', 429568, 5311482, 47.9528, 2.05667, 115),
('45334', 'Vieilles-Maisons-sur-Joudry', '31T', 458529, 5303791, 47.8861, 2.44527, 120),
('45335', 'Vienne-en-Val', '31T', 435269, 5294587, 47.8014, 2.13555, 110),
('45336', 'Viglain', '31T', 447656, 5286404, 47.7289, 2.30194, 130),
('45337', 'Villamblain', '31T', 391962, 5318427, 48.01, 1.55139, 130),
('45338', 'Villemandeur', '31T', 478301, 5315291, 47.9906, 2.70916, 90),
('45339', 'Villemoutiers', '31T', 467113, 5315838, 47.995, 2.55917, 98),
('45340', 'Villemurlin', '31T', 450051, 5281536, 47.6853, 2.33444, 135),
('45341', 'Villeneuve-sur-Conie', '31T', 399528, 5322088, 48.0442, 1.65195, 120),
('45342', 'Villereau', '31T', 424863, 5324480, 48.0692, 1.99139, 128),
('45343', 'Villevoques', '31T', 472270, 5319640, 48.0294, 2.62805, 95),
('45344', 'Villorceau', '31T', 395020, 5295085, 47.8006, 1.59806, 113),
('45345', 'Vimory', '31T', 476770, 5310728, 47.9494, 2.68889, 97),
('45346', 'Vitry-aux-Loges', '31T', 445234, 5309984, 47.9408, 2.26666, 123),
('45347', 'Vrigny', '31T', 443707, 5325654, 48.0817, 2.24416, 125),
('45348', 'Yèvre-la-Ville', '31T', 449810, 5332668, 48.1453, 2.32527, 110),
('46001', 'Albas', '31T', 359589, 4925438, 44.4686, 1.23473, 110),
('46002', 'Albiac', '31T', 406047, 4957562, 44.7653, 1.81277, 386),
('46003', 'Alvignac', '31T', 396751, 4964680, 44.8281, 1.69389, 360),
('46004', 'Anglars', '31T', 413240, 4954498, 44.7386, 1.90417, 400),
('46005', 'Anglars-Juillac', '31T', 357625, 4928629, 44.4969, 1.20917, 100),
('46006', 'Anglars-Nozac', '31T', 374537, 4959858, 44.7811, 1.41417, 220),
('46007', 'Arcambal', '31T', 381701, 4923517, 44.4553, 1.51306, 140),
('46008', 'Les Arques', '31T', 361145, 4940284, 44.6025, 1.25028, 211),
('46009', 'Assier', '31T', 411010, 4947523, 44.6756, 1.87722, 342),
('46010', 'Aujols', '31T', 384548, 4918249, 44.4083, 1.55001, 260),
('46011', 'Autoire', '31T', 407004, 4967424, 44.8542, 1.82306, 177),
('46012', 'Aynac', '31T', 409285, 4959490, 44.7831, 1.85334, 348),
('46013', 'Bach', '31T', 394063, 4911576, 44.3497, 1.67083, 310),
('46014', 'Bagat-en-Quercy', '31T', 360039, 4914501, 44.3703, 1.24333, 192),
('46015', 'Bagnac-sur-Célé', '31T', 433347, 4946359, 44.6675, 2.15916, 240),
('46016', 'Baladou', '31T', 386007, 4975634, 44.925, 1.55555, 240),
('46017', 'Bannes', '31T', 413875, 4962514, 44.8108, 1.91083, 520),
('46018', 'Le Bastit', '31T', 394206, 4952838, 44.7211, 1.66416, 308),
('46019', 'Beaumat', '31T', 382664, 4946155, 44.6592, 1.52, 340),
('46020', 'Beauregard', '31T', 403730, 4910902, 44.345, 1.79222, 368),
('46021', 'Béduer', '31T', 416377, 4936866, 44.5803, 1.94666, 283),
('46022', 'Bélaye', '31T', 356107, 4924928, 44.4633, 1.19111, 200),
('46023', 'Belfort-du-Quercy', '31T', 383651, 4902679, 44.2681, 1.54222, 270),
('46024', 'Belmont-Bretenoux', '31T', 411601, 4971278, 44.8894, 1.88055, 300),
('46025', 'Belmontet', '31T', 352746, 4914136, 44.3656, 1.15195, 210),
('46026', 'Belmont-Sainte-Foi', '31T', 390795, 4904192, 44.2828, 1.63139, 274),
('46027', 'Berganty', '31T', 392397, 4921973, 44.4431, 1.64778, 330),
('46028', 'Bétaille', '31T', 400050, 4977621, 44.945, 1.73306, 123),
('46029', 'Biars-sur-Cère', '31T', 410234, 4975464, 44.9269, 1.8625, 144),
('46030', 'Bio', '31T', 404011, 4959598, 44.7833, 1.78667, 320),
('46031', 'Blars', '31T', 398294, 4935705, 44.5675, 1.71917, 300),
('46032', 'Boissières', '31T', 372964, 4933497, 44.5436, 1.40083, 200),
('46033', 'Le Boulvé', '31T', 352417, 4920164, 44.4197, 1.14611, 150),
('46034', 'Le Bourg', '31T', 412998, 4951230, 44.7092, 1.90167, 348),
('46035', 'Boussac', '31T', 414115, 4939210, 44.6011, 1.91778, 180),
('46036', 'Le Bouyssou', '31T', 416274, 4949304, 44.6922, 1.94334, 394),
('46037', 'Bouziès', '31T', 391834, 4926674, 44.4853, 1.63973, 140),
('46038', 'Bretenoux', '31T', 408196, 4974012, 44.9136, 1.83695, 137),
('46039', 'Brengues', '31T', 407156, 4936745, 44.5781, 1.83056, 180),
('46040', 'Cabrerets', '31T', 392955, 4929001, 44.5064, 1.65334, 141),
('46041', 'Cadrieu', '31T', 410819, 4927219, 44.4928, 1.87833, 180),
('46042', 'Cahors', '31T', 375961, 4922790, 44.4478, 1.44111, 122),
('46043', 'Cahus', '31T', 414616, 4978552, 44.9553, 1.9175, 420),
('46044', 'Caillac', '31T', 369022, 4927402, 44.4881, 1.35277, 130),
('46045', 'Cajarc', '31T', 407872, 4926612, 44.4869, 1.84138, 160),
('46046', 'Calamane', '31T', 372285, 4931504, 44.5256, 1.39278, 154),
('46047', 'Calès', '31T', 384530, 4962974, 44.8108, 1.53973, 269),
('46048', 'Calviac', '31T', 424806, 4974845, 44.9231, 2.04722, 598),
('46049', 'Calvignac', '31T', 402978, 4924307, 44.4656, 1.78028, 140),
('46050', 'Cambayrac', '31T', 363538, 4920847, 44.4281, 1.28556, 269),
('46051', 'Cambes', '31T', 415919, 4940637, 44.6142, 1.94028, 320),
('46052', 'Camboulit', '31T', 416493, 4939025, 44.5997, 1.94777, 265),
('46053', 'Camburat', '31T', 420413, 4943975, 44.6447, 1.99639, 210),
('46054', 'Caniac-du-Causse', '31T', 392196, 4941822, 44.6217, 1.64111, 370),
('46055', 'Capdenac', '31T', 426124, 4936686, 44.5797, 2.06945, 260),
('46056', 'Carayac', '31T', 414435, 4933435, 44.5492, 1.92278, 340),
('46057', 'Cardaillac', '31T', 420482, 4947831, 44.6794, 1.99666, 358),
('46058', 'Carennac', '31T', 399981, 4974629, 44.9181, 1.73278, 120),
('46059', 'Carlucet', '31T', 390313, 4952934, 44.7214, 1.615, 290),
('46060', 'Carnac-Rouffiac', '31T', 359236, 4919334, 44.4136, 1.23195, 220),
('46061', 'Cassagnes', '31T', 352372, 4935693, 44.5594, 1.14111, 200),
('46062', 'Castelfranc', '31T', 358787, 4929221, 44.5025, 1.22362, 100),
('46063', 'Castelnau-Montratier', '31T', 368442, 4902967, 44.2681, 1.35166, 250),
('46064', 'Catus', '31T', 367874, 4935019, 44.5564, 1.33639, 168),
('46065', 'Cavagnac', '31T', 392895, 4984929, 45.0097, 1.64083, 160),
('46066', 'Cazals', '31T', 359042, 4944991, 44.6444, 1.2225, 180),
('46067', 'Cazillac', '31T', 390394, 4983397, 44.9956, 1.60944, 200),
('46068', 'Cénevières', '31T', 400320, 4923977, 44.4622, 1.74694, 160),
('46069', 'Cézac', '31T', 367918, 4911064, 44.3408, 1.34305, 195),
('46070', 'Cieurac', '31T', 381147, 4913743, 44.3672, 1.50834, 263),
('46071', 'Comiac', '31T', 420338, 4976966, 44.9417, 1.99028, 480),
('46072', 'Concorès', '31T', 372935, 4946616, 44.6617, 1.39722, 200),
('46073', 'Concots', '31T', 392076, 4917287, 44.4008, 1.64473, 269),
('46074', 'Condat', '31T', 394785, 4982675, 44.9897, 1.66528, 130),
('46075', 'Corn', '31T', 412561, 4940064, 44.6086, 1.89806, 180),
('46076', 'Cornac', '31T', 411741, 4973468, 44.9092, 1.88194, 160),
('46077', 'Cours', '31T', 384126, 4930603, 44.5194, 1.54194, 360),
('46078', 'Couzou', '31T', 390440, 4957808, 44.7653, 1.61556, 290),
('46079', 'Cras', '31T', 383384, 4936017, 44.5681, 1.53138, 380),
('46080', 'Crayssac', '31T', 367196, 4929939, 44.5106, 1.32917, 230),
('46081', 'Crégols', '31T', 396527, 4923079, 44.4536, 1.69945, 140),
('46082', 'Cremps', '31T', 388513, 4915989, 44.3886, 1.60027, 270),
('46083', 'Cressensac', '31T', 383376, 4986454, 45.0219, 1.51972, 300),
('46084', 'Creysse', '31T', 389351, 4971161, 44.8853, 1.59889, 121),
('46085', 'Cuzac', '31T', 431969, 4936714, 44.5806, 2.14306, 227),
('46086', 'Cuzance', '31T', 384769, 4979947, 44.9636, 1.53889, 280),
('46087', 'Dégagnac', '31T', 366271, 4947152, 44.6653, 1.31306, 185),
('46088', 'Douelle', '31T', 369493, 4925510, 44.4711, 1.35917, 120),
('46089', 'Duravel', '31T', 347403, 4930868, 44.515, 1.08, 103),
('46090', 'Durbans', '31T', 404620, 4947244, 44.6722, 1.79667, 340),
('46091', 'Escamps', '31T', 391191, 4913351, 44.3653, 1.63444, 280),
('46092', 'Esclauzels', '31T', 390169, 4919665, 44.4219, 1.62028, 300),
('46093', 'Espagnac-Sainte-Eulalie', '31T', 408083, 4938336, 44.5925, 1.84195, 190),
('46094', 'Espédaillac', '31T', 402628, 4943693, 44.64, 1.77222, 347),
('46095', 'Espère', '31T', 371022, 4930202, 44.5136, 1.37722, 140),
('46096', 'Espeyroux', '31T', 414660, 4957102, 44.7622, 1.92167, 500),
('46097', 'Estal', '31T', 414847, 4974506, 44.9189, 1.92111, 420),
('46098', 'Fajoles', '31T', 373135, 4962324, 44.8031, 1.39584, 177),
('46099', 'Fargues', '31T', 356240, 4918936, 44.4094, 1.19445, 200),
('46100', 'Faycelles', '31T', 419422, 4935161, 44.5653, 1.98528, 301),
('46101', 'Felzins', '31T', 431401, 4939374, 44.6044, 2.13555, 260),
('46102', 'Figeac', '31T', 423207, 4939991, 44.6092, 2.03222, 200),
('46103', 'Flaugnac', '31T', 371769, 4904074, 44.2786, 1.39306, 230),
('46104', 'Flaujac-Gare', '31T', 404444, 4951722, 44.7125, 1.79361, 320),
('46105', 'Flaujac-Poujols', '31T', 380561, 4918044, 44.4058, 1.5, 240),
('46106', 'Floirac', '31T', 393837, 4974419, 44.9153, 1.655, 140),
('46107', 'Floressas', '31T', 350554, 4922861, 44.4436, 1.12194, 259),
('46108', 'Fons', '31T', 416850, 4946211, 44.6644, 1.95111, 260),
('46109', 'Fontanes', '31T', 380259, 4907586, 44.3117, 1.49861, 215),
('46110', 'Fontanes-du-Causse', '31T', 393863, 4946702, 44.6658, 1.66111, 390),
('46111', 'Fourmagnac', '31T', 419182, 4945965, 44.6625, 1.98056, 240),
('46112', 'Francoulès', '31T', 379914, 4933272, 44.5428, 1.48834, 357),
('46113', 'Frayssinet', '31T', 379872, 4946484, 44.6617, 1.48472, 245),
('46114', 'Frayssinet-le-Gélat', '31T', 354417, 4938301, 44.5833, 1.16611, 183),
('46115', 'Frayssinhes', '31T', 415970, 4969800, 44.8767, 1.93612, 345),
('46116', 'Frontenac', '31T', 418019, 4932401, 44.5403, 1.96805, 165),
('46117', 'Gagnac-sur-Cère', '31T', 411502, 4976836, 44.9394, 1.87833, 150),
('46118', 'Gignac', '31T', 378527, 4984754, 45.0058, 1.45861, 320),
('46119', 'Gigouzac', '31T', 375611, 4937952, 44.5842, 1.43306, 226),
('46120', 'Gindou', '31T', 361151, 4943679, 44.6331, 1.24944, 283),
('46121', 'Ginouillac', '31T', 384269, 4953379, 44.7244, 1.53861, 354),
('46122', 'Gintrac', '31T', 402196, 4971724, 44.8922, 1.76139, 160),
('46123', 'Girac', '31T', 406139, 4974319, 44.9161, 1.81084, 135),
('46124', 'Glanes', '31T', 411629, 4974920, 44.9222, 1.88027, 260),
('46125', 'Gorses', '31T', 422990, 4960546, 44.7942, 2.02639, 620),
('46126', 'Goujounac', '31T', 356961, 4937596, 44.5775, 1.19833, 220),
('46127', 'Gourdon', '31T', 371979, 4955062, 44.7375, 1.38305, 230),
('46128', 'Gramat', '31T', 399212, 4959116, 44.7783, 1.72612, 310),
('46129', 'Gréalou', '31T', 411393, 4932025, 44.5361, 1.88473, 380),
('46130', 'Grézels', '31T', 353111, 4926384, 44.4758, 1.15306, 100),
('46131', 'Grèzes', '31T', 406374, 4942188, 44.6269, 1.81972, 300),
('46132', 'Issendolus', '31T', 404077, 4955153, 44.7433, 1.78834, 352),
('46133', 'Issepts', '31T', 414859, 4947162, 44.6728, 1.92584, 340),
('46134', 'Les Junies', '31T', 359800, 4933182, 44.5383, 1.23528, 117),
('46135', 'Labastide-du-Haut-Mont', '31T', 430511, 4965090, 44.8358, 2.12084, 783),
('46136', 'Labastide-du-Vert', '31T', 361790, 4930206, 44.5119, 1.26111, 110),
('46137', 'Labastide-Marnhac', '31T', 372696, 4916371, 44.3894, 1.40167, 300),
('46138', 'Labastide-Murat', '31T', 386384, 4944761, 44.6472, 1.56722, 446),
('46139', 'Labathude', '31T', 419857, 4955986, 44.7528, 1.9875, 520),
('46140', 'Laburgade', '31T', 383638, 4915611, 44.3844, 1.53917, 260),
('46141', 'Lacam-d''Ourcet', '31T', 421305, 4966492, 44.8475, 2.00416, 575),
('46142', 'Lacapelle-Cabanac', '31T', 346344, 4925305, 44.4647, 1.06834, 230),
('46143', 'Lacapelle-Marival', '31T', 414656, 4953491, 44.7297, 1.92222, 380),
('46144', 'Lacave', '31T', 386004, 4966837, 44.8458, 1.5575, 104),
('46145', 'Lachapelle-Auzac', '31T', 380910, 4976282, 44.93, 1.49084, 283),
('46146', 'Ladirat', '31T', 418624, 4962822, 44.8142, 1.97083, 487),
('46147', 'Lagardelle', '31T', 354479, 4928236, 44.4928, 1.16973, 99),
('46148', 'Lalbenque', '31T', 383971, 4910698, 44.3403, 1.54445, 280),
('46149', 'Lamagdelaine', '31T', 379806, 4925064, 44.4689, 1.48889, 140),
('46150', 'Lamativie', '31T', 424371, 4978831, 44.9589, 2.04111, 574),
('46151', 'Lamothe-Cassel', '31T', 381511, 4940959, 44.6122, 1.50667, 380),
('46152', 'Lamothe-Fénelon', '31T', 374720, 4965843, 44.835, 1.415, 130),
('46153', 'Lanzac', '31T', 380070, 4970094, 44.8742, 1.48166, 117),
('46154', 'Laramière', '31T', 410455, 4911948, 44.3553, 1.87639, 368),
('46155', 'Larnagol', '31T', 402754, 4925606, 44.4772, 1.77722, 150),
('46156', 'Laroque-des-Arcs', '31T', 378208, 4925896, 44.4761, 1.46861, 140),
('46157', 'Larroque-Toirac', '31T', 415565, 4930395, 44.5219, 1.9375, 180),
('46158', 'Lascabanes', '31T', 364968, 4910878, 44.3386, 1.30611, 180),
('46159', 'Latouille-Lentillac', '31T', 418111, 4967365, 44.855, 1.96361, 212),
('46160', 'Latronquière', '31T', 427216, 4961145, 44.8, 2.07972, 660),
('46161', 'Lauresses', '31T', 430689, 4957187, 44.7647, 2.12417, 607),
('46162', 'Lauzès', '31T', 387245, 4935980, 44.5683, 1.58, 340),
('46163', 'Laval-de-Cère', '31T', 415929, 4978411, 44.9542, 1.93417, 180),
('46164', 'Lavercantière', '31T', 366650, 4944150, 44.6383, 1.31862, 300),
('46165', 'Lavergne', '31T', 402124, 4961262, 44.7981, 1.7625, 311),
('46166', 'Lebreil', '31T', 353834, 4909327, 44.3225, 1.16694, 200),
('46167', 'Lentillac-du-Causse', '31T', 391866, 4935253, 44.5625, 1.63833, 300),
('46168', 'Lentillac-Saint-Blaise', '31T', 430261, 4937874, 44.5908, 2.12139, 320),
('46169', 'Léobard', '31T', 366072, 4953484, 44.7222, 1.30889, 200),
('46170', 'Leyme', '31T', 413045, 4959655, 44.785, 1.90083, 448),
('46171', 'Lherm', '31T', 360686, 4936373, 44.5672, 1.24556, 180),
('46172', 'Lhospitalet', '31T', 373027, 4912908, 44.3583, 1.40667, 303),
('46173', 'Limogne-en-Quercy', '31T', 402022, 4916636, 44.3964, 1.76972, 310),
('46174', 'Linac', '31T', 429733, 4946150, 44.6653, 2.11361, 360),
('46175', 'Lissac-et-Mouret', '31T', 419552, 4942072, 44.6275, 1.98583, 200),
('46176', 'Livernon', '31T', 408236, 4944506, 44.6481, 1.84277, 320),
('46177', 'Loubressac', '31T', 405407, 4969330, 44.8711, 1.8025, 380),
('46178', 'Loupiac', '31T', 378504, 4963857, 44.8178, 1.46334, 200),
('46179', 'Lugagnac', '31T', 399299, 4917974, 44.4081, 1.73527, 320),
('46180', 'Lunan', '31T', 426903, 4939300, 44.6033, 2.07889, 300),
('46181', 'Lunegarde', '31T', 396045, 4949475, 44.6911, 1.68806, 422),
('46182', 'Luzech', '31T', 363701, 4926524, 44.4792, 1.28611, 100),
('46183', 'Marcilhac-sur-Célé', '31T', 402110, 4934195, 44.5544, 1.7675, 158),
('46184', 'Marminiac', '31T', 356756, 4947264, 44.6644, 1.19306, 240),
('46185', 'Martel', '31T', 390018, 4976798, 44.9361, 1.60611, 227),
('46186', 'Masclat', '31T', 372809, 4965881, 44.835, 1.39083, 180),
('46187', 'Mauroux', '31T', 344484, 4924269, 44.455, 1.04528, 210),
('46188', 'Maxou', '31T', 376369, 4932629, 44.5364, 1.44388, 220),
('46189', 'Mayrinhac-Lentour', '31T', 405820, 4963028, 44.8144, 1.80889, 340),
('46190', 'Mechmont', '31T', 377102, 4937523, 44.5806, 1.45194, 280),
('46191', 'Mercuès', '31T', 371715, 4928367, 44.4972, 1.38639, 148),
('46192', 'Meyronne', '31T', 387625, 4970358, 44.8778, 1.57722, 120),
('46193', 'Miers', '31T', 397806, 4967471, 44.8533, 1.70667, 360),
('46194', 'Milhac', '31T', 369236, 4961878, 44.7983, 1.34667, 120),
('46195', 'Molières', '31T', 415650, 4960515, 44.7931, 1.93361, 540),
('46196', 'Montamel', '31T', 376913, 4940335, 44.6058, 1.44889, 375),
('46197', 'Le Montat', '31T', 376302, 4915129, 44.3789, 1.44722, 266),
('46198', 'Montbrun', '31T', 412651, 4928737, 44.5067, 1.90112, 180),
('46199', 'Montcabrier', '31T', 347072, 4933686, 44.5403, 1.075, 160),
('46200', 'Montcléra', '31T', 357819, 4942517, 44.6219, 1.20777, 240),
('46201', 'Montcuq', '31T', 357125, 4910860, 44.3369, 1.20777, 200),
('46202', 'Montdoumerc', '31T', 381847, 4904687, 44.2858, 1.51917, 250),
('46203', 'Montet-et-Bouxal', '31T', 424642, 4955188, 44.7461, 2.04806, 562),
('46204', 'Montfaucon', '31T', 386001, 4949274, 44.6878, 1.56139, 320),
('46205', 'Montgesty', '31T', 364684, 4937647, 44.5794, 1.29555, 280),
('46206', 'Montlauzun', '31T', 355955, 4906008, 44.2931, 1.19444, 240),
('46207', 'Montredon', '31T', 435650, 4940997, 44.6194, 2.18889, 396),
('46208', 'Montvalent', '31T', 390901, 4970703, 44.8814, 1.61861, 140),
('46209', 'Nadaillac-de-Rouge', '31T', 375870, 4967426, 44.8494, 1.42916, 200),
('46210', 'Nadillac', '31T', 382360, 4935481, 44.5631, 1.51861, 360),
('46211', 'Nuzéjouls', '31T', 371233, 4933037, 44.5392, 1.37916, 200),
('46212', 'Orniac', '31T', 394019, 4933335, 44.5456, 1.66583, 296),
('46213', 'Padirac', '31T', 401472, 4966056, 44.8411, 1.75333, 356),
('46214', 'Parnac', '31T', 365810, 4928054, 44.4933, 1.31222, 112),
('46215', 'Payrac', '31T', 379008, 4961440, 44.7961, 1.47028, 288),
('46216', 'Payrignac', '31T', 369336, 4957060, 44.755, 1.34917, 140),
('46217', 'Pern', '31T', 372853, 4909670, 44.3292, 1.40528, 260),
('46218', 'Pescadoires', '31T', 353647, 4929582, 44.5047, 1.15889, 88),
('46219', 'Peyrilles', '31T', 374055, 4941903, 44.6194, 1.4125, 259),
('46220', 'Pinsac', '31T', 382556, 4967979, 44.8556, 1.51361, 128),
('46221', 'Planioles', '31T', 422512, 4942684, 44.6333, 2.02305, 300),
('46222', 'Pomarède', '31T', 354728, 4936411, 44.5664, 1.17056, 190),
('46223', 'Pontcirq', '31T', 361965, 4934277, 44.5486, 1.26222, 280),
('46224', 'Pradines', '31T', 372831, 4926678, 44.4822, 1.40083, 139),
('46225', 'Prayssac', '31T', 355922, 4929531, 44.5047, 1.18751, 110),
('46226', 'Prendeignes', '31T', 427901, 4949719, 44.6972, 2.09, 460),
('46227', 'Promilhanes', '31T', 405572, 4914239, 44.3753, 1.81472, 370),
('46228', 'Prudhomat', '31T', 406086, 4972221, 44.8972, 1.81055, 240),
('46229', 'Puybrun', '31T', 404387, 4974469, 44.9172, 1.78862, 144),
('46230', 'Puyjourdes', '31T', 409183, 4917644, 44.4064, 1.85944, 340),
('46231', 'Puy-l''Évêque', '31T', 351992, 4929651, 44.505, 1.13806, 122),
('46232', 'Les Quatre-Routes-du-Lot', '31T', 393506, 4983499, 44.9969, 1.64889, 127),
('46233', 'Quissac', '31T', 399267, 4944331, 44.6453, 1.72973, 380),
('46234', 'Rampoux', '31T', 365866, 4944630, 44.6425, 1.30861, 269),
('46235', 'Reilhac', '31T', 398504, 4950454, 44.7003, 1.71889, 340),
('46236', 'Reilhaguet', '31T', 381655, 4958427, 44.7694, 1.50444, 361),
('46237', 'Reyrevignes', '31T', 413951, 4945168, 44.6547, 1.91472, 371),
('46238', 'Rignac', '31T', 396974, 4962145, 44.8053, 1.69722, 285),
('46239', 'Le Roc', '31T', 376918, 4969381, 44.8672, 1.44194, 90),
('46240', 'Rocamadour', '31T', 390679, 4961508, 44.7986, 1.61778, 220),
('46241', 'Rouffilhac', '31T', 374709, 4960812, 44.7897, 1.41611, 200),
('46242', 'Rudelle', '31T', 411126, 4952768, 44.7228, 1.87778, 347),
('46243', 'Rueyres', '31T', 408900, 4955577, 44.7478, 1.84917, 321),
('46244', 'Sabadel-Latronquière', '31T', 425639, 4953973, 44.7353, 2.06083, 570),
('46245', 'Sabadel-Lauzès', '31T', 389184, 4935854, 44.5675, 1.60444, 280),
('46246', 'Saignes', '31T', 406504, 4960240, 44.7894, 1.81805, 400),
('46247', 'Saillac', '31T', 401116, 4909367, 44.3308, 1.75972, 360),
('46248', 'Sainte-Alauzie', '31T', 365684, 4907993, 44.3128, 1.31583, 220),
('46249', 'Saint-Bressou', '31T', 418644, 4950508, 44.7033, 1.97305, 540),
('46250', 'Saint-Caprais', '31T', 353881, 4940938, 44.6069, 1.15861, 240),
('46251', 'Saint-Céré', '31T', 412542, 4967902, 44.8592, 1.89305, 153),
('46252', 'Saint-Cernin', '31T', 387445, 4938600, 44.5919, 1.58195, 380),
('46253', 'Saint-Chamarand', '31T', 378190, 4948398, 44.6786, 1.46306, 243),
('46254', 'Saint-Chels', '31T', 404672, 4931318, 44.5289, 1.80028, 394),
('46255', 'Saint-Cirgues', '31T', 430569, 4954165, 44.7375, 2.12306, 520),
('46256', 'Saint-Cirq-Lapopie', '31T', 394311, 4924133, 44.4628, 1.67139, 180),
('46257', 'Saint-Cirq-Madelon', '31T', 366780, 4961095, 44.7908, 1.31584, 100),
('46258', 'Saint-Cirq-Souillaguet', '31T', 377918, 4951490, 44.7064, 1.45889, 340),
('46259', 'Saint-Clair', '31T', 374008, 4950793, 44.6994, 1.40972, 240),
('46260', 'Sainte-Colombe', '31T', 421157, 4952606, 44.7225, 2.00444, 536),
('46261', 'Sainte-Croix', '31T', 353764, 4911150, 44.3389, 1.16555, 180),
('46262', 'Saint-Cyprien', '31T', 361530, 4907524, 44.3078, 1.26389, 190),
('46263', 'Saint-Daunès', '31T', 358943, 4912950, 44.3561, 1.23, 163),
('46264', 'Saint-Denis-Catus', '31T', 372437, 4935884, 44.565, 1.39361, 240),
('46265', 'Saint-Denis-lès-Martel', '31T', 394163, 4976852, 44.9372, 1.65862, 120),
('46266', 'Saint-Félix', '31T', 429954, 4940099, 44.6108, 2.11722, 280),
('46267', 'Saint-Germain-du-Bel-Air', '31T', 376342, 4945038, 44.6481, 1.44056, 220),
('46268', 'Saint-Géry', '31T', 386988, 4926293, 44.4811, 1.57889, 140),
('46269', 'Saint-Hilaire', '31T', 433031, 4958274, 44.7747, 2.15361, 520),
('46270', 'Saint-Jean-de-Laur', '31T', 407255, 4918967, 44.4181, 1.835, 390),
('46271', 'Saint-Jean-Lespinasse', '31T', 409871, 4968402, 44.8633, 1.85916, 160),
('46272', 'Saint-Jean-Mirabel', '31T', 429172, 4941126, 44.62, 2.10722, 353),
('46273', 'Saint-Laurent-les-Tours', '31T', 412820, 4968916, 44.8683, 1.89639, 320),
('46274', 'Saint-Laurent-Lolmie', '31T', 358274, 4906606, 44.2989, 1.22334, 180),
('46275', 'Saint-Martin-de-Vers', '31T', 385417, 4937401, 44.5808, 1.55667, 220),
('46276', 'Saint-Martin-Labouval', '31T', 398734, 4924310, 44.465, 1.72694, 140),
('46277', 'Saint-Martin-le-Redon', '31T', 344550, 4932572, 44.5297, 1.04361, 101),
('46278', 'Saint-Matré', '31T', 350201, 4918084, 44.4006, 1.11888, 262),
('46279', 'Saint-Maurice-en-Quercy', '31T', 416547, 4955072, 44.7442, 1.94584, 481),
('46280', 'Saint-Médard', '31T', 364216, 4933180, 44.5392, 1.29084, 140),
('46281', 'Saint-Médard-de-Presque', '31T', 409060, 4968475, 44.8639, 1.84889, 200),
('46282', 'Saint-Médard-Nicourby', '31T', 422875, 4958264, 44.7736, 2.02528, 580),
('46283', 'Saint-Michel-de-Bannières', '31T', 396446, 4981136, 44.9761, 1.68666, 170),
('46284', 'Saint-Michel-Loubéjou', '31T', 409129, 4971807, 44.8939, 1.84916, 257),
('46285', 'Saint-Pantaléon', '31T', 361868, 4914061, 44.3667, 1.26639, 200),
('46286', 'Saint-Paul-de-Vern', '31T', 416071, 4965818, 44.8408, 1.93805, 400),
('46287', 'Saint-Paul-de-Loubressac', '31T', 376261, 4905932, 44.2961, 1.44889, 220),
('46288', 'Saint-Perdoux', '31T', 424480, 4947012, 44.6725, 2.04722, 300),
('46289', 'Saint-Pierre-Toirac', '31T', 416881, 4931428, 44.5314, 1.95389, 180),
('46290', 'Saint-Projet', '31T', 380726, 4955759, 44.7453, 1.49333, 330),
('46291', 'Saint-Sauveur-la-Vallée', '31T', 385054, 4940556, 44.6092, 1.55139, 250),
('46292', 'Saint-Simon', '31T', 409194, 4949956, 44.6972, 1.85388, 360),
('46293', 'Saint-Sozy', '31T', 386553, 4970531, 44.8792, 1.56361, 110),
('46294', 'Saint-Sulpice', '31T', 403859, 4936052, 44.5714, 1.78917, 180),
('46295', 'Saint-Vincent-du-Pendit', '31T', 413194, 4965794, 44.8403, 1.90166, 240),
('46296', 'Saint-Vincent-Rive-d''Olt', '31T', 364840, 4924987, 44.4656, 1.30083, 110),
('46297', 'Salviac', '31T', 362364, 4948870, 44.68, 1.26333, 157),
('46298', 'Sarrazac', '31T', 387747, 4986036, 45.0189, 1.57528, 206),
('46299', 'Sauliac-sur-Célé', '31T', 398519, 4930362, 44.5194, 1.72305, 160),
('46300', 'Saux', '31T', 347340, 4916885, 44.3892, 1.08333, 260),
('46301', 'Sauzet', '31T', 361080, 4919726, 44.4175, 1.25499, 279),
('46302', 'Sénaillac-Latronquière', '31T', 425600, 4963879, 44.8244, 2.05889, 550),
('46303', 'Sénaillac-Lauzès', '31T', 392954, 4939680, 44.6025, 1.65111, 370),
('46304', 'Séniergues', '31T', 384989, 4950527, 44.6989, 1.54834, 380),
('46305', 'Sérignac', '31T', 349156, 4921689, 44.4328, 1.10472, 250),
('46306', 'Sonac', '31T', 409678, 4949918, 44.6969, 1.86, 360),
('46307', 'Soturac', '31T', 342238, 4928306, 44.4908, 1.01583, 100),
('46308', 'Soucirac', '31T', 381563, 4950990, 44.7025, 1.505, 360),
('46309', 'Souillac', '31T', 379936, 4972288, 44.8939, 1.47945, 104),
('46310', 'Soulomès', '31T', 388450, 4943181, 44.6333, 1.59361, 440),
('46311', 'Sousceyrac', '31T', 423886, 4969362, 44.8736, 2.03639, 560),
('46312', 'Strenquels', '31T', 392519, 4982095, 44.9842, 1.63667, 180),
('46313', 'Tauriac', '31T', 403317, 4973312, 44.9067, 1.77528, 124),
('46314', 'Terrou', '31T', 419704, 4959599, 44.7853, 1.985, 336),
('46315', 'Teyssieu', '31T', 417345, 4974381, 44.9181, 1.95277, 429),
('46316', 'Thédirac', '31T', 366520, 4940016, 44.6011, 1.31805, 279),
('46317', 'Thégra', '31T', 401703, 4963892, 44.8217, 1.75667, 370),
('46318', 'Thémines', '31T', 407370, 4954765, 44.7403, 1.83, 319),
('46319', 'Théminettes', '31T', 409264, 4951744, 44.7133, 1.85445, 340),
('46320', 'Tour-de-Faure', '31T', 395915, 4924941, 44.4703, 1.69138, 140),
('46321', 'Touzac', '31T', 345284, 4929097, 44.4986, 1.05388, 80),
('46322', 'Trespoux-Rassiels', '31T', 370864, 4918877, 44.4117, 1.37805, 320),
('46323', 'Ussel', '31T', 381011, 4938931, 44.5939, 1.50084, 380),
('46324', 'Uzech', '31T', 372652, 4938936, 44.5925, 1.39556, 330),
('46325', 'Vaillac', '31T', 383443, 4947838, 44.6744, 1.52944, 280),
('46326', 'Valprionde', '31T', 349331, 4912979, 44.3544, 1.10944, 200),
('46327', 'Valroufié', '31T', 379910, 4930710, 44.5197, 1.48889, 200),
('46328', 'Varaire', '31T', 398237, 4912281, 44.3567, 1.72305, 320),
('46329', 'Vaylats', '31T', 391961, 4910345, 44.3383, 1.64472, 300),
('46330', 'Vayrac', '31T', 397656, 4978709, 44.9544, 1.7025, 120),
('46331', 'Vers', '31T', 385056, 4927006, 44.4872, 1.55444, 160),
('46332', 'Viazac', '31T', 426600, 4943655, 44.6425, 2.07445, 220),
('46333', 'Vidaillac', '31T', 406489, 4910275, 44.3397, 1.82694, 360),
('46334', 'Le Vigan', '31T', 376561, 4955343, 44.7408, 1.44083, 228),
('46335', 'Villesèque', '31T', 365954, 4916815, 44.3922, 1.31694, 280),
('46336', 'Vire-sur-Lot', '31T', 347588, 4928394, 44.4928, 1.08306, 81),
('46337', 'Mayrac', '31T', 386264, 4972789, 44.8994, 1.55945, 260),
('46338', 'Bessonies', '31T', 432653, 4962135, 44.8094, 2.14833, 580),
('46339', 'Saint-Jean-Lagineste', '31T', 410052, 4964047, 44.8242, 1.86222, 453),
('46340', 'Saint-Pierre-Lafeuille', '31T', 377360, 4931314, 44.5247, 1.45667, 340),
('47001', 'Agen', '31T', 309940, 4897703, 44.2078, 0.621111, 50),
('47002', 'Agmé', '31T', 289122, 4929875, 44.4914, 0.34778, 70),
('47003', 'Agnac', '31T', 291477, 4948053, 44.6556, 0.370005, 45),
('47004', 'Aiguillon', '31T', 287745, 4908606, 44.2997, 0.339168, 46),
('47005', 'Allemans-du-Dropt', '31T', 285033, 4945237, 44.6283, 0.289999, 39),
('47006', 'Allez-et-Cazeneuve', '31T', 311194, 4918047, 44.3911, 0.629438, 70),
('47007', 'Allons', '30T', 735450, 4898433, 44.2011, -0.0533328, 121),
('47008', 'Ambrus', '31T', 279973, 4901110, 44.23, 0.245, 128),
('47009', 'Andiran', '31T', 282103, 4886306, 44.0975, 0.277774, 100),
('47010', 'Antagnac', '31T', 261619, 4915563, 44.3542, 0.00889046, 147),
('47011', 'Anthé', '31T', 337555, 4915084, 44.3708, 0.961115, 150),
('47012', 'Anzex', '31T', 273776, 4907530, 44.2858, 0.164724, 110),
('47013', 'Argenton', '31T', 268338, 4918750, 44.385, 0.0916695, 60),
('47014', 'Armillac', '31T', 292360, 4937090, 44.5572, 0.385559, 110),
('47015', 'Astaffort', '31T', 312081, 4881646, 44.0639, 0.653617, 70),
('47016', 'Aubiac', '31T', 304975, 4890591, 44.1425, 0.561661, 100),
('47017', 'Auradou', '31T', 325874, 4911402, 44.335, 0.815838, 120),
('47018', 'Auriac-sur-Dropt', '31T', 281698, 4947728, 44.6497, 0.246944, 52),
('47019', 'Bajamont', '31T', 316826, 4904084, 44.2669, 0.704999, 90),
('47020', 'Baleyssagues', '31T', 274591, 4951988, 44.6858, 0.155551, 70),
('47021', 'Barbaste', '31T', 282858, 4894342, 44.17, 0.283883, 50),
('47022', 'Bazens', '31T', 294225, 4904477, 44.2644, 0.421944, 160),
('47023', 'Beaugas', '31T', 308875, 4931023, 44.5072, 0.59556, 130),
('47024', 'Beaupuy', '31T', 273348, 4935348, 44.5358, 0.147224, 80),
('47025', 'Beauville', '31T', 330929, 4904662, 44.2756, 0.881385, 200),
('47026', 'Beauziac', '31T', 264960, 4913557, 44.3372, 0.0516614, 155),
('47027', 'Bias', '31T', 314481, 4920701, 44.4158, 0.669726, 54),
('47028', 'Birac-sur-Trec', '31T', 282366, 4929510, 44.4861, 0.263058, 70),
('47029', 'Blanquefort-sur-Briolance', '31T', 338872, 4940460, 44.5994, 0.969728, 140),
('47030', 'Blaymont', '31T', 329588, 4907661, 44.3022, 0.863614, 200),
('47031', 'Boé', '31T', 313620, 4892749, 44.1642, 0.668892, 46),
('47032', 'Bon-Encontre', '31T', 313645, 4895219, 44.1864, 0.668328, 60),
('47033', 'Boudy-de-Beauregard', '31T', 314598, 4935644, 44.5503, 0.665838, 120),
('47034', 'Bouglon', '31T', 268750, 4919755, 44.3942, 0.0963881, 135),
('47035', 'Bourgougnague', '31T', 294947, 4943463, 44.6153, 0.415559, 98),
('47036', 'Bourlens', '31T', 338460, 4920340, 44.4183, 0.970833, 160),
('47037', 'Bournel', '31T', 315148, 4943318, 44.6194, 0.669999, 110),
('47038', 'Bourran', '31T', 292260, 4913187, 44.3422, 0.393885, 34),
('47039', 'Boussès', '31T', 267663, 4892205, 44.1461, 0.0949948, 136),
('47040', 'Brax', '31T', 304329, 4897250, 44.2022, 0.551113, 54),
('47041', 'Bruch', '31T', 293046, 4898059, 44.2064, 0.409723, 43),
('47042', 'Brugnac', '31T', 296063, 4924896, 44.4486, 0.43695, 127),
('47043', 'Buzet-sur-Baïse', '31T', 284161, 4904183, 44.2589, 0.296114, 46),
('47044', 'Cahuzac', '31T', 306335, 4948054, 44.6597, 0.557225, 130),
('47045', 'Calignac', '31T', 293147, 4889964, 44.1336, 0.414171, 130),
('47046', 'Calonges', '31T', 280203, 4917196, 44.3747, 0.241106, 39),
('47047', 'Cambes', '31T', 284846, 4941598, 44.5956, 0.289168, 110),
('47048', 'Cancon', '31T', 311221, 4934197, 44.5364, 0.623888, 170),
('47049', 'Casseneuil', '31T', 310677, 4923868, 44.4433, 0.620829, 42),
('47050', 'Cassignas', '31T', 324566, 4908102, 44.305, 0.800553, 210),
('47051', 'Castelculier', '31T', 316288, 4895175, 44.1867, 0.701386, 63),
('47052', 'Casteljaloux', '31T', 267558, 4911147, 44.3164, 0.0852827, 65),
('47053', 'Castella', '31T', 315312, 4909407, 44.3144, 0.684164, 210),
('47054', 'Castelmoron-sur-Lot', '31T', 300532, 4919137, 44.3981, 0.495276, 43),
('47055', 'Castelnaud-de-Gratecambe', '31T', 314759, 4929679, 44.4967, 0.670004, 210),
('47056', 'Castelnau-sur-Gupie', '31T', 272296, 4938104, 44.5603, 0.132782, 63),
('47057', 'Castillonnès', '31T', 309044, 4947232, 44.6531, 0.59167, 133),
('47058', 'Caubeyres', '31T', 276352, 4904353, 44.2581, 0.19833, 130),
('47059', 'Caubon-Saint-Sauveur', '31T', 275823, 4941750, 44.5942, 0.175551, 90),
('47060', 'Caudecoste', '31T', 318874, 4887415, 44.1175, 0.736389, 60),
('47061', 'Caumont-sur-Garonne', '31T', 275653, 4924672, 44.4406, 0.180832, 32),
('47062', 'Cauzac', '31T', 328248, 4904762, 44.2758, 0.84778, 90),
('47063', 'Cavarc', '31T', 313084, 4951252, 44.6903, 0.641112, 100),
('47064', 'Cazideroque', '31T', 335084, 4918078, 44.3972, 0.929171, 150),
('47065', 'Clairac', '31T', 291336, 4915471, 44.3625, 0.38139, 40),
('47066', 'Clermont-Dessous', '31T', 294189, 4902625, 44.2478, 0.422221, 110),
('47067', 'Clermont-Soubiran', '31T', 326590, 4889862, 44.1414, 0.831943, 130),
('47068', 'Cocumont', '31T', 263399, 4926126, 44.4497, 0.0263843, 132),
('47069', 'Colayrac-Saint-Cirq', '31T', 305547, 4900858, 44.235, 0.565005, 42),
('47070', 'Condezaygues', '31T', 334411, 4928192, 44.4881, 0.917494, 138),
('47071', 'Coulx', '31T', 298846, 4926910, 44.4675, 0.47111, 120),
('47072', 'Courbiac', '31T', 343572, 4915770, 44.3783, 1.03638, 160),
('47073', 'Cours', '31T', 307696, 4910522, 44.3225, 0.588336, 190),
('47074', 'Couthures-sur-Garonne', '31T', 267743, 4933106, 44.5139, 0.0777751, 20),
('47075', 'La Croix-Blanche', '31T', 315982, 4907196, 44.2947, 0.693337, 200),
('47076', 'Cuq', '31T', 315767, 4883703, 44.0833, 0.698886, 161),
('47077', 'Cuzorn', '31T', 336957, 4934487, 44.5453, 0.947505, 100),
('47078', 'Damazan', '31T', 282680, 4907723, 44.2903, 0.276111, 53),
('47079', 'Dausse', '31T', 332037, 4916674, 44.3839, 0.89139, 90),
('47080', 'Dévillac', '31T', 325362, 4941768, 44.6081, 0.799173, 170),
('47081', 'Dolmayrac', '31T', 307918, 4915055, 44.3633, 0.589447, 150),
('47082', 'Dondas', '31T', 327558, 4902156, 44.2522, 0.839999, 198),
('47083', 'Doudrac', '31T', 316132, 4947675, 44.6589, 0.68083, 93),
('47084', 'Douzains', '31T', 304929, 4945286, 44.6344, 0.540559, 126),
('47085', 'Durance', '31T', 273069, 4894148, 44.1653, 0.161667, 126),
('47086', 'Duras', '31T', 276890, 4950888, 44.6767, 0.185006, 109),
('47087', 'Engayrac', '31T', 331125, 4902804, 44.2589, 0.884439, 220),
('47088', 'Escassefort', '31T', 280459, 4936556, 44.5489, 0.236107, 132),
('47089', 'Esclottes', '31T', 273971, 4954419, 44.7075, 0.146662, 60),
('47090', 'Espiens', '31T', 290320, 4894100, 44.17, 0.377219, 180),
('47091', 'Estillac', '31T', 305181, 4892284, 44.1578, 0.563608, 150),
('47092', 'Fals', '31T', 313729, 4884841, 44.0931, 0.67305, 150),
('47093', 'Fargues-sur-Ourbise', '31T', 272931, 4902370, 44.2392, 0.156386, 119),
('47094', 'Fauguerolles', '31T', 281114, 4924517, 44.4408, 0.249441, 28),
('47095', 'Fauillet', '31T', 284330, 4922711, 44.4256, 0.29056, 38),
('47096', 'Ferrensac', '31T', 312023, 4945847, 44.6414, 0.629717, 80),
('47097', 'Feugarolles', '31T', 287971, 4899827, 44.2208, 0.345555, 51),
('47098', 'Fieux', '31T', 293798, 4885188, 44.0908, 0.424168, 170),
('47099', 'Fongrave', '31T', 303619, 4918704, 44.395, 0.534167, 43),
('47100', 'Foulayronnes', '31T', 311882, 4901136, 44.2392, 0.644166, 157),
('47101', 'Fourques-sur-Garonne', '31T', 273847, 4925569, 44.4481, 0.157774, 25),
('47102', 'Francescas', '31T', 294016, 4882185, 44.0639, 0.42806, 127),
('47103', 'Fréchou', '31T', 285395, 4884869, 44.0856, 0.319441, 100),
('47104', 'Frégimont', '31T', 297065, 4905871, 44.2778, 0.456949, 159),
('47105', 'Frespech', '31T', 326507, 4908544, 44.3094, 0.824723, 210),
('47106', 'Fumel', '31T', 338483, 4929293, 44.4989, 0.968329, 80),
('47107', 'Galapian', '31T', 293705, 4908385, 44.2994, 0.413893, 131),
('47108', 'Gaujac', '31T', 271546, 4929974, 44.4869, 0.126948, 20),
('47109', 'Gavaudun', '31T', 332298, 4936212, 44.5597, 0.888332, 120),
('47110', 'Gontaud-de-Nogaret', '31T', 284689, 4926220, 44.4572, 0.293608, 42),
('47111', 'Granges-sur-Lot', '31T', 298002, 4916806, 44.3764, 0.464443, 39),
('47112', 'Grateloup-Saint-Gayrand', '31T', 292261, 4922237, 44.4236, 0.390281, 121),
('47113', 'Grayssas', '31T', 330059, 4892458, 44.1656, 0.874446, 150),
('47114', 'Grézet-Cavagnan', '31T', 271519, 4918483, 44.3836, 0.131672, 50),
('47115', 'Guérin', '31T', 267020, 4920929, 44.4042, 0.0741676, 143),
('47117', 'Hautefage-la-Tour', '31T', 323284, 4909896, 44.3208, 0.783884, 210),
('47118', 'Hautesvignes', '31T', 289335, 4926223, 44.4586, 0.351943, 130),
('47119', 'Houeillès', '31T', 262953, 4897903, 44.1958, 0.0336121, 149),
('47120', 'Jusix', '31T', 265641, 4936117, 44.5403, 0.0499955, 16),
('47121', 'Labastide-Castel-Amouroux', '31T', 269969, 4915386, 44.3553, 0.113607, 130),
('47122', 'Labretonie', '31T', 290619, 4929672, 44.49, 0.36667, 77),
('47123', 'Lacapelle-Biron', '31T', 333055, 4940731, 44.6006, 0.896392, 170),
('47124', 'Lacaussade', '31T', 327201, 4930510, 44.5072, 0.826108, 120),
('47125', 'Lacépède', '31T', 297569, 4910704, 44.3214, 0.461385, 138),
('47126', 'Lachapelle', '31T', 282677, 4939447, 44.5756, 0.262779, 110),
('47127', 'Lafitte-sur-Lot', '31T', 295353, 4914263, 44.3528, 0.432225, 38),
('47128', 'Lafox', '31T', 316195, 4893418, 44.1708, 0.700838, 55),
('47129', 'Lagarrigue', '31T', 291076, 4908036, 44.2956, 0.38111, 68),
('47130', 'Lagruère', '31T', 280386, 4919970, 44.3997, 0.242228, 37),
('47131', 'Lagupie', '31T', 270717, 4937820, 44.5572, 0.113051, 40),
('47132', 'Lalandusse', '31T', 304192, 4947902, 44.6578, 0.530277, 143),
('47133', 'Lamontjoie', '31T', 301575, 4883281, 44.0758, 0.521942, 120),
('47134', 'Lannes', '31T', 283165, 4879321, 44.035, 0.293893, 100),
('47135', 'Laparade', '31T', 296652, 4918269, 44.3892, 0.446942, 184),
('47136', 'Laperche', '31T', 294991, 4936512, 44.5528, 0.418883, 140),
('47137', 'Laplume', '31T', 302321, 4887366, 44.1128, 0.529719, 218),
('47138', 'Laroque-Timbaut', '31T', 321466, 4905808, 44.2836, 0.762501, 210),
('47139', 'Lasserre', '31T', 291172, 4882398, 44.065, 0.392501, 100),
('47140', 'Laugnac', '31T', 309021, 4908846, 44.3078, 0.605552, 189),
('47141', 'Laussou', '31T', 325862, 4939037, 44.5836, 0.806394, 100),
('47142', 'Lauzun', '31T', 298522, 4944926, 44.6294, 0.459999, 88),
('47143', 'Lavardac', '31T', 283960, 4895387, 44.1797, 0.297223, 50),
('47144', 'Lavergne', '31T', 293382, 4940764, 44.5906, 0.39694, 59),
('47145', 'Layrac', '31T', 312786, 4889222, 44.1322, 0.659724, 60),
('47146', 'Lédat', '31T', 314468, 4924901, 44.4536, 0.66806, 59),
('47147', 'Lévignac-de-Guyenne', '31T', 277936, 4945415, 44.6278, 0.200558, 100),
('47148', 'Leyritz-Moncassin', '31T', 275450, 4912971, 44.3353, 0.183339, 160),
('47150', 'Longueville', '31T', 278540, 4926921, 44.4617, 0.216106, 30),
('47151', 'Loubès-Bernac', '31T', 285789, 4956703, 44.7317, 0.294722, 160),
('47152', 'Lougratte', '31T', 311284, 4939384, 44.5831, 0.62278, 135),
('47154', 'Lusignan-Petit', '31T', 302322, 4905092, 44.2722, 0.523059, 160),
('47155', 'Madaillan', '31T', 306351, 4905528, 44.2772, 0.573336, 130),
('47156', 'Marcellus', '31T', 267531, 4929653, 44.4828, 0.0766641, 67),
('47157', 'Marmande', '31T', 274322, 4931576, 44.5022, 0.161117, 30),
('47158', 'Marmont-Pachas', '31T', 306544, 4884955, 44.0922, 0.583329, 180),
('47159', 'Le Mas-d''Agenais', '31T', 278476, 4921116, 44.4094, 0.217783, 40),
('47160', 'Masquières', '31T', 344823, 4919013, 44.4078, 1.05111, 220),
('47161', 'Massels', '31T', 328716, 4909103, 44.315, 0.852217, 140),
('47162', 'Massoulès', '31T', 330026, 4911725, 44.3389, 0.867777, 210),
('47164', 'Mazières-Naresse', '31T', 318740, 4948713, 44.6689, 0.713332, 100),
('47165', 'Meilhan-sur-Garonne', '31T', 264262, 4934035, 44.5211, 0.0336115, 50),
('47167', 'Mézin', '31T', 280436, 4881697, 44.0556, 0.258887, 110),
('47168', 'Miramont-de-Guyenne', '31T', 290620, 4942027, 44.6011, 0.361665, 60),
('47169', 'Moirax', '31T', 308704, 4890358, 44.1414, 0.608328, 156),
('47170', 'Monbahus', '31T', 304116, 4935921, 44.55, 0.533885, 150),
('47171', 'Monbalen', '31T', 318743, 4908415, 44.3064, 0.727496, 187),
('47172', 'Moncaut', '31T', 300086, 4890676, 44.1419, 0.50056, 200),
('47173', 'Monclar', '31T', 303129, 4924463, 44.4467, 0.525835, 183),
('47174', 'Moncrabeau', '31T', 289456, 4878870, 44.0328, 0.372501, 90),
('47175', 'Monflanquin', '31T', 322484, 4933354, 44.5317, 0.765832, 147),
('47176', 'Mongaillard', '31T', 283689, 4898639, 44.2089, 0.292496, 130);
INSERT INTO `ods_communes` (`oc_code_insee`, `oc_nom`, `oc_secteur`, `oc_x_utm`, `oc_y_utm`, `oc_latitude`, `oc_longitude`, `oc_altitude`) VALUES
('47177', 'Monheurt', '31T', 285302, 4913258, 44.3408, 0.306661, 30),
('47178', 'Monségur', '31T', 331485, 4927834, 44.4842, 0.880838, 220),
('47179', 'Monsempron-Libos', '31T', 336095, 4928334, 44.4897, 0.938614, 111),
('47180', 'Montagnac-sur-Auvignon', '31T', 296929, 4892873, 44.1608, 0.46028, 180),
('47181', 'Montagnac-sur-Lède', '31T', 328759, 4934267, 44.5414, 0.844447, 120),
('47182', 'Montastruc', '31T', 302502, 4929330, 44.4903, 0.516106, 195),
('47183', 'Montauriol', '31T', 308067, 4943277, 44.6172, 0.580838, 81),
('47184', 'Montaut', '31T', 315103, 4941744, 44.6053, 0.669999, 150),
('47185', 'Montayral', '31T', 339989, 4926725, 44.4761, 0.988055, 107),
('47186', 'Montesquieu', '31T', 295516, 4897487, 44.2019, 0.44083, 60),
('47187', 'Monteton', '31T', 282195, 4944807, 44.6236, 0.254445, 80),
('47188', 'Montignac-de-Lauzun', '31T', 298637, 4938684, 44.5733, 0.463893, 92),
('47189', 'Montignac-Toupinerie', '31T', 289368, 4936106, 44.5475, 0.348328, 100),
('47190', 'Montpezat', '31T', 302683, 4913389, 44.3469, 0.524441, 182),
('47191', 'Montpouillan', '31T', 269860, 4927964, 44.4683, 0.106665, 70),
('47192', 'Monviel', '31T', 304928, 4937935, 44.5683, 0.543336, 105),
('47193', 'Moulinet', '31T', 307928, 4934881, 44.5417, 0.582222, 120),
('47194', 'Moustier', '31T', 285789, 4946077, 44.6361, 0.299169, 50),
('47195', 'Nérac', '31T', 286955, 4890409, 44.1358, 0.336667, 56),
('47196', 'Nicole', '31T', 287641, 4911544, 44.3261, 0.33667, 30),
('47197', 'Nomdieu', '31T', 297901, 4885431, 44.0942, 0.475279, 80),
('47198', 'Pailloles', '31T', 312622, 4926869, 44.4708, 0.644165, 120),
('47199', 'Pardaillan', '31T', 284397, 4949305, 44.6647, 0.28028, 90),
('47200', 'Parranquet', '31T', 326614, 4947354, 44.6586, 0.813052, 130),
('47201', 'Le Passage', '31T', 308368, 4897131, 44.2022, 0.601661, 45),
('47202', 'Paulhiac', '31T', 326860, 4936756, 44.5633, 0.819724, 147),
('47203', 'Penne-d''Agenais', '31T', 326360, 4917193, 44.3872, 0.819998, 170),
('47204', 'Peyrière', '31T', 287088, 4939300, 44.5756, 0.318336, 110),
('47205', 'Pindères', '31T', 262705, 4906409, 44.2722, 0.026661, 97),
('47206', 'Pinel-Hauterive', '31T', 307428, 4922450, 44.4297, 0.580562, 57),
('47207', 'Pompiey', '31T', 278525, 4897020, 44.1928, 0.228617, 110),
('47208', 'Pompogne', '31T', 264697, 4904391, 44.2547, 0.0524957, 89),
('47209', 'Pont-du-Casse', '31T', 314829, 4900156, 44.2311, 0.681388, 80),
('47210', 'Port-Sainte-Marie', '31T', 292236, 4903336, 44.2536, 0.397503, 50),
('47211', 'Poudenas', '31T', 276579, 4880931, 44.0475, 0.211114, 100),
('47212', 'Poussignac', '31T', 265273, 4914843, 44.3489, 0.0550032, 75),
('47213', 'Prayssas', '31T', 301315, 4907007, 44.2892, 0.509725, 170),
('47214', 'Puch-d''Agenais', '31T', 280209, 4912099, 44.3289, 0.243332, 90),
('47215', 'Pujols', '31T', 316044, 4917260, 44.3853, 0.690561, 160),
('47216', 'Puymiclan', '31T', 286501, 4932215, 44.5117, 0.313884, 90),
('47217', 'Puymirol', '31T', 323860, 4895029, 44.1872, 0.796106, 140),
('47218', 'Puysserampion', '31T', 286309, 4942476, 44.6039, 0.307216, 80),
('47219', 'Rayet', '31T', 324176, 4946833, 44.6533, 0.782503, 116),
('47220', 'Razimet', '31T', 279657, 4914805, 44.3531, 0.235272, 88),
('47221', 'Réaup-Lisse', '31T', 274825, 4885685, 44.0897, 0.18722, 171),
('47222', 'La Réunion', '31T', 270121, 4908986, 44.2978, 0.118333, 109),
('47223', 'Rives', '31T', 320803, 4946030, 44.6453, 0.740276, 97),
('47224', 'Romestaing', '31T', 261344, 4922586, 44.4172, 0.00222092, 150),
('47225', 'Roquefort', '31T', 304974, 4894297, 44.1758, 0.560275, 71),
('47226', 'Roumagne', '31T', 288726, 4944158, 44.6197, 0.336949, 50),
('47228', 'Saint-Antoine-de-Ficalba', '31T', 318228, 4911394, 44.3331, 0.720006, 200),
('47229', 'Saint-Astier', '31T', 282544, 4956472, 44.7286, 0.253886, 92),
('47230', 'Saint-Aubin', '31T', 329301, 4927182, 44.4778, 0.853607, 140),
('47231', 'Saint-Avit', '31T', 278510, 4938970, 44.57, 0.210562, 90),
('47232', 'Saint-Barthélemy-d''Agenais', '31T', 291329, 4933200, 44.5219, 0.374165, 90),
('47233', 'Sainte-Bazeille', '31T', 269177, 4934878, 44.5303, 0.095002, 29),
('47234', 'Saint-Caprais-de-Lerm', '31T', 319654, 4897984, 44.2128, 0.742504, 92),
('47235', 'Saint-Colomb-de-Lauzun', '31T', 299526, 4943165, 44.6139, 0.473332, 100),
('47236', 'Sainte-Colombe-de-Duras', '31T', 272168, 4952629, 44.6908, 0.124727, 52),
('47237', 'Sainte-Colombe-de-Villeneuve', '31T', 313548, 4914398, 44.3589, 0.660277, 190),
('47238', 'Sainte-Colombe-en-Bruilhois', '31T', 301408, 4894682, 44.1783, 0.515561, 159),
('47239', 'Saint-Étienne-de-Fougères', '31T', 305292, 4921340, 44.4192, 0.554166, 56),
('47240', 'Saint-Étienne-de-Villeréal', '31T', 322476, 4942711, 44.6158, 0.762504, 140),
('47241', 'Saint-Eutrope-de-Born', '31T', 316545, 4938893, 44.58, 0.689173, 100),
('47242', 'Saint-Front-sur-Lémance', '31T', 338919, 4937927, 44.5767, 0.971113, 111),
('47244', 'Sainte-Gemme-Martaillac', '31T', 273117, 4916667, 44.3678, 0.1525, 128),
('47245', 'Saint-Géraud', '31T', 274014, 4944933, 44.6222, 0.151388, 120),
('47246', 'Saint-Hilaire-de-Lusignan', '31T', 301474, 4899837, 44.2247, 0.514436, 40),
('47247', 'Saint-Jean-de-Duras', '31T', 285806, 4952563, 44.6944, 0.296671, 90),
('47248', 'Saint-Jean-de-Thurac', '31T', 319487, 4891906, 44.1581, 0.742504, 76),
('47249', 'Saint-Laurent', '31T', 292321, 4902530, 44.2464, 0.398886, 40),
('47250', 'Saint-Léger', '31T', 285812, 4907156, 44.2861, 0.315556, 30),
('47251', 'Saint-Léon', '31T', 279769, 4908253, 44.2942, 0.239442, 80),
('47252', 'Sainte-Livrade-sur-Lot', '31T', 307926, 4919100, 44.3997, 0.588053, 52),
('47253', 'Sainte-Marthe', '31T', 272896, 4921772, 44.4136, 0.147499, 70),
('47254', 'Saint-Martin-Curton', '31T', 261531, 4913156, 44.3325, 0.00888932, 143),
('47255', 'Saint-Martin-de-Beauville', '31T', 325621, 4899428, 44.2272, 0.816662, 165),
('47256', 'Saint-Martin-de-Villeréal', '31T', 327211, 4945763, 44.6444, 0.821113, 140),
('47257', 'Saint-Martin-Petit', '31T', 268221, 4938434, 44.5619, 0.0813874, 36),
('47258', 'Sainte-Maure-de-Peyriac', '31T', 271773, 4877265, 44.0131, 0.152775, 161),
('47259', 'Saint-Maurice-de-Lestapel', '31T', 306820, 4938465, 44.5736, 0.566943, 144),
('47260', 'Saint-Maurin', '31T', 331603, 4897203, 44.2086, 0.892223, 94),
('47262', 'Saint-Nicolas-de-la-Balerme', '31T', 321044, 4889517, 44.1369, 0.762774, 50),
('47263', 'Saint-Pardoux-du-Breuil', '31T', 276648, 4928499, 44.4753, 0.19167, 31),
('47264', 'Saint-Pardoux-Isaac', '31T', 291520, 4943233, 44.6122, 0.372505, 70),
('47265', 'Saint-Pastour', '31T', 309081, 4929010, 44.4892, 0.598893, 170),
('47266', 'Saint-Pé-Saint-Simon', '31T', 267619, 4876421, 44.0042, 0.101388, 133),
('47267', 'Saint-Pierre-de-Buzet', '31T', 282283, 4903782, 44.2547, 0.272781, 90),
('47269', 'Saint-Pierre-de-Clairac', '31T', 321042, 4894334, 44.1803, 0.76111, 70),
('47271', 'Saint-Pierre-sur-Dropt', '31T', 278237, 4947135, 44.6433, 0.203605, 65),
('47272', 'Saint-Quentin-du-Dropt', '31T', 309738, 4950609, 44.6836, 0.599161, 90),
('47273', 'Saint-Robert', '31T', 323885, 4901729, 44.2475, 0.794168, 194),
('47274', 'Saint-Romain-le-Noble', '31T', 323009, 4892304, 44.1625, 0.786383, 160),
('47275', 'Saint-Salvy', '31T', 295656, 4908355, 44.2997, 0.438338, 171),
('47276', 'Saint-Sardos', '31T', 298924, 4912948, 44.3419, 0.477496, 90),
('47277', 'Saint-Sauveur-de-Meilhan', '30T', 738354, 4929620, 44.4806, -0.00277401, 81),
('47278', 'Saint-Sernin', '31T', 281315, 4954629, 44.7117, 0.239172, 92),
('47279', 'Saint-Sixte', '31T', 322511, 4888674, 44.1297, 0.781384, 56),
('47280', 'Saint-Sylvestre-sur-Lot', '31T', 325396, 4918393, 44.3978, 0.8075, 60),
('47281', 'Saint-Urcisse', '31T', 325424, 4891993, 44.1603, 0.816669, 90),
('47282', 'Saint-Vincent-de-Lamontjoie', '31T', 300893, 4884290, 44.0847, 0.513052, 186),
('47283', 'Saint-Vite', '31T', 336316, 4926600, 44.4742, 0.941941, 68),
('47284', 'Salles', '31T', 330879, 4935137, 44.5497, 0.87083, 110),
('47285', 'Samazan', '31T', 270149, 4924247, 44.435, 0.111943, 60),
('47286', 'Sauméjan', '30T', 739145, 4902552, 44.2369, -0.00527362, 142),
('47287', 'Saumont', '31T', 296441, 4888595, 44.1222, 0.455837, 129),
('47288', 'Sauvagnas', '31T', 319630, 4901968, 44.2486, 0.740833, 170),
('47289', 'La Sauvetat-de-Savères', '31T', 324109, 4899315, 44.2258, 0.797782, 74),
('47290', 'La Sauvetat-du-Dropt', '31T', 288824, 4947181, 44.6469, 0.336939, 45),
('47291', 'La Sauvetat-sur-Lède', '31T', 319448, 4926614, 44.4703, 0.730006, 80),
('47292', 'Sauveterre-la-Lémance', '31T', 342569, 4939196, 44.5889, 1.01667, 140),
('47293', 'Sauveterre-Saint-Denis', '31T', 316566, 4891586, 44.1544, 0.706114, 50),
('47294', 'Savignac-de-Duras', '31T', 277141, 4953691, 44.7019, 0.186948, 80),
('47295', 'Savignac-sur-Leyze', '31T', 324365, 4927745, 44.4817, 0.791395, 104),
('47296', 'Ségalas', '31T', 303866, 4940067, 44.5872, 0.529162, 120),
('47297', 'Sembas', '31T', 312532, 4909887, 44.3181, 0.649161, 210),
('47298', 'Sénestis', '31T', 279654, 4922559, 44.4228, 0.231948, 23),
('47299', 'Sérignac-Péboudou', '31T', 304709, 4943130, 44.615, 0.538608, 120),
('47300', 'Sérignac-sur-Garonne', '31T', 298995, 4898646, 44.2133, 0.483884, 42),
('47301', 'Seyches', '31T', 286050, 4936616, 44.5511, 0.306392, 66),
('47302', 'Sos', '31T', 270864, 4880602, 44.0428, 0.140005, 110),
('47303', 'Soumensac', '31T', 288072, 4951809, 44.6883, 0.325551, 175),
('47304', 'Taillebourg', '31T', 277959, 4925458, 44.4483, 0.209439, 24),
('47305', 'Tayrac', '31T', 327558, 4896228, 44.1989, 0.841949, 80),
('47306', 'Le Temple-sur-Lot', '31T', 302992, 4916993, 44.3794, 0.52695, 44),
('47307', 'Thézac', '31T', 341916, 4921429, 44.4289, 1.01389, 220),
('47308', 'Thouars-sur-Garonne', '31T', 287184, 4903621, 44.2547, 0.334172, 36),
('47310', 'Tonneins', '31T', 285819, 4918862, 44.3914, 0.310833, 35),
('47311', 'Tourliac', '31T', 326078, 4950363, 44.6856, 0.805274, 178),
('47312', 'Tournon-d''Agenais', '31T', 340357, 4918287, 44.4003, 0.995278, 200),
('47313', 'Tourtrès', '31T', 295352, 4931127, 44.5044, 0.425559, 173),
('47314', 'Trémons', '31T', 332887, 4919617, 44.4106, 0.901107, 110),
('47315', 'Trentels', '31T', 329998, 4922532, 44.4361, 0.863891, 90),
('47316', 'Varès', '31T', 291068, 4924375, 44.4425, 0.374449, 50),
('47317', 'Verteuil-d''Agenais', '31T', 294195, 4926716, 44.4644, 0.412774, 70),
('47318', 'Vianne', '31T', 285621, 4897248, 44.1969, 0.31722, 40),
('47319', 'Villebramar', '31T', 299320, 4933659, 44.5283, 0.474443, 110),
('47320', 'Villefranche-du-Queyran', '31T', 276502, 4910031, 44.3092, 0.197778, 64),
('47321', 'Villeneuve-de-Duras', '31T', 281229, 4957938, 44.7414, 0.23667, 100),
('47323', 'Villeneuve-sur-Lot', '31T', 317287, 4919757, 44.4081, 0.705275, 56),
('47324', 'Villeréal', '31T', 320998, 4945098, 44.6369, 0.743058, 103),
('47325', 'Villeton', '31T', 282938, 4916147, 44.3661, 0.275834, 29),
('47326', 'Virazeil', '31T', 279047, 4932063, 44.5081, 0.220276, 39),
('47327', 'Xaintrailles', '31T', 280975, 4898513, 44.2069, 0.258617, 180),
('47328', 'Saint-Georges', '31T', 335651, 4923004, 44.4417, 0.934726, 110),
('48001', 'Albaret-le-Comtal', '31T', 510071, 4969011, 44.8744, 3.1275, 1000),
('48002', 'Albaret-Sainte-Marie', '31T', 520685, 4970672, 44.8892, 3.26194, 960),
('48003', 'Allenc', '31T', 552518, 4932435, 44.5433, 3.66111, 1063),
('48004', 'Altier', '31T', 568420, 4924961, 44.4747, 3.86028, 720),
('48005', 'Antrenas', '31T', 521126, 4936546, 44.5819, 3.26612, 920),
('48007', 'Arzenc-d''Apcher', '31T', 507813, 4966971, 44.8561, 3.09888, 984),
('48008', 'Arzenc-de-Randon', '31T', 550120, 4945685, 44.6628, 3.63222, 1200),
('48009', 'Aumont-Aubrac', '31T', 522681, 4952164, 44.7225, 3.2864, 1060),
('48010', 'Auroux', '31T', 557628, 4955745, 44.7528, 3.72805, 1020),
('48012', 'Les Monts-Verts', '31T', 516285, 4967234, 44.8583, 3.20612, 1094),
('48013', 'Badaroux', '31T', 543608, 4931598, 44.5364, 3.54889, 802),
('48014', 'Bagnols-les-Bains', '31T', 552684, 4928302, 44.5061, 3.66278, 912),
('48015', 'Pied-de-Borne', '31T', 578228, 4925133, 44.4753, 3.98361, 328),
('48016', 'Balsièges', '31T', 536294, 4925289, 44.48, 3.45639, 686),
('48017', 'Banassac', '31T', 515940, 4919993, 44.4331, 3.20028, 540),
('48018', 'Barjac', '31T', 532723, 4928139, 44.5058, 3.41166, 659),
('48019', 'Barre-des-Cévennes', '31T', 552121, 4899231, 44.2444, 3.65278, 920),
('48020', 'Bassurels', '31T', 549869, 4891931, 44.1789, 3.62389, 660),
('48021', 'La Bastide-Puylaurent', '31T', 571966, 4937929, 44.5911, 3.90667, 1016),
('48022', 'Bédouès', '31T', 548206, 4909753, 44.3394, 3.60472, 580),
('48023', 'Belvezet', '31T', 559139, 4934806, 44.5642, 3.74472, 1180),
('48025', 'Les Bessons', '31T', 519980, 4957586, 44.7714, 3.2525, 1040),
('48026', 'Blavignac', '31T', 522595, 4970185, 44.8847, 3.28611, 940),
('48027', 'Le Bleymard', '31T', 558400, 4926160, 44.4864, 3.73444, 1069),
('48028', 'Les Bondons', '31T', 549230, 4914945, 44.3861, 3.61806, 940),
('48029', 'Le Born', '31T', 544517, 4934196, 44.5597, 3.56055, 1050),
('48030', 'Brenoux', '31T', 542365, 4925912, 44.4853, 3.53277, 756),
('48031', 'Brion', '31T', 505760, 4955644, 44.7542, 3.07277, 1140),
('48032', 'Le Buisson', '31T', 518553, 4941722, 44.6286, 3.23389, 1080),
('48033', 'Canilhac', '31T', 512117, 4918997, 44.4242, 3.15222, 720),
('48034', 'La Canourgue', '31T', 517024, 4919656, 44.43, 3.21389, 580),
('48036', 'Cassagnas', '31T', 559457, 4902317, 44.2717, 3.74501, 840),
('48037', 'Chadenet', '31T', 550398, 4929764, 44.5194, 3.63417, 880),
('48038', 'Chambon-le-Château', '31T', 552085, 4966808, 44.8528, 3.65916, 1010),
('48039', 'Chanac', '31T', 527244, 4923702, 44.4661, 3.3425, 650),
('48040', 'Chasseradès', '31T', 565506, 4933417, 44.5511, 3.82472, 1180),
('48041', 'Chastanier', '31T', 559789, 4952710, 44.7253, 3.755, 1090),
('48042', 'Chastel-Nouvel', '31T', 539688, 4933887, 44.5572, 3.49972, 1017),
('48043', 'Châteauneuf-de-Randon', '31T', 553620, 4943213, 44.6403, 3.67611, 1280),
('48044', 'Chauchailles', '31T', 506504, 4959996, 44.7933, 3.08223, 1040),
('48045', 'Chaudeyrac', '31T', 560012, 4945306, 44.6586, 3.75694, 1140),
('48046', 'Chaulhac', '31T', 520278, 4974373, 44.9225, 3.25694, 911),
('48047', 'La Chaze-de-Peyre', '31T', 520025, 4949996, 44.7031, 3.25277, 1040),
('48048', 'Cheylard-l''Évêque', '31T', 563679, 4944169, 44.6481, 3.80305, 1126),
('48049', 'Chirac', '31T', 521345, 4930098, 44.5239, 3.26861, 640),
('48050', 'Cocurès', '31T', 549460, 4910873, 44.3494, 3.62056, 620),
('48051', 'Le Collet-de-Dèze', '31T', 573413, 4899373, 44.2439, 3.91944, 300),
('48053', 'Cubières', '31T', 561528, 4924738, 44.4733, 3.77361, 960),
('48054', 'Cubiérettes', '31T', 562606, 4922959, 44.4572, 3.78694, 1040),
('48055', 'Cultures', '31T', 530103, 4926584, 44.4919, 3.37861, 761),
('48056', 'Esclanèdes', '31T', 528827, 4925344, 44.4808, 3.3625, 640),
('48057', 'Estables', '31T', 538643, 4946254, 44.6686, 3.4875, 1200),
('48058', 'La Fage-Montivernoux', '31T', 512070, 4956024, 44.7575, 3.1525, 1200),
('48059', 'La Fage-Saint-Julien', '31T', 515004, 4961059, 44.8028, 3.18972, 1094),
('48060', 'Fau-de-Peyre', '31T', 517679, 4955080, 44.7489, 3.22334, 1104),
('48061', 'Florac', '31T', 547155, 4908079, 44.3244, 3.59139, 560),
('48062', 'Fontanes', '31T', 562205, 4957670, 44.7697, 3.78611, 1032),
('48063', 'Fontans', '31T', 530614, 4953925, 44.7381, 3.38667, 1035),
('48064', 'Fournels', '31T', 509334, 4962653, 44.8172, 3.11805, 980),
('48065', 'Fraissinet-de-Fourques', '31T', 542960, 4895801, 44.2142, 3.53777, 720),
('48066', 'Fraissinet-de-Lozère', '31T', 555791, 4913578, 44.3733, 3.70028, 1060),
('48067', 'Gabriac', '31T', 557753, 4891842, 44.1775, 3.7225, 480),
('48068', 'Gabrias', '31T', 529766, 4932507, 44.5453, 3.37472, 903),
('48069', 'Gatuzières', '31T', 539022, 4893925, 44.1975, 3.48834, 824),
('48070', 'Grandrieu', '31T', 550125, 4959231, 44.7847, 3.63361, 1150),
('48071', 'Grandvals', '31T', 502925, 4954069, 44.74, 3.03695, 1047),
('48072', 'Grèzes', '31T', 526891, 4928853, 44.5125, 3.33833, 900),
('48073', 'Les Hermaux', '31T', 510487, 4929115, 44.5153, 3.13195, 1020),
('48074', 'Hures-la-Parade', '31T', 534107, 4899852, 44.2511, 3.42722, 1000),
('48075', 'Ispagnac', '31T', 542714, 4913078, 44.3697, 3.53611, 520),
('48076', 'Javols', '31T', 527115, 4949034, 44.6942, 3.34222, 980),
('48077', 'Julianges', '31T', 524375, 4975283, 44.9306, 3.30889, 1000),
('48078', 'Lachamp', '31T', 529403, 4939787, 44.6108, 3.37056, 1069),
('48079', 'Lajo', '31T', 533481, 4965017, 44.8378, 3.42361, 1240),
('48080', 'Langogne', '31T', 567684, 4952973, 44.7269, 3.85472, 920),
('48081', 'Lanuéjols', '31T', 545424, 4927568, 44.5, 3.57139, 840),
('48082', 'Laubert', '31T', 550870, 4937174, 44.5861, 3.64084, 1200),
('48083', 'Les Laubies', '31T', 534097, 4948110, 44.6856, 3.43027, 1060),
('48084', 'Laval-Atger', '31T', 555046, 4961987, 44.8092, 3.69611, 850),
('48085', 'Laval-du-Tarn', '31T', 528049, 4911086, 44.3525, 3.35194, 840),
('48086', 'Luc', '31T', 570421, 4944115, 44.6469, 3.88806, 1000),
('48087', 'Malbouzon', '31T', 510563, 4949726, 44.7008, 3.13333, 1174),
('48088', 'La Malène', '31T', 525614, 4905491, 44.3022, 3.32111, 451),
('48089', 'Le Malzieu-Forain', '31T', 529030, 4968637, 44.8706, 3.3675, 1160),
('48090', 'Le Malzieu-Ville', '31T', 525987, 4966895, 44.855, 3.32889, 880),
('48091', 'Marchastel', '31T', 508414, 4944107, 44.6503, 3.10611, 1200),
('48092', 'Marvejols', '31T', 522967, 4933312, 44.5528, 3.28916, 646),
('48093', 'Mas-d''Orcières', '31T', 556309, 4925370, 44.4794, 3.70806, 1072),
('48094', 'Le Massegros', '31T', 513803, 4906103, 44.3081, 3.17306, 870),
('48095', 'Mende', '31T', 539604, 4929597, 44.5186, 3.49834, 740),
('48096', 'Meyrueis', '31T', 534349, 4891770, 44.1783, 3.42972, 720),
('48097', 'Moissac-Vallée-Française', '31T', 562608, 4890405, 44.1642, 3.78306, 300),
('48098', 'Molezon', '31T', 553725, 4895633, 44.2119, 3.6725, 520),
('48099', 'Le Monastier-Pin-Moriès', '31T', 520245, 4929138, 44.5153, 3.25473, 620),
('48100', 'Montbel', '31T', 556818, 4937841, 44.5917, 3.71583, 1218),
('48101', 'Montbrun', '31T', 540236, 4909391, 44.3367, 3.50472, 573),
('48103', 'Montrodat', '31T', 526233, 4933294, 44.5525, 3.33028, 740),
('48104', 'Nasbinals', '31T', 503590, 4945430, 44.6622, 3.04528, 1180),
('48105', 'Naussac', '31T', 562968, 4956135, 44.7558, 3.79556, 923),
('48106', 'Noalhac', '31T', 508369, 4962035, 44.8117, 3.10584, 1020),
('48107', 'Palhers', '31T', 523797, 4929643, 44.5197, 3.29944, 748),
('48108', 'La Panouse', '31T', 546741, 4953127, 44.73, 3.59028, 1260),
('48110', 'Paulhac-en-Margeride', '31T', 529999, 4977219, 44.9478, 3.38028, 1160),
('48111', 'Pelouse', '31T', 548989, 4935092, 44.5675, 3.61694, 1180),
('48112', 'Pierrefiche', '31T', 558131, 4948745, 44.6897, 3.73361, 1080),
('48115', 'Le Pompidou', '31T', 552209, 4893708, 44.1947, 3.65334, 772),
('48116', 'Le Pont-de-Montvert', '31T', 559298, 4912467, 44.3631, 3.74417, 875),
('48117', 'Pourcharesses', '31T', 572974, 4924702, 44.4719, 3.9175, 800),
('48119', 'Prévenchères', '31T', 572163, 4930094, 44.5206, 3.90805, 850),
('48120', 'Prinsuéjols', '31T', 513254, 4946738, 44.6739, 3.16722, 1200),
('48121', 'Prunières', '31T', 527142, 4963660, 44.8258, 3.34334, 1006),
('48122', 'Quézac', '31T', 541830, 4912918, 44.3683, 3.525, 507),
('48123', 'Recoules-d''Aubrac', '31T', 501981, 4948638, 44.6911, 3.025, 1100),
('48124', 'Recoules-de-Fumas', '31T', 527471, 4943142, 44.6411, 3.34639, 1020),
('48125', 'Le Recoux', '31T', 511781, 4909339, 44.3372, 3.14778, 874),
('48126', 'Ribennes', '31T', 531503, 4942883, 44.6386, 3.39722, 1080),
('48127', 'Rieutort-de-Randon', '31T', 538006, 4942362, 44.6336, 3.47917, 1120),
('48128', 'Rimeize', '31T', 525609, 4956989, 44.7658, 3.32361, 937),
('48129', 'Rocles', '31T', 562001, 4951435, 44.7136, 3.78277, 1111),
('48130', 'Rousses', '31T', 547162, 4894719, 44.2042, 3.59027, 760),
('48131', 'Le Rozier', '31T', 516516, 4893120, 44.1911, 3.20667, 420),
('48132', 'Saint-Alban-sur-Limagnole', '31T', 530723, 4958739, 44.7814, 3.38834, 980),
('48133', 'Saint-Amans', '31T', 535630, 4945558, 44.6625, 3.44944, 1130),
('48134', 'Saint-Andéol-de-Clerguemort', '31T', 572657, 4905505, 44.2992, 3.91083, 655),
('48135', 'Saint-André-Capcèze', '31T', 575630, 4918622, 44.4169, 3.95, 480),
('48136', 'Saint-André-de-Lancize', '31T', 564659, 4900854, 44.2581, 3.81, 700),
('48137', 'Saint-Bauzile', '31T', 539916, 4925557, 44.4822, 3.50195, 771),
('48138', 'Saint-Bonnet-de-Chirac', '31T', 522519, 4928868, 44.5128, 3.28333, 800),
('48139', 'Saint-Bonnet-de-Montauroux', '31T', 556907, 4962713, 44.8156, 3.71972, 840),
('48140', 'Saint-Chély-d''Apcher', '31T', 521924, 4961234, 44.8042, 3.27723, 975),
('48141', 'Mas-Saint-Chély', '31T', 530826, 4909154, 44.335, 3.38667, 980),
('48142', 'Sainte-Colombe-de-Peyre', '31T', 518929, 4948511, 44.6897, 3.23888, 1060),
('48144', 'Sainte-Croix-Vallée-Française', '31T', 559371, 4892134, 44.18, 3.74277, 340),
('48145', 'Saint-Denis-en-Margeride', '31T', 537389, 4953745, 44.7361, 3.47222, 1160),
('48146', 'Sainte-Enimie', '31T', 532758, 4912527, 44.3653, 3.41112, 500),
('48147', 'Saint-Étienne-du-Valdonnez', '31T', 544752, 4922565, 44.455, 3.5625, 880),
('48148', 'Saint-Étienne-Vallée-Française', '31T', 567158, 4890728, 44.1667, 3.84001, 280),
('48149', 'Sainte-Eulalie', '31T', 536892, 4959821, 44.7908, 3.46639, 1240),
('48150', 'Saint-Flour-de-Mercoire', '31T', 565432, 4949432, 44.6953, 3.82583, 1041),
('48151', 'Saint-Frézal-d''Albuges', '31T', 561125, 4934671, 44.5628, 3.76972, 1200),
('48152', 'Saint-Frézal-de-Ventalon', '31T', 568127, 4904315, 44.2889, 3.85389, 640),
('48153', 'Saint-Gal', '31T', 533711, 4946288, 44.6692, 3.42528, 1080),
('48154', 'Saint-Georges-de-Lévéjac', '31T', 518518, 4907226, 44.3181, 3.23222, 880),
('48155', 'Saint-Germain-de-Calberte', '31T', 564504, 4896316, 44.2172, 3.8075, 500),
('48156', 'Saint-Germain-du-Teil', '31T', 513674, 4925110, 44.4792, 3.17194, 780),
('48157', 'Sainte-Hélène', '31T', 548081, 4929685, 44.5189, 3.605, 860),
('48158', 'Saint-Hilaire-de-Lavit', '31T', 568923, 4900280, 44.2525, 3.86334, 540),
('48160', 'Saint-Jean-la-Fouillouse', '31T', 554731, 4949888, 44.7003, 3.69083, 1240),
('48161', 'Saint-Juéry', '31T', 506895, 4963854, 44.8281, 3.08722, 933),
('48162', 'Saint-Julien-d''Arpaon', '31T', 553136, 4905348, 44.2994, 3.66612, 610),
('48163', 'Saint-Julien-des-Points', '31T', 576829, 4901294, 44.2608, 3.9625, 460),
('48164', 'Saint-Julien-du-Tournel', '31T', 554323, 4927667, 44.5003, 3.68333, 960),
('48165', 'Saint-Laurent-de-Muret', '31T', 516335, 4938723, 44.6017, 3.20584, 1180),
('48166', 'Saint-Laurent-de-Trèves', '31T', 548152, 4902070, 44.2703, 3.60334, 871),
('48167', 'Saint-Laurent-de-Veyrès', '31T', 510418, 4957718, 44.7728, 3.13166, 1080),
('48168', 'Saint-Léger-de-Peyre', '31T', 524141, 4938007, 44.595, 3.30416, 740),
('48169', 'Saint-Léger-du-Malzieu', '31T', 524327, 4970376, 44.8864, 3.30805, 851),
('48170', 'Saint-Martin-de-Boubaux', '31T', 573623, 4894500, 44.2, 3.92139, 480),
('48171', 'Saint-Martin-de-Lansuscle', '31T', 560090, 4896090, 44.2156, 3.75222, 540),
('48172', 'Saint-Maurice-de-Ventalon', '31T', 566160, 4908090, 44.3231, 3.82972, 1000),
('48173', 'Saint-Michel-de-Dèze', '31T', 571113, 4898792, 44.2389, 3.89056, 500),
('48174', 'Saint-Paul-le-Froid', '31T', 545175, 4959935, 44.7914, 3.57111, 1280),
('48175', 'Saint-Pierre-de-Nogaret', '31T', 510980, 4924271, 44.4717, 3.13805, 780),
('48176', 'Saint-Pierre-des-Tripiers', '31T', 521853, 4897147, 44.2272, 3.27362, 940),
('48177', 'Saint-Pierre-le-Vieux', '31T', 523089, 4967101, 44.8569, 3.29222, 960),
('48178', 'Saint-Privat-de-Vallongue', '31T', 566763, 4903282, 44.2797, 3.83667, 620),
('48179', 'Saint-Privat-du-Fau', '31T', 526923, 4973873, 44.9178, 3.34111, 1100),
('48180', 'Saint-Rome-de-Dolan', '31T', 517225, 4902131, 44.2722, 3.21583, 851),
('48181', 'Saint-Saturnin', '31T', 514973, 4917429, 44.41, 3.18806, 640),
('48182', 'Saint-Sauveur-de-Ginestoux', '31T', 548104, 4950329, 44.7047, 3.60723, 1300),
('48183', 'Saint-Sauveur-de-Peyre', '31T', 522794, 4945068, 44.6586, 3.28751, 1080),
('48184', 'Saint-Symphorien', '31T', 549440, 4965367, 44.84, 3.62555, 1220),
('48185', 'Les Salelles', '31T', 522311, 4925288, 44.4806, 3.28056, 620),
('48186', 'La Salle-Prunet', '31T', 548955, 4907228, 44.3167, 3.61388, 560),
('48187', 'Les Salces', '31T', 512756, 4931217, 44.5342, 3.16055, 1080),
('48188', 'Serverette', '31T', 530632, 4950161, 44.7042, 3.38667, 1000),
('48189', 'Servières', '31T', 532199, 4935943, 44.5761, 3.40556, 1000),
('48190', 'Termes', '31T', 513113, 4962228, 44.8133, 3.16584, 1140),
('48191', 'La Tieule', '31T', 512391, 4914431, 44.3831, 3.15556, 880),
('48192', 'Trélans', '31T', 507354, 4927259, 44.4986, 3.0925, 987),
('48193', 'Vebron', '31T', 545937, 4898629, 44.2394, 3.57528, 641),
('48194', 'Vialas', '31T', 571397, 4909317, 44.3336, 3.89556, 600),
('48195', 'Les Vignes', '31T', 518154, 4902720, 44.2775, 3.2275, 460),
('48197', 'La Villedieu', '31T', 541210, 4951238, 44.7133, 3.52028, 1273),
('48198', 'Villefort', '31T', 574365, 4920953, 44.4381, 3.93445, 591),
('49001', 'Les Alleuds', '30T', 695959, 5243801, 47.3183, -0.406948, 60),
('49002', 'Allonnes', '31T', 274968, 5242059, 47.2933, 0.0236147, 27),
('49003', 'Ambillou-Château', '30T', 700956, 5237789, 47.2628, -0.343606, 75),
('49004', 'Andard', '30T', 696184, 5259074, 47.4556, -0.39722, 20),
('49005', 'Andigné', '30T', 666809, 5281613, 47.6664, -0.778056, 44),
('49006', 'Andrezé', '30T', 655222, 5226338, 47.1722, -0.951669, 100),
('49007', 'Angers', '30T', 684177, 5260353, 47.4706, -0.55583, 30),
('49008', 'Angrie', '30T', 652529, 5270687, 47.5717, -0.971945, 65),
('49009', 'Antoigné', '30T', 719191, 5218626, 47.0847, -0.112223, 50),
('49010', 'Armaillé', '30T', 640486, 5286355, 47.7153, -1.12695, 50),
('49011', 'Artannes-sur-Thouet', '30T', 720218, 5231862, 47.2033, -0.0922255, 36),
('49012', 'Aubigné-sur-Layon', '30T', 692285, 5232093, 47.2142, -0.460557, 60),
('49013', 'Auverse', '31T', 278059, 5267011, 47.5186, 0.051947, 85),
('49014', 'Aviré', '30T', 665412, 5285961, 47.7058, -0.795002, 40),
('49015', 'Avrillé', '30T', 681704, 5264416, 47.5078, -0.586945, 50),
('49017', 'Baracé', '30T', 698373, 5279730, 47.6406, -0.358893, 48),
('49018', 'Baugé', '30T', 717845, 5269608, 47.5433, -0.104997, 60),
('49019', 'Bauné', '30T', 702025, 5264125, 47.4992, -0.317502, 30),
('49020', 'Beaucouzé', '30T', 678386, 5260638, 47.4747, -0.632497, 60),
('49021', 'Beaufort-en-Vallée', '30T', 710044, 5257793, 47.4397, -0.214163, 47),
('49022', 'Beaulieu-sur-Layon', '30T', 682383, 5242531, 47.3108, -0.586944, 90),
('49023', 'Beaupréau', '30T', 651959, 5229558, 47.2019, -0.993609, 92),
('49024', 'Beausse', '30T', 656804, 5242875, 47.3206, -0.925005, 150),
('49025', 'Beauvau', '30T', 706373, 5273240, 47.5797, -0.255561, 52),
('49026', 'Bécon-les-Granits', '30T', 665695, 5263508, 47.5039, -0.799719, 65),
('49027', 'Bégrolles-en-Mauges', '30T', 656622, 5222792, 47.14, -0.934443, 110),
('49028', 'Béhuard', '30T', 677910, 5250056, 47.3797, -0.643062, 15),
('49029', 'Blaison-Gohier', '30T', 698425, 5252907, 47.3994, -0.370285, 30),
('49030', 'Blou', '30T', 723734, 5249644, 47.3619, -0.0369462, 60),
('49031', 'Bocé', '30T', 719685, 5265751, 47.5081, -0.0825015, 60),
('49032', 'La Bohalle', '30T', 696292, 5255215, 47.4208, -0.397501, 23),
('49033', 'La Boissière-sur-Èvre', '30T', 645103, 5240413, 47.3011, -1.08055, 80),
('49034', 'Botz-en-Mauges', '30T', 651220, 5241123, 47.3061, -0.999446, 100),
('49035', 'Bouchemaine', '30T', 680408, 5254829, 47.4219, -0.608056, 20),
('49036', 'Bouillé-Ménard', '30T', 652344, 5289712, 47.7428, -0.967773, 50),
('49037', 'Le Bourg-d''Iré', '30T', 652649, 5282862, 47.6811, -0.966106, 40),
('49038', 'Bourg-l''Évêque', '30T', 649194, 5289043, 47.7375, -1.01, 102),
('49039', 'Bourgneuf-en-Mauges', '30T', 663739, 5242045, 47.3114, -0.833605, 110),
('49040', 'Bouzillé', '30T', 642737, 5244402, 47.3375, -1.11056, 80),
('49041', 'Brain-sur-Allonnes', '31T', 278365, 5242919, 47.3022, 0.0680566, 45),
('49042', 'Brain-sur-l''Authion', '30T', 695219, 5257837, 47.4447, -0.410555, 25),
('49043', 'Brain-sur-Longuenée', '30T', 668468, 5272578, 47.5847, -0.75945, 70),
('49044', 'Breil', '31T', 285830, 5261930, 47.4756, 0.157504, 75),
('49045', 'La Breille-les-Pins', '31T', 279178, 5247216, 47.3411, 0.0766659, 105),
('49046', 'Brézé', '30T', 722895, 5228470, 47.1719, -0.0586117, 60),
('49047', 'Brigné', '30T', 698048, 5235404, 47.2422, -0.383062, 70),
('49048', 'Briollay', '30T', 687482, 5270964, 47.565, -0.507496, 21),
('49049', 'Brion', '30T', 714299, 5258411, 47.4439, -0.1575, 60),
('49050', 'Brissac-Quincé', '30T', 693137, 5247200, 47.3497, -0.442776, 60),
('49051', 'Brissarthe', '30T', 691306, 5286323, 47.7019, -0.449996, 20),
('49052', 'Broc', '31T', 286902, 5273513, 47.58, 0.166107, 70),
('49053', 'Brossay', '30T', 711351, 5227119, 47.1636, -0.211396, 75),
('49054', 'Candé', '30T', 647649, 5269388, 47.5611, -1.03723, 40),
('49055', 'Cantenay-Épinard', '30T', 683059, 5267270, 47.5331, -0.567781, 30),
('49056', 'Carbay', '30T', 633565, 5288199, 47.7333, -1.21861, 70),
('49057', 'Cernusson', '30T', 690718, 5227808, 47.1761, -0.483054, 109),
('49058', 'Les Cerqueux', '30T', 679485, 5207715, 46.9986, -0.639165, 160),
('49059', 'Les Cerqueux-sous-Passavant', '30T', 692183, 5220316, 47.1083, -0.466943, 110),
('49060', 'Chacé', '30T', 721582, 5233119, 47.2142, -0.0736174, 40),
('49061', 'Challain-la-Potherie', '30T', 646769, 5277768, 47.6367, -1.04611, 55),
('49062', 'Chalonnes-sous-le-Lude', '31T', 287263, 5271367, 47.5608, 0.171941, 70),
('49063', 'Chalonnes-sur-Loire', '30T', 668851, 5246916, 47.3539, -0.764172, 30),
('49064', 'Chambellay', '30T', 673962, 5284604, 47.6914, -0.681663, 30),
('49065', 'Champigné', '30T', 682331, 5281832, 47.6642, -0.57139, 40),
('49066', 'Champ-sur-Layon', '30T', 683459, 5237682, 47.2669, -0.574716, 70),
('49067', 'Champteussé-sur-Baconne', '30T', 676017, 5282194, 47.6692, -0.655272, 40),
('49068', 'Champtocé-sur-Loire', '30T', 661287, 5253283, 47.4131, -0.861943, 30),
('49069', 'Champtoceaux', '30T', 631031, 5244005, 47.3364, -1.26555, 71),
('49070', 'Chanteloup-les-Bois', '30T', 675791, 5218263, 47.0944, -0.683608, 170),
('49071', 'Chanzeaux', '30T', 678278, 5237214, 47.2642, -0.643334, 60),
('49072', 'La Chapelle-du-Genêt', '30T', 650102, 5227256, 47.1817, -1.01888, 96),
('49073', 'La Chapelle-Hullin', '30T', 644720, 5291308, 47.7589, -1.06888, 50),
('49074', 'La Chapelle-Rousselin', '30T', 666919, 5231352, 47.2144, -0.795559, 106),
('49075', 'La Chapelle-Saint-Florent', '30T', 646861, 5244070, 47.3336, -1.05611, 80),
('49076', 'La Chapelle-Saint-Laud', '30T', 702288, 5276466, 47.61, -0.308335, 83),
('49077', 'La Chapelle-sur-Oudon', '30T', 663224, 5282933, 47.6792, -0.82528, 40),
('49078', 'Charcé-Saint-Ellier-sur-Aubance', '30T', 695660, 5247747, 47.3539, -0.409165, 42),
('49079', 'Chartrené', '30T', 716491, 5263777, 47.4914, -0.125833, 40),
('49080', 'Châteauneuf-sur-Sarthe', '30T', 688509, 5283791, 47.68, -0.488335, 29),
('49081', 'Châtelais', '30T', 655417, 5291647, 47.7594, -0.926116, 50),
('49082', 'Chaudefonds-sur-Layon', '30T', 673286, 5243894, 47.3256, -0.706672, 30),
('49083', 'Chaudron-en-Mauges', '30T', 652574, 5239150, 47.2881, -0.98222, 70),
('49084', 'Chaumont-d''Anjou', '30T', 704498, 5268878, 47.5411, -0.282496, 50),
('49085', 'La Chaussaire', '30T', 640516, 5229214, 47.2014, -1.14472, 90),
('49086', 'Chavagnes', '30T', 692758, 5238226, 47.2692, -0.451672, 80),
('49087', 'Chavaignes', '31T', 277046, 5269553, 47.5411, 0.0372224, 80),
('49088', 'Chazé-Henry', '30T', 641672, 5290708, 47.7542, -1.10973, 70),
('49089', 'Chazé-sur-Argos', '30T', 658444, 5276128, 47.6192, -0.891386, 35),
('49090', 'Cheffes', '30T', 687320, 5277294, 47.6219, -0.506945, 20),
('49091', 'Chemellier', '30T', 699564, 5246580, 47.3422, -0.35805, 57),
('49092', 'Chemillé', '30T', 672002, 5231004, 47.21, -0.728617, 80),
('49093', 'Chemiré-sur-Sarthe', '30T', 692610, 5291651, 47.7494, -0.430277, 20),
('49094', 'Chênehutte-Trèves-Cunault', '30T', 715039, 5243324, 47.3081, -0.155005, 30),
('49095', 'Chenillé-Changé', '30T', 675198, 5285815, 47.7019, -0.664719, 40),
('49096', 'Cherré', '30T', 682873, 5287164, 47.7119, -0.561944, 67),
('49097', 'Cheviré-le-Rouge', '30T', 711925, 5275294, 47.5964, -0.180827, 73),
('49098', 'Chigné', '31T', 281070, 5274161, 47.5839, 0.0883291, 67),
('49099', 'Cholet', '30T', 661330, 5213960, 47.0594, -0.875559, 100),
('49100', 'Cizay-la-Madeleine', '30T', 713353, 5230065, 47.1894, -0.183613, 55),
('49101', 'Clefs', '30T', 720134, 5278813, 47.6253, -0.0700025, 60),
('49102', 'Cléré-sur-Layon', '30T', 695700, 5218577, 47.0917, -0.42139, 100),
('49103', 'Combrée', '30T', 647860, 5285765, 47.7083, -1.02889, 50),
('49104', 'Concourson-sur-Layon', '30T', 701499, 5228011, 47.1747, -0.340837, 51),
('49105', 'Contigné', '30T', 686183, 5289309, 47.7303, -0.51694, 60),
('49106', 'Corné', '30T', 699557, 5260950, 47.4714, -0.351671, 30),
('49107', 'Cornillé-les-Caves', '30T', 703339, 5264294, 47.5003, -0.299996, 60),
('49108', 'La Cornuaille', '30T', 651995, 5263909, 47.5108, -0.981383, 55),
('49109', 'Coron', '30T', 678654, 5221963, 47.1269, -0.644447, 130),
('49110', 'Corzé', '30T', 696440, 5270764, 47.5606, -0.388617, 20),
('49111', 'Cossé-d''Anjou', '30T', 676087, 5226026, 47.1642, -0.676672, 110),
('49112', 'Le Coudray-Macouard', '30T', 718401, 5230868, 47.195, -0.11667, 51),
('49113', 'Courchamps', '30T', 715439, 5231222, 47.1992, -0.155555, 60),
('49114', 'Courléon', '31T', 284326, 5252373, 47.3892, 0.142225, 75),
('49115', 'Coutures', '30T', 699805, 5248751, 47.3617, -0.353887, 50),
('49116', 'Cuon', '30T', 718485, 5262553, 47.4797, -0.100001, 50),
('49117', 'La Daguenière', '30T', 693618, 5254910, 47.4189, -0.43305, 23),
('49119', 'Daumeray', '30T', 697951, 5286608, 47.7025, -0.361388, 50),
('49120', 'Denée', '30T', 680746, 5249988, 47.3783, -0.605552, 30),
('49121', 'Dénezé-sous-Doué', '30T', 706683, 5235854, 47.2436, -0.268884, 72),
('49122', 'Dénezé-sous-le-Lude', '31T', 284354, 5267950, 47.5292, 0.134995, 70),
('49123', 'Distré', '30T', 718773, 5233910, 47.2222, -0.11028, 46),
('49125', 'Doué-la-Fontaine', '30T', 706768, 5230418, 47.1947, -0.270273, 70),
('49126', 'Drain', '30T', 635509, 5244663, 47.3414, -1.2061, 50),
('49127', 'Durtal', '30T', 706826, 5283456, 47.6714, -0.24472, 40),
('49128', 'Échemiré', '30T', 712981, 5270418, 47.5522, -0.169162, 60),
('49129', 'Écouflant', '30T', 685938, 5266898, 47.5289, -0.529722, 20),
('49130', 'Écuillé', '30T', 683229, 5276515, 47.6161, -0.561667, 40),
('49131', 'Épieds', '30T', 723936, 5225480, 47.1447, -0.0463838, 35),
('49132', 'Étriché', '30T', 691991, 5280722, 47.6514, -0.443337, 36),
('49133', 'Faveraye-Mâchelles', '30T', 689196, 5234526, 47.2369, -0.500283, 53),
('49134', 'Faye-d''Anjou', '30T', 687675, 5240658, 47.2925, -0.517783, 80),
('49135', 'Feneu', '30T', 681090, 5271380, 47.5706, -0.592225, 48),
('49136', 'La Ferrière-de-Flée', '30T', 661640, 5288882, 47.7331, -0.844163, 70),
('49137', 'Le Fief-Sauvin', '30T', 648306, 5231689, 47.2219, -1.04111, 80),
('49138', 'Fontaine-Guérin', '30T', 711760, 5263109, 47.4869, -0.188884, 50),
('49139', 'Fontaine-Milon', '30T', 707270, 5264463, 47.5006, -0.247781, 60),
('49140', 'Fontevraud-l''Abbaye', '31T', 276222, 5229647, 47.1822, 0.0463882, 80),
('49141', 'Forges', '30T', 708700, 5232959, 47.2169, -0.243613, 66),
('49142', 'La Fosse-de-Tigné', '30T', 694820, 5228653, 47.1825, -0.428608, 65),
('49143', 'Fougeré', '30T', 714217, 5278901, 47.6281, -0.148613, 30),
('49144', 'Freigné', '30T', 641391, 5267936, 47.5494, -1.12084, 50),
('49145', 'Le Fuilet', '30T', 642467, 5238217, 47.2819, -1.11611, 86),
('49147', 'Gée', '30T', 708796, 5259850, 47.4586, -0.229724, 24),
('49148', 'Gené', '30T', 665229, 5277737, 47.6319, -0.80055, 44),
('49149', 'Gennes', '30T', 709219, 5246792, 47.3411, -0.230281, 35),
('49150', 'Genneteil', '31T', 278095, 5275109, 47.5914, 0.0483373, 65),
('49151', 'Gesté', '30T', 643178, 5227054, 47.1814, -1.11028, 70),
('49153', 'Valanjou', '30T', 682301, 5231591, 47.2125, -0.592494, 70),
('49154', 'Grézillé', '30T', 700504, 5244881, 47.3267, -0.346385, 55),
('49155', 'Grez-Neuville', '30T', 674361, 5274760, 47.6028, -0.680274, 30),
('49156', 'Grugé-l''Hôpital', '30T', 646882, 5290652, 47.7525, -1.04027, 60),
('49157', 'Le Guédéniau', '30T', 722414, 5264494, 47.4958, -0.0469427, 60),
('49158', 'L''Hôtellerie-de-Flée', '30T', 658395, 5290152, 47.7453, -0.88695, 50),
('49159', 'Huillé', '30T', 702472, 5280799, 47.6489, -0.303886, 47),
('49160', 'Ingrandes', '30T', 656977, 5252147, 47.4039, -0.91944, 20),
('49161', 'La Jaille-Yvon', '30T', 674669, 5288147, 47.7231, -0.670829, 70),
('49162', 'Jallais', '30T', 661737, 5229200, 47.1964, -0.864724, 90),
('49163', 'Jarzé', '30T', 708142, 5270552, 47.555, -0.233338, 70),
('49165', 'La Jubaudière', '30T', 660066, 5226375, 47.1714, -0.887777, 100),
('49167', 'Juigné-sur-Loire', '30T', 690284, 5253565, 47.4078, -0.477785, 30),
('49169', 'La Jumellière', '30T', 671769, 5239029, 47.2822, -0.728608, 90),
('49170', 'Juvardeil', '30T', 688034, 5281056, 47.6556, -0.495835, 25),
('49171', 'La Lande-Chasles', '30T', 721206, 5261543, 47.4697, -0.0644389, 65),
('49172', 'Landemont', '30T', 633012, 5236205, 47.2658, -1.24167, 91),
('49173', 'Lasse', '31T', 275013, 5268951, 47.535, 0.0105519, 80),
('49174', 'Lézigné', '30T', 703224, 5279589, 47.6378, -0.294446, 50),
('49175', 'Linières-Bouton', '31T', 279682, 5260613, 47.4617, 0.0766712, 55),
('49176', 'Le Lion-d''Angers', '30T', 671851, 5277651, 47.6294, -0.712506, 21),
('49177', 'Liré', '30T', 638878, 5245112, 47.3447, -1.16139, 50),
('49178', 'Loiré', '30T', 651983, 5275585, 47.6158, -0.977503, 42),
('49179', 'Le Longeron', '30T', 647461, 5208905, 47.0172, -1.05973, 110),
('49180', 'Longué-Jumelles', '30T', 718104, 5251380, 47.3794, -0.110557, 40),
('49181', 'Louerre', '30T', 702507, 5241612, 47.2967, -0.321391, 64),
('49182', 'Louresse-Rochemenier', '30T', 703457, 5235402, 47.2406, -0.31167, 70),
('49183', 'Le Louroux-Béconnais', '30T', 659305, 5265246, 47.5211, -0.883883, 80),
('49184', 'Louvaines', '30T', 665164, 5284409, 47.6919, -0.798893, 40),
('49185', 'Lué-en-Baugeois', '30T', 704792, 5267065, 47.5247, -0.279437, 44),
('49186', 'Luigné', '30T', 697305, 5240014, 47.2839, -0.390832, 80),
('49187', 'Marans', '30T', 660990, 5278453, 47.6394, -0.856673, 40),
('49188', 'Marcé', '30T', 701066, 5273116, 47.5803, -0.326112, 40),
('49189', 'Marigné', '30T', 678790, 5288365, 47.7239, -0.615836, 50),
('49190', 'Le Marillais', '30T', 645641, 5246666, 47.3572, -1.07139, 28),
('49191', 'Martigné-Briand', '30T', 694714, 5234428, 47.2344, -0.427495, 70),
('49192', 'Maulévrier', '30T', 671428, 5208589, 47.0086, -0.744725, 130),
('49193', 'Le May-sur-Èvre', '30T', 659918, 5222479, 47.1364, -0.891116, 100),
('49194', 'Mazé', '30T', 705853, 5259499, 47.4564, -0.268889, 25),
('49195', 'Mazières-en-Mauges', '30T', 665909, 5212542, 47.0456, -0.815827, 118),
('49196', 'La Meignanne', '30T', 675452, 5265554, 47.5197, -0.669447, 59),
('49197', 'Meigné-le-Vicomte', '31T', 288395, 5265639, 47.5097, 0.189725, 90),
('49198', 'Meigné', '30T', 711330, 5234783, 47.2325, -0.208059, 70),
('49199', 'Melay', '30T', 674615, 5228084, 47.1831, -0.695277, 120),
('49200', 'La Membrolle-sur-Longuenée', '30T', 675108, 5270055, 47.5603, -0.672221, 50),
('49201', 'La Ménitré', '30T', 706092, 5253295, 47.4006, -0.268611, 21),
('49202', 'Méon', '31T', 283064, 5264195, 47.495, 0.119727, 86),
('49204', 'Le Mesnil-en-Vallée', '30T', 656042, 5247859, 47.3656, -0.933332, 50),
('49205', 'Miré', '30T', 688040, 5292459, 47.7581, -0.490837, 40),
('49206', 'Montfaucon-Montigné', '30T', 642407, 5217955, 47.0997, -1.12334, 60),
('49207', 'Montfort', '30T', 711493, 5230833, 47.1969, -0.207773, 90),
('49208', 'Montguillon', '30T', 669174, 5288541, 47.7281, -0.743891, 70),
('49209', 'Montigné-lès-Rairies', '30T', 710285, 5277861, 47.62, -0.201385, 47),
('49211', 'Montilliers', '30T', 689238, 5228626, 47.1839, -0.502222, 91),
('49212', 'Montjean-sur-Loire', '30T', 661552, 5250510, 47.3881, -0.859443, 30),
('49213', 'Montpollin', '30T', 717749, 5274426, 47.5867, -0.103884, 78),
('49214', 'Montreuil-Juigné', '30T', 679998, 5266774, 47.5294, -0.608617, 59),
('49215', 'Montreuil-Bellay', '30T', 716086, 5223890, 47.1331, -0.150552, 40),
('49216', 'Montreuil-sur-Loir', '30T', 695069, 5276126, 47.6092, -0.40444, 30),
('49217', 'Montreuil-sur-Maine', '30T', 673011, 5280095, 47.6511, -0.696112, 30),
('49218', 'Montrevault', '30T', 647839, 5236033, 47.2611, -1.04583, 60),
('49219', 'Montsoreau', '31T', 277164, 5233382, 47.2161, 0.0569476, 33),
('49220', 'Morannes', '30T', 693733, 5291101, 47.7442, -0.415555, 30),
('49221', 'Mouliherne', '31T', 275078, 5261375, 47.4669, 0.0152788, 70),
('49222', 'Mozé-sur-Louet', '30T', 685012, 5247803, 47.3575, -0.550001, 60),
('49223', 'Mûrs-Erigné', '30T', 684585, 5252024, 47.3956, -0.553895, 20),
('49224', 'Neuillé', '30T', 724073, 5247370, 47.3414, -0.0336091, 40),
('49225', 'Neuvy-en-Mauges', '30T', 664525, 5237186, 47.2675, -0.825006, 95),
('49226', 'Noëllet', '30T', 643313, 5284138, 47.6947, -1.09001, 40),
('49227', 'Notre-Dame-d''Allençon', '30T', 692953, 5241910, 47.3022, -0.447503, 68),
('49228', 'Noyant', '31T', 282876, 5265902, 47.5103, 0.116393, 85),
('49229', 'Noyant-la-Gravoyère', '30T', 653088, 5285190, 47.7019, -0.959444, 70),
('49230', 'Noyant-la-Plaine', '30T', 699857, 5239173, 47.2756, -0.357498, 80),
('49231', 'Nuaillé', '30T', 667275, 5217986, 47.0942, -0.795839, 130),
('49232', 'Nueil-sur-Layon', '30T', 699924, 5221623, 47.1178, -0.364441, 90),
('49233', 'Nyoiseau', '30T', 656456, 5287103, 47.7183, -0.913895, 50),
('49234', 'Parçay-les-Pins', '31T', 285818, 5257603, 47.4367, 0.159441, 80),
('49235', 'Parnay', '31T', 273682, 5234844, 47.2281, 0.0102845, 32),
('49236', 'Passavant-sur-Layon', '30T', 698084, 5220511, 47.1083, -0.389161, 90),
('49237', 'La Pellerine', '31T', 283155, 5260452, 47.4614, 0.122772, 97),
('49238', 'Pellouailles-les-Vignes', '30T', 692614, 5266280, 47.5214, -0.441388, 39),
('49239', 'Le Pin-en-Mauges', '30T', 659105, 5235461, 47.2533, -0.897221, 110),
('49240', 'La Plaine', '30T', 679632, 5215443, 47.0681, -0.634163, 190),
('49241', 'Le Plessis-Grammoire', '30T', 693632, 5263996, 47.5006, -0.428883, 35),
('49242', 'Le Plessis-Macé', '30T', 675120, 5268263, 47.5442, -0.672775, 87),
('49243', 'La Poitevinière', '30T', 659309, 5232563, 47.2272, -0.89556, 90),
('49244', 'La Pommeraye', '30T', 661743, 5246623, 47.3531, -0.85833, 80),
('49245', 'Pontigné', '30T', 722606, 5270437, 47.5492, -0.0413932, 80),
('49246', 'Les Ponts-de-Cé', '30T', 686837, 5254443, 47.4167, -0.52306, 20),
('49247', 'La Possonnière', '30T', 674799, 5249530, 47.3758, -0.684449, 30),
('49248', 'Pouancé', '30T', 637146, 5289209, 47.7417, -1.17056, 77),
('49249', 'La Pouëze', '30T', 665017, 5268957, 47.5531, -0.806672, 65),
('49250', 'La Prévière', '30T', 636625, 5286540, 47.7178, -1.17834, 70),
('49251', 'Pruillé', '30T', 675870, 5271839, 47.5761, -0.661386, 50),
('49252', 'Le Puiset-Doré', '30T', 642725, 5232757, 47.2328, -1.11444, 90),
('49253', 'Le Puy-Notre-Dame', '30T', 709819, 5222769, 47.125, -0.233615, 80),
('49254', 'Querré', '30T', 678624, 5283602, 47.6811, -0.619998, 64),
('49256', 'Rablay-sur-Layon', '30T', 683319, 5240829, 47.2953, -0.575272, 40),
('49257', 'Les Rairies', '30T', 709927, 5281403, 47.6519, -0.204445, 35),
('49258', 'La Renaudière', '30T', 647240, 5220389, 47.1206, -1.05889, 90),
('49259', 'Rochefort-sur-Loire', '30T', 676960, 5247463, 47.3567, -0.65667, 20),
('49260', 'La Romagne', '30T', 650251, 5213855, 47.0611, -1.02139, 100),
('49261', 'Les Rosiers-sur-Loire', '30T', 709494, 5247915, 47.3511, -0.226116, 21),
('49262', 'Rou-Marson', '30T', 715443, 5235148, 47.2344, -0.153613, 40),
('49263', 'Roussay', '30T', 647027, 5217048, 47.0906, -1.06278, 85),
('49264', 'Saint-André-de-la-Marche', '30T', 652336, 5218140, 47.0992, -0.992506, 100),
('49265', 'Saint-Aubin-de-Luigné', '30T', 676298, 5244353, 47.3289, -0.666662, 20),
('49266', 'Saint-Augustin-des-Bois', '30T', 666316, 5258583, 47.4594, -0.793335, 64),
('49267', 'Saint-Barthélemy-d''Anjou', '30T', 688830, 5260285, 47.4686, -0.49417, 40),
('49268', 'Sainte-Christine', '30T', 662764, 5239299, 47.2869, -0.847498, 100),
('49269', 'Saint-Christophe-du-Bois', '30T', 656213, 5210302, 47.0278, -0.944161, 103),
('49270', 'Saint-Christophe-la-Couperie', '30T', 637625, 5234952, 47.2536, -1.18111, 90),
('49271', 'Saint-Clément-de-la-Place', '30T', 669747, 5265973, 47.525, -0.745004, 60),
('49272', 'Saint-Clément-des-Levées', '30T', 712845, 5245871, 47.3317, -0.182779, 24),
('49273', 'Saint-Crespin-sur-Moine', '30T', 637603, 5217780, 47.0992, -1.18666, 70),
('49274', 'Saint-Cyr-en-Bourg', '30T', 722720, 5230874, 47.1936, -0.0597243, 50),
('49276', 'Saint-Florent-le-Vieil', '30T', 649910, 5247205, 47.3611, -1.01472, 30),
('49277', 'Sainte-Gemmes-d''Andigné', '30T', 658961, 5282444, 47.6758, -0.882215, 30),
('49278', 'Sainte-Gemmes-sur-Loire', '30T', 684056, 5254849, 47.4211, -0.559725, 30),
('49279', 'Saint-Georges-des-Sept-Voies', '30T', 704834, 5247256, 47.3467, -0.28805, 80),
('49280', 'Saint-Georges-du-Bois', '30T', 709148, 5264066, 47.4964, -0.223063, 48),
('49281', 'Saint-Georges-des-Gardes', '30T', 669921, 5224301, 47.1503, -0.758615, 150),
('49282', 'Saint-Georges-sur-Layon', '30T', 699459, 5230414, 47.1969, -0.366661, 70),
('49283', 'Saint-Georges-sur-Loire', '30T', 668949, 5253005, 47.4086, -0.760557, 50),
('49284', 'Saint-Germain-des-Prés', '30T', 663561, 5252944, 47.4094, -0.831945, 20),
('49285', 'Saint-Germain-sur-Moine', '30T', 642333, 5220176, 47.1197, -1.12361, 70),
('49288', 'Saint-Jean-de-la-Croix', '30T', 681697, 5253169, 47.4067, -0.591662, 20),
('49289', 'Saint-Jean-de-Linières', '30T', 675718, 5258796, 47.4589, -0.668608, 70),
('49290', 'Saint-Jean-des-Mauvrets', '30T', 692436, 5252554, 47.3981, -0.449728, 20),
('49291', 'Saint-Just-sur-Dive', '30T', 720417, 5229366, 47.1808, -0.0908285, 28),
('49292', 'Saint-Lambert-du-Lattay', '30T', 678966, 5241561, 47.3031, -0.632503, 60),
('49294', 'Saint-Lambert-la-Potherie', '30T', 674967, 5261492, 47.4833, -0.677496, 60),
('49295', 'Saint-Laurent-de-la-Plaine', '30T', 666094, 5242697, 47.3167, -0.802226, 82),
('49296', 'Saint-Laurent-des-Autels', '30T', 636931, 5238549, 47.2861, -1.18917, 92),
('49297', 'Saint-Laurent-du-Mottay', '30T', 655037, 5246164, 47.3506, -0.947226, 70),
('49298', 'Saint-Léger-des-Bois', '30T', 672702, 5258737, 47.4592, -0.708614, 59),
('49299', 'Saint-Léger-sous-Cholet', '30T', 658552, 5217623, 47.0931, -0.910828, 126),
('49300', 'Saint-Lézin', '30T', 668589, 5235539, 47.2517, -0.771943, 98),
('49301', 'Saint-Macaire-en-Mauges', '30T', 652374, 5220797, 47.1231, -0.991107, 100),
('49302', 'Saint-Macaire-du-Bois', '30T', 706898, 5221862, 47.1178, -0.2725, 50),
('49303', 'Saint-Martin-d''Arcé', '30T', 719346, 5271426, 47.5592, -0.0841695, 70),
('49304', 'Saint-Martin-de-la-Place', '30T', 715470, 5244205, 47.3158, -0.148884, 25),
('49305', 'Saint-Martin-du-Bois', '30T', 669306, 5286166, 47.7067, -0.743055, 60),
('49306', 'Saint-Martin-du-Fouilloux', '30T', 673107, 5255659, 47.4314, -0.70445, 70),
('49307', 'Saint-Mathurin-sur-Loire', '30T', 702223, 5254149, 47.4094, -0.319439, 25),
('49308', 'Saint-Melaine-sur-Aubance', '30T', 689183, 5249327, 47.37, -0.494171, 39),
('49309', 'Saint-Michel-et-Chanveaux', '30T', 640433, 5282523, 47.6808, -1.12889, 58),
('49310', 'Saint-Paul-du-Bois', '30T', 686360, 5216979, 47.08, -0.544999, 130),
('49311', 'Saint-Philbert-du-Peuple', '30T', 723080, 5253051, 47.3928, -0.0438835, 35),
('49312', 'Saint-Philbert-en-Mauges', '30T', 650483, 5223837, 47.1508, -1.015, 100),
('49313', 'Saint-Pierre-Montlimart', '30T', 649555, 5237188, 47.2711, -1.02278, 85),
('49314', 'Saint-Quentin-en-Mauges', '30T', 657708, 5239717, 47.2919, -0.914168, 130),
('49315', 'Saint-Quentin-lès-Beaurepaire', '30T', 717283, 5279046, 47.6283, -0.107784, 40),
('49316', 'Saint-Rémy-en-Mauges', '30T', 645730, 5237124, 47.2714, -1.07334, 90),
('49317', 'Saint-Rémy-la-Varenne', '30T', 702572, 5252524, 47.3947, -0.315561, 25),
('49318', 'Saint-Saturnin-sur-Loire', '30T', 693630, 5251975, 47.3925, -0.434173, 80),
('49319', 'Saint-Sauveur-de-Flée', '30T', 665577, 5291156, 47.7525, -0.790829, 60),
('49320', 'Saint-Sauveur-de-Landemont', '30T', 632146, 5238255, 47.2844, -1.2525, 70),
('49321', 'Saint-Sigismond', '30T', 655197, 5257567, 47.4531, -0.941116, 68),
('49322', 'Saint-Sulpice', '30T', 694841, 5252818, 47.3997, -0.417772, 30),
('49323', 'Saint-Sylvain-d''Anjou', '30T', 690257, 5266017, 47.5197, -0.47278, 38),
('49324', 'La Salle-et-Chapelle-Aubry', '30T', 652626, 5235507, 47.2553, -0.982778, 90),
('49325', 'La Salle-de-Vihiers', '30T', 679254, 5225133, 47.1553, -0.635279, 189),
('49326', 'Sarrigné', '30T', 697038, 5264202, 47.5014, -0.383613, 40),
('49327', 'Saulgé-l''Hôpital', '30T', 698202, 5241466, 47.2967, -0.378338, 61),
('49328', 'Saumur', '30T', 721172, 5237894, 47.2572, -0.0766639, 40),
('49329', 'Savennières', '30T', 676805, 5250517, 47.3842, -0.657505, 30),
('49330', 'Sceaux-d''Anjou', '30T', 679890, 5277060, 47.6219, -0.605836, 50),
('49331', 'Segré', '30T', 660006, 5283894, 47.6886, -0.867772, 30),
('49332', 'La Séguinière', '30T', 656596, 5214173, 47.0625, -0.937782, 70),
('49333', 'Seiches-sur-le-Loir', '30T', 698446, 5272686, 47.5772, -0.361111, 26),
('49334', 'Sermaise', '30T', 709824, 5267429, 47.5264, -0.212497, 46),
('49336', 'Somloire', '30T', 681967, 5211560, 47.0325, -0.605001, 120),
('49337', 'Soucelles', '30T', 694174, 5271616, 47.5689, -0.418332, 21),
('49338', 'Soulaines-sur-Aubance', '30T', 687067, 5248548, 47.3636, -0.5225, 58),
('49339', 'Soulaire-et-Bourg', '30T', 684255, 5272468, 47.5794, -0.549726, 50),
('49341', 'Souzay-Champigny', '30T', 726486, 5235407, 47.2331, -0.00778334, 32),
('49342', 'Tancoigné', '30T', 696403, 5227933, 47.1756, -0.408051, 60),
('49343', 'La Tessoualle', '30T', 663607, 5207937, 47.0047, -0.847776, 120),
('49344', 'Thorigné-d''Anjou', '30T', 675573, 5278905, 47.6397, -0.662502, 50),
('49345', 'Thouarcé', '30T', 689026, 5237889, 47.2672, -0.501105, 30),
('49346', 'Le Thoureil', '30T', 706375, 5250029, 47.3711, -0.266383, 30),
('49347', 'Tiercé', '30T', 690414, 5276591, 47.6147, -0.466113, 30),
('49348', 'Tigné', '30T', 694797, 5230630, 47.2003, -0.428052, 60),
('49349', 'Tillières', '30T', 639191, 5222882, 47.1447, -1.16417, 80),
('49350', 'Torfou', '30T', 643101, 5211022, 47.0372, -1.11639, 100),
('49351', 'La Tourlandry', '30T', 674595, 5223758, 47.1442, -0.697223, 180),
('49352', 'Toutlemonde', '30T', 669743, 5213577, 47.0539, -0.765003, 130),
('49353', 'Trélazé', '30T', 690878, 5257879, 47.4464, -0.468059, 19),
('49354', 'Le Tremblay', '30T', 648926, 5282425, 47.6781, -1.01583, 45);
INSERT INTO `ods_communes` (`oc_code_insee`, `oc_nom`, `oc_secteur`, `oc_x_utm`, `oc_y_utm`, `oc_latitude`, `oc_longitude`, `oc_altitude`) VALUES
('49355', 'Trémentines', '30T', 667865, 5220999, 47.1211, -0.786947, 126),
('49356', 'Trémont', '30T', 693560, 5225954, 47.1586, -0.446385, 90),
('49358', 'Turquant', '31T', 275000, 5234083, 47.2217, 0.0280541, 40),
('49359', 'Les Ulmes', '30T', 713586, 5233535, 47.2206, -0.178886, 55),
('49360', 'La Varenne', '30T', 626780, 5241534, 47.315, -1.3225, 60),
('49361', 'Varennes-sur-Loire', '31T', 277023, 5235799, 47.2378, 0.0538836, 27),
('49362', 'Varrains', '30T', 722168, 5234346, 47.225, -0.0652798, 51),
('49363', 'Vauchrétien', '30T', 690828, 5245209, 47.3325, -0.474172, 70),
('49364', 'Vaudelnay', '30T', 712345, 5224095, 47.1361, -0.199726, 52),
('49365', 'Les Verchers-sur-Layon', '30T', 705028, 5225907, 47.1547, -0.295279, 54),
('49366', 'Vergonnes', '30T', 643684, 5287699, 47.7267, -1.08389, 100),
('49367', 'Vern-d''Anjou', '30T', 662800, 5274209, 47.6008, -0.834171, 40),
('49368', 'Vernantes', '31T', 277633, 5253024, 47.3928, 0.0533324, 60),
('49369', 'Vernoil-le-Fourrier', '31T', 279601, 5252331, 47.3872, 0.0797205, 70),
('49370', 'Verrie', '30T', 713548, 5238664, 47.2667, -0.176938, 70),
('49371', 'Vezins', '30T', 673707, 5220982, 47.1194, -0.709998, 140),
('49372', 'Le Vieil-Baugé', '30T', 716787, 5268209, 47.5311, -0.119728, 50),
('49373', 'Vihiers', '30T', 687098, 5224356, 47.1461, -0.532221, 90),
('49374', 'Villebernier', '30T', 724712, 5237781, 47.255, -0.0299949, 32),
('49375', 'Villedieu-la-Blouère', '30T', 646917, 5223192, 47.1458, -1.06223, 100),
('49376', 'Villemoisan', '30T', 658913, 5258841, 47.4636, -0.891394, 60),
('49377', 'Villevêque', '30T', 693953, 5270712, 47.5608, -0.421666, 20),
('49378', 'Vivy', '30T', 722504, 5245518, 47.3253, -0.0552781, 29),
('49380', 'Vaulandry', '30T', 722214, 5275800, 47.5975, -0.0438828, 70),
('49381', 'Yzernay', '30T', 674722, 5210106, 47.0214, -0.700839, 170),
('50001', 'Acqueville', '30T', 590485, 5496086, 49.6106, -1.7475, 110),
('50002', 'Agneaux', '30T', 637731, 5442110, 49.1164, -1.1125, 60),
('50003', 'Agon-Coutainville', '30T', 604118, 5433158, 49.0425, -1.57527, 30),
('50004', 'Airel', '30T', 639739, 5454086, 49.2236, -1.08084, 5),
('50005', 'Amfreville', '30T', 616867, 5474345, 49.4106, -1.38889, 20),
('50006', 'Amigny', '30T', 632757, 5446530, 49.1572, -1.17917, 21),
('50007', 'Ancteville', '30T', 611088, 5439966, 49.1025, -1.47806, 60),
('50008', 'Anctoville-sur-Boscq', '30T', 607626, 5411294, 48.8453, -1.53306, 50),
('50009', 'Angey', '30T', 610948, 5401104, 48.7531, -1.49055, 110),
('50010', 'Angoville-au-Plain', '30T', 626917, 5467772, 49.3494, -1.2525, 10),
('50012', 'Angoville-sur-Ay', '30T', 605657, 5456664, 49.2536, -1.54806, 40),
('50013', 'Anneville-en-Saire', '30T', 623831, 5499586, 49.6361, -1.285, 10),
('50014', 'Anneville-sur-Mer', '30T', 603593, 5441643, 49.1189, -1.58028, 10),
('50015', 'Annoville', '30T', 607199, 5425031, 48.9689, -1.53527, 20),
('50016', 'Appeville', '30T', 620487, 5464630, 49.3225, -1.34194, 15),
('50018', 'Argouges', '30T', 618449, 5373611, 48.5044, -1.3964, 38),
('50019', 'Aucey-la-Plaine', '30T', 612426, 5376175, 48.5286, -1.47722, 20),
('50020', 'Auderville', '30T', 577159, 5507246, 49.7128, -1.92972, 60),
('50021', 'Audouville-la-Hubert', '30T', 627834, 5474312, 49.4081, -1.23778, 10),
('50022', 'Aumeville-Lestre', '30T', 621501, 5488935, 49.5408, -1.32055, 15),
('50023', 'Auvers', '30T', 622259, 5462136, 49.2997, -1.31833, 15),
('50024', 'Auxais', '30T', 623962, 5452906, 49.2164, -1.29778, 17),
('50025', 'Avranches', '30T', 620663, 5393829, 48.6858, -1.36056, 80),
('50026', 'Azeville', '30T', 622205, 5479930, 49.4597, -1.31361, 20),
('50027', 'Bacilly', '30T', 614717, 5395558, 48.7025, -1.44084, 30),
('50028', 'La Baleine', '30T', 623323, 5420608, 48.9261, -1.31639, 50),
('50029', 'Barenton', '30T', 659857, 5385322, 48.6006, -0.831667, 140),
('50030', 'Barfleur', '30T', 625168, 5503385, 49.67, -1.26528, 5),
('50031', 'Barneville-Carteret', '30T', 588210, 5470348, 49.3794, -1.78473, 30),
('50032', 'La Barre-de-Semilly', '30T', 643702, 5441798, 49.1122, -1.03083, 80),
('50033', 'Baubigny', '30T', 586970, 5476074, 49.4311, -1.80055, 30),
('50034', 'Baudre', '30T', 640784, 5439313, 49.0906, -1.07166, 70),
('50035', 'Baudreville', '30T', 599509, 5462294, 49.3053, -1.63111, 20),
('50036', 'Baupte', '30T', 619311, 5462998, 49.3081, -1.35861, 5),
('50037', 'La Bazoge', '30T', 645347, 5390150, 48.6475, -1.02666, 180),
('50038', 'Beauchamps', '30T', 620512, 5410352, 48.8344, -1.35777, 103),
('50039', 'Beaucoudray', '30T', 636070, 5424643, 48.9597, -1.14111, 170),
('50040', 'Beauficel', '30T', 650058, 5400779, 48.7419, -0.958884, 260),
('50041', 'Beaumont-Hague', '30T', 584032, 5501913, 49.6639, -1.83555, 165),
('50042', 'Beauvoir', '30T', 610369, 5383733, 48.5969, -1.50306, 20),
('50043', 'Bellefontaine', '30T', 649064, 5395099, 48.6911, -0.974448, 220),
('50044', 'Belval', '30T', 619610, 5433255, 49.0406, -1.36334, 60),
('50045', 'Benoîtville', '30T', 588365, 5486969, 49.5289, -1.77888, 50),
('50046', 'Bérigny', '30T', 650077, 5445336, 49.1425, -0.942217, 99),
('50048', 'Beslon', '30T', 635695, 5412493, 48.8506, -1.15027, 147),
('50049', 'Besneville', '30T', 599724, 5469341, 49.3686, -1.62639, 40),
('50050', 'Beuvrigny', '30T', 646140, 5426228, 48.9717, -1.00306, 140),
('50051', 'Beuzeville-au-Plain', '30T', 624211, 5476731, 49.4306, -1.28694, 25),
('50052', 'Beuzeville-la-Bastille', '30T', 618245, 5468381, 49.3567, -1.37167, 10),
('50054', 'Biéville', '30T', 654227, 5438992, 49.0844, -0.887778, 100),
('50055', 'Biniville', '30T', 610442, 5476096, 49.4275, -1.47694, 30),
('50056', 'Bion', '30T', 653345, 5387397, 48.6208, -0.919168, 120),
('50057', 'Biville', '30T', 585322, 5496372, 49.6139, -1.81889, 124),
('50058', 'Blainville-sur-Mer', '30T', 603601, 5435805, 49.0664, -1.58167, 25),
('50059', 'Blosville', '30T', 624152, 5470427, 49.3739, -1.28973, 20),
('50060', 'La Bloutière', '30T', 629148, 5415241, 48.8767, -1.2386, 130),
('50061', 'Boisroger', '30T', 606530, 5438640, 49.0914, -1.54083, 40),
('50062', 'Boisyvon', '30T', 637465, 5407655, 48.8067, -1.12778, 220),
('50063', 'Bolleville', '30T', 603715, 5462063, 49.3025, -1.57333, 25),
('50064', 'La Bonneville', '30T', 612230, 5472425, 49.3942, -1.45333, 24),
('50066', 'Jullouville', '30T', 606676, 5403399, 48.7744, -1.54806, 30),
('50069', 'Bourguenolles', '30T', 627169, 5405495, 48.7894, -1.26861, 100),
('50070', 'Boutteville', '30T', 626370, 5472239, 49.3897, -1.25861, 20),
('50071', 'Braffais', '30T', 627862, 5401959, 48.7575, -1.26027, 150),
('50072', 'Brainville', '30T', 609603, 5438144, 49.0864, -1.49889, 90),
('50073', 'Branville-Hague', '30T', 587675, 5501043, 49.6556, -1.78528, 150),
('50074', 'Brécey', '30T', 634886, 5398664, 48.7264, -1.16583, 70),
('50075', 'Brectouville', '30T', 644505, 5431994, 49.0239, -1.02334, 85),
('50076', 'Bréhal', '30T', 608953, 5417497, 48.9008, -1.51333, 50),
('50077', 'Bretteville', '30T', 606341, 5501346, 49.6553, -1.52666, 25),
('50078', 'Bretteville-sur-Ay', '30T', 599597, 5457446, 49.2617, -1.63111, 10),
('50079', 'Breuville', '30T', 596188, 5487997, 49.5369, -1.67056, 100),
('50080', 'Brévands', '30T', 631542, 5465965, 49.3322, -1.18945, 26),
('50081', 'Bréville-sur-Mer', '30T', 606011, 5413703, 48.8672, -1.55444, 17),
('50082', 'Bricquebec', '30T', 599395, 5480796, 49.4717, -1.62806, 60),
('50083', 'Bricquebosq', '30T', 592841, 5487414, 49.5322, -1.71694, 110),
('50084', 'Bricqueville-la-Blouette', '30T', 611383, 5432373, 49.0342, -1.47611, 40),
('50085', 'Bricqueville-sur-Mer', '30T', 608371, 5419123, 48.9156, -1.52084, 40),
('50086', 'Brillevast', '30T', 614702, 5498612, 49.6292, -1.41167, 100),
('50087', 'Brix', '30T', 602839, 5489262, 49.5472, -1.57833, 150),
('50088', 'Brouains', '30T', 649481, 5398663, 48.7231, -0.967495, 200),
('50089', 'Brucheville', '30T', 630220, 5470630, 49.3744, -1.20611, 5),
('50090', 'Buais', '30T', 649970, 5376430, 48.5231, -0.96889, 228),
('50092', 'Cambernon', '30T', 617949, 5437822, 49.0819, -1.38473, 144),
('50093', 'Cametours', '30T', 625527, 5436567, 49.0692, -1.28139, 111),
('50094', 'Camprond', '30T', 620710, 5438715, 49.0894, -1.34667, 150),
('50095', 'Canisy', '30T', 633219, 5437458, 49.0756, -1.17583, 63),
('50096', 'Canteloup', '30T', 619074, 5500591, 49.6461, -1.35055, 80),
('50097', 'Canville-la-Rocque', '30T', 599209, 5466582, 49.3439, -1.63417, 35),
('50098', 'Carantilly', '30T', 628523, 5436049, 49.0639, -1.24055, 80),
('50099', 'Carentan', '30T', 627558, 5462751, 49.3042, -1.24528, 20),
('50100', 'Carnet', '30T', 621369, 5374322, 48.5103, -1.35667, 100),
('50101', 'Carneville', '30T', 612157, 5503286, 49.6717, -1.44556, 90),
('50103', 'Carquebut', '30T', 621188, 5470361, 49.3739, -1.33056, 22),
('50105', 'Catteville', '30T', 603806, 5467934, 49.3553, -1.57055, 30),
('50106', 'Cavigny', '30T', 637740, 5450668, 49.1933, -1.10945, 30),
('50107', 'Catz', '30T', 632205, 5463602, 49.3108, -1.18111, 27),
('50108', 'Céaux', '30T', 618845, 5387952, 48.6333, -1.38694, 20),
('50109', 'Cérences', '30T', 614591, 5419587, 48.9186, -1.43584, 50),
('50110', 'Cerisy-la-Forêt', '30T', 650379, 5451339, 49.1964, -0.935835, 84),
('50111', 'Cerisy-la-Salle', '30T', 625491, 5431871, 49.0269, -1.28333, 130),
('50112', 'La Chaise-Baudouin', '30T', 629619, 5402833, 48.765, -1.2361, 183),
('50114', 'Les Chambres', '30T', 618446, 5402925, 48.7681, -1.38806, 126),
('50115', 'Champcervon', '30T', 617934, 5403965, 48.7775, -1.39472, 110),
('50116', 'Champcey', '30T', 614191, 5398296, 48.7272, -1.44723, 40),
('50117', 'Champeaux', '30T', 608320, 5399693, 48.7408, -1.52666, 80),
('50118', 'Champrepus', '30T', 623221, 5410473, 48.835, -1.32084, 115),
('50119', 'Les Champs-de-Losque', '30T', 629205, 5449381, 49.1836, -1.22695, 30),
('50120', 'Chanteloup', '30T', 610949, 5417475, 48.9003, -1.48611, 65),
('50121', 'La Chapelle-Cécelin', '30T', 635021, 5408306, 48.8131, -1.16083, 220),
('50123', 'La Chapelle-en-Juger', '30T', 630241, 5443257, 49.1283, -1.21472, 92),
('50124', 'La Chapelle-Urée', '30T', 636330, 5392241, 48.6683, -1.14833, 200),
('50125', 'Chasseguey', '30T', 641579, 5390178, 48.6486, -1.07778, 130),
('50126', 'Chavoy', '30T', 622583, 5398628, 48.7286, -1.33306, 48),
('50127', 'Chef-du-Pont', '30T', 620375, 5471548, 49.3847, -1.34139, 10),
('50128', 'Le Chefresne', '30T', 635305, 5418477, 48.9044, -1.1536, 160),
('50129', 'Cherbourg-Octeville', '30T', 599171, 5499697, 49.6417, -1.62639, 19),
('50130', 'Chérencé-le-Héron', '30T', 632537, 5407227, 48.8039, -1.195, 200),
('50131', 'Chérencé-le-Roussel', '30T', 646044, 5397182, 48.7106, -1.01472, 82),
('50132', 'Les Chéris', '30T', 628497, 5388473, 48.6361, -1.25583, 30),
('50133', 'Chèvreville', '30T', 644247, 5386724, 48.6169, -1.04278, 90),
('50134', 'Chevry', '30T', 637684, 5426012, 48.9717, -1.11861, 83),
('50135', 'Clitourps', '30T', 617240, 5501880, 49.6581, -1.37556, 100),
('50136', 'Coigny', '30T', 617496, 5464720, 49.3239, -1.38306, 30),
('50137', 'La Colombe', '30T', 633427, 5415249, 48.8758, -1.18027, 167),
('50138', 'Colomby', '30T', 609329, 5479317, 49.4567, -1.49139, 30),
('50139', 'Condé-sur-Vire', '30T', 643508, 5435212, 49.0531, -1.03583, 30),
('50140', 'Contrières', '30T', 614712, 5427559, 48.9903, -1.43194, 49),
('50142', 'Cosqueville', '30T', 614909, 5505908, 49.6947, -1.40666, 20),
('50143', 'Coudeville-sur-Mer', '30T', 608116, 5415504, 48.8831, -1.52527, 40),
('50144', 'Coulouvray-Boisbenâtre', '30T', 638879, 5405774, 48.7894, -1.10917, 270),
('50145', 'Courcy', '30T', 617518, 5433271, 49.0411, -1.39195, 74),
('50146', 'Courtils', '30T', 617278, 5387456, 48.6292, -1.40834, 28),
('50147', 'Coutances', '30T', 613742, 5434212, 49.0503, -1.44333, 70),
('50148', 'Couvains', '30T', 645390, 5447775, 49.1656, -1.00556, 110),
('50149', 'Couville', '30T', 595050, 5489831, 49.5536, -1.68584, 90),
('50150', 'Crasville', '30T', 620107, 5490140, 49.5519, -1.33944, 50),
('50151', 'Créances', '30T', 604573, 5450897, 49.2019, -1.56445, 15),
('50152', 'Les Cresnays', '30T', 638066, 5398185, 48.7214, -1.12277, 40),
('50153', 'Cretteville', '30T', 617283, 5467125, 49.3456, -1.38528, 10),
('50154', 'La Croix-Avranchin', '30T', 619414, 5378450, 48.5478, -1.38195, 82),
('50155', 'Crollon', '30T', 619221, 5382740, 48.5864, -1.38334, 40),
('50156', 'Crosville-sur-Douve', '30T', 610103, 5471887, 49.3897, -1.48278, 10),
('50158', 'Cuves', '30T', 639257, 5397967, 48.7192, -1.10666, 50),
('50159', 'Dangy', '30T', 629750, 5433915, 49.0444, -1.22445, 100),
('50160', 'Denneville', '30T', 597474, 5463184, 49.3136, -1.65888, 21),
('50161', 'Le Dézert', '30T', 633845, 5451808, 49.2044, -1.1625, 30),
('50162', 'Digosville', '30T', 606491, 5498785, 49.6322, -1.52528, 110),
('50163', 'Digulleville', '30T', 582368, 5505872, 49.6997, -1.85777, 60),
('50164', 'Domjean', '30T', 643895, 5428085, 48.9889, -1.03306, 90),
('50165', 'Donville-les-Bains', '30T', 603780, 5410912, 48.8425, -1.58556, 40),
('50166', 'Doville', '30T', 606152, 5465570, 49.3336, -1.53889, 30),
('50167', 'Dragey-Ronthon', '30T', 611415, 5397128, 48.7172, -1.48527, 40),
('50168', 'Ducey', '30T', 626059, 5386719, 48.6208, -1.28944, 20),
('50169', 'Écausseville', '30T', 617789, 5480203, 49.4631, -1.37444, 13),
('50170', 'Écoquenéauville', '30T', 623963, 5473451, 49.4011, -1.29138, 20),
('50171', 'Éculleville', '30T', 585141, 5504030, 49.6828, -1.81973, 110),
('50172', 'Émondeville', '30T', 620311, 5479981, 49.4606, -1.33972, 34),
('50173', 'Équeurdreville-Hainneville', '30T', 597248, 5500650, 49.6506, -1.65278, 20),
('50174', 'Équilly', '30T', 618130, 5411136, 48.8419, -1.38999, 121),
('50175', 'Éroudeville', '30T', 616629, 5481723, 49.4769, -1.38999, 20),
('50176', 'L''Étang-Bertrand', '30T', 604315, 5480393, 49.4672, -1.56027, 30),
('50177', 'Étienville', '30T', 613641, 5470508, 49.3767, -1.43444, 15),
('50178', 'Fermanville', '30T', 611503, 5504848, 49.6858, -1.45417, 40),
('50179', 'Ferrières', '30T', 650888, 5378926, 48.5453, -0.955562, 160),
('50180', 'Fervaches', '30T', 640052, 5428913, 48.9972, -1.08528, 94),
('50181', 'Feugères', '30T', 622466, 5445550, 49.1506, -1.32055, 20),
('50182', 'La Feuillie', '30T', 611044, 5448244, 49.1769, -1.47638, 20),
('50183', 'Fierville-les-Mines', '30T', 596656, 5471757, 49.3908, -1.66805, 70),
('50184', 'Flamanville', '30T', 582207, 5487336, 49.5331, -1.86389, 73),
('50185', 'Fleury', '30T', 626447, 5412121, 48.8492, -1.27639, 179),
('50186', 'Flottemanville', '30T', 611986, 5481348, 49.4744, -1.45417, 20),
('50187', 'Flottemanville-Hague', '30T', 592310, 5497382, 49.6219, -1.72194, 162),
('50188', 'Folligny', '30T', 616618, 5409312, 48.8258, -1.41111, 117),
('50189', 'Fontenay', '30T', 645090, 5388198, 48.63, -1.03083, 125),
('50190', 'Fontenay-sur-Mer', '30T', 621969, 5483261, 49.4897, -1.31584, 27),
('50191', 'Foucarville', '30T', 626416, 5478110, 49.4425, -1.25611, 10),
('50192', 'Fourneaux', '30T', 643794, 5425703, 48.9675, -1.03528, 90),
('50193', 'Le Fresne-Poret', '30T', 659732, 5397648, 48.7114, -0.828605, 266),
('50194', 'Fresville', '30T', 619195, 5477577, 49.4392, -1.35584, 30),
('50195', 'Gathemo', '30T', 648844, 5403404, 48.7658, -0.974438, 330),
('50196', 'Gatteville-le-Phare', '30T', 623902, 5505272, 49.6872, -1.28222, 10),
('50197', 'Gavray', '30T', 620898, 5418887, 48.9111, -1.34999, 31),
('50198', 'Geffosses', '30T', 605152, 5442815, 49.1292, -1.55862, 21),
('50199', 'Genêts', '30T', 612159, 5393653, 48.6858, -1.47611, 10),
('50200', 'Ger', '30T', 662786, 5394584, 48.6831, -0.788329, 310),
('50202', 'Giéville', '30T', 647823, 5431030, 49.0144, -0.978331, 130),
('50203', 'La Glacerie', '30T', 603290, 5496190, 49.6094, -1.57028, 70),
('50204', 'Glatigny', '30T', 599809, 5459149, 49.2769, -1.62777, 20),
('50205', 'La Godefroy', '30T', 625863, 5394530, 48.6911, -1.28973, 109),
('50206', 'La Gohannière', '30T', 628401, 5396256, 48.7061, -1.25472, 30),
('50207', 'Golleville', '30T', 607583, 5476997, 49.4361, -1.51611, 15),
('50208', 'Gonfreville', '30T', 616950, 5455285, 49.2392, -1.39333, 21),
('50209', 'Gonneville', '30T', 610768, 5499644, 49.6392, -1.46583, 96),
('50210', 'Gorges', '30T', 615937, 5457272, 49.2572, -1.40667, 15),
('50211', 'Gouberville', '30T', 621493, 5505434, 49.6892, -1.31555, 16),
('50212', 'Gourbesville', '30T', 615410, 5475549, 49.4217, -1.40861, 12),
('50213', 'Gourfaleur', '30T', 637929, 5438253, 49.0817, -1.1111, 40),
('50214', 'Gouvets', '30T', 639456, 5421885, 48.9342, -1.09583, 145),
('50215', 'Gouville-sur-Mer', '30T', 603740, 5439205, 49.0969, -1.57889, 21),
('50216', 'Graignes', '30T', 630707, 5456089, 49.2436, -1.20416, 10),
('50217', 'Le Grand-Celland', '30T', 633696, 5393723, 48.6822, -1.18361, 180),
('50218', 'Granville', '30T', 603664, 5410601, 48.8397, -1.58722, 20),
('50219', 'Gratot', '30T', 610358, 5435905, 49.0661, -1.48917, 80),
('50220', 'Gréville-Hague', '30T', 586537, 5503218, 49.6753, -1.80056, 140),
('50221', 'Grimesnil', '30T', 620628, 5423823, 48.9556, -1.35222, 87),
('50222', 'Grosville', '30T', 591114, 5484852, 49.5094, -1.74139, 123),
('50223', 'Guéhébert', '30T', 619102, 5425706, 48.9728, -1.3725, 67),
('50224', 'Guilberville', '30T', 650373, 5428442, 48.9906, -0.944438, 140),
('50225', 'Le Guislain', '30T', 629669, 5426066, 48.9739, -1.22806, 110),
('50227', 'Le Ham', '30T', 614877, 5478844, 49.4514, -1.41501, 11),
('50228', 'Hambye', '30T', 626043, 5422770, 48.945, -1.27861, 110),
('50229', 'Hamelin', '30T', 632192, 5378457, 48.5453, -1.20889, 100),
('50230', 'Hardinvast', '30T', 597812, 5492691, 49.5789, -1.64695, 95),
('50231', 'Hauteville-sur-Mer', '30T', 606955, 5426076, 48.9783, -1.53833, 30),
('50232', 'Hauteville-la-Guichard', '30T', 623899, 5443080, 49.1281, -1.30167, 60),
('50233', 'Hautteville-Bocage', '30T', 611451, 5475993, 49.4264, -1.46306, 24),
('50234', 'La Haye-Bellefond', '30T', 632789, 5427438, 48.9856, -1.185, 110),
('50235', 'La Haye-d''Ectot', '30T', 591980, 5471646, 49.3906, -1.7325, 70),
('50236', 'La Haye-du-Puits', '30T', 606061, 5460872, 49.2914, -1.54139, 37),
('50237', 'La Haye-Pesnel', '30T', 617743, 5406247, 48.7981, -1.39667, 100),
('50238', 'Héauville', '30T', 586722, 5492904, 49.5825, -1.80028, 90),
('50239', 'Hébécrevon', '30T', 633809, 5443280, 49.1278, -1.16583, 75),
('50240', 'Helleville', '30T', 587853, 5489988, 49.5561, -1.78528, 110),
('50241', 'Hémevez', '30T', 613307, 5479800, 49.4603, -1.43639, 14),
('50242', 'Herqueville', '30T', 581078, 5502331, 49.6681, -1.87639, 165),
('50243', 'Heugueville-sur-Sienne', '30T', 608440, 5432283, 49.0339, -1.51639, 10),
('50244', 'Hérenguerville', '30T', 609679, 5426099, 48.9781, -1.50111, 50),
('50245', 'Heussé', '30T', 655084, 5374807, 48.5072, -0.90028, 200),
('50246', 'Hiesville', '30T', 626215, 5470227, 49.3717, -1.26138, 29),
('50247', 'Hocquigny', '30T', 616987, 5408269, 48.8164, -1.40638, 120),
('50248', 'Le Hommet-d''Arthenay', '30T', 631905, 5449969, 49.1883, -1.18972, 6),
('50249', 'Houesville', '30T', 624391, 5467899, 49.3511, -1.28722, 12),
('50250', 'Houtteville', '30T', 618996, 5466327, 49.3381, -1.36195, 20),
('50251', 'Huberville', '30T', 613654, 5486326, 49.5189, -1.42972, 50),
('50252', 'Hudimesnil', '30T', 610601, 5413452, 48.8642, -1.49194, 50),
('50253', 'Huisnes-sur-Mer', '30T', 614151, 5385198, 48.6094, -1.45138, 20),
('50254', 'Husson', '30T', 655544, 5381957, 48.5714, -0.891387, 105),
('50255', 'Hyenville', '30T', 612058, 5428123, 48.9958, -1.46805, 30),
('50256', 'Isigny-le-Buat', '30T', 635113, 5385817, 48.6108, -1.16694, 90),
('50257', 'Jobourg', '30T', 579047, 5504123, 49.6844, -1.90417, 170),
('50258', 'Joganville', '30T', 619664, 5481017, 49.47, -1.34833, 17),
('50259', 'Juilley', '30T', 622282, 5384288, 48.5997, -1.34139, 70),
('50260', 'Juvigny-le-Tertre', '30T', 645684, 5393712, 48.6794, -1.02084, 270),
('50261', 'Lamberville', '30T', 652717, 5439290, 49.0875, -0.908331, 128),
('50262', 'La Lande-d''Airou', '30T', 626401, 5408753, 48.8189, -1.27805, 110),
('50263', 'Lapenty', '30T', 647160, 5382659, 48.5797, -1.00472, 100),
('50265', 'Laulne', '30T', 611365, 5456374, 49.25, -1.46972, 37),
('50266', 'Lengronne', '30T', 618380, 5421427, 48.9344, -1.38361, 110),
('50267', 'Lessay', '30T', 606962, 5452982, 49.2203, -1.53111, 10),
('50268', 'Lestre', '30T', 620550, 5487370, 49.5269, -1.33417, 20),
('50269', 'Liesville-sur-Douve', '30T', 620948, 5468440, 49.3567, -1.33445, 10),
('50270', 'Lieusaint', '30T', 610270, 5481622, 49.4772, -1.47777, 20),
('50271', 'Lingeard', '30T', 645165, 5400341, 48.7392, -1.02555, 210),
('50272', 'Lingreville', '30T', 607761, 5423281, 48.9531, -1.52806, 21),
('50273', 'Lithaire', '30T', 610262, 5461975, 49.3006, -1.48333, 36),
('50274', 'Les Loges-Marchis', '30T', 641258, 5378492, 48.5436, -1.08611, 160),
('50275', 'Les Loges-sur-Brécey', '30T', 634081, 5403247, 48.7678, -1.17528, 140),
('50276', 'Lolif', '30T', 618322, 5399123, 48.7339, -1.39084, 88),
('50277', 'Longueville', '30T', 606422, 5412444, 48.8558, -1.54917, 30),
('50278', 'Le Loreur', '30T', 615107, 5414316, 48.8711, -1.43028, 116),
('50279', 'Le Lorey', '30T', 623677, 5439430, 49.0953, -1.30583, 86),
('50280', 'Lozon', '30T', 626659, 5444718, 49.1422, -1.26334, 30),
('50281', 'La Lucerne-d''Outremer', '30T', 615591, 5404750, 48.785, -1.42638, 128),
('50282', 'Le Luot', '30T', 623534, 5401861, 48.7575, -1.31916, 130),
('50283', 'La Luzerne', '30T', 642443, 5445010, 49.1414, -1.04694, 120),
('50284', 'Macey', '30T', 615668, 5380133, 48.5636, -1.43222, 48),
('50285', 'Magneville', '30T', 605543, 5478316, 49.4483, -1.54388, 42),
('50287', 'La Mancellière-sur-Vire', '30T', 640848, 5436781, 49.0678, -1.07167, 30),
('50288', 'Marcey-les-Grèves', '30T', 618487, 5395204, 48.6986, -1.38972, 16),
('50289', 'Marchésieux', '30T', 624477, 5449797, 49.1883, -1.29167, 14),
('50290', 'Marcilly', '30T', 628769, 5389993, 48.6497, -1.25167, 40),
('50291', 'Margueray', '30T', 636303, 5417636, 48.8967, -1.14027, 190),
('50292', 'Marigny', '30T', 628231, 5439873, 49.0983, -1.24333, 68),
('50293', 'Martigny', '30T', 639585, 5386390, 48.615, -1.10611, 92),
('50294', 'Martinvast', '30T', 596835, 5494557, 49.5958, -1.66, 60),
('50295', 'Maupertuis', '30T', 631767, 5424231, 48.9569, -1.2, 100),
('50296', 'Maupertus-sur-Mer', '30T', 609521, 5501780, 49.6586, -1.4825, 110),
('50297', 'La Meauffe', '30T', 637781, 5449032, 49.1786, -1.10945, 10),
('50298', 'Méautis', '30T', 623583, 5459848, 49.2789, -1.30084, 20),
('50299', 'Le Mesnil', '30T', 594941, 5469472, 49.3706, -1.69223, 40),
('50300', 'Le Mesnil-Adelée', '30T', 641817, 5396177, 48.7025, -1.07249, 100),
('50301', 'Le Mesnil-Amand', '30T', 620189, 5415875, 48.8842, -1.36055, 114),
('50302', 'Le Mesnil-Amey', '30T', 630728, 5440673, 49.105, -1.20889, 93),
('50303', 'Le Mesnil-Angot', '30T', 631405, 5453974, 49.2244, -1.19527, 30),
('50304', 'Le Mesnil-Aubert', '30T', 616171, 5422895, 48.9481, -1.41334, 80),
('50305', 'Le Mesnil-au-Val', '30T', 606648, 5495884, 49.6061, -1.5239, 109),
('50308', 'Le Mesnilbus', '30T', 620479, 5443746, 49.1347, -1.34833, 76),
('50310', 'Le Mesnil-Eury', '30T', 628516, 5445935, 49.1528, -1.2375, 24),
('50311', 'Le Mesnil-Garnier', '30T', 624140, 5414077, 48.8672, -1.30723, 130),
('50312', 'Le Mesnil-Gilbert', '30T', 642534, 5397709, 48.7161, -1.06223, 70),
('50313', 'Le Mesnil-Herman', '30T', 635623, 5432140, 49.0272, -1.14471, 143),
('50315', 'Le Mesnillard', '30T', 642207, 5388000, 48.6289, -1.07001, 100),
('50316', 'Le Mesnil-Opac', '30T', 639318, 5430625, 49.0128, -1.09472, 131),
('50317', 'Le Mesnil-Ozenne', '30T', 630133, 5392094, 48.6683, -1.2325, 130),
('50318', 'Le Mesnil-Rainfray', '30T', 643077, 5392471, 48.6689, -1.05666, 200),
('50319', 'Le Mesnil-Raoult', '30T', 641775, 5433067, 49.0342, -1.06028, 85),
('50320', 'Le Mesnil-Rogues', '30T', 618748, 5413682, 48.8647, -1.38084, 97),
('50321', 'Le Mesnil-Rouxelin', '30T', 639624, 5445834, 49.1494, -1.08528, 90),
('50323', 'Le Mesnil-Tôve', '30T', 645560, 5396150, 48.7014, -1.02166, 100),
('50324', 'Le Mesnil-Véneron', '30T', 633622, 5454336, 49.2272, -1.16472, 36),
('50325', 'Le Mesnil-Vigot', '30T', 625326, 5446325, 49.1569, -1.28111, 13),
('50326', 'Le Mesnil-Villeman', '30T', 622758, 5413923, 48.8661, -1.32611, 150),
('50327', 'La Meurdraquière', '30T', 616763, 5412157, 48.8514, -1.40833, 110),
('50328', 'Millières', '30T', 612274, 5449504, 49.1881, -1.45916, 55),
('50329', 'Milly', '30T', 646131, 5385166, 48.6025, -1.01778, 108),
('50330', 'Mobecq', '30T', 607777, 5458898, 49.2733, -1.51833, 60),
('50332', 'Les Moitiers-d''Allonne', '30T', 588715, 5472797, 49.4014, -1.77722, 80),
('50333', 'Les Moitiers-en-Bauptois', '30T', 613866, 5469370, 49.3664, -1.43167, 22),
('50334', 'Montabot', '30T', 637174, 5421952, 48.9353, -1.12695, 178),
('50335', 'Montaigu-la-Brisette', '30T', 615177, 5491362, 49.5639, -1.40722, 120),
('50336', 'Montaigu-les-Bois', '30T', 626074, 5416901, 48.8922, -1.28, 153),
('50337', 'Montanel', '30T', 616703, 5372710, 48.4967, -1.42028, 50),
('50338', 'Montbray', '30T', 639664, 5416020, 48.8814, -1.09499, 120),
('50339', 'Montchaton', '30T', 609626, 5429835, 49.0117, -1.50083, 50),
('50340', 'Montcuit', '30T', 620997, 5442305, 49.1217, -1.34166, 100),
('50341', 'Montebourg', '30T', 617326, 5483005, 49.4883, -1.38, 50),
('50342', 'Montfarville', '30T', 624945, 5501743, 49.6553, -1.26889, 15),
('50343', 'Montgardon', '30T', 603883, 5459595, 49.2803, -1.57166, 80),
('50345', 'Monthuchon', '30T', 615348, 5438014, 49.0842, -1.42028, 170),
('50347', 'Montjoie-Saint-Martin', '30T', 626238, 5376900, 48.5325, -1.29, 177),
('50348', 'Montmartin-en-Graignes', '30T', 634823, 5459804, 49.2761, -1.14639, 28),
('50349', 'Montmartin-sur-Mer', '30T', 607966, 5427394, 48.99, -1.52417, 50),
('50350', 'Montpinchon', '30T', 623594, 5431303, 49.0222, -1.30944, 140),
('50351', 'Montrabot', '30T', 654249, 5441835, 49.11, -0.886391, 120),
('50352', 'Montreuil-sur-Lozon', '30T', 628388, 5444480, 49.1397, -1.23972, 47),
('50353', 'Le Mont-Saint-Michel', '30T', 609751, 5388107, 48.6364, -1.51028, 9),
('50354', 'Montsurvent', '30T', 609703, 5441297, 49.1147, -1.49667, 78),
('50355', 'Montviron', '30T', 616130, 5399386, 48.7367, -1.42056, 80),
('50356', 'Moon-sur-Elle', '30T', 642257, 5452205, 49.2061, -1.04694, 20),
('50357', 'Morigny', '30T', 642346, 5416304, 48.8833, -1.05834, 100),
('50358', 'Morsalines', '30T', 622022, 5492593, 49.5736, -1.31222, 10),
('50359', 'Mortain', '30T', 651763, 5390629, 48.6503, -0.939437, 220),
('50360', 'Morville', '30T', 608706, 5481313, 49.4747, -1.49944, 20),
('50361', 'La Mouche', '30T', 621182, 5405795, 48.7933, -1.34999, 120),
('50362', 'Moulines', '30T', 645288, 5378934, 48.5467, -1.03139, 150),
('50363', 'Moyon', '30T', 637689, 5429101, 48.9994, -1.1175, 80),
('50364', 'Muneville-le-Bingard', '30T', 611209, 5442038, 49.1211, -1.47583, 50),
('50365', 'Muneville-sur-Mer', '30T', 610527, 5421266, 48.9344, -1.49084, 54),
('50368', 'Nay', '30T', 618676, 5454952, 49.2358, -1.36973, 5),
('50369', 'Négreville', '30T', 605248, 5483130, 49.4917, -1.54667, 20),
('50370', 'Néhou', '30T', 605802, 5475325, 49.4214, -1.54111, 20),
('50371', 'Le Neufbourg', '30T', 651236, 5391171, 48.6553, -0.94639, 230),
('50372', 'Neufmesnil', '30T', 606398, 5463319, 49.3133, -1.5361, 27),
('50373', 'Neuville-au-Plain', '30T', 621111, 5476569, 49.4297, -1.32973, 10),
('50374', 'Neuville-en-Beaumont', '30T', 601866, 5467002, 49.3472, -1.5975, 30),
('50375', 'Néville-sur-Mer', '30T', 619902, 5505769, 49.6925, -1.3375, 14),
('50376', 'Nicorps', '30T', 615540, 5431747, 49.0278, -1.41944, 100),
('50378', 'Notre-Dame-de-Cenilly', '30T', 627555, 5428705, 48.9981, -1.25611, 120),
('50379', 'Notre-Dame-de-Livoye', '30T', 632020, 5400603, 48.7444, -1.20416, 70),
('50380', 'Notre-Dame-d''Elle', '30T', 648935, 5441813, 49.1111, -0.959165, 150),
('50381', 'Notre-Dame-du-Touchet', '30T', 650856, 5383220, 48.5839, -0.954438, 118),
('50382', 'Nouainville', '30T', 595113, 5497740, 49.6247, -1.68305, 110),
('50384', 'Octeville-l''Avenel', '30T', 619405, 5489167, 49.5433, -1.34944, 40),
('50385', 'Omonville-la-Petite', '30T', 580703, 5505970, 49.7008, -1.88084, 30),
('50386', 'Omonville-la-Rogue', '30T', 583423, 5506258, 49.7031, -1.84306, 20),
('50387', 'Orglandes', '30T', 612529, 5475520, 49.4219, -1.44833, 20),
('50388', 'Orval', '30T', 611937, 5430098, 49.0136, -1.46916, 50),
('50389', 'Ouville', '30T', 619761, 5431003, 49.0203, -1.36194, 105),
('50390', 'Ozeville', '30T', 620906, 5484010, 49.4967, -1.33028, 40),
('50391', 'Parigny', '30T', 641725, 5384373, 48.5964, -1.07778, 80),
('50393', 'Percy', '30T', 632702, 5419989, 48.9186, -1.18862, 118),
('50394', 'Périers', '30T', 616039, 5449520, 49.1875, -1.40751, 26),
('50395', 'La Pernelle', '30T', 622868, 5497802, 49.6203, -1.29889, 80),
('50396', 'Les Perques', '30T', 597371, 5478010, 49.4469, -1.65667, 80),
('50397', 'Perriers-en-Beauficel', '30T', 647332, 5400305, 48.7383, -0.996109, 260),
('50398', 'Le Perron', '30T', 653107, 5435469, 49.0531, -0.904439, 130),
('50399', 'Le Petit-Celland', '30T', 631591, 5395341, 48.6972, -1.21167, 170),
('50400', 'Picauville', '30T', 616214, 5470933, 49.38, -1.39888, 20),
('50401', 'Pierreville', '30T', 588303, 5480852, 49.4739, -1.78111, 73),
('50402', 'Les Pieux', '30T', 586378, 5485455, 49.5156, -1.80667, 80),
('50403', 'Pirou', '30T', 604089, 5448695, 49.1822, -1.57166, 12),
('50404', 'Placy-Montaigu', '30T', 653195, 5433000, 49.0308, -0.904168, 170),
('50405', 'Le Plessis-Lastelle', '30T', 612283, 5458957, 49.2731, -1.45639, 36),
('50406', 'Plomb', '30T', 624964, 5399082, 48.7322, -1.30056, 60),
('50407', 'Poilley', '30T', 624590, 5386470, 48.6189, -1.30944, 20),
('50408', 'Pontaubault', '30T', 621596, 5387579, 48.6294, -1.34973, 10),
('50409', 'Pont-Hébert', '30T', 636438, 5447670, 49.1667, -1.12833, 30),
('50410', 'Pontorson', '30T', 610067, 5379310, 48.5572, -1.50833, 10),
('50411', 'Ponts', '30T', 621671, 5395488, 48.7006, -1.34638, 23),
('50412', 'Portbail', '30T', 594724, 5465700, 49.3367, -1.69611, 10),
('50413', 'Précey', '30T', 619762, 5385254, 48.6089, -1.37528, 43),
('50414', 'Précorbin', '30T', 648925, 5439156, 49.0872, -0.960282, 132),
('50415', 'Prétot-Sainte-Suzanne', '30T', 614449, 5464655, 49.3239, -1.42499, 10),
('50416', 'Querqueville', '30T', 594232, 5502266, 49.6656, -1.69416, 23),
('50417', 'Quettehou', '30T', 622592, 5494923, 49.5944, -1.30361, 14),
('50418', 'Quettetot', '30T', 596625, 5482630, 49.4886, -1.66583, 150),
('50419', 'Quettreville-sur-Sienne', '30T', 612300, 5425194, 48.9694, -1.46555, 27),
('50420', 'Quibou', '30T', 631436, 5436488, 49.0672, -1.20055, 60),
('50421', 'Quinéville', '30T', 623177, 5485914, 49.5133, -1.29834, 4),
('50422', 'Raids', '30T', 620641, 5452986, 49.2178, -1.34334, 11),
('50423', 'Rampan', '30T', 635093, 5444640, 49.1397, -1.14778, 10),
('50425', 'Rauville-la-Bigot', '30T', 595439, 5486007, 49.5192, -1.68139, 100),
('50426', 'Rauville-la-Place', '30T', 608593, 5471765, 49.3889, -1.50361, 31),
('50427', 'Ravenoville', '30T', 625371, 5479724, 49.4572, -1.27, 10),
('50428', 'Reffuveille', '30T', 639001, 5392616, 48.6711, -1.11194, 226),
('50429', 'Regnéville-sur-Mer', '30T', 606057, 5429426, 49.0086, -1.54972, 22),
('50430', 'Reigneville-Bocage', '30T', 610847, 5474003, 49.4086, -1.47194, 20),
('50431', 'Remilly-sur-Lozon', '30T', 627029, 5448928, 49.18, -1.25694, 12),
('50432', 'Réthoville', '30T', 618570, 5506203, 49.6967, -1.35583, 20),
('50433', 'Réville', '30T', 625818, 5497839, 49.62, -1.25806, 7),
('50434', 'La Rochelle-Normande', '30T', 615145, 5402609, 48.7658, -1.43305, 100),
('50435', 'Rocheville', '30T', 601840, 5484609, 49.5056, -1.59334, 60),
('50436', 'Romagny', '30T', 649862, 5389713, 48.6425, -0.965562, 155),
('50437', 'Roncey', '30T', 622023, 5427901, 48.9919, -1.33195, 90),
('50438', 'La Ronde-Haye', '30T', 613769, 5442769, 49.1272, -1.44055, 70),
('50440', 'Rouffigny', '30T', 628228, 5407373, 48.8061, -1.25361, 150),
('50441', 'Rouxeville', '30T', 650013, 5440947, 49.1031, -0.944725, 190),
('50442', 'Le Rozel', '30T', 585017, 5482437, 49.4886, -1.82611, 20),
('50443', 'Sacey', '30T', 614537, 5374241, 48.5108, -1.44916, 30),
('50444', 'Saint-Amand', '30T', 648652, 5434204, 49.0428, -0.965837, 136),
('50445', 'Saint-André-de-Bohon', '30T', 627376, 5454930, 49.2339, -1.25028, 10),
('50446', 'Saint-André-de-l''Épine', '30T', 644996, 5445045, 49.1411, -1.01194, 150),
('50447', 'Saint-Aubin-des-Préaux', '30T', 609589, 5406884, 48.8053, -1.50749, 70),
('50448', 'Saint-Aubin-de-Terregatte', '30T', 625573, 5381889, 48.5775, -1.2975, 70),
('50449', 'Saint-Aubin-du-Perron', '30T', 619015, 5444888, 49.1453, -1.36805, 80),
('50450', 'Saint-Barthélemy', '30T', 650741, 5394371, 48.6842, -0.951941, 290),
('50451', 'Saint-Brice', '30T', 624535, 5395427, 48.6994, -1.30749, 53),
('50452', 'Saint-Brice-de-Landelles', '30T', 636463, 5377447, 48.5353, -1.15138, 160),
('50453', 'Sainte-Cécile', '30T', 632897, 5410942, 48.8372, -1.1889, 150),
('50454', 'Saint-Christophe-du-Foc', '30T', 591228, 5490043, 49.5561, -1.73862, 70),
('50455', 'Saint-Clair-sur-l''Elle', '30T', 643612, 5450695, 49.1922, -1.02889, 50),
('50456', 'Saint-Clément-Rancoudray', '30T', 655508, 5393636, 48.6764, -0.887495, 272),
('50457', 'Sainte-Colombe', '30T', 607311, 5475447, 49.4222, -1.52028, 10),
('50458', 'Saint-Côme-du-Mont', '30T', 625622, 5466135, 49.335, -1.27084, 28),
('50460', 'Sainte-Croix-Hague', '30T', 588727, 5499238, 49.6392, -1.77111, 160),
('50461', 'Saint-Cyr', '30T', 614606, 5483133, 49.49, -1.4175, 49),
('50462', 'Saint-Cyr-du-Bailleul', '30T', 662358, 5381748, 48.5678, -0.799165, 157),
('50463', 'Saint-Denis-le-Gast', '30T', 622390, 5422317, 48.9417, -1.32861, 111),
('50464', 'Saint-Denis-le-Vêtu', '30T', 616787, 5427479, 48.9892, -1.40361, 60),
('50465', 'Saint-Ébremond-de-Bonfossé', '30T', 635230, 5436549, 49.0669, -1.14862, 90),
('50467', 'Saint-Floxel', '30T', 619391, 5483359, 49.4911, -1.35139, 40),
('50468', 'Saint-Fromond', '30T', 638366, 5453156, 49.2156, -1.10001, 10),
('50469', 'Sainte-Geneviève', '30T', 621772, 5501949, 49.6578, -1.31277, 20),
('50470', 'Saint-Georges-de-Bohon', '30T', 626811, 5457481, 49.2569, -1.25723, 13),
('50471', 'Saint-Georges-de-la-Rivière', '30T', 592431, 5468842, 49.3653, -1.72694, 20),
('50472', 'Saint-Georges-de-Livoye', '30T', 631199, 5399873, 48.7381, -1.21556, 80),
('50473', 'Saint-Georges-d''Elle', '30T', 648155, 5445933, 49.1483, -0.968333, 127),
('50474', 'Saint-Georges-de-Rouelley', '30T', 664660, 5385770, 48.6033, -0.766391, 150),
('50475', 'Saint-Georges-Montcocq', '30T', 639050, 5443688, 49.1303, -1.09389, 98),
('50476', 'Saint-Germain-d''Elle', '30T', 651779, 5443127, 49.1222, -0.919727, 130),
('50477', 'Saint-Germain-des-Vaux', '30T', 579203, 5507183, 49.7119, -1.90139, 65),
('50478', 'Saint-Germain-de-Tournebut', '30T', 616013, 5487951, 49.5331, -1.39667, 36),
('50479', 'Saint-Germain-de-Varreville', '30T', 626449, 5477524, 49.4372, -1.25584, 10),
('50480', 'Saint-Germain-le-Gaillard', '30T', 588360, 5482304, 49.4869, -1.78, 120),
('50481', 'Saint-Germain-sur-Ay', '30T', 602440, 5454595, 49.2356, -1.59278, 10),
('50482', 'Saint-Germain-sur-Sèves', '30T', 618648, 5453468, 49.2225, -1.37055, 10),
('50483', 'Saint-Gilles', '30T', 633266, 5440579, 49.1036, -1.17416, 100),
('50484', 'Saint-Hilaire-du-Harcouët', '30T', 640748, 5382495, 48.5797, -1.09166, 70),
('50485', 'Saint-Hilaire-Petitville', '30T', 628832, 5462719, 49.3036, -1.22778, 10),
('50486', 'Saint-Jacques-de-Néhou', '30T', 600652, 5474857, 49.4181, -1.61222, 80),
('50487', 'Saint-James', '30T', 623818, 5375920, 48.5242, -1.32305, 100),
('50488', 'Saint-Jean-de-Daye', '30T', 635722, 5454511, 49.2283, -1.13583, 43),
('50489', 'Saint-Jean-de-la-Haize', '30T', 620548, 5395402, 48.7, -1.36166, 22),
('50490', 'Saint-Jean-de-la-Rivière', '30T', 592018, 5469392, 49.3703, -1.7325, 20),
('50491', 'Saint-Jean-de-Savigny', '30T', 646216, 5451010, 49.1944, -0.993061, 50),
('50492', 'Saint-Jean-des-Baisants', '30T', 647930, 5439963, 49.0947, -0.973605, 210),
('50493', 'Saint-Jean-des-Champs', '30T', 612698, 5409510, 48.8283, -1.46445, 100),
('50494', 'Saint-Jean-du-Corail', '30T', 654257, 5386248, 48.6103, -0.907228, 120),
('50495', 'Saint-Jean-du-Corail-des-Bois', '30T', 632243, 5403265, 48.7683, -1.20028, 134),
('50496', 'Saint-Jean-le-Thomas', '30T', 609360, 5398725, 48.7319, -1.51278, 30),
('50497', 'Saint-Jores', '30T', 614696, 5462467, 49.3042, -1.42222, 38),
('50498', 'Saint-Joseph', '30T', 606827, 5487794, 49.5333, -1.52361, 86),
('50499', 'Saint-Laurent-de-Cuves', '30T', 638023, 5401582, 48.7519, -1.12222, 930),
('50500', 'Saint-Laurent-de-Terregatte', '30T', 628432, 5381429, 48.5728, -1.25889, 117),
('50502', 'Saint-Lô', '30T', 639238, 5441869, 49.1139, -1.09194, 30),
('50503', 'Saint-Lô-d''Ourville', '30T', 596765, 5465581, 49.3353, -1.66805, 10),
('50504', 'Saint-Louet-sur-Vire', '30T', 647137, 5428540, 48.9922, -0.988609, 120),
('50505', 'Saint-Loup', '30T', 625629, 5392208, 48.6703, -1.29361, 75),
('50506', 'Saint-Malo-de-la-Lande', '30T', 606737, 5436328, 49.0706, -1.53861, 53),
('50507', 'Saint-Marcouf', '30T', 623902, 5481482, 49.4733, -1.28972, 20),
('50508', 'Sainte-Marie-du-Bois', '30T', 655648, 5381157, 48.5642, -0.890277, 120),
('50509', 'Sainte-Marie-du-Mont', '30T', 628796, 5471121, 49.3792, -1.22556, 30),
('50510', 'Saint-Martin-d''Aubigny', '30T', 620340, 5447296, 49.1667, -1.34917, 33),
('50511', 'Saint-Martin-d''Audouville', '30T', 618492, 5487664, 49.53, -1.36251, 20),
('50512', 'Saint-Martin-de-Bonfossé', '30T', 633784, 5435062, 49.0539, -1.16889, 105),
('50513', 'Saint-Martin-de-Cenilly', '30T', 625820, 5427213, 48.985, -1.28028, 110),
('50514', 'Chaulieu', '30T', 657308, 5400206, 48.735, -0.860557, 360),
('50515', 'Saint-Martin-de-Landelles', '30T', 634977, 5378678, 48.5467, -1.1711, 178),
('50516', 'Saint-Martin-des-Champs', '30T', 622990, 5392212, 48.6708, -1.32944, 90),
('50517', 'Saint-Martin-de-Varreville', '30T', 627882, 5476569, 49.4283, -1.23639, 20),
('50518', 'Saint-Martin-le-Bouillant', '30T', 633929, 5405344, 48.7867, -1.17667, 180),
('50519', 'Saint-Martin-le-Gréard', '30T', 597773, 5490435, 49.5586, -1.64805, 110),
('50520', 'Saint-Martin-le-Hébert', '30T', 600423, 5485108, 49.5103, -1.61278, 110),
('50521', 'Saint-Maur-des-Bois', '30T', 635278, 5409486, 48.8236, -1.15694, 170),
('50522', 'Saint-Maurice-en-Cotentin', '30T', 594076, 5471682, 49.3906, -1.70362, 70),
('50523', 'Sainte-Mère-Église', '30T', 622050, 5474242, 49.4086, -1.3175, 30),
('50524', 'Saint-Michel-de-la-Pierre', '30T', 617935, 5444185, 49.1392, -1.38306, 56),
('50525', 'Saint-Michel-de-Montjoie', '30T', 645032, 5403088, 48.7639, -1.02639, 330),
('50528', 'Saint-Nicolas-de-Pierrepont', '30T', 602821, 5464487, 49.3244, -1.585, 10),
('50529', 'Saint-Nicolas-des-Bois', '30T', 632783, 5402011, 48.7569, -1.19333, 88),
('50531', 'Saint-Ovin', '30T', 628049, 5393746, 48.6836, -1.26028, 130),
('50532', 'Saint-Pair-sur-Mer', '30T', 605057, 5408094, 48.8169, -1.56888, 10),
('50533', 'Saint-Patrice-de-Claids', '30T', 614673, 5454836, 49.2356, -1.42473, 16),
('50534', 'Saint-Pellerin', '30T', 632598, 5462375, 49.2997, -1.17611, 31),
('50535', 'Sainte-Pience', '30T', 625059, 5402173, 48.76, -1.29833, 140),
('50536', 'Saint-Pierre-d''Arthéglise', '30T', 594979, 5474261, 49.4136, -1.69056, 120),
('50537', 'Saint-Pierre-de-Coutances', '30T', 613429, 5432630, 49.0361, -1.44806, 20),
('50538', 'Saint-Pierre-de-Semilly', '30T', 645618, 5442992, 49.1225, -1.00416, 130),
('50539', 'Saint-Pierre-Église', '30T', 615130, 5503039, 49.6689, -1.40444, 80),
('50540', 'Saint-Pierre-Langers', '30T', 610467, 5404770, 48.7861, -1.49611, 40),
('50541', 'Saint-Planchers', '30T', 608263, 5408958, 48.8242, -1.525, 40),
('50542', 'Saint-Pois', '30T', 642210, 5401625, 48.7514, -1.06528, 170),
('50543', 'Saint-Quentin-sur-le-Homme', '30T', 624028, 5389670, 48.6478, -1.31611, 60),
('50544', 'Saint-Rémy-des-Landes', '30T', 598909, 5460863, 49.2925, -1.63972, 21),
('50545', 'Saint-Romphaire', '30T', 638633, 5433604, 49.0397, -1.10306, 122),
('50546', 'Saint-Samson-de-Bonfossé', '30T', 636801, 5434610, 49.0492, -1.12778, 105),
('50548', 'Saint-Sauveur-de-Pierrepont', '30T', 602295, 5465651, 49.335, -1.59194, 10),
('50549', 'Saint-Sauveur-la-Pommeraye', '30T', 616186, 5410477, 48.8364, -1.41667, 100),
('50550', 'Saint-Sauveur-Lendelin', '30T', 615930, 5443154, 49.1303, -1.41083, 69),
('50551', 'Saint-Sauveur-le-Vicomte', '30T', 606543, 5471416, 49.3861, -1.53195, 20),
('50552', 'Saint-Sébastien-de-Raids', '30T', 618761, 5450072, 49.1919, -1.37, 11),
('50553', 'Saint-Senier-de-Beuvron', '30T', 624755, 5381809, 48.5769, -1.30861, 40),
('50554', 'Saint-Senier-sous-Avranches', '30T', 622197, 5393862, 48.6858, -1.33972, 92),
('50556', 'Sainte-Suzanne-sur-Vire', '30T', 641836, 5436250, 49.0628, -1.05833, 26),
('50557', 'Saint-Symphorien-des-Monts', '30T', 647547, 5378838, 48.5453, -1.00083, 200),
('50558', 'Saint-Symphorien-le-Valois', '30T', 605266, 5461258, 49.295, -1.55222, 34),
('50562', 'Saint-Vaast-la-Hougue', '30T', 625358, 5494275, 49.5881, -1.26556, 4),
('50563', 'Saint-Vigor-des-Monts', '30T', 640331, 5419466, 48.9122, -1.08472, 140),
('50564', 'Sainteny', '30T', 622732, 5455442, 49.2394, -1.31388, 15),
('50565', 'Sartilly', '30T', 613435, 5401308, 48.7544, -1.45667, 104),
('50567', 'Saussemesnil', '30T', 611768, 5491971, 49.57, -1.45417, 100),
('50568', 'Saussey', '30T', 614827, 5429879, 49.0111, -1.42972, 40),
('50569', 'Savigny', '30T', 621476, 5434314, 49.0497, -1.3375, 113),
('50570', 'Savigny-le-Vieux', '30T', 644128, 5376154, 48.5219, -1.04806, 150),
('50571', 'Sébeville', '30T', 624299, 5471975, 49.3878, -1.28722, 30),
('50572', 'Sénoville', '30T', 588933, 5476754, 49.4369, -1.77333, 40),
('50573', 'Servigny', '30T', 611453, 5438985, 49.0936, -1.47333, 76),
('50574', 'Servon', '30T', 616685, 5384478, 48.6025, -1.41722, 30),
('50575', 'Sideville', '30T', 594912, 5494277, 49.5936, -1.68667, 30),
('50576', 'Siouville-Hague', '30T', 584051, 5490267, 49.5592, -1.83778, 70),
('50577', 'Sortosville-en-Beaumont', '30T', 592013, 5475662, 49.4267, -1.73111, 60),
('50578', 'Sortosville', '30T', 613563, 5481999, 49.48, -1.43222, 30),
('50579', 'Sottevast', '30T', 601802, 5486678, 49.5242, -1.59333, 46),
('50580', 'Sotteville', '30T', 590214, 5488173, 49.5394, -1.75306, 78),
('50581', 'Soulles', '30T', 632470, 5430581, 49.0139, -1.18833, 100),
('50582', 'Sourdeval', '30T', 653051, 5398914, 48.7244, -0.918893, 220),
('50583', 'Sourdeval-les-Bois', '30T', 627203, 5419181, 48.9125, -1.26389, 80),
('50584', 'Subligny', '30T', 620132, 5400490, 48.7458, -1.36583, 110),
('50585', 'Surtainville', '30T', 586033, 5479271, 49.46, -1.81278, 10),
('50586', 'Surville', '30T', 597910, 5459084, 49.2767, -1.65389, 10),
('50587', 'Taillepied', '30T', 602943, 5468752, 49.3628, -1.58222, 60),
('50588', 'Tamerville', '30T', 612153, 5487901, 49.5333, -1.45, 70),
('50589', 'Tanis', '30T', 615129, 5383427, 48.5933, -1.43861, 18),
('50590', 'Le Tanu', '30T', 621409, 5408488, 48.8175, -1.34611, 128),
('50591', 'Le Teilleul', '30T', 657156, 5378542, 48.5403, -0.870839, 210),
('50592', 'Tessy-sur-Vire', '30T', 641922, 5426520, 48.9753, -1.06056, 50),
('50593', 'Teurthéville-Bocage', '30T', 615853, 5494528, 49.5922, -1.39694, 73),
('50594', 'Teurthéville-Hague', '30T', 592120, 5493147, 49.5839, -1.72556, 50),
('50595', 'Le Theil', '30T', 610373, 5496391, 49.61, -1.47221, 110),
('50596', 'Théville', '30T', 613881, 5501376, 49.6542, -1.42223, 100),
('50597', 'Tirepied', '30T', 627610, 5396856, 48.7117, -1.26528, 20),
('50598', 'Tocqueville', '30T', 620255, 5503429, 49.6714, -1.33333, 32),
('50599', 'Tollevast', '30T', 599524, 5492475, 49.5767, -1.62333, 90),
('50600', 'Tonneville', '30T', 592889, 5499864, 49.6442, -1.71334, 100),
('50601', 'Torigni-sur-Vire', '30T', 647720, 5433376, 49.0356, -0.978884, 80),
('50602', 'Tourlaville', '30T', 603507, 5499530, 49.6394, -1.56639, 30),
('50603', 'Tourville-sur-Sienne', '30T', 606526, 5433574, 49.0458, -1.54222, 50),
('50604', 'Tréauville', '30T', 586007, 5487302, 49.5322, -1.81139, 30),
('50605', 'Trelly', '30T', 615039, 5424508, 48.9628, -1.42834, 39),
('50606', 'Tribehou', '30T', 627972, 5452781, 49.2144, -1.24278, 4),
('50607', 'La Trinité', '30T', 629690, 5405924, 48.7928, -1.23416, 160),
('50608', 'Troisgots', '30T', 640967, 5430512, 49.0114, -1.07222, 120),
('50609', 'Turqueville', '30T', 624893, 5474213, 49.4078, -1.27833, 20),
('50610', 'Urville', '30T', 613104, 5478900, 49.4522, -1.43944, 10),
('50611', 'Urville-Nacqueville', '30T', 590947, 5503228, 49.6747, -1.73945, 10),
('50612', 'Vains', '30T', 616869, 5393347, 48.6822, -1.41222, 20),
('50613', 'Valcanville', '30T', 620620, 5500502, 49.645, -1.32917, 20),
('50614', 'Le Valdécie', '30T', 597777, 5475608, 49.4253, -1.65166, 60),
('50615', 'Valognes', '30T', 610821, 5485217, 49.5094, -1.46916, 36),
('50616', 'Le Val-Saint-Père', '30T', 619610, 5391428, 48.6644, -1.37556, 10),
('50617', 'Varenguebec', '30T', 609368, 5466281, 49.3394, -1.49444, 13),
('50618', 'Varouville', '30T', 617840, 5503808, 49.6753, -1.36667, 50),
('50619', 'Le Vast', '30T', 618626, 5498110, 49.6239, -1.3575, 44),
('50620', 'Vasteville', '30T', 588828, 5494328, 49.595, -1.77083, 100),
('50621', 'Vaudreville', '30T', 618097, 5486420, 49.5189, -1.36833, 40),
('50622', 'Vaudrimesnil', '30T', 615649, 5445929, 49.1553, -1.41389, 26),
('50623', 'Vauville', '30T', 583437, 5498876, 49.6367, -1.84444, 10),
('50624', 'La Vendelée', '30T', 612188, 5437733, 49.0822, -1.46362, 100),
('50625', 'Vengeons', '30T', 653120, 5402376, 48.7556, -0.916669, 340),
('50626', 'Ver', '30T', 617882, 5417061, 48.8953, -1.39167, 36),
('50627', 'Vergoncey', '30T', 618212, 5380062, 48.5625, -1.39777, 70),
('50628', 'Vernix', '30T', 630521, 5397386, 48.7158, -1.22556, 20),
('50629', 'Vesly', '30T', 608892, 5456665, 49.2531, -1.50362, 51),
('50630', 'Vessey', '30T', 615795, 5375935, 48.5258, -1.43167, 47),
('50631', 'Les Veys', '30T', 634150, 5464205, 49.3158, -1.15416, 10),
('50633', 'Le Vicel', '30T', 622046, 5499545, 49.6361, -1.30973, 20),
('50634', 'Videcosville', '30T', 617748, 5491417, 49.5639, -1.37166, 79),
('50635', 'Vidouville', '30T', 653313, 5440481, 49.0981, -0.899722, 130),
('50636', 'Vierville', '30T', 627517, 5468898, 49.3594, -1.24388, 13),
('50637', 'Villebaudon', '30T', 634356, 5424849, 48.9619, -1.16445, 160),
('50638', 'Villechien', '30T', 648573, 5382727, 48.58, -0.985551, 110),
('50639', 'Villedieu-les-Poêles', '30T', 630482, 5411318, 48.8411, -1.22167, 120),
('50640', 'Villiers-le-Pré', '30T', 618112, 5377990, 48.5439, -1.39972, 60),
('50641', 'Villiers-Fossard', '30T', 641442, 5446900, 49.1586, -1.05999, 90),
('50642', 'Vindefontaine', '30T', 614944, 5466056, 49.3364, -1.41778, 20),
('50643', 'Virandeville', '30T', 592326, 5491668, 49.5706, -1.72306, 56),
('50644', 'Virey', '30T', 637782, 5383071, 48.5856, -1.13166, 110),
('50646', 'Le Vrétot', '30T', 593596, 5478531, 49.4522, -1.70861, 50),
('50647', 'Yquelon', '30T', 605986, 5411787, 48.85, -1.55528, 35),
('50648', 'Yvetot-Bocage', '30T', 608411, 5482975, 49.4897, -1.50305, 27),
('51001', 'Ablancourt', '31T', 611873, 5407918, 48.8142, 4.52388, 100),
('51002', 'Saint-Martin-d''Ablois', '31T', 563393, 5429331, 49.0136, 3.86695, 160),
('51003', 'Aigny', '31T', 588358, 5432050, 49.035, 4.20888, 80),
('51004', 'Allemanche-Launay-et-Soyer', '31T', 558156, 5383816, 48.6047, 3.78888, 75),
('51005', 'Allemant', '31T', 558915, 5401241, 48.7614, 3.80166, 220),
('51006', 'Alliancelles', '31T', 638271, 5408076, 48.8103, 4.88333, 140),
('51007', 'Ambonnay', '31T', 585626, 5436733, 49.0775, 4.1725, 100),
('51008', 'Ambrières', '31T', 635419, 5388420, 48.6342, 4.83806, 150),
('51009', 'Anglure', '31T', 560185, 5381800, 48.5864, 3.81611, 75),
('51010', 'Angluzelles-et-Courcelles', '31T', 564885, 5389943, 48.6592, 3.88111, 87),
('51012', 'Anthenay', '31T', 553688, 5443465, 49.1417, 3.73611, 200),
('51013', 'Aougny', '31T', 552956, 5447967, 49.1822, 3.72667, 210),
('51014', 'Arcis-le-Ponsart', '31T', 550636, 5453690, 49.2339, 3.69556, 170),
('51015', 'Argers', '31T', 635588, 5436866, 49.0697, 4.85639, 150),
('51016', 'Arrigny', '31T', 625825, 5387085, 48.6242, 4.70749, 115),
('51017', 'Arzillières-Neuville', '31T', 617017, 5389180, 48.6447, 4.58861, 130),
('51018', 'Athis', '31T', 582462, 5429829, 49.0158, 4.12778, 80),
('51019', 'Aubérive', '31T', 603151, 5451210, 49.205, 4.41612, 115),
('51020', 'Aubilly', '31T', 562532, 5451495, 49.2131, 3.85861, 130),
('51022', 'Aulnay-l''Aître', '31T', 614585, 5408992, 48.8233, 4.56111, 100),
('51023', 'Aulnay-sur-Marne', '31T', 588060, 5429080, 49.0083, 4.20416, 80),
('51025', 'Auménancourt', '31T', 576981, 5470117, 49.3789, 4.06056, 65),
('51027', 'Auve', '31T', 623870, 5432607, 49.0339, 4.69473, 160),
('51028', 'Avenay-Val-d''Or', '31T', 576509, 5435766, 49.07, 4.0475, 100),
('51029', 'Avize', '31T', 574180, 5424770, 48.9714, 4.01361, 151),
('51030', 'Ay', '31T', 573039, 5434237, 49.0567, 3.99973, 80),
('51031', 'Baconnes', '31T', 597614, 5446105, 49.16, 4.33888, 125),
('51032', 'Bagneux', '31T', 561160, 5378815, 48.5594, 3.82889, 75),
('51033', 'Le Baizil', '31T', 558224, 5424426, 48.97, 3.79556, 220),
('51034', 'Bannay', '31T', 553238, 5412147, 48.86, 3.72584, 200),
('51035', 'Bannes', '31T', 567208, 5406060, 48.8039, 3.91528, 143),
('51036', 'Barbonne-Fayel', '31T', 551263, 5389648, 48.6578, 3.69611, 110),
('51037', 'Baslieux-lès-Fismes', '31T', 551713, 5463829, 49.325, 3.71166, 100),
('51038', 'Baslieux-sous-Châtillon', '31T', 558270, 5441288, 49.1217, 3.79861, 120),
('51039', 'Bassu', '31T', 624309, 5410157, 48.8319, 4.69389, 150),
('51040', 'Bassuet', '31T', 622516, 5406349, 48.7981, 4.66833, 124),
('51041', 'Baudement', '31T', 557186, 5380595, 48.5758, 3.77528, 75),
('51042', 'Baye', '31T', 556056, 5411557, 48.8544, 3.76417, 200),
('51043', 'Bazancourt', '31T', 585047, 5468878, 49.3667, 4.17139, 72),
('51044', 'Beaumont-sur-Vesle', '31T', 586490, 5447588, 49.175, 4.18666, 100),
('51045', 'Beaunay', '31T', 564228, 5415073, 48.8853, 3.87612, 200),
('51046', 'Beine-Nauroy', '31T', 588563, 5455991, 49.2503, 4.21695, 114),
('51047', 'Belval-en-Argonne', '31T', 646735, 5423740, 48.9492, 5.00417, 155),
('51048', 'Belval-sous-Châtillon', '31T', 562281, 5441517, 49.1233, 3.85362, 183),
('51049', 'Bergères-lès-Vertus', '31T', 573683, 5414696, 48.8808, 4.005, 110),
('51050', 'Bergères-sous-Montmirail', '31T', 543185, 5410454, 48.8456, 3.58861, 140),
('51051', 'Berméricourt', '31T', 572133, 5467704, 49.3578, 3.99334, 85),
('51052', 'Berru', '31T', 583795, 5458356, 49.2722, 4.15194, 170),
('51053', 'Berzieux', '31T', 630993, 5447445, 49.1658, 4.79694, 140),
('51054', 'Bétheniville', '31T', 599657, 5460814, 49.2919, 4.37055, 100),
('51055', 'Bétheny', '31T', 576882, 5459862, 49.2867, 4.05722, 90),
('51056', 'Bethon', '31T', 545329, 5384687, 48.6136, 3.61499, 150),
('51057', 'Bettancourt-la-Longue', '31T', 638608, 5410123, 48.8286, 4.88861, 132),
('51058', 'Bezannes', '31T', 571986, 5452661, 49.2225, 3.98861, 85),
('51059', 'Bignicourt-sur-Marne', '31T', 618629, 5393292, 48.6814, 4.61166, 106);
INSERT INTO `ods_communes` (`oc_code_insee`, `oc_nom`, `oc_secteur`, `oc_x_utm`, `oc_y_utm`, `oc_latitude`, `oc_longitude`, `oc_altitude`) VALUES
('51060', 'Bignicourt-sur-Saulx', '31T', 630434, 5402883, 48.7653, 4.775, 118),
('51061', 'Billy-le-Grand', '31T', 589829, 5440259, 49.1086, 4.23083, 121),
('51062', 'Binarville', '31T', 637933, 5455926, 49.2406, 4.895, 180),
('51063', 'Binson-et-Orquigny', '31T', 557654, 5438132, 49.0933, 3.78972, 90),
('51064', 'Bisseuil', '31T', 579527, 5433276, 49.0472, 4.08833, 80),
('51065', 'Blacy', '31T', 614377, 5398208, 48.7264, 4.55528, 100),
('51066', 'Blaise-sous-Arzillières', '31T', 616543, 5392290, 48.6728, 4.58305, 105),
('51068', 'Blesme', '31T', 630638, 5398532, 48.7261, 4.77639, 120),
('51069', 'Bligny', '31T', 562677, 5449490, 49.195, 3.86028, 140),
('51070', 'Boissy-le-Repos', '31T', 547545, 5410644, 48.8469, 3.64805, 140),
('51071', 'Bouchy-Saint-Genest', '31T', 534306, 5389333, 48.6561, 3.46583, 170),
('51072', 'Bouilly', '31T', 564817, 5449916, 49.1986, 3.88972, 160),
('51073', 'Bouleuse', '31T', 561303, 5452902, 49.2258, 3.84195, 120),
('51074', 'Boult-sur-Suippe', '31T', 583341, 5469623, 49.3736, 4.14806, 70),
('51075', 'Bourgogne', '31T', 577833, 5466948, 49.3503, 4.07167, 90),
('51076', 'Boursault', '31T', 561832, 5434502, 49.0603, 3.84639, 150),
('51077', 'Bouvancourt', '31T', 560639, 5465372, 49.3381, 3.83472, 130),
('51078', 'Bouy', '31T', 598529, 5437998, 49.0869, 4.34945, 110),
('51079', 'Bouzy', '31T', 583816, 5437014, 49.0803, 4.14778, 120),
('51080', 'Brandonvillers', '31T', 614825, 5383266, 48.5919, 4.55722, 127),
('51081', 'Branscourt', '31T', 559692, 5457826, 49.2703, 3.82056, 110),
('51082', 'Braux-Sainte-Cohière', '31T', 633599, 5439382, 49.0928, 4.83, 150),
('51083', 'Braux-Saint-Remy', '31T', 636290, 5431446, 49.0208, 4.86417, 160),
('51084', 'Bréban', '31T', 603525, 5381595, 48.5789, 4.40361, 120),
('51085', 'Le Breuil', '31T', 547342, 5425002, 48.9761, 3.64695, 120),
('51086', 'Breuil', '31T', 555827, 5462263, 49.3106, 3.76805, 70),
('51087', 'Breuvery-sur-Coole', '31T', 596305, 5412909, 48.8617, 4.31306, 100),
('51088', 'Brimont', '31T', 574375, 5465974, 49.3419, 4.02389, 140),
('51089', 'Brouillet', '31T', 553961, 5452825, 49.2258, 3.74111, 110),
('51090', 'Broussy-le-Grand', '31T', 564494, 5404360, 48.7889, 3.87806, 140),
('51091', 'Broussy-le-Petit', '31T', 560817, 5404720, 48.7925, 3.82806, 145),
('51092', 'Broyes', '31T', 556447, 5401030, 48.7597, 3.76805, 221),
('51093', 'Brugny-Vaudancourt', '31T', 564733, 5427648, 48.9983, 3.885, 190),
('51094', 'Brusson', '31T', 625187, 5401002, 48.7494, 4.70306, 106),
('51095', 'Le Buisson', '31T', 628707, 5402503, 48.7622, 4.75139, 112),
('51097', 'Bussy-le-Château', '31T', 612655, 5435734, 49.0642, 4.54222, 140),
('51098', 'Bussy-le-Repos', '31T', 628847, 5417675, 48.8986, 4.75806, 150),
('51099', 'Bussy-Lettrée', '31T', 592620, 5406546, 48.805, 4.26139, 130),
('51100', 'La Caure', '31T', 558025, 5418124, 48.9133, 3.79194, 231),
('51101', 'Caurel', '31T', 583802, 5461909, 49.3042, 4.15278, 110),
('51102', 'Cauroy-lès-Hermonville', '31T', 567182, 5466684, 49.3492, 3.925, 90),
('51103', 'La Celle-sous-Chantemerle', '31T', 550059, 5384727, 48.6136, 3.67917, 120),
('51104', 'Cernay-en-Dormois', '31T', 628648, 5454187, 49.2269, 4.76695, 125),
('51105', 'Cernay-lès-Reims', '31T', 580333, 5457409, 49.2642, 4.10417, 130),
('51106', 'Cernon', '31T', 598627, 5410664, 48.8411, 4.34417, 109),
('51107', 'Chaintrix-Bierges', '31T', 581162, 5417270, 48.9031, 4.1075, 94),
('51108', 'Châlons-en-Champagne', '31T', 599680, 5423594, 48.9572, 4.36167, 85),
('51109', 'Châlons-sur-Vesle', '31T', 566759, 5459977, 49.2889, 3.91805, 93),
('51110', 'Chaltrait', '31T', 565695, 5420185, 48.9311, 3.89695, 220),
('51111', 'Chambrecy', '31T', 559981, 5447977, 49.1817, 3.82306, 130),
('51112', 'Chamery', '31T', 569732, 5446949, 49.1714, 3.95666, 150),
('51113', 'Champaubert', '31T', 557047, 5414254, 48.8786, 3.77806, 230),
('51115', 'Champfleury', '31T', 574125, 5450064, 49.1989, 4.0175, 100),
('51116', 'Champguyon', '31T', 540252, 5401693, 48.7669, 3.54777, 174),
('51117', 'Champigneul-Champagne', '31T', 585543, 5424965, 48.9717, 4.16889, 85),
('51118', 'Champigny', '31T', 570872, 5457526, 49.2664, 3.97417, 80),
('51119', 'Champillon', '31T', 571476, 5437366, 49.085, 3.97889, 200),
('51120', 'Champlat-et-Boujacourt', '31T', 560865, 5444929, 49.1542, 3.83473, 220),
('51121', 'Champvoisy', '31T', 546507, 5442041, 49.1294, 3.6375, 150),
('51122', 'Changy', '31T', 623407, 5403928, 48.7761, 4.67973, 90),
('51124', 'Chantemerle', '31T', 548687, 5384746, 48.6139, 3.66056, 175),
('51125', 'Chapelaine', '31T', 610428, 5381788, 48.5794, 4.49722, 130),
('51126', 'La Chapelle-Felcourt', '31T', 628000, 5434091, 49.0464, 4.75167, 169),
('51127', 'La Chapelle-Lasson', '31T', 561383, 5386537, 48.6289, 3.83306, 78),
('51128', 'La Chapelle-sous-Orbais', '31T', 553732, 5417957, 48.9122, 3.73334, 226),
('51129', 'Charleville', '31T', 549025, 5406920, 48.8133, 3.66778, 210),
('51130', 'Charmont', '31T', 637024, 5414811, 48.8711, 4.86861, 181),
('51132', 'Les Charmontois', '31T', 646518, 5425805, 48.9678, 5.00195, 163),
('51133', 'Le Châtelier', '31T', 639386, 5422223, 48.9372, 4.90333, 180),
('51134', 'Châtelraould-Saint-Louvent', '31T', 613747, 5393005, 48.6797, 4.54528, 110),
('51135', 'Châtillon-sur-Broué', '31T', 625816, 5378342, 48.5456, 4.70472, 125),
('51136', 'Châtillon-sur-Marne', '31T', 555660, 5438791, 49.0994, 3.7625, 160),
('51137', 'Châtillon-sur-Morin', '31T', 542706, 5395845, 48.7142, 3.58056, 173),
('51138', 'Châtrices', '31T', 641611, 5433927, 49.0419, 4.93778, 150),
('51139', 'Chaudefontaine', '31T', 636698, 5440416, 49.1014, 4.87278, 140),
('51140', 'Chaumuzy', '31T', 562985, 5447300, 49.1753, 3.86417, 140),
('51141', 'La Chaussée-sur-Marne', '31T', 611419, 5410225, 48.835, 4.51833, 100),
('51142', 'Chavot-Courcourt', '31T', 568119, 5428244, 49.0033, 3.93139, 170),
('51143', 'Le Chemin', '31T', 644233, 5429978, 49.0058, 4.97223, 155),
('51144', 'Cheminon', '31T', 640042, 5400087, 48.7381, 4.90472, 150),
('51145', 'Chenay', '31T', 567595, 5460975, 49.2978, 3.92972, 150),
('51146', 'Cheniers', '31T', 591312, 5415420, 48.885, 4.24556, 121),
('51147', 'La Cheppe', '31T', 609538, 5434251, 49.0514, 4.49916, 130),
('51148', 'Cheppes-la-Prairie', '31T', 608039, 5409973, 48.8333, 4.47222, 90),
('51149', 'Chepy', '31T', 605454, 5417276, 48.8994, 4.43889, 87),
('51150', 'Cherville', '31T', 585096, 5430270, 49.0194, 4.16389, 75),
('51151', 'Chichey', '31T', 555873, 5393088, 48.6883, 3.75917, 102),
('51152', 'Chigny-les-Roses', '31T', 577590, 5445448, 49.1569, 4.06416, 151),
('51153', 'Chouilly', '31T', 574161, 5430761, 49.0253, 4.01445, 80),
('51154', 'Clamanges', '31T', 579509, 5408908, 48.8281, 4.08333, 122),
('51155', 'Clesles', '31T', 561519, 5375947, 48.5336, 3.83333, 77),
('51156', 'Cloyes-sur-Marne', '31T', 620491, 5391354, 48.6636, 4.63638, 110),
('51157', 'Coizard-Joches', '31T', 563587, 5408704, 48.8281, 3.86638, 150),
('51158', 'Val-des-Marais', '31T', 570880, 5410861, 48.8467, 3.96611, 145),
('51160', 'Compertrix', '31T', 598944, 5421480, 48.9383, 4.35111, 90),
('51161', 'Condé-sur-Marne', '31T', 586209, 5433159, 49.0453, 4.17973, 85),
('51162', 'Conflans-sur-Seine', '31T', 550242, 5377935, 48.5525, 3.68083, 70),
('51163', 'Congy', '31T', 560796, 5412224, 48.86, 3.82888, 180),
('51164', 'Connantray-Vaurefroy', '31T', 578042, 5400054, 48.7486, 4.06166, 142),
('51165', 'Connantre', '31T', 567844, 5397358, 48.7256, 3.92251, 88),
('51166', 'Contault', '31T', 631214, 5419213, 48.9119, 4.79083, 148),
('51167', 'Coole', '31T', 602479, 5399614, 48.7411, 4.39389, 160),
('51168', 'Coolus', '31T', 599460, 5419976, 48.9247, 4.35778, 86),
('51169', 'Corbeil', '31T', 605145, 5381564, 48.5783, 4.42556, 122),
('51170', 'Corfélix', '31T', 551407, 5409598, 48.8372, 3.70056, 150),
('51171', 'Cormicy', '31T', 565197, 5469007, 49.3703, 3.89805, 90),
('51172', 'Cormontreuil', '31T', 576798, 5452849, 49.2236, 4.05472, 87),
('51173', 'Cormoyeux', '31T', 566658, 5439870, 49.1081, 3.91333, 190),
('51174', 'Corribert', '31T', 556200, 5421440, 48.9433, 3.7675, 190),
('51175', 'Corrobert', '31T', 544428, 5418246, 48.9156, 3.60639, 200),
('51176', 'Corroy', '31T', 568837, 5394622, 48.7008, 3.93555, 110),
('51177', 'Coulommes-la-Montagne', '31T', 566380, 5452899, 49.2253, 3.91167, 150),
('51178', 'Coupetz', '31T', 600054, 5408373, 48.8203, 4.36305, 120),
('51179', 'Coupéville', '31T', 619107, 5418848, 48.9111, 4.62556, 120),
('51181', 'Courcelles-Sapicourt', '31T', 561094, 5457162, 49.2642, 3.83973, 120),
('51182', 'Courcemain', '31T', 567824, 5385407, 48.6181, 3.92027, 82),
('51183', 'Courcy', '31T', 572807, 5464007, 49.3244, 4.00194, 80),
('51184', 'Courdemanges', '31T', 613384, 5394759, 48.6956, 4.54083, 105),
('51185', 'Courgivaux', '31T', 535964, 5395612, 48.7125, 3.48889, 170),
('51186', 'Courjeonnet', '31T', 561260, 5408956, 48.8306, 3.83472, 150),
('51187', 'Courlandon', '31T', 553481, 5462611, 49.3139, 3.73583, 65),
('51188', 'Courmas', '31T', 566245, 5449006, 49.1903, 3.90917, 180),
('51190', 'Courtagnon', '31T', 568999, 5444006, 49.145, 3.94611, 180),
('51191', 'Courtémont', '31T', 630105, 5443871, 49.1339, 4.78361, 140),
('51192', 'Courthiézy', '31T', 543880, 5433466, 49.0525, 3.60056, 100),
('51193', 'Courtisols', '31T', 611020, 5427176, 48.9875, 4.5175, 140),
('51194', 'Courville', '31T', 550682, 5457488, 49.2681, 3.69667, 80),
('51195', 'Couvrot', '31T', 615489, 5401752, 48.7581, 4.57139, 100),
('51196', 'Cramant', '31T', 572552, 5426447, 48.9867, 3.99167, 200),
('51197', 'La Croix-en-Champagne', '31T', 620376, 5436329, 49.0681, 4.64805, 200),
('51198', 'Crugny', '31T', 553726, 5456127, 49.2556, 3.73833, 80),
('51199', 'Cuchery', '31T', 560124, 5442266, 49.1303, 3.82417, 130),
('51200', 'Cuis', '31T', 570810, 5427537, 48.9967, 3.96805, 140),
('51202', 'Cumières', '31T', 567801, 5435961, 49.0728, 3.92833, 75),
('51203', 'Cuperly', '31T', 604541, 5435482, 49.0633, 4.43111, 120),
('51204', 'Damery', '31T', 564209, 5436073, 49.0742, 3.87917, 70),
('51205', 'Dampierre-au-Temple', '31T', 601672, 5433638, 49.0472, 4.39139, 120),
('51206', 'Dampierre-le-Château', '31T', 631322, 5430121, 49.01, 4.79583, 175),
('51208', 'Dampierre-sur-Moivre', '31T', 614322, 5416833, 48.8939, 4.55972, 105),
('51210', 'Dizy', '31T', 570796, 5435041, 49.0642, 3.96917, 90),
('51211', 'Dommartin-Dampierre', '31T', 633407, 5437246, 49.0736, 4.82667, 150),
('51212', 'Dommartin-Lettrée', '31T', 595384, 5402361, 48.7669, 4.29805, 147),
('51213', 'Dommartin-sous-Hans', '31T', 630184, 5443101, 49.1269, 4.78445, 141),
('51214', 'Dommartin-Varimont', '31T', 630472, 5426548, 48.9781, 4.78306, 160),
('51215', 'Dompremy', '31T', 628056, 5398812, 48.7292, 4.74139, 113),
('51216', 'Dontrien', '31T', 602795, 5455096, 49.24, 4.41223, 110),
('51217', 'Dormans', '31T', 546742, 5435805, 49.0733, 3.64, 80),
('51218', 'Val-de-Vière', '31T', 627333, 5408125, 48.8131, 4.73444, 120),
('51219', 'Drosnay', '31T', 619806, 5382227, 48.5817, 4.62445, 138),
('51220', 'Drouilly', '31T', 612087, 5403350, 48.7731, 4.52555, 95),
('51222', 'Éclaires', '31T', 646456, 5429666, 49.0025, 5.00249, 160),
('51223', 'Écollemont', '31T', 627677, 5386725, 48.6206, 4.7325, 135),
('51224', 'Écriennes', '31T', 623960, 5394581, 48.6919, 4.68444, 120),
('51225', 'Écueil', '31T', 569588, 5448708, 49.1872, 3.95499, 140),
('51226', 'Écury-le-Repos', '31T', 575789, 5406570, 48.8075, 4.03222, 125),
('51227', 'Écury-sur-Coole', '31T', 598031, 5416738, 48.8958, 4.3375, 88),
('51228', 'Élise-Daucourt', '31T', 636503, 5434324, 49.0467, 4.86805, 180),
('51229', 'Épense', '31T', 634187, 5425957, 48.9719, 4.83361, 170),
('51230', 'Épernay', '31T', 569892, 5432713, 49.0433, 3.9564, 80),
('51231', 'L''Épine', '31T', 607545, 5426026, 48.9778, 4.46972, 151),
('51232', 'Époye', '31T', 590025, 5460555, 49.2911, 4.23806, 95),
('51233', 'Escardes', '31T', 537835, 5393864, 48.6967, 3.51416, 180),
('51234', 'Esclavolles-Lurey', '31T', 548540, 5377982, 48.5531, 3.65777, 69),
('51235', 'Les Essarts-lès-Sézanne', '31T', 547879, 5400240, 48.7533, 3.65139, 205),
('51236', 'Les Essarts-le-Vicomte', '31T', 540910, 5389872, 48.6606, 3.55555, 190),
('51237', 'Esternay', '31T', 541179, 5397871, 48.7325, 3.56, 158),
('51238', 'Étoges', '31T', 562747, 5414562, 48.8808, 3.85584, 200),
('51239', 'Étréchy', '31T', 569135, 5415162, 48.8856, 3.94306, 160),
('51240', 'Étrepy', '31T', 632822, 5402939, 48.7653, 4.8075, 125),
('51241', 'Euvy', '31T', 575777, 5396904, 48.7206, 4.03027, 130),
('51242', 'Fagnières', '31T', 596555, 5424342, 48.9644, 4.31917, 100),
('51243', 'Faux-Fresnay', '31T', 569588, 5388486, 48.6456, 3.94472, 90),
('51244', 'Faux-Vésigneul', '31T', 602429, 5404555, 48.7856, 4.39444, 140),
('51245', 'Faverolles-et-Coëmy', '31T', 557733, 5453821, 49.2344, 3.79305, 100),
('51246', 'Favresse', '31T', 627449, 5397655, 48.7189, 4.73278, 125),
('51247', 'Fèrebrianges', '31T', 561902, 5413595, 48.8722, 3.84417, 180),
('51248', 'Fère-Champenoise', '31T', 572929, 5400634, 48.7544, 3.99222, 115),
('51249', 'Festigny', '31T', 554435, 5433467, 49.0517, 3.74501, 110),
('51250', 'Fismes', '31T', 549449, 5461955, 49.3083, 3.68027, 70),
('51251', 'Flavigny', '31T', 577650, 5425250, 48.9753, 4.06111, 95),
('51252', 'Fleury-la-Rivière', '31T', 564566, 5438517, 49.0961, 3.88445, 180),
('51253', 'Florent-en-Argonne', '31T', 642621, 5444366, 49.1356, 4.95527, 230),
('51254', 'Fontaine-Denis-Nuisy', '31T', 550661, 5386091, 48.6258, 3.6875, 150),
('51255', 'Fontaine-en-Dormois', '31T', 625079, 5455402, 49.2386, 4.71833, 140),
('51256', 'Fontaine-sur-Ay', '31T', 578296, 5437119, 49.0819, 4.07223, 90),
('51258', 'La Forestière', '31T', 543654, 5389491, 48.6569, 3.59278, 180),
('51259', 'Francheville', '31T', 612989, 5416311, 48.8894, 4.54139, 100),
('51260', 'Le Fresne', '31T', 620227, 5418841, 48.9108, 4.64084, 120),
('51261', 'Fresne-lès-Reims', '31T', 579746, 5465771, 49.3394, 4.09777, 95),
('51262', 'Frignicourt', '31T', 617071, 5395452, 48.7011, 4.59111, 104),
('51263', 'Fromentières', '31T', 551802, 5415406, 48.8894, 3.70667, 217),
('51264', 'Le Gault-Soigny', '31T', 543475, 5407307, 48.8172, 3.59222, 194),
('51265', 'Gaye', '31T', 559210, 5392690, 48.6844, 3.80445, 98),
('51266', 'Germaine', '31T', 575224, 5440690, 49.1144, 4.03083, 210),
('51267', 'Germigny', '31T', 563079, 5455022, 49.2447, 3.86667, 140),
('51268', 'Germinon', '31T', 584705, 5414574, 48.8783, 4.15528, 110),
('51269', 'Giffaumont-Champaubert', '31T', 629298, 5379440, 48.5547, 4.75222, 135),
('51270', 'Gigny-Bussy', '31T', 615632, 5384889, 48.6064, 4.56861, 130),
('51271', 'Gionges', '31T', 571751, 5420754, 48.9356, 3.97972, 210),
('51272', 'Givry-en-Argonne', '31T', 638273, 5423617, 48.95, 4.88862, 170),
('51273', 'Givry-lès-Loisy', '31T', 566804, 5415906, 48.8925, 3.91139, 200),
('51274', 'Gizaucourt', '31T', 630540, 5434891, 49.0531, 4.78667, 150),
('51275', 'Glannes', '31T', 613275, 5396115, 48.7078, 4.53972, 109),
('51276', 'Gourgançon', '31T', 575272, 5393439, 48.6894, 4.02278, 121),
('51277', 'Sainte-Marie-du-Lac-Nuisement', '31T', 630928, 5385193, 48.6061, 4.77611, 135),
('51278', 'Les Grandes-Loges', '31T', 594533, 5435581, 49.0658, 4.29417, 100),
('51279', 'Granges-sur-Aube', '31T', 562934, 5381428, 48.5828, 3.85333, 80),
('51280', 'Gratreuil', '31T', 623481, 5456324, 49.2472, 4.69667, 170),
('51281', 'Grauves', '31T', 569258, 5424892, 48.9731, 3.94639, 147),
('51282', 'Gueux', '31T', 566147, 5455460, 49.2483, 3.90889, 100),
('51283', 'Hans', '31T', 627633, 5441188, 49.1103, 4.74889, 140),
('51284', 'Haussignémont', '31T', 628818, 5397686, 48.7189, 4.75139, 130),
('51285', 'Haussimont', '31T', 585740, 5400167, 48.7486, 4.16638, 160),
('51286', 'Hauteville', '31T', 630292, 5388762, 48.6383, 4.76861, 144),
('51287', 'Hautvillers', '31T', 569066, 5437058, 49.0825, 3.94584, 190),
('51288', 'Heiltz-le-Hutier', '31T', 630160, 5394443, 48.6894, 4.76861, 125),
('51289', 'Heiltz-le-Maurupt', '31T', 633303, 5405916, 48.7919, 4.815, 117),
('51290', 'Heiltz-l''Évêque', '31T', 627867, 5404430, 48.7797, 4.74056, 110),
('51291', 'Hermonville', '31T', 566090, 5465188, 49.3358, 3.90972, 105),
('51292', 'Herpont', '31T', 626643, 5428591, 48.9972, 4.7314, 170),
('51293', 'Heutrégiville', '31T', 591696, 5464537, 49.3267, 4.26195, 94),
('51294', 'Hourges', '31T', 556001, 5459084, 49.2819, 3.77, 120),
('51295', 'Huiron', '31T', 613267, 5395497, 48.7022, 4.53945, 119),
('51296', 'Humbauville', '31T', 604262, 5390474, 48.6586, 4.41583, 134),
('51298', 'Igny-Comblizy', '31T', 552278, 5429678, 49.0178, 3.715, 209),
('51299', 'Isles-sur-Suippe', '31T', 587202, 5467799, 49.3567, 4.20083, 75),
('51300', 'Isle-sur-Marne', '31T', 624434, 5388876, 48.6406, 4.68916, 110),
('51301', 'Isse', '31T', 588141, 5435506, 49.0661, 4.20667, 80),
('51302', 'Les Istres-et-Bury', '31T', 579851, 5426300, 48.9844, 4.09139, 84),
('51303', 'Jâlons', '31T', 586779, 5429184, 49.0094, 4.18667, 75),
('51304', 'Janvilliers', '31T', 547622, 5416018, 48.8953, 3.64973, 220),
('51305', 'Janvry', '31T', 563907, 5455094, 49.2453, 3.87806, 130),
('51306', 'Joiselle', '31T', 538045, 5402049, 48.7703, 3.51777, 150),
('51307', 'Jonchery-sur-Suippe', '31T', 607498, 5446258, 49.1597, 4.47445, 125),
('51308', 'Jonchery-sur-Vesle', '31T', 559228, 5459581, 49.2861, 3.81444, 86),
('51309', 'Jonquery', '31T', 557694, 5444000, 49.1461, 3.79111, 140),
('51310', 'Jouy-lès-Reims', '31T', 567748, 5451835, 49.2156, 3.93027, 130),
('51311', 'Jussecourt-Minecourt', '31T', 631209, 5405558, 48.7892, 4.78639, 113),
('51312', 'Juvigny', '31T', 592346, 5430417, 49.0197, 4.26306, 84),
('51313', 'Lachy', '31T', 552110, 5401977, 48.7686, 3.70917, 190),
('51314', 'Lagery', '31T', 554242, 5450975, 49.2092, 3.74472, 160),
('51315', 'Landricourt', '31T', 633479, 5386489, 48.6172, 4.81112, 130),
('51316', 'Larzicourt', '31T', 626164, 5388421, 48.6361, 4.7125, 116),
('51317', 'Laval-sur-Tourbe', '31T', 623002, 5444234, 49.1386, 4.6864, 143),
('51318', 'Lavannes', '31T', 585116, 5463102, 49.3147, 4.17111, 113),
('51319', 'Lenharrée', '31T', 581897, 5403229, 48.7767, 4.11472, 150),
('51320', 'Leuvrigny', '31T', 555431, 5435298, 49.0681, 3.75889, 150),
('51321', 'Lhéry', '31T', 555718, 5451113, 49.2103, 3.765, 170),
('51322', 'Lignon', '31T', 612911, 5382641, 48.5867, 4.53111, 125),
('51323', 'Linthelles', '31T', 560460, 5396193, 48.7158, 3.82194, 101),
('51324', 'Linthes', '31T', 562341, 5397943, 48.7314, 3.84778, 105),
('51325', 'Lisse-en-Champagne', '31T', 620620, 5408161, 48.8147, 4.64305, 126),
('51326', 'Livry-Louvercy', '31T', 595456, 5440909, 49.1136, 4.30806, 102),
('51327', 'Loisy-en-Brie', '31T', 566084, 5414848, 48.8831, 3.90139, 200),
('51328', 'Loisy-sur-Marne', '31T', 613527, 5401835, 48.7592, 4.54472, 95),
('51329', 'Loivre', '31T', 571182, 5466363, 49.3458, 3.98001, 70),
('51331', 'Louvois', '31T', 581407, 5439356, 49.1017, 4.11527, 125),
('51333', 'Ludes', '31T', 578747, 5445279, 49.1553, 4.07999, 150),
('51334', 'Luxémont-et-Villotte', '31T', 620289, 5395057, 48.6969, 4.63472, 115),
('51336', 'Maffrécourt', '31T', 632617, 5442263, 49.1189, 4.8175, 150),
('51337', 'Magneux', '31T', 552562, 5461614, 49.305, 3.72305, 90),
('51338', 'Mailly-Champagne', '31T', 581118, 5445251, 49.1547, 4.1125, 190),
('51339', 'Mairy-sur-Marne', '31T', 603495, 5415293, 48.8819, 4.41166, 85),
('51340', 'Maisons-en-Champagne', '31T', 609975, 5400714, 48.7497, 4.49611, 101),
('51341', 'Malmy', '31T', 632078, 5448676, 49.1767, 4.81222, 130),
('51342', 'Mancy', '31T', 568453, 5425901, 48.9822, 3.93556, 120),
('51343', 'Marcilly-sur-Seine', '31T', 552308, 5378479, 48.5572, 3.70889, 71),
('51344', 'Mardeuil', '31T', 568091, 5433834, 49.0536, 3.93194, 80),
('51345', 'Mareuil-en-Brie', '31T', 554557, 5423061, 48.9581, 3.74528, 208),
('51346', 'Mareuil-le-Port', '31T', 554422, 5436802, 49.0817, 3.74528, 80),
('51347', 'Mareuil-sur-Ay', '31T', 575854, 5433162, 49.0467, 4.03805, 80),
('51348', 'Marfaux', '31T', 565122, 5446337, 49.1664, 3.89333, 150),
('51349', 'Margerie-Hancourt', '31T', 612347, 5379077, 48.5547, 4.5225, 160),
('51350', 'Margny', '31T', 547363, 5420061, 48.9317, 3.64666, 200),
('51351', 'Marigny', '31T', 563919, 5390333, 48.6628, 3.86806, 88),
('51352', 'Marolles', '31T', 619585, 5397420, 48.7183, 4.62584, 109),
('51353', 'Marsangis', '31T', 561777, 5384164, 48.6075, 3.83805, 77),
('51354', 'Marson', '31T', 612000, 5418855, 48.9125, 4.52861, 116),
('51355', 'Massiges', '31T', 627513, 5449866, 49.1883, 4.75, 135),
('51356', 'Matignicourt-Goncourt', '31T', 623917, 5392850, 48.6764, 4.68334, 115),
('51357', 'Matougues', '31T', 591053, 5427492, 48.9936, 4.24473, 83),
('51358', 'Maurupt-le-Montois', '31T', 636047, 5401348, 48.7503, 4.85083, 144),
('51359', 'Mécringes', '31T', 537280, 5412697, 48.8661, 3.50833, 130),
('51360', 'Le Meix-Saint-Epoing', '31T', 547869, 5394249, 48.6994, 3.65056, 160),
('51361', 'Le Meix-Tiercelin', '31T', 604627, 5388473, 48.6406, 4.42028, 140),
('51362', 'Merfy', '31T', 568851, 5460712, 49.2953, 3.94694, 130),
('51363', 'Merlaut', '31T', 622483, 5402302, 48.7617, 4.66667, 105),
('51364', 'Méry-Prémecy', '31T', 562860, 5452951, 49.2261, 3.86334, 140),
('51365', 'Les Mesneux', '31T', 570008, 5452358, 49.22, 3.96139, 93),
('51367', 'Le Mesnil-sur-Oger', '31T', 574888, 5422031, 48.9467, 4.02278, 150),
('51368', 'Minaucourt-le-Mesnil-lès-Hurlus', '31T', 625047, 5447895, 49.1711, 4.71556, 140),
('51370', 'Moiremont', '31T', 637803, 5444120, 49.1344, 4.88917, 160),
('51371', 'Moivre', '31T', 621681, 5420294, 48.9236, 4.66111, 123),
('51372', 'Moncetz-Longevas', '31T', 604559, 5418309, 48.9089, 4.42694, 86),
('51373', 'Moncetz-l''Abbaye', '31T', 621998, 5389811, 48.6494, 4.65638, 111),
('51374', 'Mondement-Montgivroux', '31T', 557111, 5403971, 48.7861, 3.7775, 200),
('51375', 'Montbré', '31T', 575956, 5449379, 49.1925, 4.0425, 130),
('51376', 'Montgenost', '31T', 543973, 5382762, 48.5964, 3.59639, 150),
('51377', 'Montépreux', '31T', 583737, 5396183, 48.7131, 4.13833, 180),
('51378', 'Monthelon', '31T', 568499, 5427075, 48.9928, 3.93638, 170),
('51379', 'Montigny-sur-Vesle', '31T', 558287, 5462567, 49.3131, 3.80194, 100),
('51380', 'Montmirail', '31T', 539517, 5413299, 48.8714, 3.53889, 190),
('51381', 'Montmort-Lucy', '31T', 559294, 5419372, 48.9244, 3.80944, 201),
('51382', 'Mont-sur-Courville', '31T', 549619, 5456614, 49.2603, 3.68195, 150),
('51384', 'Morangis', '31T', 567123, 5424897, 48.9733, 3.91722, 201),
('51386', 'Morsains', '31T', 539208, 5405052, 48.7972, 3.53389, 195),
('51387', 'Moslins', '31T', 567820, 5424442, 48.9692, 3.92666, 150),
('51388', 'Mourmelon-le-Grand', '31T', 599314, 5443974, 49.1406, 4.36167, 114),
('51389', 'Mourmelon-le-Petit', '31T', 595566, 5442734, 49.13, 4.31, 105),
('51390', 'Moussy', '31T', 567392, 5429563, 49.0153, 3.92167, 100),
('51391', 'Muizon', '31T', 564756, 5458501, 49.2758, 3.89027, 75),
('51392', 'Mutigny', '31T', 574993, 5435313, 49.0661, 4.02667, 220),
('51393', 'Nanteuil-la-Forêt', '31T', 567358, 5442379, 49.1306, 3.92334, 180),
('51395', 'Nesle-la-Reposte', '31T', 540972, 5386938, 48.6342, 3.55611, 170),
('51396', 'Nesle-le-Repons', '31T', 552043, 5433104, 49.0486, 3.71222, 140),
('51397', 'La Neuville-aux-Bois', '31T', 637917, 5425647, 48.9683, 4.88444, 160),
('51398', 'La Neuville-aux-Larris', '31T', 561425, 5443700, 49.1431, 3.84222, 245),
('51399', 'La Neuville-au-Pont', '31T', 635684, 5442893, 49.1239, 4.85973, 140),
('51402', 'Neuvy', '31T', 537939, 5399608, 48.7483, 3.51611, 148),
('51403', 'Nogent-l''Abbesse', '31T', 584147, 5456478, 49.2553, 4.15639, 185),
('51404', 'Noirlieu', '31T', 632670, 5423047, 48.9461, 4.81194, 180),
('51406', 'Norrois', '31T', 619737, 5392172, 48.6711, 4.62638, 110),
('51407', 'La Noue', '31T', 544927, 5399197, 48.7442, 3.61112, 190),
('51409', 'Nuisement-sur-Coole', '31T', 596115, 5414481, 48.8758, 4.31084, 95),
('51411', 'Oger', '31T', 574079, 5423225, 48.9575, 4.01195, 130),
('51412', 'Ognes', '31T', 566733, 5394566, 48.7006, 3.90695, 95),
('51413', 'Oiry', '31T', 576884, 5430644, 49.0239, 4.05166, 85),
('51414', 'Olizy', '31T', 555119, 5444221, 49.1483, 3.75583, 200),
('51415', 'Omey', '31T', 609638, 5411642, 48.8481, 4.49445, 100),
('51416', 'Orbais-l''Abbaye', '31T', 551169, 5422195, 48.9506, 3.69889, 150),
('51417', 'Orconte', '31T', 627878, 5392259, 48.6703, 4.73694, 120),
('51418', 'Ormes', '31T', 569781, 5454269, 49.2372, 3.95861, 93),
('51419', 'Outines', '31T', 621796, 5379273, 48.5547, 4.65055, 136),
('51420', 'Outrepont', '31T', 623569, 5403036, 48.7681, 4.68166, 104),
('51421', 'Oyes', '31T', 557594, 5406663, 48.8103, 3.78445, 140),
('51422', 'Pargny-lès-Reims', '31T', 567136, 5452260, 49.2194, 3.92194, 150),
('51423', 'Pargny-sur-Saulx', '31T', 634850, 5403544, 48.7703, 4.83528, 120),
('51424', 'Passavant-en-Argonne', '31T', 646598, 5432017, 49.0236, 5.00528, 171),
('51425', 'Passy-Grigny', '31T', 549490, 5441635, 49.1256, 3.67833, 100),
('51426', 'Péas', '31T', 557199, 5399340, 48.7444, 3.77805, 130),
('51428', 'Les Petites-Loges', '31T', 589452, 5443558, 49.1383, 4.2264, 109),
('51429', 'Pévy', '31T', 561298, 5462353, 49.3108, 3.84333, 130),
('51430', 'Pierre-Morains', '31T', 575093, 5409835, 48.8369, 4.02334, 150),
('51431', 'Pierry', '31T', 568686, 5430073, 49.0197, 3.93945, 90),
('51432', 'Pleurs', '31T', 564130, 5393362, 48.69, 3.87139, 90),
('51433', 'Plichancourt', '31T', 623069, 5400708, 48.7472, 4.67417, 106),
('51434', 'Plivot', '31T', 578315, 5429985, 49.0178, 4.07111, 75),
('51435', 'Pocancy', '31T', 583877, 5422221, 48.9472, 4.14556, 84),
('51436', 'Pogny', '31T', 608821, 5412769, 48.8583, 4.48361, 100),
('51437', 'Poilly', '31T', 559738, 5451742, 49.2156, 3.82028, 110),
('51438', 'Poix', '31T', 618919, 5424745, 48.9642, 4.62472, 170),
('51439', 'Pomacle', '31T', 583282, 5465545, 49.3369, 4.14639, 85),
('51440', 'Pontfaverger-Moronvilliers', '31T', 595989, 5461490, 49.2986, 4.32028, 100),
('51441', 'Ponthion', '31T', 625937, 5402193, 48.76, 4.71362, 105),
('51442', 'Possesse', '31T', 632414, 5416708, 48.8892, 4.80639, 135),
('51443', 'Potangis', '31T', 547483, 5381802, 48.5875, 3.64389, 81),
('51444', 'Pouillon', '31T', 569087, 5462847, 49.3144, 3.95056, 150),
('51445', 'Pourcy', '31T', 566755, 5445275, 49.1567, 3.91555, 160),
('51446', 'Pringy', '31T', 611455, 5404326, 48.7819, 4.51722, 95),
('51447', 'Prosnes', '31T', 594132, 5449535, 49.1914, 4.29194, 110),
('51448', 'Prouilly', '31T', 561998, 5461187, 49.3003, 3.85278, 100),
('51449', 'Prunay', '31T', 586168, 5450084, 49.1975, 4.18278, 90),
('51450', 'Puisieulx', '31T', 581196, 5449577, 49.1936, 4.11444, 90),
('51451', 'Queudes', '31T', 555803, 5389783, 48.6586, 3.75777, 85),
('51452', 'Rapsécourt', '31T', 631143, 5431692, 49.0242, 4.79389, 150),
('51453', 'Recy', '31T', 596100, 5427114, 48.9894, 4.31361, 80),
('51454', 'Reims', '31T', 575047, 5456655, 49.2581, 4.03138, 83),
('51455', 'Reims-la-Brûlée', '31T', 622747, 5397674, 48.72, 4.66888, 110),
('51456', 'Remicourt', '31T', 637333, 5423779, 48.9517, 4.87584, 170),
('51457', 'Reuil', '31T', 558518, 5436936, 49.0825, 3.80138, 80),
('51458', 'Reuves', '31T', 558977, 5405102, 48.7961, 3.80306, 145),
('51459', 'Réveillon', '31T', 533505, 5400105, 48.7531, 3.45583, 177),
('51460', 'Rieux', '31T', 536782, 5410964, 48.8506, 3.50138, 150),
('51461', 'Rilly-la-Montagne', '31T', 576301, 5446388, 49.1656, 4.04666, 160),
('51463', 'Les Rivières-Henruel', '31T', 615212, 5390379, 48.6558, 4.56445, 120),
('51464', 'Romain', '31T', 556067, 5464458, 49.3303, 3.77166, 110),
('51465', 'Romery', '31T', 566958, 5438576, 49.0964, 3.91722, 170),
('51466', 'Romigny', '31T', 556226, 5446919, 49.1725, 3.77139, 220),
('51468', 'Rosnay', '31T', 562804, 5456100, 49.2544, 3.86306, 126),
('51469', 'Rouffy', '31T', 580704, 5420723, 48.9342, 4.10194, 90),
('51470', 'Rouvroy-Ripont', '31T', 626000, 5454033, 49.2261, 4.73055, 130),
('51471', 'Sacy', '31T', 569191, 5449753, 49.1967, 3.94973, 140),
('51472', 'Saint-Amand-sur-Fion', '31T', 617832, 5407855, 48.8125, 4.605, 110),
('51473', 'Saint-Bon', '31T', 534046, 5391771, 48.6781, 3.4625, 183),
('51474', 'Saint-Brice-Courcelles', '31T', 571767, 5457044, 49.2619, 3.98638, 75),
('51475', 'Saint-Chéron', '31T', 614847, 5388209, 48.6364, 4.55889, 130),
('51476', 'Saint-Étienne-au-Temple', '31T', 603991, 5431271, 49.0256, 4.42251, 127),
('51477', 'Saint-Étienne-sur-Suippe', '31T', 579588, 5471143, 49.3878, 4.09667, 70),
('51478', 'Saint-Eulien', '31T', 638577, 5394057, 48.6842, 4.88278, 145),
('51479', 'Saint-Euphraise-et-Clairizet', '31T', 564556, 5451457, 49.2125, 3.88639, 140),
('51480', 'Sainte-Gemme', '31T', 548947, 5443421, 49.1417, 3.67111, 170),
('51482', 'Saint-Germain-la-Ville', '31T', 606139, 5415528, 48.8836, 4.44778, 87),
('51483', 'Saint-Gibrien', '31T', 595176, 5425306, 48.9733, 4.30056, 850),
('51484', 'Saint-Gilles', '31T', 549256, 5458772, 49.2797, 3.67723, 80),
('51485', 'Saint-Hilaire-au-Temple', '31T', 601206, 5434710, 49.0569, 4.38528, 118),
('51486', 'Saint-Hilaire-le-Grand', '31T', 606663, 5447509, 49.1711, 4.46333, 120),
('51487', 'Saint-Hilaire-le-Petit', '31T', 601067, 5458863, 49.2742, 4.38944, 110),
('51488', 'Saint-Imoges', '31T', 571197, 5440142, 49.11, 3.97556, 272),
('51489', 'Saint-Jean-devant-Possesse', '31T', 631931, 5414719, 48.8714, 4.79916, 131),
('51490', 'Saint-Jean-sur-Moivre', '31T', 616090, 5418012, 48.9042, 4.58417, 110),
('51491', 'Saint-Jean-sur-Tourbe', '31T', 622561, 5443081, 49.1283, 4.68, 150),
('51492', 'Saint-Just-Sauvage', '31T', 557946, 5378349, 48.5556, 3.78527, 75),
('51493', 'Saint-Léonard', '31T', 579899, 5452492, 49.22, 4.09722, 82),
('51495', 'Saint-Loup', '31T', 559758, 5398779, 48.7392, 3.81278, 110),
('51496', 'Saint-Lumier-en-Champagne', '31T', 619583, 5406101, 48.7964, 4.62833, 117),
('51497', 'Saint-Lumier-la-Populeuse', '31T', 631782, 5398559, 48.7261, 4.79195, 130),
('51498', 'Saint-Mard-sur-Auve', '31T', 626200, 5432845, 49.0356, 4.72666, 160),
('51499', 'Saint-Mard-lès-Rouffy', '31T', 581851, 5421635, 48.9422, 4.11778, 90),
('51500', 'Saint-Mard-sur-le-Mont', '31T', 635260, 5420329, 48.9211, 4.8464, 170),
('51501', 'Sainte-Marie-à-Py', '31T', 609265, 5455190, 49.2397, 4.50111, 120),
('51502', 'Saint-Martin-aux-Champs', '31T', 609263, 5408916, 48.8236, 4.48861, 90),
('51503', 'Saint-Martin-l''Heureux', '31T', 602410, 5456231, 49.2503, 4.40723, 110),
('51504', 'Saint-Martin-sur-le-Pré', '31T', 598036, 5425696, 48.9764, 4.33973, 83),
('51505', 'Saint-Masmes', '31T', 591801, 5463056, 49.3133, 4.26305, 91),
('51506', 'Saint-Memmie', '31T', 601214, 5423127, 48.9528, 4.3825, 90),
('51507', 'Sainte-Menehould', '31T', 638591, 5439351, 49.0914, 4.89833, 150),
('51508', 'Saint-Ouen-Domprot', '31T', 603727, 5385090, 48.6103, 4.40722, 120),
('51509', 'Saint-Pierre', '31T', 591098, 5422273, 48.9467, 4.24417, 88),
('51510', 'Saint-Quentin-les-Marais', '31T', 620678, 5404518, 48.7819, 4.64277, 120),
('51511', 'Saint-Quentin-le-Verger', '31T', 555276, 5385208, 48.6175, 3.75001, 90),
('51512', 'Saint-Quentin-sur-Coole', '31T', 597338, 5412093, 48.8542, 4.32694, 105),
('51513', 'Saint-Remy-en-Bouzemont-Saint-Genest-et-Isson', '31T', 621127, 5387506, 48.6289, 4.64389, 115),
('51514', 'Saint-Remy-sous-Broyes', '31T', 557063, 5394706, 48.7028, 3.77556, 105),
('51515', 'Saint-Remy-sur-Bussy', '31T', 615531, 5435083, 49.0578, 4.58139, 144),
('51516', 'Saint-Saturnin', '31T', 566560, 5384929, 48.6139, 3.90305, 82),
('51517', 'Saint-Souplet-sur-Py', '31T', 606744, 5454831, 49.2369, 4.46639, 120),
('51518', 'Saint-Thierry', '31T', 570270, 5461874, 49.3056, 3.96666, 133),
('51519', 'Saint-Thomas-en-Argonne', '31T', 635938, 5449851, 49.1864, 4.86555, 160),
('51520', 'Saint-Utin', '31T', 610984, 5378556, 48.5503, 4.50389, 120),
('51521', 'Saint-Vrain', '31T', 632740, 5395183, 48.6956, 4.80388, 135),
('51522', 'Sapignicourt', '31T', 633655, 5390262, 48.6511, 4.81472, 125),
('51523', 'Sarcy', '31T', 560132, 5450789, 49.2069, 3.82555, 110),
('51524', 'Saron-sur-Aube', '31T', 554057, 5379885, 48.5697, 3.73278, 75),
('51525', 'Sarry', '31T', 603054, 5419331, 48.9183, 4.40667, 85),
('51526', 'Saudoy', '31T', 552750, 5392471, 48.6831, 3.71666, 120),
('51527', 'Savigny-sur-Ardres', '31T', 556995, 5454832, 49.2436, 3.78306, 100),
('51528', 'Scrupt', '31T', 631131, 5397555, 48.7172, 4.78278, 130),
('51529', 'Selles', '31T', 593550, 5462313, 49.3064, 4.28694, 90),
('51530', 'Sept-Saulx', '31T', 591289, 5445194, 49.1528, 4.25195, 100),
('51531', 'Sermaize-les-Bains', '31T', 640339, 5405347, 48.7853, 4.91055, 130),
('51532', 'Sermiers', '31T', 571856, 5445556, 49.1586, 3.98555, 160),
('51533', 'Servon-Melzicourt', '31T', 634157, 5453144, 49.2164, 4.84223, 130),
('51534', 'Serzy-et-Prin', '31T', 555773, 5455654, 49.2511, 3.76639, 110),
('51535', 'Sézanne', '31T', 553284, 5396584, 48.72, 3.72445, 130),
('51536', 'Sillery', '31T', 582543, 5450214, 49.1992, 4.13306, 92),
('51537', 'Sivry-Ante', '31T', 636850, 5429328, 49.0017, 4.87111, 170),
('51538', 'Sogny-aux-Moulins', '31T', 602356, 5417434, 48.9014, 4.39667, 90),
('51539', 'Sogny-en-l''Angle', '31T', 632434, 5408120, 48.8119, 4.80389, 116),
('51542', 'Soizy-aux-Bois', '31T', 553619, 5406407, 48.8083, 3.73028, 196),
('51543', 'Somme-Bionne', '31T', 625907, 5439480, 49.0953, 4.72472, 160),
('51544', 'Sommepy-Tahure', '31T', 613282, 5456568, 49.2514, 4.55666, 130),
('51545', 'Sommesous', '31T', 588228, 5399124, 48.7389, 4.2, 160),
('51546', 'Somme-Suippe', '31T', 615330, 5441783, 49.1181, 4.58055, 147),
('51547', 'Somme-Tourbe', '31T', 621814, 5440161, 49.1022, 4.66888, 160),
('51548', 'Somme-Vesle', '31T', 616410, 5427039, 48.9853, 4.59111, 154),
('51549', 'Somme-Yèvre', '31T', 628754, 5423419, 48.9503, 4.7586, 180),
('51550', 'Sompuis', '31T', 601453, 5393047, 48.6822, 4.37833, 150),
('51551', 'Somsois', '31T', 610966, 5383590, 48.5956, 4.50499, 130),
('51552', 'Songy', '31T', 610124, 5406647, 48.8031, 4.49973, 97),
('51553', 'Souain-Perthes-lès-Hurlus', '31T', 612422, 5449167, 49.185, 4.54278, 140),
('51555', 'Soudé', '31T', 596559, 5399355, 48.7397, 4.31333, 160),
('51556', 'Soudron', '31T', 588092, 5410334, 48.8397, 4.20055, 116),
('51557', 'Soulanges', '31T', 612904, 5405375, 48.7911, 4.53722, 100),
('51558', 'Soulières', '31T', 567927, 5417340, 48.9053, 3.92694, 230),
('51559', 'Suippes', '31T', 611735, 5443099, 49.1306, 4.53167, 140),
('51560', 'Suizy-le-Franc', '31T', 553771, 5422312, 48.9514, 3.73444, 154),
('51562', 'Taissy', '31T', 579705, 5451902, 49.2147, 4.09444, 87),
('51563', 'Talus-Saint-Prix', '31T', 554754, 5409228, 48.8336, 3.74611, 160),
('51564', 'Tauxières-Mutry', '31T', 580491, 5438231, 49.0917, 4.1025, 114),
('51565', 'Thaas', '31T', 564773, 5388984, 48.6506, 3.87944, 85),
('51566', 'Thibie', '31T', 589012, 5420417, 48.9303, 4.21528, 95),
('51567', 'Thiéblemont-Farémont', '31T', 627438, 5394535, 48.6908, 4.73167, 125),
('51568', 'Thil', '31T', 570115, 5462952, 49.3153, 3.96472, 110),
('51569', 'Thillois', '31T', 569431, 5456365, 49.2561, 3.95416, 90),
('51570', 'Le Thoult-Trosnay', '31T', 550598, 5411165, 48.8514, 3.68973, 140),
('51571', 'Val-de-Vesle', '31T', 589183, 5447631, 49.175, 4.22361, 92),
('51572', 'Tilloy-et-Bellay', '31T', 618015, 5430903, 49.0197, 4.61416, 180),
('51573', 'Tinqueux', '31T', 572084, 5456029, 49.2528, 3.99056, 87),
('51576', 'Tours-sur-Marne', '31T', 581941, 5433465, 49.0486, 4.12139, 80),
('51577', 'Tramery', '31T', 558595, 5452656, 49.2239, 3.80472, 100),
('51578', 'Trécon', '31T', 579444, 5413539, 48.8697, 4.08334, 110),
('51579', 'Tréfols', '31T', 536582, 5404231, 48.79, 3.49806, 160),
('51580', 'Trépail', '31T', 586202, 5440078, 49.1075, 4.1811, 164),
('51581', 'Treslon', '31T', 559930, 5454493, 49.2403, 3.82333, 120),
('51582', 'Trigny', '31T', 565166, 5461440, 49.3022, 3.89639, 140),
('51583', 'Trois-Fontaines-l''Abbaye', '31T', 643467, 5398012, 48.7186, 4.95056, 163),
('51584', 'Trois-Puits', '31T', 575894, 5450922, 49.2064, 4.04194, 120),
('51585', 'Troissy', '31T', 551888, 5436623, 49.0803, 3.71055, 75),
('51586', 'Unchair', '31T', 554377, 5459902, 49.2894, 3.74778, 110),
('51587', 'Vadenay', '31T', 602211, 5436335, 49.0714, 4.39944, 117),
('51588', 'Valmy', '31T', 629379, 5438479, 49.0856, 4.77194, 170),
('51589', 'Vanault-le-Châtel', '31T', 626734, 5413857, 48.8647, 4.72806, 140),
('51590', 'Vanault-les-Dames', '31T', 629904, 5411644, 48.8442, 4.77056, 140),
('51591', 'Vandeuil', '31T', 557618, 5459008, 49.2811, 3.79222, 130),
('51592', 'Vandières', '31T', 553887, 5439668, 49.1075, 3.73833, 100),
('51594', 'Vassimont-et-Chapelaine', '31T', 584040, 5401871, 48.7642, 4.14361, 155),
('51595', 'Vatry', '31T', 591346, 5408316, 48.8211, 4.24444, 122),
('51596', 'Vauchamps', '31T', 545130, 5414422, 48.8811, 3.61555, 220),
('51597', 'Vauciennes', '31T', 564646, 5433360, 49.0497, 3.88472, 190),
('51598', 'Vauclerc', '31T', 622162, 5396395, 48.7086, 4.66056, 115),
('51599', 'Vaudemange', '31T', 589494, 5438431, 49.0922, 4.22583, 110),
('51600', 'Vaudesincourt', '31T', 602548, 5453145, 49.2225, 4.40833, 110),
('51601', 'Vavray-le-Grand', '31T', 625451, 5406538, 48.7992, 4.70833, 130),
('51602', 'Vavray-le-Petit', '31T', 625964, 5407322, 48.8061, 4.71556, 125),
('51603', 'Vélye', '31T', 582570, 5415654, 48.8883, 4.12639, 97),
('51604', 'Ventelay', '31T', 558074, 5465591, 49.3403, 3.79945, 90),
('51605', 'Venteuil', '31T', 561541, 5436907, 49.0819, 3.84277, 150),
('51607', 'Verdon', '31T', 545476, 5421960, 48.9489, 3.62111, 180),
('51608', 'Vernancourt', '31T', 633801, 5413219, 48.8575, 4.82416, 130),
('51609', 'Verneuil', '31T', 549135, 5438296, 49.0956, 3.67306, 70),
('51610', 'Verrières', '31T', 639311, 5436526, 49.0658, 4.90722, 155),
('51611', 'Vert-Toulon', '31T', 566908, 5410657, 48.8453, 3.91195, 145),
('51612', 'Vertus', '31T', 573767, 5417569, 48.9067, 4.00667, 110),
('51613', 'Verzenay', '31T', 583622, 5445783, 49.1592, 4.14694, 170),
('51614', 'Verzy', '31T', 584897, 5444567, 49.1481, 4.16417, 180),
('51616', 'Vésigneul-sur-Marne', '31T', 607098, 5414372, 48.8731, 4.46055, 87),
('51617', 'La Veuve', '31T', 596427, 5431691, 49.0306, 4.31917, 94),
('51618', 'Le Vézier', '31T', 533721, 5404954, 48.7967, 3.45917, 150),
('51619', 'Le Vieil-Dampierre', '31T', 638022, 5427132, 48.9817, 4.88638, 175),
('51620', 'Vienne-la-Ville', '31T', 635662, 5447898, 49.1689, 4.86111, 125),
('51621', 'Vienne-le-Château', '31T', 637708, 5450359, 49.1906, 4.89001, 129),
('51622', 'Ville-Dommange', '31T', 568233, 5450266, 49.2014, 3.93667, 160),
('51623', 'Ville-en-Selve', '31T', 578874, 5442100, 49.1267, 4.08111, 218),
('51624', 'Ville-en-Tardenois', '31T', 558482, 5447992, 49.1819, 3.80249, 150),
('51625', 'Villeneuve-la-Lionne', '31T', 533535, 5401989, 48.77, 3.45639, 167),
('51626', 'La Villeneuve-lès-Charleville', '31T', 551069, 5406383, 48.8083, 3.69555, 210),
('51627', 'Villeneuve-Renneville-Chevigny', '31T', 577778, 5418982, 48.9189, 4.06166, 95),
('51628', 'Villeneuve-Saint-Vistre-et-Villevotte', '31T', 556116, 5387192, 48.6353, 3.76167, 80),
('51629', 'Villers-Allerand', '31T', 574741, 5446428, 49.1661, 4.02528, 182),
('51630', 'Villers-aux-Bois', '31T', 568582, 5420406, 48.9328, 3.93639, 220),
('51632', 'Villers-en-Argonne', '31T', 641609, 5431641, 49.0214, 4.93695, 150),
('51633', 'Villers-Franqueux', '31T', 568784, 5464480, 49.3292, 3.94667, 100),
('51634', 'Villers-le-Château', '31T', 592904, 5423754, 48.9597, 4.26917, 80),
('51635', 'Villers-le-Sec', '31T', 636220, 5408489, 48.8144, 4.85555, 135),
('51636', 'Villers-Marmery', '31T', 587311, 5443091, 49.1344, 4.19695, 141),
('51637', 'Villers-sous-Châtillon', '31T', 558320, 5438416, 49.0958, 3.79888, 140),
('51638', 'Villeseneux', '31T', 584137, 5410365, 48.8406, 4.14667, 110),
('51639', 'La Ville-sous-Orbais', '31T', 549672, 5423509, 48.9625, 3.67861, 135),
('51640', 'Ville-sur-Tourbe', '31T', 630126, 5449866, 49.1878, 4.78584, 125),
('51641', 'Villevenard', '31T', 558695, 5408650, 48.8281, 3.79973, 145),
('51642', 'Villiers-aux-Corneilles', '31T', 550156, 5380682, 48.5772, 3.68, 75),
('51643', 'Vinay', '31T', 565794, 5428988, 49.0103, 3.89972, 110),
('51644', 'Vincelles', '31T', 546948, 5437845, 49.0917, 3.64305, 90),
('51645', 'Vindey', '31T', 552365, 5394382, 48.7003, 3.71167, 160),
('51646', 'Virginy', '31T', 628310, 5448680, 49.1775, 4.76055, 130),
('51647', 'Vitry-en-Perthois', '31T', 619594, 5400818, 48.7489, 4.62695, 105),
('51648', 'Vitry-la-Ville', '31T', 606959, 5411003, 48.8428, 4.45777, 90),
('51649', 'Vitry-le-François', '31T', 617063, 5397768, 48.7219, 4.59166, 102),
('51650', 'Voilemont', '31T', 631380, 5434540, 49.0497, 4.79805, 150),
('51651', 'Voipreux', '31T', 576330, 5417758, 48.9081, 4.04167, 100),
('51652', 'Vouarces', '31T', 566262, 5382486, 48.5919, 3.89862, 80),
('51654', 'Vouillers', '31T', 634986, 5393661, 48.6814, 4.83389, 135),
('51655', 'Vouzy', '31T', 581409, 5419837, 48.9261, 4.11138, 90),
('51656', 'Vraux', '31T', 590545, 5431221, 49.0272, 4.23861, 85),
('51657', 'Vrigny', '31T', 566449, 5453919, 49.2344, 3.91278, 130),
('51658', 'Vroil', '31T', 640382, 5411774, 48.8431, 4.91334, 150),
('51659', 'Wargemoulin-Hurlus', '31T', 623827, 5446291, 49.1569, 4.69833, 140),
('51660', 'Warmeriville', '31T', 588725, 5467206, 49.3511, 4.22167, 80),
('51662', 'Witry-lès-Reims', '31T', 581556, 5460825, 49.2947, 4.12167, 130),
('51663', 'Magenta', '31T', 570854, 5433652, 49.0517, 3.96972, 75),
('52001', 'Ageville', '31T', 675398, 5331181, 48.1097, 5.35639, 390),
('52002', 'Aigremont', '31T', 702641, 5321695, 48.0164, 5.7175, 430),
('52003', 'Aillianville', '31T', 683663, 5357214, 48.3414, 5.4786, 417),
('52004', 'Aingoulaincourt', '31T', 669041, 5369491, 48.4558, 5.28639, 340),
('52005', 'Aizanville', '31T', 641102, 5330017, 48.1078, 4.89555, 210),
('52006', 'Allichamps', '31T', 639715, 5380307, 48.5603, 4.8936, 150),
('52007', 'Ambonville', '31T', 649337, 5352902, 48.3117, 5.01417, 280),
('52008', 'Andelot-Blancheville', '31T', 670651, 5345962, 48.2439, 5.29861, 250),
('52009', 'Andilly-en-Bassigny', '31T', 688709, 5310868, 47.9233, 5.52611, 330),
('52011', 'Annéville-la-Prairie', '31T', 655038, 5340295, 48.1969, 5.08639, 260),
('52012', 'Annonville', '31T', 668212, 5361401, 48.3833, 5.27194, 288),
('52013', 'Anrosey', '31T', 700037, 5301700, 47.8375, 5.67333, 246),
('52014', 'Aprey', '31T', 666658, 5292670, 47.7658, 5.22416, 380),
('52015', 'Arbigny-sous-Varennes', '31T', 695507, 5303986, 47.8594, 5.61389, 250),
('52016', 'Arbot', '31T', 650449, 5301679, 47.8508, 5.01111, 300),
('52017', 'Arc-en-Barrois', '31T', 649994, 5312758, 47.9506, 5.00889, 270),
('52019', 'Arnancourt', '31T', 642305, 5357201, 48.3519, 4.92083, 220),
('52021', 'Attancourt', '31T', 642435, 5376575, 48.5261, 4.92917, 160),
('52022', 'Aubepierre-sur-Aube', '31T', 644656, 5308822, 47.9164, 4.93612, 270),
('52023', 'Auberive', '31T', 654585, 5294745, 47.7875, 5.06389, 342),
('52025', 'Audeloncourt', '31T', 687701, 5331509, 48.1092, 5.52166, 350),
('52027', 'Aujeurres', '31T', 663777, 5289961, 47.7422, 5.18472, 450),
('52028', 'Aulnoy-sur-Aube', '31T', 652017, 5299774, 47.8333, 5.03139, 370),
('52029', 'Autigny-le-Grand', '31T', 658080, 5371214, 48.4742, 5.1389, 180),
('52030', 'Autigny-le-Petit', '31T', 657911, 5372105, 48.4822, 5.13695, 180),
('52031', 'Autreville-sur-la-Renne', '31T', 647321, 5331163, 48.1167, 4.97944, 250),
('52034', 'Bailly-aux-Forges', '31T', 641546, 5369447, 48.4622, 4.91472, 183),
('52035', 'Baissey', '31T', 668781, 5291310, 47.7531, 5.25195, 420),
('52036', 'Balesmes-sur-Marne', '31T', 677727, 5299240, 47.8219, 5.37445, 379),
('52037', 'Bannes', '31T', 679315, 5308405, 47.9039, 5.39945, 388),
('52038', 'Bassoncourt', '31T', 690356, 5326992, 48.0678, 5.55528, 340),
('52039', 'Baudrecourt', '31T', 645311, 5362035, 48.3947, 4.96305, 210),
('52040', 'Bay-sur-Aube', '31T', 654523, 5298605, 47.8222, 5.06444, 320),
('52042', 'Beauchemin', '31T', 667516, 5308328, 47.9064, 5.24166, 410),
('52043', 'Belmont', '31T', 690970, 5288908, 47.7253, 5.54666, 260),
('52044', 'Roches-Bettaincourt', '31T', 667130, 5352718, 48.3056, 5.25389, 230),
('52045', 'Bettancourt-la-Ferrée', '31T', 645409, 5390894, 48.6542, 4.97444, 150),
('52047', 'Beurville', '31T', 635894, 5353214, 48.3175, 4.83306, 220),
('52050', 'Biesles', '31T', 670888, 5328357, 48.0856, 5.29472, 390),
('52051', 'Bize', '31T', 697100, 5301784, 47.8392, 5.63416, 240),
('52053', 'Blaisy', '31T', 648361, 5337337, 48.1719, 4.99556, 310),
('52055', 'Blécourt', '31T', 654419, 5360793, 48.3814, 5.08556, 316),
('52056', 'Blessonville', '31T', 649768, 5324614, 48.0572, 5.01, 305),
('52057', 'Blumeray', '31T', 637640, 5358538, 48.365, 4.85834, 240),
('52058', 'Bologne', '31T', 659237, 5340843, 48.2008, 5.14306, 240),
('52059', 'Bonnecourt', '31T', 684913, 5313958, 47.9522, 5.47667, 420),
('52060', 'Bourbonne-les-Bains', '31T', 705235, 5314678, 47.9525, 5.74889, 270),
('52061', 'Bourdons-sur-Rognon', '31T', 674751, 5337434, 48.1661, 5.35027, 322),
('52062', 'Bourg', '31T', 673159, 5296104, 47.795, 5.31222, 430),
('52063', 'Bourg-Sainte-Marie', '31T', 690068, 5339376, 48.1792, 5.55694, 328),
('52064', 'Bourmont', '31T', 692388, 5341092, 48.1939, 5.5889, 400),
('52065', 'Bouzancourt', '31T', 644410, 5352991, 48.3136, 4.94778, 233),
('52066', 'Brachay', '31T', 650058, 5359934, 48.3747, 5.02639, 240),
('52067', 'Brainville-sur-Meuse', '31T', 692122, 5339166, 48.1767, 5.58445, 326),
('52069', 'Braux-le-Châtel', '31T', 644703, 5329180, 48.0994, 4.94361, 250),
('52070', 'Brennes', '31T', 670802, 5296251, 47.7969, 5.28083, 440),
('52072', 'Brethenay', '31T', 658615, 5335697, 48.1547, 5.13277, 297),
('52074', 'Breuvannes-en-Bassigny', '31T', 694212, 5329965, 48.0933, 5.60834, 330),
('52075', 'Briaucourt', '31T', 662641, 5341711, 48.2078, 5.18917, 280),
('52076', 'Bricon', '31T', 647406, 5327056, 48.0797, 4.97916, 265),
('52079', 'Brousseval', '31T', 645382, 5372881, 48.4922, 4.96778, 180),
('52082', 'Bugnières', '31T', 656960, 5312263, 47.9444, 5.10194, 370),
('52083', 'Champsevraine', '31T', 691245, 5291328, 47.7469, 5.55139, 280),
('52084', 'Busson', '31T', 674967, 5355302, 48.3267, 5.36056, 384),
('52085', 'Buxières-lès-Clefmont', '31T', 683125, 5329631, 48.0936, 5.45944, 420),
('52087', 'Buxières-lès-Villiers', '31T', 651426, 5330034, 48.1056, 5.03416, 300),
('52088', 'Ceffonds', '31T', 630393, 5370198, 48.4714, 4.76416, 132),
('52089', 'Celles-en-Bassigny', '31T', 689983, 5310045, 47.9156, 5.54278, 340),
('52090', 'Celsoy', '31T', 685609, 5303937, 47.8619, 5.48167, 340),
('52091', 'Cerisières', '31T', 654394, 5352636, 48.3081, 5.08223, 332),
('52092', 'Chalancey', '31T', 660826, 5282897, 47.6794, 5.14278, 470),
('52093', 'Chalindrey', '31T', 682378, 5297593, 47.8058, 5.43584, 341),
('52094', 'Vals-des-Tilles', '31T', 655351, 5285559, 47.7047, 5.07083, 380),
('52095', 'Chalvraines', '31T', 684131, 5345949, 48.24, 5.48, 370),
('52097', 'Chambroncourt', '31T', 678191, 5358276, 48.3525, 5.40528, 370),
('52099', 'Chamouilley', '31T', 650872, 5385661, 48.6058, 5.04667, 153),
('52101', 'Champigneulles-en-Bassigny', '31T', 696815, 5334350, 48.1319, 5.64528, 350),
('52102', 'Champigny-lès-Langres', '31T', 675383, 5307203, 47.8942, 5.34639, 380),
('52103', 'Champigny-sous-Varennes', '31T', 697845, 5304931, 47.8672, 5.64555, 245),
('52104', 'Chancenay', '31T', 646325, 5392678, 48.67, 4.9875, 170),
('52105', 'Changey', '31T', 678261, 5310906, 47.9267, 5.38639, 390),
('52106', 'Chanoy', '31T', 670841, 5310403, 47.9242, 5.28694, 330),
('52107', 'Chantraines', '31T', 667004, 5342950, 48.2178, 5.24834, 296),
('52108', 'Charmes', '31T', 675730, 5310117, 47.9203, 5.35222, 340),
('52109', 'Charmes-en-l''Angle', '31T', 648231, 5359732, 48.3733, 5.00166, 230),
('52110', 'Charmes-la-Grande', '31T', 647564, 5360857, 48.3836, 4.99306, 226),
('52113', 'Chassigny', '31T', 678662, 5287095, 47.7125, 5.38194, 328),
('52114', 'Châteauvillain', '31T', 643644, 5317724, 47.9967, 4.92555, 231),
('52115', 'Chatenay-Mâcheron', '31T', 679612, 5302172, 47.8478, 5.40083, 360),
('52116', 'Chatenay-Vaudin', '31T', 682980, 5302896, 47.8533, 5.44611, 380),
('52118', 'Chatonrupt-Sommermont', '31T', 657009, 5372790, 48.4886, 5.12501, 180),
('52119', 'Chaudenay', '31T', 687203, 5299663, 47.8231, 5.50111, 300),
('52120', 'Chauffourt', '31T', 681659, 5316420, 47.9753, 5.43417, 390),
('52121', 'Chaumont', '31T', 659269, 5330772, 48.1103, 5.13972, 290),
('52122', 'Chaumont-la-Ville', '31T', 697151, 5336000, 48.1467, 5.65056, 350),
('52123', 'Chevillon', '31T', 657355, 5377311, 48.5292, 5.13139, 197),
('52125', 'Chamarandes-Choignes', '31T', 661351, 5330335, 48.1058, 5.1675, 259),
('52126', 'Choilley-Dardenay', '31T', 676763, 5281660, 47.6642, 5.35444, 270),
('52127', 'Choiseul', '31T', 691283, 5325911, 48.0578, 5.56723, 340),
('52128', 'Cirey-lès-Mareilles', '31T', 669728, 5340929, 48.1989, 5.28417, 345),
('52129', 'Cirey-sur-Blaise', '31T', 643823, 5354985, 48.3317, 4.94055, 240),
('52130', 'Cirfontaines-en-Azois', '31T', 639424, 5330130, 48.1092, 4.87306, 220),
('52131', 'Cirfontaines-en-Ornois', '31T', 676583, 5369536, 48.4542, 5.38833, 370),
('52132', 'Clefmont', '31T', 687006, 5329972, 48.0956, 5.51166, 450),
('52133', 'Clinchamp', '31T', 682672, 5340587, 48.1922, 5.45806, 380),
('52134', 'Cohons', '31T', 675530, 5295496, 47.7889, 5.34361, 358),
('52135', 'Coiffy-le-Bas', '31T', 700133, 5310326, 47.915, 5.67861, 270),
('52136', 'Coiffy-le-Haut', '31T', 701674, 5309638, 47.9083, 5.69889, 404),
('52137', 'Colmier-le-Bas', '31T', 646181, 5292827, 47.7722, 4.95111, 391),
('52138', 'Colmier-le-Haut', '31T', 647341, 5293876, 47.7814, 4.96694, 420),
('52140', 'Colombey-les-Deux-Églises', '31T', 640027, 5342656, 48.2217, 4.88528, 350),
('52141', 'Condes', '31T', 659647, 5334304, 48.1419, 5.14612, 250),
('52142', 'Consigny', '31T', 679750, 5337558, 48.1658, 5.4175, 368),
('52145', 'Coublanc', '31T', 685485, 5285395, 47.6953, 5.47209, 250),
('52146', 'Coupray', '31T', 645024, 5315627, 47.9775, 4.94333, 250),
('52147', 'Courcelles-en-Montagne', '31T', 666323, 5300693, 47.8381, 5.22277, 430),
('52149', 'Courcelles-sur-Blaise', '31T', 643547, 5364277, 48.4153, 4.94, 200),
('52151', 'Cour-l''Évêque', '31T', 647538, 5314671, 47.9683, 4.97667, 262),
('52155', 'Culmont', '31T', 682717, 5299365, 47.8217, 5.44111, 313),
('52156', 'Curel', '31T', 657881, 5373155, 48.4917, 5.13694, 180),
('52157', 'Curmont', '31T', 644893, 5346948, 48.2592, 4.95222, 290),
('52158', 'Cusey', '31T', 676080, 5278025, 47.6317, 5.34389, 250),
('52159', 'Cuves', '31T', 681383, 5329730, 48.095, 5.43611, 370),
('52160', 'Daillancourt', '31T', 644648, 5351700, 48.3019, 4.95055, 240),
('52161', 'Daillecourt', '31T', 686501, 5327700, 48.0753, 5.50389, 380),
('52162', 'Dammartin-sur-Meuse', '31T', 692408, 5317048, 47.9778, 5.57833, 390),
('52163', 'Dampierre', '31T', 678994, 5314050, 47.9547, 5.3975, 365),
('52164', 'Damrémont', '31T', 697230, 5314398, 47.9525, 5.64166, 410),
('52165', 'Dancevoir', '31T', 640035, 5310129, 47.9292, 4.87473, 260),
('52167', 'Darmannes', '31T', 664725, 5337476, 48.1692, 5.21556, 331),
('52168', 'Dinteville', '31T', 633794, 5321378, 48.0317, 4.79472, 224),
('52169', 'Domblain', '31T', 647311, 5370583, 48.4711, 4.99306, 230),
('52170', 'Dommarien', '31T', 676489, 5284392, 47.6888, 5.3519, 270);
INSERT INTO `ods_communes` (`oc_code_insee`, `oc_nom`, `oc_secteur`, `oc_x_utm`, `oc_y_utm`, `oc_latitude`, `oc_longitude`, `oc_altitude`) VALUES
('52171', 'Dommartin-le-Franc', '31T', 644993, 5365642, 48.4272, 4.96001, 200),
('52172', 'Dommartin-le-Saint-Père', '31T', 642169, 5361801, 48.3933, 4.92055, 210),
('52173', 'Domremy-Landéville', '31T', 666603, 5358727, 48.3597, 5.24917, 328),
('52174', 'Doncourt-sur-Meuse', '31T', 691382, 5335958, 48.1481, 5.57306, 340),
('52175', 'Donjeux', '31T', 659764, 5358840, 48.3625, 5.15695, 200),
('52177', 'Doulaincourt-Saucourt', '31T', 663556, 5354406, 48.3217, 5.20638, 227),
('52178', 'Doulevant-le-Château', '31T', 642317, 5360013, 48.3772, 4.92194, 200),
('52179', 'Doulevant-le-Petit', '31T', 644731, 5367829, 48.4469, 4.95722, 200),
('52180', 'Droyes', '31T', 625488, 5374628, 48.5122, 4.69916, 120),
('52181', 'Échenay', '31T', 670660, 5370343, 48.4631, 5.30861, 310),
('52182', 'Éclaron-Braucourt-Sainte-Livière', '31T', 637563, 5383622, 48.5906, 4.86555, 143),
('52183', 'Ecot-la-Combe', '31T', 677003, 5342139, 48.2078, 5.3825, 300),
('52184', 'Effincourt', '31T', 667536, 5373803, 48.495, 5.26778, 291),
('52185', 'Enfonvelle', '31T', 714051, 5312124, 47.9267, 5.86555, 262),
('52187', 'Épizon', '31T', 673950, 5360895, 48.3772, 5.34916, 365),
('52189', 'Le Val-d''Esnoms', '31T', 666132, 5284127, 47.6892, 5.21389, 340),
('52190', 'Esnouveaux', '31T', 675117, 5332903, 48.1253, 5.35333, 370),
('52193', 'Euffigneix', '31T', 652266, 5332682, 48.1292, 5.04638, 297),
('52194', 'Eurville-Bienville', '31T', 650321, 5383267, 48.5844, 5.03833, 175),
('52195', 'Farincourt', '31T', 701172, 5286378, 47.6994, 5.68139, 250),
('52196', 'Faverolles', '31T', 664973, 5312982, 47.9489, 5.20944, 372),
('52197', 'Fayl-Billot', '31T', 694919, 5295498, 47.7833, 5.60222, 330),
('52198', 'Fays', '31T', 650383, 5370942, 48.4736, 5.03472, 285),
('52199', 'Ferrière-et-Lafolie', '31T', 654755, 5362038, 48.3925, 5.09055, 306),
('52200', 'Flagey', '31T', 669101, 5294625, 47.7828, 5.2575, 400),
('52201', 'Flammerécourt', '31T', 651370, 5358579, 48.3622, 5.04361, 241),
('52203', 'Fontaines-sur-Marne', '31T', 655175, 5378950, 48.5444, 5.10249, 190),
('52204', 'Forcey', '31T', 675451, 5335509, 48.1486, 5.35889, 310),
('52205', 'Foulain', '31T', 664957, 5322930, 48.0383, 5.21305, 289),
('52206', 'Frampas', '31T', 634804, 5375615, 48.5192, 4.82556, 150),
('52207', 'Frécourt', '31T', 683672, 5313826, 47.9514, 5.46001, 380),
('52208', 'Fresnes-sur-Apance', '31T', 711852, 5313743, 47.9419, 5.83695, 270),
('52211', 'Froncles', '31T', 659410, 5351631, 48.2978, 5.14945, 217),
('52212', 'Fronville', '31T', 659411, 5363341, 48.4031, 5.1539, 195),
('52213', 'Genevrières', '31T', 695607, 5288691, 47.7219, 5.60834, 290),
('52214', 'La Genevroye', '31T', 652629, 5349251, 48.2781, 5.05722, 345),
('52216', 'Germaines', '31T', 652181, 5295917, 47.7986, 5.03223, 350),
('52217', 'Germainvilliers', '31T', 696848, 5332775, 48.1178, 5.645, 340),
('52218', 'Germay', '31T', 674416, 5364494, 48.4094, 5.35695, 380),
('52219', 'Germisay', '31T', 674441, 5363011, 48.3961, 5.35667, 376),
('52220', 'Giey-sur-Aujon', '31T', 654668, 5307969, 47.9064, 5.06973, 300),
('52221', 'Gillancourt', '31T', 648065, 5336001, 48.16, 4.99111, 310),
('52222', 'Gillaumé', '31T', 672605, 5371267, 48.4708, 5.33528, 340),
('52223', 'Gilley', '31T', 697998, 5285218, 47.69, 5.63861, 280),
('52225', 'Goncourt', '31T', 693660, 5346203, 48.2394, 5.60833, 320),
('52227', 'Graffigny-Chemin', '31T', 695397, 5338288, 48.1678, 5.62805, 350),
('52228', 'Grandchamp', '31T', 683491, 5288391, 47.7228, 5.4468, 260),
('52229', 'Grenant', '31T', 687864, 5286952, 47.7086, 5.50444, 250),
('52230', 'Gudmont-Villiers', '31T', 658448, 5356547, 48.3422, 5.13833, 210),
('52231', 'Guindrecourt-aux-Ormes', '31T', 650341, 5369427, 48.46, 5.03361, 280),
('52232', 'Guindrecourt-sur-Blaise', '31T', 646376, 5351033, 48.2956, 4.97361, 270),
('52233', 'Guyonvelle', '31T', 702754, 5303741, 47.855, 5.71056, 348),
('52234', 'Hâcourt', '31T', 691654, 5337698, 48.1636, 5.5775, 320),
('52235', 'Hallignicourt', '31T', 637829, 5389498, 48.6433, 4.87111, 132),
('52237', 'Harréville-les-Chanteurs', '31T', 695301, 5348948, 48.2636, 5.63167, 312),
('52239', 'Heuilley-Cotton', '31T', 677412, 5293885, 47.7739, 5.36806, 350),
('52240', 'Heuilley-le-Grand', '31T', 680743, 5295935, 47.7914, 5.41333, 330),
('52242', 'Haute-Amance', '31T', 691000, 5301889, 47.8419, 5.55277, 290),
('52243', 'Huilliécourt', '31T', 689539, 5337257, 48.1603, 5.54889, 340),
('52244', 'Humbécourt', '31T', 640019, 5382940, 48.5839, 4.89861, 143),
('52245', 'Humberville', '31T', 676405, 5350773, 48.2856, 5.37805, 272),
('52246', 'Humes-Jorquenay', '31T', 672092, 5308154, 47.9036, 5.30278, 330),
('52247', 'Illoud', '31T', 690249, 5342627, 48.2083, 5.56083, 330),
('52248', 'Is-en-Bassigny', '31T', 682374, 5322654, 48.0311, 5.44639, 390),
('52249', 'Isômes', '31T', 673027, 5279571, 47.6464, 5.30389, 265),
('52250', 'Joinville', '31T', 658140, 5367569, 48.4414, 5.13833, 190),
('52251', 'Jonchery', '31T', 655159, 5333563, 48.1364, 5.08556, 280),
('52253', 'Juzennecourt', '31T', 647048, 5338570, 48.1833, 4.97833, 302),
('52254', 'Lachapelle-en-Blaisy', '31T', 646052, 5340336, 48.1994, 4.96555, 300),
('52256', 'Lafauche', '31T', 685395, 5352140, 48.2953, 5.49972, 340),
('52257', 'Laferté-sur-Amance', '31T', 701839, 5301330, 47.8336, 5.69722, 330),
('52258', 'Laferté-sur-Aube', '31T', 632716, 5328550, 48.0964, 4.7825, 210),
('52260', 'Lamancine', '31T', 657293, 5341654, 48.2086, 5.11722, 262),
('52262', 'Lamothe-en-Blaisy', '31T', 644457, 5344620, 48.2383, 4.94556, 280),
('52264', 'Laneuvelle', '31T', 699746, 5311302, 47.9239, 5.67389, 300),
('52265', 'Bayard-sur-Marne', '31T', 652887, 5379351, 48.5486, 5.07166, 167),
('52267', 'Laneuville-au-Pont', '31T', 636987, 5387932, 48.6294, 4.85917, 151),
('52269', 'Langres', '31T', 674632, 5303843, 47.8642, 5.33499, 450),
('52271', 'Lanques-sur-Rognon', '31T', 676466, 5328742, 48.0875, 5.36972, 360),
('52272', 'Lanty-sur-Aube', '31T', 632052, 5320535, 48.0244, 4.77111, 230),
('52273', 'Larivière-Arnoncourt', '31T', 702661, 5322314, 48.0219, 5.71806, 320),
('52274', 'Latrecey-Ormoy-sur-Aube', '31T', 638518, 5316208, 47.9842, 4.85639, 251),
('52275', 'Lavernoy', '31T', 691899, 5310510, 47.9192, 5.5686, 350),
('52276', 'Laville-aux-Bois', '31T', 665829, 5329320, 48.0956, 5.22722, 367),
('52277', 'Lavilleneuve', '31T', 687110, 5323610, 48.0383, 5.51027, 334),
('52280', 'Lecey', '31T', 682571, 5303996, 47.8633, 5.44111, 369),
('52282', 'Leffonds', '31T', 661668, 5315391, 47.9714, 5.16612, 360),
('52284', 'Leschères-sur-le-Blaiseron', '31T', 651262, 5355672, 48.3361, 5.04111, 260),
('52285', 'Leuchey', '31T', 666064, 5288698, 47.7303, 5.21473, 460),
('52286', 'Leurville', '31T', 676735, 5355418, 48.3272, 5.38444, 395),
('52287', 'Levécourt', '31T', 690731, 5335009, 48.1397, 5.56389, 320),
('52288', 'Lezéville', '31T', 676794, 5366731, 48.4289, 5.38999, 370),
('52289', 'Liffol-le-Petit', '31T', 687326, 5352358, 48.2967, 5.52583, 320),
('52290', 'Les Loges', '31T', 686589, 5295471, 47.7856, 5.49111, 280),
('52291', 'Longchamp', '31T', 681698, 5333510, 48.1289, 5.44195, 430),
('52292', 'Longeau-Percey', '31T', 673162, 5293231, 47.7692, 5.31112, 320),
('52293', 'Longeville-sur-la-Laines', '31T', 624583, 5368183, 48.4544, 4.68499, 120),
('52294', 'Louvemont', '31T', 640886, 5379440, 48.5522, 4.90917, 150),
('52295', 'Louvières', '31T', 670085, 5322617, 48.0342, 5.28167, 330),
('52296', 'Louze', '31T', 627611, 5366057, 48.4347, 4.72528, 125),
('52297', 'Luzy-sur-Marne', '31T', 662809, 5324877, 48.0564, 5.185, 275),
('52298', 'Maâtz', '31T', 683822, 5286174, 47.7028, 5.45028, 250),
('52300', 'Magneux', '31T', 648051, 5375268, 48.5131, 5.00472, 226),
('52301', 'Maisoncelles', '31T', 688261, 5334000, 48.1314, 5.53028, 360),
('52302', 'Maizières', '31T', 652725, 5373229, 48.4936, 5.06723, 270),
('52303', 'Maizières-sur-Amance', '31T', 695374, 5300520, 47.8283, 5.61055, 275),
('52304', 'Malaincourt-sur-Meuse', '31T', 693284, 5336579, 48.1531, 5.59889, 350),
('52305', 'Mandres-la-Côte', '31T', 673925, 5325821, 48.0619, 5.33444, 400),
('52306', 'Manois', '31T', 675243, 5349686, 48.2761, 5.36195, 265),
('52307', 'Marac', '31T', 663896, 5310727, 47.9289, 5.19417, 370),
('52308', 'Maranville', '31T', 638942, 5332930, 48.1344, 4.8675, 212),
('52310', 'Marbéville', '31T', 649935, 5348963, 48.2761, 5.02083, 315),
('52311', 'Marcilly-en-Bassigny', '31T', 688601, 5307836, 47.8961, 5.52334, 330),
('52312', 'Mardor', '31T', 664916, 5306276, 47.8886, 5.20611, 430),
('52313', 'Mareilles', '31T', 668310, 5339280, 48.1844, 5.26445, 350),
('52315', 'Marnay-sur-Marne', '31T', 666830, 5319802, 48.0097, 5.23694, 345),
('52316', 'Mathons', '31T', 651328, 5364788, 48.4181, 5.04528, 310),
('52318', 'Melay', '31T', 710084, 5308115, 47.8919, 5.81056, 241),
('52319', 'Mennouveaux', '31T', 679556, 5331218, 48.1089, 5.41222, 400),
('52320', 'Merrey', '31T', 693073, 5325662, 48.055, 5.59111, 360),
('52321', 'Mertrud', '31T', 639748, 5364861, 48.4214, 4.88888, 173),
('52322', 'Meures', '31T', 653567, 5339699, 48.1919, 5.06639, 270),
('52325', 'Millières', '31T', 680146, 5334172, 48.1353, 5.42139, 400),
('52326', 'Mirbel', '31T', 651526, 5350427, 48.2889, 5.04278, 382),
('52327', 'Moëslains', '31T', 639693, 5386979, 48.6203, 4.89555, 132),
('52328', 'Montcharvot', '31T', 704123, 5309137, 47.9031, 5.73139, 400),
('52330', 'Montheries', '31T', 641890, 5336647, 48.1672, 4.90834, 230),
('52331', 'Montier-en-Der', '31T', 630849, 5370920, 48.4778, 4.77056, 130),
('52332', 'Val-de-Meuse', '31T', 686198, 5319161, 47.9986, 5.49612, 400),
('52335', 'Montot-sur-Rognon', '31T', 669762, 5349489, 48.2758, 5.28806, 237),
('52336', 'Montreuil-sur-Blaise', '31T', 644912, 5371201, 48.4772, 4.96083, 190),
('52337', 'Montreuil-sur-Thonnance', '31T', 665480, 5369664, 48.4583, 5.23833, 277),
('52340', 'Montsaugeon', '31T', 673518, 5281995, 47.6681, 5.31139, 338),
('52341', 'Morancourt', '31T', 648102, 5366247, 48.4319, 5.00222, 260),
('52342', 'Morionvilliers', '31T', 678731, 5360085, 48.3686, 5.41333, 370),
('52344', 'Mouilleron', '31T', 658302, 5284403, 47.6936, 5.10972, 380),
('52346', 'Mussey-sur-Marne', '31T', 659136, 5360645, 48.3789, 5.14916, 215),
('52347', 'Narcy', '31T', 653948, 5383335, 48.5842, 5.0875, 182),
('52348', 'Neuilly-l''Évêque', '31T', 682566, 5310052, 47.9178, 5.44361, 323),
('52349', 'Neuilly-sur-Suize', '31T', 660266, 5323971, 48.0489, 5.15055, 323),
('52350', 'Neuvelle-lès-Voisey', '31T', 708751, 5305315, 47.8672, 5.79139, 246),
('52351', 'Nijon', '31T', 696124, 5341219, 48.1939, 5.63917, 335),
('52352', 'Ninville', '31T', 681452, 5327569, 48.0756, 5.43612, 390),
('52353', 'Nogent', '31T', 674890, 5322019, 48.0275, 5.34583, 400),
('52354', 'Noidant-Chatenoy', '31T', 680743, 5295935, 47.7914, 5.41333, 417),
('52355', 'Noidant-le-Rocheux', '31T', 668799, 5299962, 47.8308, 5.25555, 424),
('52356', 'Nomécourt', '31T', 653387, 5366975, 48.4372, 5.07389, 308),
('52357', 'Noncourt-sur-le-Rongeant', '31T', 665960, 5365228, 48.4183, 5.24306, 250),
('52358', 'Noyers', '31T', 685292, 5326023, 48.0606, 5.48695, 395),
('52359', 'Nully', '31T', 633813, 5358478, 48.3653, 4.80667, 224),
('52360', 'Occey', '31T', 671178, 5275684, 47.6119, 5.27777, 296),
('52362', 'Orbigny-au-Mont', '31T', 683418, 5306123, 47.8822, 5.45333, 415),
('52363', 'Orbigny-au-Val', '31T', 681956, 5306356, 47.8847, 5.43389, 360),
('52364', 'Orcevaux', '31T', 670205, 5293916, 47.7761, 5.27195, 410),
('52365', 'Orges', '31T', 643555, 5327082, 48.0808, 4.9275, 220),
('52366', 'Ormancey', '31T', 663258, 5308330, 47.9075, 5.18473, 370),
('52367', 'Ormoy-lès-Sexfontaines', '31T', 653527, 5342726, 48.2192, 5.06695, 296),
('52369', 'Orquevaux', '31T', 677877, 5352518, 48.3008, 5.39861, 300),
('52370', 'Osne-le-Val', '31T', 661955, 5373641, 48.495, 5.19223, 250),
('52371', 'Oudincourt', '31T', 655575, 5343337, 48.2242, 5.09472, 251),
('52372', 'Outremécourt', '31T', 699236, 5344417, 48.2217, 5.6825, 340),
('52373', 'Ozières', '31T', 683833, 5338523, 48.1733, 5.47278, 422),
('52374', 'Le Pailly', '31T', 680743, 5295935, 47.7914, 5.41333, 340),
('52375', 'Palaiseul', '31T', 680743, 5295935, 47.7914, 5.41333, 344),
('52376', 'Pancey', '31T', 669031, 5371190, 48.4711, 5.28694, 300),
('52377', 'Parnoy-en-Bassigny', '31T', 697566, 5320344, 48.0058, 5.64889, 380),
('52378', 'Paroy-sur-Saulx', '31T', 666656, 5375786, 48.5131, 5.25667, 283),
('52379', 'Pautaines-Augeville', '31T', 671428, 5357851, 48.3506, 5.31389, 360),
('52380', 'Peigney', '31T', 676611, 5305788, 47.8811, 5.36223, 383),
('52383', 'Perrancey-les-Vieux-Moulins', '31T', 669727, 5303789, 47.865, 5.26944, 400),
('52384', 'Perrogney-les-Fontaines', '31T', 664598, 5297739, 47.8119, 5.19861, 474),
('52385', 'Perrusse', '31T', 684768, 5330054, 48.0969, 5.48167, 441),
('52386', 'Perthes', '31T', 634378, 5390866, 48.6564, 4.82473, 130),
('52388', 'Pierremont-sur-Amance', '31T', 699229, 5297376, 47.7989, 5.66056, 314),
('52390', 'Pisseloup', '31T', 705207, 5300861, 47.8283, 5.74195, 231),
('52391', 'Planrupt', '31T', 631859, 5374279, 48.5078, 4.78528, 130),
('52392', 'Plesnoy', '31T', 686789, 5307313, 47.8919, 5.49889, 320),
('52393', 'Poinsenot', '31T', 650346, 5286385, 47.7133, 5.00444, 400),
('52394', 'Poinson-lès-Fayl', '31T', 696052, 5292168, 47.7531, 5.61583, 322),
('52395', 'Poinson-lès-Grancey', '31T', 648924, 5285762, 47.7081, 4.98528, 433),
('52396', 'Poinson-lès-Nogent', '31T', 676762, 5318461, 47.995, 5.36945, 370),
('52397', 'Poiseul', '31T', 686077, 5310690, 47.9225, 5.49083, 400),
('52398', 'Poissons', '31T', 664221, 5365610, 48.4222, 5.21972, 230),
('52399', 'Pont-la-Ville', '31T', 640740, 5327074, 48.0814, 4.88972, 219),
('52400', 'Le Châtelet-sur-Meuse', '31T', 696312, 5317581, 47.9814, 5.63084, 400),
('52401', 'Poulangy', '31T', 668046, 5323607, 48.0436, 5.25472, 300),
('52403', 'Praslay', '31T', 657927, 5289738, 47.7417, 5.10666, 396),
('52405', 'Prauthoy', '31T', 672166, 5283253, 47.6797, 5.29389, 300),
('52406', 'Pressigny', '31T', 699778, 5291708, 47.7478, 5.66528, 300),
('52407', 'Prez-sous-Lafauche', '31T', 684868, 5351227, 48.2872, 5.49223, 330),
('52411', 'Puellemontier', '31T', 625576, 5372529, 48.4933, 4.69972, 121),
('52413', 'Rachecourt-Suzémont', '31T', 645197, 5368891, 48.4564, 4.96389, 180),
('52414', 'Rachecourt-sur-Marne', '31T', 655255, 5376790, 48.525, 5.10277, 171),
('52415', 'Rançonnières', '31T', 691133, 5312338, 47.9358, 5.55917, 360),
('52416', 'Rangecourt', '31T', 685333, 5324108, 48.0433, 5.48667, 350),
('52419', 'Rennepont', '31T', 638040, 5334329, 48.1472, 4.85583, 210),
('52420', 'Reynel', '31T', 673351, 5351513, 48.2931, 5.33722, 350),
('52421', 'Riaucourt', '31T', 659996, 5338084, 48.1758, 5.15223, 250),
('52422', 'Richebourg', '31T', 653621, 5320700, 48.0211, 5.06027, 344),
('52423', 'Rimaucourt', '31T', 672996, 5346898, 48.2517, 5.33055, 260),
('52424', 'Rivières-le-Bois', '31T', 683134, 5290138, 47.7386, 5.44278, 330),
('52425', 'Rivière-les-Fosses', '31T', 667730, 5280806, 47.6589, 5.23389, 310),
('52426', 'Rizaucourt-Buchey', '31T', 638451, 5348889, 48.2781, 4.86611, 250),
('52427', 'Robert-Magny-Laneuville-à-Rémy', '31T', 636682, 5369235, 48.4614, 4.84889, 155),
('52428', 'Rochefort-sur-la-Côte', '31T', 663783, 5342918, 48.2183, 5.20499, 350),
('52429', 'Roches-sur-Marne', '31T', 649991, 5385669, 48.6061, 5.03473, 160),
('52431', 'Rochetaillée', '31T', 658222, 5303339, 47.8639, 5.11555, 335),
('52432', 'Rolampont', '31T', 670545, 5313391, 47.9511, 5.28417, 320),
('52433', 'Romain-sur-Meuse', '31T', 688296, 5338575, 48.1725, 5.53277, 420),
('52436', 'Rouécourt', '31T', 653460, 5354402, 48.3242, 5.07028, 300),
('52437', 'Rouelles', '31T', 656465, 5296803, 47.8056, 5.08972, 360),
('52438', 'Rougeux', '31T', 693089, 5298527, 47.8111, 5.57916, 310),
('52439', 'Rouvres-sur-Aube', '31T', 649178, 5302573, 47.8592, 4.99444, 300),
('52440', 'Rouvroy-sur-Marne', '31T', 659145, 5358143, 48.3564, 5.14834, 205),
('52442', 'Rupt', '31T', 658381, 5365568, 48.4233, 5.14083, 190),
('52443', 'Sailly', '31T', 668148, 5367023, 48.4339, 5.27333, 272),
('52444', 'Saint-Blin', '31T', 679059, 5349033, 48.2692, 5.41306, 291),
('52445', 'Saint-Broingt-le-Bois', '31T', 681651, 5289567, 47.7339, 5.42278, 330),
('52446', 'Saint-Broingt-les-Fosses', '31T', 670488, 5287096, 47.7147, 5.27305, 370),
('52447', 'Saint-Ciergues', '31T', 668563, 5305918, 47.8844, 5.25472, 370),
('52448', 'Saint-Dizier', '31T', 643691, 5389243, 48.6397, 4.95055, 143),
('52449', 'Saints-Geosmes', '31T', 673840, 5300482, 47.8342, 5.32306, 450),
('52450', 'Saint-Loup-sur-Aujon', '31T', 656304, 5305851, 47.8869, 5.09084, 330),
('52452', 'Saint-Martin-lès-Langres', '31T', 669227, 5306679, 47.8911, 5.26389, 400),
('52453', 'Saint-Maurice', '31T', 680301, 5302101, 47.8469, 5.41, 390),
('52455', 'Saint-Thiébault', '31T', 691511, 5341958, 48.2019, 5.5775, 330),
('52456', 'Saint-Urbain-Maconcourt', '31T', 661579, 5363063, 48.4, 5.18306, 220),
('52457', 'Saint-Vallier-sur-Marne', '31T', 679358, 5300990, 47.8372, 5.39695, 380),
('52459', 'Sarcey', '31T', 671545, 5325070, 48.0558, 5.30222, 370),
('52461', 'Sarrey', '31T', 681064, 5319491, 48.0031, 5.4275, 360),
('52463', 'Saudron', '31T', 672105, 5373508, 48.4911, 5.32945, 340),
('52464', 'Saulles', '31T', 689148, 5287242, 47.7108, 5.52167, 270),
('52467', 'Savigny', '31T', 698593, 5287958, 47.7144, 5.64777, 285),
('52468', 'Semilly', '31T', 682492, 5348389, 48.2624, 5.459, 358),
('52469', 'Semoutiers-Montsaon', '31T', 653461, 5325145, 48.0611, 5.05972, 315),
('52470', 'Serqueux', '31T', 704314, 5318973, 47.9914, 5.73861, 350),
('52472', 'Sexfontaines', '31T', 651623, 5340543, 48.2, 5.04055, 376),
('52473', 'Signéville', '31T', 668681, 5348375, 48.2661, 5.27306, 319),
('52474', 'Silvarouvres', '31T', 633099, 5324544, 48.0603, 4.78639, 210),
('52475', 'Sommancourt', '31T', 650169, 5374366, 48.5044, 5.03306, 250),
('52476', 'Sommerécourt', '31T', 697448, 5344757, 48.2253, 5.65862, 330),
('52479', 'Sommevoire', '31T', 636122, 5363475, 48.4097, 4.83945, 148),
('52480', 'Soncourt-sur-Marne', '31T', 657119, 5346469, 48.2519, 5.11666, 230),
('52482', 'Soulaucourt-sur-Mouzon', '31T', 699101, 5341754, 48.1978, 5.67944, 320),
('52483', 'Soyers', '31T', 701468, 5305427, 47.8706, 5.69417, 380),
('52484', 'Suzannecourt', '31T', 660514, 5367976, 48.4444, 5.17056, 200),
('52486', 'Ternat', '31T', 658940, 5308209, 47.9075, 5.12694, 360),
('52487', 'Thilleux', '31T', 633353, 5366622, 48.4386, 4.80305, 145),
('52488', 'Thivet', '31T', 670760, 5318033, 47.9928, 5.28889, 370),
('52489', 'Thol-lès-Millières', '31T', 684631, 5335582, 48.1467, 5.48222, 440),
('52490', 'Thonnance-lès-Joinville', '31T', 660809, 5369159, 48.455, 5.175, 190),
('52491', 'Thonnance-les-Moulins', '31T', 669707, 5364412, 48.41, 5.29333, 270),
('52492', 'Torcenay', '31T', 684545, 5298836, 47.8164, 5.46528, 326),
('52493', 'Tornay', '31T', 695658, 5286561, 47.7028, 5.60806, 270),
('52494', 'Treix', '31T', 662727, 5335071, 48.1481, 5.18778, 336),
('52497', 'Troisfontaines-la-Ville', '31T', 649137, 5378447, 48.5414, 5.02056, 210),
('52499', 'Vaillant', '31T', 661645, 5286441, 47.7111, 5.155, 470),
('52500', 'Valcourt', '31T', 640399, 5386626, 48.6169, 4.905, 137),
('52502', 'Valleret', '31T', 647923, 5372298, 48.4864, 5.00194, 250),
('52503', 'Valleroy', '31T', 699546, 5286322, 47.6994, 5.65972, 280),
('52504', 'Terre-Natale', '31T', 696134, 5308179, 47.8969, 5.62417, 360),
('52505', 'Vaudrecourt', '31T', 696778, 5342601, 48.2061, 5.6486, 350),
('52506', 'Vaudrémont', '31T', 641688, 5332256, 48.1278, 4.90416, 220),
('52507', 'Vauxbons', '31T', 661276, 5305648, 47.8839, 5.15722, 385),
('52509', 'Vaux-sous-Aubigny', '31T', 672008, 5280838, 47.6581, 5.29084, 280),
('52510', 'Vaux-sur-Blaise', '31T', 645792, 5370513, 48.4708, 4.9725, 180),
('52511', 'Vaux-sur-Saint-Urbain', '31T', 663591, 5360339, 48.375, 5.20916, 250),
('52512', 'Vecqueville', '31T', 658253, 5369427, 48.4581, 5.14056, 190),
('52513', 'Velles', '31T', 703756, 5301273, 47.8325, 5.72278, 240),
('52514', 'Verbiesles', '31T', 662932, 5326395, 48.07, 5.18722, 272),
('52515', 'Verseilles-le-Bas', '31T', 671781, 5292727, 47.765, 5.2925, 320),
('52516', 'Verseilles-le-Haut', '31T', 672200, 5293357, 47.7706, 5.29834, 400),
('52517', 'Vesaignes-sous-Lafauche', '31T', 680627, 5350318, 48.2803, 5.43472, 321),
('52518', 'Vesaignes-sur-Marne', '31T', 668877, 5318595, 47.9983, 5.26389, 300),
('52519', 'Vesvres-sous-Chalancey', '31T', 662804, 5284528, 47.6936, 5.16972, 410),
('52520', 'Vicq', '31T', 694499, 5311060, 47.9233, 5.60362, 280),
('52522', 'Viéville', '31T', 658668, 5344936, 48.2378, 5.13694, 234),
('52523', 'Vignes-la-Côte', '31T', 640361, 5359223, 48.3706, 4.89528, 250),
('52524', 'Vignory', '31T', 656094, 5349252, 48.2772, 5.10389, 250),
('52525', 'Villars-en-Azois', '31T', 629999, 5325183, 48.0667, 4.745, 233),
('52526', 'Villars-Santenoge', '31T', 648178, 5290469, 47.7506, 4.97695, 350),
('52528', 'Ville-en-Blaisois', '31T', 644815, 5366966, 48.4392, 4.95806, 190),
('52529', 'Villegusien-le-Lac', '31T', 673933, 5289732, 47.7375, 5.32, 300),
('52534', 'Villiers-en-Lieu', '31T', 639953, 5392176, 48.6669, 4.90083, 140),
('52535', 'Villiers-le-Sec', '31T', 653675, 5330279, 48.1072, 5.06444, 287),
('52536', 'Villiers-lès-Aprey', '31T', 665877, 5290855, 47.7497, 5.21306, 380),
('52538', 'Villiers-sur-Suize', '31T', 663875, 5316565, 47.9814, 5.19611, 340),
('52539', 'Violot', '31T', 680743, 5295935, 47.7914, 5.41333, 320),
('52540', 'Vitry-en-Montagne', '31T', 656359, 5299210, 47.8272, 5.08917, 353),
('52541', 'Vitry-lès-Nogent', '31T', 675066, 5318286, 47.9939, 5.34666, 400),
('52542', 'Vivey', '31T', 655094, 5288951, 47.7353, 5.06862, 410),
('52543', 'Voillecomte', '31T', 638086, 5373995, 48.5039, 4.86945, 150),
('52544', 'Voisey', '31T', 707849, 5307261, 47.885, 5.78028, 260),
('52545', 'Voisines', '31T', 663344, 5303080, 47.8603, 5.18389, 405),
('52546', 'Voncourt', '31T', 700483, 5288209, 47.7161, 5.67306, 268),
('52547', 'Vouécourt', '31T', 658579, 5348147, 48.2667, 5.13694, 230),
('52548', 'Vraincourt', '31T', 657937, 5345256, 48.2408, 5.12722, 230),
('52549', 'Vroncourt-la-Côte', '31T', 686679, 5335555, 48.1458, 5.50972, 400),
('52550', 'Wassy', '31T', 643908, 5373523, 48.4983, 4.94806, 170),
('53001', 'Ahuillé', '30T', 658846, 5320626, 48.0192, -0.869729, 90),
('53002', 'Alexain', '30T', 665808, 5344305, 48.2303, -0.767222, 126),
('53003', 'Ambrières-les-Vallées', '30T', 675411, 5363597, 48.4011, -0.629996, 110),
('53004', 'Ampoigné', '30T', 662854, 5297597, 47.8111, -0.824717, 60),
('53005', 'Andouillé', '30T', 664784, 5338312, 48.1767, -0.783327, 90),
('53006', 'Argenton-Notre-Dame', '30T', 680551, 5294755, 47.7808, -0.589722, 67),
('53007', 'Argentré', '30T', 675671, 5328347, 48.0842, -0.641109, 108),
('53008', 'Aron', '30T', 681085, 5352125, 48.2964, -0.558339, 123),
('53009', 'Arquenay', '30T', 681319, 5317985, 47.9894, -0.569725, 78),
('53010', 'Assé-le-Bérenger', '30T', 699305, 5337094, 48.1558, -0.320003, 129),
('53011', 'Astillé', '30T', 660467, 5314554, 47.9642, -0.850275, 105),
('53012', 'Athée', '30T', 653147, 5305797, 47.8872, -0.951385, 50),
('53013', 'Averton', '30T', 705765, 5356921, 48.3319, -0.223608, 160),
('53014', 'Azé', '30T', 673265, 5298827, 47.8194, -0.685277, 40),
('53015', 'La Baconnière', '30T', 656565, 5338854, 48.1836, -0.89361, 196),
('53016', 'Bais', '30T', 695844, 5347545, 48.2508, -0.361668, 190),
('53017', 'Ballée', '30T', 692843, 5312117, 47.9333, -0.418054, 50),
('53018', 'Ballots', '30T', 645958, 5306599, 47.8961, -1.04722, 80),
('53019', 'Bannes', '30T', 697756, 5317816, 47.9831, -0.349726, 80),
('53021', 'La Bazoge-Montpinçon', '30T', 679895, 5349986, 48.2775, -0.57528, 125),
('53022', 'La Bazouge-de-Chemeré', '30T', 687492, 5319543, 48.0017, -0.486386, 80),
('53023', 'La Bazouge-des-Alleux', '30T', 677642, 5339532, 48.1842, -0.610002, 111),
('53025', 'Bazougers', '30T', 680560, 5321020, 48.0169, -0.578611, 80),
('53026', 'Beaulieu-sur-Oudon', '30T', 649737, 5318652, 48.0036, -0.992498, 96),
('53028', 'Belgeard', '30T', 681299, 5348671, 48.2653, -0.556938, 140),
('53029', 'Bierné', '30T', 684151, 5298113, 47.81, -0.540284, 87),
('53030', 'Le Bignon-du-Maine', '30T', 678444, 5313693, 47.9517, -0.610006, 100),
('53031', 'La Bigottière', '30T', 663636, 5343007, 48.2192, -0.796948, 120),
('53032', 'Blandouet', '30T', 699129, 5325498, 48.0517, -0.327778, 95),
('53033', 'La Boissière', '30T', 651151, 5293913, 47.7808, -0.982216, 55),
('53034', 'Bonchamp-lès-Laval', '30T', 671481, 5327200, 48.075, -0.697784, 90),
('53035', 'Bouchamps-lès-Craon', '30T', 650263, 5297628, 47.8144, -0.992776, 70),
('53036', 'Bouère', '30T', 688714, 5304378, 47.865, -0.476665, 70),
('53037', 'Bouessay', '30T', 694903, 5305851, 47.8764, -0.393333, 46),
('53038', 'Boulay-les-Ifs', '30T', 712206, 5367113, 48.4214, -0.131667, 220),
('53039', 'Le Bourgneuf-la-Forêt', '30T', 650968, 5336417, 48.1631, -0.969726, 152),
('53040', 'Bourgon', '30T', 643834, 5336572, 48.1661, -1.06556, 127),
('53041', 'Brains-sur-les-Marches', '30T', 635955, 5305305, 47.8867, -1.18139, 95),
('53042', 'Brecé', '30T', 663681, 5362938, 48.3983, -0.788611, 170),
('53043', 'Brée', '30T', 684493, 5336010, 48.1506, -0.519444, 91),
('53045', 'La Brûlatte', '30T', 652538, 5327931, 48.0864, -0.951663, 120),
('53046', 'Le Buret', '30T', 685743, 5310741, 47.9231, -0.513613, 94),
('53047', 'Carelles', '30T', 655280, 5360909, 48.3822, -0.902781, 215),
('53048', 'Chailland', '30T', 658050, 5343436, 48.2244, -0.871939, 100),
('53049', 'Châlons-du-Maine', '30T', 675175, 5337107, 48.1631, -0.644163, 130),
('53050', 'Chammes', '30T', 695327, 5328210, 48.0772, -0.377505, 90),
('53051', 'Champéon', '30T', 683879, 5360095, 48.3672, -0.517225, 198),
('53052', 'Champfrémont', '30T', 715096, 5367963, 48.4281, -0.0922195, 207),
('53053', 'Champgenéteux', '30T', 695649, 5352020, 48.2911, -0.362222, 250),
('53054', 'Changé', '30T', 664575, 5329748, 48.0997, -0.789446, 60),
('53055', 'Chantrigné', '30T', 679907, 5365222, 48.4144, -0.568609, 134),
('53056', 'La Chapelle-Anthenaise', '30T', 672910, 5332682, 48.1239, -0.676394, 110),
('53057', 'La Chapelle-au-Riboul', '30T', 690192, 5354833, 48.3181, -0.434449, 160),
('53058', 'La Chapelle-Craonnaise', '30T', 655745, 5307288, 47.9, -0.916117, 70),
('53059', 'La Chapelle-Rainsouin', '30T', 684616, 5330266, 48.0989, -0.52028, 114),
('53061', 'Charchigné', '30T', 691897, 5365986, 48.4178, -0.406386, 236),
('53062', 'Château-Gontier', '30T', 671589, 5299889, 47.8294, -0.707228, 50),
('53063', 'Châtelain', '30T', 680084, 5297706, 47.8075, -0.594726, 72),
('53064', 'Châtillon-sur-Colmont', '30T', 667350, 5356432, 48.3389, -0.74167, 210),
('53065', 'Châtres-la-Forêt', '30T', 691047, 5334216, 48.1325, -0.432219, 105),
('53066', 'Chemazé', '30T', 666861, 5295024, 47.7869, -0.772225, 85),
('53067', 'Chémeré-le-Roi', '30T', 691163, 5317037, 47.9781, -0.438337, 80),
('53068', 'Chérancé', '30T', 654622, 5295673, 47.7958, -0.935284, 40),
('53069', 'Chevaigné-du-Maine', '30T', 693217, 5368287, 48.4381, -0.387504, 180),
('53071', 'Colombiers-du-Plessis', '30T', 659899, 5362057, 48.3914, -0.840005, 200),
('53072', 'Commer', '30T', 676688, 5345652, 48.2394, -0.620276, 135),
('53073', 'Congrier', '30T', 640956, 5297023, 47.8111, -1.11722, 80),
('53074', 'Contest', '30T', 673950, 5348102, 48.2622, -0.656114, 118),
('53075', 'Cosmes', '30T', 658297, 5309705, 47.9211, -0.881108, 76),
('53076', 'Cossé-en-Champagne', '30T', 699200, 5315671, 47.9633, -0.33139, 70),
('53077', 'Cossé-le-Vivien', '30T', 655937, 5312483, 47.9467, -0.91167, 80),
('53078', 'Coudray', '30T', 676607, 5295684, 47.7903, -0.641948, 67),
('53079', 'Couesmes-Vaucé', '30T', 669218, 5369064, 48.4519, -0.711393, 160),
('53080', 'Couptrain', '30T', 699923, 5373497, 48.4828, -0.294446, 188),
('53082', 'Courbeveille', '30T', 657745, 5317692, 47.9931, -0.885562, 105),
('53083', 'Courcité', '30T', 704056, 5353985, 48.3061, -0.24806, 180),
('53084', 'Craon', '30T', 653320, 5301631, 47.8497, -0.95055, 50),
('53085', 'Crennes-sur-Fraubée', '30T', 701591, 5361841, 48.3775, -0.277505, 278),
('53086', 'La Croixille', '30T', 644529, 5340946, 48.2053, -1.05473, 178),
('53087', 'La Cropte', '30T', 687171, 5314742, 47.9586, -0.492777, 60),
('53088', 'Cuillé', '30T', 640419, 5314802, 47.9711, -1.11861, 80),
('53089', 'Daon', '30T', 677136, 5291343, 47.7511, -0.636661, 40),
('53090', 'Denazé', '30T', 657969, 5305742, 47.8856, -0.886947, 80),
('53091', 'Désertines', '30T', 657589, 5370397, 48.4669, -0.868051, 187),
('53092', 'Deux-Évailles', '30T', 683830, 5340531, 48.1914, -0.526395, 100),
('53093', 'La Dorée', '30T', 650455, 5368225, 48.4492, -0.96528, 200),
('53094', 'Entrammes', '30T', 670410, 5318640, 47.9983, -0.715557, 50),
('53095', 'Épineux-le-Seguin', '30T', 697035, 5313434, 47.9439, -0.361386, 91),
('53096', 'Ernée', '30T', 653108, 5351396, 48.2972, -0.935554, 140),
('53097', 'Évron', '30T', 693299, 5336764, 48.1547, -0.400827, 115),
('53098', 'Fontaine-Couverte', '30T', 638927, 5307847, 47.9089, -1.14083, 70),
('53099', 'Forcé', '30T', 671294, 5322374, 48.0317, -0.702225, 60),
('53100', 'Fougerolles-du-Plessis', '30T', 649905, 5371145, 48.4756, -0.971667, 186),
('53101', 'Fromentières', '30T', 674631, 5303904, 47.8647, -0.664995, 50),
('53102', 'Gastines', '30T', 641589, 5312761, 47.9525, -1.10361, 85),
('53103', 'Le Genest-Saint-Isle', '30T', 657528, 5329364, 48.0981, -0.884174, 100),
('53104', 'Gennes-sur-Glaize', '30T', 678884, 5302860, 47.8542, -0.60861, 68),
('53105', 'Gesnes', '30T', 679610, 5335422, 48.1467, -0.585284, 97),
('53106', 'Gesvres', '30T', 711354, 5361269, 48.3692, -0.146109, 200),
('53107', 'Gorron', '30T', 661872, 5364307, 48.4111, -0.812505, 178),
('53108', 'La Gravelle', '30T', 647883, 5326234, 48.0722, -1.01472, 162),
('53109', 'Grazay', '30T', 686774, 5351598, 48.29, -0.48194, 150),
('53110', 'Grez-en-Bouère', '30T', 685193, 5305222, 47.8736, -0.523337, 100),
('53111', 'La Haie-Traversaine', '30T', 677104, 5360127, 48.3694, -0.608605, 111),
('53112', 'Le Ham', '30T', 694180, 5361798, 48.3794, -0.3775, 203),
('53113', 'Hambers', '30T', 691664, 5347867, 48.255, -0.417774, 161),
('53114', 'Hardanges', '30T', 692535, 5356890, 48.3358, -0.401938, 214),
('53115', 'Hercé', '30T', 658352, 5364424, 48.4131, -0.859994, 190),
('53116', 'Le Horps', '30T', 687964, 5363598, 48.3975, -0.460557, 260),
('53117', 'Houssay', '30T', 669215, 5309212, 47.9139, -0.735273, 90),
('53118', 'Le Housseau-Brétignolles', '30T', 683165, 5371353, 48.4686, -0.52194, 200),
('53119', 'L''Huisserie', '30T', 666312, 5321239, 48.0228, -0.769442, 100),
('53120', 'Izé', '30T', 700050, 5345342, 48.2297, -0.306112, 270),
('53121', 'Javron-les-Chapelles', '30T', 697034, 5366162, 48.4178, -0.33695, 180),
('53122', 'Jublains', '30T', 685949, 5347801, 48.2561, -0.494721, 154),
('53123', 'Juvigné', '30T', 646025, 5343826, 48.2308, -1.03361, 171),
('53124', 'Laigné', '30T', 663212, 5301130, 47.8428, -0.818607, 70),
('53125', 'Landivy', '30T', 645269, 5371704, 48.4817, -1.03416, 190),
('53126', 'Larchamp', '30T', 648306, 5358467, 48.3619, -0.997772, 200),
('53127', 'Lassay-les-Châteaux', '30T', 685162, 5368111, 48.4389, -0.496383, 190),
('53128', 'Laubrières', '30T', 643090, 5311655, 47.9422, -1.08389, 84),
('53129', 'Launay-Villiers', '30T', 648139, 5333130, 48.1342, -1.00889, 169),
('53130', 'Laval', '30T', 665884, 5326696, 48.0719, -0.773062, 51),
('53131', 'Lesbois', '30T', 662288, 5367748, 48.4419, -0.805556, 162),
('53132', 'Levaré', '30T', 654514, 5364843, 48.4178, -0.911671, 231),
('53133', 'Lignières-Orgères', '30T', 706088, 5380272, 48.5417, -0.207771, 282),
('53134', 'Livet', '30T', 688889, 5331270, 48.1067, -0.462499, 120),
('53135', 'Livré', '30T', 650899, 5305120, 47.8817, -0.981673, 50),
('53136', 'Loigné-sur-Mayenne', '30T', 668353, 5304583, 47.8725, -0.748606, 75),
('53137', 'Loiron', '30T', 653883, 5324847, 48.0583, -0.934725, 130),
('53138', 'Longuefuye', '30T', 678486, 5304300, 47.8672, -0.613331, 81),
('53139', 'Loupfougères', '30T', 696388, 5357485, 48.34, -0.349725, 214),
('53140', 'Louverné', '30T', 669977, 5332532, 48.1233, -0.715836, 122),
('53141', 'Louvigné', '30T', 676648, 5325534, 48.0586, -0.629164, 80),
('53142', 'Madré', '30T', 693681, 5372754, 48.4781, -0.37917, 160),
('53143', 'Maisoncelles-du-Maine', '30T', 675306, 5315172, 47.9658, -0.651395, 90),
('53144', 'Marcillé-la-Ville', '30T', 685725, 5353387, 48.3064, -0.495281, 141),
('53145', 'Marigné-Peuton', '30T', 663731, 5304079, 47.8692, -0.81056, 77),
('53146', 'Martigné-sur-Mayenne', '30T', 673822, 5340805, 48.1967, -0.66083, 130),
('53147', 'Mayenne', '30T', 676908, 5352519, 48.3011, -0.614443, 110),
('53148', 'Mée', '30T', 660170, 5296071, 47.7981, -0.861105, 60),
('53150', 'Ménil', '30T', 673990, 5294090, 47.7767, -0.677499, 30),
('53151', 'Méral', '30T', 650628, 5313917, 47.9608, -0.982221, 85),
('53152', 'Meslay-du-Maine', '30T', 682798, 5313891, 47.9522, -0.551661, 82),
('53153', 'Mézangers', '30T', 690815, 5340544, 48.1894, -0.432496, 117),
('53154', 'Montaudin', '30T', 648956, 5361141, 48.3858, -0.988055, 183),
('53155', 'Montenay', '30T', 656162, 5350521, 48.2886, -0.894727, 140),
('53156', 'Montflours', '30T', 668562, 5337743, 48.1706, -0.732772, 99),
('53157', 'Montigné-le-Brillant', '30T', 662968, 5319289, 48.0061, -0.814998, 80),
('53158', 'Montjean', '30T', 652321, 5318935, 48.0056, -0.957777, 84),
('53159', 'Montourtier', '30T', 682075, 5341804, 48.2033, -0.549442, 126),
('53160', 'Montreuil-Poulay', '30T', 683334, 5361685, 48.3817, -0.523883, 210),
('53161', 'Montsûrs', '30T', 682092, 5334141, 48.1344, -0.552495, 90),
('53162', 'Moulay', '30T', 676207, 5349191, 48.2714, -0.625275, 110),
('53163', 'Neau', '30T', 687861, 5336738, 48.1561, -0.473885, 92),
('53164', 'Neuilly-le-Vendin', '30T', 696566, 5374893, 48.4964, -0.339168, 155),
('53165', 'Niafles', '30T', 649482, 5301283, 47.8475, -1.00194, 40),
('53168', 'Nuillé-sur-Vicoin', '30T', 665659, 5317265, 47.9872, -0.779727, 70),
('53169', 'Olivet', '30T', 655183, 5331895, 48.1214, -0.914728, 130),
('53170', 'Oisseau', '30T', 672536, 5358657, 48.3575, -0.670834, 160),
('53172', 'Origné', '30T', 669521, 5313609, 47.9533, -0.72945, 95),
('53173', 'La Pallu', '30T', 699620, 5376268, 48.5078, -0.297218, 180),
('53174', 'Parigné-sur-Braye', '30T', 673975, 5354035, 48.3156, -0.653334, 147),
('53175', 'Parné-sur-Roc', '30T', 674012, 5319551, 48.0056, -0.666942, 70),
('53176', 'Le Pas', '30T', 670112, 5366681, 48.4303, -0.70028, 150),
('53177', 'La Pellerine', '30T', 644509, 5353117, 48.3147, -1.05084, 210),
('53178', 'Peuton', '30T', 662744, 5305905, 47.8858, -0.82306, 75),
('53179', 'Placé', '30T', 665071, 5346941, 48.2542, -0.776111, 160),
('53180', 'Pommerieux', '30T', 657408, 5298868, 47.8239, -0.896947, 70),
('53181', 'Pontmain', '30T', 643623, 5366935, 48.4392, -1.05806, 160),
('53182', 'Port-Brillet', '30T', 650950, 5330824, 48.1128, -0.97195, 120),
('53184', 'Préaux', '30T', 689278, 5312525, 47.9381, -0.465557, 60),
('53185', 'Pré-en-Pail', '30T', 707077, 5371188, 48.4597, -0.198893, 226),
('53186', 'Quelaines-Saint-Gault', '30T', 664179, 5310271, 47.9247, -0.802218, 90),
('53187', 'Ravigny', '30T', 717304, 5369934, 48.445, -0.0613892, 201),
('53188', 'Renazé', '30T', 645615, 5295470, 47.7961, -1.05555, 79),
('53189', 'Rennes-en-Grenouilles', '30T', 683857, 5374064, 48.4928, -0.511395, 120),
('53190', 'Le Ribay', '30T', 691757, 5362211, 48.3839, -0.41, 209),
('53191', 'La Roë', '30T', 641247, 5306389, 47.8953, -1.11028, 72),
('53192', 'La Rouaudière', '30T', 635354, 5299020, 47.8303, -1.19139, 98),
('53193', 'Ruillé-Froid-Fonds', '30T', 676317, 5307911, 47.9003, -0.640835, 89),
('53194', 'Ruillé-le-Gravelais', '30T', 652466, 5324408, 48.0547, -0.953886, 139),
('53195', 'Sacé', '30T', 669997, 5339516, 48.1861, -0.712777, 111),
('53196', 'Saint-Aignan-de-Couptrain', '30T', 699456, 5370420, 48.4553, -0.302226, 180),
('53197', 'Saint-Aignan-sur-Roë', '30T', 639480, 5300446, 47.8422, -1.13583, 100),
('53198', 'Saint-Aubin-du-Désert', '30T', 708162, 5353948, 48.3044, -0.192773, 180),
('53199', 'Saint-Aubin-Fosse-Louvain', '30T', 660268, 5370101, 48.4636, -0.831949, 174),
('53200', 'Saint-Baudelle', '30T', 675598, 5350192, 48.2806, -0.63306, 110),
('53201', 'Saint-Berthevin', '30T', 661633, 5326203, 48.0686, -0.830274, 100),
('53202', 'Saint-Berthevin-la-Tannière', '30T', 652040, 5362799, 48.4, -0.945827, 210),
('53203', 'Saint-Brice', '30T', 691290, 5303814, 47.8592, -0.442505, 54),
('53204', 'Saint-Calais-du-Désert', '30T', 702496, 5373959, 48.4861, -0.259443, 225),
('53205', 'Saint-Céneré', '30T', 678850, 5332617, 48.1217, -0.59667, 88),
('53206', 'Saint-Charles-la-Forêt', '30T', 682590, 5309960, 47.9169, -0.556111, 110),
('53207', 'Saint-Christophe-du-Luat', '30T', 688830, 5334297, 48.1339, -0.461951, 100),
('53208', 'Saint-Cyr-en-Pail', '30T', 703743, 5368997, 48.4411, -0.245003, 300),
('53209', 'Saint-Cyr-le-Gravelais', '30T', 647142, 5322013, 48.0344, -1.02611, 141),
('53210', 'Saint-Denis-d''Anjou', '30T', 691601, 5296315, 47.7917, -0.441668, 54),
('53211', 'Saint-Denis-de-Gastines', '30T', 658839, 5356558, 48.3422, -0.85639, 210),
('53212', 'Saint-Denis-du-Maine', '30T', 684717, 5315528, 47.9664, -0.52528, 70),
('53213', 'Saint-Ellier-du-Maine', '30T', 644594, 5362727, 48.4011, -1.04639, 190),
('53214', 'Saint-Erblon', '30T', 637317, 5294309, 47.7875, -1.16666, 100),
('53215', 'Saint-Fort', '30T', 670717, 5296310, 47.7975, -0.720279, 69),
('53216', 'Saint-Fraimbault-de-Prières', '30T', 679313, 5357971, 48.3494, -0.579723, 100),
('53218', 'Sainte-Gemmes-le-Robert', '30T', 695264, 5341591, 48.1975, -0.372216, 136),
('53219', 'Saint-Georges-Buttavent', '30T', 670903, 5353386, 48.3106, -0.694998, 170),
('53220', 'Saint-Georges-le-Fléchard', '30T', 685794, 5323289, 48.0358, -0.507505, 105),
('53221', 'Saint-Georges-sur-Erve', '30T', 700890, 5338479, 48.1678, -0.298061, 130),
('53222', 'Saint-Germain-d''Anxure', '30T', 668203, 5343603, 48.2233, -0.735275, 115),
('53223', 'Saint-Germain-de-Coulamer', '30T', 709957, 5349439, 48.2633, -0.170837, 170),
('53224', 'Saint-Germain-le-Fouilloux', '30T', 664478, 5333854, 48.1367, -0.789164, 96),
('53225', 'Saint-Germain-le-Guillaume', '30T', 661573, 5341496, 48.2061, -0.825277, 110),
('53226', 'Saint-Hilaire-du-Maine', '30T', 653754, 5343504, 48.2261, -0.929718, 160),
('53228', 'Saint-Jean-sur-Erve', '30T', 694396, 5323295, 48.0333, -0.392224, 80),
('53229', 'Saint-Jean-sur-Mayenne', '30T', 667306, 5333318, 48.1311, -0.751392, 60),
('53230', 'Saint-Julien-du-Terroux', '30T', 691439, 5372832, 48.4794, -0.40944, 155),
('53231', 'Saint-Laurent-des-Mortiers', '30T', 683867, 5293963, 47.7728, -0.545831, 60),
('53232', 'Saint-Léger', '30T', 689723, 5328578, 48.0822, -0.452503, 127),
('53233', 'Saint-Loup-du-Dorat', '30T', 693018, 5307518, 47.8919, -0.417772, 50),
('53234', 'Saint-Loup-du-Gast', '30T', 678697, 5361846, 48.3844, -0.586384, 131),
('53235', 'Sainte-Marie-du-Bois', '30T', 686125, 5371325, 48.4675, -0.481946, 190),
('53236', 'Saint-Mars-du-Désert', '30T', 710714, 5352960, 48.2947, -0.158894, 137),
('53237', 'Saint-Mars-sur-Colmont', '30T', 670377, 5360601, 48.3756, -0.699168, 169),
('53238', 'Saint-Mars-sur-la-Futaie', '30T', 646948, 5366372, 48.4333, -1.01333, 210),
('53239', 'Saint-Martin-de-Connée', '30T', 706735, 5343819, 48.2139, -0.216942, 200),
('53240', 'Saint-Martin-du-Limet', '30T', 648056, 5297663, 47.8153, -1.02223, 80),
('53241', 'Saint-Michel-de-Feins', '30T', 682202, 5294590, 47.7789, -0.567771, 79),
('53242', 'Saint-Michel-de-la-Roë', '30T', 639960, 5304628, 47.8797, -1.12806, 90),
('53243', 'Saint-Ouën-des-Toits', '30T', 655795, 5333735, 48.1378, -0.905837, 140),
('53244', 'Saint-Ouën-des-Vallons', '30T', 682237, 5338008, 48.1692, -0.548892, 90),
('53245', 'Saint-Pierre-des-Landes', '30T', 646417, 5348656, 48.2742, -1.02667, 140),
('53246', 'Saint-Pierre-des-Nids', '30T', 714666, 5364639, 48.3983, -0.0997252, 181),
('53247', 'Saint-Pierre-la-Cour', '30T', 646932, 5330998, 48.1153, -1.02584, 129),
('53248', 'Saint-Pierre-sur-Erve', '30T', 694425, 5320608, 48.0092, -0.393054, 60),
('53249', 'Saint-Pierre-sur-Orthe', '30T', 707655, 5343512, 48.2108, -0.204722, 150),
('53250', 'Saint-Poix', '30T', 646071, 5314418, 47.9664, -1.04306, 90),
('53251', 'Saint-Quentin-les-Anges', '30T', 658371, 5293333, 47.7739, -0.886111, 65),
('53252', 'Saint-Samson', '30T', 707540, 5373710, 48.4822, -0.191386, 240),
('53253', 'Saint-Saturnin-du-Limet', '30T', 644739, 5297209, 47.8119, -1.06666, 80),
('53254', 'Saint-Sulpice', '30T', 670769, 5307929, 47.9019, -0.714999, 80),
('53255', 'Sainte-Suzanne', '30T', 697152, 5330560, 48.0978, -0.351944, 160),
('53256', 'Saint-Thomas-de-Courceriers', '30T', 702795, 5350601, 48.2761, -0.266671, 240),
('53257', 'Saulges', '30T', 693696, 5317616, 47.9825, -0.404169, 100),
('53258', 'La Selle-Craonnaise', '30T', 646397, 5300741, 47.8433, -1.04333, 70),
('53259', 'Senonnes', '30T', 634688, 5295483, 47.7986, -1.20138, 80),
('53260', 'Simplé', '30T', 660558, 5306060, 47.8878, -0.852222, 80),
('53261', 'Soucé', '30T', 672651, 5371763, 48.4753, -0.663889, 140),
('53262', 'Soulgé-sur-Ouette', '30T', 681320, 5325834, 48.06, -0.56639, 96),
('53264', 'Thorigné-en-Charnie', '30T', 697169, 5319805, 48.0011, -0.356671, 87),
('53265', 'Torcé-Viviers-en-Charnie', '30T', 703947, 5331045, 48.1, -0.260551, 162),
('53266', 'Trans', '30T', 699792, 5350341, 48.2747, -0.307222, 279),
('53267', 'Vaiges', '30T', 688141, 5323798, 48.0397, -0.475827, 100),
('53269', 'Vautorte', '30T', 660720, 5351946, 48.3003, -0.832782, 191),
('53270', 'Vieuvy', '30T', 657896, 5368211, 48.4472, -0.864726, 190),
('53271', 'Villaines-la-Juhel', '30T', 701778, 5358324, 48.3458, -0.276669, 190),
('53272', 'Villepail', '30T', 702282, 5363844, 48.3953, -0.26722, 260),
('53273', 'Villiers-Charlemagne', '30T', 673607, 5310269, 47.9222, -0.676115, 80),
('53274', 'Vimarcé', '30T', 707075, 5341853, 48.1961, -0.21333, 182),
('53276', 'Voutré', '30T', 701442, 5335160, 48.1378, -0.292216, 140),
('54001', 'Abaucourt', '32T', 299002, 5419595, 48.8967, 6.2575, 190),
('54002', 'Abbéville-lès-Conflans', '31T', 707332, 5453404, 49.1983, 5.84612, 220),
('54003', 'Aboncourt', '31T', 719731, 5360381, 48.3583, 5.96639, 360),
('54004', 'Affléville', '31T', 701030, 5461177, 49.2703, 5.76361, 250),
('54005', 'Affracourt', '32T', 290859, 5371543, 48.4622, 6.17083, 260),
('54006', 'Agincourt', '32T', 296631, 5401472, 48.7331, 6.23416, 220),
('54007', 'Aingeray', '32T', 279665, 5402763, 48.7389, 6.00305, 210),
('54008', 'Allain', '31T', 714727, 5381429, 48.5492, 5.90972, 300),
('54009', 'Allamont', '31T', 701691, 5444754, 49.1225, 5.76445, 216),
('54010', 'Allamps', '31T', 707395, 5381000, 48.5478, 5.81028, 300),
('54011', 'Allondrelle-la-Malmaison', '31T', 685721, 5487223, 49.5092, 5.56555, 290),
('54012', 'Amance', '32T', 299943, 5403733, 48.7544, 6.27806, 380),
('54013', 'Amenoncourt', '32T', 337139, 5388437, 48.6278, 6.78973, 280),
('54014', 'Ancerviller', '32T', 340154, 5377752, 48.5325, 6.83472, 300),
('54015', 'Anderny', '31T', 709443, 5468696, 49.335, 5.88306, 300),
('54016', 'Andilly', '31T', 711788, 5405433, 48.7658, 5.88222, 218),
('54017', 'Angomont', '32T', 348450, 5375669, 48.5158, 6.94778, 360),
('54018', 'Anoux', '31T', 708666, 5462018, 49.2753, 5.86889, 250),
('54019', 'Ansauville', '31T', 707395, 5411451, 48.8214, 5.82555, 240),
('54020', 'Anthelupt', '32T', 309278, 5387304, 48.6097, 6.41251, 250),
('54021', 'Armaucourt', '32T', 302044, 5410521, 48.8161, 6.30334, 204),
('54022', 'Arnaville', '32T', 282989, 5432873, 49.0106, 6.03223, 190),
('54023', 'Arracourt', '32T', 318390, 5399705, 48.7239, 6.53056, 224),
('54024', 'Arraye-et-Han', '32T', 301156, 5413119, 48.8392, 6.29, 190),
('54025', 'Art-sur-Meurthe', '32T', 298588, 5392746, 48.6553, 6.265, 211),
('54026', 'Athienville', '32T', 315378, 5398907, 48.7158, 6.49, 230),
('54027', 'Atton', '32T', 286521, 5419441, 48.8911, 6.0875, 200),
('54028', 'Auboué', '31T', 717028, 5455199, 49.2111, 5.98, 220),
('54029', 'Audun-le-Roman', '31T', 710286, 5472531, 49.3692, 5.89667, 350),
('54030', 'Autrepierre', '32T', 337885, 5386623, 48.6117, 6.80055, 280),
('54031', 'Autreville-sur-Moselle', '32T', 288411, 5411763, 48.8228, 6.11722, 190),
('54032', 'Autrey', '32T', 288029, 5379408, 48.5319, 6.12861, 290),
('54033', 'Avillers', '31T', 698794, 5467063, 49.3239, 5.73584, 267),
('54034', 'Avrainville', '31T', 715876, 5406485, 48.7739, 5.93833, 240),
('54035', 'Avricourt', '32T', 338358, 5390256, 48.6444, 6.80555, 290),
('54036', 'Avril', '31T', 715567, 5463522, 49.2864, 5.96445, 300),
('54037', 'Azelot', '32T', 295967, 5385422, 48.5886, 6.23306, 290),
('54038', 'Azerailles', '32T', 329691, 5373114, 48.4881, 6.695, 270),
('54039', 'Baccarat', '32T', 333146, 5369086, 48.4528, 6.74333, 266),
('54040', 'Badonviller', '32T', 344399, 5373926, 48.4992, 6.89361, 330),
('54041', 'Bagneux', '31T', 712657, 5382433, 48.5589, 5.88222, 280),
('54042', 'Bainville-aux-Miroirs', '32T', 298758, 5368783, 48.44, 6.27888, 260),
('54043', 'Bainville-sur-Madon', '32T', 285767, 5385800, 48.5886, 6.09472, 226),
('54044', 'Barbas', '32T', 341186, 5382327, 48.5739, 6.84695, 270),
('54045', 'Barbonville', '32T', 304009, 5381396, 48.555, 6.34389, 240),
('54046', 'Barisey-au-Plain', '31T', 709761, 5378645, 48.5258, 5.84111, 285),
('54047', 'Barisey-la-Côte', '31T', 709725, 5380715, 48.5444, 5.84167, 290),
('54048', 'Les Baroches', '31T', 710569, 5457237, 49.2317, 5.8925, 225),
('54049', 'Baslieux', '31T', 700146, 5479262, 49.4331, 5.76056, 331),
('54050', 'Bathelémont-lès-Bauzemont', '32T', 317828, 5396262, 48.6928, 6.52445, 260),
('54051', 'Batilly', '31T', 716304, 5450935, 49.1731, 5.96778, 250),
('54052', 'Battigny', '31T', 720062, 5370412, 48.4483, 5.97611, 350),
('54053', 'Bauzemont', '32T', 318005, 5394154, 48.6739, 6.52778, 250),
('54054', 'Bayon', '32T', 301484, 5372613, 48.4753, 6.31389, 250),
('54055', 'Bayonville-sur-Mad', '31T', 718721, 5433373, 49.0144, 5.99139, 190),
('54056', 'Bazailles', '31T', 700571, 5476465, 49.4078, 5.765, 326),
('54057', 'Beaumont', '31T', 704477, 5414775, 48.8522, 5.78751, 280),
('54058', 'Béchamps', '31T', 699574, 5454477, 49.2106, 5.74028, 228),
('54059', 'Belleau', '32T', 293169, 5412358, 48.8297, 6.18166, 240),
('54060', 'Belleville', '32T', 286959, 5411169, 48.8169, 6.09777, 200),
('54061', 'Bénaménil', '32T', 328222, 5382212, 48.5694, 6.67139, 240),
('54062', 'Benney', '32T', 294724, 5377182, 48.5142, 6.22028, 300),
('54063', 'Bernécourt', '31T', 708651, 5413909, 48.8431, 5.84389, 250),
('54064', 'Bertrambois', '32T', 351562, 5385504, 48.605, 6.98639, 340),
('54065', 'Bertrichamps', '32T', 336827, 5366291, 48.4286, 6.79417, 282),
('54066', 'Bettainvillers', '31T', 711251, 5464777, 49.2992, 5.90584, 287),
('54067', 'Beuveille', '31T', 695116, 5478957, 49.4319, 5.69111, 270),
('54068', 'Beuvezin', '31T', 719103, 5362769, 48.38, 5.95916, 400),
('54069', 'Beuvillers', '31T', 711616, 5474159, 49.3833, 5.91583, 370),
('54070', 'Bey-sur-Seille', '32T', 304816, 5409249, 48.8056, 6.34166, 210),
('54071', 'Bezange-la-Grande', '32T', 314284, 5402312, 48.7461, 6.47361, 210),
('54072', 'Bezaumont', '32T', 288074, 5415239, 48.8539, 6.11084, 290),
('54073', 'Bicqueley', '31T', 714559, 5390141, 48.6275, 5.91194, 220),
('54074', 'Bienville-la-Petite', '32T', 316422, 5390188, 48.6378, 6.50805, 230),
('54075', 'Bionville', '32T', 352913, 5372091, 48.4847, 7.00944, 350),
('54076', 'Blainville-sur-l''Eau', '32T', 308192, 5381314, 48.5556, 6.40055, 233),
('54077', 'Blâmont', '32T', 341013, 5384186, 48.5906, 6.84389, 260),
('54078', 'Blémerey', '32T', 332894, 5383463, 48.5819, 6.73417, 266),
('54079', 'Blénod-lès-Pont-à-Mousson', '32T', 283964, 5418705, 48.8836, 6.05305, 185),
('54080', 'Blénod-lès-Toul', '31T', 708436, 5386696, 48.5986, 5.82722, 300),
('54081', 'Boismont', '31T', 698826, 5476184, 49.4058, 5.74083, 300),
('54082', 'Boncourt', '31T', 706203, 5449991, 49.1681, 5.82889, 200),
('54083', 'Bonviller', '32T', 315568, 5389752, 48.6336, 6.49667, 250),
('54084', 'Mont-Bonvillers', '31T', 705858, 5467849, 49.3286, 5.83334, 335),
('54085', 'Borville', '32T', 307210, 5369354, 48.4478, 6.39278, 310),
('54086', 'Boucq', '31T', 702940, 5403157, 48.7483, 5.76084, 300),
('54087', 'Bouillonville', '31T', 708021, 5425294, 48.9456, 5.84111, 220),
('54088', 'Bouvron', '31T', 711868, 5402777, 48.7419, 5.88195, 220),
('54089', 'Bouxières-aux-Chênes', '32T', 298548, 5405855, 48.7731, 6.25806, 300),
('54090', 'Bouxières-aux-Dames', '32T', 291573, 5403482, 48.7494, 6.16444, 268),
('54091', 'Bouxières-sous-Froidmont', '32T', 286933, 5426475, 48.9544, 6.08944, 250),
('54092', 'Bouzanville', '32T', 285233, 5361984, 48.3744, 6.09972, 315),
('54093', 'Brainville', '31T', 704648, 5445450, 49.1278, 5.80528, 200),
('54094', 'Bralleville', '32T', 292062, 5365099, 48.4047, 6.19028, 260),
('54095', 'Bratte', '32T', 295656, 5410597, 48.8147, 6.21639, 310),
('54096', 'Bréhain-la-Ville', '31T', 708947, 5480087, 49.4375, 5.88222, 421),
('54097', 'Bréménil', '32T', 346338, 5376530, 48.5231, 6.91888, 315),
('54098', 'Brémoncourt', '32T', 304410, 5374025, 48.4889, 6.35277, 342),
('54099', 'Briey', '31T', 713997, 5459163, 49.2478, 5.94056, 250),
('54100', 'Brin-sur-Seille', '32T', 305477, 5406537, 48.7814, 6.35194, 200),
('54101', 'Brouville', '32T', 333868, 5374071, 48.4978, 6.75111, 290),
('54102', 'Bruley', '31T', 709705, 5398831, 48.7072, 5.85055, 250),
('54103', 'Bruville', '31T', 712783, 5446036, 49.1303, 5.91695, 230),
('54104', 'Buissoncourt', '32T', 304421, 5394982, 48.6772, 6.34306, 220),
('54105', 'Bulligny', '31T', 710364, 5383954, 48.5733, 5.85195, 300),
('54106', 'Bures', '32T', 321556, 5396389, 48.695, 6.575, 232),
('54107', 'Buriville', '32T', 330870, 5378857, 48.54, 6.70862, 262),
('54108', 'Burthecourt-aux-Chênes', '32T', 297076, 5384887, 48.5842, 6.24834, 310),
('54109', 'Ceintrey', '32T', 290561, 5378479, 48.5244, 6.16333, 240),
('54110', 'Cerville', '32T', 302189, 5397286, 48.6972, 6.31167, 239),
('54111', 'Chaligny', '32T', 285080, 5389815, 48.6244, 6.08333, 290),
('54112', 'Chambley-Bussières', '31T', 711881, 5436725, 49.0469, 5.89972, 250),
('54113', 'Champenoux', '32T', 304940, 5402259, 48.7428, 6.34666, 232),
('54114', 'Champey-sur-Moselle', '32T', 284746, 5426776, 48.9564, 6.05945, 180),
('54115', 'Champigneulles', '32T', 291225, 5401826, 48.7344, 6.16055, 217),
('54116', 'Chanteheux', '32T', 317902, 5385906, 48.5997, 6.53, 231),
('54117', 'Chaouilley', '32T', 283162, 5369205, 48.4386, 6.06806, 330),
('54118', 'Charency-Vezin', '31T', 681980, 5484717, 49.4878, 5.51277, 200),
('54119', 'Charey', '31T', 710694, 5431578, 49.0011, 5.88083, 250),
('54120', 'Charmes-la-Côte', '31T', 708567, 5389792, 48.6264, 5.83055, 320),
('54121', 'Charmois', '32T', 306949, 5379749, 48.5411, 6.38445, 260),
('54122', 'Chaudeney-sur-Moselle', '31T', 714105, 5392907, 48.6525, 5.90722, 223),
('54123', 'Chavigny', '32T', 288297, 5390342, 48.6303, 6.12666, 280),
('54124', 'Chazelles-sur-Albe', '32T', 336175, 5384200, 48.5894, 6.77833, 260);
INSERT INTO `ods_communes` (`oc_code_insee`, `oc_nom`, `oc_secteur`, `oc_x_utm`, `oc_y_utm`, `oc_latitude`, `oc_longitude`, `oc_altitude`) VALUES
('54125', 'Chenevières', '32T', 325009, 5376471, 48.5169, 6.63028, 254),
('54126', 'Chenicourt', '32T', 301268, 5415124, 48.8572, 6.29055, 200),
('54127', 'Chenières', '31T', 700372, 5483537, 49.4714, 5.76583, 350),
('54128', 'Choloy-Ménillot', '31T', 707903, 5393910, 48.6636, 5.82362, 245),
('54129', 'Cirey-sur-Vezouze', '32T', 348442, 5383023, 48.5819, 6.945, 300),
('54130', 'Clayeures', '32T', 308106, 5372137, 48.4731, 6.40361, 280),
('54131', 'Clémery', '32T', 293846, 5419629, 48.8953, 6.18722, 185),
('54132', 'Clérey-sur-Brenon', '32T', 288565, 5376729, 48.5081, 6.13722, 270),
('54133', 'Coincourt', '32T', 324129, 5396895, 48.7003, 6.60972, 240),
('54134', 'Colmey', '31T', 685331, 5481522, 49.4581, 5.5575, 210),
('54135', 'Colombey-les-Belles', '31T', 713873, 5379047, 48.5281, 5.89694, 330),
('54136', 'Conflans-en-Jarnisy', '31T', 708294, 5449915, 49.1667, 5.8575, 200),
('54137', 'Cons-la-Grandville', '31T', 695715, 5484729, 49.4836, 5.70222, 240),
('54138', 'Cosnes-et-Romain', '31T', 696354, 5488802, 49.52, 5.71305, 390),
('54139', 'Courbesseaux', '32T', 308392, 5396174, 48.6892, 6.3964, 230),
('54140', 'Courcelles', '32T', 280557, 5361978, 48.3728, 6.03666, 320),
('54141', 'Coyviller', '32T', 299464, 5385141, 48.5872, 6.28056, 270),
('54142', 'Crantenoy', '32T', 294967, 5372011, 48.4678, 6.2261, 290),
('54143', 'Crépey', '31T', 719470, 5379293, 48.5283, 5.97278, 340),
('54144', 'Crévéchamps', '32T', 297966, 5378240, 48.5247, 6.26362, 250),
('54145', 'Crévic', '32T', 308651, 5390571, 48.6389, 6.4025, 220),
('54146', 'Crézilles', '31T', 712488, 5385301, 48.5847, 5.8814, 250),
('54147', 'Crion', '32T', 317821, 5390358, 48.6397, 6.52695, 250),
('54148', 'Croismare', '32T', 320927, 5385654, 48.5983, 6.57111, 230),
('54149', 'Crusnes', '31T', 711479, 5479782, 49.4339, 5.91694, 372),
('54150', 'Custines', '32T', 290572, 5408404, 48.7933, 6.14834, 200),
('54151', 'Cutry', '31T', 698775, 5484777, 49.4831, 5.74444, 340),
('54152', 'Damelevières', '32T', 307110, 5381474, 48.5567, 6.38583, 220),
('54153', 'Dampvitoux', '31T', 707971, 5432589, 49.0111, 5.84416, 250),
('54154', 'Deneuvre', '32T', 332348, 5368492, 48.4472, 6.73278, 300),
('54155', 'Deuxville', '32T', 312441, 5388125, 48.6181, 6.455, 250),
('54156', 'Diarville', '32T', 287914, 5364264, 48.3958, 6.13473, 270),
('54157', 'Dieulouard', '32T', 284666, 5414163, 48.8431, 6.06501, 190),
('54158', 'Dolcourt', '31T', 719859, 5375103, 48.4906, 5.97583, 350),
('54159', 'Dombasle-sur-Meurthe', '32T', 304545, 5388548, 48.6194, 6.34778, 220),
('54160', 'Domèvre-en-Haye', '31T', 715135, 5411404, 48.8183, 5.93084, 220),
('54161', 'Domèvre-sur-Vezouze', '32T', 338174, 5380991, 48.5611, 6.80666, 260),
('54162', 'Domgermain', '31T', 708029, 5391596, 48.6428, 5.82416, 290),
('54163', 'Domjevin', '32T', 330271, 5382831, 48.5756, 6.69889, 250),
('54164', 'Dommarie-Eulmont', '32T', 280129, 5368456, 48.4308, 6.0275, 330),
('54165', 'Dommartemont', '32T', 294975, 5399245, 48.7125, 6.21278, 278),
('54166', 'Dommartin-la-Chaussée', '31T', 709274, 5432576, 49.0106, 5.86195, 250),
('54167', 'Dommartin-lès-Toul', '31T', 713943, 5395003, 48.6714, 5.9061, 210),
('54168', 'Dommartin-sous-Amance', '32T', 298318, 5402308, 48.7411, 6.25667, 220),
('54169', 'Domprix', '31T', 700201, 5467825, 49.3303, 5.75556, 300),
('54170', 'Domptail-en-l''Air', '32T', 302560, 5376933, 48.5144, 6.32639, 300),
('54171', 'Doncourt-lès-Conflans', '31T', 713899, 5447594, 49.1439, 5.93305, 220),
('54172', 'Doncourt-lès-Longuyon', '31T', 696650, 5480032, 49.4411, 5.71278, 306),
('54173', 'Drouville', '32T', 309100, 5394141, 48.6711, 6.40694, 245),
('54174', 'Écrouves', '31T', 709275, 5396094, 48.6828, 5.84333, 250),
('54175', 'Einvaux', '32T', 307616, 5374039, 48.49, 6.39611, 290),
('54176', 'Einville-au-Jard', '32T', 314931, 5392184, 48.6553, 6.48694, 225),
('54177', 'Emberménil', '32T', 330124, 5388830, 48.6294, 6.69444, 255),
('54178', 'Épiez-sur-Chiers', '31T', 681405, 5485069, 49.4911, 5.505, 205),
('54179', 'Éply', '32T', 293417, 5422335, 48.9194, 6.18, 240),
('54180', 'Erbéviller-sur-Amezule', '32T', 307687, 5400680, 48.7294, 6.38473, 260),
('54181', 'Errouville', '31T', 710511, 5477704, 49.4156, 5.9025, 370),
('54182', 'Essey-et-Maizerais', '31T', 705977, 5422188, 48.9183, 5.81166, 220),
('54183', 'Essey-la-Côte', '32T', 312547, 5366610, 48.4247, 6.46611, 280),
('54184', 'Essey-lès-Nancy', '32T', 295683, 5398446, 48.7056, 6.22278, 220),
('54185', 'Étreval', '32T', 282086, 5371194, 48.4561, 6.0525, 272),
('54186', 'Eulmont', '32T', 295783, 5403451, 48.7506, 6.22166, 250),
('54187', 'Euvezin', '31T', 707906, 5422909, 48.9242, 5.83833, 220),
('54188', 'Faulx', '32T', 294482, 5408105, 48.7919, 6.20166, 230),
('54189', 'Favières', '31T', 718575, 5372178, 48.4647, 5.95695, 340),
('54190', 'Fécocourt', '32T', 278435, 5365647, 48.405, 6.00611, 330),
('54191', 'Fenneviller', '32T', 343421, 5372717, 48.4881, 6.88084, 320),
('54192', 'Ferrières', '32T', 300156, 5381531, 48.555, 6.29167, 300),
('54193', 'Fey-en-Haye', '31T', 717092, 5420910, 48.9031, 5.9625, 350),
('54194', 'Fillières', '31T', 706251, 5476181, 49.4033, 5.84305, 360),
('54195', 'Flainval', '32T', 308190, 5388484, 48.62, 6.39722, 239),
('54196', 'Flavigny-sur-Moselle', '32T', 292420, 5383233, 48.5678, 6.18611, 230),
('54197', 'Fléville-devant-Nancy', '32T', 293924, 5389546, 48.625, 6.20334, 221),
('54198', 'Fléville-Lixières', '31T', 705479, 5458528, 49.245, 5.82334, 230),
('54199', 'Flin', '32T', 326767, 5374223, 48.4972, 6.655, 260),
('54200', 'Flirey', '31T', 708779, 5417562, 48.8758, 5.8475, 280),
('54201', 'Fontenoy-la-Joûte', '32T', 326993, 5369519, 48.455, 6.66, 280),
('54202', 'Fontenoy-sur-Moselle', '31T', 719356, 5399540, 48.7103, 5.98194, 210),
('54203', 'Forcelles-Saint-Gorgon', '32T', 285705, 5371179, 48.4572, 6.10139, 330),
('54204', 'Forcelles-sous-Gugney', '32T', 283729, 5364669, 48.3981, 6.07805, 320),
('54205', 'Foug', '31T', 705674, 5395497, 48.6786, 5.79417, 270),
('54206', 'Fraimbois', '32T', 318509, 5378036, 48.5292, 6.54166, 252),
('54207', 'Fraisnes-en-Saintois', '32T', 281947, 5362234, 48.3756, 6.05527, 320),
('54208', 'Francheville', '31T', 715458, 5402481, 48.7381, 5.93056, 210),
('54209', 'Franconville', '32T', 311635, 5375047, 48.5003, 6.45, 255),
('54210', 'Fréménil', '32T', 331281, 5381626, 48.565, 6.71306, 245),
('54211', 'Frémonville', '32T', 344472, 5384769, 48.5967, 6.89055, 290),
('54212', 'Fresnois-la-Montagne', '31T', 691610, 5485789, 49.4944, 5.64612, 320),
('54213', 'Friauville', '31T', 707325, 5447653, 49.1467, 5.84306, 200),
('54214', 'Frolois', '32T', 287858, 5383032, 48.5644, 6.12445, 283),
('54215', 'Frouard', '32T', 289204, 5404622, 48.7589, 6.13167, 210),
('54216', 'Froville', '32T', 304382, 5372017, 48.4708, 6.35333, 260),
('54217', 'Gélacourt', '32T', 332461, 5372320, 48.4817, 6.73278, 280),
('54218', 'Gélaucourt', '31T', 720996, 5371252, 48.4556, 5.98916, 306),
('54219', 'Gellenoncourt', '32T', 307533, 5394998, 48.6783, 6.38528, 239),
('54220', 'Gémonville', '31T', 713669, 5366519, 48.4156, 5.88778, 350),
('54221', 'Gerbécourt-et-Haplemont', '32T', 290317, 5374655, 48.49, 6.16195, 250),
('54222', 'Gerbéviller', '32T', 316024, 5374222, 48.4942, 6.50972, 250),
('54223', 'Germiny', '31T', 721090, 5381459, 48.5472, 5.99584, 350),
('54224', 'Germonville', '32T', 293654, 5365288, 48.4069, 6.21167, 309),
('54225', 'Gézoncourt', '31T', 719703, 5413623, 48.8367, 5.99417, 240),
('54226', 'Gibeaumeix', '31T', 701624, 5384531, 48.5814, 5.73388, 258),
('54227', 'Giraumont', '31T', 712315, 5450810, 49.1733, 5.91306, 222),
('54228', 'Giriviller', '32T', 314279, 5368623, 48.4433, 6.48861, 300),
('54229', 'Glonville', '32T', 329319, 5371672, 48.475, 6.69056, 270),
('54230', 'Gogney', '32T', 342172, 5386779, 48.6142, 6.85861, 280),
('54231', 'Gondrecourt-Aix', '31T', 701516, 5458413, 49.2453, 5.76889, 260),
('54232', 'Gondreville', '31T', 717716, 5397529, 48.6928, 5.95861, 210),
('54233', 'Gondrexon', '32T', 335594, 5386040, 48.6058, 6.76973, 269),
('54234', 'Gorcy', '31T', 694263, 5490427, 49.5353, 5.68499, 250),
('54235', 'Goviller', '32T', 279354, 5376000, 48.4983, 6.01306, 280),
('54236', 'Grand-Failly', '31T', 682371, 5477249, 49.4206, 5.51473, 220),
('54237', 'Grimonviller', '32T', 278372, 5363516, 48.3858, 6.00639, 376),
('54238', 'Gripport', '32T', 296444, 5366208, 48.4161, 6.24888, 280),
('54239', 'Griscourt', '32T', 280918, 5413320, 48.8342, 6.01444, 200),
('54240', 'Grosrouvres', '31T', 708398, 5412478, 48.8303, 5.83972, 240),
('54241', 'Gugney', '32T', 282496, 5364717, 48.3981, 6.06139, 336),
('54242', 'Gye', '31T', 711910, 5389206, 48.62, 5.87556, 230),
('54243', 'Hablainville', '32T', 332334, 5376341, 48.5178, 6.72945, 310),
('54244', 'Hagéville', '31T', 709249, 5434832, 49.0308, 5.86277, 236),
('54245', 'Haigneville', '32T', 303605, 5373898, 48.4875, 6.34195, 300),
('54246', 'Halloville', '32T', 342209, 5380073, 48.5539, 6.86166, 280),
('54247', 'Hammeville', '32T', 283236, 5375973, 48.4994, 6.06555, 310),
('54248', 'Hamonville', '31T', 706286, 5412183, 48.8283, 5.81083, 240),
('54249', 'Hannonville-Suzémont', '31T', 706903, 5442133, 49.0972, 5.83445, 200),
('54250', 'Haraucourt', '32T', 305918, 5393291, 48.6625, 6.36417, 260),
('54251', 'Harbouey', '32T', 344041, 5381783, 48.5697, 6.88583, 310),
('54252', 'Haroué', '32T', 291480, 5372200, 48.4683, 6.17889, 240),
('54253', 'Hatrize', '31T', 711973, 5452838, 49.1917, 5.90944, 200),
('54254', 'Haucourt-Moulaine', '31T', 703238, 5485560, 49.4886, 5.80638, 385),
('54255', 'Haudonville', '32T', 315044, 5375027, 48.5011, 6.49611, 240),
('54256', 'Haussonville', '32T', 302493, 5378543, 48.5289, 6.32472, 280),
('54257', 'Heillecourt', '32T', 293284, 5392753, 48.6536, 6.19306, 240),
('54258', 'Hénaménil', '32T', 320243, 5393742, 48.6708, 6.55833, 225),
('54259', 'Herbéviller', '32T', 334294, 5380856, 48.5589, 6.75417, 250),
('54260', 'Hériménil', '32T', 315430, 5382401, 48.5675, 6.49806, 239),
('54261', 'Herserange', '31T', 702102, 5489043, 49.5203, 5.7925, 300),
('54262', 'Hoéville', '32T', 311385, 5398175, 48.7081, 6.43611, 270),
('54263', 'Homécourt', '31T', 718256, 5456423, 49.2217, 5.99751, 200),
('54264', 'Houdelmont', '32T', 285109, 5379828, 48.5347, 6.08889, 280),
('54265', 'Houdemont', '32T', 291388, 5391896, 48.6453, 6.16778, 260),
('54266', 'Houdreville', '32T', 285998, 5376733, 48.5072, 6.1025, 311),
('54268', 'Housséville', '32T', 286706, 5365546, 48.4069, 6.11778, 290),
('54269', 'Hudiviller', '32T', 307857, 5386518, 48.6022, 6.39361, 250),
('54270', 'Hussigny-Godbrange', '31T', 707782, 5486319, 49.4939, 5.86945, 400),
('54271', 'Igney', '32T', 338878, 5389097, 48.6342, 6.81306, 350),
('54272', 'Jaillon', '31T', 718132, 5404718, 48.7572, 5.96806, 245),
('54273', 'Jarny', '31T', 709818, 5449293, 49.1606, 5.87805, 200),
('54274', 'Jarville-la-Malgrange', '32T', 293549, 5394413, 48.6686, 6.19583, 210),
('54275', 'Jaulny', '31T', 711369, 5428296, 48.9714, 5.88834, 210),
('54276', 'Jeandelaincourt', '32T', 297639, 5413492, 48.8414, 6.24194, 250),
('54277', 'Jeandelize', '31T', 703413, 5449238, 49.1622, 5.79028, 195),
('54278', 'Jevoncourt', '32T', 290541, 5366268, 48.4147, 6.16917, 260),
('54279', 'Jezainville', '32T', 282935, 5417415, 48.8717, 6.03972, 190),
('54281', 'Jolivet', '32T', 316123, 5386674, 48.6061, 6.50556, 230),
('54282', 'Joppécourt', '31T', 702907, 5474417, 49.3886, 5.79612, 320),
('54283', 'Jouaville', '31T', 715424, 5449570, 49.1611, 5.95499, 250),
('54284', 'Joudreville', '31T', 702080, 5462885, 49.2853, 5.77889, 270),
('54285', 'Juvrecourt', '32T', 320830, 5401851, 48.7439, 6.56278, 240),
('54286', 'Labry', '31T', 710070, 5450663, 49.1728, 5.88222, 200),
('54287', 'Lachapelle', '32T', 336527, 5365156, 48.4183, 6.79056, 289),
('54288', 'Lagney', '31T', 708763, 5401609, 48.7325, 5.83917, 250),
('54289', 'Laître-sous-Amance', '32T', 299609, 5402973, 48.7475, 6.27389, 260),
('54290', 'Laix', '31T', 701486, 5480641, 49.445, 5.77972, 350),
('54292', 'Lamath', '32T', 311534, 5378172, 48.5283, 6.44722, 232),
('54293', 'Landécourt', '32T', 309089, 5375070, 48.4997, 6.41555, 270),
('54294', 'Landremont', '32T', 290055, 5414762, 48.8503, 6.13805, 310),
('54295', 'Landres', '31T', 703976, 5466820, 49.32, 5.80694, 310),
('54296', 'Laneuvelotte', '32T', 300867, 5400980, 48.73, 6.29194, 230),
('54297', 'Laneuveville-aux-Bois', '32T', 326893, 5387012, 48.6122, 6.65139, 250),
('54298', 'Laneuveville-derrière-Foug', '31T', 706382, 5399048, 48.7103, 5.80555, 294),
('54299', 'Laneuveville-devant-Bayon', '32T', 297916, 5372275, 48.4711, 6.26583, 320),
('54300', 'Laneuveville-devant-Nancy', '32T', 296132, 5392804, 48.655, 6.23166, 220),
('54301', 'Lanfroicourt', '32T', 304040, 5409832, 48.8106, 6.33083, 220),
('54302', 'Lantéfontaine', '31T', 711365, 5459184, 49.2489, 5.90445, 232),
('54303', 'Laronxe', '32T', 323039, 5379128, 48.5403, 6.6025, 252),
('54304', 'Laxou', '32T', 289772, 5396346, 48.6847, 6.14361, 266),
('54305', 'Lay-Saint-Christophe', '32T', 294120, 5403264, 48.7483, 6.19916, 207),
('54306', 'Lay-Saint-Remy', '31T', 703398, 5395600, 48.6803, 5.76334, 257),
('54307', 'Lebeuville', '32T', 296252, 5368286, 48.4347, 6.24528, 330),
('54308', 'Leintrey', '32T', 333360, 5388115, 48.6239, 6.73861, 260),
('54309', 'Lemainville', '32T', 293125, 5376158, 48.5044, 6.19916, 250),
('54310', 'Leménil-Mitry', '32T', 296817, 5370275, 48.4528, 6.25195, 320),
('54311', 'Lenoncourt', '32T', 301448, 5393695, 48.6647, 6.30334, 240),
('54312', 'Lesménils', '32T', 287749, 5423846, 48.9311, 6.10194, 220),
('54313', 'Létricourt', '32T', 301588, 5417214, 48.8761, 6.29389, 200),
('54314', 'Lexy', '31T', 697776, 5486782, 49.5014, 5.73167, 350),
('54315', 'Leyr', '32T', 299154, 5409079, 48.8022, 6.26472, 250),
('54316', 'Limey-Remenauville', '31T', 712236, 5418899, 48.8867, 5.89528, 250),
('54317', 'Lironville', '31T', 713229, 5416927, 48.8686, 5.90778, 305),
('54318', 'Liverdun', '32T', 284128, 5403950, 48.7511, 6.06305, 230),
('54320', 'Loisy', '32T', 287188, 5416633, 48.8661, 6.09805, 200),
('54321', 'Longlaville', '31T', 702250, 5490470, 49.5331, 5.79527, 290),
('54322', 'Longuyon', '31T', 688975, 5479885, 49.4422, 5.60695, 220),
('54323', 'Longwy', '31T', 700393, 5488980, 49.5203, 5.76888, 300),
('54324', 'Lorey', '32T', 300961, 5375259, 48.4989, 6.30556, 250),
('54325', 'Loromontzey', '32T', 305927, 5367915, 48.4344, 6.37611, 270),
('54326', 'Lubey', '31T', 707910, 5458465, 49.2436, 5.85666, 210),
('54327', 'Lucey', '31T', 708664, 5400400, 48.7217, 5.83722, 270),
('54328', 'Ludres', '32T', 290779, 5389291, 48.6217, 6.16084, 293),
('54329', 'Lunéville', '32T', 315611, 5384806, 48.5892, 6.49945, 240),
('54330', 'Lupcourt', '32T', 296285, 5387976, 48.6117, 6.23611, 245),
('54331', 'Magnières', '32T', 319913, 5368627, 48.445, 6.56472, 250),
('54332', 'Maidières', '32T', 282867, 5420386, 48.8983, 6.03722, 190),
('54333', 'Mailly-sur-Seille', '32T', 298183, 5421170, 48.9106, 6.24556, 190),
('54334', 'Mairy-Mainville', '31T', 707881, 5465112, 49.3033, 5.85972, 250),
('54335', 'Maixe', '32T', 311415, 5391157, 48.645, 6.43972, 230),
('54336', 'Maizières', '32T', 283121, 5385253, 48.5828, 6.05917, 246),
('54337', 'Malavillers', '31T', 708368, 5470912, 49.3553, 5.86944, 360),
('54338', 'Malleloy', '32T', 291784, 5408607, 48.7956, 6.16472, 210),
('54339', 'Malzéville', '32T', 293049, 5399161, 48.7111, 6.18667, 214),
('54340', 'Mamey', '31T', 716916, 5418090, 48.8778, 5.95861, 320),
('54341', 'Mance', '31T', 712131, 5461347, 49.2681, 5.91611, 230),
('54342', 'Mancieulles', '31T', 710323, 5463133, 49.2847, 5.89223, 250),
('54343', 'Mandres-aux-Quatre-Tours', '31T', 705433, 5413728, 48.8425, 5.8, 250),
('54344', 'Mangonville', '32T', 299250, 5370466, 48.4553, 6.28472, 253),
('54345', 'Manoncourt-en-Vermois', '32T', 298496, 5386753, 48.6014, 6.26666, 280),
('54346', 'Manoncourt-en-Woëvre', '31T', 714832, 5407590, 48.7842, 5.92472, 220),
('54348', 'Manonville', '31T', 713714, 5412772, 48.8311, 5.91222, 250),
('54349', 'Manonviller', '32T', 326774, 5383802, 48.5833, 6.65111, 250),
('54350', 'Marainviller', '32T', 323071, 5384721, 48.5906, 6.60056, 245),
('54351', 'Marbache', '32T', 286853, 5408916, 48.7967, 6.0975, 200),
('54352', 'Maron', '32T', 282405, 5391124, 48.6353, 6.04639, 230),
('54353', 'Mars-la-Tour', '31T', 710651, 5442337, 49.0978, 5.88583, 239),
('54354', 'Marthemont', '32T', 281609, 5382776, 48.56, 6.03999, 300),
('54355', 'Martincourt', '31T', 716180, 5414474, 48.8456, 5.94667, 220),
('54356', 'Mattexey', '32T', 316169, 5368562, 48.4433, 6.51416, 290),
('54357', 'Maxéville', '32T', 291204, 5399075, 48.7097, 6.16166, 210),
('54358', 'Mazerulles', '32T', 307454, 5404026, 48.7594, 6.38, 230),
('54359', 'Méhoncourt', '32T', 305963, 5376166, 48.5086, 6.37277, 290),
('54360', 'Ménil-la-Tour', '31T', 710395, 5405504, 48.7669, 5.86333, 224),
('54362', 'Mercy-le-Bas', '31T', 699684, 5473680, 49.3831, 5.75139, 280),
('54363', 'Mercy-le-Haut', '31T', 705195, 5472060, 49.3667, 5.82639, 360),
('54364', 'Méréville', '32T', 290008, 5386228, 48.5939, 6.15194, 240),
('54365', 'Merviller', '32T', 335561, 5372260, 48.4819, 6.77472, 290),
('54366', 'Messein', '32T', 289120, 5388240, 48.6117, 6.13889, 250),
('54367', 'Mexy', '31T', 701288, 5486570, 49.4983, 5.78, 360),
('54368', 'Mignéville', '32T', 336095, 5377900, 48.5328, 6.77973, 260),
('54369', 'Millery', '32T', 289409, 5411169, 48.8178, 6.13111, 200),
('54370', 'Minorville', '31T', 712243, 5411201, 48.8175, 5.89139, 230),
('54371', 'Moineville', '31T', 714487, 5454389, 49.2047, 5.94473, 190),
('54372', 'Moivrons', '32T', 297978, 5411563, 48.8242, 6.2475, 240),
('54373', 'Moncel-lès-Lunéville', '32T', 317948, 5382906, 48.5728, 6.53194, 230),
('54374', 'Moncel-sur-Seille', '32T', 310459, 5404665, 48.7661, 6.42055, 205),
('54375', 'Montauville', '32T', 281857, 5420611, 48.9, 6.02334, 220),
('54376', 'Montenoy', '32T', 296513, 5408340, 48.7947, 6.22917, 260),
('54377', 'Montigny', '32T', 337822, 5375872, 48.515, 6.80389, 287),
('54378', 'Montigny-sur-Chiers', '31T', 693460, 5484154, 49.4792, 5.67084, 300),
('54379', 'Mont-l''Étroit', '31T', 705767, 5375561, 48.4994, 5.78556, 340),
('54380', 'Mont-le-Vignoble', '31T', 709423, 5388278, 48.6125, 5.84139, 280),
('54381', 'Montreux', '32T', 343753, 5378053, 48.5361, 6.88333, 298),
('54382', 'Mont-Saint-Martin', '31T', 701198, 5491174, 49.5397, 5.78111, 300),
('54383', 'Mont-sur-Meurthe', '32T', 311245, 5381180, 48.5553, 6.44195, 230),
('54385', 'Morfontaine', '31T', 703465, 5480560, 49.4436, 5.80694, 374),
('54386', 'Moriviller', '32T', 310894, 5372537, 48.4775, 6.44111, 300),
('54387', 'Morville-sur-Seille', '32T', 291755, 5422025, 48.9161, 6.1575, 210),
('54388', 'Mouacourt', '32T', 325197, 5394420, 48.6783, 6.62527, 225),
('54389', 'Mouaville', '31T', 701819, 5454559, 49.2106, 5.77111, 220),
('54390', 'Mousson', '32T', 286158, 5421155, 48.9064, 6.08166, 380),
('54391', 'Moutiers', '31T', 715935, 5457754, 49.2344, 5.96639, 220),
('54392', 'Moutrot', '31T', 713393, 5387376, 48.6031, 5.89472, 220),
('54393', 'Moyen', '32T', 320466, 5373090, 48.4853, 6.57027, 250),
('54394', 'Murville', '31T', 705333, 5468911, 49.3383, 5.82667, 330),
('54395', 'Nancy', '32T', 292062, 5396817, 48.6897, 6.17445, 222),
('54396', 'Neufmaisons', '32T', 340824, 5369483, 48.4583, 6.84694, 300),
('54397', 'Neuves-Maisons', '32T', 286280, 5388502, 48.6131, 6.10027, 230),
('54398', 'Neuviller-lès-Badonviller', '32T', 343059, 5375971, 48.5172, 6.87472, 300),
('54399', 'Neuviller-sur-Moselle', '32T', 299666, 5374655, 48.4931, 6.28834, 246),
('54400', 'Nomeny', '32T', 296392, 5419010, 48.8906, 6.22222, 200),
('54401', 'Nonhigny', '32T', 343574, 5379726, 48.5511, 6.88028, 280),
('54402', 'Norroy-le-Sec', '31T', 704487, 5462325, 49.2794, 5.81166, 300),
('54403', 'Norroy-lès-Pont-à-Mousson', '32T', 282416, 5424485, 48.935, 6.02889, 260),
('54404', 'Noviant-aux-Prés', '31T', 711452, 5413767, 48.8408, 5.88195, 250),
('54405', 'Ochey', '31T', 716965, 5385163, 48.5819, 5.94195, 310),
('54406', 'Ogéviller', '32T', 332042, 5379625, 48.5472, 6.72417, 250),
('54407', 'Ognéville', '32T', 283131, 5373225, 48.4747, 6.06556, 290),
('54408', 'Olley', '31T', 701422, 5449351, 49.1639, 5.76306, 208),
('54409', 'Omelmont', '32T', 286651, 5376090, 48.5017, 6.11166, 300),
('54410', 'Onville', '31T', 717206, 5433623, 49.0172, 5.97084, 190),
('54411', 'Ormes-et-Ville', '32T', 293366, 5374326, 48.4881, 6.20333, 300),
('54412', 'Othe', '31T', 676987, 5485325, 49.4947, 5.44417, 200),
('54413', 'Ozerailles', '31T', 706773, 5456938, 49.2303, 5.84027, 227),
('54414', 'Pagney-derrière-Barine', '31T', 709188, 5397328, 48.6939, 5.84277, 260),
('54415', 'Pagny-sur-Moselle', '32T', 282168, 5429597, 48.9808, 6.02277, 190),
('54416', 'Pannes', '31T', 705389, 5423774, 48.9328, 5.80445, 220),
('54417', 'Parey-Saint-Césaire', '32T', 283433, 5379490, 48.5311, 6.06639, 282),
('54418', 'Parroy', '32T', 323311, 5394973, 48.6828, 6.59944, 250),
('54419', 'Parux', '32T', 346612, 5378284, 48.5389, 6.92195, 320),
('54420', 'Petit-Failly', '31T', 680732, 5479235, 49.4389, 5.49305, 210),
('54421', 'Petitmont', '32T', 349167, 5380223, 48.5569, 6.95584, 368),
('54422', 'Pettonville', '32T', 333276, 5377642, 48.5297, 6.74167, 260),
('54423', 'Pexonne', '32T', 342422, 5372250, 48.4836, 6.8675, 298),
('54424', 'Phlin', '32T', 300428, 5421275, 48.9122, 6.27611, 190),
('54425', 'Piennes', '31T', 702537, 5465283, 49.3067, 5.78638, 300),
('54426', 'Pierre-la-Treiche', '31T', 715823, 5391921, 48.6431, 5.93, 220),
('54427', 'Pierre-Percée', '32T', 347139, 5370483, 48.4689, 6.93194, 430),
('54428', 'Pierrepont', '31T', 696968, 5477354, 49.4169, 5.71583, 240),
('54429', 'Pierreville', '32T', 287441, 5381223, 48.5481, 6.11973, 230),
('54430', 'Pompey', '32T', 288975, 5406146, 48.7725, 6.12778, 200),
('54431', 'Pont-à-Mousson', '32T', 283818, 5420720, 48.9017, 6.05, 180),
('54432', 'Pont-Saint-Vincent', '32T', 286145, 5387641, 48.6053, 6.09889, 224),
('54433', 'Port-sur-Seille', '32T', 292212, 5420617, 48.9036, 6.16445, 190),
('54434', 'Praye', '32T', 285937, 5368605, 48.4342, 6.10584, 310),
('54435', 'Prény', '31T', 719181, 5429434, 48.9789, 5.99555, 330),
('54436', 'Preutin-Higny', '31T', 702810, 5469405, 49.3436, 5.79223, 300),
('54437', 'Pulligny', '32T', 288920, 5380704, 48.5439, 6.14, 240),
('54438', 'Pulney', '32T', 280319, 5364862, 48.3986, 6.03195, 369),
('54439', 'Pulnoy', '32T', 298202, 5397953, 48.7019, 6.25722, 225),
('54440', 'Puxe', '31T', 703680, 5448599, 49.1564, 5.79362, 190),
('54441', 'Puxieux', '31T', 711067, 5439941, 49.0761, 5.89027, 250),
('54442', 'Quevilloncourt', '32T', 285443, 5372952, 48.4731, 6.09694, 300),
('54443', 'Raon-lès-Leau', '32T', 359788, 5375160, 48.5139, 7.1014, 440),
('54444', 'Raucourt', '32T', 296030, 5423042, 48.9267, 6.21527, 240),
('54445', 'Raville-sur-Sânon', '32T', 315714, 5391694, 48.6511, 6.49778, 230),
('54446', 'Réchicourt-la-Petite', '32T', 322094, 5399153, 48.72, 6.58112, 260),
('54447', 'Réclonville', '32T', 332263, 5378784, 48.5397, 6.7275, 250),
('54449', 'Rehainviller', '32T', 313115, 5381890, 48.5622, 6.46694, 238),
('54450', 'Reherrey', '32T', 335179, 5375361, 48.5097, 6.76833, 270),
('54451', 'Réhon', '31T', 699435, 5486007, 49.4939, 5.75416, 260),
('54452', 'Reillon', '32T', 333520, 5385206, 48.5978, 6.74195, 260),
('54453', 'Rembercourt-sur-Mad', '31T', 712497, 5430194, 48.9881, 5.90472, 200),
('54455', 'Remenoville', '32T', 313244, 5370883, 48.4633, 6.47362, 267),
('54456', 'Réméréville', '32T', 307982, 5397950, 48.705, 6.39, 240),
('54457', 'Remoncourt', '32T', 333289, 5391949, 48.6583, 6.73611, 250),
('54458', 'Repaix', '32T', 340126, 5386157, 48.6081, 6.83111, 300),
('54459', 'Richardménil', '32T', 291230, 5385997, 48.5922, 6.16861, 230),
('54460', 'Rogéville', '31T', 718735, 5411760, 48.8203, 5.98, 300),
('54461', 'Romain', '32T', 304842, 5377009, 48.5158, 6.35722, 290),
('54462', 'Rosières-aux-Salines', '32T', 303301, 5385810, 48.5944, 6.33222, 210),
('54463', 'Rosières-en-Haye', '32T', 279822, 5408818, 48.7933, 6.00194, 270),
('54464', 'Rouves', '32T', 295183, 5419950, 48.8986, 6.20527, 190),
('54465', 'Roville-devant-Bayon', '32T', 299726, 5371716, 48.4667, 6.29055, 250),
('54466', 'Royaumeix', '31T', 710774, 5406847, 48.7789, 5.86917, 251),
('54467', 'Rozelieures', '32T', 310075, 5369567, 48.4506, 6.43139, 290),
('54468', 'Saffais', '32T', 301676, 5381570, 48.5558, 6.31222, 350),
('54469', 'Saint-Ail', '31T', 718293, 5451910, 49.1811, 5.99556, 274),
('54470', 'Saint-Baussant', '31T', 704643, 5419140, 48.8914, 5.79195, 230),
('54471', 'Saint-Boingt', '32T', 310350, 5367332, 48.4306, 6.43611, 280),
('54472', 'Saint-Clément', '32T', 323026, 5378047, 48.5306, 6.60278, 245),
('54473', 'Saint-Firmin', '32T', 287808, 5366927, 48.4197, 6.13195, 300),
('54474', 'Sainte-Geneviève', '32T', 288573, 5417106, 48.8708, 6.11667, 340),
('54475', 'Saint-Germain', '32T', 303058, 5367643, 48.4311, 6.3375, 360),
('54476', 'Saint-Jean-lès-Longuyon', '31T', 678567, 5480709, 49.4528, 5.46388, 230),
('54477', 'Saint-Julien-lès-Gorze', '31T', 712100, 5433116, 49.0144, 5.90083, 270),
('54478', 'Saint-Marcel', '31T', 715517, 5445122, 49.1211, 5.95389, 272),
('54479', 'Saint-Mard', '32T', 300889, 5376127, 48.5067, 6.30417, 250),
('54480', 'Saint-Martin', '32T', 334284, 5381938, 48.5686, 6.75361, 250),
('54481', 'Saint-Maurice-aux-Forges', '32T', 341009, 5375318, 48.5108, 6.84723, 285),
('54482', 'Saint-Max', '32T', 294301, 5398157, 48.7025, 6.20417, 217),
('54483', 'Saint-Nicolas-de-Port', '32T', 301029, 5389970, 48.6311, 6.29944, 224),
('54484', 'Sainte-Pôle', '32T', 339262, 5375274, 48.51, 6.82361, 280),
('54485', 'Saint-Pancré', '31T', 691777, 5489628, 49.5289, 5.65028, 290),
('54486', 'Saint-Remimont', '32T', 296875, 5375311, 48.4981, 6.25028, 315),
('54487', 'Saint-Rémy-aux-Bois', '32T', 307071, 5365898, 48.4167, 6.39249, 280),
('54488', 'Saint-Sauveur', '32T', 350492, 5377592, 48.5336, 6.97473, 430),
('54489', 'Saint-Supplet', '31T', 698476, 5473606, 49.3828, 5.73473, 280),
('54490', 'Saizerais', '32T', 282952, 5408417, 48.7908, 6.04472, 250),
('54491', 'Sancy', '31T', 712467, 5469926, 49.345, 5.92528, 310),
('54492', 'Sanzey', '31T', 708451, 5406142, 48.7733, 5.83723, 230),
('54493', 'Saulnes', '31T', 704382, 5490519, 49.5328, 5.82473, 300),
('54494', 'Saulxerotte', '31T', 717336, 5372841, 48.4711, 5.94055, 350),
('54495', 'Saulxures-lès-Nancy', '32T', 297391, 5396468, 48.6883, 6.24694, 222),
('54496', 'Saulxures-lès-Vannes', '31T', 707192, 5378705, 48.5272, 5.80639, 300),
('54497', 'Saxon-Sion', '32T', 283911, 5367816, 48.4264, 6.07889, 400),
('54498', 'Seichamps', '32T', 298753, 5399633, 48.7172, 6.26389, 230),
('54499', 'Seicheprey', '31T', 704725, 5416887, 48.8711, 5.79194, 250),
('54500', 'Selaincourt', '31T', 719184, 5376097, 48.4997, 5.96723, 340),
('54501', 'Seranville', '32T', 316428, 5370192, 48.4581, 6.51695, 300),
('54502', 'Serres', '32T', 313262, 5396164, 48.6906, 6.46251, 280),
('54504', 'Serrouville', '31T', 709557, 5475750, 49.3983, 5.88834, 360),
('54505', 'Sexey-aux-Forges', '32T', 282309, 5389705, 48.6225, 6.04584, 233),
('54506', 'Sexey-les-Bois', '32T', 280731, 5400217, 48.7164, 6.01888, 260),
('54507', 'Sionviller', '32T', 318066, 5389702, 48.6339, 6.53056, 260),
('54508', 'Sivry', '32T', 294566, 5412584, 48.8322, 6.20056, 250),
('54509', 'Sommerviller', '32T', 306578, 5389869, 48.6319, 6.37472, 210),
('54510', 'Sornéville', '32T', 310023, 5402641, 48.7478, 6.41556, 255),
('54511', 'Sponville', '31T', 706946, 5439352, 49.0722, 5.83361, 220),
('54512', 'Tanconville', '32T', 347692, 5385607, 48.605, 6.93389, 305),
('54513', 'Tantonville', '32T', 288591, 5372462, 48.4697, 6.13973, 305),
('54514', 'Tellancourt', '31T', 690633, 5487238, 49.5078, 5.63334, 370),
('54515', 'Thélod', '32T', 281917, 5381187, 48.5458, 6.04499, 330),
('54516', 'They-sous-Vaudemont', '32T', 282361, 5365495, 48.405, 6.05917, 363),
('54517', 'Thézey-Saint-Martin', '32T', 301649, 5420087, 48.9019, 6.29333, 200),
('54518', 'Thiaucourt-Regniéville', '31T', 709731, 5426379, 48.9547, 5.865, 220),
('54519', 'Thiaville-sur-Meurthe', '32T', 337683, 5364567, 48.4133, 6.8064, 285),
('54520', 'Thiébauménil', '32T', 324675, 5383558, 48.5806, 6.62278, 240),
('54521', 'Thil', '31T', 710700, 5483772, 49.47, 5.90833, 390),
('54522', 'Thorey-Lyautey', '32T', 280287, 5369872, 48.4436, 6.02889, 290),
('54523', 'Thuilley-aux-Groseilles', '31T', 719104, 5384473, 48.575, 5.97055, 300),
('54524', 'Thumeréville', '31T', 703740, 5453548, 49.2008, 5.79694, 210),
('54525', 'Tiercelet', '31T', 709006, 5482748, 49.4614, 5.88444, 415),
('54526', 'Tomblaine', '32T', 294746, 5396348, 48.6864, 6.21111, 202),
('54527', 'Tonnoy', '32T', 297195, 5381359, 48.5525, 6.25167, 245),
('54528', 'Toul', '31T', 712680, 5395388, 48.6753, 5.88917, 210),
('54529', 'Tramont-Émy', '31T', 718141, 5365823, 48.4078, 5.94778, 390),
('54530', 'Tramont-Lassus', '31T', 719183, 5364441, 48.395, 5.96111, 410),
('54531', 'Tramont-Saint-André', '31T', 716404, 5365509, 48.4056, 5.92417, 370),
('54532', 'Tremblecourt', '31T', 715921, 5410074, 48.8061, 5.94083, 280),
('54533', 'Trieux', '31T', 713346, 5467579, 49.3236, 5.93611, 300),
('54534', 'Trondes', '31T', 703989, 5399609, 48.7161, 5.77334, 264),
('54535', 'Tronville', '31T', 713160, 5440979, 49.0847, 5.91944, 280),
('54536', 'Tucquegnieux', '31T', 709797, 5465246, 49.3039, 5.88611, 240),
('54537', 'Ugny', '31T', 695586, 5483271, 49.4706, 5.69972, 296),
('54538', 'Uruffe', '31T', 702498, 5383048, 48.5678, 5.745, 271),
('54539', 'Vacqueville', '32T', 338454, 5372115, 48.4814, 6.8139, 270),
('54540', 'Val-et-Châtillon', '32T', 349956, 5380603, 48.5606, 6.96639, 310),
('54541', 'Valhey', '32T', 315247, 5394924, 48.68, 6.49001, 240),
('54542', 'Valleroy', '31T', 713564, 5455188, 49.2122, 5.9325, 250),
('54543', 'Vallois', '32T', 318723, 5370612, 48.4625, 6.54778, 250),
('54544', 'Vandelainville', '31T', 717691, 5433704, 49.0178, 5.9775, 190),
('54545', 'Vandeléville', '31T', 721649, 5368247, 48.4283, 5.99639, 340),
('54546', 'Vandières', '32T', 282871, 5426756, 48.9556, 6.03388, 180),
('54548', 'Vannes-le-Châtel', '31T', 705144, 5380825, 48.5469, 5.77973, 280),
('54549', 'Varangéville', '32T', 302711, 5390591, 48.6372, 6.32195, 218),
('54550', 'Vathiménil', '32T', 324482, 5375374, 48.5069, 6.62361, 260),
('54551', 'Vaucourt', '32T', 330114, 5393249, 48.6692, 6.69249, 250),
('54552', 'Vaudémont', '32T', 282159, 5366678, 48.4156, 6.05583, 480),
('54553', 'Vaudeville', '32T', 292960, 5371095, 48.4589, 6.19944, 290),
('54554', 'Vaudigny', '32T', 292895, 5368748, 48.4378, 6.19972, 260),
('54555', 'Vaxainville', '32T', 334090, 5376011, 48.5153, 6.75334, 260),
('54556', 'Vého', '32T', 331222, 5385150, 48.5967, 6.71083, 270),
('54557', 'Velaine-en-Haye', '32T', 280819, 5398791, 48.7036, 6.02084, 266),
('54558', 'Velaine-sous-Amance', '32T', 302945, 5399021, 48.7131, 6.32111, 250),
('54559', 'Velle-sur-Moselle', '32T', 298852, 5378919, 48.5311, 6.27528, 240),
('54560', 'Veney', '32T', 338388, 5370541, 48.4672, 6.81361, 300),
('54561', 'Vennezey', '32T', 312601, 5368864, 48.445, 6.46583, 280),
('54562', 'Verdenal', '32T', 338738, 5383509, 48.5839, 6.81333, 290),
('54563', 'Vézelise', '32T', 284719, 5374432, 48.4861, 6.0864, 270),
('54564', 'Viéville-en-Haye', '31T', 714339, 5425163, 48.9422, 5.92722, 345),
('54565', 'Vigneulles', '32T', 303031, 5382172, 48.5617, 6.33028, 250),
('54566', 'Vilcey-sur-Trey', '31T', 717710, 5424397, 48.9342, 5.97278, 230),
('54567', 'Villacourt', '32T', 303958, 5370456, 48.4567, 6.34833, 270),
('54568', 'Ville-au-Montois', '31T', 701683, 5476938, 49.4117, 5.78055, 330),
('54569', 'Ville-au-Val', '32T', 288785, 5414624, 48.8486, 6.12084, 230),
('54570', 'Villecey-sur-Mad', '31T', 716547, 5432268, 49.0053, 5.96111, 200),
('54571', 'Ville-en-Vermois', '32T', 297588, 5388300, 48.615, 6.25361, 228),
('54572', 'Ville-Houdlémont', '31T', 691536, 5491320, 49.5442, 5.64778, 262),
('54573', 'Villers-en-Haye', '32T', 280606, 5412652, 48.8281, 6.01056, 250),
('54574', 'Villers-la-Chèvre', '31T', 695175, 5486873, 49.5031, 5.69583, 363),
('54575', 'Villers-la-Montagne', '31T', 704521, 5483598, 49.4706, 5.82306, 376),
('54576', 'Villers-le-Rond', '31T', 680379, 5481974, 49.4636, 5.48944, 280),
('54577', 'Villers-lès-Moivrons', '32T', 297959, 5410482, 48.8144, 6.24778, 270),
('54578', 'Villers-lès-Nancy', '32T', 289588, 5394714, 48.67, 6.14194, 280),
('54579', 'Villers-sous-Prény', '32T', 280385, 5425678, 48.945, 6.00055, 210),
('54580', 'Villerupt', '31T', 712492, 5483810, 49.4697, 5.93305, 370),
('54581', 'Ville-sur-Yron', '31T', 709166, 5444568, 49.1183, 5.86667, 210),
('54582', 'Villette', '31T', 684625, 5483322, 49.4744, 5.54861, 210),
('54583', 'Villey-le-Sec', '31T', 719190, 5393845, 48.6592, 5.97667, 324),
('54584', 'Villey-Saint-Étienne', '31T', 718957, 5401906, 48.7317, 5.97778, 220),
('54585', 'Virecourt', '32T', 301822, 5371117, 48.4619, 6.31916, 270),
('54586', 'Viterne', '32T', 281151, 5385762, 48.5867, 6.03222, 280),
('54587', 'Vitrey', '32T', 281746, 5374639, 48.4869, 6.04611, 270),
('54588', 'Vitrimont', '32T', 311228, 5386187, 48.6003, 6.43944, 278),
('54589', 'Vittonville', '32T', 284705, 5427828, 48.9658, 6.05833, 220),
('54590', 'Viviers-sur-Chiers', '31T', 690774, 5483193, 49.4714, 5.63333, 230),
('54591', 'Voinémont', '32T', 290456, 5377864, 48.5189, 6.16222, 250),
('54592', 'Vroncourt', '32T', 284155, 5372042, 48.4644, 6.08001, 300),
('54593', 'Waville', '31T', 715629, 5432850, 49.0108, 5.94889, 220),
('54594', 'Xammes', '31T', 708895, 5428573, 48.9747, 5.85472, 250),
('54595', 'Xermaménil', '32T', 312349, 5378608, 48.5325, 6.45805, 234),
('54596', 'Xeuilley', '32T', 285868, 5383045, 48.5639, 6.0975, 260),
('54597', 'Xirocourt', '32T', 290815, 5368113, 48.4314, 6.17195, 250),
('54598', 'Xivry-Circourt', '31T', 700791, 5470475, 49.3539, 5.76501, 270),
('54599', 'Xonville', '31T', 708195, 5437451, 49.0547, 5.84972, 228),
('54600', 'Xousse', '32T', 331385, 5391944, 48.6578, 6.71027, 250),
('54601', 'Xures', '32T', 327568, 5395644, 48.69, 6.65694, 240),
('54602', 'Han-devant-Pierrepont', '31T', 696332, 5475414, 49.3997, 5.70611, 250),
('55001', 'Abainville', '31T', 684110, 5378275, 48.5306, 5.49388, 290),
('55002', 'Abaucourt-Hautecourt', '31T', 685015, 5452578, 49.1981, 5.53972, 230),
('55004', 'Aincreville', '31T', 653968, 5470659, 49.3692, 5.12083, 200),
('55005', 'Amanty', '31T', 692770, 5377174, 48.5181, 5.61056, 360),
('55007', 'Ambly-sur-Meuse', '31T', 678549, 5432615, 49.0206, 5.44222, 210),
('55008', 'Amel-sur-l''Étang', '31T', 692677, 5460538, 49.2672, 5.6486, 225),
('55009', 'Ancemont', '31T', 675770, 5438213, 49.0717, 5.40667, 210),
('55010', 'Ancerville', '31T', 648859, 5388945, 48.6358, 5.02055, 200),
('55011', 'Andernay', '31T', 643649, 5406049, 48.7908, 4.95583, 154),
('55012', 'Apremont-la-Forêt', '31T', 693650, 5414605, 48.8542, 5.64, 263),
('55013', 'Arrancy-sur-Crusne', '31T', 692864, 5477053, 49.4156, 5.65916, 270),
('55014', 'Aubréville', '31T', 651955, 5445603, 49.1444, 5.08362, 190),
('55015', 'Aulnois-en-Perthois', '31T', 656971, 5388857, 48.6331, 5.13055, 271),
('55017', 'Autrécourt-sur-Aire', '31T', 656322, 5433798, 49.0372, 5.13889, 210),
('55018', 'Autréville-Saint-Lambert', '31T', 653842, 5492287, 49.5636, 5.1275, 180),
('55021', 'Avillers-Sainte-Croix', '31T', 697422, 5434738, 49.0339, 5.70111, 230),
('55022', 'Avioth', '31T', 672845, 5493383, 49.5683, 5.39055, 210),
('55023', 'Avocourt', '31T', 656108, 5452858, 49.2086, 5.14334, 230),
('55024', 'Azannes-et-Soumazannes', '31T', 679472, 5462904, 49.2925, 5.46833, 240),
('55025', 'Baâlon', '31T', 662281, 5484312, 49.4897, 5.24084, 210),
('55026', 'Badonvilliers-Gérauvilliers', '31T', 690883, 5380757, 48.5508, 5.58667, 380),
('55027', 'Bannoncourt', '31T', 683046, 5425714, 48.9572, 5.50056, 215),
('55028', 'Bantheville', '31T', 651752, 5469052, 49.3553, 5.08972, 210),
('55029', 'Bar-le-Duc', '31T', 659644, 5404289, 48.7711, 5.17277, 220),
('55030', 'Baudignécourt', '31T', 681614, 5382490, 48.5692, 5.46195, 285),
('55031', 'Baudonvilliers', '31T', 648400, 5394710, 48.6878, 5.0164, 183),
('55032', 'Baudrémont', '31T', 675200, 5412419, 48.84, 5.38778, 280),
('55033', 'Baulny', '31T', 646517, 5458743, 49.2639, 5.01389, 180),
('55034', 'Bazeilles-sur-Othain', '31T', 675862, 5485876, 49.5, 5.42889, 200),
('55035', 'Bazincourt-sur-Saulx', '31T', 657537, 5393507, 48.6747, 5.14, 195),
('55036', 'Beauclair', '31T', 653184, 5480649, 49.4592, 5.11389, 190),
('55037', 'Beaufort-en-Argonne', '31T', 653017, 5482282, 49.4739, 5.11222, 190),
('55038', 'Beaulieu-en-Argonne', '31T', 651035, 5433218, 49.0333, 5.06638, 276),
('55039', 'Beaumont-en-Verdunois', '31T', 675219, 5459336, 49.2617, 5.40833, 324),
('55040', 'Beausite', '31T', 660423, 5426158, 48.9675, 5.19194, 229),
('55041', 'Behonne', '31T', 660267, 5406809, 48.7936, 5.18223, 290),
('55042', 'Belleray', '31T', 675111, 5444898, 49.1319, 5.40055, 201),
('55043', 'Belleville-sur-Meuse', '31T', 673384, 5450160, 49.1797, 5.37917, 195),
('55044', 'Belrain', '31T', 669127, 5414920, 48.8642, 5.30611, 290),
('55045', 'Belrupt-en-Verdunois', '31T', 678274, 5446174, 49.1425, 5.44444, 240),
('55046', 'Beney-en-Woëvre', '31T', 706958, 5427048, 48.9617, 5.82751, 240),
('55047', 'Béthelainville', '31T', 663058, 5448578, 49.1683, 5.23695, 260),
('55048', 'Béthincourt', '31T', 662453, 5458078, 49.2539, 5.2325, 210),
('55049', 'Beurey-sur-Saulx', '31T', 649010, 5402513, 48.7578, 5.0275, 157),
('55050', 'Bezonvaux', '31T', 679565, 5456972, 49.2392, 5.46695, 257),
('55051', 'Biencourt-sur-Orge', '31T', 673216, 5381453, 48.5622, 5.34777, 290),
('55053', 'Billy-sous-Mangiennes', '31T', 687033, 5467669, 49.3331, 5.57444, 210),
('55054', 'Bislée', '31T', 683025, 5415792, 48.8681, 5.49583, 220),
('55055', 'Blanzée', '31T', 685116, 5448378, 49.1603, 5.53917, 230),
('55057', 'Boinville-en-Woëvre', '31T', 694791, 5451678, 49.1869, 5.67333, 211),
('55058', 'Boncourt-sur-Meuse', '31T', 688855, 5408630, 48.8019, 5.57195, 240),
('55059', 'Bonnet', '31T', 679935, 5377244, 48.5225, 5.43694, 350),
('55060', 'Bonzée', '31T', 689301, 5441595, 49.0981, 5.59333, 240),
('55061', 'Le Bouchon-sur-Saulx', '31T', 664431, 5387308, 48.6172, 5.23111, 240),
('55062', 'Bouconville-sur-Madt', '31T', 699563, 5413546, 48.8428, 5.72, 233),
('55063', 'Bouligny', '31T', 698692, 5463720, 49.2939, 5.73277, 260),
('55064', 'Bouquemont', '31T', 679210, 5429143, 48.9892, 5.44972, 230),
('55065', 'Boureuilles', '31T', 648817, 5451451, 49.1978, 5.04278, 180),
('55066', 'Bovée-sur-Barboure', '31T', 685048, 5390947, 48.6442, 5.51222, 315),
('55067', 'Boviolles', '31T', 677998, 5391121, 48.6478, 5.41667, 260),
('55069', 'Brabant-le-Roi', '31T', 645491, 5412153, 48.8453, 4.98306, 150),
('55070', 'Brabant-sur-Meuse', '31T', 668166, 5460444, 49.2736, 5.31194, 220),
('55071', 'Brandeville', '31T', 667133, 5473764, 49.3936, 5.30333, 230),
('55072', 'Braquis', '31T', 691648, 5448261, 49.1572, 5.62862, 205),
('55073', 'Bras-sur-Meuse', '31T', 673050, 5453704, 49.2117, 5.37611, 195),
('55075', 'Brauvilliers', '31T', 658752, 5383066, 48.5806, 5.15249, 289),
('55076', 'Bréhéville', '31T', 669162, 5472745, 49.3839, 5.33083, 240),
('55077', 'Breux', '31T', 672587, 5495198, 49.5847, 5.38778, 230),
('55078', 'Brieulles-sur-Meuse', '31T', 658511, 5467110, 49.3361, 5.18195, 183),
('55079', 'Brillon-en-Barrois', '31T', 654299, 5397403, 48.7106, 5.0975, 242),
('55080', 'Brixey-aux-Chanoines', '31T', 700616, 5372501, 48.4736, 5.71444, 320),
('55081', 'Brizeaux', '31T', 650586, 5430332, 49.0075, 5.05917, 175),
('55083', 'Brouennes', '31T', 663814, 5487572, 49.5186, 5.26334, 190),
('55084', 'Broussey-en-Blois', '31T', 687912, 5390455, 48.6389, 5.55084, 300),
('55085', 'Broussey-Raulecourt', '31T', 698471, 5411560, 48.8253, 5.70417, 240),
('55087', 'Bure', '31T', 674111, 5375053, 48.5044, 5.35722, 340),
('55088', 'Burey-en-Vaux', '31T', 696838, 5382414, 48.5639, 5.66806, 260),
('55089', 'Burey-la-Côte', '31T', 699393, 5375704, 48.5028, 5.69944, 310),
('55093', 'Buxières-sous-les-Côtes', '31T', 695587, 5421597, 48.9164, 5.66972, 280),
('55094', 'Buzy-Darmont', '31T', 697510, 5449889, 49.17, 5.70972, 195),
('55095', 'Cesse', '31T', 656252, 5486732, 49.5131, 5.15861, 170),
('55096', 'Chaillon', '31T', 693212, 5424883, 48.9467, 5.63889, 265),
('55097', 'Chalaines', '31T', 697691, 5386741, 48.6025, 5.68167, 250),
('55099', 'Champneuville', '31T', 669422, 5456434, 49.2372, 5.32749, 200),
('55100', 'Champougny', '31T', 698839, 5380352, 48.5447, 5.69417, 260),
('55101', 'Chardogne', '31T', 656134, 5410030, 48.8236, 5.12722, 220),
('55102', 'Charny-sur-Meuse', '31T', 672087, 5453426, 49.2094, 5.36278, 190),
('55103', 'Charpentry', '31T', 647720, 5458374, 49.2603, 5.03028, 150),
('55104', 'Chassey-Beaupré', '31T', 679855, 5370103, 48.4583, 5.43278, 345),
('55105', 'Châtillon-sous-les-Côtes', '31T', 684115, 5446768, 49.1461, 5.52472, 240),
('55106', 'Chattancourt', '31T', 665035, 5454292, 49.2192, 5.26639, 200),
('55107', 'Chaumont-devant-Damvillers', '31T', 676506, 5464631, 49.3089, 5.42834, 240),
('55108', 'Chaumont-sur-Aire', '31T', 665535, 5421889, 48.9278, 5.26, 250),
('55109', 'Chauvency-le-Château', '31T', 667140, 5488013, 49.5217, 5.30944, 180),
('55110', 'Chauvency-Saint-Hubert', '31T', 666248, 5489561, 49.5358, 5.29778, 190),
('55111', 'Chauvoncourt', '31T', 685699, 5419404, 48.8997, 5.53389, 220),
('55113', 'Cheppy', '31T', 649882, 5455466, 49.2336, 5.05889, 180),
('55114', 'Chonville-Malaumont', '31T', 683720, 5402710, 48.7503, 5.49944, 260),
('55115', 'Cierges-sous-Montfaucon', '31T', 652231, 5462700, 49.2981, 5.09388, 220),
('55116', 'Le Claon', '31T', 643835, 5445262, 49.1433, 4.97222, 155),
('55117', 'Clermont-en-Argonne', '31T', 651138, 5441379, 49.1067, 5.07084, 230),
('55118', 'Cléry-le-Grand', '31T', 656498, 5470421, 49.3664, 5.15556, 190),
('55119', 'Cléry-le-Petit', '31T', 658246, 5470688, 49.3683, 5.17973, 190),
('55120', 'Combles-en-Barrois', '31T', 655502, 5401947, 48.7511, 5.11555, 240),
('55121', 'Combres-sous-les-Côtes', '31T', 691754, 5437600, 49.0614, 5.62501, 250),
('55122', 'Commercy', '31T', 690416, 5404170, 48.7614, 5.59112, 250),
('55123', 'Les Hauts-de-Chée', '31T', 658972, 5414992, 48.8675, 5.16778, 220),
('55124', 'Consenvoye', '31T', 666298, 5462057, 49.2886, 5.28695, 185),
('55125', 'Contrisson', '31T', 643679, 5407255, 48.8017, 4.95666, 135),
('55127', 'Courcelles-en-Barrois', '31T', 679266, 5410972, 48.8258, 5.44251, 330),
('55128', 'Courcelles-sur-Aire', '31T', 664368, 5422782, 48.9361, 5.24444, 250),
('55129', 'Courouvre', '31T', 672501, 5423151, 48.9372, 5.35555, 320),
('55132', 'Cousances-les-Forges', '31T', 653621, 5386292, 48.6108, 5.08417, 190),
('55133', 'Couvertpuis', '31T', 669936, 5383455, 48.5811, 5.30417, 270),
('55134', 'Couvonges', '31T', 648957, 5404519, 48.7758, 5.0275, 159),
('55137', 'Cuisy', '31T', 658566, 5459603, 49.2686, 5.17973, 250),
('55139', 'Cumières-le-Mort-Homme', '31T', 665976, 5455959, 49.2339, 5.28, 200),
('55140', 'Cunel', '31T', 653846, 5467102, 49.3372, 5.11778, 259),
('55141', 'Dagonville', '31T', 675795, 5407122, 48.7922, 5.39361, 300),
('55142', 'Dainville-Bertheléville', '31T', 685669, 5368313, 48.4406, 5.51055, 350),
('55143', 'Damloup', '31T', 681619, 5452990, 49.2028, 5.49333, 250),
('55144', 'Dammarie-sur-Saulx', '31T', 665066, 5384515, 48.5919, 5.23861, 246),
('55145', 'Damvillers', '31T', 674324, 5468425, 49.3436, 5.4, 210),
('55146', 'Dannevoux', '31T', 662497, 5464106, 49.3081, 5.23555, 190),
('55148', 'Delouze-Rosières', '31T', 686061, 5381986, 48.5633, 5.52194, 333),
('55149', 'Delut', '31T', 676387, 5475847, 49.4097, 5.43167, 201),
('55150', 'Demange-aux-Eaux', '31T', 681550, 5383848, 48.5814, 5.46167, 280),
('55153', 'Dieppe-sous-Douaumont', '31T', 682884, 5455134, 49.2217, 5.51166, 240),
('55154', 'Dieue-sur-Meuse', '31T', 676844, 5438278, 49.0719, 5.42139, 205),
('55155', 'Dombasle-en-Argonne', '31T', 659874, 5445147, 49.1383, 5.19194, 220),
('55156', 'Dombras', '31T', 678481, 5474092, 49.3933, 5.45972, 200),
('55157', 'Dommartin-la-Montagne', '31T', 690687, 5434348, 49.0325, 5.60888, 330),
('55158', 'Dommary-Baroncourt', '31T', 696981, 5462391, 49.2825, 5.70861, 240),
('55159', 'Dompcevrin', '31T', 682191, 5422595, 48.9294, 5.4875, 230),
('55160', 'Dompierre-aux-Bois', '31T', 689149, 5429998, 48.9939, 5.58584, 280),
('55162', 'Domremy-la-Canne', '31T', 695924, 5464239, 49.2994, 5.695, 240),
('55163', 'Doncourt-aux-Templiers', '31T', 698614, 5437779, 49.0608, 5.71889, 212),
('55164', 'Douaumont', '31T', 677061, 5454913, 49.2214, 5.43167, 360),
('55165', 'Doulcon', '31T', 657138, 5472016, 49.3806, 5.165, 190),
('55166', 'Dugny-sur-Meuse', '31T', 674086, 5442023, 49.1064, 5.38527, 210),
('55167', 'Dun-sur-Meuse', '31T', 658586, 5472861, 49.3878, 5.18527, 210),
('55168', 'Duzey', '31T', 691173, 5471182, 49.3633, 5.63305, 222),
('55169', 'Écouviez', '31T', 677685, 5489242, 49.5297, 5.45556, 200),
('55170', 'Écurey-en-Verdunois', '31T', 670539, 5470655, 49.3647, 5.3489, 230),
('55171', 'Eix', '31T', 682066, 5450502, 49.1803, 5.49834, 242),
('55172', 'Les Éparges', '31T', 689463, 5438046, 49.0661, 5.59389, 267),
('55173', 'Épiez-sur-Meuse', '31T', 694819, 5380273, 48.5453, 5.63972, 301),
('55174', 'Épinonville', '31T', 651263, 5460448, 49.2781, 5.07973, 242),
('55175', 'Érize-la-Brûlée', '31T', 667341, 5413290, 48.85, 5.28111, 290),
('55177', 'Érize-la-Petite', '31T', 664144, 5420735, 48.9178, 5.24056, 240),
('55178', 'Érize-Saint-Dizier', '31T', 667628, 5409158, 48.8128, 5.28333, 330),
('55179', 'Erneville-aux-Bois', '31T', 677518, 5401737, 48.7433, 5.41472, 310),
('55180', 'Esnes-en-Argonne', '31T', 661124, 5453033, 49.2089, 5.21222, 235),
('55181', 'Étain', '31T', 691992, 5454671, 49.2147, 5.63639, 205),
('55182', 'Éton', '31T', 694882, 5461698, 49.2769, 5.67945, 250),
('55183', 'Étraye', '31T', 672316, 5467403, 49.335, 5.37194, 230),
('55184', 'Euville', '31T', 692949, 5402989, 48.75, 5.62499, 240),
('55185', 'Èvres', '31T', 655456, 5427716, 48.9828, 5.12472, 214),
('55186', 'Fains-Véel', '31T', 656053, 5406381, 48.7908, 5.12473, 180),
('55188', 'Flassigny', '31T', 676698, 5483060, 49.4744, 5.43917, 251),
('55189', 'Fleury-devant-Douaumont', '31T', 676796, 5452432, 49.1992, 5.42694, 340),
('55191', 'Foameix-Ornel', '31T', 689711, 5456818, 49.2347, 5.60612, 210),
('55192', 'Fontaines-Saint-Clair', '31T', 662270, 5471115, 49.3711, 5.23528, 210),
('55193', 'Forges-sur-Meuse', '31T', 666665, 5459286, 49.2636, 5.29084, 190),
('55194', 'Foucaucourt-sur-Thabas', '31T', 653665, 5429243, 48.9969, 5.10083, 191),
('55195', 'Fouchères-aux-Bois', '31T', 665620, 5387961, 48.6228, 5.2475, 280),
('55196', 'Frémeréville-sous-les-Côtes', '31T', 694921, 5408591, 48.7997, 5.65445, 260),
('55197', 'Fresnes-au-Mont', '31T', 678854, 5418716, 48.8956, 5.44028, 258),
('55198', 'Fresnes-en-Woëvre', '31T', 692207, 5441510, 49.0964, 5.63306, 228),
('55199', 'Froidos', '31T', 655109, 5436483, 49.0617, 5.12333, 200),
('55200', 'Fromeréville-les-Vallons', '31T', 666689, 5447790, 49.1603, 5.28639, 221),
('55201', 'Fromezey', '31T', 688207, 5454603, 49.2153, 5.58444, 210),
('55202', 'Futeau', '31T', 646275, 5438065, 49.0781, 5.00305, 180),
('55204', 'Génicourt-sur-Meuse', '31T', 678187, 5434395, 49.0367, 5.43805, 220),
('55206', 'Gercourt-et-Drillancourt', '31T', 662772, 5461642, 49.2858, 5.23833, 190),
('55207', 'Géry', '31T', 668528, 5405693, 48.7814, 5.29416, 300),
('55208', 'Gesnes-en-Argonne', '31T', 649885, 5463500, 49.3058, 5.06194, 190),
('55210', 'Gimécourt', '31T', 673801, 5413457, 48.8497, 5.36917, 280),
('55211', 'Gincrey', '31T', 687401, 5458068, 49.2467, 5.575, 217),
('55212', 'Girauvoisin', '31T', 692926, 5408985, 48.8039, 5.62749, 270),
('55214', 'Givrauval', '31T', 671100, 5392359, 48.6608, 5.32361, 244),
('55215', 'Gondrecourt-le-Château', '31T', 685115, 5376423, 48.5136, 5.50666, 308),
('55216', 'Gouraincourt', '31T', 693660, 5463664, 49.295, 5.66362, 250),
('55217', 'Goussaincourt', '31T', 698768, 5373610, 48.4842, 5.68999, 265),
('55218', 'Gremilly', '31T', 680253, 5461291, 49.2778, 5.47833, 244),
('55219', 'Grimaucourt-en-Woëvre', '31T', 686438, 5450029, 49.1747, 5.55805, 220),
('55220', 'Grimaucourt-près-Sampigny', '31T', 681326, 5407206, 48.7914, 5.46888, 260),
('55221', 'Guerpont', '31T', 665946, 5399806, 48.7292, 5.25667, 210),
('55222', 'Gussainville', '31T', 695319, 5449935, 49.1711, 5.67972, 200),
('55224', 'Haironville', '31T', 653533, 5394755, 48.6869, 5.08611, 178),
('55225', 'Halles-sous-les-Côtes', '31T', 653631, 5479765, 49.4511, 5.11972, 200),
('55226', 'Han-lès-Juvigny', '31T', 668886, 5483616, 49.4817, 5.33166, 180),
('55228', 'Hannonville-sous-les-Côtes', '31T', 694309, 5435401, 49.0408, 5.65889, 240),
('55229', 'Han-sur-Meuse', '31T', 686215, 5415527, 48.8647, 5.53916, 230),
('55232', 'Harville', '31T', 699027, 5442092, 49.0994, 5.72666, 210),
('55236', 'Haudainville', '31T', 676688, 5444423, 49.1272, 5.42194, 205),
('55237', 'Haudiomont', '31T', 686797, 5443612, 49.1169, 5.56, 265),
('55239', 'Haumont-près-Samogneux', '31T', 671156, 5460567, 49.2739, 5.35306, 260),
('55241', 'Heippes', '31T', 667717, 5429217, 48.9931, 5.29278, 276),
('55242', 'Hennemont', '31T', 694389, 5445853, 49.1347, 5.66501, 225),
('55243', 'Herbeuville', '31T', 692699, 5436118, 49.0478, 5.63722, 260),
('55244', 'Herméville-en-Woëvre', '31T', 688905, 5450793, 49.1808, 5.59222, 210),
('55245', 'Heudicourt-sous-les-Côtes', '31T', 697540, 5423397, 48.9319, 5.69722, 250),
('55246', 'Hévilliers', '31T', 671893, 5385832, 48.6019, 5.33167, 300),
('55247', 'Horville-en-Ornois', '31T', 682283, 5373827, 48.4911, 5.46722, 330),
('55248', 'Houdelaincourt', '31T', 682344, 5380196, 48.5483, 5.47083, 300),
('55250', 'Inor', '31T', 656482, 5490663, 49.5483, 5.16334, 170),
('55251', 'Ippécourt', '31T', 661602, 5433887, 49.0367, 5.21111, 270),
('55252', 'Iré-le-Sec', '31T', 672944, 5483310, 49.4778, 5.38751, 240),
('55253', 'Les Islettes', '31T', 646301, 5441681, 49.1106, 5.00472, 170),
('55254', 'Les Trois-Domaines', '31T', 667338, 5426270, 48.9667, 5.28639, 280),
('55255', 'Jametz', '31T', 672619, 5478293, 49.4328, 5.38084, 209),
('55256', 'Jonville-en-Woëvre', '31T', 703574, 5438794, 49.0683, 5.78722, 216),
('55257', 'Jouy-en-Argonne', '31T', 662155, 5444812, 49.1347, 5.22305, 250),
('55258', 'Geville', '31T', 697825, 5405571, 48.7717, 5.69249, 280),
('55260', 'Julvécourt', '31T', 660032, 5436901, 49.0642, 5.19084, 250),
('55261', 'Juvigny-en-Perthois', '31T', 658780, 5384983, 48.5978, 5.15361, 280),
('55262', 'Juvigny-sur-Loison', '31T', 669456, 5482119, 49.4681, 5.33889, 185),
('55265', 'Labeuville', '31T', 703859, 5442082, 49.0978, 5.79277, 200),
('55266', 'Lachalade', '31T', 642893, 5447957, 49.1678, 4.96027, 150),
('55267', 'Lachaussée', '31T', 706033, 5435484, 49.0378, 5.81916, 211),
('55268', 'Lacroix-sur-Meuse', '31T', 683843, 5427440, 48.9725, 5.51222, 220),
('55269', 'Lahaymeix', '31T', 676526, 5423371, 48.9381, 5.41056, 280),
('55270', 'Lahayville', '31T', 703988, 5418653, 48.8872, 5.78278, 230);
INSERT INTO `ods_communes` (`oc_code_insee`, `oc_nom`, `oc_secteur`, `oc_x_utm`, `oc_y_utm`, `oc_latitude`, `oc_longitude`, `oc_altitude`) VALUES
('55271', 'Laheycourt', '31T', 648149, 5417259, 48.8906, 5.02112, 170),
('55272', 'Laimont', '31T', 650044, 5411192, 48.8356, 5.04473, 190),
('55274', 'Lamorville', '31T', 688687, 5426212, 48.96, 5.57777, 250),
('55275', 'Lamouilly', '31T', 661782, 5490941, 49.5494, 5.23667, 180),
('55276', 'Landrecourt-Lempire', '31T', 671357, 5441690, 49.1042, 5.34777, 220),
('55278', 'Laneuville-au-Rupt', '31T', 690284, 5397829, 48.7044, 5.5864, 280),
('55279', 'Laneuville-sur-Meuse', '31T', 656659, 5484487, 49.4928, 5.16333, 166),
('55280', 'Lanhères', '31T', 697620, 5454159, 49.2083, 5.71333, 215),
('55281', 'Latour-en-Woëvre', '31T', 705419, 5441089, 49.0883, 5.81361, 210),
('55282', 'Lavallée', '31T', 671769, 5409222, 48.8122, 5.33972, 300),
('55284', 'Lavincourt', '31T', 658401, 5391894, 48.66, 5.15111, 200),
('55285', 'Lavoye', '31T', 656419, 5434665, 49.045, 5.14055, 205),
('55286', 'Lemmes', '31T', 667158, 5437637, 49.0689, 5.28862, 280),
('55288', 'Lérouville', '31T', 686856, 5407357, 48.7911, 5.54417, 250),
('55289', 'Levoncourt', '31T', 672443, 5410541, 48.8239, 5.34945, 290),
('55290', 'Lignières-sur-Aire', '31T', 674819, 5408945, 48.8089, 5.38111, 292),
('55291', 'Ligny-en-Barrois', '31T', 671104, 5395573, 48.6897, 5.325, 225),
('55292', 'Liny-devant-Dun', '31T', 659837, 5469405, 49.3564, 5.20111, 190),
('55293', 'Lion-devant-Dun', '31T', 661710, 5475703, 49.4125, 5.22944, 178),
('55295', 'Lisle-en-Barrois', '31T', 655885, 5418211, 48.8972, 5.12694, 210),
('55296', 'Lisle-en-Rigault', '31T', 650725, 5398017, 48.7169, 5.04917, 180),
('55297', 'Lissey', '31T', 670446, 5471672, 49.3739, 5.34805, 240),
('55298', 'Loisey-Culey', '31T', 667891, 5403788, 48.7644, 5.28472, 246),
('55299', 'Loison', '31T', 689962, 5465359, 49.3114, 5.61361, 225),
('55300', 'Longeaux', '31T', 672357, 5390759, 48.6461, 5.34, 250),
('55301', 'Longchamps-sur-Aire', '31T', 669097, 5419926, 48.9092, 5.30777, 250),
('55302', 'Longeville-en-Barrois', '31T', 662439, 5400909, 48.74, 5.20945, 193),
('55303', 'Loupmont', '31T', 696135, 5416454, 48.87, 5.67472, 270),
('55304', 'Louppy-le-Château', '31T', 652229, 5414835, 48.8678, 5.07584, 190),
('55306', 'Louppy-sur-Loison', '31T', 670217, 5479670, 49.4458, 5.34833, 187),
('55307', 'Louvemont-Côte-du-Poivre', '31T', 674410, 5456775, 49.2389, 5.3961, 300),
('55310', 'Luzy-Saint-Martin', '31T', 655888, 5488235, 49.5267, 5.15417, 170),
('55311', 'Maizeray', '31T', 697265, 5442554, 49.1042, 5.70278, 215),
('55312', 'Maizey', '31T', 683999, 5422129, 48.9247, 5.51195, 217),
('55313', 'Malancourt', '31T', 658626, 5456823, 49.2436, 5.17945, 229),
('55315', 'Mandres-en-Barrois', '31T', 676662, 5373587, 48.4906, 5.39111, 360),
('55316', 'Mangiennes', '31T', 683491, 5470301, 49.3578, 5.52695, 210),
('55317', 'Manheulles', '31T', 689530, 5443210, 49.1125, 5.59722, 240),
('55320', 'Marchéville-en-Woëvre', '31T', 695860, 5440958, 49.0903, 5.68278, 217),
('55321', 'Marre', '31T', 667706, 5453662, 49.2128, 5.30278, 190),
('55322', 'Marson-sur-Barboure', '31T', 680147, 5390509, 48.6417, 5.44556, 280),
('55323', 'Martincourt-sur-Meuse', '31T', 657243, 5489356, 49.5364, 5.17333, 180),
('55324', 'Marville', '31T', 678061, 5480785, 49.4536, 5.45694, 216),
('55325', 'Maucourt-sur-Orne', '31T', 682678, 5458311, 49.2503, 5.51028, 235),
('55326', 'Maulan', '31T', 665899, 5393099, 48.6689, 5.25334, 281),
('55327', 'Mauvages', '31T', 688384, 5385525, 48.5944, 5.555, 299),
('55328', 'Maxey-sur-Vaise', '31T', 696817, 5379477, 48.5375, 5.66639, 260),
('55329', 'Mécrin', '31T', 685937, 5411035, 48.8244, 5.53334, 230),
('55330', 'Méligny-le-Grand', '31T', 683457, 5394511, 48.6767, 5.49222, 329),
('55331', 'Méligny-le-Petit', '31T', 681656, 5392598, 48.66, 5.46694, 296),
('55332', 'Menaucourt', '31T', 673550, 5391260, 48.6503, 5.3564, 240),
('55333', 'Ménil-aux-Bois', '31T', 679444, 5408598, 48.8044, 5.44389, 290),
('55334', 'Ménil-la-Horgne', '31T', 685942, 5397343, 48.7014, 5.52722, 330),
('55335', 'Ménil-sur-Saulx', '31T', 663290, 5388480, 48.6281, 5.21611, 232),
('55336', 'Merles-sur-Loison', '31T', 680057, 5472783, 49.3811, 5.48083, 200),
('55338', 'Milly-sur-Bradon', '31T', 660042, 5474139, 49.3989, 5.20583, 175),
('55339', 'Mogeville', '31T', 684098, 5457586, 49.2433, 5.52944, 228),
('55340', 'Mognéville', '31T', 647468, 5405222, 48.7825, 5.0075, 145),
('55341', 'Moirey-Flabas-Crépion', '31T', 674654, 5464386, 49.3072, 5.40278, 240),
('55343', 'Montblainville', '31T', 646422, 5456979, 49.2481, 5.01194, 170),
('55344', 'Montbras', '31T', 699091, 5378444, 48.5275, 5.69667, 267),
('55345', 'Mont-devant-Sassey', '31T', 657139, 5475508, 49.4119, 5.1664, 200),
('55346', 'Montfaucon-d''Argonne', '31T', 655155, 5460062, 49.2736, 5.13305, 280),
('55347', 'Les Monthairons', '31T', 676132, 5435751, 49.0494, 5.41055, 210),
('55348', 'Montiers-sur-Saulx', '31T', 667497, 5377881, 48.5317, 5.26889, 290),
('55349', 'Montigny-devant-Sassey', '31T', 656065, 5477795, 49.4328, 5.1525, 190),
('55350', 'Montigny-lès-Vaucouleurs', '31T', 694080, 5385039, 48.5883, 5.63194, 300),
('55351', 'Montmédy', '31T', 671260, 5488171, 49.5219, 5.36638, 194),
('55352', 'Montplonne', '31T', 659722, 5395114, 48.6886, 5.17028, 224),
('55353', 'Montsec', '31T', 699433, 5418890, 48.8908, 5.72083, 280),
('55355', 'Montzéville', '31T', 661904, 5451294, 49.1931, 5.22222, 250),
('55356', 'Moranville', '31T', 685586, 5450063, 49.1753, 5.54639, 218),
('55357', 'Morgemoulin', '31T', 687708, 5456780, 49.235, 5.57861, 205),
('55358', 'Chanteraine', '31T', 674386, 5394654, 48.6806, 5.36917, 270),
('55359', 'Morley', '31T', 665727, 5382958, 48.5778, 5.24695, 257),
('55360', 'Mouilly', '31T', 685133, 5436354, 49.0522, 5.53389, 310),
('55361', 'Moulainville', '31T', 681985, 5448644, 49.1636, 5.49639, 255),
('55362', 'Moulins-Saint-Hubert', '31T', 653567, 5494195, 49.5808, 5.12445, 190),
('55363', 'Moulotte', '31T', 699966, 5442527, 49.1031, 5.73973, 210),
('55364', 'Mouzay', '31T', 660552, 5481479, 49.4647, 5.21583, 175),
('55365', 'Murvaux', '31T', 662843, 5473542, 49.3928, 5.24416, 200),
('55366', 'Val-d''Ornain', '31T', 651961, 5407443, 48.8014, 5.06944, 270),
('55367', 'Muzeray', '31T', 690676, 5468660, 49.3408, 5.62501, 240),
('55368', 'Naives-en-Blois', '31T', 687626, 5392887, 48.6608, 5.54806, 300),
('55369', 'Naives-Rosières', '31T', 662912, 5407102, 48.7956, 5.21833, 240),
('55370', 'Naix-aux-Forges', '31T', 674988, 5389790, 48.6367, 5.37528, 245),
('55371', 'Nançois-le-Grand', '31T', 675205, 5398574, 48.7156, 5.38195, 270),
('55372', 'Nançois-sur-Ornain', '31T', 669271, 5398021, 48.7122, 5.30111, 218),
('55373', 'Nant-le-Grand', '31T', 663931, 5393906, 48.6767, 5.22695, 249),
('55374', 'Nant-le-Petit', '31T', 663122, 5391472, 48.655, 5.21501, 240),
('55375', 'Nantillois', '31T', 655600, 5462917, 49.2992, 5.14027, 230),
('55376', 'Nantois', '31T', 673247, 5389767, 48.6369, 5.35166, 260),
('55377', 'Nepvant', '31T', 660847, 5489925, 49.5406, 5.22334, 180),
('55378', 'Nettancourt', '31T', 642512, 5415381, 48.875, 4.94361, 150),
('55379', 'Le Neufour', '31T', 644773, 5444267, 49.1342, 4.98472, 170),
('55380', 'Neuville-en-Verdunois', '31T', 668332, 5423673, 48.9431, 5.29889, 270),
('55381', 'Neuville-lès-Vaucouleurs', '31T', 697108, 5384062, 48.5786, 5.6725, 255),
('55382', 'Neuville-sur-Ornain', '31T', 650182, 5409836, 48.8233, 5.04611, 159),
('55383', 'Neuvilly-en-Argonne', '31T', 650133, 5447747, 49.1642, 5.05945, 180),
('55384', 'Nicey-sur-Aire', '31T', 671398, 5417307, 48.885, 5.33805, 260),
('55385', 'Nixéville-Blercourt', '31T', 666003, 5442268, 49.1108, 5.27472, 270),
('55386', 'Nonsard-Lamarche', '31T', 702428, 5423418, 48.9306, 5.76389, 220),
('55387', 'Nouillonpont', '31T', 691748, 5470923, 49.3608, 5.64084, 225),
('55388', 'Noyers-Auzécourt', '31T', 644766, 5416490, 48.8844, 4.97472, 149),
('55389', 'Nubécourt', '31T', 659006, 5429455, 48.9975, 5.17388, 220),
('55391', 'Olizy-sur-Chiers', '31T', 660588, 5491864, 49.5581, 5.22055, 190),
('55394', 'Ornes', '31T', 679914, 5458684, 49.2544, 5.4725, 250),
('55395', 'Osches', '31T', 664890, 5435375, 49.0492, 5.25667, 300),
('55396', 'Ourches-sur-Meuse', '31T', 698873, 5393305, 48.6611, 5.70083, 250),
('55397', 'Pagny-la-Blanche-Côte', '31T', 700882, 5380053, 48.5414, 5.72167, 270),
('55398', 'Pagny-sur-Meuse', '31T', 699994, 5396343, 48.6881, 5.71751, 242),
('55399', 'Pareid', '31T', 698077, 5444252, 49.1192, 5.71472, 214),
('55400', 'Parfondrupt', '31T', 698853, 5448608, 49.1581, 5.72749, 193),
('55401', 'Les Paroches', '31T', 684320, 5420409, 48.9092, 5.51555, 220),
('55403', 'Peuvillers', '31T', 673761, 5471529, 49.3717, 5.39361, 200),
('55404', 'Pierrefitte-sur-Aire', '31T', 670797, 5418958, 48.9, 5.33055, 260),
('55405', 'Pillon', '31T', 686802, 5472669, 49.3781, 5.57361, 228),
('55406', 'Pintheville', '31T', 694541, 5443261, 49.1114, 5.66584, 225),
('55407', 'Pont-sur-Meuse', '31T', 687061, 5408538, 48.8017, 5.5475, 240),
('55408', 'Pouilly-sur-Meuse', '31T', 652540, 5489964, 49.5431, 5.10861, 180),
('55409', 'Pretz-en-Argonne', '31T', 657283, 5424956, 48.9575, 5.1486, 220),
('55410', 'Quincy-Landzécourt', '31T', 666323, 5485113, 49.4958, 5.29694, 190),
('55411', 'Rambluzin-et-Benoite-Vaux', '31T', 670915, 5429716, 48.9967, 5.33667, 250),
('55412', 'Rambucourt', '31T', 702414, 5413711, 48.8433, 5.75889, 260),
('55414', 'Rancourt-sur-Ornain', '31T', 640447, 5409984, 48.8269, 4.91361, 132),
('55415', 'Ranzières', '31T', 682184, 5432733, 49.0206, 5.49194, 240),
('55416', 'Rarécourt', '31T', 655078, 5438336, 49.0783, 5.12362, 210),
('55419', 'Récicourt', '31T', 657291, 5445444, 49.1417, 5.15667, 200),
('55420', 'Récourt-le-Creux', '31T', 674943, 5430954, 49.0067, 5.39223, 225),
('55421', 'Reffroy', '31T', 681825, 5389296, 48.6303, 5.46778, 290),
('55422', 'Regnéville-sur-Meuse', '31T', 669286, 5458254, 49.2536, 5.3264, 190),
('55423', 'Rembercourt-Sommaisne', '31T', 659648, 5419863, 48.9111, 5.17889, 234),
('55424', 'Remennecourt', '31T', 641007, 5407187, 48.8017, 4.92027, 130),
('55425', 'Remoiville', '31T', 671143, 5479730, 49.4461, 5.36112, 189),
('55426', 'Resson', '31T', 663975, 5404291, 48.77, 5.23167, 240),
('55427', 'Revigny-sur-Ornain', '31T', 645756, 5410584, 48.8311, 4.98611, 145),
('55428', 'Réville-aux-Bois', '31T', 671298, 5468948, 49.3492, 5.35861, 230),
('55429', 'Riaville', '31T', 694855, 5442407, 49.1036, 5.66972, 225),
('55430', 'Ribeaucourt', '31T', 673834, 5379371, 48.5433, 5.35527, 300),
('55431', 'Richecourt', '31T', 702491, 5417763, 48.8797, 5.76194, 230),
('55433', 'Rigny-la-Salle', '31T', 698911, 5388762, 48.6203, 5.69917, 250),
('55434', 'Rigny-Saint-Martin', '31T', 699989, 5387842, 48.6117, 5.71333, 260),
('55435', 'Robert-Espagne', '31T', 649434, 5401164, 48.7456, 5.03277, 160),
('55436', 'Les Roises', '31T', 695242, 5370397, 48.4564, 5.64083, 300),
('55437', 'Romagne-sous-les-Côtes', '31T', 679471, 5466644, 49.3261, 5.47, 230),
('55438', 'Romagne-sous-Montfaucon', '31T', 651295, 5466598, 49.3333, 5.0825, 234),
('55439', 'Ronvaux', '31T', 686359, 5445174, 49.1311, 5.55472, 240),
('55442', 'Raival', '31T', 666191, 5415605, 48.8711, 5.26639, 280),
('55443', 'Rouvres-en-Woëvre', '31T', 695809, 5455548, 49.2214, 5.68917, 225),
('55444', 'Rouvrois-sur-Meuse', '31T', 684271, 5424363, 48.9447, 5.51667, 217),
('55445', 'Rouvrois-sur-Othain', '31T', 690869, 5472964, 49.3794, 5.62972, 226),
('55446', 'Rumont', '31T', 666995, 5411209, 48.8314, 5.27555, 310),
('55447', 'Rupt-aux-Nonains', '31T', 655630, 5392898, 48.6697, 5.11388, 190),
('55448', 'Rupt-devant-Saint-Mihiel', '31T', 676354, 5417215, 48.8828, 5.40556, 270),
('55449', 'Rupt-en-Woëvre', '31T', 681880, 5436432, 49.0539, 5.48945, 240),
('55450', 'Rupt-sur-Othain', '31T', 680637, 5477223, 49.4208, 5.49083, 220),
('55452', 'Saint-Amand-sur-Ornain', '31T', 675783, 5388609, 48.6258, 5.38556, 249),
('55453', 'Saint-André-en-Barrois', '31T', 663136, 5431460, 49.0144, 5.23111, 270),
('55454', 'Saint-Aubin-sur-Aire', '31T', 679756, 5397605, 48.7056, 5.44334, 350),
('55456', 'Saint-Germain-sur-Meuse', '31T', 698037, 5392039, 48.65, 5.68888, 250),
('55457', 'Saint-Hilaire-en-Woëvre', '31T', 697615, 5440155, 49.0825, 5.70639, 210),
('55458', 'Saint-Jean-lès-Buzy', '31T', 699001, 5449572, 49.1667, 5.73, 195),
('55459', 'Saint-Joire', '31T', 678347, 5385260, 48.595, 5.41889, 270),
('55460', 'Saint-Julien-sous-les-Côtes', '31T', 691794, 5410461, 48.8175, 5.61278, 270),
('55461', 'Saint-Laurent-sur-Othain', '31T', 683384, 5474686, 49.3972, 5.5275, 236),
('55462', 'Saint-Maurice-sous-les-Côtes', '31T', 695756, 5432979, 49.0186, 5.6775, 260),
('55463', 'Saint-Mihiel', '31T', 686450, 5418254, 48.8892, 5.54361, 220),
('55464', 'Saint-Pierrevillers', '31T', 694818, 5473165, 49.38, 5.68417, 270),
('55465', 'Saint-Remy-la-Calonne', '31T', 690159, 5436122, 49.0486, 5.6025, 290),
('55466', 'Salmagne', '31T', 670855, 5402395, 48.7511, 5.32444, 260),
('55467', 'Sampigny', '31T', 684201, 5411071, 48.8253, 5.50972, 230),
('55468', 'Samogneux', '31T', 670207, 5458560, 49.2561, 5.33917, 210),
('55469', 'Sassey-sur-Meuse', '31T', 658601, 5475828, 49.4144, 5.18666, 175),
('55470', 'Saudrupt', '31T', 651757, 5396129, 48.6997, 5.0625, 200),
('55471', 'Saulmory-et-Villefranche', '31T', 657786, 5478215, 49.4361, 5.17638, 175),
('55472', 'Saulvaux', '31T', 682381, 5398030, 48.7086, 5.47917, 320),
('55473', 'Saulx-lès-Champlon', '31T', 693903, 5438880, 49.0722, 5.655, 220),
('55474', 'Sauvigny', '31T', 700601, 5375252, 48.4983, 5.71556, 264),
('55475', 'Sauvoy', '31T', 691767, 5390337, 48.6367, 5.60306, 265),
('55476', 'Savonnières-devant-Bar', '31T', 660063, 5402509, 48.755, 5.17778, 193),
('55477', 'Savonnières-en-Perthois', '31T', 657156, 5385895, 48.6064, 5.13194, 284),
('55479', 'Seigneulles', '31T', 664096, 5413349, 48.8514, 5.23694, 270),
('55481', 'Senon', '31T', 692100, 5462002, 49.2806, 5.64138, 238),
('55482', 'Senoncourt-les-Maujouy', '31T', 670437, 5436655, 49.0592, 5.33306, 270),
('55484', 'Septsarges', '31T', 657576, 5460965, 49.2811, 5.16666, 240),
('55485', 'Sepvigny', '31T', 698090, 5381809, 48.5581, 5.68472, 255),
('55487', 'Seuzey', '31T', 687205, 5429129, 48.9867, 5.55889, 250),
('55488', 'Silmont', '31T', 665152, 5400370, 48.7344, 5.24611, 210),
('55489', 'Sivry-la-Perche', '31T', 664144, 5446107, 49.1458, 5.25083, 270),
('55490', 'Sivry-sur-Meuse', '31T', 664833, 5465721, 49.3219, 5.26833, 185),
('55492', 'Sommedieue', '31T', 679917, 5439953, 49.0861, 5.46417, 240),
('55493', 'Sommeilles', '31T', 643146, 5418487, 48.9028, 4.95334, 160),
('55494', 'Sommelonne', '31T', 650152, 5392656, 48.6689, 5.03944, 180),
('55495', 'Sorbey', '31T', 687092, 5474812, 49.3972, 5.57861, 230),
('55496', 'Sorcy-Saint-Martin', '31T', 693708, 5398781, 48.7119, 5.63333, 240),
('55497', 'Les Souhesmes-Rampont', '31T', 664531, 5439258, 49.0842, 5.25334, 250),
('55498', 'Souilly', '31T', 667249, 5433251, 49.0294, 5.28805, 294),
('55500', 'Spincourt', '31T', 693695, 5467808, 49.3322, 5.66611, 240),
('55501', 'Stainville', '31T', 660893, 5391377, 48.6547, 5.18472, 220),
('55502', 'Stenay', '31T', 658505, 5484695, 49.4942, 5.18889, 180),
('55503', 'Taillancourt', '31T', 698785, 5378959, 48.5322, 5.69277, 260),
('55504', 'Tannois', '31T', 664120, 5399320, 48.7253, 5.23166, 210),
('55505', 'Thierville-sur-Meuse', '31T', 671382, 5449386, 49.1733, 5.35139, 195),
('55506', 'Thillombois', '31T', 675749, 5425386, 48.9564, 5.40083, 246),
('55507', 'Thillot', '31T', 695127, 5434100, 49.0289, 5.66944, 260),
('55508', 'Thonne-la-Long', '31T', 675232, 5492934, 49.5636, 5.42333, 210),
('55509', 'Thonne-le-Thil', '31T', 669758, 5493749, 49.5725, 5.34805, 250),
('55510', 'Thonne-les-Près', '31T', 670065, 5489061, 49.5303, 5.35027, 200),
('55511', 'Thonnelle', '31T', 670927, 5491746, 49.5542, 5.36334, 200),
('55512', 'Tilly-sur-Meuse', '31T', 678459, 5431004, 49.0061, 5.44028, 210),
('55514', 'Trémont-sur-Saulx', '31T', 651268, 5401368, 48.7469, 5.05778, 170),
('55515', 'Trésauvaux', '31T', 690348, 5439498, 49.0789, 5.60667, 250),
('55516', 'Tréveray', '31T', 676720, 5386816, 48.6094, 5.3975, 260),
('55517', 'Seuil-d''Argonne', '31T', 650798, 5427001, 48.9775, 5.06083, 175),
('55518', 'Cousances-lès-Triconville', '31T', 675301, 5403985, 48.7642, 5.38555, 317),
('55519', 'Tronville-en-Barrois', '31T', 667611, 5398805, 48.7197, 5.27889, 212),
('55520', 'Troussey', '31T', 698691, 5397873, 48.7022, 5.70056, 240),
('55521', 'Troyon', '31T', 680252, 5430877, 49.0044, 5.46472, 215),
('55522', 'Ugny-sur-Meuse', '31T', 699160, 5390997, 48.6403, 5.70361, 255),
('55523', 'Vacherauville', '31T', 672033, 5455155, 49.225, 5.36278, 190),
('55525', 'Vadelaincourt', '31T', 665320, 5437983, 49.0725, 5.26361, 260),
('55526', 'Vadonville', '31T', 685408, 5408514, 48.8019, 5.525, 240),
('55527', 'Varennes-en-Argonne', '31T', 648317, 5454960, 49.2294, 5.03722, 175),
('55528', 'Varnéville', '31T', 694948, 5416567, 48.8714, 5.65861, 270),
('55530', 'Valbois', '31T', 691656, 5423346, 48.9333, 5.61694, 270),
('55531', 'Vassincourt', '31T', 648933, 5407701, 48.8044, 5.02833, 185),
('55532', 'Vaubecourt', '31T', 654753, 5422289, 48.9342, 5.11305, 200),
('55533', 'Vaucouleurs', '31T', 696443, 5386666, 48.6022, 5.66472, 255),
('55534', 'Vaudeville-le-Haut', '31T', 692455, 5369528, 48.4494, 5.60277, 390),
('55535', 'Vaudoncourt', '31T', 692473, 5466374, 49.3197, 5.64861, 240),
('55536', 'Vauquois', '31T', 651022, 5452283, 49.2047, 5.07334, 230),
('55537', 'Vaux-devant-Damloup', '31T', 680128, 5453993, 49.2122, 5.47334, 270),
('55540', 'Vaux-lès-Palameix', '31T', 685638, 5432785, 49.02, 5.53916, 250),
('55541', 'Vavincourt', '31T', 662189, 5410203, 48.8236, 5.20972, 280),
('55543', 'Velaines', '31T', 669402, 5397066, 48.7036, 5.3025, 215),
('55544', 'Velosnes', '31T', 677642, 5486861, 49.5083, 5.4539, 210),
('55545', 'Verdun', '31T', 674350, 5448459, 49.1642, 5.39167, 200),
('55546', 'Verneuil-Grand', '31T', 674933, 5489092, 49.5292, 5.4175, 190),
('55547', 'Verneuil-Petit', '31T', 674699, 5490753, 49.5442, 5.415, 230),
('55549', 'Véry', '31T', 650521, 5457275, 49.2497, 5.06834, 190),
('55551', 'Vigneulles-lès-Hattonchâtel', '31T', 697936, 5428883, 48.9811, 5.70528, 260),
('55552', 'Vigneul-sous-Montmédy', '31T', 668767, 5486826, 49.5106, 5.33139, 190),
('55553', 'Vignot', '31T', 691696, 5405573, 48.7736, 5.60917, 235),
('55554', 'Villécloye', '31T', 673601, 5487318, 49.5136, 5.39833, 200),
('55555', 'Ville-devant-Belrain', '31T', 671388, 5415638, 48.87, 5.33722, 260),
('55556', 'Ville-devant-Chaumont', '31T', 676493, 5463147, 49.2956, 5.4275, 250),
('55557', 'Ville-en-Woëvre', '31T', 691745, 5445451, 49.1319, 5.62861, 240),
('55559', 'Villeroy-sur-Méholle', '31T', 689888, 5387739, 48.6139, 5.57639, 300),
('55560', 'Villers-aux-Vents', '31T', 647965, 5413422, 48.8561, 5.01722, 180),
('55561', 'Villers-devant-Dun', '31T', 653137, 5473695, 49.3967, 5.11056, 315),
('55562', 'Villers-le-Sec', '31T', 669207, 5387913, 48.6214, 5.29611, 316),
('55563', 'Villers-lès-Mangiennes', '31T', 681918, 5472072, 49.3742, 5.50612, 201),
('55565', 'Villers-sous-Pareid', '31T', 699530, 5445046, 49.1258, 5.73501, 211),
('55566', 'Villers-sur-Meuse', '31T', 676743, 5432526, 49.0203, 5.4175, 210),
('55567', 'Ville-sur-Cousances', '31T', 658934, 5439063, 49.0839, 5.17667, 230),
('55568', 'Ville-sur-Saulx', '31T', 651476, 5397450, 48.7117, 5.05917, 180),
('55569', 'Villotte-devant-Louppy', '31T', 652216, 5416812, 48.8856, 5.0764, 200),
('55570', 'Villotte-sur-Aire', '31T', 671793, 5414415, 48.8589, 5.34222, 270),
('55571', 'Vilosnes-Haraumont', '31T', 662176, 5466785, 49.3322, 5.23223, 180),
('55572', 'Vittarville', '31T', 675042, 5474382, 49.3969, 5.4125, 195),
('55573', 'Void-Vacon', '31T', 692774, 5396214, 48.6892, 5.61945, 245),
('55574', 'Vouthon-Bas', '31T', 692530, 5373364, 48.4839, 5.60555, 360),
('55575', 'Vouthon-Haut', '31T', 693481, 5372592, 48.4767, 5.61805, 390),
('55577', 'Waly', '31T', 653998, 5431879, 49.0206, 5.10638, 210),
('55578', 'Warcq', '31T', 693229, 5452303, 49.1931, 5.65222, 197),
('55579', 'Watronville', '31T', 685437, 5446039, 49.1392, 5.54249, 250),
('55580', 'Wavrille', '31T', 673605, 5466888, 49.33, 5.38945, 230),
('55581', 'Willeroncourt', '31T', 674018, 5398598, 48.7161, 5.36583, 260),
('55582', 'Wiseppe', '31T', 657433, 5480677, 49.4583, 5.1725, 170),
('55583', 'Woël', '31T', 699622, 5435744, 49.0422, 5.73167, 215),
('55584', 'Woimbey', '31T', 680520, 5427640, 48.9753, 5.46694, 215),
('55586', 'Xivray-et-Marvoisin', '31T', 701188, 5416016, 48.8644, 5.74333, 230),
('56001', 'Allaire', '30T', 562744, 5276226, 47.6364, -2.16473, 60),
('56002', 'Ambon', '30T', 533354, 5266876, 47.5544, -2.55667, 10),
('56003', 'Arradon', '30T', 513440, 5274915, 47.6275, -2.82111, 20),
('56004', 'Arzal', '30T', 547161, 5262741, 47.5164, -2.37361, 40),
('56005', 'Arzon', '30T', 508026, 5266415, 47.5511, -2.89333, 20),
('56006', 'Augan', '30T', 554083, 5307570, 47.9192, -2.27611, 80),
('56007', 'Auray', '30T', 500876, 5279623, 47.67, -2.98833, 40),
('56008', 'Baden', '30T', 506199, 5274193, 47.6211, -2.9175, 30),
('56009', 'Bangor', '30T', 485872, 5240341, 47.3164, -3.18694, 50),
('56010', 'Baud', '30T', 498567, 5302593, 47.8767, -3.01916, 60),
('56011', 'Béganne', '30T', 557341, 5271786, 47.5969, -2.23723, 68),
('56012', 'Beignon', '30T', 562031, 5313455, 47.9714, -2.16889, 110),
('56013', 'Belz', '30T', 487553, 5280563, 47.6783, -3.16583, 10),
('56014', 'Berné', '30T', 470905, 5315756, 47.9944, -3.39, 123),
('56015', 'Berric', '30T', 535871, 5275628, 47.6331, -2.5225, 78),
('56016', 'Bieuzy', '30T', 495295, 5314295, 47.9819, -3.06305, 100),
('56017', 'Bignan', '30T', 517176, 5302958, 47.8797, -2.77028, 140),
('56018', 'Billiers', '30T', 538532, 5264530, 47.5331, -2.48806, 21),
('56019', 'Billio', '30T', 527629, 5301732, 47.8683, -2.63055, 117),
('56020', 'Bohal', '30T', 542136, 5292249, 47.7822, -2.4375, 70),
('56021', 'Brandérion', '30T', 485562, 5293318, 47.7931, -3.19278, 40),
('56022', 'Brandivy', '30T', 504329, 5291418, 47.7761, -2.94222, 70),
('56023', 'Brech', '30T', 500417, 5285366, 47.7217, -2.99444, 45),
('56024', 'Bréhan', '30T', 523428, 5323171, 48.0614, -2.68556, 90),
('56025', 'Brignac', '30T', 545829, 5330130, 48.1228, -2.38417, 90),
('56026', 'Bubry', '30T', 486978, 5312240, 47.9633, -3.17444, 100),
('56027', 'Buléon', '30T', 524191, 5309219, 47.9358, -2.67611, 116),
('56028', 'Caden', '30T', 553777, 5275549, 47.6311, -2.28417, 68),
('56029', 'Calan', '30T', 475989, 5302426, 47.8747, -3.32111, 100),
('56030', 'Camoël', '30T', 545642, 5258963, 47.4825, -2.39417, 30),
('56031', 'Camors', '30T', 500000, 5299443, 47.8483, -3, 114),
('56032', 'Campénéac', '30T', 552943, 5311882, 47.9581, -2.29084, 75),
('56033', 'Carentoir', '30T', 565024, 5296258, 47.8164, -2.13139, 50),
('56034', 'Carnac', '30T', 494026, 5270148, 47.5847, -3.07945, 15),
('56035', 'Caro', '30T', 551025, 5301366, 47.8636, -2.31777, 105),
('56036', 'Caudan', '30T', 474608, 5295393, 47.8114, -3.33916, 50),
('56037', 'La Chapelle-Caro', '30T', 543294, 5301581, 47.8661, -2.42111, 70),
('56038', 'La Chapelle-Gaceline', '30T', 567020, 5292668, 47.7839, -2.10528, 22),
('56039', 'La Chapelle-Neuve', '30T', 504425, 5301236, 47.8644, -2.94083, 65),
('56040', 'Cléguer', '30T', 471408, 5300163, 47.8542, -3.38222, 50),
('56041', 'Cléguérec', '30T', 495039, 5330165, 48.1247, -3.06667, 156),
('56042', 'Colpo', '30T', 514597, 5296189, 47.8189, -2.805, 87),
('56043', 'Concoret', '30T', 559211, 5323583, 48.0628, -2.20527, 90),
('56044', 'Cournon', '30T', 567297, 5288534, 47.7467, -2.10222, 15),
('56045', 'Le Cours', '30T', 537628, 5287926, 47.7436, -2.49805, 87),
('56046', 'Crach', '30T', 500000, 5273634, 47.6161, -3, 29),
('56047', 'Crédin', '30T', 517394, 5320217, 48.035, -2.76666, 129),
('56048', 'Le Croisty', '30T', 472807, 5323558, 48.0647, -3.365, 204),
('56049', 'Croixanvec', '30T', 509857, 5331962, 48.1408, -2.8675, 160),
('56050', 'La Croix-Helléan', '30T', 537473, 5311698, 47.9575, -2.49806, 90),
('56051', 'Cruguel', '30T', 530365, 5302888, 47.8786, -2.59389, 145),
('56052', 'Damgan', '30T', 531787, 5262946, 47.5192, -2.57778, 10),
('56053', 'Elven', '30T', 530846, 5286744, 47.7333, -2.58861, 91),
('56054', 'Erdeven', '30T', 488379, 5276455, 47.6414, -3.15472, 16),
('56055', 'Étel', '30T', 485129, 5278531, 47.66, -3.19806, 10),
('56056', 'Évriguet', '30T', 543985, 5325299, 48.0794, -2.40944, 80),
('56057', 'Le Faouët', '30T', 463866, 5320212, 48.0342, -3.48472, 152),
('56058', 'Férel', '30T', 549661, 5258965, 47.4822, -2.34083, 40),
('56059', 'Les Forges', '30T', 526513, 5318430, 48.0186, -2.64445, 54),
('56060', 'Les Fougerêts', '30T', 559227, 5287582, 47.7389, -2.21, 42),
('56061', 'La Gacilly', '30T', 565232, 5290672, 47.7661, -2.12945, 30),
('56062', 'Gâvres', '30T', 473423, 5281876, 47.6897, -3.35416, 10),
('56063', 'Gestel', '30T', 467096, 5294752, 47.8053, -3.43945, 50),
('56064', 'Glénac', '30T', 565218, 5286411, 47.7278, -2.13027, 19),
('56065', 'Gourhel', '30T', 547861, 5309521, 47.9372, -2.35917, 90),
('56066', 'Gourin', '30T', 454931, 5332162, 48.1411, -3.60583, 141),
('56067', 'Grand-Champ', '30T', 511741, 5289483, 47.7586, -2.84333, 128),
('56068', 'La Grée-Saint-Laurent', '30T', 537613, 5315713, 47.9936, -2.49584, 92),
('56069', 'Groix', '30T', 465928, 5276358, 47.6397, -3.45361, 30),
('56070', 'Guégon', '30T', 532675, 5309415, 47.9372, -2.5625, 90),
('56071', 'Guéhenno', '30T', 527221, 5304478, 47.8931, -2.63584, 110),
('56072', 'Gueltas', '30T', 515326, 5326911, 48.0953, -2.79417, 110),
('56073', 'Guémené-sur-Scorff', '30T', 484666, 5323854, 48.0678, -3.20583, 137),
('56074', 'Guénin', '30T', 501619, 5305989, 47.9072, -2.97834, 63),
('56075', 'Guer', '30T', 565725, 5305930, 47.9033, -2.12055, 40),
('56076', 'Guern', '30T', 493456, 5319762, 48.0311, -3.08778, 150),
('56077', 'Le Guerno', '30T', 544677, 5270255, 47.5842, -2.40583, 71),
('56078', 'Guidel', '30T', 463404, 5293107, 47.7903, -3.48862, 38),
('56079', 'Guillac', '30T', 540102, 5306529, 47.9108, -2.46333, 50),
('56080', 'Guilliers', '30T', 544616, 5321259, 48.0431, -2.40139, 86),
('56081', 'Guiscriff', '30T', 452058, 5322181, 48.0511, -3.64333, 197),
('56082', 'Helléan', '30T', 539287, 5313316, 47.9719, -2.47362, 50),
('56083', 'Hennebont', '30T', 479346, 5294541, 47.8039, -3.27584, 33),
('56084', 'Le Hézo', '30T', 522327, 5270312, 47.5858, -2.70306, 6),
('56086', 'Île-d''Houat', '30T', 503480, 5248506, 47.39, -2.95389, 28),
('56087', 'Île-aux-Moines', '30T', 511173, 5270650, 47.5892, -2.85139, 27),
('56088', 'Île-d''Arz', '30T', 514744, 5270813, 47.5906, -2.80389, 19),
('56089', 'Inguiniel', '30T', 479063, 5313900, 47.9781, -3.28056, 140),
('56090', 'Inzinzac-Lochrist', '30T', 480151, 5298798, 47.8422, -3.26528, 72),
('56091', 'Josselin', '30T', 533845, 5311491, 47.9558, -2.54667, 71),
('56092', 'Kerfourn', '30T', 512712, 5321069, 48.0428, -2.82945, 120),
('56093', 'Kergrist', '30T', 503492, 5332634, 48.1469, -2.95305, 127),
('56094', 'Kervignac', '30T', 482286, 5290023, 47.7633, -3.23639, 42),
('56096', 'Landaul', '30T', 494441, 5288332, 47.7483, -3.07416, 40),
('56097', 'Landévant', '30T', 491154, 5290188, 47.765, -3.11805, 20),
('56098', 'Lanester', '30T', 474356, 5290207, 47.7647, -3.34222, 24),
('56099', 'Langoëlan', '30T', 482511, 5329881, 48.1219, -3.23501, 190),
('56100', 'Langonnet', '30T', 463172, 5328181, 48.1058, -3.49472, 180),
('56101', 'Languidic', '30T', 488546, 5297726, 47.8328, -3.15305, 66),
('56102', 'Lanouée', '30T', 531287, 5316725, 48.0031, -2.58055, 90),
('56103', 'Lantillac', '30T', 526171, 5311698, 47.9581, -2.64945, 100),
('56104', 'Lanvaudan', '30T', 480381, 5305219, 47.9, -3.2625, 98),
('56105', 'Lanvénégen', '30T', 459696, 5316164, 47.9975, -3.54028, 122),
('56106', 'Larmor-Baden', '30T', 507874, 5270583, 47.5886, -2.89527, 16),
('56107', 'Larmor-Plage', '30T', 471327, 5283862, 47.7075, -3.38222, 10),
('56108', 'Larré', '30T', 536525, 5284462, 47.7125, -2.51306, 83),
('56109', 'Lauzach', '30T', 534423, 5273519, 47.6142, -2.54194, 40),
('56110', 'Lignol', '30T', 479916, 5320627, 48.0386, -3.26944, 144),
('56111', 'Limerzel', '30T', 548661, 5275998, 47.6356, -2.35222, 40),
('56112', 'Lizio', '30T', 535713, 5301221, 47.8633, -2.5225, 144),
('56113', 'Locmalo', '30T', 486240, 5324251, 48.0714, -3.18472, 150),
('56114', 'Locmaria', '30T', 493826, 5237981, 47.2953, -3.08166, 48),
('56115', 'Locmaria-Grand-Champ', '30T', 516050, 5289463, 47.7583, -2.78584, 83),
('56116', 'Locmariaquer', '30T', 504743, 5268141, 47.5667, -2.93694, 8),
('56117', 'Locminé', '30T', 512356, 5303810, 47.8875, -2.83472, 90),
('56118', 'Locmiquélic', '30T', 474774, 5285790, 47.725, -3.33639, 23),
('56119', 'Locoal-Mendon', '30T', 492228, 5284290, 47.7119, -3.10361, 20),
('56120', 'Locqueltas', '30T', 517507, 5289529, 47.7589, -2.76639, 90),
('56121', 'Lorient', '30T', 472743, 5288054, 47.7453, -3.36361, 5),
('56122', 'Loyat', '30T', 546134, 5315343, 47.9897, -2.38167, 57),
('56123', 'Malansac', '30T', 552895, 5280759, 47.6781, -2.29528, 86),
('56124', 'Malestroit', '30T', 546107, 5295367, 47.81, -2.38416, 25),
('56125', 'Malguénac', '30T', 496297, 5325193, 48.08, -3.04972, 200),
('56126', 'Marzan', '30T', 551005, 5265583, 47.5417, -2.32223, 50),
('56127', 'Mauron', '30T', 553230, 5325686, 48.0822, -2.28528, 80),
('56128', 'Melrand', '30T', 491770, 5313991, 47.9792, -3.11028, 60),
('56129', 'Ménéac', '30T', 540214, 5331940, 48.1394, -2.45945, 160),
('56130', 'Merlevenez', '30T', 482547, 5286966, 47.7358, -3.23278, 10),
('56131', 'Meslan', '30T', 467982, 5315710, 47.9939, -3.42917, 120),
('56132', 'Meucon', '30T', 517751, 5284898, 47.7172, -2.76333, 74),
('56133', 'Missiriac', '30T', 548723, 5298321, 47.8364, -2.34889, 80),
('56134', 'Mohon', '30T', 535583, 5322276, 48.0528, -2.5225, 70),
('56135', 'Molac', '30T', 542615, 5286571, 47.7311, -2.43167, 90),
('56136', 'Monteneuf', '30T', 559304, 5302403, 47.8722, -2.20695, 100),
('56137', 'Monterblanc', '30T', 524092, 5287947, 47.7444, -2.67862, 100),
('56138', 'Monterrein', '30T', 547956, 5303131, 47.8797, -2.35861, 110),
('56139', 'Montertelot', '30T', 543407, 5303188, 47.8806, -2.41944, 25),
('56140', 'Moréac', '30T', 513572, 5307424, 47.92, -2.81834, 121),
('56141', 'Moustoir-Ac', '30T', 512550, 5300260, 47.8556, -2.83223, 121),
('56142', 'Moustoir-Remungol', '30T', 507253, 5315996, 47.9972, -2.90277, 100),
('56143', 'Muzillac', '30T', 539185, 5266912, 47.5544, -2.47917, 36),
('56144', 'Naizin', '30T', 512767, 5315141, 47.9894, -2.82889, 121),
('56145', 'Néant-sur-Yvel', '30T', 550379, 5318126, 48.0144, -2.32445, 66),
('56146', 'Neulliac', '30T', 501550, 5330750, 48.13, -2.97917, 120),
('56147', 'Nivillac', '30T', 554064, 5264839, 47.5347, -2.28167, 30),
('56148', 'Nostang', '30T', 486113, 5288623, 47.7508, -3.18527, 10),
('56149', 'Noyal-Muzillac', '30T', 541037, 5271093, 47.5919, -2.45416, 50),
('56150', 'Noyalo', '30T', 524050, 5273035, 47.6103, -2.68, 15),
('56151', 'Noyal-Pontivy', '30T', 509002, 5323748, 48.0669, -2.87917, 130),
('56152', 'Le Palais', '30T', 488523, 5243577, 47.3456, -3.15194, 10),
('56153', 'Péaule', '30T', 548544, 5269977, 47.5814, -2.35444, 75),
('56154', 'Peillac', '30T', 558819, 5284645, 47.7125, -2.21584, 60),
('56155', 'Pénestin', '30T', 539656, 5259074, 47.4839, -2.47361, 5),
('56156', 'Persquen', '30T', 485504, 5319622, 48.0297, -3.19444, 140),
('56157', 'Plaudren', '30T', 523161, 5291771, 47.7789, -2.69083, 110),
('56158', 'Plescop', '30T', 514714, 5282791, 47.6983, -2.80389, 50),
('56159', 'Pleucadeuc', '30T', 546922, 5289754, 47.7594, -2.37388, 69),
('56160', 'Pleugriffet', '30T', 523585, 5315268, 47.9903, -2.68389, 100),
('56161', 'Ploemel', '30T', 494722, 5277526, 47.6511, -3.07028, 30),
('56162', 'Ploemeur', '30T', 468053, 5287182, 47.7372, -3.42611, 37),
('56163', 'Ploërdut', '30T', 478632, 5326158, 48.0883, -3.28694, 200),
('56164', 'Ploeren', '30T', 509908, 5278026, 47.6556, -2.86805, 50),
('56165', 'Ploërmel', '30T', 545232, 5308790, 47.9308, -2.39444, 80),
('56166', 'Plouay', '30T', 475052, 5306814, 47.9142, -3.33389, 83),
('56167', 'Plougoumelen', '30T', 506279, 5277805, 47.6536, -2.91638, 20),
('56168', 'Plouharnel', '30T', 491564, 5271664, 47.5983, -3.11222, 22),
('56169', 'Plouhinec', '30T', 481242, 5282586, 47.6964, -3.25, 20),
('56170', 'Plouray', '30T', 471217, 5332520, 48.1453, -3.38694, 190),
('56171', 'Pluherlin', '30T', 547938, 5282692, 47.6958, -2.36111, 74),
('56172', 'Plumelec', '30T', 527022, 5298303, 47.8375, -2.63889, 160),
('56173', 'Pluméliau', '30T', 502053, 5311577, 47.9575, -2.9725, 110),
('56174', 'Plumelin', '30T', 508643, 5300932, 47.8617, -2.88444, 90),
('56175', 'Plumergat', '30T', 506247, 5287653, 47.7422, -2.91667, 50),
('56176', 'Pluneret', '30T', 503294, 5280180, 47.675, -2.95612, 30),
('56177', 'Pluvigner', '30T', 499147, 5291355, 47.7756, -3.01139, 85),
('56178', 'Pontivy', '30T', 502338, 5323958, 48.0689, -2.96862, 59),
('56179', 'Pont-Scorff', '30T', 470150, 5298069, 47.8353, -3.39889, 40),
('56180', 'Porcaro', '30T', 560072, 5306487, 47.9089, -2.19611, 60),
('56181', 'Port-Louis', '30T', 473452, 5283728, 47.7064, -3.35389, 10),
('56182', 'Priziac', '30T', 469431, 5323082, 48.0603, -3.41028, 166),
('56183', 'Quelneuc', '30T', 570129, 5297182, 47.8242, -2.06305, 50),
('56184', 'Questembert', '30T', 541191, 5278781, 47.6611, -2.45139, 100),
('56185', 'Quéven', '30T', 469042, 5292919, 47.7889, -3.41333, 55),
('56186', 'Quiberon', '30T', 491273, 5258699, 47.4817, -3.11584, 17),
('56187', 'Quily', '30T', 540055, 5304275, 47.8906, -2.46417, 70),
('56188', 'Quistinic', '30T', 489973, 5305750, 47.905, -3.13417, 120),
('56189', 'Radenac', '30T', 521503, 5312203, 47.9628, -2.71195, 105),
('56190', 'Réguiny', '30T', 519093, 5313738, 47.9767, -2.74416, 117),
('56191', 'Réminiac', '30T', 557511, 5300995, 47.8597, -2.23111, 70),
('56192', 'Remungol', '30T', 507573, 5308957, 47.9339, -2.89861, 90),
('56193', 'Riantec', '30T', 476726, 5284208, 47.7108, -3.31027, 5),
('56194', 'Rieux', '30T', 567259, 5272015, 47.5981, -2.10527, 20),
('56195', 'La Roche-Bernard', '30T', 552888, 5263161, 47.5197, -2.2975, 50),
('56196', 'Rochefort-en-Terre', '30T', 549957, 5283018, 47.6986, -2.33416, 50),
('56197', 'Le Roc-Saint-André', '30T', 541260, 5301319, 47.8639, -2.44833, 35),
('56198', 'Rohan', '30T', 518438, 5323987, 48.0689, -2.7525, 70),
('56199', 'Roudouallec', '30T', 446587, 5330535, 48.1258, -3.71778, 170),
('56200', 'Ruffiac', '30T', 553960, 5296330, 47.8181, -2.27916, 54),
('56201', 'Le Saint', '30T', 458009, 5326303, 48.0886, -3.56388, 160),
('56202', 'Saint-Abraham', '30T', 544404, 5300447, 47.8558, -2.40639, 60),
('56203', 'Saint-Aignan', '30T', 498988, 5336616, 48.1828, -3.01361, 80),
('56204', 'Saint-Allouestre', '30T', 520840, 5306397, 47.9106, -2.72111, 105),
('56205', 'Saint-Armel', '30T', 521916, 5268736, 47.5717, -2.70861, 10),
('56206', 'Saint-Avé', '30T', 519761, 5281941, 47.6906, -2.73666, 51),
('56207', 'Saint-Barthélemy', '30T', 496721, 5308058, 47.9258, -3.04389, 90),
('56208', 'Saint-Brieuc-de-Mauron', '30T', 547783, 5326441, 48.0894, -2.35833, 90),
('56209', 'Sainte-Brigitte', '30T', 490602, 5334524, 48.1639, -3.12639, 216),
('56210', 'Saint-Caradec-Trégomel', '30T', 473911, 5320651, 48.0386, -3.35, 173),
('56211', 'Saint-Congard', '30T', 551283, 5290995, 47.7703, -2.31555, 10),
('56212', 'Saint-Dolay', '30T', 563753, 5266048, 47.5447, -2.15278, 43),
('56213', 'Saint-Gérand', '30T', 508436, 5328378, 48.1086, -2.88667, 130),
('56214', 'Saint-Gildas-de-Rhuys', '30T', 512280, 5260805, 47.5006, -2.83695, 36),
('56215', 'Saint-Gonnery', '30T', 513498, 5330086, 48.1239, -2.81862, 130),
('56216', 'Saint-Gorgon', '30T', 557576, 5277623, 47.6494, -2.23333, 81),
('56218', 'Saint-Gravé', '30T', 554180, 5286050, 47.7256, -2.2775, 79),
('56219', 'Saint-Guyomard', '30T', 536603, 5291995, 47.7803, -2.51138, 96),
('56220', 'Sainte-Hélène', '30T', 484771, 5285200, 47.72, -3.20306, 20),
('56221', 'Saint-Jacut-les-Pins', '30T', 559080, 5281560, 47.6847, -2.21278, 53),
('56222', 'Saint-Jean-Brévelay', '30T', 520949, 5299142, 47.8453, -2.72, 98),
('56223', 'Saint-Jean-la-Poterie', '30T', 565751, 5276074, 47.6347, -2.12472, 50),
('56224', 'Saint-Laurent-sur-Oust', '30T', 551094, 5293463, 47.7925, -2.31778, 10),
('56225', 'Saint-Léry', '30T', 555560, 5326542, 48.0897, -2.25389, 60),
('56226', 'Saint-Malo-de-Beignon', '30T', 563666, 5311867, 47.9569, -2.14722, 65),
('56227', 'Saint-Malo-des-Trois-Fontaines', '30T', 539650, 5317857, 48.0128, -2.46833, 70),
('56228', 'Saint-Marcel', '30T', 543553, 5294760, 47.8047, -2.41834, 60),
('56229', 'Saint-Martin', '30T', 556138, 5288261, 47.7453, -2.25111, 10),
('56230', 'Saint-Nicolas-du-Tertre', '30T', 558427, 5294675, 47.8028, -2.21972, 60),
('56231', 'Saint-Nolff', '30T', 526299, 5283418, 47.7036, -2.64945, 84),
('56232', 'Saint-Perreux', '30T', 566993, 5280596, 47.6753, -2.1075, 15),
('56233', 'Saint-Philibert', '30T', 500021, 5270238, 47.5856, -2.99972, 10),
('56234', 'Saint-Pierre-Quiberon', '30T', 490317, 5262868, 47.5192, -3.12862, 10),
('56236', 'Saint-Servant', '30T', 536570, 5307000, 47.9153, -2.51056, 70),
('56237', 'Saint-Thuriau', '30T', 503853, 5318185, 48.0169, -2.94833, 100),
('56238', 'Saint-Tugdual', '30T', 474728, 5327501, 48.1003, -3.33945, 180),
('56239', 'Saint-Vincent-sur-Oust', '30T', 564150, 5283157, 47.6986, -2.14499, 60),
('56240', 'Sarzeau', '30T', 517397, 5263719, 47.5267, -2.76889, 28),
('56241', 'Sauzon', '30T', 483412, 5246460, 47.3714, -3.21972, 30),
('56242', 'Séglien', '30T', 488317, 5328322, 48.1081, -3.15695, 223),
('56243', 'Séné', '30T', 519913, 5274008, 47.6192, -2.735, 10),
('56244', 'Sérent', '30T', 537050, 5296814, 47.8236, -2.50501, 70),
('56245', 'Silfiac', '30T', 488285, 5332954, 48.1497, -3.1575, 270),
('56246', 'Le Sourn', '30T', 500745, 5321147, 48.0436, -2.99, 106),
('56247', 'Sulniac', '30T', 532381, 5280331, 47.6756, -2.56861, 120),
('56248', 'Surzur', '30T', 527908, 5269409, 47.5775, -2.6289, 25),
('56249', 'Taupont', '30T', 542055, 5311946, 47.9594, -2.43667, 78),
('56250', 'Théhillac', '30T', 566959, 5269017, 47.5711, -2.10972, 20),
('56251', 'Theix', '30T', 526463, 5274991, 47.6278, -2.64777, 10),
('56252', 'Le Tour-du-Parc', '30T', 526619, 5263569, 47.525, -2.64639, 12),
('56253', 'Tréal', '30T', 558262, 5298625, 47.8383, -2.22139, 90),
('56254', 'Trédion', '30T', 530685, 5293442, 47.7936, -2.59028, 83),
('56255', 'Treffléan', '30T', 529125, 5280962, 47.6814, -2.61194, 110),
('56256', 'Tréhorenteuc', '30T', 553554, 5317538, 48.0089, -2.28195, 92),
('56257', 'La Trinité-Porhoët', '30T', 534000, 5327423, 48.0992, -2.54333, 80),
('56258', 'La Trinité-sur-Mer', '30T', 497890, 5270331, 47.5864, -3.02806, 28),
('56259', 'La Trinité-Surzur', '30T', 530901, 5272296, 47.6033, -2.58889, 23),
('56260', 'Vannes', '30T', 517980, 5277984, 47.655, -2.76056, 10),
('56261', 'La Vraie-Croix', '30T', 534415, 5281979, 47.6903, -2.54138, 110),
('56262', 'Bono', '30T', 503943, 5276321, 47.6403, -2.94751, 20),
('56263', 'Sainte-Anne-d''Auray', '30T', 503543, 5283391, 47.7039, -2.95277, 50),
('56264', 'Kernascléden', '30T', 476174, 5317183, 48.0075, -3.31945, 100),
('57001', 'Aboncourt', '32T', 306873, 5459843, 49.2608, 6.34555, 200),
('57002', 'Aboncourt-sur-Seille', '32T', 304535, 5410557, 48.8172, 6.33722, 210),
('57003', 'Abreschviller', '32T', 359681, 5389003, 48.6383, 7.09528, 300),
('57004', 'Achain', '32T', 323631, 5420615, 48.9133, 6.59277, 250),
('57006', 'Achen', '32T', 367326, 5433953, 49.0442, 7.18444, 270),
('57007', 'Adaincourt', '32T', 312642, 5431236, 49.0056, 6.43805, 230),
('57008', 'Adelange', '32T', 325380, 5430882, 49.0061, 6.61222, 260),
('57009', 'Ajoncourt', '32T', 301117, 5413738, 48.8447, 6.28917, 190),
('57010', 'Alaincourt-la-Côte', '32T', 305016, 5419628, 48.8989, 6.33944, 290),
('57011', 'Albestroff', '32T', 342902, 5422170, 48.9325, 6.85499, 240),
('57012', 'Algrange', '32T', 285528, 5471859, 49.3617, 6.04611, 236),
('57013', 'Alsting', '32T', 354242, 5449206, 49.1783, 7, 266),
('57014', 'Altrippe', '32T', 340709, 5432986, 49.0292, 6.82084, 260),
('57015', 'Altviller', '32T', 334314, 5437963, 49.0722, 6.73139, 270),
('57016', 'Alzing', '32T', 322116, 5461369, 49.2792, 6.55417, 240),
('57017', 'Amanvillers', '32T', 284437, 5450164, 49.1664, 6.04278, 330),
('57018', 'Amelécourt', '32T', 316729, 5412678, 48.84, 6.50222, 220),
('57019', 'Amnéville', '32T', 292085, 5459949, 49.2569, 6.1425, 163),
('57020', 'Ancerville', '32T', 309202, 5434073, 49.03, 6.38973, 230),
('57021', 'Ancy-sur-Moselle', '32T', 285116, 5437892, 49.0564, 6.05862, 190),
('57022', 'Angevillers', '32T', 285377, 5474710, 49.3872, 6.0425, 373),
('57024', 'Antilly', '32T', 299495, 5452811, 49.1953, 6.24778, 190),
('57025', 'Anzeling', '32T', 315734, 5459817, 49.2633, 6.46723, 210),
('57026', 'Apach', '32T', 310038, 5482206, 49.4628, 6.37834, 170),
('57027', 'Arraincourt', '32T', 319415, 5427519, 48.9742, 6.53222, 240),
('57028', 'Argancy', '32T', 296221, 5453054, 49.1964, 6.20277, 170),
('57029', 'Arriance', '32T', 316893, 5432485, 49.0181, 6.49556, 240),
('57030', 'Arry', '32T', 284925, 5431406, 48.9981, 6.05944, 300),
('57031', 'Ars-Laquenexy', '32T', 300782, 5441294, 49.0922, 6.27112, 230),
('57032', 'Ars-sur-Moselle', '32T', 286379, 5440101, 49.0767, 6.07472, 170),
('57033', 'Arzviller', '32T', 364909, 5397772, 48.7183, 7.16334, 300),
('57034', 'Aspach', '32T', 349827, 5391143, 48.6553, 6.96082, 300),
('57035', 'Assenoncourt', '32T', 338033, 5404479, 48.7722, 6.79556, 220),
('57036', 'Attilloncourt', '32T', 307352, 5406997, 48.7861, 6.37722, 200),
('57037', 'Aube', '32T', 305497, 5433924, 49.0275, 6.33917, 230),
('57038', 'Audun-le-Tiche', '31T', 714089, 5483687, 49.4681, 5.955, 307),
('57039', 'Augny', '32T', 289713, 5438025, 49.0592, 6.12139, 200),
('57040', 'Aulnois-sur-Seille', '32T', 303132, 5416480, 48.87, 6.31528, 200),
('57041', 'Aumetz', '31T', 713635, 5478289, 49.4197, 5.94583, 385),
('57042', 'Avricourt', '32T', 338337, 5390936, 48.6506, 6.805, 260),
('57043', 'Ay-sur-Moselle', '32T', 296612, 5458141, 49.2422, 6.20555, 160),
('57044', 'Azoudange', '32T', 339071, 5400803, 48.7394, 6.81111, 240),
('57045', 'Bacourt', '32T', 309985, 5422517, 48.9264, 6.40583, 280),
('57046', 'Baerenthal', '32T', 391494, 5425767, 48.9753, 7.51722, 200),
('57047', 'Bambiderstroff', '32T', 324254, 5441519, 49.1014, 6.59222, 300),
('57048', 'Bannay', '32T', 315329, 5444715, 49.1275, 6.46861, 220),
('57049', 'Le Ban-Saint-Martin', '32T', 291795, 5445274, 49.125, 6.14612, 170),
('57050', 'Barchain', '32T', 349962, 5396917, 48.7072, 6.96056, 290),
('57051', 'Baronville', '32T', 324867, 5422987, 48.935, 6.60861, 280),
('57052', 'Barst', '32T', 341666, 5437315, 49.0683, 6.83223, 290),
('57053', 'Bassing', '32T', 338812, 5415210, 48.8689, 6.80194, 240),
('57054', 'Baudrecourt', '32T', 313357, 5426483, 48.9631, 6.45, 230),
('57055', 'Bazoncourt', '32T', 307655, 5436352, 49.05, 6.36751, 240),
('57056', 'Bébing', '32T', 352627, 5397186, 48.7103, 6.99667, 280),
('57057', 'Béchy', '32T', 308281, 5429190, 48.9858, 6.37945, 270),
('57058', 'Behren-lès-Forbach', '32T', 350131, 5447771, 49.1644, 6.94416, 300),
('57059', 'Bellange', '32T', 322305, 5419266, 48.9008, 6.57528, 240),
('57060', 'Bénestroff', '32T', 335790, 5419192, 48.9039, 6.75916, 250),
('57061', 'Béning-lès-Saint-Avold', '32T', 342417, 5444432, 49.1325, 6.83973, 250),
('57062', 'Berg-sur-Moselle', '32T', 305021, 5478828, 49.4308, 6.31084, 170),
('57063', 'Bérig-Vintrange', '32T', 331535, 5426675, 48.97, 6.69805, 280),
('57064', 'Berling', '32T', 370737, 5406748, 48.8003, 7.23972, 280),
('57065', 'Bermering', '32T', 332219, 5422358, 48.9314, 6.70917, 250),
('57066', 'Berthelming', '32T', 353635, 5409117, 48.8178, 7.00612, 240),
('57067', 'Bertrange', '32T', 294863, 5465503, 49.3078, 6.17778, 160),
('57069', 'Berviller-en-Moselle', '32T', 328836, 5460290, 49.2714, 6.64695, 264),
('57070', 'Bettange', '32T', 316589, 5456945, 49.2378, 6.48028, 200),
('57071', 'Bettborn', '32T', 354649, 5407329, 48.8019, 7.02056, 260),
('57072', 'Bettelainville', '32T', 303542, 5457209, 49.2361, 6.30111, 270),
('57073', 'Betting', '32T', 340791, 5443614, 49.1247, 6.81778, 240),
('57074', 'Bettviller', '32T', 374824, 5437733, 49.0797, 7.28583, 310),
('57075', 'Beux', '32T', 303867, 5430952, 49.0003, 6.31833, 260),
('57076', 'Beyren-lès-Sierck', '32T', 303264, 5483251, 49.47, 6.28444, 170),
('57077', 'Bezange-la-Petite', '32T', 324341, 5400411, 48.7319, 6.6111, 240),
('57079', 'Bibiche', '32T', 316846, 5467075, 49.3289, 6.47917, 220),
('57080', 'Bickenholtz', '32T', 365404, 5407307, 48.8042, 7.16695, 320),
('57081', 'Bidestroff', '32T', 337629, 5413082, 48.8494, 6.78666, 230),
('57082', 'Biding', '32T', 338345, 5436237, 49.0578, 6.78723, 270),
('57083', 'Bining', '32T', 372284, 5433157, 49.0381, 7.25251, 320),
('57084', 'Bioncourt', '32T', 306098, 5407937, 48.7942, 6.35972, 200),
('57085', 'Bionville-sur-Nied', '32T', 316198, 5442152, 49.1047, 6.48167, 230),
('57086', 'Belles-Forêts', '32T', 345341, 5408042, 48.8061, 6.89361, 230),
('57087', 'Bisten-en-Lorraine', '32T', 324970, 5448110, 49.1608, 6.59916, 270),
('57088', 'Bistroff', '32T', 332746, 5429049, 48.9917, 6.71361, 260),
('57089', 'Bitche', '32T', 385235, 5434789, 49.0553, 7.42917, 310),
('57090', 'Blanche-Église', '32T', 329163, 5406999, 48.7925, 6.67389, 210),
('57091', 'Bliesbruck', '32T', 367375, 5441923, 49.1158, 7.1825, 220),
('57092', 'Blies-Ébersing', '32T', 364640, 5442855, 49.1236, 7.14472, 210),
('57093', 'Blies-Guersviller', '32T', 360169, 5445685, 49.1481, 7.0825, 200),
('57095', 'Boucheporn', '32T', 325627, 5445802, 49.1403, 6.60916, 370),
('57096', 'Boulange', '31T', 714490, 5473962, 49.3806, 5.95527, 310),
('57097', 'Boulay-Moselle', '32T', 317683, 5450881, 49.1836, 6.49805, 220),
('57098', 'Bourgaltroff', '32T', 335614, 5415273, 48.8686, 6.75834, 230),
('57099', 'Bourdonnay', '32T', 333006, 5398941, 48.7211, 6.72944, 240),
('57100', 'Bourscheid', '32T', 366987, 5403531, 48.7706, 7.18972, 290),
('57101', 'Bousbach', '32T', 350550, 5445998, 49.1486, 6.95056, 260),
('57102', 'Bousse', '32T', 296024, 5461935, 49.2761, 6.19555, 170),
('57103', 'Bousseviller', '32T', 387921, 5442117, 49.1217, 7.46389, 260),
('57104', 'Boust', '32T', 296131, 5479462, 49.4336, 6.18805, 230),
('57105', 'Boustroff', '32T', 326073, 5430273, 49.0008, 6.62195, 280),
('57106', 'Bouzonville', '32T', 320663, 5462714, 49.2908, 6.53361, 200),
('57107', 'Bréhain', '32T', 319572, 5420436, 48.9106, 6.5375, 250),
('57108', 'Breidenbach', '32T', 384914, 5443785, 49.1361, 7.42222, 270),
('57109', 'Breistroff-la-Grande', '32T', 298276, 5481856, 49.4558, 6.21638, 200),
('57110', 'Brettnach', '32T', 322659, 5458786, 49.2561, 6.56278, 270),
('57111', 'Bronvaux', '32T', 287807, 5453434, 49.1969, 6.08723, 230),
('57112', 'Brouck', '32T', 317967, 5444720, 49.1283, 6.50473, 320),
('57113', 'Brouderdorff', '32T', 360260, 5395785, 48.6994, 7.10084, 310),
('57114', 'Brouviller', '32T', 364546, 5403064, 48.7658, 7.15667, 280),
('57115', 'Brulange', '32T', 320621, 5427078, 48.9706, 6.54888, 240),
('57116', 'Buchy', '32T', 300735, 5428683, 48.9789, 6.27667, 280),
('57117', 'Buding', '32T', 305379, 5467903, 49.3328, 6.32112, 180),
('57118', 'Budling', '32T', 307935, 5469358, 49.3467, 6.35556, 235),
('57119', 'Buhl-Lorraine', '32T', 359204, 5398531, 48.7239, 7.08556, 270),
('57120', 'Burlioncourt', '32T', 322305, 5414785, 48.8606, 6.57722, 220),
('57121', 'Burtoncourt', '32T', 311603, 5455567, 49.2239, 6.4125, 230),
('57122', 'Cappel', '32T', 342954, 5437650, 49.0717, 6.84972, 250),
('57123', 'Carling', '32T', 333449, 5448311, 49.165, 6.71528, 238),
('57124', 'Cattenom', '32T', 300190, 5476313, 49.4067, 6.24556, 155),
('57125', 'Chailly-lès-Ennery', '32T', 298614, 5454203, 49.2075, 6.235, 190),
('57126', 'Chambrey', '32T', 313314, 5406949, 48.7875, 6.45833, 210),
('57127', 'Chanville', '32T', 312560, 5435412, 49.0431, 6.435, 260),
('57128', 'Charleville-sous-Bois', '32T', 311333, 5451836, 49.1903, 6.41055, 250),
('57129', 'Charly-Oradour', '32T', 298861, 5450422, 49.1736, 6.24028, 200),
('57130', 'Château-Bréhain', '32T', 318613, 5419787, 48.9044, 6.52472, 250),
('57131', 'Château-Rouge', '32T', 325229, 5461361, 49.28, 6.59694, 260),
('57132', 'Château-Salins', '32T', 316975, 5410847, 48.8236, 6.50638, 230),
('57133', 'Château-Voué', '32T', 325592, 5413599, 48.8508, 6.62251, 250),
('57134', 'Châtel-Saint-Germain', '32T', 286940, 5445150, 49.1222, 6.07972, 220),
('57136', 'Chémery-les-Deux', '32T', 314472, 5464373, 49.3039, 6.44778, 220),
('57137', 'Cheminot', '32T', 290462, 5425567, 48.9475, 6.13805, 190),
('57138', 'Chenois', '32T', 316737, 5425907, 48.9589, 6.49639, 300),
('57139', 'Chérisey', '32T', 297905, 5432557, 49.0128, 6.23611, 220),
('57140', 'Chesny', '32T', 298514, 5437017, 49.0531, 6.24222, 200),
('57141', 'Chicourt', '32T', 317135, 5421288, 48.9175, 6.50389, 250),
('57142', 'Chieulles', '32T', 298017, 5448969, 49.1603, 6.22945, 190),
('57143', 'Clouange', '32T', 288585, 5460516, 49.2608, 6.09416, 190),
('57144', 'Cocheren', '32T', 343735, 5445878, 49.1458, 6.85722, 210),
('57145', 'Coincy', '32T', 301801, 5443113, 49.1089, 6.28417, 230),
('57146', 'Coin-lès-Cuvry', '32T', 292082, 5435091, 49.0336, 6.15528, 190),
('57147', 'Coin-sur-Seille', '32T', 292343, 5432299, 49.0086, 6.16028, 190),
('57148', 'Colligny', '32T', 304781, 5441863, 49.0986, 6.32556, 265),
('57149', 'Colmen', '32T', 321577, 5469670, 49.3536, 6.54306, 220),
('57150', 'Condé-Northen', '32T', 312740, 5447924, 49.1556, 6.43166, 210),
('57151', 'Conthil', '32T', 328607, 5418142, 48.8925, 6.66167, 250),
('57152', 'Contz-les-Bains', '32T', 307665, 5481208, 49.4531, 6.34611, 180),
('57153', 'Corny-sur-Moselle', '32T', 285076, 5435296, 49.0331, 6.05945, 180),
('57154', 'Coume', '32T', 323221, 5452339, 49.1983, 6.57333, 310),
('57155', 'Courcelles-Chaussy', '32T', 310661, 5442864, 49.1094, 6.40555, 240),
('57156', 'Courcelles-sur-Nied', '32T', 303643, 5438410, 49.0672, 6.31166, 220),
('57158', 'Craincourt', '32T', 303472, 5417457, 48.8789, 6.31944, 220),
('57159', 'Créhange', '32T', 322772, 5435786, 49.0494, 6.57445, 250),
('57160', 'Creutzwald', '32T', 332419, 5453102, 49.2078, 6.69917, 250),
('57161', 'Cutting', '32T', 341336, 5412913, 48.8489, 6.83722, 230),
('57162', 'Cuvry', '32T', 292366, 5436162, 49.0433, 6.15861, 170),
('57163', 'Dabo', '32T', 370257, 5390356, 48.6528, 7.23834, 470),
('57165', 'Dalem', '32T', 325979, 5456918, 49.2403, 6.60917, 230),
('57166', 'Dalhain', '32T', 321182, 5417911, 48.8883, 6.56056, 240),
('57167', 'Dalstein', '32T', 311700, 5464900, 49.3078, 6.40944, 230),
('57168', 'Danne-et-Quatre-Vents', '32T', 374603, 5402582, 48.7636, 7.29361, 350),
('57169', 'Dannelbourg', '32T', 370119, 5400337, 48.7425, 7.23333, 330),
('57171', 'Delme', '32T', 308839, 5418198, 48.8872, 6.39222, 226),
('57172', 'Denting', '32T', 320255, 5452064, 49.195, 6.53278, 250),
('57173', 'Desseling', '32T', 341644, 5405797, 48.785, 6.84416, 243),
('57174', 'Destry', '32T', 323083, 5423877, 48.9425, 6.58388, 250),
('57175', 'Diane-Capelle', '32T', 347980, 5399257, 48.7278, 6.93278, 270),
('57176', 'Diebling', '32T', 349739, 5441540, 49.1083, 6.94111, 250);
INSERT INTO `ods_communes` (`oc_code_insee`, `oc_nom`, `oc_secteur`, `oc_x_utm`, `oc_y_utm`, `oc_latitude`, `oc_longitude`, `oc_altitude`) VALUES
('57177', 'Dieuze', '32T', 332452, 5409094, 48.8122, 6.71778, 210),
('57178', 'Diffembach-lès-Hellimer', '32T', 342167, 5429946, 49.0022, 6.84195, 230),
('57179', 'Distroff', '32T', 301305, 5468110, 49.3333, 6.265, 200),
('57180', 'Dolving', '32T', 354511, 5404366, 48.7753, 7.01973, 270),
('57181', 'Domnom-lès-Dieuze', '32T', 340190, 5414182, 48.86, 6.82112, 230),
('57182', 'Donjeux', '32T', 309393, 5417097, 48.8775, 6.40028, 230),
('57183', 'Donnelay', '32T', 329684, 5402657, 48.7536, 6.68278, 230),
('57184', 'Dornot', '32T', 284693, 5436950, 49.0478, 6.05334, 210),
('57186', 'Ébersviller', '32T', 311016, 5461461, 49.2767, 6.40167, 240),
('57187', 'Éblange', '32T', 316660, 5455428, 49.2242, 6.48195, 200),
('57188', 'Éguelshardt', '32T', 389829, 5431020, 49.0222, 7.49305, 250),
('57189', 'Eincheville', '32T', 324914, 5428363, 48.9833, 6.60694, 265),
('57190', 'Elvange', '32T', 320863, 5437053, 49.0603, 6.54778, 240),
('57191', 'Elzange', '32T', 302854, 5471300, 49.3625, 6.28472, 170),
('57192', 'Enchenberg', '32T', 378559, 5430360, 49.0142, 7.33916, 360),
('57193', 'Ennery', '32T', 297557, 5456313, 49.2261, 6.21944, 170),
('57194', 'Entrange', '32T', 289799, 5477352, 49.4125, 6.10195, 246),
('57195', 'Epping', '32T', 377174, 5441202, 49.1114, 7.31694, 280),
('57196', 'Erching', '32T', 373201, 5441292, 49.1114, 7.2625, 300),
('57197', 'Ernestviller', '32T', 351361, 5436954, 49.0675, 6.96501, 240),
('57198', 'Erstroff', '32T', 337155, 5427527, 48.9792, 6.77444, 250),
('57199', 'Escherange', '32T', 287360, 5477941, 49.4169, 6.06805, 340),
('57200', 'Les Étangs', '32T', 308636, 5446489, 49.1414, 6.37612, 220),
('57201', 'Etting', '32T', 366904, 5432419, 49.0303, 7.17917, 280),
('57202', 'Etzling', '32T', 351426, 5449189, 49.1775, 6.96139, 300),
('57203', 'Évrange', '32T', 296911, 5487410, 49.5053, 6.19472, 260),
('57204', 'Failly', '32T', 300622, 5448689, 49.1586, 6.26527, 200),
('57205', 'Falck', '32T', 327881, 5454972, 49.2233, 6.63612, 240),
('57206', 'Fameck', '32T', 289833, 5464549, 49.2975, 6.10917, 190),
('57207', 'Farébersviller', '32T', 344185, 5442405, 49.1147, 6.86473, 260),
('57208', 'Farschviller', '32T', 346226, 5439937, 49.0931, 6.89362, 250),
('57209', 'Faulquemont', '32T', 324592, 5434894, 49.0419, 6.59972, 280),
('57210', 'Fénétrange', '32T', 354760, 5412393, 48.8475, 7.02027, 240),
('57211', 'Fèves', '32T', 289921, 5453075, 49.1944, 6.1164, 250),
('57212', 'Féy', '32T', 287756, 5434668, 49.0283, 6.09639, 220),
('57213', 'Filstroff', '32T', 321343, 5466215, 49.3225, 6.54139, 200),
('57214', 'Fixem', '32T', 302478, 5480434, 49.4444, 6.27501, 155),
('57215', 'Flastroff', '32T', 320896, 5471083, 49.3661, 6.53306, 240),
('57216', 'Fleisheim', '32T', 365100, 5405708, 48.7897, 7.16333, 300),
('57217', 'Flétrange', '32T', 321640, 5437244, 49.0622, 6.55833, 280),
('57218', 'Fleury', '32T', 295196, 5435748, 49.0406, 6.1975, 200),
('57219', 'Flévy', '32T', 299384, 5457545, 49.2378, 6.24389, 200),
('57220', 'Flocourt', '32T', 310590, 5427689, 48.9731, 6.41167, 250),
('57221', 'Florange', '32T', 291418, 5467952, 49.3286, 6.12917, 170),
('57222', 'Folkling', '32T', 346457, 5446080, 49.1483, 6.89444, 300),
('57224', 'Folschviller', '32T', 331105, 5437937, 49.0711, 6.6875, 280),
('57225', 'Fonteny', '32T', 314031, 5417404, 48.8817, 6.46334, 250),
('57226', 'Fontoy', '31T', 717514, 5471546, 49.3578, 5.99556, 250),
('57227', 'Forbach', '32T', 347002, 5450391, 49.1872, 6.90027, 220),
('57228', 'Fossieux', '32T', 303816, 5414477, 48.8522, 6.32556, 220),
('57229', 'Foulcrey', '32T', 342205, 5389405, 48.6378, 6.85806, 310),
('57230', 'Fouligny', '32T', 317737, 5440834, 49.0933, 6.50333, 220),
('57231', 'Foville', '32T', 303719, 5421560, 48.9158, 6.32084, 260),
('57232', 'Francaltroff', '32T', 338828, 5425593, 48.9622, 6.79806, 225),
('57233', 'Fraquelfing', '32T', 351851, 5389482, 48.6408, 6.98888, 300),
('57234', 'Frauenberg', '32T', 363398, 5444307, 49.1364, 7.12722, 220),
('57235', 'Freistroff', '32T', 317286, 5462084, 49.2842, 6.4875, 210),
('57236', 'Frémery', '32T', 314964, 5421545, 48.9192, 6.47417, 235),
('57237', 'Frémestroff', '32T', 337781, 5431557, 49.0156, 6.78138, 270),
('57238', 'Fresnes-en-Saulnois', '32T', 312003, 5412897, 48.8406, 6.43777, 270),
('57239', 'Freybouse', '32T', 337542, 5430327, 49.0044, 6.77861, 258),
('57240', 'Freyming-Merlebach', '32T', 338668, 5445931, 49.145, 6.78777, 220),
('57241', 'Fribourg', '32T', 342610, 5403824, 48.7675, 6.85806, 240),
('57242', 'Gandrange', '32T', 290880, 5461263, 49.2683, 6.12527, 190),
('57244', 'Garrebourg', '32T', 369998, 5396880, 48.7114, 7.23277, 396),
('57245', 'Gavisse', '32T', 303355, 5479042, 49.4322, 6.28778, 150),
('57246', 'Gelucourt', '32T', 332948, 5403825, 48.765, 6.72667, 210),
('57247', 'Gerbécourt', '32T', 317755, 5414097, 48.8531, 6.51555, 240),
('57248', 'Givrycourt', '32T', 347505, 5421385, 48.9266, 6.91809, 240),
('57249', 'Glatigny', '32T', 305656, 5447118, 49.1461, 6.335, 280),
('57250', 'Goetzenbruck', '32T', 381459, 5426250, 48.9778, 7.38001, 400),
('57251', 'Goin', '32T', 296423, 5429860, 48.9881, 6.21722, 210),
('57252', 'Gomelange', '32T', 315836, 5457433, 49.2419, 6.46972, 200),
('57253', 'Gondrexange', '32T', 347320, 5394516, 48.685, 6.92556, 270),
('57254', 'Gorze', '32T', 281020, 5437620, 49.0525, 6.00278, 210),
('57255', 'Gosselming', '32T', 353152, 5406286, 48.7922, 7.00055, 240),
('57256', 'Gravelotte', '32T', 283324, 5444023, 49.1108, 6.03084, 300),
('57257', 'Grémecey', '32T', 309529, 5408530, 48.8006, 6.40612, 250),
('57258', 'Gréning', '32T', 342177, 5426732, 48.9733, 6.84334, 230),
('57259', 'Grindorff-Bizing', '32T', 319948, 5472938, 49.3825, 6.51917, 260),
('57260', 'Grosbliederstroff', '32T', 356165, 5446807, 49.1572, 7.02722, 210),
('57261', 'Gros-Réderching', '32T', 369883, 5436457, 49.0672, 7.21861, 290),
('57262', 'Grostenquin', '32T', 334494, 5427667, 48.9797, 6.73805, 280),
('57263', 'Grundviller', '32T', 351676, 5434319, 49.0439, 6.97028, 240),
('57264', 'Guebenhouse', '32T', 349802, 5437892, 49.0756, 6.94333, 270),
('57265', 'Guébestroff', '32T', 332574, 5411129, 48.8306, 6.71861, 220),
('57266', 'Guéblange-lès-Dieuze', '32T', 330982, 5405028, 48.7753, 6.69945, 210),
('57267', 'Le Val-de-Guéblange', '32T', 350591, 5427211, 48.9797, 6.95806, 220),
('57268', 'Guébling', '32T', 334497, 5414749, 48.8636, 6.74333, 220),
('57269', 'Guénange', '32T', 296253, 5464276, 49.2972, 6.19751, 170),
('57270', 'Val-de-Bride', '32T', 331299, 5410797, 48.8272, 6.70139, 220),
('57271', 'Guenviller', '32T', 339417, 5441707, 49.1072, 6.79972, 300),
('57272', 'Guermange', '32T', 339226, 5406917, 48.7944, 6.81083, 230),
('57273', 'Guerstling', '32T', 324306, 5466614, 49.3269, 6.58195, 210),
('57274', 'Guerting', '32T', 326570, 5451274, 49.1897, 6.61972, 250),
('57275', 'Guessling-Hémering', '32T', 328690, 5432726, 49.0236, 6.65666, 260),
('57276', 'Guinglange', '32T', 319186, 5438591, 49.0736, 6.52416, 230),
('57277', 'Guinkirchen', '32T', 314327, 5453497, 49.2061, 6.45083, 220),
('57278', 'Guinzeling', '32T', 341860, 5416297, 48.8794, 6.84305, 250),
('57280', 'Guntzviller', '32T', 364724, 5396881, 48.7103, 7.16112, 330),
('57281', 'Haboudange', '32T', 324857, 5418134, 48.8914, 6.61055, 220),
('57282', 'Hagen', '32T', 295075, 5486768, 49.4989, 6.16973, 270),
('57283', 'Hagondange', '32T', 293962, 5459260, 49.2514, 6.16862, 170),
('57284', 'Hallering', '32T', 321559, 5443552, 49.1189, 6.55443, 280),
('57286', 'Halstroff', '32T', 317768, 5473535, 49.3872, 6.48889, 270),
('57287', 'Basse-Ham', '32T', 299829, 5474162, 49.3872, 6.24167, 150),
('57288', 'Ham-sous-Varsberg', '32T', 328559, 5450099, 49.1797, 6.6475, 222),
('57289', 'Hambach', '32T', 356534, 5436045, 49.0606, 7.03611, 230),
('57290', 'Hampont', '32T', 322379, 5412001, 48.8356, 6.57944, 220),
('57291', 'Hangviller', '32T', 369989, 5407909, 48.8106, 7.22917, 240),
('57292', 'Hannocourt', '32T', 312418, 5420363, 48.9078, 6.44, 250),
('57293', 'Han-sur-Nied', '32T', 312444, 5429573, 48.9906, 6.43611, 230),
('57294', 'Hanviller', '32T', 387516, 5440179, 49.1042, 7.45888, 280),
('57295', 'Haraucourt-sur-Seille', '32T', 324170, 5407957, 48.7997, 6.60556, 210),
('57296', 'Hargarten-aux-Mines', '32T', 325864, 5455221, 49.225, 6.60833, 230),
('57297', 'Harprich', '32T', 328435, 5425780, 48.9611, 6.65611, 250),
('57298', 'Harreberg', '32T', 365241, 5392018, 48.6667, 7.16973, 430),
('57299', 'Hartzviller', '32T', 359090, 5392385, 48.6686, 7.08611, 300),
('57300', 'Haselbourg', '32T', 367599, 5393970, 48.6847, 7.20111, 420),
('57301', 'Haspelschiedt', '32T', 389385, 5438257, 49.0872, 7.48501, 290),
('57302', 'Hattigny', '32T', 350044, 5388511, 48.6317, 6.96472, 310),
('57303', 'Hauconcourt', '32T', 295467, 5455649, 49.2194, 6.19111, 160),
('57304', 'Haut-Clocher', '32T', 353015, 5402613, 48.7592, 7, 250),
('57305', 'Havange', '31T', 717355, 5475034, 49.3892, 5.99528, 333),
('57306', 'Hayange', '32T', 286011, 5467665, 49.3242, 6.055, 220),
('57307', 'Hayes', '32T', 308048, 5449415, 49.1675, 6.36667, 240),
('57308', 'Hazembourg', '32T', 348703, 5425871, 48.9672, 6.93277, 225),
('57309', 'Heining-lès-Bouzonville', '32T', 325120, 5464919, 49.3119, 6.59388, 300),
('57310', 'Hellering-lès-Fénétrange', '32T', 357936, 5408171, 48.8103, 7.065, 260),
('57311', 'Hellimer', '32T', 341173, 5429326, 48.9964, 6.82861, 240),
('57312', 'Helstroff', '32T', 316168, 5447346, 49.1514, 6.47889, 230),
('57313', 'Hémilly', '32T', 317419, 5437351, 49.0619, 6.50055, 260),
('57314', 'Héming', '32T', 350269, 5395394, 48.6936, 6.96528, 270),
('57315', 'Henridorff', '32T', 368484, 5399448, 48.7342, 7.21138, 350),
('57316', 'Henriville', '32T', 343314, 5440328, 49.0958, 6.85361, 285),
('57317', 'Hérange', '32T', 365489, 5404061, 48.775, 7.16917, 280),
('57318', 'Hermelange', '32T', 353990, 5393782, 48.68, 7.01639, 270),
('57319', 'Herny', '32T', 315681, 5430269, 48.9978, 6.48, 250),
('57320', 'Hertzing', '32T', 349212, 5394897, 48.6889, 6.95111, 270),
('57321', 'Hesse', '32T', 356182, 5395487, 48.6958, 7.04555, 280),
('57322', 'Hestroff', '32T', 313360, 5459619, 49.2608, 6.43472, 230),
('57323', 'Hettange-Grande', '32T', 293764, 5476057, 49.4022, 6.15722, 180),
('57324', 'Hilbesheim', '32T', 360229, 5404375, 48.7767, 7.09751, 270),
('57325', 'Hilsprich', '32T', 347362, 5431099, 49.0139, 6.9125, 230),
('57326', 'Hinckange', '32T', 314009, 5451869, 49.1914, 6.44723, 210),
('57328', 'Holacourt', '32T', 318028, 5427410, 48.9728, 6.51334, 250),
('57329', 'Holling', '32T', 317816, 5459778, 49.2636, 6.49583, 200),
('57330', 'Holving', '32T', 351334, 5430651, 49.0108, 6.96695, 230),
('57331', 'Hombourg-Budange', '32T', 306849, 5463770, 49.2961, 6.34333, 200),
('57332', 'Hombourg-Haut', '32T', 338088, 5443414, 49.1222, 6.78084, 300),
('57333', 'Hommarting', '32T', 363654, 5399965, 48.7378, 7.14556, 280),
('57334', 'Hommert', '32T', 365819, 5393116, 48.6767, 7.17722, 400),
('57335', 'Honskirch', '32T', 350294, 5422985, 48.9417, 6.95556, 240),
('57336', 'L''Hôpital', '32T', 334742, 5447500, 49.1581, 6.73334, 275),
('57337', 'Hoste', '32T', 345111, 5436384, 49.0608, 6.87972, 250),
('57338', 'Hottviller', '32T', 380359, 5437487, 49.0786, 7.36166, 270),
('57339', 'Hultehouse', '32T', 372042, 5397760, 48.7197, 7.26027, 310),
('57340', 'Hundling', '32T', 352738, 5441428, 49.1081, 6.98222, 230),
('57341', 'Hunting', '32T', 306105, 5476997, 49.4147, 6.32667, 190),
('57342', 'Ibigny', '32T', 345252, 5390000, 48.6439, 6.89917, 310),
('57343', 'Illange', '32T', 294907, 5467759, 49.3281, 6.17723, 190),
('57344', 'Imling', '32T', 354677, 5398183, 48.7197, 7.02417, 260),
('57345', 'Inglange', '32T', 303897, 5469408, 49.3458, 6.3, 170),
('57346', 'Insming', '32T', 344259, 5424820, 48.9567, 6.8725, 230),
('57347', 'Insviller', '32T', 345777, 5417176, 48.8883, 6.89611, 240),
('57348', 'Ippling', '32T', 354295, 5441233, 49.1067, 7.00361, 220),
('57349', 'Jallaucourt', '32T', 308397, 5413050, 48.8408, 6.38861, 260),
('57350', 'Jouy-aux-Arches', '32T', 286703, 5438480, 49.0622, 6.08, 190),
('57351', 'Jury', '32T', 299336, 5438936, 49.0706, 6.2525, 200),
('57352', 'Jussy', '32T', 287393, 5442690, 49.1003, 6.08722, 240),
('57353', 'Juvelize', '32T', 327209, 5403907, 48.7642, 6.64861, 240),
('57354', 'Juville', '32T', 305608, 5423162, 48.9308, 6.34583, 310),
('57355', 'Kalhausen', '32T', 365072, 5431443, 49.0211, 7.15445, 290),
('57356', 'Kanfen', '32T', 290415, 5480266, 49.4389, 6.10889, 240),
('57357', 'Kappelkinger', '32T', 346967, 5426351, 48.9711, 6.90889, 220),
('57358', 'Kédange-sur-Canner', '32T', 306668, 5464920, 49.3064, 6.34028, 190),
('57359', 'Kemplich', '32T', 310575, 5467442, 49.3303, 6.39278, 260),
('57360', 'Kerbach', '32T', 351735, 5447882, 49.1658, 6.96611, 300),
('57361', 'Kerling-lès-Sierck', '32T', 307711, 5475054, 49.3978, 6.34972, 255),
('57362', 'Kerprich-aux-Bois', '32T', 350016, 5400468, 48.7392, 6.96, 280),
('57364', 'Kirsch-lès-Sierck', '32T', 311574, 5480020, 49.4436, 6.40055, 330),
('57365', 'Kirschnaumen', '32T', 313854, 5474749, 49.3969, 6.43444, 280),
('57366', 'Kirviller', '32T', 352361, 5424166, 48.9528, 6.98334, 220),
('57367', 'Klang', '32T', 308836, 5466235, 49.3189, 6.36945, 210),
('57368', 'Knutange', '32T', 284857, 5469690, 49.3419, 6.03805, 240),
('57371', 'Haute-Kontz', '32T', 305571, 5481251, 49.4528, 6.31723, 160),
('57372', 'Kuntzig', '32T', 299444, 5469724, 49.3472, 6.23861, 175),
('57373', 'Lachambre', '32T', 335398, 5438920, 49.0811, 6.74583, 290),
('57374', 'Lafrimbolle', '32T', 353804, 5384240, 48.5942, 7.01723, 321),
('57375', 'Lagarde', '32T', 331132, 5395783, 48.6922, 6.70527, 245),
('57376', 'Lambach', '32T', 380114, 5432735, 49.0358, 7.35972, 280),
('57377', 'Landange', '32T', 349650, 5392908, 48.6711, 6.95778, 290),
('57379', 'Landroff', '32T', 325210, 5426777, 48.9692, 6.61166, 240),
('57380', 'Laneuveville-lès-Lorquin', '32T', 352810, 5390909, 48.6539, 7.00139, 300),
('57381', 'Laneuveville-en-Saulnois', '32T', 311823, 5416025, 48.8686, 6.43388, 280),
('57382', 'Langatte', '32T', 351541, 5402498, 48.7578, 6.98, 260),
('57383', 'Languimberg', '32T', 342458, 5401356, 48.7453, 6.85694, 280),
('57384', 'Laning', '32T', 337457, 5433667, 49.0344, 6.77611, 300),
('57385', 'Laquenexy', '32T', 303744, 5439519, 49.0772, 6.3125, 250),
('57386', 'Laudrefang', '32T', 327633, 5439249, 49.0819, 6.63944, 345),
('57387', 'Laumesfeld', '32T', 314553, 5471572, 49.3686, 6.44555, 250),
('57388', 'Launstroff', '32T', 318499, 5479137, 49.4378, 6.49639, 350),
('57389', 'Lelling', '32T', 332544, 5434494, 49.0406, 6.70861, 260),
('57390', 'Lemberg', '32T', 381443, 5429339, 49.0056, 7.37889, 390),
('57391', 'Lemoncourt', '32T', 308676, 5415823, 48.8658, 6.39111, 250),
('57392', 'Lemud', '32T', 307501, 5434843, 49.0364, 6.36612, 220),
('57393', 'Lengelsheim', '32T', 383919, 5440779, 49.1089, 7.40945, 230),
('57394', 'Léning', '32T', 339340, 5424991, 48.9569, 6.80528, 210),
('57395', 'Lesse', '32T', 317443, 5426347, 48.9631, 6.50583, 230),
('57396', 'Lessy', '32T', 288108, 5444919, 49.1206, 6.09583, 240),
('57397', 'Ley', '32T', 327564, 5400837, 48.7367, 6.65472, 220),
('57398', 'Leyviller', '32T', 341893, 5433199, 49.0314, 6.83694, 250),
('57399', 'Lezey', '32T', 325679, 5402656, 48.7525, 6.62833, 210),
('57401', 'Lidrezing', '32T', 331165, 5417167, 48.8844, 6.69694, 270),
('57402', 'Liederschiedt', '32T', 390372, 5442006, 49.1211, 7.4975, 400),
('57403', 'Liéhon', '32T', 299541, 5431138, 49.0006, 6.25916, 240),
('57404', 'Lindre-Basse', '32T', 334642, 5407947, 48.8025, 6.74805, 220),
('57405', 'Lindre-Haute', '32T', 334703, 5409304, 48.8147, 6.74833, 230),
('57406', 'Liocourt', '32T', 305369, 5420976, 48.9111, 6.34361, 300),
('57407', 'Lixheim', '32T', 363446, 5404017, 48.7742, 7.14139, 280),
('57408', 'Lixing-lès-Rouhling', '32T', 353809, 5446622, 49.155, 6.995, 230),
('57409', 'Lixing-lès-Saint-Avold', '32T', 335799, 5433932, 49.0364, 6.75334, 300),
('57410', 'Lhor', '32T', 343924, 5417228, 48.8883, 6.87083, 230),
('57411', 'Lommerange', '31T', 715850, 5468666, 49.3325, 5.97111, 290),
('57412', 'Longeville-lès-Metz', '32T', 290923, 5444225, 49.1153, 6.13472, 170),
('57413', 'Longeville-lès-Saint-Avold', '32T', 328038, 5443130, 49.1169, 6.64333, 260),
('57414', 'Lorquin', '32T', 352426, 5392649, 48.6694, 6.99556, 290),
('57415', 'Lorry-lès-Metz', '32T', 290042, 5447226, 49.1419, 6.1211, 240),
('57416', 'Lorry-Mardigny', '32T', 286904, 5430495, 48.9906, 6.08694, 270),
('57417', 'Lostroff', '32T', 342447, 5413994, 48.8589, 6.85194, 240),
('57418', 'Loudrefing', '32T', 344402, 5413167, 48.8519, 6.87889, 250),
('57419', 'Loupershouse', '32T', 347767, 5438442, 49.08, 6.91527, 240),
('57421', 'Loutzviller', '32T', 382044, 5445112, 49.1475, 7.3825, 300),
('57422', 'Louvigny', '32T', 293856, 5427017, 48.9617, 6.18362, 200),
('57423', 'Lubécourt', '32T', 317783, 5413076, 48.8439, 6.51639, 220),
('57424', 'Lucy', '32T', 314739, 5423964, 48.9408, 6.47001, 250),
('57425', 'Luppy', '32T', 305520, 5428792, 48.9814, 6.34194, 260),
('57426', 'Luttange', '32T', 304344, 5460983, 49.2703, 6.31027, 275),
('57427', 'Lutzelbourg', '32T', 371206, 5399601, 48.7361, 7.24834, 213),
('57428', 'Macheren', '32T', 337738, 5441168, 49.1019, 6.77695, 270),
('57430', 'Mainvillers', '32T', 320493, 5432553, 49.0197, 6.54472, 260),
('57431', 'Maizeroy', '32T', 309669, 5439992, 49.0833, 6.39333, 250),
('57432', 'Maizery', '32T', 305618, 5442575, 49.1053, 6.33667, 270),
('57433', 'Maizières-lès-Metz', '32T', 293294, 5454957, 49.2125, 6.16167, 162),
('57434', 'Maizières-lès-Vic', '32T', 336412, 5398655, 48.7194, 6.77583, 250),
('57436', 'Malaucourt-sur-Seille', '32T', 306177, 5413158, 48.8411, 6.35833, 240),
('57437', 'Malling', '32T', 304083, 5477996, 49.4231, 6.29833, 150),
('57438', 'Malroy', '32T', 296822, 5450652, 49.175, 6.21222, 170),
('57439', 'Manderen', '32T', 314336, 5480637, 49.45, 6.43833, 250),
('57440', 'Manhoué', '32T', 304898, 5411596, 48.8267, 6.34166, 210),
('57441', 'Manom', '32T', 295907, 5472359, 49.3697, 6.18862, 151),
('57442', 'Many', '32T', 318704, 5430663, 49.0022, 6.52112, 250),
('57443', 'Marange-Silvange', '32T', 289183, 5454989, 49.2114, 6.10527, 250),
('57444', 'Marange-Zondrange', '32T', 320359, 5442818, 49.1119, 6.53833, 250),
('57445', 'Marieulles', '32T', 287970, 5431228, 48.9975, 6.10111, 230),
('57446', 'Marimont-lès-Bénestroff', '32T', 337515, 5417565, 48.8897, 6.78333, 300),
('57447', 'Marly', '32T', 292034, 5438154, 49.0611, 6.15305, 172),
('57448', 'Marsal', '32T', 324318, 5406809, 48.7894, 6.60806, 220),
('57449', 'Marsilly', '32T', 302812, 5441871, 49.0981, 6.29861, 250),
('57451', 'Marthille', '32T', 320981, 5421812, 48.9233, 6.55611, 265),
('57452', 'La Maxe', '32T', 295171, 5449878, 49.1675, 6.18999, 163),
('57453', 'Maxstadt', '32T', 338722, 5434557, 49.0428, 6.79305, 280),
('57454', 'Mécleuves', '32T', 300500, 5435740, 49.0422, 6.27, 220),
('57455', 'Mégange', '32T', 313220, 5454894, 49.2183, 6.435, 240),
('57456', 'Meisenthal', '32T', 379213, 5424908, 48.9653, 7.34972, 290),
('57457', 'Menskirch', '32T', 312893, 5466095, 49.3189, 6.42528, 230),
('57459', 'Merschweiller', '32T', 312889, 5481922, 49.4611, 6.41778, 310),
('57460', 'Merten', '32T', 330274, 5457742, 49.2489, 6.66778, 207),
('57461', 'Métairies-Saint-Quirin', '32T', 355733, 5390741, 48.6531, 7.04111, 310),
('57462', 'Metting', '32T', 368550, 5408344, 48.8142, 7.20944, 250),
('57463', 'Metz', '32T', 294424, 5443413, 49.1092, 6.18306, 182),
('57464', 'Metzeresche', '32T', 304289, 5463984, 49.2972, 6.30805, 220),
('57465', 'Metzervisse', '32T', 302663, 5465990, 49.3147, 6.28472, 210),
('57466', 'Metzing', '32T', 350950, 5441291, 49.1064, 6.95778, 240),
('57467', 'Mey', '32T', 298488, 5446324, 49.1367, 6.23722, 220),
('57468', 'Mittelbronn', '32T', 369524, 5403718, 48.7728, 7.22417, 300),
('57469', 'Mittersheim', '32T', 348997, 5414183, 48.8622, 6.94111, 240),
('57470', 'Molring', '32T', 340190, 5417056, 48.8858, 6.81999, 250),
('57471', 'Momerstroff', '32T', 320261, 5448540, 49.1633, 6.53444, 310),
('57472', 'Moncheux', '32T', 304877, 5423806, 48.9364, 6.33555, 310),
('57473', 'Moncourt', '32T', 326154, 5398871, 48.7186, 6.63639, 250),
('57474', 'Mondelange', '32T', 294123, 5460337, 49.2611, 6.17027, 160),
('57475', 'Mondorff', '32T', 302409, 5486898, 49.5025, 6.27083, 200),
('57476', 'Monneren', '32T', 312128, 5469120, 49.3458, 6.41334, 250),
('57477', 'Montbronn', '32T', 376358, 5428215, 48.9944, 7.30973, 350),
('57478', 'Montdidier', '32T', 340149, 5422001, 48.9303, 6.8175, 300),
('57479', 'Montenach', '32T', 310093, 5477413, 49.4197, 6.38139, 200),
('57480', 'Montigny-lès-Metz', '32T', 292371, 5441728, 49.0933, 6.15583, 180),
('57481', 'Montois-la-Montagne', '32T', 283014, 5455754, 49.2161, 6.02027, 270),
('57482', 'Montoy-Flanville', '32T', 301522, 5444391, 49.1203, 6.27972, 220),
('57483', 'Morhange', '32T', 327431, 5421608, 48.9233, 6.64417, 250),
('57484', 'Morsbach', '32T', 344555, 5448358, 49.1683, 6.8675, 211),
('57485', 'Morville-lès-Vic', '32T', 319858, 5409733, 48.8144, 6.54611, 270),
('57486', 'Morville-sur-Nied', '32T', 312082, 5424887, 48.9483, 6.43333, 240),
('57487', 'Moulins-lès-Metz', '32T', 288841, 5443376, 49.1069, 6.10667, 170),
('57488', 'Moussey', '32T', 336674, 5393580, 48.6739, 6.78139, 242),
('57489', 'Mouterhouse', '32T', 386993, 5426413, 48.9803, 7.45556, 230),
('57490', 'Moyenvic', '32T', 320853, 5405745, 48.7789, 6.56139, 203),
('57491', 'Moyeuvre-Grande', '32T', 285304, 5459932, 49.2544, 6.04944, 190),
('57492', 'Moyeuvre-Petite', '32T', 283547, 5461578, 49.2686, 6.02444, 210),
('57493', 'Mulcey', '32T', 328498, 5407947, 48.8008, 6.66445, 205),
('57494', 'Munster', '32T', 346369, 5420157, 48.9153, 6.90306, 220),
('57495', 'Narbéfontaine', '32T', 321076, 5446164, 49.1422, 6.54666, 333),
('57496', 'Nébing', '32T', 339574, 5419020, 48.9033, 6.81083, 240),
('57497', 'Nelling', '32T', 343939, 5425725, 48.9647, 6.86778, 220),
('57498', 'Neufchef', '32T', 283544, 5466618, 49.3139, 6.02167, 310),
('57499', 'Neufgrange', '32T', 358793, 5437841, 49.0772, 7.06638, 240),
('57500', 'Neufmoulins', '32T', 350357, 5394095, 48.6819, 6.96695, 270),
('57501', 'Neufvillage', '32T', 337567, 5422817, 48.9369, 6.78195, 230),
('57502', 'Neunkirchen-lès-Bouzonville', '32T', 322511, 5469825, 49.3553, 6.55584, 220),
('57504', 'Niderhoff', '32T', 353153, 5389139, 48.6381, 7.00667, 290),
('57505', 'Niderviller', '32T', 360827, 5397224, 48.7125, 7.10806, 265),
('57506', 'Niederstinzel', '32T', 355500, 5414197, 48.8639, 7.02972, 240),
('57507', 'Niedervisse', '32T', 322785, 5448860, 49.1669, 6.56889, 320),
('57508', 'Nilvange', '32T', 285888, 5469711, 49.3425, 6.05222, 250),
('57509', 'Nitting', '32T', 354970, 5392892, 48.6722, 7.03, 280),
('57510', 'Noisseville', '32T', 301230, 5445854, 49.1333, 6.275, 230),
('57511', 'Norroy-le-Veneur', '32T', 289146, 5451373, 49.1789, 6.10666, 250),
('57512', 'Nouilly', '32T', 300165, 5446140, 49.1356, 6.26028, 200),
('57513', 'Nousseviller-lès-Bitche', '32T', 381268, 5440125, 49.1025, 7.37333, 350),
('57514', 'Nousseviller-Saint-Nabor', '32T', 351799, 5442721, 49.1194, 6.96888, 300),
('57515', 'Novéant-sur-Moselle', '32T', 284223, 5434278, 49.0236, 6.04833, 180),
('57516', 'Oberdorff', '32T', 324676, 5459864, 49.2664, 6.59, 267),
('57517', 'Obergailbach', '32T', 370054, 5442014, 49.1172, 7.21916, 260),
('57518', 'Oberstinzel', '32T', 355664, 5406314, 48.7931, 7.03473, 280),
('57519', 'Obervisse', '32T', 323909, 5447248, 49.1528, 6.585, 350),
('57520', 'Obreck', '32T', 323372, 5413082, 48.8456, 6.59249, 210),
('57523', 'Ogy', '32T', 303749, 5442518, 49.1042, 6.31112, 258),
('57524', 'Ommeray', '32T', 329744, 5399256, 48.7231, 6.685, 220),
('57525', 'Oriocourt', '32T', 310081, 5415744, 48.8656, 6.41028, 250),
('57526', 'Ormersviller', '32T', 377782, 5443939, 49.1361, 7.32444, 310),
('57527', 'Orny', '32T', 298636, 5433643, 49.0228, 6.24556, 240),
('57528', 'Oron', '32T', 315223, 5420146, 48.9067, 6.47834, 240),
('57529', 'Ottange', '32T', 283913, 5481076, 49.4439, 6.01889, 330),
('57530', 'Ottonville', '32T', 319653, 5454711, 49.2186, 6.52334, 210),
('57531', 'Oudrenne', '32T', 306150, 5473131, 49.38, 6.32917, 190),
('57532', 'Pagny-lès-Goin', '32T', 296483, 5428157, 48.9728, 6.21889, 230),
('57533', 'Pange', '32T', 307238, 5440138, 49.0839, 6.36, 220),
('57534', 'Peltre', '32T', 297427, 5439500, 49.075, 6.22611, 200),
('57535', 'Petit-Réderching', '32T', 376412, 5435195, 49.0572, 7.30834, 330),
('57536', 'Petit-Tenquin', '32T', 343568, 5428455, 48.9892, 6.86167, 230),
('57537', 'Petite-Rosselle', '32T', 343893, 5452888, 49.2089, 6.85667, 230),
('57538', 'Pettoncourt', '32T', 309272, 5406406, 48.7814, 6.40361, 200),
('57539', 'Pévange', '32T', 325445, 5419970, 48.9081, 6.61778, 230),
('57540', 'Phalsbourg', '32T', 372076, 5402825, 48.7653, 7.25916, 331),
('57541', 'Philippsbourg', '32T', 395351, 5426496, 48.9825, 7.56973, 220),
('57542', 'Piblange', '32T', 312012, 5458645, 49.2517, 6.41667, 230),
('57543', 'Pierrevillers', '32T', 288806, 5456240, 49.2225, 6.09945, 230),
('57544', 'Plaine-de-Walsch', '32T', 361380, 5394800, 48.6908, 7.11638, 340),
('57545', 'Plappeville', '32T', 290273, 5445826, 49.1294, 6.125, 250),
('57546', 'Plesnois', '32T', 289037, 5450635, 49.1722, 6.10556, 250),
('57547', 'Pommérieux', '32T', 293187, 5430938, 48.9967, 6.1725, 180),
('57548', 'Pontoy', '32T', 301620, 5432949, 49.0175, 6.28667, 260),
('57549', 'Pontpierre', '32T', 327738, 5434795, 49.0419, 6.64277, 260),
('57550', 'Porcelette', '32T', 328846, 5447587, 49.1572, 6.6525, 260),
('57551', 'Postroff', '32T', 359091, 5412684, 48.8511, 7.07917, 280),
('57552', 'Pouilly', '32T', 294544, 5436792, 49.0497, 6.18806, 200),
('57553', 'Pournoy-la-Chétive', '32T', 292100, 5433421, 49.0186, 6.15638, 190),
('57554', 'Pournoy-la-Grasse', '32T', 296940, 5432871, 49.0153, 6.22278, 220),
('57555', 'Prévocourt', '32T', 311569, 5421165, 48.9147, 6.42805, 300),
('57556', 'Puttelange-aux-Lacs', '32T', 348781, 5435417, 49.0531, 6.93028, 230),
('57557', 'Puttelange-lès-Thionville', '32T', 302061, 5485056, 49.4858, 6.26695, 180),
('57558', 'Puttigny', '32T', 320221, 5414048, 48.8533, 6.54916, 210),
('57559', 'Puzieux', '32T', 307133, 5418967, 48.8936, 6.36861, 250),
('57560', 'Racrange', '32T', 329543, 5421420, 48.9222, 6.67306, 250),
('57561', 'Rahling', '32T', 369401, 5428034, 48.9914, 7.21473, 240),
('57562', 'Ranguevaux', '32T', 285764, 5464459, 49.2953, 6.05333, 270),
('57563', 'Raville', '32T', 316476, 5440751, 49.0922, 6.48611, 220),
('57564', 'Réchicourt-le-Château', '32T', 340922, 5392562, 48.6658, 6.83945, 270),
('57565', 'Rédange', '31T', 711480, 5486523, 49.4944, 5.92055, 320),
('57566', 'Réding', '32T', 360752, 5401612, 48.7519, 7.10556, 260),
('57567', 'Rémelfang', '32T', 318701, 5460244, 49.2681, 6.50777, 210),
('57568', 'Rémelfing', '32T', 360800, 5439335, 49.0911, 7.09334, 200),
('57569', 'Rémeling', '32T', 317700, 5475732, 49.4069, 6.48695, 280),
('57570', 'Rémering', '32T', 327315, 5459534, 49.2642, 6.62638, 270),
('57571', 'Rémering-lès-Puttelange', '32T', 349315, 5433394, 49.035, 6.93834, 230),
('57572', 'Rémilly', '32T', 309677, 5431924, 49.0108, 6.39723, 230),
('57573', 'Réning', '32T', 342503, 5424384, 48.9523, 6.8487, 220),
('57574', 'Basse-Rentgen', '32T', 297382, 5484919, 49.4831, 6.2025, 230),
('57575', 'Retonfey', '32T', 303489, 5446051, 49.1358, 6.30584, 250),
('57576', 'Rettel', '32T', 306278, 5480175, 49.4433, 6.3275, 150),
('57577', 'Reyersviller', '32T', 382624, 5433299, 49.0414, 7.39388, 270),
('57578', 'Rezonville', '31T', 718327, 5442820, 49.0994, 5.9911, 290),
('57579', 'Rhodes', '32T', 345443, 5402879, 48.7597, 6.89694, 260),
('57580', 'Riche', '32T', 326078, 5418065, 48.8911, 6.62723, 220),
('57581', 'Richeling', '32T', 350921, 5432702, 49.0292, 6.96055, 225),
('57582', 'Richemont', '32T', 293956, 5462352, 49.2792, 6.16694, 160),
('57583', 'Richeval', '32T', 346152, 5389234, 48.6372, 6.91167, 310),
('57584', 'Rimling', '32T', 373000, 5439598, 49.0961, 7.26028, 310),
('57585', 'Ritzing', '32T', 316040, 5479157, 49.4372, 6.4625, 330),
('57586', 'Rochonvillers', '32T', 284382, 5477625, 49.4131, 6.02722, 380),
('57587', 'Rodalbe', '32T', 331695, 5419840, 48.9086, 6.70306, 240),
('57588', 'Rodemack', '32T', 299862, 5483312, 49.4694, 6.23751, 190),
('57589', 'Rohrbach-lès-Bitche', '32T', 373136, 5434034, 49.0461, 7.26388, 310),
('57590', 'Rolbing', '32T', 386233, 5447774, 49.1722, 7.43917, 280),
('57591', 'Rombas', '32T', 288518, 5459281, 49.2497, 6.09389, 230),
('57592', 'Romelfing', '32T', 354980, 5410626, 48.8317, 7.02389, 230),
('57593', 'Roncourt', '32T', 284552, 5454148, 49.2022, 6.04223, 330),
('57594', 'Roppeviller', '32T', 390938, 5439864, 49.1019, 7.50584, 290),
('57595', 'Rorbach-lès-Dieuze', '32T', 341662, 5410741, 48.8294, 6.8425, 230),
('57596', 'Rosbruck', '32T', 343312, 5447404, 49.1594, 6.85083, 200),
('57597', 'Rosselange', '32T', 286228, 5460267, 49.2578, 6.06194, 190),
('57598', 'Rouhling', '32T', 354221, 5444572, 49.1367, 7.00139, 310),
('57599', 'Roupeldange', '32T', 315787, 5453540, 49.2069, 6.47084, 200),
('57600', 'Roussy-le-Village', '32T', 295084, 5482191, 49.4578, 6.17222, 210),
('57601', 'Rozérieulles', '32T', 287075, 5443382, 49.1064, 6.08251, 230),
('57602', 'Rurange-lès-Thionville', '32T', 298653, 5461900, 49.2767, 6.23167, 200),
('57603', 'Russange', '31T', 713994, 5485075, 49.4806, 5.95444, 307),
('57604', 'Rustroff', '32T', 309436, 5479971, 49.4425, 6.37111, 230),
('57605', 'Sailly-Achâtel', '32T', 302185, 5424272, 48.9397, 6.29861, 230),
('57606', 'Saint-Avold', '32T', 332543, 5441818, 49.1064, 6.70556, 300),
('57607', 'Sainte-Barbe', '32T', 303279, 5448717, 49.1597, 6.30166, 290),
('57609', 'Saint-Epvre', '32T', 312501, 5427655, 48.9733, 6.43778, 230),
('57610', 'Saint-François-Lacroix', '32T', 314200, 5468895, 49.3444, 6.44194, 250),
('57611', 'Saint-Georges', '32T', 347277, 5391459, 48.6575, 6.92611, 300),
('57612', 'Saint-Hubert', '32T', 305878, 5455704, 49.2233, 6.3339, 230),
('57613', 'Saint-Jean-de-Bassel', '32T', 352393, 5407697, 48.8047, 6.98972, 260),
('57614', 'Saint-Jean-Kourtzerode', '32T', 367240, 5402135, 48.7581, 7.19361, 320),
('57615', 'Saint-Jean-Rohrbach', '32T', 345452, 5432574, 49.0267, 6.88583, 230),
('57616', 'Saint-Julien-lès-Metz', '32T', 296025, 5446105, 49.1339, 6.20361, 200),
('57617', 'Saint-Jure', '32T', 296306, 5425010, 48.9444, 6.21805, 230),
('57618', 'Saint-Louis', '32T', 366741, 5397481, 48.7161, 7.18833, 360),
('57619', 'Saint-Louis-lès-Bitche', '32T', 379324, 5427192, 48.9858, 7.35056, 280),
('57620', 'Sainte-Marie-aux-Chênes', '32T', 281716, 5453146, 49.1922, 6.00389, 270),
('57621', 'Saint-Médard', '32T', 326270, 5409190, 48.8114, 6.63361, 240),
('57622', 'Saint-Privat-la-Montagne', '32T', 284343, 5452425, 49.1867, 6.04028, 320),
('57623', 'Saint-Quirin', '32T', 357414, 5386001, 48.6108, 7.06555, 320),
('57624', 'Sainte-Ruffine', '32T', 288006, 5443841, 49.1108, 6.095, 220),
('57625', 'Salonnes', '32T', 316089, 5407476, 48.7931, 6.49583, 205),
('57626', 'Sanry-lès-Vigy', '32T', 301834, 5451366, 49.1831, 6.28056, 215),
('57627', 'Sanry-sur-Nied', '32T', 305956, 5436597, 49.0517, 6.34416, 240),
('57628', 'Sarralbe', '32T', 355664, 5429116, 48.9981, 7.02667, 215),
('57629', 'Sarraltroff', '32T', 357532, 5404319, 48.7756, 7.06084, 250),
('57630', 'Sarrebourg', '32T', 356695, 5399552, 48.7325, 7.05111, 260),
('57631', 'Sarreguemines', '32T', 358714, 5441087, 49.1064, 7.06417, 210),
('57633', 'Sarreinsming', '32T', 362134, 5439147, 49.0897, 7.11166, 220),
('57634', 'Saulny', '32T', 289021, 5449151, 49.1589, 6.10612, 260),
('57635', 'Schalbach', '32T', 365695, 5409215, 48.8214, 7.17028, 290),
('57636', 'Schmittviller', '32T', 367059, 5429573, 49.0047, 7.18222, 330),
('57637', 'Schneckenbusch', '32T', 358576, 5396353, 48.7042, 7.07777, 270),
('57639', 'Schorbach', '32T', 383728, 5437508, 49.0794, 7.40777, 300),
('57640', 'Schwerdorff', '32T', 324183, 5470976, 49.3661, 6.57833, 251),
('57641', 'Schweyen', '32T', 382592, 5446120, 49.1567, 7.38972, 330),
('57642', 'Scy-Chazelles', '32T', 289377, 5444129, 49.1139, 6.11362, 250),
('57643', 'Secourt', '32T', 301260, 5425171, 48.9475, 6.28555, 260),
('57644', 'Seingbouse', '32T', 341850, 5442347, 49.1136, 6.83278, 300),
('57645', 'Semécourt', '32T', 291198, 5453088, 49.195, 6.13389, 210),
('57647', 'Serémange-Erzange', '32T', 288607, 5466854, 49.3178, 6.09111, 190),
('57648', 'Servigny-lès-Raville', '32T', 313826, 5439233, 49.0778, 6.45055, 250),
('57649', 'Servigny-lès-Sainte-Barbe', '32T', 301235, 5447678, 49.1497, 6.27417, 250),
('57650', 'Sierck-les-Bains', '32T', 308232, 5479549, 49.4383, 6.35473, 200),
('57651', 'Siersthal', '32T', 379178, 5433589, 49.0433, 7.34666, 280),
('57652', 'Sillegny', '32T', 292478, 5429913, 48.9872, 6.16334, 190),
('57653', 'Silly-en-Saulnois', '32T', 300811, 5430257, 48.9931, 6.27694, 280),
('57654', 'Silly-sur-Nied', '32T', 307360, 5444215, 49.1206, 6.35973, 250),
('57655', 'Solgne', '32T', 302073, 5427399, 48.9678, 6.29556, 260),
('57656', 'Sorbey', '32T', 304000, 5435862, 49.0444, 6.31778, 230),
('57657', 'Sotzeling', '32T', 326653, 5414926, 48.8631, 6.63639, 240),
('57658', 'Soucht', '32T', 377993, 5424008, 48.9569, 7.33333, 280),
('57659', 'Spicheren', '32T', 351975, 5450780, 49.1919, 6.96833, 300),
('57660', 'Stiring-Wendel', '32T', 349134, 5452032, 49.2025, 6.92889, 250),
('57661', 'Sturzelbronn', '32T', 396722, 5434625, 49.0558, 7.58639, 250),
('57662', 'Suisse', '32T', 322783, 5426576, 48.9667, 6.57862, 235),
('57663', 'Talange', '32T', 293901, 5457655, 49.2369, 6.1686, 160),
('57664', 'Tarquimpol', '32T', 335236, 5405920, 48.7844, 6.75695, 215),
('57665', 'Tenteling', '32T', 349425, 5443403, 49.125, 6.93611, 300),
('57666', 'Terville', '32T', 291852, 5469791, 49.3453, 6.13417, 160),
('57667', 'Téterchen', '32T', 322389, 5456043, 49.2314, 6.56028, 250),
('57668', 'Teting-sur-Nied', '32T', 329472, 5436318, 49.0561, 6.66584, 260),
('57669', 'Théding', '32T', 346251, 5443768, 49.1275, 6.8925, 300),
('57670', 'Thicourt', '32T', 321156, 5429131, 48.9892, 6.55528, 280),
('57671', 'Thimonville', '32T', 309181, 5425790, 48.9556, 6.39333, 240),
('57672', 'Thionville', '32T', 292828, 5472104, 49.3664, 6.14639, 155),
('57673', 'Thonville', '32T', 321504, 5428595, 48.9844, 6.56027, 260),
('57674', 'Tincry', '32T', 310265, 5419972, 48.9036, 6.41083, 270),
('57675', 'Torcheville', '32T', 342501, 5419389, 48.9074, 6.8506, 230),
('57676', 'Tragny', '32T', 307692, 5426274, 48.9594, 6.37278, 250),
('57677', 'Trémery', '32T', 298063, 5458521, 49.2461, 6.22527, 180),
('57678', 'Tressange', '31T', 716349, 5477004, 49.4072, 5.9825, 346),
('57679', 'Tritteling-Redlach', '32T', 326300, 5438827, 49.0778, 6.62138, 350),
('57680', 'Troisfontaines', '32T', 361556, 5392788, 48.6728, 7.11945, 290),
('57681', 'Tromborn', '32T', 324522, 5458849, 49.2572, 6.58833, 370),
('57682', 'Turquestein-Blancrupt', '32T', 359656, 5381435, 48.5703, 7.0975, 330),
('57683', 'Uckange', '32T', 293081, 5464890, 49.3017, 6.15361, 155),
('57684', 'Vahl-Ebersing', '32T', 335842, 5435383, 49.0494, 6.75334, 310),
('57685', 'Vahl-lès-Bénestroff', '32T', 337839, 5420275, 48.9142, 6.78667, 240),
('57686', 'Vahl-lès-Faulquemont', '32T', 326388, 5433199, 49.0272, 6.625, 255),
('57687', 'Vallerange', '32T', 330570, 5424386, 48.9492, 6.68583, 250),
('57689', 'Valmestroff', '32T', 301293, 5471141, 49.3606, 6.26333, 195),
('57690', 'Valmont', '32T', 332003, 5439423, 49.0847, 6.69916, 280),
('57691', 'Valmunster', '32T', 318478, 5457160, 49.2403, 6.50611, 220),
('57692', 'Vannecourt', '32T', 320180, 5417202, 48.8817, 6.54722, 250),
('57693', 'Vantoux', '32T', 298034, 5445568, 49.1297, 6.23138, 180),
('57694', 'Vany', '32T', 298749, 5448479, 49.1561, 6.23972, 190),
('57695', 'Varize', '32T', 314710, 5445601, 49.1353, 6.45972, 220),
('57696', 'Varsberg', '32T', 327298, 5449304, 49.1722, 6.63055, 240),
('57697', 'Vasperviller', '32T', 357884, 5388368, 48.6322, 7.07112, 300),
('57698', 'Vatimont', '32T', 314459, 5428393, 48.9806, 6.46417, 250),
('57700', 'Vaudreching', '32T', 320028, 5461839, 49.2828, 6.52528, 210),
('57701', 'Vaux', '32T', 286919, 5441966, 49.0936, 6.08112, 220),
('57702', 'Vaxy', '32T', 318732, 5414653, 48.8583, 6.52861, 225),
('57703', 'Veckersviller', '32T', 366581, 5411295, 48.8403, 7.18167, 290),
('57704', 'Veckring', '32T', 309521, 5468499, 49.3394, 6.37778, 240),
('57705', 'Velving', '32T', 320398, 5457066, 49.24, 6.5325, 190),
('57706', 'Vergaville', '32T', 334328, 5411788, 48.8369, 6.74223, 240),
('57707', 'Vernéville', '32T', 281556, 5448081, 49.1467, 6.00445, 310),
('57708', 'Verny', '32T', 295642, 5431867, 49.0058, 6.20555, 200),
('57709', 'Vescheim', '32T', 370030, 5406177, 48.795, 7.23027, 240),
('57711', 'Vibersviller', '32T', 349155, 5420019, 48.9147, 6.94111, 220),
('57712', 'Vic-sur-Seille', '32T', 318560, 5406221, 48.7825, 6.53, 201),
('57713', 'Vieux-Lixheim', '32T', 362617, 5404347, 48.7769, 7.13, 280),
('57714', 'Haute-Vigneulles', '32T', 321804, 5441690, 49.1022, 6.55861, 260),
('57715', 'Vigny', '32T', 298682, 5427644, 48.9689, 6.24916, 280),
('57716', 'Vigy', '32T', 303168, 5453544, 49.2031, 6.29778, 265),
('57717', 'Viller', '32T', 327847, 5428487, 48.9853, 6.64694, 270),
('57718', 'Villers-Stoncourt', '32T', 311997, 5436791, 49.0553, 6.42666, 250),
('57719', 'Villers-sur-Nied', '32T', 319428, 5421646, 48.9214, 6.535, 250),
('57720', 'Villing', '32T', 327635, 5461347, 49.2806, 6.63, 260),
('57721', 'Vilsberg', '32T', 371719, 5405058, 48.7853, 7.25361, 250),
('57722', 'Vionville', '31T', 715218, 5441863, 49.0919, 5.94806, 291),
('57723', 'Virming', '32T', 335234, 5423782, 48.945, 6.74973, 230),
('57724', 'Vitry-sur-Orne', '32T', 289600, 5461126, 49.2667, 6.10777, 190),
('57725', 'Vittersbourg', '32T', 348267, 5424060, 48.9508, 6.92749, 230),
('57726', 'Vittoncourt', '32T', 312229, 5432826, 49.0197, 6.43167, 230),
('57727', 'Viviers', '32T', 311909, 5418557, 48.8914, 6.43389, 250),
('57728', 'Voimhaut', '32T', 311279, 5433013, 49.0211, 6.41861, 230),
('57730', 'Volmerange-lès-Boulay', '32T', 314048, 5449426, 49.1694, 6.44889, 210),
('57731', 'Volmerange-les-Mines', '32T', 288173, 5480692, 49.4419, 6.07778, 330),
('57732', 'Volmunster', '32T', 380057, 5442251, 49.1214, 7.35612, 250),
('57733', 'Volstroff', '32T', 300902, 5465930, 49.3136, 6.26055, 190),
('57734', 'Voyer', '32T', 358514, 5390639, 48.6528, 7.07889, 300),
('57736', 'Vry', '32T', 305362, 5452013, 49.19, 6.32861, 290),
('57737', 'Vulmont', '32T', 302271, 5422662, 48.9253, 6.30056, 250),
('57738', 'Waldhouse', '32T', 388073, 5444647, 49.1444, 7.46527, 256),
('57739', 'Waldweistroff', '32T', 318125, 5470309, 49.3583, 6.49528, 230),
('57740', 'Waldwisse', '32T', 320808, 5476402, 49.4139, 6.52945, 280),
('57741', 'Walschbronn', '32T', 389296, 5444962, 49.1475, 7.48195, 260),
('57742', 'Walscheid', '32T', 363697, 5390789, 48.6553, 7.14917, 320),
('57743', 'Waltembourg', '32T', 367479, 5401016, 48.7481, 7.19722, 320),
('57745', 'Wiesviller', '32T', 366023, 5438001, 49.0803, 7.16528, 270),
('57746', 'Willerwald', '32T', 356595, 5432119, 49.0253, 7.03833, 240),
('57747', 'Wintersbourg', '32T', 366867, 5405325, 48.7867, 7.1875, 320),
('57748', 'Wittring', '32T', 364449, 5435043, 49.0533, 7.14473, 240),
('57751', 'Woippy', '32T', 292139, 5447951, 49.1492, 6.14945, 170),
('57752', 'Woustviller', '32T', 354750, 5437698, 49.075, 7.01111, 220),
('57753', 'Wuisse', '32T', 327487, 5413571, 48.8511, 6.64833, 225),
('57754', 'Xanrey', '32T', 322285, 5402608, 48.7511, 6.58222, 230),
('57755', 'Xocourt', '32T', 307798, 5420521, 48.9078, 6.37694, 290),
('57756', 'Xouaxange', '32T', 352510, 5395829, 48.6981, 6.99556, 280),
('57757', 'Yutz', '32T', 296452, 5471288, 49.3603, 6.19666, 155),
('57759', 'Zarbeling', '32T', 330435, 5417931, 48.8911, 6.68667, 245),
('57760', 'Zetting', '32T', 363867, 5437838, 49.0783, 7.13583, 215),
('57761', 'Zilling', '32T', 368633, 5404913, 48.7833, 7.21166, 270),
('57762', 'Zimming', '32T', 323857, 5444344, 49.1267, 6.58555, 370),
('57763', 'Zommange', '32T', 338711, 5410300, 48.8247, 6.8025, 220),
('57764', 'Zoufftgen', '32T', 292240, 5482669, 49.4611, 6.13277, 230),
('57765', 'Diesen', '32T', 330635, 5449757, 49.1772, 6.6761, 230),
('57767', 'Stuckange', '32T', 299444, 5469724, 49.3472, 6.23861, 155),
('58001', 'Achun', '31T', 551492, 5219279, 47.125, 3.67888, 260),
('58002', 'Alligny-Cosne', '31T', 504858, 5255669, 47.4544, 3.06445, 270),
('58003', 'Alligny-en-Morvan', '31T', 589270, 5228002, 47.1994, 4.17861, 460),
('58004', 'Alluy', '31T', 548689, 5209160, 47.0342, 3.64084, 254),
('58005', 'Amazy', '31T', 543617, 5247092, 47.3758, 3.57778, 230),
('58006', 'Anlezy', '31T', 538507, 5200720, 46.9589, 3.50611, 220),
('58007', 'Annay', '31T', 494982, 5264653, 47.5353, 2.93333, 151),
('58008', 'Anthien', '31T', 555929, 5240250, 47.3133, 3.74, 246),
('58009', 'Arbourse', '31T', 517194, 5233033, 47.2506, 3.22723, 273),
('58010', 'Arleuf', '31T', 577462, 5210453, 47.0431, 4.01972, 630),
('58011', 'Armes', '31T', 541371, 5256338, 47.4592, 3.54889, 160),
('58012', 'Arquian', '31T', 499101, 5265361, 47.5417, 2.98805, 170),
('58013', 'Arthel', '31T', 530922, 5232564, 47.2458, 3.40861, 260),
('58014', 'Arzembouy', '31T', 527790, 5232487, 47.2453, 3.36722, 280),
('58015', 'Asnan', '31T', 541783, 5239577, 47.3083, 3.55278, 290),
('58016', 'Asnois', '31T', 545192, 5249574, 47.3981, 3.59889, 190),
('58017', 'Aunay-en-Bazois', '31T', 553017, 5218397, 47.1169, 3.69889, 265),
('58018', 'Authiou', '31T', 531537, 5235439, 47.2717, 3.41694, 319),
('58019', 'Avrée', '31T', 566345, 5185344, 46.8183, 3.86973, 258),
('58020', 'Avril-sur-Loire', '31T', 527376, 5185255, 46.8203, 3.35889, 185),
('58021', 'Azy-le-Vif', '31T', 517513, 5181421, 46.7861, 3.22944, 225),
('58022', 'Balleray', '31T', 521320, 5213784, 47.0772, 3.28084, 233),
('58023', 'Bazoches', '31T', 559510, 5247417, 47.3775, 3.78833, 230),
('58024', 'Bazolles', '31T', 546841, 5221339, 47.1439, 3.61778, 270),
('58025', 'Béard', '31T', 524983, 5190029, 46.8633, 3.32778, 200),
('58026', 'Beaulieu', '31T', 539912, 5233698, 47.2556, 3.5275, 296),
('58027', 'Beaumont-la-Ferrière', '31T', 517192, 5226303, 47.19, 3.22694, 230),
('58028', 'Beaumont-Sardolles', '31T', 530368, 5197000, 46.9258, 3.39889, 260),
('58029', 'Beuvron', '31T', 537358, 5245259, 47.3597, 3.49472, 190),
('58030', 'Biches', '31T', 549389, 5206171, 47.0072, 3.64973, 250),
('58031', 'Billy-Chevannes', '31T', 534582, 5206931, 47.015, 3.455, 290),
('58032', 'Billy-sur-Oisy', '31T', 531037, 5258497, 47.4792, 3.41194, 180),
('58033', 'Bitry', '31T', 506005, 5259591, 47.4897, 3.07972, 270),
('58034', 'Blismes', '31T', 562125, 5220029, 47.1308, 3.81916, 400),
('58035', 'Bona', '31T', 532084, 5212042, 47.0611, 3.4225, 280),
('58036', 'Bouhy', '31T', 512305, 5259014, 47.4844, 3.16334, 340),
('58037', 'Brassy', '31T', 570861, 5234792, 47.2628, 3.93667, 410),
('58038', 'Breugnon', '31T', 534168, 5252803, 47.4278, 3.45306, 200),
('58039', 'Brèves', '31T', 545782, 5251863, 47.4186, 3.60695, 180),
('58040', 'Brinay', '31T', 552937, 5206140, 47.0067, 3.69639, 230),
('58041', 'Brinon-sur-Beuvron', '31T', 537162, 5236428, 47.2803, 3.49139, 220),
('58042', 'Bulcy', '31T', 502186, 5232175, 47.2431, 3.02888, 161),
('58043', 'Bussy-la-Pesle', '31T', 535891, 5234660, 47.2644, 3.47444, 253),
('58044', 'La Celle-sur-Loire', '31T', 494788, 5257614, 47.4719, 2.93083, 145),
('58045', 'La Celle-sur-Nièvre', '31T', 516620, 5227938, 47.2047, 3.21945, 248),
('58046', 'Cercy-la-Tour', '31T', 549092, 5190950, 46.8703, 3.64417, 200),
('58047', 'Cervon', '31T', 557204, 5232205, 47.2408, 3.75584, 298),
('58048', 'Cessy-les-Bois', '31T', 515655, 5242568, 47.3364, 3.20722, 240),
('58049', 'Chalaux', '31T', 568807, 5243227, 47.3389, 3.91083, 312),
('58050', 'Challement', '31T', 544464, 5240368, 47.3153, 3.58833, 250),
('58051', 'Challuy', '31T', 511288, 5199526, 46.9492, 3.14834, 198),
('58052', 'Champallement', '31T', 536985, 5231148, 47.2328, 3.48861, 290),
('58053', 'Champlemy', '31T', 526467, 5236988, 47.2858, 3.35, 293),
('58054', 'Champlin', '31T', 533763, 5232086, 47.2414, 3.44611, 244),
('58055', 'Champvert', '31T', 538908, 5187727, 46.8419, 3.51027, 200),
('58056', 'Champvoux', '31T', 505898, 5220200, 47.1353, 3.07778, 208),
('58057', 'Chantenay-Saint-Imbert', '31T', 514071, 5175517, 46.7331, 3.18417, 220),
('58058', 'La Chapelle-Saint-André', '31T', 525972, 5249056, 47.3944, 3.34416, 210),
('58059', 'La Charité-sur-Loire', '31T', 501452, 5225044, 47.1789, 3.01916, 170),
('58060', 'Charrin', '31T', 545817, 5181756, 46.7878, 3.60028, 200),
('58061', 'Chasnay', '31T', 513937, 5232438, 47.2453, 3.18416, 220),
('58062', 'Château-Chinon(Ville)', '31T', 570913, 5212810, 47.065, 3.93389, 534),
('58063', 'Château-Chinon(Campagne)', '31T', 572029, 5211219, 47.0506, 3.94833, 534),
('58064', 'Châteauneuf-Val-de-Bargis', '31T', 517163, 5236490, 47.2817, 3.22695, 280),
('58065', 'Châtillon-en-Bazois', '31T', 549979, 5211332, 47.0536, 3.65806, 240),
('58066', 'Châtin', '31T', 566320, 5216123, 47.0953, 3.8739, 441),
('58067', 'Chaulgnes', '31T', 507984, 5219647, 47.1303, 3.10527, 224),
('58068', 'Chaumard', '31T', 568978, 5221401, 47.1425, 3.90972, 355),
('58069', 'Chaumot', '31T', 548528, 5233825, 47.2561, 3.64138, 195),
('58070', 'Chazeuil', '31T', 530485, 5235865, 47.2756, 3.40306, 260),
('58071', 'Chevannes-Changy', '31T', 534090, 5237367, 47.2889, 3.45084, 220),
('58072', 'Chevenon', '31T', 517618, 5196300, 46.92, 3.23139, 190),
('58073', 'Chevroches', '31T', 541002, 5255131, 47.4483, 3.54389, 160),
('58074', 'Chiddes', '31T', 571713, 5190098, 46.8606, 3.94083, 320),
('58075', 'Chitry-les-Mines', '31T', 549365, 5234326, 47.2606, 3.6525, 200),
('58076', 'Chougny', '31T', 557727, 5215169, 47.0875, 3.76055, 285),
('58077', 'Ciez', '31T', 512210, 5254259, 47.4417, 3.16194, 220),
('58078', 'Cizely', '31T', 536942, 5204229, 46.9906, 3.48583, 250),
('58079', 'Clamecy', '31T', 539110, 5256260, 47.4586, 3.51889, 150),
('58080', 'La Collancelle', '31T', 548623, 5224842, 47.1753, 3.64166, 280),
('58081', 'Colméry', '31T', 518946, 5243874, 47.3481, 3.25084, 255),
('58082', 'Corancy', '31T', 572001, 5217023, 47.1028, 3.94889, 390),
('58083', 'Corbigny', '31T', 551806, 5233915, 47.2567, 3.68472, 200),
('58084', 'Corvol-d''Embernard', '31T', 530201, 5237870, 47.2936, 3.39944, 270),
('58085', 'Corvol-l''Orgueilleux', '31T', 530396, 5253060, 47.4303, 3.40306, 180),
('58086', 'Cosne-Cours-sur-Loire', '31T', 494216, 5250638, 47.4092, 2.92333, 150),
('58087', 'Cossaye', '31T', 537045, 5177343, 46.7486, 3.485, 220),
('58088', 'Coulanges-lès-Nevers', '31T', 514380, 5205798, 47.0055, 3.18917, 192),
('58089', 'Couloutre', '31T', 516996, 5250505, 47.4078, 3.22528, 219),
('58090', 'Courcelles', '31T', 529996, 5249322, 47.3967, 3.3975, 201),
('58092', 'Crux-la-Ville', '31T', 539435, 5223261, 47.1617, 3.52028, 310),
('58093', 'Cuncy-lès-Varzy', '31T', 534602, 5246662, 47.3725, 3.45833, 218),
('58094', 'Dampierre-sous-Bouhy', '31T', 510188, 5260677, 47.4994, 3.13527, 230),
('58095', 'Decize', '31T', 534597, 5186126, 46.8278, 3.45362, 193),
('58096', 'Devay', '31T', 541668, 5183825, 46.8067, 3.54611, 235),
('58097', 'Diennes-Aubigny', '31T', 544542, 5196348, 46.9192, 3.585, 241),
('58098', 'Dirol', '31T', 549355, 5240500, 47.3161, 3.65305, 180),
('58099', 'Dommartin', '31T', 564120, 5212826, 47.0658, 3.84444, 310),
('58100', 'Dompierre-sur-Héry', '31T', 542827, 5234645, 47.2639, 3.56612, 292),
('58101', 'Dompierre-sur-Nièvre', '31T', 519132, 5231711, 47.2386, 3.25278, 240),
('58102', 'Donzy', '31T', 509395, 5246382, 47.3708, 3.12444, 182),
('58103', 'Dornecy', '31T', 544007, 5253825, 47.4364, 3.58361, 172),
('58104', 'Dornes', '31T', 527047, 5173617, 46.7156, 3.35389, 220),
('58105', 'Druy-Parigny', '31T', 527901, 5190752, 46.8697, 3.36611, 250),
('58106', 'Dun-les-Places', '31T', 576860, 5237306, 47.2847, 4.01639, 520),
('58107', 'Dun-sur-Grandry', '31T', 560008, 5214790, 47.0839, 3.79055, 342),
('58108', 'Empury', '31T', 561930, 5244663, 47.3525, 3.82001, 320),
('58109', 'Entrains-sur-Nohain', '31T', 519302, 5256810, 47.4644, 3.25612, 223),
('58110', 'Epiry', '31T', 554867, 5225792, 47.1833, 3.72417, 270),
('58111', 'Fâchin', '31T', 573589, 5206267, 47.0058, 3.96806, 630),
('58112', 'La Fermeté', '31T', 525421, 5201421, 46.9658, 3.33416, 240),
('58113', 'Fertrève', '31T', 544817, 5201937, 46.9694, 3.58916, 230),
('58114', 'Fléty', '31T', 568946, 5182131, 46.7892, 3.90333, 300),
('58115', 'Fleury-sur-Loire', '31T', 524297, 5186940, 46.8356, 3.31861, 194),
('58116', 'Flez-Cuzy', '31T', 547129, 5245854, 47.3644, 3.62417, 170),
('58117', 'Fourchambault', '31T', 506312, 5207544, 47.0214, 3.08306, 173),
('58118', 'Fours', '31T', 555031, 5185075, 46.8169, 3.72139, 240),
('58119', 'Frasnay-Reugny', '31T', 538730, 5205321, 47.0003, 3.50944, 260),
('58120', 'Gâcogne', '31T', 565751, 5231213, 47.2311, 3.86861, 370),
('58121', 'Garchizy', '31T', 507300, 5210385, 47.0469, 3.0961, 210),
('58122', 'Garchy', '31T', 505422, 5234554, 47.2644, 3.07167, 172),
('58123', 'Germenay', '31T', 545059, 5236792, 47.2831, 3.59584, 230),
('58124', 'Germigny-sur-Loire', '31T', 502910, 5214240, 47.0817, 3.03834, 170),
('58125', 'Gien-sur-Cure', '31T', 583520, 5220909, 47.1364, 4.10139, 630),
('58126', 'Gimouille', '31T', 506681, 5198778, 46.9425, 3.08778, 180),
('58127', 'Giry', '31T', 527677, 5229708, 47.2203, 3.36555, 250),
('58128', 'Glux-en-Glenne', '31T', 578542, 5200619, 46.9544, 4.03223, 660),
('58129', 'Gouloux', '31T', 581336, 5232673, 47.2425, 4.07473, 550),
('58130', 'Grenois', '31T', 539864, 5240829, 47.3197, 3.52751, 240),
('58131', 'Guérigny', '31T', 515011, 5215216, 47.0903, 3.19778, 210),
('58132', 'Guipy', '31T', 543948, 5230856, 47.2297, 3.58056, 250),
('58133', 'Héry', '31T', 543942, 5234437, 47.2619, 3.58084, 243),
('58134', 'Imphy', '31T', 520174, 5197265, 46.9286, 3.26501, 200),
('58135', 'Isenay', '31T', 553570, 5194415, 46.9011, 3.70334, 230),
('58136', 'Jailly', '31T', 536258, 5216017, 47.0967, 3.47778, 350),
('58137', 'Lamenay-sur-Loire', '31T', 543653, 5179054, 46.7636, 3.57167, 199),
('58138', 'Langeron', '31T', 506442, 5184208, 46.8114, 3.08444, 191),
('58139', 'Lanty', '31T', 564087, 5184424, 46.8103, 3.84, 320),
('58140', 'Larochemillay', '31T', 576540, 5191825, 46.8756, 4.00444, 400),
('58141', 'Lavault-de-Frétoy', '31T', 576867, 5217299, 47.1047, 4.01305, 521),
('58142', 'Limanton', '31T', 556205, 5204411, 46.9908, 3.73917, 240),
('58143', 'Limon', '31T', 528864, 5201777, 46.9689, 3.37944, 240),
('58144', 'Livry', '31T', 505747, 5180195, 46.7753, 3.07528, 205),
('58145', 'Lormes', '31T', 561876, 5237747, 47.2903, 3.81833, 430),
('58146', 'Lucenay-lès-Aix', '31T', 537033, 5172342, 46.7036, 3.48444, 215),
('58147', 'Lurcy-le-Bourg', '31T', 529392, 5223110, 47.1608, 3.38777, 250),
('58148', 'Luthenay-Uxeloup', '31T', 520245, 5188684, 46.8514, 3.26556, 210),
('58149', 'Luzy', '31T', 574141, 5182163, 46.7889, 3.97139, 227),
('58150', 'Lys', '31T', 545339, 5243987, 47.3478, 3.60027, 228),
('58151', 'La Machine', '31T', 535551, 5193108, 46.8906, 3.46667, 260),
('58152', 'Magny-Cours', '31T', 511534, 5192303, 46.8842, 3.15139, 209),
('58153', 'Magny-Lormes', '31T', 557036, 5238655, 47.2989, 3.75444, 230);
INSERT INTO `ods_communes` (`oc_code_insee`, `oc_nom`, `oc_secteur`, `oc_x_utm`, `oc_y_utm`, `oc_latitude`, `oc_longitude`, `oc_altitude`) VALUES
('58154', 'La Maison-Dieu', '31T', 548824, 5251332, 47.4136, 3.64722, 210),
('58155', 'La Marche', '31T', 502822, 5220754, 47.1403, 3.03722, 170),
('58156', 'Marcy', '31T', 530921, 5240838, 47.3203, 3.40917, 250),
('58157', 'Marigny-l''Église', '31T', 570695, 5245102, 47.3556, 3.93612, 440),
('58158', 'Mars-sur-Allier', '31T', 506119, 5189456, 46.8586, 3.08027, 180),
('58159', 'Marigny-sur-Yonne', '31T', 549179, 5236454, 47.2797, 3.65028, 210),
('58160', 'Marzy', '31T', 506802, 5203008, 46.9806, 3.08944, 190),
('58161', 'Maux', '31T', 559521, 5210833, 47.0483, 3.78362, 270),
('58162', 'Menestreau', '31T', 519194, 5251346, 47.4153, 3.25445, 240),
('58163', 'Menou', '31T', 520994, 5246165, 47.3686, 3.27806, 300),
('58164', 'Mesves-sur-Loire', '31T', 499685, 5232205, 47.2433, 2.99584, 160),
('58165', 'Metz-le-Comte', '31T', 548237, 5248857, 47.3914, 3.63917, 231),
('58166', 'Mhère', '31T', 564896, 5228610, 47.2078, 3.85694, 377),
('58167', 'Michaugues', '31T', 539440, 5235085, 47.2681, 3.52139, 266),
('58168', 'Millay', '31T', 576504, 5188027, 46.8414, 4.00333, 350),
('58169', 'Moissy-Moulinot', '31T', 553332, 5241801, 47.3275, 3.70583, 99),
('58170', 'Monceaux-le-Comte', '31T', 550098, 5242081, 47.3303, 3.66306, 180),
('58171', 'Montapas', '31T', 545588, 5214384, 47.0814, 3.60055, 270),
('58172', 'Montambert', '31T', 551536, 5179889, 46.7706, 3.67499, 240),
('58173', 'Montaron', '31T', 557162, 5192689, 46.8853, 3.75028, 220),
('58174', 'Montenoison', '31T', 532244, 5229207, 47.2156, 3.42584, 360),
('58175', 'Mont-et-Marré', '31T', 548768, 5214933, 47.0861, 3.6425, 270),
('58176', 'Montigny-aux-Amognes', '31T', 522120, 5208292, 47.0278, 3.29111, 212),
('58177', 'Montigny-en-Morvan', '31T', 564910, 5221602, 47.1447, 3.85611, 410),
('58178', 'Montigny-sur-Canne', '31T', 549924, 5197717, 46.9311, 3.65583, 213),
('58179', 'Montreuillon', '31T', 559738, 5224820, 47.1742, 3.78833, 256),
('58180', 'Montsauche-les-Settons', '31T', 577611, 5229690, 47.2161, 4.025, 600),
('58181', 'Moraches', '31T', 541449, 5236271, 47.2786, 3.54805, 230),
('58182', 'Moulins-Engilbert', '31T', 561721, 5204126, 46.9878, 3.81166, 224),
('58183', 'Mouron-sur-Yonne', '31T', 556227, 5226576, 47.1903, 3.74222, 257),
('58184', 'Moussy', '31T', 534299, 5226687, 47.1928, 3.45278, 303),
('58185', 'Moux-en-Morvan', '31T', 587446, 5224701, 47.17, 4.15389, 490),
('58186', 'Murlin', '31T', 513612, 5227745, 47.2031, 3.17973, 230),
('58187', 'Myennes', '31T', 495142, 5254835, 47.4469, 2.93556, 150),
('58188', 'Nannay', '31T', 514458, 5234322, 47.2622, 3.19111, 230),
('58189', 'Narcy', '31T', 505319, 5231436, 47.2364, 3.07027, 170),
('58190', 'Neuffontaines', '31T', 556487, 5245597, 47.3614, 3.74806, 270),
('58191', 'Neuilly', '31T', 538158, 5231928, 47.2397, 3.50417, 250),
('58192', 'Neuville-lès-Decize', '31T', 524050, 5179746, 46.7708, 3.315, 250),
('58193', 'Neuvy-sur-Loire', '31T', 491259, 5263206, 47.5222, 2.88389, 140),
('58194', 'Nevers', '31T', 511827, 5204559, 46.9944, 3.15555, 201),
('58195', 'La Nocle-Maulaix', '31T', 559603, 5179191, 46.7636, 3.78055, 250),
('58196', 'Nolay', '31T', 524400, 5218673, 47.1211, 3.32167, 245),
('58197', 'Nuars', '31T', 552206, 5248119, 47.3844, 3.69167, 235),
('58198', 'Oisy', '31T', 533677, 5257986, 47.4744, 3.44694, 190),
('58199', 'Onlay', '31T', 568278, 5201635, 46.9647, 3.8975, 330),
('58200', 'Ouagne', '31T', 537353, 5249395, 47.3969, 3.495, 170),
('58201', 'Oudan', '31T', 526436, 5243841, 47.3475, 3.35, 257),
('58202', 'Ougny', '31T', 553692, 5213741, 47.075, 3.70723, 240),
('58203', 'Oulon', '31T', 530213, 5227436, 47.1997, 3.39889, 282),
('58204', 'Ourouër', '31T', 523225, 5211784, 47.0592, 3.30583, 260),
('58205', 'Ouroux-en-Morvan', '31T', 571783, 5226344, 47.1867, 3.9475, 569),
('58206', 'Parigny-la-Rose', '31T', 533435, 5241654, 47.3275, 3.4425, 233),
('58207', 'Parigny-les-Vaux', '31T', 511279, 5215392, 47.0919, 3.14861, 226),
('58208', 'Pazy', '31T', 547540, 5231254, 47.2331, 3.62805, 257),
('58209', 'Perroy', '31T', 512136, 5249474, 47.3986, 3.16083, 200),
('58210', 'Planchez', '31T', 577160, 5220730, 47.1356, 4.0175, 618),
('58211', 'Poil', '31T', 581846, 5190907, 46.8667, 4.07389, 330),
('58212', 'Poiseux', '31T', 517573, 5218433, 47.1192, 3.23166, 210),
('58213', 'Pougny', '31T', 500231, 5247795, 47.3836, 3.00306, 178),
('58214', 'Pougues-les-Eaux', '31T', 507803, 5213411, 47.0742, 3.10278, 202),
('58215', 'Pouilly-sur-Loire', '31T', 496870, 5236621, 47.2831, 2.95861, 160),
('58216', 'Pouques-Lormes', '31T', 558774, 5241266, 47.3222, 3.77777, 270),
('58217', 'Pousseaux', '31T', 539864, 5262347, 47.5133, 3.52944, 150),
('58218', 'Prémery', '31T', 525071, 5224356, 47.1722, 3.33084, 240),
('58219', 'Préporché', '31T', 564843, 5196811, 46.9217, 3.85167, 308),
('58220', 'Raveau', '31T', 505850, 5225787, 47.1856, 3.07722, 190),
('58221', 'Rémilly', '31T', 562150, 5185237, 46.8178, 3.81472, 240),
('58222', 'Rix', '31T', 537436, 5252884, 47.4283, 3.49639, 180),
('58223', 'Rouy', '31T', 540570, 5208173, 47.0258, 3.53389, 250),
('58224', 'Ruages', '31T', 551643, 5240612, 47.3169, 3.68334, 194),
('58225', 'Saincaize-Meauce', '31T', 506558, 5194950, 46.9081, 3.08611, 210),
('58226', 'Saint-Agnan', '31T', 582816, 5241061, 47.3178, 4.09584, 510),
('58227', 'Saint-Amand-en-Puisaye', '31T', 505604, 5263851, 47.5281, 3.07445, 180),
('58228', 'Saint-Andelain', '31T', 497124, 5239553, 47.3094, 2.96195, 271),
('58229', 'Saint-André-en-Morvan', '31T', 564691, 5249170, 47.3928, 3.85722, 280),
('58230', 'Saint-Aubin-des-Chaumes', '31T', 556788, 5249119, 47.3931, 3.7525, 240),
('58231', 'Saint-Aubin-les-Forges', '31T', 515460, 5220804, 47.1406, 3.20389, 225),
('58232', 'Saint-Benin-d''Azy', '31T', 529905, 5204962, 46.9975, 3.39334, 250),
('58233', 'Saint-Benin-des-Bois', '31T', 531291, 5218489, 47.1192, 3.4125, 309),
('58234', 'Saint-Bonnot', '31T', 523755, 5232253, 47.2433, 3.31389, 280),
('58235', 'Saint-Brisson', '31T', 582571, 5236025, 47.2725, 4.09166, 610),
('58236', 'Sainte-Colombe-des-Bois', '31T', 510748, 5240797, 47.3206, 3.14223, 210),
('58237', 'Saint-Didier', '31T', 546828, 5244184, 47.3494, 3.62001, 190),
('58238', 'Saint-Éloi', '31T', 516988, 5202194, 46.9731, 3.22334, 190),
('58239', 'Saint-Firmin', '31T', 529816, 5210054, 47.0433, 3.3925, 279),
('58240', 'Saint-Franchy', '31T', 534986, 5220733, 47.1392, 3.46139, 335),
('58241', 'Saint-Germain-Chassenay', '31T', 530007, 5180360, 46.7761, 3.39306, 222),
('58242', 'Saint-Germain-des-Bois', '31T', 538625, 5247181, 47.3769, 3.51166, 234),
('58243', 'Saint-Gratien-Savigny', '31T', 550845, 5193867, 46.8964, 3.6675, 240),
('58244', 'Saint-Hilaire-en-Morvan', '31T', 567439, 5214067, 47.0767, 3.88833, 338),
('58245', 'Saint-Hilaire-Fontaine', '31T', 547850, 5179364, 46.7661, 3.62666, 201),
('58246', 'Saint-Honoré-les-Bains', '31T', 564081, 5194920, 46.9047, 3.84139, 270),
('58247', 'Saint-Jean-aux-Amognes', '31T', 525482, 5206916, 47.0153, 3.33527, 246),
('58248', 'Saint-Laurent-l''Abbaye', '31T', 499308, 5243226, 47.3425, 2.99084, 170),
('58249', 'Saint-Léger-de-Fougeret', '31T', 568331, 5208057, 47.0225, 3.89917, 511),
('58250', 'Saint-Léger-des-Vignes', '31T', 534672, 5187824, 46.8431, 3.45473, 210),
('58251', 'Saint-Loup', '31T', 500356, 5254555, 47.4444, 3.00472, 210),
('58252', 'Saint-Malo-en-Donziois', '31T', 520281, 5239804, 47.3114, 3.26833, 274),
('58253', 'Sainte-Marie', '31T', 533273, 5218223, 47.1167, 3.43861, 354),
('58254', 'Saint-Martin-d''Heuille', '31T', 517320, 5211301, 47.055, 3.22805, 219),
('58255', 'Saint-Martin-du-Puy', '31T', 565708, 5242667, 47.3342, 3.86973, 440),
('58256', 'Saint-Martin-sur-Nohain', '31T', 498804, 5245356, 47.3617, 2.98416, 165),
('58257', 'Saint-Maurice', '31T', 543143, 5217113, 47.1061, 3.56861, 270),
('58258', 'Saint-Ouen-sur-Loire', '31T', 522985, 5192151, 46.8825, 3.30167, 220),
('58259', 'Saint-Parize-en-Viry', '31T', 529062, 5178318, 46.7578, 3.38055, 220),
('58260', 'Saint-Parize-le-Châtel', '31T', 513933, 5189005, 46.8544, 3.18277, 231),
('58261', 'Saint-Père', '31T', 497171, 5250913, 47.4117, 2.9625, 161),
('58262', 'Saint-Péreuse', '31T', 561080, 5213041, 47.0681, 3.80444, 370),
('58263', 'Saint-Pierre-du-Mont', '31T', 532596, 5249151, 47.395, 3.43194, 240),
('58264', 'Saint-Pierre-le-Moûtier', '31T', 509052, 5182267, 46.7939, 3.11861, 232),
('58265', 'Saint-Quentin-sur-Nohain', '31T', 501783, 5243813, 47.3478, 3.02361, 169),
('58266', 'Saint-Révérien', '31T', 538010, 5228747, 47.2111, 3.50194, 306),
('58267', 'Saint-Saulge', '31T', 538929, 5216898, 47.1044, 3.51305, 304),
('58268', 'Saint-Seine', '31T', 562841, 5175860, 46.7333, 3.8225, 260),
('58269', 'Saint-Sulpice', '31T', 526476, 5211397, 47.0556, 3.34861, 290),
('58270', 'Saint-Vérain', '31T', 504186, 5258694, 47.4817, 3.05556, 265),
('58271', 'Saizy', '31T', 553154, 5245288, 47.3589, 3.70389, 310),
('58272', 'Sardy-lès-Épiry', '31T', 553089, 5226887, 47.1933, 3.70084, 230),
('58273', 'Sauvigny-les-Bois', '31T', 520921, 5201342, 46.9653, 3.27501, 210),
('58274', 'Savigny-Poil-Fol', '31T', 565309, 5181226, 46.7814, 3.85556, 310),
('58275', 'Saxi-Bourdon', '31T', 537043, 5211793, 47.0586, 3.48778, 275),
('58276', 'Sémelay', '31T', 564800, 5189031, 46.8517, 3.85, 292),
('58277', 'Sermages', '31T', 564023, 5208132, 47.0236, 3.8425, 280),
('58278', 'Sermoise-sur-Loire', '31T', 514162, 5199717, 46.9508, 3.18611, 193),
('58279', 'Sichamps', '31T', 521078, 5222426, 47.155, 3.27805, 225),
('58280', 'Sougy-sur-Loire', '31T', 529772, 5189310, 46.8567, 3.39056, 221),
('58281', 'Suilly-la-Tour', '31T', 505036, 5242611, 47.3369, 3.06666, 186),
('58282', 'Surgy', '31T', 538760, 5261753, 47.5081, 3.51473, 150),
('58283', 'Taconnay', '31T', 537313, 5239239, 47.3056, 3.49362, 200),
('58284', 'Talon', '31T', 542309, 5242359, 47.3333, 3.56, 300),
('58285', 'Tamnay-en-Bazois', '31T', 554810, 5211405, 47.0539, 3.72167, 230),
('58286', 'Tannay', '31T', 544609, 5246205, 47.3678, 3.59083, 240),
('58287', 'Tazilly', '31T', 569845, 5179579, 46.7661, 3.91472, 320),
('58288', 'Teigny', '31T', 550530, 5247981, 47.3833, 3.66945, 220),
('58289', 'Ternant', '31T', 564179, 5177818, 46.7508, 3.84028, 272),
('58290', 'Thaix', '31T', 554154, 5188277, 46.8458, 3.71027, 242),
('58291', 'Thianges', '31T', 538013, 5195376, 46.9108, 3.49917, 225),
('58292', 'Tintury', '31T', 544029, 5205605, 47.0025, 3.57916, 245),
('58293', 'Toury-Lurcy', '31T', 532531, 5176298, 46.7394, 3.42583, 220),
('58294', 'Toury-sur-Jour', '31T', 518466, 5175004, 46.7283, 3.24167, 222),
('58295', 'Tracy-sur-Loire', '31T', 491729, 5240793, 47.3206, 2.89055, 170),
('58296', 'Tresnay', '31T', 514399, 5171566, 46.6975, 3.18834, 196),
('58297', 'Trois-Vèvres', '31T', 531793, 5195371, 46.9111, 3.4175, 292),
('58298', 'Tronsanges', '31T', 504025, 5217667, 47.1125, 3.05305, 200),
('58299', 'Trucy-l''Orgueilleux', '31T', 531161, 5254885, 47.4467, 3.41333, 210),
('58300', 'Urzy', '31T', 515508, 5210494, 47.0478, 3.20417, 190),
('58301', 'Vandenesse', '31T', 557979, 5195722, 46.9125, 3.76138, 220),
('58302', 'Varennes-lès-Narcy', '31T', 504794, 5230880, 47.2314, 3.06333, 170),
('58303', 'Varennes-Vauzelles', '31T', 510578, 5206563, 47.0125, 3.13917, 199),
('58304', 'Varzy', '31T', 529325, 5245121, 47.3589, 3.38833, 225),
('58305', 'Vauclaix', '31T', 562386, 5231269, 47.2319, 3.82417, 286),
('58306', 'Verneuil', '31T', 542473, 5189912, 46.8614, 3.55723, 203),
('58307', 'Vielmanay', '31T', 508720, 5234805, 47.2667, 3.11527, 189),
('58308', 'Vignol', '31T', 550696, 5245667, 47.3625, 3.67138, 250),
('58309', 'Villapourçon', '31T', 572989, 5200023, 46.9497, 3.95916, 420),
('58310', 'Villiers-le-Sec', '31T', 532607, 5247083, 47.3764, 3.43194, 310),
('58311', 'Ville-Langy', '31T', 538031, 5199111, 46.9444, 3.49972, 230),
('58312', 'Villiers-sur-Yonne', '31T', 543463, 5250919, 47.4103, 3.57611, 160),
('58313', 'Vitry-Laché', '31T', 542667, 5227667, 47.2011, 3.56334, 307),
('59001', 'Abancourt', '31T', 515155, 5564781, 50.235, 3.2125, 50),
('59002', 'Abscon', '31T', 521350, 5575891, 50.3347, 3.29999, 52),
('59003', 'Aibes', '31T', 577948, 5565640, 50.2378, 4.09305, 200),
('59004', 'Aix', '31T', 520472, 5593308, 50.4914, 3.28861, 40),
('59005', 'Allennes-les-Marais', '31T', 496595, 5598366, 50.5372, 2.95195, 25),
('59006', 'Amfroipret', '31T', 552330, 5569929, 50.2792, 3.73445, 135),
('59007', 'Anhiers', '31T', 511014, 5583859, 50.4067, 3.15499, 20),
('59008', 'Aniche', '31T', 517517, 5575475, 50.3311, 3.24612, 45),
('59009', 'Villeneuve-d''Ascq', '31T', 510138, 5608505, 50.6283, 3.14334, 26),
('59010', 'Anneux', '31T', 508890, 5555594, 50.1525, 3.12444, 70),
('59012', 'Anor', '31T', 578652, 5537941, 49.9886, 4.09722, 220),
('59013', 'Anstaing', '31T', 513504, 5605856, 50.6044, 3.19083, 35),
('59014', 'Anzin', '31T', 535991, 5580140, 50.3722, 3.50612, 47),
('59015', 'Arleux', '31T', 507501, 5569645, 50.2789, 3.10527, 40),
('59016', 'Armbouts-Cappel', '31T', 454483, 5647338, 50.9758, 2.35166, 1),
('59017', 'Armentières', '31T', 491543, 5615112, 50.6878, 2.88028, 18),
('59018', 'Arnèke', '31T', 458587, 5631240, 50.8314, 2.41194, 20),
('59019', 'Artres', '31T', 538404, 5571539, 50.2947, 3.53917, 60),
('59021', 'Assevent', '31T', 572209, 5570996, 50.2867, 4.01361, 140),
('59022', 'Attiches', '31T', 504155, 5596822, 50.5233, 3.05862, 59),
('59023', 'Aubencheul-au-Bac', '31T', 511465, 5567119, 50.2561, 3.16083, 40),
('59024', 'Auberchicourt', '31T', 516646, 5575596, 50.3322, 3.23388, 30),
('59025', 'Aubers', '31T', 487693, 5604927, 50.5961, 2.82612, 30),
('59026', 'Aubigny-au-Bac', '31T', 511820, 5567862, 50.2628, 3.16583, 40),
('59027', 'Aubry-du-Hainaut', '31T', 532891, 5579903, 50.3703, 3.4625, 33),
('59028', 'Auby', '31T', 503493, 5584837, 50.4156, 3.04916, 25),
('59029', 'Auchy-lez-Orchies', '31T', 514427, 5591836, 50.4783, 3.20333, 45),
('59031', 'Audignies', '31T', 557743, 5570911, 50.2875, 3.81056, 140),
('59032', 'Aulnoy-lez-Valenciennes', '31T', 537563, 5575703, 50.3322, 3.52778, 40),
('59033', 'Aulnoye-Aymeries', '31T', 560307, 5561148, 50.1994, 3.84499, 131),
('59034', 'Avelin', '31T', 505748, 5598460, 50.5381, 3.08111, 32),
('59035', 'Avesnelles', '31T', 567719, 5552063, 50.1169, 3.94722, 160),
('59036', 'Avesnes-sur-Helpe', '31T', 566459, 5552757, 50.1233, 3.92972, 152),
('59037', 'Avesnes-les-Aubert', '31T', 526863, 5560843, 50.1992, 3.37639, 65),
('59038', 'Avesnes-le-Sec', '31T', 526755, 5566526, 50.2503, 3.37528, 59),
('59039', 'Awoingt', '31T', 520042, 5555964, 50.1556, 3.28056, 90),
('59041', 'Bachant', '31T', 561736, 5562771, 50.2139, 3.86528, 140),
('59042', 'Bachy', '31T', 518419, 5600219, 50.5536, 3.26001, 73),
('59043', 'Bailleul', '31T', 481183, 5620854, 50.7392, 2.73333, 30),
('59044', 'Baisieux', '31T', 517985, 5606210, 50.6075, 3.25417, 35),
('59045', 'Baives', '31T', 585945, 5546425, 50.0639, 4.20083, 195),
('59046', 'Bambecque', '31T', 468259, 5638956, 50.9014, 2.54861, 7),
('59047', 'Banteux', '31T', 514116, 5545475, 50.0614, 3.19722, 94),
('59048', 'Bantigny', '31T', 516286, 5564074, 50.2286, 3.22833, 50),
('59049', 'Bantouzelle', '31T', 514733, 5545384, 50.0606, 3.20583, 90),
('59050', 'Bas-Lieu', '31T', 567376, 5554066, 50.135, 3.94278, 181),
('59051', 'La Bassée', '31T', 486495, 5597857, 50.5325, 2.80945, 25),
('59052', 'Bauvin', '31T', 492576, 5596084, 50.5167, 2.89528, 25),
('59053', 'Bavay', '31T', 556423, 5572133, 50.2986, 3.79222, 149),
('59054', 'Bavinchove', '31T', 461581, 5626027, 50.7847, 2.455, 35),
('59055', 'Bazuel', '31T', 542322, 5549021, 50.0919, 3.59167, 130),
('59056', 'Beaucamps-Ligny', '31T', 494260, 5605750, 50.6036, 2.91889, 35),
('59057', 'Beaudignies', '31T', 542155, 5565050, 50.2361, 3.59111, 85),
('59058', 'Beaufort', '31T', 568730, 5563011, 50.2153, 3.96333, 170),
('59059', 'Beaumont-en-Cambrésis', '31T', 532506, 5552350, 50.1225, 3.45473, 115),
('59060', 'Beaurain', '31T', 539388, 5558790, 50.18, 3.55166, 125),
('59061', 'Beaurepaire-sur-Sambre', '31T', 556781, 5545912, 50.0628, 3.79333, 188),
('59062', 'Beaurieux', '31T', 580525, 5559037, 50.1781, 4.12778, 200),
('59063', 'Beauvois-en-Cambrésis', '31T', 527393, 5554082, 50.1383, 3.38333, 100),
('59064', 'Bellaing', '31T', 530146, 5579702, 50.3686, 3.42389, 40),
('59065', 'Bellignies', '31T', 554510, 5575387, 50.3281, 3.76583, 110),
('59066', 'Bérelles', '31T', 578320, 5563267, 50.2164, 4.09778, 192),
('59067', 'Bergues', '31T', 460425, 5646486, 50.9686, 2.43639, 5),
('59068', 'Berlaimont', '31T', 557783, 5561738, 50.205, 3.80972, 125),
('59069', 'Bermerain', '31T', 537942, 5566903, 50.2531, 3.53222, 60),
('59070', 'Bermeries', '31T', 553766, 5570839, 50.2872, 3.75473, 140),
('59071', 'Bersée', '31T', 510169, 5592166, 50.4814, 3.14333, 54),
('59072', 'Bersillies', '31T', 571541, 5575002, 50.3228, 4.00499, 126),
('59073', 'Berthen', '31T', 478459, 5625683, 50.7825, 2.69444, 55),
('59074', 'Bertry', '31T', 531655, 5548422, 50.0872, 3.4425, 133),
('59075', 'Béthencourt', '31T', 530789, 5553915, 50.1367, 3.43083, 118),
('59076', 'Bettignies', '31T', 569349, 5576302, 50.3347, 3.97445, 145),
('59077', 'Bettrechies', '31T', 552694, 5575091, 50.3256, 3.74028, 120),
('59078', 'Beugnies', '31T', 571171, 5556865, 50.1597, 3.99639, 190),
('59079', 'Beuvrages', '31T', 536100, 5581500, 50.3844, 3.50778, 25),
('59080', 'Beuvry-la-Forêt', '31T', 520328, 5589817, 50.46, 3.28639, 21),
('59081', 'Bévillers', '31T', 527858, 5556308, 50.1583, 3.39, 90),
('59082', 'Bierne', '31T', 458607, 5646006, 50.9642, 2.41055, 5),
('59083', 'Bissezeele', '31T', 458366, 5640261, 50.9125, 2.40778, 30),
('59084', 'Blaringhem', '31T', 457972, 5615614, 50.6908, 2.40499, 25),
('59085', 'Blécourt', '31T', 515279, 5562898, 50.2181, 3.21416, 55),
('59086', 'Boeschepe', '31T', 478252, 5627568, 50.7994, 2.69139, 65),
('59087', 'Boëseghem', '31T', 460342, 5612383, 50.6619, 2.43889, 30),
('59088', 'Bois-Grenier', '31T', 491045, 5610943, 50.6503, 2.87333, 20),
('59089', 'Bollezeele', '31T', 452479, 5635060, 50.8653, 2.32472, 45),
('59090', 'Bondues', '31T', 506473, 5616901, 50.7039, 3.09167, 35),
('59091', 'Borre', '31T', 470574, 5620007, 50.7311, 2.58305, 30),
('59092', 'Bouchain', '31T', 522540, 5570336, 50.2847, 3.31638, 37),
('59093', 'Boulogne-sur-Helpe', '31T', 564057, 5547724, 50.0783, 3.89528, 155),
('59094', 'Bourbourg', '31T', 443472, 5644511, 50.9494, 2.19528, 3),
('59096', 'Bourghelles', '31T', 517292, 5601574, 50.5658, 3.24416, 45),
('59097', 'Boursies', '31T', 502164, 5554074, 50.1389, 3.03028, 93),
('59098', 'Bousbecque', '31T', 505680, 5624560, 50.7728, 3.08055, 19),
('59099', 'Bousies', '31T', 544314, 5555647, 50.1514, 3.62028, 138),
('59100', 'Bousignies', '31T', 524521, 5587116, 50.4356, 3.34528, 17),
('59101', 'Bousignies-sur-Roc', '31T', 584418, 5568735, 50.2647, 4.18445, 150),
('59102', 'Boussières-en-Cambrésis', '31T', 526207, 5557103, 50.1656, 3.36694, 85),
('59103', 'Boussières-sur-Sambre', '31T', 562853, 5565502, 50.2383, 3.88138, 130),
('59104', 'Boussois', '31T', 574379, 5571489, 50.2908, 4.04416, 124),
('59105', 'Bouvignies', '31T', 517577, 5587182, 50.4364, 3.24751, 20),
('59106', 'Bouvines', '31T', 513276, 5602953, 50.5783, 3.1875, 35),
('59107', 'Bray-Dunes', '31T', 466197, 5658153, 51.0739, 2.5175, 2),
('59108', 'Briastre', '31T', 534822, 5556503, 50.1597, 3.4875, 75),
('59109', 'Brillon', '31T', 523318, 5587049, 50.435, 3.32834, 20),
('59110', 'Brouckerque', '31T', 450422, 5644811, 50.9528, 2.29417, 2),
('59111', 'Broxeele', '31T', 452190, 5631202, 50.8306, 2.32112, 27),
('59112', 'Bruay-sur-l''Escaut', '31T', 538161, 5583213, 50.3997, 3.53694, 20),
('59113', 'Bruille-lez-Marchiennes', '31T', 517309, 5578625, 50.3594, 3.24334, 28),
('59114', 'Bruille-Saint-Amand', '31T', 535540, 5591380, 50.4733, 3.50084, 25),
('59115', 'Brunémont', '31T', 509818, 5569031, 50.2733, 3.13778, 40),
('59116', 'Bry', '31T', 548271, 5574369, 50.3194, 3.67805, 90),
('59117', 'Bugnicourt', '31T', 511061, 5570949, 50.2906, 3.15528, 65),
('59118', 'Busigny', '31T', 533282, 5542502, 50.0339, 3.46473, 135),
('59119', 'Buysscheure', '31T', 452887, 5628230, 50.8039, 2.3314, 25),
('59120', 'Caëstre', '31T', 472159, 5623118, 50.7592, 2.60527, 42),
('59121', 'Cagnoncles', '31T', 522129, 5559802, 50.19, 3.31, 50),
('59122', 'Cambrai', '31T', 517117, 5558301, 50.1767, 3.23972, 50),
('59123', 'Camphin-en-Carembault', '31T', 499055, 5595554, 50.5119, 2.98667, 33),
('59124', 'Camphin-en-Pévèle', '31T', 518383, 5604883, 50.5956, 3.25973, 50),
('59125', 'Cantaing-sur-Escaut', '31T', 511451, 5555074, 50.1478, 3.16027, 65),
('59126', 'Cantin', '31T', 509118, 5573076, 50.3097, 3.12805, 50),
('59127', 'Capelle', '31T', 539102, 5565429, 50.2397, 3.54834, 73),
('59128', 'Capinghem', '31T', 497407, 5610195, 50.6436, 2.96333, 48),
('59129', 'Cappelle-en-Pévèle', '31T', 512093, 5595444, 50.5108, 3.17055, 42),
('59130', 'Cappelle-Brouck', '31T', 445290, 5639271, 50.9025, 2.22194, 2),
('59131', 'Cappelle-la-Grande', '31T', 456341, 5650195, 51.0017, 2.37778, 2),
('59132', 'Carnières', '31T', 524698, 5557466, 50.1689, 3.34583, 75),
('59133', 'Carnin', '31T', 497086, 5596358, 50.5192, 2.9589, 28),
('59134', 'Cartignies', '31T', 560441, 5549350, 50.0933, 3.845, 145),
('59135', 'Cassel', '31T', 463786, 5627772, 50.8006, 2.48611, 176),
('59136', 'Le Cateau-Cambrésis', '31T', 538615, 5550507, 50.1056, 3.54, 100),
('59137', 'Catillon-sur-Sambre', '31T', 545996, 5546982, 50.0733, 3.64278, 149),
('59138', 'Cattenières', '31T', 523642, 5554095, 50.1386, 3.33084, 95),
('59139', 'Caudry', '31T', 529269, 5552331, 50.1225, 3.40944, 115),
('59140', 'Caullery', '31T', 526530, 5548147, 50.085, 3.37084, 135),
('59141', 'Cauroir', '31T', 521680, 5558101, 50.1747, 3.30361, 60),
('59142', 'Cerfontaine', '31T', 573236, 5568291, 50.2622, 4.0275, 150),
('59143', 'La Chapelle-d''Armentières', '31T', 492600, 5613474, 50.6731, 2.89528, 19),
('59144', 'Château-l''Abbaye', '31T', 533935, 5592574, 50.4842, 3.47833, 17),
('59145', 'Chemy', '31T', 499055, 5597530, 50.5297, 2.98667, 26),
('59146', 'Chéreng', '31T', 514800, 5606478, 50.61, 3.20917, 30),
('59147', 'Choisies', '31T', 574359, 5563025, 50.2147, 4.04222, 170),
('59148', 'Clairfayts', '31T', 580202, 5556777, 50.1578, 4.12278, 230),
('59149', 'Clary', '31T', 528620, 5547386, 50.0781, 3.4, 125),
('59150', 'Cobrieux', '31T', 516100, 5599130, 50.5439, 3.22722, 35),
('59151', 'Colleret', '31T', 576629, 5567845, 50.2578, 4.07501, 180),
('59152', 'Comines', '31T', 500490, 5623106, 50.7597, 3.00695, 15),
('59153', 'Condé-sur-l''Escaut', '31T', 541606, 5589509, 50.4561, 3.58611, 26),
('59154', 'Coudekerque', '31T', 458965, 5649308, 50.9939, 2.41528, 5),
('59155', 'Coudekerque-Branche', '31T', 456968, 5652908, 51.0261, 2.3864, 2),
('59156', 'Courchelettes', '31T', 505533, 5577766, 50.3519, 3.07777, 30),
('59157', 'Cousolre', '31T', 581932, 5566812, 50.2478, 4.14916, 153),
('59158', 'Coutiches', '31T', 514237, 5589117, 50.4539, 3.20055, 25),
('59159', 'Craywick', '31T', 446405, 5646982, 50.9719, 2.23666, 2),
('59160', 'Crespin', '31T', 546883, 5586001, 50.4242, 3.66001, 25),
('59162', 'Crochte', '31T', 456923, 5642868, 50.9358, 2.38694, 10),
('59163', 'Croix', '31T', 510657, 5614035, 50.6781, 3.15083, 44),
('59164', 'Croix-Caluyau', '31T', 541557, 5555378, 50.1492, 3.58167, 137),
('59165', 'Cuincy', '31T', 503792, 5580266, 50.3744, 3.05333, 26),
('59166', 'Curgies', '31T', 542882, 5575558, 50.3306, 3.60249, 85),
('59167', 'Cuvillers', '31T', 516783, 5563643, 50.2247, 3.23528, 65),
('59168', 'Cysoing', '31T', 515246, 5601846, 50.5683, 3.21528, 39),
('59169', 'Damousies', '31T', 572490, 5563462, 50.2189, 4.01611, 150),
('59170', 'Dechy', '31T', 509387, 5577771, 50.3519, 3.13195, 25),
('59171', 'Dehéries', '31T', 524421, 5544308, 50.0506, 3.34111, 130),
('59172', 'Denain', '31T', 528152, 5575645, 50.3322, 3.39555, 29),
('59173', 'Deûlémont', '31T', 496217, 5620389, 50.7353, 2.94639, 15),
('59174', 'Dimechaux', '31T', 574249, 5560953, 50.1961, 4.04027, 167),
('59175', 'Dimont', '31T', 573064, 5559176, 50.1803, 4.02333, 170),
('59176', 'Doignies', '31T', 501092, 5552776, 50.1272, 3.01528, 100),
('59177', 'Dompierre-sur-Helpe', '31T', 561728, 5554894, 50.1431, 3.86389, 150),
('59178', 'Douai', '31T', 505650, 5579804, 50.3703, 3.07945, 25),
('59179', 'Douchy-les-Mines', '31T', 527598, 5572090, 50.3003, 3.38751, 40),
('59180', 'Le Doulieu', '31T', 480121, 5614556, 50.6825, 2.71862, 17),
('59181', 'Dourlers', '31T', 566921, 5558725, 50.1769, 3.93723, 175),
('59182', 'Drincham', '31T', 451465, 5639487, 50.905, 2.30972, 10),
('59183', 'Dunkerque', '31T', 456411, 5653932, 51.0353, 2.37833, 4),
('59184', 'Ebblinghem', '31T', 458383, 5620306, 50.7331, 2.41028, 35),
('59185', 'Écaillon', '31T', 515513, 5577785, 50.3519, 3.21806, 25),
('59186', 'Eccles', '31T', 578613, 5562190, 50.2067, 4.10166, 191),
('59187', 'Éclaibes', '31T', 566605, 5561748, 50.2042, 3.93333, 160),
('59188', 'Écuélin', '31T', 564775, 5560644, 50.1944, 3.9075, 165),
('59189', 'Eecke', '31T', 471407, 5625346, 50.7792, 2.59444, 65),
('59190', 'Élesmes', '31T', 571858, 5573524, 50.3094, 4.00917, 120),
('59191', 'Élincourt', '31T', 526473, 5543452, 50.0428, 3.36972, 135),
('59192', 'Émerchicourt', '31T', 517307, 5573003, 50.3089, 3.24305, 65),
('59193', 'Emmerin', '31T', 500079, 5604573, 50.5931, 3.00112, 25),
('59194', 'Englefontaine', '31T', 546081, 5560079, 50.1911, 3.64555, 147),
('59195', 'Englos', '31T', 496660, 5608280, 50.6264, 2.95278, 40),
('59196', 'Ennetières-en-Weppes', '31T', 495776, 5609115, 50.6339, 2.94027, 40),
('59197', 'Ennevelin', '31T', 509231, 5598774, 50.5408, 3.13027, 30),
('59198', 'Eppe-Sauvage', '31T', 584293, 5552793, 50.1214, 4.17916, 179),
('59199', 'Erchin', '31T', 511905, 5574193, 50.3197, 3.16723, 50),
('59200', 'Eringhem', '31T', 453918, 5638539, 50.8967, 2.34473, 16),
('59201', 'Erquinghem-le-Sec', '31T', 495283, 5606706, 50.6122, 2.93333, 30),
('59202', 'Erquinghem-Lys', '31T', 489029, 5613820, 50.6761, 2.84473, 15),
('59203', 'Erre', '31T', 522307, 5578860, 50.3614, 3.31362, 25),
('59204', 'Escarmain', '31T', 538892, 5564253, 50.2292, 3.54527, 75),
('59205', 'Escaudain', '31T', 524532, 5576121, 50.3367, 3.34472, 40),
('59207', 'Escautpont', '31T', 539314, 5584827, 50.4142, 3.55333, 26),
('59208', 'Escobecques', '31T', 495166, 5607695, 50.6211, 2.93166, 35),
('59209', 'Esnes', '31T', 522150, 5549950, 50.1014, 3.30972, 80),
('59210', 'Esquelbecq', '31T', 460043, 5637345, 50.8864, 2.43195, 13),
('59211', 'Esquerchin', '31T', 501047, 5580543, 50.3769, 3.01472, 30),
('59212', 'Estaires', '31T', 480458, 5610323, 50.6444, 2.72361, 16),
('59213', 'Estourmel', '31T', 522942, 5555203, 50.1486, 3.32111, 75),
('59214', 'Estrées', '31T', 504966, 5572020, 50.3003, 3.06973, 50),
('59215', 'Estreux', '31T', 542271, 5577900, 50.3517, 3.59417, 69),
('59216', 'Eswars', '31T', 518946, 5562878, 50.2178, 3.26556, 51),
('59217', 'Eth', '31T', 547553, 5575073, 50.3258, 3.66806, 87),
('59219', 'Estrun', '31T', 521073, 5566222, 50.2478, 3.29556, 20),
('59220', 'Faches-Thumesnil', '31T', 504934, 5605656, 50.6028, 3.06972, 41),
('59221', 'Famars', '31T', 536845, 5573814, 50.3153, 3.51751, 73),
('59222', 'Faumont', '31T', 509681, 5589601, 50.4583, 3.13638, 40),
('59223', 'Le Favril', '31T', 551529, 5550338, 50.1031, 3.72055, 165),
('59224', 'Féchain', '31T', 514927, 5568178, 50.2656, 3.20944, 40),
('59225', 'Feignies', '31T', 565146, 5572418, 50.3003, 3.91473, 150),
('59226', 'Felleries', '31T', 573336, 5555257, 50.145, 4.02639, 186),
('59227', 'Fenain', '31T', 521299, 5578917, 50.3619, 3.29945, 23),
('59228', 'Férin', '31T', 505220, 5575202, 50.3289, 3.07334, 34),
('59229', 'Féron', '31T', 573369, 5544199, 50.0456, 4.02473, 186),
('59230', 'Ferrière-la-Grande', '31T', 570811, 5567517, 50.2556, 3.99334, 136),
('59231', 'Ferrière-la-Petite', '31T', 572935, 5565723, 50.2392, 4.02278, 140),
('59232', 'La Flamengrie', '31T', 550886, 5573961, 50.3156, 3.71473, 120),
('59233', 'Flaumont-Waudrechies', '31T', 569573, 5553106, 50.1261, 3.97334, 151),
('59234', 'Flers-en-Escrebieux', '31T', 505567, 5582924, 50.3983, 3.07833, 23),
('59236', 'Flesquières', '31T', 508260, 5552473, 50.1244, 3.11555, 100),
('59237', 'Flêtre', '31T', 474938, 5622455, 50.7533, 2.64472, 40),
('59238', 'Flines-lès-Mortagne', '31T', 532916, 5594791, 50.5042, 3.46416, 20),
('59239', 'Flines-lez-Raches', '31T', 512568, 5586488, 50.4303, 3.17695, 23),
('59240', 'Floursies', '31T', 569194, 5559341, 50.1822, 3.96917, 187),
('59241', 'Floyon', '31T', 563770, 5543458, 50.04, 3.89055, 200),
('59242', 'Fontaine-au-Bois', '31T', 546168, 5554644, 50.1422, 3.64611, 160),
('59243', 'Fontaine-au-Pire', '31T', 526764, 5552905, 50.1278, 3.37444, 125),
('59244', 'Fontaine-Notre-Dame', '31T', 511229, 5557143, 50.1664, 3.15723, 70),
('59246', 'Forest-en-Cambrésis', '31T', 540770, 5554507, 50.1414, 3.57056, 140),
('59247', 'Forest-sur-Marque', '31T', 513377, 5609316, 50.6356, 3.18916, 24),
('59248', 'Fort-Mardyck', '31T', 451011, 5653393, 51.03, 2.30139, 3),
('59249', 'Fourmies', '31T', 574927, 5540853, 50.0153, 4.04583, 194),
('59250', 'Fournes-en-Weppes', '31T', 492213, 5603559, 50.5839, 2.89001, 40),
('59251', 'Frasnoy', '31T', 548261, 5568963, 50.2708, 3.67722, 100),
('59252', 'Frelinghien', '31T', 495215, 5617857, 50.7125, 2.93223, 17),
('59253', 'Fresnes-sur-Escaut', '31T', 540675, 5587433, 50.4375, 3.57277, 25),
('59254', 'Fressain', '31T', 513852, 5570646, 50.2878, 3.19445, 75),
('59255', 'Fressies', '31T', 513743, 5566909, 50.2542, 3.19278, 42),
('59256', 'Fretin', '31T', 509661, 5600752, 50.5586, 3.13639, 32),
('59257', 'Fromelles', '31T', 489563, 5606004, 50.6058, 2.85251, 25),
('59258', 'Genech', '31T', 515100, 5597707, 50.5311, 3.21305, 40),
('59259', 'Ghissignies', '31T', 543986, 5564015, 50.2267, 3.61666, 100),
('59260', 'Ghyvelde', '31T', 466804, 5655677, 51.0517, 2.52639, 2),
('59261', 'Glageon', '31T', 576868, 5545700, 50.0586, 4.07389, 187),
('59262', 'Godewaersvelde', '31T', 474705, 5626935, 50.7936, 2.64111, 45),
('59264', 'Gognies-Chaussée', '31T', 567148, 5576829, 50.3397, 3.94362, 130),
('59265', 'Gommegnies', '31T', 550299, 5569136, 50.2722, 3.70584, 127),
('59266', 'Gondecourt', '31T', 498780, 5599044, 50.5433, 2.98278, 24),
('59267', 'Gonnelieu', '31T', 511036, 5545035, 50.0575, 3.15417, 135),
('59268', 'La Gorgue', '31T', 480023, 5609584, 50.6378, 2.7175, 15),
('59269', 'Gouzeaucourt', '31T', 508750, 5544568, 50.0533, 3.12223, 125),
('59270', 'Grand-Fayt', '31T', 557477, 5551479, 50.1128, 3.80389, 20),
('59271', 'Grande-Synthe', '31T', 450467, 5651576, 51.0136, 2.29389, 2),
('59272', 'Grand-Fort-Philippe', '31T', 437104, 5650424, 51.0019, 2.10361, 3),
('59273', 'Gravelines', '31T', 438817, 5648611, 50.9858, 2.12833, 3),
('59274', 'La Groise', '31T', 548757, 5547223, 50.0753, 3.68139, 160),
('59275', 'Gruson', '31T', 514588, 5604809, 50.595, 3.20611, 40),
('59276', 'Guesnain', '31T', 510771, 5577341, 50.3481, 3.15139, 25),
('59277', 'Gussignies', '31T', 552462, 5576540, 50.3386, 3.73722, 100),
('59278', 'Hallennes-lez-Haubourdin', '31T', 497209, 5607106, 50.6158, 2.96055, 25),
('59279', 'Halluin', '31T', 508753, 5625893, 50.7847, 3.12417, 25),
('59280', 'Hamel', '31T', 505304, 5569766, 50.28, 3.07444, 40),
('59281', 'Hantay', '31T', 490413, 5598002, 50.5339, 2.86472, 21),
('59282', 'Hardifort', '31T', 463821, 5629965, 50.8203, 2.48639, 40),
('59283', 'Hargnies', '31T', 560491, 5567637, 50.2578, 3.84861, 145),
('59284', 'Hasnon', '31T', 527370, 5585525, 50.4211, 3.38528, 16),
('59285', 'Haspres', '31T', 529819, 5567561, 50.2594, 3.41833, 40),
('59286', 'Haubourdin', '31T', 498742, 5606488, 50.6103, 2.98222, 23),
('59287', 'Haucourt-en-Cambrésis', '31T', 524500, 5550384, 50.1052, 3.34261, 105),
('59288', 'Haulchin', '31T', 530830, 5574208, 50.3192, 3.43306, 32),
('59289', 'Haussy', '31T', 534204, 5563017, 50.2183, 3.47944, 70),
('59290', 'Haut-Lieu', '31T', 565257, 5550395, 50.1022, 3.9125, 185),
('59291', 'Hautmont', '31T', 565269, 5567261, 50.2539, 3.91556, 160),
('59292', 'Haveluy', '31T', 528673, 5578057, 50.3539, 3.40305, 30),
('59293', 'Haverskerque', '31T', 467592, 5610047, 50.6414, 2.54167, 17),
('59294', 'Haynecourt', '31T', 511476, 5562178, 50.2117, 3.16084, 70),
('59295', 'Hazebrouck', '31T', 467431, 5619006, 50.7219, 2.5386, 26),
('59296', 'Hecq', '31T', 546387, 5559093, 50.1822, 3.64972, 145),
('59297', 'Hélesmes', '31T', 525704, 5579092, 50.3633, 3.36139, 21),
('59299', 'Hem', '31T', 513136, 5611508, 50.6553, 3.18583, 31),
('59300', 'Hem-Lenglet', '31T', 516355, 5567379, 50.2583, 3.22944, 40),
('59301', 'Hergnies', '31T', 536936, 5591884, 50.4778, 3.52056, 16),
('59302', 'Hérin', '31T', 532149, 5578416, 50.3569, 3.45194, 43),
('59303', 'Herlies', '31T', 489497, 5602946, 50.5783, 2.85166, 39),
('59304', 'Herrin', '31T', 497678, 5599137, 50.5442, 2.96723, 20),
('59305', 'Herzeele', '31T', 467194, 5637295, 50.8864, 2.53361, 12),
('59306', 'Hestrud', '31T', 582253, 5561442, 50.1994, 4.1525, 194),
('59307', 'Holque', '31T', 444042, 5634002, 50.855, 2.205, 2),
('59308', 'Hondeghem', '31T', 466163, 5622968, 50.7575, 2.52028, 42),
('59309', 'Hondschoote', '31T', 471004, 5647836, 50.9814, 2.58694, 5),
('59310', 'Hon-Hergies', '31T', 558327, 5575397, 50.3278, 3.81945, 120),
('59311', 'Honnechy', '31T', 533715, 5546335, 50.0683, 3.47111, 140),
('59312', 'Honnecourt-sur-Escaut', '31T', 514124, 5542726, 50.0367, 3.19723, 80),
('59313', 'Hordain', '31T', 522373, 5567772, 50.2617, 3.31389, 40),
('59314', 'Hornaing', '31T', 523846, 5579361, 50.3658, 3.33528, 24),
('59315', 'Houdain-lez-Bavay', '31T', 555950, 5573857, 50.3142, 3.78583, 130),
('59316', 'Houplin-Ancoisne', '31T', 500177, 5601144, 50.5622, 3.0025, 25),
('59317', 'Houplines', '31T', 493977, 5616066, 50.6964, 2.91472, 15),
('59318', 'Houtkerque', '31T', 471369, 5636189, 50.8767, 2.59305, 16),
('59319', 'Hoymille', '31T', 461486, 5647497, 50.9778, 2.45139, 2),
('59320', 'Illies', '31T', 488156, 5601250, 50.5631, 2.83277, 30),
('59321', 'Inchy', '31T', 533101, 5552354, 50.1225, 3.46305, 120),
('59322', 'Iwuy', '31T', 522743, 5564592, 50.2331, 3.31889, 45),
('59323', 'Jenlain', '31T', 544639, 5573534, 50.3122, 3.62694, 90),
('59324', 'Jeumont', '31T', 578546, 5572105, 50.2958, 4.10278, 130),
('59325', 'Jolimetz', '31T', 548284, 5564268, 50.2286, 3.67694, 143),
('59326', 'Killem', '31T', 469176, 5645252, 50.9581, 2.56112, 8),
('59327', 'Lallaing', '31T', 511887, 5582038, 50.3903, 3.16722, 20),
('59328', 'Lambersart', '31T', 502023, 5610318, 50.6447, 3.02861, 20),
('59329', 'Lambres-lez-Douai', '31T', 504249, 5577672, 50.3511, 3.05972, 25),
('59330', 'Landas', '31T', 521328, 5591334, 50.4736, 3.30056, 30),
('59331', 'Landrecies', '31T', 549181, 5552941, 50.1267, 3.68806, 138),
('59332', 'Lannoy', '31T', 515271, 5613521, 50.6733, 3.21612, 37),
('59333', 'Larouillies', '31T', 566275, 5543612, 50.0411, 3.92556, 204),
('59334', 'Lauwin-Planque', '31T', 502962, 5581964, 50.3897, 3.04167, 25),
('59335', 'Lecelles', '31T', 528011, 5591180, 50.4719, 3.39473, 18),
('59336', 'Lécluse', '31T', 502811, 5569455, 50.2772, 3.03945, 47),
('59337', 'Lederzeele', '31T', 450714, 5630320, 50.8225, 2.30028, 30),
('59338', 'Ledringhem', '31T', 460485, 5633851, 50.855, 2.43861, 18),
('59339', 'Leers', '31T', 517152, 5614331, 50.6806, 3.24277, 25),
('59340', 'Leffrinckoucke', '31T', 462430, 5654008, 51.0364, 2.46416, 2),
('59341', 'Lesdain', '31T', 518993, 5549659, 50.0989, 3.26556, 75),
('59342', 'Lez-Fontaine', '31T', 575867, 5558721, 50.1758, 4.06249, 180),
('59343', 'Lesquin', '31T', 507531, 5604084, 50.5886, 3.10639, 50),
('59344', 'Leval', '31T', 559398, 5559130, 50.1814, 3.83194, 135),
('59345', 'Lewarde', '31T', 511761, 5576602, 50.3414, 3.16528, 40),
('59346', 'Lezennes', '31T', 508215, 5606989, 50.6147, 3.11611, 35),
('59347', 'Liessies', '31T', 577408, 5552380, 50.1186, 4.08278, 170),
('59348', 'Lieu-Saint-Amand', '31T', 524545, 5569140, 50.2739, 3.34445, 55),
('59349', 'Ligny-en-Cambrésis', '31T', 527098, 5549694, 50.0989, 3.37889, 125),
('59350', 'Lille', '31T', 503163, 5608466, 50.6281, 3.04472, 20),
('59351', 'Limont-Fontaine', '31T', 565964, 5562265, 50.2089, 3.92444, 155),
('59352', 'Linselles', '31T', 505449, 5620575, 50.7369, 3.07722, 45),
('59353', 'Locquignol', '31T', 551248, 5560960, 50.1986, 3.71805, 157),
('59354', 'Loffre', '31T', 512310, 5578302, 50.3567, 3.17305, 25),
('59356', 'Lompret', '31T', 499274, 5613190, 50.6706, 2.98973, 25),
('59357', 'La Longueville', '31T', 560885, 5571255, 50.2903, 3.85472, 145),
('59358', 'Looberghe', '31T', 449017, 5640809, 50.9167, 2.27473, 2),
('59359', 'Loon-Plage', '31T', 445106, 5649529, 50.9947, 2.21778, 3),
('59360', 'Loos', '31T', 501218, 5606889, 50.6139, 3.01722, 30),
('59361', 'Lourches', '31T', 525117, 5573683, 50.3147, 3.35278, 30),
('59363', 'Louvignies-Quesnoy', '31T', 545573, 5563874, 50.2253, 3.63889, 120),
('59364', 'Louvil', '31T', 513635, 5600730, 50.5583, 3.19249, 30),
('59365', 'Louvroil', '31T', 568672, 5569003, 50.2692, 3.96361, 130),
('59366', 'Lynde', '31T', 459070, 5618015, 50.7125, 2.42027, 60),
('59367', 'Lys-lez-Lannoy', '31T', 514193, 5612962, 50.6683, 3.20084, 30),
('59368', 'La Madeleine', '31T', 504968, 5611494, 50.6553, 3.07028, 16),
('59369', 'Maing', '31T', 534319, 5572901, 50.3072, 3.48195, 40),
('59370', 'Mairieux', '31T', 570722, 5574157, 50.3153, 3.99333, 126),
('59371', 'Le Maisnil', '31T', 491903, 5606864, 50.6136, 2.88556, 27),
('59372', 'Malincourt', '31T', 523349, 5543840, 50.0464, 3.32611, 125),
('59374', 'Marbaix', '31T', 560037, 5553484, 50.1306, 3.84, 145),
('59375', 'Marchiennes', '31T', 519738, 5584193, 50.4094, 3.27778, 20),
('59377', 'Marcoing', '31T', 512351, 5552049, 50.1206, 3.17277, 75),
('59379', 'Marcq-en-Ostrevent', '31T', 516919, 5570655, 50.2878, 3.2375, 43),
('59381', 'Maresches', '31T', 540997, 5571404, 50.2933, 3.57556, 80),
('59382', 'Maretz', '31T', 529972, 5543811, 50.0458, 3.41861, 135),
('59383', 'Marly', '31T', 538299, 5577778, 50.3508, 3.53833, 41),
('59384', 'Maroilles', '31T', 554411, 5554103, 50.1367, 3.76138, 150),
('59385', 'Marpent', '31T', 576486, 5572261, 50.2975, 4.07389, 140),
('59386', 'Marquette-lez-Lille', '31T', 504613, 5613594, 50.6742, 3.06528, 19),
('59387', 'Marquette-en-Ostrevant', '31T', 519056, 5570755, 50.2886, 3.2675, 38),
('59388', 'Marquillies', '31T', 490575, 5600596, 50.5572, 2.86695, 28),
('59389', 'Masnières', '31T', 514954, 5551500, 50.1156, 3.20916, 65),
('59390', 'Masny', '31T', 514209, 5577720, 50.3514, 3.19972, 29),
('59391', 'Mastaing', '31T', 521620, 5572896, 50.3078, 3.30362, 40),
('59392', 'Maubeuge', '31T', 569349, 5570278, 50.2806, 3.97334, 136),
('59393', 'Maulde', '31T', 530631, 5594778, 50.5042, 3.43194, 20),
('59394', 'Maurois', '31T', 533333, 5546981, 50.0742, 3.46583, 130),
('59395', 'Mazinghien', '31T', 543214, 5544395, 50.0503, 3.60361, 154),
('59396', 'Mecquignies', '31T', 556468, 5569817, 50.2778, 3.7925, 130),
('59397', 'Merckeghem', '31T', 450404, 5634709, 50.8619, 2.29528, 55),
('59398', 'Mérignies', '31T', 507800, 5594911, 50.5061, 3.11, 43),
('59399', 'Merris', '31T', 476076, 5618342, 50.7164, 2.66112, 25),
('59400', 'Merville', '31T', 474665, 5610410, 50.645, 2.64167, 17),
('59401', 'Méteren', '31T', 478166, 5621051, 50.7408, 2.69056, 50),
('59402', 'Millam', '31T', 447151, 5634000, 50.8553, 2.24917, 10),
('59403', 'Millonfosse', '31T', 527755, 5587256, 50.4367, 3.39083, 17),
('59404', 'Les Moëres', '31T', 468356, 5651652, 51.0156, 2.54888, 5),
('59406', 'Monceau-Saint-Waast', '31T', 561116, 5558038, 50.1714, 3.85583, 137),
('59407', 'Monchaux-sur-Écaillon', '31T', 532533, 5570573, 50.2864, 3.45667, 40),
('59408', 'Moncheaux', '31T', 505541, 5589132, 50.4542, 3.07805, 70),
('59409', 'Monchecourt', '31T', 515015, 5572379, 50.3033, 3.21084, 54),
('59411', 'Mons-en-Pévèle', '31T', 507154, 5592037, 50.4803, 3.10083, 85),
('59412', 'Montay', '31T', 538545, 5551958, 50.1186, 3.53916, 83),
('59413', 'Montigny-en-Cambrésis', '31T', 529249, 5548779, 50.0906, 3.40889, 125),
('59414', 'Montigny-en-Ostrevent', '31T', 513297, 5578891, 50.3619, 3.18695, 25),
('59415', 'Montrécourt', '31T', 532035, 5564609, 50.2328, 3.44917, 50),
('59416', 'Morbecque', '31T', 465743, 5615681, 50.6919, 2.515, 35),
('59418', 'Mortagne-du-Nord', '31T', 532186, 5595003, 50.5061, 3.45389, 15),
('59419', 'Mouchin', '31T', 520834, 5596398, 50.5192, 3.29388, 39),
('59420', 'Moustier-en-Fagne', '31T', 585529, 5550033, 50.0964, 4.19583, 185),
('59421', 'Mouvaux', '31T', 509945, 5616968, 50.7044, 3.14084, 40),
('59422', 'Naves', '31T', 522539, 5561256, 50.2031, 3.31583, 50),
('59423', 'Neuf-Berquin', '31T', 476636, 5612161, 50.6608, 2.66944, 17),
('59424', 'Neuf-Mesnil', '31T', 564715, 5568768, 50.2675, 3.90805, 150),
('59425', 'Neuville-en-Avesnois', '31T', 541396, 5560844, 50.1983, 3.58001, 125),
('59426', 'Neuville-en-Ferrain', '31T', 510700, 5621943, 50.7492, 3.15167, 41),
('59427', 'La Neuville', '31T', 503290, 5593794, 50.4961, 3.04639, 56),
('59428', 'Neuville-Saint-Rémy', '31T', 515944, 5559379, 50.1864, 3.22334, 50),
('59429', 'Neuville-sur-Escaut', '31T', 525183, 5572201, 50.3014, 3.3536, 40),
('59430', 'Neuvilly', '31T', 536422, 5554661, 50.1431, 3.50973, 75),
('59431', 'Nieppe', '31T', 489152, 5616723, 50.7022, 2.84638, 18),
('59432', 'Niergnies', '31T', 518279, 5555031, 50.1472, 3.25584, 90),
('59433', 'Nieurlet', '31T', 449288, 5626596, 50.7889, 2.28055, 8),
('59434', 'Nivelle', '31T', 532350, 5590835, 50.4686, 3.45584, 18),
('59435', 'Nomain', '31T', 517750, 5594163, 50.4992, 3.25027, 46),
('59436', 'Noordpeene', '31T', 457586, 5628468, 50.8064, 2.39805, 25),
('59437', 'Noyelles-lès-Seclin', '31T', 501298, 5602658, 50.5758, 3.01833, 24),
('59438', 'Noyelles-sur-Escaut', '31T', 512923, 5553965, 50.1378, 3.18084, 60),
('59439', 'Noyelles-sur-Sambre', '31T', 557246, 5556388, 50.1569, 3.80139, 136),
('59440', 'Noyelles-sur-Selle', '31T', 527487, 5570576, 50.2867, 3.38584, 36),
('59441', 'Obies', '31T', 555964, 5568761, 50.2683, 3.78527, 150),
('59442', 'Obrechies', '31T', 573120, 5563749, 50.2214, 4.025, 165),
('59443', 'Ochtezeele', '31T', 457791, 5629578, 50.8164, 2.40083, 25),
('59444', 'Odomez', '31T', 538274, 5589422, 50.4556, 3.53917, 25),
('59445', 'Ohain', '31T', 579961, 5543675, 50.04, 4.11667, 250),
('59446', 'Oisy', '31T', 531259, 5578565, 50.3583, 3.43945, 40),
('59447', 'Onnaing', '31T', 541867, 5581480, 50.3839, 3.58889, 30),
('59448', 'Oost-Cappel', '31T', 471712, 5641624, 50.9256, 2.59751, 17),
('59449', 'Orchies', '31T', 517365, 5591351, 50.4739, 3.24471, 29),
('59450', 'Ors', '31T', 545195, 5549971, 50.1003, 3.63194, 138),
('59451', 'Orsinval', '31T', 544599, 5568931, 50.2708, 3.62583, 90),
('59452', 'Ostricourt', '31T', 502031, 5589129, 50.4542, 3.02861, 36),
('59453', 'Oudezeele', '31T', 465498, 5632023, 50.8389, 2.51, 23),
('59454', 'Oxelaëre', '31T', 462877, 5626543, 50.7894, 2.47333, 45),
('59455', 'Paillencourt', '31T', 519468, 5566185, 50.2475, 3.27305, 37),
('59456', 'Pecquencourt', '31T', 515465, 5580751, 50.3786, 3.2175, 20),
('59457', 'Pérenchies', '31T', 497998, 5612913, 50.6681, 2.97167, 33),
('59458', 'Péronne-en-Mélantois', '31T', 511960, 5601868, 50.5686, 3.16888, 32),
('59459', 'Petite-Forêt', '31T', 533759, 5579971, 50.3708, 3.47472, 41),
('59461', 'Petit-Fayt', '31T', 558660, 5550442, 50.1033, 3.82027, 142),
('59462', 'Phalempin', '31T', 501083, 5596141, 50.5172, 3.01528, 30),
('59463', 'Pitgam', '31T', 453031, 5642068, 50.9283, 2.33166, 12),
('59464', 'Poix-du-Nord', '31T', 543623, 5560059, 50.1911, 3.61112, 115),
('59465', 'Pommereuil', '31T', 542740, 5551403, 50.1133, 3.59778, 145),
('59466', 'Pont-à-Marcq', '31T', 508172, 5596518, 50.5206, 3.11528, 37),
('59467', 'Pont-sur-Sambre', '31T', 560178, 5563834, 50.2236, 3.84361, 132),
('59468', 'Potelle', '31T', 547492, 5566454, 50.2483, 3.66612, 110),
('59469', 'Pradelles', '31T', 472143, 5620060, 50.7317, 2.60528, 25),
('59470', 'Prémesques', '31T', 496701, 5611431, 50.6547, 2.95333, 35),
('59471', 'Préseau', '31T', 540803, 5573441, 50.3117, 3.57306, 65),
('59472', 'Preux-au-Bois', '31T', 547216, 5557309, 50.1661, 3.66111, 150),
('59473', 'Preux-au-Sart', '31T', 548960, 5570422, 50.2839, 3.68722, 105),
('59474', 'Prisches', '31T', 555034, 5547654, 50.0786, 3.76917, 175),
('59475', 'Prouvy', '31T', 531917, 5574338, 50.3203, 3.44834, 40),
('59476', 'Proville', '31T', 514801, 5556719, 50.1625, 3.20722, 50),
('59477', 'Provin', '31T', 493619, 5595526, 50.5117, 2.91, 25),
('59478', 'Quaëdypre', '31T', 461706, 5642924, 50.9367, 2.455, 30),
('59479', 'Quarouble', '31T', 544091, 5582363, 50.3917, 3.62028, 28),
('59480', 'Quérénaing', '31T', 536589, 5570662, 50.2869, 3.51361, 89),
('59481', 'Le Quesnoy', '31T', 545294, 5566312, 50.2472, 3.63527, 124),
('59482', 'Quesnoy-sur-Deûle', '31T', 499823, 5617669, 50.7108, 2.99749, 17),
('59483', 'Quiévelon', '31T', 576544, 5565434, 50.2361, 4.07333, 200),
('59484', 'Quiévrechain', '31T', 547383, 5583009, 50.3972, 3.66667, 34),
('59485', 'Quiévy', '31T', 530631, 5557250, 50.1667, 3.42889, 85),
('59486', 'Râches', '31T', 509650, 5585092, 50.4178, 3.13583, 20),
('59487', 'Radinghem-en-Weppes', '31T', 493417, 5607666, 50.6208, 2.90694, 25),
('59488', 'Raillencourt-Sainte-Olle', '31T', 511778, 5559893, 50.1911, 3.165, 70),
('59489', 'Raimbeaucourt', '31T', 507002, 5587651, 50.4408, 3.09861, 25),
('59490', 'Rainsars', '31T', 570963, 5547101, 50.0719, 3.99167, 180),
('59491', 'Raismes', '31T', 534237, 5582569, 50.3942, 3.48167, 25),
('59492', 'Ramillies', '31T', 518553, 5561642, 50.2067, 3.25999, 47),
('59493', 'Ramousies', '31T', 574332, 5552151, 50.1169, 4.03972, 170),
('59494', 'Raucourt-au-Bois', '31T', 547272, 5562159, 50.2097, 3.66249, 140),
('59495', 'Recquignies', '31T', 574253, 5570592, 50.2828, 4.04222, 140),
('59496', 'Rejet-de-Beaulieu', '31T', 545229, 5543578, 50.0428, 3.63166, 144),
('59497', 'Renescure', '31T', 455495, 5619681, 50.7272, 2.36944, 30),
('59498', 'Reumont', '31T', 534420, 5548007, 50.0833, 3.48111, 135),
('59499', 'Rexpoëde', '31T', 467621, 5643068, 50.9383, 2.53917, 20),
('59500', 'Ribécourt-la-Tour', '31T', 509236, 5551085, 50.1119, 3.12917, 75),
('59501', 'Rieulay', '31T', 518091, 5581006, 50.3808, 3.25445, 18),
('59502', 'Rieux-en-Cambrésis', '31T', 525138, 5560989, 50.2006, 3.35223, 50),
('59503', 'Robersart', '31T', 546035, 5556249, 50.1567, 3.64444, 150),
('59505', 'Rombies-et-Marchipont', '31T', 545716, 5579443, 50.3653, 3.64278, 65),
('59506', 'Romeries', '31T', 537882, 5561435, 50.2039, 3.53083, 100),
('59507', 'Ronchin', '31T', 507097, 5605072, 50.5975, 3.10028, 43),
('59508', 'Roncq', '31T', 508661, 5622310, 50.7525, 3.12278, 32),
('59509', 'Roost-Warendin', '31T', 506730, 5585025, 50.4172, 3.09473, 22),
('59511', 'Rosult', '31T', 525494, 5589870, 50.4603, 3.35917, 18),
('59512', 'Roubaix', '31T', 512714, 5615646, 50.6925, 3.18, 32),
('59513', 'Roucourt', '31T', 510498, 5575271, 50.3294, 3.14749, 41),
('59514', 'Rousies', '31T', 571498, 5569380, 50.2722, 4.00333, 140),
('59515', 'Rouvignies', '31T', 531241, 5574982, 50.3261, 3.4389, 29),
('59516', 'Rubrouck', '31T', 454663, 5632138, 50.8392, 2.35611, 35),
('59517', 'Les Rues-des-Vignes', '31T', 516908, 5549189, 50.0947, 3.23639, 80),
('59518', 'Ruesnes', '31T', 541620, 5567641, 50.2594, 3.58389, 100),
('59519', 'Rumegies', '31T', 524670, 5593140, 50.4897, 3.34778, 28),
('59520', 'Rumilly-en-Cambrésis', '31T', 515785, 5552676, 50.1261, 3.22083, 80),
('59521', 'Sailly-lez-Cambrai', '31T', 512571, 5560049, 50.1925, 3.17611, 80),
('59522', 'Sailly-lez-Lannoy', '31T', 515574, 5610464, 50.6458, 3.22028, 38),
('59523', 'Sainghin-en-Mélantois', '31T', 511877, 5604092, 50.5886, 3.16778, 33),
('59524', 'Sainghin-en-Weppes', '31T', 492839, 5601303, 50.5636, 2.89889, 27),
('59525', 'Sains-du-Nord', '31T', 572419, 5549715, 50.0953, 4.0125, 200),
('59526', 'Saint-Amand-les-Eaux', '31T', 530273, 5588505, 50.4478, 3.42639, 17),
('59527', 'Saint-André-lez-Lille', '31T', 503671, 5612296, 50.6625, 3.05194, 20),
('59528', 'Saint-Aubert', '31T', 529654, 5561661, 50.2064, 3.41556, 70),
('59529', 'Saint-Aubin', '31T', 565913, 5558373, 50.1739, 3.92305, 165),
('59530', 'Saint-Aybert', '31T', 546345, 5588807, 50.4494, 3.65278, 18),
('59531', 'Saint-Benin', '31T', 537686, 5547133, 50.0753, 3.52667, 125),
('59532', 'Saint-Georges-sur-l''Aa', '31T', 441370, 5646697, 50.9689, 2.16501, 3),
('59533', 'Saint-Hilaire-lez-Cambrai', '31T', 529510, 5559097, 50.1833, 3.41334, 100),
('59534', 'Saint-Hilaire-sur-Helpe', '31T', 564681, 5553693, 50.1319, 3.90501, 160),
('59535', 'Saint-Jans-Cappel', '31T', 480390, 5623637, 50.7642, 2.72194, 29),
('59536', 'Sainte-Marie-Cappel', '31T', 465301, 5625878, 50.7836, 2.50778, 55),
('59537', 'Saint-Martin-sur-Écaillon', '31T', 537471, 5566313, 50.2478, 3.52556, 70),
('59538', 'Saint-Momelin', '31T', 447197, 5626956, 50.7919, 2.25084, 6),
('59539', 'Saint-Pierre-Brouck', '31T', 442900, 5638617, 50.8964, 2.18806, 3),
('59540', 'Saint-Pol-sur-Mer', '31T', 453737, 5653275, 51.0292, 2.34028, 4),
('59541', 'Saint-Python', '31T', 534522, 5559961, 50.1908, 3.48362, 65),
('59542', 'Saint-Remy-Chaussée', '31T', 562209, 5557895, 50.17, 3.87111, 150),
('59543', 'Saint-Remy-du-Nord', '31T', 564388, 5564779, 50.2317, 3.90278, 149),
('59544', 'Saint-Saulve', '31T', 539270, 5580101, 50.3717, 3.55222, 28),
('59545', 'Saint-Souplet', '31T', 537940, 5544880, 50.055, 3.53, 138),
('59546', 'Saint-Sylvestre-Cappel', '31T', 468547, 5625115, 50.7769, 2.55389, 50),
('59547', 'Saint-Vaast-en-Cambrésis', '31T', 530218, 5560089, 50.1922, 3.42334, 70),
('59548', 'Saint-Waast', '31T', 553071, 5572963, 50.3064, 3.74527, 100),
('59549', 'Salesches', '31T', 541906, 5561434, 50.2036, 3.58722, 115),
('59550', 'Salomé', '31T', 488661, 5598191, 50.5356, 2.84, 28),
('59551', 'Saméon', '31T', 523731, 5591715, 50.4769, 3.33445, 25),
('59552', 'Sancourt', '31T', 513714, 5562708, 50.2164, 3.19222, 55),
('59553', 'Santes', '31T', 496874, 5604944, 50.5964, 2.95583, 22),
('59554', 'Sars-et-Rosières', '31T', 523589, 5588131, 50.4447, 3.33222, 18),
('59555', 'Sars-Poteries', '31T', 573476, 5558070, 50.1703, 4.02889, 174),
('59556', 'Sassegnies', '31T', 557496, 5558924, 50.1797, 3.80528, 144),
('59557', 'Saultain', '31T', 541098, 5576254, 50.3369, 3.57751, 70),
('59558', 'Saulzoir', '31T', 531554, 5565533, 50.2411, 3.4425, 50),
('59559', 'Sebourg', '31T', 545972, 5577221, 50.3453, 3.64611, 80),
('59560', 'Seclin', '31T', 502007, 5599662, 50.5489, 3.02833, 32),
('59562', 'Sémeries', '31T', 571545, 5552607, 50.1214, 4.00083, 154),
('59563', 'Semousies', '31T', 568744, 5557296, 50.1639, 3.9625, 190),
('59564', 'La Sentinelle', '31T', 534266, 5577997, 50.3531, 3.48167, 52),
('59565', 'Sepmeries', '31T', 540135, 5570255, 50.2831, 3.56334, 75),
('59566', 'Sequedin', '31T', 499234, 5607847, 50.6225, 2.98917, 28),
('59567', 'Séranvillers-Forenville', '31T', 520114, 5552505, 50.1244, 3.28139, 100),
('59568', 'Sercus', '31T', 461518, 5617409, 50.7072, 2.45501, 50),
('59569', 'Sin-le-Noble', '31T', 507765, 5578850, 50.3617, 3.10917, 20),
('59570', 'Socx', '31T', 459324, 5642880, 50.9361, 2.42111, 27),
('59571', 'Solesmes', '31T', 535478, 5559319, 50.185, 3.49695, 75),
('59572', 'Solre-le-Château', '31T', 578051, 5558660, 50.175, 4.09306, 190),
('59573', 'Solrinnes', '31T', 576650, 5562223, 50.2072, 4.07416, 170);
INSERT INTO `ods_communes` (`oc_code_insee`, `oc_nom`, `oc_secteur`, `oc_x_utm`, `oc_y_utm`, `oc_latitude`, `oc_longitude`, `oc_altitude`) VALUES
('59574', 'Somain', '31T', 519778, 5578633, 50.3594, 3.27805, 32),
('59575', 'Sommaing', '31T', 535713, 5568555, 50.2681, 3.50111, 50),
('59576', 'Spycker', '31T', 452408, 5646522, 50.9683, 2.32222, 2),
('59577', 'Staple', '31T', 461434, 5622013, 50.7486, 2.45334, 47),
('59578', 'Steenbecque', '31T', 463395, 5613875, 50.6756, 2.48194, 25),
('59579', 'Steene', '31T', 455669, 5644640, 50.9517, 2.36888, 2),
('59580', 'Steenvoorde', '31T', 470545, 5628718, 50.8094, 2.58194, 26),
('59581', 'Steenwerck', '31T', 484189, 5616705, 50.7019, 2.77611, 16),
('59582', 'Strazeele', '31T', 474062, 5619556, 50.7272, 2.6325, 55),
('59583', 'Taisnières-en-Thiérache', '31T', 558130, 5555409, 50.1481, 3.81362, 140),
('59584', 'Taisnières-sur-Hon', '31T', 559324, 5574574, 50.3203, 3.83333, 140),
('59585', 'Templemars', '31T', 503875, 5602041, 50.5703, 3.05472, 34),
('59586', 'Templeuve', '31T', 511991, 5597297, 50.5275, 3.16917, 45),
('59587', 'Terdeghem', '31T', 467641, 5627561, 50.7989, 2.54083, 30),
('59588', 'Téteghem', '31T', 460956, 5652165, 51.0197, 2.44334, 2),
('59589', 'Thiant', '31T', 531868, 5572577, 50.3044, 3.4475, 35),
('59590', 'Thiennes', '31T', 462198, 5611165, 50.6511, 2.46528, 18),
('59591', 'Thivencelle', '31T', 544933, 5587869, 50.4411, 3.63278, 18),
('59592', 'Thumeries', '31T', 503626, 5591910, 50.4792, 3.0511, 65),
('59593', 'Thun-l''Évêque', '31T', 520428, 5563903, 50.2269, 3.28639, 45),
('59594', 'Thun-Saint-Amand', '31T', 532578, 5592102, 50.48, 3.45916, 18),
('59595', 'Thun-Saint-Martin', '31T', 521103, 5563566, 50.2239, 3.29584, 39),
('59596', 'Tilloy-lez-Marchiennes', '31T', 522691, 5585996, 50.4256, 3.31945, 18),
('59597', 'Tilloy-lez-Cambrai', '31T', 515623, 5560551, 50.1969, 3.21889, 65),
('59598', 'Toufflers', '31T', 516276, 5612134, 50.6608, 3.23028, 34),
('59599', 'Tourcoing', '31T', 511392, 5618856, 50.7214, 3.16139, 38),
('59600', 'Tourmignies', '31T', 505889, 5595063, 50.5075, 3.08305, 38),
('59601', 'Trélon', '31T', 578875, 5545791, 50.0592, 4.10194, 200),
('59602', 'Tressin', '31T', 513619, 5607185, 50.6164, 3.1925, 25),
('59603', 'Trith-Saint-Léger', '31T', 534579, 5575528, 50.3308, 3.48584, 25),
('59604', 'Troisvilles', '31T', 533630, 5550380, 50.1047, 3.47028, 125),
('59605', 'Uxem', '31T', 463781, 5652207, 51.0203, 2.48361, 5),
('59606', 'Valenciennes', '31T', 537304, 5578728, 50.3594, 3.52444, 22),
('59607', 'Vendegies-au-Bois', '31T', 541212, 5558896, 50.1808, 3.57722, 125),
('59608', 'Vendegies-sur-Écaillon', '31T', 536430, 5567973, 50.2628, 3.51112, 50),
('59609', 'Vendeville', '31T', 505507, 5602691, 50.5761, 3.07777, 42),
('59610', 'Verchain-Maugré', '31T', 533972, 5568389, 50.2667, 3.47667, 50),
('59611', 'Verlinghem', '31T', 499627, 5614395, 50.6814, 2.99472, 25),
('59612', 'Vertain', '31T', 537519, 5562297, 50.2117, 3.52583, 100),
('59613', 'Vicq', '31T', 542932, 5584115, 50.4075, 3.60417, 20),
('59614', 'Viesly', '31T', 533279, 5555690, 50.1525, 3.46583, 105),
('59615', 'Vieux-Berquin', '31T', 474947, 5616000, 50.6953, 2.64528, 17),
('59616', 'Vieux-Condé', '31T', 540200, 5590240, 50.4628, 3.56638, 25),
('59617', 'Vieux-Mesnil', '31T', 561407, 5567215, 50.2539, 3.86139, 147),
('59618', 'Vieux-Reng', '31T', 574533, 5576002, 50.3314, 4.04722, 130),
('59619', 'Villereau', '31T', 547286, 5567255, 50.2556, 3.66333, 110),
('59620', 'Villers-au-Tertre', '31T', 512938, 5572311, 50.3028, 3.18167, 75),
('59622', 'Villers-en-Cauchies', '31T', 528651, 5563910, 50.2267, 3.40167, 75),
('59623', 'Villers-Guislain', '31T', 511139, 5543059, 50.0397, 3.15556, 125),
('59624', 'Villers-Outréaux', '31T', 521524, 5542534, 50.0347, 3.30055, 130),
('59625', 'Villers-Plouich', '31T', 509540, 5547349, 50.0783, 3.13333, 100),
('59626', 'Villers-Pol', '31T', 543933, 5570501, 50.285, 3.61667, 90),
('59627', 'Villers-Sire-Nicole', '31T', 572269, 5576773, 50.3386, 4.01556, 126),
('59628', 'Volckerinckhove', '31T', 451122, 5632077, 50.8383, 2.30584, 27),
('59629', 'Vred', '31T', 516487, 5582360, 50.3931, 3.23195, 17),
('59630', 'Wahagnies', '31T', 502443, 5592743, 50.4867, 3.03444, 47),
('59631', 'Walincourt-Selvigny', '31T', 523994, 5546282, 50.0683, 3.33527, 125),
('59632', 'Wallers', '31T', 527891, 5580214, 50.3733, 3.39222, 19),
('59633', 'Wallers-Trélon', '31T', 584294, 5546460, 50.0644, 4.17778, 195),
('59634', 'Wallon-Cappel', '31T', 462886, 5619562, 50.7267, 2.47416, 52),
('59635', 'Wambaix', '31T', 521819, 5553099, 50.1297, 3.30527, 105),
('59636', 'Wambrechies', '31T', 503179, 5614921, 50.6861, 3.045, 19),
('59637', 'Wandignies-Hamage', '31T', 522289, 5583153, 50.4, 3.31362, 18),
('59638', 'Wannehain', '31T', 519022, 5602136, 50.5708, 3.26862, 45),
('59639', 'Wargnies-le-Grand', '31T', 546976, 5573245, 50.3094, 3.65972, 90),
('59640', 'Wargnies-le-Petit', '31T', 547900, 5571678, 50.2953, 3.6725, 102),
('59641', 'Warhem', '31T', 464352, 5647353, 50.9767, 2.49223, 4),
('59642', 'Warlaing', '31T', 523290, 5584331, 50.4106, 3.32778, 17),
('59643', 'Warneton', '31T', 496688, 5621748, 50.7475, 2.95305, 14),
('59645', 'Wasnes-au-Bac', '31T', 518331, 5568775, 50.2708, 3.25723, 41),
('59646', 'Wasquehal', '31T', 509325, 5612797, 50.6669, 3.13195, 20),
('59647', 'Watten', '31T', 444506, 5631710, 50.8344, 2.21194, 5),
('59648', 'Wattignies', '31T', 503225, 5603462, 50.5831, 3.04555, 30),
('59649', 'Wattignies-la-Victoire', '31T', 572198, 5561574, 50.2019, 4.01166, 190),
('59650', 'Wattrelos', '31T', 515359, 5616703, 50.7019, 3.21749, 25),
('59651', 'Wavrechain-sous-Denain', '31T', 529637, 5575375, 50.3297, 3.41639, 31),
('59652', 'Wavrechain-sous-Faulx', '31T', 520289, 5569091, 50.2736, 3.28472, 39),
('59653', 'Wavrin', '31T', 495338, 5602042, 50.5703, 2.93417, 25),
('59654', 'Waziers', '31T', 508708, 5582187, 50.3917, 3.1225, 20),
('59655', 'Wemaers-Cappel', '31T', 460445, 5628631, 50.8081, 2.43861, 35),
('59656', 'Wervicq-Sud', '31T', 503291, 5624466, 50.7719, 3.04667, 15),
('59657', 'West-Cappel', '31T', 465292, 5642126, 50.9297, 2.50611, 23),
('59658', 'Wicres', '31T', 490696, 5602234, 50.5719, 2.86861, 30),
('59659', 'Wignehies', '31T', 571999, 5540999, 50.0169, 4.00499, 167),
('59660', 'Willems', '31T', 516660, 5608645, 50.6294, 3.23555, 37),
('59661', 'Willies', '31T', 578693, 5552769, 50.1219, 4.10083, 180),
('59662', 'Winnezeele', '31T', 468276, 5632191, 50.8406, 2.54944, 24),
('59663', 'Wormhout', '31T', 462540, 5636801, 50.8817, 2.4675, 15),
('59664', 'Wulverdinghe', '31T', 447477, 5631433, 50.8322, 2.25417, 65),
('59665', 'Wylder', '31T', 464399, 5640093, 50.9114, 2.49361, 12),
('59666', 'Zegerscappel', '31T', 456664, 5637526, 50.8878, 2.38389, 25),
('59667', 'Zermezeele', '31T', 461261, 5630416, 50.8242, 2.45, 37),
('59668', 'Zuydcoote', '31T', 464379, 5656991, 51.0633, 2.49166, 2),
('59669', 'Zuytpeene', '31T', 459651, 5627154, 50.7947, 2.4275, 28),
('59670', 'Don', '31T', 494273, 5599757, 50.5497, 2.91916, 20),
('60001', 'Abancourt', '31T', 410959, 5505792, 49.6981, 1.76527, 210),
('60002', 'Abbecourt', '31T', 438918, 5467323, 49.3556, 2.15888, 108),
('60003', 'Abbeville-Saint-Lucien', '31T', 440024, 5485347, 49.5178, 2.17138, 150),
('60004', 'Achy', '31T', 426254, 5490149, 49.5594, 1.98027, 101),
('60005', 'Acy-en-Multien', '31T', 496756, 5438882, 49.1028, 2.95556, 91),
('60006', 'Les Ageux', '31T', 471030, 5462735, 49.3167, 2.60139, 31),
('60007', 'Agnetz', '31T', 455503, 5470066, 49.3817, 2.38694, 83),
('60008', 'Airion', '31T', 457698, 5474835, 49.4247, 2.41667, 76),
('60009', 'Allonne', '31T', 435532, 5472735, 49.4039, 2.11138, 75),
('60010', 'Amblainville', '31T', 435957, 5450308, 49.2022, 2.12084, 100),
('60011', 'Amy', '31T', 487449, 5500504, 49.6569, 2.8261, 80),
('60012', 'Andeville', '31T', 439264, 5456571, 49.2589, 2.16528, 160),
('60013', 'Angicourt', '31T', 463980, 5462129, 49.3108, 2.50444, 50),
('60014', 'Angivillers', '31T', 463967, 5481616, 49.4861, 2.5025, 121),
('60015', 'Angy', '31T', 451298, 5464265, 49.3292, 2.32972, 50),
('60016', 'Ansacq', '31T', 453553, 5465944, 49.3444, 2.36056, 80),
('60017', 'Ansauvillers', '31T', 455831, 5490539, 49.5658, 2.38917, 145),
('60018', 'Anserville', '31T', 442499, 5452799, 49.2253, 2.21028, 120),
('60019', 'Antheuil-Portes', '31T', 482138, 5482638, 49.4961, 2.75333, 78),
('60020', 'Antilly', '31T', 498906, 5444285, 49.1514, 2.985, 100),
('60021', 'Appilly', '31T', 508494, 5492250, 49.5828, 3.11751, 45),
('60022', 'Apremont', '31T', 464443, 5452491, 49.2242, 2.51167, 80),
('60023', 'Armancourt', '31T', 483225, 5469602, 49.3789, 2.7689, 35),
('60024', 'Arsy', '31T', 476642, 5472128, 49.4014, 2.67806, 70),
('60025', 'Attichy', '31T', 503546, 5473160, 49.4111, 3.04888, 50),
('60026', 'Auchy-la-Montagne', '31T', 436258, 5491660, 49.5742, 2.11834, 176),
('60027', 'Auger-Saint-Vincent', '31T', 486123, 5451806, 49.2189, 2.80944, 90),
('60028', 'Aumont-en-Halatte', '31T', 467480, 5453120, 49.23, 2.55333, 92),
('60029', 'Auneuil', '31T', 427100, 5469135, 49.3706, 1.99584, 126),
('60030', 'Auteuil', '31T', 433734, 5465715, 49.3406, 2.08777, 145),
('60031', 'Autheuil-en-Valois', '31T', 504414, 5446912, 49.175, 3.06056, 110),
('60032', 'Autrêches', '31T', 509182, 5476780, 49.4436, 3.12666, 80),
('60033', 'Avilly-Saint-Léonard', '31T', 466404, 5449050, 49.1933, 2.53889, 55),
('60034', 'Avrechy', '31T', 458442, 5477300, 49.4469, 2.42667, 80),
('60035', 'Avricourt', '31T', 490096, 5500406, 49.6561, 2.86278, 75),
('60036', 'Avrigny', '31T', 469514, 5469723, 49.3794, 2.58, 88),
('60038', 'Bachivillers', '31T', 424715, 5459994, 49.2881, 1.96472, 132),
('60039', 'Bacouël', '31T', 455637, 5496409, 49.6186, 2.38583, 90),
('60040', 'Bailleul-le-Soc', '31T', 469416, 5473800, 49.4161, 2.57833, 118),
('60041', 'Bailleul-sur-Thérain', '31T', 443591, 5470454, 49.3842, 2.22278, 55),
('60042', 'Bailleval', '31T', 460678, 5466290, 49.3481, 2.45861, 80),
('60043', 'Bailly', '31T', 497908, 5482671, 49.4967, 2.97111, 41),
('60044', 'Balagny-sur-Thérain', '31T', 451750, 5460555, 49.2958, 2.33639, 45),
('60045', 'Barbery', '31T', 475829, 5452120, 49.2214, 2.66806, 94),
('60046', 'Bargny', '31T', 496862, 5447312, 49.1786, 2.95694, 139),
('60047', 'Baron', '31T', 480502, 5446667, 49.1725, 2.7325, 80),
('60048', 'Baugy', '31T', 482187, 5479086, 49.4642, 2.75417, 50),
('60049', 'Bazancourt', '31T', 408607, 5489799, 49.5539, 1.73639, 180),
('60050', 'Bazicourt', '31T', 472579, 5465692, 49.3433, 2.6225, 35),
('60051', 'Beaudéduit', '31T', 432507, 5503411, 49.6794, 2.06444, 175),
('60052', 'Beaugies-sous-Bois', '31T', 507541, 5498487, 49.6389, 3.10444, 100),
('60053', 'Beaulieu-les-Fontaines', '31T', 493745, 5500771, 49.6594, 2.91333, 81),
('60054', 'Beaumont-les-Nonains', '31T', 427784, 5464400, 49.3281, 2.00612, 200),
('60055', 'Beaurains-lès-Noyon', '31T', 497913, 5495394, 49.6111, 2.97111, 70),
('60056', 'Beaurepaire', '31T', 468433, 5460496, 49.2964, 2.56584, 30),
('60057', 'Beauvais', '31T', 433439, 5476251, 49.4353, 2.08195, 67),
('60058', 'Beauvoir', '31T', 451348, 5494685, 49.6028, 2.32667, 155),
('60059', 'Béhéricourt', '31T', 504637, 5493728, 49.5961, 3.06417, 90),
('60060', 'Belle-Église', '31T', 443026, 5448995, 49.1911, 2.21806, 50),
('60061', 'Belloy', '31T', 474998, 5487175, 49.5367, 2.65445, 125),
('60062', 'Berlancourt', '31T', 505031, 5502221, 49.6725, 3.06973, 70),
('60063', 'Berneuil-en-Bray', '31T', 431887, 5466479, 49.3472, 2.06222, 120),
('60064', 'Berneuil-sur-Aisne', '31T', 500423, 5473560, 49.4147, 3.00583, 42),
('60065', 'Berthecourt', '31T', 443797, 5466931, 49.3525, 2.22612, 60),
('60066', 'Béthancourt-en-Valois', '31T', 491233, 5459084, 49.2844, 2.87945, 70),
('60067', 'Béthisy-Saint-Martin', '31T', 486670, 5460266, 49.295, 2.81667, 46),
('60068', 'Béthisy-Saint-Pierre', '31T', 485924, 5460824, 49.3, 2.80639, 60),
('60069', 'Betz', '31T', 496780, 5444811, 49.1561, 2.95584, 98),
('60070', 'Bienville', '31T', 487719, 5477558, 49.4506, 2.83056, 40),
('60071', 'Biermont', '31T', 480723, 5492124, 49.5814, 2.73333, 75),
('60072', 'Bitry', '31T', 505662, 5473471, 49.4139, 3.07806, 55),
('60073', 'Blacourt', '31T', 417517, 5479680, 49.4642, 1.86167, 115),
('60074', 'Blaincourt-lès-Précy', '31T', 453235, 5452297, 49.2217, 2.35777, 56),
('60075', 'Blancfossé', '31T', 442020, 5500892, 49.6578, 2.19667, 120),
('60076', 'Blargies', '31T', 411073, 5502948, 49.6725, 1.7675, 218),
('60077', 'Blicourt', '31T', 431835, 5489737, 49.5564, 2.0575, 125),
('60078', 'Blincourt', '31T', 472259, 5470202, 49.3839, 2.61778, 80),
('60079', 'Boissy-Fresnoy', '31T', 490644, 5445652, 49.1636, 2.87166, 130),
('60080', 'Boissy-le-Bois', '31T', 423063, 5458843, 49.2775, 1.94222, 110),
('60081', 'Bonlier', '31T', 438456, 5479991, 49.4694, 2.15056, 119),
('60082', 'Bonneuil-les-Eaux', '31T', 444930, 5503085, 49.6778, 2.23667, 140),
('60083', 'Bonneuil-en-Valois', '31T', 499394, 5459046, 49.2842, 2.99167, 90),
('60084', 'Bonnières', '31T', 425278, 5484850, 49.5117, 1.96778, 100),
('60085', 'Bonvillers', '31T', 453323, 5493216, 49.5897, 2.35417, 150),
('60086', 'Boran-sur-Oise', '31T', 453266, 5446428, 49.1689, 2.35888, 35),
('60087', 'Borest', '31T', 476031, 5447549, 49.1803, 2.67111, 70),
('60088', 'Bornel', '31T', 442284, 5449683, 49.1972, 2.20777, 50),
('60089', 'Boubiers', '31T', 417797, 5452618, 49.2208, 1.87112, 118),
('60090', 'Bouconvillers', '31T', 420070, 5447551, 49.1756, 1.90333, 115),
('60091', 'Bouillancy', '31T', 494101, 5439842, 49.1114, 2.91917, 120),
('60092', 'Boullarre', '31T', 500405, 5441877, 49.1297, 3.00555, 120),
('60093', 'Boulogne-la-Grasse', '31T', 478730, 5495744, 49.6139, 2.70556, 130),
('60094', 'Boursonne', '31T', 503379, 5449876, 49.2017, 3.04639, 130),
('60095', 'Boury-en-Vexin', '31T', 408143, 5454841, 49.2394, 1.73806, 60),
('60096', 'Boutavent', '31T', 410375, 5499562, 49.6419, 1.75861, 220),
('60097', 'Boutencourt', '31T', 417053, 5463687, 49.3203, 1.85861, 100),
('60098', 'Bouvresse', '31T', 410175, 5500801, 49.6531, 1.75555, 223),
('60099', 'Braisnes', '31T', 483661, 5480687, 49.4786, 2.77445, 46),
('60100', 'Brasseuse', '31T', 476735, 5456007, 49.2564, 2.68028, 102),
('60101', 'Brégy', '31T', 490264, 5436605, 49.0822, 2.86667, 100),
('60102', 'Brenouille', '31T', 466762, 5461463, 49.305, 2.54277, 50),
('60103', 'Bresles', '31T', 445716, 5473304, 49.41, 2.25167, 61),
('60104', 'Breteuil', '31T', 449211, 5498040, 49.6328, 2.29666, 80),
('60105', 'Brétigny', '31T', 508034, 5490582, 49.5678, 3.11111, 40),
('60106', 'Breuil-le-Sec', '31T', 460213, 5468856, 49.3711, 2.45195, 53),
('60107', 'Breuil-le-Vert', '31T', 459156, 5467783, 49.3614, 2.4375, 60),
('60108', 'Briot', '31T', 422339, 5500180, 49.6492, 1.92416, 200),
('60109', 'Brombos', '31T', 419728, 5499878, 49.6461, 1.88806, 193),
('60110', 'Broquiers', '31T', 415461, 5501519, 49.6603, 1.82861, 200),
('60111', 'Broyes', '31T', 460761, 5497419, 49.6281, 2.45666, 130),
('60112', 'Brunvillers-la-Motte', '31T', 460458, 5488805, 49.5506, 2.45333, 125),
('60113', 'Bucamps', '31T', 450826, 5485764, 49.5225, 2.32056, 130),
('60114', 'Buicourt', '31T', 414629, 5488126, 49.5397, 1.82, 154),
('60115', 'Bulles', '31T', 451145, 5478750, 49.4594, 2.32583, 90),
('60116', 'Bury', '31T', 452312, 5462495, 49.3133, 2.34388, 49),
('60117', 'Bussy', '31T', 498596, 5496876, 49.6244, 2.98056, 50),
('60118', 'Caisnes', '31T', 505086, 5485390, 49.5211, 3.07027, 69),
('60119', 'Cambronne-lès-Ribécourt', '31T', 492640, 5483849, 49.5072, 2.89834, 65),
('60120', 'Cambronne-lès-Clermont', '31T', 456365, 5464346, 49.3303, 2.39944, 129),
('60121', 'Campagne', '31T', 497172, 5499317, 49.6464, 2.96083, 60),
('60122', 'Campeaux', '31T', 410214, 5497062, 49.6194, 1.75695, 210),
('60123', 'Campremy', '31T', 450392, 5491080, 49.5703, 2.31389, 142),
('60124', 'Candor', '31T', 492397, 5497314, 49.6283, 2.89472, 70),
('60125', 'Canly', '31T', 478913, 5470420, 49.3861, 2.70945, 60),
('60126', 'Cannectancourt', '31T', 493170, 5489407, 49.5572, 2.90556, 67),
('60127', 'Canny-sur-Matz', '31T', 485569, 5494425, 49.6022, 2.80028, 76),
('60128', 'Canny-sur-Thérain', '31T', 407530, 5495007, 49.6006, 1.72028, 164),
('60129', 'Carlepont', '31T', 501950, 5484554, 49.5136, 3.02694, 70),
('60130', 'Catenoy', '31T', 464466, 5468518, 49.3683, 2.51056, 61),
('60131', 'Catheux', '31T', 436481, 5500429, 49.6531, 2.12, 101),
('60132', 'Catigny', '31T', 495628, 5498638, 49.6403, 2.93945, 60),
('60133', 'Catillon-Fumechon', '31T', 454420, 5485239, 49.5181, 2.37027, 150),
('60134', 'Cauffry', '31T', 460068, 5462866, 49.3172, 2.45055, 43),
('60135', 'Cauvigny', '31T', 445394, 5461201, 49.3011, 2.24889, 82),
('60136', 'Cempuis', '31T', 427109, 5501381, 49.6606, 1.99001, 180),
('60137', 'Cernoy', '31T', 466753, 5476471, 49.44, 2.5414, 124),
('60138', 'Chamant', '31T', 471823, 5451954, 49.2197, 2.61306, 75),
('60139', 'Chambly', '31T', 445184, 5446194, 49.1661, 2.24805, 40),
('60140', 'Chambors', '31T', 414062, 5457061, 49.2603, 1.81888, 70),
('60141', 'Chantilly', '31T', 461162, 5449023, 49.1928, 2.46695, 50),
('60142', 'La Chapelle-en-Serval', '31T', 466035, 5441703, 49.1272, 2.53445, 66),
('60143', 'Chaumont-en-Vexin', '31T', 418982, 5457574, 49.2656, 1.88638, 70),
('60144', 'Chavençon', '31T', 426788, 5448754, 49.1872, 1.99527, 140),
('60145', 'Chelles', '31T', 502461, 5466767, 49.3536, 3.03389, 70),
('60146', 'Chepoix', '31T', 455245, 5495022, 49.6061, 2.38056, 100),
('60147', 'Chevincourt', '31T', 488718, 5483670, 49.5056, 2.84417, 50),
('60148', 'Chèvreville', '31T', 489012, 5439572, 49.1089, 2.84944, 120),
('60149', 'Chevrières', '31T', 477020, 5466073, 49.3469, 2.68362, 35),
('60150', 'Chiry-Ourscamp', '31T', 496262, 5488107, 49.5456, 2.94833, 60),
('60151', 'Choisy-au-Bac', '31T', 491260, 5476161, 49.4381, 2.87945, 40),
('60152', 'Choisy-la-Victoire', '31T', 470018, 5469658, 49.3789, 2.58695, 80),
('60153', 'Choqueuse-les-Bénards', '31T', 433773, 5500368, 49.6522, 2.0825, 164),
('60154', 'Cinqueux', '31T', 465559, 5462767, 49.3167, 2.52611, 48),
('60155', 'Cires-lès-Mello', '31T', 453123, 5458134, 49.2742, 2.35555, 36),
('60156', 'Clairoix', '31T', 488844, 5476660, 49.4425, 2.84611, 40),
('60157', 'Clermont', '31T', 457416, 5469680, 49.3783, 2.41334, 130),
('60158', 'Coivrel', '31T', 467974, 5489033, 49.5531, 2.55722, 140),
('60159', 'Compiègne', '31T', 487367, 5473358, 49.4128, 2.82584, 50),
('60160', 'Conchy-les-Pots', '31T', 480573, 5494872, 49.6061, 2.73112, 100),
('60161', 'Conteville', '31T', 431484, 5500181, 49.6503, 2.05083, 174),
('60162', 'Corbeil-Cerf', '31T', 434782, 5458815, 49.2786, 2.10333, 170),
('60163', 'Cormeilles', '31T', 441818, 5498886, 49.6397, 2.19416, 160),
('60164', 'Le Coudray-Saint-Germer', '31T', 415835, 5473744, 49.4106, 1.83972, 220),
('60165', 'Le Coudray-sur-Thelle', '31T', 436312, 5461731, 49.305, 2.12389, 207),
('60166', 'Coudun', '31T', 486594, 5478703, 49.4608, 2.815, 45),
('60167', 'Couloisy', '31T', 502116, 5471831, 49.3992, 3.02916, 40),
('60168', 'Courcelles-Epayelles', '31T', 473145, 5490550, 49.5669, 2.62861, 88),
('60169', 'Courcelles-lès-Gisors', '31T', 408459, 5456843, 49.2575, 1.74194, 90),
('60170', 'Courteuil', '31T', 466105, 5449793, 49.2, 2.53472, 50),
('60171', 'Courtieux', '31T', 506471, 5470630, 49.3883, 3.08917, 50),
('60172', 'Coye-la-Forêt', '31T', 461386, 5443432, 49.1425, 2.47056, 40),
('60173', 'Cramoisy', '31T', 456501, 5456007, 49.2553, 2.40222, 79),
('60174', 'Crapeaumesnil', '31T', 485440, 5498687, 49.6406, 2.79834, 86),
('60175', 'Creil', '31T', 462102, 5456243, 49.2578, 2.47917, 40),
('60176', 'Crépy-en-Valois', '31T', 491810, 5453586, 49.235, 2.8875, 92),
('60177', 'Cressonsacq', '31T', 468556, 5478406, 49.4575, 2.56611, 100),
('60180', 'Crillon', '31T', 422778, 5485873, 49.5206, 1.93305, 100),
('60181', 'Crisolles', '31T', 501023, 5496629, 49.6222, 3.01416, 70),
('60182', 'Le Crocq', '31T', 440780, 5497446, 49.6267, 2.18001, 180),
('60183', 'Croissy-sur-Celle', '31T', 440244, 5505328, 49.6975, 2.17138, 80),
('60184', 'Croutoy', '31T', 502943, 5470442, 49.3867, 3.04055, 128),
('60185', 'Crouy-en-Thelle', '31T', 450760, 5451484, 49.2142, 2.32389, 120),
('60186', 'Cuignières', '31T', 461627, 5477802, 49.4517, 2.47056, 140),
('60187', 'Cuigy-en-Bray', '31T', 414994, 5475425, 49.4256, 1.82777, 142),
('60188', 'Cuise-la-Motte', '31T', 500625, 5470441, 49.3867, 3.00861, 46),
('60189', 'Cuts', '31T', 507256, 5486751, 49.5333, 3.10028, 81),
('60190', 'Cuvergnon', '31T', 499210, 5446787, 49.1739, 2.98916, 135),
('60191', 'Cuvilly', '31T', 478342, 5489199, 49.555, 2.70055, 79),
('60192', 'Cuy', '31T', 492892, 5492464, 49.5847, 2.90166, 90),
('60193', 'Daméraucourt', '31T', 422693, 5506662, 49.7075, 1.92778, 180),
('60194', 'Dargies', '31T', 427331, 5506011, 49.7022, 1.99222, 180),
('60195', 'Delincourt', '31T', 415065, 5455193, 49.2436, 1.83306, 82),
('60196', 'Le Déluge', '31T', 435431, 5460722, 49.2958, 2.11194, 200),
('60197', 'Dieudonné', '31T', 445194, 5453297, 49.23, 2.24722, 90),
('60198', 'Dives', '31T', 491889, 5492898, 49.5886, 2.88778, 54),
('60199', 'Doméliers', '31T', 439664, 5498138, 49.6328, 2.16445, 80),
('60200', 'Domfront', '31T', 468067, 5494561, 49.6028, 2.55806, 70),
('60201', 'Dompierre', '31T', 466435, 5493613, 49.5942, 2.53555, 100),
('60203', 'Duvy', '31T', 489384, 5453621, 49.2353, 2.85417, 71),
('60204', 'Écuvilly', '31T', 494205, 5499659, 49.6494, 2.91972, 65),
('60205', 'Élencourt', '31T', 420454, 5505613, 49.6978, 1.89695, 170),
('60206', 'Élincourt-Sainte-Marguerite', '31T', 486813, 5485960, 49.5261, 2.81778, 83),
('60207', 'Éméville', '31T', 502060, 5459139, 49.285, 3.02833, 140),
('60208', 'Énencourt-Léage', '31T', 416136, 5461817, 49.3033, 1.84638, 80),
('60209', 'Énencourt-le-Sec', '31T', 421681, 5461118, 49.2978, 1.92278, 112),
('60210', 'Épineuse', '31T', 467651, 5471679, 49.3969, 2.55417, 115),
('60211', 'Éragny-sur-Epte', '31T', 411067, 5463101, 49.3142, 1.77639, 60),
('60212', 'Ercuis', '31T', 449506, 5453719, 49.2342, 2.30639, 145),
('60213', 'Ermenonville', '31T', 477991, 5441395, 49.125, 2.69834, 102),
('60214', 'Ernemont-Boutavent', '31T', 413872, 5493605, 49.5889, 1.80834, 170),
('60215', 'Erquery', '31T', 460686, 5472960, 49.4081, 2.45806, 100),
('60216', 'Erquinvillers', '31T', 462094, 5478478, 49.4578, 2.47694, 130),
('60217', 'Escames', '31T', 413246, 5489599, 49.5528, 1.80056, 130),
('60218', 'Esches', '31T', 439314, 5451969, 49.2175, 2.16667, 70),
('60219', 'Escles-Saint-Pierre', '31T', 413841, 5510595, 49.7417, 1.80417, 210),
('60220', 'Espaubourg', '31T', 417848, 5474949, 49.4217, 1.86722, 130),
('60221', 'Esquennoy', '31T', 447252, 5500715, 49.6567, 2.26917, 110),
('60222', 'Essuiles', '31T', 448910, 5480902, 49.4786, 2.29472, 89),
('60223', 'Estrées-Saint-Denis', '31T', 474076, 5475011, 49.4272, 2.6425, 70),
('60224', 'Étavigny', '31T', 498622, 5440672, 49.1189, 2.98112, 135),
('60225', 'Étouy', '31T', 453725, 5474373, 49.4203, 2.36194, 80),
('60226', 'Ève', '31T', 478522, 5437410, 49.0892, 2.70583, 100),
('60227', 'Évricourt', '31T', 493030, 5490673, 49.5686, 2.9036, 50),
('60228', 'Fay-les-Étangs', '31T', 422752, 5455419, 49.2467, 1.93861, 73),
('60229', 'Le Fayel', '31T', 478221, 5468848, 49.3719, 2.7, 60),
('60230', 'Le Fay-Saint-Quentin', '31T', 445822, 5477905, 49.4514, 2.2525, 107),
('60231', 'Feigneux', '31T', 495028, 5456207, 49.2586, 2.93167, 101),
('60232', 'Ferrières', '31T', 464906, 5493067, 49.5892, 2.51444, 120),
('60233', 'Feuquières', '31T', 416701, 5500017, 49.6469, 1.84611, 195),
('60234', 'Fitz-James', '31T', 458776, 5470967, 49.39, 2.43194, 60),
('60235', 'Flavacourt', '31T', 414354, 5465366, 49.335, 1.82111, 92),
('60236', 'Flavy-le-Meldeux', '31T', 503146, 5503671, 49.6856, 3.04361, 85),
('60237', 'Fléchy', '31T', 444547, 5500989, 49.6589, 2.23166, 125),
('60238', 'Fleurines', '31T', 469925, 5456441, 49.26, 2.58666, 112),
('60239', 'Fleury', '31T', 425109, 5454800, 49.2414, 1.97111, 82),
('60240', 'Fontaine-Bonneleau', '31T', 438696, 5501268, 49.6608, 2.15056, 87),
('60241', 'Fontaine-Chaalis', '31T', 477100, 5446587, 49.1717, 2.68583, 70),
('60242', 'Fontaine-Lavaganne', '31T', 424305, 5494407, 49.5975, 1.95251, 160),
('60243', 'Fontaine-Saint-Lucien', '31T', 438437, 5483635, 49.5022, 2.14973, 109),
('60244', 'Fontenay-Torcy', '31T', 410865, 5491491, 49.5694, 1.76722, 140),
('60245', 'Formerie', '31T', 408425, 5500490, 49.65, 1.73139, 220),
('60246', 'Fosseuse', '31T', 441026, 5451240, 49.2111, 2.19028, 60),
('60247', 'Fouilleuse', '31T', 466423, 5475207, 49.4286, 2.53695, 140),
('60248', 'Fouilloy', '31T', 415565, 5509487, 49.7319, 1.82833, 208),
('60249', 'Foulangues', '31T', 450234, 5458221, 49.2747, 2.31583, 80),
('60250', 'Fouquenies', '31T', 430919, 5479246, 49.4619, 2.04667, 100),
('60251', 'Fouquerolles', '31T', 443209, 5478364, 49.4553, 2.21639, 106),
('60252', 'Fournival', '31T', 455318, 5479518, 49.4667, 2.38333, 140),
('60253', 'Francastel', '31T', 438507, 5493425, 49.5903, 2.14917, 180),
('60254', 'Francières', '31T', 476785, 5477408, 49.4489, 2.67972, 86),
('60255', 'Fréniches', '31T', 500281, 5502126, 49.6717, 3.00389, 100),
('60256', 'Fresneaux-Montchevreuil', '31T', 427553, 5459122, 49.2806, 2.0039, 110),
('60257', 'Fresne-Léguillon', '31T', 426240, 5456205, 49.2542, 1.98638, 90),
('60258', 'Fresnières', '31T', 486457, 5496615, 49.6219, 2.8125, 80),
('60259', 'Fresnoy-en-Thelle', '31T', 446943, 5450037, 49.2008, 2.27167, 97),
('60260', 'Fresnoy-la-Rivière', '31T', 493960, 5458864, 49.2825, 2.91695, 61),
('60261', 'Fresnoy-le-Luat', '31T', 483309, 5450888, 49.2106, 2.77083, 107),
('60262', 'Le Frestoy-Vaux', '31T', 471414, 5493616, 49.5944, 2.60444, 90),
('60263', 'Frétoy-le-Château', '31T', 498717, 5500798, 49.6597, 2.98222, 80),
('60264', 'Frocourt', '31T', 433568, 5470350, 49.3822, 2.08472, 87),
('60265', 'Froissy', '31T', 443758, 5490589, 49.5653, 2.22222, 160),
('60267', 'Le Gallet', '31T', 435584, 5497505, 49.6267, 2.10806, 172),
('60268', 'Gannes', '31T', 458304, 5490952, 49.5697, 2.42333, 130),
('60269', 'Gaudechart', '31T', 425095, 5496404, 49.6156, 1.96306, 180),
('60270', 'Genvry', '31T', 499358, 5495425, 49.6114, 2.99111, 50),
('60271', 'Gerberoy', '31T', 416793, 5487660, 49.5358, 1.85, 170),
('60272', 'Gilocourt', '31T', 491295, 5459979, 49.2925, 2.88028, 70),
('60273', 'Giraumont', '31T', 486919, 5479845, 49.4711, 2.81945, 80),
('60274', 'Glaignes', '31T', 488987, 5457606, 49.2711, 2.84861, 70),
('60275', 'Glatigny', '31T', 420064, 5483132, 49.4956, 1.89612, 203),
('60276', 'Godenvillers', '31T', 467697, 5493019, 49.5889, 2.55306, 90),
('60277', 'Goincourt', '31T', 430222, 5475179, 49.4253, 2.03777, 70),
('60278', 'Golancourt', '31T', 504646, 5506174, 49.7081, 3.06444, 67),
('60279', 'Gondreville', '31T', 496723, 5451512, 49.2164, 2.955, 145),
('60280', 'Gourchelles', '31T', 412140, 5509417, 49.7308, 1.78083, 171),
('60281', 'Gournay-sur-Aronde', '31T', 476545, 5482319, 49.4931, 2.67612, 55),
('60282', 'Gouvieux', '31T', 457493, 5448309, 49.1861, 2.41667, 36),
('60283', 'Gouy-les-Groseillers', '31T', 443565, 5504860, 49.6936, 2.2175, 120),
('60284', 'Grandfresnoy', '31T', 474994, 5468645, 49.37, 2.65556, 90),
('60285', 'Grandvillers-aux-Bois', '31T', 471313, 5478299, 49.4567, 2.60416, 80),
('60286', 'Grandvilliers', '31T', 423525, 5501770, 49.6636, 1.94028, 194),
('60287', 'Grandrû', '31T', 506262, 5494903, 49.6067, 3.08667, 69),
('60288', 'Grémévillers', '31T', 420276, 5490758, 49.5642, 1.8975, 170),
('60289', 'Grez', '31T', 426314, 5498951, 49.6386, 1.97945, 181),
('60290', 'Guignecourt', '31T', 436881, 5481337, 49.4814, 2.12861, 100),
('60291', 'Guiscard', '31T', 503729, 5500429, 49.6564, 3.05167, 60),
('60292', 'Gury', '31T', 485600, 5490904, 49.5706, 2.80084, 110),
('60293', 'Hadancourt-le-Haut-Clocher', '31T', 416684, 5448589, 49.1844, 1.85667, 136),
('60294', 'Hainvillers', '31T', 477194, 5493341, 49.5922, 2.68444, 110),
('60295', 'Halloy', '31T', 423449, 5500659, 49.6536, 1.93944, 191),
('60296', 'Hannaches', '31T', 413730, 5483414, 49.4972, 1.8086, 150),
('60297', 'Le Hamel', '31T', 427210, 5499958, 49.6478, 1.99167, 180),
('60298', 'Hanvoile', '31T', 419005, 5485032, 49.5125, 1.88111, 140),
('60299', 'Hardivillers', '31T', 443837, 5496302, 49.6167, 2.2225, 170),
('60300', 'Hardivillers-en-Vexin', '31T', 422883, 5461842, 49.3044, 1.93917, 150),
('60301', 'Haucourt', '31T', 423389, 5485000, 49.5128, 1.94166, 100),
('60302', 'Haudivillers', '31T', 445236, 5481740, 49.4858, 2.24389, 130),
('60303', 'Hautbos', '31T', 418474, 5497859, 49.6278, 1.87111, 187),
('60304', 'Haute-Épine', '31T', 428559, 5492774, 49.5833, 2.01166, 180),
('60305', 'Hautefontaine', '31T', 504659, 5468035, 49.365, 3.06417, 80),
('60306', 'Hécourt', '31T', 410333, 5486033, 49.5203, 1.76111, 130),
('60307', 'Heilles', '31T', 446419, 5464835, 49.3339, 2.2625, 47),
('60308', 'Hémévillers', '31T', 476450, 5479046, 49.4636, 2.675, 80),
('60309', 'Hénonville', '31T', 431045, 5450831, 49.2064, 2.05333, 90),
('60310', 'Herchies', '31T', 428256, 5481937, 49.4858, 2.00944, 90),
('60311', 'La Hérelle', '31T', 457740, 5493242, 49.5903, 2.41528, 110),
('60312', 'Héricourt-sur-Thérain', '31T', 410484, 5492764, 49.5808, 1.76166, 160),
('60313', 'Hermes', '31T', 445334, 5467378, 49.3567, 2.24722, 50),
('60314', 'Hétomesnil', '31T', 430228, 5497571, 49.6267, 2.0339, 180),
('60315', 'Hodenc-en-Bray', '31T', 420257, 5479824, 49.4658, 1.89945, 120),
('60316', 'Hodenc-l''Évêque', '31T', 438310, 5465260, 49.3369, 2.15083, 142),
('60317', 'Hondainville', '31T', 449190, 5465457, 49.3397, 2.30056, 43),
('60318', 'Houdancourt', '31T', 474012, 5465747, 49.3439, 2.64222, 36),
('60319', 'La Houssoye', '31T', 423225, 5467551, 49.3558, 1.94278, 225),
('60320', 'Ivors', '31T', 501234, 5449782, 49.2008, 3.01694, 100),
('60321', 'Ivry-le-Temple', '31T', 429437, 5453229, 49.2278, 2.03083, 82),
('60322', 'Jaméricourt', '31T', 418519, 5461781, 49.3033, 1.87916, 110),
('60323', 'Janville', '31T', 489753, 5478109, 49.4556, 2.85861, 50),
('60324', 'Jaulzy', '31T', 504515, 5471184, 49.3933, 3.06222, 70),
('60325', 'Jaux', '31T', 483813, 5470867, 49.3903, 2.77694, 36),
('60326', 'Jonquières', '31T', 480386, 5470847, 49.39, 2.72972, 100),
('60327', 'Jouy-sous-Thelle', '31T', 425224, 5463199, 49.3169, 1.97111, 170),
('60328', 'Juvignies', '31T', 433955, 5485603, 49.5194, 2.0875, 150),
('60329', 'Laberlière', '31T', 482831, 5491931, 49.5797, 2.7625, 70),
('60330', 'Laboissière-en-Thelle', '31T', 438876, 5459849, 49.2883, 2.15945, 190),
('60331', 'Labosse', '31T', 420124, 5466576, 49.3467, 1.90028, 120),
('60332', 'Labruyère', '31T', 464372, 5466542, 49.3506, 2.50944, 55),
('60333', 'Lachapelle-aux-Pots', '31T', 420491, 5477937, 49.4489, 1.90306, 110),
('60334', 'Lachapelle-Saint-Pierre', '31T', 444307, 5457537, 49.2681, 2.23445, 186),
('60335', 'Lachapelle-sous-Gerberoy', '31T', 418242, 5487793, 49.5372, 1.87, 111),
('60336', 'Lachaussée-du-Bois-d''Écu', '31T', 440317, 5490070, 49.5603, 2.17472, 160),
('60337', 'Lachelle', '31T', 480730, 5476960, 49.445, 2.73417, 55),
('60338', 'Lacroix-Saint-Ouen', '31T', 484467, 5466881, 49.3544, 2.78611, 36),
('60339', 'Lafraye', '31T', 442872, 5482691, 49.4942, 2.21111, 140),
('60340', 'Lagny', '31T', 493900, 5495799, 49.6147, 2.91556, 90),
('60341', 'Lagny-le-Sec', '31T', 481442, 5437152, 49.0869, 2.74583, 105),
('60342', 'Laigneville', '31T', 459746, 5460243, 49.2936, 2.44639, 40),
('60343', 'Lalande-en-Son', '31T', 411589, 5471649, 49.3911, 1.78167, 180),
('60344', 'Lalandelle', '31T', 418516, 5472437, 49.3992, 1.87694, 220),
('60345', 'Lamécourt', '31T', 461429, 5475487, 49.4308, 2.46806, 90),
('60346', 'Lamorlaye', '31T', 459432, 5445052, 49.1569, 2.44361, 36),
('60347', 'Lannoy-Cuillère', '31T', 409410, 5506590, 49.705, 1.74362, 180),
('60348', 'Larbroye', '31T', 497389, 5491225, 49.5736, 2.96389, 80),
('60350', 'Lassigny', '31T', 488576, 5492781, 49.5875, 2.84194, 80),
('60351', 'Lataule', '31T', 476768, 5487476, 49.5394, 2.67889, 125),
('60352', 'Lattainville', '31T', 413827, 5454903, 49.2408, 1.81612, 110),
('60353', 'Lavacquerie', '31T', 434573, 5503509, 49.6806, 2.09306, 180),
('60354', 'Laverrière', '31T', 428771, 5504324, 49.6872, 2.0125, 170),
('60355', 'Laversines', '31T', 441485, 5475324, 49.4278, 2.19305, 70),
('60356', 'Lavilletertre', '31T', 422085, 5449684, 49.195, 1.93056, 110),
('60357', 'Léglantiers', '31T', 466348, 5482743, 49.4964, 2.53528, 106),
('60358', 'Lévignen', '31T', 493807, 5449322, 49.1967, 2.91499, 131),
('60359', 'Lhéraule', '31T', 422663, 5482014, 49.4858, 1.93222, 140),
('60360', 'Liancourt', '31T', 461168, 5464248, 49.3297, 2.46555, 59),
('60361', 'Liancourt-Saint-Pierre', '31T', 420692, 5454182, 49.2353, 1.91056, 90),
('60362', 'Libermont', '31T', 498157, 5504628, 49.6942, 2.97445, 65),
('60363', 'Lierville', '31T', 418715, 5449022, 49.1886, 1.88445, 110),
('60364', 'Lieuvillers', '31T', 463633, 5479827, 49.47, 2.49805, 120),
('60365', 'Lihus', '31T', 430919, 5495184, 49.6053, 2.04388, 179),
('60366', 'Litz', '31T', 451486, 5474115, 49.4178, 2.3311, 77),
('60367', 'Loconville', '31T', 421372, 5456489, 49.2561, 1.91944, 72),
('60368', 'Longueil-Annel', '31T', 490038, 5479776, 49.4706, 2.8625, 40),
('60369', 'Longueil-Sainte-Marie', '31T', 479259, 5465910, 49.3456, 2.71445, 42),
('60370', 'Lormaison', '31T', 435015, 5456280, 49.2558, 2.10694, 140),
('60371', 'Loueuse', '31T', 415233, 5494603, 49.5981, 1.82695, 195),
('60372', 'Luchy', '31T', 436233, 5489560, 49.5553, 2.11833, 167),
('60373', 'Machemont', '31T', 490928, 5482709, 49.4969, 2.87472, 60),
('60374', 'Maignelay-Montigny', '31T', 465362, 5488988, 49.5525, 2.52111, 122),
('60375', 'Maimbeville', '31T', 465285, 5473639, 49.4144, 2.52139, 129),
('60376', 'Maisoncelle-Saint-Pierre', '31T', 436859, 5484642, 49.5111, 2.12778, 147),
('60377', 'Maisoncelle-Tuilerie', '31T', 443564, 5493185, 49.5886, 2.21916, 160),
('60378', 'Marest-sur-Matz', '31T', 487391, 5484136, 49.5097, 2.82583, 50),
('60379', 'Mareuil-la-Motte', '31T', 484889, 5488126, 49.5456, 2.79111, 80),
('60380', 'Mareuil-sur-Ourcq', '31T', 505815, 5442806, 49.1381, 3.07972, 70),
('60381', 'Margny-aux-Cerises', '31T', 490440, 5502567, 49.6756, 2.8675, 85),
('60382', 'Margny-lès-Compiègne', '31T', 486846, 5474811, 49.4258, 2.81861, 50),
('60383', 'Margny-sur-Matz', '31T', 483997, 5485504, 49.5219, 2.77889, 55),
('60385', 'Marolles', '31T', 507552, 5446452, 49.1708, 3.10361, 80),
('60386', 'Marquéglise', '31T', 482849, 5484983, 49.5172, 2.76305, 55),
('60387', 'Marseille-en-Beauvaisis', '31T', 424650, 5491839, 49.5744, 1.95777, 130),
('60388', 'Martincourt', '31T', 420573, 5486368, 49.5247, 1.90249, 100),
('60389', 'Maucourt', '31T', 505375, 5498207, 49.6364, 3.07444, 106),
('60390', 'Maulers', '31T', 439857, 5488437, 49.5456, 2.16861, 140),
('60391', 'Maysel', '31T', 454503, 5456455, 49.2592, 2.37472, 40),
('60392', 'Mélicocq', '31T', 489560, 5482464, 49.4947, 2.85583, 50),
('60393', 'Mello', '31T', 453747, 5457851, 49.2717, 2.36416, 35),
('60394', 'Ménévillers', '31T', 471452, 5485555, 49.5219, 2.60556, 100),
('60395', 'Méru', '31T', 437235, 5454123, 49.2367, 2.13778, 90),
('60396', 'Méry-la-Bataille', '31T', 473175, 5488357, 49.5472, 2.62917, 121),
('60397', 'Le Mesnil-Conteville', '31T', 432193, 5502365, 49.67, 2.06027, 170),
('60398', 'Le Mesnil-en-Thelle', '31T', 448032, 5447525, 49.1783, 2.28694, 50),
('60399', 'Le Mesnil-Saint-Firmin', '31T', 457372, 5497537, 49.6289, 2.40972, 155),
('60400', 'Le Mesnil-sur-Bulles', '31T', 452639, 5481610, 49.4853, 2.3461, 148),
('60401', 'Le Mesnil-Théribus', '31T', 426251, 5461486, 49.3017, 1.98556, 150),
('60402', 'Le Meux', '31T', 481446, 5468373, 49.3678, 2.74444, 51),
('60403', 'Milly-sur-Thérain', '31T', 427904, 5484228, 49.5064, 2.00417, 82),
('60404', 'Mogneville', '31T', 461641, 5462546, 49.3144, 2.47223, 50),
('60405', 'Moliens', '31T', 414229, 5502218, 49.6664, 1.81139, 210),
('60406', 'Monceaux', '31T', 467518, 5462940, 49.3183, 2.55305, 40),
('60407', 'Monceaux-l''Abbaye', '31T', 412798, 5500511, 49.6508, 1.79195, 200),
('60408', 'Monchy-Humières', '31T', 481887, 5479797, 49.4706, 2.75, 65),
('60409', 'Monchy-Saint-Éloi', '31T', 460896, 5460081, 49.2922, 2.46222, 35),
('60410', 'Mondescourt', '31T', 508210, 5493949, 49.5981, 3.11361, 52),
('60411', 'Monneville', '31T', 425481, 5450872, 49.2061, 1.97695, 140),
('60412', 'Montagny-en-Vexin', '31T', 412674, 5449825, 49.195, 1.80139, 135),
('60413', 'Montagny-Sainte-Félicité', '31T', 480911, 5441848, 49.1292, 2.73834, 110),
('60414', 'Montataire', '31T', 458605, 5456237, 49.2575, 2.43111, 40),
('60415', 'Montépilloy', '31T', 477987, 5450690, 49.2086, 2.69778, 134),
('60416', 'Montgérain', '31T', 469371, 5487234, 49.5369, 2.57667, 120),
('60417', 'Montherlant', '31T', 430902, 5458739, 49.2775, 2.05, 146),
('60418', 'Montiers', '31T', 469307, 5483035, 49.4992, 2.57611, 80),
('60420', 'Montjavoult', '31T', 411557, 5452097, 49.2153, 1.78556, 200),
('60421', 'Mont-l''Évêque', '31T', 473286, 5449198, 49.195, 2.63333, 70),
('60422', 'Montlognon', '31T', 477745, 5445720, 49.1639, 2.69473, 70),
('60423', 'Montmacq', '31T', 492917, 5480976, 49.4814, 2.90222, 36),
('60424', 'Montmartin', '31T', 477758, 5479010, 49.4633, 2.69305, 80),
('60425', 'Montreuil-sur-Brêche', '31T', 447493, 5484189, 49.5081, 2.27472, 100),
('60426', 'Montreuil-sur-Thérain', '31T', 441368, 5470014, 49.38, 2.19222, 90),
('60427', 'Monts', '31T', 428388, 5451915, 49.2158, 2.01666, 100),
('60428', 'Le Mont-Saint-Adrien', '31T', 427915, 5477432, 49.4453, 2.00556, 170),
('60429', 'Morangles', '31T', 448779, 5449526, 49.1964, 2.29694, 100),
('60430', 'Morienval', '31T', 494183, 5460439, 49.2967, 2.91999, 119),
('60431', 'Morlincourt', '31T', 502490, 5490824, 49.57, 3.03444, 44),
('60432', 'Mortefontaine', '31T', 470748, 5439977, 49.1119, 2.59917, 100),
('60433', 'Mortefontaine-en-Thelle', '31T', 440924, 5456862, 49.2617, 2.18805, 110),
('60434', 'Mortemer', '31T', 476602, 5490935, 49.5706, 2.67639, 95),
('60435', 'Morvillers', '31T', 418456, 5492670, 49.5811, 1.87194, 185),
('60436', 'Mory-Montcrux', '31T', 456256, 5493500, 49.5925, 2.39472, 120),
('60437', 'Mouchy-le-Châtel', '31T', 445542, 5463918, 49.3256, 2.25055, 116),
('60438', 'Moulin-sous-Touvent', '31T', 505194, 5478133, 49.4558, 3.07167, 100),
('60439', 'Mouy', '31T', 450641, 5462974, 49.3175, 2.32084, 40),
('60440', 'Moyenneville', '31T', 473767, 5481992, 49.49, 2.63778, 70),
('60441', 'Moyvillers', '31T', 474876, 5473680, 49.4153, 2.65362, 90),
('60442', 'Muidorge', '31T', 437609, 5486918, 49.5317, 2.13777, 130),
('60443', 'Muirancourt', '31T', 500742, 5499131, 49.6447, 3.01028, 60),
('60444', 'Mureaumont', '31T', 411696, 5498119, 49.6292, 1.77722, 210),
('60445', 'Nampcel', '31T', 507142, 5481440, 49.4856, 3.09861, 100),
('60446', 'Nanteuil-le-Haudouin', '31T', 486304, 5442851, 49.1383, 2.81223, 100),
('60447', 'Néry', '31T', 483878, 5458761, 49.2814, 2.77833, 100),
('60448', 'Neufchelles', '31T', 504419, 5440272, 49.1153, 3.06056, 80),
('60449', 'Neufvy-sur-Aronde', '31T', 475521, 5482725, 49.4967, 2.66195, 72),
('60450', 'Neuilly-en-Thelle', '31T', 447939, 5452653, 49.2244, 2.285, 125),
('60451', 'Neuilly-sous-Clermont', '31T', 457205, 5465914, 49.3444, 2.41083, 70),
('60452', 'Neuville-Bosc', '31T', 428081, 5450065, 49.1992, 2.01278, 140),
('60453', 'La Neuville-d''Aumont', '31T', 434622, 5462276, 49.3097, 2.10056, 214),
('60454', 'La Neuville-en-Hez', '31T', 451231, 5472604, 49.4042, 2.32778, 65),
('60455', 'La Neuville-Garnier', '31T', 430293, 5464893, 49.3328, 2.04056, 230),
('60456', 'La Neuville-Roy', '31T', 469417, 5481119, 49.4819, 2.57778, 110),
('60457', 'La Neuville-Saint-Pierre', '31T', 442408, 5486371, 49.5272, 2.20417, 140),
('60458', 'La Neuville-sur-Oudeuil', '31T', 428184, 5491699, 49.5736, 2.00667, 182),
('60459', 'La Neuville-sur-Ressons', '31T', 482399, 5488659, 49.5503, 2.75667, 58),
('60460', 'La Neuville-Vault', '31T', 424052, 5482025, 49.4861, 1.95139, 150),
('60461', 'Nivillers', '31T', 439667, 5478526, 49.4564, 2.16749, 107),
('60462', 'Noailles', '31T', 441930, 5464078, 49.3267, 2.20083, 90),
('60463', 'Nogent-sur-Oise', '31T', 461429, 5458286, 49.2761, 2.46972, 30),
('60464', 'Nointel', '31T', 462372, 5469088, 49.3733, 2.48167, 62),
('60465', 'Noirémont', '31T', 443177, 5488834, 49.5494, 2.21444, 150),
('60466', 'Noroy', '31T', 463899, 5477416, 49.4483, 2.50194, 135),
('60468', 'Nourard-le-Franc', '31T', 454604, 5483168, 49.4994, 2.37305, 163),
('60469', 'Novillers', '31T', 442917, 5457953, 49.2717, 2.21528, 184),
('60470', 'Noyers-Saint-Martin', '31T', 446697, 5489108, 49.5522, 2.26306, 170),
('60471', 'Noyon', '31T', 500181, 5492089, 49.5814, 3.0025, 48),
('60472', 'Offoy', '31T', 430688, 5505380, 49.6969, 2.03888, 170),
('60473', 'Ognes', '31T', 487651, 5438494, 49.0992, 2.83083, 125),
('60474', 'Ognolles', '31T', 493910, 5504477, 49.6928, 2.91556, 80),
('60475', 'Ognon', '31T', 474117, 5453764, 49.2361, 2.64445, 90),
('60476', 'Omécourt', '31T', 416876, 5495721, 49.6083, 1.84944, 156),
('60477', 'Ons-en-Bray', '31T', 421968, 5474209, 49.4156, 1.92416, 120),
('60478', 'Ormoy-le-Davien', '31T', 497187, 5449288, 49.1964, 2.96139, 135),
('60479', 'Ormoy-Villers', '31T', 488485, 5449362, 49.1969, 2.84194, 95),
('60480', 'Oroër', '31T', 439415, 5483007, 49.4967, 2.16333, 140),
('60481', 'Orrouy', '31T', 489820, 5460167, 49.2942, 2.85999, 55),
('60482', 'Orry-la-Ville', '31T', 464518, 5442237, 49.1319, 2.51361, 80),
('60483', 'Orvillers-Sorel', '31T', 478935, 5491791, 49.5783, 2.70861, 100),
('60484', 'Oudeuil', '31T', 429831, 5488588, 49.5458, 2.03, 106),
('60485', 'Oursel-Maison', '31T', 440923, 5494078, 49.5964, 2.18249, 151),
('60486', 'Paillart', '31T', 451292, 5501820, 49.6669, 2.32501, 80),
('60487', 'Parnes', '31T', 408196, 5450793, 49.2031, 1.73972, 80),
('60488', 'Passel', '31T', 497107, 5489280, 49.5561, 2.96, 40),
('60489', 'Péroy-les-Gombries', '31T', 488923, 5445531, 49.1625, 2.84806, 129),
('60490', 'Pierrefitte-en-Beauvaisis', '31T', 426144, 5480514, 49.4728, 1.98055, 130),
('60491', 'Pierrefonds', '31T', 498729, 5466489, 49.3511, 2.9825, 80),
('60492', 'Pimprez', '31T', 496421, 5484679, 49.5147, 2.95056, 45),
('60493', 'Pisseleu', '31T', 431811, 5487853, 49.5394, 2.0575, 162),
('60494', 'Plailly', '31T', 469769, 5438964, 49.1028, 2.58583, 102),
('60495', 'Plainval', '31T', 459577, 5486557, 49.5303, 2.44138, 100),
('60496', 'Plainville', '31T', 460429, 5495877, 49.6142, 2.45222, 130),
('60497', 'Le Plessier-sur-Bulles', '31T', 450497, 5482771, 49.4956, 2.31639, 146),
('60498', 'Le Plessier-sur-Saint-Just', '31T', 460406, 5484358, 49.5106, 2.45306, 120),
('60499', 'Plessis-de-Roye', '31T', 487851, 5491825, 49.5789, 2.83194, 80),
('60500', 'Le Plessis-Belleville', '31T', 482236, 5438076, 49.0953, 2.75667, 115),
('60501', 'Le Plessis-Brion', '31T', 492130, 5479310, 49.4664, 2.89138, 35),
('60502', 'Le Plessis-Patte-d''Oie', '31T', 505130, 5503364, 49.6828, 3.07111, 84),
('60503', 'Le Ployron', '31T', 469983, 5492635, 49.5856, 2.58472, 95),
('60504', 'Ponchon', '31T', 441591, 5466367, 49.3472, 2.19583, 72),
('60505', 'Pontarmé', '31T', 467166, 5444537, 49.1528, 2.54972, 55),
('60506', 'Pont-l''Évêque', '31T', 499036, 5490175, 49.5642, 2.98667, 40),
('60507', 'Pontoise-lès-Noyon', '31T', 503516, 5489002, 49.5536, 3.04861, 37),
('60508', 'Pontpoint', '31T', 473888, 5460899, 49.3003, 2.64083, 50),
('60509', 'Pont-Sainte-Maxence', '31T', 471224, 5461221, 49.3031, 2.60417, 40),
('60510', 'Porcheux', '31T', 421936, 5464851, 49.3314, 1.92556, 165),
('60511', 'Porquéricourt', '31T', 497049, 5493573, 49.5947, 2.95917, 80),
('60512', 'Pouilly', '31T', 429501, 5458201, 49.2725, 2.03084, 110),
('60513', 'Précy-sur-Oise', '31T', 454171, 5450466, 49.2053, 2.37084, 40),
('60514', 'Prévillers', '31T', 427594, 5495660, 49.6092, 1.99778, 182),
('60515', 'Pronleroy', '31T', 467438, 5480019, 49.4719, 2.55055, 110),
('60516', 'Puiseux-en-Bray', '31T', 411850, 5474116, 49.4133, 1.78472, 130),
('60517', 'Puiseux-le-Hauberger', '31T', 444469, 5451544, 49.2142, 2.23751, 80),
('60518', 'Puits-la-Vallée', '31T', 441770, 5492525, 49.5825, 2.19444, 160),
('60519', 'Quesmy', '31T', 504513, 5498051, 49.635, 3.0625, 80),
('60520', 'Le Quesnel-Aubry', '31T', 450108, 5484226, 49.5086, 2.31083, 152),
('60521', 'Quincampoix-Fleuzy', '31T', 411645, 5511001, 49.745, 1.77361, 140),
('60522', 'Quinquempoix', '31T', 458590, 5488880, 49.5511, 2.4275, 120),
('60523', 'Rainvillers', '31T', 427874, 5472769, 49.4033, 2.00584, 80),
('60524', 'Rantigny', '31T', 459351, 5464199, 49.3292, 2.44055, 54),
('60525', 'Raray', '31T', 479384, 5456243, 49.2586, 2.71667, 104),
('60526', 'Ravenel', '31T', 464090, 5484981, 49.5164, 2.50389, 110),
('60527', 'Réez-Fosse-Martin', '31T', 495155, 5439439, 49.1078, 2.93362, 92),
('60528', 'Reilly', '31T', 416115, 5455146, 49.2433, 1.84749, 90),
('60529', 'Rémécourt', '31T', 463320, 5475165, 49.4281, 2.49416, 100),
('60530', 'Rémérangles', '31T', 448233, 5477357, 49.4467, 2.28583, 100),
('60531', 'Remy', '31T', 478875, 5476350, 49.4394, 2.70861, 58),
('60532', 'Ressons-l''Abbaye', '31T', 433702, 5461391, 49.3017, 2.08805, 211),
('60533', 'Ressons-sur-Matz', '31T', 481591, 5487550, 49.5403, 2.74555, 70),
('60534', 'Rethondes', '31T', 495809, 5473778, 49.4167, 2.94222, 35),
('60535', 'Reuil-sur-Brêche', '31T', 443587, 5485649, 49.5208, 2.22056, 112),
('60536', 'Rhuis', '31T', 478011, 5461653, 49.3072, 2.6975, 50),
('60537', 'Ribécourt-Dreslincourt', '31T', 494450, 5484186, 49.5103, 2.92333, 50),
('60538', 'Ricquebourg', '31T', 482501, 5489246, 49.5556, 2.75805, 65),
('60539', 'Rieux', '31T', 464901, 5460949, 49.3003, 2.51722, 39),
('60540', 'Rivecourt', '31T', 480813, 5466182, 49.3481, 2.73583, 37),
('60541', 'Roberval', '31T', 477337, 5459957, 49.2919, 2.68833, 65),
('60542', 'Rochy-Condé', '31T', 440750, 5472491, 49.4022, 2.18334, 57),
('60543', 'Rocquemont', '31T', 486943, 5456251, 49.2589, 2.82055, 100),
('60544', 'Rocquencourt', '31T', 457932, 5499973, 49.6508, 2.41722, 120),
('60545', 'Romescamps', '31T', 413950, 5507380, 49.7128, 1.80639, 212),
('60546', 'Rosières', '31T', 483969, 5448446, 49.1886, 2.77999, 160),
('60547', 'Rosoy', '31T', 463739, 5465342, 49.3397, 2.50084, 80),
('60548', 'Rosoy-en-Multien', '31T', 499635, 5437986, 49.0947, 2.995, 80),
('60549', 'Rotangy', '31T', 433718, 5492617, 49.5825, 2.08305, 170),
('60550', 'Rothois', '31T', 427418, 5494519, 49.5989, 1.99556, 180),
('60551', 'Rousseloy', '31T', 456136, 5460889, 49.2992, 2.39667, 100),
('60552', 'Rouville', '31T', 490632, 5450654, 49.2086, 2.87138, 100),
('60553', 'Rouvillers', '31T', 471774, 5477802, 49.4522, 2.61056, 86),
('60554', 'Rouvres-en-Multien', '31T', 501926, 5439715, 49.1103, 3.02639, 140),
('60555', 'Rouvroy-les-Merles', '31T', 453720, 5499853, 49.6494, 2.35888, 75),
('60556', 'Royaucourt', '31T', 465984, 5495346, 49.6097, 2.52916, 100),
('60557', 'Roy-Boissy', '31T', 422314, 5492799, 49.5828, 1.92528, 120),
('60558', 'Roye-sur-Matz', '31T', 483779, 5493318, 49.5922, 2.77555, 70),
('60559', 'La Rue-Saint-Pierre', '31T', 448940, 5473242, 49.4097, 2.29612, 62),
('60560', 'Rully', '31T', 480283, 5453461, 49.2336, 2.72916, 90),
('60561', 'Russy-Bémont', '31T', 497614, 5454538, 49.2436, 2.96722, 100),
('60562', 'Sacy-le-Grand', '31T', 466835, 5466836, 49.3533, 2.54333, 40),
('60563', 'Sacy-le-Petit', '31T', 473113, 5467543, 49.36, 2.62973, 51),
('60564', 'Sains-Morainvillers', '31T', 461742, 5491421, 49.5742, 2.47083, 120),
('60565', 'Saint-André-Farivillers', '31T', 449002, 5492823, 49.5858, 2.29444, 110),
('60566', 'Saint-Arnoult', '31T', 414930, 5498376, 49.6319, 1.82194, 168),
('60567', 'Saint-Aubin-en-Bray', '31T', 418651, 5474721, 49.4197, 1.87834, 135),
('60568', 'Saint-Aubin-sous-Erquery', '31T', 462660, 5472823, 49.4069, 2.48528, 70),
('60569', 'Saint-Crépin-aux-Bois', '31T', 498570, 5475753, 49.4344, 2.98028, 60),
('60570', 'Saint-Crépin-Ibouvillers', '31T', 433044, 5457076, 49.2628, 2.07972, 134),
('60571', 'Saint-Deniscourt', '31T', 418497, 5495418, 49.6058, 1.87194, 140),
('60572', 'Saint-Étienne-Roilaye', '31T', 501533, 5466736, 49.3533, 3.02111, 125),
('60573', 'Sainte-Eusoye', '31T', 445398, 5491900, 49.5772, 2.24471, 160),
('60574', 'Saint-Félix', '31T', 447828, 5466582, 49.3497, 2.28166, 48),
('60575', 'Sainte-Geneviève', '31T', 441726, 5460004, 49.29, 2.19861, 202),
('60576', 'Saint-Germain-la-Poterie', '31T', 426323, 5477361, 49.4444, 1.98361, 170),
('60577', 'Saint-Germer-de-Fly', '31T', 411721, 5477330, 49.4422, 1.78222, 110),
('60578', 'Saintines', '31T', 483442, 5461449, 49.3056, 2.77222, 48),
('60579', 'Saint-Jean-aux-Bois', '31T', 493181, 5466215, 49.3486, 2.90611, 72),
('60581', 'Saint-Just-en-Chaussée', '31T', 458874, 5483875, 49.5061, 2.43195, 100),
('60582', 'Saint-Léger-aux-Bois', '31T', 496579, 5480818, 49.48, 2.95277, 45),
('60583', 'Saint-Léger-en-Bray', '31T', 429026, 5471457, 49.3917, 2.02195, 85),
('60584', 'Saint-Leu-d''Esserent', '31T', 457459, 5451768, 49.2172, 2.41584, 40),
('60585', 'Saint-Martin-aux-Bois', '31T', 468898, 5485477, 49.5211, 2.57027, 105),
('60587', 'Saint-Martin-Longueau', '31T', 470805, 5465948, 49.3456, 2.59806, 44),
('60588', 'Saint-Maur', '31T', 421823, 5496358, 49.6147, 1.91778, 174),
('60589', 'Saint-Maximin', '31T', 460092, 5452181, 49.2211, 2.45195, 61),
('60590', 'Saint-Omer-en-Chaussée', '31T', 427942, 5487069, 49.5319, 2.00417, 100),
('60591', 'Saint-Paul', '31T', 428092, 5475546, 49.4283, 2.00834, 110),
('60592', 'Saint-Pierre-es-Champs', '31T', 407915, 5476188, 49.4314, 1.73, 100),
('60593', 'Saint-Pierre-lès-Bitry', '31T', 505560, 5474613, 49.4242, 3.07667, 70),
('60594', 'Saint-Quentin-des-Prés', '31T', 409832, 5486134, 49.5211, 1.75416, 125),
('60595', 'Saint-Remy-en-l''Eau', '31T', 458744, 5479985, 49.4711, 2.43056, 81),
('60596', 'Saint-Samson-la-Poterie', '31T', 409381, 5494049, 49.5922, 1.74611, 150),
('60597', 'Saint-Sauveur', '31T', 484375, 5462867, 49.3183, 2.785, 55),
('60598', 'Saint-Sulpice', '31T', 436612, 5466793, 49.3506, 2.12722, 100),
('60599', 'Saint-Thibault', '31T', 416853, 5506007, 49.7008, 1.84694, 200),
('60600', 'Saint-Vaast-de-Longmont', '31T', 480775, 5461118, 49.3025, 2.73555, 60),
('60601', 'Saint-Vaast-lès-Mello', '31T', 455784, 5457309, 49.2669, 2.39223, 50),
('60602', 'Saint-Valery', '31T', 409236, 5509342, 49.7297, 1.74056, 187),
('60603', 'Salency', '31T', 503533, 5492986, 49.5894, 3.04888, 80),
('60604', 'Sarcus', '31T', 418631, 5504312, 49.6858, 1.87195, 200),
('60605', 'Sarnois', '31T', 422166, 5503457, 49.6786, 1.92112, 197),
('60608', 'Le Saulchoy', '31T', 437901, 5498343, 49.6344, 2.14001, 160),
('60609', 'Savignies', '31T', 425025, 5479664, 49.465, 1.96527, 160),
('60610', 'Sempigny', '31T', 499679, 5489526, 49.5583, 2.99556, 40),
('60611', 'Senantes', '31T', 415540, 5482027, 49.485, 1.83389, 182),
('60612', 'Senlis', '31T', 469772, 5450483, 49.2064, 2.58501, 73),
('60613', 'Senots', '31T', 426782, 5457402, 49.265, 1.99361, 100),
('60614', 'Serans', '31T', 414885, 5448802, 49.1861, 1.83194, 132),
('60615', 'Sérévillers', '31T', 458906, 5498792, 49.6403, 2.43083, 136),
('60616', 'Sérifontaine', '31T', 410939, 5467644, 49.355, 1.77361, 80),
('60617', 'Sermaize', '31T', 497030, 5496012, 49.6167, 2.95888, 60),
('60618', 'Séry-Magneval', '31T', 489429, 5456061, 49.2572, 2.85472, 80);
INSERT INTO `ods_communes` (`oc_code_insee`, `oc_nom`, `oc_secteur`, `oc_x_utm`, `oc_y_utm`, `oc_latitude`, `oc_longitude`, `oc_altitude`) VALUES
('60619', 'Silly-le-Long', '31T', 484916, 5439396, 49.1072, 2.79333, 122),
('60620', 'Silly-Tillard', '31T', 439182, 5463768, 49.3236, 2.16306, 100),
('60621', 'Solente', '31T', 491507, 5505314, 49.7003, 2.88222, 85),
('60622', 'Sommereux', '31T', 427298, 5503571, 49.6803, 1.99222, 180),
('60623', 'Songeons', '31T', 417196, 5489075, 49.5486, 1.85527, 120),
('60624', 'Sully', '31T', 411832, 5490395, 49.5597, 1.78084, 130),
('60625', 'Suzoy', '31T', 496265, 5492060, 49.5811, 2.94833, 90),
('60626', 'Talmontiers', '31T', 408279, 5471487, 49.3892, 1.7361, 90),
('60627', 'Tartigny', '31T', 453787, 5498216, 49.6347, 2.36, 110),
('60628', 'Therdonne', '31T', 438696, 5474460, 49.4197, 2.15473, 66),
('60629', 'Thérines', '31T', 419860, 5495243, 49.6044, 1.89084, 150),
('60630', 'Thibivillers', '31T', 420149, 5461355, 49.2997, 1.90167, 100),
('60631', 'Thiers-sur-Thève', '31T', 468968, 5444280, 49.1506, 2.57445, 59),
('60632', 'Thiescourt', '31T', 491644, 5490181, 49.5642, 2.88445, 60),
('60633', 'Thieuloy-Saint-Antoine', '31T', 424019, 5498365, 49.6331, 1.94778, 186),
('60634', 'Thieux', '31T', 450605, 5488052, 49.5431, 2.31722, 150),
('60635', 'Thiverny', '31T', 458638, 5455218, 49.2483, 2.43167, 40),
('60636', 'Thourotte', '31T', 491711, 5481318, 49.4844, 2.88556, 48),
('60637', 'Thury-en-Valois', '31T', 501985, 5444934, 49.1572, 3.02722, 135),
('60638', 'Thury-sous-Clermont', '31T', 451063, 5467293, 49.3564, 2.32611, 70),
('60639', 'Tillé', '31T', 435712, 5479405, 49.4639, 2.11278, 115),
('60640', 'Tourly', '31T', 423525, 5452814, 49.2233, 1.94973, 100),
('60641', 'Tracy-le-Mont', '31T', 500885, 5479953, 49.4722, 3.01222, 120),
('60642', 'Tracy-le-Val', '31T', 500825, 5481898, 49.4897, 3.01139, 61),
('60643', 'Tricot', '31T', 470210, 5489947, 49.5614, 2.58806, 100),
('60644', 'Trie-Château', '31T', 414607, 5459555, 49.2828, 1.82584, 60),
('60645', 'Trie-la-Ville', '31T', 415324, 5460193, 49.2886, 1.83556, 80),
('60646', 'Troissereux', '31T', 430863, 5481193, 49.4794, 2.04556, 85),
('60647', 'Trosly-Breuil', '31T', 497682, 5471831, 49.3992, 2.96805, 40),
('60648', 'Troussencourt', '31T', 446254, 5495134, 49.6064, 2.25611, 100),
('60649', 'Troussures', '31T', 425593, 5471070, 49.3878, 1.97472, 120),
('60650', 'Trumilly', '31T', 485604, 5454402, 49.2422, 2.80222, 118),
('60651', 'Ully-Saint-Georges', '31T', 447712, 5458615, 49.2781, 2.28111, 70),
('60652', 'Valdampierre', '31T', 431098, 5461516, 49.3025, 2.05222, 150),
('60653', 'Valescourt', '31T', 459196, 5481217, 49.4822, 2.43667, 84),
('60654', 'Vandélicourt', '31T', 485020, 5484544, 49.5133, 2.79306, 70),
('60655', 'Varesnes', '31T', 504379, 5490114, 49.5636, 3.06056, 42),
('60656', 'Varinfroy', '31T', 503244, 5438419, 49.0986, 3.04444, 67),
('60657', 'Vauchelles', '31T', 497470, 5492924, 49.5889, 2.965, 80),
('60658', 'Vauciennes', '31T', 502346, 5453797, 49.2369, 3.03223, 80),
('60659', 'Vaudancourt', '31T', 409607, 5454106, 49.2331, 1.75833, 100),
('60660', 'Le Vaumain', '31T', 418087, 5465278, 49.3347, 1.87251, 100),
('60661', 'Vaumoise', '31T', 498625, 5453889, 49.2378, 2.98111, 100),
('60662', 'Le Vauroux', '31T', 421950, 5470071, 49.3783, 1.92473, 212),
('60663', 'Velennes', '31T', 440875, 5480304, 49.4725, 2.18389, 110),
('60664', 'Vendeuil-Caply', '31T', 449537, 5496369, 49.6178, 2.30139, 90),
('60665', 'Venette', '31T', 485413, 5473857, 49.4172, 2.79888, 40),
('60666', 'Ver-sur-Launette', '31T', 477149, 5438929, 49.1028, 2.68694, 90),
('60667', 'Verberie', '31T', 480475, 5461860, 49.3092, 2.73139, 39),
('60668', 'Verderel-lès-Sauqueuse', '31T', 434635, 5483679, 49.5022, 2.09722, 140),
('60669', 'Verderonne', '31T', 463529, 5464170, 49.3292, 2.49805, 68),
('60670', 'Verneuil-en-Halatte', '31T', 464964, 5458108, 49.2747, 2.51833, 40),
('60671', 'Versigny', '31T', 482826, 5445362, 49.1608, 2.76444, 85),
('60672', 'Vez', '31T', 500243, 5456792, 49.2639, 3.00334, 110),
('60673', 'Viefvillers', '31T', 437073, 5496160, 49.6147, 2.12889, 176),
('60674', 'Vieux-Moulin', '31T', 495142, 5471123, 49.3928, 2.93305, 50),
('60675', 'Vignemont', '31T', 483911, 5483497, 49.5039, 2.77778, 81),
('60676', 'Ville', '31T', 495741, 5489157, 49.555, 2.94111, 60),
('60677', 'Villembray', '31T', 418223, 5481121, 49.4772, 1.87111, 150),
('60678', 'Villeneuve-les-Sablons', '31T', 432787, 5454237, 49.2372, 2.07667, 115),
('60679', 'La Villeneuve-sous-Thury', '31T', 504598, 5444688, 49.155, 3.06306, 130),
('60680', 'Villeneuve-sur-Verberie', '31T', 477410, 5458043, 49.2747, 2.68944, 119),
('60681', 'Villers-Saint-Barthélemy', '31T', 423851, 5471959, 49.3956, 1.95055, 140),
('60682', 'Villers-Saint-Frambourg', '31T', 473844, 5455804, 49.2544, 2.64056, 91),
('60683', 'Villers-Saint-Genest', '31T', 493395, 5443301, 49.1425, 2.90944, 130),
('60684', 'Villers-Saint-Paul', '31T', 463217, 5459725, 49.2892, 2.49417, 41),
('60685', 'Villers-Saint-Sépulcre', '31T', 443125, 5468297, 49.3647, 2.21667, 70),
('60686', 'Villers-sous-Saint-Leu', '31T', 456101, 5451439, 49.2142, 2.39723, 32),
('60687', 'Villers-sur-Auchy', '31T', 412827, 5482285, 49.4869, 1.79639, 148),
('60688', 'Villers-sur-Bonnières', '31T', 425237, 5487723, 49.5375, 1.96667, 150),
('60689', 'Villers-sur-Coudun', '31T', 485775, 5481114, 49.4825, 2.80361, 70),
('60690', 'Villers-sur-Trie', '31T', 414587, 5462181, 49.3064, 1.825, 100),
('60691', 'Villers-Vermont', '31T', 409311, 5492289, 49.5764, 1.74555, 175),
('60692', 'Villers-Vicomte', '31T', 445011, 5499224, 49.6431, 2.23834, 121),
('60693', 'Villeselve', '31T', 508054, 5504325, 49.6914, 3.11167, 80),
('60694', 'Villotran', '31T', 428754, 5466055, 49.3431, 2.01917, 220),
('60695', 'Vineuil-Saint-Firmin', '31T', 462625, 5449908, 49.2008, 2.48694, 59),
('60697', 'Vrocourt', '31T', 419435, 5486848, 49.5289, 1.88667, 110),
('60698', 'Wacquemoulin', '31T', 472406, 5483388, 49.5025, 2.61889, 63),
('60699', 'Wambez', '31T', 416999, 5486638, 49.5267, 1.85306, 140),
('60700', 'Warluis', '31T', 437890, 5470948, 49.3881, 2.14416, 62),
('60701', 'Wavignies', '31T', 453662, 5488333, 49.5458, 2.35944, 140),
('60702', 'Welles-Pérennes', '31T', 462711, 5495058, 49.6069, 2.48389, 113),
('61001', 'Alençon', '31T', 284679, 5368529, 48.4331, 0.0888912, 130),
('61002', 'Almenêches', '31T', 287516, 5397853, 48.6975, 0.112223, 180),
('61003', 'Anceins', '31T', 316836, 5415302, 48.8636, 0.502499, 200),
('61004', 'Antoigny', '30T', 694504, 5378099, 48.5258, -0.365556, 172),
('61005', 'Appenai-sous-Bellême', '31T', 319000, 5357407, 48.3439, 0.557217, 185),
('61006', 'Argentan', '30T', 719048, 5403239, 48.7436, -0.0202788, 161),
('61007', 'Athis-de-l''Orne', '30T', 683698, 5409601, 48.8122, -0.49778, 240),
('61008', 'Aube', '31T', 319671, 5401394, 48.7394, 0.547225, 220),
('61009', 'Aubry-en-Exmes', '31T', 285289, 5409687, 48.8031, 0.075829, 120),
('61010', 'Aubry-le-Panthou', '31T', 296959, 5414970, 48.8544, 0.231949, 200),
('61011', 'Aubusson', '30T', 679817, 5406508, 48.7856, -0.551948, 248),
('61012', 'Auguaise', '31T', 320005, 5397149, 48.7014, 0.553615, 270),
('61013', 'Aunay-les-Bois', '31T', 299584, 5379882, 48.54, 0.284716, 190),
('61014', 'Aunou-le-Faucon', '31T', 282587, 5401629, 48.7297, 0.0433378, 160),
('61015', 'Aunou-sur-Orne', '31T', 295853, 5387930, 48.6111, 0.230278, 200),
('61016', 'Autheuil', '31T', 328149, 5382493, 48.5719, 0.670283, 220),
('61017', 'Les Authieux-du-Puits', '31T', 303531, 5398815, 48.7114, 0.329161, 280),
('61018', 'Avernes-Saint-Gourgon', '31T', 303854, 5424244, 48.94, 0.321387, 230),
('61019', 'Avernes-sous-Exmes', '31T', 295109, 5407927, 48.7906, 0.210277, 190),
('61020', 'Avoine', '30T', 713816, 5395122, 48.6725, -0.0955567, 180),
('61021', 'Avrilly', '30T', 676061, 5379038, 48.5397, -0.614722, 180),
('61023', 'Bailleul', '30T', 719881, 5409610, 48.8006, -0.00555879, 176),
('61024', 'Banvou', '30T', 680184, 5393169, 48.6656, -0.552784, 228),
('61025', 'La Baroche-sous-Lucé', '30T', 678690, 5379615, 48.5442, -0.578889, 138),
('61026', 'Barville', '31T', 303448, 5373533, 48.4842, 0.339997, 160),
('61027', 'Batilly', '30T', 706899, 5400025, 48.7189, -0.186941, 187),
('61028', 'Bazoches-au-Houlme', '30T', 702600, 5410842, 48.8175, -0.239994, 218),
('61029', 'Bazoches-sur-Hoëne', '31T', 313288, 5380926, 48.5536, 0.469718, 180),
('61030', 'La Bazoque', '30T', 676276, 5407415, 48.7947, -0.599722, 150),
('61031', 'Beauchêne', '30T', 667416, 5394380, 48.68, -0.725558, 220),
('61032', 'Beaufai', '31T', 317378, 5402550, 48.7492, 0.515554, 278),
('61033', 'Beaulandais', '30T', 681269, 5379821, 48.5453, -0.543889, 160),
('61034', 'Beaulieu', '31T', 334075, 5394305, 48.6797, 0.745827, 205),
('61035', 'Beauvain', '30T', 698488, 5387387, 48.6081, -0.307225, 275),
('61036', 'Belfonds', '31T', 287689, 5388355, 48.6122, 0.11944, 214),
('61037', 'Bellavilliers', '31T', 314823, 5366380, 48.4233, 0.496945, 190),
('61038', 'Bellême', '31T', 319424, 5361009, 48.3764, 0.561388, 210),
('61039', 'La Bellière', '30T', 718410, 5390197, 48.6267, -0.0358356, 215),
('61040', 'Bellou-en-Houlme', '30T', 688206, 5396337, 48.6917, -0.4425, 234),
('61041', 'Bellou-le-Trichard', '31T', 317969, 5349003, 48.2681, 0.54694, 160),
('61042', 'Bellou-sur-Huisne', '31T', 334043, 5366032, 48.4256, 0.756662, 126),
('61043', 'Berd''huis', '31T', 333020, 5357101, 48.345, 0.746394, 118),
('61044', 'Berjou', '30T', 684923, 5413907, 48.8506, -0.479169, 215),
('61045', 'Bivilliers', '31T', 324385, 5383474, 48.5797, 0.618887, 220),
('61046', 'Bizou', '31T', 333803, 5373949, 48.4967, 0.750276, 201),
('61047', 'Bocquencé', '31T', 314057, 5412086, 48.8339, 0.466105, 260),
('61048', 'Boëcé', '31T', 312022, 5376795, 48.5161, 0.454442, 210),
('61049', 'Boissei-la-Lande', '31T', 283755, 5396390, 48.6831, 0.0619435, 170),
('61050', 'Boissy-Maugis', '31T', 330830, 5367919, 48.4417, 0.712504, 140),
('61051', 'Boitron', '31T', 298309, 5382091, 48.5594, 0.266393, 190),
('61052', 'Bonnefoi', '31T', 321004, 5393841, 48.6719, 0.568613, 230),
('61053', 'Bonsmoulins', '31T', 318496, 5391604, 48.6511, 0.535559, 240),
('61054', 'Le Bosc-Renoult', '31T', 302447, 5421326, 48.9133, 0.303608, 225),
('61055', 'Boucé', '30T', 714376, 5392268, 48.6467, -0.0894379, 180),
('61056', 'Le Bouillon', '31T', 286690, 5382550, 48.5597, 0.108883, 270),
('61057', 'Le Bourg-Saint-Léonard', '31T', 287293, 5404911, 48.7608, 0.105556, 200),
('61058', 'Bréel', '30T', 691585, 5409990, 48.8133, -0.390281, 120),
('61059', 'Bresolettes', '31T', 325136, 5389168, 48.6311, 0.626662, 260),
('61060', 'Brethel', '31T', 319010, 5399283, 48.7203, 0.539169, 265),
('61061', 'Bretoncelles', '31T', 343640, 5366531, 48.4325, 0.88611, 150),
('61062', 'Brieux', '30T', 714082, 5413837, 48.8406, -0.0822185, 133),
('61063', 'Briouze', '30T', 693720, 5397267, 48.6983, -0.367216, 217),
('61064', 'Brullemail', '31T', 303402, 5392792, 48.6572, 0.330274, 235),
('61065', 'Bubertré', '31T', 323152, 5385336, 48.5961, 0.601392, 300),
('61066', 'Buré', '31T', 308377, 5377073, 48.5175, 0.405007, 160),
('61067', 'Bures', '31T', 308162, 5382242, 48.5639, 0.399718, 189),
('61068', 'Bursard', '31T', 294053, 5380174, 48.5408, 0.209728, 160),
('61069', 'Cahan', '30T', 687476, 5415630, 48.8653, -0.443614, 160),
('61070', 'Caligny', '30T', 676507, 5409153, 48.8103, -0.595832, 139),
('61071', 'Camembert', '31T', 293167, 5419438, 48.8933, 0.178059, 150),
('61072', 'Canapville', '31T', 300285, 5425237, 48.9478, 0.272219, 125),
('61073', 'La Carneille', '30T', 687537, 5405927, 48.7781, -0.447219, 182),
('61074', 'Carrouges', '30T', 710589, 5383406, 48.5683, -0.145282, 320),
('61075', 'Ceaucé', '30T', 675499, 5374014, 48.4947, -0.624442, 140),
('61076', 'Le Cercueil', '31T', 280539, 5386899, 48.5967, 0.0233356, 270),
('61077', 'Cerisé', '31T', 287657, 5369498, 48.4428, 0.128609, 140),
('61078', 'Cerisy-Belle-Étoile', '30T', 674265, 5407723, 48.7981, -0.626949, 134),
('61079', 'Ceton', '31T', 332856, 5343788, 48.2253, 0.749449, 120),
('61080', 'Chahains', '30T', 712905, 5382936, 48.5633, -0.114168, 345),
('61081', 'Chailloué', '31T', 293688, 5392615, 48.6525, 0.19861, 210),
('61082', 'Le Chalange', '31T', 301967, 5385764, 48.5936, 0.314165, 177),
('61083', 'Chambois', '31T', 287564, 5409879, 48.8056, 0.106672, 100),
('61084', 'Champcerie', '30T', 703852, 5408971, 48.8003, -0.223888, 210),
('61085', 'Le Champ-de-la-Pierre', '30T', 706100, 5387784, 48.6092, -0.203886, 270),
('61086', 'Les Champeaux', '31T', 289804, 5419471, 48.8925, 0.132219, 200),
('61087', 'Champeaux-sur-Sarthe', '31T', 311206, 5383684, 48.5778, 0.440281, 201),
('61088', 'Champ-Haut', '31T', 303219, 5400402, 48.7256, 0.324168, 305),
('61089', 'Champosoult', '31T', 292514, 5416679, 48.8683, 0.170561, 190),
('61090', 'Champs', '31T', 319768, 5384022, 48.5833, 0.556107, 220),
('61091', 'Champsecret', '30T', 680483, 5387059, 48.6106, -0.551387, 210),
('61092', 'Chandai', '31T', 334051, 5402464, 48.7531, 0.74222, 205),
('61093', 'Chanu', '30T', 670743, 5400043, 48.73, -0.678055, 285),
('61094', 'La Chapelle-au-Moine', '30T', 677635, 5398032, 48.71, -0.585281, 246),
('61095', 'La Chapelle-Biche', '30T', 674480, 5398211, 48.7125, -0.628055, 290),
('61096', 'La Chapelle-d''Andaine', '30T', 686189, 5378745, 48.5342, -0.477773, 135),
('61097', 'La Chapelle-Montligeon', '31T', 326744, 5372802, 48.4844, 0.65528, 160),
('61098', 'La Chapelle-près-Sées', '31T', 290526, 5383612, 48.5706, 0.160273, 204),
('61099', 'La Chapelle-Souëf', '31T', 321831, 5355031, 48.3233, 0.596393, 140),
('61100', 'La Chapelle-Viel', '31T', 324780, 5396782, 48.6994, 0.618611, 220),
('61101', 'Le Château-d''Almenêches', '31T', 288215, 5395756, 48.6789, 0.122784, 183),
('61102', 'Le Châtellier', '30T', 677704, 5394573, 48.6789, -0.585832, 194),
('61103', 'Chaumont', '31T', 303701, 5412379, 48.8333, 0.324997, 250),
('61104', 'La Chaux', '30T', 702343, 5387926, 48.6117, -0.254726, 258),
('61105', 'Chemilli', '31T', 310653, 5359781, 48.3628, 0.443611, 110),
('61106', 'Chênedouit', '30T', 695499, 5404314, 48.7611, -0.339725, 240),
('61107', 'Ciral', '30T', 711345, 5375273, 48.495, -0.13917, 310),
('61108', 'Cisai-Saint-Aubin', '31T', 305110, 5405962, 48.7761, 0.347222, 230),
('61109', 'Clairefougère', '30T', 669112, 5408677, 48.8081, -0.696667, 156),
('61110', 'La Cochère', '31T', 290444, 5400618, 48.7233, 0.150561, 180),
('61111', 'Colombiers', '31T', 282250, 5372765, 48.4703, 0.0538936, 156),
('61112', 'Colonard-Corubert', '31T', 326607, 5364308, 48.4081, 0.656944, 230),
('61113', 'Comblot', '31T', 322004, 5370384, 48.4614, 0.592219, 156),
('61114', 'Commeaux', '30T', 712147, 5407827, 48.7872, -0.111662, 175),
('61115', 'Condeau', '31T', 339686, 5361234, 48.3839, 0.834717, 120),
('61116', 'Condé-sur-Huisne', '31T', 340868, 5360800, 48.3803, 0.850834, 120),
('61117', 'Condé-sur-Sarthe', '31T', 280588, 5368624, 48.4325, 0.0336082, 150),
('61118', 'Corbon', '31T', 324504, 5369471, 48.4539, 0.62639, 140),
('61120', 'Coudehard', '31T', 289961, 5413900, 48.8425, 0.137217, 152),
('61121', 'Coulimer', '31T', 312756, 5372290, 48.4758, 0.466391, 190),
('61122', 'Coulmer', '31T', 301549, 5405778, 48.7733, 0.298895, 190),
('61123', 'Coulonces', '31T', 280716, 5413885, 48.8392, 0.011393, 90),
('61124', 'La Coulonche', '30T', 687325, 5391455, 48.6481, -0.45667, 310),
('61125', 'Coulonges-les-Sablons', '31T', 344594, 5363076, 48.4017, 0.900278, 150),
('61126', 'Coulonges-sur-Sarthe', '31T', 308045, 5378784, 48.5328, 0.399728, 163),
('61127', 'La Courbe', '30T', 706488, 5402854, 48.7444, -0.191105, 170),
('61128', 'Courcerault', '31T', 326774, 5367733, 48.4389, 0.657784, 180),
('61129', 'Courgeon', '31T', 323562, 5372220, 48.4783, 0.612501, 154),
('61130', 'Courgeoût', '31T', 314415, 5375882, 48.5086, 0.487221, 202),
('61131', 'Courménil', '31T', 296834, 5406504, 48.7783, 0.234438, 240),
('61133', 'Courtomer', '31T', 305269, 5389327, 48.6267, 0.357227, 200),
('61135', 'Couterne', '30T', 690914, 5376801, 48.5153, -0.414722, 130),
('61136', 'Couvains', '31T', 321124, 5414853, 48.8608, 0.561108, 235),
('61137', 'Craménil', '30T', 692700, 5402517, 48.7458, -0.378611, 218),
('61138', 'Croisilles', '31T', 298950, 5405098, 48.7664, 0.263894, 250),
('61139', 'Crouttes', '31T', 290277, 5422823, 48.9228, 0.136942, 200),
('61140', 'Crulai', '31T', 328437, 5397287, 48.705, 0.668059, 230),
('61141', 'Cuissai', '31T', 279566, 5373023, 48.4717, 0.0174947, 160),
('61142', 'Dame-Marie', '31T', 323237, 5358509, 48.355, 0.613885, 140),
('61143', 'Damigny', '31T', 283597, 5370363, 48.4492, 0.0733353, 149),
('61144', 'Dancé', '31T', 334022, 5358987, 48.3622, 0.759163, 130),
('61145', 'Domfront', '30T', 673623, 5384896, 48.5931, -0.645278, 200),
('61146', 'Dompierre', '30T', 680503, 5389624, 48.6336, -0.55, 223),
('61147', 'Dorceau', '31T', 337386, 5365718, 48.4236, 0.801938, 123),
('61148', 'Durcet', '30T', 688383, 5402648, 48.7483, -0.437215, 260),
('61149', 'Échalou', '30T', 684369, 5400382, 48.7292, -0.492781, 219),
('61150', 'Échauffour', '31T', 307912, 5401878, 48.7403, 0.387225, 292),
('61151', 'Écorcei', '31T', 322070, 5399061, 48.7192, 0.580831, 252),
('61152', 'Écorches', '31T', 286747, 5416835, 48.8678, 0.091941, 140),
('61153', 'Écouché', '30T', 711556, 5400199, 48.7189, -0.123616, 153),
('61154', 'Eperrais', '31T', 318829, 5366220, 48.4231, 0.551112, 160),
('61155', 'L''Épinay-le-Comte', '30T', 661825, 5370980, 48.4711, -0.810562, 180),
('61156', 'Essay', '31T', 296907, 5380194, 48.5419, 0.248339, 160),
('61157', 'Exmes', '31T', 292723, 5404738, 48.7611, 0.179438, 250),
('61158', 'Faverolles', '30T', 699044, 5394269, 48.6697, -0.296386, 215),
('61159', 'Fay', '31T', 309377, 5392648, 48.6578, 0.41139, 240),
('61160', 'Feings', '31T', 325376, 5379704, 48.5461, 0.633894, 199),
('61161', 'Fel', '31T', 288053, 5408778, 48.7958, 0.113891, 110),
('61162', 'La Ferrière-au-Doyen', '31T', 315673, 5392963, 48.6625, 0.496662, 244),
('61163', 'La Ferrière-aux-Étangs', '30T', 682585, 5392999, 48.6633, -0.520281, 280),
('61164', 'La Ferrière-Béchet', '31T', 284208, 5385242, 48.5831, 0.0738924, 230),
('61165', 'La Ferrière-Bochard', '30T', 719641, 5366438, 48.4128, -0.0316613, 160),
('61166', 'Ferrières-la-Verrerie', '31T', 306857, 5392023, 48.6514, 0.377498, 260),
('61167', 'La Ferté-Frênel', '31T', 317467, 5412777, 48.8411, 0.51222, 261),
('61168', 'La Ferté-Macé', '30T', 694739, 5385556, 48.5928, -0.358888, 221),
('61169', 'Flers', '30T', 678771, 5402179, 48.7469, -0.568055, 200),
('61170', 'Fleuré', '30T', 716666, 5397148, 48.6897, -0.0558341, 164),
('61171', 'Fontaine-les-Bassets', '31T', 280343, 5415816, 48.8564, 0.00528146, 81),
('61172', 'Fontenai-les-Louvets', '31T', 278620, 5378780, 48.5231, 0.00166212, 310),
('61173', 'Fontenai-sur-Orne', '30T', 715419, 5400841, 48.7233, -0.0708292, 160),
('61174', 'La Forêt-Auvray', '30T', 695117, 5409988, 48.8122, -0.342224, 210),
('61175', 'Forges', '31T', 286987, 5375737, 48.4986, 0.116384, 170),
('61176', 'Francheville', '30T', 717012, 5391380, 48.6378, -0.0541632, 200),
('61177', 'Frênes', '30T', 670328, 5406273, 48.7861, -0.681116, 164),
('61178', 'La Fresnaie-Fayel', '31T', 296809, 5412533, 48.8325, 0.231115, 210),
('61179', 'La Fresnaye-au-Sauvage', '30T', 701851, 5402160, 48.7397, -0.254447, 200),
('61180', 'Fresnay-le-Samson', '31T', 295548, 5418236, 48.8833, 0.211105, 180),
('61181', 'Gacé', '31T', 301546, 5408004, 48.7933, 0.29778, 210),
('61182', 'Gandelain', '30T', 715184, 5373748, 48.48, -0.0880582, 330),
('61183', 'Gâprée', '31T', 300526, 5389060, 48.6228, 0.29306, 210),
('61184', 'Gauville', '31T', 320623, 5411315, 48.8289, 0.555832, 268),
('61185', 'Gémages', '31T', 323234, 5351773, 48.2944, 0.616668, 129),
('61186', 'Geneslay', '30T', 686106, 5376270, 48.5119, -0.480001, 130),
('61187', 'Les Genettes', '31T', 321000, 5393069, 48.665, 0.568893, 230),
('61188', 'La Genevraie', '31T', 302668, 5395785, 48.6839, 0.31889, 250),
('61189', 'Giel-Courteilles', '30T', 705871, 5406263, 48.7753, -0.197783, 230),
('61190', 'Ginai', '31T', 295342, 5403127, 48.7475, 0.215833, 213),
('61191', 'Glos-la-Ferrière', '31T', 323862, 5414365, 48.8572, 0.598615, 228),
('61192', 'Godisson', '31T', 297684, 5395499, 48.6797, 0.251394, 210),
('61193', 'La Gonfrière', '31T', 314574, 5410431, 48.8192, 0.473891, 230),
('61194', 'Goulet', '30T', 713679, 5401949, 48.7339, -0.093883, 170),
('61195', 'Le Grais', '30T', 696849, 5390884, 48.64, -0.327776, 210),
('61196', 'Le Gué-de-la-Chaîne', '31T', 316641, 5360913, 48.3747, 0.523883, 150),
('61197', 'Guêprei', '30T', 719539, 5413647, 48.8369, -0.00805004, 100),
('61198', 'Guerquesalles', '31T', 295655, 5420582, 48.9044, 0.21139, 130),
('61199', 'Habloville', '30T', 708026, 5407672, 48.7872, -0.167775, 210),
('61200', 'Haleine', '30T', 688910, 5377167, 48.5192, -0.441666, 126),
('61201', 'La Haute-Chapelle', '30T', 671839, 5386262, 48.6058, -0.668887, 190),
('61202', 'Hauterive', '31T', 293058, 5373193, 48.4778, 0.199725, 140),
('61203', 'Héloup', '31T', 279822, 5364789, 48.3978, 0.025279, 190),
('61204', 'L''Hermitière', '31T', 325189, 5350291, 48.2817, 0.643618, 150),
('61205', 'Heugon', '31T', 309170, 5414755, 48.8564, 0.398336, 231),
('61206', 'L''Hôme-Chamondot', '31T', 331544, 5384245, 48.5886, 0.715559, 233),
('61207', 'Igé', '31T', 316274, 5355269, 48.3239, 0.521394, 130),
('61208', 'Irai', '31T', 330406, 5393426, 48.6708, 0.696384, 220),
('61209', 'Joué-du-Bois', '30T', 704118, 5384776, 48.5828, -0.232221, 303),
('61210', 'Joué-du-Plain', '30T', 711716, 5397051, 48.6906, -0.123057, 170),
('61211', 'Juvigny-sous-Andaine', '30T', 683886, 5380740, 48.5528, -0.508059, 190),
('61212', 'Juvigny-sur-Orne', '31T', 281038, 5401782, 48.7306, 0.0222209, 160),
('61213', 'Lalacelle', '30T', 711115, 5373193, 48.4764, -0.14333, 270),
('61214', 'L''Aigle', '31T', 325717, 5403891, 48.7636, 0.628329, 210),
('61215', 'Laleu', '31T', 306647, 5381119, 48.5533, 0.379727, 200),
('61216', 'La Lande-de-Goult', '30T', 717629, 5385498, 48.5847, -0.0488832, 300),
('61217', 'La Lande-de-Lougé', '30T', 702283, 5396981, 48.6931, -0.251116, 200),
('61218', 'La Lande-Patry', '30T', 676667, 5404090, 48.7647, -0.595831, 206),
('61219', 'La Lande-Saint-Siméon', '30T', 688086, 5410860, 48.8222, -0.437494, 190),
('61220', 'La Lande-sur-Eure', '31T', 342463, 5380344, 48.5564, 0.864999, 232),
('61221', 'Landigou', '30T', 685932, 5402566, 48.7483, -0.470562, 254),
('61222', 'Landisacq', '30T', 672872, 5403260, 48.7583, -0.647778, 250),
('61223', 'Larchamp', '30T', 670676, 5396209, 48.6956, -0.680551, 270),
('61224', 'Larré', '31T', 290463, 5375267, 48.4956, 0.163615, 156),
('61225', 'Lignères', '31T', 302233, 5401426, 48.7344, 0.310284, 240),
('61226', 'Lignerolles', '31T', 321841, 5384729, 48.5903, 0.583887, 274),
('61227', 'Lignou', '30T', 695400, 5394265, 48.6708, -0.345828, 238),
('61228', 'Livaie', '30T', 719120, 5377733, 48.5144, -0.0327781, 310),
('61229', 'Loisail', '31T', 322001, 5374834, 48.5014, 0.590284, 170),
('61230', 'Longny-au-Perche', '31T', 334099, 5377710, 48.5306, 0.752784, 180),
('61231', 'Longuenoë', '30T', 716459, 5378033, 48.5181, -0.0686071, 249),
('61232', 'Lonlay-l''Abbaye', '30T', 668747, 5390959, 48.6489, -0.708885, 142),
('61233', 'Lonlay-le-Tesson', '30T', 695014, 5391222, 48.6436, -0.352499, 240),
('61234', 'Lonrai', '31T', 281167, 5371879, 48.4619, 0.0397246, 158),
('61235', 'Loré', '30T', 678829, 5373284, 48.4872, -0.579721, 144),
('61236', 'Loucé', '30T', 713071, 5398556, 48.7036, -0.103893, 155),
('61237', 'Lougé-sur-Maire', '30T', 704160, 5397142, 48.6939, -0.225561, 177),
('61238', 'Louvières-en-Auge', '31T', 282317, 5417254, 48.87, 0.0313916, 102),
('61239', 'Lucé', '30T', 677414, 5380378, 48.5514, -0.595837, 150),
('61240', 'Macé', '31T', 289300, 5390861, 48.6353, 0.139997, 185),
('61241', 'La Madeleine-Bouvet', '31T', 344910, 5370853, 48.4717, 0.901666, 172),
('61242', 'Le Mage', '31T', 337763, 5375256, 48.5094, 0.803331, 190),
('61243', 'Magny-le-Désert', '30T', 697223, 5383139, 48.5703, -0.326383, 214),
('61244', 'Mahéru', '31T', 311197, 5392586, 48.6578, 0.436108, 248),
('61245', 'Maison-Maugis', '31T', 330027, 5369272, 48.4536, 0.701106, 140),
('61246', 'Mâle', '31T', 332200, 5348875, 48.2708, 0.738607, 110),
('61247', 'Malétable', '31T', 330278, 5381687, 48.5653, 0.699449, 220),
('61248', 'Mantilly', '30T', 662443, 5376652, 48.5219, -0.800001, 190),
('61249', 'Marcei', '31T', 282400, 5394185, 48.6628, 0.0447189, 177),
('61250', 'Marchainville', '31T', 338697, 5383510, 48.5839, 0.812771, 233),
('61251', 'Marchemaisons', '31T', 300779, 5377676, 48.5206, 0.301942, 150),
('61252', 'Mardilly', '31T', 300638, 5412333, 48.8319, 0.283328, 200),
('61253', 'Marmouillé', '31T', 294197, 5394760, 48.6719, 0.204446, 187),
('61255', 'Mauves-sur-Huisne', '31T', 324036, 5368961, 48.4492, 0.62028, 157),
('61256', 'Médavy', '31T', 285881, 5395782, 48.6783, 0.0911047, 174),
('61257', 'Méhoudin', '30T', 693219, 5375458, 48.5025, -0.384164, 127),
('61258', 'Le Mêle-sur-Sarthe', '31T', 304623, 5376614, 48.5122, 0.35444, 145),
('61259', 'Le Ménil-Bérard', '31T', 316945, 5398052, 48.7086, 0.511666, 240),
('61260', 'Le Ménil-de-Briouze', '30T', 691447, 5394901, 48.6778, -0.39917, 220),
('61261', 'Le Ménil-Broût', '31T', 295396, 5373633, 48.4825, 0.231108, 150),
('61262', 'Le Ménil-Ciboult', '30T', 662393, 5403874, 48.7667, -0.790006, 280),
('61263', 'Ménil-Erreux', '31T', 292364, 5376681, 48.5089, 0.188612, 160),
('61264', 'Ménil-Froger', '31T', 299316, 5401066, 48.7303, 0.270834, 260),
('61265', 'Ménil-Gondouin', '30T', 699054, 5403760, 48.755, -0.291673, 229),
('61266', 'Le Ménil-Guyon', '31T', 300529, 5384516, 48.5819, 0.295284, 170),
('61267', 'Ménil-Hermei', '30T', 696385, 5411671, 48.8269, -0.324166, 173),
('61268', 'Ménil-Hubert-en-Exmes', '31T', 296365, 5410447, 48.8136, 0.226108, 200),
('61269', 'Ménil-Hubert-sur-Orne', '30T', 689842, 5414412, 48.8536, -0.411951, 130),
('61270', 'Ménil-Jean', '30T', 704123, 5402087, 48.7383, -0.223617, 200),
('61271', 'Le Ménil-Scelleur', '30T', 712215, 5388167, 48.6106, -0.120837, 250),
('61272', 'Le Ménil-Vicomte', '31T', 301495, 5403122, 48.7494, 0.299442, 237),
('61273', 'Ménil-Vin', '30T', 696925, 5413731, 48.8453, -0.315827, 120),
('61274', 'Les Menus', '31T', 347516, 5376807, 48.5258, 0.934727, 214),
('61275', 'Le Merlerault', '31T', 300299, 5397662, 48.7, 0.285833, 226),
('61276', 'Merri', '30T', 716888, 5415151, 48.8514, -0.0433322, 100),
('61277', 'La Mesnière', '31T', 310436, 5377868, 48.5253, 0.432499, 170),
('61278', 'Messei', '30T', 681136, 5398577, 48.7139, -0.537496, 214),
('61279', 'Mieuxcé', '31T', 278766, 5365170, 48.4008, 0.0108313, 125),
('61280', 'Monceaux-au-Perche', '31T', 330527, 5372903, 48.4864, 0.706392, 150),
('61281', 'Moncy', '30T', 670033, 5410621, 48.8253, -0.683328, 194),
('61282', 'Monnai', '31T', 309227, 5418802, 48.8928, 0.397225, 247),
('61283', 'Montabard', '30T', 714584, 5410857, 48.8136, -0.0769449, 240),
('61284', 'Montchevrel', '31T', 303829, 5383287, 48.5719, 0.340559, 211),
('61285', 'Montgaroult', '30T', 710818, 5403510, 48.7489, -0.131944, 210),
('61286', 'Montgaudry', '31T', 307632, 5364828, 48.4072, 0.400558, 170),
('61287', 'Montilly-sur-Noireau', '30T', 678239, 5409888, 48.8164, -0.571944, 140),
('61288', 'Montmerrei', '31T', 281950, 5391018, 48.6342, 0.0402828, 200),
('61289', 'Mont-Ormel', '31T', 290799, 5413373, 48.8381, 0.148893, 211),
('61290', 'Montreuil-au-Houlme', '30T', 701471, 5396242, 48.6867, -0.262498, 221),
('61291', 'Montreuil-la-Cambe', '31T', 282261, 5419482, 48.89, 0.0294429, 170),
('61292', 'Montsecret', '30T', 670731, 5407799, 48.7997, -0.675, 140),
('61293', 'Mortagne-au-Perche', '31T', 318900, 5377405, 48.5236, 0.547227, 240),
('61294', 'Mortrée', '31T', 284719, 5391622, 48.6406, 0.077503, 170),
('61295', 'La Motte-Fouquet', '30T', 700203, 5382966, 48.5678, -0.286116, 217),
('61296', 'Moulicent', '31T', 334598, 5381435, 48.5642, 0.758059, 225),
('61297', 'Moulins-la-Marche', '31T', 314057, 5391749, 48.6511, 0.475282, 269),
('61298', 'Moulins-sur-Orne', '30T', 714963, 5404719, 48.7583, -0.0749986, 160),
('61299', 'Moussonvilliers', '31T', 337498, 5389539, 48.6378, 0.794165, 220),
('61300', 'Moutiers-au-Perche', '31T', 340799, 5371523, 48.4767, 0.845831, 160),
('61301', 'Neauphe-sous-Essai', '31T', 294359, 5382945, 48.5658, 0.2125, 184),
('61302', 'Neauphe-sur-Dive', '31T', 285423, 5414227, 48.8439, 0.075277, 130),
('61303', 'Nécy', '30T', 711770, 5412914, 48.8331, -0.114164, 189),
('61304', 'Neuilly-le-Bisson', '31T', 295552, 5375668, 48.5008, 0.232221, 140),
('61305', 'Neuilly-sur-Eure', '31T', 345311, 5378720, 48.5425, 0.904172, 210),
('61306', 'Neuville-près-Sées', '31T', 295570, 5391989, 48.6475, 0.224442, 191),
('61307', 'Neuville-sur-Touques', '31T', 300767, 5415358, 48.8592, 0.283613, 200),
('61308', 'Neuvy-au-Houlme', '30T', 705533, 5411011, 48.8181, -0.200003, 199),
('61309', 'Nocé', '31T', 328358, 5360979, 48.3786, 0.681945, 146),
('61310', 'Nonant-le-Pin', '31T', 295765, 5398474, 48.7058, 0.223884, 190),
('61311', 'Normandel', '31T', 331656, 5390730, 48.6469, 0.714445, 230),
('61313', 'Notre-Dame-du-Rocher', '30T', 690536, 5407821, 48.7942, -0.405561, 154),
('61314', 'Occagnes', '30T', 715184, 5406953, 48.7783, -0.0708274, 167),
('61315', 'Omméel', '31T', 291011, 5409223, 48.8008, 0.153892, 120),
('61316', 'Ommoy', '30T', 718413, 5415798, 48.8567, -0.0222273, 90),
('61317', 'Orgères', '31T', 304834, 5404488, 48.7628, 0.344168, 260),
('61318', 'Origny-le-Butin', '31T', 312497, 5360739, 48.3719, 0.468055, 130),
('61319', 'Origny-le-Roux', '31T', 308897, 5357800, 48.3444, 0.420828, 105),
('61320', 'Orville', '31T', 300258, 5418808, 48.89, 0.274997, 150),
('61321', 'Pacé', '30T', 721348, 5370153, 48.4456, -0.00666331, 160),
('61322', 'Parfondeval', '31T', 315818, 5372931, 48.4825, 0.5075, 182),
('61323', 'Le Pas-Saint-l''Homer', '31T', 347367, 5373597, 48.4969, 0.933884, 221),
('61324', 'Passais', '30T', 665589, 5376465, 48.5194, -0.757502, 160),
('61325', 'La Perrière', '31T', 310669, 5362716, 48.3892, 0.442506, 180),
('61326', 'Perrou', '30T', 680123, 5382937, 48.5736, -0.558054, 210),
('61327', 'Pervenchères', '31T', 309472, 5368134, 48.4375, 0.423893, 171),
('61328', 'Le Pin-au-Haras', '31T', 289068, 5402123, 48.7364, 0.131105, 234),
('61329', 'Le Pin-la-Garenne', '31T', 318632, 5368421, 48.4428, 0.547499, 160),
('61330', 'Planches', '31T', 306373, 5397572, 48.7011, 0.368336, 220),
('61331', 'Le Plantis', '31T', 307029, 5386299, 48.6, 0.382494, 180),
('61332', 'Pointel', '30T', 695126, 5397408, 48.6992, -0.348062, 210),
('61333', 'Pontchardon', '31T', 299803, 5423152, 48.9289, 0.266667, 150),
('61335', 'La Poterie-au-Perche', '31T', 332038, 5388432, 48.6264, 0.720559, 232),
('61336', 'Pouvrai', '31T', 315960, 5350026, 48.2767, 0.519448, 126),
('61337', 'Préaux-du-Perche', '31T', 329838, 5355403, 48.3289, 0.70417, 124),
('61338', 'Prépotin', '31T', 321489, 5387212, 48.6125, 0.578051, 264),
('61339', 'Putanges-Pont-Écrepin', '30T', 702330, 5404743, 48.7628, -0.24667, 140),
('61340', 'Rabodanges', '30T', 699488, 5408783, 48.8, -0.283339, 230),
('61341', 'Radon', '31T', 285882, 5376397, 48.5042, 0.101107, 180),
('61342', 'Rai', '31T', 322295, 5402268, 48.7481, 0.582505, 210),
('61343', 'Randonnai', '31T', 328798, 5391033, 48.6489, 0.675551, 240),
('61344', 'Rânes', '30T', 705516, 5391411, 48.6419, -0.210002, 250),
('61345', 'Rémalard', '31T', 335308, 5366397, 48.4292, 0.773605, 130),
('61346', 'Le Renouard', '31T', 287761, 5421496, 48.91, 0.10333, 170),
('61347', 'Résenlieu', '31T', 300879, 5408213, 48.795, 0.288607, 201),
('61348', 'Réveillon', '31T', 319441, 5372505, 48.4797, 0.556666, 170),
('61349', 'Ri', '30T', 710352, 5408284, 48.7919, -0.135835, 200),
('61350', 'La Roche-Mabile', '30T', 717684, 5375019, 48.4906, -0.0536117, 210),
('61351', 'Roiville', '31T', 297202, 5417743, 48.8794, 0.233884, 200),
('61352', 'Rônai', '30T', 710215, 5410845, 48.815, -0.136387, 230),
('61353', 'Ronfeugerai', '30T', 685478, 5406415, 48.7831, -0.474997, 210),
('61354', 'Les Rotours', '30T', 701531, 5407063, 48.7839, -0.256394, 190),
('61355', 'Rouellé', '30T', 667692, 5385798, 48.6028, -0.725284, 131),
('61356', 'La Rouge', '31T', 329959, 5350486, 48.2847, 0.707783, 110),
('61357', 'Rouperroux', '30T', 715061, 5381287, 48.5478, -0.0858352, 278),
('61358', 'Sai', '31T', 281464, 5403250, 48.7439, 0.0272279, 165),
('61359', 'Saint-Agnan-sur-Erre', '31T', 331388, 5354183, 48.3183, 0.725554, 113),
('61360', 'Saint-Agnan-sur-Sarthe', '31T', 310280, 5387239, 48.6094, 0.426115, 190),
('61361', 'Saint-André-de-Briouze', '30T', 696555, 5401013, 48.7311, -0.326946, 239),
('61362', 'Saint-André-de-Messei', '30T', 682286, 5396543, 48.6953, -0.522775, 216),
('61363', 'Saint-Aquilin-de-Corbion', '31T', 316948, 5389985, 48.6361, 0.515276, 230),
('61364', 'Saint-Aubert-sur-Orne', '30T', 696041, 5407517, 48.7897, -0.330831, 220),
('61365', 'Saint-Aubin-d''Appenai', '31T', 303585, 5379247, 48.5356, 0.33916, 190),
('61366', 'Saint-Aubin-de-Bonneval', '31T', 308009, 5424254, 48.9414, 0.378061, 215),
('61367', 'Saint-Aubin-de-Courteraie', '31T', 311467, 5387199, 48.6094, 0.442221, 183),
('61368', 'Saint-Aubin-des-Grois', '31T', 325418, 5358442, 48.355, 0.643328, 180),
('61369', 'Saint-Bômer-les-Forges', '30T', 674407, 5390668, 48.6447, -0.632228, 240),
('61370', 'Saint-Brice', '30T', 673983, 5381199, 48.5597, -0.641947, 135),
('61371', 'Saint-Brice-sous-Rânes', '30T', 706841, 5395478, 48.6781, -0.190005, 210),
('61372', 'Saint-Céneri-le-Gérei', '30T', 718359, 5362833, 48.3808, -0.0508372, 121),
('61373', 'Sainte-Céronne-lès-Mortagne', '31T', 317887, 5382290, 48.5672, 0.531385, 200),
('61374', 'Saint-Christophe-de-Chaulieu', '30T', 660328, 5401806, 48.7486, -0.818893, 305),
('61375', 'Saint-Christophe-le-Jajolet', '31T', 279614, 5394696, 48.6664, 0.00666291, 174),
('61376', 'Saint-Clair-de-Halouze', '30T', 674673, 5394632, 48.6803, -0.626947, 203),
('61377', 'Saint-Cornier-des-Landes', '30T', 667863, 5398596, 48.7178, -0.717776, 320),
('61378', 'Sainte-Croix-sur-Orne', '30T', 699105, 5406358, 48.7783, -0.289723, 170),
('61379', 'Saint-Cyr-la-Rosière', '31T', 325086, 5355671, 48.33, 0.640001, 140),
('61380', 'Saint-Denis-de-Villenette', '30T', 681726, 5376467, 48.515, -0.539165, 133),
('61381', 'Saint-Denis-sur-Huisne', '31T', 318337, 5371397, 48.4694, 0.542222, 160),
('61382', 'Saint-Denis-sur-Sarthon', '30T', 718112, 5371387, 48.4578, -0.0497209, 190),
('61383', 'Saint-Didier-sous-Écouves', '30T', 718592, 5380217, 48.5369, -0.0386161, 280),
('61384', 'Saint-Ellier-les-Bois', '30T', 714441, 5378172, 48.52, -0.0958277, 270),
('61385', 'Saint-Evroult-de-Montfort', '31T', 302606, 5409697, 48.8089, 0.311383, 213),
('61386', 'Saint-Evroult-Notre-Dame-du-Bois', '31T', 314028, 5407513, 48.7928, 0.467782, 250),
('61387', 'Saint-Fraimbault', '30T', 669925, 5372917, 48.4864, -0.700274, 140),
('61388', 'Saint-Fulgent-des-Ormes', '31T', 310948, 5355042, 48.3203, 0.449717, 90),
('61389', 'Sainte-Gauburge-Sainte-Colombe', '31T', 311280, 5398703, 48.7128, 0.434441, 250),
('61390', 'Saint-Georges-d''Annebecq', '30T', 701564, 5390217, 48.6325, -0.264169, 230),
('61391', 'Saint-Georges-des-Groseillers', '30T', 678216, 5404850, 48.7711, -0.574442, 208),
('61392', 'Saint-Germain-d''Aunay', '31T', 308108, 5422427, 48.925, 0.380272, 215),
('61393', 'Saint-Germain-de-Clairefeuille', '31T', 296858, 5399269, 48.7133, 0.238332, 200),
('61394', 'Saint-Germain-de-la-Coudre', '31T', 322068, 5350110, 48.2792, 0.601662, 110),
('61395', 'Saint-Germain-des-Grois', '31T', 339524, 5362784, 48.3978, 0.831938, 122),
('61396', 'Saint-Germain-de-Martigny', '31T', 313094, 5384950, 48.5897, 0.465283, 200),
('61397', 'Saint-Germain-du-Corbéis', '31T', 282507, 5367684, 48.4247, 0.0600045, 140),
('61398', 'Saint-Germain-le-Vieux', '31T', 302241, 5387732, 48.6114, 0.31694, 210),
('61399', 'Saint-Gervais-des-Sablons', '31T', 285821, 5420859, 48.9036, 0.0772227, 193),
('61400', 'Saint-Gervais-du-Perron', '31T', 289439, 5379757, 48.5356, 0.147506, 180),
('61401', 'Saint-Gilles-des-Marais', '30T', 670213, 5383772, 48.5839, -0.691946, 121),
('61402', 'Saint-Hilaire-de-Briouze', '30T', 696878, 5398211, 48.7058, -0.323895, 240),
('61403', 'Saint-Hilaire-la-Gérard', '31T', 283383, 5387252, 48.6008, 0.061673, 230),
('61404', 'Saint-Hilaire-le-Châtel', '31T', 317584, 5381805, 48.5628, 0.527494, 200),
('61405', 'Saint-Hilaire-sur-Erre', '31T', 332357, 5353505, 48.3125, 0.738883, 130),
('61406', 'Saint-Hilaire-sur-Risle', '31T', 315780, 5400562, 48.7308, 0.494725, 230),
('61407', 'Sainte-Honorine-la-Chardonne', '30T', 684504, 5411173, 48.8261, -0.486106, 195),
('61408', 'Sainte-Honorine-la-Guillaume', '30T', 692417, 5406588, 48.7825, -0.380554, 200),
('61409', 'Saint-Jean-de-la-Forêt', '31T', 325046, 5361049, 48.3783, 0.637226, 223),
('61410', 'Saint-Jean-des-Bois', '30T', 662349, 5399052, 48.7233, -0.792505, 260),
('61411', 'Saint-Jouin-de-Blavou', '31T', 313098, 5369590, 48.4517, 0.47222, 189),
('61412', 'Saint-Julien-sur-Sarthe', '31T', 304747, 5374261, 48.4911, 0.357218, 170),
('61413', 'Saint-Lambert-sur-Dive', '31T', 285387, 5411167, 48.8164, 0.0763883, 94),
('61414', 'Saint-Langis-lès-Mortagne', '31T', 318061, 5376227, 48.5128, 0.536388, 200),
('61415', 'Saint-Léger-sur-Sarthe', '31T', 303445, 5375790, 48.5044, 0.338895, 164),
('61416', 'Saint-Léonard-des-Parcs', '31T', 300234, 5391235, 48.6422, 0.288054, 201),
('61417', 'Saint-Loyer-des-Champs', '31T', 280767, 5398515, 48.7011, 0.020276, 190),
('61418', 'Saint-Mard-de-Réno', '31T', 325171, 5375755, 48.5106, 0.632774, 200),
('61419', 'Sainte-Marguerite-de-Carrouges', '30T', 709805, 5385170, 48.5844, -0.155006, 271),
('61420', 'Sainte-Marie-la-Robert', '30T', 709564, 5389458, 48.6231, -0.156106, 200),
('61421', 'Saint-Mars-d''Égrenne', '30T', 667503, 5381157, 48.5611, -0.729716, 143),
('61422', 'Les Aspres', '31T', 323399, 5395805, 48.6903, 0.600276, 220),
('61423', 'Saint-Martin-d''Écublei', '31T', 329520, 5406648, 48.7894, 0.678893, 210),
('61424', 'Saint-Martin-des-Landes', '30T', 711333, 5381084, 48.5472, -0.136388, 286),
('61425', 'Saint-Martin-des-Pézerits', '31T', 314936, 5389835, 48.6342, 0.48806, 221),
('61426', 'Saint-Martin-du-Vieux-Bellême', '31T', 318186, 5361574, 48.3811, 0.544441, 160),
('61427', 'Saint-Martin-l''Aiguillon', '30T', 708139, 5388632, 48.6161, -0.175833, 230),
('61428', 'Saint-Maurice-du-Désert', '30T', 692437, 5387517, 48.6111, -0.389165, 250),
('61429', 'Saint-Maurice-lès-Charencey', '31T', 334687, 5390733, 48.6478, 0.755562, 209),
('61430', 'Saint-Maurice-sur-Huisne', '31T', 329800, 5367857, 48.4408, 0.698614, 130),
('61431', 'Saint-Michel-des-Andaines', '30T', 690565, 5384084, 48.5808, -0.416111, 194),
('61433', 'Saint-Nicolas-des-Bois', '31T', 279712, 5375707, 48.4958, 0.0180528, 240),
('61434', 'Saint-Nicolas-des-Laitiers', '31T', 310930, 5412532, 48.8369, 0.423332, 260),
('61435', 'Saint-Nicolas-de-Sommaire', '31T', 324426, 5409618, 48.8147, 0.60833, 250),
('61436', 'Sainte-Opportune', '30T', 689873, 5402081, 48.7428, -0.417228, 249),
('61437', 'Saint-Ouen-de-la-Cour', '31T', 321669, 5364955, 48.4125, 0.590002, 180),
('61438', 'Saint-Ouen-de-Sécherouvre', '31T', 315013, 5385969, 48.5994, 0.490828, 206),
('61439', 'Saint-Ouen-le-Brisoult', '30T', 696470, 5376467, 48.5106, -0.339726, 174),
('61440', 'Saint-Ouen-sur-Iton', '31T', 330562, 5400591, 48.7353, 0.695561, 206),
('61441', 'Saint-Ouen-sur-Maire', '30T', 707467, 5398500, 48.705, -0.179994, 170),
('61442', 'Saint-Patrice-du-Désert', '30T', 699210, 5380303, 48.5442, -0.300835, 186),
('61443', 'Saint-Paul', '30T', 674048, 5401566, 48.7428, -0.632507, 270),
('61444', 'Saint-Philbert-sur-Orne', '30T', 692381, 5412954, 48.8397, -0.37806, 101),
('61445', 'Saint-Pierre-d''Entremont', '30T', 672631, 5409063, 48.8106, -0.648618, 150),
('61446', 'Saint-Pierre-des-Loges', '31T', 314195, 5402717, 48.7497, 0.47222, 282),
('61447', 'Saint-Pierre-du-Regard', '30T', 680017, 5412974, 48.8436, -0.546392, 125),
('61448', 'Saint-Pierre-la-Bruyère', '31T', 337359, 5359014, 48.3633, 0.80417, 185),
('61449', 'Saint-Pierre-la-Rivière', '31T', 294484, 5411475, 48.8222, 0.200002, 210),
('61450', 'Saint-Quentin-de-Blavou', '31T', 309097, 5371670, 48.4692, 0.417216, 200),
('61451', 'Saint-Quentin-les-Chardonnets', '30T', 664700, 5406011, 48.7853, -0.75778, 210),
('61452', 'Saint-Roch-sur-Égrenne', '30T', 666345, 5382853, 48.5767, -0.74472, 130),
('61453', 'Saint-Sauveur-de-Carrouges', '30T', 713202, 5385390, 48.5853, -0.10889, 310),
('61454', 'Sainte-Scolasse-sur-Sarthe', '31T', 307638, 5383712, 48.5769, 0.391944, 175),
('61455', 'Saint-Siméon', '30T', 666801, 5370877, 48.4689, -0.743333, 170),
('61456', 'Saint-Sulpice-sur-Risle', '31T', 328059, 5405642, 48.78, 0.659439, 211),
('61457', 'Saint-Symphorien-des-Bruyères', '31T', 322621, 5406770, 48.7886, 0.584995, 267),
('61458', 'Saint-Victor-de-Réno', '31T', 329986, 5374743, 48.5028, 0.698327, 170),
('61459', 'Saires-la-Verrerie', '30T', 684216, 5395710, 48.6872, -0.496944, 230),
('61460', 'Le Sap', '31T', 304980, 5419166, 48.8947, 0.339173, 230),
('61461', 'Le Sap-André', '31T', 307794, 5412113, 48.8322, 0.380837, 250),
('61462', 'Sarceaux', '30T', 717502, 5400396, 48.7186, -0.0427793, 160),
('61463', 'La Sauvagère', '30T', 690381, 5388900, 48.6242, -0.416395, 260),
('61464', 'Sées', '31T', 291647, 5387280, 48.6039, 0.173612, 183),
('61465', 'Ségrie-Fontaine', '30T', 690190, 5411395, 48.8264, -0.408612, 150),
('61466', 'La Selle-la-Forge', '30T', 680778, 5400791, 48.7339, -0.541388, 209),
('61467', 'Semallé', '31T', 289210, 5373088, 48.4756, 0.147775, 141),
('61468', 'Sentilly', '30T', 711970, 5405470, 48.7661, -0.115283, 190),
('61469', 'Sept-Forges', '30T', 681801, 5374121, 48.4939, -0.539172, 130),
('61470', 'Serans', '30T', 710338, 5400493, 48.7219, -0.140005, 150),
('61471', 'Sérigny', '31T', 320576, 5360324, 48.3706, 0.577223, 215),
('61472', 'Sévigny', '30T', 719087, 5407476, 48.7817, -0.017494, 190),
('61473', 'Sevrai', '30T', 710596, 5398524, 48.7042, -0.137506, 160),
('61474', 'Silly-en-Gouffern', '31T', 284697, 5404392, 48.7553, 0.0705495, 196),
('61475', 'Soligny-la-Trappe', '31T', 318385, 5387528, 48.6144, 0.535839, 280),
('61476', 'Suré', '31T', 307368, 5360695, 48.37, 0.398889, 120),
('61477', 'Survie', '31T', 294371, 5413952, 48.8444, 0.197222, 150),
('61478', 'Taillebois', '30T', 688912, 5408755, 48.8031, -0.427222, 170),
('61479', 'Tanques', '30T', 715408, 5396852, 48.6875, -0.0730594, 166),
('61480', 'Tanville', '31T', 278878, 5383779, 48.5681, 0.00249805, 296),
('61481', 'Tellières-le-Plessis', '31T', 307782, 5389117, 48.6256, 0.391392, 210),
('61482', 'Tessé-Froulay', '30T', 689556, 5378116, 48.5275, -0.432495, 162),
('61483', 'Bagnoles-de-l''Orne', '30T', 690043, 5380697, 48.5506, -0.424728, 180),
('61484', 'Le Theil', '31T', 328591, 5348210, 48.2639, 0.69028, 100),
('61485', 'Ticheville', '31T', 299662, 5420931, 48.9089, 0.265835, 150),
('61486', 'Tinchebray', '30T', 666460, 5403839, 48.7653, -0.734718, 221),
('61487', 'Torchamp', '30T', 669945, 5379747, 48.5478, -0.697221, 120),
('61488', 'Touquettes', '31T', 310886, 5408206, 48.7981, 0.424726, 260),
('61489', 'Les Tourailles', '30T', 691312, 5403644, 48.7564, -0.396949, 190),
('61490', 'Tournai-sur-Dive', '31T', 283106, 5410792, 48.8122, 0.045556, 110),
('61491', 'Tourouvre', '31T', 327082, 5384503, 48.5897, 0.654994, 266),
('61492', 'Trémont', '31T', 298986, 5386704, 48.6011, 0.273327, 200),
('61493', 'La Trinité-des-Laitiers', '31T', 307418, 5408324, 48.7981, 0.377496, 305),
('61494', 'Trun', '31T', 282407, 5414344, 48.8439, 0.0341635, 90),
('61496', 'Urou-et-Crennes', '31T', 280702, 5403650, 48.7472, 0.0166641, 160),
('61497', 'Valframbert', '31T', 286336, 5372083, 48.4656, 0.109451, 145),
('61498', 'Vaunoise', '31T', 313962, 5358960, 48.3564, 0.488604, 100),
('61499', 'Les Ventes-de-Bourse', '31T', 298911, 5376537, 48.5097, 0.277222, 145),
('61500', 'La Ventrouze', '31T', 330205, 5386757, 48.6108, 0.696389, 270),
('61501', 'Verrières', '31T', 334488, 5362249, 48.3917, 0.764165, 140),
('61502', 'Vidai', '31T', 306385, 5370495, 48.4578, 0.381108, 150),
('61503', 'Vieux-Pont', '30T', 710229, 5392482, 48.65, -0.145559, 185),
('61504', 'Villebadin', '31T', 290957, 5406690, 48.7781, 0.154446, 141),
('61505', 'Villedieu-lès-Bailleul', '31T', 281284, 5411203, 48.8153, 0.0205533, 141),
('61506', 'Villers-en-Ouche', '31T', 313503, 5415041, 48.8603, 0.457218, 248),
('61507', 'Villiers-sous-Mortagne', '31T', 322443, 5379116, 48.54, 0.594439, 220),
('61508', 'Vimoutiers', '31T', 294966, 5423452, 48.93, 0.200557, 110),
('61509', 'Vingt-Hanaps', '31T', 288564, 5378337, 48.5225, 0.136387, 220),
('61510', 'Vitrai-sous-Laigle', '31T', 331557, 5398336, 48.7153, 0.710003, 230),
('61511', 'Vrigny', '30T', 719184, 5395050, 48.67, -0.0227782, 185),
('61512', 'Les Yveteaux', '30T', 700579, 5398280, 48.7053, -0.273614, 240),
('61513', 'Yvrandes', '30T', 665422, 5398863, 48.7208, -0.75083, 300),
('62001', 'Ablain-Saint-Nazaire', '31T', 479327, 5582374, 50.3931, 2.70916, 90),
('62002', 'Ablainzevelle', '31T', 480691, 5555498, 50.1514, 2.72972, 140),
('62003', 'Acheville', '31T', 491666, 5581259, 50.3833, 2.88278, 60),
('62004', 'Achicourt', '31T', 482719, 5569050, 50.2733, 2.75749, 75),
('62005', 'Achiet-le-Grand', '31T', 484574, 5553138, 50.1303, 2.78417, 120),
('62006', 'Achiet-le-Petit', '31T', 482268, 5552435, 50.1239, 2.75194, 125),
('62007', 'Acq', '31T', 475454, 5577449, 50.3486, 2.655, 90),
('62008', 'Acquin-Westbécourt', '31T', 435694, 5619918, 50.7275, 2.08888, 80),
('62009', 'Adinfer', '31T', 478982, 5560076, 50.1925, 2.70555, 125),
('62010', 'Affringues', '31T', 434739, 5615667, 50.6892, 2.0761, 70),
('62011', 'Agnez-lès-Duisans', '31T', 475671, 5572969, 50.3083, 2.65834, 75),
('62012', 'Agnières', '31T', 471881, 5578239, 50.3556, 2.60472, 95),
('62013', 'Agny', '31T', 482734, 5567475, 50.2592, 2.75778, 70),
('62014', 'Aire-sur-la-Lys', '31T', 457416, 5609966, 50.64, 2.39777, 22),
('62015', 'Airon-Notre-Dame', '31T', 404800, 5587980, 50.4361, 1.65945, 15),
('62016', 'Airon-Saint-Vaast', '31T', 405441, 5587412, 50.4311, 1.66861, 15),
('62017', 'Aix-en-Ergny', '31T', 428848, 5603789, 50.5817, 1.995, 115),
('62018', 'Aix-en-Issart', '31T', 419013, 5592253, 50.4767, 1.85862, 25),
('62019', 'Aix-Noulette', '31T', 479441, 5586142, 50.4269, 2.71056, 70),
('62020', 'Alembon', '31T', 421595, 5626414, 50.7842, 1.88777, 100),
('62021', 'Alette', '31T', 416996, 5596857, 50.5178, 1.82917, 35),
('62022', 'Alincthun', '31T', 415390, 5620578, 50.7308, 1.80111, 98),
('62023', 'Allouagne', '31T', 464878, 5597771, 50.5308, 2.50445, 32),
('62024', 'Alquines', '31T', 428990, 5621488, 50.7408, 1.99361, 101),
('62025', 'Ambleteuse', '31T', 401754, 5629530, 50.8092, 1.60556, 25),
('62026', 'Ambricourt', '31T', 441514, 5591338, 50.4711, 2.17583, 125),
('62027', 'Ambrines', '31T', 461925, 5573267, 50.3103, 2.46527, 125),
('62028', 'Ames', '31T', 458489, 5599084, 50.5422, 2.41416, 65),
('62029', 'Amettes', '31T', 456983, 5597768, 50.5303, 2.39306, 80),
('62030', 'Amplier', '31T', 457220, 5553874, 50.1356, 2.40139, 75),
('62031', 'Andres', '31T', 423545, 5635128, 50.8628, 1.91361, 5),
('62032', 'Angres', '31T', 482729, 5584246, 50.41, 2.75694, 51),
('62033', 'Annay', '31T', 491404, 5590063, 50.4625, 2.87889, 27),
('62034', 'Annequin', '31T', 480518, 5594663, 50.5036, 2.72528, 28),
('62035', 'Annezin', '31T', 472814, 5598126, 50.5344, 2.61639, 26),
('62036', 'Anvin', '31T', 447024, 5588407, 50.4453, 2.25389, 60),
('62037', 'Anzin-Saint-Aubin', '31T', 481607, 5573501, 50.3133, 2.74167, 70),
('62038', 'Ardres', '31T', 428276, 5636482, 50.8756, 1.98056, 11),
('62039', 'Arleux-en-Gohelle', '31T', 490734, 5579130, 50.3642, 2.86972, 56),
('62040', 'Arques', '31T', 450250, 5620656, 50.7356, 2.295, 10),
('62041', 'Arras', '31T', 483418, 5570808, 50.2892, 2.76723, 61),
('62042', 'Athies', '31T', 488289, 5572247, 50.3022, 2.83556, 62),
('62043', 'Les Attaques', '31T', 424982, 5639834, 50.9053, 1.93306, 2),
('62044', 'Attin', '31T', 411115, 5593864, 50.49, 1.74695, 7),
('62045', 'Aubigny-en-Artois', '31T', 470890, 5577688, 50.3506, 2.59083, 95),
('62046', 'Aubin-Saint-Vaast', '31T', 427042, 5582714, 50.3919, 1.97361, 21),
('62047', 'Aubrometz', '31T', 441446, 5572712, 50.3036, 2.17778, 50),
('62048', 'Auchel', '31T', 462615, 5595223, 50.5078, 2.47278, 97),
('62049', 'Auchy-au-Bois', '31T', 455332, 5600438, 50.5542, 2.36945, 90),
('62050', 'Auchy-lès-Hesdin', '31T', 436193, 5583368, 50.3989, 2.10222, 35),
('62051', 'Auchy-les-Mines', '31T', 484559, 5595669, 50.5128, 2.78222, 25),
('62052', 'Audembert', '31T', 407962, 5635195, 50.8611, 1.69223, 60),
('62053', 'Audincthun', '31T', 438688, 5604313, 50.5875, 2.13388, 100),
('62054', 'Audinghen', '31T', 402293, 5634279, 50.8519, 1.61194, 62),
('62055', 'Audrehem', '31T', 428875, 5625969, 50.7811, 1.99111, 62),
('62056', 'Audresselles', '31T', 400904, 5631184, 50.8239, 1.59306, 5),
('62057', 'Audruicq', '31T', 435334, 5636698, 50.8783, 2.08083, 7),
('62058', 'Aumerval', '31T', 457434, 5595169, 50.5069, 2.39972, 132),
('62059', 'Autingues', '31T', 428615, 5632739, 50.8419, 1.98611, 25),
('62060', 'Auxi-le-Château', '31T', 436761, 5564765, 50.2317, 2.11333, 30),
('62061', 'Averdoingt', '31T', 460214, 5577140, 50.345, 2.44084, 148),
('62062', 'Avesnes', '31T', 427147, 5600290, 50.55, 1.97166, 137),
('62063', 'Avesnes-le-Comte', '31T', 466333, 5569623, 50.2778, 2.5275, 125),
('62064', 'Avesnes-lès-Bapaume', '31T', 488201, 5550596, 50.1075, 2.835, 114),
('62065', 'Avion', '31T', 487624, 5584109, 50.4089, 2.82583, 40),
('62066', 'Avondance', '31T', 435963, 5592082, 50.4772, 2.09749, 130),
('62067', 'Avroult', '31T', 439535, 5609524, 50.6344, 2.145, 135),
('62068', 'Ayette', '31T', 480580, 5557722, 50.1714, 2.72806, 105),
('62069', 'Azincourt', '31T', 438152, 5590449, 50.4628, 2.12861, 120),
('62070', 'Bailleul-aux-Cornailles', '31T', 460275, 5580074, 50.3714, 2.44138, 142),
('62071', 'Bailleul-lès-Pernes', '31T', 456509, 5595208, 50.5072, 2.38667, 120),
('62072', 'Bailleulmont', '31T', 472294, 5562639, 50.2153, 2.61167, 135),
('62073', 'Bailleul-Sir-Berthoult', '31T', 489345, 5576229, 50.3381, 2.85027, 70),
('62074', 'Bailleulval', '31T', 473803, 5563311, 50.2214, 2.63277, 120),
('62075', 'Baincthun', '31T', 406900, 5618406, 50.71, 1.68139, 32),
('62076', 'Bainghen', '31T', 422895, 5622903, 50.7528, 1.90695, 111),
('62077', 'Bajus', '31T', 462981, 5585676, 50.4219, 2.47888, 90),
('62078', 'Balinghem', '31T', 425750, 5634818, 50.8603, 1.945, 5),
('62079', 'Bancourt', '31T', 491934, 5549786, 50.1003, 2.88722, 109),
('62080', 'Bapaume', '31T', 489352, 5549915, 50.1014, 2.85111, 125),
('62081', 'Baralle', '31T', 504063, 5562167, 50.2117, 3.05694, 55),
('62082', 'Barastre', '31T', 495031, 5547095, 50.0761, 2.93056, 125),
('62083', 'Barlin', '31T', 472986, 5589445, 50.4564, 2.61945, 70),
('62084', 'Barly', '31T', 467541, 5566558, 50.2503, 2.54472, 125),
('62085', 'Basseux', '31T', 474618, 5563801, 50.2258, 2.64416, 105),
('62086', 'Bavincourt', '31T', 469070, 5563830, 50.2258, 2.56639, 145),
('62087', 'Bayenghem-lès-Éperlecques', '31T', 438328, 5628691, 50.8067, 2.12473, 30);
INSERT INTO `ods_communes` (`oc_code_insee`, `oc_nom`, `oc_secteur`, `oc_x_utm`, `oc_y_utm`, `oc_latitude`, `oc_longitude`, `oc_altitude`) VALUES
('62088', 'Bayenghem-lès-Seninghem', '31T', 434715, 5616872, 50.7, 2.07555, 70),
('62089', 'Bazinghen', '31T', 405720, 5631249, 50.8253, 1.66139, 80),
('62090', 'Béalencourt', '31T', 437604, 5587428, 50.4356, 2.12139, 105),
('62091', 'Beaudricourt', '31T', 457617, 5566350, 50.2478, 2.40555, 150),
('62092', 'Beaufort-Blavincourt', '31T', 464336, 5569945, 50.2806, 2.49945, 150),
('62093', 'Beaulencourt', '31T', 491373, 5546853, 50.0739, 2.87944, 125),
('62094', 'Beaumerie-Saint-Martin', '31T', 414755, 5589849, 50.4544, 1.79917, 10),
('62095', 'Beaumetz-lès-Aire', '31T', 445163, 5599083, 50.5411, 2.22611, 182),
('62096', 'Beaumetz-lès-Cambrai', '31T', 498908, 5552220, 50.1222, 2.98472, 100),
('62097', 'Beaumetz-lès-Loges', '31T', 475458, 5565558, 50.2417, 2.65583, 125),
('62099', 'Beaurains', '31T', 484794, 5567839, 50.2625, 2.78666, 95),
('62100', 'Beaurainville', '31T', 421962, 5586401, 50.4244, 1.90139, 15),
('62101', 'Beauvois', '31T', 445365, 5580577, 50.3747, 2.23166, 116),
('62102', 'Bécourt', '31T', 423058, 5610018, 50.6369, 1.91194, 155),
('62103', 'Béhagnies', '31T', 487812, 5554242, 50.1403, 2.82944, 105),
('62104', 'Bellebrune', '31T', 413462, 5620209, 50.7272, 1.77389, 84),
('62105', 'Belle-et-Houllefort', '31T', 412377, 5622173, 50.7447, 1.75805, 35),
('62106', 'Bellonne', '31T', 503106, 5572328, 50.3031, 3.04361, 60),
('62107', 'Bénifontaine', '31T', 487901, 5592973, 50.4886, 2.82944, 27),
('62108', 'Berck', '31T', 398504, 5584822, 50.4067, 1.57167, 7),
('62109', 'Bergueneuse', '31T', 446912, 5590972, 50.4683, 2.25195, 75),
('62111', 'Berlencourt-le-Cauroy', '31T', 459131, 5570013, 50.2808, 2.42639, 95),
('62112', 'Berles-au-Bois', '31T', 473393, 5560533, 50.1964, 2.62722, 140),
('62113', 'Berles-Monchel', '31T', 467151, 5577093, 50.345, 2.53833, 100),
('62114', 'Bermicourt', '31T', 445068, 5584287, 50.4081, 2.22694, 134),
('62115', 'Berneville', '31T', 476579, 5568209, 50.2656, 2.67138, 100),
('62116', 'Bernieulles', '31T', 413185, 5601058, 50.555, 1.77445, 55),
('62117', 'Bertincourt', '31T', 498569, 5547927, 50.0836, 2.98, 125),
('62118', 'Béthonsart', '31T', 467923, 5580578, 50.3764, 2.54888, 140),
('62119', 'Béthune', '31T', 474462, 5597098, 50.5253, 2.63972, 33),
('62120', 'Beugin', '31T', 465581, 5587882, 50.4419, 2.51528, 65),
('62121', 'Beugnâtre', '31T', 491344, 5552968, 50.1289, 2.8789, 110),
('62122', 'Beugny', '31T', 495174, 5551914, 50.1194, 2.93249, 110),
('62123', 'Beussent', '31T', 414528, 5600140, 50.5469, 1.79362, 32),
('62124', 'Beutin', '31T', 409579, 5593982, 50.4908, 1.72527, 10),
('62125', 'Beuvrequen', '31T', 405888, 5628651, 50.8019, 1.66445, 27),
('62126', 'Beuvry', '31T', 477334, 5596282, 50.5181, 2.68028, 30),
('62127', 'Bezinghem', '31T', 416915, 5605447, 50.595, 1.82611, 75),
('62128', 'Biache-Saint-Vaast', '31T', 496143, 5573286, 50.3117, 2.94583, 45),
('62129', 'Biefvillers-lès-Bapaume', '31T', 487310, 5551463, 50.1153, 2.82251, 128),
('62130', 'Bienvillers-au-Bois', '31T', 472726, 5558035, 50.1739, 2.61805, 150),
('62131', 'Bihucourt', '31T', 485565, 5552579, 50.1253, 2.79806, 120),
('62132', 'Billy-Berclau', '31T', 489897, 5595934, 50.5153, 2.8575, 25),
('62133', 'Billy-Montigny', '31T', 493744, 5584840, 50.4156, 2.91195, 33),
('62134', 'Bimont', '31T', 422314, 5599556, 50.5428, 1.90361, 100),
('62135', 'Blairville', '31T', 479688, 5563192, 50.2206, 2.71527, 110),
('62137', 'Blangerval-Blangermont', '31T', 444990, 5574898, 50.3236, 2.22722, 81),
('62138', 'Blangy-sur-Ternoise', '31T', 440939, 5585784, 50.4211, 2.16861, 49),
('62139', 'Blendecques', '31T', 449288, 5618471, 50.7158, 2.28167, 25),
('62140', 'Bléquin', '31T', 428520, 5612906, 50.6636, 1.98861, 111),
('62141', 'Blessy', '31T', 452600, 5607351, 50.6161, 2.33, 30),
('62142', 'Blingel', '31T', 439327, 5584628, 50.4106, 2.14611, 38),
('62143', 'Boffles', '31T', 442949, 5567135, 50.2536, 2.19972, 120),
('62144', 'Boiry-Becquerelle', '31T', 487157, 5562428, 50.2139, 2.82, 72),
('62145', 'Boiry-Notre-Dame', '31T', 495982, 5568931, 50.2725, 2.94362, 75),
('62146', 'Boiry-Saint-Martin', '31T', 482812, 5560958, 50.2006, 2.75917, 85),
('62147', 'Boiry-Sainte-Rictrude', '31T', 482238, 5561237, 50.2031, 2.75111, 90),
('62148', 'Bois-Bernard', '31T', 493700, 5581102, 50.3819, 2.91139, 61),
('62149', 'Boisdinghem', '31T', 436117, 5622385, 50.7497, 2.09445, 15),
('62150', 'Boisjean', '31T', 412401, 5584697, 50.4078, 1.76722, 69),
('62151', 'Boisleux-au-Mont', '31T', 484282, 5561941, 50.2094, 2.77972, 79),
('62152', 'Boisleux-Saint-Marc', '31T', 485651, 5562339, 50.2131, 2.79889, 75),
('62153', 'Bomy', '31T', 445713, 5602753, 50.5742, 2.23334, 100),
('62154', 'Bonnières', '31T', 446999, 5566136, 50.245, 2.25667, 140),
('62155', 'Bonningues-lès-Ardres', '31T', 430459, 5627245, 50.7928, 2.01334, 45),
('62156', 'Bonningues-lès-Calais', '31T', 413799, 5638184, 50.8889, 1.77444, 70),
('62157', 'Boubers-lès-Hesmond', '31T', 425554, 5592002, 50.4753, 1.95083, 50),
('62158', 'Boubers-sur-Canche', '31T', 445607, 5571370, 50.2919, 2.23639, 70),
('62160', 'Boulogne-sur-Mer', '31T', 401916, 5620475, 50.7278, 1.61028, 50),
('62161', 'Bouquehault', '31T', 423000, 5631335, 50.8286, 1.90667, 57),
('62162', 'Bourecq', '31T', 459813, 5602286, 50.5711, 2.4325, 30),
('62163', 'Bouret-sur-Canche', '31T', 451655, 5568439, 50.2661, 2.32167, 77),
('62164', 'Bourlon', '31T', 508092, 5558403, 50.1778, 3.11333, 75),
('62165', 'Bournonville', '31T', 418857, 5617805, 50.7064, 1.85084, 50),
('62166', 'Bours', '31T', 457821, 5589421, 50.4553, 2.40583, 100),
('62167', 'Boursin', '31T', 417842, 5625637, 50.7767, 1.83472, 105),
('62168', 'Bourthes', '31T', 424502, 5606599, 50.6064, 1.93305, 125),
('62169', 'Bouvelinghem', '31T', 431804, 5620771, 50.7347, 2.03362, 165),
('62170', 'Bouvigny-Boyeffles', '31T', 476617, 5585660, 50.4225, 2.67083, 125),
('62171', 'Boyaval', '31T', 450585, 5591646, 50.4747, 2.30361, 103),
('62172', 'Boyelles', '31T', 486897, 5561255, 50.2033, 2.81639, 75),
('62173', 'Brebières', '31T', 501344, 5576002, 50.3361, 3.01889, 40),
('62174', 'Brêmes', '31T', 426479, 5633849, 50.8517, 1.95555, 10),
('62175', 'Brévillers', '31T', 429957, 5577670, 50.3469, 2.01555, 120),
('62176', 'Bréxent-Énocq', '31T', 410069, 5596136, 50.5103, 1.73166, 11),
('62177', 'Brimeux', '31T', 417298, 5588511, 50.4428, 1.83528, 20),
('62178', 'Bruay-la-Buissière', '31T', 468086, 5591110, 50.4711, 2.55028, 55),
('62179', 'Brunembert', '31T', 421832, 5618655, 50.7144, 1.89278, 85),
('62180', 'Brias', '31T', 455886, 5584402, 50.41, 2.37916, 155),
('62181', 'Bucquoy', '31T', 479078, 5554145, 50.1392, 2.70722, 130),
('62182', 'Buire-au-Bois', '31T', 439456, 5568224, 50.2631, 2.15056, 64),
('62183', 'Buire-le-Sec', '31T', 416936, 5581813, 50.3825, 1.83166, 75),
('62184', 'Buissy', '31T', 502755, 5561455, 50.2053, 3.03861, 55),
('62185', 'Bullecourt', '31T', 494805, 5560037, 50.1925, 2.92722, 90),
('62186', 'Bully-les-Mines', '31T', 480140, 5588456, 50.4478, 2.72028, 55),
('62187', 'Buneville', '31T', 454048, 5574997, 50.3253, 2.35444, 155),
('62188', 'Burbure', '31T', 462206, 5598624, 50.5383, 2.46666, 48),
('62189', 'Bus', '31T', 497455, 5546013, 50.0664, 2.96444, 130),
('62190', 'Busnes', '31T', 465746, 5604190, 50.5886, 2.51611, 19),
('62191', 'Caffiers', '31T', 416465, 5632611, 50.8392, 1.81361, 110),
('62192', 'Cagnicourt', '31T', 499723, 5562073, 50.2108, 2.99612, 70),
('62193', 'Calais', '31T', 420117, 5644911, 50.9503, 1.86277, 5),
('62194', 'Calonne-Ricouart', '31T', 463074, 5593243, 50.49, 2.47945, 60),
('62195', 'Calonne-sur-la-Lys', '31T', 472884, 5607917, 50.6225, 2.61667, 15),
('62196', 'La Calotterie', '31T', 409688, 5592250, 50.4753, 1.72723, 8),
('62197', 'Camblain-Châtelain', '31T', 461769, 5592603, 50.4842, 2.46111, 62),
('62198', 'Cambligneul', '31T', 472448, 5580923, 50.3797, 2.61249, 140),
('62199', 'Camblain-l''Abbé', '31T', 474065, 5580328, 50.3744, 2.63528, 120),
('62200', 'Cambrin', '31T', 482277, 5596417, 50.5194, 2.75, 25),
('62201', 'Camiers', '31T', 401762, 5602804, 50.5689, 1.61278, 20),
('62202', 'Campagne-lès-Boulonnais', '31T', 430165, 5608188, 50.6214, 2.01277, 165),
('62203', 'Campagne-lès-Guines', '31T', 422881, 5632573, 50.8397, 1.90472, 45),
('62204', 'Campagne-lès-Hesdin', '31T', 420320, 5583552, 50.3986, 1.87888, 94),
('62205', 'Campagne-lès-Wardrecques', '31T', 452977, 5618684, 50.7181, 2.33389, 26),
('62206', 'Campigneulles-les-Grandes', '31T', 408662, 5587695, 50.4342, 1.71388, 47),
('62207', 'Campigneulles-les-Petites', '31T', 410182, 5588843, 50.4447, 1.73501, 50),
('62208', 'Canettemont', '31T', 454676, 5569802, 50.2786, 2.36389, 143),
('62209', 'Canlers', '31T', 439144, 5592662, 50.4828, 2.14223, 140),
('62210', 'Canteleux', '31T', 450355, 5562829, 50.2156, 2.30416, 146),
('62211', 'Capelle-Fermont', '31T', 472827, 5577801, 50.3517, 2.61805, 90),
('62212', 'Capelle-lès-Hesdin', '31T', 428607, 5577194, 50.3425, 1.99667, 105),
('62213', 'Carency', '31T', 478887, 5580801, 50.3789, 2.70306, 100),
('62214', 'Carly', '31T', 408276, 5611863, 50.6514, 1.7025, 25),
('62215', 'Carvin', '31T', 496828, 5593176, 50.4906, 2.95528, 28),
('62216', 'La Cauchie', '31T', 470185, 5561167, 50.2019, 2.58223, 160),
('62217', 'Cauchy-à-la-Tour', '31T', 460861, 5595081, 50.5064, 2.44806, 109),
('62218', 'Caucourt', '31T', 469399, 5583009, 50.3983, 2.56944, 90),
('62219', 'Caumont', '31T', 430842, 5571264, 50.2894, 2.02916, 34),
('62220', 'Cavron-Saint-Martin', '31T', 429133, 5585435, 50.4167, 2.00251, 30),
('62221', 'Chelers', '31T', 463262, 5580546, 50.3758, 2.48334, 145),
('62222', 'Chériennes', '31T', 431214, 5573978, 50.3139, 2.03389, 105),
('62223', 'Chérisy', '31T', 493799, 5564609, 50.2336, 2.91305, 65),
('62224', 'Chocques', '31T', 469432, 5598886, 50.5411, 2.56861, 25),
('62225', 'Clairmarais', '31T', 450468, 5625040, 50.775, 2.2975, 4),
('62226', 'Clarques', '31T', 448800, 5610661, 50.6456, 2.27584, 65),
('62227', 'Clenleu', '31T', 420076, 5597365, 50.5228, 1.8725, 61),
('62228', 'Clerques', '31T', 429168, 5627355, 50.7936, 1.995, 50),
('62229', 'Cléty', '31T', 442092, 5611565, 50.6531, 2.18083, 118),
('62230', 'Colembert', '31T', 418126, 5622512, 50.7486, 1.83944, 85),
('62231', 'Colline-Beaumont', '31T', 406587, 5577444, 50.3417, 1.68722, 9),
('62232', 'La Comté', '31T', 464268, 5586192, 50.4267, 2.49695, 82),
('62233', 'Conchil-le-Temple', '31T', 405141, 5579509, 50.36, 1.66639, 9),
('62234', 'Conchy-sur-Canche', '31T', 442609, 5572297, 50.3, 2.19417, 54),
('62235', 'Condette', '31T', 403491, 5612288, 50.6544, 1.63472, 45),
('62236', 'Contes', '31T', 426593, 5584512, 50.4081, 1.96694, 25),
('62237', 'Conteville-lès-Boulogne', '31T', 410420, 5622330, 50.7458, 1.73028, 35),
('62238', 'Conteville-en-Ternois', '31T', 451963, 5587062, 50.4336, 2.32361, 142),
('62239', 'Coquelles', '31T', 415621, 5643252, 50.9347, 1.79917, 10),
('62240', 'Corbehem', '31T', 503578, 5575880, 50.335, 3.05028, 30),
('62241', 'Cormont', '31T', 410401, 5601723, 50.5606, 1.735, 44),
('62242', 'Couin', '31T', 466330, 5553469, 50.1325, 2.52889, 135),
('62243', 'Coullemont', '31T', 462265, 5562608, 50.2144, 2.47111, 150),
('62244', 'Coulogne', '31T', 421540, 5642201, 50.9261, 1.88361, 5),
('62245', 'Coulomby', '31T', 430154, 5617611, 50.7061, 2.01084, 117),
('62246', 'Coupelle-Neuve', '31T', 437511, 5594565, 50.4997, 2.11889, 130),
('62247', 'Coupelle-Vieille', '31T', 436244, 5597330, 50.5244, 2.10056, 113),
('62248', 'Courcelles-le-Comte', '31T', 483731, 5556816, 50.1633, 2.77222, 120),
('62249', 'Courcelles-lès-Lens', '31T', 501184, 5584990, 50.4169, 3.01667, 28),
('62250', 'Courrières', '31T', 496115, 5589285, 50.4556, 2.94527, 28),
('62251', 'Courset', '31T', 417988, 5611176, 50.6467, 1.84, 151),
('62252', 'La Couture', '31T', 479645, 5603346, 50.5817, 2.71249, 18),
('62253', 'Couturelle', '31T', 464223, 5561946, 50.2086, 2.49861, 155),
('62254', 'Coyecques', '31T', 442031, 5606005, 50.6031, 2.18084, 51),
('62255', 'Crémarest', '31T', 414214, 5617014, 50.6986, 1.78528, 35),
('62256', 'Crépy', '31T', 443153, 5591598, 50.4736, 2.19889, 125),
('62257', 'Créquy', '31T', 432361, 5593980, 50.4939, 2.04639, 105),
('62258', 'Croisette', '31T', 447179, 5578243, 50.3539, 2.2575, 139),
('62259', 'Croisilles', '31T', 491317, 5560782, 50.1992, 2.87834, 80),
('62260', 'Croix-en-Ternois', '31T', 448574, 5581441, 50.3828, 2.27667, 125),
('62261', 'Cucq', '31T', 402303, 5592722, 50.4783, 1.62306, 5),
('62262', 'Cuinchy', '31T', 481506, 5595586, 50.5119, 2.73917, 22),
('62263', 'Dainville', '31T', 480110, 5569986, 50.2817, 2.72083, 75),
('62264', 'Dannes', '31T', 401885, 5605181, 50.5903, 1.61389, 25),
('62265', 'Delettes', '31T', 444291, 5607772, 50.6192, 2.2125, 44),
('62266', 'Denier', '31T', 460227, 5570993, 50.2897, 2.44167, 120),
('62268', 'Desvres', '31T', 417596, 5613747, 50.6697, 1.83389, 99),
('62269', 'Diéval', '31T', 460625, 5587237, 50.4358, 2.44555, 125),
('62270', 'Divion', '31T', 464953, 5591284, 50.4725, 2.50612, 60),
('62271', 'Dohem', '31T', 442290, 5609895, 50.6381, 2.18389, 130),
('62272', 'Douchy-lès-Ayette', '31T', 479490, 5558035, 50.1742, 2.71278, 105),
('62273', 'Doudeauville', '31T', 417257, 5607172, 50.6106, 1.83056, 83),
('62274', 'Dourges', '31T', 498876, 5586967, 50.4347, 2.98417, 29),
('62275', 'Douriez', '31T', 420090, 5576111, 50.3317, 1.87723, 20),
('62276', 'Douvrin', '31T', 488103, 5595227, 50.5089, 2.83222, 22),
('62277', 'Drocourt', '31T', 494846, 5582028, 50.3903, 2.9275, 50),
('62278', 'Drouvin-le-Marais', '31T', 473540, 5593705, 50.4947, 2.62695, 45),
('62279', 'Duisans', '31T', 477470, 5572900, 50.3078, 2.6836, 70),
('62280', 'Dury', '31T', 500396, 5566181, 50.2478, 3.00555, 70),
('62281', 'Echinghen', '31T', 404475, 5617770, 50.7039, 1.64722, 20),
('62282', 'Éclimeux', '31T', 441465, 5583338, 50.3992, 2.17639, 115),
('62283', 'Écoivres', '31T', 449241, 5574794, 50.3231, 2.28695, 136),
('62284', 'Écourt-Saint-Quentin', '31T', 505050, 5566399, 50.2497, 3.07083, 45),
('62285', 'Écoust-Saint-Mein', '31T', 493535, 5558803, 50.1814, 2.90945, 95),
('62286', 'Ecquedecques', '31T', 460650, 5601168, 50.5611, 2.44444, 40),
('62288', 'Ecques', '31T', 449553, 5613403, 50.6703, 2.28611, 35),
('62289', 'Écuires', '31T', 412330, 5588715, 50.4439, 1.76528, 15),
('62290', 'Écurie', '31T', 483491, 5575287, 50.3294, 2.76805, 100),
('62291', 'Éleu-dit-Leauwette', '31T', 486778, 5585223, 50.4189, 2.81389, 50),
('62292', 'Elnes', '31T', 438076, 5615750, 50.6903, 2.12333, 45),
('62293', 'Embry', '31T', 426845, 5594085, 50.4942, 1.96862, 85),
('62294', 'Enguinegatte', '31T', 448462, 5606246, 50.6058, 2.27167, 90),
('62295', 'Enquin-les-Mines', '31T', 449348, 5604415, 50.5894, 2.28444, 75),
('62296', 'Enquin-sur-Baillons', '31T', 417662, 5602963, 50.5728, 1.83722, 55),
('62297', 'Éperlecques', '31T', 440147, 5628546, 50.8056, 2.15056, 15),
('62298', 'Épinoy', '31T', 511630, 5564185, 50.2297, 3.16306, 75),
('62299', 'Eps', '31T', 449992, 5589397, 50.4544, 2.29555, 75),
('62300', 'Équihen-Plage', '31T', 398989, 5615123, 50.6792, 1.57028, 60),
('62301', 'Équirre', '31T', 445539, 5591634, 50.4742, 2.2325, 90),
('62302', 'Ergny', '31T', 427907, 5604017, 50.5836, 1.98167, 115),
('62303', 'Érin', '31T', 443880, 5587667, 50.4383, 2.20972, 51),
('62304', 'Erny-Saint-Julien', '31T', 446985, 5604037, 50.5858, 2.25112, 75),
('62306', 'Ervillers', '31T', 487183, 5556590, 50.1614, 2.82056, 105),
('62307', 'Escalles', '31T', 409519, 5641502, 50.9181, 1.71278, 45),
('62309', 'Esquerdes', '31T', 442255, 5617432, 50.7058, 2.18222, 30),
('62310', 'Essars', '31T', 476148, 5599716, 50.5489, 2.66333, 20),
('62311', 'Estevelles', '31T', 493495, 5591419, 50.4747, 2.90833, 31),
('62312', 'Estrée', '31T', 414303, 5594830, 50.4992, 1.79166, 15),
('62313', 'Estrée-Blanche', '31T', 452142, 5604606, 50.5914, 2.32388, 50),
('62314', 'Estrée-Cauchy', '31T', 472143, 5582870, 50.3972, 2.60806, 155),
('62315', 'Estréelles', '31T', 413893, 5595053, 50.5011, 1.78583, 15),
('62316', 'Estrée-Wamin', '31T', 456844, 5568703, 50.2689, 2.39444, 95),
('62317', 'Étaing', '31T', 499980, 5568991, 50.2731, 2.99972, 45),
('62318', 'Étaples', '31T', 403781, 5597020, 50.5172, 1.64278, 12),
('62319', 'Éterpigny', '31T', 498436, 5567354, 50.2583, 2.97806, 47),
('62320', 'Étrun', '31T', 478680, 5573698, 50.315, 2.70055, 70),
('62321', 'Évin-Malmaison', '31T', 502249, 5587369, 50.4383, 3.03167, 25),
('62322', 'Famechon', '31T', 461851, 5554673, 50.1431, 2.4661, 80),
('62323', 'Fampoux', '31T', 490722, 5571995, 50.3, 2.86973, 60),
('62324', 'Farbus', '31T', 487413, 5578334, 50.3569, 2.82305, 90),
('62325', 'Fauquembergues', '31T', 436130, 5605764, 50.6003, 2.0975, 76),
('62326', 'Favreuil', '31T', 489774, 5552508, 50.1247, 2.85694, 110),
('62327', 'Febvin-Palfart', '31T', 451400, 5598774, 50.5389, 2.31416, 125),
('62328', 'Ferfay', '31T', 459080, 5596639, 50.5203, 2.42277, 100),
('62329', 'Ferques', '31T', 412887, 5631557, 50.8292, 1.76305, 90),
('62330', 'Festubert', '31T', 481204, 5599294, 50.5453, 2.73472, 20),
('62331', 'Feuchy', '31T', 488702, 5571319, 50.2939, 2.84139, 65),
('62332', 'Ficheux', '31T', 481435, 5564051, 50.2283, 2.73972, 91),
('62333', 'Fiefs', '31T', 451402, 5594697, 50.5022, 2.31472, 184),
('62334', 'Fiennes', '31T', 417345, 5631330, 50.8278, 1.82639, 90),
('62335', 'Fillièvres', '31T', 439941, 5574366, 50.3183, 2.15638, 48),
('62336', 'Fléchin', '31T', 449787, 5600983, 50.5586, 2.29111, 88),
('62337', 'Flers', '31T', 446608, 5574480, 50.32, 2.25001, 125),
('62338', 'Fleurbaix', '31T', 488237, 5611165, 50.6522, 2.8336, 17),
('62339', 'Fleury', '31T', 446899, 5585782, 50.4217, 2.2525, 127),
('62340', 'Floringhem', '31T', 459237, 5593920, 50.4958, 2.42528, 114),
('62341', 'Foncquevillers', '31T', 473544, 5555034, 50.1469, 2.62972, 150),
('62342', 'Fontaine-lès-Boulans', '31T', 448364, 5594324, 50.4986, 2.27194, 113),
('62343', 'Fontaine-lès-Croisilles', '31T', 493321, 5562818, 50.2175, 2.90638, 65),
('62344', 'Fontaine-lès-Hermans', '31T', 453574, 5597457, 50.5272, 2.34501, 115),
('62345', 'Fontaine-l''Étalon', '31T', 433279, 5572994, 50.3053, 2.06306, 65),
('62346', 'Fortel-en-Artois', '31T', 444736, 5567611, 50.2581, 2.22472, 120),
('62347', 'Fosseux', '31T', 468871, 5567075, 50.255, 2.56333, 135),
('62348', 'Foufflin-Ricametz', '31T', 456107, 5577728, 50.35, 2.38305, 149),
('62349', 'Fouquereuil', '31T', 471545, 5596434, 50.5192, 2.59862, 30),
('62350', 'Fouquières-lès-Béthune', '31T', 472390, 5596089, 50.5161, 2.61056, 35),
('62351', 'Fouquières-lès-Lens', '31T', 493193, 5585890, 50.425, 2.90417, 34),
('62352', 'Framecourt', '31T', 450395, 5575586, 50.3303, 2.30305, 145),
('62353', 'Frémicourt', '31T', 493068, 5550835, 50.1097, 2.90305, 110),
('62354', 'Frencq', '31T', 407884, 5601828, 50.5611, 1.69945, 45),
('62355', 'Fresnes-lès-Montauban', '31T', 494959, 5575881, 50.335, 2.92917, 51),
('62356', 'Fresnicourt-le-Dolmen', '31T', 471544, 5585283, 50.4189, 2.59945, 110),
('62357', 'Fresnoy', '31T', 438007, 5579794, 50.3669, 2.12833, 10),
('62358', 'Fresnoy-en-Gohelle', '31T', 492137, 5579344, 50.3661, 2.88944, 55),
('62359', 'Fressin', '31T', 432943, 5588628, 50.4458, 2.05556, 60),
('62360', 'Fréthun', '31T', 417445, 5641307, 50.9175, 1.82556, 5),
('62361', 'Frévent', '31T', 449508, 5569633, 50.2767, 2.29139, 70),
('62362', 'Frévillers', '31T', 465944, 5582938, 50.3975, 2.52084, 140),
('62363', 'Frévin-Capelle', '31T', 473794, 5577488, 50.3489, 2.63166, 85),
('62364', 'Fruges', '31T', 438515, 5596221, 50.5147, 2.13277, 95),
('62365', 'Galametz', '31T', 438608, 5575400, 50.3275, 2.13749, 45),
('62366', 'Gauchin-Légal', '31T', 470101, 5584859, 50.415, 2.57917, 96),
('62367', 'Gauchin-Verloingt', '31T', 451858, 5582090, 50.3889, 2.32277, 84),
('62368', 'Gaudiempré', '31T', 466281, 5558380, 50.1767, 2.52777, 158),
('62369', 'Gavrelle', '31T', 491775, 5575360, 50.3303, 2.88444, 60),
('62370', 'Gennes-Ivergny', '31T', 431914, 5568439, 50.2642, 2.04472, 30),
('62371', 'Givenchy-en-Gohelle', '31T', 483750, 5582173, 50.3914, 2.7714, 80),
('62372', 'Givenchy-le-Noble', '31T', 464055, 5572325, 50.3019, 2.49528, 125),
('62373', 'Givenchy-lès-la-Bassée', '31T', 482695, 5597682, 50.5308, 2.75584, 28),
('62374', 'Gomiécourt', '31T', 485394, 5555576, 50.1522, 2.79555, 115),
('62375', 'Gommecourt', '31T', 474513, 5554227, 50.1397, 2.64333, 150),
('62376', 'Gonnehem', '31T', 469722, 5601417, 50.5639, 2.5725, 20),
('62377', 'Gosnay', '31T', 470691, 5595110, 50.5072, 2.58667, 30),
('62378', 'Gouves', '31T', 474043, 5571865, 50.2983, 2.63555, 75),
('62379', 'Gouy-en-Artois', '31T', 470985, 5566198, 50.2472, 2.59305, 115),
('62380', 'Gouy-Servins', '31T', 475108, 5583659, 50.4044, 2.64972, 157),
('62381', 'Gouy-en-Ternois', '31T', 458058, 5574439, 50.3206, 2.41084, 139),
('62382', 'Gouy-Saint-André', '31T', 421640, 5580660, 50.3728, 1.89805, 95),
('62383', 'Gouy-sous-Bellonne', '31T', 503916, 5573471, 50.3133, 3.055, 50),
('62384', 'Graincourt-lès-Havrincourt', '31T', 507661, 5554666, 50.1442, 3.10722, 79),
('62385', 'Grand-Rullecourt', '31T', 462436, 5567209, 50.2558, 2.47305, 154),
('62386', 'Grenay', '31T', 481876, 5588728, 50.4503, 2.74472, 60),
('62387', 'Grévillers', '31T', 486532, 5550322, 50.105, 2.81166, 118),
('62388', 'Grigny', '31T', 433566, 5581732, 50.3839, 2.06555, 30),
('62389', 'Grincourt-lès-Pas', '31T', 463974, 5557438, 50.1681, 2.49555, 110),
('62390', 'Groffliers', '31T', 401850, 5582133, 50.3831, 1.61945, 4),
('62391', 'Guarbecque', '31T', 463759, 5606829, 50.6122, 2.48778, 20),
('62392', 'Guémappe', '31T', 492138, 5566835, 50.2536, 2.88972, 65),
('62393', 'Guemps', '31T', 429390, 5640822, 50.9147, 1.99555, 2),
('62395', 'Guigny', '31T', 429304, 5576072, 50.3325, 2.00667, 83),
('62396', 'Guinecourt', '31T', 444625, 5577836, 50.35, 2.22166, 111),
('62397', 'Guînes', '31T', 420585, 5635944, 50.8697, 1.87138, 10),
('62398', 'Guisy', '31T', 429131, 5582377, 50.3892, 2.00306, 23),
('62399', 'Habarcq', '31T', 472386, 5572738, 50.3061, 2.61222, 90),
('62400', 'Haillicourt', '31T', 470416, 5591745, 50.4769, 2.58306, 50),
('62401', 'Haisnes', '31T', 485996, 5595325, 50.5097, 2.8025, 26),
('62402', 'Halinghen', '31T', 407375, 5606441, 50.6025, 1.69111, 125),
('62403', 'Hallines', '31T', 444063, 5617690, 50.7083, 2.20778, 30),
('62404', 'Halloy', '31T', 458887, 5556332, 50.1578, 2.42445, 150),
('62405', 'Hamblain-les-Prés', '31T', 497210, 5571154, 50.2925, 2.96083, 45),
('62406', 'Hamelincourt', '31T', 485563, 5559066, 50.1836, 2.79778, 105),
('62407', 'Ham-en-Artois', '31T', 461461, 5604343, 50.5897, 2.45556, 25),
('62408', 'Hames-Boucres', '31T', 418349, 5636721, 50.8764, 1.83944, 10),
('62409', 'Hannescamps', '31T', 474130, 5557194, 50.1664, 2.63777, 145),
('62410', 'Haplincourt', '31T', 495112, 5548454, 50.0883, 2.93167, 111),
('62411', 'Haravesnes', '31T', 437886, 5571115, 50.2889, 2.12806, 100),
('62412', 'Hardinghen', '31T', 416904, 5628247, 50.8, 1.82083, 80),
('62413', 'Harnes', '31T', 492979, 5588238, 50.4461, 2.90112, 31),
('62414', 'Haucourt', '31T', 496732, 5566274, 50.2486, 2.95416, 55),
('62415', 'Haute-Avesnes', '31T', 474198, 5575200, 50.3283, 2.6375, 120),
('62416', 'Hautecloque', '31T', 450444, 5576574, 50.3392, 2.30361, 125),
('62418', 'Hauteville', '31T', 469418, 5569172, 50.2739, 2.57083, 130),
('62419', 'Haut-Loquin', '31T', 427266, 5621543, 50.7411, 1.96917, 105),
('62421', 'Havrincourt', '31T', 506197, 5551050, 50.1117, 3.08667, 105),
('62422', 'Hébuterne', '31T', 473969, 5552623, 50.1253, 2.63583, 145),
('62423', 'Helfaut', '31T', 446383, 5616369, 50.6967, 2.24083, 90),
('62424', 'Hendecourt-lès-Cagnicourt', '31T', 496294, 5561889, 50.2092, 2.94806, 75),
('62425', 'Hendecourt-lès-Ransart', '31T', 480792, 5561489, 50.2053, 2.73083, 118),
('62426', 'Héninel', '31T', 490333, 5564954, 50.2367, 2.86445, 66),
('62427', 'Hénin-Beaumont', '31T', 496191, 5585331, 50.42, 2.94638, 30),
('62428', 'Hénin-sur-Cojeul', '31T', 488151, 5563692, 50.2253, 2.83389, 65),
('62429', 'Henneveux', '31T', 418986, 5619811, 50.7244, 1.85222, 57),
('62430', 'Hénu', '31T', 466047, 5555818, 50.1536, 2.52472, 150),
('62431', 'Herbelles', '31T', 444941, 5611689, 50.6544, 2.22111, 95),
('62432', 'Herbinghen', '31T', 423300, 5625152, 50.7731, 1.91222, 90),
('62433', 'Héricourt', '31T', 446755, 5577320, 50.3456, 2.25167, 135),
('62434', 'La Herlière', '31T', 468464, 5561764, 50.2072, 2.55806, 170),
('62435', 'Herlincourt', '31T', 450193, 5577256, 50.3453, 2.29999, 130),
('62436', 'Herlin-le-Sec', '31T', 452240, 5578410, 50.3558, 2.32861, 150),
('62437', 'Herly', '31T', 428095, 5600493, 50.5519, 1.985, 125),
('62438', 'Hermaville', '31T', 470399, 5574633, 50.3231, 2.58417, 100),
('62439', 'Hermelinghen', '31T', 419668, 5628420, 50.8019, 1.86001, 119),
('62440', 'Hermies', '31T', 502721, 5551078, 50.1119, 3.03806, 115),
('62441', 'Hermin', '31T', 468465, 5585269, 50.4186, 2.55611, 110),
('62442', 'Hernicourt', '31T', 450714, 5584293, 50.4086, 2.30639, 75),
('62443', 'Hersin-Coupigny', '31T', 474814, 5588324, 50.4464, 2.64527, 74),
('62444', 'Hervelinghen', '31T', 409273, 5637520, 50.8822, 1.71027, 59),
('62445', 'Hesdigneul-lès-Béthune', '31T', 471043, 5594707, 50.5036, 2.59167, 55),
('62446', 'Hesdigneul-lès-Boulogne', '31T', 406328, 5612762, 50.6592, 1.67473, 15),
('62447', 'Hesdin', '31T', 431538, 5580677, 50.3742, 2.03722, 27),
('62448', 'Hesdin-l''Abbé', '31T', 406678, 5613683, 50.6675, 1.67944, 35),
('62449', 'Hesmond', '31T', 425327, 5589874, 50.4561, 1.94806, 42),
('62450', 'Hestrus', '31T', 452353, 5588727, 50.4486, 2.32889, 150),
('62451', 'Heuchin', '31T', 448105, 5592041, 50.4781, 2.26861, 85),
('62452', 'Heuringhem', '31T', 449305, 5616247, 50.6958, 2.28222, 36),
('62453', 'Hézecques', '31T', 441608, 5598040, 50.5314, 2.17611, 91),
('62454', 'Hinges', '31T', 473048, 5601615, 50.5658, 2.61944, 44),
('62455', 'Hocquinghen', '31T', 425155, 5624693, 50.7692, 1.93862, 75),
('62456', 'Houchin', '31T', 473257, 5592409, 50.4831, 2.62305, 55),
('62457', 'Houdain', '31T', 467048, 5589139, 50.4533, 2.53583, 56),
('62458', 'Houlle', '31T', 441742, 5627694, 50.7981, 2.17333, 10),
('62459', 'Houvin-Houvigneul', '31T', 455900, 5571861, 50.2972, 2.38083, 140),
('62460', 'Hubersent', '31T', 409909, 5604018, 50.5811, 1.7275, 89),
('62461', 'Huby-Saint-Leu', '31T', 431335, 5581760, 50.3839, 2.03417, 50),
('62462', 'Huclier', '31T', 454110, 5586641, 50.43, 2.35389, 150),
('62463', 'Hucqueliers', '31T', 422514, 5602426, 50.5686, 1.90583, 93),
('62464', 'Hulluch', '31T', 486364, 5592761, 50.4867, 2.80778, 37),
('62465', 'Humbercamps', '31T', 469519, 5559226, 50.1844, 2.57305, 165),
('62466', 'Humbert', '31T', 422528, 5595351, 50.505, 1.9075, 57),
('62468', 'Humières', '31T', 443465, 5582019, 50.3875, 2.20473, 125),
('62469', 'Inchy-en-Artois', '31T', 503630, 5558491, 50.1786, 3.05084, 60),
('62470', 'Incourt', '31T', 439657, 5582369, 50.3903, 2.15111, 88),
('62471', 'Inghem', '31T', 446448, 5613063, 50.6669, 2.24223, 65),
('62472', 'Inxent', '31T', 413834, 5598638, 50.5333, 1.78417, 25),
('62473', 'Isbergues', '31T', 461703, 5607832, 50.6211, 2.45862, 20),
('62474', 'Isques', '31T', 404589, 5614338, 50.6731, 1.64972, 10),
('62475', 'Ivergny', '31T', 456600, 5565400, 50.2392, 2.3914, 148),
('62476', 'Izel-lès-Équerchin', '31T', 496424, 5578876, 50.3619, 2.94972, 30),
('62477', 'Izel-les-Hameaux', '31T', 466577, 5573760, 50.315, 2.53056, 120),
('62478', 'Journy', '31T', 429068, 5622877, 50.7533, 1.99445, 85),
('62479', 'Labeuvrière', '31T', 469007, 5596818, 50.5225, 2.56278, 35),
('62480', 'Labourse', '31T', 477187, 5594182, 50.4992, 2.67834, 25),
('62481', 'Labroye', '31T', 428015, 5570035, 50.2781, 1.98972, 25),
('62483', 'Lacres', '31T', 411626, 5605502, 50.5947, 1.75139, 130),
('62484', 'Lagnicourt-Marcel', '31T', 497044, 5556359, 50.1594, 2.95862, 90),
('62485', 'Laires', '31T', 446993, 5599033, 50.5408, 2.25194, 183),
('62486', 'Lambres', '31T', 457433, 5607247, 50.6156, 2.39833, 30),
('62487', 'Landrethun-le-Nord', '31T', 414447, 5633601, 50.8478, 1.78472, 127),
('62488', 'Landrethun-lès-Ardres', '31T', 426948, 5631032, 50.8264, 1.96278, 55),
('62489', 'Lapugnoy', '31T', 467054, 5596367, 50.5183, 2.53527, 35),
('62490', 'Lattre-Saint-Quentin', '31T', 469942, 5570806, 50.2886, 2.57806, 100),
('62491', 'Laventie', '31T', 483732, 5608521, 50.6283, 2.76999, 17),
('62492', 'Lebiez', '31T', 427891, 5591352, 50.4697, 1.98389, 60),
('62493', 'Lebucquière', '31T', 497458, 5551078, 50.1119, 2.96445, 120),
('62494', 'Léchelle', '31T', 498091, 5544932, 50.0567, 2.97333, 115),
('62495', 'Ledinghem', '31T', 429039, 5612065, 50.6561, 1.99611, 120),
('62496', 'Lefaux', '31T', 405151, 5599807, 50.5425, 1.66139, 75),
('62497', 'Leforest', '31T', 504261, 5587586, 50.4403, 3.06001, 30),
('62498', 'Lens', '31T', 487512, 5586765, 50.4328, 2.82417, 39),
('62499', 'Lépine', '31T', 409340, 5581165, 50.3756, 1.72501, 50),
('62500', 'Lespesses', '31T', 458999, 5601366, 50.5628, 2.42111, 40),
('62501', 'Lespinoy', '31T', 420329, 5586765, 50.4275, 1.87833, 16),
('62502', 'Lestrem', '31T', 477678, 5607833, 50.6219, 2.68444, 17),
('62503', 'Leubringhen', '31T', 409948, 5634728, 50.8572, 1.72055, 95),
('62504', 'Leulinghem', '31T', 440997, 5620690, 50.735, 2.16389, 95),
('62505', 'Leulinghen-Bernes', '31T', 409701, 5631766, 50.8306, 1.71778, 50),
('62506', 'Licques', '31T', 424768, 5626397, 50.7844, 1.93278, 85),
('62507', 'Liencourt', '31T', 460826, 5568981, 50.2717, 2.45028, 140),
('62508', 'Lières', '31T', 458579, 5600473, 50.5547, 2.41528, 55),
('62509', 'Liettres', '31T', 453522, 5605026, 50.5953, 2.34333, 50),
('62510', 'Liévin', '31T', 484036, 5585539, 50.4217, 2.77528, 50),
('62511', 'Lignereuil', '31T', 462483, 5570977, 50.2897, 2.47334, 135),
('62512', 'Ligny-lès-Aire', '31T', 453821, 5601007, 50.5592, 2.34805, 89),
('62513', 'Ligny-sur-Canche', '31T', 447003, 5570553, 50.2847, 2.2561, 70),
('62514', 'Ligny-Saint-Flochel', '31T', 459178, 5578723, 50.3592, 2.42611, 132),
('62515', 'Ligny-Thilloy', '31T', 486824, 5547789, 50.0822, 2.81584, 110),
('62516', 'Lillers', '31T', 463210, 5601427, 50.5636, 2.48055, 28),
('62517', 'Linghem', '31T', 455270, 5604763, 50.5931, 2.36805, 50),
('62518', 'Linzeux', '31T', 443271, 5576893, 50.3414, 2.20277, 110),
('62519', 'Lisbourg', '31T', 444315, 5595199, 50.5061, 2.21473, 121),
('62520', 'Locon', '31T', 476199, 5602310, 50.5722, 2.66389, 19),
('62521', 'La Loge', '31T', 431394, 5584787, 50.4111, 2.03445, 106),
('62522', 'Loison-sur-Créquoise', '31T', 423545, 5588077, 50.4397, 1.92333, 20),
('62523', 'Loison-sous-Lens', '31T', 489842, 5587780, 50.4419, 2.85695, 42),
('62524', 'Longfossé', '31T', 415582, 5611801, 50.6519, 1.80584, 91),
('62525', 'Longuenesse', '31T', 446076, 5620820, 50.7367, 2.23583, 40),
('62526', 'Longueville', '31T', 421059, 5620706, 50.7328, 1.8814, 110),
('62527', 'Longvilliers', '31T', 409917, 5599877, 50.5439, 1.72861, 37),
('62528', 'Loos-en-Gohelle', '31T', 485231, 5589582, 50.4581, 2.79194, 40),
('62529', 'Lorgies', '31T', 485246, 5601844, 50.5683, 2.79167, 25),
('62530', 'Lottinghen', '31T', 424647, 5615278, 50.6844, 1.93334, 106),
('62531', 'Louches', '31T', 429967, 5631453, 50.8306, 2.00555, 30),
('62532', 'Lozinghem', '31T', 464298, 5596539, 50.5197, 2.49638, 53),
('62533', 'Lugy', '31T', 441126, 5597211, 50.5239, 2.16944, 84),
('62534', 'Lumbres', '31T', 437920, 5617482, 50.7058, 2.12083, 50),
('62535', 'La Madelaine-sous-Montreuil', '31T', 411370, 5591449, 50.4683, 1.75112, 6),
('62536', 'Magnicourt-en-Comte', '31T', 463756, 5583477, 50.4022, 2.49, 105),
('62537', 'Magnicourt-sur-Canche', '31T', 457943, 5572462, 50.3028, 2.40944, 125),
('62538', 'Maintenay', '31T', 415526, 5580074, 50.3667, 1.81223, 15),
('62539', 'Maisnil', '31T', 454820, 5577369, 50.3467, 2.365, 155),
('62540', 'Maisnil-lès-Ruitz', '31T', 470539, 5589180, 50.4539, 2.585, 105),
('62541', 'Maisoncelle', '31T', 439141, 5589017, 50.45, 2.14278, 125),
('62542', 'Maizières', '31T', 460472, 5574667, 50.3228, 2.44472, 140),
('62543', 'Mametz', '31T', 452186, 5609393, 50.6344, 2.32389, 45),
('62544', 'Manin', '31T', 465081, 5571824, 50.2975, 2.50973, 122),
('62545', 'Maninghem', '31T', 424892, 5599488, 50.5425, 1.94, 183),
('62546', 'Maninghen-Henne', '31T', 406114, 5624877, 50.7681, 1.66862, 90),
('62547', 'Marant', '31T', 418030, 5591156, 50.4667, 1.84501, 20),
('62548', 'Marck', '31T', 426514, 5644569, 50.9481, 1.95389, 4),
('62549', 'Marconne', '31T', 432243, 5580204, 50.37, 2.04722, 29),
('62550', 'Marconnelle', '31T', 430194, 5580632, 50.3736, 2.01833, 30),
('62551', 'Marenla', '31T', 419653, 5588999, 50.4475, 1.86833, 24),
('62552', 'Maresquel-Ecquemicourt', '31T', 423737, 5584954, 50.4117, 1.92667, 20),
('62553', 'Marest', '31T', 458443, 5590714, 50.4669, 2.41445, 85),
('62554', 'Maresville', '31T', 410218, 5597895, 50.5261, 1.73334, 20),
('62555', 'Marles-les-Mines', '31T', 464324, 5594593, 50.5022, 2.49694, 75),
('62556', 'Marles-sur-Canche', '31T', 416753, 5590249, 50.4583, 1.82722, 13),
('62558', 'Marquay', '31T', 458763, 5581228, 50.3817, 2.42, 140),
('62559', 'Marquion', '31T', 506144, 5562076, 50.2108, 3.08611, 50),
('62560', 'Marquise', '31T', 408865, 5629803, 50.8128, 1.7064, 20),
('62561', 'Martinpuich', '31T', 482917, 5544186, 50.0497, 2.76139, 140),
('62562', 'Matringhem', '31T', 440799, 5599624, 50.5456, 2.16445, 91),
('62563', 'Mazingarbe', '31T', 479893, 5591021, 50.4708, 2.71666, 35),
('62564', 'Mazinghem', '31T', 457972, 5605791, 50.6025, 2.40611, 29),
('62565', 'Mencas', '31T', 438887, 5601129, 50.5589, 2.13722, 75),
('62566', 'Menneville', '31T', 419590, 5614488, 50.6767, 1.86194, 104),
('62567', 'Mentque-Nortbécourt', '31T', 435399, 5626131, 50.7833, 2.08361, 90),
('62568', 'Mercatel', '31T', 485261, 5564749, 50.2347, 2.79333, 90),
('62569', 'Merck-Saint-Liévin', '31T', 437245, 5608624, 50.6261, 2.11277, 72),
('62570', 'Méricourt', '31T', 490504, 5583145, 50.4003, 2.86639, 55),
('62571', 'Merlimont', '31T', 401605, 5590201, 50.4556, 1.61389, 7),
('62572', 'Metz-en-Couture', '31T', 504513, 5546169, 50.0678, 3.06306, 125),
('62573', 'Meurchin', '31T', 492434, 5593737, 50.4956, 2.89333, 25),
('62574', 'Mingoval', '31T', 469640, 5580290, 50.3739, 2.57305, 140),
('62576', 'Moncheaux-lès-Frévent', '31T', 454652, 5573911, 50.3156, 2.36306, 135),
('62577', 'Monchel-sur-Canche', '31T', 443484, 5572752, 50.3042, 2.20639, 70),
('62578', 'Monchiet', '31T', 473397, 5565320, 50.2394, 2.62694, 125),
('62579', 'Monchy-au-Bois', '31T', 475506, 5558732, 50.1803, 2.65694, 138),
('62580', 'Monchy-Breton', '31T', 460064, 5583412, 50.4014, 2.43806, 150),
('62581', 'Monchy-Cayeux', '31T', 448695, 5587772, 50.4397, 2.27751, 71),
('62582', 'Monchy-le-Preux', '31T', 492398, 5568626, 50.2697, 2.89333, 110),
('62583', 'Mondicourt', '31T', 461459, 5558073, 50.1736, 2.46027, 158),
('62584', 'Mont-Bernanchon', '31T', 470895, 5603634, 50.5839, 2.58888, 30),
('62585', 'Montcavrel', '31T', 415671, 5596538, 50.5147, 1.81056, 26),
('62586', 'Montenescourt', '31T', 473012, 5571407, 50.2942, 2.62111, 90),
('62587', 'Montigny-en-Gohelle', '31T', 494989, 5586259, 50.4283, 2.92945, 25),
('62588', 'Montreuil', '31T', 412309, 5591032, 50.4647, 1.76444, 54),
('62589', 'Mont-Saint-Éloi', '31T', 477906, 5577716, 50.3511, 2.68945, 130),
('62590', 'Monts-en-Ternois', '31T', 456181, 5574670, 50.3225, 2.38445, 135),
('62591', 'Morchies', '31T', 496844, 5553951, 50.1378, 2.95584, 95),
('62592', 'Moringhem', '31T', 438467, 5623901, 50.7636, 2.1275, 90),
('62593', 'Morval', '31T', 490908, 5541974, 50.03, 2.87306, 150),
('62594', 'Mory', '31T', 489344, 5556091, 50.1569, 2.85083, 100),
('62595', 'Moulle', '31T', 441944, 5626518, 50.7875, 2.17638, 25),
('62596', 'Mouriez', '31T', 425408, 5577423, 50.3442, 1.95167, 40),
('62597', 'Moyenneville', '31T', 484055, 5558977, 50.1828, 2.77666, 110),
('62598', 'Muncq-Nieurlet', '31T', 437504, 5633489, 50.8497, 2.11222, 8),
('62599', 'Nabringhen', '31T', 419904, 5622114, 50.7453, 1.86473, 120),
('62600', 'Nédon', '31T', 455069, 5597321, 50.5261, 2.36611, 97),
('62601', 'Nédonchel', '31T', 454417, 5597110, 50.5242, 2.35694, 109),
('62602', 'Nempont-Saint-Firmin', '31T', 409932, 5578838, 50.3547, 1.73389, 20),
('62603', 'Nesles', '31T', 404905, 5609049, 50.6256, 1.65555, 45),
('62604', 'Neufchâtel-Hardelot', '31T', 403806, 5608050, 50.6164, 1.64028, 50),
('62605', 'Neulette', '31T', 440594, 5581370, 50.3814, 2.16445, 80),
('62606', 'Neuve-Chapelle', '31T', 484484, 5603669, 50.5847, 2.78083, 19),
('62607', 'Neuville-au-Cornet', '31T', 454848, 5576102, 50.3353, 2.36555, 145),
('62608', 'Neuville-Bourjonval', '31T', 501451, 5546228, 50.0683, 3.02028, 127),
('62609', 'Neuville-Saint-Vaast', '31T', 483026, 5578346, 50.3569, 2.76138, 105),
('62610', 'Neuville-sous-Montreuil', '31T', 413196, 5592191, 50.4753, 1.77667, 10),
('62611', 'Neuville-Vitasse', '31T', 487087, 5566103, 50.2469, 2.81889, 88),
('62612', 'Neuvireuil', '31T', 493775, 5577921, 50.3533, 2.9125, 55),
('62613', 'Nielles-lès-Bléquin', '31T', 431383, 5614134, 50.675, 2.02889, 95),
('62614', 'Nielles-lès-Ardres', '31T', 430786, 5632740, 50.8422, 2.01694, 11),
('62615', 'Nielles-lès-Calais', '31T', 417682, 5640223, 50.9078, 1.82917, 10),
('62618', 'Nordausques', '31T', 435095, 5630028, 50.8183, 2.07861, 25),
('62619', 'Noreuil', '31T', 495259, 5557504, 50.1697, 2.93361, 85),
('62620', 'Norrent-Fontes', '31T', 458093, 5603690, 50.5836, 2.40806, 30),
('62621', 'Nortkerque', '31T', 431343, 5636378, 50.875, 2.02417, 9),
('62622', 'Nort-Leulinghem', '31T', 435970, 5628009, 50.8003, 2.09138, 50),
('62623', 'Nouvelle-Église', '31T', 433564, 5641910, 50.925, 2.05472, 3),
('62624', 'Noyelles-Godault', '31T', 499408, 5585515, 50.4217, 2.99167, 24),
('62625', 'Noyelles-lès-Humières', '31T', 441236, 5580498, 50.3736, 2.17361, 108),
('62626', 'Noyelles-lès-Vermelles', '31T', 480295, 5592965, 50.4883, 2.72222, 32),
('62627', 'Noyelles-sous-Bellonne', '31T', 501939, 5572636, 50.3058, 3.02723, 40),
('62628', 'Noyelles-sous-Lens', '31T', 490904, 5586233, 50.4281, 2.87194, 31),
('62629', 'Noyellette', '31T', 471017, 5572066, 50.3, 2.59305, 85),
('62630', 'Noyelle-Vion', '31T', 467946, 5571281, 50.2928, 2.55, 115),
('62631', 'Nuncq-Hautecôte', '31T', 449322, 5572970, 50.3067, 2.28833, 133),
('62632', 'Oblinghem', '31T', 471543, 5599862, 50.55, 2.59833, 21),
('62634', 'Offekerque', '31T', 431049, 5643704, 50.9408, 2.0186, 2),
('62635', 'Offin', '31T', 424916, 5588706, 50.4456, 1.94251, 25),
('62636', 'Offrethun', '31T', 407811, 5626670, 50.7844, 1.69222, 55),
('62637', 'Oignies', '31T', 499369, 5590457, 50.4661, 2.99111, 27),
('62638', 'Oisy-le-Verger', '31T', 508952, 5566373, 50.2494, 3.12556, 70),
('62639', 'Oppy', '31T', 492213, 5577243, 50.3472, 2.89055, 60),
('62640', 'Orville', '31T', 457952, 5553467, 50.1319, 2.41167, 75),
('62641', 'Ostreville', '31T', 456959, 5582787, 50.3956, 2.39445, 150),
('62642', 'Ourton', '31T', 462773, 5589631, 50.4575, 2.47556, 100),
('62643', 'Outreau', '31T', 400746, 5618766, 50.7122, 1.59416, 56),
('62644', 'Ouve-Wirquin', '31T', 439220, 5611165, 50.6492, 2.14027, 75),
('62645', 'Oye-Plage', '31T', 432527, 5647763, 50.9775, 2.03889, 4),
('62646', 'Palluel', '31T', 507008, 5568316, 50.2669, 3.09833, 40),
('62647', 'Le Parcq', '31T', 436027, 5581084, 50.3783, 2.10027, 110),
('62648', 'Parenty', '31T', 415600, 5604417, 50.5856, 1.80777, 75),
('62649', 'Pas-en-Artois', '31T', 463449, 5556021, 50.1553, 2.48834, 95),
('62650', 'Pelves', '31T', 494044, 5570755, 50.2889, 2.91639, 50),
('62651', 'Penin', '31T', 463166, 5575296, 50.3286, 2.4825, 136),
('62652', 'Pernes', '31T', 458005, 5592694, 50.4847, 2.40805, 83),
('62653', 'Pernes-lès-Boulogne', '31T', 408471, 5622982, 50.7514, 1.7025, 25),
('62654', 'Peuplingues', '31T', 413536, 5641155, 50.9156, 1.77, 35),
('62655', 'Pierremont', '31T', 447584, 5583242, 50.3989, 2.26249, 130),
('62656', 'Pihem', '31T', 444386, 5614876, 50.6831, 2.21278, 100),
('62657', 'Pihen-lès-Guînes', '31T', 414685, 5636162, 50.8708, 1.78751, 70),
('62658', 'Pittefaux', '31T', 407355, 5624144, 50.7617, 1.68639, 45),
('62659', 'Planques', '31T', 434721, 5590460, 50.4625, 2.08027, 80),
('62660', 'Plouvain', '31T', 494758, 5572638, 50.3058, 2.92639, 50),
('62661', 'Bouin-Plumoison', '31T', 428645, 5581456, 50.3808, 1.99639, 25),
('62662', 'Polincove', '31T', 435962, 5633724, 50.8517, 2.09027, 10),
('62663', 'Pommera', '31T', 460051, 5558146, 50.1742, 2.44055, 155),
('62664', 'Pommier', '31T', 471086, 5559186, 50.1842, 2.595, 162),
('62665', 'Le Ponchel', '31T', 433964, 5567672, 50.2575, 2.07361, 28),
('62666', 'Pont-à-Vendin', '31T', 491820, 5591390, 50.4744, 2.88472, 30),
('62667', 'Le Portel', '31T', 399726, 5618786, 50.7122, 1.57972, 27),
('62668', 'Prédefin', '31T', 446893, 5594925, 50.5039, 2.25112, 170),
('62669', 'Pressy', '31T', 456815, 5591684, 50.4756, 2.3914, 100),
('62670', 'Preures', '31T', 420650, 5602794, 50.5717, 1.87944, 71),
('62671', 'Pronville', '31T', 500179, 5557965, 50.1739, 3.00251, 70),
('62672', 'Puisieux', '31T', 478334, 5551770, 50.1178, 2.69694, 109),
('62673', 'Quéant', '31T', 498731, 5558521, 50.1789, 2.98223, 70),
('62674', 'Quelmes', '31T', 438996, 5620559, 50.7336, 2.13555, 124),
('62675', 'Quercamps', '31T', 433121, 5622576, 50.7511, 2.05195, 175),
('62676', 'Quernes', '31T', 455064, 5605939, 50.6036, 2.365, 30),
('62677', 'Le Quesnoy-en-Artois', '31T', 432172, 5576220, 50.3342, 2.04694, 125),
('62678', 'Quesques', '31T', 424737, 5617439, 50.7039, 1.93417, 100),
('62679', 'Questrecques', '31T', 411444, 5613353, 50.6653, 1.74695, 35),
('62680', 'Quiéry-la-Motte', '31T', 498360, 5579153, 50.3644, 2.97694, 30),
('62681', 'Quiestède', '31T', 451643, 5614433, 50.6797, 2.31555, 35),
('62682', 'Quilen', '31T', 424104, 5598109, 50.53, 1.92916, 105),
('62684', 'Racquinghem', '31T', 454620, 5615920, 50.6933, 2.3575, 40),
('62685', 'Radinghem', '31T', 437573, 5599847, 50.5472, 2.11888, 100),
('62686', 'Ramecourt', '31T', 451210, 5580273, 50.3725, 2.31389, 89),
('62688', 'Rang-du-Fliers', '31T', 403261, 5585845, 50.4167, 1.63833, 10),
('62689', 'Ransart', '31T', 477464, 5561935, 50.2092, 2.68417, 110),
('62690', 'Raye-sur-Authie', '31T', 425236, 5572298, 50.2981, 1.95027, 20),
('62691', 'Rebecques', '31T', 450764, 5610642, 50.6456, 2.30362, 30),
('62692', 'Rebergues', '31T', 426622, 5623158, 50.7556, 1.95972, 88),
('62693', 'Rebreuve-Ranchicourt', '31T', 468417, 5587154, 50.4356, 2.55528, 75),
('62694', 'Rebreuve-sur-Canche', '31T', 452905, 5568706, 50.2686, 2.33917, 77),
('62695', 'Rebreuviette', '31T', 454383, 5567982, 50.2622, 2.36, 81),
('62696', 'Reclinghem', '31T', 441444, 5602768, 50.5739, 2.17305, 78),
('62697', 'Récourt', '31T', 502396, 5566830, 50.2536, 3.03361, 60),
('62698', 'Recques-sur-Course', '31T', 413889, 5597216, 50.5206, 1.78527, 25),
('62699', 'Recques-sur-Hem', '31T', 435687, 5631997, 50.8361, 2.08667, 12),
('62700', 'Regnauville', '31T', 429495, 5574093, 50.3147, 2.00973, 110),
('62701', 'Rely', '31T', 454819, 5602636, 50.5739, 2.36194, 90),
('62702', 'Remilly-Wirquin', '31T', 441188, 5613273, 50.6683, 2.16777, 60),
('62703', 'Rémy', '31T', 496792, 5566768, 50.2531, 2.955, 55),
('62704', 'Renty', '31T', 434297, 5603810, 50.5825, 2.07195, 85),
('62705', 'Rety', '31T', 413592, 5628023, 50.7975, 1.77389, 30),
('62706', 'Richebourg', '31T', 481983, 5602411, 50.5733, 2.74556, 18),
('62708', 'Riencourt-lès-Bapaume', '31T', 491515, 5548397, 50.0878, 2.88139, 132),
('62709', 'Riencourt-lès-Cagnicourt', '31T', 496967, 5560560, 50.1972, 2.95751, 90),
('62710', 'Rimboval', '31T', 427994, 5595984, 50.5114, 1.98445, 106),
('62711', 'Rinxent', '31T', 410885, 5628903, 50.805, 1.73528, 32),
('62712', 'Rivière', '31T', 477494, 5564437, 50.2317, 2.68445, 90),
('62713', 'Robecq', '31T', 468996, 5605035, 50.5964, 2.56194, 18),
('62714', 'Roclincourt', '31T', 484854, 5574912, 50.3261, 2.78722, 75),
('62715', 'Rocquigny', '31T', 494711, 5545212, 50.0592, 2.92611, 133),
('62716', 'Rodelinghem', '31T', 424561, 5632425, 50.8386, 1.9286, 30),
('62717', 'Roëllecourt', '31T', 456283, 5579889, 50.3694, 2.38527, 103),
('62719', 'Rollancourt', '31T', 437549, 5584495, 50.4092, 2.12111, 36),
('62720', 'Rombly', '31T', 456750, 5605369, 50.5986, 2.38889, 33),
('62721', 'Roquetoire', '31T', 453635, 5613334, 50.67, 2.34388, 38),
('62722', 'Rougefay', '31T', 440755, 5569322, 50.2731, 2.16861, 113),
('62723', 'Roussent', '31T', 412958, 5580146, 50.3669, 1.77611, 20),
('62724', 'Rouvroy', '31T', 493168, 5582307, 50.3928, 2.90388, 58),
('62725', 'Royon', '31T', 428605, 5591682, 50.4728, 1.99389, 60),
('62726', 'Ruisseauville', '31T', 437762, 5592523, 50.4814, 2.12277, 138),
('62727', 'Ruitz', '31T', 470765, 5590754, 50.4681, 2.58806, 60),
('62728', 'Rumaucourt', '31T', 504278, 5565503, 50.2417, 3.05999, 41),
('62729', 'Rumilly', '31T', 430236, 5603121, 50.5758, 2.01473, 95),
('62730', 'Ruminghem', '31T', 440704, 5634533, 50.8594, 2.1575, 3),
('62731', 'Ruyaulcourt', '31T', 500894, 5547866, 50.0831, 3.0125, 115),
('62732', 'Sachin', '31T', 455584, 5592992, 50.4872, 2.37389, 105),
('62733', 'Sailly-au-Bois', '31T', 471027, 5552052, 50.12, 2.59472, 130),
('62734', 'Sailly-en-Ostrevent', '31T', 499486, 5570690, 50.2883, 2.99278, 45),
('62735', 'Sailly-Labourse', '31T', 478390, 5594486, 50.5019, 2.69528, 27),
('62736', 'Sailly-sur-la-Lys', '31T', 483664, 5611702, 50.6569, 2.76889, 15),
('62737', 'Sains-en-Gohelle', '31T', 477616, 5588497, 50.4481, 2.68473, 62),
('62738', 'Sains-lès-Fressin', '31T', 431927, 5590927, 50.4664, 2.04083, 130),
('62739', 'Sains-lès-Marquion', '31T', 505056, 5560129, 50.1933, 3.07083, 50),
('62740', 'Sains-lès-Pernes', '31T', 454117, 5592016, 50.4783, 2.35333, 165),
('62741', 'Saint-Amand', '31T', 468335, 5556885, 50.1633, 2.55666, 145),
('62742', 'Saint-Aubin', '31T', 405293, 5590165, 50.4558, 1.66583, 20),
('62743', 'Sainte-Austreberthe', '31T', 432214, 5579463, 50.3633, 2.04694, 30),
('62744', 'Sainte-Catherine', '31T', 483087, 5572570, 50.305, 2.7625, 90),
('62746', 'Saint-Étienne-au-Mont', '31T', 402743, 5615361, 50.6819, 1.62334, 110),
('62747', 'Saint-Floris', '31T', 469626, 5608553, 50.6281, 2.57056, 17),
('62748', 'Saint-Folquin', '31T', 438335, 5644168, 50.9458, 2.12222, 2),
('62749', 'Saint-Georges', '31T', 435132, 5578933, 50.3589, 2.08806, 38),
('62750', 'Saint-Hilaire-Cottes', '31T', 458554, 5602358, 50.5717, 2.41472, 34),
('62751', 'Saint-Inglevert', '31T', 411390, 5636711, 50.8753, 1.74056, 125),
('62752', 'Saint-Josse', '31T', 405218, 5591494, 50.4678, 1.66444, 35),
('62753', 'Saint-Laurent-Blangy', '31T', 485816, 5572129, 50.3011, 2.80084, 53),
('62754', 'Saint-Léger', '31T', 489767, 5559210, 50.185, 2.85666, 75),
('62755', 'Saint-Léonard', '31T', 402761, 5616349, 50.6908, 1.62333, 10),
('62756', 'Sainte-Marie-Kerque', '31T', 439271, 5639091, 50.9003, 2.13638, 2),
('62757', 'Saint-Martin-au-Laërt', '31T', 446038, 5622798, 50.7544, 2.235, 10),
('62758', 'Saint-Martin-Boulogne', '31T', 403367, 5620479, 50.7281, 1.63083, 115),
('62759', 'Saint-Martin-Choquel', '31T', 420821, 5614098, 50.6733, 1.87944, 105),
('62760', 'Saint-Martin-d''Hardinghem', '31T', 435882, 5606355, 50.6056, 2.0939, 75),
('62761', 'Saint-Martin-sur-Cojeul', '31T', 488787, 5564493, 50.2325, 2.84278, 70),
('62762', 'Saint-Michel-sous-Bois', '31T', 424355, 5596344, 50.5142, 1.93306, 95),
('62763', 'Saint-Michel-sur-Ternoise', '31T', 454374, 5580739, 50.3769, 2.35833, 92),
('62764', 'Saint-Nicolas', '31T', 484115, 5572258, 50.3022, 2.77695, 67),
('62765', 'Saint-Omer', '31T', 447508, 5622906, 50.7556, 2.25583, 10),
('62766', 'Saint-Omer-Capelle', '31T', 436844, 5643476, 50.9394, 2.10111, 2),
('62767', 'Saint-Pol-sur-Ternoise', '31T', 452858, 5581216, 50.3811, 2.33695, 101),
('62768', 'Saint-Rémy-au-Bois', '31T', 419929, 5579882, 50.3656, 1.87416, 27),
('62769', 'Saint-Tricat', '31T', 417676, 5638616, 50.8933, 1.82945, 11),
('62770', 'Saint-Venant', '31T', 467598, 5607947, 50.6225, 2.54194, 17),
('62771', 'Sallaumines', '31T', 489975, 5585339, 50.42, 2.85888, 43),
('62772', 'Salperwick', '31T', 445648, 5624872, 50.7731, 2.22917, 7),
('62773', 'Samer', '31T', 411199, 5610483, 50.6394, 1.74417, 80),
('62774', 'Sangatte', '31T', 412382, 5644511, 50.9456, 1.75278, 5),
('62775', 'Sanghen', '31T', 423135, 5625896, 50.7797, 1.90972, 85),
('62776', 'Sapignies', '31T', 488108, 5553438, 50.1331, 2.83361, 120),
('62777', 'Le Sars', '31T', 484276, 5546406, 50.0697, 2.78028, 121),
('62778', 'Sars-le-Bois', '31T', 459163, 5571557, 50.2947, 2.42667, 135),
('62779', 'Sarton', '31T', 459213, 5552314, 50.1217, 2.42944, 80),
('62780', 'Sauchy-Cauchy', '31T', 506914, 5564857, 50.2358, 3.09695, 42),
('62781', 'Sauchy-Lestrée', '31T', 507331, 5563838, 50.2267, 3.10278, 45),
('62782', 'Saudemont', '31T', 502892, 5565594, 50.2425, 3.04056, 45),
('62783', 'Saulchoy', '31T', 418182, 5578086, 50.3492, 1.85, 13),
('62784', 'Saulty', '31T', 466705, 5562733, 50.2158, 2.53333, 170),
('62785', 'Savy-Berlette', '31T', 469331, 5578068, 50.3539, 2.56889, 100),
('62786', 'Selles', '31T', 422143, 5617137, 50.7008, 1.89751, 60),
('62787', 'Sempy', '31T', 420578, 5594083, 50.4933, 1.88028, 40),
('62788', 'Seninghem', '31T', 431874, 5617124, 50.7019, 2.03528, 95),
('62789', 'Senlecques', '31T', 424807, 5611414, 50.6497, 1.93639, 192),
('62790', 'Senlis', '31T', 439742, 5598400, 50.5344, 2.14973, 91),
('62791', 'Séricourt', '31T', 450933, 5571751, 50.2958, 2.31111, 89),
('62792', 'Serques', '31T', 443556, 5627087, 50.7928, 2.19916, 7),
('62793', 'Servins', '31T', 473945, 5583973, 50.4072, 2.63334, 160),
('62794', 'Setques', '31T', 440538, 5618193, 50.7125, 2.15778, 47),
('62795', 'Sibiville', '31T', 451609, 5572115, 50.2992, 2.32055, 100),
('62796', 'Simencourt', '31T', 474417, 5567261, 50.2569, 2.64111, 110),
('62797', 'Siracourt', '31T', 448030, 5580335, 50.3728, 2.26917, 154),
('62798', 'Sombrin', '31T', 464366, 5565528, 50.2408, 2.50028, 161),
('62799', 'Sorrus', '31T', 408884, 5590225, 50.4569, 1.71639, 45),
('62800', 'Souastre', '31T', 469043, 5555707, 50.1528, 2.56667, 140),
('62801', 'Souchez', '31T', 481597, 5582211, 50.3917, 2.74111, 75),
('62802', 'Le Souich', '31T', 454762, 5563593, 50.2228, 2.36584, 145),
('62803', 'Surques', '31T', 423542, 5621627, 50.7414, 1.91638, 113),
('62804', 'Sus-Saint-Léger', '31T', 459272, 5565132, 50.2369, 2.42889, 150),
('62805', 'Tangry', '31T', 453946, 5590504, 50.4647, 2.35111, 160),
('62806', 'Tardinghen', '31T', 403672, 5635860, 50.8664, 1.63111, 28),
('62807', 'Tatinghem', '31T', 443947, 5621522, 50.7428, 2.20556, 65),
('62808', 'Teneur', '31T', 444370, 5589206, 50.4522, 2.21639, 55),
('62809', 'Ternas', '31T', 456871, 5576888, 50.3425, 2.39388, 150),
('62810', 'Thélus', '31T', 485831, 5577967, 50.3536, 2.80083, 125),
('62811', 'Thérouanne', '31T', 447397, 5609841, 50.6381, 2.25611, 45),
('62812', 'Thiembronne', '31T', 433447, 5608176, 50.6217, 2.05916, 100),
('62813', 'La Thieuloye', '31T', 459600, 5584774, 50.4136, 2.43139, 155),
('62814', 'Thièvres', '31T', 460650, 5553261, 50.1303, 2.44944, 75),
('62815', 'Tigny-Noyelle', '31T', 408837, 5578393, 50.3506, 1.7186, 5),
('62816', 'Tilloy-lès-Hermaville', '31T', 468285, 5575047, 50.3267, 2.55444, 115),
('62817', 'Tilloy-lès-Mofflaines', '31T', 486817, 5569193, 50.2747, 2.815, 85);
INSERT INTO `ods_communes` (`oc_code_insee`, `oc_nom`, `oc_secteur`, `oc_x_utm`, `oc_y_utm`, `oc_latitude`, `oc_longitude`, `oc_altitude`) VALUES
('62818', 'Tilly-Capelle', '31T', 442961, 5588387, 50.4447, 2.19667, 60),
('62819', 'Tilques', '31T', 443873, 5625570, 50.7792, 2.20389, 10),
('62820', 'Tincques', '31T', 463842, 5578720, 50.3594, 2.49167, 125),
('62821', 'Tingry', '31T', 410176, 5608091, 50.6178, 1.73028, 70),
('62822', 'Tollent', '31T', 429738, 5570074, 50.2786, 2.01389, 35),
('62823', 'Torcy', '31T', 430607, 5592520, 50.4806, 2.02194, 85),
('62824', 'Tortefontaine', '31T', 423335, 5574889, 50.3211, 1.92306, 25),
('62825', 'Tortequesne', '31T', 502711, 5570814, 50.2894, 3.03806, 40),
('62826', 'Le Touquet-Paris-Plage', '31T', 400051, 5597707, 50.5228, 1.59, 10),
('62827', 'Tournehem-sur-la-Hem', '31T', 432925, 5628696, 50.8061, 2.04805, 35),
('62828', 'Tramecourt', '31T', 439731, 5590616, 50.4644, 2.15083, 120),
('62829', 'Le Transloy', '31T', 492305, 5545215, 50.0592, 2.8925, 125),
('62830', 'Trescault', '31T', 506597, 5548518, 50.0889, 3.09222, 100),
('62831', 'Troisvaux', '31T', 453193, 5583437, 50.4011, 2.34138, 140),
('62832', 'Tubersent', '31T', 408236, 5597219, 50.5197, 1.70555, 15),
('62833', 'Vacquerie-le-Boucq', '31T', 444137, 5568976, 50.2703, 2.21611, 129),
('62834', 'Vacqueriette-Erquières', '31T', 434397, 5575420, 50.3272, 2.07834, 132),
('62835', 'Valhuon', '31T', 455595, 5587308, 50.4361, 2.37472, 160),
('62836', 'Vaudricourt', '31T', 473247, 5594355, 50.5006, 2.62277, 43),
('62837', 'Vaudringhem', '31T', 431228, 5612777, 50.6628, 2.02694, 106),
('62838', 'Vaulx', '31T', 435463, 5568766, 50.2675, 2.09445, 40),
('62839', 'Vaulx-Vraucourt', '31T', 493609, 5554972, 50.1469, 2.91055, 100),
('62840', 'Vélu', '31T', 498093, 5550367, 50.1056, 2.97333, 105),
('62841', 'Vendin-lès-Béthune', '31T', 472268, 5599241, 50.5444, 2.60861, 30),
('62842', 'Vendin-le-Vieil', '31T', 490302, 5591485, 50.4753, 2.86333, 26),
('62843', 'Verchin', '31T', 442152, 5593802, 50.4933, 2.18444, 100),
('62844', 'Verchocq', '31T', 431400, 5601870, 50.5647, 2.03139, 98),
('62845', 'Verlincthun', '31T', 406462, 5609299, 50.6281, 1.6775, 70),
('62846', 'Vermelles', '31T', 481891, 5592867, 50.4875, 2.74473, 30),
('62848', 'Verquin', '31T', 474510, 5594627, 50.5031, 2.64056, 42),
('62849', 'Verton', '31T', 404001, 5584194, 50.4019, 1.64917, 6),
('62850', 'Vieil-Hesdin', '31T', 435861, 5578738, 50.3572, 2.09834, 36),
('62851', 'Vieille-Chapelle', '31T', 478647, 5604462, 50.5917, 2.69833, 19),
('62852', 'Vieille-Église', '31T', 435072, 5642262, 50.9283, 2.07611, 3),
('62853', 'Vieil-Moutier', '31T', 423310, 5613783, 50.6708, 1.91472, 122),
('62854', 'Villers-au-Bois', '31T', 476553, 5580193, 50.3733, 2.67027, 145),
('62855', 'Villers-au-Flos', '31T', 493044, 5547375, 50.0786, 2.90278, 121),
('62856', 'Villers-Brûlin', '31T', 466950, 5579719, 50.3686, 2.53528, 120),
('62857', 'Villers-Châtel', '31T', 470531, 5580563, 50.3764, 2.58556, 145),
('62858', 'Villers-lès-Cagnicourt', '31T', 500654, 5563370, 50.2225, 3.00917, 55),
('62859', 'Villers-l''Hôpital', '31T', 443673, 5564440, 50.2294, 2.21028, 130),
('62860', 'Villers-Sir-Simon', '31T', 463770, 5574026, 50.3172, 2.49111, 127),
('62861', 'Vimy', '31T', 486351, 5580282, 50.3744, 2.80805, 80),
('62862', 'Vincly', '31T', 441189, 5601041, 50.5583, 2.16973, 90),
('62863', 'Violaines', '31T', 484962, 5598787, 50.5408, 2.78778, 25),
('62864', 'Vis-en-Artois', '31T', 495445, 5566275, 50.2486, 2.93611, 65),
('62865', 'Vitry-en-Artois', '31T', 498715, 5574644, 50.3239, 2.98195, 45),
('62866', 'Waben', '31T', 404211, 5581626, 50.3789, 1.65278, 5),
('62867', 'Wacquinghen', '31T', 405908, 5626488, 50.7825, 1.66528, 50),
('62868', 'Wail', '31T', 437602, 5577265, 50.3442, 2.12305, 40),
('62869', 'Wailly', '31T', 480234, 5566155, 50.2472, 2.72277, 75),
('62870', 'Wailly-Beaucamp', '31T', 409512, 5585456, 50.4142, 1.72639, 39),
('62871', 'Wambercourt', '31T', 430631, 5586805, 50.4292, 2.02334, 39),
('62872', 'Wamin', '31T', 433215, 5585196, 50.415, 2.06, 100),
('62873', 'Wancourt', '31T', 490810, 5566096, 50.2469, 2.87111, 59),
('62874', 'Wanquetin', '31T', 472389, 5569434, 50.2764, 2.61251, 95),
('62875', 'Wardrecques', '31T', 453498, 5617752, 50.7097, 2.34139, 28),
('62876', 'Warlencourt-Eaucourt', '31T', 484956, 5547887, 50.0831, 2.78972, 100),
('62877', 'Warlincourt-lès-Pas', '31T', 464752, 5558081, 50.1739, 2.50639, 135),
('62878', 'Warlus', '31T', 476248, 5569291, 50.2753, 2.66667, 100),
('62879', 'Warluzel', '31T', 462078, 5564153, 50.2283, 2.46834, 156),
('62880', 'Le Wast', '31T', 415421, 5622524, 50.7483, 1.80111, 50),
('62881', 'Beauvoir-Wavans', '31T', 440075, 5563368, 50.2194, 2.16001, 40),
('62882', 'Wavrans-sur-l''Aa', '31T', 438970, 5614967, 50.6833, 2.13611, 49),
('62883', 'Wavrans-sur-Ternoise', '31T', 449949, 5584857, 50.4136, 2.29555, 80),
('62885', 'Westrehem', '31T', 453495, 5599651, 50.5469, 2.34362, 106),
('62886', 'Wicquinghem', '31T', 426517, 5603048, 50.5747, 1.96223, 114),
('62887', 'Widehem', '31T', 406144, 5604701, 50.5867, 1.67416, 100),
('62888', 'Wierre-au-Bois', '31T', 412425, 5610957, 50.6439, 1.76139, 70),
('62889', 'Wierre-Effroy', '31T', 411069, 5625933, 50.7783, 1.73861, 35),
('62890', 'Willeman', '31T', 439985, 5578196, 50.3528, 2.15639, 50),
('62891', 'Willencourt', '31T', 435090, 5565836, 50.2411, 2.08972, 35),
('62892', 'Willerval', '31T', 488935, 5578423, 50.3578, 2.84445, 66),
('62893', 'Wimereux', '31T', 401884, 5625017, 50.7686, 1.60861, 10),
('62894', 'Wimille', '31T', 403557, 5624368, 50.7631, 1.6325, 15),
('62895', 'Wingles', '31T', 489341, 5593680, 50.495, 2.84972, 25),
('62896', 'Wirwignes', '31T', 412422, 5615499, 50.6847, 1.76027, 30),
('62897', 'Wismes', '31T', 434220, 5611812, 50.6544, 2.06944, 128),
('62898', 'Wisques', '31T', 442884, 5619371, 50.7233, 2.19083, 100),
('62899', 'Wissant', '31T', 405958, 5637950, 50.8856, 1.66305, 10),
('62900', 'Witternesse', '31T', 454737, 5606745, 50.6108, 2.36028, 25),
('62901', 'Wittes', '31T', 457012, 5613305, 50.67, 2.39167, 23),
('62902', 'Wizernes', '31T', 445575, 5617922, 50.7106, 2.22916, 25),
('62903', 'Zoteux', '31T', 420913, 5607177, 50.6111, 1.88222, 155),
('62904', 'Zouafques', '31T', 433368, 5629648, 50.8147, 2.05417, 30),
('62905', 'Zudausques', '31T', 440036, 5622369, 50.75, 2.15, 80),
('62906', 'Zutkerque', '31T', 434361, 5633899, 50.8531, 2.0675, 25),
('62907', 'Libercourt', '31T', 500296, 5592001, 50.48, 3.00417, 29),
('62908', 'La Capelle-lès-Boulogne', '31T', 408785, 5620782, 50.7317, 1.7075, 105),
('62909', 'Ytres', '31T', 499543, 5545858, 50.065, 2.99361, 120),
('63001', 'Aigueperse', '31T', 515738, 5096722, 46.0239, 3.20334, 350),
('63002', 'Aix-la-Fayette', '31T', 540701, 5040449, 45.5164, 3.52111, 960),
('63003', 'Ambert', '31T', 557761, 5044441, 45.5511, 3.73999, 560),
('63004', 'Les Ancizes-Comps', '31T', 485160, 5085794, 45.9256, 2.80861, 699),
('63005', 'Antoingt', '31T', 513607, 5038666, 45.5014, 3.17417, 500),
('63006', 'Anzat-le-Luguet', '31T', 503287, 5019858, 45.3322, 3.04195, 1130),
('63007', 'Apchat', '31T', 511503, 5026286, 45.39, 3.14695, 710),
('63008', 'Arconsat', '31T', 555325, 5081888, 45.8883, 3.71306, 776),
('63009', 'Ardes', '31T', 509869, 5027827, 45.4039, 3.12611, 620),
('63010', 'Arlanc', '31T', 556701, 5029834, 45.4197, 3.72473, 620),
('63011', 'Ars-les-Favets', '31T', 481353, 5115742, 46.195, 2.75833, 580),
('63012', 'Artonne', '31T', 511270, 5094613, 46.005, 3.14556, 403),
('63013', 'Aubiat', '31T', 513040, 5091500, 45.9769, 3.16834, 340),
('63014', 'Aubière', '31T', 508728, 5066463, 45.7517, 3.11222, 380),
('63015', 'Aubusson-d''Auvergne', '31T', 548089, 5067105, 45.7558, 3.61833, 430),
('63016', 'Augerolles', '31T', 548181, 5063588, 45.7242, 3.61916, 547),
('63017', 'Augnat', '31T', 514215, 5028822, 45.4128, 3.18167, 611),
('63018', 'Aulhat-Saint-Privat', '31T', 524361, 5046753, 45.5739, 3.31222, 420),
('63019', 'Aulnat', '31T', 512737, 5071315, 45.7953, 3.16389, 327),
('63020', 'Aurières', '31T', 492754, 5058992, 45.6844, 2.90695, 987),
('63021', 'Authezat', '31T', 514333, 5053264, 45.6328, 3.18389, 390),
('63022', 'Auzat-la-Combelle', '31T', 524631, 5033299, 45.4528, 3.31501, 400),
('63023', 'Auzelles', '31T', 539796, 5049764, 45.6003, 3.51028, 728),
('63024', 'Avèze', '31T', 468784, 5049808, 45.6011, 2.59973, 811),
('63025', 'Ayat-sur-Sioule', '31T', 491770, 5099793, 46.0517, 2.89361, 553),
('63026', 'Aydat', '31T', 497988, 5056458, 45.6617, 2.97417, 846),
('63027', 'Baffie', '31T', 564399, 5035802, 45.4728, 3.82389, 880),
('63028', 'Bagnols', '31T', 471202, 5038624, 45.5006, 2.63139, 860),
('63029', 'Bansat', '31T', 526918, 5036764, 45.4839, 3.34444, 440),
('63030', 'Bas-et-Lezat', '31T', 523090, 5096869, 46.025, 3.29833, 327),
('63031', 'Beaulieu', '31T', 522397, 5032303, 45.4439, 3.28639, 450),
('63032', 'Beaumont', '31T', 506330, 5066706, 45.7539, 3.08139, 440),
('63033', 'Beaumont-lès-Randan', '31T', 529727, 5093718, 45.9964, 3.38388, 320),
('63034', 'Beauregard-l''Évêque', '31T', 523309, 5072951, 45.8097, 3.3, 390),
('63035', 'Beauregard-Vendon', '31T', 508847, 5089455, 45.9586, 3.11417, 360),
('63036', 'Bergonne', '31T', 517055, 5039353, 45.5075, 3.21833, 540),
('63037', 'Bertignat', '31T', 553036, 5051868, 45.6183, 3.68027, 750),
('63038', 'Besse-et-Saint-Anastaise', '31T', 494858, 5039949, 45.5131, 2.93417, 1039),
('63039', 'Beurières', '31T', 560441, 5031874, 45.4378, 3.77278, 620),
('63040', 'Billom', '31T', 526609, 5063396, 45.7236, 3.34194, 360),
('63041', 'Biollet', '31T', 475391, 5093356, 45.9933, 2.68222, 700),
('63042', 'Blanzat', '31T', 505976, 5074977, 45.8283, 3.07694, 390),
('63043', 'Blot-l''Église', '31T', 496539, 5098277, 46.0381, 2.95527, 640),
('63044', 'Bongheat', '31T', 533416, 5063861, 45.7275, 3.42945, 440),
('63045', 'Bort-l''Étang', '31T', 533188, 5070063, 45.7833, 3.42694, 347),
('63046', 'Boudes', '31T', 514398, 5034162, 45.4608, 3.18416, 462),
('63047', 'La Bourboule', '31T', 479632, 5048220, 45.5872, 2.73889, 879),
('63048', 'Bourg-Lastic', '31T', 465520, 5055133, 45.6489, 2.5575, 770),
('63049', 'Bouzel', '31T', 524640, 5069437, 45.7781, 3.31695, 323),
('63050', 'Brassac-les-Mines', '31T', 525930, 5028953, 45.4136, 3.33139, 413),
('63051', 'Brenat', '31T', 524023, 5044375, 45.5525, 3.30777, 380),
('63052', 'Le Breuil-sur-Couze', '31T', 520650, 5035167, 45.4697, 3.26417, 395),
('63053', 'Briffons', '31T', 473422, 5060619, 45.6986, 2.65861, 933),
('63054', 'Le Broc', '31T', 518902, 5038710, 45.5017, 3.24195, 500),
('63055', 'Bromont-Lamothe', '31T', 486044, 5076472, 45.8417, 2.82028, 760),
('63056', 'Brousse', '31T', 535786, 5050110, 45.6036, 3.45889, 640),
('63057', 'Le Brugeron', '31T', 556039, 5062357, 45.7125, 3.72, 826),
('63058', 'Bulhon', '31T', 529933, 5082392, 45.8944, 3.38584, 340),
('63059', 'Busséol', '31T', 519768, 5059760, 45.6911, 3.25388, 560),
('63060', 'Bussières', '31T', 471623, 5101952, 46.0706, 2.63306, 582),
('63061', 'Bussières-et-Pruns', '31T', 518022, 5094907, 46.0075, 3.23278, 340),
('63062', 'Buxières-sous-Montaigut', '31T', 488321, 5116651, 46.2033, 2.84862, 580),
('63063', 'Cébazat', '31T', 507853, 5075257, 45.8308, 3.10111, 350),
('63064', 'La Celle', '31T', 459393, 5078039, 45.8547, 2.47695, 720),
('63065', 'Ceilloux', '31T', 539997, 5055505, 45.6519, 3.51333, 660),
('63066', 'Celles-sur-Durolle', '31T', 549317, 5078411, 45.8575, 3.63528, 660),
('63067', 'La Cellette', '31T', 478574, 5105597, 46.1036, 2.72278, 580),
('63068', 'Cellule', '31T', 511002, 5088132, 45.9467, 3.14195, 331),
('63069', 'Le Cendre', '31T', 514462, 5063110, 45.7214, 3.18584, 350),
('63070', 'Ceyrat', '31T', 505122, 5064206, 45.7314, 3.06583, 560),
('63071', 'Ceyssat', '31T', 491770, 5067881, 45.7644, 2.89416, 800),
('63072', 'Chabreloche', '31T', 554105, 5080858, 45.8792, 3.69722, 619),
('63073', 'Chadeleuf', '31T', 513868, 5048171, 45.5869, 3.17778, 440),
('63074', 'Chalus', '31T', 516329, 5035000, 45.4683, 3.20889, 560),
('63075', 'Chamalières', '31T', 505312, 5069267, 45.7769, 3.06833, 392),
('63076', 'Chambon-sur-Dolore', '31T', 547833, 5038463, 45.4981, 3.61223, 980),
('63077', 'Chambon-sur-Lac', '31T', 491916, 5046495, 45.5719, 2.8964, 889),
('63078', 'Chaméane', '31T', 535171, 5040046, 45.5131, 3.45028, 820),
('63079', 'Champagnat-le-Jeune', '31T', 533342, 5032999, 45.4497, 3.42639, 680),
('63080', 'Champeix', '31T', 510011, 5048349, 45.5886, 3.12834, 460),
('63081', 'Champétières', '31T', 554192, 5041015, 45.5206, 3.69389, 700),
('63082', 'Champs', '31T', 506575, 5100532, 46.0583, 3.085, 556),
('63083', 'Chanat-la-Mouteyre', '31T', 500992, 5075036, 45.8289, 3.01277, 800),
('63084', 'Chanonat', '31T', 507375, 5059980, 45.6933, 3.09472, 480),
('63085', 'Chapdes-Beaufort', '31T', 489376, 5082174, 45.8931, 2.86306, 780),
('63086', 'La Chapelle-Agnon', '31T', 549709, 5053662, 45.6347, 3.63778, 720),
('63087', 'La Chapelle-Marcousse', '31T', 507516, 5032668, 45.4475, 3.09611, 1000),
('63088', 'La Chapelle-sur-Usson', '31T', 531183, 5034716, 45.4653, 3.39889, 660),
('63089', 'Chappes', '31T', 517161, 5079566, 45.8694, 3.22111, 313),
('63090', 'Chaptuzat', '31T', 513822, 5097859, 46.0342, 3.17861, 380),
('63091', 'Charbonnier-les-Mines', '31T', 522365, 5029155, 45.4156, 3.28584, 450),
('63092', 'Charbonnières-les-Varennes', '31T', 499978, 5083770, 45.9075, 2.99972, 720),
('63093', 'Charbonnières-les-Vieilles', '31T', 499914, 5093399, 45.9942, 2.99889, 617),
('63094', 'Charensat', '31T', 471859, 5092538, 45.9858, 2.63667, 680),
('63095', 'Charnat', '31T', 533414, 5088119, 45.9458, 3.4311, 281),
('63096', 'Chas', '31T', 523421, 5066223, 45.7492, 3.30111, 380),
('63097', 'Chassagne', '31T', 505968, 5038283, 45.4981, 3.07639, 952),
('63098', 'Chastreix', '31T', 479084, 5039827, 45.5117, 2.73223, 1040),
('63099', 'Châteaugay', '31T', 506729, 5077015, 45.8467, 3.08666, 480),
('63100', 'Châteauneuf-les-Bains', '31T', 491960, 5097232, 46.0286, 2.89611, 430),
('63101', 'Château-sur-Cher', '31T', 465894, 5107166, 46.1172, 2.5586, 460),
('63102', 'Châteldon', '31T', 540109, 5091616, 45.9769, 3.51777, 310),
('63103', 'Châtelguyon', '31T', 505471, 5085501, 45.9231, 3.07056, 470),
('63104', 'La Chaulme', '31T', 573723, 5035072, 45.4653, 3.94305, 1140),
('63105', 'Chaumont-le-Bourg', '31T', 560298, 5033200, 45.4497, 3.77111, 603),
('63106', 'Chauriat', '31T', 521778, 5066433, 45.7511, 3.28, 400),
('63107', 'Chavaroux', '31T', 520121, 5077630, 45.8519, 3.25916, 330),
('63108', 'Le Cheix', '31T', 513604, 5089341, 45.9575, 3.17555, 331),
('63109', 'Chidrac', '31T', 511556, 5044710, 45.5558, 3.14806, 476),
('63110', 'Cisternes-la-Forêt', '31T', 477136, 5070820, 45.7906, 2.70583, 820),
('63111', 'Clémensat', '31T', 508151, 5045600, 45.5639, 3.10445, 620),
('63112', 'Clerlande', '31T', 514949, 5084930, 45.9178, 3.19277, 332),
('63113', 'Clermont-Ferrand', '31T', 506608, 5069515, 45.7792, 3.085, 365),
('63114', 'Collanges', '31T', 517033, 5031607, 45.4378, 3.21778, 472),
('63115', 'Combrailles', '31T', 471505, 5076398, 45.8406, 2.63305, 689),
('63116', 'Combronde', '31T', 506863, 5092138, 45.9828, 3.0886, 401),
('63117', 'Compains', '31T', 494374, 5032111, 45.4425, 2.92806, 989),
('63118', 'Condat-en-Combraille', '31T', 466011, 5077629, 45.8514, 2.56222, 671),
('63119', 'Condat-lès-Montboissier', '31T', 539051, 5044142, 45.5497, 3.50028, 800),
('63120', 'Corent', '31T', 515017, 5057062, 45.6669, 3.19278, 520),
('63121', 'Coudes', '31T', 516178, 5051232, 45.6144, 3.20749, 360),
('63122', 'Courgoul', '31T', 502951, 5040133, 45.5147, 3.03778, 600),
('63123', 'Cournols', '31T', 502792, 5054884, 45.6475, 3.03583, 773),
('63124', 'Cournon-d''Auvergne', '31T', 515278, 5065272, 45.7408, 3.19639, 400),
('63125', 'Courpière', '31T', 542017, 5067339, 45.7583, 3.54028, 332),
('63126', 'Le Crest', '31T', 509906, 5059366, 45.6878, 3.12722, 580),
('63127', 'Creste', '31T', 503382, 5044145, 45.5508, 3.04333, 820),
('63128', 'Crevant-Laveine', '31T', 528997, 5084363, 45.9122, 3.37389, 310),
('63129', 'Cros', '31T', 468801, 5035827, 45.4753, 2.60084, 800),
('63130', 'La Crouzille', '31T', 480341, 5114418, 46.1831, 2.74527, 560),
('63131', 'Culhat', '31T', 526111, 5078918, 45.8633, 3.33638, 306),
('63132', 'Cunlhat', '31T', 543627, 5053369, 45.6325, 3.55973, 700),
('63133', 'Dallet', '31T', 518639, 5068398, 45.7689, 3.23972, 320),
('63134', 'Dauzat-sur-Vodable', '31T', 507750, 5036650, 45.4833, 3.09917, 906),
('63135', 'Davayat', '31T', 508440, 5088128, 45.9467, 3.10889, 350),
('63136', 'Domaize', '31T', 541616, 5059374, 45.6867, 3.53444, 551),
('63137', 'Doranges', '31T', 548040, 5028311, 45.4067, 3.61388, 954),
('63138', 'Dorat', '31T', 537348, 5082093, 45.8914, 3.48139, 294),
('63139', 'Dore-l''Église', '31T', 558782, 5025686, 45.3822, 3.75083, 600),
('63140', 'Durmignat', '31T', 491575, 5114701, 46.1858, 2.89083, 490),
('63141', 'Durtol', '31T', 504059, 5071334, 45.7956, 3.05223, 507),
('63142', 'Échandelys', '31T', 541526, 5043633, 45.545, 3.53194, 880),
('63143', 'Effiat', '31T', 519880, 5099079, 46.045, 3.25695, 348),
('63144', 'Égliseneuve-d''Entraigues', '31T', 486371, 5028266, 45.4078, 2.82584, 960),
('63145', 'Égliseneuve-des-Liards', '31T', 533164, 5046145, 45.5681, 3.425, 703),
('63146', 'Égliseneuve-près-Billom', '31T', 530457, 5063291, 45.7225, 3.39139, 511),
('63147', 'Églisolles', '31T', 569046, 5033815, 45.4544, 3.88306, 920),
('63148', 'Ennezat', '31T', 517541, 5082715, 45.8978, 3.22612, 320),
('63149', 'Entraigues', '31T', 520237, 5081797, 45.8894, 3.26083, 310),
('63150', 'Enval', '31T', 503792, 5082784, 45.8986, 3.04888, 440),
('63151', 'Escoutoux', '31T', 543739, 5074265, 45.8206, 3.56305, 400),
('63152', 'Espinasse', '31T', 477668, 5098316, 46.0381, 2.7114, 680),
('63153', 'Espinchal', '31T', 490781, 5026746, 45.3942, 2.88222, 1052),
('63154', 'Espirat', '31T', 526142, 5066542, 45.7519, 3.33611, 340),
('63155', 'Estandeuil', '31T', 534375, 5058466, 45.6789, 3.44139, 520),
('63156', 'Esteil', '31T', 528540, 5033284, 45.4525, 3.365, 680),
('63157', 'Fayet-le-Château', '31T', 531996, 5058329, 45.6778, 3.41083, 640),
('63158', 'Fayet-Ronaye', '31T', 541852, 5030427, 45.4261, 3.53499, 960),
('63159', 'Fernoël', '31T', 456080, 5073185, 45.8108, 2.43472, 809),
('63160', 'Flat', '31T', 523539, 5046410, 45.5708, 3.30167, 461),
('63161', 'La Forie', '31T', 559302, 5048900, 45.5911, 3.76028, 600),
('63162', 'Fournols', '31T', 545951, 5040516, 45.5167, 3.58833, 994),
('63163', 'Gelles', '31T', 481620, 5068459, 45.7694, 2.76361, 854),
('63164', 'Gerzat', '31T', 511220, 5074707, 45.8258, 3.14445, 325),
('63165', 'Giat', '31T', 458621, 5072335, 45.8033, 2.46749, 750),
('63166', 'Gignat', '31T', 517302, 5036484, 45.4817, 3.22139, 430),
('63167', 'Gimeaux', '31T', 507276, 5088589, 45.9508, 3.09388, 380),
('63168', 'Glaine-Montaigut', '31T', 530158, 5066962, 45.7556, 3.38777, 380),
('63169', 'La Godivelle', '31T', 493911, 5026032, 45.3878, 2.92222, 1220),
('63170', 'La Goutelle', '31T', 481234, 5076669, 45.8433, 2.75833, 768),
('63171', 'Gouttières', '31T', 482318, 5101079, 46.0631, 2.77139, 660),
('63172', 'Grandeyrolles', '31T', 504465, 5046923, 45.5758, 3.05723, 700),
('63173', 'Grandrif', '31T', 563689, 5039437, 45.5056, 3.81528, 768),
('63174', 'Grandval', '31T', 550346, 5049809, 45.6, 3.64556, 780),
('63175', 'Herment', '31T', 466515, 5067010, 45.7558, 2.56945, 820),
('63176', 'Heume-l''Église', '31T', 479225, 5062757, 45.7181, 2.73305, 940),
('63177', 'Isserteaux', '31T', 530106, 5055481, 45.6522, 3.38639, 680),
('63178', 'Issoire', '31T', 519343, 5043279, 45.5428, 3.24777, 390),
('63179', 'Job', '31T', 558084, 5051759, 45.6169, 3.745, 642),
('63180', 'Joze', '31T', 523481, 5078908, 45.8633, 3.3025, 310),
('63181', 'Joserand', '31T', 507632, 5097108, 46.0275, 3.09861, 420),
('63182', 'Jumeaux', '31T', 526573, 5031115, 45.4331, 3.33972, 400),
('63183', 'Labessette', '31T', 464033, 5037458, 45.4897, 2.53972, 769),
('63184', 'Lachaux', '31T', 545905, 5093508, 45.9936, 3.59277, 660),
('63185', 'Lamontgie', '31T', 525902, 5035834, 45.4756, 3.33139, 480),
('63186', 'Landogne', '31T', 473335, 5080556, 45.8781, 2.65639, 600),
('63187', 'Lapeyrouse', '31T', 490124, 5118931, 46.2239, 2.87194, 523),
('63188', 'Laps', '31T', 520856, 5057788, 45.6733, 3.26777, 520),
('63189', 'Laqueuille', '31T', 479244, 5055288, 45.6508, 2.73362, 1000),
('63190', 'Larodde', '31T', 464881, 5041588, 45.5269, 2.55027, 800),
('63191', 'Lastic', '31T', 466466, 5061979, 45.7106, 2.56917, 760),
('63192', 'La Tour-d''Auvergne', '31T', 475773, 5042123, 45.5322, 2.68972, 960),
('63193', 'Lempdes', '31T', 515378, 5068543, 45.7703, 3.19778, 346),
('63194', 'Lempty', '31T', 525804, 5075028, 45.8283, 3.33222, 320),
('63195', 'Lezoux', '31T', 529494, 5075014, 45.8281, 3.37973, 360),
('63196', 'Limons', '31T', 534538, 5091181, 45.9733, 3.44583, 289),
('63197', 'Lisseuil', '31T', 493898, 5101087, 46.0633, 2.92111, 369),
('63198', 'Loubeyrat', '31T', 500947, 5086857, 45.9353, 3.01222, 680),
('63199', 'Ludesse', '31T', 508642, 5050847, 45.6111, 3.11083, 580),
('63200', 'Lussat', '31T', 516761, 5076262, 45.8397, 3.21584, 317),
('63201', 'Luzillat', '31T', 530099, 5088102, 45.9458, 3.38833, 290),
('63202', 'Madriat', '31T', 514514, 5030922, 45.4317, 3.18555, 466),
('63203', 'Malauzat', '31T', 504076, 5077043, 45.8469, 3.0525, 507),
('63204', 'Malintrat', '31T', 514437, 5073572, 45.8156, 3.18583, 322),
('63205', 'Manglieu', '31T', 527550, 5050901, 45.6111, 3.35333, 440),
('63206', 'Manzat', '31T', 495631, 5089821, 45.9619, 2.94362, 620),
('63207', 'Marat', '31T', 553256, 5056592, 45.6608, 3.68361, 520),
('63208', 'Marcillat', '31T', 502942, 5102968, 46.0803, 3.03805, 480),
('63209', 'Mareugheol', '31T', 512872, 5037183, 45.4881, 3.16472, 508),
('63210', 'Maringues', '31T', 525395, 5085304, 45.9208, 3.3275, 300),
('63211', 'Marsac-en-Livradois', '31T', 556662, 5036561, 45.4803, 3.725, 545),
('63212', 'Marsat', '31T', 506446, 5080225, 45.8756, 3.08306, 364),
('63213', 'Les Martres-d''Artière', '31T', 520257, 5075594, 45.8336, 3.26083, 320),
('63214', 'Les Martres-de-Veyre', '31T', 514947, 5059068, 45.685, 3.19195, 340),
('63215', 'Martres-sur-Morge', '31T', 517140, 5087096, 45.9372, 3.2211, 320),
('63216', 'Mauzun', '31T', 533474, 5061146, 45.7031, 3.43001, 600),
('63218', 'Mayres', '31T', 554340, 5026295, 45.3881, 3.69416, 800),
('63219', 'Mazaye', '31T', 489227, 5070817, 45.7908, 2.86139, 746),
('63220', 'Mazoires', '31T', 503522, 5026647, 45.3933, 3.045, 980),
('63221', 'Medeyrolles', '31T', 562847, 5028163, 45.4042, 3.80306, 1040),
('63222', 'Meilhaud', '31T', 512620, 5043663, 45.5464, 3.16167, 460),
('63223', 'Menat', '31T', 492701, 5105780, 46.1056, 2.90556, 420),
('63224', 'Ménétrol', '31T', 509615, 5079765, 45.8714, 3.12389, 330),
('63225', 'Messeix', '31T', 465545, 5051738, 45.6183, 2.55806, 767),
('63226', 'Mezel', '31T', 518751, 5067040, 45.7567, 3.24111, 360),
('63227', 'Mirefleurs', '31T', 517540, 5060062, 45.6939, 3.22528, 400),
('63228', 'Miremont', '31T', 477892, 5082946, 45.8997, 2.715, 600),
('63229', 'Moissat', '31T', 527297, 5069294, 45.7767, 3.35112, 360),
('63230', 'Le Monestier', '31T', 551677, 5045993, 45.5656, 3.66222, 940),
('63231', 'La Monnerie-le-Montel', '31T', 546976, 5079967, 45.8717, 3.60527, 539),
('63232', 'Mons', '31T', 532284, 5094286, 46.0014, 3.41694, 320),
('63233', 'Montaigut', '31T', 485315, 5114281, 46.1819, 2.80973, 620),
('63234', 'Montaigut-le-Blanc', '31T', 507086, 5048006, 45.5856, 3.09084, 500),
('63235', 'Montcel', '31T', 505182, 5095716, 46.015, 3.06694, 440),
('63236', 'Mont-Dore', '31T', 485262, 5046908, 45.5756, 2.81111, 1022),
('63237', 'Montel-de-Gelat', '31T', 467807, 5087033, 45.9361, 2.58472, 680),
('63238', 'Montfermy', '31T', 485278, 5080856, 45.8811, 2.81028, 560),
('63239', 'Montmorin', '31T', 527921, 5060131, 45.6942, 3.35862, 600),
('63240', 'Montpensier', '31T', 517304, 5097899, 46.0344, 3.22361, 360),
('63241', 'Montpeyroux', '31T', 515743, 5052249, 45.6236, 3.20195, 490),
('63242', 'Moriat', '31T', 520238, 5028006, 45.4053, 3.25861, 480),
('63243', 'Moureuille', '31T', 492880, 5112539, 46.1664, 2.90777, 580),
('63244', 'La Moutade', '31T', 512461, 5090295, 45.9661, 3.16083, 340),
('63245', 'Mozac', '31T', 507543, 5082077, 45.8922, 3.09723, 360),
('63246', 'Murat-le-Quaire', '31T', 479310, 5049332, 45.5972, 2.73472, 973),
('63247', 'Murol', '31T', 495557, 5046831, 45.575, 2.94306, 860),
('63248', 'Nébouzat', '31T', 492650, 5062480, 45.7158, 2.90556, 900),
('63249', 'Néronde-sur-Dore', '31T', 540411, 5071773, 45.7983, 3.52, 310),
('63250', 'Neschers', '31T', 512740, 5048539, 45.5903, 3.16333, 406),
('63251', 'Neuf-Église', '31T', 491519, 5104855, 46.0972, 2.89028, 564),
('63252', 'Neuville', '31T', 533945, 5065901, 45.7458, 3.43639, 420),
('63253', 'Noalhat', '31T', 535220, 5084796, 45.9158, 3.45416, 284),
('63254', 'Nohanent', '31T', 504316, 5073063, 45.8111, 3.05555, 440),
('63255', 'Nonette', '31T', 521645, 5036034, 45.4775, 3.27694, 500),
('63256', 'Novacelles', '31T', 550751, 5031789, 45.4378, 3.64888, 789),
('63257', 'Olby', '31T', 489585, 5065786, 45.7456, 2.86611, 760),
('63258', 'Olliergues', '31T', 547260, 5059599, 45.6883, 3.60694, 450),
('63259', 'Olloix', '31T', 503660, 5052045, 45.6219, 3.04695, 840),
('63260', 'Olmet', '31T', 551436, 5062132, 45.7108, 3.66084, 620),
('63261', 'Orbeil', '31T', 521894, 5045602, 45.5636, 3.28055, 400),
('63262', 'Orcet', '31T', 513082, 5061131, 45.7036, 3.16805, 380),
('63263', 'Orcines', '31T', 501080, 5070006, 45.7836, 3.01389, 820),
('63264', 'Orcival', '31T', 487714, 5058969, 45.6842, 2.84223, 870),
('63265', 'Orléat', '31T', 532581, 5078702, 45.8611, 3.41972, 377),
('63266', 'Orsonnette', '31T', 523449, 5035701, 45.4744, 3.3, 390),
('63267', 'Palladuc', '31T', 548629, 5083622, 45.9044, 3.62694, 751),
('63268', 'Pardines', '31T', 513483, 5045609, 45.5639, 3.17277, 600),
('63269', 'Parent', '31T', 517778, 5052193, 45.6231, 3.22805, 470),
('63270', 'Parentignat', '31T', 522535, 5042271, 45.5336, 3.28861, 374),
('63271', 'Paslières', '31T', 537795, 5086540, 45.9314, 3.4875, 350),
('63272', 'Pérignat-lès-Sarliève', '31T', 510719, 5064768, 45.7364, 3.13778, 360),
('63273', 'Pérignat-sur-Allier', '31T', 518069, 5064106, 45.7303, 3.23223, 340),
('63274', 'Perpezat', '31T', 482456, 5058519, 45.68, 2.77472, 910),
('63275', 'Perrier', '31T', 515200, 5043885, 45.5483, 3.19472, 440),
('63276', 'Peschadoires', '31T', 538276, 5074938, 45.8269, 3.49278, 320),
('63277', 'Peslières', '31T', 535978, 5031748, 45.4383, 3.46001, 800),
('63278', 'Pessat-Villeneuve', '31T', 512168, 5085974, 45.9272, 3.15694, 340),
('63279', 'Picherande', '31T', 481954, 5034603, 45.4647, 2.76916, 1134),
('63280', 'Pignols', '31T', 521971, 5054644, 45.645, 3.28195, 620),
('63281', 'Pionsat', '31T', 476323, 5106315, 46.11, 2.69362, 530),
('63282', 'Plauzat', '31T', 511542, 5051932, 45.6208, 3.14805, 420),
('63283', 'Pontaumur', '31T', 474753, 5079439, 45.8681, 2.67472, 537),
('63284', 'Pont-du-Château', '31T', 519622, 5071857, 45.8, 3.2525, 330),
('63285', 'Pontgibaud', '31T', 488523, 5075510, 45.8331, 2.85222, 671),
('63286', 'Pouzol', '31T', 497767, 5104202, 46.0914, 2.97111, 625),
('63287', 'Les Pradeaux', '31T', 523021, 5039773, 45.5111, 3.29472, 390),
('63288', 'Prompsat', '31T', 505964, 5088125, 45.9467, 3.07695, 400),
('63289', 'Prondines', '31T', 474813, 5067526, 45.7608, 2.67612, 872),
('63290', 'Pulvérières', '31T', 492779, 5081213, 45.8844, 2.90694, 860),
('63291', 'Puy-Guillaume', '31T', 536764, 5089713, 45.96, 3.47445, 286),
('63292', 'Puy-Saint-Gulmier', '31T', 470921, 5071463, 45.7961, 2.62583, 820),
('63293', 'Le Quartier', '31T', 481737, 5107840, 46.1239, 2.76361, 660),
('63294', 'Queuille', '31T', 488121, 5090849, 45.9711, 2.84667, 660),
('63295', 'Randan', '31T', 527502, 5095961, 46.0167, 3.35528, 408),
('63296', 'Ravel', '31T', 530750, 5069680, 45.78, 3.39556, 330),
('63297', 'Reignat', '31T', 527872, 5066180, 45.7486, 3.35833, 380),
('63298', 'La Renaudie', '31T', 556232, 5064921, 45.7356, 3.72277, 940),
('63299', 'Rentières', '31T', 507672, 5029181, 45.4161, 3.09805, 720),
('63300', 'Riom', '31T', 508707, 5081925, 45.8908, 3.11223, 340),
('63301', 'Ris', '31T', 539146, 5094203, 46.0003, 3.50555, 340),
('63302', 'La Roche-Blanche', '31T', 509753, 5060878, 45.7014, 3.12528, 480),
('63303', 'Roche-Charles-la-Mayrand', '31T', 502389, 5033930, 45.4589, 3.03056, 1100),
('63304', 'Roche-d''Agoux', '31T', 471481, 5099113, 46.045, 2.63139, 690),
('63305', 'Rochefort-Montagne', '31T', 484815, 5059130, 45.6856, 2.80499, 851),
('63306', 'La Roche-Noire', '31T', 517470, 5061605, 45.7078, 3.22444, 440),
('63307', 'Romagnat', '31T', 507629, 5064146, 45.7308, 3.09805, 480),
('63308', 'Royat', '31T', 503758, 5067939, 45.765, 3.04833, 520),
('63309', 'Saillant', '31T', 571389, 5034088, 45.4567, 3.91306, 920),
('63310', 'Sainte-Agathe', '31T', 547601, 5074478, 45.8222, 3.61278, 620),
('63311', 'Saint-Agoulin', '31T', 510617, 5098717, 46.0419, 3.13722, 500),
('63312', 'Saint-Alyre-d''Arlanc', '31T', 549966, 5023943, 45.3672, 3.63805, 840),
('63313', 'Saint-Alyre-ès-Montagne', '31T', 499587, 5026214, 45.3894, 2.99472, 1160),
('63314', 'Saint-Amant-Roche-Savine', '31T', 549176, 5047053, 45.5753, 3.63028, 900),
('63315', 'Saint-Amant-Tallende', '31T', 508265, 5057327, 45.6694, 3.10611, 440),
('63317', 'Saint-André-le-Coq', '31T', 524020, 5089989, 45.9631, 3.31, 314),
('63318', 'Saint-Angel', '31T', 495009, 5093494, 45.995, 2.93555, 655),
('63319', 'Saint-Anthème', '31T', 571471, 5042113, 45.5289, 3.91528, 925),
('63320', 'Saint-Avit', '31T', 463048, 5079868, 45.8714, 2.52389, 712),
('63321', 'Saint-Babel', '31T', 523376, 5049249, 45.5964, 3.29972, 540),
('63322', 'Saint-Beauzire', '31T', 514040, 5077305, 45.8492, 3.18083, 317),
('63323', 'Saint-Bonnet-le-Bourg', '31T', 547495, 5031424, 45.4347, 3.60722, 963),
('63324', 'Saint-Bonnet-le-Chastel', '31T', 549524, 5033199, 45.4506, 3.63334, 880),
('63325', 'Saint-Bonnet-lès-Allier', '31T', 519599, 5065592, 45.7436, 3.25195, 380),
('63326', 'Saint-Bonnet-près-Orcival', '31T', 489145, 5061343, 45.7056, 2.86055, 820),
('63327', 'Saint-Bonnet-près-Riom', '31T', 508830, 5086215, 45.9294, 3.11389, 370),
('63328', 'Sainte-Catherine', '31T', 536946, 5033266, 45.4519, 3.4725, 860),
('63329', 'Sainte-Christine', '31T', 487325, 5101499, 46.0669, 2.83611, 660),
('63330', 'Saint-Cirgues-sur-Couze', '31T', 511210, 5044247, 45.5517, 3.14362, 463),
('63331', 'Saint-Clément-de-Valorgue', '31T', 571921, 5038847, 45.4994, 3.92056, 920),
('63332', 'Saint-Clément-de-Régnat', '31T', 522971, 5094275, 46.0017, 3.29667, 320),
('63333', 'Saint-Denis-Combarnazat', '31T', 525870, 5090182, 45.9647, 3.33389, 345),
('63334', 'Saint-Dier-d''Auvergne', '31T', 537449, 5058174, 45.6761, 3.48084, 445),
('63335', 'Saint-Diéry', '31T', 501540, 5043527, 45.5453, 3.01973, 760),
('63336', 'Saint-Donat', '31T', 478069, 5035140, 45.4694, 2.71944, 1040),
('63337', 'Saint-Éloy-la-Glacière', '31T', 544657, 5045568, 45.5622, 3.57223, 1047),
('63338', 'Saint-Éloy-les-Mines', '31T', 486918, 5112178, 46.1631, 2.83055, 500),
('63339', 'Saint-Étienne-des-Champs', '31T', 467207, 5075277, 45.8303, 2.57778, 737),
('63340', 'Saint-Étienne-sur-Usson', '31T', 532137, 5039320, 45.5067, 3.41139, 780),
('63341', 'Saint-Ferréol-des-Côtes', '31T', 555008, 5041885, 45.5283, 3.70444, 640),
('63342', 'Saint-Floret', '31T', 508174, 5044273, 45.5519, 3.10472, 500),
('63343', 'Saint-Flour', '31T', 539222, 5061735, 45.7081, 3.50389, 500),
('63344', 'Saint-Gal-sur-Sioule', '31T', 500751, 5106331, 46.1106, 3.00972, 340),
('63345', 'Saint-Genès-Champanelle', '31T', 501427, 5062908, 45.7197, 3.01834, 860),
('63346', 'Saint-Genès-Champespe', '31T', 478332, 5029492, 45.4186, 2.72305, 1020),
('63347', 'Saint-Genès-du-Retz', '31T', 516780, 5100922, 46.0617, 3.21695, 357),
('63348', 'Saint-Genès-la-Tourette', '31T', 536886, 5039809, 45.5108, 3.47222, 770),
('63349', 'Saint-Georges-de-Mons', '31T', 487705, 5087116, 45.9375, 2.84139, 735),
('63350', 'Saint-Georges-sur-Allier', '31T', 518853, 5061979, 45.7111, 3.24222, 460),
('63351', 'Saint-Germain-près-Herment', '31T', 467731, 5064102, 45.7297, 2.58528, 740),
('63352', 'Saint-Germain-Lembron', '31T', 518503, 5034018, 45.4594, 3.23666, 420),
('63353', 'Saint-Germain-l''Herm', '31T', 542328, 5034103, 45.4592, 3.54139, 1031),
('63354', 'Saint-Gervais-d''Auvergne', '31T', 486091, 5097458, 46.0306, 2.82027, 720),
('63355', 'Saint-Gervais-sous-Meymont', '31T', 549714, 5058384, 45.6772, 3.63833, 420),
('63356', 'Saint-Gervazy', '31T', 516996, 5029169, 45.4158, 3.21722, 500),
('63357', 'Saint-Hérent', '31T', 511706, 5034063, 45.46, 3.14973, 597),
('63358', 'Saint-Hilaire-la-Croix', '31T', 503675, 5099295, 46.0472, 3.0475, 560),
('63359', 'Saint-Hilaire-les-Monges', '31T', 473865, 5073332, 45.8131, 2.66361, 760),
('63360', 'Saint-Hilaire', '31T', 471620, 5105965, 46.1067, 2.63278, 566),
('63362', 'Saint-Ignat', '31T', 521129, 5085565, 45.9233, 3.27249, 308),
('63363', 'Saint-Jacques-d''Ambur', '31T', 482784, 5083146, 45.9017, 2.77806, 686),
('63364', 'Saint-Jean-d''Heurs', '31T', 534656, 5073991, 45.8186, 3.44611, 370),
('63365', 'Saint-Jean-des-Ollières', '31T', 533920, 5054606, 45.6442, 3.43528, 680),
('63366', 'Saint-Jean-en-Val', '31T', 527724, 5041057, 45.5225, 3.355, 420),
('63367', 'Saint-Jean-Saint-Gervais', '31T', 529255, 5029060, 45.4144, 3.37389, 555),
('63368', 'Saint-Julien-de-Coppel', '31T', 524310, 5059838, 45.6917, 3.31222, 460),
('63369', 'Saint-Julien-la-Geneste', '31T', 479499, 5099760, 46.0511, 2.735, 680),
('63370', 'Saint-Julien-Puy-Lavèze', '31T', 474532, 5057034, 45.6664, 2.67305, 940),
('63371', 'Saint-Just', '31T', 561539, 5035156, 45.4672, 3.78722, 840),
('63372', 'Saint-Laure', '31T', 522603, 5083256, 45.9025, 3.2914, 300),
('63373', 'Saint-Maigner', '31T', 475776, 5103817, 46.0875, 2.68666, 540),
('63374', 'Saint-Martin-des-Olmes', '31T', 562120, 5042291, 45.5314, 3.79556, 900),
('63375', 'Saint-Martin-des-Plains', '31T', 524940, 5037528, 45.4908, 3.31917, 420),
('63376', 'Saint-Martin-d''Ollières', '31T', 535054, 5029768, 45.4206, 3.44805, 751),
('63377', 'Saint-Maurice-près-Pionsat', '31T', 469064, 5101501, 46.0664, 2.6, 617),
('63378', 'Saint-Maurice', '31T', 518542, 5057627, 45.6719, 3.23806, 500),
('63379', 'Saint-Myon', '31T', 510175, 5093500, 45.995, 3.13139, 360),
('63380', 'Saint-Nectaire', '31T', 499393, 5048619, 45.5911, 2.99222, 760),
('63381', 'Saint-Ours', '31T', 491524, 5077387, 45.85, 2.89083, 815),
('63382', 'Saint-Pardoux', '31T', 501375, 5100344, 46.0567, 3.01778, 620),
('63383', 'Saint-Pierre-Colamine', '31T', 498091, 5041891, 45.5306, 2.97555, 800),
('63384', 'Saint-Pierre-la-Bourlhonne', '31T', 557960, 5058116, 45.6742, 3.74417, 980),
('63385', 'Saint-Pierre-le-Chastel', '31T', 487847, 5071869, 45.8003, 2.84361, 740),
('63386', 'Saint-Pierre-Roche', '31T', 486210, 5063725, 45.7269, 2.82278, 821),
('63387', 'Saint-Priest-Bramefant', '31T', 534031, 5097289, 46.0283, 3.43972, 280),
('63388', 'Saint-Priest-des-Champs', '31T', 481801, 5093272, 45.9928, 2.765, 640),
('63389', 'Saint-Quentin-sur-Sauxillanges', '31T', 530920, 5044066, 45.5494, 3.39611, 580),
('63390', 'Saint-Quintin-sur-Sioule', '31T', 505539, 5105192, 46.1003, 3.07166, 340),
('63391', 'Saint-Rémy-de-Blot', '31T', 494738, 5102599, 46.0769, 2.93195, 536),
('63392', 'Saint-Rémy-de-Chargnat', '31T', 525253, 5040430, 45.5169, 3.32333, 390),
('63393', 'Saint-Rémy-sur-Durolle', '31T', 545842, 5081749, 45.8878, 3.59083, 660),
('63394', 'Saint-Romain', '31T', 569849, 5037774, 45.49, 3.89389, 940),
('63395', 'Saint-Sandoux', '31T', 508226, 5054056, 45.64, 3.10555, 600),
('63396', 'Saint-Saturnin', '31T', 507120, 5056400, 45.6611, 3.09139, 520),
('63397', 'Saint-Sauves-d''Auvergne', '31T', 475675, 5050456, 45.6072, 2.68805, 840),
('63398', 'Saint-Sauveur-la-Sagne', '31T', 552030, 5026923, 45.3939, 3.66472, 800),
('63399', 'Saint-Sulpice', '31T', 470928, 5054488, 45.6433, 2.62694, 900),
('63400', 'Saint-Sylvestre-Pragoulin', '31T', 530448, 5100141, 46.0542, 3.39361, 360),
('63401', 'Saint-Victor-la-Rivière', '31T', 495447, 5044207, 45.5514, 2.94167, 1018),
('63402', 'Saint-Victor-Montvianeix', '31T', 546681, 5087650, 45.9408, 3.60222, 705),
('63403', 'Saint-Vincent', '31T', 510299, 5044060, 45.55, 3.13194, 480),
('63404', 'Saint-Yvoine', '31T', 518808, 5048153, 45.5867, 3.24111, 460),
('63405', 'Sallèdes', '31T', 525583, 5055244, 45.6503, 3.32833, 560),
('63406', 'Sardon', '31T', 517262, 5089936, 45.9628, 3.22278, 340),
('63407', 'Saulzet-le-Froid', '31T', 493766, 5054331, 45.6425, 2.92, 1040),
('63408', 'Sauret-Besserve', '31T', 484985, 5093202, 45.9922, 2.80612, 666),
('63409', 'Saurier', '31T', 503600, 5042725, 45.5381, 3.04611, 560),
('63410', 'Sauvagnat', '31T', 470217, 5068596, 45.7703, 2.61695, 720),
('63411', 'Sauvagnat-Sainte-Marthe', '31T', 516337, 5048517, 45.59, 3.20944, 420),
('63412', 'Sauvessanges', '31T', 568210, 5026768, 45.3911, 3.87139, 920),
('63413', 'La Sauvetat', '31T', 513271, 5053571, 45.6356, 3.17027, 371),
('63414', 'Sauviat', '31T', 541618, 5062368, 45.7136, 3.53472, 420),
('63415', 'Sauxillanges', '31T', 528989, 5044180, 45.5506, 3.37138, 460),
('63416', 'Savennes', '31T', 460717, 5048619, 45.59, 2.49639, 740),
('63417', 'Sayat', '31T', 504121, 5074791, 45.8267, 3.05306, 460),
('63418', 'Sermentizon', '31T', 538990, 5067752, 45.7622, 3.50139, 450),
('63419', 'Servant', '31T', 494572, 5109543, 46.1394, 2.92972, 600),
('63420', 'Seychalles', '31T', 526268, 5072469, 45.8053, 3.33805, 320),
('63421', 'Singles', '31T', 464030, 5044494, 45.5531, 2.53916, 740),
('63422', 'Solignat', '31T', 513408, 5040177, 45.515, 3.17166, 643),
('63423', 'Sugères', '31T', 531736, 5049779, 45.6008, 3.40694, 480),
('63424', 'Surat', '31T', 519617, 5087134, 45.9375, 3.25306, 317),
('63425', 'Tallende', '31T', 509607, 5057421, 45.6703, 3.12334, 400),
('63426', 'Tauves', '31T', 470474, 5045386, 45.5614, 2.62166, 840),
('63427', 'Teilhède', '31T', 505618, 5089174, 45.9561, 3.0725, 480),
('63428', 'Teilhet', '31T', 486108, 5104742, 46.0961, 2.82028, 684),
('63429', 'Ternant-les-Eaux', '31T', 510204, 5036283, 45.48, 3.13056, 683),
('63430', 'Thiers', '31T', 542482, 5078237, 45.8564, 3.54722, 340),
('63431', 'Thiolières', '31T', 553913, 5048203, 45.5853, 3.69111, 720),
('63432', 'Thuret', '31T', 519993, 5090685, 45.9694, 3.25806, 320),
('63433', 'Tortebesse', '31T', 472768, 5064386, 45.7325, 2.65, 900),
('63434', 'Tours-sur-Meymont', '31T', 544785, 5057853, 45.6728, 3.575, 627),
('63435', 'Tourzel-Ronzières', '31T', 510108, 5041529, 45.5272, 3.12944, 678),
('63436', 'Tralaigues', '31T', 468563, 5083233, 45.9019, 2.59472, 640),
('63437', 'Trémouille-Saint-Loup', '31T', 465554, 5037634, 45.4914, 2.55917, 760),
('63438', 'Trézioux', '31T', 536618, 5063324, 45.7225, 3.47056, 560),
('63439', 'Usson', '31T', 526160, 5041606, 45.5275, 3.335, 540),
('63440', 'Valbeleix', '31T', 499001, 5035040, 45.4689, 2.98722, 800),
('63441', 'Valcivières', '31T', 562032, 5048988, 45.5917, 3.79528, 860),
('63442', 'Valz-sous-Châteauneuf', '31T', 532570, 5031175, 45.4333, 3.4164, 542),
('63443', 'Varennes-sur-Morge', '31T', 514512, 5087614, 45.9419, 3.18722, 320),
('63444', 'Varennes-sur-Usson', '31T', 523794, 5042029, 45.5314, 3.30473, 377),
('63445', 'Vassel', '31T', 524018, 5068139, 45.7664, 3.30888, 330),
('63446', 'Vensat', '31T', 514571, 5099373, 46.0478, 3.18834, 400),
('63447', 'Vergheas', '31T', 470355, 5097514, 46.0306, 2.61694, 590),
('63448', 'Vernet-la-Varenne', '31T', 535238, 5035725, 45.4742, 3.45083, 830),
('63449', 'Le Vernet-Sainte-Marguerite', '31T', 496101, 5050780, 45.6106, 2.95, 1000),
('63450', 'Verneugheol', '31T', 464082, 5068535, 45.7694, 2.53805, 710),
('63451', 'Vernines', '31T', 490588, 5057329, 45.6694, 2.87917, 1018),
('63452', 'Verrières', '31T', 502948, 5046490, 45.5719, 3.03778, 600),
('63453', 'Vertaizon', '31T', 522375, 5068565, 45.7703, 3.28777, 380),
('63454', 'Vertolaye', '31T', 555344, 5055376, 45.6497, 3.71027, 536),
('63455', 'Veyre-Monton', '31T', 513349, 5057799, 45.6736, 3.17139, 500),
('63456', 'Vichel', '31T', 518969, 5030656, 45.4292, 3.24249, 560),
('63457', 'Vic-le-Comte', '31T', 519071, 5054388, 45.6428, 3.24472, 480),
('63458', 'Villeneuve', '31T', 514502, 5036137, 45.4786, 3.18555, 520),
('63459', 'Villeneuve-les-Cerfs', '31T', 525676, 5095428, 46.0119, 3.33166, 328),
('63460', 'Villosanges', '31T', 472684, 5084448, 45.9131, 2.64778, 640),
('63461', 'Vinzelles', '31T', 530626, 5085914, 45.9261, 3.39499, 300),
('63462', 'Virlet', '31T', 476771, 5111313, 46.155, 2.69917, 520),
('63463', 'Viscomtat', '31T', 552559, 5075073, 45.8272, 3.67667, 721),
('63464', 'Vitrac', '31T', 490251, 5090629, 45.9692, 2.87417, 739),
('63465', 'Viverols', '31T', 569029, 5031438, 45.4331, 3.88251, 860),
('63466', 'Vodable', '31T', 511283, 5039432, 45.5083, 3.14444, 700),
('63467', 'Voingt', '31T', 464064, 5072795, 45.8078, 2.5375, 740),
('63468', 'Vollore-Montagne', '31T', 552382, 5070443, 45.7856, 3.67389, 856),
('63469', 'Vollore-Ville', '31T', 546725, 5070367, 45.7853, 3.60111, 515),
('63470', 'Volvic', '31T', 502910, 5079759, 45.8714, 3.03749, 500),
('63471', 'Youx', '31T', 484618, 5110208, 46.1453, 2.80083, 623),
('63472', 'Yronde-et-Buron', '31T', 519818, 5050995, 45.6122, 3.25417, 560),
('63473', 'Yssac-la-Tourette', '31T', 507214, 5086737, 45.9342, 3.09306, 380),
('64001', 'Aast', '30T', 736015, 4796976, 43.2886, -0.09083, 380),
('64002', 'Abère', '30T', 728868, 4808127, 43.3911, -0.174168, 331),
('64003', 'Abidos', '30T', 692572, 4808013, 43.4003, -0.62194, 90),
('64004', 'Abitain', '30T', 662937, 4809486, 43.4206, -0.987219, 50),
('64005', 'Abos', '30T', 697542, 4803556, 43.3589, -0.562227, 116),
('64006', 'Accous', '30T', 695886, 4760808, 42.9747, -0.597772, 490),
('64007', 'Agnos', '30T', 693588, 4781829, 43.1644, -0.618615, 250),
('64008', 'Ahaxe-Alciette-Bascassan', '30T', 649270, 4779262, 43.1514, -1.16416, 280),
('64009', 'Ahetze', '30T', 615787, 4806908, 43.4061, -1.57, 30),
('64010', 'Aïcirits-Camou-Suhast', '30T', 660380, 4800597, 43.3411, -1.02139, 60),
('64011', 'Aincille', '30T', 646800, 4778530, 43.1453, -1.19472, 239),
('64012', 'Ainharp', '30T', 668144, 4791895, 43.2611, -0.928329, 360),
('64013', 'Ainhice-Mongelos', '30T', 649949, 4785358, 43.2061, -1.15416, 220),
('64014', 'Ainhoa', '30T', 621854, 4796090, 43.3078, -1.4975, 120),
('64015', 'Alçay-Alçabéhéty-Sunharette', '30T', 670020, 4773668, 43.0967, -0.910832, 248),
('64016', 'Aldudes', '30T', 628058, 4772967, 43.0986, -1.42639, 370),
('64017', 'Alos-Sibas-Abense', '30T', 672806, 4776207, 43.1189, -0.875831, 220),
('64018', 'Amendeuix-Oneix', '30T', 658498, 4802096, 43.355, -1.04416, 110),
('64019', 'Amorots-Succos', '30T', 653023, 4803173, 43.3658, -1.11139, 140),
('64020', 'Ance', '30T', 687680, 4779719, 43.1469, -0.691947, 253),
('64021', 'Andoins', '30T', 724844, 4798418, 43.305, -0.227774, 326),
('64022', 'Andrein', '30T', 669989, 4806419, 43.3914, -0.901115, 100),
('64023', 'Angaïs', '30T', 722967, 4791005, 43.2389, -0.253892, 226),
('64024', 'Anglet', '30T', 620175, 4815717, 43.4847, -1.51389, 20),
('64025', 'Angous', '30T', 677488, 4796054, 43.2964, -0.811942, 180),
('64026', 'Anhaux', '30T', 638905, 4781111, 43.17, -1.29112, 220),
('64027', 'Anos', '30T', 719391, 4808677, 43.3989, -0.290829, 263),
('64028', 'Anoye', '30T', 731941, 4808510, 43.3936, -0.136109, 242),
('64029', 'Aramits', '30T', 684998, 4776929, 43.1225, -0.725835, 281),
('64031', 'Arancou', '30T', 657726, 4811986, 43.4442, -1.05083, 65),
('64032', 'Araujuzon', '30T', 676712, 4803319, 43.3619, -0.819163, 100),
('64033', 'Araux', '30T', 677611, 4802509, 43.3544, -0.808339, 114),
('64034', 'Arbérats-Sillègue', '30T', 662585, 4800742, 43.3419, -0.994162, 104),
('64035', 'Arbonne', '30T', 617243, 4809864, 43.4325, -1.55139, 30),
('64036', 'Arbouet-Sussaute', '30T', 661919, 4804060, 43.3719, -1.00139, 100),
('64037', 'Arbus', '30T', 702305, 4801011, 43.3347, -0.504442, 150),
('64038', 'Arcangues', '30T', 619549, 4810460, 43.4375, -1.52278, 70),
('64039', 'Aren', '30T', 687732, 4792564, 43.2625, -0.686944, 175),
('64040', 'Arette', '30T', 685758, 4773955, 43.0956, -0.717495, 320),
('64041', 'Aressy', '30T', 717214, 4795111, 43.2775, -0.323052, 198),
('64042', 'Argagnon', '30T', 687556, 4814325, 43.4583, -0.681664, 90),
('64043', 'Argelos', '30T', 714793, 4814459, 43.4522, -0.345274, 210),
('64044', 'Arget', '30T', 699836, 4824188, 43.5439, -0.526386, 130),
('64045', 'Arhansus', '30T', 659577, 4791657, 43.2608, -1.03389, 140),
('64046', 'Armendarits', '30T', 648179, 4796059, 43.3028, -1.17306, 144),
('64047', 'Arnéguy', '30T', 639991, 4774436, 43.1097, -1.27945, 250),
('64048', 'Arnos', '30T', 699651, 4814518, 43.4569, -0.532222, 150),
('64049', 'Aroue-Ithorots-Olhaïby', '30T', 668908, 4798335, 43.3189, -0.916944, 120),
('64050', 'Arrast-Larrebieu', '30T', 674539, 4795854, 43.2953, -0.848335, 160),
('64051', 'Arraute-Charritte', '30T', 653156, 4807220, 43.4022, -1.10861, 109),
('64052', 'Arricau-Bordes', '30T', 731672, 4819590, 43.4933, -0.134724, 280),
('64053', 'Arrien', '30T', 730371, 4799067, 43.3092, -0.159438, 350),
('64054', 'Arros-de-Nay', '30T', 720330, 4786688, 43.2008, -0.288057, 240),
('64056', 'Arrosès', '30T', 733597, 4825031, 43.5417, -0.108608, 220),
('64057', 'Arthez-de-Béarn', '30T', 692944, 4815434, 43.4669, -0.614727, 211),
('64058', 'Arthez-d''Asson', '30T', 723464, 4774499, 43.0903, -0.25444, 380),
('64059', 'Artigueloutan', '30T', 723487, 4795099, 43.2756, -0.245835, 244),
('64060', 'Artiguelouve', '30T', 704814, 4799295, 43.3186, -0.474161, 150),
('64061', 'Artix', '30T', 696829, 4807951, 43.3986, -0.569438, 109),
('64062', 'Arudy', '30T', 709345, 4775873, 43.1067, -0.427216, 404),
('64063', 'Arzacq-Arraziguet', '30T', 709128, 4823699, 43.5369, -0.411669, 230),
('64064', 'Asasp-Arros', '30T', 693941, 4777393, 43.1244, -0.615829, 290),
('64065', 'Ascain', '30T', 611670, 4800080, 43.3453, -1.62222, 20),
('64066', 'Ascarat', '30T', 641770, 4781324, 43.1714, -1.25583, 170),
('64067', 'Assat', '30T', 719293, 4792213, 43.2508, -0.298612, 210),
('64068', 'Asson', '30T', 723189, 4780111, 43.1408, -0.255558, 320),
('64069', 'Aste-Béon', '30T', 710715, 4766652, 43.0233, -0.413888, 500),
('64070', 'Astis', '30T', 716318, 4813211, 43.4406, -0.32694, 227),
('64071', 'Athos-Aspis', '30T', 664031, 4808895, 43.415, -0.973891, 67),
('64072', 'Aubertin', '30T', 704239, 4794430, 43.275, -0.483053, 253),
('64073', 'Aubin', '30T', 708730, 4813342, 43.4439, -0.42056, 200),
('64074', 'Aubous', '30T', 731177, 4828746, 43.5758, -0.136943, 250),
('64075', 'Audaux', '30T', 679151, 4803074, 43.3592, -0.789165, 111),
('64077', 'Auga', '30T', 711892, 4817270, 43.4783, -0.379999, 190),
('64078', 'Auriac', '30T', 717855, 4814372, 43.4506, -0.307504, 240),
('64079', 'Aurions-Idernes', '30T', 731280, 4824457, 43.5372, -0.137496, 200),
('64080', 'Aussevielle', '30T', 704194, 4803383, 43.3556, -0.480279, 138),
('64081', 'Aussurucq', '30T', 668089, 4779516, 43.1497, -0.932773, 210),
('64082', 'Auterrive', '30T', 661825, 4814553, 43.4664, -0.999445, 31),
('64083', 'Autevielle-Saint-Martin-Bideren', '30T', 664363, 4806372, 43.3922, -0.970551, 62),
('64084', 'Aydie', '30T', 733822, 4828251, 43.5706, -0.104439, 170),
('64085', 'Aydius', '30T', 700393, 4764057, 43.0028, -0.541385, 740),
('64086', 'Ayherre', '30T', 641455, 4806100, 43.3944, -1.25333, 80),
('64087', 'Baigts-de-Béarn', '30T', 674602, 4820397, 43.5161, -0.839722, 50),
('64088', 'Balansun', '30T', 686148, 4818052, 43.4922, -0.697781, 150),
('64089', 'Baleix', '30T', 732608, 4806803, 43.3781, -0.128609, 259),
('64090', 'Baliracq-Maumusson', '30T', 721797, 4825156, 43.5464, -0.254445, 210),
('64091', 'Baliros', '30T', 719011, 4789765, 43.2289, -0.303054, 220),
('64092', 'Banca', '30T', 632430, 4776075, 43.1258, -1.37195, 250),
('64093', 'Barcus', '30T', 681204, 4784390, 43.1906, -0.769999, 220),
('64094', 'Bardos', '30T', 645197, 4815223, 43.4758, -1.20472, 128),
('64095', 'Barinque', '30T', 720845, 4809651, 43.4072, -0.2725, 260),
('64096', 'Barraute-Camu', '30T', 670541, 4805970, 43.3872, -0.894444, 80),
('64097', 'Barzun', '30T', 733231, 4788694, 43.215, -0.128608, 330),
('64098', 'Bassillon-Vauzé', '30T', 736622, 4815685, 43.4567, -0.0752766, 250),
('64099', 'Bastanès', '30T', 680983, 4801950, 43.3486, -0.766945, 120),
('64100', 'Bassussarry', '30T', 620564, 4811558, 43.4472, -1.51, 50),
('64101', 'Baudreix', '30T', 722769, 4787417, 43.2067, -0.257776, 245),
('64102', 'Bayonne', '30T', 623059, 4816479, 43.4911, -1.47806, 4),
('64103', 'Bédeille', '30T', 735036, 4803706, 43.3494, -0.100003, 360),
('64104', 'Bedous', '30T', 695881, 4763340, 42.9975, -0.596946, 410),
('64105', 'Béguios', '30T', 654969, 4802755, 43.3617, -1.0875, 80),
('64106', 'Béhasque-Lapiste', '30T', 661475, 4799079, 43.3272, -1.00834, 100),
('64107', 'Béhorléguy', '30T', 653118, 4776940, 43.1297, -1.1175, 400),
('64108', 'Bellocq', '30T', 668196, 4820512, 43.5186, -0.918893, 30),
('64109', 'Bénéjacq', '30T', 726433, 4785932, 43.1922, -0.213334, 260),
('64110', 'Béost', '30T', 711049, 4763173, 42.9919, -0.411108, 520),
('64111', 'Bentayou-Sérée', '30T', 737700, 4808711, 43.3936, -0.0650035, 270),
('64112', 'Bérenx', '30T', 673094, 4818753, 43.5017, -0.85889, 50),
('64113', 'Bergouey-Viellenave', '30T', 657401, 4809540, 43.4222, -1.05555, 70),
('64114', 'Bernadets', '30T', 719790, 4806096, 43.3756, -0.286943, 314),
('64115', 'Berrogain-Laruns', '30T', 673075, 4790476, 43.2472, -0.868061, 180),
('64116', 'Bescat', '30T', 709299, 4778095, 43.1267, -0.426943, 420),
('64117', 'Bésingrand', '30T', 697045, 4805147, 43.3733, -0.567783, 110),
('64118', 'Bétracq', '30T', 738017, 4822035, 43.5133, -0.0552815, 180),
('64119', 'Beuste', '30T', 724867, 4788875, 43.2192, -0.231386, 240),
('64120', 'Beyrie-sur-Joyeuse', '30T', 655696, 4797586, 43.315, -1.08, 160),
('64121', 'Beyrie-en-Béarn', '30T', 704988, 4805446, 43.3739, -0.469719, 220),
('64122', 'Biarritz', '30T', 616747, 4815101, 43.4797, -1.5564, 40),
('64123', 'Bidache', '30T', 650296, 4816384, 43.4853, -1.14139, 45),
('64124', 'Bidarray', '30T', 634268, 4791757, 43.2667, -1.34555, 153),
('64125', 'Bidart', '30T', 613749, 4810360, 43.4375, -1.59444, 50),
('64126', 'Bidos', '30T', 694588, 4783216, 43.1767, -0.605837, 250),
('64127', 'Bielle', '30T', 708975, 4770211, 43.0558, -0.433887, 448),
('64128', 'Bilhères', '30T', 707761, 4770668, 43.0603, -0.448609, 680),
('64129', 'Billère', '30T', 711156, 4797637, 43.3019, -0.396665, 190),
('64130', 'Biriatou', '30T', 601940, 4798723, 43.3344, -1.74249, 60),
('64131', 'Biron', '30T', 682751, 4814872, 43.4644, -0.740828, 62),
('64132', 'Bizanos', '30T', 714806, 4796331, 43.2892, -0.352221, 190),
('64133', 'Boeil-Bezing', '30T', 722056, 4789184, 43.2228, -0.265833, 237),
('64134', 'Bonloc', '30T', 640478, 4803302, 43.3694, -1.26611, 53),
('64135', 'Bonnut', '30T', 680220, 4824560, 43.5522, -0.768883, 143),
('64136', 'Borce', '30T', 698205, 4753496, 42.9083, -0.571947, 660),
('64137', 'Bordères', '30T', 725555, 4787199, 43.2039, -0.22361, 250),
('64138', 'Bordes', '30T', 720722, 4790623, 43.2361, -0.281665, 220),
('64139', 'Bosdarros', '30T', 714338, 4787578, 43.2106, -0.361387, 350),
('64140', 'Boucau', '30T', 622410, 4820047, 43.5233, -1.48528, 10);
INSERT INTO `ods_communes` (`oc_code_insee`, `oc_nom`, `oc_secteur`, `oc_x_utm`, `oc_y_utm`, `oc_latitude`, `oc_longitude`, `oc_altitude`) VALUES
('64141', 'Boueilh-Boueilho-Lasque', '30T', 717142, 4824602, 43.5428, -0.312226, 247),
('64142', 'Bougarber', '30T', 704748, 4808156, 43.3983, -0.471665, 168),
('64143', 'Bouillon', '30T', 702101, 4819069, 43.4972, -0.500279, 170),
('64144', 'Boumourt', '30T', 700617, 4813065, 43.4436, -0.520827, 180),
('64145', 'Bourdettes', '30T', 721490, 4786411, 43.198, -0.273906, 250),
('64146', 'Bournos', '30T', 711442, 4812963, 43.4397, -0.387227, 270),
('64147', 'Briscous', '30T', 634760, 4813401, 43.4614, -1.33417, 50),
('64148', 'Bruges-Capbis-Mifaget', '30T', 719281, 4778563, 43.1281, -0.304173, 320),
('64149', 'Bugnein', '30T', 679838, 4802630, 43.355, -0.780839, 110),
('64150', 'Bunus', '30T', 656887, 4786039, 43.2108, -1.06861, 190),
('64151', 'Burgaronne', '30T', 669279, 4808716, 43.4122, -0.909165, 205),
('64152', 'Buros', '30T', 718070, 4803539, 43.3531, -0.309169, 300),
('64153', 'Burosse-Mendousse', '30T', 725629, 4821423, 43.5117, -0.208614, 209),
('64154', 'Bussunarits-Sarrasquette', '30T', 649033, 4780770, 43.165, -1.16667, 220),
('64155', 'Bustince-Iriberry', '30T', 647801, 4783397, 43.1889, -1.18111, 220),
('64156', 'Buziet', '30T', 705304, 4779332, 43.1389, -0.475551, 346),
('64157', 'Buzy', '30T', 706607, 4778846, 43.1342, -0.459726, 377),
('64158', 'Cabidos', '30T', 704912, 4824187, 43.5425, -0.463615, 190),
('64159', 'Cadillon', '30T', 729814, 4823294, 43.5272, -0.156111, 230),
('64160', 'Cambo-les-Bains', '30T', 629650, 4802037, 43.36, -1.4, 69),
('64161', 'Came', '30T', 652877, 4815547, 43.4772, -1.10972, 40),
('64162', 'Camou-Cihigue', '30T', 670371, 4775930, 43.1169, -0.905828, 240),
('64165', 'Cardesse', '30T', 695729, 4793036, 43.2647, -0.588328, 190),
('64166', 'Caro', '30T', 644918, 4778829, 43.1483, -1.21777, 246),
('64167', 'Carrère', '30T', 720106, 4817101, 43.4744, -0.278613, 243),
('64168', 'Carresse-Cassaber', '30T', 661833, 4816096, 43.4803, -0.998888, 30),
('64170', 'Castagnède', '30T', 662281, 4813360, 43.4556, -0.994166, 30),
('64171', 'Casteide-Cami', '30T', 701088, 4810824, 43.4233, -0.515837, 254),
('64172', 'Casteide-Candau', '30T', 697098, 4821050, 43.5164, -0.561386, 130),
('64173', 'Casteide-Doat', '30T', 742060, 4806487, 43.3722, -0.0122229, 279),
('64174', 'Castéra-Loubix', '30T', 740210, 4809726, 43.4019, -0.0336063, 320),
('64175', 'Castet', '30T', 710331, 4771765, 43.0694, -0.416665, 440),
('64176', 'Castetbon', '30T', 679117, 4806037, 43.3858, -0.788615, 194),
('64177', 'Castétis', '30T', 685116, 4815523, 43.4697, -0.711393, 91),
('64178', 'Castetnau-Camblong', '30T', 679802, 4799758, 43.3292, -0.782224, 140),
('64179', 'Castetner', '30T', 682267, 4812790, 43.4458, -0.747502, 180),
('64180', 'Castetpugon', '30T', 723783, 4826921, 43.5617, -0.229161, 220),
('64181', 'Castillon(Canton d''Arthez-de-Béarn)', '30T', 696150, 4815774, 43.4692, -0.575005, 200),
('64182', 'Castillon(Canton de Lembeye)', '30T', 732279, 4818282, 43.4814, -0.127784, 300),
('64183', 'Caubios-Loos', '30T', 710059, 4810418, 43.4172, -0.405278, 200),
('64184', 'Cescau', '30T', 702474, 4809661, 43.4125, -0.499162, 263),
('64185', 'Cette-Eygun', '30T', 697080, 4757107, 42.9411, -0.584446, 521),
('64186', 'Charre', '30T', 673192, 4798258, 43.3172, -0.864172, 100),
('64187', 'Charritte-de-Bas', '30T', 672013, 4795882, 43.2961, -0.879445, 120),
('64188', 'Chéraute', '30T', 673207, 4788874, 43.2328, -0.86694, 139),
('64189', 'Ciboure', '30T', 607869, 4803999, 43.3811, -1.66834, 5),
('64190', 'Claracq', '30T', 718335, 4821089, 43.5108, -0.298886, 261),
('64191', 'Coarraze', '30T', 725245, 4783606, 43.1717, -0.228884, 272),
('64192', 'Conchez-de-Béarn', '30T', 728820, 4825422, 43.5467, -0.1675, 193),
('64193', 'Corbère-Abères', '30T', 736059, 4817611, 43.4742, -0.0813927, 200),
('64194', 'Coslédaà-Lube-Boast', '30T', 723663, 4815643, 43.4603, -0.235283, 280),
('64195', 'Coublucq', '30T', 713221, 4823581, 43.5347, -0.36111, 195),
('64196', 'Crouseilles', '30T', 735735, 4823005, 43.5228, -0.0830574, 250),
('64197', 'Cuqueron', '30T', 698669, 4798958, 43.3172, -0.549997, 270),
('64198', 'Denguin', '30T', 702029, 4804214, 43.3636, -0.506664, 131),
('64199', 'Diusse', '30T', 728410, 4827571, 43.5661, -0.171665, 190),
('64200', 'Doazon', '30T', 698200, 4814135, 43.4539, -0.55028, 190),
('64201', 'Dognen', '30T', 683157, 4795711, 43.2919, -0.742222, 148),
('64202', 'Domezain-Berraute', '30T', 665010, 4799226, 43.3278, -0.964718, 130),
('64203', 'Doumy', '30T', 712631, 4813804, 43.4469, -0.372222, 260),
('64204', 'Eaux-Bonnes', '30T', 712821, 4760850, 42.9706, -0.390278, 800),
('64205', 'Escos', '30T', 661852, 4812485, 43.4478, -0.999725, 50),
('64206', 'Escot', '30T', 694903, 4772203, 43.0775, -0.605834, 320),
('64207', 'Escou', '30T', 700190, 4784058, 43.1828, -0.536668, 275),
('64208', 'Escoubès', '30T', 723250, 4811151, 43.42, -0.242219, 276),
('64209', 'Escout', '30T', 698754, 4784479, 43.1869, -0.554171, 273),
('64210', 'Escurès', '30T', 732698, 4816598, 43.4661, -0.123328, 304),
('64211', 'Eslourenties-Daban', '30T', 731647, 4798029, 43.2994, -0.144161, 385),
('64212', 'Espéchède', '30T', 728537, 4799931, 43.3175, -0.181666, 330),
('64213', 'Espelette', '30T', 625817, 4799896, 43.3414, -1.44778, 60),
('64214', 'Espès-Undurein', '30T', 672067, 4792889, 43.2692, -0.879716, 120),
('64215', 'Espiute', '30T', 668907, 4802873, 43.3597, -0.91556, 80),
('64216', 'Espoey', '30T', 730168, 4791740, 43.2433, -0.165002, 299),
('64217', 'Esquiule', '30T', 686133, 4785048, 43.1953, -0.709165, 280),
('64218', 'Estérençuby', '30T', 646895, 4774088, 43.1053, -1.19473, 231),
('64219', 'Estialescq', '30T', 698870, 4788249, 43.2208, -0.551387, 270),
('64220', 'Estos', '30T', 694212, 4786910, 43.21, -0.609161, 225),
('64221', 'Etcharry', '30T', 668125, 4798995, 43.325, -0.926392, 143),
('64222', 'Etchebar', '30T', 671504, 4772223, 43.0833, -0.893055, 360),
('64223', 'Etsaut', '30T', 698690, 4754004, 42.9128, -0.56583, 600),
('64224', 'Eysus', '30T', 696013, 4779244, 43.1406, -0.589725, 280),
('64225', 'Féas', '30T', 687987, 4780901, 43.1575, -0.687774, 260),
('64226', 'Fichous-Riumayou', '30T', 706383, 4817994, 43.4864, -0.447775, 246),
('64227', 'Gabaston', '30T', 726394, 4804647, 43.3606, -0.206117, 305),
('64228', 'Gabat', '30T', 659200, 4803841, 43.3706, -1.035, 90),
('64229', 'Gamarthe', '30T', 650859, 4785007, 43.2028, -1.14306, 220),
('64230', 'Gan', '30T', 712108, 4789546, 43.2289, -0.388055, 198),
('64231', 'Garindein', '30T', 670269, 4786299, 43.2103, -0.903892, 160),
('64232', 'Garlède-Mondebat', '30T', 715970, 4819839, 43.5003, -0.32861, 214),
('64233', 'Garlin', '30T', 720330, 4826744, 43.5611, -0.271939, 203),
('64234', 'Garos', '30T', 704445, 4820344, 43.5081, -0.470835, 220),
('64235', 'Garris', '30T', 657497, 4800406, 43.34, -1.05699, 136),
('64236', 'Gayon', '30T', 728751, 4818192, 43.4817, -0.171394, 190),
('64237', 'Gelos', '30T', 713341, 4795575, 43.2828, -0.370553, 181),
('64238', 'Ger', '30T', 738018, 4791331, 43.2372, -0.068611, 400),
('64239', 'Gerderest', '30T', 728684, 4810221, 43.41, -0.175562, 327),
('64240', 'Gère-Bélesten', '30T', 709572, 4766987, 43.0267, -0.427776, 500),
('64241', 'Géronce', '30T', 687662, 4790184, 43.2411, -0.688616, 184),
('64242', 'Gestas', '30T', 671340, 4801977, 43.3511, -0.885834, 86),
('64243', 'Géus-d''Arzacq', '30T', 700621, 4817449, 43.4831, -0.519164, 130),
('64244', 'Geüs-d''Oloron', '30T', 686276, 4791350, 43.2519, -0.705279, 176),
('64245', 'Goès', '30T', 695530, 4785837, 43.2, -0.59333, 239),
('64246', 'Gomer', '30T', 728226, 4792416, 43.25, -0.188613, 290),
('64247', 'Gotein-Libarrenx', '30T', 670599, 4783961, 43.1892, -0.900554, 180),
('64249', 'Guéthary', '30T', 612760, 4808985, 43.4253, -1.60695, 40),
('64250', 'Guiche', '30T', 645131, 4819327, 43.5128, -1.20445, 100),
('64251', 'Guinarthe-Parenties', '30T', 666139, 4805551, 43.3844, -0.948885, 60),
('64252', 'Gurmençon', '30T', 695443, 4780987, 43.1564, -0.596113, 264),
('64253', 'Gurs', '30T', 682061, 4795372, 43.2892, -0.755834, 177),
('64254', 'Hagetaubin', '30T', 692076, 4821430, 43.5211, -0.623333, 110),
('64255', 'Halsou', '30T', 627768, 4803914, 43.3772, -1.42278, 20),
('64256', 'Hasparren', '30T', 637288, 4805181, 43.3869, -1.305, 101),
('64257', 'Haut-de-Bosdarros', '30T', 716844, 4783364, 43.1719, -0.332222, 340),
('64258', 'Haux', '30T', 675089, 4771820, 43.0789, -0.84917, 300),
('64259', 'Hélette', '30T', 642330, 4796613, 43.3089, -1.245, 260),
('64260', 'Hendaye', '30T', 599764, 4802671, 43.3703, -1.76861, 20),
('64261', 'Herrère', '30T', 699896, 4782537, 43.1692, -0.540832, 310),
('64262', 'Higuères-Souye', '30T', 722078, 4806387, 43.3775, -0.258614, 280),
('64263', 'L''Hôpital-d''Orion', '30T', 673953, 4811613, 43.4372, -0.850551, 80),
('64264', 'L''Hôpital-Saint-Blaise', '30T', 680976, 4791237, 43.2522, -0.770558, 160),
('64265', 'Hosta', '30T', 655484, 4780235, 43.1589, -1.0875, 321),
('64266', 'Hours', '30T', 729908, 4790094, 43.2286, -0.168886, 322),
('64267', 'Ibarrolle', '30T', 654791, 4784879, 43.2008, -1.09472, 180),
('64268', 'Idaux-Mendy', '30T', 669380, 4783036, 43.1811, -0.915829, 180),
('64269', 'Idron', '30T', 718073, 4796467, 43.2894, -0.31194, 210),
('64270', 'Igon', '30T', 724897, 4782483, 43.1617, -0.233617, 285),
('64271', 'Iholdy', '30T', 647550, 4793916, 43.2836, -1.18139, 153),
('64272', 'Ilharre', '30T', 658511, 4806325, 43.3931, -1.04278, 45),
('64273', 'Irissarry', '30T', 643395, 4790987, 43.2581, -1.23334, 180),
('64274', 'Irouléguy', '30T', 638206, 4782177, 43.1797, -1.29945, 220),
('64275', 'Ispoure', '30T', 643532, 4781299, 43.1708, -1.23417, 160),
('64276', 'Issor', '30T', 690280, 4774851, 43.1025, -0.661669, 320),
('64277', 'Isturits', '30T', 645615, 4803164, 43.3672, -1.20277, 120),
('64279', 'Itxassou', '30T', 629402, 4798544, 43.3286, -1.40389, 60),
('64280', 'Izeste', '30T', 709458, 4774394, 43.0933, -0.426387, 420),
('64281', 'Jasses', '30T', 682736, 4797953, 43.3122, -0.746662, 140),
('64282', 'Jatxou', '30T', 627160, 4805168, 43.3886, -1.43, 60),
('64283', 'Jaxu', '30T', 646925, 4784242, 43.1967, -1.19167, 240),
('64284', 'Jurançon', '30T', 711928, 4796025, 43.2872, -0.387778, 178),
('64285', 'Juxue', '30T', 658691, 4789044, 43.2375, -1.04555, 166),
('64286', 'Laà-Mondrans', '30T', 679971, 4813686, 43.4544, -0.77556, 80),
('64287', 'Laàs', '30T', 674132, 4805536, 43.3825, -0.850276, 97),
('64288', 'Labastide-Cézéracq', '30T', 699460, 4805774, 43.3783, -0.537772, 120),
('64289', 'La Bastide-Clairence', '30T', 641146, 4810137, 43.4308, -1.25611, 50),
('64290', 'Labastide-Monréjeau', '30T', 700575, 4807660, 43.395, -0.523329, 160),
('64291', 'Labastide-Villefranche', '30T', 660106, 4813091, 43.4536, -1.02111, 50),
('64292', 'Labatmale', '30T', 731454, 4785143, 43.1836, -0.151945, 380),
('64293', 'Labatut', '30T', 741326, 4811898, 43.4211, -0.0188842, 308),
('64294', 'Labets-Biscay', '30T', 657816, 4805228, 43.3833, -1.05167, 40),
('64295', 'Labeyrie', '30T', 692119, 4823840, 43.5428, -0.621949, 120),
('64296', 'Lacadée', '30T', 689731, 4823309, 43.5386, -0.651669, 70),
('64297', 'Lacarre', '30T', 649037, 4783671, 43.1911, -1.16584, 234),
('64298', 'Lacarry-Arhan-Charritte-de-Haut', '30T', 668986, 4772500, 43.0864, -0.923885, 300),
('64299', 'Lacommande', '30T', 702309, 4794835, 43.2792, -0.506666, 159),
('64300', 'Lacq', '30T', 692610, 4809836, 43.4167, -0.620828, 117),
('64301', 'Lagor', '30T', 690180, 4807390, 43.3953, -0.65167, 150),
('64302', 'Lagos', '30T', 725510, 4787877, 43.21, -0.223886, 244),
('64303', 'Laguinge-Restoue', '30T', 673786, 4773238, 43.0919, -0.864722, 240),
('64304', 'Lahonce', '30T', 630216, 4815873, 43.4844, -1.38972, 60),
('64305', 'Lahontan', '30T', 664188, 4821833, 43.5314, -0.968054, 30),
('64306', 'Lahourcade', '30T', 693163, 4803090, 43.3558, -0.616384, 124),
('64307', 'Lalongue', '30T', 727345, 4817867, 43.4792, -0.188895, 295),
('64308', 'Lalonquette', '30T', 716753, 4818567, 43.4886, -0.319441, 220),
('64309', 'Lamayou', '30T', 740849, 4807587, 43.3825, -0.0266669, 330),
('64310', 'Lanne-en-Barétous', '30T', 682290, 4775899, 43.1139, -0.759438, 320),
('64311', 'Lannecaube', '30T', 725438, 4818420, 43.4847, -0.212218, 170),
('64312', 'Lanneplaà', '30T', 676375, 4814455, 43.4622, -0.819726, 110),
('64313', 'Lantabat', '30T', 652322, 4790287, 43.25, -1.12361, 160),
('64314', 'Larceveau-Arros-Cibits', '30T', 654824, 4788399, 43.2325, -1.09333, 147),
('64315', 'Laroin', '30T', 707628, 4797960, 43.3058, -0.439996, 170),
('64316', 'Larrau', '30T', 666682, 4764912, 43.0186, -0.954445, 627),
('64317', 'Larressore', '30T', 626413, 4802963, 43.3689, -1.43972, 60),
('64318', 'Larreule', '30T', 704547, 4816981, 43.4778, -0.470838, 140),
('64319', 'Larribar-Sorhapuru', '30T', 661204, 4795338, 43.2936, -1.01278, 100),
('64320', 'Laruns', '30T', 709931, 4762675, 42.9878, -0.424996, 530),
('64321', 'Lasclaveries', '30T', 719909, 4812122, 43.4297, -0.283053, 250),
('64322', 'Lasse', '30T', 641439, 4779867, 43.1583, -1.26027, 204),
('64323', 'Lasserre', '30T', 735722, 4822109, 43.5147, -0.0836065, 240),
('64324', 'Lasseube', '30T', 704821, 4788581, 43.2222, -0.47806, 180),
('64325', 'Lasseubetat', '30T', 706707, 4783018, 43.1717, -0.456941, 340),
('64326', 'Lay-Lamidou', '30T', 684959, 4795790, 43.2922, -0.719999, 157),
('64327', 'Lecumberry', '30T', 651380, 4777858, 43.1383, -1.13861, 280),
('64328', 'Ledeuix', '30T', 692800, 4787303, 43.2139, -0.626392, 205),
('64329', 'Lée', '30T', 719835, 4796369, 43.2881, -0.290284, 220),
('64330', 'Lées-Athas', '30T', 694075, 4760695, 42.9742, -0.620002, 440),
('64331', 'Lembeye', '30T', 734042, 4814822, 43.4497, -0.107496, 308),
('64332', 'Lème', '30T', 713008, 4818942, 43.4931, -0.36556, 246),
('64334', 'Léren', '30T', 658822, 4818926, 43.5064, -1.03527, 20),
('64335', 'Lescar', '30T', 707848, 4801055, 43.3336, -0.436115, 179),
('64336', 'Lescun', '30T', 693042, 4756312, 42.935, -0.634171, 900),
('64337', 'Lespielle', '30T', 731077, 4817284, 43.4728, -0.143052, 170),
('64338', 'Lespourcy', '30T', 730986, 4804833, 43.3608, -0.149438, 359),
('64339', 'Lestelle-Bétharram', '30T', 726978, 4779063, 43.1303, -0.20945, 299),
('64340', 'Lichans-Sunhar', '30T', 673059, 4773343, 43.0931, -0.873616, 246),
('64341', 'Lichos', '30T', 672529, 4796883, 43.305, -0.872774, 105),
('64342', 'Licq-Athérey', '30T', 672613, 4770399, 43.0667, -0.880006, 280),
('64343', 'Limendous', '30T', 728777, 4795492, 43.2775, -0.180556, 369),
('64344', 'Livron', '30T', 732195, 4789925, 43.2264, -0.140829, 320),
('64345', 'Lohitzun-Oyhercq', '30T', 664223, 4793558, 43.2769, -0.976113, 160),
('64346', 'Lombia', '30T', 732450, 4801578, 43.3311, -0.132772, 371),
('64347', 'Lonçon', '30T', 708746, 4817202, 43.4786, -0.418885, 160),
('64348', 'Lons', '30T', 710053, 4799023, 43.3147, -0.40972, 165),
('64349', 'Loubieng', '30T', 681315, 4811406, 43.4336, -0.759718, 100),
('64350', 'Louhossoa', '30T', 633795, 4797396, 43.3175, -1.35, 105),
('64351', 'Lourdios-Ichère', '30T', 690084, 4768887, 43.0489, -0.666114, 440),
('64352', 'Lourenties', '30T', 730445, 4796876, 43.2894, -0.159445, 360),
('64353', 'Louvie-Juzon', '30T', 710110, 4773797, 43.0878, -0.418609, 420),
('64354', 'Louvie-Soubiron', '30T', 711007, 4763789, 42.9975, -0.41139, 540),
('64355', 'Louvigny', '30T', 705942, 4820636, 43.5103, -0.452223, 110),
('64356', 'Luc-Armau', '30T', 737680, 4811830, 43.4217, -0.0638945, 290),
('64357', 'Lucarré', '30T', 736042, 4809764, 43.4036, -0.0849952, 269),
('64358', 'Lucgarier', '30T', 728028, 4790927, 43.2367, -0.191665, 313),
('64359', 'Lucq-de-Béarn', '30T', 689926, 4795588, 43.2892, -0.65889, 190),
('64360', 'Lurbe-Saint-Christau', '30T', 694496, 4776144, 43.1131, -0.60945, 297),
('64361', 'Lussagnet-Lusson', '30T', 726825, 4813278, 43.4381, -0.197226, 227),
('64362', 'Luxe-Sumberraute', '30T', 655837, 4801262, 43.3481, -1.07722, 120),
('64363', 'Lys', '30T', 715364, 4778716, 43.1306, -0.352218, 340),
('64364', 'Macaye', '30T', 636370, 4799360, 43.3347, -1.31777, 240),
('64365', 'Malaussanne', '30T', 704244, 4826205, 43.5608, -0.471116, 155),
('64366', 'Mascaraàs-Haron', '30T', 724077, 4824830, 43.5428, -0.226388, 247),
('64367', 'Maslacq', '30T', 686592, 4812569, 43.4428, -0.694171, 79),
('64368', 'Masparraute', '30T', 654308, 4806042, 43.3914, -1.09473, 100),
('64369', 'Maspie-Lalonquère-Juillacq', '30T', 730914, 4811533, 43.4211, -0.147498, 221),
('64370', 'Maucor', '30T', 720224, 4803825, 43.355, -0.282504, 330),
('64371', 'Mauléon-Licharre', '30T', 671656, 4787723, 43.2228, -0.886386, 150),
('64372', 'Maure', '30T', 737205, 4807427, 43.3822, -0.071664, 281),
('64373', 'Mazères-Lezons', '30T', 714938, 4795008, 43.2772, -0.351112, 187),
('64374', 'Mazerolles', '30T', 704774, 4813962, 43.4506, -0.469168, 140),
('64375', 'Méharin', '30T', 650397, 4799750, 43.3356, -1.14472, 106),
('64376', 'Meillon', '30T', 718021, 4793871, 43.2661, -0.313608, 200),
('64377', 'Mendionde', '30T', 637909, 4800101, 43.3411, -1.29861, 160),
('64378', 'Menditte', '30T', 670492, 4781026, 43.1628, -0.902774, 181),
('64379', 'Mendive', '30T', 652023, 4777379, 43.1339, -1.13084, 280),
('64380', 'Méracq', '30T', 711189, 4821046, 43.5125, -0.387217, 243),
('64381', 'Méritein', '30T', 681270, 4800507, 43.3356, -0.763883, 125),
('64382', 'Mesplède', '30T', 689371, 4818544, 43.4958, -0.657781, 180),
('64383', 'Mialos', '30T', 709737, 4819302, 43.4972, -0.405835, 180),
('64385', 'Miossens-Lanusse', '30T', 718417, 4816490, 43.4694, -0.299718, 230),
('64386', 'Mirepeix', '30T', 723439, 4785585, 43.19, -0.250279, 261),
('64387', 'Momas', '30T', 707017, 4814184, 43.4519, -0.441389, 190),
('64388', 'Momy', '30T', 734046, 4808861, 43.3961, -0.11, 340),
('64389', 'Monassut-Audiracq', '30T', 727051, 4811247, 43.4197, -0.195281, 250),
('64390', 'Moncaup', '30T', 736812, 4819243, 43.4886, -0.0713853, 280),
('64391', 'Moncayolle-Larrory-Mendibieu', '30T', 674736, 4792587, 43.2658, -0.846946, 249),
('64392', 'Moncla', '30T', 723437, 4829194, 43.5822, -0.232503, 230),
('64393', 'Monein', '30T', 696422, 4799479, 43.3225, -0.577496, 140),
('64394', 'Monpezat', '30T', 737112, 4820922, 43.5036, -0.0669487, 250),
('64395', 'Monségur', '30T', 741663, 4813176, 43.4325, -0.0141615, 303),
('64396', 'Mont', '30T', 689912, 4812137, 43.4381, -0.653327, 100),
('64397', 'Montagut', '30T', 701362, 4825716, 43.5572, -0.506948, 130),
('64398', 'Montaner', '30T', 742461, 4803474, 43.345, -0.00861245, 260),
('64399', 'Montardon', '30T', 715332, 4806014, 43.3761, -0.341946, 240),
('64400', 'Montaut', '30T', 727610, 4779114, 43.1306, -0.201668, 311),
('64401', 'Mont-Disse', '30T', 730436, 4826775, 43.5583, -0.146946, 170),
('64403', 'Montfort', '30T', 674574, 4804097, 43.3694, -0.845282, 120),
('64404', 'Montory', '30T', 677615, 4773892, 43.0969, -0.8175, 280),
('64405', 'Morlaàs', '30T', 721794, 4802703, 43.3444, -0.263607, 290),
('64406', 'Morlanne', '30T', 699373, 4820871, 43.5142, -0.533329, 170),
('64407', 'Mouguerre', '30T', 628163, 4813920, 43.4672, -1.41556, 110),
('64408', 'Mouhous', '30T', 721852, 4818733, 43.4886, -0.256385, 240),
('64409', 'Moumour', '30T', 690631, 4787334, 43.2147, -0.653062, 210),
('64410', 'Mourenx', '30T', 692212, 4804823, 43.3717, -0.627502, 105),
('64411', 'Musculdy', '30T', 665318, 4784726, 43.1972, -0.965274, 220),
('64412', 'Nabas', '30T', 672404, 4800028, 43.3333, -0.873327, 95),
('64413', 'Narcastet', '30T', 717618, 4792345, 43.2525, -0.319171, 204),
('64414', 'Narp', '30T', 675773, 4804776, 43.3753, -0.830276, 100),
('64415', 'Navailles-Angos', '30T', 715312, 4810183, 43.4136, -0.340552, 283),
('64416', 'Navarrenx', '30T', 681848, 4799102, 43.3228, -0.757224, 120),
('64417', 'Nay', '30T', 722553, 4784352, 43.1792, -0.261666, 260),
('64418', 'Noguères', '30T', 694843, 4804991, 43.3725, -0.594995, 110),
('64419', 'Nousty', '30T', 726314, 4794236, 43.2669, -0.211391, 267),
('64420', 'Ogenne-Camptort', '30T', 686495, 4798148, 43.3131, -0.70028, 199),
('64421', 'Ogeu-les-Bains', '30T', 703012, 4780344, 43.1486, -0.503337, 320),
('64422', 'Oloron-Sainte-Marie', '30T', 694266, 4784998, 43.1928, -0.609169, 216),
('64423', 'Oraàs', '30T', 662777, 4811427, 43.4381, -0.988616, 40),
('64424', 'Ordiarp', '30T', 667274, 4784157, 43.1917, -0.941387, 180),
('64425', 'Orègue', '30T', 651013, 4806431, 43.3956, -1.13528, 120),
('64426', 'Orin', '30T', 689130, 4789361, 43.2333, -0.670832, 186),
('64427', 'Orion', '30T', 673012, 4809706, 43.4203, -0.862775, 229),
('64428', 'Orriule', '30T', 672903, 4807820, 43.4033, -0.864717, 140),
('64429', 'Orsanco', '30T', 657013, 4795239, 43.2936, -1.06444, 196),
('64430', 'Orthez', '30T', 680177, 4817766, 43.4911, -0.771667, 70),
('64431', 'Os-Marsillon', '30T', 693321, 4807016, 43.3911, -0.61305, 100),
('64432', 'Ossas-Suhare', '30T', 671524, 4778614, 43.1408, -0.890835, 210),
('64433', 'Osse-en-Aspe', '30T', 694372, 4763018, 42.995, -0.615555, 440),
('64434', 'Ossenx', '30T', 676997, 4804469, 43.3722, -0.815277, 120),
('64435', 'Osserain-Rivareyte', '30T', 665864, 4804804, 43.3778, -0.952504, 67),
('64436', 'Ossès', '30T', 639347, 4789298, 43.2436, -1.28362, 120),
('64437', 'Ostabat-Asme', '30T', 656701, 4791158, 43.2569, -1.06944, 160),
('64438', 'Ouillon', '30T', 724897, 4800211, 43.3211, -0.226388, 320),
('64440', 'Ozenx-Montestrucq', '30T', 678321, 4812314, 43.4425, -0.796388, 90),
('64441', 'Pagolle', '30T', 663188, 4787823, 43.2256, -0.990559, 160),
('64442', 'Parbayse', '30T', 698995, 4800141, 43.3278, -0.545551, 150),
('64443', 'Pardies', '30T', 695532, 4804517, 43.3681, -0.586667, 113),
('64444', 'Pardies-Piétat', '30T', 719444, 4788235, 43.215, -0.298336, 230),
('64445', 'Pau', '30T', 713519, 4797804, 43.3028, -0.367497, 210),
('64446', 'Peyrelongue-Abos', '30T', 734386, 4812054, 43.4247, -0.104438, 240),
('64447', 'Piets-Plasence-Moustrou', '30T', 701936, 4822306, 43.5264, -0.501116, 130),
('64448', 'Poey-de-Lescar', '30T', 705265, 4802983, 43.3517, -0.467226, 150),
('64449', 'Poey-d''Oloron', '30T', 689598, 4791195, 43.2497, -0.664442, 220),
('64450', 'Pomps', '30T', 699033, 4818668, 43.4944, -0.538338, 130),
('64451', 'Ponson-Debat-Pouts', '30T', 740003, 4801595, 43.3289, -0.03972, 300),
('64452', 'Ponson-Dessus', '30T', 738749, 4800068, 43.3156, -0.0558309, 364),
('64453', 'Pontacq', '30T', 734475, 4785370, 43.1847, -0.114722, 356),
('64454', 'Pontiacq-Viellepinte', '30T', 738910, 4805078, 43.3606, -0.0516671, 342),
('64455', 'Portet', '30T', 727010, 4829129, 43.5806, -0.188327, 240),
('64456', 'Pouliacq', '30T', 713723, 4822640, 43.5261, -0.355273, 200),
('64457', 'Poursiugues-Boucoue', '30T', 711823, 4825173, 43.5494, -0.377773, 189),
('64458', 'Préchacq-Josbaig', '30T', 685735, 4792972, 43.2667, -0.711392, 170),
('64459', 'Préchacq-Navarrenx', '30T', 685275, 4794132, 43.2772, -0.716665, 156),
('64460', 'Précilhon', '30T', 696648, 4785437, 43.1961, -0.579723, 250),
('64461', 'Puyoô', '30T', 668230, 4821840, 43.5306, -0.918061, 40),
('64462', 'Ramous', '30T', 670008, 4820836, 43.5211, -0.896386, 40),
('64463', 'Rébénacq', '30T', 711846, 4782003, 43.1611, -0.394169, 300),
('64464', 'Ribarrouy', '30T', 720531, 4822674, 43.5244, -0.271106, 222),
('64465', 'Riupeyrous', '30T', 724349, 4809242, 43.4025, -0.229442, 282),
('64466', 'Rivehaute', '30T', 671988, 4801283, 43.3447, -0.878062, 90),
('64467', 'Rontignon', '30T', 716683, 4793365, 43.2619, -0.330276, 198),
('64468', 'Roquiague', '30T', 675616, 4784737, 43.195, -0.838609, 220),
('64469', 'Saint-Abit', '30T', 719770, 4787257, 43.2061, -0.294716, 237),
('64470', 'Saint-Armou', '30T', 718090, 4809901, 43.4103, -0.306388, 264),
('64471', 'Saint-Boès', '30T', 676843, 4822309, 43.5328, -0.811393, 170),
('64472', 'Saint-Castin', '30T', 718413, 4806175, 43.3767, -0.303891, 308),
('64473', 'Sainte-Colome', '30T', 711347, 4775503, 43.1028, -0.402778, 540),
('64474', 'Saint-Dos', '30T', 659895, 4815371, 43.4742, -1.02305, 25),
('64475', 'Sainte-Engrâce', '30T', 677790, 4762815, 42.9972, -0.818887, 620),
('64476', 'Saint-Esteben', '30T', 645231, 4800069, 43.3394, -1.20833, 140),
('64477', 'Saint-Étienne-de-Baïgorry', '30T', 634445, 4781669, 43.1758, -1.34583, 160),
('64478', 'Saint-Faust', '30T', 706847, 4793984, 43.2703, -0.451111, 290),
('64479', 'Saint-Girons-en-Béarn', '30T', 675073, 4824732, 43.555, -0.832501, 140),
('64480', 'Saint-Gladie-Arrive-Munein', '30T', 667562, 4805339, 43.3822, -0.931393, 71),
('64481', 'Saint-Goin', '30T', 686694, 4790929, 43.2481, -0.700277, 180),
('64482', 'Saint-Jammes', '30T', 723360, 4804422, 43.3594, -0.243608, 300),
('64483', 'Saint-Jean-de-Luz', '30T', 608907, 4805219, 43.3919, -1.65528, 5),
('64484', 'Saint-Jean-le-Vieux', '30T', 646839, 4780907, 43.1667, -1.19361, 200),
('64485', 'Saint-Jean-Pied-de-Port', '30T', 643391, 4780494, 43.1636, -1.23611, 200),
('64486', 'Saint-Jean-Poudge', '30T', 727527, 4823124, 43.5264, -0.184449, 173),
('64487', 'Saint-Just-Ibarre', '30T', 658056, 4784306, 43.195, -1.05472, 173),
('64488', 'Saint-Laurent-Bretagne', '30T', 726849, 4807225, 43.3836, -0.199441, 330),
('64489', 'Saint-Martin-d''Arberoue', '30T', 646540, 4800993, 43.3475, -1.19194, 120),
('64490', 'Saint-Martin-d''Arrossa', '30T', 637014, 4788664, 43.2383, -1.3125, 140),
('64491', 'Saint-Médard', '30T', 694719, 4822494, 43.53, -0.590277, 170),
('64492', 'Saint-Michel', '30T', 644787, 4777530, 43.1367, -1.21972, 190),
('64493', 'Saint-Palais', '30T', 659419, 4799309, 43.3297, -1.03361, 46),
('64494', 'Saint-Pé-de-Léren', '30T', 659001, 4817047, 43.4894, -1.03361, 30),
('64495', 'Saint-Pée-sur-Nivelle', '30T', 617477, 4801598, 43.3581, -1.55027, 20),
('64496', 'Saint-Pierre-d''Irube', '30T', 625273, 4814638, 43.4742, -1.45111, 40),
('64498', 'Saint-Vincent', '30T', 731714, 4782836, 43.1628, -0.149716, 493),
('64499', 'Salies-de-Béarn', '30T', 667879, 4815226, 43.4711, -0.924443, 45),
('64500', 'Salles-Mongiscard', '30T', 674879, 4818398, 43.4981, -0.83694, 90),
('64501', 'Sallespisse', '30T', 684812, 4821689, 43.5253, -0.713055, 150),
('64502', 'Sames', '30T', 648896, 4820767, 43.525, -1.15749, 42),
('64503', 'Samsons-Lion', '30T', 733175, 4813217, 43.4356, -0.118884, 311),
('64504', 'Sare', '30T', 615085, 4796619, 43.3136, -1.58083, 60),
('64505', 'Sarpourenx', '30T', 685308, 4814293, 43.4586, -0.70944, 71),
('64506', 'Sarrance', '30T', 695162, 4769494, 43.0531, -0.603605, 360),
('64507', 'Saubole', '30T', 733195, 4799565, 43.3128, -0.124449, 380),
('64508', 'Saucède', '30T', 687729, 4793489, 43.2708, -0.686665, 160),
('64509', 'Sauguis-Saint-Étienne', '30T', 671743, 4779792, 43.1514, -0.887778, 200),
('64510', 'Sault-de-Navailles', '30T', 688028, 4824774, 43.5522, -0.672223, 70),
('64511', 'Sauvagnon', '30T', 711609, 4809077, 43.4047, -0.386671, 210),
('64512', 'Sauvelade', '30T', 685746, 4807359, 43.3961, -0.706388, 110),
('64513', 'Sauveterre-de-Béarn', '30T', 666568, 4807321, 43.4003, -0.943053, 70),
('64514', 'Séby', '30T', 710730, 4818469, 43.4894, -0.393888, 194),
('64515', 'Sedze-Maubecq', '30T', 733161, 4803827, 43.3511, -0.123057, 364),
('64516', 'Sedzère', '30T', 729304, 4802582, 43.3411, -0.171111, 359),
('64517', 'Séméacq-Blachon', '30T', 733421, 4820392, 43.5, -0.112776, 221),
('64519', 'Serres-Castet', '30T', 714257, 4807246, 43.3875, -0.354719, 282),
('64520', 'Serres-Morlaàs', '30T', 722419, 4800808, 43.3272, -0.256672, 340),
('64521', 'Serres-Sainte-Marie', '30T', 698235, 4809906, 43.4158, -0.551383, 187),
('64522', 'Sévignacq-Meyracq', '30T', 710490, 4776865, 43.1153, -0.412783, 469),
('64523', 'Sévignacq', '30T', 721800, 4813481, 43.4414, -0.259164, 264),
('64524', 'Simacourbe', '30T', 729482, 4813924, 43.4431, -0.164162, 316),
('64525', 'Siros', '30T', 704114, 4802300, 43.3458, -0.481668, 138),
('64526', 'Soumoulou', '30T', 728258, 4794146, 43.2656, -0.187503, 290),
('64527', 'Souraïde', '30T', 623877, 4800046, 43.3431, -1.47167, 80),
('64528', 'Suhescun', '30T', 646290, 4788549, 43.2356, -1.19834, 248),
('64529', 'Sus', '30T', 680972, 4797319, 43.3069, -0.768607, 140),
('64530', 'Susmiou', '30T', 680285, 4798566, 43.3183, -0.776662, 140),
('64531', 'Tabaille-Usquain', '30T', 669983, 4803085, 43.3614, -0.902224, 81),
('64532', 'Tadousse-Ussau', '30T', 726875, 4825140, 43.5447, -0.191666, 160),
('64533', 'Tardets-Sorholus', '30T', 673824, 4776171, 43.1183, -0.863337, 220),
('64534', 'Taron-Sadirac-Viellenave', '30T', 722379, 4821160, 43.5103, -0.248884, 179),
('64535', 'Tarsacq', '30T', 699456, 4803613, 43.3589, -0.538608, 124),
('64536', 'Thèze', '30T', 714503, 4817198, 43.4769, -0.347776, 259),
('64537', 'Trois-Villes', '30T', 672725, 4777625, 43.1317, -0.876384, 210),
('64538', 'Uhart-Cize', '30T', 642486, 4780567, 43.1644, -1.24722, 160),
('64539', 'Uhart-Mixe', '30T', 660516, 4793902, 43.2808, -1.02167, 90),
('64540', 'Urcuit', '30T', 634457, 4816173, 43.4864, -1.33723, 32),
('64541', 'Urdès', '30T', 694959, 4813423, 43.4483, -0.590557, 160),
('64542', 'Urdos', '30T', 700092, 4749506, 42.8719, -0.550273, 784),
('64543', 'Urepel', '30T', 628955, 4769806, 43.07, -1.41611, 414),
('64544', 'Urost', '30T', 731204, 4802400, 43.3389, -0.147776, 350),
('64545', 'Urrugne', '30T', 605424, 4802047, 43.3639, -1.69889, 27),
('64546', 'Urt', '30T', 638124, 4817080, 43.4939, -1.29167, 40),
('64547', 'Ustaritz', '30T', 625003, 4806146, 43.3978, -1.45639, 14),
('64548', 'Uzan', '30T', 702017, 4817368, 43.4819, -0.501948, 120),
('64549', 'Uzein', '30T', 708023, 4808564, 43.4011, -0.431108, 170),
('64550', 'Uzos', '30T', 715725, 4794384, 43.2714, -0.341668, 192),
('64551', 'Verdets', '30T', 691315, 4788712, 43.2269, -0.64417, 200),
('64552', 'Vialer', '30T', 728538, 4820502, 43.5025, -0.173055, 190),
('64554', 'Viellenave-d''Arthez', '30T', 704010, 4809461, 43.4103, -0.480283, 171),
('64555', 'Viellenave-de-Navarrenx', '30T', 678858, 4802233, 43.3517, -0.793052, 100),
('64556', 'Vielleségure', '30T', 687706, 4803245, 43.3586, -0.683615, 160),
('64557', 'Vignes', '30T', 708060, 4821906, 43.5211, -0.425561, 230),
('64558', 'Villefranque', '30T', 625280, 4810626, 43.4381, -1.45195, 50),
('64559', 'Viodos-Abense-de-Bas', '30T', 672073, 4789956, 43.2428, -0.880558, 130),
('64560', 'Viven', '30T', 712727, 4815752, 43.4644, -0.370277, 160),
('65001', 'Adast', '30T', 738320, 4761968, 42.9731, -0.077496, 440),
('65002', 'Adé', '30T', 741647, 4780092, 43.135, -0.0288856, 420),
('65003', 'Adervielle-Pouchergues', '31T', 287700, 4743943, 42.8186, 0.403054, 948),
('65004', 'Agos-Vidalos', '30T', 738477, 4769170, 43.0378, -0.0724965, 440),
('65005', 'Allier', '31T', 265792, 4784589, 43.1778, 0.118334, 380),
('65006', 'Ancizan', '31T', 282717, 4750275, 42.8742, 0.339719, 800),
('65007', 'Andrest', '31T', 261751, 4800174, 43.3167, 0.0619428, 250),
('65009', 'Anères', '31T', 293695, 4771643, 43.0694, 0.466111, 480),
('65010', 'Angos', '31T', 268497, 4786349, 43.1944, 0.150838, 400),
('65011', 'Les Angles', '31T', 256288, 4774204, 43.0814, 0.00611368, 420),
('65012', 'Anla', '31T', 303093, 4763924, 43.0025, 0.584164, 520),
('65013', 'Ansost', '31T', 266092, 4812841, 43.4319, 0.109999, 198),
('65014', 'Antichan', '31T', 302976, 4763002, 42.9942, 0.583055, 580),
('65015', 'Antin', '31T', 279647, 4801266, 43.3319, 0.281942, 330),
('65016', 'Antist', '31T', 266397, 4777835, 43.1172, 0.128615, 460),
('65017', 'Aragnouet', '31T', 271615, 4740814, 42.7858, 0.207783, 1260),
('65018', 'Arbéost', '30T', 721425, 4764056, 42.9969, -0.283615, 780),
('65019', 'Arcizac-Adour', '31T', 264243, 4782295, 43.1567, 0.100276, 394),
('65020', 'Arcizac-ez-Angles', '31T', 256739, 4775424, 43.0925, 0.0111128, 420),
('65021', 'Arcizans-Avant', '30T', 736092, 4763435, 42.9869, -0.104164, 660),
('65022', 'Arcizans-Dessus', '30T', 731713, 4762853, 42.9831, -0.158052, 865),
('65023', 'Ardengost', '31T', 288042, 4755759, 42.925, 0.402777, 1080),
('65024', 'Argelès-Bagnères', '31T', 271853, 4774561, 43.0894, 0.196944, 472),
('65025', 'Argelès-Gazost', '30T', 736450, 4765547, 43.0058, -0.0988841, 508),
('65026', 'Aries-Espénan', '31T', 299687, 4794436, 43.2761, 0.531388, 284),
('10038', 'Bercenay-le-Hayer', '31T', 544099, 5354492, 48.3421, 3.59512, 0),
('10383', 'Trancault', '31T', 539775, 5357841, 48.3725, 3.53709, 0),
('14482', 'Ouézy', '30T', 711461, 5440824, 49.0839, -0.103876, 0),
('22201', 'Plévenon', '30T', 549193, 5389241, 48.6543, -2.33205, 0),
('47163', 'Mauvezin-sur-Gupie', '31T', 274932, 4937880, 44.5591, 0.166031, 0),
('47227', 'Ruffiac', '31T', 263570, 4916380, 44.3622, 0.0329671, 0),
('50102', 'Carolles', '30T', 605817, 5400655, 48.7499, -1.56045, 0),
('51201', 'Cuisles', '31T', 556442, 5442307, 49.131, 3.77371, 0),
('52495', 'Trémilly', '31T', 632007, 5358597, 48.3667, 4.78234, 0),
('55068', 'Brabant-en-Argonne', '31T', 655977, 5443392, 49.1236, 5.13787, 0),
('55082', 'Brocourt-en-Argonne', '31T', 658028, 5442530, 49.1153, 5.16562, 0),
('64439', 'Ousse', '30T', 721661, 4795867, 43.283, -0.268003, 0),
('64518', 'Sendets', '30T', 722284, 4797571, 43.2981, -0.259645, 0),
('65027', 'Armenteule', '31T', 288645, 4743637, 42.8161, 0.414717, 960),
('65028', 'Arné', '31T', 297385, 4784562, 43.1867, 0.506671, 460),
('65029', 'Arras-en-Lavedan', '30T', 734464, 4763966, 42.9922, -0.123885, 675),
('65031', 'Arreau', '31T', 284588, 4753427, 42.9031, 0.361393, 698),
('65032', 'Arrens-Marsous', '30T', 727443, 4759652, 42.9556, -0.211663, 877),
('65033', 'Arrodets-ez-Angles', '31T', 259195, 4773174, 43.0731, 0.0422239, 740),
('65034', 'Arrodets', '31T', 278668, 4767636, 43.0292, 0.283334, 480),
('65035', 'Artagnan', '31T', 263257, 4809665, 43.4025, 0.0763921, 208),
('65036', 'Artalens-Souin', '30T', 741079, 4762188, 42.9742, -0.0436114, 786),
('65037', 'Artiguemy', '31T', 276010, 4778469, 43.1258, 0.246383, 480),
('65038', 'Artigues', '31T', 256142, 4773283, 43.0731, 0.00472633, 640),
('65039', 'Aspin-Aure', '31T', 282969, 4756782, 42.9328, 0.340284, 960),
('65040', 'Aspin-en-Lavedan', '30T', 740339, 4773560, 43.0767, -0.0477735, 426),
('65041', 'Asque', '31T', 276479, 4769282, 43.0433, 0.255836, 480),
('65042', 'Asté', '31T', 269456, 4769268, 43.0411, 0.169722, 604),
('65043', 'Astugue', '31T', 261577, 4775253, 43.0925, 0.0705526, 660),
('65044', 'Aubarède', '31T', 275961, 4794778, 43.2725, 0.239171, 220),
('65045', 'Aucun', '30T', 729079, 4761591, 42.9725, -0.190836, 860),
('65046', 'Aulon', '31T', 279260, 4748007, 42.8528, 0.298329, 1220),
('65047', 'Aureilhan', '31T', 264334, 4792083, 43.2447, 0.0972199, 303),
('65048', 'Aurensan', '31T', 263713, 4798869, 43.3056, 0.0866682, 260),
('65049', 'Auriébat', '31T', 264561, 4819906, 43.495, 0.0880566, 250),
('65050', 'Avajan', '31T', 288056, 4746650, 42.8431, 0.406386, 920),
('65051', 'Aventignan', '31T', 298240, 4771476, 43.0692, 0.521943, 450),
('65052', 'Averan', '31T', 256535, 4780497, 43.1381, 0.00638472, 520),
('65053', 'Aveux', '31T', 302077, 4764818, 43.0103, 0.571393, 600),
('65054', 'Avezac-Prat-Lahitte', '31T', 283300, 4771533, 43.0656, 0.338611, 600),
('65055', 'Ayros-Arbouix', '30T', 739258, 4765614, 43.0056, -0.0644467, 500),
('65056', 'Ayzac-Ost', '30T', 736364, 4767367, 43.0222, -0.099167, 430),
('65057', 'Azereix', '30T', 742976, 4788480, 43.21, -0.00888471, 336),
('65058', 'Azet', '31T', 283565, 4743300, 42.8117, 0.352772, 1160),
('65059', 'Bagnères-de-Bigorre', '31T', 268075, 4771971, 43.065, 0.151663, 550),
('65060', 'Banios', '31T', 274690, 4769310, 43.0431, 0.233886, 500),
('65061', 'Barbachen', '31T', 267804, 4812874, 43.4328, 0.131111, 210),
('65062', 'Barbazan-Debat', '31T', 266042, 4786588, 43.1958, 0.12056, 355),
('65063', 'Barbazan-Dessus', '31T', 267662, 4783073, 43.1647, 0.14195, 512),
('65064', 'Bareilles', '31T', 289690, 4752528, 42.8964, 0.424163, 1040),
('65065', 'Barlest', '30T', 736384, 4781822, 43.1522, -0.0927753, 396),
('65066', 'Barrancoueu', '31T', 282527, 4754295, 42.9103, 0.335838, 900),
('65067', 'Barry', '31T', 257830, 4781285, 43.1456, 0.0219425, 370),
('65068', 'Barthe', '31T', 294908, 4795321, 43.2828, 0.472219, 300),
('65069', 'La Barthe-de-Neste', '31T', 287710, 4772815, 43.0783, 0.392228, 579),
('65070', 'Bartrès', '30T', 740153, 4778835, 43.1242, -0.0477749, 480),
('65071', 'Batsère', '31T', 279213, 4771169, 43.0611, 0.288616, 432),
('65072', 'Bazet', '31T', 262908, 4797137, 43.2897, 0.0775022, 270),
('65073', 'Bazillac', '31T', 265009, 4804353, 43.3553, 0.10028, 237),
('65074', 'Bazordan', '31T', 301186, 4788618, 43.2242, 0.551943, 390),
('65075', 'Bazus-Aure', '31T', 283541, 4748303, 42.8567, 0.350556, 780),
('65076', 'Bazus-Neste', '31T', 286723, 4768059, 43.0353, 0.381938, 580),
('65077', 'Beaucens', '30T', 739947, 4762117, 42.9739, -0.0575059, 500),
('65078', 'Beaudéan', '31T', 269407, 4767818, 43.0281, 0.169721, 640),
('65079', 'Bégole', '31T', 282804, 4781554, 43.1556, 0.328606, 540),
('65080', 'Bénac', '31T', 258070, 4782295, 43.1547, 0.024449, 355),
('65081', 'Benqué', '31T', 278903, 4774885, 43.0944, 0.283336, 440),
('65082', 'Berbérust-Lias', '30T', 741908, 4770155, 43.0456, -0.0300055, 720),
('65083', 'Bernac-Debat', '31T', 265003, 4783350, 43.1664, 0.109164, 390),
('65084', 'Bernac-Dessus', '31T', 265412, 4782749, 43.1611, 0.114444, 396),
('65085', 'Bernadets-Debat', '31T', 282520, 4803674, 43.3544, 0.316388, 330),
('65086', 'Bernadets-Dessus', '31T', 281214, 4788337, 43.2161, 0.306388, 485),
('65087', 'Bertren', '31T', 305929, 4763257, 42.9972, 0.619161, 460),
('65088', 'Betbèze', '31T', 302943, 4795452, 43.2861, 0.571115, 427),
('65089', 'Betpouey', '31T', 257668, 4751761, 42.88, 0.032774, 1000),
('65090', 'Betpouy', '31T', 293846, 4794519, 43.2753, 0.459442, 369),
('65091', 'Bettes', '31T', 273128, 4773407, 43.0794, 0.213062, 610),
('65092', 'Beyrède-Jumet', '31T', 285821, 4759472, 42.9578, 0.37417, 700),
('65093', 'Bize', '31T', 294127, 4768697, 43.0431, 0.472501, 520),
('65094', 'Bizous', '31T', 291883, 4771605, 43.0686, 0.443891, 490),
('65095', 'Bonnefont', '31T', 284584, 4792028, 43.2503, 0.346393, 300),
('65096', 'Bonnemazon', '31T', 277872, 4775907, 43.1033, 0.270273, 340),
('65097', 'Bonrepos', '31T', 286756, 4785721, 43.1942, 0.375557, 439),
('65098', 'Boô-Silhen', '30T', 738939, 4767610, 43.0236, -0.0675009, 413),
('65099', 'Bordères-Louron', '31T', 287318, 4749977, 42.8728, 0.396106, 845),
('65100', 'Bordères-sur-l''Échez', '31T', 260397, 4793765, 43.2586, 0.048058, 284),
('65101', 'Bordes', '31T', 274663, 4786945, 43.2017, 0.226393, 260),
('65102', 'Bouilh-Devant', '31T', 278117, 4801347, 43.3322, 0.263058, 341),
('65103', 'Bouilh-Péreuilh', '31T', 271855, 4798837, 43.3078, 0.186948, 340),
('65104', 'Boulin', '31T', 267554, 4793146, 43.2553, 0.136385, 380),
('65105', 'Bourg-de-Bigorre', '31T', 277012, 4774515, 43.0906, 0.260275, 340),
('65106', 'Bourisp', '31T', 282535, 4745216, 42.8286, 0.339448, 800),
('65107', 'Bourréac', '31T', 256132, 4776804, 43.1047, 0.00305897, 480),
('65108', 'Bours', '31T', 264123, 4795735, 43.2775, 0.0930607, 280),
('65109', 'Bramevaque', '31T', 302108, 4761205, 42.9778, 0.573053, 580),
('65110', 'Bugard', '31T', 282045, 4793097, 43.2592, 0.314727, 360),
('65111', 'Bulan', '31T', 278415, 4768910, 43.0406, 0.279726, 485),
('65112', 'Bun', '30T', 732017, 4761906, 42.9744, -0.154721, 800),
('65113', 'Burg', '31T', 282767, 4785323, 43.1894, 0.326672, 415),
('65114', 'Buzon', '31T', 268772, 4813520, 43.4389, 0.142783, 190),
('65115', 'Cabanac', '31T', 275277, 4794584, 43.2706, 0.230831, 220),
('65116', 'Cadéac', '31T', 283482, 4752196, 42.8917, 0.348335, 740),
('65117', 'Cadeilhan-Trachère', '31T', 278922, 4743849, 42.8153, 0.295829, 900),
('65118', 'Caharet', '31T', 282220, 4780245, 43.1436, 0.321945, 560),
('65119', 'Caixon', '31T', 259123, 4810584, 43.4094, 0.0250024, 203),
('65120', 'Calavanté', '31T', 269530, 4787488, 43.205, 0.163061, 370),
('65121', 'Camalès', '31T', 262937, 4805043, 43.3608, 0.0744464, 230),
('65122', 'Camous', '31T', 286143, 4758165, 42.9461, 0.378613, 651),
('65123', 'Campan', '31T', 270066, 4766530, 43.0167, 0.178331, 660),
('65124', 'Camparan', '31T', 283819, 4746318, 42.8389, 0.354718, 900),
('65125', 'Campistrous', '31T', 286768, 4781058, 43.1522, 0.377502, 566),
('65126', 'Campuzan', '31T', 291267, 4794289, 43.2725, 0.427778, 325),
('65127', 'Capvern', '31T', 281416, 4775638, 43.1019, 0.313884, 600),
('65128', 'Castelbajac', '31T', 285212, 4784782, 43.1853, 0.35694, 527),
('65129', 'Castelnau-Magnoac', '31T', 297697, 4796533, 43.2944, 0.506116, 350),
('65130', 'Castelnau-Rivière-Basse', '30T', 739905, 4829609, 43.5808, -0.0286075, 230),
('65131', 'Castelvieilh', '31T', 272601, 4796217, 43.2844, 0.197219, 350),
('65132', 'Castéra-Lanusse', '31T', 280086, 4783494, 43.1722, 0.294442, 520),
('65133', 'Castéra-Lou', '31T', 268809, 4800794, 43.3244, 0.148613, 310),
('65134', 'Casterets', '31T', 304634, 4798553, 43.3144, 0.590838, 360),
('65135', 'Castillon', '31T', 273364, 4774388, 43.0883, 0.215558, 550),
('65136', 'Caubous', '31T', 295440, 4791259, 43.2464, 0.480278, 375),
('65137', 'Caussade-Rivière', '31T', 258868, 4822332, 43.515, 0.0166624, 158),
('65138', 'Cauterets', '30T', 735999, 4752282, 42.8867, -0.110002, 940),
('65139', 'Cazarilh', '31T', 302814, 4758962, 42.9578, 0.582495, 600),
('65140', 'Cazaux-Debat', '31T', 286583, 4751883, 42.8897, 0.386392, 860),
('65141', 'Cazaux-Fréchet-Anéran-Camors', '31T', 289125, 4745196, 42.8303, 0.419999, 1120),
('65142', 'Chelle-Debat', '31T', 275469, 4798315, 43.3042, 0.231671, 208),
('65143', 'Chelle-Spou', '31T', 275868, 4779648, 43.1364, 0.244163, 487),
('65144', 'Cheust', '31T', 257040, 4770532, 43.0486, 0.0169424, 560),
('65145', 'Chèze', '30T', 742608, 4754860, 42.9078, -0.0280598, 760),
('65146', 'Chis', '31T', 266535, 4797628, 43.2953, 0.121946, 265),
('65147', 'Cieutat', '31T', 273535, 4778181, 43.1225, 0.216109, 546),
('65148', 'Cizos', '31T', 296208, 4792780, 43.2603, 0.489167, 370),
('65149', 'Clarac', '31T', 276480, 4789294, 43.2233, 0.247782, 290),
('65150', 'Clarens', '31T', 289946, 4782194, 43.1633, 0.416117, 530),
('65151', 'Collongues', '31T', 269818, 4796651, 43.2875, 0.162777, 310),
('65153', 'Coussan', '31T', 273059, 4791693, 43.2439, 0.204721, 320),
('65154', 'Créchets', '31T', 302439, 4764036, 43.0033, 0.576108, 520),
('65155', 'Devèze', '31T', 301048, 4793902, 43.2717, 0.548339, 310),
('65156', 'Dours', '31T', 267892, 4797736, 43.2967, 0.138608, 329),
('65157', 'Ens', '31T', 282569, 4742714, 42.8061, 0.340829, 1200),
('65158', 'Esbareich', '31T', 301123, 4757714, 42.9461, 0.562225, 720),
('65159', 'Escala', '31T', 289284, 4773229, 43.0825, 0.411387, 560),
('65160', 'Escaunets', '30T', 736460, 4803601, 43.3481, -0.0825002, 340),
('65161', 'Escondeaux', '31T', 267404, 4802571, 43.34, 0.130553, 239),
('65162', 'Esconnets', '31T', 274400, 4772192, 43.0689, 0.229162, 660),
('65163', 'Escots', '31T', 276759, 4770940, 43.0583, 0.258605, 640),
('65164', 'Escoubès-Pouts', '31T', 258260, 4776821, 43.1056, 0.0291684, 386),
('65165', 'Esparros', '31T', 281733, 4767846, 43.0319, 0.320832, 460),
('65166', 'Espèche', '31T', 279836, 4770841, 43.0583, 0.296388, 440),
('65167', 'Espieilh', '31T', 275557, 4772925, 43.0758, 0.243061, 480),
('65168', 'Esquièze-Sère', '30T', 744892, 4751296, 42.875, -0.00167251, 720),
('65169', 'Estaing', '30T', 730471, 4758642, 42.9456, -0.175001, 1000),
('65170', 'Estampures', '31T', 279903, 4805674, 43.3717, 0.283327, 260),
('65171', 'Estarvielle', '31T', 288705, 4744098, 42.8203, 0.415278, 1000),
('65172', 'Estensan', '31T', 282891, 4744248, 42.82, 0.344172, 1004),
('65173', 'Esterre', '31T', 255533, 4751126, 42.8736, 0.006943, 750),
('65174', 'Estirac', '31T', 260081, 4820404, 43.4981, 0.0325003, 166),
('65175', 'Ferrère', '31T', 299178, 4758697, 42.9544, 0.538052, 700),
('65176', 'Ferrières', '30T', 723121, 4765594, 43.0103, -0.262217, 571),
('65177', 'Fontrailles', '31T', 285522, 4802405, 43.3439, 0.353888, 284),
('65178', 'Fréchède', '31T', 277903, 4805122, 43.3661, 0.258893, 240),
('65179', 'Fréchendets', '31T', 275235, 4771423, 43.0622, 0.239717, 520),
('65180', 'Fréchet-Aure', '31T', 285617, 4756576, 42.9317, 0.372781, 760),
('65181', 'Fréchou-Fréchet', '31T', 269057, 4784230, 43.1756, 0.158607, 439),
('65182', 'Gaillagos', '30T', 730475, 4762564, 42.9808, -0.173337, 940),
('65183', 'Galan', '31T', 289522, 4788939, 43.2239, 0.408339, 360),
('65184', 'Galez', '31T', 289196, 4784996, 43.1883, 0.405833, 390),
('65185', 'Gardères', '30T', 734468, 4796026, 43.2806, -0.11028, 400),
('65186', 'Gaudent', '31T', 301752, 4763006, 42.9939, 0.568052, 584),
('65187', 'Gaussan', '31T', 295927, 4789454, 43.2303, 0.486939, 350),
('65188', 'Gavarnie', '30T', 744796, 4735447, 42.7325, -0.00972486, 1365),
('65189', 'Gayan', '31T', 260116, 4799212, 43.3075, 0.0422264, 254),
('65190', 'Gazave', '31T', 289741, 4768212, 43.0375, 0.41889, 540),
('65191', 'Gazost', '31T', 256473, 4768607, 43.0311, 0.0108312, 769),
('65192', 'Gèdre', '31T', 256324, 4741368, 42.7861, 0.0208358, 1001),
('65193', 'Gembrie', '31T', 302395, 4762494, 42.9894, 0.576114, 502),
('65194', 'Générest', '31T', 298551, 4767422, 43.0328, 0.527226, 520),
('65195', 'Génos', '31T', 287674, 4743111, 42.8111, 0.40305, 964),
('65196', 'Gensac', '31T', 264044, 4812850, 43.4314, 0.0847237, 197),
('65197', 'Ger', '30T', 740946, 4771110, 43.0544, -0.0413877, 400),
('65198', 'Gerde', '31T', 269576, 4770808, 43.055, 0.170556, 580),
('65199', 'Germ', '31T', 289591, 4741106, 42.7936, 0.427222, 1339),
('65200', 'Germs-sur-l''Oussouet', '31T', 260415, 4770506, 43.0494, 0.0583379, 880),
('65201', 'Geu', '30T', 740233, 4769479, 43.04, -0.0508348, 429),
('65202', 'Gez', '30T', 735405, 4766253, 43.0125, -0.111392, 620),
('65203', 'Gez-ez-Angles', '31T', 257837, 4775107, 43.09, 0.0247239, 549),
('65204', 'Gonez', '31T', 273899, 4790460, 43.2331, 0.215561, 290),
('65205', 'Gouaux', '31T', 284546, 4749198, 42.865, 0.362502, 940),
('65206', 'Goudon', '31T', 275358, 4791586, 43.2436, 0.23305, 254),
('65207', 'Gourgue', '31T', 277607, 4779560, 43.1361, 0.265556, 340),
('65208', 'Grailhen', '31T', 284507, 4747223, 42.8472, 0.362781, 1100),
('65209', 'Grézian', '31T', 283909, 4749898, 42.8711, 0.354443, 760),
('65210', 'Grust', '30T', 742388, 4752751, 42.8889, -0.031662, 975),
('65211', 'Guchan', '31T', 283446, 4747442, 42.8489, 0.349726, 800),
('65212', 'Guchen', '31T', 282457, 4749233, 42.8647, 0.336942, 770),
('65213', 'Guizerix', '31T', 293156, 4799974, 43.3242, 0.448895, 300),
('65214', 'Hachan', '31T', 293632, 4795637, 43.2853, 0.456389, 285),
('65215', 'Hagedet', '30T', 739864, 4822565, 43.5175, -0.0322269, 260),
('65216', 'Hauban', '31T', 269242, 4774989, 43.0925, 0.164725, 620),
('65217', 'Hautaget', '31T', 293042, 4770273, 43.0569, 0.458608, 575),
('65218', 'Hèches', '31T', 285800, 4766050, 43.0169, 0.371391, 620),
('65219', 'Hères', '30T', 741989, 4826626, 43.5533, -0.00416117, 146),
('65220', 'Hibarette', '31T', 259014, 4783405, 43.165, 0.0355613, 340),
('65221', 'Hiis', '31T', 264552, 4780122, 43.1372, 0.104995, 421),
('65222', 'Hitte', '31T', 269409, 4781253, 43.1489, 0.164172, 500),
('65223', 'Horgues', '31T', 263395, 4785876, 43.1886, 0.0883279, 356),
('65224', 'Houeydets', '31T', 284813, 4782169, 43.1617, 0.353051, 540),
('65225', 'Hourc', '31T', 270738, 4792482, 43.2503, 0.175839, 370),
('65226', 'Ibos', '31T', 256529, 4791061, 43.2331, 0.00166109, 320),
('65228', 'Ilhet', '31T', 286621, 4760404, 42.9664, 0.383613, 660),
('65229', 'Ilheu', '31T', 304074, 4763341, 42.9975, 0.596394, 614),
('65230', 'Izaourt', '31T', 304540, 4765396, 43.0161, 0.601386, 460),
('65231', 'Izaux', '31T', 286820, 4771144, 43.0631, 0.381947, 580),
('65232', 'Jacque', '31T', 274237, 4799931, 43.3183, 0.215835, 282),
('65233', 'Jarret', '30T', 743072, 4774367, 43.0831, -0.0138941, 480),
('65234', 'Jézeau', '31T', 286235, 4753098, 42.9006, 0.381672, 800),
('65235', 'Juillan', '31T', 258234, 4787541, 43.2019, 0.0241713, 328),
('65236', 'Julos', '31T', 256404, 4778710, 43.1219, 0.00556087, 540),
('65237', 'Juncalas', '31T', 256129, 4771028, 43.0528, 0.00555485, 482),
('65238', 'Labassère', '31T', 263615, 4771352, 43.0581, 0.0972192, 823),
('65239', 'Labastide', '31T', 284279, 4768136, 43.0353, 0.351938, 542),
('65240', 'Labatut-Rivière', '31T', 260238, 4823549, 43.5264, 0.0330533, 160),
('65241', 'Laborde', '31T', 280177, 4768050, 43.0333, 0.301673, 510),
('65242', 'Lacassagne', '31T', 268999, 4804370, 43.3567, 0.149448, 250),
('65243', 'Lafitole', '31T', 263101, 4814212, 43.4433, 0.0724967, 220),
('65244', 'Lagarde', '31T', 259368, 4799115, 43.3064, 0.0330581, 260),
('65245', 'Lagrange', '31T', 284557, 4778348, 43.1272, 0.35139, 580),
('65247', 'Arrayou-Lahitte', '31T', 259155, 4775245, 43.0917, 0.0408362, 500),
('65248', 'Lahitte-Toupière', '30T', 741419, 4815577, 43.4542, -0.0161103, 280),
('65249', 'Lalanne', '31T', 303491, 4793368, 43.2675, 0.578608, 380),
('65250', 'Lalanne-Trie', '31T', 284167, 4798773, 43.3108, 0.338617, 310),
('65251', 'Laloubère', '31T', 262079, 4787652, 43.2042, 0.0713894, 330),
('65252', 'Lamarque-Pontacq', '30T', 734385, 4784688, 43.1786, -0.116117, 369),
('65253', 'Lamarque-Rustaing', '31T', 280596, 4795059, 43.2764, 0.296113, 300),
('65254', 'Laméac', '31T', 275394, 4801498, 43.3328, 0.229446, 195),
('65255', 'Lançon', '31T', 284976, 4751315, 42.8842, 0.36695, 1100),
('65256', 'Lanespède', '31T', 277854, 4782980, 43.1669, 0.267219, 320),
('65257', 'Lanne', '31T', 257252, 4783468, 43.165, 0.0138875, 370),
('65258', 'Lannemezan', '31T', 287142, 4777835, 43.1233, 0.383334, 588),
('65259', 'Lansac', '31T', 269127, 4789602, 43.2239, 0.157223, 370),
('65260', 'Lapeyre', '31T', 284348, 4800219, 43.3239, 0.340278, 310),
('65261', 'Laran', '31T', 295656, 4790203, 43.2369, 0.483327, 360),
('65262', 'Larreule', '31T', 258699, 4814461, 43.4442, 0.0180603, 183),
('65263', 'Larroque', '31T', 296527, 4798143, 43.3086, 0.49111, 350),
('65264', 'Lascazères', '30T', 740423, 4821410, 43.5069, -0.0258302, 181),
('65265', 'Laslades', '31T', 270167, 4790308, 43.2306, 0.169719, 330),
('65266', 'Lassales', '31T', 296075, 4787597, 43.2136, 0.489446, 380),
('65267', 'Lau-Balagnas', '30T', 737329, 4764373, 42.995, -0.0886118, 431),
('65268', 'Layrisse', '31T', 259125, 4780806, 43.1417, 0.0380549, 480),
('65269', 'Lescurry', '31T', 269393, 4802040, 43.3358, 0.155283, 270),
('65270', 'Lespouey', '31T', 269396, 4788203, 43.2114, 0.161116, 360),
('65271', 'Lézignan', '30T', 743846, 4776155, 43.0989, -0.00361386, 410),
('65272', 'Lhez', '31T', 272377, 4787516, 43.2061, 0.198053, 340),
('65273', 'Liac', '31T', 265164, 4810742, 43.4128, 0.0994499, 203),
('65274', 'Libaros', '31T', 288407, 4792309, 43.2539, 0.393331, 380),
('65275', 'Lies', '31T', 272759, 4771844, 43.0653, 0.209173, 640),
('65276', 'Lizos', '31T', 268395, 4793951, 43.2628, 0.146394, 370),
('65277', 'Lombrès', '31T', 297296, 4770176, 43.0572, 0.510832, 471),
('65278', 'Lomné', '31T', 279787, 4769329, 43.0447, 0.296385, 440),
('65279', 'Lortet', '31T', 286367, 4768965, 43.0433, 0.377225, 550),
('65280', 'Loubajac', '30T', 737465, 4780007, 43.1356, -0.0802748, 420),
('65281', 'Loucrup', '31T', 261777, 4778365, 43.1206, 0.0716719, 520),
('65282', 'Loudenvielle', '31T', 288332, 4741577, 42.7975, 0.411666, 980),
('65283', 'Loudervielle', '31T', 289054, 4742883, 42.8094, 0.419997, 1163),
('65284', 'Louey', '31T', 257767, 4784592, 43.1753, 0.0197224, 340);
INSERT INTO `ods_communes` (`oc_code_insee`, `oc_nom`, `oc_secteur`, `oc_x_utm`, `oc_y_utm`, `oc_latitude`, `oc_longitude`, `oc_altitude`) VALUES
('65285', 'Louit', '31T', 269312, 4798367, 43.3028, 0.155828, 280),
('65286', 'Lourdes', '30T', 740399, 4775693, 43.0958, -0.0461151, 400),
('65287', 'Loures-Barousse', '31T', 304908, 4766374, 43.025, 0.605556, 440),
('65288', 'Lubret-Saint-Luc', '31T', 281220, 4799022, 43.3122, 0.302218, 310),
('65289', 'Luby-Betmont', '31T', 280302, 4797137, 43.295, 0.291664, 360),
('65290', 'Luc', '31T', 270516, 4781895, 43.155, 0.177504, 500),
('65291', 'Lugagnan', '30T', 741282, 4771863, 43.0611, -0.036941, 420),
('65292', 'Luquet', '30T', 733903, 4794091, 43.2633, -0.118056, 380),
('65293', 'Lustar', '31T', 283653, 4794003, 43.2678, 0.334161, 329),
('65294', 'Lutilhous', '31T', 282854, 4778866, 43.1314, 0.330274, 580),
('65295', 'Luz-Saint-Sauveur', '30T', 744859, 4750955, 42.8719, -0.00222457, 700),
('65296', 'Madiran', '30T', 737597, 4826283, 43.5517, -0.0586134, 164),
('65297', 'Mansan', '31T', 272489, 4802275, 43.3389, 0.193332, 250),
('65298', 'Marquerie', '31T', 273008, 4793548, 43.2606, 0.20333, 320),
('65299', 'Marsac', '31T', 263845, 4801367, 43.3281, 0.0872199, 247),
('65300', 'Marsas', '31T', 274468, 4770120, 43.0503, 0.230836, 535),
('65301', 'Marseillan', '31T', 274227, 4798294, 43.3036, 0.216384, 230),
('65303', 'Mascaras', '31T', 269666, 4786186, 43.1933, 0.165276, 355),
('65304', 'Maubourguet', '31T', 260141, 4817035, 43.4678, 0.0347248, 178),
('65305', 'Mauléon-Barousse', '31T', 301736, 4759302, 42.9606, 0.56917, 570),
('65306', 'Mauvezin', '31T', 278847, 4777358, 43.1167, 0.281664, 513),
('65307', 'Mazères-de-Neste', '31T', 300078, 4771638, 43.0711, 0.544439, 427),
('65308', 'Mazerolles', '31T', 279813, 4803577, 43.3528, 0.28306, 300),
('65309', 'Mazouau', '31T', 288237, 4767919, 43.0344, 0.400557, 631),
('65310', 'Mérilheu', '31T', 270109, 4775207, 43.0947, 0.175275, 599),
('65311', 'Mingot', '31T', 270894, 4805757, 43.3697, 0.172224, 270),
('65312', 'Molère', '31T', 280179, 4775153, 43.0972, 0.298891, 497),
('65313', 'Momères', '31T', 263487, 4784607, 43.1772, 0.0900012, 366),
('65314', 'Monfaucon', '31T', 266684, 4814982, 43.4514, 0.116389, 270),
('65315', 'Monléon-Magnoac', '31T', 298614, 4791720, 43.2514, 0.51917, 340),
('65316', 'Monlong', '31T', 294177, 4786820, 43.2061, 0.466391, 410),
('65317', 'Mont', '31T', 289737, 4743665, 42.8167, 0.428051, 1280),
('65318', 'Montastruc', '31T', 284678, 4788597, 43.2194, 0.348889, 330),
('65319', 'Montégut', '31T', 296777, 4770995, 43.0644, 0.504166, 480),
('65320', 'Montgaillard', '31T', 264657, 4778574, 43.1233, 0.106941, 460),
('65321', 'Montignac', '31T', 268568, 4785143, 43.1836, 0.152216, 432),
('65322', 'Montoussé', '31T', 289637, 4771458, 43.0667, 0.416389, 570),
('65323', 'Montsérié', '31T', 291277, 4769555, 43.05, 0.437224, 550),
('65324', 'Moulédous', '31T', 275550, 4789881, 43.2283, 0.236106, 250),
('65325', 'Moumoulous', '31T', 276509, 4804550, 43.3606, 0.241941, 240),
('65326', 'Mun', '31T', 278456, 4795869, 43.2831, 0.269443, 350),
('65327', 'Nestier', '31T', 294824, 4770806, 43.0622, 0.480273, 500),
('65328', 'Neuilh', '31T', 261608, 4773553, 43.0772, 0.0716619, 690),
('65329', 'Nistos', '31T', 294802, 4765527, 43.0147, 0.481947, 551),
('65330', 'Nouilhan', '31T', 260301, 4812056, 43.4231, 0.0388869, 197),
('65331', 'Odos', '31T', 261081, 4786915, 43.1972, 0.0594393, 340),
('65332', 'Oléac-Debat', '31T', 267841, 4794927, 43.2714, 0.139165, 370),
('65333', 'Oléac-Dessus', '31T', 271415, 4782421, 43.16, 0.188331, 480),
('65334', 'Omex', '30T', 737560, 4773369, 43.0758, -0.0819476, 560),
('65335', 'Ordizan', '31T', 266637, 4776931, 43.1092, 0.131942, 471),
('65336', 'Organ', '31T', 295878, 4794550, 43.2761, 0.484449, 360),
('65337', 'Orieux', '31T', 280145, 4790193, 43.2325, 0.292502, 450),
('65338', 'Orignac', '31T', 269793, 4778584, 43.125, 0.169997, 520),
('65339', 'Orincles', '31T', 259187, 4779352, 43.1286, 0.0394477, 373),
('65340', 'Orleix', '31T', 266297, 4795969, 43.2803, 0.11972, 280),
('65341', 'Oroix', '30T', 740651, 4798591, 43.3017, -0.0330535, 360),
('65342', 'Osmets', '31T', 278156, 4798411, 43.3058, 0.264724, 240),
('65343', 'Ossen', '30T', 738777, 4772887, 43.0711, -0.0672246, 508),
('65344', 'Ossun', '30T', 741629, 4785683, 43.1853, -0.0266674, 360),
('65345', 'Ossun-ez-Angles', '31T', 260441, 4773841, 43.0794, 0.0572212, 670),
('65346', 'Oueilloux', '31T', 270591, 4783468, 43.1692, 0.177774, 460),
('65347', 'Ourde', '31T', 300646, 4759271, 42.96, 0.555828, 740),
('65348', 'Ourdis-Cotdoussan', '31T', 257519, 4769990, 43.0439, 0.0230516, 680),
('65349', 'Ourdon', '30T', 743146, 4769118, 43.0358, -0.0152787, 760),
('65350', 'Oursbelille', '31T', 259540, 4796978, 43.2872, 0.0361104, 275),
('65351', 'Ousté', '30T', 743277, 4770544, 43.0486, -0.0130502, 620),
('65352', 'Ouzous', '30T', 735808, 4768367, 43.0314, -0.105559, 560),
('65353', 'Ozon', '31T', 277113, 4783807, 43.1742, 0.25778, 320),
('65354', 'Pailhac', '31T', 285171, 4753934, 42.9078, 0.368333, 780),
('65355', 'Paréac', '31T', 257851, 4778041, 43.1164, 0.0236166, 402),
('65356', 'Péré', '31T', 281080, 4779262, 43.1344, 0.30833, 500),
('65357', 'Peyraube', '31T', 276333, 4786890, 43.2017, 0.246948, 280),
('65358', 'Peyret-Saint-André', '31T', 297897, 4799461, 43.3208, 0.507502, 304),
('65359', 'Peyriguère', '31T', 277878, 4792676, 43.2542, 0.263615, 340),
('65360', 'Peyrouse', '30T', 734501, 4776723, 43.1069, -0.118061, 360),
('65361', 'Peyrun', '31T', 272324, 4801385, 43.3308, 0.191668, 270),
('65362', 'Pierrefitte-Nestalas', '30T', 738760, 4760408, 42.9589, -0.072773, 460),
('65363', 'Pinas', '31T', 291320, 4776903, 43.1161, 0.434994, 590),
('65364', 'Pintac', '30T', 742582, 4796960, 43.2864, -0.00999752, 370),
('65366', 'Poueyferré', '30T', 737592, 4778312, 43.1203, -0.0794412, 440),
('65367', 'Poumarous', '31T', 273657, 4781852, 43.1556, 0.216109, 464),
('65368', 'Pouy', '31T', 301867, 4792612, 43.2603, 0.558886, 340),
('65369', 'Pouyastruc', '31T', 270353, 4794471, 43.2681, 0.170273, 320),
('65370', 'Pouzac', '31T', 266957, 4774356, 43.0861, 0.13695, 506),
('65371', 'Préchac', '30T', 738840, 4763963, 42.9908, -0.0702749, 448),
('65372', 'Pujo', '31T', 262232, 4803585, 43.3475, 0.0663894, 238),
('65373', 'Puntous', '31T', 294888, 4797637, 43.3036, 0.471109, 338),
('65374', 'Puydarrieux', '31T', 288070, 4795963, 43.2867, 0.387777, 380),
('65375', 'Rabastens-de-Bigorre', '31T', 269181, 4807730, 43.3869, 0.150275, 215),
('65376', 'Recurt', '31T', 291795, 4787973, 43.2158, 0.436663, 500),
('65377', 'Réjaumont', '31T', 292806, 4781859, 43.1611, 0.451389, 480),
('65378', 'Ricaud', '31T', 277719, 4780915, 43.1483, 0.266389, 290),
('65379', 'Ris', '31T', 287620, 4751666, 42.8881, 0.399161, 1100),
('65380', 'Sabalos', '31T', 268028, 4796434, 43.285, 0.140832, 344),
('65381', 'Sabarros', '31T', 291844, 4790288, 43.2367, 0.436393, 460),
('65382', 'Sacoué', '31T', 301486, 4762427, 42.9886, 0.564997, 600),
('65383', 'Sadournin', '31T', 289227, 4799077, 43.315, 0.40083, 330),
('65384', 'Sailhan', '31T', 282072, 4744243, 42.8197, 0.334166, 920),
('65385', 'Saint-Arroman', '31T', 288385, 4769057, 43.0447, 0.40194, 560),
('65386', 'Saint-Créac', '30T', 743120, 4771774, 43.0597, -0.0144382, 429),
('65387', 'Saint-Lanne', '30T', 737342, 4830939, 43.5936, -0.0597281, 178),
('65388', 'Saint-Lary-Soulan', '31T', 281132, 4743995, 42.8172, 0.322776, 820),
('65389', 'Saint-Laurent-de-Neste', '31T', 295168, 4772432, 43.0769, 0.483895, 467),
('65390', 'Saint-Lézer', '31T', 259536, 4806368, 43.3717, 0.0319487, 250),
('65391', 'Sainte-Marie', '31T', 305945, 4760601, 42.9733, 0.62028, 480),
('65392', 'Saint-Martin', '31T', 263200, 4782856, 43.1614, 0.0872235, 391),
('65393', 'Saint-Pastous', '30T', 739646, 4766832, 43.0164, -0.0591693, 560),
('65394', 'Saint-Paul', '31T', 297124, 4772775, 43.0806, 0.507775, 480),
('65395', 'Saint-Pé-de-Bigorre', '30T', 731052, 4776327, 43.1044, -0.160561, 360),
('65396', 'Saint-Savin', '30T', 737365, 4762676, 42.9797, -0.0888917, 543),
('65397', 'Saint-Sever-de-Rustan', '31T', 275035, 4803580, 43.3514, 0.224169, 188),
('65398', 'Saléchan', '31T', 306751, 4758634, 42.9558, 0.630835, 480),
('65399', 'Saligos', '30T', 743438, 4753221, 42.8928, -0.0186167, 663),
('65400', 'Salles', '30T', 734662, 4768111, 43.0294, -0.119716, 640),
('65401', 'Salles-Adour', '31T', 264193, 4785416, 43.1847, 0.0983319, 360),
('65402', 'Samuran', '31T', 303972, 4762170, 42.9869, 0.595555, 620),
('65403', 'Sanous', '31T', 257084, 4807135, 43.3778, 0.00138402, 230),
('65404', 'Sariac-Magnoac', '31T', 300770, 4798264, 43.3108, 0.543336, 266),
('65405', 'Sarlabous', '31T', 278300, 4773052, 43.0778, 0.276666, 500),
('65406', 'Sarniguet', '31T', 263876, 4800315, 43.3186, 0.0880541, 252),
('65407', 'Sarp', '31T', 303614, 4765484, 43.0167, 0.590002, 464),
('65408', 'Sarrancolin', '31T', 286056, 4760484, 42.9669, 0.376661, 640),
('65409', 'Sarriac-Bigorre', '31T', 267541, 4807200, 43.3817, 0.130278, 217),
('65410', 'Sarrouilles', '31T', 266852, 4790452, 43.2308, 0.128886, 361),
('65411', 'Sassis', '30T', 743703, 4751531, 42.8775, -0.0161088, 660),
('65412', 'Sauveterre', '31T', 265679, 4817797, 43.4764, 0.102774, 230),
('65413', 'Sazos', '30T', 743179, 4752223, 42.8839, -0.0222166, 840),
('65414', 'Ségalas', '31T', 266663, 4810473, 43.4108, 0.118056, 206),
('65415', 'Ségus', '30T', 737964, 4772827, 43.0708, -0.0772232, 575),
('65416', 'Seich', '31T', 295577, 4765689, 43.0164, 0.491389, 660),
('65417', 'Séméac', '31T', 264879, 4790211, 43.2281, 0.104722, 324),
('65418', 'Sénac', '31T', 271944, 4804147, 43.3556, 0.185839, 270),
('65419', 'Sentous', '31T', 287271, 4793517, 43.2644, 0.378884, 350),
('65420', 'Sère-en-Lavedan', '30T', 734489, 4767210, 43.0214, -0.122216, 600),
('65421', 'Sère-Lanso', '31T', 256666, 4772739, 43.0683, 0.0113919, 680),
('65422', 'Séron', '30T', 735387, 4800753, 43.3228, -0.0969438, 374),
('65423', 'Sère-Rustaing', '31T', 280425, 4793273, 43.2603, 0.29472, 370),
('65424', 'Sers', '31T', 258082, 4752549, 42.8872, 0.0374972, 1120),
('65425', 'Siarrouy', '31T', 259872, 4800611, 43.32, 0.0386105, 250),
('65426', 'Sinzos', '31T', 274087, 4788663, 43.2169, 0.218609, 290),
('65427', 'Siradan', '31T', 305371, 4760340, 42.9708, 0.613337, 500),
('65428', 'Sireix', '30T', 732855, 4761934, 42.9744, -0.144445, 811),
('65429', 'Sombrun', '31T', 257799, 4818231, 43.4778, 0.00527889, 180),
('65430', 'Soréac', '31T', 269578, 4799532, 43.3133, 0.158615, 280),
('65431', 'Sost', '31T', 300749, 4755780, 42.9286, 0.558332, 742),
('65432', 'Soublecause', '30T', 740879, 4824361, 43.5333, -0.0188893, 260),
('65433', 'Soues', '31T', 264290, 4787544, 43.2039, 0.0986167, 344),
('65435', 'Soulom', '30T', 738867, 4759917, 42.9544, -0.0716724, 480),
('65436', 'Souyeaux', '31T', 270503, 4791563, 43.2419, 0.17333, 320),
('65437', 'Tajan', '31T', 293691, 4784951, 43.1892, 0.461112, 470),
('65438', 'Talazac', '31T', 259902, 4802092, 43.3333, 0.0383324, 250),
('65439', 'Tarasteix', '30T', 742690, 4800857, 43.3214, -0.00694788, 350),
('65440', 'Tarbes', '31T', 262172, 4790954, 43.2339, 0.0711105, 311),
('65441', 'Thèbe', '31T', 303478, 4759962, 42.9669, 0.590277, 640),
('65442', 'Thermes-Magnoac', '31T', 304767, 4796912, 43.2997, 0.593059, 400),
('65443', 'Thuy', '31T', 276358, 4793128, 43.2578, 0.244727, 270),
('65444', 'Tibiran-Jaunac', '31T', 299981, 4769079, 43.0481, 0.544168, 480),
('65445', 'Tilhouse', '31T', 280995, 4773799, 43.0853, 0.309441, 577),
('65446', 'Tostat', '31T', 264818, 4801456, 43.3292, 0.0991678, 249),
('65447', 'Tournay', '31T', 276157, 4784981, 43.1844, 0.245557, 260),
('65448', 'Tournous-Darré', '31T', 285954, 4796092, 43.2872, 0.361672, 263),
('65449', 'Tournous-Devant', '31T', 290483, 4791565, 43.2478, 0.419163, 325),
('65450', 'Tramezaïgues', '31T', 278384, 4741952, 42.7981, 0.290001, 960),
('65451', 'Trébons', '31T', 265744, 4775973, 43.1003, 0.121384, 470),
('65452', 'Trie-sur-Baïse', '31T', 286772, 4799864, 43.3214, 0.370281, 245),
('65453', 'Troubat', '31T', 302851, 4761030, 42.9764, 0.582219, 560),
('65454', 'Trouley-Labarthe', '31T', 276528, 4799669, 43.3167, 0.244163, 240),
('65455', 'Tuzaguet', '31T', 291598, 4772664, 43.0781, 0.439998, 530),
('65456', 'Uglas', '31T', 291100, 4779287, 43.1375, 0.431395, 560),
('65457', 'Ugnouas', '31T', 264954, 4802780, 43.3411, 0.100276, 240),
('65458', 'Uz', '30T', 737806, 4761085, 42.9653, -0.0841666, 757),
('65459', 'Uzer', '31T', 271833, 4773296, 43.0781, 0.197218, 560),
('65460', 'Vic-en-Bigorre', '31T', 261483, 4807906, 43.3861, 0.0552794, 216),
('65461', 'Vidou', '31T', 282869, 4797703, 43.3008, 0.323051, 330),
('65462', 'Vidouze', '30T', 738742, 4814277, 43.4433, -0.0497228, 250),
('65463', 'Viella', '31T', 256089, 4751415, 42.8764, 0.0136157, 860),
('65464', 'Vielle-Adour', '31T', 265514, 4781108, 43.1464, 0.116391, 413),
('65465', 'Vielle-Aure', '31T', 281472, 4745405, 42.83, 0.326384, 800),
('65466', 'Vielle-Louron', '31T', 287756, 4745763, 42.835, 0.403053, 960),
('65467', 'Vier-Bordes', '30T', 740151, 4764719, 42.9972, -0.0538892, 720),
('65468', 'Vieuzos', '31T', 293186, 4792840, 43.26, 0.451947, 370),
('65469', 'Viey', '31T', 256862, 4752098, 42.8828, 0.0227721, 980),
('65470', 'Viger', '30T', 740189, 4772010, 43.0628, -0.0502827, 560),
('65471', 'Vignec', '31T', 280657, 4744782, 42.8242, 0.316666, 820),
('65472', 'Villefranque', '30T', 742024, 4820665, 43.4997, -0.00638277, 276),
('65473', 'Villelongue', '30T', 740138, 4759931, 42.9542, -0.056105, 520),
('65474', 'Villembits', '31T', 282029, 4795413, 43.28, 0.313613, 340),
('65475', 'Villemur', '31T', 301177, 4792169, 43.2561, 0.550552, 350),
('65476', 'Villenave-près-Béarn', '30T', 735353, 4805601, 43.3664, -0.0952828, 354),
('65477', 'Villenave-près-Marsac', '31T', 264093, 4802007, 43.3339, 0.0899999, 244),
('65478', 'Viscos', '30T', 741511, 4755068, 42.91, -0.041391, 840),
('65479', 'Visker', '31T', 261465, 4780446, 43.1392, 0.0669467, 510),
('65480', 'Vizos', '30T', 744064, 4752872, 42.8894, -0.0111119, 820),
('65481', 'Barèges', '31T', 260498, 4753422, 42.8958, 0.0666729, 1247),
('65482', 'Cantaous', '31T', 291884, 4775341, 43.1022, 0.442505, 570),
('66001', 'L''Albère', '31T', 491210, 4703417, 42.4831, 2.89305, 540),
('66002', 'Alénya', '31T', 498497, 4720839, 42.64, 2.98167, 8),
('66003', 'Amélie-les-Bains-Palalda', '31T', 472897, 4702539, 42.4747, 2.67028, 220),
('66004', 'Les Angles', '31T', 423999, 4714345, 42.5778, 2.07389, 1640),
('66005', 'Angoustrine-Villeneuve-des-Escaldes', '31T', 414523, 4703843, 42.4822, 1.96, 1360),
('66006', 'Ansignan', '31T', 460339, 4734463, 42.7617, 2.51528, 241),
('66007', 'Arboussols', '31T', 457658, 4723528, 42.6631, 2.48333, 560),
('66008', 'Argelès-sur-Mer', '31T', 501802, 4710537, 42.5472, 3.02195, 10),
('66009', 'Arles-sur-Tech', '31T', 469921, 4700670, 42.4578, 2.63417, 280),
('66010', 'Ayguatébia-Talau', '31T', 433022, 4713759, 42.5733, 2.18389, 1340),
('66011', 'Bages', '31T', 491342, 4717143, 42.6067, 2.89445, 20),
('66012', 'Baho', '31T', 485553, 4727640, 42.7011, 2.82361, 47),
('66013', 'Baillestavy', '31T', 461172, 4712804, 42.5667, 2.52694, 586),
('66014', 'Baixas', '31T', 484405, 4733133, 42.7506, 2.80944, 80),
('66015', 'Banyuls-dels-Aspres', '31T', 489056, 4712797, 42.5675, 2.86666, 100),
('66016', 'Banyuls-sur-Mer', '31T', 510570, 4703512, 42.4839, 3.12861, 14),
('66017', 'Le Barcarès', '31T', 502976, 4737218, 42.7875, 3.03639, 2),
('66018', 'La Bastide', '31T', 466041, 4710650, 42.5475, 2.58639, 787),
('66019', 'Bélesta', '31T', 467748, 4729581, 42.7181, 2.60611, 360),
('66020', 'Bolquère', '31T', 424319, 4706012, 42.5028, 2.07889, 1620),
('66021', 'Bompas', '31T', 494611, 4731112, 42.7325, 2.93417, 15),
('66022', 'Boule-d''Amont', '31T', 468316, 4714372, 42.5811, 2.61389, 457),
('66023', 'Bouleternère', '31T', 466028, 4722063, 42.6503, 2.58555, 190),
('66024', 'Le Boulou', '31T', 486105, 4707959, 42.5239, 2.83083, 80),
('66025', 'Bourg-Madame', '31T', 413129, 4698277, 42.4319, 1.94389, 1142),
('66026', 'Brouilla', '31T', 492134, 4712793, 42.5675, 2.90416, 44),
('66027', 'La Cabanasse', '31T', 427032, 4705706, 42.5003, 2.11194, 1500),
('66028', 'Cabestany', '31T', 495130, 4725344, 42.6806, 2.94056, 30),
('66029', 'Caixas', '31T', 474038, 4714687, 42.5842, 2.68361, 396),
('66030', 'Calce', '31T', 479839, 4734101, 42.7592, 2.75361, 200),
('66032', 'Calmeilles', '31T', 473296, 4711266, 42.5533, 2.67472, 488),
('66033', 'Camélas', '31T', 474035, 4719838, 42.6306, 2.68333, 332),
('66034', 'Campôme', '31T', 448792, 4722200, 42.6506, 2.37527, 560),
('66035', 'Campoussy', '31T', 455620, 4728816, 42.7106, 2.45805, 666),
('66036', 'Canaveilles', '31T', 438230, 4709762, 42.5378, 2.24778, 920),
('66037', 'Canet-en-Roussillon', '31T', 500682, 4728118, 42.7056, 3.00833, 5),
('66038', 'Canohès', '31T', 486476, 4722209, 42.6522, 2.83501, 67),
('66039', 'Caramany', '31T', 464801, 4731508, 42.7353, 2.57, 236),
('66040', 'Casefabre', '31T', 468334, 4718320, 42.6167, 2.61389, 550),
('66041', 'Cases-de-Pène', '31T', 482527, 4736468, 42.7806, 2.78639, 89),
('66042', 'Cassagnes', '31T', 468215, 4732139, 42.7411, 2.61167, 340),
('66043', 'Casteil', '31T', 450132, 4708988, 42.5317, 2.39278, 797),
('66044', 'Castelnou', '31T', 475625, 4718691, 42.6203, 2.70277, 320),
('66045', 'Catllar', '31T', 452537, 4720415, 42.6347, 2.42111, 340),
('66046', 'Caudiès-de-Fenouillèdes', '31T', 448834, 4740091, 42.8117, 2.37417, 347),
('66047', 'Caudiès-de-Conflent', '31T', 431192, 4713160, 42.5678, 2.16167, 1620),
('66048', 'Cerbère', '31T', 513616, 4698613, 42.4397, 3.16555, 20),
('66049', 'Céret', '31T', 479364, 4704152, 42.4894, 2.74889, 160),
('66050', 'Claira', '31T', 496432, 4734195, 42.7603, 2.95639, 9),
('66051', 'Clara', '31T', 454209, 4714882, 42.585, 2.44195, 532),
('66052', 'Codalet', '31T', 452199, 4717579, 42.6092, 2.41723, 383),
('66053', 'Collioure', '31T', 506913, 4708258, 42.5267, 3.08417, 20),
('66054', 'Conat', '31T', 447007, 4718049, 42.6131, 2.35389, 520),
('66055', 'Corbère', '31T', 472246, 4722436, 42.6539, 2.66139, 220),
('66056', 'Corbère-les-Cabanes', '31T', 473409, 4722987, 42.6589, 2.67555, 155),
('66057', 'Corneilla-de-Conflent', '31T', 449156, 4712851, 42.5664, 2.38055, 548),
('66058', 'Corneilla-la-Rivière', '31T', 477794, 4727198, 42.6969, 2.72889, 83),
('66059', 'Corneilla-del-Vercol', '31T', 496082, 4719483, 42.6278, 2.95222, 10),
('66060', 'Corsavy', '31T', 465472, 4701677, 42.4667, 2.58, 792),
('66061', 'Coustouges', '31T', 471296, 4690825, 42.3692, 2.65139, 820),
('66062', 'Dorres', '31T', 412791, 4704142, 42.4847, 1.93889, 1440),
('66063', 'Les Cluses', '31T', 487261, 4703516, 42.4839, 2.845, 137),
('66064', 'Égat', '31T', 419295, 4705822, 42.5006, 2.01778, 1680),
('66065', 'Elne', '31T', 497767, 4716367, 42.5997, 2.97278, 39),
('66066', 'Enveitg', '31T', 410632, 4701393, 42.4597, 1.91305, 1258),
('66067', 'Err', '31T', 420564, 4699021, 42.4394, 2.03416, 1384),
('66068', 'Escaro', '31T', 443682, 4709808, 42.5386, 2.31416, 881),
('66069', 'Espira-de-l''Agly', '31T', 486571, 4736243, 42.7786, 2.83583, 35),
('66070', 'Espira-de-Conflent', '31T', 458766, 4718432, 42.6172, 2.49722, 340),
('66071', 'Estagel', '31T', 475321, 4735565, 42.7722, 2.69833, 80),
('66072', 'Estavar', '31T', 417563, 4702171, 42.4675, 1.99723, 1218),
('66073', 'Estoher', '31T', 457867, 4716772, 42.6022, 2.48638, 390),
('66074', 'Eus', '31T', 455414, 4721537, 42.645, 2.45611, 330),
('66075', 'Eyne', '31T', 424626, 4702739, 42.4733, 2.08306, 1574),
('66076', 'Felluns', '31T', 457703, 4734663, 42.7633, 2.48305, 380),
('66077', 'Fenouillet', '31T', 449295, 4737959, 42.7925, 2.38, 480),
('66078', 'Fillols', '31T', 451524, 4712279, 42.5614, 2.40945, 780),
('66079', 'Finestret', '31T', 459882, 4718364, 42.6167, 2.51084, 300),
('66080', 'Fontpédrouse', '31T', 432683, 4707068, 42.5131, 2.18055, 1100),
('66081', 'Fontrabiouse', '31T', 425961, 4720895, 42.6369, 2.09694, 1500),
('66082', 'Formiguères', '31T', 426278, 4718516, 42.6156, 2.10112, 1520),
('66083', 'Fosse', '31T', 453381, 4737437, 42.7881, 2.43, 500),
('66084', 'Fourques', '31T', 481833, 4714323, 42.5811, 2.77861, 140),
('66085', 'Fuilla', '31T', 447580, 4712431, 42.5625, 2.36139, 540),
('66086', 'Glorianes', '31T', 463489, 4715475, 42.5908, 2.555, 792),
('66088', 'Ille-sur-Têt', '31T', 468998, 4724301, 42.6706, 2.62166, 153),
('66089', 'Joch', '31T', 461090, 4718511, 42.6181, 2.52555, 360),
('66090', 'Jujols', '31T', 442071, 4713523, 42.5719, 2.29417, 980),
('66091', 'Lamanère', '31T', 460473, 4690014, 42.3614, 2.52, 780),
('66092', 'Lansac', '31T', 464092, 4735028, 42.7669, 2.56111, 290),
('66093', 'Laroque-des-Albères', '31T', 494593, 4707763, 42.5222, 2.93417, 142),
('66094', 'Latour-Bas-Elne', '31T', 500182, 4717230, 42.6075, 3.00222, 12),
('66095', 'Latour-de-Carol', '31T', 408537, 4701914, 42.4642, 1.88749, 1250),
('66096', 'Latour-de-France', '31T', 471661, 4735240, 42.7692, 2.65361, 100),
('66097', 'Lesquerde', '31T', 461545, 4738929, 42.8019, 2.52972, 355),
('66098', 'La Llagonne', '31T', 427793, 4708629, 42.5267, 2.12084, 1660),
('66099', 'Llauro', '31T', 478882, 4710908, 42.5503, 2.74278, 320),
('66100', 'Llo', '31T', 423141, 4700596, 42.4539, 2.06528, 1420),
('66101', 'Llupia', '31T', 481001, 4718706, 42.6206, 2.76833, 110),
('66102', 'Mantet', '31T', 443011, 4703059, 42.4778, 2.30666, 1540),
('66103', 'Marquixanes', '31T', 457848, 4721059, 42.6408, 2.48584, 286),
('66104', 'Los Masos', '31T', 455717, 4719037, 42.6225, 2.46, 398),
('66105', 'Matemale', '31T', 427705, 4715509, 42.5886, 2.11889, 1520),
('66106', 'Maureillas-las-Illas', '31T', 484158, 4704262, 42.4906, 2.80722, 128),
('66107', 'Maury', '31T', 466753, 4740074, 42.8125, 2.59334, 160),
('66108', 'Millas', '31T', 475039, 4726652, 42.6919, 2.69528, 100),
('66109', 'Molitg-les-Bains', '31T', 449841, 4722439, 42.6528, 2.38805, 605),
('66111', 'Montalba-le-Château', '31T', 464005, 4727132, 42.6958, 2.56055, 483),
('66112', 'Montauriol', '31T', 477523, 4713688, 42.5753, 2.72612, 194),
('66113', 'Montbolo', '31T', 471601, 4703809, 42.4861, 2.65445, 514),
('66114', 'Montescot', '31T', 494532, 4717479, 42.6097, 2.93334, 14),
('66115', 'Montesquieu-des-Albères', '31T', 490325, 4707336, 42.5183, 2.88222, 160),
('66116', 'Montferrer', '31T', 464406, 4698598, 42.4389, 2.56723, 800),
('66117', 'Mont-Louis', '31T', 427773, 4706685, 42.5092, 2.12084, 1613),
('66118', 'Montner', '31T', 473652, 4732949, 42.7486, 2.67805, 140),
('66119', 'Mosset', '31T', 446577, 4724283, 42.6692, 2.34806, 700),
('66120', 'Nahuja', '31T', 417438, 4697422, 42.4247, 1.99639, 1300),
('66121', 'Néfiach', '31T', 472719, 4726876, 42.6939, 2.66695, 115),
('66122', 'Nohèdes', '31T', 441709, 4719264, 42.6236, 2.28917, 900),
('66123', 'Nyer', '31T', 440438, 4709218, 42.5331, 2.27472, 717),
('66124', 'Font-Romeu-Odeillo-Via', '31T', 421194, 4706232, 42.5044, 2.04083, 1741),
('66125', 'Olette', '31T', 439936, 4711845, 42.5567, 2.26833, 627),
('66126', 'Oms', '31T', 475025, 4710211, 42.5439, 2.69583, 528),
('66127', 'Opoul-Périllos', '31T', 489609, 4746417, 42.8703, 2.87278, 171),
('66128', 'Oreilla', '31T', 438663, 4712257, 42.5603, 2.25278, 900),
('66129', 'Ortaffa', '31T', 494005, 4714302, 42.5811, 2.92694, 35),
('66130', 'Osséja', '31T', 416326, 4696202, 42.4136, 1.98305, 1240),
('66132', 'Palau-de-Cerdagne', '31T', 415093, 4696309, 42.4144, 1.96805, 1215),
('66133', 'Palau-del-Vidre', '31T', 496808, 4713313, 42.5722, 2.96111, 20),
('66134', 'Passa', '31T', 484454, 4714132, 42.5794, 2.81056, 122),
('66136', 'Perpignan', '31T', 491263, 4727291, 42.6981, 2.89333, 40),
('66137', 'Le Perthus', '31T', 488810, 4701508, 42.4658, 2.86389, 271),
('66138', 'Peyrestortes', '31T', 487862, 4733557, 42.7544, 2.85167, 40),
('66139', 'Pézilla-de-Conflent', '31T', 457550, 4731981, 42.7392, 2.48138, 300),
('66140', 'Pézilla-la-Rivière', '31T', 481115, 4726941, 42.6947, 2.76944, 65),
('66141', 'Pia', '31T', 493498, 4732470, 42.7447, 2.92056, 10),
('66142', 'Planès', '31T', 429351, 4704757, 42.4919, 2.14028, 1500),
('66143', 'Planèzes', '31T', 468819, 4734974, 42.7667, 2.61889, 140),
('66144', 'Pollestres', '31T', 489296, 4720693, 42.6386, 2.86944, 43),
('66145', 'Ponteilla', '31T', 484739, 4719344, 42.6264, 2.81389, 101),
('66146', 'Porta', '31T', 403814, 4708857, 42.5261, 1.82889, 1511),
('66147', 'Porté-Puymorens', '31T', 404212, 4711289, 42.5481, 1.83333, 1623),
('66148', 'Port-Vendres', '31T', 508716, 4707612, 42.5208, 3.10611, 2),
('66149', 'Prades', '31T', 452593, 4718533, 42.6178, 2.42195, 356),
('66150', 'Prats-de-Mollo-la-Preste', '31T', 457255, 4694844, 42.4047, 2.48056, 740),
('66151', 'Prats-de-Sournia', '31T', 455758, 4732609, 42.7447, 2.45944, 634),
('66152', 'Prugnanes', '31T', 453682, 4741723, 42.8267, 2.43333, 335),
('66153', 'Prunet-et-Belpuig', '31T', 471023, 4713188, 42.5706, 2.64694, 680),
('66154', 'Puyvalador', '31T', 427932, 4722046, 42.6475, 2.12083, 1497),
('66155', 'Py', '31T', 446702, 4705034, 42.4958, 2.35138, 1023),
('66156', 'Rabouillet', '31T', 450019, 4731229, 42.7319, 2.38945, 740),
('66157', 'Railleu', '31T', 432762, 4715242, 42.5867, 2.18055, 1340),
('66158', 'Rasiguères', '31T', 468069, 4734978, 42.7667, 2.60972, 120),
('66159', 'Réal', '31T', 429030, 4720277, 42.6317, 2.13445, 1439),
('66160', 'Reynès', '31T', 475799, 4702991, 42.4789, 2.70556, 320),
('66161', 'Ria-Sirach', '31T', 450649, 4717529, 42.6086, 2.39833, 400),
('66162', 'Rigarda', '31T', 461642, 4719464, 42.6267, 2.53222, 310),
('66164', 'Rivesaltes', '31T', 489546, 4735344, 42.7706, 2.87222, 25),
('66165', 'Rodès', '31T', 464120, 4722998, 42.6586, 2.56222, 220),
('66166', 'Sahorre', '31T', 447463, 4709069, 42.5322, 2.36027, 674),
('66167', 'Saillagouse', '31T', 421022, 4701144, 42.4586, 2.03944, 1300),
('66168', 'Saint-André', '31T', 497720, 4711154, 42.5528, 2.97223, 35),
('66169', 'Saint-Arnac', '31T', 461600, 4736491, 42.78, 2.53055, 325),
('66170', 'Sainte-Colombe-de-la-Commanderie', '31T', 479314, 4718155, 42.6156, 2.74778, 160),
('66171', 'Saint-Cyprien', '31T', 500251, 4718525, 42.6192, 3.00306, 10),
('66172', 'Saint-Estève', '31T', 487421, 4728531, 42.7092, 2.84639, 59),
('66173', 'Saint-Féliu-d''Amont', '31T', 477199, 4726213, 42.6881, 2.72167, 90),
('66174', 'Saint-Féliu-d''Avall', '31T', 478653, 4725498, 42.6817, 2.73944, 80),
('66175', 'Saint-Génis-des-Fontaines', '31T', 493523, 4710200, 42.5442, 2.92112, 50),
('66176', 'Saint-Hippolyte', '31T', 497205, 4736909, 42.7847, 2.96583, 5),
('66177', 'Saint-Jean-Lasseille', '31T', 489127, 4714462, 42.5825, 2.8675, 68),
('66178', 'Saint-Jean-Pla-de-Corts', '31T', 482931, 4706517, 42.5108, 2.79223, 100),
('66179', 'Saint-Laurent-de-Cerdans', '31T', 468148, 4692566, 42.3847, 2.61306, 666),
('66180', 'Saint-Laurent-de-la-Salanque', '31T', 499091, 4735675, 42.7736, 2.98889, 4),
('66181', 'Sainte-Léocadie', '31T', 418251, 4698585, 42.4353, 2.00611, 1300),
('66182', 'Sainte-Marie', '31T', 501342, 4730493, 42.7269, 3.01639, 4),
('66183', 'Saint-Marsal', '31T', 468887, 4709619, 42.5383, 2.62111, 700),
('66184', 'Saint-Martin', '31T', 456446, 4737170, 42.7858, 2.4675, 418),
('66185', 'Saint-Michel-de-Llotes', '31T', 469169, 4721740, 42.6475, 2.62389, 185),
('66186', 'Saint-Nazaire', '31T', 499272, 4724139, 42.6697, 2.99112, 11),
('66187', 'Saint-Paul-de-Fenouillet', '31T', 459393, 4739867, 42.8103, 2.50333, 260),
('66188', 'Saint-Pierre-dels-Forcats', '31T', 427664, 4705052, 42.4944, 2.11972, 1580),
('66189', 'Saleilles', '31T', 496403, 4722320, 42.6533, 2.95612, 18),
('66190', 'Salses-le-Château', '31T', 493507, 4742403, 42.8342, 2.92055, 10),
('66191', 'Sansa', '31T', 432073, 4717069, 42.6031, 2.17194, 1414),
('66192', 'Sauto', '31T', 430355, 4707060, 42.5128, 2.15222, 1500),
('66193', 'Serdinya', '31T', 444280, 4713258, 42.5697, 2.32111, 540),
('66194', 'Serralongue', '31T', 463262, 4694008, 42.3975, 2.55361, 720),
('66195', 'Le Soler', '31T', 483159, 4725517, 42.6819, 2.79444, 69),
('66196', 'Sorède', '31T', 496190, 4708810, 42.5317, 2.95361, 90),
('66197', 'Souanyas', '31T', 440728, 4711128, 42.5503, 2.27806, 840),
('66198', 'Sournia', '31T', 454268, 4730675, 42.7272, 2.44139, 540),
('66199', 'Taillet', '31T', 473034, 4708461, 42.5281, 2.67166, 603),
('66201', 'Tarerach', '31T', 459110, 4726511, 42.69, 2.50084, 526),
('66202', 'Targassonne', '31T', 417490, 4705689, 42.4992, 1.99583, 1594),
('66203', 'Taulis', '31T', 469747, 4708104, 42.5247, 2.63166, 560),
('66204', 'Taurinya', '31T', 452906, 4714428, 42.5808, 2.42611, 545),
('66205', 'Tautavel', '31T', 479312, 4740302, 42.815, 2.74694, 120),
('66206', 'Le Tech', '31T', 462470, 4695524, 42.4111, 2.54389, 560),
('66207', 'Terrats', '31T', 481249, 4717440, 42.6092, 2.77139, 130),
('66208', 'Théza', '31T', 496151, 4720809, 42.6397, 2.95305, 14),
('66209', 'Thuès-Entre-Valls', '31T', 436210, 4708392, 42.5253, 2.22334, 840),
('66210', 'Thuir', '31T', 479799, 4720405, 42.6358, 2.75361, 100),
('66211', 'Tordères', '31T', 479661, 4712047, 42.5606, 2.75223, 220),
('66212', 'Torreilles', '31T', 499454, 4733640, 42.7553, 2.99333, 4),
('66213', 'Toulouges', '31T', 486024, 4724338, 42.6714, 2.82944, 59),
('66214', 'Tresserre', '31T', 486001, 4712494, 42.5647, 2.82945, 146),
('66215', 'Trévillach', '31T', 461647, 4728564, 42.7086, 2.53167, 540),
('66216', 'Trilla', '31T', 460575, 4732056, 42.74, 2.51833, 412),
('66217', 'Trouillas', '31T', 484234, 4717680, 42.6114, 2.80778, 100),
('66218', 'Ur', '31T', 412393, 4701556, 42.4614, 1.93444, 1200),
('66219', 'Urbanya', '31T', 442998, 4720950, 42.6389, 2.30472, 856),
('66220', 'Valcebollère', '31T', 420682, 4693282, 42.3878, 2.03639, 1600),
('66221', 'Valmanya', '31T', 461726, 4709778, 42.5394, 2.5339, 880),
('66222', 'Vernet-les-Bains', '31T', 449666, 4710811, 42.5481, 2.38694, 690),
('66223', 'Villefranche-de-Conflent', '31T', 447964, 4715049, 42.5861, 2.36583, 433),
('66224', 'Villelongue-de-la-Salanque', '31T', 498726, 4730617, 42.7281, 2.98444, 8),
('66225', 'Villelongue-dels-Monts', '31T', 492175, 4708289, 42.5269, 2.90473, 116),
('66226', 'Villemolaque', '31T', 486804, 4715330, 42.5903, 2.83917, 91),
('66227', 'Villeneuve-de-la-Raho', '31T', 493168, 4720534, 42.6372, 2.91667, 58),
('66228', 'Villeneuve-la-Rivière', '31T', 483800, 4726873, 42.6942, 2.80223, 58),
('66230', 'Vinça', '31T', 461289, 4721533, 42.6453, 2.52777, 260),
('66231', 'Vingrau', '31T', 481865, 4744058, 42.8489, 2.77805, 141),
('66232', 'Vira', '31T', 452096, 4735687, 42.7722, 2.41444, 600),
('66233', 'Vivès', '31T', 480654, 4708620, 42.5297, 2.76444, 160),
('66234', 'Le Vivier', '31T', 455209, 4735543, 42.7711, 2.4525, 426),
('67001', 'Achenheim', '32T', 398747, 5381462, 48.5781, 7.62722, 150),
('67002', 'Adamswiller', '32T', 368218, 5418423, 48.9047, 7.20167, 280),
('67003', 'Albé', '32T', 375463, 5357186, 48.3556, 7.31889, 300),
('67004', 'Allenwiller', '32T', 380491, 5390406, 48.6553, 7.37722, 240),
('67005', 'Alteckendorf', '32T', 397208, 5404809, 48.7878, 7.60055, 180),
('67006', 'Altenheim', '32T', 387159, 5397342, 48.7189, 7.46584, 230),
('67008', 'Altorf', '32T', 391351, 5375175, 48.5203, 7.52862, 171),
('67009', 'Altwiller', '32T', 351965, 5421551, 48.9292, 6.97888, 220),
('67010', 'Andlau', '32T', 382897, 5360301, 48.385, 7.41833, 240),
('67011', 'Artolsheim', '32T', 394131, 5340438, 48.2083, 7.575, 173),
('67012', 'Aschbach', '32T', 425481, 5420698, 48.9347, 7.9825, 150),
('67013', 'Asswiller', '32T', 369517, 5415643, 48.88, 7.22028, 295),
('67014', 'Auenheim', '32T', 427154, 5407056, 48.8122, 8.00777, 120),
('67016', 'Avolsheim', '32T', 389368, 5379754, 48.5611, 7.50056, 168),
('67017', 'Baerendorf', '32T', 359461, 5411191, 48.8378, 7.08472, 250),
('67018', 'Balbronn', '32T', 384708, 5382473, 48.5847, 7.43667, 220),
('67019', 'Baldenheim', '32T', 391408, 5343763, 48.2378, 7.5375, 169),
('67020', 'Barembach', '32T', 369151, 5370920, 48.4778, 7.22944, 340),
('67021', 'Barr', '32T', 384900, 5362700, 48.4069, 7.44472, 210),
('67022', 'Bassemberg', '32T', 372778, 5354990, 48.3353, 7.28333, 290),
('67023', 'Batzendorf', '32T', 405034, 5404145, 48.7831, 7.70722, 190),
('67025', 'Beinheim', '32T', 432912, 5412605, 48.8628, 8.08528, 115),
('67026', 'Bellefosse', '32T', 367972, 5362637, 48.4031, 7.21611, 669),
('67027', 'Belmont', '32T', 369305, 5363347, 48.4097, 7.23389, 800),
('67028', 'Benfeld', '32T', 395823, 5358412, 48.3703, 7.59333, 160),
('67029', 'Berg', '32T', 364895, 5417483, 48.8956, 7.15666, 260),
('67030', 'Bergbieten', '32T', 386348, 5381482, 48.5761, 7.45917, 185),
('67031', 'Bernardswiller', '32T', 386318, 5367737, 48.4525, 7.46251, 215),
('67032', 'Bernardvillé', '32T', 381855, 5358655, 48.37, 7.40473, 290),
('67033', 'Bernolsheim', '32T', 403615, 5401143, 48.7558, 7.68861, 175),
('67034', 'Berstett', '32T', 401195, 5392475, 48.6775, 7.65777, 165),
('67035', 'Berstheim', '32T', 402745, 5405173, 48.7919, 7.67583, 210),
('67036', 'Bettwiller', '32T', 366622, 5416422, 48.8864, 7.18056, 285),
('67037', 'Biblisheim', '32T', 411505, 5417073, 48.9003, 7.7925, 155),
('67038', 'Bietlenheim', '32T', 410430, 5396953, 48.7192, 7.78222, 140),
('67039', 'Bilwisheim', '32T', 401545, 5396083, 48.71, 7.66167, 180),
('67040', 'Bindernheim', '32T', 397107, 5348629, 48.2825, 7.61305, 164),
('67041', 'Birkenwald', '32T', 378067, 5390922, 48.6594, 7.34417, 270),
('67043', 'Bischheim', '32T', 408075, 5385440, 48.6153, 7.75277, 135),
('67044', 'Bischholtz', '32T', 392984, 5416564, 48.8928, 7.53999, 200),
('67045', 'Bischoffsheim', '32T', 388510, 5371585, 48.4875, 7.49112, 210),
('67046', 'Bischwiller', '32T', 416371, 5402050, 48.7658, 7.86195, 138),
('67047', 'Bissert', '32T', 355217, 5422886, 48.9419, 7.02278, 220),
('67048', 'Bitschhoffen', '32T', 398864, 5412840, 48.8603, 7.62111, 200),
('67049', 'Blaesheim', '32T', 397312, 5373519, 48.5064, 7.60973, 154),
('67050', 'Blancherupt', '32T', 366297, 5363140, 48.4072, 7.19333, 520),
('67051', 'Blienschwiller', '32T', 382901, 5355483, 48.3417, 7.41973, 230),
('67054', 'Bolsenheim', '32T', 397153, 5363639, 48.4175, 7.61, 155),
('67055', 'Boofzheim', '32T', 402210, 5354068, 48.3322, 7.68056, 155),
('67056', 'Bootzheim', '32T', 393987, 5338216, 48.1883, 7.57361, 174),
('67057', 'Bosselshausen', '32T', 390594, 5406849, 48.805, 7.50999, 0),
('67058', 'Bossendorf', '32T', 394277, 5404153, 48.7814, 7.56083, 170),
('67059', 'Bourg-Bruche', '32T', 362401, 5357672, 48.3572, 7.1425, 520),
('67060', 'Bourgheim', '32T', 388915, 5363979, 48.4192, 7.49861, 165),
('67061', 'Bouxwiller', '32T', 388597, 5408990, 48.8239, 7.48223, 240),
('67062', 'Breitenau', '32T', 373220, 5353559, 48.3225, 7.28972, 350),
('67063', 'Breitenbach', '32T', 373595, 5358370, 48.3658, 7.29333, 380),
('67065', 'Breuschwickersheim', '32T', 397009, 5381679, 48.5797, 7.60361, 160),
('67066', 'La Broque', '32T', 365708, 5370382, 48.4722, 7.18305, 330),
('67067', 'Brumath', '32T', 405164, 5398553, 48.7328, 7.71028, 145),
('67068', 'Buswiller', '32T', 394237, 5408478, 48.8203, 7.55917, 220),
('67069', 'Buhl', '32T', 427225, 5418698, 48.9169, 8.00667, 140),
('67070', 'Burbach', '32T', 361534, 5418276, 48.9019, 7.11056, 280),
('67071', 'Bust', '32T', 370488, 5410060, 48.83, 7.23528, 310),
('67072', 'Butten', '32T', 369815, 5425769, 48.9711, 7.22111, 260),
('67073', 'Châtenois', '32T', 379941, 5348904, 48.2819, 7.38167, 200),
('67074', 'Cleebourg', '32T', 418898, 5428357, 49.0028, 7.89111, 200),
('67075', 'Climbach', '32T', 416000, 5430192, 49.0189, 7.85111, 350),
('67076', 'Colroy-la-Roche', '32T', 365552, 5361180, 48.3894, 7.18389, 470),
('67077', 'Cosswiller', '32T', 382132, 5387654, 48.6308, 7.40028, 250),
('67078', 'Crastatt', '32T', 384162, 5390762, 48.6592, 7.42695, 255),
('67080', 'Dachstein', '32T', 391725, 5379708, 48.5611, 7.5325, 165),
('67081', 'Dahlenheim', '32T', 389892, 5382462, 48.5856, 7.50694, 220),
('67082', 'Dalhunden', '32T', 425734, 5402968, 48.7753, 7.98917, 123),
('67083', 'Dambach', '32T', 399861, 5428606, 49.0022, 7.63083, 230),
('67084', 'Dambach-la-Ville', '32T', 383393, 5353403, 48.3231, 7.42694, 210),
('67085', 'Dangolsheim', '32T', 386971, 5380882, 48.5708, 7.46777, 200),
('67086', 'Daubensand', '32T', 405408, 5355650, 48.3469, 7.72334, 157),
('67087', 'Dauendorf', '32T', 401292, 5409523, 48.8308, 7.655, 230),
('67088', 'Dehlingen', '32T', 367686, 5426870, 48.9806, 7.19167, 270),
('67089', 'Dettwiller', '32T', 387462, 5401228, 48.7539, 7.46889, 170),
('67090', 'Diebolsheim', '32T', 400974, 5349333, 48.2894, 7.665, 164),
('67091', 'Diedendorf', '32T', 356726, 5415895, 48.8794, 7.04583, 280),
('67092', 'Dieffenbach-au-Val', '32T', 375997, 5352417, 48.3128, 7.3275, 300),
('67094', 'Dieffenthal', '32T', 382726, 5352027, 48.3106, 7.41833, 210),
('67095', 'Diemeringen', '32T', 367253, 5422400, 48.9403, 7.18722, 230),
('67096', 'Dimbsthal', '32T', 379162, 5392350, 48.6725, 7.35862, 300),
('67097', 'Dingsheim', '32T', 401879, 5387120, 48.6294, 7.66833, 155),
('67098', 'Dinsheim-sur-Bruche', '32T', 383916, 5377856, 48.5431, 7.42722, 190),
('67099', 'Domfessel', '32T', 364721, 5423697, 48.9514, 7.15223, 235),
('67100', 'Donnenheim', '32T', 400947, 5396958, 48.7178, 7.65333, 180),
('67101', 'Dorlisheim', '32T', 388341, 5375512, 48.5228, 7.48778, 180),
('67102', 'Dossenheim-Kochersberg', '32T', 394897, 5388173, 48.6378, 7.57334, 190),
('67103', 'Dossenheim-sur-Zinsel', '32T', 382828, 5407192, 48.8067, 7.40417, 185),
('67104', 'Drachenbronn-Birlenbach', '32T', 417267, 5426620, 48.9869, 7.86916, 230),
('67105', 'Drulingen', '32T', 367488, 5414270, 48.8672, 7.19306, 285),
('67106', 'Drusenheim', '32T', 423062, 5401645, 48.7631, 7.95306, 122),
('67107', 'Duntzenheim', '32T', 392312, 5396438, 48.7117, 7.53611, 215),
('67108', 'Duppigheim', '32T', 396126, 5375981, 48.5283, 7.59306, 155),
('67109', 'Durningen', '32T', 394538, 5393060, 48.6817, 7.56722, 250),
('67110', 'Durrenbach', '32T', 409667, 5416763, 48.8972, 7.76749, 165),
('67111', 'Durstel', '32T', 367938, 5416947, 48.8914, 7.19833, 300),
('67112', 'Duttlenheim', '32T', 394251, 5375583, 48.5244, 7.56777, 160),
('67113', 'Eberbach-Seltz', '32T', 431698, 5419970, 48.9289, 8.0675, 150),
('67115', 'Ebersheim', '32T', 389057, 5351251, 48.3047, 7.50389, 165),
('67116', 'Ebersmunster', '32T', 390802, 5351990, 48.3117, 7.52722, 165),
('67117', 'Eckartswiller', '32T', 379139, 5402668, 48.7653, 7.35528, 248),
('67118', 'Eckbolsheim', '32T', 403295, 5381320, 48.5775, 7.68889, 146),
('67119', 'Eckwersheim', '32T', 403982, 5392736, 48.6803, 7.69556, 148),
('67120', 'Eichhoffen', '32T', 384869, 5360168, 48.3842, 7.44499, 210),
('67121', 'Elsenheim', '32T', 388331, 5335174, 48.16, 7.49834, 177),
('67122', 'Wangenbourg-Engenthal', '32T', 374832, 5388089, 48.6333, 7.30112, 380),
('67123', 'Engwiller', '32T', 398528, 5415626, 48.8853, 7.61584, 240),
('67124', 'Entzheim', '32T', 399146, 5376265, 48.5314, 7.63388, 150),
('67125', 'Epfig', '32T', 386255, 5357453, 48.36, 7.46444, 220),
('67126', 'Erckartswiller', '32T', 379892, 5414916, 48.8756, 7.36194, 230),
('67127', 'Ergersheim', '32T', 391396, 5380734, 48.5703, 7.52778, 165),
('67128', 'Ernolsheim-Bruche', '32T', 394130, 5380033, 48.5644, 7.565, 170),
('67129', 'Ernolsheim-lès-Saverne', '32T', 381101, 5405622, 48.7922, 7.38112, 220),
('67130', 'Erstein', '32T', 401148, 5364000, 48.4214, 7.6639, 151),
('67131', 'Eschau', '32T', 405113, 5371251, 48.4872, 7.71583, 145),
('67132', 'Eschbach', '32T', 407388, 5414422, 48.8758, 7.73694, 190),
('67133', 'Eschbourg', '32T', 374951, 5408104, 48.8133, 7.29666, 320),
('67134', 'Eschwiller', '32T', 361743, 5413575, 48.8597, 7.115, 290),
('67135', 'Ettendorf', '32T', 396138, 5407640, 48.8131, 7.58527, 195),
('67136', 'Eywiller', '32T', 363222, 5414867, 48.8717, 7.13472, 300),
('67137', 'Fegersheim', '32T', 402657, 5371664, 48.4906, 7.6825, 145),
('67138', 'Fessenheim-le-Bas', '32T', 392391, 5387726, 48.6333, 7.53945, 185),
('67139', 'Flexbourg', '32T', 384268, 5381030, 48.5717, 7.4311, 220),
('67140', 'Forstfeld', '32T', 429648, 5412305, 48.8597, 8.04084, 115),
('67141', 'Forstheim', '32T', 405780, 5416889, 48.8978, 7.71444, 225),
('67142', 'Fort-Louis', '32T', 430687, 5405715, 48.8006, 8.05611, 119),
('67143', 'Fouchy', '32T', 371955, 5354082, 48.3269, 7.2725, 330),
('67144', 'Fouday', '32T', 365839, 5364633, 48.4206, 7.18666, 400),
('67145', 'Friedolsheim', '32T', 388501, 5395956, 48.7067, 7.48445, 220),
('67146', 'Friesenheim', '32T', 401446, 5351548, 48.3094, 7.67084, 160),
('67148', 'Frohmuhl', '32T', 374250, 5418624, 48.9078, 7.28389, 280),
('67149', 'Furchhausen', '32T', 385279, 5397380, 48.7189, 7.44028, 225),
('67150', 'Furdenheim', '32T', 394066, 5385347, 48.6122, 7.56278, 180),
('67151', 'Gambsheim', '32T', 417885, 5393874, 48.6925, 7.88417, 129),
('67152', 'Geispolsheim', '32T', 400242, 5374424, 48.515, 7.64917, 147),
('67153', 'Geiswiller', '32T', 390128, 5404912, 48.7875, 7.50417, 210),
('67154', 'Gerstheim', '32T', 403763, 5359446, 48.3808, 7.70027, 155),
('67155', 'Gertwiller', '32T', 386760, 5363157, 48.4114, 7.46972, 188),
('67156', 'Geudertheim', '32T', 408493, 5397262, 48.7217, 7.75583, 150),
('67158', 'Gingsheim', '32T', 396206, 5396951, 48.7169, 7.5889, 190),
('67161', 'Gottenhouse', '32T', 379443, 5397842, 48.7219, 7.36083, 205),
('67162', 'Gottesheim', '32T', 388343, 5403434, 48.7739, 7.48028, 210),
('67163', 'Gougenheim', '32T', 394436, 5395224, 48.7011, 7.56528, 200),
('67164', 'Goxwiller', '32T', 387980, 5365573, 48.4333, 7.48555, 165),
('67165', 'Grandfontaine', '32T', 364018, 5372709, 48.4928, 7.15944, 450),
('67166', 'Grassendorf', '32T', 398232, 5408342, 48.8197, 7.61361, 235),
('67167', 'Grendelbruch', '32T', 376208, 5372429, 48.4928, 7.32444, 500),
('67168', 'Gresswiller', '32T', 384184, 5376923, 48.5347, 7.43111, 195),
('67169', 'Gries', '32T', 412857, 5400621, 48.7525, 7.81444, 145),
('67172', 'Griesheim-près-Molsheim', '32T', 391561, 5373287, 48.5033, 7.53195, 170),
('67173', 'Griesheim-sur-Souffel', '32T', 401950, 5387675, 48.6344, 7.66916, 160),
('67174', 'Gumbrechtshoffen', '32T', 399380, 5417711, 48.9042, 7.62694, 175),
('67176', 'Gundershoffen', '32T', 401807, 5417946, 48.9067, 7.66, 180),
('67177', 'Gunstett', '32T', 409415, 5418775, 48.9153, 7.76361, 180),
('67178', 'Gungwiller', '32T', 364959, 5415906, 48.8814, 7.15806, 325),
('67179', 'Haegen', '32T', 378012, 5396854, 48.7128, 7.34167, 270),
('67180', 'Haguenau', '32T', 411244, 5408306, 48.8214, 7.79084, 140),
('67181', 'Handschuheim', '32T', 395130, 5384215, 48.6022, 7.5775, 185),
('67182', 'Hangenbieten', '32T', 397725, 5379318, 48.5586, 7.61389, 150),
('67183', 'Harskirchen', '32T', 356413, 5421928, 48.9336, 7.03944, 220),
('67184', 'Hatten', '32T', 425329, 5416994, 48.9014, 7.98111, 150),
('67185', 'Hattmatt', '32T', 384081, 5405622, 48.7928, 7.42167, 180),
('67186', 'Hegeney', '32T', 407679, 5415992, 48.89, 7.74055, 175),
('67187', 'Heidolsheim', '32T', 389845, 5339747, 48.2014, 7.51751, 173),
('67188', 'Heiligenberg', '32T', 381202, 5377511, 48.5394, 7.39056, 290),
('67189', 'Heiligenstein', '32T', 385472, 5364511, 48.4233, 7.45195, 270),
('67190', 'Hengwiller', '32T', 377351, 5391895, 48.6681, 7.33416, 291),
('67191', 'Herbitzheim', '32T', 359976, 5430828, 49.0144, 7.085, 210),
('67192', 'Herbsheim', '32T', 398685, 5356168, 48.3506, 7.6325, 158),
('67194', 'Herrlisheim', '32T', 419644, 5398203, 48.7317, 7.90723, 125),
('67195', 'Hessenheim', '32T', 392461, 5340562, 48.2092, 7.55249, 173),
('67196', 'Hilsenheim', '32T', 393596, 5349374, 48.2886, 7.56555, 165),
('67197', 'Hindisheim', '32T', 399416, 5369497, 48.4706, 7.63917, 150),
('67198', 'Hinsbourg', '32T', 374615, 5418553, 48.9072, 7.28889, 350),
('67199', 'Hinsingen', '32T', 352990, 5424119, 48.9525, 6.99194, 220),
('67200', 'Hipsheim', '32T', 402180, 5369047, 48.4669, 7.67666, 150),
('67201', 'Hirschland', '32T', 361478, 5411110, 48.8375, 7.11222, 250),
('67202', 'Hochfelden', '32T', 395003, 5401514, 48.7578, 7.57138, 180),
('67203', 'Hochstett', '32T', 402899, 5403441, 48.7764, 7.67833, 210),
('67206', 'Hoffen', '32T', 422544, 5420213, 48.93, 7.9425, 140),
('67207', 'Hohatzenheim', '32T', 398204, 5396729, 48.7153, 7.61611, 210),
('67209', 'Hohfrankenheim', '32T', 395352, 5398295, 48.7289, 7.57695, 210),
('67210', 'Le Hohwald', '32T', 376465, 5362538, 48.4039, 7.33084, 580),
('67212', 'Holtzheim', '32T', 399957, 5379185, 48.5578, 7.64417, 145),
('67213', 'Hunspach', '32T', 422558, 5422684, 48.9522, 7.94222, 180),
('67214', 'Hurtigheim', '32T', 396080, 5385742, 48.6161, 7.59, 170),
('67215', 'Huttendorf', '32T', 400030, 5406240, 48.8011, 7.63861, 230),
('67216', 'Huttenheim', '32T', 394914, 5357070, 48.3581, 7.58139, 161),
('67217', 'Ichtratzheim', '32T', 402426, 5370216, 48.4775, 7.67972, 149),
('67218', 'Illkirch-Graffenstaden', '32T', 405436, 5375817, 48.5283, 7.71916, 143),
('67220', 'Ingenheim', '32T', 391178, 5399085, 48.7353, 7.52, 175),
('67221', 'Ingolsheim', '32T', 422326, 5425003, 48.9731, 7.93861, 200),
('67222', 'Ingwiller', '32T', 388684, 5414362, 48.8722, 7.48195, 190),
('67223', 'Innenheim', '32T', 394705, 5372393, 48.4958, 7.57473, 150),
('67225', 'Issenhausen', '32T', 392653, 5406717, 48.8042, 7.53806, 180),
('67226', 'Ittenheim', '32T', 396527, 5384405, 48.6042, 7.5964, 175),
('67227', 'Itterswiller', '32T', 383755, 5357998, 48.3644, 7.43055, 250),
('67228', 'Neugartheim-Ittlenheim', '32T', 392925, 5389970, 48.6536, 7.54611, 235),
('67229', 'Jetterswiller', '32T', 383471, 5391981, 48.67, 7.41723, 250),
('67230', 'Kaltenhouse', '32T', 414372, 5404859, 48.7908, 7.83416, 140),
('67231', 'Kauffenheim', '32T', 428660, 5411546, 48.8528, 8.0275, 117),
('67232', 'Keffenach', '32T', 418227, 5424197, 48.9653, 7.88277, 175),
('67233', 'Kertzfeld', '32T', 394117, 5359587, 48.3806, 7.57001, 159),
('67234', 'Keskastel', '32T', 356884, 5425995, 48.9703, 7.04444, 220),
('67235', 'Kesseldorf', '32T', 431748, 5414101, 48.8761, 8.06916, 125),
('67236', 'Kienheim', '32T', 395473, 5393814, 48.6886, 7.57973, 220),
('67237', 'Kilstett', '32T', 415853, 5392051, 48.6758, 7.85694, 130),
('67238', 'Kindwiller', '32T', 397259, 5413086, 48.8622, 7.59917, 210),
('67239', 'Kintzheim', '32T', 380909, 5345918, 48.2553, 7.39556, 220),
('67240', 'Kirchheim', '32T', 389248, 5385100, 48.6092, 7.4975, 179),
('67241', 'Kirrberg', '32T', 357951, 5409561, 48.8228, 7.06472, 250),
('67242', 'Kirrwiller', '32T', 392107, 5408025, 48.8158, 7.53028, 190),
('67246', 'Kogenheim', '32T', 392111, 5354744, 48.3367, 7.54416, 164),
('67247', 'Kolbsheim', '32T', 395822, 5379538, 48.5603, 7.58805, 200),
('67248', 'Krautergersheim', '32T', 394049, 5370244, 48.4764, 7.56639, 155),
('67249', 'Krautwiller', '32T', 403398, 5399201, 48.7383, 7.68612, 145),
('67250', 'Kriegsheim', '32T', 406618, 5401246, 48.7572, 7.72944, 185),
('67252', 'Kurtzenhouse', '32T', 412224, 5399272, 48.7403, 7.80612, 145),
('67253', 'Kuttolsheim', '32T', 391388, 5388826, 48.6431, 7.52555, 210),
('67254', 'Kutzenhausen', '32T', 416284, 5420736, 48.9339, 7.85694, 160),
('67255', 'Lalaye', '32T', 371385, 5354373, 48.3294, 7.26473, 310),
('67256', 'Lampertheim', '32T', 404294, 5389457, 48.6508, 7.70056, 150),
('67257', 'Lampertsloch', '32T', 413456, 5423343, 48.9569, 7.81778, 200),
('67258', 'Landersheim', '32T', 389158, 5394059, 48.6897, 7.49389, 200),
('67259', 'Langensoultzbach', '32T', 407315, 5424708, 48.9683, 7.7336, 210),
('67260', 'Laubach', '32T', 406160, 5415246, 48.8831, 7.72001, 205),
('67261', 'Lauterbourg', '32T', 440093, 5424814, 48.9733, 8.18139, 110),
('67263', 'Lembach', '32T', 411424, 5428595, 49.0039, 7.78889, 195),
('67264', 'Leutenheim', '32T', 428116, 5410441, 48.8428, 8.02028, 118),
('67265', 'Lichtenberg', '32T', 388832, 5419765, 48.9208, 7.4825, 390),
('67266', 'Limersheim', '32T', 399839, 5367884, 48.4561, 7.64528, 150),
('67267', 'Lingolsheim', '32T', 402698, 5378798, 48.5547, 7.68139, 145),
('67268', 'Lipsheim', '32T', 401547, 5371622, 48.49, 7.66749, 146),
('67269', 'Littenheim', '32T', 388855, 5398358, 48.7283, 7.48861, 210),
('67270', 'Lixhausen', '32T', 393632, 5405648, 48.7947, 7.55167, 175),
('67271', 'Lobsann', '32T', 415704, 5424081, 48.9639, 7.84833, 175),
('67272', 'Lochwiller', '32T', 383529, 5394791, 48.6953, 7.41722, 210),
('67273', 'Lohr', '32T', 371193, 5413225, 48.8586, 7.24389, 320),
('67274', 'Lorentzen', '32T', 366491, 5423686, 48.9517, 7.17639, 225),
('67275', 'Lupstein', '32T', 388691, 5399381, 48.7375, 7.48611, 190),
('67276', 'Lutzelhouse', '32T', 373547, 5375515, 48.52, 7.28751, 270),
('67277', 'Mackenheim', '32T', 393378, 5337703, 48.1836, 7.56555, 175),
('67278', 'Mackwiller', '32T', 366400, 5420753, 48.9253, 7.17611, 250),
('67279', 'Maennolsheim', '32T', 386915, 5395370, 48.7011, 7.46306, 220),
('67280', 'Maisonsgoutte', '32T', 371428, 5357183, 48.3547, 7.26445, 300),
('67281', 'Marckolsheim', '32T', 391806, 5335385, 48.1625, 7.545, 176),
('67282', 'Marlenheim', '32T', 388719, 5386346, 48.6203, 7.49, 190),
('67283', 'Marmoutier', '32T', 381022, 5394225, 48.6897, 7.38333, 230),
('67285', 'Matzenheim', '32T', 398196, 5361026, 48.3942, 7.62473, 159),
('67286', 'Meistratzheim', '32T', 392657, 5367243, 48.4492, 7.54834, 157),
('67287', 'Melsheim', '32T', 391351, 5401676, 48.7586, 7.52167, 185),
('67288', 'Memmelshoffen', '32T', 417244, 5423687, 48.9606, 7.86945, 200),
('67289', 'Menchhoffen', '32T', 389694, 5412890, 48.8592, 7.49612, 190),
('67290', 'Merkwiller-Pechelbronn', '32T', 414136, 5421325, 48.9389, 7.8275, 160),
('67291', 'Mertzwiller', '32T', 403164, 5412857, 48.8611, 7.67972, 160),
('67292', 'Mietesheim', '32T', 400387, 5414821, 48.8783, 7.64139, 190),
('67293', 'Minversheim', '32T', 398836, 5404532, 48.7856, 7.62278, 200),
('67295', 'Mittelbergheim', '32T', 384855, 5361466, 48.3958, 7.44445, 220),
('67296', 'Mittelhausbergen', '32T', 403775, 5385450, 48.6147, 7.69444, 152),
('67297', 'Mittelhausen', '32T', 399293, 5395907, 48.7081, 7.63111, 185),
('67298', 'Mittelschaeffolsheim', '32T', 400953, 5394950, 48.6997, 7.65389, 170),
('67299', 'Mollkirch', '32T', 380776, 5373875, 48.5067, 7.38583, 330),
('67300', 'Molsheim', '32T', 388896, 5377632, 48.5419, 7.49473, 175),
('67301', 'Mommenheim', '32T', 400250, 5401387, 48.7575, 7.64278, 160),
('67302', 'Monswiller', '32T', 380809, 5401489, 48.755, 7.37834, 179),
('67303', 'Morsbronn-les-Bains', '32T', 407863, 5417225, 48.9011, 7.74278, 190),
('67304', 'Morschwiller', '32T', 399170, 5408325, 48.8197, 7.62639, 220),
('67305', 'Mothern', '32T', 438013, 5420606, 48.9353, 8.15361, 130),
('67306', 'Muhlbach-sur-Bruche', '32T', 374437, 5374939, 48.515, 7.29973, 260),
('67307', 'Mulhausen', '32T', 393899, 5415404, 48.8825, 7.55277, 190),
('67308', 'Munchhausen', '32T', 437586, 5418820, 48.9192, 8.14805, 115),
('67309', 'Mundolsheim', '32T', 405297, 5388266, 48.6403, 7.71445, 145),
('67310', 'Mussig', '32T', 390232, 5342704, 48.2281, 7.52195, 170),
('67311', 'Muttersholtz', '32T', 391120, 5347073, 48.2675, 7.53278, 167),
('67312', 'Mutzenhouse', '32T', 396174, 5399670, 48.7414, 7.58778, 190),
('67313', 'Mutzig', '32T', 386281, 5377159, 48.5372, 7.45944, 190),
('67314', 'Natzwiller', '32T', 371185, 5366424, 48.4378, 7.25834, 550),
('67315', 'Neewiller-près-Lauterbourg', '32T', 436266, 5422602, 48.9531, 8.12945, 150),
('67317', 'Neubois', '32T', 376783, 5351597, 48.3056, 7.33834, 300),
('67319', 'Neuhaeusel', '32T', 432942, 5408343, 48.8244, 8.08639, 119);
INSERT INTO `ods_communes` (`oc_code_insee`, `oc_nom`, `oc_secteur`, `oc_x_utm`, `oc_y_utm`, `oc_latitude`, `oc_longitude`, `oc_altitude`) VALUES
('67320', 'Neuve-Église', '32T', 375090, 5354290, 48.3294, 7.31472, 290),
('67321', 'Neuviller-la-Roche', '32T', 369896, 5366701, 48.44, 7.24083, 540),
('67322', 'Neuwiller-lès-Saverne', '32T', 382972, 5409228, 48.825, 7.40555, 210),
('67324', 'Niederbronn-les-Bains', '32T', 400918, 5422873, 48.9508, 7.64667, 190),
('67325', 'Niederhaslach', '32T', 377599, 5377865, 48.5419, 7.34167, 255),
('67326', 'Niederhausbergen', '32T', 404347, 5386583, 48.625, 7.70194, 150),
('67327', 'Niederlauterbach', '32T', 434157, 5424820, 48.9728, 8.10028, 140),
('67328', 'Niedermodern', '32T', 399099, 5411199, 48.8456, 7.62472, 170),
('67329', 'Niedernai', '32T', 390298, 5367473, 48.4508, 7.51638, 162),
('67331', 'Niederschaeffolsheim', '32T', 407196, 5402812, 48.7714, 7.73695, 190),
('67333', 'Niedersoultzbach', '32T', 386998, 5411616, 48.8472, 7.45972, 195),
('67334', 'Niedersteinbach', '32T', 405766, 5431684, 49.0308, 7.71083, 220),
('67335', 'Nordheim', '32T', 390246, 5387953, 48.635, 7.51028, 230),
('67336', 'Nordhouse', '32T', 401940, 5367044, 48.4489, 7.67388, 150),
('67337', 'Nothalten', '32T', 383007, 5356654, 48.3522, 7.42083, 220),
('67338', 'Obenheim', '32T', 402961, 5357020, 48.3589, 7.69001, 155),
('67339', 'Betschdorf', '32T', 419443, 5416860, 48.8994, 7.90083, 160),
('67340', 'Oberbronn', '32T', 398050, 5421782, 48.9406, 7.60778, 270),
('67341', 'Oberdorf-Spachbach', '32T', 409087, 5419892, 48.9253, 7.75889, 170),
('67342', 'Oberhaslach', '32T', 376900, 5378746, 48.5497, 7.33194, 270),
('67343', 'Oberhausbergen', '32T', 403045, 5384691, 48.6078, 7.68472, 150),
('67344', 'Oberhoffen-lès-Wissembourg', '32T', 420952, 5429872, 49.0167, 7.91889, 190),
('67345', 'Oberhoffen-sur-Moder', '32T', 416625, 5404023, 48.7836, 7.865, 130),
('67346', 'Oberlauterbach', '32T', 431725, 5422193, 48.9489, 8.0675, 170),
('67347', 'Obermodern-Zutzendorf', '32T', 392739, 5411194, 48.8444, 7.53806, 200),
('67348', 'Obernai', '32T', 387756, 5368790, 48.4622, 7.48166, 190),
('67350', 'Oberschaeffolsheim', '32T', 400319, 5382268, 48.5856, 7.64833, 150),
('67351', 'Seebach', '32T', 425659, 5424927, 48.9728, 7.98416, 150),
('67352', 'Obersoultzbach', '32T', 386316, 5412186, 48.8522, 7.45027, 205),
('67353', 'Obersteinbach', '32T', 403950, 5432364, 49.0367, 7.68583, 240),
('67354', 'Odratzheim', '32T', 388595, 5384217, 48.6011, 7.48889, 180),
('67355', 'Oermingen', '32T', 363038, 5428898, 48.9978, 7.1275, 220),
('67356', 'Offendorf', '32T', 420245, 5395971, 48.7117, 7.91583, 126),
('67358', 'Offwiller', '32T', 393225, 5418505, 48.9103, 7.54277, 220),
('67359', 'Ohlungen', '32T', 404618, 5407303, 48.8114, 7.70083, 170),
('67360', 'Ohnenheim', '32T', 389248, 5337720, 48.1831, 7.51, 175),
('67361', 'Olwisheim', '32T', 402500, 5394553, 48.6964, 7.67501, 160),
('67362', 'Orschwiller', '32T', 379784, 5344429, 48.2417, 7.38083, 250),
('67363', 'Osthoffen', '32T', 393560, 5382453, 48.5861, 7.55666, 180),
('67364', 'Osthouse', '32T', 399486, 5361867, 48.4019, 7.64195, 156),
('67365', 'Ostwald', '32T', 404728, 5377589, 48.5442, 7.70917, 140),
('67366', 'Ottersthal', '32T', 378521, 5401508, 48.7547, 7.34722, 240),
('67367', 'Otterswiller', '32T', 380905, 5398336, 48.7267, 7.38056, 190),
('67368', 'Ottrott', '32T', 383635, 5368163, 48.4558, 7.42612, 290),
('67369', 'Ottwiller', '32T', 370149, 5413929, 48.8647, 7.22944, 305),
('67370', 'Petersbach', '32T', 372978, 5414636, 48.8717, 7.26777, 360),
('67371', 'La Petite-Pierre', '32T', 376832, 5412913, 48.8569, 7.32083, 350),
('67372', 'Pfaffenhoffen', '32T', 398160, 5411123, 48.8447, 7.61194, 170),
('67373', 'Pfalzweyer', '32T', 372160, 5407364, 48.8061, 7.25889, 290),
('67374', 'Pfettisheim', '32T', 400241, 5390546, 48.66, 7.64528, 170),
('67375', 'Pfulgriesheim', '32T', 402009, 5388724, 48.6439, 7.66972, 160),
('67377', 'Plaine', '32T', 363087, 5363927, 48.4136, 7.14972, 490),
('67378', 'Plobsheim', '32T', 405739, 5369357, 48.4703, 7.72473, 147),
('67379', 'Preuschdorf', '32T', 412070, 5421882, 48.9436, 7.79917, 170),
('67380', 'Printzheim', '32T', 388399, 5405225, 48.79, 7.48055, 205),
('67381', 'Puberg', '32T', 376523, 5419160, 48.9131, 7.31473, 375),
('67382', 'Quatzenheim', '32T', 394811, 5386877, 48.6261, 7.5725, 165),
('67383', 'Rangen', '32T', 387899, 5391428, 48.6658, 7.4775, 240),
('67384', 'Ranrupt', '32T', 366582, 5359519, 48.3747, 7.19833, 520),
('67385', 'Ratzwiller', '32T', 371092, 5423824, 48.9539, 7.23916, 300),
('67386', 'Rauwiller', '32T', 361203, 5408274, 48.8119, 7.10944, 325),
('67387', 'Reichsfeld', '32T', 380284, 5358348, 48.3669, 7.38361, 336),
('67388', 'Reichshoffen', '32T', 402283, 5420717, 48.9317, 7.66583, 180),
('67389', 'Reichstett', '32T', 408093, 5389022, 48.6475, 7.75222, 140),
('67391', 'Reinhardsmunster', '32T', 376246, 5392815, 48.6761, 7.31889, 330),
('67392', 'Reipertswiller', '32T', 386550, 5424630, 48.9642, 7.45, 270),
('67394', 'Retschwiller', '32T', 418141, 5422500, 48.95, 7.88194, 190),
('67395', 'Reutenbourg', '32T', 382850, 5393631, 48.6847, 7.40833, 230),
('67396', 'Rexingen', '32T', 366726, 5418211, 48.9025, 7.18139, 255),
('67397', 'Rhinau', '32T', 404017, 5352524, 48.3186, 7.70528, 158),
('67398', 'Richtolsheim', '32T', 395733, 5342231, 48.2247, 7.59611, 170),
('67400', 'Riedseltz', '32T', 423559, 5427395, 48.9947, 7.95501, 160),
('67401', 'Rimsdorf', '32T', 362829, 5421272, 48.9292, 7.12722, 310),
('67402', 'Ringeldorf', '32T', 397876, 5408967, 48.8253, 7.60861, 250),
('67403', 'Ringendorf', '32T', 394091, 5407245, 48.8092, 7.5575, 220),
('67404', 'Rittershoffen', '32T', 423295, 5417114, 48.9022, 7.95333, 170),
('67406', 'Rohr', '32T', 393034, 5394633, 48.6956, 7.54639, 190),
('67407', 'Rohrwiller', '32T', 419600, 5400891, 48.7558, 7.9061, 124),
('67408', 'Romanswiller', '32T', 382678, 5389310, 48.6458, 7.40722, 221),
('67409', 'Roppenheim', '32T', 430541, 5410379, 48.8425, 8.05334, 117),
('67410', 'Rosenwiller', '32T', 384754, 5373699, 48.5058, 7.43972, 280),
('67411', 'Rosheim', '32T', 386803, 5372484, 48.4953, 7.46778, 190),
('67412', 'Rossfeld', '32T', 397589, 5354767, 48.3378, 7.61806, 160),
('67413', 'Rosteig', '32T', 378281, 5421376, 48.9333, 7.33805, 240),
('67414', 'Rothau', '32T', 367593, 5368392, 48.4547, 7.20917, 380),
('67415', 'Rothbach', '32T', 392263, 5418215, 48.9075, 7.52973, 190),
('67416', 'Rott', '32T', 420089, 5430594, 49.0231, 7.90695, 275),
('67417', 'Rottelsheim', '32T', 405556, 5401233, 48.7569, 7.71499, 185),
('67418', 'Rountzenheim', '32T', 426938, 5407677, 48.8178, 8.00472, 119),
('67420', 'Russ', '32T', 371477, 5372936, 48.4964, 7.26028, 310),
('67421', 'Saales', '32T', 359827, 5356808, 48.3489, 7.10806, 556),
('67422', 'Saasenheim', '32T', 397512, 5343619, 48.2375, 7.61972, 170),
('67423', 'Saessolsheim', '32T', 390752, 5396097, 48.7083, 7.515, 240),
('67424', 'Saint-Blaise-la-Roche', '32T', 364108, 5362759, 48.4033, 7.16389, 420),
('67425', 'Saint-Jean-Saverne', '32T', 379721, 5403150, 48.7697, 7.36306, 250),
('67426', 'Saint-Martin', '32T', 373354, 5356769, 48.3514, 7.29056, 290),
('67427', 'Saint-Maurice', '32T', 376836, 5354067, 48.3278, 7.33833, 240),
('67428', 'Saint-Nabor', '32T', 383527, 5366929, 48.4447, 7.425, 330),
('67429', 'Saint-Pierre', '32T', 386841, 5359974, 48.3828, 7.47167, 185),
('67430', 'Saint-Pierre-Bois', '32T', 378300, 5355085, 48.3372, 7.35778, 270),
('67431', 'Salenthal', '32T', 380006, 5391653, 48.6664, 7.37028, 280),
('67432', 'Salmbach', '32T', 432313, 5425336, 48.9772, 8.075, 145),
('67433', 'Sand', '32T', 397388, 5359588, 48.3811, 7.61417, 159),
('67434', 'Sarre-Union', '32T', 360095, 5422638, 48.9408, 7.08944, 245),
('67435', 'Sarrewerden', '32T', 359558, 5420705, 48.9233, 7.08278, 230),
('67436', 'Saulxures', '32T', 361712, 5361489, 48.3914, 7.13195, 500),
('67437', 'Saverne', '32T', 379471, 5400066, 48.7419, 7.36056, 190),
('67438', 'Schaeffersheim', '32T', 398306, 5364884, 48.4289, 7.62528, 155),
('67439', 'Schaffhouse-sur-Zorn', '32T', 394174, 5398688, 48.7322, 7.56083, 178),
('67440', 'Schaffhouse-près-Seltz', '32T', 434052, 5417687, 48.9086, 8.1, 125),
('67441', 'Schalkendorf', '32T', 394488, 5409925, 48.8333, 7.56222, 245),
('67442', 'Scharrachbergheim-Irmstett', '32T', 389068, 5383281, 48.5928, 7.49555, 210),
('67443', 'Scheibenhard', '32T', 436763, 5425222, 48.9767, 8.13583, 130),
('67444', 'Scherlenheim', '32T', 392488, 5402396, 48.7653, 7.53694, 208),
('67445', 'Scherwiller', '32T', 382854, 5349245, 48.2856, 7.42083, 187),
('67446', 'Schillersdorf', '32T', 391877, 5414052, 48.87, 7.52556, 200),
('67447', 'Schiltigheim', '32T', 407400, 5384216, 48.6042, 7.74389, 140),
('67448', 'Schirmeck', '32T', 368509, 5371583, 48.4836, 7.22055, 310),
('67449', 'Schirrhein', '32T', 419673, 5405954, 48.8014, 7.90611, 130),
('67450', 'Schirrhoffen', '32T', 420821, 5406309, 48.8047, 7.92167, 125),
('67451', 'Schleithal', '32T', 429191, 5427629, 48.9975, 8.03195, 155),
('67452', 'Schnersheim', '32T', 394525, 5390187, 48.6558, 7.56778, 200),
('67456', 'Schopperten', '32T', 357239, 5423174, 48.945, 7.05027, 220),
('67458', 'Schweighouse-sur-Moder', '32T', 407202, 5408124, 48.8192, 7.73583, 150),
('67459', 'Schwenheim', '32T', 383242, 5396712, 48.7125, 7.41278, 210),
('67460', 'Schwindratzheim', '32T', 397046, 5401507, 48.7581, 7.59917, 165),
('67461', 'Schwobsheim', '32T', 394365, 5343028, 48.2317, 7.5775, 170),
('67462', 'Sélestat', '32T', 384735, 5346426, 48.2606, 7.44694, 175),
('67463', 'Seltz', '32T', 434403, 5416386, 48.8969, 8.105, 115),
('67464', 'Sermersheim', '32T', 392851, 5355781, 48.3461, 7.55388, 160),
('67465', 'Sessenheim', '32T', 425504, 5405627, 48.7992, 7.98556, 120),
('67466', 'Siegen', '32T', 430153, 5423324, 48.9589, 8.04584, 160),
('67467', 'Siewiller', '32T', 368202, 5411720, 48.8444, 7.20361, 290),
('67468', 'Siltzheim', '32T', 360680, 5436187, 49.0628, 7.09278, 225),
('67469', 'Singrist', '32T', 381406, 5392055, 48.6703, 7.38917, 285),
('67470', 'Solbach', '32T', 367111, 5365376, 48.4275, 7.20361, 600),
('67471', 'Souffelweyersheim', '32T', 407129, 5387648, 48.635, 7.73945, 140),
('67472', 'Soufflenheim', '32T', 424020, 5409044, 48.8297, 7.96472, 120),
('67473', 'Soultz-les-Bains', '32T', 388324, 5380855, 48.5708, 7.48611, 180),
('67474', 'Soultz-sous-Forêts', '32T', 418284, 5421108, 48.9375, 7.88417, 145),
('67475', 'Sparsbach', '32T', 383930, 5415046, 48.8775, 7.41695, 210),
('67476', 'Stattmatten', '32T', 426763, 5405209, 48.7956, 8.00278, 120),
('67477', 'Steige', '32T', 369552, 5357967, 48.3614, 7.23889, 410),
('67478', 'Steinbourg', '32T', 383562, 5403285, 48.7717, 7.41527, 190),
('67479', 'Steinseltz', '32T', 421695, 5429243, 49.0111, 7.92917, 175),
('67480', 'Still', '32T', 382312, 5378630, 48.5497, 7.40528, 210),
('67481', 'Stotzheim', '32T', 388045, 5359487, 48.3786, 7.48806, 165),
('67482', 'Strasbourg', '32T', 408245, 5382009, 48.5844, 7.75584, 144),
('67483', 'Struth', '32T', 372073, 5416912, 48.8919, 7.25473, 330),
('67484', 'Stundwiller', '32T', 426037, 5419672, 48.9256, 7.99028, 150),
('67485', 'Stutzheim-Offenheim', '32T', 398684, 5387022, 48.6281, 7.62501, 160),
('67486', 'Sundhouse', '32T', 396386, 5345245, 48.2519, 7.60416, 171),
('67487', 'Surbourg', '32T', 415734, 5417996, 48.9092, 7.85, 180),
('67488', 'Thal-Drulingen', '32T', 364120, 5419078, 48.9097, 7.14556, 270),
('67489', 'Thal-Marmoutier', '32T', 378825, 5395694, 48.7025, 7.35306, 230),
('67490', 'Thanvillé', '32T', 377625, 5353401, 48.3219, 7.34916, 230),
('67491', 'Tieffenbach', '32T', 371838, 5418215, 48.9036, 7.25111, 270),
('67492', 'Traenheim', '32T', 386881, 5383541, 48.5947, 7.46583, 200),
('67493', 'Triembach-au-Val', '32T', 376121, 5355256, 48.3383, 7.32834, 260),
('67494', 'Trimbach', '32T', 428580, 5421183, 48.9394, 8.02473, 145),
('67495', 'Truchtersheim', '32T', 397362, 5390876, 48.6625, 7.60612, 190),
('67496', 'Uberach', '32T', 399598, 5411715, 48.8503, 7.63139, 170),
('67497', 'Uhlwiller', '32T', 402700, 5408417, 48.8211, 7.67445, 200),
('67498', 'Uhrwiller', '32T', 395725, 5414998, 48.8792, 7.57778, 195),
('67499', 'Urbeis', '32T', 368496, 5354161, 48.3269, 7.22583, 390),
('67500', 'Urmatt', '32T', 376274, 5376381, 48.5283, 7.32416, 245),
('67501', 'Uttenheim', '32T', 396254, 5362852, 48.4103, 7.59805, 157),
('67502', 'Uttenhoffen', '32T', 401229, 5416319, 48.8919, 7.6525, 170),
('67503', 'Uttwiller', '32T', 389279, 5411509, 48.8467, 7.49083, 190),
('67504', 'Valff', '32T', 390377, 5364105, 48.4206, 7.51833, 160),
('67505', 'La Vancelle', '32T', 374057, 5349494, 48.2861, 7.30222, 430),
('67506', 'Vendenheim', '32T', 404861, 5391516, 48.6694, 7.70778, 155),
('67507', 'Villé', '32T', 374512, 5356064, 48.3453, 7.30639, 260),
('67509', 'Volksberg', '32T', 375323, 5422893, 48.9464, 7.29722, 380),
('67510', 'Wahlenheim', '32T', 403426, 5402011, 48.7636, 7.68584, 185),
('67511', 'Walbourg', '32T', 411297, 5415501, 48.8861, 7.79, 170),
('67512', 'La Walck', '32T', 398071, 5411805, 48.8508, 7.61056, 170),
('67513', 'Waldersbach', '32T', 368004, 5363996, 48.4153, 7.21611, 530),
('67514', 'Waldhambach', '32T', 369373, 5420775, 48.9261, 7.21667, 300),
('67515', 'Waldolwisheim', '32T', 385231, 5399019, 48.7336, 7.43917, 200),
('67516', 'Waltenheim-sur-Zorn', '32T', 399350, 5400199, 48.7467, 7.63083, 170),
('67517', 'Wangen', '32T', 387056, 5386132, 48.6181, 7.4675, 240),
('67519', 'La Wantzenau', '32T', 413498, 5390512, 48.6617, 7.82528, 132),
('67520', 'Wasselonne', '32T', 385645, 5388261, 48.6369, 7.44777, 200),
('67521', 'Weinbourg', '32T', 385665, 5414207, 48.8703, 7.44084, 230),
('67522', 'Weislingen', '32T', 371857, 5419914, 48.9189, 7.25084, 330),
('67523', 'Weitbruch', '32T', 410041, 5400727, 48.7531, 7.77611, 170),
('67524', 'Weiterswiller', '32T', 383630, 5412396, 48.8536, 7.41361, 220),
('67525', 'Westhoffen', '32T', 385238, 5384346, 48.6017, 7.44333, 201),
('67526', 'Westhouse', '32T', 395609, 5361289, 48.3961, 7.58973, 159),
('67527', 'Westhouse-Marmoutier', '32T', 386084, 5393750, 48.6864, 7.45222, 230),
('67528', 'Weyer', '32T', 365175, 5413028, 48.8556, 7.16195, 270),
('67529', 'Weyersheim', '32T', 412075, 5396340, 48.7139, 7.80472, 130),
('67530', 'Wickersheim-Wilshausen', '32T', 392119, 5404441, 48.7836, 7.53139, 185),
('67531', 'Wildersbach', '32T', 368697, 5366389, 48.4369, 7.22472, 550),
('67532', 'Willgottheim', '32T', 390344, 5391935, 48.6708, 7.51056, 220),
('67534', 'Wilwisheim', '32T', 390370, 5400615, 48.7489, 7.50861, 160),
('67535', 'Wimmenau', '32T', 384145, 5418563, 48.9092, 7.41888, 205),
('67536', 'Windstein', '32T', 403706, 5427642, 48.9942, 7.68361, 260),
('67537', 'Wingen', '32T', 413311, 5431036, 49.0261, 7.81416, 265),
('67538', 'Wingen-sur-Moder', '32T', 381358, 5419611, 48.9181, 7.38056, 220),
('67539', 'Wingersheim', '32T', 399666, 5397321, 48.7208, 7.63583, 195),
('67540', 'Wintershouse', '32T', 404521, 5405204, 48.7925, 7.69999, 210),
('67541', 'Wintzenbach', '32T', 434350, 5420525, 48.9342, 8.10361, 145),
('67542', 'Wintzenheim-Kochersberg', '32T', 390400, 5390606, 48.6589, 7.51167, 240),
('67543', 'Wisches', '32T', 371982, 5374407, 48.5097, 7.26666, 290),
('67544', 'Wissembourg', '32T', 422547, 5432104, 49.0369, 7.94028, 170),
('67545', 'Witternheim', '32T', 397273, 5352085, 48.3136, 7.61445, 160),
('67546', 'Wittersheim', '32T', 401421, 5404146, 48.7825, 7.65805, 200),
('67547', 'Wittisheim', '32T', 395565, 5346557, 48.2636, 7.59278, 166),
('67548', 'Wiwersheim', '32T', 397500, 5388341, 48.6397, 7.60862, 170),
('67551', 'Wolfisheim', '32T', 401751, 5382149, 48.5847, 7.66777, 150),
('67552', 'Wolfskirchen', '32T', 358907, 5415902, 48.88, 7.07556, 280),
('67553', 'Wolschheim', '32T', 386122, 5395603, 48.7031, 7.45222, 220),
('67554', 'Wolxheim', '32T', 390306, 5380538, 48.5683, 7.51306, 165),
('67555', 'Zehnacker', '32T', 385987, 5391960, 48.6703, 7.45139, 250),
('67556', 'Zeinheim', '32T', 388651, 5392185, 48.6728, 7.4875, 210),
('67557', 'Zellwiller', '32T', 388827, 5361572, 48.3975, 7.49806, 170),
('67558', 'Zinswiller', '32T', 396505, 5419391, 48.9188, 7.5873, 190),
('67559', 'Zittersheim', '32T', 378830, 5417595, 48.8994, 7.34667, 255),
('68001', 'Algolsheim', '32T', 392491, 5317892, 48.0053, 7.55861, 190),
('68002', 'Altenach', '32T', 358141, 5274496, 47.6083, 7.1125, 330),
('68004', 'Altkirch', '32T', 367617, 5276033, 47.6242, 7.23806, 290),
('68005', 'Ammerschwihr', '32T', 372173, 5331590, 48.1247, 7.28223, 232),
('68006', 'Ammerzwiller', '32T', 362594, 5283501, 47.6903, 7.16889, 295),
('68007', 'Andolsheim', '32T', 381973, 5324461, 48.0625, 7.41584, 189),
('68008', 'Appenwihr', '32T', 383652, 5320473, 48.0269, 7.43945, 192),
('68009', 'Artzenheim', '32T', 391438, 5330142, 48.1153, 7.54139, 182),
('68010', 'Aspach', '32T', 367285, 5277956, 47.6414, 7.23306, 300),
('68011', 'Aspach-le-Bas', '32T', 361637, 5291462, 47.7617, 7.15361, 300),
('68012', 'Aspach-le-Haut', '32T', 359881, 5292925, 47.7744, 7.12972, 313),
('68013', 'Attenschwiller', '32T', 384438, 5269313, 47.5669, 7.46362, 360),
('68014', 'Aubure', '32T', 367813, 5339813, 48.1978, 7.22111, 807),
('68015', 'Baldersheim', '32T', 378696, 5295589, 47.8022, 7.38, 228),
('68016', 'Balgau', '32T', 390796, 5309400, 47.9286, 7.53805, 205),
('68017', 'Ballersdorf', '32T', 361729, 5276077, 47.6233, 7.15972, 300),
('68018', 'Balschwiller', '32T', 362518, 5281155, 47.6692, 7.16862, 278),
('68019', 'Baltzenheim', '32T', 392509, 5327682, 48.0933, 7.55639, 185),
('68020', 'Bantzenheim', '32T', 388708, 5297951, 47.8253, 7.51306, 220),
('68021', 'Bartenheim', '32T', 385591, 5276950, 47.6358, 7.47695, 260),
('68022', 'Battenheim', '32T', 378842, 5297625, 47.8206, 7.38138, 225),
('68023', 'Beblenheim', '32T', 375540, 5335222, 48.1581, 7.32639, 220),
('68024', 'Bellemagny', '32T', 354985, 5283655, 47.69, 7.0675, 340),
('68025', 'Bendorf', '32T', 370497, 5260866, 47.4883, 7.28084, 540),
('68026', 'Bennwihr', '32T', 375386, 5333836, 48.1456, 7.32473, 210),
('68027', 'Berentzwiller', '32T', 378381, 5271567, 47.5861, 7.3825, 365),
('68028', 'Bergheim', '32T', 378478, 5340255, 48.2039, 7.36444, 210),
('68029', 'Bergholtz', '32T', 369130, 5308739, 47.9186, 7.24833, 243),
('68030', 'Bergholtzzell', '32T', 368143, 5310059, 47.9303, 7.23472, 260),
('68031', 'Bernwiller', '32T', 364226, 5283710, 47.6925, 7.19056, 284),
('68032', 'Berrwiller', '32T', 366942, 5301160, 47.85, 7.2214, 260),
('68033', 'Bettendorf', '32T', 370444, 5271708, 47.5858, 7.27694, 330),
('68034', 'Bettlach', '32T', 380548, 5263060, 47.51, 7.41362, 449),
('68035', 'Biederthal', '32T', 383052, 5258532, 47.4697, 7.44806, 400),
('68036', 'Biesheim', '32T', 391401, 5321619, 48.0386, 7.54306, 192),
('68037', 'Biltzheim', '32T', 379804, 5312800, 47.9572, 7.39001, 204),
('68038', 'Bischwihr', '32T', 383516, 5328074, 48.0953, 7.43555, 184),
('68039', 'Bisel', '32T', 365785, 5266284, 47.5361, 7.21667, 410),
('68040', 'Bitschwiller-lès-Thann', '32T', 356289, 5299222, 47.8303, 7.07972, 355),
('68041', 'Blodelsheim', '32T', 390811, 5304675, 47.8861, 7.53945, 210),
('68042', 'Blotzheim', '32T', 387021, 5273185, 47.6022, 7.49695, 270),
('68043', 'Bollwiller', '32T', 370059, 5302016, 47.8583, 7.26278, 235),
('68044', 'Le Bonhomme', '32T', 359816, 5337099, 48.1717, 7.11444, 690),
('68045', 'Bourbach-le-Bas', '32T', 354641, 5293208, 47.7758, 7.05973, 390),
('68046', 'Bourbach-le-Haut', '32T', 352450, 5295488, 47.7958, 7.02972, 550),
('68049', 'Bouxwiller', '32T', 375474, 5262611, 47.505, 7.34639, 400),
('68050', 'Bréchaumont', '32T', 355160, 5281457, 47.6703, 7.07056, 349),
('68051', 'Breitenbach-Haut-Rhin', '32T', 358296, 5320734, 48.0242, 7.09944, 440),
('68052', 'Bretten', '32T', 355677, 5284626, 47.6989, 7.07639, 350),
('68054', 'Brinckheim', '32T', 384214, 5275958, 47.6267, 7.45888, 282),
('68055', 'Bruebach', '32T', 376959, 5284322, 47.7006, 7.36, 330),
('68056', 'Brunstatt', '32T', 374200, 5286913, 47.7233, 7.3225, 250),
('68057', 'Buethwiller', '32T', 360882, 5279958, 47.6581, 7.14722, 286),
('68058', 'Buhl', '32T', 364447, 5310021, 47.9292, 7.18528, 330),
('68059', 'Burnhaupt-le-Bas', '32T', 362170, 5286723, 47.7192, 7.16222, 300),
('68060', 'Burnhaupt-le-Haut', '32T', 361281, 5287918, 47.7297, 7.15, 310),
('68061', 'Buschwiller', '32T', 387826, 5268352, 47.5589, 7.50889, 310),
('68062', 'Carspach', '32T', 365469, 5275249, 47.6167, 7.20972, 300),
('68063', 'Cernay', '32T', 363361, 5296579, 47.8081, 7.175, 291),
('68064', 'Chalampé', '32T', 390671, 5297265, 47.8194, 7.53945, 216),
('68065', 'Chavannes-sur-l''Étang', '32T', 351566, 5277161, 47.6308, 7.02417, 360),
('68066', 'Colmar', '32T', 377497, 5326253, 48.0778, 7.35527, 198),
('68067', 'Courtavon', '32T', 364237, 5258135, 47.4625, 7.19862, 450),
('68068', 'Dannemarie', '32T', 358638, 5276924, 47.6303, 7.11833, 315),
('68069', 'Dessenheim', '32T', 387121, 5314628, 47.975, 7.4875, 201),
('68070', 'Didenheim', '32T', 372562, 5286362, 47.7181, 7.30083, 250),
('68071', 'Diefmatten', '32T', 358519, 5285730, 47.7094, 7.11389, 300),
('68072', 'Dietwiller', '32T', 380026, 5283424, 47.6931, 7.40111, 250),
('68073', 'Dolleren', '32T', 345178, 5296759, 47.8056, 6.93223, 470),
('68074', 'Durlinsdorf', '32T', 367434, 5260594, 47.4853, 7.24028, 470),
('68075', 'Durmenach', '32T', 374882, 5265248, 47.5286, 7.33778, 370),
('68076', 'Durrenentzen', '32T', 388453, 5327667, 48.0925, 7.50194, 186),
('68077', 'Eglingen', '32T', 363506, 5280607, 47.6644, 7.18194, 290),
('68078', 'Eguisheim', '32T', 373706, 5322351, 48.0419, 7.30555, 210),
('68079', 'Elbach', '32T', 355751, 5278354, 47.6425, 7.07945, 319),
('68080', 'Emlingen', '32T', 371711, 5276096, 47.6256, 7.2925, 292),
('68081', 'Saint-Bernard', '32T', 365113, 5281496, 47.6728, 7.20306, 285),
('68082', 'Ensisheim', '32T', 376891, 5302700, 47.8658, 7.35389, 219),
('68083', 'Eschbach-au-Val', '32T', 361702, 5321052, 48.0278, 7.145, 450),
('68084', 'Eschentzwiller', '32T', 379946, 5285618, 47.7128, 7.39944, 265),
('68085', 'Eteimbes', '32T', 353938, 5285133, 47.7031, 7.05306, 370),
('68086', 'Falkwiller', '32T', 359964, 5282544, 47.6811, 7.13417, 290),
('68087', 'Feldbach', '32T', 369443, 5266170, 47.5358, 7.26528, 415),
('68088', 'Feldkirch', '32T', 370953, 5302953, 47.8669, 7.27445, 230),
('68089', 'Fellering', '32T', 349556, 5306653, 47.8956, 6.98722, 450),
('68090', 'Ferrette', '32T', 373063, 5261458, 47.4942, 7.31472, 520),
('68091', 'Fessenheim', '32T', 390807, 5307794, 47.9142, 7.53861, 208),
('68092', 'Fislis', '32T', 378235, 5262553, 47.505, 7.38305, 385),
('68093', 'Flaxlanden', '32T', 373720, 5284021, 47.6972, 7.31694, 290),
('68094', 'Folgensbourg', '32T', 382982, 5267582, 47.5511, 7.44473, 450),
('68095', 'Fortschwihr', '32T', 384575, 5327218, 48.0878, 7.45, 185),
('68096', 'Franken', '32T', 376420, 5273678, 47.6047, 7.35583, 340),
('68097', 'Fréland', '32T', 365677, 5336773, 48.17, 7.19334, 400),
('68098', 'Friesen', '32T', 360865, 5269611, 47.565, 7.15027, 380),
('68100', 'Fulleren', '32T', 360646, 5272705, 47.5928, 7.14638, 350),
('68101', 'Galfingue', '32T', 366822, 5285070, 47.7053, 7.22473, 290),
('68102', 'Geishouse', '32T', 355003, 5305154, 47.8833, 7.06055, 670),
('68103', 'Geispitzen', '32T', 381321, 5280494, 47.6669, 7.41916, 290),
('68104', 'Geiswasser', '32T', 395809, 5314588, 47.9761, 7.60388, 197),
('68105', 'Gildwiller', '32T', 360030, 5283562, 47.6903, 7.13472, 300),
('68106', 'Goldbach-Altenbach', '32T', 358279, 5304023, 47.8739, 7.10472, 700),
('68107', 'Gommersdorf', '32T', 359565, 5278106, 47.6411, 7.13028, 305),
('68108', 'Grentzingen', '32T', 372272, 5269320, 47.5647, 7.30194, 340),
('68109', 'Griesbach-au-Val', '32T', 363771, 5321775, 48.0347, 7.1725, 380),
('68110', 'Grussenheim', '32T', 387515, 5333646, 48.1461, 7.48777, 180),
('68111', 'Gueberschwihr', '32T', 371290, 5318019, 48.0025, 7.27445, 270),
('68112', 'Guebwiller', '32T', 366301, 5307630, 47.9081, 7.21083, 270),
('68113', 'Guémar', '32T', 380980, 5338442, 48.1881, 7.39861, 180),
('68114', 'Guevenatten', '32T', 355986, 5282796, 47.6825, 7.08111, 362),
('68115', 'Guewenheim', '32T', 356994, 5290679, 47.7536, 7.09195, 334),
('68116', 'Gundolsheim', '32T', 372663, 5309834, 47.9292, 7.29527, 215),
('68117', 'Gunsbach', '32T', 363966, 5323037, 48.0461, 7.17472, 340),
('68118', 'Habsheim', '32T', 381357, 5287350, 47.7286, 7.41778, 245),
('68119', 'Hagenbach', '32T', 361675, 5279075, 47.6503, 7.15805, 285),
('68120', 'Hagenthal-le-Bas', '32T', 385372, 5264755, 47.5261, 7.47722, 351),
('68121', 'Hagenthal-le-Haut', '32T', 384714, 5264243, 47.5214, 7.46861, 375),
('68122', 'Hartmannswiller', '32T', 366637, 5302371, 47.8608, 7.21695, 255),
('68123', 'Hattstatt', '32T', 373215, 5318872, 48.0106, 7.29999, 221),
('68124', 'Hausgauen', '32T', 373978, 5273761, 47.605, 7.32333, 320),
('68125', 'Hecken', '32T', 359324, 5283672, 47.6911, 7.12528, 300),
('68126', 'Hégenheim', '32T', 389150, 5268728, 47.5625, 7.52639, 275),
('68127', 'Heidwiller', '32T', 367895, 5280011, 47.66, 7.24055, 280),
('68128', 'Heimersdorf', '32T', 367672, 5270164, 47.5714, 7.24056, 352),
('68129', 'Heimsbrunn', '32T', 367110, 5287627, 47.7283, 7.22778, 280),
('68130', 'Heiteren', '32T', 390987, 5313998, 47.97, 7.53944, 200),
('68131', 'Heiwiller', '32T', 373836, 5275895, 47.6242, 7.32083, 310),
('68132', 'Helfrantzkirch', '32T', 380764, 5273649, 47.6053, 7.41361, 380),
('68133', 'Henflingen', '32T', 371314, 5270422, 47.5744, 7.28888, 340),
('68134', 'Herrlisheim-près-Colmar', '32T', 375283, 5319599, 48.0175, 7.3275, 195),
('68135', 'Hésingue', '32T', 388634, 5270158, 47.5753, 7.51917, 272),
('68136', 'Hettenschlag', '32T', 384720, 5317950, 48.0044, 7.45445, 197),
('68137', 'Hindlingen', '32T', 360132, 5270432, 47.5722, 7.14027, 370),
('68138', 'Hirsingue', '32T', 368464, 5271906, 47.5872, 7.25056, 330),
('68139', 'Hirtzbach', '32T', 366467, 5273218, 47.5986, 7.22362, 310),
('68140', 'Hirtzfelden', '32T', 383850, 5307714, 47.9122, 7.44555, 210),
('68141', 'Hochstatt', '32T', 370671, 5284705, 47.7028, 7.27612, 270),
('68142', 'Hohrod', '32T', 360220, 5323992, 48.0539, 7.12417, 490),
('68143', 'Holtzwihr', '32T', 382378, 5330105, 48.1133, 7.41972, 182),
('68144', 'Hombourg', '32T', 388023, 5290491, 47.7581, 7.50583, 225),
('68145', 'Horbourg-Wihr', '32T', 380502, 5326406, 48.0797, 7.39556, 187),
('68146', 'Houssen', '32T', 379369, 5331557, 48.1258, 7.3789, 185),
('68147', 'Hunawihr', '32T', 374475, 5337562, 48.1789, 7.31139, 285),
('68148', 'Hundsbach', '32T', 374643, 5273592, 47.6036, 7.33222, 320),
('68149', 'Huningue', '32T', 393435, 5272168, 47.5942, 7.5825, 248),
('68150', 'Husseren-les-Châteaux', '32T', 371803, 5321529, 48.0342, 7.28027, 370),
('68151', 'Husseren-Wesserling', '32T', 350359, 5305582, 47.8861, 6.99833, 450),
('68152', 'Illfurth', '32T', 369808, 5281543, 47.6742, 7.26556, 263),
('68153', 'Illhaeusern', '32T', 383695, 5337892, 48.1836, 7.43528, 176),
('68154', 'Illzach', '32T', 376104, 5293111, 47.7794, 7.34611, 230),
('68155', 'Ingersheim', '32T', 373915, 5328061, 48.0933, 7.30667, 210),
('68156', 'Issenheim', '32T', 369631, 5306998, 47.9031, 7.25556, 245),
('68157', 'Jebsheim', '32T', 386764, 5331190, 48.1239, 7.47833, 182),
('68158', 'Jettingen', '32T', 377302, 5272887, 47.5978, 7.36778, 350),
('68159', 'Jungholtz', '32T', 365058, 5305095, 47.885, 7.195, 322),
('68160', 'Kappelen', '32T', 382506, 5275096, 47.6186, 7.43639, 320),
('68161', 'Katzenthal', '32T', 372192, 5329674, 48.1075, 7.28306, 280),
('68162', 'Kaysersberg', '32T', 370803, 5333196, 48.1389, 7.26334, 250),
('68163', 'Kembs', '32T', 387662, 5282592, 47.6869, 7.50306, 242),
('68164', 'Kientzheim', '32T', 372614, 5332846, 48.1361, 7.28777, 221),
('68165', 'Kiffis', '32T', 376267, 5255552, 47.4417, 7.35889, 565),
('68166', 'Kingersheim', '32T', 375251, 5294118, 47.7883, 7.33444, 230),
('68167', 'Kirchberg', '32T', 347215, 5295871, 47.7981, 6.95973, 450),
('68171', 'Kruth', '32T', 348038, 5310554, 47.9303, 6.96555, 500),
('68172', 'Kunheim', '32T', 390863, 5326014, 48.0781, 7.53472, 187),
('68173', 'Labaroche', '32T', 366639, 5330171, 48.1108, 7.20834, 533),
('68174', 'Landser', '32T', 378963, 5282457, 47.6842, 7.38722, 260),
('68175', 'Lapoutroie', '32T', 363749, 5334811, 48.1519, 7.16805, 422),
('68176', 'Largitzen', '32T', 363723, 5269328, 47.5631, 7.18834, 386),
('68177', 'Lautenbach', '32T', 362592, 5311455, 47.9417, 7.16, 400),
('68178', 'Lautenbachzell', '32T', 361573, 5311356, 47.9406, 7.14639, 427),
('68179', 'Lauw', '32T', 351406, 5291314, 47.7581, 7.01722, 380),
('68180', 'Leimbach', '32T', 357872, 5295044, 47.7931, 7.10223, 360),
('68181', 'Levoncourt', '32T', 364727, 5256703, 47.4497, 7.20555, 470),
('68182', 'Leymen', '32T', 385705, 5261414, 47.4961, 7.48251, 350),
('68183', 'Liebenswiller', '32T', 383577, 5261764, 47.4989, 7.45417, 363),
('68184', 'Liebsdorf', '32T', 366711, 5260086, 47.4806, 7.23084, 480),
('68185', 'Lièpvre', '32T', 372493, 5347768, 48.2703, 7.28166, 270),
('68186', 'Ligsdorf', '32T', 372364, 5259126, 47.4731, 7.30611, 494),
('68187', 'Linsdorf', '32T', 379303, 5262592, 47.5056, 7.39722, 395),
('68188', 'Linthal', '32T', 359949, 5312878, 47.9539, 7.12416, 497),
('68189', 'Logelheim', '32T', 381109, 5319722, 48.0197, 7.40556, 195),
('68190', 'Lucelle', '32T', 367801, 5253668, 47.4231, 7.24722, 610),
('68191', 'Luemschwiller', '32T', 371577, 5279497, 47.6561, 7.28972, 310),
('68192', 'Valdieu-Lutran', '32T', 353969, 5276390, 47.6244, 7.05639, 352),
('68193', 'Luttenbach-près-Munster', '32T', 359552, 5321259, 48.0292, 7.11611, 400),
('68194', 'Lutter', '32T', 377918, 5258359, 47.4672, 7.38, 440),
('68195', 'Lutterbach', '32T', 371471, 5290741, 47.7572, 7.28499, 260),
('68196', 'Magny', '32T', 353867, 5273984, 47.6028, 7.05584, 360),
('68197', 'Magstatt-le-Bas', '32T', 380548, 5277391, 47.6389, 7.40972, 327),
('68198', 'Magstatt-le-Haut', '32T', 379451, 5276826, 47.6336, 7.39527, 330),
('68199', 'Malmerspach', '32T', 353041, 5303196, 47.8653, 7.03499, 402),
('68200', 'Manspach', '32T', 357572, 5275992, 47.6217, 7.10445, 314),
('68201', 'Masevaux', '32T', 350019, 5293264, 47.7753, 6.99805, 401),
('68202', 'Mertzen', '32T', 359535, 5272516, 47.5908, 7.13167, 360),
('68203', 'Merxheim', '32T', 372536, 5307829, 47.9111, 7.29417, 222),
('68204', 'Metzeral', '32T', 355981, 5319309, 48.0108, 7.06889, 480),
('68205', 'Meyenheim', '32T', 377150, 5308038, 47.9139, 7.35583, 213),
('68206', 'Michelbach', '32T', 358784, 5291500, 47.7614, 7.11555, 341),
('68207', 'Michelbach-le-Bas', '32T', 384580, 5272306, 47.5939, 7.46472, 295),
('68208', 'Michelbach-le-Haut', '32T', 382954, 5269343, 47.5669, 7.44389, 355),
('68209', 'Mittelwihr', '32T', 375315, 5334393, 48.1506, 7.32361, 225),
('68210', 'Mittlach', '32T', 353181, 5318422, 48.0022, 7.03167, 540),
('68211', 'Mitzach', '32T', 350920, 5303961, 47.8717, 7.00639, 430),
('68213', 'Mollau', '32T', 348491, 5304055, 47.8719, 6.97389, 476),
('68214', 'Montreux-Jeune', '32T', 352266, 5275136, 47.6128, 7.03416, 362),
('68215', 'Montreux-Vieux', '32T', 351412, 5276053, 47.6208, 7.02249, 350),
('68216', 'Mooslargue', '32T', 365865, 5263379, 47.51, 7.21861, 435),
('68217', 'Moosch', '32T', 354233, 5302641, 47.8606, 7.05111, 390),
('68218', 'Morschwiller-le-Bas', '32T', 370089, 5288548, 47.7372, 7.26722, 270),
('68219', 'Mortzwiller', '32T', 352900, 5289422, 47.7414, 7.03778, 369),
('68221', 'Muespach', '32T', 377542, 5267416, 47.5486, 7.3725, 400),
('68222', 'Muespach-le-Haut', '32T', 379731, 5267092, 47.5461, 7.40167, 450),
('68223', 'Muhlbach-sur-Munster', '32T', 356973, 5320859, 48.025, 7.08167, 460),
('68224', 'Mulhouse', '32T', 375030, 5289644, 47.7481, 7.33278, 255),
('68225', 'Munchhouse', '32T', 384126, 5302828, 47.8683, 7.45056, 220),
('68226', 'Munster', '32T', 361090, 5322303, 48.0389, 7.13639, 370),
('68227', 'Muntzenheim', '32T', 386424, 5328664, 48.1011, 7.47444, 189),
('68228', 'Munwiller', '32T', 376315, 5309755, 47.9292, 7.34417, 207),
('68229', 'Murbach', '32T', 362398, 5309421, 47.9233, 7.15805, 430),
('68230', 'Nambsheim', '32T', 392736, 5309920, 47.9336, 7.56388, 203),
('68231', 'Neuf-Brisach', '32T', 390259, 5319293, 48.0175, 7.52834, 195),
('68232', 'Neuwiller', '32T', 388192, 5264546, 47.5247, 7.51472, 360),
('68233', 'Niederbruck', '32T', 347881, 5294309, 47.7842, 6.96916, 430),
('68234', 'Niederentzen', '32T', 379200, 5311701, 47.9472, 7.38223, 204),
('68235', 'Niederhergheim', '32T', 380409, 5315968, 47.9858, 7.39722, 200),
('68237', 'Niedermorschwihr', '32T', 371530, 5328731, 48.0989, 7.27445, 310),
('68238', 'Niffer', '32T', 388260, 5285483, 47.7131, 7.51028, 231),
('68239', 'Oberbruck', '32T', 346042, 5297169, 47.8094, 6.94361, 460),
('68240', 'Oberdorf', '32T', 372704, 5268971, 47.5617, 7.30778, 340),
('68241', 'Oberentzen', '32T', 378793, 5311122, 47.9419, 7.37694, 204),
('68242', 'Oberhergheim', '32T', 380285, 5313995, 47.9681, 7.39611, 204),
('68243', 'Oberlarg', '32T', 366823, 5257643, 47.4586, 7.23306, 490),
('68244', 'Obermorschwihr', '32T', 372820, 5319714, 48.0181, 7.29445, 260),
('68245', 'Obermorschwiller', '32T', 373096, 5278351, 47.6461, 7.31027, 310),
('68246', 'Obersaasheim', '32T', 392148, 5316169, 47.9897, 7.55445, 199),
('68247', 'Oderen', '32T', 348787, 5308217, 47.9094, 6.97639, 460),
('68248', 'Oltingue', '32T', 378937, 5261086, 47.4919, 7.39277, 400),
('68249', 'Orbey', '32T', 363100, 5331861, 48.1253, 7.16028, 500),
('68250', 'Orschwihr', '32T', 368051, 5310586, 47.935, 7.23333, 260),
('68251', 'Osenbach', '32T', 367272, 5316380, 47.9869, 7.22112, 440),
('68252', 'Ostheim', '32T', 378848, 5335275, 48.1592, 7.37084, 185),
('68253', 'Ottmarsheim', '32T', 388147, 5293669, 47.7867, 7.50667, 225),
('68254', 'Petit-Landau', '32T', 389193, 5287411, 47.7306, 7.52222, 228),
('68255', 'Pfaffenheim', '32T', 372177, 5315991, 47.9844, 7.28694, 230),
('68256', 'Pfastatt', '32T', 372728, 5292011, 47.7689, 7.30139, 250),
('68257', 'Pfetterhouse', '32T', 361909, 5262483, 47.5011, 7.16638, 460),
('68258', 'Pulversheim', '32T', 372753, 5299763, 47.8386, 7.29945, 230),
('68259', 'Raedersdorf', '32T', 376847, 5259246, 47.475, 7.36555, 440),
('68260', 'Raedersheim', '32T', 371587, 5305317, 47.8883, 7.28222, 226),
('68261', 'Rammersmatt', '32T', 355430, 5294795, 47.7903, 7.06972, 480),
('68262', 'Ranspach', '32T', 351232, 5305590, 47.8864, 7.01, 450),
('68263', 'Ranspach-le-Bas', '32T', 383189, 5271685, 47.5881, 7.44639, 330),
('68264', 'Ranspach-le-Haut', '32T', 381204, 5270614, 47.5781, 7.42028, 390),
('68265', 'Rantzwiller', '32T', 378074, 5278863, 47.6517, 7.37638, 300),
('68266', 'Réguisheim', '32T', 377338, 5306119, 47.8967, 7.35889, 213),
('68267', 'Reiningue', '32T', 367638, 5289778, 47.7478, 7.23417, 265),
('68268', 'Retzwiller', '32T', 356826, 5277092, 47.6314, 7.09417, 313),
('68269', 'Ribeauvillé', '32T', 375312, 5338964, 48.1917, 7.32223, 242),
('68270', 'Richwiller', '32T', 371358, 5293153, 47.7789, 7.28277, 245),
('68271', 'Riedisheim', '32T', 377484, 5289437, 47.7467, 7.36556, 260),
('68272', 'Riedwihr', '32T', 384267, 5331456, 48.1258, 7.44472, 182),
('68273', 'Riespach', '32T', 371111, 5266905, 47.5428, 7.28722, 400),
('68274', 'Rimbach-près-Guebwiller', '32T', 362141, 5307327, 47.9044, 7.15528, 550),
('68275', 'Rimbach-près-Masevaux', '32T', 346659, 5299253, 47.8283, 6.95111, 579),
('68276', 'Rimbachzell', '32T', 363604, 5306859, 47.9006, 7.175, 500),
('68277', 'Riquewihr', '32T', 373347, 5336043, 48.165, 7.29667, 300),
('68278', 'Rixheim', '32T', 380167, 5289258, 47.7456, 7.40139, 240),
('68279', 'Roderen', '32T', 356844, 5293895, 47.7825, 7.08889, 370),
('68280', 'Rodern', '32T', 377680, 5342527, 48.2242, 7.35305, 250),
('68281', 'Roggenhouse', '32T', 385709, 5305113, 47.8892, 7.47111, 215),
('68282', 'Romagny', '32T', 354643, 5274953, 47.6117, 7.06583, 369),
('68283', 'Rombach-le-Franc', '32T', 371146, 5349281, 48.2836, 7.26306, 320),
('68284', 'Roppentzwiller', '32T', 374560, 5266830, 47.5428, 7.33305, 370),
('68285', 'Rorschwihr', '32T', 378363, 5341648, 48.2164, 7.36249, 234),
('68286', 'Rosenau', '32T', 389916, 5277206, 47.6389, 7.53444, 241),
('68287', 'Rouffach', '32T', 372780, 5313260, 47.96, 7.29583, 210),
('68288', 'Ruederbach', '32T', 369808, 5269405, 47.565, 7.26917, 380),
('68289', 'Ruelisheim', '32T', 377098, 5297754, 47.8214, 7.35806, 222),
('68290', 'Rustenhart', '32T', 385014, 5310871, 47.9408, 7.46028, 207),
('68291', 'Rumersheim-le-Haut', '32T', 389472, 5300932, 47.8522, 7.5225, 215),
('68292', 'Saint-Amarin', '32T', 352719, 5304409, 47.8761, 7.03028, 410),
('68293', 'Saint-Cosme', '32T', 354595, 5283047, 47.6844, 7.06251, 362),
('68294', 'Sainte-Croix-aux-Mines', '32T', 368375, 5347152, 48.2639, 7.22639, 315),
('68295', 'Sainte-Croix-en-Plaine', '32T', 379466, 5318490, 48.0083, 7.38388, 196),
('68296', 'Saint-Hippolyte', '32T', 378855, 5343398, 48.2322, 7.36862, 240),
('68297', 'Saint-Louis', '32T', 390030, 5274393, 47.6136, 7.53666, 250),
('68298', 'Sainte-Marie-aux-Mines', '32T', 364984, 5345069, 48.2444, 7.18138, 330),
('68299', 'Saint-Ulrich', '32T', 358671, 5273093, 47.5958, 7.12, 350),
('68300', 'Sausheim', '32T', 377827, 5293878, 47.7867, 7.36889, 228),
('68301', 'Schlierbach', '32T', 380503, 5282271, 47.6828, 7.40778, 270),
('68302', 'Schweighouse-Thann', '32T', 362862, 5290413, 47.7525, 7.17028, 287),
('68303', 'Schwoben', '32T', 372502, 5275029, 47.6161, 7.30333, 310),
('68304', 'Sentheim', '32T', 353983, 5291063, 47.7564, 7.05167, 360),
('68305', 'Seppois-le-Bas', '32T', 362755, 5266416, 47.5367, 7.17639, 380),
('68306', 'Seppois-le-Haut', '32T', 363352, 5266001, 47.5331, 7.18444, 390),
('68307', 'Sewen', '32T', 343125, 5297031, 47.8075, 6.90473, 500),
('68308', 'Sickert', '32T', 348776, 5294285, 47.7842, 6.98111, 430),
('68309', 'Sierentz', '32T', 383923, 5279144, 47.6553, 7.45417, 255),
('68310', 'Sigolsheim', '32T', 373809, 5332635, 48.1344, 7.30389, 215),
('68311', 'Sondernach', '32T', 356277, 5317880, 47.9981, 7.07334, 540),
('68312', 'Sondersdorf', '32T', 374629, 5260282, 47.4839, 7.33583, 514),
('68313', 'Soppe-le-Bas', '32T', 356602, 5286611, 47.7169, 7.08806, 310),
('68314', 'Soppe-le-Haut', '32T', 354645, 5288389, 47.7325, 7.06139, 335),
('68315', 'Soultz-Haut-Rhin', '32T', 367738, 5305064, 47.8853, 7.23083, 270),
('68316', 'Soultzbach-les-Bains', '32T', 366095, 5321937, 48.0367, 7.20361, 330),
('68317', 'Soultzeren', '32T', 358813, 5324892, 48.0617, 7.105, 550),
('68318', 'Soultzmatt', '32T', 368532, 5313478, 47.9611, 7.23888, 260),
('68319', 'Spechbach-le-Bas', '32T', 366840, 5281302, 47.6714, 7.22612, 280),
('68320', 'Spechbach-le-Haut', '32T', 366240, 5282427, 47.6814, 7.21778, 280),
('68321', 'Staffelfelden', '32T', 369108, 5298578, 47.8272, 7.25111, 255),
('68322', 'Steinbach', '32T', 361776, 5298161, 47.8219, 7.15333, 350),
('68323', 'Steinbrunn-le-Bas', '32T', 377404, 5281718, 47.6772, 7.36666, 275),
('68324', 'Steinbrunn-le-Haut', '32T', 375972, 5280111, 47.6625, 7.34805, 285),
('68325', 'Steinsoultz', '32T', 374925, 5268243, 47.5556, 7.3375, 400),
('68326', 'Sternenberg', '32T', 357047, 5284376, 47.6969, 7.09472, 328),
('68327', 'Stetten', '32T', 381832, 5275851, 47.6253, 7.42722, 340),
('68328', 'Storckensohn', '32T', 347302, 5304673, 47.8772, 6.95778, 490),
('68329', 'Stosswihr', '32T', 359111, 5323525, 48.0494, 7.10945, 430),
('68330', 'Strueth', '32T', 358868, 5271729, 47.5836, 7.12306, 360),
('68331', 'Sundhoffen', '32T', 381718, 5322150, 48.0417, 7.41306, 193),
('68332', 'Tagolsheim', '32T', 369996, 5279717, 47.6578, 7.26861, 275),
('68333', 'Tagsdorf', '32T', 372433, 5275679, 47.6219, 7.30223, 300),
('68334', 'Thann', '32T', 358102, 5296798, 47.8089, 7.10472, 329),
('68335', 'Thannenkirch', '32T', 373999, 5343132, 48.2289, 7.30333, 500),
('68336', 'Traubach-le-Bas', '32T', 357213, 5280109, 47.6586, 7.09833, 300),
('68337', 'Traubach-le-Haut', '32T', 356807, 5281416, 47.6703, 7.0925, 305),
('68338', 'Turckheim', '32T', 371782, 5327089, 48.0842, 7.27833, 236),
('68340', 'Ueberstrass', '32T', 361396, 5268209, 47.5525, 7.15777, 380),
('68341', 'Uffheim', '32T', 382993, 5278576, 47.65, 7.44194, 275),
('68342', 'Uffholtz', '32T', 363624, 5298025, 47.8211, 7.17805, 310),
('68343', 'Ungersheim', '32T', 373286, 5304137, 47.8781, 7.30528, 217),
('68344', 'Urbès', '32T', 347216, 5305355, 47.8833, 6.95639, 450),
('68345', 'Urschenheim', '32T', 387296, 5326701, 48.0836, 7.48667, 187),
('68347', 'Vieux-Ferrette', '32T', 371891, 5262379, 47.5022, 7.2989, 473),
('68348', 'Vieux-Thann', '32T', 359385, 5296520, 47.8067, 7.12194, 328),
('68349', 'Village-Neuf', '32T', 392688, 5273541, 47.6064, 7.57223, 244),
('68351', 'Vogelgrun', '32T', 393454, 5318430, 48.0103, 7.57138, 193),
('68352', 'Volgelsheim', '32T', 392159, 5318979, 48.015, 7.55389, 191),
('68353', 'Wahlbach', '32T', 375751, 5276595, 47.6308, 7.34611, 323),
('68354', 'Walbach', '32T', 367486, 5324777, 48.0625, 7.22139, 321),
('68355', 'Waldighofen', '32T', 373393, 5267967, 47.5528, 7.31722, 350),
('68356', 'Walheim', '32T', 369709, 5278086, 47.6431, 7.26528, 270),
('68357', 'Waltenheim', '32T', 381673, 5279313, 47.6564, 7.42417, 280),
('68358', 'Wasserbourg', '32T', 362709, 5318094, 48.0014, 7.15944, 506),
('68359', 'Wattwiller', '32T', 363666, 5299785, 47.8369, 7.17806, 350),
('68360', 'Weckolsheim', '32T', 389025, 5317649, 48.0025, 7.51222, 197),
('68361', 'Wegscheid', '32T', 346936, 5296373, 47.8025, 6.95583, 460),
('68362', 'Wentzwiller', '32T', 385549, 5267377, 47.5497, 7.47889, 344),
('68363', 'Werentzhouse', '32T', 376317, 5263859, 47.5164, 7.35723, 376),
('68364', 'Westhalten', '32T', 370141, 5313041, 47.9575, 7.26056, 240),
('68365', 'Wettolsheim', '32T', 373166, 5324124, 48.0578, 7.29778, 213),
('68366', 'Wickerschwihr', '32T', 383503, 5329464, 48.1078, 7.435, 183),
('68367', 'Widensolen', '32T', 386775, 5324395, 48.0628, 7.48028, 188),
('68368', 'Wihr-au-Val', '32T', 366155, 5323634, 48.0519, 7.20389, 330),
('68370', 'Wildenstein', '32T', 347902, 5315624, 47.9758, 6.96194, 580),
('68371', 'Willer', '32T', 373619, 5271668, 47.5861, 7.31916, 400),
('68372', 'Willer-sur-Thur', '32T', 355705, 5300812, 47.8444, 7.07139, 370),
('68373', 'Winkel', '32T', 369089, 5257808, 47.4606, 7.26306, 574),
('68374', 'Wintzenheim', '32T', 372723, 5325647, 48.0714, 7.29139, 227),
('68375', 'Wittelsheim', '32T', 367612, 5295924, 47.8031, 7.23195, 265),
('68376', 'Wittenheim', '32T', 375547, 5296243, 47.8075, 7.33778, 230),
('68377', 'Wittersdorf', '32T', 370261, 5275696, 47.6217, 7.27333, 290),
('68378', 'Wolfersdorf', '32T', 358226, 5277984, 47.6397, 7.1125, 300),
('68379', 'Wolfgantzen', '32T', 388292, 5320443, 48.0275, 7.50167, 194),
('68380', 'Wolschwiller', '32T', 380041, 5257759, 47.4622, 7.40833, 450),
('68381', 'Wuenheim', '32T', 366279, 5303986, 47.8753, 7.21166, 310),
('68382', 'Zaessingue', '32T', 377281, 5275852, 47.6244, 7.36667, 350),
('68383', 'Zellenberg', '32T', 375025, 5336252, 48.1672, 7.31917, 290),
('68384', 'Zillisheim', '32T', 371969, 5284028, 47.6969, 7.29361, 270),
('68385', 'Zimmerbach', '32T', 368571, 5326019, 48.0739, 7.23556, 291),
('68386', 'Zimmersheim', '32T', 379131, 5286500, 47.7206, 7.38834, 270),
('69001', 'Affoux', '31T', 609117, 5077786, 45.845, 4.40528, 400),
('69002', 'Aigueperse', '31T', 610555, 5126035, 46.2789, 4.435, 450),
('69003', 'Albigny-sur-Saône', '31T', 642063, 5080832, 45.8664, 4.83028, 170),
('69004', 'Alix', '31T', 628307, 5085749, 45.9133, 4.65445, 280),
('69005', 'Ambérieux', '31T', 634544, 5087333, 45.9264, 4.73528, 170),
('69006', 'Amplepuis', '31T', 603164, 5091916, 45.9731, 4.33167, 420),
('69007', 'Ampuis', '31T', 641348, 5038946, 45.4897, 4.80889, 150),
('69008', 'Ancy', '31T', 617132, 5077223, 45.8386, 4.50833, 500),
('69009', 'Anse', '31T', 633273, 5088324, 45.9356, 4.71917, 187),
('69010', 'L''Arbresle', '31T', 625573, 5077079, 45.8358, 4.61694, 240),
('69012', 'Les Ardillats', '31T', 618878, 5115262, 46.1806, 4.54028, 440),
('69013', 'Arnas', '31T', 632088, 5098396, 46.0264, 4.70667, 185),
('69014', 'Aveize', '31T', 615013, 5059956, 45.6836, 4.47694, 190),
('69015', 'Avenas', '31T', 623690, 5116994, 46.1953, 4.60305, 680),
('69016', 'Azolette', '31T', 609398, 5116505, 46.1933, 4.41777, 580),
('69017', 'Bagnols', '31T', 624637, 5086075, 45.9169, 4.60723, 400),
('69018', 'Beaujeu', '31T', 622902, 5112470, 46.1547, 4.59167, 300),
('69019', 'Belleville', '31T', 635022, 5107753, 46.11, 4.74722, 173),
('69020', 'Belmont-d''Azergues', '31T', 629598, 5080713, 45.8678, 4.66973, 320),
('69021', 'Bessenay', '31T', 620717, 5070437, 45.7769, 4.55278, 413),
('69022', 'Bibost', '31T', 620110, 5072803, 45.7983, 4.54556, 440),
('69023', 'Blacé', '31T', 627276, 5099128, 46.0339, 4.64472, 300),
('69024', 'Le Bois-d''Oingt', '31T', 622969, 5086505, 45.9211, 4.58584, 355),
('69025', 'Bourg-de-Thizy', '31T', 600447, 5098817, 46.0356, 4.29806, 389),
('69026', 'Le Breuil', '31T', 623114, 5083513, 45.8942, 4.58694, 240),
('69027', 'Brignais', '31T', 636795, 5059439, 45.675, 4.75639, 206),
('69028', 'Brindas', '31T', 631839, 5064519, 45.7217, 4.69417, 325),
('69029', 'Bron', '31T', 648561, 5066193, 45.7333, 4.90945, 200),
('69030', 'Brullioles', '31T', 616447, 5068905, 45.7639, 4.4975, 540),
('69031', 'Brussieu', '31T', 618427, 5067059, 45.7469, 4.5225, 440),
('69032', 'Bully', '31T', 622928, 5078786, 45.8517, 4.58333, 340),
('69033', 'Cailloux-sur-Fontaines', '31T', 645547, 5079430, 45.8531, 4.87472, 232),
('69034', 'Caluire-et-Cuire', '31T', 643856, 5073277, 45.7981, 4.85111, 250),
('69035', 'Cenves', '31T', 627077, 5125276, 46.2692, 4.64916, 600),
('69036', 'Cercié', '31T', 629072, 5108830, 46.1208, 4.67055, 230),
('69037', 'Chambost-Allières', '31T', 615931, 5097514, 46.0214, 4.49777, 342),
('69038', 'Chambost-Longessaigne', '31T', 606317, 5069958, 45.775, 4.3675, 560),
('69039', 'Chamelet', '31T', 617062, 5093461, 45.9847, 4.51139, 312),
('69040', 'Champagne-au-Mont-d''Or', '31T', 639261, 5073017, 45.7967, 4.79194, 283),
('69041', 'La Chapelle-de-Mardore', '31T', 604670, 5100801, 46.0528, 4.35305, 540),
('69042', 'La Chapelle-sur-Coise', '31T', 616826, 5056749, 45.6544, 4.49945, 770),
('69043', 'Chaponost', '31T', 635799, 5063400, 45.7108, 4.74472, 320),
('69044', 'Charbonnières-les-Bains', '31T', 635106, 5071444, 45.7833, 4.73806, 250),
('69045', 'Charentay', '31T', 629682, 5105384, 46.0897, 4.6775, 210),
('69046', 'Charly', '31T', 639961, 5056267, 45.6458, 4.79611, 260),
('69047', 'Charnay', '31T', 629370, 5083332, 45.8914, 4.6675, 420),
('69048', 'Chassagny', '31T', 635119, 5051869, 45.6072, 4.73278, 310),
('69049', 'Chasselay', '31T', 637514, 5081655, 45.8747, 4.77194, 235),
('69050', 'Châtillon', '31T', 627678, 5081753, 45.8775, 4.64528, 220),
('69051', 'Chaussan', '31T', 627801, 5054741, 45.6344, 4.63973, 470),
('69052', 'Chazay-d''Azergues', '31T', 632981, 5081834, 45.8772, 4.7136, 221),
('69053', 'Chénas', '31T', 632672, 5119096, 46.2125, 4.72, 270),
('69054', 'Chénelette', '31T', 615063, 5113985, 46.1697, 4.49055, 660),
('69055', 'Les Chères', '31T', 635238, 5083180, 45.8889, 4.74305, 190),
('69056', 'Chessy', '31T', 626059, 5082893, 45.8881, 4.62472, 226),
('69057', 'Chevinay', '31T', 624919, 5069903, 45.7714, 4.60667, 468),
('69058', 'Chiroubles', '31T', 628503, 5115487, 46.1808, 4.66499, 400),
('69059', 'Civrieux-d''Azergues', '31T', 633024, 5079859, 45.8594, 4.71361, 195),
('69060', 'Claveisolles', '31T', 615290, 5106487, 46.1022, 4.49167, 460),
('69061', 'Cogny', '31T', 625855, 5093942, 45.9875, 4.625, 340),
('69062', 'Coise', '31T', 614937, 5052330, 45.615, 4.47417, 640),
('69063', 'Collonges-au-Mont-d''Or', '31T', 642992, 5076098, 45.8236, 4.84084, 220),
('69064', 'Condrieu', '31T', 637978, 5036154, 45.4653, 4.765, 147),
('69065', 'Corcelles-en-Beaujolais', '31T', 632938, 5112741, 46.1553, 4.72166, 215),
('69066', 'Cours-la-Ville', '31T', 602196, 5106132, 46.1011, 4.32223, 537),
('69067', 'Courzieu', '31T', 622263, 5066547, 45.7417, 4.57167, 380),
('69068', 'Couzon-au-Mont-d''Or', '31T', 642093, 5078547, 45.8458, 4.82999, 180),
('69069', 'Craponne', '31T', 633941, 5067343, 45.7467, 4.72195, 283),
('69070', 'Cublize', '31T', 606602, 5097223, 46.0203, 4.37722, 460),
('69071', 'Curis-au-Mont-d''Or', '31T', 641162, 5081552, 45.8731, 4.81889, 230),
('69072', 'Dardilly', '31T', 636216, 5074000, 45.8061, 4.75306, 320),
('69073', 'Dareizé', '31T', 615704, 5084389, 45.9033, 4.49167, 441),
('69074', 'Denicé', '31T', 627387, 5095857, 46.0044, 4.64528, 280),
('69075', 'Dième', '31T', 613583, 5090741, 45.9608, 4.46584, 551),
('69076', 'Dommartin', '31T', 633193, 5077022, 45.8339, 4.715, 290),
('69077', 'Dracé', '31T', 636300, 5113093, 46.1578, 4.76528, 175),
('69078', 'Duerne', '31T', 618947, 5060185, 45.685, 4.5275, 790),
('69080', 'Échalas', '31T', 633883, 5045822, 45.5531, 4.71528, 360),
('69081', 'Écully', '31T', 638320, 5070681, 45.7758, 4.77917, 241),
('69082', 'Émeringes', '31T', 628939, 5120282, 46.2239, 4.67195, 360),
('69083', 'Éveux', '31T', 625915, 5076160, 45.8275, 4.62111, 300),
('69084', 'Fleurie', '31T', 630918, 5116897, 46.1931, 4.69666, 300),
('69085', 'Fleurieu-sur-Saône', '31T', 643234, 5080549, 45.8636, 4.84528, 180),
('69086', 'Fleurieux-sur-l''Arbresle', '31T', 628268, 5077196, 45.8364, 4.65166, 340),
('69087', 'Fontaines-Saint-Martin', '31T', 643974, 5078436, 45.8444, 4.85417, 210),
('69088', 'Fontaines-sur-Saône', '31T', 643589, 5077315, 45.8344, 4.84888, 170),
('69089', 'Francheville', '31T', 637721, 5066499, 45.7383, 4.77028, 246),
('69090', 'Frontenas', '31T', 625522, 5087051, 45.9256, 4.61889, 379),
('69091', 'Givors', '31T', 638038, 5050204, 45.5917, 4.76973, 151),
('69092', 'Gleizé', '31T', 631596, 5094216, 45.9889, 4.69917, 230),
('69093', 'Grandris', '31T', 614088, 5099487, 46.0394, 4.47444, 470),
('69094', 'Grézieu-la-Varenne', '31T', 631474, 5067445, 45.7481, 4.69027, 332),
('69095', 'Grézieu-le-Marché', '31T', 610673, 5056976, 45.6575, 4.42055, 665),
('69096', 'Grigny', '31T', 639832, 5052343, 45.6106, 4.79333, 160),
('69097', 'Les Haies', '31T', 636560, 5040445, 45.5042, 4.74806, 370),
('69098', 'Les Halles', '31T', 611393, 5063935, 45.72, 4.43139, 600),
('69099', 'Haute-Rivoire', '31T', 608634, 5063454, 45.7161, 4.39584, 600),
('69100', 'Irigny', '31T', 641876, 5059676, 45.6761, 4.82167, 230),
('69101', 'Jarnioux', '31T', 626187, 5091386, 45.9644, 4.62861, 300),
('69102', 'Joux', '31T', 606449, 5082401, 45.8869, 4.37195, 500),
('69103', 'Juliénas', '31T', 631847, 5121548, 46.2347, 4.70999, 270),
('69104', 'Jullié', '31T', 629280, 5122358, 46.2425, 4.67694, 375),
('69105', 'Lacenas', '31T', 627458, 5094500, 45.9922, 4.64583, 300),
('69106', 'Lachassagne', '31T', 631161, 5087353, 45.9272, 4.69167, 320),
('69107', 'Lamure-sur-Azergues', '31T', 615324, 5102381, 46.0653, 4.49111, 390),
('69108', 'Lancié', '31T', 632301, 5114456, 46.1708, 4.71389, 230),
('69109', 'Lantignié', '31T', 625385, 5111686, 46.1472, 4.6236, 320),
('69110', 'Larajasse', '31T', 616973, 5052368, 45.615, 4.50028, 690),
('69111', 'Légny', '31T', 622822, 5085205, 45.9094, 4.58361, 316),
('69112', 'Lentilly', '31T', 629019, 5075328, 45.8194, 4.66083, 320),
('69113', 'Létra', '31T', 618122, 5090949, 45.9619, 4.52445, 360),
('69114', 'Liergues', '31T', 628889, 5091936, 45.9689, 4.66361, 249),
('69115', 'Limas', '31T', 632319, 5092627, 45.9744, 4.70806, 230),
('69116', 'Limonest', '31T', 637564, 5077457, 45.8369, 4.77138, 410),
('69117', 'Lissieu', '31T', 635208, 5080616, 45.8658, 4.74195, 230),
('69118', 'Loire-sur-Rhône', '31T', 640890, 5046748, 45.56, 4.80527, 160);
INSERT INTO `ods_communes` (`oc_code_insee`, `oc_nom`, `oc_secteur`, `oc_x_utm`, `oc_y_utm`, `oc_latitude`, `oc_longitude`, `oc_altitude`) VALUES
('69119', 'Longes', '31T', 632002, 5040379, 45.5044, 4.68972, 460),
('69120', 'Longessaigne', '31T', 610730, 5072011, 45.7928, 4.42472, 697),
('69121', 'Lozanne', '31T', 630543, 5079837, 45.8597, 4.68166, 210),
('69122', 'Lucenay', '31T', 632013, 5085765, 45.9128, 4.70222, 220),
('69123', 'Lyon', '31T', 642687, 5068997, 45.7598, 4.83482, 166),
('69124', 'Marchampt', '31T', 621365, 5107746, 46.1125, 4.57056, 360),
('69125', 'Marcilly-d''Azergues', '31T', 634183, 5081119, 45.8706, 4.72889, 190),
('69126', 'Marcy', '31T', 630308, 5085914, 45.9144, 4.68028, 380),
('69127', 'Marcy-l''Étoile', '31T', 632626, 5071236, 45.7819, 4.70612, 310),
('69128', 'Mardore', '31T', 603496, 5102881, 46.0717, 4.33833, 560),
('69129', 'Marnand', '31T', 602852, 5099011, 46.0369, 4.32917, 640),
('69130', 'Meaux-la-Montagne', '31T', 609927, 5100121, 46.0458, 4.42083, 651),
('69131', 'Messimy', '31T', 630315, 5061925, 45.6986, 4.67389, 360),
('69132', 'Meys', '31T', 608054, 5059461, 45.6803, 4.3875, 550),
('69133', 'Millery', '31T', 638688, 5055096, 45.6356, 4.77945, 280),
('69134', 'Moiré', '31T', 624442, 5087152, 45.9267, 4.60499, 460),
('69135', 'Monsols', '31T', 617188, 5119521, 46.2192, 4.51944, 540),
('69136', 'Montagny', '31T', 636277, 5054395, 45.6297, 4.74833, 330),
('69137', 'Montmelas-Saint-Sorlin', '31T', 624648, 5097222, 46.0172, 4.61027, 501),
('69138', 'Montromant', '31T', 618747, 5062743, 45.7081, 4.52556, 550),
('69139', 'Montrottier', '31T', 614037, 5071886, 45.7911, 4.46722, 660),
('69140', 'Morancé', '31T', 631919, 5084127, 45.8981, 4.70056, 220),
('69141', 'Mornant', '31T', 630519, 5053191, 45.62, 4.67417, 360),
('69142', 'La Mulatière', '31T', 641012, 5065338, 45.7272, 4.81222, 200),
('69143', 'Neuville-sur-Saône', '31T', 642803, 5082393, 45.8803, 4.84027, 180),
('69144', 'Nuelles', '31T', 626128, 5078449, 45.8481, 4.62445, 260),
('69145', 'Odenas', '31T', 627318, 5105428, 46.0906, 4.64695, 320),
('69146', 'Oingt', '31T', 622586, 5089523, 45.9483, 4.58167, 520),
('69147', 'Les Olmes', '31T', 617686, 5082173, 45.8831, 4.51667, 356),
('69148', 'Orliénas', '31T', 633955, 5057618, 45.6592, 4.71944, 300),
('69149', 'Oullins', '31T', 640586, 5064093, 45.7161, 4.80639, 190),
('69150', 'Ouroux', '31T', 622776, 5120896, 46.2306, 4.59223, 460),
('69151', 'Le Perréon', '31T', 623855, 5102454, 46.0644, 4.60139, 300),
('69152', 'Pierre-Bénite', '31T', 642132, 5062677, 45.7031, 4.82583, 170),
('69153', 'Poleymieux-au-Mont-d''Or', '31T', 639866, 5079701, 45.8567, 4.80166, 400),
('69154', 'Pollionnay', '31T', 629118, 5069526, 45.7672, 4.66055, 420),
('69155', 'Pomeys', '31T', 612461, 5056298, 45.6511, 4.44334, 682),
('69156', 'Pommiers', '31T', 631224, 5090472, 45.9553, 4.69334, 320),
('69157', 'Pontcharra-sur-Turdine', '31T', 615591, 5081207, 45.8747, 4.48945, 340),
('69158', 'Pont-Trambouze', '31T', 601434, 5102846, 46.0717, 4.31167, 430),
('69159', 'Pouilly-le-Monial', '31T', 627623, 5090675, 45.9578, 4.64694, 280),
('69160', 'Poule-les-Écharmeaux', '31T', 612553, 5111654, 46.1492, 4.45749, 580),
('69161', 'Propières', '31T', 610857, 5116470, 46.1928, 4.43667, 655),
('69162', 'Quincié-en-Beaujolais', '31T', 624978, 5108498, 46.1186, 4.6175, 320),
('69163', 'Quincieux', '31T', 637955, 5086080, 45.9144, 4.77889, 179),
('69164', 'Ranchal', '31T', 607978, 5109472, 46.1303, 4.39777, 717),
('69165', 'Régnié-Durette', '31T', 626807, 5110388, 46.1353, 4.64166, 320),
('69166', 'Riverie', '31T', 624020, 5050991, 45.6014, 4.59028, 710),
('69167', 'Rivolet', '31T', 623895, 5096157, 46.0078, 4.60027, 325),
('69168', 'Rochetaillée-sur-Saône', '31T', 642516, 5078001, 45.8408, 4.83528, 167),
('69169', 'Ronno', '31T', 607101, 5093249, 45.9844, 4.38277, 542),
('69170', 'Rontalon', '31T', 627177, 5057692, 45.6611, 4.6325, 490),
('69171', 'Sain-Bel', '31T', 624246, 5074366, 45.8117, 4.59916, 245),
('69172', 'Salles-Arbuissonnas-en-Beaujolais', '31T', 626313, 5099942, 46.0414, 4.6325, 300),
('69173', 'Sarcey', '31T', 620988, 5081989, 45.8808, 4.55916, 360),
('69174', 'Les Sauvages', '31T', 606847, 5086792, 45.9264, 4.37805, 734),
('69175', 'Savigny', '31T', 622207, 5074850, 45.8164, 4.57305, 290),
('69176', 'Soucieu-en-Jarrest', '31T', 632674, 5059813, 45.6792, 4.70361, 330),
('69177', 'Sourcieux-les-Mines', '31T', 626093, 5073786, 45.8061, 4.62278, 400),
('69178', 'Souzy', '31T', 612650, 5062599, 45.7078, 4.44722, 520),
('69179', 'Saint-Andéol-le-Château', '31T', 632397, 5049433, 45.5858, 4.69723, 320),
('69180', 'Saint-André-la-Côte', '31T', 624821, 5054279, 45.6308, 4.60139, 850),
('69181', 'Saint-Appolinaire', '31T', 610302, 5092410, 45.9764, 4.42389, 701),
('69182', 'Saint-Bonnet-des-Bruyères', '31T', 613161, 5125219, 46.2711, 4.46861, 510),
('69183', 'Saint-Bonnet-le-Troncy', '31T', 610320, 5104605, 46.0861, 4.42695, 700),
('69184', 'Sainte-Catherine', '31T', 622463, 5050805, 45.6, 4.57028, 691),
('69185', 'Saint-Christophe', '31T', 618809, 5124338, 46.2622, 4.54167, 530),
('69186', 'Saint-Clément-de-Vers', '31T', 608005, 5120124, 46.2261, 4.40055, 560),
('69187', 'Saint-Clément-les-Places', '31T', 610745, 5067566, 45.7528, 4.42389, 640),
('69188', 'Saint-Clément-sur-Valsonne', '31T', 612707, 5086773, 45.9253, 4.4536, 368),
('69189', 'Sainte-Colombe', '31T', 645897, 5043188, 45.5269, 4.86834, 160),
('69190', 'Sainte-Consorce', '31T', 631363, 5070653, 45.7769, 4.68972, 401),
('69191', 'Saint-Cyr-au-Mont-d''Or', '31T', 641357, 5074887, 45.8131, 4.81945, 320),
('69192', 'Saint-Cyr-le-Chatoux', '31T', 620346, 5098309, 46.0278, 4.55499, 694),
('69193', 'Saint-Cyr-sur-le-Rhône', '31T', 644708, 5042018, 45.5167, 4.85277, 200),
('69194', 'Saint-Didier-au-Mont-d''Or', '31T', 639786, 5074666, 45.8114, 4.79917, 340),
('69195', 'Saint-Didier-sous-Riverie', '31T', 625567, 5050589, 45.5975, 4.61001, 510),
('69196', 'Saint-Didier-sur-Beaujeu', '31T', 619125, 5112519, 46.1558, 4.54278, 425),
('69197', 'Saint-Étienne-des-Oullières', '31T', 627347, 5102989, 46.0686, 4.64667, 280),
('69198', 'Saint-Étienne-la-Varenne', '31T', 626036, 5104012, 46.0781, 4.62999, 380),
('69199', 'Saint-Fons', '31T', 644255, 5063498, 45.71, 4.85333, 170),
('69200', 'Saint-Forgeux', '31T', 614694, 5079554, 45.86, 4.4775, 380),
('69201', 'Sainte-Foy-l''Argentière', '31T', 614506, 5062818, 45.7094, 4.47111, 430),
('69202', 'Sainte-Foy-lès-Lyon', '31T', 640361, 5066373, 45.7367, 4.80416, 300),
('69203', 'Saint-Genis-l''Argentière', '31T', 616169, 5062941, 45.7103, 4.4925, 480),
('69204', 'Saint-Genis-Laval', '31T', 639727, 5061881, 45.6964, 4.79472, 230),
('69205', 'Saint-Genis-les-Ollières', '31T', 634261, 5068554, 45.7575, 4.72639, 300),
('69206', 'Saint-Georges-de-Reneins', '31T', 633117, 5102524, 46.0633, 4.72111, 189),
('69207', 'Saint-Germain-au-Mont-d''Or', '31T', 640023, 5082329, 45.8803, 4.80445, 250),
('69208', 'Saint-Germain-sur-l''Arbresle', '31T', 625191, 5078924, 45.8525, 4.61251, 300),
('69209', 'Saint-Igny-de-Vers', '31T', 610760, 5121809, 46.2408, 4.43666, 540),
('69210', 'Saint-Jacques-des-Arrêts', '31T', 623083, 5123743, 46.2561, 4.59695, 480),
('69211', 'Saint-Jean-d''Ardières', '31T', 634334, 5109745, 46.1281, 4.73888, 185),
('69212', 'Saint-Jean-des-Vignes', '31T', 630723, 5081570, 45.8753, 4.68445, 350),
('69213', 'Saint-Jean-de-Touslas', '31T', 629683, 5048574, 45.5786, 4.66222, 340),
('69214', 'Saint-Jean-la-Bussière', '31T', 602568, 5095363, 46.0042, 4.32472, 517),
('69215', 'Saint-Julien', '31T', 627763, 5098490, 46.0281, 4.65084, 260),
('69216', 'Saint-Julien-sur-Bibost', '31T', 618110, 5073475, 45.8047, 4.52, 500),
('69217', 'Saint-Just-d''Avray', '31T', 611989, 5095496, 46.0039, 4.44639, 559),
('69218', 'Saint-Lager', '31T', 629111, 5108027, 46.1136, 4.67084, 240),
('69219', 'Saint-Laurent-d''Agny', '31T', 631399, 5055649, 45.6419, 4.68612, 380),
('69220', 'Saint-Laurent-de-Chamousset', '31T', 613903, 5066233, 45.7403, 4.46417, 640),
('69221', 'Saint-Laurent-de-Vaux', '31T', 627032, 5063740, 45.7156, 4.63222, 430),
('69222', 'Saint-Laurent-d''Oingt', '31T', 621216, 5089095, 45.9447, 4.56389, 400),
('69223', 'Saint-Loup', '31T', 615679, 5083431, 45.8947, 4.49112, 480),
('69224', 'Saint-Mamert', '31T', 621935, 5123288, 46.2522, 4.58194, 420),
('69225', 'Saint-Marcel-l''Éclairé', '31T', 611428, 5081254, 45.8758, 4.43583, 580),
('69227', 'Saint-Martin-en-Haut', '31T', 621488, 5057486, 45.6603, 4.55945, 730),
('69228', 'Saint-Maurice-sur-Dargoire', '31T', 627267, 5049018, 45.5831, 4.63138, 470),
('69229', 'Saint-Nizier-d''Azergues', '31T', 613255, 5105029, 46.0894, 4.465, 526),
('69230', 'Sainte-Paule', '31T', 621311, 5090826, 45.9603, 4.56556, 500),
('69231', 'Saint-Pierre-la-Palud', '31T', 625946, 5071436, 45.785, 4.62027, 386),
('69233', 'Saint-Romain-au-Mont-d''Or', '31T', 641533, 5077577, 45.8372, 4.8225, 250),
('69234', 'Saint-Romain-de-Popey', '31T', 618927, 5078183, 45.8469, 4.53167, 400),
('69235', 'Saint-Romain-en-Gal', '31T', 644966, 5044031, 45.5347, 4.85667, 160),
('69236', 'Saint-Romain-en-Gier', '31T', 633178, 5047350, 45.5669, 4.70667, 190),
('69237', 'Saint-Sorlin', '31T', 627786, 5053320, 45.6217, 4.63916, 500),
('69238', 'Saint-Symphorien-sur-Coise', '31T', 613749, 5054530, 45.635, 4.45945, 597),
('69239', 'Saint-Vérand', '31T', 618428, 5086200, 45.9192, 4.52722, 380),
('69240', 'Saint-Vincent-de-Reins', '31T', 607310, 5103502, 46.0767, 4.38778, 589),
('69241', 'Taluyers', '31T', 634193, 5055616, 45.6411, 4.72194, 330),
('69242', 'Taponas', '31T', 636327, 5108956, 46.1206, 4.76444, 173),
('69243', 'Tarare', '31T', 611389, 5083415, 45.8953, 4.43583, 400),
('69244', 'Tassin-la-Demi-Lune', '31T', 637246, 5069422, 45.7647, 4.76501, 210),
('69245', 'Ternand', '31T', 618505, 5088919, 45.9436, 4.52889, 340),
('69246', 'Theizé', '31T', 625359, 5088714, 45.9406, 4.61723, 457),
('69247', 'Thel', '31T', 606393, 5108055, 46.1178, 4.37694, 710),
('69248', 'Thizy', '31T', 601612, 5098558, 46.0331, 4.31305, 504),
('69249', 'Thurins', '31T', 628518, 5059881, 45.6806, 4.65028, 380),
('69250', 'La Tour-de-Salvagny', '31T', 633431, 5074989, 45.8156, 4.7175, 350),
('69251', 'Trades', '31T', 620338, 5126066, 46.2775, 4.56194, 400),
('69252', 'Trèves', '31T', 630991, 5044093, 45.5381, 4.67778, 340),
('69253', 'Tupin-et-Semons', '31T', 639948, 5038421, 45.4853, 4.79083, 150),
('69254', 'Valsonne', '31T', 610963, 5089149, 45.9469, 4.43167, 462),
('69255', 'Vaugneray', '31T', 628969, 5066312, 45.7383, 4.65778, 414),
('69256', 'Vaulx-en-Velin', '31T', 649628, 5072147, 45.7867, 4.925, 170),
('69257', 'Vaux-en-Beaujolais', '31T', 623094, 5101791, 46.0586, 4.59139, 380),
('69258', 'Vauxrenard', '31T', 626787, 5118631, 46.2094, 4.64361, 500),
('69259', 'Vénissieux', '31T', 646581, 5063027, 45.7053, 4.88306, 194),
('69260', 'Vernaison', '31T', 641122, 5056664, 45.6492, 4.81111, 170),
('69261', 'Vernay', '31T', 617940, 5112743, 46.1581, 4.5275, 700),
('69263', 'Villechenève', '31T', 609373, 5074271, 45.8133, 4.40778, 720),
('69264', 'Villefranche-sur-Saône', '31T', 633511, 5094258, 45.9889, 4.72389, 194),
('69265', 'Ville-sur-Jarnioux', '31T', 624643, 5091108, 45.9622, 4.60861, 420),
('69266', 'Villeurbanne', '31T', 646301, 5071234, 45.7792, 4.88194, 169),
('69267', 'Villié-Morgon', '31T', 629703, 5113536, 46.1631, 4.68, 280),
('69268', 'Vourles', '31T', 638194, 5057833, 45.6603, 4.77389, 240),
('69269', 'Yzeron', '31T', 623851, 5062750, 45.7072, 4.59111, 700),
('69270', 'Chaponnay', '31T', 650853, 5054576, 45.6283, 4.93528, 212),
('69271', 'Chassieu', '31T', 653322, 5067790, 45.7467, 4.97111, 220),
('69272', 'Communay', '31T', 643005, 5051983, 45.6067, 4.83389, 240),
('69273', 'Corbas', '31T', 648186, 5059205, 45.6706, 4.9025, 200),
('69275', 'Décines-Charpieu', '31T', 652700, 5070246, 45.7689, 4.96389, 210),
('69276', 'Feyzin', '31T', 644668, 5058752, 45.6672, 4.85722, 200),
('69277', 'Genas', '31T', 655348, 5066328, 45.7331, 4.99667, 220),
('69278', 'Genay', '31T', 642909, 5084340, 45.8978, 4.84222, 220),
('69279', 'Jonage', '31T', 659056, 5073524, 45.7969, 5.04667, 225),
('69280', 'Jons', '31T', 661483, 5074884, 45.8086, 5.07833, 210),
('69281', 'Marennes', '31T', 649377, 5053768, 45.6214, 4.91611, 210),
('69282', 'Meyzieu', '31T', 655517, 5069945, 45.7656, 5.00001, 198),
('69283', 'Mions', '31T', 652358, 5058565, 45.6639, 4.95583, 220),
('69284', 'Montanay', '31T', 644656, 5082466, 45.8806, 4.86416, 300),
('69285', 'Pusignan', '31T', 660849, 5069339, 45.7589, 5.06833, 210),
('69286', 'Rillieux-la-Pape', '31T', 647240, 5076289, 45.8244, 4.89556, 290),
('69287', 'Saint-Bonnet-de-Mure', '31T', 657767, 5061324, 45.6875, 5.02612, 233),
('69288', 'Saint-Laurent-de-Mure', '31T', 659176, 5061236, 45.6864, 5.04417, 260),
('69289', 'Saint-Pierre-de-Chandieu', '31T', 656760, 5056605, 45.6453, 5.01167, 250),
('69290', 'Saint-Priest', '31T', 651422, 5062340, 45.6981, 4.945, 220),
('69291', 'Saint-Symphorien-d''Ozon', '31T', 644670, 5054954, 45.6331, 4.85612, 180),
('69292', 'Sathonay-Camp', '31T', 645535, 5076280, 45.8247, 4.87361, 280),
('69293', 'Sathonay-Village', '31T', 645899, 5077308, 45.8339, 4.87861, 285),
('69294', 'Sérézin-du-Rhône', '31T', 642535, 5054535, 45.6297, 4.82862, 174),
('69295', 'Simandres', '31T', 645912, 5053686, 45.6214, 4.87166, 200),
('69296', 'Solaize', '31T', 643333, 5055603, 45.6392, 4.83916, 238),
('69297', 'Ternay', '31T', 641205, 5052004, 45.6072, 4.81083, 210),
('69298', 'Toussieu', '31T', 654720, 5057635, 45.655, 4.98584, 240),
('69299', 'Colombier-Saugnieu', '31T', 664353, 5064366, 45.7133, 5.11167, 255),
('70001', 'Abelcourt', '32T', 296992, 5295900, 47.7844, 6.28972, 260),
('70002', 'Aboncourt-Gesincourt', '31T', 723404, 5295384, 47.7731, 5.98195, 230),
('70003', 'Achey', '31T', 696261, 5272366, 47.575, 5.60972, 230),
('70004', 'Adelans-et-le-Val-de-Bithaine', '32T', 304892, 5287408, 47.7106, 6.39889, 310),
('70005', 'Aillevans', '32T', 305661, 5274186, 47.5919, 6.415, 300),
('70006', 'Aillevillers-et-Lyaumont', '32T', 300736, 5310821, 47.9197, 6.33278, 290),
('70007', 'Ailloncourt', '32T', 304166, 5292470, 47.7558, 6.38694, 280),
('70008', 'Ainvelle', '32T', 294264, 5302950, 47.8469, 6.25, 270),
('70009', 'Aisey-et-Richecourt', '31T', 720739, 5308389, 47.8908, 5.95305, 250),
('70010', 'Alaincourt', '32T', 283508, 5314070, 47.9433, 6.10084, 250),
('70011', 'Amage', '32T', 312427, 5301096, 47.8358, 6.49333, 350),
('70012', 'Amance', '32T', 279612, 5298514, 47.8022, 6.05667, 220),
('70013', 'Ambiévillers', '32T', 288038, 5317519, 47.9758, 6.15972, 270),
('70014', 'Amblans-et-Velotte', '32T', 305529, 5283987, 47.68, 6.40889, 300),
('70015', 'Amoncourt', '32T', 279767, 5291089, 47.7356, 6.0625, 249),
('70016', 'Amont-et-Effreney', '32T', 317318, 5306409, 47.885, 6.55638, 600),
('70017', 'Anchenoncourt-et-Chazel', '32T', 284362, 5305259, 47.8644, 6.11666, 250),
('70018', 'Ancier', '31T', 698407, 5258408, 47.4489, 5.63194, 190),
('70019', 'Andelarre', '32T', 281810, 5274937, 47.5911, 6.09777, 310),
('70020', 'Andelarrot', '32T', 282314, 5273868, 47.5817, 6.105, 320),
('70021', 'Andornay', '32T', 319432, 5280788, 47.6553, 6.59528, 310),
('70022', 'Angirey', '31T', 708598, 5259534, 47.4558, 5.7675, 220),
('70023', 'Anjeux', '32T', 291269, 5307014, 47.8825, 6.20805, 240),
('70024', 'Apremont', '31T', 691888, 5252010, 47.3933, 5.54278, 200),
('70025', 'Arbecey', '31T', 719426, 5291460, 47.7392, 5.92694, 280),
('70026', 'Arc-lès-Gray', '31T', 694477, 5259357, 47.4586, 5.58028, 200),
('70027', 'Argillières', '31T', 697839, 5282555, 47.6661, 5.63528, 300),
('70028', 'Aroz', '32T', 274683, 5277743, 47.6139, 6.00166, 230),
('70029', 'Arpenans', '32T', 304998, 5276866, 47.6158, 6.405, 300),
('70030', 'Arsans', '31T', 698468, 5249170, 47.3658, 5.62861, 220),
('70031', 'Athesans-Étroitefontaine', '32T', 312781, 5274571, 47.5975, 6.50945, 300),
('70032', 'Attricourt', '31T', 680195, 5261743, 47.4842, 5.39194, 220),
('70035', 'Augicourt', '31T', 716989, 5295294, 47.7744, 5.89639, 250),
('70036', 'Aulx-lès-Cromary', '32T', 281809, 5250734, 47.3736, 6.10972, 240),
('70037', 'Autet', '31T', 702814, 5269159, 47.5442, 5.69528, 200),
('70038', 'Authoison', '32T', 285217, 5263498, 47.4894, 6.14862, 270),
('70039', 'Autoreille', '31T', 712084, 5250078, 47.3697, 5.80917, 280),
('70040', 'Autrey-lès-Cerre', '32T', 300654, 5276333, 47.6097, 6.3475, 370),
('70041', 'Autrey-lès-Gray', '31T', 687655, 5262317, 47.4872, 5.49112, 220),
('70042', 'Autrey-le-Vay', '32T', 304337, 5268359, 47.5392, 6.4, 270),
('70043', 'Auvet-et-la-Chapelotte', '31T', 689458, 5264848, 47.5094, 5.51612, 214),
('70044', 'Auxon', '32T', 287348, 5285118, 47.6844, 6.16639, 240),
('70045', 'Avrigney-Virey', '31T', 709831, 5246134, 47.335, 5.7775, 270),
('70046', 'Les Aynans', '32T', 308591, 5277489, 47.6225, 6.45249, 275),
('70047', 'Baignes', '32T', 278238, 5274485, 47.5858, 6.05055, 240),
('70048', 'Bard-lès-Pesmes', '31T', 699112, 5238808, 47.2725, 5.6325, 210),
('70049', 'Barges', '31T', 712942, 5305036, 47.8633, 5.84723, 230),
('70050', 'La Barre', '32T', 287050, 5253973, 47.4044, 6.17751, 250),
('70051', 'La Basse-Vaivre', '32T', 280092, 5314911, 47.9497, 6.05472, 250),
('70052', 'Bassigney', '32T', 288860, 5299684, 47.8158, 6.17945, 245),
('70053', 'Les Bâties', '31T', 717807, 5265557, 47.5069, 5.8925, 222),
('70054', 'Battrans', '31T', 698946, 5256108, 47.4281, 5.63805, 210),
('70055', 'Baudoncourt', '32T', 301110, 5295108, 47.7786, 6.345, 262),
('70056', 'Baulay', '32T', 275700, 5296995, 47.7872, 6.00528, 220),
('70057', 'Bay', '31T', 705582, 5240854, 47.2889, 5.71889, 240),
('70058', 'Beaujeu-Saint-Vallier-Pierrejux-et-Quitteur', '31T', 701579, 5264913, 47.5064, 5.67694, 220),
('70059', 'Beaumotte-Aubertans', '32T', 287262, 5255789, 47.4208, 6.17944, 250),
('70060', 'Beaumotte-lès-Pin', '31T', 714016, 5244306, 47.3172, 5.83195, 212),
('70061', 'Belfahy', '32T', 330091, 5294772, 47.7839, 6.73166, 850),
('70062', 'Belmont', '32T', 312997, 5295546, 47.7861, 6.50333, 390),
('70063', 'Belonchamp', '32T', 321014, 5293501, 47.77, 6.61111, 341),
('70064', 'Belverne', '32T', 323460, 5278008, 47.6314, 6.65, 356),
('70065', 'Besnans', '32T', 293367, 5258785, 47.4497, 6.25889, 250),
('70066', 'Betaucourt', '31T', 718344, 5305206, 47.8631, 5.91945, 220),
('70067', 'Betoncourt-lès-Brotte', '32T', 300575, 5291078, 47.7422, 6.33972, 284),
('70069', 'Betoncourt-Saint-Pancras', '32T', 288653, 5311097, 47.9183, 6.17111, 280),
('70070', 'Betoncourt-sur-Mance', '31T', 706173, 5301204, 47.8311, 5.755, 250),
('70071', 'Beulotte-Saint-Laurent', '32T', 326371, 5303349, 47.86, 6.6786, 600),
('70072', 'Beveuge', '32T', 310614, 5270284, 47.5583, 6.4825, 280),
('70074', 'Blondefontaine', '31T', 714458, 5306761, 47.8783, 5.86833, 230),
('70075', 'Bonboillon', '31T', 704138, 5246119, 47.3367, 5.70222, 270),
('70076', 'Bonnevent-Velloreille', '31T', 721282, 5252859, 47.3917, 5.93223, 266),
('70077', 'Borey', '32T', 301240, 5274521, 47.5936, 6.35611, 320),
('70078', 'Bougey', '31T', 714288, 5296214, 47.7836, 5.86084, 230),
('70079', 'Bougnon', '32T', 282968, 5286331, 47.6939, 6.1075, 280),
('70080', 'Bouhans-et-Feurg', '31T', 688855, 5261460, 47.4792, 5.50666, 210),
('70081', 'Bouhans-lès-Lure', '32T', 306611, 5285774, 47.6964, 6.4225, 300),
('70082', 'Bouhans-lès-Montbozon', '32T', 295525, 5262356, 47.4825, 6.28583, 260),
('70083', 'Bouligney', '32T', 293816, 5308468, 47.8964, 6.24139, 270),
('70084', 'Boulot', '31T', 723517, 5248183, 47.3489, 5.95945, 220),
('70085', 'Boult', '32T', 273709, 5251968, 47.3819, 6.00195, 250),
('70086', 'Bourbévelle', '31T', 719603, 5312024, 47.9239, 5.93973, 268),
('70087', 'Bourguignon-lès-Conflans', '32T', 287492, 5298714, 47.8067, 6.16167, 235),
('70088', 'Bourguignon-lès-la-Charité', '31T', 723659, 5265902, 47.5081, 5.97028, 230),
('70089', 'Bourguignon-lès-Morey', '31T', 702774, 5287701, 47.7108, 5.70334, 290),
('70090', 'Boursières', '32T', 277709, 5277071, 47.6089, 6.04222, 215),
('70091', 'Bousseraucourt', '31T', 718694, 5316256, 47.9622, 5.92972, 280),
('70092', 'Bresilley', '31T', 699563, 5237278, 47.2586, 5.63777, 197),
('70093', 'Breuches', '32T', 299874, 5297314, 47.7981, 6.3275, 260),
('70094', 'Breuchotte', '32T', 310688, 5301369, 47.8378, 6.46999, 335),
('70095', 'Breurey-lès-Faverney', '32T', 284892, 5293184, 47.7561, 6.12973, 240),
('70096', 'Brevilliers', '32T', 333925, 5272200, 47.5819, 6.79139, 360),
('70097', 'Briaucourt', '32T', 294030, 5300455, 47.8244, 6.24806, 250),
('70098', 'Brotte-lès-Luxeuil', '32T', 301229, 5292508, 47.7553, 6.34778, 280),
('70099', 'Brotte-lès-Ray', '31T', 705680, 5276306, 47.6075, 5.73667, 210),
('70100', 'Broye-les-Loups-et-Verfontaine', '31T', 682650, 5259595, 47.4642, 5.42361, 220),
('70101', 'Broye-Aubigney-Montseugny', '31T', 689634, 5243162, 47.3144, 5.50917, 196),
('70102', 'Brussey', '31T', 712383, 5242362, 47.3003, 5.80944, 217),
('70103', 'La Bruyère', '32T', 311702, 5300533, 47.8306, 6.48389, 360),
('70104', 'Bucey-lès-Gy', '31T', 714400, 5256220, 47.4242, 5.84278, 220),
('70105', 'Bucey-lès-Traves', '31T', 723962, 5279268, 47.6281, 5.98111, 220),
('70106', 'Buffignécourt', '32T', 276665, 5299863, 47.8133, 6.01667, 243),
('70107', 'Bussières', '31T', 724718, 5246993, 47.3378, 5.97473, 210),
('70109', 'Buthiers', '32T', 275959, 5248203, 47.3489, 6.03361, 230),
('70111', 'Calmoutier', '32T', 295807, 5280550, 47.6461, 6.28111, 300),
('70112', 'Cemboing', '31T', 713608, 5302773, 47.8428, 5.855, 240),
('70113', 'Cenans', '32T', 288416, 5256952, 47.4317, 6.19417, 240),
('70114', 'Cendrecourt', '31T', 718652, 5303116, 47.8442, 5.9225, 230),
('70115', 'Cerre-lès-Noroy', '32T', 298218, 5275397, 47.6006, 6.31555, 330),
('70116', 'Chagey', '32T', 329512, 5275726, 47.6125, 6.73138, 350),
('70117', 'Châlonvillars', '32T', 333587, 5278667, 47.64, 6.78445, 380),
('70118', 'Chambornay-lès-Bellevaux', '32T', 281585, 5252628, 47.3906, 6.10583, 240),
('70119', 'Chambornay-lès-Pin', '31T', 719601, 5246707, 47.3369, 5.90694, 210),
('70120', 'Champagney', '32T', 326191, 5286206, 47.7058, 6.68306, 369),
('70121', 'Champey', '32T', 325584, 5272907, 47.5861, 6.68028, 360),
('70122', 'Champlitte', '31T', 688654, 5276750, 47.6167, 5.51056, 220),
('70124', 'Champtonnay', '31T', 701476, 5250848, 47.38, 5.66917, 215),
('70125', 'Champvans', '31T', 694464, 5252157, 47.3939, 5.57695, 210),
('70126', 'Chancey', '31T', 702818, 5244188, 47.3197, 5.68389, 260),
('70127', 'Chantes', '31T', 720140, 5279771, 47.6339, 5.93056, 210),
('70128', 'La Chapelle-lès-Luxeuil', '32T', 302790, 5294278, 47.7717, 6.36778, 264),
('70129', 'La Chapelle-Saint-Quillain', '31T', 711934, 5261756, 47.4747, 5.81277, 234),
('70130', 'Charcenne', '31T', 709663, 5250238, 47.3719, 5.77722, 240),
('70132', 'Chargey-lès-Gray', '31T', 694008, 5262741, 47.4892, 5.57555, 200),
('70133', 'Chargey-lès-Port', '32T', 275222, 5291665, 47.7392, 6.00166, 280),
('70134', 'Chariez', '32T', 280992, 5278183, 47.62, 6.08528, 280),
('70135', 'Charmes-Saint-Valbert', '31T', 703098, 5289753, 47.7292, 5.70861, 270),
('70136', 'Charmoille', '32T', 282798, 5282906, 47.6631, 6.10694, 260),
('70137', 'Chassey-lès-Montbozon', '32T', 299170, 5265382, 47.5108, 6.33278, 250),
('70138', 'Chassey-lès-Scey', '31T', 723742, 5281176, 47.6453, 5.97916, 222),
('70140', 'Châteney', '32T', 298385, 5285621, 47.6925, 6.31306, 320),
('70141', 'Châtenois', '32T', 298372, 5284663, 47.6839, 6.31333, 320),
('70142', 'Chaumercenne', '31T', 698694, 5241853, 47.3, 5.62834, 270),
('70143', 'Chauvirey-le-Châtel', '31T', 706205, 5296786, 47.7914, 5.75333, 270),
('70144', 'Chauvirey-le-Vieil', '31T', 706418, 5296082, 47.785, 5.75584, 310),
('70145', 'Chaux-la-Lotière', '31T', 724844, 5251913, 47.3819, 5.97888, 250),
('70146', 'Chaux-lès-Port', '32T', 277538, 5288979, 47.7158, 6.03388, 220),
('70147', 'Chavanne', '32T', 323860, 5269808, 47.5578, 6.65861, 400),
('70148', 'Chemilly', '32T', 276607, 5281564, 47.6489, 6.02528, 210),
('70149', 'Chenebier', '32T', 328286, 5279470, 47.6458, 6.71361, 380),
('70150', 'Chenevrey-et-Morogne', '31T', 707411, 5240268, 47.2831, 5.74277, 210),
('70151', 'Chevigney', '31T', 695692, 5245523, 47.3339, 5.59028, 210),
('70152', 'Choye', '31T', 708323, 5252509, 47.3928, 5.76055, 210),
('70153', 'Cintrey', '31T', 706507, 5292407, 47.7519, 5.75528, 320),
('70154', 'Cirey', '32T', 283666, 5253262, 47.3969, 6.13306, 225),
('70155', 'Citers', '32T', 306013, 5290986, 47.7431, 6.41222, 300),
('70156', 'Citey', '31T', 710265, 5256874, 47.4314, 5.78833, 205),
('70157', 'Clairegoutte', '32T', 321277, 5281720, 47.6642, 6.61945, 320),
('70158', 'Clans', '32T', 277500, 5276522, 47.6039, 6.03972, 236),
('70159', 'Cognières', '32T', 296119, 5263170, 47.49, 6.29333, 268),
('70160', 'Coisevaux', '32T', 327469, 5272326, 47.5814, 6.70556, 372),
('70162', 'Colombe-lès-Vesoul', '32T', 290504, 5277122, 47.6136, 6.21223, 250),
('70163', 'Colombier', '32T', 290561, 5282776, 47.6644, 6.21028, 240),
('70164', 'Colombotte', '32T', 296035, 5282304, 47.6619, 6.28333, 290),
('70165', 'Combeaufontaine', '31T', 716732, 5288236, 47.7111, 5.88945, 260),
('70166', 'Comberjon', '32T', 289705, 5281045, 47.6486, 6.19972, 240),
('70167', 'Conflandey', '32T', 278237, 5290343, 47.7283, 6.0425, 215),
('70168', 'Conflans-sur-Lanterne', '32T', 291151, 5299724, 47.8169, 6.20999, 240),
('70169', 'Confracourt', '31T', 715976, 5283293, 47.6669, 5.87694, 240),
('70170', 'Contréglise', '32T', 278173, 5301166, 47.8256, 6.03612, 250),
('70171', 'Corbenay', '32T', 300292, 5307592, 47.8906, 6.32834, 265),
('70172', 'La Corbière', '32T', 311982, 5296352, 47.7931, 6.48945, 379),
('70174', 'Cordonnet', '31T', 724106, 5255841, 47.4175, 5.9711, 330),
('70175', 'Cornot', '31T', 712470, 5286101, 47.6933, 5.83166, 240),
('70176', 'Corravillers', '32T', 322307, 5307088, 47.8925, 6.62278, 452),
('70177', 'Corre', '31T', 723465, 5311554, 47.9183, 5.99111, 225),
('70178', 'La Côte', '32T', 317656, 5284737, 47.6903, 6.57, 320),
('70179', 'Coulevon', '32T', 288380, 5280784, 47.6458, 6.18223, 250),
('70180', 'Courchaton', '32T', 314839, 5265668, 47.5181, 6.54055, 320),
('70181', 'Courcuire', '31T', 713287, 5247000, 47.3417, 5.82361, 283),
('70182', 'Courmont', '32T', 321706, 5275991, 47.6128, 6.62749, 330),
('70183', 'Courtesoult-et-Gatey', '31T', 696912, 5277239, 47.6186, 5.62056, 257),
('70184', 'Couthenans', '32T', 328922, 5273395, 47.5914, 6.72445, 340),
('70185', 'Cresancey', '31T', 700374, 5252387, 47.3942, 5.65528, 210),
('70186', 'La Creuse', '32T', 301006, 5283553, 47.6747, 6.34889, 300),
('70187', 'Crevans-et-la-Chapelle-lès-Granges', '32T', 318324, 5269359, 47.5522, 6.58528, 310),
('70188', 'Creveney', '32T', 296686, 5284784, 47.6844, 6.29083, 270),
('70189', 'Cromary', '32T', 279245, 5249563, 47.3622, 6.07639, 236),
('70190', 'Cubry-lès-Faverney', '32T', 285308, 5299351, 47.8117, 6.13222, 235),
('70192', 'Cugney', '31T', 705391, 5249346, 47.3653, 5.72028, 240),
('70193', 'Cult', '31T', 706998, 5243654, 47.3136, 5.73889, 270),
('70194', 'Cuve', '32T', 292430, 5309229, 47.9028, 6.2225, 240),
('70195', 'Dambenoît-lès-Colombe', '32T', 303814, 5288835, 47.7231, 6.38389, 330),
('70196', 'Dampierre-lès-Conflans', '32T', 289285, 5303346, 47.8489, 6.18334, 310),
('70197', 'Dampierre-sur-Linotte', '32T', 291585, 5265833, 47.5125, 6.23195, 260),
('70198', 'Dampierre-sur-Salon', '31T', 701716, 5270635, 47.5578, 5.68138, 203),
('70199', 'Dampvalley-lès-Colombe', '32T', 293152, 5278727, 47.6289, 6.24666, 260),
('70200', 'Dampvalley-Saint-Pancras', '32T', 290523, 5309947, 47.9086, 6.19666, 250),
('70201', 'Delain', '31T', 698154, 5272677, 47.5772, 5.63501, 220),
('70202', 'Demangevelle', '32T', 278563, 5312404, 47.9267, 6.03556, 230),
('70203', 'La Demie', '32T', 287657, 5274134, 47.5858, 6.17583, 300),
('70204', 'Denèvre', '31T', 698875, 5271743, 47.5686, 5.64416, 203),
('70205', 'Échavanne', '32T', 329597, 5280760, 47.6578, 6.73055, 380),
('70206', 'Échenans-sous-Mont-Vaudois', '32T', 332470, 5274683, 47.6039, 6.77111, 380),
('70207', 'Échenoz-la-Méline', '32T', 284801, 5276094, 47.6025, 6.13694, 250),
('70208', 'Échenoz-le-Sec', '32T', 283311, 5269163, 47.5397, 6.12056, 320),
('70210', 'Écromagny', '32T', 317648, 5296418, 47.7953, 6.565, 456),
('70211', 'Écuelle', '31T', 691876, 5269624, 47.5517, 5.55028, 220),
('70213', 'Éhuns', '32T', 298629, 5294452, 47.7719, 6.31222, 270),
('70214', 'Équevilley', '32T', 288947, 5294642, 47.7706, 6.18306, 270),
('70215', 'Errevet', '32T', 332931, 5283475, 47.6831, 6.77388, 380),
('70216', 'Esboz-Brest', '32T', 309062, 5298116, 47.8081, 6.44972, 320),
('70217', 'Esmoulières', '32T', 321590, 5302722, 47.8531, 6.615, 590),
('70218', 'Esmoulins', '31T', 693852, 5253527, 47.4064, 5.56944, 200),
('70219', 'Esprels', '32T', 302194, 5268122, 47.5364, 6.37167, 260),
('70220', 'Essertenne-et-Cecey', '31T', 686860, 5252404, 47.3983, 5.47639, 200),
('70221', 'Étobon', '32T', 325423, 5279400, 47.6444, 6.67555, 465),
('70222', 'Étrelles-et-la-Montbleuse', '31T', 715653, 5260377, 47.4611, 5.8614, 260),
('70224', 'Étuz', '31T', 722060, 5248376, 47.3511, 5.94028, 220),
('70225', 'Fahy-lès-Autrey', '31T', 686703, 5265223, 47.5136, 5.47972, 260),
('70226', 'Fallon', '32T', 310180, 5264643, 47.5075, 6.47917, 330),
('70227', 'Faucogney-et-la-Mer', '32T', 317684, 5301515, 47.8411, 6.56334, 360),
('70228', 'Faverney', '32T', 282882, 5294619, 47.7683, 6.10223, 220),
('70229', 'Faymont', '32T', 319043, 5275671, 47.6092, 6.59222, 390),
('70230', 'Fédry', '31T', 716364, 5277929, 47.6186, 5.87945, 220),
('70231', 'Ferrières-lès-Ray', '31T', 710792, 5273645, 47.5819, 5.80333, 200),
('70232', 'Ferrières-lès-Scey', '32T', 275057, 5282552, 47.6572, 6.00416, 220),
('70233', 'Les Fessey', '32T', 314157, 5299248, 47.8197, 6.51722, 365),
('70234', 'Filain', '32T', 287954, 5266767, 47.5197, 6.18333, 280),
('70235', 'Flagy', '32T', 288990, 5286666, 47.6989, 6.1875, 240),
('70236', 'Fleurey-lès-Faverney', '32T', 281327, 5292081, 47.745, 6.08278, 260),
('70237', 'Fleurey-lès-Lavoncourt', '31T', 709004, 5282111, 47.6586, 5.78362, 240),
('70238', 'Fleurey-lès-Saint-Loup', '32T', 297717, 5310648, 47.9172, 6.2925, 275),
('70239', 'Fondremand', '32T', 275948, 5262207, 47.4747, 6.02639, 265),
('70240', 'Fontaine-lès-Luxeuil', '32T', 300625, 5303995, 47.8583, 6.33445, 260),
('70242', 'Fontenois-la-Ville', '32T', 288300, 5312780, 47.9333, 6.16556, 290),
('70243', 'Fontenois-lès-Montbozon', '32T', 291756, 5262983, 47.4869, 6.23556, 262),
('70244', 'Fouchécourt', '31T', 724120, 5297328, 47.7903, 5.99249, 230),
('70245', 'Fougerolles', '32T', 306090, 5306930, 47.8864, 6.40612, 310),
('70247', 'Fouvent-Saint-Andoche', '31T', 700503, 5280360, 47.6456, 5.66972, 240),
('70248', 'Frahier-et-Chatebier', '32T', 330936, 5280844, 47.6589, 6.74834, 370),
('70249', 'Francalmont', '32T', 295497, 5301918, 47.8381, 6.26695, 250),
('70250', 'Franchevelle', '32T', 309808, 5290397, 47.7389, 6.46305, 300),
('70251', 'Francourt', '31T', 706076, 5281049, 47.65, 5.74417, 256),
('70252', 'Framont', '31T', 693863, 5272780, 47.5794, 5.57805, 210),
('70253', 'Frasne-le-Château', '31T', 717967, 5260710, 47.4633, 5.89222, 250),
('70254', 'Frédéric-Fontaine', '32T', 322107, 5280891, 47.6569, 6.63083, 400),
('70255', 'Fresne-Saint-Mamès', '31T', 715409, 5269827, 47.5461, 5.86278, 210),
('70256', 'Fresse', '32T', 326899, 5293168, 47.7686, 6.68972, 478),
('70257', 'Fretigney-et-Velloreille', '31T', 721902, 5263640, 47.4883, 5.94584, 240),
('70258', 'Froideconche', '32T', 306484, 5299469, 47.8194, 6.41472, 300),
('70259', 'Froideterre', '32T', 314898, 5286586, 47.7061, 6.5325, 307),
('70260', 'Frotey-lès-Lure', '32T', 316284, 5280949, 47.6558, 6.55333, 317),
('70261', 'Frotey-lès-Vesoul', '32T', 288411, 5278187, 47.6225, 6.18389, 240),
('70262', 'Genevreuille', '32T', 303103, 5283234, 47.6725, 6.37694, 300),
('70263', 'Genevrey', '32T', 299238, 5289177, 47.7247, 6.32278, 320),
('70264', 'Georfans', '32T', 312774, 5267835, 47.5369, 6.51223, 300),
('70265', 'Germigney', '31T', 692450, 5250206, 47.3769, 5.54944, 210),
('70267', 'Gevigney-et-Mercey', '31T', 719459, 5298293, 47.8006, 5.93083, 230),
('70268', 'Gézier-et-Fontenelay', '31T', 718682, 5248836, 47.3564, 5.89584, 260),
('70269', 'Girefontaine', '32T', 288971, 5308427, 47.8944, 6.17666, 270),
('70271', 'Gouhenans', '32T', 309683, 5275722, 47.6069, 6.46778, 320),
('70272', 'Gourgeon', '31T', 713304, 5288975, 47.7189, 5.84417, 240),
('70273', 'Grammont', '32T', 313050, 5265354, 47.5147, 6.51695, 360),
('70274', 'Grandecourt', '31T', 714589, 5279595, 47.6342, 5.85667, 220),
('70275', 'Grandvelle-et-le-Perrenot', '31T', 725578, 5266099, 47.5092, 5.99583, 240),
('70276', 'Granges-la-Ville', '32T', 317494, 5270899, 47.5658, 6.57362, 300),
('70277', 'Granges-le-Bourg', '32T', 318327, 5270780, 47.565, 6.58473, 340),
('70278', 'Grattery', '32T', 280721, 5283757, 47.67, 6.07889, 230),
('70279', 'Gray', '31T', 695317, 5258026, 47.4464, 5.59083, 200),
('70280', 'Gray-la-Ville', '31T', 694019, 5257365, 47.4408, 5.57334, 200),
('70281', 'Greucourt', '31T', 715546, 5268379, 47.5331, 5.86389, 220),
('70282', 'Gy', '31T', 712189, 5254131, 47.4061, 5.8125, 240),
('70283', 'Haut-du-Them-Château-Lambert', '32T', 329664, 5301459, 47.8439, 6.72334, 470),
('70284', 'Hautevelle', '32T', 296905, 5302332, 47.8422, 6.28555, 260),
('70285', 'Héricourt', '32T', 331310, 5271410, 47.5742, 6.75695, 350),
('70286', 'Hugier', '31T', 704661, 5243757, 47.3153, 5.70805, 230),
('70287', 'Hurecourt', '32T', 280686, 5309787, 47.9039, 6.06527, 290),
('70288', 'Hyet', '32T', 280914, 5262174, 47.4761, 6.09222, 300),
('70289', 'Igny', '31T', 708105, 5262206, 47.48, 5.76223, 210),
('70290', 'Jasney', '32T', 289411, 5305660, 47.8697, 6.18389, 250),
('70291', 'Jonvelle', '31T', 718170, 5313639, 47.9389, 5.92139, 240),
('70292', 'Jussey', '31T', 717149, 5301019, 47.8258, 5.90139, 215),
('70293', 'Lambrey', '31T', 719380, 5294333, 47.765, 5.92778, 250),
('70294', 'Lantenot', '32T', 312160, 5291556, 47.75, 6.49389, 317),
('70295', 'La Lanterne-et-les-Armonts', '32T', 314836, 5296383, 47.7942, 6.5275, 464),
('70296', 'Larians-et-Munans', '32T', 291457, 5255175, 47.4167, 6.23528, 240),
('70297', 'Larret', '31T', 697484, 5278247, 47.6275, 5.62862, 261),
('70298', 'Lavigney', '31T', 710698, 5288355, 47.7142, 5.80916, 250),
('70299', 'Lavoncourt', '31T', 709279, 5278505, 47.6261, 5.78555, 210),
('70301', 'Lieffrans', '31T', 723642, 5267446, 47.5219, 5.97084, 250),
('70302', 'Lieucourt', '31T', 698045, 5247394, 47.35, 5.62223, 217),
('70303', 'Liévans', '32T', 300659, 5279516, 47.6383, 6.34612, 310),
('70304', 'Linexert', '32T', 311219, 5290814, 47.7431, 6.48167, 306),
('70306', 'Lomont', '32T', 320727, 5277442, 47.6256, 6.61388, 380),
('70307', 'Longevelle', '32T', 308262, 5273822, 47.5894, 6.44972, 283),
('70308', 'La Longine', '32T', 319949, 5306110, 47.8831, 6.59167, 410),
('70309', 'Loulans-Verchamp', '32T', 289316, 5258651, 47.4472, 6.20528, 250),
('70310', 'Lure', '32T', 312229, 5284045, 47.6825, 6.49805, 295),
('70311', 'Luxeuil-les-Bains', '32T', 303982, 5299337, 47.8175, 6.38139, 290),
('70312', 'Luze', '32T', 330088, 5273979, 47.5969, 6.73972, 390),
('70313', 'Lyoffans', '32T', 318657, 5280040, 47.6483, 6.58528, 300),
('70314', 'Magnivray', '32T', 310542, 5294977, 47.7803, 6.47084, 344),
('70315', 'Magnoncourt', '32T', 297131, 5308165, 47.8947, 6.28583, 250),
('70316', 'Le Magnoray', '32T', 282011, 5267975, 47.5286, 6.10389, 350),
('70317', 'Les Magny', '32T', 308121, 5266997, 47.5281, 6.45083, 273),
('70318', 'Magny-Danigon', '32T', 319914, 5282875, 47.6742, 6.60084, 310),
('70319', 'Magny-Jobert', '32T', 319541, 5280291, 47.6508, 6.59694, 300),
('70320', 'Magny-lès-Jussey', '31T', 722691, 5304692, 47.8569, 5.97722, 265),
('70321', 'Magny-Vernois', '32T', 310394, 5282806, 47.6708, 6.47416, 290),
('70322', 'Mailleroncourt-Charette', '32T', 294432, 5289500, 47.7261, 6.25861, 260),
('70323', 'Mailleroncourt-Saint-Pancras', '32T', 285725, 5311144, 47.9178, 6.13194, 283),
('70324', 'Mailley-et-Chazelot', '32T', 278133, 5268955, 47.5361, 6.05195, 300),
('70325', 'Maizières', '32T', 274917, 5264287, 47.4931, 6.01166, 250),
('70326', 'La Malachère', '32T', 279457, 5259663, 47.4531, 6.07416, 290),
('70327', 'Malans', '31T', 696266, 5237755, 47.2639, 5.59445, 214),
('70328', 'Malbouhans', '32T', 318422, 5287216, 47.7128, 6.57917, 321),
('70329', 'Malvillers', '31T', 708981, 5290271, 47.7319, 5.78722, 260),
('70330', 'Mandrevillars', '32T', 332871, 5275536, 47.6117, 6.77612, 374),
('70331', 'Mantoche', '31T', 690847, 5254974, 47.4203, 5.53028, 200),
('70332', 'Marast', '32T', 303107, 5270378, 47.5569, 6.38277, 280),
('70334', 'Marnay', '31T', 709570, 5241056, 47.2894, 5.77166, 220),
('70335', 'Maussans', '32T', 292767, 5256643, 47.4303, 6.25194, 250),
('70336', 'Mélecey', '32T', 310953, 5265885, 47.5189, 6.48889, 313),
('70337', 'Melin', '31T', 711839, 5291394, 47.7411, 5.82584, 260),
('70338', 'Melincourt', '32T', 285262, 5307637, 47.8861, 6.1275, 250),
('70339', 'Mélisey', '32T', 318772, 5291748, 47.7536, 6.58195, 328),
('70340', 'Membrey', '31T', 706154, 5274716, 47.5931, 5.74222, 220),
('70341', 'Menoux', '32T', 283033, 5299219, 47.8097, 6.10194, 240),
('70342', 'Mercey-sur-Saône', '31T', 705521, 5268357, 47.5361, 5.73084, 200),
('70343', 'Mersuay', '32T', 285704, 5295997, 47.7817, 6.13916, 230),
('70344', 'Meurcourt', '32T', 292610, 5294541, 47.7708, 6.23194, 260),
('70345', 'Miellin', '32T', 330532, 5297725, 47.8106, 6.73639, 580),
('70347', 'Mignavillers', '32T', 315699, 5272346, 47.5783, 6.54917, 290),
('70348', 'Moffans-et-Vacheresse', '32T', 316066, 5278020, 47.6294, 6.55166, 300),
('70349', 'Moimay', '32T', 304972, 5269852, 47.5528, 6.40777, 290),
('70350', 'Molay', '31T', 705601, 5290335, 47.7336, 5.74222, 274),
('70351', 'Mollans', '32T', 302600, 5280717, 47.6497, 6.37139, 320),
('70352', 'La Montagne', '32T', 320166, 5310398, 47.9217, 6.59278, 700),
('70353', 'Montagney', '31T', 701342, 5240645, 47.2883, 5.66278, 240),
('70355', 'Montarlot-lès-Rioz', '31T', 726049, 5256070, 47.4189, 5.99694, 270),
('70356', 'Montboillon', '31T', 720672, 5250642, 47.3719, 5.92305, 240),
('70357', 'Montbozon', '32T', 293478, 5260728, 47.4672, 6.25945, 270),
('70358', 'Montcey', '32T', 292591, 5281745, 47.6558, 6.23777, 320),
('70359', 'Montcourt', '31T', 720842, 5312752, 47.93, 5.95666, 241),
('70360', 'Montdoré', '32T', 281898, 5311596, 47.9206, 6.08056, 360),
('70361', 'Montessaux', '32T', 317418, 5290430, 47.7414, 6.56445, 327),
('70362', 'Montigny-lès-Cherlieu', '31T', 710436, 5297865, 47.7997, 5.81028, 260),
('70363', 'Montigny-lès-Vesoul', '32T', 280197, 5280376, 47.6394, 6.07362, 230),
('70364', 'Montjustin-et-Velotte', '32T', 302611, 5276730, 47.6139, 6.37333, 350),
('70366', 'Villers-Chemin-et-Mont-lès-Étrelles', '31T', 715793, 5259980, 47.4575, 5.86306, 250),
('70367', 'Mont-le-Vernois', '32T', 279043, 5276402, 47.6033, 6.06028, 270),
('70368', 'Montot', '31T', 697238, 5271317, 47.5653, 5.62223, 240),
('70369', 'Mont-Saint-Léger', '31T', 709590, 5279165, 47.6319, 5.79, 230),
('70371', 'Montureux-et-Prantigny', '31T', 698498, 5264375, 47.5025, 5.63583, 202),
('70372', 'Montureux-lès-Baulay', '31T', 723208, 5300446, 47.8186, 5.98194, 220),
('70373', 'La Roche-Morey', '31T', 705586, 5287800, 47.7108, 5.74083, 280),
('70374', 'Motey-Besuche', '31T', 701642, 5241706, 47.2978, 5.66722, 220),
('70375', 'Motey-sur-Saône', '31T', 706353, 5267305, 47.5264, 5.74139, 210),
('70376', 'Nantilly', '31T', 690581, 5259291, 47.4592, 5.52861, 210),
('70378', 'Navenne', '32T', 286827, 5276606, 47.6078, 6.16361, 280),
('70380', 'Neurey-en-Vaux', '32T', 290533, 5291834, 47.7458, 6.20555, 350),
('70381', 'Neurey-lès-la-Demie', '32T', 288932, 5272975, 47.5758, 6.19333, 340),
('70383', 'Neuvelle-lès-Cromary', '32T', 279301, 5253270, 47.3956, 6.07528, 251),
('70384', 'Neuvelle-lès-la-Charité', '31T', 722124, 5269367, 47.5397, 5.95167, 220),
('70385', 'La Neuvelle-lès-Lure', '32T', 316505, 5287925, 47.7186, 6.55334, 316),
('70386', 'La Neuvelle-lès-Scey', '31T', 720046, 5286661, 47.6958, 5.93278, 300),
('70387', 'Noidans-le-Ferroux', '31T', 722112, 5272984, 47.5722, 5.95334, 220),
('70388', 'Noidans-lès-Vesoul', '32T', 283870, 5277457, 47.6144, 6.1239, 229),
('70389', 'Noiron', '31T', 698334, 5251267, 47.3847, 5.62778, 210),
('70390', 'Noroy-le-Bourg', '32T', 297375, 5277003, 47.6147, 6.30361, 370),
('70392', 'Oigney', '31T', 713854, 5293848, 47.7625, 5.85389, 290),
('70393', 'Oiselay-et-Grachaux', '31T', 721138, 5256100, 47.4208, 5.93194, 352),
('70394', 'Onay', '31T', 702880, 5251515, 47.3856, 5.68805, 230),
('70395', 'Oppenans', '32T', 303183, 5273868, 47.5883, 6.38222, 290),
('70396', 'Oricourt', '32T', 304027, 5274704, 47.5961, 6.39306, 350),
('70397', 'Ormenans', '32T', 289404, 5259358, 47.4536, 6.20611, 250),
('70398', 'Ormoiche', '32T', 298776, 5298094, 47.8047, 6.3125, 255),
('70399', 'Ormoy', '31T', 722819, 5308376, 47.89, 5.98083, 230),
('70400', 'Ouge', '31T', 702375, 5297330, 47.7975, 5.7025, 340),
('70401', 'Ovanches', '31T', 721982, 5279687, 47.6325, 5.955, 210),
('70402', 'Oyrières', '31T', 692836, 5267801, 47.535, 5.56222, 212),
('70403', 'Palante', '32T', 318736, 5281243, 47.6592, 6.58583, 310),
('70404', 'Passavant-la-Rochère', '32T', 278828, 5317154, 47.9694, 6.03666, 250),
('70405', 'Pennesières', '32T', 281368, 5263115, 47.4847, 6.09777, 300),
('70406', 'Percey-le-Grand', '31T', 679659, 5275755, 47.6103, 5.39056, 245),
('70407', 'Perrouse', '32T', 277270, 5249545, 47.3614, 6.05027, 230),
('70408', 'Pesmes', '31T', 693899, 5239345, 47.2789, 5.56388, 210),
('70409', 'Pierrecourt', '31T', 694537, 5280157, 47.6456, 5.59028, 290),
('70410', 'Pin', '31T', 716452, 5244921, 47.3219, 5.86444, 220),
('70411', 'La Pisseure', '32T', 292531, 5304527, 47.8606, 6.22611, 235),
('70412', 'Plainemont', '32T', 291796, 5303750, 47.8533, 6.21667, 300),
('70413', 'Plancher-Bas', '32T', 329866, 5287796, 47.7211, 6.73139, 428),
('70414', 'Plancher-les-Mines', '32T', 330792, 5292373, 47.7625, 6.74195, 490),
('70415', 'Polaincourt-et-Clairefontaine', '32T', 281095, 5307422, 47.8828, 6.07194, 290),
('70416', 'Pomoy', '32T', 301251, 5282184, 47.6625, 6.35278, 319),
('70417', 'Pontcey', '32T', 276886, 5279575, 47.6311, 6.03, 220),
('70418', 'Le Pont-de-Planches', '31T', 719832, 5269095, 47.5381, 5.92112, 220),
('70419', 'Pont-du-Bois', '32T', 285518, 5316746, 47.9681, 6.12638, 270),
('70420', 'Pont-sur-l''Ognon', '32T', 303449, 5266225, 47.5197, 6.38917, 270),
('70421', 'Port-sur-Saône', '32T', 278382, 5285948, 47.6889, 6.04666, 220),
('70422', 'Poyans', '31T', 686268, 5257824, 47.4472, 5.47083, 210),
('70423', 'Preigney', '31T', 707903, 5293601, 47.7622, 5.77445, 307),
('70425', 'La Proiselière-et-Langle', '32T', 313184, 5300052, 47.8267, 6.50389, 350),
('70426', 'Provenchère', '32T', 284421, 5289492, 47.7228, 6.12528, 280),
('70427', 'Purgerot', '31T', 724630, 5292772, 47.7492, 5.99694, 250),
('70428', 'Pusey', '32T', 284137, 5281837, 47.6539, 6.12528, 230),
('70429', 'Pusy-et-Épenoux', '32T', 286014, 5283467, 47.6692, 6.14945, 240),
('70430', 'La Quarte', '31T', 702027, 5294753, 47.7744, 5.69666, 380),
('70431', 'Quenoche', '32T', 281826, 5261336, 47.4689, 6.10472, 265),
('70432', 'Quers', '32T', 306815, 5290032, 47.7347, 6.42333, 300),
('70433', 'Quincey', '32T', 288446, 5276857, 47.6106, 6.185, 250),
('70435', 'Raddon-et-Chapendu', '32T', 310977, 5301916, 47.8428, 6.47361, 350),
('70436', 'Raincourt', '31T', 715753, 5304954, 47.8617, 5.88472, 237),
('70437', 'Ranzevelle', '31T', 722971, 5310361, 47.9078, 5.98389, 240),
('70438', 'Ray-sur-Saône', '31T', 712507, 5274233, 47.5867, 5.82639, 210),
('70439', 'Raze', '32T', 275205, 5274477, 47.5847, 6.01027, 230),
('70440', 'Recologne', '31T', 708693, 5273879, 47.5847, 5.77556, 200),
('70441', 'Recologne-lès-Rioz', '31T', 725039, 5262152, 47.4739, 5.98667, 340),
('70442', 'Renaucourt', '31T', 708268, 5279922, 47.6392, 5.77278, 220),
('70443', 'La Grande-Résie', '31T', 694301, 5245662, 47.3356, 5.57195, 209),
('70444', 'La Résie-Saint-Martin', '31T', 697071, 5243220, 47.3128, 5.60749, 221),
('70445', 'Rignovelle', '32T', 311213, 5293194, 47.7644, 6.48056, 316),
('70446', 'Rigny', '31T', 698526, 5261100, 47.4731, 5.63473, 200),
('70447', 'Rioz', '32T', 279048, 5256587, 47.4253, 6.07028, 270),
('70448', 'Roche-et-Raucourt', '31T', 703395, 5277678, 47.6206, 5.70694, 210),
('70449', 'Roche-sur-Linotte-et-Sorans-les-Cordiers', '32T', 289210, 5261529, 47.4731, 6.2025, 250),
('70450', 'La Rochelle', '31T', 704798, 5291821, 47.7472, 5.73222, 330),
('70451', 'Ronchamp', '32T', 322668, 5285602, 47.6994, 6.63639, 350),
('70452', 'Rosey', '32T', 276567, 5272354, 47.5661, 6.02944, 240),
('70453', 'La Rosière', '32T', 322433, 5309154, 47.9111, 6.62361, 600),
('70454', 'Rosières-sur-Mance', '31T', 709222, 5302056, 47.8378, 5.79611, 230),
('70455', 'Roye', '32T', 315477, 5282488, 47.6694, 6.54194, 300),
('70456', 'Ruhans', '32T', 284172, 5260167, 47.4592, 6.13639, 290),
('70457', 'Rupt-sur-Saône', '31T', 720022, 5281219, 47.6469, 5.92972, 220),
('70459', 'Saint-Barthélemy', '32T', 319197, 5291332, 47.75, 6.58778, 330),
('70460', 'Saint-Bresson', '32T', 313568, 5304860, 47.87, 6.50694, 431),
('70461', 'Saint-Broing', '31T', 703329, 5258546, 47.4486, 5.69722, 200),
('70462', 'Saint-Ferjeux', '32T', 312675, 5268673, 47.5444, 6.51056, 300),
('70463', 'Saint-Gand', '31T', 714520, 5266672, 47.5181, 5.84944, 230),
('70464', 'Saint-Germain', '32T', 314248, 5287781, 47.7167, 6.52333, 317),
('70466', 'Saint-Loup-Nantouard', '31T', 705426, 5256146, 47.4264, 5.7239, 220),
('70467', 'Saint-Loup-sur-Semouse', '32T', 296144, 5307273, 47.8864, 6.27306, 250),
('70468', 'Saint-Marcel', '31T', 711429, 5300900, 47.8267, 5.825, 260),
('70469', 'Sainte-Marie-en-Chanois', '32T', 313936, 5300769, 47.8333, 6.51362, 350),
('70470', 'Sainte-Marie-en-Chaux', '32T', 298737, 5296364, 47.7892, 6.31278, 255),
('70471', 'Sainte-Reine', '31T', 709372, 5264260, 47.4981, 5.78, 224),
('70472', 'Saint-Remy', '32T', 282558, 5302081, 47.8353, 6.09417, 300),
('70473', 'Saint-Sauveur', '32T', 304095, 5297757, 47.8033, 6.38361, 283),
('70474', 'Saint-Sulpice', '32T', 308069, 5271140, 47.5653, 6.44833, 265),
('70475', 'Saint-Valbert', '32T', 305136, 5303315, 47.8536, 6.395, 380),
('70476', 'Saponcourt', '32T', 277683, 5306285, 47.8714, 6.02695, 290),
('70477', 'Saulnot', '32T', 321888, 5270300, 47.5617, 6.63222, 360),
('70478', 'Saulx', '32T', 296023, 5286105, 47.6961, 6.28139, 300),
('70479', 'Sauvigney-lès-Gray', '31T', 706470, 5258655, 47.4486, 5.73889, 200),
('70480', 'Sauvigney-lès-Pesmes', '31T', 694260, 5241798, 47.3008, 5.56972, 204),
('70481', 'Savoyeux', '31T', 706563, 5269661, 47.5475, 5.74528, 220),
('70482', 'Scey-sur-Saône-et-Saint-Albin', '31T', 723112, 5283439, 47.6658, 5.97194, 210),
('70483', 'Scye', '32T', 278935, 5282372, 47.6569, 6.05583, 230),
('70484', 'Secenans', '32T', 317490, 5269447, 47.5528, 6.57416, 310),
('70485', 'Selles', '32T', 282581, 5316486, 47.9647, 6.08722, 250),
('70486', 'Semmadon', '31T', 715192, 5291487, 47.7408, 5.87055, 280),
('70487', 'Senargent-Mignafans', '32T', 313919, 5270950, 47.5653, 6.52611, 290),
('70488', 'Senoncourt', '32T', 280084, 5301618, 47.8303, 6.06139, 230),
('70489', 'Servance', '32T', 326703, 5298457, 47.8161, 6.685, 415),
('70490', 'Servigney', '32T', 297461, 5289053, 47.7231, 6.29917, 310),
('70491', 'Seveux', '31T', 707003, 5270820, 47.5578, 5.75167, 210),
('70492', 'Soing-Cubry-Charentenay', '31T', 716506, 5274102, 47.5842, 5.87945, 210),
('70493', 'Sorans-lès-Breurey', '32T', 277523, 5253430, 47.3964, 6.05167, 260),
('70494', 'Sornay', '31T', 704110, 5239659, 47.2786, 5.69889, 200),
('70496', 'Tartécourt', '31T', 723146, 5302607, 47.8381, 5.98222, 223),
('70497', 'Tavey', '32T', 329985, 5270429, 47.565, 6.73972, 360),
('70498', 'Ternuay-Melay-et-Saint-Hilaire', '32T', 322800, 5295362, 47.7872, 6.63417, 356),
('70499', 'Theuley', '31T', 710538, 5278365, 47.6244, 5.80222, 213),
('70500', 'Thieffrans', '32T', 298041, 5264216, 47.5, 6.31834, 270),
('70501', 'Thiénans', '32T', 294467, 5260848, 47.4686, 6.2725, 270),
('70502', 'Tincey-et-Pontrebeau', '31T', 709789, 5276545, 47.6083, 5.79139, 210),
('70503', 'Traitiéfontaine', '32T', 280491, 5255358, 47.4147, 6.09, 250),
('70504', 'Traves', '31T', 723192, 5277538, 47.6128, 5.96999, 210),
('70505', 'Le Tremblois', '31T', 694704, 5251238, 47.3856, 5.57972, 200),
('70506', 'Trémoins', '32T', 327348, 5270352, 47.5636, 6.70473, 360),
('70507', 'Trésilley', '32T', 276115, 5259450, 47.45, 6.03, 310),
('70509', 'Tromarey', '31T', 705453, 5246350, 47.3383, 5.71972, 280),
('70510', 'Vadans', '31T', 695491, 5247154, 47.3486, 5.58834, 210),
('70511', 'Vaite', '31T', 705113, 5274586, 47.5922, 5.72833, 210),
('70512', 'La Vaivre', '32T', 303168, 5310243, 47.9153, 6.36556, 335),
('70513', 'Vaivre-et-Montoille', '32T', 282456, 5279333, 47.6308, 6.10417, 220),
('70514', 'Valay', '31T', 699310, 5246015, 47.3372, 5.63834, 215),
('70515', 'Le Val-de-Gouhenans', '32T', 311003, 5277131, 47.62, 6.48472, 290),
('70516', 'Vallerois-le-Bois', '32T', 295994, 5269788, 47.5494, 6.2886, 320),
('70517', 'Vallerois-Lorioz', '32T', 285733, 5271855, 47.5647, 6.15139, 360),
('70518', 'Le Val-Saint-Éloi', '32T', 288721, 5290725, 47.7353, 6.18195, 280),
('70519', 'Vandelans', '32T', 286064, 5252834, 47.3939, 6.165, 232),
('70520', 'Vanne', '31T', 713423, 5276615, 47.6078, 5.83972, 210),
('70521', 'Vantoux-et-Longevelle', '31T', 714710, 5257499, 47.4356, 5.8475, 230),
('70522', 'Varogne', '32T', 290260, 5288320, 47.7142, 6.20361, 270),
('70523', 'Vars', '31T', 690704, 5267731, 47.535, 5.53389, 220),
('70524', 'Vauchoux', '32T', 276808, 5283010, 47.6619, 6.02722, 210),
('70525', 'Vauconcourt-Nervezain', '31T', 712036, 5282561, 47.6617, 5.82417, 230),
('70526', 'Vauvillers', '32T', 283254, 5311731, 47.9222, 6.09862, 300),
('70527', 'Vaux-le-Moncelot', '31T', 718599, 5261754, 47.4725, 5.90111, 240),
('70528', 'Velesmes-Échevanne', '31T', 703924, 5255290, 47.4192, 5.70361, 219),
('70529', 'Velet', '31T', 693608, 5255837, 47.4272, 5.56722, 200),
('70530', 'Vellechevreux-et-Courbenans', '32T', 314685, 5268052, 47.5394, 6.53751, 330),
('70531', 'Velleclaire', '31T', 715711, 5257072, 47.4314, 5.86055, 250),
('70532', 'Vellefaux', '32T', 284744, 5270563, 47.5528, 6.13889, 330),
('70533', 'Vellefrey-et-Vellefrange', '31T', 713453, 5256897, 47.4306, 5.83056, 210),
('70534', 'Vellefrie', '32T', 291435, 5287350, 47.7058, 6.21972, 250),
('70535', 'Velleguindry-et-Levrecey', '32T', 281762, 5271415, 47.5594, 6.09888, 330),
('70536', 'Velle-le-Châtel', '32T', 278093, 5276160, 47.6008, 6.04778, 230),
('70537', 'Velleminfroy', '32T', 298563, 5282339, 47.6631, 6.31694, 300),
('70538', 'Vellemoz', '31T', 710572, 5261768, 47.4753, 5.79472, 220),
('70539', 'Vellexon-Queutrey-et-Vaudey', '31T', 711052, 5271676, 47.5642, 5.80583, 220),
('70540', 'Velloreille-lès-Choye', '31T', 706460, 5252381, 47.3922, 5.73584, 225),
('70541', 'Velorcey', '32T', 294009, 5295202, 47.7772, 6.25028, 260),
('70542', 'Venère', '31T', 701930, 5248639, 47.36, 5.67417, 240),
('70544', 'La Vergenne', '32T', 313936, 5276079, 47.6114, 6.52416, 295),
('70545', 'Venisey', '31T', 724024, 5301961, 47.8319, 5.99361, 230),
('70546', 'Vereux', '31T', 699685, 5266425, 47.5206, 5.6525, 205);
INSERT INTO `ods_communes` (`oc_code_insee`, `oc_nom`, `oc_secteur`, `oc_x_utm`, `oc_y_utm`, `oc_latitude`, `oc_longitude`, `oc_altitude`) VALUES
('70547', 'Verlans', '32T', 328481, 5271215, 47.5717, 6.71944, 350),
('70548', 'Vernois-sur-Mance', '31T', 708420, 5302954, 47.8461, 5.78584, 229),
('70549', 'La Vernotte', '31T', 715914, 5265796, 47.5097, 5.86751, 240),
('70550', 'Vesoul', '32T', 286463, 5278073, 47.6208, 6.15806, 220),
('70551', 'Vezet', '31T', 717069, 5269085, 47.5389, 5.88445, 215),
('70552', 'Villafans', '32T', 309924, 5272872, 47.5814, 6.47222, 280),
('70553', 'Villargent', '32T', 310681, 5268490, 47.5422, 6.48416, 284),
('70554', 'Villars-le-Pautel', '31T', 719331, 5308799, 47.895, 5.93445, 240),
('70555', 'La Villedieu-en-Fontenette', '32T', 290137, 5294723, 47.7717, 6.19888, 260),
('70557', 'Villefrancon', '31T', 706981, 5253666, 47.4036, 5.74333, 207),
('70558', 'La Villeneuve-Bellenoye-et-la-Maize', '32T', 293651, 5287487, 47.7078, 6.24916, 240),
('70559', 'Villeparois', '32T', 288492, 5282140, 47.6581, 6.18306, 240),
('70560', 'Villers-Bouton', '31T', 724444, 5259626, 47.4514, 5.9775, 321),
('70561', 'Villersexel', '32T', 306973, 5269631, 47.5514, 6.43444, 280),
('70562', 'Villers-la-Ville', '32T', 309100, 5269406, 47.55, 6.46278, 310),
('70563', 'Villers-le-Sec', '32T', 290969, 5275529, 47.5994, 6.21917, 290),
('70564', 'Villers-lès-Luxeuil', '32T', 296779, 5294578, 47.7725, 6.2875, 280),
('70565', 'Villers-Pater', '32T', 286132, 5261022, 47.4675, 6.16195, 260),
('70566', 'Villers-sur-Port', '32T', 280513, 5288742, 47.7147, 6.07361, 280),
('70567', 'Villers-sur-Saulnot', '32T', 322995, 5268876, 47.5492, 6.6475, 380),
('70568', 'Villers-Vaudey', '31T', 707148, 5283776, 47.6742, 5.75972, 250),
('70569', 'Vilory', '32T', 292298, 5289297, 47.7236, 6.23028, 270),
('70571', 'Visoncourt', '32T', 298844, 5292250, 47.7522, 6.31611, 280),
('70572', 'Vitrey-sur-Mance', '31T', 706759, 5299371, 47.8144, 5.76195, 250),
('70573', 'La Voivre', '32T', 315825, 5299349, 47.8211, 6.53944, 350),
('70574', 'Volon', '31T', 704866, 5278039, 47.6233, 5.72666, 220),
('70575', 'Voray-sur-l''Ognon', '32T', 274785, 5247167, 47.3392, 6.01861, 228),
('70576', 'Vougécourt', '31T', 723590, 5314218, 47.9422, 5.99416, 250),
('70577', 'Vouhenans', '32T', 310884, 5280535, 47.6506, 6.48167, 290),
('70578', 'Vregille', '31T', 718557, 5244844, 47.3206, 5.89222, 210),
('70579', 'Vyans-le-Val', '32T', 331882, 5268768, 47.5506, 6.76556, 360),
('70580', 'Vy-le-Ferroux', '31T', 723592, 5274740, 47.5875, 5.97388, 220),
('70581', 'Vy-lès-Lure', '32T', 308161, 5280284, 47.6475, 6.44555, 295),
('70582', 'Vy-lès-Rupt', '31T', 717477, 5280568, 47.6419, 5.89555, 220),
('70583', 'Vy-lès-Filain', '32T', 288952, 5265989, 47.5131, 6.19695, 270),
('71001', 'L''Abergement-de-Cuisery', '31T', 650165, 5159772, 46.5747, 4.95972, 180),
('71002', 'L''Abergement-Sainte-Colombe', '31T', 653320, 5179741, 46.7536, 5.0075, 196),
('71003', 'Allerey-sur-Saône', '31T', 651047, 5196609, 46.9058, 4.98334, 191),
('71004', 'Allériot', '31T', 648463, 5186414, 46.8147, 4.94611, 190),
('71005', 'Aluze', '31T', 628467, 5189565, 46.8472, 4.685, 370),
('71006', 'Amanzé', '31T', 595613, 5131556, 46.3308, 4.24222, 350),
('71007', 'Ameugny', '31T', 628681, 5153656, 46.5242, 4.67778, 270),
('71008', 'Anglure-sous-Dun', '31T', 604931, 5120719, 46.2319, 4.36083, 400),
('71009', 'Anost', '31T', 583569, 5214457, 47.0783, 4.10084, 480),
('71010', 'Antully', '31T', 607538, 5195297, 46.9025, 4.41194, 540),
('71011', 'Anzy-le-Duc', '31T', 581623, 5130334, 46.3217, 4.06028, 270),
('71012', 'Artaix', '31T', 577924, 5121828, 46.2456, 4.01083, 260),
('71013', 'Authumes', '31T', 675447, 5195515, 46.89, 5.30305, 200),
('71014', 'Autun', '31T', 599090, 5200647, 46.9519, 4.30222, 312),
('71015', 'Auxy', '31T', 606895, 5200473, 46.9492, 4.40472, 515),
('71016', 'Azé', '31T', 635327, 5143333, 46.43, 4.76139, 240),
('71017', 'Ballore', '31T', 604860, 5154586, 46.5367, 4.3675, 330),
('71018', 'Bantanges', '31T', 661018, 5164128, 46.6114, 5.10277, 190),
('71019', 'Barizey', '31T', 628013, 5183040, 46.7886, 4.67723, 300),
('71020', 'Barnay', '31T', 601201, 5215781, 47.0878, 4.33334, 352),
('71021', 'Baron', '31T', 597955, 5149407, 46.4911, 4.27639, 380),
('71022', 'Baudemont', '31T', 598961, 5126855, 46.2881, 4.28472, 400),
('71023', 'Baudrières', '31T', 653885, 5170922, 46.6742, 5.01195, 197),
('71024', 'Baugy', '31T', 579153, 5127832, 46.2994, 4.02778, 250),
('71025', 'Beaubery', '31T', 607445, 5139719, 46.4025, 4.39778, 450),
('71026', 'Beaumont-sur-Grosne', '31T', 642286, 5169680, 46.6656, 4.86, 180),
('71027', 'Beaurepaire-en-Bresse', '31T', 682629, 5171046, 46.6681, 5.3875, 210),
('71028', 'Beauvernois', '31T', 686391, 5189606, 46.8339, 5.44417, 210),
('71029', 'Bellevesvre', '31T', 680442, 5190011, 46.8392, 5.36639, 190),
('71030', 'Bergesserin', '31T', 620089, 5139801, 46.4011, 4.56223, 450),
('71031', 'Berzé-le-Châtel', '31T', 630006, 5138554, 46.3881, 4.69083, 370),
('71032', 'Berzé-la-Ville', '31T', 631134, 5135799, 46.3631, 4.70473, 330),
('71033', 'Bey', '31T', 650014, 5187132, 46.8208, 4.96666, 190),
('71034', 'Bissey-sous-Cruchaud', '31T', 628803, 5176849, 46.7328, 4.68583, 299),
('71035', 'Bissy-la-Mâconnaise', '31T', 637186, 5148933, 46.48, 4.78722, 260),
('71036', 'Bissy-sous-Uxelles', '31T', 631814, 5158541, 46.5675, 4.72, 260),
('71037', 'Bissy-sur-Fley', '31T', 623909, 5169089, 46.6639, 4.61972, 350),
('71038', 'Les Bizots', '31T', 606461, 5178512, 46.7517, 4.39389, 340),
('71039', 'Blanot', '31T', 633047, 5147976, 46.4722, 4.73305, 350),
('71040', 'Blanzy', '31T', 605856, 5173067, 46.7028, 4.38472, 301),
('71041', 'Bois-Sainte-Marie', '31T', 604146, 5131542, 46.3294, 4.35305, 420),
('71042', 'Bonnay', '31T', 624408, 5156223, 46.5481, 4.62278, 240),
('71043', 'Les Bordes', '31T', 654674, 5195497, 46.895, 5.03055, 170),
('71044', 'Bosjean', '31T', 678266, 5181202, 46.7606, 5.33445, 200),
('71045', 'Bouhans', '31T', 675300, 5182443, 46.7725, 5.29611, 190),
('71046', 'La Boulaye', '31T', 586380, 5177448, 46.745, 4.13083, 265),
('71047', 'Bourbon-Lancy', '31T', 559270, 5163476, 46.6222, 3.77417, 250),
('71048', 'Bourg-le-Comte', '31T', 576144, 5128874, 46.3092, 3.98889, 280),
('71050', 'Bourgvilain', '31T', 625780, 5136272, 46.3683, 4.63528, 300),
('71051', 'Bouzeron', '31T', 631561, 5194326, 46.8894, 4.72694, 300),
('71052', 'Boyer', '31T', 644267, 5161512, 46.5917, 4.88333, 200),
('71054', 'Bragny-sur-Saône', '31T', 654760, 5197075, 46.9092, 5.03222, 203),
('71055', 'Brandon', '31T', 620609, 5136199, 46.3686, 4.56806, 310),
('71056', 'Branges', '31T', 666839, 5167622, 46.6414, 5.18, 185),
('71057', 'Bray', '31T', 632161, 5151446, 46.5036, 4.7225, 310),
('71058', 'Bresse-sur-Grosne', '31T', 633096, 5161286, 46.5919, 4.7375, 215),
('71059', 'Le Breuil', '31T', 613264, 5183484, 46.7953, 4.48417, 330),
('71060', 'Briant', '31T', 588480, 5127960, 46.2994, 4.14889, 350),
('71061', 'Brienne', '31T', 654944, 5157823, 46.5561, 5.02139, 195),
('71062', 'Brion', '31T', 592338, 5195691, 46.9083, 4.2125, 290),
('71063', 'Broye', '31T', 598436, 5191620, 46.8708, 4.29167, 310),
('71064', 'Bruailles', '31T', 671241, 5162464, 46.5939, 5.23556, 190),
('71065', 'Buffières', '31T', 618044, 5142787, 46.4283, 4.53639, 331),
('71066', 'Burgy', '31T', 640724, 5147254, 46.4642, 4.83278, 310),
('71067', 'Burnand', '31T', 624921, 5161297, 46.5936, 4.63083, 260),
('71068', 'Burzy', '31T', 621236, 5161438, 46.5956, 4.58278, 250),
('71069', 'Bussières', '31T', 630959, 5132985, 46.3378, 4.70167, 270),
('71070', 'Buxy', '31T', 629509, 5174610, 46.7125, 4.69444, 250),
('71071', 'Céron', '31T', 572735, 5125931, 46.2831, 3.94416, 262),
('71072', 'Cersot', '31T', 624292, 5174253, 46.7103, 4.62611, 290),
('71073', 'Chagny', '31T', 633627, 5196626, 46.9097, 4.75472, 210),
('71074', 'Chaintré', '31T', 635745, 5124567, 46.2611, 4.76139, 280),
('71075', 'Chalmoux', '31T', 564869, 5161033, 46.5997, 3.84695, 310),
('71076', 'Chalon-sur-Saône', '31T', 641185, 5183057, 46.7861, 4.84972, 178),
('71077', 'Chambilly', '31T', 577984, 5125502, 46.2786, 4.01222, 250),
('71078', 'Chamilly', '31T', 628398, 5191787, 46.8672, 4.68473, 320),
('71079', 'Champagnat', '31T', 682673, 5150565, 46.4839, 5.38, 300),
('71080', 'Champagny-sous-Uxelles', '31T', 633616, 5159877, 46.5792, 4.74388, 234),
('71081', 'Champforgeuil', '31T', 640037, 5186798, 46.82, 4.83584, 185),
('71082', 'Champlecy', '31T', 595714, 5146871, 46.4686, 4.24667, 310),
('71084', 'Chânes', '31T', 635275, 5123507, 46.2517, 4.75499, 247),
('71085', 'Change', '31T', 624316, 5198618, 46.9294, 4.63305, 300),
('71086', 'Changy', '31T', 595022, 5140623, 46.4125, 4.23639, 280),
('71087', 'Chapaize', '31T', 633117, 5157427, 46.5572, 4.73667, 211),
('71088', 'La Chapelle-au-Mans', '31T', 574385, 5164044, 46.6258, 3.97166, 374),
('71089', 'La Chapelle-de-Bragny', '31T', 635441, 5165878, 46.6328, 4.76945, 190),
('71090', 'La Chapelle-de-Guinchay', '31T', 635377, 5118908, 46.2103, 4.755, 200),
('71091', 'La Chapelle-du-Mont-de-France', '31T', 618210, 5137572, 46.3814, 4.53723, 360),
('71092', 'La Chapelle-Naude', '31T', 668001, 5162558, 46.5956, 5.19333, 185),
('71093', 'La Chapelle-Saint-Sauveur', '31T', 672993, 5190315, 46.8439, 5.2689, 200),
('71094', 'La Chapelle-sous-Brancion', '31T', 637219, 5156870, 46.5514, 4.78999, 260),
('71095', 'La Chapelle-sous-Dun', '31T', 599587, 5123902, 46.2614, 4.29222, 350),
('71096', 'La Chapelle-sous-Uchon', '31T', 594030, 5187690, 46.8361, 4.23306, 400),
('71097', 'La Chapelle-Thècle', '31T', 662159, 5158105, 46.5569, 5.11555, 200),
('71098', 'Charbonnat', '31T', 585250, 5182279, 46.7886, 4.11694, 270),
('71099', 'Charbonnières', '31T', 641024, 5138892, 46.3889, 4.83416, 200),
('71100', 'Chardonnay', '31T', 642802, 5152336, 46.5094, 4.86139, 230),
('71101', 'Charette-Varennes', '31T', 667706, 5197425, 46.9092, 5.20222, 190),
('71102', 'La Charmée', '31T', 637197, 5175615, 46.72, 4.79528, 190),
('71103', 'Charmoy', '31T', 601869, 5178957, 46.7564, 4.33389, 310),
('71104', 'Charnay-lès-Chalon', '31T', 659306, 5200438, 46.9383, 5.09305, 185),
('71105', 'Charnay-lès-Mâcon', '31T', 637529, 5129980, 46.3094, 4.78611, 272),
('71106', 'Charolles', '31T', 597993, 5143140, 46.4347, 4.27556, 290),
('71107', 'Charrecey', '31T', 627275, 5188829, 46.8408, 4.66917, 340),
('71108', 'Chasselas', '31T', 632391, 5126130, 46.2758, 4.71833, 340),
('71109', 'Chassey-le-Camp', '31T', 629220, 5193905, 46.8861, 4.69611, 310),
('71110', 'Chassigny-sous-Dun', '31T', 599823, 5121281, 46.2378, 4.29473, 380),
('71111', 'Chassy', '31T', 585270, 5159928, 46.5875, 4.11306, 310),
('71112', 'Château', '31T', 623384, 5142677, 46.4264, 4.60583, 400),
('71113', 'Châteauneuf', '31T', 596827, 5118331, 46.2117, 4.25527, 293),
('71115', 'Châtel-Moron', '31T', 625775, 5183548, 46.7936, 4.64806, 480),
('71116', 'Châtenay', '31T', 606573, 5127292, 46.2908, 4.38361, 440),
('71117', 'Châtenoy-en-Bresse', '31T', 646045, 5183853, 46.7922, 4.91361, 191),
('71118', 'Châtenoy-le-Royal', '31T', 638289, 5183515, 46.7908, 4.81194, 200),
('71119', 'Chaudenay', '31T', 636599, 5197157, 46.9139, 4.79389, 205),
('71120', 'Chauffailles', '31T', 603372, 5117883, 46.2067, 4.34, 386),
('71121', 'La Chaux', '31T', 672456, 5188323, 46.8261, 5.26111, 211),
('71122', 'Cheilly-lès-Maranges', '31T', 627084, 5194816, 46.8947, 4.66834, 240),
('71123', 'Chenay-le-Châtel', '31T', 572424, 5119661, 46.2267, 3.93916, 300),
('71124', 'Chenôves', '31T', 627974, 5169914, 46.6706, 4.67306, 314),
('71125', 'Chérizet', '31T', 620453, 5152622, 46.5164, 4.57027, 230),
('71126', 'Chevagny-les-Chevrières', '31T', 636443, 5132581, 46.3331, 4.77277, 280),
('71127', 'Chevagny-sur-Guye', '31T', 615677, 5154968, 46.5383, 4.50862, 260),
('71128', 'Chiddes', '31T', 616364, 5145811, 46.4558, 4.51528, 350),
('71129', 'Chissey-en-Morvan', '31T', 593035, 5218735, 47.1156, 4.22639, 371),
('71130', 'Chissey-lès-Mâcon', '31T', 633583, 5153670, 46.5233, 4.74167, 250),
('71131', 'Ciel', '31T', 655554, 5194254, 46.8836, 5.04167, 180),
('71132', 'Ciry-le-Noble', '31T', 599472, 5162182, 46.6058, 4.29889, 280),
('71133', 'La Clayette', '31T', 600712, 5127100, 46.29, 4.3075, 400),
('71134', 'Clermain', '31T', 621795, 5135636, 46.3633, 4.58333, 270),
('71135', 'Clessé', '31T', 639486, 5141697, 46.4144, 4.81501, 250),
('71136', 'Clessy', '31T', 583295, 5156505, 46.5569, 4.08667, 310),
('71137', 'Cluny', '31T', 627488, 5143503, 46.4331, 4.65945, 250),
('71138', 'Clux', '31T', 667010, 5202626, 46.9561, 5.195, 190),
('71139', 'Collonge-en-Charollais', '31T', 617624, 5166554, 46.6422, 4.53694, 288),
('71140', 'Collonge-la-Madeleine', '31T', 615897, 5199715, 46.9408, 4.52278, 419),
('71141', 'Colombier-en-Brionnais', '31T', 602623, 5134356, 46.355, 4.33389, 370),
('71142', 'La Comelle', '31T', 584897, 5192246, 46.8783, 4.11417, 350),
('71143', 'Condal', '31T', 675155, 5147872, 46.4617, 5.28112, 210),
('71144', 'Cordesse', '31T', 602138, 5210301, 47.0383, 4.34444, 310),
('71145', 'Cormatin', '31T', 629207, 5155983, 46.545, 4.68528, 210),
('71146', 'Cortambert', '31T', 631627, 5148532, 46.4775, 4.71472, 330),
('71147', 'Cortevaix', '31T', 625589, 5154764, 46.5347, 4.63778, 210),
('71148', 'Coublanc', '31T', 598375, 5114065, 46.1731, 4.27445, 390),
('71149', 'Couches', '31T', 619861, 5191857, 46.8694, 4.57277, 320),
('71150', 'Crêches-sur-Saône', '31T', 637821, 5122730, 46.2442, 4.78778, 188),
('71151', 'Créot', '31T', 622947, 5197324, 46.9181, 4.61473, 360),
('71152', 'Cressy-sur-Somme', '31T', 566158, 5171481, 46.6936, 3.86528, 280),
('71153', 'Le Creusot', '31T', 608766, 5183617, 46.7972, 4.42528, 354),
('71154', 'Crissey', '31T', 643646, 5186606, 46.8175, 4.88306, 185),
('71155', 'Cronat', '31T', 552220, 5174431, 46.7214, 3.68333, 234),
('71156', 'Cruzille', '31T', 637912, 5151729, 46.505, 4.7975, 300),
('71157', 'Cuiseaux', '31T', 683194, 5151693, 46.4939, 5.38722, 276),
('71158', 'Cuisery', '31T', 653152, 5157901, 46.5572, 4.99806, 200),
('71159', 'Culles-les-Roches', '31T', 626548, 5167970, 46.6533, 4.65389, 310),
('71160', 'Curbigny', '31T', 600959, 5129018, 46.3072, 4.31112, 400),
('71161', 'Curdin', '31T', 576236, 5160672, 46.5953, 3.99528, 340),
('71162', 'Curgy', '31T', 605304, 5204366, 46.9844, 4.38472, 350),
('71163', 'Curtil-sous-Buffières', '31T', 617291, 5139746, 46.4011, 4.52583, 404),
('71164', 'Curtil-sous-Burnand', '31T', 625034, 5159941, 46.5814, 4.63194, 240),
('71165', 'Cussy-en-Morvan', '31T', 588379, 5215792, 47.0897, 4.16445, 480),
('71166', 'Cuzy', '31T', 578783, 5179011, 46.76, 4.03166, 291),
('71167', 'Damerey', '31T', 652091, 5188852, 46.8358, 4.99445, 188),
('71168', 'Dampierre-en-Bresse', '31T', 667686, 5188311, 46.8272, 5.19861, 193),
('71169', 'Davayé', '31T', 634292, 5129260, 46.3036, 4.74389, 250),
('71170', 'Demigny', '31T', 639759, 5198682, 46.9269, 4.83584, 200),
('71171', 'Dennevy', '31T', 625796, 5191639, 46.8664, 4.65056, 240),
('71172', 'Dettey', '31T', 590360, 5179544, 46.7633, 4.18334, 526),
('71173', 'Devrouze', '31T', 664664, 5180999, 46.7622, 5.15639, 205),
('71174', 'Dezize-lès-Maranges', '31T', 626157, 5196618, 46.9111, 4.65667, 320),
('71175', 'Diconne', '31T', 662998, 5182158, 46.7731, 5.135, 200),
('71176', 'Digoin', '31T', 575538, 5148376, 46.4847, 3.98417, 230),
('71177', 'Dommartin-lès-Cuiseaux', '31T', 676319, 5151891, 46.4975, 5.29778, 210),
('71178', 'Dompierre-les-Ormes', '31T', 614111, 5135085, 46.3597, 4.48334, 450),
('71179', 'Dompierre-sous-Sanvignes', '31T', 593583, 5167337, 46.6531, 4.22305, 303),
('71180', 'Donzy-le-National', '31T', 620167, 5145546, 46.4528, 4.56472, 281),
('71181', 'Donzy-le-Pertuis', '31T', 632205, 5145518, 46.4503, 4.72139, 430),
('71182', 'Dracy-le-Fort', '31T', 634497, 5184262, 46.7983, 4.7625, 212),
('71183', 'Dracy-lès-Couches', '31T', 620263, 5193996, 46.8886, 4.57861, 350),
('71184', 'Dracy-Saint-Loup', '31T', 601699, 5207607, 47.0142, 4.33806, 300),
('71185', 'Dyo', '31T', 598256, 5134778, 46.3594, 4.27723, 380),
('71186', 'Écuelles', '31T', 656904, 5200899, 46.9431, 5.06167, 175),
('71187', 'Écuisses', '31T', 617483, 5179211, 46.7561, 4.53833, 350),
('71188', 'Épertully', '31T', 622278, 5200027, 46.9425, 4.60667, 400),
('71189', 'Épervans', '31T', 645045, 5179566, 46.7539, 4.89916, 187),
('71190', 'Épinac', '31T', 614921, 5205377, 46.9919, 4.51139, 350),
('71191', 'Essertenne', '31T', 617953, 5185520, 46.8128, 4.54611, 310),
('71192', 'Étang-sur-Arroux', '31T', 590334, 5191060, 46.8669, 4.18527, 275),
('71193', 'Étrigny', '31T', 638209, 5161093, 46.5892, 4.80416, 250),
('71194', 'Farges-lès-Chalon', '31T', 637779, 5188197, 46.8331, 4.80667, 200),
('71195', 'Farges-lès-Mâcon', '31T', 645888, 5152564, 46.5108, 4.90167, 220),
('71196', 'Le Fay', '31T', 678256, 5170791, 46.6669, 5.33028, 203),
('71198', 'Flacey-en-Bresse', '31T', 683253, 5163125, 46.5967, 5.39251, 214),
('71199', 'Flagy', '31T', 625883, 5150880, 46.4997, 4.64056, 270),
('71200', 'Fleury-la-Montagne', '31T', 586470, 5117219, 46.2031, 4.12083, 406),
('71201', 'Fley', '31T', 625682, 5169712, 46.6692, 4.64305, 340),
('71202', 'Fontaines', '31T', 635194, 5190022, 46.85, 4.77333, 195),
('71203', 'Fontenay', '31T', 599521, 5147580, 46.4744, 4.29639, 350),
('71204', 'Fragnes', '31T', 640761, 5188452, 46.8347, 4.84583, 185),
('71205', 'Frangy-en-Bresse', '31T', 678423, 5178056, 46.7322, 5.33528, 200),
('71206', 'La Frette', '31T', 656922, 5166955, 46.6378, 5.05028, 200),
('71207', 'Fretterans', '31T', 673998, 5198717, 46.9192, 5.28527, 184),
('71208', 'Frontenard', '31T', 664354, 5197702, 46.9125, 5.15834, 180),
('71209', 'Frontenaud', '31T', 675953, 5157873, 46.5514, 5.29528, 195),
('71210', 'Fuissé', '31T', 634177, 5126694, 46.2806, 4.74166, 250),
('71212', 'Génelard', '31T', 594495, 5159355, 46.5811, 4.23334, 267),
('71213', 'La Genête', '31T', 656747, 5157283, 46.5508, 5.04472, 193),
('71214', 'Genouilly', '31T', 620387, 5167720, 46.6522, 4.57334, 242),
('71215', 'Gergy', '31T', 648402, 5193146, 46.8753, 4.9475, 182),
('71216', 'Germagny', '31T', 622639, 5169865, 46.6711, 4.60333, 260),
('71217', 'Germolles-sur-Grosne', '31T', 622604, 5126265, 46.2789, 4.59139, 367),
('71218', 'Gibles', '31T', 606017, 5130957, 46.3239, 4.37722, 460),
('71219', 'Gigny-sur-Saône', '31T', 648587, 5169369, 46.6614, 4.94222, 175),
('71220', 'Gilly-sur-Loire', '31T', 559639, 5154095, 46.5378, 3.77778, 230),
('71221', 'Givry', '31T', 633094, 5182502, 46.7828, 4.74361, 220),
('71222', 'Gourdon', '31T', 610716, 5166361, 46.6417, 4.44666, 460),
('71223', 'La Grande-Verrière', '31T', 586787, 5201999, 46.9658, 4.14083, 340),
('71224', 'Grandvaux', '31T', 597049, 5151399, 46.5092, 4.265, 320),
('71225', 'Granges', '31T', 632211, 5178282, 46.745, 4.73083, 214),
('71226', 'Grevilly', '31T', 639552, 5152723, 46.5136, 4.81917, 340),
('71227', 'Grury', '31T', 569751, 5169360, 46.6742, 3.91194, 300),
('71228', 'Guerfand', '31T', 654856, 5183549, 46.7875, 5.02889, 200),
('71229', 'Les Guerreaux', '31T', 570587, 5154244, 46.5381, 3.92056, 325),
('71230', 'Gueugnon', '31T', 581012, 5161598, 46.6031, 4.05778, 244),
('71231', 'La Guiche', '31T', 611279, 5155411, 46.5431, 4.45139, 420),
('71232', 'Hautefond', '31T', 590016, 5142739, 46.4322, 4.17167, 270),
('71233', 'L''Hôpital-le-Mercier', '31T', 578037, 5138097, 46.3919, 4.015, 240),
('71234', 'Huilly-sur-Seille', '31T', 657206, 5161773, 46.5911, 5.05222, 205),
('71235', 'Hurigny', '31T', 638223, 5134288, 46.3481, 4.79639, 300),
('71236', 'Igé', '31T', 633937, 5139565, 46.3964, 4.74223, 260),
('71237', 'Igornay', '31T', 604615, 5211085, 47.045, 4.37722, 310),
('71238', 'Iguerande', '31T', 583099, 5117698, 46.2078, 4.07722, 271),
('71239', 'Issy-l''Évêque', '31T', 574444, 5173090, 46.7072, 3.97389, 329),
('71240', 'Jalogny', '31T', 625453, 5141762, 46.4178, 4.6325, 310),
('71241', 'Jambles', '31T', 629366, 5181246, 46.7722, 4.69444, 270),
('71242', 'Joncy', '31T', 619223, 5163127, 46.6111, 4.55695, 236),
('71243', 'Joudes', '31T', 681048, 5148539, 46.4661, 5.35806, 270),
('71244', 'Jouvençon', '31T', 657357, 5160048, 46.5756, 5.05361, 190),
('71245', 'Jugy', '31T', 642847, 5163053, 46.6058, 4.86528, 230),
('71246', 'Juif', '31T', 665102, 5172023, 46.6814, 5.15889, 200),
('71247', 'Jully-lès-Buxy', '31T', 629647, 5172174, 46.6906, 4.69556, 260),
('71248', 'Lacrost', '31T', 647980, 5157680, 46.5564, 4.93055, 190),
('71249', 'Laives', '31T', 641403, 5167466, 46.6458, 4.84778, 200),
('71250', 'Laizé', '31T', 638832, 5139428, 46.3942, 4.80583, 220),
('71251', 'Laizy', '31T', 591580, 5195463, 46.9064, 4.2025, 295),
('71252', 'Lalheue', '31T', 637252, 5167617, 46.6481, 4.79361, 185),
('71253', 'Lans', '31T', 646550, 5181395, 46.77, 4.91944, 185),
('71254', 'Lays-sur-le-Doubs', '31T', 671177, 5198944, 46.9219, 5.24834, 180),
('71255', 'Lesme', '31T', 554839, 5166644, 46.6511, 3.71667, 240),
('71256', 'Lessard-en-Bresse', '31T', 659913, 5178492, 46.7408, 5.09334, 205),
('71257', 'Lessard-le-National', '31T', 640105, 5192050, 46.8672, 4.83834, 200),
('71258', 'Leynes', '31T', 633266, 5125284, 46.2681, 4.72945, 310),
('71259', 'Ligny-en-Brionnais', '31T', 591643, 5121091, 46.2372, 4.18862, 380),
('71261', 'Loisy', '31T', 655360, 5160676, 46.5817, 5.02777, 200),
('71262', 'Longepierre', '31T', 668196, 5200311, 46.935, 5.20972, 180),
('71263', 'Louhans', '31T', 670242, 5166142, 46.6272, 5.22388, 180),
('71264', 'Lournand', '31T', 626517, 5146014, 46.4558, 4.6475, 270),
('71265', 'La Loyère', '31T', 639594, 5189443, 46.8439, 4.83084, 191),
('71266', 'Lucenay-l''Évêque', '31T', 594634, 5214994, 47.0817, 4.24667, 340),
('71267', 'Lugny', '31T', 639041, 5148049, 46.4717, 4.81111, 230),
('71268', 'Lugny-lès-Charolles', '31T', 593106, 5140254, 46.4094, 4.21139, 280),
('71269', 'Lux', '31T', 641737, 5179457, 46.7536, 4.85584, 186),
('71270', 'Mâcon', '31T', 641018, 5129936, 46.3083, 4.83139, 190),
('71271', 'Mailly', '31T', 585884, 5119310, 46.2219, 4.11361, 420),
('71272', 'Malay', '31T', 628880, 5158323, 46.5661, 4.68167, 200),
('71273', 'Maltat', '31T', 562328, 5170112, 46.6817, 3.815, 239),
('71274', 'Mancey', '31T', 640414, 5159661, 46.5758, 4.8325, 300),
('71275', 'Marcigny', '31T', 580109, 5125066, 46.2744, 4.03972, 260),
('71276', 'Marcilly-la-Gueurce', '31T', 600040, 5139345, 46.4003, 4.30139, 330),
('71277', 'Marcilly-lès-Buxy', '31T', 622065, 5175134, 46.7186, 4.59722, 310),
('71278', 'Marigny', '31T', 611681, 5170548, 46.6792, 4.46028, 346),
('71279', 'Marizy', '31T', 608019, 5157822, 46.5653, 4.40944, 332),
('71280', 'Marly-sous-Issy', '31T', 570920, 5174776, 46.7228, 3.92806, 320),
('71281', 'Marly-sur-Arroux', '31T', 586858, 5163408, 46.6186, 4.13444, 330),
('71282', 'Marmagne', '31T', 603772, 5187913, 46.8367, 4.36083, 320),
('71283', 'Marnay', '31T', 646877, 5174083, 46.7042, 4.92138, 175),
('71284', 'Martailly-lès-Brancion', '31T', 638018, 5154541, 46.5303, 4.79972, 290),
('71285', 'Martigny-le-Comte', '31T', 602297, 5153709, 46.5292, 4.33389, 345),
('71286', 'Mary', '31T', 614838, 5163227, 46.6128, 4.49973, 490),
('71287', 'Massilly', '31T', 628399, 5149883, 46.4903, 4.67306, 240),
('71288', 'Massy', '31T', 623167, 5149157, 46.4847, 4.60472, 250),
('71289', 'Matour', '31T', 614180, 5129097, 46.3058, 4.48278, 430),
('71290', 'Mazille', '31T', 623161, 5138905, 46.3925, 4.60194, 340),
('71291', 'Melay', '31T', 578312, 5118283, 46.2136, 4.01528, 290),
('71292', 'Mellecey', '31T', 631965, 5185596, 46.8108, 4.72972, 210),
('71293', 'Ménetreuil', '31T', 661914, 5160878, 46.5819, 5.11333, 190),
('71294', 'Mercurey', '31T', 631261, 5188730, 46.8392, 4.7214, 260),
('71295', 'Mervans', '31T', 666987, 5185233, 46.7997, 5.18833, 185),
('71296', 'Messey-sur-Grosne', '31T', 633461, 5166915, 46.6425, 4.74389, 190),
('71297', 'Mesvres', '31T', 594769, 5190480, 46.8611, 4.24333, 285),
('71299', 'Milly-Lamartine', '31T', 630590, 5134243, 46.3492, 4.69722, 300),
('71300', 'Le Miroir', '31T', 679027, 5156233, 46.5358, 5.33472, 212),
('71301', 'Mont', '31T', 563205, 5163485, 46.6219, 3.82556, 309),
('71302', 'Montagny-lès-Buxy', '31T', 627701, 5173738, 46.705, 4.67055, 340),
('71303', 'Montagny-près-Louhans', '31T', 673588, 5169697, 46.6583, 5.2689, 190),
('71304', 'Montagny-sur-Grosne', '31T', 619314, 5134629, 46.3547, 4.55083, 360),
('71305', 'Montbellet', '31T', 643789, 5148468, 46.4744, 4.87305, 200),
('71306', 'Montceau-les-Mines', '31T', 604368, 5170694, 46.6817, 4.36472, 318),
('71307', 'Montceaux-l''Étoile', '31T', 580355, 5133991, 46.3547, 4.04444, 270),
('71308', 'Montceaux-Ragny', '31T', 641169, 5164712, 46.6211, 4.84389, 280),
('71309', 'Montcenis', '31T', 605921, 5182609, 46.7886, 4.38777, 400),
('71310', 'Montchanin', '31T', 612176, 5178184, 46.7478, 4.46862, 330),
('71311', 'Montcony', '31T', 675067, 5174405, 46.7003, 5.29, 205),
('71312', 'Montcoy', '31T', 652426, 5184845, 46.7997, 4.9975, 190),
('71313', 'Monthelon', '31T', 593437, 5201204, 46.9578, 4.22806, 291),
('71314', 'Montjay', '31T', 676270, 5186272, 46.8067, 5.31028, 200),
('71315', 'Mont-lès-Seurre', '31T', 661529, 5201177, 46.9444, 5.1225, 190),
('71316', 'Montmelard', '31T', 608527, 5131772, 46.3308, 4.41001, 520),
('71317', 'Montmort', '31T', 583447, 5176265, 46.7347, 4.09223, 344),
('71318', 'Montpont-en-Bresse', '31T', 665911, 5158053, 46.5556, 5.16445, 190),
('71319', 'Montret', '31T', 661586, 5171525, 46.6778, 5.11278, 205),
('71320', 'Mont-Saint-Vincent', '31T', 613058, 5165108, 46.63, 4.47695, 589),
('71321', 'Morey', '31T', 622155, 5184245, 46.8006, 4.60083, 350),
('71322', 'Morlet', '31T', 614328, 5201012, 46.9528, 4.5025, 430),
('71323', 'Mornay', '31T', 605878, 5151207, 46.5061, 4.38, 320),
('71324', 'Moroges', '31T', 628105, 5178718, 46.7497, 4.67722, 331),
('71325', 'La Motte-Saint-Jean', '31T', 573922, 5149746, 46.4972, 3.96333, 290),
('71326', 'Mouthier-en-Bresse', '31T', 682180, 5192102, 46.8575, 5.39, 190),
('71327', 'Mussy-sous-Dun', '31T', 602697, 5121082, 46.2356, 4.33195, 420),
('71328', 'Nanton', '31T', 638961, 5164506, 46.6197, 4.815, 204),
('71329', 'Navilly', '31T', 663189, 5200048, 46.9339, 5.14389, 190),
('71330', 'Neuvy-Grandchamp', '31T', 571604, 5160028, 46.59, 3.93472, 325),
('71331', 'Nochize', '31T', 590248, 5138575, 46.3947, 4.17389, 300),
('71332', 'Ormes', '31T', 650263, 5166106, 46.6317, 4.96305, 190),
('71333', 'Oslon', '31T', 646641, 5182910, 46.7836, 4.92112, 188),
('71334', 'Oudry', '31T', 588674, 5158557, 46.5747, 4.15722, 280),
('71335', 'Ouroux-sous-le-Bois-Sainte-Marie', '31T', 600844, 5134666, 46.3581, 4.31084, 340),
('71336', 'Ouroux-sur-Saône', '31T', 649189, 5175962, 46.7206, 4.95222, 190),
('71337', 'Oyé', '31T', 591906, 5130604, 46.3228, 4.19389, 330),
('71338', 'Ozenay', '31T', 641842, 5155988, 46.5425, 4.85, 230),
('71339', 'Ozolles', '31T', 603835, 5137248, 46.3808, 4.35028, 330),
('71340', 'Palinges', '31T', 593500, 5156221, 46.5531, 4.21972, 274),
('71341', 'Palleau', '31T', 654495, 5202412, 46.9572, 5.03055, 190),
('71342', 'Paray-le-Monial', '31T', 586057, 5144935, 46.4525, 4.12056, 244),
('71343', 'Paris-l''Hôpital', '31T', 624350, 5196982, 46.9147, 4.63305, 300),
('71344', 'Passy', '31T', 617718, 5155162, 46.5397, 4.53527, 230),
('71345', 'Péronne', '31T', 639043, 5144219, 46.4372, 4.81, 280),
('71346', 'Perrecy-les-Forges', '31T', 593141, 5162915, 46.6133, 4.21638, 289),
('71347', 'Perreuil', '31T', 619662, 5185955, 46.8164, 4.56862, 270),
('71348', 'Perrigny-sur-Loire', '31T', 564260, 5154204, 46.5383, 3.83805, 230),
('71349', 'La Petite-Verrière', '31T', 588237, 5211159, 47.0481, 4.16167, 370),
('71350', 'Pierreclos', '31T', 629899, 5132530, 46.3339, 4.68777, 280),
('71351', 'Pierre-de-Bresse', '31T', 672064, 5194583, 46.8825, 5.25833, 197),
('71352', 'Le Planois', '31T', 677630, 5184026, 46.7861, 5.32722, 200),
('71353', 'Plottes', '31T', 643579, 5154533, 46.529, 4.87219, 0),
('71354', 'Poisson', '31T', 586720, 5137319, 46.3839, 4.12777, 300),
('71355', 'Pontoux', '31T', 660633, 5199083, 46.9258, 5.10999, 190),
('71356', 'Pouilloux', '31T', 604277, 5162418, 46.6072, 4.36166, 330),
('71357', 'Pourlans', '31T', 670648, 5202636, 46.9553, 5.24278, 190),
('71358', 'Pressy-sous-Dondin', '31T', 616454, 5147758, 46.4733, 4.51694, 300),
('71359', 'Préty', '31T', 648918, 5155942, 46.5406, 4.94222, 180),
('71360', 'Prissé', '31T', 634315, 5131144, 46.3206, 4.74473, 210),
('71361', 'Prizy', '31T', 593988, 5134279, 46.3556, 4.22166, 390),
('71362', 'Pruzilly', '31T', 630680, 5124055, 46.2575, 4.69556, 390),
('71363', 'Le Puley', '31T', 619649, 5170608, 46.6783, 4.56445, 258),
('71364', 'La Racineuse', '31T', 664598, 5188812, 46.8325, 5.15833, 190),
('71365', 'Rancy', '31T', 660231, 5162532, 46.5972, 5.09195, 196),
('71366', 'Ratenelle', '31T', 654407, 5154628, 46.5275, 5.01333, 180),
('71367', 'Ratte', '31T', 676097, 5168256, 46.6447, 5.30111, 201),
('71368', 'Reclesne', '31T', 596626, 5210487, 47.0408, 4.27194, 360),
('71369', 'Remigny', '31T', 631198, 5196387, 46.9081, 4.72277, 211),
('71370', 'Rigny-sur-Arroux', '31T', 578922, 5153760, 46.5328, 4.02916, 233),
('71371', 'La Roche-Vineuse', '31T', 632955, 5133646, 46.3433, 4.72778, 300),
('71372', 'Romanèche-Thorins', '31T', 634010, 5116717, 46.1908, 4.73666, 200),
('71373', 'Romenay', '31T', 658552, 5151832, 46.5014, 5.06639, 210),
('71374', 'Rosey', '31T', 630404, 5178397, 46.7464, 4.70722, 250),
('71375', 'Le Rousset', '31T', 612181, 5158484, 46.5706, 4.46389, 430),
('71376', 'Roussillon-en-Morvan', '31T', 585021, 5208797, 47.0272, 4.11889, 530),
('71377', 'Royer', '31T', 639682, 5157266, 46.5544, 4.82223, 290),
('71378', 'Rully', '31T', 632723, 5192561, 46.8733, 4.74167, 240),
('71379', 'Sagy', '31T', 676943, 5163339, 46.6003, 5.31028, 201),
('71380', 'Saillenard', '31T', 681343, 5173509, 46.6906, 5.37167, 200),
('71381', 'Sailly', '31T', 620092, 5154715, 46.5353, 4.56611, 230),
('71382', 'Saint-Agnan', '31T', 567518, 5150504, 46.5047, 3.88, 250),
('71383', 'Saint-Albain', '31T', 644429, 5143110, 46.4261, 4.87973, 180),
('71384', 'Saint-Ambreuil', '31T', 642217, 5172612, 46.6919, 4.86, 188),
('71385', 'Saint-Amour-Bellevue', '31T', 634414, 5122747, 46.245, 4.74361, 309),
('71386', 'Saint-André-en-Bresse', '31T', 660242, 5168494, 46.6508, 5.09416, 204),
('71387', 'Saint-André-le-Désert', '31T', 617390, 5150123, 46.4944, 4.52973, 250),
('71388', 'Saint-Aubin-en-Charollais', '31T', 593429, 5149799, 46.4953, 4.2175, 270),
('71389', 'Saint-Aubin-sur-Loire', '31T', 557327, 5157591, 46.5694, 3.74806, 232),
('71390', 'Saint-Berain-sous-Sanvignes', '31T', 598990, 5173413, 46.7069, 4.295, 320),
('71391', 'Saint-Bérain-sur-Dheune', '31T', 622335, 5186873, 46.8242, 4.60389, 250),
('71392', 'Saint-Boil', '31T', 628884, 5168112, 46.6542, 4.68445, 240),
('71393', 'Saint-Bonnet-de-Cray', '31T', 587929, 5118629, 46.2156, 4.14, 409),
('71394', 'Saint-Bonnet-de-Joux', '31T', 610488, 5148573, 46.4817, 4.43945, 380),
('71395', 'Saint-Bonnet-de-Vieille-Vigne', '31T', 596530, 5153181, 46.5253, 4.25861, 310),
('71396', 'Saint-Bonnet-en-Bresse', '31T', 665891, 5191134, 46.8531, 5.17612, 185),
('71397', 'Sainte-Cécile', '31T', 624582, 5138409, 46.3878, 4.62028, 270),
('71398', 'Saint-Christophe-en-Bresse', '31T', 651816, 5179610, 46.7528, 4.98778, 190),
('71399', 'Saint-Christophe-en-Brionnais', '31T', 590808, 5126759, 46.2883, 4.17888, 430),
('71400', 'Saint-Clément-sur-Guye', '31T', 621319, 5163663, 46.6156, 4.58445, 400),
('71401', 'Sainte-Croix', '31T', 672120, 5159987, 46.5714, 5.24611, 200),
('71402', 'Saint-Cyr', '31T', 644660, 5171744, 46.6836, 4.89166, 180),
('71403', 'Saint-Denis-de-Vaux', '31T', 629482, 5183751, 46.7947, 4.69667, 280),
('71404', 'Saint-Désert', '31T', 630682, 5179299, 46.7544, 4.71111, 230),
('71405', 'Saint-Didier-en-Bresse', '31T', 659413, 5190896, 46.8525, 5.09112, 190),
('71406', 'Saint-Didier-en-Brionnais', '31T', 586668, 5131978, 46.3358, 4.12611, 270),
('71407', 'Saint-Didier-sur-Arroux', '31T', 585075, 5187186, 46.8328, 4.11556, 350),
('71408', 'Saint-Edmond', '31T', 593648, 5117448, 46.2042, 4.21389, 380),
('71409', 'Saint-Émiland', '31T', 613014, 5195583, 46.9042, 4.48389, 440),
('71410', 'Saint-Étienne-en-Bresse', '31T', 656919, 5174398, 46.7047, 5.05277, 190),
('71411', 'Saint-Eugène', '31T', 591317, 5176595, 46.7367, 4.19528, 350),
('71412', 'Saint-Eusèbe', '31T', 611802, 5174286, 46.7128, 4.46277, 340),
('71413', 'Saint-Firmin', '31T', 612046, 5187382, 46.8306, 4.46917, 390),
('71414', 'Saint-Forgeot', '31T', 598997, 5206265, 47.0025, 4.30222, 300),
('71415', 'Sainte-Foy', '31T', 587273, 5125566, 46.2781, 4.13278, 480),
('71416', 'Saint-Gengoux-de-Scissé', '31T', 636269, 5147028, 46.4631, 4.77472, 280),
('71417', 'Saint-Gengoux-le-National', '31T', 627240, 5163383, 46.6119, 4.66167, 248),
('71419', 'Saint-Germain-du-Bois', '31T', 671315, 5180042, 46.7519, 5.24306, 210),
('71420', 'Saint-Germain-du-Plain', '31T', 651489, 5174043, 46.7028, 4.98167, 190),
('71421', 'Saint-Germain-en-Brionnais', '31T', 597033, 5133678, 46.3497, 4.26111, 420),
('71422', 'Saint-Germain-lès-Buxy', '31T', 635482, 5174433, 46.7097, 4.7725, 200),
('71423', 'Saint-Gervais-en-Vallière', '31T', 648613, 5200007, 46.9369, 4.95251, 200),
('71424', 'Saint-Gervais-sur-Couches', '31T', 620553, 5197460, 46.9197, 4.58333, 460),
('71425', 'Saint-Gilles', '31T', 626895, 5192743, 46.8761, 4.66528, 240),
('71426', 'Sainte-Hélène', '31T', 625498, 5179559, 46.7578, 4.64334, 322),
('71427', 'Saint-Huruge', '31T', 620080, 5159593, 46.5792, 4.56722, 230),
('71428', 'Saint-Igny-de-Roche', '31T', 600143, 5116131, 46.1914, 4.29778, 390),
('71430', 'Saint-Jean-de-Vaux', '31T', 629724, 5185330, 46.8089, 4.70028, 240),
('71431', 'Saint-Jean-de-Trézy', '31T', 621142, 5188239, 46.8367, 4.58862, 280),
('71433', 'Saint-Julien-de-Civry', '31T', 594719, 5135401, 46.3656, 4.23139, 300),
('71434', 'Saint-Julien-de-Jonzy', '31T', 588130, 5121071, 46.2375, 4.14306, 500),
('71435', 'Saint-Julien-sur-Dheune', '31T', 617721, 5181130, 46.7733, 4.54194, 280),
('71436', 'Saint-Laurent-d''Andenay', '31T', 615741, 5177078, 46.7372, 4.51499, 346),
('71437', 'Saint-Laurent-en-Brionnais', '31T', 596935, 5125094, 46.2725, 4.25806, 400),
('71438', 'Saint-Léger-du-Bois', '31T', 609891, 5207722, 47.0139, 4.44583, 310),
('71439', 'Saint-Léger-lès-Paray', '31T', 587369, 5148628, 46.4856, 4.13833, 268),
('71440', 'Saint-Léger-sous-Beuvray', '31T', 583980, 5197235, 46.9233, 4.10306, 430),
('71441', 'Saint-Léger-sous-la-Bussière', '31T', 619712, 5129635, 46.3097, 4.55473, 340),
('71442', 'Saint-Léger-sur-Dheune', '31T', 624808, 5189241, 46.845, 4.63694, 240),
('71443', 'Saint-Loup-Géanges', '31T', 645310, 5200976, 46.9464, 4.90944, 185),
('71444', 'Saint-Loup-de-Varennes', '31T', 642403, 5176415, 46.7261, 4.86361, 189),
('71445', 'Saint-Marcel', '31T', 644754, 5181968, 46.7756, 4.89611, 177),
('71446', 'Saint-Marcelin-de-Cray', '31T', 616741, 5157243, 46.5586, 4.52306, 260),
('71447', 'Saint-Mard-de-Vaux', '31T', 628570, 5185738, 46.8128, 4.68528, 320),
('71448', 'Saint-Martin-Belle-Roche', '31T', 642751, 5138160, 46.3819, 4.85639, 210),
('71449', 'Saint-Martin-d''Auxy', '31T', 618424, 5175617, 46.7236, 4.54972, 450),
('71450', 'Saint-Martin-de-Commune', '31T', 615165, 5195995, 46.9075, 4.51222, 420),
('71451', 'Saint-Martin-de-Lixy', '31T', 596006, 5117392, 46.2033, 4.24444, 363),
('71452', 'Saint-Martin-de-Salencey', '31T', 615203, 5152952, 46.5203, 4.50194, 300),
('71453', 'Saint-Martin-du-Lac', '31T', 580591, 5122634, 46.2525, 4.04556, 248),
('71454', 'Saint-Martin-du-Mont', '31T', 675578, 5164874, 46.6144, 5.29305, 200),
('71455', 'Saint-Martin-du-Tartre', '31T', 623456, 5166331, 46.6392, 4.61306, 430),
('71456', 'Saint-Martin-en-Bresse', '31T', 657207, 5186915, 46.8172, 5.06083, 185),
('71457', 'Saint-Martin-en-Gâtinois', '31T', 653213, 5200463, 46.94, 5.01306, 180),
('71458', 'Saint-Martin-la-Patrouille', '31T', 619076, 5159789, 46.5811, 4.55417, 260),
('71459', 'Saint-Martin-sous-Montaigu', '31T', 630832, 5186034, 46.815, 4.715, 240),
('71460', 'Saint-Maurice-de-Satonnay', '31T', 637270, 5141462, 46.4128, 4.78612, 220),
('71461', 'Saint-Maurice-des-Champs', '31T', 624032, 5165200, 46.6289, 4.62028, 350),
('71462', 'Saint-Maurice-en-Rivière', '31T', 653015, 5189988, 46.8458, 5.00694, 180),
('71463', 'Saint-Maurice-lès-Châteauneuf', '31T', 596517, 5118975, 46.2175, 4.25139, 310),
('71464', 'Saint-Maurice-lès-Couches', '31T', 621613, 5193220, 46.8814, 4.59612, 290),
('71465', 'Saint-Micaud', '31T', 618460, 5171634, 46.6878, 4.54917, 290),
('71466', 'Saint-Nizier-sur-Arroux', '31T', 587029, 5183941, 46.8033, 4.14056, 271),
('71468', 'Saint-Pierre-de-Varennes', '31T', 614311, 5188629, 46.8414, 4.49917, 410),
('71469', 'Saint-Pierre-le-Vieux', '31T', 618375, 5126861, 46.285, 4.53667, 358),
('71470', 'Saint-Point', '31T', 624436, 5133003, 46.3392, 4.61695, 330),
('71471', 'Saint-Privé', '31T', 620755, 5173749, 46.7064, 4.57973, 330),
('71472', 'Saint-Prix', '31T', 581690, 5200723, 46.955, 4.07361, 450),
('71473', 'Saint-Racho', '31T', 605467, 5124433, 46.2653, 4.36862, 550),
('71474', 'Sainte-Radegonde', '31T', 581784, 5170531, 46.6833, 4.06944, 286),
('71475', 'Saint-Rémy', '31T', 640210, 5181212, 46.7697, 4.83639, 180),
('71477', 'Saint-Romain-sous-Gourdon', '31T', 607460, 5164141, 46.6222, 4.40362, 340),
('71478', 'Saint-Romain-sous-Versigny', '31T', 590766, 5166645, 46.6472, 4.18611, 340),
('71479', 'Saint-Sernin-du-Bois', '31T', 609314, 5188474, 46.8408, 4.43362, 447),
('71480', 'Saint-Sernin-du-Plain', '31T', 623410, 5194368, 46.8914, 4.62, 390),
('71481', 'Saint-Symphorien-d''Ancelles', '31T', 636544, 5117544, 46.1978, 4.76973, 189),
('71482', 'Saint-Symphorien-de-Marmagne', '31T', 601566, 5188091, 46.8386, 4.33195, 320),
('71483', 'Saint-Symphorien-des-Bois', '31T', 598857, 5131979, 46.3342, 4.28445, 450),
('71484', 'Saint-Usuge', '31T', 672148, 5171695, 46.6767, 5.25083, 200),
('71485', 'Saint-Vallerin', '31T', 628062, 5171738, 46.6869, 4.67472, 280),
('71486', 'Saint-Vallier', '31T', 604763, 5166317, 46.6422, 4.36889, 330),
('71487', 'Saint-Vérand', '31T', 633769, 5123813, 46.2547, 4.73555, 270),
('71488', 'Saint-Vincent-des-Prés', '31T', 619672, 5147913, 46.4742, 4.55888, 240),
('71489', 'Saint-Vincent-en-Bresse', '31T', 657606, 5170092, 46.6658, 5.06028, 205),
('71490', 'Saint-Vincent-Bragny', '31T', 586251, 5153798, 46.5322, 4.12473, 270),
('71491', 'Saint-Yan', '31T', 579782, 5140188, 46.4106, 4.03805, 240),
('71492', 'Saint-Ythaire', '31T', 623343, 5158331, 46.5672, 4.60945, 330),
('71493', 'Saisy', '31T', 617927, 5201885, 46.96, 4.55001, 380),
('71494', 'La Salle', '31T', 643644, 5141053, 46.4078, 4.86888, 190),
('71495', 'Salornay-sur-Guye', '31T', 622452, 5152878, 46.5183, 4.59639, 210),
('71496', 'Sampigny-lès-Maranges', '31T', 625979, 5196028, 46.9058, 4.65417, 240),
('71497', 'Sancé', '31T', 640955, 5133579, 46.3411, 4.83167, 200),
('71498', 'Santilly', '31T', 630483, 5163978, 46.6167, 4.70417, 196),
('71499', 'Sanvignes-les-Mines', '31T', 598850, 5168996, 46.6672, 4.29223, 350),
('71500', 'Sarry', '31T', 585876, 5129034, 46.3094, 4.11528, 280),
('71501', 'Sassangy', '31T', 625267, 5175354, 46.72, 4.63916, 345),
('71502', 'Sassenay', '31T', 646724, 5188162, 46.8308, 4.92389, 180),
('71503', 'Saules', '31T', 627879, 5168368, 46.6567, 4.67139, 292),
('71504', 'Saunières', '31T', 658524, 5196432, 46.9025, 5.08139, 178),
('71505', 'Savianges', '31T', 622617, 5172026, 46.6906, 4.60362, 263),
('71506', 'Savigny-en-Revermont', '31T', 685187, 5167386, 46.6344, 5.41944, 216),
('71507', 'Savigny-sur-Grosne', '31T', 628034, 5160035, 46.5817, 4.67111, 200),
('71508', 'Savigny-sur-Seille', '31T', 661455, 5165314, 46.6219, 5.10889, 195),
('71509', 'La Celle-en-Morvan', '31T', 589077, 5207189, 47.0122, 4.17194, 350),
('71510', 'Semur-en-Brionnais', '31T', 584064, 5123884, 46.2633, 4.09083, 380),
('71512', 'Sennecey-le-Grand', '31T', 643142, 5166766, 46.6392, 4.87028, 210),
('71513', 'Senozan', '31T', 643158, 5139930, 46.3978, 4.86222, 205),
('71514', 'Sens-sur-Seille', '31T', 677128, 5179470, 46.7453, 5.31889, 200),
('71515', 'Sercy', '31T', 629046, 5162495, 46.6036, 4.68499, 210),
('71516', 'Serley', '31T', 669270, 5183290, 46.7817, 5.2175, 195),
('71517', 'Sermesse', '31T', 659087, 5195953, 46.8981, 5.08861, 194),
('71518', 'Serrières', '31T', 629628, 5130209, 46.3131, 4.68361, 320),
('71519', 'Serrigny-en-Bresse', '31T', 661550, 5187062, 46.8175, 5.11777, 195),
('71520', 'Sevrey', '31T', 640675, 5177671, 46.7378, 4.84139, 195),
('71521', 'Sigy-le-Châtel', '31T', 620710, 5156857, 46.5544, 4.57472, 230),
('71522', 'Simandre', '31T', 652160, 5165134, 46.6225, 4.9875, 200),
('71523', 'Simard', '31T', 666618, 5176358, 46.72, 5.18027, 205),
('71524', 'Sivignon', '31T', 615231, 5142517, 46.4264, 4.49972, 360),
('71525', 'Sologny', '31T', 629413, 5135299, 46.3589, 4.68223, 310),
('71526', 'Solutré-Pouilly', '31T', 632899, 5128364, 46.2958, 4.72556, 330),
('71527', 'Sommant', '31T', 592542, 5211132, 47.0472, 4.21833, 350),
('71528', 'Sornay', '31T', 667045, 5166331, 46.6297, 5.18222, 179),
('71529', 'Suin', '31T', 613085, 5143125, 46.4322, 4.47195, 550),
('71530', 'Sully', '31T', 611824, 5207140, 47.0083, 4.47111, 315),
('71531', 'La Tagnière', '31T', 592884, 5182300, 46.7878, 4.21694, 320),
('71532', 'Taizé', '31T', 628777, 5152145, 46.5106, 4.67861, 240),
('71533', 'Tancon', '31T', 597402, 5117229, 46.2017, 4.2625, 394),
('71534', 'Le Tartre', '31T', 680494, 5179107, 46.7411, 5.36277, 200),
('71535', 'Tavernay', '31T', 593909, 5207448, 47.0139, 4.23556, 312),
('71537', 'Thil-sur-Arroux', '31T', 583578, 5183614, 46.8008, 4.09528, 290),
('71538', 'Thurey', '31T', 661986, 5178795, 46.7431, 5.12056, 200),
('71539', 'Tintry', '31T', 613762, 5198531, 46.9306, 4.49444, 440),
('71540', 'Torcy', '31T', 611153, 5180697, 46.7706, 4.45584, 310),
('71541', 'Torpes', '31T', 678231, 5190222, 46.8417, 5.3375, 200),
('71542', 'Toulon-sur-Arroux', '31T', 587184, 5171748, 46.6936, 4.14027, 260),
('71543', 'Tournus', '31T', 646478, 5158137, 46.5608, 4.91111, 180),
('71544', 'Toutenant', '31T', 661087, 5193257, 46.8733, 5.11389, 185),
('71545', 'Tramayes', '31T', 623180, 5129519, 46.3081, 4.59972, 480),
('71546', 'Trambly', '31T', 618050, 5131455, 46.3264, 4.53361, 320),
('71547', 'Trivy', '31T', 614761, 5138000, 46.3858, 4.4925, 380),
('71548', 'Tronchy', '31T', 658427, 5176847, 46.7264, 5.07333, 205),
('71549', 'La Truchère', '31T', 649772, 5153307, 46.5167, 4.9525, 173),
('71550', 'Uchizy', '31T', 644732, 5151857, 46.5047, 4.88638, 225),
('71551', 'Uchon', '31T', 595553, 5185152, 46.8131, 4.2525, 590),
('71552', 'Uxeau', '31T', 578395, 5168108, 46.6619, 4.02472, 386),
('71553', 'Vareilles', '31T', 597231, 5127970, 46.2983, 4.2625, 380),
('71554', 'Varenne-l''Arconce', '31T', 589167, 5132200, 46.3375, 4.15862, 330),
('71555', 'Varennes-le-Grand', '31T', 643525, 5174774, 46.7111, 4.87777, 187),
('71556', 'Varennes-lès-Mâcon', '31T', 638823, 5125779, 46.2714, 4.80167, 172),
('71557', 'Varenne-Saint-Germain', '31T', 578355, 5143256, 46.4383, 4.02, 241),
('71558', 'Varennes-Saint-Sauveur', '31T', 672235, 5149951, 46.4811, 5.24389, 208),
('71559', 'Varennes-sous-Dun', '31T', 602701, 5127195, 46.2906, 4.33333, 370),
('71561', 'Vauban', '31T', 594280, 5123725, 46.2606, 4.22334, 430),
('71562', 'Vaudebarrier', '31T', 600744, 5140685, 46.4122, 4.31083, 300),
('71563', 'Vaux-en-Pré', '31T', 622569, 5164954, 46.6269, 4.60111, 310),
('71564', 'Vendenesse-lès-Charolles', '31T', 602736, 5144114, 46.4428, 4.3375, 300),
('71565', 'Vendenesse-sur-Arroux', '31T', 581739, 5164448, 46.6286, 4.06778, 247),
('71566', 'Verdun-sur-le-Doubs', '31T', 654188, 5195485, 46.895, 5.02417, 176),
('71567', 'Vergisson', '31T', 632140, 5129799, 46.3089, 4.71611, 320),
('71568', 'Vérissey', '31T', 662039, 5175244, 46.7111, 5.12, 205),
('71570', 'Verjux', '31T', 650004, 5193463, 46.8778, 4.96861, 177),
('71571', 'Verosvres', '31T', 610973, 5139535, 46.4003, 4.44361, 372),
('71572', 'Vers', '31T', 642331, 5160570, 46.5836, 4.85778, 260),
('71573', 'Versaugues', '31T', 581821, 5134689, 46.3608, 4.06362, 270),
('71574', 'Verzé', '31T', 633452, 5137331, 46.3764, 4.73528, 290),
('71576', 'Le Villars', '31T', 648074, 5154717, 46.5297, 4.93083, 200),
('71577', 'Villegaudin', '31T', 660109, 5184675, 46.7964, 5.09806, 205),
('71578', 'La Villeneuve', '31T', 665343, 5202486, 46.9553, 5.17306, 188),
('71579', 'Villeneuve-en-Montagne', '31T', 622991, 5180742, 46.7689, 4.61084, 456),
('71580', 'Vincelles', '31T', 670954, 5169560, 46.6578, 5.23444, 189),
('71581', 'Vindecy', '31T', 577793, 5133742, 46.3528, 4.01111, 242),
('71582', 'La Vineuse', '31T', 622663, 5147695, 46.4717, 4.59777, 350),
('71583', 'Vinzelles', '31T', 636321, 5125630, 46.2706, 4.76917, 220),
('71584', 'Viré', '31T', 641639, 5145515, 46.4483, 4.84416, 230),
('71585', 'Virey-le-Grand', '31T', 642306, 5189446, 46.8433, 4.86639, 188),
('71586', 'Viry', '31T', 602554, 5147322, 46.4717, 4.33584, 290),
('71587', 'Vitry-lès-Cluny', '31T', 621855, 5149717, 46.49, 4.58778, 250),
('71588', 'Vitry-en-Charollais', '31T', 581383, 5145056, 46.4542, 4.05973, 260),
('71589', 'Vitry-sur-Loire', '31T', 554022, 5170032, 46.6817, 3.70639, 250),
('71590', 'Volesvres', '31T', 588862, 5147168, 46.4722, 4.1575, 270),
('71591', 'Fleurville', '31T', 644594, 5145152, 46.4444, 4.88251, 180),
('72001', 'Aigné', '31T', 285365, 5327634, 48.0658, 0.118886, 70),
('72002', 'Aillières-Beauvoir', '31T', 302359, 5365287, 48.4097, 0.329168, 250),
('72003', 'Allonnes', '31T', 287642, 5316915, 47.9703, 0.15472, 51),
('72004', 'Amné', '30T', 719342, 5324844, 48.0392, -0.0572175, 80),
('72005', 'Ancinnes', '31T', 291067, 5360994, 48.3675, 0.178895, 170),
('72006', 'Arçonnay', '31T', 284267, 5364185, 48.3939, 0.0855619, 140),
('72007', 'Ardenay-sur-Mérize', '31T', 307780, 5318957, 47.995, 0.423328, 90),
('72008', 'Arnage', '31T', 289652, 5312266, 47.9292, 0.18389, 40),
('72009', 'Arthezé', '30T', 715790, 5296702, 47.7875, -0.118893, 54),
('72010', 'Asnières-sur-Vègre', '30T', 706759, 5307500, 47.8875, -0.234165, 40),
('72011', 'Assé-le-Boisne', '30T', 721798, 5356535, 48.3231, -0.0077731, 140),
('72012', 'Assé-le-Riboul', '31T', 283446, 5342050, 48.1947, 0.0858349, 90),
('72013', 'Aubigné-Racan', '31T', 294980, 5285524, 47.6906, 0.267779, 55),
('72015', 'Les Aulneaux', '31T', 302809, 5368177, 48.4358, 0.333883, 160),
('72016', 'Auvers-le-Hamon', '30T', 698075, 5309142, 47.905, -0.349447, 60),
('72017', 'Auvers-sous-Montfaucon', '30T', 718571, 5321136, 48.0061, -0.0694382, 63),
('72018', 'Avesnes-en-Saosnois', '31T', 304907, 5348972, 48.2639, 0.371116, 69),
('72019', 'Avessé', '30T', 705383, 5315178, 47.9569, -0.248891, 80),
('72020', 'Avezé', '31T', 327560, 5344131, 48.2269, 0.67806, 90),
('72021', 'Avoise', '30T', 709068, 5305172, 47.8658, -0.204442, 40),
('72022', 'Le Bailleul', '30T', 712934, 5294495, 47.7686, -0.158058, 56),
('72023', 'Ballon', '31T', 294515, 5339508, 48.1756, 0.235835, 90),
('72024', 'La Bazoge', '31T', 288401, 5331292, 48.0997, 0.157775, 90),
('72025', 'Bazouges-sur-le-Loir', '30T', 712447, 5285605, 47.6889, -0.168886, 30),
('72026', 'Beaufay', '31T', 303845, 5336089, 48.1478, 0.362777, 90),
('72027', 'Beaumont-sur-Dême', '31T', 317610, 5285264, 47.695, 0.569172, 70),
('72029', 'Beaumont-sur-Sarthe', '31T', 286716, 5345482, 48.2267, 0.128056, 70),
('72031', 'Beillé', '31T', 314830, 5328491, 48.0828, 0.513616, 70),
('72032', 'Berfay', '31T', 333266, 5318131, 47.9947, 0.764994, 140),
('72033', 'Bernay', '30T', 719095, 5328575, 48.0728, -0.0586164, 85),
('72034', 'Bérus', '31T', 281612, 5362092, 48.3742, 0.0508309, 160),
('72035', 'Bessé-sur-Braye', '31T', 331816, 5300376, 47.8347, 0.7525, 80),
('72036', 'Béthon', '31T', 284223, 5360322, 48.3592, 0.0869508, 153),
('72037', 'Blèves', '31T', 303841, 5370645, 48.4583, 0.346665, 145),
('72038', 'Boëssé-le-Sec', '31T', 318922, 5334139, 48.1347, 0.566112, 90),
('72039', 'Bonnétable', '31T', 308648, 5339326, 48.1783, 0.425826, 100),
('72040', 'La Bosse', '31T', 316133, 5338122, 48.1697, 0.52694, 175),
('72041', 'Bouër', '31T', 323474, 5328157, 48.0822, 0.629716, 120),
('72042', 'Bouloire', '31T', 317565, 5316166, 47.9728, 0.555553, 130),
('72043', 'Bourg-le-Roi', '31T', 287501, 5358746, 48.3461, 0.131942, 110),
('72044', 'Bousse', '30T', 720423, 5294867, 47.7694, -0.0580502, 60),
('72045', 'Brains-sur-Gée', '30T', 721865, 5322313, 48.0156, -0.0247253, 110),
('72046', 'Le Breil-sur-Mérize', '31T', 311846, 5320213, 48.0075, 0.477226, 104),
('72047', 'Brette-les-Pins', '31T', 300874, 5310013, 47.9125, 0.334996, 100),
('72048', 'Briosne-lès-Sables', '31T', 306545, 5338871, 48.1736, 0.397773, 100),
('72049', 'La Bruère-sur-Loir', '31T', 300979, 5280958, 47.6514, 0.349716, 50),
('72050', 'Brûlon', '30T', 706483, 5316361, 47.9672, -0.233606, 100),
('72051', 'Cérans-Foulletourte', '31T', 281155, 5301299, 47.8278, 0.075839, 65),
('72052', 'Chahaignes', '31T', 313694, 5290672, 47.7425, 0.514718, 63),
('72053', 'Challes', '31T', 306940, 5311846, 47.9308, 0.415273, 90),
('72054', 'Champagné', '31T', 301244, 5322518, 48.025, 0.334161, 55),
('72056', 'Champfleur', '31T', 287294, 5363112, 48.3853, 0.126944, 146),
('72057', 'Champrond', '31T', 332367, 5328507, 48.0878, 0.748891, 122),
('72058', 'Changé', '31T', 297311, 5318575, 47.9883, 0.283333, 61),
('72059', 'Chantenay-Villedieu', '30T', 712268, 5311471, 47.9214, -0.158609, 50),
('72060', 'La Chapelle-aux-Choux', '31T', 292108, 5279321, 47.6339, 0.232501, 40),
('72061', 'La Chapelle-d''Aligné', '30T', 707417, 5290276, 47.7325, -0.233613, 50),
('72062', 'La Chapelle-du-Bois', '31T', 321266, 5343584, 48.2203, 0.593617, 157),
('72063', 'La Chapelle-Gaugain', '31T', 326272, 5296585, 47.7992, 0.679995, 91),
('72064', 'La Chapelle-Huon', '31T', 330971, 5302780, 47.8561, 0.740278, 100),
('72065', 'La Chapelle-Saint-Aubin', '31T', 288377, 5323905, 48.0333, 0.161109, 78),
('72066', 'La Chapelle-Saint-Fray', '31T', 282720, 5332741, 48.1108, 0.0808305, 130),
('72067', 'La Chapelle-Saint-Rémy', '31T', 310866, 5331371, 48.1075, 0.459167, 90),
('72068', 'La Chartre-sur-le-Loir', '31T', 318103, 5289018, 47.7289, 0.574169, 60),
('72069', 'Chassé', '31T', 293255, 5369600, 48.4456, 0.204162, 141),
('72070', 'Chassillé', '30T', 715131, 5322675, 48.0211, -0.114728, 80),
('72071', 'Château-du-Loir', '31T', 306252, 5285663, 47.6953, 0.417773, 60),
('72072', 'Château-l''Hermitage', '31T', 288980, 5298412, 47.8044, 0.181667, 80),
('72073', 'Chaufour-Notre-Dame', '31T', 281694, 5323197, 48.0247, 0.0719373, 102),
('72074', 'Chemiré-en-Charnie', '30T', 708535, 5326141, 48.0544, -0.201393, 130),
('72075', 'Chemiré-le-Gaudin', '30T', 722757, 5312671, 47.9286, -0.0177768, 40),
('72076', 'Chenay', '31T', 290210, 5370114, 48.4492, 0.162779, 150),
('72077', 'Chenu', '31T', 299893, 5276699, 47.6128, 0.337217, 70),
('72078', 'Chérancé', '31T', 290301, 5351964, 48.2861, 0.173056, 88),
('72079', 'Chérisay', '31T', 285972, 5359730, 48.3544, 0.110832, 110),
('72080', 'Cherré', '31T', 325806, 5338097, 48.1722, 0.656939, 95),
('72081', 'Cherreau', '31T', 327833, 5340198, 48.1917, 0.683329, 122),
('72082', 'Le Chevain', '31T', 287409, 5368363, 48.4325, 0.125836, 135),
('72083', 'Chevillé', '30T', 707386, 5314323, 47.9486, -0.222505, 80),
('72084', 'Clermont-Créans', '30T', 724051, 5289411, 47.7192, -0.0125043, 40);
INSERT INTO `ods_communes` (`oc_code_insee`, `oc_nom`, `oc_secteur`, `oc_x_utm`, `oc_y_utm`, `oc_latitude`, `oc_longitude`, `oc_altitude`) VALUES
('72085', 'Cogners', '31T', 325115, 5304437, 47.8694, 0.661386, 130),
('72086', 'Commerveil', '31T', 304061, 5354966, 48.3175, 0.356949, 105),
('72087', 'Conflans-sur-Anille', '31T', 331641, 5312895, 47.9472, 0.74528, 120),
('72088', 'Congé-sur-Orne', '31T', 295933, 5342177, 48.2, 0.253605, 58),
('72089', 'Conlie', '30T', 721953, 5334497, 48.125, -0.0172218, 120),
('72090', 'Connerré', '31T', 313319, 5325975, 48.0597, 0.494446, 67),
('72091', 'Contilly', '31T', 305307, 5364258, 48.4014, 0.369439, 180),
('72093', 'Cormes', '31T', 329369, 5337650, 48.1692, 0.705003, 120),
('72094', 'Coudrecieux', '31T', 323287, 5318027, 47.9911, 0.631388, 150),
('72095', 'Coulaines', '31T', 291491, 5322864, 48.025, 0.203337, 53),
('72096', 'Coulans-sur-Gée', '31T', 276992, 5322790, 48.0194, 0.0091708, 100),
('72097', 'Coulombiers', '31T', 286998, 5353571, 48.2994, 0.127776, 90),
('72098', 'Coulongé', '31T', 289917, 5285767, 47.6911, 0.200272, 55),
('72100', 'Courcelles-la-Forêt', '30T', 723290, 5296708, 47.785, -0.0188917, 83),
('72101', 'Courcemont', '31T', 303363, 5338918, 48.1731, 0.354996, 86),
('72102', 'Courcival', '31T', 306776, 5345076, 48.2294, 0.398052, 84),
('72103', 'Courdemanche', '31T', 317507, 5298554, 47.8144, 0.562223, 87),
('72104', 'Courgains', '31T', 298205, 5352049, 48.2894, 0.279442, 95),
('72105', 'Courgenard', '31T', 331587, 5335761, 48.1528, 0.735559, 140),
('72106', 'Courtillers', '30T', 702096, 5297568, 47.7997, -0.301108, 45),
('72107', 'Crannes-en-Champagne', '30T', 719961, 5318406, 47.9811, -0.0522255, 68),
('72108', 'Cré', '30T', 713429, 5284436, 47.6781, -0.156387, 26),
('72109', 'Crissé', '30T', 718644, 5339285, 48.1692, -0.0591707, 138),
('72110', 'Crosmières', '30T', 713582, 5292169, 47.7475, -0.150563, 59),
('72111', 'Cures', '30T', 722967, 5331847, 48.1008, -0.00499931, 130),
('72112', 'Dangeul', '31T', 296556, 5347472, 48.2478, 0.259439, 90),
('72113', 'Degré', '31T', 281636, 5326012, 48.05, 0.0697253, 100),
('72114', 'Dehault', '31T', 319664, 5342583, 48.2108, 0.572494, 130),
('72115', 'Dissay-sous-Courcillon', '31T', 310186, 5282164, 47.665, 0.471672, 57),
('72116', 'Dissé-sous-Ballon', '31T', 299483, 5346162, 48.2369, 0.299442, 72),
('72117', 'Dissé-sous-le-Lude', '31T', 286138, 5276631, 47.6078, 0.15444, 50),
('72118', 'Dollon', '31T', 320259, 5323343, 48.0381, 0.58861, 120),
('72119', 'Domfront-en-Champagne', '31T', 278646, 5332310, 48.1056, 0.0263954, 127),
('72120', 'Doucelles', '31T', 289872, 5348734, 48.2569, 0.168885, 85),
('72121', 'Douillet', '30T', 719292, 5350935, 48.2736, -0.0444422, 100),
('72122', 'Duneau', '31T', 315401, 5326959, 48.0692, 0.521937, 101),
('72123', 'Dureil', '30T', 713491, 5302552, 47.8408, -0.146668, 30),
('72124', 'Écommoy', '31T', 296036, 5300693, 47.8272, 0.27472, 95),
('72125', 'Écorpain', '31T', 325573, 5311994, 47.9375, 0.664449, 160),
('72126', 'Épineu-le-Chevreuil', '30T', 715166, 5324531, 48.0378, -0.113327, 90),
('72127', 'Étival-lès-le-Mans', '31T', 282527, 5315591, 47.9567, 0.0869472, 52),
('72128', 'Évaillé', '31T', 323044, 5308085, 47.9017, 0.632221, 130),
('72129', 'Fatines', '31T', 302503, 5324761, 48.0456, 0.349995, 59),
('72130', 'Fay', '31T', 281583, 5321346, 48.0081, 0.0713933, 80),
('72131', 'Fercé-sur-Sarthe', '30T', 721729, 5309694, 47.9022, -0.0330513, 50),
('72132', 'La Ferté-Bernard', '31T', 325158, 5339878, 48.1881, 0.647497, 83),
('72133', 'Fillé', '31T', 285047, 5309129, 47.8994, 0.123882, 40),
('72134', 'Flée', '31T', 309080, 5289803, 47.7333, 0.453612, 72),
('72135', 'La Fontaine-Saint-Martin', '31T', 278981, 5297270, 47.7908, 0.0488836, 75),
('72136', 'Fontenay-sur-Vègre', '30T', 707795, 5309330, 47.9036, -0.219442, 50),
('72137', 'La Fresnaye-sur-Chédouet', '31T', 296956, 5369559, 48.4464, 0.254171, 159),
('72138', 'Fresnay-sur-Sarthe', '31T', 278878, 5352181, 48.2842, 0.0191607, 90),
('72139', 'Fyé', '31T', 283488, 5356733, 48.3267, 0.0788862, 100),
('72141', 'Gesnes-le-Gandelin', '31T', 278998, 5360029, 48.3547, 0.0166639, 170),
('72142', 'Grandchamp', '31T', 291012, 5353917, 48.3039, 0.181663, 90),
('72143', 'Le Grand-Lucé', '31T', 310767, 5304395, 47.865, 0.469725, 121),
('72144', 'Gréez-sur-Roc', '31T', 335939, 5333966, 48.1378, 0.794721, 170),
('72145', 'Le Grez', '30T', 711761, 5341437, 48.1908, -0.150556, 230),
('72146', 'Guécélard', '31T', 285115, 5306468, 47.8756, 0.126115, 40),
('72147', 'La Guierche', '31T', 291365, 5332512, 48.1117, 0.196941, 55),
('72148', 'Jauzé', '31T', 305180, 5343090, 48.2111, 0.377496, 80),
('72149', 'Joué-en-Charnie', '30T', 709534, 5322066, 48.0175, -0.189996, 101),
('72150', 'Joué-l''Abbé', '31T', 292973, 5332331, 48.1106, 0.218607, 60),
('72151', 'Juigné-sur-Sarthe', '30T', 702953, 5304583, 47.8625, -0.286389, 50),
('72152', 'Juillé', '31T', 286321, 5347630, 48.2458, 0.121661, 70),
('72153', 'Jupilles', '31T', 306257, 5296417, 47.7919, 0.413052, 150),
('72154', 'La Flèche', '30T', 719741, 5286990, 47.6989, -0.0711157, 30),
('72155', 'Laigné-en-Belin', '31T', 292666, 5306532, 47.8786, 0.226947, 65),
('72156', 'Lamnay', '31T', 329217, 5331876, 48.1172, 0.705277, 140),
('72157', 'Lavardin', '31T', 281253, 5329025, 48.0769, 0.0630517, 120),
('72158', 'Lavaré', '31T', 324491, 5324850, 48.0528, 0.644718, 113),
('72159', 'Lavenay', '31T', 327849, 5295704, 47.7917, 0.701386, 70),
('72160', 'Lavernat', '31T', 300001, 5288316, 47.7172, 0.333336, 103),
('72161', 'Lhomme', '31T', 316929, 5290786, 47.7444, 0.557784, 55),
('72162', 'Lignières-la-Carelle', '31T', 290976, 5368571, 48.4356, 0.173895, 150),
('72163', 'Ligron', '31T', 275765, 5295447, 47.7733, 0.00694389, 95),
('72164', 'Livet-en-Saosnois', '31T', 293565, 5360037, 48.3597, 0.213051, 194),
('72165', 'Lombron', '31T', 307762, 5328322, 48.0792, 0.418884, 90),
('72166', 'Longnes', '30T', 717894, 5322563, 48.0192, -0.0777781, 70),
('72167', 'Louailles', '30T', 705849, 5296835, 47.7919, -0.251395, 45),
('72168', 'Loué', '30T', 712658, 5319461, 47.9931, -0.149446, 80),
('72169', 'Louplande', '31T', 279137, 5314391, 47.9447, 0.0422161, 78),
('72170', 'Louvigny', '31T', 292720, 5357749, 48.3389, 0.202784, 140),
('72171', 'Louzes', '31T', 300480, 5367455, 48.4286, 0.302774, 200),
('72172', 'Le Luart', '31T', 320182, 5326837, 48.0694, 0.586109, 94),
('72173', 'Luceau', '31T', 304710, 5287568, 47.7119, 0.39639, 90),
('72174', 'Lucé-sous-Ballon', '31T', 293171, 5342926, 48.2058, 0.216113, 65),
('72175', 'Luché-Pringé', '31T', 280759, 5287527, 47.7039, 0.0775012, 40),
('72176', 'Le Lude', '31T', 286236, 5280986, 47.6469, 0.153617, 50),
('72177', 'Maigné', '30T', 720104, 5313589, 47.9378, -0.0527766, 50),
('72178', 'Maisoncelles', '31T', 318766, 5312111, 47.9367, 0.573339, 141),
('72179', 'Malicorne-sur-Sarthe', '30T', 718130, 5299850, 47.815, -0.0861093, 40),
('72180', 'Mamers', '31T', 305046, 5358456, 48.3492, 0.368606, 120),
('72181', 'Le Mans', '31T', 291355, 5319684, 47.9964, 0.203062, 50),
('72182', 'Mansigné', '31T', 285377, 5292208, 47.7475, 0.136673, 60),
('72183', 'Marçon', '31T', 313454, 5287095, 47.7103, 0.513052, 55),
('72184', 'Mareil-en-Champagne', '30T', 711350, 5318362, 47.9836, -0.167497, 70),
('72185', 'Mareil-sur-Loir', '31T', 275871, 5289012, 47.7156, 0.0116709, 41),
('72186', 'Maresché', '31T', 288547, 5343621, 48.2106, 0.153607, 65),
('72187', 'Marigné-Laillé', '31T', 300931, 5299596, 47.8189, 0.340555, 110),
('72188', 'Marollette', '31T', 303830, 5360816, 48.37, 0.351112, 174),
('72189', 'Marolles-les-Braults', '31T', 300597, 5347885, 48.2528, 0.313617, 85),
('72190', 'Marolles-lès-Saint-Calais', '31T', 334582, 5309781, 47.92, 0.785833, 140),
('72191', 'Mayet', '31T', 295756, 5293347, 47.7611, 0.274441, 80),
('72192', 'Les Mées', '31T', 294786, 5355046, 48.3153, 0.231946, 100),
('72193', 'Melleray', '31T', 336188, 5329664, 48.0992, 0.799719, 165),
('72194', 'Meurcé', '31T', 292254, 5346112, 48.2342, 0.202225, 65),
('72195', 'Mézeray', '30T', 723112, 5301339, 47.8267, -0.0188827, 40),
('72196', 'Mézières-sur-Ponthouin', '31T', 299396, 5341343, 48.1936, 0.300551, 70),
('72197', 'Mézières-sous-Lavardin', '31T', 279172, 5337886, 48.1558, 0.0305622, 80),
('72198', 'La Milesse', '31T', 286380, 5327627, 48.0661, 0.132496, 62),
('72199', 'Moitron-sur-Sarthe', '31T', 279845, 5347289, 48.2406, 0.0347237, 120),
('72200', 'Moncé-en-Belin', '31T', 291089, 5308350, 47.8944, 0.205002, 58),
('72201', 'Moncé-en-Saosnois', '31T', 306472, 5350093, 48.2744, 0.391669, 72),
('72202', 'Monhoudou', '31T', 301781, 5351676, 48.2872, 0.327773, 125),
('72203', 'Montabon', '31T', 303842, 5284106, 47.6806, 0.386387, 50),
('72204', 'Montaillé', '31T', 328427, 5311630, 47.935, 0.702777, 126),
('72205', 'Montbizot', '31T', 290408, 5336319, 48.1456, 0.182228, 60),
('72207', 'Montigny', '31T', 291986, 5370883, 48.4567, 0.186386, 153),
('72208', 'Montmirail', '31T', 335514, 5329961, 48.1017, 0.790558, 210),
('72209', 'Montreuil-le-Chétif', '30T', 720106, 5348029, 48.2472, -0.0349981, 177),
('72210', 'Montreuil-le-Henri', '31T', 317791, 5304262, 47.8658, 0.563611, 150),
('72211', 'Mont-Saint-Jean', '30T', 714851, 5347767, 48.2467, -0.105825, 195),
('72212', 'Moulins-le-Carbonnel', '30T', 720432, 5361954, 48.3722, -0.0233391, 186),
('72213', 'Mulsanne', '31T', 294404, 5309807, 47.9086, 0.248605, 70),
('72214', 'Nauvay', '31T', 306854, 5347978, 48.2556, 0.397778, 70),
('72215', 'Neufchâtel-en-Saosnois', '31T', 296182, 5361766, 48.3761, 0.247502, 160),
('72216', 'Neuvillalais', '31T', 276947, 5338127, 48.1572, 0.000558999, 100),
('72217', 'Neuville-sur-Sarthe', '31T', 290744, 5328547, 48.0758, 0.190552, 52),
('72218', 'Neuvillette-en-Charnie', '30T', 707675, 5330437, 48.0933, -0.210833, 150),
('72219', 'Neuvy-en-Champagne', '30T', 720504, 5329649, 48.0819, -0.0391723, 88),
('72220', 'Nogent-le-Bernard', '31T', 313730, 5345555, 48.2358, 0.491389, 110),
('72221', 'Nogent-sur-Loir', '31T', 304448, 5282880, 47.6697, 0.395002, 45),
('72222', 'Nouans', '31T', 293736, 5346553, 48.2386, 0.221944, 60),
('72223', 'Noyen-sur-Sarthe', '30T', 717042, 5306084, 47.8714, -0.0974981, 35),
('72224', 'Nuillé-le-Jalais', '31T', 312219, 5321468, 48.0189, 0.481673, 115),
('72225', 'Oisseau-le-Petit', '31T', 284197, 5359117, 48.3483, 0.0872179, 130),
('72226', 'Oizé', '31T', 283249, 5299428, 47.8117, 0.104717, 80),
('72227', 'Panon', '31T', 299615, 5357502, 48.3389, 0.295839, 120),
('72228', 'Parcé-sur-Sarthe', '30T', 709516, 5302561, 47.8422, -0.199723, 43),
('72229', 'Parennes', '30T', 709517, 5333286, 48.1183, -0.184726, 140),
('72230', 'Parigné-le-Pôlin', '31T', 283724, 5303768, 47.8508, 0.108887, 74),
('72231', 'Parigné-l''Évêque', '31T', 303353, 5312617, 47.9367, 0.366949, 100),
('72232', 'Notre-Dame-du-Pé', '30T', 700696, 5289885, 47.7311, -0.32333, 67),
('72233', 'Peray', '31T', 304566, 5347469, 48.2503, 0.367221, 80),
('72234', 'Pezé-le-Robert', '30T', 718472, 5342154, 48.195, -0.060006, 150),
('72235', 'Piacé', '31T', 285886, 5349223, 48.26, 0.115003, 70),
('72236', 'Pincé', '30T', 696245, 5296934, 47.7958, -0.379446, 27),
('72237', 'Pirmil', '30T', 716849, 5310652, 47.9125, -0.0977812, 60),
('72238', 'Pizieux', '31T', 302186, 5355588, 48.3225, 0.331393, 127),
('72239', 'Poillé-sur-Vègre', '30T', 704489, 5311128, 47.9208, -0.262775, 70),
('72240', 'Poncé-sur-le-Loir', '31T', 324280, 5292659, 47.7633, 0.655005, 80),
('72241', 'Montfort-le-Gesnois', '31T', 307454, 5324686, 48.0464, 0.41639, 70),
('72243', 'Pontvallain', '31T', 289562, 5292641, 47.7528, 0.192227, 55),
('72244', 'Précigné', '30T', 700561, 5293775, 47.7661, -0.323335, 30),
('72245', 'Préval', '31T', 323582, 5345026, 48.2339, 0.62417, 95),
('72246', 'Prévelles', '31T', 312783, 5336191, 48.1514, 0.482776, 114),
('72247', 'Pruillé-le-Chétif', '31T', 284259, 5319699, 47.9942, 0.108054, 95),
('72248', 'Pruillé-l''Éguillé', '31T', 307820, 5301464, 47.8378, 0.431662, 120),
('72249', 'La Quinte', '31T', 279333, 5327028, 48.0583, 0.0383394, 113),
('72250', 'Rahay', '31T', 338199, 5314344, 47.9619, 0.832496, 140),
('72251', 'René', '31T', 293836, 5351031, 48.2789, 0.221108, 86),
('72252', 'Requeil', '31T', 287548, 5296270, 47.7847, 0.163615, 80),
('72253', 'Roézé-sur-Sarthe', '31T', 280834, 5308762, 47.8947, 0.0677733, 40),
('72254', 'Rouessé-Fontaine', '31T', 288868, 5356160, 48.3233, 0.151664, 100),
('72255', 'Rouessé-Vassé', '30T', 708379, 5337820, 48.1594, -0.19778, 150),
('72256', 'Rouez', '30T', 714692, 5336044, 48.1414, -0.113891, 120),
('72257', 'Rouillon', '31T', 286439, 5320855, 48.0053, 0.136663, 97),
('72258', 'Roullée', '31T', 300747, 5371526, 48.4653, 0.304442, 144),
('72259', 'Rouperroux-le-Coquet', '31T', 309243, 5344745, 48.2272, 0.431387, 80),
('72260', 'Ruaudin', '31T', 295648, 5313812, 47.945, 0.263334, 55),
('72261', 'Ruillé-en-Champagne', '30T', 717550, 5327249, 48.0614, -0.0800048, 90),
('72262', 'Ruillé-sur-Loir', '31T', 321645, 5291658, 47.7536, 0.620282, 59),
('72264', 'Sablé-sur-Sarthe', '30T', 699688, 5302151, 47.8417, -0.331117, 30),
('72265', 'Saint-Aignan', '31T', 302638, 5343641, 48.2153, 0.343059, 65),
('72266', 'Saint-Aubin-de-Locquenay', '31T', 279251, 5350620, 48.2703, 0.024997, 78),
('72267', 'Saint-Aubin-des-Coudrais', '31T', 320645, 5338288, 48.1725, 0.587501, 105),
('72268', 'Saint-Biez-en-Belin', '31T', 293376, 5300232, 47.8222, 0.239441, 70),
('72269', 'Saint-Calais', '31T', 331579, 5310054, 47.9217, 0.745562, 100),
('72270', 'Saint-Calez-en-Saosnois', '31T', 300171, 5354576, 48.3128, 0.30472, 140),
('72271', 'Saint-Célerin', '31T', 308879, 5333230, 48.1236, 0.431668, 100),
('72272', 'Sainte-Cérotte', '31T', 327278, 5307926, 47.9014, 0.68889, 160),
('72273', 'Saint-Christophe-du-Jambet', '31T', 279970, 5346264, 48.2314, 0.0369372, 150),
('72274', 'Saint-Christophe-en-Champagne', '30T', 713609, 5316776, 47.9686, -0.138049, 90),
('72275', 'Saint-Corneille', '31T', 302211, 5327089, 48.0664, 0.345005, 60),
('72276', 'Saint-Cosme-en-Vairais', '31T', 311580, 5349829, 48.2736, 0.46056, 81),
('72277', 'Saint-Denis-des-Coudrais', '31T', 314641, 5336100, 48.1511, 0.507773, 120),
('72278', 'Saint-Denis-d''Orques', '30T', 703382, 5323020, 48.0281, -0.271948, 130),
('72279', 'Saint-Georges-de-la-Couée', '31T', 319160, 5301500, 47.8414, 0.583054, 85),
('72280', 'Saint-Georges-du-Bois', '31T', 283682, 5317588, 47.975, 0.101393, 81),
('72281', 'Saint-Georges-du-Rosay', '31T', 314507, 5341512, 48.1997, 0.503611, 146),
('72282', 'Saint-Georges-le-Gaultier', '30T', 714554, 5353444, 48.2978, -0.10694, 142),
('72283', 'Saint-Germain-d''Arcé', '31T', 296488, 5277930, 47.6228, 0.291387, 50),
('72284', 'Saint-Germain-sur-Sarthe', '31T', 284572, 5352147, 48.2858, 0.0958323, 80),
('72286', 'Saint-Gervais-de-Vic', '31T', 331116, 5306329, 47.8881, 0.740828, 90),
('72287', 'Saint-Gervais-en-Belin', '31T', 291957, 5306495, 47.8781, 0.217494, 60),
('72288', 'Saint-Hilaire-le-Lierru', '31T', 316744, 5331365, 48.1092, 0.538058, 90),
('72289', 'Sainte-Jamme-sur-Sarthe', '31T', 289345, 5336110, 48.1433, 0.168058, 56),
('72290', 'Saint-Jean-d''Assé', '31T', 285850, 5337260, 48.1525, 0.120556, 76),
('72291', 'Saint-Jean-de-la-Motte', '31T', 279366, 5292062, 47.7442, 0.056661, 88),
('72292', 'Saint-Jean-des-Échelles', '31T', 329837, 5333248, 48.1297, 0.713053, 140),
('72293', 'Saint-Jean-du-Bois', '30T', 721409, 5306096, 47.87, -0.039172, 60),
('72294', 'Saint-Léonard-des-Bois', '30T', 716568, 5359579, 48.3522, -0.0766687, 106),
('72295', 'Saint-Longis', '31T', 303425, 5359223, 48.3556, 0.346393, 146),
('72296', 'Saint-Maixent', '31T', 325258, 5328936, 48.0897, 0.653331, 105),
('72297', 'Saint-Marceau', '31T', 286521, 5340265, 48.1797, 0.128058, 65),
('72298', 'Saint-Mars-de-Locquenay', '31T', 312118, 5311397, 47.9283, 0.484723, 110),
('72299', 'Saint-Mars-d''Outillé', '31T', 300466, 5305422, 47.8711, 0.331664, 100),
('72300', 'Saint-Mars-la-Brière', '31T', 304093, 5322760, 48.0281, 0.372221, 60),
('72301', 'Saint-Mars-sous-Ballon', '31T', 295309, 5339170, 48.1728, 0.246666, 97),
('72302', 'Saint-Martin-des-Monts', '31T', 321204, 5335674, 48.1492, 0.596112, 100),
('72303', 'Saint-Michel-de-Chavaignes', '31T', 319046, 5321033, 48.0169, 0.573327, 109),
('72304', 'Sainte-Osmane', '31T', 321306, 5306995, 47.8914, 0.609438, 129),
('72305', 'Saint-Ouen-de-Mimbré', '31T', 281105, 5353207, 48.2942, 0.0486086, 90),
('72306', 'Saint-Ouen-en-Belin', '31T', 291322, 5301572, 47.8336, 0.211386, 60),
('72307', 'Saint-Ouen-en-Champagne', '30T', 709908, 5314661, 47.9508, -0.188606, 85),
('72308', 'Saint-Paterne', '31T', 286162, 5366401, 48.4144, 0.11, 135),
('72309', 'Saint-Paul-le-Gaultier', '30T', 714660, 5356075, 48.3214, -0.104174, 100),
('72310', 'Saint-Pavace', '31T', 290549, 5324907, 48.0431, 0.189719, 50),
('72311', 'Saint-Pierre-de-Chevillé', '31T', 307570, 5280087, 47.6456, 0.437777, 86),
('72312', 'Saint-Pierre-des-Bois', '30T', 713602, 5313591, 47.94, -0.139724, 60),
('72313', 'Saint-Pierre-des-Ormes', '31T', 308896, 5353473, 48.3056, 0.422776, 90),
('72314', 'Saint-Pierre-du-Lorouër', '31T', 314544, 5297690, 47.8058, 0.52305, 74),
('72315', 'Saint-Rémy-de-Sillé', '30T', 716174, 5341170, 48.1869, -0.0913896, 170),
('72316', 'Saint-Rémy-des-Monts', '31T', 307260, 5353868, 48.3086, 0.400556, 110),
('72317', 'Saint-Rémy-du-Val', '31T', 296673, 5358812, 48.3497, 0.255552, 150),
('72318', 'Saint-Rigomer-des-Bois', '31T', 290553, 5363269, 48.3878, 0.17083, 210),
('72319', 'Sainte-Sabine-sur-Longève', '31T', 283965, 5336095, 48.1414, 0.0958349, 100),
('72320', 'Saint-Saturnin', '31T', 287670, 5326651, 48.0578, 0.150275, 70),
('72321', 'Saint-Symphorien', '30T', 715064, 5328330, 48.0719, -0.112785, 120),
('72322', 'Saint-Ulphace', '31T', 337697, 5336171, 48.1581, 0.817493, 160),
('72323', 'Saint-Victeur', '31T', 280526, 5356383, 48.3225, 0.039161, 125),
('72324', 'Saint-Vincent-des-Prés', '31T', 306119, 5352454, 48.2956, 0.385833, 100),
('72325', 'Saint-Vincent-du-Lorouër', '31T', 312077, 5299934, 47.8253, 0.489161, 82),
('72326', 'Saosnes', '31T', 298310, 5356157, 48.3264, 0.278893, 110),
('72327', 'Sarcé', '31T', 291622, 5289074, 47.7214, 0.221386, 80),
('72328', 'Sargé-lès-le-Mans', '31T', 294254, 5323599, 48.0325, 0.239999, 102),
('72329', 'Savigné-l''Évêque', '31T', 298898, 5328317, 48.0764, 0.300006, 60),
('72330', 'Savigné-sous-le-Lude', '31T', 278877, 5278077, 47.6183, 0.0572282, 60),
('72331', 'Sceaux-sur-Huisne', '31T', 320161, 5330794, 48.105, 0.584161, 90),
('72332', 'Ségrie', '31T', 278911, 5342904, 48.2008, 0.0244473, 90),
('72333', 'Semur-en-Vallon', '31T', 325118, 5321617, 48.0239, 0.654445, 120),
('72334', 'Sillé-le-Guillaume', '30T', 713518, 5340885, 48.1853, -0.127222, 173),
('72335', 'Sillé-le-Philippe', '31T', 302971, 5331730, 48.1083, 0.353054, 90),
('72336', 'Solesmes', '30T', 702022, 5303252, 47.8508, -0.299444, 30),
('72337', 'Sougé-le-Ganelon', '30T', 720171, 5355946, 48.3183, -0.0299993, 150),
('72338', 'Souillé', '31T', 290338, 5333292, 48.1183, 0.182777, 55),
('72339', 'Souligné-Flacé', '31T', 277027, 5317811, 47.9747, 0.0122258, 76),
('72340', 'Souligné-sous-Ballon', '31T', 294430, 5335431, 48.1389, 0.236663, 70),
('72341', 'Soulitré', '31T', 310345, 5320603, 48.0106, 0.456949, 95),
('72342', 'Souvigné-sur-Même', '31T', 324627, 5343448, 48.22, 0.638884, 100),
('72343', 'Souvigné-sur-Sarthe', '30T', 695505, 5300339, 47.8267, -0.387781, 34),
('72344', 'Spay', '31T', 287265, 5311767, 47.9239, 0.15222, 42),
('72345', 'Surfonds', '31T', 310446, 5316767, 47.9761, 0.459996, 100),
('72346', 'La Suze-sur-Sarthe', '31T', 277822, 5308289, 47.8894, 0.0277748, 38),
('72347', 'Tassé', '30T', 714100, 5308015, 47.8897, -0.135833, 60),
('72348', 'Tassillé', '30T', 716908, 5319558, 47.9925, -0.0925031, 90),
('72349', 'Teillé', '31T', 290945, 5340256, 48.1811, 0.187503, 70),
('72350', 'Teloché', '31T', 295880, 5307468, 47.8881, 0.269441, 70),
('72351', 'Tennie', '30T', 717746, 5332450, 48.1081, -0.0747267, 100),
('72352', 'Terrehault', '31T', 306990, 5342225, 48.2039, 0.402228, 75),
('72353', 'Théligny', '31T', 336387, 5338062, 48.1747, 0.799163, 163),
('72354', 'Thoigné', '31T', 296370, 5352084, 48.2892, 0.254715, 114),
('72355', 'Thoiré-sous-Contensor', '31T', 292492, 5354913, 48.3133, 0.201107, 90),
('72356', 'Thoiré-sur-Dinan', '31T', 308717, 5292071, 47.7536, 0.447778, 110),
('72357', 'Thorée-les-Pins', '31T', 278045, 5285868, 47.6881, 0.0422168, 45),
('72358', 'Thorigné-sur-Dué', '31T', 316390, 5323528, 48.0386, 0.536673, 90),
('72359', 'Torcé-en-Vallée', '31T', 306229, 5334400, 48.1333, 0.395562, 85),
('72360', 'Trangé', '31T', 284788, 5323297, 48.0267, 0.113331, 100),
('72361', 'Tresson', '31T', 318647, 5308345, 47.9028, 0.573331, 118),
('72362', 'Le Tronchet', '31T', 282626, 5340597, 48.1814, 0.0755586, 90),
('72363', 'Tuffé', '31T', 315209, 5331909, 48.1136, 0.51722, 92),
('72364', 'Vaas', '31T', 298650, 5283047, 47.6694, 0.317774, 45),
('72366', 'Valennes', '31T', 336586, 5318190, 47.9961, 0.809441, 120),
('72367', 'Vallon-sur-Gée', '30T', 718959, 5316389, 47.9633, -0.0666629, 55),
('72368', 'Vancé', '31T', 323924, 5300148, 47.8306, 0.647219, 91),
('72369', 'Verneil-le-Chétif', '31T', 297312, 5290171, 47.7331, 0.29666, 90),
('72370', 'Vernie', '31T', 278533, 5341157, 48.185, 0.0202781, 80),
('72372', 'Vezot', '31T', 299237, 5359061, 48.3528, 0.290001, 140),
('72373', 'Vibraye', '31T', 331380, 5325231, 48.0581, 0.73694, 120),
('72374', 'Villaines-la-Carelle', '31T', 300053, 5361751, 48.3772, 0.299724, 190),
('72375', 'Villaines-la-Gonais', '31T', 321567, 5334056, 48.1347, 0.601666, 100),
('72376', 'Villaines-sous-Lucé', '31T', 311789, 5304486, 47.8661, 0.483337, 100),
('72377', 'Villaines-sous-Malicorne', '30T', 717272, 5294408, 47.7664, -0.10028, 83),
('72378', 'Vion', '30T', 706765, 5299773, 47.8181, -0.237778, 46),
('72379', 'Viré-en-Champagne', '30T', 702368, 5318255, 47.9856, -0.287781, 75),
('72380', 'Vivoin', '31T', 288810, 5346238, 48.2342, 0.15584, 65),
('72381', 'Voivres-lès-le-Mans', '31T', 281318, 5312731, 47.9306, 0.0722272, 60),
('72382', 'Volnay', '31T', 310930, 5311899, 47.9325, 0.468614, 100),
('72383', 'Vouvray-sur-Huisne', '31T', 317597, 5328897, 48.0872, 0.550561, 100),
('72384', 'Vouvray-sur-Loir', '31T', 309677, 5285766, 47.6972, 0.463329, 56),
('72385', 'Yvré-le-Pôlin', '31T', 286913, 5299972, 47.8178, 0.153329, 85),
('72386', 'Yvré-l''Évêque', '31T', 296543, 5321507, 48.0144, 0.271661, 50),
('73001', 'Aiguebelette-le-Lac', '31T', 719687, 5046669, 45.5389, 5.81389, 400),
('73002', 'Aiguebelle', '32T', 289584, 5046690, 45.5419, 6.30472, 320),
('73003', 'Aigueblanche', '32T', 305166, 5041676, 45.5014, 6.50611, 480),
('73004', 'Aillon-le-Jeune', '32T', 272437, 5055788, 45.6183, 6.08111, 894),
('73005', 'Aillon-le-Vieux', '32T', 273654, 5059452, 45.6517, 6.095, 924),
('73006', 'Aime', '32T', 316591, 5047602, 45.5578, 6.65, 700),
('73007', 'Aiton', '32T', 285949, 5048945, 45.5611, 6.25722, 420),
('73008', 'Aix-les-Bains', '31T', 726521, 5064186, 45.6942, 5.90945, 240),
('73010', 'Albens', '31T', 728868, 5074531, 45.7864, 5.94444, 360),
('73011', 'Albertville', '32T', 296439, 5061169, 45.6742, 6.38639, 340),
('73012', 'Albiez-le-Jeune', '32T', 292164, 5013610, 45.2453, 6.35167, 1357),
('73013', 'Albiez-Montrond', '32T', 291085, 5010680, 45.2186, 6.33917, 1520),
('73014', 'Allondaz', '32T', 295388, 5064787, 45.7064, 6.37138, 720),
('73015', 'Les Allues', '32T', 308813, 5033749, 45.4311, 6.55583, 1120),
('73017', 'Apremont', '31T', 731070, 5044205, 45.5131, 5.95833, 340),
('73018', 'Arbin', '32T', 270773, 5043519, 45.5075, 6.06555, 280),
('73019', 'Argentine', '32T', 290081, 5041421, 45.4947, 6.31333, 400),
('73020', 'Arith', '32T', 273144, 5066268, 45.7128, 6.08528, 712),
('73021', 'Arvillard', '32T', 274874, 5036078, 45.4419, 6.12139, 540),
('73022', 'Attignat-Oncin', '31T', 716963, 5043206, 45.5086, 5.7775, 600),
('73023', 'Aussois', '32T', 322720, 5010890, 45.2292, 6.74167, 1483),
('73024', 'Les Avanchers-Valmorel', '32T', 301203, 5039298, 45.4789, 6.45639, 1100),
('73025', 'Avressieux', '31T', 710342, 5050179, 45.5733, 5.69584, 300),
('73026', 'Avrieux', '32T', 321107, 5009422, 45.2156, 6.72166, 1103),
('73027', 'Ayn', '31T', 714636, 5050232, 45.5725, 5.75083, 560),
('73028', 'La Balme', '31T', 711425, 5064953, 45.7058, 5.71612, 230),
('73029', 'Barberaz', '31T', 729388, 5049211, 45.5586, 5.93917, 300),
('73030', 'Barby', '31T', 732697, 5050692, 45.5708, 5.98222, 300),
('73031', 'Bassens', '31T', 729445, 5051778, 45.5817, 5.94111, 310),
('73032', 'La Bâthie', '32T', 301362, 5055944, 45.6286, 6.45167, 360),
('73033', 'La Bauche', '31T', 716026, 5040115, 45.4811, 5.76416, 548),
('73034', 'Beaufort', '32T', 310931, 5065593, 45.7181, 6.57056, 730),
('73036', 'Bellecombe-en-Bauges', '32T', 277612, 5068950, 45.7383, 6.14139, 860),
('73038', 'Bellentre', '32T', 321591, 5048693, 45.5689, 6.71362, 776),
('73039', 'Belmont-Tramonet', '31T', 709391, 5048757, 45.5608, 5.68305, 260),
('73040', 'Bessans', '32T', 342707, 5020520, 45.3206, 6.99306, 1705),
('73041', 'Betton-Bettonet', '32T', 280276, 5045620, 45.5294, 6.18611, 359),
('73042', 'Billième', '31T', 718807, 5066784, 45.72, 5.81166, 420),
('73043', 'La Biolle', '31T', 727690, 5071274, 45.7575, 5.92777, 400),
('73045', 'Le Bois', '32T', 304545, 5040553, 45.4911, 6.49861, 700),
('73046', 'Bonneval', '32T', 301010, 5044185, 45.5228, 6.45194, 1020),
('73047', 'Bonneval-sur-Arc', '32T', 346871, 5026038, 45.3711, 7.04445, 1787),
('73048', 'Bonvillard', '32T', 289794, 5051626, 45.5864, 6.30528, 749),
('73049', 'Bonvillaret', '32T', 289336, 5048985, 45.5625, 6.30056, 700),
('73050', 'Bourdeau', '31T', 722426, 5063019, 45.685, 5.85638, 305),
('73051', 'Le Bourget-du-Lac', '31T', 722811, 5058923, 45.6481, 5.85944, 240),
('73052', 'Bourget-en-Huile', '32T', 281753, 5040624, 45.485, 6.20723, 820),
('73053', 'Bourgneuf', '32T', 282468, 5048077, 45.5522, 6.21306, 290),
('73054', 'Bourg-Saint-Maurice', '32T', 325763, 5053640, 45.6144, 6.76527, 879),
('73055', 'Bozel', '32T', 316132, 5034890, 45.4433, 6.64889, 858),
('73056', 'Bramans', '32T', 325364, 5010229, 45.2239, 6.77555, 1260),
('73057', 'Brides-les-Bains', '32T', 309581, 5036135, 45.4528, 6.56472, 574),
('73058', 'La Bridoire', '31T', 714185, 5045026, 45.5258, 5.74278, 270),
('73059', 'Brison-Saint-Innocent', '31T', 725078, 5066945, 45.7194, 5.89222, 288),
('73061', 'Césarches', '32T', 298378, 5064195, 45.7019, 6.41, 475),
('73062', 'Cessens', '31T', 723961, 5075712, 45.7986, 5.88194, 710),
('73063', 'Cevins', '32T', 301662, 5051733, 45.5908, 6.45722, 420),
('73064', 'Challes-les-Eaux', '31T', 733065, 5048388, 45.55, 5.98583, 310),
('73065', 'Chambéry', '31T', 727732, 5050571, 45.5714, 5.91862, 273),
('73067', 'La Chambre', '32T', 288535, 5026459, 45.3597, 6.3, 460),
('73068', 'Chamousset', '32T', 281733, 5048782, 45.5583, 6.20334, 300),
('73069', 'Chamoux-sur-Gelon', '32T', 282414, 5045916, 45.5328, 6.21333, 310),
('73070', 'Champagneux', '31T', 708231, 5055577, 45.6225, 5.67111, 270),
('73071', 'Champagny-en-Vanoise', '32T', 319554, 5035964, 45.4539, 6.69222, 1200),
('73072', 'Champ-Laurent', '32T', 282384, 5043167, 45.5081, 6.21416, 1060),
('73073', 'Chanaz', '31T', 717121, 5076643, 45.8092, 5.79445, 250),
('73074', 'La Chapelle', '32T', 287067, 5033274, 45.4206, 6.27833, 460),
('73075', 'La Chapelle-Blanche', '32T', 270897, 5036778, 45.4469, 6.07028, 500),
('73076', 'La Chapelle-du-Mont-du-Chat', '31T', 722104, 5065386, 45.7064, 5.85334, 650),
('73077', 'Les Chapelles', '32T', 322742, 5051038, 45.5903, 6.7275, 1300),
('73078', 'La Chapelle-Saint-Martin', '31T', 714974, 5058709, 45.6486, 5.75889, 420),
('73079', 'Châteauneuf', '32T', 279267, 5047787, 45.5486, 6.17223, 380),
('73080', 'Le Châtel', '32T', 293254, 5020247, 45.3053, 6.36278, 780),
('73081', 'Le Châtelard', '32T', 277147, 5062601, 45.6811, 6.13833, 757),
('73082', 'La Chavanne', '32T', 271369, 5041983, 45.4939, 6.07389, 330),
('73083', 'Les Chavannes-en-Maurienne', '32T', 287650, 5029269, 45.3847, 6.2875, 500),
('73084', 'Chignin', '32T', 266627, 5045371, 45.5228, 6.01167, 376),
('73085', 'Chindrieux', '31T', 721387, 5078184, 45.8217, 5.84999, 300),
('73086', 'Cléry', '32T', 289098, 5058014, 45.6436, 6.29361, 620),
('73087', 'Cognin', '31T', 725999, 5049273, 45.5603, 5.89583, 300),
('73088', 'Cohennoz', '32T', 303939, 5070319, 45.7586, 6.47889, 900),
('73089', 'Coise-Saint-Jean-Pied-Gauthier', '32T', 276899, 5045306, 45.5256, 6.14306, 300),
('73090', 'La Compôte', '32T', 278967, 5061393, 45.6708, 6.16222, 740),
('73091', 'Conjux', '31T', 718662, 5075214, 45.7958, 5.81361, 270),
('73092', 'Corbel', '31T', 720981, 5034571, 45.4297, 5.825, 842),
('73093', 'La Côte-d''Aime', '32T', 318079, 5048794, 45.5689, 6.66861, 963),
('73094', 'Crest-Voland', '32T', 305943, 5074241, 45.7944, 6.50306, 1220),
('73095', 'La Croix-de-la-Rochette', '32T', 274765, 5039110, 45.4692, 6.11861, 340),
('73096', 'Cruet', '32T', 272785, 5045670, 45.5275, 6.09028, 360),
('73097', 'Curienne', '32T', 266613, 5050224, 45.5664, 6.00917, 710),
('73098', 'Les Déserts', '32T', 266860, 5056272, 45.6208, 6.00945, 920),
('73099', 'Détrier', '32T', 273232, 5036384, 45.4442, 6.10028, 400),
('73100', 'Domessin', '31T', 711553, 5046450, 45.5394, 5.70973, 330),
('73101', 'Doucy-en-Bauges', '32T', 279567, 5063040, 45.6858, 6.16917, 940),
('73103', 'Drumettaz-Clarafond', '31T', 728719, 5060342, 45.6589, 5.93583, 380),
('73104', 'Dullin', '31T', 714203, 5048302, 45.5553, 5.74444, 520),
('73105', 'Les Échelles', '31T', 715540, 5035279, 45.4378, 5.75583, 387),
('73106', 'École', '32T', 279230, 5059035, 45.6497, 6.16667, 729),
('73107', 'Entremont-le-Vieux', '31T', 725517, 5037328, 45.4531, 5.88417, 816),
('73108', 'Épersy', '31T', 730226, 5069390, 45.7397, 5.95944, 470),
('73109', 'Épierre', '32T', 288600, 5036806, 45.4528, 6.29639, 380),
('73110', 'Esserts-Blay', '32T', 300005, 5054164, 45.6122, 6.43501, 480),
('73111', 'Étable', '32T', 276789, 5038574, 45.465, 6.14472, 620),
('73112', 'Feissons-sur-Isère', '32T', 302517, 5047906, 45.5567, 6.46972, 420),
('73113', 'Feissons-sur-Salins', '32T', 309295, 5038152, 45.4708, 6.56028, 1260),
('73114', 'Flumet', '32T', 306957, 5076990, 45.8194, 6.51499, 900),
('73115', 'Fontaine-le-Puits', '32T', 305061, 5036891, 45.4583, 6.50667, 1018),
('73116', 'Fontcouverte-la Toussuire', '32T', 288267, 5013894, 45.2467, 6.30195, 1160),
('73117', 'Fourneaux', '32T', 315457, 5006526, 45.1881, 6.65084, 1060),
('73118', 'Francin', '32T', 268374, 5042680, 45.4992, 6.03528, 280),
('73119', 'Freney', '32T', 313567, 5006890, 45.1908, 6.62666, 1040),
('73120', 'Fréterive', '32T', 282529, 5051720, 45.585, 6.21222, 320),
('73121', 'Frontenex', '32T', 290325, 5057108, 45.6358, 6.30972, 360),
('73122', 'Gerbaix', '31T', 714100, 5054477, 45.6108, 5.74583, 560),
('73123', 'La Giettaz', '32T', 305558, 5081945, 45.8636, 6.495, 1100),
('73124', 'Gilly-sur-Isère', '32T', 293467, 5059722, 45.6603, 6.34889, 344),
('73126', 'Granier', '32T', 316705, 5049266, 45.5728, 6.65084, 1259),
('73127', 'Gresin', '31T', 709228, 5054282, 45.6106, 5.68333, 400),
('73128', 'Grésy-sur-Aix', '31T', 728242, 5067432, 45.7228, 5.93305, 350),
('73129', 'Grésy-sur-Isère', '32T', 285864, 5053428, 45.6014, 6.25417, 360),
('73130', 'Grignon', '32T', 295641, 5058631, 45.6511, 6.37722, 328),
('73131', 'Hautecour', '32T', 308218, 5041304, 45.4989, 6.54528, 1098),
('73132', 'Hauteluce', '32T', 312165, 5069200, 45.7508, 6.585, 1040),
('73133', 'Hauteville', '32T', 279171, 5045689, 45.5297, 6.17195, 440),
('73135', 'Hermillon', '32T', 293338, 5019472, 45.2983, 6.36417, 588),
('73137', 'Jacob-Bellecombette', '31T', 726778, 5049332, 45.5606, 5.90583, 350),
('73138', 'Jarrier', '32T', 289391, 5017502, 45.2794, 6.31472, 1060),
('73139', 'Jarsy', '32T', 280207, 5059712, 45.6561, 6.17888, 840),
('73140', 'Jongieux', '31T', 717710, 5069062, 45.7408, 5.79861, 310),
('73141', 'Laissaud', '32T', 268549, 5036802, 45.4464, 6.04028, 280),
('73142', 'Landry', '32T', 323762, 5048755, 45.57, 6.74139, 780),
('73143', 'Lanslebourg-Mont-Cenis', '32T', 333420, 5016991, 45.2867, 6.87583, 1420),
('73144', 'Lanslevillard', '32T', 336281, 5017194, 45.2892, 6.91222, 1480),
('73145', 'Lépin-le-Lac', '31T', 718215, 5046556, 45.5383, 5.795, 400),
('73146', 'Lescheraines', '32T', 274811, 5065683, 45.7081, 6.10694, 649),
('73147', 'Loisieux', '31T', 713224, 5059824, 45.6592, 5.73695, 560),
('73149', 'Lucey', '31T', 716819, 5070422, 45.7533, 5.78778, 250),
('73150', 'Mâcot-la-Plagne', '32T', 318356, 5047118, 45.5539, 6.67278, 760),
('73151', 'Les Marches', '32T', 265746, 5042716, 45.4986, 6.00167, 320),
('73152', 'Marcieux', '31T', 715697, 5054718, 45.6125, 5.76639, 560),
('73153', 'Marthod', '32T', 297946, 5066897, 45.7261, 6.40333, 520),
('73154', 'Mercury', '32T', 292547, 5061359, 45.6747, 6.33639, 550),
('73155', 'Méry', '31T', 728868, 5058647, 45.6436, 5.93695, 360),
('73156', 'Meyrieux-Trouet', '31T', 716789, 5058216, 45.6436, 5.78194, 562),
('73157', 'Modane', '32T', 317395, 5007860, 45.2006, 6.675, 1092),
('73158', 'Mognard', '31T', 729891, 5070274, 45.7478, 5.95556, 460),
('73159', 'Les Mollettes', '32T', 269981, 5038511, 45.4622, 6.05777, 280),
('73160', 'Montagnole', '31T', 727082, 5046933, 45.5389, 5.90861, 540),
('73161', 'Montagny', '32T', 311701, 5036504, 45.4567, 6.59166, 1060),
('73162', 'Montailleur', '32T', 287698, 5055065, 45.6167, 6.27695, 400),
('73163', 'Montaimont', '32T', 292212, 5027665, 45.3717, 6.34639, 1140),
('73164', 'Montcel', '31T', 732126, 5067761, 45.7244, 5.98305, 606),
('73166', 'Montendry', '32T', 284462, 5044825, 45.5236, 6.24001, 877),
('73167', 'Montgellafrey', '32T', 290199, 5029987, 45.3919, 6.31972, 1080),
('73168', 'Montgilbert', '32T', 288034, 5047700, 45.5506, 6.28445, 620),
('73169', 'Montgirod', '32T', 310945, 5045299, 45.5356, 6.57861, 1120),
('73170', 'Monthion', '32T', 294095, 5056426, 45.6308, 6.35833, 500),
('73171', 'Montmélian', '32T', 270310, 5042732, 45.5003, 6.06, 280),
('73173', 'Montricher-Albanne', '32T', 296179, 5013603, 45.2464, 6.40278, 1220),
('73175', 'Montsapey', '32T', 292268, 5044469, 45.5228, 6.34, 1000),
('73176', 'Montvalezan', '32T', 332040, 5053314, 45.6131, 6.84584, 1180),
('73177', 'Montvernier', '32T', 291805, 5021932, 45.32, 6.34361, 787),
('73178', 'La Motte-en-Bauges', '32T', 276582, 5064970, 45.7022, 6.13, 719),
('73179', 'La Motte-Servolex', '31T', 724574, 5053300, 45.5969, 5.87945, 260),
('73180', 'Motz', '31T', 720850, 5089011, 45.9192, 5.84806, 430),
('73181', 'Moûtiers', '32T', 307188, 5039606, 45.4833, 6.53278, 520),
('73182', 'Mouxy', '31T', 728664, 5063028, 45.6831, 5.93639, 410),
('73183', 'Myans', '31T', 733300, 5044411, 45.5142, 5.98694, 340),
('73184', 'Nances', '31T', 718141, 5052392, 45.5908, 5.79666, 440),
('73186', 'Notre-Dame-de-Bellecombe', '32T', 306921, 5075817, 45.8089, 6.515, 1120),
('73187', 'La Léchère', '32T', 302624, 5045092, 45.5314, 6.47223, 440),
('73188', 'Notre-Dame-des-Millières', '32T', 292997, 5055999, 45.6267, 6.34444, 340),
('73189', 'Notre-Dame-du-Cruet', '32T', 289389, 5027882, 45.3728, 6.31028, 560),
('73190', 'Notre-Dame-du-Pré', '32T', 312102, 5042638, 45.5119, 6.59444, 1270),
('73191', 'Novalaise', '31T', 716172, 5052880, 45.5958, 5.77166, 430),
('73192', 'Le Noyer', '32T', 270950, 5063135, 45.6839, 6.05861, 840),
('73193', 'Ontex', '31T', 719296, 5070725, 45.7553, 5.81972, 720),
('73194', 'Orelle', '32T', 306392, 5009360, 45.2111, 6.53445, 980),
('73196', 'Pallud', '32T', 296982, 5062541, 45.6867, 6.39278, 484),
('73197', 'Peisey-Nancroix', '32T', 324947, 5046158, 45.5469, 6.7575, 1340),
('73198', 'La Perrière', '32T', 311814, 5035203, 45.445, 6.59361, 660),
('73200', 'Planaise', '32T', 272728, 5042891, 45.5025, 6.09084, 320),
('73201', 'Planay', '32T', 319855, 5032806, 45.4256, 6.69722, 1130),
('73202', 'Plancherine', '32T', 290889, 5060364, 45.6653, 6.31555, 600),
('73203', 'Pontamafrey-Montpascal', '32T', 290424, 5021669, 45.3172, 6.32612, 502),
('73204', 'Le Pont-de-Beauvoisin', '31T', 708884, 5046392, 45.5397, 5.67555, 290),
('73205', 'Le Pontet', '32T', 283502, 5041552, 45.4939, 6.22917, 880),
('73206', 'Pralognan-la-Vanoise', '32T', 321609, 5027937, 45.3822, 6.72139, 1418),
('73207', 'Presle', '32T', 276292, 5037418, 45.4544, 6.13889, 560),
('73208', 'Pugny-Chatenod', '31T', 729889, 5064464, 45.6956, 5.95278, 620),
('73210', 'Puygros', '32T', 268587, 5050212, 45.5669, 6.03444, 770),
('73211', 'Queige', '32T', 302336, 5066138, 45.7206, 6.46, 600),
('73212', 'Randens', '32T', 290034, 5047139, 45.5461, 6.31028, 320),
('73213', 'La Ravoire', '31T', 731530, 5049382, 45.5594, 5.96666, 300),
('73214', 'Rochefort', '31T', 712060, 5051349, 45.5833, 5.71834, 430),
('73215', 'La Rochette', '32T', 274835, 5038026, 45.4594, 6.12, 360),
('73216', 'Rognaix', '32T', 300671, 5051270, 45.5864, 6.44472, 389),
('73217', 'Rotherens', '32T', 276123, 5039401, 45.4722, 6.13583, 340),
('73218', 'Ruffieux', '31T', 720823, 5081285, 45.8497, 5.84416, 300),
('73219', 'Saint-Alban-de-Montbel', '31T', 717313, 5048131, 45.5528, 5.78416, 396),
('73220', 'Saint-Alban-des-Hurtières', '32T', 287128, 5040192, 45.4828, 6.27612, 520),
('73221', 'Saint-Alban-des-Villards', '32T', 284277, 5021042, 45.3097, 6.24805, 1108),
('73222', 'Saint-Alban-Leysse', '31T', 730525, 5051910, 45.5825, 5.955, 300),
('73223', 'Saint-André', '32T', 313188, 5008106, 45.2017, 6.62139, 1100),
('73224', 'Saint-Avre', '32T', 289421, 5025595, 45.3522, 6.31166, 460),
('73225', 'Saint-Baldoph', '31T', 730495, 5046841, 45.5369, 5.95222, 340),
('73226', 'Saint-Béron', '31T', 713476, 5042252, 45.5011, 5.7325, 320),
('73227', 'Saint-Bon-Tarentaise', '32T', 315257, 5033989, 45.435, 6.63805, 1100),
('73228', 'Saint-Cassin', '31T', 725869, 5046858, 45.5386, 5.89306, 480),
('73229', 'Saint-Christophe', '31T', 717010, 5036812, 45.4511, 5.77528, 420),
('73230', 'Saint-Colomban-des-Villards', '32T', 282543, 5019433, 45.2947, 6.22666, 1099),
('73231', 'Saint-Etienne-de-Cuines', '32T', 287820, 5024629, 45.3431, 6.29166, 485),
('73232', 'Sainte-Foy-Tarentaise', '32T', 334963, 5050765, 45.5908, 6.88416, 1040),
('73233', 'Saint-Franc', '31T', 714577, 5041178, 45.4911, 5.74611, 525),
('73234', 'Saint-François-de-Sales', '32T', 269067, 5061412, 45.6678, 6.03528, 850),
('73235', 'Saint-François-Longchamp', '32T', 291601, 5030898, 45.4006, 6.33723, 1400),
('73236', 'Saint-Genix-sur-Guiers', '31T', 706116, 5053962, 45.6086, 5.64333, 230),
('73237', 'Saint-Georges-des-Hurtières', '32T', 287958, 5042265, 45.5017, 6.28583, 600),
('73238', 'Saint-Germain-la-Chambotte', '31T', 724798, 5073486, 45.7783, 5.89166, 510),
('73239', 'Saint-Girod', '31T', 730641, 5073948, 45.7806, 5.96694, 370),
('73240', 'Sainte-Hélène-du-Lac', '32T', 270689, 5040617, 45.4814, 6.06583, 260),
('73241', 'Sainte-Hélène-sur-Isère', '32T', 290960, 5054708, 45.6144, 6.31889, 340),
('73242', 'Saint-Jean-d''Arves', '32T', 285911, 5009401, 45.2056, 6.27389, 1549),
('73243', 'Saint-Jean-d''Arvey', '31T', 733538, 5052578, 45.5875, 5.99388, 580),
('73244', 'Saint-Jean-de-Belleville', '32T', 303128, 5033461, 45.4269, 6.48334, 1140),
('73245', 'Saint-Jean-de-Chevelu', '31T', 720223, 5064701, 45.7008, 5.82889, 350),
('73246', 'Saint-Jean-de-Couz', '31T', 720552, 5038758, 45.4675, 5.82139, 640),
('73247', 'Saint-Jean-de-la-Porte', '32T', 275780, 5048653, 45.5553, 6.12722, 290),
('73248', 'Saint-Jean-de-Maurienne', '32T', 291883, 5017018, 45.2758, 6.34666, 540),
('73249', 'Saint-Jeoire-Prieuré', '31T', 733827, 5046594, 45.5336, 5.99472, 319),
('73250', 'Saint-Julien-Mont-Denis', '32T', 296410, 5014677, 45.2561, 6.40528, 660),
('73252', 'Saint-Léger', '32T', 286996, 5035038, 45.4364, 6.27666, 400),
('73253', 'Saint-Marcel', '32T', 310018, 5042640, 45.5114, 6.56778, 600),
('73254', 'Sainte-Marie-d''Alvey', '31T', 712152, 5052465, 45.5933, 5.72, 500),
('73255', 'Sainte-Marie-de-Cuines', '32T', 288572, 5024295, 45.3403, 6.30139, 476),
('73256', 'Saint-Martin-d''Arc', '32T', 301231, 5009798, 45.2136, 6.46861, 760),
('73257', 'Saint-Martin-de-Belleville', '32T', 304640, 5028225, 45.3803, 6.50472, 1380),
('73258', 'Saint-Martin-de-la-Porte', '32T', 299755, 5012840, 45.2406, 6.44861, 776),
('73259', 'Saint-Martin-sur-la-Chambre', '32T', 289801, 5027189, 45.3667, 6.31583, 560),
('73260', 'Saint-Maurice-de-Rotherens', '31T', 710656, 5055009, 45.6167, 5.70194, 680),
('73261', 'Saint-Michel-de-Maurienne', '32T', 301472, 5010532, 45.2203, 6.47139, 720),
('73262', 'Saint-Nicolas-la-Chapelle', '32T', 305870, 5076066, 45.8108, 6.50139, 960),
('73263', 'Saint-Offenge-Dessous', '32T', 266754, 5069069, 45.7358, 6.00195, 590),
('73264', 'Saint-Offenge-Dessus', '32T', 267014, 5068503, 45.7308, 6.00555, 630),
('73265', 'Saint-Ours', '31T', 732400, 5071448, 45.7575, 5.98834, 580),
('73266', 'Saint-Oyen', '32T', 303416, 5041978, 45.5036, 6.48361, 620),
('73267', 'Saint-Pancrace', '32T', 290115, 5016304, 45.2689, 6.32445, 900),
('73268', 'Saint-Paul-sur-Isère', '32T', 300104, 5052524, 45.5975, 6.43695, 440),
('73269', 'Saint-Paul', '31T', 716895, 5062020, 45.6778, 5.78499, 430),
('73270', 'Saint-Pierre-d''Albigny', '32T', 277852, 5050124, 45.5692, 6.15306, 400),
('73271', 'Saint-Pierre-d''Alvey', '31T', 713614, 5056654, 45.6306, 5.74056, 601),
('73272', 'Saint-Pierre-de-Belleville', '32T', 287000, 5038343, 45.4661, 6.27528, 600),
('73273', 'Saint-Pierre-de-Curtille', '31T', 718431, 5073166, 45.7775, 5.80972, 410),
('73274', 'Saint-Pierre-d''Entremont', '31T', 723569, 5033396, 45.4183, 5.8575, 641),
('73275', 'Saint-Pierre-de-Genebroz', '31T', 715482, 5036976, 45.4531, 5.75583, 493),
('73276', 'Saint-Pierre-de-Soucy', '32T', 274067, 5042071, 45.4956, 6.10833, 320),
('73277', 'Sainte-Reine', '32T', 276934, 5054822, 45.6111, 6.13916, 820),
('73278', 'Saint-Rémy-de-Maurienne', '32T', 286055, 5030374, 45.3942, 6.26667, 460),
('73280', 'Saint-Sorlin-d''Arves', '32T', 282676, 5011241, 45.2211, 6.23194, 1510),
('73281', 'Saint-Sulpice', '31T', 721892, 5050022, 45.5683, 5.84362, 562),
('73282', 'Saint-Thibaud-de-Couz', '31T', 722280, 5042743, 45.5028, 5.84528, 505),
('73283', 'Saint-Vital', '32T', 289538, 5056269, 45.6281, 6.3, 320),
('73284', 'Salins-les-Thermes', '32T', 306866, 5038319, 45.4717, 6.52917, 520),
('73285', 'Séez', '32T', 328410, 5054524, 45.6231, 6.79889, 900),
('73286', 'Serrières-en-Chautagne', '31T', 720696, 5084865, 45.8819, 5.84417, 250),
('73287', 'Sollières-Sardières', '32T', 328129, 5014817, 45.2658, 6.80916, 1300),
('73288', 'Sonnaz', '31T', 727240, 5055745, 45.6181, 5.91473, 370),
('73289', 'La Table', '32T', 278972, 5040042, 45.4789, 6.17195, 840),
('73290', 'Termignon', '32T', 328317, 5016109, 45.2775, 6.81111, 1300),
('73292', 'Thénésol', '32T', 297206, 5065438, 45.7128, 6.39444, 520),
('73293', 'Thoiry', '32T', 268248, 5052759, 45.5897, 6.02889, 650),
('73294', 'La Thuile', '32T', 270071, 5046295, 45.5322, 6.05527, 880),
('73296', 'Tignes', '32T', 336519, 5037229, 45.4694, 6.90862, 1197),
('73297', 'Tournon', '32T', 290893, 5057892, 45.6431, 6.31667, 414),
('73298', 'Tours-en-Savoie', '32T', 300446, 5059155, 45.6572, 6.43861, 400),
('73299', 'Traize', '31T', 713909, 5061330, 45.6725, 5.74639, 450),
('73300', 'Tresserve', '31T', 725900, 5062185, 45.6764, 5.90055, 270),
('73301', 'Trévignin', '31T', 729993, 5065734, 45.7069, 5.95472, 630),
('73302', 'La Trinité', '32T', 277111, 5042116, 45.4969, 6.14722, 340),
('73303', 'Ugine', '32T', 299077, 5069764, 45.7522, 6.41666, 450),
('73304', 'Val-d''Isère', '32T', 341973, 5034650, 45.4475, 6.97917, 1840),
('73305', 'Valezan', '32T', 320072, 5049447, 45.5753, 6.69389, 1210),
('73306', 'Valloire', '32T', 297700, 5004504, 45.165, 6.42584, 1401),
('73307', 'Valmeinier', '32T', 302269, 5006676, 45.1858, 6.48306, 1500),
('73308', 'Venthon', '32T', 298499, 5062585, 45.6875, 6.41222, 500),
('73309', 'Verel-de-Montbel', '31T', 712622, 5048217, 45.555, 5.72417, 360),
('73310', 'Verel-Pragondran', '31T', 729945, 5054701, 45.6078, 5.94889, 560),
('73311', 'Le Verneil', '32T', 278431, 5038269, 45.4628, 6.16583, 680),
('73312', 'Verrens-Arvey', '32T', 290911, 5059065, 45.6536, 6.31639, 500),
('73313', 'Verthemex', '31T', 717400, 5056878, 45.6314, 5.78917, 650),
('73314', 'Villard-d''Héry', '32T', 276396, 5043996, 45.5136, 6.13722, 420),
('73315', 'Villard-Léger', '32T', 280156, 5044048, 45.5153, 6.18528, 300),
('73316', 'Villard-Sallet', '32T', 276485, 5041026, 45.4869, 6.13972, 320),
('73317', 'Villard-sur-Doron', '32T', 307715, 5066556, 45.7258, 6.52889, 720),
('73318', 'Villarembert', '32T', 286542, 5013859, 45.2458, 6.28, 1300),
('73320', 'Villargondran', '32T', 293897, 5015222, 45.2603, 6.37306, 685),
('73321', 'Villarlurin', '32T', 306721, 5037149, 45.4611, 6.52778, 660),
('73322', 'Villarodin-Bourget', '32T', 320236, 5008705, 45.2089, 6.71084, 1209),
('73323', 'Villaroger', '32T', 334207, 5050847, 45.5914, 6.87445, 1080),
('73324', 'Villaroux', '32T', 271309, 5037937, 45.4575, 6.075, 569),
('73326', 'Vimines', '31T', 723730, 5047770, 45.5475, 5.86611, 540),
('73327', 'Vions', '31T', 717732, 5078302, 45.8239, 5.80305, 235),
('73328', 'Viviers-du-Lac', '31T', 726485, 5059209, 45.6494, 5.90667, 280),
('73329', 'Voglans', '31T', 725880, 5057364, 45.6331, 5.89806, 260),
('73330', 'Yenne', '31T', 714804, 5064883, 45.7042, 5.75944, 238),
('74001', 'Abondance', '32T', 324372, 5127746, 46.2806, 6.72028, 920),
('74002', 'Alby-sur-Chéran', '32T', 268611, 5078240, 45.8189, 6.02139, 387),
('74003', 'Alex', '32T', 285646, 5085414, 45.8889, 6.23722, 576),
('74004', 'Allèves', '32T', 272977, 5070601, 45.7517, 6.08111, 650),
('74005', 'Allinges', '32T', 304882, 5134486, 46.3358, 6.46473, 538),
('74006', 'Allonzier-la-Caille', '32T', 276925, 5098454, 46.0033, 6.11888, 660),
('74007', 'Amancy', '32T', 293490, 5105694, 46.0736, 6.32945, 470),
('74008', 'Ambilly', '32T', 285512, 5119223, 46.1928, 6.22028, 420),
('74009', 'Andilly', '32T', 272817, 5104414, 46.0556, 6.06306, 757),
('74010', 'Annecy', '32T', 277141, 5087724, 45.9069, 6.12666, 453),
('74011', 'Annecy-le-Vieux', '32T', 278609, 5088938, 45.9183, 6.14501, 500),
('74012', 'Annemasse', '32T', 286437, 5119283, 46.1936, 6.23223, 437),
('74013', 'Anthy-sur-Léman', '32T', 301940, 5136805, 46.3558, 6.42556, 400),
('74014', 'Arâches-la-Frasse', '32T', 316881, 5101338, 46.0411, 6.63333, 960),
('74015', 'Arbusigny', '32T', 284968, 5107995, 46.0917, 6.21833, 830),
('74016', 'Archamps', '32T', 278658, 5113070, 46.1353, 6.13444, 530),
('74018', 'Arenthon', '32T', 293933, 5109294, 46.1061, 6.33361, 440),
('74019', 'Argonay', '32T', 278284, 5091916, 45.945, 6.13944, 542),
('74020', 'Armoy', '32T', 309333, 5135859, 46.3494, 6.52195, 639),
('74021', 'Arthaz-Pont-Notre-Dame', '32T', 290201, 5115168, 46.1578, 6.28278, 475),
('74022', 'Aviernoz', '32T', 284823, 5095207, 45.9767, 6.22223, 760),
('74024', 'Ayse', '32T', 301687, 5106505, 46.0833, 6.435, 500),
('74025', 'Ballaison', '32T', 294312, 5130755, 46.2992, 6.32917, 590),
('74026', 'La Balme-de-Sillingy', '32T', 270682, 5093862, 45.96, 6.04056, 483),
('74027', 'La Balme-de-Thuy', '32T', 288687, 5086638, 45.9008, 6.27583, 620),
('74029', 'Bassy', '31T', 719197, 5096059, 45.9831, 5.83, 343),
('74030', 'La Baume', '32T', 316161, 5128204, 46.2825, 6.61361, 740),
('74031', 'Beaumont', '32T', 277434, 5109530, 46.1031, 6.12027, 750),
('74032', 'Bellevaux', '32T', 309736, 5125466, 46.2561, 6.53139, 900),
('74033', 'Bernex', '32T', 321210, 5136765, 46.3608, 6.67583, 940),
('74034', 'Le Biot', '32T', 317591, 5125875, 46.2619, 6.63306, 840),
('74035', 'Bloye', '31T', 728793, 5078916, 45.8258, 5.94556, 370),
('74036', 'Bluffy', '32T', 284085, 5083336, 45.8697, 6.21805, 700),
('74037', 'Boëge', '32T', 299863, 5120437, 46.2081, 6.40555, 730),
('74038', 'Bogève', '32T', 301669, 5118586, 46.1919, 6.42972, 910),
('74040', 'Bonne', '32T', 293280, 5116052, 46.1667, 6.32222, 520),
('74041', 'Bonnevaux', '32T', 320403, 5129684, 46.2969, 6.66806, 920),
('74042', 'Bonneville', '32T', 299630, 5106046, 46.0786, 6.40862, 450),
('74043', 'Bons-en-Chablais', '32T', 297371, 5126790, 46.2644, 6.37055, 570),
('74044', 'Bossey', '32T', 280777, 5114632, 46.15, 6.16112, 450),
('74045', 'Le Bouchet', '32T', 295009, 5074933, 45.7975, 6.36222, 960),
('74046', 'Boussy', '31T', 731513, 5082448, 45.8567, 5.98222, 430),
('74048', 'Brenthonne', '32T', 299270, 5127840, 46.2744, 6.39472, 550),
('74049', 'Brizon', '32T', 302337, 5102653, 46.0489, 6.445, 1000),
('74050', 'Burdignin', '32T', 301303, 5121842, 46.2211, 6.42361, 850),
('74051', 'Cercier', '32T', 271554, 5101123, 46.0256, 6.04833, 600),
('74052', 'Cernex', '32T', 271884, 5105376, 46.0639, 6.05055, 580),
('74053', 'Cervens', '32T', 302906, 5128988, 46.2858, 6.44138, 614),
('74054', 'Chainaz-les-Frasses', '31T', 732940, 5073199, 45.7731, 5.99611, 670),
('74055', 'Challonges', '31T', 718968, 5100099, 46.0194, 5.82889, 470),
('74056', 'Chamonix-Mont-Blanc', '32T', 334299, 5087534, 45.9214, 6.86306, 1037),
('74057', 'Champanges', '32T', 311671, 5138134, 46.3706, 6.55139, 710),
('74058', 'La Chapelle-d''Abondance', '32T', 329728, 5129355, 46.2964, 6.78916, 1020),
('74059', 'La Chapelle-Rambaud', '32T', 286563, 5105621, 46.0708, 6.24, 940),
('74060', 'La Chapelle-Saint-Maurice', '32T', 278509, 5073460, 45.7792, 6.15084, 940),
('74061', 'Chapeiry', '32T', 270015, 5081155, 45.8456, 6.03805, 600),
('74062', 'Charvonnex', '32T', 279977, 5095254, 45.9756, 6.15972, 580),
('74063', 'Châtel', '32T', 333600, 5126097, 46.2681, 6.84055, 1180),
('74064', 'Châtillon-sur-Cluses', '32T', 313167, 5106547, 46.0869, 6.58333, 738),
('74065', 'Chaumont', '31T', 728850, 5102406, 46.0369, 5.9575, 600),
('74066', 'Chavannaz', '32T', 269232, 5104053, 46.0511, 6.01695, 550),
('74067', 'Chavanod', '32T', 270329, 5086119, 45.8903, 6.03972, 500),
('74068', 'Chêne-en-Semine', '31T', 720982, 5103354, 46.0481, 5.85639, 520),
('74069', 'Chênex', '31T', 731229, 5110097, 46.1053, 5.99194, 510),
('74070', 'Chens-sur-Léman', '32T', 289713, 5134033, 46.3272, 6.26805, 411),
('74071', 'Chessenaz', '31T', 724341, 5102116, 46.0358, 5.89917, 450),
('74072', 'Chevaline', '32T', 283842, 5071387, 45.7622, 6.22028, 520),
('74073', 'Chevenoz', '32T', 318491, 5134528, 46.34, 6.64138, 807),
('74074', 'Chevrier', '31T', 725181, 5110305, 46.1092, 5.91388, 481),
('74075', 'Chilly', '31T', 728672, 5097331, 45.9914, 5.95277, 480),
('74076', 'Choisy', '32T', 271999, 5097429, 45.9925, 6.05583, 611),
('74077', 'Clarafond-Arcine', '31T', 723726, 5105400, 46.0656, 5.89277, 500),
('74078', 'Clermont', '31T', 725291, 5094950, 45.9711, 5.90805, 651),
('74079', 'Les Clefs', '32T', 292720, 5082084, 45.8611, 6.32973, 670),
('74080', 'La Clusaz', '32T', 300183, 5086596, 45.9039, 6.42389, 1060),
('74081', 'Cluses', '32T', 312834, 5103375, 46.0583, 6.58027, 484),
('74082', 'Collonges-sous-Salève', '32T', 279644, 5113591, 46.1403, 6.14695, 500),
('74083', 'Combloux', '32T', 317137, 5085269, 45.8967, 6.64278, 980),
('74084', 'Cons-Sainte-Colombe', '32T', 292026, 5069749, 45.75, 6.32611, 560),
('74085', 'Les Contamines-Montjoie', '32T', 323579, 5076711, 45.8214, 6.72889, 1180),
('74086', 'Contamine-Sarzin', '31T', 730610, 5101389, 46.0272, 5.97972, 540),
('74087', 'Contamine-sur-Arve', '32T', 294591, 5111620, 46.1272, 6.34111, 460);
INSERT INTO `ods_communes` (`oc_code_insee`, `oc_nom`, `oc_secteur`, `oc_x_utm`, `oc_y_utm`, `oc_latitude`, `oc_longitude`, `oc_altitude`) VALUES
('74088', 'Copponex', '32T', 273720, 5103825, 46.0506, 6.075, 580),
('74089', 'Cordon', '32T', 314678, 5088152, 45.9219, 6.61, 880),
('74090', 'Cornier', '32T', 291307, 5107899, 46.0928, 6.30028, 500),
('74091', 'La Côte-d''Arbroz', '32T', 319959, 5117526, 46.1875, 6.66694, 1160),
('74093', 'Cran-Gevrier', '32T', 275698, 5087776, 45.9069, 6.10806, 430),
('74094', 'Cranves-Sales', '32T', 291056, 5118197, 46.1853, 6.2925, 530),
('74095', 'Crempigny-Bonneguête', '31T', 724961, 5092775, 45.9517, 5.90277, 500),
('74096', 'Cruseilles', '32T', 276170, 5101974, 46.0347, 6.10749, 770),
('74097', 'Cusy', '32T', 268955, 5072387, 45.7664, 6.02861, 550),
('74098', 'Cuvat', '32T', 276689, 5095496, 45.9767, 6.11722, 680),
('74099', 'Demi-Quartier', '32T', 315807, 5083331, 45.8789, 6.62639, 1180),
('74100', 'Desingy', '31T', 723733, 5097520, 45.9947, 5.88917, 490),
('74101', 'Dingy-en-Vuache', '31T', 727416, 5108595, 46.0931, 5.94195, 586),
('74102', 'Dingy-Saint-Clair', '32T', 284564, 5087800, 45.91, 6.22222, 600),
('74103', 'Domancy', '32T', 317610, 5087417, 45.9161, 6.64806, 560),
('74104', 'Doussard', '32T', 283913, 5072806, 45.775, 6.22056, 480),
('74105', 'Douvaine', '32T', 292264, 5131628, 46.3064, 6.30222, 430),
('74106', 'Draillant', '32T', 304203, 5130897, 46.3034, 6.45741, 0),
('74107', 'Droisy', '31T', 723318, 5094106, 45.9642, 5.88222, 677),
('74108', 'Duingt', '32T', 282735, 5078687, 45.8275, 6.20278, 450),
('74109', 'Éloise', '31T', 720936, 5107030, 46.0811, 5.8575, 520),
('74110', 'Entremont', '32T', 297641, 5092611, 45.9572, 6.38862, 780),
('74111', 'Entrevernes', '32T', 281578, 5075267, 45.7964, 6.18945, 816),
('74112', 'Épagny', '32T', 274394, 5091068, 45.9361, 6.08972, 455),
('74114', 'Essert-Romand', '32T', 320387, 5118935, 46.2003, 6.67195, 940),
('74116', 'Etaux', '32T', 290757, 5105014, 46.0667, 6.29444, 630),
('74117', 'Étercy', '32T', 267935, 5086146, 45.8897, 6.00889, 500),
('74118', 'Étrembières', '32T', 285877, 5117387, 46.1764, 6.22584, 410),
('74119', 'Évian-les-Bains', '32T', 315429, 5141479, 46.4017, 6.59889, 380),
('74120', 'Évires', '32T', 285292, 5101865, 46.0367, 6.22528, 820),
('74121', 'Excenevex', '32T', 296298, 5136991, 46.3558, 6.35222, 394),
('74122', 'Faucigny', '32T', 295975, 5110585, 46.1183, 6.35945, 641),
('74123', 'Faverges', '32T', 289614, 5069428, 45.7464, 6.29527, 511),
('74124', 'Feigères', '32T', 274375, 5110507, 46.1108, 6.08028, 570),
('74126', 'Fessy', '32T', 300581, 5127951, 46.2758, 6.41167, 580),
('74127', 'Féternes', '32T', 313843, 5136460, 46.3561, 6.58027, 787),
('74128', 'Fillinges', '32T', 294728, 5115076, 46.1583, 6.34138, 570),
('74129', 'La Forclaz', '32T', 316441, 5132520, 46.3214, 6.61555, 851),
('74130', 'Franclens', '31T', 718699, 5102809, 46.0439, 5.82667, 490),
('74131', 'Frangy', '31T', 726703, 5100503, 46.0206, 5.92889, 320),
('74133', 'Gaillard', '32T', 284576, 5118236, 46.1836, 6.20861, 410),
('74134', 'Les Gets', '32T', 320080, 5114341, 46.1589, 6.66972, 1163),
('74135', 'Giez', '32T', 285771, 5070270, 45.7528, 6.24555, 520),
('74136', 'Le Grand-Bornand', '32T', 300557, 5090847, 45.9422, 6.42694, 940),
('74137', 'Groisy', '32T', 281091, 5099943, 46.0181, 6.17194, 740),
('74138', 'Gruffy', '32T', 271008, 5074690, 45.7878, 6.05389, 580),
('74139', 'Habère-Lullin', '32T', 303578, 5123220, 46.2342, 6.4525, 840),
('74140', 'Habère-Poche', '32T', 305192, 5124775, 46.2486, 6.47277, 950),
('74141', 'Hauteville-sur-Fier', '31T', 730755, 5087704, 45.9042, 5.975, 370),
('74142', 'Héry-sur-Alby', '32T', 268024, 5075852, 45.7972, 6.01499, 600),
('74143', 'Les Houches', '32T', 329160, 5084091, 45.8892, 6.79806, 1000),
('74144', 'Jonzier-Épagny', '31T', 730992, 5106132, 46.0697, 5.98695, 621),
('74145', 'Juvigny', '32T', 290267, 5121468, 46.2144, 6.28084, 480),
('74146', 'Larringes', '32T', 313269, 5137961, 46.3694, 6.57222, 790),
('74147', 'Lathuile', '32T', 282560, 5073688, 45.7825, 6.20278, 500),
('74148', 'Leschaux', '32T', 276220, 5072337, 45.7683, 6.12195, 920),
('74150', 'Loisin', '32T', 292805, 5129910, 46.2911, 6.30999, 460),
('74151', 'Lornay', '31T', 724931, 5088880, 45.9167, 5.90056, 330),
('74152', 'Lovagny', '32T', 269716, 5087625, 45.9036, 6.03111, 530),
('74153', 'Lucinges', '32T', 293135, 5118745, 46.1908, 6.31917, 710),
('74154', 'Lugrin', '32T', 320487, 5141265, 46.4011, 6.66472, 400),
('74155', 'Lullin', '32T', 309107, 5128636, 46.2844, 6.52195, 860),
('74156', 'Lully', '32T', 300909, 5128837, 46.2839, 6.41555, 560),
('74157', 'Lyaud', '32T', 309311, 5134469, 46.3369, 6.52223, 660),
('74158', 'Machilly', '32T', 294264, 5125535, 46.2522, 6.33083, 530),
('74159', 'Magland', '32T', 315847, 5099145, 46.0211, 6.62083, 503),
('74160', 'Manigod', '32T', 295672, 5081924, 45.8606, 6.36778, 920),
('74161', 'Marcellaz-Albanais', '32T', 267400, 5084559, 45.8753, 6.00277, 550),
('74162', 'Marcellaz', '32T', 295729, 5113528, 46.1447, 6.355, 640),
('74163', 'Margencel', '32T', 302412, 5134874, 46.3386, 6.4325, 470),
('74164', 'Marignier', '32T', 306693, 5107087, 46.09, 6.49945, 480),
('74165', 'Marigny-Saint-Marcel', '31T', 731837, 5079555, 45.8306, 5.985, 400),
('74166', 'Marin', '32T', 309509, 5138395, 46.3723, 6.5232, 580),
('74167', 'Marlens', '32T', 293797, 5071636, 45.7675, 6.34805, 480),
('74168', 'Marlioz', '32T', 268039, 5102089, 46.0331, 6.00251, 570),
('74169', 'Marnaz', '32T', 309029, 5103430, 46.0578, 6.53111, 501),
('74170', 'Massingy', '31T', 726664, 5079240, 45.8294, 5.91833, 530),
('74171', 'Massongy', '32T', 294802, 5132592, 46.3158, 6.33472, 430),
('74172', 'Maxilly-sur-Léman', '32T', 318047, 5141122, 46.3992, 6.63306, 450),
('74173', 'Megève', '32T', 315093, 5081098, 45.8586, 6.61806, 1100),
('74174', 'Mégevette', '32T', 306923, 5119159, 46.1986, 6.49751, 884),
('74175', 'Meillerie', '32T', 324802, 5141942, 46.4083, 6.72055, 400),
('74176', 'Menthon-Saint-Bernard', '32T', 282366, 5082315, 45.86, 6.19639, 480),
('74177', 'Menthonnex-en-Bornes', '32T', 281338, 5103858, 46.0533, 6.17333, 800),
('74178', 'Menthonnex-sous-Clermont', '31T', 727361, 5094346, 45.965, 5.93445, 540),
('74179', 'Mésigny', '32T', 268012, 5096806, 45.9856, 6.00472, 530),
('74180', 'Messery', '32T', 291769, 5136558, 46.3506, 6.29361, 420),
('74181', 'Metz-Tessy', '32T', 275974, 5090640, 45.9328, 6.11027, 464),
('74182', 'Meythet', '32T', 274922, 5088978, 45.9175, 6.0975, 450),
('74183', 'Mieussy', '32T', 308695, 5112029, 46.135, 6.52333, 660),
('74184', 'Minzier', '31T', 730974, 5104308, 46.0533, 5.98583, 540),
('74185', 'Monnetier-Mornex', '32T', 284419, 5115615, 46.16, 6.20778, 710),
('74186', 'Montagny-les-Lanches', '32T', 270535, 5082928, 45.8617, 6.04389, 610),
('74187', 'Montmin', '32T', 287454, 5075836, 45.8033, 6.26472, 1040),
('74188', 'Montriond', '32T', 322174, 5118450, 46.1964, 6.69527, 940),
('74189', 'Mont-Saxonnex', '32T', 305530, 5102953, 46.0525, 6.48611, 978),
('74190', 'Morillon', '32T', 320435, 5105929, 46.0833, 6.67749, 682),
('74191', 'Morzine', '32T', 323169, 5116506, 46.1792, 6.70888, 960),
('74192', 'Moye', '31T', 725954, 5084499, 45.8769, 5.91167, 500),
('74193', 'La Muraz', '32T', 284164, 5111422, 46.1222, 6.20639, 642),
('74194', 'Mûres', '32T', 269893, 5076678, 45.8053, 6.03862, 500),
('74195', 'Musièges', '31T', 728457, 5100228, 46.0175, 5.95138, 430),
('74196', 'Nancy-sur-Cluses', '32T', 312656, 5101774, 46.0439, 6.5786, 934),
('74197', 'Nangy', '32T', 291964, 5114613, 46.1533, 6.30583, 470),
('74198', 'Nâves-Parmelan', '32T', 282135, 5090481, 45.9333, 6.18972, 620),
('74199', 'Nernier', '32T', 292806, 5138098, 46.3647, 6.30639, 374),
('74200', 'Neuvecelle', '32T', 315473, 5140828, 46.3958, 6.59972, 480),
('74201', 'Neydens', '32T', 276280, 5111488, 46.1203, 6.10444, 550),
('74202', 'Nonglard', '32T', 268934, 5089199, 45.9175, 6.02028, 520),
('74203', 'Novel', '32T', 329829, 5137568, 46.3703, 6.7875, 960),
('74204', 'Les Ollières', '32T', 281665, 5095473, 45.9781, 6.18139, 680),
('74205', 'Onnion', '32T', 305519, 5116176, 46.1714, 6.48055, 791),
('74206', 'Orcier', '32T', 306876, 5131920, 46.3133, 6.49167, 653),
('74208', 'Passy', '32T', 321117, 5087901, 45.9214, 6.69306, 660),
('74209', 'Peillonnex', '32T', 297352, 5111961, 46.1311, 6.37666, 691),
('74210', 'Perrignier', '32T', 303017, 5131085, 46.3047, 6.44195, 550),
('74211', 'Pers-Jussy', '32T', 288809, 5109653, 46.1078, 6.26722, 600),
('74212', 'Le Petit-Bornand-les-Glières', '32T', 298544, 5097833, 46.0044, 6.39806, 715),
('74213', 'Poisy', '32T', 272244, 5089478, 45.9211, 6.06278, 513),
('74215', 'Praz-sur-Arly', '32T', 311424, 5078984, 45.8386, 6.57166, 1020),
('74216', 'Présilly', '32T', 273983, 5108636, 46.0939, 6.07611, 680),
('74217', 'Pringy', '32T', 277057, 5091960, 45.945, 6.12361, 500),
('74218', 'Publier', '32T', 311130, 5140004, 46.3872, 6.54361, 500),
('74219', 'Quintal', '32T', 273697, 5080247, 45.8386, 6.08583, 760),
('74220', 'Reignier', '32T', 289044, 5112735, 46.1356, 6.26889, 483),
('74221', 'Le Reposoir', '32T', 309300, 5098263, 46.0114, 6.53667, 980),
('74222', 'Reyvroz', '32T', 312243, 5133112, 46.3256, 6.56083, 840),
('74223', 'La Rivière-Enverse', '32T', 317217, 5106857, 46.0908, 6.63555, 680),
('74224', 'La Roche-sur-Foron', '32T', 292042, 5104847, 46.0656, 6.31111, 580),
('74225', 'Rumilly', '31T', 728412, 5083384, 45.8661, 5.94278, 327),
('74226', 'Saint-André-de-Boëge', '32T', 299025, 5118424, 46.1897, 6.39556, 720),
('74228', 'Saint-Blaise', '32T', 274787, 5105331, 46.0644, 6.08806, 860),
('74229', 'Saint-Cergues', '32T', 293519, 5123768, 46.2361, 6.32195, 560),
('74231', 'Saint-Eusèbe', '31T', 730427, 5090721, 45.9314, 5.97222, 566),
('74232', 'Saint-Eustache', '32T', 278334, 5075228, 45.795, 6.14778, 740),
('74233', 'Saint-Félix', '31T', 730910, 5076028, 45.7992, 5.97139, 390),
('74234', 'Saint-Ferréol', '32T', 290443, 5071563, 45.7658, 6.305, 540),
('74235', 'Saint-Germain-sur-Rhône', '31T', 717795, 5104631, 46.0606, 5.81583, 450),
('74236', 'Saint-Gervais-les-Bains', '32T', 322668, 5084860, 45.8944, 6.71417, 800),
('74237', 'Saint-Gingolph', '32T', 330950, 5140193, 46.3942, 6.80111, 390),
('74238', 'Saint-Jean-d''Aulps', '32T', 319321, 5122796, 46.2347, 6.65666, 800),
('74239', 'Saint-Jean-de-Sixt', '32T', 299195, 5088729, 45.9228, 6.41028, 960),
('74240', 'Saint-Jean-de-Tholome', '32T', 298996, 5109682, 46.1111, 6.39889, 700),
('74241', 'Saint-Jeoire', '32T', 303857, 5112522, 46.1381, 6.46056, 580),
('74242', 'Saint-Jorioz', '32T', 279974, 5079403, 45.8331, 6.16695, 480),
('74243', 'Saint-Julien-en-Genevois', '32T', 274636, 5114113, 46.1433, 6.08194, 450),
('74244', 'Saint-Laurent', '32T', 295713, 5102715, 46.0475, 6.35944, 659),
('74245', 'Saint-Martin-Bellevue', '32T', 279123, 5093678, 45.9611, 6.14944, 720),
('74249', 'Saint-Paul-en-Chablais', '32T', 317615, 5138849, 46.3786, 6.62833, 820),
('74250', 'Saint-Pierre-en-Faucigny', '32T', 296835, 5104100, 46.0603, 6.37334, 471),
('74252', 'Saint-Sigismond', '32T', 315733, 5104647, 46.0706, 6.61723, 950),
('74253', 'Saint-Sixt', '32T', 293435, 5103409, 46.0531, 6.32973, 610),
('74254', 'Saint-Sylvestre', '32T', 268513, 5080253, 45.8369, 6.01917, 650),
('74255', 'Sales', '31T', 729800, 5084393, 45.8747, 5.96112, 410),
('74256', 'Sallanches', '32T', 316422, 5089522, 45.9347, 6.63194, 550),
('74257', 'Sallenôves', '31T', 731856, 5099180, 46.0069, 5.99473, 460),
('74258', 'Samoëns', '32T', 324020, 5105763, 46.0828, 6.72389, 710),
('74259', 'Le Sappey', '32T', 280985, 5107826, 46.0889, 6.16695, 900),
('74260', 'Savigny', '31T', 728763, 5105894, 46.0683, 5.95805, 568),
('74261', 'Saxel', '32T', 299114, 5124385, 46.2433, 6.39417, 890),
('74262', 'Scientrier', '32T', 293805, 5109947, 46.1119, 6.33167, 440),
('74263', 'Sciez', '32T', 298188, 5133993, 46.3294, 6.37805, 410),
('74264', 'Scionzier', '32T', 310458, 5103046, 46.0547, 6.54972, 505),
('74265', 'Serraval', '32T', 293282, 5075639, 45.8033, 6.33972, 760),
('74266', 'Servoz', '32T', 326725, 5088822, 45.9311, 6.76499, 814),
('74267', 'Sévrier', '32T', 277980, 5082842, 45.8633, 6.13972, 452),
('74268', 'Seynod', '32T', 274110, 5085052, 45.8819, 6.08889, 560),
('74269', 'Seyssel', '31T', 719748, 5093298, 45.9581, 5.83583, 260),
('74270', 'Seythenex', '32T', 289738, 5067323, 45.7275, 6.29778, 734),
('74271', 'Seytroux', '32T', 316414, 5124489, 46.2492, 6.61834, 860),
('74272', 'Sillingy', '32T', 270166, 5092182, 45.9447, 6.03472, 500),
('74273', 'Sixt-Fer-à-Cheval', '32T', 328079, 5102560, 46.055, 6.7775, 756),
('74274', 'Val-de-Fier', '31T', 725757, 5089281, 45.92, 5.91139, 320),
('74275', 'Talloires', '32T', 283669, 5080076, 45.8403, 6.21417, 480),
('74276', 'Taninges', '32T', 314030, 5108776, 46.1072, 6.59361, 640),
('74278', 'Thyez', '32T', 308691, 5105696, 46.0781, 6.52583, 468),
('74279', 'Thollon-les-Mémises', '32T', 323016, 5140017, 46.3906, 6.69806, 923),
('74280', 'Thônes', '32T', 292420, 5084102, 45.8792, 6.325, 627),
('74281', 'Thonon-les-Bains', '32T', 306517, 5138141, 46.3692, 6.48444, 431),
('74282', 'Thorens-Glières', '32T', 286811, 5097270, 45.9958, 6.24694, 670),
('74283', 'Thusy', '31T', 728553, 5092413, 45.9472, 5.94889, 580),
('74284', 'La Tour', '32T', 301501, 5112041, 46.1331, 6.43028, 632),
('74285', 'Usinens', '31T', 719906, 5099144, 46.0106, 5.84056, 410),
('74286', 'Vacheresse', '32T', 321007, 5132755, 46.3247, 6.67473, 820),
('74287', 'Vailly', '32T', 310890, 5130898, 46.3053, 6.54416, 800),
('74288', 'Valleiry', '31T', 729136, 5110328, 46.1081, 5.965, 480),
('74289', 'Vallières', '31T', 727723, 5087437, 45.9028, 5.93583, 350),
('74290', 'Vallorcine', '32T', 340184, 5100041, 46.0353, 6.93473, 1260),
('74291', 'Vanzy', '31T', 723125, 5102999, 46.0442, 5.88389, 420),
('74292', 'Vaulx', '31T', 732309, 5090575, 45.9294, 5.99639, 540),
('74293', 'Veigy-Foncenex', '32T', 288682, 5127734, 46.2703, 6.2575, 430),
('74294', 'Verchaix', '32T', 320391, 5107351, 46.0961, 6.67639, 800),
('74295', 'La Vernaz', '32T', 314837, 5131858, 46.315, 6.595, 800),
('74296', 'Vers', '32T', 270571, 5108237, 46.0892, 6.03222, 680),
('74297', 'Versonnex', '31T', 726888, 5090219, 45.9281, 5.9264, 490),
('74298', 'Vétraz-Monthoux', '32T', 288494, 5116709, 46.1711, 6.26, 490),
('74299', 'Veyrier-du-Lac', '32T', 281099, 5084955, 45.8833, 6.17889, 492),
('74301', 'Villard', '32T', 302743, 5121270, 46.2164, 6.4425, 820),
('74302', 'Les Villards-sur-Thônes', '32T', 295363, 5086939, 45.9056, 6.36167, 764),
('74303', 'Villaz', '32T', 282225, 5092424, 45.9508, 6.19, 684),
('74304', 'Ville-en-Sallaz', '32T', 301073, 5113415, 46.1453, 6.42417, 640),
('74305', 'Ville-la-Grand', '32T', 287708, 5120043, 46.2008, 6.24834, 444),
('74306', 'Villy-le-Bouveret', '32T', 280542, 5102650, 46.0422, 6.16361, 760),
('74307', 'Villy-le-Pelloux', '32T', 277994, 5098230, 46.0017, 6.13278, 700),
('74308', 'Vinzier', '32T', 316857, 5135659, 46.3497, 6.61973, 918),
('74309', 'Viry', '32T', 271099, 5111432, 46.1181, 6.0375, 500),
('74310', 'Viuz-la-Chiésaz', '32T', 271792, 5077195, 45.8106, 6.06278, 600),
('74311', 'Viuz-en-Sallaz', '32T', 300115, 5113693, 46.1475, 6.41166, 660),
('74312', 'Vougy', '32T', 306138, 5104509, 46.0667, 6.49333, 481),
('74313', 'Vovray-en-Bornes', '32T', 279084, 5105206, 46.0647, 6.1436, 850),
('74314', 'Vulbens', '31T', 726067, 5109596, 46.1025, 5.925, 480),
('74315', 'Yvoire', '32T', 294295, 5138480, 46.3686, 6.32556, 374),
('75056', 'Paris', '31T', 452017, 5412188, 48.8608, 2.3458, 60),
('76001', 'Allouville-Bellefosse', '31T', 332131, 5496349, 49.5964, 0.676943, 130),
('76002', 'Alvimare', '31T', 328689, 5497415, 49.605, 0.628889, 145),
('76004', 'Ambrumesnil', '31T', 355891, 5524808, 49.8583, 0.995005, 82),
('76005', 'Amfreville-la-Mi-Voie', '31T', 364081, 5473487, 49.3989, 1.12667, 20),
('76006', 'Amfreville-les-Champs', '31T', 342612, 5507223, 49.6969, 0.817503, 155),
('76007', 'Anceaumeville', '31T', 360089, 5493147, 49.5747, 1.06472, 165),
('76008', 'Ancourt', '31T', 369765, 5530202, 49.91, 1.18611, 20),
('76009', 'Ancourteville-sur-Héricourt', '31T', 331453, 5507497, 49.6964, 0.662775, 120),
('76010', 'Ancretiéville-Saint-Victor', '31T', 354495, 5502595, 49.6583, 0.983894, 166),
('76011', 'Ancretteville-sur-Mer', '31T', 320840, 5518193, 49.7894, 0.510832, 95),
('76012', 'Angerville-Bailleul', '31T', 316439, 5504678, 49.6667, 0.456107, 122),
('76013', 'Angerville-la-Martel', '31T', 320080, 5515189, 49.7622, 0.501672, 110),
('76014', 'Angerville-l''Orcher', '31T', 303621, 5496470, 49.5889, 0.28278, 118),
('76015', 'Angiens', '31T', 341200, 5521914, 49.8286, 0.791947, 90),
('76016', 'Anglesqueville-la-Bras-Long', '31T', 340360, 5516499, 49.7797, 0.782501, 105),
('76017', 'Anglesqueville-l''Esneval', '31T', 300509, 5501499, 49.6331, 0.237219, 125),
('76018', 'Val-de-Saâne', '31T', 353414, 5507878, 49.7056, 0.966945, 90),
('76019', 'Anneville-sur-Scie', '31T', 362517, 5521452, 49.8297, 1.08833, 46),
('76020', 'Anneville-Ambourville', '31T', 346821, 5480804, 49.4606, 0.886114, 5),
('76021', 'Annouville-Vilmesnil', '31T', 314838, 5505968, 49.6778, 0.433333, 135),
('76022', 'Anquetierville', '31T', 328816, 5489313, 49.5322, 0.634169, 150),
('76023', 'Anvéville', '31T', 337172, 5507662, 49.6994, 0.741945, 130),
('76024', 'Ardouval', '31T', 375784, 5511675, 49.7447, 1.27583, 200),
('76025', 'Argueil', '31T', 392608, 5488732, 49.5417, 1.51555, 110),
('76026', 'Arques-la-Bataille', '31T', 365629, 5527584, 49.8856, 1.12945, 10),
('76027', 'Assigny', '31T', 377732, 5538326, 49.9847, 1.29444, 96),
('76028', 'Aubéguimont', '31T', 404523, 5518011, 49.8069, 1.67306, 208),
('76029', 'Aubermesnil-aux-Érables', '31T', 396969, 5520281, 49.8261, 1.5675, 130),
('76030', 'Aubermesnil-Beaumais', '31T', 364757, 5523064, 49.8447, 1.11889, 117),
('76031', 'Auberville-la-Campagne', '31T', 326466, 5489449, 49.5328, 0.60166, 145),
('76032', 'Auberville-la-Manuel', '31T', 326775, 5522265, 49.8278, 0.591395, 75),
('76033', 'Auberville-la-Renault', '31T', 310165, 5506563, 49.6817, 0.36834, 110),
('76034', 'Auffay', '31T', 363225, 5509104, 49.7189, 1.10251, 100),
('76035', 'Aumale', '31T', 410056, 5514147, 49.7731, 1.75083, 120),
('76036', 'Auppegard', '31T', 358359, 5521435, 49.8286, 1.03055, 102),
('76037', 'Auquemesnil', '31T', 380482, 5533877, 49.9453, 1.33417, 135),
('76038', 'Authieux-Ratiéville', '31T', 366722, 5496534, 49.6067, 1.15527, 140),
('76039', 'Les Authieux-sur-le-Port-Saint-Ouen', '31T', 364466, 5467051, 49.3411, 1.13416, 80),
('76040', 'Autigny', '31T', 346024, 5517911, 49.7939, 0.86056, 100),
('76041', 'Autretot', '31T', 336307, 5502248, 49.6506, 0.732224, 149),
('76042', 'Auvilliers', '31T', 397529, 5512949, 49.7603, 1.57722, 223),
('76043', 'Auzebosc', '31T', 335942, 5496140, 49.5956, 0.729725, 135),
('76044', 'Auzouville-Auberbosc', '31T', 324368, 5499840, 49.6256, 0.568053, 140),
('76045', 'Auzouville-l''Esneval', '31T', 347392, 5501122, 49.6433, 0.886118, 160),
('76046', 'Auzouville-sur-Ry', '31T', 377670, 5477955, 49.4419, 1.31249, 140),
('76047', 'Auzouville-sur-Saâne', '31T', 351329, 5512230, 49.7442, 0.936389, 70),
('76048', 'Avesnes-en-Bray', '31T', 403882, 5480583, 49.4703, 1.67333, 136),
('76049', 'Avesnes-en-Val', '31T', 384986, 5530997, 49.9203, 1.39778, 110),
('76050', 'Avremesnil', '31T', 351055, 5524074, 49.8506, 0.928049, 71),
('76051', 'Bacqueville-en-Caux', '31T', 357958, 5517583, 49.7939, 1.02639, 90),
('76052', 'Bailleul-Neuville', '31T', 386619, 5518512, 49.8083, 1.42417, 103),
('76053', 'Baillolet', '31T', 387322, 5516767, 49.7928, 1.43444, 120),
('76054', 'Bailly-en-Rivière', '31T', 380663, 5530350, 49.9136, 1.33778, 80),
('76055', 'Baons-le-Comte', '31T', 339444, 5501104, 49.6411, 0.776117, 135),
('76056', 'Bardouville', '31T', 349654, 5478345, 49.4392, 0.926115, 58),
('76057', 'Barentin', '31T', 351831, 5490245, 49.5467, 0.951664, 50),
('76058', 'Baromesnil', '31T', 386643, 5537636, 49.9803, 1.4189, 125),
('76059', 'Bazinval', '31T', 396414, 5535059, 49.9589, 1.55583, 70),
('76060', 'Beaubec-la-Rosière', '31T', 394078, 5500195, 49.645, 1.53278, 160),
('76062', 'Beaumont-le-Hareng', '31T', 371826, 5503487, 49.6703, 1.22361, 159),
('76063', 'Beauval-en-Caux', '31T', 357512, 5512064, 49.7442, 1.02222, 100),
('76064', 'Beaurepaire', '31T', 299403, 5505250, 49.6664, 0.220001, 100),
('76065', 'Beaussault', '31T', 396490, 5504659, 49.6856, 1.565, 137),
('76066', 'Beautot', '31T', 358458, 5500729, 49.6425, 1.03944, 160),
('76067', 'Beauvoir-en-Lyons', '31T', 397693, 5484371, 49.5033, 1.58695, 220),
('76068', 'Bec-de-Mortagne', '31T', 316115, 5508707, 49.7028, 0.449728, 60),
('76069', 'Belbeuf', '31T', 365080, 5472288, 49.3883, 1.14084, 143),
('76070', 'Bellencombre', '31T', 372146, 5507681, 49.7081, 1.22667, 90),
('76071', 'Bellengreville', '31T', 372192, 5529865, 49.9075, 1.22001, 30),
('76072', 'Belleville-en-Caux', '31T', 354998, 5507897, 49.7061, 0.988893, 140),
('76073', 'Belleville-sur-Mer', '31T', 368477, 5534652, 49.9497, 1.16666, 100),
('76074', 'La Bellière', '31T', 398621, 5495320, 49.6019, 1.59695, 140),
('76075', 'Belmesnil', '31T', 359652, 5515036, 49.7714, 1.05083, 125),
('76076', 'Bénarville', '31T', 319153, 5505421, 49.6742, 0.493338, 120),
('76077', 'Bénesville', '31T', 344097, 5513546, 49.7542, 0.835554, 130),
('76078', 'Bennetot', '31T', 323513, 5505030, 49.6719, 0.553888, 125),
('76079', 'Bénouville', '31T', 301812, 5510758, 49.7167, 0.250553, 95),
('76080', 'Bermonville', '31T', 329315, 5501351, 49.6406, 0.635834, 135),
('76081', 'Berneval-le-Grand', '31T', 370178, 5535722, 49.9597, 1.19, 102),
('76082', 'Bernières', '31T', 317812, 5499562, 49.6211, 0.477494, 135),
('76083', 'Bertheauville', '31T', 326451, 5514053, 49.7539, 0.59056, 100),
('76084', 'Bertreville', '31T', 325723, 5515715, 49.7686, 0.579719, 110),
('76085', 'Bertreville-Saint-Ouen', '31T', 359864, 5518584, 49.8033, 1.0525, 115),
('76086', 'Bertrimont', '31T', 355507, 5503711, 49.6686, 0.997495, 150),
('76087', 'Berville', '31T', 344253, 5508536, 49.7092, 0.839718, 150),
('76088', 'Berville-sur-Seine', '31T', 348168, 5482157, 49.4731, 0.904171, 8),
('76089', 'Betteville', '31T', 340393, 5491062, 49.5511, 0.79333, 120),
('76090', 'Beuzeville-la-Grenier', '31T', 314132, 5496471, 49.5922, 0.428058, 120),
('76091', 'Beuzeville-la-Guérard', '31T', 328225, 5509391, 49.7125, 0.61722, 140),
('76092', 'Beuzevillette', '31T', 321965, 5493891, 49.5714, 0.537507, 140),
('76093', 'Bézancourt', '31T', 400446, 5477616, 49.4431, 1.62666, 160),
('76094', 'Bierville', '31T', 375102, 5488951, 49.5403, 1.27361, 160),
('76095', 'Bihorel', '31T', 363734, 5479799, 49.4556, 1.11972, 150),
('76096', 'Biville-la-Baignarde', '31T', 359444, 5509356, 49.7203, 1.04999, 134),
('76097', 'Biville-la-Rivière', '31T', 351009, 5515886, 49.7769, 0.930552, 63),
('76098', 'Biville-sur-Mer', '31T', 375017, 5538080, 49.9819, 1.25667, 110),
('76099', 'Blacqueville', '31T', 345833, 5492173, 49.5625, 0.868051, 105),
('76100', 'Blainville-Crevon', '31T', 376919, 5484831, 49.5036, 1.3, 110),
('76101', 'Blangy-sur-Bresle', '31T', 401674, 5531686, 49.9294, 1.63, 50),
('76103', 'Bonsecours', '31T', 364076, 5475743, 49.4192, 1.12583, 140),
('76104', 'Blosseville', '31T', 341720, 5524649, 49.8533, 0.798055, 65),
('76105', 'Le Bocasse', '31T', 361461, 5496511, 49.6053, 1.0825, 170),
('76106', 'Bois-d''Ennebourg', '31T', 373448, 5476569, 49.4286, 1.25472, 150),
('76107', 'Bois-Guilbert', '31T', 385303, 5489344, 49.5458, 1.41444, 190),
('76108', 'Bois-Guillaume', '31T', 363588, 5481224, 49.4683, 1.11722, 161),
('76109', 'Bois-Héroult', '31T', 384862, 5491300, 49.5633, 1.40777, 207),
('76110', 'Bois-Himont', '31T', 333626, 5494634, 49.5814, 0.69834, 140),
('76111', 'Bois-l''Évêque', '31T', 374230, 5479022, 49.4508, 1.26472, 155),
('76112', 'Le Bois-Robert', '31T', 367209, 5522044, 49.8361, 1.15333, 120),
('76113', 'Boissay', '31T', 381182, 5486559, 49.52, 1.35834, 160),
('76114', 'Bolbec', '31T', 317364, 5493981, 49.5708, 0.47389, 60),
('76115', 'Bolleville', '31T', 324110, 5496819, 49.5983, 0.565837, 140),
('76116', 'Boos', '31T', 369436, 5472276, 49.3892, 1.20083, 150),
('76117', 'Bordeaux-Saint-Clair', '31T', 302228, 5508980, 49.7008, 0.257218, 100),
('76118', 'Bornambusc', '31T', 309071, 5500573, 49.6275, 0.35611, 119),
('76119', 'Bosc-Bérenger', '31T', 374062, 5499603, 49.6358, 1.25583, 171),
('76120', 'Bosc-Bordel', '31T', 385129, 5494414, 49.5914, 1.41056, 234),
('76121', 'Bosc-Édeline', '31T', 386402, 5491916, 49.5692, 1.42888, 225),
('76122', 'Callengeville', '31T', 393269, 5521157, 49.8333, 1.51584, 221),
('76123', 'Bosc-Guérard-Saint-Adrien', '31T', 363493, 5489476, 49.5425, 1.11305, 171),
('76124', 'Bosc-Hyons', '31T', 402809, 5477945, 49.4464, 1.65917, 210),
('76125', 'Bosc-le-Hard', '31T', 368201, 5498723, 49.6267, 1.175, 160),
('76126', 'Bosc-Mesnil', '31T', 380986, 5502382, 49.6622, 1.35084, 209),
('76127', 'Bosc-Roger-sur-Buchy', '31T', 383683, 5493457, 49.5825, 1.39084, 205),
('76128', 'Bosville', '31T', 333584, 5514200, 49.7572, 0.689441, 110),
('76129', 'Boudeville', '31T', 347221, 5510027, 49.7233, 0.880272, 140),
('76130', 'Bouelles', '31T', 391709, 5508119, 49.7158, 1.49778, 130),
('76131', 'La Bouille', '31T', 349668, 5468580, 49.3514, 0.930002, 10),
('76132', 'Bourdainville', '31T', 351677, 5504464, 49.6744, 0.944166, 160),
('76133', 'Le Bourg-Dun', '31T', 348348, 5525849, 49.8658, 0.889724, 10),
('76134', 'Bourville', '31T', 343203, 5517930, 49.7933, 0.821385, 70),
('76135', 'Bouville', '31T', 347820, 5492055, 49.5619, 0.895554, 120),
('76136', 'Brachy', '31T', 352605, 5520075, 49.815, 0.951116, 35),
('76137', 'Bracquemont', '31T', 367000, 5533761, 49.9414, 1.14639, 80),
('76138', 'Bracquetuit', '31T', 367884, 5503025, 49.6653, 1.16916, 155),
('76139', 'Bradiancourt', '31T', 383900, 5501763, 49.6572, 1.39138, 220),
('76140', 'Brametot', '31T', 346435, 5516879, 49.7847, 0.866674, 110),
('76141', 'Bréauté', '31T', 312225, 5500617, 49.6289, 0.399716, 120),
('76142', 'Brémontier-Merval', '31T', 399522, 5484306, 49.5031, 1.61222, 150),
('76143', 'Bretteville-du-Grand-Caux', '31T', 311880, 5504555, 49.6642, 0.393054, 110),
('76144', 'Bretteville-Saint-Laurent', '31T', 347083, 5514327, 49.7619, 0.876672, 130),
('76145', 'Brunville', '31T', 375975, 5536420, 49.9672, 1.27056, 130),
('76146', 'Buchy', '31T', 381459, 5493752, 49.5847, 1.36, 200),
('76147', 'Bully', '31T', 382524, 5509485, 49.7264, 1.37001, 130),
('76148', 'Bures-en-Bray', '31T', 380031, 5515410, 49.7792, 1.33361, 70),
('76149', 'Butot', '31T', 357756, 5497688, 49.615, 1.03083, 80),
('76151', 'Cailleville', '31T', 337053, 5522316, 49.8311, 0.734162, 70),
('76152', 'Cailly', '31T', 372188, 5493282, 49.5786, 1.23195, 120),
('76153', 'Calleville-les-Deux-Églises', '31T', 357861, 5507821, 49.7061, 1.0286, 150),
('76154', 'Campneuseville', '31T', 403646, 5523742, 49.8583, 1.65945, 209),
('76155', 'Canehan', '31T', 381671, 5538052, 49.9831, 1.34945, 90),
('76156', 'Canouville', '31T', 327419, 5519896, 49.8067, 0.601395, 93),
('76157', 'Canteleu', '31T', 356893, 5478553, 49.4428, 1.02583, 120),
('76158', 'Canville-les-Deux-Églises', '31T', 344685, 5515199, 49.7692, 0.843052, 120),
('76159', 'Cany-Barville', '31T', 329710, 5517690, 49.7875, 0.634174, 25),
('76160', 'Carville-la-Folletière', '31T', 342267, 5491873, 49.5589, 0.818894, 130),
('76161', 'Carville-Pot-de-Fer', '31T', 335940, 5509338, 49.7142, 0.72417, 130),
('76162', 'Le Catelier', '31T', 366787, 5513032, 49.755, 1.15055, 145),
('76163', 'Catenay', '31T', 378975, 5485897, 49.5136, 1.32806, 160),
('76164', 'Caudebec-en-Caux', '31T', 335747, 5488357, 49.5256, 0.730275, 11),
('76165', 'Caudebec-lès-Elbeuf', '31T', 356252, 5460987, 49.2847, 1.02334, 13),
('76166', 'Le Caule-Sainte-Beuve', '31T', 398699, 5513421, 49.7647, 1.59334, 230),
('76167', 'Cauville-sur-Mer', '31T', 292551, 5497685, 49.5961, 0.129165, 90),
('76168', 'Les Cent-Acres', '31T', 366259, 5514343, 49.7667, 1.14278, 140),
('76169', 'La Cerlangue', '31T', 312683, 5487061, 49.5072, 0.412502, 120),
('76170', 'La Chapelle-du-Bourgay', '31T', 366768, 5520356, 49.8208, 1.14778, 140),
('76171', 'La Chapelle-Saint-Ouen', '31T', 386806, 5488139, 49.5353, 1.43556, 207),
('76172', 'La Chapelle-sur-Dun', '31T', 345423, 5525561, 49.8625, 0.849167, 50),
('76173', 'La Chaussée', '31T', 364722, 5520902, 49.8253, 1.11916, 120),
('76174', 'Cideville', '31T', 348087, 5498012, 49.6156, 0.896942, 140),
('76175', 'Clais', '31T', 388594, 5518316, 49.8069, 1.45167, 100),
('76176', 'Clasville', '31T', 328603, 5518127, 49.7911, 0.618616, 108),
('76177', 'Claville-Motteville', '31T', 369331, 5495636, 49.5992, 1.19166, 160),
('76178', 'Cléon', '31T', 357045, 5464273, 49.3144, 1.03306, 10),
('76179', 'Clères', '31T', 363489, 5495718, 49.5986, 1.11083, 100),
('76180', 'Cleuville', '31T', 329399, 5509107, 49.7103, 0.633614, 140),
('76181', 'Cléville', '31T', 327804, 5499266, 49.6214, 0.615839, 130),
('76182', 'Cliponville', '31T', 331143, 5505250, 49.6761, 0.65945, 120),
('76183', 'Colleville', '31T', 316355, 5514016, 49.7506, 0.450554, 50),
('76184', 'Colmesnil-Manneville', '31T', 358798, 5523680, 49.8489, 1.03584, 85),
('76185', 'Compainville', '31T', 396183, 5502224, 49.6636, 1.56139, 170),
('76186', 'Conteville', '31T', 401596, 5505460, 49.6936, 1.63556, 244),
('76187', 'Contremoulins', '31T', 314905, 5511438, 49.7269, 0.431669, 110),
('76188', 'Cottévrard', '31T', 371628, 5499351, 49.6331, 1.22222, 160),
('76189', 'Crasville-la-Mallet', '31T', 335301, 5519278, 49.8033, 0.71111, 100),
('76190', 'Crasville-la-Rocquefort', '31T', 347634, 5518978, 49.8039, 0.882495, 90),
('76191', 'Cressy', '31T', 367760, 5509424, 49.7228, 1.16528, 150),
('76192', 'Criel-sur-Mer', '31T', 379301, 5541658, 50.015, 1.31527, 26),
('76193', 'La Crique', '31T', 369938, 5505880, 49.6914, 1.19666, 160),
('76194', 'Criquebeuf-en-Caux', '31T', 307854, 5513230, 49.7408, 0.333059, 102),
('76195', 'Criquetot-le-Mauconduit', '31T', 324513, 5518505, 49.7933, 0.561672, 100),
('76196', 'Criquetot-l''Esneval', '31T', 302641, 5502689, 49.6444, 0.266111, 127),
('76197', 'Criquetot-sur-Longueville', '31T', 361563, 5515419, 49.7753, 1.07722, 110),
('76198', 'Criquetot-sur-Ouville', '31T', 344969, 5505548, 49.6825, 0.850827, 160),
('76199', 'Criquiers', '31T', 406972, 5503449, 49.6764, 1.71056, 226),
('76200', 'Critot', '31T', 373759, 5496922, 49.6117, 1.2525, 170),
('76201', 'Croisy-sur-Andelle', '31T', 383856, 5479890, 49.4606, 1.39722, 70),
('76202', 'Croixdalle', '31T', 382376, 5519252, 49.8142, 1.365, 194),
('76203', 'Croix-Mare', '31T', 344748, 5496407, 49.6003, 0.851386, 155),
('76204', 'Cropus', '31T', 366705, 5511335, 49.7397, 1.15, 140),
('76205', 'Crosville-sur-Scie', '31T', 362691, 5520428, 49.8206, 1.09111, 46),
('76206', 'Cuverville', '31T', 302564, 5504980, 49.665, 0.263891, 110),
('76207', 'Cuverville-sur-Yères', '31T', 385219, 5535349, 49.9594, 1.39972, 38),
('76208', 'Cuy-Saint-Fiacre', '31T', 405796, 5485306, 49.5131, 1.69861, 125),
('76209', 'Dampierre-en-Bray', '31T', 403100, 5487516, 49.5325, 1.66084, 120),
('76210', 'Dampierre-Saint-Nicolas', '31T', 370776, 5524955, 49.8631, 1.20194, 25),
('76211', 'Dancourt', '31T', 395735, 5527751, 49.8931, 1.54834, 90),
('76212', 'Darnétal', '31T', 365444, 5478057, 49.4403, 1.14389, 40),
('76213', 'Daubeuf-Serville', '31T', 318089, 5507806, 49.6953, 0.477496, 80),
('76214', 'Dénestanville', '31T', 363045, 5519399, 49.8114, 1.09639, 50),
('76215', 'Derchigny', '31T', 371696, 5533369, 49.9389, 1.21194, 107),
('76216', 'Déville-lès-Rouen', '31T', 358593, 5481166, 49.4667, 1.04834, 20),
('76217', 'Dieppe', '31T', 362056, 5531506, 49.92, 1.07834, 10),
('76218', 'Doudeauville', '31T', 406471, 5491812, 49.5717, 1.70639, 190),
('76219', 'Doudeville', '31T', 340287, 5509949, 49.7208, 0.784173, 136),
('76220', 'Douvrend', '31T', 379454, 5525372, 49.8686, 1.3225, 60),
('76221', 'Drosay', '31T', 337564, 5518035, 49.7928, 0.743053, 100),
('76222', 'Duclair', '31T', 346021, 5483144, 49.4814, 0.874171, 10),
('76223', 'Écalles-Alix', '31T', 342871, 5498160, 49.6156, 0.824728, 140),
('76224', 'Écrainville', '31T', 306973, 5503121, 49.6497, 0.325837, 120),
('76225', 'Écretteville-lès-Baons', '31T', 332680, 5499825, 49.6278, 0.683053, 120),
('76226', 'Écretteville-sur-Mer', '31T', 319142, 5518868, 49.795, 0.48695, 90),
('76227', 'Ectot-l''Auber', '31T', 350675, 5501587, 49.6483, 0.931384, 164),
('76228', 'Ectot-lès-Baons', '31T', 341710, 5501068, 49.6414, 0.807494, 135),
('76229', 'Elbeuf-en-Bray', '31T', 401704, 5482567, 49.4878, 1.64278, 145),
('76230', 'Elbeuf-sur-Andelle', '31T', 383897, 5480878, 49.4694, 1.3975, 67),
('76231', 'Elbeuf', '31T', 354846, 5461333, 49.2875, 1.00389, 10),
('76232', 'Életot', '31T', 316620, 5518274, 49.7889, 0.452223, 105),
('76233', 'Ellecourt', '31T', 407663, 5516906, 49.7975, 1.71695, 113),
('76234', 'Émanville', '31T', 352761, 5498594, 49.6219, 0.961386, 160),
('76235', 'Envermeu', '31T', 375371, 5528431, 49.8953, 1.26472, 40),
('76236', 'Envronville', '31T', 331734, 5503625, 49.6617, 0.668333, 120),
('76237', 'Épinay-sur-Duclair', '31T', 343384, 5488101, 49.5253, 0.835827, 120),
('76238', 'Épouville', '31T', 299087, 5493977, 49.565, 0.221395, 30),
('76239', 'Épretot', '31T', 305736, 5490984, 49.5403, 0.314718, 110),
('76240', 'Épreville', '31T', 310264, 5509404, 49.7072, 0.368332, 110),
('76241', 'Ermenouville', '31T', 340758, 5518465, 49.7975, 0.78722, 100),
('76242', 'Ernemont-la-Villette', '31T', 405754, 5479376, 49.4597, 1.69945, 140),
('76243', 'Ernemont-sur-Buchy', '31T', 381386, 5488563, 49.5381, 1.36055, 165),
('76244', 'Esclavelles', '31T', 384023, 5507475, 49.7086, 1.39139, 140),
('76245', 'Eslettes', '31T', 359531, 5490195, 49.5481, 1.05806, 145),
('76247', 'Esteville', '31T', 371777, 5496319, 49.6058, 1.22527, 172),
('76248', 'Estouteville-Écalles', '31T', 378402, 5494468, 49.5906, 1.3175, 190),
('76249', 'Étaimpuis', '31T', 365636, 5501319, 49.6494, 1.13861, 150),
('76250', 'Étainhus', '31T', 305783, 5493981, 49.5672, 0.313889, 119),
('76251', 'Étalleville', '31T', 343463, 5511710, 49.7375, 0.827496, 130),
('76252', 'Étalondes', '31T', 384452, 5543244, 50.0303, 1.38666, 80),
('76253', 'Étoutteville', '31T', 340198, 5504914, 49.6756, 0.784998, 141),
('76254', 'Étretat', '31T', 298472, 5509892, 49.7078, 0.204722, 20),
('76255', 'Eu', '31T', 386844, 5545294, 50.0492, 1.41944, 22),
('76257', 'Fallencourt', '31T', 397136, 5524850, 49.8672, 1.56861, 110),
('76258', 'Fauville-en-Caux', '31T', 326029, 5502785, 49.6525, 0.589725, 120),
('76259', 'Fécamp', '31T', 310820, 5514980, 49.7575, 0.37333, 20),
('76260', 'Ferrières-en-Bray', '31T', 409297, 5481787, 49.4819, 1.74777, 100),
('76261', 'La Ferté-Saint-Samson', '31T', 393432, 5492824, 49.5786, 1.52583, 189),
('76262', 'Fesques', '31T', 390533, 5516299, 49.7892, 1.47917, 110),
('76263', 'La Feuillie', '31T', 392480, 5480177, 49.4647, 1.51611, 180),
('76264', 'Flamanville', '31T', 343606, 5499993, 49.6322, 0.834165, 145),
('76265', 'Flamets-Frétils', '31T', 397752, 5509886, 49.7328, 1.58112, 170),
('76266', 'Flocques', '31T', 382877, 5544020, 50.0369, 1.36444, 78),
('76267', 'La Folletière', '31T', 341150, 5493575, 49.5739, 0.802774, 150),
('76268', 'Fongueusemare', '31T', 305801, 5506285, 49.6778, 0.30805, 115),
('76269', 'Fontaine-en-Bray', '31T', 386447, 5503655, 49.6747, 1.42611, 140),
('76270', 'Fontaine-la-Mallet', '31T', 293578, 5490844, 49.535, 0.146946, 40),
('76271', 'Fontaine-le-Bourg', '31T', 367240, 5491423, 49.5608, 1.16416, 91),
('76272', 'Fontaine-le-Dun', '31T', 345379, 5519845, 49.8111, 0.850835, 70),
('76273', 'Fontaine-sous-Préaux', '31T', 367327, 5482615, 49.4817, 1.16833, 70),
('76274', 'La Fontelaye', '31T', 352385, 5506175, 49.69, 0.953327, 100),
('76275', 'Fontenay', '31T', 296425, 5493797, 49.5625, 0.18472, 70),
('76276', 'Forges-les-Eaux', '31T', 394687, 5496445, 49.6114, 1.54222, 160),
('76277', 'Le Fossé', '31T', 397132, 5496213, 49.6097, 1.57611, 150),
('76278', 'Foucarmont', '31T', 397018, 5522845, 49.8492, 1.5675, 130),
('76279', 'Foucart', '31T', 326411, 5498414, 49.6133, 0.596947, 140),
('76280', 'Fréauville', '31T', 385979, 5520410, 49.8253, 1.41472, 90),
('76281', 'La Frénaye', '31T', 324315, 5488868, 49.5269, 0.572219, 130),
('76282', 'Freneuse', '31T', 360635, 5464057, 49.3133, 1.0825, 10),
('76283', 'Fresles', '31T', 380901, 5511313, 49.7425, 1.34694, 119),
('76284', 'Fresnay-le-Long', '31T', 362450, 5501491, 49.6503, 1.09444, 161),
('76285', 'Fresne-le-Plan', '31T', 376249, 5474774, 49.4131, 1.29389, 155),
('76286', 'Fresnoy-Folny', '31T', 387348, 5527549, 49.8897, 1.43167, 190),
('76287', 'Fresquiennes', '31T', 355819, 5492023, 49.5636, 1.00611, 130),
('76288', 'Freulleville', '31T', 373074, 5520729, 49.8256, 1.23528, 40),
('76289', 'Fréville', '31T', 343320, 5492832, 49.5678, 0.833062, 135),
('76290', 'Frichemesnil', '31T', 365641, 5498291, 49.6222, 1.13972, 165),
('76291', 'Froberville', '31T', 307679, 5511133, 49.7219, 0.331666, 91),
('76292', 'Fry', '31T', 393469, 5487541, 49.5311, 1.52777, 115),
('76293', 'Fultot', '31T', 340586, 5513989, 49.7572, 0.786666, 130),
('76294', 'La Gaillarde', '31T', 346034, 5522484, 49.835, 0.858885, 43),
('76295', 'Gaillefontaine', '31T', 400232, 5501036, 49.6536, 1.61778, 170),
('76296', 'Gainneville', '31T', 301064, 5488648, 49.5178, 0.251392, 95),
('76297', 'Gancourt-Saint-Étienne', '31T', 406708, 5489213, 49.5483, 1.71028, 150),
('76298', 'Ganzeville', '31T', 313632, 5512316, 49.7344, 0.413605, 32),
('76299', 'Gerponville', '31T', 324724, 5513924, 49.7522, 0.566665, 100),
('76300', 'Gerville', '31T', 307420, 5508360, 49.6969, 0.329444, 110),
('76301', 'Glicourt', '31T', 373862, 5533039, 49.9364, 1.24222, 110),
('76302', 'Goderville', '31T', 309966, 5502613, 49.6461, 0.367501, 118),
('76303', 'Gommerville', '31T', 309680, 5492730, 49.5572, 0.36833, 125),
('76304', 'Gonfreville-Caillot', '31T', 314997, 5502995, 49.6511, 0.436939, 120),
('76305', 'Gonfreville-l''Orcher', '31T', 299818, 5487055, 49.5031, 0.235005, 80),
('76306', 'Gonnetot', '31T', 348718, 5514806, 49.7667, 0.899173, 120),
('76307', 'Gonneville-la-Mallet', '31T', 299395, 5502313, 49.64, 0.221394, 131),
('76308', 'Gonneville-sur-Scie', '31T', 361248, 5513264, 49.7558, 1.07362, 120),
('76309', 'Gonzeville', '31T', 342599, 5514363, 49.7611, 0.814442, 130),
('76310', 'Gouchaupre', '31T', 377996, 5532419, 49.9317, 1.29999, 140),
('76311', 'Goupillières', '31T', 354146, 5494107, 49.5819, 0.982216, 130),
('76312', 'Gournay-en-Bray', '31T', 407568, 5481847, 49.4822, 1.72389, 95),
('76313', 'Gouy', '31T', 365271, 5468576, 49.355, 1.14472, 70),
('76314', 'Graimbouville', '31T', 307241, 5494826, 49.5753, 0.333617, 106),
('76315', 'Grainville-la-Teinturière', '31T', 330174, 5513379, 49.7489, 0.642495, 40),
('76316', 'Grainville-sur-Ry', '31T', 376772, 5481899, 49.4772, 1.29888, 150),
('76317', 'Grainville-Ymauville', '31T', 313560, 5503817, 49.6581, 0.416661, 115),
('76318', 'Grand-Camp', '31T', 325956, 5492370, 49.5589, 0.593329, 150),
('76319', 'Grand-Couronne', '31T', 355355, 5469138, 49.3578, 1.00806, 21),
('76320', 'Grandcourt', '31T', 391832, 5530176, 49.9142, 1.49334, 70),
('76321', 'Les Grandes-Ventes', '31T', 372566, 5516138, 49.7842, 1.22973, 178),
('76322', 'Le Grand-Quevilly', '31T', 358176, 5475182, 49.4128, 1.04473, 10),
('76323', 'Graval', '31T', 395042, 5509537, 49.7292, 1.54362, 210),
('76324', 'Grèges', '31T', 367085, 5531565, 49.9217, 1.14833, 95),
('76325', 'Grémonville', '31T', 342625, 5504905, 49.6761, 0.818616, 160),
('76326', 'Greny', '31T', 378616, 5534227, 49.9481, 1.30806, 125),
('76327', 'Greuville', '31T', 349855, 5519719, 49.8111, 0.913054, 92),
('76328', 'Grigneuseville', '31T', 369174, 5501604, 49.6528, 1.1875, 154),
('76329', 'Gruchet-le-Valasse', '31T', 318138, 5492472, 49.5575, 0.485282, 50),
('76330', 'Gruchet-Saint-Siméon', '31T', 348616, 5520464, 49.8175, 0.895554, 90),
('76331', 'Grugny', '31T', 363695, 5498308, 49.6219, 1.11278, 165),
('76332', 'Grumesnil', '31T', 405519, 5495999, 49.6092, 1.69222, 170),
('76333', 'Guerville', '31T', 393526, 5535116, 49.9589, 1.51556, 160),
('76334', 'Gueures', '31T', 353742, 5522919, 49.8408, 0.965838, 40),
('76335', 'Gueutteville', '31T', 355866, 5501353, 49.6475, 1.00333, 170),
('76336', 'Gueutteville-les-Grès', '31T', 338679, 5523194, 49.8394, 0.756389, 80),
('76337', 'Guilmécourt', '31T', 378404, 5536302, 49.9667, 1.30445, 105),
('76338', 'La Hallotière', '31T', 389205, 5486452, 49.5206, 1.46917, 195),
('76339', 'Le Hanouard', '31T', 331609, 5511201, 49.7297, 0.663339, 50),
('76340', 'Harcanville', '31T', 338119, 5509148, 49.7131, 0.754451, 134),
('76341', 'Harfleur', '31T', 296961, 5487655, 49.5075, 0.195284, 10),
('76342', 'Hattenville', '31T', 322201, 5502940, 49.6528, 0.536671, 130),
('76343', 'Haucourt', '31T', 403414, 5499527, 49.6406, 1.66222, 230),
('76344', 'Haudricourt', '31T', 406249, 5511493, 49.7486, 1.69861, 146),
('76345', 'Haussez', '31T', 403783, 5493156, 49.5833, 1.66889, 130),
('76346', 'Hautot-l''Auvray', '31T', 338197, 5514462, 49.7608, 0.753327, 120),
('76347', 'Hautot-le-Vatois', '31T', 333146, 5501912, 49.6467, 0.688612, 125),
('76348', 'Hautot-Saint-Sulpice', '31T', 336988, 5505535, 49.6803, 0.740282, 138),
('76349', 'Hautot-sur-Mer', '31T', 358775, 5528903, 49.8958, 1.03361, 90),
('76350', 'Hautot-sur-Seine', '31T', 353267, 5469564, 49.3611, 0.979163, 10),
('76351', 'Le Havre', '31T', 291987, 5487132, 49.5011, 0.12694, 70),
('76352', 'La Haye', '31T', 387110, 5480471, 49.4664, 1.44195, 174),
('76353', 'Héberville', '31T', 341908, 5516052, 49.7761, 0.804169, 120),
('76354', 'Hénouville', '31T', 351993, 5482855, 49.4803, 0.956672, 120),
('76355', 'Héricourt-en-Caux', '31T', 334224, 5507628, 49.6983, 0.701111, 65),
('76356', 'Hermanville', '31T', 355230, 5520283, 49.8175, 0.987504, 37),
('76357', 'Hermeville', '31T', 302255, 5497601, 49.5986, 0.263333, 110),
('76358', 'Le Héron', '31T', 384559, 5481698, 49.4769, 1.40639, 90),
('76359', 'Héronchelles', '31T', 383234, 5487534, 49.5292, 1.38639, 120),
('76360', 'Heugleville-sur-Scie', '31T', 363041, 5510561, 49.7319, 1.09944, 100),
('76361', 'Heuqueville', '31T', 293885, 5499984, 49.6172, 0.146396, 90),
('76362', 'Heurteauville', '31T', 341442, 5479412, 49.4467, 0.812496, 5),
('76363', 'Hodeng-au-Bosc', '31T', 407184, 5523957, 49.8608, 1.70861, 110),
('76364', 'Hodeng-Hodenger', '31T', 396544, 5487451, 49.5308, 1.57028, 140),
('76365', 'Houdetot', '31T', 341987, 5520129, 49.8128, 0.803608, 85),
('76366', 'Le Houlme', '31T', 357827, 5485790, 49.5081, 1.03611, 40),
('76367', 'Houppeville', '31T', 361155, 5486106, 49.5117, 1.08194, 150),
('76368', 'Houquetot', '31T', 311329, 5497928, 49.6044, 0.388614, 120),
('76369', 'La Houssaye-Béranger', '31T', 361856, 5499437, 49.6317, 1.08694, 169),
('76370', 'Hugleville-en-Caux', '31T', 354560, 5499812, 49.6333, 0.985827, 165),
('76371', 'Les Ifs', '31T', 384846, 5527231, 49.8864, 1.39695, 180),
('76372', 'Illois', '31T', 402965, 5511428, 49.7475, 1.65305, 224),
('76373', 'Imbleville', '31T', 352380, 5508926, 49.7147, 0.952218, 100),
('76374', 'Incheville', '31T', 392314, 5541288, 50.0142, 1.49694, 30),
('76375', 'Ingouville', '31T', 333625, 5523317, 49.8392, 0.686106, 70),
('76376', 'Intraville', '31T', 376464, 5532546, 49.9325, 1.27862, 140),
('76377', 'Isneauville', '31T', 365360, 5484486, 49.4981, 1.14055, 150),
('76378', 'Jumièges', '31T', 342070, 5478127, 49.4353, 0.821666, 30),
('76379', 'Lamberville', '31T', 355917, 5515320, 49.7731, 0.998888, 71),
('76380', 'Lammerville', '31T', 354783, 5517791, 49.795, 0.982226, 60),
('76381', 'Landes-Vieilles-et-Neuves', '31T', 401403, 5515750, 49.7861, 1.63028, 220),
('76382', 'Lanquetot', '31T', 321252, 5495460, 49.5853, 0.526942, 140),
('76383', 'Lestanville', '31T', 352837, 5512467, 49.7467, 0.957217, 139),
('76384', 'Lillebonne', '31T', 321637, 5488183, 49.52, 0.535557, 20),
('76385', 'Limésy', '31T', 350123, 5497584, 49.6122, 0.925272, 150),
('76386', 'Limpiville', '31T', 319955, 5507218, 49.6906, 0.503616, 122),
('76387', 'Lindebeuf', '31T', 349038, 5508369, 49.7089, 0.906105, 160),
('76388', 'Lintot', '31T', 324265, 5492919, 49.5633, 0.569723, 150),
('76389', 'Lintot-les-Bois', '31T', 361495, 5518233, 49.8006, 1.07527, 110),
('76390', 'Les Loges', '31T', 304024, 5508729, 49.6992, 0.282221, 100),
('76391', 'La Londe', '31T', 351368, 5462786, 49.2997, 0.955553, 128),
('76392', 'Londinières', '31T', 385178, 5521261, 49.8328, 1.40334, 80),
('76393', 'Longmesnil', '31T', 399690, 5496690, 49.6144, 1.61139, 159),
('76394', 'Longroy', '31T', 395222, 5538296, 49.9878, 1.53833, 40),
('76395', 'Longueil', '31T', 353485, 5528179, 49.8881, 0.960276, 20),
('76396', 'Longuerue', '31T', 376311, 5489942, 49.5494, 1.29, 170),
('76397', 'Longueville-sur-Scie', '31T', 363830, 5517216, 49.7919, 1.10806, 70),
('76398', 'Louvetot', '31T', 334677, 5493520, 49.5717, 0.713335, 145),
('76399', 'Lucy', '31T', 388918, 5515591, 49.7825, 1.45695, 120),
('76400', 'Luneray', '31T', 349949, 5521663, 49.8286, 0.913608, 73),
('76401', 'La Mailleraye-sur-Seine', '31T', 338618, 5483389, 49.4817, 0.771945, 20),
('76402', 'Malaunay', '31T', 358373, 5487413, 49.5228, 1.04306, 50),
('76403', 'Malleville-les-Grès', '31T', 328024, 5522565, 49.8308, 0.608613, 80),
('76404', 'Manéglise', '31T', 301527, 5494165, 49.5675, 0.255004, 80),
('76405', 'Manéhouville', '31T', 362014, 5522082, 49.8353, 1.08111, 38),
('76406', 'Maniquerville', '31T', 308629, 5508534, 49.6989, 0.346105, 113),
('76407', 'Manneville-ès-Plains', '31T', 338689, 5524863, 49.8544, 0.755833, 70),
('76408', 'Manneville-la-Goupil', '31T', 308884, 5498694, 49.6106, 0.354438, 125),
('76409', 'Mannevillette', '31T', 295891, 5497775, 49.5981, 0.17528, 95),
('76410', 'Maromme', '31T', 358284, 5482441, 49.4781, 1.04362, 26),
('76411', 'Marques', '31T', 405837, 5515393, 49.7836, 1.69195, 130),
('76412', 'Martainville-Épreville', '31T', 376145, 5479998, 49.46, 1.29083, 155),
('76413', 'Martigny', '31T', 367374, 5525470, 49.8669, 1.15445, 20),
('76414', 'Martin-Église', '31T', 366708, 5529257, 49.9008, 1.14388, 15),
('76415', 'Massy', '31T', 384539, 5505363, 49.6897, 1.39917, 140),
('76416', 'Mathonville', '31T', 383494, 5497786, 49.6214, 1.38694, 221),
('76417', 'Maucomble', '31T', 379472, 5504671, 49.6825, 1.32916, 210),
('76418', 'Maulévrier-Sainte-Gertrude', '31T', 335446, 5491705, 49.5556, 0.724722, 120),
('76419', 'Mauny', '31T', 346671, 5471877, 49.3803, 0.887494, 119),
('76420', 'Mauquenchy', '31T', 389293, 5495718, 49.6039, 1.46778, 160),
('76421', 'Mélamare', '31T', 315650, 5490268, 49.5369, 0.451945, 125),
('76422', 'Melleville', '31T', 390572, 5534928, 49.9567, 1.47445, 160),
('76423', 'Ménerval', '31T', 402943, 5491101, 49.5647, 1.65778, 160),
('76424', 'Ménonval', '31T', 391710, 5514175, 49.7703, 1.49611, 130),
('76425', 'Mentheville', '31T', 313269, 5507599, 49.6919, 0.410829, 129),
('76426', 'Mésangueville', '31T', 395913, 5489162, 49.5461, 1.56111, 160),
('76427', 'Mesnières-en-Bray', '31T', 383571, 5513479, 49.7625, 1.38333, 80),
('76428', 'Le Mesnil-Durdent', '31T', 340115, 5520400, 49.8147, 0.777496, 85),
('76429', 'Le Mesnil-Esnard', '31T', 365006, 5474206, 49.4056, 1.13917, 150),
('76430', 'Mesnil-Follemprise', '31T', 377458, 5514850, 49.7736, 1.29806, 110),
('76431', 'Le Mesnil-Lieubray', '31T', 392164, 5486609, 49.5225, 1.51, 115),
('76432', 'Mesnil-Mauger', '31T', 393071, 5503026, 49.6703, 1.51806, 160),
('76433', 'Mesnil-Panneville', '31T', 346378, 5495093, 49.5889, 0.874442, 130),
('76434', 'Mesnil-Raoul', '31T', 374918, 5472982, 49.3967, 1.27612, 155),
('76435', 'Le Mesnil-Réaume', '31T', 388593, 5536575, 49.9711, 1.44639, 140),
('76436', 'Le Mesnil-sous-Jumièges', '31T', 344694, 5475425, 49.4117, 0.858889, 20),
('76437', 'Meulers', '31T', 372636, 5522501, 49.8414, 1.22861, 30),
('76438', 'Millebosc', '31T', 391847, 5536880, 49.9744, 1.49167, 140),
('76439', 'Mirville', '31T', 315243, 5498412, 49.61, 0.442502, 100),
('76440', 'Molagnies', '31T', 407661, 5486201, 49.5214, 1.72416, 130),
('76441', 'Monchaux-Soreng', '31T', 399301, 5533800, 49.9481, 1.59639, 50),
('76442', 'Monchy-sur-Eu', '31T', 389065, 5539161, 49.9944, 1.45222, 107),
('76443', 'Mont-Cauvaire', '31T', 363395, 5492754, 49.5719, 1.11056, 175),
('76444', 'Mont-de-l''If', '31T', 342888, 5495286, 49.5897, 0.826112, 131),
('76445', 'Montérolier', '31T', 380728, 5498865, 49.6306, 1.34833, 150),
('76446', 'Montigny', '31T', 354726, 5480402, 49.4589, 0.995279, 130),
('76447', 'Montivilliers', '31T', 296876, 5491863, 49.5453, 0.191946, 30),
('76448', 'Montmain', '31T', 373966, 5474548, 49.4106, 1.26251, 140),
('76449', 'Montreuil-en-Caux', '31T', 366566, 5504850, 49.6814, 1.15028, 160),
('76450', 'Montroty', '31T', 403257, 5477072, 49.4386, 1.66556, 190),
('76451', 'Mont-Saint-Aignan', '31T', 361172, 5481223, 49.4678, 1.08389, 150),
('76452', 'Montville', '31T', 360779, 5490256, 49.5489, 1.07528, 50),
('76453', 'Morgny-la-Pommeraye', '31T', 373818, 5485612, 49.51, 1.25694, 160),
('76454', 'Mortemer', '31T', 395893, 5512146, 49.7528, 1.55472, 140),
('76455', 'Morville-sur-Andelle', '31T', 385730, 5482847, 49.4875, 1.42222, 80),
('76456', 'Motteville', '31T', 345239, 5500225, 49.6347, 0.856671, 145),
('76457', 'Moulineaux', '31T', 352362, 5467425, 49.3417, 0.9675, 10),
('76458', 'Muchedent', '31T', 369358, 5513402, 49.7589, 1.1861, 52),
('76459', 'Nesle-Hodeng', '31T', 392450, 5507116, 49.7069, 1.50833, 130),
('76460', 'Nesle-Normandeuse', '31T', 404542, 5529225, 49.9078, 1.67056, 66),
('76461', 'Neufbosc', '31T', 381966, 5500445, 49.645, 1.365, 200),
('76462', 'Neufchâtel-en-Bray', '31T', 387667, 5510272, 49.7344, 1.44111, 100),
('76463', 'Neuf-Marché', '31T', 407013, 5475246, 49.4228, 1.71778, 90),
('76464', 'La Neuville-Chant-d''Oisel', '31T', 372764, 5469695, 49.3667, 1.2475, 155),
('76465', 'Neuville-Ferrières', '31T', 388897, 5507744, 49.7119, 1.45889, 100),
('76467', 'Néville', '31T', 335161, 5521879, 49.8267, 0.708061, 69),
('76468', 'Nointot', '31T', 317729, 5497060, 49.5986, 0.477507, 135),
('76469', 'Nolléval', '31T', 390129, 5483406, 49.4933, 1.48278, 90),
('76470', 'Normanville', '31T', 326482, 5507531, 49.6953, 0.59389, 130),
('76471', 'Norville', '31T', 328933, 5482787, 49.4736, 0.63861, 30),
('76472', 'Notre-Dame-d''Aliermont', '31T', 377141, 5523756, 49.8536, 1.29084, 178),
('76473', 'Notre-Dame-de-Bliquetuit', '31T', 338073, 5484703, 49.4933, 0.763889, 20),
('76474', 'Notre-Dame-de-Bondeville', '31T', 358391, 5483488, 49.4875, 1.04472, 30),
('76475', 'Franqueville-Saint-Pierre', '31T', 367163, 5474184, 49.4058, 1.16889, 150),
('76476', 'Notre-Dame-de-Gravenchon', '31T', 323994, 5485139, 49.4933, 0.569449, 30),
('76477', 'Notre-Dame-du-Bec', '31T', 298604, 5497241, 49.5942, 0.213053, 50),
('76478', 'Notre-Dame-du-Parc', '31T', 365227, 5512298, 49.7481, 1.12916, 130),
('76479', 'Nullemont', '31T', 402267, 5513757, 49.7683, 1.64278, 220),
('76480', 'Ocqueville', '31T', 333656, 5519112, 49.8014, 0.688339, 100),
('76481', 'Octeville-sur-Mer', '31T', 291475, 5493212, 49.5556, 0.116665, 74),
('76482', 'Offranville', '31T', 359996, 5525966, 49.8697, 1.05166, 80),
('76483', 'Oherville', '31T', 332797, 5510114, 49.7203, 0.680275, 60),
('76484', 'Oissel', '31T', 361833, 5467518, 49.3447, 1.09778, 15),
('76485', 'Omonville', '31T', 359422, 5517730, 49.7956, 1.04667, 110);
INSERT INTO `ods_communes` (`oc_code_insee`, `oc_nom`, `oc_secteur`, `oc_x_utm`, `oc_y_utm`, `oc_latitude`, `oc_longitude`, `oc_altitude`) VALUES
('76486', 'Orival', '31T', 354188, 5464719, 49.3178, 0.993611, 20),
('76487', 'Osmoy-Saint-Valery', '31T', 379175, 5517376, 49.7967, 1.32111, 50),
('76488', 'Ouainville', '31T', 326425, 5517609, 49.7858, 0.588614, 110),
('76489', 'Oudalle', '31T', 304638, 5487282, 49.5067, 0.30139, 100),
('76490', 'Ourville-en-Caux', '31T', 327324, 5511305, 49.7294, 0.603886, 121),
('76491', 'Ouville-l''Abbaye', '31T', 345627, 5506796, 49.6939, 0.85945, 150),
('76492', 'Ouville-la-Rivière', '31T', 355620, 5526638, 49.8747, 0.990554, 9),
('76493', 'Paluel', '31T', 329387, 5522677, 49.8322, 0.6275, 7),
('76494', 'Parc-d''Anxtot', '31T', 311465, 5495481, 49.5825, 0.391668, 120),
('76495', 'Pavilly', '31T', 352294, 5492488, 49.5669, 0.957219, 70),
('76496', 'Penly', '31T', 373215, 5537720, 49.9783, 1.23166, 114),
('76497', 'Petit-Couronne', '31T', 356215, 5471927, 49.3831, 1.01888, 13),
('76498', 'Le Petit-Quevilly', '31T', 359278, 5476482, 49.4247, 1.05945, 20),
('76499', 'Petiville', '31T', 325186, 5481515, 49.4611, 0.587496, 10),
('76500', 'Pierrecourt', '31T', 403878, 5527815, 49.895, 1.66166, 80),
('76501', 'Pierrefiques', '31T', 300371, 5505926, 49.6728, 0.233054, 90),
('76502', 'Pierreval', '31T', 373984, 5489285, 49.5431, 1.25806, 170),
('76503', 'Pissy-Pôville', '31T', 354859, 5488433, 49.5311, 0.994164, 125),
('76504', 'Pleine-Sève', '31T', 338743, 5520658, 49.8167, 0.758332, 80),
('76505', 'Pommereux', '31T', 400691, 5495436, 49.6033, 1.62556, 160),
('76506', 'Pommeréval', '31T', 378995, 5511108, 49.7403, 1.32056, 200),
('76507', 'Ponts-et-Marais', '31T', 388678, 5544514, 50.0425, 1.44527, 10),
('76508', 'La Poterie-Cap-d''Antifer', '31T', 297324, 5506008, 49.6725, 0.190832, 100),
('76509', 'Préaux', '31T', 370852, 5483550, 49.4908, 1.21666, 160),
('76510', 'Prétot-Vicquemare', '31T', 345335, 5510606, 49.7281, 0.853895, 130),
('76511', 'Preuseville', '31T', 393429, 5525231, 49.87, 1.51694, 190),
('76512', 'Puisenval', '31T', 390129, 5526904, 49.8844, 1.47056, 110),
('76513', 'Quevillon', '31T', 351358, 5475796, 49.4167, 0.95056, 10),
('76514', 'Quévreville-la-Poterie', '31T', 368618, 5468433, 49.3544, 1.19084, 130),
('76515', 'Quiberville', '31T', 350646, 5529493, 49.8992, 0.920272, 45),
('76516', 'Quièvrecourt', '31T', 386526, 5510296, 49.7344, 1.42528, 80),
('76517', 'Quincampoix', '31T', 368650, 5487372, 49.5247, 1.185, 166),
('76518', 'Raffetot', '31T', 320482, 5497093, 49.5997, 0.515553, 135),
('76519', 'Rainfreville', '31T', 351546, 5517200, 49.7889, 0.937504, 60),
('76520', 'Réalcamp', '31T', 401097, 5523046, 49.8517, 1.62417, 211),
('76521', 'Rebets', '31T', 383695, 5485548, 49.5114, 1.39334, 110),
('76522', 'La Remuée', '31T', 312162, 5489460, 49.5286, 0.404171, 125),
('76523', 'Rétonval', '31T', 399113, 5519499, 49.8194, 1.5975, 149),
('76524', 'Reuville', '31T', 346465, 5513015, 49.75, 0.868614, 145),
('76525', 'Ricarville', '31T', 327173, 5500894, 49.6358, 0.606393, 130),
('76526', 'Ricarville-du-Val', '31T', 375967, 5518777, 49.8086, 1.27611, 50),
('76527', 'Richemont', '31T', 402528, 5518263, 49.8089, 1.64527, 216),
('76528', 'Rieux', '31T', 398263, 5532676, 49.9378, 1.58223, 70),
('76529', 'Riville', '31T', 324411, 5511059, 49.7264, 0.563614, 120),
('76530', 'Robertot', '31T', 333975, 5509954, 49.7192, 0.696673, 112),
('76531', 'Rocquefort', '31T', 333555, 5504125, 49.6667, 0.693333, 120),
('76532', 'Rocquemont', '31T', 375964, 5495883, 49.6028, 1.28334, 178),
('76533', 'Rogerville', '31T', 302025, 5486851, 49.5019, 0.265555, 90),
('76534', 'Rolleville', '31T', 298439, 5496041, 49.5833, 0.211387, 50),
('76535', 'Roncherolles-en-Bray', '31T', 389058, 5497020, 49.6156, 1.46416, 160),
('76536', 'Roncherolles-sur-le-Vivier', '31T', 368374, 5480921, 49.4667, 1.18334, 160),
('76537', 'Ronchois', '31T', 401157, 5508897, 49.7244, 1.6286, 240),
('76538', 'Rosay', '31T', 373514, 5506228, 49.6953, 1.2461, 86),
('76540', 'Rouen', '31T', 361470, 5477879, 49.4378, 1.08917, 22),
('76541', 'Roumare', '31T', 353712, 5486146, 49.5103, 0.979171, 126),
('76542', 'Routes', '31T', 337599, 5511203, 49.7314, 0.746388, 140),
('76543', 'Rouville', '31T', 319392, 5498736, 49.6142, 0.499728, 130),
('76544', 'Rouvray-Catillon', '31T', 390167, 5492271, 49.5731, 1.48084, 130),
('76545', 'Rouxmesnil-Bouteilles', '31T', 363069, 5529781, 49.9047, 1.09305, 10),
('76546', 'Royville', '31T', 352644, 5515655, 49.7753, 0.953334, 117),
('76547', 'La Rue-Saint-Pierre', '31T', 373197, 5491775, 49.5653, 1.24638, 165),
('76548', 'Ry', '31T', 379877, 5481181, 49.4714, 1.34195, 80),
('76549', 'Saâne-Saint-Just', '31T', 350736, 5513977, 49.7597, 0.927495, 60),
('76550', 'Sahurs', '31T', 350673, 5469171, 49.3569, 0.94361, 6),
('76551', 'Sainneville', '31T', 303874, 5492905, 49.5569, 0.288054, 100),
('76552', 'Sainte-Adresse', '31T', 288637, 5488498, 49.5122, 0.0800024, 80),
('76553', 'Sainte-Agathe-d''Aliermont', '31T', 379970, 5520726, 49.8269, 1.33112, 190),
('76554', 'Saint-Aignan-sur-Ry', '31T', 380758, 5484653, 49.5028, 1.35306, 150),
('76555', 'Saint-André-sur-Cailly', '31T', 371222, 5489813, 49.5472, 1.21973, 160),
('76556', 'Saint-Antoine-la-Forêt', '31T', 316978, 5490285, 49.5375, 0.470274, 135),
('76557', 'Saint-Arnoult', '31T', 331435, 5488798, 49.5283, 0.670552, 139),
('76558', 'Saint-Aubin-Celloville', '31T', 366464, 5469504, 49.3636, 1.16083, 140),
('76559', 'Saint-Aubin-de-Crétot', '31T', 329282, 5493254, 49.5678, 0.638896, 145),
('76560', 'Saint-Aubin-Épinay', '31T', 368012, 5475955, 49.4219, 1.18, 44),
('76561', 'Saint-Aubin-lès-Elbeuf', '31T', 355859, 5462976, 49.3025, 1.01722, 16),
('76562', 'Saint-Aubin-le-Cauf', '31T', 369436, 5525698, 49.8694, 1.18305, 20),
('76563', 'Saint-Aubin-Routot', '31T', 306419, 5489259, 49.525, 0.324994, 100),
('76564', 'Saint-Aubin-sur-Mer', '31T', 347501, 5528376, 49.8883, 0.87695, 20),
('76565', 'Saint-Aubin-sur-Scie', '31T', 361624, 5526357, 49.8736, 1.07417, 20),
('76566', 'Sainte-Austreberthe', '31T', 353751, 5495848, 49.5975, 0.976107, 100),
('76567', 'Sainte-Beuve-en-Rivière', '31T', 394194, 5513292, 49.7628, 1.53084, 130),
('76568', 'Saint-Clair-sur-les-Monts', '31T', 340054, 5497285, 49.6069, 0.786116, 140),
('76569', 'Sainte-Colombe', '31T', 339015, 5518363, 49.7961, 0.763062, 105),
('76570', 'Saint-Crespin', '31T', 364203, 5516156, 49.7825, 1.11361, 70),
('76571', 'Sainte-Croix-sur-Buchy', '31T', 380808, 5491541, 49.5647, 1.35166, 179),
('76572', 'Saint-Denis-d''Aclon', '31T', 353049, 5526090, 49.8692, 0.955004, 17),
('76573', 'Saint-Denis-le-Thiboult', '31T', 381361, 5480005, 49.4611, 1.36277, 70),
('76574', 'Saint-Denis-sur-Scie', '31T', 362729, 5507727, 49.7064, 1.09611, 103),
('76575', 'Saint-Étienne-du-Rouvray', '31T', 362349, 5471182, 49.3778, 1.10361, 20),
('76576', 'Saint-Eustache-la-Forêt', '31T', 315768, 5491964, 49.5522, 0.452782, 100),
('76577', 'Sainte-Foy', '31T', 365800, 5517599, 49.7958, 1.13528, 140),
('76578', 'Sainte-Geneviève', '31T', 386642, 5502415, 49.6636, 1.42917, 176),
('76580', 'Saint-Georges-sur-Fontaine', '31T', 368339, 5489481, 49.5436, 1.18, 165),
('76581', 'Saint-Germain-des-Essourts', '31T', 378355, 5488784, 49.5394, 1.31861, 122),
('76582', 'Saint-Germain-d''Étables', '31T', 369380, 5521713, 49.8336, 1.18362, 30),
('76583', 'Saint-Germain-sous-Cailly', '31T', 370940, 5493188, 49.5775, 1.21472, 108),
('76584', 'Saint-Germain-sur-Eaulne', '31T', 392599, 5513601, 49.7653, 1.50861, 130),
('76585', 'Saint-Gilles-de-Crétot', '31T', 329650, 5492192, 49.5583, 0.64444, 120),
('76586', 'Saint-Gilles-de-la-Neuville', '31T', 310291, 5494687, 49.575, 0.375827, 100),
('76587', 'Sainte-Hélène-Bondeville', '31T', 317558, 5515243, 49.7619, 0.466663, 110),
('76588', 'Saint-Hellier', '31T', 369545, 5512007, 49.7464, 1.18917, 80),
('76589', 'Saint-Honoré', '31T', 367368, 5516293, 49.7844, 1.1575, 150),
('76590', 'Saint-Jacques-d''Aliermont', '31T', 374789, 5523161, 49.8478, 1.25833, 162),
('76591', 'Saint-Jacques-sur-Darnétal', '31T', 369833, 5477920, 49.44, 1.20445, 155),
('76592', 'Saint-Jean-de-Folleville', '31T', 319416, 5488565, 49.5228, 0.504725, 133),
('76593', 'Saint-Jean-de-la-Neuville', '31T', 313524, 5494575, 49.575, 0.420553, 125),
('76594', 'Saint-Jean-du-Cardonnay', '31T', 356104, 5485310, 49.5033, 1.0125, 130),
('76595', 'Saint-Jouin-Bruneval', '31T', 295442, 5505058, 49.6633, 0.165277, 110),
('76596', 'Saint-Laurent-de-Brèvedent', '31T', 301586, 5490268, 49.5325, 0.257781, 50),
('76597', 'Saint-Laurent-en-Caux', '31T', 347287, 5513054, 49.7506, 0.880002, 140),
('76598', 'Saint-Léger-aux-Bois', '31T', 400142, 5521118, 49.8342, 1.61139, 211),
('76599', 'Saint-Léger-du-Bourg-Denis', '31T', 366826, 5476911, 49.4303, 1.16333, 40),
('76600', 'Saint-Léonard', '31T', 309865, 5513437, 49.7433, 0.360838, 80),
('76602', 'Saint-Maclou-de-Folleville', '31T', 363336, 5504776, 49.68, 1.10556, 130),
('76603', 'Saint-Maclou-la-Brière', '31T', 317100, 5503450, 49.6558, 0.465832, 120),
('76604', 'Saint-Mards', '31T', 357019, 5513838, 49.76, 1.01473, 90),
('76605', 'Sainte-Marguerite-sur-Mer', '31T', 352668, 5530427, 49.9081, 0.948052, 40),
('76606', 'Morienne', '31T', 407333, 5515151, 49.7817, 1.71278, 210),
('76607', 'Sainte-Marguerite-sur-Fauville', '31T', 327160, 5504912, 49.6719, 0.604441, 135),
('76608', 'Sainte-Marguerite-sur-Duclair', '31T', 343797, 5486359, 49.5097, 0.842219, 113),
('76609', 'Sainte-Marie-au-Bosc', '31T', 298323, 5505352, 49.6669, 0.204999, 110),
('76610', 'Sainte-Marie-des-Champs', '31T', 339443, 5499033, 49.6225, 0.776951, 140),
('76611', 'Saint-Martin-aux-Arbres', '31T', 348050, 5501721, 49.6489, 0.894994, 170),
('76612', 'Saint-Martin-au-Bosc', '31T', 403792, 5520743, 49.8314, 1.66222, 200),
('76613', 'Saint-Martin-aux-Buneaux', '31T', 324071, 5522137, 49.8258, 0.553892, 87),
('76614', 'Saint-Martin-de-Boscherville', '31T', 352326, 5478798, 49.4439, 0.96278, 20),
('76615', 'Saint-Martin-du-Bec', '31T', 298438, 5498175, 49.6025, 0.210279, 70),
('76616', 'Saint-Martin-du-Manoir', '31T', 300277, 5490254, 49.5319, 0.239719, 90),
('76617', 'Saint-Martin-du-Vivier', '31T', 366992, 5481233, 49.4692, 1.16417, 60),
('76618', 'Saint-Martin-en-Campagne', '31T', 372601, 5535355, 49.9569, 1.22389, 118),
('76619', 'Saint-Martin-le-Gaillard', '31T', 383173, 5537525, 49.9786, 1.37055, 30),
('76620', 'Saint-Martin-l''Hortier', '31T', 385024, 5511223, 49.7425, 1.40417, 80),
('76621', 'Saint-Martin-Osmonville', '31T', 377317, 5499806, 49.6383, 1.30083, 176),
('76622', 'Saint-Maurice-d''Ételan', '31T', 326987, 5481118, 49.4581, 0.612501, 20),
('76623', 'Saint-Michel-d''Halescourt', '31T', 403812, 5495967, 49.6086, 1.66861, 220),
('76624', 'Saint-Nicolas-d''Aliermont', '31T', 372396, 5526709, 49.8792, 1.22389, 130),
('76625', 'Saint-Nicolas-de-Bliquetuit', '31T', 335749, 5486410, 49.5081, 0.731113, 10),
('76626', 'Saint-Nicolas-de-la-Haie', '31T', 328172, 5491867, 49.555, 0.624163, 130),
('76627', 'Saint-Nicolas-de-la-Taille', '31T', 317099, 5487282, 49.5106, 0.473337, 110),
('76628', 'Saint-Ouen-du-Breuil', '31T', 356278, 5500261, 49.6378, 1.00944, 170),
('76629', 'Saint-Ouen-le-Mauger', '31T', 353273, 5513753, 49.7583, 0.962781, 125),
('76630', 'Saint-Ouen-sous-Bailly', '31T', 377462, 5529094, 49.9017, 1.29361, 55),
('76631', 'Saint-Paër', '31T', 346649, 5486865, 49.515, 0.881391, 107),
('76632', 'Saint-Pierre-Bénouville', '31T', 353899, 5511727, 49.7403, 0.972227, 130),
('76634', 'Saint-Pierre-de-Manneville', '31T', 349912, 5473054, 49.3917, 0.931672, 10),
('76635', 'Saint-Pierre-des-Jonquières', '31T', 388717, 5523319, 49.8519, 1.45194, 200),
('76636', 'Saint-Pierre-de-Varengeville', '31T', 350245, 5485220, 49.5011, 0.931661, 120),
('76637', 'Saint-Pierre-en-Port', '31T', 319786, 5520176, 49.8069, 0.495283, 90),
('76638', 'Saint-Pierre-en-Val', '31T', 388807, 5542101, 50.0208, 1.44778, 60),
('76639', 'Saint-Pierre-Lavis', '31T', 328837, 5503375, 49.6586, 0.628335, 135),
('76640', 'Saint-Pierre-lès-Elbeuf', '31T', 357814, 5459649, 49.2731, 1.04528, 20),
('76641', 'Saint-Pierre-le-Vieux', '31T', 347117, 5523999, 49.8489, 0.873337, 40),
('76642', 'Saint-Pierre-le-Viger', '31T', 345414, 5521081, 49.8222, 0.850829, 50),
('76643', 'Saint-Quentin-au-Bosc', '31T', 379650, 5533215, 49.9392, 1.32278, 125),
('76644', 'Saint-Rémy-Boscrocourt', '31T', 384875, 5540670, 50.0072, 1.39334, 90),
('76645', 'Saint-Riquier-en-Rivière', '31T', 396707, 5527454, 49.8906, 1.56195, 95),
('76646', 'Saint-Riquier-ès-Plains', '31T', 332155, 5521693, 49.8242, 0.666382, 80),
('76647', 'Saint-Romain-de-Colbosc', '31T', 308774, 5489825, 49.5308, 0.357226, 116),
('76648', 'Saint-Saëns', '31T', 375844, 5503795, 49.6739, 1.27917, 120),
('76649', 'Saint-Saire', '31T', 391380, 5505717, 49.6942, 1.49388, 110),
('76650', 'Saint-Sauveur-d''Émalleville', '31T', 305249, 5499287, 49.6147, 0.303884, 130),
('76651', 'Saint-Sylvain', '31T', 332734, 5524210, 49.8469, 0.67334, 70),
('76652', 'Saint-Vaast-d''Équiqueville', '31T', 375291, 5519813, 49.8178, 1.26638, 40),
('76653', 'Saint-Vaast-Dieppedalle', '31T', 335976, 5513849, 49.7547, 0.722772, 90),
('76654', 'Saint-Vaast-du-Val', '31T', 356688, 5505874, 49.6883, 1.01306, 140),
('76655', 'Saint-Valery-en-Caux', '31T', 335744, 5526590, 49.8692, 0.714164, 32),
('76656', 'Saint-Victor-l''Abbaye', '31T', 364384, 5504193, 49.675, 1.12028, 140),
('76657', 'Saint-Vigor-d''Ymonville', '31T', 308952, 5485738, 49.4942, 0.36166, 110),
('76658', 'Saint-Vincent-Cramesnil', '31T', 308972, 5486881, 49.5044, 0.361384, 115),
('76659', 'Saint-Wandrille-Rançon', '31T', 338570, 5488551, 49.5281, 0.769174, 19),
('76660', 'Sandouville', '31T', 305984, 5486059, 49.4961, 0.320562, 100),
('76662', 'Sassetot-le-Malgardé', '31T', 348209, 5515222, 49.7703, 0.891947, 120),
('76663', 'Sassetot-le-Mauconduit', '31T', 322250, 5519692, 49.8033, 0.529717, 89),
('76664', 'Sasseville', '31T', 333246, 5517518, 49.7869, 0.68333, 112),
('76665', 'Sauchay', '31T', 371022, 5530202, 49.9103, 1.20361, 100),
('76666', 'Saumont-la-Poterie', '31T', 400157, 5492604, 49.5778, 1.61889, 160),
('76667', 'Sauqueville', '31T', 361330, 5524232, 49.8544, 1.07084, 25),
('76668', 'Saussay', '31T', 351293, 5499963, 49.6339, 0.940556, 160),
('76669', 'Sausseuzemare-en-Caux', '31T', 308403, 5504956, 49.6667, 0.344727, 123),
('76670', 'Senneville-sur-Fécamp', '31T', 313983, 5516663, 49.7736, 0.416396, 110),
('76671', 'Sept-Meules', '31T', 386720, 5534699, 49.9539, 1.42083, 50),
('76672', 'Serqueux', '31T', 394446, 5498489, 49.6297, 1.53833, 171),
('76673', 'Servaville-Salmonville', '31T', 374696, 5481792, 49.4758, 1.27027, 165),
('76674', 'Sévis', '31T', 367638, 5507697, 49.7072, 1.16417, 150),
('76675', 'Sierville', '31T', 358160, 5494711, 49.5883, 1.03749, 170),
('76676', 'Sigy-en-Bray', '31T', 390585, 5489112, 49.5447, 1.48749, 107),
('76677', 'Smermesnil', '31T', 390067, 5521901, 49.8394, 1.47111, 211),
('76678', 'Sommery', '31T', 387496, 5499123, 49.6342, 1.44195, 170),
('76679', 'Sommesnil', '31T', 332224, 5509081, 49.7108, 0.672776, 120),
('76680', 'Sorquainville', '31T', 323739, 5508887, 49.7067, 0.555279, 120),
('76681', 'Sotteville-lès-Rouen', '31T', 361358, 5475069, 49.4125, 1.08861, 20),
('76682', 'Sotteville-sous-le-Val', '31T', 363781, 5464658, 49.3194, 1.12556, 20),
('76683', 'Sotteville-sur-Mer', '31T', 344166, 5527699, 49.8814, 0.830829, 46),
('76684', 'Tancarville', '31T', 315482, 5484709, 49.4869, 0.452223, 90),
('76685', 'Thérouldeville', '31T', 321570, 5514243, 49.7542, 0.522775, 118),
('76686', 'Theuville-aux-Maillots', '31T', 323210, 5515395, 49.765, 0.544998, 112),
('76688', 'Thiergeville', '31T', 319600, 5510414, 49.7192, 0.497223, 120),
('76689', 'Thiétreville', '31T', 320704, 5509852, 49.7144, 0.512782, 120),
('76690', 'Thil-Manneville', '31T', 355171, 5522571, 49.8381, 0.98583, 70),
('76691', 'Le Thil-Riberpré', '31T', 397500, 5499759, 49.6417, 1.58028, 199),
('76692', 'Thiouville', '31T', 328363, 5507409, 49.6947, 0.620003, 120),
('76693', 'Le Tilleul', '31T', 298271, 5507179, 49.6833, 0.203338, 105),
('76694', 'Tocqueville-en-Caux', '31T', 349442, 5516362, 49.7808, 0.908618, 121),
('76695', 'Tocqueville-les-Murs', '31T', 319891, 5504685, 49.6678, 0.503896, 135),
('76696', 'Tocqueville-sur-Eu', '31T', 377138, 5540193, 50.0014, 1.28556, 84),
('76697', 'Torcy-le-Grand', '31T', 368659, 5518363, 49.8033, 1.17473, 40),
('76698', 'Torcy-le-Petit', '31T', 368648, 5519568, 49.8142, 1.17417, 30),
('76699', 'Le Torp-Mesnil', '31T', 348685, 5509337, 49.7175, 0.900838, 155),
('76700', 'Tôtes', '31T', 359131, 5505007, 49.6811, 1.04722, 160),
('76701', 'Touffreville-la-Cable', '31T', 327756, 5488233, 49.5222, 0.620004, 145),
('76702', 'Touffreville-la-Corbeline', '31T', 338420, 5494366, 49.5803, 0.764717, 135),
('76703', 'Touffreville-sur-Eu', '31T', 380042, 5540066, 50.0008, 1.32611, 20),
('76704', 'Tourville-la-Chapelle', '31T', 375564, 5534174, 49.9469, 1.26556, 135),
('76705', 'Tourville-la-Rivière', '31T', 362429, 5465526, 49.3269, 1.10666, 20),
('76706', 'Tourville-les-Ifs', '31T', 312591, 5510003, 49.7133, 0.400285, 123),
('76707', 'Tourville-sur-Arques', '31T', 363520, 5524732, 49.8594, 1.10111, 100),
('76708', 'Toussaint', '31T', 314509, 5512750, 49.7386, 0.425557, 109),
('76709', 'Le Trait', '31T', 341296, 5483402, 49.4825, 0.808884, 20),
('76710', 'Trémauville', '31T', 320866, 5504468, 49.6661, 0.517494, 125),
('76711', 'Le Tréport', '31T', 383543, 5546261, 50.0572, 1.37306, 20),
('76712', 'La Trinité-du-Mont', '31T', 323046, 5490672, 49.5428, 0.55389, 130),
('76713', 'Triquerville', '31T', 328333, 5486113, 49.5033, 0.628891, 100),
('76714', 'Les Trois-Pierres', '31T', 313376, 5491427, 49.5467, 0.419999, 125),
('76715', 'Trouville', '31T', 326571, 5493989, 49.5736, 0.601112, 145),
('76716', 'Turretot', '31T', 300193, 5498914, 49.6097, 0.234164, 100),
('76717', 'Val-de-la-Haye', '31T', 355094, 5471493, 49.3789, 1.00361, 10),
('76718', 'Valliquerville', '31T', 333007, 5498053, 49.6119, 0.688331, 134),
('76719', 'Valmont', '31T', 320886, 5512937, 49.7422, 0.513888, 60),
('76720', 'Varengeville-sur-Mer', '31T', 355420, 5530352, 49.9081, 0.986383, 86),
('76721', 'Varneville-Bretteville', '31T', 359066, 5501733, 49.6517, 1.0475, 165),
('76723', 'Vassonville', '31T', 362457, 5506497, 49.6953, 1.09278, 110),
('76724', 'Vatierville', '31T', 392087, 5515032, 49.7781, 1.50111, 119),
('76725', 'Vattetot-sous-Beaumont', '31T', 315539, 5500040, 49.6247, 0.445831, 130),
('76726', 'Vattetot-sur-Mer', '31T', 304060, 5511944, 49.7281, 0.281107, 89),
('76727', 'Vatteville-la-Rue', '31T', 332411, 5484534, 49.4903, 0.685838, 10),
('76728', 'La Vaupalière', '31T', 354910, 5483549, 49.4872, 0.996663, 130),
('76729', 'Veauville-lès-Baons', '31T', 338625, 5502581, 49.6542, 0.764174, 140),
('76730', 'Veauville-lès-Quelles', '31T', 335041, 5512054, 49.7383, 0.710561, 120),
('76731', 'Vénestanville', '31T', 349261, 5517788, 49.7936, 0.905552, 109),
('76732', 'Butot-Vénesville', '31T', 326310, 5520889, 49.8153, 0.585552, 80),
('76733', 'Ventes-Saint-Rémy', '31T', 377956, 5507671, 49.7092, 1.30722, 210),
('76734', 'Vergetot', '31T', 303725, 5499898, 49.6197, 0.282505, 120),
('76735', 'Veules-les-Roses', '31T', 341887, 5526932, 49.8739, 0.799444, 30),
('76736', 'Veulettes-sur-Mer', '31T', 327102, 5524357, 49.8467, 0.595005, 30),
('76737', 'Vibeuf', '31T', 348908, 5506580, 49.6928, 0.904995, 165),
('76738', 'Vieux-Manoir', '31T', 376936, 5491813, 49.5664, 1.29806, 175),
('76739', 'Vieux-Rouen-sur-Bresle', '31T', 408030, 5520854, 49.8331, 1.72111, 90),
('76740', 'La Vieux-Rue', '31T', 373107, 5484455, 49.4994, 1.2475, 168),
('76741', 'Villainville', '31T', 301084, 5504570, 49.6608, 0.243614, 110),
('76742', 'Villequier', '31T', 331407, 5487223, 49.5142, 0.670839, 20),
('76743', 'Villers-Écalles', '31T', 349498, 5489505, 49.5394, 0.919717, 110),
('76744', 'Villers-sous-Foucarmont', '31T', 396814, 5521582, 49.8378, 1.565, 130),
('76745', 'Villy-sur-Yères', '31T', 388964, 5533324, 49.9419, 1.4525, 60),
('76746', 'Vinnemerville', '31T', 324089, 5520250, 49.8089, 0.554997, 85),
('76747', 'Virville', '31T', 308815, 5496717, 49.5928, 0.354446, 120),
('76748', 'Vittefleur', '31T', 330040, 5521203, 49.8192, 0.637217, 30),
('76749', 'Wanchy-Capval', '31T', 382041, 5524048, 49.8572, 1.35889, 80),
('76750', 'Yainville', '31T', 342714, 5480178, 49.4539, 0.829728, 17),
('76751', 'Yébleron', '31T', 322211, 5500807, 49.6336, 0.537776, 140),
('76752', 'Yerville', '31T', 348209, 5503787, 49.6675, 0.896394, 164),
('76753', 'Ymare', '31T', 367470, 5467688, 49.3475, 1.17528, 138),
('76754', 'Yport', '31T', 306460, 5512908, 49.7375, 0.313892, 20),
('76755', 'Ypreville-Biville', '31T', 322231, 5507545, 49.6942, 0.534994, 126),
('76756', 'Yquebeuf', '31T', 374168, 5495491, 49.5989, 1.25862, 170),
('76757', 'Yvecrique', '31T', 342082, 5506250, 49.6881, 0.810552, 155),
('76758', 'Yvetot', '31T', 337723, 5498590, 49.6181, 0.753338, 150),
('76759', 'Yville-sur-Seine', '31T', 346289, 5474051, 49.3997, 0.881394, 10),
('77001', 'Achères-la-Forêt', '31T', 468164, 5355693, 48.3536, 2.57027, 110),
('77002', 'Amillis', '31T', 509599, 5398592, 48.7403, 3.13056, 110),
('77003', 'Amponville', '31T', 465088, 5347405, 48.2789, 2.52944, 115),
('77004', 'Andrezel', '31T', 486261, 5384243, 48.6111, 2.81361, 96),
('77005', 'Annet-sur-Marne', '31T', 479470, 5419372, 48.9269, 2.71972, 50),
('77006', 'Arbonne-la-Forêt', '31T', 467770, 5362365, 48.4136, 2.56444, 73),
('77007', 'Argentières', '31T', 490446, 5389051, 48.6544, 2.87027, 90),
('77008', 'Armentières-en-Brie', '31T', 501504, 5425047, 48.9783, 3.02055, 66),
('77009', 'Arville', '31T', 466533, 5337177, 48.1869, 2.54972, 103),
('77010', 'Aubepierre-Ozouer-le-Repos', '31T', 491690, 5386425, 48.6308, 2.88722, 112),
('77011', 'Aufferville', '31T', 471028, 5340178, 48.2142, 2.60999, 109),
('77012', 'Augers-en-Brie', '31T', 526397, 5391977, 48.6803, 3.35861, 145),
('77013', 'Aulnoy', '31T', 507052, 5409859, 48.8417, 3.09611, 130),
('77014', 'Avon', '31T', 479546, 5361662, 48.4078, 2.72362, 80),
('77015', 'Baby', '31T', 525311, 5360508, 48.3972, 3.34194, 90),
('77016', 'Bagneaux-sur-Loing', '31T', 478133, 5341783, 48.2289, 2.70555, 66),
('77018', 'Bailly-Romainvilliers', '31T', 486160, 5409718, 48.8403, 2.81138, 132),
('77019', 'Balloy', '31T', 510898, 5360462, 48.3972, 3.14723, 54),
('77020', 'Bannost-Villegagnon', '31T', 514170, 5391686, 48.6781, 3.19249, 150),
('77021', 'Barbey', '31T', 504218, 5356872, 48.365, 3.05695, 55),
('77022', 'Barbizon', '31T', 470626, 5366054, 48.4469, 2.60278, 80),
('77023', 'Barcy', '31T', 491307, 5429439, 49.0178, 2.88111, 120),
('77024', 'Bassevelle', '31T', 521079, 5419529, 48.9283, 3.28778, 200),
('77025', 'Bazoches-lès-Bray', '31T', 514002, 5360716, 48.3994, 3.18917, 60),
('77026', 'Beauchery-Saint-Martin', '31T', 529789, 5384738, 48.615, 3.40417, 155),
('77027', 'Beaumont-du-Gâtinais', '31T', 460982, 5331562, 48.1361, 2.47556, 90),
('77028', 'Beautheil', '31T', 506451, 5401182, 48.7636, 3.08778, 120),
('77029', 'Beauvoir', '31T', 489994, 5388033, 48.6453, 2.86416, 102),
('77030', 'Bellot', '31T', 523411, 5411633, 48.8572, 3.31916, 90),
('77031', 'Bernay-Vilbert', '31T', 495460, 5391546, 48.6769, 2.93833, 90),
('77032', 'Beton-Bazoches', '31T', 518027, 5394321, 48.7017, 3.245, 141),
('77033', 'Bezalles', '31T', 517953, 5391727, 48.6783, 3.24389, 160),
('77034', 'Blandy', '31T', 483954, 5379216, 48.5658, 2.7825, 82),
('77035', 'Blennes', '31T', 501794, 5344890, 48.2572, 3.02417, 110),
('77036', 'Boisdon', '31T', 516561, 5392402, 48.6844, 3.225, 160),
('77037', 'Bois-le-Roi', '31T', 478298, 5368552, 48.4697, 2.7064, 87),
('77038', 'Boissettes', '31T', 471243, 5374326, 48.5214, 2.61055, 50),
('77039', 'Boissise-la-Bertrand', '31T', 469626, 5375014, 48.5275, 2.58861, 50),
('77040', 'Boissise-le-Roi', '31T', 468478, 5375082, 48.5281, 2.57305, 42),
('77041', 'Boissy-aux-Cailles', '31T', 463221, 5351925, 48.3194, 2.50388, 74),
('77042', 'Boissy-le-Châtel', '31T', 510175, 5407548, 48.8208, 3.13862, 110),
('77043', 'Boitron', '31T', 519179, 5415940, 48.8961, 3.26167, 185),
('77044', 'Bombon', '31T', 489632, 5380068, 48.5736, 2.85945, 110),
('77045', 'Bougligny', '31T', 474547, 5338031, 48.195, 2.65749, 116),
('77046', 'Boulancourt', '31T', 458064, 5345075, 48.2575, 2.435, 90),
('77047', 'Bouleurs', '31T', 493239, 5414429, 48.8828, 2.90778, 100),
('77048', 'Bourron-Marlotte', '31T', 477830, 5354072, 48.3394, 2.70083, 75),
('77049', 'Boutigny', '31T', 494892, 5418565, 48.92, 2.93028, 130),
('77050', 'Bransles', '31T', 487604, 5333171, 48.1517, 2.83333, 110),
('77051', 'Bray-sur-Seine', '31T', 517841, 5362518, 48.4156, 3.24111, 60),
('77052', 'Bréau', '31T', 491085, 5378706, 48.5614, 2.87917, 90),
('77053', 'Brie-Comte-Robert', '31T', 471421, 5393192, 48.6911, 2.61167, 85),
('77054', 'La Brosse-Montceaux', '31T', 501544, 5354431, 48.3431, 3.02084, 90),
('77055', 'Brou-sur-Chantereine', '31T', 473057, 5414490, 48.8828, 2.6325, 45),
('77056', 'Burcy', '31T', 464545, 5342900, 48.2383, 2.5225, 143),
('77057', 'Bussières', '31T', 517195, 5418805, 48.9219, 3.23472, 180),
('77058', 'Bussy-Saint-Georges', '31T', 477866, 5409960, 48.8422, 2.69834, 110),
('77059', 'Bussy-Saint-Martin', '31T', 477441, 5410827, 48.85, 2.6925, 100),
('77060', 'Buthiers', '31T', 457613, 5348166, 48.2853, 2.42862, 80),
('77061', 'Cannes-Écluse', '31T', 498930, 5356715, 48.3636, 2.98555, 50),
('77062', 'Carnetin', '31T', 478401, 5416505, 48.9011, 2.70528, 122),
('77063', 'La Celle-sur-Morin', '31T', 497614, 5405934, 48.8064, 2.9675, 61),
('77065', 'Cély', '31T', 465910, 5367563, 48.4603, 2.53888, 60),
('77066', 'Cerneux', '31T', 525491, 5393486, 48.6939, 3.34639, 160),
('77067', 'Cesson', '31T', 470878, 5378990, 48.5633, 2.60528, 80),
('77068', 'Cessoy-en-Montois', '31T', 510936, 5372442, 48.505, 3.14805, 130),
('77069', 'Chailly-en-Bière', '31T', 470986, 5368276, 48.4669, 2.60749, 80),
('77070', 'Chailly-en-Brie', '31T', 509161, 5404150, 48.7903, 3.12473, 140),
('77071', 'Chaintreaux', '31T', 486666, 5338422, 48.1989, 2.82056, 125),
('77072', 'Chalautre-la-Grande', '31T', 534014, 5376671, 48.5422, 3.46083, 110),
('77073', 'Chalautre-la-Petite', '31T', 523236, 5375042, 48.5281, 3.31472, 100),
('77075', 'Chalifert', '31T', 483343, 5415037, 48.8881, 2.77278, 103),
('77076', 'Chalmaison', '31T', 518557, 5369868, 48.4817, 3.25111, 75),
('77077', 'Chambry', '31T', 492259, 5427276, 48.9983, 2.89417, 95),
('77078', 'Chamigny', '31T', 511119, 5424626, 48.9744, 3.15194, 80),
('77079', 'Champagne-sur-Seine', '31T', 484887, 5360286, 48.3956, 2.79584, 50),
('77080', 'Champcenest', '31T', 520860, 5390842, 48.6703, 3.28333, 167),
('77081', 'Champdeuil', '31T', 480225, 5385311, 48.6206, 2.73167, 94),
('77082', 'Champeaux', '31T', 485762, 5381280, 48.5844, 2.80694, 97),
('77083', 'Champs-sur-Marne', '31T', 470779, 5411043, 48.8517, 2.60167, 70),
('77084', 'Changis-sur-Marne', '31T', 501159, 5422670, 48.9569, 3.01583, 53),
('77085', 'Chanteloup-en-Brie', '31T', 480867, 5411524, 48.8564, 2.73916, 116),
('77086', 'La Chapelle-Gauthier', '31T', 492538, 5377346, 48.5492, 2.89889, 100),
('77087', 'La Chapelle-Iger', '31T', 499243, 5388858, 48.6528, 2.98972, 100),
('77088', 'La Chapelle-la-Reine', '31T', 468059, 5351618, 48.3169, 2.56916, 120),
('77089', 'La Chapelle-Rablais', '31T', 496061, 5372803, 48.5083, 2.94667, 124),
('77090', 'La Chapelle-Saint-Sulpice', '31T', 513201, 5378005, 48.555, 3.17889, 130),
('77091', 'Les Chapelles-Bourbon', '31T', 488339, 5398720, 48.7414, 2.84139, 112),
('77093', 'La Chapelle-Moutils', '31T', 528756, 5402518, 48.775, 3.39139, 170),
('77094', 'Charmentray', '31T', 483607, 5421489, 48.9461, 2.77612, 60),
('77095', 'Charny', '31T', 482557, 5424179, 48.9703, 2.76166, 100),
('77096', 'Chartrettes', '31T', 477875, 5370808, 48.49, 2.70055, 80),
('77097', 'Chartronges', '31T', 519828, 5399299, 48.7464, 3.26972, 160),
('77098', 'Châteaubleau', '31T', 508071, 5381700, 48.5883, 3.10945, 145),
('77099', 'Château-Landon', '31T', 477830, 5332861, 48.1486, 2.70194, 90),
('77100', 'Le Châtelet-en-Brie', '31T', 484735, 5372483, 48.5053, 2.79334, 90),
('77101', 'Châtenay-sur-Seine', '31T', 507399, 5363081, 48.4208, 3.1, 55),
('77102', 'Châtenoy', '31T', 472297, 5342209, 48.2325, 2.62694, 115),
('77103', 'Châtillon-la-Borde', '31T', 485935, 5376710, 48.5433, 2.80944, 94),
('77104', 'Châtres', '31T', 486002, 5395298, 48.7106, 2.80972, 110),
('77106', 'Chauffry', '31T', 513378, 5406691, 48.8131, 3.18222, 140),
('77107', 'Chaumes-en-Brie', '31T', 488403, 5390321, 48.6658, 2.8425, 100),
('77108', 'Chelles', '31T', 469083, 5413893, 48.8772, 2.57834, 41),
('77109', 'Chenoise', '31T', 514413, 5384770, 48.6158, 3.19555, 150),
('77110', 'Chenou', '31T', 474616, 5334758, 48.1656, 2.65862, 105),
('77111', 'Chessy', '31T', 482730, 5414204, 48.8806, 2.76445, 121),
('77112', 'Chevrainvilliers', '31T', 471417, 5343511, 48.2442, 2.61501, 100),
('77113', 'Chevru', '31T', 514481, 5398171, 48.7364, 3.19695, 150),
('77114', 'Chevry-Cossigny', '31T', 474852, 5396850, 48.7242, 2.65806, 100),
('77115', 'Chevry-en-Sereine', '31T', 495814, 5344398, 48.2528, 2.94361, 148),
('77116', 'Choisy-en-Brie', '31T', 516128, 5400676, 48.7589, 3.21944, 140),
('77117', 'Citry', '31T', 517626, 5423933, 48.9681, 3.24083, 90),
('77118', 'Claye-Souilly', '31T', 477198, 5421203, 48.9433, 2.68861, 50),
('77119', 'Clos-Fontaine', '31T', 501270, 5383794, 48.6072, 3.01723, 123),
('77120', 'Cocherel', '31T', 507453, 5429777, 49.0208, 3.10194, 181),
('77121', 'Collégien', '31T', 475887, 5409536, 48.8383, 2.67139, 104),
('77122', 'Combs-la-Ville', '31T', 466989, 5390345, 48.6653, 2.55167, 160),
('77123', 'Compans', '31T', 475454, 5426923, 48.9947, 2.66444, 70),
('77124', 'Conches-sur-Gondoire', '31T', 479115, 5411468, 48.8558, 2.71528, 100),
('77125', 'Condé-Sainte-Libiaire', '31T', 487683, 5416013, 48.8969, 2.83195, 50),
('77126', 'Congis-sur-Thérouanne', '31T', 498456, 5428135, 49.0061, 2.97889, 50),
('77127', 'Coubert', '31T', 477750, 5390971, 48.6714, 2.69778, 90),
('77128', 'Couilly-Pont-aux-Dames', '31T', 489716, 5414743, 48.8856, 2.85972, 50),
('77129', 'Coulombs-en-Valois', '31T', 509333, 5435153, 49.0692, 3.12778, 150),
('77130', 'Coulommes', '31T', 494950, 5415323, 48.8908, 2.93111, 150),
('77131', 'Coulommiers', '31T', 506240, 5407079, 48.8167, 3.085, 70),
('77132', 'Coupvray', '31T', 484892, 5415526, 48.8925, 2.79389, 80),
('77133', 'Courcelles-en-Bassée', '31T', 504050, 5361811, 48.4094, 3.05473, 79),
('77134', 'Courchamp', '31T', 521160, 5387230, 48.6378, 3.28722, 165),
('77135', 'Courpalay', '31T', 496972, 5388272, 48.6475, 2.95889, 100),
('77136', 'Courquetaine', '31T', 481392, 5391575, 48.6769, 2.74722, 100),
('77137', 'Courtacon', '31T', 521524, 5393716, 48.6961, 3.2925, 137),
('77138', 'Courtomer', '31T', 492881, 5388986, 48.6539, 2.90334, 90),
('77139', 'Courtry', '31T', 470960, 5418422, 48.9181, 2.60362, 71),
('77140', 'Coutençon', '31T', 499774, 5368603, 48.4706, 2.99694, 115),
('77141', 'Coutevroult', '31T', 489162, 5412243, 48.8631, 2.85223, 135),
('77142', 'Crécy-la-Chapelle', '31T', 493541, 5411618, 48.8575, 2.91194, 50),
('77143', 'Crégy-lès-Meaux', '31T', 490996, 5425178, 48.9794, 2.87695, 90),
('77145', 'Crisenoy', '31T', 481240, 5382714, 48.5972, 2.74556, 91),
('77146', 'Croissy-Beaubourg', '31T', 475047, 5408552, 48.8294, 2.66, 100),
('77147', 'La Croix-en-Brie', '31T', 505551, 5382253, 48.5933, 3.07528, 135),
('77148', 'Crouy-sur-Ourcq', '31T', 505618, 5437495, 49.0903, 3.07695, 70),
('77149', 'Cucharmoy', '31T', 514340, 5381157, 48.5833, 3.19444, 140),
('77150', 'Cuisy', '31T', 483468, 5429642, 49.0194, 2.77389, 112),
('77151', 'Dagny', '31T', 512709, 5396098, 48.7178, 3.17278, 132),
('77152', 'Dammarie-les-Lys', '31T', 473420, 5374964, 48.5272, 2.63999, 50),
('77153', 'Dammartin-en-Goële', '31T', 476579, 5433434, 49.0533, 2.67945, 182),
('77154', 'Dammartin-sur-Tigeaux', '31T', 494372, 5407171, 48.8175, 2.92333, 90),
('77155', 'Dampmart', '31T', 480634, 5414891, 48.8867, 2.73583, 60),
('77156', 'Darvault', '31T', 480418, 5346406, 48.2706, 2.73611, 84),
('77157', 'Dhuisy', '31T', 511795, 5431853, 49.0394, 3.16139, 160),
('77158', 'Diant', '31T', 499485, 5347515, 48.2808, 2.99306, 110),
('77159', 'Donnemarie-Dontilly', '31T', 509403, 5369197, 48.4758, 3.12723, 90),
('77161', 'Dormelles', '31T', 492689, 5351410, 48.3158, 2.90139, 100),
('77162', 'Doue', '31T', 512081, 5412523, 48.8656, 3.16473, 144),
('77163', 'Douy-la-Ramée', '31T', 491417, 5434812, 49.0661, 2.8825, 115),
('77164', 'Échouboulains', '31T', 496016, 5367956, 48.4647, 2.94611, 118),
('77165', 'Les Écrennes', '31T', 489536, 5372379, 48.5044, 2.85834, 114),
('77166', 'Écuelles', '31T', 486788, 5355496, 48.3525, 2.82167, 60),
('77167', 'Égligny', '31T', 508939, 5363762, 48.4269, 3.12083, 60),
('77168', 'Égreville', '31T', 490542, 5335821, 48.1756, 2.87278, 125),
('77169', 'Émerainville', '31T', 472122, 5406682, 48.8125, 2.62028, 110),
('77170', 'Épisy', '31T', 484251, 5353372, 48.3333, 2.7875, 55),
('77171', 'Esbly', '31T', 486260, 5417097, 48.9067, 2.8125, 45),
('77172', 'Esmans', '31T', 498292, 5355110, 48.3492, 2.97695, 80),
('77173', 'Étrépilly', '31T', 495046, 5431318, 49.0347, 2.93222, 87),
('77174', 'Everly', '31T', 518542, 5368170, 48.4664, 3.25084, 70),
('77175', 'Évry-Grégy-sur-Yerre', '31T', 473118, 5388922, 48.6528, 2.635, 91),
('77176', 'Faremoutiers', '31T', 499837, 5405192, 48.7997, 2.99778, 120),
('77177', 'Favières', '31T', 483485, 5401141, 48.7631, 2.77527, 106),
('77178', 'Faÿ-lès-Nemours', '31T', 476670, 5342190, 48.2325, 2.68583, 80),
('77179', 'Féricy', '31T', 485317, 5367386, 48.4594, 2.8014, 90),
('77180', 'Férolles-Attilly', '31T', 472670, 5397756, 48.7322, 2.62833, 90),
('77181', 'Ferrières-en-Brie', '31T', 478591, 5407827, 48.8231, 2.70833, 115),
('77182', 'La Ferté-Gaucher', '31T', 522426, 5403323, 48.7825, 3.30528, 116),
('77183', 'La Ferté-sous-Jouarre', '31T', 509335, 5421936, 48.9503, 3.1275, 67),
('77184', 'Flagy', '31T', 494213, 5350945, 48.3117, 2.92195, 84),
('77185', 'Fleury-en-Bière', '31T', 466664, 5366539, 48.4511, 2.54916, 71),
('77186', 'Fontainebleau', '31T', 477757, 5361699, 48.4081, 2.69944, 80),
('77187', 'Fontaine-Fourches', '31T', 529271, 5362194, 48.4122, 3.39556, 74),
('77188', 'Fontaine-le-Port', '31T', 482553, 5370359, 48.4861, 2.76389, 71),
('77190', 'Fontains', '31T', 500205, 5374747, 48.5258, 3.00278, 120),
('77191', 'Fontenailles', '31T', 496720, 5378144, 48.5564, 2.95555, 104),
('77192', 'Fontenay-Trésigny', '31T', 490007, 5394950, 48.7075, 2.86417, 100),
('77193', 'Forfry', '31T', 488960, 5433828, 49.0572, 2.84889, 90),
('77194', 'Forges', '31T', 497123, 5362798, 48.4183, 2.96112, 120),
('77195', 'Fouju', '31T', 483632, 5381409, 48.5856, 2.77805, 95),
('77196', 'Fresnes-sur-Marne', '31T', 481041, 5420540, 48.9375, 2.74112, 45),
('77197', 'Frétoy', '31T', 514633, 5394558, 48.7039, 3.19889, 130),
('77198', 'Fromont', '31T', 463092, 5344732, 48.2547, 2.50277, 140),
('77199', 'Fublaines', '31T', 495342, 5420510, 48.9375, 2.9364, 110),
('77200', 'Garentreville', '31T', 466523, 5342580, 48.2356, 2.54916, 115),
('77201', 'Gastins', '31T', 501597, 5386264, 48.6294, 3.02167, 110),
('77202', 'La Genevraye', '31T', 481220, 5351868, 48.3197, 2.74667, 55),
('77203', 'Germigny-l''Évêque', '31T', 495997, 5426562, 48.9919, 2.94528, 50),
('77204', 'Germigny-sous-Coulombs', '31T', 511668, 5434539, 49.0636, 3.15973, 140),
('77205', 'Gesvres-le-Chapitre', '31T', 489201, 5432345, 49.0439, 2.85223, 100),
('77206', 'Giremoutiers', '31T', 502242, 5410010, 48.8431, 3.03056, 127),
('77207', 'Gironville', '31T', 464963, 5337063, 48.1858, 2.52861, 105),
('77208', 'Gouaix', '31T', 521840, 5370189, 48.4844, 3.29556, 80),
('77209', 'Gouvernes', '31T', 477385, 5412001, 48.8606, 2.69167, 53),
('77210', 'La Grande-Paroisse', '31T', 492432, 5359314, 48.3869, 2.89778, 112),
('77211', 'Grandpuits-Bailly-Carrois', '31T', 497501, 5381324, 48.585, 2.96611, 115),
('77212', 'Gravon', '31T', 508903, 5360582, 48.3983, 3.12028, 58),
('77214', 'Gressy', '31T', 476131, 5423678, 48.9656, 2.67389, 62),
('77215', 'Gretz-Armainvilliers', '31T', 480313, 5398681, 48.7408, 2.73223, 105),
('77216', 'Grez-sur-Loing', '31T', 477100, 5351574, 48.3169, 2.69111, 60),
('77217', 'Grisy-Suisnes', '31T', 475609, 5392524, 48.6853, 2.66861, 95),
('77218', 'Grisy-sur-Seine', '31T', 523667, 5365132, 48.4389, 3.31999, 63),
('77219', 'Guérard', '31T', 497003, 5407849, 48.8236, 2.95917, 70),
('77220', 'Guercheville', '31T', 467198, 5345201, 48.2592, 2.55805, 117),
('77221', 'Guermantes', '31T', 478299, 5411348, 48.8547, 2.70416, 100),
('77222', 'Guignes', '31T', 485081, 5387149, 48.6372, 2.79749, 90),
('77223', 'Gurcy-le-Châtel', '31T', 506796, 5368576, 48.4703, 3.09194, 129),
('77224', 'Hautefeuille', '31T', 497673, 5401456, 48.7661, 2.96833, 117),
('77225', 'La Haute-Maison', '31T', 500183, 5414332, 48.8819, 3.0025, 159),
('77226', 'Héricy', '31T', 482437, 5365975, 48.4467, 2.7625, 50),
('77227', 'Hermé', '31T', 525413, 5369895, 48.4817, 3.34389, 61),
('77228', 'Hondevilliers', '31T', 522659, 5416324, 48.8994, 3.30917, 170),
('77229', 'La Houssaye-en-Brie', '31T', 490751, 5400105, 48.7539, 2.87417, 115),
('77230', 'Ichy', '31T', 466501, 5338813, 48.2017, 2.54916, 105),
('77231', 'Isles-les-Meldeuses', '31T', 500345, 5427270, 48.9983, 3.00472, 50),
('77232', 'Isles-lès-Villenoy', '31T', 487422, 5417650, 48.9117, 2.82834, 47),
('77233', 'Iverny', '31T', 484640, 5427415, 48.9994, 2.79, 120),
('77234', 'Jablines', '31T', 482559, 5418250, 48.9169, 2.76194, 50),
('77235', 'Jaignes', '31T', 503922, 5426438, 48.9908, 3.05361, 100),
('77236', 'Jaulnes', '31T', 520245, 5362772, 48.4178, 3.27361, 55),
('77237', 'Jossigny', '31T', 481879, 5409483, 48.8381, 2.75305, 126),
('77238', 'Jouarre', '31T', 509441, 5419405, 48.9275, 3.12889, 140),
('77239', 'Jouy-le-Châtel', '31T', 509551, 5390472, 48.6672, 3.12972, 121),
('77240', 'Jouy-sur-Morin', '31T', 520013, 5404734, 48.7953, 3.2725, 110),
('77241', 'Juilly', '31T', 478571, 5428887, 49.0125, 2.70695, 90),
('77242', 'Jutigny', '31T', 517237, 5371748, 48.4986, 3.23333, 75),
('77243', 'Lagny-sur-Marne', '31T', 478714, 5413354, 48.8728, 2.70972, 50),
('77244', 'Larchant', '31T', 470038, 5347964, 48.2842, 2.59612, 70),
('77245', 'Laval-en-Brie', '31T', 499836, 5363415, 48.4239, 2.99778, 100),
('77246', 'Léchelle', '31T', 528848, 5380533, 48.5772, 3.39111, 140),
('77247', 'Lescherolles', '31T', 525435, 5401205, 48.7633, 3.34611, 140),
('77248', 'Lesches', '31T', 483818, 5417197, 48.9075, 2.77917, 45),
('77249', 'Lésigny', '31T', 471798, 5399088, 48.7442, 2.61638, 98),
('77250', 'Leudon-en-Brie', '31T', 519955, 5397940, 48.7342, 3.27138, 160),
('77251', 'Lieusaint', '31T', 467028, 5386577, 48.6314, 2.5525, 87),
('77252', 'Limoges-Fourches', '31T', 475356, 5386040, 48.6269, 2.66556, 92),
('77253', 'Lissy', '31T', 477607, 5386031, 48.6269, 2.69611, 95),
('77254', 'Liverdy-en-Brie', '31T', 483526, 5394162, 48.7003, 2.77611, 105),
('77255', 'Livry-sur-Seine', '31T', 476797, 5373282, 48.5122, 2.68583, 75),
('77256', 'Lizines', '31T', 513249, 5374825, 48.5264, 3.17944, 130),
('77257', 'Lizy-sur-Ourcq', '31T', 501625, 5430142, 49.0242, 3.02223, 50),
('77258', 'Lognes', '31T', 472848, 5409211, 48.8353, 2.63, 95),
('77259', 'Longperrier', '31T', 475117, 5433317, 49.0522, 2.65944, 122),
('77260', 'Longueville', '31T', 518196, 5373449, 48.5139, 3.24639, 90),
('77261', 'Lorrez-le-Bocage-Préaux', '31T', 492698, 5342579, 48.2364, 2.90166, 100),
('77262', 'Louan-Villegruis-Fontaine', '31T', 535371, 5385943, 48.6256, 3.48, 169),
('77263', 'Luisetaines', '31T', 513388, 5368248, 48.4672, 3.18112, 80),
('77264', 'Lumigny-Nesles-Ormeaux', '31T', 496528, 5398277, 48.7375, 2.95278, 115),
('77265', 'Luzancy', '31T', 513722, 5424385, 48.9722, 3.1875, 75),
('77266', 'Machault', '31T', 487451, 5366918, 48.4553, 2.83027, 110),
('77267', 'La Madeleine-sur-Loing', '31T', 478205, 5338942, 48.2033, 2.70667, 110),
('77268', 'Magny-le-Hongre', '31T', 486309, 5412249, 48.8631, 2.81333, 117),
('77269', 'Maincy', '31T', 477942, 5377507, 48.5503, 2.70111, 64),
('77270', 'Maisoncelles-en-Brie', '31T', 499430, 5412264, 48.8633, 2.99223, 141),
('77271', 'Maisoncelles-en-Gâtinais', '31T', 472169, 5337177, 48.1872, 2.62555, 111),
('77272', 'Maison-Rouge', '31T', 511109, 5378432, 48.5589, 3.15056, 150),
('77273', 'Marchémoret', '31T', 483316, 5433008, 49.0497, 2.77167, 105),
('77274', 'Marcilly', '31T', 491371, 5431477, 49.0361, 2.88194, 100),
('77275', 'Les Marêts', '31T', 523069, 5390912, 48.6708, 3.31334, 145),
('77276', 'Mareuil-lès-Meaux', '31T', 489745, 5419221, 48.9258, 2.86, 50),
('77277', 'Marles-en-Brie', '31T', 491134, 5397264, 48.7283, 2.87944, 111),
('77278', 'Marolles-en-Brie', '31T', 512122, 5402797, 48.7781, 3.165, 122),
('77279', 'Marolles-sur-Seine', '31T', 502365, 5359124, 48.3853, 3.03194, 55),
('77280', 'Mary-sur-Marne', '31T', 502153, 5429062, 49.0144, 3.02944, 50),
('77281', 'Mauperthuis', '31T', 502898, 5401735, 48.7686, 3.03944, 120),
('77282', 'Mauregard', '31T', 469422, 5431153, 49.0325, 2.58167, 120),
('77283', 'May-en-Multien', '31T', 501724, 5435515, 49.0725, 3.0236, 146),
('77284', 'Meaux', '31T', 491785, 5422892, 48.9589, 2.88778, 50),
('77285', 'Le Mée-sur-Seine', '31T', 472603, 5375647, 48.5333, 2.62888, 50),
('77286', 'Meigneux', '31T', 507796, 5373178, 48.5117, 3.10556, 138),
('77287', 'Meilleray', '31T', 531297, 5404230, 48.7903, 3.42611, 140),
('77288', 'Melun', '31T', 474699, 5376441, 48.5406, 2.65723, 50),
('77289', 'Melz-sur-Seine', '31T', 530884, 5371744, 48.4981, 3.41806, 60),
('77290', 'Méry-sur-Marne', '31T', 514598, 5423739, 48.9664, 3.19945, 80),
('77291', 'Le Mesnil-Amelot', '31T', 470367, 5429388, 49.0167, 2.59472, 101),
('77292', 'Messy', '31T', 478226, 5423824, 48.9669, 2.7025, 76),
('77293', 'Misy-sur-Yonne', '31T', 506811, 5356318, 48.36, 3.09195, 58),
('77294', 'Mitry-Mory', '31T', 472034, 5425673, 48.9833, 2.61778, 73),
('77295', 'Moisenay', '31T', 480530, 5378887, 48.5628, 2.73611, 80),
('77296', 'Moissy-Cramayel', '31T', 470116, 5386096, 48.6272, 2.59445, 90),
('77297', 'Mondreville', '31T', 471029, 5332150, 48.1419, 2.61056, 96),
('77298', 'Mons-en-Montois', '31T', 510878, 5370651, 48.4889, 3.14722, 124),
('77299', 'Montarlot', '31T', 488887, 5355183, 48.3497, 2.85001, 80),
('77300', 'Montceaux-lès-Meaux', '31T', 499064, 5421095, 48.9428, 2.98722, 160),
('77301', 'Montceaux-lès-Provins', '31T', 532338, 5393552, 48.6942, 3.43944, 190),
('77302', 'Montcourt-Fromonville', '31T', 478083, 5350212, 48.3047, 2.70444, 59),
('77303', 'Montdauphin', '31T', 531422, 5411086, 48.8519, 3.42833, 170),
('77304', 'Montenils', '31T', 535035, 5410212, 48.8439, 3.47751, 184),
('77305', 'Montereau-Fault-Yonne', '31T', 496360, 5359125, 48.3853, 2.95084, 51),
('77306', 'Montereau-sur-le-Jard', '31T', 475646, 5382118, 48.5917, 2.66972, 85),
('77307', 'Montévrain', '31T', 481302, 5413592, 48.875, 2.745, 100),
('77308', 'Montgé-en-Goële', '31T', 481603, 5430605, 49.0281, 2.74834, 160),
('77309', 'Monthyon', '31T', 487405, 5428242, 49.0069, 2.82778, 160),
('77310', 'Montigny-le-Guesdier', '31T', 518922, 5358939, 48.3833, 3.25556, 90),
('77311', 'Montigny-Lencoup', '31T', 504745, 5366629, 48.4528, 3.06417, 100),
('77312', 'Montigny-sur-Loing', '31T', 481101, 5353412, 48.3336, 2.745, 60),
('77313', 'Montmachoux', '31T', 499444, 5351652, 48.3181, 2.9925, 130),
('77314', 'Montolivet', '31T', 532312, 5408652, 48.83, 3.44027, 180),
('77315', 'Montry', '31T', 487334, 5415057, 48.8883, 2.82722, 50),
('77316', 'Moret-sur-Loing', '31T', 486258, 5357596, 48.3714, 2.81444, 67),
('77317', 'Mormant', '31T', 492014, 5383892, 48.6081, 2.89166, 110),
('77318', 'Mortcerf', '31T', 493940, 5404146, 48.7903, 2.91749, 120),
('77319', 'Mortery', '31T', 519251, 5382932, 48.5992, 3.26111, 147),
('77320', 'Mouroux', '31T', 502793, 5407694, 48.8222, 3.03805, 80),
('77321', 'Mousseaux-lès-Bray', '31T', 516959, 5361989, 48.4108, 3.22917, 68),
('77322', 'Moussy-le-Neuf', '31T', 471105, 5434571, 49.0633, 2.60445, 110),
('77323', 'Moussy-le-Vieux', '31T', 472657, 5432525, 49.045, 2.62583, 94),
('77325', 'Mouy-sur-Seine', '31T', 517901, 5362981, 48.4197, 3.24194, 56),
('77326', 'Nandy', '31T', 467917, 5381045, 48.5817, 2.56499, 80),
('77327', 'Nangis', '31T', 500840, 5378483, 48.5594, 3.01138, 130),
('77328', 'Nanteau-sur-Essonne', '31T', 456793, 5351569, 48.3158, 2.41722, 73),
('77329', 'Nanteau-sur-Lunain', '31T', 485938, 5344784, 48.2561, 2.81055, 80),
('77330', 'Nanteuil-lès-Meaux', '31T', 493163, 5418845, 48.9225, 2.90667, 90),
('77331', 'Nanteuil-sur-Marne', '31T', 516077, 5425410, 48.9814, 3.21972, 60),
('77332', 'Nantouillet', '31T', 478363, 5427745, 49.0022, 2.70417, 80),
('77333', 'Nemours', '31T', 477408, 5346324, 48.2697, 2.69555, 64),
('77335', 'Chauconin-Neufmontiers', '31T', 488190, 5424782, 48.9758, 2.83861, 70),
('77336', 'Neufmoutiers-en-Brie', '31T', 487590, 5401624, 48.7675, 2.83112, 118),
('77337', 'Noisiel', '31T', 472716, 5411404, 48.855, 2.62805, 50),
('77338', 'Noisy-Rudignon', '31T', 494874, 5353599, 48.3356, 2.93083, 100),
('77339', 'Noisy-sur-École', '31T', 463544, 5357234, 48.3672, 2.50778, 70),
('77340', 'Nonville', '31T', 484668, 5347659, 48.2819, 2.79334, 70),
('77341', 'Noyen-sur-Seine', '31T', 525962, 5366563, 48.4517, 3.35111, 58),
('77342', 'Obsonville', '31T', 467398, 5340475, 48.2167, 2.56111, 111),
('77343', 'Ocquerre', '31T', 504345, 5431626, 49.0375, 3.05945, 70),
('77344', 'Oissery', '31T', 486772, 5435222, 49.0697, 2.81889, 100),
('77345', 'Orly-sur-Morin', '31T', 516875, 5416859, 48.9044, 3.23027, 86),
('77347', 'Les Ormes-sur-Voulzie', '31T', 516900, 5367763, 48.4628, 3.22861, 70),
('77348', 'Ormesson', '31T', 474365, 5343404, 48.2433, 2.65472, 113),
('77349', 'Othis', '31T', 476346, 5435906, 49.0756, 2.67611, 113),
('77350', 'Ozoir-la-Ferrière', '31T', 475952, 5401013, 48.7617, 2.67278, 104),
('77352', 'Ozouer-le-Voulgis', '31T', 483411, 5389716, 48.6603, 2.77472, 89),
('77353', 'Paley', '31T', 489708, 5343047, 48.2406, 2.86138, 100),
('77354', 'Pamfou', '31T', 490533, 5367684, 48.4622, 2.87194, 120),
('77355', 'Paroy', '31T', 514842, 5369610, 48.4794, 3.20083, 70),
('77356', 'Passy-sur-Seine', '31T', 525852, 5363598, 48.425, 3.34944, 65),
('77357', 'Pécy', '31T', 505830, 5389293, 48.6567, 3.07916, 130),
('77358', 'Penchard', '31T', 489798, 5425921, 48.9861, 2.86056, 110),
('77359', 'Perthes', '31T', 467010, 5369502, 48.4778, 2.55361, 80),
('77360', 'Pézarches', '31T', 499489, 5398276, 48.7375, 2.99305, 110),
('77361', 'Pierre-Levée', '31T', 502809, 5416309, 48.8997, 3.03833, 160),
('77363', 'Le Pin', '31T', 472871, 5418011, 48.9144, 2.62973, 70),
('77364', 'Le Plessis-aux-Bois', '31T', 483137, 5427759, 49.0025, 2.76944, 109),
('77365', 'Le Plessis-Feu-Aussoux', '31T', 502534, 5395898, 48.7161, 3.03445, 115),
('77366', 'Le Plessis-l''Évêque', '31T', 484297, 5428281, 49.0072, 2.78528, 115),
('77367', 'Le Plessis-Placy', '31T', 499229, 5433817, 49.0572, 2.98945, 127),
('77368', 'Poigny', '31T', 520914, 5376237, 48.5389, 3.28333, 90),
('77369', 'Poincy', '31T', 495345, 5424092, 48.9697, 2.9364, 50),
('77370', 'Poligny', '31T', 481123, 5341247, 48.2242, 2.74584, 100),
('77371', 'Pommeuse', '31T', 501264, 5407138, 48.8172, 3.01722, 70),
('77372', 'Pomponne', '31T', 476478, 5414258, 48.8808, 2.67917, 40),
('77373', 'Pontault-Combault', '31T', 471137, 5405545, 48.8022, 2.60694, 107),
('77374', 'Pontcarré', '31T', 478357, 5405265, 48.8, 2.70528, 115),
('77376', 'Précy-sur-Marne', '31T', 483541, 5419791, 48.9308, 2.77528, 45),
('77377', 'Presles-en-Brie', '31T', 481038, 5395899, 48.7158, 2.74222, 90),
('77378', 'Pringy', '31T', 467490, 5374408, 48.5219, 2.55972, 60),
('77379', 'Provins', '31T', 522196, 5378805, 48.5619, 3.30083, 92),
('77380', 'Puisieux', '31T', 493913, 5434778, 49.0658, 2.91667, 107),
('77381', 'Quiers', '31T', 497891, 5383671, 48.6061, 2.97139, 118),
('77382', 'Quincy-Voisins', '31T', 491449, 5416161, 48.8983, 2.88333, 130),
('77383', 'Rampillon', '31T', 504858, 5377404, 48.5497, 3.06583, 135),
('77384', 'Réau', '31T', 472317, 5384202, 48.6103, 2.62444, 90),
('77385', 'Rebais', '31T', 517078, 5410529, 48.8475, 3.23278, 145),
('77386', 'Recloses', '31T', 473449, 5354863, 48.3464, 2.64166, 130),
('77387', 'Remauville', '31T', 487040, 5339779, 48.2111, 2.82555, 128),
('77388', 'Reuil-en-Brie', '31T', 510736, 5423112, 48.9608, 3.14667, 60),
('77389', 'La Rochette', '31T', 474874, 5374494, 48.5231, 2.65972, 80),
('77390', 'Roissy-en-Brie', '31T', 474436, 5404232, 48.7906, 2.65195, 100),
('77391', 'Rouilly', '31T', 520503, 5382164, 48.5922, 3.27805, 142),
('77392', 'Rouvres', '31T', 479403, 5434349, 49.0617, 2.71805, 100),
('77393', 'Rozay-en-Brie', '31T', 496995, 5392317, 48.6839, 2.95917, 100),
('77394', 'Rubelles', '31T', 476410, 5378718, 48.5611, 2.68028, 73),
('77395', 'Rumont', '31T', 462750, 5345938, 48.2656, 2.49806, 138),
('77396', 'Rupéreux', '31T', 524271, 5387089, 48.6364, 3.32944, 165),
('77397', 'Saâcy-sur-Marne', '31T', 515351, 5423216, 48.9617, 3.20972, 61),
('77398', 'Sablonnières', '31T', 521733, 5413665, 48.8756, 3.29639, 85),
('77399', 'Saint-Ange-le-Viel', '31T', 492764, 5345512, 48.2628, 2.9025, 130),
('77400', 'Saint-Augustin', '31T', 502265, 5403587, 48.7853, 3.03083, 130),
('77401', 'Sainte-Aulde', '31T', 514549, 5426950, 48.9953, 3.19889, 70),
('77402', 'Saint-Barthélemy', '31T', 526529, 5407201, 48.8172, 3.36138, 185),
('77403', 'Saint-Brice', '31T', 524202, 5379462, 48.5678, 3.32806, 120),
('77404', 'Sainte-Colombe', '31T', 519583, 5375954, 48.5364, 3.26528, 77),
('77405', 'Saint-Cyr-sur-Morin', '31T', 513373, 5417096, 48.9067, 3.18249, 67),
('77406', 'Saint-Denis-lès-Rebais', '31T', 515471, 5409289, 48.8364, 3.21083, 130),
('77407', 'Saint-Fargeau-Ponthierry', '31T', 465591, 5379237, 48.5653, 2.53361, 80),
('77408', 'Saint-Fiacre', '31T', 496683, 5418873, 48.9228, 2.95472, 140),
('77409', 'Saint-Germain-Laval', '31T', 499959, 5360884, 48.4011, 2.99945, 70),
('77410', 'Saint-Germain-Laxis', '31T', 478654, 5381272, 48.5842, 2.71056, 83),
('77411', 'Saint-Germain-sous-Doue', '31T', 510596, 5411100, 48.8528, 3.14444, 120),
('77412', 'Saint-Germain-sur-École', '31T', 463724, 5369275, 48.4756, 2.50917, 50),
('77413', 'Saint-Germain-sur-Morin', '31T', 489064, 5414374, 48.8822, 2.85084, 50),
('77414', 'Saint-Hilliers', '31T', 519079, 5385401, 48.6214, 3.25889, 155),
('77415', 'Saint-Jean-les-Deux-Jumeaux', '31T', 501464, 5422052, 48.9514, 3.02, 60),
('77416', 'Saint-Just-en-Brie', '31T', 507721, 5382966, 48.5997, 3.10472, 140),
('77417', 'Saint-Léger', '31T', 520255, 5411158, 48.8531, 3.27611, 160),
('77418', 'Saint-Loup-de-Naud', '31T', 515564, 5375911, 48.5361, 3.21084, 90),
('77419', 'Saint-Mammès', '31T', 486036, 5359295, 48.3867, 2.81139, 59),
('77420', 'Saint-Mard', '31T', 477810, 5431607, 49.0369, 2.69639, 110),
('77421', 'Saint-Mars-Vieux-Maisons', '31T', 523608, 5398881, 48.7425, 3.32112, 143),
('77423', 'Saint-Martin-des-Champs', '31T', 524734, 5402900, 48.7786, 3.33667, 140),
('77424', 'Saint-Martin-du-Boschet', '31T', 531474, 5398302, 48.7369, 3.42806, 174),
('77425', 'Saint-Martin-en-Bière', '31T', 468053, 5365080, 48.4381, 2.56806, 75);
INSERT INTO `ods_communes` (`oc_code_insee`, `oc_nom`, `oc_secteur`, `oc_x_utm`, `oc_y_utm`, `oc_latitude`, `oc_longitude`, `oc_altitude`) VALUES
('77426', 'Saint-Méry', '31T', 487277, 5380535, 48.5778, 2.82751, 100),
('77427', 'Saint-Mesmes', '31T', 477623, 5425648, 48.9833, 2.69416, 85),
('77428', 'Saint-Ouen-en-Brie', '31T', 493974, 5378270, 48.5575, 2.91833, 100),
('77429', 'Saint-Ouen-sur-Morin', '31T', 514086, 5416975, 48.9056, 3.19222, 77),
('77430', 'Saint-Pathus', '31T', 485412, 5435226, 49.0697, 2.80027, 99),
('77431', 'Saint-Pierre-lès-Nemours', '31T', 476273, 5345958, 48.2664, 2.68027, 75),
('77432', 'Saint-Rémy-la-Vanne', '31T', 517137, 5404447, 48.7928, 3.23333, 146),
('77433', 'Saints', '31T', 503736, 5400623, 48.7586, 3.05083, 110),
('77434', 'Saint-Sauveur-lès-Bray', '31T', 515450, 5364980, 48.4378, 3.20889, 55),
('77435', 'Saint-Sauveur-sur-École', '31T', 466715, 5371634, 48.4969, 2.54945, 60),
('77436', 'Saint-Siméon', '31T', 514932, 5405058, 48.7983, 3.20333, 100),
('77437', 'Saint-Soupplets', '31T', 485809, 5431797, 49.0389, 2.80583, 110),
('77438', 'Saint-Thibault-des-Vignes', '31T', 477165, 5412959, 48.8692, 2.68862, 80),
('77439', 'Salins', '31T', 501624, 5363045, 48.4206, 3.02195, 80),
('77440', 'Sammeron', '31T', 506366, 5421593, 48.9472, 3.08694, 61),
('77441', 'Samois-sur-Seine', '31T', 481515, 5366595, 48.4522, 2.75, 80),
('77442', 'Samoreau', '31T', 481607, 5363445, 48.4239, 2.75139, 50),
('77443', 'Sancy', '31T', 496945, 5414734, 48.8856, 2.95833, 155),
('77444', 'Sancy-lès-Provins', '31T', 529026, 5393781, 48.6964, 3.39445, 160),
('77445', 'Savigny-le-Temple', '31T', 469307, 5380419, 48.5761, 2.58389, 72),
('77446', 'Savins', '31T', 514833, 5373130, 48.5111, 3.20084, 140),
('77447', 'Seine-Port', '31T', 466652, 5378396, 48.5578, 2.54806, 50),
('77448', 'Sept-Sorts', '31T', 507608, 5420513, 48.9375, 3.10389, 90),
('77449', 'Serris', '31T', 484430, 5410309, 48.8456, 2.78778, 129),
('77450', 'Servon', '31T', 469679, 5396134, 48.7175, 2.58778, 80),
('77451', 'Signy-Signets', '31T', 505066, 5419368, 48.9272, 3.06916, 100),
('77452', 'Sigy', '31T', 513487, 5369422, 48.4778, 3.18249, 70),
('77453', 'Sivry-Courtry', '31T', 481973, 5375085, 48.5286, 2.75583, 86),
('77454', 'Sognolles-en-Montois', '31T', 512453, 5373032, 48.5103, 3.16861, 146),
('77455', 'Soignolles-en-Brie', '31T', 477803, 5388933, 48.6531, 2.69861, 70),
('77456', 'Soisy-Bouy', '31T', 521828, 5373153, 48.5111, 3.29555, 140),
('77457', 'Solers', '31T', 479237, 5389545, 48.6586, 2.71805, 90),
('77458', 'Souppes-sur-Loing', '31T', 480138, 5336990, 48.1858, 2.73278, 73),
('77459', 'Sourdun', '31T', 525713, 5376041, 48.5369, 3.34833, 150),
('77460', 'Tancrou', '31T', 503718, 5427642, 49.0017, 3.05083, 89),
('77461', 'Thénisy', '31T', 513156, 5370656, 48.4889, 3.17805, 80),
('77462', 'Thieux', '31T', 475726, 5428590, 49.0097, 2.66806, 80),
('77463', 'Thomery', '31T', 484213, 5361832, 48.4094, 2.78667, 57),
('77464', 'Thorigny-sur-Marne', '31T', 479229, 5414772, 48.8856, 2.71667, 60),
('77465', 'Thoury-Férottes', '31T', 495797, 5348597, 48.2906, 2.94334, 90),
('77466', 'Tigeaux', '31T', 492742, 5408285, 48.8275, 2.90111, 60),
('77467', 'La Tombe', '31T', 506725, 5359406, 48.3878, 3.09084, 67),
('77468', 'Torcy', '31T', 474324, 5410964, 48.8511, 2.65, 100),
('77469', 'Touquin', '31T', 500919, 5398090, 48.7358, 3.0125, 112),
('77470', 'Tournan-en-Brie', '31T', 482906, 5398518, 48.7394, 2.7675, 109),
('77471', 'Tousson', '31T', 459845, 5354974, 48.3467, 2.45806, 120),
('77472', 'La Trétoire', '31T', 518474, 5413437, 48.8736, 3.25194, 180),
('77473', 'Treuzy-Levelay', '31T', 485367, 5347101, 48.2769, 2.80278, 80),
('77474', 'Trilbardou', '31T', 485761, 5421020, 48.9419, 2.80555, 50),
('77475', 'Trilport', '31T', 496218, 5422733, 48.9575, 2.94834, 50),
('77476', 'Trocy-en-Multien', '31T', 497280, 5432150, 49.0422, 2.96278, 120),
('77477', 'Ury', '31T', 470503, 5354322, 48.3414, 2.60194, 112),
('77478', 'Ussy-sur-Marne', '31T', 505247, 5422456, 48.955, 3.07167, 70),
('77479', 'Vaires-sur-Marne', '31T', 473723, 5413128, 48.8706, 2.64167, 48),
('77480', 'Valence-en-Brie', '31T', 491927, 5365675, 48.4442, 2.89084, 110),
('77481', 'Vanvillé', '31T', 507974, 5378057, 48.5556, 3.10806, 140),
('77482', 'Varennes-sur-Seine', '31T', 494569, 5357984, 48.375, 2.92666, 50),
('77483', 'Varreddes', '31T', 494860, 5427643, 49.0017, 2.92972, 54),
('77484', 'Vaucourtois', '31T', 496559, 5415939, 48.8964, 2.95305, 161),
('77485', 'Le Vaudoué', '31T', 464462, 5355993, 48.3561, 2.52028, 68),
('77486', 'Vaudoy-en-Brie', '31T', 505990, 5392813, 48.6883, 3.08139, 109),
('77487', 'Vaux-le-Pénil', '31T', 476742, 5374857, 48.5264, 2.68499, 69),
('77489', 'Vaux-sur-Lunain', '31T', 495399, 5341403, 48.2258, 2.93805, 120),
('77490', 'Vendrest', '31T', 506942, 5432524, 49.0456, 3.095, 120),
('77491', 'Veneux-les-Sablons', '31T', 484881, 5358094, 48.3758, 2.79583, 80),
('77492', 'Verdelot', '31T', 526988, 5413687, 48.8756, 3.36806, 100),
('77493', 'Verneuil-l''Étang', '31T', 487682, 5387945, 48.6444, 2.83278, 95),
('77494', 'Vernou-la-Celle-sur-Seine', '31T', 488813, 5359567, 48.3892, 2.84889, 70),
('77495', 'Vert-Saint-Denis', '31T', 471575, 5379172, 48.565, 2.61472, 72),
('77496', 'Vieux-Champagne', '31T', 510285, 5380901, 48.5811, 3.13945, 130),
('77498', 'Vignely', '31T', 485982, 5419846, 48.9314, 2.80861, 48),
('77500', 'Villebéon', '31T', 495645, 5339303, 48.2069, 2.94138, 145),
('77501', 'Villecerf', '31T', 488697, 5352806, 48.3283, 2.84751, 68),
('77504', 'Villemaréchal', '31T', 490208, 5345948, 48.2667, 2.86805, 120),
('77505', 'Villemareuil', '31T', 498046, 5418687, 48.9211, 2.97333, 154),
('77506', 'Villemer', '31T', 487042, 5349690, 48.3003, 2.82527, 76),
('77507', 'Villenauxe-la-Petite', '31T', 523045, 5361517, 48.4064, 3.31139, 70),
('77508', 'Villeneuve-le-Comte', '31T', 487540, 5406812, 48.8142, 2.83028, 125),
('77509', 'Villeneuve-les-Bordes', '31T', 503202, 5370364, 48.4864, 3.04333, 145),
('77510', 'Villeneuve-Saint-Denis', '31T', 484889, 5406942, 48.8153, 2.79416, 121),
('77511', 'Villeneuve-sous-Dammartin', '31T', 473686, 5431224, 49.0333, 2.64, 90),
('77512', 'Villeneuve-sur-Bellot', '31T', 525160, 5412382, 48.8639, 3.34305, 100),
('77513', 'Villenoy', '31T', 490013, 5421165, 48.9433, 2.86361, 50),
('77514', 'Villeparisis', '31T', 471403, 5421508, 48.9458, 2.60945, 60),
('77515', 'Villeroy', '31T', 484066, 5425503, 48.9822, 2.78223, 100),
('77516', 'Ville-Saint-Jacques', '31T', 492590, 5354374, 48.3425, 2.9, 100),
('77517', 'Villevaudé', '31T', 474622, 5418219, 48.9164, 2.65361, 120),
('77518', 'Villiers-en-Bière', '31T', 470346, 5371428, 48.4953, 2.59861, 76),
('77519', 'Villiers-Saint-Georges', '31T', 529891, 5388721, 48.6508, 3.40584, 152),
('77520', 'Villiers-sous-Grez', '31T', 473868, 5351959, 48.3203, 2.6475, 80),
('77521', 'Villiers-sur-Morin', '31T', 491321, 5412023, 48.8611, 2.88167, 60),
('77522', 'Villiers-sur-Seine', '31T', 527809, 5366942, 48.455, 3.37612, 58),
('77523', 'Villuis', '31T', 526312, 5362025, 48.4108, 3.35556, 80),
('77524', 'Vimpelles', '31T', 512265, 5365188, 48.4397, 3.16583, 55),
('77525', 'Vinantes', '31T', 480702, 5428508, 49.0092, 2.73611, 90),
('77527', 'Voinsles', '31T', 500388, 5393181, 48.6917, 3.00527, 109),
('77528', 'Voisenon', '31T', 475288, 5379865, 48.5714, 2.665, 80),
('77529', 'Voulangis', '31T', 492603, 5410941, 48.8514, 2.89917, 110),
('77530', 'Voulton', '31T', 524628, 5385083, 48.6183, 3.33417, 165),
('77531', 'Voulx', '31T', 497754, 5347515, 48.2808, 2.96973, 94),
('77532', 'Vulaines-lès-Provins', '31T', 516151, 5378537, 48.5597, 3.21889, 140),
('77533', 'Vulaines-sur-Seine', '31T', 482514, 5364338, 48.4319, 2.76361, 88),
('77534', 'Yèbles', '31T', 483178, 5387247, 48.6381, 2.77166, 95),
('78003', 'Ablis', '31T', 413907, 5374384, 48.5167, 1.83417, 150),
('78005', 'Achères', '31T', 432007, 5423641, 48.9619, 2.07111, 25),
('78006', 'Adainville', '31T', 400937, 5397514, 48.7228, 1.65306, 133),
('78007', 'Aigremont', '31T', 428119, 5417019, 48.9019, 2.01917, 130),
('78009', 'Allainville', '31T', 418445, 5367585, 48.4561, 1.89694, 153),
('78010', 'Les Alluets-le-Roi', '31T', 420850, 5418446, 48.9139, 1.91972, 182),
('78013', 'Andelu', '31T', 413852, 5414782, 48.88, 1.825, 119),
('78015', 'Andrésy', '31T', 431141, 5425906, 48.9822, 2.05889, 23),
('78020', 'Arnouville-lès-Mantes', '31T', 407209, 5418347, 48.9111, 1.73361, 130),
('78029', 'Aubergenville', '31T', 416205, 5423610, 48.9597, 1.85527, 40),
('78030', 'Auffargis', '31T', 418105, 5394952, 48.7022, 1.88695, 148),
('78031', 'Auffreville-Brasseuil', '31T', 405666, 5423377, 48.9561, 1.71139, 40),
('78033', 'Aulnay-sur-Mauldre', '31T', 415099, 5420414, 48.9308, 1.84083, 30),
('78034', 'Auteuil', '31T', 413317, 5410528, 48.8417, 1.8186, 90),
('78036', 'Autouillet', '31T', 412292, 5411440, 48.8497, 1.80444, 122),
('78043', 'Bailly', '31T', 432579, 5410385, 48.8428, 2.08111, 130),
('78048', 'Bazainville', '31T', 402421, 5406445, 48.8033, 1.67111, 129),
('78049', 'Bazemont', '31T', 416886, 5420171, 48.9289, 1.86528, 140),
('78050', 'Bazoches-sur-Guyonne', '31T', 416291, 5403502, 48.7789, 1.86056, 130),
('78053', 'Béhoust', '31T', 406265, 5409375, 48.8303, 1.72278, 130),
('78057', 'Bennecourt', '31T', 395187, 5432893, 49.04, 1.56583, 20),
('78062', 'Beynes', '31T', 417358, 5412165, 48.8569, 1.87334, 50),
('78068', 'Blaru', '31T', 388911, 5433880, 49.0478, 1.47972, 90),
('78070', 'Boinville-en-Mantois', '31T', 408974, 5420419, 48.93, 1.75723, 135),
('78071', 'Boinville-le-Gaillard', '31T', 416638, 5371780, 48.4936, 1.87167, 155),
('78072', 'Boinvilliers', '31T', 401992, 5419209, 48.9181, 1.66222, 130),
('78073', 'Bois-d''Arcy', '31T', 429508, 5406038, 48.8033, 2.04001, 166),
('78076', 'Boissets', '31T', 396196, 5412951, 48.8608, 1.58472, 130),
('78077', 'La Boissière-École', '31T', 400286, 5393078, 48.6828, 1.64528, 171),
('78082', 'Boissy-Mauvoisin', '31T', 396061, 5424228, 48.9622, 1.58001, 140),
('78084', 'Boissy-sans-Avoir', '31T', 411507, 5408178, 48.8203, 1.79445, 100),
('78087', 'Bonnelles', '31T', 428531, 5385390, 48.6175, 2.03028, 116),
('78089', 'Bonnières-sur-Seine', '31T', 396232, 5432317, 49.035, 1.58028, 50),
('78090', 'Bouafle', '31T', 419265, 5424213, 48.9656, 1.89695, 70),
('78092', 'Bougival', '31T', 437213, 5412833, 48.8653, 2.14388, 50),
('78096', 'Bourdonné', '31T', 401839, 5401174, 48.7558, 1.66445, 106),
('78104', 'Breuil-Bois-Robert', '31T', 406073, 5422166, 48.9453, 1.71723, 130),
('78107', 'Bréval', '31T', 392668, 5422315, 48.9444, 1.53417, 130),
('78108', 'Les Bréviaires', '31T', 412677, 5395620, 48.7075, 1.81305, 177),
('78113', 'Brueil-en-Vexin', '31T', 413663, 5431432, 49.0297, 1.81889, 90),
('78117', 'Buc', '31T', 435895, 5402657, 48.7736, 2.1275, 120),
('78118', 'Buchelay', '31T', 402785, 5426114, 48.9803, 1.67139, 70),
('78120', 'Bullion', '31T', 426060, 5385916, 48.6219, 1.99666, 110),
('78123', 'Carrières-sous-Poissy', '31T', 428297, 5421372, 48.9411, 2.02083, 30),
('78124', 'Carrières-sur-Seine', '31T', 440389, 5418295, 48.9147, 2.18639, 30),
('78125', 'La Celle-les-Bordes', '31T', 422990, 5387440, 48.6353, 1.95473, 124),
('78126', 'La Celle-Saint-Cloud', '31T', 436490, 5410154, 48.8411, 2.13444, 116),
('78128', 'Cernay-la-Ville', '31T', 424521, 5391743, 48.6742, 1.97472, 174),
('78133', 'Chambourcy', '31T', 429691, 5417370, 48.9053, 2.04055, 100),
('78138', 'Chanteloup-les-Vignes', '31T', 429083, 5425531, 48.9786, 2.03084, 90),
('78140', 'Chapet', '31T', 421872, 5424546, 48.9689, 1.9325, 52),
('78143', 'Châteaufort', '31T', 433275, 5398673, 48.7375, 2.09249, 120),
('78146', 'Chatou', '31T', 437822, 5416254, 48.8961, 2.15166, 33),
('78147', 'Chaufour-lès-Bonnières', '31T', 389128, 5430509, 49.0175, 1.48361, 153),
('78152', 'Chavenay', '31T', 425727, 5411708, 48.8539, 1.9875, 100),
('78158', 'Le Chesnay', '31T', 435539, 5408992, 48.8306, 2.12166, 130),
('78160', 'Chevreuse', '31T', 429372, 5395293, 48.7067, 2.04, 90),
('78162', 'Choisel', '31T', 427812, 5393151, 48.6872, 2.01917, 110),
('78163', 'Civry-la-Forêt', '31T', 398780, 5413799, 48.8689, 1.61973, 125),
('78164', 'Clairefontaine-en-Yvelines', '31T', 419599, 5385048, 48.6133, 1.90917, 130),
('78165', 'Les Clayes-sous-Bois', '31T', 425742, 5408248, 48.8228, 1.98833, 120),
('78168', 'Coignières', '31T', 420566, 5399827, 48.7464, 1.91945, 167),
('78171', 'Condé-sur-Vesgre', '31T', 401546, 5399635, 48.7419, 1.66083, 110),
('78172', 'Conflans-Sainte-Honorine', '31T', 434049, 5427755, 48.9992, 2.09833, 50),
('78185', 'Courgent', '31T', 401744, 5416650, 48.895, 1.65945, 80),
('78188', 'Cravent', '31T', 389558, 5427597, 48.9914, 1.49028, 150),
('78189', 'Crespières', '31T', 421026, 5415077, 48.8836, 1.92277, 100),
('78190', 'Croissy-sur-Seine', '31T', 437134, 5414810, 48.8831, 2.1425, 30),
('78192', 'Dammartin-en-Serve', '31T', 398889, 5417566, 48.9028, 1.62028, 130),
('78193', 'Dampierre-en-Yvelines', '31T', 425510, 5395343, 48.7067, 1.9875, 100),
('78194', 'Dannemarie', '31T', 397728, 5401989, 48.7625, 1.60833, 110),
('78196', 'Davron', '31T', 422710, 5413108, 48.8661, 1.94611, 110),
('78202', 'Drocourt', '31T', 409955, 5434456, 49.0564, 1.76751, 160),
('78206', 'Ecquevilly', '31T', 421171, 5422394, 48.9494, 1.92334, 80),
('78208', 'Élancourt', '31T', 423563, 5403985, 48.7842, 1.95944, 130),
('78209', 'Émancé', '31T', 406371, 5382689, 48.5903, 1.73028, 130),
('78217', 'Épône', '31T', 413251, 5423285, 48.9564, 1.815, 60),
('78220', 'Les Essarts-le-Roi', '31T', 418619, 5396550, 48.7167, 1.89362, 170),
('78224', 'L''Étang-la-Ville', '31T', 432046, 5413480, 48.8706, 2.07333, 70),
('78227', 'Évecquemont', '31T', 422937, 5429442, 49.0131, 1.94612, 130),
('78230', 'La Falaise', '31T', 414470, 5421876, 48.9439, 1.83194, 30),
('78231', 'Favrieux', '31T', 400681, 5422136, 48.9442, 1.64362, 130),
('78233', 'Feucherolles', '31T', 424737, 5413852, 48.8731, 1.97361, 140),
('78234', 'Flacourt', '31T', 400934, 5420340, 48.9281, 1.64751, 130),
('78236', 'Flexanville', '31T', 407348, 5411983, 48.8539, 1.73694, 120),
('78237', 'Flins-Neuve-Église', '31T', 395894, 5416385, 48.8917, 1.57973, 130),
('78238', 'Flins-sur-Seine', '31T', 417514, 5424085, 48.9642, 1.87305, 40),
('78239', 'Follainville-Dennemont', '31T', 406073, 5430598, 49.0211, 1.71528, 110),
('78242', 'Fontenay-le-Fleury', '31T', 430258, 5407356, 48.8153, 2.04999, 130),
('78245', 'Fontenay-Mauvoisin', '31T', 401310, 5424349, 48.9642, 1.65167, 135),
('78246', 'Fontenay-Saint-Père', '31T', 408865, 5431138, 49.0264, 1.75334, 100),
('78251', 'Fourqueux', '31T', 431336, 5415342, 48.8872, 2.06334, 120),
('78255', 'Freneuse', '31T', 397883, 5433739, 49.0481, 1.6025, 20),
('78261', 'Gaillon-sur-Montcient', '31T', 419098, 5430917, 49.0258, 1.89333, 50),
('78262', 'Galluis', '31T', 411464, 5405492, 48.7961, 1.79444, 135),
('78263', 'Gambais', '31T', 402588, 5403137, 48.7736, 1.67417, 122),
('78264', 'Gambaiseuil', '31T', 406842, 5401181, 48.7567, 1.7325, 130),
('78265', 'Garancières', '31T', 408879, 5408375, 48.8217, 1.75861, 100),
('78267', 'Gargenville', '31T', 412945, 5427119, 48.9908, 1.81, 55),
('78269', 'Gazeran', '31T', 409672, 5387978, 48.6383, 1.77388, 150),
('78276', 'Gommecourt', '31T', 397432, 5436774, 49.0753, 1.59556, 40),
('78278', 'Goupillières', '31T', 409207, 5414763, 48.8792, 1.76166, 140),
('78281', 'Goussonville', '31T', 409626, 5419203, 48.9192, 1.76639, 100),
('78283', 'Grandchamp', '31T', 398600, 5397123, 48.7189, 1.62139, 147),
('78285', 'Gressey', '31T', 397955, 5409954, 48.8342, 1.60944, 120),
('78289', 'Grosrouvre', '31T', 408972, 5404080, 48.7831, 1.76083, 150),
('78290', 'Guernes', '31T', 400386, 5429523, 49.0106, 1.63778, 39),
('78291', 'Guerville', '31T', 407311, 5421990, 48.9439, 1.73417, 90),
('78296', 'Guitrancourt', '31T', 410639, 5429040, 49.0078, 1.77806, 80),
('78297', 'Guyancourt', '31T', 431790, 5402520, 48.7719, 2.07166, 160),
('78299', 'Hardricourt', '31T', 419271, 5428815, 49.0069, 1.89612, 58),
('78300', 'Hargeville', '31T', 408026, 5416017, 48.8903, 1.74528, 145),
('78302', 'La Hauteville', '31T', 398345, 5395491, 48.7042, 1.61833, 160),
('78305', 'Herbeville', '31T', 418476, 5417553, 48.9056, 1.8875, 130),
('78307', 'Hermeray', '31T', 402427, 5388037, 48.6378, 1.67555, 134),
('78310', 'Houdan', '31T', 397254, 5405086, 48.7903, 1.60111, 100),
('78311', 'Houilles', '31T', 439814, 5419691, 48.9272, 2.17833, 33),
('78314', 'Issou', '31T', 411723, 5426953, 48.9892, 1.79333, 72),
('78317', 'Jambville', '31T', 416290, 5433245, 49.0464, 1.85445, 120),
('78320', 'Jeufosse', '31T', 393755, 5432364, 49.035, 1.54638, 50),
('78321', 'Jouars-Pontchartrain', '31T', 419389, 5406051, 48.8022, 1.90222, 112),
('78322', 'Jouy-en-Josas', '31T', 438830, 5402254, 48.7703, 2.16751, 90),
('78324', 'Jouy-Mauvoisin', '31T', 400978, 5425126, 48.9711, 1.64694, 100),
('78325', 'Jumeauville', '31T', 411220, 5418344, 48.9117, 1.78833, 90),
('78327', 'Juziers', '31T', 415532, 5427481, 48.9944, 1.84528, 50),
('78329', 'Lainville-en-Vexin', '31T', 413693, 5434674, 49.0589, 1.81861, 150),
('78334', 'Lévis-Saint-Nom', '31T', 423125, 5397351, 48.7244, 1.95472, 172),
('78335', 'Limay', '31T', 407266, 5427859, 48.9967, 1.73222, 36),
('78337', 'Limetz-Villez', '31T', 394096, 5435292, 49.0614, 1.55028, 24),
('78343', 'Les Loges-en-Josas', '31T', 436926, 5401750, 48.7656, 2.14167, 140),
('78344', 'Lommoye', '31T', 391332, 5427902, 48.9944, 1.51444, 143),
('78346', 'Longnes', '31T', 396586, 5419678, 48.9214, 1.58833, 135),
('78349', 'Longvilliers', '31T', 425649, 5381104, 48.5786, 1.99195, 100),
('78350', 'Louveciennes', '31T', 435031, 5412611, 48.8631, 2.11417, 150),
('78354', 'Magnanville', '31T', 403695, 5424646, 48.9672, 1.68417, 130),
('78356', 'Magny-les-Hameaux', '31T', 430956, 5399411, 48.7439, 2.06084, 150),
('78358', 'Maisons-Laffitte', '31T', 437134, 5422037, 48.9481, 2.14139, 40),
('78361', 'Mantes-la-Jolie', '31T', 405716, 5427546, 48.9936, 1.7111, 27),
('78362', 'Mantes-la-Ville', '31T', 405597, 5425293, 48.9733, 1.71, 40),
('78364', 'Marcq', '31T', 413231, 5412845, 48.8625, 1.81694, 130),
('78366', 'Mareil-le-Guyon', '31T', 415800, 5404838, 48.7908, 1.85361, 73),
('78367', 'Mareil-Marly', '31T', 432266, 5414836, 48.8828, 2.07611, 110),
('78368', 'Mareil-sur-Mauldre', '31T', 416684, 5416159, 48.8928, 1.86334, 50),
('78372', 'Marly-le-Roi', '31T', 433387, 5413186, 48.8681, 2.09166, 140),
('78380', 'Maule', '31T', 415814, 5417933, 48.9086, 1.8511, 40),
('78381', 'Maulette', '31T', 398809, 5405305, 48.7925, 1.62222, 100),
('78382', 'Maurecourt', '31T', 431487, 5427632, 48.9978, 2.06333, 30),
('78383', 'Maurepas', '31T', 420681, 5402203, 48.7678, 1.92056, 160),
('78384', 'Médan', '31T', 426363, 5422817, 48.9539, 1.99416, 30),
('78385', 'Ménerville', '31T', 397812, 5423269, 48.9539, 1.60416, 140),
('78389', 'Méré', '31T', 413309, 5404691, 48.7892, 1.81973, 120),
('78391', 'Méricourt', '31T', 399789, 5432468, 49.0369, 1.62889, 30),
('78396', 'Le Mesnil-le-Roi', '31T', 436496, 5421364, 48.9419, 2.13278, 60),
('78397', 'Le Mesnil-Saint-Denis', '31T', 423747, 5399505, 48.7439, 1.96277, 171),
('78398', 'Les Mesnuls', '31T', 414604, 5401304, 48.7589, 1.83806, 120),
('78401', 'Meulan', '31T', 420386, 5428675, 49.0058, 1.91139, 50),
('78402', 'Mézières-sur-Seine', '31T', 411671, 5423680, 48.9597, 1.79333, 22),
('78403', 'Mézy-sur-Seine', '31T', 418207, 5428305, 49.0022, 1.88167, 50),
('78404', 'Millemont', '31T', 407960, 5407062, 48.8097, 1.74639, 140),
('78406', 'Milon-la-Chapelle', '31T', 430260, 5397629, 48.7278, 2.05167, 100),
('78407', 'Mittainville', '31T', 400242, 5391751, 48.6708, 1.64501, 135),
('78410', 'Moisson', '31T', 402823, 5436430, 49.0731, 1.66944, 20),
('78413', 'Mondreville', '31T', 394005, 5417749, 48.9036, 1.55361, 135),
('78415', 'Montainville', '31T', 416708, 5415047, 48.8828, 1.86389, 107),
('78416', 'Montalet-le-Bois', '31T', 414299, 5433151, 49.0453, 1.82723, 90),
('78417', 'Montchauvet', '31T', 399683, 5416439, 48.8928, 1.63139, 100),
('78418', 'Montesson', '31T', 436969, 5420031, 48.93, 2.13945, 50),
('78420', 'Montfort-l''Amaury', '31T', 412512, 5403375, 48.7772, 1.80916, 126),
('78423', 'Montigny-le-Bretonneux', '31T', 428586, 5402529, 48.7717, 2.02806, 164),
('78431', 'Morainvilliers', '31T', 422196, 5420095, 48.9289, 1.93777, 113),
('78437', 'Mousseaux-sur-Seine', '31T', 401446, 5433149, 49.0433, 1.65139, 50),
('78439', 'Mulcent', '31T', 401224, 5414898, 48.8792, 1.65278, 120),
('78440', 'Les Mureaux', '31T', 420784, 5426631, 48.9875, 1.91723, 37),
('78442', 'Neauphle-le-Château', '31T', 419369, 5407472, 48.815, 1.90167, 140),
('78443', 'Neauphle-le-Vieux', '31T', 416577, 5407637, 48.8161, 1.86361, 70),
('78444', 'Neauphlette', '31T', 391910, 5421033, 48.9328, 1.52416, 114),
('78451', 'Nézel', '31T', 414816, 5421839, 48.9436, 1.83667, 30),
('78455', 'Noisy-le-Roi', '31T', 431360, 5410709, 48.8456, 2.06444, 139),
('78460', 'Oinville-sur-Montcient', '31T', 415974, 5431180, 49.0278, 1.85055, 80),
('78464', 'Orcemont', '31T', 412407, 5382190, 48.5867, 1.81222, 150),
('78465', 'Orgerus', '31T', 404693, 5410452, 48.8397, 1.70112, 120),
('78466', 'Orgeval', '31T', 424952, 5419223, 48.9214, 1.97555, 130),
('78470', 'Orphin', '31T', 410200, 5381268, 48.5781, 1.7825, 159),
('78472', 'Orsonville', '31T', 413964, 5370060, 48.4778, 1.83583, 155),
('78474', 'Orvilliers', '31T', 400612, 5412593, 48.8583, 1.645, 130),
('78475', 'Osmoy', '31T', 405939, 5413025, 48.8631, 1.7175, 110),
('78478', 'Paray-Douaville', '31T', 417063, 5368562, 48.4647, 1.87806, 155),
('78481', 'Le Pecq', '31T', 435173, 5416068, 48.8942, 2.11556, 30),
('78484', 'Perdreauville', '31T', 399545, 5424596, 48.9661, 1.6275, 136),
('78486', 'Le Perray-en-Yvelines', '31T', 415722, 5394184, 48.695, 1.85472, 175),
('78490', 'Plaisir', '31T', 422756, 5407610, 48.8167, 1.94777, 110),
('78497', 'Poigny-la-Forêt', '31T', 408307, 5392107, 48.6753, 1.75444, 140),
('78498', 'Poissy', '31T', 430399, 5420264, 48.9314, 2.04972, 41),
('78499', 'Ponthévrard', '31T', 419767, 5378158, 48.5514, 1.91278, 158),
('78501', 'Porcheville', '31T', 410714, 5424900, 48.9706, 1.77999, 20),
('78502', 'Le Port-Marly', '31T', 434664, 5414345, 48.8786, 2.10889, 50),
('78503', 'Port-Villez', '31T', 391948, 5435488, 49.0628, 1.52084, 20),
('78505', 'Prunay-le-Temple', '31T', 402718, 5412988, 48.8622, 1.67361, 100),
('78506', 'Prunay-en-Yvelines', '31T', 411115, 5375632, 48.5275, 1.79611, 140),
('78513', 'La Queue-les-Yvelines', '31T', 409504, 5406666, 48.8064, 1.7675, 130),
('78516', 'Raizeux', '31T', 403035, 5386451, 48.6236, 1.68417, 125),
('78517', 'Rambouillet', '31T', 413498, 5389153, 48.6494, 1.82556, 154),
('78518', 'Rennemoulin', '31T', 429899, 5409616, 48.8356, 2.04472, 106),
('78520', 'Richebourg', '31T', 400116, 5408772, 48.8239, 1.63917, 130),
('78522', 'Rochefort-en-Yvelines', '31T', 425474, 5381848, 48.5853, 1.98944, 110),
('78524', 'Rocquencourt', '31T', 434875, 5409772, 48.8375, 2.11249, 140),
('78528', 'Rolleboise', '31T', 398310, 5430457, 49.0186, 1.60916, 70),
('78530', 'Rosay', '31T', 403170, 5419034, 48.9167, 1.67833, 50),
('78531', 'Rosny-sur-Seine', '31T', 399795, 5428298, 48.9994, 1.63, 29),
('78536', 'Sailly', '31T', 412463, 5432594, 49.04, 1.80223, 90),
('78537', 'Saint-Arnoult-en-Yvelines', '31T', 421849, 5380476, 48.5725, 1.94055, 130),
('78545', 'Saint-Cyr-l''École', '31T', 431178, 5405832, 48.8017, 2.06278, 124),
('78548', 'Saint-Forget', '31T', 427305, 5395072, 48.7044, 2.01195, 120),
('78550', 'Saint-Germain-de-la-Grange', '31T', 419218, 5409729, 48.8353, 1.89917, 110),
('78551', 'Saint-Germain-en-Laye', '31T', 433240, 5416214, 48.8953, 2.08916, 92),
('78557', 'Saint-Hilarion', '31T', 406673, 5386081, 48.6208, 1.73361, 140),
('78558', 'Saint-Illiers-la-Ville', '31T', 393183, 5425858, 48.9764, 1.54027, 140),
('78559', 'Saint-Illiers-le-Bois', '31T', 390789, 5424020, 48.9594, 1.50806, 140),
('78561', 'Saint-Lambert', '31T', 427999, 5398213, 48.7328, 2.02083, 120),
('78562', 'Saint-Léger-en-Yvelines', '31T', 409309, 5397156, 48.7208, 1.76694, 150),
('78564', 'Saint-Martin-de-Bréthencourt', '31T', 420972, 5373447, 48.5092, 1.93, 110),
('78565', 'Saint-Martin-des-Champs', '31T', 406075, 5415062, 48.8814, 1.71889, 130),
('78567', 'Saint-Martin-la-Garenne', '31T', 404303, 5432821, 49.0408, 1.69055, 60),
('78569', 'Sainte-Mesme', '31T', 423386, 5375915, 48.5317, 1.96223, 110),
('78571', 'Saint-Nom-la-Bretèche', '31T', 428015, 5412079, 48.8575, 2.01862, 136),
('78575', 'Saint-Rémy-lès-Chevreuse', '31T', 431481, 5395606, 48.7097, 2.06861, 80),
('78576', 'Saint-Rémy-l''Honoré', '31T', 417846, 5401039, 48.7569, 1.88222, 150),
('78586', 'Sartrouville', '31T', 438809, 5420813, 48.9372, 2.16445, 50),
('78588', 'Saulx-Marchais', '31T', 414561, 5410509, 48.8417, 1.83556, 115),
('78590', 'Senlisse', '31T', 425218, 5393401, 48.6892, 1.98389, 100),
('78591', 'Septeuil', '31T', 403371, 5416529, 48.8942, 1.68167, 69),
('78597', 'Soindres', '31T', 402964, 5423578, 48.9575, 1.67444, 120),
('78601', 'Sonchamp', '31T', 417203, 5380913, 48.5758, 1.8775, 140),
('78605', 'Tacoignières', '31T', 402808, 5409928, 48.8347, 1.67556, 140),
('78606', 'Le Tartre-Gaudran', '31T', 396804, 5395025, 48.6997, 1.5975, 145),
('78608', 'Le Tertre-Saint-Denis', '31T', 398005, 5421566, 48.9386, 1.60722, 166),
('78609', 'Tessancourt-sur-Aubette', '31T', 421147, 5430734, 49.0244, 1.92139, 50),
('78615', 'Thiverval-Grignon', '31T', 420565, 5411285, 48.8494, 1.91722, 70),
('78616', 'Thoiry', '31T', 411894, 5413330, 48.8667, 1.79861, 150),
('78618', 'Tilly', '31T', 395733, 5415400, 48.8828, 1.57778, 130),
('78620', 'Toussus-le-Noble', '31T', 434799, 5399674, 48.7467, 2.11306, 157),
('78621', 'Trappes', '31T', 427165, 5403165, 48.7772, 2.00861, 168),
('78623', 'Le Tremblay-sur-Mauldre', '31T', 417576, 5403452, 48.7786, 1.87806, 110),
('78624', 'Triel-sur-Seine', '31T', 427507, 5424748, 48.9714, 2.00944, 40),
('78638', 'Vaux-sur-Seine', '31T', 424085, 5428747, 49.0069, 1.96194, 50),
('78640', 'Vélizy-Villacoublay', '31T', 439361, 5404224, 48.7881, 2.17444, 175),
('78642', 'Verneuil-sur-Seine', '31T', 424879, 5425864, 48.9811, 1.97333, 40),
('78643', 'Vernouillet', '31T', 425824, 5425048, 48.9739, 1.98639, 40),
('78644', 'La Verrière', '31T', 423275, 5400808, 48.7556, 1.95611, 170),
('78646', 'Versailles', '31T', 436610, 5406355, 48.8069, 2.13666, 135),
('78647', 'Vert', '31T', 404133, 5421735, 48.9411, 1.69084, 50),
('78650', 'Le Vésinet', '31T', 436347, 5415468, 48.8889, 2.13167, 43),
('78653', 'Vicq', '31T', 414558, 5407667, 48.8161, 1.83611, 70),
('78655', 'Vieille-Église-en-Yvelines', '31T', 417194, 5391382, 48.67, 1.87528, 169),
('78668', 'La Villeneuve-en-Chevrie', '31T', 392432, 5430104, 49.0144, 1.52889, 139),
('78672', 'Villennes-sur-Seine', '31T', 426422, 5421056, 48.9381, 1.99528, 25),
('78674', 'Villepreux', '31T', 427574, 5409521, 48.8344, 2.01306, 90),
('78677', 'Villette', '31T', 404351, 5420218, 48.9275, 1.69417, 50),
('78681', 'Villiers-le-Mahieu', '31T', 410051, 5412772, 48.8614, 1.77361, 127),
('78683', 'Villiers-Saint-Fréderic', '31T', 418725, 5408099, 48.8206, 1.89278, 140),
('78686', 'Viroflay', '31T', 439222, 5406449, 48.8081, 2.17222, 120),
('78688', 'Voisins-le-Bretonneux', '31T', 430303, 5401118, 48.7592, 2.05167, 165),
('79001', 'L''Absie', '30T', 685406, 5167207, 46.6328, -0.577774, 240),
('79002', 'Adilly', '30T', 705681, 5174323, 46.6908, -0.310001, 157),
('79003', 'Aiffres', '30T', 698995, 5129143, 46.2867, -0.416666, 25),
('79004', 'Aigonnay', '30T', 710879, 5134238, 46.3289, -0.260278, 131),
('79005', 'Airvault', '30T', 718379, 5190007, 46.8278, -0.136672, 113),
('79006', 'Les Alleuds', '30T', 731222, 5116556, 46.1633, -0.00500401, 165),
('79007', 'Allonne', '30T', 700456, 5162004, 46.5817, -0.38361, 210),
('79008', 'Amailloux', '30T', 705022, 5180543, 46.7469, -0.315837, 170),
('79009', 'Amuré', '30T', 682848, 5126228, 46.265, -0.627227, 10),
('79010', 'Arçais', '30T', 677948, 5129697, 46.2975, -0.689448, 5),
('79011', 'Ardilleux', '30T', 728384, 5109156, 46.0978, -0.0452763, 100),
('79012', 'Ardin', '30T', 687459, 5149692, 46.4747, -0.558055, 60),
('79013', 'Argenton-les-Vallées', '30T', 694379, 5206700, 46.9853, -0.443886, 100),
('79014', 'Argenton-l''Église', '30T', 707981, 5213834, 47.0453, -0.261942, 60),
('79015', 'Asnières-en-Poitou', '30T', 716467, 5109374, 46.1036, -0.199162, 73),
('79016', 'Assais-les-Jumeaux', '30T', 724640, 5185973, 46.7894, -0.0566683, 130),
('79018', 'Aubigné', '30T', 721159, 5104411, 46.0575, -0.140836, 113),
('79019', 'Aubigny', '30T', 720241, 5180309, 46.74, -0.11695, 146),
('79020', 'Augé', '30T', 708467, 5146515, 46.44, -0.286111, 80),
('79022', 'Availles-Thouarsais', '30T', 717976, 5193516, 46.8594, -0.140274, 80),
('79023', 'Avon', '30T', 730250, 5141152, 46.3847, -0.00554994, 139),
('79024', 'Azay-le-Brûlé', '30T', 711540, 5142296, 46.4011, -0.248062, 110),
('79025', 'Azay-sur-Thouet', '30T', 703066, 5166757, 46.6236, -0.347494, 170),
('79027', 'La Bataille', '30T', 723679, 5107870, 46.0878, -0.106673, 120),
('79029', 'Beaulieu-sous-Parthenay', '30T', 711948, 5161778, 46.5761, -0.233891, 190),
('79030', 'Beaussais', '30T', 719215, 5130423, 46.2919, -0.15389, 150),
('79031', 'Beauvoir-sur-Niort', '30T', 695051, 5117152, 46.18, -0.472773, 66),
('79032', 'Béceleuf', '30T', 691478, 5149508, 46.4719, -0.505827, 100),
('79033', 'Belleville', '30T', 693266, 5111133, 46.1264, -0.498333, 50),
('79034', 'Bessines', '30T', 691302, 5130627, 46.3022, -0.515835, 28),
('79035', 'Le Beugnon', '30T', 691541, 5161652, 46.5811, -0.5, 200),
('79038', 'Boismé', '30T', 695799, 5183325, 46.7747, -0.435272, 150),
('79039', 'Boisserolles', '30T', 695308, 5109746, 46.1133, -0.472498, 60),
('79040', 'La Boissière-en-Gâtine', '30T', 701611, 5159323, 46.5572, -0.369717, 188),
('79042', 'Bougon', '30T', 725551, 5139245, 46.3692, -0.0674976, 105),
('79043', 'Bouillé-Loretz', '30T', 707112, 5217543, 47.0789, -0.271667, 43),
('79044', 'Bouillé-Saint-Paul', '30T', 701791, 5211365, 47.025, -0.344443, 96),
('79045', 'Bouin', '30T', 730818, 5107887, 46.0856, -0.0144455, 110),
('79046', 'Le Bourdet', '30T', 683055, 5122898, 46.235, -0.625836, 15),
('79047', 'Boussais', '30T', 710001, 5190016, 46.8306, -0.246385, 139),
('79048', 'La Crèche', '30T', 707166, 5138314, 46.3667, -0.306661, 50),
('79049', 'Bressuire', '30T', 691348, 5190411, 46.8397, -0.490554, 182),
('79050', 'Bretignolles', '30T', 682477, 5192791, 46.8636, -0.605836, 218),
('79051', 'Le Breuil-Bernard', '30T', 686936, 5176863, 46.7192, -0.553887, 200),
('79053', 'Le Breuil-sous-Argenton', '30T', 695430, 5207537, 46.9925, -0.429718, 110),
('79054', 'Brie', '30T', 725327, 5200403, 46.9189, -0.0405572, 65),
('79055', 'Brieuil-sur-Chizé', '30T', 706838, 5110649, 46.1181, -0.323054, 50),
('79056', 'Brion-près-Thouet', '30T', 713687, 5214933, 47.0533, -0.186394, 150),
('79057', 'Brioux-sur-Boutonne', '30T', 714809, 5113734, 46.1433, -0.218615, 61),
('79058', 'Brûlain', '30T', 706757, 5120038, 46.2025, -0.320003, 60),
('79059', 'Le Busseau', '30T', 684182, 5161269, 46.5797, -0.596114, 100),
('79060', 'Caunay', '31T', 275443, 5120295, 46.1992, 0.0894461, 141),
('79061', 'Celles-sur-Belle', '30T', 714859, 5126992, 46.2625, -0.211942, 117),
('79062', 'Cerizay', '30T', 677915, 5188019, 46.8219, -0.667498, 170),
('79063', 'Cersay', '30T', 701018, 5213594, 47.0453, -0.353614, 80),
('79064', 'Chail', '30T', 724300, 5121460, 46.2097, -0.0922199, 130),
('79066', 'Champdeniers-Saint-Denis', '30T', 699231, 5151303, 46.4858, -0.404173, 111),
('79068', 'Chantecorps', '30T', 718336, 5153074, 46.4958, -0.154717, 171),
('79069', 'Chanteloup', '30T', 689042, 5182181, 46.7664, -0.524166, 221),
('79070', 'La Chapelle-Bâton', '30T', 705182, 5150173, 46.4739, -0.327218, 140),
('79071', 'La Chapelle-Bertrand', '30T', 716639, 5167043, 46.6219, -0.17028, 200),
('79072', 'La Chapelle-Gaudin', '30T', 699329, 5200930, 46.9319, -0.381395, 160),
('79074', 'La Chapelle-Pouilloux', '31T', 271242, 5112971, 46.1319, 0.0386064, 158),
('79075', 'La Chapelle-Saint-Étienne', '30T', 685488, 5172833, 46.6833, -0.574441, 189),
('79076', 'La Chapelle-Saint-Laurent', '30T', 692741, 5180043, 46.7461, -0.476667, 184),
('79077', 'La Chapelle-Thireuil', '30T', 687370, 5158772, 46.5564, -0.555553, 120),
('79078', 'Prissé-la-Charrière', '30T', 694302, 5114378, 46.1553, -0.483606, 40),
('79079', 'Mauléon', '30T', 670861, 5199614, 46.9281, -0.755558, 150),
('79080', 'Châtillon-sur-Thouet', '30T', 711513, 5171126, 46.6603, -0.235284, 150),
('79081', 'Chauray', '30T', 701694, 5137543, 46.3614, -0.378057, 80),
('79083', 'Chef-Boutonne', '30T', 726635, 5110513, 46.1106, -0.0672266, 100),
('79084', 'Chenay', '30T', 728321, 5134404, 46.3247, -0.0338887, 128),
('79085', 'Chérigné', '30T', 718821, 5111466, 46.1217, -0.167777, 66),
('79086', 'Cherveux', '30T', 703095, 5143645, 46.4158, -0.357216, 90),
('79087', 'Chey', '30T', 727143, 5132103, 46.3044, -0.0502837, 130),
('79088', 'Chiché', '30T', 701673, 5186022, 46.7972, -0.357225, 150),
('79089', 'Le Chillou', '30T', 718723, 5182911, 46.7639, -0.135556, 150),
('79090', 'Chizé', '30T', 705000, 5110340, 46.1158, -0.346949, 60),
('79091', 'Cirières', '30T', 681394, 5190070, 46.8394, -0.621113, 190),
('79092', 'Clavé', '30T', 713739, 5152694, 46.4939, -0.214726, 169),
('79094', 'Clessé', '30T', 698155, 5176882, 46.7161, -0.407224, 195),
('79095', 'Clussais-la-Pommeraie', '31T', 270947, 5118855, 46.1847, 0.031948, 140),
('79096', 'Combrand', '30T', 676189, 5192602, 46.8636, -0.688339, 190),
('79098', 'La Couarde', '30T', 718737, 5133589, 46.3206, -0.158615, 180),
('79099', 'La Coudre', '30T', 692555, 5202283, 46.9461, -0.469722, 140),
('79100', 'Coulon', '30T', 685820, 5132774, 46.3231, -0.586108, 5),
('79101', 'Coulonges-sur-l''Autize', '30T', 684337, 5150585, 46.4836, -0.598334, 80),
('79102', 'Coulonges-Thouarsais', '30T', 703900, 5200374, 46.9256, -0.321661, 141),
('79103', 'Courlay', '30T', 685713, 5183405, 46.7783, -0.567229, 204),
('79104', 'Cours', '30T', 698465, 5152545, 46.4972, -0.413613, 111),
('79105', 'Coutières', '30T', 721113, 5154164, 46.5047, -0.118057, 190),
('79106', 'Couture-d''Argenson', '30T', 725806, 5097380, 45.9928, -0.0841642, 97),
('79107', 'Crézières', '30T', 721381, 5107200, 46.0825, -0.136672, 105),
('79108', 'Doux', '31T', 271831, 5180265, 46.7369, 0.0133323, 113),
('79109', 'Échiré', '30T', 698642, 5140624, 46.39, -0.416384, 30),
('79111', 'Ensigné', '30T', 713072, 5107463, 46.0875, -0.243894, 80),
('79112', 'Épannes', '30T', 686300, 5122625, 46.2317, -0.583895, 20),
('79113', 'Étusson', '30T', 689019, 5209678, 47.0136, -0.513059, 120),
('79114', 'Exireuil', '30T', 715747, 5146059, 46.4336, -0.191662, 140),
('79115', 'Exoudun', '30T', 724561, 5136489, 46.3447, -0.0816722, 101),
('79116', 'Faye-l''Abbesse', '30T', 701892, 5189614, 46.8294, -0.352773, 159),
('79117', 'Faye-sur-Ardin', '30T', 691159, 5146749, 46.4472, -0.51111, 71),
('79118', 'Fénery', '30T', 701740, 5173911, 46.6883, -0.361668, 222),
('79119', 'Fenioux', '30T', 692137, 5157655, 46.545, -0.493885, 100),
('79120', 'La Ferrière-en-Parthenay', '30T', 723605, 5170976, 46.655, -0.0775048, 165),
('79121', 'Fomperron', '30T', 722000, 5150920, 46.4753, -0.108058, 180),
('79122', 'Fontenille-Saint-Martin-d''Entraigues', '30T', 721690, 5111754, 46.1233, -0.130556, 74),
('79123', 'La Forêt-sur-Sèvre', '30T', 679567, 5182415, 46.7711, -0.648056, 160),
('79124', 'Les Forges', '30T', 727609, 5158484, 46.5414, -0.0313873, 194),
('79125', 'Fors', '30T', 699716, 5123481, 46.2356, -0.409716, 54),
('79126', 'Les Fosses', '30T', 702866, 5115737, 46.165, -0.372228, 80),
('79127', 'La Foye-Monjault', '30T', 690030, 5117828, 46.1875, -0.537495, 59),
('79128', 'François', '30T', 704196, 5138831, 46.3722, -0.345006, 40),
('79129', 'Fressines', '30T', 708209, 5133436, 46.3225, -0.295282, 108),
('79130', 'Frontenay-Rohan-Rohan', '30T', 689522, 5125195, 46.2539, -0.541115, 19),
('79131', 'Geay', '30T', 703733, 5195331, 46.8803, -0.326109, 150),
('79132', 'Genneton', '30T', 695522, 5214369, 47.0539, -0.425557, 110),
('79133', 'Germond-Rouvre', '30T', 697998, 5147895, 46.4556, -0.42167, 100),
('79134', 'Glénay', '30T', 709549, 5193214, 46.8594, -0.250838, 105),
('79135', 'Gourgé', '30T', 716427, 5178842, 46.7281, -0.167505, 130),
('79136', 'Gournay-Loizé', '30T', 726979, 5115161, 46.1522, -0.0605574, 132),
('79137', 'Granzay-Gript', '30T', 693550, 5121862, 46.2228, -0.490273, 30),
('79139', 'Les Groseillers', '30T', 699129, 5155718, 46.5256, -0.40361, 120),
('79140', 'Hanc', '30T', 730775, 5106742, 46.0753, -0.0155564, 110),
('79141', 'Irais', '30T', 721553, 5195965, 46.8803, -0.092218, 100),
('79142', 'Juillé', '30T', 715105, 5110809, 46.1169, -0.216113, 63),
('79144', 'Juscorps', '30T', 701575, 5121040, 46.2131, -0.386673, 47),
('79145', 'Lageon', '30T', 711230, 5179182, 46.7328, -0.235283, 150),
('79147', 'Largeasse', '30T', 691121, 5174214, 46.6942, -0.500278, 183),
('79148', 'Lezay', '30T', 730409, 5127868, 46.2653, -0.0100026, 125),
('79149', 'Lhoumois', '30T', 720130, 5176380, 46.7047, -0.120282, 150),
('79150', 'Limalonges', '31T', 281361, 5112355, 46.1297, 0.16972, 125),
('79152', 'Lorigné', '31T', 273017, 5110402, 46.1094, 0.0627824, 140),
('79153', 'Loubigné', '30T', 725350, 5106881, 46.0783, -0.085555, 114),
('79154', 'Loubillé', '30T', 727183, 5103827, 46.0503, -0.0633375, 103),
('79156', 'Louin', '30T', 716678, 5187195, 46.8031, -0.160278, 100),
('79157', 'Louzy', '30T', 714107, 5210312, 47.0117, -0.183059, 55),
('79158', 'Luché-sur-Brioux', '30T', 720261, 5112660, 46.1319, -0.148608, 80),
('79159', 'Luché-Thouarsais', '30T', 703225, 5197168, 46.8969, -0.331949, 140),
('79160', 'Lusseray', '30T', 718828, 5114278, 46.1469, -0.166389, 80),
('79161', 'Luzay', '30T', 713719, 5200501, 46.9236, -0.192778, 90),
('79162', 'Magné', '30T', 689055, 5131977, 46.315, -0.544443, 10),
('79163', 'Mairé-Levescault', '31T', 274768, 5115375, 46.1547, 0.08305, 142),
('79164', 'Maisonnay', '30T', 726745, 5119170, 46.1883, -0.0616639, 160),
('79165', 'Maisontiers', '30T', 710080, 5184117, 46.7775, -0.248058, 140),
('79166', 'Marigny', '30T', 699338, 5119267, 46.1978, -0.416392, 50),
('79167', 'Marnes', '30T', 727430, 5193559, 46.8567, -0.0163901, 70),
('79168', 'Massais', '30T', 702050, 5209334, 47.0067, -0.341946, 90),
('79170', 'Mauzé-sur-le-Mignon', '30T', 679798, 5118477, 46.1961, -0.669725, 15),
('79171', 'Mauzé-Thouarsais', '30T', 707026, 5206044, 46.9756, -0.278062, 110),
('79172', 'Mazières-en-Gâtine', '30T', 705343, 5156760, 46.5331, -0.322216, 201),
('79173', 'Mazières-sur-Béronne', '30T', 717392, 5120253, 46.2011, -0.182217, 90),
('79174', 'Melle', '30T', 720324, 5122829, 46.2233, -0.14306, 138),
('79175', 'Melleran', '31T', 268617, 5112854, 46.13, 0.00472831, 155),
('79176', 'Ménigoute', '30T', 725644, 5153404, 46.4964, -0.0594477, 160),
('79177', 'Messé', '31T', 277674, 5127352, 46.2633, 0.115001, 135),
('79178', 'Missé', '30T', 713616, 5203372, 46.9494, -0.19278, 90),
('79179', 'Moncoutant', '30T', 684373, 5177278, 46.7236, -0.587227, 195),
('79180', 'Montalembert', '31T', 280380, 5110165, 46.1097, 0.15805, 169),
('79183', 'Montravers', '30T', 674034, 5188770, 46.8297, -0.718051, 163),
('79184', 'La Mothe-Saint-Héray', '30T', 722081, 5138190, 46.3608, -0.113054, 80),
('79185', 'Mougon', '30T', 709021, 5130374, 46.2947, -0.286108, 85),
('79187', 'Moutiers-sous-Argenton', '30T', 698486, 5203374, 46.9542, -0.39139, 150),
('79188', 'Moutiers-sous-Chantemerle', '30T', 682066, 5174180, 46.6964, -0.618617, 180),
('79189', 'Nanteuil', '30T', 717391, 5143707, 46.4119, -0.171383, 90),
('79190', 'Neuvy-Bouin', '30T', 694220, 5172397, 46.6769, -0.460551, 204),
('79191', 'Niort', '30T', 695330, 5133226, 46.3244, -0.462501, 28),
('79195', 'Nueil-les-Aubiers', '30T', 683328, 5200973, 46.9369, -0.591386, 119),
('79196', 'Oiron', '30T', 722167, 5203932, 46.9517, -0.0802803, 97),
('79197', 'Oroux', '30T', 722640, 5175205, 46.6933, -0.088058, 160),
('79198', 'Paizay-le-Chapt', '30T', 718178, 5107178, 46.0833, -0.178058, 90),
('79199', 'Paizay-le-Tort', '30T', 719230, 5118062, 46.1808, -0.159439, 100),
('79200', 'Pamplie', '30T', 696252, 5156953, 46.5375, -0.440562, 100),
('79201', 'Pamproux', '30T', 726385, 5142120, 46.3947, -0.0552787, 100),
('79202', 'Parthenay', '30T', 710816, 5169773, 46.6483, -0.245002, 169),
('79203', 'Pas-de-Jeu', '30T', 724984, 5206695, 46.9756, -0.0419399, 56),
('79204', 'Périgné', '30T', 711895, 5118515, 46.1872, -0.254163, 60),
('79205', 'Pers', '31T', 273829, 5122487, 46.2183, 0.067505, 140),
('79207', 'La Petite-Boissière', '30T', 672061, 5194706, 46.8836, -0.741663, 180),
('79208', 'La Peyratte', '30T', 718102, 5173092, 46.6758, -0.148336, 150),
('79209', 'Pierrefitte', '30T', 705763, 5194226, 46.8697, -0.299995, 134),
('79210', 'Le Pin', '30T', 678781, 5192401, 46.8611, -0.654439, 190),
('79211', 'Pioussay', '31T', 270081, 5106617, 46.0744, 0.0266717, 158),
('79212', 'Pliboux', '31T', 278229, 5116639, 46.1672, 0.127224, 130),
('79213', 'Pompaire', '30T', 711799, 5165419, 46.6089, -0.234167, 180),
('79214', 'Pouffonds', '30T', 722713, 5120846, 46.2047, -0.113056, 130),
('79215', 'Pougne-Hérisson', '30T', 698973, 5170791, 46.6611, -0.399163, 206),
('79216', 'Prahecq', '30T', 704596, 5126269, 46.2592, -0.345282, 37),
('79217', 'Prailles', '30T', 714189, 5133860, 46.3244, -0.217498, 149),
('79218', 'Pressigny', '30T', 722106, 5181027, 46.7458, -0.092221, 140),
('79219', 'Priaires', '30T', 684820, 5112726, 46.1431, -0.60694, 28),
('79220', 'Prin-Deyrançon', '30T', 682137, 5121326, 46.2211, -0.638338, 20),
('79222', 'Pugny', '30T', 689072, 5177857, 46.7275, -0.525554, 210),
('79223', 'Puihardy', '30T', 688953, 5155175, 46.5236, -0.536385, 101),
('79225', 'Reffannes', '30T', 715649, 5159004, 46.55, -0.186938, 195),
('79226', 'Le Retail', '30T', 695911, 5159599, 46.5614, -0.443888, 200),
('79229', 'La Rochénard', '30T', 686179, 5119563, 46.2042, -0.58667, 30),
('79230', 'Rom', '31T', 277898, 5130558, 46.2922, 0.116391, 120),
('79231', 'Romans', '30T', 713394, 5137602, 46.3583, -0.226111, 105),
('79235', 'Saint-Amand-sur-Sèvre', '30T', 668193, 5192897, 46.8683, -0.79306, 147),
('79236', 'Saint-André-sur-Sèvre', '30T', 677342, 5183739, 46.7836, -0.676662, 150),
('79238', 'Saint-Aubin-du-Plain', '30T', 692128, 5199767, 46.9236, -0.476391, 153),
('79239', 'Saint-Aubin-le-Cloud', '30T', 702518, 5169735, 46.6506, -0.353339, 180),
('79240', 'Sainte-Blandine', '30T', 710016, 5124476, 46.2414, -0.275833, 80),
('79241', 'Saint-Christophe-sur-Roc', '30T', 703702, 5147188, 46.4475, -0.347781, 90),
('79242', 'Saint-Clémentin', '30T', 689179, 5201990, 46.9444, -0.514163, 114),
('79243', 'Saint-Coutant', '30T', 730495, 5123884, 46.2294, -0.0108355, 150),
('79244', 'Saint-Cyr-la-Lande', '30T', 717025, 5214930, 47.0522, -0.1425, 50),
('79246', 'Sainte-Eanne', '30T', 718663, 5141621, 46.3928, -0.155828, 120),
('79247', 'Saint-Étienne-la-Cigogne', '30T', 692959, 5109949, 46.1158, -0.502784, 55),
('79249', 'Saint-Gelais', '30T', 700774, 5139489, 46.3792, -0.38917, 50),
('79250', 'Sainte-Gemme', '30T', 706599, 5197624, 46.9, -0.287497, 128),
('79251', 'Saint-Génard', '30T', 721175, 5118287, 46.1822, -0.134164, 106),
('79252', 'Saint-Généroux', '30T', 718258, 5196246, 46.8839, -0.135273, 95),
('79253', 'Saint-Georges-de-Noisné', '30T', 710500, 5152549, 46.4936, -0.25695, 192),
('79254', 'Saint-Georges-de-Rex', '30T', 680769, 5127711, 46.2789, -0.653613, 20),
('79255', 'Saint-Germain-de-Longue-Chaume', '30T', 702801, 5177130, 46.7169, -0.346389, 210),
('79256', 'Saint-Germier', '30T', 727511, 5149734, 46.4628, -0.0369429, 160),
('79257', 'Saint-Hilaire-la-Palud', '30T', 676388, 5125914, 46.2639, -0.711105, 8),
('79258', 'Saint-Jacques-de-Thouars', '30T', 711342, 5205423, 46.9686, -0.221673, 90),
('79259', 'Saint-Jean-de-Thouars', '30T', 712017, 5204891, 46.9636, -0.213058, 103),
('79260', 'Saint-Jouin-de-Marnes', '30T', 724616, 5196234, 46.8817, -0.051939, 90),
('79261', 'Saint-Jouin-de-Milly', '30T', 681703, 5180564, 46.7539, -0.620837, 168),
('79263', 'Saint-Laurs', '30T', 686055, 5155086, 46.5236, -0.57417, 100),
('79264', 'Saint-Léger-de-la-Martinière', '30T', 721867, 5123473, 46.2286, -0.122775, 146),
('79265', 'Saint-Léger-de-Montbrun', '30T', 717908, 5209276, 47.0011, -0.133612, 102),
('79267', 'Saint-Lin', '30T', 711583, 5156388, 46.5278, -0.241107, 183),
('79268', 'Saint-Loup-Lamairé', '30T', 716250, 5185541, 46.7883, -0.166662, 80),
('79269', 'Saint-Maixent-de-Beugné', '30T', 683374, 5152780, 46.5036, -0.610004, 90),
('79270', 'Saint-Maixent-l''École', '30T', 715000, 5143622, 46.4119, -0.202495, 60),
('79271', 'Saint-Marc-la-Lande', '30T', 701026, 5155101, 46.5194, -0.379169, 169),
('79273', 'Saint-Martin-de-Bernegoue', '30T', 704418, 5123915, 46.2381, -0.348609, 70),
('79274', 'Saint-Martin-de-Mâcon', '30T', 719251, 5210716, 47.0136, -0.115272, 55),
('79276', 'Saint-Martin-de-Saint-Maixent', '30T', 715751, 5141115, 46.3892, -0.193892, 94),
('79277', 'Saint-Martin-de-Sanzay', '30T', 712580, 5218138, 47.0825, -0.199442, 38),
('79278', 'Saint-Martin-du-Fouilloux', '30T', 720665, 5163512, 46.5889, -0.119444, 204),
('79279', 'Saint-Martin-lès-Melle', '30T', 718662, 5122523, 46.2211, -0.164726, 110),
('79280', 'Saint-Maurice-la-Fougereuse', '30T', 689329, 5211882, 47.0333, -0.508062, 130),
('79281', 'Saint-Maxire', '30T', 693807, 5141395, 46.3983, -0.478888, 30),
('79282', 'Saint-Médard', '30T', 709931, 5121321, 46.2131, -0.278338, 70),
('79283', 'Sainte-Néomaye', '30T', 710800, 5138994, 46.3717, -0.259165, 80),
('79284', 'Sainte-Ouenne', '30T', 695962, 5146809, 46.4464, -0.448612, 80),
('79285', 'Saint-Pardoux', '30T', 706348, 5161028, 46.5711, -0.307226, 200),
('79286', 'Saint-Paul-en-Gâtine', '30T', 682404, 5167239, 46.6339, -0.616945, 190),
('79289', 'Saint-Pierre-des-Échaubrognes', '30T', 671510, 5206491, 46.9897, -0.744442, 150),
('79290', 'Saint-Pompain', '30T', 684266, 5145887, 46.4414, -0.601115, 60),
('79292', 'Sainte-Radegonde', '30T', 709295, 5207112, 46.9844, -0.247772, 80),
('79293', 'Saint-Rémy', '30T', 690274, 5138163, 46.3703, -0.526116, 71),
('79294', 'Saint-Romans-des-Champs', '30T', 704737, 5120156, 46.2042, -0.346106, 65),
('79295', 'Saint-Romans-lès-Melle', '30T', 716782, 5121096, 46.2089, -0.189728, 100),
('79297', 'Sainte-Soline', '31T', 271743, 5125810, 46.2475, 0.0388875, 125),
('79298', 'Saint-Symphorien', '30T', 693384, 5126429, 46.2639, -0.490551, 15),
('79299', 'Saint-Varent', '30T', 710743, 5196625, 46.8897, -0.233616, 100),
('79300', 'Sainte-Verge', '30T', 712093, 5209900, 47.0086, -0.209717, 66),
('79301', 'Saint-Vincent-la-Châtre', '30T', 728534, 5122976, 46.2219, -0.0366715, 171),
('79302', 'Saivres', '30T', 712357, 5145847, 46.4328, -0.235833, 110),
('79303', 'Salles', '30T', 723110, 5141041, 46.3861, -0.098337, 90),
('79304', 'Sansais', '30T', 686094, 5127283, 46.2736, -0.584725, 20),
('79306', 'Saurais', '30T', 718534, 5167050, 46.6214, -0.145555, 177),
('79307', 'Sauzé-Vaussais', '31T', 276421, 5112997, 46.1339, 0.105551, 135),
('79308', 'Sciecq', '30T', 694369, 5138509, 46.3722, -0.472783, 40),
('79309', 'Scillé', '30T', 687155, 5163647, 46.6003, -0.556386, 190),
('79310', 'Secondigné-sur-Belle', '30T', 708554, 5115774, 46.1636, -0.298616, 45),
('79311', 'Secondigny', '30T', 697646, 5165186, 46.6111, -0.418889, 180),
('79312', 'Séligné', '30T', 709913, 5113719, 46.1447, -0.281943, 47),
('79313', 'Sepvret', '30T', 724321, 5130238, 46.2886, -0.0877718, 165),
('79314', 'Sompt', '30T', 723714, 5115752, 46.1586, -0.102506, 120),
('79316', 'Soudan', '30T', 721940, 5144984, 46.4219, -0.111662, 150),
('79318', 'Soutiers', '30T', 708456, 5161100, 46.5711, -0.279717, 180),
('79319', 'Souvigné', '30T', 716412, 5139377, 46.3733, -0.186109, 130),
('79320', 'Surin', '30T', 694739, 5148315, 46.4603, -0.46389, 90),
('79321', 'Taizé', '30T', 719654, 5200902, 46.9253, -0.114727, 82),
('79322', 'Le Tallud', '30T', 706848, 5167596, 46.63, -0.297773, 150),
('79325', 'Tessonnière', '30T', 714279, 5188406, 46.8147, -0.191113, 130),
('79326', 'Thénezay', '30T', 727157, 5178372, 46.7203, -0.0274964, 150),
('79327', 'Thorigné', '30T', 711685, 5130126, 46.2917, -0.251671, 100),
('79328', 'Thorigny-sur-le-Mignon', '30T', 688948, 5113933, 46.1528, -0.553058, 33),
('79329', 'Thouars', '30T', 711735, 5206889, 46.9817, -0.215828, 90),
('79330', 'Tillou', '30T', 722330, 5114837, 46.1508, -0.120837, 110),
('79331', 'Tourtenay', '30T', 719113, 5213863, 47.0419, -0.115561, 70),
('79332', 'Trayes', '30T', 692823, 5173496, 46.6872, -0.478339, 183),
('79333', 'Ulcot', '30T', 697882, 5211357, 47.0261, -0.395834, 105),
('79334', 'Usseau', '30T', 686970, 5116128, 46.1731, -0.577784, 25),
('79335', 'Vallans', '30T', 688950, 5120822, 46.2147, -0.55028, 30),
('79336', 'Vançais', '31T', 273096, 5131631, 46.3003, 0.053611, 126),
('79337', 'Le Vanneau-Irleau', '30T', 682169, 5129606, 46.2956, -0.634723, 16),
('79338', 'Vanzay', '31T', 276779, 5123985, 46.2328, 0.104996, 132),
('79339', 'Vasles', '30T', 727931, 5162391, 46.5764, -0.0252733, 160),
('79340', 'Vausseroux', '30T', 719735, 5159213, 46.5506, -0.133606, 180),
('79341', 'Vautebis', '30T', 718474, 5157529, 46.5358, -0.150828, 180),
('79342', 'Vernoux-en-Gâtine', '30T', 690372, 5167640, 46.6353, -0.512779, 200),
('79343', 'Vernoux-sur-Boutonne', '30T', 712873, 5115675, 46.1614, -0.242782, 54),
('79345', 'Verruyes', '30T', 707871, 5155178, 46.5181, -0.289994, 190),
('79346', 'Le Vert', '30T', 701388, 5107810, 46.0942, -0.394717, 40),
('79347', 'Viennay', '30T', 710909, 5174411, 46.69, -0.241667, 155),
('79348', 'Villefollet', '30T', 711404, 5111576, 46.125, -0.263614, 50),
('79349', 'Villemain', '30T', 725466, 5100766, 46.0233, -0.0869503, 110),
('79350', 'Villiers-en-Bois', '30T', 700255, 5113550, 46.1461, -0.406938, 80),
('79351', 'Villiers-en-Plaine', '30T', 689246, 5142333, 46.4081, -0.537783, 40),
('79352', 'Villiers-sur-Chizé', '30T', 708452, 5108664, 46.0997, -0.303059, 60),
('79353', 'Vitré', '30T', 715848, 5129314, 46.2831, -0.198059, 136),
('79354', 'Vouhé', '30T', 711822, 5158683, 46.5483, -0.236947, 225),
('79355', 'Vouillé', '30T', 702610, 5132506, 46.3158, -0.368337, 52),
('79356', 'Voultegon', '30T', 688927, 5200592, 46.9319, -0.518053, 118),
('79357', 'Xaintray', '30T', 693430, 5151857, 46.4925, -0.47945, 101),
('80001', 'Abbeville', '31T', 416793, 5551139, 50.1067, 1.83639, 10),
('80002', 'Ablaincourt-Pressoir', '31T', 487257, 5521042, 49.8417, 2.82277, 86),
('80003', 'Acheux-en-Amiénois', '31T', 466426, 5546642, 50.0711, 2.53083, 140),
('80004', 'Acheux-en-Vimeu', '31T', 405326, 5546510, 50.0633, 1.67722, 92),
('80005', 'Agenville', '31T', 435662, 5557365, 50.165, 2.09917, 125),
('80006', 'Agenvillers', '31T', 422906, 5558986, 50.1781, 1.92027, 75),
('80008', 'Aigneville', '31T', 401090, 5543251, 50.0333, 1.61889, 115),
('80009', 'Ailly-le-Haut-Clocher', '31T', 428213, 5547946, 50.0794, 1.99666, 108),
('80010', 'Ailly-sur-Noye', '31T', 454163, 5511832, 49.7572, 2.36361, 70),
('80011', 'Ailly-sur-Somme', '31T', 442499, 5530754, 49.9264, 2.19888, 40),
('80013', 'Airaines', '31T', 424235, 5535120, 49.9636, 1.94361, 30),
('80014', 'Aizecourt-le-Bas', '31T', 502390, 5536624, 49.9819, 3.03334, 100);
INSERT INTO `ods_communes` (`oc_code_insee`, `oc_nom`, `oc_secteur`, `oc_x_utm`, `oc_y_utm`, `oc_latitude`, `oc_longitude`, `oc_altitude`) VALUES
('80015', 'Aizecourt-le-Haut', '31T', 498825, 5534677, 49.9644, 2.98362, 120),
('80016', 'Albert', '31T', 474897, 5538720, 50.0003, 2.64973, 57),
('80017', 'Allaines', '31T', 496015, 5534493, 49.9628, 2.94444, 60),
('80018', 'Allenay', '31T', 392443, 5549689, 50.0897, 1.49638, 93),
('80019', 'Allery', '31T', 421023, 5534857, 49.9608, 1.89888, 40),
('80020', 'Allonville', '31T', 454356, 5532246, 49.9408, 2.36389, 100),
('80021', 'Amiens', '31T', 449245, 5527134, 49.8944, 2.29334, 35),
('80022', 'Andainville', '31T', 412851, 5527354, 49.8922, 1.78667, 160),
('80023', 'Andechy', '31T', 479054, 5507139, 49.7164, 2.70944, 99),
('80025', 'Argoules', '31T', 417122, 5577299, 50.3419, 1.83527, 20),
('80026', 'Arguel', '31T', 414163, 5524521, 49.8669, 1.80556, 150),
('80027', 'Armancourt', '31T', 479279, 5502969, 49.6789, 2.71278, 95),
('80028', 'Arquèves', '31T', 461836, 5546890, 50.0731, 2.46667, 135),
('80029', 'Arrest', '31T', 401187, 5553846, 50.1286, 1.61751, 20),
('80030', 'Arry', '31T', 408837, 5570330, 50.2781, 1.72055, 12),
('80031', 'Arvillers', '31T', 474485, 5510556, 49.7469, 2.64583, 105),
('80032', 'Assainvillers', '31T', 471891, 5496578, 49.6211, 2.61083, 89),
('80033', 'Assevillers', '31T', 488150, 5527216, 49.8972, 2.835, 80),
('80034', 'Athies', '31T', 498662, 5522478, 49.8547, 2.98139, 70),
('80035', 'Aubercourt', '31T', 467595, 5519611, 49.8281, 2.54944, 50),
('80036', 'Aubigny', '31T', 462837, 5527888, 49.9022, 2.4825, 35),
('80037', 'Aubvillers', '31T', 462734, 5507072, 49.715, 2.48306, 108),
('80038', 'Auchonvillers', '31T', 473449, 5547746, 50.0814, 2.6289, 145),
('80039', 'Ault', '31T', 389012, 5550995, 50.1008, 1.44806, 33),
('80040', 'Aumâtre', '31T', 411941, 5530303, 49.9186, 1.77333, 135),
('80041', 'Aumont', '31T', 423054, 5526364, 49.8847, 1.92889, 120),
('80042', 'Autheux', '31T', 444920, 5554759, 50.1425, 2.22916, 148),
('80043', 'Authie', '31T', 463322, 5552006, 50.1192, 2.48695, 85),
('80044', 'Authieule', '31T', 455103, 5554725, 50.1431, 2.37167, 62),
('80045', 'Authuille', '31T', 476152, 5543409, 50.0425, 2.66694, 75),
('80046', 'Avelesges', '31T', 423742, 5529844, 49.9161, 1.93778, 50),
('80047', 'Aveluy', '31T', 475565, 5541157, 50.0222, 2.65889, 75),
('80048', 'Avesnes-Chaussoy', '31T', 419049, 5528122, 49.9, 1.87278, 99),
('80049', 'Ayencourt', '31T', 467782, 5497188, 49.6264, 2.5539, 60),
('80050', 'Bacouel-sur-Selle', '31T', 444164, 5520173, 49.8314, 2.22361, 38),
('80051', 'Bailleul', '31T', 417632, 5542384, 50.0281, 1.85, 30),
('80052', 'Baizieux', '31T', 465635, 5537999, 49.9933, 2.52056, 125),
('80053', 'Balâtre', '31T', 490327, 5506458, 49.7106, 2.86583, 90),
('80054', 'Barleux', '31T', 492299, 5527271, 49.8978, 2.89277, 55),
('80055', 'Barly', '31T', 447803, 5561278, 50.2014, 2.26861, 77),
('80056', 'Bavelincourt', '31T', 460831, 5537322, 49.9869, 2.45361, 55),
('80057', 'Bayencourt', '31T', 469327, 5553297, 50.1311, 2.57084, 145),
('80058', 'Bayonvillers', '31T', 473188, 5523317, 49.8617, 2.62695, 92),
('80059', 'Bazentin', '31T', 482870, 5541994, 50.03, 2.76083, 145),
('80060', 'Béalcourt', '31T', 441483, 5561684, 50.2044, 2.18, 40),
('80061', 'Beaucamps-le-Jeune', '31T', 411815, 5518937, 49.8164, 1.77417, 200),
('80062', 'Beaucamps-le-Vieux', '31T', 412345, 5522017, 49.8442, 1.78083, 181),
('80063', 'Beauchamps', '31T', 393317, 5541639, 50.0175, 1.51084, 20),
('80064', 'Beaucourt-en-Santerre', '31T', 470151, 5515766, 49.7936, 2.58528, 90),
('80065', 'Beaucourt-sur-l''Ancre', '31T', 477384, 5547728, 50.0814, 2.6839, 100),
('80066', 'Beaucourt-sur-l''Hallue', '31T', 460195, 5537481, 49.9883, 2.44472, 65),
('80067', 'Beaufort-en-Santerre', '31T', 476220, 5513791, 49.7761, 2.66972, 96),
('80068', 'Beaumetz', '31T', 437059, 5554753, 50.1417, 2.11916, 130),
('80069', 'Beaumont-Hamel', '31T', 475199, 5548046, 50.0842, 2.65334, 100),
('80070', 'Beauquesne', '31T', 456498, 5548073, 50.0833, 2.39195, 140),
('80071', 'Beauval', '31T', 452171, 5550921, 50.1086, 2.33111, 112),
('80073', 'Bécordel-Bécourt', '31T', 477520, 5537535, 49.9897, 2.68639, 60),
('80074', 'Becquigny', '31T', 472736, 5504974, 49.6967, 2.62195, 59),
('80076', 'Béhen', '31T', 410782, 5545737, 50.0572, 1.75361, 105),
('80077', 'Béhencourt', '31T', 460603, 5535996, 49.975, 2.45056, 45),
('80078', 'Bellancourt', '31T', 422171, 5549390, 50.0917, 1.91194, 75),
('80079', 'Belleuse', '31T', 436390, 5506329, 49.7061, 2.11778, 181),
('80080', 'Belloy-en-Santerre', '31T', 489723, 5525515, 49.8819, 2.85695, 76),
('80081', 'Belloy-Saint-Léonard', '31T', 421312, 5528737, 49.9058, 1.90416, 100),
('80082', 'Belloy-sur-Somme', '31T', 437984, 5535190, 49.9658, 2.13527, 40),
('80083', 'Bergicourt', '31T', 429842, 5511136, 49.7486, 2.02612, 90),
('80084', 'Bermesnil', '31T', 409230, 5528031, 49.8978, 1.73611, 179),
('80085', 'Bernâtre', '31T', 435033, 5561110, 50.1986, 2.08973, 69),
('80086', 'Bernaville', '31T', 440283, 5553697, 50.1325, 2.16444, 148),
('80087', 'Bernay-en-Ponthieu', '31T', 410502, 5569251, 50.2686, 1.74417, 15),
('80088', 'Bernes', '31T', 507041, 5528505, 49.9089, 3.09806, 107),
('80089', 'Berneuil', '31T', 440654, 5549523, 50.095, 2.17028, 137),
('80090', 'Berny-en-Santerre', '31T', 489220, 5523693, 49.8656, 2.85, 81),
('80092', 'Bertangles', '31T', 449683, 5535593, 49.9706, 2.29833, 95),
('80093', 'Berteaucourt-les-Dames', '31T', 439679, 5544129, 50.0464, 2.1575, 35),
('80094', 'Berteaucourt-lès-Thennes', '31T', 461410, 5517984, 49.8131, 2.46361, 40),
('80095', 'Bertrancourt', '31T', 467931, 5548981, 50.0922, 2.55167, 146),
('80096', 'Béthencourt-sur-Mer', '31T', 392793, 5548292, 50.0772, 1.50167, 100),
('80097', 'Béthencourt-sur-Somme', '31T', 497341, 5515777, 49.7944, 2.96306, 60),
('80098', 'Bettembos', '31T', 419428, 5517428, 49.8039, 1.88028, 183),
('80099', 'Bettencourt-Rivière', '31T', 426835, 5538698, 49.9961, 1.97917, 10),
('80100', 'Bettencourt-Saint-Ouen', '31T', 436270, 5541790, 50.025, 2.11028, 37),
('80101', 'Beuvraignes', '31T', 483156, 5499465, 49.6475, 2.76667, 90),
('80102', 'Biaches', '31T', 493520, 5530234, 49.9244, 2.90972, 51),
('80103', 'Biarre', '31T', 491371, 5507877, 49.7233, 2.88028, 88),
('80104', 'Biencourt', '31T', 406369, 5536730, 49.9756, 1.69417, 116),
('80105', 'Billancourt', '31T', 492354, 5509389, 49.7369, 2.89389, 87),
('80106', 'Blangy-sous-Poix', '31T', 428306, 5513102, 49.7661, 2.00444, 100),
('80107', 'Blangy-Tronville', '31T', 458609, 5525448, 49.88, 2.42389, 35),
('80108', 'Boisbergues', '31T', 444757, 5556244, 50.1558, 2.22667, 67),
('80109', 'Le Boisle', '31T', 427650, 5569360, 50.2719, 1.98472, 20),
('80110', 'Boismont', '31T', 406000, 5556539, 50.1536, 1.68416, 21),
('80112', 'Bonnay', '31T', 465035, 5531518, 49.935, 2.51277, 35),
('80113', 'Bonneville', '31T', 446222, 5547982, 50.0817, 2.24834, 145),
('80114', 'Bosquel', '31T', 443599, 5509987, 49.7397, 2.21723, 130),
('80115', 'Bouchavesnes-Bergen', '31T', 494364, 5536997, 49.9853, 2.92138, 100),
('80116', 'Bouchoir', '31T', 476406, 5510640, 49.7478, 2.67249, 105),
('80117', 'Bouchon', '31T', 430632, 5542848, 50.0339, 2.03139, 24),
('80118', 'Boufflers', '31T', 429797, 5568528, 50.2647, 2.015, 20),
('80119', 'Bougainville', '31T', 431234, 5524616, 49.87, 2.04305, 110),
('80120', 'Bouillancourt-en-Séry', '31T', 401818, 5535174, 49.9608, 1.63112, 147),
('80121', 'Bouillancourt-la-Bataille', '31T', 466183, 5504733, 49.6942, 2.5311, 50),
('80122', 'Bouquemaison', '31T', 452710, 5562375, 50.2117, 2.33723, 140),
('80123', 'Bourdon', '31T', 433869, 5537556, 49.9867, 2.0775, 24),
('80124', 'Bourseville', '31T', 394504, 5551347, 50.105, 1.52473, 63),
('80125', 'Boussicourt', '31T', 469455, 5505826, 49.7042, 2.57639, 50),
('80126', 'Bouttencourt', '31T', 402225, 5532386, 49.9358, 1.6375, 71),
('80127', 'Bouvaincourt-sur-Bresle', '31T', 391932, 5543088, 50.0303, 1.4911, 20),
('80128', 'Bouvincourt-en-Vermandois', '31T', 503033, 5526741, 49.8931, 3.04223, 95),
('80129', 'Bouzincourt', '31T', 472045, 5541669, 50.0267, 2.60972, 100),
('80130', 'Bovelles', '31T', 438676, 5525947, 49.8828, 2.14639, 118),
('80131', 'Boves', '31T', 456024, 5521731, 49.8464, 2.38833, 43),
('80132', 'Braches', '31T', 464329, 5509069, 49.7331, 2.505, 50),
('80133', 'Brailly-Cornehotte', '31T', 425964, 5563483, 50.2189, 1.96222, 58),
('80134', 'Brassy', '31T', 431317, 5509109, 49.7306, 2.04695, 180),
('80135', 'Bray-lès-Mareuil', '31T', 418052, 5545157, 50.0531, 1.85527, 10),
('80136', 'Bray-sur-Somme', '31T', 479689, 5531936, 49.9394, 2.71695, 55),
('80137', 'Breilly', '31T', 441113, 5531603, 49.9339, 2.17945, 35),
('80138', 'Bresle', '31T', 468237, 5536934, 49.9839, 2.55695, 70),
('80139', 'Breuil', '31T', 496778, 5509539, 49.7383, 2.95528, 60),
('80140', 'Brévillers', '31T', 455725, 5562658, 50.2144, 2.37945, 155),
('80141', 'Brie', '31T', 495150, 5524766, 49.8753, 2.9325, 55),
('80142', 'Briquemesnil-Floxicourt', '31T', 434447, 5526151, 49.8842, 2.0875, 115),
('80143', 'Brocourt', '31T', 415474, 5522832, 49.8519, 1.82417, 108),
('80144', 'Brouchy', '31T', 507228, 5507381, 49.7189, 3.10027, 68),
('80145', 'Brucamps', '31T', 432299, 5547244, 50.0736, 2.05389, 68),
('80146', 'Brutelles', '31T', 394643, 5555392, 50.1414, 1.52555, 10),
('80147', 'Buigny-l''Abbé', '31T', 424090, 5550134, 50.0986, 1.93861, 81),
('80148', 'Buigny-lès-Gamaches', '31T', 397450, 5542330, 50.0244, 1.56833, 116),
('80149', 'Buigny-Saint-Maclou', '31T', 415248, 5556446, 50.1542, 1.81361, 50),
('80150', 'Buire-Courcelles', '31T', 501037, 5530632, 49.9281, 3.01445, 75),
('80151', 'Buire-sur-l''Ancre', '31T', 470815, 5534942, 49.9661, 2.59306, 40),
('80152', 'Bus-la-Mésière', '31T', 479442, 5498367, 49.6375, 2.71528, 100),
('80153', 'Bus-lès-Artois', '31T', 467202, 5550005, 50.1014, 2.54139, 130),
('80154', 'Bussu', '31T', 498386, 5532639, 49.9461, 2.9775, 75),
('80155', 'Bussus-Bussuel', '31T', 428261, 5551467, 50.1111, 1.99667, 54),
('80156', 'Bussy-lès-Daours', '31T', 459293, 5528809, 49.9103, 2.43305, 40),
('80157', 'Bussy-lès-Poix', '31T', 429544, 5519016, 49.8194, 2.02055, 140),
('80158', 'Buverchy', '31T', 497818, 5508890, 49.7325, 2.96972, 60),
('80159', 'Cachy', '31T', 462660, 5522392, 49.8528, 2.48056, 101),
('80160', 'Cagny', '31T', 452964, 5523548, 49.8625, 2.34555, 31),
('80161', 'Cahon', '31T', 408734, 5552722, 50.1197, 1.72334, 15),
('80162', 'Caix', '31T', 474521, 5518246, 49.8161, 2.64583, 63),
('80163', 'Cambron', '31T', 412052, 5551586, 50.11, 1.77, 7),
('80164', 'Camon', '31T', 454641, 5528167, 49.9042, 2.36834, 35),
('80165', 'Camps-en-Amiénois', '31T', 426040, 5525828, 49.8803, 1.97055, 120),
('80166', 'Canaples', '31T', 444026, 5545131, 50.0558, 2.21806, 55),
('80167', 'Canchy', '31T', 420004, 5559925, 50.1861, 1.87944, 50),
('80168', 'Candas', '31T', 446966, 5550846, 50.1075, 2.25834, 150),
('80169', 'Cannessières', '31T', 411458, 5532473, 49.9381, 1.76611, 119),
('80170', 'Cantigny', '31T', 463316, 5501416, 49.6642, 2.49166, 100),
('80171', 'Caours', '31T', 420209, 5553713, 50.1303, 1.88361, 15),
('80172', 'Cappy', '31T', 482555, 5530536, 49.9269, 2.75695, 45),
('80173', 'Cardonnette', '31T', 454007, 5533361, 49.9508, 2.35889, 90),
('80174', 'Le Cardonnois', '31T', 462547, 5497469, 49.6286, 2.48139, 109),
('80175', 'Carnoy', '31T', 482516, 5537022, 49.9853, 2.75611, 95),
('80176', 'Carrépuis', '31T', 487182, 5505971, 49.7061, 2.82223, 94),
('80177', 'Cartigny', '31T', 500678, 5529118, 49.9144, 3.00944, 75),
('80179', 'Caulières', '31T', 420089, 5514854, 49.7808, 1.89, 185),
('80180', 'Cavillon', '31T', 434237, 5530169, 49.9203, 2.08389, 110),
('80181', 'Cayeux-en-Santerre', '31T', 471207, 5518849, 49.8214, 2.59972, 52),
('80182', 'Cayeux-sur-Mer', '31T', 392589, 5559851, 50.1811, 1.49556, 5),
('80183', 'Cerisy-Buleux', '31T', 409714, 5536642, 49.9753, 1.74083, 100),
('80184', 'Cerisy', '31T', 474030, 5528347, 49.9069, 2.63833, 40),
('80185', 'Champien', '31T', 489743, 5504792, 49.6956, 2.85778, 95),
('80186', 'Chaulnes', '31T', 485673, 5518513, 49.8189, 2.80084, 100),
('80187', 'La Chaussée-Tirancourt', '31T', 439044, 5533788, 49.9533, 2.15027, 20),
('80188', 'Chaussoy-Epagny', '31T', 451893, 5508548, 49.7275, 2.33251, 100),
('80189', 'La Chavatte', '31T', 483174, 5511695, 49.7575, 2.76639, 87),
('80190', 'Chépy', '31T', 403335, 5546361, 50.0617, 1.64944, 95),
('80191', 'Chilly', '31T', 483126, 5515772, 49.7942, 2.76555, 83),
('80192', 'Chipilly', '31T', 474849, 5528560, 49.9089, 2.64972, 50),
('80193', 'Chirmont', '31T', 455743, 5506908, 49.7131, 2.38611, 140),
('80194', 'Chuignes', '31T', 482286, 5527572, 49.9003, 2.75334, 50),
('80195', 'Chuignolles', '31T', 480191, 5527580, 49.9003, 2.72417, 65),
('80196', 'Citerne', '31T', 415781, 5537285, 49.9819, 1.82528, 100),
('80197', 'Cizancourt', '31T', 494428, 5521493, 49.8458, 2.9225, 55),
('80198', 'Clairy-Saulchoix', '31T', 441019, 5522986, 49.8564, 2.17945, 118),
('80199', 'Cléry-sur-Somme', '31T', 491890, 5533912, 49.9575, 2.88694, 60),
('80200', 'Cocquerel', '31T', 424799, 5544070, 50.0442, 1.94972, 15),
('80201', 'Coigneux', '31T', 467837, 5553151, 50.1297, 2.55, 105),
('80202', 'Coisy', '31T', 451725, 5534431, 49.9603, 2.32695, 110),
('80203', 'Colincamps', '31T', 471273, 5549826, 50.1, 2.59833, 150),
('80204', 'Combles', '31T', 490028, 5539381, 50.0067, 2.86084, 100),
('80205', 'Condé-Folie', '31T', 429264, 5540179, 50.0097, 2.01278, 10),
('80206', 'Contalmaison', '31T', 480579, 5541167, 50.0225, 2.72888, 119),
('80207', 'Contay', '31T', 462418, 5539256, 50.0044, 2.47555, 60),
('80208', 'Conteville', '31T', 433696, 5558872, 50.1783, 2.07139, 119),
('80209', 'Contoire', '31T', 468025, 5507841, 49.7222, 2.55639, 60),
('80210', 'Contre', '31T', 435124, 5511039, 49.7483, 2.09944, 80),
('80211', 'Conty', '31T', 438857, 5510223, 49.7414, 2.15139, 60),
('80212', 'Corbie', '31T', 464837, 5528647, 49.9092, 2.51028, 35),
('80213', 'Cottenchy', '31T', 455591, 5517565, 49.8089, 2.38278, 50),
('80214', 'Coullemelle', '31T', 458470, 5502038, 49.6694, 2.42445, 130),
('80215', 'Coulonvillers', '31T', 428981, 5554855, 50.1417, 2.00611, 108),
('80216', 'Courcelette', '31T', 481807, 5545148, 50.0583, 2.74584, 130),
('80217', 'Courcelles-au-Bois', '31T', 470123, 5550203, 50.1033, 2.58222, 150),
('80218', 'Courcelles-sous-Moyencourt', '31T', 431333, 5518283, 49.8131, 2.04555, 130),
('80219', 'Courcelles-sous-Thoix', '31T', 433827, 5508090, 49.7217, 2.08194, 86),
('80220', 'Courtemanche', '31T', 466762, 5501116, 49.6617, 2.53944, 60),
('80221', 'Cramont', '31T', 432345, 5555583, 50.1486, 2.05305, 120),
('80222', 'Crécy-en-Ponthieu', '31T', 420334, 5567365, 50.2531, 1.8825, 35),
('80223', 'Crémery', '31T', 487291, 5510016, 49.7425, 2.82361, 94),
('80224', 'Cressy-Omencourt', '31T', 493613, 5507781, 49.7225, 2.91139, 80),
('80225', 'Creuse', '31T', 439959, 5521114, 49.8394, 2.165, 80),
('80226', 'Croix-Moligneaux', '31T', 500220, 5518216, 49.8164, 3.00306, 81),
('80227', 'Croixrault', '31T', 427564, 5515954, 49.7917, 1.9936, 180),
('80228', 'Le Crotoy', '31T', 402038, 5563438, 50.215, 1.62694, 5),
('80229', 'Crouy-Saint-Pierre', '31T', 434642, 5535570, 49.9689, 2.08861, 20),
('80230', 'Curchy', '31T', 489840, 5513902, 49.7775, 2.85888, 80),
('80231', 'Curlu', '31T', 486772, 5534848, 49.9658, 2.81555, 60),
('80232', 'Damery', '31T', 481423, 5508891, 49.7322, 2.74222, 93),
('80233', 'Dancourt-Popincourt', '31T', 480737, 5501543, 49.6661, 2.73306, 90),
('80234', 'Daours', '31T', 460404, 5528029, 49.9033, 2.4486, 35),
('80235', 'Dargnies', '31T', 394482, 5544180, 50.0406, 1.5264, 110),
('80236', 'Davenescourt', '31T', 471001, 5506404, 49.7094, 2.59778, 58),
('80237', 'Démuin', '31T', 466590, 5518598, 49.8189, 2.53556, 51),
('80238', 'Dernancourt', '31T', 473589, 5535947, 49.9753, 2.63166, 45),
('80239', 'Devise', '31T', 500379, 5522787, 49.8575, 3.00527, 65),
('80240', 'Doingt', '31T', 497707, 5530169, 49.9239, 2.96806, 57),
('80241', 'Domart-en-Ponthieu', '31T', 437349, 5547275, 50.0744, 2.12445, 75),
('80242', 'Domart-sur-la-Luce', '31T', 462915, 5518869, 49.8211, 2.48445, 50),
('80243', 'Domesmont', '31T', 438958, 5552415, 50.1208, 2.14611, 143),
('80244', 'Dominois', '31T', 418176, 5576387, 50.3339, 1.85028, 15),
('80245', 'Domléger-Longvillers', '31T', 434484, 5556761, 50.1594, 2.08278, 137),
('80246', 'Dommartin', '31T', 456183, 5516695, 49.8011, 2.39111, 50),
('80247', 'Dompierre-Becquincourt', '31T', 486157, 5528240, 49.9064, 2.80722, 80),
('80248', 'Dompierre-sur-Authie', '31T', 422971, 5573010, 50.3042, 1.91833, 20),
('80249', 'Domqueur', '31T', 431880, 5551790, 50.1144, 2.04722, 90),
('80250', 'Domvast', '31T', 423001, 5561394, 50.1997, 1.92111, 55),
('80251', 'Doudelainville', '31T', 412073, 5539568, 50.0019, 1.77305, 100),
('80252', 'Douilly', '31T', 504638, 5515779, 49.7944, 3.06444, 75),
('80253', 'Doullens', '31T', 453051, 5556164, 50.1558, 2.34277, 65),
('80256', 'Dreuil-lès-Amiens', '31T', 444819, 5529432, 49.9147, 2.23139, 25),
('80258', 'Driencourt', '31T', 500677, 5534029, 49.9586, 3.00944, 125),
('80259', 'Dromesnil', '31T', 418634, 5525780, 49.8789, 1.8675, 120),
('80260', 'Drucat', '31T', 419433, 5554929, 50.1411, 1.8725, 24),
('80261', 'Dury', '31T', 447556, 5521684, 49.8453, 2.27056, 105),
('80262', 'Eaucourt-sur-Somme', '31T', 420279, 5546452, 50.065, 1.88611, 22),
('80263', 'L''Échelle-Saint-Aurin', '31T', 479306, 5504760, 49.695, 2.71306, 70),
('80264', 'Éclusier-Vaux', '31T', 484731, 5531518, 49.9358, 2.78723, 45),
('80265', 'Embreville', '31T', 395891, 5542978, 50.03, 1.54639, 108),
('80266', 'Englebelmer', '31T', 471885, 5545283, 50.0592, 2.60722, 139),
('80267', 'Ennemain', '31T', 497663, 5521676, 49.8475, 2.96749, 70),
('80268', 'Épagne-Épagnette', '31T', 419494, 5547143, 50.0711, 1.87499, 14),
('80269', 'Épaumesnil', '31T', 417713, 5529470, 49.9119, 1.85389, 120),
('80270', 'Épécamps', '31T', 439504, 5551513, 50.1128, 2.15389, 130),
('80271', 'Épehy', '31T', 509356, 5539102, 50.0042, 3.13056, 130),
('80272', 'Épénancourt', '31T', 495065, 5518960, 49.8231, 2.93139, 55),
('80273', 'Éplessier', '31T', 425172, 5515028, 49.7831, 1.96055, 170),
('80274', 'Eppeville', '31T', 503562, 5510126, 49.7436, 3.04944, 65),
('80275', 'Équancourt', '31T', 501253, 5542862, 50.0381, 3.0175, 100),
('80276', 'Équennes-Éramecourt', '31T', 425076, 5509563, 49.7339, 1.96027, 187),
('80278', 'Erches', '31T', 476294, 5507892, 49.7231, 2.67111, 100),
('80279', 'Ercheu', '31T', 495874, 5505494, 49.7019, 2.94278, 67),
('80280', 'Ercourt', '31T', 408506, 5544076, 50.0419, 1.72222, 75),
('80281', 'Ergnies', '31T', 431124, 5548618, 50.0858, 2.03722, 116),
('80282', 'Érondelle', '31T', 420137, 5544940, 50.0514, 1.88444, 7),
('80283', 'Esclainvillers', '31T', 456344, 5504371, 49.6903, 2.39473, 137),
('80284', 'Esmery-Hallon', '31T', 500921, 5507253, 49.7178, 3.01278, 75),
('80285', 'Essertaux', '31T', 445481, 5510060, 49.7406, 2.24333, 140),
('80288', 'Estrées-Deniécourt', '31T', 487486, 5524840, 49.8758, 2.82584, 80),
('80290', 'Estrées-lès-Crécy', '31T', 423623, 5567440, 50.2542, 1.92861, 75),
('80291', 'Estrées-sur-Noye', '31T', 451631, 5515097, 49.7864, 2.32806, 110),
('80292', 'Étalon', '31T', 489578, 5512575, 49.7656, 2.85528, 80),
('80293', 'Ételfay', '31T', 472536, 5501146, 49.6622, 2.61944, 104),
('80294', 'Éterpigny', '31T', 494553, 5526558, 49.8914, 2.92417, 55),
('80295', 'Étinehem', '31T', 477670, 5530585, 49.9272, 2.68889, 40),
('80296', 'L''Étoile', '31T', 430459, 5541769, 50.0242, 2.02917, 20),
('80297', 'Étréjust', '31T', 420345, 5529400, 49.9117, 1.89056, 61),
('80298', 'Étricourt-Manancourt', '31T', 499105, 5542615, 50.0358, 2.9875, 100),
('80299', 'La Faloise', '31T', 452446, 5505423, 49.6994, 2.34056, 70),
('80300', 'Falvy', '31T', 497023, 5519051, 49.8239, 2.95861, 70),
('80301', 'Famechon', '31T', 431138, 5512355, 49.7597, 2.04389, 80),
('80302', 'Faverolles', '31T', 472830, 5499785, 49.65, 2.62361, 105),
('80303', 'Favières', '31T', 404798, 5565890, 50.2375, 1.665, 4),
('80304', 'Fay', '31T', 486152, 5526079, 49.8869, 2.80722, 76),
('80305', 'Ferrières', '31T', 440982, 5526971, 49.8922, 2.17833, 109),
('80306', 'Fescamps', '31T', 477037, 5498777, 49.6411, 2.68195, 95),
('80307', 'Feuillères', '31T', 489119, 5532804, 49.9475, 2.84834, 50),
('80308', 'Feuquières-en-Vimeu', '31T', 400212, 5546325, 50.0608, 1.60583, 100),
('80310', 'Fienvillers', '31T', 444793, 5552073, 50.1183, 2.22777, 150),
('80311', 'Fignières', '31T', 470284, 5503505, 49.6833, 2.58806, 96),
('80312', 'Fins', '31T', 502845, 5542677, 50.0364, 3.03973, 101),
('80313', 'Flaucourt', '31T', 490288, 5529127, 49.9144, 2.86472, 81),
('80314', 'Flers', '31T', 487093, 5544205, 50.05, 2.81972, 125),
('80315', 'Flers-sur-Noye', '31T', 446052, 5509128, 49.7322, 2.25139, 157),
('80316', 'Flesselles', '31T', 446870, 5539203, 50.0028, 2.25861, 130),
('80317', 'Fleury', '31T', 436775, 5510155, 49.7406, 2.1225, 70),
('80318', 'Flixecourt', '31T', 434242, 5540301, 50.0114, 2.08223, 30),
('80319', 'Fluy', '31T', 435192, 5523332, 49.8589, 2.09834, 128),
('80320', 'Folies', '31T', 476473, 5512122, 49.7611, 2.67333, 98),
('80321', 'Folleville', '31T', 454127, 5502876, 49.6767, 2.36417, 150),
('80322', 'Fonches-Fonchette', '31T', 486780, 5513723, 49.7758, 2.81639, 80),
('80324', 'Fontaine-le-Sec', '31T', 414480, 5533135, 49.9444, 1.80806, 110),
('80325', 'Fontaine-lès-Cappy', '31T', 484220, 5527443, 49.8992, 2.78027, 50),
('80326', 'Fontaine-sous-Montdidier', '31T', 465175, 5500601, 49.6569, 2.5175, 70),
('80327', 'Fontaine-sur-Maye', '31T', 423677, 5565678, 50.2383, 1.92972, 45),
('80328', 'Fontaine-sur-Somme', '31T', 424177, 5542287, 50.0281, 1.94138, 20),
('80329', 'Forceville', '31T', 468030, 5545552, 50.0614, 2.55334, 116),
('80330', 'Forceville-en-Vimeu', '31T', 413897, 5535338, 49.9642, 1.79945, 109),
('80331', 'Forest-l''Abbaye', '31T', 416209, 5562022, 50.2044, 1.82583, 45),
('80332', 'Forest-Montiers', '31T', 410259, 5566598, 50.2447, 1.74139, 20),
('80333', 'Fort-Mahon-Plage', '31T', 397070, 5577095, 50.3369, 1.55361, 12),
('80334', 'Fossemanant', '31T', 442413, 5517041, 49.8031, 2.19973, 58),
('80335', 'Foucaucourt-en-Santerre', '31T', 483873, 5524757, 49.875, 2.77555, 81),
('80336', 'Foucaucourt-Hors-Nesle', '31T', 408605, 5530019, 49.9156, 1.72694, 140),
('80337', 'Fouencamps', '31T', 457423, 5519311, 49.8247, 2.40805, 38),
('80338', 'Fouilloy', '31T', 464432, 5527723, 49.9008, 2.50472, 30),
('80339', 'Fouquescourt', '31T', 482138, 5513150, 49.7706, 2.75194, 94),
('80340', 'Fourcigny', '31T', 415593, 5512514, 49.7592, 1.82806, 210),
('80341', 'Fourdrinoy', '31T', 435828, 5529841, 49.9175, 2.1061, 110),
('80342', 'Framerville-Rainecourt', '31T', 479536, 5523289, 49.8617, 2.71527, 95),
('80343', 'Framicourt', '31T', 405548, 5534242, 49.9531, 1.68333, 137),
('80344', 'Francières', '31T', 424286, 5547166, 50.0719, 1.94194, 63),
('80345', 'Franleu', '31T', 402950, 5550353, 50.0975, 1.64305, 70),
('80346', 'Franqueville', '31T', 435925, 5549547, 50.0947, 2.10417, 65),
('80347', 'Fransart', '31T', 483698, 5512929, 49.7686, 2.77362, 90),
('80348', 'Fransu', '31T', 435090, 5551132, 50.1089, 2.09223, 110),
('80349', 'Fransures', '31T', 444668, 5506887, 49.7119, 2.2325, 150),
('80350', 'Franvillers', '31T', 464740, 5535071, 49.9669, 2.50834, 105),
('80351', 'Fréchencourt', '31T', 459938, 5534981, 49.9658, 2.44139, 55),
('80352', 'Frémontiers', '31T', 433419, 5512326, 49.7597, 2.07556, 80),
('80353', 'Fresnes-Mazancourt', '31T', 490275, 5522209, 49.8522, 2.86472, 80),
('80354', 'Fresnes-Tilloloy', '31T', 411659, 5537412, 49.9825, 1.76777, 100),
('80355', 'Fresneville', '31T', 415760, 5527091, 49.8903, 1.82722, 140),
('80356', 'Fresnoy-Andainville', '31T', 413562, 5529411, 49.9108, 1.79611, 140),
('80357', 'Fresnoy-au-Val', '31T', 432003, 5520714, 49.835, 2.05444, 100),
('80358', 'Fresnoy-en-Chaussée', '31T', 470239, 5513511, 49.7733, 2.58667, 93),
('80359', 'Fresnoy-lès-Roye', '31T', 483928, 5509593, 49.7386, 2.77695, 90),
('80360', 'Fressenneville', '31T', 398218, 5547105, 50.0675, 1.57778, 96),
('80361', 'Frettecuisse', '31T', 414902, 5530873, 49.9242, 1.81444, 112),
('80362', 'Frettemeule', '31T', 402775, 5540686, 50.0106, 1.64306, 80),
('80364', 'Friaucourt', '31T', 391010, 5549564, 50.0883, 1.47639, 94),
('80365', 'Fricamps', '31T', 427865, 5519008, 49.8192, 1.99722, 159),
('80366', 'Fricourt', '31T', 479594, 5538453, 49.9981, 2.71528, 86),
('80367', 'Frise', '31T', 487064, 5532160, 49.9417, 2.81972, 47),
('80368', 'Friville-Escarbotin', '31T', 396054, 5549309, 50.0869, 1.54695, 84),
('80369', 'Frohen-sur-Authie', '31T', 443245, 5561480, 50.2028, 2.20472, 41),
('80371', 'Froyelles', '31T', 423562, 5564568, 50.2283, 1.92833, 55),
('80372', 'Frucourt', '31T', 414750, 5538845, 49.9958, 1.81056, 100),
('80373', 'Gamaches', '31T', 396555, 5538208, 49.9872, 1.55695, 30),
('80374', 'Gapennes', '31T', 425214, 5559447, 50.1825, 1.9525, 76),
('80375', 'Gauville', '31T', 413169, 5514868, 49.78, 1.79389, 210),
('80376', 'Gentelles', '31T', 461096, 5521506, 49.8447, 2.4589, 108),
('80377', 'Gézaincourt', '31T', 451430, 5554603, 50.1417, 2.32028, 63),
('80378', 'Ginchy', '31T', 487862, 5541084, 50.0219, 2.83056, 154),
('80379', 'Glisy', '31T', 456911, 5525245, 49.8781, 2.40028, 50),
('80380', 'Gorenflos', '31T', 431973, 5549719, 50.0958, 2.04889, 100),
('80381', 'Gorges', '31T', 441189, 5551216, 50.1103, 2.1775, 130),
('80383', 'Goyencourt', '31T', 482983, 5508360, 49.7275, 2.76389, 90),
('80384', 'Grandcourt', '31T', 479112, 5547567, 50.08, 2.70806, 80),
('80385', 'Grand-Laviers', '31T', 413262, 5553914, 50.1311, 1.78639, 10),
('80386', 'Gratibus', '31T', 466860, 5503895, 49.6867, 2.54056, 50),
('80387', 'Grattepanche', '31T', 449173, 5515336, 49.7883, 2.29388, 120),
('80388', 'Grébault-Mesnil', '31T', 408552, 5542098, 50.0242, 1.72333, 99),
('80389', 'Grécourt', '31T', 499019, 5508179, 49.7261, 2.98639, 63),
('80390', 'Grivesnes', '31T', 461711, 5504022, 49.6875, 2.46917, 110),
('80391', 'Grivillers', '31T', 478851, 5501056, 49.6617, 2.70695, 100),
('80392', 'Grouches-Luchuel', '31T', 455556, 5559015, 50.1817, 2.3775, 70),
('80393', 'Gruny', '31T', 487048, 5508658, 49.7303, 2.82028, 93),
('80395', 'Guerbigny', '31T', 475523, 5505455, 49.7011, 2.66056, 60),
('80396', 'Gueschart', '31T', 429401, 5565537, 50.2378, 2.01, 89),
('80397', 'Gueudecourt', '31T', 488667, 5545190, 50.0589, 2.84167, 125),
('80399', 'Guignemicourt', '31T', 440896, 5524563, 49.8706, 2.1775, 111),
('80400', 'Guillaucourt', '31T', 473537, 5521277, 49.8433, 2.63195, 87),
('80401', 'Guillemont', '31T', 487303, 5540159, 50.0136, 2.82278, 140),
('80402', 'Guizancourt', '31T', 427762, 5509773, 49.7361, 1.9975, 100),
('80403', 'Guyencourt-sur-Noye', '31T', 454845, 5514483, 49.7811, 2.37277, 50),
('80404', 'Guyencourt-Saulcourt', '31T', 505574, 5538788, 50.0014, 3.07778, 145),
('80405', 'Hailles', '31T', 459585, 5517163, 49.8056, 2.43833, 35),
('80406', 'Hallencourt', '31T', 419601, 5538338, 49.9919, 1.87833, 115),
('80407', 'Hallivillers', '31T', 448621, 5505612, 49.7008, 2.2875, 110),
('80408', 'Halloy-lès-Pernois', '31T', 442706, 5544435, 50.0494, 2.19973, 45),
('80409', 'Hallu', '31T', 484825, 5515644, 49.7931, 2.78916, 84),
('80410', 'Ham', '31T', 505303, 5510498, 49.7469, 3.07361, 60),
('80411', 'Le Hamel', '31T', 469219, 5527601, 49.9, 2.57139, 45),
('80412', 'Hamelet', '31T', 466151, 5528298, 49.9061, 2.52861, 35),
('80413', 'Hancourt', '31T', 505386, 5527885, 49.9033, 3.075, 102),
('80414', 'Hangard', '31T', 464995, 5519133, 49.8236, 2.51334, 50),
('80415', 'Hangest-en-Santerre', '31T', 471548, 5511466, 49.755, 2.605, 105),
('80416', 'Hangest-sur-Somme', '31T', 432923, 5536764, 49.9794, 2.06444, 20),
('80417', 'Harbonnières', '31T', 476276, 5521851, 49.8486, 2.67, 88),
('80418', 'Hardecourt-aux-Bois', '31T', 486898, 5537658, 49.9911, 2.81722, 105),
('80419', 'Hargicourt', '31T', 466115, 5506587, 49.7108, 2.53, 50),
('80420', 'Harponville', '31T', 464054, 5542766, 50.0361, 2.49805, 95),
('80421', 'Hattencourt', '31T', 484918, 5513018, 49.7694, 2.79055, 84),
('80422', 'Hautvillers-Ouville', '31T', 415380, 5558513, 50.1728, 1.815, 50),
('80423', 'Havernas', '31T', 445176, 5542865, 50.0356, 2.23445, 80),
('80424', 'Hébécourt', '31T', 446841, 5518108, 49.8131, 2.26111, 19),
('80425', 'Hédauville', '31T', 468914, 5543724, 50.045, 2.56584, 100),
('80426', 'Heilly', '31T', 466763, 5533576, 49.9536, 2.53668, 45),
('80427', 'Hem-Hardinval', '31T', 450260, 5556900, 50.1622, 2.30361, 55),
('80428', 'Hem-Monacu', '31T', 488603, 5533763, 49.9561, 2.84112, 55),
('80429', 'Hénencourt', '31T', 468627, 5538846, 50.0011, 2.56223, 115),
('80430', 'Herbécourt', '31T', 488614, 5529964, 49.9219, 2.84138, 89),
('80431', 'Hérissart', '31T', 458118, 5541729, 50.0264, 2.41528, 139),
('80432', 'Herleville', '31T', 482172, 5523434, 49.8631, 2.75194, 87),
('80433', 'Herly', '31T', 490757, 5511646, 49.7572, 2.87167, 80),
('80434', 'Hervilly', '31T', 508412, 5531626, 49.9369, 3.11722, 90),
('80435', 'Hesbécourt', '31T', 509447, 5532493, 49.9447, 3.13167, 110),
('80436', 'Hescamps', '31T', 418602, 5509069, 49.7286, 1.87055, 196),
('80437', 'Heucourt-Croquoison', '31T', 419777, 5531478, 49.9303, 1.88222, 80),
('80438', 'Heudicourt', '31T', 505651, 5541012, 50.0214, 3.07889, 125),
('80439', 'Heuzecourt', '31T', 440434, 5558267, 50.1736, 2.16584, 98),
('80440', 'Hiermont', '31T', 433999, 5560876, 50.1964, 2.07528, 115),
('80442', 'Hombleux', '31T', 498959, 5509631, 49.7392, 2.98555, 63),
('80443', 'Hornoy-le-Bourg', '31T', 421156, 5522160, 49.8467, 1.90333, 170),
('80444', 'Huchenneville', '31T', 414110, 5544910, 50.0503, 1.80027, 62),
('80445', 'Humbercourt', '31T', 461032, 5562092, 50.2097, 2.45388, 110),
('80446', 'Huppy', '31T', 411679, 5542231, 50.0258, 1.76694, 100),
('80447', 'Hyencourt-le-Grand', '31T', 488051, 5518847, 49.8219, 2.83388, 87),
('80449', 'Ignaucourt', '31T', 469332, 5519447, 49.8267, 2.57361, 60),
('80450', 'Inval-Boiron', '31T', 410401, 5526436, 49.8836, 1.75278, 80),
('80451', 'Irles', '31T', 482259, 5549686, 50.0992, 2.75194, 110),
('80452', 'Jumel', '31T', 453304, 5512025, 49.7589, 2.35167, 60),
('80453', 'Laboissière-en-Santerre', '31T', 476728, 5501558, 49.6661, 2.6775, 100),
('80455', 'Lachapelle', '31T', 425045, 5513084, 49.7656, 1.95917, 140),
('80456', 'Lafresguimont-Saint-Martin', '31T', 414056, 5519056, 49.8178, 1.80528, 190),
('80458', 'Lahoussoye', '31T', 462974, 5533292, 49.9508, 2.48389, 115),
('80459', 'Laleu', '31T', 423503, 5532659, 49.9414, 1.93389, 40),
('80460', 'Lamaronde', '31T', 421129, 5517526, 49.805, 1.9039, 180),
('80461', 'Lamotte-Brebière', '31T', 456320, 5526238, 49.8869, 2.39194, 29),
('80462', 'Lamotte-Buleux', '31T', 416696, 5560161, 50.1878, 1.83306, 58),
('80463', 'Lamotte-Warfusée', '31T', 471236, 5524285, 49.8703, 2.59972, 91),
('80464', 'Lanchères', '31T', 396663, 5557144, 50.1575, 1.55334, 10),
('80465', 'Languevoisin-Quiquery', '31T', 495017, 5510560, 49.7475, 2.93083, 74),
('80466', 'Lanches-Saint-Hilaire', '31T', 438419, 5550475, 50.1033, 2.13888, 76),
('80467', 'Laucourt', '31T', 482724, 5502524, 49.675, 2.76055, 90),
('80468', 'Laviéville', '31T', 469556, 5537729, 49.9911, 2.57528, 103),
('80469', 'Lawarde-Mauger-l''Hortoy', '31T', 447888, 5506484, 49.7086, 2.27722, 152),
('80470', 'Léalvillers', '31T', 464791, 5545943, 50.0647, 2.50805, 140),
('80473', 'Liancourt-Fosse', '31T', 486674, 5511439, 49.7553, 2.81499, 80),
('80474', 'Licourt', '31T', 492488, 5519210, 49.8253, 2.89556, 90),
('80475', 'Liéramont', '31T', 503564, 5538045, 49.9947, 3.04972, 128),
('80476', 'Liercourt', '31T', 421428, 5543439, 50.0381, 1.90277, 10),
('80477', 'Ligescourt', '31T', 420120, 5571538, 50.2906, 1.87862, 64),
('80478', 'Lignières', '31T', 474709, 5502895, 49.6781, 2.64944, 100),
('80479', 'Lignières-Châtelain', '31T', 418278, 5514140, 49.7742, 1.865, 193),
('80480', 'Lignières-en-Vimeu', '31T', 409451, 5529325, 49.9094, 1.73888, 140),
('80481', 'Lihons', '31T', 483157, 5519138, 49.8244, 2.76583, 109),
('80482', 'Limeux', '31T', 415366, 5541276, 50.0178, 1.81862, 40),
('80484', 'Liomer', '31T', 415122, 5523332, 49.8564, 1.81916, 120),
('80486', 'Long', '31T', 427179, 5543543, 50.0397, 1.98305, 40),
('80487', 'Longavesnes', '31T', 504462, 5535452, 49.9714, 3.06222, 110),
('80488', 'Longpré-les-Corps-Saints', '31T', 427795, 5540538, 50.0128, 1.99222, 15),
('80489', 'Longueau', '31T', 453809, 5524282, 49.8692, 2.35722, 40),
('80490', 'Longueval', '31T', 485813, 5541398, 50.0247, 2.80194, 150),
('80491', 'Longuevillette', '31T', 448043, 5553369, 50.1303, 2.27305, 141),
('80493', 'Louvencourt', '31T', 464334, 5548973, 50.0919, 2.50138, 124),
('80494', 'Louvrechy', '31T', 456422, 5509158, 49.7333, 2.39527, 120),
('80495', 'Lucheux', '31T', 457731, 5560665, 50.1967, 2.40778, 82),
('80496', 'Machiel', '31T', 416385, 5569372, 50.2706, 1.82667, 25),
('80497', 'Machy', '31T', 414606, 5569554, 50.2719, 1.80167, 25),
('80498', 'Mailly-Maillet', '31T', 471421, 5547602, 50.08, 2.60056, 142),
('80499', 'Mailly-Raineval', '31T', 460656, 5510577, 49.7464, 2.45388, 60),
('80500', 'Maisnières', '31T', 401171, 5541179, 50.0147, 1.62055, 70),
('80501', 'Maison-Ponthieu', '31T', 431636, 5562172, 50.2078, 2.04195, 100),
('80502', 'Maison-Roland', '31T', 430014, 5553390, 50.1286, 2.02083, 95),
('80503', 'Maizicourt', '31T', 437446, 5560649, 50.1947, 2.12361, 99),
('80504', 'Malpart', '31T', 463879, 5504624, 49.6931, 2.49917, 106),
('80505', 'Mametz', '31T', 481047, 5538386, 49.9975, 2.73555, 95),
('80507', 'Marcelcave', '31T', 469347, 5522072, 49.8503, 2.57361, 95),
('80508', 'Marché-Allouarde', '31T', 490371, 5508466, 49.7286, 2.86639, 90),
('80509', 'Marchélepot', '31T', 490332, 5520202, 49.8342, 2.86556, 83),
('80511', 'Marestmontiers', '31T', 466158, 5503930, 49.6869, 2.53083, 55),
('80512', 'Mareuil-Caubert', '31T', 416446, 5546758, 50.0672, 1.83249, 7),
('80513', 'Maricourt', '31T', 484626, 5536583, 49.9814, 2.78556, 120),
('80514', 'Marieux', '31T', 459953, 5550363, 50.1042, 2.44, 90),
('80515', 'Marlers', '31T', 417278, 5512796, 49.7619, 1.8514, 200),
('80516', 'Marquaix', '31T', 505361, 5532580, 49.9456, 3.07472, 70),
('80517', 'Marquivillers', '31T', 477914, 5502542, 49.675, 2.69388, 95),
('80518', 'Martainneville', '31T', 406816, 5539533, 50.0008, 1.69972, 87),
('80519', 'Matigny', '31T', 500540, 5516178, 49.7981, 3.0075, 74),
('80520', 'Maucourt', '31T', 482366, 5515620, 49.7928, 2.755, 91),
('80521', 'Maurepas', '31T', 488909, 5537407, 49.9889, 2.84528, 120),
('80522', 'Le Mazis', '31T', 411905, 5525670, 49.8769, 1.77389, 90),
('80523', 'Méaulte', '31T', 475763, 5536740, 49.9825, 2.66193, 50),
('80524', 'Méharicourt', '31T', 480689, 5516274, 49.7986, 2.73166, 80),
('80525', 'Meigneux', '31T', 420465, 5513211, 49.7661, 1.89555, 190),
('80526', 'Le Meillard', '31T', 442495, 5558090, 50.1722, 2.19472, 106),
('80527', 'Méneslies', '31T', 392729, 5546099, 50.0575, 1.50139, 100),
('80528', 'Méréaucourt', '31T', 423387, 5508999, 49.7286, 1.93695, 140),
('80529', 'Mérélessart', '31T', 417694, 5536081, 49.9714, 1.85222, 120),
('80530', 'Méricourt-l''Abbé', '31T', 468794, 5533378, 49.9519, 2.565, 40),
('80531', 'Méricourt-en-Vimeu', '31T', 424569, 5527640, 49.8964, 1.94973, 113),
('80532', 'Méricourt-sur-Somme', '31T', 476543, 5528274, 49.9064, 2.67333, 35),
('80533', 'Mers-les-Bains', '31T', 384536, 5547135, 50.0653, 1.38666, 20),
('80535', 'Le Mesge', '31T', 431919, 5532947, 49.945, 2.05111, 30),
('80536', 'Mesnil-Bruntel', '31T', 497187, 5527235, 49.8975, 2.96083, 50),
('80537', 'Mesnil-Domqueur', '31T', 433459, 5554179, 50.1361, 2.06889, 125),
('80538', 'Mesnil-en-Arrouaise', '31T', 495943, 5543481, 50.0436, 2.94334, 125),
('80540', 'Mesnil-Martinsart', '31T', 474606, 5544590, 50.0531, 2.64528, 115),
('80541', 'Mesnil-Saint-Georges', '31T', 465705, 5498714, 49.64, 2.525, 98),
('80542', 'Mesnil-Saint-Nicaise', '31T', 494380, 5514112, 49.7794, 2.92194, 79),
('80543', 'Métigny', '31T', 423032, 5533222, 49.9464, 1.92722, 40),
('80544', 'Mézerolles', '31T', 445190, 5559729, 50.1872, 2.23222, 45),
('80545', 'Mézières-en-Santerre', '31T', 467928, 5515069, 49.7872, 2.55445, 94),
('80546', 'Miannay', '31T', 408214, 5550198, 50.0969, 1.71667, 15),
('80547', 'Millencourt', '31T', 470200, 5538930, 50.0019, 2.58417, 95),
('80548', 'Millencourt-en-Ponthieu', '31T', 421513, 5555948, 50.1506, 1.90139, 70),
('80549', 'Miraumont', '31T', 480390, 5549229, 50.095, 2.72583, 90),
('80550', 'Mirvaux', '31T', 456543, 5538899, 50.0008, 2.39361, 95),
('80551', 'Misery', '31T', 491932, 5521650, 49.8472, 2.88778, 70),
('80552', 'Moislains', '31T', 497491, 5537551, 49.9903, 2.965, 75),
('80553', 'Molliens-au-Bois', '31T', 455994, 5537514, 49.9883, 2.38611, 100),
('80554', 'Molliens-Dreuil', '31T', 429718, 5526180, 49.8839, 2.02167, 50),
('80555', 'Monchy-Lagache', '31T', 503215, 5522170, 49.8519, 3.04472, 75),
('80556', 'Mons-Boubert', '31T', 405110, 5554485, 50.135, 1.67222, 19),
('80557', 'Estrées-Mons', '31T', 500479, 5525073, 49.8781, 3.00667, 84),
('80558', 'Monsures', '31T', 440419, 5506654, 49.7094, 2.17361, 80),
('80559', 'Montagne-Fayel', '31T', 426950, 5529646, 49.9147, 1.98249, 120),
('80560', 'Montauban-de-Picardie', '31T', 484156, 5539303, 50.0058, 2.7789, 135),
('80561', 'Montdidier', '31T', 469020, 5499713, 49.6492, 2.57084, 82),
('80562', 'Montigny-sur-l''Hallue', '31T', 460188, 5536493, 49.9794, 2.44472, 50),
('80563', 'Montigny-les-Jongleurs', '31T', 438182, 5559096, 50.1808, 2.13417, 128),
('80565', 'Montonvillers', '31T', 449628, 5538250, 49.9944, 2.29722, 115),
('80566', 'Fieffes-Montrelet', '31T', 444936, 5548612, 50.0872, 2.23027, 100),
('80568', 'Morchain', '31T', 493784, 5516768, 49.8033, 2.91362, 80),
('80569', 'Morcourt', '31T', 474901, 5526737, 49.8925, 2.65056, 40),
('80570', 'Moreuil', '31T', 462839, 5513681, 49.7744, 2.48389, 50),
('80571', 'Morisel', '31T', 462035, 5513130, 49.7694, 2.47277, 50),
('80572', 'Morlancourt', '31T', 473476, 5533230, 49.9508, 2.63028, 70),
('80573', 'Morvillers-Saint-Saturnin', '31T', 415692, 5515044, 49.7819, 1.82889, 202),
('80574', 'Mouflers', '31T', 431824, 5544284, 50.0469, 2.04778, 38),
('80575', 'Mouflières', '31T', 409914, 5530707, 49.9219, 1.74501, 146),
('80576', 'Moyencourt', '31T', 496476, 5507841, 49.7231, 2.95111, 60),
('80577', 'Moyencourt-lès-Poix', '31T', 430539, 5517088, 49.8022, 2.03473, 150),
('80578', 'Moyenneville', '31T', 410568, 5547224, 50.0706, 1.75027, 85),
('80579', 'Muille-Villette', '31T', 504825, 5508243, 49.7267, 3.06695, 65),
('80580', 'Nampont', '31T', 410851, 5578204, 50.3492, 1.74695, 10),
('80582', 'Namps-Maisnil', '31T', 435857, 5517115, 49.8031, 2.10862, 90),
('80583', 'Nampty', '31T', 442801, 5515987, 49.7936, 2.20527, 78),
('80584', 'Naours', '31T', 448178, 5542681, 50.0342, 2.27639, 80),
('80585', 'Nesle', '31T', 493538, 5511858, 49.7592, 2.91028, 75),
('80586', 'Nesle-l''Hôpital', '31T', 406195, 5529041, 49.9064, 1.69362, 77),
('80587', 'Neslette', '31T', 404435, 5531049, 49.9242, 1.66862, 69),
('80588', 'Neufmoulin', '31T', 422112, 5553468, 50.1283, 1.91028, 18),
('80589', 'Neuilly-le-Dien', '31T', 431640, 5564025, 50.2244, 2.04167, 91),
('80590', 'Neuilly-l''Hôpital', '31T', 419856, 5557950, 50.1683, 1.87778, 35),
('80591', 'Neuville-au-Bois', '31T', 413273, 5536212, 49.9719, 1.79055, 100),
('80592', 'Neuville-Coppegueule', '31T', 410636, 5522571, 49.8489, 1.75694, 194),
('80593', 'La Neuville-lès-Bray', '31T', 479766, 5531164, 49.9325, 2.71806, 38),
('80595', 'La Neuville-Sire-Bernard', '31T', 465156, 5510083, 49.7422, 2.51639, 50),
('80596', 'Neuvillette', '31T', 451378, 5561986, 50.2081, 2.31861, 137),
('80597', 'Nibas', '31T', 399240, 5550669, 50.0997, 1.59111, 50),
('80598', 'Nouvion', '31T', 412673, 5562820, 50.2111, 1.77611, 20),
('80599', 'Noyelles-en-Chaussée', '31T', 427492, 5562104, 50.2067, 1.98389, 95),
('80600', 'Noyelles-sur-Mer', '31T', 407884, 5559874, 50.1839, 1.70972, 10),
('80601', 'Nurlu', '31T', 501354, 5539248, 50.0056, 3.0189, 152),
('80602', 'Occoches', '31T', 447793, 5558282, 50.1744, 2.26888, 50),
('80603', 'Ochancourt', '31T', 400955, 5551008, 50.1031, 1.615, 55),
('80604', 'Offignies', '31T', 417421, 5516963, 49.7994, 1.8525, 184),
('80605', 'Offoy', '31T', 500780, 5512163, 49.7619, 3.01083, 63),
('80606', 'Oisemont', '31T', 411648, 5534324, 49.9547, 1.76833, 120),
('80607', 'Oissy', '31T', 431883, 5528530, 49.9053, 2.05139, 45),
('80608', 'Omiécourt', '31T', 489008, 5517579, 49.8106, 2.84722, 85),
('80609', 'Oneux', '31T', 426644, 5555288, 50.1453, 1.97333, 51),
('80611', 'Oresmaux', '31T', 447292, 5513069, 49.7678, 2.26806, 132),
('80613', 'Oust-Marest', '31T', 389727, 5544214, 50.04, 1.46001, 10),
('80614', 'Outrebois', '31T', 446424, 5558234, 50.1739, 2.24972, 46),
('80615', 'Ovillers-la-Boisselle', '31T', 478214, 5541918, 50.0292, 2.69583, 130),
('80616', 'Pargny', '31T', 496543, 5518125, 49.8156, 2.95195, 55),
('80617', 'Parvillers-le-Quesnoy', '31T', 481249, 5510559, 49.7472, 2.73972, 97),
('80618', 'Pendé', '31T', 399026, 5557223, 50.1586, 1.58639, 10),
('80619', 'Pernois', '31T', 441635, 5544725, 50.0519, 2.18473, 50),
('80620', 'Péronne', '31T', 495295, 5531221, 49.9333, 2.93444, 50),
('80621', 'Pertain', '31T', 490567, 5517792, 49.8125, 2.86889, 83),
('80622', 'Picquigny', '31T', 438612, 5532620, 49.9428, 2.14444, 40),
('80623', 'Piennes-Onvillers', '31T', 474223, 5497493, 49.6294, 2.64306, 94),
('80624', 'Pierregot', '31T', 455448, 5538939, 50.0011, 2.37833, 125),
('80625', 'Pierrepont-sur-Avre', '31T', 466839, 5507107, 49.7156, 2.54, 50),
('80626', 'Pissy', '31T', 437593, 5523766, 49.8631, 2.13167, 120),
('80627', 'Plachy-Buyon', '31T', 443785, 5518231, 49.8139, 2.21862, 50),
('80628', 'Le Plessier-Rozainvillers', '31T', 467824, 5511147, 49.7519, 2.55333, 105),
('80630', 'Poix-de-Picardie', '31T', 427061, 5514200, 49.7758, 1.98695, 100),
('80631', 'Ponches-Estruval', '31T', 421359, 5573713, 50.3103, 1.89555, 20),
('80632', 'Pont-de-Metz', '31T', 445699, 5525748, 49.8817, 2.24417, 38),
('80633', 'Ponthoile', '31T', 408181, 5563266, 50.2144, 1.71306, 10),
('80634', 'Pont-Noyelles', '31T', 459877, 5532140, 49.9403, 2.44084, 45),
('80635', 'Pont-Remy', '31T', 421618, 5545506, 50.0567, 1.905, 10),
('80637', 'Port-le-Grand', '31T', 410662, 5556366, 50.1528, 1.74945, 10),
('80638', 'Potte', '31T', 493043, 5516244, 49.7986, 2.90333, 77),
('80639', 'Poulainville', '31T', 450794, 5532957, 49.9469, 2.31416, 65),
('80640', 'Pozières', '31T', 480407, 5543021, 50.0392, 2.72639, 145),
('80642', 'Prouville', '31T', 437686, 5555734, 50.1506, 2.12777, 145),
('80643', 'Prouzel', '31T', 442510, 5518615, 49.8172, 2.20084, 76),
('80644', 'Proyart', '31T', 478948, 5526040, 49.8864, 2.70694, 70),
('80645', 'Puchevillers', '31T', 457624, 5544728, 50.0533, 2.40805, 130),
('80646', 'Punchy', '31T', 486365, 5515577, 49.7925, 2.81056, 76),
('80647', 'Puzeaux', '31T', 487126, 5516255, 49.7986, 2.82111, 86),
('80648', 'Pys', '31T', 482572, 5548203, 50.0858, 2.75639, 115),
('80649', 'Quend', '31T', 403035, 5574573, 50.3153, 1.63806, 6),
('80650', 'Querrieu', '31T', 459157, 5531929, 49.9383, 2.43083, 50),
('80651', 'Le Quesne', '31T', 413697, 5524127, 49.8633, 1.79916, 106),
('80652', 'Le Quesnel', '31T', 473040, 5513836, 49.7764, 2.62555, 95),
('80654', 'Quesnoy-le-Montant', '31T', 406232, 5551654, 50.1097, 1.68861, 50),
('80655', 'Quesnoy-sur-Airaines', '31T', 427631, 5534239, 49.9561, 1.99111, 75),
('80656', 'Quevauvillers', '31T', 434168, 5519637, 49.8256, 2.08472, 133),
('80657', 'Quiry-le-Sec', '31T', 455507, 5502556, 49.6739, 2.38333, 150),
('80658', 'Quivières', '31T', 502797, 5518989, 49.8233, 3.03889, 84),
('80659', 'Raincheval', '31T', 459708, 5546874, 50.0728, 2.43694, 100),
('80661', 'Rainneville', '31T', 453630, 5535866, 49.9733, 2.35334, 125),
('80662', 'Ramburelles', '31T', 407546, 5535690, 49.9664, 1.71083, 120),
('80663', 'Rambures', '31T', 407065, 5533227, 49.9442, 1.70472, 142),
('80664', 'Rancourt', '31T', 493212, 5539160, 50.0047, 2.90527, 130),
('80665', 'Regnière-Écluse', '31T', 412404, 5570548, 50.2806, 1.77055, 17),
('80666', 'Remaisnil', '31T', 445958, 5561173, 50.2003, 2.24278, 115),
('80667', 'Remaugies', '31T', 475887, 5497362, 49.6283, 2.66611, 99),
('80668', 'Remiencourt', '31T', 455608, 5514847, 49.7844, 2.38333, 50),
('80669', 'Rethonvillers', '31T', 490332, 5509022, 49.7336, 2.86584, 86),
('80670', 'Revelles', '31T', 436877, 5522354, 49.8503, 2.12194, 125),
('80671', 'Ribeaucourt', '31T', 436989, 5552190, 50.1186, 2.11861, 122),
('80672', 'Ribemont-sur-Ancre', '31T', 468919, 5534273, 49.96, 2.56667, 45),
('80673', 'Riencourt', '31T', 431865, 5530291, 49.9211, 2.05083, 50),
('80674', 'Rivery', '31T', 452532, 5528865, 49.9103, 2.33889, 30),
('80675', 'Rogy', '31T', 443105, 5506780, 49.7108, 2.21084, 140),
('80676', 'Roiglise', '31T', 487577, 5503623, 49.685, 2.82778, 80),
('80677', 'Roisel', '31T', 507095, 5532737, 49.9469, 3.09889, 80),
('80678', 'Rollot', '31T', 474905, 5493197, 49.5908, 2.65278, 104),
('80679', 'Ronssoy', '31T', 511610, 5536636, 49.9819, 3.16194, 130),
('80680', 'Rosières-en-Santerre', '31T', 478638, 5518258, 49.8164, 2.70306, 90),
('80681', 'Rouvrel', '31T', 457777, 5513409, 49.7717, 2.41362, 110),
('80682', 'Rouvroy-en-Santerre', '31T', 478998, 5513100, 49.77, 2.70834, 95),
('80683', 'Rouy-le-Grand', '31T', 496880, 5513770, 49.7764, 2.95667, 65),
('80684', 'Rouy-le-Petit', '31T', 496440, 5513369, 49.7728, 2.95056, 60),
('80685', 'Roye', '31T', 485077, 5505173, 49.6989, 2.79306, 88),
('80686', 'Rubempré', '31T', 455801, 5540697, 50.0169, 2.38305, 134),
('80687', 'Rubescourt', '31T', 469073, 5495080, 49.6075, 2.57194, 70),
('80688', 'Rue', '31T', 405143, 5569684, 50.2717, 1.66888, 10),
('80690', 'Rumigny', '31T', 448155, 5517570, 49.8083, 2.27944, 108),
('80691', 'Saigneville', '31T', 408070, 5554526, 50.1358, 1.71362, 30),
('80692', 'Sailly-Flibeaucourt', '31T', 412607, 5560010, 50.1858, 1.77583, 30),
('80693', 'Sailly-Laurette', '31T', 471800, 5528976, 49.9125, 2.60723, 45),
('80694', 'Sailly-le-Sec', '31T', 470130, 5529943, 49.9211, 2.58389, 45),
('80695', 'Sailly-Saillisel', '31T', 493554, 5541878, 50.0292, 2.91, 150),
('80696', 'Sains-en-Amiénois', '31T', 451123, 5518685, 49.8186, 2.32055, 109),
('80697', 'Saint-Acheul', '31T', 440356, 5560183, 50.1908, 2.16445, 53),
('80698', 'Saint-Aubin-Montenoy', '31T', 427827, 5522128, 49.8472, 1.99611, 130),
('80699', 'Saint-Aubin-Rivière', '31T', 412152, 5524862, 49.8697, 1.77751, 120),
('80700', 'Saint-Blimont', '31T', 397654, 5552923, 50.1197, 1.56834, 50),
('80701', 'Saint-Christ-Briost', '31T', 495028, 5522542, 49.8553, 2.93083, 55),
('80702', 'Saint-Fuscien', '31T', 450704, 5520851, 49.8381, 2.31445, 100),
('80703', 'Saint-Germain-sur-Bresle', '31T', 408983, 5520467, 49.8297, 1.73445, 115),
('80704', 'Saint-Gratien', '31T', 457626, 5534938, 49.9653, 2.40916, 110),
('80705', 'Saint-Léger-lès-Authie', '31T', 465134, 5552735, 50.1258, 2.51223, 96),
('80706', 'Saint-Léger-lès-Domart', '31T', 438274, 5544762, 50.0519, 2.13778, 30),
('80707', 'Saint-Léger-sur-Bresle', '31T', 408236, 5524743, 49.8681, 1.72305, 80),
('80708', 'Saint-Mard', '31T', 482831, 5504562, 49.6933, 2.76194, 70),
('80709', 'Saint-Maulvis', '31T', 416485, 5528779, 49.9056, 1.83694, 130),
('80710', 'Saint-Maxent', '31T', 409212, 5539925, 50.0047, 1.73306, 111),
('80711', 'Saint-Ouen', '31T', 436961, 5543079, 50.0367, 2.11972, 30),
('80713', 'Saint-Quentin-en-Tourmont', '31T', 399640, 5570805, 50.2808, 1.59139, 4),
('80714', 'Saint-Quentin-la-Motte-Croix-au-Bailly', '31T', 389520, 5547710, 50.0714, 1.45611, 100),
('80716', 'Saint-Riquier', '31T', 424920, 5554076, 50.1342, 1.94944, 37),
('80717', 'Saint-Sauflieu', '31T', 446315, 5515395, 49.7886, 2.25417, 110),
('80718', 'Saint-Sauveur', '31T', 443569, 5532009, 49.9378, 2.21361, 25),
('80719', 'Sainte-Segrée', '31T', 421770, 5512112, 49.7564, 1.91389, 180),
('80721', 'Saint-Valery-sur-Somme', '31T', 402809, 5560056, 50.1847, 1.63861, 20),
('80722', 'Saint-Vaast-en-Chaussée', '31T', 443128, 5535535, 49.9694, 2.20694, 50),
('80723', 'Saisseval', '31T', 436277, 5527303, 49.8947, 2.11278, 80),
('80724', 'Saleux', '31T', 445333, 5523095, 49.8578, 2.23945, 34),
('80725', 'Salouël', '31T', 445666, 5524482, 49.8703, 2.24388, 31),
('80726', 'Sancourt', '31T', 502760, 5513399, 49.7731, 3.03833, 65),
('80728', 'Saulchoy-sous-Poix', '31T', 423513, 5512272, 49.7581, 1.93806, 124),
('80729', 'Sauvillers-Mongival', '31T', 461721, 5508253, 49.7256, 2.46889, 107),
('80730', 'Saveuse', '31T', 443903, 5527650, 49.8986, 2.21889, 65),
('80732', 'Senarpont', '31T', 408132, 5526845, 49.8869, 1.72111, 88),
('80733', 'Senlis-le-Sec', '31T', 469717, 5541496, 50.025, 2.57723, 85),
('80734', 'Sentelie', '31T', 429947, 5508447, 49.7244, 2.02806, 180),
('80735', 'Seux', '31T', 435951, 5525052, 49.8744, 2.10861, 115),
('80736', 'Sorel-en-Vimeu', '31T', 422060, 5540402, 50.0108, 1.91222, 100),
('80737', 'Sorel', '31T', 503621, 5541195, 50.0231, 3.05055, 125),
('80738', 'Soues', '31T', 432331, 5534023, 49.9547, 2.05667, 40),
('80740', 'Sourdon', '31T', 456582, 5506562, 49.71, 2.39778, 140),
('80741', 'Soyécourt', '31T', 485187, 5523487, 49.8636, 2.79389, 80),
('80742', 'Surcamps', '31T', 433705, 5546794, 50.0697, 2.07361, 80),
('80743', 'Suzanne', '31T', 483300, 5533067, 49.9497, 2.76722, 55),
('80744', 'Tailly', '31T', 424089, 5531847, 49.9342, 1.94222, 47),
('80746', 'Talmas', '31T', 451335, 5542033, 50.0286, 2.32055, 131),
('80747', 'Templeux-la-Fosse', '31T', 501892, 5535079, 49.9681, 3.02638, 120),
('80748', 'Templeux-le-Guérard', '31T', 510798, 5534719, 49.9647, 3.15056, 100),
('80749', 'Terramesnil', '31T', 455822, 5550426, 50.1044, 2.38222, 140),
('80750', 'Tertry', '31T', 505091, 5523376, 49.8628, 3.07084, 76),
('80751', 'Thennes', '31T', 461747, 5517611, 49.8097, 2.46833, 40),
('80752', 'Thézy-Glimont', '31T', 458972, 5518002, 49.8131, 2.42973, 40),
('80753', 'Thiepval', '31T', 477510, 5544701, 50.0542, 2.68583, 140),
('80754', 'Thieulloy-l''Abbaye', '31T', 423979, 5519802, 49.8258, 1.94305, 178),
('80755', 'Thieulloy-la-Ville', '31T', 422915, 5511014, 49.7467, 1.93, 183),
('80756', 'Thièvres', '31T', 461204, 5552979, 50.1278, 2.45722, 75),
('80757', 'Thoix', '31T', 432944, 5506309, 49.7056, 2.07, 96),
('80758', 'Thory', '31T', 459334, 5507714, 49.7206, 2.43583, 109),
('80759', 'Tilloloy', '31T', 481812, 5499254, 49.6456, 2.74806, 100),
('80760', 'Tilloy-Floriville', '31T', 400521, 5538349, 49.9892, 1.61222, 122),
('80761', 'Tilloy-lès-Conty', '31T', 440693, 5511562, 49.7536, 2.17666, 96),
('80762', 'Tincourt-Boucly', '31T', 503090, 5531992, 49.9403, 3.04306, 65),
('80763', 'Le Titre', '31T', 414375, 5560136, 50.1872, 1.80056, 45),
('80765', 'Tours-en-Vimeu', '31T', 405571, 5543448, 50.0358, 1.68139, 90),
('80766', 'Toutencourt', '31T', 461029, 5542633, 50.0347, 2.45583, 75),
('80767', 'Le Translay', '31T', 405281, 5536038, 49.9692, 1.67917, 130),
('80769', 'Treux', '31T', 470830, 5534016, 49.9578, 2.59333, 40),
('80770', 'Tully', '31T', 393846, 5549229, 50.0858, 1.51612, 100),
('80771', 'Ugny-l''Équipée', '31T', 504476, 5518280, 49.8169, 3.06222, 81),
('80773', 'Vadencourt', '31T', 463196, 5539437, 50.0061, 2.48639, 65),
('80774', 'Vaire-sous-Corbie', '31T', 467374, 5529279, 49.915, 2.54556, 35);
INSERT INTO `ods_communes` (`oc_code_insee`, `oc_nom`, `oc_secteur`, `oc_x_utm`, `oc_y_utm`, `oc_latitude`, `oc_longitude`, `oc_altitude`) VALUES
('80775', 'Valines', '31T', 401637, 5548091, 50.0769, 1.62528, 85),
('80776', 'Varennes', '31T', 466629, 5544201, 50.0492, 2.53388, 140),
('80777', 'Vauchelles-lès-Authie', '31T', 462511, 5549695, 50.0983, 2.47583, 125),
('80778', 'Vauchelles-lès-Domart', '31T', 432272, 5545082, 50.0542, 2.05389, 50),
('80779', 'Vauchelles-les-Quesnoy', '31T', 420803, 5550892, 50.105, 1.89251, 45),
('80780', 'Vaudricourt', '31T', 396264, 5552950, 50.1197, 1.5489, 50),
('80781', 'Vauvillers', '31T', 478692, 5521872, 49.8489, 2.70361, 88),
('80782', 'Vaux-en-Amiénois', '31T', 446089, 5534794, 49.9631, 2.24833, 45),
('80783', 'Vaux-Marquenneville', '31T', 413036, 5537545, 49.9839, 1.78695, 80),
('80784', 'Vaux-sur-Somme', '31T', 467677, 5529957, 49.9211, 2.54972, 31),
('80785', 'Vecquemont', '31T', 460602, 5527749, 49.9008, 2.45139, 35),
('80786', 'Velennes', '31T', 434844, 5512710, 49.7633, 2.09528, 106),
('80787', 'Vercourt', '31T', 407671, 5572729, 50.2994, 1.70361, 10),
('80788', 'Vergies', '31T', 417250, 5531794, 49.9328, 1.84695, 120),
('80789', 'Vermandovillers', '31T', 484584, 5521975, 49.85, 2.78556, 89),
('80790', 'Verpillières', '31T', 487252, 5501832, 49.6689, 2.82333, 83),
('80791', 'Vers-sur-Selles', '31T', 444796, 5521371, 49.8422, 2.23222, 50),
('80792', 'La Vicogne', '31T', 451360, 5544751, 50.0531, 2.32056, 120),
('80793', 'Vignacourt', '31T', 442361, 5540114, 50.0106, 2.19556, 124),
('80794', 'Villecourt', '31T', 497921, 5516487, 49.8008, 2.97111, 60),
('80795', 'Ville-le-Marclet', '31T', 434435, 5541503, 50.0222, 2.08472, 20),
('80796', 'Villeroy', '31T', 408632, 5532768, 49.9403, 1.72666, 133),
('80797', 'Villers-aux-Érables', '31T', 466688, 5515045, 49.7869, 2.53723, 91),
('80798', 'Villers-Bocage', '31T', 451205, 5538606, 49.9978, 2.31917, 130),
('80799', 'Villers-Bretonneux', '31T', 465187, 5524166, 49.8689, 2.51556, 100),
('80800', 'Villers-Campsart', '31T', 416204, 5524829, 49.87, 1.83389, 163),
('80801', 'Villers-Carbonnel', '31T', 492715, 5524707, 49.8747, 2.89861, 80),
('80802', 'Villers-Faucon', '31T', 507210, 5536011, 49.9764, 3.10055, 95),
('80803', 'Villers-lès-Roye', '31T', 480653, 5506052, 49.7067, 2.73167, 90),
('80804', 'Villers-sous-Ailly', '31T', 429558, 5545920, 50.0614, 2.01583, 68),
('80805', 'Villers-Tournelle', '31T', 461183, 5500319, 49.6542, 2.46222, 110),
('80806', 'Villers-sur-Authie', '31T', 407149, 5574561, 50.3158, 1.69583, 10),
('80807', 'Ville-sur-Ancre', '31T', 472267, 5534502, 49.9622, 2.61333, 45),
('80808', 'Vironchaux', '31T', 416373, 5571163, 50.2867, 1.82611, 66),
('80809', 'Vismes', '31T', 405104, 5540676, 50.0108, 1.67556, 80),
('80810', 'Vitz-sur-Authie', '31T', 433226, 5567218, 50.2533, 2.06334, 25),
('80811', 'Voyennes', '31T', 498980, 5513275, 49.7719, 2.98583, 55),
('80812', 'Vraignes-en-Vermandois', '31T', 504729, 5526156, 49.8878, 3.06583, 93),
('80813', 'Vraignes-lès-Hornoy', '31T', 421807, 5520173, 49.8289, 1.91278, 148),
('80814', 'Vrély', '31T', 478030, 5516192, 49.7978, 2.69472, 90),
('80815', 'Vron', '31T', 411104, 5574431, 50.3153, 1.7514, 36),
('80819', 'Wargnies', '31T', 446426, 5542543, 50.0328, 2.25195, 70),
('80820', 'Warloy-Baillon', '31T', 465825, 5539728, 50.0089, 2.52305, 70),
('80821', 'Warlus', '31T', 424272, 5530640, 49.9233, 1.945, 49),
('80822', 'Warsy', '31T', 474721, 5505304, 49.6997, 2.64945, 70),
('80823', 'Warvillers', '31T', 477522, 5514156, 49.7794, 2.68778, 95),
('80824', 'Wiencourt-l''Équipée', '31T', 472021, 5521655, 49.8467, 2.61083, 90),
('80825', 'Wiry-au-Mont', '31T', 416842, 5535075, 49.9622, 1.84056, 110),
('80826', 'Woignarue', '31T', 392604, 5551725, 50.1081, 1.49806, 52),
('80827', 'Woincourt', '31T', 395291, 5546914, 50.0653, 1.53694, 100),
('80828', 'Woirel', '31T', 415661, 5534722, 49.9589, 1.82417, 64),
('80829', 'Y', '31T', 499400, 5516703, 49.8028, 2.99166, 75),
('80830', 'Yaucourt-Bussus', '31T', 426918, 5550620, 50.1033, 1.97806, 90),
('80832', 'Yvrench', '31T', 428798, 5558997, 50.1789, 2.00278, 100),
('80833', 'Yvrencheux', '31T', 428348, 5559435, 50.1828, 1.99639, 113),
('80834', 'Yzengremer', '31T', 394248, 5546440, 50.0608, 1.52251, 115),
('80835', 'Yzeux', '31T', 436144, 5536231, 49.975, 2.10945, 20),
('80836', 'Yonval', '31T', 413403, 5549154, 50.0883, 1.78944, 10),
('81001', 'Aguts', '31T', 412550, 4820149, 43.5292, 1.91777, 290),
('81002', 'Aiguefonde', '31T', 444662, 4816013, 43.495, 2.31556, 341),
('81003', 'Alban', '31T', 456758, 4859550, 43.8878, 2.46166, 618),
('81004', 'Albi', '31T', 431190, 4864270, 43.9283, 2.14278, 174),
('81005', 'Albine', '31T', 462675, 4812126, 43.4611, 2.53861, 325),
('81006', 'Algans', '31T', 410696, 4827610, 43.5961, 1.89361, 200),
('81007', 'Alos', '31T', 410065, 4875292, 44.0253, 1.87778, 240),
('81008', 'Almayrac', '31T', 433593, 4883623, 44.1028, 2.17028, 356),
('81009', 'Amarens', '31T', 412954, 4876611, 44.0375, 1.91361, 270),
('81010', 'Ambialet', '31T', 449955, 4865799, 43.9436, 2.37639, 200),
('81011', 'Ambres', '31T', 404456, 4842847, 43.7325, 1.81361, 201),
('81012', 'Andillac', '31T', 411315, 4872221, 43.9978, 1.89389, 240),
('81013', 'Andouque', '31T', 444591, 4874820, 44.0244, 2.30861, 445),
('81014', 'Anglès', '31T', 464511, 4823561, 43.5642, 2.56056, 740),
('81015', 'Appelle', '31T', 415520, 4826005, 43.5822, 1.95361, 250),
('81016', 'Arfons', '31T', 432529, 4808905, 43.43, 2.16638, 659),
('81017', 'Arifat', '31T', 446011, 4846762, 43.7719, 2.32917, 560),
('81018', 'Arthès', '31T', 436481, 4867180, 43.955, 2.20834, 160),
('81019', 'Assac', '31T', 455017, 4869249, 43.975, 2.43917, 451),
('81020', 'Aussac', '31T', 422992, 4857294, 43.8647, 2.04167, 200),
('81021', 'Aussillon', '31T', 447867, 4815093, 43.4869, 2.35528, 250),
('81022', 'Bannières', '31T', 399333, 4831042, 43.6256, 1.75222, 250),
('81023', 'Barre', '31T', 486001, 4844461, 43.7531, 2.82611, 920),
('81024', 'Beauvais-sur-Tescou', '31T', 385358, 4863022, 43.9114, 1.57222, 140),
('81025', 'Belcastel', '31T', 399664, 4833691, 43.6494, 1.75583, 230),
('81026', 'Bellegarde', '31T', 442549, 4862619, 43.9144, 2.28445, 344),
('81027', 'Belleserre', '31T', 423656, 4815602, 43.4894, 2.05583, 230),
('81028', 'Berlats', '31T', 464925, 4838275, 43.6967, 2.56473, 580),
('81029', 'Bernac', '31T', 421663, 4867585, 43.9572, 2.02362, 181),
('81030', 'Bertre', '31T', 414306, 4827563, 43.5961, 1.93833, 240),
('81031', 'Le Bez', '31T', 457566, 4828569, 43.6089, 2.47417, 620),
('81032', 'Blan', '31T', 419953, 4819656, 43.5256, 2.00945, 200),
('81033', 'Blaye-les-Mines', '31T', 430508, 4875786, 44.0319, 2.13277, 325),
('81034', 'Boissezon', '31T', 449783, 4825105, 43.5772, 2.37805, 314),
('81035', 'Bournazel', '31T', 417416, 4882726, 44.0931, 1.96833, 320),
('81036', 'Bout-du-Pont-de-Larn', '31T', 452169, 4816727, 43.5019, 2.40834, 250),
('81037', 'Brassac', '31T', 458197, 4829059, 43.6133, 2.48195, 490),
('81038', 'Brens', '31T', 412580, 4860046, 43.8883, 1.91166, 128),
('81039', 'Briatexte', '31T', 412224, 4844869, 43.7517, 1.90972, 140),
('81040', 'Brousse', '31T', 425287, 4840946, 43.7178, 2.0725, 268),
('81041', 'Broze', '31T', 411138, 4867316, 43.9536, 1.8925, 220),
('81042', 'Burlats', '31T', 444904, 4831839, 43.6375, 2.31694, 200),
('81043', 'Busque', '31T', 416405, 4848302, 43.7831, 1.96111, 160),
('81044', 'Cabanès', '31T', 414942, 4842273, 43.7286, 1.94389, 220),
('81045', 'Les Cabannes', '31T', 415044, 4879824, 44.0667, 1.93917, 173),
('81046', 'Cadalen', '31T', 418261, 4855592, 43.8489, 1.98306, 195),
('81047', 'Cadix', '31T', 458048, 4869445, 43.9769, 2.47694, 495),
('81048', 'Cagnac-les-Mines', '31T', 430221, 4871716, 43.9953, 2.12973, 200),
('81049', 'Cahuzac', '31T', 425409, 4813669, 43.4722, 2.07778, 260),
('81050', 'Cambon-lès-Lavaur', '31T', 407521, 4826604, 43.5867, 1.85445, 230),
('81051', 'Cahuzac-sur-Vère', '31T', 412697, 4870629, 43.9836, 1.91138, 200),
('81052', 'Cambon', '31T', 436770, 4862425, 43.9122, 2.2125, 220),
('81053', 'Cambounès', '31T', 454904, 4826118, 43.5867, 2.44139, 400),
('81054', 'Cambounet-sur-le-Sor', '31T', 428252, 4825240, 43.5767, 2.11139, 170),
('81055', 'Les Cammazes', '31T', 425402, 4806944, 43.4117, 2.07861, 609),
('81056', 'Campagnac', '31T', 407336, 4875978, 44.0311, 1.84361, 280),
('81058', 'Carbes', '31T', 432196, 4831585, 43.6342, 2.15944, 200),
('81059', 'Carlus', '31T', 428288, 4859858, 43.8883, 2.10722, 240),
('81060', 'Carmaux', '31T', 432579, 4877987, 44.0519, 2.15833, 231),
('81061', 'Castanet', '31T', 422087, 4869586, 43.9753, 2.02861, 270),
('81062', 'Castelnau-de-Brassac', '31T', 461200, 4832897, 43.6481, 2.51889, 560),
('81063', 'Castelnau-de-Lévis', '31T', 426542, 4865431, 43.9383, 2.08472, 180),
('81064', 'Castelnau-de-Montmiral', '31T', 405498, 4868876, 43.9669, 1.82195, 267),
('81065', 'Castres', '31T', 438645, 4828561, 43.6075, 2.23972, 173),
('81066', 'Caucalières', '31T', 444531, 4819223, 43.5239, 2.31361, 194),
('81067', 'Cestayrols', '31T', 418819, 4870180, 43.9803, 1.98778, 240),
('81068', 'Combefa', '31T', 427110, 4878446, 44.0556, 2.09001, 320),
('81069', 'Cordes-sur-Ciel', '31T', 416528, 4879343, 44.0625, 1.95777, 240),
('81070', 'Coufouleux', '31T', 397978, 4852324, 43.8169, 1.73139, 115),
('81071', 'Courris', '31T', 451802, 4865323, 43.9394, 2.39944, 231),
('81072', 'Crespin', '31T', 443950, 4877973, 44.0528, 2.30028, 534),
('81073', 'Crespinet', '31T', 444170, 4867110, 43.955, 2.30417, 378),
('81074', 'Cunac', '31T', 437278, 4864241, 43.9286, 2.21861, 240),
('81075', 'Cuq', '31T', 426701, 4833186, 43.6481, 2.09111, 220),
('81076', 'Cuq-Toulza', '31T', 410639, 4823322, 43.5575, 1.89361, 270),
('81077', 'Curvalle', '31T', 460582, 4864709, 43.9344, 2.50889, 220),
('81078', 'Damiatte', '31T', 417544, 4833724, 43.6519, 1.9775, 140),
('81079', 'Dénat', '31T', 436141, 4855057, 43.8458, 2.20555, 294),
('81080', 'Donnazac', '31T', 415415, 4874049, 44.0147, 1.94472, 292),
('81081', 'Dourgne', '31T', 430321, 4814974, 43.4844, 2.13833, 260),
('81082', 'Le Dourn', '31T', 457346, 4874633, 44.0236, 2.46777, 500),
('81083', 'Durfort', '31T', 424516, 4810131, 43.4403, 2.06723, 290),
('81084', 'Escoussens', '31T', 436403, 4816673, 43.5003, 2.21334, 280),
('81085', 'Escroux', '31T', 470724, 4843677, 43.7456, 2.6364, 700),
('81086', 'Espérausses', '31T', 462349, 4838012, 43.6942, 2.53278, 563),
('81087', 'Fayssac', '31T', 417559, 4867388, 43.955, 1.9725, 209),
('81088', 'Fauch', '31T', 439924, 4853572, 43.8328, 2.25278, 320),
('81089', 'Faussergues', '31T', 455177, 4876406, 44.0394, 2.44056, 532),
('81090', 'Fénols', '31T', 423862, 4855279, 43.8467, 2.05278, 210),
('81091', 'Ferrières', '31T', 455092, 4834046, 43.6581, 2.44306, 500),
('81092', 'Fiac', '31T', 411993, 4839256, 43.7011, 1.90777, 240),
('81093', 'Florentin', '31T', 422196, 4859896, 43.8881, 2.03138, 200),
('81094', 'Fraissines', '31T', 461072, 4868316, 43.9669, 2.51473, 380),
('81095', 'Frausseilles', '31T', 414279, 4875730, 44.0297, 1.93028, 290),
('81096', 'Le Fraysse', '31T', 453553, 4860713, 43.8981, 2.42166, 560),
('81097', 'Fréjairolles', '31T', 438119, 4858833, 43.88, 2.22972, 291),
('81098', 'Fréjeville', '31T', 430848, 4829007, 43.6108, 2.14306, 170),
('81099', 'Gaillac', '31T', 411550, 4861479, 43.9011, 1.89861, 134),
('81100', 'Garrevaques', '31T', 416634, 4816364, 43.4956, 1.96889, 196),
('81101', 'Le Garric', '31T', 432912, 4873571, 44.0122, 2.16305, 279),
('81102', 'Garrigues', '31T', 396874, 4838732, 43.6944, 1.72028, 240),
('81103', 'Gijounet', '31T', 468940, 4840137, 43.7136, 2.61444, 560),
('81104', 'Giroussens', '31T', 401530, 4846222, 43.7625, 1.77667, 190),
('81105', 'Graulhet', '31T', 418838, 4846205, 43.7644, 1.99166, 150),
('81106', 'Grazac', '31T', 392063, 4855472, 43.8444, 1.65723, 210),
('81107', 'Guitalens', '31T', 422526, 4832554, 43.6419, 2.03944, 150),
('81108', 'Itzac', '31T', 408554, 4877165, 44.0419, 1.85861, 280),
('81109', 'Jonquières', '31T', 429503, 4833279, 43.6492, 2.12584, 180),
('81110', 'Jouqueviel', '31T', 431156, 4893028, 44.1872, 2.13861, 500),
('81111', 'Labarthe-Bleys', '31T', 412412, 4881031, 44.0772, 1.90611, 158),
('81112', 'Labastide-de-Lévis', '31T', 420509, 4864328, 43.9278, 2.00972, 197),
('81113', 'Labastide-Dénat', '31T', 435026, 4857412, 43.8669, 2.19139, 300),
('81114', 'Labastide-Gabausse', '31T', 427892, 4876709, 44.04, 2.1, 260),
('81115', 'Labastide-Rouairoux', '31T', 470817, 4813721, 43.4758, 2.63917, 420),
('81116', 'Labastide-Saint-Georges', '31T', 406084, 4839306, 43.7008, 1.83444, 140),
('81117', 'Labessière-Candeil', '31T', 420051, 4850356, 43.8019, 2.00611, 260),
('81118', 'Laboulbène', '31T', 435796, 4835406, 43.6689, 2.20361, 260),
('81119', 'Laboutarie', '31T', 429102, 4848309, 43.7844, 2.11888, 180),
('81120', 'Labruguière', '31T', 440348, 4820956, 43.5392, 2.26166, 190),
('81121', 'Lacabarède', '31T', 466095, 4813002, 43.4692, 2.58083, 329),
('81122', 'Lacapelle-Pinet', '31T', 447102, 4879736, 44.0689, 2.33945, 580),
('81123', 'Lacapelle-Ségalar', '31T', 419450, 4885385, 44.1172, 1.99333, 289),
('81124', 'Lacaune', '31T', 475024, 4839371, 43.7069, 2.69, 820),
('81125', 'Lacaze', '31T', 461391, 4842737, 43.7367, 2.52055, 460),
('81126', 'Lacougotte-Cadoul', '31T', 405563, 4832525, 43.6397, 1.82917, 230),
('81127', 'Lacroisille', '31T', 413637, 4826121, 43.5831, 1.93027, 310),
('81128', 'Lacrouzette', '31T', 447482, 4834811, 43.6644, 2.34861, 494),
('81129', 'Lagardiolle', '31T', 426730, 4817327, 43.5053, 2.09361, 230),
('81130', 'Lagarrigue', '31T', 441418, 4825173, 43.5772, 2.27445, 200),
('81131', 'Lagrave', '31T', 419397, 4860947, 43.8972, 1.99638, 156),
('81132', 'Lalbarède', '31T', 423022, 4832764, 43.6439, 2.04556, 150),
('81133', 'Lamillarié', '31T', 433032, 4854532, 43.8408, 2.16694, 258),
('81134', 'Lamontélarié', '31T', 467975, 4830269, 43.6247, 2.60305, 820),
('81135', 'Laparrouquial', '31T', 421936, 4883195, 44.0978, 2.02472, 460),
('81136', 'Larroque', '31T', 394736, 4873328, 44.0056, 1.68694, 140),
('81137', 'Lasfaillades', '31T', 459757, 4823835, 43.5664, 2.50167, 740),
('81138', 'Lasgraisses', '31T', 422645, 4852423, 43.8208, 2.03805, 240),
('81139', 'Lautrec', '31T', 430421, 4839718, 43.7072, 2.13639, 280),
('81140', 'Lavaur', '31T', 404561, 4839235, 43.7, 1.81556, 120),
('81141', 'Lédas-et-Penthiès', '31T', 450720, 4881621, 44.0861, 2.38445, 480),
('81142', 'Lempaut', '31T', 424557, 4819819, 43.5275, 2.06639, 180),
('81143', 'Lescout', '31T', 427735, 4821018, 43.5386, 2.10555, 180),
('81144', 'Lescure-d''Albigeois', '31T', 433381, 4867055, 43.9536, 2.16972, 160),
('81145', 'Lisle-sur-Tarn', '31T', 404558, 4856207, 43.8528, 1.8125, 122),
('81146', 'Livers-Cazelles', '31T', 421141, 4878082, 44.0517, 2.01555, 300),
('81147', 'Lombers', '31T', 431540, 4850567, 43.805, 2.14889, 195),
('81148', 'Loubers', '31T', 411452, 4877434, 44.0447, 1.89473, 260),
('81149', 'Loupiac', '31T', 402239, 4853401, 43.8272, 1.78417, 130),
('81150', 'Lugan', '31T', 396825, 4842837, 43.7314, 1.71888, 190),
('81151', 'Magrin', '31T', 413274, 4829211, 43.6108, 1.92528, 300),
('81152', 'Mailhoc', '31T', 425580, 4873063, 44.0069, 2.07166, 280),
('81153', 'Le Margnès', '31T', 467828, 4832214, 43.6422, 2.60111, 806),
('81154', 'Marnaves', '31T', 410885, 4883243, 44.0969, 1.88667, 151),
('81155', 'Marsal', '31T', 442720, 4864377, 43.9303, 2.28639, 200),
('81156', 'Marssac-sur-Tarn', '31T', 422101, 4863167, 43.9175, 2.02972, 146),
('81157', 'Marzens', '31T', 406837, 4833865, 43.6519, 1.84473, 210),
('81158', 'Le Masnau-Massuguiès', '31T', 463988, 4847289, 43.7778, 2.55249, 760),
('81159', 'Massac-Séran', '31T', 408245, 4835296, 43.665, 1.86194, 219),
('81160', 'Massaguel', '31T', 432059, 4815790, 43.4919, 2.15972, 280),
('81161', 'Massals', '31T', 461733, 4855508, 43.8517, 2.52389, 700),
('81162', 'Maurens-Scopont', '31T', 404328, 4827636, 43.5956, 1.81472, 240),
('81163', 'Mazamet', '31T', 449445, 4815853, 43.4939, 2.37473, 241),
('81164', 'Mézens', '31T', 393013, 4849285, 43.7889, 1.67028, 123),
('81165', 'Milhars', '31T', 410354, 4886737, 44.1283, 1.87944, 140),
('81166', 'Milhavet', '31T', 422161, 4875818, 44.0314, 2.02861, 280),
('81167', 'Miolles', '31T', 463520, 4859694, 43.8894, 2.54583, 500),
('81168', 'Mirandol-Bourgnounac', '31T', 433551, 4888313, 44.145, 2.16917, 400),
('81169', 'Missècle', '31T', 418659, 4840653, 43.7144, 1.99028, 230),
('81170', 'Monestiés', '31T', 427822, 4880505, 44.0742, 2.09861, 210),
('81171', 'Montans', '31T', 410538, 4857574, 43.8658, 1.88666, 150),
('81172', 'Montauriol', '31T', 445915, 4881504, 44.0847, 2.32444, 525),
('81173', 'Montcabrier', '31T', 397767, 4831250, 43.6272, 1.73278, 240),
('81174', 'Montdragon', '31T', 427725, 4847059, 43.7731, 2.10194, 190),
('81175', 'Montdurausse', '31T', 385074, 4867193, 43.9489, 1.56778, 210),
('81176', 'Montels', '31T', 411375, 4868363, 43.9631, 1.89528, 240),
('81177', 'Montfa', '31T', 437551, 4838691, 43.6986, 2.225, 332),
('81178', 'Montgaillard', '31T', 387254, 4862989, 43.9114, 1.59583, 160),
('81179', 'Montgey', '31T', 413737, 4818190, 43.5117, 1.93277, 330),
('81180', 'Montirat', '31T', 428415, 4890034, 44.16, 2.10472, 380),
('81181', 'Montpinier', '31T', 435139, 4836893, 43.6822, 2.19528, 280),
('81182', 'Montredon-Labessonnié', '31T', 445718, 4841026, 43.7203, 2.32611, 519),
('81183', 'Mont-Roc', '31T', 449076, 4849978, 43.8011, 2.36694, 560),
('81184', 'Montrosier', '31T', 407147, 4887831, 44.1378, 1.83917, 140),
('81185', 'Montvalen', '31T', 386743, 4857875, 43.8653, 1.59055, 190),
('81186', 'Moularès', '31T', 443725, 4880258, 44.0733, 2.29722, 447),
('81187', 'Moulayrès', '31T', 421131, 4839636, 43.7056, 2.02111, 250),
('81188', 'Moulin-Mage', '31T', 484156, 4839899, 43.7119, 2.80333, 840),
('81189', 'Mouzens', '31T', 410036, 4820121, 43.5286, 1.88667, 280),
('81190', 'Mouzieys-Teulet', '31T', 441809, 4857164, 43.8653, 2.27583, 351),
('81191', 'Mouzieys-Panens', '31T', 414592, 4882731, 44.0928, 1.93306, 300),
('81192', 'Murat-sur-Vèbre', '31T', 488112, 4836929, 43.6853, 2.8525, 840),
('81193', 'Nages', '31T', 482087, 4835863, 43.6756, 2.77778, 810),
('81195', 'Navès', '31T', 437189, 4823947, 43.5658, 2.22222, 220),
('81196', 'Noailhac', '31T', 447628, 4824813, 43.5744, 2.35139, 227),
('81197', 'Noailles', '31T', 418461, 4873671, 44.0117, 1.98278, 230),
('81198', 'Orban', '31T', 426401, 4854726, 43.8419, 2.08444, 230),
('81199', 'Padiès', '31T', 449171, 4876943, 44.0439, 2.36555, 475),
('81200', 'Palleville', '31T', 418912, 4817169, 43.5031, 1.99694, 200),
('81201', 'Pampelonne', '31T', 439707, 4886094, 44.1256, 2.24638, 423),
('81202', 'Parisot', '31T', 406305, 4850257, 43.7994, 1.83528, 190),
('81203', 'Paulinet', '31T', 454229, 4855155, 43.8481, 2.43056, 640),
('81204', 'Payrin-Augmontel', '31T', 447176, 4818739, 43.5197, 2.34638, 210),
('81205', 'Péchaudier', '31T', 414337, 4821207, 43.5389, 1.93972, 208),
('81206', 'Penne', '31T', 398484, 4880953, 44.0747, 1.73222, 280),
('81207', 'Peyregoux', '31T', 435763, 4838955, 43.7008, 2.20278, 220),
('81208', 'Peyrole', '31T', 411632, 4850863, 43.8056, 1.90138, 270),
('81209', 'Pont-de-Larn', '31T', 452104, 4817160, 43.5058, 2.4075, 250),
('81210', 'Poudis', '31T', 417993, 4819155, 43.5208, 1.98527, 193),
('81211', 'Poulan-Pouzols', '31T', 428946, 4856703, 43.86, 2.11583, 260),
('81212', 'Prades', '31T', 417084, 4829163, 43.6108, 1.9725, 230),
('81213', 'Pratviel', '31T', 410287, 4832182, 43.6372, 1.88778, 240),
('81214', 'Puéchoursi', '31T', 411746, 4818710, 43.5161, 1.90806, 273),
('81215', 'Puybegon', '31T', 411229, 4849079, 43.7894, 1.89667, 270),
('81216', 'Puycalvel', '31T', 426672, 4836672, 43.6794, 2.09028, 220),
('81217', 'Puycelci', '31T', 396631, 4871971, 43.9936, 1.71084, 260),
('81218', 'Puygouzon', '31T', 433165, 4861072, 43.8997, 2.16778, 210),
('81219', 'Puylaurens', '31T', 420127, 4824838, 43.5722, 2.01084, 353),
('81220', 'Rabastens', '31T', 397518, 4852948, 43.8225, 1.72555, 122),
('81221', 'Rayssac', '31T', 452888, 4851770, 43.8175, 2.41417, 600),
('81222', 'Réalmont', '31T', 434748, 4847264, 43.7756, 2.18917, 209),
('81223', 'Le Rialet', '31T', 456479, 4823424, 43.5625, 2.46111, 684),
('81224', 'Le Riols', '31T', 412992, 4889572, 44.1542, 1.91194, 150),
('81225', 'Rivières', '31T', 416833, 4862861, 43.9142, 1.96416, 140),
('81226', 'Ronel', '31T', 437559, 4851464, 43.8136, 2.22361, 320),
('81227', 'Roquecourbe', '31T', 442913, 4834879, 43.6647, 2.29194, 220),
('81228', 'Roquemaure', '31T', 389328, 4852184, 43.8144, 1.62389, 220),
('81229', 'Roquevidal', '31T', 408478, 4831034, 43.6267, 1.86555, 260),
('81230', 'Rosières', '31T', 434754, 4877378, 44.0467, 2.18556, 273),
('81231', 'Rouairoux', '31T', 465031, 4815661, 43.4931, 2.5675, 573),
('81232', 'Rouffiac', '31T', 425068, 4859307, 43.8831, 2.06722, 210),
('81233', 'Roumégoux', '31T', 440543, 4850326, 43.8036, 2.26084, 340),
('81234', 'Roussayrolles', '31T', 406583, 4884135, 44.1044, 1.83278, 400),
('81235', 'Saint-Affrique-les-Montagnes', '31T', 435657, 4820907, 43.5383, 2.20361, 240),
('81236', 'Saint-Agnan', '31T', 398061, 4838745, 43.6947, 1.735, 218),
('81237', 'Saint-Amancet', '31T', 427288, 4812878, 43.4653, 2.10111, 270),
('81238', 'Saint-Amans-Soult', '31T', 458596, 4813816, 43.4761, 2.48806, 280),
('81239', 'Saint-Amans-Valtoret', '31T', 458645, 4814556, 43.4828, 2.48861, 280),
('81240', 'Saint-André', '31T', 456635, 4864610, 43.9333, 2.45972, 427),
('81241', 'Saint-Antonin-de-Lacalm', '31T', 444102, 4848351, 43.7861, 2.30528, 450),
('81242', 'Saint-Avit', '31T', 428202, 4818514, 43.5161, 2.11166, 210),
('81243', 'Saint-Beauzile', '31T', 406319, 4874913, 44.0214, 1.83111, 260),
('81244', 'Saint-Benoît-de-Carmaux', '31T', 430577, 4878069, 44.0525, 2.13333, 288),
('81245', 'Saint-Christophe', '31T', 424098, 4889341, 44.1533, 2.05084, 300),
('81246', 'Sainte-Cécile-du-Cayrou', '31T', 403314, 4873444, 44.0078, 1.7939, 250),
('81247', 'Saint-Cirgue', '31T', 449416, 4868210, 43.9653, 2.36944, 424),
('81248', 'Saint-Gauzens', '31T', 411503, 4844477, 43.7481, 1.90083, 150),
('81249', 'Sainte-Gemme', '31T', 436181, 4882270, 44.0908, 2.20278, 360),
('81250', 'Saint-Genest-de-Contest', '31T', 431400, 4845632, 43.7606, 2.14778, 270),
('81251', 'Saint-Germain-des-Prés', '31T', 424533, 4823707, 43.5625, 2.06555, 220),
('81252', 'Saint-Germier', '31T', 437867, 4836559, 43.6794, 2.22916, 300),
('81253', 'Saint-Grégoire', '31T', 440767, 4867973, 43.9625, 2.26166, 320),
('81254', 'Saint-Jean-de-Marcel', '31T', 439751, 4878750, 44.0594, 2.24777, 369),
('81255', 'Saint-Jean-de-Rives', '31T', 401365, 4844157, 43.7439, 1.775, 120),
('81256', 'Saint-Jean-de-Vals', '31T', 440117, 4837773, 43.6906, 2.25694, 280),
('81257', 'Saint-Juéry', '31T', 436631, 4866530, 43.9492, 2.21028, 187),
('81258', 'Saint-Julien-du-Puy', '31T', 424418, 4845244, 43.7564, 2.06111, 220),
('81259', 'Saint-Julien-Gaulène', '31T', 447611, 4871000, 43.9903, 2.34667, 414),
('81260', 'Saint-Lieux-Lafenasse', '31T', 437981, 4846431, 43.7683, 2.22944, 210),
('81261', 'Saint-Lieux-lès-Lavaur', '31T', 400260, 4846549, 43.7653, 1.76084, 117),
('81262', 'Saint-Marcel-Campes', '31T', 421628, 4881594, 44.0833, 2.02111, 300),
('81263', 'Saint-Martin-Laguépie', '31T', 418040, 4888180, 44.1422, 1.97528, 160),
('81264', 'Saint-Michel-Labadié', '31T', 455061, 4872519, 44.0044, 2.43944, 480),
('81265', 'Saint-Michel-de-Vax', '31T', 404032, 4884573, 44.1081, 1.80083, 280),
('81266', 'Saint-Paul-Cap-de-Joux', '31T', 417470, 4833169, 43.6469, 1.97667, 160),
('81267', 'Saint-Pierre-de-Trivisy', '31T', 454565, 4845434, 43.7606, 2.43556, 620),
('81268', 'Saint-Salvi-de-Carcavès', '31T', 467446, 4850449, 43.8064, 2.59527, 700),
('81269', 'Saint-Salvy-de-la-Balme', '31T', 451515, 4828795, 43.6106, 2.39917, 600),
('81270', 'Saint-Sernin-lès-Lavaur', '31T', 417292, 4822342, 43.5494, 1.97611, 220),
('81271', 'Saint-Sulpice', '31T', 394326, 4847505, 43.7731, 1.68694, 116),
('81272', 'Saint-Urcisse', '31T', 388848, 4866234, 43.9408, 1.615, 220),
('81273', 'Saïx', '31T', 434111, 4825704, 43.5814, 2.18389, 180),
('81274', 'Saliès', '31T', 430165, 4860116, 43.8908, 2.13055, 230),
('81275', 'Salles', '31T', 422905, 4880499, 44.0736, 2.03722, 192),
('81276', 'Salvagnac', '31T', 394784, 4862310, 43.9064, 1.68972, 210),
('81277', 'Saussenac', '31T', 442239, 4870613, 43.9864, 2.27972, 379),
('81278', 'Sauveterre', '31T', 463784, 4813539, 43.4739, 2.55222, 320),
('81279', 'La Sauzière-Saint-Jean', '31T', 390130, 4869545, 43.9708, 1.63028, 225),
('81280', 'Le Ségur', '31T', 424843, 4884581, 44.1106, 2.06083, 367),
('81281', 'Sémalens', '31T', 428156, 4826783, 43.5906, 2.11, 160),
('81282', 'Senaux', '31T', 469187, 4845103, 43.7583, 2.61722, 660),
('81283', 'Senouillac', '31T', 415846, 4865928, 43.9417, 1.95139, 200),
('81284', 'Le Sequestre', '31T', 429231, 4862439, 43.9117, 2.11862, 172),
('81285', 'Sérénac', '31T', 446585, 4868109, 43.9642, 2.33416, 391),
('81286', 'Serviès', '31T', 421723, 4834754, 43.6617, 2.02916, 160),
('81287', 'Sieurac', '31T', 427809, 4850668, 43.8056, 2.1025, 248),
('81288', 'Sorèze', '31T', 424263, 4811615, 43.4536, 2.06389, 270),
('81289', 'Soual', '31T', 428653, 4822921, 43.5558, 2.11666, 170),
('81290', 'Souel', '31T', 416261, 4875828, 44.0308, 1.955, 291),
('81291', 'Taïx', '31T', 429792, 4873326, 44.0097, 2.12416, 301),
('81292', 'Tanus', '31T', 445512, 4883822, 44.1056, 2.31917, 420),
('81293', 'Tauriac', '31T', 386891, 4860002, 43.8844, 1.59194, 210),
('81294', 'Técou', '31T', 415462, 4855041, 43.8436, 1.94833, 239),
('81295', 'Teillet', '31T', 446826, 4853698, 43.8344, 2.33861, 488),
('81296', 'Terre-Clapier', '31T', 443651, 4855915, 43.8542, 2.29888, 360),
('81297', 'Terssac', '31T', 425817, 4864359, 43.9286, 2.07584, 150),
('81298', 'Teulat', '31T', 395138, 4832248, 43.6358, 1.7, 190),
('81299', 'Teyssode', '31T', 414180, 4833489, 43.6494, 1.93583, 230),
('81300', 'Tonnac', '31T', 409256, 4879624, 44.0642, 1.86694, 340),
('81301', 'Le Travet', '31T', 446155, 4850710, 43.8075, 2.33056, 460),
('81302', 'Tréban', '31T', 447615, 4882694, 44.0956, 2.34556, 480),
('81303', 'Trébas', '31T', 458493, 4865771, 43.9439, 2.48278, 235),
('81304', 'Trévien', '31T', 429491, 4882647, 44.0936, 2.11917, 300),
('81305', 'Vabre', '31T', 453752, 4837819, 43.6919, 2.42612, 368),
('81306', 'Valderiès', '31T', 438748, 4873699, 44.0139, 2.23584, 389),
('81307', 'Valdurenque', '31T', 444168, 4824193, 43.5686, 2.30861, 205),
('81308', 'Valence-d''Albigeois', '31T', 452515, 4874511, 44.0222, 2.40751, 466),
('81309', 'Vaour', '31T', 403954, 4880717, 44.0733, 1.80056, 420),
('81310', 'Veilhes', '31T', 405163, 4829630, 43.6136, 1.82472, 265),
('81311', 'Vénès', '31T', 435167, 4842108, 43.7292, 2.195, 250),
('81312', 'Verdalle', '31T', 432149, 4818010, 43.5119, 2.16056, 236),
('81313', 'Le Verdier', '31T', 407293, 4871350, 43.9894, 1.84389, 200),
('81314', 'Viane', '31T', 466402, 4842803, 43.7375, 2.58277, 500),
('81315', 'Vielmur-sur-Agout', '31T', 426668, 4830193, 43.6211, 2.09111, 150),
('81316', 'Vieux', '31T', 409750, 4871810, 43.9939, 1.87444, 200),
('81317', 'Villefranche-d''Albigeois', '31T', 446168, 4860583, 43.8964, 2.32973, 420),
('81318', 'Villeneuve-lès-Lavaur', '31T', 402182, 4828130, 43.5997, 1.78805, 190),
('81319', 'Villeneuve-sur-Vère', '31T', 422146, 4872702, 44.0033, 2.02889, 280),
('81320', 'Vindrac-Alayrac', '31T', 412975, 4879851, 44.0667, 1.91333, 160),
('81321', 'Le Vintrou', '31T', 456497, 4819259, 43.525, 2.46167, 580),
('81322', 'Virac', '31T', 423607, 4877653, 44.0481, 2.04639, 311),
('81323', 'Viterbe', '31T', 413841, 4836702, 43.6783, 1.93111, 130),
('81324', 'Viviers-lès-Lavaur', '31T', 403333, 4831723, 43.6322, 1.80167, 250),
('81325', 'Viviers-lès-Montagnes', '31T', 433499, 4822841, 43.5556, 2.17667, 200),
('81326', 'Sainte-Croix', '31T', 425224, 4869148, 43.9717, 2.06778, 220),
('82001', 'Albefeuille-Lagarde', '31T', 360086, 4879218, 44.0528, 1.25333, 90),
('82002', 'Albias', '31T', 376096, 4883065, 44.0903, 1.45222, 91),
('82003', 'Angeville', '31T', 341897, 4873640, 43.9989, 1.02806, 130),
('82004', 'Asques', '31T', 336161, 4875076, 44.0106, 0.956113, 176),
('82005', 'Aucamville', '31T', 356464, 4851732, 43.8047, 1.21555, 150),
('82006', 'Auterive', '31T', 336801, 4858544, 43.8619, 0.969163, 110),
('82007', 'Auty', '31T', 377525, 4894087, 44.1897, 1.4675, 200),
('82008', 'Auvillar', '31T', 331719, 4881764, 44.0697, 0.898609, 106),
('82009', 'Balignac', '31T', 329575, 4869377, 43.9578, 0.875838, 220),
('82010', 'Bardigues', '31T', 330924, 4878543, 44.0406, 0.889718, 150),
('82011', 'Barry-d''Islemade', '31T', 361667, 4881345, 44.0722, 1.2725, 78),
('82012', 'Les Barthes', '31T', 353224, 4884985, 44.1033, 1.16611, 72),
('82013', 'Beaumont-de-Lomagne', '31T', 338355, 4860883, 43.8833, 0.987781, 137),
('82014', 'Beaupuy', '31T', 348599, 4853851, 43.8222, 1.11722, 230),
('82015', 'Belbèse', '31T', 345100, 4862914, 43.9031, 1.07111, 206),
('82016', 'Belvèze', '31T', 347743, 4910423, 44.3311, 1.09028, 178),
('82017', 'Bessens', '31T', 359701, 4859965, 43.8794, 1.25361, 100),
('82018', 'Bioule', '31T', 383169, 4882997, 44.0908, 1.54056, 97),
('82019', 'Boudou', '31T', 340829, 4884779, 44.0989, 1.01139, 172),
('82020', 'Bouillac', '31T', 348739, 4856101, 43.8425, 1.11833, 200),
('82021', 'Bouloc', '31T', 350520, 4906871, 44.2997, 1.12611, 240),
('82022', 'Bourg-de-Visa', '31T', 336832, 4902968, 44.2617, 0.955836, 230),
('82023', 'Bourret', '31T', 352900, 4867428, 43.9453, 1.16694, 87),
('82024', 'Brassac', '31T', 337880, 4897817, 44.2156, 0.970551, 203),
('82025', 'Bressols', '31T', 366842, 4869819, 43.9694, 1.34, 94),
('82026', 'Bruniquel', '31T', 393063, 4878632, 44.0531, 1.665, 120),
('82027', 'Campsas', '31T', 365657, 4861941, 43.8983, 1.32722, 130),
('82028', 'Canals', '31T', 362785, 4856876, 43.8522, 1.29278, 144),
('82029', 'Castanet', '31T', 416418, 4902148, 44.2678, 1.95277, 375),
('82030', 'Castelferrus', '31T', 346716, 4874854, 44.0108, 1.08778, 80),
('82031', 'Castelmayran', '31T', 342845, 4876951, 44.0289, 1.03889, 90),
('82032', 'Castelsagrat', '31T', 335820, 4894442, 44.1847, 0.945836, 160),
('82033', 'Castelsarrasin', '31T', 348305, 4878058, 44.04, 1.10667, 87),
('82034', 'Castéra-Bouzet', '31T', 333176, 4874224, 44.0022, 0.919168, 170),
('82035', 'Caumont', '31T', 339595, 4876134, 44.0208, 0.998606, 130),
('82036', 'Le Causé', '31T', 336685, 4851971, 43.8028, 0.969728, 210),
('82037', 'Caussade', '31T', 383067, 4891054, 44.1633, 1.5375, 110),
('82038', 'Caylus', '31T', 402046, 4899014, 44.2378, 1.77333, 260),
('82039', 'Cayrac', '31T', 377180, 4883939, 44.0983, 1.46555, 87),
('82040', 'Cayriech', '31T', 389167, 4897090, 44.2186, 1.6125, 148),
('82041', 'Cazals', '31T', 397140, 4886035, 44.1203, 1.71445, 140),
('82042', 'Cazes-Mondenard', '31T', 356440, 4898774, 44.2281, 1.20251, 140),
('82043', 'Comberouger', '31T', 347451, 4858353, 43.8625, 1.10167, 150),
('82044', 'Corbarieu', '31T', 369085, 4867150, 43.9458, 1.36861, 89),
('82045', 'Cordes-Tolosannes', '31T', 349135, 4870538, 43.9725, 1.11916, 131),
('82046', 'Coutures', '31T', 338702, 4868747, 43.9542, 0.989716, 200),
('82047', 'Cumont', '31T', 331391, 4860130, 43.875, 0.901385, 234),
('82048', 'Dieupentale', '31T', 360980, 4858148, 43.8633, 1.27, 107),
('82049', 'Donzac', '31T', 325454, 4886434, 44.1103, 0.818886, 72),
('82050', 'Dunes', '31T', 321677, 4884127, 44.0886, 0.772504, 120),
('82051', 'Durfort-Lacapelette', '31T', 350038, 4893546, 44.1797, 1.12388, 170),
('82052', 'Escatalens', '31T', 354872, 4871922, 43.9861, 1.19027, 88),
('82053', 'Escazeaux', '31T', 341131, 4855599, 43.8364, 1.02389, 260),
('82054', 'Espalais', '31T', 332250, 4882522, 44.0767, 0.904995, 60),
('82055', 'Esparsac', '31T', 334729, 4863226, 43.9036, 0.941945, 240),
('82056', 'Espinas', '31T', 406486, 4894506, 44.1978, 1.82972, 340),
('82057', 'Fabas', '31T', 367474, 4857954, 43.8628, 1.35083, 146),
('82058', 'Fajolles', '31T', 340683, 4870428, 43.9697, 1.01389, 160),
('82059', 'Faudoas', '31T', 335740, 4854464, 43.825, 0.957222, 172),
('82060', 'Fauroux', '31T', 340467, 4900995, 44.2447, 1.00195, 130),
('82061', 'Féneyrols', '31T', 405628, 4887328, 44.1331, 1.82027, 140),
('82062', 'Finhan', '31T', 356973, 4863913, 43.9144, 1.21861, 98),
('82063', 'Garganvillar', '31T', 345146, 4871526, 43.9806, 1.06917, 166),
('82064', 'Gariès', '31T', 341657, 4852345, 43.8072, 1.03139, 190),
('82065', 'Gasques', '31T', 333668, 4891038, 44.1536, 0.920005, 140),
('82066', 'Génébrières', '31T', 380047, 4872807, 43.9986, 1.50388, 200),
('82067', 'Gensac', '31T', 336098, 4868934, 43.9553, 0.957225, 170),
('82068', 'Gimat', '31T', 334611, 4857580, 43.8528, 0.942227, 110),
('82069', 'Ginals', '31T', 409347, 4894280, 44.1961, 1.86556, 182),
('82070', 'Glatens', '31T', 332650, 4862229, 43.8942, 0.916386, 260),
('82071', 'Goas', '31T', 336008, 4853562, 43.8169, 0.960829, 209),
('82072', 'Golfech', '31T', 328066, 4886798, 44.1142, 0.851384, 55),
('82073', 'Goudourville', '31T', 334182, 4886734, 44.115, 0.927784, 100),
('82074', 'Gramont', '31T', 320912, 4867382, 43.9378, 0.768614, 170),
('82075', 'Grisolles', '31T', 363175, 4854121, 43.8275, 1.29833, 102),
('82076', 'L''Honor-de-Cos', '31T', 367762, 4886807, 44.1225, 1.34722, 190),
('82077', 'Labarthe', '31T', 366418, 4896125, 44.2061, 1.32806, 130),
('82078', 'Labastide-de-Penne', '31T', 387785, 4904521, 44.2853, 1.59361, 260),
('82079', 'Labastide-Saint-Pierre', '31T', 369007, 4864312, 43.9203, 1.36834, 100),
('82080', 'Labastide-du-Temple', '31T', 355558, 4882865, 44.0847, 1.19584, 84),
('82081', 'Labourgade', '31T', 347744, 4868224, 43.9514, 1.10249, 92),
('82082', 'Lacapelle-Livron', '31T', 402940, 4902427, 44.2686, 1.78389, 316),
('82083', 'Lachapelle', '31T', 327053, 4872746, 43.9875, 0.843329, 140),
('82084', 'Lacour', '31T', 336142, 4906443, 44.2928, 0.946108, 190),
('82085', 'Lacourt-Saint-Pierre', '31T', 360892, 4872040, 43.9883, 1.26528, 106),
('82086', 'Lafitte', '31T', 348981, 4871591, 43.9819, 1.11695, 81),
('82087', 'Lafrançaise', '31T', 359354, 4887691, 44.1289, 1.24194, 180),
('82088', 'Laguépie', '31T', 417867, 4888552, 44.1456, 1.97305, 180),
('82089', 'Lamagistère', '31T', 325877, 4888121, 44.1256, 0.823611, 56),
('82090', 'Lamothe-Capdeville', '31T', 369756, 4881952, 44.0792, 1.37333, 80),
('82091', 'Lamothe-Cumont', '31T', 332559, 4860378, 43.8775, 0.915835, 200),
('82092', 'Lapenche', '31T', 386160, 4897759, 44.2242, 1.57472, 140),
('82093', 'Larrazet', '31T', 346154, 4866007, 43.9311, 1.08333, 92),
('82094', 'Lauzerte', '31T', 351323, 4902191, 44.2578, 1.1375, 221),
('82095', 'Lavaurette', '31T', 393783, 4895656, 44.2064, 1.67056, 291),
('82096', 'La Ville-Dieu-du-Temple', '31T', 357323, 4877055, 44.0328, 1.21944, 95),
('82097', 'Lavit', '31T', 333189, 4869439, 43.9592, 0.920833, 210),
('82098', 'Léojac', '31T', 374381, 4874764, 44.0153, 1.43278, 200),
('82099', 'Lizac', '31T', 354941, 4885163, 44.1053, 1.1875, 71),
('82100', 'Loze', '31T', 403437, 4904549, 44.2878, 1.78972, 339),
('82101', 'Malause', '31T', 337788, 4884174, 44.0928, 0.973607, 80),
('82102', 'Mansonville', '31T', 327053, 4876142, 44.0181, 0.842221, 110),
('82103', 'Marignac', '31T', 332154, 4856746, 43.8447, 0.911939, 160),
('82104', 'Marsac', '31T', 325210, 4867947, 43.9439, 0.821942, 165),
('82105', 'Mas-Grenier', '31T', 355065, 4861361, 43.8911, 1.19556, 109),
('82106', 'Maubec', '31T', 332549, 4852908, 43.8103, 0.918051, 160),
('82107', 'Maumusson', '31T', 331714, 4864938, 43.9183, 0.903885, 251),
('82108', 'Meauzac', '31T', 359148, 4883251, 44.0889, 1.24055, 85),
('82109', 'Merles', '31T', 337274, 4880482, 44.0594, 0.968327, 71),
('82110', 'Mirabel', '31T', 373546, 4889255, 44.1456, 1.41889, 209),
('82111', 'Miramont-de-Quercy', '31T', 345552, 4899268, 44.2303, 1.06611, 207),
('82112', 'Moissac', '31T', 346848, 4885315, 44.105, 1.08639, 70),
('82113', 'Molières', '31T', 369252, 4894617, 44.1931, 1.36389, 185),
('82114', 'Monbéqui', '31T', 358640, 4861531, 43.8933, 1.24, 100),
('82115', 'Monclar-de-Quercy', '31T', 386557, 4869143, 43.9667, 1.58584, 160),
('82116', 'Montagudet', '31T', 347430, 4900768, 44.2442, 1.08917, 216),
('82117', 'Montaigu-de-Quercy', '31T', 341768, 4911676, 44.3411, 1.015, 170),
('82118', 'Montaïn', '31T', 348391, 4867252, 43.9428, 1.11083, 162),
('82119', 'Montalzat', '31T', 380225, 4896013, 44.2075, 1.50083, 300),
('82120', 'Montastruc', '31T', 363470, 4884610, 44.1019, 1.29417, 90),
('82121', 'Montauban', '31T', 368553, 4875155, 44.0178, 1.36, 103),
('82122', 'Montbarla', '31T', 347592, 4898233, 44.2214, 1.09194, 160),
('82123', 'Montbartier', '31T', 361280, 4863945, 43.9156, 1.27222, 132),
('82124', 'Montbeton', '31T', 362372, 4874601, 44.0117, 1.28306, 95),
('82125', 'Montech', '31T', 358284, 4868885, 43.9594, 1.23361, 105),
('82126', 'Monteils', '31T', 385797, 4892148, 44.1736, 1.57139, 123),
('82127', 'Montesquieu', '31T', 344796, 4895458, 44.1958, 1.05777, 194),
('82128', 'Montfermier', '31T', 372971, 4897476, 44.2194, 1.40972, 190),
('82129', 'Montgaillard', '31T', 329576, 4866814, 43.9347, 0.876672, 240),
('82130', 'Montjoi', '31T', 333835, 4895911, 44.1975, 0.920552, 164),
('82131', 'Montpezat-de-Quercy', '31T', 378181, 4899538, 44.2389, 1.47444, 262),
('82132', 'Montricoux', '31T', 389525, 4881344, 44.0769, 1.62028, 105),
('82133', 'Mouillac', '31T', 393496, 4902604, 44.2689, 1.66555, 240),
('82134', 'Nègrepelisse', '31T', 381624, 4881235, 44.0747, 1.52166, 100),
('82135', 'Nohic', '31T', 374702, 4861085, 43.8922, 1.44001, 95),
('82136', 'Orgueil', '31T', 372476, 4862578, 43.9053, 1.41194, 106),
('82137', 'Parisot', '31T', 408787, 4901941, 44.265, 1.85722, 370),
('82138', 'Perville', '31T', 330614, 4894172, 44.1811, 0.880831, 192),
('82139', 'Le Pin', '31T', 337166, 4877891, 44.0361, 0.967777, 120),
('82140', 'Piquecos', '31T', 365537, 4884537, 44.1017, 1.32, 180),
('82141', 'Pommevic', '31T', 334501, 4885274, 44.1019, 0.932226, 70),
('82142', 'Pompignan', '31T', 364405, 4853077, 43.8183, 1.31389, 120),
('82143', 'Poupas', '31T', 326884, 4870527, 43.9675, 0.841946, 170),
('82144', 'Puycornet', '31T', 367563, 4892367, 44.1725, 1.34333, 180),
('82145', 'Puygaillard-de-Quercy', '31T', 391140, 4875423, 44.0239, 1.64166, 200),
('82146', 'Puygaillard-de-Lomagne', '31T', 331344, 4870536, 43.9686, 0.897504, 210),
('82147', 'Puylagarde', '31T', 407443, 4905663, 44.2983, 1.83972, 420),
('82148', 'Puylaroque', '31T', 388989, 4900982, 44.2536, 1.60944, 260),
('82149', 'Réalville', '31T', 378371, 4885769, 44.115, 1.48001, 100),
('82150', 'Reyniès', '31T', 371548, 4864201, 43.9197, 1.4, 96),
('82151', 'Roquecor', '31T', 336183, 4909838, 44.3233, 0.945556, 220),
('82152', 'Saint-Aignan', '31T', 345780, 4875802, 44.0192, 1.07583, 79),
('82153', 'Saint-Amans-du-Pech', '31T', 331486, 4909031, 44.315, 0.88695, 220),
('82154', 'Saint-Amans-de-Pellagal', '31T', 348985, 4898911, 44.2278, 1.10917, 210),
('82155', 'Saint-Antonin-Noble-Val', '31T', 400664, 4889746, 44.1542, 1.75778, 130),
('82156', 'Saint-Arroumex', '31T', 339502, 4873204, 43.9944, 0.998333, 152),
('82157', 'Saint-Beauzeil', '31T', 333985, 4912302, 44.345, 0.917224, 170),
('82158', 'Saint-Cirice', '31T', 327704, 4879737, 44.0506, 0.849167, 74),
('82159', 'Saint-Cirq', '31T', 388544, 4889138, 44.1469, 1.60639, 163),
('82160', 'Saint-Clair', '31T', 335693, 4892037, 44.1631, 0.945, 150),
('82161', 'Saint-Etienne-de-Tulmont', '31T', 376879, 4878544, 44.0497, 1.46305, 108),
('82162', 'Saint-Georges', '31T', 391771, 4897509, 44.2228, 1.645, 200),
('82163', 'Saint-Jean-du-Bouzet', '31T', 329602, 4873050, 43.9908, 0.874996, 170),
('82164', 'Sainte-Juliette', '31T', 354014, 4905464, 44.2878, 1.17028, 160),
('82165', 'Saint-Loup', '31T', 328471, 4883545, 44.085, 0.8575, 84),
('82166', 'Saint-Michel', '31T', 335334, 4877659, 44.0336, 0.945, 130),
('82167', 'Saint-Nauphary', '31T', 374053, 4869245, 43.9656, 1.43, 100),
('82168', 'Saint-Nazaire-de-Valentane', '31T', 341187, 4898662, 44.2239, 1.01167, 200),
('82169', 'Saint-Nicolas-de-la-Grave', '31T', 341626, 4880932, 44.0644, 1.0225, 72),
('82170', 'Saint-Paul-d''Espis', '31T', 337573, 4889860, 44.1439, 0.969171, 80),
('82171', 'Saint-Porquier', '31T', 353846, 4873890, 44.0036, 1.17694, 91),
('82172', 'Saint-Projet', '31T', 403821, 4906549, 44.3058, 1.79416, 320),
('82173', 'Saint-Sardos', '31T', 350179, 4862488, 43.9003, 1.13444, 175),
('82174', 'Saint-Vincent', '31T', 377961, 4891270, 44.1644, 1.47361, 178),
('82175', 'Saint-Vincent-Lespinasse', '31T', 336194, 4887177, 44.1194, 0.952774, 160),
('82176', 'La Salvetat-Belmontet', '31T', 382408, 4868999, 43.9647, 1.53417, 140),
('82177', 'Sauveterre', '31T', 362055, 4903006, 44.2672, 1.27166, 210),
('82178', 'Savenès', '31T', 355231, 4854629, 43.8306, 1.19945, 150),
('82179', 'Septfonds', '31T', 389582, 4892731, 44.1794, 1.61861, 174),
('82180', 'Sérignac', '31T', 341313, 4865072, 43.9217, 1.02333, 210),
('82181', 'Sistels', '31T', 322575, 4881108, 44.0617, 0.784727, 180),
('82182', 'Touffailles', '31T', 344288, 4903960, 44.2722, 1.04889, 160),
('82183', 'Tréjouls', '31T', 359264, 4903189, 44.2683, 1.23666, 190),
('82184', 'Vaïssac', '31T', 385170, 4876604, 44.0336, 1.56694, 140),
('82185', 'Valeilles', '31T', 334547, 4914356, 44.3636, 0.923617, 150),
('82186', 'Valence', '31T', 331031, 4886196, 44.1094, 0.888605, 63),
('82187', 'Varen', '31T', 411623, 4890176, 44.1594, 1.89472, 149),
('82188', 'Varennes', '31T', 379384, 4862078, 43.9019, 1.49805, 190),
('82189', 'Vazerac', '31T', 362942, 4894499, 44.1908, 1.285, 110),
('82190', 'Verdun-sur-Garonne', '31T', 358167, 4857127, 43.8536, 1.23528, 100),
('82191', 'Verfeil', '31T', 410398, 4893248, 44.1869, 1.87888, 214),
('82192', 'Verlhac-Tescou', '31T', 382697, 4865167, 43.9303, 1.53861, 186),
('82193', 'Vigueron', '31T', 343759, 4860939, 43.885, 1.055, 220),
('82194', 'Villebrumier', '31T', 376051, 4862819, 43.9081, 1.45639, 119),
('82195', 'Villemade', '31T', 362877, 4881752, 44.0761, 1.2875, 78),
('83001', 'Les Adrets-de-l''Estérel', '32T', 325270, 4821512, 43.5261, 6.83778, 250),
('83002', 'Aiguines', '32T', 278042, 4850704, 43.7761, 6.24195, 800),
('83003', 'Ampus', '32T', 288717, 4831611, 43.6075, 6.38194, 600),
('83004', 'Les Arcs', '32T', 296012, 4815420, 43.4639, 6.47833, 60),
('83005', 'Artignosc-sur-Verdon', '32T', 265573, 4843007, 43.7031, 6.09056, 520),
('83006', 'Artigues', '31T', 726891, 4830639, 43.5942, 5.81083, 465),
('83007', 'Aups', '32T', 276085, 4834369, 43.6286, 6.22445, 500),
('83008', 'Bagnols-en-Forêt', '32T', 314088, 4823356, 43.54, 6.69888, 270),
('83009', 'Bandol', '31T', 723991, 4779798, 43.1378, 5.75417, 15),
('83010', 'Bargème', '32T', 304563, 4844809, 43.7306, 6.57333, 1080),
('83011', 'Bargemon', '32T', 302388, 4832583, 43.62, 6.55083, 460),
('83012', 'Barjols', '32T', 258411, 4827106, 43.5578, 6.00889, 300),
('83013', 'La Bastide', '32T', 308733, 4844997, 43.7333, 6.625, 1000),
('83014', 'Baudinard-sur-Verdon', '32T', 269069, 4844306, 43.7158, 6.13333, 620),
('83015', 'Bauduen', '32T', 272447, 4846136, 43.7333, 6.17444, 490),
('83016', 'Le Beausset', '31T', 727743, 4786624, 43.1981, 5.80305, 170),
('83017', 'Belgentier', '32T', 256616, 4792201, 43.2433, 6.00223, 150),
('83018', 'Besse-sur-Issole', '32T', 271264, 4803366, 43.3483, 6.17778, 245),
('83019', 'Bormes-les-Mimosas', '32T', 284010, 4781083, 43.1517, 6.34361, 160),
('83020', 'Le Bourguet', '32T', 300312, 4850895, 43.7842, 6.51833, 841),
('83021', 'Bras', '31T', 738852, 4817524, 43.4725, 5.95306, 270),
('83022', 'Brenon', '32T', 302119, 4849204, 43.7694, 6.54139, 919),
('83023', 'Brignoles', '32T', 262221, 4810320, 43.4081, 6.06333, 220),
('83025', 'Brue-Auriac', '31T', 738049, 4823674, 43.5281, 5.94583, 262),
('83026', 'Cabasse', '32T', 275088, 4811948, 43.4267, 6.22138, 200),
('83027', 'La Cadière-d''Azur', '31T', 723784, 4786091, 43.1944, 5.75417, 150),
('83028', 'Callas', '32T', 301293, 4829682, 43.5936, 6.53834, 400),
('83029', 'Callian', '32T', 318803, 4832428, 43.6228, 6.75416, 320),
('83030', 'Camps-la-Source', '32T', 264811, 4807727, 43.3856, 6.09639, 280),
('83031', 'Le Cannet-des-Maures', '32T', 284747, 4807803, 43.3922, 6.34222, 124),
('83032', 'Carcès', '32T', 272241, 4817603, 43.4767, 6.18389, 140),
('83033', 'Carnoules', '32T', 272156, 4798395, 43.3039, 6.19084, 210),
('83034', 'Carqueiranne', '32T', 262040, 4775546, 43.0953, 6.07611, 10),
('83035', 'Le Castellet', '31T', 725586, 4786954, 43.2017, 5.77667, 220),
('83036', 'Cavalaire-sur-Mer', '32T', 299440, 4783019, 43.1733, 6.5325, 20),
('83037', 'La Celle', '32T', 260412, 4808839, 43.3942, 6.04167, 260),
('83038', 'Châteaudouble', '32T', 294424, 4830383, 43.5981, 6.45305, 540),
('83039', 'Châteauvert', '32T', 259641, 4820667, 43.5003, 6.02695, 210),
('83040', 'Châteauvieux', '32T', 305075, 4850043, 43.7778, 6.57778, 1040),
('83041', 'Claviers', '32T', 303449, 4830514, 43.6017, 6.56472, 400),
('83042', 'Cogolin', '32T', 300010, 4791617, 43.2508, 6.53639, 20),
('83043', 'Collobrières', '32T', 281758, 4790512, 43.2358, 6.31222, 160),
('83044', 'Comps-sur-Artuby', '32T', 299462, 4842706, 43.7103, 6.51084, 900),
('83045', 'Correns', '32T', 264043, 4819244, 43.4889, 6.08194, 190),
('83046', 'Cotignac', '32T', 269718, 4823403, 43.5281, 6.15028, 230),
('83047', 'La Crau', '32T', 261972, 4781355, 43.1475, 6.07278, 40),
('83048', 'La Croix-Valmer', '32T', 302637, 4786476, 43.2053, 6.57056, 70),
('83049', 'Cuers', '32T', 262228, 4791261, 43.2367, 6.07167, 139),
('83050', 'Draguignan', '32T', 295346, 4823808, 43.5392, 6.46695, 200),
('83051', 'Entrecasteaux', '32T', 276918, 4821646, 43.5144, 6.24, 159),
('83052', 'Esparron', '31T', 730057, 4830623, 43.5931, 5.85, 430),
('83053', 'Évenos', '31T', 731323, 4783008, 43.1644, 5.84555, 336),
('83054', 'La Farlède', '32T', 259653, 4783598, 43.1669, 6.04333, 80),
('83055', 'Fayence', '32T', 313968, 4832776, 43.6247, 6.69417, 320),
('83056', 'Figanières', '32T', 297712, 4827041, 43.5689, 6.495, 320),
('83057', 'Flassans-sur-Issole', '32T', 275104, 4805646, 43.37, 6.22417, 228),
('83058', 'Flayosc', '32T', 289649, 4823398, 43.5339, 6.39666, 300),
('83059', 'Forcalqueiret', '32T', 263423, 4802184, 43.3353, 6.08167, 303),
('83060', 'Fox-Amphoux', '32T', 266014, 4829987, 43.5861, 6.10166, 534),
('83061', 'Fréjus', '32T', 316868, 4811579, 43.4347, 6.73723, 20),
('83062', 'La Garde', '32T', 256841, 4778911, 43.1239, 6.01084, 30),
('83063', 'La Garde-Freinet', '32T', 294869, 4799243, 43.3181, 6.47028, 350),
('83064', 'Garéoult', '32T', 260553, 4801359, 43.3269, 6.04667, 307),
('83065', 'Gassin', '32T', 304036, 4788783, 43.2264, 6.58695, 160),
('83066', 'Ginasservis', '31T', 729693, 4839259, 43.6708, 5.84917, 400),
('83067', 'Gonfaron', '32T', 280079, 4799986, 43.3206, 6.28778, 166),
('83068', 'Grimaud', '32T', 299140, 4794236, 43.2742, 6.52473, 70),
('83069', 'Hyères', '32T', 266388, 4778237, 43.1208, 6.12834, 30),
('83070', 'Le Lavandou', '32T', 285976, 4779600, 43.1389, 6.36833, 20),
('83071', 'La Londe-les-Maures', '32T', 275294, 4780068, 43.14, 6.23694, 10),
('83072', 'Lorgues', '32T', 286572, 4819171, 43.495, 6.36028, 200),
('83073', 'Le Luc', '32T', 282421, 4808279, 43.3958, 6.31334, 180),
('83074', 'La Martre', '32T', 306778, 4849376, 43.7722, 6.59917, 980),
('83075', 'Les Mayons', '32T', 285885, 4798904, 43.3125, 6.35973, 180),
('83076', 'Mazaugues', '31T', 736712, 4803486, 43.3469, 5.92056, 420),
('83077', 'Méounes-lès-Montrieux', '31T', 740889, 4796344, 43.2814, 5.96889, 250),
('83078', 'Moissac-Bellevue', '32T', 271432, 4837398, 43.6544, 6.16556, 590),
('83079', 'La Môle', '32T', 294294, 4786971, 43.2075, 6.46777, 30),
('83080', 'Mons', '32T', 315670, 4840016, 43.6903, 6.71277, 800),
('83081', 'Montauroux', '32T', 319619, 4831911, 43.6183, 6.76444, 360),
('83082', 'Montferrat', '32T', 296672, 4831982, 43.6131, 6.48028, 500),
('83083', 'Montfort-sur-Argens', '32T', 267179, 4817591, 43.475, 6.12139, 170),
('83084', 'Montmeyan', '32T', 263071, 4836917, 43.6475, 6.06222, 482),
('83085', 'La Motte', '32T', 300668, 4818461, 43.4925, 6.53472, 70),
('83086', 'Le Muy', '32T', 303161, 4816072, 43.4717, 6.56639, 30),
('83087', 'Nans-les-Pins', '31T', 725474, 4805882, 43.3719, 5.78305, 393),
('83088', 'Néoules', '32T', 257709, 4799422, 43.3086, 6.0125, 335),
('83089', 'Ollières', '31T', 728967, 4818478, 43.4842, 5.83139, 328),
('83090', 'Ollioules', '31T', 731518, 4779956, 43.1369, 5.84667, 50),
('83091', 'Pierrefeu-du-Var', '32T', 268028, 4789825, 43.2256, 6.14361, 152),
('83092', 'Pignans', '32T', 275029, 4797989, 43.3011, 6.22639, 170),
('83093', 'Plan-d''Aups-Sainte-Baume', '31T', 720293, 4801017, 43.3297, 5.71722, 686),
('83094', 'Plan-de-la-Tour', '32T', 301333, 4801304, 43.3383, 6.54917, 60),
('83095', 'Pontevès', '32T', 260167, 4826579, 43.5536, 6.03084, 406),
('83096', 'Pourcieux', '31T', 725404, 4816751, 43.4697, 5.78667, 355),
('83097', 'Pourrières', '31T', 721077, 4820407, 43.5039, 5.73472, 302),
('83098', 'Le Pradet', '32T', 257584, 4776907, 43.1061, 6.02083, 25),
('83099', 'Puget-sur-Argens', '32T', 312838, 4813912, 43.4547, 6.68667, 20),
('83100', 'Puget-Ville', '32T', 267660, 4796880, 43.2889, 6.13611, 190),
('83101', 'Ramatuelle', '32T', 306188, 4787455, 43.215, 6.61389, 130),
('83102', 'Régusse', '32T', 268681, 4837616, 43.6556, 6.13139, 543),
('83103', 'Le Revest-les-Eaux', '31T', 737688, 4784617, 43.1769, 5.92444, 300),
('83104', 'Rians', '31T', 722791, 4831737, 43.6053, 5.76055, 370),
('83105', 'Riboux', '31T', 723323, 4798028, 43.3019, 5.75333, 520),
('83106', 'Rocbaron', '32T', 264086, 4798578, 43.3031, 6.09139, 380),
('83107', 'Roquebrune-sur-Argens', '32T', 308844, 4812697, 43.4428, 6.63777, 16),
('83108', 'La Roquebrussanne', '31T', 741192, 4803027, 43.3414, 5.97556, 365),
('83109', 'La Roque-Esclapon', '32T', 308996, 4844001, 43.7244, 6.62861, 960),
('83110', 'Rougiers', '31T', 730935, 4808290, 43.3919, 5.85139, 360),
('83111', 'Sainte-Anastasie-sur-Issole', '32T', 266913, 4802712, 43.3411, 6.12444, 295),
('83112', 'Saint-Cyr-sur-Mer', '31T', 720165, 4784799, 43.1839, 5.70916, 20),
('83113', 'Saint-Julien', '31T', 734410, 4841585, 43.6903, 5.90861, 550),
('83114', 'Saint-Martin', '31T', 732991, 4830168, 43.5881, 5.88611, 460),
('83115', 'Sainte-Maxime', '32T', 308410, 4798167, 43.3119, 6.6375, 20),
('83116', 'Saint-Maximin-la-Sainte-Baume', '31T', 731555, 4815138, 43.4533, 5.86194, 297),
('83117', 'Saint-Paul-en-Forêt', '32T', 313544, 4826397, 43.5672, 6.69111, 300),
('83118', 'Saint-Raphaël', '32T', 319382, 4810554, 43.4261, 6.76861, 20),
('83119', 'Saint-Tropez', '32T', 308767, 4793248, 43.2678, 6.64361, 20),
('83120', 'Saint-Zacharie', '31T', 719302, 4807254, 43.3861, 5.7075, 265),
('83121', 'Salernes', '32T', 276477, 4827282, 43.565, 6.23223, 220),
('83122', 'Les Salles-sur-Verdon', '32T', 274656, 4850509, 43.7733, 6.2, 500),
('83123', 'Sanary-sur-Mer', '31T', 727790, 4777792, 43.1186, 5.8, 10),
('83124', 'Seillans', '32T', 309861, 4834281, 43.6372, 6.64277, 400),
('83125', 'Seillons-Source-d''Argens', '31T', 733208, 4820044, 43.4969, 5.88444, 380),
('83126', 'La Seyne-sur-Mer', '31T', 734456, 4776073, 43.1011, 5.88111, 10),
('83127', 'Signes', '31T', 732285, 4797187, 43.2917, 5.86334, 350),
('83128', 'Sillans-la-Cascade', '32T', 272270, 4827764, 43.5681, 6.17999, 377),
('83129', 'Six-Fours-les-Plages', '31T', 730866, 4775147, 43.0939, 5.83667, 30);
INSERT INTO `ods_communes` (`oc_code_insee`, `oc_nom`, `oc_secteur`, `oc_x_utm`, `oc_y_utm`, `oc_latitude`, `oc_longitude`, `oc_altitude`) VALUES
('83130', 'Solliès-Pont', '32T', 259567, 4786258, 43.1908, 6.04112, 80),
('83131', 'Solliès-Toucas', '32T', 258246, 4787880, 43.205, 6.02417, 90),
('83132', 'Solliès-Ville', '32T', 259302, 4785155, 43.1808, 6.03834, 230),
('83133', 'Tanneron', '32T', 328462, 4828623, 43.5908, 6.87501, 370),
('83134', 'Taradeau', '32T', 291843, 4814436, 43.4539, 6.42722, 74),
('83135', 'Tavernes', '32T', 259157, 4831002, 43.5931, 6.01639, 360),
('83136', 'Le Thoronet', '32T', 281864, 4814751, 43.4539, 6.30388, 140),
('83137', 'Toulon', '31T', 738629, 4779059, 43.1267, 5.93361, 30),
('83138', 'Tourrettes', '32T', 314549, 4832699, 43.6242, 6.70139, 320),
('83139', 'Tourtour', '32T', 282196, 4829812, 43.5894, 6.30195, 655),
('83140', 'Tourves', '31T', 736742, 4810345, 43.4086, 5.92389, 300),
('83141', 'Trans-en-Provence', '32T', 296818, 4819749, 43.5031, 6.48667, 140),
('83142', 'Trigance', '32T', 294268, 4848608, 43.7619, 6.44417, 800),
('83143', 'Le Val', '32T', 263177, 4813807, 43.4397, 6.07361, 240),
('83144', 'La Valette-du-Var', '31T', 742647, 4780591, 43.1392, 5.98361, 50),
('83145', 'Varages', '31T', 739008, 4831461, 43.5978, 5.96111, 330),
('83146', 'La Verdière', '31T', 736873, 4835957, 43.6389, 5.93667, 430),
('83147', 'Vérignon', '32T', 280008, 4837018, 43.6536, 6.27194, 840),
('83148', 'Vidauban', '32T', 292112, 4811463, 43.4272, 6.43167, 60),
('83149', 'Villecroze', '32T', 279997, 4829174, 43.5831, 6.275, 340),
('83150', 'Vinon-sur-Verdon', '31T', 726646, 4845148, 43.7247, 5.81389, 290),
('83151', 'Vins-sur-Caramy', '32T', 268815, 4813488, 43.4386, 6.14333, 210),
('83152', 'Rayol-Canadel-sur-Mer', '32T', 295284, 4781569, 43.1592, 6.48195, 100),
('83153', 'Saint-Mandrier-sur-Mer', '31T', 738349, 4773490, 43.0767, 5.92778, 10),
('83154', 'Saint-Antonin-du-Var', '32T', 280822, 4820746, 43.5075, 6.28861, 190),
('84001', 'Althen-des-Paluds', '31T', 656953, 4874230, 44.0044, 4.95778, 30),
('84002', 'Ansouis', '31T', 698392, 4845575, 43.7367, 5.46361, 220),
('84003', 'Apt', '31T', 692643, 4860846, 43.8756, 5.39777, 222),
('84004', 'Aubignan', '31T', 662196, 4884822, 44.0986, 5.02639, 60),
('84005', 'Aurel', '31T', 694244, 4889148, 44.1297, 5.42805, 800),
('84006', 'Auribeau', '31T', 697747, 4856735, 43.8372, 5.45972, 594),
('84007', 'Avignon', '31T', 645270, 4867480, 43.9461, 4.81028, 19),
('84008', 'Le Barroux', '31T', 667887, 4889349, 44.1381, 5.09889, 300),
('84009', 'La Bastide-des-Jourdans', '31T', 711911, 4851396, 43.7853, 5.63362, 400),
('84010', 'La Bastidonne', '31T', 706904, 4841850, 43.7008, 5.56778, 300),
('84011', 'Le Beaucet', '31T', 670013, 4872392, 43.985, 5.12, 230),
('84012', 'Beaumes-de-Venise', '31T', 662463, 4887515, 44.1228, 5.03056, 100),
('84013', 'Beaumettes', '31T', 677043, 4858745, 43.8606, 5.20306, 125),
('84014', 'Beaumont-de-Pertuis', '31T', 716663, 4846298, 43.7381, 5.69055, 340),
('84015', 'Beaumont-du-Ventoux', '31T', 673128, 4894640, 44.1844, 5.16611, 390),
('84016', 'Bédarrides', '31T', 652182, 4878193, 44.0411, 4.89944, 27),
('84017', 'Bédoin', '31T', 674371, 4887974, 44.1242, 5.17944, 320),
('84018', 'Blauvac', '31T', 676268, 4877742, 44.0317, 5.19972, 418),
('84019', 'Bollène', '31T', 639766, 4904989, 44.2847, 4.75167, 55),
('84020', 'Bonnieux', '31T', 685820, 4854847, 43.8233, 5.31083, 400),
('84021', 'Brantes', '31T', 686350, 4896176, 44.195, 5.33195, 461),
('84022', 'Buisson', '31T', 659504, 4904915, 44.28, 4.99888, 200),
('84023', 'Buoux', '31T', 691223, 4855864, 43.8311, 5.37833, 451),
('84024', 'Cabrières-d''Aigues', '31T', 701005, 4850996, 43.7847, 5.49806, 400),
('84025', 'Cabrières-d''Avignon', '31T', 672712, 4862088, 43.8917, 5.15028, 180),
('84026', 'Cadenet', '31T', 691329, 4845184, 43.735, 5.37584, 170),
('84027', 'Caderousse', '31T', 640549, 4884911, 44.1039, 4.75611, 28),
('84028', 'Cairanne', '31T', 654415, 4899700, 44.2342, 4.93361, 170),
('84029', 'Camaret-sur-Aigues', '31T', 649820, 4891969, 44.1656, 4.87389, 70),
('84030', 'Caromb', '31T', 668696, 4886405, 44.1114, 5.10805, 200),
('84031', 'Carpentras', '31T', 664113, 4880177, 44.0564, 5.04888, 85),
('84032', 'Caseneuve', '31T', 699611, 4862380, 43.8875, 5.485, 540),
('84033', 'Castellet', '31T', 699233, 4857119, 43.8403, 5.47833, 473),
('84034', 'Caumont-sur-Durance', '31T', 656372, 4861991, 43.8944, 4.94694, 80),
('84035', 'Cavaillon', '31T', 663772, 4855224, 43.8319, 5.03695, 70),
('84036', 'Châteauneuf-de-Gadagne', '31T', 656240, 4865724, 43.9281, 4.94639, 100),
('84037', 'Châteauneuf-du-Pape', '31T', 646827, 4879707, 44.0558, 4.83306, 100),
('84038', 'Cheval-Blanc', '31T', 666200, 4851950, 43.8019, 5.06611, 80),
('84039', 'Courthézon', '31T', 650969, 4883536, 44.0894, 4.88584, 40),
('84040', 'Crestet', '31T', 666508, 4898143, 44.2175, 5.08445, 340),
('84041', 'Crillon-le-Brave', '31T', 671610, 4887283, 44.1186, 5.14473, 344),
('84042', 'Cucuron', '31T', 696370, 4849622, 43.7736, 5.44, 360),
('84043', 'Entraigues-sur-la-Sorgue', '31T', 654504, 4874141, 44.0042, 4.92723, 30),
('84044', 'Entrechaux', '31T', 670833, 4898316, 44.2181, 5.13861, 280),
('84045', 'Faucon', '31T', 671307, 4903114, 44.2611, 5.14611, 360),
('84046', 'Flassan', '31T', 678381, 4885271, 44.0989, 5.22861, 440),
('84047', 'Gargas', '31T', 689526, 4863628, 43.9014, 5.36, 273),
('84048', 'Gignac', '31T', 702980, 4866157, 43.9206, 5.52834, 460),
('84049', 'Gigondas', '31T', 660396, 4892033, 44.1639, 5.00611, 270),
('84050', 'Gordes', '31T', 676735, 4864448, 43.9119, 5.20112, 340),
('84051', 'Goult', '31T', 680222, 4859324, 43.865, 5.24278, 240),
('84052', 'Grambois', '31T', 708456, 4848816, 43.7631, 5.58972, 360),
('84053', 'Grillon', '31T', 653771, 4917621, 44.3956, 4.93083, 172),
('84054', 'L''Isle-sur-la-Sorgue', '31T', 664663, 4865248, 43.9219, 5.05111, 55),
('84055', 'Jonquerettes', '31T', 655140, 4867889, 43.9478, 4.93333, 80),
('84056', 'Jonquières', '31T', 652057, 4886494, 44.1158, 4.90027, 55),
('84057', 'Joucas', '31T', 680837, 4866257, 43.9272, 5.25278, 272),
('84058', 'Lacoste', '31T', 682907, 4855908, 43.8336, 5.275, 300),
('84059', 'Lafare', '31T', 664103, 4890426, 44.1486, 5.05195, 160),
('84060', 'Lagarde-d''Apt', '31T', 698440, 4873122, 43.9844, 5.47444, 1089),
('84061', 'Lagarde-Paréol', '31T', 647838, 4899054, 44.2297, 4.85111, 150),
('84062', 'Lagnes', '31T', 669959, 4862326, 43.8944, 5.11611, 120),
('84063', 'Lamotte-du-Rhône', '31T', 634178, 4902804, 44.2661, 4.68111, 41),
('84064', 'Lapalud', '31T', 634775, 4907230, 44.3058, 4.68973, 45),
('84065', 'Lauris', '31T', 686300, 4846462, 43.7478, 5.31388, 160),
('84066', 'Lioux', '31T', 684787, 4868650, 43.9478, 5.30278, 360),
('84067', 'Loriol-du-Comtat', '31T', 660250, 4882490, 44.0781, 5.00139, 40),
('84068', 'Lourmarin', '31T', 690297, 4848396, 43.7642, 5.36417, 220),
('84069', 'Malaucène', '31T', 670579, 4893586, 44.1756, 5.13389, 340),
('84070', 'Malemort-du-Comtat', '31T', 673067, 4876670, 44.0228, 5.15945, 208),
('84071', 'Maubec', '31T', 672044, 4856822, 43.8444, 5.14028, 137),
('84072', 'Mazan', '31T', 670561, 4880526, 44.0581, 5.12944, 150),
('84073', 'Ménerbes', '31T', 677253, 4855878, 43.8347, 5.20472, 220),
('84074', 'Mérindol', '31T', 677440, 4847208, 43.7567, 5.20417, 160),
('84075', 'Méthamis', '31T', 678322, 4875945, 44.015, 5.22472, 300),
('84076', 'Mirabeau', '31T', 714076, 4842478, 43.7044, 5.65694, 320),
('84077', 'Modène', '31T', 669965, 4885512, 44.1031, 5.12361, 180),
('84078', 'Mondragon', '31T', 636989, 4899899, 44.2394, 4.71555, 50),
('84079', 'Monieux', '31T', 688950, 4882200, 44.0686, 5.35944, 670),
('84080', 'Monteux', '31T', 660098, 4877763, 44.0356, 4.99806, 45),
('84081', 'Morières-lès-Avignon', '31T', 652925, 4867252, 43.9425, 4.90556, 34),
('84082', 'Mormoiron', '31T', 674958, 4881783, 44.0683, 5.18472, 240),
('84083', 'Mornas', '31T', 638097, 4895786, 44.2022, 4.72834, 40),
('84084', 'La Motte-d''Aigues', '31T', 703012, 4849729, 43.7728, 5.5225, 380),
('84085', 'Murs', '31T', 679890, 4869071, 43.9528, 5.24194, 501),
('84086', 'Oppède', '31T', 673852, 4855202, 43.8294, 5.16222, 140),
('84087', 'Orange', '31T', 644782, 4888676, 44.1369, 4.81, 50),
('84088', 'Pernes-les-Fontaines', '31T', 664984, 4873839, 43.9992, 5.05778, 80),
('84089', 'Pertuis', '31T', 701760, 4840828, 43.6931, 5.50361, 200),
('84090', 'Peypin-d''Aigues', '31T', 706782, 4851574, 43.7883, 5.57, 400),
('84091', 'Piolenc', '31T', 640927, 4893253, 44.1789, 4.76306, 40),
('84092', 'Le Pontet', '31T', 649396, 4869455, 43.9631, 4.86223, 23),
('84093', 'Puget', '31T', 680030, 4847401, 43.7578, 5.23638, 140),
('84094', 'Puyméras', '31T', 669932, 4903974, 44.2692, 5.12917, 364),
('84095', 'Puyvert', '31T', 688677, 4847887, 43.76, 5.34388, 200),
('84096', 'Rasteau', '31T', 658680, 4899555, 44.2319, 4.98694, 230),
('84097', 'Richerenches', '31T', 652425, 4913669, 44.3603, 4.91278, 150),
('84098', 'Roaix', '31T', 660770, 4901242, 44.2467, 5.01361, 180),
('84099', 'Robion', '31T', 669898, 4856860, 43.8453, 5.11361, 140),
('84100', 'La Roque-Alric', '31T', 665273, 4889838, 44.1431, 5.06638, 365),
('84101', 'La Roque-sur-Pernes', '31T', 668981, 4871779, 43.9797, 5.10694, 300),
('84102', 'Roussillon', '31T', 684120, 4863753, 43.9039, 5.29278, 320),
('84103', 'Rustrel', '31T', 699529, 4866608, 43.9256, 5.48556, 420),
('84104', 'Sablet', '31T', 660427, 4895306, 44.1933, 5.0075, 160),
('84105', 'Saignon', '31T', 695089, 4859713, 43.8647, 5.42778, 460),
('84106', 'Sainte-Cécile-les-Vignes', '31T', 650677, 4901064, 44.2472, 4.88722, 105),
('84107', 'Saint-Christol', '31T', 699761, 4878134, 44.0292, 5.49278, 860),
('84108', 'Saint-Didier', '31T', 669196, 4874717, 44.0061, 5.11056, 160),
('84109', 'Saint-Hippolyte-le-Graveyron', '31T', 665973, 4887664, 44.1233, 5.07444, 160),
('84110', 'Saint-Léger-du-Ventoux', '31T', 681901, 4897996, 44.2125, 5.27695, 420),
('84111', 'Saint-Marcellin-lès-Vaison', '31T', 667511, 4899712, 44.2314, 5.0975, 234),
('84112', 'Saint-Martin-de-Castillon', '31T', 701933, 4859485, 43.8608, 5.51278, 460),
('84113', 'Saint-Martin-de-la-Brasque', '31T', 704141, 4849424, 43.7697, 5.53639, 360),
('84114', 'Saint-Pantaléon', '31T', 678119, 4861089, 43.8814, 5.21722, 220),
('84115', 'Saint-Pierre-de-Vassols', '31T', 671105, 4885294, 44.1008, 5.13777, 212),
('84116', 'Saint-Romain-en-Viennois', '31T', 668548, 4902579, 44.2569, 5.11139, 260),
('84117', 'Saint-Roman-de-Malegarde', '31T', 656847, 4903832, 44.2708, 4.96528, 160),
('84118', 'Saint-Saturnin-lès-Apt', '31T', 691442, 4868407, 43.9439, 5.38555, 410),
('84119', 'Saint-Saturnin-lès-Avignon', '31T', 654981, 4868997, 43.9578, 4.93167, 60),
('84120', 'Saint-Trinit', '31T', 697379, 4886246, 44.1028, 5.46612, 840),
('84121', 'Sannes', '31T', 700559, 4847956, 43.7575, 5.49138, 310),
('84122', 'Sarrians', '31T', 657858, 4882957, 44.0828, 4.97167, 35),
('84123', 'Sault', '31T', 692855, 4884938, 44.0922, 5.40916, 750),
('84124', 'Saumane-de-Vaucluse', '31T', 669327, 4866971, 43.9364, 5.10972, 163),
('84125', 'Savoillan', '31T', 689727, 4894636, 44.1803, 5.37362, 520),
('84126', 'Séguret', '31T', 661610, 4896878, 44.2072, 5.02278, 240),
('84127', 'Sérignan-du-Comtat', '31T', 647428, 4894600, 44.1897, 4.84473, 76),
('84128', 'Sivergues', '31T', 693286, 4855646, 43.8286, 5.40389, 568),
('84129', 'Sorgues', '31T', 650434, 4874757, 44.0106, 4.87666, 26),
('84130', 'Suzette', '31T', 665469, 4892652, 44.1683, 5.06972, 419),
('84131', 'Taillades', '31T', 667792, 4856220, 43.84, 5.08722, 100),
('84132', 'Le Thor', '31T', 660316, 4865975, 43.9294, 4.99722, 50),
('84133', 'La Tour-d''Aigues', '31T', 705272, 4844641, 43.7264, 5.54861, 250),
('84134', 'Travaillan', '31T', 651953, 4893900, 44.1825, 4.90111, 86),
('84135', 'Uchaux', '31T', 643916, 4896744, 44.2097, 4.80139, 90),
('84136', 'Vacqueyras', '31T', 658818, 4889277, 44.1394, 4.98556, 120),
('84137', 'Vaison-la-Romaine', '31T', 665349, 4900955, 44.2431, 5.07083, 200),
('84138', 'Valréas', '31T', 658690, 4916535, 44.3847, 4.99223, 240),
('84139', 'Fontaine-de-Vaucluse', '31T', 670970, 4865562, 43.9233, 5.12972, 90),
('84140', 'Vaugines', '31T', 694519, 4850155, 43.7789, 5.41722, 380),
('84141', 'Vedène', '31T', 652696, 4871352, 43.9794, 4.90388, 50),
('84142', 'Velleron', '31T', 662958, 4869220, 43.9581, 5.03111, 62),
('84143', 'Venasque', '31T', 672274, 4873747, 43.9967, 5.14861, 268),
('84144', 'Viens', '31T', 706232, 4863508, 43.8958, 5.56778, 600),
('84145', 'Villars', '31T', 693198, 4866327, 43.9247, 5.40666, 310),
('84146', 'Villedieu', '31T', 662352, 4905479, 44.2844, 5.03473, 250),
('84147', 'Villelaure', '31T', 696306, 4842673, 43.7111, 5.43667, 183),
('84148', 'Villes-sur-Auzon', '31T', 678968, 4880872, 44.0592, 5.23444, 290),
('84149', 'Violès', '31T', 656356, 4891843, 44.1631, 4.95556, 96),
('84150', 'Visan', '31T', 655621, 4908743, 44.3153, 4.95139, 190),
('84151', 'Vitrolles-en-Lubéron', '31T', 708778, 4854261, 43.8119, 5.59583, 500),
('85001', 'L''Aiguillon-sur-Mer', '30T', 630544, 5132390, 46.3325, -1.30389, 1),
('85002', 'L''Aiguillon-sur-Vie', '30T', 589665, 5169222, 46.6706, -1.82778, 27),
('85003', 'Aizenay', '30T', 606399, 5177183, 46.7397, -1.60723, 45),
('85004', 'Angles', '30T', 622743, 5140595, 46.4078, -1.40305, 5),
('85005', 'Antigny', '30T', 670831, 5165634, 46.6225, -0.768616, 110),
('85006', 'Apremont', '30T', 596174, 5178153, 46.75, -1.74083, 20),
('85008', 'Aubigny', '30T', 618530, 5161569, 46.5972, -1.4525, 50),
('85009', 'Auzay', '30T', 664017, 5145337, 46.4417, -0.864724, 60),
('85010', 'Avrillé', '30T', 615630, 5147341, 46.4697, -1.49389, 46),
('85011', 'Barbâtre', '30T', 562258, 5199285, 46.9442, -2.18194, 4),
('85012', 'La Barre-de-Monts', '30T', 567135, 5192360, 46.8814, -2.11889, 3),
('85013', 'Bazoges-en-Paillers', '30T', 642158, 5196576, 46.9075, -1.13333, 100),
('85014', 'Bazoges-en-Pareds', '30T', 659437, 5169183, 46.6572, -0.916114, 90),
('85015', 'Beaufou', '30T', 612145, 5186643, 46.8239, -1.52972, 50),
('85016', 'Beaulieu-sous-la-Roche', '30T', 606270, 5170079, 46.6758, -1.61055, 60),
('85017', 'Beaurepaire', '30T', 645555, 5196998, 46.9106, -1.08861, 95),
('85018', 'Beauvoir-sur-Mer', '30T', 572697, 5196223, 46.9156, -2.04528, 11),
('85019', 'Belleville-sur-Vie', '30T', 619777, 5182283, 46.7833, -1.43084, 75),
('85020', 'Benet', '30T', 684899, 5137720, 46.3678, -0.596112, 90),
('85021', 'La Bernardière', '30T', 631780, 5212181, 47.05, -1.265, 60),
('85022', 'Le Bernard', '30T', 617725, 5143831, 46.4378, -1.4675, 20),
('85023', 'Bessay', '30T', 641708, 5155337, 46.5367, -1.15195, 50),
('85024', 'Bois-de-Céné', '30T', 584656, 5198788, 46.9372, -1.88778, 23),
('85025', 'La Boissière-de-Montaigu', '30T', 637693, 5201104, 46.9492, -1.19055, 84),
('85026', 'La Boissière-des-Landes', '30T', 617940, 5158007, 46.5653, -1.46111, 79),
('85027', 'Boufféré', '30T', 626295, 5202087, 46.9603, -1.34, 30),
('85028', 'Bouillé-Courdault', '30T', 677775, 5140040, 46.3906, -0.687772, 100),
('85029', 'Bouin', '30T', 576146, 5202780, 46.9742, -1.99889, 5),
('85030', 'Boulogne', '30T', 628127, 5183629, 46.7939, -1.32112, 66),
('85031', 'Le Boupère', '30T', 658167, 5184315, 46.7936, -0.927495, 150),
('85033', 'Bourneau', '30T', 667432, 5156210, 46.5386, -0.816387, 110),
('85034', 'Bournezeau', '30T', 640172, 5166418, 46.6367, -1.16861, 80),
('85035', 'Bretignolles-sur-Mer', '30T', 587757, 5164502, 46.6283, -1.85361, 3),
('85036', 'La Bretonnière-la-Claye', '30T', 633936, 5149262, 46.4836, -1.255, 25),
('85037', 'Breuil-Barret', '30T', 677304, 5169157, 46.6525, -0.682782, 180),
('85038', 'Les Brouzils', '30T', 627929, 5193908, 46.8864, -1.32083, 70),
('85039', 'La Bruffière', '30T', 636955, 5208345, 47.0144, -1.19806, 85),
('85040', 'La Caillère-Saint-Hilaire', '30T', 659913, 5164871, 46.6183, -0.91139, 90),
('85041', 'Cezais', '30T', 667084, 5161853, 46.5894, -0.818888, 80),
('85042', 'Chaillé-les-Marais', '30T', 652221, 5139779, 46.3944, -1.02001, 100),
('85043', 'Chaillé-sous-les-Ormeaux', '30T', 625134, 5160252, 46.5842, -1.36667, 70),
('85044', 'Chaix', '30T', 664856, 5144309, 46.4322, -0.854173, 50),
('85045', 'La Chaize-Giraud', '30T', 590360, 5166763, 46.6483, -1.81917, 40),
('85046', 'La Chaize-le-Vicomte', '30T', 630475, 5170246, 46.6731, -1.29416, 95),
('85047', 'Challans', '30T', 585264, 5188732, 46.8467, -1.88167, 20),
('85048', 'Chambretaud', '30T', 654981, 5198378, 46.9208, -0.964439, 220),
('85049', 'Champagné-les-Marais', '30T', 644422, 5137983, 46.38, -1.12195, 110),
('85050', 'Le Champ-Saint-Père', '30T', 626848, 5151610, 46.5061, -1.34667, 25),
('85051', 'Chantonnay', '30T', 648875, 5172341, 46.6881, -1.05306, 60),
('85052', 'La Chapelle-Achard', '30T', 603608, 5160492, 46.59, -1.6475, 35),
('85053', 'La Chapelle-aux-Lys', '30T', 679229, 5166681, 46.6297, -0.658607, 180),
('85054', 'La Chapelle-Hermier', '30T', 597864, 5170801, 46.6836, -1.72028, 40),
('85055', 'La Chapelle-Palluau', '30T', 605149, 5181916, 46.7825, -1.6225, 40),
('85056', 'La Chapelle-Thémer', '30T', 656573, 5158267, 46.5597, -0.957219, 55),
('85058', 'Chasnais', '30T', 635957, 5146651, 46.4597, -1.22945, 10),
('85059', 'La Châtaigneraie', '30T', 672806, 5168748, 46.65, -0.741674, 140),
('85060', 'Château-d''Olonne', '30T', 597014, 5150904, 46.5047, -1.73556, 50),
('85061', 'Château-Guibert', '30T', 635101, 5160158, 46.5814, -1.23666, 60),
('85062', 'Châteauneuf', '30T', 582932, 5196510, 46.9169, -1.91084, 10),
('85063', 'Les Châtelliers-Châteaumur', '30T', 666203, 5191328, 46.8547, -0.819723, 180),
('85064', 'Chauché', '30T', 631793, 5187661, 46.8294, -1.27194, 66),
('85065', 'Chavagnes-en-Paillers', '30T', 633353, 5194675, 46.8922, -1.24944, 70),
('85066', 'Chavagnes-les-Redoux', '30T', 659070, 5175814, 46.7169, -0.918617, 90),
('85067', 'Cheffois', '30T', 669036, 5170464, 46.6664, -0.790275, 190),
('85069', 'Les Clouzeaux', '30T', 614254, 5164853, 46.6275, -1.5075, 62),
('85070', 'Coëx', '30T', 594654, 5172263, 46.6972, -1.76194, 50),
('85071', 'Commequiers', '30T', 588834, 5179398, 46.7622, -1.83667, 20),
('85072', 'La Copechagnière', '30T', 626048, 5189699, 46.8489, -1.34667, 65),
('85073', 'Corpe', '30T', 639470, 5151671, 46.5042, -1.18222, 30),
('85074', 'La Couture', '30T', 633186, 5153290, 46.52, -1.26362, 25),
('85076', 'Cugand', '30T', 632612, 5213682, 47.0633, -1.25361, 60),
('85077', 'Curzon', '30T', 629973, 5145099, 46.4469, -1.30777, 10),
('85078', 'Damvix', '30T', 674551, 5131699, 46.3164, -0.732777, 100),
('85080', 'Doix', '30T', 668863, 5140003, 46.3925, -0.803611, 110),
('85081', 'Dompierre-sur-Yon', '30T', 623360, 5177229, 46.7372, -1.38528, 87),
('85082', 'Les Epesses', '30T', 660082, 5194404, 46.8839, -0.898884, 185),
('85083', 'L''Épine', '30T', 555835, 5203295, 46.9808, -2.26584, 5),
('85084', 'Les Essarts', '30T', 635215, 5181592, 46.7742, -1.22889, 120),
('85086', 'Falleron', '30T', 598777, 5192737, 46.8808, -1.70361, 36),
('85087', 'Faymoreau', '30T', 681835, 5156441, 46.5369, -0.628613, 100),
('85088', 'Le Fenouiller', '30T', 583935, 5174697, 46.7206, -1.90167, 10),
('85089', 'La Ferrière', '30T', 628847, 5174782, 46.7142, -1.31417, 95),
('85090', 'La Flocellière', '30T', 663070, 5188863, 46.8333, -0.861673, 220),
('85091', 'Fontaines', '30T', 667485, 5143455, 46.4239, -0.820284, 110),
('85092', 'Fontenay-le-Comte', '30T', 668585, 5148458, 46.4686, -0.804171, 80),
('85093', 'Fougeré', '30T', 635203, 5168868, 46.6597, -1.23278, 100),
('85094', 'Foussais-Payré', '30T', 677684, 5155514, 46.5297, -0.683057, 110),
('85095', 'Froidfond', '30T', 594543, 5191403, 46.8694, -1.75944, 37),
('85096', 'La Garnache', '30T', 589154, 5193574, 46.8897, -1.82972, 35),
('85097', 'La Gaubretière', '30T', 647330, 5200531, 46.9419, -1.06417, 140),
('85098', 'La Génétouze', '30T', 613663, 5175834, 46.7264, -1.5125, 70),
('85099', 'Le Girouard', '30T', 607479, 5158245, 46.5692, -1.5975, 45),
('85100', 'Givrand', '30T', 585306, 5169344, 46.6722, -1.88473, 3),
('85101', 'Le Givre', '30T', 622942, 5146589, 46.4617, -1.39889, 40),
('85102', 'Grand''Landes', '30T', 602870, 5186199, 46.8214, -1.65138, 60),
('85103', 'Grosbreuil', '30T', 606090, 5154885, 46.5392, -1.61639, 36),
('85104', 'Grues', '30T', 630452, 5139675, 46.3981, -1.30306, 10),
('85105', 'Le Gué-de-Velluire', '30T', 660059, 5137541, 46.3725, -0.918886, 100),
('85106', 'La Guérinière', '30T', 558343, 5201838, 46.9675, -2.23305, 5),
('85107', 'La Guyonnière', '30T', 633212, 5202886, 46.9661, -1.24889, 80),
('85108', 'L''Herbergement', '30T', 623730, 5196259, 46.9083, -1.37528, 55),
('85109', 'Les Herbiers', '30T', 651184, 5192875, 46.8722, -1.01611, 100),
('85110', 'L''Hermenault', '30T', 660907, 5153902, 46.5194, -0.902225, 70),
('85111', 'L''Île-d''Elle', '30T', 658065, 5132825, 46.3306, -0.946386, 100),
('85112', 'L''Île-d''Olonne', '30T', 593420, 5157270, 46.5625, -1.78111, 5),
('85113', 'L''Île-d''Yeu', '30T', 551047, 5172630, 46.7053, -2.33222, 2),
('85114', 'Jard-sur-Mer', '30T', 609445, 5141329, 46.4167, -1.57584, 6),
('85115', 'La Jaudonnière', '30T', 655780, 5167512, 46.6431, -0.964445, 118),
('85116', 'La Jonchère', '30T', 624827, 5144158, 46.4394, -1.375, 10),
('85117', 'Lairoux', '30T', 633131, 5145137, 46.4467, -1.26667, 10),
('85118', 'Landeronde', '30T', 609278, 5168281, 46.6592, -1.57166, 60),
('85119', 'Les Landes-Genusson', '30T', 643129, 5202838, 46.9636, -1.11861, 100),
('85120', 'Landevieille', '30T', 591435, 5166038, 46.6417, -1.80527, 40),
('85121', 'Le Langon', '30T', 657266, 5144664, 46.4372, -0.952782, 70),
('85123', 'Liez', '30T', 676834, 5137851, 46.3711, -0.700828, 100),
('85125', 'Loge-Fougereuse', '30T', 676750, 5164847, 46.6139, -0.691666, 90),
('85126', 'Longèves', '30T', 664734, 5149619, 46.48, -0.853883, 50),
('85127', 'Longeville-sur-Mer', '30T', 616066, 5142378, 46.425, -1.48945, 20),
('85128', 'Luçon', '30T', 640857, 5146114, 46.4539, -1.16583, 10),
('85129', 'Les Lucs-sur-Boulogne', '30T', 614775, 5188762, 46.8425, -1.49472, 80),
('85130', 'Maché', '30T', 600344, 5178777, 46.755, -1.68612, 10),
('85131', 'Les Magnils-Reigniers', '30T', 636760, 5148892, 46.4797, -1.21834, 30),
('85132', 'Maillé', '30T', 670301, 5134452, 46.3422, -0.786939, 120),
('85133', 'Maillezais', '30T', 673943, 5137983, 46.3731, -0.738338, 110),
('85134', 'Mallièvre', '30T', 662664, 5197563, 46.9117, -0.86389, 110),
('85135', 'Mareuil-sur-Lay-Dissais', '30T', 636431, 5154999, 46.5347, -1.22083, 25),
('85136', 'Marillet', '30T', 681394, 5159764, 46.5669, -0.63306, 100),
('85137', 'Marsais-Sainte-Radégonde', '30T', 662668, 5155802, 46.5361, -0.878617, 100),
('85138', 'Martinet', '30T', 600937, 5170018, 46.6761, -1.68028, 50),
('85139', 'Le Mazeau', '30T', 679042, 5134023, 46.3361, -0.673606, 100),
('85140', 'La Meilleraie-Tillay', '30T', 664368, 5178644, 46.7411, -0.848331, 120),
('85141', 'Menomblet', '30T', 674754, 5177855, 46.7314, -0.71278, 200),
('85142', 'La Merlatière', '30T', 629649, 5180944, 46.7694, -1.30194, 74),
('85143', 'Mervent', '30T', 672081, 5154642, 46.5233, -0.756383, 110),
('85144', 'Mesnard-la-Barotière', '30T', 644889, 5191299, 46.8594, -1.09916, 100),
('85145', 'Monsireigne', '30T', 656697, 5178840, 46.7447, -0.948615, 90),
('85146', 'Montaigu', '30T', 628263, 5203951, 46.9767, -1.31361, 55),
('85147', 'Montournais', '30T', 670818, 5178855, 46.7414, -0.763883, 160),
('85148', 'Montreuil', '30T', 666385, 5141509, 46.4067, -0.835282, 100),
('85149', 'Moreilles', '30T', 647329, 5142407, 46.4192, -1.08277, 50),
('85150', 'Mormaison', '30T', 617940, 5195864, 46.9058, -1.45139, 60),
('85151', 'Mortagne-sur-Sèvre', '30T', 656848, 5204605, 46.9764, -0.937783, 135),
('85152', 'La Mothe-Achard', '30T', 602828, 5163813, 46.62, -1.65694, 35),
('85153', 'Mouchamps', '30T', 648073, 5182451, 46.7792, -1.06028, 110),
('85154', 'Mouilleron-en-Pareds', '30T', 664545, 5171390, 46.6758, -0.848611, 130),
('85155', 'Mouilleron-le-Captif', '30T', 617625, 5175231, 46.7203, -1.46083, 60),
('85156', 'Moutiers-les-Mauxfaits', '30T', 620679, 5149879, 46.4917, -1.42749, 75),
('85157', 'Moutiers-sur-le-Lay', '30T', 641260, 5157179, 46.5533, -1.15723, 50),
('85158', 'Mouzeuil-Saint-Martin', '30T', 654795, 5147782, 46.4658, -0.983893, 60),
('85159', 'Nalliers', '30T', 651432, 5148315, 46.4714, -1.02749, 20),
('85160', 'Nesmy', '30T', 622220, 5161211, 46.5933, -1.40444, 35),
('85161', 'Nieul-le-Dolent', '30T', 614388, 5158865, 46.5736, -1.50723, 70),
('85162', 'Nieul-sur-l''Autise', '30T', 678329, 5143733, 46.4236, -0.679164, 120),
('85163', 'Noirmoutier-en-l''Île', '30T', 556761, 5205928, 47.0044, -2.25333, 8),
('85164', 'Notre-Dame-de-Monts', '30T', 566076, 5186668, 46.8303, -2.13361, 3),
('85165', 'L''Oie', '30T', 642553, 5184387, 46.7978, -1.13195, 100),
('85166', 'Olonne-sur-Mer', '30T', 594188, 5154441, 46.5369, -1.77167, 20),
('85167', 'L''Orbrie', '30T', 670208, 5150727, 46.4886, -0.782218, 80),
('85168', 'Oulmes', '30T', 679642, 5141207, 46.4006, -0.663061, 100),
('85169', 'Palluau', '30T', 605191, 5184325, 46.8042, -1.62139, 15),
('85171', 'Péault', '30T', 636470, 5151387, 46.5022, -1.22138, 30),
('85172', 'Le Perrier', '30T', 576681, 5185776, 46.8211, -1.99473, 12),
('85174', 'Petosse', '30T', 660507, 5149691, 46.4817, -0.908889, 50),
('85175', 'Les Pineaux', '30T', 639283, 5161642, 46.5939, -1.18166, 70),
('85176', 'Pissotte', '30T', 668417, 5151450, 46.4956, -0.805275, 80),
('85177', 'Le Poiré-sur-Velluire', '30T', 661717, 5141909, 46.4114, -0.895834, 70),
('85178', 'Le Poiré-sur-Vie', '30T', 613916, 5180439, 46.7678, -1.50805, 72),
('85179', 'Poiroux', '30T', 612446, 5151110, 46.5042, -1.53444, 70),
('85180', 'La Pommeraie-sur-Sèvre', '30T', 669645, 5189509, 46.8375, -0.775281, 190),
('85181', 'Pouillé', '30T', 657255, 5152509, 46.5078, -0.950276, 60),
('85182', 'Pouzauges', '30T', 665004, 5183325, 46.7831, -0.838328, 168),
('85184', 'Puy-de-Serre', '30T', 678941, 5159165, 46.5622, -0.665272, 100),
('85185', 'Puyravault', '30T', 647467, 5137593, 46.3758, -1.0825, 100),
('85186', 'La Rabatelière', '30T', 632859, 5191174, 46.8608, -1.25695, 70),
('85187', 'Réaumur', '30T', 667956, 5176395, 46.72, -0.80222, 160),
('85188', 'La Réorthe', '30T', 649268, 5163332, 46.6069, -1.05084, 85),
('85189', 'Notre-Dame-de-Riez', '30T', 583323, 5177498, 46.7458, -1.90917, 10),
('85190', 'Rocheservière', '30T', 613369, 5199203, 46.9367, -1.51055, 55),
('85191', 'La Roche-sur-Yon', '30T', 620086, 5169999, 46.6728, -1.43, 50),
('85192', 'Rochetrejoux', '30T', 653070, 5183688, 46.7892, -0.994449, 100),
('85193', 'Rosnay', '30T', 629903, 5155319, 46.5389, -1.30583, 75),
('85194', 'Les Sables-d''Olonne', '30T', 593235, 5149919, 46.4964, -1.785, 10),
('85196', 'Saint-André-Goule-d''Oie', '30T', 637945, 5188355, 46.8344, -1.19111, 100),
('85197', 'Saint-André-Treize-Voies', '30T', 620944, 5199043, 46.9339, -1.41111, 50),
('85198', 'Saint-Aubin-des-Ormeaux', '30T', 648737, 5206033, 46.9911, -1.04389, 140),
('85199', 'Saint-Aubin-la-Plaine', '30T', 648966, 5152268, 46.5075, -1.05833, 45),
('85200', 'Saint-Avaugourd-des-Landes', '30T', 616219, 5152231, 46.5136, -1.485, 70),
('85201', 'Saint-Benoist-sur-Mer', '30T', 626485, 5142463, 46.4239, -1.35388, 5),
('85202', 'Sainte-Cécile', '30T', 644034, 5178369, 46.7433, -1.11444, 100),
('85204', 'Saint-Christophe-du-Ligneron', '30T', 594431, 5186431, 46.8247, -1.76194, 48),
('85205', 'Saint-Cyr-des-Gâts', '30T', 662183, 5159588, 46.5703, -0.883614, 110),
('85206', 'Saint-Cyr-en-Talmondais', '30T', 627744, 5146534, 46.4603, -1.33639, 30),
('85207', 'Saint-Denis-du-Payré', '30T', 633145, 5140598, 46.4058, -1.26778, 10),
('85208', 'Saint-Denis-la-Chevasse', '30T', 625243, 5186656, 46.8217, -1.35806, 80),
('85209', 'Saint-Étienne-de-Brillouet', '30T', 653542, 5154267, 46.5244, -0.998062, 55),
('85210', 'Saint-Étienne-du-Bois', '30T', 607131, 5187292, 46.8306, -1.59528, 65),
('85211', 'Sainte-Flaive-des-Loups', '30T', 608842, 5162993, 46.6117, -1.57861, 60),
('85212', 'Sainte-Florence', '30T', 641244, 5184170, 46.7961, -1.14916, 100),
('85213', 'Saint-Florent-des-Bois', '30T', 629027, 5161414, 46.5939, -1.31555, 70),
('85214', 'Sainte-Foy', '30T', 601883, 5155492, 46.5453, -1.67111, 30),
('85215', 'Saint-Fulgent', '30T', 639044, 5190295, 46.8517, -1.17611, 100),
('85216', 'Sainte-Gemme-la-Plaine', '30T', 644874, 5149482, 46.4833, -1.1125, 10),
('85217', 'Saint-Georges-de-Montaigu', '30T', 629793, 5200680, 46.9469, -1.29444, 64),
('85218', 'Saint-Georges-de-Pointindoux', '30T', 605503, 5166546, 46.6442, -1.62139, 65),
('85219', 'Saint-Germain-l''Aiguiller', '30T', 665019, 5172700, 46.6875, -0.841949, 140),
('85220', 'Saint-Germain-de-Prinçay', '30T', 651247, 5176044, 46.7208, -1.02084, 85),
('85221', 'Saint-Gervais', '30T', 576271, 5194662, 46.9011, -1.99861, 5),
('85222', 'Saint-Gilles-Croix-de-Vie', '30T', 581852, 5171797, 46.6947, -1.92944, 20),
('85223', 'Sainte-Hermine', '30T', 649329, 5157435, 46.5539, -1.05194, 60),
('85224', 'Saint-Hilaire-de-Loulay', '30T', 627101, 5206891, 47.0033, -1.32806, 54),
('85226', 'Saint-Hilaire-de-Riez', '30T', 580623, 5174713, 46.7211, -1.945, 5),
('85227', 'Saint-Hilaire-des-Loges', '30T', 679392, 5148954, 46.4703, -0.663334, 90),
('85229', 'Saint-Hilaire-de-Voust', '30T', 680144, 5162383, 46.5908, -0.648338, 80),
('85231', 'Saint-Hilaire-la-Forêt', '30T', 613350, 5144921, 46.4483, -1.52417, 25),
('85232', 'Saint-Hilaire-le-Vouhis', '30T', 642951, 5172135, 46.6875, -1.13055, 105),
('85233', 'Saint-Jean-de-Beugné', '30T', 646798, 5153729, 46.5211, -1.08611, 45),
('85234', 'Saint-Jean-de-Monts', '30T', 571698, 5182534, 46.7925, -2.06055, 5),
('85235', 'Saint-Juire-Champgillon', '30T', 651155, 5160229, 46.5786, -1.02722, 60),
('85236', 'Saint-Julien-des-Landes', '30T', 598496, 5165902, 46.6394, -1.71306, 50),
('85237', 'Saint-Laurent-de-la-Salle', '30T', 659654, 5159367, 46.5689, -0.916669, 100),
('85238', 'Saint-Laurent-sur-Sèvre', '30T', 660582, 5202572, 46.9572, -0.889442, 160),
('85239', 'Saint-Maixent-sur-Vie', '30T', 589761, 5177035, 46.7408, -1.825, 22),
('85240', 'Saint-Malô-du-Bois', '30T', 659990, 5199406, 46.9289, -0.898332, 140),
('85242', 'Saint-Mars-la-Réorthe', '30T', 658198, 5191945, 46.8622, -0.924448, 220),
('85243', 'Brem-sur-Mer', '30T', 589580, 5162028, 46.6058, -1.83028, 5),
('85244', 'Saint-Martin-de-Fraigneau', '30T', 673300, 5144792, 46.4344, -0.744168, 100),
('85245', 'Saint-Martin-des-Fontaines', '30T', 660738, 5156275, 46.5408, -0.903605, 60),
('85246', 'Saint-Martin-des-Noyers', '30T', 639278, 5175632, 46.7197, -1.1775, 100),
('85247', 'Saint-Martin-des-Tilleuls', '30T', 648298, 5204138, 46.9742, -1.05028, 125),
('85248', 'Saint-Martin-Lars-en-Sainte-Hermine', '30T', 654629, 5161799, 46.5919, -0.981387, 120),
('85250', 'Saint-Mathurin', '30T', 598526, 5157598, 46.5647, -1.71444, 20),
('85251', 'Saint-Maurice-des-Noues', '30T', 674342, 5163448, 46.6019, -0.723616, 115),
('85252', 'Saint-Maurice-le-Girard', '30T', 667916, 5167931, 46.6439, -0.805828, 110),
('85254', 'Saint-Mesmin', '30T', 673005, 5184724, 46.7936, -0.733063, 200),
('85255', 'Saint-Michel-en-l''Herm', '30T', 634684, 5134765, 46.3531, -1.24944, 3),
('85256', 'Saint-Michel-le-Cloucq', '30T', 672541, 5150454, 46.4856, -0.751944, 120),
('85257', 'Saint-Michel-Mont-Mercure', '30T', 661428, 5188448, 46.83, -0.883336, 285),
('85259', 'Saint-Paul-en-Pareds', '30T', 653754, 5187628, 46.8244, -0.984169, 90),
('85260', 'Saint-Paul-Mont-Penit', '30T', 602194, 5183532, 46.7975, -1.66084, 50),
('85261', 'Sainte-Pexine', '30T', 642648, 5157953, 46.56, -1.13889, 50),
('85262', 'Saint-Philbert-de-Bouaine', '30T', 612443, 5204527, 46.9847, -1.52139, 34),
('85264', 'Saint-Pierre-du-Chemin', '30T', 675758, 5174023, 46.6967, -0.701115, 230),
('85265', 'Saint-Pierre-le-Vieux', '30T', 673111, 5139443, 46.3864, -0.748607, 110),
('85266', 'Saint-Prouant', '30T', 655915, 5180364, 46.7586, -0.958328, 90),
('85267', 'Sainte-Radégonde-des-Noyers', '30T', 649282, 5137668, 46.3761, -1.05889, 90),
('85268', 'Saint-Révérend', '30T', 589362, 5172429, 46.6994, -1.83111, 30),
('85269', 'Saint-Sigismond', '30T', 677801, 5135469, 46.3494, -0.689169, 100),
('85271', 'Saint-Sulpice-en-Pareds', '30T', 665770, 5163176, 46.6017, -0.835555, 80),
('85272', 'Saint-Sulpice-le-Verdon', '30T', 620465, 5194463, 46.8928, -1.41862, 58),
('85273', 'Saint-Urbain', '30T', 575440, 5191811, 46.8756, -2.01, 15),
('85274', 'Saint-Valérien', '30T', 658131, 5154879, 46.5289, -0.938059, 60),
('85276', 'Saint-Vincent-Sterlanges', '30T', 646206, 5178081, 46.7403, -1.08612, 70),
('85277', 'Saint-Vincent-sur-Graon', '30T', 623670, 5152749, 46.5169, -1.38777, 47),
('85278', 'Saint-Vincent-sur-Jard', '30T', 611538, 5141336, 46.4164, -1.54861, 4),
('85279', 'Saligny', '30T', 620211, 5184978, 46.8075, -1.42445, 75),
('85280', 'Sallertaine', '30T', 579359, 5190040, 46.8592, -1.95888, 15),
('85281', 'Sérigné', '30T', 665501, 5151987, 46.5011, -0.843056, 90),
('85282', 'Sigournais', '30T', 653895, 5174691, 46.7081, -0.986663, 70),
('85284', 'Soullans', '30T', 583797, 5183093, 46.7961, -1.90194, 3),
('85285', 'Le Tablier', '30T', 626990, 5159086, 46.5733, -1.34277, 60),
('85286', 'La Taillée', '30T', 659337, 5138170, 46.3783, -0.928054, 100),
('85287', 'Tallud-Sainte-Gemme', '30T', 661752, 5172488, 46.6864, -0.884717, 115),
('85288', 'Talmont-Saint-Hilaire', '30T', 606209, 5146891, 46.4672, -1.61667, 25),
('85289', 'La Tardière', '30T', 673446, 5170187, 46.6628, -0.732775, 100),
('85290', 'Thiré', '30T', 652728, 5156964, 46.5489, -1.00778, 60),
('85291', 'Thorigny', '30T', 634619, 5163636, 46.6128, -1.24194, 60),
('85292', 'Thouarsais-Bouildroux', '30T', 662329, 5165245, 46.6211, -0.879726, 130),
('85293', 'Tiffauges', '30T', 643421, 5208281, 47.0125, -1.11305, 100),
('85294', 'La Tranche-sur-Mer', '30T', 620109, 5133379, 46.3433, -1.43916, 3),
('85295', 'Treize-Septiers', '30T', 634517, 5205016, 46.985, -1.23111, 80),
('85296', 'Treize-Vents', '30T', 663887, 5198523, 46.92, -0.847495, 125),
('85297', 'Triaize', '30T', 638558, 5139267, 46.3928, -1.19778, 100),
('85298', 'Vairé', '30T', 595247, 5161621, 46.6014, -1.75638, 46),
('85299', 'Velluire', '30T', 661906, 5141234, 46.4053, -0.89361, 60),
('85300', 'Venansault', '30T', 613665, 5171233, 46.685, -1.51361, 65),
('85301', 'Vendrennes', '30T', 643262, 5187554, 46.8261, -1.12167, 100),
('85302', 'La Verrie', '30T', 652519, 5202793, 46.9611, -0.995273, 150),
('85303', 'Vix', '30T', 664807, 5136679, 46.3636, -0.857499, 50),
('85304', 'Vouillé-les-Marais', '30T', 656662, 5139120, 46.3875, -0.962498, 100),
('85305', 'Vouvant', '30T', 671052, 5160111, 46.5728, -0.767773, 110),
('85306', 'Xanton-Chassenon', '30T', 676958, 5146782, 46.4514, -0.695836, 100),
('85307', 'La Faute-sur-Mer', '30T', 629178, 5132268, 46.3317, -1.32166, 4),
('86001', 'Adriers', '31T', 330249, 5124985, 46.2572, 0.797499, 180),
('86002', 'Amberre', '31T', 283474, 5183172, 46.7669, 0.164169, 110),
('86003', 'Anché', '31T', 289585, 5135891, 46.3439, 0.265558, 110),
('86004', 'Angles-sur-l''Anglin', '31T', 338468, 5173563, 46.6961, 0.887215, 100),
('86005', 'Angliers', '31T', 280752, 5203329, 46.9472, 0.118883, 64),
('86006', 'Antigny', '31T', 335393, 5155854, 46.5361, 0.853329, 97),
('86007', 'Antran', '31T', 312703, 5191797, 46.8533, 0.543062, 50),
('86008', 'Arçay', '31T', 272836, 5206098, 46.9694, 0.0136161, 75),
('86009', 'Archigny', '31T', 320447, 5171510, 46.6731, 0.652499, 125),
('86010', 'Aslonnes', '31T', 295235, 5146699, 46.4428, 0.33417, 121),
('86011', 'Asnières-sur-Blour', '31T', 330285, 5114668, 46.1644, 0.801672, 190),
('86012', 'Asnois', '31T', 300159, 5109768, 46.1122, 0.413886, 130),
('86013', 'Aulnay', '31T', 278548, 5198681, 46.9047, 0.0922216, 75),
('86014', 'Availles-en-Châtellerault', '31T', 315186, 5180906, 46.7561, 0.580002, 80),
('86015', 'Availles-Limouzine', '31T', 318948, 5110143, 46.1208, 0.656672, 150),
('86016', 'Avanton', '31T', 293812, 5171312, 46.6636, 0.304725, 111),
('86017', 'Ayron', '31T', 276117, 5171511, 46.6597, 0.0736166, 137),
('86018', 'Basses', '31T', 281027, 5213086, 47.035, 0.117778, 88),
('86019', 'Beaumont', '31T', 303659, 5179078, 46.7364, 0.429996, 140),
('86020', 'Bellefonds', '31T', 315687, 5168842, 46.6478, 0.591387, 70),
('86021', 'Benassay', '31T', 273575, 5160480, 46.5597, 0.0458347, 135),
('86022', 'Berrie', '30T', 722488, 5216833, 47.0675, -0.0697277, 76),
('86023', 'Berthegon', '31T', 291482, 5197258, 46.8961, 0.262499, 85),
('86024', 'Béruges', '31T', 286061, 5160921, 46.5678, 0.208333, 120),
('86025', 'Béthines', '31T', 344798, 5156872, 46.5475, 0.975561, 114),
('86026', 'Beuxes', '31T', 286072, 5219392, 47.0933, 0.181111, 45),
('86027', 'Biard', '31T', 293559, 5161433, 46.5747, 0.305834, 123),
('86028', 'Bignoux', '31T', 306233, 5163979, 46.6014, 0.470001, 114),
('86029', 'Blanzay', '31T', 288311, 5120115, 46.2017, 0.256113, 131),
('86030', 'Blaslay', '31T', 289571, 5179617, 46.7369, 0.245555, 90),
('86031', 'Bonnes', '31T', 315920, 5163923, 46.6036, 0.596389, 60),
('86032', 'Bonneuil-Matours', '31T', 314124, 5172659, 46.6817, 0.569442, 60),
('86034', 'Bouresse', '31T', 316102, 5136886, 46.3606, 0.609442, 130),
('86035', 'Bourg-Archambault', '31T', 346464, 5138515, 46.3828, 1.00333, 181),
('86036', 'Bournand', '31T', 278323, 5218780, 47.0853, 0.0794381, 50),
('86037', 'Brigueil-le-Chantre', '31T', 353114, 5139494, 46.3931, 1.08945, 151),
('86038', 'Brion', '31T', 304652, 5136656, 46.3553, 0.460839, 125),
('86039', 'Brux', '31T', 283644, 5124048, 46.2356, 0.193891, 130),
('86040', 'La Bussière', '31T', 333523, 5166871, 46.6347, 0.824999, 120),
('86041', 'Buxerolles', '31T', 298020, 5165484, 46.6125, 0.362221, 110),
('86042', 'Buxeuil', '31T', 323353, 5205066, 46.9756, 0.677495, 45),
('86043', 'Ceaux-en-Couhé', '31T', 286799, 5133331, 46.32, 0.230558, 127),
('86044', 'Ceaux-en-Loudun', '31T', 290253, 5211671, 47.0253, 0.239723, 74),
('86045', 'Celle-Lévescault', '31T', 284070, 5145108, 46.425, 0.189722, 100),
('86046', 'Cenon-sur-Vienne', '31T', 311962, 5183045, 46.7744, 0.536948, 53),
('86047', 'Cernay', '31T', 294524, 5190230, 46.8339, 0.305555, 85),
('86048', 'Chabournay', '31T', 290537, 5177451, 46.7178, 0.259172, 93),
('86049', 'Chalais', '31T', 278528, 5206131, 46.9717, 0.088329, 70),
('86050', 'Chalandray', '30T', 729340, 5171840, 46.6608, -0.00222279, 160),
('86051', 'Champagné-le-Sec', '31T', 283336, 5118991, 46.19, 0.19222, 130),
('86052', 'Champagné-Saint-Hilaire', '31T', 294089, 5133018, 46.3194, 0.325284, 176),
('86053', 'Champigny-le-Sec', '31T', 282675, 5177514, 46.7158, 0.156395, 110),
('86054', 'Champniers', '31T', 294476, 5121634, 46.2172, 0.335273, 140),
('86055', 'La Chapelle-Bâton', '31T', 299072, 5117898, 46.185, 0.396388, 150),
('86056', 'La Chapelle-Montreuil', '31T', 278690, 5157540, 46.535, 0.113885, 140),
('86058', 'La Chapelle-Moulière', '31T', 313739, 5169149, 46.65, 0.56583, 100),
('86059', 'Chapelle-Viviers', '31T', 325382, 5150204, 46.4828, 0.724998, 147),
('86060', 'Charrais', '31T', 285835, 5175546, 46.6992, 0.198607, 122),
('86061', 'Charroux', '31T', 299733, 5113180, 46.1428, 0.406939, 150),
('86062', 'Chasseneuil-du-Poitou', '31T', 299249, 5169769, 46.6514, 0.376392, 70),
('86063', 'Chatain', '31T', 301474, 5105245, 46.0719, 0.432775, 166),
('86064', 'Château-Garnier', '31T', 301610, 5126002, 46.2586, 0.425836, 140),
('86065', 'Château-Larcher', '31T', 293560, 5143943, 46.4175, 0.313606, 100),
('86066', 'Châtellerault', '31T', 312687, 5187904, 46.8183, 0.544448, 52),
('86067', 'Châtillon', '31T', 284118, 5133208, 46.3181, 0.195831, 120),
('86068', 'Chaunay', '31T', 281327, 5121009, 46.2075, 0.165284, 128),
('86069', 'La Chaussée', '31T', 279927, 5196436, 46.885, 0.11139, 87),
('86070', 'Chauvigny', '31T', 319762, 5159945, 46.5689, 0.648061, 70),
('86071', 'Cheneché', '31T', 292338, 5179768, 46.7392, 0.281664, 90),
('86072', 'Chenevelles', '31T', 320796, 5177492, 46.7269, 0.654729, 120),
('86073', 'Cherves', '31T', 272133, 5178152, 46.7181, 0.0183274, 140),
('86074', 'Chiré-en-Montreuil', '31T', 280072, 5169109, 46.6394, 0.12639, 110),
('86075', 'Chouppes', '31T', 283698, 5188201, 46.8122, 0.164725, 97),
('86076', 'Cissé', '31T', 287939, 5169477, 46.6453, 0.228888, 140),
('86077', 'Civaux', '31T', 320697, 5146171, 46.4453, 0.665562, 71),
('86078', 'Civray', '31T', 291082, 5113932, 46.1469, 0.294718, 120),
('86079', 'La Roche-Rigault', '31T', 286681, 5208120, 46.9922, 0.194446, 100),
('86080', 'Cloué', '31T', 282193, 5146998, 46.4414, 0.164442, 130),
('86081', 'Colombiers', '31T', 303727, 5183093, 46.7725, 0.429169, 100),
('86082', 'Couhé', '31T', 282884, 5131028, 46.2981, 0.180828, 143),
('86083', 'Coulombiers', '31T', 284268, 5151868, 46.4858, 0.189169, 132),
('86084', 'Coulonges', '31T', 358284, 5140390, 46.4022, 1.15639, 171),
('86085', 'Coussay', '31T', 286742, 5190873, 46.8372, 0.20333, 116),
('86086', 'Coussay-les-Bois', '31T', 327890, 5186367, 46.8086, 0.744163, 80),
('86087', 'Craon', '31T', 272956, 5184148, 46.7722, 0.0261172, 100),
('86088', 'Croutelle', '31T', 292046, 5157097, 46.5353, 0.288054, 110),
('86089', 'Cuhon', '31T', 278266, 5182465, 46.7589, 0.0963902, 100),
('86090', 'Curçay-sur-Dive', '30T', 723724, 5210944, 47.0142, -0.0563858, 100),
('86091', 'Curzay-sur-Vonne', '31T', 273312, 5152887, 46.4914, 0.0461126, 120),
('86092', 'Dangé-Saint-Romain', '31T', 317792, 5200908, 46.9367, 0.606114, 48),
('86093', 'Dercé', '31T', 288642, 5203199, 46.9486, 0.222498, 97),
('86094', 'Dienné', '31T', 311618, 5146075, 46.4419, 0.547504, 110),
('86095', 'Dissay', '31T', 303365, 5174639, 46.6964, 0.42805, 80),
('86096', 'Doussay', '31T', 292359, 5191387, 46.8436, 0.276672, 83),
('86097', 'La Ferrière-Airoux', '31T', 299358, 5133120, 46.3219, 0.39361, 125),
('86098', 'Fleix', '31T', 327251, 5158120, 46.5544, 0.746386, 135),
('86099', 'Fleuré', '31T', 309822, 5150117, 46.4778, 0.522496, 131),
('86100', 'Fontaine-le-Comte', '31T', 290198, 5156079, 46.5256, 0.264442, 116),
('86102', 'Frozes', '31T', 280728, 5171342, 46.6597, 0.13389, 140),
('86103', 'Gençay', '31T', 300399, 5138741, 46.3728, 0.404727, 122),
('86104', 'Genouillé', '31T', 294237, 5109376, 46.1069, 0.337503, 140),
('86105', 'Gizay', '31T', 302179, 5146128, 46.4397, 0.424721, 117),
('86106', 'Glénouze', '30T', 727496, 5209047, 46.9958, -0.00777802, 84),
('86107', 'Gouex', '31T', 322228, 5137199, 46.365, 0.68889, 90),
('86108', 'La Grimaudière', '31T', 272528, 5187997, 46.8067, 0.0186077, 80),
('86109', 'Guesnes', '31T', 283908, 5199876, 46.9172, 0.161944, 68),
('86110', 'Haims', '31T', 340255, 5151894, 46.5017, 0.918054, 132),
('86111', 'Ingrandes', '31T', 314560, 5194272, 46.8761, 0.566393, 50),
('86112', 'L''Isle-Jourdain', '31T', 321642, 5122265, 46.2306, 0.686943, 145),
('86113', 'Iteuil', '31T', 293779, 5151630, 46.4867, 0.313054, 110),
('86114', 'Jardres', '31T', 313273, 5160266, 46.57, 0.563332, 120),
('86115', 'Jaunay-Clan', '31T', 299074, 5173452, 46.6844, 0.372502, 80),
('86116', 'Jazeneuil', '31T', 274923, 5149705, 46.4633, 0.0686144, 120),
('86117', 'Jouhet', '31T', 334378, 5150693, 46.4894, 0.841941, 90),
('86118', 'Journet', '31T', 344088, 5147501, 46.4631, 0.969448, 110),
('86119', 'Joussé', '31T', 305031, 5122401, 46.2272, 0.471669, 150),
('86120', 'Lathus-Saint-Rémy', '31T', 342925, 5133047, 46.3328, 0.959165, 169),
('86121', 'Latillé', '31T', 276257, 5167272, 46.6217, 0.077498, 122),
('86122', 'Lauthiers', '31T', 326119, 5163219, 46.6, 0.729717, 127),
('86123', 'Lavausseau', '31T', 275678, 5160278, 46.5586, 0.0733336, 140),
('86124', 'Lavoux', '31T', 310725, 5163249, 46.5961, 0.528895, 116),
('86125', 'Leigné-les-Bois', '31T', 324913, 5181016, 46.7597, 0.70722, 130),
('86126', 'Leignes-sur-Fontaine', '31T', 329485, 5152682, 46.5061, 0.777504, 140),
('86127', 'Leigné-sur-Usseau', '31T', 307619, 5198477, 46.9119, 0.473617, 120),
('86128', 'Lencloître', '31T', 296233, 5188101, 46.8153, 0.328889, 74),
('86129', 'Lésigny', '31T', 329801, 5190915, 46.85, 0.767497, 60),
('86130', 'Leugny', '31T', 325031, 5198096, 46.9133, 0.702223, 55),
('86131', 'Lhommaizé', '31T', 315608, 5145273, 46.4358, 0.599719, 100),
('86132', 'Liglet', '31T', 353147, 5152340, 46.5086, 1.08583, 133),
('86133', 'Ligugé', '31T', 295042, 5154893, 46.5164, 0.328054, 80),
('86134', 'Linazay', '31T', 282376, 5116120, 46.1639, 0.181115, 120),
('86135', 'Liniers', '31T', 311393, 5164866, 46.6108, 0.536949, 120),
('86136', 'Lizant', '31T', 289709, 5107058, 46.0847, 0.280004, 110),
('86137', 'Loudun', '31T', 278048, 5210260, 47.0086, 0.0800049, 88),
('86138', 'Luchapt', '31T', 328989, 5115908, 46.1753, 0.78445, 190),
('86139', 'Lusignan', '31T', 278894, 5146159, 46.4328, 0.121946, 110),
('86140', 'Lussac-les-Châteaux', '31T', 325230, 5141220, 46.4019, 0.726384, 107),
('86141', 'Magné', '31T', 299526, 5136915, 46.3561, 0.394169, 120),
('86142', 'Maillé', '31T', 277597, 5173558, 46.6786, 0.0919489, 140),
('86143', 'Mairé', '31T', 328577, 5191846, 46.8581, 0.751105, 80),
('86144', 'Maisonneuve', '31T', 275231, 5178560, 46.7228, 0.0586109, 120),
('86145', 'Marçay', '31T', 287269, 5149197, 46.4628, 0.229443, 120),
('86146', 'Marigny-Brizay', '31T', 299641, 5180262, 46.7458, 0.376942, 110),
('86147', 'Marigny-Chemereau', '31T', 286206, 5145094, 46.4256, 0.217495, 100),
('86148', 'Marnay', '31T', 295700, 5141492, 46.3961, 0.342494, 103),
('86149', 'Martaizé', '31T', 276176, 5200377, 46.9192, 0.0602837, 70),
('86150', 'Massognes', '31T', 275679, 5180893, 46.7439, 0.0633267, 116),
('86151', 'Maulay', '31T', 288539, 5206849, 46.9814, 0.219445, 76),
('86152', 'Mauprévoir', '31T', 308311, 5116212, 46.1725, 0.516672, 140),
('86153', 'Mazerolles', '31T', 322037, 5141621, 46.4047, 0.684727, 90),
('86154', 'Mazeuil', '31T', 277471, 5185648, 46.7872, 0.0844486, 100),
('86156', 'Messemé', '31T', 285619, 5210353, 47.0119, 0.179439, 85),
('86157', 'Mignaloux-Beauvoir', '31T', 301790, 5157727, 46.5439, 0.414723, 121),
('86158', 'Migné-Auxances', '31T', 294226, 5167250, 46.6272, 0.311942, 80),
('86159', 'Millac', '31T', 321593, 5117633, 46.1889, 0.688057, 187),
('86160', 'Mirebeau', '31T', 285052, 5185124, 46.785, 0.183895, 143),
('86161', 'Moncontour', '30T', 727367, 5196338, 46.8817, -0.0158303, 74),
('86162', 'Mondion', '31T', 308640, 5201287, 46.9375, 0.485829, 110),
('86163', 'Montamisé', '31T', 302843, 5166468, 46.6228, 0.424722, 110),
('86164', 'Monthoiron', '31T', 318187, 5178343, 46.7339, 0.620277, 120),
('86165', 'Montmorillon', '31T', 336449, 5143625, 46.4264, 0.871387, 90),
('86166', 'Montreuil-Bonnin', '31T', 280755, 5159195, 46.5506, 0.139999, 135),
('86167', 'Monts-sur-Guesnes', '31T', 287979, 5200008, 46.9197, 0.215284, 130),
('86169', 'Morton', '30T', 725834, 5221595, 47.1092, -0.0233345, 44),
('86170', 'Moulismes', '31T', 331859, 5132878, 46.3286, 0.815551, 168),
('86171', 'Moussac', '31T', 321914, 5127910, 46.2814, 0.688334, 90),
('86172', 'Mouterre-sur-Blourde', '31T', 326839, 5118810, 46.2008, 0.755554, 150),
('86173', 'Mouterre-Silly', '31T', 275352, 5206621, 46.975, 0.0463882, 100),
('86174', 'Naintré', '31T', 307697, 5181790, 46.7619, 0.481663, 70),
('86175', 'Nalliers', '31T', 336614, 5163173, 46.6022, 0.866661, 80),
('86176', 'Nérignac', '31T', 325018, 5129364, 46.2953, 0.728053, 180),
('86177', 'Neuville-de-Poitou', '31T', 289474, 5173811, 46.6847, 0.246944, 120),
('86178', 'Nieuil-l''Espoir', '31T', 304632, 5150652, 46.4811, 0.454727, 113),
('86180', 'Nouaillé-Maupertuis', '31T', 301746, 5153774, 46.5083, 0.415836, 106),
('86181', 'Nueil-sous-Faye', '31T', 293283, 5206435, 46.9792, 0.281942, 70),
('86182', 'Orches', '31T', 296069, 5195740, 46.8839, 0.32333, 112),
('86183', 'Les Ormes', '31T', 317974, 5204795, 46.9717, 0.606945, 40),
('86184', 'Ouzilly', '31T', 298713, 5183630, 46.7758, 0.363328, 79),
('86186', 'Oyré', '31T', 319270, 5193819, 46.8733, 0.628329, 70),
('86187', 'Paizay-le-Sec', '31T', 329774, 5160674, 46.5781, 0.778337, 132),
('86188', 'Payré', '31T', 285382, 5135667, 46.3406, 0.211105, 110),
('86189', 'Payroux', '31T', 306104, 5121070, 46.2156, 0.486116, 140),
('86190', 'Persac', '31T', 323529, 5134875, 46.3444, 0.706664, 120),
('86191', 'Pindray', '31T', 332035, 5150820, 46.49, 0.811388, 142),
('86192', 'Plaisance', '31T', 336316, 5133097, 46.3317, 0.873338, 170),
('86193', 'Pleumartin', '31T', 329301, 5178542, 46.7386, 0.765556, 135),
('86194', 'Poitiers', '31T', 296512, 5162445, 46.5847, 0.343885, 116),
('86195', 'Port-de-Piles', '31T', 317663, 5208450, 47.0044, 0.601389, 45),
('86196', 'Pouançay', '30T', 722391, 5218312, 47.0808, -0.0702746, 70),
('86197', 'Pouant', '31T', 292586, 5209488, 47.0064, 0.27139, 96),
('86198', 'Pouillé', '31T', 314269, 5156620, 46.5375, 0.577778, 120),
('86200', 'Pressac', '31T', 312297, 5109724, 46.1153, 0.570832, 161),
('86201', 'Prinçay', '31T', 290564, 5201277, 46.9319, 0.248611, 100),
('86202', 'La Puye', '31T', 328000, 5167922, 46.6428, 0.752506, 114),
('86203', 'Queaux', '31T', 320609, 5133045, 46.3272, 0.669449, 140),
('86204', 'Quinçay', '31T', 288532, 5165129, 46.6064, 0.238617, 100),
('86205', 'Ranton', '30T', 725701, 5209535, 47.0008, -0.0311117, 110),
('86206', 'Raslay', '31T', 272761, 5221834, 47.1108, 0.00472082, 36),
('86207', 'La Roche-Posay', '31T', 333141, 5183747, 46.7864, 0.81389, 80),
('86208', 'Le Rochereau', '31T', 282536, 5176623, 46.7078, 0.155, 127),
('86209', 'Roches-Prémarie-Andillé', '31T', 298180, 5151111, 46.4833, 0.370559, 110),
('86210', 'Roiffé', '31T', 276315, 5223183, 47.1242, 0.0508323, 65),
('86211', 'Romagne', '31T', 292148, 5127584, 46.27, 0.302501, 142),
('86213', 'Rouillé', '31T', 272606, 5144877, 46.4192, 0.040831, 153),
('86214', 'Saint-Benoît', '31T', 296193, 5158655, 46.5506, 0.341392, 77),
('86217', 'Saint-Christophe', '31T', 300077, 5199652, 46.9203, 0.374162, 83),
('86218', 'Saint-Clair', '31T', 276376, 5196104, 46.8808, 0.0650051, 75),
('86219', 'Saint-Cyr', '31T', 304614, 5177070, 46.7186, 0.443338, 60),
('86220', 'Saint-Gaudent', '31T', 290579, 5110520, 46.1161, 0.289718, 135),
('86221', 'Saint-Genest-d''Ambière', '31T', 299364, 5188490, 46.8197, 0.369717, 116),
('86222', 'Saint-Georges-lès-Baillargeaux', '31T', 301311, 5171647, 46.6689, 0.402503, 100),
('86223', 'Saint-Germain', '31T', 336899, 5158748, 46.5625, 0.871938, 82),
('86224', 'Saint-Gervais-les-Trois-Clochers', '31T', 302625, 5197312, 46.9, 0.408607, 80),
('86225', 'Saint-Jean-de-Sauves', '31T', 278350, 5191611, 46.8411, 0.0930612, 80),
('86226', 'Saint-Julien-l''Ars', '31T', 309044, 5159255, 46.5597, 0.508616, 110),
('86227', 'Saint-Laon', '30T', 727090, 5206930, 46.9769, -0.0141711, 74),
('86228', 'Saint-Laurent-de-Jourdes', '31T', 311274, 5140525, 46.3919, 0.545272, 120),
('86229', 'Saint-Léger-de-Montbrillais', '30T', 724405, 5217523, 47.0731, -0.0441711, 90),
('86230', 'Saint-Léomer', '31T', 345911, 5144490, 46.4364, 0.99417, 138),
('86231', 'Saint-Macoux', '31T', 286291, 5110791, 46.1172, 0.234167, 100),
('86233', 'Valdivienne', '31T', 318777, 5153395, 46.5097, 0.637775, 70),
('86234', 'Saint-Martin-l''Ars', '31T', 309598, 5121021, 46.2161, 0.531393, 140),
('86235', 'Saint-Maurice-la-Clouère', '31T', 301034, 5139214, 46.3772, 0.412774, 120),
('86236', 'Saint-Pierre-de-Maillé', '31T', 335107, 5171862, 46.68, 0.843895, 80),
('86237', 'Saint-Pierre-d''Exideuil', '31T', 289292, 5114334, 46.15, 0.271387, 120);
INSERT INTO `ods_communes` (`oc_code_insee`, `oc_nom`, `oc_secteur`, `oc_x_utm`, `oc_y_utm`, `oc_latitude`, `oc_longitude`, `oc_altitude`) VALUES
('86239', 'Sainte-Radégonde', '31T', 324213, 5167228, 46.6356, 0.703327, 107),
('86241', 'Saint-Rémy-sur-Creuse', '31T', 324553, 5202713, 46.9547, 0.694169, 60),
('86242', 'Saint-Romain', '31T', 296890, 5121986, 46.2211, 0.366387, 133),
('86244', 'Saint-Sauvant', '31T', 273490, 5138199, 46.3594, 0.0555515, 140),
('86245', 'Saint-Sauveur', '31T', 318840, 5186603, 46.8083, 0.625553, 100),
('86246', 'Saint-Savin', '31T', 336400, 5159194, 46.5664, 0.865275, 90),
('86247', 'Saint-Saviol', '31T', 287121, 5112431, 46.1322, 0.244161, 130),
('86248', 'Saint-Secondin', '31T', 306992, 5133554, 46.3281, 0.492501, 130),
('86249', 'Saires', '31T', 290066, 5196133, 46.8856, 0.244449, 94),
('86250', 'Saix', '31T', 272731, 5224896, 47.1383, 0.00277944, 50),
('86252', 'Sammarçolles', '31T', 283276, 5212756, 47.0328, 0.1475, 90),
('86253', 'Sanxay', '30T', 729645, 5153153, 46.4928, -0.00750298, 130),
('86254', 'Saulgé', '31T', 336623, 5138154, 46.3772, 0.875561, 99),
('86255', 'Savigné', '31T', 293018, 5115288, 46.1597, 0.319167, 120),
('86256', 'Savigny-Lévescault', '31T', 306509, 5156648, 46.5356, 0.476661, 114),
('86257', 'Savigny-sous-Faye', '31T', 293247, 5194384, 46.8708, 0.286947, 112),
('86258', 'Scorbé-Clairvaux', '31T', 302964, 5187660, 46.8133, 0.41722, 93),
('86259', 'Senillé', '31T', 317893, 5183357, 46.7789, 0.614443, 100),
('86260', 'Sérigny', '31T', 298330, 5198073, 46.9056, 0.351941, 120),
('86261', 'Sèvres-Anxaumont', '31T', 305782, 5160564, 46.5706, 0.46555, 114),
('86262', 'Sillars', '31T', 328574, 5143102, 46.4197, 0.769163, 117),
('86263', 'Smarves', '31T', 296752, 5154372, 46.5122, 0.35055, 120),
('86264', 'Sommières-du-Clain', '31T', 296328, 5128277, 46.2775, 0.35639, 120),
('86265', 'Sossais', '31T', 300886, 5192796, 46.8589, 0.387772, 110),
('86266', 'Surin', '31T', 296917, 5105950, 46.0769, 0.373607, 160),
('86268', 'Tercé', '31T', 313154, 5154338, 46.5167, 0.564167, 120),
('86269', 'Ternay', '30T', 723593, 5213845, 47.0403, -0.0566731, 67),
('86270', 'Thollet', '31T', 355837, 5142609, 46.4217, 1.12389, 137),
('86271', 'Thurageau', '31T', 289542, 5183018, 46.7675, 0.243617, 121),
('86272', 'Thuré', '31T', 306188, 5189625, 46.8319, 0.458605, 100),
('86273', 'La Trimouille', '31T', 349534, 5147673, 46.4658, 1.04028, 111),
('86274', 'Les Trois-Moutiers', '31T', 273735, 5216388, 47.0622, 0.0202743, 55),
('86275', 'Usseau', '31T', 310217, 5194285, 46.875, 0.509447, 80),
('86276', 'Usson-du-Poitou', '31T', 309619, 5127910, 46.2781, 0.528883, 130),
('86277', 'Varennes', '31T', 286155, 5182148, 46.7586, 0.199716, 95),
('86278', 'Vaux', '31T', 286023, 5130731, 46.2964, 0.221673, 120),
('86279', 'Vaux-sur-Vienne', '31T', 314260, 5198267, 46.9119, 0.560831, 70),
('86280', 'Vellèches', '31T', 312167, 5201731, 46.9425, 0.53194, 80),
('86281', 'Vendeuvre-du-Poitou', '31T', 294486, 5179200, 46.7347, 0.310004, 100),
('86284', 'Vernon', '31T', 306169, 5145999, 46.4397, 0.476666, 121),
('86285', 'Verrières', '31T', 314973, 5142636, 46.4119, 0.592505, 110),
('86286', 'Verrue', '31T', 284621, 5193793, 46.8628, 0.174172, 120),
('86287', 'Vézières', '31T', 279912, 5218907, 47.0869, 0.100283, 52),
('86288', 'Vicq-sur-Gartempe', '31T', 336637, 5176547, 46.7225, 0.862224, 70),
('86289', 'Le Vigeant', '31T', 318730, 5121640, 46.2242, 0.64945, 150),
('86290', 'La Villedieu-du-Clain', '31T', 297894, 5148309, 46.4581, 0.368053, 131),
('86291', 'Villemort', '31T', 340743, 5157472, 46.5519, 0.922497, 129),
('86292', 'Villiers', '31T', 284108, 5173043, 46.6761, 0.177218, 130),
('86293', 'Vivonne', '31T', 289868, 5145306, 46.4286, 0.265004, 100),
('86294', 'Vouillé', '31T', 283138, 5169122, 46.6406, 0.166395, 120),
('86295', 'Voulême', '31T', 286112, 5108727, 46.0986, 0.232782, 100),
('86296', 'Voulon', '31T', 288197, 5137206, 46.3553, 0.246947, 100),
('86297', 'Vouneuil-sous-Biard', '31T', 291111, 5161517, 46.5747, 0.273885, 110),
('86298', 'Vouneuil-sur-Vienne', '31T', 311766, 5176811, 46.7183, 0.536939, 58),
('86299', 'Vouzailles', '31T', 278017, 5176881, 46.7086, 0.0958315, 141),
('86300', 'Yversay', '31T', 287072, 5173247, 46.6789, 0.215831, 120),
('87001', 'Aixe-sur-Vienne', '31T', 355127, 5073177, 45.7969, 1.13584, 210),
('87002', 'Ambazac', '31T', 376253, 5090658, 45.9583, 1.40306, 387),
('87003', 'Arnac-la-Poste', '31T', 374629, 5124932, 46.2664, 1.37306, 309),
('87004', 'Augne', '31T', 399402, 5070943, 45.7847, 1.70583, 560),
('87005', 'Aureil', '31T', 375159, 5073791, 45.8064, 1.39333, 380),
('87006', 'Azat-le-Ris', '31T', 350671, 5131369, 46.3194, 1.06028, 214),
('87007', 'Balledent', '31T', 361802, 5107886, 46.1106, 1.21167, 251),
('87008', 'La Bazeuge', '31T', 353296, 5123060, 46.2453, 1.09695, 208),
('87009', 'Beaumont-du-Lac', '31T', 409423, 5069431, 45.7725, 1.83501, 640),
('87011', 'Bellac', '31T', 349340, 5109445, 46.1219, 1.05, 250),
('87012', 'Berneuil', '31T', 353553, 5103321, 46.0678, 1.10638, 277),
('87013', 'Bersac-sur-Rivalier', '31T', 378284, 5104110, 46.0797, 1.42583, 400),
('87014', 'Bessines-sur-Gartempe', '31T', 373993, 5107531, 46.1097, 1.36945, 300),
('87015', 'Beynac', '31T', 357621, 5069846, 45.7675, 1.16889, 310),
('87016', 'Les Billanges', '31T', 386491, 5091233, 45.9653, 1.535, 380),
('87017', 'Blanzac', '31T', 354455, 5110526, 46.1328, 1.11583, 260),
('87018', 'Blond', '31T', 346832, 5101014, 46.0456, 1.02027, 310),
('87019', 'Boisseuil', '31T', 370241, 5069910, 45.7706, 1.33111, 380),
('87020', 'Bonnac-la-Côte', '31T', 367043, 5088966, 45.9414, 1.28473, 428),
('87021', 'Bosmie-l''Aiguille', '31T', 360762, 5069250, 45.7628, 1.20944, 300),
('87022', 'Breuilaufa', '31T', 353506, 5100420, 46.0417, 1.10667, 280),
('87023', 'Le Buis', '31T', 361099, 5099564, 46.0356, 1.205, 340),
('87024', 'Bujaleuf', '31T', 393443, 5072309, 45.7961, 1.62889, 380),
('87025', 'Burgnac', '31T', 356411, 5065180, 45.7253, 1.15472, 296),
('87026', 'Bussière-Boffy', '31T', 334103, 5101869, 46.0503, 0.855562, 235),
('87027', 'Bussière-Galant', '31T', 346851, 5054570, 45.6278, 1.03528, 430),
('87028', 'Bussière-Poitevine', '31T', 338555, 5122289, 46.235, 0.906116, 220),
('87029', 'Les Cars', '31T', 349895, 5060424, 45.6811, 1.0725, 358),
('87030', 'Chaillac-sur-Vienne', '31T', 334778, 5082888, 45.8797, 0.870834, 233),
('87031', 'Le Chalard', '31T', 354033, 5045783, 45.5503, 1.12999, 340),
('87032', 'Châlus', '31T', 342794, 5057790, 45.6558, 0.982227, 390),
('87033', 'Chamboret', '31T', 355648, 5096385, 46.0058, 1.13556, 270),
('87034', 'Champagnac-la-Rivière', '31T', 337413, 5064042, 45.7108, 0.911113, 300),
('87035', 'Champnétery', '31T', 389066, 5076337, 45.8317, 1.57166, 410),
('87036', 'Champsac', '31T', 341003, 5063146, 45.7036, 0.957501, 350),
('87037', 'La Chapelle-Montbrandeix', '31T', 332296, 5057198, 45.6481, 0.84778, 380),
('87038', 'Chaptelat', '31T', 365154, 5085332, 45.9083, 1.26139, 364),
('87039', 'Château-Chervix', '31T', 371883, 5051968, 45.6094, 1.35695, 380),
('87040', 'Châteauneuf-la-Forêt', '31T', 391664, 5063171, 45.7136, 1.60805, 360),
('87041', 'Châteauponsac', '31T', 366837, 5110306, 46.1333, 1.27611, 290),
('87042', 'Le Châtenet-en-Dognon', '31T', 384043, 5084703, 45.9061, 1.50499, 412),
('87043', 'Cheissoux', '31T', 395111, 5076448, 45.8336, 1.64945, 420),
('87044', 'Chéronnac', '31T', 326102, 5069629, 45.7583, 0.763894, 293),
('87045', 'Cieux', '31T', 348749, 5094976, 45.9917, 1.04695, 310),
('87046', 'Cognac-la-Forêt', '31T', 345365, 5077550, 45.8342, 1.00889, 340),
('87047', 'Compreignac', '31T', 366495, 5094505, 45.9911, 1.27612, 400),
('87048', 'Condat-sur-Vienne', '31T', 362657, 5072820, 45.7953, 1.23278, 286),
('87049', 'Coussac-Bonneval', '31T', 369143, 5041157, 45.5117, 1.32472, 353),
('87050', 'Couzeix', '31T', 363247, 5081947, 45.8775, 1.23778, 360),
('87051', 'La Croisille-sur-Briance', '31T', 389727, 5053882, 45.6297, 1.58528, 460),
('87052', 'La Croix-sur-Gartempe', '31T', 344899, 5113848, 46.1606, 0.991113, 243),
('87053', 'Cromac', '31T', 369205, 5133630, 46.3436, 1.30028, 244),
('87054', 'Cussac', '31T', 332838, 5063669, 45.7064, 0.852504, 340),
('87055', 'Darnac', '31T', 342698, 5120915, 46.2236, 0.960272, 230),
('87056', 'Dinsac', '31T', 355035, 5121413, 46.2308, 1.12, 201),
('87057', 'Dompierre-les-Églises', '31T', 365389, 5120621, 46.2258, 1.25444, 304),
('87058', 'Domps', '31T', 399372, 5057022, 45.6594, 1.70834, 560),
('87059', 'Le Dorat', '31T', 352251, 5119719, 46.215, 1.08445, 220),
('87060', 'Dournazac', '31T', 337597, 5054495, 45.625, 0.916665, 350),
('87061', 'Droux', '31T', 357569, 5113356, 46.1589, 1.15527, 231),
('87062', 'Eybouleuf', '31T', 382020, 5072391, 45.795, 1.48194, 400),
('87063', 'Eyjeaux', '31T', 374965, 5070585, 45.7775, 1.39166, 340),
('87064', 'Eymoutiers', '31T', 402168, 5065528, 45.7364, 1.7425, 413),
('87065', 'Feytiat', '31T', 370241, 5074016, 45.8075, 1.33, 337),
('87066', 'Flavignac', '31T', 351688, 5063037, 45.705, 1.09472, 363),
('87067', 'Folles', '31T', 380981, 5108009, 46.1153, 1.45972, 320),
('87068', 'Fromental', '31T', 376077, 5112923, 46.1586, 1.395, 316),
('87069', 'Gajoubert', '31T', 332441, 5108771, 46.1119, 0.831662, 219),
('87070', 'La Geneytouse', '31T', 380964, 5071362, 45.7856, 1.46861, 410),
('87071', 'Glandon', '31T', 361383, 5037712, 45.4792, 1.22639, 376),
('87072', 'Glanges', '31T', 379704, 5058698, 45.6714, 1.45555, 400),
('87073', 'Gorre', '31T', 343144, 5067384, 45.7422, 0.983615, 275),
('87074', 'Les Grands-Chézeaux', '31T', 376340, 5134346, 46.3514, 1.39278, 303),
('87075', 'Isle', '31T', 361951, 5074102, 45.8067, 1.22334, 276),
('87076', 'Jabreilles-les-Bordes', '31T', 386266, 5097720, 46.0236, 1.53055, 500),
('87077', 'Janailhac', '31T', 362897, 5055278, 45.6375, 1.24083, 370),
('87078', 'Javerdat', '31T', 343932, 5090927, 45.9542, 0.986108, 260),
('87079', 'La Jonchère-Saint-Maurice', '31T', 382263, 5097549, 46.0214, 1.47889, 418),
('87080', 'Jouac', '31T', 366109, 5134840, 46.3539, 1.25972, 190),
('87081', 'Jourgnac', '31T', 360978, 5064397, 45.7192, 1.21361, 364),
('87082', 'Ladignac-le-Long', '31T', 352992, 5049482, 45.5833, 1.11555, 400),
('87083', 'Laurière', '31T', 382269, 5103476, 46.0747, 1.47751, 430),
('87084', 'Lavignac', '31T', 353850, 5064777, 45.7211, 1.12195, 270),
('87085', 'Limoges', '31T', 364753, 5076850, 45.8319, 1.25861, 306),
('87086', 'Linards', '31T', 385887, 5061823, 45.7006, 1.53417, 409),
('87087', 'Lussac-les-Églises', '31T', 359485, 5134093, 46.3458, 1.17389, 200),
('87088', 'Magnac-Bourg', '31T', 377921, 5052712, 45.6172, 1.43417, 442),
('87089', 'Magnac-Laval', '31T', 358634, 5119507, 46.2144, 1.16722, 220),
('87090', 'Mailhac-sur-Benaize', '31T', 371359, 5131361, 46.3236, 1.32889, 250),
('87091', 'Maisonnais-sur-Tardoire', '31T', 320123, 5064733, 45.7128, 0.688892, 280),
('87092', 'Marval', '31T', 328275, 5055146, 45.6286, 0.796938, 320),
('87093', 'Masléon', '31T', 389592, 5069474, 45.77, 1.58, 376),
('87094', 'Meilhac', '31T', 356727, 5063876, 45.7136, 1.15917, 300),
('87095', 'Meuzac', '31T', 378281, 5045604, 45.5533, 1.44056, 391),
('87096', 'La Meyze', '31T', 360963, 5053035, 45.6169, 1.21667, 372),
('87097', 'Mézières-sur-Issoire', '31T', 338420, 5108240, 46.1086, 0.909162, 248),
('87099', 'Moissannes', '31T', 388679, 5081222, 45.8756, 1.56555, 450),
('87100', 'Montrol-Sénard', '31T', 342236, 5099555, 46.0314, 0.961388, 365),
('87101', 'Mortemart', '31T', 341924, 5100799, 46.0425, 0.956947, 300),
('87103', 'Nantiat', '31T', 358927, 5096742, 46.0097, 1.17778, 335),
('87104', 'Nedde', '31T', 409057, 5063603, 45.72, 1.83139, 500),
('87105', 'Neuvic-Entier', '31T', 392180, 5064242, 45.7233, 1.61444, 415),
('87106', 'Nexon', '31T', 358654, 5060158, 45.6806, 1.185, 360),
('87107', 'Nieul', '31T', 358740, 5087637, 45.9278, 1.17806, 310),
('87108', 'Nouic', '31T', 339181, 5102816, 46.06, 0.920837, 250),
('87109', 'Oradour-Saint-Genest', '31T', 348527, 5122559, 46.2397, 1.03528, 190),
('87110', 'Oradour-sur-Glane', '31T', 347507, 5088274, 45.9311, 1.03306, 276),
('87111', 'Oradour-sur-Vayres', '31T', 333719, 5066672, 45.7336, 0.862784, 350),
('87112', 'Pageas', '31T', 344221, 5060317, 45.6789, 0.999722, 370),
('87113', 'Le Palais-sur-Vienne', '31T', 369787, 5080170, 45.8628, 1.3225, 260),
('87114', 'Panazol', '31T', 368851, 5077719, 45.8406, 1.31111, 309),
('87115', 'Pensol', '31T', 330540, 5053169, 45.6114, 0.826662, 340),
('87116', 'Peyrat-de-Bellac', '31T', 348362, 5111569, 46.1408, 1.03667, 255),
('87117', 'Peyrat-le-Château', '31T', 404592, 5074165, 45.8144, 1.77195, 428),
('87118', 'Peyrilhac', '31T', 355442, 5090369, 45.9517, 1.13472, 310),
('87119', 'Pierre-Buffière', '31T', 372298, 5061654, 45.6967, 1.35973, 320),
('87120', 'La Porcherie', '31T', 386448, 5048692, 45.5825, 1.54444, 480),
('87121', 'Rancon', '31T', 359707, 5110187, 46.1308, 1.18389, 220),
('87122', 'Razès', '31T', 371363, 5098847, 46.0311, 1.33778, 450),
('87123', 'Rempnat', '31T', 413547, 5059989, 45.6881, 1.88972, 620),
('87124', 'Rilhac-Lastours', '31T', 354061, 5059029, 45.6694, 1.12639, 350),
('87125', 'Rilhac-Rancon', '31T', 369587, 5084002, 45.8972, 1.31888, 310),
('87126', 'Rochechouart', '31T', 330968, 5076845, 45.8244, 0.823893, 250),
('87127', 'La Roche-l''Abeille', '31T', 362758, 5050896, 45.5981, 1.24028, 414),
('87128', 'Roussac', '31T', 361032, 5104228, 46.0775, 1.20278, 350),
('87129', 'Royères', '31T', 378744, 5079309, 45.8567, 1.43806, 340),
('87130', 'Roziers-Saint-Georges', '31T', 387155, 5067357, 45.7506, 1.54916, 358),
('87131', 'Saillat-sur-Vienne', '31T', 331418, 5082299, 45.8736, 0.827772, 210),
('87132', 'Saint-Amand-le-Petit', '31T', 402929, 5069961, 45.7764, 1.75139, 540),
('87133', 'Saint-Amand-Magnazeix', '31T', 373133, 5114743, 46.1744, 1.35639, 320),
('87134', 'Sainte-Anne-Saint-Priest', '31T', 397621, 5062483, 45.7083, 1.68472, 573),
('87135', 'Saint-Auvent', '31T', 339267, 5074679, 45.8069, 0.931383, 260),
('87136', 'Saint-Barbant', '31T', 334038, 5115368, 46.1717, 0.850004, 207),
('87137', 'Saint-Bazile', '31T', 330821, 5066688, 45.7331, 0.825557, 300),
('87138', 'Saint-Bonnet-Briance', '31T', 381599, 5062706, 45.7078, 1.47889, 380),
('87139', 'Saint-Bonnet-de-Bellac', '31T', 342090, 5114784, 46.1683, 0.954442, 200),
('87140', 'Saint-Brice-sur-Vienne', '31T', 341329, 5082655, 45.8792, 0.955276, 190),
('87141', 'Saint-Cyr', '31T', 341452, 5073974, 45.8011, 0.959717, 299),
('87142', 'Saint-Denis-des-Murs', '31T', 386793, 5071222, 45.7853, 1.54361, 373),
('87143', 'Saint-Gence', '31T', 355753, 5087088, 45.9222, 1.13972, 306),
('87144', 'Saint-Genest-sur-Roselle', '31T', 377590, 5062351, 45.7039, 1.4275, 373),
('87145', 'Saint-Georges-les-Landes', '31T', 371977, 5133293, 46.3411, 1.33638, 271),
('87146', 'Saint-Germain-les-Belles', '31T', 382813, 5052495, 45.6161, 1.49695, 428),
('87147', 'Saint-Gilles-les-Forêts', '31T', 395961, 5053682, 45.6289, 1.66528, 620),
('87148', 'Saint-Hilaire-Bonneval', '31T', 373542, 5064346, 45.7211, 1.375, 340),
('87149', 'Saint-Hilaire-la-Treille', '31T', 370289, 5123263, 46.2506, 1.31722, 282),
('87150', 'Saint-Hilaire-les-Places', '31T', 356624, 5058475, 45.665, 1.15944, 397),
('87151', 'Saint-Jean-Ligoure', '31T', 368736, 5061018, 45.6903, 1.31417, 270),
('87152', 'Saint-Jouvent', '31T', 360988, 5090828, 45.9569, 1.20611, 341),
('87153', 'Saint-Julien-le-Petit', '31T', 399364, 5075266, 45.8236, 1.70444, 440),
('87154', 'Saint-Junien', '31T', 337236, 5083657, 45.8872, 0.902228, 212),
('87155', 'Saint-Junien-les-Combes', '31T', 354933, 5105296, 46.0858, 1.12362, 240),
('87156', 'Saint-Just-le-Martel', '31T', 374876, 5080096, 45.8631, 1.38805, 320),
('87157', 'Saint-Laurent-les-Églises', '31T', 383696, 5089186, 45.9464, 1.49943, 388),
('87158', 'Saint-Laurent-sur-Gorre', '31T', 341215, 5070584, 45.7706, 0.957784, 260),
('87159', 'Saint-Léger-la-Montagne', '31T', 377721, 5098471, 46.0289, 1.42, 580),
('87160', 'Saint-Léger-Magnazeix', '31T', 364986, 5127577, 46.2883, 1.24722, 253),
('87161', 'Saint-Léonard-de-Noblat', '31T', 382822, 5077100, 45.8375, 1.49111, 340),
('87162', 'Sainte-Marie-de-Vaux', '31T', 348339, 5081769, 45.8728, 1.04584, 255),
('87163', 'Saint-Martial-sur-Isop', '31T', 334044, 5114812, 46.1667, 0.850277, 207),
('87164', 'Saint-Martin-de-Jussac', '31T', 340116, 5082439, 45.8769, 0.939727, 189),
('87165', 'Saint-Martin-le-Mault', '31T', 363229, 5136077, 46.3644, 1.22195, 200),
('87166', 'Saint-Martin-le-Vieux', '31T', 353803, 5067403, 45.7447, 1.12055, 280),
('87167', 'Saint-Martin-Terressus', '31T', 379267, 5086245, 45.9192, 1.44305, 300),
('87168', 'Saint-Mathieu', '31T', 325465, 5063871, 45.7064, 0.757784, 320),
('87169', 'Saint-Maurice-les-Brousses', '31T', 362790, 5062227, 45.7, 1.2375, 380),
('87170', 'Saint-Méard', '31T', 387026, 5057851, 45.665, 1.54972, 430),
('87172', 'Saint-Ouen-sur-Gartempe', '31T', 350937, 5114162, 46.1647, 1.06917, 220),
('87173', 'Saint-Pardoux', '31T', 367128, 5101901, 46.0578, 1.28223, 370),
('87174', 'Saint-Paul', '31T', 378038, 5067559, 45.7508, 1.43194, 310),
('87176', 'Saint-Priest-Ligoure', '31T', 366935, 5056703, 45.6511, 1.29223, 280),
('87177', 'Saint-Priest-sous-Aixe', '31T', 352415, 5075402, 45.8164, 1.10028, 291),
('87178', 'Saint-Priest-Taurion', '31T', 376219, 5082538, 45.8853, 1.40472, 260),
('87179', 'Saint-Sornin-la-Marche', '31T', 344878, 5116412, 46.1836, 0.990001, 200),
('87180', 'Saint-Sornin-Leulac', '31T', 368666, 5117523, 46.1986, 1.29778, 340),
('87181', 'Saint-Sulpice-Laurière', '31T', 381515, 5101145, 46.0536, 1.46834, 396),
('87182', 'Saint-Sulpice-les-Feuilles', '31T', 374319, 5130712, 46.3183, 1.3675, 289),
('87183', 'Saint-Sylvestre', '31T', 374525, 5094645, 45.9939, 1.37972, 520),
('87184', 'Saint-Symphorien-sur-Couze', '31T', 363583, 5102010, 46.0581, 1.23639, 387),
('87185', 'Saint-Victurnien', '31T', 345726, 5082513, 45.8789, 1.01195, 200),
('87186', 'Saint-Vitte-sur-Briance', '31T', 386902, 5053407, 45.625, 1.54916, 390),
('87187', 'Saint-Yrieix-la-Perche', '31T', 359578, 5041488, 45.5128, 1.20223, 365),
('87188', 'Saint-Yrieix-sous-Aixe', '31T', 350866, 5080133, 45.8586, 1.07889, 224),
('87189', 'Les Salles-Lavauguyon', '31T', 320573, 5068334, 45.7453, 0.693336, 260),
('87190', 'Sauviat-sur-Vige', '31T', 392125, 5084680, 45.9072, 1.60917, 433),
('87191', 'Séreilhac', '31T', 350685, 5069885, 45.7664, 1.07973, 322),
('87192', 'Solignac', '31T', 365867, 5068459, 45.7567, 1.27528, 240),
('87193', 'Surdoux', '31T', 394794, 5051294, 45.6072, 1.65083, 580),
('87194', 'Sussac', '31T', 394706, 5057593, 45.6639, 1.64834, 460),
('87195', 'Tersannes', '31T', 355384, 5128909, 46.2983, 1.12222, 243),
('87196', 'Thiat', '31T', 343936, 5125732, 46.2672, 0.974721, 196),
('87197', 'Thouron', '31T', 362059, 5095374, 45.9981, 1.21861, 380),
('87198', 'Vaulry', '31T', 351885, 5098297, 46.0222, 1.08639, 280),
('87199', 'Vayres', '31T', 329650, 5069747, 45.7603, 0.809441, 292),
('87200', 'Verneuil-Moustiers', '31T', 356582, 5133420, 46.3392, 1.13639, 190),
('87201', 'Verneuil-sur-Vienne', '31T', 354574, 5079087, 45.85, 1.12694, 320),
('87202', 'Veyrac', '31T', 353186, 5084246, 45.8961, 1.1075, 314),
('87203', 'Vicq-sur-Breuilh', '31T', 374070, 5056215, 45.6481, 1.38389, 338),
('87204', 'Videix', '31T', 323937, 5073365, 45.7914, 0.734716, 255),
('87205', 'Le Vigen', '31T', 367044, 5067909, 45.7519, 1.29056, 240),
('87206', 'Villefavard', '31T', 361749, 5114094, 46.1664, 1.20917, 280),
('88001', 'Les Ableuvenettes', '32T', 290868, 5340969, 48.1875, 6.18612, 300),
('88002', 'Ahéville', '32T', 291984, 5351717, 48.2844, 6.19584, 320),
('88003', 'Aingeville', '31T', 705758, 5342825, 48.2053, 5.76944, 330),
('88004', 'Ainvelle', '31T', 711046, 5319865, 47.9972, 5.82917, 300),
('88005', 'Allarmont', '32T', 353319, 5371895, 48.4831, 7.015, 347),
('88006', 'Ambacourt', '32T', 288209, 5358936, 48.3481, 6.14139, 260),
('88007', 'Ameuvelle', '31T', 719959, 5314109, 47.9425, 5.94555, 256),
('88008', 'Anglemont', '32T', 327378, 5361256, 48.3808, 6.66861, 290),
('88009', 'Anould', '32T', 347488, 5338991, 48.1858, 6.94805, 450),
('88010', 'Aouze', '31T', 712645, 5361997, 48.3753, 5.87167, 330),
('88011', 'Arches', '32T', 316010, 5332347, 48.1178, 6.52778, 350),
('88012', 'Archettes', '32T', 316528, 5333041, 48.1242, 6.53444, 350),
('88013', 'Aroffe', '31T', 714663, 5364732, 48.3992, 5.90028, 360),
('88014', 'Arrentès-de-Corcieux', '32T', 341242, 5334280, 48.1419, 6.86583, 670),
('88015', 'Attignéville', '31T', 707982, 5362782, 48.3839, 5.80917, 310),
('88016', 'Attigny', '32T', 279215, 5327743, 48.0647, 6.03639, 260),
('88017', 'Aulnois', '31T', 706624, 5348575, 48.2567, 5.78389, 338),
('88018', 'Aumontzey', '32T', 334689, 5337215, 48.1667, 6.77667, 474),
('88019', 'Autigny-la-Tour', '31T', 704318, 5364473, 48.4003, 5.76056, 290),
('88020', 'Autreville', '31T', 710528, 5374036, 48.4842, 5.84916, 310),
('88021', 'Autrey', '32T', 328682, 5351915, 48.2972, 6.69, 330),
('88022', 'Auzainvilliers', '31T', 710913, 5346476, 48.2364, 5.84055, 365),
('88023', 'Avillers', '32T', 293042, 5354708, 48.3117, 6.20862, 295),
('88024', 'Avrainville', '32T', 293520, 5361615, 48.3739, 6.21167, 268),
('88025', 'Avranville', '31T', 686986, 5366409, 48.4231, 5.5275, 380),
('88026', 'Aydoilles', '32T', 319885, 5342360, 48.2089, 6.57556, 388),
('88027', 'Badménil-aux-Bois', '32T', 316015, 5353022, 48.3036, 6.51888, 320),
('88028', 'La Baffe', '32T', 319632, 5336991, 48.1606, 6.57444, 400),
('88029', 'Bains-les-Bains', '32T', 295956, 5320138, 48.0019, 6.26445, 310),
('88030', 'Bainville-aux-Saules', '32T', 287452, 5343074, 48.2053, 6.13916, 300),
('88031', 'Balléville', '31T', 711264, 5358143, 48.3411, 5.85111, 310),
('88032', 'Ban-de-Laveline', '32T', 356423, 5345154, 48.2433, 7.06611, 430),
('88033', 'Ban-de-Sapt', '32T', 352731, 5356370, 48.3433, 7.0125, 570),
('88035', 'Barbey-Seroux', '32T', 339237, 5334305, 48.1417, 6.83889, 590),
('88036', 'Barville', '31T', 706379, 5362693, 48.3836, 5.7875, 300),
('88037', 'Basse-sur-le-Rupt', '32T', 333348, 5317356, 47.9878, 6.76639, 570),
('88038', 'Battexey', '32T', 291320, 5363396, 48.3892, 6.18111, 277),
('88039', 'Baudricourt', '32T', 281687, 5355472, 48.3147, 6.05527, 300),
('88040', 'Bayecourt', '32T', 313515, 5349086, 48.2675, 6.48694, 330),
('88041', 'Bazegney', '32T', 294299, 5349562, 48.2658, 6.22806, 290),
('88042', 'Bazien', '32T', 328101, 5364726, 48.4122, 6.67694, 330),
('88043', 'Bazoilles-et-Ménil', '32T', 285213, 5348908, 48.2569, 6.10611, 300),
('88044', 'Bazoilles-sur-Meuse', '31T', 696993, 5353704, 48.3058, 5.65666, 292),
('88045', 'Beaufremont', '31T', 704397, 5348525, 48.2569, 5.75389, 420),
('88046', 'Beauménil', '32T', 331137, 5338740, 48.1794, 6.72833, 440),
('88047', 'Begnécourt', '32T', 288902, 5343144, 48.2064, 6.15862, 301),
('88048', 'Bellefontaine', '32T', 309400, 5320881, 48.0128, 6.44417, 530),
('88049', 'Belmont-lès-Darney', '32T', 277444, 5330162, 48.0858, 6.01139, 290),
('88050', 'Belmont-sur-Buttant', '32T', 334113, 5343720, 48.225, 6.76639, 400),
('88051', 'Belmont-sur-Vair', '31T', 715845, 5348763, 48.2553, 5.90805, 350),
('88052', 'Belrupt', '32T', 283540, 5330330, 48.0894, 6.09306, 327),
('88053', 'Belval', '32T', 355840, 5363612, 48.4092, 7.05195, 470),
('88054', 'Bertrimoutier', '32T', 355613, 5348171, 48.2703, 7.05417, 400),
('88055', 'Bettegney-Saint-Brice', '32T', 300219, 5352998, 48.2986, 6.30611, 340),
('88056', 'Bettoncourt', '32T', 289815, 5358907, 48.3483, 6.16305, 270),
('88057', 'Le Beulay', '32T', 357105, 5351748, 48.3028, 7.07306, 400),
('88058', 'Biécourt', '31T', 719035, 5356521, 48.3239, 5.955, 330),
('88059', 'Biffontaine', '32T', 336920, 5342249, 48.2125, 6.80472, 480),
('88060', 'Blémerey', '32T', 281388, 5360555, 48.3603, 6.04861, 320),
('88061', 'Bleurville', '31T', 720759, 5327341, 48.0611, 5.96306, 270),
('88062', 'Blevaincourt', '31T', 699507, 5333671, 48.125, 5.68111, 360),
('88063', 'Bocquegney', '32T', 299953, 5344260, 48.22, 6.30666, 340),
('88064', 'Bois-de-Champ', '32T', 335897, 5346882, 48.2539, 6.78916, 395),
('88065', 'Bonvillet', '32T', 280346, 5331286, 48.0969, 6.04973, 280),
('88066', 'Boulaincourt', '32T', 283990, 5361784, 48.3722, 6.08306, 300),
('88068', 'La Bourgonce', '32T', 339050, 5353281, 48.3122, 6.82917, 360),
('88069', 'Bouxières-aux-Bois', '32T', 300964, 5348954, 48.2625, 6.31805, 380),
('88070', 'Bouxurulles', '32T', 295047, 5357139, 48.3342, 6.23445, 300),
('88071', 'Bouzemont', '32T', 294785, 5347597, 48.2483, 6.23555, 340),
('88073', 'Brantigny', '32T', 298145, 5357894, 48.3419, 6.27584, 290),
('88074', 'Brechainville', '31T', 684216, 5359859, 48.365, 5.48722, 381),
('88075', 'La Bresse', '32T', 341647, 5318975, 48.0044, 6.87695, 630),
('88076', 'Brouvelieures', '32T', 331530, 5345032, 48.2361, 6.73111, 400),
('88077', 'Brû', '32T', 328193, 5357554, 48.3478, 6.68112, 312),
('88078', 'Bruyères', '32T', 330546, 5341786, 48.2067, 6.71917, 470),
('88079', 'Bulgnéville', '31T', 710637, 5343343, 48.2083, 5.83528, 350),
('88080', 'Bult', '32T', 322307, 5351802, 48.2944, 6.60417, 318),
('88081', 'Bussang', '32T', 339328, 5305693, 47.8844, 6.85083, 610),
('88082', 'Celles-sur-Plaine', '32T', 348429, 5368780, 48.4539, 6.95, 320),
('88083', 'Certilleux', '31T', 702426, 5354606, 48.3122, 5.73028, 350),
('88084', 'Chamagne', '32T', 298485, 5365733, 48.4125, 6.27666, 275),
('88085', 'Champdray', '32T', 332809, 5333717, 48.1347, 6.75278, 720),
('88086', 'Champ-le-Duc', '32T', 330686, 5340237, 48.1928, 6.72167, 440),
('88087', 'Chantraine', '32T', 309337, 5338283, 48.1692, 6.43555, 380),
('88088', 'La Chapelle-aux-Bois', '32T', 301251, 5323908, 48.0375, 6.33361, 400),
('88089', 'La Chapelle-devant-Bruyères', '32T', 337332, 5338591, 48.1797, 6.81166, 470),
('88090', 'Charmes', '32T', 299348, 5361035, 48.3706, 6.29056, 270),
('88091', 'Charmois-devant-Bruyères', '32T', 321063, 5337780, 48.1681, 6.59333, 406),
('88092', 'Charmois-l''Orgueilleux', '32T', 296889, 5331263, 48.1022, 6.27166, 340),
('88093', 'Châtas', '32T', 354614, 5358330, 48.3614, 7.03722, 561),
('88094', 'Châtel-sur-Moselle', '32T', 306703, 5354474, 48.3139, 6.39277, 300),
('88095', 'Châtenois', '31T', 710125, 5353835, 48.3028, 5.83361, 330),
('88096', 'Châtillon-sur-Saône', '31T', 715245, 5314642, 47.9489, 5.88277, 250),
('88097', 'Chauffecourt', '32T', 288948, 5357208, 48.3328, 6.15222, 270),
('88098', 'Chaumousey', '32T', 301919, 5338999, 48.1733, 6.33556, 360),
('88099', 'Chavelot', '32T', 309497, 5345540, 48.2344, 6.43445, 310),
('88100', 'Chef-Haut', '32T', 278923, 5360217, 48.3564, 6.01555, 380),
('88101', 'Cheniménil', '32T', 321684, 5334485, 48.1386, 6.60306, 390),
('88102', 'Chermisey', '31T', 690135, 5365772, 48.4164, 5.56973, 410),
('88103', 'Circourt', '32T', 298286, 5347935, 48.2525, 6.2825, 330),
('88104', 'Circourt-sur-Mouzon', '31T', 700755, 5352878, 48.2972, 5.70695, 306),
('88105', 'Claudon', '32T', 279058, 5324194, 48.0328, 6.03612, 320),
('88106', 'Ban-sur-Meurthe-Clefcy', '32T', 349974, 5336886, 48.1675, 6.98222, 501),
('88107', 'Clérey-la-Côte', '31T', 703865, 5373607, 48.4825, 5.75889, 315),
('88108', 'Le Clerjus', '32T', 300163, 5315261, 47.9594, 6.32306, 410),
('88109', 'Cleurie', '32T', 327683, 5324877, 48.0539, 6.68751, 470),
('88110', 'Clézentaine', '32T', 317933, 5364580, 48.4081, 6.53972, 280),
('88111', 'Coinches', '32T', 353269, 5346068, 48.2508, 7.02333, 380),
('88112', 'Colroy-la-Grande', '32T', 359923, 5353192, 48.3164, 7.11056, 421),
('88113', 'Combrimont', '32T', 356391, 5348800, 48.2761, 7.06444, 390),
('88114', 'Contrexéville', '31T', 715288, 5342187, 48.1964, 5.89722, 335),
('88115', 'Corcieux', '32T', 342427, 5337522, 48.1714, 6.88055, 540),
('88116', 'Cornimont', '32T', 338339, 5314155, 47.9603, 6.83444, 510),
('88117', 'Courcelles-sous-Châtenois', '31T', 708725, 5356565, 48.3278, 5.81611, 360),
('88118', 'Coussey', '31T', 698515, 5365009, 48.4069, 5.6825, 280),
('88119', 'Crainvilliers', '31T', 710814, 5336302, 48.145, 5.83417, 360),
('88120', 'La Croix-aux-Mines', '32T', 355010, 5342317, 48.2175, 7.04806, 470),
('88121', 'Damas-aux-Bois', '32T', 311400, 5363650, 48.3978, 6.45195, 300),
('88122', 'Damas-et-Bettegney', '32T', 296472, 5344538, 48.2214, 6.25972, 306),
('88123', 'Damblain', '31T', 697755, 5330488, 48.0969, 5.65611, 360),
('88124', 'Darney', '32T', 280007, 5330032, 48.0856, 6.04583, 290),
('88125', 'Darney-aux-Chênes', '31T', 709161, 5351450, 48.2817, 5.81945, 325),
('88126', 'Darnieulles', '32T', 303170, 5341707, 48.1981, 6.35111, 350),
('88127', 'Deinvillers', '32T', 319286, 5365062, 48.4128, 6.55778, 270),
('88128', 'Denipaire', '32T', 349313, 5356398, 48.3428, 6.96639, 353),
('88129', 'Derbamont', '32T', 297300, 5349794, 48.2689, 6.26834, 310),
('88130', 'Destord', '32T', 323427, 5349356, 48.2728, 6.62028, 330),
('88131', 'Deycimont', '32T', 325463, 5337675, 48.1683, 6.6525, 410),
('88132', 'Deyvillers', '32T', 315317, 5341640, 48.2011, 6.51445, 333),
('88133', 'Dignonville', '32T', 314623, 5346360, 48.2433, 6.50305, 330),
('88134', 'Dinozé', '32T', 312204, 5334943, 48.14, 6.47555, 340),
('88135', 'Docelles', '32T', 322908, 5335281, 48.1461, 6.61916, 380),
('88136', 'Dogneville', '32T', 311432, 5344116, 48.2222, 6.46111, 320),
('88137', 'Dolaincourt', '31T', 708494, 5357825, 48.3392, 5.81362, 340),
('88138', 'Dombasle-devant-Darney', '32T', 282393, 5334485, 48.1264, 6.07555, 332),
('88139', 'Dombasle-en-Xaintois', '31T', 721863, 5354868, 48.3081, 5.99223, 341),
('88140', 'Dombrot-le-Sec', '31T', 716451, 5336574, 48.1456, 5.90999, 385),
('88141', 'Dombrot-sur-Vair', '31T', 714712, 5349245, 48.26, 5.89305, 322),
('88142', 'Domèvre-sur-Avière', '32T', 305456, 5343297, 48.2131, 6.38111, 340),
('88143', 'Domèvre-sur-Durbion', '32T', 312271, 5350764, 48.2822, 6.46945, 305),
('88144', 'Domèvre-sous-Montfort', '32T', 282340, 5348275, 48.2503, 6.06778, 310),
('88145', 'Domfaing', '32T', 333214, 5344736, 48.2339, 6.75389, 390),
('88146', 'Domjulien', '31T', 722332, 5348672, 48.2522, 5.99528, 370),
('88147', 'Dommartin-aux-Bois', '32T', 297343, 5337645, 48.1597, 6.27472, 380),
('88148', 'Dommartin-lès-Remiremont', '32T', 324303, 5318707, 47.9975, 6.64472, 407),
('88149', 'Dommartin-lès-Vallois', '32T', 283258, 5337636, 48.155, 6.08556, 350),
('88150', 'Dommartin-sur-Vraine', '31T', 715322, 5357677, 48.3356, 5.90556, 330),
('88151', 'Dompaire', '32T', 294015, 5344564, 48.2208, 6.22666, 306),
('88152', 'Dompierre', '32T', 319134, 5347359, 48.2536, 6.56333, 335),
('88153', 'Domptail', '32T', 323615, 5368665, 48.4464, 6.61472, 300),
('88154', 'Domrémy-la-Pucelle', '31T', 697821, 5368972, 48.4428, 5.675, 270),
('88155', 'Domvallier', '32T', 283801, 5354650, 48.3081, 6.08417, 290),
('88156', 'Doncières', '32T', 324974, 5362720, 48.3933, 6.63556, 280),
('88157', 'Dounoux', '32T', 309800, 5331066, 48.1044, 6.445, 410),
('88158', 'Éloyes', '32T', 321870, 5329164, 48.0908, 6.60778, 390),
('88159', 'Entre-deux-Eaux', '32T', 350838, 5343846, 48.2303, 6.99139, 440),
('88160', 'Épinal', '32T', 310253, 5339087, 48.1767, 6.4475, 330),
('88161', 'Escles', '32T', 290030, 5334478, 48.1289, 6.17806, 330),
('88162', 'Esley', '32T', 281454, 5339158, 48.1681, 6.06055, 350),
('88163', 'Essegney', '32T', 301211, 5360722, 48.3683, 6.31583, 290),
('88164', 'Estrennes', '32T', 281116, 5349188, 48.2581, 6.05084, 320),
('88165', 'Étival-Clairefontaine', '32T', 341931, 5359071, 48.365, 6.86583, 300),
('88166', 'Évaux-et-Ménil', '32T', 299822, 5355794, 48.3236, 6.29944, 320),
('88167', 'Faucompierre', '32T', 327275, 5334036, 48.1361, 6.67833, 450),
('88168', 'Fauconcourt', '32T', 317809, 5360721, 48.3733, 6.53972, 300),
('88169', 'Fays', '32T', 327318, 5340245, 48.1919, 6.67639, 420),
('88170', 'Ferdrupt', '32T', 329040, 5308491, 47.9069, 6.71222, 460),
('88171', 'Fignévelle', '31T', 717197, 5319600, 47.9928, 5.91139, 270),
('88172', 'Fiménil', '32T', 330163, 5339325, 48.1844, 6.715, 450),
('88173', 'Florémont', '32T', 296701, 5360727, 48.3669, 6.255, 310),
('88174', 'Fomerey', '32T', 302367, 5344176, 48.22, 6.33917, 399),
('88175', 'Fontenay', '32T', 320971, 5343407, 48.2186, 6.58972, 379),
('88176', 'Fontenoy-le-Château', '32T', 291119, 5317189, 47.9739, 6.20112, 270),
('88177', 'La Forge', '32T', 330578, 5326119, 48.0658, 6.72583, 490),
('88178', 'Les Forges', '32T', 306042, 5339259, 48.1769, 6.39084, 370),
('88179', 'Fouchécourt', '31T', 713341, 5321186, 48.0083, 5.86056, 271),
('88180', 'Frain', '31T', 714427, 5329852, 48.0858, 5.87944, 345),
('88181', 'Fraize', '32T', 351325, 5338766, 48.1847, 6.99972, 500),
('88182', 'Frapelle', '32T', 356401, 5350808, 48.2942, 7.06389, 400),
('88183', 'Frebécourt', '31T', 698023, 5363199, 48.3908, 5.675, 285),
('88184', 'Fremifontaine', '32T', 328779, 5349656, 48.2769, 6.69223, 350),
('88185', 'Frenelle-la-Grande', '32T', 284208, 5359952, 48.3558, 6.08694, 290),
('88186', 'Frenelle-la-Petite', '32T', 282421, 5359556, 48.3517, 6.06305, 300),
('88187', 'Frénois', '32T', 286102, 5341239, 48.1883, 6.12194, 320),
('88188', 'Fresse-sur-Moselle', '32T', 334776, 5304956, 47.8767, 6.79027, 519),
('88189', 'Fréville', '31T', 693357, 5355743, 48.3253, 5.60862, 340),
('88190', 'Frizon', '32T', 304370, 5351370, 48.2853, 6.36278, 340),
('88192', 'Gelvécourt-et-Adompt', '32T', 290421, 5342315, 48.1994, 6.17945, 310),
('88193', 'Gemaingoutte', '32T', 357978, 5346258, 48.2536, 7.08667, 440),
('88194', 'Gemmelaincourt', '31T', 720044, 5351242, 48.2761, 5.96584, 340),
('88195', 'Gendreville', '31T', 701624, 5345799, 48.2333, 5.71528, 320),
('88196', 'Gérardmer', '32T', 342023, 5326596, 48.0731, 6.87917, 670),
('88197', 'Gerbamont', '32T', 332359, 5319022, 48.0025, 6.7525, 480),
('88198', 'Gerbépal', '32T', 345459, 5334998, 48.1494, 6.92222, 640),
('88199', 'Gignéville', '31T', 716814, 5332476, 48.1086, 5.91278, 370),
('88200', 'Gigney', '32T', 302260, 5345261, 48.2297, 6.33722, 350),
('88201', 'Girancourt', '32T', 299997, 5337830, 48.1622, 6.31028, 370),
('88202', 'Gircourt-lès-Viéville', '32T', 292212, 5357953, 48.3406, 6.19584, 280),
('88203', 'Girecourt-sur-Durbion', '32T', 321837, 5346656, 48.2481, 6.60001, 340),
('88204', 'Girmont', '32T', 309779, 5348436, 48.2606, 6.43694, 315),
('88205', 'Girmont-Val-d''Ajol', '32T', 317622, 5314032, 47.9536, 6.55722, 600),
('88206', 'Gironcourt-sur-Vraine', '31T', 717591, 5354920, 48.31, 5.93472, 320),
('88208', 'Godoncourt', '31T', 717981, 5320278, 47.9986, 5.92223, 280),
('88209', 'Golbey', '32T', 309352, 5341219, 48.1956, 6.43444, 330),
('88210', 'Gorhey', '32T', 298183, 5341510, 48.1947, 6.28417, 340),
('88212', 'Grand', '31T', 684102, 5362111, 48.3853, 5.48667, 380),
('88213', 'La Grande-Fosse', '32T', 357022, 5355828, 48.3394, 7.07056, 610),
('88214', 'Grandrupt-de-Bains', '32T', 290285, 5327327, 48.0647, 6.185, 436),
('88215', 'Grandrupt', '32T', 355946, 5359686, 48.3739, 7.05472, 530),
('88216', 'Grandvillers', '32T', 326777, 5345546, 48.2394, 6.66695, 390),
('88218', 'Granges-sur-Vologne', '32T', 335671, 5334715, 48.1444, 6.79083, 500),
('88219', 'Greux', '31T', 697934, 5369841, 48.4506, 5.67694, 270),
('88220', 'Grignoncourt', '31T', 716945, 5315819, 47.9589, 5.9061, 270),
('88221', 'Gruey-lès-Surance', '32T', 290057, 5324492, 48.0392, 6.18333, 433),
('88222', 'Gugnécourt', '32T', 323532, 5346077, 48.2433, 6.62306, 342),
('88223', 'Gugney-aux-Aulx', '32T', 297460, 5353714, 48.3042, 6.26861, 330),
('88224', 'Hadigny-les-Verrières', '32T', 311760, 5355262, 48.3225, 6.46056, 330),
('88225', 'Hadol', '32T', 312295, 5329501, 48.0911, 6.47917, 400),
('88226', 'Hagécourt', '32T', 288818, 5346455, 48.2361, 6.15584, 290),
('88227', 'Hagnéville-et-Roncourt', '31T', 707706, 5348336, 48.2542, 5.79833, 350),
('88228', 'Haillainville', '32T', 313603, 5363052, 48.3931, 6.48195, 320),
('88229', 'Harchéchamp', '31T', 705565, 5363003, 48.3867, 5.77667, 300),
('88230', 'Hardancourt', '32T', 319966, 5361208, 48.3783, 6.56862, 278),
('88231', 'Haréville', '32T', 277363, 5343490, 48.2056, 6.00334, 380),
('88232', 'Harmonville', '31T', 711255, 5373291, 48.4772, 5.85861, 310),
('88233', 'Harol', '32T', 295256, 5337101, 48.1542, 6.24695, 380),
('88234', 'Harsault', '32T', 294245, 5326226, 48.0561, 6.23862, 360),
('88235', 'Hautmougey', '32T', 293635, 5323095, 48.0278, 6.23195, 320),
('88236', 'La Haye', '32T', 293365, 5327123, 48.0639, 6.22639, 370),
('88237', 'Hennecourt', '32T', 298293, 5342866, 48.2069, 6.285, 320),
('88238', 'Hennezel', '32T', 285292, 5326245, 48.0533, 6.1186, 390),
('88239', 'Hergugney', '32T', 292831, 5363062, 48.3867, 6.20166, 280),
('88240', 'Herpelmont', '32T', 331990, 5337510, 48.1686, 6.74028, 480),
('88241', 'Houécourt', '31T', 714484, 5353657, 48.2997, 5.89223, 320),
('88242', 'Houéville', '31T', 708021, 5361733, 48.3744, 5.80917, 320),
('88243', 'Housseras', '32T', 330518, 5353343, 48.3106, 6.71417, 350),
('88244', 'La Houssière', '32T', 340578, 5340137, 48.1944, 6.85472, 487),
('88245', 'Hurbache', '32T', 346969, 5357326, 48.3506, 6.93444, 330),
('88246', 'Hymont', '32T', 287909, 5349796, 48.2658, 6.14194, 280),
('88247', 'Igney', '32T', 306740, 5350084, 48.2744, 6.39528, 310),
('88248', 'Isches', '31T', 711216, 5322004, 48.0164, 5.8325, 300),
('88249', 'Jainvillotte', '31T', 700250, 5348471, 48.2578, 5.69806, 312),
('88250', 'Jarménil', '32T', 319341, 5331685, 48.1128, 6.57278, 380),
('88251', 'Jeanménil', '32T', 328771, 5356238, 48.3361, 6.68945, 330),
('88252', 'Jésonville', '32T', 284966, 5334666, 48.1289, 6.10999, 350),
('88253', 'Jeuxey', '32T', 313357, 5341735, 48.2014, 6.48805, 330),
('88254', 'Jorxey', '32T', 295318, 5353791, 48.3042, 6.23972, 390),
('88255', 'Jubainville', '31T', 702810, 5370941, 48.4589, 5.74334, 319),
('88256', 'Jussarupt', '32T', 332910, 5336463, 48.1594, 6.75306, 480),
('88257', 'Juvaincourt', '32T', 282002, 5357223, 48.3306, 6.05861, 305),
('88258', 'Lamarche', '31T', 707417, 5327831, 48.07, 5.78444, 350),
('88259', 'Landaville', '31T', 702819, 5351684, 48.2858, 5.73417, 370),
('88260', 'Langley', '32T', 301881, 5359864, 48.3608, 6.32527, 290),
('88261', 'Laval-sur-Vologne', '32T', 328877, 5340538, 48.195, 6.69723, 430),
('88262', 'Laveline-devant-Bruyères', '32T', 333066, 5338962, 48.1819, 6.75417, 450),
('88263', 'Laveline-du-Houx', '32T', 328526, 5334368, 48.1394, 6.695, 480),
('88264', 'Légéville-et-Bonfays', '32T', 288179, 5340945, 48.1864, 6.15, 295),
('88265', 'Lemmecourt', '31T', 703098, 5349066, 48.2622, 5.73667, 380),
('88266', 'Lépanges-sur-Vologne', '32T', 326632, 5338072, 48.1722, 6.66805, 404),
('88267', 'Lerrain', '32T', 288033, 5336437, 48.1458, 6.15028, 317),
('88268', 'Lesseux', '32T', 357651, 5349695, 48.2844, 7.08111, 410),
('88269', 'Liézey', '32T', 336667, 5329032, 48.0936, 6.80639, 750),
('88270', 'Liffol-le-Grand', '31T', 691299, 5355024, 48.3194, 5.58055, 310),
('88271', 'Lignéville', '31T', 719527, 5338918, 48.1656, 5.9525, 390),
('88272', 'Lironcourt', '31T', 715900, 5317109, 47.9708, 5.89277, 240),
('88273', 'Longchamp', '32T', 315420, 5344202, 48.2242, 6.51472, 360),
('88274', 'Longchamp-sous-Châtenois', '31T', 709896, 5352219, 48.2883, 5.82972, 320),
('88275', 'Lubine', '32T', 363032, 5353085, 48.3161, 7.15251, 470),
('88276', 'Lusse', '32T', 359385, 5350610, 48.2931, 7.10417, 420),
('88277', 'Luvigny', '32T', 357513, 5373672, 48.5, 7.07112, 400),
('88278', 'Maconcourt', '31T', 717764, 5361171, 48.3661, 5.94028, 350),
('88279', 'Madecourt', '32T', 286358, 5346948, 48.2397, 6.1225, 300),
('88280', 'Madegney', '32T', 298882, 5351933, 48.2886, 6.28861, 340),
('88281', 'Madonne-et-Lamerey', '32T', 294927, 5344655, 48.2219, 6.23888, 300),
('88282', 'Le Magny', '32T', 289281, 5316329, 47.9656, 6.17694, 270),
('88283', 'Malaincourt', '31T', 705266, 5344446, 48.22, 5.76361, 335),
('88284', 'Mandray', '32T', 351169, 5342292, 48.2164, 6.99639, 440),
('88285', 'Mandres-sur-Vair', '31T', 714846, 5345139, 48.2231, 5.89278, 330),
('88286', 'Marainville-sur-Madon', '32T', 290428, 5364325, 48.3972, 6.16862, 260),
('88287', 'Marey', '31T', 715918, 5331515, 48.1003, 5.90028, 350),
('88288', 'Maroncourt', '32T', 289015, 5347870, 48.2489, 6.15778, 280),
('88289', 'Martigny-les-Bains', '31T', 710171, 5331827, 48.105, 5.82333, 355),
('88290', 'Martigny-les-Gerbonvaux', '31T', 706542, 5369531, 48.445, 5.79306, 315),
('88291', 'Martinvelle', '31T', 723635, 5317868, 47.975, 5.99666, 270),
('88292', 'Mattaincourt', '32T', 287334, 5351518, 48.2811, 6.13333, 270),
('88293', 'Maxey-sur-Meuse', '31T', 699598, 5369900, 48.4506, 5.69944, 270),
('88294', 'Mazeley', '32T', 302491, 5346552, 48.2414, 6.33973, 350),
('88295', 'Mazirot', '32T', 288574, 5356016, 48.3219, 6.14778, 280),
('88296', 'Médonville', '31T', 702754, 5344232, 48.2189, 5.72973, 330),
('88297', 'Méménil', '32T', 322768, 5343413, 48.2192, 6.61389, 365),
('88298', 'Ménarmont', '32T', 325521, 5365794, 48.4211, 6.64166, 300),
('88299', 'Ménil-en-Xaintois', '31T', 720586, 5354818, 48.3081, 5.975, 340),
('88300', 'Ménil-de-Senones', '32T', 351616, 5360199, 48.3775, 6.99611, 490),
('88301', 'Ménil-sur-Belvitte', '32T', 329008, 5362072, 48.3886, 6.69027, 280),
('88302', 'Le Ménil', '32T', 334289, 5308245, 47.9061, 6.7825, 515),
('88303', 'Midrevaux', '31T', 693273, 5362447, 48.3856, 5.61056, 300),
('88304', 'Mirecourt', '32T', 287471, 5354079, 48.3042, 6.13389, 280),
('88305', 'Moncel-sur-Vair', '31T', 699817, 5366600, 48.4208, 5.70083, 287),
('88306', 'Le Mont', '32T', 354073, 5363688, 48.4094, 7.02806, 450),
('88307', 'Mont-lès-Lamarche', '31T', 709357, 5322369, 48.0203, 5.80778, 360),
('88308', 'Mont-lès-Neufchâteau', '31T', 695565, 5359250, 48.3561, 5.64, 330),
('88309', 'Monthureux-le-Sec', '32T', 279031, 5339591, 48.1711, 6.02778, 370),
('88310', 'Monthureux-sur-Saône', '31T', 721658, 5323912, 48.03, 5.97333, 256),
('88311', 'Montmotier', '32T', 289296, 5317287, 47.9742, 6.17667, 290),
('88312', 'Morelmaison', '31T', 716124, 5356100, 48.3211, 5.91556, 315),
('88313', 'Moriville', '32T', 309610, 5358147, 48.3478, 6.43028, 340),
('88314', 'Morizécourt', '31T', 713212, 5328013, 48.0697, 5.86223, 350),
('88315', 'Mortagne', '32T', 333210, 5348845, 48.2708, 6.75222, 450),
('88316', 'Morville', '31T', 707880, 5346395, 48.2367, 5.79972, 355),
('88317', 'Moussey', '32T', 353319, 5365561, 48.4261, 7.01722, 370),
('88318', 'Moyemont', '32T', 317627, 5358254, 48.3511, 6.53834, 340),
('88319', 'Moyenmoutier', '32T', 345407, 5360458, 48.3783, 6.91222, 317),
('88320', 'Nayemont-les-Fosses', '32T', 352250, 5351316, 48.2978, 7.00778, 463),
('88321', 'Neufchâteau', '31T', 699786, 5359304, 48.3553, 5.69694, 300),
('88322', 'La Neuveville-devant-Lépanges', '32T', 326514, 5336901, 48.1617, 6.66694, 428),
('88324', 'La Neuveville-sous-Châtenois', '31T', 713775, 5352765, 48.2919, 5.88223, 320),
('88325', 'La Neuveville-sous-Montfort', '32T', 278727, 5345632, 48.2253, 6.02055, 350),
('88326', 'Neuvillers-sur-Fave', '32T', 354484, 5349189, 48.2792, 7.03862, 365),
('88327', 'Nomexy', '32T', 306096, 5353598, 48.3058, 6.385, 290),
('88328', 'Nompatelize', '32T', 340818, 5354621, 48.3247, 6.8525, 375),
('88330', 'Nonville', '31T', 722666, 5329455, 48.0794, 5.98972, 310),
('88331', 'Nonzeville', '32T', 324225, 5348466, 48.265, 6.63139, 340),
('88332', 'Norroy', '31T', 716981, 5344416, 48.2158, 5.92111, 370),
('88333', 'Nossoncourt', '32T', 327708, 5363285, 48.3992, 6.67223, 280),
('88334', 'Oëlleville', '32T', 279159, 5357796, 48.3347, 6.02001, 330),
('88335', 'Offroicourt', '32T', 280480, 5351438, 48.2781, 6.04111, 320),
('88336', 'Ollainville', '31T', 708374, 5349845, 48.2675, 5.80806, 340),
('88337', 'Oncourt', '32T', 305043, 5347545, 48.2511, 6.3736, 320),
('88338', 'Ortoncourt', '32T', 315855, 5360166, 48.3678, 6.51361, 350),
('88340', 'Padoux', '32T', 319604, 5350465, 48.2817, 6.56833, 330),
('88341', 'Pair-et-Grandrupt', '32T', 352926, 5349569, 48.2822, 7.0175, 380),
('88342', 'Pallegney', '32T', 310416, 5352062, 48.2933, 6.44389, 300),
('88343', 'Parey-sous-Montfort', '31T', 718765, 5348534, 48.2522, 5.94722, 360),
('88344', 'Pargny-sous-Mureau', '31T', 692827, 5360423, 48.3675, 5.60362, 300),
('88345', 'La Petite-Fosse', '32T', 355718, 5353946, 48.3222, 7.05361, 496),
('88346', 'La Petite-Raon', '32T', 351738, 5363286, 48.4053, 6.99667, 370),
('88347', 'Pierrefitte', '32T', 290162, 5338646, 48.1664, 6.17778, 330),
('88348', 'Pierrepont-sur-l''Arentèle', '32T', 325522, 5348396, 48.2647, 6.64888, 340),
('88349', 'Plainfaing', '32T', 352483, 5337192, 48.1708, 7.01584, 540),
('88350', 'Pleuvezain', '31T', 716269, 5362567, 48.3792, 5.92084, 368),
('88351', 'Plombières-les-Bains', '32T', 310570, 5315496, 47.9647, 6.46222, 420),
('88352', 'Pompierre', '31T', 698385, 5348684, 48.2603, 5.67306, 310),
('88353', 'Pont-lès-Bonfays', '32T', 286912, 5339106, 48.1694, 6.13389, 312),
('88354', 'Pont-sur-Madon', '32T', 289322, 5361151, 48.3683, 6.15528, 260),
('88355', 'Portieux', '32T', 303155, 5357996, 48.3444, 6.34333, 290),
('88356', 'Les Poulières', '32T', 335739, 5340676, 48.1981, 6.78944, 458),
('88357', 'Poussay', '32T', 286921, 5355923, 48.3206, 6.12555, 270),
('88358', 'Pouxeux', '32T', 318866, 5331051, 48.1069, 6.56667, 390),
('88359', 'Prey', '32T', 328015, 5338679, 48.1781, 6.68639, 412),
('88360', 'Provenchères-lès-Darney', '31T', 719994, 5334854, 48.1289, 5.95667, 380),
('88361', 'Provenchères-sur-Fave', '32T', 357660, 5352507, 48.3097, 7.08028, 408),
('88362', 'Le Puid', '32T', 354929, 5361782, 48.3925, 7.04028, 540),
('88363', 'Punerot', '31T', 707544, 5373586, 48.4811, 5.80861, 298),
('88364', 'Puzieux', '32T', 284926, 5357668, 48.3356, 6.09778, 290),
('88365', 'Racécourt', '32T', 291589, 5348825, 48.2583, 6.19195, 290),
('88366', 'Rainville', '31T', 713744, 5360153, 48.3583, 5.88555, 320),
('88367', 'Rambervillers', '32T', 324612, 5357015, 48.3419, 6.63305, 290),
('88368', 'Ramecourt', '32T', 285262, 5354564, 48.3078, 6.10389, 280),
('88369', 'Ramonchamp', '32T', 331045, 5306732, 47.8917, 6.73972, 470),
('88370', 'Rancourt', '32T', 285598, 5344875, 48.2208, 6.11333, 320),
('88371', 'Raon-aux-Bois', '32T', 315377, 5325569, 48.0567, 6.52222, 410),
('88372', 'Raon-l''Étape', '32T', 340479, 5363808, 48.4072, 6.84444, 300),
('88373', 'Raon-sur-Plaine', '32T', 359369, 5374831, 48.5108, 7.09584, 436),
('88374', 'Rapey', '32T', 296509, 5354799, 48.3136, 6.25528, 350),
('88375', 'Raves', '32T', 355139, 5347380, 48.2631, 7.04806, 390),
('88376', 'Rebeuville', '31T', 700551, 5356889, 48.3333, 5.70611, 298),
('88377', 'Regnévelle', '31T', 721593, 5319149, 47.9872, 5.97, 300),
('88378', 'Regney', '32T', 300385, 5351849, 48.2883, 6.30889, 330),
('88379', 'Rehaincourt', '32T', 312441, 5359659, 48.3622, 6.46778, 334),
('88380', 'Rehaupal', '32T', 331131, 5332221, 48.1208, 6.73084, 510),
('88381', 'Relanges', '32T', 277744, 5333087, 48.1122, 6.01389, 320),
('88382', 'Remicourt', '32T', 281953, 5352185, 48.2853, 6.06055, 300),
('88383', 'Remiremont', '32T', 320424, 5320650, 48.0139, 6.59195, 400),
('88385', 'Remoncourt', '32T', 281116, 5345973, 48.2292, 6.0525, 316),
('88386', 'Remomeix', '32T', 351780, 5348301, 48.2706, 7.0025, 370),
('88387', 'Removille', '31T', 710186, 5360545, 48.3631, 5.83778, 310),
('88388', 'Renauvoid', '32T', 305339, 5335605, 48.1439, 6.38306, 420),
('88389', 'Repel', '31T', 720154, 5359037, 48.3461, 5.97139, 320),
('88390', 'Robécourt', '31T', 700582, 5335470, 48.1408, 5.69638, 340),
('88391', 'Rochesson', '32T', 334928, 5321110, 48.0219, 6.78611, 500),
('88392', 'Rocourt', '31T', 703929, 5331539, 48.1044, 5.73944, 340),
('88393', 'Rollainville', '31T', 702849, 5360062, 48.3611, 5.73861, 320),
('88394', 'Romain-aux-Bois', '31T', 702465, 5329045, 48.0825, 5.71862, 360),
('88395', 'Romont', '32T', 321228, 5358789, 48.3569, 6.58667, 290),
('88398', 'Les Rouges-Eaux', '32T', 336895, 5347874, 48.2631, 6.80222, 400),
('88399', 'Le Roulier', '32T', 322851, 5337447, 48.1656, 6.6175, 430),
('88400', 'Rouvres-en-Xaintois', '32T', 279814, 5355020, 48.31, 6.03028, 320),
('88401', 'Rouvres-la-Chétive', '31T', 706060, 5354459, 48.3097, 5.77916, 380),
('88402', 'Roville-aux-Chênes', '32T', 322417, 5361903, 48.3853, 6.60139, 270),
('88403', 'Rozerotte', '32T', 283455, 5347182, 48.2408, 6.08334, 290),
('88404', 'Rozières-sur-Mouzon', '31T', 701289, 5333022, 48.1186, 5.70472, 340),
('88406', 'Rugney', '32T', 296684, 5358533, 48.3472, 6.25584, 320),
('88407', 'Ruppes', '31T', 704778, 5372218, 48.4697, 5.77055, 285),
('88408', 'Rupt-sur-Moselle', '32T', 325199, 5310614, 47.925, 6.66001, 430),
('88409', 'Saint-Amé', '32T', 326361, 5321610, 48.0242, 6.6711, 400),
('88410', 'Sainte-Barbe', '32T', 331528, 5363047, 48.3981, 6.72389, 350),
('88411', 'Saint-Baslemont', '31T', 722644, 5337492, 48.1517, 5.99362, 400),
('88412', 'Saint-Benoît-la-Chipotte', '32T', 332306, 5358760, 48.3597, 6.7361, 344),
('88413', 'Saint-Dié-des-Vosges', '32T', 347865, 5350010, 48.285, 6.94916, 340),
('88415', 'Saint-Étienne-lès-Remiremont', '32T', 321690, 5321383, 48.0208, 6.60861, 410),
('88416', 'Saint-Genest', '32T', 316673, 5358687, 48.3547, 6.52528, 320),
('88417', 'Saint-Gorgon', '32T', 325948, 5354903, 48.3233, 6.65194, 300),
('88418', 'Sainte-Hélène', '32T', 326148, 5351312, 48.2911, 6.65611, 320),
('88419', 'Saint-Jean-d''Ormont', '32T', 350853, 5355430, 48.3344, 6.9875, 411),
('88421', 'Saint-Julien', '31T', 715968, 5322490, 48.0192, 5.89639, 300),
('88423', 'Saint-Léonard', '32T', 347203, 5342243, 48.215, 6.94305, 416),
('88424', 'Sainte-Marguerite', '32T', 350143, 5348034, 48.2678, 6.98055, 360),
('88425', 'Saint-Maurice-sur-Mortagne', '32T', 321066, 5362162, 48.3872, 6.58305, 270),
('88426', 'Saint-Maurice-sur-Moselle', '32T', 337293, 5302815, 47.8581, 6.82472, 551),
('88427', 'Saint-Menge', '31T', 719178, 5352816, 48.2906, 5.955, 330),
('88428', 'Saint-Michel-sur-Meurthe', '32T', 343313, 5353934, 48.3192, 6.88639, 315),
('88429', 'Saint-Nabord', '32T', 319646, 5324290, 48.0464, 6.57999, 410),
('88430', 'Saint-Ouen-lès-Parey', '31T', 705518, 5340313, 48.1828, 5.765, 340),
('88431', 'Saint-Paul', '31T', 714056, 5356795, 48.3281, 5.88805, 340),
('88432', 'Saint-Pierremont', '32T', 320688, 5367768, 48.4375, 6.57555, 255),
('88433', 'Saint-Prancher', '31T', 719154, 5358782, 48.3442, 5.95778, 330),
('88434', 'Saint-Remimont', '31T', 715327, 5347723, 48.2461, 5.90056, 340),
('88435', 'Saint-Remy', '32T', 339262, 5357137, 48.3469, 6.83056, 360),
('88436', 'Saint-Stail', '32T', 356998, 5359783, 48.375, 7.06889, 570),
('88437', 'Saint-Vallier', '32T', 300849, 5350967, 48.2806, 6.31556, 410),
('88438', 'La Salle', '32T', 338961, 5354519, 48.3233, 6.8275, 370),
('88439', 'Sanchey', '32T', 303997, 5339298, 48.1767, 6.36334, 360),
('88440', 'Sandaucourt', '31T', 711086, 5349604, 48.2644, 5.84444, 350),
('88441', 'Sans-Vallois', '32T', 284953, 5338160, 48.1603, 6.10806, 320),
('88442', 'Sapois', '32T', 332091, 5320482, 48.0156, 6.74834, 440),
('88443', 'Sartes', '31T', 698515, 5347328, 48.2481, 5.67417, 319),
('88444', 'Le Saulcy', '32T', 355154, 5364124, 48.4136, 7.04251, 450),
('88445', 'Saulcy-sur-Meurthe', '32T', 348882, 5344793, 48.2383, 6.96473, 400),
('88446', 'Saulxures-lès-Bulgnéville', '31T', 708698, 5342097, 48.1978, 5.8086, 339),
('88447', 'Saulxures-sur-Moselotte', '32T', 333530, 5312901, 47.9478, 6.77056, 480),
('88448', 'Sauville', '31T', 703282, 5338100, 48.1636, 5.73389, 352),
('88449', 'Savigny', '32T', 294012, 5359279, 48.3531, 6.21945, 301);
INSERT INTO `ods_communes` (`oc_code_insee`, `oc_nom`, `oc_secteur`, `oc_x_utm`, `oc_y_utm`, `oc_latitude`, `oc_longitude`, `oc_altitude`) VALUES
('88450', 'Senaide', '31T', 709224, 5316893, 47.9711, 5.80333, 250),
('88451', 'Senones', '32T', 350387, 5361993, 48.3933, 6.97888, 337),
('88452', 'Senonges', '32T', 281568, 5336711, 48.1461, 6.06334, 320),
('88453', 'Seraumont', '31T', 692165, 5367788, 48.4339, 5.59806, 410),
('88455', 'Serécourt', '31T', 711927, 5326327, 48.055, 5.84416, 350),
('88456', 'Serocourt', '31T', 715595, 5330761, 48.0936, 5.89556, 370),
('88457', 'Sionne', '31T', 695485, 5363358, 48.3931, 5.64083, 290),
('88458', 'Socourt', '32T', 296498, 5364258, 48.3986, 6.25056, 263),
('88459', 'Soncourt', '31T', 715426, 5364143, 48.3936, 5.91027, 360),
('88460', 'Soulosse-sous-Saint-Élophe', '31T', 702504, 5363975, 48.3964, 5.73584, 289),
('88461', 'Suriauville', '31T', 712821, 5339065, 48.1692, 5.8625, 370),
('88462', 'Le Syndicat', '32T', 327439, 5321609, 48.0244, 6.68555, 400),
('88463', 'Taintrux', '32T', 344009, 5346222, 48.25, 6.89862, 372),
('88464', 'Tendon', '32T', 327326, 5332304, 48.1206, 6.67972, 454),
('88465', 'Thaon-les-Vosges', '32T', 308394, 5347123, 48.2483, 6.41889, 310),
('88466', 'They-sous-Montfort', '31T', 720916, 5346298, 48.2314, 5.975, 360),
('88467', 'Thiéfosse', '32T', 330676, 5315364, 47.9692, 6.7314, 440),
('88468', 'Le Thillot', '32T', 333052, 5305006, 47.8767, 6.76722, 490),
('88469', 'Thiraucourt', '32T', 282990, 5352857, 48.2917, 6.07417, 290),
('88470', 'Le Tholy', '32T', 331979, 5327994, 48.0831, 6.74389, 600),
('88471', 'Les Thons', '31T', 715624, 5319509, 47.9925, 5.89028, 250),
('88472', 'Thuillières', '32T', 277579, 5337885, 48.1553, 6.00917, 360),
('88473', 'Tignécourt', '31T', 715723, 5325139, 48.0431, 5.89444, 260),
('88474', 'Tilleux', '31T', 702064, 5353171, 48.2994, 5.72472, 320),
('88475', 'Tollaincourt', '31T', 703590, 5330600, 48.0961, 5.73445, 370),
('88476', 'Totainville', '31T', 721289, 5356886, 48.3264, 5.98555, 330),
('88477', 'Trampot', '31T', 680507, 5359276, 48.3608, 5.43694, 380),
('88478', 'Tranqueville-Graux', '31T', 710844, 5368886, 48.4378, 5.85084, 380),
('88479', 'Trémonzey', '32T', 293811, 5317030, 47.9733, 6.23722, 302),
('88480', 'Ubexy', '32T', 298012, 5357063, 48.3344, 6.27444, 310),
('88481', 'Uriménil', '32T', 306523, 5330867, 48.1017, 6.40111, 380),
('88482', 'Urville', '31T', 704092, 5340880, 48.1883, 5.74611, 336),
('88483', 'Uxegney', '32T', 304697, 5341654, 48.1981, 6.37166, 340),
('88484', 'Uzemain', '32T', 302247, 5329344, 48.0867, 6.34444, 330),
('88485', 'La Vacheresse-et-la-Rouillie', '31T', 707382, 5336794, 48.1506, 5.78833, 370),
('88486', 'Vagney', '32T', 329701, 5319595, 48.0069, 6.71666, 410),
('88487', 'Le Val-d''Ajol', '32T', 312295, 5311082, 47.9256, 6.48723, 360),
('88488', 'Valfroicourt', '32T', 284206, 5342485, 48.1989, 6.09583, 300),
('88489', 'Valleroy-aux-Saules', '32T', 287957, 5347754, 48.2475, 6.14361, 280),
('88490', 'Valleroy-le-Sec', '32T', 277900, 5341367, 48.1867, 6.01166, 400),
('88491', 'Les Vallois', '32T', 286240, 5337740, 48.1569, 6.12555, 320),
('88492', 'Le Valtin', '32T', 352770, 5329090, 48.0981, 7.0225, 750),
('88493', 'Varmonzey', '32T', 298874, 5355797, 48.3233, 6.28666, 310),
('88494', 'Vaubexy', '32T', 294952, 5351084, 48.2797, 6.23611, 300),
('88495', 'Vaudéville', '32T', 317664, 5344624, 48.2286, 6.54472, 340),
('88496', 'Vaudoncourt', '31T', 708366, 5344404, 48.2186, 5.80527, 335),
('88497', 'Vaxoncourt', '32T', 307833, 5351901, 48.2911, 6.40917, 300),
('88498', 'Vecoux', '32T', 323890, 5316711, 47.9794, 6.64, 420),
('88499', 'Velotte-et-Tatignécourt', '32T', 290271, 5349461, 48.2636, 6.17389, 280),
('88500', 'Ventron', '32T', 341097, 5311822, 47.94, 6.87222, 630),
('88501', 'Le Vermont', '32T', 356210, 5361162, 48.3872, 7.05778, 590),
('88502', 'Vervezelle', '32T', 332186, 5343468, 48.2222, 6.74056, 400),
('88503', 'Vexaincourt', '32T', 355728, 5372945, 48.4931, 7.04722, 340),
('88504', 'Vicherey', '31T', 717236, 5363129, 48.3839, 5.93417, 390),
('88505', 'Vienville', '32T', 339901, 5337345, 48.1692, 6.84667, 560),
('88506', 'Vieux-Moulin', '32T', 352017, 5362166, 48.3953, 7.00083, 400),
('88507', 'Villers', '32T', 290464, 5353597, 48.3008, 6.17444, 310),
('88508', 'Ville-sur-Illon', '32T', 292736, 5340067, 48.18, 6.21166, 304),
('88509', 'Villoncourt', '32T', 315274, 5348595, 48.2636, 6.51084, 330),
('88510', 'Villotte', '31T', 706610, 5331264, 48.1011, 5.77528, 360),
('88511', 'Villouxel', '31T', 690988, 5357518, 48.3419, 5.57749, 330),
('88512', 'Viménil', '32T', 324317, 5344107, 48.2258, 6.63444, 380),
('88513', 'Vincey', '32T', 302300, 5357098, 48.3361, 6.33222, 290),
('88514', 'Viocourt', '31T', 712191, 5356508, 48.3261, 5.86278, 310),
('88515', 'Vioménil', '32T', 290169, 5330361, 48.0919, 6.18195, 420),
('88516', 'Vittel', '31T', 719170, 5343355, 48.2056, 5.94999, 347),
('88517', 'Viviers-le-Gras', '31T', 718630, 5334246, 48.1239, 5.93805, 346),
('88518', 'Viviers-lès-Offroicourt', '32T', 279389, 5350460, 48.2689, 6.02694, 330),
('88519', 'La Voivre', '32T', 344425, 5355418, 48.3328, 6.90083, 330),
('88520', 'Les Voivres', '32T', 298368, 5323267, 48.0308, 6.29528, 370),
('88521', 'Vomécourt', '32T', 323059, 5353447, 48.3094, 6.61361, 300),
('88522', 'Vomécourt-sur-Madon', '32T', 290152, 5360224, 48.3603, 6.16694, 270),
('88523', 'Vouxey', '31T', 709310, 5359153, 48.3508, 5.82527, 340),
('88524', 'Vrécourt', '31T', 701051, 5339196, 48.1742, 5.70444, 330),
('88525', 'Vroville', '32T', 290368, 5352116, 48.2875, 6.17388, 300),
('88526', 'Wisembach', '32T', 359471, 5346592, 48.2569, 7.10666, 490),
('88527', 'Xaffévillers', '32T', 323202, 5364629, 48.41, 6.61084, 270),
('88528', 'Xamontarupt', '32T', 325466, 5333720, 48.1328, 6.65416, 430),
('88529', 'Xaronval', '32T', 292080, 5361667, 48.3739, 6.19222, 267),
('88530', 'Xertigny', '32T', 306455, 5324565, 48.045, 6.40305, 480),
('88531', 'Xonrupt-Longemer', '32T', 345517, 5327180, 48.0792, 6.92583, 710),
('88532', 'Zincourt', '32T', 310103, 5353803, 48.3089, 6.43889, 350),
('89001', 'Accolay', '31T', 553330, 5278787, 47.6603, 3.71027, 120),
('89002', 'Aigremont', '31T', 566729, 5285440, 47.7189, 3.88973, 240),
('89003', 'Aillant-sur-Tholon', '31T', 526255, 5302436, 47.8747, 3.35112, 120),
('89004', 'Aisy-sur-Armançon', '31T', 591902, 5280040, 47.6672, 4.22416, 200),
('89005', 'Ancy-le-Franc', '31T', 587111, 5292163, 47.7769, 4.16278, 190),
('89006', 'Ancy-le-Libre', '31T', 584031, 5294990, 47.8028, 4.12223, 170),
('89007', 'Andryes', '31T', 536618, 5263067, 47.52, 3.48639, 163),
('89008', 'Angely', '31T', 576788, 5268366, 47.5642, 4.02083, 220),
('89009', 'Annay-la-Côte', '31T', 566714, 5264877, 47.5339, 3.88639, 280),
('89010', 'Annay-sur-Serein', '31T', 571839, 5286705, 47.7297, 3.95806, 165),
('89011', 'Annéot', '31T', 566312, 5263452, 47.5211, 3.88084, 170),
('89012', 'Annoux', '31T', 578993, 5275312, 47.6264, 4.05139, 310),
('89013', 'Appoigny', '31T', 539297, 5302726, 47.8767, 3.52555, 96),
('89014', 'Arces-Dilo', '31T', 544699, 5326570, 48.0908, 3.60027, 250),
('89015', 'Arcy-sur-Cure', '31T', 557168, 5272463, 47.6031, 3.76056, 140),
('89016', 'Argentenay', '31T', 583262, 5296337, 47.815, 4.11222, 165),
('89017', 'Argenteuil-sur-Armançon', '31T', 583064, 5289850, 47.7567, 4.10833, 174),
('89018', 'Armeau', '31T', 524140, 5321260, 48.0442, 3.32389, 80),
('89019', 'Arthonnay', '31T', 591870, 5309592, 47.9331, 4.22999, 290),
('89020', 'Asnières-sous-Bois', '31T', 548824, 5258896, 47.4817, 3.64805, 200),
('89021', 'Asquins', '31T', 556628, 5259182, 47.4836, 3.75167, 150),
('89022', 'Athie', '31T', 574527, 5265465, 47.5383, 3.99028, 266),
('89023', 'Augy', '31T', 545666, 5290608, 47.7672, 3.60945, 100),
('89024', 'Auxerre', '31T', 542789, 5294044, 47.7983, 3.57139, 120),
('89025', 'Avallon', '31T', 568570, 5259896, 47.4889, 3.91027, 220),
('89027', 'Bagneaux', '31T', 543560, 5345798, 48.2639, 3.58695, 120),
('89028', 'Baon', '31T', 584729, 5301268, 47.8592, 4.13277, 168),
('89029', 'Bassou', '31T', 538431, 5308000, 47.9242, 3.51444, 85),
('89030', 'Bazarnes', '31T', 549827, 5278725, 47.66, 3.66362, 126),
('89031', 'Beaumont', '31T', 542004, 5307592, 47.9203, 3.56223, 100),
('89032', 'Beauvilliers', '31T', 578577, 5251840, 47.4153, 4.04166, 404),
('89033', 'Beauvoir', '31T', 527897, 5293490, 47.7942, 3.3725, 170),
('89034', 'Beine', '31T', 553978, 5296577, 47.8203, 3.72111, 200),
('89035', 'Bellechaume', '31T', 545342, 5321203, 48.0425, 3.60834, 170),
('89036', 'La Belliole', '31T', 506923, 5331309, 48.135, 3.09305, 161),
('89037', 'Béon', '31T', 524181, 5311473, 47.9561, 3.32389, 130),
('89038', 'Bernouil', '31T', 566892, 5305574, 47.9, 3.89501, 221),
('89039', 'Béru', '31T', 566666, 5294517, 47.8006, 3.89028, 240),
('89040', 'Bessy-sur-Cure', '31T', 555561, 5274547, 47.6219, 3.73945, 123),
('89041', 'Beugnon', '31T', 560151, 5318807, 48.0197, 3.80667, 120),
('89042', 'Bierry-les-Belles-Fontaines', '31T', 588894, 5272120, 47.5964, 4.18249, 290),
('89043', 'Blacy', '31T', 578510, 5269346, 47.5728, 4.04389, 290),
('89044', 'Blannay', '31T', 558796, 5264205, 47.5286, 3.78111, 140),
('89045', 'Bleigny-le-Carreau', '31T', 551094, 5298218, 47.8353, 3.68278, 250),
('89046', 'Bléneau', '31T', 496186, 5282804, 47.6986, 2.94917, 160),
('89049', 'Bois-d''Arcy', '31T', 554031, 5266166, 47.5467, 3.71805, 204),
('89050', 'Bonnard', '31T', 538968, 5308467, 47.9283, 3.52167, 83),
('89051', 'Les Bordes', '31T', 528355, 5327115, 48.0967, 3.38083, 115),
('89053', 'Branches', '31T', 536092, 5303724, 47.8858, 3.48277, 150),
('89054', 'Brannay', '31T', 508726, 5341902, 48.2303, 3.1175, 150),
('89055', 'Brienon-sur-Armançon', '31T', 546048, 5315682, 47.9928, 3.61722, 100),
('89056', 'Brion', '31T', 535872, 5315795, 47.9944, 3.48084, 130),
('89057', 'Brosses', '31T', 552078, 5264882, 47.5353, 3.69195, 205),
('89058', 'Bussières', '31T', 580800, 5253290, 47.4281, 4.07139, 350),
('89059', 'Bussy-en-Othe', '31T', 538279, 5318403, 48.0178, 3.51333, 160),
('89060', 'Bussy-le-Repos', '31T', 517449, 5322440, 48.055, 3.23416, 181),
('89061', 'Butteaux', '31T', 560510, 5314180, 47.9781, 3.81083, 120),
('89062', 'Carisey', '31T', 563335, 5308034, 47.9225, 3.84778, 133),
('89063', 'La Celle-Saint-Cyr', '31T', 521706, 5313377, 47.9733, 3.29083, 110),
('89064', 'Censy', '31T', 578240, 5283206, 47.6975, 4.04278, 270),
('89065', 'Cérilly', '31T', 546355, 5336711, 48.1819, 3.62362, 150),
('89066', 'Cerisiers', '31T', 536273, 5330926, 48.1306, 3.48749, 150),
('89067', 'Cézy', '31T', 525470, 5315492, 47.9922, 3.34139, 76),
('89068', 'Chablis', '31T', 559764, 5296047, 47.815, 3.79833, 140),
('89069', 'Chailley', '31T', 552444, 5325710, 48.0825, 3.70417, 170),
('89070', 'Chambeugle', '31T', 503096, 5300741, 47.86, 3.04139, 168),
('89071', 'Chamoux', '31T', 549979, 5256003, 47.4556, 3.66306, 212),
('89072', 'Champcevrais', '31T', 496752, 5288145, 47.7467, 2.95667, 167),
('89073', 'Champignelles', '31T', 505390, 5291820, 47.7797, 3.07195, 170),
('89074', 'Champigny', '31T', 509452, 5351659, 48.3181, 3.1275, 80),
('89075', 'Champlay', '31T', 532666, 5311082, 47.9522, 3.43751, 90),
('89076', 'Champlost', '31T', 549912, 5319388, 48.0258, 3.66944, 120),
('89077', 'Champs-sur-Yonne', '31T', 544942, 5287330, 47.7378, 3.59945, 105),
('89078', 'Champvallon', '31T', 525809, 5309226, 47.9358, 3.34556, 120),
('89079', 'Chamvres', '31T', 526897, 5311639, 47.9575, 3.36028, 100),
('89080', 'La Chapelle-sur-Oreuse', '31T', 522809, 5348733, 48.2914, 3.3075, 80),
('89081', 'La Chapelle-Vaupelteigne', '31T', 557236, 5299418, 47.8456, 3.76501, 130),
('89083', 'Charbuy', '31T', 534868, 5296708, 47.8228, 3.46583, 160),
('89084', 'Charentenay', '31T', 540908, 5277544, 47.65, 3.54472, 200),
('89085', 'Charmoy', '31T', 536676, 5309933, 47.9417, 3.49111, 100),
('89086', 'Charny', '31T', 507144, 5303647, 47.8861, 3.09556, 135),
('89087', 'Chassignelles', '31T', 588325, 5290298, 47.76, 4.1786, 190),
('89088', 'Chassy', '31T', 526058, 5299965, 47.8525, 3.34833, 130),
('89089', 'Chastellux-sur-Cure', '31T', 566665, 5248883, 47.39, 3.88333, 300),
('89091', 'Châtel-Censoir', '31T', 547796, 5264383, 47.5311, 3.635, 150),
('89092', 'Châtel-Gérard', '31T', 582387, 5275946, 47.6317, 4.09667, 320),
('89093', 'Chaumont', '31T', 507845, 5352244, 48.3233, 3.10583, 73),
('89094', 'Chaumot', '31T', 516241, 5325184, 48.0797, 3.21806, 177),
('89095', 'Chemilly-sur-Serein', '31T', 564539, 5291220, 47.7711, 3.86139, 150),
('89096', 'Chemilly-sur-Yonne', '31T', 541938, 5305245, 47.8992, 3.56111, 100),
('89097', 'Chêne-Arnoult', '31T', 505128, 5305343, 47.9014, 3.06861, 178),
('89098', 'Cheney', '31T', 570971, 5306456, 47.9075, 3.94972, 150),
('89099', 'Cheny', '31T', 539986, 5311190, 47.9528, 3.53555, 90),
('89100', 'Chéroy', '31T', 499959, 5338715, 48.2017, 2.99945, 150),
('89101', 'Chéu', '31T', 557061, 5312816, 47.9661, 3.76444, 111),
('89102', 'Chevannes', '31T', 537060, 5288849, 47.7519, 3.49445, 170),
('89103', 'Chevillon', '31T', 513095, 5307547, 47.9211, 3.17528, 170),
('89104', 'Chichée', '31T', 562452, 5293667, 47.7933, 3.83389, 148),
('89105', 'Chichery', '31T', 538177, 5305621, 47.9028, 3.51083, 110),
('89107', 'Chigy', '31T', 535544, 5338579, 48.1994, 3.47834, 95),
('89108', 'Chitry', '31T', 552498, 5290079, 47.7619, 3.70055, 200),
('89109', 'Cisery', '31T', 579942, 5262418, 47.5103, 4.06167, 234),
('89111', 'Les Clérimois', '31T', 532656, 5341803, 48.2286, 3.43972, 233),
('89112', 'Collan', '31T', 565302, 5299256, 47.8433, 3.87278, 170),
('89113', 'Collemiers', '31T', 517456, 5333709, 48.1564, 3.23472, 120),
('89115', 'Compigny', '31T', 520430, 5356937, 48.3653, 3.27583, 120),
('89116', 'Cornant', '31T', 513910, 5330921, 48.1314, 3.18695, 174),
('89117', 'Coulangeron', '31T', 535359, 5280904, 47.6806, 3.47111, 268),
('89118', 'Coulanges-la-Vineuse', '31T', 543702, 5283276, 47.7014, 3.5825, 190),
('89119', 'Coulanges-sur-Yonne', '31T', 540670, 5263742, 47.5258, 3.54028, 160),
('89120', 'Coulours', '31T', 543727, 5334653, 48.1636, 3.58805, 220),
('89122', 'Courgenay', '31T', 540779, 5348247, 48.2861, 3.54972, 130),
('89123', 'Courgis', '31T', 556586, 5291476, 47.7742, 3.75528, 250),
('89124', 'Courlon-sur-Yonne', '31T', 512289, 5353857, 48.3378, 3.16583, 70),
('89125', 'Courson-les-Carrières', '31T', 537617, 5273477, 47.6136, 3.50055, 220),
('89126', 'Courtoin', '31T', 508021, 5330014, 48.1233, 3.10778, 182),
('89127', 'Courtois-sur-Yonne', '31T', 518835, 5341556, 48.2269, 3.25361, 70),
('89128', 'Coutarnoux', '31T', 572516, 5270812, 47.5867, 3.96445, 260),
('89129', 'Crain', '31T', 541754, 5264275, 47.5306, 3.55473, 146),
('89130', 'Cravant', '31T', 552015, 5281307, 47.6831, 3.69306, 120),
('89131', 'Cruzy-le-Châtel', '31T', 590760, 5301020, 47.8561, 4.21333, 270),
('89132', 'Cry', '31T', 592853, 5284502, 47.7072, 4.23778, 193),
('89133', 'Cudot', '31T', 513411, 5314556, 47.9842, 3.17973, 170),
('89134', 'Cussy-les-Forges', '31T', 577469, 5258000, 47.4708, 4.02806, 300),
('89136', 'Cuy', '31T', 519711, 5344955, 48.2575, 3.26556, 65),
('89137', 'Dannemoine', '31T', 571547, 5305197, 47.8961, 3.95722, 140),
('89138', 'Dicy', '31T', 507967, 5308927, 47.9336, 3.10667, 140),
('89139', 'Diges', '31T', 529849, 5286152, 47.7281, 3.39806, 220),
('89141', 'Dissangis', '31T', 573817, 5271940, 47.5967, 3.98194, 210),
('89142', 'Dixmont', '31T', 530867, 5325461, 48.0817, 3.41445, 135),
('89143', 'Dollot', '31T', 505572, 5339860, 48.2119, 3.075, 140),
('89144', 'Domats', '31T', 504983, 5328899, 48.1133, 3.06695, 166),
('89145', 'Domecy-sur-Cure', '31T', 560315, 5250667, 47.4067, 3.79944, 241),
('89146', 'Domecy-sur-le-Vault', '31T', 560971, 5260121, 47.4917, 3.80944, 220),
('89147', 'Dracy', '31T', 518799, 5289224, 47.7561, 3.25083, 180),
('89148', 'Druyes-les-Belles-Fontaines', '31T', 531665, 5266156, 47.5481, 3.42083, 180),
('89149', 'Dyé', '31T', 565023, 5305521, 47.8997, 3.86999, 200),
('89150', 'Égleny', '31T', 527328, 5295062, 47.8083, 3.365, 160),
('89151', 'Égriselles-le-Bocage', '31T', 513500, 5329561, 48.1192, 3.18139, 180),
('89152', 'Épineau-les-Voves', '31T', 535468, 5310636, 47.9481, 3.47499, 90),
('89153', 'Épineuil', '31T', 573448, 5302720, 47.8736, 3.98223, 170),
('89154', 'Escamps', '31T', 535514, 5286308, 47.7292, 3.47361, 160),
('89155', 'Escolives-Sainte-Camille', '31T', 545541, 5285297, 47.7194, 3.60722, 120),
('89156', 'Esnon', '31T', 542987, 5314856, 47.9856, 3.57611, 89),
('89158', 'Étais-la-Sauvin', '31T', 526086, 5261158, 47.5033, 3.34639, 255),
('89159', 'Étaule', '31T', 569220, 5263393, 47.5203, 3.91945, 230),
('89160', 'Étigny', '31T', 521844, 5331656, 48.1378, 3.29362, 70),
('89161', 'Étivey', '31T', 585961, 5281246, 47.6789, 4.14528, 260),
('89162', 'Évry', '31T', 519069, 5345694, 48.2642, 3.25695, 65),
('89163', 'La Ferté-Loupière', '31T', 517649, 5304626, 47.8947, 3.23612, 150),
('89164', 'Festigny', '31T', 540545, 5266767, 47.5531, 3.53889, 200),
('89165', 'Flacy', '31T', 545077, 5341548, 48.2256, 3.60694, 120),
('89167', 'Fleury-la-Vallée', '31T', 533592, 5301671, 47.8675, 3.44917, 140),
('89168', 'Fleys', '31T', 564672, 5296069, 47.8147, 3.86388, 210),
('89169', 'Flogny-la-Chapelle', '31T', 565000, 5311264, 47.9514, 3.87055, 150),
('89170', 'Foissy-lès-Vézelay', '31T', 557580, 5253912, 47.4361, 3.76361, 190),
('89171', 'Foissy-sur-Vanne', '31T', 537672, 5341340, 48.2242, 3.50722, 100),
('89172', 'Fontaine-la-Gaillarde', '31T', 528267, 5340854, 48.2203, 3.38056, 120),
('89173', 'Fontaines', '31T', 519468, 5282095, 47.6919, 3.25944, 319),
('89174', 'Fontenailles', '31T', 534891, 5275437, 47.6314, 3.46444, 300),
('89175', 'Fontenay-près-Chablis', '31T', 560786, 5299763, 47.8483, 3.8125, 170),
('89176', 'Fontenay-près-Vézelay', '31T', 555737, 5251610, 47.4156, 3.73888, 250),
('89177', 'Fontenay-sous-Fouronnes', '31T', 544671, 5273712, 47.6153, 3.59444, 180),
('89178', 'Fontenouilles', '31T', 503509, 5304013, 47.8894, 3.04694, 160),
('89179', 'Fontenoy', '31T', 523114, 5277323, 47.6489, 3.30778, 230),
('89180', 'Fouchères', '31T', 510409, 5335019, 48.1683, 3.14, 170),
('89181', 'Fournaudin', '31T', 547640, 5333572, 48.1536, 3.64055, 170),
('89182', 'Fouronnes', '31T', 542607, 5273388, 47.6125, 3.56694, 240),
('89183', 'Fresnes', '31T', 574315, 5290164, 47.7606, 3.99166, 200),
('89184', 'Fulvy', '31T', 587816, 5288191, 47.7411, 4.17139, 200),
('89186', 'Germigny', '31T', 558251, 5316132, 47.9958, 3.78083, 112),
('89187', 'Gigny', '31T', 596879, 5296765, 47.8169, 4.29416, 231),
('89188', 'Girolles', '31T', 563143, 5264436, 47.5303, 3.83889, 210),
('89189', 'Gisy-les-Nobles', '31T', 518218, 5347544, 48.2808, 3.24556, 64),
('89190', 'Givry', '31T', 559914, 5263228, 47.5197, 3.79583, 140),
('89191', 'Gland', '31T', 591316, 5297385, 47.8233, 4.22, 230),
('89192', 'Grandchamp', '31T', 511481, 5294762, 47.8061, 3.15334, 160),
('89194', 'Grimault', '31T', 574094, 5278088, 47.6519, 3.98666, 210),
('89195', 'Gron', '31T', 519583, 5334148, 48.1603, 3.26334, 90),
('89196', 'Guerchy', '31T', 532870, 5304415, 47.8922, 3.43973, 112),
('89197', 'Guillon', '31T', 581839, 5264390, 47.5278, 4.08722, 217),
('89198', 'Gurgy', '31T', 542048, 5301572, 47.8661, 3.56223, 90),
('89199', 'Gy-l''Évêque', '31T', 541122, 5285573, 47.7222, 3.54833, 186),
('89200', 'Hauterive', '31T', 544905, 5308201, 47.9256, 3.60112, 105),
('89201', 'Héry', '31T', 546835, 5305561, 47.9017, 3.62666, 110),
('89202', 'Irancy', '31T', 549922, 5284654, 47.7133, 3.66556, 173),
('89203', 'Island', '31T', 563904, 5257930, 47.4717, 3.84805, 230),
('89204', 'L''Isle-sur-Serein', '31T', 575543, 5270943, 47.5875, 4.00472, 200),
('89205', 'Jaulges', '31T', 558806, 5312494, 47.9631, 3.78777, 120),
('89206', 'Joigny', '31T', 529661, 5314493, 47.9831, 3.39749, 100),
('89207', 'Jouancy', '31T', 577554, 5281498, 47.6822, 4.03334, 290),
('89208', 'Joux-la-Ville', '31T', 564785, 5274735, 47.6228, 3.86222, 230),
('89209', 'Jouy', '31T', 498059, 5334856, 48.1669, 2.9739, 151),
('89210', 'Jully', '31T', 596996, 5292259, 47.7764, 4.29472, 250),
('89211', 'Junay', '31T', 570930, 5303089, 47.8772, 3.94862, 140),
('89212', 'Jussy', '31T', 543789, 5285500, 47.7214, 3.58388, 150),
('89213', 'Laduz', '31T', 530799, 5303230, 47.8817, 3.41194, 120),
('89214', 'Lailly', '31T', 539453, 5343452, 48.2431, 3.53139, 107),
('89215', 'Lain', '31T', 526009, 5273785, 47.6169, 3.34611, 290),
('89216', 'Lainsecq', '31T', 520564, 5266786, 47.5542, 3.27333, 290),
('89217', 'Lalande', '31T', 524101, 5280877, 47.6808, 3.32111, 220),
('89218', 'Laroche-Saint-Cydroine', '31T', 536203, 5312586, 47.9656, 3.485, 90),
('89219', 'Lasson', '31T', 561017, 5323015, 48.0575, 3.81888, 140),
('89220', 'Lavau', '31T', 499081, 5271380, 47.5958, 2.98778, 200),
('89221', 'Leugny', '31T', 528207, 5281050, 47.6822, 3.37583, 220),
('89222', 'Levis', '31T', 524427, 5277791, 47.6531, 3.32528, 240),
('89223', 'Lézinnes', '31T', 581539, 5294676, 47.8003, 4.08889, 180),
('89224', 'Lichères-près-Aigremont', '31T', 564094, 5286306, 47.7269, 3.85472, 217),
('89225', 'Lichères-sur-Yonne', '31T', 544495, 5261300, 47.5036, 3.59084, 161),
('89226', 'Lignorelles', '31T', 554598, 5301399, 47.8636, 3.73, 220),
('89227', 'Ligny-le-Châtel', '31T', 556656, 5305495, 47.9003, 3.75805, 130),
('89228', 'Lindry', '31T', 531367, 5294218, 47.8006, 3.41888, 190),
('89229', 'Lixy', '31T', 507219, 5342733, 48.2378, 3.09722, 160),
('89230', 'Looze', '31T', 532847, 5315622, 47.9931, 3.44028, 130),
('89232', 'Lucy-le-Bois', '31T', 567145, 5267383, 47.5564, 3.8925, 221),
('89233', 'Lucy-sur-Cure', '31T', 555991, 5275385, 47.6294, 3.74528, 221),
('89234', 'Lucy-sur-Yonne', '31T', 543850, 5263549, 47.5239, 3.5825, 140),
('89235', 'Magny', '31T', 573685, 5259248, 47.4825, 3.97806, 296),
('89236', 'Maillot', '31T', 522901, 5335890, 48.1758, 3.30805, 80),
('89237', 'Mailly-la-Ville', '31T', 550987, 5272437, 47.6033, 3.67833, 130),
('89238', 'Mailly-le-Château', '31T', 547965, 5271763, 47.5975, 3.63806, 174),
('89239', 'Malay-le-Grand', '31T', 525442, 5335808, 48.175, 3.34223, 80),
('89240', 'Malay-le-Petit', '31T', 528190, 5335512, 48.1722, 3.37917, 85),
('89241', 'Malicorne', '31T', 507673, 5296361, 47.8206, 3.10251, 170),
('89242', 'Maligny', '31T', 557229, 5302166, 47.8703, 3.76528, 140),
('89243', 'Marchais-Beton', '31T', 503617, 5298086, 47.8361, 3.04834, 180),
('89244', 'Marmeaux', '31T', 582694, 5270423, 47.5819, 4.09972, 270),
('89245', 'Marsangy', '31T', 519271, 5328497, 48.1094, 3.25889, 90),
('89246', 'Massangis', '31T', 573132, 5274926, 47.6236, 3.97333, 190),
('89247', 'Mélisey', '31T', 580506, 5307600, 47.9167, 4.07751, 214),
('89248', 'Menades', '31T', 562114, 5254977, 47.4453, 3.82389, 230),
('89249', 'Mercy', '31T', 547009, 5319858, 48.0303, 3.63056, 130),
('89250', 'Méré', '31T', 561474, 5305451, 47.8994, 3.8225, 210),
('89251', 'Merry-la-Vallée', '31T', 525003, 5294002, 47.7989, 3.33389, 210),
('89252', 'Merry-Sec', '31T', 536460, 5278194, 47.6561, 3.48555, 300),
('89253', 'Merry-sur-Yonne', '31T', 548498, 5267939, 47.5631, 3.64472, 154),
('89254', 'Mézilles', '31T', 512959, 5284731, 47.7158, 3.17278, 200),
('89255', 'Michery', '31T', 517528, 5350784, 48.31, 3.23639, 80),
('89256', 'Migé', '31T', 540722, 5280290, 47.6747, 3.5425, 200),
('89257', 'Migennes', '31T', 538317, 5312661, 47.9661, 3.51333, 100),
('89259', 'Môlay', '31T', 570457, 5287306, 47.7353, 3.93973, 170),
('89260', 'Molesmes', '31T', 535070, 5273554, 47.6144, 3.46667, 320),
('89261', 'Molinons', '31T', 539914, 5342344, 48.2331, 3.5375, 105),
('89262', 'Molosmes', '31T', 578080, 5304263, 47.8869, 4.04444, 230),
('89263', 'Monéteau', '31T', 543287, 5299760, 47.8497, 3.57861, 95),
('89264', 'Montacher-Villegardin', '31T', 502168, 5335443, 48.1722, 3.02916, 150),
('89265', 'Montigny-la-Resle', '31T', 550919, 5301520, 47.865, 3.68083, 153),
('89266', 'Montillot', '31T', 554248, 5263081, 47.5189, 3.72056, 230),
('89267', 'Montréal', '31T', 578095, 5266006, 47.5428, 4.03778, 261),
('89268', 'Mont-Saint-Sulpice', '31T', 546852, 5311119, 47.9517, 3.6275, 191),
('89270', 'Mouffy', '31T', 538800, 5277622, 47.6508, 3.51666, 228),
('89271', 'Moulins-en-Tonnerrois', '31T', 577542, 5287087, 47.7325, 4.03417, 240),
('89272', 'Moulins-sur-Ouanne', '31T', 525276, 5283846, 47.7075, 3.33694, 210),
('89273', 'Moutiers-en-Puisaye', '31T', 513257, 5272908, 47.6094, 3.17639, 225),
('89274', 'Nailly', '31T', 516484, 5341147, 48.2233, 3.22194, 100),
('89275', 'Neuilly', '31T', 532875, 5307132, 47.9167, 3.44, 113),
('89276', 'Neuvy-Sautour', '31T', 559277, 5321145, 48.0408, 3.79528, 160),
('89277', 'Nitry', '31T', 565976, 5280182, 47.6717, 3.87889, 240),
('89278', 'Noé', '31T', 530178, 5334503, 48.1631, 3.40584, 101),
('89279', 'Noyers', '31T', 574616, 5282973, 47.6958, 3.99445, 180),
('89280', 'Nuits', '31T', 591000, 5287036, 47.7303, 4.21361, 200),
('89281', 'Les Ormes', '31T', 519950, 5299601, 47.8494, 3.26667, 226),
('89282', 'Ormoy', '31T', 542931, 5311212, 47.9528, 3.57499, 140),
('89283', 'Ouanne', '31T', 531493, 5278751, 47.6614, 3.41945, 246),
('89284', 'Pacy-sur-Armançon', '31T', 581824, 5292148, 47.7775, 4.09222, 180),
('89285', 'Pailly', '31T', 523996, 5355438, 48.3517, 3.32389, 160),
('89286', 'Parly', '31T', 526019, 5290240, 47.765, 3.34723, 208),
('89287', 'Paron', '31T', 518605, 5336090, 48.1778, 3.25027, 80),
('89288', 'Paroy-en-Othe', '31T', 542845, 5320275, 48.0343, 3.57475, 0),
('89289', 'Paroy-sur-Tholon', '31T', 527935, 5311428, 47.9556, 3.37417, 98),
('89290', 'Pasilly', '31T', 580991, 5283244, 47.6975, 4.07945, 299),
('89291', 'Passy', '31T', 522621, 5328509, 48.1094, 3.30389, 95),
('89292', 'Percey', '31T', 561708, 5312617, 47.9639, 3.82666, 120),
('89294', 'Perreux', '31T', 511511, 5300690, 47.8594, 3.15389, 190),
('89295', 'Perrigny', '31T', 540151, 5296403, 47.8197, 3.53638, 130),
('89296', 'Perrigny-sur-Armançon', '31T', 592882, 5282681, 47.6908, 4.23777, 200),
('89297', 'Pierre-Perthuis', '31T', 559070, 5253587, 47.4331, 3.78333, 180),
('89298', 'Piffonds', '31T', 510950, 5322300, 48.0539, 3.14694, 186),
('89299', 'Pimelles', '31T', 587943, 5299001, 47.8383, 4.17527, 224),
('89300', 'Pisy', '31T', 586082, 5267415, 47.5544, 4.14417, 330),
('89302', 'Plessis-Saint-Jean', '31T', 522720, 5355464, 48.3519, 3.30667, 152),
('89303', 'Poilly-sur-Serein', '31T', 566879, 5290505, 47.7644, 3.8925, 170),
('89304', 'Poilly-sur-Tholon', '31T', 529293, 5301339, 47.8647, 3.39167, 140),
('89306', 'Pontaubert', '31T', 564970, 5259948, 47.4897, 3.8625, 170),
('89307', 'Pontigny', '31T', 553202, 5306296, 47.9078, 3.71194, 112),
('89308', 'Pont-sur-Vanne', '31T', 533056, 5336804, 48.1836, 3.44472, 90),
('89309', 'Pont-sur-Yonne', '31T', 515475, 5348276, 48.2875, 3.20861, 80),
('89310', 'La Postolle', '31T', 533035, 5347672, 48.2814, 3.44528, 135),
('89311', 'Pourrain', '31T', 530894, 5289307, 47.7564, 3.41222, 265),
('89312', 'Précy-le-Sec', '31T', 562587, 5271407, 47.5931, 3.8325, 270),
('89313', 'Précy-sur-Vrin', '31T', 518474, 5312779, 47.9681, 3.2475, 120),
('89314', 'Prégilbert', '31T', 550345, 5276630, 47.6411, 3.67027, 135),
('89315', 'Préhy', '31T', 556495, 5289390, 47.7554, 3.7538, 285),
('89316', 'Provency', '31T', 571839, 5266419, 47.5472, 3.95473, 250),
('89317', 'Prunoy', '31T', 509672, 5306738, 47.9139, 3.12944, 164),
('89318', 'Quarré-les-Tombes', '31T', 575269, 5246671, 47.3692, 3.99694, 450),
('89319', 'Quenne', '31T', 548716, 5291775, 47.7775, 3.65028, 200),
('89320', 'Quincerot', '31T', 586878, 5310410, 47.9411, 4.16334, 240),
('89321', 'Ravières', '31T', 592159, 5287548, 47.7347, 4.22917, 200),
('89323', 'Roffey', '31T', 568778, 5307541, 47.9175, 3.92055, 130),
('89324', 'Rogny-les-Sept-Écluses', '31T', 491463, 5288335, 47.7483, 2.88611, 160),
('89325', 'Ronchères', '31T', 508500, 5278396, 47.6589, 3.1132, 240),
('89327', 'Rousson', '31T', 519670, 5326831, 48.0944, 3.26417, 90),
('89328', 'Rouvray', '31T', 549973, 5305278, 47.8989, 3.66862, 140),
('89329', 'Rugny', '31T', 585704, 5305575, 47.8978, 4.14666, 300),
('89330', 'Sacy', '31T', 561602, 5279702, 47.6678, 3.82056, 170),
('89331', 'Sainpuits', '31T', 519366, 5262799, 47.5183, 3.25723, 240),
('89332', 'Saint-Agnan', '31T', 503770, 5350202, 48.305, 3.05084, 90),
('89333', 'Saint-André-en-Terre-Plaine', '31T', 579903, 5259114, 47.4806, 4.06055, 310),
('89334', 'Saint-Aubin-Château-Neuf', '31T', 523162, 5296649, 47.8228, 3.30944, 200),
('89335', 'Saint-Aubin-sur-Yonne', '31T', 525943, 5316390, 48.0003, 3.34778, 90),
('89336', 'Saint-Brancher', '31T', 575125, 5252999, 47.4261, 3.99611, 371),
('89337', 'Saint-Bris-le-Vineux', '31T', 548956, 5287949, 47.7431, 3.65305, 170),
('89338', 'Saint-Clément', '31T', 521398, 5340422, 48.2167, 3.28806, 70),
('89339', 'Sainte-Colombe', '31T', 572795, 5268500, 47.5658, 3.96778, 270),
('89340', 'Sainte-Colombe-sur-Loing', '31T', 517675, 5268413, 47.5689, 3.23499, 270),
('89341', 'Saint-Cyr-les-Colons', '31T', 555309, 5287883, 47.7419, 3.73778, 280),
('89342', 'Saint-Denis', '31T', 519908, 5341528, 48.2267, 3.26806, 67),
('89343', 'Saint-Denis-sur-Ouanne', '31T', 509834, 5296642, 47.8231, 3.13138, 180),
('89344', 'Saint-Fargeau', '31T', 505300, 5276384, 47.6408, 3.07056, 200),
('89345', 'Saint-Florentin', '31T', 554225, 5316679, 48.0011, 3.72694, 120),
('89346', 'Saint-Georges-sur-Baulche', '31T', 539975, 5294889, 47.8061, 3.53389, 160),
('89347', 'Saint-Germain-des-Champs', '31T', 569405, 5251230, 47.4108, 3.92, 357),
('89348', 'Saint-Julien-du-Sault', '31T', 522055, 5319708, 48.0303, 3.29583, 90),
('89349', 'Saint-Léger-Vauban', '31T', 578428, 5248905, 47.3889, 4.03917, 440),
('89350', 'Saint-Loup-d''Ordon', '31T', 512222, 5317918, 48.0144, 3.16389, 160),
('89351', 'Sainte-Magnance', '31T', 581121, 5255796, 47.4506, 4.07611, 330),
('89352', 'Saint-Martin-des-Champs', '31T', 502586, 5278111, 47.6564, 3.03444, 210),
('89353', 'Saint-Martin-d''Ordon', '31T', 513131, 5318785, 48.0222, 3.17611, 157),
('89354', 'Saint-Martin-du-Tertre', '31T', 519315, 5340044, 48.2133, 3.26, 80),
('89355', 'Saint-Martin-sur-Armançon', '31T', 579948, 5302899, 47.8744, 4.06917, 150),
('89356', 'Saint-Martin-sur-Ocre', '31T', 525535, 5296011, 47.8169, 3.34111, 160),
('89358', 'Saint-Martin-sur-Ouanne', '31T', 507856, 5298708, 47.8417, 3.10499, 150),
('89359', 'Saint-Maurice-aux-Riches-Hommes', '31T', 538299, 5355548, 48.3519, 3.51695, 110),
('89360', 'Saint-Maurice-le-Vieil', '31T', 526280, 5296786, 47.8239, 3.35111, 150),
('89361', 'Saint-Maurice-Thizouaille', '31T', 527169, 5297840, 47.8333, 3.36305, 130),
('89362', 'Saint-Moré', '31T', 558576, 5269482, 47.5761, 3.77889, 139),
('89363', 'Sainte-Pallaye', '31T', 550484, 5277465, 47.6486, 3.67222, 120),
('89364', 'Saint-Père', '31T', 557680, 5256506, 47.4594, 3.76528, 150),
('89365', 'Saint-Privé', '31T', 499979, 5281136, 47.6836, 2.99972, 180),
('89366', 'Saint-Romain-le-Preux', '31T', 518382, 5308981, 47.9339, 3.24611, 160),
('89367', 'Saints', '31T', 519745, 5274161, 47.6206, 3.26277, 250),
('89368', 'Saint-Sauveur-en-Puisaye', '31T', 514883, 5273838, 47.6178, 3.19806, 250),
('89369', 'Saint-Sérotin', '31T', 511878, 5343698, 48.2464, 3.16, 180),
('89370', 'Saint-Valérien', '31T', 507083, 5336157, 48.1786, 3.09528, 165),
('89371', 'Sainte-Vertu', '31T', 568479, 5288949, 47.7503, 3.91361, 170),
('89373', 'Saligny', '31T', 526186, 5340103, 48.2136, 3.3525, 105),
('89374', 'Sambourg', '31T', 576553, 5290995, 47.7678, 4.02167, 250),
('89375', 'Santigny', '31T', 584388, 5268872, 47.5678, 4.12194, 310),
('89376', 'Sarry', '31T', 580597, 5280089, 47.6692, 4.07361, 310),
('89377', 'Sauvigny-le-Beuréal', '31T', 583576, 5259906, 47.4872, 4.10945, 270),
('89378', 'Sauvigny-le-Bois', '31T', 570756, 5262609, 47.5131, 3.93972, 290),
('89379', 'Savigny-en-Terre-Plaine', '31T', 581909, 5260840, 47.4958, 4.08749, 250),
('89380', 'Savigny-sur-Clairis', '31T', 506932, 5324548, 48.0742, 3.09306, 170),
('89381', 'Sceaux', '31T', 577026, 5264633, 47.5306, 4.02334, 220),
('89382', 'Seignelay', '31T', 544862, 5305700, 47.9031, 3.60028, 120),
('89383', 'Sementron', '31T', 526912, 5277154, 47.6472, 3.35834, 279),
('89384', 'Senan', '31T', 526963, 5306453, 47.9108, 3.36084, 100),
('89385', 'Sennevoy-le-Bas', '31T', 596730, 5295713, 47.8075, 4.29194, 240),
('89386', 'Sennevoy-le-Haut', '31T', 595895, 5295884, 47.8092, 4.28083, 250),
('89387', 'Sens', '31T', 521240, 5338261, 48.1972, 3.28583, 70),
('89388', 'Sépeaux', '31T', 517653, 5309906, 47.9422, 3.23639, 120),
('89390', 'Serbonnes', '31T', 515361, 5352105, 48.3219, 3.20722, 66),
('89391', 'Sergines', '31T', 519472, 5354371, 48.3422, 3.26278, 120),
('89392', 'Sermizelles', '31T', 559625, 5264955, 47.5353, 3.79222, 140),
('89393', 'Serrigny', '31T', 568368, 5298334, 47.8347, 3.91361, 230),
('89394', 'Sery', '31T', 551390, 5274107, 47.6183, 3.68389, 120),
('89395', 'Les Sièges', '31T', 538551, 5336499, 48.1806, 3.51861, 130),
('89397', 'Sommecaise', '31T', 517290, 5299562, 47.8492, 3.23111, 193),
('89398', 'Sormery', '31T', 557610, 5326284, 48.0872, 3.77361, 190),
('89399', 'Soucy', '31T', 524106, 5344076, 48.2494, 3.32472, 100),
('89400', 'Sougères-en-Puisaye', '31T', 524784, 5267327, 47.5589, 3.32945, 220),
('89402', 'Soumaintrain', '31T', 561787, 5318855, 48.02, 3.82862, 135),
('89403', 'Stigny', '31T', 592339, 5291905, 47.7739, 4.2325, 240),
('89404', 'Subligny', '31T', 515016, 5334690, 48.1653, 3.20194, 160),
('89405', 'Taingy', '31T', 530393, 5273713, 47.6161, 3.40445, 340),
('89406', 'Talcy', '31T', 580454, 5269280, 47.5719, 4.06972, 250),
('89407', 'Tanlay', '31T', 581277, 5299953, 47.8478, 4.08638, 152),
('89408', 'Tannerre-en-Puisaye', '31T', 509830, 5286856, 47.735, 3.13111, 188),
('89409', 'Tharoiseau', '31T', 560732, 5256938, 47.4631, 3.80583, 300),
('89410', 'Tharot', '31T', 564693, 5264206, 47.5281, 3.85944, 240),
('89411', 'Theil-sur-Vanne', '31T', 531704, 5334913, 48.1667, 3.42639, 100),
('89412', 'Thizy', '31T', 579475, 5269081, 47.5703, 4.05667, 300),
('89413', 'Thorey', '31T', 583949, 5306352, 47.905, 4.12334, 240),
('89414', 'Thorigny-sur-Oreuse', '31T', 529792, 5348982, 48.2933, 3.40166, 105),
('89415', 'Thory', '31T', 568515, 5268170, 47.5633, 3.91083, 250),
('89416', 'Thury', '31T', 522181, 5270342, 47.5861, 3.295, 270),
('89417', 'Tissey', '31T', 567535, 5300270, 47.8522, 3.90278, 190),
('89418', 'Tonnerre', '31T', 572997, 5300583, 47.8544, 3.97583, 150),
('89419', 'Toucy', '31T', 522076, 5286889, 47.735, 3.29444, 190),
('89420', 'Treigny', '31T', 513857, 5266396, 47.5508, 3.18417, 240),
('89421', 'Trévilly', '31T', 579725, 5264515, 47.5292, 4.05917, 230),
('89422', 'Trichey', '31T', 584984, 5309363, 47.9319, 4.13778, 240),
('89423', 'Tronchoy', '31T', 570566, 5307347, 47.9156, 3.94445, 150),
('89424', 'Trucy-sur-Yonne', '31T', 549627, 5275235, 47.6286, 3.66056, 130),
('89425', 'Turny', '31T', 555724, 5320275, 48.0333, 3.7475, 130),
('89426', 'Val-de-Mercy', '31T', 544119, 5280500, 47.6764, 3.58778, 160),
('89427', 'Vallan', '31T', 540396, 5288130, 47.7453, 3.53889, 150),
('89428', 'Vallery', '31T', 503465, 5342853, 48.2389, 3.04667, 116),
('89429', 'Vareilles', '31T', 535065, 5335920, 48.1756, 3.47167, 104),
('89430', 'Varennes', '31T', 558559, 5306224, 47.9067, 3.78361, 180),
('89431', 'Vassy', '31T', 587855, 5269016, 47.5686, 4.16805, 330),
('89432', 'Vaudeurs', '31T', 540941, 5331390, 48.1344, 3.55027, 180),
('89433', 'Vault-de-Lugny', '31T', 563788, 5260892, 47.4983, 3.84694, 150),
('89434', 'Vaumort', '31T', 532952, 5333407, 48.1531, 3.44305, 110),
('89436', 'Venizy', '31T', 552927, 5320403, 48.0347, 3.71, 130),
('89437', 'Venouse', '31T', 551014, 5304948, 47.8958, 3.6825, 130),
('89438', 'Venoy', '31T', 547815, 5294979, 47.8064, 3.63861, 210),
('89439', 'Vergigny', '31T', 553614, 5313339, 47.9711, 3.71833, 100),
('89440', 'Verlin', '31T', 517442, 5318056, 48.0156, 3.23389, 120),
('89441', 'Vermenton', '31T', 555161, 5279267, 47.6644, 3.73472, 131),
('89442', 'Vernoy', '31T', 509328, 5326836, 48.0947, 3.12528, 180),
('89443', 'Véron', '31T', 522984, 5330641, 48.1286, 3.30888, 79),
('89445', 'Vézannes', '31T', 565384, 5303024, 47.8772, 3.87444, 170),
('89446', 'Vézelay', '31T', 556166, 5257202, 47.4658, 3.74528, 300),
('89447', 'Vézinnes', '31T', 570453, 5304720, 47.8919, 3.9425, 140),
('89448', 'Vignes', '31T', 584269, 5264085, 47.5247, 4.11944, 250),
('89449', 'Villeblevin', '31T', 506177, 5352242, 48.3233, 3.08333, 80),
('89450', 'Villebougis', '31T', 511827, 5338851, 48.2028, 3.15917, 177),
('89451', 'Villechétive', '31T', 537788, 5326984, 48.095, 3.50751, 240),
('89452', 'Villecien', '31T', 524614, 5316970, 48.0056, 3.33, 80),
('89453', 'Villefargeau', '31T', 537829, 5292157, 47.7817, 3.505, 130),
('89454', 'Villefranche', '31T', 509605, 5309547, 47.9392, 3.12861, 150),
('89456', 'Villemanoche', '31T', 513514, 5349661, 48.3, 3.18222, 70),
('89457', 'Villemer', '31T', 535408, 5306993, 47.9153, 3.47389, 120),
('89458', 'Villenavotte', '31T', 517631, 5343898, 48.2481, 3.2375, 90),
('89459', 'Villeneuve-la-Dondagre', '31T', 510188, 5331623, 48.1378, 3.13694, 180),
('89460', 'Villeneuve-la-Guyard', '31T', 504796, 5354093, 48.34, 3.06472, 70),
('89461', 'Villeneuve-l''Archevêque', '31T', 541399, 5342447, 48.2339, 3.55751, 110),
('89462', 'Villeneuve-les-Genêts', '31T', 506894, 5286944, 47.7358, 3.09195, 186),
('89463', 'Villeneuve-Saint-Salves', '31T', 548748, 5300297, 47.8542, 3.65166, 165),
('89464', 'Villeneuve-sur-Yonne', '31T', 522178, 5325266, 48.0803, 3.29777, 80),
('89465', 'Villeperrot', '31T', 517008, 5345409, 48.2617, 3.22916, 81),
('89466', 'Villeroy', '31T', 513878, 5335459, 48.1722, 3.18667, 181),
('89467', 'Villethierry', '31T', 505442, 5345603, 48.2636, 3.07333, 157),
('89468', 'Villevallier', '31T', 523590, 5319066, 48.0244, 3.31639, 76),
('89469', 'Perceneige', '31T', 530313, 5355592, 48.3528, 3.40916, 162),
('89470', 'Villiers-les-Hauts', '31T', 586299, 5286532, 47.7264, 4.15083, 240),
('89471', 'Villiers-Louis', '31T', 529914, 5337620, 48.1911, 3.40251, 130),
('89472', 'Villiers-Saint-Benoît', '31T', 515731, 5292086, 47.7819, 3.21, 180),
('89473', 'Villiers-sur-Tholon', '31T', 525293, 5303944, 47.8883, 3.33834, 130),
('89474', 'Villiers-Vineux', '31T', 562416, 5310433, 47.9442, 3.83583, 140),
('89475', 'Villon', '31T', 588837, 5307105, 47.9111, 4.18888, 330),
('89477', 'Villy', '31T', 556255, 5301909, 47.8681, 3.75222, 150),
('89478', 'Vincelles', '31T', 547533, 5283708, 47.705, 3.63361, 110),
('89479', 'Vincelottes', '31T', 548155, 5284114, 47.7086, 3.64194, 110),
('89480', 'Vinneuf', '31T', 510105, 5355181, 48.3497, 3.13639, 90),
('89481', 'Vireaux', '31T', 578626, 5293185, 47.7872, 4.04973, 200),
('89482', 'Viviers', '31T', 568970, 5294915, 47.8039, 3.9211, 260),
('89483', 'Voisines', '31T', 529239, 5344409, 48.2522, 3.39389, 130),
('89484', 'Volgré', '31T', 524448, 5307275, 47.9183, 3.32722, 140),
('89485', 'Voutenay-sur-Cure', '31T', 559071, 5268005, 47.5628, 3.78527, 140),
('89486', 'Yrouerre', '31T', 570980, 5293889, 47.7944, 3.94778, 280),
('90001', 'Andelnans', '32T', 339502, 5274361, 47.6028, 6.86472, 350),
('90002', 'Angeot', '32T', 351044, 5284496, 47.6967, 7.01472, 367),
('90003', 'Anjoutey', '32T', 344891, 5285244, 47.7019, 6.9325, 410),
('90004', 'Argiésans', '32T', 336484, 5274785, 47.6058, 6.82444, 350),
('90005', 'Auxelles-Bas', '32T', 333680, 5289200, 47.7347, 6.78167, 490),
('90006', 'Auxelles-Haut', '32T', 332629, 5290342, 47.7447, 6.76722, 570),
('90007', 'Banvillars', '32T', 335773, 5273260, 47.5919, 6.81556, 358),
('90008', 'Bavilliers', '32T', 337112, 5276312, 47.6197, 6.83222, 356),
('90009', 'Beaucourt', '32T', 343927, 5261668, 47.4897, 6.92805, 440),
('90010', 'Belfort', '32T', 338955, 5278763, 47.6422, 6.85583, 361),
('90011', 'Bermont', '32T', 338600, 5271946, 47.5808, 6.85361, 350),
('90012', 'Bessoncourt', '32T', 344827, 5278944, 47.6453, 6.93389, 355),
('90013', 'Bethonvilliers', '32T', 347143, 5282867, 47.6811, 6.96333, 381),
('90014', 'Boron', '32T', 350550, 5269280, 47.5597, 7.01334, 385),
('90015', 'Botans', '32T', 338399, 5273743, 47.5969, 6.85028, 355),
('90016', 'Bourg-sous-Châtelet', '32T', 346086, 5285490, 47.7044, 6.94834, 400),
('90017', 'Bourogne', '32T', 343515, 5269742, 47.5622, 6.91972, 343),
('90018', 'Brebotte', '32T', 347764, 5271514, 47.5792, 6.97555, 343),
('90019', 'Bretagne', '32T', 349461, 5273292, 47.5956, 6.99749, 367),
('90020', 'Buc', '32T', 333592, 5275917, 47.6153, 6.78556, 380),
('90021', 'Charmois', '32T', 345072, 5270874, 47.5728, 6.94, 334),
('90022', 'Châtenois-les-Forges', '32T', 338260, 5269484, 47.5586, 6.85, 340),
('90023', 'Chaux', '32T', 337607, 5286524, 47.7117, 6.83501, 420),
('90024', 'Chavanatte', '32T', 354681, 5271461, 47.5803, 7.0675, 370),
('90025', 'Chavannes-les-Grands', '32T', 353128, 5272859, 47.5925, 7.04639, 371),
('90026', 'Chèvremont', '32T', 344025, 5277081, 47.6283, 6.92388, 350),
('90027', 'Courcelles', '32T', 355313, 5262364, 47.4986, 7.07889, 400),
('90028', 'Courtelevant', '32T', 355528, 5264305, 47.5161, 7.08111, 390),
('90029', 'Cravanche', '32T', 337070, 5280021, 47.6531, 6.83028, 389),
('90030', 'Croix', '32T', 345850, 5256767, 47.4461, 6.95528, 603),
('90031', 'Cunelières', '32T', 349388, 5276908, 47.6281, 6.99528, 354),
('90032', 'Danjoutin', '32T', 339522, 5275844, 47.6161, 6.86444, 356),
('90033', 'Delle', '32T', 349232, 5263599, 47.5083, 6.99777, 380),
('90034', 'Denney', '32T', 343596, 5280521, 47.6592, 6.91695, 350),
('90035', 'Dorans', '32T', 337473, 5272780, 47.5881, 6.83833, 362),
('90036', 'Eguenigue', '32T', 344924, 5281783, 47.6708, 6.93417, 360),
('90037', 'Éloie', '32T', 340482, 5284159, 47.6911, 6.87417, 400),
('90039', 'Essert', '32T', 335904, 5277921, 47.6339, 6.81555, 360),
('90041', 'Étueffont', '32T', 344034, 5287522, 47.7222, 6.92027, 450),
('90042', 'Évette-Salbert', '32T', 334935, 5282769, 47.6772, 6.80083, 400),
('90043', 'Faverois', '32T', 352196, 5264913, 47.5208, 7.03667, 382),
('90044', 'Felon', '32T', 348255, 5285495, 47.705, 6.97723, 390),
('90045', 'Fêche-l''Église', '32T', 345709, 5263351, 47.5053, 6.95111, 360),
('90046', 'Florimont', '32T', 354633, 5263647, 47.51, 7.06944, 390),
('90047', 'Fontaine', '32T', 349578, 5280240, 47.6581, 6.99666, 363),
('90048', 'Fontenelle', '32T', 346407, 5276307, 47.6219, 6.95584, 350),
('90049', 'Foussemagne', '32T', 350181, 5277722, 47.6356, 7.00555, 356),
('90050', 'Frais', '32T', 348855, 5278899, 47.6458, 6.9875, 353),
('90051', 'Froidefontaine', '32T', 345614, 5270026, 47.5653, 6.9475, 340),
('90052', 'Giromagny', '32T', 336695, 5290442, 47.7467, 6.82139, 488),
('90053', 'Grandvillars', '32T', 347690, 5267067, 47.5392, 6.97611, 354),
('90054', 'Grosmagny', '32T', 341351, 5287718, 47.7233, 6.88445, 465),
('90055', 'Grosne', '32T', 349799, 5270998, 47.575, 7.00277, 365),
('90056', 'Joncherey', '32T', 349636, 5265472, 47.5253, 7.0025, 367),
('90057', 'Lachapelle-sous-Chaux', '32T', 336398, 5285817, 47.705, 6.81917, 408),
('90058', 'Lachapelle-sous-Rougemont', '32T', 350813, 5286077, 47.7108, 7.01111, 380),
('90059', 'Lacollonge', '32T', 346866, 5281052, 47.6647, 6.96028, 360),
('90060', 'Lagrange', '32T', 348477, 5282832, 47.6811, 6.98111, 370),
('90061', 'Lamadeleine-Val-des-Anges', '32T', 343630, 5291858, 47.7611, 6.91333, 654),
('90062', 'Larivière', '32T', 349729, 5282028, 47.6742, 6.99806, 360),
('90063', 'Lebetain', '32T', 347687, 5261322, 47.4875, 6.97806, 430),
('90064', 'Lepuix-Neuf', '32T', 357036, 5266924, 47.54, 7.10027, 411),
('90065', 'Lepuix', '32T', 336443, 5291840, 47.7592, 6.8175, 514),
('90066', 'Leval', '32T', 348595, 5288143, 47.7289, 6.98084, 430),
('90067', 'Menoncourt', '32T', 345945, 5281756, 47.6708, 6.94777, 376),
('90068', 'Meroux', '32T', 341862, 5273524, 47.5958, 6.8964, 360),
('90069', 'Méziré', '32T', 343413, 5266717, 47.535, 6.91944, 342),
('90070', 'Montbouton', '32T', 343105, 5259898, 47.4736, 6.91778, 510),
('90071', 'Montreux-Château', '32T', 349981, 5274792, 47.6092, 7.00389, 352),
('90072', 'Morvillars', '32T', 344556, 5267984, 47.5467, 6.93417, 350),
('90073', 'Moval', '32T', 341508, 5272396, 47.5856, 6.8921, 354),
('90074', 'Novillard', '32T', 347550, 5274516, 47.6061, 6.97166, 355),
('90075', 'Offemont', '32T', 340755, 5281185, 47.6644, 6.87889, 370),
('90076', 'Pérouse', '32T', 341735, 5278100, 47.6369, 6.89305, 375),
('90077', 'Petit-Croix', '32T', 347948, 5275339, 47.6136, 6.97667, 350),
('90078', 'Petitefontaine', '32T', 350554, 5287319, 47.7219, 7.00723, 390),
('90079', 'Petitmagny', '32T', 342265, 5287632, 47.7228, 6.89666, 481),
('90080', 'Phaffans', '32T', 345122, 5280604, 47.6603, 6.93723, 360),
('90081', 'Réchésy', '32T', 357767, 5263416, 47.5086, 7.11111, 430),
('90082', 'Autrechêne', '32T', 346577, 5273275, 47.5947, 6.95916, 350),
('90083', 'Recouvrance', '32T', 348104, 5270918, 47.5739, 6.98028, 347),
('90084', 'Reppe', '32T', 351882, 5280551, 47.6614, 7.02722, 369),
('90085', 'Riervescemont', '32T', 341162, 5292265, 47.7642, 6.88027, 580),
('90086', 'Romagny-sous-Rougemont', '32T', 347689, 5286992, 47.7183, 6.96916, 410),
('90087', 'Roppe', '32T', 343773, 5281659, 47.6694, 6.9189, 360),
('90088', 'Rougegoutte', '32T', 338778, 5288932, 47.7336, 6.84972, 460),
('90089', 'Rougemont-le-Château', '32T', 347573, 5288911, 47.7356, 6.96695, 450),
('90090', 'Saint-Dizier-l''Évêque', '32T', 346529, 5259468, 47.4706, 6.96334, 530),
('90091', 'Saint-Germain-le-Châtelet', '32T', 346800, 5284884, 47.6992, 6.95806, 397),
('90093', 'Sermamagny', '32T', 337669, 5284267, 47.6914, 6.83667, 402),
('90094', 'Sevenans', '32T', 339556, 5272506, 47.5861, 6.86611, 341),
('90095', 'Suarce', '32T', 355579, 5269740, 47.565, 7.08, 380),
('90096', 'Thiancourt', '32T', 348795, 5265309, 47.5236, 6.99139, 350),
('90097', 'Trévenans', '32T', 339300, 5270814, 47.5708, 6.86333, 340),
('90098', 'Urcerey', '32T', 335322, 5275034, 47.6078, 6.8089, 368),
('90099', 'Valdoie', '32T', 338031, 5281569, 47.6672, 6.84249, 375),
('90100', 'Vauthiermont', '32T', 352405, 5283071, 47.6842, 7.03333, 395),
('90101', 'Vellescot', '32T', 350712, 5270727, 47.5728, 7.015, 364),
('90102', 'Vescemont', '32T', 338432, 5289961, 47.7428, 6.84472, 480),
('90103', 'Vétrigne', '32T', 342166, 5281672, 47.6692, 6.8975, 370),
('90104', 'Vézelois', '32T', 343279, 5274938, 47.6089, 6.91473, 366),
('90105', 'Villars-le-Sec', '32T', 348621, 5257745, 47.4556, 6.99167, 552),
('91001', 'Abbéville-la-Rivière', '31T', 438378, 5355166, 48.3467, 2.16833, 80),
('91016', 'Angerville', '31T', 425650, 5351489, 48.3122, 1.99722, 140),
('91017', 'Angervilliers', '31T', 430974, 5382611, 48.5928, 2.06388, 112),
('91021', 'Arpajon', '31T', 444715, 5382182, 48.5903, 2.25027, 50),
('91022', 'Arrancourt', '31T', 437878, 5354616, 48.3417, 2.16166, 110),
('91027', 'Athis-Mons', '31T', 453810, 5394575, 48.7025, 2.37222, 80),
('91035', 'Authon-la-Plaine', '31T', 422957, 5366997, 48.4514, 1.95806, 150),
('91037', 'Auvernaux', '31T', 462635, 5375334, 48.53, 2.49389, 75),
('91038', 'Auvers-Saint-Georges', '31T', 442227, 5371275, 48.4919, 2.21805, 65),
('91041', 'Avrainville', '31T', 444582, 5379095, 48.5625, 2.24888, 90),
('91044', 'Ballainvilliers', '31T', 447938, 5391786, 48.6769, 2.29277, 70),
('91045', 'Ballancourt-sur-Essonne', '31T', 454591, 5374837, 48.525, 2.385, 69),
('91047', 'Baulne', '31T', 452779, 5371486, 48.4947, 2.36084, 60),
('91064', 'Bièvres', '31T', 442405, 5400548, 48.7553, 2.21639, 94),
('91067', 'Blandy', '31T', 444929, 5351424, 48.3136, 2.25722, 135),
('91069', 'Boigneville', '31T', 453475, 5353787, 48.3356, 2.37222, 80),
('91075', 'Bois-Herpin', '31T', 443322, 5357616, 48.3692, 2.23472, 137),
('91079', 'Boissy-la-Rivière', '31T', 437323, 5358389, 48.3756, 2.15361, 81),
('91080', 'Boissy-le-Cutté', '31T', 447029, 5369005, 48.4719, 2.28333, 75),
('91081', 'Boissy-le-Sec', '31T', 432708, 5369929, 48.4789, 2.08944, 149),
('91085', 'Boissy-sous-Saint-Yon', '31T', 441708, 5378630, 48.5581, 2.21, 90),
('91086', 'Bondoufle', '31T', 454406, 5384936, 48.6158, 2.38138, 80),
('91093', 'Boullay-les-Troux', '31T', 430151, 5392164, 48.6786, 2.05111, 170),
('91095', 'Bouray-sur-Juine', '31T', 448353, 5374520, 48.5217, 2.30056, 70),
('91097', 'Boussy-Saint-Antoine', '31T', 465615, 5393163, 48.6906, 2.53278, 60),
('91098', 'Boutervilliers', '31T', 430271, 5367087, 48.4531, 2.05695, 145),
('91099', 'Boutigny-sur-Essonne', '31T', 454019, 5365053, 48.4369, 2.37833, 70),
('91100', 'Bouville', '31T', 447112, 5364650, 48.4328, 2.285, 69),
('91103', 'Brétigny-sur-Orge', '31T', 449058, 5384395, 48.6106, 2.30889, 70),
('91105', 'Breuillet', '31T', 438808, 5379649, 48.5669, 2.17055, 60),
('91106', 'Breux-Jouy', '31T', 439232, 5379027, 48.5614, 2.17639, 60),
('91109', 'Brières-les-Scellés', '31T', 436376, 5367478, 48.4572, 2.13944, 90),
('91111', 'Briis-sous-Forges', '31T', 435439, 5386048, 48.6242, 2.12389, 110),
('91112', 'Brouy', '31T', 446539, 5351779, 48.3169, 2.27889, 135),
('91114', 'Brunoy', '31T', 463970, 5394840, 48.7056, 2.51028, 50),
('91115', 'Bruyères-le-Châtel', '31T', 440089, 5382538, 48.5931, 2.1875, 100),
('91121', 'Buno-Bonnevaux', '31T', 454692, 5356587, 48.3608, 2.38834, 70),
('91122', 'Bures-sur-Yvette', '31T', 438353, 5394168, 48.6975, 2.16222, 80),
('91129', 'Cerny', '31T', 450297, 5369284, 48.4747, 2.32751, 70),
('91130', 'Chalo-Saint-Mars', '31T', 430871, 5364084, 48.4261, 2.06556, 90),
('91131', 'Chalou-Moulineux', '31T', 427688, 5359461, 48.3842, 2.02333, 130),
('91132', 'Chamarande', '31T', 442376, 5373744, 48.5142, 2.21973, 64),
('91135', 'Champcueil', '31T', 459219, 5373721, 48.5153, 2.44778, 80),
('91136', 'Champlan', '31T', 446337, 5395383, 48.7092, 2.27056, 80),
('91137', 'Champmotteux', '31T', 449694, 5354622, 48.3428, 2.32111, 140),
('91145', 'Chatignonville', '31T', 421115, 5368967, 48.4689, 1.93278, 157),
('91148', 'Chauffour-lès-Étréchy', '31T', 438710, 5372424, 48.5019, 2.17028, 150),
('91156', 'Cheptainville', '31T', 445759, 5377787, 48.5508, 2.265, 82),
('91159', 'Chevannes', '31T', 458862, 5375453, 48.5308, 2.44278, 80),
('91161', 'Chilly-Mazarin', '31T', 449948, 5394639, 48.7028, 2.31973, 78),
('91174', 'Corbeil-Essonnes', '31T', 461466, 5384297, 48.6106, 2.47723, 38),
('91175', 'Corbreuse', '31T', 423197, 5372614, 48.5019, 1.96027, 150),
('91179', 'Le Coudray-Montceaux', '31T', 463621, 5378817, 48.5614, 2.50694, 70),
('91180', 'Courances', '31T', 461234, 5365432, 48.4408, 2.47584, 70),
('91182', 'Courcouronnes', '31T', 456374, 5385198, 48.6183, 2.40806, 95),
('91184', 'Courdimanche-sur-Essonne', '31T', 454044, 5362984, 48.4183, 2.37889, 67),
('91186', 'Courson-Monteloup', '31T', 437313, 5383402, 48.6006, 2.14972, 95),
('91191', 'Crosne', '31T', 460526, 5396222, 48.7178, 2.46334, 50),
('91195', 'Dannemois', '31T', 461263, 5366728, 48.4525, 2.47611, 60),
('91198', 'D''Huison-Longueville', '31T', 449731, 5367961, 48.4628, 2.32001, 60),
('91200', 'Dourdan', '31T', 427093, 5375496, 48.5283, 2.0125, 100),
('91201', 'Draveil', '31T', 456678, 5392761, 48.6864, 2.41139, 53),
('91204', 'Écharcon', '31T', 456212, 5380197, 48.5733, 2.40639, 81),
('91207', 'Égly', '31T', 442819, 5381089, 48.5803, 2.22472, 70),
('91215', 'Épinay-sous-Sénart', '31T', 464452, 5393602, 48.6944, 2.51694, 60),
('91216', 'Épinay-sur-Orge', '31T', 450411, 5391516, 48.6747, 2.3264, 70),
('91222', 'Estouches', '31T', 435832, 5350192, 48.3017, 2.13473, 135),
('91223', 'Étampes', '31T', 437927, 5364682, 48.4322, 2.16084, 75),
('91225', 'Étiolles', '31T', 461199, 5387263, 48.6372, 2.47333, 52);
INSERT INTO `ods_communes` (`oc_code_insee`, `oc_nom`, `oc_secteur`, `oc_x_utm`, `oc_y_utm`, `oc_latitude`, `oc_longitude`, `oc_altitude`) VALUES
('91226', 'Étréchy', '31T', 440197, 5371420, 48.4931, 2.19056, 70),
('91228', 'Évry', '31T', 458927, 5387124, 48.6358, 2.4425, 75),
('91232', 'La Ferté-Alais', '31T', 452012, 5370597, 48.4867, 2.35056, 60),
('91235', 'Fleury-Mérogis', '31T', 452965, 5386399, 48.6289, 2.36167, 90),
('91240', 'Fontaine-la-Rivière', '31T', 437321, 5356351, 48.3572, 2.15389, 81),
('91243', 'Fontenay-lès-Briis', '31T', 437991, 5385494, 48.6194, 2.1586, 110),
('91244', 'Fontenay-le-Vicomte', '31T', 455780, 5377298, 48.5472, 2.40084, 68),
('91247', 'La Forêt-le-Roi', '31T', 429321, 5369971, 48.4789, 2.04361, 150),
('91248', 'La Forêt-Sainte-Croix', '31T', 442988, 5359132, 48.3828, 2.23, 140),
('91249', 'Forges-les-Bains', '31T', 433704, 5386500, 48.6281, 2.10028, 120),
('91272', 'Gif-sur-Yvette', '31T', 435908, 5394874, 48.7036, 2.12889, 80),
('91273', 'Gironville-sur-Essonne', '31T', 454083, 5357704, 48.3708, 2.38, 70),
('91274', 'Gometz-la-Ville', '31T', 435623, 5391388, 48.6722, 2.12556, 165),
('91275', 'Gometz-le-Châtel', '31T', 436715, 5392117, 48.6789, 2.14028, 140),
('91284', 'Les Granges-le-Roi', '31T', 427693, 5372740, 48.5036, 2.02111, 150),
('91286', 'Grigny', '31T', 454976, 5389532, 48.6572, 2.38862, 83),
('91292', 'Guibeville', '31T', 446191, 5380068, 48.5714, 2.27056, 89),
('91293', 'Guigneville-sur-Essonne', '31T', 452451, 5369142, 48.4736, 2.35666, 60),
('91294', 'Guillerval', '31T', 433338, 5357168, 48.3642, 2.1, 100),
('91312', 'Igny', '31T', 442989, 5397732, 48.73, 2.22473, 80),
('91315', 'Itteville', '31T', 451383, 5373814, 48.5156, 2.34167, 72),
('91318', 'Janville-sur-Juine', '31T', 445597, 5373743, 48.5144, 2.26334, 64),
('91319', 'Janvry', '31T', 437699, 5388678, 48.6481, 2.15416, 170),
('91326', 'Juvisy-sur-Orge', '31T', 454169, 5393461, 48.6925, 2.37722, 40),
('91330', 'Lardy', '31T', 445810, 5374575, 48.5219, 2.26611, 70),
('91332', 'Leudeville', '31T', 450366, 5379473, 48.5664, 2.32723, 80),
('91333', 'Leuville-sur-Orge', '31T', 445705, 5384982, 48.6156, 2.26333, 70),
('91338', 'Limours', '31T', 431987, 5388436, 48.6453, 2.07666, 137),
('91339', 'Linas', '31T', 446316, 5386737, 48.6314, 2.27139, 60),
('91340', 'Lisses', '31T', 457606, 5382965, 48.5983, 2.425, 85),
('91345', 'Longjumeau', '31T', 448266, 5394067, 48.6975, 2.29694, 50),
('91347', 'Longpont-sur-Orge', '31T', 447863, 5388019, 48.6431, 2.29223, 60),
('91359', 'Maisse', '31T', 453860, 5360577, 48.3967, 2.37667, 70),
('91363', 'Marcoussis', '31T', 443361, 5388093, 48.6433, 2.23111, 80),
('91374', 'Marolles-en-Beauce', '31T', 440860, 5358258, 48.3747, 2.20139, 135),
('91376', 'Marolles-en-Hurepoix', '31T', 448619, 5378995, 48.5619, 2.30361, 89),
('91377', 'Massy', '31T', 446811, 5397972, 48.7325, 2.27667, 60),
('91378', 'Mauchamps', '31T', 440651, 5375584, 48.5306, 2.19611, 150),
('91386', 'Mennecy', '31T', 458256, 5379533, 48.5675, 2.43416, 80),
('91390', 'Méréville', '31T', 432389, 5351776, 48.3156, 2.08805, 100),
('91393', 'Mérobert', '31T', 426438, 5362967, 48.4156, 2.00584, 146),
('91399', 'Mespuits', '31T', 446026, 5356292, 48.3575, 2.27139, 140),
('91405', 'Milly-la-Forêt', '31T', 460444, 5361176, 48.4025, 2.46556, 65),
('91408', 'Moigny-sur-École', '31T', 459913, 5364638, 48.4336, 2.45805, 67),
('91411', 'Les Molières', '31T', 431514, 5391560, 48.6733, 2.06973, 171),
('91412', 'Mondeville', '31T', 456840, 5371114, 48.4917, 2.41584, 140),
('91414', 'Monnerville', '31T', 429158, 5355243, 48.3464, 2.0439, 140),
('91421', 'Montgeron', '31T', 460189, 5394804, 48.705, 2.45889, 70),
('91425', 'Montlhéry', '31T', 446388, 5387847, 48.6414, 2.27223, 100),
('91432', 'Morangis', '31T', 450700, 5394200, 48.6989, 2.33, 80),
('91433', 'Morigny-Champigny', '31T', 439711, 5366299, 48.4469, 2.18472, 70),
('91434', 'Morsang-sur-Orge', '31T', 452496, 5388997, 48.6522, 2.35501, 70),
('91435', 'Morsang-sur-Seine', '31T', 462645, 5379935, 48.5714, 2.49361, 42),
('91441', 'Nainville-les-Roches', '31T', 462740, 5372678, 48.5061, 2.49555, 77),
('91457', 'La Norville', '31T', 445546, 5381247, 48.5819, 2.26167, 85),
('91458', 'Nozay', '31T', 444178, 5389938, 48.66, 2.24195, 160),
('91461', 'Ollainville', '31T', 442543, 5382142, 48.5897, 2.22083, 78),
('91463', 'Oncy-sur-École', '31T', 461147, 5358794, 48.3811, 2.47527, 70),
('91468', 'Ormoy', '31T', 459268, 5380545, 48.5767, 2.44778, 50),
('91469', 'Ormoy-la-Rivière', '31T', 437110, 5361449, 48.4031, 2.15028, 84),
('91471', 'Orsay', '31T', 440091, 5394211, 48.6981, 2.18583, 70),
('91473', 'Orveau', '31T', 447704, 5366405, 48.4486, 2.29278, 100),
('91477', 'Palaiseau', '31T', 444011, 5395745, 48.7122, 2.23889, 120),
('91479', 'Paray-Vieille-Poste', '31T', 453285, 5395382, 48.7097, 2.365, 86),
('91482', 'Pecqueuse', '31T', 429862, 5388647, 48.6469, 2.04778, 170),
('91494', 'Le Plessis-Pâté', '31T', 450473, 5384629, 48.6128, 2.32806, 78),
('91495', 'Plessis-Saint-Benoist', '31T', 426438, 5366147, 48.4442, 2.00528, 145),
('91507', 'Prunay-sur-Essonne', '31T', 453557, 5356226, 48.3575, 2.37306, 70),
('91508', 'Puiselet-le-Marais', '31T', 445501, 5361640, 48.4056, 2.26361, 90),
('91511', 'Pussay', '31T', 425500, 5355753, 48.3506, 1.99444, 145),
('91514', 'Quincy-sous-Sénart', '31T', 465623, 5391063, 48.6717, 2.53306, 80),
('91519', 'Richarville', '31T', 426169, 5369177, 48.4714, 2.00111, 149),
('91521', 'Ris-Orangis', '31T', 456815, 5389271, 48.655, 2.41362, 50),
('91525', 'Roinville', '31T', 429599, 5375773, 48.5311, 2.0464, 90),
('91526', 'Roinvilliers', '31T', 443823, 5356190, 48.3564, 2.24167, 120),
('91533', 'Saclas', '31T', 435329, 5356713, 48.3603, 2.12694, 89),
('91534', 'Saclay', '31T', 439334, 5397894, 48.7311, 2.17501, 150),
('91538', 'Saint-Aubin', '31T', 436842, 5396130, 48.715, 2.14139, 163),
('91540', 'Saint-Chéron', '31T', 435349, 5378205, 48.5536, 2.12389, 100),
('91544', 'Saint-Cyr-la-Rivière', '31T', 436866, 5356171, 48.3556, 2.14777, 90),
('91546', 'Saint-Cyr-sous-Dourdan', '31T', 428772, 5380137, 48.5703, 2.03445, 84),
('91547', 'Saint-Escobille', '31T', 423706, 5364701, 48.4308, 1.96861, 150),
('91549', 'Sainte-Geneviève-des-Bois', '31T', 450283, 5388707, 48.6494, 2.32499, 77),
('91552', 'Saint-Germain-lès-Arpajon', '31T', 446096, 5383002, 48.5978, 2.26889, 82),
('91553', 'Saint-Germain-lès-Corbeil', '31T', 462293, 5385526, 48.6217, 2.48834, 86),
('91556', 'Saint-Hilaire', '31T', 431931, 5365060, 48.435, 2.07972, 90),
('91560', 'Saint-Jean-de-Beauregard', '31T', 438783, 5390457, 48.6642, 2.16862, 160),
('91568', 'Saint-Maurice-Montcouronne', '31T', 435384, 5381262, 48.5811, 2.12389, 90),
('91570', 'Saint-Michel-sur-Orge', '31T', 449314, 5387882, 48.6419, 2.31194, 50),
('91573', 'Saint-Pierre-du-Perray', '31T', 463495, 5384592, 48.6133, 2.50473, 90),
('91577', 'Saintry-sur-Seine', '31T', 462687, 5383146, 48.6003, 2.4939, 80),
('91578', 'Saint-Sulpice-de-Favières', '31T', 439414, 5376832, 48.5417, 2.17917, 90),
('91579', 'Saint-Vrain', '31T', 450916, 5376813, 48.5425, 2.33499, 70),
('91581', 'Saint-Yon', '31T', 440315, 5378737, 48.5589, 2.19111, 130),
('91587', 'Saulx-les-Chartreux', '31T', 446094, 5393532, 48.6925, 2.2675, 70),
('91589', 'Savigny-sur-Orge', '31T', 452388, 5393166, 48.6897, 2.35306, 43),
('91593', 'Sermaise', '31T', 432230, 5376327, 48.5364, 2.08194, 80),
('91599', 'Soisy-sur-École', '31T', 462739, 5369374, 48.4764, 2.49583, 70),
('91600', 'Soisy-sur-Seine', '31T', 459569, 5388231, 48.6458, 2.45111, 40),
('91602', 'Souzy-la-Briche', '31T', 437327, 5375404, 48.5286, 2.15112, 90),
('91613', 'Congerville-Thionville', '31T', 425643, 5358839, 48.3783, 1.99583, 148),
('91617', 'Tigery', '31T', 463759, 5387492, 48.6394, 2.50806, 83),
('91619', 'Torfou', '31T', 442928, 5375622, 48.5311, 2.22694, 145),
('91629', 'Valpuiseaux', '31T', 448532, 5360345, 48.3942, 2.30472, 80),
('91630', 'Le Val-Saint-Germain', '31T', 430773, 5379557, 48.5653, 2.06167, 80),
('91631', 'Varennes-Jarcy', '31T', 467693, 5391853, 48.6789, 2.56111, 60),
('91634', 'Vaugrigneuse', '31T', 435186, 5383673, 48.6028, 2.12083, 80),
('91635', 'Vauhallan', '31T', 441605, 5398271, 48.7347, 2.20583, 80),
('91639', 'Vayres-sur-Essonne', '31T', 452213, 5365253, 48.4386, 2.35389, 65),
('91645', 'Verrières-le-Buisson', '31T', 446250, 5399120, 48.7428, 2.26889, 86),
('91648', 'Vert-le-Grand', '31T', 452892, 5380162, 48.5728, 2.36138, 70),
('91649', 'Vert-le-Petit', '31T', 453262, 5377781, 48.5514, 2.36667, 60),
('91654', 'Videlles', '31T', 457967, 5368110, 48.4647, 2.43139, 87),
('91657', 'Vigneux-sur-Seine', '31T', 458569, 5394167, 48.6992, 2.43694, 43),
('91659', 'Villabé', '31T', 459872, 5381899, 48.5889, 2.45584, 80),
('91661', 'Villebon-sur-Yvette', '31T', 443116, 5394179, 48.6981, 2.22694, 70),
('91662', 'Villeconin', '31T', 435484, 5373880, 48.5147, 2.12639, 90),
('91665', 'La Ville-du-Bois', '31T', 446122, 5390042, 48.6611, 2.26833, 100),
('91666', 'Villejust', '31T', 443795, 5392536, 48.6833, 2.23639, 158),
('91667', 'Villemoisson-sur-Orge', '31T', 450925, 5389597, 48.6575, 2.33361, 50),
('91671', 'Villeneuve-sur-Auvers', '31T', 444487, 5369338, 48.4747, 2.24889, 140),
('91679', 'Villiers-le-Bâcle', '31T', 435793, 5397315, 48.7256, 2.12695, 150),
('91685', 'Villiers-sur-Orge', '31T', 448822, 5389986, 48.6608, 2.305, 65),
('91687', 'Viry-Châtillon', '31T', 454053, 5391825, 48.6778, 2.37583, 50),
('91689', 'Wissous', '31T', 450553, 5398401, 48.7367, 2.3275, 80),
('91691', 'Yerres', '31T', 463673, 5396294, 48.7186, 2.50611, 50),
('91692', 'Les Ulis', '31T', 438560, 5392529, 48.6828, 2.16528, 160),
('92002', 'Antony', '31T', 448425, 5400242, 48.7531, 2.29833, 50),
('92004', 'Asnières-sur-Seine', '31T', 447347, 5417978, 48.9125, 2.28139, 34),
('92007', 'Bagneux', '31T', 449367, 5405051, 48.7964, 2.31055, 100),
('92009', 'Bois-Colombes', '31T', 446602, 5418849, 48.9203, 2.27111, 30),
('92012', 'Boulogne-Billancourt', '31T', 444397, 5409915, 48.8397, 2.24222, 33),
('92014', 'Bourg-la-Reine', '31T', 449820, 5403256, 48.7803, 2.31694, 61),
('92019', 'Châtenay-Malabry', '31T', 447175, 5401921, 48.7681, 2.28111, 100),
('92020', 'Châtillon', '31T', 447622, 5405993, 48.8047, 2.28667, 100),
('92022', 'Chaville', '31T', 440216, 5405944, 48.8036, 2.18583, 105),
('92023', 'Clamart', '31T', 445965, 5405515, 48.8003, 2.26417, 119),
('92024', 'Clichy', '31T', 449355, 5417156, 48.9053, 2.30889, 30),
('92025', 'Colombes', '31T', 445221, 5419110, 48.9225, 2.25222, 30),
('92026', 'Courbevoie', '31T', 444565, 5416615, 48.9, 2.24361, 50),
('92032', 'Fontenay-aux-Roses', '31T', 447994, 5404353, 48.79, 2.29195, 100),
('92033', 'Garches', '31T', 440225, 5410576, 48.8453, 2.18528, 122),
('92035', 'La Garenne-Colombes', '31T', 445227, 5417597, 48.9089, 2.25251, 40),
('92036', 'Gennevilliers', '31T', 448748, 5419756, 48.9286, 2.30028, 29),
('92040', 'Issy-les-Moulineaux', '31T', 446541, 5408196, 48.8244, 2.27167, 63),
('92044', 'Levallois-Perret', '31T', 447982, 5416181, 48.8964, 2.29028, 33),
('92046', 'Malakoff', '31T', 448205, 5407347, 48.8169, 2.29444, 65),
('92047', 'Marnes-la-Coquette', '31T', 439759, 5408944, 48.8306, 2.17917, 150),
('92048', 'Meudon', '31T', 443714, 5406865, 48.8122, 2.23334, 103),
('92049', 'Montrouge', '31T', 450142, 5407237, 48.8161, 2.32084, 72),
('92050', 'Nanterre', '31T', 442010, 5415591, 48.8906, 2.20889, 42),
('92051', 'Neuilly-sur-Seine', '31T', 446548, 5415330, 48.8886, 2.27083, 33),
('92060', 'Le Plessis-Robinson', '31T', 445824, 5403602, 48.7831, 2.2625, 150),
('92062', 'Puteaux', '31T', 444223, 5414982, 48.8853, 2.23916, 40),
('92063', 'Rueil-Malmaison', '31T', 440806, 5413504, 48.8717, 2.19277, 30),
('92064', 'Saint-Cloud', '31T', 442124, 5410896, 48.8483, 2.21111, 123),
('92071', 'Sceaux', '31T', 448390, 5403022, 48.7781, 2.29751, 102),
('92072', 'Sèvres', '31T', 442340, 5408145, 48.8236, 2.21444, 100),
('92073', 'Suresnes', '31T', 443148, 5413356, 48.8706, 2.22473, 30),
('92075', 'Vanves', '31T', 447825, 5408153, 48.8242, 2.28916, 60),
('92076', 'Vaucresson', '31T', 437981, 5410385, 48.8433, 2.15472, 160),
('92077', 'Ville-d''Avray', '31T', 440612, 5408658, 48.8281, 2.19083, 109),
('92078', 'Villeneuve-la-Garenne', '31T', 450829, 5420416, 48.9347, 2.32861, 35),
('93001', 'Aubervilliers', '31T', 454797, 5417974, 48.9131, 2.38306, 30),
('93005', 'Aulnay-sous-Bois', '31T', 462692, 5420756, 48.9386, 2.49055, 47),
('93006', 'Bagnolet', '31T', 457324, 5413075, 48.8692, 2.41806, 110),
('93007', 'Le Blanc-Mesnil', '31T', 461000, 5420274, 48.9342, 2.46749, 47),
('93008', 'Bobigny', '31T', 459107, 5417354, 48.9078, 2.44194, 50),
('93010', 'Bondy', '31T', 461506, 5416874, 48.9036, 2.47472, 54),
('93013', 'Le Bourget', '31T', 458316, 5420479, 48.9358, 2.43083, 40),
('93014', 'Clichy-sous-Bois', '31T', 466373, 5417182, 48.9067, 2.54111, 110),
('93015', 'Coubron', '31T', 469025, 5418155, 48.9156, 2.57723, 80),
('93027', 'La Courneuve', '31T', 456540, 5419597, 48.9278, 2.40667, 42),
('93029', 'Drancy', '31T', 459690, 5419110, 48.9236, 2.44972, 47),
('93030', 'Dugny', '31T', 457173, 5422557, 48.9544, 2.415, 43),
('93031', 'Épinay-sur-Seine', '31T', 449022, 5423088, 48.9586, 2.30361, 30),
('93032', 'Gagny', '31T', 465869, 5414715, 48.8844, 2.53444, 70),
('93033', 'Gournay-sur-Marne', '31T', 468848, 5411949, 48.8597, 2.57528, 40),
('93039', 'L''Île-Saint-Denis', '31T', 451524, 5420812, 48.9383, 2.33805, 30),
('93045', 'Les Lilas', '31T', 457721, 5414369, 48.8808, 2.42334, 90),
('93046', 'Livry-Gargan', '31T', 464897, 5418704, 48.9203, 2.52084, 63),
('93047', 'Montfermeil', '31T', 467444, 5415848, 48.8947, 2.55583, 114),
('93048', 'Montreuil', '31T', 459419, 5412596, 48.865, 2.44667, 80),
('93049', 'Neuilly-Plaisance', '31T', 463451, 5412321, 48.8628, 2.50167, 45),
('93050', 'Neuilly-sur-Marne', '31T', 465771, 5411936, 48.8594, 2.53333, 40),
('93051', 'Noisy-le-Grand', '31T', 467171, 5410878, 48.85, 2.55251, 83),
('93053', 'Noisy-le-Sec', '31T', 460602, 5415676, 48.8928, 2.4625, 65),
('93055', 'Pantin', '31T', 456916, 5415641, 48.8922, 2.41222, 50),
('93057', 'Les Pavillons-sous-Bois', '31T', 463318, 5416861, 48.9036, 2.49945, 50),
('93059', 'Pierrefitte-sur-Seine', '31T', 453404, 5424192, 48.9689, 2.36334, 49),
('93061', 'Le Pré-Saint-Gervais', '31T', 456279, 5414874, 48.8853, 2.40362, 58),
('93062', 'Le Raincy', '31T', 464758, 5416142, 48.8972, 2.51916, 76),
('93063', 'Romainville', '31T', 458963, 5414360, 48.8808, 2.44028, 121),
('93064', 'Rosny-sous-Bois', '31T', 462014, 5413752, 48.8756, 2.48195, 69),
('93066', 'Saint-Denis', '31T', 452798, 5419936, 48.9306, 2.35555, 32),
('93070', 'Saint-Ouen', '31T', 451435, 5417570, 48.9092, 2.33722, 31),
('93071', 'Sevran', '31T', 465135, 5420957, 48.9406, 2.52389, 55),
('93072', 'Stains', '31T', 454324, 5422425, 48.9531, 2.37611, 45),
('93073', 'Tremblay-en-France', '31T', 467563, 5425698, 48.9833, 2.55667, 75),
('93074', 'Vaujours', '31T', 468425, 5419980, 48.9319, 2.5689, 100),
('93077', 'Villemomble', '31T', 463673, 5415223, 48.8889, 2.50444, 68),
('93078', 'Villepinte', '31T', 466489, 5422987, 48.9589, 2.54222, 63),
('93079', 'Villetaneuse', '31T', 452173, 5422875, 48.9569, 2.34667, 41),
('94001', 'Ablon-sur-Seine', '31T', 457122, 5397359, 48.7278, 2.41694, 40),
('94002', 'Alfortville', '31T', 457249, 5405973, 48.8053, 2.41778, 33),
('94003', 'Arcueil', '31T', 450863, 5405810, 48.8033, 2.33083, 46),
('94004', 'Boissy-Saint-Léger', '31T', 464430, 5399747, 48.7497, 2.51611, 80),
('94011', 'Bonneuil-sur-Marne', '31T', 462183, 5402634, 48.7756, 2.48528, 68),
('94015', 'Bry-sur-Marne', '31T', 464578, 5410184, 48.8436, 2.51722, 60),
('94016', 'Cachan', '31T', 450692, 5404884, 48.795, 2.32861, 52),
('94017', 'Champigny-sur-Marne', '31T', 463847, 5407409, 48.8186, 2.5075, 39),
('94018', 'Charenton-le-Pont', '31T', 456368, 5408018, 48.8236, 2.40556, 40),
('94019', 'Chennevières-sur-Marne', '31T', 465344, 5405454, 48.8011, 2.52806, 100),
('94021', 'Chevilly-Larue', '31T', 452446, 5402430, 48.7731, 2.35278, 94),
('94022', 'Choisy-le-Roi', '31T', 456541, 5401439, 48.7644, 2.40861, 36),
('94028', 'Créteil', '31T', 460401, 5404622, 48.7933, 2.46083, 34),
('94033', 'Fontenay-sous-Bois', '31T', 461097, 5410793, 48.8489, 2.46972, 90),
('94034', 'Fresnes', '31T', 450144, 5400659, 48.7569, 2.32166, 70),
('94037', 'Gentilly', '31T', 451425, 5407101, 48.815, 2.33833, 59),
('94038', 'L''Haÿ-les-Roses', '31T', 451348, 5402872, 48.7769, 2.33778, 93),
('94041', 'Ivry-sur-Seine', '31T', 454934, 5407196, 48.8161, 2.38612, 33),
('94042', 'Joinville-le-Pont', '31T', 461465, 5407950, 48.8233, 2.47501, 37),
('94043', 'Le Kremlin-Bicêtre', '31T', 452767, 5406627, 48.8108, 2.35666, 62),
('94044', 'Limeil-Brévannes', '31T', 461712, 5399456, 48.7469, 2.47916, 80),
('94046', 'Maisons-Alfort', '31T', 458698, 5406117, 48.8067, 2.43749, 39),
('94047', 'Mandres-les-Roses', '31T', 466378, 5394331, 48.7011, 2.54305, 90),
('94048', 'Marolles-en-Brie', '31T', 467074, 5397909, 48.7333, 2.55222, 83),
('94052', 'Nogent-sur-Marne', '31T', 462088, 5409613, 48.8383, 2.48334, 50),
('94053', 'Noiseau', '31T', 467021, 5402727, 48.7767, 2.55112, 100),
('94054', 'Orly', '31T', 456178, 5399466, 48.7467, 2.40388, 57),
('94055', 'Ormesson-sur-Marne', '31T', 466131, 5404152, 48.7894, 2.53889, 90),
('94056', 'Périgny', '31T', 466927, 5393711, 48.6956, 2.55056, 90),
('94058', 'Le Perreux-sur-Marne', '31T', 463700, 5409911, 48.8411, 2.50528, 52),
('94059', 'Le Plessis-Trévise', '31T', 468206, 5406703, 48.8125, 2.56694, 110),
('94060', 'La Queue-en-Brie', '31T', 469067, 5403796, 48.7864, 2.57888, 94),
('94065', 'Rungis', '31T', 452258, 5399591, 48.7475, 2.35055, 77),
('94067', 'Saint-Mandé', '31T', 457059, 5410422, 48.8453, 2.41472, 51),
('94068', 'Saint-Maur-des-Fossés', '31T', 463649, 5405279, 48.7994, 2.505, 37),
('94069', 'Saint-Maurice', '31T', 457590, 5407854, 48.8222, 2.42223, 65),
('94070', 'Santeny', '31T', 468621, 5397036, 48.7256, 2.57333, 80),
('94071', 'Sucy-en-Brie', '31T', 464606, 5401753, 48.7678, 2.51833, 90),
('94073', 'Thiais', '31T', 455172, 5401265, 48.7628, 2.39, 70),
('94074', 'Valenton', '31T', 460732, 5399463, 48.7469, 2.46583, 80),
('94075', 'Villecresnes', '31T', 466025, 5396742, 48.7228, 2.53805, 90),
('94076', 'Villejuif', '31T', 452992, 5404309, 48.79, 2.35999, 100),
('94077', 'Villeneuve-le-Roi', '31T', 457987, 5398248, 48.7358, 2.42862, 38),
('94078', 'Villeneuve-Saint-Georges', '31T', 459845, 5398142, 48.735, 2.45389, 40),
('94079', 'Villiers-sur-Marne', '31T', 466505, 5408628, 48.8297, 2.54361, 80),
('94080', 'Vincennes', '31T', 458917, 5410871, 48.8494, 2.44, 52),
('94081', 'Vitry-sur-Seine', '31T', 455118, 5404786, 48.7944, 2.38889, 46),
('95002', 'Ableiges', '31T', 425690, 5437805, 49.0886, 1.98222, 40),
('95008', 'Aincourt', '31T', 410430, 5436239, 49.0725, 1.77361, 160),
('95011', 'Ambleville', '31T', 405161, 5444945, 49.15, 1.69944, 50),
('95012', 'Amenucourt', '31T', 400800, 5440172, 49.1064, 1.64083, 32),
('95014', 'Andilly', '31T', 448783, 5428063, 49.0033, 2.29972, 110),
('95018', 'Argenteuil', '31T', 444347, 5423257, 48.9597, 2.23973, 29),
('95019', 'Arnouville-lès-Gonesse', '31T', 457348, 5426786, 48.9925, 2.41695, 63),
('95023', 'Arronville', '31T', 435502, 5447812, 49.1797, 2.11499, 90),
('95024', 'Arthies', '31T', 411790, 5438781, 49.0956, 1.79167, 151),
('95026', 'Asnières-sur-Oise', '31T', 453069, 5442261, 49.1314, 2.35667, 49),
('95028', 'Attainville', '31T', 452288, 5433899, 49.0561, 2.34695, 100),
('95039', 'Auvers-sur-Oise', '31T', 439358, 5435662, 49.0708, 2.16972, 40),
('95040', 'Avernes', '31T', 417774, 5437515, 49.085, 1.87388, 90),
('95042', 'Baillet-en-France', '31T', 448842, 5434454, 49.0608, 2.29972, 119),
('95046', 'Banthelu', '31T', 413586, 5442119, 49.1258, 1.81555, 121),
('95051', 'Beauchamp', '31T', 441259, 5429372, 49.0144, 2.19666, 65),
('95052', 'Beaumont-sur-Oise', '31T', 448257, 5443447, 49.1417, 2.29056, 45),
('95054', 'Le Bellay-en-Vexin', '31T', 418877, 5444912, 49.1517, 1.8875, 114),
('95055', 'Bellefontaine', '31T', 461067, 5438400, 49.0972, 2.46667, 60),
('95056', 'Belloy-en-France', '31T', 454062, 5437435, 49.0881, 2.37083, 122),
('95058', 'Bernes-sur-Oise', '31T', 449105, 5445323, 49.1586, 2.30194, 30),
('95059', 'Berville', '31T', 432358, 5448961, 49.1897, 2.07167, 100),
('95060', 'Bessancourt', '31T', 442748, 5431858, 49.0369, 2.21667, 90),
('95061', 'Béthemont-la-Forêt', '31T', 445363, 5433561, 49.0525, 2.25222, 145),
('95063', 'Bezons', '31T', 442016, 5420069, 48.9308, 2.20834, 40),
('95074', 'Boisemont', '31T', 427441, 5430586, 49.0239, 2.0075, 150),
('95078', 'Boissy-l''Aillerie', '31T', 429284, 5436492, 49.0772, 2.03167, 60),
('95088', 'Bonneuil-en-France', '31T', 458451, 5424894, 48.9756, 2.43222, 50),
('95091', 'Bouffémont', '31T', 448661, 5432387, 49.0422, 2.2975, 114),
('95094', 'Bouqueval', '31T', 458003, 5430178, 49.0231, 2.42555, 90),
('95101', 'Bray-et-Lû', '31T', 402466, 5443757, 49.1389, 1.66278, 30),
('95102', 'Bréançon', '31T', 428727, 5443695, 49.1419, 2.02277, 150),
('95110', 'Brignancourt', '31T', 423027, 5443215, 49.1369, 1.94473, 66),
('95116', 'Bruyères-sur-Oise', '31T', 451230, 5445118, 49.1569, 2.33111, 31),
('95119', 'Buhy', '31T', 404741, 5449925, 49.1947, 1.6925, 110),
('95120', 'Butry-sur-Oise', '31T', 441382, 5437153, 49.0844, 2.19722, 30),
('95127', 'Cergy', '31T', 431516, 5431646, 49.0339, 2.06305, 30),
('95134', 'Champagne-sur-Oise', '31T', 443952, 5442531, 49.1331, 2.23166, 50),
('95139', 'La Chapelle-en-Vexin', '31T', 407658, 5448826, 49.1853, 1.73278, 140),
('95141', 'Charmont', '31T', 411819, 5443198, 49.1353, 1.7911, 100),
('95142', 'Chars', '31T', 422778, 5445721, 49.1594, 1.94083, 80),
('95144', 'Châtenay-en-France', '31T', 460393, 5434885, 49.0656, 2.45778, 160),
('95149', 'Chaumontel', '31T', 458594, 5441260, 49.1228, 2.4325, 50),
('95150', 'Chaussy', '31T', 404599, 5441743, 49.1211, 1.69249, 79),
('95151', 'Chauvry', '31T', 446420, 5433644, 49.0533, 2.26667, 140),
('95154', 'Chennevières-lès-Louvres', '31T', 467257, 5432493, 49.0444, 2.55194, 100),
('95157', 'Chérence', '31T', 403402, 5438180, 49.0889, 1.67695, 130),
('95166', 'Cléry-en-Vexin', '31T', 415453, 5442276, 49.1275, 1.84111, 170),
('95169', 'Commeny', '31T', 419160, 5442128, 49.1267, 1.89194, 110),
('95170', 'Condécourt', '31T', 422776, 5432471, 49.0403, 1.94334, 50),
('95176', 'Cormeilles-en-Parisis', '31T', 441354, 5424832, 48.9736, 2.19862, 114),
('95177', 'Cormeilles-en-Vexin', '31T', 428507, 5440733, 49.1153, 2.02028, 148),
('95181', 'Courcelles-sur-Viosne', '31T', 427313, 5436270, 49.075, 2.00473, 50),
('95183', 'Courdimanche', '31T', 427010, 5431796, 49.0347, 2.00138, 150),
('95197', 'Deuil-la-Barre', '31T', 450788, 5425018, 48.9761, 2.3275, 50),
('95199', 'Domont', '31T', 451351, 5431251, 49.0322, 2.33444, 140),
('95203', 'Eaubonne', '31T', 447245, 5426502, 48.9892, 2.27889, 58),
('95205', 'Écouen', '31T', 454831, 5429678, 49.0183, 2.38222, 110),
('95210', 'Enghien-les-Bains', '31T', 449500, 5424165, 48.9683, 2.31, 50),
('95211', 'Ennery', '31T', 434657, 5436210, 49.0753, 2.10528, 95),
('95212', 'Épiais-lès-Louvres', '31T', 467675, 5430947, 49.0306, 2.55778, 115),
('95213', 'Épiais-Rhus', '31T', 431738, 5441402, 49.1217, 2.06444, 150),
('95214', 'Épinay-Champlâtreux', '31T', 457305, 5437038, 49.0847, 2.41528, 120),
('95218', 'Éragny', '31T', 433553, 5430478, 49.0236, 2.09111, 50),
('95219', 'Ermont', '31T', 445676, 5426146, 48.9858, 2.25749, 52),
('95229', 'Ézanville', '31T', 453440, 5430894, 49.0292, 2.36306, 90),
('95241', 'Fontenay-en-Parisis', '31T', 459835, 5433592, 49.0539, 2.45027, 107),
('95250', 'Fosses', '31T', 462606, 5438174, 49.0953, 2.48777, 75),
('95252', 'Franconville', '31T', 443509, 5426878, 48.9922, 2.22778, 73),
('95253', 'Frémainville', '31T', 417357, 5435360, 49.0656, 1.86861, 130),
('95254', 'Frémécourt', '31T', 427134, 5441152, 49.1189, 2.00139, 150),
('95256', 'Frépillon', '31T', 442093, 5433286, 49.0497, 2.20751, 100),
('95257', 'La Frette-sur-Seine', '31T', 440074, 5424907, 48.9742, 2.18112, 30),
('95258', 'Frouville', '31T', 438053, 5444138, 49.1469, 2.15056, 50),
('95259', 'Gadancourt', '31T', 416735, 5438581, 49.0944, 1.85944, 120),
('95268', 'Garges-lès-Gonesse', '31T', 455420, 5424670, 48.9733, 2.39083, 50),
('95270', 'Genainville', '31T', 408983, 5442039, 49.1244, 1.7525, 90),
('95271', 'Génicourt', '31T', 432017, 5437693, 49.0883, 2.06889, 100),
('95277', 'Gonesse', '31T', 459698, 5425904, 48.9847, 2.44916, 50),
('95280', 'Goussainville', '31T', 461239, 5431111, 49.0317, 2.46972, 70),
('95282', 'Gouzangrez', '31T', 420313, 5440505, 49.1122, 1.90806, 110),
('95287', 'Grisy-les-Plâtres', '31T', 430859, 5442371, 49.1303, 2.05223, 140),
('95288', 'Groslay', '31T', 452650, 5426422, 48.9889, 2.35278, 67),
('95295', 'Guiry-en-Vexin', '31T', 416150, 5440103, 49.1081, 1.85111, 100),
('95298', 'Haravilliers', '31T', 431181, 5447092, 49.1728, 2.05583, 140),
('95301', 'Haute-Isle', '31T', 402197, 5437707, 49.0844, 1.66056, 22),
('95303', 'Le Heaulme', '31T', 427161, 5446279, 49.165, 2.00084, 150),
('95304', 'Hédouville', '31T', 439456, 5444617, 49.1514, 2.16972, 50),
('95306', 'Herblay', '31T', 438573, 5427116, 48.9939, 2.16027, 80),
('95308', 'Hérouville', '31T', 436718, 5438996, 49.1006, 2.13306, 115),
('95309', 'Hodent', '31T', 410297, 5444272, 49.1447, 1.77001, 80),
('95313', 'L''Isle-Adam', '31T', 443196, 5439914, 49.1094, 2.22167, 32),
('95316', 'Jagny-sous-Bois', '31T', 459327, 5436220, 49.0775, 2.44306, 130),
('95323', 'Jouy-le-Moutier', '31T', 430274, 5429716, 49.0164, 2.04639, 40),
('95328', 'Labbeville', '31T', 437652, 5442753, 49.1344, 2.14527, 50),
('95331', 'Lassy', '31T', 459606, 5438257, 49.0958, 2.44667, 60),
('95341', 'Livilliers', '31T', 434054, 5438410, 49.095, 2.09667, 105),
('95348', 'Longuesse', '31T', 422077, 5434797, 49.0611, 1.93333, 56),
('95351', 'Louvres', '31T', 463802, 5431897, 49.0389, 2.50472, 90),
('95352', 'Luzarches', '31T', 457855, 5439999, 49.1114, 2.42251, 71),
('95353', 'Maffliers', '31T', 449590, 5436270, 49.0772, 2.30973, 150),
('95355', 'Magny-en-Vexin', '31T', 412999, 5446051, 49.1611, 1.80666, 80),
('95365', 'Mareil-en-France', '31T', 458123, 5435241, 49.0686, 2.42667, 160),
('95369', 'Margency', '31T', 448152, 5427852, 49.0014, 2.29112, 70),
('95370', 'Marines', '31T', 425773, 5444012, 49.1444, 1.98222, 130),
('95371', 'Marly-la-Ville', '31T', 463404, 5436161, 49.0772, 2.49889, 130),
('95379', 'Maudétour-en-Vexin', '31T', 410641, 5439263, 49.0997, 1.77583, 170),
('95387', 'Menouville', '31T', 435139, 5444481, 49.1497, 2.11055, 60),
('95388', 'Menucourt', '31T', 425958, 5430544, 49.0233, 1.98722, 117),
('95392', 'Mériel', '31T', 441943, 5436406, 49.0778, 2.20501, 50),
('95394', 'Méry-sur-Oise', '31T', 440605, 5434630, 49.0617, 2.18695, 50),
('95395', 'Le Mesnil-Aubry', '31T', 455813, 5433159, 49.0497, 2.39527, 110),
('95409', 'Moisselles', '31T', 451509, 5433103, 49.0489, 2.33638, 94),
('95422', 'Montgeroult', '31T', 427324, 5437135, 49.0828, 2.00472, 60),
('95424', 'Montigny-lès-Cormeilles', '31T', 441525, 5427609, 48.9986, 2.20055, 110),
('95426', 'Montlignon', '31T', 447692, 5428690, 49.0089, 2.28472, 70),
('95427', 'Montmagny', '31T', 451924, 5424730, 48.9736, 2.34305, 51),
('95428', 'Montmorency', '31T', 450374, 5426381, 48.9883, 2.32167, 133),
('95429', 'Montreuil-sur-Epte', '31T', 403757, 5448058, 49.1778, 1.67945, 50),
('95430', 'Montsoult', '31T', 449703, 5435373, 49.0692, 2.31139, 150),
('95436', 'Mours', '31T', 446808, 5442379, 49.1319, 2.27083, 30),
('95438', 'Moussy', '31T', 420535, 5443251, 49.1369, 1.91056, 90),
('95445', 'Nerville-la-Forêt', '31T', 447269, 5437558, 49.0886, 2.27778, 150),
('95446', 'Nesles-la-Vallée', '31T', 439549, 5442022, 49.1281, 2.17139, 40),
('95447', 'Neuilly-en-Vexin', '31T', 425443, 5446580, 49.1675, 1.97722, 150),
('95450', 'Neuville-sur-Oise', '31T', 431488, 5429361, 49.0133, 2.06305, 30),
('95452', 'Nointel', '31T', 448384, 5441901, 49.1278, 2.2925, 50),
('95456', 'Noisy-sur-Oise', '31T', 451249, 5442678, 49.135, 2.33167, 70),
('95459', 'Nucourt', '31T', 416479, 5445751, 49.1589, 1.85445, 122),
('95462', 'Omerville', '31T', 406643, 5443931, 49.1411, 1.71999, 120),
('95476', 'Osny', '31T', 431044, 5434462, 49.0592, 2.05611, 50),
('95480', 'Parmain', '31T', 442086, 5440420, 49.1139, 2.20639, 40),
('95483', 'Le Perchay', '31T', 422316, 5440199, 49.1097, 1.93556, 97),
('95487', 'Persan', '31T', 447051, 5444446, 49.1506, 2.27389, 29),
('95488', 'Pierrelaye', '31T', 438100, 5430271, 49.0222, 2.15333, 50),
('95489', 'Piscop', '31T', 452021, 5428867, 49.0108, 2.34389, 100),
('95491', 'Le Plessis-Bouchard', '31T', 444373, 5427920, 49.0017, 2.23944, 61),
('95492', 'Le Plessis-Gassot', '31T', 457138, 5431173, 49.0319, 2.41362, 104),
('95493', 'Le Plessis-Luzarches', '31T', 460132, 5438098, 49.0944, 2.45389, 70),
('95500', 'Pontoise', '31T', 433814, 5433594, 49.0517, 2.09417, 62),
('95504', 'Presles', '31T', 447600, 5440395, 49.1142, 2.28195, 50),
('95509', 'Puiseux-en-France', '31T', 461712, 5434999, 49.0667, 2.47583, 130),
('95510', 'Puiseux-Pontoise', '31T', 428524, 5434247, 49.0569, 2.02166, 100),
('95523', 'La Roche-Guyon', '31T', 399961, 5437500, 49.0822, 1.63, 20),
('95527', 'Roissy-en-France', '31T', 464569, 5427909, 49.0031, 2.51556, 90),
('95529', 'Ronquerolles', '31T', 443261, 5446213, 49.1661, 2.22167, 90),
('95535', 'Sagy', '31T', 423601, 5433417, 49.0489, 1.95445, 50),
('95539', 'Saint-Brice-sous-Forêt', '31T', 452740, 5427441, 48.9981, 2.35389, 87),
('95541', 'Saint-Clair-sur-Epte', '31T', 404000, 5451544, 49.2092, 1.68195, 56),
('95543', 'Saint-Cyr-en-Arthies', '31T', 408258, 5434947, 49.0606, 1.74417, 134),
('95554', 'Saint-Gervais', '31T', 410442, 5446988, 49.1692, 1.77139, 100),
('95555', 'Saint-Gratien', '31T', 447799, 5424891, 48.9747, 2.28667, 50),
('95563', 'Saint-Leu-la-Forêt', '31T', 444712, 5429337, 49.0144, 2.24388, 76),
('95566', 'Saint-Martin-du-Tertre', '31T', 452458, 5439549, 49.1069, 2.34861, 180),
('95572', 'Saint-Ouen-l''Aumône', '31T', 435121, 5432498, 49.0419, 2.11223, 42),
('95574', 'Saint-Prix', '31T', 446088, 5428737, 49.0092, 2.26278, 130),
('95580', 'Saint-Witz', '31T', 468526, 5437767, 49.0919, 2.56889, 168),
('95582', 'Sannois', '31T', 445542, 5424913, 48.9747, 2.25583, 56),
('95584', 'Santeuil', '31T', 423718, 5441909, 49.1253, 1.95444, 80),
('95585', 'Sarcelles', '31T', 454469, 5427611, 48.9997, 2.3775, 68),
('95592', 'Seraincourt', '31T', 417266, 5432026, 49.0356, 1.86805, 40),
('95594', 'Seugy', '31T', 455733, 5440911, 49.1194, 2.39333, 78),
('95598', 'Soisy-sous-Montmorency', '31T', 448869, 5426332, 48.9878, 2.30111, 44),
('95604', 'Survilliers', '31T', 466663, 5438302, 49.0967, 2.54333, 140),
('95607', 'Taverny', '31T', 443360, 5430215, 49.0222, 2.22527, 90),
('95610', 'Théméricourt', '31T', 419601, 5437551, 49.0856, 1.89889, 80),
('95611', 'Theuville', '31T', 432471, 5444945, 49.1536, 2.07389, 90),
('95612', 'Le Thillay', '31T', 461422, 5428269, 49.0061, 2.4725, 80),
('95625', 'Us', '31T', 424613, 5439179, 49.1008, 1.96722, 110),
('95627', 'Vallangoujard', '31T', 435447, 5443087, 49.1372, 2.115, 57),
('95628', 'Valmondois', '31T', 441009, 5438269, 49.0944, 2.19195, 33),
('95633', 'Vaudherland', '31T', 462434, 5427737, 49.0014, 2.48638, 73),
('95637', 'Vauréal', '31T', 429203, 5431767, 49.0347, 2.03139, 40),
('95641', 'Vémars', '31T', 468613, 5435295, 49.0697, 2.57028, 120),
('95651', 'Vétheuil', '31T', 405380, 5435212, 49.0625, 1.70472, 20),
('95652', 'Viarmes', '31T', 454117, 5441604, 49.1256, 2.37111, 50),
('95656', 'Vienne-en-Arthies', '31T', 407599, 5435637, 49.0667, 1.735, 69),
('95658', 'Vigny', '31T', 421798, 5436561, 49.0769, 1.92917, 70),
('95660', 'Villaines-sous-Bois', '31T', 453117, 5435992, 49.075, 2.35805, 120),
('95675', 'Villeron', '31T', 466595, 5433794, 49.0561, 2.54277, 110),
('95676', 'Villers-en-Arthies', '31T', 407032, 5438118, 49.0889, 1.72667, 150),
('95678', 'Villiers-Adam', '31T', 444137, 5434747, 49.0631, 2.23528, 130),
('95680', 'Villiers-le-Bel', '31T', 455327, 5428284, 49.0058, 2.38916, 104),
('95682', 'Villiers-le-Sec', '31T', 455508, 5435570, 49.0714, 2.39084, 130),
('95690', 'Wy-dit-Joli-Village', '31T', 414967, 5439658, 49.1039, 1.835, 125);
 
-- --------------------------------------------------------
 
--
-- Structure de la table `ods_communes_crea`
--
 
CREATE TABLE IF NOT EXISTS `ods_communes_crea` (
`occ_code_insee` varchar(5) CHARACTER SET utf8 NOT NULL,
`occ_code_postal` varchar(5) CHARACTER SET utf8 NOT NULL,
KEY `occ_code_insee` (`occ_code_insee`),
KEY `occ_code_postal` (`occ_code_postal`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1;
 
--
-- Contenu de la table `ods_communes_crea`
--
 
INSERT INTO `ods_communes_crea` (`occ_code_insee`, `occ_code_postal`) VALUES
('01010', '01350'),
('01011', '01100'),
('01012', '01110'),
('01013', '01230'),
('01014', '01100'),
('01017', '01230'),
('01019', '01510'),
('01022', '01510'),
('01031', '01810'),
('01033', '01200'),
('01035', '01130'),
('01036', '01260'),
('01039', '01350'),
('01044', '01200'),
('01051', '01450'),
('01059', '01260'),
('01060', '01110'),
('01063', '01460'),
('01066', '01510'),
('01067', '01430'),
('01068', '01450'),
('01071', '01170'),
('01073', '01350'),
('01076', '01230'),
('01077', '01450'),
('01078', '01630'),
('01079', '01260'),
('01080', '01110'),
('01081', '01410'),
('01082', '01420'),
('01087', '01130'),
('01091', '01200'),
('01097', '01510'),
('01100', '01510'),
('01101', '01430'),
('01103', '01170'),
('01104', '01200'),
('01107', '01230'),
('01109', '01550'),
('01111', '01230'),
('01112', '01430'),
('01114', '01200'),
('01118', '01420'),
('01119', '01110'),
('01121', '01110'),
('01122', '01110'),
('01133', '01350'),
('01135', '01170'),
('01138', '01350'),
('01143', '01220'),
('01148', '01590'),
('01152', '01130'),
('01153', '01170'),
('01155', '01230'),
('01158', '01550'),
('01160', '01210'),
('01162', '01350'),
('01170', '01460'),
('01171', '01100'),
('01173', '01170'),
('01174', '01130'),
('01176', '01260'),
('01180', '01220'),
('01181', '01810'),
('01185', '01110'),
('01186', '01110'),
('01187', '01260'),
('01189', '01200'),
('01191', '01430'),
('01200', '01450'),
('01204', '01130'),
('01205', '01200'),
('01206', '01430'),
('01208', '01350'),
('01209', '01200'),
('01210', '01410'),
('01214', '01450'),
('01215', '01420'),
('01218', '01260'),
('01221', '01260'),
('01228', '01430'),
('01237', '01810'),
('01242', '01450'),
('01247', '01170'),
('01257', '01200'),
('01265', '01460'),
('01267', '01460'),
('01269', '01130'),
('01274', '01130'),
('01277', '01230'),
('01279', '01230'),
('01280', '01510'),
('01281', '01210'),
('01282', '01430'),
('01283', '01100'),
('01288', '01630'),
('01292', '01260'),
('01293', '01430'),
('01298', '01130'),
('01300', '01130'),
('01302', '01350'),
('01303', '01450'),
('01307', '01460'),
('01308', '01550'),
('01311', '01510'),
('01313', '01280'),
('01316', '01510'),
('01329', '01510'),
('01330', '01260'),
('01331', '01450'),
('01354', '01630'),
('01357', '01130'),
('01360', '01630'),
('01372', '01510'),
('01373', '01430'),
('01384', '01230'),
('01397', '01220'),
('01399', '01170'),
('01401', '01630'),
('01404', '01450'),
('01407', '01420'),
('01409', '01260'),
('01413', '01420'),
('01414', '01260'),
('01415', '01510'),
('01416', '01230'),
('01417', '01110'),
('01419', '01710'),
('01421', '01230'),
('01435', '01210'),
('01436', '01170'),
('01441', '01430'),
('01442', '01260'),
('01448', '01200'),
('01452', '01510'),
('01453', '01260'),
('01456', '01350'),
('03001', '03200'),
('03004', '03120'),
('03006', '03640'),
('03008', '03250'),
('03014', '03130'),
('03016', '03140'),
('03017', '03120'),
('03021', '03800'),
('03022', '03330'),
('03024', '03130'),
('03028', '03120'),
('03030', '03800'),
('03033', '03300'),
('03035', '03130'),
('03042', '03120'),
('03045', '03270'),
('03050', '03250'),
('03053', '03140'),
('03056', '03300'),
('03059', '03140'),
('03061', '03800'),
('03062', '03140'),
('03066', '03250'),
('03067', '03220'),
('03068', '03640'),
('03071', '03220'),
('03075', '03140'),
('03077', '03330'),
('03078', '03450'),
('03079', '03220'),
('03089', '03330'),
('03093', '03300'),
('03094', '03300'),
('03095', '03300'),
('03096', '03140'),
('03103', '03130'),
('03105', '03120'),
('03107', '03450'),
('03108', '03330'),
('03112', '03140'),
('03113', '03250'),
('03115', '03140'),
('03116', '03140'),
('03118', '03800'),
('03125', '03250'),
('03126', '03270'),
('03131', '03120'),
('03132', '03220'),
('03133', '03800'),
('03135', '03450'),
('03138', '03120'),
('03139', '03250'),
('03141', '03250'),
('03142', '03130'),
('03144', '03130'),
('03147', '03130'),
('03152', '03330'),
('03154', '03130'),
('03163', '03270'),
('03164', '03800'),
('03165', '03250'),
('03166', '03800'),
('03174', '03300'),
('03175', '03140'),
('03178', '03130'),
('03181', '03130'),
('03182', '03800'),
('03192', '03450'),
('03194', '03330'),
('03196', '03130'),
('03201', '03250'),
('03205', '03120'),
('03208', '03130'),
('03209', '03800'),
('03220', '03800'),
('03223', '03120'),
('03224', '03250'),
('03226', '03130'),
('03230', '03300'),
('03237', '03140'),
('03239', '03130'),
('03240', '03220'),
('03248', '03250'),
('03250', '42620'),
('03255', '03800'),
('03257', '03120'),
('03263', '03220'),
('03264', '03270'),
('03268', '03800'),
('03272', '03120'),
('03274', '03220'),
('03276', '03450'),
('03277', '03140'),
('03278', '03140'),
('03284', '03220'),
('03289', '03220'),
('03291', '03220'),
('03294', '03140'),
('03295', '03330'),
('03299', '03220'),
('03300', '03220'),
('03302', '03450'),
('03306', '03200'),
('03310', '03200'),
('03311', '03450'),
('03319', '03140'),
('04001', '04510'),
('04005', '04170'),
('04006', '04260'),
('04007', '04170'),
('04008', '04240'),
('04009', '04420'),
('04013', '04200'),
('04016', '04200'),
('04017', '04140'),
('04018', '04150'),
('04019', '04400'),
('04020', '04140'),
('04021', '04380'),
('04022', '04330'),
('04023', '04250'),
('04024', '04420'),
('04025', '04370'),
('04026', '04250'),
('04027', '04200'),
('04028', '04270'),
('04030', '04330'),
('04031', '04270'),
('04032', '04240'),
('04033', '04340'),
('04036', '04420'),
('04037', '04250'),
('04039', '04120'),
('04040', '04380'),
('04042', '04320'),
('04043', '04320'),
('04046', '04510'),
('04047', '04660'),
('04049', '04160'),
('04050', '04250'),
('04051', '04200'),
('04053', '04200'),
('04054', '04270'),
('04055', '04330'),
('04057', '04250'),
('04058', '05110'),
('04059', '04330'),
('04061', '04370'),
('04062', '04530'),
('04065', '04230'),
('04066', '05110'),
('04067', '04200'),
('04069', '04120'),
('04070', '04000'),
('04072', '04420'),
('04073', '04400'),
('04074', '04000'),
('04075', '04200'),
('04076', '04320'),
('04079', '04160'),
('04084', '04270'),
('04085', '04250'),
('04086', '04400'),
('04087', '04230'),
('04090', '04240'),
('04092', '04120'),
('04093', '04250'),
('04095', '04150'),
('04096', '04850'),
('04097', '04420'),
('04099', '04170'),
('04100', '04530'),
('04101', '04230'),
('04102', '04340'),
('04107', '04270'),
('04108', '04350'),
('04109', '04230'),
('04110', '04510'),
('04113', '04420'),
('04115', '04240'),
('04118', '04250'),
('04120', '04540'),
('04121', '04270'),
('04122', '04510'),
('04123', '04200'),
('04124', '04500'),
('04126', '04140'),
('04130', '04230'),
('04132', '04150'),
('04133', '04170'),
('04134', '04250'),
('04135', '04360'),
('04136', '04170'),
('04137', '04250'),
('04139', '04200'),
('04140', '04200'),
('04141', '04230'),
('04144', '04120'),
('04145', '04200'),
('04148', '04120'),
('04150', '05130'),
('04154', '05160'),
('04155', '04420'),
('04157', '04410'),
('04158', '04500'),
('04159', '04150'),
('04161', '04340'),
('04162', '04150'),
('04163', '04150'),
('04164', '04230'),
('04166', '04500'),
('04167', '04000'),
('04169', '04150'),
('04170', '06260'),
('04171', '04120'),
('04172', '04500'),
('04173', '04170'),
('04174', '04240'),
('04176', '04500'),
('04177', '04380'),
('04178', '04230'),
('04179', '04200'),
('04180', '04330'),
('04181', '04270'),
('04182', '04270'),
('04183', '04170'),
('04184', '04410'),
('04186', '04500'),
('04187', '04330'),
('04191', '04460'),
('04193', '04530'),
('04194', '06260'),
('04195', '04400'),
('04198', '04340'),
('04199', '04200'),
('04200', '04290'),
('04201', '04150'),
('04202', '04320'),
('04203', '04460'),
('04204', '04330'),
('04205', '04140'),
('04207', '04200'),
('04208', '04150'),
('04209', '04200'),
('04210', '04120'),
('04211', '04290'),
('04214', '04330'),
('04216', '04200'),
('04217', '04380'),
('04218', '04170'),
('04219', '04170'),
('04220', '04400'),
('04222', '04250'),
('04224', '04240'),
('04226', '04400'),
('04228', '04250'),
('04229', '04200'),
('04231', '04200'),
('04233', '04200'),
('04234', '05130'),
('04235', '04140'),
('04236', '04170'),
('04237', '04140'),
('04240', '04640'),
('04244', '04290'),
('05001', '05460'),
('05002', '05250'),
('05003', '05470'),
('05004', '05260'),
('05005', '05300'),
('05006', '05120'),
('05007', '05350'),
('05008', '05140'),
('05009', '05800'),
('05010', '05140'),
('05011', '05230'),
('05012', '05200'),
('05013', '05110'),
('05014', '05300'),
('05016', '05700'),
('05017', '05230'),
('05018', '05000'),
('05019', '05140'),
('05020', '05500'),
('05021', '05700'),
('05022', '05190'),
('05023', '05100'),
('05024', '05150'),
('05025', '05500'),
('05026', '05600'),
('05027', '05100'),
('05028', '05400'),
('05029', '05260'),
('05031', '05310'),
('05032', '05260'),
('05033', '05700'),
('05034', '05300'),
('05035', '05400'),
('05036', '05380'),
('05037', '05000'),
('05038', '05350'),
('05039', '05800'),
('05040', '05230'),
('05042', '05250'),
('05043', '05500'),
('05044', '05200'),
('05045', '05200'),
('05046', '05200'),
('05047', '26560'),
('05048', '05700'),
('05049', '05110'),
('05050', '05190'),
('05051', '05700'),
('05052', '05600'),
('05053', '05300'),
('05054', '05500'),
('05055', '05140'),
('05056', '05260'),
('05057', '05130'),
('05058', '05310'),
('05059', '05000'),
('05060', '05400'),
('05061', '05000'),
('05062', '05800'),
('05063', '05320'),
('05064', '05800'),
('05065', '05600'),
('05066', '05140'),
('05067', '05500'),
('05068', '05130'),
('05069', '05300'),
('05070', '05300'),
('05071', '05110'),
('05072', '05500'),
('05073', '05300'),
('05074', '05130'),
('05075', '05400'),
('05076', '05700'),
('05077', '05350'),
('05078', '05110'),
('05079', '05220'),
('05080', '05140'),
('05081', '05700'),
('05082', '05600'),
('05084', '05230'),
('05085', '05100'),
('05086', '05150'),
('05087', '05400'),
('05088', '05150'),
('05089', '05700'),
('05090', '05500'),
('05091', '05150'),
('05092', '05000'),
('05093', '05100'),
('05094', '05700'),
('05095', '05500'),
('05096', '05170'),
('05097', '05700'),
('05098', '05200'),
('05099', '05400'),
('05100', '05000'),
('05101', '05340'),
('05102', '05700'),
('05103', '05300'),
('05104', '05500'),
('05106', '05230'),
('05107', '05100'),
('05108', '05200'),
('05109', '05100'),
('05110', '05290'),
('05111', '05200'),
('05112', '05400'),
('05113', '05000'),
('05114', '05160'),
('05115', '05190'),
('05116', '05600'),
('05117', '05150'),
('05118', '05300'),
('05119', '05600'),
('05120', '05460'),
('05121', '05190'),
('05122', '05310'),
('05123', '05400'),
('05124', '05000'),
('05126', '05150'),
('05127', '05190'),
('05128', '05200'),
('05129', '05150'),
('05130', '05160'),
('05131', '05400'),
('05132', '05500'),
('05133', '05330'),
('05134', '05600'),
('05135', '05700'),
('05136', '05600'),
('05138', '05250'),
('05139', '05250'),
('05140', '05130'),
('05141', '05500'),
('05142', '05800'),
('05143', '05300'),
('05144', '05800'),
('05145', '05260'),
('05146', '05140'),
('05147', '05500'),
('05148', '05500'),
('05149', '05260'),
('05150', '05150'),
('05151', '05120'),
('05152', '05800'),
('05153', '05260'),
('05154', '05140'),
('05155', '05300'),
('05156', '05200'),
('05157', '05350'),
('05158', '05400'),
('05159', '05300'),
('05160', '05300'),
('05161', '05240'),
('05162', '05110'),
('05163', '05160'),
('05164', '05160'),
('05165', '05700'),
('05166', '05700'),
('05167', '05700'),
('05168', '05130'),
('05169', '05150'),
('05170', '05130'),
('05171', '05190'),
('05172', '05700'),
('05173', '05300'),
('05174', '05100'),
('05175', '05290'),
('05176', '05130'),
('05177', '05560'),
('05178', '05300'),
('05179', '05400'),
('05180', '05120'),
('05181', '05480'),
('05182', '05800'),
('05183', '05100'),
('05184', '05110'),
('06001', '06910'),
('06002', '06910'),
('06003', '06750'),
('06005', '06260'),
('06008', '06260'),
('06009', '06420'),
('06010', '06620'),
('06013', '06450'),
('06014', '06390'),
('06015', '06390'),
('06016', '06470'),
('06017', '06510'),
('06019', '06440'),
('06020', '06450'),
('06021', '06830'),
('06022', '06510'),
('06023', '06540'),
('06024', '06850'),
('06025', '06510'),
('06026', '06530'),
('06028', '06750'),
('06031', '06340'),
('06033', '06510'),
('06034', '06670'),
('06035', '06500'),
('06036', '06500'),
('06037', '06460'),
('06039', '06390'),
('06040', '06470'),
('06041', '06620'),
('06042', '06420'),
('06043', '06390'),
('06045', '06910'),
('06046', '06670'),
('06047', '06510'),
('06048', '06390'),
('06049', '06620'),
('06050', '06140'),
('06051', '06260'),
('06052', '06910'),
('06053', '06470'),
('06054', '06340'),
('06055', '06670'),
('06056', '06470'),
('06057', '06440'),
('06058', '06460'),
('06060', '06950'),
('06061', '06510'),
('06062', '06540'),
('06063', '06850'),
('06064', '06510'),
('06066', '06830'),
('06067', '06500'),
('06068', '06620'),
('06070', '06620'),
('06071', '06470'),
('06072', '06420'),
('06073', '06420'),
('06074', '06450'),
('06075', '06670'),
('06076', '06260'),
('06077', '06440'),
('06078', '06710'),
('06080', '06420'),
('06081', '06910'),
('06082', '06710'),
('06083', '06500'),
('06086', '06380'),
('06087', '06910'),
('06091', '06440'),
('06092', '06440'),
('06093', '06260'),
('06094', '06470'),
('06095', '06530'),
('06096', '06260'),
('06097', '06910'),
('06098', '06260'),
('06099', '06260'),
('06100', '06830'),
('06101', '06260'),
('06102', '06420'),
('06103', '06450'),
('06104', '06190'),
('06106', '06910'),
('06107', '06910'),
('06109', '06670'),
('06110', '06420'),
('06111', '06420'),
('06113', '06500'),
('06115', '06260'),
('06116', '06850'),
('06117', '06670'),
('06118', '06780'),
('06119', '06660'),
('06120', '06660'),
('06122', '06640'),
('06124', '06260'),
('06125', '06470'),
('06126', '06670'),
('06127', '06450'),
('06129', '06420'),
('06130', '06460'),
('06131', '06910'),
('06132', '06540'),
('06133', '06470'),
('06134', '06750'),
('06135', '06910'),
('06136', '06380'),
('06137', '06530'),
('06139', '06710'),
('06140', '06530'),
('06141', '06830'),
('06142', '06440'),
('06143', '06710'),
('06144', '06710'),
('06145', '06830'),
('06146', '06710'),
('06147', '06690'),
('06148', '06140'),
('06149', '06340'),
('06151', '06450'),
('06153', '06420'),
('06154', '06750'),
('06156', '06450'),
('06157', '06140'),
('06158', '06710'),
('06160', '06470'),
('06162', '06430'),
('06163', '06430'),
('07001', '07160'),
('07002', '07200'),
('07003', '07530'),
('07004', '07000'),
('07006', '07190'),
('07010', '07100'),
('07011', '07530'),
('07012', '07310'),
('07013', '07290'),
('07014', '07410'),
('07016', '07600'),
('07017', '07140'),
('07018', '07330'),
('07019', '07200'),
('07025', '07330'),
('07026', '07630'),
('07029', '07110'),
('07030', '07190'),
('07037', '07310'),
('07038', '07590'),
('07039', '07410'),
('07040', '07270'),
('07041', '07100'),
('07045', '07450'),
('07047', '07590'),
('07049', '07160'),
('07050', '07140'),
('07054', '07310'),
('07058', '07110'),
('07062', '07110'),
('07064', '07160'),
('07065', '07380'),
('07068', '07270'),
('07069', '07410'),
('07071', '07470'),
('07072', '07000'),
('07073', '07270'),
('07074', '07000'),
('07075', '07510'),
('07079', '07570'),
('07080', '07320'),
('07081', '07260'),
('07082', '07160'),
('07085', '07270'),
('07087', '07380'),
('07090', '07000'),
('07091', '07200'),
('07092', '07000'),
('07093', '07530'),
('07095', '07270'),
('07096', '07190'),
('07098', '07000'),
('07100', '07140'),
('07103', '07310'),
('07104', '07190'),
('07105', '07510'),
('07106', '07470'),
('07107', '07380'),
('07108', '07160'),
('07109', '07110'),
('07110', '07260'),
('07111', '07600'),
('07112', '07600'),
('07114', '07570'),
('07116', '07200'),
('07118', '07110'),
('07119', '07470'),
('07120', '07530'),
('07121', '07470'),
('07122', '07200'),
('07123', '07310'),
('07124', '07520'),
('07127', '07380'),
('07128', '07520'),
('07129', '07270'),
('07130', '07660'),
('07131', '07200'),
('07132', '07110'),
('07134', '07110'),
('07135', '07590'),
('07136', '48250'),
('07137', '07660'),
('07139', '07530'),
('07141', '07200'),
('07142', '07660'),
('07144', '07110'),
('07146', '07000'),
('07147', '07140'),
('07148', '07140'),
('07149', '07190'),
('07150', '07160'),
('07151', '07320'),
('07153', '07330'),
('07154', '07510'),
('07155', '07200'),
('07156', '07380'),
('07158', '07530'),
('07160', '07690'),
('07161', '07560'),
('07162', '07110'),
('07163', '07140'),
('07165', '07160'),
('07166', '07270'),
('07170', '07410'),
('07173', '07450'),
('07175', '07590'),
('07178', '07380'),
('07179', '07000'),
('07182', '07380'),
('07184', '07000'),
('07185', '07290'),
('07186', '07000'),
('07187', '07110'),
('07188', '07290'),
('07189', '07260'),
('07190', '07200'),
('07192', '07320'),
('07193', '07110'),
('07195', '07310'),
('07196', '07110'),
('07197', '07100'),
('07199', '07260'),
('07200', '07560'),
('07202', '07260'),
('07203', '07450'),
('07204', '07320'),
('07205', '07790'),
('07206', '07590'),
('07209', '07160'),
('07210', '07600'),
('07212', '07690'),
('07215', '07160'),
('07216', '07270'),
('07218', '07270'),
('07220', '07160'),
('07222', '07160'),
('07223', '07380'),
('07224', '07510'),
('07226', '07310'),
('07229', '07200'),
('07230', '07200'),
('07231', '07200'),
('07232', '07590'),
('07233', '07190'),
('07235', '07510'),
('07236', '07410'),
('07239', '07160'),
('07248', '07160'),
('07249', '07320'),
('07250', '07290'),
('07251', '07530'),
('07252', '07310'),
('07253', '07190'),
('07254', '07200'),
('07255', '07000'),
('07256', '07160'),
('07258', '07690'),
('07262', '07590'),
('07265', '07100'),
('07266', '07140'),
('07267', '07310'),
('07269', '07310'),
('07272', '07200'),
('07274', '07190'),
('07275', '07260'),
('07276', '07160'),
('07277', '07200'),
('07282', '07450'),
('07284', '07140'),
('07285', '07520'),
('07286', '07190'),
('07288', '07000'),
('07289', '07200'),
('07290', '07270'),
('07292', '07290'),
('07295', '07190'),
('07296', '07200'),
('07299', '07290'),
('07301', '07410'),
('07305', '07140'),
('07307', '07110'),
('07309', '07290'),
('07315', '07380'),
('07318', '07110'),
('07322', '07330'),
('07325', '07200'),
('07326', '07510'),
('07327', '07110'),
('07329', '07110'),
('07331', '07600'),
('07333', '07690'),
('07334', '07140'),
('07335', '07410'),
('07336', '07260'),
('07339', '07200'),
('07340', '07000'),
('07342', '07690'),
('07343', '07110'),
('07347', '07690'),
('07348', '07200'),
('09001', '09240'),
('09003', '09300'),
('09004', '09310'),
('09005', '09320'),
('09006', '09400'),
('09007', '09240'),
('09008', '09200'),
('09009', '09240'),
('09011', '09800'),
('09012', '09250'),
('09013', '09000'),
('09014', '09800'),
('09015', '09400'),
('09016', '09400'),
('09017', '09800'),
('09018', '09800'),
('09020', '09460'),
('09023', '09110'),
('09024', '09310'),
('09025', '09800'),
('09026', '09800'),
('09027', '09800'),
('09028', '09310'),
('09029', '09140'),
('09030', '09220'),
('09031', '09250'),
('09032', '09110'),
('09033', '09160'),
('09034', '09800'),
('09035', '09800'),
('09037', '09190'),
('09041', '09160'),
('09042', '09240'),
('09044', '09000'),
('09045', '09400'),
('09047', '09300'),
('09049', '09000'),
('09051', '09300'),
('09053', '09250'),
('09054', '09160'),
('09055', '09800'),
('09057', '09320'),
('09058', '09400'),
('09059', '09800'),
('09062', '09800'),
('09063', '09000'),
('09064', '09310'),
('09065', '09320'),
('09066', '09000'),
('09068', '09000'),
('09069', '09800'),
('09070', '09310'),
('09071', '09240'),
('09077', '09400'),
('09078', '09460'),
('09080', '09300'),
('09082', '09420'),
('09085', '09800'),
('09086', '09160'),
('09087', '09250'),
('09088', '09250'),
('09091', '09160'),
('09092', '09400'),
('09093', '09000'),
('09095', '09800'),
('09096', '09310'),
('09097', '09420'),
('09099', '09000'),
('09100', '09140'),
('09106', '09300'),
('09108', '09240'),
('09110', '09200'),
('09111', '09800'),
('09113', '09140'),
('09114', '09200'),
('09118', '09420'),
('09119', '09200'),
('09121', '09000'),
('09122', '09000'),
('09125', '09300'),
('09126', '09300'),
('09128', '09190'),
('09129', '09800'),
('09130', '09000'),
('09131', '09250'),
('09133', '09400'),
('09134', '09220'),
('09135', '09220'),
('09136', '09400'),
('09138', '09000'),
('09139', '09390'),
('09140', '09110'),
('09141', '09800'),
('09142', '09300'),
('09143', '09220'),
('09148', '09160'),
('09149', '09200'),
('09152', '09400'),
('09154', '09240'),
('09155', '09310'),
('09156', '09310'),
('09159', '09310'),
('09160', '09300'),
('09162', '09220'),
('09164', '09420'),
('09165', '09300'),
('09166', '09300'),
('09168', '09300'),
('09171', '09250'),
('09174', '09000'),
('09176', '09250'),
('09182', '09320'),
('09183', '09160'),
('09187', '09160'),
('09188', '09400'),
('09189', '09110'),
('09192', '09400'),
('09193', '09460'),
('09196', '09240'),
('09197', '09110'),
('09201', '09200'),
('09203', '09240'),
('09204', '09200'),
('09206', '09300'),
('09207', '09330'),
('09208', '09160'),
('09209', '09200'),
('09210', '09000'),
('09211', '09300'),
('09212', '09240'),
('09214', '09200'),
('09215', '09300'),
('09216', '09240'),
('09217', '09400'),
('09218', '09110'),
('09219', '09800'),
('09220', '09110'),
('09221', '09400'),
('09222', '09220'),
('09223', '09140'),
('09226', '09310'),
('09227', '09300'),
('09228', '09110'),
('09230', '09460'),
('09231', '09320'),
('09232', '09110'),
('09234', '09000'),
('09235', '09160'),
('09236', '09000'),
('09237', '09460'),
('09239', '09460'),
('09240', '09400'),
('09241', '09400'),
('09242', '09300'),
('09246', '09420'),
('09247', '09200'),
('09249', '09300'),
('09250', '09300'),
('09252', '09460'),
('09261', '09200'),
('09262', '09300'),
('09263', '09800'),
('09264', '09000'),
('09267', '09800'),
('09268', '09190'),
('09269', '09000'),
('09272', '09000'),
('09273', '09000'),
('09279', '09800'),
('09280', '09400'),
('09281', '09300'),
('09283', '09110'),
('09285', '09140'),
('09286', '09220'),
('09287', '09250'),
('09289', '09190'),
('09290', '09800'),
('09291', '09140'),
('09292', '09240'),
('09293', '09000'),
('09295', '09220'),
('09296', '09310'),
('09297', '09800'),
('09298', '09110'),
('09299', '09140'),
('09300', '09000'),
('09301', '09320'),
('09302', '09220'),
('09303', '09400'),
('09304', '09240'),
('09306', '09400'),
('09307', '09160'),
('09308', '09190'),
('09311', '09110'),
('09317', '09800'),
('09318', '09250'),
('09320', '09310'),
('09321', '09400'),
('09322', '09140'),
('09325', '09110'),
('09326', '09310'),
('09328', '09310'),
('09329', '09000'),
('09330', '09250'),
('09334', '09220'),
('09335', '09800'),
('09336', '09300'),
('11003', '11300'),
('11007', '11330'),
('11008', '11580'),
('11010', '11190'),
('11011', '11600'),
('11015', '11190'),
('11016', '11220'),
('11017', '11140'),
('11019', '11140'),
('11020', '11330'),
('11021', '11140'),
('11025', '11600'),
('11028', '11340'),
('11029', '11580'),
('11031', '11140'),
('11035', '11500'),
('11036', '11340'),
('11038', '11140'),
('11039', '11300'),
('11044', '11190'),
('11045', '11300'),
('11046', '11300'),
('11047', '11140'),
('11050', '11500'),
('11052', '11390'),
('11053', '11300'),
('11054', '11400'),
('11055', '11190'),
('11056', '11160'),
('11060', '11140'),
('11062', '11140'),
('11065', '11190'),
('11066', '11340'),
('11073', '11190'),
('11075', '11160'),
('11076', '11400'),
('11078', '11300'),
('11079', '11390'),
('11080', '11230'),
('11081', '11160'),
('11082', '11250'),
('11083', '11220'),
('11090', '11300'),
('11091', '11230'),
('11092', '11160'),
('11093', '11140'),
('11094', '11250'),
('11096', '11340'),
('11097', '11190'),
('11099', '11600'),
('11100', '11230'),
('11101', '11500'),
('11102', '11250'),
('11103', '11190'),
('11104', '11140'),
('11105', '11300'),
('11107', '11230'),
('11109', '11190'),
('11110', '11220'),
('11112', '11190'),
('11113', '11350'),
('11115', '11390'),
('11117', '11330'),
('11118', '11330'),
('11119', '11300'),
('11120', '11300'),
('11123', '11350'),
('11127', '11140'),
('11130', '11340'),
('11133', '11220'),
('11135', '11140'),
('11137', '11330'),
('11138', '11400'),
('11142', '11300'),
('11147', '11140'),
('11149', '11400'),
('11150', '11310'),
('11154', '11600'),
('11155', '11190'),
('11156', '11600'),
('11158', '11300'),
('11160', '11140'),
('11161', '11250'),
('11163', '11140'),
('11165', '11500'),
('11168', '11500'),
('11169', '11250'),
('11171', '11230'),
('11174', '11380'),
('11175', '11400'),
('11176', '11220'),
('11177', '11140'),
('11179', '11220'),
('11180', '11380'),
('11181', '11400'),
('11182', '11310'),
('11183', '11250'),
('11185', '11220'),
('11186', '11330'),
('11187', '11330'),
('11189', '11390'),
('11191', '11330'),
('11192', '11400'),
('11194', '11600'),
('11195', '11400'),
('11197', '11300'),
('11200', '11160'),
('11201', '11250'),
('11205', '11600'),
('11206', '11300'),
('11207', '11300'),
('11209', '11190'),
('11211', '11300'),
('11213', '11330'),
('11214', '11300'),
('11215', '11600'),
('11216', '11300'),
('11219', '11140'),
('11221', '11390'),
('11222', '11380'),
('11224', '11330'),
('11225', '11400'),
('11227', '11220'),
('11229', '11140'),
('11230', '11140'),
('11232', '11380'),
('11234', '11400'),
('11235', '11580'),
('11240', '11190'),
('11242', '11250'),
('11244', '11140'),
('11245', '11330'),
('11249', '11230'),
('11250', '11330'),
('11251', '11220'),
('11260', '11330'),
('11263', '11500'),
('11265', '11140'),
('11270', '11350'),
('11271', '11330'),
('11274', '11300'),
('11276', '11350'),
('11282', '11230'),
('11284', '11400'),
('11286', '11160'),
('11287', '11190'),
('11289', '11300'),
('11292', '11400'),
('11293', '11250'),
('11294', '11300'),
('11297', '11380'),
('11298', '11220'),
('11299', '11250'),
('11300', '11400'),
('11302', '11140'),
('11303', '11230'),
('11304', '11500'),
('11306', '11500'),
('11309', '11190'),
('11310', '11190'),
('11311', '11220'),
('11313', '11400'),
('11314', '11220'),
('11315', '11160'),
('11316', '11230'),
('11317', '11140'),
('11319', '11380'),
('11320', '11340'),
('11321', '11140'),
('11323', '11300'),
('11325', '11250'),
('11326', '11350'),
('11333', '11230'),
('11335', '11140'),
('11336', '11230'),
('11338', '11300'),
('11339', '11310'),
('11341', '11500'),
('11344', '11250'),
('11347', '11500'),
('11350', '11500'),
('11351', '11220'),
('11352', '11500'),
('11354', '11220'),
('11355', '11300'),
('11356', '11400'),
('11358', '11500'),
('11361', '11400'),
('11363', '11220'),
('11364', '11300'),
('11367', '11310'),
('11368', '11600'),
('11372', '11600'),
('11373', '11140'),
('11374', '11330'),
('11376', '11190'),
('11377', '11190'),
('11378', '11220'),
('11380', '11230'),
('11381', '11190'),
('11382', '11400'),
('11383', '11400'),
('11384', '11350'),
('11386', '11220'),
('11387', '11220'),
('11388', '11330'),
('11389', '11580'),
('11391', '11380'),
('11392', '11220'),
('11394', '11300'),
('11395', '11160'),
('11396', '11160'),
('11399', '11400'),
('11400', '11230'),
('11401', '11350'),
('11402', '11580'),
('11406', '11580'),
('11407', '11400'),
('11408', '11250'),
('11409', '11330'),
('11410', '11600'),
('11411', '11600'),
('11412', '11580'),
('11413', '11600'),
('11414', '11220'),
('11415', '11250'),
('11416', '11600'),
('11417', '11300'),
('11420', '11250'),
('11424', '11230'),
('11425', '11600'),
('11426', '11600'),
('11427', '11300'),
('11428', '11310'),
('11430', '11400'),
('11433', '11160'),
('11435', '11330'),
('11440', '11220'),
('12001', '12630'),
('12002', '12520'),
('12005', '12210'),
('12006', '12430'),
('12009', '12360'),
('12010', '12290'),
('12011', '12120'),
('12014', '12130'),
('12015', '12120'),
('12017', '12430'),
('12019', '12380'),
('12020', '12510'),
('12022', '12490'),
('12025', '12370'),
('12026', '12310'),
('12027', '12500'),
('12033', '12340'),
('12036', '12600'),
('12037', '12480'),
('12038', '12480'),
('12039', '12360'),
('12040', '12150'),
('12042', '12400'),
('12043', '12450'),
('12044', '12360'),
('12047', '12560'),
('12048', '12140'),
('12050', '12290'),
('12051', '12420'),
('12055', '12130'),
('12057', '12120'),
('12058', '12210'),
('12061', '12500'),
('12062', '12620'),
('12063', '12230'),
('12064', '12500'),
('12065', '12120'),
('12066', '12330'),
('12067', '12540'),
('12069', '12370'),
('12070', '12520'),
('12072', '12100'),
('12073', '12120'),
('12074', '12470'),
('12075', '12170'),
('12076', '12320'),
('12077', '12540'),
('12078', '12400'),
('12079', '12190'),
('12081', '12310'),
('12082', '12230'),
('12084', '12100'),
('12086', '12640'),
('12087', '12340'),
('12088', '12210'),
('12090', '12510'),
('12092', '12170'),
('12093', '12140'),
('12094', '12140'),
('12096', '12500'),
('12097', '12140'),
('12098', '12190'),
('12099', '12360'),
('12102', '12450'),
('12103', '12140'),
('12106', '12340'),
('12107', '12310'),
('12109', '12360'),
('12110', '12140'),
('12112', '12420'),
('12114', '12320'),
('12115', '12230'),
('12116', '12460'),
('12117', '12210'),
('12118', '12600'),
('12119', '12210'),
('12120', '12310'),
('12122', '12230'),
('12123', '12150'),
('12124', '12500'),
('12125', '12380'),
('12126', '12150'),
('12127', '12170'),
('12129', '12430'),
('12131', '12740'),
('12133', '12450'),
('12138', '12330'),
('12139', '12540'),
('12143', '12360'),
('12144', '12120'),
('12145', '12100'),
('12146', '12000'),
('12147', '12360'),
('12151', '12460'),
('12152', '12380'),
('12153', '12490'),
('12154', '12400'),
('12155', '12540'),
('12156', '12210'),
('12157', '12630'),
('12160', '12720'),
('12161', '12330'),
('12163', '12370'),
('12164', '12600'),
('12165', '12330'),
('12166', '12600'),
('12168', '12230'),
('12171', '12330'),
('12172', '12190'),
('12173', '12320'),
('12174', '12510'),
('12176', '12850'),
('12177', '12310'),
('12178', '12520'),
('12179', '12360'),
('12180', '12720'),
('12182', '12130'),
('12184', '12130'),
('12185', '12290'),
('12186', '12380'),
('12187', '12470'),
('12188', '12290'),
('12192', '12370'),
('12193', '12320'),
('12195', '12400'),
('12196', '12150'),
('12197', '12170'),
('12200', '12640'),
('12201', '12340'),
('12202', '12000'),
('12203', '12250'),
('12204', '12100'),
('12207', '12120'),
('12208', '12400'),
('12209', '12460'),
('12211', '12720'),
('12212', '12540'),
('12213', '12620'),
('12214', '12470'),
('12215', '12330'),
('12216', '12500'),
('12218', '12320'),
('12219', '12130'),
('12220', '12230'),
('12221', '12320'),
('12222', '12400'),
('12223', '12420'),
('12224', '12130'),
('12225', '12100'),
('12226', '12140'),
('12228', '12480'),
('12229', '12250'),
('12230', '12170'),
('12231', '12230'),
('12232', '12250'),
('12234', '12120'),
('12235', '12170'),
('12236', '12620'),
('12237', '12560'),
('12238', '12780'),
('12239', '12130'),
('12241', '12850'),
('12243', '12490'),
('12244', '12490'),
('12247', '12560'),
('12248', '12380'),
('12249', '12370'),
('12250', '12460'),
('12251', '12400'),
('12253', '12410'),
('12254', '12330'),
('12255', '12120'),
('12260', '12230'),
('12264', '12740'),
('12265', '12190'),
('12266', '12290'),
('12267', '12170'),
('12268', '12320'),
('12269', '12380'),
('12270', '12150'),
('12271', '12310'),
('12273', '12210'),
('12274', '12360'),
('12275', '12360'),
('12277', '12600'),
('12279', '12210'),
('12280', '12600'),
('12282', '12250'),
('12283', '12290'),
('12284', '12430'),
('12286', '12400'),
('12288', '12330'),
('12291', '12520'),
('12292', '12400'),
('12293', '12720'),
('12294', '12780'),
('12295', '12250'),
('12296', '12490'),
('12297', '12290'),
('12299', '12430'),
('12303', '12310'),
('12304', '12420'),
('12307', '12410'),
('15001', '15160'),
('15002', '15100'),
('15003', '15700'),
('15004', '15100'),
('15005', '15100'),
('15006', '15380'),
('15007', '15110'),
('15008', '15240'),
('15009', '15400'),
('15010', '15200'),
('15011', '15150'),
('15012', '15130'),
('15013', '15500'),
('15014', '15000'),
('15015', '15240'),
('15016', '15250'),
('15017', '15800'),
('15018', '15700'),
('15019', '15240'),
('15020', '15270'),
('15021', '15600'),
('15022', '15500'),
('15024', '15700'),
('15025', '15300'),
('15026', '15230'),
('15027', '15340'),
('15028', '15130'),
('15029', '15340'),
('15030', '15290'),
('15031', '15170'),
('15032', '15500'),
('15033', '15230'),
('15034', '15320'),
('15035', '15170'),
('15036', '15200'),
('15037', '15350'),
('15038', '15270'),
('15040', '15190'),
('15041', '15300'),
('15042', '15500'),
('15043', '15500'),
('15044', '15300'),
('15045', '15110'),
('15046', '15700'),
('15047', '15300'),
('15048', '15500'),
('15049', '15400'),
('15050', '15400'),
('15051', '15320'),
('15052', '15400'),
('15053', '15170'),
('15054', '15190'),
('15055', '15100'),
('15056', '15250'),
('15057', '15150'),
('15058', '15130'),
('15059', '15430'),
('15060', '15110'),
('15061', '15300'),
('15063', '15140'),
('15064', '15700'),
('15065', '15110'),
('15066', '15380'),
('15067', '15140'),
('15068', '15390'),
('15069', '15170'),
('15070', '15140'),
('15071', '15600'),
('15072', '15310'),
('15073', '15110'),
('15074', '15130'),
('15075', '15310'),
('15076', '15150'),
('15077', '15230'),
('15078', '15110'),
('15079', '15200'),
('15080', '15170'),
('15081', '15800'),
('15082', '15120'),
('15083', '15250'),
('15084', '15120'),
('15085', '15130'),
('15086', '15230'),
('15087', '15120'),
('15088', '15150'),
('15089', '15120'),
('15090', '15130'),
('15091', '15160'),
('15092', '15270'),
('15093', '15120'),
('15094', '15150'),
('15095', '15250'),
('15096', '15590'),
('15097', '15500'),
('15098', '15500'),
('15099', '15260'),
('15100', '15300'),
('15101', '15300'),
('15102', '15300'),
('15103', '15120'),
('15104', '15600'),
('15105', '43450'),
('15106', '15110'),
('15107', '15320'),
('15108', '15390'),
('15110', '15190'),
('15111', '15210'),
('15112', '15230'),
('15113', '15590'),
('15114', '15190'),
('15116', '15400'),
('15117', '15220'),
('15118', '15250'),
('15119', '15500'),
('15120', '15200'),
('15121', '15110'),
('15122', '15600'),
('15123', '15200'),
('15124', '15400'),
('15125', '15100'),
('15126', '15500'),
('15127', '15500'),
('15128', '15240'),
('15129', '15190'),
('15130', '15100'),
('15131', '15240'),
('15132', '15190'),
('15133', '15600'),
('15134', '15120'),
('15135', '15150'),
('15136', '15340'),
('15137', '15380'),
('15138', '15300'),
('15139', '15230'),
('15140', '15000'),
('15141', '15170'),
('15142', '15260'),
('15143', '15150'),
('15144', '15290'),
('15145', '15260'),
('15146', '15800'),
('15147', '15290'),
('15148', '15430'),
('15149', '15230'),
('15150', '15290'),
('15151', '15170'),
('15152', '15230'),
('15153', '15700'),
('15154', '15800'),
('15155', '15160'),
('15156', '15130'),
('15157', '15600'),
('15158', '15500'),
('15159', '15800'),
('15160', '15250'),
('15161', '15170'),
('15162', '15400'),
('15163', '15220'),
('15164', '15100'),
('15165', '15150'),
('15166', '15290'),
('15167', '15600'),
('15168', '15320'),
('15169', '15240'),
('15170', '15190'),
('15171', '15170'),
('15172', '15220'),
('15173', '15190'),
('15174', '15140'),
('15175', '15310'),
('15176', '15140'),
('15178', '15590'),
('15179', '15140'),
('15180', '15800'),
('15181', '15600'),
('15182', '15150'),
('15183', '15130'),
('15184', '15600'),
('15185', '15400'),
('15186', '15140'),
('15187', '15100'),
('15188', '15100'),
('15189', '15150'),
('15190', '15400'),
('15191', '15310'),
('15192', '15580'),
('15194', '15600'),
('15195', '15390'),
('15196', '15220'),
('15197', '15390'),
('15198', '15230'),
('15199', '15110'),
('15200', '15140'),
('15201', '15230'),
('15202', '15140'),
('15203', '15500'),
('15204', '15250'),
('15205', '15140'),
('15206', '15350'),
('15207', '15500'),
('15208', '15140'),
('15209', '15110'),
('15211', '15150'),
('15212', '15600'),
('15213', '15190'),
('15214', '15290'),
('15215', '15130'),
('15216', '15110'),
('15217', '15150'),
('15218', '15380'),
('15219', '15140'),
('15220', '15200'),
('15221', '15130'),
('15222', '15120'),
('15223', '15240'),
('15224', '15290'),
('15225', '15300'),
('15226', '15340'),
('15227', '15100'),
('15228', '15150'),
('15229', '15100'),
('15230', '15200'),
('15231', '15170'),
('15232', '15100'),
('15233', '15250'),
('15234', '15130'),
('15235', '15100'),
('15236', '15450'),
('15237', '15100'),
('15238', '15310'),
('15240', '15270'),
('15241', '15110'),
('15242', '15600'),
('15243', '15400'),
('15244', '15300'),
('15245', '15100'),
('15246', '15400'),
('15247', '15170'),
('15248', '15300'),
('15249', '15380'),
('15250', '15240'),
('15251', '15100'),
('15252', '15590'),
('15253', '15160'),
('15254', '15350'),
('15255', '15130'),
('15256', '15160'),
('15257', '15130'),
('15258', '15800'),
('15259', '15500'),
('15260', '15120'),
('15261', '15200'),
('15262', '15100'),
('15263', '15300'),
('15264', '15220'),
('15265', '15210'),
('15266', '15130'),
('15267', '15000'),
('15268', '15290'),
('15269', '15140'),
('19001', '19260'),
('19002', '19200'),
('19003', '19190'),
('19004', '19380'),
('19006', '19200'),
('19007', '19120'),
('19008', '19250'),
('19009', '19000'),
('19010', '19400'),
('19012', '19120'),
('19013', '19190'),
('19014', '19220'),
('19016', '19800'),
('19017', '19430'),
('19018', '19220'),
('19019', '19120'),
('19020', '19390'),
('19021', '19290'),
('19023', '19190'),
('19026', '19120'),
('19027', '19170'),
('19028', '19110'),
('19029', '19500'),
('19032', '19120'),
('19033', '19170'),
('19034', '19430'),
('19036', '19370'),
('19038', '19330'),
('19039', '19320'),
('19040', '19320'),
('19041', '19150'),
('19042', '19330'),
('19043', '19360'),
('19044', '19120'),
('19045', '19430'),
('19046', '19300'),
('19048', '19190'),
('19050', '19500'),
('19051', '19390'),
('19052', '19290'),
('19053', '19200'),
('19054', '19120'),
('19055', '19160'),
('19056', '19320'),
('19057', '19500'),
('19058', '19250'),
('19061', '19150'),
('19062', '19800'),
('19063', '19360'),
('19064', '19340'),
('19065', '19340'),
('19067', '19500'),
('19068', '19360'),
('19069', '19220'),
('19070', '19300'),
('19071', '19250'),
('19073', '19300'),
('19074', '19170'),
('19075', '19150'),
('19080', '19340'),
('19081', '19800'),
('19082', '19330'),
('19083', '19340'),
('19084', '19380'),
('19085', '19800'),
('19086', '19430'),
('19087', '19170'),
('19088', '19300'),
('19089', '19320'),
('19090', '19320'),
('19091', '19400'),
('19092', '19300'),
('19093', '19500'),
('19095', '19170'),
('19096', '19150'),
('19097', '19320'),
('19098', '19150'),
('19099', '19500'),
('19100', '19700'),
('19101', '19150'),
('19102', '19160'),
('19103', '19340'),
('19105', '19190'),
('19106', '19550'),
('19108', '19340'),
('19110', '19160'),
('19111', '19550'),
('19112', '19170'),
('19113', '19160'),
('19114', '19200'),
('19115', '19500'),
('19116', '19120'),
('19118', '19470'),
('19119', '19500'),
('19122', '19470'),
('19123', '19360'),
('19125', '19320'),
('19126', '19500'),
('19127', '19150'),
('19128', '19200'),
('19130', '19250'),
('19132', '19190'),
('19133', '19430'),
('19134', '19340'),
('19135', '19200'),
('19136', '19250'),
('19137', '19800'),
('19138', '19500'),
('19139', '19290'),
('19140', '19400'),
('19141', '19340'),
('19142', '19110'),
('19143', '19300'),
('19145', '19300'),
('19146', '19460'),
('19148', '19160'),
('19149', '19380'),
('19150', '19500'),
('19152', '19120'),
('19155', '19390'),
('19156', '19190'),
('19157', '19160'),
('19158', '19150'),
('19159', '19300'),
('19160', '19170'),
('19163', '19190'),
('19164', '19290'),
('19165', '19260'),
('19167', '19200'),
('19168', '19170'),
('19169', '19120'),
('19170', '19120'),
('19171', '19430'),
('19172', '19260'),
('19173', '19220'),
('19174', '19320'),
('19175', '19160'),
('19176', '19300'),
('19179', '19500'),
('19180', '19200'),
('19181', '19390'),
('19183', '19320'),
('19184', '19500'),
('19185', '19150'),
('19186', '19380'),
('19189', '19430'),
('19190', '19200'),
('19192', '19380'),
('19193', '19220'),
('19194', '19700'),
('19199', '19200'),
('19200', '19160'),
('19201', '19200'),
('19203', '19490'),
('19204', '19200'),
('19205', '19220'),
('19206', '19290'),
('19207', '19330'),
('19208', '19550'),
('19209', '19170'),
('19210', '19160'),
('19211', '19560'),
('19212', '19400'),
('19213', '19700'),
('19214', '19220'),
('19215', '19430'),
('19217', '19500'),
('19218', '19110'),
('19219', '19160'),
('19220', '19150'),
('19221', '19400'),
('19222', '19320'),
('19225', '19320'),
('19226', '19170'),
('19227', '19330'),
('19228', '19160'),
('19231', '19320'),
('19232', '19200'),
('19233', '19200'),
('19235', '19150'),
('19236', '19800'),
('19237', '19220'),
('19238', '19290'),
('19240', '19700'),
('19241', '19290'),
('19244', '19250'),
('19245', '19380'),
('19247', '19200'),
('19249', '19300'),
('19251', '19800'),
('19252', '19110'),
('19255', '19700'),
('19256', '19160'),
('19257', '19190'),
('19258', '19220'),
('19259', '19430'),
('19260', '19120'),
('19261', '19290'),
('19262', '19370'),
('19263', '19300'),
('19264', '19550'),
('19265', '19170'),
('19266', '19200'),
('19268', '19170'),
('19269', '19260'),
('19271', '19120'),
('19272', '19000'),
('19273', '19500'),
('19275', '19200'),
('19277', '19200'),
('19280', '19120'),
('19281', '19260'),
('19282', '19360'),
('19283', '19200'),
('19284', '19170'),
('19287', '19800'),
('20001', '20167'),
('20002', '20270'),
('20003', '20244'),
('20004', '20000'),
('20005', '20212'),
('20006', '20167'),
('20007', '20224'),
('20008', '20128'),
('20009', '20270'),
('20010', '20220'),
('20011', '20112'),
('20012', '20251'),
('20013', '20212'),
('20014', '20151'),
('20015', '20272'),
('20016', '20270'),
('20017', '20167'),
('20018', '20110'),
('20019', '20160'),
('20020', '20220'),
('20022', '20151'),
('20023', '20276'),
('20024', '20116'),
('20025', '20225'),
('20027', '20121'),
('20028', '20160'),
('20029', '20253'),
('20030', '20228'),
('20031', '20119'),
('20033', '20200'),
('20034', '20226'),
('20036', '20252'),
('20037', '20620'),
('20038', '20100'),
('20039', '20235'),
('20040', '20136'),
('20041', '20169'),
('20042', '20290'),
('20043', '20222'),
('20045', '20212'),
('20046', '20228'),
('20047', '20224'),
('20048', '20111'),
('20049', '20214'),
('20050', '20260'),
('20051', '20244'),
('20052', '20229'),
('20053', '20270'),
('20054', '20290'),
('20055', '20252'),
('20056', '20142'),
('20058', '20217'),
('20059', '20235'),
('20060', '20151'),
('20061', '20170'),
('20062', '20133'),
('20065', '20130'),
('20066', '20164'),
('20067', '20229'),
('20068', '20244'),
('20069', '20237'),
('20070', '20111'),
('20071', '20140'),
('20072', '20215'),
('20074', '20250'),
('20075', '20270'),
('20080', '20218'),
('20081', '20218'),
('20082', '20218'),
('20083', '20236'),
('20084', '20225'),
('20085', '20117'),
('20086', '20238'),
('20087', '20221'),
('20088', '20230'),
('20089', '20134'),
('20090', '20160'),
('20092', '20135'),
('20093', '20220'),
('20094', '20168'),
('20095', '20224'),
('20096', '20250'),
('20097', '20226'),
('20099', '20148'),
('20100', '20126'),
('20101', '20237'),
('20102', '20290'),
('20105', '20212'),
('20106', '20244'),
('20107', '20275'),
('20108', '20126'),
('20109', '20253'),
('20110', '20212'),
('20111', '20234'),
('20112', '20225'),
('20113', '20237'),
('20114', '20114'),
('20115', '20100'),
('20116', '20212'),
('20117', '20190'),
('20118', '20143'),
('20119', '20157'),
('20120', '20600'),
('20121', '20245'),
('20122', '20218'),
('20123', '20240'),
('20124', '20227'),
('20125', '20237'),
('20126', '20251'),
('20127', '20100'),
('20128', '20100'),
('20129', '20100'),
('20131', '20160'),
('20132', '20128'),
('20136', '20218'),
('20137', '20244'),
('20138', '20225'),
('20139', '20137'),
('20140', '20252'),
('20141', '20160'),
('20142', '20170'),
('20144', '20139'),
('20147', '20224'),
('20148', '20290'),
('20150', '20260'),
('20152', '20228'),
('20153', '20245'),
('20154', '20141'),
('20155', '20270'),
('20156', '20259'),
('20157', '20212'),
('20158', '20112'),
('20159', '20287'),
('20161', '20270'),
('20162', '20218'),
('20165', '20214'),
('20166', '20290'),
('20167', '20214'),
('20168', '20220'),
('20169', '20218'),
('20170', '20238'),
('20171', '20219'),
('20172', '20239'),
('20173', '20225'),
('20174', '20160'),
('20175', '20225'),
('20176', '20229'),
('20177', '20219'),
('20178', '20217'),
('20179', '20234'),
('20180', '20211'),
('20181', '20117'),
('20182', '20226'),
('20183', '20217'),
('20184', '20217'),
('20185', '20232'),
('20186', '20140'),
('20189', '20113'),
('20191', '20112'),
('20192', '20290'),
('20193', '20236'),
('20194', '20234'),
('20195', '20290'),
('20196', '20125'),
('20197', '20147'),
('20198', '20150'),
('20199', '20226'),
('20200', '20134'),
('20202', '20229'),
('20203', '20147'),
('20205', '20253'),
('20208', '20234'),
('20209', '20167'),
('20212', '20115'),
('20213', '20272'),
('20214', '20215'),
('20216', '20234'),
('20217', '20229'),
('20219', '20229'),
('20223', '20218'),
('20228', '20166'),
('20229', '20242'),
('20230', '20258'),
('20231', '20220'),
('20233', '20228'),
('20234', '20234'),
('20235', '20259'),
('20240', '20125'),
('20243', '20229'),
('20244', '20218'),
('20245', '20215'),
('20246', '20237'),
('20249', '20110'),
('20252', '20264'),
('20253', '20142'),
('20254', '20122'),
('20255', '20237'),
('20256', '20229'),
('20257', '20258'),
('20258', '20160'),
('20259', '20121'),
('20260', '20250'),
('20261', '20247'),
('20262', '20121'),
('20263', '20219'),
('20264', '20244'),
('20265', '20239'),
('20266', '20121'),
('20267', '20218'),
('20268', '20134'),
('20272', '20100'),
('20273', '20264'),
('20274', '20290'),
('20275', '20212'),
('20279', '20147'),
('20280', '20215'),
('20281', '20233'),
('20282', '20125'),
('20283', '20240'),
('20284', '20140'),
('20285', '20152'),
('20287', '20258'),
('20288', '20146'),
('20289', '20250'),
('20290', '20226'),
('20291', '20229'),
('20319', '20230'),
('20320', '20270'),
('20321', '20234'),
('20322', '20134'),
('20323', '20167'),
('20324', '20163'),
('20326', '20117'),
('20327', '20248'),
('20328', '20270'),
('20329', '20250'),
('20330', '20133'),
('20331', '20128'),
('20332', '20218'),
('20333', '20273'),
('20339', '20259'),
('20341', '20231'),
('20342', '20240'),
('20343', '20215'),
('20344', '20229'),
('20345', '20172'),
('20346', '20215'),
('20347', '20242'),
('20348', '20160'),
('20349', '20110'),
('20350', '20290'),
('20351', '20167'),
('20354', '20219'),
('20355', '20290'),
('20356', '20272'),
('20357', '20116'),
('20358', '20173'),
('20359', '20132'),
('20360', '20190'),
('20361', '20214'),
('20362', '20124'),
('20363', '20112'),
('20364', '20272'),
('20366', '20240'),
('23001', '23150'),
('23003', '23200'),
('23004', '23000'),
('23005', '23700'),
('23006', '23210'),
('23007', '23480'),
('23008', '23200'),
('23009', '23170'),
('23010', '23210'),
('23011', '23210'),
('23012', '23400'),
('23013', '23700'),
('23014', '23210'),
('23016', '23120'),
('23017', '23260'),
('23019', '23260'),
('23020', '23190'),
('23021', '23210'),
('23024', '23200'),
('23027', '23400'),
('23028', '23200'),
('23030', '23400'),
('23033', '23000'),
('23034', '23700'),
('23035', '23170'),
('23036', '23320'),
('23037', '23700'),
('23039', '23800'),
('23042', '23210'),
('23043', '23480'),
('23045', '23170'),
('23046', '23110'),
('23047', '23240'),
('23048', '23190'),
('23051', '23250'),
('23052', '23000'),
('23053', '23700'),
('23054', '23700'),
('23055', '23700'),
('23056', '23430'),
('23058', '23130'),
('23059', '23200'),
('23060', '23250'),
('23061', '23130'),
('23063', '23500'),
('23065', '23800'),
('23066', '23700'),
('23067', '23100'),
('23069', '23260'),
('23071', '23500'),
('23073', '23700'),
('23074', '23480'),
('23075', '23800'),
('23076', '23110'),
('23077', '23340'),
('23078', '23400'),
('23079', '23500'),
('23080', '23100'),
('23081', '23260'),
('23082', '23320'),
('23083', '23110'),
('23086', '23480'),
('23088', '23320'),
('23090', '23340'),
('23091', '23500'),
('23095', '23240'),
('23096', '23000'),
('23097', '23130'),
('23099', '23250'),
('23103', '23800'),
('23105', '23150'),
('23106', '23170'),
('23107', '23150'),
('23110', '23700'),
('23111', '23240'),
('23113', '23190'),
('23114', '23170'),
('23115', '23260'),
('23116', '23700'),
('23117', '23800'),
('23118', '23150'),
('23119', '23260'),
('23122', '23400'),
('23123', '23700'),
('23124', '23210'),
('23125', '23100'),
('23126', '23400'),
('23127', '23190'),
('23128', '23150'),
('23129', '23260'),
('23131', '23420'),
('23132', '23320'),
('23133', '23400'),
('23134', '23460'),
('23137', '23210'),
('23138', '23150'),
('23140', '23200'),
('23141', '23800'),
('23142', '23200'),
('23144', '23500'),
('23145', '23170'),
('23150', '23000'),
('23151', '23130'),
('23152', '23130'),
('23155', '23250'),
('23156', '23260'),
('23157', '23250'),
('23158', '23500'),
('23159', '23130'),
('23160', '23110'),
('23164', '23700'),
('23165', '23460'),
('23166', '23800'),
('23167', '23110'),
('23168', '23250'),
('23169', '23000'),
('23170', '23000'),
('23171', '23700'),
('23172', '23190'),
('23173', '23250'),
('23175', '23150'),
('23178', '23260'),
('23179', '23200'),
('23180', '23200'),
('23181', '23400'),
('23182', '23200'),
('23183', '23480'),
('23184', '23260'),
('23185', '23130'),
('23186', '23000'),
('23187', '23130'),
('23189', '23400'),
('23190', '23190'),
('23191', '23000'),
('23192', '23290'),
('23193', '23000'),
('23194', '23500'),
('23195', '23000'),
('23196', '23500'),
('23197', '23250'),
('23198', '23500'),
('23200', '23430'),
('23201', '23150'),
('23202', '23250'),
('23203', '23110'),
('23204', '23130'),
('23205', '23400'),
('23206', '23000'),
('23208', '23000'),
('23209', '23130'),
('23210', '23200'),
('23211', '23200'),
('23212', '23460'),
('23214', '23150'),
('23215', '23100'),
('23216', '23460'),
('23217', '23430'),
('23218', '23260'),
('23220', '23200'),
('23221', '23100'),
('23222', '23480'),
('23223', '23400'),
('23224', '23100'),
('23225', '23260'),
('23226', '23260'),
('23227', '23400'),
('23228', '23200'),
('23229', '23150'),
('23230', '23430'),
('23231', '23290'),
('23232', '23460'),
('23234', '23110'),
('23236', '23240'),
('23237', '23400'),
('23238', '23500'),
('23241', '23190'),
('23242', '23320'),
('23244', '23800'),
('23245', '23000'),
('23246', '23480'),
('23247', '23320'),
('23248', '23000'),
('23249', '23460'),
('23250', '23150'),
('23251', '23170'),
('23253', '23250'),
('23257', '23120'),
('23259', '23170'),
('23260', '23250'),
('23261', '23170'),
('23263', '23800'),
('23264', '23340'),
('23265', '23260'),
('23266', '23260'),
('25004', '25310'),
('25012', '25300'),
('25015', '25330'),
('25016', '25330'),
('25017', '25330'),
('25024', '25300'),
('25025', '25520'),
('25026', '25270'),
('25028', '25580'),
('25029', '25520'),
('25039', '25690'),
('25041', '25560'),
('25042', '25210'),
('25046', '25380'),
('25049', '25470'),
('25050', '25500'),
('25051', '25380'),
('25060', '25520'),
('25061', '25190'),
('25062', '25210'),
('25063', '25310'),
('25070', '25330'),
('25074', '25210'),
('25075', '25560'),
('25077', '25210'),
('25079', '25560'),
('25085', '25560'),
('25091', '25120'),
('25095', '25380'),
('25096', '25240'),
('25099', '25520'),
('25100', '25560'),
('25102', '25470'),
('25108', '25120'),
('25110', '25300'),
('25113', '25380'),
('25114', '25190'),
('25120', '25330'),
('25121', '25240'),
('25122', '25270'),
('25124', '25470'),
('25125', '25380'),
('25127', '25140'),
('25128', '25580'),
('25131', '25240'),
('25138', '25190'),
('25139', '25650'),
('25142', '25240'),
('25148', '25500'),
('25155', '25330'),
('25157', '25300'),
('25160', '25500'),
('25161', '25390'),
('25173', '25380'),
('25174', '25470'),
('25176', '25560'),
('25179', '25240'),
('25180', '25270'),
('25192', '25190'),
('25193', '25450'),
('25194', '25310'),
('25199', '25330'),
('25201', '25300'),
('25202', '25560'),
('25203', '25510'),
('25204', '25300'),
('25208', '25580'),
('25211', '25580'),
('25213', '25140'),
('25222', '25580'),
('25223', '25330'),
('25229', '25520'),
('25233', '25580'),
('25234', '25470'),
('25236', '25330'),
('25238', '25470'),
('25239', '25190'),
('25240', '25500'),
('25241', '25330'),
('25243', '25690'),
('25244', '25190'),
('25248', '25210'),
('25252', '25370'),
('25254', '25300'),
('25255', '25140'),
('25256', '25140'),
('25259', '25560'),
('25261', '25190'),
('25262', '25390'),
('25263', '25240'),
('25268', '25510'),
('25270', '25270'),
('25271', '25650'),
('25274', '25310'),
('25275', '25190'),
('25280', '25470'),
('25282', '25520'),
('25285', '25570'),
('25286', '25210'),
('25288', '25390'),
('25289', '25510'),
('25290', '25380'),
('25293', '25300'),
('25295', '25160'),
('25296', '25790'),
('25300', '25580'),
('25301', '25390'),
('25302', '25580'),
('25303', '25650'),
('25304', '25310'),
('25307', '25370'),
('25308', '25370'),
('25309', '25300'),
('25314', '25470'),
('25318', '25370'),
('25319', '25270'),
('25320', '25160'),
('25321', '25130'),
('25329', '25210'),
('25331', '25580'),
('25333', '25510'),
('25334', '25270'),
('25335', '25190'),
('25338', '25330'),
('25339', '25930'),
('25342', '25690'),
('25343', '25690'),
('25344', '25380'),
('25346', '25330'),
('25347', '25650'),
('25348', '25370'),
('25349', '25390'),
('25351', '25210'),
('25356', '25120'),
('25357', '25650'),
('25359', '25330'),
('25361', '25160'),
('25362', '25160'),
('25366', '25120'),
('25373', '25210'),
('25378', '25310'),
('25380', '25370'),
('25386', '25190'),
('25387', '25190'),
('25389', '25210'),
('25390', '25650'),
('25391', '25210'),
('25392', '25120'),
('25393', '25190'),
('25398', '25650'),
('25402', '25190'),
('25403', '25500'),
('25404', '25270'),
('25405', '25160'),
('25411', '25500'),
('25413', '25240'),
('25415', '25920'),
('25420', '25330'),
('25421', '25210'),
('25424', '25580'),
('25425', '25500'),
('25426', '25190'),
('25432', '25390'),
('25433', '25120'),
('25440', '25520'),
('25442', '25160'),
('25447', '25690'),
('25449', '25190'),
('25451', '25240'),
('25452', '25310'),
('25453', '25510'),
('25456', '25210'),
('25457', '25390'),
('25458', '25470'),
('25459', '25160'),
('25462', '25300'),
('25464', '25240'),
('25471', '25380'),
('25480', '25580'),
('25483', '25240'),
('25486', '25160'),
('25487', '25520'),
('25489', '25330'),
('25493', '25560'),
('25494', '25370'),
('25497', '25310'),
('25501', '25240'),
('25503', '25190'),
('25504', '25380'),
('25512', '25210'),
('25513', '25270'),
('25514', '25370'),
('25515', '25300'),
('25517', '25520'),
('25519', '25190'),
('25522', '25210'),
('25525', '25160'),
('25533', '25330'),
('25534', '25240'),
('25535', '25580'),
('25541', '25270'),
('25545', '25330'),
('25548', '25190'),
('25549', '25520'),
('25550', '25510'),
('25551', '25190'),
('25554', '25380'),
('25559', '25470'),
('25562', '25310'),
('25565', '25370'),
('25571', '25470'),
('25573', '25470'),
('25583', '25190'),
('25584', '25190'),
('25585', '25580'),
('25588', '25380'),
('25589', '25380'),
('25591', '25190'),
('25592', '25160'),
('25600', '25390'),
('25605', '25580'),
('25609', '25300'),
('25610', '25580'),
('25615', '25310'),
('25617', '25190'),
('25619', '25240'),
('25620', '25650'),
('25621', '25270'),
('25625', '25510'),
('25627', '25270'),
('25630', '25580'),
('25634', '25300'),
('26001', '26150'),
('26003', '26770'),
('26006', '26400'),
('26011', '26400'),
('26012', '26470'),
('26013', '26110'),
('26015', '26340'),
('26016', '26110'),
('26017', '26340'),
('26018', '26570'),
('26019', '26340'),
('26020', '26400'),
('26021', '26400'),
('26022', '26560'),
('26025', '26310'),
('26026', '26570'),
('26027', '26150'),
('26030', '26310'),
('26035', '26400'),
('26036', '26310'),
('26040', '26310'),
('26043', '26170'),
('26046', '26110'),
('26047', '26470'),
('26048', '26170'),
('26050', '26110'),
('26051', '26460'),
('26055', '26410'),
('26056', '26460'),
('26059', '26190'),
('26060', '26460'),
('26062', '26340'),
('26063', '26170'),
('26065', '26400'),
('26066', '26190'),
('26067', '26340'),
('26069', '26150'),
('26074', '26420'),
('26075', '26470'),
('26076', '26310'),
('26080', '26340'),
('26082', '26110'),
('26086', '26410'),
('26089', '26110'),
('26090', '26340'),
('26091', '26510'),
('26098', '26400'),
('26101', '26220'),
('26103', '26110'),
('26104', '26510'),
('26105', '26510');
INSERT INTO `ods_communes_crea` (`occ_code_insee`, `occ_code_postal`) VALUES
('26108', '26400'),
('26111', '26460'),
('26112', '26110'),
('26113', '26150'),
('26114', '26220'),
('26115', '26400'),
('26117', '26190'),
('26122', '26340'),
('26123', '26470'),
('26125', '26400'),
('26126', '26560'),
('26127', '26170'),
('26128', '26400'),
('26130', '26110'),
('26135', '26570'),
('26136', '26310'),
('26137', '26400'),
('26141', '26400'),
('26142', '26410'),
('26144', '26400'),
('26147', '26470'),
('26150', '26560'),
('26152', '26310'),
('26153', '26560'),
('26154', '26560'),
('26158', '26510'),
('26159', '26150'),
('26161', '26510'),
('26163', '26190'),
('26164', '26310'),
('26167', '26310'),
('26168', '26620'),
('26175', '26150'),
('26178', '26410'),
('26180', '26170'),
('26181', '26560'),
('26182', '26110'),
('26183', '26400'),
('26186', '26310'),
('26187', '26150'),
('26188', '26170'),
('26189', '26170'),
('26190', '26110'),
('26192', '26770'),
('26193', '26570'),
('26195', '26400'),
('26199', '26510'),
('26200', '26560'),
('26201', '26170'),
('26202', '26220'),
('26204', '26310'),
('26205', '26150'),
('26209', '26510'),
('26214', '26460'),
('26215', '26470'),
('26217', '26190'),
('26220', '26110'),
('26221', '26400'),
('26222', '26220'),
('26223', '26190'),
('26226', '26770'),
('26227', '26510'),
('26228', '26340'),
('26229', '26170'),
('26233', '26110'),
('26234', '26400'),
('26236', '26170'),
('26238', '26110'),
('26239', '26170'),
('26240', '26400'),
('26241', '26460'),
('26242', '26170'),
('26244', '26110'),
('26245', '26470'),
('26246', '26150'),
('26248', '26150'),
('26253', '26310'),
('26254', '26340'),
('26255', '26310'),
('26256', '26170'),
('26262', '26310'),
('26263', '26570'),
('26264', '26510'),
('26266', '26340'),
('26267', '26170'),
('26269', '26110'),
('26270', '26190'),
('26274', '26340'),
('26276', '26770'),
('26277', '26400'),
('26278', '26170'),
('26279', '26170'),
('26282', '26150'),
('26283', '26470'),
('26285', '26770'),
('26286', '26510'),
('26288', '26510'),
('26289', '26340'),
('26290', '26420'),
('26291', '26150'),
('26292', '26170'),
('26296', '26340'),
('26299', '26150'),
('26300', '26310'),
('26302', '26190'),
('26303', '26170'),
('26304', '26110'),
('26306', '26110'),
('26307', '26190'),
('26308', '26150'),
('26309', '26420'),
('26311', '26190'),
('26315', '26420'),
('26316', '26190'),
('26317', '26110'),
('26318', '26510'),
('26320', '26190'),
('26321', '26340'),
('26322', '26770'),
('26327', '26410'),
('26328', '26340'),
('26329', '26110'),
('26331', '26190'),
('26335', '26770'),
('26336', '26400'),
('26340', '26560'),
('26344', '26400'),
('26346', '26400'),
('26348', '26770'),
('26350', '26220'),
('26351', '26460'),
('26354', '26410'),
('26356', '26460'),
('26359', '26150'),
('26361', '26310'),
('26363', '26110'),
('26364', '26420'),
('26365', '26400'),
('26367', '26110'),
('26368', '26340'),
('26369', '26510'),
('26370', '26170'),
('26371', '26340'),
('26372', '26560'),
('26373', '26220'),
('26374', '05700'),
('26375', '26560'),
('26376', '26510'),
('26377', '26110'),
('26378', '26470'),
('30009', '30770'),
('30015', '30120'),
('30016', '30120'),
('30017', '30770'),
('30022', '30450'),
('30024', '30120'),
('30025', '30770'),
('30026', '30120'),
('30038', '30120'),
('30040', '30770'),
('30044', '30450'),
('30052', '30120'),
('30064', '30770'),
('30074', '30750'),
('30079', '30450'),
('30080', '30530'),
('30090', '30450'),
('30105', '30750'),
('30130', '30450'),
('30139', '30750'),
('30153', '30450'),
('30154', '30120'),
('30157', '30120'),
('30170', '30120'),
('30176', '30120'),
('30190', '30570'),
('30199', '30120'),
('30201', '30450'),
('30203', '30530'),
('30213', '30750'),
('30219', '30120'),
('30220', '30440'),
('30229', '30570'),
('30231', '30940'),
('30238', '30440'),
('30272', '30440'),
('30280', '30440'),
('30283', '30440'),
('30296', '30440'),
('30297', '30750'),
('30316', '30450'),
('30325', '30440'),
('30332', '30750'),
('30339', '30570'),
('30345', '30530'),
('30350', '30120'),
('30353', '30770'),
('31009', '31510'),
('31010', '31110'),
('31011', '31160'),
('31012', '31160'),
('31014', '31160'),
('31015', '31440'),
('31017', '31440'),
('31019', '31110'),
('31020', '31160'),
('31030', '31260'),
('31040', '31440'),
('31041', '31510'),
('31042', '31110'),
('31045', '31510'),
('31046', '31440'),
('31059', '31260'),
('31064', '31110'),
('31067', '31440'),
('31068', '31110'),
('31081', '31110'),
('31085', '31440'),
('31092', '31440'),
('31095', '31160'),
('31110', '31260'),
('31112', '31260'),
('31114', '31160'),
('31123', '31110'),
('31125', '31110'),
('31127', '31110'),
('31129', '31110'),
('31131', '31160'),
('31132', '31440'),
('31133', '31110'),
('31139', '31440'),
('31140', '31160'),
('31142', '31110'),
('31143', '31510'),
('31144', '31440'),
('31146', '31110'),
('31155', '31160'),
('31167', '31160'),
('31174', '31160'),
('31176', '31440'),
('31177', '31440'),
('31183', '31260'),
('31190', '31440'),
('31191', '31160'),
('31195', '31260'),
('31199', '31440'),
('31200', '31510'),
('31207', '31510'),
('31208', '31160'),
('31213', '31110'),
('31217', '31510'),
('31221', '31110'),
('31222', '31110'),
('31235', '31440'),
('31236', '31160'),
('31237', '31260'),
('31241', '31160'),
('31242', '31110'),
('31244', '31110'),
('31245', '31160'),
('31255', '31510'),
('31290', '31440'),
('31294', '31160'),
('31298', '31440'),
('31306', '31510'),
('31308', '31510'),
('31313', '31510'),
('31315', '31260'),
('31316', '31440'),
('31321', '31260'),
('31335', '31110'),
('31336', '31260'),
('31337', '31440'),
('31342', '31160'),
('31348', '31160'),
('31357', '31160'),
('31360', '31110'),
('31369', '31510'),
('31372', '31260'),
('31376', '31260'),
('31391', '31260'),
('31394', '31110'),
('31404', '31110'),
('31405', '31510'),
('31408', '31510'),
('31431', '31160'),
('31432', '31110'),
('31434', '31110'),
('31447', '31160'),
('31451', '31250'),
('31461', '31160'),
('31465', '31110'),
('31470', '31110'),
('31471', '31440'),
('31472', '31510'),
('31500', '31110'),
('31508', '31110'),
('31509', '31510'),
('31521', '31260'),
('31523', '31260'),
('31524', '31110'),
('31535', '31510'),
('31542', '31510'),
('31544', '31160'),
('31548', '31440'),
('31549', '31110'),
('31550', '31160'),
('31554', '31260'),
('31559', '31110'),
('31562', '31260'),
('31564', '31510'),
('31569', '31250'),
('31590', '31440'),
('31591', '31260'),
('34004', '34210'),
('34005', '34190'),
('34006', '34210'),
('34007', '34210'),
('34010', '34150'),
('34011', '34150'),
('34012', '34380'),
('34015', '34360'),
('34019', '34260'),
('34020', '34210'),
('34021', '34360'),
('34026', '34210'),
('34030', '34360'),
('34034', '34220'),
('34035', '34150'),
('34036', '34700'),
('34038', '34260'),
('34040', '34650'),
('34042', '34190'),
('34046', '34330'),
('34049', '34260'),
('34054', '34210'),
('34055', '34610'),
('34059', '34210'),
('34060', '34380'),
('34064', '34520'),
('34067', '34190'),
('34070', '34360'),
('34071', '34260'),
('34075', '34210'),
('34080', '34390'),
('34086', '34220'),
('34091', '34520'),
('34093', '34650'),
('34097', '34210'),
('34098', '34210'),
('34099', '34190'),
('34100', '34360'),
('34106', '34700'),
('34107', '34330'),
('34111', '34190'),
('34114', '34150'),
('34115', '34190'),
('34117', '34260'),
('34121', '34650'),
('34125', '34150'),
('34128', '34190'),
('34132', '34700'),
('34133', '34700'),
('34141', '34210'),
('34142', '34700'),
('34144', '34650'),
('34152', '34380'),
('34158', '34210'),
('34160', '34390'),
('34171', '34190'),
('34173', '34150'),
('34174', '34190'),
('34185', '34380'),
('34187', '34390'),
('34188', '34700'),
('34189', '34210'),
('34190', '34210'),
('34193', '34360'),
('34195', '34380'),
('34196', '34700'),
('34201', '34360'),
('34205', '34700'),
('34212', '34700'),
('34218', '34360'),
('34219', '34390'),
('34220', '34700'),
('34221', '34150'),
('34228', '34220'),
('34229', '34220'),
('34230', '34520'),
('34231', '34650'),
('34233', '34650'),
('34235', '34610'),
('34236', '34380'),
('34238', '34190'),
('34243', '34190'),
('34245', '34360'),
('34250', '34390'),
('34251', '34700'),
('34252', '34260'),
('34253', '34520'),
('34257', '34610'),
('34260', '34610'),
('34261', '34150'),
('34264', '34380'),
('34267', '34150'),
('34268', '34700'),
('34269', '34360'),
('34271', '34390'),
('34273', '34390'),
('34274', '34380'),
('34277', '34520'),
('34278', '34520'),
('34283', '34520'),
('34284', '34220'),
('34286', '34700'),
('34291', '34390'),
('34293', '34330'),
('34302', '34210'),
('34303', '34520'),
('34304', '34700'),
('34305', '34330'),
('34306', '34700'),
('34312', '34260'),
('34316', '34700'),
('34317', '34520'),
('34326', '34220'),
('34331', '34220'),
('34334', '34390'),
('34339', '34360'),
('34342', '34380'),
('34343', '34380'),
('38001', '38490'),
('38002', '38190'),
('38004', '38470'),
('38005', '38114'),
('38006', '38580'),
('38008', '38970'),
('38012', '38490'),
('38013', '38140'),
('38018', '38680'),
('38020', '38142'),
('38021', '38880'),
('38023', '38650'),
('38027', '38530'),
('38028', '38490'),
('38030', '38140'),
('38031', '38970'),
('38033', '38470'),
('38036', '38160'),
('38039', '38190'),
('38040', '38142'),
('38041', '38160'),
('38045', '38330'),
('38052', '38520'),
('38057', '38320'),
('38059', '38320'),
('38061', '38500'),
('38062', '38530'),
('38068', '38800'),
('38070', '38190'),
('38071', '38560'),
('38073', '38740'),
('38074', '38470'),
('38075', '38530'),
('38078', '38580'),
('38080', '38490'),
('38084', '38140'),
('38086', '38470'),
('38090', '38650'),
('38092', '38680'),
('38095', '38160'),
('38099', '38160'),
('38100', '38570'),
('38103', '38930'),
('38104', '38490'),
('38106', '38220'),
('38108', '38680'),
('38111', '38640'),
('38112', '38142'),
('38113', '38930'),
('38115', '38650'),
('38116', '38350'),
('38117', '38470'),
('38120', '38190'),
('38125', '38710'),
('38126', '38700'),
('38127', '38710'),
('38128', '38970'),
('38129', '38250'),
('38132', '38970'),
('38133', '38500'),
('38137', '38210'),
('38145', '38160'),
('38150', '38420'),
('38151', '38130'),
('38153', '38360'),
('38154', '38740'),
('38155', '38380'),
('38158', '38320'),
('38163', '38580'),
('38165', '38490'),
('38166', '38530'),
('38169', '38600'),
('38170', '38120'),
('38173', '38142'),
('38175', '38190'),
('38177', '38520'),
('38179', '38610'),
('38181', '38570'),
('38183', '38490'),
('38185', '38000'),
('38186', '38650'),
('38187', '38450'),
('38188', '38320'),
('38191', '38750'),
('38192', '38570'),
('38194', '38140'),
('38195', '38160'),
('38200', '38560'),
('38203', '38220'),
('38204', '38930'),
('38205', '38250'),
('38206', '38190'),
('38207', '38350'),
('38208', '38710'),
('38212', '38220'),
('38214', '38660'),
('38216', '38470'),
('38217', '38350'),
('38222', '38620'),
('38224', '38350'),
('38225', '38112'),
('38226', '38710'),
('38228', '38620'),
('38229', '38240'),
('38235', '38450'),
('38236', '38380'),
('38237', '38142'),
('38239', '38430'),
('38241', '38970'),
('38242', '38650'),
('38243', '38930'),
('38245', '38160'),
('38248', '38210'),
('38249', '38330'),
('38252', '38220'),
('38253', '38860'),
('38254', '38770'),
('38256', '38620'),
('38258', '38120'),
('38262', '38570'),
('38263', '38210'),
('38264', '38350'),
('38265', '38770'),
('38266', '38770'),
('38268', '38580'),
('38269', '38350'),
('38270', '38140'),
('38271', '38420'),
('38272', '38160'),
('38273', '38350'),
('38275', '38470'),
('38277', '38450'),
('38278', '38470'),
('38279', '38220'),
('38280', '38144'),
('38281', '38360'),
('38283', '38350'),
('38285', '38520'),
('38286', '38520'),
('38289', '38114'),
('38296', '38490'),
('38299', '38970'),
('38301', '38930'),
('38302', '38740'),
('38303', '38570'),
('38304', '38119'),
('38306', '38580'),
('38309', '38320'),
('38310', '38210'),
('38312', '38340'),
('38313', '38350'),
('38314', '38530'),
('38315', '38480'),
('38317', '38800'),
('38319', '38680'),
('38321', '38710'),
('38322', '38680'),
('38323', '38480'),
('38325', '38120'),
('38326', '38350'),
('38328', '38950'),
('38329', '38970'),
('38330', '38470'),
('38331', '38140'),
('38332', '38140'),
('38333', '38680'),
('38334', '38420'),
('38337', '38140'),
('38338', '38210'),
('38342', '38650'),
('38343', '38480'),
('38345', '38470'),
('38350', '38190'),
('38354', '38480'),
('38355', '38650'),
('38356', '38680'),
('38357', '38490'),
('38359', '38160'),
('38360', '38160'),
('38361', '38350'),
('38362', '38960'),
('38364', '38220'),
('38366', '38710'),
('38367', '38660'),
('38368', '38140'),
('38370', '38840'),
('38372', '38620'),
('38373', '38500'),
('38375', '38520'),
('38376', '38380'),
('38382', '38120'),
('38383', '38960'),
('38386', '38620'),
('38388', '38450'),
('38390', '38470'),
('38391', '38650'),
('38394', '38840'),
('38395', '38660'),
('38396', '38350'),
('38397', '38330'),
('38398', '38480'),
('38400', '38430'),
('38402', '38220'),
('38403', '38710'),
('38404', '38420'),
('38405', '38134'),
('38407', '38134'),
('38409', '38680'),
('38410', '38840'),
('38412', '38380'),
('38413', '38350'),
('38414', '38970'),
('38416', '38160'),
('38417', '38660'),
('38418', '38660'),
('38419', '38930'),
('38420', '38480'),
('38421', '38400'),
('38422', '38410'),
('38423', '38950'),
('38424', '38930'),
('38426', '38530'),
('38428', '38350'),
('38429', '38650'),
('38430', '38190'),
('38431', '38330'),
('38432', '38500'),
('38433', '38250'),
('38434', '38490'),
('38435', '38660'),
('38436', '38760'),
('38437', '38140'),
('38438', '38650'),
('38439', '38830'),
('38442', '38380'),
('38443', '38160'),
('38444', '38350'),
('38445', '38220'),
('38446', '73670'),
('38450', '38210'),
('38453', '38160'),
('38454', '38160'),
('38456', '38710'),
('38460', '38620'),
('38462', '38119'),
('38463', '38160'),
('38466', '38660'),
('38469', '38970'),
('38470', '38350'),
('38471', '38700'),
('38472', '38700'),
('38474', '38360'),
('38478', '38220'),
('38485', '38170'),
('38486', '38180'),
('38489', '38350'),
('38492', '38650'),
('38495', '38840'),
('38497', '38350'),
('38499', '38350'),
('38500', '38470'),
('38501', '38570'),
('38503', '38660'),
('38504', '38570'),
('38511', '38660'),
('38513', '38650'),
('38514', '38710'),
('38516', '38700'),
('38517', '38210'),
('38518', '38740'),
('38521', '38350'),
('38522', '38740'),
('38523', '38470'),
('38524', '38760'),
('38526', '38470'),
('38527', '38114'),
('38528', '38410'),
('38529', '38410'),
('38531', '38620'),
('38533', '38610'),
('38534', '38520'),
('38538', '38420'),
('38540', '38113'),
('38545', '38450'),
('38547', '38190'),
('38548', '38250'),
('38549', '38520'),
('38550', '38114'),
('38551', '38520'),
('38552', '38119'),
('38559', '38470'),
('38562', '38220'),
('38563', '38500'),
('38564', '38620'),
('38565', '38340'),
('38566', '38210'),
('38567', '38410'),
('39004', '39110'),
('39006', '39110'),
('39009', '39110'),
('39015', '39300'),
('39020', '39250'),
('39032', '39200'),
('39038', '39130'),
('39046', '39310'),
('39047', '39400'),
('39052', '39150'),
('39053', '39250'),
('39055', '39250'),
('39058', '39130'),
('39059', '39220'),
('39061', '39130'),
('39063', '39130'),
('39068', '39370'),
('39070', '39300'),
('39072', '39110'),
('39083', '39250'),
('39084', '39110'),
('39085', '39250'),
('39091', '39150'),
('39097', '39300'),
('39102', '01590'),
('39103', '39110'),
('39105', '39300'),
('39106', '39260'),
('39107', '39130'),
('39108', '39250'),
('39109', '39130'),
('39113', '39360'),
('39115', '39150'),
('39118', '39130'),
('39120', '39300'),
('39122', '39130'),
('39126', '39150'),
('39129', '39150'),
('39130', '39150'),
('39131', '39150'),
('39133', '39110'),
('39143', '39130'),
('39147', '39110'),
('39151', '39370'),
('39153', '39300'),
('39154', '39130'),
('39155', '39110'),
('39156', '39130'),
('39157', '39200'),
('39161', '39250'),
('39165', '39300'),
('39174', '39200'),
('39175', '39260'),
('39178', '39300'),
('39179', '39260'),
('39183', '39300'),
('39184', '39260'),
('39186', '39170'),
('39187', '39250'),
('39192', '39130'),
('39201', '39130'),
('39202', '39110'),
('39203', '39250'),
('39208', '39150'),
('39210', '39300'),
('39213', '39250'),
('39214', '39250'),
('39216', '39130'),
('39221', '39250'),
('39227', '39520'),
('39228', '39460'),
('39230', '39130'),
('39232', '39150'),
('39237', '39250'),
('39239', '39130'),
('39240', '39130'),
('39248', '39110'),
('39254', '39250'),
('39258', '39150'),
('39265', '39130'),
('39267', '39110'),
('39268', '39110'),
('39269', '39360'),
('39271', '39150'),
('39274', '39310'),
('39275', '39310'),
('39277', '39300'),
('39278', '39130'),
('39280', '39360'),
('39281', '39300'),
('39282', '39250'),
('39283', '01590'),
('39286', '39170'),
('39289', '39260'),
('39291', '39110'),
('39292', '39300'),
('39293', '39170'),
('39294', '39400'),
('39297', '39400'),
('39298', '39250'),
('39301', '39300'),
('39307', '39260'),
('39313', '39130'),
('39315', '39110'),
('39318', '39260'),
('39322', '39130'),
('39326', '39130'),
('39328', '39260'),
('39329', '39250'),
('39331', '39250'),
('39333', '39260'),
('39339', '39360'),
('39340', '39250'),
('39341', '39310'),
('39344', '39300'),
('39351', '39260'),
('39356', '39300'),
('39359', '39110'),
('39364', '39300'),
('39366', '39300'),
('39367', '39400'),
('39368', '39400'),
('39371', '39400'),
('39372', '39250'),
('39373', '39310'),
('39376', '39300'),
('39381', '39300'),
('39389', '39300'),
('39391', '39250'),
('39393', '39250'),
('39406', '39300'),
('39408', '39130'),
('39413', '39370'),
('39417', '39150'),
('39419', '39300'),
('39424', '39150'),
('39427', '39250'),
('39428', '39250'),
('39435', '39130'),
('39436', '39110'),
('39437', '39300'),
('39438', '39170'),
('39440', '39170'),
('39441', '39220'),
('39442', '39150'),
('39444', '39110'),
('39453', '39170'),
('39460', '39200'),
('39461', '39250'),
('39463', '39360'),
('39470', '39220'),
('39473', '39130'),
('39478', '39200'),
('39481', '39300'),
('39487', '39150'),
('39491', '39170'),
('39493', '39130'),
('39494', '39150'),
('39495', '39110'),
('39497', '39110'),
('39500', '39110'),
('39503', '39300'),
('39505', '39130'),
('39510', '39310'),
('39517', '39300'),
('39518', '39130'),
('39519', '39130'),
('39522', '39300'),
('39523', '39300'),
('39524', '39400'),
('39529', '39110'),
('39531', '39130'),
('39538', '39130'),
('39540', '39300'),
('39543', '39300'),
('39545', '39300'),
('39547', '39360'),
('39554', '39300'),
('39556', '39130'),
('39560', '39200'),
('39561', '39260'),
('39562', '39200'),
('39579', '39360'),
('39585', '39360'),
('39586', '39110'),
('42001', '42380'),
('42002', '42130'),
('42003', '42820'),
('42004', '42260'),
('42006', '42550'),
('42007', '42460'),
('42008', '42370'),
('42009', '42130'),
('42010', '42330'),
('42011', '42510'),
('42012', '42600'),
('42013', '42210'),
('42014', '42670'),
('42015', '42670'),
('42017', '42660'),
('42018', '42520'),
('42019', '42130'),
('42020', '42210'),
('42021', '42560'),
('42023', '42220'),
('42025', '42460'),
('42027', '42260'),
('42028', '42220'),
('42029', '42510'),
('42030', '42260'),
('42031', '42240'),
('42032', '42320'),
('42033', '42460'),
('42034', '42440'),
('42035', '42130'),
('42036', '42800'),
('42037', '42600'),
('42038', '42600'),
('42039', '42920'),
('42040', '42440'),
('42041', '42110'),
('42042', '42170'),
('42043', '42330'),
('42044', '42500'),
('42045', '42440'),
('42046', '42600'),
('42047', '42430'),
('42049', '42310'),
('42050', '42380'),
('42051', '42410'),
('42053', '42800'),
('42054', '42940'),
('42055', '42140'),
('42056', '42410'),
('42058', '42560'),
('42059', '42140'),
('42060', '42560'),
('42061', '42430'),
('42062', '42140'),
('42063', '42114'),
('42064', '42410'),
('42065', '42110'),
('42066', '42110'),
('42067', '42220'),
('42069', '42120'),
('42070', '42123'),
('42071', '42120'),
('42072', '42111'),
('42073', '42360'),
('42074', '42460'),
('42075', '42210'),
('42076', '42260'),
('42077', '42540'),
('42078', '42310'),
('42079', '42460'),
('42081', '42330'),
('42082', '42260'),
('42083', '42800'),
('42084', '42130'),
('42085', '42740'),
('42086', '42670'),
('42087', '42600'),
('42088', '42110'),
('42089', '42600'),
('42090', '42360'),
('42091', '42380'),
('42092', '42580'),
('42093', '42320'),
('42094', '42110'),
('42095', '42700'),
('42096', '42140'),
('42097', '42480'),
('42099', '42490'),
('42100', '42140'),
('42101', '42220'),
('42102', '42140'),
('42103', '42320'),
('42104', '42460'),
('42105', '42600'),
('42106', '42260'),
('42107', '42560'),
('42108', '42210'),
('42109', '42130'),
('42110', '42152'),
('42112', '42460'),
('42113', '42110'),
('42114', '42920'),
('42115', '42660'),
('42116', '42430'),
('42117', '42560'),
('42119', '42130'),
('42120', '42155'),
('42121', '42600'),
('42122', '42600'),
('42123', '42420'),
('42124', '42520'),
('42125', '42260'),
('42126', '42380'),
('42127', '42300'),
('42128', '42114'),
('42129', '42520'),
('42130', '42600'),
('42131', '42750'),
('42132', '42520'),
('42133', '42140'),
('42134', '42130'),
('42135', '42210'),
('42136', '42130'),
('42137', '42560'),
('42138', '42140'),
('42139', '42660'),
('42140', '42560'),
('42141', '42750'),
('42142', '42380'),
('42143', '42110'),
('42146', '42380'),
('42147', '42600'),
('42148', '42360'),
('42149', '42210'),
('42150', '42130'),
('42151', '42600'),
('42154', '42510'),
('42155', '42510'),
('42156', '42590'),
('42158', '42370'),
('42159', '42440'),
('42160', '42260'),
('42161', '42120'),
('42162', '42155'),
('42163', '42310'),
('42164', '42890'),
('42165', '42360'),
('42166', '42120'),
('42167', '42410'),
('42168', '42410'),
('42169', '42380'),
('42170', '42120'),
('42171', '42590'),
('42172', '42660'),
('42173', '42260'),
('42174', '42110'),
('42175', '42110'),
('42176', '42155'),
('42179', '42600'),
('42180', '42600'),
('42182', '42370'),
('42183', '42150'),
('42185', '42340'),
('42186', '42800'),
('42187', '42300'),
('42188', '42600'),
('42189', '42230'),
('42191', '42520'),
('42192', '42380'),
('42193', '42810'),
('42194', '42310'),
('42195', '42890'),
('42196', '42510'),
('42197', '42130'),
('42198', '42370'),
('42199', '42370'),
('42200', '42210'),
('42201', '42520'),
('42202', '42110'),
('42203', '42310'),
('42204', '42380'),
('42205', '42940'),
('42206', '42330'),
('42207', '42400'),
('42208', '42320'),
('42209', '42540'),
('42210', '42800'),
('42213', '42114'),
('42214', '42210'),
('42215', '42750'),
('42216', '42140'),
('42217', '42111'),
('42218', '42000'),
('42219', '42130'),
('42221', '42110'),
('42222', '42330'),
('42223', '42530'),
('42224', '42660'),
('42225', '42800'),
('42226', '42510'),
('42227', '42990'),
('42228', '42610'),
('42229', '42670'),
('42230', '42260'),
('42232', '42370'),
('42233', '42370'),
('42234', '42570'),
('42235', '42380'),
('42237', '42650'),
('42238', '42440'),
('42239', '42155'),
('42240', '42560'),
('42241', '42590'),
('42242', '42800'),
('42243', '42260'),
('42245', '42440'),
('42246', '42220'),
('42247', '42136'),
('42248', '42430'),
('42249', '42540'),
('42251', '42210'),
('42252', '42130'),
('42253', '42155'),
('42255', '42430'),
('42256', '42680'),
('42257', '42620'),
('42259', '42800'),
('42260', '42260'),
('42261', '42110'),
('42262', '42240'),
('42264', '42330'),
('42265', '42410'),
('42266', '42380'),
('42268', '42590'),
('42269', '42600'),
('42270', '42240'),
('42271', '42740'),
('42272', '42520'),
('42274', '42260'),
('42275', '42270'),
('42276', '42830'),
('42277', '42590'),
('42278', '42440'),
('42279', '42170'),
('42280', '42660'),
('42281', '42370'),
('42282', '42430'),
('42283', '42800'),
('42285', '42610'),
('42286', '42660'),
('42287', '42220'),
('42288', '42130'),
('42290', '42600'),
('42291', '42111'),
('42294', '42120'),
('42295', '42440'),
('42296', '42110'),
('42297', '42110'),
('42298', '42990'),
('42299', '42600'),
('42300', '42460'),
('42301', '42560'),
('42302', '42290'),
('42303', '42260'),
('42305', '42350'),
('42306', '42660'),
('42307', '42800'),
('42308', '42740'),
('42310', '42220'),
('42311', '42580'),
('42312', '42380'),
('42313', '42130'),
('42314', '42830'),
('42315', '42210'),
('42316', '42240'),
('42317', '42310'),
('42318', '42550'),
('42319', '42110'),
('42320', '42320'),
('42321', '42111'),
('42322', '42131'),
('42323', '42340'),
('42324', '42340'),
('42325', '42590'),
('42326', '42520'),
('42327', '42410'),
('42328', '42600'),
('42329', '42220'),
('42330', '42390'),
('42331', '42155'),
('42332', '42300'),
('42333', '42460'),
('42334', '42780'),
('42335', '42140'),
('42336', '42140'),
('42337', '42310'),
('42339', '42430'),
('43001', '43100'),
('43002', '43000'),
('43003', '43270'),
('43004', '43150'),
('43005', '43580'),
('43006', '43380'),
('43007', '43200'),
('43008', '43490'),
('43009', '43380'),
('43010', '43700'),
('43011', '43380'),
('43012', '43110'),
('43013', '43300'),
('43014', '43450'),
('43015', '43300'),
('43016', '43390'),
('43017', '43390'),
('43018', '43370'),
('43019', '43340'),
('43020', '43210'),
('43021', '43800'),
('43022', '43100'),
('43023', '43500'),
('43024', '43200'),
('43025', '43590'),
('43026', '43350'),
('43027', '43160'),
('43028', '43200'),
('43029', '43170'),
('43030', '43350'),
('43031', '43380'),
('43032', '43700'),
('43033', '43450'),
('43034', '43500'),
('43035', '43160'),
('43036', '43350'),
('43037', '43510'),
('43038', '43360'),
('43039', '43370'),
('43040', '43100'),
('43041', '43700'),
('43042', '43510'),
('43043', '43270'),
('43044', '43380'),
('43045', '43000'),
('43046', '43770'),
('43047', '43150'),
('43048', '43160'),
('43049', '43800'),
('43050', '43410'),
('43051', '43400'),
('43052', '43440'),
('43053', '43260'),
('43054', '43170'),
('43055', '43100'),
('43056', '43300'),
('43057', '43270'),
('43058', '43120'),
('43059', '43160'),
('43060', '43300'),
('43061', '43700'),
('43062', '43320'),
('43063', '43230'),
('43064', '43440'),
('43065', '43300'),
('43066', '43430'),
('43067', '43230'),
('43068', '43300'),
('43069', '43190'),
('43070', '43380'),
('43071', '43500'),
('43072', '43230'),
('43073', '43160'),
('43074', '43100'),
('43075', '43230'),
('43076', '43160'),
('43077', '43490'),
('43078', '43700'),
('43079', '43230'),
('43080', '43500'),
('43081', '43580'),
('43082', '43300'),
('43083', '43170'),
('43084', '43370'),
('43085', '43300'),
('43086', '43230'),
('43087', '43220'),
('43088', '43450'),
('43089', '43000'),
('43090', '43170'),
('43091', '43150'),
('43092', '43430'),
('43093', '43160'),
('43094', '43300'),
('43095', '43320'),
('43096', '43100'),
('43097', '43150'),
('43098', '43150'),
('43100', '43230'),
('43101', '43150'),
('43102', '43200'),
('43103', '43450'),
('43104', '43170'),
('43105', '43100'),
('43106', '43230'),
('43107', '43230'),
('43108', '43500'),
('43109', '43490'),
('43110', '43100'),
('43111', '43340'),
('43112', '43300'),
('43113', '43260'),
('43114', '43200'),
('43115', '43150'),
('43116', '43440'),
('43117', '43100'),
('43118', '43380'),
('43119', '43800'),
('43120', '43410'),
('43121', '43410'),
('43122', '43350'),
('43123', '43360'),
('43124', '43320'),
('43125', '43100'),
('43126', '43800'),
('43127', '43210'),
('43128', '43160'),
('43129', '43190'),
('43130', '43520'),
('43131', '43230'),
('43132', '43300'),
('43133', '43100'),
('43134', '43800'),
('43135', '43150'),
('43136', '43580'),
('43137', '43120'),
('43138', '43270'),
('43139', '43230'),
('43140', '43700'),
('43141', '43290'),
('43142', '43290'),
('43143', '43260'),
('43144', '43150'),
('43145', '43510'),
('43147', '43100'),
('43148', '43230'),
('43149', '43300'),
('43150', '43200'),
('43151', '43300'),
('43152', '43770'),
('43153', '43330'),
('43154', '43420'),
('43155', '43300'),
('43156', '43150'),
('43157', '43000'),
('43158', '43260'),
('43159', '43290'),
('43160', '43340'),
('43162', '43810'),
('43163', '43220'),
('43164', '43810'),
('43165', '43800'),
('43166', '43810'),
('43167', '43300'),
('43168', '43420'),
('43169', '43380'),
('43170', '43100'),
('43171', '43300'),
('43172', '43290'),
('43173', '43340'),
('43174', '43370'),
('43175', '43380'),
('43176', '43580'),
('43177', '43140'),
('43178', '43440'),
('43180', '43420'),
('43181', '43260'),
('43182', '43450'),
('43183', '43230'),
('43184', '43330'),
('43186', '43550'),
('43187', '43350'),
('43188', '43230'),
('43189', '43500'),
('43190', '43700'),
('43191', '43360'),
('43192', '43340'),
('43193', '43390'),
('43194', '43260'),
('43195', '43380'),
('43196', '43500'),
('43197', '43320'),
('43198', '43510'),
('43199', '43200'),
('43200', '43260'),
('43201', '43500'),
('43202', '43300'),
('43203', '43200'),
('43204', '43220'),
('43205', '43240'),
('43206', '43100'),
('43207', '43100'),
('43208', '43230'),
('43210', '43150'),
('43211', '43200'),
('43212', '43500'),
('43213', '43620'),
('43214', '43160'),
('43215', '43420'),
('43216', '43350'),
('43217', '43810'),
('43218', '43260'),
('43219', '43230'),
('43220', '43580'),
('43221', '43580'),
('43222', '43380'),
('43223', '43620'),
('43224', '43600'),
('43225', '43580'),
('43226', '43440'),
('43227', '43140'),
('43228', '43500'),
('43229', '43320'),
('43230', '43800'),
('43231', '43150'),
('43232', '43230'),
('43233', '43320'),
('43234', '43170'),
('43236', '43140'),
('43237', '43160'),
('43238', '43510'),
('43239', '43300'),
('43240', '43810'),
('43241', '43370'),
('43242', '43300'),
('43244', '43190'),
('43245', '43170'),
('43246', '43810'),
('43247', '43450'),
('43249', '43210'),
('43250', '43230'),
('43251', '43750'),
('43252', '43270'),
('43253', '43430'),
('43254', '43320'),
('43255', '43580'),
('43256', '43170'),
('43257', '43320'),
('43258', '43360'),
('43259', '43270'),
('43260', '43320'),
('43261', '43390'),
('43262', '43100'),
('43263', '43490'),
('43264', '43380'),
('43265', '43600'),
('43267', '43800'),
('43268', '43200'),
('46011', '46400'),
('46017', '46400'),
('46024', '46130'),
('46029', '46130'),
('46038', '46130'),
('46043', '46130'),
('46048', '46190'),
('46071', '46190'),
('46076', '46130'),
('46097', '46130'),
('46115', '46400'),
('46117', '46130'),
('46122', '46130'),
('46123', '46130'),
('46124', '46130'),
('46125', '46210'),
('46135', '46210'),
('46141', '46190'),
('46146', '46400'),
('46150', '46190'),
('46159', '46400'),
('46160', '46210'),
('46161', '46210'),
('46163', '46130'),
('46177', '46130'),
('46203', '46210'),
('46228', '46130'),
('46229', '46130'),
('46244', '46210'),
('46251', '46400'),
('46255', '46210'),
('46269', '46210'),
('46271', '46400'),
('46273', '46400'),
('46281', '46400'),
('46282', '46210'),
('46284', '46130'),
('46286', '46400'),
('46295', '46400'),
('46302', '46210'),
('46311', '46190'),
('46313', '46130'),
('46315', '46190'),
('46338', '46210'),
('46339', '46400'),
('48001', '48310'),
('48002', '48200'),
('48003', '48190'),
('48004', '48800'),
('48005', '48100'),
('48007', '48310'),
('48008', '48170'),
('48009', '48130'),
('48010', '48600'),
('48012', '48200'),
('48013', '48000'),
('48014', '48190'),
('48015', '48800'),
('48016', '48000'),
('48017', '48500'),
('48018', '48000'),
('48019', '48400'),
('48020', '48400'),
('48021', '48250'),
('48022', '48400'),
('48023', '48170'),
('48025', '48200'),
('48026', '48200'),
('48027', '48190'),
('48028', '48400'),
('48029', '48000'),
('48030', '48000'),
('48031', '48310'),
('48032', '48100'),
('48033', '48500'),
('48034', '48500'),
('48036', '48400'),
('48037', '48190'),
('48038', '48600'),
('48039', '48230'),
('48040', '48250'),
('48041', '48300'),
('48042', '48000'),
('48043', '48170'),
('48044', '48310'),
('48045', '48170'),
('48046', '48140'),
('48047', '48130'),
('48048', '48300'),
('48049', '48100'),
('48050', '48400'),
('48051', '48160'),
('48053', '48190'),
('48054', '48190'),
('48055', '48230'),
('48056', '48230'),
('48057', '48700'),
('48058', '48310'),
('48059', '48200'),
('48060', '48130'),
('48061', '48400'),
('48062', '48300'),
('48063', '48700'),
('48064', '48310'),
('48065', '48400'),
('48066', '48220'),
('48067', '48110'),
('48068', '48100'),
('48069', '48150'),
('48070', '48600'),
('48071', '48260'),
('48072', '48100'),
('48073', '48340'),
('48074', '48150'),
('48075', '48320'),
('48076', '48130'),
('48077', '48140'),
('48078', '48100'),
('48079', '48120'),
('48080', '48300'),
('48081', '48000'),
('48082', '48170'),
('48083', '48700'),
('48084', '48600'),
('48085', '48500'),
('48086', '48250'),
('48087', '48270'),
('48088', '48210'),
('48089', '48140'),
('48090', '48140'),
('48091', '48260'),
('48092', '48100'),
('48093', '48190'),
('48094', '48500'),
('48095', '48000'),
('48096', '48150'),
('48097', '48110'),
('48098', '48110'),
('48099', '48100'),
('48100', '48170'),
('48101', '48210'),
('48103', '48100'),
('48104', '48260'),
('48105', '48300'),
('48106', '48310'),
('48107', '48100'),
('48108', '48600'),
('48110', '48140'),
('48111', '48000'),
('48112', '48300'),
('48115', '48110'),
('48116', '48220'),
('48117', '48800'),
('48119', '48800'),
('48120', '48100'),
('48121', '48200'),
('48122', '48320'),
('48123', '48260'),
('48124', '48100'),
('48125', '48500'),
('48126', '48700'),
('48127', '48700'),
('48128', '48200'),
('48129', '48300'),
('48130', '48400'),
('48131', '48150'),
('48132', '48120'),
('48133', '48700'),
('48134', '48160'),
('48135', '48800'),
('48136', '48240'),
('48137', '48000'),
('48138', '48100'),
('48139', '48600'),
('48140', '48200'),
('48141', '48210'),
('48142', '48130'),
('48144', '48110'),
('48145', '48700'),
('48146', '48210'),
('48147', '48000'),
('48149', '48120'),
('48150', '48300'),
('48151', '48170'),
('48152', '48240'),
('48153', '48700'),
('48154', '48500'),
('48155', '48370'),
('48156', '48340'),
('48157', '48190'),
('48158', '48160'),
('48160', '48170'),
('48161', '48310'),
('48162', '48400'),
('48163', '48160'),
('48164', '48190'),
('48165', '48100'),
('48166', '48400'),
('48167', '48310'),
('48168', '48100'),
('48169', '48140'),
('48170', '48160'),
('48171', '48110'),
('48172', '48220'),
('48173', '48160'),
('48174', '48600'),
('48175', '48340'),
('48176', '48150'),
('48177', '48200'),
('48178', '48240'),
('48179', '48140'),
('48180', '48500'),
('48181', '48500'),
('48182', '48170'),
('48183', '48130'),
('48184', '48600'),
('48185', '48230'),
('48186', '48400'),
('48187', '48100'),
('48188', '48700'),
('48189', '48000'),
('48190', '48310'),
('48191', '48500'),
('48192', '48340'),
('48193', '48400'),
('48194', '48220'),
('48195', '48210'),
('48197', '48700'),
('48198', '48800'),
('54017', '54540'),
('54039', '54120'),
('54040', '54540'),
('54064', '54480'),
('54065', '54120'),
('54075', '54540'),
('54097', '54540'),
('54101', '54120'),
('54129', '54480'),
('54154', '54120'),
('54191', '54540'),
('54217', '54120'),
('54243', '54120'),
('54287', '54120'),
('54365', '54120'),
('54368', '54540'),
('54377', '54540'),
('54396', '54540'),
('54398', '54540'),
('54419', '54480'),
('54421', '54480'),
('54422', '54120'),
('54423', '54540'),
('54427', '54540'),
('54443', '54540'),
('54450', '54120'),
('54481', '54540'),
('54484', '54540'),
('54488', '54480'),
('54512', '54480'),
('54519', '54120'),
('54539', '54540'),
('54540', '54480'),
('54555', '54120'),
('54560', '54540'),
('57003', '57560'),
('57033', '57400'),
('57064', '57370'),
('57080', '57370'),
('57100', '57370'),
('57119', '57400'),
('57163', '57850'),
('57168', '57370'),
('57169', '57820'),
('57180', '57400'),
('57244', '57820'),
('57280', '57400'),
('57291', '57370'),
('57298', '57870'),
('57299', '57870'),
('57300', '57850'),
('57304', '57400'),
('57315', '57820'),
('57321', '57400'),
('57324', '57400'),
('57333', '57400'),
('57334', '57870'),
('57339', '57820'),
('57344', '57400'),
('57374', '57560'),
('57382', '57400'),
('57427', '57820'),
('57461', '57560'),
('57462', '57370'),
('57468', '57370'),
('57504', '57560'),
('57540', '57370'),
('57544', '57870'),
('57614', '57370'),
('57618', '57820'),
('57623', '57560'),
('57629', '57400'),
('57630', '57400'),
('57635', '57370'),
('57637', '57400'),
('57680', '57870'),
('57682', '57560'),
('57697', '57560'),
('57703', '57370'),
('57709', '57370'),
('57721', '57370'),
('57734', '57560'),
('57742', '57870'),
('57743', '57370'),
('57761', '57370'),
('63001', '63260'),
('63002', '63980'),
('63003', '63600'),
('63004', '63770'),
('63005', '63340'),
('63006', '63420'),
('63007', '63420'),
('63008', '63250'),
('63009', '63420'),
('63010', '63220'),
('63011', '63700'),
('63012', '63460'),
('63013', '63260'),
('63014', '63170'),
('63015', '63120'),
('63016', '63930'),
('63017', '63340'),
('63018', '63500'),
('63020', '63210'),
('63021', '63730'),
('63022', '63570'),
('63023', '63590'),
('63024', '63690'),
('63025', '63390'),
('63026', '63970'),
('63027', '63600'),
('63028', '63810'),
('63029', '63570'),
('63031', '63570'),
('63032', '63110'),
('63035', '63460'),
('63036', '63500'),
('63037', '63480'),
('63038', '63610'),
('63039', '63220'),
('63040', '63160'),
('63041', '63640'),
('63042', '63112'),
('63043', '63440'),
('63044', '63160'),
('63046', '63340'),
('63047', '63150'),
('63048', '63760'),
('63050', '63570'),
('63051', '63500'),
('63052', '63340'),
('63053', '63820'),
('63054', '63500'),
('63055', '63230'),
('63056', '63490'),
('63057', '63880'),
('63059', '63270'),
('63060', '63330'),
('63061', '63260'),
('63062', '63700'),
('63063', '63118'),
('63064', '63620'),
('63065', '63520'),
('63066', '63250'),
('63067', '63330'),
('63068', '63200'),
('63069', '63670'),
('63070', '63122'),
('63071', '63210'),
('63072', '63250'),
('63073', '63320'),
('63074', '63340'),
('63075', '63400'),
('63076', '63980'),
('63077', '63790'),
('63078', '63580'),
('63079', '63580'),
('63080', '63320'),
('63081', '63600'),
('63082', '63440'),
('63083', '63530'),
('63084', '63450'),
('63085', '63230'),
('63086', '63590'),
('63087', '63420'),
('63088', '63580'),
('63090', '63260'),
('63091', '63340'),
('63092', '63410'),
('63093', '63410'),
('63094', '63640'),
('63095', '63290'),
('63096', '63160'),
('63097', '63320'),
('63098', '63680'),
('63099', '63119'),
('63100', '63390'),
('63101', '63330'),
('63102', '63290'),
('63103', '63140'),
('63104', '63660'),
('63105', '63220'),
('63108', '63200'),
('63109', '63320'),
('63110', '63740'),
('63111', '63320'),
('63113', '63000'),
('63114', '63340'),
('63115', '63380'),
('63116', '63460'),
('63117', '63610'),
('63118', '63380'),
('63119', '63490'),
('63120', '63730'),
('63122', '63320'),
('63123', '63450'),
('63125', '63120'),
('63126', '63450'),
('63127', '63320'),
('63129', '63810'),
('63130', '63700'),
('63132', '63590'),
('63134', '63340'),
('63135', '63200'),
('63136', '63520'),
('63137', '63220'),
('63138', '63300'),
('63139', '63220'),
('63140', '63700'),
('63141', '63830'),
('63142', '63980'),
('63143', '63260'),
('63144', '63850'),
('63145', '63490'),
('63146', '63160'),
('63147', '63840'),
('63150', '63530'),
('63151', '63300'),
('63152', '63390'),
('63153', '63850'),
('63154', '63160'),
('63155', '63520'),
('63156', '63570'),
('63157', '63160'),
('63158', '63630'),
('63159', '63620'),
('63160', '63500'),
('63161', '63600'),
('63162', '63980'),
('63163', '63740'),
('63165', '63620'),
('63166', '63340'),
('63167', '63200'),
('63168', '63160'),
('63169', '63850'),
('63170', '63230'),
('63171', '63390'),
('63172', '63320'),
('63173', '63600'),
('63174', '63890'),
('63175', '63470'),
('63176', '63210'),
('63177', '63270'),
('63178', '63500'),
('63179', '63990'),
('63181', '63460'),
('63182', '63570'),
('63183', '63690'),
('63184', '63290'),
('63185', '63570'),
('63186', '63380'),
('63187', '63700'),
('63188', '63270'),
('63189', '63820'),
('63190', '63690'),
('63191', '63760'),
('63192', '63680'),
('63196', '63290'),
('63197', '63440'),
('63198', '63410'),
('63199', '63320'),
('63202', '63340'),
('63203', '63200'),
('63205', '63270'),
('63206', '63410'),
('63207', '63480'),
('63208', '63440'),
('63209', '63340'),
('63211', '63940'),
('63212', '63200'),
('63214', '63730'),
('63216', '63160'),
('63218', '63220'),
('63219', '63230'),
('63220', '63420'),
('63221', '63220'),
('63222', '63320'),
('63223', '63560'),
('63224', '63200'),
('63225', '63750'),
('63227', '63730'),
('63228', '63380'),
('63230', '63890'),
('63231', '63650'),
('63233', '63700'),
('63234', '63320'),
('63235', '63460'),
('63236', '63240'),
('63237', '63380'),
('63238', '63230'),
('63239', '63160'),
('63240', '63260'),
('63242', '63340'),
('63243', '63700'),
('63244', '63200'),
('63245', '63200'),
('63246', '63150'),
('63247', '63790'),
('63248', '63210'),
('63249', '63120'),
('63250', '63320'),
('63251', '63560'),
('63252', '63160'),
('63253', '63290'),
('63254', '63830'),
('63255', '63340'),
('63256', '63220'),
('63257', '63210'),
('63258', '63880'),
('63259', '63450'),
('63260', '63880'),
('63261', '63500'),
('63262', '63670'),
('63263', '63870'),
('63264', '63210'),
('63266', '63340'),
('63267', '63550'),
('63268', '63500'),
('63269', '63270'),
('63270', '63500'),
('63271', '63290'),
('63272', '63170'),
('63274', '63210'),
('63275', '63500'),
('63277', '63580'),
('63278', '63200'),
('63279', '63113'),
('63280', '63270'),
('63281', '63330'),
('63282', '63730'),
('63283', '63380'),
('63285', '63230'),
('63286', '63440'),
('63287', '63500'),
('63288', '63200'),
('63289', '63470'),
('63290', '63230'),
('63291', '63290'),
('63292', '63470'),
('63293', '63330'),
('63294', '63780'),
('63297', '63160'),
('63298', '63930'),
('63299', '63420'),
('63300', '63200'),
('63301', '63290'),
('63302', '63670'),
('63303', '63420'),
('63304', '63330'),
('63305', '63210'),
('63307', '63540'),
('63308', '63130'),
('63309', '63840'),
('63310', '63120'),
('63311', '63260'),
('63312', '63220'),
('63313', '63420'),
('63314', '63890'),
('63315', '63450'),
('63318', '63410'),
('63319', '63660'),
('63320', '63380'),
('63321', '63500'),
('63323', '63630'),
('63324', '63630'),
('63326', '63210'),
('63327', '63200'),
('63328', '63580'),
('63329', '63390'),
('63330', '63320'),
('63331', '63660'),
('63334', '63520'),
('63335', '63320'),
('63336', '63680'),
('63337', '63890'),
('63338', '63700'),
('63339', '63380'),
('63340', '63580'),
('63341', '63600'),
('63342', '63320'),
('63343', '63520'),
('63344', '63440'),
('63345', '63122'),
('63346', '63850'),
('63347', '63260'),
('63348', '63580'),
('63349', '63780'),
('63351', '63470'),
('63352', '63340'),
('63353', '63630'),
('63354', '63390'),
('63355', '63880'),
('63356', '63340'),
('63357', '63340'),
('63358', '63440'),
('63359', '63380'),
('63360', '63330'),
('63363', '63230'),
('63365', '63520'),
('63366', '63490'),
('63367', '63570'),
('63368', '63160'),
('63369', '63390'),
('63370', '63820'),
('63371', '63600'),
('63373', '63330'),
('63374', '63600'),
('63375', '63570'),
('63376', '63580'),
('63377', '63330'),
('63378', '63270'),
('63379', '63460'),
('63380', '63710'),
('63381', '63230'),
('63382', '63440'),
('63383', '63610'),
('63384', '63480'),
('63385', '63230'),
('63386', '63210'),
('63388', '63640'),
('63389', '63490'),
('63390', '63440'),
('63391', '63440'),
('63392', '63500'),
('63393', '63550'),
('63394', '63660'),
('63395', '63450'),
('63396', '63450'),
('63397', '63950'),
('63398', '63220'),
('63399', '63760'),
('63401', '63790'),
('63402', '63550'),
('63403', '63320'),
('63404', '63500'),
('63405', '63270'),
('63406', '63260'),
('63407', '63970'),
('63408', '63390'),
('63409', '63320'),
('63410', '63470'),
('63411', '63500'),
('63412', '63840'),
('63413', '63730'),
('63414', '63120'),
('63415', '63490'),
('63416', '63750'),
('63417', '63530'),
('63418', '63120'),
('63419', '63560'),
('63421', '63690'),
('63422', '63500'),
('63423', '63490'),
('63425', '63450'),
('63426', '63690'),
('63427', '63460'),
('63428', '63560'),
('63429', '63340'),
('63430', '63300'),
('63431', '63600'),
('63432', '63260'),
('63433', '63470'),
('63434', '63590'),
('63435', '63320'),
('63436', '63380'),
('63437', '63810'),
('63438', '63520'),
('63439', '63490'),
('63440', '63610'),
('63441', '63600'),
('63442', '63580'),
('63444', '63500'),
('63446', '63260'),
('63447', '63330'),
('63448', '63580'),
('63449', '63710'),
('63450', '63470'),
('63451', '63210'),
('63452', '63320'),
('63454', '63480'),
('63455', '63960'),
('63456', '63340'),
('63457', '63270'),
('63458', '63340'),
('63460', '63380'),
('63462', '63330'),
('63463', '63250'),
('63464', '63410'),
('63465', '63840'),
('63466', '63500'),
('63467', '63620'),
('63468', '63120'),
('63469', '63120'),
('63470', '63530'),
('63471', '63700'),
('63472', '63270'),
('63473', '63200'),
('64006', '64490'),
('64007', '64400'),
('64008', '64220'),
('64010', '64120'),
('64011', '64220'),
('64012', '64130'),
('64013', '64220'),
('64014', '64250'),
('64015', '64470'),
('64016', '64430'),
('64017', '64470'),
('64018', '64120'),
('64019', '64120'),
('64020', '64570'),
('64026', '64220'),
('64029', '64570'),
('64034', '64120'),
('64036', '64120'),
('64039', '64400'),
('64040', '64570'),
('64045', '64120'),
('64046', '64640'),
('64047', '64220'),
('64049', '64120'),
('64050', '64130'),
('64051', '64120'),
('64054', '64800'),
('64058', '64800'),
('64062', '64260'),
('64064', '64660'),
('64065', '64310'),
('64066', '64220'),
('64068', '64800'),
('64069', '64260'),
('64081', '64130'),
('64085', '64490'),
('64086', '64240'),
('64092', '64430'),
('64093', '64130'),
('64101', '64800'),
('64104', '64490'),
('64105', '64120'),
('64106', '64120'),
('64107', '64220'),
('64109', '64800'),
('64110', '64440'),
('64115', '64130'),
('64116', '64260'),
('64119', '64800'),
('64120', '64120'),
('64124', '64780'),
('64126', '64400'),
('64127', '64260'),
('64128', '64260'),
('64130', '64700'),
('64134', '64240'),
('64136', '64490'),
('64137', '64800'),
('64147', '64240'),
('64148', '64800'),
('64150', '64120'),
('64154', '64220'),
('64155', '64220'),
('64156', '64680'),
('64157', '64260'),
('64160', '64250'),
('64162', '64470'),
('64166', '64220'),
('64175', '64260'),
('64185', '64490'),
('64187', '64130'),
('64188', '64130'),
('64191', '64800'),
('64202', '64120'),
('64204', '64440'),
('64206', '64490'),
('64213', '64250'),
('64214', '64130'),
('64217', '64400'),
('64218', '64220'),
('64220', '64400'),
('64221', '64120'),
('64222', '64470'),
('64223', '64490'),
('64224', '64400'),
('64225', '64570'),
('64228', '64120'),
('64229', '64220'),
('64231', '64130'),
('64240', '64260'),
('64241', '64400'),
('64244', '64400'),
('64245', '64400'),
('64247', '64130'),
('64252', '64400'),
('64256', '64240'),
('64257', '64800'),
('64258', '64470'),
('64259', '64640'),
('64260', '64700'),
('64261', '64680'),
('64264', '64130'),
('64265', '64120'),
('64267', '64120'),
('64268', '64130'),
('64270', '64800'),
('64271', '64640'),
('64272', '64120'),
('64273', '64780'),
('64274', '64220'),
('64275', '64220'),
('64276', '64570'),
('64277', '64240'),
('64279', '64250'),
('64280', '64260'),
('64283', '64220'),
('64285', '64120'),
('64289', '64240'),
('64294', '64120'),
('64297', '64220'),
('64298', '64470'),
('64302', '64800'),
('64303', '64470'),
('64310', '64570'),
('64313', '64640'),
('64314', '64120'),
('64316', '64560'),
('64319', '64120'),
('64320', '64440'),
('64322', '64220'),
('64327', '64220'),
('64328', '64400'),
('64330', '64490'),
('64336', '64490'),
('64339', '64800'),
('64340', '64470'),
('64341', '64130'),
('64342', '64560'),
('64345', '64120'),
('64350', '64250'),
('64351', '64570'),
('64353', '64260'),
('64354', '64440'),
('64360', '64660'),
('64362', '64120'),
('64363', '64260'),
('64364', '64240'),
('64368', '64120'),
('64371', '64130'),
('64375', '64120'),
('64377', '64240'),
('64378', '64130'),
('64379', '64220'),
('64386', '64800'),
('64391', '64130'),
('64400', '64800'),
('64404', '64470'),
('64409', '64400'),
('64411', '64130'),
('64417', '64800'),
('64421', '64680'),
('64422', '64400'),
('64424', '64130'),
('64425', '64120'),
('64426', '64400'),
('64429', '64120'),
('64432', '64470'),
('64433', '64490'),
('64436', '64780'),
('64437', '64120'),
('64441', '64120'),
('64444', '64800'),
('64449', '64400'),
('64460', '64400'),
('64463', '64260'),
('64468', '64130'),
('64469', '64800'),
('64473', '64260'),
('64475', '64560'),
('64476', '64640'),
('64477', '64430'),
('64481', '64400'),
('64484', '64220'),
('64485', '64220'),
('64487', '64120'),
('64489', '64640'),
('64490', '64780'),
('64492', '64220'),
('64493', '64120'),
('64495', '64310'),
('64498', '64800'),
('64504', '64310'),
('64506', '64490'),
('64508', '64400'),
('64509', '64470'),
('64522', '64260'),
('64527', '64250'),
('64528', '64780'),
('64533', '64470'),
('64537', '64470'),
('64538', '64220'),
('64539', '64120'),
('64542', '64490'),
('64543', '64430'),
('64545', '64122'),
('64546', '64240'),
('64551', '64400'),
('64559', '64130'),
('65001', '65260'),
('65002', '65100'),
('65003', '65240'),
('65004', '65400'),
('65006', '65440'),
('65009', '65150'),
('65011', '65100'),
('65012', '65370'),
('65014', '65370'),
('65016', '65200'),
('65017', '65170'),
('65018', '65560'),
('65020', '65100'),
('65021', '65400'),
('65022', '65400'),
('65023', '65240'),
('65024', '65200'),
('65025', '65400'),
('65027', '65510'),
('65029', '65400'),
('65031', '65240'),
('65032', '65400'),
('65033', '65100'),
('65034', '65130'),
('65036', '65400'),
('65037', '65130'),
('65038', '65100'),
('65039', '65240'),
('65040', '65100'),
('65041', '65130'),
('65042', '65200'),
('65043', '65200'),
('65045', '65400'),
('65046', '65440'),
('65050', '65240'),
('65051', '65660'),
('65053', '65370'),
('65054', '65130'),
('65055', '65400'),
('65056', '65400'),
('65058', '65170'),
('65059', '65200'),
('65060', '65200'),
('65064', '65240'),
('65065', '65100'),
('65066', '65240'),
('65069', '65250'),
('65070', '65100'),
('65071', '65130'),
('65075', '65170'),
('65076', '65250'),
('65077', '65400'),
('65078', '65710'),
('65081', '65130'),
('65082', '65100'),
('65087', '65370'),
('65089', '65120'),
('65091', '65130'),
('65092', '65410'),
('65093', '65150'),
('65094', '65150'),
('65096', '65130'),
('65098', '65400'),
('65099', '65590'),
('65105', '65130'),
('65106', '65170'),
('65107', '65100'),
('65109', '65370'),
('65111', '65130'),
('65112', '65400'),
('65116', '65240'),
('65117', '65170'),
('65122', '65410'),
('65123', '65710'),
('65124', '65170'),
('65127', '65130'),
('65135', '65130'),
('65138', '65110'),
('65139', '65370'),
('65140', '65590'),
('65141', '65510'),
('65143', '65130'),
('65144', '65100'),
('65145', '65120'),
('65147', '65200'),
('65154', '65370'),
('65157', '65170'),
('65158', '65370'),
('65159', '65250'),
('65162', '65130'),
('65163', '65130'),
('65164', '65100'),
('65165', '65130'),
('65166', '65130'),
('65167', '65130'),
('65168', '65120'),
('65169', '65400'),
('65171', '65510'),
('65172', '65170'),
('65173', '65120'),
('65175', '65370'),
('65176', '65560'),
('65179', '65130'),
('65180', '65240'),
('65182', '65400'),
('65186', '65370'),
('65188', '65120'),
('65190', '65250'),
('65191', '65100'),
('65192', '65120'),
('65193', '65370'),
('65194', '65150'),
('65195', '65510'),
('65197', '65100'),
('65198', '65200'),
('65199', '65510'),
('65200', '65200'),
('65201', '65100'),
('65202', '65400'),
('65203', '65100'),
('65205', '65440'),
('65207', '65130'),
('65208', '65170'),
('65209', '65440'),
('65210', '65120'),
('65211', '65170'),
('65212', '65440'),
('65216', '65200'),
('65217', '65150'),
('65218', '65250'),
('65221', '65200'),
('65228', '65410'),
('65229', '65370'),
('65230', '65370'),
('65231', '65250'),
('65233', '65100'),
('65234', '65240'),
('65236', '65100'),
('65237', '65100'),
('65238', '65200'),
('65239', '65130'),
('65241', '65130'),
('65247', '65100'),
('65255', '65240'),
('65267', '65400'),
('65271', '65100'),
('65275', '65200'),
('65277', '65150'),
('65278', '65130'),
('65279', '65250'),
('65280', '65100'),
('65281', '65200'),
('65282', '65510'),
('65283', '65510'),
('65286', '65100'),
('65287', '65370'),
('65291', '65100'),
('65295', '65120'),
('65300', '65200'),
('65305', '65370'),
('65306', '65130'),
('65307', '65660'),
('65309', '65250'),
('65310', '65200'),
('65312', '65130'),
('65317', '65510'),
('65319', '65150'),
('65320', '65200'),
('65322', '65250'),
('65323', '65150'),
('65327', '65150'),
('65328', '65200'),
('65329', '65150'),
('65334', '65100'),
('65335', '65200'),
('65338', '65200'),
('65343', '65100'),
('65345', '65100'),
('65347', '65370'),
('65348', '65100'),
('65349', '65100'),
('65351', '65100'),
('65352', '65400'),
('65354', '65240'),
('65355', '65100'),
('65356', '65130'),
('65360', '65270'),
('65362', '65260'),
('65366', '65100'),
('65370', '65200'),
('65371', '65400'),
('65379', '65590'),
('65382', '65370'),
('65384', '65170'),
('65385', '65250'),
('65386', '65100'),
('65388', '65170'),
('65389', '65150'),
('65391', '65370'),
('65393', '65400'),
('65394', '65150'),
('65395', '65270'),
('65396', '65400'),
('65398', '65370'),
('65399', '65120'),
('65400', '65400'),
('65402', '65370'),
('65405', '65130'),
('65407', '65370'),
('65408', '65410'),
('65411', '65120'),
('65413', '65120'),
('65415', '65100'),
('65416', '65150'),
('65420', '65400'),
('65421', '65100'),
('65424', '65120'),
('65427', '65370'),
('65428', '65400'),
('65431', '65370'),
('65435', '65260'),
('65441', '65370'),
('65444', '65660'),
('65445', '65130'),
('65450', '65170'),
('65451', '65200'),
('65453', '65370'),
('65455', '65150'),
('65458', '65400'),
('65459', '65200'),
('65463', '65120'),
('65465', '65170'),
('65466', '65240'),
('65467', '65400'),
('65469', '65120'),
('65470', '65100'),
('65471', '65170'),
('65473', '65260'),
('65478', '65120'),
('65479', '65200'),
('65480', '65120'),
('65481', '65120'),
('65482', '65150'),
('66001', '66480'),
('66003', '66110'),
('66004', '66210'),
('66005', '66760'),
('66006', '66220'),
('66007', '66320'),
('66009', '66150'),
('66010', '66360'),
('66013', '66320'),
('66018', '66110'),
('66020', '66210'),
('66022', '66130'),
('66023', '66130'),
('66025', '66760'),
('66027', '66210'),
('66032', '66400'),
('66034', '66500'),
('66035', '66730'),
('66036', '66360'),
('66040', '66130'),
('66043', '66820'),
('66045', '66500'),
('66046', '66220'),
('66047', '66360'),
('66049', '66400'),
('66051', '66500'),
('66052', '66500'),
('66054', '66500'),
('66055', '66130'),
('66056', '66130'),
('66057', '66820'),
('66060', '66150'),
('66061', '66260'),
('66062', '66760'),
('66063', '66480'),
('66064', '66120'),
('66066', '66760'),
('66067', '66800'),
('66068', '66360'),
('66070', '66320'),
('66072', '66800'),
('66073', '66320'),
('66074', '66500'),
('66075', '66800'),
('66076', '66730'),
('66077', '66220'),
('66078', '66820'),
('66079', '66320'),
('66080', '66360'),
('66081', '66210'),
('66082', '66210'),
('66083', '66220'),
('66085', '66820'),
('66086', '66320'),
('66088', '66130'),
('66089', '66320'),
('66090', '66360'),
('66091', '66230'),
('66095', '66760'),
('66097', '66220'),
('66098', '66210'),
('66100', '66800'),
('66102', '66360'),
('66103', '66320'),
('66104', '66500'),
('66105', '66210'),
('66106', '66480'),
('66109', '66500'),
('66111', '66130'),
('66113', '66110'),
('66116', '66150'),
('66117', '66210'),
('66119', '66500'),
('66120', '66340'),
('66122', '66500'),
('66123', '66360'),
('66124', '66120'),
('66125', '66360'),
('66126', '66400'),
('66128', '66360'),
('66130', '66340'),
('66132', '66340'),
('66137', '66480'),
('66139', '66730'),
('66142', '66210'),
('66146', '66760'),
('66147', '66760'),
('66149', '66500'),
('66150', '66230'),
('66151', '66730'),
('66152', '66220'),
('66153', '66130'),
('66154', '66210'),
('66155', '66360'),
('66156', '66730'),
('66157', '66360'),
('66159', '66210'),
('66160', '66400'),
('66161', '66500'),
('66162', '66320'),
('66165', '66320'),
('66166', '66360'),
('66167', '66800'),
('66169', '66220'),
('66178', '66400'),
('66179', '66260'),
('66181', '66800'),
('66183', '66110'),
('66184', '66220'),
('66185', '66130'),
('66187', '66220'),
('66188', '66210'),
('66191', '66360'),
('66192', '66210'),
('66193', '66360'),
('66194', '66230'),
('66197', '66360'),
('66198', '66730'),
('66199', '66400'),
('66201', '66320'),
('66202', '66120'),
('66203', '66110'),
('66204', '66500'),
('66206', '66230'),
('66209', '66360'),
('66215', '66130'),
('66216', '66220');
INSERT INTO `ods_communes_crea` (`occ_code_insee`, `occ_code_postal`) VALUES
('66218', '66760'),
('66219', '66500'),
('66220', '66340'),
('66221', '66320'),
('66222', '66820'),
('66223', '66500'),
('66230', '66320'),
('66232', '66220'),
('66233', '66400'),
('66234', '66730'),
('67003', '67220'),
('67004', '67310'),
('67010', '67140'),
('67018', '67310'),
('67019', '67600'),
('67020', '67130'),
('67021', '67140'),
('67022', '67220'),
('67026', '67130'),
('67027', '67130'),
('67030', '67310'),
('67031', '67210'),
('67032', '67140'),
('67040', '67600'),
('67041', '67440'),
('67050', '67130'),
('67051', '67650'),
('67052', '67530'),
('67059', '67420'),
('67060', '67140'),
('67061', '67330'),
('67062', '67220'),
('67063', '67220'),
('67066', '67130'),
('67073', '67730'),
('67076', '67420'),
('67077', '67310'),
('67078', '67310'),
('67081', '67310'),
('67084', '67650'),
('67085', '67310'),
('67092', '67220'),
('67094', '67650'),
('67096', '67440'),
('67098', '67190'),
('67103', '67330'),
('67115', '67600'),
('67116', '67600'),
('67117', '67700'),
('67120', '67140'),
('67122', '67710'),
('67125', '67680'),
('67129', '67330'),
('67139', '67310'),
('67143', '67220'),
('67144', '67130'),
('67149', '67700'),
('67155', '67140'),
('67161', '67700'),
('67164', '67210'),
('67165', '67130'),
('67167', '67190'),
('67168', '67190'),
('67172', '67210'),
('67179', '67700'),
('67185', '67330'),
('67188', '67190'),
('67189', '67140'),
('67190', '67440'),
('67196', '67600'),
('67208', '67310'),
('67210', '67140'),
('67225', '67330'),
('67227', '67140'),
('67229', '67440'),
('67239', '67600'),
('67242', '67330'),
('67244', '67440'),
('67245', '67310'),
('67255', '67220'),
('67258', '67700'),
('67272', '67440'),
('67276', '67130'),
('67279', '67700'),
('67280', '67220'),
('67283', '67440'),
('67286', '67210'),
('67295', '67140'),
('67299', '67190'),
('67302', '67700'),
('67306', '67130'),
('67310', '67600'),
('67311', '67600'),
('67313', '67190'),
('67314', '67130'),
('67317', '67220'),
('67320', '67220'),
('67321', '67130'),
('67322', '67330'),
('67325', '67280'),
('67329', '67210'),
('67333', '67330'),
('67337', '67680'),
('67342', '67280'),
('67347', '67330'),
('67348', '67210'),
('67352', '67330'),
('67362', '67600'),
('67366', '67700'),
('67367', '67700'),
('67368', '67530'),
('67377', '67420'),
('67383', '67310'),
('67384', '67420'),
('67387', '67140'),
('67391', '67440'),
('67395', '67440'),
('67408', '67310'),
('67410', '67560'),
('67411', '67560'),
('67414', '67570'),
('67420', '67130'),
('67421', '67420'),
('67424', '67420'),
('67425', '67700'),
('67426', '67220'),
('67427', '67220'),
('67428', '67530'),
('67429', '67140'),
('67430', '67220'),
('67431', '67440'),
('67436', '67420'),
('67437', '67700'),
('67442', '67310'),
('67445', '67750'),
('67448', '67130'),
('67459', '67440'),
('67462', '67600'),
('67469', '67440'),
('67470', '67130'),
('67477', '67220'),
('67480', '67190'),
('67481', '67140'),
('67489', '67440'),
('67490', '67220'),
('67492', '67310'),
('67493', '67220'),
('67499', '67220'),
('67500', '67280'),
('67503', '67330'),
('67504', '67210'),
('67505', '67730'),
('67507', '67220'),
('67513', '67130'),
('67515', '67700'),
('67520', '67310'),
('67525', '67310'),
('67527', '67440'),
('67531', '67130'),
('67543', '67130'),
('67553', '67700'),
('67555', '67310'),
('67556', '67310'),
('67557', '67140'),
('68005', '68770'),
('68011', '68700'),
('68012', '68700'),
('68014', '68150'),
('68028', '68750'),
('68029', '68500'),
('68030', '68500'),
('68032', '68500'),
('68037', '68250'),
('68040', '68620'),
('68044', '68650'),
('68045', '68290'),
('68046', '68290'),
('68051', '68380'),
('68058', '68530'),
('68063', '68700'),
('68073', '68290'),
('68078', '68420'),
('68083', '68140'),
('68089', '68470'),
('68097', '68240'),
('68102', '68690'),
('68106', '68760'),
('68109', '68140'),
('68111', '68420'),
('68112', '68500'),
('68116', '68250'),
('68117', '68140'),
('68122', '68500'),
('68123', '68420'),
('68134', '68420'),
('68142', '68140'),
('68147', '68150'),
('68150', '68420'),
('68151', '68470'),
('68156', '68500'),
('68159', '68500'),
('68161', '68230'),
('68162', '68240'),
('68164', '68240'),
('68167', '68290'),
('68171', '68820'),
('68173', '68910'),
('68175', '68650'),
('68177', '68610'),
('68178', '68610'),
('68179', '68290'),
('68180', '68800'),
('68185', '68660'),
('68188', '68610'),
('68193', '68140'),
('68199', '68550'),
('68201', '68290'),
('68203', '68500'),
('68204', '68380'),
('68206', '68700'),
('68210', '68380'),
('68211', '68470'),
('68213', '68470'),
('68217', '68690'),
('68223', '68380'),
('68226', '68140'),
('68228', '68250'),
('68229', '68530'),
('68233', '68290'),
('68234', '68250'),
('68235', '68250'),
('68237', '68230'),
('68239', '68290'),
('68241', '68250'),
('68242', '68250'),
('68244', '68420'),
('68247', '68830'),
('68249', '68370'),
('68250', '68500'),
('68251', '68570'),
('68252', '68150'),
('68255', '68250'),
('68261', '68800'),
('68262', '68470'),
('68269', '68150'),
('68274', '68500'),
('68275', '68290'),
('68276', '68500'),
('68277', '68340'),
('68279', '68800'),
('68280', '68590'),
('68283', '68660'),
('68285', '68590'),
('68287', '68250'),
('68292', '68550'),
('68294', '68160'),
('68296', '68590'),
('68298', '68160'),
('68307', '68290'),
('68308', '68290'),
('68310', '68240'),
('68311', '68380'),
('68315', '68360'),
('68316', '68230'),
('68317', '68140'),
('68318', '68570'),
('68322', '68700'),
('68328', '68470'),
('68329', '68140'),
('68334', '68800'),
('68335', '68590'),
('68338', '68230'),
('68342', '68700'),
('68344', '68121'),
('68348', '68800'),
('68350', '68420'),
('68354', '68230'),
('68358', '68230'),
('68359', '68700'),
('68361', '68290'),
('68364', '68250'),
('68365', '68920'),
('68368', '68230'),
('68370', '68820'),
('68372', '68760'),
('68374', '68920'),
('68381', '68500'),
('68383', '68340'),
('68385', '68230'),
('69001', '69170'),
('69002', '69790'),
('69006', '69550'),
('69007', '69420'),
('69008', '69490'),
('69010', '69210'),
('69012', '69430'),
('69014', '69610'),
('69015', '69430'),
('69016', '69790'),
('69017', '69620'),
('69018', '69430'),
('69021', '69690'),
('69022', '69690'),
('69023', '69460'),
('69024', '69620'),
('69025', '69240'),
('69026', '69620'),
('69030', '69690'),
('69031', '69690'),
('69032', '69210'),
('69035', '69840'),
('69037', '69870'),
('69038', '69770'),
('69039', '69620'),
('69041', '69240'),
('69042', '69590'),
('69051', '69440'),
('69053', '69840'),
('69054', '69430'),
('69057', '69210'),
('69058', '69115'),
('69060', '69870'),
('69061', '69640'),
('69062', '69590'),
('69064', '69420'),
('69066', '69470'),
('69067', '69690'),
('69069', '69290'),
('69070', '69550'),
('69073', '69490'),
('69074', '69640'),
('69075', '69170'),
('69078', '69850'),
('69082', '69840'),
('69083', '69210'),
('69084', '69820'),
('69086', '69210'),
('69090', '69620'),
('69093', '69870'),
('69094', '69290'),
('69095', '69610'),
('69097', '69420'),
('69098', '69610'),
('69099', '69610'),
('69101', '69640'),
('69102', '69170'),
('69103', '69840'),
('69104', '69840'),
('69105', '69640'),
('69107', '69870'),
('69109', '69430'),
('69110', '69590'),
('69111', '69620'),
('69112', '69210'),
('69113', '69620'),
('69119', '69420'),
('69120', '69770'),
('69124', '69430'),
('69128', '69240'),
('69129', '69240'),
('69130', '69550'),
('69131', '69510'),
('69132', '69610'),
('69134', '69620'),
('69135', '69860'),
('69137', '69640'),
('69138', '69610'),
('69139', '69770'),
('69141', '69440'),
('69144', '69210'),
('69145', '69460'),
('69146', '69620'),
('69147', '69490'),
('69150', '69860'),
('69151', '69460'),
('69154', '69290'),
('69155', '69590'),
('69157', '69490'),
('69158', '69240'),
('69160', '69870'),
('69161', '69790'),
('69162', '69430'),
('69164', '69470'),
('69165', '69430'),
('69166', '69440'),
('69167', '69640'),
('69169', '69550'),
('69170', '69510'),
('69171', '69210'),
('69172', '69460'),
('69173', '69490'),
('69174', '69170'),
('69175', '69210'),
('69176', '69510'),
('69177', '69210'),
('69178', '69610'),
('69180', '69440'),
('69181', '69170'),
('69182', '69790'),
('69183', '69870'),
('69184', '69440'),
('69185', '69860'),
('69186', '69790'),
('69187', '69930'),
('69188', '69170'),
('69192', '69870'),
('69195', '69440'),
('69196', '69430'),
('69197', '69460'),
('69198', '69460'),
('69200', '69490'),
('69201', '69610'),
('69203', '69610'),
('69205', '69290'),
('69208', '69210'),
('69209', '69790'),
('69210', '69860'),
('69214', '69550'),
('69215', '69640'),
('69216', '69690'),
('69217', '69870'),
('69219', '69440'),
('69220', '69930'),
('69221', '69670'),
('69222', '69620'),
('69223', '69490'),
('69224', '69860'),
('69225', '69170'),
('69227', '69850'),
('69228', '69440'),
('69229', '69870'),
('69230', '69620'),
('69231', '69210'),
('69234', '69490'),
('69237', '69440'),
('69238', '69590'),
('69239', '69620'),
('69240', '69240'),
('69241', '69440'),
('69243', '69170'),
('69245', '69620'),
('69246', '69620'),
('69247', '69470'),
('69248', '69240'),
('69249', '69510'),
('69251', '69860'),
('69252', '69420'),
('69253', '69420'),
('69254', '69170'),
('69255', '69670'),
('69257', '69460'),
('69258', '69820'),
('69261', '69430'),
('69263', '69770'),
('69265', '69640'),
('69267', '69910'),
('69269', '69510'),
('70011', '70280'),
('70016', '70310'),
('70061', '70290'),
('70062', '70270'),
('70063', '70270'),
('70071', '70310'),
('70094', '70280'),
('70103', '70280'),
('70120', '70290'),
('70176', '70310'),
('70210', '70270'),
('70217', '70310'),
('70227', '70310'),
('70233', '70310'),
('70245', '70220'),
('70256', '70270'),
('70283', '70440'),
('70295', '70270'),
('70308', '70310'),
('70339', '70270'),
('70345', '70440'),
('70352', '70310'),
('70361', '70270'),
('70413', '70290'),
('70414', '70290'),
('70425', '70310'),
('70435', '70280'),
('70453', '70310'),
('70459', '70270'),
('70460', '70280'),
('70469', '70310'),
('70489', '70440'),
('70498', '70270'),
('70573', '70310'),
('71005', '71510'),
('71007', '71460'),
('71008', '71170'),
('71016', '71260'),
('71017', '71220'),
('71019', '71640'),
('71021', '71120'),
('71022', '71800'),
('71025', '71220'),
('71030', '71250'),
('71031', '71960'),
('71032', '71960'),
('71034', '71390'),
('71035', '71260'),
('71036', '71460'),
('71037', '71460'),
('71039', '71250'),
('71041', '71800'),
('71042', '71460'),
('71050', '71630'),
('71055', '71520'),
('71057', '71250'),
('71058', '71460'),
('71065', '71250'),
('71066', '71260'),
('71067', '71460'),
('71068', '71460'),
('71069', '71960'),
('71070', '71390'),
('71072', '71390'),
('71074', '71570'),
('71078', '71510'),
('71080', '71460'),
('71082', '71120'),
('71084', '71570'),
('71086', '71120'),
('71087', '71460'),
('71090', '71570'),
('71091', '71520'),
('71095', '71800'),
('71099', '71260'),
('71106', '71120'),
('71107', '71510'),
('71108', '71570'),
('71110', '71170'),
('71112', '71250'),
('71113', '71740'),
('71115', '71510'),
('71116', '71800'),
('71120', '71170'),
('71125', '71250'),
('71126', '71960'),
('71127', '71220'),
('71128', '71220'),
('71130', '71460'),
('71133', '71800'),
('71134', '71520'),
('71135', '71260'),
('71137', '71250'),
('71139', '71460'),
('71141', '71800'),
('71145', '71460'),
('71146', '71250'),
('71147', '71460'),
('71148', '71170'),
('71156', '71260'),
('71159', '71460'),
('71160', '71800'),
('71163', '71520'),
('71164', '71460'),
('71169', '71960'),
('71171', '71510'),
('71178', '71520'),
('71180', '71250'),
('71181', '71250'),
('71182', '71640'),
('71191', '71510'),
('71199', '71250'),
('71201', '71390'),
('71203', '71120'),
('71210', '71960'),
('71214', '71460'),
('71216', '71460'),
('71217', '71630'),
('71218', '71800'),
('71221', '71640'),
('71222', '71690'),
('71225', '71390'),
('71231', '71220'),
('71236', '71960'),
('71240', '71250'),
('71241', '71640'),
('71242', '71460'),
('71247', '71390'),
('71258', '71570'),
('71264', '71250'),
('71267', '71260'),
('71268', '71120'),
('71272', '71460'),
('71276', '71120'),
('71277', '71390'),
('71278', '71690'),
('71279', '71220'),
('71285', '71220'),
('71286', '71690'),
('71287', '71250'),
('71288', '71250'),
('71289', '71520'),
('71290', '71250'),
('71292', '71640'),
('71294', '71640'),
('71299', '71960'),
('71302', '71390'),
('71304', '71520'),
('71305', '71260'),
('71316', '71520'),
('71320', '71690'),
('71321', '71510'),
('71323', '71220'),
('71324', '71390'),
('71327', '71170'),
('71335', '71800'),
('71339', '71120'),
('71344', '71220'),
('71345', '71260'),
('71347', '71510'),
('71350', '71960'),
('71358', '71220'),
('71360', '71960'),
('71362', '71570'),
('71363', '71460'),
('71371', '71960'),
('71372', '71570'),
('71374', '71390'),
('71375', '71220'),
('71381', '71250'),
('71383', '71260'),
('71385', '71570'),
('71387', '71220'),
('71391', '71510'),
('71394', '71220'),
('71397', '71250'),
('71399', '71800'),
('71400', '71460'),
('71403', '71640'),
('71404', '71390'),
('71408', '71740'),
('71416', '71260'),
('71417', '71460'),
('71422', '71390'),
('71425', '71510'),
('71426', '71390'),
('71427', '71460'),
('71428', '71170'),
('71430', '71640'),
('71437', '71800'),
('71441', '71520'),
('71442', '71510'),
('71446', '71460'),
('71447', '71640'),
('71449', '71390'),
('71451', '71740'),
('71452', '71220'),
('71455', '71460'),
('71458', '71460'),
('71459', '71640'),
('71460', '71260'),
('71461', '71460'),
('71463', '71740'),
('71465', '71460'),
('71469', '71520'),
('71470', '71630'),
('71471', '71390'),
('71473', '71800'),
('71480', '71510'),
('71481', '71570'),
('71483', '71800'),
('71485', '71390'),
('71487', '71570'),
('71488', '71250'),
('71492', '71460'),
('71494', '71260'),
('71495', '71250'),
('71498', '71460'),
('71501', '71390'),
('71505', '71460'),
('71507', '71460'),
('71513', '71260'),
('71515', '71460'),
('71518', '71960'),
('71521', '71250'),
('71524', '71220'),
('71525', '71960'),
('71526', '71960'),
('71529', '71220'),
('71532', '71250'),
('71533', '71740'),
('71545', '71520'),
('71546', '71520'),
('71547', '71520'),
('71553', '71800'),
('71559', '71800'),
('71561', '71800'),
('71562', '71120'),
('71563', '71460'),
('71564', '71120'),
('71567', '71960'),
('71571', '71220'),
('71574', '71960'),
('71579', '71390'),
('71582', '71250'),
('71584', '71260'),
('71586', '71120'),
('71587', '71250'),
('71591', '71260'),
('73001', '73610'),
('73002', '73220'),
('73003', '73260'),
('73004', '73340'),
('73005', '73340'),
('73006', '73210'),
('73007', '73220'),
('73008', '73100'),
('73010', '73410'),
('73011', '73200'),
('73012', '73300'),
('73013', '73300'),
('73014', '73200'),
('73015', '73550'),
('73017', '73190'),
('73018', '73800'),
('73019', '73220'),
('73020', '73340'),
('73021', '73110'),
('73022', '73610'),
('73023', '73500'),
('73024', '73260'),
('73025', '73240'),
('73026', '73500'),
('73027', '73470'),
('73028', '73170'),
('73029', '73000'),
('73030', '73230'),
('73031', '73000'),
('73032', '73540'),
('73033', '73360'),
('73034', '73270'),
('73036', '73340'),
('73038', '73210'),
('73039', '73330'),
('73040', '73480'),
('73041', '73390'),
('73042', '73170'),
('73043', '73410'),
('73045', '73260'),
('73046', '73260'),
('73047', '73480'),
('73048', '73460'),
('73049', '73220'),
('73050', '73370'),
('73051', '73370'),
('73052', '73110'),
('73053', '73390'),
('73054', '73700'),
('73055', '73350'),
('73056', '73500'),
('73057', '73570'),
('73058', '73520'),
('73059', '73100'),
('73061', '73200'),
('73062', '73410'),
('73063', '73730'),
('73064', '73190'),
('73065', '73000'),
('73067', '73130'),
('73068', '73390'),
('73069', '73390'),
('73070', '73240'),
('73071', '73350'),
('73072', '73390'),
('73073', '73310'),
('73074', '73660'),
('73075', '73110'),
('73076', '73370'),
('73077', '73700'),
('73078', '73170'),
('73079', '73390'),
('73080', '73300'),
('73081', '73630'),
('73082', '73800'),
('73083', '73660'),
('73084', '73800'),
('73085', '73310'),
('73086', '73460'),
('73087', '73160'),
('73088', '73400'),
('73089', '73800'),
('73090', '73630'),
('73091', '73310'),
('73092', '73160'),
('73093', '73210'),
('73094', '73590'),
('73095', '73110'),
('73096', '73800'),
('73097', '73190'),
('73098', '73230'),
('73099', '73110'),
('73100', '73330'),
('73101', '73630'),
('73103', '73420'),
('73104', '73610'),
('73105', '73360'),
('73106', '73630'),
('73107', '73670'),
('73108', '73410'),
('73109', '73220'),
('73110', '73540'),
('73111', '73110'),
('73112', '73260'),
('73113', '73350'),
('73114', '73590'),
('73115', '73600'),
('73116', '73300'),
('73117', '73500'),
('73118', '73800'),
('73119', '73500'),
('73120', '73250'),
('73121', '73460'),
('73122', '73470'),
('73123', '73590'),
('73124', '73200'),
('73126', '73210'),
('73127', '73240'),
('73128', '73100'),
('73129', '73460'),
('73130', '73200'),
('73131', '73600'),
('73132', '73620'),
('73133', '73390'),
('73135', '73300'),
('73137', '73000'),
('73138', '73300'),
('73139', '73630'),
('73140', '73170'),
('73141', '73800'),
('73142', '73210'),
('73143', '73480'),
('73144', '73480'),
('73145', '73610'),
('73146', '73340'),
('73147', '73170'),
('73149', '73170'),
('73150', '73210'),
('73151', '73800'),
('73152', '73470'),
('73153', '73400'),
('73154', '73200'),
('73155', '73420'),
('73156', '73170'),
('73157', '73500'),
('73158', '73410'),
('73159', '73800'),
('73160', '73000'),
('73161', '73350'),
('73162', '73460'),
('73163', '73130'),
('73164', '73100'),
('73166', '73390'),
('73167', '73130'),
('73168', '73220'),
('73169', '73210'),
('73170', '73200'),
('73171', '73800'),
('73173', '73870'),
('73175', '73220'),
('73176', '73700'),
('73177', '73300'),
('73178', '73340'),
('73179', '73290'),
('73180', '73310'),
('73181', '73600'),
('73182', '73100'),
('73183', '73800'),
('73184', '73470'),
('73186', '73590'),
('73187', '73260'),
('73188', '73460'),
('73189', '73130'),
('73190', '73600'),
('73191', '73470'),
('73192', '73340'),
('73193', '73310'),
('73194', '73140'),
('73196', '73200'),
('73197', '73210'),
('73198', '73120'),
('73200', '73800'),
('73201', '73350'),
('73202', '73200'),
('73203', '73300'),
('73204', '73330'),
('73205', '73110'),
('73206', '73710'),
('73207', '73110'),
('73208', '73100'),
('73210', '73190'),
('73211', '73720'),
('73212', '73220'),
('73213', '73490'),
('73214', '73240'),
('73215', '73110'),
('73216', '73730'),
('73217', '73110'),
('73218', '73310'),
('73219', '73610'),
('73220', '73220'),
('73221', '73130'),
('73222', '73230'),
('73223', '73500'),
('73224', '73130'),
('73225', '73190'),
('73226', '73520'),
('73227', '73120'),
('73228', '73160'),
('73229', '73360'),
('73230', '73130'),
('73231', '73130'),
('73232', '73640'),
('73233', '73360'),
('73234', '73340'),
('73235', '73130'),
('73236', '73240'),
('73237', '73220'),
('73238', '73410'),
('73239', '73410'),
('73240', '73800'),
('73241', '73460'),
('73242', '73530'),
('73243', '73230'),
('73244', '73440'),
('73245', '73170'),
('73246', '73160'),
('73247', '73250'),
('73248', '73300'),
('73249', '73190'),
('73250', '73870'),
('73252', '73220'),
('73253', '73600'),
('73254', '73240'),
('73255', '73130'),
('73256', '73140'),
('73257', '73440'),
('73258', '73140'),
('73259', '73130'),
('73260', '73240'),
('73261', '73140'),
('73262', '73590'),
('73263', '73100'),
('73264', '73100'),
('73265', '73410'),
('73266', '73260'),
('73267', '73300'),
('73268', '73730'),
('73269', '73170'),
('73270', '73250'),
('73271', '73170'),
('73272', '73220'),
('73273', '73310'),
('73274', '73670'),
('73275', '73360'),
('73276', '73800'),
('73277', '73630'),
('73278', '73660'),
('73280', '73530'),
('73281', '73160'),
('73282', '73160'),
('73283', '73460'),
('73284', '73600'),
('73285', '73700'),
('73286', '73310'),
('73287', '73500'),
('73288', '73000'),
('73289', '73110'),
('73290', '73500'),
('73292', '73200'),
('73293', '73230'),
('73294', '73190'),
('73296', '73320'),
('73297', '73460'),
('73298', '73790'),
('73299', '73170'),
('73300', '73100'),
('73301', '73100'),
('73302', '73110'),
('73303', '73400'),
('73304', '73150'),
('73305', '73210'),
('73306', '73450'),
('73307', '73450'),
('73308', '73200'),
('73309', '73330'),
('73310', '73230'),
('73311', '73110'),
('73312', '73460'),
('73313', '73170'),
('73314', '73800'),
('73315', '73390'),
('73316', '73110'),
('73317', '73270'),
('73318', '73300'),
('73320', '73300'),
('73321', '73600'),
('73322', '73500'),
('73323', '73640'),
('73324', '73110'),
('73326', '73160'),
('73327', '73310'),
('73328', '73420'),
('73329', '73420'),
('73330', '73170'),
('74001', '74360'),
('74002', '74540'),
('74003', '74290'),
('74004', '74540'),
('74005', '74200'),
('74006', '74350'),
('74007', '74800'),
('74008', '74100'),
('74009', '74350'),
('74010', '74000'),
('74011', '74940'),
('74012', '74100'),
('74013', '74200'),
('74014', '74300'),
('74015', '74930'),
('74016', '74160'),
('74018', '74800'),
('74019', '74370'),
('74020', '74200'),
('74021', '74380'),
('74022', '74570'),
('74024', '74130'),
('74025', '74140'),
('74026', '74330'),
('74027', '74230'),
('74029', '74910'),
('74030', '74430'),
('74031', '74160'),
('74032', '74470'),
('74033', '74500'),
('74034', '74430'),
('74035', '74150'),
('74036', '74290'),
('74037', '74420'),
('74038', '74250'),
('74040', '74380'),
('74041', '74360'),
('74042', '74130'),
('74043', '74890'),
('74044', '74160'),
('74045', '74230'),
('74046', '74150'),
('74048', '74890'),
('74049', '74130'),
('74050', '74420'),
('74051', '74350'),
('74052', '74350'),
('74053', '74550'),
('74054', '74540'),
('74055', '74910'),
('74056', '74400'),
('74057', '74500'),
('74058', '74360'),
('74059', '74800'),
('74060', '74410'),
('74061', '74540'),
('74062', '74370'),
('74063', '74390'),
('74064', '74300'),
('74065', '74270'),
('74066', '74270'),
('74067', '74650'),
('74068', '74270'),
('74069', '74520'),
('74070', '74140'),
('74071', '74270'),
('74072', '74210'),
('74073', '74500'),
('74074', '74520'),
('74075', '74270'),
('74076', '74330'),
('74077', '74270'),
('74078', '74270'),
('74079', '74230'),
('74080', '74220'),
('74081', '74300'),
('74082', '74160'),
('74083', '74920'),
('74084', '74210'),
('74085', '74170'),
('74086', '74270'),
('74087', '74130'),
('74088', '74350'),
('74089', '74700'),
('74090', '74800'),
('74091', '74110'),
('74093', '74960'),
('74094', '74380'),
('74095', '74150'),
('74096', '74350'),
('74097', '74540'),
('74098', '74350'),
('74099', '74120'),
('74100', '74270'),
('74101', '74520'),
('74102', '74230'),
('74103', '74700'),
('74104', '74210'),
('74105', '74140'),
('74107', '74270'),
('74108', '74410'),
('74109', '01200'),
('74110', '74130'),
('74111', '74410'),
('74112', '74330'),
('74114', '74110'),
('74116', '74800'),
('74117', '74150'),
('74118', '74100'),
('74119', '74500'),
('74120', '74570'),
('74121', '74140'),
('74122', '74130'),
('74123', '74210'),
('74124', '74160'),
('74126', '74890'),
('74127', '74500'),
('74128', '74250'),
('74129', '74200'),
('74130', '74910'),
('74131', '74270'),
('74133', '74240'),
('74134', '74260'),
('74135', '74210'),
('74136', '74450'),
('74137', '74570'),
('74138', '74540'),
('74139', '74420'),
('74140', '74420'),
('74141', '74150'),
('74142', '74540'),
('74143', '74310'),
('74144', '74520'),
('74145', '74100'),
('74146', '74500'),
('74147', '74210'),
('74148', '74320'),
('74150', '74140'),
('74151', '74150'),
('74152', '74330'),
('74153', '74380'),
('74154', '74500'),
('74155', '74470'),
('74156', '74890'),
('74157', '74200'),
('74158', '74140'),
('74159', '74300'),
('74160', '74230'),
('74161', '74150'),
('74162', '74250'),
('74163', '74200'),
('74164', '74970'),
('74165', '74150'),
('74167', '74210'),
('74168', '74270'),
('74169', '74460'),
('74170', '74150'),
('74171', '74140'),
('74172', '74500'),
('74173', '74120'),
('74174', '74490'),
('74175', '74500'),
('74176', '74290'),
('74177', '74350'),
('74178', '74270'),
('74179', '74330'),
('74180', '74140'),
('74181', '74370'),
('74182', '74960'),
('74183', '74440'),
('74184', '74270'),
('74185', '74560'),
('74186', '74600'),
('74187', '74210'),
('74188', '74110'),
('74189', '74130'),
('74190', '74440'),
('74191', '74110'),
('74192', '74150'),
('74193', '74560'),
('74194', '74540'),
('74195', '74270'),
('74196', '74300'),
('74197', '74380'),
('74198', '74370'),
('74199', '74140'),
('74200', '74500'),
('74201', '74160'),
('74202', '74330'),
('74203', '74500'),
('74204', '74370'),
('74205', '74490'),
('74206', '74550'),
('74208', '74190'),
('74209', '74250'),
('74210', '74550'),
('74211', '74930'),
('74212', '74130'),
('74213', '74330'),
('74215', '74120'),
('74216', '74160'),
('74217', '74370'),
('74218', '74500'),
('74219', '74600'),
('74220', '74930'),
('74221', '74950'),
('74222', '74200'),
('74223', '74440'),
('74224', '74800'),
('74225', '74150'),
('74226', '74420'),
('74228', '74350'),
('74229', '74140'),
('74231', '74150'),
('74232', '74410'),
('74233', '74540'),
('74234', '74210'),
('74235', '01200'),
('74236', '74170'),
('74237', '74500'),
('74238', '74430'),
('74239', '74450'),
('74240', '74250'),
('74241', '74490'),
('74242', '74410'),
('74243', '74160'),
('74244', '74800'),
('74245', '74370'),
('74249', '74500'),
('74250', '74800'),
('74252', '74300'),
('74253', '74800'),
('74254', '74540'),
('74255', '74150'),
('74256', '74700'),
('74257', '74270'),
('74258', '74340'),
('74259', '74350'),
('74260', '74520'),
('74261', '74420'),
('74262', '74930'),
('74263', '74140'),
('74264', '74950'),
('74265', '74230'),
('74266', '74310'),
('74267', '74320'),
('74268', '74600'),
('74269', '74910'),
('74270', '74210'),
('74271', '74430'),
('74272', '74330'),
('74273', '74740'),
('74274', '74150'),
('74275', '74290'),
('74276', '74440'),
('74278', '74300'),
('74279', '74500'),
('74280', '74230'),
('74281', '74200'),
('74282', '74570'),
('74283', '74150'),
('74284', '74250'),
('74285', '74910'),
('74286', '74360'),
('74287', '74470'),
('74288', '74520'),
('74289', '74150'),
('74290', '74660'),
('74291', '74270'),
('74292', '74150'),
('74293', '74140'),
('74294', '74440'),
('74295', '74200'),
('74296', '74160'),
('74297', '74150'),
('74298', '74100'),
('74299', '74290'),
('74301', '74420'),
('74302', '74230'),
('74303', '74370'),
('74304', '74250'),
('74305', '74100'),
('74306', '74350'),
('74307', '74350'),
('74308', '74500'),
('74309', '74580'),
('74310', '74540'),
('74311', '74250'),
('74312', '74130'),
('74313', '74350'),
('74314', '74520'),
('74315', '74140'),
('81002', '81200'),
('81003', '81250'),
('81005', '81240'),
('81014', '81260'),
('81016', '81110'),
('81017', '81360'),
('81021', '81200'),
('81023', '81320'),
('81027', '81540'),
('81028', '81260'),
('81031', '81260'),
('81034', '81490'),
('81036', '81660'),
('81037', '81260'),
('81042', '81100'),
('81049', '81540'),
('81053', '81260'),
('81055', '81540'),
('81062', '81260'),
('81065', '81100'),
('81066', '81200'),
('81077', '81250'),
('81081', '81110'),
('81083', '81540'),
('81084', '81290'),
('81085', '81530'),
('81086', '81260'),
('81091', '81260'),
('81103', '81530'),
('81115', '81270'),
('81118', '81100'),
('81120', '81290'),
('81121', '81240'),
('81124', '81230'),
('81125', '81330'),
('81128', '81210'),
('81129', '81110'),
('81134', '81260'),
('81137', '81260'),
('81143', '81110'),
('81153', '81260'),
('81158', '81530'),
('81160', '81110'),
('81161', '81250'),
('81163', '81200'),
('81167', '81250'),
('81177', '81210'),
('81182', '81360'),
('81188', '81320'),
('81192', '81320'),
('81193', '81320'),
('81196', '81490'),
('81203', '81250'),
('81204', '81660'),
('81209', '81660'),
('81221', '81330'),
('81223', '81240'),
('81227', '81210'),
('81231', '81240'),
('81235', '81290'),
('81237', '81110'),
('81238', '81240'),
('81239', '81240'),
('81240', '81250'),
('81242', '81110'),
('81252', '81210'),
('81256', '81210'),
('81267', '81330'),
('81268', '81530'),
('81269', '81490'),
('81278', '81240'),
('81282', '81530'),
('81288', '81540'),
('81305', '81330'),
('81312', '81110'),
('81314', '81530'),
('81321', '81240'),
('81325', '81290'),
('83002', '83630'),
('83003', '83111'),
('83005', '83630'),
('83007', '83630'),
('83010', '83840'),
('83011', '83830'),
('83013', '83840'),
('83014', '83630'),
('83015', '83630'),
('83020', '83840'),
('83022', '83840'),
('83028', '83830'),
('83029', '83440'),
('83038', '83300'),
('83040', '83840'),
('83041', '83830'),
('83044', '83840'),
('83050', '83300'),
('83055', '83440'),
('83056', '83830'),
('83074', '83840'),
('83078', '83630'),
('83080', '83440'),
('83081', '83440'),
('83082', '83131'),
('83102', '83630'),
('83109', '83840'),
('83117', '83440'),
('83122', '83630'),
('83124', '83440'),
('83133', '83440'),
('83138', '83440'),
('83142', '83840'),
('83147', '83630'),
('84005', '84390'),
('84015', '84340'),
('84017', '84410'),
('84021', '84390'),
('84041', '84410'),
('84044', '84340'),
('84046', '84410'),
('84069', '84340'),
('84079', '84390'),
('84107', '84390'),
('84110', '84390'),
('84120', '84390'),
('84123', '84390'),
('84125', '84390'),
('87002', '87240'),
('87004', '87120'),
('87009', '87120'),
('87011', '87300'),
('87012', '87300'),
('87013', '87370'),
('87014', '87250'),
('87016', '87340'),
('87017', '87300'),
('87018', '87300'),
('87020', '87270'),
('87022', '87300'),
('87023', '87140'),
('87024', '87460'),
('87026', '87330'),
('87033', '87140'),
('87035', '87400'),
('87038', '87270'),
('87040', '87130'),
('87042', '87400'),
('87043', '87460'),
('87045', '87520'),
('87047', '87140'),
('87050', '87270'),
('87051', '87130'),
('87058', '87120'),
('87062', '87400'),
('87064', '87120'),
('87067', '87250'),
('87068', '87250'),
('87069', '87330'),
('87070', '87400'),
('87076', '87370'),
('87078', '87520'),
('87079', '87340'),
('87083', '87370'),
('87086', '87130'),
('87093', '87130'),
('87097', '87330'),
('87099', '87400'),
('87100', '87330'),
('87101', '87330'),
('87103', '87140'),
('87104', '87120'),
('87105', '87130'),
('87108', '87330'),
('87110', '87520'),
('87116', '87300'),
('87117', '87470'),
('87122', '87640'),
('87123', '87120'),
('87128', '87140'),
('87129', '87400'),
('87130', '87130'),
('87132', '87120'),
('87134', '87120'),
('87136', '87330'),
('87139', '87300'),
('87142', '87400'),
('87147', '87130'),
('87153', '87460'),
('87155', '87300'),
('87157', '87340'),
('87159', '87340'),
('87161', '87400'),
('87163', '87330'),
('87167', '87400'),
('87170', '87130'),
('87172', '87300'),
('87173', '87250'),
('87181', '87370'),
('87183', '87240'),
('87184', '87140'),
('87190', '87400'),
('87193', '87130'),
('87194', '87130'),
('87197', '87140'),
('87198', '87140'),
('87202', '87520'),
('88005', '88110'),
('88008', '88700'),
('88009', '88650'),
('88014', '88430'),
('88018', '88640'),
('88021', '88700'),
('88026', '88600'),
('88028', '88460'),
('88032', '88520'),
('88033', '88210'),
('88034', '88230'),
('88035', '88640'),
('88037', '88120'),
('88042', '88700'),
('88046', '88600'),
('88048', '88370'),
('88050', '88600'),
('88053', '88210'),
('88054', '88520'),
('88057', '88490'),
('88059', '88430'),
('88064', '88600'),
('88068', '88470'),
('88075', '88250'),
('88076', '88600'),
('88077', '88700'),
('88078', '88600'),
('88080', '88700'),
('88081', '88540'),
('88082', '88110'),
('88085', '88640'),
('88086', '88600'),
('88089', '88600'),
('88091', '88460'),
('88093', '88210'),
('88101', '88460'),
('88106', '88230'),
('88109', '88120'),
('88110', '88700'),
('88111', '88100'),
('88112', '88490'),
('88113', '88490'),
('88115', '88430'),
('88116', '88310'),
('88120', '88520'),
('88127', '88700'),
('88128', '88210'),
('88130', '88600'),
('88131', '88600'),
('88135', '88460'),
('88145', '88600'),
('88148', '88200'),
('88152', '88600'),
('88153', '88700'),
('88156', '88700'),
('88157', '88220'),
('88159', '88650'),
('88165', '88480'),
('88167', '88460'),
('88168', '88700'),
('88169', '88600'),
('88170', '88360'),
('88172', '88600'),
('88175', '88600'),
('88177', '88530'),
('88181', '88230'),
('88182', '88490'),
('88184', '88600'),
('88188', '88160'),
('88193', '88520'),
('88196', '88400'),
('88197', '88120'),
('88198', '88430'),
('88203', '88600'),
('88205', '88340'),
('88213', '88490'),
('88215', '88210'),
('88216', '88600'),
('88218', '88640'),
('88222', '88600'),
('88225', '88220'),
('88230', '88700'),
('88240', '88600'),
('88243', '88700'),
('88244', '88430'),
('88245', '88210'),
('88251', '88700'),
('88256', '88640'),
('88261', '88600'),
('88262', '88600'),
('88263', '88640'),
('88266', '88600'),
('88268', '88490'),
('88269', '88400'),
('88275', '88490'),
('88276', '88490'),
('88277', '88110'),
('88284', '88650'),
('88297', '88600'),
('88298', '88700'),
('88300', '88210'),
('88301', '88700'),
('88302', '88160'),
('88306', '88210'),
('88315', '88600'),
('88317', '88210'),
('88318', '88700'),
('88319', '88420'),
('88320', '88100'),
('88322', '88600'),
('88326', '88100'),
('88328', '88470'),
('88331', '88600'),
('88333', '88700'),
('88338', '88700'),
('88340', '88700'),
('88341', '88100'),
('88345', '88490'),
('88346', '88210'),
('88348', '88600'),
('88349', '88230'),
('88351', '88370'),
('88356', '88600'),
('88359', '88600'),
('88361', '88490'),
('88362', '88210'),
('88367', '88700'),
('88369', '88160'),
('88371', '88220'),
('88372', '88110'),
('88373', '88110'),
('88375', '88520'),
('88380', '88640'),
('88383', '88200'),
('88386', '88100'),
('88391', '88120'),
('88395', '88700'),
('88398', '88600'),
('88399', '88460'),
('88402', '88700'),
('88408', '88360'),
('88409', '88120'),
('88410', '88700'),
('88412', '88700'),
('88413', '88100'),
('88415', '88200'),
('88416', '88700'),
('88417', '88700'),
('88418', '88700'),
('88419', '88210'),
('88423', '88650'),
('88424', '88100'),
('88425', '88700'),
('88426', '88560'),
('88428', '88470'),
('88429', '88200'),
('88432', '88700'),
('88435', '88480'),
('88436', '88210'),
('88438', '88470'),
('88442', '88120'),
('88444', '88210'),
('88445', '88580'),
('88447', '88290'),
('88451', '88210'),
('88454', '88600'),
('88462', '88120'),
('88463', '88100'),
('88464', '88460'),
('88467', '88290'),
('88468', '88160'),
('88470', '88530'),
('88481', '88220'),
('88484', '88220'),
('88486', '88120'),
('88487', '88340'),
('88492', '88230'),
('88498', '88200'),
('88500', '88310'),
('88501', '88210'),
('88502', '88600'),
('88503', '88110'),
('88505', '88430'),
('88506', '88210'),
('88512', '88600'),
('88519', '88470'),
('88521', '88700'),
('88526', '88520'),
('88527', '88700'),
('88528', '88460'),
('88530', '88220'),
('88531', '88400'),
('90003', '90170'),
('90005', '90200'),
('90006', '90200'),
('90016', '90110'),
('90041', '90170'),
('90044', '90110'),
('90052', '90200'),
('90054', '90200'),
('90061', '90170'),
('90065', '90200'),
('90066', '90110'),
('90079', '90170'),
('90085', '90200'),
('90086', '90110'),
('90088', '90200'),
('90089', '90110'),
('90091', '90110'),
('90102', '90200'),
('20098', '20138'),
('20295', '20151'),
('20338', '20229'),
('20270', '20151'),
('20271', '20167'),
('20276', '20140'),
('20231', '20119'),
('20296', '20220'),
('20035', '20110'),
('20134', '20220'),
('20316', '20220'),
('20130', '20128'),
('20103', '20167'),
('20091', '20123'),
('20104', '20117'),
('20352', '20279'),
('20232', '20123'),
('20190', '20259'),
('20073', '20224'),
('20064', '20190'),
('20211', '20140'),
('20309', '20200'),
('20204', '20121'),
('20026', '20190'),
('20160', '20140'),
('20310', '20143'),
('20021', '20140'),
('20163', '20171'),
('20146', '20165'),
('20301', '20246'),
('20133', '20153'),
('20308', '20112'),
('20215', '20131'),
('20248', '20218'),
('20215', '20250'),
('20220', '20218'),
('20278', '20127'),
('20315', '20250'),
('20238', '20250'),
('20306', '20250'),
('20298', '20217'),
('20337', '20235'),
('20077', '20213'),
('20304', '20244'),
('20079', '20235'),
('20365', '20243'),
('20300', '20170'),
('20135', '20243'),
('20239', '20232'),
('20187', '20217'),
('20188', '20273'),
('20236', '20240'),
('20222', '20229'),
('20218', '20251'),
('20221', '20229'),
('20247', '20137'),
('20149', '20240'),
('20063', '20229'),
('20206', '20290'),
('20226', '20251'),
('20224', '20233'),
('20312', '20200'),
('20227', '20234'),
('20353', '20200'),
('20277', '20243'),
('20250', '20290'),
('20305', '20200'),
('20297', '20264'),
('20251', '20243'),
('20145', '20215'),
('20269', '20145'),
('20299', '20264'),
('20201', '20251'),
('20334', '20234'),
('20340', '20230'),
('20225', '20230'),
('20210', '20230'),
('20302', '20230'),
('20286', '20213'),
('20293', '20221'),
('20207', '20213'),
('20318', '20230'),
('20078', '20213'),
('20307', '20230'),
('20221', '20311'),
('20313', '20230'),
('20242', '20230'),
('20057', '20230'),
('20335', '20221'),
('20143', '20230'),
('20303', '20230'),
('38920', '38190'),
('74923', '74190'),
('74924', '74480');
/trunk/applications/doc/txt/LISEZMOI.txt
New file
0,0 → 1,26
INSTALLATION DE L'APPLICATION ODS
 
Requis :
- serveur Apache
- php (version >= 5)
- framework tela botanica (version >= 0.3)
- mysql
- Drupal 7 (peut normalement fonctionner avec d'autres cms ou en stand alone, mais ça n'est pas testé)
 
Installation
 
1) créez une base de données à l'aide du fichier ods_saisie.sql dans le dossier sql
 
2) Remplissez les informations de configuration dans les fichiers suivants :
- indiquez les informations de connexion à la base de données dans le fichier config.defaut.ini
ainsi que l'url d'installation du serveur jrest (se trouvant dans le dossier applications/jrest)
que vous renommerez en config.ini
- indiquez le chemin du framework tela botanica dans le fichier framework.defaut.php
que vous renommerez en framework.php
- configurez les fichier .htaccess et jrest.ini.defaut.php avec les informations de connexions pour jrest
renommez les également de manière adéquate en supprimant le .defaut du nom
 
3) Incluez le fichier saisie.php dans la page ou vous voulez utiliser l'application et affichez son contenu à l'aide des fonctions
définies pour chaque partie de l'application tel que dans le fichier exemple index.php
Property changes:
Added: svn:eol-style
+native
\ No newline at end of property
/trunk/applications/jrest/lib/DBAccessor.php
New file
0,0 → 1,34
<?php
require_once 'JrestService.php';
 
class DBAccessor extends JrestService {
public function connectDB($config, $base = 'database') {
require_once 'DB.php';
$dsn = $config[$base];
 
$DB =& DB::connect($dsn);
if (DB::isError($DB)) {
die($DB->getMessage());
}
$DB->query("SET NAMES 'utf8'");
return $DB;
}
public function connecterPDO($config, $base = 'database') {
$cfg = $config[$base];
$dsn = $cfg['phptype'].':dbname='.$cfg['database'].';host='.$cfg['hostspec'];
try {
$PDO = new PDO($dsn, $cfg['username'], $cfg['password']);
} catch (PDOException $e) {
echo 'La connexion à la base de donnée via PDO a échouée : ' . $e->getMessage();
}
// Passe en UTF-8 la connexion à la BDD
$PDO->exec("SET NAMES 'utf8'");
// Affiche les erreurs détectées par PDO (sinon mode silencieux => aucune erreur affiché)
$PDO->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
return $PDO;
}
}
?>
/trunk/applications/jrest/lib/JSON.php
New file
0,0 → 1,806
<?php
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
 
/**
* Converts to and from JSON format.
*
* JSON (JavaScript Object Notation) is a lightweight data-interchange
* format. It is easy for humans to read and write. It is easy for machines
* to parse and generate. It is based on a subset of the JavaScript
* Programming Language, Standard ECMA-262 3rd Edition - December 1999.
* This feature can also be found in Python. JSON is a text format that is
* completely language independent but uses conventions that are familiar
* to programmers of the C-family of languages, including C, C++, C#, Java,
* JavaScript, Perl, TCL, and many others. These properties make JSON an
* ideal data-interchange language.
*
* This package provides a simple encoder and decoder for JSON notation. It
* is intended for use with client-side Javascript applications that make
* use of HTTPRequest to perform server communication functions - data can
* be encoded into JSON notation for use in a client-side javascript, or
* decoded from incoming Javascript requests. JSON format is native to
* Javascript, and can be directly eval()'ed with no further parsing
* overhead
*
* All strings should be in ASCII or UTF-8 format!
*
* LICENSE: Redistribution and use in source and binary forms, with or
* without modification, are permitted provided that the following
* conditions are met: Redistributions of source code must retain the
* above copyright notice, this list of conditions and the following
* disclaimer. Redistributions in binary form must reproduce the above
* copyright notice, this list of conditions and the following disclaimer
* in the documentation and/or other materials provided with the
* distribution.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN
* NO EVENT SHALL CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
* INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
* BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
* OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
* TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE
* USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
* DAMAGE.
*
* @category
* @package Services_JSON
* @author Michal Migurski <mike-json@teczno.com>
* @author Matt Knapp <mdknapp[at]gmail[dot]com>
* @author Brett Stimmerman <brettstimmerman[at]gmail[dot]com>
* @copyright 2005 Michal Migurski
* @version CVS: $Id$
* @license http://www.opensource.org/licenses/bsd-license.php
* @link http://pear.php.net/pepr/pepr-proposal-show.php?id=198
*/
 
/**
* Marker constant for Services_JSON::decode(), used to flag stack state
*/
define('SERVICES_JSON_SLICE', 1);
 
/**
* Marker constant for Services_JSON::decode(), used to flag stack state
*/
define('SERVICES_JSON_IN_STR', 2);
 
/**
* Marker constant for Services_JSON::decode(), used to flag stack state
*/
define('SERVICES_JSON_IN_ARR', 3);
 
/**
* Marker constant for Services_JSON::decode(), used to flag stack state
*/
define('SERVICES_JSON_IN_OBJ', 4);
 
/**
* Marker constant for Services_JSON::decode(), used to flag stack state
*/
define('SERVICES_JSON_IN_CMT', 5);
 
/**
* Behavior switch for Services_JSON::decode()
*/
define('SERVICES_JSON_LOOSE_TYPE', 16);
 
/**
* Behavior switch for Services_JSON::decode()
*/
define('SERVICES_JSON_SUPPRESS_ERRORS', 32);
 
/**
* Converts to and from JSON format.
*
* Brief example of use:
*
* <code>
* // create a new instance of Services_JSON
* $json = new Services_JSON();
*
* // convert a complexe value to JSON notation, and send it to the browser
* $value = array('foo', 'bar', array(1, 2, 'baz'), array(3, array(4)));
* $output = $json->encode($value);
*
* print($output);
* // prints: ["foo","bar",[1,2,"baz"],[3,[4]]]
*
* // accept incoming POST data, assumed to be in JSON notation
* $input = file_get_contents('php://input', 1000000);
* $value = $json->decode($input);
* </code>
*/
class Services_JSON
{
/**
* constructs a new JSON instance
*
* @param int $use object behavior flags; combine with boolean-OR
*
* possible values:
* - SERVICES_JSON_LOOSE_TYPE: loose typing.
* "{...}" syntax creates associative arrays
* instead of objects in decode().
* - SERVICES_JSON_SUPPRESS_ERRORS: error suppression.
* Values which can't be encoded (e.g. resources)
* appear as NULL instead of throwing errors.
* By default, a deeply-nested resource will
* bubble up with an error, so all return values
* from encode() should be checked with isError()
*/
function Services_JSON($use = 0)
{
$this->use = $use;
}
 
/**
* convert a string from one UTF-16 char to one UTF-8 char
*
* Normally should be handled by mb_convert_encoding, but
* provides a slower PHP-only method for installations
* that lack the multibye string extension.
*
* @param string $utf16 UTF-16 character
* @return string UTF-8 character
* @access private
*/
function utf162utf8($utf16)
{
// oh please oh please oh please oh please oh please
if(function_exists('mb_convert_encoding')) {
return mb_convert_encoding($utf16, 'UTF-8', 'UTF-16');
}
 
$bytes = (ord($utf16{0}) << 8) | ord($utf16{1});
 
switch(true) {
case ((0x7F & $bytes) == $bytes):
// this case should never be reached, because we are in ASCII range
// see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
return chr(0x7F & $bytes);
 
case (0x07FF & $bytes) == $bytes:
// return a 2-byte UTF-8 character
// see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
return chr(0xC0 | (($bytes >> 6) & 0x1F))
. chr(0x80 | ($bytes & 0x3F));
 
case (0xFFFF & $bytes) == $bytes:
// return a 3-byte UTF-8 character
// see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
return chr(0xE0 | (($bytes >> 12) & 0x0F))
. chr(0x80 | (($bytes >> 6) & 0x3F))
. chr(0x80 | ($bytes & 0x3F));
}
 
// ignoring UTF-32 for now, sorry
return '';
}
 
/**
* convert a string from one UTF-8 char to one UTF-16 char
*
* Normally should be handled by mb_convert_encoding, but
* provides a slower PHP-only method for installations
* that lack the multibye string extension.
*
* @param string $utf8 UTF-8 character
* @return string UTF-16 character
* @access private
*/
function utf82utf16($utf8)
{
// oh please oh please oh please oh please oh please
if(function_exists('mb_convert_encoding')) {
return mb_convert_encoding($utf8, 'UTF-16', 'UTF-8');
}
 
switch(strlen($utf8)) {
case 1:
// this case should never be reached, because we are in ASCII range
// see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
return $utf8;
 
case 2:
// return a UTF-16 character from a 2-byte UTF-8 char
// see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
return chr(0x07 & (ord($utf8{0}) >> 2))
. chr((0xC0 & (ord($utf8{0}) << 6))
| (0x3F & ord($utf8{1})));
 
case 3:
// return a UTF-16 character from a 3-byte UTF-8 char
// see: http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
return chr((0xF0 & (ord($utf8{0}) << 4))
| (0x0F & (ord($utf8{1}) >> 2)))
. chr((0xC0 & (ord($utf8{1}) << 6))
| (0x7F & ord($utf8{2})));
}
 
// ignoring UTF-32 for now, sorry
return '';
}
 
/**
* encodes an arbitrary variable into JSON format
*
* @param mixed $var any number, boolean, string, array, or object to be encoded.
* see argument 1 to Services_JSON() above for array-parsing behavior.
* if var is a strng, note that encode() always expects it
* to be in ASCII or UTF-8 format!
*
* @return mixed JSON string representation of input var or an error if a problem occurs
* @access public
*/
function encode($var)
{
switch (gettype($var)) {
case 'boolean':
return $var ? 'true' : 'false';
 
case 'NULL':
return 'null';
 
case 'integer':
return (int) $var;
 
case 'double':
case 'float':
return (float) $var;
 
case 'string':
// STRINGS ARE EXPECTED TO BE IN ASCII OR UTF-8 FORMAT
$ascii = '';
$strlen_var = strlen($var);
 
/*
* Iterate over every character in the string,
* escaping with a slash or encoding to UTF-8 where necessary
*/
for ($c = 0; $c < $strlen_var; ++$c) {
 
$ord_var_c = ord($var{$c});
 
switch (true) {
case $ord_var_c == 0x08:
$ascii .= '\b';
break;
case $ord_var_c == 0x09:
$ascii .= '\t';
break;
case $ord_var_c == 0x0A:
$ascii .= '\n';
break;
case $ord_var_c == 0x0C:
$ascii .= '\f';
break;
case $ord_var_c == 0x0D:
$ascii .= '\r';
break;
 
case $ord_var_c == 0x22:
case $ord_var_c == 0x2F:
case $ord_var_c == 0x5C:
// double quote, slash, slosh
$ascii .= '\\'.$var{$c};
break;
 
case (($ord_var_c >= 0x20) && ($ord_var_c <= 0x7F)):
// characters U-00000000 - U-0000007F (same as ASCII)
$ascii .= $var{$c};
break;
 
case (($ord_var_c & 0xE0) == 0xC0):
// characters U-00000080 - U-000007FF, mask 110XXXXX
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
$char = pack('C*', $ord_var_c, ord($var{$c + 1}));
$c += 1;
$utf16 = $this->utf82utf16($char);
$ascii .= sprintf('\u%04s', bin2hex($utf16));
break;
 
case (($ord_var_c & 0xF0) == 0xE0):
// characters U-00000800 - U-0000FFFF, mask 1110XXXX
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
$char = pack('C*', $ord_var_c,
ord($var{$c + 1}),
ord($var{$c + 2}));
$c += 2;
$utf16 = $this->utf82utf16($char);
$ascii .= sprintf('\u%04s', bin2hex($utf16));
break;
 
case (($ord_var_c & 0xF8) == 0xF0):
// characters U-00010000 - U-001FFFFF, mask 11110XXX
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
$char = pack('C*', $ord_var_c,
ord($var{$c + 1}),
ord($var{$c + 2}),
ord($var{$c + 3}));
$c += 3;
$utf16 = $this->utf82utf16($char);
$ascii .= sprintf('\u%04s', bin2hex($utf16));
break;
 
case (($ord_var_c & 0xFC) == 0xF8):
// characters U-00200000 - U-03FFFFFF, mask 111110XX
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
$char = pack('C*', $ord_var_c,
ord($var{$c + 1}),
ord($var{$c + 2}),
ord($var{$c + 3}),
ord($var{$c + 4}));
$c += 4;
$utf16 = $this->utf82utf16($char);
$ascii .= sprintf('\u%04s', bin2hex($utf16));
break;
 
case (($ord_var_c & 0xFE) == 0xFC):
// characters U-04000000 - U-7FFFFFFF, mask 1111110X
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
$char = pack('C*', $ord_var_c,
ord($var{$c + 1}),
ord($var{$c + 2}),
ord($var{$c + 3}),
ord($var{$c + 4}),
ord($var{$c + 5}));
$c += 5;
$utf16 = $this->utf82utf16($char);
$ascii .= sprintf('\u%04s', bin2hex($utf16));
break;
}
}
 
return '"'.$ascii.'"';
 
case 'array':
/*
* As per JSON spec if any array key is not an integer
* we must treat the the whole array as an object. We
* also try to catch a sparsely populated associative
* array with numeric keys here because some JS engines
* will create an array with empty indexes up to
* max_index which can cause memory issues and because
* the keys, which may be relevant, will be remapped
* otherwise.
*
* As per the ECMA and JSON specification an object may
* have any string as a property. Unfortunately due to
* a hole in the ECMA specification if the key is a
* ECMA reserved word or starts with a digit the
* parameter is only accessible using ECMAScript's
* bracket notation.
*/
 
// treat as a JSON object
if (is_array($var) && count($var) && (array_keys($var) !== range(0, sizeof($var) - 1))) {
$properties = array_map(array($this, 'name_value'),
array_keys($var),
array_values($var));
 
foreach($properties as $property) {
if(Services_JSON::isError($property)) {
return $property;
}
}
 
return '{' . join(',', $properties) . '}';
}
 
// treat it like a regular array
$elements = array_map(array($this, 'encode'), $var);
 
foreach($elements as $element) {
if(Services_JSON::isError($element)) {
return $element;
}
}
 
return '[' . join(',', $elements) . ']';
 
case 'object':
$vars = get_object_vars($var);
 
$properties = array_map(array($this, 'name_value'),
array_keys($vars),
array_values($vars));
 
foreach($properties as $property) {
if(Services_JSON::isError($property)) {
return $property;
}
}
 
return '{' . join(',', $properties) . '}';
 
default:
return ($this->use & SERVICES_JSON_SUPPRESS_ERRORS)
? 'null'
: new Services_JSON_Error(gettype($var)." can not be encoded as JSON string");
}
}
 
/**
* array-walking function for use in generating JSON-formatted name-value pairs
*
* @param string $name name of key to use
* @param mixed $value reference to an array element to be encoded
*
* @return string JSON-formatted name-value pair, like '"name":value'
* @access private
*/
function name_value($name, $value)
{
$encoded_value = $this->encode($value);
 
if(Services_JSON::isError($encoded_value)) {
return $encoded_value;
}
 
return $this->encode(strval($name)) . ':' . $encoded_value;
}
 
/**
* reduce a string by removing leading and trailing comments and whitespace
*
* @param $str string string value to strip of comments and whitespace
*
* @return string string value stripped of comments and whitespace
* @access private
*/
function reduce_string($str)
{
$str = preg_replace(array(
 
// eliminate single line comments in '// ...' form
'#^\s*//(.+)$#m',
 
// eliminate multi-line comments in '/* ... */' form, at start of string
'#^\s*/\*(.+)\*/#Us',
 
// eliminate multi-line comments in '/* ... */' form, at end of string
'#/\*(.+)\*/\s*$#Us'
 
), '', $str);
 
// eliminate extraneous space
return trim($str);
}
 
/**
* decodes a JSON string into appropriate variable
*
* @param string $str JSON-formatted string
*
* @return mixed number, boolean, string, array, or object
* corresponding to given JSON input string.
* See argument 1 to Services_JSON() above for object-output behavior.
* Note that decode() always returns strings
* in ASCII or UTF-8 format!
* @access public
*/
function decode($str)
{
$str = $this->reduce_string($str);
 
switch (strtolower($str)) {
case 'true':
return true;
 
case 'false':
return false;
 
case 'null':
return null;
 
default:
$m = array();
 
if (is_numeric($str)) {
// Lookie-loo, it's a number
 
// This would work on its own, but I'm trying to be
// good about returning integers where appropriate:
// return (float)$str;
 
// Return float or int, as appropriate
return ((float)$str == (integer)$str)
? (integer)$str
: (float)$str;
 
} elseif (preg_match('/^("|\').*(\1)$/s', $str, $m) && $m[1] == $m[2]) {
// STRINGS RETURNED IN UTF-8 FORMAT
$delim = substr($str, 0, 1);
$chrs = substr($str, 1, -1);
$utf8 = '';
$strlen_chrs = strlen($chrs);
 
for ($c = 0; $c < $strlen_chrs; ++$c) {
 
$substr_chrs_c_2 = substr($chrs, $c, 2);
$ord_chrs_c = ord($chrs{$c});
 
switch (true) {
case $substr_chrs_c_2 == '\b':
$utf8 .= chr(0x08);
++$c;
break;
case $substr_chrs_c_2 == '\t':
$utf8 .= chr(0x09);
++$c;
break;
case $substr_chrs_c_2 == '\n':
$utf8 .= chr(0x0A);
++$c;
break;
case $substr_chrs_c_2 == '\f':
$utf8 .= chr(0x0C);
++$c;
break;
case $substr_chrs_c_2 == '\r':
$utf8 .= chr(0x0D);
++$c;
break;
 
case $substr_chrs_c_2 == '\\"':
case $substr_chrs_c_2 == '\\\'':
case $substr_chrs_c_2 == '\\\\':
case $substr_chrs_c_2 == '\\/':
if (($delim == '"' && $substr_chrs_c_2 != '\\\'') ||
($delim == "'" && $substr_chrs_c_2 != '\\"')) {
$utf8 .= $chrs{++$c};
}
break;
 
case preg_match('/\\\u[0-9A-F]{4}/i', substr($chrs, $c, 6)):
// single, escaped unicode character
$utf16 = chr(hexdec(substr($chrs, ($c + 2), 2)))
. chr(hexdec(substr($chrs, ($c + 4), 2)));
$utf8 .= $this->utf162utf8($utf16);
$c += 5;
break;
 
case ($ord_chrs_c >= 0x20) && ($ord_chrs_c <= 0x7F):
$utf8 .= $chrs{$c};
break;
 
case ($ord_chrs_c & 0xE0) == 0xC0:
// characters U-00000080 - U-000007FF, mask 110XXXXX
//see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
$utf8 .= substr($chrs, $c, 2);
++$c;
break;
 
case ($ord_chrs_c & 0xF0) == 0xE0:
// characters U-00000800 - U-0000FFFF, mask 1110XXXX
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
$utf8 .= substr($chrs, $c, 3);
$c += 2;
break;
 
case ($ord_chrs_c & 0xF8) == 0xF0:
// characters U-00010000 - U-001FFFFF, mask 11110XXX
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
$utf8 .= substr($chrs, $c, 4);
$c += 3;
break;
 
case ($ord_chrs_c & 0xFC) == 0xF8:
// characters U-00200000 - U-03FFFFFF, mask 111110XX
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
$utf8 .= substr($chrs, $c, 5);
$c += 4;
break;
 
case ($ord_chrs_c & 0xFE) == 0xFC:
// characters U-04000000 - U-7FFFFFFF, mask 1111110X
// see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8
$utf8 .= substr($chrs, $c, 6);
$c += 5;
break;
 
}
 
}
 
return $utf8;
 
} elseif (preg_match('/^\[.*\]$/s', $str) || preg_match('/^\{.*\}$/s', $str)) {
// array, or object notation
 
if ($str{0} == '[') {
$stk = array(SERVICES_JSON_IN_ARR);
$arr = array();
} else {
if ($this->use & SERVICES_JSON_LOOSE_TYPE) {
$stk = array(SERVICES_JSON_IN_OBJ);
$obj = array();
} else {
$stk = array(SERVICES_JSON_IN_OBJ);
$obj = new stdClass();
}
}
 
array_push($stk, array('what' => SERVICES_JSON_SLICE,
'where' => 0,
'delim' => false));
 
$chrs = substr($str, 1, -1);
$chrs = $this->reduce_string($chrs);
 
if ($chrs == '') {
if (reset($stk) == SERVICES_JSON_IN_ARR) {
return $arr;
 
} else {
return $obj;
 
}
}
 
//print("\nparsing {$chrs}\n");
 
$strlen_chrs = strlen($chrs);
 
for ($c = 0; $c <= $strlen_chrs; ++$c) {
 
$top = end($stk);
$substr_chrs_c_2 = substr($chrs, $c, 2);
 
if (($c == $strlen_chrs) || (($chrs{$c} == ',') && ($top['what'] == SERVICES_JSON_SLICE))) {
// found a comma that is not inside a string, array, etc.,
// OR we've reached the end of the character list
$slice = substr($chrs, $top['where'], ($c - $top['where']));
array_push($stk, array('what' => SERVICES_JSON_SLICE, 'where' => ($c + 1), 'delim' => false));
//print("Found split at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n");
 
if (reset($stk) == SERVICES_JSON_IN_ARR) {
// we are in an array, so just push an element onto the stack
array_push($arr, $this->decode($slice));
 
} elseif (reset($stk) == SERVICES_JSON_IN_OBJ) {
// we are in an object, so figure
// out the property name and set an
// element in an associative array,
// for now
$parts = array();
if (preg_match('/^\s*(["\'].*[^\\\]["\'])\s*:\s*(\S.*),?$/Uis', $slice, $parts)) {
// "name":value pair
$key = $this->decode($parts[1]);
$val = $this->decode($parts[2]);
 
if ($this->use & SERVICES_JSON_LOOSE_TYPE) {
$obj[$key] = $val;
} else {
$obj->$key = $val;
}
} elseif (preg_match('/^\s*(\w+)\s*:\s*(\S.*),?$/Uis', $slice, $parts)) {
// name:value pair, where name is unquoted
$key = $parts[1];
$val = $this->decode($parts[2]);
 
if ($this->use & SERVICES_JSON_LOOSE_TYPE) {
$obj[$key] = $val;
} else {
$obj->$key = $val;
}
}
 
}
 
} elseif ((($chrs{$c} == '"') || ($chrs{$c} == "'")) && ($top['what'] != SERVICES_JSON_IN_STR)) {
// found a quote, and we are not inside a string
array_push($stk, array('what' => SERVICES_JSON_IN_STR, 'where' => $c, 'delim' => $chrs{$c}));
//print("Found start of string at {$c}\n");
 
} elseif (($chrs{$c} == $top['delim']) &&
($top['what'] == SERVICES_JSON_IN_STR) &&
((strlen(substr($chrs, 0, $c)) - strlen(rtrim(substr($chrs, 0, $c), '\\'))) % 2 != 1)) {
// found a quote, we're in a string, and it's not escaped
// we know that it's not escaped becase there is _not_ an
// odd number of backslashes at the end of the string so far
array_pop($stk);
//print("Found end of string at {$c}: ".substr($chrs, $top['where'], (1 + 1 + $c - $top['where']))."\n");
 
} elseif (($chrs{$c} == '[') &&
in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) {
// found a left-bracket, and we are in an array, object, or slice
array_push($stk, array('what' => SERVICES_JSON_IN_ARR, 'where' => $c, 'delim' => false));
//print("Found start of array at {$c}\n");
 
} elseif (($chrs{$c} == ']') && ($top['what'] == SERVICES_JSON_IN_ARR)) {
// found a right-bracket, and we're in an array
array_pop($stk);
//print("Found end of array at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n");
 
} elseif (($chrs{$c} == '{') &&
in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) {
// found a left-brace, and we are in an array, object, or slice
array_push($stk, array('what' => SERVICES_JSON_IN_OBJ, 'where' => $c, 'delim' => false));
//print("Found start of object at {$c}\n");
 
} elseif (($chrs{$c} == '}') && ($top['what'] == SERVICES_JSON_IN_OBJ)) {
// found a right-brace, and we're in an object
array_pop($stk);
//print("Found end of object at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n");
 
} elseif (($substr_chrs_c_2 == '/*') &&
in_array($top['what'], array(SERVICES_JSON_SLICE, SERVICES_JSON_IN_ARR, SERVICES_JSON_IN_OBJ))) {
// found a comment start, and we are in an array, object, or slice
array_push($stk, array('what' => SERVICES_JSON_IN_CMT, 'where' => $c, 'delim' => false));
$c++;
//print("Found start of comment at {$c}\n");
 
} elseif (($substr_chrs_c_2 == '*/') && ($top['what'] == SERVICES_JSON_IN_CMT)) {
// found a comment end, and we're in one now
array_pop($stk);
$c++;
 
for ($i = $top['where']; $i <= $c; ++$i)
$chrs = substr_replace($chrs, ' ', $i, 1);
 
//print("Found end of comment at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n");
 
}
 
}
 
if (reset($stk) == SERVICES_JSON_IN_ARR) {
return $arr;
 
} elseif (reset($stk) == SERVICES_JSON_IN_OBJ) {
return $obj;
 
}
 
}
}
}
 
/**
* @todo Ultimately, this should just call PEAR::isError()
*/
function isError($data, $code = null)
{
if (class_exists('pear')) {
return PEAR::isError($data, $code);
} elseif (is_object($data) && (get_class($data) == 'services_json_error' ||
is_subclass_of($data, 'services_json_error'))) {
return true;
}
 
return false;
}
}
 
if (class_exists('PEAR_Error')) {
 
class Services_JSON_Error extends PEAR_Error
{
function Services_JSON_Error($message = 'unknown error', $code = null,
$mode = null, $options = null, $userinfo = null)
{
parent::PEAR_Error($message, $code, $mode, $options, $userinfo);
}
}
 
} else {
 
/**
* @todo Ultimately, this class shall be descended from PEAR_Error
*/
class Services_JSON_Error
{
function Services_JSON_Error($message = 'unknown error', $code = null,
$mode = null, $options = null, $userinfo = null)
{
 
}
}
 
}
?>
/trunk/applications/jrest/lib/PDF.php
New file
0,0 → 1,3001
<?php
/**
* File_PDF::
*
* The File_PDF:: class provides a PHP-only implementation of a PDF library.
* No external libs or PHP extensions are required.
*
* Based on the FPDF class by Olivier Plathey (http://www.fpdf.org).
*
* Copyright 2001-2003 Olivier Plathey <olivier@fpdf.org>
* Copyright 2003-2007 The Horde Project (http://www.horde.org/)
*
* See the enclosed file COPYING for license information (LGPL). If you
* did not receive this file, see http://www.fsf.org/copyleft/lgpl.html.
*
* $Horde: framework/File_PDF/PDF.php,v 1.48 2007/01/05 13:12:21 jan Exp $
*
* @author Olivier Plathey <olivier@fpdf.org>
* @author Marko Djukic <marko@oblo.com>
* @author Jan Schneider <jan@horde.org>
* @package File_PDF
* @category Fileformats
*/
class File_PDF {
 
/**
* Current page number.
*
* @var integer
*/
var $_page = 0;
 
/**
* Current object number.
*
* @var integer
*/
var $_n = 2;
 
/**
* Array of object offsets.
*
* @var array
*/
var $_offsets = array();
 
/**
* Buffer holding in-memory PDF.
*
* @var string
*/
var $_buffer = '';
 
/**
* Array containing the pages.
*
* @var array
*/
var $_pages = array();
 
/**
* Current document state.
* 0 - initial state
* 1 - document opened
* 2 - page opened
* 3 - document closed
*
* @var integer
*/
var $_state = 0;
 
/**
* Flag indicating if PDF file is to be compressed or not.
*
* @var boolean
*/
var $_compress;
 
/**
* The default page orientation.
*
* @var string
*/
var $_default_orientation;
 
/**
* The current page orientation.
*
* @var string
*/
var $_current_orientation;
 
/**
* Array indicating orientation changes.
*
* @var array
*/
var $_orientation_changes = array();
 
/**
* Current width of page format in points.
*
* @var float
*/
var $fwPt;
 
/**
* Current height of page format in points.
*
* @var float
*/
var $fhPt;
 
/**
* Current width of page format in user units.
*
* @var float
*/
var $fw;
 
/**
* Current height of page format in user units.
*
* @var float
*/
var $fh;
 
/**
* Current width of page in points.
*
* @var float
*/
var $wPt;
 
/**
* Current height of page in points.
*
* @var float
*/
var $hPt;
 
/**
* Current width of page in user units
*
* @var float
*/
var $w;
 
/**
* Current height of page in user units
*
* @var float
*/
var $h;
 
/**
* Scale factor (number of points in user units).
*
* @var float
*/
var $_scale;
 
/**
* Left page margin size.
*
* @var float
*/
var $_left_margin;
 
/**
* Top page margin size.
*
* @var float
*/
var $_top_margin;
 
/**
* Right page margin size.
*
* @var float
*/
var $_right_margin;
 
/**
* Break page margin size, the bottom margin which triggers a page break.
*
* @var float
*/
var $_break_margin;
 
/**
* Cell margin size.
*
* @var float
*/
var $_cell_margin;
 
/**
* The current horizontal position for cell positioning.
* Value is set in user units and is calculated from the top left corner
* as origin.
*
* @var float
*/
var $x;
 
/**
* The current vertical position for cell positioning.
* Value is set in user units and is calculated from the top left corner
* as origin.
*
* @var float
*/
var $y;
 
/**
* The height of the last cell printed.
*
* @var float
*/
var $_last_height;
 
/**
* Line width in user units.
*
* @var float
*/
var $_line_width;
 
/**
* An array of standard font names.
*
* @var array
*/
var $_core_fonts = array('courier' => 'Courier',
'courierB' => 'Courier-Bold',
'courierI' => 'Courier-Oblique',
'courierBI' => 'Courier-BoldOblique',
'helvetica' => 'Helvetica',
'helveticaB' => 'Helvetica-Bold',
'helveticaI' => 'Helvetica-Oblique',
'helveticaBI' => 'Helvetica-BoldOblique',
'times' => 'Times-Roman',
'timesB' => 'Times-Bold',
'timesI' => 'Times-Italic',
'timesBI' => 'Times-BoldItalic',
'symbol' => 'Symbol',
'zapfdingbats' => 'ZapfDingbats');
 
/**
* An array of used fonts.
*
* @var array
*/
var $_fonts = array();
 
/**
* An array of font files.
*
* @var array
*/
var $_font_files = array();
 
/**
* An array of encoding differences.
*
* @var array
*/
var $_diffs = array();
 
/**
* An array of used images.
*
* @var array
*/
var $_images = array();
 
/**
* An array of links in pages.
*
* @var array
*/
var $_page_links;
 
/**
* An array of internal links.
*
* @var array
*/
var $_links = array();
 
/**
* Current font family.
*
* @var string
*/
var $_font_family = '';
 
/**
* Current font style.
*
* @var string
*/
var $_font_style = '';
 
/**
* Underlining flag.
*
* @var boolean
*/
var $_underline = false;
 
/**
* An array containing current font info.
*
* @var array
*/
var $_current_font;
 
/**
* Current font size in points.
*
* @var float
*/
var $_font_size_pt = 12;
 
/**
* Current font size in user units.
*
* @var float
*/
var $_font_size;
 
/**
* Commands for filling color.
*
* @var string
*/
var $_fill_color = '0 g';
 
/**
* Commands for text color.
*
* @var string
*/
var $_text_color = '0 g';
 
/**
* Whether text color is different from fill color.
*
* @var boolean
*/
var $_color_flag = false;
 
/**
* Commands for drawing color.
*
* @var string
*/
var $_draw_color = '0 G';
 
/**
* Word spacing.
*
* @var integer
*/
var $_word_spacing = 0;
 
/**
* Automatic page breaking.
*
* @var boolean
*/
var $_auto_page_break;
 
/**
* Threshold used to trigger page breaks.
*
* @var float
*/
var $_page_break_trigger;
 
/**
* Flag set when processing footer.
*
* @var boolean
*/
var $_in_footer = false;
 
/**
* Zoom display mode.
*
* @var string
*/
var $_zoom_mode;
 
/**
* Layout display mode.
*
* @var string
*/
var $_layout_mode;
 
/**
* An array containing the document info, consisting of:
* - title
* - subject
* - author
* - keywords
* - creator
*
* @var array
*/
var $_info = array();
 
/**
* Alias for total number of pages.
*
* @var string
*/
var $_alias_nb_pages = '{nb}';
 
/**
* Attempts to return a conrete PDF instance. It allows to set up the page
* format, the orientation and the units of measurement used in all the
* methods (except for the font sizes).
*
* Example:<pre>
* $pdf = &File_PDF::factory(array('orientation' => 'P',
* 'unit' => 'mm',
* 'format' => 'A4'));</pre>
*
* @param array $params A hash with parameters for the created PDF object.
* Possible parameters are:
* orientation - Default page orientation. Possible
* values are (case insensitive):
* <pre>
* - P or Portrait (default)
* - L or Landscape
* </pre>
* unit - User measure units. Possible values values
* are:
* <pre>
* - pt: point
* - mm: millimeter (default)
* - cm: centimeter
* - in: inch
* </pre>
* A point equals 1/72 of inch, that is to say about
* 0.35 mm (an inch being 2.54 cm). This is a very
* common unit in typography; font sizes are
* expressed in that unit.
* format - The format used for pages. It can be
* either one of the following values (case
* insensitive):
* <pre>
* - A3
* - A4 (default)
* - A5
* - Letter
* - Legal
* </pre>
* or a custom format in the form of a two-element
* array containing the width and the height
* (expressed in the unit given by the unit
* parameter).
* @param string $class The concrete class name to return an instance of.
* Defaults to File_PDF.
*/
function &factory($params = array(), $class = 'File_PDF')
{
/* Check for PHP locale-related bug. */
if (1.1 == 1) {
$error = File_PDF::raiseError('Do not alter the locale before including the class file.');
return $error;
}
 
/* Default parameters. */
$defaults = array('orientation' => 'P', 'unit' => 'mm', 'format' => 'A4');
 
/* Backward compatibility with old method signature. */
/* Should be removed a few versions later. */
if (!is_array($params)) {
$class = 'File_PDF';
$params = $defaults;
$names = array_keys($defaults);
for ($i = 0; $i < func_num_args(); $i++) {
$params[$names[$i]] = func_get_arg($i);
}
} else {
$params = array_merge($defaults, $params);
}
 
/* Create the PDF object. */
$pdf = new $class();
 
/* Scale factor. */
if ($params['unit'] == 'pt') {
$pdf->_scale = 1;
} elseif ($params['unit'] == 'mm') {
$pdf->_scale = 72 / 25.4;
} elseif ($params['unit'] == 'cm') {
$pdf->_scale = 72 / 2.54;
} elseif ($params['unit'] == 'in') {
$pdf->_scale = 72;
} else {
$error = File_PDF::raiseError(sprintf('Incorrect units: %s', $params['unit']));
return $error;
}
/* Page format. */
if (is_string($params['format'])) {
$params['format'] = strtolower($params['format']);
if ($params['format'] == 'a3') {
$params['format'] = array(841.89, 1190.55);
} elseif ($params['format'] == 'a4') {
$params['format'] = array(595.28, 841.89);
} elseif ($params['format'] == 'a5') {
$params['format'] = array(420.94, 595.28);
} elseif ($params['format'] == 'letter') {
$params['format'] = array(612, 792);
} elseif ($params['format'] == 'legal') {
$params['format'] = array(612, 1008);
} else {
$error = File_PDF::raiseError(sprintf('Unknown page format: %s', $params['format']));
return $error;
}
$pdf->fwPt = $params['format'][0];
$pdf->fhPt = $params['format'][1];
} else {
$pdf->fwPt = $params['format'][0] * $pdf->_scale;
$pdf->fhPt = $params['format'][1] * $pdf->_scale;
}
$pdf->fw = $pdf->fwPt / $pdf->_scale;
$pdf->fh = $pdf->fhPt / $pdf->_scale;
 
/* Page orientation. */
$params['orientation'] = strtolower($params['orientation']);
if ($params['orientation'] == 'p' || $params['orientation'] == 'portrait') {
$pdf->_default_orientation = 'P';
$pdf->wPt = $pdf->fwPt;
$pdf->hPt = $pdf->fhPt;
} elseif ($params['orientation'] == 'l' || $params['orientation'] == 'landscape') {
$pdf->_default_orientation = 'L';
$pdf->wPt = $pdf->fhPt;
$pdf->hPt = $pdf->fwPt;
} else {
$error = File_PDF::raiseError(sprintf('Incorrect orientation: %s', $params['orientation']));
return $error;
}
$pdf->_current_orientation = $pdf->_default_orientation;
$pdf->w = $pdf->wPt / $pdf->_scale;
$pdf->h = $pdf->hPt / $pdf->_scale;
 
/* Page margins (1 cm) */
$margin = 28.35 / $pdf->_scale;
$pdf->setMargins($margin, $margin);
 
/* Interior cell margin (1 mm) */
$pdf->_cell_margin = $margin / 10;
 
/* Line width (0.2 mm) */
$pdf->_line_width = .567 / $pdf->_scale;
 
/* Automatic page break */
$pdf->setAutoPageBreak(true, 2 * $margin);
 
/* Full width display mode */
$pdf->setDisplayMode('fullwidth');
 
/* Compression */
$pdf->setCompression(true);
 
return $pdf;
}
 
/**
* Returns a PEAR_Error object. Wraps around PEAR::raiseError() to
* avoid having to include PEAR.php unless an error occurs.
*
* @param mixed $error The error message.
*
* @return object PEAR_Error
*/
function raiseError($error)
{
require_once 'PEAR.php';
return PEAR::raiseError($error);
}
 
/**
* Defines the left, top and right margins. By default, they equal 1 cm.
* Call this method to change them.
*
* @param float $left Left margin.
* @param float $top Top margin.
* @param float $right Right margin. If not specified default to the value
* of the left one.
*
* @see File_PDF::setAutoPageBreak
* @see File_PDF::setLeftMargin
* @see File_PDF::setRightMargin
* @see File_PDF::setTopMargin
*/
function setMargins($left, $top, $right = null)
{
/* Set left and top margins. */
$this->_left_margin = $left;
$this->_top_margin = $top;
/* If no right margin set default to same as left. */
$this->_right_margin = (is_null($right) ? $left : $right);
}
 
/**
* Defines the left margin. The method can be called before creating the
* first page.
* If the current abscissa gets out of page, it is brought back to the
* margin.
*
* @param float $margin The margin.
*
* @see File_PDF::setAutoPageBreak
* @see File_PDF::setMargins
* @see File_PDF::setRightMargin
* @see File_PDF::setTopMargin
*/
function setLeftMargin($margin)
{
$this->_left_margin = $margin;
/* If there is a current page and the current X position is less than
* margin set the X position to the margin value. */
if ($this->_page > 0 && $this->x < $margin) {
$this->x = $margin;
}
}
 
/**
* Defines the top margin. The method can be called before creating the
* first page.
*
* @param float $margin The margin.
*/
function setTopMargin($margin)
{
$this->_top_margin = $margin;
}
 
/**
* Defines the right margin. The method can be called before creating the
* first page.
*
* @param float $margin The margin.
*/
function setRightMargin($margin)
{
$this->_right_margin = $margin;
}
 
/**
* Returns the actual page width.
*
* @since File_PDF 0.2.0
* @since Horde 3.2
*
* @return float The page width.
*/
function getPageWidth()
{
return ($this->w - $this->_right_margin - $this->_left_margin);
}
 
/**
* Returns the actual page height.
*
* @since File_PDF 0.2.0
* @since Horde 3.2
*
* @return float The page height.
*/
function getPageHeight()
{
return ($this->h - $this->_top_margin - $this->_break_margin);
}
 
/**
* Enables or disables the automatic page breaking mode. When enabling,
* the second parameter is the distance from the bottom of the page that
* defines the triggering limit. By default, the mode is on and the margin
* is 2 cm.
*
* @param boolean auto Boolean indicating if mode should be on or off.
* @param float $margin Distance from the bottom of the page.
*/
function setAutoPageBreak($auto, $margin = 0)
{
$this->_auto_page_break = $auto;
$this->_break_margin = $margin;
$this->_page_break_trigger = $this->h - $margin;
}
 
/**
* Defines the way the document is to be displayed by the viewer. The zoom
* level can be set: pages can be displayed entirely on screen, occupy the
* full width of the window, use real size, be scaled by a specific
* zooming factor or use viewer default (configured in the Preferences
* menu of Acrobat). The page layout can be specified too: single at once,
* continuous display, two columns or viewer default.
* By default, documents use the full width mode with continuous display.
*
* @param mixed $zoom The zoom to use. It can be one of the
* following string values:
* - fullpage: entire page on screen
* - fullwidth: maximum width of window
* - real: uses real size (100% zoom)
* - default: uses viewer default mode
* or a number indicating the zooming factor.
* @param string layout The page layout. Possible values are:
* - single: one page at once
* - continuous: pages in continuously
* - two: two pages on two columns
* - default: uses viewer default mode
* Default value is continuous.
*/
function setDisplayMode($zoom, $layout = 'continuous')
{
$zoom = strtolower($zoom);
if ($zoom == 'fullpage' || $zoom == 'fullwidth' || $zoom == 'real'
|| $zoom == 'default' || !is_string($zoom)) {
$this->_zoom_mode = $zoom;
} elseif ($zoom == 'zoom') {
$this->_zoom_mode = $layout;
} else {
return $this->raiseError(sprintf('Incorrect zoom display mode: %s', $zoom));
}
 
$layout = strtolower($layout);
if ($layout == 'single' || $layout == 'continuous' || $layout == 'two'
|| $layout == 'default') {
$this->_layout_mode = $layout;
} elseif ($zoom != 'zoom') {
return $this->raiseError(sprintf('Incorrect layout display mode: %s', $layout));
}
}
 
/**
* Activates or deactivates page compression. When activated, the internal
* representation of each page is compressed, which leads to a compression
* ratio of about 2 for the resulting document.
* Compression is on by default.
* Note: the Zlib extension is required for this feature. If not present,
* compression will be turned off.
*
* @param boolean $compress Boolean indicating if compression must be
* enabled or not.
*/
function setCompression($compress)
{
/* If no gzcompress function is available then default to false. */
$this->_compress = (function_exists('gzcompress') ? $compress : false);
}
 
/**
* Set the info to a document. Possible info settings are:
* - title
* - subject
* - author
* - keywords
* - creator
*
* @param mixed $info If passed as an array then the complete hash
* containing the info to be inserted into the
* document. Otherwise the name of setting to be set.
* @param string $value The value of the setting.
*/
function setInfo($info, $value = '')
{
if (is_array($info)) {
$this->_info = $info;
} else {
$this->_info[$info] = $value;
}
}
 
/**
* Defines an alias for the total number of pages. It will be substituted
* as the document is closed.
*
* Example:
* class My_File_PDF extends File_PDF {
* function footer()
* {
* // Go to 1.5 cm from bottom
* $this->setY(-15);
* // Select Arial italic 8
* $this->setFont('Arial', 'I', 8);
* // Print current and total page numbers
* $this->cell(0, 10, 'Page ' . $this->getPageNo() . '/{nb}', 0,
* 0, 'C');
* }
* }
* $pdf = &My_File_PDF::factory();
* $pdf->aliasNbPages();
*
* @param string $alias The alias. Default value: {nb}.
*
* @see File_PDF::getPageNo
* @see File_PDF::footer
*/
function aliasNbPages($alias = '{nb}')
{
$this->_alias_nb_pages = $alias;
}
 
/**
* This method begins the generation of the PDF document; it must be
* called before any output commands. No page is created by this method,
* therefore it is necessary to call File_PDF::addPage.
*
* @see File_PDF::addPage
* @see File_PDF::close
*/
function open()
{
$this->_beginDoc();
}
 
/**
* Terminates the PDF document. It is not necessary to call this method
* explicitly because File_PDF::output does it automatically.
* If the document contains no page, File_PDF::addPage is called to prevent
* from getting an invalid document.
*
* @see File_PDF::open
* @see File_PDF::output
*/
function close()
{
/* Terminate document */
if ($this->_page == 0) {
$this->addPage();
}
/* Page footer */
$this->_in_footer = true;
$this->footer();
$this->_in_footer = false;
/* Close page */
$this->_endPage();
/* Close document */
$this->_endDoc();
}
 
/**
* Adds a new page to the document. If a page is already present, the
* File_PDF::footer method is called first to output the footer. Then the
* page is added, the current position set to the top-left corner according
* to the left and top margins, and File_PDF::header is called to display
* the header.
* The font which was set before calling is automatically restored. There
* is no need to call File_PDF::setFont again if you want to continue with
* the same font. The same is true for colors and line width.
* The origin of the coordinate system is at the top-left corner and
* increasing ordinates go downwards.
*
* @param string $orientation Page orientation. Possible values
* are (case insensitive):
* - P or Portrait
* - L or Landscape
* The default value is the one passed to the
* constructor.
*
* @see File_PDF::PDF
* @see File_PDF::header
* @see File_PDF::footer
* @see File_PDF::setMargins
*/
function addPage($orientation = '')
{
/* For good measure make sure this is called. */
$this->_beginDoc();
 
/* Save style settings so that they are not overridden by footer(). */
$lw = $this->_line_width;
$dc = $this->_draw_color;
$fc = $this->_fill_color;
$tc = $this->_text_color;
$cf = $this->_color_flag;
if ($this->_page > 0) {
/* Page footer. */
$this->_in_footer = true;
$this->footer();
$this->_in_footer = false;
/* Close page. */
$this->_endPage();
}
/* Start new page. */
$this->_beginPage($orientation);
/* Set line cap style to square. */
$this->_out('2 J');
/* Set line width. */
$this->_line_width = $lw;
$this->_out(sprintf('%.2f w', $lw * $this->_scale));
/* Set font for the beginning of the page. */
$font_family = null;
if ($this->_font_family) {
$font_family = $this->_font_family;
$font_style = $this->_font_style . ($this->_underline ? 'U' : '');
$font_size = $this->_font_size_pt;
$this->setFont($font_family, $font_style, $font_size);
}
/* Set colors. */
$this->_fill_color = $fc;
/* Check if fill color has been set before this page. */
if ($this->_fill_color != '0 g') {
$this->_out($this->_fill_color);
}
$this->_draw_color = $dc;
/* Check if draw color has been set before this page. */
if ($this->_draw_color != '0 G') {
$this->_out($this->_draw_color);
}
$this->_text_color = $tc;
$this->_color_flag = $cf;
/* Page header. */
$this->header();
/* Restore line width. */
if ($this->_line_width != $lw) {
$this->_line_width = $lw;
$this->_out(sprintf('%.2f w', $lw * $this->_scale));
}
/* Make sure the font is set for this page as it was before the
* header. */
if ($font_family) {
$this->setFont($font_family, $font_style, $font_size, true);
}
/* Restore colors. */
if ($this->_draw_color != $dc) {
$this->_draw_color = $dc;
$this->_out($dc);
}
if ($this->_fill_color != $fc) {
$this->_fill_color = $fc;
$this->_out($fc);
}
$this->_text_color = $tc;
$this->_color_flag = $cf;
}
 
/**
* This method is used to render the page header. It is automatically
* called by File_PDF::addPage and should not be called directly by the
* application. The implementation in File_PDF:: is empty, so you have to
* subclass it and override the method if you want a specific processing.
*
* Example:
*
* class My_File_PDF extends File_PDF {
* function header()
* {
* // Select Arial bold 15
* $this->setFont('Arial', 'B', 15);
* // Move to the right
* $this->cell(80);
* // Framed title
* $this->cell(30, 10, 'Title', 1, 0, 'C');
* // Line break
* $this->newLine(20);
* }
* }
*
* @see File_PDF::footer
*/
function header()
{
/* To be implemented in your own inherited class. */
}
 
/**
* This method is used to render the page footer. It is automatically
* called by File_PDF::addPage and File_PDF::close and should not be called
* directly by the application. The implementation in File_PDF:: is empty,
* so you have to subclass it and override the method if you want a specific
* processing.
*
* Example:
*
* class My_File_PDF extends File_PDF {
* function footer()
* {
* // Go to 1.5 cm from bottom
* $this->setY(-15);
* // Select Arial italic 8
* $this->setFont('Arial', 'I', 8);
* // Print centered page number
* $this->cell(0, 10, 'Page ' . $this->getPageNo(), 0, 0, 'C');
* }
* }
*
* @see File_PDF::header
*/
function footer()
{
/* To be implemented in your own inherited class. */
}
 
/**
* Returns the current page number.
*
* @return integer
*
* @see File_PDF::aliasNbPages
*/
function getPageNo()
{
return $this->_page;
}
 
/**
* Sets the fill color.
*
* Depending on the colorspace called, the number of color component
* parameters required can be either 1, 3 or 4. The method can be called
* before the first page is created and the color is retained from page to
* page.
*
* @param string $cs Indicates the colorspace which can be either 'rgb',
* 'cmyk' or 'gray'. Defaults to 'rgb'.
* @param float $c1 First color component, floating point value between 0
* and 1. Required for gray, rgb and cmyk.
* @param float $c2 Second color component, floating point value between
* 0 and 1. Required for rgb and cmyk.
* @param float $c3 Third color component, floating point value between
* 0 and 1. Required for rgb and cmyk.
* @param float $c4 Fourth color component, floating point value between
* 0 and 1. Required for cmyk.
*
* @see File_PDF::setTextColor
* @see File_PDF::setDrawColor
* @see File_PDF::rect
* @see File_PDF::cell
* @see File_PDF::multiCell
*/
function setFillColor($cs = 'rgb', $c1, $c2 = 0, $c3 = 0, $c4 = 0)
{
$cs = strtolower($cs);
if ($cs == 'rgb') {
$this->_fill_color = sprintf('%.3f %.3f %.3f rg', $c1, $c2, $c3);
} elseif ($cs == 'cmyk') {
$this->_fill_color = sprintf('%.3f %.3f %.3f %.3f k', $c1, $c2, $c3, $c4);
} else {
$this->_fill_color = sprintf('%.3f g', $c1);
}
if ($this->_page > 0) {
$this->_out($this->_fill_color);
}
$this->_color_flag = $this->_fill_color != $this->_text_color;
}
 
/**
* Sets the text color.
*
* Depending on the colorspace called, the number of color component
* parameters required can be either 1, 3 or 4. The method can be called
* before the first page is created and the color is retained from page to
* page.
*
* @param string $cs Indicates the colorspace which can be either 'rgb',
* 'cmyk' or 'gray'. Defaults to 'rgb'.
* @param float $c1 First color component, floating point value between 0
* and 1. Required for gray, rgb and cmyk.
* @param float $c2 Second color component, floating point value between
* 0 and 1. Required for rgb and cmyk.
* @param float $c3 Third color component, floating point value between
* 0 and 1. Required for rgb and cmyk.
* @param float $c4 Fourth color component, floating point value between
* 0 and 1. Required for cmyk.
*
* @since File_PDF 0.2.0
* @since Horde 3.2
* @see File_PDF::setFillColor
* @see File_PDF::setDrawColor
* @see File_PDF::rect
* @see File_PDF::cell
* @see File_PDF::multiCell
*/
function setTextColor($cs = 'rgb', $c1, $c2 = 0, $c3 = 0, $c4 = 0)
{
$cs = strtolower($cs);
if ($cs == 'rgb') {
$this->_text_color = sprintf('%.3f %.3f %.3f rg', $c1, $c2, $c3);
} elseif ($cs == 'cmyk') {
$this->_text_color = sprintf('%.3f %.3f %.3f %.3f k', $c1, $c2, $c3, $c4);
} else {
$this->_text_color = sprintf('%.3f g', $c1);
}
if ($this->_page > 0) {
$this->_out($this->_text_color);
}
$this->_color_flag = $this->_fill_color != $this->_text_color;
}
 
/**
* Sets the draw color, used when drawing lines. Depending on the
* colorspace called, the number of color component parameters required
* can be either 1, 3 or 4. The method can be called before the first page
* is created and the color is retained from page to page.
*
* @param string $cs Indicates the colorspace which can be either 'rgb',
* 'cmyk' or 'gray'. Defaults to 'rgb'.
* @param float $c1 First color component, floating point value between 0
* and 1. Required for gray, rgb and cmyk.
* @param float $c2 Second color component, floating point value between
* 0 and 1. Required for rgb and cmyk.
* @param float $c3 Third color component, floating point value between 0
* and 1. Required for rgb and cmyk.
* @param float $c4 Fourth color component, floating point value between
* 0 and 1. Required for cmyk.
*
* @see File_PDF::setFillColor
* @see File_PDF::line
* @see File_PDF::rect
* @see File_PDF::cell
* @see File_PDF::multiCell
*/
function setDrawColor($cs = 'rgb', $c1, $c2 = 0, $c3 = 0, $c4 = 0)
{
$cs = strtolower($cs);
if ($cs == 'rgb') {
$this->_draw_color = sprintf('%.3f %.3f %.3f RG', $c1, $c2, $c3);
} elseif ($cs == 'cmyk') {
$this->_draw_color = sprintf('%.3f %.3f %.3f %.3f K', $c1, $c2, $c3, $c4);
} else {
$this->_draw_color = sprintf('%.3f G', $c1);
}
if ($this->_page > 0) {
$this->_out($this->_draw_color);
}
}
 
/**
* Returns the length of a text string. A font must be selected.
*
* @param string $text The text whose length is to be computed.
* @param boolean $pt Boolean to indicate if the width should be returned
* in points or user units. Default is 'false'.
*
* @return float
*/
function getStringWidth($text, $pt = false)
{
$text = (string)$text;
$width = 0;
$length = strlen($text);
for ($i = 0; $i < $length; $i++) {
$width += $this->_current_font['cw'][$text{$i}];
}
 
/* Adjust for word spacing. */
$width += $this->_word_spacing * substr_count($text, ' ') * $this->_current_font['cw'][' '];
 
if ($pt) {
return $width * $this->_font_size_pt / 1000;
} else {
return $width * $this->_font_size / 1000;
}
}
 
/**
* Defines the line width. By default, the value equals 0.2 mm. The method
* can be called before the first page is created and the value is
* retained from page to page.
*
* @param float $width The width.
*
* @see File_PDF::line
* @see File_PDF::rect
* @see File_PDF::cell
* @see File_PDF::multiCell
*/
function setLineWidth($width)
{
$this->_line_width = $width;
if ($this->_page > 0) {
$this->_out(sprintf('%.2f w', $width * $this->_scale));
}
}
 
/**
* Draws a line between two points.
*
* All coordinates can be negative to provide values from the right or
* bottom edge of the page (since File_PDF 0.2.0, Horde 3.2).
*
* @param float $x1 Abscissa of first point.
* @param float $y1 Ordinate of first point.
* @param float $x2 Abscissa of second point.
* @param float $y2 Ordinate of second point.
*
* @see File_PDF::setLineWidth
* @see File_PDF::setDrawColor.
*/
function line($x1, $y1, $x2, $y2)
{
if ($x1 < 0) {
$x1 += $this->w;
}
if ($y1 < 0) {
$y1 += $this->h;
}
if ($x2 < 0) {
$x2 += $this->w;
}
if ($y2 < 0) {
$y2 += $this->h;
}
 
$this->_out(sprintf('%.2f %.2f m %.2f %.2f l S', $x1 * $this->_scale, ($this->h - $y1) * $this->_scale, $x2 * $this->_scale, ($this->h - $y2) * $this->_scale));
}
 
/**
* Outputs a rectangle. It can be drawn (border only), filled (with no
* border) or both.
*
* All coordinates can be negative to provide values from the right or
* bottom edge of the page (since File_PDF 0.2.0, Horde 3.2).
*
* @param float $x Abscissa of upper-left corner.
* @param float $y Ordinate of upper-left corner.
* @param float $width Width.
* @param float $height Height.
* @param float $style Style of rendering. Possible values are:
* - D or empty string: draw (default)
* - F: fill
* - DF or FD: draw and fill
*
* @see File_PDF::setLineWidth
* @see File_PDF::setDrawColor
* @see File_PDF::setFillColor
*/
function rect($x, $y, $width, $height, $style = '')
{
if ($x < 0) {
$x += $this->w;
}
if ($y < 0) {
$y += $this->h;
}
 
$style = strtoupper($style);
if ($style == 'F') {
$op = 'f';
} elseif ($style == 'FD' || $style == 'DF') {
$op = 'B';
} else {
$op = 'S';
}
 
$x = $this->_toPt($x);
$y = $this->_toPt($y);
$width = $this->_toPt($width);
$height = $this->_toPt($height);
 
$this->_out(sprintf('%.2f %.2f %.2f %.2f re %s', $x, $this->hPt - $y, $width, -$height, $op));
}
 
/**
* Outputs a circle. It can be drawn (border only), filled (with no
* border) or both.
*
* All coordinates can be negative to provide values from the right or
* bottom edge of the page (since File_PDF 0.2.0, Horde 3.2).
*
* @param float $x Abscissa of the center of the circle.
* @param float $y Ordinate of the center of the circle.
* @param float $r Circle radius.
* @param string $style Style of rendering. Possible values are:
* - D or empty string: draw (default)
* - F: fill
* - DF or FD: draw and fill
*/
function circle($x, $y, $r, $style = '')
{
if ($x < 0) {
$x += $this->w;
}
if ($y < 0) {
$y += $this->h;
}
 
$style = strtolower($style);
if ($style == 'f') {
$op = 'f'; // Style is fill only.
} elseif ($style == 'fd' || $style == 'df') {
$op = 'B'; // Style is fill and stroke.
} else {
$op = 'S'; // Style is stroke only.
}
 
$x = $this->_toPt($x);
$y = $this->_toPt($y);
$r = $this->_toPt($r);
 
/* Invert the y scale. */
$y = $this->hPt - $y;
/* Length of the Bezier control. */
$b = $r * 0.552;
 
/* Move from the given origin and set the current point
* to the start of the first Bezier curve. */
$c = sprintf('%.2f %.2f m', $x - $r, $y);
$x = $x - $r;
/* First circle quarter. */
$c .= sprintf(' %.2f %.2f %.2f %.2f %.2f %.2f c',
$x, $y + $b, // First control point.
$x + $r - $b, $y + $r, // Second control point.
$x + $r, $y + $r); // Final point.
/* Set x/y to the final point. */
$x = $x + $r;
$y = $y + $r;
/* Second circle quarter. */
$c .= sprintf(' %.2f %.2f %.2f %.2f %.2f %.2f c',
$x + $b, $y,
$x + $r, $y - $r + $b,
$x + $r, $y - $r);
/* Set x/y to the final point. */
$x = $x + $r;
$y = $y - $r;
/* Third circle quarter. */
$c .= sprintf(' %.2f %.2f %.2f %.2f %.2f %.2f c',
$x, $y - $b,
$x - $r + $b, $y - $r,
$x - $r, $y - $r);
/* Set x/y to the final point. */
$x = $x - $r;
$y = $y - $r;
/* Fourth circle quarter. */
$c .= sprintf(' %.2f %.2f %.2f %.2f %.2f %.2f c %s',
$x - $b, $y,
$x - $r, $y + $r - $b,
$x - $r, $y + $r,
$op);
/* Output the whole string. */
$this->_out($c);
}
 
/**
* Imports a TrueType or Type1 font and makes it available. It is
* necessary to generate a font definition file first with the
* makefont.php utility.
* The location of the definition file (and the font file itself when
* embedding) must be found at the full path name included.
*
* Example:
* $pdf->addFont('Comic', 'I');
* is equivalent to:
* $pdf->addFont('Comic', 'I', 'comici.php');
*
* @param string $family Font family. The name can be chosen arbitrarily.
* If it is a standard family name, it will
* override the corresponding font.
* @param string $style Font style. Possible values are (case
* insensitive):
* - empty string: regular (default)
* - B: bold
* - I: italic
* - BI or IB: bold italic
* @param string $file The font definition file. By default, the name is
* built from the family and style, in lower case
* with no space.
*
* @see File_PDF::setFont
*/
function addFont($family, $style = '', $file = '')
{
$family = strtolower($family);
if ($family == 'arial') {
$family = 'helvetica';
}
 
$style = strtoupper($style);
if ($style == 'IB') {
$style = 'BI';
}
if (isset($this->_fonts[$family . $style])) {
return $this->raiseError(sprintf('Font already added: %s %s', $family, $style));
}
if ($file == '') {
$file = str_replace(' ', '', $family) . strtolower($style) . '.php';
}
include($file);
if (!isset($name)) {
return $this->raiseError('Could not include font definition file.');
}
$i = count($this->_fonts) + 1;
$this->_fonts[$family . $style] = array('i' => $i, 'type' => $type, 'name' => $name, 'desc' => $desc, 'up' => $up, 'ut' => $ut, 'cw' => $cw, 'enc' => $enc, 'file' => $file);
if ($diff) {
/* Search existing encodings. */
$d = 0;
$nb = count($this->_diffs);
for ($i = 1; $i <= $nb; $i++) {
if ($this->_diffs[$i] == $diff) {
$d = $i;
break;
}
}
if ($d == 0) {
$d = $nb + 1;
$this->_diffs[$d] = $diff;
}
$this->_fonts[$family.$style]['diff'] = $d;
}
if ($file) {
if ($type == 'TrueType') {
$this->_font_files[$file] = array('length1' => $originalsize);
} else {
$this->_font_files[$file] = array('length1' => $size1, 'length2' => $size2);
}
}
}
 
/**
* Sets the font used to print character strings. It is mandatory to call
* this method at least once before printing text or the resulting
* document would not be valid. The font can be either a standard one or a
* font added via the File_PDF::addFont method. Standard fonts use Windows
* encoding cp1252 (Western Europe).
* The method can be called before the first page is created and the font
* is retained from page to page.
* If you just wish to change the current font size, it is simpler to call
* File_PDF::setFontSize.
*
* @param string $family Family font. It can be either a name defined by
* File_PDF::addFont or one of the standard families
* (case insensitive):
* - Courier (fixed-width)
* - Helvetica or Arial (sans serif)
* - Times (serif)
* - Symbol (symbolic)
* - ZapfDingbats (symbolic)
* It is also possible to pass an empty string. In
* that case, the current family is retained.
* @param string $style Font style. Possible values are (case
* insensitive):
* - empty string: regular
* - B: bold
* - I: italic
* - U: underline
* or any combination. The default value is regular.
* Bold and italic styles do not apply to Symbol and
* ZapfDingbats.
* @param integer $size Font size in points. The default value is the
* current size. If no size has been specified since
* the beginning of the document, the value taken
* is 12.
* @param boolean $force Force the setting of the font. Each new page will
* require a new call to File_PDF::setFont and
* settings this to true will make sure that the
* checks for same font calls will be skipped.
*
* @see File_PDF::addFont
* @see File_PDF::setFontSize
* @see File_PDF::cell
* @see File_PDF::multiCell
* @see File_PDF::Write
*/
function setFont($family, $style = '', $size = null, $force = false)
{
$family = strtolower($family);
if ($family == 'arial') {
/* Use helvetica instead of arial. */
$family = 'helvetica';
} elseif ($family == 'symbol' || $family == 'zapfdingbats') {
/* These two fonts do not have styles available. */
$style = '';
}
 
$style = strtoupper($style);
 
/* Underline is handled separately, if specified in the style var
* remove it from the style and set the underline flag. */
if (strpos($style, 'U') !== false) {
$this->_underline = true;
$style = str_replace('U', '', $style);
} else {
$this->_underline = false;
}
 
if ($style == 'IB') {
$style = 'BI';
}
 
/* If no size specified, use current size. */
if (is_null($size)) {
$size = $this->_font_size_pt;
}
 
/* If font requested is already the current font and no force setting
* of the font is requested (eg. when adding a new page) don't bother
* with the rest of the function and simply return. */
if ($this->_font_family == $family && $this->_font_style == $style &&
$this->_font_size_pt == $size && !$force) {
return;
}
 
/* Set the font key. */
$fontkey = $family . $style;
 
/* Test if already cached. */
if (!isset($this->_fonts[$fontkey])) {
/* Get the character width definition file. */
$font_widths = &File_PDF::_getFontFile($fontkey);
if (is_a($font_widths, 'PEAR_Error')) {
return $font_widths;
}
 
$i = count($this->_fonts) + 1;
$this->_fonts[$fontkey] = array(
'i' => $i,
'type' => 'core',
'name' => $this->_core_fonts[$fontkey],
'up' => -100,
'ut' => 50,
'cw' => $font_widths[$fontkey]);
}
 
/* Store font information as current font. */
$this->_font_family = $family;
$this->_font_style = $style;
$this->_font_size_pt = $size;
$this->_font_size = $size / $this->_scale;
$this->_current_font = &$this->_fonts[$fontkey];
 
/* Output font information if at least one page has been defined. */
if ($this->_page > 0) {
$this->_out(sprintf('BT /F%d %.2f Tf ET', $this->_current_font['i'], $this->_font_size_pt));
}
}
 
/**
* Defines the size of the current font.
*
* @param float $size The size (in points).
*
* @see File_PDF::setFont
*/
function setFontSize($size)
{
/* If the font size is already the current font size, just return. */
if ($this->_font_size_pt == $size) {
return;
}
/* Set the current font size, both in points and scaled to user
* units. */
$this->_font_size_pt = $size;
$this->_font_size = $size / $this->_scale;
 
/* Output font information if at least one page has been defined. */
if ($this->_page > 0) {
$this->_out(sprintf('BT /F%d %.2f Tf ET', $this->_current_font['i'], $this->_font_size_pt));
}
}
 
/**
* Defines the style of the current font.
*
* @param string $style The font style.
*
* @see File_PDF::setFont
* @since File_PDF 0.2.0
* @since Horde 3.2
*/
function setFontStyle($style)
{
$this->setFont($this->_font_family, $style);
}
 
/**
* Creates a new internal link and returns its identifier. An internal
* link is a clickable area which directs to another place within the
* document.
* The identifier can then be passed to File_PDF::cell, File_PDF::write,
* File_PDF::image or File_PDF::link. The destination is defined with
* File_PDF::setLink.
*
* @see File_PDF::cell
* @see File_PDF::Write
* @see File_PDF::image
* @see File_PDF::Link
* @see File_PDF::SetLink
*/
function addLink()
{
$n = count($this->_links) + 1;
$this->_links[$n] = array(0, 0);
return $n;
}
 
/**
* Defines the page and position a link points to.
*
* @param integer $link The link identifier returned by File_PDF::addLink.
* @param float $y Ordinate of target position; -1 indicates the
* current position. The default value is 0 (top of
* page).
* @param integer $page Number of target page; -1 indicates the current
* page. This is the default value.
*
* @see File_PDF::addLink
*/
function setLink($link, $y = 0, $page = -1)
{
if ($y == -1) {
$y = $this->y;
}
if ($page == -1) {
$page = $this->_page;
}
$this->_links[$link] = array($page, $y);
}
 
/**
* Puts a link on a rectangular area of the page. Text or image links are
* generally put via File_PDF::cell, File_PDF::Write or File_PDF::image,
* but this method can be useful for instance to define a clickable area
* inside an image.
*
* All coordinates can be negative to provide values from the right or
* bottom edge of the page (since File_PDF 0.2.0, Horde 3.2).
*
* @param float $x Abscissa of the upper-left corner of the rectangle.
* @param float $y Ordinate of the upper-left corner of the rectangle.
* @param float $width Width of the rectangle.
* @param float $height Height of the rectangle.
* @param mixed $link URL or identifier returned by File_PDF::addLink.
*
* @see File_PDF::addLink
* @see File_PDF::cell
* @see File_PDF::Write
* @see File_PDF::image
*/
function link($x, $y, $width, $height, $link)
{
if ($x < 0) {
$x += $this->w;
}
if ($y < 0) {
$y += $this->h;
}
 
/* Set up the coordinates with correct scaling in pt. */
$x = $this->_toPt($x);
$y = $this->hPt - $this->_toPt($y);
$width = $this->_toPt($width);
$height = $this->_toPt($height);
 
/* Save link to page links array. */
$this->_link($x, $y, $width, $height, $link);
}
 
/**
* Prints a character string. The origin is on the left of the first
* character, on the baseline. This method allows to place a string
* precisely on the page, but it is usually easier to use File_PDF::cell,
* File_PDF::multiCell or File_PDF::Write which are the standard methods to
* print text.
*
* All coordinates can be negative to provide values from the right or
* bottom edge of the page (since File_PDF 0.2.0, Horde 3.2).
*
* @param float $x Abscissa of the origin.
* @param float $y Ordinate of the origin.
* @param string $text String to print.
*
* @see File_PDF::setFont
* @see File_PDF::cell
* @see File_PDF::multiCell
* @see File_PDF::Write
*/
function text($x, $y, $text)
{
if ($x < 0) {
$x += $this->w;
}
if ($y < 0) {
$y += $this->h;
}
 
/* Scale coordinates into points and set correct Y position. */
$x = $this->_toPt($x);
$y = $this->hPt - $this->_toPt($y);
 
/* Escape any potentially harmful characters. */
$text = $this->_escape($text);
 
$out = sprintf('BT %.2f %.2f Td (%s) Tj ET', $x, $y, $text);
if ($this->_underline && $text != '') {
$out .= ' ' . $this->_doUnderline($x, $y, $text);
}
if ($this->_color_flag) {
$out = sprintf('q %s %s Q', $this->_text_color, $out);
}
$this->_out($out);
}
 
/**
* Whenever a page break condition is met, the method is called, and the
* break is issued or not depending on the returned value. The default
* implementation returns a value according to the mode selected by
* File_PDF:setAutoPageBreak.
* This method is called automatically and should not be called directly
* by the application.
*
* @return boolean
*
* @see File_PDF::setAutoPageBreak.
*/
function acceptPageBreak()
{
return $this->_auto_page_break;
}
 
/**
* Prints a cell (rectangular area) with optional borders, background
* color and character string. The upper-left corner of the cell
* corresponds to the current position. The text can be aligned or
* centered. After the call, the current position moves to the right or to
* the next line. It is possible to put a link on the text.
* If automatic page breaking is enabled and the cell goes beyond the
* limit, a page break is done before outputting.
*
* @param float $width Cell width. If 0, the cell extends up to the right
* margin.
* @param float $height Cell height. Default value: 0.
* @param string $text String to print. Default value: empty.
* @param mixed $border Indicates if borders must be drawn around the
* cell. The value can be either a number:
* - 0: no border (default)
* - 1: frame
* or a string containing some or all of the
* following characters (in any order):
* - L: left
* - T: top
* - R: right
* - B: bottom
* @param integer $ln Indicates where the current position should go
* after the call. Possible values are:
* - 0: to the right (default)
* - 1: to the beginning of the next line
* - 2: below
* Putting 1 is equivalent to putting 0 and calling
* File_PDF::newLine just after.
* @param string $align Allows to center or align the text. Possible
* values are:
* - L or empty string: left (default)
* - C: center
* - R: right
* @param integer $fill Indicates if the cell fill type. Possible values
* are:
* - 0: transparent (default)
* - 1: painted
* @param string $link URL or identifier returned by
* File_PDF:addLink.
*
* @see File_PDF::setFont
* @see File_PDF::setDrawColor
* @see File_PDF::setFillColor
* @see File_PDF::setLineWidth
* @see File_PDF::addLink
* @see File_PDF::newLine
* @see File_PDF::multiCell
* @see File_PDF::Write
* @see File_PDF::setAutoPageBreak
*/
function cell($width, $height = 0, $text = '', $border = 0, $ln = 0,
$align = '', $fill = 0, $link = '')
{
$k = $this->_scale;
if ($this->y + $height > $this->_page_break_trigger &&
!$this->_in_footer && $this->AcceptPageBreak()) {
$x = $this->x;
$ws = $this->_word_spacing;
if ($ws > 0) {
$this->_word_spacing = 0;
$this->_out('0 Tw');
}
$this->addPage($this->_current_orientation);
$this->x = $x;
if ($ws > 0) {
$this->_word_spacing = $ws;
$this->_out(sprintf('%.3f Tw', $ws * $k));
}
}
if ($width == 0) {
$width = $this->w - $this->_right_margin - $this->x;
}
$s = '';
if ($fill == 1 || $border == 1) {
if ($fill == 1) {
$op = ($border == 1) ? 'B' : 'f';
} else {
$op = 'S';
}
$s = sprintf('%.2f %.2f %.2f %.2f re %s ', $this->x * $k, ($this->h - $this->y) * $k, $width * $k, -$height * $k, $op);
}
if (is_string($border)) {
if (strpos($border, 'L') !== false) {
$s .= sprintf('%.2f %.2f m %.2f %.2f l S ', $this->x * $k, ($this->h - $this->y) * $k, $this->x * $k, ($this->h - ($this->y + $height)) * $k);
}
if (strpos($border, 'T') !== false) {
$s .= sprintf('%.2f %.2f m %.2f %.2f l S ', $this->x * $k, ($this->h - $this->y) * $k, ($this->x + $width) * $k, ($this->h - $this->y) * $k);
}
if (strpos($border, 'R') !== false) {
$s .= sprintf('%.2f %.2f m %.2f %.2f l S ', ($this->x + $width) * $k, ($this->h - $this->y) * $k, ($this->x + $width) * $k, ($this->h - ($this->y + $height)) * $k);
}
if (strpos($border, 'B') !== false) {
$s .= sprintf('%.2f %.2f m %.2f %.2f l S ', $this->x * $k, ($this->h - ($this->y + $height)) * $k, ($this->x + $width) * $k, ($this->h - ($this->y + $height)) * $k);
}
}
if ($text != '') {
if ($align == 'R') {
$dx = $width - $this->_cell_margin - $this->getStringWidth($text);
} elseif ($align == 'C') {
$dx = ($width - $this->getStringWidth($text)) / 2;
} else {
$dx = $this->_cell_margin;
}
if ($this->_color_flag) {
$s .= 'q ' . $this->_text_color . ' ';
}
$text = str_replace(')', '\\)', str_replace('(', '\\(', str_replace('\\', '\\\\', $text)));
$test2 = ((.5 * $height) + (.3 * $this->_font_size));
$test1 = $this->fhPt - (($this->y + $test2) * $k);
$s .= sprintf('BT %.2f %.2f Td (%s) Tj ET', ($this->x + $dx) * $k, ($this->h - ($this->y + .5 * $height + .3 * $this->_font_size)) * $k, $text);
if ($this->_underline) {
$s .= ' ' . $this->_doUnderline($this->x + $dx, $this->y + .5 * $height + .3 * $this->_font_size, $text);
}
if ($this->_color_flag) {
$s .= ' Q';
}
if ($link) {
$this->link($this->x + $dx, $this->y + .5 * $height-.5 * $this->_font_size, $this->getStringWidth($text), $this->_font_size, $link);
}
}
if ($s) {
$this->_out($s);
}
$this->_last_height = $height;
if ($ln > 0) {
/* Go to next line. */
$this->y += $height;
if ($ln == 1) {
$this->x = $this->_left_margin;
}
} else {
$this->x += $width;
}
}
 
/**
* This method allows printing text with line breaks. They can be
* automatic (as soon as the text reaches the right border of the cell) or
* explicit (via the \n character). As many cells as necessary are output,
* one below the other.
* Text can be aligned, centered or justified. The cell block can be
* framed and the background painted.
*
* @param float $width Width of cells. If 0, they extend up to the right
* margin of the page.
* @param float $height Height of cells.
* @param string $text String to print.
* @param mixed $border Indicates if borders must be drawn around the cell
* block. The value can be either a number:
* - 0: no border (default)
* - 1: frame
* or a string containing some or all of the
* following characters (in any order):
* - L: left
* - T: top
* - R: right
* - B: bottom
* @param string $align Sets the text alignment. Possible values are:
* - L: left alignment
* - C: center
* - R: right alignment
* - J: justification (default value)
* @param integer $fill Indicates if the cell background must:
* - 0: transparent (default)
* - 1: painted
*
* @see File_PDF::setFont
* @see File_PDF::setDrawColor
* @see File_PDF::setFillColor
* @see File_PDF::setLineWidth
* @see File_PDF::cell
* @see File_PDF::write
* @see File_PDF::setAutoPageBreak
*/
function multiCell($width, $height, $text, $border = 0, $align = 'J',
$fill = 0)
{
$cw = &$this->_current_font['cw'];
if ($width == 0) {
$width = $this->w - $this->_right_margin - $this->x;
}
$wmax = ($width-2 * $this->_cell_margin) * 1000 / $this->_font_size;
$s = str_replace("\r", '', $text);
$nb = strlen($s);
if ($nb > 0 && $s[$nb-1] == "\n") {
$nb--;
}
$b = 0;
if ($border) {
if ($border == 1) {
$border = 'LTRB';
$b = 'LRT';
$b2 = 'LR';
} else {
$b2 = '';
if (strpos($border, 'L') !== false) {
$b2 .= 'L';
}
if (strpos($border, 'R') !== false) {
$b2 .= 'R';
}
$b = (strpos($border, 'T') !== false) ? $b2 . 'T' : $b2;
}
}
$sep = -1;
$i = 0;
$j = 0;
$l = 0;
$ns = 0;
$nl = 1;
while ($i < $nb) {
/* Get next character. */
$c = $s[$i];
if ($c == "\n") {
/* Explicit line break. */
if ($this->_word_spacing > 0) {
$this->_word_spacing = 0;
$this->_out('0 Tw');
}
$this->cell($width, $height, substr($s, $j, $i-$j), $b, 2, $align, $fill);
$i++;
$sep = -1;
$j = $i;
$l = 0;
$ns = 0;
$nl++;
if ($border && $nl == 2) {
$b = $b2;
}
continue;
}
if ($c == ' ') {
$sep = $i;
$ls = $l;
$ns++;
}
$l += $cw[$c];
if ($l > $wmax) {
/* Automatic line break. */
if ($sep == -1) {
if ($i == $j) {
$i++;
}
if ($this->_word_spacing > 0) {
$this->_word_spacing = 0;
$this->_out('0 Tw');
}
$this->cell($width, $height, substr($s, $j, $i - $j), $b, 2, $align, $fill);
} else {
if ($align == 'J') {
$this->_word_spacing = ($ns>1) ? ($wmax - $ls)/1000 * $this->_font_size / ($ns - 1) : 0;
$this->_out(sprintf('%.3f Tw', $this->_word_spacing * $this->_scale));
}
$this->cell($width, $height, substr($s, $j, $sep - $j), $b, 2, $align, $fill);
$i = $sep + 1;
}
$sep = -1;
$j = $i;
$l = 0;
$ns = 0;
$nl++;
if ($border && $nl == 2) {
$b = $b2;
}
} else {
$i++;
}
}
/* Last chunk. */
if ($this->_word_spacing > 0) {
$this->_word_spacing = 0;
$this->_out('0 Tw');
}
if ($border && strpos($border, 'B') !== false) {
$b .= 'B';
}
$this->cell($width, $height, substr($s, $j, $i), $b, 2, $align, $fill);
$this->x = $this->_left_margin;
}
 
/**
* This method prints text from the current position. When the right
* margin is reached (or the \n character is met) a line break occurs and
* text continues from the left margin. Upon method exit, the current
* position is left just at the end of the text.
* It is possible to put a link on the text.
*
* Example:
* //Begin with regular font
* $pdf->setFont('Arial','',14);
* $pdf->write(5,'Visit ');
* //Then put a blue underlined link
* $pdf->setTextColor(0,0,255);
* $pdf->setFont('','U');
* $pdf->write(5,'www.fpdf.org','http://www.fpdf.org');
*
* @param float $height Line height.
* @param string $text String to print.
* @param mixed $link URL or identifier returned by AddLink().
*
* @see File_PDF::setFont
* @see File_PDF::addLink
* @see File_PDF::multiCell
* @see File_PDF::setAutoPageBreak
*/
function write($height, $text, $link = '')
{
$cw = &$this->_current_font['cw'];
$width = $this->w - $this->_right_margin - $this->x;
$wmax = ($width - 2 * $this->_cell_margin) * 1000 / $this->_font_size;
$s = str_replace("\r", '', $text);
$nb = strlen($s);
$sep = -1;
$i = 0;
$j = 0;
$l = 0;
$nl = 1;
while ($i < $nb) {
/* Get next character. */
$c = $s{$i};
if ($c == "\n") {
/* Explicit line break. */
$this->cell($width, $height, substr($s, $j, $i - $j), 0, 2, '', 0, $link);
$i++;
$sep = -1;
$j = $i;
$l = 0;
if ($nl == 1) {
$this->x = $this->_left_margin;
$width = $this->w - $this->_right_margin - $this->x;
$wmax = ($width - 2 * $this->_cell_margin) * 1000 / $this->_font_size;
}
$nl++;
continue;
}
if ($c == ' ') {
$sep = $i;
$ls = $l;
}
$l += (isset($cw[$c]) ? $cw[$c] : 0);
if ($l > $wmax) {
/* Automatic line break. */
if ($sep == -1) {
if ($this->x > $this->_left_margin) {
/* Move to next line. */
$this->x = $this->_left_margin;
$this->y += $height;
$width = $this->w - $this->_right_margin - $this->x;
$wmax = ($width - 2 * $this->_cell_margin) * 1000 / $this->_font_size;
$i++;
$nl++;
continue;
}
if ($i == $j) {
$i++;
}
$this->cell($width, $height, substr($s, $j, $i - $j), 0, 2, '', 0, $link);
} else {
$this->cell($width, $height, substr($s, $j, $sep - $j), 0, 2, '', 0, $link);
$i = $sep + 1;
}
$sep = -1;
$j = $i;
$l = 0;
if ($nl == 1) {
$this->x = $this->_left_margin;
$width = $this->w - $this->_right_margin - $this->x;
$wmax = ($width - 2 * $this->_cell_margin) * 1000 / $this->_font_size;
}
$nl++;
} else {
$i++;
}
}
/* Last chunk. */
if ($i != $j) {
$this->cell($l / 1000 * $this->_font_size, $height, substr($s, $j, $i), 0, 0, '', 0, $link);
}
}
 
/**
* Writes text at an angle.
*
* All coordinates can be negative to provide values from the right or
* bottom edge of the page (since File_PDF 0.2.0, Horde 3.2).
*
* @param integer $x X coordinate.
* @param integer $y Y coordinate.
* @param string $text Text to write.
* @param float $text_angle Angle to rotate (Eg. 90 = bottom to top).
* @param float $font_angle Rotate characters as well as text.
*
* @see File_PDF::setFont
*/
function writeRotated($x, $y, $text, $text_angle, $font_angle = 0)
{
if ($x < 0) {
$x += $this->w;
}
if ($y < 0) {
$y += $this->h;
}
 
/* Escape text. */
$text = $this->_escape($text);
 
$font_angle += 90 + $text_angle;
$text_angle *= M_PI / 180;
$font_angle *= M_PI / 180;
 
$text_dx = cos($text_angle);
$text_dy = sin($text_angle);
$font_dx = cos($font_angle);
$font_dy = sin($font_angle);
 
$s= sprintf('BT %.2f %.2f %.2f %.2f %.2f %.2f Tm (%s) Tj ET',
$text_dx, $text_dy, $font_dx, $font_dy,
$x * $this->_scale, ($this->h-$y) * $this->_scale, $text);
 
if ($this->_draw_color) {
$s = 'q ' . $this->_draw_color . ' ' . $s . ' Q';
}
$this->_out($s);
}
 
/**
* Prints an image in the page. The upper-left corner and at least one of
* the dimensions must be specified; the height or the width can be
* calculated automatically in order to keep the image proportions.
* Supported formats are JPEG and PNG.
*
* All coordinates can be negative to provide values from the right or
* bottom edge of the page (since File_PDF 0.2.0, Horde 3.2).
*
* For JPEG, all flavors are allowed:
* - gray scales
* - true colors (24 bits)
* - CMYK (32 bits)
*
* For PNG, are allowed:
* - gray scales on at most 8 bits (256 levels)
* - indexed colors
* - true colors (24 bits)
* but are not supported:
* - Interlacing
* - Alpha channel
*
* If a transparent color is defined, it will be taken into account (but
* will be only interpreted by Acrobat 4 and above).
* The format can be specified explicitly or inferred from the file
* extension.
* It is possible to put a link on the image.
*
* Remark: if an image is used several times, only one copy will be
* embedded in the file.
*
* @param string $file Name of the file containing the image.
* @param float $x Abscissa of the upper-left corner.
* @param float $y Ordinate of the upper-left corner.
* @param float $width Width of the image in the page. If equal to zero,
* it is automatically calculated to keep the
* original proportions.
* @param float $height Height of the image in the page. If not specified
* or equal to zero, it is automatically calculated
* to keep the original proportions.
* @param string $type Image format. Possible values are (case
* insensitive) : JPG, JPEG, PNG. If not specified,
* the type is inferred from the file extension.
* @param mixed $link URL or identifier returned by File_PDF::addLink.
*
* @see File_PDF::addLink
*/
function image($file, $x, $y, $width = 0, $height = 0, $type = '',
$link = '')
{
if ($x < 0) {
$x += $this->w;
}
if ($y < 0) {
$y += $this->h;
}
 
if (!isset($this->_images[$file])) {
/* First use of image, get some file info. */
if ($type == '') {
$pos = strrpos($file, '.');
if ($pos === false) {
return $this->raiseError(sprintf('Image file has no extension and no type was specified: %s', $file));
}
$type = substr($file, $pos + 1);
}
$type = strtolower($type);
$mqr = get_magic_quotes_runtime();
set_magic_quotes_runtime(0);
if ($type == 'jpg' || $type == 'jpeg') {
$info = $this->_parseJPG($file);
} elseif ($type == 'png') {
$info = $this->_parsePNG($file);
} else {
return $this->raiseError(sprintf('Unsupported image file type: %s', $type));
}
if (is_a($info, 'PEAR_Error')) {
return $info;
}
set_magic_quotes_runtime($mqr);
$info['i'] = count($this->_images) + 1;
$this->_images[$file] = $info;
} else {
$info = $this->_images[$file];
}
 
/* Make sure all vars are converted to pt scale. */
$x = $this->_toPt($x);
$y = $this->_toPt($y);
$width = $this->_toPt($width);
$height = $this->_toPt($height);
 
/* If not specified do automatic width and height calculations. */
if (empty($width) && empty($height)) {
$width = $info['w'];
$height = $info['h'];
} elseif (empty($width)) {
$width = $height * $info['w'] / $info['h'];
} elseif (empty($height)) {
$height = $width * $info['h'] / $info['w'];
}
 
$this->_out(sprintf('q %.2f 0 0 %.2f %.2f %.2f cm /I%d Do Q', $width, $height, $x, $this->hPt - ($y + $height), $info['i']));
 
/* Set any link if requested. */
if ($link) {
$this->_link($x, $y, $width, $height, $link);
}
}
 
/**
* Performs a line break. The current abscissa goes back to the left
* margin and the ordinate increases by the amount passed in parameter.
*
* @param float $height The height of the break. By default, the value
* equals the height of the last printed cell.
*
* @see File_PDF::cell
*/
function newLine($height = '')
{
$this->x = $this->_left_margin;
if (is_string($height)) {
$this->y += $this->_last_height;
} else {
$this->y += $height;
}
}
 
/**
* Returns the abscissa of the current position in user units.
*
* @return float
*
* @see File_PDF::setX
* @see File_PDF::getY
* @see File_PDF::setY
*/
function getX()
{
return $this->x;
}
 
/**
* Defines the abscissa of the current position. If the passed value is
* negative, it is relative to the right of the page.
*
* @param float $x The value of the abscissa.
*
* @see File_PDF::getX
* @see File_PDF::getY
* @see File_PDF::setY
* @see File_PDF::setXY
*/
function setX($x)
{
if ($x >= 0) {
/* Absolute value. */
$this->x = $x;
} else {
/* Negative, so relative to right edge of the page. */
$this->x = $this->w + $x;
}
}
 
/**
* Returns the ordinate of the current position in user units.
*
* @return float
*
* @see File_PDF::setY
* @see File_PDF::getX
* @see File_PDF::setX
*/
function getY()
{
return $this->y;
}
 
/**
* Defines the ordinate of the current position. If the passed value is
* negative, it is relative to the bottom of the page.
*
* @param float $y The value of the ordinate.
*
* @see File_PDF::getX
* @see File_PDF::getY
* @see File_PDF::setY
* @see File_PDF::setXY
*/
function setY($y)
{
if ($y >= 0) {
/* Absolute value. */
$this->y = $y;
} else {
/* Negative, so relative to bottom edge of the page. */
$this->y = $this->h + $y;
}
}
 
/**
* Defines the abscissa and ordinate of the current position. If the
* passed values are negative, they are relative respectively to the right
* and bottom of the page.
*
* @param float $x The value of the abscissa.
* @param float $y The value of the ordinate.
*
* @see File_PDF::setX
* @see File_PDF::setY
*/
function setXY($x, $y)
{
$this->setY($y);
$this->setX($x);
}
 
/**
* Returns the raw PDF file.
*
* @see File_PDF::output
*/
function getOutput()
{
/* Check whether file has been closed. */
if ($this->_state < 3) {
$this->close();
}
 
return $this->_buffer;
}
 
/**
* Function to output the buffered data to the browser.
*
* @param string $filename The filename for the output file.
* @param boolean $inline True if inline, false if attachment.
*/
function output($filename = 'unknown.pdf', $inline = false)
{
/* Check whether file has been closed. */
if ($this->_state < 3) {
$this->close();
}
 
/* Check if headers have been sent. */
if (headers_sent()) {
return $this->raiseError('Unable to send PDF file, some data has already been output to browser.');
}
 
/* If HTTP_Download is not available return a PEAR_Error. */
if (!include_once 'HTTP/Download.php') {
return $this->raiseError('Missing PEAR package HTTP_Download.');
}
 
/* Params for the output. */
$disposition = !$inline ? HTTP_DOWNLOAD_ATTACHMENT : HTTP_DOWNLOAD_INLINE;
$params = array('data' => $this->_buffer,
'contenttype' => 'application/pdf',
'contentdisposition' => array($disposition, $filename));
/* Output the file. */
return HTTP_Download::staticSend($params);
}
 
/**
* Function to save the PDF file somewhere local to the server.
*
* @param string $filename The filename for the output file.
*/
function save($filename = 'unknown.pdf')
{
/* Check whether file has been closed. */
if ($this->_state < 3) {
$this->close();
}
 
$f = fopen($filename, 'wb');
if (!$f) {
return $this->raiseError(sprintf('Unable to save PDF file: %s', $filename));
}
fwrite($f, $this->_buffer, strlen($this->_buffer));
fclose($f);
}
 
function _toPt($val)
{
return $val * $this->_scale;
}
 
function &_getFontFile($fontkey, $path = '')
{
static $font_widths;
 
if (!isset($font_widths[$fontkey])) {
if (!empty($path)) {
$file = $path . strtolower($fontkey) . '.php';
} else {
$file = 'File/PDF/fonts/' . strtolower($fontkey) . '.php';
}
include $file;
if (!isset($font_widths[$fontkey])) {
return $this->raiseError(sprintf('Could not include font metric file: %s', $file));
}
}
 
return $font_widths;
}
 
function _link($x, $y, $width, $height, $link)
{
/* Save link to page links array. */
$this->_page_links[$this->_page][] = array($x, $y, $width, $height, $link);
}
 
function _beginDoc()
{
/* Start document, but only if not yet started. */
if ($this->_state < 1) {
$this->_state = 1;
$this->_out('%PDF-1.3');
}
}
 
function _putPages()
{
$nb = $this->_page;
if (!empty($this->_alias_nb_pages)) {
/* Replace number of pages. */
for ($n = 1; $n <= $nb; $n++) {
$this->_pages[$n] = str_replace($this->_alias_nb_pages, $nb, $this->_pages[$n]);
}
}
if ($this->_default_orientation == 'P') {
$wPt = $this->fwPt;
$hPt = $this->fhPt;
} else {
$wPt = $this->fhPt;
$hPt = $this->fwPt;
}
$filter = ($this->_compress) ? '/Filter /FlateDecode ' : '';
for ($n = 1; $n <= $nb; $n++) {
/* Page */
$this->_newobj();
$this->_out('<</Type /Page');
$this->_out('/Parent 1 0 R');
if (isset($this->_orientation_changes[$n])) {
$this->_out(sprintf('/MediaBox [0 0 %.2f %.2f]', $hPt, $wPt));
}
$this->_out('/Resources 2 0 R');
if (isset($this->_page_links[$n])) {
/* Links */
$annots = '/Annots [';
foreach ($this->_page_links[$n] as $pl) {
$rect = sprintf('%.2f %.2f %.2f %.2f', $pl[0], $pl[1], $pl[0] + $pl[2], $pl[1] - $pl[3]);
$annots .= '<</Type /Annot /Subtype /Link /Rect [' . $rect . '] /Border [0 0 0] ';
if (is_string($pl[4])) {
$annots .= '/A <</S /URI /URI ' . $this->_textString($pl[4]) . '>>>>';
} else {
$l = $this->_links[$pl[4]];
$height = isset($this->_orientation_changes[$l[0]]) ? $wPt : $hPt;
$annots .= sprintf('/Dest [%d 0 R /XYZ 0 %.2f null]>>', 1 + 2 * $l[0], $height - $l[1] * $this->_scale);
}
}
$this->_out($annots.']');
}
$this->_out('/Contents ' . ($this->_n + 1) . ' 0 R>>');
$this->_out('endobj');
/* Page content */
$p = ($this->_compress) ? gzcompress($this->_pages[$n]) : $this->_pages[$n];
$this->_newobj();
$this->_out('<<' . $filter . '/Length ' . strlen($p) . '>>');
$this->_putStream($p);
$this->_out('endobj');
}
/* Pages root */
$this->_offsets[1] = strlen($this->_buffer);
$this->_out('1 0 obj');
$this->_out('<</Type /Pages');
$kids = '/Kids [';
for ($i = 0; $i < $nb; $i++) {
$kids .= (3 + 2 * $i) . ' 0 R ';
}
$this->_out($kids . ']');
$this->_out('/Count ' . $nb);
$this->_out(sprintf('/MediaBox [0 0 %.2f %.2f]', $wPt, $hPt));
$this->_out('>>');
$this->_out('endobj');
}
 
function _putFonts()
{
$nf = $this->_n;
foreach ($this->_diffs as $diff) {
/* Encodings */
$this->_newobj();
$this->_out('<</Type /Encoding /BaseEncoding /WinAnsiEncoding /Differences [' . $diff . ']>>');
$this->_out('endobj');
}
$mqr = get_magic_quotes_runtime();
set_magic_quotes_runtime(0);
foreach ($this->_font_files as $file => $info) {
/* Font file embedding. */
$this->_newobj();
$this->_font_files[$file]['n'] = $this->_n;
$size = filesize($file);
if (!$size) {
return $this->raiseError('Font file not found.');
}
$this->_out('<</Length ' . $size);
if (substr($file, -2) == '.z') {
$this->_out('/Filter /FlateDecode');
}
$this->_out('/Length1 ' . $info['length1']);
if (isset($info['length2'])) {
$this->_out('/Length2 ' . $info['length2'] . ' /Length3 0');
}
$this->_out('>>');
$f = fopen($file, 'rb');
$this->_putStream(fread($f, $size));
fclose($f);
$this->_out('endobj');
}
set_magic_quotes_runtime($mqr);
foreach ($this->_fonts as $k => $font) {
/* Font objects */
$this->_newobj();
$this->_fonts[$k]['n'] = $this->_n;
$name = $font['name'];
$this->_out('<</Type /Font');
$this->_out('/BaseFont /' . $name);
if ($font['type'] == 'core') {
/* Standard font. */
$this->_out('/Subtype /Type1');
if ($name != 'Symbol' && $name != 'ZapfDingbats') {
$this->_out('/Encoding /WinAnsiEncoding');
}
} else {
/* Additional font. */
$this->_out('/Subtype /' . $font['type']);
$this->_out('/FirstChar 32');
$this->_out('/LastChar 255');
$this->_out('/Widths ' . ($this->_n + 1) . ' 0 R');
$this->_out('/FontDescriptor ' . ($this->_n + 2) . ' 0 R');
if ($font['enc']) {
if (isset($font['diff'])) {
$this->_out('/Encoding ' . ($nf + $font['diff']).' 0 R');
} else {
$this->_out('/Encoding /WinAnsiEncoding');
}
}
}
$this->_out('>>');
$this->_out('endobj');
if ($font['type'] != 'core') {
/* Widths. */
$this->_newobj();
$cw = &$font['cw'];
$s = '[';
for ($i = 32; $i <= 255; $i++) {
$s .= $cw[chr($i)] . ' ';
}
$this->_out($s . ']');
$this->_out('endobj');
/* Descriptor. */
$this->_newobj();
$s = '<</Type /FontDescriptor /FontName /' . $name;
foreach ($font['desc'] as $k => $v) {
$s .= ' /' . $k . ' ' . $v;
}
$file = $font['file'];
if ($file) {
$s .= ' /FontFile' . ($font['type'] == 'Type1' ? '' : '2') . ' ' . $this->_font_files[$file]['n'] . ' 0 R';
}
$this->_out($s . '>>');
$this->_out('endobj');
}
}
}
 
function _putImages()
{
$filter = ($this->_compress) ? '/Filter /FlateDecode ' : '';
foreach ($this->_images as $file => $info) {
$this->_newobj();
$this->_images[$file]['n'] = $this->_n;
$this->_out('<</Type /XObject');
$this->_out('/Subtype /Image');
$this->_out('/Width ' . $info['w']);
$this->_out('/Height ' . $info['h']);
if ($info['cs'] == 'Indexed') {
$this->_out('/ColorSpace [/Indexed /DeviceRGB ' . (strlen($info['pal'])/3 - 1) . ' ' . ($this->_n + 1).' 0 R]');
} else {
$this->_out('/ColorSpace /' . $info['cs']);
if ($info['cs'] == 'DeviceCMYK') {
$this->_out('/Decode [1 0 1 0 1 0 1 0]');
}
}
$this->_out('/BitsPerComponent ' . $info['bpc']);
$this->_out('/Filter /' . $info['f']);
if (isset($info['parms'])) {
$this->_out($info['parms']);
}
if (isset($info['trns']) && is_array($info['trns'])) {
$trns = '';
$i_max = count($info['trns']);
for ($i = 0; $i < $i_max; $i++) {
$trns .= $info['trns'][$i] . ' ' . $info['trns'][$i].' ';
}
$this->_out('/Mask [' . $trns . ']');
}
$this->_out('/Length ' . strlen($info['data']) . '>>');
$this->_putStream($info['data']);
$this->_out('endobj');
 
/* Palette. */
if ($info['cs'] == 'Indexed') {
$this->_newobj();
$pal = ($this->_compress) ? gzcompress($info['pal']) : $info['pal'];
$this->_out('<<' . $filter . '/Length ' . strlen($pal) . '>>');
$this->_putStream($pal);
$this->_out('endobj');
}
}
}
 
function _putResources()
{
$this->_putFonts();
$this->_putImages();
/* Resource dictionary */
$this->_offsets[2] = strlen($this->_buffer);
$this->_out('2 0 obj');
$this->_out('<</ProcSet [/PDF /Text /ImageB /ImageC /ImageI]');
$this->_out('/Font <<');
foreach ($this->_fonts as $font) {
$this->_out('/F' . $font['i'] . ' ' . $font['n'] . ' 0 R');
}
$this->_out('>>');
if (count($this->_images)) {
$this->_out('/XObject <<');
foreach ($this->_images as $image) {
$this->_out('/I' . $image['i'] . ' ' . $image['n'] . ' 0 R');
}
$this->_out('>>');
}
$this->_out('>>');
$this->_out('endobj');
}
 
function _putInfo()
{
$this->_out('/Producer ' . $this->_textString('Horde PDF'));
if (!empty($this->_info['title'])) {
$this->_out('/Title ' . $this->_textString($this->_info['title']));
}
if (!empty($this->_info['subject'])) {
$this->_out('/Subject ' . $this->_textString($this->_info['subject']));
}
if (!empty($this->_info['author'])) {
$this->_out('/Author ' . $this->_textString($this->_info['author']));
}
if (!empty($this->keywords)) {
$this->_out('/Keywords ' . $this->_textString($this->keywords));
}
if (!empty($this->creator)) {
$this->_out('/Creator ' . $this->_textString($this->creator));
}
$this->_out('/CreationDate ' . $this->_textString('D:' . date('YmdHis')));
}
 
function _putCatalog()
{
$this->_out('/Type /Catalog');
$this->_out('/Pages 1 0 R');
if ($this->_zoom_mode == 'fullpage') {
$this->_out('/OpenAction [3 0 R /Fit]');
} elseif ($this->_zoom_mode == 'fullwidth') {
$this->_out('/OpenAction [3 0 R /FitH null]');
} elseif ($this->_zoom_mode == 'real') {
$this->_out('/OpenAction [3 0 R /XYZ null null 1]');
} elseif (!is_string($this->_zoom_mode)) {
$this->_out('/OpenAction [3 0 R /XYZ null null ' . ($this->_zoom_mode / 100).']');
}
if ($this->_layout_mode == 'single') {
$this->_out('/PageLayout /SinglePage');
} elseif ($this->_layout_mode == 'continuous') {
$this->_out('/PageLayout /OneColumn');
} elseif ($this->_layout_mode == 'two') {
$this->_out('/PageLayout /TwoColumnLeft');
}
}
 
function _putTrailer()
{
$this->_out('/Size ' . ($this->_n + 1));
$this->_out('/Root ' . $this->_n . ' 0 R');
$this->_out('/Info ' . ($this->_n - 1) . ' 0 R');
}
 
function _endDoc()
{
$this->_putPages();
$this->_putResources();
/* Info */
$this->_newobj();
$this->_out('<<');
$this->_putInfo();
$this->_out('>>');
$this->_out('endobj');
/* Catalog */
$this->_newobj();
$this->_out('<<');
$this->_putCatalog();
$this->_out('>>');
$this->_out('endobj');
/* Cross-ref */
$o = strlen($this->_buffer);
$this->_out('xref');
$this->_out('0 ' . ($this->_n + 1));
$this->_out('0000000000 65535 f ');
for ($i = 1; $i <= $this->_n; $i++) {
$this->_out(sprintf('%010d 00000 n ', $this->_offsets[$i]));
}
/* Trailer */
$this->_out('trailer');
$this->_out('<<');
$this->_putTrailer();
$this->_out('>>');
$this->_out('startxref');
$this->_out($o);
$this->_out('%%EOF');
$this->_state = 3;
}
 
function _beginPage($orientation)
{
$this->_page++;
$this->_pages[$this->_page] = '';
$this->_state = 2;
$this->x = $this->_left_margin;
$this->y = $this->_top_margin;
$this->_last_height = 0;
/* Page orientation */
if (!$orientation) {
$orientation = $this->_default_orientation;
} else {
$orientation = strtoupper($orientation[0]);
if ($orientation != $this->_default_orientation) {
$this->_orientation_changes[$this->_page] = true;
}
}
if ($orientation != $this->_current_orientation) {
/* Change orientation */
if ($orientation == 'P') {
$this->wPt = $this->fwPt;
$this->hPt = $this->fhPt;
$this->w = $this->fw;
$this->h = $this->fh;
} else {
$this->wPt = $this->fhPt;
$this->hPt = $this->fwPt;
$this->w = $this->fh;
$this->h = $this->fw;
}
$this->_page_break_trigger = $this->h - $this->_break_margin;
$this->_current_orientation = $orientation;
}
}
 
function _endPage()
{
/* End of page contents */
$this->_state = 1;
}
 
function _newobj()
{
/* Begin a new object */
$this->_n++;
$this->_offsets[$this->_n] = strlen($this->_buffer);
$this->_out($this->_n . ' 0 obj');
}
 
function _doUnderline($x, $y, $text)
{
/* Set the rectangle width according to text width. */
$width = $this->getStringWidth($text, true);
 
/* Set rectangle position and height, using underline position and
* thickness settings scaled by the font size. */
$y = $y + ($this->_current_font['up'] * $this->_font_size_pt / 1000);
$height = -$this->_current_font['ut'] * $this->_font_size_pt / 1000;
 
return sprintf('%.2f %.2f %.2f %.2f re f', $x, $y, $width, $height);
}
 
function _parseJPG($file)
{
/* Extract info from a JPEG file. */
$img = @getimagesize($file);
if (!$img) {
return $this->raiseError(sprintf('Missing or incorrect image file: %s', $file));
}
if ($img[2] != 2) {
return $this->raiseError(sprintf('Not a JPEG file: %s', $file));
}
if (!isset($img['channels']) || $img['channels'] == 3) {
$colspace = 'DeviceRGB';
} elseif ($img['channels'] == 4) {
$colspace = 'DeviceCMYK';
} else {
$colspace = 'DeviceGray';
}
$bpc = isset($img['bits']) ? $img['bits'] : 8;
 
/* Read whole file. */
$f = fopen($file, 'rb');
$data = fread($f, filesize($file));
fclose($f);
 
return array('w' => $img[0], 'h' => $img[1], 'cs' => $colspace, 'bpc' => $bpc, 'f' => 'DCTDecode', 'data' => $data);
}
 
function _parsePNG($file)
{
/* Extract info from a PNG file. */
$f = fopen($file, 'rb');
if (!$f) {
return $this->raiseError(sprintf('Unable to open image file: %s', $file));
}
 
/* Check signature. */
if (fread($f, 8) != chr(137) . 'PNG' . chr(13) . chr(10) . chr(26) . chr(10)) {
return $this->raiseError(sprintf('Not a PNG file: %s', $file));
}
 
/* Read header chunk. */
fread($f, 4);
if (fread($f, 4) != 'IHDR') {
return $this->raiseError(sprintf('Incorrect PNG file: %s', $file));
}
$width = $this->_freadInt($f);
$height = $this->_freadInt($f);
$bpc = ord(fread($f, 1));
if ($bpc > 8) {
return $this->raiseError(sprintf('16-bit depth not supported: %s', $file));
}
$ct = ord(fread($f, 1));
if ($ct == 0) {
$colspace = 'DeviceGray';
} elseif ($ct == 2) {
$colspace = 'DeviceRGB';
} elseif ($ct == 3) {
$colspace = 'Indexed';
} else {
return $this->raiseError(sprintf('Alpha channel not supported: %s', $file));
}
if (ord(fread($f, 1)) != 0) {
return $this->raiseError(sprintf('Unknown compression method: %s', $file));
}
if (ord(fread($f, 1)) != 0) {
return $this->raiseError(sprintf('Unknown filter method: %s', $file));
}
if (ord(fread($f, 1)) != 0) {
return $this->raiseError(sprintf('Interlacing not supported: %s', $file));
}
fread($f, 4);
$parms = '/DecodeParms <</Predictor 15 /Colors ' . ($ct == 2 ? 3 : 1).' /BitsPerComponent ' . $bpc . ' /Columns ' . $width.'>>';
/* Scan chunks looking for palette, transparency and image data. */
$pal = '';
$trns = '';
$data = '';
do {
$n = $this->_freadInt($f);
$type = fread($f, 4);
if ($type == 'PLTE') {
/* Read palette */
$pal = fread($f, $n);
fread($f, 4);
} elseif ($type == 'tRNS') {
/* Read transparency info */
$t = fread($f, $n);
if ($ct == 0) {
$trns = array(ord(substr($t, 1, 1)));
} elseif ($ct == 2) {
$trns = array(ord(substr($t, 1, 1)), ord(substr($t, 3, 1)), ord(substr($t, 5, 1)));
} else {
$pos = strpos($t, chr(0));
if (is_int($pos)) {
$trns = array($pos);
}
}
fread($f, 4);
} elseif ($type == 'IDAT') {
/* Read image data block */
$data .= fread($f, $n);
fread($f, 4);
} elseif ($type == 'IEND') {
break;
} else {
fread($f, $n + 4);
}
} while ($n);
 
if ($colspace == 'Indexed' && empty($pal)) {
return $this->raiseError(sprintf('Missing palette in: %s', $file));
}
fclose($f);
 
return array('w' => $width, 'h' => $height, 'cs' => $colspace, 'bpc' => $bpc, 'f' => 'FlateDecode', 'parms' => $parms, 'pal' => $pal, 'trns' => $trns, 'data' => $data);
}
 
function _freadInt($f)
{
/* Read a 4-byte integer from file. */
$i = ord(fread($f, 1)) << 24;
$i += ord(fread($f, 1)) << 16;
$i += ord(fread($f, 1)) << 8;
$i += ord(fread($f, 1));
return $i;
}
 
function _textString($s)
{
/* Format a text string */
return '(' . $this->_escape($s) . ')';
}
 
function _escape($s)
{
/* Add \ before \, ( and ) */
return str_replace(array(')','(','\\'),
array('\\)','\\(','\\\\'),
$s);
}
 
function _putStream($s)
{
$this->_out('stream');
$this->_out($s);
$this->_out('endstream');
}
 
function _out($s)
{
/* Add a line to the document. */
if ($this->_state == 2) {
$this->_pages[$this->_page] .= $s . "\n";
} else {
$this->_buffer .= $s . "\n";
}
}
 
}
/trunk/applications/jrest/lib/SpreadsheetProductor.php
New file
0,0 → 1,15
<?php
 
 
Class SpreadsheetProductor {
function initSpreadsheet() {
require_once("Spreadsheet/Excel/Writer.php");
}
}
 
 
?>
/trunk/applications/jrest/lib/PDFProductor.php
New file
0,0 → 1,14
<?php
 
 
Class PDFProductor {
function initPDF() {
require_once("PDF.php");
}
}
 
 
?>
/trunk/applications/jrest/lib/WdHTMLParser.php
New file
0,0 → 1,144
<?php
/**
*
* @author Olivier Laviale
* @see http://www.weirdog.com/blog/php/un-parser-html-des-plus-leger.html
*
*/
class WdHTMLParser {
private $encoding;
private $matches;
private $escaped;
private $opened = array();
public $malformed;
 
public function parse($html, $namespace=NULL, $encoding='utf-8') {
$this->malformed = false;
$this->encoding = $encoding;
// we take care of escaping comments and processing options. they will not be parsed
// and will end as text nodes
$html = $this->escapeSpecials($html);
// in order to create a tree, we first need to split the HTML using the markups,
// creating a nice flat array of texts and opening and closing markups.
//
// the array can be read as follows :
//
// i+0 => some text
// i+1 => '/' for closing markups, nothing otherwise
// i+2 => the markup it self, without the '<' '>'
//
// note that i+2 might end with a '/' indicating an auto-closing markup
$this->matches = preg_explode('#<(/?)' . $namespace . '([^>]*)>#', $html, -1, PREG_SPLIT_DELIM_CAPTURE);
// the flat representation is now ready, we can create our tree
$tree = $this->buildTree();
 
// if comments or processing options where escaped, we can
// safely unescape them now
if ($this->escaped) {
$tree = $this->unescapeSpecials($tree);
}
return $tree;
}
private function escapeSpecials($html) {
// here we escape comments
$html = preg_replace_callback('#<\!--.+-->#sU', array($this, 'escapeSpecials_callback'), $html);
 
// and processing options
$html = preg_replace_callback('#<\?.+\?>#sU', array($this, 'escapeSpecials_callback'), $html);
return $html;
}
private function escapeSpecials_callback($m) {
$this->escaped = true;
$text = $m[0];
$text = str_replace(array('<', '>'), array("\x01", "\x02"), $text);
return $text;
}
 
private function unescapeSpecials($tree) {
return is_array($tree) ? array_map(array($this, 'unescapeSpecials'), $tree) : str_replace(array("\x01", "\x02"), array('<', '>'), $tree);
}
 
private function buildTree() {
$nodes = array();
$i = 0;
$text = NULL;
while (($value = array_shift($this->matches)) !== NULL) {
switch ($i++ % 3) {
case 0:
// if the trimed value is not empty we preserve the value,
// otherwise we discard it.
if (trim($value)){
$nodes[] = $value;
}
break;
case 1:
$closing = ($value == '/');
break;
case 2:
if (substr($value, -1, 1) == '/') {
// auto closing
$nodes[] = $this->parseMarkup(substr($value, 0, -1));
} else if ($closing) {
// closing markup
$open = array_pop($this->opened);
if ($value != $open) {
$this->error($value, $open);
}
 
return $nodes;
} else {
// this is an open markup with possible children
$node = $this->parseMarkup($value);
// push the markup name into the opened markups
$this->opened[] = $node['name'];
// create the node and parse its children
$node['children'] = $this->buildTree($this->matches);
$nodes[] = $node;
}
break;
}
}
return $nodes;
}
public function parseMarkup($markup) {
// get markup's name
preg_match('#^[^\s]+#', $markup, $matches);
$name = $matches[0];
 
// get markup's arguments
preg_match_all('#\s+([^=]+)\s*=\s*"([^"]+)"#', $markup, $matches, PREG_SET_ORDER);
// transform the matches into a nice key/value array
$args = array();
foreach ($matches as $m) {
// we unescape the html entities of the argument's value
$args[$m[1]] = html_entity_decode($m[2], ENT_QUOTES, $this->encoding);
}
 
return array('name' => $name, 'args' => $args);
}
public function error($markup, $expected) {
$this->malformed = true;
printf('unexpected closing markup "%s", should be "%s"', $markup, $expected);
}
}
 
?>
/trunk/applications/jrest/lib/Writer.php
New file
0,0 → 1,104
<?php
/*
* Module written/ported by Xavier Noguer <xnoguer@rezebra.com>
*
* PERL Spreadsheet::WriteExcel module.
*
* The author of the Spreadsheet::WriteExcel module is John McNamara
* <jmcnamara@cpan.org>
*
* I _DO_ maintain this code, and John McNamara has nothing to do with the
* porting of this code to PHP. Any questions directly related to this
* class library should be directed to me.
*
* License Information:
*
* Spreadsheet_Excel_Writer: A library for generating Excel Spreadsheets
* Copyright (c) 2002-2003 Xavier Noguer xnoguer@rezebra.com
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
 
require_once 'PEAR.php';
require_once 'Spreadsheet/Excel/Writer/Workbook.php';
 
/**
* Class for writing Excel Spreadsheets. This class should change COMPLETELY.
*
* @author Xavier Noguer <xnoguer@rezebra.com>
* @category FileFormats
* @package Spreadsheet_Excel_Writer
*/
 
class Spreadsheet_Excel_Writer extends Spreadsheet_Excel_Writer_Workbook
{
/**
* The constructor. It just creates a Workbook
*
* @param string $filename The optional filename for the Workbook.
* @return Spreadsheet_Excel_Writer_Workbook The Workbook created
*/
function Spreadsheet_Excel_Writer($filename = '')
{
$this->_filename = $filename;
$this->Spreadsheet_Excel_Writer_Workbook($filename);
}
 
/**
* Send HTTP headers for the Excel file.
*
* @param string $filename The filename to use for HTTP headers
* @access public
*/
function send($filename)
{
header("Content-type: application/vnd.ms-excel");
header("Content-Disposition: attachment; filename=\"$filename\"");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0,pre-check=0");
header("Pragma: public");
}
 
/**
* Utility function for writing formulas
* Converts a cell's coordinates to the A1 format.
*
* @access public
* @static
* @param integer $row Row for the cell to convert (0-indexed).
* @param integer $col Column for the cell to convert (0-indexed).
* @return string The cell identifier in A1 format
*/
function rowcolToCell($row, $col)
{
if ($col > 255) { //maximum column value exceeded
return new PEAR_Error("Maximum column value exceeded: $col");
}
 
$int = (int)($col / 26);
$frac = $col % 26;
$chr1 = '';
 
if ($int > 0) {
$chr1 = chr(ord('A') + $int - 1);
}
 
$chr2 = chr(ord('A') + $frac);
$row++;
 
return $chr1 . $chr2 . $row;
}
}
?>
/trunk/applications/jrest/lib/ControleUtilisateur.php
New file
0,0 → 1,92
<?php
//+----------------------------------------------------------------------------------------------------------------+
// GESTION DE L'IDENTIFICATION
Class ControleUtilisateur extends JRestService {
private function envoyerMessageNonAutorise() {
header('HTTP/1.0 401 Unauthorized');
echo 'Accès interdit';
exit(0);
}
private function envoyerAuth($message_accueil, $message_echec) {
header('HTTP/1.0 401 Unauthorized');
header('WWW-Authenticate: Basic realm="www.obs-saisons.fr"');
header('Content-type: text/plain; charset=UTF-8');
print $message_echec;
exit(0);
}
protected function getAuthIdentifiant() {
$id = (isset($_SERVER['PHP_AUTH_USER'])) ? $_SERVER['PHP_AUTH_USER'] : null;
return $id;
}
protected function getAuthMotDePasse() {
$mdp = (isset($_SERVER['PHP_AUTH_PW'])) ? $_SERVER['PHP_AUTH_PW'] : null;
return $mdp;
}
public function authentifierAdmin() {
$message_accueil = "Veuillez vous identifier avec votre compte Observatoire des saisons.";
$message_echec = "Accès limité aux administrateurs de l'ods.\n".
"Votre tentative d'identification a échoué.\n".
"Actualiser la page pour essayer à nouveau si vous êtes bien inscrit comme administrateur.";
return $this->authentifier($message_accueil, $message_echec, 'Admin');
}
private function authentifier($message_accueil, $message_echec, $type) {
$id = $this->getAuthIdentifiant();
if (!isset($id)) {
$this->envoyerAuth($message_accueil, $message_echec);
} else {
$methodeAutorisation = "etre{$type}Autorise";
$autorisation = $this->$methodeAutorisation();
 
if ($autorisation == false) {
$this->envoyerAuth($message_accueil, $message_echec);
}
}
return true;
}
public function etreUtilisateurAutorise() {
$identifiant = $this->getAuthIdentifiant();
$mdp = md5($this->getAuthMotDePasse());
$requete = 'SELECT COUNT(*) as existe FROM drupal_users du '.
'WHERE name = '.$this->proteger($identifiant).' '.
'AND pass = '.$this->proteger($mdp);
$existe = $this->executerRequete($requete);
$autorisation = (!empty($existe) && $existe['existe'] > 0) ? true :false;
return $autorisation;
}
public function etreAdminAutorise() {
$identifiant = $this->getAuthIdentifiant();
$mdp = md5($this->getAuthMotDePasse());
$requete = 'SELECT COUNT(*) as existe FROM drupal_users du '.
'INNER JOIN drupal_users_roles dur '.
'ON du.uid = dur.uid '.
'WHERE name = '.$this->proteger($identifiant).' '.
'AND pass = '.$this->proteger($mdp).' '.
'AND rid = 3 ';
$existe = $this->executerRequete($requete);
$autorisation = (!empty($existe) && $existe[0]['existe'] > 0) ? true :false;
return $autorisation;
}
public function controleAppelIpAutorisee() {
$ips_autorisees = explode(',', $this->config['jrest_admin']['ip_autorisees']);
$ip_appelante = $_SERVER['REMOTE_ADDR'];
if(!in_array($ip_appelante, $ips_autorisees) && $ip_appelante != $_SERVER['SERVER_ADDR']) {
$this->envoyerMessageNonAutorise();
}
return true;
}
}
?>
/trunk/applications/jrest/lib/Spreadsheet/Excel/Writer/BIFFwriter.php
New file
0,0 → 1,235
<?php
/*
* Module written/ported by Xavier Noguer <xnoguer@rezebra.com>
*
* The majority of this is _NOT_ my code. I simply ported it from the
* PERL Spreadsheet::WriteExcel module.
*
* The author of the Spreadsheet::WriteExcel module is John McNamara
* <jmcnamara@cpan.org>
*
* I _DO_ maintain this code, and John McNamara has nothing to do with the
* porting of this code to PHP. Any questions directly related to this
* class library should be directed to me.
*
* License Information:
*
* Spreadsheet_Excel_Writer: A library for generating Excel Spreadsheets
* Copyright (c) 2002-2003 Xavier Noguer xnoguer@rezebra.com
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
 
require_once('PEAR.php');
 
/**
* Class for writing Excel BIFF records.
*
* From "MICROSOFT EXCEL BINARY FILE FORMAT" by Mark O'Brien (Microsoft Corporation):
*
* BIFF (BInary File Format) is the file format in which Excel documents are
* saved on disk. A BIFF file is a complete description of an Excel document.
* BIFF files consist of sequences of variable-length records. There are many
* different types of BIFF records. For example, one record type describes a
* formula entered into a cell; one describes the size and location of a
* window into a document; another describes a picture format.
*
* @author Xavier Noguer <xnoguer@rezebra.com>
* @category FileFormats
* @package Spreadsheet_Excel_Writer
*/
 
class Spreadsheet_Excel_Writer_BIFFwriter extends PEAR
{
/**
* The BIFF/Excel version (5).
* @var integer
*/
var $_BIFF_version = 0x0500;
 
/**
* The byte order of this architecture. 0 => little endian, 1 => big endian
* @var integer
*/
var $_byte_order;
 
/**
* The string containing the data of the BIFF stream
* @var string
*/
var $_data;
 
/**
* The size of the data in bytes. Should be the same as strlen($this->_data)
* @var integer
*/
var $_datasize;
 
/**
* The maximun length for a BIFF record. See _addContinue()
* @var integer
* @see _addContinue()
*/
var $_limit;
/**
* Constructor
*
* @access public
*/
function Spreadsheet_Excel_Writer_BIFFwriter()
{
$this->_byte_order = '';
$this->_data = '';
$this->_datasize = 0;
$this->_limit = 2080;
// Set the byte order
$this->_setByteOrder();
}
 
/**
* Determine the byte order and store it as class data to avoid
* recalculating it for each call to new().
*
* @access private
*/
function _setByteOrder()
{
if ($this->_byte_order == '')
{
// Check if "pack" gives the required IEEE 64bit float
$teststr = pack("d", 1.2345);
$number = pack("C8", 0x8D, 0x97, 0x6E, 0x12, 0x83, 0xC0, 0xF3, 0x3F);
if ($number == $teststr) {
$byte_order = 0; // Little Endian
}
elseif ($number == strrev($teststr)){
$byte_order = 1; // Big Endian
}
else {
// Give up. I'll fix this in a later version.
$this->raiseError("Required floating point format not supported ".
"on this platform.");
}
}
$this->_byte_order = $byte_order;
}
 
/**
* General storage function
*
* @param string $data binary data to prepend
* @access private
*/
function _prepend($data)
{
if (strlen($data) > $this->_limit) {
$data = $this->_addContinue($data);
}
$this->_data = $data.$this->_data;
$this->_datasize += strlen($data);
}
 
/**
* General storage function
*
* @param string $data binary data to append
* @access private
*/
function _append($data)
{
if (strlen($data) > $this->_limit) {
$data = $this->_addContinue($data);
}
$this->_data = $this->_data.$data;
$this->_datasize += strlen($data);
}
 
/**
* Writes Excel BOF record to indicate the beginning of a stream or
* sub-stream in the BIFF file.
*
* @param integer $type type of BIFF file to write: 0x0005 Workbook, 0x0010 Worksheet.
* @access private
*/
function _storeBof($type)
{
$record = 0x0809; // Record identifier
$length = 0x0008; // Number of bytes to follow
$version = $this->_BIFF_version;
// According to the SDK $build and $year should be set to zero.
// However, this throws a warning in Excel 5. So, use these
// magic numbers.
$build = 0x096C;
$year = 0x07C9;
$header = pack("vv", $record, $length);
$data = pack("vvvv", $version, $type, $build, $year);
$this->_prepend($header.$data);
}
 
/**
* Writes Excel EOF record to indicate the end of a BIFF stream.
*
* @access private
*/
function _storeEof()
{
$record = 0x000A; // Record identifier
$length = 0x0000; // Number of bytes to follow
$header = pack("vv", $record, $length);
$this->_append($header);
}
 
/**
* Excel limits the size of BIFF records. In Excel 5 the limit is 2084 bytes. In
* Excel 97 the limit is 8228 bytes. Records that are longer than these limits
* must be split up into CONTINUE blocks.
*
* This function takes a long BIFF record and inserts CONTINUE records as
* necessary.
*
* @param string $data The original binary data to be written
* @return string A very convenient string of continue blocks
* @access private
*/
function _addContinue($data)
{
$limit = $this->_limit;
$record = 0x003C; // Record identifier
// The first 2080/8224 bytes remain intact. However, we have to change
// the length field of the record.
$tmp = substr($data, 0, 2).pack("v", $limit-4).substr($data, 4, $limit - 4);
$header = pack("vv", $record, $limit); // Headers for continue records
// Retrieve chunks of 2080/8224 bytes +4 for the header.
for($i = $limit; $i < strlen($data) - $limit; $i += $limit)
{
$tmp .= $header;
$tmp .= substr($data, $i, $limit);
}
// Retrieve the last chunk of data
$header = pack("vv", $record, strlen($data) - $i);
$tmp .= $header;
$tmp .= substr($data,$i,strlen($data) - $i);
return($tmp);
}
}
?>
/trunk/applications/jrest/lib/Spreadsheet/Excel/Writer/Format.php
New file
0,0 → 1,940
<?php
/*
* Module written/ported by Xavier Noguer <xnoguer@rezebra.com>
*
* The majority of this is _NOT_ my code. I simply ported it from the
* PERL Spreadsheet::WriteExcel module.
*
* The author of the Spreadsheet::WriteExcel module is John McNamara
* <jmcnamara@cpan.org>
*
* I _DO_ maintain this code, and John McNamara has nothing to do with the
* porting of this code to PHP. Any questions directly related to this
* class library should be directed to me.
*
* License Information:
*
* Spreadsheet_Excel_Writer: A library for generating Excel Spreadsheets
* Copyright (c) 2002-2003 Xavier Noguer xnoguer@rezebra.com
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
 
require_once('PEAR.php');
 
/**
* Class for generating Excel XF records (formats)
*
* @author Xavier Noguer <xnoguer@rezebra.com>
* @category FileFormats
* @package Spreadsheet_Excel_Writer
*/
 
class Spreadsheet_Excel_Writer_Format extends PEAR
{
/**
* The index given by the workbook when creating a new format.
* @var integer
*/
var $_xf_index;
 
/**
* Index to the FONT record.
* @var integer
*/
var $font_index;
 
/**
* The font name (ASCII).
* @var string
*/
var $_font_name;
 
/**
* Height of font (1/20 of a point)
* @var integer
*/
var $_size;
 
/**
* Bold style
* @var integer
*/
var $_bold;
 
/**
* Bit specifiying if the font is italic.
* @var integer
*/
var $_italic;
 
/**
* Index to the cell's color
* @var integer
*/
var $_color;
 
/**
* The text underline property
* @var integer
*/
var $_underline;
 
/**
* Bit specifiying if the font has strikeout.
* @var integer
*/
var $_font_strikeout;
 
/**
* Bit specifiying if the font has outline.
* @var integer
*/
var $_font_outline;
 
/**
* Bit specifiying if the font has shadow.
* @var integer
*/
var $_font_shadow;
 
/**
* 2 bytes specifiying the script type for the font.
* @var integer
*/
var $_font_script;
 
/**
* Byte specifiying the font family.
* @var integer
*/
var $_font_family;
 
/**
* Byte specifiying the font charset.
* @var integer
*/
var $_font_charset;
 
/**
* An index (2 bytes) to a FORMAT record (number format).
* @var integer
*/
var $_num_format;
 
/**
* Bit specifying if formulas are hidden.
* @var integer
*/
var $_hidden;
 
/**
* Bit specifying if the cell is locked.
* @var integer
*/
var $_locked;
 
/**
* The three bits specifying the text horizontal alignment.
* @var integer
*/
var $_text_h_align;
 
/**
* Bit specifying if the text is wrapped at the right border.
* @var integer
*/
var $_text_wrap;
 
/**
* The three bits specifying the text vertical alignment.
* @var integer
*/
var $_text_v_align;
 
/**
* 1 bit, apparently not used.
* @var integer
*/
var $_text_justlast;
 
/**
* The two bits specifying the text rotation.
* @var integer
*/
var $_rotation;
 
/**
* The cell's foreground color.
* @var integer
*/
var $_fg_color;
 
/**
* The cell's background color.
* @var integer
*/
var $_bg_color;
 
/**
* The cell's background fill pattern.
* @var integer
*/
var $_pattern;
 
/**
* Style of the bottom border of the cell
* @var integer
*/
var $_bottom;
 
/**
* Color of the bottom border of the cell.
* @var integer
*/
var $_bottom_color;
 
/**
* Style of the top border of the cell
* @var integer
*/
var $_top;
 
/**
* Color of the top border of the cell.
* @var integer
*/
var $_top_color;
 
/**
* Style of the left border of the cell
* @var integer
*/
var $_left;
 
/**
* Color of the left border of the cell.
* @var integer
*/
var $_left_color;
 
/**
* Style of the right border of the cell
* @var integer
*/
var $_right;
 
/**
* Color of the right border of the cell.
* @var integer
*/
var $_right_color;
 
/**
* Constructor
*
* @access public
* @param integer $index the XF index for the format.
* @param array $properties array with properties to be set on initialization.
*/
function Spreadsheet_Excel_Writer_Format($index = 0,$properties = array())
{
$this->_xf_index = $index;
$this->font_index = 0;
$this->_font_name = 'Arial';
$this->_size = 10;
$this->_bold = 0x0190;
$this->_italic = 0;
$this->_color = 0x7FFF;
$this->_underline = 0;
$this->_font_strikeout = 0;
$this->_font_outline = 0;
$this->_font_shadow = 0;
$this->_font_script = 0;
$this->_font_family = 0;
$this->_font_charset = 0;
$this->_num_format = 0;
$this->_hidden = 0;
$this->_locked = 1;
 
$this->_text_h_align = 0;
$this->_text_wrap = 0;
$this->_text_v_align = 2;
$this->_text_justlast = 0;
$this->_rotation = 0;
 
$this->_fg_color = 0x40;
$this->_bg_color = 0x41;
 
$this->_pattern = 0;
$this->_bottom = 0;
$this->_top = 0;
$this->_left = 0;
$this->_right = 0;
$this->_bottom_color = 0x40;
$this->_top_color = 0x40;
$this->_left_color = 0x40;
$this->_right_color = 0x40;
// Set properties passed to Spreadsheet_Excel_Writer_Workbook::addFormat()
foreach($properties as $property => $value)
{
if(method_exists($this,'set'.ucwords($property)))
{
$method_name = 'set'.ucwords($property);
$this->$method_name($value);
}
}
}
 
 
/**
* Generate an Excel BIFF XF record (style or cell).
*
* @param string $style The type of the XF record ('style' or 'cell').
* @return string The XF record
*/
function getXf($style)
{
// Set the type of the XF record and some of the attributes.
if ($style == "style") {
$style = 0xFFF5;
}
else {
$style = $this->_locked;
$style |= $this->_hidden << 1;
}
// Flags to indicate if attributes have been set.
$atr_num = ($this->_num_format != 0)?1:0;
$atr_fnt = ($this->font_index != 0)?1:0;
$atr_alc = ($this->_text_wrap)?1:0;
$atr_bdr = ($this->_bottom ||
$this->_top ||
$this->_left ||
$this->_right)?1:0;
$atr_pat = (($this->_fg_color != 0x40) ||
($this->_bg_color != 0x41) ||
$this->_pattern)?1:0;
$atr_prot = 0;
// Zero the default border colour if the border has not been set.
if ($this->_bottom == 0) {
$this->_bottom_color = 0;
}
if ($this->_top == 0) {
$this->_top_color = 0;
}
if ($this->_right == 0) {
$this->_right_color = 0;
}
if ($this->_left == 0) {
$this->_left_color = 0;
}
$record = 0x00E0; // Record identifier
$length = 0x0010; // Number of bytes to follow
$ifnt = $this->font_index; // Index to FONT record
$ifmt = $this->_num_format; // Index to FORMAT record
$align = $this->_text_h_align; // Alignment
$align |= $this->_text_wrap << 3;
$align |= $this->_text_v_align << 4;
$align |= $this->_text_justlast << 7;
$align |= $this->_rotation << 8;
$align |= $atr_num << 10;
$align |= $atr_fnt << 11;
$align |= $atr_alc << 12;
$align |= $atr_bdr << 13;
$align |= $atr_pat << 14;
$align |= $atr_prot << 15;
$icv = $this->_fg_color; // fg and bg pattern colors
$icv |= $this->_bg_color << 7;
$fill = $this->_pattern; // Fill and border line style
$fill |= $this->_bottom << 6;
$fill |= $this->_bottom_color << 9;
$border1 = $this->_top; // Border line style and color
$border1 |= $this->_left << 3;
$border1 |= $this->_right << 6;
$border1 |= $this->_top_color << 9;
$border2 = $this->_left_color; // Border color
$border2 |= $this->_right_color << 7;
$header = pack("vv", $record, $length);
$data = pack("vvvvvvvv", $ifnt, $ifmt, $style, $align,
$icv, $fill,
$border1, $border2);
return($header.$data);
}
/**
* Generate an Excel BIFF FONT record.
*
* @return string The FONT record
*/
function getFont()
{
$dyHeight = $this->_size * 20; // Height of font (1/20 of a point)
$icv = $this->_color; // Index to color palette
$bls = $this->_bold; // Bold style
$sss = $this->_font_script; // Superscript/subscript
$uls = $this->_underline; // Underline
$bFamily = $this->_font_family; // Font family
$bCharSet = $this->_font_charset; // Character set
$rgch = $this->_font_name; // Font name
$cch = strlen($rgch); // Length of font name
$record = 0x31; // Record identifier
$length = 0x0F + $cch; // Record length
$reserved = 0x00; // Reserved
$grbit = 0x00; // Font attributes
if ($this->_italic) {
$grbit |= 0x02;
}
if ($this->_font_strikeout) {
$grbit |= 0x08;
}
if ($this->_font_outline) {
$grbit |= 0x10;
}
if ($this->_font_shadow) {
$grbit |= 0x20;
}
$header = pack("vv", $record, $length);
$data = pack("vvvvvCCCCC", $dyHeight, $grbit, $icv, $bls,
$sss, $uls, $bFamily,
$bCharSet, $reserved, $cch);
return($header . $data. $this->_font_name);
}
/**
* Returns a unique hash key for a font.
* Used by Spreadsheet_Excel_Writer_Workbook::_storeAllFonts()
*
* The elements that form the key are arranged to increase the probability of
* generating a unique key. Elements that hold a large range of numbers
* (eg. _color) are placed between two binary elements such as _italic
*
* @return string A key for this font
*/
function getFontKey()
{
$key = "$this->_font_name$this->_size";
$key .= "$this->_font_script$this->_underline";
$key .= "$this->_font_strikeout$this->_bold$this->_font_outline";
$key .= "$this->_font_family$this->_font_charset";
$key .= "$this->_font_shadow$this->_color$this->_italic";
$key = str_replace(" ","_",$key);
return ($key);
}
/**
* Returns the index used by Spreadsheet_Excel_Writer_Worksheet::_XF()
*
* @return integer The index for the XF record
*/
function getXfIndex()
{
return($this->_xf_index);
}
/**
* Used in conjunction with the set_xxx_color methods to convert a color
* string into a number. Color range is 0..63 but we will restrict it
* to 8..63 to comply with Gnumeric. Colors 0..7 are repeated in 8..15.
*
* @access private
* @param string $name_color name of the color (i.e.: 'blue', 'red', etc..). Optional.
* @return integer The color index
*/
function _getColor($name_color = '')
{
$colors = array(
'aqua' => 0x0F,
'cyan' => 0x0F,
'black' => 0x08,
'blue' => 0x0C,
'brown' => 0x10,
'magenta' => 0x0E,
'fuchsia' => 0x0E,
'gray' => 0x17,
'grey' => 0x17,
'green' => 0x11,
'lime' => 0x0B,
'navy' => 0x12,
'orange' => 0x35,
'purple' => 0x14,
'red' => 0x0A,
'silver' => 0x16,
'white' => 0x09,
'yellow' => 0x0D
);
// Return the default color, 0x7FFF, if undef,
if($name_color == '') {
return(0x7FFF);
}
// or the color string converted to an integer,
if(isset($colors[$name_color])) {
return($colors[$name_color]);
}
// or the default color if string is unrecognised,
if(preg_match("/\D/",$name_color)) {
return(0x7FFF);
}
// or an index < 8 mapped into the correct range,
if($name_color < 8) {
return($name_color + 8);
}
// or the default color if arg is outside range,
if($name_color > 63) {
return(0x7FFF);
}
// or an integer in the valid range
return($name_color);
}
/**
* Set cell alignment.
*
* @access public
* @param string $location alignment for the cell ('left', 'right', etc...).
*/
function setAlign($location)
{
if (preg_match("/\d/",$location)) {
return; // Ignore numbers
}
$location = strtolower($location);
if ($location == 'left') {
$this->_text_h_align = 1;
}
if ($location == 'centre') {
$this->_text_h_align = 2;
}
if ($location == 'center') {
$this->_text_h_align = 2;
}
if ($location == 'right') {
$this->_text_h_align = 3;
}
if ($location == 'fill') {
$this->_text_h_align = 4;
}
if ($location == 'justify') {
$this->_text_h_align = 5;
}
if ($location == 'merge') {
$this->_text_h_align = 6;
}
if ($location == 'equal_space') { // For T.K.
$this->_text_h_align = 7;
}
if ($location == 'top') {
$this->_text_v_align = 0;
}
if ($location == 'vcentre') {
$this->_text_v_align = 1;
}
if ($location == 'vcenter') {
$this->_text_v_align = 1;
}
if ($location == 'bottom') {
$this->_text_v_align = 2;
}
if ($location == 'vjustify') {
$this->_text_v_align = 3;
}
if ($location == 'vequal_space') { // For T.K.
$this->_text_v_align = 4;
}
}
/**
* This is an alias for the unintuitive setAlign('merge')
*
* @access public
*/
function setMerge()
{
$this->setAlign('merge');
}
/**
* Sets the boldness of the text.
* Bold has a range 100..1000.
* 0 (400) is normal. 1 (700) is bold.
*
* @access public
* @param integer $weight Weight for the text, 0 maps to 400 (normal text),
1 maps to 700 (bold text). Valid range is: 100-1000.
It's Optional, default is 1 (bold).
*/
function setBold($weight = 1)
{
if($weight == 1) {
$weight = 0x2BC; // Bold text
}
if($weight == 0) {
$weight = 0x190; // Normal text
}
if($weight < 0x064) {
$weight = 0x190; // Lower bound
}
if($weight > 0x3E8) {
$weight = 0x190; // Upper bound
}
$this->_bold = $weight;
}
/************************************
* FUNCTIONS FOR SETTING CELLS BORDERS
*/
/**
* Sets the width for the bottom border of the cell
*
* @access public
* @param integer $style style of the cell border. 1 => thin, 2 => thick.
*/
function setBottom($style)
{
$this->_bottom = $style;
}
/**
* Sets the width for the top border of the cell
*
* @access public
* @param integer $style style of the cell top border. 1 => thin, 2 => thick.
*/
function setTop($style)
{
$this->_top = $style;
}
/**
* Sets the width for the left border of the cell
*
* @access public
* @param integer $style style of the cell left border. 1 => thin, 2 => thick.
*/
function setLeft($style)
{
$this->_left = $style;
}
/**
* Sets the width for the right border of the cell
*
* @access public
* @param integer $style style of the cell right border. 1 => thin, 2 => thick.
*/
function setRight($style)
{
$this->_right = $style;
}
/**
* Set cells borders to the same style
*
* @access public
* @param integer $style style to apply for all cell borders. 1 => thin, 2 => thick.
*/
function setBorder($style)
{
$this->setBottom($style);
$this->setTop($style);
$this->setLeft($style);
$this->setRight($style);
}
/*******************************************
* FUNCTIONS FOR SETTING CELLS BORDERS COLORS
*/
/**
* Sets all the cell's borders to the same color
*
* @access public
* @param mixed $color The color we are setting. Either a string (like 'blue'),
* or an integer (range is [8...63]).
*/
function setBorderColor($color)
{
$this->setBottomColor($color);
$this->setTopColor($color);
$this->setLeftColor($color);
$this->setRightColor($color);
}
/**
* Sets the cell's bottom border color
*
* @access public
* @param mixed $color either a string (like 'blue'), or an integer (range is [8...63]).
*/
function setBottomColor($color)
{
$value = $this->_getColor($color);
$this->_bottom_color = $value;
}
/**
* Sets the cell's top border color
*
* @access public
* @param mixed $color either a string (like 'blue'), or an integer (range is [8...63]).
*/
function setTopColor($color)
{
$value = $this->_getColor($color);
$this->_top_color = $value;
}
/**
* Sets the cell's left border color
*
* @access public
* @param mixed $color either a string (like 'blue'), or an integer (range is [8...63]).
*/
function setLeftColor($color)
{
$value = $this->_getColor($color);
$this->_left_color = $value;
}
/**
* Sets the cell's right border color
*
* @access public
* @param mixed $color either a string (like 'blue'), or an integer (range is [8...63]).
*/
function setRightColor($color)
{
$value = $this->_getColor($color);
$this->_right_color = $value;
}
/**
* Sets the cell's foreground color
*
* @access public
* @param mixed $color either a string (like 'blue'), or an integer (range is [8...63]).
*/
function setFgColor($color)
{
$value = $this->_getColor($color);
$this->_fg_color = $value;
}
/**
* Sets the cell's background color
*
* @access public
* @param mixed $color either a string (like 'blue'), or an integer (range is [8...63]).
*/
function setBgColor($color)
{
$value = $this->_getColor($color);
$this->_bg_color = $value;
}
/**
* Sets the cell's color
*
* @access public
* @param mixed $color either a string (like 'blue'), or an integer (range is [8...63]).
*/
function setColor($color)
{
$value = $this->_getColor($color);
$this->_color = $value;
}
/**
* Sets the fill pattern attribute of a cell
*
* @access public
* @param integer $arg Optional. Defaults to 1. Meaningful values are: 0-18,
* 0 meaning no background.
*/
function setPattern($arg = 1)
{
$this->_pattern = $arg;
}
/**
* Sets the underline of the text
*
* @access public
* @param integer $underline The value for underline. Possible values are:
* 1 => underline, 2 => double underline.
*/
function setUnderline($underline)
{
$this->_underline = $underline;
}
/**
* Sets the font style as italic
*
* @access public
*/
function setItalic()
{
$this->_italic = 1;
}
 
/**
* Sets the font size
*
* @access public
* @param integer $size The font size (in pixels I think).
*/
function setSize($size)
{
$this->_size = $size;
}
/**
* Sets text wrapping
*
* @access public
*/
function setTextWrap()
{
$this->_text_wrap = 1;
}
 
/**
* Sets the orientation of the text
*
* @access public
* @param integer $angle The rotation angle for the text (clockwise). Possible
values are: 0, 90, 270 and -1 for stacking top-to-bottom.
*/
function setTextRotation($angle)
{
switch ($angle)
{
case 0:
$this->_rotation = 0;
break;
case 90:
$this->_rotation = 3;
break;
case 270:
$this->_rotation = 2;
break;
case -1:
$this->_rotation = 1;
break;
default :
$this->raiseError("Invalid value for angle.".
" Possible values are: 0, 90, 270 and -1 ".
"for stacking top-to-bottom.");
$this->_rotation = 0;
break;
}
}
 
/**
* Sets the numeric format.
* It can be date, time, currency, etc...
*
* @access public
* @param integer $num_format The numeric format.
*/
function setNumFormat($num_format)
{
$this->_num_format = $num_format;
}
 
/**
* Sets font as strikeout.
*
* @access public
*/
function setStrikeOut()
{
$this->_font_strikeout = 1;
}
 
/**
* Sets outlining for a font.
*
* @access public
*/
function setOutLine()
{
$this->_font_outline = 1;
}
 
/**
* Sets font as shadow.
*
* @access public
*/
function setShadow()
{
$this->_font_shadow = 1;
}
 
/**
* Sets the script type of the text
*
* @access public
* @param integer $script The value for script type. Possible values are:
* 1 => superscript, 2 => subscript.
*/
function setScript($script)
{
$this->_font_script = $script;
}
 
/**
* Unlocks a cell. Useful for unprotecting particular cells of a protected sheet.
*
* @access public
*/
function setUnLocked()
{
$this->_locked = 0;
}
}
?>
/trunk/applications/jrest/lib/Spreadsheet/Excel/Writer/Worksheet.php
New file
0,0 → 1,3095
<?php
/*
* Module written/ported by Xavier Noguer <xnoguer@rezebra.com>
*
* The majority of this is _NOT_ my code. I simply ported it from the
* PERL Spreadsheet::WriteExcel module.
*
* The author of the Spreadsheet::WriteExcel module is John McNamara
* <jmcnamara@cpan.org>
*
* I _DO_ maintain this code, and John McNamara has nothing to do with the
* porting of this code to PHP. Any questions directly related to this
* class library should be directed to me.
*
* License Information:
*
* Spreadsheet_Excel_Writer: A library for generating Excel Spreadsheets
* Copyright (c) 2002-2003 Xavier Noguer xnoguer@rezebra.com
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
 
require_once('Parser.php');
require_once('BIFFwriter.php');
 
/**
* Class for generating Excel Spreadsheets
*
* @author Xavier Noguer <xnoguer@rezebra.com>
* @category FileFormats
* @package Spreadsheet_Excel_Writer
*/
 
class Spreadsheet_Excel_Writer_Worksheet extends Spreadsheet_Excel_Writer_BIFFwriter
{
/**
* Name of the Worksheet
* @var string
*/
var $name;
 
/**
* Index for the Worksheet
* @var integer
*/
var $index;
 
/**
* Reference to the (default) Format object for URLs
* @var object Format
*/
var $_url_format;
 
/**
* Reference to the parser used for parsing formulas
* @var object Format
*/
var $_parser;
 
/**
* Filehandle to the temporary file for storing data
* @var resource
*/
var $_filehandle;
 
/**
* Boolean indicating if we are using a temporary file for storing data
* @var bool
*/
var $_using_tmpfile;
 
/**
* Maximum number of rows for an Excel spreadsheet (BIFF5)
* @var integer
*/
var $_xls_rowmax;
 
/**
* Maximum number of columns for an Excel spreadsheet (BIFF5)
* @var integer
*/
var $_xls_colmax;
 
/**
* Maximum number of characters for a string (LABEL record in BIFF5)
* @var integer
*/
var $_xls_strmax;
 
/**
* First row for the DIMENSIONS record
* @var integer
* @see storeDimensions()
*/
var $_dim_rowmin;
 
/**
* Last row for the DIMENSIONS record
* @var integer
* @see storeDimensions()
*/
var $_dim_rowmax;
 
/**
* First column for the DIMENSIONS record
* @var integer
* @see storeDimensions()
*/
var $_dim_colmin;
 
/**
* Last column for the DIMENSIONS record
* @var integer
* @see storeDimensions()
*/
var $_dim_colmax;
 
/**
* Array containing format information for columns
* @var array
*/
var $_colinfo;
 
/**
* Array containing the selected area for the worksheet
* @var array
*/
var $_selection;
 
/**
* Array containing the panes for the worksheet
* @var array
*/
var $_panes;
 
/**
* The active pane for the worksheet
* @var integer
*/
var $_active_pane;
 
/**
* Bit specifying if panes are frozen
* @var integer
*/
var $_frozen;
 
/**
* Bit specifying if the worksheet is selected
* @var integer
*/
var $selected;
 
/**
* The paper size (for printing) (DOCUMENT!!!)
* @var integer
*/
var $_paper_size;
 
/**
* Bit specifying paper orientation (for printing). 0 => landscape, 1 => portrait
* @var integer
*/
var $_orientation;
 
/**
* The page header caption
* @var string
*/
var $_header;
 
/**
* The page footer caption
* @var string
*/
var $_footer;
 
/**
* The horizontal centering value for the page
* @var integer
*/
var $_hcenter;
 
/**
* The vertical centering value for the page
* @var integer
*/
var $_vcenter;
 
/**
* The margin for the header
* @var float
*/
var $_margin_head;
 
/**
* The margin for the footer
* @var float
*/
var $_margin_foot;
 
/**
* The left margin for the worksheet in inches
* @var float
*/
var $_margin_left;
 
/**
* The right margin for the worksheet in inches
* @var float
*/
var $_margin_right;
 
/**
* The top margin for the worksheet in inches
* @var float
*/
var $_margin_top;
 
/**
* The bottom margin for the worksheet in inches
* @var float
*/
var $_margin_bottom;
 
/**
* First row to reapeat on each printed page
* @var integer
*/
var $title_rowmin;
 
/**
* Last row to reapeat on each printed page
* @var integer
*/
var $title_rowmax;
 
/**
* First column to reapeat on each printed page
* @var integer
*/
var $title_colmin;
 
/**
* First row of the area to print
* @var integer
*/
var $print_rowmin;
 
/**
* Last row to of the area to print
* @var integer
*/
var $print_rowmax;
 
/**
* First column of the area to print
* @var integer
*/
var $print_colmin;
 
/**
* Last column of the area to print
* @var integer
*/
var $print_colmax;
 
/**
* Constructor
*
* @param string $name The name of the new worksheet
* @param integer $index The index of the new worksheet
* @param mixed &$activesheet The current activesheet of the workbook we belong to
* @param mixed &$firstsheet The first worksheet in the workbook we belong to
* @param mixed &$url_format The default format for hyperlinks
* @param mixed &$parser The formula parser created for the Workbook
*/
function Spreadsheet_Excel_Writer_Worksheet($name, $index, &$activesheet,
&$firstsheet, &$url_format,
&$parser)
{
// It needs to call its parent's constructor explicitly
$this->Spreadsheet_Excel_Writer_BIFFwriter();
$rowmax = 65536; // 16384 in Excel 5
$colmax = 256;
$this->name = $name;
$this->index = $index;
$this->activesheet = &$activesheet;
$this->firstsheet = &$firstsheet;
$this->_url_format = &$url_format;
$this->_parser = &$parser;
//$this->ext_sheets = array();
$this->_filehandle = "";
$this->_using_tmpfile = true;
//$this->fileclosed = 0;
//$this->offset = 0;
$this->_xls_rowmax = $rowmax;
$this->_xls_colmax = $colmax;
$this->_xls_strmax = 255;
$this->_dim_rowmin = $rowmax + 1;
$this->_dim_rowmax = 0;
$this->_dim_colmin = $colmax + 1;
$this->_dim_colmax = 0;
$this->_colinfo = array();
$this->_selection = array(0,0,0,0);
$this->_panes = array();
$this->_active_pane = 3;
$this->_frozen = 0;
$this->selected = 0;
$this->_paper_size = 0x0;
$this->_orientation = 0x1;
$this->_header = '';
$this->_footer = '';
$this->_hcenter = 0;
$this->_vcenter = 0;
$this->_margin_head = 0.50;
$this->_margin_foot = 0.50;
$this->_margin_left = 0.75;
$this->_margin_right = 0.75;
$this->_margin_top = 1.00;
$this->_margin_bottom = 1.00;
$this->title_rowmin = NULL;
$this->title_rowmax = NULL;
$this->title_colmin = NULL;
$this->title_colmax = NULL;
$this->print_rowmin = NULL;
$this->print_rowmax = NULL;
$this->print_colmin = NULL;
$this->print_colmax = NULL;
$this->_print_gridlines = 1;
$this->_print_headers = 0;
$this->_fit_page = 0;
$this->_fit_width = 0;
$this->_fit_height = 0;
$this->_hbreaks = array();
$this->_vbreaks = array();
$this->_protect = 0;
$this->_password = NULL;
$this->col_sizes = array();
$this->row_sizes = array();
$this->_zoom = 100;
$this->_print_scale = 100;
$this->_initialize();
}
/**
* Open a tmp file to store the majority of the Worksheet data. If this fails,
* for example due to write permissions, store the data in memory. This can be
* slow for large files.
*
* @access private
*/
function _initialize()
{
// Open tmp file for storing Worksheet data
$fh = tmpfile();
if ( $fh) {
// Store filehandle
$this->_filehandle = $fh;
}
else {
// If tmpfile() fails store data in memory
$this->_using_tmpfile = false;
}
}
/**
* Add data to the beginning of the workbook (note the reverse order)
* and to the end of the workbook.
*
* @access public
* @see Spreadsheet_Excel_Writer_Workbook::storeWorkbook()
* @param array $sheetnames The array of sheetnames from the Workbook this
* worksheet belongs to
*/
function close($sheetnames)
{
$num_sheets = count($sheetnames);
/***********************************************
* Prepend in reverse order!!
*/
// Prepend the sheet dimensions
$this->storeDimensions();
// Prepend the sheet password
$this->_storePassword();
// Prepend the sheet protection
$this->_storeProtect();
// Prepend the page setup
$this->_storeSetup();
// Prepend the bottom margin
$this->_storeMarginBottom();
// Prepend the top margin
$this->_storeMarginTop();
// Prepend the right margin
$this->_storeMarginRight();
// Prepend the left margin
$this->_storeMarginLeft();
// Prepend the page vertical centering
$this->_storeVcenter();
// Prepend the page horizontal centering
$this->_storeHcenter();
// Prepend the page footer
$this->_storeFooter();
// Prepend the page header
$this->_storeHeader();
// Prepend the vertical page breaks
$this->_storeVbreak();
// Prepend the horizontal page breaks
$this->_storeHbreak();
// Prepend WSBOOL
$this->_storeWsbool();
// Prepend GRIDSET
$this->_storeGridset();
// Prepend PRINTGRIDLINES
$this->_storePrintGridlines();
// Prepend PRINTHEADERS
$this->_storePrintHeaders();
// Prepend EXTERNSHEET references
for ($i = $num_sheets; $i > 0; $i--)
{
$sheetname = $sheetnames[$i-1];
$this->_storeExternsheet($sheetname);
}
// Prepend the EXTERNCOUNT of external references.
$this->_storeExterncount($num_sheets);
// Prepend the COLINFO records if they exist
if (!empty($this->_colinfo))
{
for($i=0; $i < count($this->_colinfo); $i++) {
$this->_storeColinfo($this->_colinfo[$i]);
}
$this->_storeDefcol();
}
// Prepend the BOF record
$this->_storeBof(0x0010);
/*
* End of prepend. Read upwards from here.
***********************************************/
// Append
$this->_storeWindow2();
$this->_storeZoom();
if (!empty($this->_panes)) {
$this->_storePanes($this->_panes);
}
$this->_storeSelection($this->_selection);
$this->_storeEof();
}
/**
* Retrieve the worksheet name.
* This is usefull when creating worksheets without a name.
*
* @access public
* @return string The worksheet's name
*/
function getName()
{
return $this->name;
}
/**
* Retrieves data from memory in one chunk, or from disk in $buffer
* sized chunks.
*
* @return string The data
*/
function getData()
{
$buffer = 4096;
// Return data stored in memory
if (isset($this->_data))
{
$tmp = $this->_data;
unset($this->_data);
$fh = $this->_filehandle;
if ($this->_using_tmpfile) {
fseek($fh, 0);
}
return($tmp);
}
// Return data stored on disk
if ($this->_using_tmpfile)
{
if ($tmp = fread($this->_filehandle, $buffer)) {
return($tmp);
}
}
// No data to return
return('');
}
/**
* Set this worksheet as a selected worksheet,
* i.e. the worksheet has its tab highlighted.
*
* @access public
*/
function select()
{
$this->selected = 1;
}
/**
* Set this worksheet as the active worksheet,
* i.e. the worksheet that is displayed when the workbook is opened.
* Also set it as selected.
*
* @access public
*/
function activate()
{
$this->selected = 1;
$this->activesheet = $this->index;
}
/**
* Set this worksheet as the first visible sheet.
* This is necessary when there are a large number of worksheets and the
* activated worksheet is not visible on the screen.
*
* @access public
*/
function setFirstSheet()
{
$this->firstsheet = $this->index;
}
/**
* Set the worksheet protection flag
* to prevent accidental modification and to
* hide formulas if the locked and hidden format properties have been set.
*
* @access public
* @param string $password The password to use for protecting the sheet.
*/
function protect($password)
{
$this->_protect = 1;
$this->_password = $this->_encodePassword($password);
}
/**
* Set the width of a single column or a range of columns.
*
* @access public
* @param integer $firstcol first column on the range
* @param integer $lastcol last column on the range
* @param integer $width width to set
* @param mixed $format The optional XF format to apply to the columns
* @param integer $hidden The optional hidden atribute
*/
function setColumn($firstcol, $lastcol, $width, $format = 0, $hidden = 0)
{
$this->_colinfo[] = array($firstcol, $lastcol, $width, &$format, $hidden);
// Set width to zero if column is hidden
$width = ($hidden) ? 0 : $width;
for($col = $firstcol; $col <= $lastcol; $col++) {
$this->col_sizes[$col] = $width;
}
}
/**
* Set which cell or cells are selected in a worksheet
*
* @access public
* @param integer $first_row first row in the selected quadrant
* @param integer $first_column first column in the selected quadrant
* @param integer $last_row last row in the selected quadrant
* @param integer $last_column last column in the selected quadrant
*/
function setSelection($first_row,$first_column,$last_row,$last_column)
{
$this->_selection = array($first_row,$first_column,$last_row,$last_column);
}
/**
* Set panes and mark them as frozen.
*
* @access public
* @param array $panes This is the only parameter received and is composed of the following:
* 0 => Vertical split position,
* 1 => Horizontal split position
* 2 => Top row visible
* 3 => Leftmost column visible
* 4 => Active pane
*/
function freezePanes($panes)
{
$this->_frozen = 1;
$this->_panes = $panes;
}
/**
* Set panes and mark them as unfrozen.
*
* @access public
* @param array $panes This is the only parameter received and is composed of the following:
* 0 => Vertical split position,
* 1 => Horizontal split position
* 2 => Top row visible
* 3 => Leftmost column visible
* 4 => Active pane
*/
function thawPanes($panes)
{
$this->_frozen = 0;
$this->_panes = $panes;
}
/**
* Set the page orientation as portrait.
*
* @access public
*/
function setPortrait()
{
$this->_orientation = 1;
}
/**
* Set the page orientation as landscape.
*
* @access public
*/
function setLandscape()
{
$this->_orientation = 0;
}
/**
* Set the paper type. Ex. 1 = US Letter, 9 = A4
*
* @access public
* @param integer $size The type of paper size to use
*/
function setPaper($size = 0)
{
$this->_paper_size = $size;
}
/**
* Set the page header caption and optional margin.
*
* @access public
* @param string $string The header text
* @param float $margin optional head margin in inches.
*/
function setHeader($string,$margin = 0.50)
{
if (strlen($string) >= 255) {
//carp 'Header string must be less than 255 characters';
return;
}
$this->_header = $string;
$this->_margin_head = $margin;
}
/**
* Set the page footer caption and optional margin.
*
* @access public
* @param string $string The footer text
* @param float $margin optional foot margin in inches.
*/
function setFooter($string,$margin = 0.50)
{
if (strlen($string) >= 255) {
//carp 'Footer string must be less than 255 characters';
return;
}
$this->_footer = $string;
$this->_margin_foot = $margin;
}
/**
* Center the page horinzontally.
*
* @access public
* @param integer $center the optional value for centering. Defaults to 1 (center).
*/
function centerHorizontally($center = 1)
{
$this->_hcenter = $center;
}
/**
* Center the page vertically.
*
* @access public
* @param integer $center the optional value for centering. Defaults to 1 (center).
*/
function centerVertically($center = 1)
{
$this->_vcenter = $center;
}
/**
* Set all the page margins to the same value in inches.
*
* @access public
* @param float $margin The margin to set in inches
*/
function setMargins($margin)
{
$this->setMarginLeft($margin);
$this->setMarginRight($margin);
$this->setMarginTop($margin);
$this->setMarginBottom($margin);
}
/**
* Set the left and right margins to the same value in inches.
*
* @access public
* @param float $margin The margin to set in inches
*/
function setMargins_LR($margin)
{
$this->setMarginLeft($margin);
$this->setMarginRight($margin);
}
/**
* Set the top and bottom margins to the same value in inches.
*
* @access public
* @param float $margin The margin to set in inches
*/
function setMargins_TB($margin)
{
$this->setMarginTop($margin);
$this->setMarginBottom($margin);
}
/**
* Set the left margin in inches.
*
* @access public
* @param float $margin The margin to set in inches
*/
function setMarginLeft($margin = 0.75)
{
$this->_margin_left = $margin;
}
/**
* Set the right margin in inches.
*
* @access public
* @param float $margin The margin to set in inches
*/
function setMarginRight($margin = 0.75)
{
$this->_margin_right = $margin;
}
/**
* Set the top margin in inches.
*
* @access public
* @param float $margin The margin to set in inches
*/
function setMarginTop($margin = 1.00)
{
$this->_margin_top = $margin;
}
/**
* Set the bottom margin in inches.
*
* @access public
* @param float $margin The margin to set in inches
*/
function setMarginBottom($margin = 1.00)
{
$this->_margin_bottom = $margin;
}
/**
* Set the rows to repeat at the top of each printed page.
*
* @access public
* @param integer $first_row First row to repeat
* @param integer $last_row Last row to repeat. Optional.
*/
function repeatRows($first_row, $last_row = NULL)
{
$this->title_rowmin = $first_row;
if (isset($last_row)) { //Second row is optional
$this->title_rowmax = $last_row;
}
else {
$this->title_rowmax = $first_row;
}
}
/**
* Set the columns to repeat at the left hand side of each printed page.
*
* @access public
* @param integer $first_col First column to repeat
* @param integer $last_col Last column to repeat. Optional.
*/
function repeatColumns($first_col, $last_col = NULL)
{
$this->title_colmin = $first_col;
if (isset($last_col)) { // Second col is optional
$this->title_colmax = $last_col;
}
else {
$this->title_colmax = $first_col;
}
}
/**
* Set the area of each worksheet that will be printed.
*
* @access public
* @param integer $first_row First row of the area to print
* @param integer $first_col First column of the area to print
* @param integer $last_row Last row of the area to print
* @param integer $last_col Last column of the area to print
*/
function printArea($first_row, $first_col, $last_row, $last_col)
{
$this->print_rowmin = $first_row;
$this->print_colmin = $first_col;
$this->print_rowmax = $last_row;
$this->print_colmax = $last_col;
}
/**
* Set the option to hide gridlines on the printed page.
*
* @access public
*/
function hideGridlines()
{
$this->_print_gridlines = 0;
}
/**
* Set the option to print the row and column headers on the printed page.
*
* @access public
* @param integer $print Whether to print the headers or not. Defaults to 1 (print).
*/
function printRowColHeaders($print = 1)
{
$this->_print_headers = $print;
}
/**
* Set the vertical and horizontal number of pages that will define the maximum area printed.
* It doesn't seem to work with OpenOffice.
*
* @access public
* @param integer $width Maximun width of printed area in pages
* @param integer $height Maximun heigth of printed area in pages
* @see setPrintScale()
*/
function fitToPages($width, $height)
{
$this->_fit_page = 1;
$this->_fit_width = $width;
$this->_fit_height = $height;
}
/**
* Store the horizontal page breaks on a worksheet (for printing).
* The breaks represent the row after which the break is inserted.
*
* @access public
* @param array $breaks Array containing the horizontal page breaks
*/
function setHPagebreaks($breaks)
{
foreach($breaks as $break) {
array_push($this->_hbreaks,$break);
}
}
/**
* Store the vertical page breaks on a worksheet (for printing).
* The breaks represent the column after which the break is inserted.
*
* @access public
* @param array $breaks Array containing the vertical page breaks
*/
function setVPagebreaks($breaks)
{
foreach($breaks as $break) {
array_push($this->_vbreaks,$break);
}
}
/**
* Set the worksheet zoom factor.
*
* @access public
* @param integer $scale The zoom factor
*/
function setZoom($scale = 100)
{
// Confine the scale to Excel's range
if ($scale < 10 or $scale > 400)
{
$this->raiseError("Zoom factor $scale outside range: 10 <= zoom <= 400");
$scale = 100;
}
$this->_zoom = floor($scale);
}
/**
* Set the scale factor for the printed page.
* It turns off the "fit to page" option
*
* @access public
* @param integer $scale The optional scale factor. Defaults to 100
*/
function setPrintScale($scale = 100)
{
// Confine the scale to Excel's range
if ($scale < 10 or $scale > 400)
{
$this->raiseError("Print scale $scale outside range: 10 <= zoom <= 400");
$scale = 100;
}
// Turn off "fit to page" option
$this->_fit_page = 0;
$this->_print_scale = floor($scale);
}
/**
* Map to the appropriate write method acording to the token recieved.
*
* @access public
* @param integer $row The row of the cell we are writing to
* @param integer $col The column of the cell we are writing to
* @param mixed $token What we are writing
* @param mixed $format The optional format to apply to the cell
*/
function write($row, $col, $token, $format = 0)
{
// Check for a cell reference in A1 notation and substitute row and column
/*if ($_[0] =~ /^\D/) {
@_ = $this->_substituteCellref(@_);
}*/
// Match number
if (preg_match("/^([+-]?)(?=\d|\.\d)\d*(\.\d*)?([Ee]([+-]?\d+))?$/",$token)) {
return $this->writeNumber($row,$col,$token,$format);
}
// Match http or ftp URL
elseif (preg_match("/^[fh]tt?p:\/\//",$token)) {
return $this->writeUrl($row, $col, $token, $format);
}
// Match mailto:
elseif (preg_match("/^mailto:/",$token)) {
return $this->writeUrl($row, $col, $token, $format);
}
// Match internal or external sheet link
elseif (preg_match("/^(?:in|ex)ternal:/",$token)) {
return $this->writeUrl($row, $col, $token, $format);
}
// Match formula
elseif (preg_match("/^=/",$token)) {
return $this->writeFormula($row, $col, $token, $format);
}
// Match formula
elseif (preg_match("/^@/",$token)) {
return $this->writeFormula($row, $col, $token, $format);
}
// Match blank
elseif ($token == '') {
return $this->writeBlank($row,$col,$format);
}
// Default: match string
else {
return $this->writeString($row,$col,$token,$format);
}
}
/**
* Write an array of values as a row
*
* @access public
* @param
* @return
*/
 
function writeRow($row, $col, $val, $format=0)
{
if (is_array($val)) {
foreach($val as $v) {
if (is_array($v)) {
$this->writeCol($row, $col, $v, $format);
} else {
$this->write($row, $col, $v, $format);
}
$col++;
}
} else {
$retval = new PEAR_Error('$val needs to be an array');
}
return($retval);
}
/**
* Write an array of values as a column
*
* @access public
* @param
* @return
*/
function writeCol($row, $col, $val, $format=0)
{
if (is_array($val)) {
foreach($val as $v) {
$this->write($row, $col, $v, $format);
$row++;
}
} else {
$retval = new PEAR_Error('$val needs to be an array');
}
return($retval);
}
/**
* Returns an index to the XF record in the workbook
*
* @access private
* @param mixed &$format The optional XF format
* @return integer The XF record index
*/
function _XF(&$format)
{
if ($format != 0) {
return($format->getXfIndex());
}
else {
return(0x0F);
}
}
/******************************************************************************
*******************************************************************************
*
* Internal methods
*/
/**
* Store Worksheet data in memory using the parent's class append() or to a
* temporary file, the default.
*
* @access private
* @param string $data The binary data to append
*/
function _append($data)
{
if ($this->_using_tmpfile)
{
// Add CONTINUE records if necessary
if (strlen($data) > $this->_limit) {
$data = $this->_addContinue($data);
}
fwrite($this->_filehandle,$data);
$this->_datasize += strlen($data);
}
else {
parent::_append($data);
}
}
/**
* Substitute an Excel cell reference in A1 notation for zero based row and
* column values in an argument list.
*
* Ex: ("A4", "Hello") is converted to (3, 0, "Hello").
*
* @access private
* @param string $cell The cell reference. Or range of cells.
* @return array
*/
function _substituteCellref($cell)
{
$cell = strtoupper($cell);
// Convert a column range: 'A:A' or 'B:G'
if (preg_match("/([A-I]?[A-Z]):([A-I]?[A-Z])/",$cell,$match)) {
list($no_use, $col1) = $this->_cellToRowcol($match[1] .'1'); // Add a dummy row
list($no_use, $col2) = $this->_cellToRowcol($match[2] .'1'); // Add a dummy row
return(array($col1, $col2));
}
// Convert a cell range: 'A1:B7'
if (preg_match("/\$?([A-I]?[A-Z]\$?\d+):\$?([A-I]?[A-Z]\$?\d+)/",$cell,$match)) {
list($row1, $col1) = $this->_cellToRowcol($match[1]);
list($row2, $col2) = $this->_cellToRowcol($match[2]);
return(array($row1, $col1, $row2, $col2));
}
// Convert a cell reference: 'A1' or 'AD2000'
if (preg_match("/\$?([A-I]?[A-Z]\$?\d+)/",$cell)) {
list($row1, $col1) = $this->_cellToRowcol($match[1]);
return(array($row1, $col1));
}
// TODO use real error codes
$this->raiseError("Unknown cell reference $cell", 0, PEAR_ERROR_DIE);
}
/**
* Convert an Excel cell reference in A1 notation to a zero based row and column
* reference; converts C1 to (0, 2).
*
* @access private
* @param string $cell The cell reference.
* @return array containing (row, column)
*/
function _cellToRowcol($cell)
{
preg_match("/\$?([A-I]?[A-Z])\$?(\d+)/",$cell,$match);
$col = $match[1];
$row = $match[2];
// Convert base26 column string to number
$chars = explode('', $col);
$expn = 0;
$col = 0;
while ($chars) {
$char = array_pop($chars); // LS char first
$col += (ord($char) -ord('A') +1) * pow(26,$expn);
$expn++;
}
// Convert 1-index to zero-index
$row--;
$col--;
return(array($row, $col));
}
/**
* Based on the algorithm provided by Daniel Rentz of OpenOffice.
*
* @access private
* @param string $plaintext The password to be encoded in plaintext.
* @return string The encoded password
*/
function _encodePassword($plaintext)
{
$password = 0x0000;
$i = 1; // char position
// split the plain text password in its component characters
$chars = preg_explode('//', $plaintext, -1, PREG_SPLIT_NO_EMPTY);
foreach($chars as $char)
{
$value = ord($char) << $i; // shifted ASCII value
$rotated_bits = $value >> 15; // rotated bits beyond bit 15
$value &= 0x7fff; // first 15 bits
$password ^= ($value | $rotated_bits);
$i++;
}
$password ^= strlen($plaintext);
$password ^= 0xCE4B;
 
return($password);
}
 
/******************************************************************************
*******************************************************************************
*
* BIFF RECORDS
*/
/**
* Write a double to the specified row and column (zero indexed).
* An integer can be written as a double. Excel will display an
* integer. $format is optional.
*
* Returns 0 : normal termination
* -2 : row or column out of range
*
* @access public
* @param integer $row Zero indexed row
* @param integer $col Zero indexed column
* @param float $num The number to write
* @param mixed $format The optional XF format
* @return integer
*/
function writeNumber($row, $col, $num, $format = 0)
{
$record = 0x0203; // Record identifier
$length = 0x000E; // Number of bytes to follow
$xf = $this->_XF($format); // The cell format
// Check that row and col are valid and store max and min values
if ($row >= $this->_xls_rowmax)
{
return(-2);
}
if ($col >= $this->_xls_colmax)
{
return(-2);
}
if ($row < $this->_dim_rowmin)
{
$this->_dim_rowmin = $row;
}
if ($row > $this->_dim_rowmax)
{
$this->_dim_rowmax = $row;
}
if ($col < $this->_dim_colmin)
{
$this->_dim_colmin = $col;
}
if ($col > $this->_dim_colmax)
{
$this->_dim_colmax = $col;
}
$header = pack("vv", $record, $length);
$data = pack("vvv", $row, $col, $xf);
$xl_double = pack("d", $num);
if ($this->_byte_order) // if it's Big Endian
{
$xl_double = strrev($xl_double);
}
$this->_append($header.$data.$xl_double);
return(0);
}
/**
* Write a string to the specified row and column (zero indexed).
* NOTE: there is an Excel 5 defined limit of 255 characters.
* $format is optional.
* Returns 0 : normal termination
* -2 : row or column out of range
* -3 : long string truncated to 255 chars
*
* @access public
* @param integer $row Zero indexed row
* @param integer $col Zero indexed column
* @param string $str The string to write
* @param mixed $format The XF format for the cell
* @return integer
*/
function writeString($row, $col, $str, $format = 0)
{
$strlen = strlen($str);
$record = 0x0204; // Record identifier
$length = 0x0008 + $strlen; // Bytes to follow
$xf = $this->_XF($format); // The cell format
$str_error = 0;
// Check that row and col are valid and store max and min values
if ($row >= $this->_xls_rowmax)
{
return(-2);
}
if ($col >= $this->_xls_colmax)
{
return(-2);
}
if ($row < $this->_dim_rowmin)
{
$this->_dim_rowmin = $row;
}
if ($row > $this->_dim_rowmax)
{
$this->_dim_rowmax = $row;
}
if ($col < $this->_dim_colmin)
{
$this->_dim_colmin = $col;
}
if ($col > $this->_dim_colmax)
{
$this->_dim_colmax = $col;
}
if ($strlen > $this->_xls_strmax) // LABEL must be < 255 chars
{
$str = substr($str, 0, $this->_xls_strmax);
$length = 0x0008 + $this->_xls_strmax;
$strlen = $this->_xls_strmax;
$str_error = -3;
}
$header = pack("vv", $record, $length);
$data = pack("vvvv", $row, $col, $xf, $strlen);
$this->_append($header.$data.$str);
return($str_error);
}
 
/**
* Writes a note associated with the cell given by the row and column.
* NOTE records don't have a length limit.
*
* @access public
* @param integer $row Zero indexed row
* @param integer $col Zero indexed column
* @param string $note The note to write
*/
function writeNote($row, $col, $note)
{
$note_length = strlen($note);
$record = 0x001C; // Record identifier
$max_length = 2048; // Maximun length for a NOTE record
//$length = 0x0006 + $note_length; // Bytes to follow
 
// Check that row and col are valid and store max and min values
if ($row >= $this->_xls_rowmax)
{
return(-2);
}
if ($col >= $this->_xls_colmax)
{
return(-2);
}
if ($row < $this->_dim_rowmin)
{
$this->_dim_rowmin = $row;
}
if ($row > $this->_dim_rowmax)
{
$this->_dim_rowmax = $row;
}
if ($col < $this->_dim_colmin)
{
$this->_dim_colmin = $col;
}
if ($col > $this->_dim_colmax)
{
$this->_dim_colmax = $col;
}
// Length for this record is no more than 2048 + 6
$length = 0x0006 + min($note_length, 2048);
$header = pack("vv", $record, $length);
$data = pack("vvv", $row, $col, $note_length);
$this->_append($header.$data.substr($note, 0, 2048));
 
for($i = $max_length; $i < $note_length; $i += $max_length)
{
$chunk = substr($note, $i, $max_length);
$length = 0x0006 + strlen($chunk);
$header = pack("vv", $record, $length);
$data = pack("vvv", -1, 0, strlen($chunk));
$this->_append($header.$data.$chunk);
}
return(0);
}
 
/**
* Write a blank cell to the specified row and column (zero indexed).
* A blank cell is used to specify formatting without adding a string
* or a number.
*
* A blank cell without a format serves no purpose. Therefore, we don't write
* a BLANK record unless a format is specified.
*
* Returns 0 : normal termination (including no format)
* -1 : insufficient number of arguments
* -2 : row or column out of range
*
* @access public
* @param integer $row Zero indexed row
* @param integer $col Zero indexed column
* @param mixed $format The XF format
*/
function writeBlank($row, $col, $format)
{
// Don't write a blank cell unless it has a format
if ($format == 0)
{
return(0);
}
$record = 0x0201; // Record identifier
$length = 0x0006; // Number of bytes to follow
$xf = $this->_XF($format); // The cell format
// Check that row and col are valid and store max and min values
if ($row >= $this->_xls_rowmax)
{
return(-2);
}
if ($col >= $this->_xls_colmax)
{
return(-2);
}
if ($row < $this->_dim_rowmin)
{
$this->_dim_rowmin = $row;
}
if ($row > $this->_dim_rowmax)
{
$this->_dim_rowmax = $row;
}
if ($col < $this->_dim_colmin)
{
$this->_dim_colmin = $col;
}
if ($col > $this->_dim_colmax)
{
$this->_dim_colmax = $col;
}
$header = pack("vv", $record, $length);
$data = pack("vvv", $row, $col, $xf);
$this->_append($header.$data);
return 0;
}
 
/**
* Write a formula to the specified row and column (zero indexed).
* The textual representation of the formula is passed to the parser in
* Parser.php which returns a packed binary string.
*
* Returns 0 : normal termination
* -1 : formula errors (bad formula)
* -2 : row or column out of range
*
* @access public
* @param integer $row Zero indexed row
* @param integer $col Zero indexed column
* @param string $formula The formula text string
* @param mixed $format The optional XF format
* @return integer
*/
function writeFormula($row, $col, $formula, $format = 0)
{
$record = 0x0006; // Record identifier
// Excel normally stores the last calculated value of the formula in $num.
// Clearly we are not in a position to calculate this a priori. Instead
// we set $num to zero and set the option flags in $grbit to ensure
// automatic calculation of the formula when the file is opened.
//
$xf = $this->_XF($format); // The cell format
$num = 0x00; // Current value of formula
$grbit = 0x03; // Option flags
$chn = 0x0000; // Must be zero
// Check that row and col are valid and store max and min values
if ($row >= $this->_xls_rowmax)
{
return(-2);
}
if ($col >= $this->_xls_colmax)
{
return(-2);
}
if ($row < $this->_dim_rowmin)
{
$this->_dim_rowmin = $row;
}
if ($row > $this->_dim_rowmax)
{
$this->_dim_rowmax = $row;
}
if ($col < $this->_dim_colmin)
{
$this->_dim_colmin = $col;
}
if ($col > $this->_dim_colmax)
{
$this->_dim_colmax = $col;
}
// Strip the '=' or '@' sign at the beginning of the formula string
if (preg_match("/^=/",$formula)) {
$formula = preg_replace("/(^=)/","",$formula);
}
elseif (preg_match("/^@/",$formula)) {
$formula = preg_replace("/(^@)/","",$formula);
}
else
{
// Error handling
$this->writeString($row, $col, 'Unrecognised character for formula');
return -1;
}
// Parse the formula using the parser in Parser.php
$error = $this->_parser->parse($formula);
if ($this->isError($error))
{
$this->writeString($row, $col, $error->getMessage());
return -1;
}
$formula = $this->_parser->toReversePolish();
if ($this->isError($formula))
{
$this->writeString($row, $col, $formula->getMessage());
return -1;
}
$formlen = strlen($formula); // Length of the binary string
$length = 0x16 + $formlen; // Length of the record data
$header = pack("vv", $record, $length);
$data = pack("vvvdvVv", $row, $col, $xf, $num,
$grbit, $chn, $formlen);
$this->_append($header.$data.$formula);
return 0;
}
/**
* Write a hyperlink.
* This is comprised of two elements: the visible label and
* the invisible link. The visible label is the same as the link unless an
* alternative string is specified. The label is written using the
* writeString() method. Therefore the 255 characters string limit applies.
* $string and $format are optional.
*
* The hyperlink can be to a http, ftp, mail, internal sheet (not yet), or external
* directory url.
*
* Returns 0 : normal termination
* -2 : row or column out of range
* -3 : long string truncated to 255 chars
*
* @access public
* @param integer $row Row
* @param integer $col Column
* @param string $url URL string
* @param string $string Alternative label
* @param mixed $format The cell format
* @return integer
*/
function writeUrl($row, $col, $url, $string = '', $format = 0)
{
// Add start row and col to arg list
return($this->_writeUrl_range($row, $col, $row, $col, $url, $string, $format));
}
/**
* This is the more general form of writeUrl(). It allows a hyperlink to be
* written to a range of cells. This function also decides the type of hyperlink
* to be written. These are either, Web (http, ftp, mailto), Internal
* (Sheet1!A1) or external ('c:\temp\foo.xls#Sheet1!A1').
*
* @access private
* @see writeUrl()
* @param integer $row1 Start row
* @param integer $col1 Start column
* @param integer $row2 End row
* @param integer $col2 End column
* @param string $url URL string
* @param string $string Alternative label
* @param mixed $format The cell format
* @return integer
*/
function _writeUrl_range($row1, $col1, $row2, $col2, $url, $string = '', $format = 0)
{
// Check for internal/external sheet links or default to web link
if (preg_match('[^internal:]', $url)) {
return($this->_writeUrlInternal($row1, $col1, $row2, $col2, $url, $string, $format));
}
if (preg_match('[^external:]', $url)) {
return($this->_writeUrlExternal($row1, $col1, $row2, $col2, $url, $string, $format));
}
return($this->_writeUrlWeb($row1, $col1, $row2, $col2, $url, $string, $format));
}
/**
* Used to write http, ftp and mailto hyperlinks.
* The link type ($options) is 0x03 is the same as absolute dir ref without
* sheet. However it is differentiated by the $unknown2 data stream.
*
* @access private
* @see writeUrl()
* @param integer $row1 Start row
* @param integer $col1 Start column
* @param integer $row2 End row
* @param integer $col2 End column
* @param string $url URL string
* @param string $str Alternative label
* @param mixed $format The cell format
* @return integer
*/
function _writeUrlWeb($row1, $col1, $row2, $col2, $url, $str, $format = 0)
{
$record = 0x01B8; // Record identifier
$length = 0x00000; // Bytes to follow
if ($format == 0) {
$format = $this->_url_format;
}
// Write the visible label using the writeString() method.
if ($str == '') {
$str = $url;
}
$str_error = $this->writeString($row1, $col1, $str, $format);
if (($str_error == -2) or ($str_error == -3)) {
return $str_error;
}
// Pack the undocumented parts of the hyperlink stream
$unknown1 = pack("H*", "D0C9EA79F9BACE118C8200AA004BA90B02000000");
$unknown2 = pack("H*", "E0C9EA79F9BACE118C8200AA004BA90B");
// Pack the option flags
$options = pack("V", 0x03);
// Convert URL to a null terminated wchar string
$url = join("\0", preg_explode("''", $url, -1, PREG_SPLIT_NO_EMPTY));
$url = $url . "\0\0\0";
// Pack the length of the URL
$url_len = pack("V", strlen($url));
// Calculate the data length
$length = 0x34 + strlen($url);
// Pack the header data
$header = pack("vv", $record, $length);
$data = pack("vvvv", $row1, $row2, $col1, $col2);
// Write the packed data
$this->_append( $header. $data.
$unknown1. $options.
$unknown2. $url_len. $url);
return($str_error);
}
/**
* Used to write internal reference hyperlinks such as "Sheet1!A1".
*
* @access private
* @see writeUrl()
* @param integer $row1 Start row
* @param integer $col1 Start column
* @param integer $row2 End row
* @param integer $col2 End column
* @param string $url URL string
* @param string $str Alternative label
* @param mixed $format The cell format
* @return integer
*/
function _writeUrlInternal($row1, $col1, $row2, $col2, $url, $str, $format = 0)
{
$record = 0x01B8; // Record identifier
$length = 0x00000; // Bytes to follow
if ($format == 0) {
$format = $this->_url_format;
}
// Strip URL type
$url = preg_replace('s[^internal:]', '', $url);
// Write the visible label
if ($str == '') {
$str = $url;
}
$str_error = $this->writeString($row1, $col1, $str, $format);
if (($str_error == -2) or ($str_error == -3)) {
return $str_error;
}
// Pack the undocumented parts of the hyperlink stream
$unknown1 = pack("H*", "D0C9EA79F9BACE118C8200AA004BA90B02000000");
// Pack the option flags
$options = pack("V", 0x08);
// Convert the URL type and to a null terminated wchar string
$url = join("\0", preg_explode("''", $url, -1, PREG_SPLIT_NO_EMPTY));
$url = $url . "\0\0\0";
// Pack the length of the URL as chars (not wchars)
$url_len = pack("V", floor(strlen($url)/2));
// Calculate the data length
$length = 0x24 + strlen($url);
// Pack the header data
$header = pack("vv", $record, $length);
$data = pack("vvvv", $row1, $row2, $col1, $col2);
// Write the packed data
$this->_append($header. $data.
$unknown1. $options.
$url_len. $url);
return($str_error);
}
/**
* Write links to external directory names such as 'c:\foo.xls',
* c:\foo.xls#Sheet1!A1', '../../foo.xls'. and '../../foo.xls#Sheet1!A1'.
*
* Note: Excel writes some relative links with the $dir_long string. We ignore
* these cases for the sake of simpler code.
*
* @access private
* @see writeUrl()
* @param integer $row1 Start row
* @param integer $col1 Start column
* @param integer $row2 End row
* @param integer $col2 End column
* @param string $url URL string
* @param string $str Alternative label
* @param mixed $format The cell format
* @return integer
*/
function _writeUrlExternal($row1, $col1, $row2, $col2, $url, $str, $format = 0)
{
// Network drives are different. We will handle them separately
// MS/Novell network drives and shares start with \\
if (preg_match('[^external:\\\\]', $url)) {
return; //($this->_writeUrlExternal_net($row1, $col1, $row2, $col2, $url, $str, $format));
}
$record = 0x01B8; // Record identifier
$length = 0x00000; // Bytes to follow
if ($format == 0) {
$format = $this->_url_format;
}
// Strip URL type and change Unix dir separator to Dos style (if needed)
//
$url = preg_replace('[^external:]', '', $url);
$url = preg_replace('[/]', "\\", $url);
// Write the visible label
if ($str == '') {
$str = preg_replace('[\#]', ' - ', $url);
}
$str_error = $this->writeString($row1, $col1, $str, $format);
if (($str_error == -2) or ($str_error == -3)) {
return $str_error;
}
// Determine if the link is relative or absolute:
// relative if link contains no dir separator, "somefile.xls"
// relative if link starts with up-dir, "..\..\somefile.xls"
// otherwise, absolute
$absolute = 0x02; // Bit mask
if (!preg_match('[\\]', $url)) {
$absolute = 0x00;
}
if (preg_match('[^\.\.\\]', $url)) {
$absolute = 0x00;
}
// Determine if the link contains a sheet reference and change some of the
// parameters accordingly.
// Split the dir name and sheet name (if it exists)
list($dir_long , $sheet) = explode('/\#/', $url);
$link_type = 0x01 | $absolute;
if (isset($sheet)) {
$link_type |= 0x08;
$sheet_len = pack("V", strlen($sheet) + 0x01);
$sheet = join("\0", explode('', $sheet));
$sheet .= "\0\0\0";
}
else {
$sheet_len = '';
$sheet = '';
}
// Pack the link type
$link_type = pack("V", $link_type);
// Calculate the up-level dir count e.g.. (..\..\..\ == 3)
$up_count = preg_match_all("/\.\.\\/", $dir_long, $useless);
$up_count = pack("v", $up_count);
// Store the short dos dir name (null terminated)
$dir_short = preg_replace('/\.\.\\/', '', $dir_long) . "\0";
// Store the long dir name as a wchar string (non-null terminated)
$dir_long = join("\0", explode('', $dir_long));
$dir_long = $dir_long . "\0";
// Pack the lengths of the dir strings
$dir_short_len = pack("V", strlen($dir_short) );
$dir_long_len = pack("V", strlen($dir_long) );
$stream_len = pack("V", strlen($dir_long) + 0x06);
// Pack the undocumented parts of the hyperlink stream
$unknown1 = pack("H*",'D0C9EA79F9BACE118C8200AA004BA90B02000000' );
$unknown2 = pack("H*",'0303000000000000C000000000000046' );
$unknown3 = pack("H*",'FFFFADDE000000000000000000000000000000000000000');
$unknown4 = pack("v", 0x03 );
// Pack the main data stream
$data = pack("vvvv", $row1, $row2, $col1, $col2) .
$unknown1 .
$link_type .
$unknown2 .
$up_count .
$dir_short_len.
$dir_short .
$unknown3 .
$stream_len .
$dir_long_len .
$unknown4 .
$dir_long .
$sheet_len .
$sheet ;
// Pack the header data
$length = strlen($data);
$header = pack("vv", $record, $length);
// Write the packed data
$this->_append($header. $data);
return($str_error);
}
/**
* This method is used to set the height and format for a row.
*
* @access public
* @param integer $row The row to set
* @param integer $height Height we are giving to the row.
* Use NULL to set XF without setting height
* @param mixed $format XF format we are giving to the row
*/
function setRow($row, $height, $format = 0)
{
$record = 0x0208; // Record identifier
$length = 0x0010; // Number of bytes to follow
$colMic = 0x0000; // First defined column
$colMac = 0x0000; // Last defined column
$irwMac = 0x0000; // Used by Excel to optimise loading
$reserved = 0x0000; // Reserved
$grbit = 0x01C0; // Option flags. (monkey) see $1 do
$ixfe = $this->_XF($format); // XF index
// Use setRow($row, NULL, $XF) to set XF format without setting height
if ($height != NULL) {
$miyRw = $height * 20; // row height
}
else {
$miyRw = 0xff; // default row height is 256
}
$header = pack("vv", $record, $length);
$data = pack("vvvvvvvv", $row, $colMic, $colMac, $miyRw,
$irwMac,$reserved, $grbit, $ixfe);
$this->_append($header.$data);
}
/**
* Writes Excel DIMENSIONS to define the area in which there is data.
*
* @access private
*/
function storeDimensions()
{
$record = 0x0000; // Record identifier
$length = 0x000A; // Number of bytes to follow
$row_min = $this->_dim_rowmin; // First row
$row_max = $this->_dim_rowmax; // Last row plus 1
$col_min = $this->_dim_colmin; // First column
$col_max = $this->_dim_colmax; // Last column plus 1
$reserved = 0x0000; // Reserved by Excel
$header = pack("vv", $record, $length);
$data = pack("vvvvv", $row_min, $row_max,
$col_min, $col_max, $reserved);
$this->_prepend($header.$data);
}
/**
* Write BIFF record Window2.
*
* @access private
*/
function _storeWindow2()
{
$record = 0x023E; // Record identifier
$length = 0x000A; // Number of bytes to follow
$grbit = 0x00B6; // Option flags
$rwTop = 0x0000; // Top row visible in window
$colLeft = 0x0000; // Leftmost column visible in window
$rgbHdr = 0x00000000; // Row/column heading and gridline color
// The options flags that comprise $grbit
$fDspFmla = 0; // 0 - bit
$fDspGrid = 1; // 1
$fDspRwCol = 1; // 2
$fFrozen = $this->_frozen; // 3
$fDspZeros = 1; // 4
$fDefaultHdr = 1; // 5
$fArabic = 0; // 6
$fDspGuts = 1; // 7
$fFrozenNoSplit = 0; // 0 - bit
$fSelected = $this->selected; // 1
$fPaged = 1; // 2
$grbit = $fDspFmla;
$grbit |= $fDspGrid << 1;
$grbit |= $fDspRwCol << 2;
$grbit |= $fFrozen << 3;
$grbit |= $fDspZeros << 4;
$grbit |= $fDefaultHdr << 5;
$grbit |= $fArabic << 6;
$grbit |= $fDspGuts << 7;
$grbit |= $fFrozenNoSplit << 8;
$grbit |= $fSelected << 9;
$grbit |= $fPaged << 10;
$header = pack("vv", $record, $length);
$data = pack("vvvV", $grbit, $rwTop, $colLeft, $rgbHdr);
$this->_append($header.$data);
}
/**
* Write BIFF record DEFCOLWIDTH if COLINFO records are in use.
*
* @access private
*/
function _storeDefcol()
{
$record = 0x0055; // Record identifier
$length = 0x0002; // Number of bytes to follow
$colwidth = 0x0008; // Default column width
$header = pack("vv", $record, $length);
$data = pack("v", $colwidth);
$this->_prepend($header.$data);
}
/**
* Write BIFF record COLINFO to define column widths
*
* Note: The SDK says the record length is 0x0B but Excel writes a 0x0C
* length record.
*
* @access private
* @param array $col_array This is the only parameter received and is composed of the following:
* 0 => First formatted column,
* 1 => Last formatted column,
* 2 => Col width (8.43 is Excel default),
* 3 => The optional XF format of the column,
* 4 => Option flags.
*/
function _storeColinfo($col_array)
{
if (isset($col_array[0])) {
$colFirst = $col_array[0];
}
if (isset($col_array[1])) {
$colLast = $col_array[1];
}
if (isset($col_array[2])) {
$coldx = $col_array[2];
}
else {
$coldx = 8.43;
}
if (isset($col_array[3])) {
$format = $col_array[3];
}
else {
$format = 0;
}
if (isset($col_array[4])) {
$grbit = $col_array[4];
}
else {
$grbit = 0;
}
$record = 0x007D; // Record identifier
$length = 0x000B; // Number of bytes to follow
$coldx += 0.72; // Fudge. Excel subtracts 0.72 !?
$coldx *= 256; // Convert to units of 1/256 of a char
$ixfe = $this->_XF($format);
$reserved = 0x00; // Reserved
$header = pack("vv", $record, $length);
$data = pack("vvvvvC", $colFirst, $colLast, $coldx,
$ixfe, $grbit, $reserved);
$this->_prepend($header.$data);
}
/**
* Write BIFF record SELECTION.
*
* @access private
* @param array $array array containing ($rwFirst,$colFirst,$rwLast,$colLast)
* @see setSelection()
*/
function _storeSelection($array)
{
list($rwFirst,$colFirst,$rwLast,$colLast) = $array;
$record = 0x001D; // Record identifier
$length = 0x000F; // Number of bytes to follow
$pnn = $this->_active_pane; // Pane position
$rwAct = $rwFirst; // Active row
$colAct = $colFirst; // Active column
$irefAct = 0; // Active cell ref
$cref = 1; // Number of refs
if (!isset($rwLast)) {
$rwLast = $rwFirst; // Last row in reference
}
if (!isset($colLast)) {
$colLast = $colFirst; // Last col in reference
}
// Swap last row/col for first row/col as necessary
if ($rwFirst > $rwLast)
{
list($rwFirst, $rwLast) = array($rwLast, $rwFirst);
}
if ($colFirst > $colLast)
{
list($colFirst, $colLast) = array($colLast, $colFirst);
}
$header = pack("vv", $record, $length);
$data = pack("CvvvvvvCC", $pnn, $rwAct, $colAct,
$irefAct, $cref,
$rwFirst, $rwLast,
$colFirst, $colLast);
$this->_append($header.$data);
}
/**
* Write BIFF record EXTERNCOUNT to indicate the number of external sheet
* references in a worksheet.
*
* Excel only stores references to external sheets that are used in formulas.
* For simplicity we store references to all the sheets in the workbook
* regardless of whether they are used or not. This reduces the overall
* complexity and eliminates the need for a two way dialogue between the formula
* parser the worksheet objects.
*
* @access private
* @param integer $count The number of external sheet references in this worksheet
*/
function _storeExterncount($count)
{
$record = 0x0016; // Record identifier
$length = 0x0002; // Number of bytes to follow
$header = pack("vv", $record, $length);
$data = pack("v", $count);
$this->_prepend($header.$data);
}
/**
* Writes the Excel BIFF EXTERNSHEET record. These references are used by
* formulas. A formula references a sheet name via an index. Since we store a
* reference to all of the external worksheets the EXTERNSHEET index is the same
* as the worksheet index.
*
* @access private
* @param string $sheetname The name of a external worksheet
*/
function _storeExternsheet($sheetname)
{
$record = 0x0017; // Record identifier
// References to the current sheet are encoded differently to references to
// external sheets.
//
if ($this->name == $sheetname) {
$sheetname = '';
$length = 0x02; // The following 2 bytes
$cch = 1; // The following byte
$rgch = 0x02; // Self reference
}
else {
$length = 0x02 + strlen($sheetname);
$cch = strlen($sheetname);
$rgch = 0x03; // Reference to a sheet in the current workbook
}
$header = pack("vv", $record, $length);
$data = pack("CC", $cch, $rgch);
$this->_prepend($header.$data.$sheetname);
}
/**
* Writes the Excel BIFF PANE record.
* The panes can either be frozen or thawed (unfrozen).
* Frozen panes are specified in terms of an integer number of rows and columns.
* Thawed panes are specified in terms of Excel's units for rows and columns.
*
* @access private
* @param array $panes This is the only parameter received and is composed of the following:
* 0 => Vertical split position,
* 1 => Horizontal split position
* 2 => Top row visible
* 3 => Leftmost column visible
* 4 => Active pane
*/
function _storePanes($panes)
{
$y = $panes[0];
$x = $panes[1];
$rwTop = $panes[2];
$colLeft = $panes[3];
if (count($panes) > 4) { // if Active pane was received
$pnnAct = $panes[4];
}
else {
$pnnAct = NULL;
}
$record = 0x0041; // Record identifier
$length = 0x000A; // Number of bytes to follow
// Code specific to frozen or thawed panes.
if ($this->_frozen)
{
// Set default values for $rwTop and $colLeft
if (!isset($rwTop)) {
$rwTop = $y;
}
if (!isset($colLeft)) {
$colLeft = $x;
}
}
else
{
// Set default values for $rwTop and $colLeft
if (!isset($rwTop)) {
$rwTop = 0;
}
if (!isset($colLeft)) {
$colLeft = 0;
}
// Convert Excel's row and column units to the internal units.
// The default row height is 12.75
// The default column width is 8.43
// The following slope and intersection values were interpolated.
//
$y = 20*$y + 255;
$x = 113.879*$x + 390;
}
// Determine which pane should be active. There is also the undocumented
// option to override this should it be necessary: may be removed later.
//
if (!isset($pnnAct))
{
if ($x != 0 and $y != 0)
$pnnAct = 0; // Bottom right
if ($x != 0 and $y == 0)
$pnnAct = 1; // Top right
if ($x == 0 and $y != 0)
$pnnAct = 2; // Bottom left
if ($x == 0 and $y == 0)
$pnnAct = 3; // Top left
}
$this->_active_pane = $pnnAct; // Used in _storeSelection
$header = pack("vv", $record, $length);
$data = pack("vvvvv", $x, $y, $rwTop, $colLeft, $pnnAct);
$this->_append($header.$data);
}
/**
* Store the page setup SETUP BIFF record.
*
* @access private
*/
function _storeSetup()
{
$record = 0x00A1; // Record identifier
$length = 0x0022; // Number of bytes to follow
$iPaperSize = $this->_paper_size; // Paper size
$iScale = $this->_print_scale; // Print scaling factor
$iPageStart = 0x01; // Starting page number
$iFitWidth = $this->_fit_width; // Fit to number of pages wide
$iFitHeight = $this->_fit_height; // Fit to number of pages high
$grbit = 0x00; // Option flags
$iRes = 0x0258; // Print resolution
$iVRes = 0x0258; // Vertical print resolution
$numHdr = $this->_margin_head; // Header Margin
$numFtr = $this->_margin_foot; // Footer Margin
$iCopies = 0x01; // Number of copies
$fLeftToRight = 0x0; // Print over then down
$fLandscape = $this->_orientation; // Page orientation
$fNoPls = 0x0; // Setup not read from printer
$fNoColor = 0x0; // Print black and white
$fDraft = 0x0; // Print draft quality
$fNotes = 0x0; // Print notes
$fNoOrient = 0x0; // Orientation not set
$fUsePage = 0x0; // Use custom starting page
$grbit = $fLeftToRight;
$grbit |= $fLandscape << 1;
$grbit |= $fNoPls << 2;
$grbit |= $fNoColor << 3;
$grbit |= $fDraft << 4;
$grbit |= $fNotes << 5;
$grbit |= $fNoOrient << 6;
$grbit |= $fUsePage << 7;
$numHdr = pack("d", $numHdr);
$numFtr = pack("d", $numFtr);
if ($this->_byte_order) // if it's Big Endian
{
$numHdr = strrev($numHdr);
$numFtr = strrev($numFtr);
}
$header = pack("vv", $record, $length);
$data1 = pack("vvvvvvvv", $iPaperSize,
$iScale,
$iPageStart,
$iFitWidth,
$iFitHeight,
$grbit,
$iRes,
$iVRes);
$data2 = $numHdr.$numFtr;
$data3 = pack("v", $iCopies);
$this->_prepend($header.$data1.$data2.$data3);
}
/**
* Store the header caption BIFF record.
*
* @access private
*/
function _storeHeader()
{
$record = 0x0014; // Record identifier
$str = $this->_header; // header string
$cch = strlen($str); // Length of header string
$length = 1 + $cch; // Bytes to follow
$header = pack("vv", $record, $length);
$data = pack("C", $cch);
$this->_append($header.$data.$str);
}
/**
* Store the footer caption BIFF record.
*
* @access private
*/
function _storeFooter()
{
$record = 0x0015; // Record identifier
$str = $this->_footer; // Footer string
$cch = strlen($str); // Length of footer string
$length = 1 + $cch; // Bytes to follow
$header = pack("vv", $record, $length);
$data = pack("C", $cch);
$this->_append($header.$data.$str);
}
/**
* Store the horizontal centering HCENTER BIFF record.
*
* @access private
*/
function _storeHcenter()
{
$record = 0x0083; // Record identifier
$length = 0x0002; // Bytes to follow
$fHCenter = $this->_hcenter; // Horizontal centering
$header = pack("vv", $record, $length);
$data = pack("v", $fHCenter);
$this->_append($header.$data);
}
/**
* Store the vertical centering VCENTER BIFF record.
*
* @access private
*/
function _storeVcenter()
{
$record = 0x0084; // Record identifier
$length = 0x0002; // Bytes to follow
$fVCenter = $this->_vcenter; // Horizontal centering
$header = pack("vv", $record, $length);
$data = pack("v", $fVCenter);
$this->_append($header.$data);
}
/**
* Store the LEFTMARGIN BIFF record.
*
* @access private
*/
function _storeMarginLeft()
{
$record = 0x0026; // Record identifier
$length = 0x0008; // Bytes to follow
$margin = $this->_margin_left; // Margin in inches
$header = pack("vv", $record, $length);
$data = pack("d", $margin);
if ($this->_byte_order) // if it's Big Endian
{
$data = strrev($data);
}
$this->_append($header.$data);
}
/**
* Store the RIGHTMARGIN BIFF record.
*
* @access private
*/
function _storeMarginRight()
{
$record = 0x0027; // Record identifier
$length = 0x0008; // Bytes to follow
$margin = $this->_margin_right; // Margin in inches
$header = pack("vv", $record, $length);
$data = pack("d", $margin);
if ($this->_byte_order) // if it's Big Endian
{
$data = strrev($data);
}
$this->_append($header.$data);
}
/**
* Store the TOPMARGIN BIFF record.
*
* @access private
*/
function _storeMarginTop()
{
$record = 0x0028; // Record identifier
$length = 0x0008; // Bytes to follow
$margin = $this->_margin_top; // Margin in inches
$header = pack("vv", $record, $length);
$data = pack("d", $margin);
if ($this->_byte_order) // if it's Big Endian
{
$data = strrev($data);
}
$this->_append($header.$data);
}
/**
* Store the BOTTOMMARGIN BIFF record.
*
* @access private
*/
function _storeMarginBottom()
{
$record = 0x0029; // Record identifier
$length = 0x0008; // Bytes to follow
$margin = $this->_margin_bottom; // Margin in inches
$header = pack("vv", $record, $length);
$data = pack("d", $margin);
if ($this->_byte_order) // if it's Big Endian
{
$data = strrev($data);
}
$this->_append($header.$data);
}
 
/**
* Merges the area given by its arguments.
* This is an Excel97/2000 method. It is required to perform more complicated
* merging than the normal setAlign('merge').
*
* @access public
* @param integer $first_row First row of the area to merge
* @param integer $first_col First column of the area to merge
* @param integer $last_row Last row of the area to merge
* @param integer $last_col Last column of the area to merge
*/
function mergeCells($first_row, $first_col, $last_row, $last_col)
{
$record = 0x00E5; // Record identifier
$length = 0x000A; // Bytes to follow
$cref = 1; // Number of refs
 
// Swap last row/col for first row/col as necessary
if ($first_row > $last_row) {
list($first_row, $last_row) = array($last_row, $first_row);
}
if ($first_col > $last_col) {
list($first_col, $last_col) = array($last_col, $first_col);
}
$header = pack("vv", $record, $length);
$data = pack("vvvvv", $cref, $first_row, $last_row,
$first_col, $last_col);
$this->_append($header.$data);
}
 
/**
* Write the PRINTHEADERS BIFF record.
*
* @access private
*/
function _storePrintHeaders()
{
$record = 0x002a; // Record identifier
$length = 0x0002; // Bytes to follow
$fPrintRwCol = $this->_print_headers; // Boolean flag
$header = pack("vv", $record, $length);
$data = pack("v", $fPrintRwCol);
$this->_prepend($header.$data);
}
/**
* Write the PRINTGRIDLINES BIFF record. Must be used in conjunction with the
* GRIDSET record.
*
* @access private
*/
function _storePrintGridlines()
{
$record = 0x002b; // Record identifier
$length = 0x0002; // Bytes to follow
$fPrintGrid = $this->_print_gridlines; // Boolean flag
$header = pack("vv", $record, $length);
$data = pack("v", $fPrintGrid);
$this->_prepend($header.$data);
}
/**
* Write the GRIDSET BIFF record. Must be used in conjunction with the
* PRINTGRIDLINES record.
*
* @access private
*/
function _storeGridset()
{
$record = 0x0082; // Record identifier
$length = 0x0002; // Bytes to follow
$fGridSet = !($this->_print_gridlines); // Boolean flag
$header = pack("vv", $record, $length);
$data = pack("v", $fGridSet);
$this->_prepend($header.$data);
}
/**
* Write the WSBOOL BIFF record, mainly for fit-to-page. Used in conjunction
* with the SETUP record.
*
* @access private
*/
function _storeWsbool()
{
$record = 0x0081; // Record identifier
$length = 0x0002; // Bytes to follow
// The only option that is of interest is the flag for fit to page. So we
// set all the options in one go.
//
if ($this->_fit_page) {
$grbit = 0x05c1;
}
else {
$grbit = 0x04c1;
}
$header = pack("vv", $record, $length);
$data = pack("v", $grbit);
$this->_prepend($header.$data);
}
/**
* Write the HORIZONTALPAGEBREAKS BIFF record.
*
* @access private
*/
function _storeHbreak()
{
// Return if the user hasn't specified pagebreaks
if (empty($this->_hbreaks)) {
return;
}
// Sort and filter array of page breaks
$breaks = $this->_hbreaks;
sort($breaks,SORT_NUMERIC);
if ($breaks[0] == 0) { // don't use first break if it's 0
array_shift($breaks);
}
$record = 0x001b; // Record identifier
$cbrk = count($breaks); // Number of page breaks
$length = ($cbrk + 1) * 2; // Bytes to follow
$header = pack("vv", $record, $length);
$data = pack("v", $cbrk);
// Append each page break
foreach($breaks as $break) {
$data .= pack("v", $break);
}
$this->_prepend($header.$data);
}
/**
* Write the VERTICALPAGEBREAKS BIFF record.
*
* @access private
*/
function _storeVbreak()
{
// Return if the user hasn't specified pagebreaks
if (empty($this->_vbreaks)) {
return;
}
// 1000 vertical pagebreaks appears to be an internal Excel 5 limit.
// It is slightly higher in Excel 97/200, approx. 1026
$breaks = array_slice($this->_vbreaks,0,1000);
// Sort and filter array of page breaks
sort($breaks,SORT_NUMERIC);
if ($breaks[0] == 0) { // don't use first break if it's 0
array_shift($breaks);
}
$record = 0x001a; // Record identifier
$cbrk = count($breaks); // Number of page breaks
$length = ($cbrk + 1) * 2; // Bytes to follow
$header = pack("vv", $record, $length);
$data = pack("v", $cbrk);
// Append each page break
foreach ($breaks as $break) {
$data .= pack("v", $break);
}
$this->_prepend($header.$data);
}
/**
* Set the Biff PROTECT record to indicate that the worksheet is protected.
*
* @access private
*/
function _storeProtect()
{
// Exit unless sheet protection has been specified
if ($this->_protect == 0) {
return;
}
$record = 0x0012; // Record identifier
$length = 0x0002; // Bytes to follow
$fLock = $this->_protect; // Worksheet is protected
$header = pack("vv", $record, $length);
$data = pack("v", $fLock);
$this->_prepend($header.$data);
}
/**
* Write the worksheet PASSWORD record.
*
* @access private
*/
function _storePassword()
{
// Exit unless sheet protection and password have been specified
if (($this->_protect == 0) or (!isset($this->_password))) {
return;
}
$record = 0x0013; // Record identifier
$length = 0x0002; // Bytes to follow
$wPassword = $this->_password; // Encoded password
$header = pack("vv", $record, $length);
$data = pack("v", $wPassword);
$this->_prepend($header.$data);
}
 
/**
* Insert a 24bit bitmap image in a worksheet.
*
* @access public
* @param integer $row The row we are going to insert the bitmap into
* @param integer $col The column we are going to insert the bitmap into
* @param string $bitmap The bitmap filename
* @param integer $x The horizontal position (offset) of the image inside the cell.
* @param integer $y The vertical position (offset) of the image inside the cell.
* @param integer $scale_x The horizontal scale
* @param integer $scale_y The vertical scale
*/
function insertBitmap($row, $col, $bitmap, $x = 0, $y = 0, $scale_x = 1, $scale_y = 1)
{
$bitmap_array = $this->_processBitmap($bitmap);
if ($this->isError($bitmap_array))
{
$this->writeString($row, $col, $bitmap_array->getMessage());
return;
}
list($width, $height, $size, $data) = $bitmap_array; //$this->_processBitmap($bitmap);
// Scale the frame of the image.
$width *= $scale_x;
$height *= $scale_y;
// Calculate the vertices of the image and write the OBJ record
$this->_positionImage($col, $row, $x, $y, $width, $height);
// Write the IMDATA record to store the bitmap data
$record = 0x007f;
$length = 8 + $size;
$cf = 0x09;
$env = 0x01;
$lcb = $size;
$header = pack("vvvvV", $record, $length, $cf, $env, $lcb);
$this->_append($header.$data);
}
/**
* Calculate the vertices that define the position of the image as required by
* the OBJ record.
*
* +------------+------------+
* | A | B |
* +-----+------------+------------+
* | |(x1,y1) | |
* | 1 |(A1)._______|______ |
* | | | | |
* | | | | |
* +-----+----| BITMAP |-----+
* | | | | |
* | 2 | |______________. |
* | | | (B2)|
* | | | (x2,y2)|
* +---- +------------+------------+
*
* Example of a bitmap that covers some of the area from cell A1 to cell B2.
*
* Based on the width and height of the bitmap we need to calculate 8 vars:
* $col_start, $row_start, $col_end, $row_end, $x1, $y1, $x2, $y2.
* The width and height of the cells are also variable and have to be taken into
* account.
* The values of $col_start and $row_start are passed in from the calling
* function. The values of $col_end and $row_end are calculated by subtracting
* the width and height of the bitmap from the width and height of the
* underlying cells.
* The vertices are expressed as a percentage of the underlying cell width as
* follows (rhs values are in pixels):
*
* x1 = X / W *1024
* y1 = Y / H *256
* x2 = (X-1) / W *1024
* y2 = (Y-1) / H *256
*
* Where: X is distance from the left side of the underlying cell
* Y is distance from the top of the underlying cell
* W is the width of the cell
* H is the height of the cell
*
* @access private
* @note the SDK incorrectly states that the height should be expressed as a
* percentage of 1024.
* @param integer $col_start Col containing upper left corner of object
* @param integer $row_start Row containing top left corner of object
* @param integer $x1 Distance to left side of object
* @param integer $y1 Distance to top of object
* @param integer $width Width of image frame
* @param integer $height Height of image frame
*/
function _positionImage($col_start, $row_start, $x1, $y1, $width, $height)
{
// Initialise end cell to the same as the start cell
$col_end = $col_start; // Col containing lower right corner of object
$row_end = $row_start; // Row containing bottom right corner of object
// Zero the specified offset if greater than the cell dimensions
if ($x1 >= $this->_sizeCol($col_start))
{
$x1 = 0;
}
if ($y1 >= $this->_sizeRow($row_start))
{
$y1 = 0;
}
$width = $width + $x1 -1;
$height = $height + $y1 -1;
// Subtract the underlying cell widths to find the end cell of the image
while ($width >= $this->_sizeCol($col_end)) {
$width -= $this->_sizeCol($col_end);
$col_end++;
}
// Subtract the underlying cell heights to find the end cell of the image
while ($height >= $this->_sizeRow($row_end)) {
$height -= $this->_sizeRow($row_end);
$row_end++;
}
// Bitmap isn't allowed to start or finish in a hidden cell, i.e. a cell
// with zero eight or width.
//
if ($this->_sizeCol($col_start) == 0)
return;
if ($this->_sizeCol($col_end) == 0)
return;
if ($this->_sizeRow($row_start) == 0)
return;
if ($this->_sizeRow($row_end) == 0)
return;
// Convert the pixel values to the percentage value expected by Excel
$x1 = $x1 / $this->_sizeCol($col_start) * 1024;
$y1 = $y1 / $this->_sizeRow($row_start) * 256;
$x2 = $width / $this->_sizeCol($col_end) * 1024; // Distance to right side of object
$y2 = $height / $this->_sizeRow($row_end) * 256; // Distance to bottom of object
$this->_storeObjPicture( $col_start, $x1,
$row_start, $y1,
$col_end, $x2,
$row_end, $y2
);
}
/**
* Convert the width of a cell from user's units to pixels. By interpolation
* the relationship is: y = 7x +5. If the width hasn't been set by the user we
* use the default value. If the col is hidden we use a value of zero.
*
* @access private
* @param integer $col The column
* @return integer The width in pixels
*/
function _sizeCol($col)
{
// Look up the cell value to see if it has been changed
if (isset($this->col_sizes[$col])) {
if ($this->col_sizes[$col] == 0) {
return(0);
}
else {
return(floor(7 * $this->col_sizes[$col] + 5));
}
}
else {
return(64);
}
}
/**
* Convert the height of a cell from user's units to pixels. By interpolation
* the relationship is: y = 4/3x. If the height hasn't been set by the user we
* use the default value. If the row is hidden we use a value of zero. (Not
* possible to hide row yet).
*
* @access private
* @param integer $row The row
* @return integer The width in pixels
*/
function _sizeRow($row)
{
// Look up the cell value to see if it has been changed
if (isset($this->row_sizes[$row])) {
if ($this->row_sizes[$row] == 0) {
return(0);
}
else {
return(floor(4/3 * $this->row_sizes[$row]));
}
}
else {
return(17);
}
}
/**
* Store the OBJ record that precedes an IMDATA record. This could be generalise
* to support other Excel objects.
*
* @access private
* @param integer $colL Column containing upper left corner of object
* @param integer $dxL Distance from left side of cell
* @param integer $rwT Row containing top left corner of object
* @param integer $dyT Distance from top of cell
* @param integer $colR Column containing lower right corner of object
* @param integer $dxR Distance from right of cell
* @param integer $rwB Row containing bottom right corner of object
* @param integer $dyB Distance from bottom of cell
*/
function _storeObjPicture($colL,$dxL,$rwT,$dyT,$colR,$dxR,$rwB,$dyB)
{
$record = 0x005d; // Record identifier
$length = 0x003c; // Bytes to follow
$cObj = 0x0001; // Count of objects in file (set to 1)
$OT = 0x0008; // Object type. 8 = Picture
$id = 0x0001; // Object ID
$grbit = 0x0614; // Option flags
$cbMacro = 0x0000; // Length of FMLA structure
$Reserved1 = 0x0000; // Reserved
$Reserved2 = 0x0000; // Reserved
$icvBack = 0x09; // Background colour
$icvFore = 0x09; // Foreground colour
$fls = 0x00; // Fill pattern
$fAuto = 0x00; // Automatic fill
$icv = 0x08; // Line colour
$lns = 0xff; // Line style
$lnw = 0x01; // Line weight
$fAutoB = 0x00; // Automatic border
$frs = 0x0000; // Frame style
$cf = 0x0009; // Image format, 9 = bitmap
$Reserved3 = 0x0000; // Reserved
$cbPictFmla = 0x0000; // Length of FMLA structure
$Reserved4 = 0x0000; // Reserved
$grbit2 = 0x0001; // Option flags
$Reserved5 = 0x0000; // Reserved
$header = pack("vv", $record, $length);
$data = pack("V", $cObj);
$data .= pack("v", $OT);
$data .= pack("v", $id);
$data .= pack("v", $grbit);
$data .= pack("v", $colL);
$data .= pack("v", $dxL);
$data .= pack("v", $rwT);
$data .= pack("v", $dyT);
$data .= pack("v", $colR);
$data .= pack("v", $dxR);
$data .= pack("v", $rwB);
$data .= pack("v", $dyB);
$data .= pack("v", $cbMacro);
$data .= pack("V", $Reserved1);
$data .= pack("v", $Reserved2);
$data .= pack("C", $icvBack);
$data .= pack("C", $icvFore);
$data .= pack("C", $fls);
$data .= pack("C", $fAuto);
$data .= pack("C", $icv);
$data .= pack("C", $lns);
$data .= pack("C", $lnw);
$data .= pack("C", $fAutoB);
$data .= pack("v", $frs);
$data .= pack("V", $cf);
$data .= pack("v", $Reserved3);
$data .= pack("v", $cbPictFmla);
$data .= pack("v", $Reserved4);
$data .= pack("v", $grbit2);
$data .= pack("V", $Reserved5);
$this->_append($header.$data);
}
/**
* Convert a 24 bit bitmap into the modified internal format used by Windows.
* This is described in BITMAPCOREHEADER and BITMAPCOREINFO structures in the
* MSDN library.
*
* @access private
* @param string $bitmap The bitmap to process
* @return array Array with data and properties of the bitmap
*/
function _processBitmap($bitmap)
{
// Open file.
$bmp_fd = @fopen($bitmap,"rb");
if (!$bmp_fd) {
return($this->raiseError("Couldn't import $bitmap"));
}
// Slurp the file into a string.
$data = fread($bmp_fd, filesize($bitmap));
// Check that the file is big enough to be a bitmap.
if (strlen($data) <= 0x36) {
return($this->raiseError("$bitmap doesn't contain enough data.\n"));
}
// The first 2 bytes are used to identify the bitmap.
$identity = unpack("A2", $data);
if ($identity[''] != "BM") {
return($this->raiseError("$bitmap doesn't appear to be a valid bitmap image.\n"));
}
// Remove bitmap data: ID.
$data = substr($data, 2);
// Read and remove the bitmap size. This is more reliable than reading
// the data size at offset 0x22.
//
$size_array = unpack("V", substr($data, 0, 4));
$size = $size_array[''];
$data = substr($data, 4);
$size -= 0x36; // Subtract size of bitmap header.
$size += 0x0C; // Add size of BIFF header.
// Remove bitmap data: reserved, offset, header length.
$data = substr($data, 12);
// Read and remove the bitmap width and height. Verify the sizes.
$width_and_height = unpack("V2", substr($data, 0, 8));
$width = $width_and_height[1];
$height = $width_and_height[2];
$data = substr($data, 8);
if ($width > 0xFFFF) {
return($this->raiseError("$bitmap: largest image width supported is 65k.\n"));
}
if ($height > 0xFFFF) {
return($this->raiseError("$bitmap: largest image height supported is 65k.\n"));
}
// Read and remove the bitmap planes and bpp data. Verify them.
$planes_and_bitcount = unpack("v2", substr($data, 0, 4));
$data = substr($data, 4);
if ($planes_and_bitcount[2] != 24) { // Bitcount
return($this->raiseError("$bitmap isn't a 24bit true color bitmap.\n"));
}
if ($planes_and_bitcount[1] != 1) {
return($this->raiseError("$bitmap: only 1 plane nupported in bitmap image.\n"));
}
// Read and remove the bitmap compression. Verify compression.
$compression = unpack("V", substr($data, 0, 4));
$data = substr($data, 4);
//$compression = 0;
if ($compression[""] != 0) {
return($this->raiseError("$bitmap: compression not supported in bitmap image.\n"));
}
// Remove bitmap data: data size, hres, vres, colours, imp. colours.
$data = substr($data, 20);
// Add the BITMAPCOREHEADER data
$header = pack("Vvvvv", 0x000c, $width, $height, 0x01, 0x18);
$data = $header . $data;
return (array($width, $height, $size, $data));
}
/**
* Store the window zoom factor. This should be a reduced fraction but for
* simplicity we will store all fractions with a numerator of 100.
*
* @access private
*/
function _storeZoom()
{
// If scale is 100 we don't need to write a record
if ($this->_zoom == 100) {
return;
}
$record = 0x00A0; // Record identifier
$length = 0x0004; // Bytes to follow
$header = pack("vv", $record, $length);
$data = pack("vv", $this->_zoom, 100);
$this->_append($header.$data);
}
}
?>
/trunk/applications/jrest/lib/Spreadsheet/Excel/Writer/.directory
New file
0,0 → 1,5
[Dolphin]
Timestamp=2010,10,19,15,2,8
 
[Settings]
ShowDotFiles=true
/trunk/applications/jrest/lib/Spreadsheet/Excel/Writer/OLEwriter.php
New file
0,0 → 1,428
<?php
/*
* Module written/ported by Xavier Noguer <xnoguer@rezebra.com>
*
* The majority of this is _NOT_ my code. I simply ported it from the
* PERL Spreadsheet::WriteExcel module.
*
* The author of the Spreadsheet::WriteExcel module is John McNamara
* <jmcnamara@cpan.org>
*
* I _DO_ maintain this code, and John McNamara has nothing to do with the
* porting of this code to PHP. Any questions directly related to this
* class library should be directed to me.
*
* License Information:
*
* Spreadsheet_Excel_Writer: A library for generating Excel Spreadsheets
* Copyright (c) 2002-2003 Xavier Noguer xnoguer@rezebra.com
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
 
require_once('PEAR.php');
 
/**
* Class for creating OLE streams for Excel Spreadsheets
*
* @author Xavier Noguer <xnoguer@rezebra.com>
* @category FileFormats
* @package Spreadsheet_Excel_Writer
*/
 
class Spreadsheet_Excel_Writer_OLEwriter extends PEAR
{
/**
* Filename for the OLE stream
* @var string
* @see _initialize()
*/
var $_OLEfilename;
 
/**
* Filehandle for the OLE stream
* @var resource
*/
var $_filehandle;
 
/**
* Name of the temporal file in case OLE stream goes to stdout
* @var string
*/
var $_tmp_filename;
 
/**
* Variable for preventing closing two times
* @var integer
*/
var $_fileclosed;
 
/**
* Size of the data to be written to the OLE stream
* @var integer
*/
var $_biffsize;
 
/**
* Real data size to be written to the OLE stream
* @var integer
*/
var $_booksize;
 
/**
* Number of big blocks in the OLE stream
* @var integer
*/
var $_big_blocks;
 
/**
* Number of list blocks in the OLE stream
* @var integer
*/
var $_list_blocks;
 
/**
* Number of big blocks in the OLE stream
* @var integer
*/
var $_root_start;
 
/**
* Constructor for the OLEwriter class
*
* @param string $OLEfilename the name of the file for the OLE stream
*/
function Spreadsheet_Excel_Writer_OLEwriter($OLEfilename)
{
$this->_OLEfilename = $OLEfilename;
$this->_filehandle = "";
$this->_tmp_filename = "";
$this->_fileclosed = 0;
$this->_biff_only = 0;
//$this->_size_allowed = 0;
$this->_biffsize = 0;
$this->_booksize = 0;
$this->_big_blocks = 0;
$this->_list_blocks = 0;
$this->_root_start = 0;
//$this->_block_count = 4;
$this->_initialize();
}
 
/**
* Check for a valid filename and store the filehandle.
* Filehandle "-" writes to STDOUT
*
* @access private
*/
function _initialize()
{
$OLEfile = $this->_OLEfilename;
if(($OLEfile == '-') or ($OLEfile == ''))
{
$this->_tmp_filename = tempnam("/tmp", "OLEwriter");
$fh = fopen($this->_tmp_filename,"wb");
if ($fh == false) {
$this->raiseError("Can't create temporary file.");
}
}
else
{
// Create a new file, open for writing (in binmode)
$fh = fopen($OLEfile,"wb");
if ($fh == false) {
$this->raiseError("Can't open $OLEfile. It may be in use or protected.");
}
}
// Store filehandle
$this->_filehandle = $fh;
}
 
 
/**
* Set the size of the data to be written to the OLE stream.
* The maximun size comes from this:
* $big_blocks = (109 depot block x (128 -1 marker word)
* - (1 x end words)) = 13842
* $maxsize = $big_blocks * 512 bytes = 7087104
*
* @access public
* @see Spreadsheet_Excel_Writer_Workbook::store_OLE_file()
* @param integer $biffsize The size of the data to be written to the OLE stream
* @return integer 1 for success
*/
function setSize($biffsize)
{
$maxsize = 7087104; // TODO: extend max size
if ($biffsize > $maxsize) {
$this->raiseError("Maximum file size, $maxsize, exceeded.");
}
$this->_biffsize = $biffsize;
// Set the min file size to 4k to avoid having to use small blocks
if ($biffsize > 4096) {
$this->_booksize = $biffsize;
}
else {
$this->_booksize = 4096;
}
//$this->_size_allowed = 1;
return(1);
}
 
 
/**
* Calculate various sizes needed for the OLE stream
*
* @access private
*/
function _calculateSizes()
{
$datasize = $this->_booksize;
if ($datasize % 512 == 0) {
$this->_big_blocks = $datasize/512;
}
else {
$this->_big_blocks = floor($datasize/512) + 1;
}
// There are 127 list blocks and 1 marker blocks for each big block
// depot + 1 end of chain block
$this->_list_blocks = floor(($this->_big_blocks)/127) + 1;
$this->_root_start = $this->_big_blocks;
}
 
/**
* Write root entry, big block list and close the filehandle.
* This routine is used to explicitly close the open filehandle without
* having to wait for DESTROY.
*
* @access public
* @see Spreadsheet_Excel_Writer_Workbook::store_OLE_file()
*/
function close()
{
//return if not $this->{_size_allowed};
$this->_writePadding();
$this->_writePropertyStorage();
$this->_writeBigBlockDepot();
// Close the filehandle
fclose($this->_filehandle);
if(($this->_OLEfilename == '-') or ($this->_OLEfilename == ''))
{
$fh = fopen($this->_tmp_filename, "rb");
if ($fh == false) {
$this->raiseError("Can't read temporary file.");
}
fpassthru($fh);
@unlink($this->_tmp_filename);
}
$this->_fileclosed = 1;
}
 
 
/**
* Write BIFF data to OLE file.
*
* @param string $data string of bytes to be written
*/
function write($data)
{
fwrite($this->_filehandle,$data,strlen($data));
}
 
 
/**
* Write OLE header block.
*/
function writeHeader()
{
$this->_calculateSizes();
$root_start = $this->_root_start;
$num_lists = $this->_list_blocks;
$id = pack("nnnn", 0xD0CF, 0x11E0, 0xA1B1, 0x1AE1);
$unknown1 = pack("VVVV", 0x00, 0x00, 0x00, 0x00);
$unknown2 = pack("vv", 0x3E, 0x03);
$unknown3 = pack("v", -2);
$unknown4 = pack("v", 0x09);
$unknown5 = pack("VVV", 0x06, 0x00, 0x00);
$num_bbd_blocks = pack("V", $num_lists);
$root_startblock = pack("V", $root_start);
$unknown6 = pack("VV", 0x00, 0x1000);
$sbd_startblock = pack("V", -2);
$unknown7 = pack("VVV", 0x00, -2 ,0x00);
$unused = pack("V", -1);
fwrite($this->_filehandle,$id);
fwrite($this->_filehandle,$unknown1);
fwrite($this->_filehandle,$unknown2);
fwrite($this->_filehandle,$unknown3);
fwrite($this->_filehandle,$unknown4);
fwrite($this->_filehandle,$unknown5);
fwrite($this->_filehandle,$num_bbd_blocks);
fwrite($this->_filehandle,$root_startblock);
fwrite($this->_filehandle,$unknown6);
fwrite($this->_filehandle,$sbd_startblock);
fwrite($this->_filehandle,$unknown7);
for($i=1; $i <= $num_lists; $i++)
{
$root_start++;
fwrite($this->_filehandle,pack("V",$root_start));
}
for($i = $num_lists; $i <=108; $i++)
{
fwrite($this->_filehandle,$unused);
}
}
 
 
/**
* Write big block depot.
*
* @access private
*/
function _writeBigBlockDepot()
{
$num_blocks = $this->_big_blocks;
$num_lists = $this->_list_blocks;
$total_blocks = $num_lists *128;
$used_blocks = $num_blocks + $num_lists +2;
$marker = pack("V", -3);
$end_of_chain = pack("V", -2);
$unused = pack("V", -1);
for($i=1; $i < $num_blocks; $i++)
{
fwrite($this->_filehandle,pack("V",$i));
}
fwrite($this->_filehandle,$end_of_chain);
fwrite($this->_filehandle,$end_of_chain);
for($i=0; $i < $num_lists; $i++)
{
fwrite($this->_filehandle,$marker);
}
for($i=$used_blocks; $i <= $total_blocks; $i++)
{
fwrite($this->_filehandle,$unused);
}
}
 
/**
* Write property storage. TODO: add summary sheets
*
* @access private
*/
function _writePropertyStorage()
{
//$rootsize = -2;
/*************** name type dir start size */
$this->_writePps("Root Entry", 0x05, 1, -2, 0x00);
$this->_writePps("Book", 0x02, -1, 0x00, $this->_booksize);
$this->_writePps('', 0x00, -1, 0x00, 0x0000);
$this->_writePps('', 0x00, -1, 0x00, 0x0000);
}
 
/**
* Write property sheet in property storage
*
* @param string $name name of the property storage.
* @param integer $type type of the property storage.
* @param integer $dir dir of the property storage.
* @param integer $start start of the property storage.
* @param integer $size size of the property storage.
* @access private
*/
function _writePps($name,$type,$dir,$start,$size)
{
$length = 0;
$rawname = '';
if ($name != '')
{
$name = $name . "\0";
for($i=0;$i<strlen($name);$i++)
{
// Simulate a Unicode string
$rawname .= pack("H*",dechex(ord($name{$i}))).pack("C",0);
}
$length = strlen($name) * 2;
}
$zero = pack("C", 0);
$pps_sizeofname = pack("v", $length); // 0x40
$pps_type = pack("v", $type); // 0x42
$pps_prev = pack("V", -1); // 0x44
$pps_next = pack("V", -1); // 0x48
$pps_dir = pack("V", $dir); // 0x4c
$unknown1 = pack("V", 0);
$pps_ts1s = pack("V", 0); // 0x64
$pps_ts1d = pack("V", 0); // 0x68
$pps_ts2s = pack("V", 0); // 0x6c
$pps_ts2d = pack("V", 0); // 0x70
$pps_sb = pack("V", $start); // 0x74
$pps_size = pack("V", $size); // 0x78
fwrite($this->_filehandle,$rawname);
for($i=0; $i < (64 -$length); $i++) {
fwrite($this->_filehandle,$zero);
}
fwrite($this->_filehandle,$pps_sizeofname);
fwrite($this->_filehandle,$pps_type);
fwrite($this->_filehandle,$pps_prev);
fwrite($this->_filehandle,$pps_next);
fwrite($this->_filehandle,$pps_dir);
for($i=0; $i < 5; $i++) {
fwrite($this->_filehandle,$unknown1);
}
fwrite($this->_filehandle,$pps_ts1s);
fwrite($this->_filehandle,$pps_ts1d);
fwrite($this->_filehandle,$pps_ts2d);
fwrite($this->_filehandle,$pps_ts2d);
fwrite($this->_filehandle,$pps_sb);
fwrite($this->_filehandle,$pps_size);
fwrite($this->_filehandle,$unknown1);
}
 
/**
* Pad the end of the file
*
* @access private
*/
function _writePadding()
{
$biffsize = $this->_biffsize;
if ($biffsize < 4096) {
$min_size = 4096;
}
else {
$min_size = 512;
}
if ($biffsize % $min_size != 0)
{
$padding = $min_size - ($biffsize % $min_size);
for($i=0; $i < $padding; $i++) {
fwrite($this->_filehandle,"\0");
}
}
}
}
?>
/trunk/applications/jrest/lib/Spreadsheet/Excel/Writer/Parser.php
New file
0,0 → 1,1551
<?php
/**
* Class for parsing Excel formulas
*
* License Information:
*
* Spreadsheet_Excel_Writer: A library for generating Excel Spreadsheets
* Copyright (c) 2002-2003 Xavier Noguer xnoguer@rezebra.com
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
 
/**
* @const SPREADSHEET_EXCEL_WRITER_ADD token identifier for character "+"
*/
define('SPREADSHEET_EXCEL_WRITER_ADD',"+");
 
/**
* @const SPREADSHEET_EXCEL_WRITER_SUB token identifier for character "-"
*/
define('SPREADSHEET_EXCEL_WRITER_SUB',"-");
 
/**
* @const SPREADSHEET_EXCEL_WRITER_MUL token identifier for character "*"
*/
define('SPREADSHEET_EXCEL_WRITER_MUL',"*");
 
/**
* @const SPREADSHEET_EXCEL_WRITER_DIV token identifier for character "/"
*/
define('SPREADSHEET_EXCEL_WRITER_DIV',"/");
 
/**
* @const SPREADSHEET_EXCEL_WRITER_OPEN token identifier for character "("
*/
define('SPREADSHEET_EXCEL_WRITER_OPEN',"(");
 
/**
* @const SPREADSHEET_EXCEL_WRITER_CLOSE token identifier for character ")"
*/
define('SPREADSHEET_EXCEL_WRITER_CLOSE',")");
 
/**
* @const SPREADSHEET_EXCEL_WRITER_COMA token identifier for character ","
*/
define('SPREADSHEET_EXCEL_WRITER_COMA',",");
 
/**
* @const SPREADSHEET_EXCEL_WRITER_GT token identifier for character ">"
*/
define('SPREADSHEET_EXCEL_WRITER_GT',">");
 
/**
* @const SPREADSHEET_EXCEL_WRITER_LT token identifier for character "<"
*/
define('SPREADSHEET_EXCEL_WRITER_LT',"<");
 
/**
* @const SPREADSHEET_EXCEL_WRITER_LE token identifier for character "<="
*/
define('SPREADSHEET_EXCEL_WRITER_LE',"<=");
 
/**
* @const SPREADSHEET_EXCEL_WRITER_GE token identifier for character ">="
*/
define('SPREADSHEET_EXCEL_WRITER_GE',">=");
 
/**
* @const SPREADSHEET_EXCEL_WRITER_EQ token identifier for character "="
*/
define('SPREADSHEET_EXCEL_WRITER_EQ',"=");
 
/**
* @const SPREADSHEET_EXCEL_WRITER_NE token identifier for character "<>"
*/
define('SPREADSHEET_EXCEL_WRITER_NE',"<>");
 
 
require_once('PEAR.php');
 
/**
* Class for parsing Excel formulas
*
* @author Xavier Noguer <xnoguer@rezebra.com>
* @category FileFormats
* @package Spreadsheet_Excel_Writer
*/
 
class Spreadsheet_Excel_Writer_Parser extends PEAR
{
/**
* The index of the character we are currently looking at
* @var integer
*/
var $_current_char;
 
/**
* The token we are working on.
* @var string
*/
var $_current_token;
 
/**
* The formula to parse
* @var string
*/
var $_formula;
 
/**
* The character ahead of the current char
* @var string
*/
var $_lookahead;
 
/**
* The parse tree to be generated
* @var string
*/
var $_parse_tree;
 
/**
* The byte order. 1 => big endian, 0 => little endian.
* @var integer
*/
var $_byte_order;
 
/**
* Number of arguments for the current function
* @var integer
*/
var $_func_args;
 
/**
* Array of external sheets
* @var array
*/
var $_ext_sheets;
 
/**
* The class constructor
*
* @param integer $byte_order The byte order (Little endian or Big endian) of the architecture
(optional). 1 => big endian, 0 (default) => little endian.
*/
function Spreadsheet_Excel_Writer_Parser($byte_order = 0)
{
$this->_current_char = 0;
$this->_current_token = ''; // The token we are working on.
$this->_formula = ""; // The formula to parse.
$this->_lookahead = ''; // The character ahead of the current char.
$this->_parse_tree = ''; // The parse tree to be generated.
$this->_initializeHashes(); // Initialize the hashes: ptg's and function's ptg's
$this->_byte_order = $byte_order; // Little Endian or Big Endian
$this->_func_args = 0; // Number of arguments for the current function
$this->_ext_sheets = array();
}
/**
* Initialize the ptg and function hashes.
*
* @access private
*/
function _initializeHashes()
{
// The Excel ptg indices
$this->ptg = array(
'ptgExp' => 0x01,
'ptgTbl' => 0x02,
'ptgAdd' => 0x03,
'ptgSub' => 0x04,
'ptgMul' => 0x05,
'ptgDiv' => 0x06,
'ptgPower' => 0x07,
'ptgConcat' => 0x08,
'ptgLT' => 0x09,
'ptgLE' => 0x0A,
'ptgEQ' => 0x0B,
'ptgGE' => 0x0C,
'ptgGT' => 0x0D,
'ptgNE' => 0x0E,
'ptgIsect' => 0x0F,
'ptgUnion' => 0x10,
'ptgRange' => 0x11,
'ptgUplus' => 0x12,
'ptgUminus' => 0x13,
'ptgPercent' => 0x14,
'ptgParen' => 0x15,
'ptgMissArg' => 0x16,
'ptgStr' => 0x17,
'ptgAttr' => 0x19,
'ptgSheet' => 0x1A,
'ptgEndSheet' => 0x1B,
'ptgErr' => 0x1C,
'ptgBool' => 0x1D,
'ptgInt' => 0x1E,
'ptgNum' => 0x1F,
'ptgArray' => 0x20,
'ptgFunc' => 0x21,
'ptgFuncVar' => 0x22,
'ptgName' => 0x23,
'ptgRef' => 0x24,
'ptgArea' => 0x25,
'ptgMemArea' => 0x26,
'ptgMemErr' => 0x27,
'ptgMemNoMem' => 0x28,
'ptgMemFunc' => 0x29,
'ptgRefErr' => 0x2A,
'ptgAreaErr' => 0x2B,
'ptgRefN' => 0x2C,
'ptgAreaN' => 0x2D,
'ptgMemAreaN' => 0x2E,
'ptgMemNoMemN' => 0x2F,
'ptgNameX' => 0x39,
'ptgRef3d' => 0x3A,
'ptgArea3d' => 0x3B,
'ptgRefErr3d' => 0x3C,
'ptgAreaErr3d' => 0x3D,
'ptgArrayV' => 0x40,
'ptgFuncV' => 0x41,
'ptgFuncVarV' => 0x42,
'ptgNameV' => 0x43,
'ptgRefV' => 0x44,
'ptgAreaV' => 0x45,
'ptgMemAreaV' => 0x46,
'ptgMemErrV' => 0x47,
'ptgMemNoMemV' => 0x48,
'ptgMemFuncV' => 0x49,
'ptgRefErrV' => 0x4A,
'ptgAreaErrV' => 0x4B,
'ptgRefNV' => 0x4C,
'ptgAreaNV' => 0x4D,
'ptgMemAreaNV' => 0x4E,
'ptgMemNoMemN' => 0x4F,
'ptgFuncCEV' => 0x58,
'ptgNameXV' => 0x59,
'ptgRef3dV' => 0x5A,
'ptgArea3dV' => 0x5B,
'ptgRefErr3dV' => 0x5C,
'ptgAreaErr3d' => 0x5D,
'ptgArrayA' => 0x60,
'ptgFuncA' => 0x61,
'ptgFuncVarA' => 0x62,
'ptgNameA' => 0x63,
'ptgRefA' => 0x64,
'ptgAreaA' => 0x65,
'ptgMemAreaA' => 0x66,
'ptgMemErrA' => 0x67,
'ptgMemNoMemA' => 0x68,
'ptgMemFuncA' => 0x69,
'ptgRefErrA' => 0x6A,
'ptgAreaErrA' => 0x6B,
'ptgRefNA' => 0x6C,
'ptgAreaNA' => 0x6D,
'ptgMemAreaNA' => 0x6E,
'ptgMemNoMemN' => 0x6F,
'ptgFuncCEA' => 0x78,
'ptgNameXA' => 0x79,
'ptgRef3dA' => 0x7A,
'ptgArea3dA' => 0x7B,
'ptgRefErr3dA' => 0x7C,
'ptgAreaErr3d' => 0x7D
);
// Thanks to Michael Meeks and Gnumeric for the initial arg values.
//
// The following hash was generated by "function_locale.pl" in the distro.
// Refer to function_locale.pl for non-English function names.
//
// The array elements are as follow:
// ptg: The Excel function ptg code.
// args: The number of arguments that the function takes:
// >=0 is a fixed number of arguments.
// -1 is a variable number of arguments.
// class: The reference, value or array class of the function args.
// vol: The function is volatile.
//
$this->_functions = array(
// function ptg args class vol
'COUNT' => array( 0, -1, 0, 0 ),
'IF' => array( 1, -1, 1, 0 ),
'ISNA' => array( 2, 1, 1, 0 ),
'ISERROR' => array( 3, 1, 1, 0 ),
'SUM' => array( 4, -1, 0, 0 ),
'AVERAGE' => array( 5, -1, 0, 0 ),
'MIN' => array( 6, -1, 0, 0 ),
'MAX' => array( 7, -1, 0, 0 ),
'ROW' => array( 8, -1, 0, 0 ),
'COLUMN' => array( 9, -1, 0, 0 ),
'NA' => array( 10, 0, 0, 0 ),
'NPV' => array( 11, -1, 1, 0 ),
'STDEV' => array( 12, -1, 0, 0 ),
'DOLLAR' => array( 13, -1, 1, 0 ),
'FIXED' => array( 14, -1, 1, 0 ),
'SIN' => array( 15, 1, 1, 0 ),
'COS' => array( 16, 1, 1, 0 ),
'TAN' => array( 17, 1, 1, 0 ),
'ATAN' => array( 18, 1, 1, 0 ),
'PI' => array( 19, 0, 1, 0 ),
'SQRT' => array( 20, 1, 1, 0 ),
'EXP' => array( 21, 1, 1, 0 ),
'LN' => array( 22, 1, 1, 0 ),
'LOG10' => array( 23, 1, 1, 0 ),
'ABS' => array( 24, 1, 1, 0 ),
'INT' => array( 25, 1, 1, 0 ),
'SIGN' => array( 26, 1, 1, 0 ),
'ROUND' => array( 27, 2, 1, 0 ),
'LOOKUP' => array( 28, -1, 0, 0 ),
'INDEX' => array( 29, -1, 0, 1 ),
'REPT' => array( 30, 2, 1, 0 ),
'MID' => array( 31, 3, 1, 0 ),
'LEN' => array( 32, 1, 1, 0 ),
'VALUE' => array( 33, 1, 1, 0 ),
'TRUE' => array( 34, 0, 1, 0 ),
'FALSE' => array( 35, 0, 1, 0 ),
'AND' => array( 36, -1, 0, 0 ),
'OR' => array( 37, -1, 0, 0 ),
'NOT' => array( 38, 1, 1, 0 ),
'MOD' => array( 39, 2, 1, 0 ),
'DCOUNT' => array( 40, 3, 0, 0 ),
'DSUM' => array( 41, 3, 0, 0 ),
'DAVERAGE' => array( 42, 3, 0, 0 ),
'DMIN' => array( 43, 3, 0, 0 ),
'DMAX' => array( 44, 3, 0, 0 ),
'DSTDEV' => array( 45, 3, 0, 0 ),
'VAR' => array( 46, -1, 0, 0 ),
'DVAR' => array( 47, 3, 0, 0 ),
'TEXT' => array( 48, 2, 1, 0 ),
'LINEST' => array( 49, -1, 0, 0 ),
'TREND' => array( 50, -1, 0, 0 ),
'LOGEST' => array( 51, -1, 0, 0 ),
'GROWTH' => array( 52, -1, 0, 0 ),
'PV' => array( 56, -1, 1, 0 ),
'FV' => array( 57, -1, 1, 0 ),
'NPER' => array( 58, -1, 1, 0 ),
'PMT' => array( 59, -1, 1, 0 ),
'RATE' => array( 60, -1, 1, 0 ),
'MIRR' => array( 61, 3, 0, 0 ),
'IRR' => array( 62, -1, 0, 0 ),
'RAND' => array( 63, 0, 1, 1 ),
'MATCH' => array( 64, -1, 0, 0 ),
'DATE' => array( 65, 3, 1, 0 ),
'TIME' => array( 66, 3, 1, 0 ),
'DAY' => array( 67, 1, 1, 0 ),
'MONTH' => array( 68, 1, 1, 0 ),
'YEAR' => array( 69, 1, 1, 0 ),
'WEEKDAY' => array( 70, -1, 1, 0 ),
'HOUR' => array( 71, 1, 1, 0 ),
'MINUTE' => array( 72, 1, 1, 0 ),
'SECOND' => array( 73, 1, 1, 0 ),
'NOW' => array( 74, 0, 1, 1 ),
'AREAS' => array( 75, 1, 0, 1 ),
'ROWS' => array( 76, 1, 0, 1 ),
'COLUMNS' => array( 77, 1, 0, 1 ),
'OFFSET' => array( 78, -1, 0, 1 ),
'SEARCH' => array( 82, -1, 1, 0 ),
'TRANSPOSE' => array( 83, 1, 1, 0 ),
'TYPE' => array( 86, 1, 1, 0 ),
'ATAN2' => array( 97, 2, 1, 0 ),
'ASIN' => array( 98, 1, 1, 0 ),
'ACOS' => array( 99, 1, 1, 0 ),
'CHOOSE' => array( 100, -1, 1, 0 ),
'HLOOKUP' => array( 101, -1, 0, 0 ),
'VLOOKUP' => array( 102, -1, 0, 0 ),
'ISREF' => array( 105, 1, 0, 0 ),
'LOG' => array( 109, -1, 1, 0 ),
'CHAR' => array( 111, 1, 1, 0 ),
'LOWER' => array( 112, 1, 1, 0 ),
'UPPER' => array( 113, 1, 1, 0 ),
'PROPER' => array( 114, 1, 1, 0 ),
'LEFT' => array( 115, -1, 1, 0 ),
'RIGHT' => array( 116, -1, 1, 0 ),
'EXACT' => array( 117, 2, 1, 0 ),
'TRIM' => array( 118, 1, 1, 0 ),
'REPLACE' => array( 119, 4, 1, 0 ),
'SUBSTITUTE' => array( 120, -1, 1, 0 ),
'CODE' => array( 121, 1, 1, 0 ),
'FIND' => array( 124, -1, 1, 0 ),
'CELL' => array( 125, -1, 0, 1 ),
'ISERR' => array( 126, 1, 1, 0 ),
'ISTEXT' => array( 127, 1, 1, 0 ),
'ISNUMBER' => array( 128, 1, 1, 0 ),
'ISBLANK' => array( 129, 1, 1, 0 ),
'T' => array( 130, 1, 0, 0 ),
'N' => array( 131, 1, 0, 0 ),
'DATEVALUE' => array( 140, 1, 1, 0 ),
'TIMEVALUE' => array( 141, 1, 1, 0 ),
'SLN' => array( 142, 3, 1, 0 ),
'SYD' => array( 143, 4, 1, 0 ),
'DDB' => array( 144, -1, 1, 0 ),
'INDIRECT' => array( 148, -1, 1, 1 ),
'CALL' => array( 150, -1, 1, 0 ),
'CLEAN' => array( 162, 1, 1, 0 ),
'MDETERM' => array( 163, 1, 2, 0 ),
'MINVERSE' => array( 164, 1, 2, 0 ),
'MMULT' => array( 165, 2, 2, 0 ),
'IPMT' => array( 167, -1, 1, 0 ),
'PPMT' => array( 168, -1, 1, 0 ),
'COUNTA' => array( 169, -1, 0, 0 ),
'PRODUCT' => array( 183, -1, 0, 0 ),
'FACT' => array( 184, 1, 1, 0 ),
'DPRODUCT' => array( 189, 3, 0, 0 ),
'ISNONTEXT' => array( 190, 1, 1, 0 ),
'STDEVP' => array( 193, -1, 0, 0 ),
'VARP' => array( 194, -1, 0, 0 ),
'DSTDEVP' => array( 195, 3, 0, 0 ),
'DVARP' => array( 196, 3, 0, 0 ),
'TRUNC' => array( 197, -1, 1, 0 ),
'ISLOGICAL' => array( 198, 1, 1, 0 ),
'DCOUNTA' => array( 199, 3, 0, 0 ),
'ROUNDUP' => array( 212, 2, 1, 0 ),
'ROUNDDOWN' => array( 213, 2, 1, 0 ),
'RANK' => array( 216, -1, 0, 0 ),
'ADDRESS' => array( 219, -1, 1, 0 ),
'DAYS360' => array( 220, -1, 1, 0 ),
'TODAY' => array( 221, 0, 1, 1 ),
'VDB' => array( 222, -1, 1, 0 ),
'MEDIAN' => array( 227, -1, 0, 0 ),
'SUMPRODUCT' => array( 228, -1, 2, 0 ),
'SINH' => array( 229, 1, 1, 0 ),
'COSH' => array( 230, 1, 1, 0 ),
'TANH' => array( 231, 1, 1, 0 ),
'ASINH' => array( 232, 1, 1, 0 ),
'ACOSH' => array( 233, 1, 1, 0 ),
'ATANH' => array( 234, 1, 1, 0 ),
'DGET' => array( 235, 3, 0, 0 ),
'INFO' => array( 244, 1, 1, 1 ),
'DB' => array( 247, -1, 1, 0 ),
'FREQUENCY' => array( 252, 2, 0, 0 ),
'ERROR.TYPE' => array( 261, 1, 1, 0 ),
'REGISTER.ID' => array( 267, -1, 1, 0 ),
'AVEDEV' => array( 269, -1, 0, 0 ),
'BETADIST' => array( 270, -1, 1, 0 ),
'GAMMALN' => array( 271, 1, 1, 0 ),
'BETAINV' => array( 272, -1, 1, 0 ),
'BINOMDIST' => array( 273, 4, 1, 0 ),
'CHIDIST' => array( 274, 2, 1, 0 ),
'CHIINV' => array( 275, 2, 1, 0 ),
'COMBIN' => array( 276, 2, 1, 0 ),
'CONFIDENCE' => array( 277, 3, 1, 0 ),
'CRITBINOM' => array( 278, 3, 1, 0 ),
'EVEN' => array( 279, 1, 1, 0 ),
'EXPONDIST' => array( 280, 3, 1, 0 ),
'FDIST' => array( 281, 3, 1, 0 ),
'FINV' => array( 282, 3, 1, 0 ),
'FISHER' => array( 283, 1, 1, 0 ),
'FISHERINV' => array( 284, 1, 1, 0 ),
'FLOOR' => array( 285, 2, 1, 0 ),
'GAMMADIST' => array( 286, 4, 1, 0 ),
'GAMMAINV' => array( 287, 3, 1, 0 ),
'CEILING' => array( 288, 2, 1, 0 ),
'HYPGEOMDIST' => array( 289, 4, 1, 0 ),
'LOGNORMDIST' => array( 290, 3, 1, 0 ),
'LOGINV' => array( 291, 3, 1, 0 ),
'NEGBINOMDIST' => array( 292, 3, 1, 0 ),
'NORMDIST' => array( 293, 4, 1, 0 ),
'NORMSDIST' => array( 294, 1, 1, 0 ),
'NORMINV' => array( 295, 3, 1, 0 ),
'NORMSINV' => array( 296, 1, 1, 0 ),
'STANDARDIZE' => array( 297, 3, 1, 0 ),
'ODD' => array( 298, 1, 1, 0 ),
'PERMUT' => array( 299, 2, 1, 0 ),
'POISSON' => array( 300, 3, 1, 0 ),
'TDIST' => array( 301, 3, 1, 0 ),
'WEIBULL' => array( 302, 4, 1, 0 ),
'SUMXMY2' => array( 303, 2, 2, 0 ),
'SUMX2MY2' => array( 304, 2, 2, 0 ),
'SUMX2PY2' => array( 305, 2, 2, 0 ),
'CHITEST' => array( 306, 2, 2, 0 ),
'CORREL' => array( 307, 2, 2, 0 ),
'COVAR' => array( 308, 2, 2, 0 ),
'FORECAST' => array( 309, 3, 2, 0 ),
'FTEST' => array( 310, 2, 2, 0 ),
'INTERCEPT' => array( 311, 2, 2, 0 ),
'PEARSON' => array( 312, 2, 2, 0 ),
'RSQ' => array( 313, 2, 2, 0 ),
'STEYX' => array( 314, 2, 2, 0 ),
'SLOPE' => array( 315, 2, 2, 0 ),
'TTEST' => array( 316, 4, 2, 0 ),
'PROB' => array( 317, -1, 2, 0 ),
'DEVSQ' => array( 318, -1, 0, 0 ),
'GEOMEAN' => array( 319, -1, 0, 0 ),
'HARMEAN' => array( 320, -1, 0, 0 ),
'SUMSQ' => array( 321, -1, 0, 0 ),
'KURT' => array( 322, -1, 0, 0 ),
'SKEW' => array( 323, -1, 0, 0 ),
'ZTEST' => array( 324, -1, 0, 0 ),
'LARGE' => array( 325, 2, 0, 0 ),
'SMALL' => array( 326, 2, 0, 0 ),
'QUARTILE' => array( 327, 2, 0, 0 ),
'PERCENTILE' => array( 328, 2, 0, 0 ),
'PERCENTRANK' => array( 329, -1, 0, 0 ),
'MODE' => array( 330, -1, 2, 0 ),
'TRIMMEAN' => array( 331, 2, 0, 0 ),
'TINV' => array( 332, 2, 1, 0 ),
'CONCATENATE' => array( 336, -1, 1, 0 ),
'POWER' => array( 337, 2, 1, 0 ),
'RADIANS' => array( 342, 1, 1, 0 ),
'DEGREES' => array( 343, 1, 1, 0 ),
'SUBTOTAL' => array( 344, -1, 0, 0 ),
'SUMIF' => array( 345, -1, 0, 0 ),
'COUNTIF' => array( 346, 2, 0, 0 ),
'COUNTBLANK' => array( 347, 1, 0, 0 ),
'ROMAN' => array( 354, -1, 1, 0 )
);
}
/**
* Convert a token to the proper ptg value.
*
* @access private
* @param mixed $token The token to convert.
*/
function _convert($token)
{
if (preg_match("/^\"[^\"]{0,255}\"$/", $token))
{
return $this->_convertString($token);
}
elseif (is_numeric($token))
{
return $this->_convertNumber($token);
}
// match references like A1 or $A$1
elseif(preg_match('/^\$?([A-I]?[A-Z])\$?(\d+)$/',$token))
{
return($this->_convertRef2d($token));
}
// match external references like Sheet1:Sheet2!A1
elseif (preg_match("/^[A-Za-z0-9_]+(\:[A-Za-z0-9_]+)?\![A-I]?[A-Z](\d+)$/",$token))
{
return $this->_convertRef3d($token);
}
// match ranges like A1:B2
elseif(preg_match("/^(\$)?[A-I]?[A-Z](\$)?(\d+)\:(\$)?[A-I]?[A-Z](\$)?(\d+)$/",$token))
{
return($this->_convertRange2d($token));
}
// match ranges like A1..B2
elseif(preg_match("/^(\$)?[A-I]?[A-Z](\$)?(\d+)\.\.(\$)?[A-I]?[A-Z](\$)?(\d+)$/",$token))
{
return($this->_convertRange2d($token));
}
// match external ranges like Sheet1:Sheet2!A1:B2
elseif (preg_match("/^[A-Za-z0-9_]+(\:[A-Za-z0-9_]+)?\!([A-I]?[A-Z])?(\d+)\:([A-I]?[A-Z])?(\d+)$/",$token))
{
return $this->_convertRange3d($token);
}
elseif(isset($this->ptg[$token])) // operators (including parentheses)
{
return(pack("C", $this->ptg[$token]));
}
elseif(preg_match("/[A-Z0-9\xc0-\xdc\.]+/",$token))
{
return($this->_convertFunction($token,$this->_func_args));
}
// if it's an argument, ignore the token (the argument remains)
elseif($token == 'arg')
{
$this->_func_args++;
return('');
}
// TODO: use real error codes
$this->raiseError("Unknown token $token", 0, PEAR_ERROR_DIE);
}
/**
* Convert a number token to ptgInt or ptgNum
*
* @access private
* @param mixed $num an integer or double for conversion to its ptg value
*/
function _convertNumber($num)
{
// Integer in the range 0..2**16-1
if ((preg_match("/^\d+$/",$num)) and ($num <= 65535)) {
return(pack("Cv", $this->ptg['ptgInt'], $num));
}
else // A float
{
if($this->_byte_order) // if it's Big Endian
{
$num = strrev($num);
}
return(pack("Cd", $this->ptg['ptgNum'], $num));
}
}
/**
* Convert a string token to ptgStr
*
* @access private
* @param string $string A string for conversion to its ptg value
*/
function _convertString($string)
{
// chop away beggining and ending quotes
$string = substr($string, 1, strlen($string) - 2);
return pack("CC", $this->ptg['ptgStr'], strlen($string)).$string;
}
/**
* Convert a function to a ptgFunc or ptgFuncVarV depending on the number of
* args that it takes.
*
* @access private
* @param string $token The name of the function for convertion to ptg value.
* @param integer $num_args The number of arguments the function recieves.
*/
function _convertFunction($token, $num_args)
{
$this->_func_args = 0; // re initialize the number of arguments
$args = $this->_functions[$token][1];
$volatile = $this->_functions[$token][3];
// Fixed number of args eg. TIME($i,$j,$k).
if ($args >= 0) {
return(pack("Cv", $this->ptg['ptgFuncV'], $this->_functions[$token][0]));
}
// Variable number of args eg. SUM($i,$j,$k, ..).
if ($args == -1) {
return(pack("CCv", $this->ptg['ptgFuncVarV'], $num_args, $this->_functions[$token][0]));
}
}
/**
* Convert an Excel range such as A1:D4 to a ptgRefV.
*
* @access private
* @param string $range An Excel range in the A1:A2 or A1..A2 format.
*/
function _convertRange2d($range)
{
$class = 2; // as far as I know, this is magick.
// Split the range into 2 cell refs
if(preg_match("/^([A-I]?[A-Z])(\d+)\:([A-I]?[A-Z])(\d+)$/",$range)) {
list($cell1, $cell2) = explode(':', $range);
}
elseif(preg_match("/^([A-I]?[A-Z])(\d+)\.\.([A-I]?[A-Z])(\d+)$/",$range)) {
list($cell1, $cell2) = explode('\.\.', $range);
}
else {
// TODO: use real error codes
$this->raiseError("Unknown range separator", 0, PEAR_ERROR_DIE);
}
// Convert the cell references
$cell_array1 = $this->_cellToPackedRowcol($cell1);
if($this->isError($cell_array1)) {
return($cell_array1);
}
list($row1, $col1) = $cell_array1; //$this->_cellToPackedRowcol($cell1);
$cell_array2 = $this->_cellToPackedRowcol($cell2);
if($this->isError($cell_array2)) {
return($cell_array2);
}
list($row2, $col2) = $cell_array2; //$this->_cellToPackedRowcol($cell2);
// The ptg value depends on the class of the ptg.
if ($class == 0) {
$ptgArea = pack("C", $this->ptg['ptgArea']);
}
elseif ($class == 1) {
$ptgArea = pack("C", $this->ptg['ptgAreaV']);
}
elseif ($class == 2) {
$ptgArea = pack("C", $this->ptg['ptgAreaA']);
}
else {
// TODO: use real error codes
$this->raiseError("Unknown class $class", 0, PEAR_ERROR_DIE);
}
return($ptgArea . $row1 . $row2 . $col1. $col2);
}
/**
* Convert an Excel 3d range such as "Sheet1!A1:D4" or "Sheet1:Sheet2!A1:D4" to
* a ptgArea3dV.
*
* @access private
* @param string $token An Excel range in the Sheet1!A1:A2 format.
*/
function _convertRange3d($token)
{
$class = 2; // as far as I know, this is magick.
// Split the ref at the ! symbol
list($ext_ref, $range) = explode('!', $token);
// Convert the external reference part
$ext_ref = $this->_packExtRef($ext_ref);
if ($this->isError($ext_ref)) {
return $ext_ref;
}
// Split the range into 2 cell refs
list($cell1, $cell2) = explode(':', $range);
// Convert the cell references
if (preg_match("/^(\$)?[A-I]?[A-Z](\$)?(\d+)$/", $cell1))
{
$cell_array1 = $this->_cellToPackedRowcol($cell1);
if (PEAR::isError($cell_array1)) {
return $cell_array1;
}
list($row1, $col1) = $cell_array1;
$cell_array2 = $this->_cellToPackedRowcol($cell2);
if (PEAR::isError($cell_array2)) {
return $cell_array2;
}
list($row2, $col2) = $cell_array2;
}
else { // It's a columns range (like 26:27)
$cells_array = $this->_rangeToPackedRange($cell1.':'.$cell2);
if (PEAR::isError($cells_array)) {
return $cells_array;
}
list($row1, $col1, $row2, $col2) = $cells_array;
}
// The ptg value depends on the class of the ptg.
if ($class == 0) {
$ptgArea = pack("C", $this->ptg['ptgArea3d']);
}
elseif ($class == 1) {
$ptgArea = pack("C", $this->ptg['ptgArea3dV']);
}
elseif ($class == 2) {
$ptgArea = pack("C", $this->ptg['ptgArea3dA']);
}
else {
$this->raiseError("Unknown class $class", 0, PEAR_ERROR_DIE);
}
return $ptgArea . $ext_ref . $row1 . $row2 . $col1. $col2;
}
 
/**
* Convert an Excel reference such as A1, $B2, C$3 or $D$4 to a ptgRefV.
*
* @access private
* @param string $cell An Excel cell reference
* @return string The cell in packed() format with the corresponding ptg
*/
function _convertRef2d($cell)
{
$class = 2; // as far as I know, this is magick.
// Convert the cell reference
$cell_array = $this->_cellToPackedRowcol($cell);
if($this->isError($cell_array)) {
return($cell_array);
}
list($row, $col) = $cell_array;
// The ptg value depends on the class of the ptg.
if ($class == 0) {
$ptgRef = pack("C", $this->ptg['ptgRef']);
}
elseif ($class == 1) {
$ptgRef = pack("C", $this->ptg['ptgRefV']);
}
elseif ($class == 2) {
$ptgRef = pack("C", $this->ptg['ptgRefA']);
}
else {
// TODO: use real error codes
$this->raiseError("Unknown class $class", 0, PEAR_ERROR_DIE);
}
return($ptgRef.$row.$col);
}
/**
* Convert an Excel 3d reference such as "Sheet1!A1" or "Sheet1:Sheet2!A1" to a
* ptgRef3dV.
*
* @access private
* @param string $cell An Excel cell reference
* @return string The cell in packed() format with the corresponding ptg
*/
function _convertRef3d($cell)
{
$class = 2; // as far as I know, this is magick.
// Split the ref at the ! symbol
list($ext_ref, $cell) = explode('!', $cell);
// Convert the external reference part
$ext_ref = $this->_packExtRef($ext_ref);
if ($this->isError($ext_ref)) {
return $ext_ref;
}
// Convert the cell reference part
list($row, $col) = $this->_cellToPackedRowcol($cell);
// The ptg value depends on the class of the ptg.
if ($class == 0) {
$ptgRef = pack("C", $this->ptg['ptgRef3d']);
}
elseif ($class == 1) {
$ptgRef = pack("C", $this->ptg['ptgRef3dV']);
}
elseif ($class == 2) {
$ptgRef = pack("C", $this->ptg['ptgRef3dA']);
}
else {
$this->raiseError("Unknown class $class", 0, PEAR_ERROR_DIE);
}
 
return $ptgRef . $ext_ref. $row . $col;
}
 
/**
* Convert the sheet name part of an external reference, for example "Sheet1" or
* "Sheet1:Sheet2", to a packed structure.
*
* @access private
* @param string $ext_ref The name of the external reference
* @return string The reference index in packed() format
*/
function _packExtRef($ext_ref)
{
$ext_ref = preg_replace("/^'/", '', $ext_ref); // Remove leading ' if any.
$ext_ref = preg_replace("/'$/", '', $ext_ref); // Remove trailing ' if any.
// Check if there is a sheet range eg., Sheet1:Sheet2.
if (preg_match("/:/", $ext_ref))
{
list($sheet_name1, $sheet_name2) = explode(':', $ext_ref);
$sheet1 = $this->_getSheetIndex($sheet_name1);
if ($sheet1 == -1) {
return $this->raiseError("Unknown sheet name $sheet_name1 in formula");
}
$sheet2 = $this->_getSheetIndex($sheet_name2);
if ($sheet2 == -1) {
return $this->raiseError("Unknown sheet name $sheet_name2 in formula");
}
// Reverse max and min sheet numbers if necessary
if ($sheet1 > $sheet2) {
list($sheet1, $sheet2) = array($sheet2, $sheet1);
}
}
else // Single sheet name only.
{
$sheet1 = $this->_getSheetIndex($ext_ref);
if ($sheet1 == -1) {
return $this->raiseError("Unknown sheet name $ext_ref in formula");
}
$sheet2 = $sheet1;
}
// References are stored relative to 0xFFFF.
$offset = -1 - $sheet1;
 
return pack('vdvv', $offset, 0x00, $sheet1, $sheet2);
}
 
/**
* Look up the index that corresponds to an external sheet name. The hash of
* sheet names is updated by the addworksheet() method of the
* Spreadsheet_Excel_Writer_Workbook class.
*
* @access private
* @return integer
*/
function _getSheetIndex($sheet_name)
{
if (!isset($this->_ext_sheets[$sheet_name])) {
return -1;
}
else {
return $this->_ext_sheets[$sheet_name];
}
}
 
/**
* This method is used to update the array of sheet names. It is
* called by the addWorksheet() method of the Spreadsheet_Excel_Writer_Workbook class.
*
* @access private
* @param string $name The name of the worksheet being added
* @param integer $index The index of the worksheet being added
*/
function setExtSheet($name, $index)
{
$this->_ext_sheets[$name] = $index;
}
 
/**
* pack() row and column into the required 3 byte format.
*
* @access private
* @param string $cell The Excel cell reference to be packed
* @return array Array containing the row and column in packed() format
*/
function _cellToPackedRowcol($cell)
{
list($row, $col, $row_rel, $col_rel) = $this->_cellToRowcol($cell);
if ($col >= 256) {
return($this->raiseError("Column in: $cell greater than 255"));
}
if ($row >= 16384) {
return($this->raiseError("Row in: $cell greater than 16384 "));
}
// Set the high bits to indicate if row or col are relative.
$row |= $col_rel << 14;
$row |= $row_rel << 15;
$row = pack('v', $row);
$col = pack('C', $col);
return(array($row, $col));
}
/**
* pack() row range into the required 3 byte format.
* Just using maximun col/rows, which is probably not the correct solution
*
* @access private
* @param string $range The Excel range to be packed
* @return array Array containing (row1,col1,row2,col2) in packed() format
*/
function _rangeToPackedRange($range)
{
preg_match('/(\$)?(\d+)\:(\$)?(\d+)/', $range, $match);
// return absolute rows if there is a $ in the ref
$row1_rel = empty($match[1]) ? 1 : 0;
$row1 = $match[2];
$row2_rel = empty($match[3]) ? 1 : 0;
$row2 = $match[4];
// Convert 1-index to zero-index
$row1--;
$row2--;
// Trick poor inocent Excel
$col1 = 0;
$col2 = 16383; // maximum possible value for Excel 5 (change this!!!)
 
//list($row, $col, $row_rel, $col_rel) = $this->_cellToRowcol($cell);
if (($row1 >= 16384) or ($row2 >= 16384)) {
return new PEAR_Error("Row in: $range greater than 16384 ");
}
// Set the high bits to indicate if rows are relative.
$row1 |= $row1_rel << 14;
$row2 |= $row2_rel << 15;
$row1 = pack('v', $row1);
$row2 = pack('v', $row2);
$col1 = pack('C', $col1);
$col2 = pack('C', $col2);
return array($row1, $col1, $row2, $col2);
}
 
/**
* Convert an Excel cell reference such as A1 or $B2 or C$3 or $D$4 to a zero
* indexed row and column number. Also returns two (0,1) values to indicate
* whether the row or column are relative references.
*
* @access private
* @param string $cell The Excel cell reference in A1 format.
* @return array
*/
function _cellToRowcol($cell)
{
preg_match('/(\$)?([A-I]?[A-Z])(\$)?(\d+)/',$cell,$match);
// return absolute column if there is a $ in the ref
$col_rel = empty($match[1]) ? 1 : 0;
$col_ref = $match[2];
$row_rel = empty($match[3]) ? 1 : 0;
$row = $match[4];
// Convert base26 column string to a number.
$expn = strlen($col_ref) - 1;
$col = 0;
for($i=0; $i < strlen($col_ref); $i++)
{
$col += (ord($col_ref{$i}) - ord('A') + 1) * pow(26, $expn);
$expn--;
}
// Convert 1-index to zero-index
$row--;
$col--;
return(array($row, $col, $row_rel, $col_rel));
}
/**
* Advance to the next valid token.
*
* @access private
*/
function _advance()
{
$i = $this->_current_char;
// eat up white spaces
if($i < strlen($this->_formula))
{
while($this->_formula{$i} == " ") {
$i++;
}
if($i < strlen($this->_formula) - 1) {
$this->_lookahead = $this->_formula{$i+1};
}
$token = "";
}
while($i < strlen($this->_formula))
{
$token .= $this->_formula{$i};
if($this->_match($token) != '')
{
if($i < strlen($this->_formula) - 1) {
$this->_lookahead = $this->_formula{$i+1};
}
$this->_current_char = $i + 1;
$this->_current_token = $token;
return(1);
}
if ($i < strlen($this->_formula) - 2) {
$this->_lookahead = $this->_formula{$i+2};
}
// if we run out of characters _lookahead becomes empty
else {
$this->_lookahead = '';
}
$i++;
}
//die("Lexical error ".$this->_current_char);
}
/**
* Checks if it's a valid token.
*
* @access private
* @param mixed $token The token to check.
* @return mixed The checked token or false on failure
*/
function _match($token)
{
switch($token)
{
case SPREADSHEET_EXCEL_WRITER_ADD:
return($token);
break;
case SPREADSHEET_EXCEL_WRITER_SUB:
return($token);
break;
case SPREADSHEET_EXCEL_WRITER_MUL:
return($token);
break;
case SPREADSHEET_EXCEL_WRITER_DIV:
return($token);
break;
case SPREADSHEET_EXCEL_WRITER_OPEN:
return($token);
break;
case SPREADSHEET_EXCEL_WRITER_CLOSE:
return($token);
break;
case SPREADSHEET_EXCEL_WRITER_COMA:
return($token);
break;
case SPREADSHEET_EXCEL_WRITER_GT:
if ($this->_lookahead == '=') { // it's a GE token
break;
}
return($token);
break;
case SPREADSHEET_EXCEL_WRITER_LT:
// it's a LE or a NE token
if (($this->_lookahead == '=') or ($this->_lookahead == '>')) {
break;
}
return($token);
break;
case SPREADSHEET_EXCEL_WRITER_GE:
return($token);
break;
case SPREADSHEET_EXCEL_WRITER_LE:
return($token);
break;
case SPREADSHEET_EXCEL_WRITER_EQ:
return($token);
break;
case SPREADSHEET_EXCEL_WRITER_NE:
return($token);
break;
default:
// if it's a reference
if (preg_match('/^\$?[A-I]?[A-Z]\$?[0-9]+$/',$token) and
!ereg("[0-9]",$this->_lookahead) and
($this->_lookahead != ':') and ($this->_lookahead != '.') and
($this->_lookahead != '!'))
{
return $token;
}
// If it's an external reference (Sheet1!A1 or Sheet1:Sheet2!A1)
elseif (preg_match("/^[A-Za-z0-9_]+(\:[A-Za-z0-9_]+)?\![A-I]?[A-Z][0-9]+$/",$token) and
!ereg("[0-9]",$this->_lookahead) and
($this->_lookahead != ':') and ($this->_lookahead != '.'))
{
return $token;
}
// if it's a range (A1:A2)
elseif (preg_match("/^(\$)?[A-I]?[A-Z](\$)?[0-9]+:(\$)?[A-I]?[A-Z](\$)?[0-9]+$/",$token) and
!ereg("[0-9]",$this->_lookahead))
{
return $token;
}
// if it's a range (A1..A2)
elseif (preg_match("/^(\$)?[A-I]?[A-Z](\$)?[0-9]+\.\.(\$)?[A-I]?[A-Z](\$)?[0-9]+$/",$token) and
!ereg("[0-9]",$this->_lookahead))
{
return $token;
}
// If it's an external range
elseif (preg_match("/^[A-Za-z0-9_]+(\:[A-Za-z0-9_]+)?\!([A-I]?[A-Z])?[0-9]+:([A-I]?[A-Z])?[0-9]+$/",$token) and
!ereg("[0-9]",$this->_lookahead))
{
return $token;
}
// If it's a number (check that it's not a sheet name or range)
elseif (is_numeric($token) and !is_numeric($token.$this->_lookahead) and
($this->_lookahead != '!') and (($this->_lookahead != ':')))
{
return $token;
}
// If it's a string (of maximum 255 characters)
elseif(ereg("^\"[^\"]{0,255}\"$",$token))
{
return($token);
}
// if it's a function call
elseif(eregi("^[A-Z0-9\xc0-\xdc\.]+$",$token) and ($this->_lookahead == "("))
{
return($token);
}
return '';
}
}
/**
* The parsing method. It parses a formula.
*
* @access public
* @param string $formula The formula to parse, without the initial equal sign (=).
*/
function parse($formula)
{
$this->_current_char = 0;
$this->_formula = $formula;
$this->_lookahead = $formula{1};
$this->_advance();
$this->_parse_tree = $this->_condition();
if ($this->isError($this->_parse_tree)) {
return $this->_parse_tree;
}
}
/**
* It parses a condition. It assumes the following rule:
* Cond -> Expr [(">" | "<") Expr]
*
* @access private
* @return mixed The parsed ptg'd tree
*/
function _condition()
{
$result = $this->_expression();
if($this->isError($result)) {
return $result;
}
if ($this->_current_token == SPREADSHEET_EXCEL_WRITER_LT)
{
$this->_advance();
$result2 = $this->_expression();
if($this->isError($result2)) {
return $result2;
}
$result = $this->_createTree('ptgLT', $result, $result2);
}
elseif ($this->_current_token == SPREADSHEET_EXCEL_WRITER_GT)
{
$this->_advance();
$result2 = $this->_expression();
if($this->isError($result2)) {
return $result2;
}
$result = $this->_createTree('ptgGT', $result, $result2);
}
elseif ($this->_current_token == SPREADSHEET_EXCEL_WRITER_LE)
{
$this->_advance();
$result2 = $this->_expression();
if($this->isError($result2)) {
return $result2;
}
$result = $this->_createTree('ptgLE', $result, $result2);
}
elseif ($this->_current_token == SPREADSHEET_EXCEL_WRITER_GE)
{
$this->_advance();
$result2 = $this->_expression();
if($this->isError($result2)) {
return $result2;
}
$result = $this->_createTree('ptgGE', $result, $result2);
}
elseif ($this->_current_token == SPREADSHEET_EXCEL_WRITER_EQ)
{
$this->_advance();
$result2 = $this->_expression();
if($this->isError($result2)) {
return $result2;
}
$result = $this->_createTree('ptgEQ', $result, $result2);
}
elseif ($this->_current_token == SPREADSHEET_EXCEL_WRITER_NE)
{
$this->_advance();
$result2 = $this->_expression();
if($this->isError($result2)) {
return $result2;
}
$result = $this->_createTree('ptgNE', $result, $result2);
}
return $result;
}
/**
* It parses a expression. It assumes the following rule:
* Expr -> Term [("+" | "-") Term]
*
* @access private
* @return mixed The parsed ptg'd tree
*/
function _expression()
{
// If it's a string return a string node
if (ereg("^\"[^\"]{0,255}\"$", $this->_current_token))
{
$result = $this->_createTree($this->_current_token, '', '');
$this->_advance();
return($result);
}
$result = $this->_term();
if($this->isError($result)) {
return($result);
}
while (($this->_current_token == SPREADSHEET_EXCEL_WRITER_ADD) or
($this->_current_token == SPREADSHEET_EXCEL_WRITER_SUB))
{
if ($this->_current_token == SPREADSHEET_EXCEL_WRITER_ADD)
{
$this->_advance();
$result2 = $this->_term();
if($this->isError($result2)) {
return($result2);
}
$result = $this->_createTree('ptgAdd', $result, $result2);
}
else
{
$this->_advance();
$result2 = $this->_term();
if($this->isError($result2)) {
return($result2);
}
$result = $this->_createTree('ptgSub', $result, $result2);
}
}
return($result);
}
/**
* This function just introduces a ptgParen element in the tree, so that Excel
* doesn't get confused when working with a parenthesized formula afterwards.
*
* @access private
* @see _fact()
* @return mixed The parsed ptg'd tree
*/
function _parenthesizedExpression()
{
$result = $this->_createTree('ptgParen', $this->_expression(), '');
return($result);
}
/**
* It parses a term. It assumes the following rule:
* Term -> Fact [("*" | "/") Fact]
*
* @access private
* @return mixed The parsed ptg'd tree
*/
function _term()
{
$result = $this->_fact();
if($this->isError($result)) {
return($result);
}
while (($this->_current_token == SPREADSHEET_EXCEL_WRITER_MUL) or
($this->_current_token == SPREADSHEET_EXCEL_WRITER_DIV))
{
if ($this->_current_token == SPREADSHEET_EXCEL_WRITER_MUL)
{
$this->_advance();
$result2 = $this->_fact();
if($this->isError($result2)) {
return($result2);
}
$result = $this->_createTree('ptgMul', $result, $result2);
}
else
{
$this->_advance();
$result2 = $this->_fact();
if($this->isError($result2)) {
return($result2);
}
$result = $this->_createTree('ptgDiv', $result, $result2);
}
}
return($result);
}
/**
* It parses a factor. It assumes the following rule:
* Fact -> ( Expr )
* | CellRef
* | CellRange
* | Number
* | Function
*
* @access private
* @return mixed The parsed ptg'd tree
*/
function _fact()
{
if ($this->_current_token == SPREADSHEET_EXCEL_WRITER_OPEN)
{
$this->_advance(); // eat the "("
$result = $this->_parenthesizedExpression();
if ($this->_current_token != SPREADSHEET_EXCEL_WRITER_CLOSE) {
return($this->raiseError("')' token expected."));
}
$this->_advance(); // eat the ")"
return $result;
}
// if it's a reference
if (preg_match('/^\$?[A-I]?[A-Z]\$?[0-9]+$/',$this->_current_token))
{
$result = $this->_createTree($this->_current_token, '', '');
$this->_advance();
return $result;
}
// If it's an external reference (Sheet1!A1 or Sheet1:Sheet2!A1)
elseif (preg_match("/^[A-Za-z0-9_]+(\:[A-Za-z0-9_]+)?\![A-I]?[A-Z][0-9]+$/",$this->_current_token))
{
$result = $this->_createTree($this->_current_token, '', '');
$this->_advance();
return $result;
}
// if it's a range
elseif (preg_match("/^(\$)?[A-I]?[A-Z](\$)?[0-9]+:(\$)?[A-I]?[A-Z](\$)?[0-9]+$/",$this->_current_token) or
preg_match("/^(\$)?[A-I]?[A-Z](\$)?[0-9]+\.\.(\$)?[A-I]?[A-Z](\$)?[0-9]+$/",$this->_current_token))
{
$result = $this->_current_token;
$this->_advance();
return $result;
}
// If it's an external range (Sheet1!A1:B2)
elseif (preg_match("/^[A-Za-z0-9_]+(\:[A-Za-z0-9_]+)?\!([A-I]?[A-Z])?[0-9]+:([A-I]?[A-Z])?[0-9]+$/",$this->_current_token))
{
$result = $this->_current_token;
$this->_advance();
return($result);
}
elseif (is_numeric($this->_current_token))
{
$result = $this->_createTree($this->_current_token, '', '');
$this->_advance();
return($result);
}
// if it's a function call
elseif (eregi("^[A-Z0-9\xc0-\xdc\.]+$",$this->_current_token))
{
$result = $this->_func();
return($result);
}
return($this->raiseError("Sintactic error: ".$this->_current_token.", lookahead: ".
$this->_lookahead.", current char: ".$this->_current_char));
}
/**
* It parses a function call. It assumes the following rule:
* Func -> ( Expr [,Expr]* )
*
* @access private
*/
function _func()
{
$num_args = 0; // number of arguments received
$function = $this->_current_token;
$this->_advance();
$this->_advance(); // eat the "("
while($this->_current_token != ')')
{
if($num_args > 0)
{
if($this->_current_token == SPREADSHEET_EXCEL_WRITER_COMA) {
$this->_advance(); // eat the ","
}
else {
return new PEAR_Error("Sintactic error: coma expected in ".
"function $function, {$num_args}� arg");
}
$result2 = $this->_condition();
if($this->isError($result2)) {
return($result2);
}
$result = $this->_createTree('arg', $result, $result2);
}
else // first argument
{
$result2 = $this->_condition();
if($this->isError($result2)) {
return($result2);
}
$result = $this->_createTree('arg', '', $result2);
}
$num_args++;
}
$args = $this->_functions[$function][1];
// If fixed number of args eg. TIME($i,$j,$k). Check that the number of args is valid.
if (($args >= 0) and ($args != $num_args))
{
return($this->raiseError("Incorrect number of arguments in function $function() "));
}
$result = $this->_createTree($function, $result, '');
$this->_advance(); // eat the ")"
return($result);
}
/**
* Creates a tree. In fact an array which may have one or two arrays (sub-trees)
* as elements.
*
* @access private
* @param mixed $value The value of this node.
* @param mixed $left The left array (sub-tree) or a final node.
* @param mixed $right The right array (sub-tree) or a final node.
*/
function _createTree($value, $left, $right)
{
return(array('value' => $value, 'left' => $left, 'right' => $right));
}
/**
* Builds a string containing the tree in reverse polish notation (What you
* would use in a HP calculator stack).
* The following tree:
*
* +
* / \
* 2 3
*
* produces: "23+"
*
* The following tree:
*
* +
* / \
* 3 *
* / \
* 6 A1
*
* produces: "36A1*+"
*
* In fact all operands, functions, references, etc... are written as ptg's
*
* @access public
* @param array $tree The optional tree to convert.
* @return string The tree in reverse polish notation
*/
function toReversePolish($tree = array())
{
$polish = ""; // the string we are going to return
if (empty($tree)) // If it's the first call use _parse_tree
{
$tree = $this->_parse_tree;
}
if (is_array($tree['left']))
{
$converted_tree = $this->toReversePolish($tree['left']);
if($this->isError($converted_tree)) {
return($converted_tree);
}
$polish .= $converted_tree;
}
elseif($tree['left'] != '') // It's a final node
{
$converted_tree = $this->_convert($tree['left']);
if($this->isError($converted_tree)) {
return($converted_tree);
}
$polish .= $converted_tree;
}
if (is_array($tree['right']))
{
$converted_tree = $this->toReversePolish($tree['right']);
if($this->isError($converted_tree)) {
return($converted_tree);
}
$polish .= $converted_tree;
}
elseif($tree['right'] != '') // It's a final node
{
$converted_tree = $this->_convert($tree['right']);
if($this->isError($converted_tree)) {
return($converted_tree);
}
$polish .= $converted_tree;
}
$converted_tree = $this->_convert($tree['value']);
if($this->isError($converted_tree)) {
return($converted_tree);
}
$polish .= $converted_tree;
return($polish);
}
}
?>
/trunk/applications/jrest/lib/Spreadsheet/Excel/Writer/Workbook.php
New file
0,0 → 1,1042
<?php
/*
* Module written/ported by Xavier Noguer <xnoguer@rezebra.com>
*
* The majority of this is _NOT_ my code. I simply ported it from the
* PERL Spreadsheet::WriteExcel module.
*
* The author of the Spreadsheet::WriteExcel module is John McNamara
* <jmcnamara@cpan.org>
*
* I _DO_ maintain this code, and John McNamara has nothing to do with the
* porting of this code to PHP. Any questions directly related to this
* class library should be directed to me.
*
* License Information:
*
* Spreadsheet_Excel_Writer: A library for generating Excel Spreadsheets
* Copyright (c) 2002-2003 Xavier Noguer xnoguer@rezebra.com
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
 
require_once('Format.php');
require_once('OLEwriter.php');
require_once('BIFFwriter.php');
require_once('Worksheet.php');
require_once('Parser.php');
 
/**
* Class for generating Excel Spreadsheets
*
* @author Xavier Noguer <xnoguer@rezebra.com>
* @category FileFormats
* @package Spreadsheet_Excel_Writer
*/
 
class Spreadsheet_Excel_Writer_Workbook extends Spreadsheet_Excel_Writer_BIFFwriter
{
/**
* Filename for the Workbook
* @var string
*/
var $_filename;
 
/**
* Formula parser
* @var object Parser
*/
var $_parser;
 
/**
* Flag for 1904 date system
* @var integer
*/
var $_1904;
 
/**
* The active worksheet of the workbook (0 indexed)
* @var integer
*/
var $_activesheet;
 
/**
* 1st displayed worksheet in the workbook (0 indexed)
* @var integer
*/
var $_firstsheet;
 
/**
* Number of workbook tabs selected
* @var integer
*/
var $_selected;
 
/**
* Index for creating adding new formats to the workbook
* @var integer
*/
var $_xf_index;
 
/**
* Flag for preventing close from being called twice.
* @var integer
* @see close()
*/
var $_fileclosed;
 
/**
* The BIFF file size for the workbook.
* @var integer
* @see _calcSheetOffsets()
*/
var $_biffsize;
 
/**
* The default sheetname for all sheets created.
* @var string
*/
var $_sheetname;
 
/**
* The default XF format.
* @var object Format
*/
var $_tmp_format;
 
/**
* Array containing references to all of this workbook's worksheets
* @var array
*/
var $_worksheets;
 
/**
* Array of sheetnames for creating the EXTERNSHEET records
* @var array
*/
var $_sheetnames;
 
/**
* Array containing references to all of this workbook's formats
* @var array
*/
var $_formats;
 
/**
* Array containing the colour palette
* @var array
*/
var $_palette;
 
/**
* The default format for URLs.
* @var object Format
*/
var $_url_format;
 
/**
* Class constructor
*
* @param string filename for storing the workbook. "-" for writing to stdout.
* @access public
*/
function Spreadsheet_Excel_Writer_Workbook($filename)
{
// It needs to call its parent's constructor explicitly
$this->Spreadsheet_Excel_Writer_BIFFwriter();
$this->_filename = $filename;
$this->_parser = new Spreadsheet_Excel_Writer_Parser($this->_byte_order);
$this->_1904 = 0;
$this->_activesheet = 0;
$this->_firstsheet = 0;
$this->_selected = 0;
$this->_xf_index = 16; // 15 style XF's and 1 cell XF.
$this->_fileclosed = 0;
$this->_biffsize = 0;
$this->_sheetname = "Sheet";
$this->_tmp_format = new Spreadsheet_Excel_Writer_Format();
$this->_worksheets = array();
$this->_sheetnames = array();
$this->_formats = array();
$this->_palette = array();
// Add the default format for hyperlinks
$this->_url_format =& $this->addFormat(array('color' => 'blue', 'underline' => 1));
$this->_setPaletteXl97();
}
/**
* Calls finalization methods.
* This method should always be the last one to be called on every workbook
*
* @access public
*/
function close()
{
if ($this->_fileclosed) { // Prevent close() from being called twice.
return;
}
$this->_storeWorkbook();
$this->_fileclosed = 1;
}
/**
* An accessor for the _worksheets[] array
* Returns an array of the worksheet objects in a workbook
* It actually calls to worksheets()
*
* @access public
* @see worksheets()
* @return array
*/
function sheets()
{
return $this->worksheets();
}
/**
* An accessor for the _worksheets[] array.
* Returns an array of the worksheet objects in a workbook
*
* @access public
* @return array
*/
function worksheets()
{
return($this->_worksheets);
}
/**
* Add a new worksheet to the Excel workbook.
* If no name is given the name of the worksheet will be Sheeti$i, with
* $i in [1..].
*
* @access public
* @param string $name the optional name of the worksheet
* @return &Spreadsheet_Excel_Writer_Worksheet reference to a worksheet object
*/
function &addWorksheet($name = '')
{
$index = count($this->_worksheets);
$sheetname = $this->_sheetname;
if($name == '') {
$name = $sheetname.($index+1);
}
// Check that sheetname is <= 31 chars (Excel limit).
if(strlen($name) > 31) {
$this->raiseError("Sheetname $name must be <= 31 chars");
}
// Check that the worksheet name doesn't already exist: a fatal Excel error.
for($i=0; $i < count($this->_worksheets); $i++)
{
if($name == $this->_worksheets[$i]->getName()) {
$this->raiseError("Worksheet '$name' already exists");
}
}
$worksheet = new Spreadsheet_Excel_Writer_Worksheet($name,$index,$this->_activesheet,
$this->_firstsheet,$this->_url_format,
$this->_parser);
 
$this->_worksheets[$index] = &$worksheet; // Store ref for iterator
$this->_sheetnames[$index] = $name; // Store EXTERNSHEET names
$this->_parser->setExtSheet($name, $index); // Register worksheet name with parser
return($worksheet);
}
/**
* Add a new format to the Excel workbook.
* Also, pass any properties to the Format constructor.
*
* @access public
* @param array $properties array with properties for initializing the format.
* @return &Spreadsheet_Excel_Writer_Format reference to an Excel Format
*/
function &addFormat($properties = array())
{
$format = new Spreadsheet_Excel_Writer_Format($this->_xf_index,$properties);
$this->_xf_index += 1;
$this->_formats[] = &$format;
return($format);
}
/**
* Change the RGB components of the elements in the colour palette.
*
* @access public
* @param integer $index colour index
* @param integer $red red RGB value [0-255]
* @param integer $green green RGB value [0-255]
* @param integer $blue blue RGB value [0-255]
* @return integer The palette index for the custom color
*/
function setCustomColor($index,$red,$green,$blue)
{
// Match a HTML #xxyyzz style parameter
/*if (defined $_[1] and $_[1] =~ /^#(\w\w)(\w\w)(\w\w)/ ) {
@_ = ($_[0], hex $1, hex $2, hex $3);
}*/
// Check that the colour index is the right range
if ($index < 8 or $index > 64) {
// TODO: assign real error codes
$this->raiseError("Color index $index outside range: 8 <= index <= 64",0,PEAR_ERROR_DIE);
}
// Check that the colour components are in the right range
if ( ($red < 0 or $red > 255) or
($green < 0 or $green > 255) or
($blue < 0 or $blue > 255) )
{
$this->raiseError("Color component outside range: 0 <= color <= 255");
}
$index -= 8; // Adjust colour index (wingless dragonfly)
// Set the RGB value
$this->_palette[$index] = array($red, $green, $blue, 0);
return($index + 8);
}
/**
* Sets the colour palette to the Excel 97+ default.
*
* @access private
*/
function _setPaletteXl97()
{
$this->_palette = array(
array(0x00, 0x00, 0x00, 0x00), // 8
array(0xff, 0xff, 0xff, 0x00), // 9
array(0xff, 0x00, 0x00, 0x00), // 10
array(0x00, 0xff, 0x00, 0x00), // 11
array(0x00, 0x00, 0xff, 0x00), // 12
array(0xff, 0xff, 0x00, 0x00), // 13
array(0xff, 0x00, 0xff, 0x00), // 14
array(0x00, 0xff, 0xff, 0x00), // 15
array(0x80, 0x00, 0x00, 0x00), // 16
array(0x00, 0x80, 0x00, 0x00), // 17
array(0x00, 0x00, 0x80, 0x00), // 18
array(0x80, 0x80, 0x00, 0x00), // 19
array(0x80, 0x00, 0x80, 0x00), // 20
array(0x00, 0x80, 0x80, 0x00), // 21
array(0xc0, 0xc0, 0xc0, 0x00), // 22
array(0x80, 0x80, 0x80, 0x00), // 23
array(0x99, 0x99, 0xff, 0x00), // 24
array(0x99, 0x33, 0x66, 0x00), // 25
array(0xff, 0xff, 0xcc, 0x00), // 26
array(0xcc, 0xff, 0xff, 0x00), // 27
array(0x66, 0x00, 0x66, 0x00), // 28
array(0xff, 0x80, 0x80, 0x00), // 29
array(0x00, 0x66, 0xcc, 0x00), // 30
array(0xcc, 0xcc, 0xff, 0x00), // 31
array(0x00, 0x00, 0x80, 0x00), // 32
array(0xff, 0x00, 0xff, 0x00), // 33
array(0xff, 0xff, 0x00, 0x00), // 34
array(0x00, 0xff, 0xff, 0x00), // 35
array(0x80, 0x00, 0x80, 0x00), // 36
array(0x80, 0x00, 0x00, 0x00), // 37
array(0x00, 0x80, 0x80, 0x00), // 38
array(0x00, 0x00, 0xff, 0x00), // 39
array(0x00, 0xcc, 0xff, 0x00), // 40
array(0xcc, 0xff, 0xff, 0x00), // 41
array(0xcc, 0xff, 0xcc, 0x00), // 42
array(0xff, 0xff, 0x99, 0x00), // 43
array(0x99, 0xcc, 0xff, 0x00), // 44
array(0xff, 0x99, 0xcc, 0x00), // 45
array(0xcc, 0x99, 0xff, 0x00), // 46
array(0xff, 0xcc, 0x99, 0x00), // 47
array(0x33, 0x66, 0xff, 0x00), // 48
array(0x33, 0xcc, 0xcc, 0x00), // 49
array(0x99, 0xcc, 0x00, 0x00), // 50
array(0xff, 0xcc, 0x00, 0x00), // 51
array(0xff, 0x99, 0x00, 0x00), // 52
array(0xff, 0x66, 0x00, 0x00), // 53
array(0x66, 0x66, 0x99, 0x00), // 54
array(0x96, 0x96, 0x96, 0x00), // 55
array(0x00, 0x33, 0x66, 0x00), // 56
array(0x33, 0x99, 0x66, 0x00), // 57
array(0x00, 0x33, 0x00, 0x00), // 58
array(0x33, 0x33, 0x00, 0x00), // 59
array(0x99, 0x33, 0x00, 0x00), // 60
array(0x99, 0x33, 0x66, 0x00), // 61
array(0x33, 0x33, 0x99, 0x00), // 62
array(0x33, 0x33, 0x33, 0x00), // 63
);
}
/**
* Assemble worksheets into a workbook and send the BIFF data to an OLE
* storage.
*
* @access private
*/
function _storeWorkbook()
{
// Ensure that at least one worksheet has been selected.
if ($this->_activesheet == 0)
{
$this->_worksheets[0]->selected = 1;
}
// Calculate the number of selected worksheet tabs and call the finalization
// methods for each worksheet
for($i=0; $i < count($this->_worksheets); $i++)
{
if($this->_worksheets[$i]->selected) {
$this->_selected++;
}
$this->_worksheets[$i]->close($this->_sheetnames);
}
// Add Workbook globals
$this->_storeBof(0x0005);
$this->_storeExterns(); // For print area and repeat rows
$this->_storeNames(); // For print area and repeat rows
$this->_storeWindow1();
$this->_store1904();
$this->_storeAllFonts();
$this->_storeAllNumFormats();
$this->_storeAllXfs();
$this->_storeAllStyles();
$this->_storePalette();
$this->_calcSheetOffsets();
// Add BOUNDSHEET records
for($i=0; $i < count($this->_worksheets); $i++) {
$this->_storeBoundsheet($this->_worksheets[$i]->name,$this->_worksheets[$i]->offset);
}
// End Workbook globals
$this->_storeEof();
// Store the workbook in an OLE container
$this->_storeOLEFile();
}
/**
* Store the workbook in an OLE container if the total size of the workbook data
* is less than ~ 7MB.
*
* @access private
*/
function _storeOLEFile()
{
$OLE = new Spreadsheet_Excel_Writer_OLEwriter($this->_filename);
$this->_tmp_filename = $OLE->_tmp_filename;
// Write Worksheet data if data <~ 7MB
if ($OLE->setSize($this->_biffsize))
{
$OLE->writeHeader();
$OLE->write($this->_data);
foreach($this->_worksheets as $sheet)
{
while ($tmp = $sheet->getData()) {
$OLE->write($tmp);
}
}
}
$OLE->close();
}
/**
* Calculate offsets for Worksheet BOF records.
*
* @access private
*/
function _calcSheetOffsets()
{
$BOF = 11;
$EOF = 4;
$offset = $this->_datasize;
for($i=0; $i < count($this->_worksheets); $i++) {
$offset += $BOF + strlen($this->_worksheets[$i]->name);
}
$offset += $EOF;
for($i=0; $i < count($this->_worksheets); $i++) {
$this->_worksheets[$i]->offset = $offset;
$offset += $this->_worksheets[$i]->_datasize;
}
$this->_biffsize = $offset;
}
/**
* Store the Excel FONT records.
*
* @access private
*/
function _storeAllFonts()
{
// tmp_format is added by the constructor. We use this to write the default XF's
$format = $this->_tmp_format;
$font = $format->getFont();
// Note: Fonts are 0-indexed. According to the SDK there is no index 4,
// so the following fonts are 0, 1, 2, 3, 5
//
for($i=1; $i <= 5; $i++){
$this->_append($font);
}
// Iterate through the XF objects and write a FONT record if it isn't the
// same as the default FONT and if it hasn't already been used.
//
$fonts = array();
$index = 6; // The first user defined FONT
$key = $format->getFontKey(); // The default font from _tmp_format
$fonts[$key] = 0; // Index of the default font
for($i=0; $i < count($this->_formats); $i++) {
$key = $this->_formats[$i]->getFontKey();
if (isset($fonts[$key])) {
// FONT has already been used
$this->_formats[$i]->font_index = $fonts[$key];
}
else {
// Add a new FONT record
$fonts[$key] = $index;
$this->_formats[$i]->font_index = $index;
$index++;
$font = $this->_formats[$i]->getFont();
$this->_append($font);
}
}
}
/**
* Store user defined numerical formats i.e. FORMAT records
*
* @access private
*/
function _storeAllNumFormats()
{
// Leaning num_format syndrome
$hash_num_formats = array();
$num_formats = array();
$index = 164;
// Iterate through the XF objects and write a FORMAT record if it isn't a
// built-in format type and if the FORMAT string hasn't already been used.
//
for($i=0; $i < count($this->_formats); $i++)
{
$num_format = $this->_formats[$i]->_num_format;
// Check if $num_format is an index to a built-in format.
// Also check for a string of zeros, which is a valid format string
// but would evaluate to zero.
//
if (!preg_match("/^0+\d/",$num_format))
{
if (preg_match("/^\d+$/",$num_format)) { // built-in format
continue;
}
}
if (isset($hash_num_formats[$num_format])) {
// FORMAT has already been used
$this->_formats[$i]->_num_format = $hash_num_formats[$num_format];
}
else{
// Add a new FORMAT
$hash_num_formats[$num_format] = $index;
$this->_formats[$i]->_num_format = $index;
array_push($num_formats,$num_format);
$index++;
}
}
// Write the new FORMAT records starting from 0xA4
$index = 164;
foreach ($num_formats as $num_format) {
$this->_storeNumFormat($num_format,$index);
$index++;
}
}
/**
* Write all XF records.
*
* @access private
*/
function _storeAllXfs()
{
// _tmp_format is added by the constructor. We use this to write the default XF's
// The default font index is 0
//
$format = $this->_tmp_format;
for ($i=0; $i <= 14; $i++) {
$xf = $format->getXf('style'); // Style XF
$this->_append($xf);
}
$xf = $format->getXf('cell'); // Cell XF
$this->_append($xf);
// User defined XFs
for($i=0; $i < count($this->_formats); $i++) {
$xf = $this->_formats[$i]->getXf('cell');
$this->_append($xf);
}
}
/**
* Write all STYLE records.
*
* @access private
*/
function _storeAllStyles()
{
$this->_storeStyle();
}
/**
* Write the EXTERNCOUNT and EXTERNSHEET records. These are used as indexes for
* the NAME records.
*
* @access private
*/
function _storeExterns()
{
// Create EXTERNCOUNT with number of worksheets
$this->_storeExterncount(count($this->_worksheets));
// Create EXTERNSHEET for each worksheet
foreach ($this->_sheetnames as $sheetname) {
$this->_storeExternsheet($sheetname);
}
}
/**
* Write the NAME record to define the print area and the repeat rows and cols.
*
* @access private
*/
function _storeNames()
{
// Create the print area NAME records
foreach ($this->_worksheets as $worksheet) {
// Write a Name record if the print area has been defined
if (isset($worksheet->print_rowmin))
{
$this->_storeNameShort(
$worksheet->index,
0x06, // NAME type
$worksheet->print_rowmin,
$worksheet->print_rowmax,
$worksheet->print_colmin,
$worksheet->print_colmax
);
}
}
// Create the print title NAME records
foreach ($this->_worksheets as $worksheet)
{
$rowmin = $worksheet->title_rowmin;
$rowmax = $worksheet->title_rowmax;
$colmin = $worksheet->title_colmin;
$colmax = $worksheet->title_colmax;
// Determine if row + col, row, col or nothing has been defined
// and write the appropriate record
//
if (isset($rowmin) and isset($colmin)) {
// Row and column titles have been defined.
// Row title has been defined.
$this->_storeNameLong(
$worksheet->index,
0x07, // NAME type
$rowmin,
$rowmax,
$colmin,
$colmax
);
}
elseif (isset($rowmin)) {
// Row title has been defined.
$this->_storeNameShort(
$worksheet->index,
0x07, // NAME type
$rowmin,
$rowmax,
0x00,
0xff
);
}
elseif (isset($colmin)) {
// Column title has been defined.
$this->_storeNameShort(
$worksheet->index,
0x07, // NAME type
0x0000,
0x3fff,
$colmin,
$colmax
);
}
else {
// Print title hasn't been defined.
}
}
}
/******************************************************************************
*
* BIFF RECORDS
*
*/
/**
* Write Excel BIFF WINDOW1 record.
*
* @access private
*/
function _storeWindow1()
{
$record = 0x003D; // Record identifier
$length = 0x0012; // Number of bytes to follow
$xWn = 0x0000; // Horizontal position of window
$yWn = 0x0000; // Vertical position of window
$dxWn = 0x25BC; // Width of window
$dyWn = 0x1572; // Height of window
$grbit = 0x0038; // Option flags
$ctabsel = $this->_selected; // Number of workbook tabs selected
$wTabRatio = 0x0258; // Tab to scrollbar ratio
$itabFirst = $this->_firstsheet; // 1st displayed worksheet
$itabCur = $this->_activesheet; // Active worksheet
$header = pack("vv", $record, $length);
$data = pack("vvvvvvvvv", $xWn, $yWn, $dxWn, $dyWn,
$grbit,
$itabCur, $itabFirst,
$ctabsel, $wTabRatio);
$this->_append($header.$data);
}
/**
* Writes Excel BIFF BOUNDSHEET record.
*
* @param string $sheetname Worksheet name
* @param integer $offset Location of worksheet BOF
* @access private
*/
function _storeBoundsheet($sheetname,$offset)
{
$record = 0x0085; // Record identifier
$length = 0x07 + strlen($sheetname); // Number of bytes to follow
$grbit = 0x0000; // Sheet identifier
$cch = strlen($sheetname); // Length of sheet name
$header = pack("vv", $record, $length);
$data = pack("VvC", $offset, $grbit, $cch);
$this->_append($header.$data.$sheetname);
}
/**
* Write Excel BIFF STYLE records.
*
* @access private
*/
function _storeStyle()
{
$record = 0x0293; // Record identifier
$length = 0x0004; // Bytes to follow
$ixfe = 0x8000; // Index to style XF
$BuiltIn = 0x00; // Built-in style
$iLevel = 0xff; // Outline style level
$header = pack("vv", $record, $length);
$data = pack("vCC", $ixfe, $BuiltIn, $iLevel);
$this->_append($header.$data);
}
/**
* Writes Excel FORMAT record for non "built-in" numerical formats.
*
* @param string $format Custom format string
* @param integer $ifmt Format index code
* @access private
*/
function _storeNumFormat($format,$ifmt)
{
$record = 0x041E; // Record identifier
$length = 0x03 + strlen($format); // Number of bytes to follow
$cch = strlen($format); // Length of format string
$header = pack("vv", $record, $length);
$data = pack("vC", $ifmt, $cch);
$this->_append($header.$data.$format);
}
/**
* Write Excel 1904 record to indicate the date system in use.
*
* @access private
*/
function _store1904()
{
$record = 0x0022; // Record identifier
$length = 0x0002; // Bytes to follow
$f1904 = $this->_1904; // Flag for 1904 date system
$header = pack("vv", $record, $length);
$data = pack("v", $f1904);
$this->_append($header.$data);
}
/**
* Write BIFF record EXTERNCOUNT to indicate the number of external sheet
* references in the workbook.
*
* Excel only stores references to external sheets that are used in NAME.
* The workbook NAME record is required to define the print area and the repeat
* rows and columns.
*
* A similar method is used in Worksheet.php for a slightly different purpose.
*
* @param integer $cxals Number of external references
* @access private
*/
function _storeExterncount($cxals)
{
$record = 0x0016; // Record identifier
$length = 0x0002; // Number of bytes to follow
$header = pack("vv", $record, $length);
$data = pack("v", $cxals);
$this->_append($header.$data);
}
/**
* Writes the Excel BIFF EXTERNSHEET record. These references are used by
* formulas. NAME record is required to define the print area and the repeat
* rows and columns.
*
* A similar method is used in Worksheet.php for a slightly different purpose.
*
* @param string $sheetname Worksheet name
* @access private
*/
function _storeExternsheet($sheetname)
{
$record = 0x0017; // Record identifier
$length = 0x02 + strlen($sheetname); // Number of bytes to follow
$cch = strlen($sheetname); // Length of sheet name
$rgch = 0x03; // Filename encoding
$header = pack("vv", $record, $length);
$data = pack("CC", $cch, $rgch);
$this->_append($header.$data.$sheetname);
}
/**
* Store the NAME record in the short format that is used for storing the print
* area, repeat rows only and repeat columns only.
*
* @param integer $index Sheet index
* @param integer $type Built-in name type
* @param integer $rowmin Start row
* @param integer $rowmax End row
* @param integer $colmin Start colum
* @param integer $colmax End column
* @access private
*/
function _storeNameShort($index,$type,$rowmin,$rowmax,$colmin,$colmax)
{
$record = 0x0018; // Record identifier
$length = 0x0024; // Number of bytes to follow
$grbit = 0x0020; // Option flags
$chKey = 0x00; // Keyboard shortcut
$cch = 0x01; // Length of text name
$cce = 0x0015; // Length of text definition
$ixals = $index + 1; // Sheet index
$itab = $ixals; // Equal to ixals
$cchCustMenu = 0x00; // Length of cust menu text
$cchDescription = 0x00; // Length of description text
$cchHelptopic = 0x00; // Length of help topic text
$cchStatustext = 0x00; // Length of status bar text
$rgch = $type; // Built-in name type
$unknown03 = 0x3b;
$unknown04 = 0xffff-$index;
$unknown05 = 0x0000;
$unknown06 = 0x0000;
$unknown07 = 0x1087;
$unknown08 = 0x8005;
$header = pack("vv", $record, $length);
$data = pack("v", $grbit);
$data .= pack("C", $chKey);
$data .= pack("C", $cch);
$data .= pack("v", $cce);
$data .= pack("v", $ixals);
$data .= pack("v", $itab);
$data .= pack("C", $cchCustMenu);
$data .= pack("C", $cchDescription);
$data .= pack("C", $cchHelptopic);
$data .= pack("C", $cchStatustext);
$data .= pack("C", $rgch);
$data .= pack("C", $unknown03);
$data .= pack("v", $unknown04);
$data .= pack("v", $unknown05);
$data .= pack("v", $unknown06);
$data .= pack("v", $unknown07);
$data .= pack("v", $unknown08);
$data .= pack("v", $index);
$data .= pack("v", $index);
$data .= pack("v", $rowmin);
$data .= pack("v", $rowmax);
$data .= pack("C", $colmin);
$data .= pack("C", $colmax);
$this->_append($header.$data);
}
/**
* Store the NAME record in the long format that is used for storing the repeat
* rows and columns when both are specified. This shares a lot of code with
* _storeNameShort() but we use a separate method to keep the code clean.
* Code abstraction for reuse can be carried too far, and I should know. ;-)
*
* @param integer $index Sheet index
* @param integer $type Built-in name type
* @param integer $rowmin Start row
* @param integer $rowmax End row
* @param integer $colmin Start colum
* @param integer $colmax End column
* @access private
*/
function _storeNameLong($index,$type,$rowmin,$rowmax,$colmin,$colmax)
{
$record = 0x0018; // Record identifier
$length = 0x003d; // Number of bytes to follow
$grbit = 0x0020; // Option flags
$chKey = 0x00; // Keyboard shortcut
$cch = 0x01; // Length of text name
$cce = 0x002e; // Length of text definition
$ixals = $index + 1; // Sheet index
$itab = $ixals; // Equal to ixals
$cchCustMenu = 0x00; // Length of cust menu text
$cchDescription = 0x00; // Length of description text
$cchHelptopic = 0x00; // Length of help topic text
$cchStatustext = 0x00; // Length of status bar text
$rgch = $type; // Built-in name type
$unknown01 = 0x29;
$unknown02 = 0x002b;
$unknown03 = 0x3b;
$unknown04 = 0xffff-$index;
$unknown05 = 0x0000;
$unknown06 = 0x0000;
$unknown07 = 0x1087;
$unknown08 = 0x8008;
$header = pack("vv", $record, $length);
$data = pack("v", $grbit);
$data .= pack("C", $chKey);
$data .= pack("C", $cch);
$data .= pack("v", $cce);
$data .= pack("v", $ixals);
$data .= pack("v", $itab);
$data .= pack("C", $cchCustMenu);
$data .= pack("C", $cchDescription);
$data .= pack("C", $cchHelptopic);
$data .= pack("C", $cchStatustext);
$data .= pack("C", $rgch);
$data .= pack("C", $unknown01);
$data .= pack("v", $unknown02);
// Column definition
$data .= pack("C", $unknown03);
$data .= pack("v", $unknown04);
$data .= pack("v", $unknown05);
$data .= pack("v", $unknown06);
$data .= pack("v", $unknown07);
$data .= pack("v", $unknown08);
$data .= pack("v", $index);
$data .= pack("v", $index);
$data .= pack("v", 0x0000);
$data .= pack("v", 0x3fff);
$data .= pack("C", $colmin);
$data .= pack("C", $colmax);
// Row definition
$data .= pack("C", $unknown03);
$data .= pack("v", $unknown04);
$data .= pack("v", $unknown05);
$data .= pack("v", $unknown06);
$data .= pack("v", $unknown07);
$data .= pack("v", $unknown08);
$data .= pack("v", $index);
$data .= pack("v", $index);
$data .= pack("v", $rowmin);
$data .= pack("v", $rowmax);
$data .= pack("C", 0x00);
$data .= pack("C", 0xff);
// End of data
$data .= pack("C", 0x10);
$this->_append($header.$data);
}
/**
* Stores the PALETTE biff record.
*
* @access private
*/
function _storePalette()
{
$aref = $this->_palette;
$record = 0x0092; // Record identifier
$length = 2 + 4 * count($aref); // Number of bytes to follow
$ccv = count($aref); // Number of RGB values to follow
$data = ''; // The RGB data
// Pack the RGB data
foreach($aref as $color)
{
foreach($color as $byte) {
$data .= pack("C",$byte);
}
}
$header = pack("vvv", $record, $length, $ccv);
$this->_append($header.$data);
}
}
?>
/trunk/applications/jrest/lib/Spreadsheet/Excel/Writer.php
New file
0,0 → 1,75
<?php
/*
* Module written/ported by Xavier Noguer <xnoguer@rezebra.com>
*
* PERL Spreadsheet::WriteExcel module.
*
* The author of the Spreadsheet::WriteExcel module is John McNamara
* <jmcnamara@cpan.org>
*
* I _DO_ maintain this code, and John McNamara has nothing to do with the
* porting of this code to PHP. Any questions directly related to this
* class library should be directed to me.
*
* License Information:
*
* Spreadsheet_Excel_Writer: A library for generating Excel Spreadsheets
* Copyright (c) 2002-2003 Xavier Noguer xnoguer@rezebra.com
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
 
require_once('PEAR.php');
require_once('Writer/Workbook.php');
 
/**
* Class for writing Excel Spreadsheets. This class should change COMPLETELY.
*
* @author Xavier Noguer <xnoguer@rezebra.com>
* @category FileFormats
* @package Spreadsheet_Excel_Writer
*/
 
class Spreadsheet_Excel_Writer extends Spreadsheet_Excel_Writer_Workbook
{
/**
* The constructor. It just creates a Workbook
*
* @param string $filename The optional filename for the Workbook.
* @return Spreadsheet_Excel_Writer_Workbook The Workbook created
*/
function Spreadsheet_Excel_Writer($filename = '')
{
$this->_filename = $filename;
$this->Spreadsheet_Excel_Writer_Workbook($filename);
}
 
/**
* Send HTTP headers for the Excel file.
*
* @param string $filename The filename to use for HTTP headers
* @access public
*/
function send($filename)
{
header("Content-type: application/vnd.ms-excel");
header("Content-Disposition: attachment; filename=$filename");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0,pre-check=0");
header("Pragma: public");
}
 
}
?>
/trunk/applications/jrest/lib/Spreadsheet/Excel
New file
Property changes:
Added: svn:ignore
+.directory
/trunk/applications/jrest/lib/Spreadsheet
New file
Property changes:
Added: svn:ignore
+.directory
/trunk/applications/jrest/lib/Log.php
New file
0,0 → 1,195
<?php
//declare(encoding='UTF-8');
/**
* Classe permettant de logger des messages dans les fichier situés dans le dossier de log
*
* PHP Version 5
*
* @category PHP
* @package Framework
* @author aurelien <aurelien@tela-botanica.org>
* @copyright 2009 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @version SVN: <svn_id>
* @link /doc/framework/
*/
 
class Log {
 
/**
* Tableau associatif stockant les descripteurs de fichiers
*/
private static $fichiersLog = array();
 
/**
* Chemin de base du dossier log de l'application
*/
private static $cheminLogs = '';
 
/**
* Booleen indiquant si l'on peut correctement écrire dans les fichiers de logs
*/
private static $droitLogger = true;
 
/**
* Zone horaire (pour éviter des avertissements dans les dates)
*/
private static $timeZone = '';
 
/**
* Taille maximum d'un fichier de log avant que celui ne soit archivé (en octets)
*/
private static $tailleMax = 10000;
 
/**
* séparateur de chemin
*/
private static $sd = DIRECTORY_SEPARATOR;
 
/**
* Extension des fichiers de log
*/
private static $ext = '.log';
 
/**
* La classe registre se contient elle-même, (pour le pattern singleton)
*/
private static $log;
 
/**
* Constructeur par défaut, privé, car on accède à la classe par le getInstance
*/
private function __construct() {
 
self::$sd = $sd;
// gestion de la timezone pour éviter des erreurs
if(function_exists("date_default_timezone_set") and function_exists("date_default_timezone_get")) {
date_default_timezone_set(self::$timeZone);
}
 
if(!is_dir(self::$cheminLogs) || !is_writable(self::$cheminLogs)) {
self::desactiverEcriture();
}
}
 
public static function setCheminLog($nouveauCheminLogs) {
self::$cheminLogs = $nouveauCheminLogs;
}
 
public static function getCheminLog() {
return self::$cheminLogs;
}
 
public static function setTimeZone($NouvelleTimeZone) {
self::$timeZone = $NouvelleTimeZone;
}
 
public static function setTailleMax($nouvelleTailleMax) {
self::$tailleMax = $nouvelleTailleMax;
}
 
/**
* Fonction qui renvoie l'instance de classe en assurant son unicité, c'est l'unique méthode qui doit être
* utilisée pour récupérer l'objet Registre
* @return Log le gestionnaire de log en cours
*/
public static function getInstance() {
if (self::$log instanceof Log) {
return self::$log;
}
self::$log = new Log();
return self::$log;
}
 
/**
* Ajoute une entrée au log spécifié par le paramètre $nomFichier
* @param string $nomFichier le nom du fichier dans lequel écrire
*/
public static function ajouterEntree($nomFichier,$entree,$mode='a+') {
if(self::$droitLogger) {
$date = "\n"."\n".date('d m Y H:i')."\n" ;
 
// si le fichier est déjà dans le tableau et qu'on peut y écrire
if(self::verifierOuvrirFichier($nomFichier,$mode)) {
// on y écrit le message de log
fwrite(self::$fichiersLog[$nomFichier],$date.$entree);
// on vérifie si le fichier ne dépasse pas la taille maximale
self::verifierTailleFichierOuArchiver($nomFichier);
} else {
// sinon on interdit l'écriture
self::desactiverEcriture($nomFichier);
}
}
}
 
/**
* Vide un fichier log indiqué
* @param string $nomFichier le nom du fichier à vider
*/
public static function viderLog($nomFichier) {
ajouterEntree($nomFichier,'','w');
}
 
/**
* Vérifie la présence d'un fichier dans le tableau, ses droits d'écriture,
* l'ouvre si nécessaire
* @param string $nomFichier le nom du fichier dont on doit vérifier la présence
* @return boolean true si le fichier est ouvert ou maintenant accessible, false sinon
*/
public static function verifierOuvrirFichier($nomFichier,$mode) {
// le fichier est il déjà ouvert ?
if(in_array($nomFichier,self::$fichiersLog)) {
// si oui peut on y écrire ?
if(is_writable(self::$cheminLogs.$nomFichier.self::$ext)) {
// si oui on renvoie le descripteur
return true;
}
return false;
} else {
// sinon on l'ouvre
$fp = @fopen(self::$cheminLogs.$nomFichier.self::$ext,$mode);
// si l'ouverture a réussi et si le fichier a les droits d'écriture
if($fp && is_writable(self::$cheminLogs.$nomFichier.self::$ext)) {
// si oui on renvoie le descripteur qu'on ajoute au tableau
self::$fichiersLog[$nomFichier] = $fp;
return true;
}
return false;
}
}
 
/**
* Vérifie la taille d'un fichier donné et si celle ci est trop importante
* archive le fichier de log
* @param string $nomFichier nom du fichier à vérifier
*/
private static function verifierTailleFichierOuArchiver($nomFichier) {
if(filesize(self::$cheminLogs.$nomFichier.self::$ext) > self::$tailleMax) {
rename(self::$cheminLogs.$nomFichier.self::$ext,self::$cheminLogs.$nomFichier.date('d_m_Y_H:i').self::$ext);
self::ajouterEntree($nomFichier,'');
}
}
 
/**
* Désactive l'écriture du log et envoie un message au gestionnaire d'erreurs
* @param string $nomFichier le nom du fichier qui a causé l'erreur
*/
private static function desactiverEcriture($nomFichier = '') {
self::$droitLogger = false;
if($nomFichier != '') {
$fichierDossier = 'fichier '.$nomFichier ;
} else {
$fichierDossier = 'dossier des logs';
}
}
 
/**
* destructeur de classe, ferme les descripteurs ouverts
*/
public function __destruct() {
foreach(self::$fichiersLog as $nomFichier => $fp) {
fclose($fp);
}
}
}
?>
/trunk/applications/jrest/lib/DB.php
New file
0,0 → 1,1114
<?php
/* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 2.02 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/2_02.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Stig Bakken <ssb@php.net> |
// | Tomas V.V.Cox <cox@idecnet.com> |
// | Maintainer: Daniel Convissor <danielc@php.net> |
// +----------------------------------------------------------------------+
//
// $Id$
//
// Database independent query interface.
 
 
require_once 'PEAR.php';
 
// {{{ constants
// {{{ error codes
 
/*
* The method mapErrorCode in each DB_dbtype implementation maps
* native error codes to one of these.
*
* If you add an error code here, make sure you also add a textual
* version of it in DB::errorMessage().
*/
define('DB_OK', 1);
define('DB_ERROR', -1);
define('DB_ERROR_SYNTAX', -2);
define('DB_ERROR_CONSTRAINT', -3);
define('DB_ERROR_NOT_FOUND', -4);
define('DB_ERROR_ALREADY_EXISTS', -5);
define('DB_ERROR_UNSUPPORTED', -6);
define('DB_ERROR_MISMATCH', -7);
define('DB_ERROR_INVALID', -8);
define('DB_ERROR_NOT_CAPABLE', -9);
define('DB_ERROR_TRUNCATED', -10);
define('DB_ERROR_INVALID_NUMBER', -11);
define('DB_ERROR_INVALID_DATE', -12);
define('DB_ERROR_DIVZERO', -13);
define('DB_ERROR_NODBSELECTED', -14);
define('DB_ERROR_CANNOT_CREATE', -15);
define('DB_ERROR_CANNOT_DELETE', -16);
define('DB_ERROR_CANNOT_DROP', -17);
define('DB_ERROR_NOSUCHTABLE', -18);
define('DB_ERROR_NOSUCHFIELD', -19);
define('DB_ERROR_NEED_MORE_DATA', -20);
define('DB_ERROR_NOT_LOCKED', -21);
define('DB_ERROR_VALUE_COUNT_ON_ROW', -22);
define('DB_ERROR_INVALID_DSN', -23);
define('DB_ERROR_CONNECT_FAILED', -24);
define('DB_ERROR_EXTENSION_NOT_FOUND',-25);
define('DB_ERROR_ACCESS_VIOLATION', -26);
define('DB_ERROR_NOSUCHDB', -27);
define('DB_ERROR_CONSTRAINT_NOT_NULL',-29);
 
 
// }}}
// {{{ prepared statement-related
 
 
/*
* These constants are used when storing information about prepared
* statements (using the "prepare" method in DB_dbtype).
*
* The prepare/execute model in DB is mostly borrowed from the ODBC
* extension, in a query the "?" character means a scalar parameter.
* There are two extensions though, a "&" character means an opaque
* parameter. An opaque parameter is simply a file name, the real
* data are in that file (useful for putting uploaded files into your
* database and such). The "!" char means a parameter that must be
* left as it is.
* They modify the quote behavoir:
* DB_PARAM_SCALAR (?) => 'original string quoted'
* DB_PARAM_OPAQUE (&) => 'string from file quoted'
* DB_PARAM_MISC (!) => original string
*/
define('DB_PARAM_SCALAR', 1);
define('DB_PARAM_OPAQUE', 2);
define('DB_PARAM_MISC', 3);
 
 
// }}}
// {{{ binary data-related
 
 
/*
* These constants define different ways of returning binary data
* from queries. Again, this model has been borrowed from the ODBC
* extension.
*
* DB_BINMODE_PASSTHRU sends the data directly through to the browser
* when data is fetched from the database.
* DB_BINMODE_RETURN lets you return data as usual.
* DB_BINMODE_CONVERT returns data as well, only it is converted to
* hex format, for example the string "123" would become "313233".
*/
define('DB_BINMODE_PASSTHRU', 1);
define('DB_BINMODE_RETURN', 2);
define('DB_BINMODE_CONVERT', 3);
 
 
// }}}
// {{{ fetch modes
 
 
/**
* This is a special constant that tells DB the user hasn't specified
* any particular get mode, so the default should be used.
*/
define('DB_FETCHMODE_DEFAULT', 0);
 
/**
* Column data indexed by numbers, ordered from 0 and up
*/
define('DB_FETCHMODE_ORDERED', 1);
 
/**
* Column data indexed by column names
*/
define('DB_FETCHMODE_ASSOC', 2);
 
/**
* Column data as object properties
*/
define('DB_FETCHMODE_OBJECT', 3);
 
/**
* For multi-dimensional results: normally the first level of arrays
* is the row number, and the second level indexed by column number or name.
* DB_FETCHMODE_FLIPPED switches this order, so the first level of arrays
* is the column name, and the second level the row number.
*/
define('DB_FETCHMODE_FLIPPED', 4);
 
/* for compatibility */
define('DB_GETMODE_ORDERED', DB_FETCHMODE_ORDERED);
define('DB_GETMODE_ASSOC', DB_FETCHMODE_ASSOC);
define('DB_GETMODE_FLIPPED', DB_FETCHMODE_FLIPPED);
 
 
// }}}
// {{{ tableInfo() && autoPrepare()-related
 
 
/**
* these are constants for the tableInfo-function
* they are bitwised or'ed. so if there are more constants to be defined
* in the future, adjust DB_TABLEINFO_FULL accordingly
*/
define('DB_TABLEINFO_ORDER', 1);
define('DB_TABLEINFO_ORDERTABLE', 2);
define('DB_TABLEINFO_FULL', 3);
 
/*
* Used by autoPrepare()
*/
define('DB_AUTOQUERY_INSERT', 1);
define('DB_AUTOQUERY_UPDATE', 2);
 
 
// }}}
// {{{ portability modes
 
 
/**
* Portability: turn off all portability features.
* @see DB_common::setOption()
*/
define('DB_PORTABILITY_NONE', 0);
 
/**
* Portability: convert names of tables and fields to lower case
* when using the get*(), fetch*() and tableInfo() methods.
* @see DB_common::setOption()
*/
define('DB_PORTABILITY_LOWERCASE', 1);
 
/**
* Portability: right trim the data output by get*() and fetch*().
* @see DB_common::setOption()
*/
define('DB_PORTABILITY_RTRIM', 2);
 
/**
* Portability: force reporting the number of rows deleted.
* @see DB_common::setOption()
*/
define('DB_PORTABILITY_DELETE_COUNT', 4);
 
/**
* Portability: enable hack that makes numRows() work in Oracle.
* @see DB_common::setOption()
*/
define('DB_PORTABILITY_NUMROWS', 8);
 
/**
* Portability: makes certain error messages in certain drivers compatible
* with those from other DBMS's.
*
* + mysql, mysqli: change unique/primary key constraints
* DB_ERROR_ALREADY_EXISTS -> DB_ERROR_CONSTRAINT
*
* + odbc(access): MS's ODBC driver reports 'no such field' as code
* 07001, which means 'too few parameters.' When this option is on
* that code gets mapped to DB_ERROR_NOSUCHFIELD.
*
* @see DB_common::setOption()
*/
define('DB_PORTABILITY_ERRORS', 16);
 
/**
* Portability: convert null values to empty strings in data output by
* get*() and fetch*().
* @see DB_common::setOption()
*/
define('DB_PORTABILITY_NULL_TO_EMPTY', 32);
 
/**
* Portability: turn on all portability features.
* @see DB_common::setOption()
*/
define('DB_PORTABILITY_ALL', 63);
 
// }}}
 
 
// }}}
// {{{ class DB
 
/**
* The main "DB" class is simply a container class with some static
* methods for creating DB objects as well as some utility functions
* common to all parts of DB.
*
* The object model of DB is as follows (indentation means inheritance):
*
* DB The main DB class. This is simply a utility class
* with some "static" methods for creating DB objects as
* well as common utility functions for other DB classes.
*
* DB_common The base for each DB implementation. Provides default
* | implementations (in OO lingo virtual methods) for
* | the actual DB implementations as well as a bunch of
* | query utility functions.
* |
* +-DB_mysql The DB implementation for MySQL. Inherits DB_common.
* When calling DB::factory or DB::connect for MySQL
* connections, the object returned is an instance of this
* class.
*
* @package DB
* @author Stig Bakken <ssb@php.net>
* @author Tomas V.V.Cox <cox@idecnet.com>
* @since PHP 4.0
* @version $Id$
* @category Database
*/
class DB
{
// {{{ &factory()
 
/**
* Create a new DB object for the specified database type.
*
* Allows creation of a DB_<driver> object from which the object's
* methods can be utilized without actually connecting to a database.
*
* @param string $type database type, for example "mysql"
* @param array $options associative array of option names and values
*
* @return object a new DB object. On error, an error object.
*
* @see DB_common::setOption()
* @access public
*/
function &factory($type, $options = false)
{
if (!is_array($options)) {
$options = array('persistent' => $options);
}
 
if (isset($options['debug']) && $options['debug'] >= 2) {
// expose php errors with sufficient debug level
include_once "DB/{$type}.php";
} else {
@include_once "DB/{$type}.php";
}
 
$classname = "DB_${type}";
 
if (!class_exists($classname)) {
$tmp = PEAR::raiseError(null, DB_ERROR_NOT_FOUND, null, null,
"Unable to include the DB/{$type}.php file",
'DB_Error', true);
return $tmp;
}
 
@$obj = new $classname;
 
foreach ($options as $option => $value) {
$test = $obj->setOption($option, $value);
if (DB::isError($test)) {
return $test;
}
}
 
return $obj;
}
 
// }}}
// {{{ &connect()
 
/**
* Create a new DB object and connect to the specified database.
*
* Example 1.
* <code> <?php
* require_once 'DB.php';
*
* $dsn = 'mysql://user:password@host/database'
* $options = array(
* 'debug' => 2,
* 'portability' => DB_PORTABILITY_ALL,
* );
*
* $dbh =& DB::connect($dsn, $options);
* if (DB::isError($dbh)) {
* die($dbh->getMessage());
* }
* ?></code>
*
* @param mixed $dsn string "data source name" or an array in the
* format returned by DB::parseDSN()
*
* @param array $options an associative array of option names and
* their values
*
* @return object a newly created DB connection object, or a DB
* error object on error
*
* @see DB::parseDSN(), DB_common::setOption(), DB::isError()
* @access public
*/
function &connect($dsn, $options = array())
{
$dsninfo = DB::parseDSN($dsn);
$type = $dsninfo['phptype'];
 
if (!is_array($options)) {
/*
* For backwards compatibility. $options used to be boolean,
* indicating whether the connection should be persistent.
*/
$options = array('persistent' => $options);
}
 
if (isset($options['debug']) && $options['debug'] >= 2) {
// expose php errors with sufficient debug level
include_once "DB/${type}.php";
} else {
@include_once "DB/${type}.php";
}
 
$classname = "DB_${type}";
if (!class_exists($classname)) {
$tmp = PEAR::raiseError(null, DB_ERROR_NOT_FOUND, null, null,
"Unable to include the DB/{$type}.php file for `$dsn'",
'DB_Error', true);
return $tmp;
}
 
@$obj = new $classname;
 
foreach ($options as $option => $value) {
$test = $obj->setOption($option, $value);
if (DB::isError($test)) {
return $test;
}
}
 
$err = $obj->connect($dsninfo, $obj->getOption('persistent'));
if (DB::isError($err)) {
$err->addUserInfo($dsn);
return $err;
}
 
return $obj;
}
 
// }}}
// {{{ apiVersion()
 
/**
* Return the DB API version
*
* @return int the DB API version number
*
* @access public
*/
function apiVersion()
{
return 2;
}
 
// }}}
// {{{ isError()
 
/**
* Tell whether a result code from a DB method is an error
*
* @param int $value result code
*
* @return bool whether $value is an error
*
* @access public
*/
function isError($value)
{
return is_a($value, 'DB_Error');
}
 
// }}}
// {{{ isConnection()
 
/**
* Tell whether a value is a DB connection
*
* @param mixed $value value to test
*
* @return bool whether $value is a DB connection
*
* @access public
*/
function isConnection($value)
{
return (is_object($value) &&
is_subclass_of($value, 'db_common') &&
method_exists($value, 'simpleQuery'));
}
 
// }}}
// {{{ isManip()
 
/**
* Tell whether a query is a data manipulation query (insert,
* update or delete) or a data definition query (create, drop,
* alter, grant, revoke).
*
* @access public
*
* @param string $query the query
*
* @return boolean whether $query is a data manipulation query
*/
function isManip($query)
{
$manips = 'INSERT|UPDATE|DELETE|LOAD DATA|'.'REPLACE|CREATE|DROP|'.
'ALTER|GRANT|REVOKE|'.'LOCK|UNLOCK';
if (preg_match('/^\s*"?('.$manips.')\s+/i', $query)) {
return true;
}
return false;
}
 
// }}}
// {{{ errorMessage()
 
/**
* Return a textual error message for a DB error code
*
* @param integer $value error code
*
* @return string error message, or false if the error code was
* not recognized
*/
function errorMessage($value)
{
static $errorMessages;
if (!isset($errorMessages)) {
$errorMessages = array(
DB_ERROR => 'unknown error',
DB_ERROR_ALREADY_EXISTS => 'already exists',
DB_ERROR_CANNOT_CREATE => 'can not create',
DB_ERROR_CANNOT_DELETE => 'can not delete',
DB_ERROR_CANNOT_DROP => 'can not drop',
DB_ERROR_CONSTRAINT => 'constraint violation',
DB_ERROR_CONSTRAINT_NOT_NULL=> 'null value violates not-null constraint',
DB_ERROR_DIVZERO => 'division by zero',
DB_ERROR_INVALID => 'invalid',
DB_ERROR_INVALID_DATE => 'invalid date or time',
DB_ERROR_INVALID_NUMBER => 'invalid number',
DB_ERROR_MISMATCH => 'mismatch',
DB_ERROR_NODBSELECTED => 'no database selected',
DB_ERROR_NOSUCHFIELD => 'no such field',
DB_ERROR_NOSUCHTABLE => 'no such table',
DB_ERROR_NOT_CAPABLE => 'DB backend not capable',
DB_ERROR_NOT_FOUND => 'not found',
DB_ERROR_NOT_LOCKED => 'not locked',
DB_ERROR_SYNTAX => 'syntax error',
DB_ERROR_UNSUPPORTED => 'not supported',
DB_ERROR_VALUE_COUNT_ON_ROW => 'value count on row',
DB_ERROR_INVALID_DSN => 'invalid DSN',
DB_ERROR_CONNECT_FAILED => 'connect failed',
DB_OK => 'no error',
DB_ERROR_NEED_MORE_DATA => 'insufficient data supplied',
DB_ERROR_EXTENSION_NOT_FOUND=> 'extension not found',
DB_ERROR_NOSUCHDB => 'no such database',
DB_ERROR_ACCESS_VIOLATION => 'insufficient permissions',
DB_ERROR_TRUNCATED => 'truncated'
);
}
 
if (DB::isError($value)) {
$value = $value->getCode();
}
 
return isset($errorMessages[$value]) ? $errorMessages[$value] : $errorMessages[DB_ERROR];
}
 
// }}}
// {{{ parseDSN()
 
/**
* Parse a data source name.
*
* Additional keys can be added by appending a URI query string to the
* end of the DSN.
*
* The format of the supplied DSN is in its fullest form:
* <code>
* phptype(dbsyntax)://username:password@protocol+hostspec/database?option=8&another=true
* </code>
*
* Most variations are allowed:
* <code>
* phptype://username:password@protocol+hostspec:110//usr/db_file.db?mode=0644
* phptype://username:password@hostspec/database_name
* phptype://username:password@hostspec
* phptype://username@hostspec
* phptype://hostspec/database
* phptype://hostspec
* phptype(dbsyntax)
* phptype
* </code>
*
* @param string $dsn Data Source Name to be parsed
*
* @return array an associative array with the following keys:
* + phptype: Database backend used in PHP (mysql, odbc etc.)
* + dbsyntax: Database used with regards to SQL syntax etc.
* + protocol: Communication protocol to use (tcp, unix etc.)
* + hostspec: Host specification (hostname[:port])
* + database: Database to use on the DBMS server
* + username: User name for login
* + password: Password for login
*
* @author Tomas V.V.Cox <cox@idecnet.com>
*/
function parseDSN($dsn)
{
$parsed = array(
'phptype' => false,
'dbsyntax' => false,
'username' => false,
'password' => false,
'protocol' => false,
'hostspec' => false,
'port' => false,
'socket' => false,
'database' => false,
);
 
if (is_array($dsn)) {
$dsn = array_merge($parsed, $dsn);
if (!$dsn['dbsyntax']) {
$dsn['dbsyntax'] = $dsn['phptype'];
}
return $dsn;
}
 
// Find phptype and dbsyntax
if (($pos = strpos($dsn, '://')) !== false) {
$str = substr($dsn, 0, $pos);
$dsn = substr($dsn, $pos + 3);
} else {
$str = $dsn;
$dsn = null;
}
 
// Get phptype and dbsyntax
// $str => phptype(dbsyntax)
if (preg_match('|^(.+?)\((.*?)\)$|', $str, $arr)) {
$parsed['phptype'] = $arr[1];
$parsed['dbsyntax'] = !$arr[2] ? $arr[1] : $arr[2];
} else {
$parsed['phptype'] = $str;
$parsed['dbsyntax'] = $str;
}
 
if (!count($dsn)) {
return $parsed;
}
 
// Get (if found): username and password
// $dsn => username:password@protocol+hostspec/database
if (($at = strrpos($dsn,'@')) !== false) {
$str = substr($dsn, 0, $at);
$dsn = substr($dsn, $at + 1);
if (($pos = strpos($str, ':')) !== false) {
$parsed['username'] = rawurldecode(substr($str, 0, $pos));
$parsed['password'] = rawurldecode(substr($str, $pos + 1));
} else {
$parsed['username'] = rawurldecode($str);
}
}
 
// Find protocol and hostspec
 
// $dsn => proto(proto_opts)/database
if (preg_match('|^([^(]+)\((.*?)\)/?(.*?)$|', $dsn, $match)) {
$proto = $match[1];
$proto_opts = $match[2] ? $match[2] : false;
$dsn = $match[3];
 
// $dsn => protocol+hostspec/database (old format)
} else {
if (strpos($dsn, '+') !== false) {
list($proto, $dsn) = explode('+', $dsn, 2);
}
if (strpos($dsn, '/') !== false) {
list($proto_opts, $dsn) = explode('/', $dsn, 2);
} else {
$proto_opts = $dsn;
$dsn = null;
}
}
 
// process the different protocol options
$parsed['protocol'] = (!empty($proto)) ? $proto : 'tcp';
$proto_opts = rawurldecode($proto_opts);
if ($parsed['protocol'] == 'tcp') {
if (strpos($proto_opts, ':') !== false) {
list($parsed['hostspec'], $parsed['port']) = explode(':', $proto_opts);
} else {
$parsed['hostspec'] = $proto_opts;
}
} elseif ($parsed['protocol'] == 'unix') {
$parsed['socket'] = $proto_opts;
}
 
// Get dabase if any
// $dsn => database
if ($dsn) {
// /database
if (($pos = strpos($dsn, '?')) === false) {
$parsed['database'] = $dsn;
// /database?param1=value1&param2=value2
} else {
$parsed['database'] = substr($dsn, 0, $pos);
$dsn = substr($dsn, $pos + 1);
if (strpos($dsn, '&') !== false) {
$opts = explode('&', $dsn);
} else { // database?param1=value1
$opts = array($dsn);
}
foreach ($opts as $opt) {
list($key, $value) = explode('=', $opt);
if (!isset($parsed[$key])) {
// don't allow params overwrite
$parsed[$key] = rawurldecode($value);
}
}
}
}
 
return $parsed;
}
 
// }}}
// {{{ assertExtension()
 
/**
* Load a PHP database extension if it is not loaded already.
*
* @access public
*
* @param string $name the base name of the extension (without the .so or
* .dll suffix)
*
* @return boolean true if the extension was already or successfully
* loaded, false if it could not be loaded
*/
function assertExtension($name)
{
if (!extension_loaded($name)) {
$dlext = OS_WINDOWS ? '.dll' : '.so';
$dlprefix = OS_WINDOWS ? 'php_' : '';
@dl($dlprefix . $name . $dlext);
return extension_loaded($name);
}
return true;
}
// }}}
}
 
// }}}
// {{{ class DB_Error
 
/**
* DB_Error implements a class for reporting portable database error
* messages.
*
* @package DB
* @author Stig Bakken <ssb@php.net>
*/
class DB_Error extends PEAR_Error
{
// {{{ constructor
 
/**
* DB_Error constructor.
*
* @param mixed $code DB error code, or string with error message.
* @param integer $mode what "error mode" to operate in
* @param integer $level what error level to use for $mode & PEAR_ERROR_TRIGGER
* @param mixed $debuginfo additional debug info, such as the last query
*
* @access public
*
* @see PEAR_Error
*/
function DB_Error($code = DB_ERROR, $mode = PEAR_ERROR_RETURN,
$level = E_USER_NOTICE, $debuginfo = null)
{
if (is_int($code)) {
$this->PEAR_Error('DB Error: ' . DB::errorMessage($code), $code, $mode, $level, $debuginfo);
} else {
$this->PEAR_Error("DB Error: $code", DB_ERROR, $mode, $level, $debuginfo);
}
}
// }}}
}
 
// }}}
// {{{ class DB_result
 
/**
* This class implements a wrapper for a DB result set.
* A new instance of this class will be returned by the DB implementation
* after processing a query that returns data.
*
* @package DB
* @author Stig Bakken <ssb@php.net>
*/
class DB_result
{
// {{{ properties
 
var $dbh;
var $result;
var $row_counter = null;
 
/**
* for limit queries, the row to start fetching
* @var integer
*/
var $limit_from = null;
 
/**
* for limit queries, the number of rows to fetch
* @var integer
*/
var $limit_count = null;
 
// }}}
// {{{ constructor
 
/**
* DB_result constructor.
* @param resource &$dbh DB object reference
* @param resource $result result resource id
* @param array $options assoc array with optional result options
*/
function DB_result(&$dbh, $result, $options = array())
{
$this->dbh = &$dbh;
$this->result = $result;
foreach ($options as $key => $value) {
$this->setOption($key, $value);
}
$this->limit_type = $dbh->features['limit'];
$this->autofree = $dbh->options['autofree'];
$this->fetchmode = $dbh->fetchmode;
$this->fetchmode_object_class = $dbh->fetchmode_object_class;
}
 
function setOption($key, $value = null)
{
switch ($key) {
case 'limit_from':
$this->limit_from = $value; break;
case 'limit_count':
$this->limit_count = $value; break;
}
}
 
// }}}
// {{{ fetchRow()
 
/**
* Fetch a row of data and return it by reference into an array.
*
* The type of array returned can be controlled either by setting this
* method's <var>$fetchmode</var> parameter or by changing the default
* fetch mode setFetchMode() before calling this method.
*
* There are two options for standardizing the information returned
* from databases, ensuring their values are consistent when changing
* DBMS's. These portability options can be turned on when creating a
* new DB object or by using setOption().
*
* + <samp>DB_PORTABILITY_LOWERCASE</samp>
* convert names of fields to lower case
*
* + <samp>DB_PORTABILITY_RTRIM</samp>
* right trim the data
*
* @param int $fetchmode how the resulting array should be indexed
* @param int $rownum the row number to fetch
*
* @return array a row of data, null on no more rows or PEAR_Error
* object on error
*
* @see DB_common::setOption(), DB_common::setFetchMode()
* @access public
*/
function &fetchRow($fetchmode = DB_FETCHMODE_DEFAULT, $rownum=null)
{
if ($fetchmode === DB_FETCHMODE_DEFAULT) {
$fetchmode = $this->fetchmode;
}
if ($fetchmode === DB_FETCHMODE_OBJECT) {
$fetchmode = DB_FETCHMODE_ASSOC;
$object_class = $this->fetchmode_object_class;
}
if ($this->limit_from !== null) {
if ($this->row_counter === null) {
$this->row_counter = $this->limit_from;
// Skip rows
if ($this->limit_type == false) {
$i = 0;
while ($i++ < $this->limit_from) {
$this->dbh->fetchInto($this->result, $arr, $fetchmode);
}
}
}
if ($this->row_counter >= (
$this->limit_from + $this->limit_count))
{
if ($this->autofree) {
$this->free();
}
$tmp = null;
return $tmp;
}
if ($this->limit_type == 'emulate') {
$rownum = $this->row_counter;
}
$this->row_counter++;
}
$res = $this->dbh->fetchInto($this->result, $arr, $fetchmode, $rownum);
if ($res === DB_OK) {
if (isset($object_class)) {
// default mode specified in DB_common::fetchmode_object_class property
if ($object_class == 'stdClass') {
$arr = (object) $arr;
} else {
$arr = new $object_class($arr);
}
}
return $arr;
}
if ($res == null && $this->autofree) {
$this->free();
}
return $res;
}
 
// }}}
// {{{ fetchInto()
 
/**
* Fetch a row of data into an array which is passed by reference.
*
* The type of array returned can be controlled either by setting this
* method's <var>$fetchmode</var> parameter or by changing the default
* fetch mode setFetchMode() before calling this method.
*
* There are two options for standardizing the information returned
* from databases, ensuring their values are consistent when changing
* DBMS's. These portability options can be turned on when creating a
* new DB object or by using setOption().
*
* + <samp>DB_PORTABILITY_LOWERCASE</samp>
* convert names of fields to lower case
*
* + <samp>DB_PORTABILITY_RTRIM</samp>
* right trim the data
*
* @param array &$arr (reference) array where data from the row
* should be placed
* @param int $fetchmode how the resulting array should be indexed
* @param int $rownum the row number to fetch
*
* @return mixed DB_OK on success, null on no more rows or
* a DB_Error object on error
*
* @see DB_common::setOption(), DB_common::setFetchMode()
* @access public
*/
function fetchInto(&$arr, $fetchmode = DB_FETCHMODE_DEFAULT, $rownum=null)
{
if ($fetchmode === DB_FETCHMODE_DEFAULT) {
$fetchmode = $this->fetchmode;
}
if ($fetchmode === DB_FETCHMODE_OBJECT) {
$fetchmode = DB_FETCHMODE_ASSOC;
$object_class = $this->fetchmode_object_class;
}
if ($this->limit_from !== null) {
if ($this->row_counter === null) {
$this->row_counter = $this->limit_from;
// Skip rows
if ($this->limit_type == false) {
$i = 0;
while ($i++ < $this->limit_from) {
$this->dbh->fetchInto($this->result, $arr, $fetchmode);
}
}
}
if ($this->row_counter >= (
$this->limit_from + $this->limit_count))
{
if ($this->autofree) {
$this->free();
}
return null;
}
if ($this->limit_type == 'emulate') {
$rownum = $this->row_counter;
}
 
$this->row_counter++;
}
$res = $this->dbh->fetchInto($this->result, $arr, $fetchmode, $rownum);
if ($res === DB_OK) {
if (isset($object_class)) {
// default mode specified in DB_common::fetchmode_object_class property
if ($object_class == 'stdClass') {
$arr = (object) $arr;
} else {
$arr = new $object_class($arr);
}
}
return DB_OK;
}
if ($res == null && $this->autofree) {
$this->free();
}
return $res;
}
 
// }}}
// {{{ numCols()
 
/**
* Get the the number of columns in a result set.
*
* @return int the number of columns, or a DB error
*
* @access public
*/
function numCols()
{
return $this->dbh->numCols($this->result);
}
 
// }}}
// {{{ numRows()
 
/**
* Get the number of rows in a result set.
*
* @return int the number of rows, or a DB error
*
* @access public
*/
function numRows()
{
return $this->dbh->numRows($this->result);
}
 
// }}}
// {{{ nextResult()
 
/**
* Get the next result if a batch of queries was executed.
*
* @return bool true if a new result is available or false if not.
*
* @access public
*/
function nextResult()
{
return $this->dbh->nextResult($this->result);
}
 
// }}}
// {{{ free()
 
/**
* Frees the resources allocated for this result set.
* @return int error code
*
* @access public
*/
function free()
{
$err = $this->dbh->freeResult($this->result);
if (DB::isError($err)) {
return $err;
}
$this->result = false;
return true;
}
 
// }}}
// {{{ tableInfo()
 
/**
* @deprecated
* @internal
* @see DB_common::tableInfo()
*/
function tableInfo($mode = null)
{
if (is_string($mode)) {
return $this->dbh->raiseError(DB_ERROR_NEED_MORE_DATA);
}
return $this->dbh->tableInfo($this, $mode);
}
 
// }}}
// {{{ getRowCounter()
 
/**
* returns the actual row number
* @return integer
*/
function getRowCounter()
{
return $this->row_counter;
}
// }}}
}
 
// }}}
// {{{ class DB_row
 
/**
* Pear DB Row Object
* @see DB_common::setFetchMode()
*/
class DB_row
{
// {{{ constructor
 
/**
* constructor
*
* @param resource row data as array
*/
function DB_row(&$arr)
{
foreach ($arr as $key => $value) {
$this->$key = &$arr[$key];
}
}
 
// }}}
}
 
// }}}
 
/*
* Local variables:
* tab-width: 4
* c-basic-offset: 4
* End:
*/
 
?>
/trunk/applications/jrest/lib/PEAR.php
New file
0,0 → 1,971
<?php
//
// +----------------------------------------------------------------------+
// | PEAR, the PHP Extension and Application Repository |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 2.0 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available through the world-wide-web at the following url: |
// | http://www.php.net/license/3_0.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Authors: Sterling Hughes <sterling@php.net> |
// | Stig Bakken <ssb@php.net> |
// | Tomas V.V.Cox <cox@idecnet.com> |
// +----------------------------------------------------------------------+
//
// $Id$
//
 
define('PEAR_ERROR_RETURN', 1);
define('PEAR_ERROR_PRINT', 2);
define('PEAR_ERROR_TRIGGER', 4);
define('PEAR_ERROR_DIE', 8);
define('PEAR_ERROR_CALLBACK', 16);
define('PEAR_ERROR_EXCEPTION', 32);
define('PEAR_ZE2', (function_exists('version_compare') &&
version_compare(zend_version(), "2-dev", "ge")));
 
if (substr(PHP_OS, 0, 3) == 'WIN') {
define('OS_WINDOWS', true);
define('OS_UNIX', false);
define('PEAR_OS', 'Windows');
} else {
define('OS_WINDOWS', false);
define('OS_UNIX', true);
define('PEAR_OS', 'Unix'); // blatant assumption
}
 
// instant backwards compatibility
if (!defined('PATH_SEPARATOR')) {
if (OS_WINDOWS) {
define('PATH_SEPARATOR', ';');
} else {
define('PATH_SEPARATOR', ':');
}
}
 
$GLOBALS['_PEAR_default_error_mode'] = PEAR_ERROR_RETURN;
$GLOBALS['_PEAR_default_error_options'] = E_USER_NOTICE;
$GLOBALS['_PEAR_destructor_object_list'] = array();
$GLOBALS['_PEAR_shutdown_funcs'] = array();
$GLOBALS['_PEAR_error_handler_stack'] = array();
 
ini_set('track_errors', true);
 
/**
* Base class for other PEAR classes. Provides rudimentary
* emulation of destructors.
*
* If you want a destructor in your class, inherit PEAR and make a
* destructor method called _yourclassname (same name as the
* constructor, but with a "_" prefix). Also, in your constructor you
* have to call the PEAR constructor: $this->PEAR();.
* The destructor method will be called without parameters. Note that
* at in some SAPI implementations (such as Apache), any output during
* the request shutdown (in which destructors are called) seems to be
* discarded. If you need to get any debug information from your
* destructor, use error_log(), syslog() or something similar.
*
* IMPORTANT! To use the emulated destructors you need to create the
* objects by reference: $obj =& new PEAR_child;
*
* @since PHP 4.0.2
* @author Stig Bakken <ssb@php.net>
* @see http://pear.php.net/manual/
*/
class PEAR
{
// {{{ properties
 
/**
* Whether to enable internal debug messages.
*
* @var bool
* @access private
*/
var $_debug = false;
 
/**
* Default error mode for this object.
*
* @var int
* @access private
*/
var $_default_error_mode = null;
 
/**
* Default error options used for this object when error mode
* is PEAR_ERROR_TRIGGER.
*
* @var int
* @access private
*/
var $_default_error_options = null;
 
/**
* Default error handler (callback) for this object, if error mode is
* PEAR_ERROR_CALLBACK.
*
* @var string
* @access private
*/
var $_default_error_handler = '';
 
/**
* Which class to use for error objects.
*
* @var string
* @access private
*/
var $_error_class = 'PEAR_Error';
 
/**
* An array of expected errors.
*
* @var array
* @access private
*/
var $_expected_errors = array();
 
// }}}
 
// {{{ constructor
 
/**
* Constructor. Registers this object in
* $_PEAR_destructor_object_list for destructor emulation if a
* destructor object exists.
*
* @param string $error_class (optional) which class to use for
* error objects, defaults to PEAR_Error.
* @access public
* @return void
*/
function PEAR($error_class = null)
{
$classname = get_class($this);
if ($this->_debug) {
print "PEAR constructor called, class=$classname\n";
}
if ($error_class !== null) {
$this->_error_class = $error_class;
}
while ($classname) {
$destructor = "_$classname";
if (method_exists($this, $destructor)) {
global $_PEAR_destructor_object_list;
$_PEAR_destructor_object_list[] = &$this;
break;
} else {
$classname = get_parent_class($classname);
}
}
}
 
// }}}
// {{{ destructor
 
/**
* Destructor (the emulated type of...). Does nothing right now,
* but is included for forward compatibility, so subclass
* destructors should always call it.
*
* See the note in the class desciption about output from
* destructors.
*
* @access public
* @return void
*/
function _PEAR() {
if ($this->_debug) {
printf("PEAR destructor called, class=%s\n", get_class($this));
}
}
 
// }}}
// {{{ getStaticProperty()
 
/**
* If you have a class that's mostly/entirely static, and you need static
* properties, you can use this method to simulate them. Eg. in your method(s)
* do this: $myVar = &PEAR::getStaticProperty('myVar');
* You MUST use a reference, or they will not persist!
*
* @access public
* @param string $class The calling classname, to prevent clashes
* @param string $var The variable to retrieve.
* @return mixed A reference to the variable. If not set it will be
* auto initialised to NULL.
*/
function &getStaticProperty($class, $var)
{
static $properties;
return $properties[$class][$var];
}
 
// }}}
// {{{ registerShutdownFunc()
 
/**
* Use this function to register a shutdown method for static
* classes.
*
* @access public
* @param mixed $func The function name (or array of class/method) to call
* @param mixed $args The arguments to pass to the function
* @return void
*/
function registerShutdownFunc($func, $args = array())
{
$GLOBALS['_PEAR_shutdown_funcs'][] = array($func, $args);
}
 
// }}}
// {{{ isError()
 
/**
* Tell whether a value is a PEAR error.
*
* @param mixed $data the value to test
* @param int $code if $data is an error object, return true
* only if $code is a string and
* $obj->getMessage() == $code or
* $code is an integer and $obj->getCode() == $code
* @access public
* @return bool true if parameter is an error
*/
 
function isError($data, $code = null)
{
if (is_a($data, 'PEAR_Error')) {
if (is_null($code)) {
return true;
} elseif (is_string($code)) {
return $data->getMessage() == $code;
} else {
return $data->getCode() == $code;
}
}
return false;
}
 
// }}}
// {{{ setErrorHandling()
 
/**
* Sets how errors generated by this object should be handled.
* Can be invoked both in objects and statically. If called
* statically, setErrorHandling sets the default behaviour for all
* PEAR objects. If called in an object, setErrorHandling sets
* the default behaviour for that object.
*
* @param int $mode
* One of PEAR_ERROR_RETURN, PEAR_ERROR_PRINT,
* PEAR_ERROR_TRIGGER, PEAR_ERROR_DIE,
* PEAR_ERROR_CALLBACK or PEAR_ERROR_EXCEPTION.
*
* @param mixed $options
* When $mode is PEAR_ERROR_TRIGGER, this is the error level (one
* of E_USER_NOTICE, E_USER_WARNING or E_USER_ERROR).
*
* When $mode is PEAR_ERROR_CALLBACK, this parameter is expected
* to be the callback function or method. A callback
* function is a string with the name of the function, a
* callback method is an array of two elements: the element
* at index 0 is the object, and the element at index 1 is
* the name of the method to call in the object.
*
* When $mode is PEAR_ERROR_PRINT or PEAR_ERROR_DIE, this is
* a printf format string used when printing the error
* message.
*
* @access public
* @return void
* @see PEAR_ERROR_RETURN
* @see PEAR_ERROR_PRINT
* @see PEAR_ERROR_TRIGGER
* @see PEAR_ERROR_DIE
* @see PEAR_ERROR_CALLBACK
* @see PEAR_ERROR_EXCEPTION
*
* @since PHP 4.0.5
*/
 
function setErrorHandling($mode = null, $options = null)
{
if (isset($this) && is_a($this, 'PEAR')) {
$setmode = &$this->_default_error_mode;
$setoptions = &$this->_default_error_options;
} else {
$setmode = &$GLOBALS['_PEAR_default_error_mode'];
$setoptions = &$GLOBALS['_PEAR_default_error_options'];
}
 
switch ($mode) {
case PEAR_ERROR_RETURN:
case PEAR_ERROR_PRINT:
case PEAR_ERROR_TRIGGER:
case PEAR_ERROR_DIE:
case PEAR_ERROR_EXCEPTION:
case null:
$setmode = $mode;
$setoptions = $options;
break;
 
case PEAR_ERROR_CALLBACK:
$setmode = $mode;
// class/object method callback
if (is_callable($options)) {
$setoptions = $options;
} else {
trigger_error("invalid error callback", E_USER_WARNING);
}
break;
 
default:
trigger_error("invalid error mode", E_USER_WARNING);
break;
}
}
 
// }}}
// {{{ expectError()
 
/**
* This method is used to tell which errors you expect to get.
* Expected errors are always returned with error mode
* PEAR_ERROR_RETURN. Expected error codes are stored in a stack,
* and this method pushes a new element onto it. The list of
* expected errors are in effect until they are popped off the
* stack with the popExpect() method.
*
* Note that this method can not be called statically
*
* @param mixed $code a single error code or an array of error codes to expect
*
* @return int the new depth of the "expected errors" stack
* @access public
*/
function expectError($code = '*')
{
if (is_array($code)) {
array_push($this->_expected_errors, $code);
} else {
array_push($this->_expected_errors, array($code));
}
return sizeof($this->_expected_errors);
}
 
// }}}
// {{{ popExpect()
 
/**
* This method pops one element off the expected error codes
* stack.
*
* @return array the list of error codes that were popped
*/
function popExpect()
{
return array_pop($this->_expected_errors);
}
 
// }}}
// {{{ _checkDelExpect()
 
/**
* This method checks unsets an error code if available
*
* @param mixed error code
* @return bool true if the error code was unset, false otherwise
* @access private
* @since PHP 4.3.0
*/
function _checkDelExpect($error_code)
{
$deleted = false;
 
foreach ($this->_expected_errors AS $key => $error_array) {
if (in_array($error_code, $error_array)) {
unset($this->_expected_errors[$key][array_search($error_code, $error_array)]);
$deleted = true;
}
 
// clean up empty arrays
if (0 == count($this->_expected_errors[$key])) {
unset($this->_expected_errors[$key]);
}
}
return $deleted;
}
 
// }}}
// {{{ delExpect()
 
/**
* This method deletes all occurences of the specified element from
* the expected error codes stack.
*
* @param mixed $error_code error code that should be deleted
* @return mixed list of error codes that were deleted or error
* @access public
* @since PHP 4.3.0
*/
function delExpect($error_code)
{
$deleted = false;
 
if ((is_array($error_code) && (0 != count($error_code)))) {
// $error_code is a non-empty array here;
// we walk through it trying to unset all
// values
foreach($error_code as $key => $error) {
if ($this->_checkDelExpect($error)) {
$deleted = true;
} else {
$deleted = false;
}
}
return $deleted ? true : PEAR::raiseError("The expected error you submitted does not exist"); // IMPROVE ME
} elseif (!empty($error_code)) {
// $error_code comes alone, trying to unset it
if ($this->_checkDelExpect($error_code)) {
return true;
} else {
return PEAR::raiseError("The expected error you submitted does not exist"); // IMPROVE ME
}
} else {
// $error_code is empty
return PEAR::raiseError("The expected error you submitted is empty"); // IMPROVE ME
}
}
 
// }}}
// {{{ raiseError()
 
/**
* This method is a wrapper that returns an instance of the
* configured error class with this object's default error
* handling applied. If the $mode and $options parameters are not
* specified, the object's defaults are used.
*
* @param mixed $message a text error message or a PEAR error object
*
* @param int $code a numeric error code (it is up to your class
* to define these if you want to use codes)
*
* @param int $mode One of PEAR_ERROR_RETURN, PEAR_ERROR_PRINT,
* PEAR_ERROR_TRIGGER, PEAR_ERROR_DIE,
* PEAR_ERROR_CALLBACK, PEAR_ERROR_EXCEPTION.
*
* @param mixed $options If $mode is PEAR_ERROR_TRIGGER, this parameter
* specifies the PHP-internal error level (one of
* E_USER_NOTICE, E_USER_WARNING or E_USER_ERROR).
* If $mode is PEAR_ERROR_CALLBACK, this
* parameter specifies the callback function or
* method. In other error modes this parameter
* is ignored.
*
* @param string $userinfo If you need to pass along for example debug
* information, this parameter is meant for that.
*
* @param string $error_class The returned error object will be
* instantiated from this class, if specified.
*
* @param bool $skipmsg If true, raiseError will only pass error codes,
* the error message parameter will be dropped.
*
* @access public
* @return object a PEAR error object
* @see PEAR::setErrorHandling
* @since PHP 4.0.5
*/
function raiseError($message = null,
$code = null,
$mode = null,
$options = null,
$userinfo = null,
$error_class = null,
$skipmsg = false)
{
// The error is yet a PEAR error object
if (is_object($message)) {
$code = $message->getCode();
$userinfo = $message->getUserInfo();
$error_class = $message->getType();
$message->error_message_prefix = '';
$message = $message->getMessage();
}
 
if (isset($this) && isset($this->_expected_errors) && sizeof($this->_expected_errors) > 0 && sizeof($exp = end($this->_expected_errors))) {
if ($exp[0] == "*" ||
(is_int(reset($exp)) && in_array($code, $exp)) ||
(is_string(reset($exp)) && in_array($message, $exp))) {
$mode = PEAR_ERROR_RETURN;
}
}
// No mode given, try global ones
if ($mode === null) {
// Class error handler
if (isset($this) && isset($this->_default_error_mode)) {
$mode = $this->_default_error_mode;
$options = $this->_default_error_options;
// Global error handler
} elseif (isset($GLOBALS['_PEAR_default_error_mode'])) {
$mode = $GLOBALS['_PEAR_default_error_mode'];
$options = $GLOBALS['_PEAR_default_error_options'];
}
}
 
if ($error_class !== null) {
$ec = $error_class;
} elseif (isset($this) && isset($this->_error_class)) {
$ec = $this->_error_class;
} else {
$ec = 'PEAR_Error';
}
if ($skipmsg) {
return new $ec($code, $mode, $options, $userinfo);
} else {
return new $ec($message, $code, $mode, $options, $userinfo);
}
}
 
// }}}
// {{{ throwError()
 
/**
* Simpler form of raiseError with fewer options. In most cases
* message, code and userinfo are enough.
*
* @param string $message
*
*/
function throwError($message = null,
$code = null,
$userinfo = null)
{
if (isset($this) && is_subclass_of($this, 'PEAR_Error')) {
return $this->raiseError($message, $code, null, null, $userinfo);
} else {
return PEAR::raiseError($message, $code, null, null, $userinfo);
}
}
 
// }}}
// {{{ pushErrorHandling()
 
/**
* Push a new error handler on top of the error handler options stack. With this
* you can easily override the actual error handler for some code and restore
* it later with popErrorHandling.
*
* @param mixed $mode (same as setErrorHandling)
* @param mixed $options (same as setErrorHandling)
*
* @return bool Always true
*
* @see PEAR::setErrorHandling
*/
function pushErrorHandling($mode, $options = null)
{
$stack = &$GLOBALS['_PEAR_error_handler_stack'];
if (isset($this) && is_a($this, 'PEAR')) {
$def_mode = &$this->_default_error_mode;
$def_options = &$this->_default_error_options;
} else {
$def_mode = &$GLOBALS['_PEAR_default_error_mode'];
$def_options = &$GLOBALS['_PEAR_default_error_options'];
}
$stack[] = array($def_mode, $def_options);
 
if (isset($this) && is_a($this, 'PEAR')) {
$this->setErrorHandling($mode, $options);
} else {
PEAR::setErrorHandling($mode, $options);
}
$stack[] = array($mode, $options);
return true;
}
 
// }}}
// {{{ popErrorHandling()
 
/**
* Pop the last error handler used
*
* @return bool Always true
*
* @see PEAR::pushErrorHandling
*/
function popErrorHandling()
{
$stack = &$GLOBALS['_PEAR_error_handler_stack'];
array_pop($stack);
list($mode, $options) = $stack[sizeof($stack) - 1];
array_pop($stack);
if (isset($this) && is_a($this, 'PEAR')) {
$this->setErrorHandling($mode, $options);
} else {
PEAR::setErrorHandling($mode, $options);
}
return true;
}
 
// }}}
// {{{ loadExtension()
 
/**
* OS independant PHP extension load. Remember to take care
* on the correct extension name for case sensitive OSes.
*
* @param string $ext The extension name
* @return bool Success or not on the dl() call
*/
function loadExtension($ext)
{
if (!extension_loaded($ext)) {
// if either returns true dl() will produce a FATAL error, stop that
if ((ini_get('enable_dl') != 1) || (ini_get('safe_mode') == 1)) {
return false;
}
if (OS_WINDOWS) {
$suffix = '.dll';
} elseif (PHP_OS == 'HP-UX') {
$suffix = '.sl';
} elseif (PHP_OS == 'AIX') {
$suffix = '.a';
} elseif (PHP_OS == 'OSX') {
$suffix = '.bundle';
} else {
$suffix = '.so';
}
return @dl('php_'.$ext.$suffix) || @dl($ext.$suffix);
}
return true;
}
 
// }}}
}
 
// {{{ _PEAR_call_destructors()
 
function _PEAR_call_destructors()
{
global $_PEAR_destructor_object_list;
if (is_array($_PEAR_destructor_object_list) &&
sizeof($_PEAR_destructor_object_list))
{
reset($_PEAR_destructor_object_list);
while (list($k, $objref) = each($_PEAR_destructor_object_list)) {
$classname = get_class($objref);
while ($classname) {
$destructor = "_$classname";
if (method_exists($objref, $destructor)) {
$objref->$destructor();
break;
} else {
$classname = get_parent_class($classname);
}
}
}
// Empty the object list to ensure that destructors are
// not called more than once.
$_PEAR_destructor_object_list = array();
}
 
// Now call the shutdown functions
if (is_array($GLOBALS['_PEAR_shutdown_funcs']) AND !empty($GLOBALS['_PEAR_shutdown_funcs'])) {
foreach ($GLOBALS['_PEAR_shutdown_funcs'] as $value) {
call_user_func_array($value[0], $value[1]);
}
}
}
 
// }}}
 
class PEAR_Error
{
// {{{ properties
 
var $error_message_prefix = '';
var $mode = PEAR_ERROR_RETURN;
var $level = E_USER_NOTICE;
var $code = -1;
var $message = '';
var $userinfo = '';
var $backtrace = null;
 
// }}}
// {{{ constructor
 
/**
* PEAR_Error constructor
*
* @param string $message message
*
* @param int $code (optional) error code
*
* @param int $mode (optional) error mode, one of: PEAR_ERROR_RETURN,
* PEAR_ERROR_PRINT, PEAR_ERROR_DIE, PEAR_ERROR_TRIGGER,
* PEAR_ERROR_CALLBACK or PEAR_ERROR_EXCEPTION
*
* @param mixed $options (optional) error level, _OR_ in the case of
* PEAR_ERROR_CALLBACK, the callback function or object/method
* tuple.
*
* @param string $userinfo (optional) additional user/debug info
*
* @access public
*
*/
function PEAR_Error($message = 'unknown error', $code = null,
$mode = null, $options = null, $userinfo = null)
{
if ($mode === null) {
$mode = PEAR_ERROR_RETURN;
}
$this->message = $message;
$this->code = $code;
$this->mode = $mode;
$this->userinfo = $userinfo;
if (function_exists("debug_backtrace")) {
$this->backtrace = debug_backtrace();
}
if ($mode & PEAR_ERROR_CALLBACK) {
$this->level = E_USER_NOTICE;
$this->callback = $options;
} else {
if ($options === null) {
$options = E_USER_NOTICE;
}
$this->level = $options;
$this->callback = null;
}
if ($this->mode & PEAR_ERROR_PRINT) {
if (is_null($options) || is_int($options)) {
$format = "%s";
} else {
$format = $options;
}
printf($format, $this->getMessage());
}
if ($this->mode & PEAR_ERROR_TRIGGER) {
trigger_error($this->getMessage(), $this->level);
}
if ($this->mode & PEAR_ERROR_DIE) {
$msg = $this->getMessage();
if (is_null($options) || is_int($options)) {
$format = "%s";
if (substr($msg, -1) != "\n") {
$msg .= "\n";
}
} else {
$format = $options;
}
die(sprintf($format, $msg));
}
if ($this->mode & PEAR_ERROR_CALLBACK) {
if (is_callable($this->callback)) {
call_user_func($this->callback, $this);
}
}
if (PEAR_ZE2 && $this->mode & PEAR_ERROR_EXCEPTION) {
eval('throw $this;');
}
}
 
// }}}
// {{{ getMode()
 
/**
* Get the error mode from an error object.
*
* @return int error mode
* @access public
*/
function getMode() {
return $this->mode;
}
 
// }}}
// {{{ getCallback()
 
/**
* Get the callback function/method from an error object.
*
* @return mixed callback function or object/method array
* @access public
*/
function getCallback() {
return $this->callback;
}
 
// }}}
// {{{ getMessage()
 
 
/**
* Get the error message from an error object.
*
* @return string full error message
* @access public
*/
function getMessage()
{
return ($this->error_message_prefix . $this->message);
}
 
 
// }}}
// {{{ getCode()
 
/**
* Get error code from an error object
*
* @return int error code
* @access public
*/
function getCode()
{
return $this->code;
}
 
// }}}
// {{{ getType()
 
/**
* Get the name of this error/exception.
*
* @return string error/exception name (type)
* @access public
*/
function getType()
{
return get_class($this);
}
 
// }}}
// {{{ getUserInfo()
 
/**
* Get additional user-supplied information.
*
* @return string user-supplied information
* @access public
*/
function getUserInfo()
{
return $this->userinfo;
}
 
// }}}
// {{{ getDebugInfo()
 
/**
* Get additional debug information supplied by the application.
*
* @return string debug information
* @access public
*/
function getDebugInfo()
{
return $this->getUserInfo();
}
 
// }}}
// {{{ getBacktrace()
 
/**
* Get the call backtrace from where the error was generated.
* Supported with PHP 4.3.0 or newer.
*
* @param int $frame (optional) what frame to fetch
* @return array Backtrace, or NULL if not available.
* @access public
*/
function getBacktrace($frame = null)
{
if ($frame === null) {
return $this->backtrace;
}
return $this->backtrace[$frame];
}
 
// }}}
// {{{ addUserInfo()
 
function addUserInfo($info)
{
if (empty($this->userinfo)) {
$this->userinfo = $info;
} else {
$this->userinfo .= " ** $info";
}
}
 
// }}}
// {{{ toString()
 
/**
* Make a string representation of this object.
*
* @return string a string with an object summary
* @access public
*/
function toString() {
$modes = array();
$levels = array(E_USER_NOTICE => 'notice',
E_USER_WARNING => 'warning',
E_USER_ERROR => 'error');
if ($this->mode & PEAR_ERROR_CALLBACK) {
if (is_array($this->callback)) {
$callback = get_class($this->callback[0]) . '::' .
$this->callback[1];
} else {
$callback = $this->callback;
}
return sprintf('[%s: message="%s" code=%d mode=callback '.
'callback=%s prefix="%s" info="%s"]',
get_class($this), $this->message, $this->code,
$callback, $this->error_message_prefix,
$this->userinfo);
}
if ($this->mode & PEAR_ERROR_PRINT) {
$modes[] = 'print';
}
if ($this->mode & PEAR_ERROR_TRIGGER) {
$modes[] = 'trigger';
}
if ($this->mode & PEAR_ERROR_DIE) {
$modes[] = 'die';
}
if ($this->mode & PEAR_ERROR_RETURN) {
$modes[] = 'return';
}
return sprintf('[%s: message="%s" code=%d mode=%s level=%s '.
'prefix="%s" info="%s"]',
get_class($this), $this->message, $this->code,
implode("|", $modes), $levels[$this->level],
$this->error_message_prefix,
$this->userinfo);
}
 
// }}}
}
 
register_shutdown_function("_PEAR_call_destructors");
 
/*
* Local Variables:
* mode: php
* tab-width: 4
* c-basic-offset: 4
* End:
*/
?>
/trunk/applications/jrest/lib/File/PDF/fonts/timesb.php
New file
0,0 → 1,272
<?php
/**
* @package File_PDF
*/
$font_widths['timesB'] = array(
chr(0) => 250,
chr(1) => 250,
chr(2) => 250,
chr(3) => 250,
chr(4) => 250,
chr(5) => 250,
chr(6) => 250,
chr(7) => 250,
chr(8) => 250,
chr(9) => 250,
chr(10) => 250,
chr(11) => 250,
chr(12) => 250,
chr(13) => 250,
chr(14) => 250,
chr(15) => 250,
chr(16) => 250,
chr(17) => 250,
chr(18) => 250,
chr(19) => 250,
chr(20) => 250,
chr(21) => 250,
chr(22) => 250,
chr(23) => 250,
chr(24) => 250,
chr(25) => 250,
chr(26) => 250,
chr(27) => 250,
chr(28) => 250,
chr(29) => 250,
chr(30) => 250,
chr(31) => 250,
' ' => 250,
'!' => 333,
'"' => 555,
'#' => 500,
'$' => 500,
'%' => 1000,
'&' => 833,
'\'' => 278,
'(' => 333,
')' => 333,
'*' => 500,
'+' => 570,
',' => 250,
'-' => 333,
'.' => 250,
'/' => 278,
'0' => 500,
'1' => 500,
'2' => 500,
'3' => 500,
'4' => 500,
'5' => 500,
'6' => 500,
'7' => 500,
'8' => 500,
'9' => 500,
':' => 333,
';' => 333,
'<' => 570,
'=' => 570,
'>' => 570,
'?' => 500,
'@' => 930,
'A' => 722,
'B' => 667,
'C' => 722,
'D' => 722,
'E' => 667,
'F' => 611,
'G' => 778,
'H' => 778,
'I' => 389,
'J' => 500,
'K' => 778,
'L' => 667,
'M' => 944,
'N' => 722,
'O' => 778,
'P' => 611,
'Q' => 778,
'R' => 722,
'S' => 556,
'T' => 667,
'U' => 722,
'V' => 722,
'W' => 1000,
'X' => 722,
'Y' => 722,
'Z' => 667,
'[' => 333,
'\\' => 278,
']' => 333,
'^' => 581,
'_' => 500,
'`' => 333,
'a' => 500,
'b' => 556,
'c' => 444,
'd' => 556,
'e' => 444,
'f' => 333,
'g' => 500,
'h' => 556,
'i' => 278,
'j' => 333,
'k' => 556,
'l' => 278,
'm' => 833,
'n' => 556,
'o' => 500,
'p' => 556,
'q' => 556,
'r' => 444,
's' => 389,
't' => 333,
'u' => 556,
'v' => 500,
'w' => 722,
'x' => 500,
'y' => 500,
'z' => 444,
'{' => 394,
'|' => 220,
'}' => 394,
'~' => 520,
chr(127) => 350,
chr(128) => 500,
chr(129) => 350,
chr(130) => 333,
chr(131) => 500,
chr(132) => 500,
chr(133) => 1000,
chr(134) => 500,
chr(135) => 500,
chr(136) => 333,
chr(137) => 1000,
chr(138) => 556,
chr(139) => 333,
chr(140) => 1000,
chr(141) => 350,
chr(142) => 667,
chr(143) => 350,
chr(144) => 350,
chr(145) => 333,
chr(146) => 333,
chr(147) => 500,
chr(148) => 500,
chr(149) => 350,
chr(150) => 500,
chr(151) => 1000,
chr(152) => 333,
chr(153) => 1000,
chr(154) => 389,
chr(155) => 333,
chr(156) => 722,
chr(157) => 350,
chr(158) => 444,
chr(159) => 722,
chr(160) => 250,
chr(161) => 333,
chr(162) => 500,
chr(163) => 500,
chr(164) => 500,
chr(165) => 500,
chr(166) => 220,
chr(167) => 500,
chr(168) => 333,
chr(169) => 747,
chr(170) => 300,
chr(171) => 500,
chr(172) => 570,
chr(173) => 333,
chr(174) => 747,
chr(175) => 333,
chr(176) => 400,
chr(177) => 570,
chr(178) => 300,
chr(179) => 300,
chr(180) => 333,
chr(181) => 556,
chr(182) => 540,
chr(183) => 250,
chr(184) => 333,
chr(185) => 300,
chr(186) => 330,
chr(187) => 500,
chr(188) => 750,
chr(189) => 750,
chr(190) => 750,
chr(191) => 500,
chr(192) => 722,
chr(193) => 722,
chr(194) => 722,
chr(195) => 722,
chr(196) => 722,
chr(197) => 722,
chr(198) => 1000,
chr(199) => 722,
chr(200) => 667,
chr(201) => 667,
chr(202) => 667,
chr(203) => 667,
chr(204) => 389,
chr(205) => 389,
chr(206) => 389,
chr(207) => 389,
chr(208) => 722,
chr(209) => 722,
chr(210) => 778,
chr(211) => 778,
chr(212) => 778,
chr(213) => 778,
chr(214) => 778,
chr(215) => 570,
chr(216) => 778,
chr(217) => 722,
chr(218) => 722,
chr(219) => 722,
chr(220) => 722,
chr(221) => 722,
chr(222) => 611,
chr(223) => 556,
chr(224) => 500,
chr(225) => 500,
chr(226) => 500,
chr(227) => 500,
chr(228) => 500,
chr(229) => 500,
chr(230) => 722,
chr(231) => 444,
chr(232) => 444,
chr(233) => 444,
chr(234) => 444,
chr(235) => 444,
chr(236) => 278,
chr(237) => 278,
chr(238) => 278,
chr(239) => 278,
chr(240) => 500,
chr(241) => 556,
chr(242) => 500,
chr(243) => 500,
chr(244) => 500,
chr(245) => 500,
chr(246) => 500,
chr(247) => 570,
chr(248) => 500,
chr(249) => 556,
chr(250) => 556,
chr(251) => 556,
chr(252) => 556,
chr(253) => 500,
chr(254) => 556,
chr(255) => 500);
/trunk/applications/jrest/lib/File/PDF/fonts/helvetica.php
New file
0,0 → 1,272
<?php
/**
* @package File_PDF
*/
$font_widths['helvetica'] = array(
chr(0) => 278,
chr(1) => 278,
chr(2) => 278,
chr(3) => 278,
chr(4) => 278,
chr(5) => 278,
chr(6) => 278,
chr(7) => 278,
chr(8) => 278,
chr(9) => 278,
chr(10) => 278,
chr(11) => 278,
chr(12) => 278,
chr(13) => 278,
chr(14) => 278,
chr(15) => 278,
chr(16) => 278,
chr(17) => 278,
chr(18) => 278,
chr(19) => 278,
chr(20) => 278,
chr(21) => 278,
chr(22) => 278,
chr(23) => 278,
chr(24) => 278,
chr(25) => 278,
chr(26) => 278,
chr(27) => 278,
chr(28) => 278,
chr(29) => 278,
chr(30) => 278,
chr(31) => 278,
' ' => 278,
'!' => 278,
'"' => 355,
'#' => 556,
'$' => 556,
'%' => 889,
'&' => 667,
'\'' => 191,
'(' => 333,
')' => 333,
'*' => 389,
'+' => 584,
',' => 278,
'-' => 333,
'.' => 278,
'/' => 278,
'0' => 556,
'1' => 556,
'2' => 556,
'3' => 556,
'4' => 556,
'5' => 556,
'6' => 556,
'7' => 556,
'8' => 556,
'9' => 556,
':' => 278,
';' => 278,
'<' => 584,
'=' => 584,
'>' => 584,
'?' => 556,
'@' => 1015,
'A' => 667,
'B' => 667,
'C' => 722,
'D' => 722,
'E' => 667,
'F' => 611,
'G' => 778,
'H' => 722,
'I' => 278,
'J' => 500,
'K' => 667,
'L' => 556,
'M' => 833,
'N' => 722,
'O' => 778,
'P' => 667,
'Q' => 778,
'R' => 722,
'S' => 667,
'T' => 611,
'U' => 722,
'V' => 667,
'W' => 944,
'X' => 667,
'Y' => 667,
'Z' => 611,
'[' => 278,
'\\' => 278,
']' => 278,
'^' => 469,
'_' => 556,
'`' => 333,
'a' => 556,
'b' => 556,
'c' => 500,
'd' => 556,
'e' => 556,
'f' => 278,
'g' => 556,
'h' => 556,
'i' => 222,
'j' => 222,
'k' => 500,
'l' => 222,
'm' => 833,
'n' => 556,
'o' => 556,
'p' => 556,
'q' => 556,
'r' => 333,
's' => 500,
't' => 278,
'u' => 556,
'v' => 500,
'w' => 722,
'x' => 500,
'y' => 500,
'z' => 500,
'{' => 334,
'|' => 260,
'}' => 334,
'~' => 584,
chr(127) => 350,
chr(128) => 556,
chr(129) => 350,
chr(130) => 222,
chr(131) => 556,
chr(132) => 333,
chr(133) => 1000,
chr(134) => 556,
chr(135) => 556,
chr(136) => 333,
chr(137) => 1000,
chr(138) => 667,
chr(139) => 333,
chr(140) => 1000,
chr(141) => 350,
chr(142) => 611,
chr(143) => 350,
chr(144) => 350,
chr(145) => 222,
chr(146) => 222,
chr(147) => 333,
chr(148) => 333,
chr(149) => 350,
chr(150) => 556,
chr(151) => 1000,
chr(152) => 333,
chr(153) => 1000,
chr(154) => 500,
chr(155) => 333,
chr(156) => 944,
chr(157) => 350,
chr(158) => 500,
chr(159) => 667,
chr(160) => 278,
chr(161) => 333,
chr(162) => 556,
chr(163) => 556,
chr(164) => 556,
chr(165) => 556,
chr(166) => 260,
chr(167) => 556,
chr(168) => 333,
chr(169) => 737,
chr(170) => 370,
chr(171) => 556,
chr(172) => 584,
chr(173) => 333,
chr(174) => 737,
chr(175) => 333,
chr(176) => 400,
chr(177) => 584,
chr(178) => 333,
chr(179) => 333,
chr(180) => 333,
chr(181) => 556,
chr(182) => 537,
chr(183) => 278,
chr(184) => 333,
chr(185) => 333,
chr(186) => 365,
chr(187) => 556,
chr(188) => 834,
chr(189) => 834,
chr(190) => 834,
chr(191) => 611,
chr(192) => 667,
chr(193) => 667,
chr(194) => 667,
chr(195) => 667,
chr(196) => 667,
chr(197) => 667,
chr(198) => 1000,
chr(199) => 722,
chr(200) => 667,
chr(201) => 667,
chr(202) => 667,
chr(203) => 667,
chr(204) => 278,
chr(205) => 278,
chr(206) => 278,
chr(207) => 278,
chr(208) => 722,
chr(209) => 722,
chr(210) => 778,
chr(211) => 778,
chr(212) => 778,
chr(213) => 778,
chr(214) => 778,
chr(215) => 584,
chr(216) => 778,
chr(217) => 722,
chr(218) => 722,
chr(219) => 722,
chr(220) => 722,
chr(221) => 667,
chr(222) => 667,
chr(223) => 611,
chr(224) => 556,
chr(225) => 556,
chr(226) => 556,
chr(227) => 556,
chr(228) => 556,
chr(229) => 556,
chr(230) => 889,
chr(231) => 500,
chr(232) => 556,
chr(233) => 556,
chr(234) => 556,
chr(235) => 556,
chr(236) => 278,
chr(237) => 278,
chr(238) => 278,
chr(239) => 278,
chr(240) => 556,
chr(241) => 556,
chr(242) => 556,
chr(243) => 556,
chr(244) => 556,
chr(245) => 556,
chr(246) => 556,
chr(247) => 584,
chr(248) => 611,
chr(249) => 556,
chr(250) => 556,
chr(251) => 556,
chr(252) => 556,
chr(253) => 500,
chr(254) => 556,
chr(255) => 500);
/trunk/applications/jrest/lib/File/PDF/fonts/symbol.php
New file
0,0 → 1,272
<?php
/**
* @package File_PDF
*/
$font_widths['symbol'] = array(
chr(0) => 250,
chr(1) => 250,
chr(2) => 250,
chr(3) => 250,
chr(4) => 250,
chr(5) => 250,
chr(6) => 250,
chr(7) => 250,
chr(8) => 250,
chr(9) => 250,
chr(10) => 250,
chr(11) => 250,
chr(12) => 250,
chr(13) => 250,
chr(14) => 250,
chr(15) => 250,
chr(16) => 250,
chr(17) => 250,
chr(18) => 250,
chr(19) => 250,
chr(20) => 250,
chr(21) => 250,
chr(22) => 250,
chr(23) => 250,
chr(24) => 250,
chr(25) => 250,
chr(26) => 250,
chr(27) => 250,
chr(28) => 250,
chr(29) => 250,
chr(30) => 250,
chr(31) => 250,
' ' => 250,
'!' => 333,
'"' => 713,
'#' => 500,
'$' => 549,
'%' => 833,
'&' => 778,
'\'' => 439,
'(' => 333,
')' => 333,
'*' => 500,
'+' => 549,
',' => 250,
'-' => 549,
'.' => 250,
'/' => 278,
'0' => 500,
'1' => 500,
'2' => 500,
'3' => 500,
'4' => 500,
'5' => 500,
'6' => 500,
'7' => 500,
'8' => 500,
'9' => 500,
':' => 278,
';' => 278,
'<' => 549,
'=' => 549,
'>' => 549,
'?' => 444,
'@' => 549,
'A' => 722,
'B' => 667,
'C' => 722,
'D' => 612,
'E' => 611,
'F' => 763,
'G' => 603,
'H' => 722,
'I' => 333,
'J' => 631,
'K' => 722,
'L' => 686,
'M' => 889,
'N' => 722,
'O' => 722,
'P' => 768,
'Q' => 741,
'R' => 556,
'S' => 592,
'T' => 611,
'U' => 690,
'V' => 439,
'W' => 768,
'X' => 645,
'Y' => 795,
'Z' => 611,
'[' => 333,
'\\' => 863,
']' => 333,
'^' => 658,
'_' => 500,
'`' => 500,
'a' => 631,
'b' => 549,
'c' => 549,
'd' => 494,
'e' => 439,
'f' => 521,
'g' => 411,
'h' => 603,
'i' => 329,
'j' => 603,
'k' => 549,
'l' => 549,
'm' => 576,
'n' => 521,
'o' => 549,
'p' => 549,
'q' => 521,
'r' => 549,
's' => 603,
't' => 439,
'u' => 576,
'v' => 713,
'w' => 686,
'x' => 493,
'y' => 686,
'z' => 494,
'{' => 480,
'|' => 200,
'}' => 480,
'~' => 549,
chr(127) => 0,
chr(128) => 0,
chr(129) => 0,
chr(130) => 0,
chr(131) => 0,
chr(132) => 0,
chr(133) => 0,
chr(134) => 0,
chr(135) => 0,
chr(136) => 0,
chr(137) => 0,
chr(138) => 0,
chr(139) => 0,
chr(140) => 0,
chr(141) => 0,
chr(142) => 0,
chr(143) => 0,
chr(144) => 0,
chr(145) => 0,
chr(146) => 0,
chr(147) => 0,
chr(148) => 0,
chr(149) => 0,
chr(150) => 0,
chr(151) => 0,
chr(152) => 0,
chr(153) => 0,
chr(154) => 0,
chr(155) => 0,
chr(156) => 0,
chr(157) => 0,
chr(158) => 0,
chr(159) => 0,
chr(160) => 750,
chr(161) => 620,
chr(162) => 247,
chr(163) => 549,
chr(164) => 167,
chr(165) => 713,
chr(166) => 500,
chr(167) => 753,
chr(168) => 753,
chr(169) => 753,
chr(170) => 753,
chr(171) => 1042,
chr(172) => 987,
chr(173) => 603,
chr(174) => 987,
chr(175) => 603,
chr(176) => 400,
chr(177) => 549,
chr(178) => 411,
chr(179) => 549,
chr(180) => 549,
chr(181) => 713,
chr(182) => 494,
chr(183) => 460,
chr(184) => 549,
chr(185) => 549,
chr(186) => 549,
chr(187) => 549,
chr(188) => 1000,
chr(189) => 603,
chr(190) => 1000,
chr(191) => 658,
chr(192) => 823,
chr(193) => 686,
chr(194) => 795,
chr(195) => 987,
chr(196) => 768,
chr(197) => 768,
chr(198) => 823,
chr(199) => 768,
chr(200) => 768,
chr(201) => 713,
chr(202) => 713,
chr(203) => 713,
chr(204) => 713,
chr(205) => 713,
chr(206) => 713,
chr(207) => 713,
chr(208) => 768,
chr(209) => 713,
chr(210) => 790,
chr(211) => 790,
chr(212) => 890,
chr(213) => 823,
chr(214) => 549,
chr(215) => 250,
chr(216) => 713,
chr(217) => 603,
chr(218) => 603,
chr(219) => 1042,
chr(220) => 987,
chr(221) => 603,
chr(222) => 987,
chr(223) => 603,
chr(224) => 494,
chr(225) => 329,
chr(226) => 790,
chr(227) => 790,
chr(228) => 786,
chr(229) => 713,
chr(230) => 384,
chr(231) => 384,
chr(232) => 384,
chr(233) => 384,
chr(234) => 384,
chr(235) => 384,
chr(236) => 494,
chr(237) => 494,
chr(238) => 494,
chr(239) => 494,
chr(240) => 0,
chr(241) => 329,
chr(242) => 274,
chr(243) => 686,
chr(244) => 686,
chr(245) => 686,
chr(246) => 384,
chr(247) => 384,
chr(248) => 384,
chr(249) => 384,
chr(250) => 384,
chr(251) => 384,
chr(252) => 494,
chr(253) => 494,
chr(254) => 494,
chr(255) => 0);
/trunk/applications/jrest/lib/File/PDF/fonts/helveticab.php
New file
0,0 → 1,272
<?php
/**
* @package File_PDF
*/
$font_widths['helveticaB'] = array(
chr(0) => 278,
chr(1) => 278,
chr(2) => 278,
chr(3) => 278,
chr(4) => 278,
chr(5) => 278,
chr(6) => 278,
chr(7) => 278,
chr(8) => 278,
chr(9) => 278,
chr(10) => 278,
chr(11) => 278,
chr(12) => 278,
chr(13) => 278,
chr(14) => 278,
chr(15) => 278,
chr(16) => 278,
chr(17) => 278,
chr(18) => 278,
chr(19) => 278,
chr(20) => 278,
chr(21) => 278,
chr(22) => 278,
chr(23) => 278,
chr(24) => 278,
chr(25) => 278,
chr(26) => 278,
chr(27) => 278,
chr(28) => 278,
chr(29) => 278,
chr(30) => 278,
chr(31) => 278,
' ' => 278,
'!' => 333,
'"' => 474,
'#' => 556,
'$' => 556,
'%' => 889,
'&' => 722,
'\'' => 238,
'(' => 333,
')' => 333,
'*' => 389,
'+' => 584,
',' => 278,
'-' => 333,
'.' => 278,
'/' => 278,
'0' => 556,
'1' => 556,
'2' => 556,
'3' => 556,
'4' => 556,
'5' => 556,
'6' => 556,
'7' => 556,
'8' => 556,
'9' => 556,
':' => 333,
';' => 333,
'<' => 584,
'=' => 584,
'>' => 584,
'?' => 611,
'@' => 975,
'A' => 722,
'B' => 722,
'C' => 722,
'D' => 722,
'E' => 667,
'F' => 611,
'G' => 778,
'H' => 722,
'I' => 278,
'J' => 556,
'K' => 722,
'L' => 611,
'M' => 833,
'N' => 722,
'O' => 778,
'P' => 667,
'Q' => 778,
'R' => 722,
'S' => 667,
'T' => 611,
'U' => 722,
'V' => 667,
'W' => 944,
'X' => 667,
'Y' => 667,
'Z' => 611,
'[' => 333,
'\\' => 278,
']' => 333,
'^' => 584,
'_' => 556,
'`' => 333,
'a' => 556,
'b' => 611,
'c' => 556,
'd' => 611,
'e' => 556,
'f' => 333,
'g' => 611,
'h' => 611,
'i' => 278,
'j' => 278,
'k' => 556,
'l' => 278,
'm' => 889,
'n' => 611,
'o' => 611,
'p' => 611,
'q' => 611,
'r' => 389,
's' => 556,
't' => 333,
'u' => 611,
'v' => 556,
'w' => 778,
'x' => 556,
'y' => 556,
'z' => 500,
'{' => 389,
'|' => 280,
'}' => 389,
'~' => 584,
chr(127) => 350,
chr(128) => 556,
chr(129) => 350,
chr(130) => 278,
chr(131) => 556,
chr(132) => 500,
chr(133) => 1000,
chr(134) => 556,
chr(135) => 556,
chr(136) => 333,
chr(137) => 1000,
chr(138) => 667,
chr(139) => 333,
chr(140) => 1000,
chr(141) => 350,
chr(142) => 611,
chr(143) => 350,
chr(144) => 350,
chr(145) => 278,
chr(146) => 278,
chr(147) => 500,
chr(148) => 500,
chr(149) => 350,
chr(150) => 556,
chr(151) => 1000,
chr(152) => 333,
chr(153) => 1000,
chr(154) => 556,
chr(155) => 333,
chr(156) => 944,
chr(157) => 350,
chr(158) => 500,
chr(159) => 667,
chr(160) => 278,
chr(161) => 333,
chr(162) => 556,
chr(163) => 556,
chr(164) => 556,
chr(165) => 556,
chr(166) => 280,
chr(167) => 556,
chr(168) => 333,
chr(169) => 737,
chr(170) => 370,
chr(171) => 556,
chr(172) => 584,
chr(173) => 333,
chr(174) => 737,
chr(175) => 333,
chr(176) => 400,
chr(177) => 584,
chr(178) => 333,
chr(179) => 333,
chr(180) => 333,
chr(181) => 611,
chr(182) => 556,
chr(183) => 278,
chr(184) => 333,
chr(185) => 333,
chr(186) => 365,
chr(187) => 556,
chr(188) => 834,
chr(189) => 834,
chr(190) => 834,
chr(191) => 611,
chr(192) => 722,
chr(193) => 722,
chr(194) => 722,
chr(195) => 722,
chr(196) => 722,
chr(197) => 722,
chr(198) => 1000,
chr(199) => 722,
chr(200) => 667,
chr(201) => 667,
chr(202) => 667,
chr(203) => 667,
chr(204) => 278,
chr(205) => 278,
chr(206) => 278,
chr(207) => 278,
chr(208) => 722,
chr(209) => 722,
chr(210) => 778,
chr(211) => 778,
chr(212) => 778,
chr(213) => 778,
chr(214) => 778,
chr(215) => 584,
chr(216) => 778,
chr(217) => 722,
chr(218) => 722,
chr(219) => 722,
chr(220) => 722,
chr(221) => 667,
chr(222) => 667,
chr(223) => 611,
chr(224) => 556,
chr(225) => 556,
chr(226) => 556,
chr(227) => 556,
chr(228) => 556,
chr(229) => 556,
chr(230) => 889,
chr(231) => 556,
chr(232) => 556,
chr(233) => 556,
chr(234) => 556,
chr(235) => 556,
chr(236) => 278,
chr(237) => 278,
chr(238) => 278,
chr(239) => 278,
chr(240) => 611,
chr(241) => 611,
chr(242) => 611,
chr(243) => 611,
chr(244) => 611,
chr(245) => 611,
chr(246) => 611,
chr(247) => 584,
chr(248) => 611,
chr(249) => 611,
chr(250) => 611,
chr(251) => 611,
chr(252) => 611,
chr(253) => 556,
chr(254) => 611,
chr(255) => 556);
/trunk/applications/jrest/lib/File/PDF/fonts/courier.php
New file
0,0 → 1,10
<?php
/**
* @package File_PDF
*/
for ($i = 0; $i <= 255; $i++) {
$font_widths['courier'][chr($i)] = 600;
}
$font_widths['courierB'] = $font_widths['courier'];
$font_widths['courierI'] = $font_widths['courier'];
$font_widths['courierBI'] = $font_widths['courier'];
/trunk/applications/jrest/lib/File/PDF/fonts/timesi.php
New file
0,0 → 1,272
<?php
/**
* @package File_PDF
*/
$font_widths['timesI'] = array(
chr(0) => 250,
chr(1) => 250,
chr(2) => 250,
chr(3) => 250,
chr(4) => 250,
chr(5) => 250,
chr(6) => 250,
chr(7) => 250,
chr(8) => 250,
chr(9) => 250,
chr(10) => 250,
chr(11) => 250,
chr(12) => 250,
chr(13) => 250,
chr(14) => 250,
chr(15) => 250,
chr(16) => 250,
chr(17) => 250,
chr(18) => 250,
chr(19) => 250,
chr(20) => 250,
chr(21) => 250,
chr(22) => 250,
chr(23) => 250,
chr(24) => 250,
chr(25) => 250,
chr(26) => 250,
chr(27) => 250,
chr(28) => 250,
chr(29) => 250,
chr(30) => 250,
chr(31) => 250,
' ' => 250,
'!' => 333,
'"' => 420,
'#' => 500,
'$' => 500,
'%' => 833,
'&' => 778,
'\'' => 214,
'(' => 333,
')' => 333,
'*' => 500,
'+' => 675,
',' => 250,
'-' => 333,
'.' => 250,
'/' => 278,
'0' => 500,
'1' => 500,
'2' => 500,
'3' => 500,
'4' => 500,
'5' => 500,
'6' => 500,
'7' => 500,
'8' => 500,
'9' => 500,
':' => 333,
';' => 333,
'<' => 675,
'=' => 675,
'>' => 675,
'?' => 500,
'@' => 920,
'A' => 611,
'B' => 611,
'C' => 667,
'D' => 722,
'E' => 611,
'F' => 611,
'G' => 722,
'H' => 722,
'I' => 333,
'J' => 444,
'K' => 667,
'L' => 556,
'M' => 833,
'N' => 667,
'O' => 722,
'P' => 611,
'Q' => 722,
'R' => 611,
'S' => 500,
'T' => 556,
'U' => 722,
'V' => 611,
'W' => 833,
'X' => 611,
'Y' => 556,
'Z' => 556,
'[' => 389,
'\\' => 278,
']' => 389,
'^' => 422,
'_' => 500,
'`' => 333,
'a' => 500,
'b' => 500,
'c' => 444,
'd' => 500,
'e' => 444,
'f' => 278,
'g' => 500,
'h' => 500,
'i' => 278,
'j' => 278,
'k' => 444,
'l' => 278,
'm' => 722,
'n' => 500,
'o' => 500,
'p' => 500,
'q' => 500,
'r' => 389,
's' => 389,
't' => 278,
'u' => 500,
'v' => 444,
'w' => 667,
'x' => 444,
'y' => 444,
'z' => 389,
'{' => 400,
'|' => 275,
'}' => 400,
'~' => 541,
chr(127) => 350,
chr(128) => 500,
chr(129) => 350,
chr(130) => 333,
chr(131) => 500,
chr(132) => 556,
chr(133) => 889,
chr(134) => 500,
chr(135) => 500,
chr(136) => 333,
chr(137) => 1000,
chr(138) => 500,
chr(139) => 333,
chr(140) => 944,
chr(141) => 350,
chr(142) => 556,
chr(143) => 350,
chr(144) => 350,
chr(145) => 333,
chr(146) => 333,
chr(147) => 556,
chr(148) => 556,
chr(149) => 350,
chr(150) => 500,
chr(151) => 889,
chr(152) => 333,
chr(153) => 980,
chr(154) => 389,
chr(155) => 333,
chr(156) => 667,
chr(157) => 350,
chr(158) => 389,
chr(159) => 556,
chr(160) => 250,
chr(161) => 389,
chr(162) => 500,
chr(163) => 500,
chr(164) => 500,
chr(165) => 500,
chr(166) => 275,
chr(167) => 500,
chr(168) => 333,
chr(169) => 760,
chr(170) => 276,
chr(171) => 500,
chr(172) => 675,
chr(173) => 333,
chr(174) => 760,
chr(175) => 333,
chr(176) => 400,
chr(177) => 675,
chr(178) => 300,
chr(179) => 300,
chr(180) => 333,
chr(181) => 500,
chr(182) => 523,
chr(183) => 250,
chr(184) => 333,
chr(185) => 300,
chr(186) => 310,
chr(187) => 500,
chr(188) => 750,
chr(189) => 750,
chr(190) => 750,
chr(191) => 500,
chr(192) => 611,
chr(193) => 611,
chr(194) => 611,
chr(195) => 611,
chr(196) => 611,
chr(197) => 611,
chr(198) => 889,
chr(199) => 667,
chr(200) => 611,
chr(201) => 611,
chr(202) => 611,
chr(203) => 611,
chr(204) => 333,
chr(205) => 333,
chr(206) => 333,
chr(207) => 333,
chr(208) => 722,
chr(209) => 667,
chr(210) => 722,
chr(211) => 722,
chr(212) => 722,
chr(213) => 722,
chr(214) => 722,
chr(215) => 675,
chr(216) => 722,
chr(217) => 722,
chr(218) => 722,
chr(219) => 722,
chr(220) => 722,
chr(221) => 556,
chr(222) => 611,
chr(223) => 500,
chr(224) => 500,
chr(225) => 500,
chr(226) => 500,
chr(227) => 500,
chr(228) => 500,
chr(229) => 500,
chr(230) => 667,
chr(231) => 444,
chr(232) => 444,
chr(233) => 444,
chr(234) => 444,
chr(235) => 444,
chr(236) => 278,
chr(237) => 278,
chr(238) => 278,
chr(239) => 278,
chr(240) => 500,
chr(241) => 500,
chr(242) => 500,
chr(243) => 500,
chr(244) => 500,
chr(245) => 500,
chr(246) => 500,
chr(247) => 675,
chr(248) => 500,
chr(249) => 500,
chr(250) => 500,
chr(251) => 500,
chr(252) => 500,
chr(253) => 444,
chr(254) => 500,
chr(255) => 444);
/trunk/applications/jrest/lib/File/PDF/fonts/timesbi.php
New file
0,0 → 1,272
<?php
/**
* @package File_PDF
*/
$font_widths['timesBI'] = array(
chr(0) => 250,
chr(1) => 250,
chr(2) => 250,
chr(3) => 250,
chr(4) => 250,
chr(5) => 250,
chr(6) => 250,
chr(7) => 250,
chr(8) => 250,
chr(9) => 250,
chr(10) => 250,
chr(11) => 250,
chr(12) => 250,
chr(13) => 250,
chr(14) => 250,
chr(15) => 250,
chr(16) => 250,
chr(17) => 250,
chr(18) => 250,
chr(19) => 250,
chr(20) => 250,
chr(21) => 250,
chr(22) => 250,
chr(23) => 250,
chr(24) => 250,
chr(25) => 250,
chr(26) => 250,
chr(27) => 250,
chr(28) => 250,
chr(29) => 250,
chr(30) => 250,
chr(31) => 250,
' ' => 250,
'!' => 389,
'"' => 555,
'#' => 500,
'$' => 500,
'%' => 833,
'&' => 778,
'\'' => 278,
'(' => 333,
')' => 333,
'*' => 500,
'+' => 570,
',' => 250,
'-' => 333,
'.' => 250,
'/' => 278,
'0' => 500,
'1' => 500,
'2' => 500,
'3' => 500,
'4' => 500,
'5' => 500,
'6' => 500,
'7' => 500,
'8' => 500,
'9' => 500,
':' => 333,
';' => 333,
'<' => 570,
'=' => 570,
'>' => 570,
'?' => 500,
'@' => 832,
'A' => 667,
'B' => 667,
'C' => 667,
'D' => 722,
'E' => 667,
'F' => 667,
'G' => 722,
'H' => 778,
'I' => 389,
'J' => 500,
'K' => 667,
'L' => 611,
'M' => 889,
'N' => 722,
'O' => 722,
'P' => 611,
'Q' => 722,
'R' => 667,
'S' => 556,
'T' => 611,
'U' => 722,
'V' => 667,
'W' => 889,
'X' => 667,
'Y' => 611,
'Z' => 611,
'[' => 333,
'\\' => 278,
']' => 333,
'^' => 570,
'_' => 500,
'`' => 333,
'a' => 500,
'b' => 500,
'c' => 444,
'd' => 500,
'e' => 444,
'f' => 333,
'g' => 500,
'h' => 556,
'i' => 278,
'j' => 278,
'k' => 500,
'l' => 278,
'm' => 778,
'n' => 556,
'o' => 500,
'p' => 500,
'q' => 500,
'r' => 389,
's' => 389,
't' => 278,
'u' => 556,
'v' => 444,
'w' => 667,
'x' => 500,
'y' => 444,
'z' => 389,
'{' => 348,
'|' => 220,
'}' => 348,
'~' => 570,
chr(127) => 350,
chr(128) => 500,
chr(129) => 350,
chr(130) => 333,
chr(131) => 500,
chr(132) => 500,
chr(133) => 1000,
chr(134) => 500,
chr(135) => 500,
chr(136) => 333,
chr(137) => 1000,
chr(138) => 556,
chr(139) => 333,
chr(140) => 944,
chr(141) => 350,
chr(142) => 611,
chr(143) => 350,
chr(144) => 350,
chr(145) => 333,
chr(146) => 333,
chr(147) => 500,
chr(148) => 500,
chr(149) => 350,
chr(150) => 500,
chr(151) => 1000,
chr(152) => 333,
chr(153) => 1000,
chr(154) => 389,
chr(155) => 333,
chr(156) => 722,
chr(157) => 350,
chr(158) => 389,
chr(159) => 611,
chr(160) => 250,
chr(161) => 389,
chr(162) => 500,
chr(163) => 500,
chr(164) => 500,
chr(165) => 500,
chr(166) => 220,
chr(167) => 500,
chr(168) => 333,
chr(169) => 747,
chr(170) => 266,
chr(171) => 500,
chr(172) => 606,
chr(173) => 333,
chr(174) => 747,
chr(175) => 333,
chr(176) => 400,
chr(177) => 570,
chr(178) => 300,
chr(179) => 300,
chr(180) => 333,
chr(181) => 576,
chr(182) => 500,
chr(183) => 250,
chr(184) => 333,
chr(185) => 300,
chr(186) => 300,
chr(187) => 500,
chr(188) => 750,
chr(189) => 750,
chr(190) => 750,
chr(191) => 500,
chr(192) => 667,
chr(193) => 667,
chr(194) => 667,
chr(195) => 667,
chr(196) => 667,
chr(197) => 667,
chr(198) => 944,
chr(199) => 667,
chr(200) => 667,
chr(201) => 667,
chr(202) => 667,
chr(203) => 667,
chr(204) => 389,
chr(205) => 389,
chr(206) => 389,
chr(207) => 389,
chr(208) => 722,
chr(209) => 722,
chr(210) => 722,
chr(211) => 722,
chr(212) => 722,
chr(213) => 722,
chr(214) => 722,
chr(215) => 570,
chr(216) => 722,
chr(217) => 722,
chr(218) => 722,
chr(219) => 722,
chr(220) => 722,
chr(221) => 611,
chr(222) => 611,
chr(223) => 500,
chr(224) => 500,
chr(225) => 500,
chr(226) => 500,
chr(227) => 500,
chr(228) => 500,
chr(229) => 500,
chr(230) => 722,
chr(231) => 444,
chr(232) => 444,
chr(233) => 444,
chr(234) => 444,
chr(235) => 444,
chr(236) => 278,
chr(237) => 278,
chr(238) => 278,
chr(239) => 278,
chr(240) => 500,
chr(241) => 556,
chr(242) => 500,
chr(243) => 500,
chr(244) => 500,
chr(245) => 500,
chr(246) => 500,
chr(247) => 570,
chr(248) => 500,
chr(249) => 556,
chr(250) => 556,
chr(251) => 556,
chr(252) => 556,
chr(253) => 444,
chr(254) => 500,
chr(255) => 444);
/trunk/applications/jrest/lib/File/PDF/fonts/zapfdingbats.php
New file
0,0 → 1,272
<?php
/**
* @package File_PDF
*/
$font_widths['zapfdingbats'] = array(
chr(0) => 0,
chr(1) => 0,
chr(2) => 0,
chr(3) => 0,
chr(4) => 0,
chr(5) => 0,
chr(6) => 0,
chr(7) => 0,
chr(8) => 0,
chr(9) => 0,
chr(10) => 0,
chr(11) => 0,
chr(12) => 0,
chr(13) => 0,
chr(14) => 0,
chr(15) => 0,
chr(16) => 0,
chr(17) => 0,
chr(18) => 0,
chr(19) => 0,
chr(20) => 0,
chr(21) => 0,
chr(22) => 0,
chr(23) => 0,
chr(24) => 0,
chr(25) => 0,
chr(26) => 0,
chr(27) => 0,
chr(28) => 0,
chr(29) => 0,
chr(30) => 0,
chr(31) => 0,
' ' => 278,
'!' => 974,
'"' => 961,
'#' => 974,
'$' => 980,
'%' => 719,
'&' => 789,
'\'' => 790,
'(' => 791,
')' => 690,
'*' => 960,
'+' => 939,
',' => 549,
'-' => 855,
'.' => 911,
'/' => 933,
'0' => 911,
'1' => 945,
'2' => 974,
'3' => 755,
'4' => 846,
'5' => 762,
'6' => 761,
'7' => 571,
'8' => 677,
'9' => 763,
':' => 760,
';' => 759,
'<' => 754,
'=' => 494,
'>' => 552,
'?' => 537,
'@' => 577,
'A' => 692,
'B' => 786,
'C' => 788,
'D' => 788,
'E' => 790,
'F' => 793,
'G' => 794,
'H' => 816,
'I' => 823,
'J' => 789,
'K' => 841,
'L' => 823,
'M' => 833,
'N' => 816,
'O' => 831,
'P' => 923,
'Q' => 744,
'R' => 723,
'S' => 749,
'T' => 790,
'U' => 792,
'V' => 695,
'W' => 776,
'X' => 768,
'Y' => 792,
'Z' => 759,
'[' => 707,
'\\' => 708,
']' => 682,
'^' => 701,
'_' => 826,
'`' => 815,
'a' => 789,
'b' => 789,
'c' => 707,
'd' => 687,
'e' => 696,
'f' => 689,
'g' => 786,
'h' => 787,
'i' => 713,
'j' => 791,
'k' => 785,
'l' => 791,
'm' => 873,
'n' => 761,
'o' => 762,
'p' => 762,
'q' => 759,
'r' => 759,
's' => 892,
't' => 892,
'u' => 788,
'v' => 784,
'w' => 438,
'x' => 138,
'y' => 277,
'z' => 415,
'{' => 392,
'|' => 392,
'}' => 668,
'~' => 668,
chr(127) => 0,
chr(128) => 390,
chr(129) => 390,
chr(130) => 317,
chr(131) => 317,
chr(132) => 276,
chr(133) => 276,
chr(134) => 509,
chr(135) => 509,
chr(136) => 410,
chr(137) => 410,
chr(138) => 234,
chr(139) => 234,
chr(140) => 334,
chr(141) => 334,
chr(142) => 0,
chr(143) => 0,
chr(144) => 0,
chr(145) => 0,
chr(146) => 0,
chr(147) => 0,
chr(148) => 0,
chr(149) => 0,
chr(150) => 0,
chr(151) => 0,
chr(152) => 0,
chr(153) => 0,
chr(154) => 0,
chr(155) => 0,
chr(156) => 0,
chr(157) => 0,
chr(158) => 0,
chr(159) => 0,
chr(160) => 0,
chr(161) => 732,
chr(162) => 544,
chr(163) => 544,
chr(164) => 910,
chr(165) => 667,
chr(166) => 760,
chr(167) => 760,
chr(168) => 776,
chr(169) => 595,
chr(170) => 694,
chr(171) => 626,
chr(172) => 788,
chr(173) => 788,
chr(174) => 788,
chr(175) => 788,
chr(176) => 788,
chr(177) => 788,
chr(178) => 788,
chr(179) => 788,
chr(180) => 788,
chr(181) => 788,
chr(182) => 788,
chr(183) => 788,
chr(184) => 788,
chr(185) => 788,
chr(186) => 788,
chr(187) => 788,
chr(188) => 788,
chr(189) => 788,
chr(190) => 788,
chr(191) => 788,
chr(192) => 788,
chr(193) => 788,
chr(194) => 788,
chr(195) => 788,
chr(196) => 788,
chr(197) => 788,
chr(198) => 788,
chr(199) => 788,
chr(200) => 788,
chr(201) => 788,
chr(202) => 788,
chr(203) => 788,
chr(204) => 788,
chr(205) => 788,
chr(206) => 788,
chr(207) => 788,
chr(208) => 788,
chr(209) => 788,
chr(210) => 788,
chr(211) => 788,
chr(212) => 894,
chr(213) => 838,
chr(214) => 1016,
chr(215) => 458,
chr(216) => 748,
chr(217) => 924,
chr(218) => 748,
chr(219) => 918,
chr(220) => 927,
chr(221) => 928,
chr(222) => 928,
chr(223) => 834,
chr(224) => 873,
chr(225) => 828,
chr(226) => 924,
chr(227) => 924,
chr(228) => 917,
chr(229) => 930,
chr(230) => 931,
chr(231) => 463,
chr(232) => 883,
chr(233) => 836,
chr(234) => 836,
chr(235) => 867,
chr(236) => 867,
chr(237) => 696,
chr(238) => 696,
chr(239) => 874,
chr(240) => 0,
chr(241) => 874,
chr(242) => 760,
chr(243) => 946,
chr(244) => 771,
chr(245) => 865,
chr(246) => 771,
chr(247) => 888,
chr(248) => 967,
chr(249) => 888,
chr(250) => 831,
chr(251) => 873,
chr(252) => 927,
chr(253) => 970,
chr(254) => 918,
chr(255) => 0);
/trunk/applications/jrest/lib/File/PDF/fonts/helveticai.php
New file
0,0 → 1,272
<?php
/**
* @package File_PDF
*/
$font_widths['helveticaI'] = array(
chr(0) => 278,
chr(1) => 278,
chr(2) => 278,
chr(3) => 278,
chr(4) => 278,
chr(5) => 278,
chr(6) => 278,
chr(7) => 278,
chr(8) => 278,
chr(9) => 278,
chr(10) => 278,
chr(11) => 278,
chr(12) => 278,
chr(13) => 278,
chr(14) => 278,
chr(15) => 278,
chr(16) => 278,
chr(17) => 278,
chr(18) => 278,
chr(19) => 278,
chr(20) => 278,
chr(21) => 278,
chr(22) => 278,
chr(23) => 278,
chr(24) => 278,
chr(25) => 278,
chr(26) => 278,
chr(27) => 278,
chr(28) => 278,
chr(29) => 278,
chr(30) => 278,
chr(31) => 278,
' ' => 278,
'!' => 278,
'"' => 355,
'#' => 556,
'$' => 556,
'%' => 889,
'&' => 667,
'\'' => 191,
'(' => 333,
')' => 333,
'*' => 389,
'+' => 584,
',' => 278,
'-' => 333,
'.' => 278,
'/' => 278,
'0' => 556,
'1' => 556,
'2' => 556,
'3' => 556,
'4' => 556,
'5' => 556,
'6' => 556,
'7' => 556,
'8' => 556,
'9' => 556,
':' => 278,
';' => 278,
'<' => 584,
'=' => 584,
'>' => 584,
'?' => 556,
'@' => 1015,
'A' => 667,
'B' => 667,
'C' => 722,
'D' => 722,
'E' => 667,
'F' => 611,
'G' => 778,
'H' => 722,
'I' => 278,
'J' => 500,
'K' => 667,
'L' => 556,
'M' => 833,
'N' => 722,
'O' => 778,
'P' => 667,
'Q' => 778,
'R' => 722,
'S' => 667,
'T' => 611,
'U' => 722,
'V' => 667,
'W' => 944,
'X' => 667,
'Y' => 667,
'Z' => 611,
'[' => 278,
'\\' => 278,
']' => 278,
'^' => 469,
'_' => 556,
'`' => 333,
'a' => 556,
'b' => 556,
'c' => 500,
'd' => 556,
'e' => 556,
'f' => 278,
'g' => 556,
'h' => 556,
'i' => 222,
'j' => 222,
'k' => 500,
'l' => 222,
'm' => 833,
'n' => 556,
'o' => 556,
'p' => 556,
'q' => 556,
'r' => 333,
's' => 500,
't' => 278,
'u' => 556,
'v' => 500,
'w' => 722,
'x' => 500,
'y' => 500,
'z' => 500,
'{' => 334,
'|' => 260,
'}' => 334,
'~' => 584,
chr(127) => 350,
chr(128) => 556,
chr(129) => 350,
chr(130) => 222,
chr(131) => 556,
chr(132) => 333,
chr(133) => 1000,
chr(134) => 556,
chr(135) => 556,
chr(136) => 333,
chr(137) => 1000,
chr(138) => 667,
chr(139) => 333,
chr(140) => 1000,
chr(141) => 350,
chr(142) => 611,
chr(143) => 350,
chr(144) => 350,
chr(145) => 222,
chr(146) => 222,
chr(147) => 333,
chr(148) => 333,
chr(149) => 350,
chr(150) => 556,
chr(151) => 1000,
chr(152) => 333,
chr(153) => 1000,
chr(154) => 500,
chr(155) => 333,
chr(156) => 944,
chr(157) => 350,
chr(158) => 500,
chr(159) => 667,
chr(160) => 278,
chr(161) => 333,
chr(162) => 556,
chr(163) => 556,
chr(164) => 556,
chr(165) => 556,
chr(166) => 260,
chr(167) => 556,
chr(168) => 333,
chr(169) => 737,
chr(170) => 370,
chr(171) => 556,
chr(172) => 584,
chr(173) => 333,
chr(174) => 737,
chr(175) => 333,
chr(176) => 400,
chr(177) => 584,
chr(178) => 333,
chr(179) => 333,
chr(180) => 333,
chr(181) => 556,
chr(182) => 537,
chr(183) => 278,
chr(184) => 333,
chr(185) => 333,
chr(186) => 365,
chr(187) => 556,
chr(188) => 834,
chr(189) => 834,
chr(190) => 834,
chr(191) => 611,
chr(192) => 667,
chr(193) => 667,
chr(194) => 667,
chr(195) => 667,
chr(196) => 667,
chr(197) => 667,
chr(198) => 1000,
chr(199) => 722,
chr(200) => 667,
chr(201) => 667,
chr(202) => 667,
chr(203) => 667,
chr(204) => 278,
chr(205) => 278,
chr(206) => 278,
chr(207) => 278,
chr(208) => 722,
chr(209) => 722,
chr(210) => 778,
chr(211) => 778,
chr(212) => 778,
chr(213) => 778,
chr(214) => 778,
chr(215) => 584,
chr(216) => 778,
chr(217) => 722,
chr(218) => 722,
chr(219) => 722,
chr(220) => 722,
chr(221) => 667,
chr(222) => 667,
chr(223) => 611,
chr(224) => 556,
chr(225) => 556,
chr(226) => 556,
chr(227) => 556,
chr(228) => 556,
chr(229) => 556,
chr(230) => 889,
chr(231) => 500,
chr(232) => 556,
chr(233) => 556,
chr(234) => 556,
chr(235) => 556,
chr(236) => 278,
chr(237) => 278,
chr(238) => 278,
chr(239) => 278,
chr(240) => 556,
chr(241) => 556,
chr(242) => 556,
chr(243) => 556,
chr(244) => 556,
chr(245) => 556,
chr(246) => 556,
chr(247) => 584,
chr(248) => 611,
chr(249) => 556,
chr(250) => 556,
chr(251) => 556,
chr(252) => 556,
chr(253) => 500,
chr(254) => 556,
chr(255) => 500);
/trunk/applications/jrest/lib/File/PDF/fonts/helveticabi.php
New file
0,0 → 1,272
<?php
/**
* @package File_PDF
*/
$font_widths['helveticaBI'] = array(
chr(0) => 278,
chr(1) => 278,
chr(2) => 278,
chr(3) => 278,
chr(4) => 278,
chr(5) => 278,
chr(6) => 278,
chr(7) => 278,
chr(8) => 278,
chr(9) => 278,
chr(10) => 278,
chr(11) => 278,
chr(12) => 278,
chr(13) => 278,
chr(14) => 278,
chr(15) => 278,
chr(16) => 278,
chr(17) => 278,
chr(18) => 278,
chr(19) => 278,
chr(20) => 278,
chr(21) => 278,
chr(22) => 278,
chr(23) => 278,
chr(24) => 278,
chr(25) => 278,
chr(26) => 278,
chr(27) => 278,
chr(28) => 278,
chr(29) => 278,
chr(30) => 278,
chr(31) => 278,
' ' => 278,
'!' => 333,
'"' => 474,
'#' => 556,
'$' => 556,
'%' => 889,
'&' => 722,
'\'' => 238,
'(' => 333,
')' => 333,
'*' => 389,
'+' => 584,
',' => 278,
'-' => 333,
'.' => 278,
'/' => 278,
'0' => 556,
'1' => 556,
'2' => 556,
'3' => 556,
'4' => 556,
'5' => 556,
'6' => 556,
'7' => 556,
'8' => 556,
'9' => 556,
':' => 333,
';' => 333,
'<' => 584,
'=' => 584,
'>' => 584,
'?' => 611,
'@' => 975,
'A' => 722,
'B' => 722,
'C' => 722,
'D' => 722,
'E' => 667,
'F' => 611,
'G' => 778,
'H' => 722,
'I' => 278,
'J' => 556,
'K' => 722,
'L' => 611,
'M' => 833,
'N' => 722,
'O' => 778,
'P' => 667,
'Q' => 778,
'R' => 722,
'S' => 667,
'T' => 611,
'U' => 722,
'V' => 667,
'W' => 944,
'X' => 667,
'Y' => 667,
'Z' => 611,
'[' => 333,
'\\' => 278,
']' => 333,
'^' => 584,
'_' => 556,
'`' => 333,
'a' => 556,
'b' => 611,
'c' => 556,
'd' => 611,
'e' => 556,
'f' => 333,
'g' => 611,
'h' => 611,
'i' => 278,
'j' => 278,
'k' => 556,
'l' => 278,
'm' => 889,
'n' => 611,
'o' => 611,
'p' => 611,
'q' => 611,
'r' => 389,
's' => 556,
't' => 333,
'u' => 611,
'v' => 556,
'w' => 778,
'x' => 556,
'y' => 556,
'z' => 500,
'{' => 389,
'|' => 280,
'}' => 389,
'~' => 584,
chr(127) => 350,
chr(128) => 556,
chr(129) => 350,
chr(130) => 278,
chr(131) => 556,
chr(132) => 500,
chr(133) => 1000,
chr(134) => 556,
chr(135) => 556,
chr(136) => 333,
chr(137) => 1000,
chr(138) => 667,
chr(139) => 333,
chr(140) => 1000,
chr(141) => 350,
chr(142) => 611,
chr(143) => 350,
chr(144) => 350,
chr(145) => 278,
chr(146) => 278,
chr(147) => 500,
chr(148) => 500,
chr(149) => 350,
chr(150) => 556,
chr(151) => 1000,
chr(152) => 333,
chr(153) => 1000,
chr(154) => 556,
chr(155) => 333,
chr(156) => 944,
chr(157) => 350,
chr(158) => 500,
chr(159) => 667,
chr(160) => 278,
chr(161) => 333,
chr(162) => 556,
chr(163) => 556,
chr(164) => 556,
chr(165) => 556,
chr(166) => 280,
chr(167) => 556,
chr(168) => 333,
chr(169) => 737,
chr(170) => 370,
chr(171) => 556,
chr(172) => 584,
chr(173) => 333,
chr(174) => 737,
chr(175) => 333,
chr(176) => 400,
chr(177) => 584,
chr(178) => 333,
chr(179) => 333,
chr(180) => 333,
chr(181) => 611,
chr(182) => 556,
chr(183) => 278,
chr(184) => 333,
chr(185) => 333,
chr(186) => 365,
chr(187) => 556,
chr(188) => 834,
chr(189) => 834,
chr(190) => 834,
chr(191) => 611,
chr(192) => 722,
chr(193) => 722,
chr(194) => 722,
chr(195) => 722,
chr(196) => 722,
chr(197) => 722,
chr(198) => 1000,
chr(199) => 722,
chr(200) => 667,
chr(201) => 667,
chr(202) => 667,
chr(203) => 667,
chr(204) => 278,
chr(205) => 278,
chr(206) => 278,
chr(207) => 278,
chr(208) => 722,
chr(209) => 722,
chr(210) => 778,
chr(211) => 778,
chr(212) => 778,
chr(213) => 778,
chr(214) => 778,
chr(215) => 584,
chr(216) => 778,
chr(217) => 722,
chr(218) => 722,
chr(219) => 722,
chr(220) => 722,
chr(221) => 667,
chr(222) => 667,
chr(223) => 611,
chr(224) => 556,
chr(225) => 556,
chr(226) => 556,
chr(227) => 556,
chr(228) => 556,
chr(229) => 556,
chr(230) => 889,
chr(231) => 556,
chr(232) => 556,
chr(233) => 556,
chr(234) => 556,
chr(235) => 556,
chr(236) => 278,
chr(237) => 278,
chr(238) => 278,
chr(239) => 278,
chr(240) => 611,
chr(241) => 611,
chr(242) => 611,
chr(243) => 611,
chr(244) => 611,
chr(245) => 611,
chr(246) => 611,
chr(247) => 584,
chr(248) => 611,
chr(249) => 611,
chr(250) => 611,
chr(251) => 611,
chr(252) => 611,
chr(253) => 556,
chr(254) => 611,
chr(255) => 556);
/trunk/applications/jrest/lib/File/PDF/fonts/times.php
New file
0,0 → 1,272
<?php
/**
* @package File_PDF
*/
$font_widths['times'] = array(
chr(0) => 250,
chr(1) => 250,
chr(2) => 250,
chr(3) => 250,
chr(4) => 250,
chr(5) => 250,
chr(6) => 250,
chr(7) => 250,
chr(8) => 250,
chr(9) => 250,
chr(10) => 250,
chr(11) => 250,
chr(12) => 250,
chr(13) => 250,
chr(14) => 250,
chr(15) => 250,
chr(16) => 250,
chr(17) => 250,
chr(18) => 250,
chr(19) => 250,
chr(20) => 250,
chr(21) => 250,
chr(22) => 250,
chr(23) => 250,
chr(24) => 250,
chr(25) => 250,
chr(26) => 250,
chr(27) => 250,
chr(28) => 250,
chr(29) => 250,
chr(30) => 250,
chr(31) => 250,
' ' => 250,
'!' => 333,
'"' => 408,
'#' => 500,
'$' => 500,
'%' => 833,
'&' => 778,
'\'' => 180,
'(' => 333,
')' => 333,
'*' => 500,
'+' => 564,
',' => 250,
'-' => 333,
'.' => 250,
'/' => 278,
'0' => 500,
'1' => 500,
'2' => 500,
'3' => 500,
'4' => 500,
'5' => 500,
'6' => 500,
'7' => 500,
'8' => 500,
'9' => 500,
':' => 278,
';' => 278,
'<' => 564,
'=' => 564,
'>' => 564,
'?' => 444,
'@' => 921,
'A' => 722,
'B' => 667,
'C' => 667,
'D' => 722,
'E' => 611,
'F' => 556,
'G' => 722,
'H' => 722,
'I' => 333,
'J' => 389,
'K' => 722,
'L' => 611,
'M' => 889,
'N' => 722,
'O' => 722,
'P' => 556,
'Q' => 722,
'R' => 667,
'S' => 556,
'T' => 611,
'U' => 722,
'V' => 722,
'W' => 944,
'X' => 722,
'Y' => 722,
'Z' => 611,
'[' => 333,
'\\' => 278,
']' => 333,
'^' => 469,
'_' => 500,
'`' => 333,
'a' => 444,
'b' => 500,
'c' => 444,
'd' => 500,
'e' => 444,
'f' => 333,
'g' => 500,
'h' => 500,
'i' => 278,
'j' => 278,
'k' => 500,
'l' => 278,
'm' => 778,
'n' => 500,
'o' => 500,
'p' => 500,
'q' => 500,
'r' => 333,
's' => 389,
't' => 278,
'u' => 500,
'v' => 500,
'w' => 722,
'x' => 500,
'y' => 500,
'z' => 444,
'{' => 480,
'|' => 200,
'}' => 480,
'~' => 541,
chr(127) => 350,
chr(128) => 500,
chr(129) => 350,
chr(130) => 333,
chr(131) => 500,
chr(132) => 444,
chr(133) => 1000,
chr(134) => 500,
chr(135) => 500,
chr(136) => 333,
chr(137) => 1000,
chr(138) => 556,
chr(139) => 333,
chr(140) => 889,
chr(141) => 350,
chr(142) => 611,
chr(143) => 350,
chr(144) => 350,
chr(145) => 333,
chr(146) => 333,
chr(147) => 444,
chr(148) => 444,
chr(149) => 350,
chr(150) => 500,
chr(151) => 1000,
chr(152) => 333,
chr(153) => 980,
chr(154) => 389,
chr(155) => 333,
chr(156) => 722,
chr(157) => 350,
chr(158) => 444,
chr(159) => 722,
chr(160) => 250,
chr(161) => 333,
chr(162) => 500,
chr(163) => 500,
chr(164) => 500,
chr(165) => 500,
chr(166) => 200,
chr(167) => 500,
chr(168) => 333,
chr(169) => 760,
chr(170) => 276,
chr(171) => 500,
chr(172) => 564,
chr(173) => 333,
chr(174) => 760,
chr(175) => 333,
chr(176) => 400,
chr(177) => 564,
chr(178) => 300,
chr(179) => 300,
chr(180) => 333,
chr(181) => 500,
chr(182) => 453,
chr(183) => 250,
chr(184) => 333,
chr(185) => 300,
chr(186) => 310,
chr(187) => 500,
chr(188) => 750,
chr(189) => 750,
chr(190) => 750,
chr(191) => 444,
chr(192) => 722,
chr(193) => 722,
chr(194) => 722,
chr(195) => 722,
chr(196) => 722,
chr(197) => 722,
chr(198) => 889,
chr(199) => 667,
chr(200) => 611,
chr(201) => 611,
chr(202) => 611,
chr(203) => 611,
chr(204) => 333,
chr(205) => 333,
chr(206) => 333,
chr(207) => 333,
chr(208) => 722,
chr(209) => 722,
chr(210) => 722,
chr(211) => 722,
chr(212) => 722,
chr(213) => 722,
chr(214) => 722,
chr(215) => 564,
chr(216) => 722,
chr(217) => 722,
chr(218) => 722,
chr(219) => 722,
chr(220) => 722,
chr(221) => 722,
chr(222) => 556,
chr(223) => 500,
chr(224) => 444,
chr(225) => 444,
chr(226) => 444,
chr(227) => 444,
chr(228) => 444,
chr(229) => 444,
chr(230) => 667,
chr(231) => 444,
chr(232) => 444,
chr(233) => 444,
chr(234) => 444,
chr(235) => 444,
chr(236) => 278,
chr(237) => 278,
chr(238) => 278,
chr(239) => 278,
chr(240) => 500,
chr(241) => 500,
chr(242) => 500,
chr(243) => 500,
chr(244) => 500,
chr(245) => 500,
chr(246) => 500,
chr(247) => 564,
chr(248) => 500,
chr(249) => 500,
chr(250) => 500,
chr(251) => 500,
chr(252) => 500,
chr(253) => 500,
chr(254) => 500,
chr(255) => 500);
/trunk/applications/jrest/lib/File/PDF/fonts
New file
Property changes:
Added: svn:ignore
+.directory
/trunk/applications/jrest/lib/File/PDF
New file
Property changes:
Added: svn:ignore
+.directory
/trunk/applications/jrest/lib/File
New file
Property changes:
Added: svn:ignore
+.directory
/trunk/applications/jrest/lib/HTTP/Download.php
New file
0,0 → 1,1034
<?php
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
 
/**
* HTTP::Download
*
* PHP versions 4 and 5
*
* @category HTTP
* @package HTTP_Download
* @author Michael Wallner <mike@php.net>
* @copyright 2003-2005 Michael Wallner
* @license BSD, revised
* @version CVS: $Id$
* @link http://pear.php.net/package/HTTP_Download
*/
 
// {{{ includes
/**
* Requires PEAR
*/
require_once 'PEAR.php';
 
/**
* Requires HTTP_Header
*/
require_once 'HTTP/Header.php';
// }}}
 
// {{{ constants
/**#@+ Use with HTTP_Download::setContentDisposition() **/
/**
* Send data as attachment
*/
define('HTTP_DOWNLOAD_ATTACHMENT', 'attachment');
/**
* Send data inline
*/
define('HTTP_DOWNLOAD_INLINE', 'inline');
/**#@-**/
 
/**#@+ Use with HTTP_Download::sendArchive() **/
/**
* Send as uncompressed tar archive
*/
define('HTTP_DOWNLOAD_TAR', 'TAR');
/**
* Send as gzipped tar archive
*/
define('HTTP_DOWNLOAD_TGZ', 'TGZ');
/**
* Send as bzip2 compressed tar archive
*/
define('HTTP_DOWNLOAD_BZ2', 'BZ2');
/**
* Send as zip archive
*/
define('HTTP_DOWNLOAD_ZIP', 'ZIP');
/**#@-**/
 
/**#@+
* Error constants
*/
define('HTTP_DOWNLOAD_E_HEADERS_SENT', -1);
define('HTTP_DOWNLOAD_E_NO_EXT_ZLIB', -2);
define('HTTP_DOWNLOAD_E_NO_EXT_MMAGIC', -3);
define('HTTP_DOWNLOAD_E_INVALID_FILE', -4);
define('HTTP_DOWNLOAD_E_INVALID_PARAM', -5);
define('HTTP_DOWNLOAD_E_INVALID_RESOURCE', -6);
define('HTTP_DOWNLOAD_E_INVALID_REQUEST', -7);
define('HTTP_DOWNLOAD_E_INVALID_CONTENT_TYPE', -8);
define('HTTP_DOWNLOAD_E_INVALID_ARCHIVE_TYPE', -9);
/**#@-**/
// }}}
 
/**
* Send HTTP Downloads/Responses.
*
* With this package you can handle (hidden) downloads.
* It supports partial downloads, resuming and sending
* raw data ie. from database BLOBs.
*
* <i>ATTENTION:</i>
* You shouldn't use this package together with ob_gzhandler or
* zlib.output_compression enabled in your php.ini, especially
* if you want to send already gzipped data!
*
* @access public
* @version $Revision$
*/
class HTTP_Download
{
// {{{ protected member variables
/**
* Path to file for download
*
* @see HTTP_Download::setFile()
* @access protected
* @var string
*/
var $file = '';
/**
* Data for download
*
* @see HTTP_Download::setData()
* @access protected
* @var string
*/
var $data = null;
/**
* Resource handle for download
*
* @see HTTP_Download::setResource()
* @access protected
* @var int
*/
var $handle = null;
/**
* Whether to gzip the download
*
* @access protected
* @var bool
*/
var $gzip = false;
/**
* Whether to allow caching of the download on the clients side
*
* @access protected
* @var bool
*/
var $cache = true;
/**
* Size of download
*
* @access protected
* @var int
*/
var $size = 0;
/**
* Last modified
*
* @access protected
* @var int
*/
var $lastModified = 0;
/**
* HTTP headers
*
* @access protected
* @var array
*/
var $headers = array(
'Content-Type' => 'application/x-octetstream',
'Pragma' => 'cache',
'Cache-Control' => 'public, must-revalidate, max-age=0',
'Accept-Ranges' => 'bytes',
'X-Sent-By' => 'PEAR::HTTP::Download'
);
/**
* HTTP_Header
*
* @access protected
* @var object
*/
var $HTTP = null;
/**
* ETag
*
* @access protected
* @var string
*/
var $etag = '';
/**
* Buffer Size
*
* @access protected
* @var int
*/
var $bufferSize = 2097152;
/**
* Throttle Delay
*
* @access protected
* @var float
*/
var $throttleDelay = 0;
/**
* Sent Bytes
*
* @access public
* @var int
*/
var $sentBytes = 0;
// }}}
// {{{ constructor
/**
* Constructor
*
* Set supplied parameters.
*
* @access public
* @param array $params associative array of parameters
*
* <b>one of:</b>
* o 'file' => path to file for download
* o 'data' => raw data for download
* o 'resource' => resource handle for download
* <br/>
* <b>and any of:</b>
* o 'cache' => whether to allow cs caching
* o 'gzip' => whether to gzip the download
* o 'lastmodified' => unix timestamp
* o 'contenttype' => content type of download
* o 'contentdisposition' => content disposition
* o 'buffersize' => amount of bytes to buffer
* o 'throttledelay' => amount of secs to sleep
* o 'cachecontrol' => cache privacy and validity
*
* <br />
* 'Content-Disposition' is not HTTP compliant, but most browsers
* follow this header, so it was borrowed from MIME standard.
*
* It looks like this: <br />
* "Content-Disposition: attachment; filename=example.tgz".
*
* @see HTTP_Download::setContentDisposition()
*/
function HTTP_Download($params = array())
{
$this->HTTP = new HTTP_Header;
$this->setParams($params);
}
// }}}
// {{{ public methods
/**
* Set parameters
*
* Set supplied parameters through its accessor methods.
*
* @access public
* @return mixed Returns true on success or PEAR_Error on failure.
* @param array $params associative array of parameters
*
* @see HTTP_Download::HTTP_Download()
*/
function setParams($params)
{
foreach((array) $params as $param => $value){
$method = 'set'. $param;
if (!method_exists($this, $method)) {
return PEAR::raiseError(
"Method '$method' doesn't exist.",
HTTP_DOWNLOAD_E_INVALID_PARAM
);
}
$e = call_user_func_array(array(&$this, $method), (array) $value);
if (PEAR::isError($e)) {
return $e;
}
}
return true;
}
/**
* Set path to file for download
*
* The Last-Modified header will be set to files filemtime(), actually.
* Returns PEAR_Error (HTTP_DOWNLOAD_E_INVALID_FILE) if file doesn't exist.
* Sends HTTP 404 status if $send_404 is set to true.
*
* @access public
* @return mixed Returns true on success or PEAR_Error on failure.
* @param string $file path to file for download
* @param bool $send_404 whether to send HTTP/404 if
* the file wasn't found
*/
function setFile($file, $send_404 = true)
{
$file = realpath($file);
if (!is_file($file)) {
if ($send_404) {
$this->HTTP->sendStatusCode(404);
}
return PEAR::raiseError(
"File '$file' not found.",
HTTP_DOWNLOAD_E_INVALID_FILE
);
}
$this->setLastModified(filemtime($file));
$this->file = $file;
$this->size = filesize($file);
return true;
}
/**
* Set data for download
*
* Set $data to null if you want to unset this.
*
* @access public
* @return void
* @param $data raw data to send
*/
function setData($data = null)
{
$this->data = $data;
$this->size = strlen($data);
}
/**
* Set resource for download
*
* The resource handle supplied will be closed after sending the download.
* Returns a PEAR_Error (HTTP_DOWNLOAD_E_INVALID_RESOURCE) if $handle
* is no valid resource. Set $handle to null if you want to unset this.
*
* @access public
* @return mixed Returns true on success or PEAR_Error on failure.
* @param int $handle resource handle
*/
function setResource($handle = null)
{
if (!isset($handle)) {
$this->handle = null;
$this->size = 0;
return true;
}
if (is_resource($handle)) {
$this->handle = $handle;
$filestats = fstat($handle);
$this->size = $filestats['size'];
return true;
}
 
return PEAR::raiseError(
"Handle '$handle' is no valid resource.",
HTTP_DOWNLOAD_E_INVALID_RESOURCE
);
}
/**
* Whether to gzip the download
*
* Returns a PEAR_Error (HTTP_DOWNLOAD_E_NO_EXT_ZLIB)
* if ext/zlib is not available/loadable.
*
* @access public
* @return mixed Returns true on success or PEAR_Error on failure.
* @param bool $gzip whether to gzip the download
*/
function setGzip($gzip = false)
{
if ($gzip && !PEAR::loadExtension('zlib')){
return PEAR::raiseError(
'GZIP compression (ext/zlib) not available.',
HTTP_DOWNLOAD_E_NO_EXT_ZLIB
);
}
$this->gzip = (bool) $gzip;
return true;
}
 
/**
* Whether to allow caching
*
* If set to true (default) we'll send some headers that are commonly
* used for caching purposes like ETag, Cache-Control and Last-Modified.
*
* If caching is disabled, we'll send the download no matter if it
* would actually be cached at the client side.
*
* @access public
* @return void
* @param bool $cache whether to allow caching
*/
function setCache($cache = true)
{
$this->cache = (bool) $cache;
}
/**
* Whether to allow proxies to cache
*
* If set to 'private' proxies shouldn't cache the response.
* This setting defaults to 'public' and affects only cached responses.
*
* @access public
* @return bool
* @param string $cache private or public
* @param int $maxage maximum age of the client cache entry
*/
function setCacheControl($cache = 'public', $maxage = 0)
{
switch ($cache = strToLower($cache))
{
case 'private':
case 'public':
$this->headers['Cache-Control'] =
$cache .', must-revalidate, max-age='. abs($maxage);
return true;
break;
}
return false;
}
/**
* Set ETag
*
* Sets a user-defined ETag for cache-validation. The ETag is usually
* generated by HTTP_Download through its payload information.
*
* @access public
* @return void
* @param string $etag Entity tag used for strong cache validation.
*/
function setETag($etag = null)
{
$this->etag = (string) $etag;
}
/**
* Set Size of Buffer
*
* The amount of bytes specified as buffer size is the maximum amount
* of data read at once from resources or files. The default size is 2M
* (2097152 bytes). Be aware that if you enable gzip compression and
* you set a very low buffer size that the actual file size may grow
* due to added gzip headers for each sent chunk of the specified size.
*
* Returns PEAR_Error (HTTP_DOWNLOAD_E_INVALID_PARAM) if $size is not
* greater than 0 bytes.
*
* @access public
* @return mixed Returns true on success or PEAR_Error on failure.
* @param int $bytes Amount of bytes to use as buffer.
*/
function setBufferSize($bytes = 2097152)
{
if (0 >= $bytes) {
return PEAR::raiseError(
'Buffer size must be greater than 0 bytes ('. $bytes .' given)',
HTTP_DOWNLOAD_E_INVALID_PARAM);
}
$this->bufferSize = abs($bytes);
return true;
}
/**
* Set Throttle Delay
*
* Set the amount of seconds to sleep after each chunck that has been
* sent. One can implement some sort of throttle through adjusting the
* buffer size and the throttle delay. With the following settings
* HTTP_Download will sleep a second after each 25 K of data sent.
*
* <code>
* Array(
* 'throttledelay' => 1,
* 'buffersize' => 1024 * 25,
* )
* </code>
*
* Just be aware that if gzipp'ing is enabled, decreasing the chunk size
* too much leads to proportionally increased network traffic due to added
* gzip header and bottom bytes around each chunk.
*
* @access public
* @return void
* @param float $seconds Amount of seconds to sleep after each
* chunk that has been sent.
*/
function setThrottleDelay($seconds = 0)
{
$this->throttleDelay = abs($seconds) * 1000;
}
/**
* Set "Last-Modified"
*
* This is usually determined by filemtime() in HTTP_Download::setFile()
* If you set raw data for download with HTTP_Download::setData() and you
* want do send an appropiate "Last-Modified" header, you should call this
* method.
*
* @access public
* @return void
* @param int unix timestamp
*/
function setLastModified($last_modified)
{
$this->lastModified = $this->headers['Last-Modified'] = (int) $last_modified;
}
/**
* Set Content-Disposition header
*
* @see HTTP_Download::HTTP_Download
*
* @access public
* @return void
* @param string $disposition whether to send the download
* inline or as attachment
* @param string $file_name the filename to display in
* the browser's download window
*
* <b>Example:</b>
* <code>
* $HTTP_Download->setContentDisposition(
* HTTP_DOWNLOAD_ATTACHMENT,
* 'download.tgz'
* );
* </code>
*/
function setContentDisposition( $disposition = HTTP_DOWNLOAD_ATTACHMENT,
$file_name = null)
{
$cd = $disposition;
if (isset($file_name)) {
$cd .= '; filename="' . $file_name . '"';
} elseif ($this->file) {
$cd .= '; filename="' . basename($this->file) . '"';
}
$this->headers['Content-Disposition'] = $cd;
}
/**
* Set content type of the download
*
* Default content type of the download will be 'application/x-octetstream'.
* Returns PEAR_Error (HTTP_DOWNLOAD_E_INVALID_CONTENT_TYPE) if
* $content_type doesn't seem to be valid.
*
* @access public
* @return mixed Returns true on success or PEAR_Error on failure.
* @param string $content_type content type of file for download
*/
function setContentType($content_type = 'application/x-octetstream')
{
if (!preg_match('/^[a-z]+\w*\/[a-z]+[\w.;= -]*$/', $content_type)) {
return PEAR::raiseError(
"Invalid content type '$content_type' supplied.",
HTTP_DOWNLOAD_E_INVALID_CONTENT_TYPE
);
}
$this->headers['Content-Type'] = $content_type;
return true;
}
/**
* Guess content type of file
*
* First we try to use PEAR::MIME_Type, if installed, to detect the content
* type, else we check if ext/mime_magic is loaded and properly configured.
*
* Returns PEAR_Error if:
* o if PEAR::MIME_Type failed to detect a proper content type
* (HTTP_DOWNLOAD_E_INVALID_CONTENT_TYPE)
* o ext/magic.mime is not installed, or not properly configured
* (HTTP_DOWNLOAD_E_NO_EXT_MMAGIC)
* o mime_content_type() couldn't guess content type or returned
* a content type considered to be bogus by setContentType()
* (HTTP_DOWNLOAD_E_INVALID_CONTENT_TYPE)
*
* @access public
* @return mixed Returns true on success or PEAR_Error on failure.
*/
function guessContentType()
{
if (class_exists('MIME_Type') || @include_once 'MIME/Type.php') {
if (PEAR::isError($mime_type = MIME_Type::autoDetect($this->file))) {
return PEAR::raiseError($mime_type->getMessage(),
HTTP_DOWNLOAD_E_INVALID_CONTENT_TYPE);
}
return $this->setContentType($mime_type);
}
if (!function_exists('mime_content_type')) {
return PEAR::raiseError(
'This feature requires ext/mime_magic!',
HTTP_DOWNLOAD_E_NO_EXT_MMAGIC
);
}
if (!is_file(ini_get('mime_magic.magicfile'))) {
return PEAR::raiseError(
'ext/mime_magic is loaded but not properly configured!',
HTTP_DOWNLOAD_E_NO_EXT_MMAGIC
);
}
if (!$content_type = @mime_content_type($this->file)) {
return PEAR::raiseError(
'Couldn\'t guess content type with mime_content_type().',
HTTP_DOWNLOAD_E_INVALID_CONTENT_TYPE
);
}
return $this->setContentType($content_type);
}
 
/**
* Send
*
* Returns PEAR_Error if:
* o HTTP headers were already sent (HTTP_DOWNLOAD_E_HEADERS_SENT)
* o HTTP Range was invalid (HTTP_DOWNLOAD_E_INVALID_REQUEST)
*
* @access public
* @return mixed Returns true on success or PEAR_Error on failure.
* @param bool $autoSetContentDisposition Whether to set the
* Content-Disposition header if it isn't already.
*/
function send($autoSetContentDisposition = true)
{
if (headers_sent()) {
return PEAR::raiseError(
'Headers already sent.',
HTTP_DOWNLOAD_E_HEADERS_SENT
);
}
if (!ini_get('safe_mode')) {
@set_time_limit(0);
}
if ($autoSetContentDisposition &&
!isset($this->headers['Content-Disposition'])) {
$this->setContentDisposition();
}
if ($this->cache) {
$this->headers['ETag'] = $this->generateETag();
if ($this->isCached()) {
$this->HTTP->sendStatusCode(304);
$this->sendHeaders();
return true;
}
} else {
unset($this->headers['Last-Modified']);
}
if (ob_get_level()) {
while (@ob_end_clean());
}
if ($this->gzip) {
@ob_start('ob_gzhandler');
} else {
ob_start();
}
$this->sentBytes = 0;
if ($this->isRangeRequest()) {
$this->HTTP->sendStatusCode(206);
$chunks = $this->getChunks();
} else {
$this->HTTP->sendStatusCode(200);
$chunks = array(array(0, $this->size));
if (!$this->gzip && count(ob_list_handlers()) < 2) {
$this->headers['Content-Length'] = $this->size;
}
}
 
if (PEAR::isError($e = $this->sendChunks($chunks))) {
ob_end_clean();
$this->HTTP->sendStatusCode(416);
return $e;
}
ob_end_flush();
flush();
return true;
}
 
/**
* Static send
*
* @see HTTP_Download::HTTP_Download()
* @see HTTP_Download::send()
*
* @static
* @access public
* @return mixed Returns true on success or PEAR_Error on failure.
* @param array $params associative array of parameters
* @param bool $guess whether HTTP_Download::guessContentType()
* should be called
*/
function staticSend($params, $guess = false)
{
$d = new HTTP_Download();
$e = $d->setParams($params);
if (PEAR::isError($e)) {
return $e;
}
if ($guess) {
$e = $d->guessContentType();
if (PEAR::isError($e)) {
return $e;
}
}
return $d->send();
}
/**
* Send a bunch of files or directories as an archive
*
* Example:
* <code>
* require_once 'HTTP/Download.php';
* HTTP_Download::sendArchive(
* 'myArchive.tgz',
* '/var/ftp/pub/mike',
* HTTP_DOWNLOAD_TGZ,
* '',
* '/var/ftp/pub'
* );
* </code>
*
* @see Archive_Tar::createModify()
* @deprecated use HTTP_Download_Archive::send()
* @static
* @access public
* @return mixed Returns true on success or PEAR_Error on failure.
* @param string $name name the sent archive should have
* @param mixed $files files/directories
* @param string $type archive type
* @param string $add_path path that should be prepended to the files
* @param string $strip_path path that should be stripped from the files
*/
function sendArchive( $name,
$files,
$type = HTTP_DOWNLOAD_TGZ,
$add_path = '',
$strip_path = '')
{
require_once 'HTTP/Download/Archive.php';
return HTTP_Download_Archive::send($name, $files, $type,
$add_path, $strip_path);
}
// }}}
// {{{ protected methods
/**
* Generate ETag
*
* @access protected
* @return string
*/
function generateETag()
{
if (!$this->etag) {
if ($this->data) {
$md5 = md5($this->data);
} else {
$fst = is_resource($this->handle) ?
fstat($this->handle) : stat($this->file);
$md5 = md5($fst['mtime'] .'='. $fst['ino'] .'='. $fst['size']);
}
$this->etag = '"' . $md5 . '-' . crc32($md5) . '"';
}
return $this->etag;
}
/**
* Send multiple chunks
*
* @access protected
* @return mixed Returns true on success or PEAR_Error on failure.
* @param array $chunks
*/
function sendChunks($chunks)
{
if (count($chunks) == 1) {
return $this->sendChunk(current($chunks));
}
 
$bound = uniqid('HTTP_DOWNLOAD-', true);
$cType = $this->headers['Content-Type'];
$this->headers['Content-Type'] =
'multipart/byteranges; boundary=' . $bound;
$this->sendHeaders();
foreach ($chunks as $chunk){
if (PEAR::isError($e = $this->sendChunk($chunk, $cType, $bound))) {
return $e;
}
}
#echo "\r\n--$bound--\r\n";
return true;
}
/**
* Send chunk of data
*
* @access protected
* @return mixed Returns true on success or PEAR_Error on failure.
* @param array $chunk start and end offset of the chunk to send
* @param string $cType actual content type
* @param string $bound boundary for multipart/byteranges
*/
function sendChunk($chunk, $cType = null, $bound = null)
{
list($offset, $lastbyte) = $chunk;
$length = ($lastbyte - $offset) + 1;
if ($length < 1) {
return PEAR::raiseError(
"Error processing range request: $offset-$lastbyte/$length",
HTTP_DOWNLOAD_E_INVALID_REQUEST
);
}
$range = $offset . '-' . $lastbyte . '/' . $this->size;
if (isset($cType, $bound)) {
echo "\r\n--$bound\r\n",
"Content-Type: $cType\r\n",
"Content-Range: bytes $range\r\n\r\n";
} else {
if ($this->isRangeRequest()) {
$this->headers['Content-Length'] = $length;
$this->headers['Content-Range'] = 'bytes '. $range;
}
$this->sendHeaders();
}
 
if ($this->data) {
while (($length -= $this->bufferSize) > 0) {
$this->flush(substr($this->data, $offset, $this->bufferSize));
$this->throttleDelay and $this->sleep();
$offset += $this->bufferSize;
}
if ($length) {
$this->flush(substr($this->data, $offset, $this->bufferSize + $length));
}
} else {
if (!is_resource($this->handle)) {
$this->handle = fopen($this->file, 'rb');
}
fseek($this->handle, $offset);
while (($length -= $this->bufferSize) > 0) {
$this->flush(fread($this->handle, $this->bufferSize));
$this->throttleDelay and $this->sleep();
}
if ($length) {
$this->flush(fread($this->handle, $this->bufferSize + $length));
}
}
return true;
}
/**
* Get chunks to send
*
* @access protected
* @return array
*/
function getChunks()
{
$parts = array();
foreach (explode(',', $this->getRanges()) as $chunk){
list($o, $e) = explode('-', $chunk);
if ($e >= $this->size || (empty($e) && $e !== 0 && $e !== '0')) {
$e = $this->size - 1;
}
if (empty($o) && $o !== 0 && $o !== '0') {
$o = $this->size - $e;
$e = $this->size - 1;
}
$parts[] = array($o, $e);
}
return $parts;
}
/**
* Check if range is requested
*
* @access protected
* @return bool
*/
function isRangeRequest()
{
if (!isset($_SERVER['HTTP_RANGE'])) {
return false;
}
return $this->isValidRange();
}
/**
* Get range request
*
* @access protected
* @return array
*/
function getRanges()
{
return preg_match('/^bytes=((\d*-\d*,? ?)+)$/',
@$_SERVER['HTTP_RANGE'], $matches) ? $matches[1] : array();
}
/**
* Check if entity is cached
*
* @access protected
* @return bool
*/
function isCached()
{
return (
(isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) &&
$this->lastModified == strtotime(current($a = explode(
';', $_SERVER['HTTP_IF_MODIFIED_SINCE'])))) ||
(isset($_SERVER['HTTP_IF_NONE_MATCH']) &&
$this->compareAsterisk('HTTP_IF_NONE_MATCH', $this->etag))
);
}
/**
* Check if entity hasn't changed
*
* @access protected
* @return bool
*/
function isValidRange()
{
if (isset($_SERVER['HTTP_IF_MATCH']) &&
!$this->compareAsterisk('HTTP_IF_MATCH', $this->etag)) {
return false;
}
if (isset($_SERVER['HTTP_IF_RANGE']) &&
$_SERVER['HTTP_IF_RANGE'] !== $this->etag &&
strtotime($_SERVER['HTTP_IF_RANGE']) !== $this->lastModified) {
return false;
}
if (isset($_SERVER['HTTP_IF_UNMODIFIED_SINCE'])) {
$lm = current($a = explode(';', $_SERVER['HTTP_IF_UNMODIFIED_SINCE']));
if (strtotime($lm) !== $this->lastModified) {
return false;
}
}
if (isset($_SERVER['HTTP_UNLESS_MODIFIED_SINCE'])) {
$lm = current($a = explode(';', $_SERVER['HTTP_UNLESS_MODIFIED_SINCE']));
if (strtotime($lm) !== $this->lastModified) {
return false;
}
}
return true;
}
/**
* Compare against an asterisk or check for equality
*
* @access protected
* @return bool
* @param string key for the $_SERVER array
* @param string string to compare
*/
function compareAsterisk($svar, $compare)
{
foreach (array_map('trim', explode(',', $_SERVER[$svar])) as $request) {
if ($request === '*' || $request === $compare) {
return true;
}
}
return false;
}
/**
* Send HTTP headers
*
* @access protected
* @return void
*/
function sendHeaders()
{
foreach ($this->headers as $header => $value) {
$this->HTTP->setHeader($header, $value);
}
$this->HTTP->sendHeaders();
/* NSAPI won't output anything if we did this */
if (strncasecmp(PHP_SAPI, 'nsapi', 5)) {
ob_flush();
flush();
}
}
/**
* Flush
*
* @access protected
* @return void
* @param string $data
*/
function flush($data = '')
{
if ($dlen = strlen($data)) {
$this->sentBytes += $dlen;
echo $data;
}
ob_flush();
flush();
}
/**
* Sleep
*
* @access protected
* @return void
*/
function sleep()
{
if (OS_WINDOWS) {
com_message_pump($this->throttleDelay);
} else {
usleep($this->throttleDelay * 1000);
}
}
// }}}
}
?>
/trunk/applications/jrest/lib/HTTP/HTTP/Header.php
New file
0,0 → 1,531
<?php
/* vim: set expandtab tabstop=4 shiftwidth=4 softtabstop=4: */
 
/**
* HTTP::Header
*
* PHP versions 4 and 5
*
* @category HTTP
* @package HTTP_Header
* @author Wolfram Kriesing <wk@visionp.de>
* @author Davey Shafik <davey@php.net>
* @author Michael Wallner <mike@php.net>
* @copyright 2003-2005 The Authors
* @license BSD, revised
* @version CVS: $Id$
* @link http://pear.php.net/package/HTTP_Header
*/
 
/**
* Requires HTTP
*/
require_once 'HTTP.php';
 
/**#@+
* Information Codes
*/
define('HTTP_HEADER_STATUS_100', '100 Continue');
define('HTTP_HEADER_STATUS_101', '101 Switching Protocols');
define('HTTP_HEADER_STATUS_102', '102 Processing');
define('HTTP_HEADER_STATUS_INFORMATIONAL',1);
/**#@-*/
 
/**#+
* Success Codes
*/
define('HTTP_HEADER_STATUS_200', '200 OK');
define('HTTP_HEADER_STATUS_201', '201 Created');
define('HTTP_HEADER_STATUS_202', '202 Accepted');
define('HTTP_HEADER_STATUS_203', '203 Non-Authoritative Information');
define('HTTP_HEADER_STATUS_204', '204 No Content');
define('HTTP_HEADER_STATUS_205', '205 Reset Content');
define('HTTP_HEADER_STATUS_206', '206 Partial Content');
define('HTTP_HEADER_STATUS_207', '207 Multi-Status');
define('HTTP_HEADER_STATUS_SUCCESSFUL',2);
/**#@-*/
 
/**#@+
* Redirection Codes
*/
define('HTTP_HEADER_STATUS_300', '300 Multiple Choices');
define('HTTP_HEADER_STATUS_301', '301 Moved Permanently');
define('HTTP_HEADER_STATUS_302', '302 Found');
define('HTTP_HEADER_STATUS_303', '303 See Other');
define('HTTP_HEADER_STATUS_304', '304 Not Modified');
define('HTTP_HEADER_STATUS_305', '305 Use Proxy');
define('HTTP_HEADER_STATUS_306', '306 (Unused)');
define('HTTP_HEADER_STATUS_307', '307 Temporary Redirect');
define('HTTP_HEADER_STATUS_REDIRECT',3);
/**#@-*/
 
/**#@+
* Error Codes
*/
define('HTTP_HEADER_STATUS_400', '400 Bad Request');
define('HTTP_HEADER_STATUS_401', '401 Unauthorized');
define('HTTP_HEADER_STATUS_402', '402 Payment Granted');
define('HTTP_HEADER_STATUS_403', '403 Forbidden');
define('HTTP_HEADER_STATUS_404', '404 File Not Found');
define('HTTP_HEADER_STATUS_405', '405 Method Not Allowed');
define('HTTP_HEADER_STATUS_406', '406 Not Acceptable');
define('HTTP_HEADER_STATUS_407', '407 Proxy Authentication Required');
define('HTTP_HEADER_STATUS_408', '408 Request Time-out');
define('HTTP_HEADER_STATUS_409', '409 Conflict');
define('HTTP_HEADER_STATUS_410', '410 Gone');
define('HTTP_HEADER_STATUS_411', '411 Length Required');
define('HTTP_HEADER_STATUS_412', '412 Precondition Failed');
define('HTTP_HEADER_STATUS_413', '413 Request Entity Too Large');
define('HTTP_HEADER_STATUS_414', '414 Request-URI Too Large');
define('HTTP_HEADER_STATUS_415', '415 Unsupported Media Type');
define('HTTP_HEADER_STATUS_416', '416 Requested range not satisfiable');
define('HTTP_HEADER_STATUS_417', '417 Expectation Failed');
define('HTTP_HEADER_STATUS_422', '422 Unprocessable Entity');
define('HTTP_HEADER_STATUS_423', '423 Locked');
define('HTTP_HEADER_STATUS_424', '424 Failed Dependency');
define('HTTP_HEADER_STATUS_CLIENT_ERROR',4);
/**#@-*/
 
/**#@+
* Server Errors
*/
define('HTTP_HEADER_STATUS_500', '500 Internal Server Error');
define('HTTP_HEADER_STATUS_501', '501 Not Implemented');
define('HTTP_HEADER_STATUS_502', '502 Bad Gateway');
define('HTTP_HEADER_STATUS_503', '503 Service Unavailable');
define('HTTP_HEADER_STATUS_504', '504 Gateway Time-out');
define('HTTP_HEADER_STATUS_505', '505 HTTP Version not supported');
define('HTTP_HEADER_STATUS_507', '507 Insufficient Storage');
define('HTTP_HEADER_STATUS_SERVER_ERROR',5);
/**#@-*/
 
/**
* HTTP_Header
*
* @package HTTP_Header
* @category HTTP
* @access public
* @version $Revision$
*/
class HTTP_Header extends HTTP
{
/**
* Default Headers
*
* The values that are set as default, are the same as PHP sends by default.
*
* @var array
* @access private
*/
var $_headers = array(
'content-type' => 'text/html',
'pragma' => 'no-cache',
'cache-control' => 'no-store, no-cache, must-revalidate, post-check=0, pre-check=0'
);
 
/**
* HTTP version
*
* @var string
* @access private
*/
var $_httpVersion = '1.0';
 
/**
* Constructor
*
* Sets HTTP version.
*
* @access public
* @return object HTTP_Header
*/
function HTTP_Header()
{
if (isset($_SERVER['SERVER_PROTOCOL'])) {
$this->setHttpVersion(substr($_SERVER['SERVER_PROTOCOL'], -3));
}
}
/**
* Set HTTP version
*
* @access public
* @return bool Returns true on success or false if version doesn't
* match 1.0 or 1.1 (note: 1 will result in 1.0)
* @param mixed $version HTTP version, either 1.0 or 1.1
*/
function setHttpVersion($version)
{
$version = round((float) $version, 1);
if ($version < 1.0 || $version > 1.1) {
return false;
}
$this->_httpVersion = sprintf('%0.1f', $version);
return true;
}
/**
* Get HTTP version
*
* @access public
* @return string
*/
function getHttpVersion()
{
return $this->_httpVersion;
}
/**
* Set Header
*
* The default value for the Last-Modified header will be current
* date and atime if $value is omitted.
*
* @access public
* @return bool Returns true on success or false if $key was empty or
* $value was not of an scalar type.
* @param string $key The name of the header.
* @param string $value The value of the header. (NULL to unset header)
*/
function setHeader($key, $value = null)
{
if (empty($key) || (isset($value) && !is_scalar($value))) {
return false;
}
$key = strToLower($key);
if ($key == 'last-modified') {
if (!isset($value)) {
$value = HTTP::Date(time());
} elseif (is_numeric($value)) {
$value = HTTP::Date($value);
}
}
if (isset($value)) {
$this->_headers[$key] = $value;
} else {
unset($this->_headers[$key]);
}
return true;
}
 
/**
* Get Header
*
* If $key is omitted, all stored headers will be returned.
*
* @access public
* @return mixed Returns string value of the requested header,
* array values of all headers or false if header $key
* is not set.
* @param string $key The name of the header to fetch.
*/
function getHeader($key = null)
{
if (!isset($key)) {
return $this->_headers;
}
$key = strToLower($key);
if (!isset($this->_headers[$key])) {
return false;
}
return $this->_headers[$key];
}
 
/**
* Send Headers
*
* Send out the header that you set via setHeader().
*
* @access public
* @return bool Returns true on success or false if headers are already
* sent.
* @param array $keys Headers to (not) send, see $include.
* @param array $include If true only $keys matching headers will be
* sent, if false only header not matching $keys will be
* sent.
*/
function sendHeaders($keys = array(), $include = true)
{
if (headers_sent()) {
return false;
}
if (count($keys)) {
array_change_key_case($keys, CASE_LOWER);
foreach ($this->_headers as $key => $value) {
if ($include ? in_array($key, $keys) : !in_array($key, $keys)) {
header($key .': '. $value);
}
}
} else {
foreach ($this->_headers as $header => $value) {
header($header .': '. $value);
}
}
return true;
}
 
/**
* Send Satus Code
*
* Send out the given HTTP-Status code. Use this for example when you
* want to tell the client this page is cached, then you would call
* sendStatusCode(304).
*
* @see HTTP_Header_Cache::exitIfCached()
*
* @access public
* @return bool Returns true on success or false if headers are already
* sent.
* @param int $code The status code to send, i.e. 404, 304, 200, etc.
*/
function sendStatusCode($code)
{
if (headers_sent()) {
return false;
}
if ($code == (int) $code && defined('HTTP_HEADER_STATUS_'. $code)) {
$code = constant('HTTP_HEADER_STATUS_'. $code);
}
if (strncasecmp(PHP_SAPI, 'cgi', 3)) {
header('HTTP/'. $this->_httpVersion .' '. $code);
} else {
header('Status: '. $code);
}
return true;
}
 
/**
* Date to Timestamp
*
* Converts dates like
* Mon, 31 Mar 2003 15:26:34 GMT
* Tue, 15 Nov 1994 12:45:26 GMT
* into a timestamp, strtotime() didn't do it in older versions.
*
* @deprecated Use PHPs strtotime() instead.
* @access public
* @return mixed Returns int unix timestamp or false if the date doesn't
* seem to be a valid GMT date.
* @param string $date The GMT date.
*/
function dateToTimestamp($date)
{
static $months = array(
null => 0, 'Jan' => 1, 'Feb' => 2, 'Mar' => 3, 'Apr' => 4,
'May' => 5, 'Jun' => 6, 'Jul' => 7, 'Aug' => 8, 'Sep' => 9,
'Oct' => 10, 'Nov' => 11, 'Dec' => 12
);
if (-1 < $timestamp = strToTime($date)) {
return $timestamp;
}
if (!preg_match('~[^,]*,\s(\d+)\s(\w+)\s(\d+)\s(\d+):(\d+):(\d+).*~',
$date, $m)) {
return false;
}
// [0] => Mon, 31 Mar 2003 15:42:55 GMT
// [1] => 31 [2] => Mar [3] => 2003 [4] => 15 [5] => 42 [6] => 55
return mktime($m[4], $m[5], $m[6], $months[$m[2]], $m[1], $m[3]);
}
 
/**
* Redirect
*
* This function redirects the client. This is done by issuing a Location
* header and exiting. Additionally to HTTP::redirect() you can also add
* parameters to the url.
*
* If you dont need parameters to be added, simply use HTTP::redirect()
* otherwise use HTTP_Header::redirect().
*
* @see HTTP::redirect()
* @author Wolfram Kriesing <wk@visionp.de>
* @access public
* @return void
* @param string $url The URL to redirect to, if none is given it
* redirects to the current page.
* @param array $param Array of query string parameters to add; usually
* a set of key => value pairs; if an array entry consists
* only of an value it is used as key and the respective
* value is fetched from $GLOBALS[$value]
* @param bool $session Whether the session name/id should be added
*/
function redirect($url = null, $param = array(), $session = false)
{
if (!isset($url)) {
$url = $_SERVER['PHP_SELF'];
}
$qs = array();
 
if ($session) {
$qs[] = session_name() .'='. session_id();
}
 
if (is_array($param) && count($param)) {
if (count($param)) {
foreach ($param as $key => $val) {
if (is_string($key)) {
$qs[] = urlencode($key) .'='. urlencode($val);
} else {
$qs[] = urlencode($val) .'='. urlencode(@$GLOBALS[$val]);
}
}
}
}
if ($qstr = implode('&', $qs)) {
$purl = parse_url($url);
$url .= (isset($purl['query']) ? '&' : '?') . $qstr;
}
 
parent::redirect($url);
}
 
/**#@+
* @author Davey Shafik <davey@php.net>
* @param int $http_code HTTP Code to check
* @access public
*/
 
/**
* Return HTTP Status Code Type
*
* @return int|false
*/
function getStatusType($http_code)
{
if(is_int($http_code) && defined('HTTP_HEADER_STATUS_' .$http_code) || defined($http_code)) {
$type = substr($http_code,0,1);
switch ($type) {
case HTTP_HEADER_STATUS_INFORMATIONAL:
case HTTP_HEADER_STATUS_SUCCESSFUL:
case HTTP_HEADER_STATUS_REDIRECT:
case HTTP_HEADER_STATUS_CLIENT_ERROR:
case HTTP_HEADER_STATUS_SERVER_ERROR:
return $type;
break;
default:
return false;
break;
}
} else {
return false;
}
}
 
/**
* Return Status Code Message
*
* @return string|false
*/
function getStatusText($http_code)
{
if ($this->getStatusType($http_code)) {
if (is_int($http_code) && defined('HTTP_HEADER_STATUS_' .$http_code)) {
return substr(constant('HTTP_HEADER_STATUS_' .$http_code),4);
} else {
return substr($http_code,4);
}
} else {
return false;
}
}
 
/**
* Checks if HTTP Status code is Information (1xx)
*
* @return boolean
*/
function isInformational($http_code)
{
if ($status_type = $this->getStatusType($http_code)) {
return $status_type{0} == HTTP_HEADER_STATUS_INFORMATIONAL;
} else {
return false;
}
}
 
/**
* Checks if HTTP Status code is Successful (2xx)
*
* @return boolean
*/
function isSuccessful($http_code)
{
if ($status_type = $this->getStatusType($http_code)) {
return $status_type{0} == HTTP_HEADER_STATUS_SUCCESSFUL;
} else {
return false;
}
}
 
/**
* Checks if HTTP Status code is a Redirect (3xx)
*
* @return boolean
*/
function isRedirect($http_code)
{
if ($status_type = $this->getStatusType($http_code)) {
return $status_type{0} == HTTP_HEADER_STATUS_REDIRECT;
} else {
return false;
}
}
 
/**
* Checks if HTTP Status code is a Client Error (4xx)
*
* @return boolean
*/
function isClientError($http_code)
{
if ($status_type = $this->getStatusType($http_code)) {
return $status_type{0} == HTTP_HEADER_STATUS_CLIENT_ERROR;
} else {
return false;
}
}
 
/**
* Checks if HTTP Status code is Server Error (5xx)
*
* @return boolean
*/
function isServerError($http_code)
{
if ($status_type = $this->getStatusType($http_code)) {
return $status_type{0} == HTTP_HEADER_STATUS_SERVER_ERROR;
} else {
return false;
}
}
 
/**
* Checks if HTTP Status code is Server OR Client Error (4xx or 5xx)
*
* @return boolean
*/
function isError($http_code)
{
if ($status_type = $this->getStatusType($http_code)) {
return (($status_type == HTTP_HEADER_STATUS_CLIENT_ERROR) || ($status_type == HTTP_HEADER_STATUS_SERVER_ERROR)) ? true : false;
} else {
return false;
}
}
/**#@-*/
}
?>
/trunk/applications/jrest/lib/HTTP/HTTP/.directory
New file
0,0 → 1,5
[Dolphin]
Timestamp=2010,10,19,15,1,53
 
[Settings]
ShowDotFiles=true
/trunk/applications/jrest/lib/HTTP
New file
Property changes:
Added: svn:ignore
+.directory
/trunk/applications/jrest/lib/.directory
New file
0,0 → 1,5
[Dolphin]
Timestamp=2010,10,19,15,1,12
 
[Settings]
ShowDotFiles=true
/trunk/applications/jrest/lib/DB/mysql.php
New file
0,0 → 1,916
<?php
/* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 2.02 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/2_02.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Author: Stig Bakken <ssb@php.net> |
// | Maintainer: Daniel Convissor <danielc@php.net> |
// +----------------------------------------------------------------------+
//
// $Id$
 
 
// XXX legend:
//
// XXX ERRORMSG: The error message from the mysql function should
// be registered here.
//
// TODO/wishlist:
// longReadlen
// binmode
 
 
require_once 'DB/common.php';
 
/**
* Database independent query interface definition for PHP's MySQL
* extension.
*
* This is for MySQL versions 4.0 and below.
*
* @package DB
* @version $Id$
* @category Database
* @author Stig Bakken <ssb@php.net>
*/
class DB_mysql extends DB_common
{
// {{{ properties
 
var $connection;
var $phptype, $dbsyntax;
var $prepare_tokens = array();
var $prepare_types = array();
var $num_rows = array();
var $transaction_opcount = 0;
var $autocommit = true;
var $fetchmode = DB_FETCHMODE_ORDERED; /* Default fetch mode */
var $_db = false;
 
// }}}
// {{{ constructor
 
/**
* DB_mysql constructor.
*
* @access public
*/
function DB_mysql()
{
$this->DB_common();
$this->phptype = 'mysql';
$this->dbsyntax = 'mysql';
$this->features = array(
'prepare' => false,
'pconnect' => true,
'transactions' => true,
'limit' => 'alter'
);
$this->errorcode_map = array(
1004 => DB_ERROR_CANNOT_CREATE,
1005 => DB_ERROR_CANNOT_CREATE,
1006 => DB_ERROR_CANNOT_CREATE,
1007 => DB_ERROR_ALREADY_EXISTS,
1008 => DB_ERROR_CANNOT_DROP,
1022 => DB_ERROR_ALREADY_EXISTS,
1046 => DB_ERROR_NODBSELECTED,
1048 => DB_ERROR_CONSTRAINT,
1050 => DB_ERROR_ALREADY_EXISTS,
1051 => DB_ERROR_NOSUCHTABLE,
1054 => DB_ERROR_NOSUCHFIELD,
1062 => DB_ERROR_ALREADY_EXISTS,
1064 => DB_ERROR_SYNTAX,
1100 => DB_ERROR_NOT_LOCKED,
1136 => DB_ERROR_VALUE_COUNT_ON_ROW,
1146 => DB_ERROR_NOSUCHTABLE,
1216 => DB_ERROR_CONSTRAINT,
1217 => DB_ERROR_CONSTRAINT,
);
}
 
// }}}
// {{{ connect()
 
/**
* Connect to a database and log in as the specified user.
*
* @param $dsn the data source name (see DB::parseDSN for syntax)
* @param $persistent (optional) whether the connection should
* be persistent
* @access public
* @return int DB_OK on success, a DB error on failure
*/
function connect($dsninfo, $persistent = false)
{
if (!DB::assertExtension('mysql')) {
return $this->raiseError(DB_ERROR_EXTENSION_NOT_FOUND);
}
$this->dsn = $dsninfo;
if ($dsninfo['protocol'] && $dsninfo['protocol'] == 'unix') {
$dbhost = ':' . $dsninfo['socket'];
} else {
$dbhost = $dsninfo['hostspec'] ? $dsninfo['hostspec'] : 'localhost';
if ($dsninfo['port']) {
$dbhost .= ':' . $dsninfo['port'];
}
}
 
$connect_function = $persistent ? 'mysql_pconnect' : 'mysql_connect';
 
if ($dbhost && $dsninfo['username'] && isset($dsninfo['password'])) {
$conn = @$connect_function($dbhost, $dsninfo['username'],
$dsninfo['password']);
} elseif ($dbhost && $dsninfo['username']) {
$conn = @$connect_function($dbhost, $dsninfo['username']);
} elseif ($dbhost) {
$conn = @$connect_function($dbhost);
} else {
$conn = false;
}
if (!$conn) {
if (($err = @mysql_error()) != '') {
return $this->raiseError(DB_ERROR_CONNECT_FAILED, null, null,
null, $err);
} elseif (empty($php_errormsg)) {
return $this->raiseError(DB_ERROR_CONNECT_FAILED);
} else {
return $this->raiseError(DB_ERROR_CONNECT_FAILED, null, null,
null, $php_errormsg);
}
}
 
if ($dsninfo['database']) {
if (!@mysql_select_db($dsninfo['database'], $conn)) {
switch(mysql_errno($conn)) {
case 1049:
return $this->raiseError(DB_ERROR_NOSUCHDB, null, null,
null, @mysql_error($conn));
case 1044:
return $this->raiseError(DB_ERROR_ACCESS_VIOLATION, null, null,
null, @mysql_error($conn));
default:
return $this->raiseError(DB_ERROR, null, null,
null, @mysql_error($conn));
}
}
// fix to allow calls to different databases in the same script
$this->_db = $dsninfo['database'];
}
 
$this->connection = $conn;
return DB_OK;
}
 
// }}}
// {{{ disconnect()
 
/**
* Log out and disconnect from the database.
*
* @access public
*
* @return bool true on success, false if not connected.
*/
function disconnect()
{
$ret = @mysql_close($this->connection);
$this->connection = null;
return $ret;
}
 
// }}}
// {{{ simpleQuery()
 
/**
* Send a query to MySQL and return the results as a MySQL resource
* identifier.
*
* @param the SQL query
*
* @access public
*
* @return mixed returns a valid MySQL result for successful SELECT
* queries, DB_OK for other successful queries. A DB error is
* returned on failure.
*/
function simpleQuery($query)
{
$ismanip = DB::isManip($query);
$this->last_query = $query;
$query = $this->modifyQuery($query);
if ($this->_db) {
if (!@mysql_select_db($this->_db, $this->connection)) {
return $this->mysqlRaiseError(DB_ERROR_NODBSELECTED);
}
}
if (!$this->autocommit && $ismanip) {
if ($this->transaction_opcount == 0) {
$result = @mysql_query('SET AUTOCOMMIT=0', $this->connection);
$result = @mysql_query('BEGIN', $this->connection);
if (!$result) {
return $this->mysqlRaiseError();
}
}
$this->transaction_opcount++;
}
$result = @mysql_query($query, $this->connection);
if (!$result) {
return $this->mysqlRaiseError();
}
if (is_resource($result)) {
$numrows = $this->numrows($result);
if (is_object($numrows)) {
return $numrows;
}
$this->num_rows[(int)$result] = $numrows;
return $result;
}
return DB_OK;
}
 
// }}}
// {{{ nextResult()
 
/**
* Move the internal mysql result pointer to the next available result
*
* This method has not been implemented yet.
*
* @param a valid sql result resource
*
* @access public
*
* @return false
*/
function nextResult($result)
{
return false;
}
 
// }}}
// {{{ fetchInto()
 
/**
* Fetch a row and insert the data into an existing array.
*
* Formating of the array and the data therein are configurable.
* See DB_result::fetchInto() for more information.
*
* @param resource $result query result identifier
* @param array $arr (reference) array where data from the row
* should be placed
* @param int $fetchmode how the resulting array should be indexed
* @param int $rownum the row number to fetch
*
* @return mixed DB_OK on success, null when end of result set is
* reached or on failure
*
* @see DB_result::fetchInto()
* @access private
*/
function fetchInto($result, &$arr, $fetchmode, $rownum=null)
{
if ($rownum !== null) {
if (!@mysql_data_seek($result, $rownum)) {
return null;
}
}
if ($fetchmode & DB_FETCHMODE_ASSOC) {
$arr = @mysql_fetch_array($result, MYSQL_ASSOC);
if ($this->options['portability'] & DB_PORTABILITY_LOWERCASE && $arr) {
$arr = array_change_key_case($arr, CASE_LOWER);
}
} else {
$arr = @mysql_fetch_row($result);
}
if (!$arr) {
// See: http://bugs.php.net/bug.php?id=22328
// for why we can't check errors on fetching
return null;
/*
$errno = @mysql_errno($this->connection);
if (!$errno) {
return null;
}
return $this->mysqlRaiseError($errno);
*/
}
if ($this->options['portability'] & DB_PORTABILITY_RTRIM) {
/*
* Even though this DBMS already trims output, we do this because
* a field might have intentional whitespace at the end that
* gets removed by DB_PORTABILITY_RTRIM under another driver.
*/
$this->_rtrimArrayValues($arr);
}
if ($this->options['portability'] & DB_PORTABILITY_NULL_TO_EMPTY) {
$this->_convertNullArrayValuesToEmpty($arr);
}
return DB_OK;
}
 
// }}}
// {{{ freeResult()
 
/**
* Free the internal resources associated with $result.
*
* @param $result MySQL result identifier
*
* @access public
*
* @return bool true on success, false if $result is invalid
*/
function freeResult($result)
{
unset($this->num_rows[(int)$result]);
return @mysql_free_result($result);
}
 
// }}}
// {{{ numCols()
 
/**
* Get the number of columns in a result set.
*
* @param $result MySQL result identifier
*
* @access public
*
* @return int the number of columns per row in $result
*/
function numCols($result)
{
$cols = @mysql_num_fields($result);
 
if (!$cols) {
return $this->mysqlRaiseError();
}
 
return $cols;
}
 
// }}}
// {{{ numRows()
 
/**
* Get the number of rows in a result set.
*
* @param $result MySQL result identifier
*
* @access public
*
* @return int the number of rows in $result
*/
function numRows($result)
{
$rows = @mysql_num_rows($result);
if ($rows === null) {
return $this->mysqlRaiseError();
}
return $rows;
}
 
// }}}
// {{{ autoCommit()
 
/**
* Enable/disable automatic commits
*/
function autoCommit($onoff = false)
{
// XXX if $this->transaction_opcount > 0, we should probably
// issue a warning here.
$this->autocommit = $onoff ? true : false;
return DB_OK;
}
 
// }}}
// {{{ commit()
 
/**
* Commit the current transaction.
*/
function commit()
{
if ($this->transaction_opcount > 0) {
if ($this->_db) {
if (!@mysql_select_db($this->_db, $this->connection)) {
return $this->mysqlRaiseError(DB_ERROR_NODBSELECTED);
}
}
$result = @mysql_query('COMMIT', $this->connection);
$result = @mysql_query('SET AUTOCOMMIT=1', $this->connection);
$this->transaction_opcount = 0;
if (!$result) {
return $this->mysqlRaiseError();
}
}
return DB_OK;
}
 
// }}}
// {{{ rollback()
 
/**
* Roll back (undo) the current transaction.
*/
function rollback()
{
if ($this->transaction_opcount > 0) {
if ($this->_db) {
if (!@mysql_select_db($this->_db, $this->connection)) {
return $this->mysqlRaiseError(DB_ERROR_NODBSELECTED);
}
}
$result = @mysql_query('ROLLBACK', $this->connection);
$result = @mysql_query('SET AUTOCOMMIT=1', $this->connection);
$this->transaction_opcount = 0;
if (!$result) {
return $this->mysqlRaiseError();
}
}
return DB_OK;
}
 
// }}}
// {{{ affectedRows()
 
/**
* Gets the number of rows affected by the data manipulation
* query. For other queries, this function returns 0.
*
* @return number of rows affected by the last query
*/
function affectedRows()
{
if (DB::isManip($this->last_query)) {
return @mysql_affected_rows($this->connection);
} else {
return 0;
}
}
 
// }}}
// {{{ errorNative()
 
/**
* Get the native error code of the last error (if any) that
* occured on the current connection.
*
* @access public
*
* @return int native MySQL error code
*/
function errorNative()
{
return @mysql_errno($this->connection);
}
 
// }}}
// {{{ nextId()
 
/**
* Returns the next free id in a sequence
*
* @param string $seq_name name of the sequence
* @param boolean $ondemand when true, the seqence is automatically
* created if it does not exist
*
* @return int the next id number in the sequence. DB_Error if problem.
*
* @internal
* @see DB_common::nextID()
* @access public
*/
function nextId($seq_name, $ondemand = true)
{
$seqname = $this->getSequenceName($seq_name);
do {
$repeat = 0;
$this->pushErrorHandling(PEAR_ERROR_RETURN);
$result = $this->query("UPDATE ${seqname} ".
'SET id=LAST_INSERT_ID(id+1)');
$this->popErrorHandling();
if ($result === DB_OK) {
/** COMMON CASE **/
$id = @mysql_insert_id($this->connection);
if ($id != 0) {
return $id;
}
/** EMPTY SEQ TABLE **/
// Sequence table must be empty for some reason, so fill it and return 1
// Obtain a user-level lock
$result = $this->getOne("SELECT GET_LOCK('${seqname}_lock',10)");
if (DB::isError($result)) {
return $this->raiseError($result);
}
if ($result == 0) {
// Failed to get the lock, bail with a DB_ERROR_NOT_LOCKED error
return $this->mysqlRaiseError(DB_ERROR_NOT_LOCKED);
}
 
// add the default value
$result = $this->query("REPLACE INTO ${seqname} (id) VALUES (0)");
if (DB::isError($result)) {
return $this->raiseError($result);
}
 
// Release the lock
$result = $this->getOne("SELECT RELEASE_LOCK('${seqname}_lock')");
if (DB::isError($result)) {
return $this->raiseError($result);
}
// We know what the result will be, so no need to try again
return 1;
 
/** ONDEMAND TABLE CREATION **/
} elseif ($ondemand && DB::isError($result) &&
$result->getCode() == DB_ERROR_NOSUCHTABLE)
{
$result = $this->createSequence($seq_name);
if (DB::isError($result)) {
return $this->raiseError($result);
} else {
$repeat = 1;
}
 
/** BACKWARDS COMPAT **/
} elseif (DB::isError($result) &&
$result->getCode() == DB_ERROR_ALREADY_EXISTS)
{
// see _BCsequence() comment
$result = $this->_BCsequence($seqname);
if (DB::isError($result)) {
return $this->raiseError($result);
}
$repeat = 1;
}
} while ($repeat);
 
return $this->raiseError($result);
}
 
// }}}
// {{{ createSequence()
 
/**
* Creates a new sequence
*
* @param string $seq_name name of the new sequence
*
* @return int DB_OK on success. A DB_Error object is returned if
* problems arise.
*
* @internal
* @see DB_common::createSequence()
* @access public
*/
function createSequence($seq_name)
{
$seqname = $this->getSequenceName($seq_name);
$res = $this->query("CREATE TABLE ${seqname} ".
'(id INTEGER UNSIGNED AUTO_INCREMENT NOT NULL,'.
' PRIMARY KEY(id))');
if (DB::isError($res)) {
return $res;
}
// insert yields value 1, nextId call will generate ID 2
$res = $this->query("INSERT INTO ${seqname} (id) VALUES (0)");
if (DB::isError($res)) {
return $res;
}
// so reset to zero
return $this->query("UPDATE ${seqname} SET id = 0;");
}
 
// }}}
// {{{ dropSequence()
 
/**
* Deletes a sequence
*
* @param string $seq_name name of the sequence to be deleted
*
* @return int DB_OK on success. DB_Error if problems.
*
* @internal
* @see DB_common::dropSequence()
* @access public
*/
function dropSequence($seq_name)
{
return $this->query('DROP TABLE ' . $this->getSequenceName($seq_name));
}
 
// }}}
// {{{ _BCsequence()
 
/**
* Backwards compatibility with old sequence emulation implementation
* (clean up the dupes)
*
* @param string $seqname The sequence name to clean up
* @return mixed DB_Error or true
*/
function _BCsequence($seqname)
{
// Obtain a user-level lock... this will release any previous
// application locks, but unlike LOCK TABLES, it does not abort
// the current transaction and is much less frequently used.
$result = $this->getOne("SELECT GET_LOCK('${seqname}_lock',10)");
if (DB::isError($result)) {
return $result;
}
if ($result == 0) {
// Failed to get the lock, can't do the conversion, bail
// with a DB_ERROR_NOT_LOCKED error
return $this->mysqlRaiseError(DB_ERROR_NOT_LOCKED);
}
 
$highest_id = $this->getOne("SELECT MAX(id) FROM ${seqname}");
if (DB::isError($highest_id)) {
return $highest_id;
}
// This should kill all rows except the highest
// We should probably do something if $highest_id isn't
// numeric, but I'm at a loss as how to handle that...
$result = $this->query("DELETE FROM ${seqname} WHERE id <> $highest_id");
if (DB::isError($result)) {
return $result;
}
 
// If another thread has been waiting for this lock,
// it will go thru the above procedure, but will have no
// real effect
$result = $this->getOne("SELECT RELEASE_LOCK('${seqname}_lock')");
if (DB::isError($result)) {
return $result;
}
return true;
}
 
// }}}
// {{{ quoteIdentifier()
 
/**
* Quote a string so it can be safely used as a table or column name
*
* Quoting style depends on which database driver is being used.
*
* MySQL can't handle the backtick character (<kbd>`</kbd>) in
* table or column names.
*
* @param string $str identifier name to be quoted
*
* @return string quoted identifier string
*
* @since 1.6.0
* @access public
* @internal
*/
function quoteIdentifier($str)
{
return '`' . $str . '`';
}
 
// }}}
// {{{ quote()
 
/**
* @deprecated Deprecated in release 1.6.0
* @internal
*/
function quote($str) {
return $this->quoteSmart($str);
}
 
// }}}
// {{{ escapeSimple()
 
/**
* Escape a string according to the current DBMS's standards
*
* @param string $str the string to be escaped
*
* @return string the escaped string
*
* @internal
*/
function escapeSimple($str) {
if (function_exists('mysql_real_escape_string')) {
return @mysql_real_escape_string($str, $this->connection);
} else {
return @mysql_escape_string($str);
}
}
 
// }}}
// {{{ modifyQuery()
 
function modifyQuery($query)
{
if ($this->options['portability'] & DB_PORTABILITY_DELETE_COUNT) {
// "DELETE FROM table" gives 0 affected rows in MySQL.
// This little hack lets you know how many rows were deleted.
if (preg_match('/^\s*DELETE\s+FROM\s+(\S+)\s*$/i', $query)) {
$query = preg_replace('/^\s*DELETE\s+FROM\s+(\S+)\s*$/',
'DELETE FROM \1 WHERE 1=1', $query);
}
}
return $query;
}
 
// }}}
// {{{ modifyLimitQuery()
 
function modifyLimitQuery($query, $from, $count, $params = array())
{
if (DB::isManip($query)) {
return $query . " LIMIT $count";
} else {
return $query . " LIMIT $from, $count";
}
}
 
// }}}
// {{{ mysqlRaiseError()
 
/**
* Gather information about an error, then use that info to create a
* DB error object and finally return that object.
*
* @param integer $errno PEAR error number (usually a DB constant) if
* manually raising an error
* @return object DB error object
* @see DB_common::errorCode()
* @see DB_common::raiseError()
*/
function mysqlRaiseError($errno = null)
{
if ($errno === null) {
if ($this->options['portability'] & DB_PORTABILITY_ERRORS) {
$this->errorcode_map[1022] = DB_ERROR_CONSTRAINT;
$this->errorcode_map[1048] = DB_ERROR_CONSTRAINT_NOT_NULL;
$this->errorcode_map[1062] = DB_ERROR_CONSTRAINT;
} else {
// Doing this in case mode changes during runtime.
$this->errorcode_map[1022] = DB_ERROR_ALREADY_EXISTS;
$this->errorcode_map[1048] = DB_ERROR_CONSTRAINT;
$this->errorcode_map[1062] = DB_ERROR_ALREADY_EXISTS;
}
$errno = $this->errorCode(mysql_errno($this->connection));
}
return $this->raiseError($errno, null, null, null,
@mysql_errno($this->connection) . ' ** ' .
@mysql_error($this->connection));
}
 
// }}}
// {{{ tableInfo()
 
/**
* Returns information about a table or a result set.
*
* @param object|string $result DB_result object from a query or a
* string containing the name of a table
* @param int $mode a valid tableInfo mode
* @return array an associative array with the information requested
* or an error object if something is wrong
* @access public
* @internal
* @see DB_common::tableInfo()
*/
function tableInfo($result, $mode = null) {
if (isset($result->result)) {
/*
* Probably received a result object.
* Extract the result resource identifier.
*/
$id = $result->result;
$got_string = false;
} elseif (is_string($result)) {
/*
* Probably received a table name.
* Create a result resource identifier.
*/
$id = @mysql_list_fields($this->dsn['database'],
$result, $this->connection);
$got_string = true;
} else {
/*
* Probably received a result resource identifier.
* Copy it.
* Deprecated. Here for compatibility only.
*/
$id = $result;
$got_string = false;
}
 
if (!is_resource($id)) {
return $this->mysqlRaiseError(DB_ERROR_NEED_MORE_DATA);
}
 
if ($this->options['portability'] & DB_PORTABILITY_LOWERCASE) {
$case_func = 'strtolower';
} else {
$case_func = 'strval';
}
 
$count = @mysql_num_fields($id);
 
// made this IF due to performance (one if is faster than $count if's)
if (!$mode) {
for ($i=0; $i<$count; $i++) {
$res[$i]['table'] = $case_func(@mysql_field_table($id, $i));
$res[$i]['name'] = $case_func(@mysql_field_name($id, $i));
$res[$i]['type'] = @mysql_field_type($id, $i);
$res[$i]['len'] = @mysql_field_len($id, $i);
$res[$i]['flags'] = @mysql_field_flags($id, $i);
}
} else { // full
$res['num_fields']= $count;
 
for ($i=0; $i<$count; $i++) {
$res[$i]['table'] = $case_func(@mysql_field_table($id, $i));
$res[$i]['name'] = $case_func(@mysql_field_name($id, $i));
$res[$i]['type'] = @mysql_field_type($id, $i);
$res[$i]['len'] = @mysql_field_len($id, $i);
$res[$i]['flags'] = @mysql_field_flags($id, $i);
 
if ($mode & DB_TABLEINFO_ORDER) {
$res['order'][$res[$i]['name']] = $i;
}
if ($mode & DB_TABLEINFO_ORDERTABLE) {
$res['ordertable'][$res[$i]['table']][$res[$i]['name']] = $i;
}
}
}
 
// free the result only if we were called on a table
if ($got_string) {
@mysql_free_result($id);
}
return $res;
}
 
// }}}
// {{{ getSpecialQuery()
 
/**
* Returns the query needed to get some backend info
* @param string $type What kind of info you want to retrieve
* @return string The SQL query string
*/
function getSpecialQuery($type)
{
switch ($type) {
case 'tables':
return 'SHOW TABLES';
case 'views':
return DB_ERROR_NOT_CAPABLE;
case 'users':
$sql = 'select distinct User from user';
if ($this->dsn['database'] != 'mysql') {
$dsn = $this->dsn;
$dsn['database'] = 'mysql';
if (DB::isError($db = DB::connect($dsn))) {
return $db;
}
$sql = $db->getCol($sql);
$db->disconnect();
// XXX Fixme the mysql driver should take care of this
if (!@mysql_select_db($this->dsn['database'], $this->connection)) {
return $this->mysqlRaiseError(DB_ERROR_NODBSELECTED);
}
}
return $sql;
case 'databases':
return 'SHOW DATABASES';
default:
return null;
}
}
 
// }}}
 
}
 
/*
* Local variables:
* tab-width: 4
* c-basic-offset: 4
* End:
*/
 
?>
/trunk/applications/jrest/lib/DB/common.php
New file
0,0 → 1,2040
<?php
/* vim: set expandtab tabstop=4 shiftwidth=4 foldmethod=marker: */
// +----------------------------------------------------------------------+
// | PHP Version 4 |
// +----------------------------------------------------------------------+
// | Copyright (c) 1997-2004 The PHP Group |
// +----------------------------------------------------------------------+
// | This source file is subject to version 2.02 of the PHP license, |
// | that is bundled with this package in the file LICENSE, and is |
// | available at through the world-wide-web at |
// | http://www.php.net/license/2_02.txt. |
// | If you did not receive a copy of the PHP license and are unable to |
// | obtain it through the world-wide-web, please send a note to |
// | license@php.net so we can mail you a copy immediately. |
// +----------------------------------------------------------------------+
// | Author: Stig Bakken <ssb@php.net> |
// | Tomas V.V.Cox <cox@idecnet.com> |
// | Maintainer: Daniel Convissor <danielc@php.net> |
// +----------------------------------------------------------------------+
//
// $Id$
 
require_once 'PEAR.php';
 
/**
* DB_common is a base class for DB implementations, and must be
* inherited by all such
*
* @package DB
* @version $Id$
* @category Database
* @author Stig Bakken <ssb@php.net>
* @author Tomas V.V.Cox <cox@idecnet.com>
*/
class DB_common extends PEAR
{
// {{{ properties
 
/**
* assoc of capabilities for this DB implementation
* $features['limit'] => 'emulate' => emulate with fetch row by number
* 'alter' => alter the query
* false => skip rows
* @var array
*/
var $features = array();
 
/**
* assoc mapping native error codes to DB ones
* @var array
*/
var $errorcode_map = array();
 
/**
* DB type (mysql, oci8, odbc etc.)
* @var string
*/
var $phptype;
 
/**
* @var string
*/
var $prepare_tokens;
 
/**
* @var string
*/
var $prepare_types;
 
/**
* @var string
*/
var $prepared_queries;
 
/**
* @var integer
*/
var $prepare_maxstmt = 0;
 
/**
* @var string
*/
var $last_query = '';
 
/**
* @var integer
*/
var $fetchmode = DB_FETCHMODE_ORDERED;
 
/**
* @var string
*/
var $fetchmode_object_class = 'stdClass';
 
/**
* Run-time configuration options.
*
* The 'optimize' option has been deprecated. Use the 'portability'
* option instead.
*
* @see DB_common::setOption()
* @var array
*/
var $options = array(
'persistent' => false,
'ssl' => false,
'debug' => 0,
'seqname_format' => '%s_seq',
'autofree' => false,
'portability' => DB_PORTABILITY_NONE,
'optimize' => 'performance', // Deprecated. Use 'portability'.
);
 
/**
* DB handle
* @var resource
*/
var $dbh;
 
// }}}
// {{{ toString()
 
/**
* String conversation
*
* @return string
* @access private
*/
function toString()
{
$info = strtolower(get_class($this));
$info .= ': (phptype=' . $this->phptype .
', dbsyntax=' . $this->dbsyntax .
')';
 
if ($this->connection) {
$info .= ' [connected]';
}
 
return $info;
}
 
// }}}
// {{{ constructor
 
/**
* Constructor
*/
function DB_common()
{
$this->PEAR('DB_Error');
}
 
// }}}
// {{{ quoteString()
 
/**
* DEPRECATED: Quotes a string so it can be safely used within string
* delimiters in a query
*
* @return string quoted string
*
* @see DB_common::quoteSmart(), DB_common::escapeSimple()
* @deprecated Deprecated in release 1.2 or lower
* @internal
*/
function quoteString($string)
{
$string = $this->quote($string);
if ($string{0} == "'") {
return substr($string, 1, -1);
}
return $string;
}
 
// }}}
// {{{ quote()
 
/**
* DEPRECATED: Quotes a string so it can be safely used in a query
*
* @param string $string the input string to quote
*
* @return string The NULL string or the string quotes
* in magic_quote_sybase style
*
* @see DB_common::quoteSmart(), DB_common::escapeSimple()
* @deprecated Deprecated in release 1.6.0
* @internal
*/
function quote($string = null)
{
return ($string === null) ? 'NULL' : "'".str_replace("'", "''", $string)."'";
}
 
// }}}
// {{{ quoteIdentifier()
 
/**
* Quote a string so it can be safely used as a table or column name
*
* Delimiting style depends on which database driver is being used.
*
* NOTE: just because you CAN use delimited identifiers doesn't mean
* you SHOULD use them. In general, they end up causing way more
* problems than they solve.
*
* Portability is broken by using the following characters inside
* delimited identifiers:
* + backtick (<kbd>`</kbd>) -- due to MySQL
* + double quote (<kbd>"</kbd>) -- due to Oracle
* + brackets (<kbd>[</kbd> or <kbd>]</kbd>) -- due to Access
*
* Delimited identifiers are known to generally work correctly under
* the following drivers:
* + mssql
* + mysql
* + mysqli
* + oci8
* + odbc(access)
* + odbc(db2)
* + pgsql
* + sqlite
* + sybase
*
* InterBase doesn't seem to be able to use delimited identifiers
* via PHP 4. They work fine under PHP 5.
*
* @param string $str identifier name to be quoted
*
* @return string quoted identifier string
*
* @since 1.6.0
* @access public
*/
function quoteIdentifier($str)
{
return '"' . str_replace('"', '""', $str) . '"';
}
 
// }}}
// {{{ quoteSmart()
 
/**
* Format input so it can be safely used in a query
*
* The output depends on the PHP data type of input and the database
* type being used.
*
* @param mixed $in data to be quoted
*
* @return mixed the format of the results depends on the input's
* PHP type:
*
* <ul>
* <li>
* <kbd>input</kbd> -> <samp>returns</samp>
* </li>
* <li>
* <kbd>null</kbd> -> the string <samp>NULL</samp>
* </li>
* <li>
* <kbd>integer</kbd> or <kbd>double</kbd> -> the unquoted number
* </li>
* <li>
* &type.bool; -> output depends on the driver in use
* Most drivers return integers: <samp>1</samp> if
* <kbd>true</kbd> or <samp>0</samp> if
* <kbd>false</kbd>.
* Some return strings: <samp>TRUE</samp> if
* <kbd>true</kbd> or <samp>FALSE</samp> if
* <kbd>false</kbd>.
* Finally one returns strings: <samp>T</samp> if
* <kbd>true</kbd> or <samp>F</samp> if
* <kbd>false</kbd>. Here is a list of each DBMS,
* the values returned and the suggested column type:
* <ul>
* <li>
* <kbd>dbase</kbd> -> <samp>T/F</samp>
* (<kbd>Logical</kbd>)
* </li>
* <li>
* <kbd>fbase</kbd> -> <samp>TRUE/FALSE</samp>
* (<kbd>BOOLEAN</kbd>)
* </li>
* <li>
* <kbd>ibase</kbd> -> <samp>1/0</samp>
* (<kbd>SMALLINT</kbd>) [1]
* </li>
* <li>
* <kbd>ifx</kbd> -> <samp>1/0</samp>
* (<kbd>SMALLINT</kbd>) [1]
* </li>
* <li>
* <kbd>msql</kbd> -> <samp>1/0</samp>
* (<kbd>INTEGER</kbd>)
* </li>
* <li>
* <kbd>mssql</kbd> -> <samp>1/0</samp>
* (<kbd>BIT</kbd>)
* </li>
* <li>
* <kbd>mysql</kbd> -> <samp>1/0</samp>
* (<kbd>TINYINT(1)</kbd>)
* </li>
* <li>
* <kbd>mysqli</kbd> -> <samp>1/0</samp>
* (<kbd>TINYINT(1)</kbd>)
* </li>
* <li>
* <kbd>oci8</kbd> -> <samp>1/0</samp>
* (<kbd>NUMBER(1)</kbd>)
* </li>
* <li>
* <kbd>odbc</kbd> -> <samp>1/0</samp>
* (<kbd>SMALLINT</kbd>) [1]
* </li>
* <li>
* <kbd>pgsql</kbd> -> <samp>TRUE/FALSE</samp>
* (<kbd>BOOLEAN</kbd>)
* </li>
* <li>
* <kbd>sqlite</kbd> -> <samp>1/0</samp>
* (<kbd>INTEGER</kbd>)
* </li>
* <li>
* <kbd>sybase</kbd> -> <samp>1/0</samp>
* (<kbd>TINYINT(1)</kbd>)
* </li>
* </ul>
* [1] Accommodate the lowest common denominator because not all
* versions of have <kbd>BOOLEAN</kbd>.
* </li>
* <li>
* other (including strings and numeric strings) ->
* the data with single quotes escaped by preceeding
* single quotes, backslashes are escaped by preceeding
* backslashes, then the whole string is encapsulated
* between single quotes
* </li>
* </ul>
*
* @since 1.6.0
* @see DB_common::escapeSimple()
* @access public
*/
function quoteSmart($in)
{
if (is_int($in) || is_double($in)) {
return $in;
} elseif (is_bool($in)) {
return $in ? 1 : 0;
} elseif (is_null($in)) {
return 'NULL';
} else {
return "'" . $this->escapeSimple($in) . "'";
}
}
 
// }}}
// {{{ escapeSimple()
 
/**
* Escape a string according to the current DBMS's standards
*
* In SQLite, this makes things safe for inserts/updates, but may
* cause problems when performing text comparisons against columns
* containing binary data. See the
* {@link http://php.net/sqlite_escape_string PHP manual} for more info.
*
* @param string $str the string to be escaped
*
* @return string the escaped string
*
* @since 1.6.0
* @see DB_common::quoteSmart()
* @access public
*/
function escapeSimple($str) {
return str_replace("'", "''", $str);
}
 
// }}}
// {{{ provides()
 
/**
* Tell whether a DB implementation or its backend extension
* supports a given feature
*
* @param array $feature name of the feature (see the DB class doc)
* @return bool whether this DB implementation supports $feature
* @access public
*/
function provides($feature)
{
return $this->features[$feature];
}
 
// }}}
// {{{ errorCode()
 
/**
* Map native error codes to DB's portable ones
*
* Requires that the DB implementation's constructor fills
* in the <var>$errorcode_map</var> property.
*
* @param mixed $nativecode the native error code, as returned by the
* backend database extension (string or integer)
*
* @return int a portable DB error code, or DB_ERROR if this DB
* implementation has no mapping for the given error code.
*
* @access public
*/
function errorCode($nativecode)
{
if (isset($this->errorcode_map[$nativecode])) {
return $this->errorcode_map[$nativecode];
}
// Fall back to DB_ERROR if there was no mapping.
return DB_ERROR;
}
 
// }}}
// {{{ errorMessage()
 
/**
* Map a DB error code to a textual message. This is actually
* just a wrapper for DB::errorMessage()
*
* @param integer $dbcode the DB error code
*
* @return string the corresponding error message, of false
* if the error code was unknown
*
* @access public
*/
function errorMessage($dbcode)
{
return DB::errorMessage($this->errorcode_map[$dbcode]);
}
 
// }}}
// {{{ raiseError()
 
/**
* Communicate an error and invoke error callbacks, etc
*
* Basically a wrapper for PEAR::raiseError without the message string.
*
* @param mixed integer error code, or a PEAR error object (all
* other parameters are ignored if this parameter is
* an object
*
* @param int error mode, see PEAR_Error docs
*
* @param mixed If error mode is PEAR_ERROR_TRIGGER, this is the
* error level (E_USER_NOTICE etc). If error mode is
* PEAR_ERROR_CALLBACK, this is the callback function,
* either as a function name, or as an array of an
* object and method name. For other error modes this
* parameter is ignored.
*
* @param string Extra debug information. Defaults to the last
* query and native error code.
*
* @param mixed Native error code, integer or string depending the
* backend.
*
* @return object a PEAR error object
*
* @access public
* @see PEAR_Error
*/
function &raiseError($code = DB_ERROR, $mode = null, $options = null,
$userinfo = null, $nativecode = null)
{
// The error is yet a DB error object
if (is_object($code)) {
// because we the static PEAR::raiseError, our global
// handler should be used if it is set
if ($mode === null && !empty($this->_default_error_mode)) {
$mode = $this->_default_error_mode;
$options = $this->_default_error_options;
}
$tmp = PEAR::raiseError($code, null, $mode, $options, null, null, true);
return $tmp;
}
 
if ($userinfo === null) {
$userinfo = $this->last_query;
}
 
if ($nativecode) {
$userinfo .= ' [nativecode=' . trim($nativecode) . ']';
}
 
$tmp = PEAR::raiseError(null, $code, $mode, $options, $userinfo,
'DB_Error', true);
return $tmp;
}
 
// }}}
// {{{ setFetchMode()
 
/**
* Sets which fetch mode should be used by default on queries
* on this connection
*
* @param integer $fetchmode DB_FETCHMODE_ORDERED or
* DB_FETCHMODE_ASSOC, possibly bit-wise OR'ed with
* DB_FETCHMODE_FLIPPED.
*
* @param string $object_class The class of the object
* to be returned by the fetch methods when
* the DB_FETCHMODE_OBJECT mode is selected.
* If no class is specified by default a cast
* to object from the assoc array row will be done.
* There is also the posibility to use and extend the
* 'DB_row' class.
*
* @see DB_FETCHMODE_ORDERED
* @see DB_FETCHMODE_ASSOC
* @see DB_FETCHMODE_FLIPPED
* @see DB_FETCHMODE_OBJECT
* @see DB_row::DB_row()
* @access public
*/
function setFetchMode($fetchmode, $object_class = 'stdClass')
{
switch ($fetchmode) {
case DB_FETCHMODE_OBJECT:
$this->fetchmode_object_class = $object_class;
case DB_FETCHMODE_ORDERED:
case DB_FETCHMODE_ASSOC:
$this->fetchmode = $fetchmode;
break;
default:
return $this->raiseError('invalid fetchmode mode');
}
}
 
// }}}
// {{{ setOption()
 
/**
* Set run-time configuration options for PEAR DB
*
* Options, their data types, default values and description:
* <ul>
* <li>
* <var>autofree</var> <kbd>boolean</kbd> = <samp>false</samp>
* <br />should results be freed automatically when there are no
* more rows?
* </li><li>
* <var>debug</var> <kbd>integer</kbd> = <samp>0</samp>
* <br />debug level
* </li><li>
* <var>persistent</var> <kbd>boolean</kbd> = <samp>false</samp>
* <br />should the connection be persistent?
* </li><li>
* <var>portability</var> <kbd>integer</kbd> = <samp>DB_PORTABILITY_NONE</samp>
* <br />portability mode constant (see below)
* </li><li>
* <var>seqname_format</var> <kbd>string</kbd> = <samp>%s_seq</samp>
* <br />the sprintf() format string used on sequence names. This
* format is applied to sequence names passed to
* createSequence(), nextID() and dropSequence().
* </li><li>
* <var>ssl</var> <kbd>boolean</kbd> = <samp>false</samp>
* <br />use ssl to connect?
* </li>
* </ul>
*
* -----------------------------------------
*
* PORTABILITY MODES
*
* These modes are bitwised, so they can be combined using <kbd>|</kbd>
* and removed using <kbd>^</kbd>. See the examples section below on how
* to do this.
*
* <samp>DB_PORTABILITY_NONE</samp>
* turn off all portability features
*
* This mode gets automatically turned on if the deprecated
* <var>optimize</var> option gets set to <samp>performance</samp>.
*
*
* <samp>DB_PORTABILITY_LOWERCASE</samp>
* convert names of tables and fields to lower case when using
* <kbd>get*()</kbd>, <kbd>fetch*()</kbd> and <kbd>tableInfo()</kbd>
*
* This mode gets automatically turned on in the following databases
* if the deprecated option <var>optimize</var> gets set to
* <samp>portability</samp>:
* + oci8
*
*
* <samp>DB_PORTABILITY_RTRIM</samp>
* right trim the data output by <kbd>get*()</kbd> <kbd>fetch*()</kbd>
*
*
* <samp>DB_PORTABILITY_DELETE_COUNT</samp>
* force reporting the number of rows deleted
*
* Some DBMS's don't count the number of rows deleted when performing
* simple <kbd>DELETE FROM tablename</kbd> queries. This portability
* mode tricks such DBMS's into telling the count by adding
* <samp>WHERE 1=1</samp> to the end of <kbd>DELETE</kbd> queries.
*
* This mode gets automatically turned on in the following databases
* if the deprecated option <var>optimize</var> gets set to
* <samp>portability</samp>:
* + fbsql
* + mysql
* + mysqli
* + sqlite
*
*
* <samp>DB_PORTABILITY_NUMROWS</samp>
* enable hack that makes <kbd>numRows()</kbd> work in Oracle
*
* This mode gets automatically turned on in the following databases
* if the deprecated option <var>optimize</var> gets set to
* <samp>portability</samp>:
* + oci8
*
*
* <samp>DB_PORTABILITY_ERRORS</samp>
* makes certain error messages in certain drivers compatible
* with those from other DBMS's
*
* + mysql, mysqli: change unique/primary key constraints
* DB_ERROR_ALREADY_EXISTS -> DB_ERROR_CONSTRAINT
*
* + odbc(access): MS's ODBC driver reports 'no such field' as code
* 07001, which means 'too few parameters.' When this option is on
* that code gets mapped to DB_ERROR_NOSUCHFIELD.
* DB_ERROR_MISMATCH -> DB_ERROR_NOSUCHFIELD
*
*
* <samp>DB_PORTABILITY_NULL_TO_EMPTY</samp>
* convert null values to empty strings in data output by get*() and
* fetch*(). Needed because Oracle considers empty strings to be null,
* while most other DBMS's know the difference between empty and null.
*
*
* <samp>DB_PORTABILITY_ALL</samp>
* turn on all portability features
*
* -----------------------------------------
*
* Example 1. Simple setOption() example
* <code> <?php
* $dbh->setOption('autofree', true);
* ?></code>
*
* Example 2. Portability for lowercasing and trimming
* <code> <?php
* $dbh->setOption('portability',
* DB_PORTABILITY_LOWERCASE | DB_PORTABILITY_RTRIM);
* ?></code>
*
* Example 3. All portability options except trimming
* <code> <?php
* $dbh->setOption('portability',
* DB_PORTABILITY_ALL ^ DB_PORTABILITY_RTRIM);
* ?></code>
*
* @param string $option option name
* @param mixed $value value for the option
*
* @return int DB_OK on success. DB_Error object on failure.
*
* @see DB_common::$options
*/
function setOption($option, $value)
{
if (isset($this->options[$option])) {
$this->options[$option] = $value;
 
/*
* Backwards compatibility check for the deprecated 'optimize'
* option. Done here in case settings change after connecting.
*/
if ($option == 'optimize') {
if ($value == 'portability') {
switch ($this->phptype) {
case 'oci8':
$this->options['portability'] =
DB_PORTABILITY_LOWERCASE |
DB_PORTABILITY_NUMROWS;
break;
case 'fbsql':
case 'mysql':
case 'mysqli':
case 'sqlite':
$this->options['portability'] =
DB_PORTABILITY_DELETE_COUNT;
break;
}
} else {
$this->options['portability'] = DB_PORTABILITY_NONE;
}
}
 
return DB_OK;
}
return $this->raiseError("unknown option $option");
}
 
// }}}
// {{{ getOption()
 
/**
* Returns the value of an option
*
* @param string $option option name
*
* @return mixed the option value
*/
function getOption($option)
{
if (isset($this->options[$option])) {
return $this->options[$option];
}
return $this->raiseError("unknown option $option");
}
 
// }}}
// {{{ prepare()
 
/**
* Prepares a query for multiple execution with execute()
*
* Creates a query that can be run multiple times. Each time it is run,
* the placeholders, if any, will be replaced by the contents of
* execute()'s $data argument.
*
* Three types of placeholders can be used:
* + <kbd>?</kbd> scalar value (i.e. strings, integers). The system
* will automatically quote and escape the data.
* + <kbd>!</kbd> value is inserted 'as is'
* + <kbd>&</kbd> requires a file name. The file's contents get
* inserted into the query (i.e. saving binary
* data in a db)
*
* Example 1.
* <code> <?php
* $sth = $dbh->prepare('INSERT INTO tbl (a, b, c) VALUES (?, !, &)');
* $data = array(
* "John's text",
* "'it''s good'",
* 'filename.txt'
* );
* $res = $dbh->execute($sth, $data);
* ?></code>
*
* Use backslashes to escape placeholder characters if you don't want
* them to be interpreted as placeholders:
* <pre>
* "UPDATE foo SET col=? WHERE col='over \& under'"
* </pre>
*
* With some database backends, this is emulated.
*
* {@internal ibase and oci8 have their own prepare() methods.}}
*
* @param string $query query to be prepared
*
* @return mixed DB statement resource on success. DB_Error on failure.
*
* @see DB_common::execute()
* @access public
*/
function prepare($query)
{
$tokens = preg_explode('/((?<!\\\)[&?!])/', $query, -1,
PREG_SPLIT_DELIM_CAPTURE);
$token = 0;
$types = array();
$newtokens = array();
 
foreach ($tokens as $val) {
switch ($val) {
case '?':
$types[$token++] = DB_PARAM_SCALAR;
break;
case '&':
$types[$token++] = DB_PARAM_OPAQUE;
break;
case '!':
$types[$token++] = DB_PARAM_MISC;
break;
default:
$newtokens[] = preg_replace('/\\\([&?!])/', "\\1", $val);
}
}
 
$this->prepare_tokens[] = &$newtokens;
end($this->prepare_tokens);
 
$k = key($this->prepare_tokens);
$this->prepare_types[$k] = $types;
$this->prepared_queries[$k] = implode(' ', $newtokens);
 
return $k;
}
 
// }}}
// {{{ autoPrepare()
 
/**
* Automaticaly generate an insert or update query and pass it to prepare()
*
* @param string $table name of the table
* @param array $table_fields ordered array containing the fields names
* @param int $mode type of query to make (DB_AUTOQUERY_INSERT or DB_AUTOQUERY_UPDATE)
* @param string $where in case of update queries, this string will be put after the sql WHERE statement
* @return resource handle for the query
* @see DB_common::prepare(), DB_common::buildManipSQL()
* @access public
*/
function autoPrepare($table, $table_fields, $mode = DB_AUTOQUERY_INSERT, $where = false)
{
$query = $this->buildManipSQL($table, $table_fields, $mode, $where);
return $this->prepare($query);
}
 
// }}}
// {{{ autoExecute()
 
/**
* Automaticaly generate an insert or update query and call prepare()
* and execute() with it
*
* @param string $table name of the table
* @param array $fields_values assoc ($key=>$value) where $key is a field name and $value its value
* @param int $mode type of query to make (DB_AUTOQUERY_INSERT or DB_AUTOQUERY_UPDATE)
* @param string $where in case of update queries, this string will be put after the sql WHERE statement
* @return mixed a new DB_Result or a DB_Error when fail
* @see DB_common::autoPrepare(), DB_common::buildManipSQL()
* @access public
*/
function autoExecute($table, $fields_values, $mode = DB_AUTOQUERY_INSERT, $where = false)
{
$sth = $this->autoPrepare($table, array_keys($fields_values), $mode, $where);
$ret =& $this->execute($sth, array_values($fields_values));
$this->freePrepared($sth);
return $ret;
 
}
 
// }}}
// {{{ buildManipSQL()
 
/**
* Make automaticaly an sql query for prepare()
*
* Example : buildManipSQL('table_sql', array('field1', 'field2', 'field3'), DB_AUTOQUERY_INSERT)
* will return the string : INSERT INTO table_sql (field1,field2,field3) VALUES (?,?,?)
* NB : - This belongs more to a SQL Builder class, but this is a simple facility
* - Be carefull ! If you don't give a $where param with an UPDATE query, all
* the records of the table will be updated !
*
* @param string $table name of the table
* @param array $table_fields ordered array containing the fields names
* @param int $mode type of query to make (DB_AUTOQUERY_INSERT or DB_AUTOQUERY_UPDATE)
* @param string $where in case of update queries, this string will be put after the sql WHERE statement
* @return string sql query for prepare()
* @access public
*/
function buildManipSQL($table, $table_fields, $mode, $where = false)
{
if (count($table_fields) == 0) {
$this->raiseError(DB_ERROR_NEED_MORE_DATA);
}
$first = true;
switch ($mode) {
case DB_AUTOQUERY_INSERT:
$values = '';
$names = '';
foreach ($table_fields as $value) {
if ($first) {
$first = false;
} else {
$names .= ',';
$values .= ',';
}
$names .= $value;
$values .= '?';
}
return "INSERT INTO $table ($names) VALUES ($values)";
case DB_AUTOQUERY_UPDATE:
$set = '';
foreach ($table_fields as $value) {
if ($first) {
$first = false;
} else {
$set .= ',';
}
$set .= "$value = ?";
}
$sql = "UPDATE $table SET $set";
if ($where) {
$sql .= " WHERE $where";
}
return $sql;
default:
$this->raiseError(DB_ERROR_SYNTAX);
}
}
 
// }}}
// {{{ execute()
 
/**
* Executes a DB statement prepared with prepare()
*
* Example 1.
* <code> <?php
* $sth = $dbh->prepare('INSERT INTO tbl (a, b, c) VALUES (?, !, &)');
* $data = array(
* "John's text",
* "'it''s good'",
* 'filename.txt'
* );
* $res =& $dbh->execute($sth, $data);
* ?></code>
*
* @param resource $stmt a DB statement resource returned from prepare()
* @param mixed $data array, string or numeric data to be used in
* execution of the statement. Quantity of items
* passed must match quantity of placeholders in
* query: meaning 1 placeholder for non-array
* parameters or 1 placeholder per array element.
*
* @return object a new DB_Result or a DB_Error when fail
*
* {@internal ibase and oci8 have their own execute() methods.}}
*
* @see DB_common::prepare()
* @access public
*/
function &execute($stmt, $data = array())
{
$realquery = $this->executeEmulateQuery($stmt, $data);
if (DB::isError($realquery)) {
return $realquery;
}
$result = $this->simpleQuery($realquery);
 
if (DB::isError($result) || $result === DB_OK) {
return $result;
} else {
$tmp = new DB_result($this, $result);
return $tmp;
}
}
 
// }}}
// {{{ executeEmulateQuery()
 
/**
* Emulates the execute statement, when not supported
*
* @param resource $stmt a DB statement resource returned from execute()
* @param mixed $data array, string or numeric data to be used in
* execution of the statement. Quantity of items
* passed must match quantity of placeholders in
* query: meaning 1 placeholder for non-array
* parameters or 1 placeholder per array element.
*
* @return mixed a string containing the real query run when emulating
* prepare/execute. A DB error code is returned on failure.
*
* @see DB_common::execute()
* @access private
*/
function executeEmulateQuery($stmt, $data = array())
{
if (!is_array($data)) {
$data = array($data);
}
 
if (count($this->prepare_types[$stmt]) != count($data)) {
$this->last_query = $this->prepared_queries[$stmt];
return $this->raiseError(DB_ERROR_MISMATCH);
}
 
$realquery = $this->prepare_tokens[$stmt][0];
 
$i = 0;
foreach ($data as $value) {
if ($this->prepare_types[$stmt][$i] == DB_PARAM_SCALAR) {
$realquery .= $this->quoteSmart($value);
} elseif ($this->prepare_types[$stmt][$i] == DB_PARAM_OPAQUE) {
$fp = @fopen($value, 'rb');
if (!$fp) {
return $this->raiseError(DB_ERROR_ACCESS_VIOLATION);
}
$realquery .= $this->quoteSmart(fread($fp, filesize($value)));
fclose($fp);
} else {
$realquery .= $value;
}
 
$realquery .= $this->prepare_tokens[$stmt][++$i];
}
 
return $realquery;
}
 
// }}}
// {{{ executeMultiple()
 
/**
* This function does several execute() calls on the same
* statement handle
*
* $data must be an array indexed numerically
* from 0, one execute call is done for every "row" in the array.
*
* If an error occurs during execute(), executeMultiple() does not
* execute the unfinished rows, but rather returns that error.
*
* @param resource $stmt query handle from prepare()
* @param array $data numeric array containing the
* data to insert into the query
*
* @return mixed DB_OK or DB_Error
*
* @see DB_common::prepare(), DB_common::execute()
* @access public
*/
function executeMultiple($stmt, $data)
{
foreach ($data as $value) {
$res =& $this->execute($stmt, $value);
if (DB::isError($res)) {
return $res;
}
}
return DB_OK;
}
 
// }}}
// {{{ freePrepared()
 
/**
* Free the resource used in a prepared query
*
* @param $stmt The resurce returned by the prepare() function
* @see DB_common::prepare()
*/
function freePrepared($stmt)
{
// Free the internal prepared vars
if (isset($this->prepare_tokens[$stmt])) {
unset($this->prepare_tokens[$stmt]);
unset($this->prepare_types[$stmt]);
unset($this->prepared_queries[$stmt]);
return true;
}
return false;
}
 
// }}}
// {{{ modifyQuery()
 
/**
* This method is used by backends to alter queries for various
* reasons
*
* It is defined here to assure that all implementations
* have this method defined.
*
* @param string $query query to modify
*
* @return the new (modified) query
*
* @access private
*/
function modifyQuery($query) {
return $query;
}
 
// }}}
// {{{ modifyLimitQuery()
 
/**
* This method is used by backends to alter limited queries
*
* @param string $query query to modify
* @param integer $from the row to start to fetching
* @param integer $count the numbers of rows to fetch
*
* @return the new (modified) query
*
* @access private
*/
function modifyLimitQuery($query, $from, $count, $params = array())
{
return $query;
}
 
// }}}
// {{{ query()
 
/**
* Send a query to the database and return any results with a
* DB_result object
*
* The query string can be either a normal statement to be sent directly
* to the server OR if <var>$params</var> are passed the query can have
* placeholders and it will be passed through prepare() and execute().
*
* @param string $query the SQL query or the statement to prepare
* @param mixed $params array, string or numeric data to be used in
* execution of the statement. Quantity of items
* passed must match quantity of placeholders in
* query: meaning 1 placeholder for non-array
* parameters or 1 placeholder per array element.
*
* @return mixed a DB_result object or DB_OK on success, a DB
* error on failure
*
* @see DB_result, DB_common::prepare(), DB_common::execute()
* @access public
*/
function &query($query, $params = array())
{
if (sizeof($params) > 0) {
$sth = $this->prepare($query);
if (DB::isError($sth)) {
return $sth;
}
$ret =& $this->execute($sth, $params);
$this->freePrepared($sth);
return $ret;
} else {
$result = $this->simpleQuery($query);
if (DB::isError($result) || $result === DB_OK) {
return $result;
} else {
$tmp = new DB_result($this, $result);
return $tmp;
}
}
}
 
// }}}
// {{{ limitQuery()
 
/**
* Generates a limited query
*
* @param string $query query
* @param integer $from the row to start to fetching
* @param integer $count the numbers of rows to fetch
* @param mixed $params array, string or numeric data to be used in
* execution of the statement. Quantity of items
* passed must match quantity of placeholders in
* query: meaning 1 placeholder for non-array
* parameters or 1 placeholder per array element.
*
* @return mixed a DB_Result object, DB_OK or a DB_Error
*
* @access public
*/
function &limitQuery($query, $from, $count, $params = array())
{
$query = $this->modifyLimitQuery($query, $from, $count, $params);
if (DB::isError($query)){
return $query;
}
$result =& $this->query($query, $params);
if (is_a($result, 'DB_result')) {
$result->setOption('limit_from', $from);
$result->setOption('limit_count', $count);
}
return $result;
}
 
// }}}
// {{{ getOne()
 
/**
* Fetch the first column of the first row of data returned from
* a query
*
* Takes care of doing the query and freeing the results when finished.
*
* @param string $query the SQL query
* @param mixed $params array, string or numeric data to be used in
* execution of the statement. Quantity of items
* passed must match quantity of placeholders in
* query: meaning 1 placeholder for non-array
* parameters or 1 placeholder per array element.
*
* @return mixed the returned value of the query. DB_Error on failure.
*
* @access public
*/
function &getOne($query, $params = array())
{
settype($params, 'array');
if (sizeof($params) > 0) {
$sth = $this->prepare($query);
if (DB::isError($sth)) {
return $sth;
}
$res =& $this->execute($sth, $params);
$this->freePrepared($sth);
} else {
$res =& $this->query($query);
}
 
if (DB::isError($res)) {
return $res;
}
 
$err = $res->fetchInto($row, DB_FETCHMODE_ORDERED);
$res->free();
 
if ($err !== DB_OK) {
return $err;
}
 
return $row[0];
}
 
// }}}
// {{{ getRow()
 
/**
* Fetch the first row of data returned from a query
*
* Takes care of doing the query and freeing the results when finished.
*
* @param string $query the SQL query
* @param array $params array to be used in execution of the statement.
* Quantity of array elements must match quantity
* of placeholders in query. This function does
* NOT support scalars.
* @param int $fetchmode the fetch mode to use
*
* @return array the first row of results as an array indexed from
* 0, or a DB error code.
*
* @access public
*/
function &getRow($query,
$params = array(),
$fetchmode = DB_FETCHMODE_DEFAULT)
{
// compat check, the params and fetchmode parameters used to
// have the opposite order
if (!is_array($params)) {
if (is_array($fetchmode)) {
if ($params === null) {
$tmp = DB_FETCHMODE_DEFAULT;
} else {
$tmp = $params;
}
$params = $fetchmode;
$fetchmode = $tmp;
} elseif ($params !== null) {
$fetchmode = $params;
$params = array();
}
}
 
if (sizeof($params) > 0) {
$sth = $this->prepare($query);
if (DB::isError($sth)) {
return $sth;
}
$res =& $this->execute($sth, $params);
$this->freePrepared($sth);
} else {
$res =& $this->query($query);
}
 
if (DB::isError($res)) {
return $res;
}
 
$err = $res->fetchInto($row, $fetchmode);
 
$res->free();
 
if ($err !== DB_OK) {
return $err;
}
 
return $row;
}
 
// }}}
// {{{ getCol()
 
/**
* Fetch a single column from a result set and return it as an
* indexed array
*
* @param string $query the SQL query
* @param mixed $col which column to return (integer [column number,
* starting at 0] or string [column name])
* @param mixed $params array, string or numeric data to be used in
* execution of the statement. Quantity of items
* passed must match quantity of placeholders in
* query: meaning 1 placeholder for non-array
* parameters or 1 placeholder per array element.
*
* @return array an indexed array with the data from the first
* row at index 0, or a DB error code
*
* @see DB_common::query()
* @access public
*/
function &getCol($query, $col = 0, $params = array())
{
settype($params, 'array');
if (sizeof($params) > 0) {
$sth = $this->prepare($query);
 
if (DB::isError($sth)) {
return $sth;
}
 
$res =& $this->execute($sth, $params);
$this->freePrepared($sth);
} else {
$res =& $this->query($query);
}
 
if (DB::isError($res)) {
return $res;
}
 
$fetchmode = is_int($col) ? DB_FETCHMODE_ORDERED : DB_FETCHMODE_ASSOC;
 
if (!is_array($row = $res->fetchRow($fetchmode))) {
$ret = array();
} else {
if (!array_key_exists($col, $row)) {
$ret =& $this->raiseError(DB_ERROR_NOSUCHFIELD);
} else {
$ret = array($row[$col]);
while (is_array($row = $res->fetchRow($fetchmode))) {
$ret[] = $row[$col];
}
}
}
 
$res->free();
 
if (DB::isError($row)) {
$ret = $row;
}
 
return $ret;
}
 
// }}}
// {{{ getAssoc()
 
/**
* Fetch the entire result set of a query and return it as an
* associative array using the first column as the key
*
* If the result set contains more than two columns, the value
* will be an array of the values from column 2-n. If the result
* set contains only two columns, the returned value will be a
* scalar with the value of the second column (unless forced to an
* array with the $force_array parameter). A DB error code is
* returned on errors. If the result set contains fewer than two
* columns, a DB_ERROR_TRUNCATED error is returned.
*
* For example, if the table "mytable" contains:
*
* <pre>
* ID TEXT DATE
* --------------------------------
* 1 'one' 944679408
* 2 'two' 944679408
* 3 'three' 944679408
* </pre>
*
* Then the call getAssoc('SELECT id,text FROM mytable') returns:
* <pre>
* array(
* '1' => 'one',
* '2' => 'two',
* '3' => 'three',
* )
* </pre>
*
* ...while the call getAssoc('SELECT id,text,date FROM mytable') returns:
* <pre>
* array(
* '1' => array('one', '944679408'),
* '2' => array('two', '944679408'),
* '3' => array('three', '944679408')
* )
* </pre>
*
* If the more than one row occurs with the same value in the
* first column, the last row overwrites all previous ones by
* default. Use the $group parameter if you don't want to
* overwrite like this. Example:
*
* <pre>
* getAssoc('SELECT category,id,name FROM mytable', false, null,
* DB_FETCHMODE_ASSOC, true) returns:
*
* array(
* '1' => array(array('id' => '4', 'name' => 'number four'),
* array('id' => '6', 'name' => 'number six')
* ),
* '9' => array(array('id' => '4', 'name' => 'number four'),
* array('id' => '6', 'name' => 'number six')
* )
* )
* </pre>
*
* Keep in mind that database functions in PHP usually return string
* values for results regardless of the database's internal type.
*
* @param string $query the SQL query
* @param boolean $force_array used only when the query returns
* exactly two columns. If true, the values
* of the returned array will be one-element
* arrays instead of scalars.
* @param mixed $params array, string or numeric data to be used in
* execution of the statement. Quantity of items
* passed must match quantity of placeholders in
* query: meaning 1 placeholder for non-array
* parameters or 1 placeholder per array element.
* @param int $fetchmode the fetch mode to use
* @param boolean $group if true, the values of the returned array
* is wrapped in another array. If the same
* key value (in the first column) repeats
* itself, the values will be appended to
* this array instead of overwriting the
* existing values.
*
* @return array associative array with results from the query.
* DB Error on failure.
*
* @access public
*/
function &getAssoc($query, $force_array = false, $params = array(),
$fetchmode = DB_FETCHMODE_DEFAULT, $group = false)
{
settype($params, 'array');
if (sizeof($params) > 0) {
$sth = $this->prepare($query);
 
if (DB::isError($sth)) {
return $sth;
}
 
$res =& $this->execute($sth, $params);
$this->freePrepared($sth);
} else {
$res =& $this->query($query);
}
 
if (DB::isError($res)) {
return $res;
}
if ($fetchmode == DB_FETCHMODE_DEFAULT) {
$fetchmode = $this->fetchmode;
}
$cols = $res->numCols();
 
if ($cols < 2) {
$tmp =& $this->raiseError(DB_ERROR_TRUNCATED);
return $tmp;
}
 
$results = array();
 
if ($cols > 2 || $force_array) {
// return array values
// XXX this part can be optimized
if ($fetchmode == DB_FETCHMODE_ASSOC) {
while (is_array($row = $res->fetchRow(DB_FETCHMODE_ASSOC))) {
reset($row);
$key = current($row);
unset($row[key($row)]);
if ($group) {
$results[$key][] = $row;
} else {
$results[$key] = $row;
}
}
} elseif ($fetchmode == DB_FETCHMODE_OBJECT) {
while ($row = $res->fetchRow(DB_FETCHMODE_OBJECT)) {
$arr = get_object_vars($row);
$key = current($arr);
if ($group) {
$results[$key][] = $row;
} else {
$results[$key] = $row;
}
}
} else {
while (is_array($row = $res->fetchRow(DB_FETCHMODE_ORDERED))) {
// we shift away the first element to get
// indices running from 0 again
$key = array_shift($row);
if ($group) {
$results[$key][] = $row;
} else {
$results[$key] = $row;
}
}
}
if (DB::isError($row)) {
$results = $row;
}
} else {
// return scalar values
while (is_array($row = $res->fetchRow(DB_FETCHMODE_ORDERED))) {
if ($group) {
$results[$row[0]][] = $row[1];
} else {
$results[$row[0]] = $row[1];
}
}
if (DB::isError($row)) {
$results = $row;
}
}
 
$res->free();
 
return $results;
}
 
// }}}
// {{{ getAll()
 
/**
* Fetch all the rows returned from a query
*
* @param string $query the SQL query
* @param array $params array to be used in execution of the statement.
* Quantity of array elements must match quantity
* of placeholders in query. This function does
* NOT support scalars.
* @param int $fetchmode the fetch mode to use
*
* @return array an nested array. DB error on failure.
*
* @access public
*/
function &getAll($query,
$params = array(),
$fetchmode = DB_FETCHMODE_DEFAULT)
{
// compat check, the params and fetchmode parameters used to
// have the opposite order
if (!is_array($params)) {
if (is_array($fetchmode)) {
if ($params === null) {
$tmp = DB_FETCHMODE_DEFAULT;
} else {
$tmp = $params;
}
$params = $fetchmode;
$fetchmode = $tmp;
} elseif ($params !== null) {
$fetchmode = $params;
$params = array();
}
}
 
if (sizeof($params) > 0) {
$sth = $this->prepare($query);
 
if (DB::isError($sth)) {
return $sth;
}
 
$res =& $this->execute($sth, $params);
$this->freePrepared($sth);
} else {
$res =& $this->query($query);
}
 
if (DB::isError($res) || $res === DB_OK) {
return $res;
}
 
$results = array();
while (DB_OK === $res->fetchInto($row, $fetchmode)) {
if ($fetchmode & DB_FETCHMODE_FLIPPED) {
foreach ($row as $key => $val) {
$results[$key][] = $val;
}
} else {
$results[] = $row;
}
}
 
$res->free();
 
if (DB::isError($row)) {
$tmp =& $this->raiseError($row);
return $tmp;
}
return $results;
}
 
// }}}
// {{{ autoCommit()
 
/**
* enable automatic Commit
*
* @param boolean $onoff
* @return mixed DB_Error
*
* @access public
*/
function autoCommit($onoff=false)
{
return $this->raiseError(DB_ERROR_NOT_CAPABLE);
}
 
// }}}
// {{{ commit()
 
/**
* starts a Commit
*
* @return mixed DB_Error
*
* @access public
*/
function commit()
{
return $this->raiseError(DB_ERROR_NOT_CAPABLE);
}
 
// }}}
// {{{ rollback()
 
/**
* starts a rollback
*
* @return mixed DB_Error
*
* @access public
*/
function rollback()
{
return $this->raiseError(DB_ERROR_NOT_CAPABLE);
}
 
// }}}
// {{{ numRows()
 
/**
* Returns the number of rows in a result object
*
* @param object DB_Result the result object to check
*
* @return mixed DB_Error or the number of rows
*
* @access public
*/
function numRows($result)
{
return $this->raiseError(DB_ERROR_NOT_CAPABLE);
}
 
// }}}
// {{{ affectedRows()
 
/**
* Returns the affected rows of a query
*
* @return mixed DB_Error or number of rows
*
* @access public
*/
function affectedRows()
{
return $this->raiseError(DB_ERROR_NOT_CAPABLE);
}
 
// }}}
// {{{ errorNative()
 
/**
* Returns an errormessage, provides by the database
*
* @return mixed DB_Error or message
*
* @access public
*/
function errorNative()
{
return $this->raiseError(DB_ERROR_NOT_CAPABLE);
}
 
// }}}
// {{{ getSequenceName()
 
/**
* Generate the name used inside the database for a sequence
*
* The createSequence() docblock contains notes about storing sequence
* names.
*
* @param string $sqn the sequence's public name
*
* @return string the sequence's name in the backend
*
* @see DB_common::createSequence(), DB_common::dropSequence(),
* DB_common::nextID(), DB_common::setOption()
* @access private
*/
function getSequenceName($sqn)
{
return sprintf($this->getOption('seqname_format'),
preg_replace('/[^a-z0-9_.]/i', '_', $sqn));
}
 
// }}}
// {{{ nextId()
 
/**
* Returns the next free id in a sequence
*
* @param string $seq_name name of the sequence
* @param boolean $ondemand when true, the seqence is automatically
* created if it does not exist
*
* @return int the next id number in the sequence. DB_Error if problem.
*
* @see DB_common::createSequence(), DB_common::dropSequence(),
* DB_common::getSequenceName()
* @access public
*/
function nextId($seq_name, $ondemand = true)
{
return $this->raiseError(DB_ERROR_NOT_CAPABLE);
}
 
// }}}
// {{{ createSequence()
 
/**
* Creates a new sequence
*
* The name of a given sequence is determined by passing the string
* provided in the <var>$seq_name</var> argument through PHP's sprintf()
* function using the value from the <var>seqname_format</var> option as
* the sprintf()'s format argument.
*
* <var>seqname_format</var> is set via setOption().
*
* @param string $seq_name name of the new sequence
*
* @return int DB_OK on success. A DB_Error object is returned if
* problems arise.
*
* @see DB_common::dropSequence(), DB_common::getSequenceName(),
* DB_common::nextID()
* @access public
*/
function createSequence($seq_name)
{
return $this->raiseError(DB_ERROR_NOT_CAPABLE);
}
 
// }}}
// {{{ dropSequence()
 
/**
* Deletes a sequence
*
* @param string $seq_name name of the sequence to be deleted
*
* @return int DB_OK on success. DB_Error if problems.
*
* @see DB_common::createSequence(), DB_common::getSequenceName(),
* DB_common::nextID()
* @access public
*/
function dropSequence($seq_name)
{
return $this->raiseError(DB_ERROR_NOT_CAPABLE);
}
 
// }}}
// {{{ tableInfo()
 
/**
* Returns information about a table or a result set
*
* The format of the resulting array depends on which <var>$mode</var>
* you select. The sample output below is based on this query:
* <pre>
* SELECT tblFoo.fldID, tblFoo.fldPhone, tblBar.fldId
* FROM tblFoo
* JOIN tblBar ON tblFoo.fldId = tblBar.fldId
* </pre>
*
* <ul>
* <li>
*
* <kbd>null</kbd> (default)
* <pre>
* [0] => Array (
* [table] => tblFoo
* [name] => fldId
* [type] => int
* [len] => 11
* [flags] => primary_key not_null
* )
* [1] => Array (
* [table] => tblFoo
* [name] => fldPhone
* [type] => string
* [len] => 20
* [flags] =>
* )
* [2] => Array (
* [table] => tblBar
* [name] => fldId
* [type] => int
* [len] => 11
* [flags] => primary_key not_null
* )
* </pre>
*
* </li><li>
*
* <kbd>DB_TABLEINFO_ORDER</kbd>
*
* <p>In addition to the information found in the default output,
* a notation of the number of columns is provided by the
* <samp>num_fields</samp> element while the <samp>order</samp>
* element provides an array with the column names as the keys and
* their location index number (corresponding to the keys in the
* the default output) as the values.</p>
*
* <p>If a result set has identical field names, the last one is
* used.</p>
*
* <pre>
* [num_fields] => 3
* [order] => Array (
* [fldId] => 2
* [fldTrans] => 1
* )
* </pre>
*
* </li><li>
*
* <kbd>DB_TABLEINFO_ORDERTABLE</kbd>
*
* <p>Similar to <kbd>DB_TABLEINFO_ORDER</kbd> but adds more
* dimensions to the array in which the table names are keys and
* the field names are sub-keys. This is helpful for queries that
* join tables which have identical field names.</p>
*
* <pre>
* [num_fields] => 3
* [ordertable] => Array (
* [tblFoo] => Array (
* [fldId] => 0
* [fldPhone] => 1
* )
* [tblBar] => Array (
* [fldId] => 2
* )
* )
* </pre>
*
* </li>
* </ul>
*
* The <samp>flags</samp> element contains a space separated list
* of extra information about the field. This data is inconsistent
* between DBMS's due to the way each DBMS works.
* + <samp>primary_key</samp>
* + <samp>unique_key</samp>
* + <samp>multiple_key</samp>
* + <samp>not_null</samp>
*
* Most DBMS's only provide the <samp>table</samp> and <samp>flags</samp>
* elements if <var>$result</var> is a table name. The following DBMS's
* provide full information from queries:
* + fbsql
* + mysql
*
* If the 'portability' option has <samp>DB_PORTABILITY_LOWERCASE</samp>
* turned on, the names of tables and fields will be lowercased.
*
* @param object|string $result DB_result object from a query or a
* string containing the name of a table.
* While this also accepts a query result
* resource identifier, this behavior is
* deprecated.
* @param int $mode either unused or one of the tableInfo modes:
* <kbd>DB_TABLEINFO_ORDERTABLE</kbd>,
* <kbd>DB_TABLEINFO_ORDER</kbd> or
* <kbd>DB_TABLEINFO_FULL</kbd> (which does both).
* These are bitwise, so the first two can be
* combined using <kbd>|</kbd>.
* @return array an associative array with the information requested.
* If something goes wrong an error object is returned.
*
* @see DB_common::setOption()
* @access public
*/
function tableInfo($result, $mode = null)
{
/*
* If the DB_<driver> class has a tableInfo() method, that one
* overrides this one. But, if the driver doesn't have one,
* this method runs and tells users about that fact.
*/
return $this->raiseError(DB_ERROR_NOT_CAPABLE);
}
 
// }}}
// {{{ getTables()
 
/**
* @deprecated Deprecated in release 1.2 or lower
*/
function getTables()
{
return $this->getListOf('tables');
}
 
// }}}
// {{{ getListOf()
 
/**
* list internal DB info
* valid values for $type are db dependent,
* often: databases, users, view, functions
*
* @param string $type type of requested info
*
* @return mixed DB_Error or the requested data
*
* @access public
*/
function getListOf($type)
{
$sql = $this->getSpecialQuery($type);
if ($sql === null) { // No support
return $this->raiseError(DB_ERROR_UNSUPPORTED);
} elseif (is_int($sql) || DB::isError($sql)) { // Previous error
return $this->raiseError($sql);
} elseif (is_array($sql)) { // Already the result
return $sql;
}
return $this->getCol($sql); // Launch this query
}
 
// }}}
// {{{ getSpecialQuery()
 
/**
* Returns the query needed to get some backend info
*
* @param string $type What kind of info you want to retrieve
*
* @return string The SQL query string
*
* @access public
*/
function getSpecialQuery($type)
{
return $this->raiseError(DB_ERROR_UNSUPPORTED);
}
 
// }}}
// {{{ _rtrimArrayValues()
 
/**
* Right trim all strings in an array
*
* @param array $array the array to be trimmed (passed by reference)
* @return void
* @access private
*/
function _rtrimArrayValues(&$array)
{
foreach ($array as $key => $value) {
if (is_string($value)) {
$array[$key] = rtrim($value);
}
}
}
 
// }}}
// {{{ _convertNullArrayValuesToEmpty()
 
/**
* Convert all null values in an array to empty strings
*
* @param array $array the array to be de-nullified (passed by reference)
* @return void
* @access private
*/
function _convertNullArrayValuesToEmpty(&$array)
{
foreach ($array as $key => $value) {
if (is_null($value)) {
$array[$key] = '';
}
}
}
 
// }}}
}
 
/*
* Local variables:
* tab-width: 4
* c-basic-offset: 4
* End:
*/
 
?>
/trunk/applications/jrest/lib/DB
New file
Property changes:
Added: svn:ignore
+.directory
/trunk/applications/jrest/lib/zip.php
New file
0,0 → 1,190
<?php
/* vim: set expandtab sw=4 ts=4 sts=4: */
/**
*
* @version $Id: zip.lib.php 10240 2007-04-01 11:02:46Z cybot_tm $
*/
 
/**
* Zip file creation class.
* Makes zip files.
*
* Based on :
*
* http://www.zend.com/codex.php?id=535&single=1
* By Eric Mueller <eric@themepark.com>
*
* http://www.zend.com/codex.php?id=470&single=1
* by Denis125 <webmaster@atlant.ru>
*
* a patch from Peter Listiak <mlady@users.sourceforge.net> for last modified
* date and time of the compressed file
*
* Official ZIP file format: http://www.pkware.com/appnote.txt
*
* @access public
*/
class zipfile
{
/**
* Array to store compressed data
*
* @var array $datasec
*/
var $datasec = array();
 
/**
* Central directory
*
* @var array $ctrl_dir
*/
var $ctrl_dir = array();
 
/**
* End of central directory record
*
* @var string $eof_ctrl_dir
*/
var $eof_ctrl_dir = "\x50\x4b\x05\x06\x00\x00\x00\x00";
 
/**
* Last offset position
*
* @var integer $old_offset
*/
var $old_offset = 0;
 
 
/**
* Converts an Unix timestamp to a four byte DOS date and time format (date
* in high two bytes, time in low two bytes allowing magnitude comparison).
*
* @param integer the current Unix timestamp
*
* @return integer the current date in a four byte DOS format
*
* @access private
*/
function unix2DosTime($unixtime = 0) {
$timearray = ($unixtime == 0) ? getdate() : getdate($unixtime);
 
if ($timearray['year'] < 1980) {
$timearray['year'] = 1980;
$timearray['mon'] = 1;
$timearray['mday'] = 1;
$timearray['hours'] = 0;
$timearray['minutes'] = 0;
$timearray['seconds'] = 0;
} // end if
 
return (($timearray['year'] - 1980) << 25) | ($timearray['mon'] << 21) | ($timearray['mday'] << 16) |
($timearray['hours'] << 11) | ($timearray['minutes'] << 5) | ($timearray['seconds'] >> 1);
} // end of the 'unix2DosTime()' method
 
 
/**
* Adds "file" to archive
*
* @param string file contents
* @param string name of the file in the archive (may contains the path)
* @param integer the current timestamp
*
* @access public
*/
function addFile($data, $name, $time = 0)
{
$name = str_replace('\\', '/', $name);
 
$dtime = dechex($this->unix2DosTime($time));
$hexdtime = '\x' . $dtime[6] . $dtime[7]
. '\x' . $dtime[4] . $dtime[5]
. '\x' . $dtime[2] . $dtime[3]
. '\x' . $dtime[0] . $dtime[1];
eval('$hexdtime = "' . $hexdtime . '";');
 
$fr = "\x50\x4b\x03\x04";
$fr .= "\x14\x00"; // ver needed to extract
$fr .= "\x00\x00"; // gen purpose bit flag
$fr .= "\x08\x00"; // compression method
$fr .= $hexdtime; // last mod time and date
 
// "local file header" segment
$unc_len = strlen($data);
$crc = crc32($data);
$zdata = gzcompress($data);
$zdata = substr(substr($zdata, 0, strlen($zdata) - 4), 2); // fix crc bug
$c_len = strlen($zdata);
$fr .= pack('V', $crc); // crc32
$fr .= pack('V', $c_len); // compressed filesize
$fr .= pack('V', $unc_len); // uncompressed filesize
$fr .= pack('v', strlen($name)); // length of filename
$fr .= pack('v', 0); // extra field length
$fr .= $name;
 
// "file data" segment
$fr .= $zdata;
 
// "data descriptor" segment (optional but necessary if archive is not
// served as file)
// nijel(2004-10-19): this seems not to be needed at all and causes
// problems in some cases (bug #1037737)
//$fr .= pack('V', $crc); // crc32
//$fr .= pack('V', $c_len); // compressed filesize
//$fr .= pack('V', $unc_len); // uncompressed filesize
 
// add this entry to array
$this -> datasec[] = $fr;
 
// now add to central directory record
$cdrec = "\x50\x4b\x01\x02";
$cdrec .= "\x00\x00"; // version made by
$cdrec .= "\x14\x00"; // version needed to extract
$cdrec .= "\x00\x00"; // gen purpose bit flag
$cdrec .= "\x08\x00"; // compression method
$cdrec .= $hexdtime; // last mod time & date
$cdrec .= pack('V', $crc); // crc32
$cdrec .= pack('V', $c_len); // compressed filesize
$cdrec .= pack('V', $unc_len); // uncompressed filesize
$cdrec .= pack('v', strlen($name)); // length of filename
$cdrec .= pack('v', 0); // extra field length
$cdrec .= pack('v', 0); // file comment length
$cdrec .= pack('v', 0); // disk number start
$cdrec .= pack('v', 0); // internal file attributes
$cdrec .= pack('V', 32); // external file attributes - 'archive' bit set
 
$cdrec .= pack('V', $this -> old_offset); // relative offset of local header
$this -> old_offset += strlen($fr);
 
$cdrec .= $name;
 
// optional extra field, file comment goes here
// save to central directory
$this -> ctrl_dir[] = $cdrec;
} // end of the 'addFile()' method
 
 
/**
* Dumps out file
*
* @return string the zipped file
*
* @access public
*/
function file()
{
$data = implode('', $this -> datasec);
$ctrldir = implode('', $this -> ctrl_dir);
 
return
$data .
$ctrldir .
$this -> eof_ctrl_dir .
pack('v', sizeof($this -> ctrl_dir)) . // total # of entries "on this disk"
pack('v', sizeof($this -> ctrl_dir)) . // total # of entries overall
pack('V', strlen($ctrldir)) . // size of central dir
pack('V', strlen($data)) . // offset to start of central dir
"\x00\x00"; // .zip file comment length
} // end of the 'file()' method
 
} // end of the 'zipfile' class
?>
/trunk/applications/jrest/scripts/Maintenance.php
New file
0,0 → 1,141
<?php
 
class Maintenance extends JRestService {
/**
* Méthode appelée avec une requête de type GET.
*
*/
function executer($param = array()) {
$debut = microtime(true);
echo "Recherche des stations ayant des coordonnées mais aucune commune associee ...";
$requete = "SELECT * FROM `ods_stations` WHERE os_ce_commune NOT REGEXP '^-?[0-9]+$' AND os_ce_commune NOT IN (SELECT oc_code_insee FROM ods_communes)";
$liste_stations = $this->executerRequete($requete);
echo " ".count($liste_stations)." stations trouvées \n";
echo "Début de la recherche des communes associées \n";
$recherche_infos = new OdsCommune($this->config);
$communes_inconnues = array();
$infos_stations_completees = array();
foreach($liste_stations as $station) {
$infos_code_insee = $this->effectuerRechercheCommune($station['os_latitude'], $station['os_longitude']);
$infos_code_insee['ancien_nom'] = $station['os_ce_commune'];
$infos_code_insee['lat'] = $station['os_latitude'];
$infos_code_insee['lon'] = $station['os_longitude'];
if($infos_code_insee['certitude'] == "ok") {
$infos_stations_completees[$station['os_id_station']] = $infos_code_insee;
} else {
$communes_inconnues[$station['os_id_station']] = $infos_code_insee;
}
}
echo "Fin de la recherche : \n";
echo " - ".count($infos_stations_completees)." stations se verront affecter un code insee \n";
echo " - ".count($communes_inconnues)." stations ne correspondent à aucune commune connue \n";
file_put_contents($this->config["appli"]["chemin_fichiers_temp"]."/communes_inconnues.txt", print_r($communes_inconnues, true));
file_put_contents($this->config["appli"]["chemin_fichiers_temp"]."/communes_localisees.txt", print_r($infos_stations_completees, true));
$fin = microtime(true) - $debut;
echo "La recherche à pris ".$fin." secondes \n";
echo "Modification des stations dont la certitude est ok \n";
$suite = microtime(true);
 
foreach($infos_stations_completees as $id_station => $infos_station) {
$requete = "UPDATE ods_stations SET os_ce_commune = ".$this->proteger($infos_station['codeINSEE'])." WHERE os_id_station = ".$this->proteger($id_station);
$this->executerRequeteSimple($requete);
}
$suite_et_fin = microtime(true) - $suite;
echo "Fin de modification des stations concernées \n";
echo "La mise à jour de la base a pris ".$suite_et_fin." secondes \n";
echo "Les stations non modifiées sont disponibles dans le fichier situé dans ".$this->config["appli"]["chemin_fichiers_temp"]."/communes_inconnues.txt \n";
}
function effectuerRechercheCommune($lat, $lon) {
$url_commune = "http://api.tela-botanica.org/service:eflore:0.1/osm/nom-commune?lon=".urlencode($lon)."&lat=".urlencode($lat);
$infos_commune_json = @file_get_contents($url_commune);
$infos = null;
if($infos_commune_json != null) {
$infos_d = json_decode($infos_commune_json, true);
if(isset($infos_d['codeINSEE']) && trim($infos_d['codeINSEE']) != "") {
$infos_d['source'] = 'osm';
$infos = $infos_d;
$infos['certitude'] = 'ok';
} else {
$infos = $this->rechercherParGoogleMaps($lat, $lon);
}
} else {
$infos = $this->rechercherParGoogleMaps($lat, $lon);
}
return $infos;
}
private function rechercherParGoogleMaps($lat, $lon) {
$url_commune_fallback = "https://maps.googleapis.com/maps/api/geocode/json?latlng=".urlencode($lat).",".urlencode($lon)."&sensor=false";
$infos = $this->decoderRetourGoogleMaps(@file_get_contents($url_commune_fallback));
return $infos;
}
private function decoderRetourGoogleMaps($retour) {
$nom = null;
$code_postal = null;
$retour_infos_tpl = array("certitude" => "bof", "source" => "google", "nom" => "", "codeINSEE" => "");
if($retour != null) {
$retour = json_decode($retour, true);
if(isset($retour['results']) && count($retour['results']) != 0) {
$infos_commune = $retour['results'][0];
foreach($infos_commune['address_components'] as $tranche) {
if(isset($tranche['types'])) {
if(in_array('locality',$tranche['types'])) {
$nom = $tranche['long_name'];
}
if(in_array('postal_code',$tranche['types'])) {
$code_postal = $tranche['long_name'];
}
if($nom != null && $code_postal != null) {
break;
}
}
}
}
}
if($nom != null && $code_postal != null) {
$dpt = substr($code_postal, 0, 2);
$dpt = $dpt."___";
// le retour de google maps est un code postal et pas un code insee
$requete = "SELECT oc_code_insee FROM ods_communes WHERE oc_nom LIKE ".$this->proteger($nom."%")." AND oc_code_insee LIKE ".$this->proteger($dpt);
$resultat = $this->executerRequete($requete);
if(!empty($resultat)) {
$retour_infos[1] = $resultat[0]['oc_code_insee'];
$retour_infos_tpl = array(
"certitude" => "ok",
"source" => "google",
"nom" => $nom,
"codeINSEE" => $resultat[0]['oc_code_insee']);
} else {
$retour_infos_tpl = array(
"certitude" => "douteux",
"source" => "google",
"nom" => $nom,
"codeINSEE" => $code_postal);
}
}
return $retour_infos_tpl;
}
}
?>
/trunk/applications/jrest/.htaccess
New file
0,0 → 1,4
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^.*$ /applications/jrest/index.php/
/trunk/applications/jrest/JRest.php
New file
0,0 → 1,302
<?php
// In : utf8 url_encoded (get et post)
// Out : utf8
 
// TODO : gerer les retours : dans ce controleur : code retour et envoi ...
class JRest {
 
/** Parsed configuration file */
private $config;
 
/** The HTTP request method used. */
private $method = 'GET';
 
/** The HTTP request data sent (if any). */
private $requestData = NULL;
 
/** Array of strings to convert into the HTTP response. */
private $output = array();
 
/** Nom resource. */
private $resource = NULL;
 
/** Identifiant unique resource. */
private $uid = NULL;
 
/**
* Constructor. Parses the configuration file "JRest.ini", grabs any request data sent, records the HTTP
* request method used and parses the request URL to find out the requested resource
* @param str iniFile Configuration file to use
*/
public function JRest($iniFile = 'jrest.ini.php') {
$this->config = parse_ini_file($iniFile, TRUE);
if (isset($_SERVER['REQUEST_URI']) && isset($_SERVER['REQUEST_METHOD']) && isset($_SERVER['QUERY_STRING'])) {
if (isset($_SERVER['CONTENT_LENGTH']) && $_SERVER['CONTENT_LENGTH'] > 0) {
$this->requestData = '';
$httpContent = fopen('php://input', 'r');
while ($data = fread($httpContent, 1024)) {
$this->requestData .= $data;
}
fclose($httpContent);
}
if (strlen($_SERVER['QUERY_STRING']) == 0) {
$len = strlen($_SERVER['REQUEST_URI']);
} else {
$len = -(strlen($_SERVER['QUERY_STRING']) + 1);
}
$urlString = substr($_SERVER['REQUEST_URI'], strlen($this->config['settings']['baseURL']), $len);
 
$urlParts = explode('/', $urlString);
 
if (isset($urlParts[0])) $this->resource = $urlParts[0];
if (count($urlParts) > 1 && $urlParts[1] != '') {
array_shift($urlParts);
foreach ($urlParts as $uid) {
if ($uid != '') {
$this->uid[] = urldecode($uid);
}
}
}
 
$this->method = $_SERVER['REQUEST_METHOD'];
} else {
trigger_error('I require the server variables REQUEST_URI, REQUEST_METHOD and QUERY_STRING to work.', E_USER_ERROR);
}
}
 
/**
* Execute the request.
*/
function exec() {
switch ($this->method) {
case 'GET':
$this->get();
break;
case 'POST':
$this->post();
break;
case 'DELETE':
$this->delete();
break;
case 'PUT':
$this->add();
break;
}
}
 
/**
* Execute a GET request. A GET request fetches a list of resource when no resource name is given, a list of element
* when a resource name is given, or a resource element when a resource and resource unique identifier are given. It does not change the
* database contents.
*/
private function get() {
if ($this->resource) {
$resource_file = 'services/'.ucfirst($this->resource).'.php';
$resource_class = ucfirst($this->resource);
if (file_exists($resource_file)) {
include_once $resource_file;
if (class_exists($resource_class)) {
$service = new $resource_class($this->config);
if ($this->uid) { // get a resource element
if (method_exists($service, 'getElement')) {
$service->getElement($this->uid);
}
} elseif (method_exists($service, 'getRessource')) { // get all elements of a ressource
$service->getRessource();
}
}
}
} else { // get resources
// include set.jrest.php, instanticiation et appel
}
}
 
private function post() {
$pairs = array();
// Récupération des paramètres passés dans le contenu de la requête HTTP (= POST)
if ($this->requestData) {
$pairs = $this->parseRequestData();
}
 
// Ajout des informations concernant l'upload de fichier passées dans la variable $_FILE
if(isset($_FILES)) {
foreach ($_FILES as $v) {
$pairs[$v['name']] = $v;
}
 
// Ne pas effacer cette ligne ! Elle est indispensable pour les services du Carnet en ligne
// qui n'utilisent que le tableau pairs dans les posts
$pairs = array_merge($pairs, $_POST);
}
 
// gestion du contenu du post
if(isset($_POST))
{
// Safari ne sait pas envoyer des DELETE avec gwt...
// Nous utilisons le parametre "action" passé dans le POST qui doit contenir DELETE pour lancer la supression
if (isset($pairs['action']) && $pairs['action'] == 'DELETE') {
$this->delete();
return;
}
 
if (count($pairs) != 0) {
if ($this->uid) { // get a resource element
$resource_file = 'services/'.ucfirst($this->resource).'.php';
$resource_class = ucfirst($this->resource);
if (file_exists($resource_file)) {
include_once $resource_file;
if (class_exists($resource_class)) {
$service = new $resource_class($this->config);
if (method_exists($service,'updateElement')) { // Update element
// TODO : a voir le retour ...
if ($service->updateElement($this->uid, $pairs)) {
$this->created();
}
}
}
}
} else { // get all elements of a ressource
$this->add($pairs);
}
} else {
$this->lengthRequired();
}
}
}
 
private function delete() {
$resource_file = 'services/'.ucfirst($this->resource).'.php';
$resource_class = ucfirst($this->resource);
if (file_exists($resource_file)) {
include_once $resource_file;
if (class_exists($resource_class)) {
$service = new $resource_class($this->config);
if ($this->uid) { // get a resource element
if (method_exists($service, 'deleteElement')) { // Delete element
if ($service->deleteElement($this->uid)) {
$this->noContent();
}
}
}
}
}
}
 
private function add($pairs = null) {
if (is_null($pairs)) {
$pairs = array();
// Récupération des paramètres passés dans le contenu de la requête HTTP (= POST)
// FIXME : vérifier que l'on récupère bien les données passées par PUT
if ($this->requestData) {
$pairs = $this->parseRequestData();
}
}
 
if (count($pairs) != 0) {
$resource_file = 'services/'.ucfirst($this->resource).'.php';
$resource_class = ucfirst($this->resource);
if (file_exists($resource_file)) {
include_once $resource_file;
if (class_exists($resource_class)) {
$service = new $resource_class($this->config);
if (method_exists($service,'createElement')) { // Create a new element
if ($service->createElement($pairs)) {
$this->created();
}
}
}
}
} else {
$this->lengthRequired();
}
}
 
/**
* Parse the HTTP request data.
* @return str[] Array of name value pairs
*/
private function parseRequestData() {
$values = array();
$pairs = explode('&', $this->requestData);
foreach ($pairs as $pair) {
$parts = explode('=', $pair);
if (isset($parts[0]) && isset($parts[1])) {
$parts[1] = rtrim(urldecode($parts[1]));
$values[$parts[0]] = $parts[1];
}
}
return $values;
}
 
/**
* Send a HTTP 201 response header.
*/
private function created($url = FALSE) {
header('HTTP/1.0 201 Created');
if ($url) {
header('Location: '.$url);
}
}
 
/**
* Send a HTTP 204 response header.
*/
private function noContent() {
header('HTTP/1.0 204 No Content');
}
 
/**
* Send a HTTP 400 response header.
*/
private function badRequest() {
header('HTTP/1.0 400 Bad Request');
}
 
/**
* Send a HTTP 401 response header.
*/
private function unauthorized($realm = 'JRest') {
if (!isset($_SERVER['PHP_AUTH_USER']) || !isset($_SERVER['PHP_AUTH_PW'])) {
header('WWW-Authenticate: Basic realm="'.$realm.'"');
}
header('HTTP/1.0 401 Unauthorized');
}
 
/**
* Send a HTTP 404 response header.
*/
private function notFound() {
header('HTTP/1.0 404 Not Found');
}
 
/**
* Send a HTTP 405 response header.
*/
private function methodNotAllowed($allowed = 'GET, HEAD') {
header('HTTP/1.0 405 Method Not Allowed');
header('Allow: '.$allowed);
}
 
/**
* Send a HTTP 406 response header.
*/
private function notAcceptable() {
header('HTTP/1.0 406 Not Acceptable');
echo join(', ', array_keys($this->config['renderers']));
}
 
/**
* Send a HTTP 411 response header.
*/
private function lengthRequired() {
header('HTTP/1.0 411 Length Required');
}
 
/**
* Send a HTTP 500 response header.
*/
private function internalServerError() {
header('HTTP/1.0 500 Internal Server Error');
}
}
?>
/trunk/applications/jrest/cli.php
New file
0,0 → 1,80
<?php
/**
* Script principal d'appel aux script de jrest par ligne de commande.
* Pour le moment ne supporte pas correctement les méthodes ayant des paramètres.
*/
 
/**
* La fonction __autoload() charge dynamiquement les classes trouvées dans le code.
*
* Cette fonction est appelée par php5 quand il trouve une instanciation de classe dans le code.
*
*@param string le nom de la classe appelée.
*@return void le fichier contenant la classe doit être inclu par la fonction.
*/
function __autoload($classe) {
if (class_exists($classe)) {
return null;
}
 
$chemins = array('', 'scripts/', 'lib/', 'services/');
foreach ($chemins as $chemin) {
$chemin = $chemin.$classe.'.php';
if (file_exists($chemin)) {
require_once $chemin;
}
}
}
 
/**
* Configure PHP en fonction des paramètres du fichier de config.
* @param array $config le tableau de paramètres extraits du fichier ini.
*/
function parametrer($config) {
// Réglages de PHP
setlocale(LC_ALL, $config['settings']['locale']);
date_default_timezone_set($config['settings']['fuseauHoraire']);
}
 
try {
if (php_sapi_name() == 'cli') {
if ($_SERVER['argc'] < 2){
$message = "Erreur: vous n'avez pas indiqué le nom du script à appeler.";
throw new Exception($message, E_USER_ERROR);
}
 
// suppression du premier paramètre qui est le nom de ce fichier
array_shift($argv);
 
if ($_SERVER['argc'] == 0){
$message = "Erreur: vous n'avez pas indiqué le nom du script à lancer";
throw new Exception($message, E_USER_ERROR);
}
 
// récupération du nom du script à lancer
$nomScript = array_shift($argv);
 
$params = $argv;
$_SERVER['SERVER_NAME'] = 'localhost';
 
$config = parse_ini_file('jrest.ini.php', TRUE);
parametrer($config);
 
$script = new $nomScript($config);
if (!is_callable(array($script, 'executer'))) {
$message = "Erreur: la méthode 'executer' du script '$nomScript' n'existe pas ou n'est pas accessible";
throw new Exception($message, E_USER_ERROR);
}
$script->executer($params);
} else {
$message = "Erreur: ce fichier est destiné a être appelé en ligne de commande.";
throw new Exception($message, E_USER_ERROR);
}
} catch (Exception $e) {
$tps = date('Y-m-j H:i:s');
$message = $e->getMessage();
$code = $e->getCode();
echo "$tps - $code : $message\n";
}
exit(0);
?>
/trunk/applications/jrest/index.php
New file
0,0 → 1,40
<?php
 
// Decommenter ces lignes si version de php < 5
//require_once 'lib/JSON.php';
 
// Lazy require
// TODO : voir si on ne peut pas dépacer ces inclusions directement dans les services.
//require_once 'lib/DBAccessor.php';
//require_once 'lib/SpreadsheetProductor.php';
//require_once 'lib/PDFProductor.php';
//require 'JRest.php';
 
/**
* La fonction __autoload() charge dynamiquement les classes trouvées dans le code.
*
* Cette fonction est appelée par php5 quand il trouve une instanciation de classe dans le code.
*
*@param string le nom de la classe appelée.
*@return void le fichier contenant la classe doit être inclu par la fonction.
*/
function __autoloadJRest($classe)
{
if (class_exists($classe)) {
return null;
}
 
$chemins = array('', 'services/', 'services/include/', 'lib/');
foreach ($chemins as $chemin) {
$chemin = $chemin.$classe.'.php';
if (file_exists($chemin)) {
require_once $chemin;
}
}
}
 
spl_autoload_register('__autoloadJRest');
 
$jRest = new JRest();
$jRest->exec();
?>
/trunk/applications/jrest/jrest.ini.defaut.php
New file
0,0 → 1,52
;<?/*
[settings]
baseURL = "/applications/jrest/"
; URL de base absolue du Jrest ODS
baseURLAbsolu = "http://localhost/applications/jrest/"
; URL de base absolue du Jrest du ODS construit dynamiquement
baseURLAbsoluDyn = "http://localhost/applications/jrest/%s"
; Url absolue de l'application
odsSaisieUrlAbsolu = "http://localhost/node/15"
; Indication du nom de l'éditeur pour les flux de syndication
editeur = "Observatoire des saisons"
; Format du Guid du CEL pour les flux de syndication principalement
guidObsTpl = "urn:lsid:obs-saisons.fr:saisie:%s"
;Format du Guid des images pour les flux de syndication
guidImgTpl = "%s"
; Indication de la locale (setLocale(LC_ALL, ?)) pour les classes héritant
locale = "fr_FR.UTF-8"
; Indication du fuseau horraire par défaut date_default_timezone_set(?)pour les classes héritant
fuseauHoraire = "Europe/Paris"
 
; Default
[appli]
phptype = mysql
username =
password =
hostspec = localhost
database = ods
format_date = d/m/Y
locale = fr_FR
chemin_fichiers_temp = /tmp
id_participant_demo = 4
id_participant_admin = 1
 
format_M = 400_300
format_S = 150_100
format_XS = 75_50
format_CXS = 60_60
taille_max = 2097152
couleur_fond_carre = CFCFCF
chemin_stockage_images_especes = /documents/images_especes
 
; LOGS
[log]
cheminlog = "/Logs/"
timezone = "Europe/Paris"
taillemax = 100000
 
; ADMIN
[jrest_admin]
admin = admin@domain.org
ip_autorisees = "162.38.234.9,localhost,www.obs-saisons.fr"
;*/?>
/trunk/applications/jrest/services/OdsObservation.php
New file
0,0 → 1,336
<?php
 
class OdsObservation extends OdsTriple {
 
const PREFIXE = 'get';
const ABBR_LISTE_EVENEMENTS = 'evenement';
 
 
/**
* Méthodes d'extractions d'informations
*/
 
/**
* Méthode appelée avec une requête de type GET.
*
*/
function getElement($param = array()) {
 
$type = $param[0];
 
if ($type == '*' || is_numeric($type)) {
$info = $this->getElementParDefaut($param);
} else {
$methode = self::PREFIXE.$type;
if (method_exists($this, $methode)) {
array_shift($param);
$info = $this->$methode($param);
} else {
$this->messages[] = "Le type d'information demandé '$type' n'est pas disponible.";
}
}
 
$this->envoyer($info);
}
 
private function getElementParDefaut($params) {
 
}
 
private function getAnneeMinimumObservation() {
$requete_annee_min_obs = 'SELECT MIN(YEAR(oo_date)) as min_annee FROM ods_observations '.
'WHERE oo_date != "0000-00-00"';
$resultat_min_annee_obs = $this->executerRequete($requete_annee_min_obs);
return !empty($resultat_min_annee_obs) ? $resultat_min_annee_obs[0]['min_annee'] : Date('Y');
}
 
private function getAnneesAyantObservations() {
$requete_annee_min_obs = 'SELECT DISTINCT YEAR(oo_date) as annee FROM ods_observations '.
'WHERE oo_date != "0000-00-00" AND YEAR(oo_date) <= "'.date('Y').'" '.
'ORDER BY annee DESC';
$resultat_annees_ayant_obs = $this->executerRequete($requete_annee_min_obs);
$annees_ayant_obs = [];
foreach($resultat_annees_ayant_obs as $res_annee_ayant_obs) {
$annees_ayant_obs[] = $res_annee_ayant_obs['annee'];
}
 
return $annees_ayant_obs;
}
 
private function getObservationsPourStation($params) {
 
$id_station = isset($params[0]) ? $params[0] : '';
$annee = isset($params[1]) ? $params[1] : '';
 
return ;
 
}
 
private function getObservationsPourIndividu($params) {
 
$id_individu = isset($params[0]) ? $params[0] : '';
$annee = isset($params[1]) ? $params[1] : '';
 
$requete_liste_observation_individu = 'SELECT * FROM ods_observations '.
'WHERE oo_ce_individu ='.$this->proteger($id_individu).' '.
'AND DAY(oo_date) != "00" '.
'ORDER BY YEAR(oo_date) DESC, MONTH(oo_date) ASC, DAY(oo_date) ASC ';
 
$liste_observation_individu = $this->executerRequete($requete_liste_observation_individu);
 
$liste_observation_individu_formatees = array();
 
foreach($liste_observation_individu as $observation_individu) {
 
$annee_obs = date("Y",strtotime($observation_individu['oo_date']));
$stade_observation_complet = $this->getInformationEvenementParId($observation_individu['oo_ce_evenement']);
 
$abbr_stade_observation = $stade_observation_complet['ot_cle'];
 
$infos_stades = $this->renvoyerInformationStadeAPartirChaineTriple($abbr_stade_observation);
 
$titre_stade = $infos_stades['nom'];
$numero_stade = $infos_stades['numero'];
$abreviation_stade = $infos_stades['abreviation'];
 
$tableau_date = date_parse($observation_individu['oo_date']);
 
if(!$this->estUneDateInvalide($tableau_date['day'], $tableau_date['month'], $tableau_date['year'])) {
 
$date_observation_formatee = date($this->config['appli']['format_date'], strtotime($observation_individu['oo_date']));
$liste_observation_individu_formatees[$annee_obs][$titre_stade][$numero_stade][$observation_individu['oo_id_observation']] = [
'date' => $date_observation_formatee,
'absence_evenement' => $observation_individu['oo_absence_evenement']
];
}
}
 
krsort($liste_observation_individu_formatees);
 
return $liste_observation_individu_formatees;
}
 
/**
* Méthodes de création et modification d'informations
*/
 
/**
* Méthode appelée pour mettre à jour un élément
*/
public function updateElement($uid, $params) {
 
$elements_requis = array('id_participant','id_individu', 'id_evenement', 'date_evenement');
$erreurs = array();
 
foreach($elements_requis as $requis) {
if(!isset($params[$requis])) {
$erreurs[$requis] = 'erreur ';
}
}
 
if(!empty($erreurs)) {
$this->envoyer($erreurs);
exit;
}
 
if(!isset($params['annee_en_cours'])) {
$annee_en_cours = date('Y');
} else {
$annee_en_cours = $params['annee_en_cours'];
}
 
$id_participant = $params['id_participant'];
$id_individu = $params['id_individu'];
 
$a_modifier = !empty($params['id_observation']) ? $params['id_observation'] : false;
$retour = array();
 
$date_evenement = $this->formaterDateObservationPourBdd($params['date_evenement']);
 
// dans le cas des ajouts ou modifications on vérifie que l'on insère pas une date
// déjà existante, car ça n'a pas de sens pour un même individu et stade
if (strpos($date_evenement, '00-00') === false) {
$requete_existe_avec_cette_date = 'SELECT * FROM ods_observations '.
'WHERE oo_ce_participant = '.$this->proteger($id_participant).' AND '.
'oo_ce_individu = '.$this->proteger($id_individu).' AND '.
'oo_ce_evenement = '.$this->proteger($params['id_evenement']).' AND '.
'oo_date = '.$this->proteger($date_evenement);
$resultat_requete_existe_avec_cette_date = $this->executerRequete($requete_existe_avec_cette_date);
 
if(!empty($resultat_requete_existe_avec_cette_date)) {
$this->envoyer([
'erreurs' => [
'date' => 'Une observation à cette date existe déjà pour ce stade et cet individu'
]
]);
exit;
}
}
 
$obs_a_traiter = array(
'date_evenement' => $date_evenement,
'id_evenement' => $params['id_evenement'],
'id_individu' => $params['id_individu'],
'absence_observation' => 0,
'commentaire' => '');
 
if($a_modifier) {
$obs_a_traiter['id_observation'] = $a_modifier;
$retour = $this->modifierObservation($id_participant, $obs_a_traiter);
} else {
// le signalement de l'absence d'un stade pour une année et un individu donné est toujours
// une nouvelle observation (car cela bloque la saisie d'obs supplementaires pour ce stade,
// cette année et cet individu)
if(!empty($params['absence_observation']) && $params['absence_observation'] == 1) {
// si l'observation d'absence concerne l'année en cours on la met à la date du jour
// sinon on la met arbitrairement au premier janvier de l'année concernée
$obs_a_traiter['date_evenement'] = ($annee_en_cours == date('Y')) ? date('Y-m-d') : $annee_en_cours.'-01-01';
$obs_a_traiter['absence_observation'] = $params['absence_observation'];
}
$retour = ['id_observation' => $this->insererObservation($id_participant, $obs_a_traiter)];
}
 
$this->envoyer($retour);
}
 
private function insererObservation($id_participant, $donnees_obs_a_inserer) {
 
$nouvel_ordre = 1;
 
$requete_max_ordre = 'SELECT MAX(oo_ordre) as max_ordre FROM ods_observations WHERE '.
'oo_ce_participant = '.$this->proteger($id_participant);
 
$resultat_requete_ordre = $this->executerRequete($requete_max_ordre);
 
if(count($resultat_requete_ordre) > 0) {
$nouvel_ordre = $resultat_requete_ordre[0]['max_ordre'] + 1;
}
 
$requete_nouvelle_observation = 'INSERT INTO ods_observations '.
'(oo_ce_participant, oo_ordre, oo_ce_individu, oo_ce_evenement, oo_date, oo_commentaire, oo_date_saisie, oo_date_modification, oo_absence_evenement) '.
'VALUES '.
'( '.
$this->proteger($id_participant).','.
$this->proteger($nouvel_ordre).','.
$this->proteger($donnees_obs_a_inserer['id_individu']).','.
$this->proteger($donnees_obs_a_inserer['id_evenement']).','.
$this->proteger($donnees_obs_a_inserer['date_evenement']).','.
'"",'.
'NOW(),'.
'NOW(),'.
$this->proteger($donnees_obs_a_inserer['absence_observation']).
')';
 
$this->executerRequeteSimple($requete_nouvelle_observation);
return $this->renvoyerDernierIdInsere();
}
 
private function modifierObservation($id_participant, $donnees_obs_a_inserer) {
 
$requete_obs_existante = 'SELECT * FROM ods_observations '.
'WHERE oo_id_observation = '.$this->proteger($donnees_obs_a_inserer['id_observation']);
$obs_existante = $this->executerRequete($requete_obs_existante);
 
if(empty($obs_existante)) {
return false;
}
 
$obs_existante = $obs_existante[0];
 
$tableau_date = date_parse($donnees_obs_a_inserer['date_evenement']);
$est_une_suppression_obs = $this->estUneDateInvalide($tableau_date['day'], $tableau_date['month'], $tableau_date['year']);
 
$resultat = true;
// Pour supprimer une observation, on indique une date invalide contenant seulement son année.
// Celle-ci n'est du coup pas supprimée mais plutôt désactivée car le reste du programme
// ne tient normalement pas compte des obs avec des dates au format 00-00-yyyy (où yyyy est l'année où elle a eu lieu).
// Ceci permet de garder les données et les faires traiter par Isabelle.
// TODO: on pourrait faire bien mieux mais ça fonctionne et changer le système demanderait
// plus de temps mais ça serait une bonne chose à faire.
// Par contre si c'est une obs de signalement d'absence d'évènement on la supprime carrément
// car ça n'a pas d'interêt à être gardé (car c'est surement pour saisir une vraie obs après)
if($est_une_suppression_obs && $obs_existante['oo_absence_evenement'] == 1) {
 
$requete_suppression_observation = 'DELETE FROM ods_observations '.
'WHERE oo_id_observation = '.$this->proteger($donnees_obs_a_inserer['id_observation']).' '.
'AND oo_absence_evenement = 1';
 
$this->executerRequeteSimple($requete_suppression_observation);
} else {
$requete_modification_observation = 'UPDATE ods_observations '.
'SET '.
'oo_date = '.$this->proteger($donnees_obs_a_inserer['date_evenement']).', '.
'oo_commentaire = '.$this->proteger($donnees_obs_a_inserer['commentaire']).', '.
'oo_date_modification = NOW() '.
'WHERE oo_id_observation = '.$donnees_obs_a_inserer['id_observation'].' '.
'AND oo_ce_participant = '.$this->proteger($id_participant);
 
$resultat = $this->executerRequeteSimple($requete_modification_observation);
}
 
return $resultat;
}
 
private function renvoyerIdObservationSiEvenementDejaObserveCetteAnnee($id_evenement, $tableau_observations_cette_annee) {
 
foreach($tableau_observations_cette_annee as $observation_cette_annee) {
 
if($id_evenement == $observation_cette_annee['oo_ce_evenement']) {
return $observation_cette_annee['oo_id_observation'];
}
}
 
return false;
}
 
private function renvoyerIdEvenementSiChampDeFormulaireObservation($champ) {
 
$tab_champ = explode('observation_',$champ);
 
if(count($tab_champ) > 1 && is_numeric($tab_champ[1])) {
return $tab_champ[1];
}
 
return false;
}
 
private function formaterDateObservationPourBdd($date) {
 
$format = $this->config['appli']['format_date'];
 
if(!isset($format)) {
$format = 'd/m/Y';
}
 
$recherche = array('d','m','Y');
$remplacement = array('([0-9]{1,2})','([0-9]{1,2})','([0-9]{4})');
 
$pattern_date_simple = str_replace($recherche, $remplacement, $format);
 
$date_tab = explode('/', $date);
$time = mktime(0,0,0,$date_tab[1],$date_tab[0],$date_tab[2]);
 
if($this->estUneDateInvalide($date_tab[1],$date_tab[0],$date_tab[2])) {
$date_a_renvoyer = $date_tab[2].'-'.$date_tab[1].'-'.$date_tab[0];
} else {
$date_a_renvoyer = date('Y-m-d', $time);
}
 
return $date_a_renvoyer;
}
 
private function estUneDateInvalide($jour, $mois, $annee) {
return ($jour == '00' || $mois == '00' || $annee == '0000');
}
 
/**
* Méthode appelée pour supprimer un élément
*/
public function deleteElement($uid) {
 
// Envoie sur la sortie standard
$this->envoyer();
}
}
?>
/trunk/applications/jrest/services/OdsSpipVersDrupalMigration.php
New file
0,0 → 1,504
<?php
 
class OdsSpipVersDrupalMigration extends OdsTriple {
 
const PREFIXE = 'get';
const BDD_DRUPAL = 'ods_redesign';
const BDD_ANCIEN_ODS = 'ods';
const BDD_NOUVEAU_ODS = 'ods_saisie';
/**
* Méthode appelée avec une requête de type GET.
*
*/
function getElement($param = array()) {
$type = $param[0];
if ($type == '*' || is_numeric($type)) {
$info = $this->getElementParDefaut($param);
} else {
$methode = self::PREFIXE.$type;
echo $methode;
if (method_exists($this, $methode)) {
array_shift($param);
$info = $this->$methode($param);
} else {
$this->messages[] = "Le type d'information demandé '$type' n'est pas disponible.";
}
}
// Envoi sur la sortie standard
$this->envoyer($info);
}
/**
* Méthode appelée pour ajouter un élément.
*/
public function createElement($params) {
print_r($params);
$this->envoyer();
}
private function getElementParDefaut($param) {
}
private function getReparationCommunes() {
$requete_stations_sans_communes = 'SELECT * FROM ods_saisie.ods_stations WHERE os_ce_commune = "NULL"';
$stations_sans_communes = $this->executerRequete($requete_stations_sans_communes);
$z = 0;
$nb_com = count($stations_sans_communes);
$ct = 0 ;
foreach($stations_sans_communes as $station_sans_commune) {
echo $ct.' ';
$nom_station = $station_sans_commune['os_nom'];
$id_station = $station_sans_commune['os_id_station'];
$nom_station_joker = str_replace('-','_',$nom_station);
$nom_station_joker = str_replace(' ','_',$nom_station);
$requete_recherche_nom = 'SELECT oc_code_insee FROM ods_saisie.ods_communes WHERE oc_nom LIKE "'.$nom_station_joker.'"';
 
$recherche_nom = $this->executerRequete($requete_recherche_nom);
if(!empty($recherche_nom)) {
$requete_maj_nom = 'UPDATE ods_stations set os_ce_commune = '.$recherche_nom[0]['oc_code_insee'].' WHERE os_id_station = '.$id_station;
echo $requete_maj_nom.'<br />';
$modif_nom = $this->executerRequeteSimple($requete_maj_nom);
$z++;
} else {
echo "rien trouvé pour la station ".$nom_station.'<br />';
}
$ct++;
}
echo $z.' stations réparées sur '.$nb_com;
 
$requete_altitude_communes = 'SELECT * FROM ods_communes_temp';
$res_alt_communes = $this->executerRequete($requete_altitude_communes);
}
private function getMigrationParticipants() {
$requete_participants_spip = 'SELECT * FROM '.self::BDD_ANCIEN_ODS.'.PARTICIPANT WHERE PARTICIPANT_ID > 4';
$participants_spip = $this->executerRequete($requete_participants_spip);
$requete_insertion_participants_drupal = 'INSERT INTO '.self::BDD_DRUPAL.'.drupal_users '.
'(uid, name, pass, mail, created, access, login, status, timezone, language, init) '.
'VALUES ';
foreach($participants_spip as $participant_spip) {
$requete_insertion_participants_drupal .= '('.
$this->proteger($participant_spip['PARTICIPANT_ID']).', '.
$this->proteger($participant_spip['PARTICIPANT_PSEUDO']).', '.
$this->proteger(md5($participant_spip['PARTICIPANT_MOTDEPASSE'])).', '.
$this->proteger($participant_spip['PARTICIPANT_EMAIL']).', '.
$this->proteger(strtotime($participant_spip['PARTICIPANT_DATE_INSCRIPTION'])).', '.
$this->proteger(strtotime($participant_spip['PARTICIPANT_DATE_INSCRIPTION'])).', '.
$this->proteger(strtotime($participant_spip['PARTICIPANT_DATE_INSCRIPTION'])).', '.
$this->proteger('1').','.
$this->proteger('7200').', '.
$this->proteger('fr').', '.
$this->proteger($participant_spip['PARTICIPANT_EMAIL']).' '.
'),';
}
 
$requete_insertion_participants_drupal = rtrim($requete_insertion_participants_drupal,',');
 
$this->executerRequeteSimple($requete_insertion_participants_drupal);
}
private function getMigrationStations($liste_evenements) {
$this->supprimerDoublonStation();
$requete_communes_anciennes_stations = 'SELECT STATION_ID, COMMUNE.COMMUNE_ID, COMMUNE.COMMUNE_NOM, COMMUNE.COMMUNE_CODEPOSTAL '.
'FROM '.self::BDD_ANCIEN_ODS.'.SEQUENCE '.
'LEFT JOIN '.self::BDD_ANCIEN_ODS.'.COMMUNE '.
' ON '.self::BDD_ANCIEN_ODS.'.COMMUNE.COMMUNE_ID = '.self::BDD_ANCIEN_ODS.'.SEQUENCE.COMMUNE_ID '.
'GROUP BY STATION_ID';
$res_communes_anciennes_stations = $this->executerRequete($requete_communes_anciennes_stations);
$communes_anciennes_stations = array();
foreach($res_communes_anciennes_stations as $com_stat) {
$id_station = $com_stat['STATION_ID'];
$communes_anciennes_stations[$id_station]['nom_commune'] = $com_stat['COMMUNE_NOM'];
$communes_anciennes_stations[$id_station]['id_commune'] = $com_stat['COMMUNE_ID'];
$communes_anciennes_stations[$id_station]['code_postal_commune'] = $com_stat['COMMUNE_CODEPOSTAL'];
}
$requete_selection_station_ancien = 'SELECT * FROM '.self::BDD_ANCIEN_ODS.'.STATION WHERE PARTICIPANT_ID > 5';
$stations_anciennes = $this->executerRequete($requete_selection_station_ancien);
$requete_insertion_station_nouveau = 'INSERT INTO '.self::BDD_NOUVEAU_ODS.'.ods_stations '.
'(os_id_station, os_ce_participant, os_nom, os_ce_commune, os_latitude, os_longitude, os_altitude, os_ce_environnement, os_commentaire) '.
'VALUES ';
foreach($stations_anciennes as $station_ancienne) {
$nouvel_id_environnement = $this->getNouvelIdEnvironnement($station_ancienne['STATION_ENVIRONNEMENT_ID']);
$id_commune = $communes_anciennes_stations[$station_ancienne['STATION_ID']]['id_commune'];
$nom_commune = $communes_anciennes_stations[$station_ancienne['STATION_ID']]['nom_commune'];
$cp_commune = $communes_anciennes_stations[$station_ancienne['STATION_ID']]['code_postal_commune'];
$code_insee_commune = $this->getCodeInseePourNomEtCP($nom_commune,$cp_commune);
// Correction des quelques noms de stations vides
if(trim($station_ancienne['STATION_NOM']) == '') {
$station_ancienne['STATION_NOM'] = 'station inconnue';
}
$requete_insertion_station_nouveau .= '('.
$this->proteger($station_ancienne['STATION_ID']).', '.
$this->proteger($station_ancienne['PARTICIPANT_ID']).', '.
$this->proteger($station_ancienne['STATION_NOM']).', '.
$this->proteger($code_insee_commune).', '.
$this->proteger($station_ancienne['STATION_LATITUDE']).', '.
$this->proteger($station_ancienne['STATION_LONGITUDE']).', '.
$this->proteger($station_ancienne['STATION_ALTITUDE']).', '.
$this->proteger($nouvel_id_environnement).', '.
'""'.
'),';
 
}
$requete_insertion_station_nouveau = rtrim($requete_insertion_station_nouveau,',');
$this->executerRequeteSimple($requete_insertion_station_nouveau);
}
private function getMigrationIndividus() {
$anciennes_espece = $this->getAnciennesEspeceGroupeesParNomSci();
$nouvelles_especes = $this->getEspeceGroupeesParNomSci();
$requete_selection_sequence = 'SELECT * FROM '.self::BDD_ANCIEN_ODS.'.SEQUENCE ';
$sequences = $this->executerRequete($requete_selection_sequence);
$requete_insertion_sequence_nouveau = 'INSERT INTO '.self::BDD_NOUVEAU_ODS.'.ods_individus '.
'(oi_ce_espece, oi_ce_station, oi_nom) '.
'VALUES ';
$compteur_nom = 1;
$obs_a_migrer_par_individu = array();
foreach($sequences as $sequence) {
$nom_sci_espece = $anciennes_espece[$sequence['ESPECE_ID']];
$id_nouvelle_espece = $nouvelles_especes[$nom_sci_espece];
$requete_insertion_sequence_nouveau .= '('.
$this->proteger($id_nouvelle_espece).', '.
$this->proteger($sequence['STATION_ID']).', '.
$this->proteger('individu_'.$compteur_nom).' '.
'),';
$obs_a_migrer_par_individu['individu_'.$compteur_nom]['sequence'] = $sequence['SEQUENCE_ID'];
$compteur_nom++;
}
$requete_insertion_sequence_nouveau = rtrim($requete_insertion_sequence_nouveau,',');
$this->executerRequeteSimple($requete_insertion_sequence_nouveau);
}
private function getMigrationObservations() {
$anciennes_espece = $this->getAnciennesEspeceGroupeesParNomSci();
$nouvelles_especes = $this->getEspeceGroupeesParNomSci();
$requete_selection_mesure = 'SELECT * FROM '.self::BDD_ANCIEN_ODS.'.MESURE ORDER BY MESURE_DATE';
$mesures = $this->executerRequete($requete_selection_mesure);
$requete_selection_sequence = 'SELECT * FROM '.self::BDD_ANCIEN_ODS.'.SEQUENCE';
$sequences = $this->executerRequete($requete_selection_sequence);
$requete_selection_station = 'SELECT * FROM '.self::BDD_ANCIEN_ODS.'.STATION';
$stations = $this->executerRequete($requete_selection_station);
$sequences_en_bordel = array();
$mesures_a_debordeliser = array();
$stations_a_classer = array();
foreach($stations as $station) {
$stations_a_classer[$station['STATION_ID']] = $station['PARTICIPANT_ID'];
}
foreach($sequences as $sequence) {
$sequences_en_bordel[$sequence['SEQUENCE_ID']]['station'] = $sequence['STATION_ID'];
$sequences_en_bordel[$sequence['SEQUENCE_ID']]['espece'] = $sequence['ESPECE_ID'];
}
foreach($mesures as $mesure) {
$station_de_mesure = $sequences_en_bordel[$mesure['SEQUENCE_ID']]['station'];
$espece_de_mesure = $sequences_en_bordel[$mesure['SEQUENCE_ID']]['espece'];
$individu_de_mesure = $mesure['MESURE_INDIVIDU'];
$evenement = $mesure['EVENEMENT_ID'];
$date_evenement = $mesure['MESURE_DATE'];
$id_participant = $stations_a_classer[$sequences_en_bordel[$mesure['SEQUENCE_ID']]['station']];
$mesures_a_debordeliser[$id_participant][$station_de_mesure][$espece_de_mesure][$individu_de_mesure][$evenement][] = $date_evenement;
}
$requete_insertion_individus_nouveau = 'INSERT INTO '.self::BDD_NOUVEAU_ODS.'.ods_individus '.
'(oi_id_individu, oi_ce_espece, oi_ce_station, oi_nom) '.
'VALUES ';
$requete_insertion_observations_nouveau = 'INSERT INTO '.self::BDD_NOUVEAU_ODS.'.ods_observations '.
'(oo_ce_participant, oo_ordre, oo_ce_individu, oo_ce_evenement,oo_date,oo_commentaire,oo_date_saisie,oo_date_modification) '.
'VALUES ';
$compteur_id_temp = 1;
$tableau_ancien_id_individu_nom_individu = array();
foreach($mesures_a_debordeliser as $id_participant => $stations_participant) {
$compteur_ordre_obs = 1;
foreach($stations_participant as $station => $especes) {
$id_station_individu = $station;
foreach($especes as $id_espece => $individus_espece) {
$nom_sci_espece = $anciennes_espece[$id_espece];
$id_nouvelle_espece = $nouvelles_especes[$nom_sci_espece];
foreach($individus_espece as $num_individu => $evenements) {
$nom_individu = 'individu_'.$num_individu;
$id_individu_temp = $compteur_id_temp;
foreach($evenements as $id_evenement => $evenement_individu) {
$nouvel_id_evenement = $this->getNouvelIdEvenement($id_evenement);
foreach($evenement_individu as $date_evenement) {
$requete_insertion_observations_nouveau .= '('.$this->proteger($id_participant).', '.
$this->proteger($compteur_ordre_obs).', '.
$this->proteger($compteur_id_temp).', '.
$this->proteger($nouvel_id_evenement).', '.
$this->proteger($date_evenement).', '.
"'',".
$this->proteger($date_evenement).', '.
$this->proteger($date_evenement).
'),';
$compteur_ordre_obs++;
}
}
$requete_insertion_individus_nouveau .= '('.
$this->proteger($compteur_id).', '.
$this->proteger($id_nouvelle_espece).', '.
$this->proteger($id_station_individu).', '.
$this->proteger($nom_individu).
'),';
$compteur_id_temp++;
}
}
}
}
$requete_insertion_individus_nouveau = rtrim($requete_insertion_individus_nouveau,',');
$this->executerRequeteSimple($requete_insertion_individus_nouveau);
$requete_insertion_observations_nouveau = rtrim($requete_insertion_observations_nouveau,',');
$this->executerRequeteSimple($requete_insertion_observations_nouveau);
}
private function getMigrationCommunes() {
$requete_communes = 'SELECT * FROM locations';
$communes = $this->executerRequete($requete_communes);
$requete_altitude_communes = 'SELECT * FROM ods_communes_temp';
$res_alt_communes = $this->executerRequete($requete_altitude_communes);
$altitudes_communes = array();
foreach($res_alt_communes as $commune_alt) {
$altitudes_communes[$commune_alt['oc_code_insee']] = $commune_alt['oc_altitude'];
}
$requete_insertion_communes_ods = 'INSERT INTO ods_communes '.
'(oc_code_insee, oc_nom, oc_secteur, oc_x_utm, oc_y_utm, oc_latitude, oc_longitude, oc_altitude) '.
'VALUES ';
foreach($communes as $commune) {
$lat_long = $this->convertirUtmVersLatLong($commune['x_utm'], $commune['y_utm'], $commune['sector']);
$altitude = $altitudes_communes[$commune['insee_code']];
$requete_insertion_communes_ods .= '('.
$this->proteger($commune['insee_code']).','.
$this->proteger($commune['name']).','.
$this->proteger($commune['sector']).','.
$this->proteger($commune['x_utm']).','.
$this->proteger($commune['y_utm']).','.
$this->proteger($lat_long['lat']).','.
$this->proteger($lat_long['long']).','.
$this->proteger($altitude).
'),';
}
$requete_insertion_communes_ods = rtrim($requete_insertion_communes_ods,',');
$this->executerRequeteSimple($requete_insertion_communes_ods);
}
private function convertirUtmVersLatLong($x, $y, $sector) {
$lat_long = array();
$convertisseur = new gPoint();
$convertisseur->setUTM($x, $y, $sector);
$convertisseur->convertTMtoLL();
$lat_long['lat'] = $convertisseur->Lat();
$lat_long['long'] = $convertisseur->Long();
return $lat_long;
}
private function getNouvelIdEnvironnement($ancien_id_environnement) {
$ids_env = array('1' => '7','2' => '8','3' => '9','4' => '10','6' => '11');
return $ids_env[$ancien_id_environnement];
}
private function getNouvelIdEvenement($ancien_id_evenement) {
$ids_evts = array('1' => '13',
'2' => '14',
'3' => '15',
'4' => '16',
'5' => '17',
'6' => '18',
'7' => '19',
'8' => '20');
return $ids_evts[$ancien_id_evenement];
}
private function getEspeceGroupeesParNomSci() {
$requete_espece = 'SELECT * FROM '.self::BDD_NOUVEAU_ODS.'.ods_especes';
$especes = $this->executerRequeteSimple($requete_espece);
$especes_ordonnees = array();
foreach($especes as $espece) {
$indice = strtolower(str_replace(' ','_', $espece['oe_nom_scientifique']));
$especes_ordonnees[$indice] = $espece['oe_id_espece'];
}
return $especes_ordonnees;
}
private function getAnciennesEspeceGroupeesParNomSci() {
$requete_espece = 'SELECT * FROM '.self::BDD_ANCIEN_ODS.'.ESPECE';
$especes = $this->executerRequete($requete_espece);
$especes_ordonnees = array();
foreach($especes as $espece) {
$nom_sci = strtolower(str_replace(' ','_', $espece['ESPECE_NOM_SCIENTIFIQUE']));
$especes_ordonnees[$espece['ESPECE_ID']] = $nom_sci;
}
return $especes_ordonnees;
}
private function getCodeInseePourNomEtCP($nom_commune, $cp) {
if(trim($nom_commune) == '') {
return 'NULL';
}
$limite = 2;
if(strlen($cp) == 4) {
$limite = 1;
}
$dpt = substr($cp,0,$limite);
$requete_code_insee = 'SELECT oc_code_insee '.
'FROM '.self::BDD_NOUVEAU_ODS.'.ods_communes '.
'WHERE oc_nom = '.$this->proteger($nom_commune).' '.
'AND oc_code_insee LIKE "'.$dpt.'___" '.
'LIMIT 1';
$infos_code_insee_commune = $this->executerRequete($requete_code_insee);
if(empty($infos_code_insee_commune)) {
// a migrer manuellement
return '_migrer_manu_'.$nom_commune;
}
return $infos_code_insee_commune[0]['oc_code_insee'];
}
private function supprimerDoublonStation() {
$requete = 'SELECT STATION_ID, STATION_NOM, PARTICIPANT_ID FROM '.self::BDD_ANCIEN_ODS.'.STATION ORDER BY PARTICIPANT_ID, STATION_NOM, STATION_ID ';
$res = $this->executerRequete($requete);
$stations = array();
foreach($res as $station) {
$stations[$station['PARTICIPANT_ID']][$station['STATION_NOM']][] = $station['STATION_ID'];
}
foreach($stations as $participant => $stations) {
foreach($stations as $station_nom => $doublons) {
if(count($doublons) > 1) {
$id_garde = $doublons[0];
$ids_a_supprimer = implode(',',array_slice($doublons, 1));
$requete_fusion_stations = 'DELETE FROM '.self::BDD_ANCIEN_ODS.'.STATION WHERE STATION_ID IN ('.$ids_a_supprimer.') AND PARTICIPANT_ID = '.$participant;
$this->executerRequeteSimple($requete_fusion_stations);
$requete_fusion_stations_obs = 'UPDATE '.self::BDD_ANCIEN_ODS.'.SEQUENCE
SET STATION_ID = '.$id_garde.' '.
'WHERE STATION_ID IN ('.$ids_a_supprimer.') '.
'AND PARTICIPANT_ID = '.$participant;
$this->executerRequeteSimple($requete_fusion_stations_obs);
}
}
}
}
}
?>
/trunk/applications/jrest/services/OdsSpamCheck.php
New file
0,0 → 1,43
<?php
 
class OdsSpamCheck extends OdsTriple {
/**
* Méthode appelée avec une requête de type GET.
*
*/
function getElement($param = array()) {
$recherche = "SELECT mail, name, uid FROM drupal_users WHERE uid > 2000";
echo $recherche;
$liste_utilisateurs = $this->executerRequete($recherche);
$chaine = '<ul>';
$chaine_sql = "IN (";
foreach($liste_utilisateurs as $utilisateur) {
if($this->estPeutEtreUnSpam($utilisateur['mail'])) {
$chaine .= '<li>'.$utilisateur['name'].' '.$utilisateur['uid'].'</li>';
$chaine_sql .= '"'.$utilisateur['uid'].'", ';
}
}
$chaine .= '</ul>';
echo $chaine.'<br />';
$chaine_sql = rtrim($chaine_sql, ', ').')';
echo $chaine_sql;
}
function estPeutEtreUnSpam($mail) {
$recherche_google = $this->effectuerRechercheGoogle($mail);
return substr_count($recherche_google,"www.stopforumspam.com/") > 0 &&
substr_count($recherche_google, 'Aucun résultat trouvé pour '.$mail) <= 0;
}
function effectuerRechercheGoogle($mail) {
return @file_get_contents("http://www.google.fr/search?q=".$mail."&ie=utf-8");
}
}
?>
/trunk/applications/jrest/services/OdsTriple.php
New file
0,0 → 1,128
<?php
 
class OdsTriple extends JRestService {
/**
* Méthode appelée avec une requête de type GET.
*
*/
function getElement($param = array()) {
$abreviation_demandee = $param[0];
$abreviation = $this->transformerParametreEnAbreviation($abreviation_demandee);
$info = $this->obtenirValeursListeParAbreviation($abreviation);
$info = $this->formaterListeTripleEnTableauCleValeur($info);
// Envoi sur la sortie standard
$this->envoyer($info);
}
private function transformerParametreEnAbreviation($parametre) {
$parametre_tirets_supprimes = str_replace('-', ' ', $parametre);
$parametre_mots_majuscules = ucwords($parametre_tirets_supprimes);
$abreviation = str_replace(' ', '',$parametre_tirets_supprimes);
return $abreviation;
}
private function formaterListeTripleEnTableauCleValeur($info) {
$tableau_cle_valeur = array();
foreach($info as $id_triple => $triple) {
$tableau_cle_valeur[$id_triple] = $triple['ot_valeur'];
}
return $tableau_cle_valeur;
}
protected function obtenirValeursListeParId($id_liste) {
$requete = 'SELECT * FROM ods_triple WHERE ot_ce_parent ='.$this->proteger($id_liste);
$resultat = $this->executerRequete($requete);
return $resultat;
}
protected function obtenirValeursListeParAbreviation($abreviation_triple) {
$requete = 'SELECT * FROM ods_triples WHERE ot_ce_parent = (SELECT ot_id_triple FROM ods_triples WHERE ot_cle ='.$this->proteger($abreviation_triple).')';
$resultat = $this->executerRequete($requete);
return $this->grouperResultat($resultat);
}
protected function obtenirValeurTripleParId($id_triple) {
$requete = 'SELECT * FROM ods_triples WHERE ot_id_triple = '.$this->proteger($id_triple);
$resultat = $this->executerRequete($requete);
return $resultat[0]['ot_valeur'];
}
protected function obtenirValeurTripleParAbreviation($abreviation_triple) {
$requete = 'SELECT * FROM ods_triples WHERE ot_cle = '.$this->proteger($abreviation_triple);
$resultat = $this->executerRequete($requete);
return $resultat[0]['ot_valeur'];
}
private function grouperResultat($tableau_resultat_requete_triple) {
$tableau_resultat_requete_triple_ordonne = array();
foreach($tableau_resultat_requete_triple as $valeur_triple) {
$tableau_resultat_requete_triple_ordonne[$valeur_triple['ot_id_triple']] = $valeur_triple;
}
return $tableau_resultat_requete_triple_ordonne;
}
protected function renvoyerInformationStadeAPartirChaineTriple($stade_observation_complet) {
$infos_stades = explode('_',$stade_observation_complet);
$titre_numero_stade = array('nom','abreviation','numero');
if($this->estUnEvenementAvecDesSousStades($stade_observation_complet)) {
$titre_numero_stade['nom'] = $infos_stades[1];
$titre_numero_stade['numero'] = $infos_stades[3];
$titre_numero_stade['abreviation'] = $infos_stades[1];
} else {
$titre_numero_stade['nom'] = $infos_stades[1].' '.$infos_stades[2];
$titre_numero_stade['abreviation'] = $infos_stades[1].'_'.$infos_stades[2];
$titre_numero_stade['numero'] = '';
}
return $titre_numero_stade;
}
protected function getInformationEvenementParId($id_evenement) {
$requete_informations_evenement = 'SELECT * FROM ods_triples '.
'WHERE ot_id_triple IN '.
'('.$this->proteger($id_evenement).')';
$resultat_requete_informations_evenement = $this->executerRequete($requete_informations_evenement);
$informations_evenement = $resultat_requete_informations_evenement[0];
return $informations_evenement;
}
protected function estUnEvenementAvecDesSousStades($evenement) {
$infos_stades = explode('_',$evenement);
if(count($infos_stades) <= 3) {
return false;
}
return true;
}
}
 
?>
/trunk/applications/jrest/services/OdsSyndicationObservation.php
New file
0,0 → 1,468
<?php
/**
* Service fournissant des informations concernant le CEL au format RSS1, RSS2 ou ATOM.
* Encodage en entrée : utf8
* Encodage en sortie : utf8
* Format du service :
* /CelSyndicationObservation/liste-des-flux
* /CelSyndicationObservation/opml
* /CelSyndicationObservation/par-defaut/(rss1|rss2|atom)?start=0&limit=150
* /CelSyndicationObservation/pour-admin/(rss1|rss2|atom)?start=0&limit=150
* /CelSyndicationObservation/par-mots-cles/(rss1|rss2|atom)/mot-cle?start=0&limit=150
* /CelSyndicationObservation/par-commune/(rss1|rss2|atom)/nom-commune?start=0&limit=150
*
* Les paramêtres :
* - "start" indique le numéro du premier item à afficher
* - "limit" nombre d'items à afficher
*
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
* @version $Id$
* @copyright 2010
*/
class OdsSyndicationObservation extends OdsTriple {
 
private $parametres_origines = null;
private $format = null;
private $service = null;
private $squelette = null;
private $squelette_dossier = null;
private $flux = array();
 
private $tri = 'oo_date_modification';
private $tri_dir = "DESC";
 
private $mode = 'normal';
 
/**
* Méthode appelée avec une requête de type GET.
*/
public function getElement($params = array()) {
// Initialisation des variables
$this->parametres_origines = $params;
$info = array();
$contenu = '';
 
if (! $this->etreFluxAdmin() || $this->authentifier()) {
// Pré traitement des paramêtres
$pour_bdd = false;
$p = $this->traiterParametres(array('service', 'format'), $params, $pour_bdd);
extract($p);
$this->traiterParametresTri();
$this->parametres = $params;
$this->squelette_dossier = dirname(__FILE__).DIRECTORY_SEPARATOR.'squelettes'.DIRECTORY_SEPARATOR;
 
// Récupération de la liste des flux
$this->chargerListeDesFlux();
 
// Chargement du bon type de service demandé
if (isset($service)) {
$this->service = $this->traiterNomService($service);
$methode = $this->getNomMethodeService();
if (method_exists($this, $methode)) {
if (isset($format) && preg_match('/^(?:rss1|rss2|atom)$/i', $format)) {
// Mise en minuscule de l'indication du format
$this->format = strtolower($format);
// Définition du fichier squelette demandé
$this->squelette = $this->squelette_dossier.$this->format.'.tpl.xml';
} else if (isset($this->flux[$this->service])) {
$this->format = '';
$this->messages[] = "Le service ODS Syndication nécessite d'indiquer en second paramètre le format : rss1, rss2 ou atom.";
}
 
if (!isset($this->flux[$this->service]) || isset($this->format)) {
// Suppression des paramêtres inutile pour le reste des méthodes
array_shift($this->parametres);
array_shift($this->parametres);
 
// Récupération du contenu à renvoyer
$contenu = $this->$methode();
}
} else {
$this->messages[] = "Le type d'information demandé '$this->service' n'est pas disponible.";
}
} else {
$this->messages[] = "Le service ODS Syndication Observation nécessite d'indiquer en premier paramètre le type d'information demandé.";
}
}
 
// Envoie sur la sortie standard
$encodage = 'utf-8';
$mime = $this->getTypeMime();
$formatage_json = $this->getFormatageJson();
$this->envoyer($contenu, $mime, $encodage, $formatage_json);
}
 
private function traiterParametresTri() {
$tris_possibles = array('oo_date_modification', 'oo_date_saisie', 'oo_date');
$tris_dirs_possibles = array('ASC', 'DESC');
 
$this->tri = !empty($_GET['tri']) && in_array($_GET['tri'], $tris_possibles) ? $_GET['tri'] : 'oo_date_modification';
$this->tri_dir = !empty($_GET['tri_dir']) && in_array($_GET['tri_dir'], $tris_dirs_possibles) ? $_GET['tri_dir'] : 'DESC';
 
unset($_GET['tri']);
unset($_GET['tri_dir']);
}
 
private function getUrlBase() {
$url_base = sprintf($this->config['settings']['baseURLAbsoluDyn'], get_class($this).'/');
return $url_base;
}
 
private function getUrlServiceBase() {
$url_service = $this->getUrlBase().implode('/', $this->parametres_origines);
return $url_service;
}
 
private function traiterNomService($nom) {
$nom = strtolower($nom);
return $nom;
}
 
private function getNomMethodeService() {
$methode = '';
$service_formate = str_replace(' ', '', ucwords(implode(' ', explode('-', $this->service))));
$methode = 'getService'.$service_formate;
return $methode;
}
 
private function getTypeMime() {
$mime = '';
$test = isset($this->format) ? $this->format : $this->service;
switch ($test) {
case 'atom' :
$mime = 'application/atom+xml';
break;
case 'rss1' :
case 'rss2' :
$mime = 'application/rss+xml';
break;
case 'opml' :
$mime = 'text/x-opml';
break;
default:
$mime = 'text/html';
}
return $mime;
}
 
private function getFormatageJson() {
$json = false;
switch ($this->service) {
case 'liste-des-flux' :
$json = true;
break;
default:
$json = false;
}
return $json;
}
 
private function getFlux($nom) {
return isset($this->flux[$nom]) ? $this->flux[$nom] : array();
}
 
private function setFlux($nom, $titre, $description) {
$url_base = $this->getUrlBase();
$formats = array('atom', 'rss2', 'rss1');
$flux = array();
foreach ($formats as $format) {
$url = $url_base.$nom.'/'.$format;
$flux[$format] = $url;
}
$this->flux[$nom] = array('titre' => $titre, 'description' => $description, 'urls' => $flux);
}
 
private function chargerListeDesFlux() {
$this->setFlux('par-defaut', 'Flux de syndication des observations d\'ODS',
'Ce flux fournit des informations sur les observations d\'ODS');
}
 
private function getServiceListeDesFlux() {
return $this->flux;
}
 
private function getServiceOpml() {
$donnees = array();
$id = 1;
foreach ($this->flux as $flux_nom => $flux){
$info = array();
$info['type'] = 'atom';
$info['titre'] = $flux['titre'];
$info['texte'] = "ODS - Obs - $flux_nom";
$info['description'] = $flux['description'];
$info['url_xml'] = $this->getUrlBase().$flux_nom.'/atom';
$donnees['liste_flux'][] = $info;
}
 
$this->squelette = $this->squelette_dossier.'opml.tpl.xml';
$contenu = Cel::traiterSquelettePhp($this->squelette, $donnees);
return $contenu;
}
 
private function getServiceParDefaut() {
// Construction de la requête
$requete = 'SELECT oo.* '.
'FROM ods_observations oo '.
'INNER JOIN ods_individus oi '.
'ON oo.oo_ce_individu = oi.oi_id_individu '.
'INNER JOIN ods_especes oe '.
'ON oe.oe_espece_active = 1 '.
'AND oi.oi_ce_espece = oe.oe_id_espece '.
'WHERE oo_ce_participant != '.$this->config['appli']['id_participant_demo'].' '.
'AND oo_ce_participant != '.$this->config['appli']['id_participant_admin'].' '.
'AND DAY(oo_date) != "00" '.
'AND oo_absence_evenement = "0" '.
'ORDER BY '.$this->tri.' '.$this->tri_dir.' '.
"LIMIT $this->start,$this->limit ";
 
$elements = $this->executerRequete($requete);
 
// Création du contenu
$contenu = $this->executerService($elements);
return $contenu;
}
 
private function getServiceModificationObservations() {
 
$this->mode = 'admin';
 
// Construction de la requête
$requete = 'SELECT * '.
'FROM ods_observations oo '.
'INNER JOIN ods_individus oi '.
'ON oo.oo_ce_individu = oi.oi_id_individu '.
'INNER JOIN ods_especes oe '.
'ON oe.oe_espece_active = 1 '.
'AND oi.oi_ce_espece = oe.oe_id_espece '.
'LEFT JOIN ods_stations os '.
'ON oi.oi_ce_station = os.os_id_station '.
'WHERE oo_ce_participant != '.$this->config['appli']['id_participant_demo'].' '.
'AND oo_ce_participant != '.$this->config['appli']['id_participant_admin'].' '.
'AND oo_date_saisie != oo_date_modification '.
'ORDER BY '.$this->tri.' '.$this->tri_dir.' '.
"LIMIT $this->start,$this->limit ";
 
$elements = $this->executerRequete($requete);
 
// Création du contenu
$contenu = $this->executerService($elements);
return $contenu;
}
 
private function executerService($elements) {
$contenu = '';
if (is_array($elements)) {
// Prétraitement des données
$donnees = $this->construireDonneesCommunesAuFlux($elements);
 
foreach ($elements as $element) {
$donnees['items'][] = $this->construireDonneesCommunesAuxItems($element);
}
 
// Création du contenu à partir d'un template PHP
if (isset($this->squelette)) {
$contenu = JrestService::traiterSquelettePhp($this->squelette, $donnees);
}
}
return $contenu;
}
 
private function construireDonneesCommunesAuFlux($observations) {
$donnees = $this->getFlux($this->service);
$donnees['guid'] = $this->getUrlServiceBase();
$donnees['titre'] = $this->creerTitreService();
$donnees['description'] = $this->creerDescriptionService();
$donnees['lien_service'] = $this->creerUrlService();
$donnees['lien_ods'] = $this->config['settings']['odsSaisieUrlAbsolu'];
$donnees['editeur'] = $this->config['settings']['editeur'];
$derniere_info_en_date = reset($observations);
$date_modification_timestamp = strtotime($derniere_info_en_date['oo_date_modification']);
$donnees['date_maj_RSS'] = date(DATE_RSS, $date_modification_timestamp);
$donnees['date_maj_ATOM'] = date(DATE_ATOM, $date_modification_timestamp);
$donnees['date_maj_W3C'] = date(DATE_W3C, $date_modification_timestamp);
$donnees['annee_courante'] = date('Y');
$donnees['generateur'] = 'ODS - Jrest - OdsSyndicationObservation';
preg_match('/([0-9]+)/', '$Revision$', $match);
$donnees['generateur_version'] = isset($match[1]) ? $match[1] : 'Inconnue';
return $donnees;
}
 
private function construireDonneesCommunesAuxItems($observation) {
$item = array();
$date_modification_timestamp = $this->convertirDateHeureMysqlEnTimestamp($observation['oo_date_modification']);
$item['date_maj_simple'] = strftime('%A %d %B %Y', $date_modification_timestamp);
$item['date_maj_RSS'] = date(DATE_RSS, $date_modification_timestamp);
$item['date_maj_ATOM'] = date(DATE_ATOM, $date_modification_timestamp);
$item['date_maj_W3C'] = date(DATE_W3C, $date_modification_timestamp);
$item['date_creation_simple'] = strftime('%A %d %B %Y', strtotime($observation['oo_date_saisie']));
$item['titre'] = $this->creerTitre($observation);
$item['guid'] = $this->creerGuidItem($observation);
$item['lien'] = $this->creerUrlService();
$item['categorie'] = $this->creerCategorie($item);
$item['description'] = $this->creerDescription($this->protegerCaracteresHtmlDansChamps($observation), $item);
$item['description_encodee'] = htmlspecialchars($this->creerDescription($observation, $item));
$item['modifier_par'] = $this->creerAuteur($observation['oo_ce_participant'], $this->etreFluxAdmin());
return $item;
}
 
private function creerTitreService() {
$titre = '';
switch($this->service) {
case 'modification-observations':
$titre = 'Flux rss des dernières modifications d\'observations de l\'observatoire des saisons';
break;
default:
$titre = 'Flux rss de l\'observatoire des saisons';
}
return $titre;
}
 
private function creerDescriptionService() {
$description = '';
switch($this->service) {
case 'modification-observations':
$description = 'Flux rss des dernières modifications d\'observations de l\'observatoire des saisons';
break;
default:
$description = 'Flux rss de l\'observatoire des saisons';
}
return $description;
}
 
private function creerTitre($obs) {
$date_saisie = date("d/m/Y", strtotime($obs['oo_date']));
$date_modif = date("d/m/Y", strtotime($obs['oo_date_modification']));
 
$stade_obs = $this->obtenirValeurTripleParId($obs['oo_ce_evenement']);
$nom_plante = $this->obtenirNomEspecePourIdIndividu($obs['oo_ce_individu']);
$utilisateur = $this->creerAuteur($obs['oo_ce_participant'], $this->etreFluxAdmin());
$titre = "$stade_obs pour $nom_plante par $utilisateur observée le $date_saisie";
$titre = $this->nettoyerTexte($titre);
return $titre;
}
 
private function obtenirNomEspecePourIdIndividu($id_individu) {
 
$requete_id_espece_individu = 'SELECT oi_ce_espece FROM ods_individus '.
'WHERE oi_id_individu = '.$this->proteger($id_individu);
 
$resultat_id_espece = $this->executerRequete($requete_id_espece_individu);
$id_espece = $resultat_id_espece[0]['oi_ce_espece'];
 
$requete_nom_espece_individu = 'SELECT oe_nom_vernaculaire FROM ods_especes '.
'WHERE oe_id_espece = '.$this->proteger($id_espece);
 
$resultat_nom_espece = $this->executerRequete($requete_nom_espece_individu);
$nom_espece = $resultat_nom_espece[0]['oe_nom_vernaculaire'];
 
return $nom_espece;
}
 
private function creerGuidItem($element) {
$guid = sprintf($this->config['settings']['guidObsTpl'], 'obs'.$element['oo_id_observation']);
return $guid;
}
 
private function creerLienItem($element) {
return $this->config['settings']['odsSaisieUrlAbsolu'];
}
 
private function creerAuteur($element) {
 
//TODO externaliser les champs dans le fichier de config
$requete_selection_auteur = 'SELECT * FROM drupal_users '.
'WHERE uid = '.$this->proteger($element);
 
$resultat_auteur = $this->executerRequete($requete_selection_auteur);
 
$nom_auteur = !empty($resultat_auteur[0]['name']) ? $resultat_auteur[0]['name'] : "";
 
if($this->mode == 'admin') {
$nom_auteur = $resultat_auteur[0]['mail'];
}
 
return $nom_auteur;
}
 
private function creerDescription($obs, $item) {
 
$requete_commune_pour_station = 'SELECT os_ce_commune FROM ods_stations '.
'WHERE os_id_station = '.
'(SELECT oi_ce_station FROM ods_individus '.
'WHERE oi_id_individu = '.$this->proteger($obs['oo_ce_individu']).')';
 
$resultat_commune = $this->executerRequete($requete_commune_pour_station);
$commune = $resultat_commune[0]['os_ce_commune'];
 
if(is_numeric($commune)) {
$requete_lieu = 'SELECT * FROM ods_communes '.
'WHERE oc_code_insee = '.$this->proteger($commune);
 
$resultat_lieu = $this->executerRequete($requete_lieu);
if(!empty($resultat_lieu)) {
$lieu = $resultat_lieu[0]['oc_nom']. ' ('.substr($commune,0,2).')';
} else {
$lieu = $commune;
}
} else {
$lieu = $commune;
}
 
$description = "Observé à $lieu".'<br />';
 
if($this->mode == 'admin') {
$description .= ' Individu : '.$obs['oi_nom'].'<br />';
$description .= 'Station : '.$obs['os_nom'].'<br />';
if($this->estUneDateSqlInvalide($obs['oo_date'])) {
$description .= ' Date d\'observation supprimée <br />';
} else {
$description .= ' Date de l\'observation changée en : '.strftime('%A %d %B %Y', strtotime($obs['oo_date'])).'<br />';
}
$description .= 'Saisi le : '.$item['date_creation_simple'].'<br />';
$description .= 'Modifié le : '.$item['date_maj_simple'].'<br />';
}
 
$description = $this->nettoyerTexte($description);
 
return $description;
}
 
private function estUneDateSqlInvalide($date) {
 
$date_tab = explode('-', $date);
return ($date_tab[2] == '00' || $date_tab[1] == '00' || $date_tab[0] == '0000');
}
 
private function creerCategorie($element) {
$categorie = '';
$categorie = 'Observation';
$categorie = $this->nettoyerTexte($categorie);
return $categorie;
}
 
private function etreFluxAdmin() {
return (isset($_GET['admin']) && $_GET['admin'] == '1') ? true : false;
}
 
private function creerUrlService() {
$url_service = $this->getUrlServiceBase();
if (count($_GET) > 0) {
 
$url_service .= '?';
$requete = '';
 
foreach($_GET as $cle => $valeur) {
if($cle != '' && trim($valeur) != '') {
$requete .= '&'.$cle.'='.$valeur;
}
}
 
$url_service = $url_service.ltrim($requete, '&');
}
 
return $url_service;
}
}
?>
/trunk/applications/jrest/services/OdsMarqueur.php
New file
0,0 → 1,81
<?php
/*
* Created on 23 juin 2011
*
* To change the template for this generated file go to
* Window - Preferences - PHPeclipse - PHP - Code Templates
*/
 
class OdsMarqueur extends JRestService {
 
public function getElement() {
 
if(isset($_GET['couleurs'])) {
$couleurs = strtoupper(urldecode($_GET['couleurs']));
$couleurs = explode(',', $couleurs);
}
 
$taille = 15;
 
if(isset($_GET['taille'])) {
$taille = $_GET['taille'];
}
 
$image = imagecreatetruecolor($taille,$taille);
$faux_noir = imagecolorallocate($image, 64, 64, 64);
$noir = imagecolorallocate($image, 0, 0, 0);
 
if(count($couleurs) <= 0) {
return;
}
 
//$couleurs = array_unique($couleurs);
sort($couleurs);
 
$pas_angle = 360/count($couleurs);
$angle = 0;
 
foreach($couleurs as $couleur_html) {
 
$couleur_rgb = $this->html2rgb($couleur_html);
 
$couleur_allouee = imagecolorallocate($image, $couleur_rgb[0], $couleur_rgb[1], $couleur_rgb[2]);
imagefilledarc($image, $taille/2, $taille/2,
$taille, $taille-1,
$angle, $angle+$pas_angle,
$couleur_allouee, IMG_ARC_PIE);
$angle = $angle+$pas_angle;
}
 
imagefilledarc($image, $taille/2, $taille/2,
$taille, $taille,
0, 360,
$faux_noir, IMG_ARC_NOFILL);
 
imagecolortransparent($image, $noir);
 
header('Content-type: image/png');
imagepng($image);
imagedestroy($image);
}
 
function html2rgb($color)
{
if ($color[0] == '#')
$color = substr($color, 1);
 
if (strlen($color) == 6)
list($r, $g, $b) = array($color[0].$color[1],
$color[2].$color[3],
$color[4].$color[5]);
elseif (strlen($color) == 3)
list($r, $g, $b) = array($color[0].$color[0], $color[1].$color[1], $color[2].$color[2]);
else
return false;
 
$r = hexdec($r); $g = hexdec($g); $b = hexdec($b);
 
return array($r, $g, $b);
}
}
?>
/trunk/applications/jrest/services/squelettes/diff.tpl.html
New file
0,0 → 1,36
<table style="border:1px solid black;border-collapse:collapse;" summary="Différences entre les données du <?=$date_ancienne?> et du <?=$date_nouvelle?>.">
<caption style="text-align:left;font-weight:bold;">Différences</caption>
<thead style="border:1px solid black;">
<tr>
<th rowspan="2" style="border:1px dotted;">Champ</th>
<th rowspan="2" style="border:1px dotted;">Type</th>
<th <?=(($etat == 'M') ? 'colspan="2"' : '');?> style="border:1px dotted;">Valeur</th>
</tr>
<tr>
<?php if ($etat == 'M') : ?>
<th style="border:1px dotted;">Ancienne (<?=$date_ancienne?>)</th>
<?php endif; ?>
<th style="border:1px dotted;">Nouvelle (<?=$date_nouvelle?>)</th>
</tr>
</thead>
<tbody>
<?php foreach ($differences as $champ => $diff) : ?>
<?php if ($diff['type'] == 'A') :
$couleur = CFC;
elseif ($diff['type'] == 'M') :
$couleur = FFC;
elseif ($diff['type'] == 'S') :
$couleur = F99;
endif; ?>
<tr style="background-color:#<?=$couleur?>;">
<td style="border:1px dotted;"><?=$champ?></td>
<td style="text-align:center;border:1px dotted;"><?=$diff['type_txt']?></td>
<?php if ($etat == 'M') : ?>
<td style="border:1px dotted;"><?=$diff['ancien']?></td>
<?php endif; ?>
<td style="border:1px dotted;"><?=$diff['nouveau']?></td>
</tr>
<?php endforeach; ?>
</tbody>
</table>
/trunk/applications/jrest/services/squelettes/atom.tpl.xml
New file
0,0 → 1,32
<feed xmlns="http://www.w3.org/2005/Atom">
 
<title><?=$titre?></title>
<link href="<?=$lien_ods?>" rel="alternate" type="text/html" hreflang="fr" />
<link href="<?=$lien_service?>" rel="self" type="application/atom+xml"/>
<updated><?=$date_maj_ATOM?></updated>
<author>
<name><?=$editeur?></name>
</author>
<id><?=$guid?></id>
<rights>Copyright (c) <?=$annee_courante?>, <?=$editeur?></rights>
<generator uri="<?=$lien_coel?>" version="<?=$generateur_version?>"><?=$generateur?></generator>
 
 
<?php if (isset($items)) : ?>
<?php foreach ($items as $item) : ?>
<entry>
<id><?=$item['lien']?></id>
<title><?=$item['titre']?></title>
<link href="<?=$item['lien']?>"/>
<updated><?=$item['date_maj_ATOM']?></updated>
<author><name><?=$item['modifier_par']?></name></author>
<content type="xhtml" xml:lang="fr">
<div xmlns="http://www.w3.org/1999/xhtml">
<?=$item['description'];?>
</div>
</content>
</entry>
<?php endforeach; ?>
<?php endif; ?>
 
</feed>
/trunk/applications/jrest/services/squelettes/rss1.tpl.xml
New file
0,0 → 1,43
<!DOCTYPE rdf:RDF [
<!ENTITY % HTMLlat1 PUBLIC
"-//W3C//ENTITIES Latin 1 for XHTML//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml-lat1.ent">
%HTMLlat1;
]>
 
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns="http://purl.org/rss/1.0/">
 
<channel rdf:about="<?=$guid?>">
<title><?=$titre?></title>
<link><?=$lien_ods?></link>
<description><?=$description?></description>
<dc:publisher><?=$editeur?></dc:publisher>
<dc:date><?=$date_maj_W3C?></dc:date>
 
<?php if (isset($items)) : ?>
<items>
<rdf:Seq>
<?php foreach ($items as $item) : ?>
<rdf:li resource="<?=$item['guid']?>" />
<?php endforeach; ?>
</rdf:Seq>
</items>
<?php endif; ?>
 
</channel>
 
<?php if (isset($items)) : ?>
<?php foreach ($items as $item) : ?>
<item rdf:about="<?=$item['guid']?>">
<title><?=$item['titre']?></title>
<link><?=$item['lien']?></link>
<description><?=$item['description_encodee']?></description>
<dc:date><?=$item['date_maj_W3C']?></dc:date>
</item>
<?php endforeach; ?>
<?php endif; ?>
 
</rdf:RDF>
/trunk/applications/jrest/services/squelettes/rss2.tpl.xml
New file
0,0 → 1,21
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
<channel>
<title><?=$titre; ?></title>
<link><?=$lien_ods; ?></link>
<atom:link href="<?= $lien_service; ?>" rel="self" type="application/rss+xml" />
<description><?=$description; ?></description>
 
<?php if (isset($items)) : ?>
<?php foreach ($items as $item) : ?>
<item>
<guid><?=$item['guid']; ?></guid>
<title><?=$item['titre']; ?></title>
<link><?=$item['lien']; ?></link>
<description><?=$item['description_encodee']; ?></description>
<pubDate><?=$item['date_maj_RSS']; ?></pubDate>
</item>
<?php endforeach; ?>
<?php endif; ?>
 
</channel>
</rss>
/trunk/applications/jrest/services/squelettes
New file
Property changes:
Added: svn:ignore
+.directory
/trunk/applications/jrest/services/JRestService.php
New file
0,0 → 1,372
<?php
/**
* Classe mère abstraite contenant les méthodes génériques des services.
* Encodage en entrée : utf8
* Encodage en sortie : utf8
*
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @license GPL v3 <http://www.gnu.org/licenses/gpl.txt>
* @license CECILL v2 <http://www.cecill.info/licences/Licence_CeCILL_V2-en.txt>
* @version $Id$
* @copyright 2009
*/
abstract class JRestService {
 
public $config;
protected $bdd;
protected $log = array();
protected $messages = array();
protected $debug = array();
protected $distinct = false;
protected $orderby = null;
protected $formatRetour = 'objet';
protected $start = 0;
protected $limit = 150;
 
public function __construct($config, $demarrer_session = true) {
// Tableau contenant la config de Jrest
$this->config = $config;
 
// Connection à la base de données
$this->bdd = $this->connecterPDO($this->config, 'appli');
 
// Nettoyage du $_GET (sécurité)
if (isset($_GET)) {
$get_params = array('orderby', 'distinct', 'start', 'limit', 'formatRetour');
foreach ($get_params as $get) {
$verifier = array('NULL', "\n", "\r", "\\", "'", '"', "\x00", "\x1a", ';');
if(isset($_GET[$get])) {
$_GET[$get] = str_replace($verifier, '', $_GET[$get]);
}
if (isset($_GET[$get]) && $_GET[$get] != '') {
$this->$get = $_GET[$get];
} else {
$_GET[$get] = null;
}
}
}
}
 
/**
* Méthode appelée quand aucun paramètre n'est passé dans l'url et avec une requête de type GET.
*/
public function getRessource() {
$this->getElement(array());
}
 
protected function envoyer($donnees = null, $mime = 'text/html', $encodage = 'utf-8', $json = true) {
// Traitements des messages d'erreurs et données
if (count($this->messages) != 0) {
header('HTTP/1.1 500 Internal Server Error');
$mime = 'text/html';
$encodage = 'utf-8';
$json = true;
$sortie = $this->messages;
} else {
$sortie = $donnees;
if (is_null($donnees)) {
$sortie = 'OK';
}
}
 
// Gestion de l'envoie du déboguage
$this->envoyerDebogage();
 
// Encodage au format et JSON et envoie sur la sortie standard
$contenu = $json ? json_encode($sortie) : $sortie;
$this->envoyerContenu($encodage, $mime, $contenu);
}
 
protected function envoyerDebogage() {
if (!is_array($this->debug)) {
$this->debug[] = $this->debug;
}
if (count($this->debug) != 0) {
foreach ($this->debug as $cle => $val) {
if (is_array($val)) {
$this->debug[$cle] = print_r($val, true);
}
}
header('X-DebugJrest-Data:'.json_encode($this->debug));
}
}
 
protected function envoyerContenu($encodage, $mime, $contenu) {
header("Content-Type: $mime; charset=$encodage");
print $contenu;
}
 
private function connecterPDO($config, $base = 'database') {
$cfg = $config[$base];
$dsn = $cfg['phptype'].':dbname='.$cfg['database'].';host='.$cfg['hostspec'];
try {
$PDO = new PDO($dsn, $cfg['username'], $cfg['password']);
} catch (PDOException $e) {
echo 'La connexion à la base de donnée via PDO a échouée : ' . $e->getMessage();
}
// Passe en UTF-8 la connexion à la BDD
$PDO->exec("SET NAMES 'utf8'");
// Affiche les erreurs détectées par PDO (sinon mode silencieux => aucune erreur affiché)
$PDO->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
return $PDO;
}
protected function executerRequete($requete, $retour = 'All', $mode = PDO::FETCH_ASSOC) {
try {
switch ($retour) {
case 'All' :
$resultat = $this->bdd->query($requete)->fetchAll($mode);
break;
case 'Column' :
$resultat = $this->bdd->query($requete)->fetchColumn();
break;
default:
$resultat = false;
$this->messages[] = "Le type de retour '$retour' est inconnu.";
}
if ($resultat === false) {
$this->messages[] = "La requête a retourné aucun résultat.";
}
} catch (PDOException $e) {
$this->messages[] = sprintf($this->getTxt('sql_erreur_requete'), $e->getFile(), $e->getLine(), $e->getMessage(), $requete);
}
return $resultat;
}
protected function executerRequeteSimple($requete) {
try {
$resultat = false;
$resultat = $this->bdd->query($requete);
if ($resultat === false) {
$this->messages[] = "La requête a retourné aucun résultat.";
}
} catch (PDOException $e) {
$this->messages[] = sprintf($this->getTxt('sql_erreur_requete'), $e->getFile(), $e->getLine(), $e->getMessage(), $requete);
}
return $resultat;
}
protected function renvoyerDernierIdInsere() {
//TODO: cela marche t'il partout ?
// à faire: tester le type de driver pdo et faire une fonction portable
return $this->bdd->lastInsertId();
}
protected function proteger($chaine) {
return $this->bdd->quote($chaine);
}
 
protected function getTxt($id) {
$sortie = '';
switch ($id) {
case 'sql_erreur' : $sortie = 'Requête echec. Fichier : "%s". Ligne : "%s". Message : %s'; break;
default : $sortie = $id;
}
return $sortie;
}
 
protected function traiterParametres($params_attendu, $params, $pourBDD = true) {
$sortie = array();
foreach ($params_attendu as $num => $nom) {
if (isset($params[$num]) && $params[$num] != '*') {
if ($pourBDD) {
$params[$num] = $this->bdd->quote($params[$num]);
}
$sortie[$nom] = $params[$num];
}
}
return $sortie;
}
 
protected function traiterNomMethodeGet($nom) {
$methode = 'get';
$methode .= str_replace(' ', '', ucwords(str_replace('-', ' ', strtolower($nom))));
return $methode;
}
 
protected function getIdentification(&$params) {
// Initialisation des variables
$utilisateur = array(0, session_id());
 
// L'id utilisateur est soit passé par le POST soit dans l'url
if (is_array($params) && isset($params['cmhl_ce_modifier_par'])) {
$utilisateur[0] = $params['cmhl_ce_modifier_par'];
unset($params['cmhl_ce_modifier_par']);
} else if (is_string($params)) {
$utilisateur[0] = $params;
}
 
return $utilisateur;
}
 
protected function etreAutorise($id_utilisateur) {
$autorisation = false;
if (($_SESSION['coel_utilisateur'] != '') && $_SESSION['coel_utilisateur']['id'] != $id_utilisateur) {
$this->messages[] = 'Accès interdit.';
} else if ($_SESSION['coel_utilisateur'] == '') {
$this->messages[] = 'Veuillez vous identifiez pour accéder à cette fonction.';
} else {
$autorisation = true;
}
return $autorisation;
}
 
private function gererIdentificationPermanente() {
// Pour maintenir l'utilisateur tjrs réellement identifié nous sommes obligé de recréer une SESSION et de le recharger depuis la bdd
if ($this->getUtilisateur() == ''
&& isset($_COOKIE['coel_login'])
&& ($utilisateur = $this->chargerUtilisateur($_COOKIE['coel_login'], $_COOKIE['coel_mot_de_passe']))) {
$this->setUtilisateur($utilisateur, $_COOKIE['coel_permanence']);
}
}
 
protected function getUtilisateur() {
return (isset($_SESSION['coel_utilisateur']) ? $_SESSION['coel_utilisateur'] : '');
}
 
/**
* Méthode prenant en paramètre un chemin de fichier squelette et un tableau associatif de données,
* en extrait les variables, charge le squelette et retourne le résultat des deux combinés.
*
* @param String $fichier le chemin du fichier du squelette
* @param Array $donnees un tableau associatif contenant les variables a injecter dans le squelette.
*
* @return boolean false si le squelette n'existe pas, sinon la chaine résultat.
*/
public static function traiterSquelettePhp($fichier, Array $donnees = array()) {
$sortie = false;
if (file_exists($fichier)) {
// Extraction des variables du tableau de données
extract($donnees);
// Démarage de la bufferisation de sortie
ob_start();
// Si les tags courts sont activés
if ((bool) @ini_get('short_open_tag') === true) {
// Simple inclusion du squelette
include $fichier;
} else {
// Sinon, remplacement des tags courts par la syntaxe classique avec echo
$html_et_code_php = self::traiterTagsCourts($fichier);
// Pour évaluer du php mélangé dans du html il est nécessaire de fermer la balise php ouverte par eval
$html_et_code_php = '?>'.$html_et_code_php;
// Interprétation du html et du php dans le buffer
echo eval($html_et_code_php);
}
// Récupèration du contenu du buffer
$sortie = ob_get_contents();
// Suppression du buffer
@ob_end_clean();
} else {
$msg = "Le fichier du squelette '$fichier' n'existe pas.";
trigger_error($msg, E_USER_WARNING);
}
// Retourne le contenu
return $sortie;
}
/**
* Fonction nettoyant les caractères spéciaux HTML pour les champs de saisie libre du CEL.
*/
protected function protegerCaracteresHtmlDansChamps($donnees) {
$champs = array('ci_meta_mots_cles', 'ci_meta_comment',
'mots_cles', 'location', 'lieudit', 'station', 'milieu', 'commentaire', 'nom_sel');
foreach ($champs as $champ) {
if (isset($donnees[$champ])) {
$donnees[$champ] = htmlspecialchars($donnees[$champ]);
}
}
return $donnees;
}
protected function convertirDateHeureMysqlEnTimestamp($date_heure_mysql){
$val = explode(' ', $date_heure_mysql);
$date = explode('-', $val[0]);
$val[1] = isset($val[1]) ? $val[1] : '00:00:00';
$heure = explode(':', $val[1]);
return mktime((int)$heure[0], $heure[1], $heure[2], $date[1], $date[2], $date[0]);
}
protected function etreNull($valeur) {
$etre_null = false;
if ($valeur == '' || $valeur == null || $valeur == '000null' || $valeur == 'null') {
$etre_null = true;
}
return $etre_null;
}
protected function formaterDate($date_heure_mysql, $format = '%A %d %B %Y à %H:%M') {
$date_formatee = '';
if (!$this->etreNull($date_heure_mysql)) {
$timestamp = $this->convertirDateHeureMysqlEnTimestamp($date_heure_mysql);
$date_formatee = strftime($format, $timestamp);
}
return $date_formatee;
}
/**
* Fonction nettoyant les caractères spéciaux (&,<) et les valeurs nulles du CEL dans un texte comprenant du HTML.
*/
protected function nettoyerTexte($txt) {
$txt = preg_replace('/&(?!([a-z]+|#[0-9]+|#x[0-9][a-f]+);)/i', '&amp;', $txt);
// TODO : trouver une regexp qui permet de remplacer les symboles < et > isolés
//$txt = preg_replace('/<(?!([a-z][a-z0-9]*)\b[^>]*>(.*?)<\/\1>|\/\s*([a-z][a-z0-9]*)\s*>)/i', '&lt;', $txt);
//$txt = preg_replace('/(?!<([a-z][a-z0-9]*)\b[^>]*)>(?!(.*?)<\/\1>)/i', '&gt;', $txt);
$txt = preg_replace('/(?:000null|null)/i', '', $txt);
return $txt;
}
 
/**
* Fonction chargeant le contenu du squelette et remplaçant les tags court php (<?= ...) par un tag long avec echo.
*
* @param String $chemin_squelette le chemin du fichier du squelette
*
* @return string le contenu du fichier du squelette php avec les tags courts remplacés.
*/
private static function traiterTagsCourts($chemin_squelette) {
$contenu = file_get_contents($chemin_squelette);
// Remplacement de tags courts par un tag long avec echo
$contenu = str_replace('<?=', '<?php echo ', $contenu);
// Ajout systématique d'un point virgule avant la fermeture php
$contenu = preg_replace("/;*\s*\?>/", "; ?>", $contenu);
return $contenu;
}
/* ====================== Fonctions à trier ou factoriser héritées de l'ancienne classe JrestService ======================= */
public function isAdmin($id) {
$admins = $this->config['jrest_admin']['admin'];
$admin_tab = explode(',',$admins);
 
if (in_array($id,$admin_tab)) {
return true;
} else {
return false;
}
}
 
public function controleUtilisateur($id) {
if ($_SESSION['user']['name'] == '') {
//cas de la session temporaire, on ne fait rien de particulier
} else {
if (!$this->isAdmin($_SESSION['user']['name']) && $_SESSION['user']['name'] != $id) {
// cas d'usurpation d'identité
print 'Accès interdit';
exit();
}
}
}
 
public function logger($index,$chaine) {
if(!class_exists('Log')) {
include_once('Log.php');
Log::getInstance();
}
 
Log::setCheminLog($this->config['log']['cheminlog']);
Log::setTimeZone($this->config['log']['timezone']);
Log::setTailleMax($this->config['log']['taillemax']);
 
Log::ajouterEntree($index,$chaine);
}
}
?>
/trunk/applications/jrest/services/OdsCommune.php
New file
0,0 → 1,274
<?php
 
class OdsCommune extends JRestService {
 
const PREFIXE = 'get';
/**
* Méthode appelée avec une requête de type GET.
*
*/
function getElement($param = array()) {
$type = $param[0];
if ($type == '*' || is_numeric($type)) {
$info = $this->getElementParDefaut($param);
} else {
$methode = self::PREFIXE.$type;
if (method_exists($this, $methode)) {
array_shift($param);
$info = $this->$methode($param);
} else {
$this->messages[] = "Le type d'information demandé '$type' n'est pas disponible.";
}
}
// Envoi sur la sortie standard
$this->envoyer($info);
}
/** ======================= Methodes privées d'accès aux informations ================================ */
private function getElementParDefaut() {
return $this->getInformationsPourCoordonnees();
}
private function getInformationsPourCoordonnees($params) {
$lat = $_GET['lat'];
$lon = $_GET['lon'];
// les erreurs sont mises sous silence car le cas où file_get_contents ne retourne rien
// correspond à un cas valide où l'on a pas de données sur ses coordonnées
// (ce cas est traité dans formaterTableauInformationsCoordsPourEnvoi)
$url_atitude = "http://api.tela-botanica.org/service:eflore:0.1/nasa-srtm/altitude?lon=".urlencode($lon)."&lat=".urlencode($lat);
$infos_altitude_json = @file_get_contents($url_atitude);
 
$url_commune = "http://api.tela-botanica.org/service:eflore:0.1/osm/nom-commune?lon=".urlencode($lon)."&lat=".urlencode($lat);
$infos_commune_json = @file_get_contents($url_commune);
$infos_localites = $this->formaterTableauInformationsCoordsPourEnvoi($infos_altitude_json, $infos_commune_json);
return $infos_localites;
}
 
private function getInformationsPourCommune($params) {
$commune = $_GET['commune'];
$commune = $this->remplacerNomCommunePourRecherche($commune);
$requete_infos_communes = 'SELECT * FROM ods_communes WHERE oc_nom LIKE '.$this->proteger($commune).' ORDER BY oc_nom LIMIT 0,10';
$infos_communes = $this->executerRequete($requete_infos_communes);
 
$infos_communes_formatees = $this->formaterTableauInformationsCommunePourEnvoi($infos_communes);
return $infos_communes_formatees;
}
private function getEstUneCommunePhenoclim() {
return $this->estUneCommunePhenoclim($_GET);
}
private function estUneCommunePhenoclim($params) {
$code_insee = null;
$code_postal = null;
if(!isset($params['code_postal']) && !isset($params['code_insee'])) {
return false;
}
if(isset($params['code_postal'])) {
$code_postal = $params['code_postal'];
}
if(isset($params['code_insee'])) {
$code_insee = $params['code_insee'];
}
if($code_postal != null) {
$requete_commune_phenoclim = 'SELECT occ_code_insee FROM ods_communes_crea WHERE occ_code_postal = '.$this->proteger($code_postal);
} else {
$requete_commune_phenoclim = 'SELECT occ_code_insee FROM ods_communes_crea WHERE occ_code_insee = '.$this->proteger($code_insee);
}
$resultat_requete_phenoclim = $this->executerRequete($requete_commune_phenoclim);
if(!empty($resultat_requete_phenoclim)) {
return true;
}
return false;
}
private function remplacerNomCommunePourRecherche($nom) {
$nom = str_replace(' ','_',$nom);
$nom = str_replace('-','_',$nom);
$nom .= '%';
return $nom;
}
private function formaterTableauInformationsCoordsPourEnvoi($infos_altitude_json, $infos_commune_json) {
$infos_altitude = json_decode($infos_altitude_json);
$infos_commune = json_decode($infos_commune_json);
$altitude = "";
$dpt = "";
$lat = "";
$lon = "";
$altitude = "";
$code_insee = "";
$commune = "";
$commune_phenoclim = false;
if(is_object($infos_altitude)) {
$altitude = $infos_altitude->altitude;
$altitude = number_format($altitude, 0, '', '');
$lat = $infos_altitude->latitude;
$lon = $infos_altitude->longitude;
}
if(is_object($infos_commune)) {
$commune = $infos_commune->nom;
$dpt = $infos_commune->codeINSEE;
$cp_recherche = $dpt;
if(strlen($cp_recherche) == 4) {
$cp_recherche = '0'.$cp_recherche;
}
$commune_phenoclim = $this->estUneCommunePhenoclim(array('code_insee' => $cp_recherche));
$cp_recherche = substr($cp_recherche,0,2);
$code_insee = '';
if($commune != null) {
$code_insee = $this->obtenirCodeInseeCommune($commune, $cp_recherche);
}
}
$infos_communes = array(
'commune' => $commune,
'dpt' => $dpt,
'lat' => $lat,
'lon' => $lon,
'alt' => $altitude,
'code_insee' => $code_insee,
'commune_phenoclim' => $commune_phenoclim
);
return $infos_communes;
}
private function formaterTableauInformationsCommunePourEnvoi($infos_communes) {
$infos_formatees = array();
foreach($infos_communes as $commune) {
$cp = $commune['oc_code_insee'];
$limite = 2;
if(strlen($cp) == 4) {
$limite = 1;
}
$dpt = substr($cp,0,$limite);
if($limite == 1) {
$dpt = '0'.$dpt;
}
$commune_phenoclim = $this->estUneCommunePhenoclim(array('code_insee' => $commune['oc_code_insee']));
$infos_formatees[] = array(
'commune' => $commune['oc_nom'],
'dpt' => $dpt,
'lat' => $commune['oc_latitude'],
'lon' => $commune['oc_longitude'],
'alt' => $commune['oc_altitude'],
'code_insee' => $commune['oc_code_insee'],
'commune_phenoclim' => $commune_phenoclim
);
}
 
return $infos_formatees;
}
public function obtenirNomCommuneParCodeInsee($code_insee_commune) {
if(!is_numeric($code_insee_commune)) {
return '';
}
$requete_infos_commune = 'SELECT * FROM ods_communes WHERE oc_code_insee = '.$this->proteger($code_insee_commune);
$infos_commune = $this->executerRequete($requete_infos_commune);
return $infos_commune[0]['oc_nom'];
}
public function obtenirTableauNomsCommunesParTableauCodesInsee($tableau_codes_insee_communes) {
$noms_communes = array();
if(!empty($tableau_codes_insee_communes)) {
$tableau_codes_insee_communes = array_unique($tableau_codes_insee_communes);
$chaine_codes_insee = implode($tableau_codes_insee_communes,',');
$requete_infos_communes = 'SELECT * FROM ods_communes WHERE oc_code_insee IN ('.$chaine_codes_insee.')';
$infos_commune = $this->executerRequete($requete_infos_communes);
foreach($infos_commune as $commune) {
$code_insee = $commune['oc_code_insee'];
$noms_communes[$code_insee] = $commune['oc_nom'];
}
}
return $noms_communes;
}
private function obtenirCodeInseeCommune($commune, $cp) {
$commune = $this->remplacerNomCommunePourRecherche($commune);
$requete_code_insee = 'SELECT oc_code_insee FROM ods_communes '.
'WHERE oc_nom LIKE "'.$commune.'" '.
'AND oc_code_insee LIKE "'.$cp.'%"';
$resultat_requete = $this->executerRequete($requete_code_insee);
if($resultat_requete) {
return $resultat_requete[0]['oc_code_insee'];
} else {
return '';
}
}
public function obtenirCommunesLieesAStationIndexeesCodeInsee() {
$communes = $this->obtenirCommunesLieesAStation();
$communes_assoc = array();
foreach($communes as $commune) {
$communes_assoc[$commune['oc_code_insee']] = $commune;
}
return $communes_assoc;
}
private function obtenirCommunesLieesAStation() {
$requete = 'SELECT * FROM ods_communes '.
'INNER JOIN ods_stations '.
'ON oc_code_insee = os_ce_commune ';
$resultat_requete = $this->executerRequete($requete);
return $resultat_requete;
}
}
?>
/trunk/applications/jrest/services/OdsEspece.php
New file
0,0 → 1,224
<?php
 
class OdsEspece extends OdsTriple {
 
const PREFIXE = 'get';
const ABBR_LISTE_TYPE_ESPECE = 'type_espece';
/**
* Méthode appelée avec une requête de type GET.
*
*/
function getElement($param = array()) {
$type = $param[0];
if ($type == '*' || is_numeric($type)) {
$info = $this->getElementParDefaut($param);
} else {
$methode = self::PREFIXE.$type;
if (method_exists($this, $methode)) {
array_shift($param);
$info = $this->$methode($param);
} else {
$this->messages[] = "Le type d'information demandé '$type' n'est pas disponible.";
}
}
// Envoi sur la sortie standard
$this->envoyer($info);
}
/**
* Méthode appelée pour ajouter un élément.
*/
public function createElement($params) {
// fonction devant uniquement être appelée depuis le serveur
// lui-même, cad par l'application de saisie
$controle = new ControleUtilisateur($this->config);
$controle->controleAppelIpAutorisee();
 
$requete = 'INSERT INTO ods_especes ';
$champs = array('oe_id_espece');
$valeurs = array("''");
foreach($params as $param => $valeur) {
$champs[] = 'oe_'.$param;
$valeur = stripslashes($valeur);
$valeurs[] = $this->proteger($valeur);
}
$champs[] = 'oe_ce_climat';
$valeurs[] = $this->proteger(0);
$requete .= '('.implode(', ', $champs).') VALUES ('.implode(', ', $valeurs).')';
$ajout_espece = $this->executerRequeteSimple($requete);
if(!$ajout_espece) {
$retour['erreurs'] = 'erreur d\'ajout';
} else {
$retour = 'ok';
}
$this->envoyer($retour);
}
/**
* Méthode appelée pour mettre à jour un élément
*/
public function updateElement($uid, $params) {
// fonction devant uniquement être appelée depuis le serveur
// lui-même, cad par l'application de saisie
$controle = new ControleUtilisateur($this->config);
$controle->controleAppelIpAutorisee();
 
$requete = 'UPDATE ods_especes SET ';
foreach($params as $param => $valeur) {
$valeur = stripslashes($valeur);
$requete .= 'oe_'.$param.' = '.$this->proteger($valeur).', ';
}
$requete = rtrim ($requete, ', ');
$requete .= ' WHERE oe_id_espece = '.$this->proteger($uid[0]);
$modification_espece = $this->executerRequeteSimple($requete);
if(!$modification_espece) {
$retour['erreurs'] = 'erreur de modification';
} else {
$retour = 'ok';
}
$this->envoyer($retour);
}
/**
* Méthode appelée pour supprimer un élément
*/
public function deleteElement($uid) {
 
//TODO: méthode de suppression d'espèce spéciale aux admins
}
/** ======================= Methodes d'accès au informations ================================ */
private function getElementParDefaut() {
return $this->getEspecesParType();
}
private function getEspece($params) {
$id_espece = $params[0];
$requete_informations_espece = 'SELECT * FROM ods_especes '.
'WHERE oe_id_espece = '.$this->proteger($id_espece);
$informations_espece = $this->executerRequete($requete_informations_espece);
$informations_espece_formatees = array();
if(!empty($informations_espece)) {
$informations_espece_formatees = $this->formaterTableauEspecePourEnvoi($informations_espece[0]);
}
return $informations_espece_formatees;
}
 
private function getEspecesPourStation($params) {
$id_station = $params[0];
$requete_especes_pour_station = 'SELECT * FROM ods_especes '.
'WHERE oe_id_espece IN '.
'( '.
'SELECT oi_ce_espece FROM ods_individus '.
'WHERE oi_ce_station = '.$this->proteger($id_station).
') '.
' AND oe_espece_active = 1 '.
'ORDER BY oe_ce_type, oe_nom_vernaculaire';
 
$especes_pour_station = $this->executerRequete($requete_especes_pour_station);
foreach($especes_pour_station as &$espece_dans_station) {
$espece_dans_station = $this->formaterTableauEspecePourEnvoi($espece_dans_station);
}
return $especes_pour_station;
}
private function getEspecesActivesParType() {
return $this->getEspecesParType(true);
}
private function getEspecesParType() {
return $this->obtenirEspecesParType(false);
}
private function getEspecesParTypeAdmin() {
return $this->obtenirEspecesParType(true);
}
private function obtenirEspecesParType($toutes_les_especes = false) {
$requete_toute_espece = 'SELECT * FROM ods_especes '.
($toutes_les_especes ? '' : ' WHERE oe_espece_active = 1 ').
'ORDER BY oe_ce_type, oe_nom_vernaculaire';
$liste_espece = $this->executerRequete($requete_toute_espece);
$liste_type_espece = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_TYPE_ESPECE);
$especes_par_type = array();
foreach($liste_espece as $espece) {
$espece = $this->formaterTableauEspecePourEnvoi($espece);
$type = $espece['type'];
$nom_type = $liste_type_espece[$type]['ot_valeur'];
if(!isset($especes_par_type[$type])) {
$especes_par_type[$type] = array(
'nom' => $nom_type,
'especes' => array()
);
}
$especes_par_type[$type]['especes'][$espece['id_espece']] = $espece;
}
return $especes_par_type;
}
public function getToutesEspeces() {
$requete_toute_espece = 'SELECT * FROM ods_especes WHERE oe_espece_active = 1 ORDER BY oe_nom_vernaculaire ';
$liste_espece = $this->executerRequete($requete_toute_espece);
$liste_type_espece = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_TYPE_ESPECE);
$especes_par_id = array();
 
foreach($liste_espece as $espece) {
$espece = $this->formaterTableauEspecePourEnvoi($espece);
$especes_par_id[$espece['id_espece']] = $espece;
}
 
return $especes_par_id;
}
private function formaterTableauEspecePourEnvoi($espece) {
return array(
'id_espece' => $espece['oe_id_espece'],
'nom_vernaculaire' => $espece['oe_nom_vernaculaire'],
'nom_scientifique' => $espece['oe_nom_scientifique'],
'espece_ecole' => $espece['oe_espece_ecole'],
'description' => $espece['oe_description'],
'climat' => $espece['oe_ce_climat'],
'evenements' => $espece['oe_ce_evenements'],
'type' => $espece['oe_ce_type'],
'active' => $espece['oe_espece_active']
);
}
}
?>
/trunk/applications/jrest/services/OdsImageEspece.php
New file
0,0 → 1,310
<?php
 
class OdsImageEspece extends JRestService {
private $droits = 0755;
const PREFIXE = 'get';
 
public function OdsImageEspece($config) {
$this->config=$config;
}
/**
* Méthode appelée avec une requête de type GET.
*
*/
function getElement($param = array()) {
$type = $param[0];
if ($type == '*' || is_numeric($type)) {
$info = $this->getElementParDefaut($param);
} else {
$methode = self::PREFIXE.$type;
if (method_exists($this, $methode)) {
array_shift($param);
$info = $this->$methode($param);
} else {
$this->messages[] = "Le type d'information demandé '$type' n'est pas disponible.";
}
}
// Envoi sur la sortie standard
echo 'OK';
}
/**
*
* Méthode appelée avec une requête de type POST.
*/
public function createElement($params) {
// fonction devant uniquement être appelée depuis le serveur
// lui-même, cad par l'application de saisie
$controle = new ControleUtilisateur($this->config);
$controle->controleAppelIpAutorisee();
$chemin_temp = $params['chemin'];
$nom_espece = $params['nom_fichier'];
$credits = $params['credits'];
$chemin_image_final = $this->stockerFichierOriginal($nom_espece, $chemin_temp);
$chemin_credits = $this->stockerCredits($nom_espece, $credits);
$this->creerMiniatures($nom_espece.'.jpg', $chemin_image_final);
echo json_encode('ok');
}
private function stockerFichierOriginal($nom_espece, $chemin_temp) {
$dossier = $this->config['appli']['chemin_stockage_images_especes'];
$chemin_dest = $dossier.'/'.$nom_espece.'.jpg';
copy($chemin_temp, $chemin_dest);
return $chemin_dest;
}
private function stockerCredits($nom_espece, $credits) {
$dossier = $this->config['appli']['chemin_stockage_images_especes'];
$chemin_dest = $dossier.'/'.$nom_espece.'.txt';
file_put_contents($chemin_dest, $credits);
}
public function creerMiniatures($nom_fichier, $chemin) {
$formats = array('CXS','XS','S','M');
$infos_image_originale = $this->obtenirImageEtInfosPourChemin($chemin);
// creation de miniatures pour chacuns des formats définis
foreach($formats as $format) {
$this->creerEtStockerMiniatureFichierImageSelonFormat($nom_fichier, $infos_image_originale, $format);
}
}
public function getRecreationMiniatures() {
$dossier = $this->config['appli']['chemin_stockage_images_especes'];
$formats = array('CXS','XS','S','M');
$dossiers_a_exclure = array();
foreach (new DirectoryIterator($dossier) as $fichier_ou_dossier) {
if($fichier_ou_dossier->isDot() || $fichier_ou_dossier->isDir()) {
continue;
}
if(in_array($fichier_ou_dossier->getBasename(), $dossiers_a_exclure)) {
continue;
}
 
$extension = pathinfo($fichier_ou_dossier->getPathname(),PATHINFO_EXTENSION);
if($extension == 'txt') {
continue;
}
$nom_fichier = $fichier_ou_dossier->getFilename();
$infos_image_originale = $this->obtenirImageEtInfosPourChemin($fichier_ou_dossier->getPathname());
// creation de miniatures pour chacuns des formats définis
foreach($formats as $format) {
$this->creerEtStockerMiniatureFichierImageSelonFormat($nom_fichier, $infos_image_originale, $format);
}
}
}
public function creerEtStockerMiniatureFichierImageSelonFormat($nom_fichier ,$infos_image_originale, $format = 'O') {
if($format == 'O') {
// format original : rien à faire
$image_redimensionnee = $infos_image_originale['image'];
} else {
// le format carre et une image redimensionnée en gardant son ratio, insérée dans un carré blanc
if($this->estUnFormatCarre($format)) {
$image_redimensionnee = $this->creerMiniatureCarree($infos_image_originale, $format);
} else {
// la minature est une image redimensionnée en gardant son ratio
$image_redimensionnee = $this->creerMiniature($infos_image_originale, $format);
}
}
 
$taux_compression = 100;
if($format == 'O') {
$taux_compression = $this->renvoyerTauxCompressionPourPoids($infos_image_originale['poids_octets']);
}
$this->ecrireImageSurDisque($image_redimensionnee, $nom_fichier, $format, $taux_compression);
return true;
}
public function creerImageRedimensionnee($infos_image_originale, $hauteur_redimension, $largeur_redimension) {
$image_redimensionnee = imagecreatetruecolor($largeur_redimension, $hauteur_redimension);
imagecopyresampled($image_redimensionnee,
$infos_image_originale['image'],
0, 0,
0,
0,
$largeur_redimension,
$hauteur_redimension,
$infos_image_originale['largeur'],
$infos_image_originale['hauteur']
);
return $image_redimensionnee;
}
public function creerMiniature($informations_images, $format) {
$taille_reference_pour_format = $this->obtenirDimensionsPourFormat($format);
$taille_image_redimensionnee = $this->calculerTailleImage($informations_images, $taille_reference_pour_format['hauteur']);
$image_redimensionnee = $this->creerImageRedimensionnee($informations_images, $taille_image_redimensionnee['hauteur'], $taille_image_redimensionnee['largeur']);
return $image_redimensionnee;
}
public function creerMiniatureCarree($informations_images, $format) {
$taille_reference_pour_format = $this->obtenirDimensionsPourFormat($format);
$cote_carre = $taille_reference_pour_format['largeur'];
$image_redimensionnee_avec_rapport = $this->creerMiniature($informations_images, $format);
$taille_redimensionnee_avec_rapport = $this->calculerTailleImage($informations_images, $taille_reference_pour_format['hauteur']);
if($this->estPaysage($informations_images)) {
$debut_largeur_a_copier = 0 ;
$debut_hauteur_a_copier = ($cote_carre - $taille_redimensionnee_avec_rapport['hauteur'])/2 ;
} else {
$debut_largeur_a_copier = ($cote_carre - $taille_redimensionnee_avec_rapport['largeur'])/2 ;
$debut_hauteur_a_copier = 0 ;
}
$image_carre_cible = $this->renvoyerEtCreerImageCarreeSelonFormat($cote_carre);
imagecopy($image_carre_cible, $image_redimensionnee_avec_rapport,
$debut_largeur_a_copier ,$debut_hauteur_a_copier, 0, 0,
$taille_redimensionnee_avec_rapport['largeur'], $taille_redimensionnee_avec_rapport['hauteur']
);
 
return $image_carre_cible;
}
public function obtenirImageEtInfosPourChemin($chemin_fichier) {
$image_et_infos = array();
list($image_et_infos['largeur'], $image_et_infos['hauteur']) = getimagesize($chemin_fichier);
$image_et_infos['poids_octets'] = filesize($chemin_fichier);
$image_et_infos['image'] = imagecreatefromjpeg($chemin_fichier);
return $image_et_infos;
}
public function obtenirDimensionsPourFormat($format) {
$dimensions = array('largeur' => 0, 'hauteur' => 0);
if(isset($this->config['appli']['format_'.$format])) {
$format_largeur_hauteur = explode('_', $this->config['appli']['format_'.$format]);
$dimensions['largeur'] = $format_largeur_hauteur[0];
$dimensions['hauteur'] = $format_largeur_hauteur[1];
}
return $dimensions;
}
public function calculerTailleImage($informations_images, $taille_max) {
$HL_redimension = array();
if($this->estPaysage($informations_images)) {
$rapport = $informations_images['hauteur']/$informations_images['largeur'] ;
$HL_redimension['largeur'] = round($taille_max) ;
$HL_redimension['hauteur'] = round($taille_max*$rapport) ;
} else {
$rapport = $informations_images['largeur']/$informations_images['hauteur'] ;
$HL_redimension['hauteur'] = round($taille_max) ;
$HL_redimension['largeur'] = round($taille_max*$rapport) ;
}
return $HL_redimension;
}
public function estUnFormatCarre($format) {
return (strpos($format,'C') === 0);
}
public function estPaysage($informations_images) {
return $informations_images['largeur'] > $informations_images['hauteur'];
}
public function estPortait($informations_images) {
return $informations_images['largeur'] < $informations_images['hauteur'];
}
public function renvoyerTauxCompressionPourPoids($poids_octets) {
 
$poids_max_octets = $this->config['appli']['taille_max'];
$ratio_compression = 100 ;
if($poids_octets >= $poids_max_octets) {
$ratio_compression = 85 ;
}
return $ratio_compression;
}
public function ecrireImageSurDisque($image, $nom_fichier, $format, $compression) {
umask(0);
$chemin_sur_serveur_final = $this->config['appli']['chemin_stockage_images_especes'].'/'.$format;
if(!is_dir($chemin_sur_serveur_final)) {
mkdir($chemin_sur_serveur_final,$this->droits);
}
if(file_exists($chemin_sur_serveur_final.'/'.$nom_fichier)) {
unlink($chemin_sur_serveur_final.'/'.$nom_fichier);
}
imagejpeg($image, $chemin_sur_serveur_final.'/'.$nom_fichier);
chmod($chemin_sur_serveur_final.'/'.$nom_fichier,$this->droits);
 
}
public function renvoyerEtCreerImageCarreeSelonFormat($cote) {
$r = $g = $b = 255;
if(isset($this->config['appli']['couleur_fond_carre'])) {
$rgb = $this->config['appli']['couleur_fond_carre'];
$r = base_convert(substr($rgb,0,2), 16, 10);
$g = base_convert(substr($rgb,2,2), 16, 10);
$b = base_convert(substr($rgb,4,2), 16, 10);
}
$image_couleur = imagecreatetruecolor($cote, $cote);
$couleur = imagecolorallocate($image_couleur, $r, $g, $b);
imagefilledrectangle($image_couleur, 0, 0, $cote, $cote, $couleur);
return $image_couleur;
}
public function detruireImageEnMemoire($image) {
imagedestroy($image);
}
}
?>
/trunk/applications/jrest/services/OdsUtilisateur.php
New file
0,0 → 1,111
<?php
 
class OdsUtilisateur extends JRestService {
/**
* Méthode appelée avec une requête de type GET.
*
*/
function getElement($param = array()) {
$chaine_utilisateur = $param[0];
$liste_utilisateurs = $this->getListeUtilisateur($chaine_utilisateur,0,20);
$liste_utilisateurs_formatee = $this->formaterListeUtilisateursPourEnvoi($liste_utilisateurs);
$this->envoyer($liste_utilisateurs_formatee);
}
function getListeUtilisateurFormateeId() {
$liste_utilisateurs = $this->getListeUtilisateur('');
$liste_utilisateurs_formatee = $this->formaterListeUtilisateursParId($liste_utilisateurs);
return $liste_utilisateurs_formatee;
}
function getListeUtilisateur($pseudo, $start = false, $limite = false) {
$requete_selection_liste = 'SELECT * '.
'FROM drupal_users '.
'WHERE name LIKE "'.$pseudo.'%" '.
'ORDER BY uid ';
 
if($start && $limite) {
$requete_selection_liste != 'LIMIT '.$start.', '.$limite;
}
$liste_utilisateurs = $this->executerRequete($requete_selection_liste);
return $liste_utilisateurs;
}
function getListeUtilisateurAvecInfosComplementairesFormateeId() {
$liste_utilisateurs = $this->getListeUtilisateur('');
$liste_utilisateurs_formatee = $this->formaterListeUtilisateursAvecInfosComplementairesParId($liste_utilisateurs);
return $liste_utilisateurs_formatee;
}
function formaterListeUtilisateursAvecInfosComplementairesParId($liste_utilisateurs) {
$liste_utilisateurs_formatee = array();
$requete_infos_complementaires = 'SELECT * FROM drupal_profile_values '.
'LEFT JOIN drupal_profile_fields ON '.
'drupal_profile_fields.fid = drupal_profile_values.fid ';
$liste_infos_complementaires = $this->executerRequete($requete_infos_complementaires);
$liste_infos_complementaires_formatee = array();
if(is_array($liste_infos_complementaires)) {
foreach($liste_infos_complementaires as &$infos_complementaires) {
$liste_infos_complementaires_formatee[$infos_complementaires['uid']][] = $infos_complementaires;
}
}
if (is_array($liste_utilisateurs)) {
foreach ($liste_utilisateurs as $utilisateur) {
if (isset($liste_infos_complementaires_formatee[$utilisateur['uid']])) {
$liste_utilisateurs_formatee[$utilisateur['uid']] = $utilisateur;
foreach ($liste_infos_complementaires_formatee[$utilisateur['uid']] as &$infos_complementaires_formatee_utilisateur) {
$liste_utilisateurs_formatee[$utilisateur['uid']][$infos_complementaires_formatee_utilisateur['name']] = $infos_complementaires_formatee_utilisateur['value'];
}
} else {
$liste_utilisateurs_formatee[$utilisateur['uid']] = $utilisateur;
}
}
}
return $liste_utilisateurs_formatee;
}
function formaterListeUtilisateursParId($liste_utilisateurs) {
$liste_utilisateurs_formatee = array();
if(is_array($liste_utilisateurs)) {
foreach($liste_utilisateurs as $utilisateur) {
$liste_utilisateurs_formatee[$utilisateur['uid']] = $utilisateur;
}
}
return $liste_utilisateurs_formatee;
}
function formaterListeUtilisateursPourEnvoi($liste_utilisateurs) {
$liste_utilisateurs_formatee = array();
foreach($liste_utilisateurs as $utilisateur) {
$liste_utilisateurs_formatee[] = array('nom' => $utilisateur['name'], 'id' => $utilisateur['uid']);
}
return $liste_utilisateurs_formatee;
}
}
 
?>
/trunk/applications/jrest/services/OdsIndividu.php
New file
0,0 → 1,207
<?php
 
class OdsIndividu extends JRestService {
 
const PREFIXE = 'get';
 
/**
* Méthode appelée avec une requête de type GET.
*
*/
function getElement($param = array()) {
 
$type = $param[0];
 
if ($type == '*' || is_numeric($type)) {
$info = $this->getElementParDefaut($param);
} else {
$methode = self::PREFIXE.$type;
if (method_exists($this, $methode)) {
array_shift($param);
$info = $this->$methode($param);
} else {
$this->messages[] = "Le type d'information demandé '$type' n'est pas disponible.";
}
}
 
// Envoi sur la sortie standard
$this->envoyer($info);
}
 
/**
* Méthode appelée pour ajouter un élément.
*/
public function createElement($params) {
 
$elements_requis = array('id_participant','id_espece','id_station','individu_nom');
 
foreach($elements_requis as $requis) {
if(!isset($params[$requis])) {
//TODO: pourquoi est-ce que c'est commenté ça ?
//$erreurs[$requis] = 'erreur ';
}
}
 
if(!empty($erreurs)) {
$this->envoyer($erreurs);
}
 
// commentaire optionnel
$commentaire = !empty($params['individu_commentaire']) ? $params['individu_commentaire'] : '';
// limité à 1000 caractères (pas besoin de renvoyer une erreur ici car c'est un cas très peu fréquent)
$commentaire = substr($commentaire, 0, 1000);
 
$requete_creation_individu = 'INSERT INTO ods_individus '.
'(oi_ce_espece, oi_ce_station, oi_nom, oi_commentaire) '.
'VALUES ('.
$this->proteger($params['id_espece']).','.
$this->proteger($params['id_station']).','.
$this->proteger($params['individu_nom']).','.
$this->proteger($commentaire).')';
$creation_individu = $this->executerRequeteSimple($requete_creation_individu);
 
 
if(!$creation_individu) {
$retour['erreurs'] = 'erreur d\'insertion';
} else {
$retour['id_nouvel_individu'] = $this->renvoyerDernierIdInsere();
}
 
$this->envoyer($retour);
}
 
/**
* Méthode appelée pour mettre à jour un élément
*/
public function updateElement($uid, $params) {
 
if(isset($uid[0])) {
$id_individu = $uid[0];
} else {
return;
}
 
// commentaire optionnel
$commentaire = !empty($params['individu_commentaire']) ? $params['individu_commentaire'] : '';
// limité à 1000 caractères (pas besoin de renvoyer une erreur ici car c'est un cas très peu fréquent)
$commentaire = substr($commentaire, 0, 1000);
 
$requete_modification_individu = 'UPDATE ods_individus '.
'SET oi_nom = '.$this->proteger($params['individu_nom']).' ';
 
// mise à jour éventuelle du commentaire optionnel
if(!empty($params['individu_commentaire'])) {
$requete_modification_individu .= ', oi_commentaire = '.$this->proteger($params['individu_commentaire']).' ';
}
$requete_modification_individu .= 'WHERE oi_id_individu = '.$this->proteger($id_individu);
$modification_individu = $this->executerRequeteSimple($requete_modification_individu);
 
$this->envoyer();
}
 
/**
* Méthode appelée pour supprimer un élément
*/
public function deleteElement($uid) {
 
if(isset($uid[0])) {
$id_participant = $uid[0];
} else {
return;
}
 
if(isset($uid[1])) {
$id_individu = $uid[1];
} else {
return;
}
 
$requete_suppression_individu = 'DELETE FROM ods_individus '.
'WHERE oi_id_individu = '.$this->proteger($id_individu).' '.
'AND oi_ce_station IN '.
'(SELECT os_id_station FROM ods_stations '.
'WHERE os_ce_participant = '.$this->proteger($id_participant).' '.
')';
 
$suppression_individu = $this->executerRequeteSimple($requete_suppression_individu);
 
if(!$suppression_individu) {
// TODO: comment gère t'on les erreurs ?
}
 
// Envoie sur la sortie standard
$this->envoyer();
}
 
private function getElementParDefaut($params) {
return $this->getInformationsIndividu($params);
}
 
private function getInformationsIndividu($params) {
 
$id_individu = $params[0];
 
$requete_informations_individu = 'SELECT * FROM ods_individus '.
'WHERE oi_id_individu = '.$this->proteger($id_individu);
 
$informations_individu = $this->executerRequete($requete_informations_individu);
 
if(!empty($informations_individu)) {
$informations_individu_formatees = $this->formaterTableauIndividuPourEnvoi($informations_individu[0]);
}
 
return $informations_individu_formatees;
 
}
 
private function getIndividusPourStation($params) {
 
$id_station = $params[0];
 
$requete_individus_station = 'SELECT oi.* FROM ods_individus oi '.
'INNER JOIN ods_especes oe '.
'ON oi.oi_ce_espece = oe.oe_id_espece '.
'AND oe.oe_espece_active = 1 '.
'WHERE oi_ce_station = '.$this->proteger($id_station);
$liste_individus_pour_station = $this->executerRequete($requete_individus_station);
 
foreach($liste_individus_pour_station as &$individu_pour_station) {
 
$individu_pour_station = $this->formaterTableauIndividuPourEnvoi($individu_pour_station);
}
 
return $liste_individus_pour_station;
}
 
private function getIndividusPourStationPourEspece($params) {
 
$id_station = $params[0];
$id_espece = $params[1];
 
$requete_individus_station_espece = 'SELECT * FROM ods_individus '.
'WHERE oi_ce_station = '.$this->proteger($id_station).' '.
'AND oi_ce_espece ='.$this->proteger($id_espece);
 
$liste_individus_pour_station_pour_espece = $this->executerRequete($requete_individus_station_espece);
 
foreach($liste_individus_pour_station_pour_espece as &$individu_pour_station_pour_espece) {
 
$individu_pour_station_pour_espece = $this->formaterTableauIndividuPourEnvoi($individu_pour_station_pour_espece);
}
 
return $liste_individus_pour_station_pour_espece;
}
 
private function formaterTableauIndividuPourEnvoi($individu) {
 
return array(
'id_individu' => $individu['oi_id_individu'],
'id_espece' => $individu['oi_ce_espece'],
'id_station' => $individu['oi_ce_station'],
'nom' => $individu['oi_nom'],
'commentaire' => $individu['oi_commentaire'],
);
 
}
}
?>
/trunk/applications/jrest/services/OdsExport.php
New file
0,0 → 1,621
<?php
 
class OdsExport extends OdsTriple {
 
const PREFIXE = 'get';
const ABBR_LISTE_EVENEMENTS = 'evenement';
const ABBR_LISTE_ESPECES = 'espece';
const ABBR_LISTE_MILIEUX = 'environnement';
 
private $type_mime = 'text/html';
 
/**
* Méthodes d'extractions d'informations
*/
 
/**
* Méthode appelée avec une requête de type GET.
*
*/
function getElement($param = array()) {
 
$type = $param[0];
 
if ($type == '*' || is_numeric($type)) {
$info = $this->getElementParDefaut($param);
} else {
$methode = self::PREFIXE.$type;
if (method_exists($this, $methode)) {
array_shift($param);
$info = $this->$methode($param);
} else {
$this->messages[] = "Le type d'information demandé '$type' n'est pas disponible.";
}
}
 
$this->envoyer($info,$this->type_mime);
}
 
public function getExportStationJson() {
 
$donnees = $this->getExportStation();
$donnees_formatees = $this->formaterListeStationPourExportJson($donnees);
 
$this->type_mime = 'application/json';
 
return $donnees_formatees;
}
 
public function getExportEvolutionPhenologiqueJson() {
 
$evenements = explode(',', $_GET['evenements']);
$condition_evenements = '';
$sous_condition_evenements = [];
foreach($evenements as $evenement) {
$sous_condition_evenements[] = 'oo_ce_evenement = '.$this->proteger($evenement);
}
$condition_evenements .= '('.implode(' OR ', $sous_condition_evenements).')';
$condition_espece = 'oi_ce_espece = '.$this->proteger($_GET['espece']);
 
$formule_moyenne_date = 'FROM_UNIXTIME(AVG(UNIX_TIMESTAMP((oo_date))))';
 
$requete = 'SELECT '.$formule_moyenne_date.' as date_moyenne, oo_ce_evenement FROM ods_observations oo '.
'LEFT JOIN ods_individus oi ON oi_id_individu = oo_ce_individu '.
'INNER JOIN ods_especes oe ON oe.oe_espece_active = 1 '.
'AND oe.oe_id_espece = oi_ce_espece '.
'WHERE oo_date != "0000-00-00" AND DAY(oo_date) != "00" '.
'AND '.$condition_espece.' '.
'AND '.$condition_evenements.' '.
'AND oo_ce_participant != "4" AND oo_ce_participant != 1 AND oo_absence_evenement = "0" '.
'GROUP BY YEAR(oo_date), oo_ce_evenement '.
'ORDER BY oo_date DESC';
 
$donnees = $this->executerRequete($requete);
 
$donnees_formatees = [];
foreach($donnees as $donnee) {
$stade = $donnee['oo_ce_evenement'];
if(empty($donnees_formatees[$stade])) {
$donnees_formatees[$stade] = ['x' => [], 'y' => []];
}
 
$date_time = strtotime($donnee['date_moyenne']);
// on ramène grossièrement la date de l'année à une valeur numérique
// ex: le 15 janvier devient 1.5
$nb_jours_dans_mois = date(' t ', strtotime($date_time));
$jour_mois_num = (date('d', $date_time)/$nb_jours_dans_mois)+date('m', $date_time);
 
$donnees_formatees[$stade]['x'][] = $donnee['date_moyenne'];
$donnees_formatees[$stade]['y'][] = $jour_mois_num;
$donnees_formatees[$stade]['text'][] = date('d/m/Y', strtotime($donnee['date_moyenne']));
}
 
$this->type_mime = 'application/json';
 
return $donnees_formatees;
}
 
public function getExportPhasesPhenologiquesJson() {
 
$evenements = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_EVENEMENTS);
$evenements_a_regrouper = [];
 
foreach($evenements as $evenement) {
$nom_evenement = $evenement['ot_cle'];
$nom_evenement_tab = explode('_', $nom_evenement);
 
// évènement à plusieurs stades (evenement_floraison_stade_11 par exemple)
if(count($nom_evenement_tab) == 4) {
// on fait pointer la clé de l'évènement vers sont groupe (dans l'exemple floraison)
$evenements_a_regrouper[$evenement['ot_id_triple']] = $nom_evenement_tab[1];
} else {
// sinon ce sont des evènements à un seul stade (comme premiere_apparition)
// auquel cas on supprime juste le suffixe evenement_
$evenements_a_regrouper[$evenement['ot_id_triple']] = str_replace('evenement_', '',$nom_evenement);
}
}
 
$requete = 'SELECT oo_date, oo_ce_evenement FROM ods_observations oo '.
'LEFT JOIN ods_individus oi ON oi_id_individu = oo_ce_individu '.
'INNER JOIN ods_especes oe ON oe.oe_espece_active = 1 '.
'AND oe.oe_id_espece = oi_ce_espece ';
 
// si on indique zéro on peut obtenir toutes les années
if(isset($_GET['annee']) && $_GET['annee'] != 0) {
$requete .= 'AND YEAR(oo_date) = '.$this->proteger($_GET['annee']).' ';
}
 
$requete .= 'WHERE oo_date != "0000-00-00" AND DAY(oo_date) != "00" '.
'AND oi_ce_espece = '.$this->proteger($_GET['espece']).' '.
'AND oo_ce_participant != "4" AND oo_ce_participant != 1 AND oo_absence_evenement = "0" '.
'ORDER BY oo_date DESC';
 
$donnees = $this->executerRequete($requete);
 
$donnees_formatees = [];
// Regroupement d'évenements allant ensemble (ex.: début et fin de floraison)
foreach($donnees as $donnee) {
$cle_groupe_evenements = $evenements_a_regrouper[$donnee['oo_ce_evenement']];
if(empty($donnees_formatees[$cle_groupe_evenements])) {
$donnees_formatees[$cle_groupe_evenements] = [];
}
 
$date_time = strtotime($donnee['oo_date']);
// on ramène la date de l'année à une valeur numérique
// ex: le 15 janvier devient 1.5 pour pouvoir afficher ça plus simplement
// sur le graphique d'arrivée qui n'aura à travailler qu'avec des nombres
$nb_jours_dans_mois = date(' t ', strtotime($date_time));
$jour_mois_num = (date('d', $date_time)/$nb_jours_dans_mois)+date('m', $date_time);
// on garde 7 chiffres après la virgule car côté client on a besoin de s'assurer d'une largeur
// suffisante lors du calcul de la légende de chaque point.
// En fait la largeur du nombre détermine la largeur de son conteneur affiché lorsdu hover sur le point,
// or il est nécessaire de remplacer cette légende lors de l'affichage (qui contient un nombre) par une vraie date.
// ceci est une limitation plot.ly (côté client) qui n'offre pas de fonction de formatage
$jour_mois_num = number_format($jour_mois_num, 7);
 
$donnees_formatees[$cle_groupe_evenements]['x'][] = $jour_mois_num;
$donnees_formatees[$cle_groupe_evenements]['text'][] = date('d/m/Y', strtotime($donnee['oo_date']));
 
 
$donnees_formatees[$cle_groupe_evenements]['text_index']["'".$jour_mois_num."'"] = date('d/m/Y', strtotime($donnee['oo_date']));
}
 
$this->type_mime = 'application/json';
 
return $donnees_formatees;
}
 
public function getExportStation($start = null,$limit = null, $order_by = 'oo_date') {
 
$id_demo = $this->config['appli']['id_participant_demo'];
$requete_selection_stations = 'SELECT * FROM ods_stations WHERE os_ce_participant != '.$this->proteger($id_demo);
$res_selection_stations = $this->executerRequete($requete_selection_stations);
 
return $res_selection_stations;
}
 
public function getExportUtilisateurCsv() {
 
$controle = new ControleUtilisateur($this->config);
$controle->authentifierAdmin();
 
$gestionnaire_utilisateurs = new OdsUtilisateur($this->config);
$utilisateurs = $gestionnaire_utilisateurs->getListeUtilisateurAvecInfosComplementairesFormateeId();
 
$utilisateurs_formates = array();
$premiere_annee = 2006;
 
$nb_obs = $this->compterObservationsParUtilisateur();
$annees = array();
 
foreach ($utilisateurs as $id => $utilisateur) {
$utilisateur_formate = array(
'id' => isset($utilisateur['uid']) ? $utilisateur['uid'] : '',
'pseudo' => isset($utilisateur['name']) ? $utilisateur['name'] : '',
'mail' => isset($utilisateur['mail']) ? $utilisateur['mail'] : '',
'nom' => isset($utilisateur['profile_nom']) ? $utilisateur['profile_nom'] : '',
'prenom' => isset($utilisateur['profile_prenom']) ? $utilisateur['profile_prenom'] : '',
'code postal' => isset($utilisateur['profile_code_postal']) ? $utilisateur['profile_code_postal'] : '',
'ville' => isset($utilisateur['profile_ville']) ? $utilisateur['profile_ville'] : '',
'type' => isset($utilisateur['profile_type']) ? $utilisateur['profile_type'] : '',
'date inscription' => isset($utilisateur['created']) ? date('d/m/Y', $utilisateur['created']) : '',
);
 
for($i = $premiere_annee; $i <= date('Y'); $i++) {
$annees['annee '.$i] += isset($nb_obs[$utilisateur['uid']]) && isset($nb_obs[$utilisateur['uid']][$i]) ? $nb_obs[$utilisateur['uid']][$i] : '0';
$utilisateur_formate['annee '.$i] = isset($nb_obs[$utilisateur['uid']]) && isset($nb_obs[$utilisateur['uid']][$i]) ? $nb_obs[$utilisateur['uid']][$i] : '0';
}
 
$utilisateurs_formates[] = $utilisateur_formate;
}
 
$ligne_total_obs = array(
'id' => '',
'pseudo' => '',
'mail' => '',
'nom' => '',
'prenom' => '',
'code postal' => '',
'ville' => '',
'type' => '',
'date inscription' => ''
);
$ligne_total_obs = array_merge($ligne_total_obs, $annees);
$utilisateurs_formates[] = $ligne_total_obs;
$csv = $this->convertirTableauAssocVersCSV($utilisateurs_formates);
$this->envoyerFichier($csv, 'utilisateurs');
}
 
private function compterObservationsParUtilisateur() {
$requete = 'SELECT COUNT(*) as nb_obs, oo_ce_participant as participant, YEAR(oo_date) as annee '.
'FROM `ods_observations` WHERE oo_date != "0000-00-00" GROUP BY oo_ce_participant, YEAR(oo_date)';
 
$res_selection_obs = $this->executerRequete($requete);
$stats = array();
foreach ($res_selection_obs as $obs_nb) {
$stats[$obs_nb['participant']][$obs_nb['annee']] = $obs_nb['nb_obs'];
}
 
return $stats;
}
 
public function formaterListeStationPourExportJson($tableau_stations_infos) {
 
$gestionnaire_especes = new OdsEspece($this->config);
$gestionnaire_communes = new OdsCommune($this->config);
$gestionnaire_utilisateurs = new OdsUtilisateur($this->config);
 
$especes = $gestionnaire_especes->getToutesEspeces();
$evenements = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_EVENEMENTS);
$milieux = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_MILIEUX);
$utilisateurs = $gestionnaire_utilisateurs->getListeUtilisateurAvecInfosComplementairesFormateeId();
$communes = $gestionnaire_communes->obtenirCommunesLieesAStationIndexeesCodeInsee();
 
$resultats_formates = array();
$stats = array('total' => count($tableau_stations_infos));
 
foreach($tableau_stations_infos as $stations_infos) {
$commune = isset($communes[$stations_infos['os_ce_commune']]['oc_nom']) ? $communes[$stations_infos['os_ce_commune']]['oc_nom'] : '';
 
$id_station = $stations_infos['os_id_station'];
$resultats_formates[$id_station]['nom'] = $stations_infos['os_nom'];
$resultats_formates[$id_station]['code_commune'] = is_numeric($stations_infos['os_ce_commune']) ? substr($stations_infos['os_ce_commune'], 0, 2) : '';
$resultats_formates[$id_station]['nom_commune'] = $commune;
$resultats_formates[$id_station]['latitude'] = $stations_infos['os_latitude'];
$resultats_formates[$id_station]['longitude'] = $stations_infos['os_longitude'];
$resultats_formates[$id_station]['altitude'] = $stations_infos['os_altitude'];
$resultats_formates[$id_station]['type_participant'] = 'Particulier';
 
if(isset($utilisateurs[$stations_infos['os_ce_participant']])) {
$participant = $utilisateurs[$stations_infos['os_ce_participant']];
$resultats_formates[$id_station]['participant']['id'] = $participant['uid'];
$resultats_formates[$id_station]['participant']['nom'] = $participant['name'];
$resultats_formates[$id_station]['type_participant'] = isset($participant['profile_type']) ? $participant['profile_type'] : 'Particulier';
} else {
$resultats_formates[$id_station]['participant']['id'] = null;
$resultats_formates[$id_station]['participant']['nom'] = 'Anonyme';
$resultats_formates[$id_station]['type_participant'] = 'Particulier';
}
if(isset($stats[$resultats_formates[$id_station]['type_participant']])) {
$stats[$resultats_formates[$id_station]['type_participant']]++;
} else {
$stats[$resultats_formates[$id_station]['type_participant']] = 1;
}
}
$resultat = array('stats' => $stats, 'stations' => $resultats_formates);
return $resultat;
}
 
public function getExportObservation($start = null,$limit = null, $order_by = 'oo_date') {
 
$requete_selection_observations = 'SELECT oo.*, oi.*, os.*, oc.* FROM ods_observations oo'.
' LEFT JOIN ods_individus oi'.
' ON oi_id_individu = oo_ce_individu'.
' INNER JOIN ods_especes oe'.
' ON oe.oe_espece_active = 1 '.
' AND oe.oe_id_espece = oi_ce_espece '.
' LEFT JOIN ods_stations os'.
' ON oi_ce_station = os_id_station '.
' LEFT JOIN ods_communes oc'.
' ON os_ce_commune = oc_code_insee ';
 
$requete_selection_observations .= $this->construireConditionRequete();
$requete_selection_observations .= ' ORDER BY oo_date DESC';
 
$res_selection_observations = $this->executerRequete($requete_selection_observations);
 
return $res_selection_observations;
}
 
private function creerFiltreIdZoneGeo($valeurMasque) {
$masque = '';
$dept = $valeurMasque;
$dept = sprintf('%02s', $dept);
$dept = sprintf("%-'_5s", $dept);
$masque = " oc_code_insee LIKE ".$this->proteger($dept);
return $masque;
}
 
public function construireConditionRequete() {
 
$condition = ' WHERE oo_date != "0000-00-00" AND DAY(oo_date) != "00" AND ';
 
foreach($_GET as $cle => $valeur) {
 
switch($cle) {
 
case 'type_espece':
$condition .= 'oi_ce_espece IN (SELECT oe_id_espece FROM ods_especes WHERE oe_ce_type = '.$this->proteger($valeur).')';
break;
 
case 'annee':
if($this->anneesMultiplesDemandees($valeur)) {
$valeur = rtrim($valeur,',');
$condition .= 'YEAR(oo_date) IN ('.$valeur.')';
} else {
$condition .= 'YEAR(oo_date) ';
$condition .= ' = '.$this->proteger($valeur);
}
break;
 
case 'mois':
$condition .= 'MONTH(oo_date) <= '.$this->proteger($valeur);
break;
 
case 'espece':
$condition .= 'oi_ce_espece IN ('.$valeur.') ';
break;
 
case 'evenement':
$condition .= 'oo_ce_evenement = '.$this->proteger($valeur);
break;
 
case 'evenements':
//$condition .= 'oo_ce_evenement IN ('.$this->proteger($valeur).')';
$evenements = explode(',', $valeur);
$sous_condition_evenements = [];
foreach($evenements as $evenement) {
$sous_condition_evenements[] = 'oo_ce_evenement = '.$this->proteger($evenement);
}
$condition .= '('.implode(' OR ', $sous_condition_evenements).')';
break;
 
case 'utilisateur':
$condition .= 'oo_ce_participant = '.$this->proteger($valeur);
break;
 
case 'departement' :
$condition .= $this->creerFiltreIdZoneGeo($valeur);
break;
 
case 'region' :
$requete_association_region = 'SELECT * FROM ods_triples WHERE ot_ce_parent = 36 AND ot_valeur = '.$valeur;
$listeAssociationRegions = $this->executerRequete($requete_association_region);
$departements = array();
foreach ($listeAssociationRegions as $associationRegion) {
$departements[] = $this->creerFiltreIdZoneGeo($associationRegion['ot_cle']);
}
$condition .= ' ('. implode(' OR ', $departements).')';
break;
}
 
$condition .= ' AND ';
}
 
$condition = rtrim($condition,'AND ');
 
$id_demo = $this->config['appli']['id_participant_demo'];
$id_admin = $this->config['appli']['id_participant_admin'];
 
$condition .= ' AND oo_ce_participant != '.$id_demo;
$condition .= ' AND oo_ce_participant != '.$id_admin;
 
// par défaut les observations d'absence d'évènement ne sont pas incluses
// sauf si on le demande explicitement
if(empty($_GET['inclure-absences']) || $_GET['inclure-absences'] == 0) {
$condition .= ' AND oo_absence_evenement = 0';
}
 
return $condition;
}
 
private function anneesMultiplesDemandees($annee) {
// un ensemble d'identifiants est une suite d'identifiants séparés par des virgules
// sans virgule terminale
$reg_exp = "/^(([0-9])+,)*([0-9])+$/";
return preg_match($reg_exp, $annee);
}
 
public function getExportObservationPlat() {
// dans le csv les observations d'absence sont inclues par contre
$_GET['inclure-absences'] = 1;
$donnees = $this->getExportObservation();
$donnees_formatees = $this->formaterListeObservationPourExportCSV($donnees);
 
return $donnees_formatees ;
}
 
public function getExportObservationJson() {
 
$donnees = $this->getExportObservation();
$donnees_formatees = $this->formaterListeObservationPourExportJson($donnees);
 
$this->type_mime = 'application/json';
 
return $donnees_formatees;
}
 
public function formaterListeObservationPourExportJson($tableau_observations_infos) {
 
$gestionnaire_especes = new OdsEspece($this->config);
$gestionnaire_communes = new OdsCommune($this->config);
 
$especes = $gestionnaire_especes->getToutesEspeces();
$evenements = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_EVENEMENTS);
$milieux = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_MILIEUX);
 
$resultats_formates = array();
 
foreach($tableau_observations_infos as $observations_infos) {
 
$id_espece = $observations_infos['oi_ce_espece'];
if($id_espece == 0) {
continue;
}
$nom_espece = $especes[$id_espece]['nom_scientifique'];
 
$id_evenement = $observations_infos['oo_ce_evenement'];
$chaine_evenement = $evenements[$id_evenement]['ot_cle'];
 
$infos_evenement = $this->renvoyerInformationStadeAPartirChaineTriple($chaine_evenement);
 
$date_observation_formatee = date($this->config['appli']['format_date'], strtotime($observations_infos['oo_date']));
 
$id_observation = $observations_infos['oo_id_observation'];
$infos_formatees = array(
'date' => $date_observation_formatee,
'evenenement' => $infos_evenement['nom'],
'code_bbch' => $infos_evenement['numero'],
'nom_scientifique' => $nom_espece,
'id_espece' => $id_espece,
'participant' => $observations_infos['os_ce_participant']
);
 
$id_station = $observations_infos['oi_ce_station'];
 
if(!isset($resultats_formates[$id_station])) {
$resultats_formates[$id_station]['station'] = $observations_infos['os_nom'];
$resultats_formates[$id_station]['code_commune'] = $observations_infos['os_ce_commune'];
//$resultats_formates[$id_station]['nom_commune'] = $gestionnaire_communes->obtenirNomCommuneParCodeInsee($observations_infos['os_ce_commune']);
$resultats_formates[$id_station]['latitude'] = $observations_infos['os_latitude'];
$resultats_formates[$id_station]['longitude'] = $observations_infos['os_longitude'];
$resultats_formates[$id_station]['altitude'] = $observations_infos['os_altitude'];
if(isset($milieux[$observations_infos['os_ce_environnement']]['ot_valeur'])) {
$resultats_formates[$id_station]['milieu'] = $milieux[$observations_infos['os_ce_environnement']]['ot_valeur'];
} else {
$resultats_formates[$id_station]['milieu'] = '';
}
$resultats_formates[$id_station]['participant'] = $observations_infos['os_ce_participant'];
}
 
$resultats_formates[$id_station]['obs'][$id_observation] = $infos_formatees;
}
 
return $resultats_formates;
}
 
public function getFichierExportObservationCsv() {
// dans le csv les observations d'absence sont inclues par contre
$_GET['inclure-absences'] = 1;
$donnees = $this->getExportObservation();
$donnees_formatees = $this->formaterListeObservationPourExportCSV($donnees);
$chaine_csv = $this->convertirTableauAssocVersCSV($donnees_formatees);
 
$this->envoyerFichier($chaine_csv);
}
 
public function formaterListeObservationPourExportCSV($tableau_observations_infos) {
 
$gestionnaire_especes = new OdsEspece($this->config);
$gestionnaire_communes = new OdsCommune($this->config);
$gestionnaire_utilisateurs = new OdsUtilisateur($this->config);
 
$especes = $gestionnaire_especes->getToutesEspeces();
$evenements = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_EVENEMENTS);
$milieux = $this->obtenirValeursListeParAbreviation(self::ABBR_LISTE_MILIEUX);
 
$codes_insee_communes = array();
 
$resultats_formates = array();
foreach($tableau_observations_infos as $observations_infos) {
 
$id_espece = $observations_infos['oi_ce_espece'];
$nom_espece = $especes[$id_espece]['nom_scientifique'];
 
$id_evenement = $observations_infos['oo_ce_evenement'];
$chaine_evenement = $evenements[$id_evenement]['ot_cle'];
 
$infos_evenement = $this->renvoyerInformationStadeAPartirChaineTriple($chaine_evenement);
 
$date_observation_formatee = date($this->config['appli']['format_date'], strtotime($observations_infos['oo_date']));
 
$id_observation = $observations_infos['oo_id_observation'];
$milieu = isset($milieux[$observations_infos['os_ce_environnement']]['ot_valeur']) ? $milieux[$observations_infos['os_ce_environnement']]['ot_valeur'] : '';
 
$infos_formatees = array(
'id_observation' => $id_observation,
'id_individu' => $observations_infos['oo_ce_individu'],
'commentaire_individu' => $observations_infos['oi_commentaire'],
'presence_evenement' => $observations_infos['oo_absence_evenement'] == 1 ? 'Absence' : 'Présence',
'date' => $date_observation_formatee,
'evenenement' => $infos_evenement['nom'],
'code_bbch' => $infos_evenement['numero'],
'nom_scientifique' => $nom_espece,
'station' => $observations_infos['os_nom'],
'code_commune' => $observations_infos['os_ce_commune'],
'nom_commune' => '',
'latitude' => $observations_infos['os_latitude'],
'longitude' => $observations_infos['os_longitude'],
'altitude' => $observations_infos['os_altitude'],
'milieu' => $milieu,
'id_participant' => $observations_infos['os_ce_participant'],
'pseudo_participant' => '',
'mail_participant' => ''
);
 
$resultats_formates[] = $infos_formatees;
 
if(is_numeric($observations_infos['os_ce_commune'])) {
$codes_insee_communes[] = $observations_infos['os_ce_commune'];
}
}
 
$correspondance_codes_insee_noms = $gestionnaire_communes->obtenirTableauNomsCommunesParTableauCodesInsee($codes_insee_communes);
$correspondance_id_utilisateur = $gestionnaire_utilisateurs->getListeUtilisateurFormateeId();
 
foreach($resultats_formates as &$resultat) {
 
if(isset($correspondance_codes_insee_noms[$resultat['code_commune']]) && trim($correspondance_codes_insee_noms[$resultat['code_commune']]) != '') {
$resultat['nom_commune'] = $correspondance_codes_insee_noms[$resultat['code_commune']];
}
 
$resultat['pseudo_participant'] = isset($correspondance_id_utilisateur[$resultat['id_participant']]) ? $correspondance_id_utilisateur[$resultat['id_participant']]['name'] : '';
$resultat['mail_participant'] = isset($correspondance_id_utilisateur[$resultat['id_participant']]) ? $correspondance_id_utilisateur[$resultat['id_participant']]['mail'] : '';
}
 
return $resultats_formates;
}
 
public function convertirTableauAssocVersCSV($tableau) {
 
$csv = '';
$colonnes = array_keys($tableau[0]);
$csv .= implode(';',$colonnes).";\n";
 
foreach($tableau as $elements) {
$ligne = "";
// parcours des cases de chaque ligne nécessaire car si on utilise implode
// les valeurs vides ne sont pas prises et ça décale les colonnes
foreach ($elements as $element) {
$ligne .= '"'.$element.'";';
}
$csv .= $ligne."\n";
}
 
return $csv;
}
 
public function envoyerFichier($contenu, $nom = 'observations_export') {
 
$nom_fichier = $nom.".csv";
$chemin_fichier = $this->config['appli']['chemin_fichiers_temp'].'/'.$nom_fichier;
 
file_put_contents($chemin_fichier, $contenu);
 
$contenu = file_get_contents($chemin_fichier);
$taille_fichier = filesize($chemin_fichier);
 
unlink($chemin_fichier);
 
ini_set('zlib.output_compression','Off');
 
header('Pragma: public');
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Cache-Control: must-revalidate, pre-check=0, post-check=0, max-age=0');
 
header('Content-Tranfer-Encoding: none');
 
header('Content-Type: application/octetstream; name="'.$nom_fichier.'"');
header('Content-Disposition: attachement; filename="'.$nom_fichier.'"');
 
header('Content-Length: '.$taille_fichier);
 
echo $contenu;
exit();
}
 
private function formaterInformationPourEnvoi($tableauinfos) {
 
}
}
?>
/trunk/applications/jrest/services/OdsStation.php
New file
0,0 → 1,288
<?php
 
class OdsStation extends OdsTriple {
 
/**
* Méthode appelée avec une requête de type GET.
*
*/
function getElement($param = array()) {
if(isset($param[0]) && isset($param[1])) {
$id_participant = $param[0];
} else {
return;
}
if($param[1] == "*") {
$info = $this->obtenirListeStationPourParticipant($id_participant);
} else if(is_numeric($param[1])) {
$id_station = $param[1];
$info = $this->obtenirInformationsStation($id_station);
}
$this->envoyer($info);
}
/**
* Méthode appelée pour ajouter un élément.
*/
public function createElement($params) {
$elements_requis = array('id_participant','station_nom', 'station_commune', 'station_lat', 'station_lon','station_milieu','station_alt');
$erreurs = array();
foreach($elements_requis as $requis) {
if(!isset($params[$requis])) {
//$erreurs[$requis] = 'erreur ';
}
}
if(!empty($erreurs)) {
$this->envoyer($erreurs);
}
$id_participant = $params['id_participant'];
$commune = $this->traiterParametreCommune($params);
// description n'est pas obligatoire, et également pour le moment inutilisé
$params['station_description'] = isset($params['station_description']) ? $params['station_description'] : '';
$requete_creation_station = 'INSERT INTO ods_stations '.
'(os_ce_participant, os_nom, os_ce_commune, os_latitude, os_longitude, os_altitude, os_ce_environnement, os_commentaire) '.
'VALUES ('.
$this->proteger($id_participant).','.
$this->proteger($params['station_nom']).','.
$this->proteger($commune).','.
$this->proteger($params['station_lat']).','.
$this->proteger($params['station_lon']).','.
$this->proteger($params['station_alt']).','.
$this->proteger($params['station_milieu']).','.
$this->proteger($params['station_description']).')';
$creation_station = $this->executerRequeteSimple($requete_creation_station);
if(!$creation_station) {
$retour['erreurs'] = 'erreur d\'insertion';
} else {
$retour['id_nouvelle_station'] = $this->renvoyerDernierIdInsere();
}
$this->envoyer($retour);
}
/**
* Méthode appelée pour mettre à jour un élément
*/
public function updateElement($uid, $params) {
$elements_requis = array('id_participant','station_nom', 'station_commune', 'station_lat', 'station_lon','station_milieu','station_alt');
$erreurs = array();
foreach($elements_requis as $requis) {
if(!isset($params[$requis])) {
$erreurs[$requis] = 'erreur ';
}
}
if(!empty($erreurs)) {
$this->envoyer($erreurs);
}
$id_participant = $params['id_participant'];
if(!isset($uid[0])) {
return;
} else {
$id_station = $uid[0];
}
$commune = $this->traiterParametreCommune($params);
$params['station_description'] = empty($params['station_description']) ? '' : $params['station_description'];
$requete_modification_station = 'UPDATE ods_stations '.
'SET '.
'os_nom ='.$this->proteger($params['station_nom']).','.
'os_ce_commune ='.$this->proteger($commune).','.
'os_latitude ='.$this->proteger($params['station_lat']).','.
'os_longitude ='.$this->proteger($params['station_lon']).','.
'os_altitude ='.$this->proteger($params['station_alt']).','.
'os_ce_environnement ='.$this->proteger($params['station_milieu']).','.
'os_commentaire ='.$this->proteger($params['station_description']).' '.
'WHERE os_ce_participant = '.$this->proteger($id_participant).' '.
'AND os_id_station = '.$this->proteger($id_station);
$modification_station = $this->executerRequeteSimple($requete_modification_station);
$retour = array();
if(!$modification_station) {
$retour['erreurs'] = 'Erreur lors de la modification de la station';
} else {
$retour['reponse'] = 'OK';
}
 
$this->envoyer($retour);
}
private function traiterParametreCommune($params) {
// Si on a pas de code INSEE on mettra la valeur brute que
// l'utilisateur a saisi afin de ne pas perdre d'infos
$commune = $params['station_commune'];
// Si un code INSEE semble présent
if(isset($params['station_code_insee']) && trim($params['station_code_insee']) != '') {
// Si c'est le cas affectation directe
if($this->estUnCodeInsee($params)) {
$commune = $params['station_code_insee'];
// Cas du code saisi sans le 0 de gauche
$commune = (strlen($commune) == 4) ? '0'.$commune : $commune;
} elseif($this->estUnCommunePlusDepartement($params)) {
// Cas du département sur un ou deux chiffres + une commune
// tentative de retrouve le code INSEE complet
$params['station_code_insee'] = (strlen($params['station_code_insee']) == 1) ? '0'.$params['station_code_insee'] : $params['station_code_insee'];
$infos = $this->obtenirInformationsCommuneParNomEtDepartement($params['station_commune'], $params['station_code_insee']);
$commune = ($infos != null) ? $infos['oc_code_insee'] : $commune;
//TODO: quoi faire si on a 3 chiffres par exemple ou plus de 5 chiffres ?
}
}
 
return $commune;
}
private function estUnCodeInsee($params) {
return is_numeric($params['station_code_insee']) &&
(strlen($params['station_code_insee']) == 5 ||
strlen($params['station_code_insee']) == 4);
}
private function estUnCommunePlusDepartement($params) {
return is_numeric($params['station_code_insee']) &&
(strlen($params['station_code_insee']) == 2 ||
strlen($params['station_code_insee']) == 1) &&
isset($params['station_commune']) &&
trim($params['station_commune']) != "";
}
/**
* Méthode appelée pour supprimer un élément
*/
public function deleteElement($uid) {
if(isset($uid[0])) {
$id_participant = $uid[0];
} else {
return;
}
if(isset($uid[1])) {
$id_station = $uid[1];
} else {
return;
}
$requete_suppression_station = 'DELETE FROM ods_stations '.
'WHERE os_ce_participant = '.$this->proteger($id_participant).' '.
'AND os_id_station = '.$this->proteger($id_station);
$suppression_station = $this->executerRequeteSimple($requete_suppression_station);
if(!$suppression_station) {
// TODO: comment gère t'on les erreurs ?
}
$this->envoyer();
}
private function obtenirListeStationPourParticipant($id_participant) {
$requete_liste_station = 'SELECT * FROM ods_stations WHERE os_ce_participant = '.$this->proteger($id_participant);
 
$liste_station = $this->executerRequete($requete_liste_station);
$liste_station_formatees = array();
foreach($liste_station as $indice => $station) {
$station_champs_formates = $this->formaterChampsStationPourEnvoi($station);
$liste_station_formatees[$station['os_id_station']] = $station_champs_formates;
}
return $liste_station_formatees;
}
private function obtenirInformationsStation($id_station) {
$requete_infos_station = 'SELECT * FROM ods_stations WHERE os_id_station = '.$this->proteger($id_station);
 
$infos_station = $this->executerRequete($requete_infos_station);
$infos_station_formatees = array();
if(!empty($infos_station)) {
$infos_station = $infos_station[0];
$infos_station_formatees = $this->formaterChampsStationPourEnvoi($infos_station);
}
return $infos_station_formatees;
}
private function formaterChampsStationPourEnvoi($station) {
if(is_numeric($station['os_ce_commune'])) {
$commune = $this->obtenirInformationsCommuneParCodeInsee($station['os_ce_commune']);
} else {
$commune = $station['os_ce_commune'];
}
$station_champs_formates = array(
'id' => $station['os_id_station'],
'nom' => $station['os_nom'],
'code_insee' => $station['os_ce_commune'],
'commune' => $commune,
'id_milieu' => $station['os_ce_environnement'],
'milieu' => $this->obtenirInformationsMilieuParId($station['os_ce_environnement']),
'latitude' => $station['os_latitude'],
'longitude' => $station['os_longitude'],
'altitude' => $station['os_altitude'],
'description' => $station['os_commentaire']
);
return $station_champs_formates;
}
private function obtenirInformationsCommuneParCodeInsee($code_insee_commune) {
$requete_infos_commune = 'SELECT * FROM ods_communes WHERE oc_code_insee = '.$this->proteger($code_insee_commune);
$infos_commune = $this->executerRequete($requete_infos_commune);
return $infos_commune[0]['oc_nom'];
}
private function obtenirInformationsCommuneParNomEtDepartement($nom, $departement) {
// un remplacement par des underscores permet de s'affranchir des problèmes de saisie
// des communes avec des tirets espaces etc...
$nom = str_replace(array("'","-",'"',' ') ,'_', $nom);
$requete_infos_commune = 'SELECT oc_nom, oc_code_insee FROM ods_communes '.
'WHERE oc_code_insee LIKE '.$this->proteger($departement.'%').' AND '.
'oc_nom LIKE '.$this->proteger($nom);
$infos_commune = $this->executerRequete($requete_infos_commune);
$retour = null;
if($infos_commune && isset($infos_commune[0])) {
$retour = $infos_commune[0];
}
 
return $retour;
}
private function obtenirInformationsMilieuParId($id_milieu) {
$informations_milieu = $this->obtenirValeurTripleParId($id_milieu);
return $informations_milieu;
}
}
?>
/trunk/applications/jrest/services/OdsEvenement.php
New file
0,0 → 1,142
<?php
 
class OdsEvenement extends OdsTriple {
 
const PREFIXE = 'get';
/**
* Méthode appelée avec une requête de type GET.
*
*/
function getElement($param = array()) {
$type = $param[0];
if ($type == '*' || is_numeric($type)) {
$info = $this->getElementParDefaut($param);
} else {
$methode = self::PREFIXE.$type;
if (method_exists($this, $methode)) {
array_shift($param);
$info = $this->$methode($param);
} else {
$this->messages[] = "Le type d'information demandé '$type' n'est pas disponible.";
}
}
// Envoi sur la sortie standard
$this->envoyer($info);
}
/**
* Méthode appelée pour ajouter un élément.
*/
public function createElement($params) {
//TODO: méthode de creation d'évènements spéciale aux admins
}
/**
* Méthode appelée pour supprimer un élément
*/
public function deleteElement($uid) {
//TODO: méthode de suppression d'évènements spéciale aux admins
}
private function getElementParDefaut($param) {
$this->getTousEvenements($param);
}
private function getTousEvenements($params) {
 
$requete_liste_evenements_pour_espece = 'SELECT * FROM ods_triples '.
'WHERE ot_ce_parent = 12';
$liste_evenements_pour_espece = $this->executerRequete($requete_liste_evenements_pour_espece);
$liste_evenements_pour_espece_formatee = $this->formaterTableauEvenementPourEnvoiParId($liste_evenements_pour_espece);
return $liste_evenements_pour_espece_formatee;
}
private function getEvenementsPourEspece($params) {
$id_espece = $params[0];
$requete_evenements_pour_espece = 'SELECT oe_ce_evenements FROM ods_especes '.
'WHERE oe_id_espece = '.$this->proteger($id_espece);
$evenements_pour_espece = $this->executerRequete($requete_evenements_pour_espece);
$evenements_pour_espece = $evenements_pour_espece[0]['oe_ce_evenements'];
$tableau_evenements_espece = explode(',',$evenements_pour_espece);
foreach($tableau_evenements_espece as &$evenement_espece) {
$evenement_espece = $this->proteger($evenement_espece);
}
$evenements_espece_chaine_bdd = implode(',',$tableau_evenements_espece);
 
$requete_liste_evenements_pour_espece = 'SELECT * FROM ods_triples '.
'WHERE ot_id_triple IN '.
'('.$evenements_espece_chaine_bdd.')';
$liste_evenements_pour_espece = $this->executerRequete($requete_liste_evenements_pour_espece);
$liste_evenements_pour_espece_formatee = $this->formaterTableauEvenementPourEnvoi($liste_evenements_pour_espece);
 
return $liste_evenements_pour_espece_formatee;
}
private function formaterTableauEvenementPourEnvoiParId($liste_evenements) {
$tableau_evenements_formate = array();
foreach($liste_evenements as $evenement) {
$identifiant_stade = $evenement['ot_id_triple'];
$stade_observation_complet = $evenement['ot_cle'];
$infos_stades = $this->renvoyerInformationStadeAPartirChaineTriple($stade_observation_complet);
$titre_stade = $infos_stades['nom'];
$numero_stade = $infos_stades['numero'];
$abreviation_stade = $infos_stades['abreviation'];
$description_stade = $evenement['ot_description'];
$tableau_evenements_formate[$identifiant_stade]['code'] = $numero_stade;
$tableau_evenements_formate[$identifiant_stade]['nom'] = $titre_stade;
}
return $tableau_evenements_formate;
}
private function formaterTableauEvenementPourEnvoi($liste_evenements) {
$tableau_evenements_formate = array();
foreach($liste_evenements as $evenement) {
$identifiant_stade = $evenement['ot_id_triple'];
$stade_observation_complet = $evenement['ot_cle'];
$infos_stades = $this->renvoyerInformationStadeAPartirChaineTriple($stade_observation_complet);
$titre_stade = $infos_stades['nom'];
$numero_stade = $infos_stades['numero'];
$abreviation_stade = $infos_stades['abreviation'];
$description_stade = $evenement['ot_description'];
$tableau_evenements_formate[$titre_stade]['id'] = $evenement['ot_id_triple'];
$tableau_evenements_formate[$titre_stade]['nom'] = $titre_stade;
$tableau_evenements_formate[$titre_stade]['abreviation'] = $abreviation_stade;
$tableau_evenements_formate[$titre_stade]['description'][$identifiant_stade] = $description_stade;
$tableau_evenements_formate[$titre_stade]['stades'][$identifiant_stade] = $numero_stade;
}
return $tableau_evenements_formate;
}
}
?>
/trunk/applications/jrest/services/gPoint.php
New file
0,0 → 1,534
<?php
/*------------------------------------------------------------------------------
** File: gPoint.php
** Description: PHP class to convert Latitude & Longitude coordinates into
** UTM & Lambert Conic Conformal Northing/Easting coordinates.
** Version: 1.3
** Author: Brenor Brophy
** Email: brenor dot brophy at gmail dot com
** Homepage: brenorbrophy.com
**------------------------------------------------------------------------------
** COPYRIGHT (c) 2005, 2006, 2007, 2008 BRENOR BROPHY
**
** The source code included in this package 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. This license can be
** read at:
**
** http://www.opensource.org/licenses/gpl-license.php
**
** 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.
**------------------------------------------------------------------------------
**
** Code for datum and UTM conversion was converted from C++ code written by
** Chuck Gantz (chuck dot gantz at globalstar dot com) from
** http://www.gpsy.com/gpsinfo/geotoutm/ This URL has many other references to
** useful information concerning conversion of coordinates.
**
** Rev History
** -----------------------------------------------------------------------------
** 1.0 08/25/2005 Initial Release
** 1.1 05/15/2006 Added software license language to header comments
** Fixed an error in the convertTMtoLL() method. The latitude
** calculation had a bunch of variables without $ symbols.
** Fixed an error in convertLLtoTM() method, The $this-> was
** missing in front of a couple of variables. Thanks to Bob
** Robins of Maryland for catching the bugs.
** 1.2 05/18/2007 Added default of NULL to $LongOrigin arguement in convertTMtoLL()
** and convertLLtoTM() to eliminate warning messages when the
** methods are called without a value for $LongOrigin.
** 1.3 02/21/2008 Fixed a bug in the distanceFrom method, where the input parameters
** were not being converted to radians prior to calculating the
** distance. Thanks to Enrico Benco for finding pointing it out.
*/
define ("meter2nm", (1/1852));
define ("nm2meter", 1852);
 
/*------------------------------------------------------------------------------
** class gPoint ... for Geographic Point
**
** This class encapsulates the methods for representing a geographic point on the
** earth in three different coordinate systema. Lat/Long, UTM and Lambert Conic
** Conformal.
*/
class gPoint
{
/* Reference ellipsoids derived from Peter H. Dana's website-
** http://www.colorado.edu/geography/gcraft/notes/datum/datum_f.html
** email: pdana@pdana.com, web page: www.pdana.com
**
** Source:
** Defense Mapping Agency. 1987b. DMA Technical Report: Supplement to Department
** of Defense World Geodetic System 1984 Technical Report. Part I and II.
** Washington, DC: Defense Mapping Agency
*/
var $ellipsoid = array(//Ellipsoid name, Equatorial Radius, square of eccentricity
"Airy" =>array (6377563, 0.00667054),
"Australian National" =>array (6378160, 0.006694542),
"Bessel 1841" =>array (6377397, 0.006674372),
"Bessel 1841 Nambia" =>array (6377484, 0.006674372),
"Clarke 1866" =>array (6378206, 0.006768658),
"Clarke 1880" =>array (6378249, 0.006803511),
"Everest" =>array (6377276, 0.006637847),
"Fischer 1960 Mercury" =>array (6378166, 0.006693422),
"Fischer 1968" =>array (6378150, 0.006693422),
"GRS 1967" =>array (6378160, 0.006694605),
"GRS 1980" =>array (6378137, 0.00669438),
"Helmert 1906" =>array (6378200, 0.006693422),
"Hough" =>array (6378270, 0.00672267),
"International" =>array (6378388, 0.00672267),
"Krassovsky" =>array (6378245, 0.006693422),
"Modified Airy" =>array (6377340, 0.00667054),
"Modified Everest" =>array (6377304, 0.006637847),
"Modified Fischer 1960" =>array (6378155, 0.006693422),
"South American 1969" =>array (6378160, 0.006694542),
"WGS 60" =>array (6378165, 0.006693422),
"WGS 66" =>array (6378145, 0.006694542),
"WGS 72" =>array (6378135, 0.006694318),
"WGS 84" =>array (6378137, 0.00669438));
 
// Properties
var $a; // Equatorial Radius
var $e2; // Square of eccentricity
var $datum; // Selected datum
var $Xp, $Yp; // X,Y pixel location
var $lat, $long; // Latitude & Longitude of the point
var $utmNorthing, $utmEasting, $utmZone; // UTM Coordinates of the point
var $lccNorthing, $lccEasting; // Lambert coordinates of the point
var $falseNorthing, $falseEasting; // Origin coordinates for Lambert Projection
var $latOfOrigin; // For Lambert Projection
var $longOfOrigin; // For Lambert Projection
var $firstStdParallel; // For lambert Projection
var $secondStdParallel; // For lambert Projection
 
// constructor
function gPoint($datum='WGS 84') // Default datum is WGS 84
{
$this->a = $this->ellipsoid[$datum][0]; // Set datum Equatorial Radius
$this->e2 = $this->ellipsoid[$datum][1]; // Set datum Square of eccentricity
$this->datum = $datum; // Save the datum
}
//
// Set/Get X & Y pixel of the point (used if it is being drawn on an image)
//
function setXY($x, $y)
{
$this->Xp = $x; $this->Yp = $y;
}
function Xp() { return $this->Xp; }
function Yp() { return $this->Yp; }
//
// Set/Get/Output Longitude & Latitude of the point
//
function setLongLat($long, $lat)
{
$this->long = $long; $this->lat = $lat;
}
function Lat() { return $this->lat; }
function Long() { return $this->long; }
function printLatLong() { printf("Latitude: %1.5f Longitude: %1.5f",$this->lat, $this->long); }
//
// Set/Get/Output Universal Transverse Mercator Coordinates
//
function setUTM($easting, $northing, $zone='') // Zone is optional
{
$this->utmNorthing = $northing;
$this->utmEasting = $easting;
$this->utmZone = $zone;
}
function N() { return $this->utmNorthing; }
function E() { return $this->utmEasting; }
function Z() { return $this->utmZone; }
function printUTM() { print( "Northing: ".(int)$this->utmNorthing.", Easting: ".(int)$this->utmEasting.", Zone: ".$this->utmZone); }
//
// Set/Get/Output Lambert Conic Conformal Coordinates
//
function setLambert($easting, $northing)
{
$this->lccNorthing = $northing;
$this->lccEasting = $easting;
}
function lccN() { return $this->lccNorthing; }
function lccE() { return $this->lccEasting; }
function printLambert() { print( "Northing: ".(int)$this->lccNorthing.", Easting: ".(int)$this->lccEasting); }
 
//------------------------------------------------------------------------------
//
// Convert Longitude/Latitude to UTM
//
// Equations from USGS Bulletin 1532
// East Longitudes are positive, West longitudes are negative.
// North latitudes are positive, South latitudes are negative
// Lat and Long are in decimal degrees
// Written by Chuck Gantz- chuck dot gantz at globalstar dot com, converted to PHP by
// Brenor Brophy, brenor dot brophy at gmail dot com
//
// UTM coordinates are useful when dealing with paper maps. Basically the
// map will can cover a single UTM zone which is 6 degrees on longitude.
// So you really don't care about an object crossing two zones. You just get a
// second map of the other zone. However, if you happen to live in a place that
// straddles two zones (For example the Santa Babara area in CA straddles zone 10
// and zone 11) Then it can become a real pain having to have two maps all the time.
// So relatively small parts of the world (like say California) create their own
// version of UTM coordinates that are adjusted to conver the whole area of interest
// on a single map. These are called state grids. The projection system is the
// usually same as UTM (i.e. Transverse Mercator), but the central meridian
// aka Longitude of Origin is selected to suit the logitude of the area being
// mapped (like being moved to the central meridian of the area) and the grid
// may cover more than the 6 degrees of lingitude found on a UTM map. Areas
// that are wide rather than long - think Montana as an example. May still
// have to have a couple of maps to cover the whole state because TM projection
// looses accuracy as you move further away from the Longitude of Origin, 15 degrees
// is usually the limit.
//
// Now, in the case where we want to generate electronic maps that may be
// placed pretty much anywhere on the globe we really don't to deal with the
// issue of UTM zones in our coordinate system. We would really just like a
// grid that is fully contigious over the area of the map we are drawing. Similiar
// to the state grid, but local to the area we are interested in. I call this
// Local Transverse Mercator and I have modified the function below to also
// make this conversion. If you pass a Longitude value to the function as $LongOrigin
// then that is the Longitude of Origin that will be used for the projection.
// Easting coordinates will be returned (in meters) relative to that line of
// longitude - So an Easting coordinate for a point located East of the longitude
// of origin will be a positive value in meters, an Easting coordinate for a point
// West of the longitude of Origin will have a negative value in meters. Northings
// will always be returned in meters from the equator same as the UTM system. The
// UTMZone value will be valid for Long/Lat given - thought it is not meaningful
// in the context of Local TM. If a NULL value is passed for $LongOrigin
// then the standard UTM coordinates are calculated.
//
function convertLLtoTM($LongOrigin = NULL)
{
$k0 = 0.9996;
$falseEasting = 0.0;
 
//Make sure the longitude is between -180.00 .. 179.9
$LongTemp = ($this->long+180)-(integer)(($this->long+180)/360)*360-180; // -180.00 .. 179.9;
$LatRad = deg2rad($this->lat);
$LongRad = deg2rad($LongTemp);
 
if (!$LongOrigin)
{ // Do a standard UTM conversion - so findout what zone the point is in
$ZoneNumber = (integer)(($LongTemp + 180)/6) + 1;
// Special zone for South Norway
if( $this->lat >= 56.0 && $this->lat < 64.0 && $LongTemp >= 3.0 && $LongTemp < 12.0 ) // Fixed 1.1
$ZoneNumber = 32;
// Special zones for Svalbard
if( $this->lat >= 72.0 && $this->lat < 84.0 )
{
if( $LongTemp >= 0.0 && $LongTemp < 9.0 ) $ZoneNumber = 31;
else if( $LongTemp >= 9.0 && $LongTemp < 21.0 ) $ZoneNumber = 33;
else if( $LongTemp >= 21.0 && $LongTemp < 33.0 ) $ZoneNumber = 35;
else if( $LongTemp >= 33.0 && $LongTemp < 42.0 ) $ZoneNumber = 37;
}
$LongOrigin = ($ZoneNumber - 1)*6 - 180 + 3; //+3 puts origin in middle of zone
//compute the UTM Zone from the latitude and longitude
$this->utmZone = sprintf("%d%s", $ZoneNumber, $this->UTMLetterDesignator());
// We also need to set the false Easting value adjust the UTM easting coordinate
$falseEasting = 500000.0;
}
$LongOriginRad = deg2rad($LongOrigin);
 
$eccPrimeSquared = ($this->e2)/(1-$this->e2);
 
$N = $this->a/sqrt(1-$this->e2*sin($LatRad)*sin($LatRad));
$T = tan($LatRad)*tan($LatRad);
$C = $eccPrimeSquared*cos($LatRad)*cos($LatRad);
$A = cos($LatRad)*($LongRad-$LongOriginRad);
 
$M = $this->a*((1 - $this->e2/4 - 3*$this->e2*$this->e2/64 - 5*$this->e2*$this->e2*$this->e2/256)*$LatRad
- (3*$this->e2/8 + 3*$this->e2*$this->e2/32 + 45*$this->e2*$this->e2*$this->e2/1024)*sin(2*$LatRad)
+ (15*$this->e2*$this->e2/256 + 45*$this->e2*$this->e2*$this->e2/1024)*sin(4*$LatRad)
- (35*$this->e2*$this->e2*$this->e2/3072)*sin(6*$LatRad));
$this->utmEasting = ($k0*$N*($A+(1-$T+$C)*$A*$A*$A/6
+ (5-18*$T+$T*$T+72*$C-58*$eccPrimeSquared)*$A*$A*$A*$A*$A/120)
+ $falseEasting);
 
$this->utmNorthing = ($k0*($M+$N*tan($LatRad)*($A*$A/2+(5-$T+9*$C+4*$C*$C)*$A*$A*$A*$A/24
+ (61-58*$T+$T*$T+600*$C-330*$eccPrimeSquared)*$A*$A*$A*$A*$A*$A/720)));
if($this->lat < 0)
$this->utmNorthing += 10000000.0; //10000000 meter offset for southern hemisphere
}
//
// This routine determines the correct UTM letter designator for the given latitude
// returns 'Z' if latitude is outside the UTM limits of 84N to 80S
// Written by Chuck Gantz- chuck dot gantz at globalstar dot com, converted to PHP by
// Brenor Brophy, brenor dot brophy at gmail dot com
//
function UTMLetterDesignator()
{
if((84 >= $this->lat) && ($this->lat >= 72)) $LetterDesignator = 'X';
else if((72 > $this->lat) && ($this->lat >= 64)) $LetterDesignator = 'W';
else if((64 > $this->lat) && ($this->lat >= 56)) $LetterDesignator = 'V';
else if((56 > $this->lat) && ($this->lat >= 48)) $LetterDesignator = 'U';
else if((48 > $this->lat) && ($this->lat >= 40)) $LetterDesignator = 'T';
else if((40 > $this->lat) && ($this->lat >= 32)) $LetterDesignator = 'S';
else if((32 > $this->lat) && ($this->lat >= 24)) $LetterDesignator = 'R';
else if((24 > $this->lat) && ($this->lat >= 16)) $LetterDesignator = 'Q';
else if((16 > $this->lat) && ($this->lat >= 8)) $LetterDesignator = 'P';
else if(( 8 > $this->lat) && ($this->lat >= 0)) $LetterDesignator = 'N';
else if(( 0 > $this->lat) && ($this->lat >= -8)) $LetterDesignator = 'M';
else if((-8 > $this->lat) && ($this->lat >= -16)) $LetterDesignator = 'L';
else if((-16 > $this->lat) && ($this->lat >= -24)) $LetterDesignator = 'K';
else if((-24 > $this->lat) && ($this->lat >= -32)) $LetterDesignator = 'J';
else if((-32 > $this->lat) && ($this->lat >= -40)) $LetterDesignator = 'H';
else if((-40 > $this->lat) && ($this->lat >= -48)) $LetterDesignator = 'G';
else if((-48 > $this->lat) && ($this->lat >= -56)) $LetterDesignator = 'F';
else if((-56 > $this->lat) && ($this->lat >= -64)) $LetterDesignator = 'E';
else if((-64 > $this->lat) && ($this->lat >= -72)) $LetterDesignator = 'D';
else if((-72 > $this->lat) && ($this->lat >= -80)) $LetterDesignator = 'C';
else $LetterDesignator = 'Z'; //This is here as an error flag to show that the Latitude is outside the UTM limits
 
return($LetterDesignator);
}
 
//------------------------------------------------------------------------------
//
// Convert UTM to Longitude/Latitude
//
// Equations from USGS Bulletin 1532
// East Longitudes are positive, West longitudes are negative.
// North latitudes are positive, South latitudes are negative
// Lat and Long are in decimal degrees.
// Written by Chuck Gantz- chuck dot gantz at globalstar dot com, converted to PHP by
// Brenor Brophy, brenor dot brophy at gmail dot com
//
// If a value is passed for $LongOrigin then the function assumes that
// a Local (to the Longitude of Origin passed in) Transverse Mercator
// coordinates is to be converted - not a UTM coordinate. This is the
// complementary function to the previous one. The function cannot
// tell if a set of Northing/Easting coordinates are in the North
// or South hemesphere - they just give distance from the equator not
// direction - so only northern hemesphere lat/long coordinates are returned.
// If you live south of the equator there is a note later in the code
// explaining how to have it just return southern hemesphere lat/longs.
//
function convertTMtoLL($LongOrigin = NULL)
{
$k0 = 0.9996;
$e1 = (1-sqrt(1-$this->e2))/(1+sqrt(1-$this->e2));
$falseEasting = 0.0;
$y = $this->utmNorthing;
 
if (!$LongOrigin)
{ // It is a UTM coordinate we want to convert
sscanf($this->utmZone,"%d%s",$ZoneNumber,$ZoneLetter);
if($ZoneLetter >= 'N')
$NorthernHemisphere = 1;//point is in northern hemisphere
else
{
$NorthernHemisphere = 0;//point is in southern hemisphere
$y -= 10000000.0;//remove 10,000,000 meter offset used for southern hemisphere
}
$LongOrigin = ($ZoneNumber - 1)*6 - 180 + 3; //+3 puts origin in middle of zone
$falseEasting = 500000.0;
}
 
// $y -= 10000000.0; // Uncomment line to make LOCAL coordinates return southern hemesphere Lat/Long
$x = $this->utmEasting - $falseEasting; //remove 500,000 meter offset for longitude
 
$eccPrimeSquared = ($this->e2)/(1-$this->e2);
 
$M = $y / $k0;
$mu = $M/($this->a*(1-$this->e2/4-3*$this->e2*$this->e2/64-5*$this->e2*$this->e2*$this->e2/256));
 
$phi1Rad = $mu + (3*$e1/2-27*$e1*$e1*$e1/32)*sin(2*$mu)
+ (21*$e1*$e1/16-55*$e1*$e1*$e1*$e1/32)*sin(4*$mu)
+(151*$e1*$e1*$e1/96)*sin(6*$mu);
$phi1 = rad2deg($phi1Rad);
 
$N1 = $this->a/sqrt(1-$this->e2*sin($phi1Rad)*sin($phi1Rad));
$T1 = tan($phi1Rad)*tan($phi1Rad);
$C1 = $eccPrimeSquared*cos($phi1Rad)*cos($phi1Rad);
$R1 = $this->a*(1-$this->e2)/pow(1-$this->e2*sin($phi1Rad)*sin($phi1Rad), 1.5);
$D = $x/($N1*$k0);
 
$tlat = $phi1Rad - ($N1*tan($phi1Rad)/$R1)*($D*$D/2-(5+3*$T1+10*$C1-4*$C1*$C1-9*$eccPrimeSquared)*$D*$D*$D*$D/24
+(61+90*$T1+298*$C1+45*$T1*$T1-252*$eccPrimeSquared-3*$C1*$C1)*$D*$D*$D*$D*$D*$D/720); // fixed in 1.1
$this->lat = rad2deg($tlat);
 
$tlong = ($D-(1+2*$T1+$C1)*$D*$D*$D/6+(5-2*$C1+28*$T1-3*$C1*$C1+8*$eccPrimeSquared+24*$T1*$T1)
*$D*$D*$D*$D*$D/120)/cos($phi1Rad);
$this->long = $LongOrigin + rad2deg($tlong);
}
 
//------------------------------------------------------------------------------
// Configure a Lambert Conic Conformal Projection
//
// falseEasting & falseNorthing are just an offset in meters added to the final
// coordinate calculated.
//
// longOfOrigin & LatOfOrigin are the "center" latitiude and longitude of the
// area being projected. All coordinates will be calculated in meters relative
// to this point on the earth.
//
// firstStdParallel & secondStdParallel are the two lines of longitude (that
// is they run east-west) that define where the "cone" intersects the earth.
// Simply put they should bracket the area being projected.
//
// google is your friend to find out more
//
function configLambertProjection ($falseEasting, $falseNorthing,
$longOfOrigin, $latOfOrigin,
$firstStdParallel, $secondStdParallel)
{
$this->falseEasting = $falseEasting;
$this->falseNorthing = $falseNorthing;
$this->longOfOrigin = $longOfOrigin;
$this->latOfOrigin = $latOfOrigin;
$this->firstStdParallel = $firstStdParallel;
$this->secondStdParallel = $secondStdParallel;
}
 
//------------------------------------------------------------------------------
//
// Convert Longitude/Latitude to Lambert Conic Easting/Northing
//
// This routine will convert a Latitude/Longitude coordinate to an Northing/
// Easting coordinate on a Lambert Conic Projection. The configLambertProjection()
// function should have been called prior to this one to setup the specific
// parameters for the projection. The Northing/Easting parameters calculated are
// in meters (because the datum used is in meters) and are relative to the
// falseNorthing/falseEasting coordinate. Which in turn is relative to the
// Lat/Long of origin The formula were obtained from URL:
// http://www.ihsenergy.com/epsg/guid7_2.html.
// Code was written by Brenor Brophy, brenor dot brophy at gmail dot com
//
function convertLLtoLCC()
{
$e = sqrt($this->e2);
 
$phi = deg2rad($this->lat); // Latitude to convert
$phi1 = deg2rad($this->firstStdParallel); // Latitude of 1st std parallel
$phi2 = deg2rad($this->secondStdParallel); // Latitude of 2nd std parallel
$lamda = deg2rad($this->long); // Lonitude to convert
$phio = deg2rad($this->latOfOrigin); // Latitude of Origin
$lamdao = deg2rad($this->longOfOrigin); // Longitude of Origin
 
$m1 = cos($phi1) / sqrt(( 1 - $this->e2*sin($phi1)*sin($phi1)));
$m2 = cos($phi2) / sqrt(( 1 - $this->e2*sin($phi2)*sin($phi2)));
$t1 = tan((pi()/4)-($phi1/2)) / pow(( ( 1 - $e*sin($phi1) ) / ( 1 + $e*sin($phi1) )),$e/2);
$t2 = tan((pi()/4)-($phi2/2)) / pow(( ( 1 - $e*sin($phi2) ) / ( 1 + $e*sin($phi2) )),$e/2);
$to = tan((pi()/4)-($phio/2)) / pow(( ( 1 - $e*sin($phio) ) / ( 1 + $e*sin($phio) )),$e/2);
$t = tan((pi()/4)-($phi /2)) / pow(( ( 1 - $e*sin($phi ) ) / ( 1 + $e*sin($phi ) )),$e/2);
$n = (log($m1)-log($m2)) / (log($t1)-log($t2));
$F = $m1/($n*pow($t1,$n));
$rf = $this->a*$F*pow($to,$n);
$r = $this->a*$F*pow($t,$n);
$theta = $n*($lamda - $lamdao);
 
$this->lccEasting = $this->falseEasting + $r*sin($theta);
$this->lccNorthing = $this->falseNorthing + $rf - $r*cos($theta);
}
//------------------------------------------------------------------------------
//
// Convert Easting/Northing on a Lambert Conic projection to Longitude/Latitude
//
// This routine will convert a Lambert Northing/Easting coordinate to an
// Latitude/Longitude coordinate. The configLambertProjection() function should
// have been called prior to this one to setup the specific parameters for the
// projection. The Northing/Easting parameters are in meters (because the datum
// used is in meters) and are relative to the falseNorthing/falseEasting
// coordinate. Which in turn is relative to the Lat/Long of origin The formula
// were obtained from URL http://www.ihsenergy.com/epsg/guid7_2.html. Code
// was written by Brenor Brophy, brenor dot brophy at gmail dot com
//
function convertLCCtoLL()
{
$e = sqrt($this->e2);
 
$phi1 = deg2rad($this->firstStdParallel); // Latitude of 1st std parallel
$phi2 = deg2rad($this->secondStdParallel); // Latitude of 2nd std parallel
$phio = deg2rad($this->latOfOrigin); // Latitude of Origin
$lamdao = deg2rad($this->longOfOrigin); // Longitude of Origin
$E = $this->lccEasting;
$N = $this->lccNorthing;
$Ef = $this->falseEasting;
$Nf = $this->falseNorthing;
 
$m1 = cos($phi1) / sqrt(( 1 - $this->e2*sin($phi1)*sin($phi1)));
$m2 = cos($phi2) / sqrt(( 1 - $this->e2*sin($phi2)*sin($phi2)));
$t1 = tan((pi()/4)-($phi1/2)) / pow(( ( 1 - $e*sin($phi1) ) / ( 1 + $e*sin($phi1) )),$e/2);
$t2 = tan((pi()/4)-($phi2/2)) / pow(( ( 1 - $e*sin($phi2) ) / ( 1 + $e*sin($phi2) )),$e/2);
$to = tan((pi()/4)-($phio/2)) / pow(( ( 1 - $e*sin($phio) ) / ( 1 + $e*sin($phio) )),$e/2);
$n = (log($m1)-log($m2)) / (log($t1)-log($t2));
$F = $m1/($n*pow($t1,$n));
$rf = $this->a*$F*pow($to,$n);
$r_ = sqrt( pow(($E-$Ef),2) + pow(($rf-($N-$Nf)),2) );
$t_ = pow($r_/($this->a*$F),(1/$n));
$theta_ = atan(($E-$Ef)/($rf-($N-$Nf)));
 
$lamda = $theta_/$n + $lamdao;
$phi0 = (pi()/2) - 2*atan($t_);
$phi1 = (pi()/2) - 2*atan($t_*pow(((1-$e*sin($phi0))/(1+$e*sin($phi0))),$e/2));
$phi2 = (pi()/2) - 2*atan($t_*pow(((1-$e*sin($phi1))/(1+$e*sin($phi1))),$e/2));
$phi = (pi()/2) - 2*atan($t_*pow(((1-$e*sin($phi2))/(1+$e*sin($phi2))),$e/2));
$this->lat = rad2deg($phi);
$this->long = rad2deg($lamda);
}
 
//------------------------------------------------------------------------------
// This is a useful function that returns the Great Circle distance from the
// gPoint to another Long/Lat coordinate
//
// Result is returned as meters
//
function distanceFrom($lon1, $lat1)
{
$lon1 = deg2rad($lon1); $lat1 = deg2rad($lat1); // Added in 1.3
$lon2 = deg2rad($this->Long()); $lat2 = deg2rad($this->Lat());
$theta = $lon2 - $lon1;
$dist = acos(sin($lat1) * sin($lat2) + cos($lat1) * cos($lat2) * cos($theta));
 
// Alternative formula supposed to be more accurate for short distances
// $dist = 2*asin(sqrt( pow(sin(($lat1-$lat2)/2),2) + cos($lat1)*cos($lat2)*pow(sin(($lon1-$lon2)/2),2)));
return ( $dist * 6366710 ); // from http://williams.best.vwh.net/avform.htm#GCF
}
 
//------------------------------------------------------------------------------
// This function also calculates the distance between two points. In this case
// it just uses Pythagoras's theorm using TM coordinates.
//
function distanceFromTM(&$pt)
{
$E1 = $pt->E(); $N1 = $pt->N();
$E2 = $this->E(); $N2 = $this->N();
$dist = sqrt(pow(($E1-$E2),2)+pow(($N1-$N2),2));
return $dist;
}
 
//------------------------------------------------------------------------------
// This function geo-references a geoPoint to a given map. This means that it
// calculates the x,y pixel coordinate that coresponds to the Lat/Long value of
// the geoPoint. The calculation is done using the Transverse Mercator(TM)
// coordinates of the gPoint with respect to the TM coordinates of the center
// point of the map. So this only makes sense if you are using Local TM
// projection.
//
// $rX & $rY are the pixel coordinates that corespond to the Northing/Easting
// ($rE/$rN) coordinate it is to this coordinate that the point will be
// geo-referenced. The $LongOrigin is needed to make sure the Easting/Northing
// coordinates of the point are correctly converted.
//
function gRef($rX, $rY, $rE, $rN, $Scale, $LongOrigin)
{
$this->convertLLtoTM($LongOrigin);
$x = (($this->E() - $rE) / $Scale) // The easting in meters times the scale to get pixels
// is relative to the center of the image so adjust to
+ ($rX); // the left coordinate.
$y = $rY - // Adjust to bottom coordinate.
(($rN - $this->N()) / $Scale); // The northing in meters
// relative to the equator. Subtract center point northing
// to get relative to image center and convert meters to pixels
$this->setXY((int)$x,(int)$y); // Save the geo-referenced result.
}
} // end of class gPoint
 
?>
/trunk/applications/jrest/services
New file
Property changes:
Added: svn:ignore
+.directory
/trunk/applications/jrest
New file
Property changes:
Added: svn:ignore
+doc
+.directory
/trunk/applications/graphiques/evolution-evenements.php
New file
0,0 → 1,90
<?php
 
function mb_ucfirst($str) {
$fc = mb_strtoupper(mb_substr($str, 0, 1));
return $fc.mb_substr($str, 1);
}
 
$config = parse_ini_file('config.ini');
$url_jrest = $config['url_jrest'];
 
$url_infos_especes = $url_jrest.'OdsEspece/ToutesEspeces';
$especes = json_decode(file_get_contents($url_infos_especes), true);
 
$url_infos_stades = $url_jrest.'OdsEvenement/TousEvenements';
$stades = json_decode(file_get_contents($url_infos_stades), true);
 
$url_annee_min_obs = $url_jrest.'OdsObservation/AnneeMinimumObservation';
$annee_min_obs = json_decode(file_get_contents($url_annee_min_obs), true);
 
$stades_par_type_evenement = [];
foreach($stades as $id_stade => $stade) {
if(empty($stades_par_type_evenement[$stade['nom']])) {
$stades_par_type_evenement[$stade['nom']] = [];
}
$stades_par_type_evenement[$stade['nom']][] = $id_stade;
}
 
$espece_defaut = !empty($_GET['espece']) ? $_GET['espece'] : null;
$stades_defaut = !empty($_GET['stades']) ? $_GET['stades'] : 0;
?>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="Content-style-type" content="text/css" />
<meta http-equiv="Content-script-type" content="text/javascript" />
<meta http-equiv="Content-language" content="fr" />
 
<base href="<?= dirname($_SERVER['PHP_SELF'])."/"; ?>" />
 
<title>Graphiques</title>
 
<meta name="revisit-after" content="15 days" />
<meta name="robots" content="index,follow" />
<meta name="author" content="Tela Botanica" />
 
<script type="text/javascript" src="<?= dirname($_SERVER['PHP_SELF'])."/"; ?>js/jquery-3.2.1.min.js"></script>
<script type="text/javascript" src="<?= dirname($_SERVER['PHP_SELF'])."/"; ?>js/plotly.min.js"></script>
<script type="text/javascript" src="<?= dirname($_SERVER['PHP_SELF'])."/"; ?>js/evolution-evenements.js"></script>
<link href="<?= dirname($_SERVER['PHP_SELF'])."/"; ?>css/graphiques.css" type="text/css" rel="stylesheet" />
 
<script type="text/javascript">
var url_jrest = <?= json_encode($url_jrest, true) ?>;
var global_evenements = <?= json_encode($stades, true) ?>;
var annees_observations = <?= json_encode(range($annee_min_obs, date('Y')), true) ?>;
var espece_defaut = <?= json_encode($espece_defaut, true) ?>;
var stades_defaut = <?= json_encode($stades_defaut, true) ?>;
</script>
</head>
<body>
<div class="conteneur">
<div class="conteneur-criteres">
 
<div class="conteneur_selecteur_especes">
<select id="selecteur_liste_especes">
<option value="0" class="espece_type_0" <?= $espece_defaut == null ? 'selected="selected"' : '' ?>> Choisissez une espèce </option>
<?php foreach($especes as $id_espece => $infos_espece) : ?>
<option <?= $espece_defaut == $id_espece ? 'selected="selected"' : '' ?> data-id-evenements="[<?= $infos_espece['evenements'] ?>]" value="<?= $id_espece; ?>"><?= mb_ucfirst($infos_espece['nom_vernaculaire']); ?></option>
<?php endforeach; ?>
</select>
</div>
 
<div class="conteneur_selecteur_stades">
<select id="selecteur_stade" class="<?= $espece_defaut == null ? 'hide' : '' ?>">
<option data-evenements="[]" value="0" class="stade" <?= $stades_defaut == 0 ? 'selected="selected"' : '' ?>> Choisissez un évènement </option>
<?php foreach($stades_par_type_evenement as $nom_stade => $ids_stades) : ?>
<option <?= $stades_defaut == implode(',', $ids_stades) ? 'selected="selected"' : '' ?> data-evenements="[<?= implode(',', $ids_stades); ?>]" value="<?= implode(',', $ids_stades); ?>"><?= mb_ucfirst($nom_stade); ?></option>
<?php endforeach; ?>
</select>
</div>
 
 
</div>
<div class="aucune-donnee hide">Aucune donnée pour les critères demandés</div>
<div id="conteneur-graphique" class="conteneur-graphique"></div>
</div>
</body>
</html>
/trunk/applications/graphiques/config.ini
New file
0,0 → 1,0
url_jrest = "http://obs-saisons.dev/applications/jrest/"
/trunk/applications/graphiques/calendrier-evenements.php
New file
0,0 → 1,83
<?php
 
function mb_ucfirst($str) {
$fc = mb_strtoupper(mb_substr($str, 0, 1));
return $fc.mb_substr($str, 1);
}
 
$config = parse_ini_file('config.ini');
$url_jrest = $config['url_jrest'];
 
$url_infos_especes = $url_jrest.'OdsEspece/ToutesEspeces';
$especes = json_decode(file_get_contents($url_infos_especes), true);
 
$url_infos_stades = $url_jrest.'OdsEvenement/TousEvenements';
$stades = json_decode(file_get_contents($url_infos_stades), true);
 
$url_annee_min_obs = $url_jrest.'OdsObservation/AnneeMinimumObservation';
$annee_min_obs = json_decode(file_get_contents($url_annee_min_obs), true);
 
$annees_observations = range($annee_min_obs, date('Y'));
 
$espece_defaut = !empty($_GET['espece']) ? $_GET['espece'] : null;
$annee_defaut = !empty($_GET['annee']) ? $_GET['annee'] : 0;
?>
 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="Content-style-type" content="text/css" />
<meta http-equiv="Content-script-type" content="text/javascript" />
<meta http-equiv="Content-language" content="fr" />
 
<base href="<?= dirname($_SERVER['PHP_SELF'])."/"; ?>" />
 
<title>Graphiques</title>
 
<meta name="revisit-after" content="15 days" />
<meta name="robots" content="index,follow" />
<meta name="author" content="Tela Botanica" />
 
<script type="text/javascript" src="<?= dirname($_SERVER['PHP_SELF'])."/"; ?>js/jquery-3.2.1.min.js"></script>
<script type="text/javascript" src="<?= dirname($_SERVER['PHP_SELF'])."/"; ?>js/plotly.min.js"></script>
<script type="text/javascript" src="<?= dirname($_SERVER['PHP_SELF'])."/"; ?>js/calendrier-evenements.js"></script>
<link href="<?= dirname($_SERVER['PHP_SELF'])."/"; ?>css/graphiques.css" type="text/css" rel="stylesheet" />
 
<script type="text/javascript">
var url_jrest = <?= json_encode($url_jrest, true) ?>;
var global_evenements = <?= json_encode($stades, true) ?>;
var annees_observations = <?= json_encode($annees_observations, true) ?>;
var espece_defaut = <?= json_encode($espece_defaut, true) ?>;
var annee_defaut = <?= json_encode($annee_defaut, true) ?>;
</script>
</head>
<body>
<div class="conteneur">
<div class="conteneur-criteres">
 
<div class="conteneur_selecteur_especes">
<select id="selecteur_liste_especes">
<option value="0" class="espece_type_0" <?= $espece_defaut == null ? 'selected="selected"' : '' ?>> Choisissez une espèce </option>
<?php foreach($especes as $id_espece => $infos_espece) : ?>
<option <?= $espece_defaut == $id_espece ? 'selected="selected"' : '' ?> value="<?= $id_espece; ?>"><?= mb_ucfirst($infos_espece['nom_vernaculaire']); ?></option>
<?php endforeach; ?>
</select>
</div>
 
<div class="conteneur_selecteur_annees">
<select id="selecteur_annees">
<option data-evenements="[]" value="0" class="stade" <?= $annee_defaut == 0 ? 'selected="selected"' : '' ?>> Toutes les années </option>
<?php foreach($annees_observations as $annee_obs) : ?>
<option <?= $annee_defaut != 0 ? 'selected="selected"' : '' ?> value="<?= $annee_obs; ?>"><?= $annee_obs; ?></option>
<?php endforeach; ?>
</select>
</div>
</div>
 
<div class="aucune-donnee hide">Aucune donnée pour les critères demandés</div>
<div id="conteneur-graphique" class="conteneur-graphique calendrier-evenements"></div>
</div>
</body>
</html>
/trunk/applications/graphiques/css/graphiques.css
New file
0,0 → 1,25
.hide {
display: none !important;
}
 
.conteneur {
position: relative;
}
 
.conteneur-criteres > * {
display: inline-block;
margin-left: 5px;
margin-right: 5px;
}
 
.aucune-donnee {
position: absolute;
width: 90vw;
height: 90vh;
display: flex;
align-items: center;
justify-content: center;
color: #333;
font-weight: bold;
font-size: 1.3em;
}
/trunk/applications/graphiques/config.defaut.ini
New file
0,0 → 1,0
url_jrest = "http://www.obs-saisons.fr/applications/jrest/"
/trunk/applications/graphiques/js/plotly.min.js
New file
0,0 → 1,80
/**
* plotly.js v1.31.2
* Copyright 2012-2017, Plotly, Inc.
* All rights reserved.
* Licensed under the MIT license
*/
!function(t){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=t();else if("function"==typeof define&&define.amd)define([],t);else{var e;e="undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this,e.Plotly=t()}}(function(){var t;return function t(e,r,n){function i(o,s){if(!r[o]){if(!e[o]){var l="function"==typeof require&&require;if(!s&&l)return l(o,!0);if(a)return a(o,!0);var u=new Error("Cannot find module '"+o+"'");throw u.code="MODULE_NOT_FOUND",u}var c=r[o]={exports:{}};e[o][0].call(c.exports,function(t){var r=e[o][1][t];return i(r||t)},c,c.exports,t,e,r,n)}return r[o].exports}for(var a="function"==typeof require&&require,o=0;o<n.length;o++)i(n[o]);return i}({1:[function(t,e,r){"use strict";var n=t("../src/lib"),i={"X,X div":"font-family:'Open Sans', verdana, arial, sans-serif;margin:0;padding:0;","X input,X button":"font-family:'Open Sans', verdana, arial, sans-serif;","X input:focus,X button:focus":"outline:none;","X a":"text-decoration:none;","X a:hover":"text-decoration:none;","X .crisp":"shape-rendering:crispEdges;","X .user-select-none":"-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;","X svg":"overflow:hidden;","X svg a":"fill:#447adb;","X svg a:hover":"fill:#3c6dc5;","X .main-svg":"position:absolute;top:0;left:0;pointer-events:none;","X .main-svg .draglayer":"pointer-events:all;","X .cursor-default":"cursor:default;","X .cursor-pointer":"cursor:pointer;","X .cursor-crosshair":"cursor:crosshair;","X .cursor-move":"cursor:move;","X .cursor-col-resize":"cursor:col-resize;","X .cursor-row-resize":"cursor:row-resize;","X .cursor-ns-resize":"cursor:ns-resize;","X .cursor-ew-resize":"cursor:ew-resize;","X .cursor-sw-resize":"cursor:sw-resize;","X .cursor-s-resize":"cursor:s-resize;","X .cursor-se-resize":"cursor:se-resize;","X .cursor-w-resize":"cursor:w-resize;","X .cursor-e-resize":"cursor:e-resize;","X .cursor-nw-resize":"cursor:nw-resize;","X .cursor-n-resize":"cursor:n-resize;","X .cursor-ne-resize":"cursor:ne-resize;","X .modebar":"position:absolute;top:2px;right:2px;z-index:1001;background:rgba(255,255,255,0.7);","X .modebar--hover":"opacity:0;-webkit-transition:opacity 0.3s ease 0s;-moz-transition:opacity 0.3s ease 0s;-ms-transition:opacity 0.3s ease 0s;-o-transition:opacity 0.3s ease 0s;transition:opacity 0.3s ease 0s;","X:hover .modebar--hover":"opacity:1;","X .modebar-group":"float:left;display:inline-block;box-sizing:border-box;margin-left:8px;position:relative;vertical-align:middle;white-space:nowrap;","X .modebar-group:first-child":"margin-left:0px;","X .modebar-btn":"position:relative;font-size:16px;padding:3px 4px;cursor:pointer;line-height:normal;box-sizing:border-box;","X .modebar-btn svg":"position:relative;top:2px;","X .modebar-btn path":"fill:rgba(0,31,95,0.3);","X .modebar-btn.active path,X .modebar-btn:hover path":"fill:rgba(0,22,72,0.5);","X .modebar-btn.modebar-btn--logo":"padding:3px 1px;","X .modebar-btn.modebar-btn--logo path":"fill:#447adb !important;","X [data-title]:before,X [data-title]:after":"position:absolute;-webkit-transform:translate3d(0, 0, 0);-moz-transform:translate3d(0, 0, 0);-ms-transform:translate3d(0, 0, 0);-o-transform:translate3d(0, 0, 0);transform:translate3d(0, 0, 0);display:none;opacity:0;z-index:1001;pointer-events:none;top:110%;right:50%;","X [data-title]:hover:before,X [data-title]:hover:after":"display:block;opacity:1;","X [data-title]:before":"content:'';position:absolute;background:transparent;border:6px solid transparent;z-index:1002;margin-top:-12px;border-bottom-color:#69738a;margin-right:-6px;","X [data-title]:after":"content:attr(data-title);background:#69738a;color:white;padding:8px 10px;font-size:12px;line-height:12px;white-space:nowrap;margin-right:-18px;border-radius:2px;","X .select-outline":"fill:none;stroke-width:1;shape-rendering:crispEdges;","X .select-outline-1":"stroke:white;","X .select-outline-2":"stroke:black;stroke-dasharray:2px 2px;",Y:"font-family:'Open Sans';position:fixed;top:50px;right:20px;z-index:10000;font-size:10pt;max-width:180px;","Y p":"margin:0;","Y .notifier-note":"min-width:180px;max-width:250px;border:1px solid #fff;z-index:3000;margin:0;background-color:#8c97af;background-color:rgba(140,151,175,0.9);color:#fff;padding:10px;","Y .notifier-close":"color:#fff;opacity:0.8;float:right;padding:0 5px;background:none;border:none;font-size:20px;font-weight:bold;line-height:20px;","Y .notifier-close:hover":"color:#444;text-decoration:none;cursor:pointer;"};for(var a in i){var o=a.replace(/^,/," ,").replace(/X/g,".js-plotly-plot .plotly").replace(/Y/g,".plotly-notifier");n.addStyleRule(o,i[a])}},{"../src/lib":728}],2:[function(t,e,r){"use strict";e.exports={undo:{width:857.1,path:"m857 350q0-87-34-166t-91-137-137-92-166-34q-96 0-183 41t-147 114q-4 6-4 13t5 11l76 77q6 5 14 5 9-1 13-7 41-53 100-82t126-29q58 0 110 23t92 61 61 91 22 111-22 111-61 91-92 61-110 23q-55 0-105-20t-90-57l77-77q17-16 8-38-10-23-33-23h-250q-15 0-25 11t-11 25v250q0 24 22 33 22 10 39-8l72-72q60 57 137 88t159 31q87 0 166-34t137-92 91-137 34-166z",ascent:850,descent:-150},home:{width:928.6,path:"m786 296v-267q0-15-11-26t-25-10h-214v214h-143v-214h-214q-15 0-25 10t-11 26v267q0 1 0 2t0 2l321 264 321-264q1-1 1-4z m124 39l-34-41q-5-5-12-6h-2q-7 0-12 3l-386 322-386-322q-7-4-13-4-7 2-12 7l-35 41q-4 5-3 13t6 12l401 334q18 15 42 15t43-15l136-114v109q0 8 5 13t13 5h107q8 0 13-5t5-13v-227l122-102q5-5 6-12t-4-13z",ascent:850,descent:-150},"camera-retro":{width:1e3,path:"m518 386q0 8-5 13t-13 5q-37 0-63-27t-26-63q0-8 5-13t13-5 12 5 5 13q0 23 16 38t38 16q8 0 13 5t5 13z m125-73q0-59-42-101t-101-42-101 42-42 101 42 101 101 42 101-42 42-101z m-572-320h858v71h-858v-71z m643 320q0 89-62 152t-152 62-151-62-63-152 63-151 151-63 152 63 62 151z m-571 358h214v72h-214v-72z m-72-107h858v143h-462l-36-71h-360v-72z m929 143v-714q0-30-21-51t-50-21h-858q-29 0-50 21t-21 51v714q0 30 21 51t50 21h858q29 0 50-21t21-51z",ascent:850,descent:-150},zoombox:{width:1e3,path:"m1000-25l-250 251c40 63 63 138 63 218 0 224-182 406-407 406-224 0-406-182-406-406s183-406 407-406c80 0 155 22 218 62l250-250 125 125z m-812 250l0 438 437 0 0-438-437 0z m62 375l313 0 0-312-313 0 0 312z",ascent:850,descent:-150},pan:{width:1e3,path:"m1000 350l-187 188 0-125-250 0 0 250 125 0-188 187-187-187 125 0 0-250-250 0 0 125-188-188 186-187 0 125 252 0 0-250-125 0 187-188 188 188-125 0 0 250 250 0 0-126 187 188z",ascent:850,descent:-150},zoom_plus:{width:1e3,path:"m1 787l0-875 875 0 0 875-875 0z m687-500l-187 0 0-187-125 0 0 187-188 0 0 125 188 0 0 187 125 0 0-187 187 0 0-125z",ascent:850,descent:-150},zoom_minus:{width:1e3,path:"m0 788l0-876 875 0 0 876-875 0z m688-500l-500 0 0 125 500 0 0-125z",ascent:850,descent:-150},autoscale:{width:1e3,path:"m250 850l-187 0-63 0 0-62 0-188 63 0 0 188 187 0 0 62z m688 0l-188 0 0-62 188 0 0-188 62 0 0 188 0 62-62 0z m-875-938l0 188-63 0 0-188 0-62 63 0 187 0 0 62-187 0z m875 188l0-188-188 0 0-62 188 0 62 0 0 62 0 188-62 0z m-125 188l-1 0-93-94-156 156 156 156 92-93 2 0 0 250-250 0 0-2 93-92-156-156-156 156 94 92 0 2-250 0 0-250 0 0 93 93 157-156-157-156-93 94 0 0 0-250 250 0 0 0-94 93 156 157 156-157-93-93 0 0 250 0 0 250z",ascent:850,descent:-150},tooltip_basic:{width:1500,path:"m375 725l0 0-375-375 375-374 0-1 1125 0 0 750-1125 0z",ascent:850,descent:-150},tooltip_compare:{width:1125,path:"m187 786l0 2-187-188 188-187 0 0 937 0 0 373-938 0z m0-499l0 1-187-188 188-188 0 0 937 0 0 376-938-1z",ascent:850,descent:-150},plotlylogo:{width:1542,path:"m0-10h182v-140h-182v140z m228 146h183v-286h-183v286z m225 714h182v-1000h-182v1000z m225-285h182v-715h-182v715z m225 142h183v-857h-183v857z m231-428h182v-429h-182v429z m225-291h183v-138h-183v138z",ascent:850,descent:-150},"z-axis":{width:1e3,path:"m833 5l-17 108v41l-130-65 130-66c0 0 0 38 0 39 0-1 36-14 39-25 4-15-6-22-16-30-15-12-39-16-56-20-90-22-187-23-279-23-261 0-341 34-353 59 3 60 228 110 228 110-140-8-351-35-351-116 0-120 293-142 474-142 155 0 477 22 477 142 0 50-74 79-163 96z m-374 94c-58-5-99-21-99-40 0-24 65-43 144-43 79 0 143 19 143 43 0 19-42 34-98 40v216h87l-132 135-133-135h88v-216z m167 515h-136v1c16 16 31 34 46 52l84 109v54h-230v-71h124v-1c-16-17-28-32-44-51l-89-114v-51h245v72z",ascent:850,descent:-150},"3d_rotate":{width:1e3,path:"m922 660c-5 4-9 7-14 11-359 263-580-31-580-31l-102 28 58-400c0 1 1 1 2 2 118 108 351 249 351 249s-62 27-100 42c88 83 222 183 347 122 16-8 30-17 44-27-2 1-4 2-6 4z m36-329c0 0 64 229-88 296-62 27-124 14-175-11 157-78 225-208 249-266 8-19 11-31 11-31 2 5 6 15 11 32-5-13-8-20-8-20z m-775-239c70-31 117-50 198-32-121 80-199 346-199 346l-96-15-58-12c0 0 55-226 155-287z m603 133l-317-139c0 0 4-4 19-14 7-5 24-15 24-15s-177-147-389 4c235-287 536-112 536-112l31-22 100 299-4-1z m-298-153c6-4 14-9 24-15 0 0-17 10-24 15z",ascent:850,descent:-150},camera:{width:1e3,path:"m500 450c-83 0-150-67-150-150 0-83 67-150 150-150 83 0 150 67 150 150 0 83-67 150-150 150z m400 150h-120c-16 0-34 13-39 29l-31 93c-6 15-23 28-40 28h-340c-16 0-34-13-39-28l-31-94c-6-15-23-28-40-28h-120c-55 0-100-45-100-100v-450c0-55 45-100 100-100h800c55 0 100 45 100 100v450c0 55-45 100-100 100z m-400-550c-138 0-250 112-250 250 0 138 112 250 250 250 138 0 250-112 250-250 0-138-112-250-250-250z m365 380c-19 0-35 16-35 35 0 19 16 35 35 35 19 0 35-16 35-35 0-19-16-35-35-35z",ascent:850,descent:-150},movie:{width:1e3,path:"m938 413l-188-125c0 37-17 71-44 94 64 38 107 107 107 187 0 121-98 219-219 219-121 0-219-98-219-219 0-61 25-117 66-156h-115c30 33 49 76 49 125 0 103-84 187-187 187s-188-84-188-187c0-57 26-107 65-141-38-22-65-62-65-109v-250c0-70 56-126 125-126h500c69 0 125 56 125 126l188-126c34 0 62 28 62 63v375c0 35-28 63-62 63z m-750 0c-69 0-125 56-125 125s56 125 125 125 125-56 125-125-56-125-125-125z m406-1c-87 0-157 70-157 157 0 86 70 156 157 156s156-70 156-156-70-157-156-157z",ascent:850,descent:-150},question:{width:857.1,path:"m500 82v107q0 8-5 13t-13 5h-107q-8 0-13-5t-5-13v-107q0-8 5-13t13-5h107q8 0 13 5t5 13z m143 375q0 49-31 91t-77 65-95 23q-136 0-207-119-9-14 4-24l74-55q4-4 10-4 9 0 14 7 30 38 48 51 19 14 48 14 27 0 48-15t21-33q0-21-11-34t-38-25q-35-16-65-48t-29-70v-20q0-8 5-13t13-5h107q8 0 13 5t5 13q0 10 12 27t30 28q18 10 28 16t25 19 25 27 16 34 7 45z m214-107q0-117-57-215t-156-156-215-58-216 58-155 156-58 215 58 215 155 156 216 58 215-58 156-156 57-215z",ascent:850,descent:-150},disk:{width:857.1,path:"m214-7h429v214h-429v-214z m500 0h72v500q0 8-6 21t-11 20l-157 156q-5 6-19 12t-22 5v-232q0-22-15-38t-38-16h-322q-22 0-37 16t-16 38v232h-72v-714h72v232q0 22 16 38t37 16h465q22 0 38-16t15-38v-232z m-214 518v178q0 8-5 13t-13 5h-107q-7 0-13-5t-5-13v-178q0-8 5-13t13-5h107q7 0 13 5t5 13z m357-18v-518q0-22-15-38t-38-16h-750q-23 0-38 16t-16 38v750q0 22 16 38t38 16h517q23 0 50-12t42-26l156-157q16-15 27-42t11-49z",ascent:850,descent:-150},lasso:{width:1031,path:"m1018 538c-36 207-290 336-568 286-277-48-473-256-436-463 10-57 36-108 76-151-13-66 11-137 68-183 34-28 75-41 114-42l-55-70 0 0c-2-1-3-2-4-3-10-14-8-34 5-45 14-11 34-8 45 4 1 1 2 3 2 5l0 0 113 140c16 11 31 24 45 40 4 3 6 7 8 11 48-3 100 0 151 9 278 48 473 255 436 462z m-624-379c-80 14-149 48-197 96 42 42 109 47 156 9 33-26 47-66 41-105z m-187-74c-19 16-33 37-39 60 50-32 109-55 174-68-42-25-95-24-135 8z m360 75c-34-7-69-9-102-8 8 62-16 128-68 170-73 59-175 54-244-5-9 20-16 40-20 61-28 159 121 317 333 354s407-60 434-217c28-159-121-318-333-355z",ascent:850,descent:-150},selectbox:{width:1e3,path:"m0 850l0-143 143 0 0 143-143 0z m286 0l0-143 143 0 0 143-143 0z m285 0l0-143 143 0 0 143-143 0z m286 0l0-143 143 0 0 143-143 0z m-857-286l0-143 143 0 0 143-143 0z m857 0l0-143 143 0 0 143-143 0z m-857-285l0-143 143 0 0 143-143 0z m857 0l0-143 143 0 0 143-143 0z m-857-286l0-143 143 0 0 143-143 0z m286 0l0-143 143 0 0 143-143 0z m285 0l0-143 143 0 0 143-143 0z m286 0l0-143 143 0 0 143-143 0z",ascent:850,descent:-150},spikeline:{width:1e3,path:"M512 409c0-57-46-104-103-104-57 0-104 47-104 104 0 57 47 103 104 103 57 0 103-46 103-103z m-327-39l92 0 0 92-92 0z m-185 0l92 0 0 92-92 0z m370-186l92 0 0 93-92 0z m0-184l92 0 0 92-92 0z",ascent:850,descent:-150}}},{}],3:[function(t,e,r){"use strict";e.exports=t("../src/transforms/aggregate")},{"../src/transforms/aggregate":1114}],4:[function(t,e,r){"use strict";e.exports=t("../src/traces/bar")},{"../src/traces/bar":860}],5:[function(t,e,r){"use strict";e.exports=t("../src/traces/box")},{"../src/traces/box":873}],6:[function(t,e,r){"use strict";e.exports=t("../src/components/calendars")},{"../src/components/calendars":602}],7:[function(t,e,r){"use strict";e.exports=t("../src/traces/candlestick")},{"../src/traces/candlestick":881}],8:[function(t,e,r){"use strict";e.exports=t("../src/traces/carpet")},{"../src/traces/carpet":902}],9:[function(t,e,r){"use strict";e.exports=t("../src/traces/choropleth")},{"../src/traces/choropleth":917}],10:[function(t,e,r){"use strict";e.exports=t("../src/traces/contour")},{"../src/traces/contour":929}],11:[function(t,e,r){"use strict";e.exports=t("../src/traces/contourcarpet")},{"../src/traces/contourcarpet":944}],12:[function(t,e,r){"use strict";e.exports=t("../src/core")},{"../src/core":710}],13:[function(t,e,r){"use strict";e.exports=t("../src/transforms/filter")},{"../src/transforms/filter":1115}],14:[function(t,e,r){"use strict";e.exports=t("../src/transforms/groupby")},{"../src/transforms/groupby":1116}],15:[function(t,e,r){"use strict";e.exports=t("../src/traces/heatmap")},{"../src/traces/heatmap":957}],16:[function(t,e,r){"use strict";e.exports=t("../src/traces/heatmapgl")},{"../src/traces/heatmapgl":966}],17:[function(t,e,r){"use strict";e.exports=t("../src/traces/histogram")},{"../src/traces/histogram":974}],18:[function(t,e,r){"use strict";e.exports=t("../src/traces/histogram2d")},{"../src/traces/histogram2d":979}],19:[function(t,e,r){"use strict";e.exports=t("../src/traces/histogram2dcontour")},{"../src/traces/histogram2dcontour":983}],20:[function(t,e,r){"use strict";var n=t("./core");n.register([t("./bar"),t("./box"),t("./heatmap"),t("./histogram"),t("./histogram2d"),t("./histogram2dcontour"),t("./pie"),t("./contour"),t("./scatterternary"),t("./sankey"),t("./scatter3d"),t("./surface"),t("./mesh3d"),t("./scattergeo"),t("./choropleth"),t("./scattergl"),t("./pointcloud"),t("./heatmapgl"),t("./parcoords"),t("./table"),t("./scattermapbox"),t("./carpet"),t("./scattercarpet"),t("./contourcarpet"),t("./ohlc"),t("./candlestick")]),n.register([t("./aggregate"),t("./filter"),t("./groupby"),t("./sort")]),n.register([t("./calendars")]),e.exports=n},{"./aggregate":3,"./bar":4,"./box":5,"./calendars":6,"./candlestick":7,"./carpet":8,"./choropleth":9,"./contour":10,"./contourcarpet":11,"./core":12,"./filter":13,"./groupby":14,"./heatmap":15,"./heatmapgl":16,"./histogram":17,"./histogram2d":18,"./histogram2dcontour":19,"./mesh3d":21,"./ohlc":22,"./parcoords":23,"./pie":24,"./pointcloud":25,"./sankey":26,"./scatter3d":27,"./scattercarpet":28,"./scattergeo":29,"./scattergl":30,"./scattermapbox":31,"./scatterternary":32,"./sort":33,"./surface":34,"./table":35}],21:[function(t,e,r){"use strict";e.exports=t("../src/traces/mesh3d")},{"../src/traces/mesh3d":989}],22:[function(t,e,r){"use strict";e.exports=t("../src/traces/ohlc")},{"../src/traces/ohlc":994}],23:[function(t,e,r){"use strict";e.exports=t("../src/traces/parcoords")},{"../src/traces/parcoords":1003}],24:[function(t,e,r){"use strict";e.exports=t("../src/traces/pie")},{"../src/traces/pie":1012}],25:[function(t,e,r){"use strict";e.exports=t("../src/traces/pointcloud")},{"../src/traces/pointcloud":1021}],26:[function(t,e,r){"use strict";e.exports=t("../src/traces/sankey")},{"../src/traces/sankey":1027}],27:[function(t,e,r){"use strict";e.exports=t("../src/traces/scatter3d")},{"../src/traces/scatter3d":1060}],28:[function(t,e,r){"use strict";e.exports=t("../src/traces/scattercarpet")},{"../src/traces/scattercarpet":1065}],29:[function(t,e,r){"use strict";e.exports=t("../src/traces/scattergeo")},{"../src/traces/scattergeo":1074}],30:[function(t,e,r){"use strict";e.exports=t("../src/traces/scattergl")},{"../src/traces/scattergl":1081}],31:[function(t,e,r){"use strict";e.exports=t("../src/traces/scattermapbox")},{"../src/traces/scattermapbox":1088}],32:[function(t,e,r){"use strict";e.exports=t("../src/traces/scatterternary")},{"../src/traces/scatterternary":1095}],33:[function(t,e,r){"use strict";e.exports=t("../src/transforms/sort")},{"../src/transforms/sort":1117}],34:[function(t,e,r){"use strict";e.exports=t("../src/traces/surface")},{"../src/traces/surface":1104}],35:[function(t,e,r){"use strict";e.exports=t("../src/traces/table")},{"../src/traces/table":1112}],36:[function(t,e,r){"use strict";function n(t,e){function r(e,r,n,a){var o=1/t.clientHeight,s=o*(r-m),l=o*(n-g),c=p.flipX?1:-1,f=p.flipY?1:-1,d=Math.PI*p.rotateSpeed,y=i();if(1&e)a.shift?u.rotate(y,0,0,-s*d):u.rotate(y,c*d*s,-f*d*l,0);else if(2&e)u.pan(y,-p.translateSpeed*s*h,p.translateSpeed*l*h,0);else if(4&e){var b=p.zoomSpeed*l/window.innerHeight*(y-u.lastT())*50;u.pan(y,0,0,h*(Math.exp(b)-1))}m=r,g=n,v=a}t=t||document.body,e=e||{};var n=[.01,1/0];"distanceLimits"in e&&(n[0]=e.distanceLimits[0],n[1]=e.distanceLimits[1]),"zoomMin"in e&&(n[0]=e.zoomMin),"zoomMax"in e&&(n[1]=e.zoomMax);var u=a({center:e.center||[0,0,0],up:e.up||[0,1,0],eye:e.eye||[0,0,10],mode:e.mode||"orbit",distanceLimits:n}),c=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],h=0,f=t.clientWidth,d=t.clientHeight,p={view:u,element:t,delay:e.delay||16,rotateSpeed:e.rotateSpeed||1,zoomSpeed:e.zoomSpeed||1,translateSpeed:e.translateSpeed||1,flipX:!!e.flipX,flipY:!!e.flipY,modes:u.modes,tick:function(){var e=i(),r=this.delay;u.idle(e-r),u.flush(e-(100+2*r));var n=e-2*r;u.recalcMatrix(n);for(var a=!0,o=u.computedMatrix,s=0;s<16;++s)a=a&&c[s]===o[s],c[s]=o[s];var l=t.clientWidth===f&&t.clientHeight===d;return f=t.clientWidth,d=t.clientHeight,a?!l:(h=Math.exp(u.computedRadius[0]),!0)},lookAt:function(t,e,r){u.lookAt(u.lastT(),t,e,r)},rotate:function(t,e,r){u.rotate(u.lastT(),t,e,r)},pan:function(t,e,r){u.pan(u.lastT(),t,e,r)},translate:function(t,e,r){u.translate(u.lastT(),t,e,r)}};Object.defineProperties(p,{matrix:{get:function(){return u.computedMatrix},set:function(t){return u.setMatrix(u.lastT(),t),u.computedMatrix},enumerable:!0},mode:{get:function(){return u.getMode()},set:function(t){return u.setMode(t),u.getMode()},enumerable:!0},center:{get:function(){return u.computedCenter},set:function(t){return u.lookAt(u.lastT(),t),u.computedCenter},enumerable:!0},eye:{get:function(){return u.computedEye},set:function(t){return u.lookAt(u.lastT(),null,t),u.computedEye},enumerable:!0},up:{get:function(){return u.computedUp},set:function(t){return u.lookAt(u.lastT(),null,null,t),u.computedUp},enumerable:!0},distance:{get:function(){return h},set:function(t){return u.setDistance(u.lastT(),t),t},enumerable:!0},distanceLimits:{get:function(){return u.getDistanceLimits(n)},set:function(t){return u.setDistanceLimits(t),t},enumerable:!0}}),t.addEventListener("contextmenu",function(t){return t.preventDefault(),!1});var m=0,g=0,v={shift:!1,control:!1,alt:!1,meta:!1};return o(t,r),t.addEventListener("touchstart",function(e){var n=l(e.changedTouches[0],t);r(0,n[0],n[1],v),r(1,n[0],n[1],v)}),t.addEventListener("touchmove",function(e){var n=l(e.changedTouches[0],t);r(1,n[0],n[1],v)}),t.addEventListener("touchend",function(e){l(e.changedTouches[0],t);r(0,m,g,v)}),s(t,function(t,e,r){var n=p.flipX?1:-1,a=p.flipY?1:-1,o=i();if(Math.abs(t)>Math.abs(e))u.rotate(o,0,0,-t*n*Math.PI*p.rotateSpeed/window.innerWidth);else{var s=p.zoomSpeed*a*e/window.innerHeight*(o-u.lastT())/100;u.pan(o,0,0,h*(Math.exp(s)-1))}},!0),p}e.exports=n;var i=t("right-now"),a=t("3d-view"),o=t("mouse-change"),s=t("mouse-wheel"),l=t("mouse-event-offset")},{"3d-view":37,"mouse-change":452,"mouse-event-offset":453,"mouse-wheel":455,"right-now":502}],37:[function(t,e,r){"use strict";function n(t,e){this._controllerNames=Object.keys(t),this._controllerList=this._controllerNames.map(function(e){return t[e]}),this._mode=e,this._active=t[e],this._active||(this._mode="turntable",this._active=t.turntable),this.modes=this._controllerNames,this.computedMatrix=this._active.computedMatrix,this.computedEye=this._active.computedEye,this.computedUp=this._active.computedUp,this.computedCenter=this._active.computedCenter,this.computedRadius=this._active.computedRadius}function i(t){t=t||{};var e=t.eye||[0,0,1],r=t.center||[0,0,0],i=t.up||[0,1,0],l=t.distanceLimits||[0,1/0],u=t.mode||"turntable",c=a(),h=o(),f=s();return c.setDistanceLimits(l[0],l[1]),c.lookAt(0,e,r,i),h.setDistanceLimits(l[0],l[1]),h.lookAt(0,e,r,i),f.setDistanceLimits(l[0],l[1]),f.lookAt(0,e,r,i),new n({turntable:c,orbit:h,matrix:f},u)}e.exports=i;var a=t("turntable-camera-controller"),o=t("orbit-camera-controller"),s=t("matrix-camera-controller"),l=n.prototype;[["flush",1],["idle",1],["lookAt",4],["rotate",4],["pan",4],["translate",4],["setMatrix",2],["setDistanceLimits",2],["setDistance",2]].forEach(function(t){for(var e=t[0],r=[],n=0;n<t[1];++n)r.push("a"+n);var i="var cc=this._controllerList;for(var i=0;i<cc.length;++i){cc[i]."+t[0]+"("+r.join()+")}";l[e]=Function.apply(null,r.concat(i))}),l.recalcMatrix=function(t){this._active.recalcMatrix(t)},l.getDistance=function(t){return this._active.getDistance(t)},l.getDistanceLimits=function(t){return this._active.getDistanceLimits(t)},l.lastT=function(){return this._active.lastT()},l.setMode=function(t){if(t!==this._mode){var e=this._controllerNames.indexOf(t);if(!(e<0)){var r=this._active,n=this._controllerList[e],i=Math.max(r.lastT(),n.lastT());r.recalcMatrix(i),n.setMatrix(i,r.computedMatrix),this._active=n,this._mode=t,this.computedMatrix=this._active.computedMatrix,this.computedEye=this._active.computedEye,this.computedUp=this._active.computedUp,this.computedCenter=this._active.computedCenter,this.computedRadius=this._active.computedRadius}}},l.getMode=function(){return this._mode}},{"matrix-camera-controller":450,"orbit-camera-controller":473,"turntable-camera-controller":538}],38:[function(e,r,n){!function(i,a){"object"==typeof n&&void 0!==r?a(n,e("d3-array"),e("d3-collection"),e("d3-interpolate")):"function"==typeof t&&t.amd?t(["exports","d3-array","d3-collection","d3-interpolate"],a):a(i.d3=i.d3||{},i.d3,i.d3,i.d3)}(this,function(t,e,r,n){"use strict";var i=function(){function t(){g.forEach(function(t){t.sourceLinks=[],t.targetLinks=[]}),v.forEach(function(t,e){var r=t.source,n=t.target;"number"==typeof r&&(r=t.source=g[t.source]),"number"==typeof n&&(n=t.target=g[t.target]),t.originalIndex=e,r.sourceLinks.push(t),n.targetLinks.push(t)})}function i(){g.forEach(function(t){t.value=Math.max(e.sum(t.sourceLinks,h),e.sum(t.targetLinks,h))})}function a(){for(var t,e=g,r=0;e.length;)t=[],e.forEach(function(e){e.x=r,e.dx=d,e.sourceLinks.forEach(function(e){t.indexOf(e.target)<0&&t.push(e.target)})}),e=t,++r;o(r),s((m[0]-d)/(r-1))}function o(t){g.forEach(function(e){e.sourceLinks.length||(e.x=t-1)})}function s(t){g.forEach(function(e){e.x*=t})}function l(t){function n(){a.forEach(function(t){var e,r,n,a=0,o=t.length;for(t.sort(i),n=0;n<o;++n)e=t[n],r=a-e.y,r>0&&(e.y+=r),a=e.y+e.dy+p;if((r=a-p-m[1])>0)for(a=e.y-=r,n=o-2;n>=0;--n)e=t[n],r=e.y+e.dy+p-a,r>0&&(e.y-=r),a=e.y})}function i(t,e){return t.y-e.y}var a=r.nest().key(function(t){return t.x}).sortKeys(e.ascending).entries(g).map(function(t){return t.values});!function(){var t=e.min(a,function(t){return(m[1]-(t.length-1)*p)/e.sum(t,h)});a.forEach(function(e){e.forEach(function(e,r){e.y=r,e.dy=e.value*t})}),v.forEach(function(e){e.dy=e.value*t})}(),n();for(var o=1;t>0;--t)!function(t){function r(t){return c(t.target)*t.value}a.slice().reverse().forEach(function(n){n.forEach(function(n){if(n.sourceLinks.length){var i=e.sum(n.sourceLinks,r)/e.sum(n.sourceLinks,h);n.y+=(i-c(n))*t}})})}(o*=.99),n(),function(t){function r(t){return c(t.source)*t.value}a.forEach(function(n){n.forEach(function(n){if(n.targetLinks.length){var i=e.sum(n.targetLinks,r)/e.sum(n.targetLinks,h);n.y+=(i-c(n))*t}})})}(o),n()}function u(){function t(t,e){return t.source.y-e.source.y||t.originalIndex-e.originalIndex}function e(t,e){return t.target.y-e.target.y||t.originalIndex-e.originalIndex}g.forEach(function(r){r.sourceLinks.sort(e),r.targetLinks.sort(t)}),g.forEach(function(t){var e=0,r=0;t.sourceLinks.forEach(function(t){t.sy=e,e+=t.dy}),t.targetLinks.forEach(function(t){t.ty=r,r+=t.dy})})}function c(t){return t.y+t.dy/2}function h(t){return t.value}var f={},d=24,p=8,m=[1,1],g=[],v=[];return f.nodeWidth=function(t){return arguments.length?(d=+t,f):d},f.nodePadding=function(t){return arguments.length?(p=+t,f):p},f.nodes=function(t){return arguments.length?(g=t,f):g},f.links=function(t){return arguments.length?(v=t,f):v},f.size=function(t){return arguments.length?(m=t,f):m},f.layout=function(e){return t(),i(),a(),l(e),u(),f},f.relayout=function(){return u(),f},f.link=function(){function t(t){var r=t.source.x+t.source.dx,i=t.target.x,a=n.interpolateNumber(r,i),o=a(e),s=a(1-e),l=t.source.y+t.sy,u=l+t.dy,c=t.target.y+t.ty,h=c+t.dy;return"M"+r+","+l+"C"+o+","+l+" "+s+","+c+" "+i+","+c+"L"+i+","+h+"C"+s+","+h+" "+o+","+u+" "+r+","+u+"Z"}var e=.5;return t.curvature=function(r){return arguments.length?(e=+r,t):e},t},f};t.sankey=i,Object.defineProperty(t,"__esModule",{value:!0})})},{"d3-array":114,"d3-collection":115,"d3-interpolate":119}],39:[function(t,e,r){"use strict";function n(t){var e=s.get(t),r=e&&(e._triangleBuffer.handle||e._triangleBuffer.buffer);if(!r||!t.isBuffer(r)){var n=a(t,new Float32Array([-1,-1,-1,4,4,-1]));e=o(t,[{buffer:n,type:t.FLOAT,size:2}]),e._triangleBuffer=n,s.set(t,e)}e.bind(),t.drawArrays(t.TRIANGLES,0,3),e.unbind()}var i="undefined"==typeof WeakMap?t("weak-map"):WeakMap,a=t("gl-buffer"),o=t("gl-vao"),s=new i;e.exports=n},{"gl-buffer":156,"gl-vao":271,"weak-map":559}],40:[function(t,e,r){function n(t,e,r){e="number"==typeof e?e:1,r=r||": ";var n=t.split(/\r?\n/),a=String(n.length+e-1).length;return n.map(function(t,n){var o=n+e,s=String(o).length;return i(o,a-s)+r+t}).join("\n")}var i=t("pad-left");e.exports=n},{"pad-left":474}],41:[function(t,e,r){"use strict";function n(t,e){for(var r=new Array(e+1),n=0;n<t.length;++n)r[n]=t[n];for(var n=0;n<=t.length;++n){for(var i=t.length;i<=e;++i){for(var o=new Array(e),s=0;s<e;++s)o[s]=Math.pow(i+1-n,s);r[i]=o}if(a.apply(void 0,r))return!0}return!1}function i(t){var e=t.length;if(0===e)return[];if(1===e)return[0];for(var r=t[0].length,i=[t[0]],a=[0],o=1;o<e;++o)if(i.push(t[o]),n(i,r)){if(a.push(o),a.length===r+1)return a}else i.pop();return a}e.exports=i;var a=t("robust-orientation")},{"robust-orientation":508}],42:[function(t,e,r){"use strict";function n(t,e){return i(e).filter(function(r){for(var n=new Array(r.length),i=0;i<r.length;++i)n[i]=e[r[i]];return a(n)*t<1})}e.exports=n;var i=t("delaunay-triangulate"),a=t("circumradius")},{circumradius:87,"delaunay-triangulate":123}],43:[function(t,e,r){function n(t,e){return a(i(t,e))}e.exports=n;var i=t("alpha-complex"),a=t("simplicial-complex-boundary")},{"alpha-complex":42,"simplicial-complex-boundary":516}],44:[function(t,e,r){"use strict";function n(t,e){if(!t||null==t.length)throw Error("Argument should be an array");e=null==e?1:Math.floor(e);for(var r=Array(2*e),n=0;n<e;n++){for(var i=-1/0,a=1/0,o=n,s=t.length;o<s;o+=e)t[o]>i&&(i=t[o]),t[o]<a&&(a=t[o]);r[n]=a,r[e+n]=i}return r}e.exports=n},{}],45:[function(t,e,r){"use strict";function n(t,e,r){if(!t||null==t.length)throw Error("Argument should be an array");null==e&&(e=1),null==r&&(r=i(t,e));for(var n=0;n<e;n++){var a=r[e+n],o=r[n],s=n,l=t.length;if(a===1/0&&o===-1/0)for(s=n;s<l;s+=e)t[s]=t[s]===a?1:t[s]===o?0:.5;else if(a===1/0)for(s=n;s<l;s+=e)t[s]=t[s]===a?1:0;else if(o===-1/0)for(s=n;s<l;s+=e)t[s]=t[s]===o?0:1;else{var u=a-o;for(s=n;s<l;s+=e)t[s]=(t[s]-o)/u}}return t}var i=t("array-bounds");e.exports=n},{"array-bounds":44}],46:[function(t,e,r){"use strict";e.exports=function(){function t(t){return!Array.isArray(t)&&null!==t&&"object"==typeof t}function e(t,e,r){for(var n=(e-t)/Math.max(r-1,1),i=[],a=0;a<r;a++)i.push(t+a*n);return i}function r(){for(var t=[].slice.call(arguments),e=t.map(function(t){return t.length}),r=Math.min.apply(null,e),n=[],i=0;i<r;i++){n[i]=[];for(var a=0;a<t.length;++a)n[i][a]=t[a][i]}return n}function n(t,e,r){for(var n=Math.min.apply(null,[t.length,e.length,r.length]),i=[],a=0;a<n;a++)i.push([t[a],e[a],r[a]]);return i}function i(t){function e(t){for(var n=0;n<t.length;n++)Array.isArray(t[n])?e(t[n],r):r+=t[n]}var r=0;return e(t,r),r}function a(t){for(var e=[],r=0;r<t.length;++r){e[r]=[];for(var n=0;n<t[r].length;++n)e[r][n]=t[r][n]}return e}function o(t){for(var e=[],r=0;r<t.length;++r)e[r]=t[r];return e}function s(t,e){if(t.length!==e.length)return!1;for(var r=t.length;r--;)if(t[r]!==e[r])return!1;return!0}function l(t,e){var r,n;if("string"!=typeof t)return t;if(r=[],"#"===t[0]?(t=t.substr(1),3===t.length&&(t+=t),n=parseInt(t,16),r[0]=n>>16&255,r[1]=n>>8&255,r[2]=255&n):h.test(t)&&(n=t.match(f),r[0]=parseInt(n[1]),r[1]=parseInt(n[2]),r[2]=parseInt(n[3])),!e)for(var i=0;i<3;++i)r[i]=r[i]/255;return r}function u(t,e){var r,n;if("string"!=typeof t)return t;if(r=[],"#"===t[0]?(t=t.substr(1),3===t.length&&(t+=t),n=parseInt(t,16),r[0]=n>>16&255,r[1]=n>>8&255,r[2]=255&n):h.test(t)&&(n=t.match(f),r[0]=parseInt(n[1]),r[1]=parseInt(n[2]),r[2]=parseInt(n[3]),n[4]?r[3]=parseFloat(n[4]):r[3]=1),!e)for(var i=0;i<3;++i)r[i]=r[i]/255;return r}var c={},h=/^rgba?\(\s*\d{1,3}\s*,\s*\d{1,3}\s*,\s*\d{1,3}\s*(,.*)?\)$/,f=/^rgba?\(\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,\s*(\d{1,3})\s*,?\s*(.*)?\)$/;return c.isPlainObject=t,c.linspace=e,c.zip3=n,c.sum=i,c.zip=r,c.isEqual=s,c.copy2D=a,c.copy1D=o,c.str2RgbArray=l,c.str2RgbaArray=u,c}()},{}],47:[function(t,e,r){(function(r){"use strict";function n(t,e){if(t===e)return 0;for(var r=t.length,n=e.length,i=0,a=Math.min(r,n);i<a;++i)if(t[i]!==e[i]){r=t[i],n=e[i];break}return r<n?-1:n<r?1:0}function i(t){return r.Buffer&&"function"==typeof r.Buffer.isBuffer?r.Buffer.isBuffer(t):!(null==t||!t._isBuffer)}function a(t){return Object.prototype.toString.call(t)}function o(t){return!i(t)&&("function"==typeof r.ArrayBuffer&&("function"==typeof ArrayBuffer.isView?ArrayBuffer.isView(t):!!t&&(t instanceof DataView||!!(t.buffer&&t.buffer instanceof ArrayBuffer))))}function s(t){if(x.isFunction(t)){if(M)return t.name;var e=t.toString(),r=e.match(A);return r&&r[1]}}function l(t,e){return"string"==typeof t?t.length<e?t:t.slice(0,e):t}function u(t){if(M||!x.isFunction(t))return x.inspect(t);var e=s(t);return"[Function"+(e?": "+e:"")+"]"}function c(t){return l(u(t.actual),128)+" "+t.operator+" "+l(u(t.expected),128)}function h(t,e,r,n,i){throw new k.AssertionError({message:r,actual:t,expected:e,operator:n,stackStartFunction:i})}function f(t,e){t||h(t,!0,e,"==",k.ok)}function d(t,e,r,s){if(t===e)return!0;if(i(t)&&i(e))return 0===n(t,e);if(x.isDate(t)&&x.isDate(e))return t.getTime()===e.getTime();if(x.isRegExp(t)&&x.isRegExp(e))return t.source===e.source&&t.global===e.global&&t.multiline===e.multiline&&t.lastIndex===e.lastIndex&&t.ignoreCase===e.ignoreCase;if(null!==t&&"object"==typeof t||null!==e&&"object"==typeof e){if(o(t)&&o(e)&&a(t)===a(e)&&!(t instanceof Float32Array||t instanceof Float64Array))return 0===n(new Uint8Array(t.buffer),new Uint8Array(e.buffer));if(i(t)!==i(e))return!1;s=s||{actual:[],expected:[]};var l=s.actual.indexOf(t);return-1!==l&&l===s.expected.indexOf(e)||(s.actual.push(t),s.expected.push(e),m(t,e,r,s))}return r?t===e:t==e}function p(t){return"[object Arguments]"==Object.prototype.toString.call(t)}function m(t,e,r,n){if(null===t||void 0===t||null===e||void 0===e)return!1;if(x.isPrimitive(t)||x.isPrimitive(e))return t===e;if(r&&Object.getPrototypeOf(t)!==Object.getPrototypeOf(e))return!1;var i=p(t),a=p(e);if(i&&!a||!i&&a)return!1;if(i)return t=w.call(t),e=w.call(e),d(t,e,r);var o,s,l=T(t),u=T(e);if(l.length!==u.length)return!1;for(l.sort(),u.sort(),s=l.length-1;s>=0;s--)if(l[s]!==u[s])return!1;for(s=l.length-1;s>=0;s--)if(o=l[s],!d(t[o],e[o],r,n))return!1
;return!0}function g(t,e,r){d(t,e,!0)&&h(t,e,r,"notDeepStrictEqual",g)}function v(t,e){if(!t||!e)return!1;if("[object RegExp]"==Object.prototype.toString.call(e))return e.test(t);try{if(t instanceof e)return!0}catch(t){}return!Error.isPrototypeOf(e)&&!0===e.call({},t)}function y(t){var e;try{t()}catch(t){e=t}return e}function b(t,e,r,n){var i;if("function"!=typeof e)throw new TypeError('"block" argument must be a function');"string"==typeof r&&(n=r,r=null),i=y(e),n=(r&&r.name?" ("+r.name+").":".")+(n?" "+n:"."),t&&!i&&h(i,r,"Missing expected exception"+n);var a="string"==typeof n,o=!t&&x.isError(i),s=!t&&i&&!r;if((o&&a&&v(i,r)||s)&&h(i,r,"Got unwanted exception"+n),t&&i&&r&&!v(i,r)||!t&&i)throw i}var x=t("util/"),_=Object.prototype.hasOwnProperty,w=Array.prototype.slice,M=function(){return"foo"===function(){}.name}(),k=e.exports=f,A=/\s*function\s+([^\(\s]*)\s*/;k.AssertionError=function(t){this.name="AssertionError",this.actual=t.actual,this.expected=t.expected,this.operator=t.operator,t.message?(this.message=t.message,this.generatedMessage=!1):(this.message=c(this),this.generatedMessage=!0);var e=t.stackStartFunction||h;if(Error.captureStackTrace)Error.captureStackTrace(this,e);else{var r=new Error;if(r.stack){var n=r.stack,i=s(e),a=n.indexOf("\n"+i);if(a>=0){var o=n.indexOf("\n",a+1);n=n.substring(o+1)}this.stack=n}}},x.inherits(k.AssertionError,Error),k.fail=h,k.ok=f,k.equal=function(t,e,r){t!=e&&h(t,e,r,"==",k.equal)},k.notEqual=function(t,e,r){t==e&&h(t,e,r,"!=",k.notEqual)},k.deepEqual=function(t,e,r){d(t,e,!1)||h(t,e,r,"deepEqual",k.deepEqual)},k.deepStrictEqual=function(t,e,r){d(t,e,!0)||h(t,e,r,"deepStrictEqual",k.deepStrictEqual)},k.notDeepEqual=function(t,e,r){d(t,e,!1)&&h(t,e,r,"notDeepEqual",k.notDeepEqual)},k.notDeepStrictEqual=g,k.strictEqual=function(t,e,r){t!==e&&h(t,e,r,"===",k.strictEqual)},k.notStrictEqual=function(t,e,r){t===e&&h(t,e,r,"!==",k.notStrictEqual)},k.throws=function(t,e,r){b(!0,t,e,r)},k.doesNotThrow=function(t,e,r){b(!1,t,e,r)},k.ifError=function(t){if(t)throw t};var T=Object.keys||function(t){var e=[];for(var r in t)_.call(t,r)&&e.push(r);return e}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"util/":549}],48:[function(t,e,r){e.exports=function(t){return atob(t)}},{}],49:[function(t,e,r){"use strict";function n(t){for(var e=0,r=0;r<t.length;++r)e+=t[r];return e}function i(t,e){for(var r=e.length,i=new Array(r+1),o=0;o<r;++o){for(var s=new Array(r+1),l=0;l<=r;++l)s[l]=t[l][o];i[o]=s}i[r]=new Array(r+1);for(var o=0;o<=r;++o)i[r][o]=1;for(var u=new Array(r+1),o=0;o<r;++o)u[o]=e[o];u[r]=1;var c=a(i,u),h=n(c[r+1]);0===h&&(h=1);for(var f=new Array(r+1),o=0;o<=r;++o)f[o]=n(c[o])/h;return f}e.exports=i;var a=t("robust-linear-solve")},{"robust-linear-solve":507}],50:[function(t,e,r){"use strict";function n(t,e){return i(t[0].mul(e[1]).add(e[0].mul(t[1])),t[1].mul(e[1]))}var i=t("./lib/rationalize");e.exports=n},{"./lib/rationalize":60}],51:[function(t,e,r){"use strict";function n(t,e){return t[0].mul(e[1]).cmp(e[0].mul(t[1]))}e.exports=n},{}],52:[function(t,e,r){"use strict";function n(t,e){return i(t[0].mul(e[1]),t[1].mul(e[0]))}var i=t("./lib/rationalize");e.exports=n},{"./lib/rationalize":60}],53:[function(t,e,r){"use strict";function n(t,e){if(i(t))return e?u(t,n(e)):[t[0].clone(),t[1].clone()];var r,c,h=0;if(a(t))r=t.clone();else if("string"==typeof t)r=s(t);else{if(0===t)return[o(0),o(1)];if(t===Math.floor(t))r=o(t);else{for(;t!==Math.floor(t);)t*=Math.pow(2,256),h-=256;r=o(t)}}if(i(e))r.mul(e[1]),c=e[0].clone();else if(a(e))c=e.clone();else if("string"==typeof e)c=s(e);else if(e)if(e===Math.floor(e))c=o(e);else{for(;e!==Math.floor(e);)e*=Math.pow(2,256),h+=256;c=o(e)}else c=o(1);return h>0?r=r.ushln(h):h<0&&(c=c.ushln(-h)),l(r,c)}var i=t("./is-rat"),a=t("./lib/is-bn"),o=t("./lib/num-to-bn"),s=t("./lib/str-to-bn"),l=t("./lib/rationalize"),u=t("./div");e.exports=n},{"./div":52,"./is-rat":54,"./lib/is-bn":58,"./lib/num-to-bn":59,"./lib/rationalize":60,"./lib/str-to-bn":61}],54:[function(t,e,r){"use strict";function n(t){return Array.isArray(t)&&2===t.length&&i(t[0])&&i(t[1])}var i=t("./lib/is-bn");e.exports=n},{"./lib/is-bn":58}],55:[function(t,e,r){"use strict";function n(t){return t.cmp(new i(0))}var i=t("bn.js");e.exports=n},{"bn.js":68}],56:[function(t,e,r){"use strict";function n(t){var e=t.length,r=t.words,n=0;if(1===e)n=r[0];else if(2===e)n=r[0]+67108864*r[1];else for(var a=0;a<e;a++){var o=r[a];n+=o*Math.pow(67108864,a)}return i(t)*n}var i=t("./bn-sign");e.exports=n},{"./bn-sign":55}],57:[function(t,e,r){"use strict";function n(t){var e=a(i.lo(t));if(e<32)return e;var r=a(i.hi(t));return r>20?52:r+32}var i=t("double-bits"),a=t("bit-twiddle").countTrailingZeros;e.exports=n},{"bit-twiddle":67,"double-bits":124}],58:[function(t,e,r){"use strict";function n(t){return t&&"object"==typeof t&&Boolean(t.words)}t("bn.js");e.exports=n},{"bn.js":68}],59:[function(t,e,r){"use strict";function n(t){var e=a.exponent(t);return e<52?new i(t):new i(t*Math.pow(2,52-e)).ushln(e-52)}var i=t("bn.js"),a=t("double-bits");e.exports=n},{"bn.js":68,"double-bits":124}],60:[function(t,e,r){"use strict";function n(t,e){var r=a(t),n=a(e);if(0===r)return[i(0),i(1)];if(0===n)return[i(0),i(0)];n<0&&(t=t.neg(),e=e.neg());var o=t.gcd(e);return o.cmpn(1)?[t.div(o),e.div(o)]:[t,e]}var i=t("./num-to-bn"),a=t("./bn-sign");e.exports=n},{"./bn-sign":55,"./num-to-bn":59}],61:[function(t,e,r){"use strict";function n(t){return new i(t)}var i=t("bn.js");e.exports=n},{"bn.js":68}],62:[function(t,e,r){"use strict";function n(t,e){return i(t[0].mul(e[0]),t[1].mul(e[1]))}var i=t("./lib/rationalize");e.exports=n},{"./lib/rationalize":60}],63:[function(t,e,r){"use strict";function n(t){return i(t[0])*i(t[1])}var i=t("./lib/bn-sign");e.exports=n},{"./lib/bn-sign":55}],64:[function(t,e,r){"use strict";function n(t,e){return i(t[0].mul(e[1]).sub(t[1].mul(e[0])),t[1].mul(e[1]))}var i=t("./lib/rationalize");e.exports=n},{"./lib/rationalize":60}],65:[function(t,e,r){"use strict";function n(t){var e=t[0],r=t[1];if(0===e.cmpn(0))return 0;var n=e.abs().divmod(r.abs()),o=n.div,s=i(o),l=n.mod,u=e.negative!==r.negative?-1:1;if(0===l.cmpn(0))return u*s;if(s){var c=a(s)+4,h=i(l.ushln(c).divRound(r));return u*(s+h*Math.pow(2,-c))}var f=r.bitLength()-l.bitLength()+53,h=i(l.ushln(f).divRound(r));return f<1023?u*h*Math.pow(2,-f):(h*=Math.pow(2,-1023),u*h*Math.pow(2,1023-f))}var i=t("./lib/bn-to-num"),a=t("./lib/ctz");e.exports=n},{"./lib/bn-to-num":56,"./lib/ctz":57}],66:[function(t,e,r){"use strict";function n(t,e,r,n,i,a){var o=["function ",t,"(a,l,h,",n.join(","),"){",a?"":"var i=",r?"l-1":"h+1",";while(l<=h){var m=(l+h)>>>1,x=a",i?".get(m)":"[m]"];return a?e.indexOf("c")<0?o.push(";if(x===y){return m}else if(x<=y){"):o.push(";var p=c(x,y);if(p===0){return m}else if(p<=0){"):o.push(";if(",e,"){i=m;"),r?o.push("l=m+1}else{h=m-1}"):o.push("h=m-1}else{l=m+1}"),o.push("}"),a?o.push("return -1};"):o.push("return i};"),o.join("")}function i(t,e,r,i){return new Function([n("A","x"+t+"y",e,["y"],!1,i),n("B","x"+t+"y",e,["y"],!0,i),n("P","c(x,y)"+t+"0",e,["y","c"],!1,i),n("Q","c(x,y)"+t+"0",e,["y","c"],!0,i),"function dispatchBsearch",r,"(a,y,c,l,h){if(a.shape){if(typeof(c)==='function'){return Q(a,(l===undefined)?0:l|0,(h===undefined)?a.shape[0]-1:h|0,y,c)}else{return B(a,(c===undefined)?0:c|0,(l===undefined)?a.shape[0]-1:l|0,y)}}else{if(typeof(c)==='function'){return P(a,(l===undefined)?0:l|0,(h===undefined)?a.length-1:h|0,y,c)}else{return A(a,(c===undefined)?0:c|0,(l===undefined)?a.length-1:l|0,y)}}}return dispatchBsearch",r].join(""))()}e.exports={ge:i(">=",!1,"GE"),gt:i(">",!1,"GT"),lt:i("<",!0,"LT"),le:i("<=",!0,"LE"),eq:i("-",!0,"EQ",!0)}},{}],67:[function(t,e,r){"use strict";"use restrict";function n(t){var e=32;return t&=-t,t&&e--,65535&t&&(e-=16),16711935&t&&(e-=8),252645135&t&&(e-=4),858993459&t&&(e-=2),1431655765&t&&(e-=1),e}r.INT_BITS=32,r.INT_MAX=2147483647,r.INT_MIN=-1<<31,r.sign=function(t){return(t>0)-(t<0)},r.abs=function(t){var e=t>>31;return(t^e)-e},r.min=function(t,e){return e^(t^e)&-(t<e)},r.max=function(t,e){return t^(t^e)&-(t<e)},r.isPow2=function(t){return!(t&t-1||!t)},r.log2=function(t){var e,r;return e=(t>65535)<<4,t>>>=e,r=(t>255)<<3,t>>>=r,e|=r,r=(t>15)<<2,t>>>=r,e|=r,r=(t>3)<<1,t>>>=r,(e|=r)|t>>1},r.log10=function(t){return t>=1e9?9:t>=1e8?8:t>=1e7?7:t>=1e6?6:t>=1e5?5:t>=1e4?4:t>=1e3?3:t>=100?2:t>=10?1:0},r.popCount=function(t){return t-=t>>>1&1431655765,16843009*((t=(858993459&t)+(t>>>2&858993459))+(t>>>4)&252645135)>>>24},r.countTrailingZeros=n,r.nextPow2=function(t){return t+=0===t,--t,t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,(t|=t>>>16)+1},r.prevPow2=function(t){return t|=t>>>1,t|=t>>>2,t|=t>>>4,t|=t>>>8,(t|=t>>>16)-(t>>>1)},r.parity=function(t){return t^=t>>>16,t^=t>>>8,t^=t>>>4,27030>>>(t&=15)&1};var i=new Array(256);!function(t){for(var e=0;e<256;++e){var r=e,n=e,i=7;for(r>>>=1;r;r>>>=1)n<<=1,n|=1&r,--i;t[e]=n<<i&255}}(i),r.reverse=function(t){return i[255&t]<<24|i[t>>>8&255]<<16|i[t>>>16&255]<<8|i[t>>>24&255]},r.interleave2=function(t,e){return t&=65535,t=16711935&(t|t<<8),t=252645135&(t|t<<4),t=858993459&(t|t<<2),t=1431655765&(t|t<<1),e&=65535,e=16711935&(e|e<<8),e=252645135&(e|e<<4),e=858993459&(e|e<<2),e=1431655765&(e|e<<1),t|e<<1},r.deinterleave2=function(t,e){return t=t>>>e&1431655765,t=858993459&(t|t>>>1),t=252645135&(t|t>>>2),t=16711935&(t|t>>>4),(t=65535&(t|t>>>16))<<16>>16},r.interleave3=function(t,e,r){return t&=1023,t=4278190335&(t|t<<16),t=251719695&(t|t<<8),t=3272356035&(t|t<<4),t=1227133513&(t|t<<2),e&=1023,e=4278190335&(e|e<<16),e=251719695&(e|e<<8),e=3272356035&(e|e<<4),e=1227133513&(e|e<<2),t|=e<<1,r&=1023,r=4278190335&(r|r<<16),r=251719695&(r|r<<8),r=3272356035&(r|r<<4),r=1227133513&(r|r<<2),t|r<<2},r.deinterleave3=function(t,e){return t=t>>>e&1227133513,t=3272356035&(t|t>>>2),t=251719695&(t|t>>>4),t=4278190335&(t|t>>>8),(t=1023&(t|t>>>16))<<22>>22},r.nextCombination=function(t){var e=t|t-1;return e+1|(~e&-~e)-1>>>n(t)+1}},{}],68:[function(t,e,r){!function(e,r){"use strict";function n(t,e){if(!t)throw new Error(e||"Assertion failed")}function i(t,e){t.super_=e;var r=function(){};r.prototype=e.prototype,t.prototype=new r,t.prototype.constructor=t}function a(t,e,r){if(a.isBN(t))return t;this.negative=0,this.words=null,this.length=0,this.red=null,null!==t&&("le"!==e&&"be"!==e||(r=e,e=10),this._init(t||0,e||10,r||"be"))}function o(t,e,r){for(var n=0,i=Math.min(t.length,r),a=e;a<i;a++){var o=t.charCodeAt(a)-48;n<<=4,n|=o>=49&&o<=54?o-49+10:o>=17&&o<=22?o-17+10:15&o}return n}function s(t,e,r,n){for(var i=0,a=Math.min(t.length,r),o=e;o<a;o++){var s=t.charCodeAt(o)-48;i*=n,i+=s>=49?s-49+10:s>=17?s-17+10:s}return i}function l(t){for(var e=new Array(t.bitLength()),r=0;r<e.length;r++){var n=r/26|0,i=r%26;e[r]=(t.words[n]&1<<i)>>>i}return e}function u(t,e,r){r.negative=e.negative^t.negative;var n=t.length+e.length|0;r.length=n,n=n-1|0;var i=0|t.words[0],a=0|e.words[0],o=i*a,s=67108863&o,l=o/67108864|0;r.words[0]=s;for(var u=1;u<n;u++){for(var c=l>>>26,h=67108863&l,f=Math.min(u,e.length-1),d=Math.max(0,u-t.length+1);d<=f;d++){var p=u-d|0;i=0|t.words[p],a=0|e.words[d],o=i*a+h,c+=o/67108864|0,h=67108863&o}r.words[u]=0|h,l=0|c}return 0!==l?r.words[u]=0|l:r.length--,r.strip()}function c(t,e,r){r.negative=e.negative^t.negative,r.length=t.length+e.length;for(var n=0,i=0,a=0;a<r.length-1;a++){var o=i;i=0;for(var s=67108863&n,l=Math.min(a,e.length-1),u=Math.max(0,a-t.length+1);u<=l;u++){var c=a-u,h=0|t.words[c],f=0|e.words[u],d=h*f,p=67108863&d;o=o+(d/67108864|0)|0,p=p+s|0,s=67108863&p,o=o+(p>>>26)|0,i+=o>>>26,o&=67108863}r.words[a]=s,n=o,o=i}return 0!==n?r.words[a]=n:r.length--,r.strip()}function h(t,e,r){return(new f).mulp(t,e,r)}function f(t,e){this.x=t,this.y=e}function d(t,e){this.name=t,this.p=new a(e,16),this.n=this.p.bitLength(),this.k=new a(1).iushln(this.n).isub(this.p),this.tmp=this._tmp()}function p(){d.call(this,"k256","ffffffff ffffffff ffffffff ffffffff ffffffff ffffffff fffffffe fffffc2f")}function m(){d.call(this,"p224","ffffffff ffffffff ffffffff ffffffff 00000000 00000000 00000001")}function g(){d.call(this,"p192","ffffffff ffffffff ffffffff fffffffe ffffffff ffffffff")}function v(){d.call(this,"25519","7fffffffffffffff ffffffffffffffff ffffffffffffffff ffffffffffffffed")}function y(t){if("string"==typeof t){var e=a._prime(t);this.m=e.p,this.prime=e}else n(t.gtn(1),"modulus must be greater than 1"),this.m=t,this.prime=null}function b(t){y.call(this,t),this.shift=this.m.bitLength(),this.shift%26!=0&&(this.shift+=26-this.shift%26),this.r=new a(1).iushln(this.shift),this.r2=this.imod(this.r.sqr()),this.rinv=this.r._invmp(this.m),this.minv=this.rinv.mul(this.r).isubn(1).div(this.m),this.minv=this.minv.umod(this.r),this.minv=this.r.sub(this.minv)}"object"==typeof e?e.exports=a:r.BN=a,a.BN=a,a.wordSize=26;var x;try{x=t("buffer").Buffer}catch(t){}a.isBN=function(t){return t instanceof a||null!==t&&"object"==typeof t&&t.constructor.wordSize===a.wordSize&&Array.isArray(t.words)},a.max=function(t,e){return t.cmp(e)>0?t:e},a.min=function(t,e){return t.cmp(e)<0?t:e},a.prototype._init=function(t,e,r){if("number"==typeof t)return this._initNumber(t,e,r);if("object"==typeof t)return this._initArray(t,e,r);"hex"===e&&(e=16),n(e===(0|e)&&e>=2&&e<=36),t=t.toString().replace(/\s+/g,"");var i=0;"-"===t[0]&&i++,16===e?this._parseHex(t,i):this._parseBase(t,e,i),"-"===t[0]&&(this.negative=1),this.strip(),"le"===r&&this._initArray(this.toArray(),e,r)},a.prototype._initNumber=function(t,e,r){t<0&&(this.negative=1,t=-t),t<67108864?(this.words=[67108863&t],this.length=1):t<4503599627370496?(this.words=[67108863&t,t/67108864&67108863],this.length=2):(n(t<9007199254740992),this.words=[67108863&t,t/67108864&67108863,1],this.length=3),"le"===r&&this._initArray(this.toArray(),e,r)},a.prototype._initArray=function(t,e,r){if(n("number"==typeof t.length),t.length<=0)return this.words=[0],this.length=1,this;this.length=Math.ceil(t.length/3),this.words=new Array(this.length);for(var i=0;i<this.length;i++)this.words[i]=0;var a,o,s=0;if("be"===r)for(i=t.length-1,a=0;i>=0;i-=3)o=t[i]|t[i-1]<<8|t[i-2]<<16,this.words[a]|=o<<s&67108863,this.words[a+1]=o>>>26-s&67108863,(s+=24)>=26&&(s-=26,a++);else if("le"===r)for(i=0,a=0;i<t.length;i+=3)o=t[i]|t[i+1]<<8|t[i+2]<<16,this.words[a]|=o<<s&67108863,this.words[a+1]=o>>>26-s&67108863,(s+=24)>=26&&(s-=26,a++);return this.strip()},a.prototype._parseHex=function(t,e){this.length=Math.ceil((t.length-e)/6),this.words=new Array(this.length);for(var r=0;r<this.length;r++)this.words[r]=0;var n,i,a=0;for(r=t.length-6,n=0;r>=e;r-=6)i=o(t,r,r+6),this.words[n]|=i<<a&67108863,this.words[n+1]|=i>>>26-a&4194303,(a+=24)>=26&&(a-=26,n++);r+6!==e&&(i=o(t,e,r+6),this.words[n]|=i<<a&67108863,this.words[n+1]|=i>>>26-a&4194303),this.strip()},a.prototype._parseBase=function(t,e,r){this.words=[0],this.length=1;for(var n=0,i=1;i<=67108863;i*=e)n++;n--,i=i/e|0;for(var a=t.length-r,o=a%n,l=Math.min(a,a-o)+r,u=0,c=r;c<l;c+=n)u=s(t,c,c+n,e),this.imuln(i),this.words[0]+u<67108864?this.words[0]+=u:this._iaddn(u);if(0!==o){var h=1;for(u=s(t,c,t.length,e),c=0;c<o;c++)h*=e;this.imuln(h),this.words[0]+u<67108864?this.words[0]+=u:this._iaddn(u)}},a.prototype.copy=function(t){t.words=new Array(this.length);for(var e=0;e<this.length;e++)t.words[e]=this.words[e];t.length=this.length,t.negative=this.negative,t.red=this.red},a.prototype.clone=function(){var t=new a(null);return this.copy(t),t},a.prototype._expand=function(t){for(;this.length<t;)this.words[this.length++]=0;return this},a.prototype.strip=function(){for(;this.length>1&&0===this.words[this.length-1];)this.length--;return this._normSign()},a.prototype._normSign=function(){return 1===this.length&&0===this.words[0]&&(this.negative=0),this},a.prototype.inspect=function(){return(this.red?"<BN-R: ":"<BN: ")+this.toString(16)+">"};var _=["","0","00","000","0000","00000","000000","0000000","00000000","000000000","0000000000","00000000000","000000000000","0000000000000","00000000000000","000000000000000","0000000000000000","00000000000000000","000000000000000000","0000000000000000000","00000000000000000000","000000000000000000000","0000000000000000000000","00000000000000000000000","000000000000000000000000","0000000000000000000000000"],w=[0,0,25,16,12,11,10,9,8,8,7,7,7,7,6,6,6,6,6,6,6,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5],M=[0,0,33554432,43046721,16777216,48828125,60466176,40353607,16777216,43046721,1e7,19487171,35831808,62748517,7529536,11390625,16777216,24137569,34012224,47045881,64e6,4084101,5153632,6436343,7962624,9765625,11881376,14348907,17210368,20511149,243e5,28629151,33554432,39135393,45435424,52521875,60466176];a.prototype.toString=function(t,e){t=t||10,e=0|e||1;var r;if(16===t||"hex"===t){r="";for(var i=0,a=0,o=0;o<this.length;o++){var s=this.words[o],l=(16777215&(s<<i|a)).toString(16);a=s>>>24-i&16777215,r=0!==a||o!==this.length-1?_[6-l.length]+l+r:l+r,i+=2,i>=26&&(i-=26,o--)}for(0!==a&&(r=a.toString(16)+r);r.length%e!=0;)r="0"+r;return 0!==this.negative&&(r="-"+r),r}if(t===(0|t)&&t>=2&&t<=36){var u=w[t],c=M[t];r="";var h=this.clone();for(h.negative=0;!h.isZero();){var f=h.modn(c).toString(t);h=h.idivn(c),r=h.isZero()?f+r:_[u-f.length]+f+r}for(this.isZero()&&(r="0"+r);r.length%e!=0;)r="0"+r;return 0!==this.negative&&(r="-"+r),r}n(!1,"Base should be between 2 and 36")},a.prototype.toNumber=function(){var t=this.words[0];return 2===this.length?t+=67108864*this.words[1]:3===this.length&&1===this.words[2]?t+=4503599627370496+67108864*this.words[1]:this.length>2&&n(!1,"Number can only safely store up to 53 bits"),0!==this.negative?-t:t},a.prototype.toJSON=function(){return this.toString(16)},a.prototype.toBuffer=function(t,e){return n(void 0!==x),this.toArrayLike(x,t,e)},a.prototype.toArray=function(t,e){return this.toArrayLike(Array,t,e)},a.prototype.toArrayLike=function(t,e,r){var i=this.byteLength(),a=r||Math.max(1,i);n(i<=a,"byte array longer than desired length"),n(a>0,"Requested array length <= 0"),this.strip();var o,s,l="le"===e,u=new t(a),c=this.clone();if(l){for(s=0;!c.isZero();s++)o=c.andln(255),c.iushrn(8),u[s]=o;for(;s<a;s++)u[s]=0}else{for(s=0;s<a-i;s++)u[s]=0;for(s=0;!c.isZero();s++)o=c.andln(255),c.iushrn(8),u[a-s-1]=o}return u},Math.clz32?a.prototype._countBits=function(t){return 32-Math.clz32(t)}:a.prototype._countBits=function(t){var e=t,r=0;return e>=4096&&(r+=13,e>>>=13),e>=64&&(r+=7,e>>>=7),e>=8&&(r+=4,e>>>=4),e>=2&&(r+=2,e>>>=2),r+e},a.prototype._zeroBits=function(t){if(0===t)return 26;var e=t,r=0;return 0==(8191&e)&&(r+=13,e>>>=13),0==(127&e)&&(r+=7,e>>>=7),0==(15&e)&&(r+=4,e>>>=4),0==(3&e)&&(r+=2,e>>>=2),0==(1&e)&&r++,r},a.prototype.bitLength=function(){var t=this.words[this.length-1],e=this._countBits(t);return 26*(this.length-1)+e},a.prototype.zeroBits=function(){if(this.isZero())return 0;for(var t=0,e=0;e<this.length;e++){var r=this._zeroBits(this.words[e]);if(t+=r,26!==r)break}return t},a.prototype.byteLength=function(){return Math.ceil(this.bitLength()/8)},a.prototype.toTwos=function(t){return 0!==this.negative?this.abs().inotn(t).iaddn(1):this.clone()},a.prototype.fromTwos=function(t){return this.testn(t-1)?this.notn(t).iaddn(1).ineg():this.clone()},a.prototype.isNeg=function(){return 0!==this.negative},a.prototype.neg=function(){return this.clone().ineg()},a.prototype.ineg=function(){return this.isZero()||(this.negative^=1),this},a.prototype.iuor=function(t){for(;this.length<t.length;)this.words[this.length++]=0;for(var e=0;e<t.length;e++)this.words[e]=this.words[e]|t.words[e];return this.strip()},a.prototype.ior=function(t){return n(0==(this.negative|t.negative)),this.iuor(t)},a.prototype.or=function(t){return this.length>t.length?this.clone().ior(t):t.clone().ior(this)},a.prototype.uor=function(t){return this.length>t.length?this.clone().iuor(t):t.clone().iuor(this)},a.prototype.iuand=function(t){var e;e=this.length>t.length?t:this;for(var r=0;r<e.length;r++)this.words[r]=this.words[r]&t.words[r];return this.length=e.length,this.strip()},a.prototype.iand=function(t){return n(0==(this.negative|t.negative)),this.iuand(t)},a.prototype.and=function(t){return this.length>t.length?this.clone().iand(t):t.clone().iand(this)},a.prototype.uand=function(t){return this.length>t.length?this.clone().iuand(t):t.clone().iuand(this)},a.prototype.iuxor=function(t){var e,r;this.length>t.length?(e=this,r=t):(e=t,r=this);for(var n=0;n<r.length;n++)this.words[n]=e.words[n]^r.words[n];if(this!==e)for(;n<e.length;n++)this.words[n]=e.words[n];return this.length=e.length,this.strip()},a.prototype.ixor=function(t){return n(0==(this.negative|t.negative)),this.iuxor(t)},a.prototype.xor=function(t){return this.length>t.length?this.clone().ixor(t):t.clone().ixor(this)},a.prototype.uxor=function(t){return this.length>t.length?this.clone().iuxor(t):t.clone().iuxor(this)},a.prototype.inotn=function(t){n("number"==typeof t&&t>=0);var e=0|Math.ceil(t/26),r=t%26;this._expand(e),r>0&&e--;for(var i=0;i<e;i++)this.words[i]=67108863&~this.words[i];return r>0&&(this.words[i]=~this.words[i]&67108863>>26-r),this.strip()},a.prototype.notn=function(t){return this.clone().inotn(t)},a.prototype.setn=function(t,e){n("number"==typeof t&&t>=0);var r=t/26|0,i=t%26;return this._expand(r+1),this.words[r]=e?this.words[r]|1<<i:this.words[r]&~(1<<i),this.strip()},a.prototype.iadd=function(t){var e;if(0!==this.negative&&0===t.negative)return this.negative=0,e=this.isub(t),this.negative^=1,this._normSign();if(0===this.negative&&0!==t.negative)return t.negative=0,e=this.isub(t),t.negative=1,e._normSign();var r,n;this.length>t.length?(r=this,n=t):(r=t,n=this);for(var i=0,a=0;a<n.length;a++)e=(0|r.words[a])+(0|n.words[a])+i,this.words[a]=67108863&e,i=e>>>26;for(;0!==i&&a<r.length;a++)e=(0|r.words[a])+i,this.words[a]=67108863&e,i=e>>>26;if(this.length=r.length,0!==i)this.words[this.length]=i,this.length++;else if(r!==this)for(;a<r.length;a++)this.words[a]=r.words[a];return this},a.prototype.add=function(t){var e;return 0!==t.negative&&0===this.negative?(t.negative=0,e=this.sub(t),t.negative^=1,e):0===t.negative&&0!==this.negative?(this.negative=0,e=t.sub(this),this.negative=1,e):this.length>t.length?this.clone().iadd(t):t.clone().iadd(this)},a.prototype.isub=function(t){if(0!==t.negative){t.negative=0;var e=this.iadd(t);return t.negative=1,e._normSign()}if(0!==this.negative)return this.negative=0,this.iadd(t),this.negative=1,this._normSign();var r=this.cmp(t);if(0===r)return this.negative=0,this.length=1,this.words[0]=0,this;var n,i;r>0?(n=this,i=t):(n=t,i=this);for(var a=0,o=0;o<i.length;o++)e=(0|n.words[o])-(0|i.words[o])+a,a=e>>26,this.words[o]=67108863&e;for(;0!==a&&o<n.length;o++)e=(0|n.words[o])+a,a=e>>26,this.words[o]=67108863&e;if(0===a&&o<n.length&&n!==this)for(;o<n.length;o++)this.words[o]=n.words[o];return this.length=Math.max(this.length,o),n!==this&&(this.negative=1),this.strip()},a.prototype.sub=function(t){return this.clone().isub(t)};var k=function(t,e,r){var n,i,a,o=t.words,s=e.words,l=r.words,u=0,c=0|o[0],h=8191&c,f=c>>>13,d=0|o[1],p=8191&d,m=d>>>13,g=0|o[2],v=8191&g,y=g>>>13,b=0|o[3],x=8191&b,_=b>>>13,w=0|o[4],M=8191&w,k=w>>>13,A=0|o[5],T=8191&A,S=A>>>13,E=0|o[6],L=8191&E,C=E>>>13,I=0|o[7],z=8191&I,D=I>>>13,P=0|o[8],O=8191&P,R=P>>>13,F=0|o[9],j=8191&F,N=F>>>13,B=0|s[0],U=8191&B,V=B>>>13,H=0|s[1],q=8191&H,G=H>>>13,Y=0|s[2],W=8191&Y,X=Y>>>13,Z=0|s[3],J=8191&Z,K=Z>>>13,Q=0|s[4],$=8191&Q,tt=Q>>>13,et=0|s[5],rt=8191&et,nt=et>>>13,it=0|s[6],at=8191&it,ot=it>>>13,st=0|s[7],lt=8191&st,ut=st>>>13,ct=0|s[8],ht=8191&ct,ft=ct>>>13,dt=0|s[9],pt=8191&dt,mt=dt>>>13;r.negative=t.negative^e.negative,r.length=19,n=Math.imul(h,U),i=Math.imul(h,V),i=i+Math.imul(f,U)|0,a=Math.imul(f,V);var gt=(u+n|0)+((8191&i)<<13)|0;u=(a+(i>>>13)|0)+(gt>>>26)|0,gt&=67108863,n=Math.imul(p,U),i=Math.imul(p,V),i=i+Math.imul(m,U)|0,a=Math.imul(m,V),n=n+Math.imul(h,q)|0,i=i+Math.imul(h,G)|0,i=i+Math.imul(f,q)|0,a=a+Math.imul(f,G)|0;var vt=(u+n|0)+((8191&i)<<13)|0;u=(a+(i>>>13)|0)+(vt>>>26)|0,vt&=67108863,n=Math.imul(v,U),i=Math.imul(v,V),i=i+Math.imul(y,U)|0,a=Math.imul(y,V),n=n+Math.imul(p,q)|0,i=i+Math.imul(p,G)|0,i=i+Math.imul(m,q)|0,a=a+Math.imul(m,G)|0,n=n+Math.imul(h,W)|0,i=i+Math.imul(h,X)|0,i=i+Math.imul(f,W)|0,a=a+Math.imul(f,X)|0;var yt=(u+n|0)+((8191&i)<<13)|0;u=(a+(i>>>13)|0)+(yt>>>26)|0,yt&=67108863,n=Math.imul(x,U),i=Math.imul(x,V),i=i+Math.imul(_,U)|0,a=Math.imul(_,V),n=n+Math.imul(v,q)|0,i=i+Math.imul(v,G)|0,i=i+Math.imul(y,q)|0,a=a+Math.imul(y,G)|0,n=n+Math.imul(p,W)|0,i=i+Math.imul(p,X)|0,i=i+Math.imul(m,W)|0,a=a+Math.imul(m,X)|0,n=n+Math.imul(h,J)|0,i=i+Math.imul(h,K)|0,i=i+Math.imul(f,J)|0,a=a+Math.imul(f,K)|0;var bt=(u+n|0)+((8191&i)<<13)|0;u=(a+(i>>>13)|0)+(bt>>>26)|0,bt&=67108863,n=Math.imul(M,U),i=Math.imul(M,V),i=i+Math.imul(k,U)|0,a=Math.imul(k,V),n=n+Math.imul(x,q)|0,i=i+Math.imul(x,G)|0,i=i+Math.imul(_,q)|0,a=a+Math.imul(_,G)|0,n=n+Math.imul(v,W)|0,i=i+Math.imul(v,X)|0,i=i+Math.imul(y,W)|0,a=a+Math.imul(y,X)|0,n=n+Math.imul(p,J)|0,i=i+Math.imul(p,K)|0,i=i+Math.imul(m,J)|0,a=a+Math.imul(m,K)|0,n=n+Math.imul(h,$)|0,i=i+Math.imul(h,tt)|0,i=i+Math.imul(f,$)|0,a=a+Math.imul(f,tt)|0;var xt=(u+n|0)+((8191&i)<<13)|0;u=(a+(i>>>13)|0)+(xt>>>26)|0,xt&=67108863,n=Math.imul(T,U),i=Math.imul(T,V),i=i+Math.imul(S,U)|0,a=Math.imul(S,V),n=n+Math.imul(M,q)|0,i=i+Math.imul(M,G)|0,i=i+Math.imul(k,q)|0,a=a+Math.imul(k,G)|0,n=n+Math.imul(x,W)|0,i=i+Math.imul(x,X)|0,i=i+Math.imul(_,W)|0,a=a+Math.imul(_,X)|0,n=n+Math.imul(v,J)|0,i=i+Math.imul(v,K)|0,i=i+Math.imul(y,J)|0,a=a+Math.imul(y,K)|0,n=n+Math.imul(p,$)|0,i=i+Math.imul(p,tt)|0,i=i+Math.imul(m,$)|0,a=a+Math.imul(m,tt)|0,n=n+Math.imul(h,rt)|0,i=i+Math.imul(h,nt)|0,i=i+Math.imul(f,rt)|0,a=a+Math.imul(f,nt)|0;var _t=(u+n|0)+((8191&i)<<13)|0;u=(a+(i>>>13)|0)+(_t>>>26)|0,_t&=67108863,n=Math.imul(L,U),i=Math.imul(L,V),i=i+Math.imul(C,U)|0,a=Math.imul(C,V),n=n+Math.imul(T,q)|0,i=i+Math.imul(T,G)|0,i=i+Math.imul(S,q)|0,a=a+Math.imul(S,G)|0,n=n+Math.imul(M,W)|0,i=i+Math.imul(M,X)|0,i=i+Math.imul(k,W)|0,a=a+Math.imul(k,X)|0,n=n+Math.imul(x,J)|0,i=i+Math.imul(x,K)|0,i=i+Math.imul(_,J)|0,a=a+Math.imul(_,K)|0,n=n+Math.imul(v,$)|0,i=i+Math.imul(v,tt)|0,i=i+Math.imul(y,$)|0,a=a+Math.imul(y,tt)|0,n=n+Math.imul(p,rt)|0,i=i+Math.imul(p,nt)|0,i=i+Math.imul(m,rt)|0,a=a+Math.imul(m,nt)|0,n=n+Math.imul(h,at)|0,i=i+Math.imul(h,ot)|0,i=i+Math.imul(f,at)|0,a=a+Math.imul(f,ot)|0;var wt=(u+n|0)+((8191&i)<<13)|0;u=(a+(i>>>13)|0)+(wt>>>26)|0,wt&=67108863,n=Math.imul(z,U),i=Math.imul(z,V),i=i+Math.imul(D,U)|0,a=Math.imul(D,V),n=n+Math.imul(L,q)|0,i=i+Math.imul(L,G)|0,i=i+Math.imul(C,q)|0,a=a+Math.imul(C,G)|0,n=n+Math.imul(T,W)|0,i=i+Math.imul(T,X)|0,i=i+Math.imul(S,W)|0,a=a+Math.imul(S,X)|0,n=n+Math.imul(M,J)|0,i=i+Math.imul(M,K)|0,i=i+Math.imul(k,J)|0,a=a+Math.imul(k,K)|0,n=n+Math.imul(x,$)|0,i=i+Math.imul(x,tt)|0,i=i+Math.imul(_,$)|0,a=a+Math.imul(_,tt)|0,n=n+Math.imul(v,rt)|0,i=i+Math.imul(v,nt)|0,i=i+Math.imul(y,rt)|0,a=a+Math.imul(y,nt)|0,n=n+Math.imul(p,at)|0,i=i+Math.imul(p,ot)|0,i=i+Math.imul(m,at)|0,a=a+Math.imul(m,ot)|0,n=n+Math.imul(h,lt)|0,i=i+Math.imul(h,ut)|0,i=i+Math.imul(f,lt)|0,a=a+Math.imul(f,ut)|0;var Mt=(u+n|0)+((8191&i)<<13)|0;u=(a+(i>>>13)|0)+(Mt>>>26)|0,Mt&=67108863,n=Math.imul(O,U),i=Math.imul(O,V),i=i+Math.imul(R,U)|0,a=Math.imul(R,V),n=n+Math.imul(z,q)|0,i=i+Math.imul(z,G)|0,i=i+Math.imul(D,q)|0,a=a+Math.imul(D,G)|0,n=n+Math.imul(L,W)|0,i=i+Math.imul(L,X)|0,i=i+Math.imul(C,W)|0,a=a+Math.imul(C,X)|0,n=n+Math.imul(T,J)|0,i=i+Math.imul(T,K)|0,i=i+Math.imul(S,J)|0,a=a+Math.imul(S,K)|0,n=n+Math.imul(M,$)|0,i=i+Math.imul(M,tt)|0,i=i+Math.imul(k,$)|0,a=a+Math.imul(k,tt)|0,n=n+Math.imul(x,rt)|0,i=i+Math.imul(x,nt)|0,i=i+Math.imul(_,rt)|0,a=a+Math.imul(_,nt)|0,n=n+Math.imul(v,at)|0,i=i+Math.imul(v,ot)|0,i=i+Math.imul(y,at)|0,a=a+Math.imul(y,ot)|0,n=n+Math.imul(p,lt)|0,i=i+Math.imul(p,ut)|0,i=i+Math.imul(m,lt)|0,a=a+Math.imul(m,ut)|0,n=n+Math.imul(h,ht)|0,i=i+Math.imul(h,ft)|0,i=i+Math.imul(f,ht)|0,a=a+Math.imul(f,ft)|0;var kt=(u+n|0)+((8191&i)<<13)|0;u=(a+(i>>>13)|0)+(kt>>>26)|0,kt&=67108863,n=Math.imul(j,U),i=Math.imul(j,V),i=i+Math.imul(N,U)|0,a=Math.imul(N,V),n=n+Math.imul(O,q)|0,i=i+Math.imul(O,G)|0,i=i+Math.imul(R,q)|0,a=a+Math.imul(R,G)|0,n=n+Math.imul(z,W)|0,i=i+Math.imul(z,X)|0,i=i+Math.imul(D,W)|0,a=a+Math.imul(D,X)|0,n=n+Math.imul(L,J)|0,i=i+Math.imul(L,K)|0,i=i+Math.imul(C,J)|0,a=a+Math.imul(C,K)|0,n=n+Math.imul(T,$)|0,i=i+Math.imul(T,tt)|0,i=i+Math.imul(S,$)|0,a=a+Math.imul(S,tt)|0,n=n+Math.imul(M,rt)|0,i=i+Math.imul(M,nt)|0,i=i+Math.imul(k,rt)|0,a=a+Math.imul(k,nt)|0,n=n+Math.imul(x,at)|0,i=i+Math.imul(x,ot)|0,i=i+Math.imul(_,at)|0,a=a+Math.imul(_,ot)|0,n=n+Math.imul(v,lt)|0,i=i+Math.imul(v,ut)|0,i=i+Math.imul(y,lt)|0,a=a+Math.imul(y,ut)|0,n=n+Math.imul(p,ht)|0,i=i+Math.imul(p,ft)|0,i=i+Math.imul(m,ht)|0,a=a+Math.imul(m,ft)|0,n=n+Math.imul(h,pt)|0,i=i+Math.imul(h,mt)|0,i=i+Math.imul(f,pt)|0,a=a+Math.imul(f,mt)|0;var At=(u+n|0)+((8191&i)<<13)|0;u=(a+(i>>>13)|0)+(At>>>26)|0,At&=67108863,n=Math.imul(j,q),i=Math.imul(j,G),i=i+Math.imul(N,q)|0,a=Math.imul(N,G),n=n+Math.imul(O,W)|0,i=i+Math.imul(O,X)|0,i=i+Math.imul(R,W)|0,a=a+Math.imul(R,X)|0,n=n+Math.imul(z,J)|0,i=i+Math.imul(z,K)|0,i=i+Math.imul(D,J)|0,a=a+Math.imul(D,K)|0,n=n+Math.imul(L,$)|0,i=i+Math.imul(L,tt)|0,i=i+Math.imul(C,$)|0,a=a+Math.imul(C,tt)|0,n=n+Math.imul(T,rt)|0,i=i+Math.imul(T,nt)|0,i=i+Math.imul(S,rt)|0,a=a+Math.imul(S,nt)|0,n=n+Math.imul(M,at)|0,i=i+Math.imul(M,ot)|0,i=i+Math.imul(k,at)|0,a=a+Math.imul(k,ot)|0,n=n+Math.imul(x,lt)|0,i=i+Math.imul(x,ut)|0,i=i+Math.imul(_,lt)|0,a=a+Math.imul(_,ut)|0,n=n+Math.imul(v,ht)|0,i=i+Math.imul(v,ft)|0,i=i+Math.imul(y,ht)|0,a=a+Math.imul(y,ft)|0,n=n+Math.imul(p,pt)|0,i=i+Math.imul(p,mt)|0,i=i+Math.imul(m,pt)|0,a=a+Math.imul(m,mt)|0;var Tt=(u+n|0)+((8191&i)<<13)|0;u=(a+(i>>>13)|0)+(Tt>>>26)|0,Tt&=67108863,n=Math.imul(j,W),i=Math.imul(j,X),i=i+Math.imul(N,W)|0,a=Math.imul(N,X),n=n+Math.imul(O,J)|0,i=i+Math.imul(O,K)|0,i=i+Math.imul(R,J)|0,a=a+Math.imul(R,K)|0,n=n+Math.imul(z,$)|0,i=i+Math.imul(z,tt)|0,i=i+Math.imul(D,$)|0,a=a+Math.imul(D,tt)|0,n=n+Math.imul(L,rt)|0,i=i+Math.imul(L,nt)|0,i=i+Math.imul(C,rt)|0,a=a+Math.imul(C,nt)|0,n=n+Math.imul(T,at)|0,i=i+Math.imul(T,ot)|0,i=i+Math.imul(S,at)|0,a=a+Math.imul(S,ot)|0,n=n+Math.imul(M,lt)|0,i=i+Math.imul(M,ut)|0,i=i+Math.imul(k,lt)|0,a=a+Math.imul(k,ut)|0,n=n+Math.imul(x,ht)|0,i=i+Math.imul(x,ft)|0,i=i+Math.imul(_,ht)|0,a=a+Math.imul(_,ft)|0,n=n+Math.imul(v,pt)|0,i=i+Math.imul(v,mt)|0,i=i+Math.imul(y,pt)|0,a=a+Math.imul(y,mt)|0;var St=(u+n|0)+((8191&i)<<13)|0;u=(a+(i>>>13)|0)+(St>>>26)|0,St&=67108863,n=Math.imul(j,J),i=Math.imul(j,K),i=i+Math.imul(N,J)|0,a=Math.imul(N,K),n=n+Math.imul(O,$)|0,i=i+Math.imul(O,tt)|0,i=i+Math.imul(R,$)|0,a=a+Math.imul(R,tt)|0,n=n+Math.imul(z,rt)|0,i=i+Math.imul(z,nt)|0,i=i+Math.imul(D,rt)|0,a=a+Math.imul(D,nt)|0,n=n+Math.imul(L,at)|0,i=i+Math.imul(L,ot)|0,i=i+Math.imul(C,at)|0,a=a+Math.imul(C,ot)|0,n=n+Math.imul(T,lt)|0,i=i+Math.imul(T,ut)|0,i=i+Math.imul(S,lt)|0,a=a+Math.imul(S,ut)|0,n=n+Math.imul(M,ht)|0,i=i+Math.imul(M,ft)|0,i=i+Math.imul(k,ht)|0,a=a+Math.imul(k,ft)|0,n=n+Math.imul(x,pt)|0,i=i+Math.imul(x,mt)|0,i=i+Math.imul(_,pt)|0,a=a+Math.imul(_,mt)|0;var Et=(u+n|0)+((8191&i)<<13)|0;u=(a+(i>>>13)|0)+(Et>>>26)|0,Et&=67108863,n=Math.imul(j,$),i=Math.imul(j,tt),i=i+Math.imul(N,$)|0,a=Math.imul(N,tt),n=n+Math.imul(O,rt)|0,i=i+Math.imul(O,nt)|0,i=i+Math.imul(R,rt)|0,a=a+Math.imul(R,nt)|0,n=n+Math.imul(z,at)|0,i=i+Math.imul(z,ot)|0,i=i+Math.imul(D,at)|0,a=a+Math.imul(D,ot)|0,n=n+Math.imul(L,lt)|0,i=i+Math.imul(L,ut)|0,i=i+Math.imul(C,lt)|0,a=a+Math.imul(C,ut)|0,n=n+Math.imul(T,ht)|0,i=i+Math.imul(T,ft)|0,i=i+Math.imul(S,ht)|0,a=a+Math.imul(S,ft)|0,n=n+Math.imul(M,pt)|0,i=i+Math.imul(M,mt)|0,i=i+Math.imul(k,pt)|0,a=a+Math.imul(k,mt)|0;var Lt=(u+n|0)+((8191&i)<<13)|0;u=(a+(i>>>13)|0)+(Lt>>>26)|0,Lt&=67108863,n=Math.imul(j,rt),i=Math.imul(j,nt),i=i+Math.imul(N,rt)|0,a=Math.imul(N,nt),n=n+Math.imul(O,at)|0,i=i+Math.imul(O,ot)|0,i=i+Math.imul(R,at)|0,a=a+Math.imul(R,ot)|0,n=n+Math.imul(z,lt)|0,i=i+Math.imul(z,ut)|0,i=i+Math.imul(D,lt)|0,a=a+Math.imul(D,ut)|0,n=n+Math.imul(L,ht)|0,
i=i+Math.imul(L,ft)|0,i=i+Math.imul(C,ht)|0,a=a+Math.imul(C,ft)|0,n=n+Math.imul(T,pt)|0,i=i+Math.imul(T,mt)|0,i=i+Math.imul(S,pt)|0,a=a+Math.imul(S,mt)|0;var Ct=(u+n|0)+((8191&i)<<13)|0;u=(a+(i>>>13)|0)+(Ct>>>26)|0,Ct&=67108863,n=Math.imul(j,at),i=Math.imul(j,ot),i=i+Math.imul(N,at)|0,a=Math.imul(N,ot),n=n+Math.imul(O,lt)|0,i=i+Math.imul(O,ut)|0,i=i+Math.imul(R,lt)|0,a=a+Math.imul(R,ut)|0,n=n+Math.imul(z,ht)|0,i=i+Math.imul(z,ft)|0,i=i+Math.imul(D,ht)|0,a=a+Math.imul(D,ft)|0,n=n+Math.imul(L,pt)|0,i=i+Math.imul(L,mt)|0,i=i+Math.imul(C,pt)|0,a=a+Math.imul(C,mt)|0;var It=(u+n|0)+((8191&i)<<13)|0;u=(a+(i>>>13)|0)+(It>>>26)|0,It&=67108863,n=Math.imul(j,lt),i=Math.imul(j,ut),i=i+Math.imul(N,lt)|0,a=Math.imul(N,ut),n=n+Math.imul(O,ht)|0,i=i+Math.imul(O,ft)|0,i=i+Math.imul(R,ht)|0,a=a+Math.imul(R,ft)|0,n=n+Math.imul(z,pt)|0,i=i+Math.imul(z,mt)|0,i=i+Math.imul(D,pt)|0,a=a+Math.imul(D,mt)|0;var zt=(u+n|0)+((8191&i)<<13)|0;u=(a+(i>>>13)|0)+(zt>>>26)|0,zt&=67108863,n=Math.imul(j,ht),i=Math.imul(j,ft),i=i+Math.imul(N,ht)|0,a=Math.imul(N,ft),n=n+Math.imul(O,pt)|0,i=i+Math.imul(O,mt)|0,i=i+Math.imul(R,pt)|0,a=a+Math.imul(R,mt)|0;var Dt=(u+n|0)+((8191&i)<<13)|0;u=(a+(i>>>13)|0)+(Dt>>>26)|0,Dt&=67108863,n=Math.imul(j,pt),i=Math.imul(j,mt),i=i+Math.imul(N,pt)|0,a=Math.imul(N,mt);var Pt=(u+n|0)+((8191&i)<<13)|0;return u=(a+(i>>>13)|0)+(Pt>>>26)|0,Pt&=67108863,l[0]=gt,l[1]=vt,l[2]=yt,l[3]=bt,l[4]=xt,l[5]=_t,l[6]=wt,l[7]=Mt,l[8]=kt,l[9]=At,l[10]=Tt,l[11]=St,l[12]=Et,l[13]=Lt,l[14]=Ct,l[15]=It,l[16]=zt,l[17]=Dt,l[18]=Pt,0!==u&&(l[19]=u,r.length++),r};Math.imul||(k=u),a.prototype.mulTo=function(t,e){var r=this.length+t.length;return 10===this.length&&10===t.length?k(this,t,e):r<63?u(this,t,e):r<1024?c(this,t,e):h(this,t,e)},f.prototype.makeRBT=function(t){for(var e=new Array(t),r=a.prototype._countBits(t)-1,n=0;n<t;n++)e[n]=this.revBin(n,r,t);return e},f.prototype.revBin=function(t,e,r){if(0===t||t===r-1)return t;for(var n=0,i=0;i<e;i++)n|=(1&t)<<e-i-1,t>>=1;return n},f.prototype.permute=function(t,e,r,n,i,a){for(var o=0;o<a;o++)n[o]=e[t[o]],i[o]=r[t[o]]},f.prototype.transform=function(t,e,r,n,i,a){this.permute(a,t,e,r,n,i);for(var o=1;o<i;o<<=1)for(var s=o<<1,l=Math.cos(2*Math.PI/s),u=Math.sin(2*Math.PI/s),c=0;c<i;c+=s)for(var h=l,f=u,d=0;d<o;d++){var p=r[c+d],m=n[c+d],g=r[c+d+o],v=n[c+d+o],y=h*g-f*v;v=h*v+f*g,g=y,r[c+d]=p+g,n[c+d]=m+v,r[c+d+o]=p-g,n[c+d+o]=m-v,d!==s&&(y=l*h-u*f,f=l*f+u*h,h=y)}},f.prototype.guessLen13b=function(t,e){var r=1|Math.max(e,t),n=1&r,i=0;for(r=r/2|0;r;r>>>=1)i++;return 1<<i+1+n},f.prototype.conjugate=function(t,e,r){if(!(r<=1))for(var n=0;n<r/2;n++){var i=t[n];t[n]=t[r-n-1],t[r-n-1]=i,i=e[n],e[n]=-e[r-n-1],e[r-n-1]=-i}},f.prototype.normalize13b=function(t,e){for(var r=0,n=0;n<e/2;n++){var i=8192*Math.round(t[2*n+1]/e)+Math.round(t[2*n]/e)+r;t[n]=67108863&i,r=i<67108864?0:i/67108864|0}return t},f.prototype.convert13b=function(t,e,r,i){for(var a=0,o=0;o<e;o++)a+=0|t[o],r[2*o]=8191&a,a>>>=13,r[2*o+1]=8191&a,a>>>=13;for(o=2*e;o<i;++o)r[o]=0;n(0===a),n(0==(-8192&a))},f.prototype.stub=function(t){for(var e=new Array(t),r=0;r<t;r++)e[r]=0;return e},f.prototype.mulp=function(t,e,r){var n=2*this.guessLen13b(t.length,e.length),i=this.makeRBT(n),a=this.stub(n),o=new Array(n),s=new Array(n),l=new Array(n),u=new Array(n),c=new Array(n),h=new Array(n),f=r.words;f.length=n,this.convert13b(t.words,t.length,o,n),this.convert13b(e.words,e.length,u,n),this.transform(o,a,s,l,n,i),this.transform(u,a,c,h,n,i);for(var d=0;d<n;d++){var p=s[d]*c[d]-l[d]*h[d];l[d]=s[d]*h[d]+l[d]*c[d],s[d]=p}return this.conjugate(s,l,n),this.transform(s,l,f,a,n,i),this.conjugate(f,a,n),this.normalize13b(f,n),r.negative=t.negative^e.negative,r.length=t.length+e.length,r.strip()},a.prototype.mul=function(t){var e=new a(null);return e.words=new Array(this.length+t.length),this.mulTo(t,e)},a.prototype.mulf=function(t){var e=new a(null);return e.words=new Array(this.length+t.length),h(this,t,e)},a.prototype.imul=function(t){return this.clone().mulTo(t,this)},a.prototype.imuln=function(t){n("number"==typeof t),n(t<67108864);for(var e=0,r=0;r<this.length;r++){var i=(0|this.words[r])*t,a=(67108863&i)+(67108863&e);e>>=26,e+=i/67108864|0,e+=a>>>26,this.words[r]=67108863&a}return 0!==e&&(this.words[r]=e,this.length++),this},a.prototype.muln=function(t){return this.clone().imuln(t)},a.prototype.sqr=function(){return this.mul(this)},a.prototype.isqr=function(){return this.imul(this.clone())},a.prototype.pow=function(t){var e=l(t);if(0===e.length)return new a(1);for(var r=this,n=0;n<e.length&&0===e[n];n++,r=r.sqr());if(++n<e.length)for(var i=r.sqr();n<e.length;n++,i=i.sqr())0!==e[n]&&(r=r.mul(i));return r},a.prototype.iushln=function(t){n("number"==typeof t&&t>=0);var e,r=t%26,i=(t-r)/26,a=67108863>>>26-r<<26-r;if(0!==r){var o=0;for(e=0;e<this.length;e++){var s=this.words[e]&a,l=(0|this.words[e])-s<<r;this.words[e]=l|o,o=s>>>26-r}o&&(this.words[e]=o,this.length++)}if(0!==i){for(e=this.length-1;e>=0;e--)this.words[e+i]=this.words[e];for(e=0;e<i;e++)this.words[e]=0;this.length+=i}return this.strip()},a.prototype.ishln=function(t){return n(0===this.negative),this.iushln(t)},a.prototype.iushrn=function(t,e,r){n("number"==typeof t&&t>=0);var i;i=e?(e-e%26)/26:0;var a=t%26,o=Math.min((t-a)/26,this.length),s=67108863^67108863>>>a<<a,l=r;if(i-=o,i=Math.max(0,i),l){for(var u=0;u<o;u++)l.words[u]=this.words[u];l.length=o}if(0===o);else if(this.length>o)for(this.length-=o,u=0;u<this.length;u++)this.words[u]=this.words[u+o];else this.words[0]=0,this.length=1;var c=0;for(u=this.length-1;u>=0&&(0!==c||u>=i);u--){var h=0|this.words[u];this.words[u]=c<<26-a|h>>>a,c=h&s}return l&&0!==c&&(l.words[l.length++]=c),0===this.length&&(this.words[0]=0,this.length=1),this.strip()},a.prototype.ishrn=function(t,e,r){return n(0===this.negative),this.iushrn(t,e,r)},a.prototype.shln=function(t){return this.clone().ishln(t)},a.prototype.ushln=function(t){return this.clone().iushln(t)},a.prototype.shrn=function(t){return this.clone().ishrn(t)},a.prototype.ushrn=function(t){return this.clone().iushrn(t)},a.prototype.testn=function(t){n("number"==typeof t&&t>=0);var e=t%26,r=(t-e)/26,i=1<<e;return!(this.length<=r)&&!!(this.words[r]&i)},a.prototype.imaskn=function(t){n("number"==typeof t&&t>=0);var e=t%26,r=(t-e)/26;if(n(0===this.negative,"imaskn works only with positive numbers"),this.length<=r)return this;if(0!==e&&r++,this.length=Math.min(r,this.length),0!==e){var i=67108863^67108863>>>e<<e;this.words[this.length-1]&=i}return this.strip()},a.prototype.maskn=function(t){return this.clone().imaskn(t)},a.prototype.iaddn=function(t){return n("number"==typeof t),n(t<67108864),t<0?this.isubn(-t):0!==this.negative?1===this.length&&(0|this.words[0])<t?(this.words[0]=t-(0|this.words[0]),this.negative=0,this):(this.negative=0,this.isubn(t),this.negative=1,this):this._iaddn(t)},a.prototype._iaddn=function(t){this.words[0]+=t;for(var e=0;e<this.length&&this.words[e]>=67108864;e++)this.words[e]-=67108864,e===this.length-1?this.words[e+1]=1:this.words[e+1]++;return this.length=Math.max(this.length,e+1),this},a.prototype.isubn=function(t){if(n("number"==typeof t),n(t<67108864),t<0)return this.iaddn(-t);if(0!==this.negative)return this.negative=0,this.iaddn(t),this.negative=1,this;if(this.words[0]-=t,1===this.length&&this.words[0]<0)this.words[0]=-this.words[0],this.negative=1;else for(var e=0;e<this.length&&this.words[e]<0;e++)this.words[e]+=67108864,this.words[e+1]-=1;return this.strip()},a.prototype.addn=function(t){return this.clone().iaddn(t)},a.prototype.subn=function(t){return this.clone().isubn(t)},a.prototype.iabs=function(){return this.negative=0,this},a.prototype.abs=function(){return this.clone().iabs()},a.prototype._ishlnsubmul=function(t,e,r){var i,a=t.length+r;this._expand(a);var o,s=0;for(i=0;i<t.length;i++){o=(0|this.words[i+r])+s;var l=(0|t.words[i])*e;o-=67108863&l,s=(o>>26)-(l/67108864|0),this.words[i+r]=67108863&o}for(;i<this.length-r;i++)o=(0|this.words[i+r])+s,s=o>>26,this.words[i+r]=67108863&o;if(0===s)return this.strip();for(n(-1===s),s=0,i=0;i<this.length;i++)o=-(0|this.words[i])+s,s=o>>26,this.words[i]=67108863&o;return this.negative=1,this.strip()},a.prototype._wordDiv=function(t,e){var r=this.length-t.length,n=this.clone(),i=t,o=0|i.words[i.length-1];0!==(r=26-this._countBits(o))&&(i=i.ushln(r),n.iushln(r),o=0|i.words[i.length-1]);var s,l=n.length-i.length;if("mod"!==e){s=new a(null),s.length=l+1,s.words=new Array(s.length);for(var u=0;u<s.length;u++)s.words[u]=0}var c=n.clone()._ishlnsubmul(i,1,l);0===c.negative&&(n=c,s&&(s.words[l]=1));for(var h=l-1;h>=0;h--){var f=67108864*(0|n.words[i.length+h])+(0|n.words[i.length+h-1]);for(f=Math.min(f/o|0,67108863),n._ishlnsubmul(i,f,h);0!==n.negative;)f--,n.negative=0,n._ishlnsubmul(i,1,h),n.isZero()||(n.negative^=1);s&&(s.words[h]=f)}return s&&s.strip(),n.strip(),"div"!==e&&0!==r&&n.iushrn(r),{div:s||null,mod:n}},a.prototype.divmod=function(t,e,r){if(n(!t.isZero()),this.isZero())return{div:new a(0),mod:new a(0)};var i,o,s;return 0!==this.negative&&0===t.negative?(s=this.neg().divmod(t,e),"mod"!==e&&(i=s.div.neg()),"div"!==e&&(o=s.mod.neg(),r&&0!==o.negative&&o.iadd(t)),{div:i,mod:o}):0===this.negative&&0!==t.negative?(s=this.divmod(t.neg(),e),"mod"!==e&&(i=s.div.neg()),{div:i,mod:s.mod}):0!=(this.negative&t.negative)?(s=this.neg().divmod(t.neg(),e),"div"!==e&&(o=s.mod.neg(),r&&0!==o.negative&&o.isub(t)),{div:s.div,mod:o}):t.length>this.length||this.cmp(t)<0?{div:new a(0),mod:this}:1===t.length?"div"===e?{div:this.divn(t.words[0]),mod:null}:"mod"===e?{div:null,mod:new a(this.modn(t.words[0]))}:{div:this.divn(t.words[0]),mod:new a(this.modn(t.words[0]))}:this._wordDiv(t,e)},a.prototype.div=function(t){return this.divmod(t,"div",!1).div},a.prototype.mod=function(t){return this.divmod(t,"mod",!1).mod},a.prototype.umod=function(t){return this.divmod(t,"mod",!0).mod},a.prototype.divRound=function(t){var e=this.divmod(t);if(e.mod.isZero())return e.div;var r=0!==e.div.negative?e.mod.isub(t):e.mod,n=t.ushrn(1),i=t.andln(1),a=r.cmp(n);return a<0||1===i&&0===a?e.div:0!==e.div.negative?e.div.isubn(1):e.div.iaddn(1)},a.prototype.modn=function(t){n(t<=67108863);for(var e=(1<<26)%t,r=0,i=this.length-1;i>=0;i--)r=(e*r+(0|this.words[i]))%t;return r},a.prototype.idivn=function(t){n(t<=67108863);for(var e=0,r=this.length-1;r>=0;r--){var i=(0|this.words[r])+67108864*e;this.words[r]=i/t|0,e=i%t}return this.strip()},a.prototype.divn=function(t){return this.clone().idivn(t)},a.prototype.egcd=function(t){n(0===t.negative),n(!t.isZero());var e=this,r=t.clone();e=0!==e.negative?e.umod(t):e.clone();for(var i=new a(1),o=new a(0),s=new a(0),l=new a(1),u=0;e.isEven()&&r.isEven();)e.iushrn(1),r.iushrn(1),++u;for(var c=r.clone(),h=e.clone();!e.isZero();){for(var f=0,d=1;0==(e.words[0]&d)&&f<26;++f,d<<=1);if(f>0)for(e.iushrn(f);f-- >0;)(i.isOdd()||o.isOdd())&&(i.iadd(c),o.isub(h)),i.iushrn(1),o.iushrn(1);for(var p=0,m=1;0==(r.words[0]&m)&&p<26;++p,m<<=1);if(p>0)for(r.iushrn(p);p-- >0;)(s.isOdd()||l.isOdd())&&(s.iadd(c),l.isub(h)),s.iushrn(1),l.iushrn(1);e.cmp(r)>=0?(e.isub(r),i.isub(s),o.isub(l)):(r.isub(e),s.isub(i),l.isub(o))}return{a:s,b:l,gcd:r.iushln(u)}},a.prototype._invmp=function(t){n(0===t.negative),n(!t.isZero());var e=this,r=t.clone();e=0!==e.negative?e.umod(t):e.clone();for(var i=new a(1),o=new a(0),s=r.clone();e.cmpn(1)>0&&r.cmpn(1)>0;){for(var l=0,u=1;0==(e.words[0]&u)&&l<26;++l,u<<=1);if(l>0)for(e.iushrn(l);l-- >0;)i.isOdd()&&i.iadd(s),i.iushrn(1);for(var c=0,h=1;0==(r.words[0]&h)&&c<26;++c,h<<=1);if(c>0)for(r.iushrn(c);c-- >0;)o.isOdd()&&o.iadd(s),o.iushrn(1);e.cmp(r)>=0?(e.isub(r),i.isub(o)):(r.isub(e),o.isub(i))}var f;return f=0===e.cmpn(1)?i:o,f.cmpn(0)<0&&f.iadd(t),f},a.prototype.gcd=function(t){if(this.isZero())return t.abs();if(t.isZero())return this.abs();var e=this.clone(),r=t.clone();e.negative=0,r.negative=0;for(var n=0;e.isEven()&&r.isEven();n++)e.iushrn(1),r.iushrn(1);for(;;){for(;e.isEven();)e.iushrn(1);for(;r.isEven();)r.iushrn(1);var i=e.cmp(r);if(i<0){var a=e;e=r,r=a}else if(0===i||0===r.cmpn(1))break;e.isub(r)}return r.iushln(n)},a.prototype.invm=function(t){return this.egcd(t).a.umod(t)},a.prototype.isEven=function(){return 0==(1&this.words[0])},a.prototype.isOdd=function(){return 1==(1&this.words[0])},a.prototype.andln=function(t){return this.words[0]&t},a.prototype.bincn=function(t){n("number"==typeof t);var e=t%26,r=(t-e)/26,i=1<<e;if(this.length<=r)return this._expand(r+1),this.words[r]|=i,this;for(var a=i,o=r;0!==a&&o<this.length;o++){var s=0|this.words[o];s+=a,a=s>>>26,s&=67108863,this.words[o]=s}return 0!==a&&(this.words[o]=a,this.length++),this},a.prototype.isZero=function(){return 1===this.length&&0===this.words[0]},a.prototype.cmpn=function(t){var e=t<0;if(0!==this.negative&&!e)return-1;if(0===this.negative&&e)return 1;this.strip();var r;if(this.length>1)r=1;else{e&&(t=-t),n(t<=67108863,"Number is too big");var i=0|this.words[0];r=i===t?0:i<t?-1:1}return 0!==this.negative?0|-r:r},a.prototype.cmp=function(t){if(0!==this.negative&&0===t.negative)return-1;if(0===this.negative&&0!==t.negative)return 1;var e=this.ucmp(t);return 0!==this.negative?0|-e:e},a.prototype.ucmp=function(t){if(this.length>t.length)return 1;if(this.length<t.length)return-1;for(var e=0,r=this.length-1;r>=0;r--){var n=0|this.words[r],i=0|t.words[r];if(n!==i){n<i?e=-1:n>i&&(e=1);break}}return e},a.prototype.gtn=function(t){return 1===this.cmpn(t)},a.prototype.gt=function(t){return 1===this.cmp(t)},a.prototype.gten=function(t){return this.cmpn(t)>=0},a.prototype.gte=function(t){return this.cmp(t)>=0},a.prototype.ltn=function(t){return-1===this.cmpn(t)},a.prototype.lt=function(t){return-1===this.cmp(t)},a.prototype.lten=function(t){return this.cmpn(t)<=0},a.prototype.lte=function(t){return this.cmp(t)<=0},a.prototype.eqn=function(t){return 0===this.cmpn(t)},a.prototype.eq=function(t){return 0===this.cmp(t)},a.red=function(t){return new y(t)},a.prototype.toRed=function(t){return n(!this.red,"Already a number in reduction context"),n(0===this.negative,"red works only with positives"),t.convertTo(this)._forceRed(t)},a.prototype.fromRed=function(){return n(this.red,"fromRed works only with numbers in reduction context"),this.red.convertFrom(this)},a.prototype._forceRed=function(t){return this.red=t,this},a.prototype.forceRed=function(t){return n(!this.red,"Already a number in reduction context"),this._forceRed(t)},a.prototype.redAdd=function(t){return n(this.red,"redAdd works only with red numbers"),this.red.add(this,t)},a.prototype.redIAdd=function(t){return n(this.red,"redIAdd works only with red numbers"),this.red.iadd(this,t)},a.prototype.redSub=function(t){return n(this.red,"redSub works only with red numbers"),this.red.sub(this,t)},a.prototype.redISub=function(t){return n(this.red,"redISub works only with red numbers"),this.red.isub(this,t)},a.prototype.redShl=function(t){return n(this.red,"redShl works only with red numbers"),this.red.shl(this,t)},a.prototype.redMul=function(t){return n(this.red,"redMul works only with red numbers"),this.red._verify2(this,t),this.red.mul(this,t)},a.prototype.redIMul=function(t){return n(this.red,"redMul works only with red numbers"),this.red._verify2(this,t),this.red.imul(this,t)},a.prototype.redSqr=function(){return n(this.red,"redSqr works only with red numbers"),this.red._verify1(this),this.red.sqr(this)},a.prototype.redISqr=function(){return n(this.red,"redISqr works only with red numbers"),this.red._verify1(this),this.red.isqr(this)},a.prototype.redSqrt=function(){return n(this.red,"redSqrt works only with red numbers"),this.red._verify1(this),this.red.sqrt(this)},a.prototype.redInvm=function(){return n(this.red,"redInvm works only with red numbers"),this.red._verify1(this),this.red.invm(this)},a.prototype.redNeg=function(){return n(this.red,"redNeg works only with red numbers"),this.red._verify1(this),this.red.neg(this)},a.prototype.redPow=function(t){return n(this.red&&!t.red,"redPow(normalNum)"),this.red._verify1(this),this.red.pow(this,t)};var A={k256:null,p224:null,p192:null,p25519:null};d.prototype._tmp=function(){var t=new a(null);return t.words=new Array(Math.ceil(this.n/13)),t},d.prototype.ireduce=function(t){var e,r=t;do{this.split(r,this.tmp),r=this.imulK(r),r=r.iadd(this.tmp),e=r.bitLength()}while(e>this.n);var n=e<this.n?-1:r.ucmp(this.p);return 0===n?(r.words[0]=0,r.length=1):n>0?r.isub(this.p):r.strip(),r},d.prototype.split=function(t,e){t.iushrn(this.n,0,e)},d.prototype.imulK=function(t){return t.imul(this.k)},i(p,d),p.prototype.split=function(t,e){for(var r=Math.min(t.length,9),n=0;n<r;n++)e.words[n]=t.words[n];if(e.length=r,t.length<=9)return t.words[0]=0,void(t.length=1);var i=t.words[9];for(e.words[e.length++]=4194303&i,n=10;n<t.length;n++){var a=0|t.words[n];t.words[n-10]=(4194303&a)<<4|i>>>22,i=a}i>>>=22,t.words[n-10]=i,0===i&&t.length>10?t.length-=10:t.length-=9},p.prototype.imulK=function(t){t.words[t.length]=0,t.words[t.length+1]=0,t.length+=2;for(var e=0,r=0;r<t.length;r++){var n=0|t.words[r];e+=977*n,t.words[r]=67108863&e,e=64*n+(e/67108864|0)}return 0===t.words[t.length-1]&&(t.length--,0===t.words[t.length-1]&&t.length--),t},i(m,d),i(g,d),i(v,d),v.prototype.imulK=function(t){for(var e=0,r=0;r<t.length;r++){var n=19*(0|t.words[r])+e,i=67108863&n;n>>>=26,t.words[r]=i,e=n}return 0!==e&&(t.words[t.length++]=e),t},a._prime=function(t){if(A[t])return A[t];var e;if("k256"===t)e=new p;else if("p224"===t)e=new m;else if("p192"===t)e=new g;else{if("p25519"!==t)throw new Error("Unknown prime "+t);e=new v}return A[t]=e,e},y.prototype._verify1=function(t){n(0===t.negative,"red works only with positives"),n(t.red,"red works only with red numbers")},y.prototype._verify2=function(t,e){n(0==(t.negative|e.negative),"red works only with positives"),n(t.red&&t.red===e.red,"red works only with red numbers")},y.prototype.imod=function(t){return this.prime?this.prime.ireduce(t)._forceRed(this):t.umod(this.m)._forceRed(this)},y.prototype.neg=function(t){return t.isZero()?t.clone():this.m.sub(t)._forceRed(this)},y.prototype.add=function(t,e){this._verify2(t,e);var r=t.add(e);return r.cmp(this.m)>=0&&r.isub(this.m),r._forceRed(this)},y.prototype.iadd=function(t,e){this._verify2(t,e);var r=t.iadd(e);return r.cmp(this.m)>=0&&r.isub(this.m),r},y.prototype.sub=function(t,e){this._verify2(t,e);var r=t.sub(e);return r.cmpn(0)<0&&r.iadd(this.m),r._forceRed(this)},y.prototype.isub=function(t,e){this._verify2(t,e);var r=t.isub(e);return r.cmpn(0)<0&&r.iadd(this.m),r},y.prototype.shl=function(t,e){return this._verify1(t),this.imod(t.ushln(e))},y.prototype.imul=function(t,e){return this._verify2(t,e),this.imod(t.imul(e))},y.prototype.mul=function(t,e){return this._verify2(t,e),this.imod(t.mul(e))},y.prototype.isqr=function(t){return this.imul(t,t.clone())},y.prototype.sqr=function(t){return this.mul(t,t)},y.prototype.sqrt=function(t){if(t.isZero())return t.clone();var e=this.m.andln(3);if(n(e%2==1),3===e){var r=this.m.add(new a(1)).iushrn(2);return this.pow(t,r)}for(var i=this.m.subn(1),o=0;!i.isZero()&&0===i.andln(1);)o++,i.iushrn(1);n(!i.isZero());var s=new a(1).toRed(this),l=s.redNeg(),u=this.m.subn(1).iushrn(1),c=this.m.bitLength();for(c=new a(2*c*c).toRed(this);0!==this.pow(c,u).cmp(l);)c.redIAdd(l);for(var h=this.pow(c,i),f=this.pow(t,i.addn(1).iushrn(1)),d=this.pow(t,i),p=o;0!==d.cmp(s);){for(var m=d,g=0;0!==m.cmp(s);g++)m=m.redSqr();n(g<p);var v=this.pow(h,new a(1).iushln(p-g-1));f=f.redMul(v),h=v.redSqr(),d=d.redMul(h),p=g}return f},y.prototype.invm=function(t){var e=t._invmp(this.m);return 0!==e.negative?(e.negative=0,this.imod(e).redNeg()):this.imod(e)},y.prototype.pow=function(t,e){if(e.isZero())return new a(1);if(0===e.cmpn(1))return t.clone();var r=new Array(16);r[0]=new a(1).toRed(this),r[1]=t;for(var n=2;n<r.length;n++)r[n]=this.mul(r[n-1],t);var i=r[0],o=0,s=0,l=e.bitLength()%26;for(0===l&&(l=26),n=e.length-1;n>=0;n--){for(var u=e.words[n],c=l-1;c>=0;c--){var h=u>>c&1;i!==r[0]&&(i=this.sqr(i)),0!==h||0!==o?(o<<=1,o|=h,(4===++s||0===n&&0===c)&&(i=this.mul(i,r[o]),s=0,o=0)):s=0}l=26}return i},y.prototype.convertTo=function(t){var e=t.umod(this.m);return e===t?e.clone():e},y.prototype.convertFrom=function(t){var e=t.clone();return e.red=null,e},a.mont=function(t){return new b(t)},i(b,y),b.prototype.convertTo=function(t){return this.imod(t.ushln(this.shift))},b.prototype.convertFrom=function(t){var e=this.imod(t.mul(this.rinv));return e.red=null,e},b.prototype.imul=function(t,e){if(t.isZero()||e.isZero())return t.words[0]=0,t.length=1,t;var r=t.imul(e),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=r.isub(n).iushrn(this.shift),a=i;return i.cmp(this.m)>=0?a=i.isub(this.m):i.cmpn(0)<0&&(a=i.iadd(this.m)),a._forceRed(this)},b.prototype.mul=function(t,e){if(t.isZero()||e.isZero())return new a(0)._forceRed(this);var r=t.mul(e),n=r.maskn(this.shift).mul(this.minv).imaskn(this.shift).mul(this.m),i=r.isub(n).iushrn(this.shift),o=i;return i.cmp(this.m)>=0?o=i.isub(this.m):i.cmpn(0)<0&&(o=i.iadd(this.m)),o._forceRed(this)},b.prototype.invm=function(t){return this.imod(t._invmp(this.m).mul(this.r2))._forceRed(this)}}(void 0===e||e,this)},{}],69:[function(t,e,r){"use strict";function n(t){var e,r,n,i=t.length,a=0;for(e=0;e<i;++e)a+=t[e].length;var o=new Array(a),s=0;for(e=0;e<i;++e){var l=t[e],u=l.length;for(r=0;r<u;++r){var c=o[s++]=new Array(u-1),h=0;for(n=0;n<u;++n)n!==r&&(c[h++]=l[n]);if(1&r){var f=c[1];c[1]=c[0],c[0]=f}}}return o}e.exports=n},{}],70:[function(t,e,r){"use strict";function n(t,e){for(var r=0;r<t;++r)if(!(e[r]<=e[r+t]))return!0;return!1}function i(t,e,r,i){for(var a=0,o=0,s=0,l=t.length;s<l;++s){var u=t[s];if(!n(e,u)){for(var c=0;c<2*e;++c)r[a++]=u[c];i[o++]=s}}return o}function a(t,e,r,n){var a=t.length,o=e.length;if(!(a<=0||o<=0)){var s=t[0].length>>>1;if(!(s<=0)){var l,u=h.mallocDouble(2*s*a),c=h.mallocInt32(a);if((a=i(t,s,u,c))>0){if(1===s&&n)f.init(a),l=f.sweepComplete(s,r,0,a,u,c,0,a,u,c);else{var p=h.mallocDouble(2*s*o),m=h.mallocInt32(o);o=i(e,s,p,m),o>0&&(f.init(a+o),l=1===s?f.sweepBipartite(s,r,0,a,u,c,0,o,p,m):d(s,r,n,a,u,c,o,p,m),h.free(p),h.free(m))}h.free(u),h.free(c)}return l}}}function o(t,e){c.push([t,e])}function s(t){return c=[],a(t,t,o,!0),c}function l(t,e){return c=[],a(t,e,o,!1),c}function u(t,e,r){switch(arguments.length){case 1:return s(t);case 2:return"function"==typeof e?a(t,t,e,!0):l(t,e);case 3:return a(t,e,r,!1);default:throw new Error("box-intersect: Invalid arguments")}}e.exports=u;var c,h=t("typedarray-pool"),f=t("./lib/sweep"),d=t("./lib/intersect")},{"./lib/intersect":72,"./lib/sweep":76,"typedarray-pool":541}],71:[function(t,e,r){"use strict";function n(t,e,r){var n="bruteForce"+(t?"Red":"Blue")+(e?"Flip":"")+(r?"Full":""),i=["function ",n,"(",w.join(),"){","var ",u,"=2*",a,";"],l="for(var i="+c+","+p+"="+u+"*"+c+";i<"+h+";++i,"+p+"+="+u+"){var x0="+f+"["+o+"+"+p+"],x1="+f+"["+o+"+"+p+"+"+a+"],xi="+d+"[i];",M="for(var j="+m+","+b+"="+u+"*"+m+";j<"+g+";++j,"+b+"+="+u+"){var y0="+v+"["+o+"+"+b+"],"+(r?"y1="+v+"["+o+"+"+b+"+"+a+"],":"")+"yi="+y+"[j];";return t?i.push(l,_,":",M):i.push(M,_,":",l),r?i.push("if(y1<x0||x1<y0)continue;"):e?i.push("if(y0<=x0||x1<y0)continue;"):i.push("if(y0<x0||x1<y0)continue;"),i.push("for(var k="+o+"+1;k<"+a+";++k){var r0="+f+"[k+"+p+"],r1="+f+"[k+"+a+"+"+p+"],b0="+v+"[k+"+b+"],b1="+v+"[k+"+a+"+"+b+"];if(r1<b0||b1<r0)continue "+_+";}var "+x+"="+s+"("),e?i.push("yi,xi"):i.push("xi,yi"),i.push(");if("+x+"!==void 0)return "+x+";}}}"),{name:n,code:i.join("")}}function i(t){function e(e,r){var a=n(e,r,t);i.push(a.code),o.push("return "+a.name+"("+w.join()+");")}var r="bruteForce"+(t?"Full":"Partial"),i=[],a=w.slice();t||a.splice(3,0,l);var o=["function "+r+"("+a.join()+"){"];o.push("if("+h+"-"+c+">"+g+"-"+m+"){"),t?(e(!0,!1),o.push("}else{"),e(!1,!1)):(o.push("if("+l+"){"),e(!0,!0),o.push("}else{"),e(!0,!1),o.push("}}else{if("+l+"){"),e(!1,!0),o.push("}else{"),e(!1,!1),o.push("}")),o.push("}}return "+r);var s=i.join("")+o.join("");return new Function(s)()}var a="d",o="ax",s="vv",l="fp",u="es",c="rs",h="re",f="rb",d="ri",p="rp",m="bs",g="be",v="bb",y="bi",b="bp",x="rv",_="Q",w=[a,o,s,c,h,f,d,m,g,v,y];r.partial=i(!1),r.full=i(!0)},{}],72:[function(t,e,r){"use strict";function n(t,e){var r=8*u.log2(e+1)*(t+1)|0,n=u.nextPow2(A*r);S.length<n&&(l.free(S),S=l.mallocInt32(n));var i=u.nextPow2(T*r);E<i&&(l.free(E),E=l.mallocDouble(i))}function i(t,e,r,n,i,a,o,s,l){var u=A*t;S[u]=e,S[u+1]=r,S[u+2]=n,S[u+3]=i,S[u+4]=a,S[u+5]=o;var c=T*t;E[c]=s,E[c+1]=l}function a(t,e,r,n,i,a,o,s,l,u,c){var h=2*t,f=l*h,d=u[f+e];t:for(var p=i,m=i*h;p<a;++p,m+=h){var g=o[m+e],v=o[m+e+t];if(!(d<g||v<d)&&(!n||d!==g)){for(var y=s[p],b=e+1;b<t;++b){var g=o[m+b],v=o[m+b+t],x=u[f+b],_=u[f+b+t];if(v<x||_<g)continue t}var w;if(void 0!==(w=n?r(c,y):r(y,c)))return w}}}function o(t,e,r,n,i,a,o,s,l,u){var c=2*t,h=s*c,f=l[h+e];t:for(var d=n,p=n*c;d<i;++d,p+=c){var m=o[d];if(m!==u){var g=a[p+e],v=a[p+e+t];if(!(f<g||v<f)){for(var y=e+1;y<t;++y){var g=a[p+y],v=a[p+y+t],b=l[h+y],x=l[h+y+t];if(v<b||x<g)continue t}var _=r(m,u);if(void 0!==_)return _}}}}function s(t,e,r,s,l,u,c,m,L){n(t,s+c);var C,I=0,z=2*t;for(i(I++,0,0,s,0,c,r?16:0,-1/0,1/0),r||i(I++,0,0,c,0,s,1,-1/0,1/0);I>0;){I-=1;var D=I*A,P=S[D],O=S[D+1],R=S[D+2],F=S[D+3],j=S[D+4],N=S[D+5],B=I*T,U=E[B],V=E[B+1],H=1&N,q=!!(16&N),G=l,Y=u,W=m,X=L;if(H&&(G=m,Y=L,W=l,X=u),!(2&N&&(R=_(t,P,O,R,G,Y,V),O>=R)||4&N&&(O=w(t,P,O,R,G,Y,U))>=R)){var Z=R-O,J=j-F;if(q){if(t*Z*(Z+J)<y){if(void 0!==(C=d.scanComplete(t,P,e,O,R,G,Y,F,j,W,X)))return C;continue}}else{if(t*Math.min(Z,J)<g){if(void 0!==(C=h(t,P,e,H,O,R,G,Y,F,j,W,X)))return C;continue}if(t*Z*J<v){if(void 0!==(C=d.scanBipartite(t,P,e,H,O,R,G,Y,F,j,W,X)))return C;continue}}var K=b(t,P,O,R,G,Y,U,V);if(O<K)if(t*(K-O)<g){if(void 0!==(C=f(t,P+1,e,O,K,G,Y,F,j,W,X)))return C}else if(P===t-2){if(void 0!==(C=H?d.sweepBipartite(t,e,F,j,W,X,O,K,G,Y):d.sweepBipartite(t,e,O,K,G,Y,F,j,W,X)))return C}else i(I++,P+1,O,K,F,j,H,-1/0,1/0),i(I++,P+1,F,j,O,K,1^H,-1/0,1/0);if(K<R){var Q=p(t,P,F,j,W,X),$=W[z*Q+P],tt=x(t,P,Q,j,W,X,$);if(tt<j&&i(I++,P,K,R,tt,j,(4|H)+(q?16:0),$,V),F<Q&&i(I++,P,K,R,F,Q,(2|H)+(q?16:0),U,$),Q+1===tt){if(void 0!==(C=q?o(t,P,e,K,R,G,Y,Q,W,X[Q]):a(t,P,e,H,K,R,G,Y,Q,W,X[Q])))return C}else if(Q<tt){var et;if(q){if(et=M(t,P,K,R,G,Y,$),K<et){var rt=x(t,P,K,et,G,Y,$);if(P===t-2){if(K<rt&&void 0!==(C=d.sweepComplete(t,e,K,rt,G,Y,Q,tt,W,X)))return C;if(rt<et&&void 0!==(C=d.sweepBipartite(t,e,rt,et,G,Y,Q,tt,W,X)))return C}else K<rt&&i(I++,P+1,K,rt,Q,tt,16,-1/0,1/0),rt<et&&(i(I++,P+1,rt,et,Q,tt,0,-1/0,1/0),i(I++,P+1,Q,tt,rt,et,1,-1/0,1/0))}}else et=H?k(t,P,K,R,G,Y,$):M(t,P,K,R,G,Y,$),K<et&&(P===t-2?C=H?d.sweepBipartite(t,e,Q,tt,W,X,K,et,G,Y):d.sweepBipartite(t,e,K,et,G,Y,Q,tt,W,X):(i(I++,P+1,K,et,Q,tt,H,-1/0,1/0),i(I++,P+1,Q,tt,K,et,1^H,-1/0,1/0)))}}}}}e.exports=s;var l=t("typedarray-pool"),u=t("bit-twiddle"),c=t("./brute"),h=c.partial,f=c.full,d=t("./sweep"),p=t("./median"),m=t("./partition"),g=128,v=1<<22,y=1<<22,b=m("!(lo>=p0)&&!(p1>=hi)",["p0","p1"]),x=m("lo===p0",["p0"]),_=m("lo<p0",["p0"]),w=m("hi<=p0",["p0"]),M=m("lo<=p0&&p0<=hi",["p0"]),k=m("lo<p0&&p0<=hi",["p0"]),A=6,T=2,S=l.mallocInt32(1024),E=l.mallocDouble(1024)},{"./brute":71,"./median":73,"./partition":74,"./sweep":76,"bit-twiddle":67,"typedarray-pool":541}],73:[function(t,e,r){"use strict";function n(t,e,r,n,i,a){for(var o=2*t,s=o*(r+1)+e,l=r+1;l<n;++l,s+=o)for(var u=i[s],c=l,h=o*(l-1);c>r&&i[h+e]>u;--c,h-=o){for(var f=h,d=h+o,p=0;p<o;++p,++f,++d){var m=i[f];i[f]=i[d],i[d]=m}var g=a[c];a[c]=a[c-1],a[c-1]=g}}function i(t,e,r,i,a,l){if(i<=r+1)return r;for(var u=r,c=i,h=i+r>>>1,f=2*t,d=h,p=a[f*h+e];u<c;){if(c-u<s){n(t,e,u,c,a,l),p=a[f*h+e];break}var m=c-u,g=Math.random()*m+u|0,v=a[f*g+e],y=Math.random()*m+u|0,b=a[f*y+e],x=Math.random()*m+u|0,_=a[f*x+e];v<=b?_>=b?(d=y,p=b):v>=_?(d=g,p=v):(d=x,p=_):b>=_?(d=y,p=b):_>=v?(d=g,p=v):(d=x,p=_);for(var w=f*(c-1),M=f*d,k=0;k<f;++k,++w,++M){var A=a[w];a[w]=a[M],a[M]=A}var T=l[c-1];l[c-1]=l[d],l[d]=T,d=o(t,e,u,c-1,a,l,p);for(var w=f*(c-1),M=f*d,k=0;k<f;++k,++w,++M){var A=a[w];a[w]=a[M],a[M]=A}var T=l[c-1];if(l[c-1]=l[d],l[d]=T,h<d){for(c=d-1;u<c&&a[f*(c-1)+e]===p;)c-=1;c+=1}else{if(!(d<h))break;for(u=d+1;u<c&&a[f*u+e]===p;)u+=1}}return o(t,e,r,h,a,l,a[f*h+e])}e.exports=i;var a=t("./partition"),o=a("lo<p0",["p0"]),s=8},{"./partition":74}],74:[function(t,e,r){"use strict";function n(t,e){var r="abcdef".split("").concat(e),n=[];return t.indexOf("lo")>=0&&n.push("lo=e[k+n]"),t.indexOf("hi")>=0&&n.push("hi=e[k+o]"),r.push(i.replace("_",n.join()).replace("$",t)),Function.apply(void 0,r)}e.exports=n;var i="for(var j=2*a,k=j*c,l=k,m=c,n=b,o=a+b,p=c;d>p;++p,k+=j){var _;if($)if(m===p)m+=1,l+=j;else{for(var s=0;j>s;++s){var t=e[k+s];e[k+s]=e[l],e[l++]=t}var u=f[p];f[p]=f[m],f[m++]=u}}return m"},{}],75:[function(t,e,r){"use strict";function n(t,e){e<=4*f?i(0,e-1,t):h(0,e-1,t)}function i(t,e,r){for(var n=2*(t+1),i=t+1;i<=e;++i){for(var a=r[n++],o=r[n++],s=i,l=n-2;s-- >t;){var u=r[l-2],c=r[l-1];if(u<a)break;if(u===a&&c<o)break;r[l]=u,r[l+1]=c,l-=2}r[l]=a,r[l+1]=o}}function a(t,e,r){t*=2,e*=2;var n=r[t],i=r[t+1];r[t]=r[e],r[t+1]=r[e+1],r[e]=n,r[e+1]=i}function o(t,e,r){t*=2,e*=2,r[t]=r[e],r[t+1]=r[e+1]}function s(t,e,r,n){t*=2,e*=2,r*=2;var i=n[t],a=n[t+1];n[t]=n[e],n[t+1]=n[e+1],n[e]=n[r],n[e+1]=n[r+1],n[r]=i,n[r+1]=a}function l(t,e,r,n,i){t*=2,e*=2,i[t]=i[e],i[e]=r,i[t+1]=i[e+1],i[e+1]=n}function u(t,e,r){t*=2,e*=2;var n=r[t],i=r[e];return!(n<i)&&(n!==i||r[t+1]>r[e+1])}function c(t,e,r,n){t*=2;var i=n[t];return i<e||i===e&&n[t+1]<r}function h(t,e,r){var n=(e-t+1)/6|0,d=t+n,p=e-n,m=t+e>>1,g=m-n,v=m+n,y=d,b=g,x=m,_=v,w=p,M=t+1,k=e-1,A=0;u(y,b,r)&&(A=y,y=b,b=A),u(_,w,r)&&(A=_,_=w,w=A),u(y,x,r)&&(A=y,y=x,x=A),u(b,x,r)&&(A=b,b=x,x=A),u(y,_,r)&&(A=y,y=_,_=A),u(x,_,r)&&(A=x,x=_,_=A),u(b,w,r)&&(A=b,b=w,w=A),u(b,x,r)&&(A=b,b=x,x=A),u(_,w,r)&&(A=_,_=w,w=A);for(var T=r[2*b],S=r[2*b+1],E=r[2*_],L=r[2*_+1],C=2*y,I=2*x,z=2*w,D=2*d,P=2*m,O=2*p,R=0;R<2;++R){var F=r[C+R],j=r[I+R],N=r[z+R];r[D+R]=F,r[P+R]=j,r[O+R]=N}o(g,t,r),o(v,e,r);for(var B=M;B<=k;++B)if(c(B,T,S,r))B!==M&&a(B,M,r),++M;else if(!c(B,E,L,r))for(;;){if(c(k,E,L,r)){c(k,T,S,r)?(s(B,M,k,r),++M,--k):(a(B,k,r),--k);break}if(--k<B)break}l(t,M-1,T,S,r),l(e,k+1,E,L,r),M-2-t<=f?i(t,M-2,r):h(t,M-2,r),e-(k+2)<=f?i(k+2,e,r):h(k+2,e,r),k-M<=f?i(M,k,r):h(M,k,r)}e.exports=n;var f=32},{}],76:[function(t,e,r){"use strict";function n(t){var e=h.nextPow2(t);p.length<e&&(c.free(p),p=c.mallocInt32(e)),m.length<e&&(c.free(m),m=c.mallocInt32(e)),g.length<e&&(c.free(g),g=c.mallocInt32(e)),v.length<e&&(c.free(v),v=c.mallocInt32(e)),y.length<e&&(c.free(y),y=c.mallocInt32(e)),b.length<e&&(c.free(b),b=c.mallocInt32(e));var r=8*e;x.length<r&&(c.free(x),x=c.mallocDouble(r))}function i(t,e,r,n){var i=e[n],a=t[r-1];t[i]=a,e[a]=i}function a(t,e,r,n){t[r]=n,e[n]=r}function o(t,e,r,n,o,s,l,u,c,h){for(var y=0,b=2*t,_=t-1,w=b-1,M=r;M<n;++M){var k=s[M],A=b*M;x[y++]=o[A+_],x[y++]=-(k+1),x[y++]=o[A+w],x[y++]=k}for(var M=l;M<u;++M){var k=h[M]+d,T=b*M;x[y++]=c[T+_],x[y++]=-k,x[y++]=c[T+w],x[y++]=k}var S=y>>>1;f(x,S);for(var E=0,L=0,M=0;M<S;++M){var C=0|x[2*M+1];if(C>=d)C=C-d|0,i(g,v,L--,C);else if(C>=0)i(p,m,E--,C);else if(C<=-d){C=-C-d|0;for(var I=0;I<E;++I){var z=e(p[I],C);if(void 0!==z)return z}a(g,v,L++,C)}else{C=-C-1|0;for(var I=0;I<L;++I){var z=e(C,g[I]);if(void 0!==z)return z}a(p,m,E++,C)}}}function s(t,e,r,n,o,s,l,u,c,h){for(var d=0,_=2*t,w=t-1,M=_-1,k=r;k<n;++k){var A=s[k]+1<<1,T=_*k;x[d++]=o[T+w],x[d++]=-A,x[d++]=o[T+M],x[d++]=A}for(var k=l;k<u;++k){var A=h[k]+1<<1,S=_*k;x[d++]=c[S+w],x[d++]=1|-A,x[d++]=c[S+M],x[d++]=1|A}var E=d>>>1;f(x,E);for(var L=0,C=0,I=0,k=0;k<E;++k){var z=0|x[2*k+1],D=1&z;if(k<E-1&&z>>1==x[2*k+3]>>1&&(D=2,k+=1),z<0){for(var P=-(z>>1)-1,O=0;O<I;++O){var R=e(y[O],P);if(void 0!==R)return R}if(0!==D)for(var O=0;O<L;++O){var R=e(p[O],P);if(void 0!==R)return R}if(1!==D)for(var O=0;O<C;++O){var R=e(g[O],P);if(void 0!==R)return R}0===D?a(p,m,L++,P):1===D?a(g,v,C++,P):2===D&&a(y,b,I++,P)}else{var P=(z>>1)-1;0===D?i(p,m,L--,P):1===D?i(g,v,C--,P):2===D&&i(y,b,I--,P)}}}function l(t,e,r,n,o,s,l,u,c,h,g,v){var y=0,b=2*t,_=e,w=e+t,M=1,k=1;n?k=d:M=d
;for(var A=o;A<s;++A){var T=A+M,S=b*A;x[y++]=l[S+_],x[y++]=-T,x[y++]=l[S+w],x[y++]=T}for(var A=c;A<h;++A){var T=A+k,E=b*A;x[y++]=g[E+_],x[y++]=-T}var L=y>>>1;f(x,L);for(var C=0,A=0;A<L;++A){var I=0|x[2*A+1];if(I<0){var T=-I,z=!1;if(T>=d?(z=!n,T-=d):(z=!!n,T-=1),z)a(p,m,C++,T);else{var D=v[T],P=b*T,O=g[P+e+1],R=g[P+e+1+t];t:for(var F=0;F<C;++F){var j=p[F],N=b*j;if(!(R<l[N+e+1]||l[N+e+1+t]<O)){for(var B=e+2;B<t;++B)if(g[P+B+t]<l[N+B]||l[N+B+t]<g[P+B])continue t;var U,V=u[j];if(void 0!==(U=n?r(D,V):r(V,D)))return U}}}}else i(p,m,C--,I-M)}}function u(t,e,r,n,i,a,o,s,l,u,c){for(var h=0,m=2*t,g=e,v=e+t,y=n;y<i;++y){var b=y+d,_=m*y;x[h++]=a[_+g],x[h++]=-b,x[h++]=a[_+v],x[h++]=b}for(var y=s;y<l;++y){var b=y+1,w=m*y;x[h++]=u[w+g],x[h++]=-b}var M=h>>>1;f(x,M);for(var k=0,y=0;y<M;++y){var A=0|x[2*y+1];if(A<0){var b=-A;if(b>=d)p[k++]=b-d;else{b-=1;var T=c[b],S=m*b,E=u[S+e+1],L=u[S+e+1+t];t:for(var C=0;C<k;++C){var I=p[C],z=o[I];if(z===T)break;var D=m*I;if(!(L<a[D+e+1]||a[D+e+1+t]<E)){for(var P=e+2;P<t;++P)if(u[S+P+t]<a[D+P]||a[D+P+t]<u[S+P])continue t;var O=r(z,T);if(void 0!==O)return O}}}}else{for(var b=A-d,C=k-1;C>=0;--C)if(p[C]===b){for(var P=C+1;P<k;++P)p[P-1]=p[P];break}--k}}}e.exports={init:n,sweepBipartite:o,sweepComplete:s,scanBipartite:l,scanComplete:u};var c=t("typedarray-pool"),h=t("bit-twiddle"),f=t("./sort"),d=1<<28,p=c.mallocInt32(1024),m=c.mallocInt32(1024),g=c.mallocInt32(1024),v=c.mallocInt32(1024),y=c.mallocInt32(1024),b=c.mallocInt32(1024),x=c.mallocDouble(8192)},{"./sort":75,"bit-twiddle":67,"typedarray-pool":541}],77:[function(t,e,r){"use strict";function n(t){if(t>Z)throw new RangeError("Invalid typed array length");var e=new Uint8Array(t);return e.__proto__=i.prototype,e}function i(t,e,r){if("number"==typeof t){if("string"==typeof e)throw new Error("If encoding is specified then the first argument must be a string");return l(t)}return a(t,e,r)}function a(t,e,r){if("number"==typeof t)throw new TypeError('"value" argument must not be a number');return t instanceof ArrayBuffer?h(t,e,r):"string"==typeof t?u(t,e):f(t)}function o(t){if("number"!=typeof t)throw new TypeError('"size" argument must be a number');if(t<0)throw new RangeError('"size" argument must not be negative')}function s(t,e,r){return o(t),t<=0?n(t):void 0!==e?"string"==typeof r?n(t).fill(e,r):n(t).fill(e):n(t)}function l(t){return o(t),n(t<0?0:0|d(t))}function u(t,e){if("string"==typeof e&&""!==e||(e="utf8"),!i.isEncoding(e))throw new TypeError('"encoding" must be a valid string encoding');var r=0|m(t,e),a=n(r),o=a.write(t,e);return o!==r&&(a=a.slice(0,o)),a}function c(t){for(var e=t.length<0?0:0|d(t.length),r=n(e),i=0;i<e;i+=1)r[i]=255&t[i];return r}function h(t,e,r){if(e<0||t.byteLength<e)throw new RangeError("'offset' is out of bounds");if(t.byteLength<e+(r||0))throw new RangeError("'length' is out of bounds");var n;return n=void 0===e&&void 0===r?new Uint8Array(t):void 0===r?new Uint8Array(t,e):new Uint8Array(t,e,r),n.__proto__=i.prototype,n}function f(t){if(i.isBuffer(t)){var e=0|d(t.length),r=n(e);return 0===r.length?r:(t.copy(r,0,0,e),r)}if(t){if(G(t)||"length"in t)return"number"!=typeof t.length||Y(t.length)?n(0):c(t);if("Buffer"===t.type&&Array.isArray(t.data))return c(t.data)}throw new TypeError("First argument must be a string, Buffer, ArrayBuffer, Array, or array-like object.")}function d(t){if(t>=Z)throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x"+Z.toString(16)+" bytes");return 0|t}function p(t){return+t!=t&&(t=0),i.alloc(+t)}function m(t,e){if(i.isBuffer(t))return t.length;if(G(t)||t instanceof ArrayBuffer)return t.byteLength;"string"!=typeof t&&(t=""+t);var r=t.length;if(0===r)return 0;for(var n=!1;;)switch(e){case"ascii":case"latin1":case"binary":return r;case"utf8":case"utf-8":case void 0:return B(t).length;case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return 2*r;case"hex":return r>>>1;case"base64":return H(t).length;default:if(n)return B(t).length;e=(""+e).toLowerCase(),n=!0}}function g(t,e,r){var n=!1;if((void 0===e||e<0)&&(e=0),e>this.length)return"";if((void 0===r||r>this.length)&&(r=this.length),r<=0)return"";if(r>>>=0,e>>>=0,r<=e)return"";for(t||(t="utf8");;)switch(t){case"hex":return I(this,e,r);case"utf8":case"utf-8":return S(this,e,r);case"ascii":return L(this,e,r);case"latin1":case"binary":return C(this,e,r);case"base64":return T(this,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return z(this,e,r);default:if(n)throw new TypeError("Unknown encoding: "+t);t=(t+"").toLowerCase(),n=!0}}function v(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}function y(t,e,r,n,a){if(0===t.length)return-1;if("string"==typeof r?(n=r,r=0):r>2147483647?r=2147483647:r<-2147483648&&(r=-2147483648),r=+r,Y(r)&&(r=a?0:t.length-1),r<0&&(r=t.length+r),r>=t.length){if(a)return-1;r=t.length-1}else if(r<0){if(!a)return-1;r=0}if("string"==typeof e&&(e=i.from(e,n)),i.isBuffer(e))return 0===e.length?-1:b(t,e,r,n,a);if("number"==typeof e)return e&=255,"function"==typeof Uint8Array.prototype.indexOf?a?Uint8Array.prototype.indexOf.call(t,e,r):Uint8Array.prototype.lastIndexOf.call(t,e,r):b(t,[e],r,n,a);throw new TypeError("val must be string, number or Buffer")}function b(t,e,r,n,i){function a(t,e){return 1===o?t[e]:t.readUInt16BE(e*o)}var o=1,s=t.length,l=e.length;if(void 0!==n&&("ucs2"===(n=String(n).toLowerCase())||"ucs-2"===n||"utf16le"===n||"utf-16le"===n)){if(t.length<2||e.length<2)return-1;o=2,s/=2,l/=2,r/=2}var u;if(i){var c=-1;for(u=r;u<s;u++)if(a(t,u)===a(e,-1===c?0:u-c)){if(-1===c&&(c=u),u-c+1===l)return c*o}else-1!==c&&(u-=u-c),c=-1}else for(r+l>s&&(r=s-l),u=r;u>=0;u--){for(var h=!0,f=0;f<l;f++)if(a(t,u+f)!==a(e,f)){h=!1;break}if(h)return u}return-1}function x(t,e,r,n){r=Number(r)||0;var i=t.length-r;n?(n=Number(n))>i&&(n=i):n=i;var a=e.length;if(a%2!=0)throw new TypeError("Invalid hex string");n>a/2&&(n=a/2);for(var o=0;o<n;++o){var s=parseInt(e.substr(2*o,2),16);if(Y(s))return o;t[r+o]=s}return o}function _(t,e,r,n){return q(B(e,t.length-r),t,r,n)}function w(t,e,r,n){return q(U(e),t,r,n)}function M(t,e,r,n){return w(t,e,r,n)}function k(t,e,r,n){return q(H(e),t,r,n)}function A(t,e,r,n){return q(V(e,t.length-r),t,r,n)}function T(t,e,r){return 0===e&&r===t.length?W.fromByteArray(t):W.fromByteArray(t.slice(e,r))}function S(t,e,r){r=Math.min(t.length,r);for(var n=[],i=e;i<r;){var a=t[i],o=null,s=a>239?4:a>223?3:a>191?2:1;if(i+s<=r){var l,u,c,h;switch(s){case 1:a<128&&(o=a);break;case 2:l=t[i+1],128==(192&l)&&(h=(31&a)<<6|63&l)>127&&(o=h);break;case 3:l=t[i+1],u=t[i+2],128==(192&l)&&128==(192&u)&&(h=(15&a)<<12|(63&l)<<6|63&u)>2047&&(h<55296||h>57343)&&(o=h);break;case 4:l=t[i+1],u=t[i+2],c=t[i+3],128==(192&l)&&128==(192&u)&&128==(192&c)&&(h=(15&a)<<18|(63&l)<<12|(63&u)<<6|63&c)>65535&&h<1114112&&(o=h)}}null===o?(o=65533,s=1):o>65535&&(o-=65536,n.push(o>>>10&1023|55296),o=56320|1023&o),n.push(o),i+=s}return E(n)}function E(t){var e=t.length;if(e<=J)return String.fromCharCode.apply(String,t);for(var r="",n=0;n<e;)r+=String.fromCharCode.apply(String,t.slice(n,n+=J));return r}function L(t,e,r){var n="";r=Math.min(t.length,r);for(var i=e;i<r;++i)n+=String.fromCharCode(127&t[i]);return n}function C(t,e,r){var n="";r=Math.min(t.length,r);for(var i=e;i<r;++i)n+=String.fromCharCode(t[i]);return n}function I(t,e,r){var n=t.length;(!e||e<0)&&(e=0),(!r||r<0||r>n)&&(r=n);for(var i="",a=e;a<r;++a)i+=N(t[a]);return i}function z(t,e,r){for(var n=t.slice(e,r),i="",a=0;a<n.length;a+=2)i+=String.fromCharCode(n[a]+256*n[a+1]);return i}function D(t,e,r){if(t%1!=0||t<0)throw new RangeError("offset is not uint");if(t+e>r)throw new RangeError("Trying to access beyond buffer length")}function P(t,e,r,n,a,o){if(!i.isBuffer(t))throw new TypeError('"buffer" argument must be a Buffer instance');if(e>a||e<o)throw new RangeError('"value" argument is out of bounds');if(r+n>t.length)throw new RangeError("Index out of range")}function O(t,e,r,n,i,a){if(r+n>t.length)throw new RangeError("Index out of range");if(r<0)throw new RangeError("Index out of range")}function R(t,e,r,n,i){return e=+e,r>>>=0,i||O(t,e,r,4,3.4028234663852886e38,-3.4028234663852886e38),X.write(t,e,r,n,23,4),r+4}function F(t,e,r,n,i){return e=+e,r>>>=0,i||O(t,e,r,8,1.7976931348623157e308,-1.7976931348623157e308),X.write(t,e,r,n,52,8),r+8}function j(t){if(t=t.trim().replace(K,""),t.length<2)return"";for(;t.length%4!=0;)t+="=";return t}function N(t){return t<16?"0"+t.toString(16):t.toString(16)}function B(t,e){e=e||1/0;for(var r,n=t.length,i=null,a=[],o=0;o<n;++o){if((r=t.charCodeAt(o))>55295&&r<57344){if(!i){if(r>56319){(e-=3)>-1&&a.push(239,191,189);continue}if(o+1===n){(e-=3)>-1&&a.push(239,191,189);continue}i=r;continue}if(r<56320){(e-=3)>-1&&a.push(239,191,189),i=r;continue}r=65536+(i-55296<<10|r-56320)}else i&&(e-=3)>-1&&a.push(239,191,189);if(i=null,r<128){if((e-=1)<0)break;a.push(r)}else if(r<2048){if((e-=2)<0)break;a.push(r>>6|192,63&r|128)}else if(r<65536){if((e-=3)<0)break;a.push(r>>12|224,r>>6&63|128,63&r|128)}else{if(!(r<1114112))throw new Error("Invalid code point");if((e-=4)<0)break;a.push(r>>18|240,r>>12&63|128,r>>6&63|128,63&r|128)}}return a}function U(t){for(var e=[],r=0;r<t.length;++r)e.push(255&t.charCodeAt(r));return e}function V(t,e){for(var r,n,i,a=[],o=0;o<t.length&&!((e-=2)<0);++o)r=t.charCodeAt(o),n=r>>8,i=r%256,a.push(i),a.push(n);return a}function H(t){return W.toByteArray(j(t))}function q(t,e,r,n){for(var i=0;i<n&&!(i+r>=e.length||i>=t.length);++i)e[i+r]=t[i];return i}function G(t){return"function"==typeof ArrayBuffer.isView&&ArrayBuffer.isView(t)}function Y(t){return t!==t}var W=t("base64-js"),X=t("ieee754");r.Buffer=i,r.SlowBuffer=p,r.INSPECT_MAX_BYTES=50;var Z=2147483647;r.kMaxLength=Z,i.TYPED_ARRAY_SUPPORT=function(){try{var t=new Uint8Array(1);return t.__proto__={__proto__:Uint8Array.prototype,foo:function(){return 42}},42===t.foo()}catch(t){return!1}}(),i.TYPED_ARRAY_SUPPORT||"undefined"==typeof console||"function"!=typeof console.error||console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support."),"undefined"!=typeof Symbol&&Symbol.species&&i[Symbol.species]===i&&Object.defineProperty(i,Symbol.species,{value:null,configurable:!0,enumerable:!1,writable:!1}),i.poolSize=8192,i.from=function(t,e,r){return a(t,e,r)},i.prototype.__proto__=Uint8Array.prototype,i.__proto__=Uint8Array,i.alloc=function(t,e,r){return s(t,e,r)},i.allocUnsafe=function(t){return l(t)},i.allocUnsafeSlow=function(t){return l(t)},i.isBuffer=function(t){return null!=t&&!0===t._isBuffer},i.compare=function(t,e){if(!i.isBuffer(t)||!i.isBuffer(e))throw new TypeError("Arguments must be Buffers");if(t===e)return 0;for(var r=t.length,n=e.length,a=0,o=Math.min(r,n);a<o;++a)if(t[a]!==e[a]){r=t[a],n=e[a];break}return r<n?-1:n<r?1:0},i.isEncoding=function(t){switch(String(t).toLowerCase()){case"hex":case"utf8":case"utf-8":case"ascii":case"latin1":case"binary":case"base64":case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return!0;default:return!1}},i.concat=function(t,e){if(!Array.isArray(t))throw new TypeError('"list" argument must be an Array of Buffers');if(0===t.length)return i.alloc(0);var r;if(void 0===e)for(e=0,r=0;r<t.length;++r)e+=t[r].length;var n=i.allocUnsafe(e),a=0;for(r=0;r<t.length;++r){var o=t[r];if(!i.isBuffer(o))throw new TypeError('"list" argument must be an Array of Buffers');o.copy(n,a),a+=o.length}return n},i.byteLength=m,i.prototype._isBuffer=!0,i.prototype.swap16=function(){var t=this.length;if(t%2!=0)throw new RangeError("Buffer size must be a multiple of 16-bits");for(var e=0;e<t;e+=2)v(this,e,e+1);return this},i.prototype.swap32=function(){var t=this.length;if(t%4!=0)throw new RangeError("Buffer size must be a multiple of 32-bits");for(var e=0;e<t;e+=4)v(this,e,e+3),v(this,e+1,e+2);return this},i.prototype.swap64=function(){var t=this.length;if(t%8!=0)throw new RangeError("Buffer size must be a multiple of 64-bits");for(var e=0;e<t;e+=8)v(this,e,e+7),v(this,e+1,e+6),v(this,e+2,e+5),v(this,e+3,e+4);return this},i.prototype.toString=function(){var t=this.length;return 0===t?"":0===arguments.length?S(this,0,t):g.apply(this,arguments)},i.prototype.equals=function(t){if(!i.isBuffer(t))throw new TypeError("Argument must be a Buffer");return this===t||0===i.compare(this,t)},i.prototype.inspect=function(){var t="",e=r.INSPECT_MAX_BYTES;return this.length>0&&(t=this.toString("hex",0,e).match(/.{2}/g).join(" "),this.length>e&&(t+=" ... ")),"<Buffer "+t+">"},i.prototype.compare=function(t,e,r,n,a){if(!i.isBuffer(t))throw new TypeError("Argument must be a Buffer");if(void 0===e&&(e=0),void 0===r&&(r=t?t.length:0),void 0===n&&(n=0),void 0===a&&(a=this.length),e<0||r>t.length||n<0||a>this.length)throw new RangeError("out of range index");if(n>=a&&e>=r)return 0;if(n>=a)return-1;if(e>=r)return 1;if(e>>>=0,r>>>=0,n>>>=0,a>>>=0,this===t)return 0;for(var o=a-n,s=r-e,l=Math.min(o,s),u=this.slice(n,a),c=t.slice(e,r),h=0;h<l;++h)if(u[h]!==c[h]){o=u[h],s=c[h];break}return o<s?-1:s<o?1:0},i.prototype.includes=function(t,e,r){return-1!==this.indexOf(t,e,r)},i.prototype.indexOf=function(t,e,r){return y(this,t,e,r,!0)},i.prototype.lastIndexOf=function(t,e,r){return y(this,t,e,r,!1)},i.prototype.write=function(t,e,r,n){if(void 0===e)n="utf8",r=this.length,e=0;else if(void 0===r&&"string"==typeof e)n=e,r=this.length,e=0;else{if(!isFinite(e))throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");e>>>=0,isFinite(r)?(r>>>=0,void 0===n&&(n="utf8")):(n=r,r=void 0)}var i=this.length-e;if((void 0===r||r>i)&&(r=i),t.length>0&&(r<0||e<0)||e>this.length)throw new RangeError("Attempt to write outside buffer bounds");n||(n="utf8");for(var a=!1;;)switch(n){case"hex":return x(this,t,e,r);case"utf8":case"utf-8":return _(this,t,e,r);case"ascii":return w(this,t,e,r);case"latin1":case"binary":return M(this,t,e,r);case"base64":return k(this,t,e,r);case"ucs2":case"ucs-2":case"utf16le":case"utf-16le":return A(this,t,e,r);default:if(a)throw new TypeError("Unknown encoding: "+n);n=(""+n).toLowerCase(),a=!0}},i.prototype.toJSON=function(){return{type:"Buffer",data:Array.prototype.slice.call(this._arr||this,0)}};var J=4096;i.prototype.slice=function(t,e){var r=this.length;t=~~t,e=void 0===e?r:~~e,t<0?(t+=r)<0&&(t=0):t>r&&(t=r),e<0?(e+=r)<0&&(e=0):e>r&&(e=r),e<t&&(e=t);var n=this.subarray(t,e);return n.__proto__=i.prototype,n},i.prototype.readUIntLE=function(t,e,r){t>>>=0,e>>>=0,r||D(t,e,this.length);for(var n=this[t],i=1,a=0;++a<e&&(i*=256);)n+=this[t+a]*i;return n},i.prototype.readUIntBE=function(t,e,r){t>>>=0,e>>>=0,r||D(t,e,this.length);for(var n=this[t+--e],i=1;e>0&&(i*=256);)n+=this[t+--e]*i;return n},i.prototype.readUInt8=function(t,e){return t>>>=0,e||D(t,1,this.length),this[t]},i.prototype.readUInt16LE=function(t,e){return t>>>=0,e||D(t,2,this.length),this[t]|this[t+1]<<8},i.prototype.readUInt16BE=function(t,e){return t>>>=0,e||D(t,2,this.length),this[t]<<8|this[t+1]},i.prototype.readUInt32LE=function(t,e){return t>>>=0,e||D(t,4,this.length),(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},i.prototype.readUInt32BE=function(t,e){return t>>>=0,e||D(t,4,this.length),16777216*this[t]+(this[t+1]<<16|this[t+2]<<8|this[t+3])},i.prototype.readIntLE=function(t,e,r){t>>>=0,e>>>=0,r||D(t,e,this.length);for(var n=this[t],i=1,a=0;++a<e&&(i*=256);)n+=this[t+a]*i;return i*=128,n>=i&&(n-=Math.pow(2,8*e)),n},i.prototype.readIntBE=function(t,e,r){t>>>=0,e>>>=0,r||D(t,e,this.length);for(var n=e,i=1,a=this[t+--n];n>0&&(i*=256);)a+=this[t+--n]*i;return i*=128,a>=i&&(a-=Math.pow(2,8*e)),a},i.prototype.readInt8=function(t,e){return t>>>=0,e||D(t,1,this.length),128&this[t]?-1*(255-this[t]+1):this[t]},i.prototype.readInt16LE=function(t,e){t>>>=0,e||D(t,2,this.length);var r=this[t]|this[t+1]<<8;return 32768&r?4294901760|r:r},i.prototype.readInt16BE=function(t,e){t>>>=0,e||D(t,2,this.length);var r=this[t+1]|this[t]<<8;return 32768&r?4294901760|r:r},i.prototype.readInt32LE=function(t,e){return t>>>=0,e||D(t,4,this.length),this[t]|this[t+1]<<8|this[t+2]<<16|this[t+3]<<24},i.prototype.readInt32BE=function(t,e){return t>>>=0,e||D(t,4,this.length),this[t]<<24|this[t+1]<<16|this[t+2]<<8|this[t+3]},i.prototype.readFloatLE=function(t,e){return t>>>=0,e||D(t,4,this.length),X.read(this,t,!0,23,4)},i.prototype.readFloatBE=function(t,e){return t>>>=0,e||D(t,4,this.length),X.read(this,t,!1,23,4)},i.prototype.readDoubleLE=function(t,e){return t>>>=0,e||D(t,8,this.length),X.read(this,t,!0,52,8)},i.prototype.readDoubleBE=function(t,e){return t>>>=0,e||D(t,8,this.length),X.read(this,t,!1,52,8)},i.prototype.writeUIntLE=function(t,e,r,n){if(t=+t,e>>>=0,r>>>=0,!n){P(this,t,e,r,Math.pow(2,8*r)-1,0)}var i=1,a=0;for(this[e]=255&t;++a<r&&(i*=256);)this[e+a]=t/i&255;return e+r},i.prototype.writeUIntBE=function(t,e,r,n){if(t=+t,e>>>=0,r>>>=0,!n){P(this,t,e,r,Math.pow(2,8*r)-1,0)}var i=r-1,a=1;for(this[e+i]=255&t;--i>=0&&(a*=256);)this[e+i]=t/a&255;return e+r},i.prototype.writeUInt8=function(t,e,r){return t=+t,e>>>=0,r||P(this,t,e,1,255,0),this[e]=255&t,e+1},i.prototype.writeUInt16LE=function(t,e,r){return t=+t,e>>>=0,r||P(this,t,e,2,65535,0),this[e]=255&t,this[e+1]=t>>>8,e+2},i.prototype.writeUInt16BE=function(t,e,r){return t=+t,e>>>=0,r||P(this,t,e,2,65535,0),this[e]=t>>>8,this[e+1]=255&t,e+2},i.prototype.writeUInt32LE=function(t,e,r){return t=+t,e>>>=0,r||P(this,t,e,4,4294967295,0),this[e+3]=t>>>24,this[e+2]=t>>>16,this[e+1]=t>>>8,this[e]=255&t,e+4},i.prototype.writeUInt32BE=function(t,e,r){return t=+t,e>>>=0,r||P(this,t,e,4,4294967295,0),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},i.prototype.writeIntLE=function(t,e,r,n){if(t=+t,e>>>=0,!n){var i=Math.pow(2,8*r-1);P(this,t,e,r,i-1,-i)}var a=0,o=1,s=0;for(this[e]=255&t;++a<r&&(o*=256);)t<0&&0===s&&0!==this[e+a-1]&&(s=1),this[e+a]=(t/o>>0)-s&255;return e+r},i.prototype.writeIntBE=function(t,e,r,n){if(t=+t,e>>>=0,!n){var i=Math.pow(2,8*r-1);P(this,t,e,r,i-1,-i)}var a=r-1,o=1,s=0;for(this[e+a]=255&t;--a>=0&&(o*=256);)t<0&&0===s&&0!==this[e+a+1]&&(s=1),this[e+a]=(t/o>>0)-s&255;return e+r},i.prototype.writeInt8=function(t,e,r){return t=+t,e>>>=0,r||P(this,t,e,1,127,-128),t<0&&(t=255+t+1),this[e]=255&t,e+1},i.prototype.writeInt16LE=function(t,e,r){return t=+t,e>>>=0,r||P(this,t,e,2,32767,-32768),this[e]=255&t,this[e+1]=t>>>8,e+2},i.prototype.writeInt16BE=function(t,e,r){return t=+t,e>>>=0,r||P(this,t,e,2,32767,-32768),this[e]=t>>>8,this[e+1]=255&t,e+2},i.prototype.writeInt32LE=function(t,e,r){return t=+t,e>>>=0,r||P(this,t,e,4,2147483647,-2147483648),this[e]=255&t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24,e+4},i.prototype.writeInt32BE=function(t,e,r){return t=+t,e>>>=0,r||P(this,t,e,4,2147483647,-2147483648),t<0&&(t=4294967295+t+1),this[e]=t>>>24,this[e+1]=t>>>16,this[e+2]=t>>>8,this[e+3]=255&t,e+4},i.prototype.writeFloatLE=function(t,e,r){return R(this,t,e,!0,r)},i.prototype.writeFloatBE=function(t,e,r){return R(this,t,e,!1,r)},i.prototype.writeDoubleLE=function(t,e,r){return F(this,t,e,!0,r)},i.prototype.writeDoubleBE=function(t,e,r){return F(this,t,e,!1,r)},i.prototype.copy=function(t,e,r,n){if(r||(r=0),n||0===n||(n=this.length),e>=t.length&&(e=t.length),e||(e=0),n>0&&n<r&&(n=r),n===r)return 0;if(0===t.length||0===this.length)return 0;if(e<0)throw new RangeError("targetStart out of bounds");if(r<0||r>=this.length)throw new RangeError("sourceStart out of bounds");if(n<0)throw new RangeError("sourceEnd out of bounds");n>this.length&&(n=this.length),t.length-e<n-r&&(n=t.length-e+r);var i,a=n-r;if(this===t&&r<e&&e<n)for(i=a-1;i>=0;--i)t[i+e]=this[i+r];else if(a<1e3)for(i=0;i<a;++i)t[i+e]=this[i+r];else Uint8Array.prototype.set.call(t,this.subarray(r,r+a),e);return a},i.prototype.fill=function(t,e,r,n){if("string"==typeof t){if("string"==typeof e?(n=e,e=0,r=this.length):"string"==typeof r&&(n=r,r=this.length),1===t.length){var a=t.charCodeAt(0);a<256&&(t=a)}if(void 0!==n&&"string"!=typeof n)throw new TypeError("encoding must be a string");if("string"==typeof n&&!i.isEncoding(n))throw new TypeError("Unknown encoding: "+n)}else"number"==typeof t&&(t&=255);if(e<0||this.length<e||this.length<r)throw new RangeError("Out of range index");if(r<=e)return this;e>>>=0,r=void 0===r?this.length:r>>>0,t||(t=0);var o;if("number"==typeof t)for(o=e;o<r;++o)this[o]=t;else{var s=i.isBuffer(t)?t:new i(t,n),l=s.length;for(o=0;o<r-e;++o)this[o+e]=s[o%l]}return this};var K=/[^+\/0-9A-Za-z-_]/g},{"base64-js":78,ieee754:289}],78:[function(t,e,r){"use strict";function n(t){var e=t.length;if(e%4>0)throw new Error("Invalid string. Length must be a multiple of 4");return"="===t[e-2]?2:"="===t[e-1]?1:0}function i(t){return 3*t.length/4-n(t)}function a(t){var e,r,i,a,o,s,l=t.length;o=n(t),s=new h(3*l/4-o),i=o>0?l-4:l;var u=0;for(e=0,r=0;e<i;e+=4,r+=3)a=c[t.charCodeAt(e)]<<18|c[t.charCodeAt(e+1)]<<12|c[t.charCodeAt(e+2)]<<6|c[t.charCodeAt(e+3)],s[u++]=a>>16&255,s[u++]=a>>8&255,s[u++]=255&a;return 2===o?(a=c[t.charCodeAt(e)]<<2|c[t.charCodeAt(e+1)]>>4,s[u++]=255&a):1===o&&(a=c[t.charCodeAt(e)]<<10|c[t.charCodeAt(e+1)]<<4|c[t.charCodeAt(e+2)]>>2,s[u++]=a>>8&255,s[u++]=255&a),s}function o(t){return u[t>>18&63]+u[t>>12&63]+u[t>>6&63]+u[63&t]}function s(t,e,r){for(var n,i=[],a=e;a<r;a+=3)n=(t[a]<<16)+(t[a+1]<<8)+t[a+2],i.push(o(n));return i.join("")}function l(t){for(var e,r=t.length,n=r%3,i="",a=[],o=0,l=r-n;o<l;o+=16383)a.push(s(t,o,o+16383>l?l:o+16383));return 1===n?(e=t[r-1],i+=u[e>>2],i+=u[e<<4&63],i+="=="):2===n&&(e=(t[r-2]<<8)+t[r-1],i+=u[e>>10],i+=u[e>>4&63],i+=u[e<<2&63],i+="="),a.push(i),a.join("")}r.byteLength=i,r.toByteArray=a,r.fromByteArray=l;for(var u=[],c=[],h="undefined"!=typeof Uint8Array?Uint8Array:Array,f="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/",d=0,p=f.length;d<p;++d)u[d]=f[d],c[f.charCodeAt(d)]=d;c["-".charCodeAt(0)]=62,c["_".charCodeAt(0)]=63},{}],79:[function(t,e,r){"use strict";function n(t){return[Math.min(t[0],t[1]),Math.max(t[0],t[1])]}function i(t,e){return t[0]-e[0]||t[1]-e[1]}function a(t){return t.map(n).sort(i)}function o(t,e,r){return e in t?t[e]:r}function s(t,e,r){Array.isArray(e)?(r=r||{},e=e||[]):(r=e||{},e=[]);var n=!!o(r,"delaunay",!0),i=!!o(r,"interior",!0),s=!!o(r,"exterior",!0),f=!!o(r,"infinity",!1);if(!i&&!s||0===t.length)return[];var d=l(t,e);if(n||i!==s||f){for(var p=u(t.length,a(e)),m=0;m<d.length;++m){var g=d[m];p.addTriangle(g[0],g[1],g[2])}return n&&c(t,p),s?i?f?h(p,0,f):p.cells():h(p,1,f):h(p,-1)}return d}var l=t("./lib/monotone"),u=t("./lib/triangulation"),c=t("./lib/delaunay"),h=t("./lib/filter");e.exports=s},{"./lib/delaunay":80,"./lib/filter":81,"./lib/monotone":82,"./lib/triangulation":83}],80:[function(t,e,r){"use strict";function n(t,e,r,n,i,o){var s=e.opposite(n,i);if(!(s<0)){if(i<n){var l=n;n=i,i=l,l=o,o=s,s=l}e.isConstraint(n,i)||a(t[n],t[i],t[o],t[s])<0&&r.push(n,i)}}function i(t,e){for(var r=[],i=t.length,o=e.stars,s=0;s<i;++s)for(var l=o[s],u=1;u<l.length;u+=2){var c=l[u];if(!(c<s)&&!e.isConstraint(s,c)){for(var h=l[u-1],f=-1,d=1;d<l.length;d+=2)if(l[d-1]===c){f=l[d];break}f<0||a(t[s],t[c],t[h],t[f])<0&&r.push(s,c)}}for(;r.length>0;){for(var c=r.pop(),s=r.pop(),h=-1,f=-1,l=o[s],p=1;p<l.length;p+=2){var m=l[p-1],g=l[p];m===c?f=g:g===c&&(h=m)}h<0||f<0||(a(t[s],t[c],t[h],t[f])>=0||(e.flip(s,c),n(t,e,r,h,s,f),n(t,e,r,s,f,h),n(t,e,r,f,c,h),n(t,e,r,c,h,f)))}}var a=t("robust-in-sphere")[4];t("binary-search-bounds");e.exports=i},{"binary-search-bounds":84,"robust-in-sphere":506}],81:[function(t,e,r){"use strict";function n(t,e,r,n,i,a,o){this.cells=t,this.neighbor=e,this.flags=n,this.constraint=r,this.active=i,this.next=a,this.boundary=o}function i(t,e){return t[0]-e[0]||t[1]-e[1]||t[2]-e[2]}function a(t,e){for(var r=t.cells(),a=r.length,o=0;o<a;++o){var s=r[o],l=s[0],u=s[1],c=s[2];u<c?u<l&&(s[0]=u,s[1]=c,s[2]=l):c<l&&(s[0]=c,s[1]=l,s[2]=u)}r.sort(i);for(var h=new Array(a),o=0;o<h.length;++o)h[o]=0;var f=[],d=[],p=new Array(3*a),m=new Array(3*a),g=null;e&&(g=[]);for(var v=new n(r,p,m,h,f,d,g),o=0;o<a;++o)for(var s=r[o],y=0;y<3;++y){var l=s[y],u=s[(y+1)%3],b=p[3*o+y]=v.locate(u,l,t.opposite(u,l)),x=m[3*o+y]=t.isConstraint(l,u);b<0&&(x?d.push(o):(f.push(o),h[o]=1),e&&g.push([u,l,-1]))}return v}function o(t,e,r){for(var n=0,i=0;i<t.length;++i)e[i]===r&&(t[n++]=t[i]);return t.length=n,t}function s(t,e,r){var n=a(t,r);if(0===e)return r?n.cells.concat(n.boundary):n.cells;for(var i=1,s=n.active,l=n.next,u=n.flags,c=n.cells,h=n.constraint,f=n.neighbor;s.length>0||l.length>0;){for(;s.length>0;){var d=s.pop();if(u[d]!==-i){u[d]=i;for(var p=(c[d],0);p<3;++p){var m=f[3*d+p];m>=0&&0===u[m]&&(h[3*d+p]?l.push(m):(s.push(m),u[m]=i))}}}var g=l;l=s,s=g,l.length=0,i=-i}var v=o(c,u,e);return r?v.concat(n.boundary):v}var l=t("binary-search-bounds");e.exports=s,n.prototype.locate=function(){var t=[0,0,0];return function(e,r,n){var a=e,o=r,s=n;return r<n?r<e&&(a=r,o=n,s=e):n<e&&(a=n,o=e,s=r),a<0?-1:(t[0]=a,t[1]=o,t[2]=s,l.eq(this.cells,t,i))}}()},{"binary-search-bounds":84}],82:[function(t,e,r){"use strict";function n(t,e,r,n,i){this.a=t,this.b=e,this.idx=r,this.lowerIds=n,this.upperIds=i}function i(t,e,r,n){this.a=t,this.b=e,this.type=r,this.idx=n}function a(t,e){var r=t.a[0]-e.a[0]||t.a[1]-e.a[1]||t.type-e.type;return r||(t.type!==p&&(r=d(t.a,t.b,e.b))?r:t.idx-e.idx)}function o(t,e){return d(t.a,t.b,e)}function s(t,e,r,n,i){for(var a=f.lt(e,n,o),s=f.gt(e,n,o),l=a;l<s;++l){for(var u=e[l],c=u.lowerIds,h=c.length;h>1&&d(r[c[h-2]],r[c[h-1]],n)>0;)t.push([c[h-1],c[h-2],i]),h-=1;c.length=h,c.push(i);for(var p=u.upperIds,h=p.length;h>1&&d(r[p[h-2]],r[p[h-1]],n)<0;)t.push([p[h-2],p[h-1],i]),h-=1;p.length=h,p.push(i)}}function l(t,e){var r;return(r=t.a[0]<e.a[0]?d(t.a,t.b,e.a):d(e.b,e.a,t.a))?r:(r=e.b[0]<t.b[0]?d(t.a,t.b,e.b):d(e.b,e.a,t.b))||t.idx-e.idx}function u(t,e,r){var i=f.le(t,r,l),a=t[i],o=a.upperIds,s=o[o.length-1];a.upperIds=[s],t.splice(i+1,0,new n(r.a,r.b,r.idx,[s],o))}function c(t,e,r){var n=r.a;r.a=r.b,r.b=n;var i=f.eq(t,r,l),a=t[i];t[i-1].upperIds=a.upperIds,t.splice(i,1)}function h(t,e){for(var r=t.length,o=e.length,l=[],h=0;h<r;++h)l.push(new i(t[h],null,p,h));for(var h=0;h<o;++h){var f=e[h],d=t[f[0]],v=t[f[1]];d[0]<v[0]?l.push(new i(d,v,g,h),new i(v,d,m,h)):d[0]>v[0]&&l.push(new i(v,d,g,h),new i(d,v,m,h))}l.sort(a);for(var y=l[0].a[0]-(1+Math.abs(l[0].a[0]))*Math.pow(2,-52),b=[new n([y,1],[y,0],-1,[],[],[],[])],x=[],h=0,_=l.length;h<_;++h){var w=l[h],M=w.type;M===p?s(x,b,t,w.a,w.idx):M===g?u(b,t,w):c(b,t,w)}return x}var f=t("binary-search-bounds"),d=t("robust-orientation")[3],p=0,m=1,g=2;e.exports=h},{"binary-search-bounds":84,"robust-orientation":508}],83:[function(t,e,r){"use strict";function n(t,e){this.stars=t,this.edges=e}function i(t,e,r){for(var n=1,i=t.length;n<i;n+=2)if(t[n-1]===e&&t[n]===r)return t[n-1]=t[i-2],t[n]=t[i-1],void(t.length=i-2)}function a(t,e){for(var r=new Array(t),i=0;i<t;++i)r[i]=[];return new n(r,e)}var o=t("binary-search-bounds");e.exports=a;var s=n.prototype;s.isConstraint=function(){function t(t,e){return t[0]-e[0]||t[1]-e[1]}var e=[0,0];return function(r,n){return e[0]=Math.min(r,n),e[1]=Math.max(r,n),o.eq(this.edges,e,t)>=0}}(),s.removeTriangle=function(t,e,r){var n=this.stars;i(n[t],e,r),i(n[e],r,t),i(n[r],t,e)},s.addTriangle=function(t,e,r){var n=this.stars;n[t].push(e,r),n[e].push(r,t),n[r].push(t,e)},s.opposite=function(t,e){for(var r=this.stars[e],n=1,i=r.length;n<i;n+=2)if(r[n]===t)return r[n-1];return-1},s.flip=function(t,e){var r=this.opposite(t,e),n=this.opposite(e,t);this.removeTriangle(t,e,r),this.removeTriangle(e,t,n),this.addTriangle(t,n,r),this.addTriangle(e,r,n)},s.edges=function(){for(var t=this.stars,e=[],r=0,n=t.length;r<n;++r)for(var i=t[r],a=0,o=i.length;a<o;a+=2)e.push([i[a],i[a+1]]);return e},s.cells=function(){for(var t=this.stars,e=[],r=0,n=t.length;r<n;++r)for(var i=t[r],a=0,o=i.length;a<o;a+=2){var s=i[a],l=i[a+1];r<Math.min(s,l)&&e.push([r,s,l])}return e}},{"binary-search-bounds":84}],84:[function(t,e,r){"use strict";function n(t,e,r,n,i){var a=["function ",t,"(a,l,h,",n.join(","),"){",i?"":"var i=",r?"l-1":"h+1",";while(l<=h){var m=(l+h)>>>1,x=a[m]"];return i?e.indexOf("c")<0?a.push(";if(x===y){return m}else if(x<=y){"):a.push(";var p=c(x,y);if(p===0){return m}else if(p<=0){"):a.push(";if(",e,"){i=m;"),r?a.push("l=m+1}else{h=m-1}"):a.push("h=m-1}else{l=m+1}"),a.push("}"),i?a.push("return -1};"):a.push("return i};"),a.join("")}function i(t,e,r,i){return new Function([n("A","x"+t+"y",e,["y"],i),n("P","c(x,y)"+t+"0",e,["y","c"],i),"function dispatchBsearch",r,"(a,y,c,l,h){if(typeof(c)==='function'){return P(a,(l===void 0)?0:l|0,(h===void 0)?a.length-1:h|0,y,c)}else{return A(a,(c===void 0)?0:c|0,(l===void 0)?a.length-1:l|0,y)}}return dispatchBsearch",r].join(""))()}e.exports={ge:i(">=",!1,"GE"),gt:i(">",!1,"GT"),lt:i("<",!0,"LT"),le:i("<=",!0,"LE"),eq:i("-",!0,"EQ",!0)}},{}],85:[function(t,e,r){"use strict";function n(t){for(var e=1,r=1;r<t.length;++r)for(var n=0;n<r;++n)if(t[r]<t[n])e=-e;else if(t[n]===t[r])return 0;return e}e.exports=n},{}],86:[function(t,e,r){"use strict";function n(t,e){for(var r=0,n=t.length,i=0;i<n;++i)r+=t[i]*e[i];return r}function i(t){var e=t.length;if(0===e)return[];var r=(t[0].length,o([t.length+1,t.length+1],1)),i=o([t.length+1],1);r[e][e]=0;for(var a=0;a<e;++a){for(var l=0;l<=a;++l)r[l][a]=r[a][l]=2*n(t[a],t[l]);i[a]=n(t[a],t[a])}for(var u=s(r,i),c=0,h=u[e+1],a=0;a<h.length;++a)c+=h[a];for(var f=new Array(e),a=0;a<e;++a){for(var h=u[a],d=0,l=0;l<h.length;++l)d+=h[l];f[a]=d/c}return f}function a(t){if(0===t.length)return[];for(var e=t[0].length,r=o([e]),n=i(t),a=0;a<t.length;++a)for(var s=0;s<e;++s)r[s]+=t[a][s]*n[a];return r}var o=t("dup"),s=t("robust-linear-solve");a.barycenetric=i,e.exports=a},{dup:125,"robust-linear-solve":507}],87:[function(t,e,r){function n(t){for(var e=i(t),r=0,n=0;n<t.length;++n)for(var a=t[n],o=0;o<e.length;++o)r+=Math.pow(a[o]-e[o],2);return Math.sqrt(r/t.length)}e.exports=n;var i=t("circumcenter")},{circumcenter:86}],88:[function(t,e,r){function n(t,e,r){return e<r?t<e?e:t>r?r:t:t<r?r:t>e?e:t}e.exports=n},{}],89:[function(t,e,r){"use strict";function n(t){var e=_(t);return[M(e,-1/0),M(e,1/0)]}function i(t,e){for(var r=new Array(e.length),n=0;n<e.length;++n){var i=e[n],a=t[i[0]],o=t[i[1]];r[n]=[M(Math.min(a[0],o[0]),-1/0),M(Math.min(a[1],o[1]),-1/0),M(Math.max(a[0],o[0]),1/0),M(Math.max(a[1],o[1]),1/0)]}return r}function a(t){for(var e=new Array(t.length),r=0;r<t.length;++r){var n=t[r];e[r]=[M(n[0],-1/0),M(n[1],-1/0),M(n[0],1/0),M(n[1],1/0)]}return e}function o(t,e,r){var n=[];return v(r,function(r,i){var a=e[r],o=e[i];if(a[0]!==o[0]&&a[0]!==o[1]&&a[1]!==o[0]&&a[1]!==o[1]){var s=t[a[0]],l=t[a[1]],u=t[o[0]],c=t[o[1]];y(s,l,u,c)&&n.push([r,i])}}),n}function s(t,e,r,n){var i=[];return v(r,n,function(r,n){var a=e[r];if(a[0]!==n&&a[1]!==n){var o=t[n],s=t[a[0]],l=t[a[1]];y(s,l,o,o)&&i.push([r,n])}}),i}function l(t,e,r,n,i){var a,o,s=t.map(function(t){return[b(t[0]),b(t[1])]});for(a=0;a<r.length;++a){var l=r[a];o=l[0];var u=l[1],c=e[o],h=e[u],f=k(w(t[c[0]]),w(t[c[1]]),w(t[h[0]]),w(t[h[1]]));if(f){var d=t.length;t.push([_(f[0]),_(f[1])]),s.push(f),n.push([o,d],[u,d])}}for(n.sort(function(t,e){if(t[0]!==e[0])return t[0]-e[0];var r=s[t[1]],n=s[e[1]];return x(r[0],n[0])||x(r[1],n[1])}),a=n.length-1;a>=0;--a){var p=n[a];o=p[0];var m=e[o],g=m[0],v=m[1],y=t[g],M=t[v];if((y[0]-M[0]||y[1]-M[1])<0){var A=g;g=v,v=A}m[0]=g;var T,S=m[1]=p[1];for(i&&(T=m[2]);a>0&&n[a-1][0]===o;){var p=n[--a],E=p[1];i?e.push([S,E,T]):e.push([S,E]),S=E}i?e.push([S,v,T]):e.push([S,v])}return s}function u(t,e,r){for(var i=e.length,a=new g(i),o=[],s=0;s<e.length;++s){var l=e[s],u=n(l[0]),c=n(l[1]);o.push([M(u[0],-1/0),M(c[0],-1/0),M(u[1],1/0),M(c[1],1/0)])}v(o,function(t,e){a.link(t,e)});for(var h=!0,f=new Array(i),s=0;s<i;++s){var d=a.find(s);d!==s&&(h=!1,t[d]=[Math.min(t[s][0],t[d][0]),Math.min(t[s][1],t[d][1])])}if(h)return null;for(var p=0,s=0;s<i;++s){var d=a.find(s);d===s?(f[s]=p,t[p++]=t[s]):f[s]=-1}t.length=p;for(var s=0;s<i;++s)f[s]<0&&(f[s]=f[a.find(s)]);return f}function c(t,e){return t[0]-e[0]||t[1]-e[1]}function h(t,e){var r=t[0]-e[0]||t[1]-e[1];return r||(t[2]<e[2]?-1:t[2]>e[2]?1:0)}
function f(t,e,r){if(0!==t.length){if(e)for(var n=0;n<t.length;++n){var i=t[n],a=e[i[0]],o=e[i[1]];i[0]=Math.min(a,o),i[1]=Math.max(a,o)}else for(var n=0;n<t.length;++n){var i=t[n],a=i[0],o=i[1];i[0]=Math.min(a,o),i[1]=Math.max(a,o)}r?t.sort(h):t.sort(c);for(var s=1,n=1;n<t.length;++n){var l=t[n-1],u=t[n];(u[0]!==l[0]||u[1]!==l[1]||r&&u[2]!==l[2])&&(t[s++]=u)}t.length=s}}function d(t,e,r){var n=u(t,[],a(t));return f(e,n,r),!!n}function p(t,e,r){var n=i(t,e),c=o(t,e,n),h=a(t),d=s(t,e,n,h),p=l(t,e,c,d,r),m=u(t,p,h);return f(e,m,r),!!m||(c.length>0||d.length>0)}function m(t,e,r){var n;if(r){n=e;for(var i=new Array(e.length),a=0;a<e.length;++a){var o=e[a];i[a]=[o[0],o[1],r[a]]}e=i}for(var s=d(t,e,!!r);p(t,e,!!r);)s=!0;if(r&&s){n.length=0,r.length=0;for(var a=0;a<e.length;++a){var o=e[a];n.push([o[0],o[1]]),r.push(o[2])}}return s}e.exports=m;var g=t("union-find"),v=t("box-intersect"),y=t("robust-segment-intersect"),b=t("big-rat"),x=t("big-rat/cmp"),_=t("big-rat/to-float"),w=t("rat-vec"),M=t("nextafter"),k=t("./lib/rat-seg-intersect")},{"./lib/rat-seg-intersect":90,"big-rat":53,"big-rat/cmp":51,"big-rat/to-float":65,"box-intersect":70,nextafter:468,"rat-vec":495,"robust-segment-intersect":511,"union-find":542}],90:[function(t,e,r){"use strict";function n(t,e){return s(a(t[0],e[1]),a(t[1],e[0]))}function i(t,e,r,i){var a=u(e,t),s=u(i,r),f=n(a,s);if(0===l(f))return null;var d=u(t,r),p=n(s,d),m=o(p,f),g=h(a,m);return c(t,g)}e.exports=i;var a=t("big-rat/mul"),o=t("big-rat/div"),s=t("big-rat/sub"),l=t("big-rat/sign"),u=t("rat-vec/sub"),c=t("rat-vec/add"),h=t("rat-vec/muls")},{"big-rat/div":52,"big-rat/mul":62,"big-rat/sign":63,"big-rat/sub":64,"rat-vec/add":494,"rat-vec/muls":496,"rat-vec/sub":497}],91:[function(t,e,r){(function(t){var r=function(){"use strict";function e(r,n,i,a){function s(r,i){if(null===r)return null;if(0==i)return r;var h,f;if("object"!=typeof r)return r;if(e.__isArray(r))h=[];else if(e.__isRegExp(r))h=new RegExp(r.source,o(r)),r.lastIndex&&(h.lastIndex=r.lastIndex);else if(e.__isDate(r))h=new Date(r.getTime());else{if(c&&t.isBuffer(r))return h=new t(r.length),r.copy(h),h;void 0===a?(f=Object.getPrototypeOf(r),h=Object.create(f)):(h=Object.create(a),f=a)}if(n){var d=l.indexOf(r);if(-1!=d)return u[d];l.push(r),u.push(h)}for(var p in r){var m;f&&(m=Object.getOwnPropertyDescriptor(f,p)),m&&null==m.set||(h[p]=s(r[p],i-1))}return h}"object"==typeof n&&(i=n.depth,a=n.prototype,n.filter,n=n.circular);var l=[],u=[],c=void 0!==t;return void 0===n&&(n=!0),void 0===i&&(i=1/0),s(r,i)}function r(t){return Object.prototype.toString.call(t)}function n(t){return"object"==typeof t&&"[object Date]"===r(t)}function i(t){return"object"==typeof t&&"[object Array]"===r(t)}function a(t){return"object"==typeof t&&"[object RegExp]"===r(t)}function o(t){var e="";return t.global&&(e+="g"),t.ignoreCase&&(e+="i"),t.multiline&&(e+="m"),e}return e.clonePrototype=function(t){if(null===t)return null;var e=function(){};return e.prototype=t,new e},e.__objToStr=r,e.__isDate=n,e.__isArray=i,e.__isRegExp=a,e.__getRegExpFlags=o,e}();"object"==typeof e&&e.exports&&(e.exports=r)}).call(this,t("buffer").Buffer)},{buffer:77}],92:[function(t,e,r){"use strict";function n(t,e){null==e&&(e=!0);var r=t[0],n=t[1],i=t[2],o=t[3];return null==o&&(o=e?1:255),e&&(r*=255,n*=255,i*=255,o*=255),r=255&a(r,0,255),n=255&a(n,0,255),i=255&a(i,0,255),o=255&a(o,0,255),16777216*r+(n<<16)+(i<<8)+o}function i(t,e){t=+t;var r=t>>>24,n=(16711680&t)>>>16,i=(65280&t)>>>8,a=255&t;return!1===e?[r,n,i,a]:[r/255,n/255,i/255,a/255]}var a=t("clamp");e.exports=n,e.exports.to=n,e.exports.from=i},{clamp:88}],93:[function(t,e,r){"use strict";e.exports={aliceblue:[240,248,255],antiquewhite:[250,235,215],aqua:[0,255,255],aquamarine:[127,255,212],azure:[240,255,255],beige:[245,245,220],bisque:[255,228,196],black:[0,0,0],blanchedalmond:[255,235,205],blue:[0,0,255],blueviolet:[138,43,226],brown:[165,42,42],burlywood:[222,184,135],cadetblue:[95,158,160],chartreuse:[127,255,0],chocolate:[210,105,30],coral:[255,127,80],cornflowerblue:[100,149,237],cornsilk:[255,248,220],crimson:[220,20,60],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgoldenrod:[184,134,11],darkgray:[169,169,169],darkgreen:[0,100,0],darkgrey:[169,169,169],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkseagreen:[143,188,143],darkslateblue:[72,61,139],darkslategray:[47,79,79],darkslategrey:[47,79,79],darkturquoise:[0,206,209],darkviolet:[148,0,211],deeppink:[255,20,147],deepskyblue:[0,191,255],dimgray:[105,105,105],dimgrey:[105,105,105],dodgerblue:[30,144,255],firebrick:[178,34,34],floralwhite:[255,250,240],forestgreen:[34,139,34],fuchsia:[255,0,255],gainsboro:[220,220,220],ghostwhite:[248,248,255],gold:[255,215,0],goldenrod:[218,165,32],gray:[128,128,128],green:[0,128,0],greenyellow:[173,255,47],grey:[128,128,128],honeydew:[240,255,240],hotpink:[255,105,180],indianred:[205,92,92],indigo:[75,0,130],ivory:[255,255,240],khaki:[240,230,140],lavender:[230,230,250],lavenderblush:[255,240,245],lawngreen:[124,252,0],lemonchiffon:[255,250,205],lightblue:[173,216,230],lightcoral:[240,128,128],lightcyan:[224,255,255],lightgoldenrodyellow:[250,250,210],lightgray:[211,211,211],lightgreen:[144,238,144],lightgrey:[211,211,211],lightpink:[255,182,193],lightsalmon:[255,160,122],lightseagreen:[32,178,170],lightskyblue:[135,206,250],lightslategray:[119,136,153],lightslategrey:[119,136,153],lightsteelblue:[176,196,222],lightyellow:[255,255,224],lime:[0,255,0],limegreen:[50,205,50],linen:[250,240,230],magenta:[255,0,255],maroon:[128,0,0],mediumaquamarine:[102,205,170],mediumblue:[0,0,205],mediumorchid:[186,85,211],mediumpurple:[147,112,219],mediumseagreen:[60,179,113],mediumslateblue:[123,104,238],mediumspringgreen:[0,250,154],mediumturquoise:[72,209,204],mediumvioletred:[199,21,133],midnightblue:[25,25,112],mintcream:[245,255,250],mistyrose:[255,228,225],moccasin:[255,228,181],navajowhite:[255,222,173],navy:[0,0,128],oldlace:[253,245,230],olive:[128,128,0],olivedrab:[107,142,35],orange:[255,165,0],orangered:[255,69,0],orchid:[218,112,214],palegoldenrod:[238,232,170],palegreen:[152,251,152],paleturquoise:[175,238,238],palevioletred:[219,112,147],papayawhip:[255,239,213],peachpuff:[255,218,185],peru:[205,133,63],pink:[255,192,203],plum:[221,160,221],powderblue:[176,224,230],purple:[128,0,128],rebeccapurple:[102,51,153],red:[255,0,0],rosybrown:[188,143,143],royalblue:[65,105,225],saddlebrown:[139,69,19],salmon:[250,128,114],sandybrown:[244,164,96],seagreen:[46,139,87],seashell:[255,245,238],sienna:[160,82,45],silver:[192,192,192],skyblue:[135,206,235],slateblue:[106,90,205],slategray:[112,128,144],slategrey:[112,128,144],snow:[255,250,250],springgreen:[0,255,127],steelblue:[70,130,180],tan:[210,180,140],teal:[0,128,128],thistle:[216,191,216],tomato:[255,99,71],turquoise:[64,224,208],violet:[238,130,238],wheat:[245,222,179],white:[255,255,255],whitesmoke:[245,245,245],yellow:[255,255,0],yellowgreen:[154,205,50]}},{}],94:[function(t,e,r){(function(r){"use strict";function n(t){var e,n,s=[],l=1;if("string"==typeof t)if(i[t])s=i[t].slice(),n="rgb";else if("transparent"===t)l=0,n="rgb",s=[0,0,0];else if(/^#[A-Fa-f0-9]+$/.test(t)){var u=t.slice(1),c=u.length,h=c<=4;l=1,h?(s=[parseInt(u[0]+u[0],16),parseInt(u[1]+u[1],16),parseInt(u[2]+u[2],16)],4===c&&(l=parseInt(u[3]+u[3],16)/255)):(s=[parseInt(u[0]+u[1],16),parseInt(u[2]+u[3],16),parseInt(u[4]+u[5],16)],8===c&&(l=parseInt(u[6]+u[7],16)/255)),s[0]||(s[0]=0),s[1]||(s[1]=0),s[2]||(s[2]=0),n="rgb"}else if(e=/^((?:rgb|hs[lvb]|hwb|cmyk?|xy[zy]|gray|lab|lchu?v?|[ly]uv|lms)a?)\s*\(([^\)]*)\)/.exec(t)){var f=e[1],u=f.replace(/a$/,"");n=u;var c="cmyk"===u?4:"gray"===u?1:3;s=e[2].trim().split(/\s*,\s*/).map(function(t,e){if(/%$/.test(t))return e===c?parseFloat(t)/100:"rgb"===u?255*parseFloat(t)/100:parseFloat(t);if("h"===u[e]){if(/deg$/.test(t))return parseFloat(t);if(void 0!==o[t])return o[t]}return parseFloat(t)}),f===u&&s.push(1),l=void 0===s[c]?1:s[c],s=s.slice(0,c)}else t.length>10&&/[0-9](?:\s|\/)/.test(t)&&(s=t.match(/([0-9]+)/g).map(function(t){return parseFloat(t)}),n=t.match(/([a-z])/gi).join("").toLowerCase());else"number"==typeof t?(n="rgb",s=[t>>>16,(65280&t)>>>8,255&t]):a(t)?(null!=t.r?(s=[t.r,t.g,t.b],n="rgb"):null!=t.red?(s=[t.red,t.green,t.blue],n="rgb"):null!=t.h?(s=[t.h,t.s,t.l],n="hsl"):null!=t.hue&&(s=[t.hue,t.saturation,t.lightness],n="hsl"),null!=t.a?l=t.a:null!=t.alpha?l=t.alpha:null!=t.opacity&&(l=t.opacity/100)):(Array.isArray(t)||r.ArrayBuffer&&ArrayBuffer.isView&&ArrayBuffer.isView(t))&&(s=[t[0],t[1],t[2]],n="rgb",l=4===t.length?t[3]:1);return{space:n,values:s,alpha:l}}e.exports=n;var i=t("color-name"),a=t("is-plain-obj"),o={red:0,orange:60,yellow:120,green:180,blue:240,purple:300}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"color-name":93,"is-plain-obj":297}],95:[function(t,e,r){"use strict";var n=t("color-parse"),i=t("color-space/hsl"),a=t("clamp");e.exports=function(t,e){if(Array.isArray(t))return t;null==e&&(e=!0);var r=n(t);if(!r.space)return[];var o,s=r.values,l=s.length;for(o=0;o<l;o++)s[o]=a(s[o],0,255);if("h"===r.space[0]&&(s=i.rgb(s)),e)for(o=0;o<l;o++)s[o]/=255;return s.push(a(r.alpha,0,1)),s}},{clamp:88,"color-parse":94,"color-space/hsl":96}],96:[function(t,e,r){"use strict";var n=t("./rgb");e.exports={name:"hsl",min:[0,0,0],max:[360,100,100],channel:["hue","saturation","lightness"],alias:["HSL"],rgb:function(t){var e,r,n,i,a,o=t[0]/360,s=t[1]/100,l=t[2]/100;if(0===s)return a=255*l,[a,a,a];r=l<.5?l*(1+s):l+s-l*s,e=2*l-r,i=[0,0,0];for(var u=0;u<3;u++)n=o+1/3*-(u-1),n<0?n++:n>1&&n--,a=6*n<1?e+6*(r-e)*n:2*n<1?r:3*n<2?e+(r-e)*(2/3-n)*6:e,i[u]=255*a;return i}},n.hsl=function(t){var e,r,n,i=t[0]/255,a=t[1]/255,o=t[2]/255,s=Math.min(i,a,o),l=Math.max(i,a,o),u=l-s;return l===s?e=0:i===l?e=(a-o)/u:a===l?e=2+(o-i)/u:o===l&&(e=4+(i-a)/u),e=Math.min(60*e,360),e<0&&(e+=360),n=(s+l)/2,r=l===s?0:n<=.5?u/(l+s):u/(2-l-s),[e,100*r,100*n]}},{"./rgb":97}],97:[function(t,e,r){"use strict";e.exports={name:"rgb",min:[0,0,0],max:[255,255,255],channel:["red","green","blue"],alias:["RGB"]}},{}],98:[function(t,e,r){e.exports={jet:[{index:0,rgb:[0,0,131]},{index:.125,rgb:[0,60,170]},{index:.375,rgb:[5,255,255]},{index:.625,rgb:[255,255,0]},{index:.875,rgb:[250,0,0]},{index:1,rgb:[128,0,0]}],hsv:[{index:0,rgb:[255,0,0]},{index:.169,rgb:[253,255,2]},{index:.173,rgb:[247,255,2]},{index:.337,rgb:[0,252,4]},{index:.341,rgb:[0,252,10]},{index:.506,rgb:[1,249,255]},{index:.671,rgb:[2,0,253]},{index:.675,rgb:[8,0,253]},{index:.839,rgb:[255,0,251]},{index:.843,rgb:[255,0,245]},{index:1,rgb:[255,0,6]}],hot:[{index:0,rgb:[0,0,0]},{index:.3,rgb:[230,0,0]},{index:.6,rgb:[255,210,0]},{index:1,rgb:[255,255,255]}],cool:[{index:0,rgb:[0,255,255]},{index:1,rgb:[255,0,255]}],spring:[{index:0,rgb:[255,0,255]},{index:1,rgb:[255,255,0]}],summer:[{index:0,rgb:[0,128,102]},{index:1,rgb:[255,255,102]}],autumn:[{index:0,rgb:[255,0,0]},{index:1,rgb:[255,255,0]}],winter:[{index:0,rgb:[0,0,255]},{index:1,rgb:[0,255,128]}],bone:[{index:0,rgb:[0,0,0]},{index:.376,rgb:[84,84,116]},{index:.753,rgb:[169,200,200]},{index:1,rgb:[255,255,255]}],copper:[{index:0,rgb:[0,0,0]},{index:.804,rgb:[255,160,102]},{index:1,rgb:[255,199,127]}],greys:[{index:0,rgb:[0,0,0]},{index:1,rgb:[255,255,255]}],yignbu:[{index:0,rgb:[8,29,88]},{index:.125,rgb:[37,52,148]},{index:.25,rgb:[34,94,168]},{index:.375,rgb:[29,145,192]},{index:.5,rgb:[65,182,196]},{index:.625,rgb:[127,205,187]},{index:.75,rgb:[199,233,180]},{index:.875,rgb:[237,248,217]},{index:1,rgb:[255,255,217]}],greens:[{index:0,rgb:[0,68,27]},{index:.125,rgb:[0,109,44]},{index:.25,rgb:[35,139,69]},{index:.375,rgb:[65,171,93]},{index:.5,rgb:[116,196,118]},{index:.625,rgb:[161,217,155]},{index:.75,rgb:[199,233,192]},{index:.875,rgb:[229,245,224]},{index:1,rgb:[247,252,245]}],yiorrd:[{index:0,rgb:[128,0,38]},{index:.125,rgb:[189,0,38]},{index:.25,rgb:[227,26,28]},{index:.375,rgb:[252,78,42]},{index:.5,rgb:[253,141,60]},{index:.625,rgb:[254,178,76]},{index:.75,rgb:[254,217,118]},{index:.875,rgb:[255,237,160]},{index:1,rgb:[255,255,204]}],bluered:[{index:0,rgb:[0,0,255]},{index:1,rgb:[255,0,0]}],rdbu:[{index:0,rgb:[5,10,172]},{index:.35,rgb:[106,137,247]},{index:.5,rgb:[190,190,190]},{index:.6,rgb:[220,170,132]},{index:.7,rgb:[230,145,90]},{index:1,rgb:[178,10,28]}],picnic:[{index:0,rgb:[0,0,255]},{index:.1,rgb:[51,153,255]},{index:.2,rgb:[102,204,255]},{index:.3,rgb:[153,204,255]},{index:.4,rgb:[204,204,255]},{index:.5,rgb:[255,255,255]},{index:.6,rgb:[255,204,255]},{index:.7,rgb:[255,153,255]},{index:.8,rgb:[255,102,204]},{index:.9,rgb:[255,102,102]},{index:1,rgb:[255,0,0]}],rainbow:[{index:0,rgb:[150,0,90]},{index:.125,rgb:[0,0,200]},{index:.25,rgb:[0,25,255]},{index:.375,rgb:[0,152,255]},{index:.5,rgb:[44,255,150]},{index:.625,rgb:[151,255,0]},{index:.75,rgb:[255,234,0]},{index:.875,rgb:[255,111,0]},{index:1,rgb:[255,0,0]}],portland:[{index:0,rgb:[12,51,131]},{index:.25,rgb:[10,136,186]},{index:.5,rgb:[242,211,56]},{index:.75,rgb:[242,143,56]},{index:1,rgb:[217,30,30]}],blackbody:[{index:0,rgb:[0,0,0]},{index:.2,rgb:[230,0,0]},{index:.4,rgb:[230,210,0]},{index:.7,rgb:[255,255,255]},{index:1,rgb:[160,200,255]}],earth:[{index:0,rgb:[0,0,130]},{index:.1,rgb:[0,180,180]},{index:.2,rgb:[40,210,40]},{index:.4,rgb:[230,230,50]},{index:.6,rgb:[120,70,20]},{index:1,rgb:[255,255,255]}],electric:[{index:0,rgb:[0,0,0]},{index:.15,rgb:[30,0,100]},{index:.4,rgb:[120,0,100]},{index:.6,rgb:[160,90,0]},{index:.8,rgb:[230,200,0]},{index:1,rgb:[255,250,220]}],alpha:[{index:0,rgb:[255,255,255,0]},{index:0,rgb:[255,255,255,1]}],viridis:[{index:0,rgb:[68,1,84]},{index:.13,rgb:[71,44,122]},{index:.25,rgb:[59,81,139]},{index:.38,rgb:[44,113,142]},{index:.5,rgb:[33,144,141]},{index:.63,rgb:[39,173,129]},{index:.75,rgb:[92,200,99]},{index:.88,rgb:[170,220,50]},{index:1,rgb:[253,231,37]}],inferno:[{index:0,rgb:[0,0,4]},{index:.13,rgb:[31,12,72]},{index:.25,rgb:[85,15,109]},{index:.38,rgb:[136,34,106]},{index:.5,rgb:[186,54,85]},{index:.63,rgb:[227,89,51]},{index:.75,rgb:[249,140,10]},{index:.88,rgb:[249,201,50]},{index:1,rgb:[252,255,164]}],magma:[{index:0,rgb:[0,0,4]},{index:.13,rgb:[28,16,68]},{index:.25,rgb:[79,18,123]},{index:.38,rgb:[129,37,129]},{index:.5,rgb:[181,54,122]},{index:.63,rgb:[229,80,100]},{index:.75,rgb:[251,135,97]},{index:.88,rgb:[254,194,135]},{index:1,rgb:[252,253,191]}],plasma:[{index:0,rgb:[13,8,135]},{index:.13,rgb:[75,3,161]},{index:.25,rgb:[125,3,168]},{index:.38,rgb:[168,34,150]},{index:.5,rgb:[203,70,121]},{index:.63,rgb:[229,107,93]},{index:.75,rgb:[248,148,65]},{index:.88,rgb:[253,195,40]},{index:1,rgb:[240,249,33]}],warm:[{index:0,rgb:[125,0,179]},{index:.13,rgb:[172,0,187]},{index:.25,rgb:[219,0,170]},{index:.38,rgb:[255,0,130]},{index:.5,rgb:[255,63,74]},{index:.63,rgb:[255,123,0]},{index:.75,rgb:[234,176,0]},{index:.88,rgb:[190,228,0]},{index:1,rgb:[147,255,0]}],cool:[{index:0,rgb:[125,0,179]},{index:.13,rgb:[116,0,218]},{index:.25,rgb:[98,74,237]},{index:.38,rgb:[68,146,231]},{index:.5,rgb:[0,204,197]},{index:.63,rgb:[0,247,146]},{index:.75,rgb:[0,255,88]},{index:.88,rgb:[40,255,8]},{index:1,rgb:[147,255,0]}],"rainbow-soft":[{index:0,rgb:[125,0,179]},{index:.1,rgb:[199,0,180]},{index:.2,rgb:[255,0,121]},{index:.3,rgb:[255,108,0]},{index:.4,rgb:[222,194,0]},{index:.5,rgb:[150,255,0]},{index:.6,rgb:[0,255,55]},{index:.7,rgb:[0,246,150]},{index:.8,rgb:[50,167,222]},{index:.9,rgb:[103,51,235]},{index:1,rgb:[124,0,186]}],bathymetry:[{index:0,rgb:[40,26,44]},{index:.13,rgb:[59,49,90]},{index:.25,rgb:[64,76,139]},{index:.38,rgb:[63,110,151]},{index:.5,rgb:[72,142,158]},{index:.63,rgb:[85,174,163]},{index:.75,rgb:[120,206,163]},{index:.88,rgb:[187,230,172]},{index:1,rgb:[253,254,204]}],cdom:[{index:0,rgb:[47,15,62]},{index:.13,rgb:[87,23,86]},{index:.25,rgb:[130,28,99]},{index:.38,rgb:[171,41,96]},{index:.5,rgb:[206,67,86]},{index:.63,rgb:[230,106,84]},{index:.75,rgb:[242,149,103]},{index:.88,rgb:[249,193,135]},{index:1,rgb:[254,237,176]}],chlorophyll:[{index:0,rgb:[18,36,20]},{index:.13,rgb:[25,63,41]},{index:.25,rgb:[24,91,59]},{index:.38,rgb:[13,119,72]},{index:.5,rgb:[18,148,80]},{index:.63,rgb:[80,173,89]},{index:.75,rgb:[132,196,122]},{index:.88,rgb:[175,221,162]},{index:1,rgb:[215,249,208]}],density:[{index:0,rgb:[54,14,36]},{index:.13,rgb:[89,23,80]},{index:.25,rgb:[110,45,132]},{index:.38,rgb:[120,77,178]},{index:.5,rgb:[120,113,213]},{index:.63,rgb:[115,151,228]},{index:.75,rgb:[134,185,227]},{index:.88,rgb:[177,214,227]},{index:1,rgb:[230,241,241]}],"freesurface-blue":[{index:0,rgb:[30,4,110]},{index:.13,rgb:[47,14,176]},{index:.25,rgb:[41,45,236]},{index:.38,rgb:[25,99,212]},{index:.5,rgb:[68,131,200]},{index:.63,rgb:[114,156,197]},{index:.75,rgb:[157,181,203]},{index:.88,rgb:[200,208,216]},{index:1,rgb:[241,237,236]}],"freesurface-red":[{index:0,rgb:[60,9,18]},{index:.13,rgb:[100,17,27]},{index:.25,rgb:[142,20,29]},{index:.38,rgb:[177,43,27]},{index:.5,rgb:[192,87,63]},{index:.63,rgb:[205,125,105]},{index:.75,rgb:[216,162,148]},{index:.88,rgb:[227,199,193]},{index:1,rgb:[241,237,236]}],oxygen:[{index:0,rgb:[64,5,5]},{index:.13,rgb:[106,6,15]},{index:.25,rgb:[144,26,7]},{index:.38,rgb:[168,64,3]},{index:.5,rgb:[188,100,4]},{index:.63,rgb:[206,136,11]},{index:.75,rgb:[220,174,25]},{index:.88,rgb:[231,215,44]},{index:1,rgb:[248,254,105]}],par:[{index:0,rgb:[51,20,24]},{index:.13,rgb:[90,32,35]},{index:.25,rgb:[129,44,34]},{index:.38,rgb:[159,68,25]},{index:.5,rgb:[182,99,19]},{index:.63,rgb:[199,134,22]},{index:.75,rgb:[212,171,35]},{index:.88,rgb:[221,210,54]},{index:1,rgb:[225,253,75]}],phase:[{index:0,rgb:[145,105,18]},{index:.13,rgb:[184,71,38]},{index:.25,rgb:[186,58,115]},{index:.38,rgb:[160,71,185]},{index:.5,rgb:[110,97,218]},{index:.63,rgb:[50,123,164]},{index:.75,rgb:[31,131,110]},{index:.88,rgb:[77,129,34]},{index:1,rgb:[145,105,18]}],salinity:[{index:0,rgb:[42,24,108]},{index:.13,rgb:[33,50,162]},{index:.25,rgb:[15,90,145]},{index:.38,rgb:[40,118,137]},{index:.5,rgb:[59,146,135]},{index:.63,rgb:[79,175,126]},{index:.75,rgb:[120,203,104]},{index:.88,rgb:[193,221,100]},{index:1,rgb:[253,239,154]}],temperature:[{index:0,rgb:[4,35,51]},{index:.13,rgb:[23,51,122]},{index:.25,rgb:[85,59,157]},{index:.38,rgb:[129,79,143]},{index:.5,rgb:[175,95,130]},{index:.63,rgb:[222,112,101]},{index:.75,rgb:[249,146,66]},{index:.88,rgb:[249,196,65]},{index:1,rgb:[232,250,91]}],turbidity:[{index:0,rgb:[34,31,27]},{index:.13,rgb:[65,50,41]},{index:.25,rgb:[98,69,52]},{index:.38,rgb:[131,89,57]},{index:.5,rgb:[161,112,59]},{index:.63,rgb:[185,140,66]},{index:.75,rgb:[202,174,88]},{index:.88,rgb:[216,209,126]},{index:1,rgb:[233,246,171]}],"velocity-blue":[{index:0,rgb:[17,32,64]},{index:.13,rgb:[35,52,116]},{index:.25,rgb:[29,81,156]},{index:.38,rgb:[31,113,162]},{index:.5,rgb:[50,144,169]},{index:.63,rgb:[87,173,176]},{index:.75,rgb:[149,196,189]},{index:.88,rgb:[203,221,211]},{index:1,rgb:[254,251,230]}],"velocity-green":[{index:0,rgb:[23,35,19]},{index:.13,rgb:[24,64,38]},{index:.25,rgb:[11,95,45]},{index:.38,rgb:[39,123,35]},{index:.5,rgb:[95,146,12]},{index:.63,rgb:[152,165,18]},{index:.75,rgb:[201,186,69]},{index:.88,rgb:[233,216,137]},{index:1,rgb:[255,253,205]}],cubehelix:[{index:0,rgb:[0,0,0]},{index:.07,rgb:[22,5,59]},{index:.13,rgb:[60,4,105]},{index:.2,rgb:[109,1,135]},{index:.27,rgb:[161,0,147]},{index:.33,rgb:[210,2,142]},{index:.4,rgb:[251,11,123]},{index:.47,rgb:[255,29,97]},{index:.53,rgb:[255,54,69]},{index:.6,rgb:[255,85,46]},{index:.67,rgb:[255,120,34]},{index:.73,rgb:[255,157,37]},{index:.8,rgb:[241,191,57]},{index:.87,rgb:[224,220,93]},{index:.93,rgb:[218,241,142]},{index:1,rgb:[227,253,198]}]}},{}],99:[function(t,e,r){"use strict";function n(t){var e,r,n,u,c,h,f,d,p,m,g,v,y,b=[],x=[],_=[],w=[];if(o.isPlainObject(t)||(t={}),p=t.nshades||72,d=t.format||"hex",f=t.colormap,f||(f="jet"),"string"==typeof f){if(f=f.toLowerCase(),!l[f])throw Error(f+" not a supported colorscale");h=s(l[f])}else{if(!Array.isArray(f))throw Error("unsupported colormap option",f);h=s(f)}if(h.length>p)throw new Error(f+" map requires nshades to be at least size "+h.length);for(g=Array.isArray(t.alpha)?2!==t.alpha.length?[1,1]:s(t.alpha):"number"==typeof t.alpha?[t.alpha,t.alpha]:[1,1],e=h.map(function(t){return Math.round(t.index*p)}),g[0]<0&&(g[0]=0),g[1]<0&&(g[0]=0),g[0]>1&&(g[0]=1),g[1]>1&&(g[0]=1),y=0;y<e.length;++y)v=h[y].index,r=h[y].rgb,4===r.length&&r[3]>=0&&r[3]<=1||(r[3]=g[0]+(g[1]-g[0])*v);for(y=0;y<e.length-1;++y)c=e[y+1]-e[y],n=h[y].rgb,u=h[y+1].rgb,b=b.concat(o.linspace(n[0],u[0],c)),x=x.concat(o.linspace(n[1],u[1],c)),_=_.concat(o.linspace(n[2],u[2],c)),w=w.concat(o.linspace(n[3],u[3],c));return b=b.map(Math.round),x=x.map(Math.round),_=_.map(Math.round),m=o.zip(b,x,_,w),"hex"===d&&(m=m.map(i)),"rgbaString"===d&&(m=m.map(a)),m}function i(t){for(var e,r="#",n=0;n<3;++n)e=t[n],e=e.toString(16),r+=("00"+e).substr(e.length);return r}function a(t){return"rgba("+t.join(",")+")"}var o=t("arraytools"),s=t("clone"),l=t("./colorScales");e.exports=n},{"./colorScales":98,arraytools:46,clone:91}],100:[function(t,e,r){"use strict";function n(t,e,r){var n=s(t[0],-e[0]),i=s(t[1],-e[1]),a=s(r[0],-e[0]),o=s(r[1],-e[1]),c=u(l(n,a),l(i,o));return c[c.length-1]>=0}function i(t,e,r,i){var s=a(e,r,i);if(0===s){var l=o(a(t,e,r)),u=o(a(t,e,i));if(l===u){if(0===l){var c=n(t,e,r);return c===n(t,e,i)?0:c?1:-1}return 0}return 0===u?l>0?-1:n(t,e,i)?-1:1:0===l?u>0?1:n(t,e,r)?1:-1:o(u-l)}var h=a(t,e,r);return h>0?s>0&&a(t,e,i)>0?1:-1:h<0?s>0||a(t,e,i)>0?1:-1:a(t,e,i)>0?1:n(t,e,r)?1:-1}e.exports=i;var a=t("robust-orientation"),o=t("signum"),s=t("two-sum"),l=t("robust-product"),u=t("robust-sum")},{"robust-orientation":508,"robust-product":509,"robust-sum":513,signum:515,"two-sum":540}],101:[function(t,e,r){function n(t,e){return t-e}function i(t,e){var r=t.length,i=t.length-e.length;if(i)return i;switch(r){case 0:return 0;case 1:return t[0]-e[0];case 2:return t[0]+t[1]-e[0]-e[1]||a(t[0],t[1])-a(e[0],e[1]);case 3:var o=t[0]+t[1],s=e[0]+e[1];if(i=o+t[2]-(s+e[2]))return i;var l=a(t[0],t[1]),u=a(e[0],e[1]);return a(l,t[2])-a(u,e[2])||a(l+t[2],o)-a(u+e[2],s);case 4:var c=t[0],h=t[1],f=t[2],d=t[3],p=e[0],m=e[1],g=e[2],v=e[3];return c+h+f+d-(p+m+g+v)||a(c,h,f,d)-a(p,m,g,v,p)||a(c+h,c+f,c+d,h+f,h+d,f+d)-a(p+m,p+g,p+v,m+g,m+v,g+v)||a(c+h+f,c+h+d,c+f+d,h+f+d)-a(p+m+g,p+m+v,p+g+v,m+g+v);default:for(var y=t.slice().sort(n),b=e.slice().sort(n),x=0;x<r;++x)if(i=y[x]-b[x])return i;return 0}}e.exports=i;var a=Math.min},{}],102:[function(t,e,r){"use strict";function n(t,e){return i(t,e)||a(t)-a(e)}var i=t("compare-cell"),a=t("cell-orientation");e.exports=n},{"cell-orientation":85,"compare-cell":101}],103:[function(t,e,r){"use strict";function n(t){var e=t.length;if(0===e)return[];if(1===e)return[[0]];var r=t[0].length;return 0===r?[]:1===r?i(t):2===r?a(t):o(t,r)}var i=t("./lib/ch1d"),a=t("./lib/ch2d"),o=t("./lib/chnd");e.exports=n},{"./lib/ch1d":104,"./lib/ch2d":105,"./lib/chnd":106}],104:[function(t,e,r){"use strict";function n(t){for(var e=0,r=0,n=1;n<t.length;++n)t[n][0]<t[e][0]&&(e=n),t[n][0]>t[r][0]&&(r=n);return e<r?[[e],[r]]:e>r?[[r],[e]]:[[e]]}e.exports=n},{}],105:[function(t,e,r){"use strict";function n(t){var e=i(t),r=e.length;if(r<=2)return[];for(var n=new Array(r),a=e[r-1],o=0;o<r;++o){var s=e[o];n[o]=[a,s],a=s}return n}e.exports=n;var i=t("monotone-convex-hull-2d")},{"monotone-convex-hull-2d":451}],106:[function(t,e,r){"use strict";function n(t,e){for(var r=t.length,n=new Array(r),i=0;i<e.length;++i)n[i]=t[e[i]];for(var a=e.length,i=0;i<r;++i)e.indexOf(i)<0&&(n[a++]=t[i]);return n}function i(t,e){for(var r=t.length,n=e.length,i=0;i<r;++i)for(var a=t[i],o=0;o<a.length;++o){var s=a[o];if(s<n)a[o]=e[s];else{s-=n;for(var l=0;l<n;++l)s>=e[l]&&(s+=1);a[o]=s}}return t}function a(t,e){try{return o(t,!0)}catch(u){var r=s(t);if(r.length<=e)return[];var a=n(t,r),l=o(a,!0);return i(l,r)}}e.exports=a;var o=t("incremental-convex-hull"),s=t("affine-hull")},{"affine-hull":41,"incremental-convex-hull":290}],107:[function(t,e,r){e.exports={AFG:"afghan",ALA:"\\b\\wland",ALB:"albania",DZA:"algeria",ASM:"^(?=.*americ).*samoa",AND:"andorra",AGO:"angola",AIA:"anguill?a",ATA:"antarctica",ATG:"antigua",ARG:"argentin",ARM:"armenia",ABW:"^(?!.*bonaire).*\\baruba",AUS:"australia",AUT:"^(?!.*hungary).*austria|\\baustri.*\\bemp",AZE:"azerbaijan",BHS:"bahamas",BHR:"bahrain",BGD:"bangladesh|^(?=.*east).*paki?stan",BRB:"barbados",BLR:"belarus|byelo",BEL:"^(?!.*luxem).*belgium",BLZ:"belize|^(?=.*british).*honduras",BEN:"benin|dahome",BMU:"bermuda",BTN:"bhutan",BOL:"bolivia",BES:"^(?=.*bonaire).*eustatius|^(?=.*carib).*netherlands|\\bbes.?islands",BIH:"herzegovina|bosnia",BWA:"botswana|bechuana",BVT:"bouvet",BRA:"brazil",IOT:"british.?indian.?ocean",BRN:"brunei",BGR:"bulgaria",BFA:"burkina|\\bfaso|upper.?volta",BDI:"burundi",CPV:"verde",KHM:"cambodia|kampuchea|khmer",CMR:"cameroon",CAN:"canada",CYM:"cayman",CAF:"\\bcentral.african.republic",TCD:"\\bchad",CHL:"\\bchile",CHN:"^(?!.*\\bmac)(?!.*\\bhong)(?!.*\\btai)(?!.*\\brep).*china|^(?=.*peo)(?=.*rep).*china",CXR:"christmas",CCK:"\\bcocos|keeling",COL:"colombia",COM:"comoro",COG:"^(?!.*\\bdem)(?!.*\\bd[\\.]?r)(?!.*kinshasa)(?!.*zaire)(?!.*belg)(?!.*l.opoldville)(?!.*free).*\\bcongo",COK:"\\bcook",CRI:"costa.?rica",CIV:"ivoire|ivory",HRV:"croatia",CUB:"\\bcuba",CUW:"^(?!.*bonaire).*\\bcura(c|\xe7)ao",CYP:"cyprus",CSK:"czechoslovakia",CZE:"^(?=.*rep).*czech|czechia|bohemia",COD:"\\bdem.*congo|congo.*\\bdem|congo.*\\bd[\\.]?r|\\bd[\\.]?r.*congo|belgian.?congo|congo.?free.?state|kinshasa|zaire|l.opoldville|drc|droc|rdc",DNK:"denmark",DJI:"djibouti",DMA:"dominica(?!n)",DOM:"dominican.rep",ECU:"ecuador",EGY:"egypt",SLV:"el.?salvador",GNQ:"guine.*eq|eq.*guine|^(?=.*span).*guinea",ERI:"eritrea",EST:"estonia",ETH:"ethiopia|abyssinia",FLK:"falkland|malvinas",FRO:"faroe|faeroe",FJI:"fiji",FIN:"finland",FRA:"^(?!.*\\bdep)(?!.*martinique).*france|french.?republic|\\bgaul",GUF:"^(?=.*french).*guiana",PYF:"french.?polynesia|tahiti",ATF:"french.?southern",GAB:"gabon",GMB:"gambia",GEO:"^(?!.*south).*georgia",DDR:"german.?democratic.?republic|democratic.?republic.*germany|east.germany",DEU:"^(?!.*east).*germany|^(?=.*\\bfed.*\\brep).*german",GHA:"ghana|gold.?coast",GIB:"gibraltar",GRC:"greece|hellenic|hellas",GRL:"greenland",GRD:"grenada",GLP:"guadeloupe",GUM:"\\bguam",GTM:"guatemala",GGY:"guernsey",GIN:"^(?!.*eq)(?!.*span)(?!.*bissau)(?!.*portu)(?!.*new).*guinea",GNB:"bissau|^(?=.*portu).*guinea",GUY:"guyana|british.?guiana",HTI:"haiti",HMD:"heard.*mcdonald",VAT:"holy.?see|vatican|papal.?st",HND:"^(?!.*brit).*honduras",HKG:"hong.?kong",HUN:"^(?!.*austr).*hungary",ISL:"iceland",IND:"india(?!.*ocea)",IDN:"indonesia",IRN:"\\biran|persia",IRQ:"\\biraq|mesopotamia",IRL:"(^ireland)|(^republic.*ireland)",IMN:"^(?=.*isle).*\\bman",ISR:"israel",ITA:"italy",JAM:"jamaica",JPN:"japan",JEY:"jersey",JOR:"jordan",KAZ:"kazak",KEN:"kenya|british.?east.?africa|east.?africa.?prot",KIR:"kiribati",PRK:"^(?=.*democrat|people|north|d.*p.*.r).*\\bkorea|dprk|korea.*(d.*p.*r)",KWT:"kuwait",KGZ:"kyrgyz|kirghiz",LAO:"\\blaos?\\b",LVA:"latvia",LBN:"lebanon",LSO:"lesotho|basuto",LBR:"liberia",LBY:"libya",LIE:"liechtenstein",LTU:"lithuania",LUX:"^(?!.*belg).*luxem",MAC:"maca(o|u)",MDG:"madagascar|malagasy",MWI:"malawi|nyasa",MYS:"malaysia",MDV:"maldive",MLI:"\\bmali\\b",MLT:"\\bmalta",MHL:"marshall",MTQ:"martinique",MRT:"mauritania",MUS:"mauritius",MYT:"\\bmayotte",MEX:"\\bmexic",FSM:"fed.*micronesia|micronesia.*fed",MCO:"monaco",MNG:"mongolia",MNE:"^(?!.*serbia).*montenegro",MSR:"montserrat",MAR:"morocco|\\bmaroc",MOZ:"mozambique",MMR:"myanmar|burma",NAM:"namibia",NRU:"nauru",NPL:"nepal",NLD:"^(?!.*\\bant)(?!.*\\bcarib).*netherlands",ANT:"^(?=.*\\bant).*(nether|dutch)",NCL:"new.?caledonia",NZL:"new.?zealand",NIC:"nicaragua",NER:"\\bniger(?!ia)",NGA:"nigeria",NIU:"niue",NFK:"norfolk",MNP:"mariana",NOR:"norway",OMN:"\\boman|trucial",PAK:"^(?!.*east).*paki?stan",PLW:"palau",PSE:"palestin|\\bgaza|west.?bank",PAN:"panama",PNG:"papua|new.?guinea",PRY:"paraguay",PER:"peru",PHL:"philippines",PCN:"pitcairn",POL:"poland",PRT:"portugal",PRI:"puerto.?rico",QAT:"qatar",KOR:"^(?!.*d.*p.*r)(?!.*democrat)(?!.*people)(?!.*north).*\\bkorea(?!.*d.*p.*r)",MDA:"moldov|b(a|e)ssarabia",REU:"r(e|\xe9)union",ROU:"r(o|u|ou)mania",RUS:"\\brussia|soviet.?union|u\\.?s\\.?s\\.?r|socialist.?republics",RWA:"rwanda",BLM:"barth(e|\xe9)lemy",SHN:"helena",KNA:"kitts|\\bnevis",LCA:"\\blucia",MAF:"^(?=.*collectivity).*martin|^(?=.*france).*martin(?!ique)|^(?=.*french).*martin(?!ique)",SPM:"miquelon",VCT:"vincent",WSM:"^(?!.*amer).*samoa",SMR:"san.?marino",STP:"\\bs(a|\xe3)o.?tom(e|\xe9)",SAU:"\\bsa\\w*.?arabia",SEN:"senegal",SRB:"^(?!.*monte).*serbia",SYC:"seychell",SLE:"sierra",SGP:"singapore",SXM:"^(?!.*martin)(?!.*saba).*maarten",SVK:"^(?!.*cze).*slovak",SVN:"slovenia",SLB:"solomon",SOM:"somali",ZAF:"south.africa|s\\\\..?africa",SGS:"south.?georgia|sandwich",SSD:"\\bs\\w*.?sudan",ESP:"spain",LKA:"sri.?lanka|ceylon",SDN:"^(?!.*\\bs(?!u)).*sudan",SUR:"surinam|dutch.?guiana",SJM:"svalbard",SWZ:"swaziland",SWE:"sweden",CHE:"switz|swiss",SYR:"syria",TWN:"taiwan|taipei|formosa|^(?!.*peo)(?=.*rep).*china",TJK:"tajik",THA:"thailand|\\bsiam",MKD:"macedonia|fyrom",TLS:"^(?=.*leste).*timor|^(?=.*east).*timor",TGO:"togo",TKL:"tokelau",TON:"tonga",TTO:"trinidad|tobago",TUN:"tunisia",TUR:"turkey",TKM:"turkmen",TCA:"turks",TUV:"tuvalu",UGA:"uganda",UKR:"ukrain",ARE:"emirates|^u\\.?a\\.?e\\.?$|united.?arab.?em",GBR:"united.?kingdom|britain|^u\\.?k\\.?$",TZA:"tanzania",USA:"united.?states\\b(?!.*islands)|\\bu\\.?s\\.?a\\.?\\b|^\\s*u\\.?s\\.?\\b(?!.*islands)",UMI:"minor.?outlying.?is",URY:"uruguay",UZB:"uzbek",VUT:"vanuatu|new.?hebrides",VEN:"venezuela",VNM:"^(?!.*republic).*viet.?nam|^(?=.*socialist).*viet.?nam",VGB:"^(?=.*\\bu\\.?\\s?k).*virgin|^(?=.*brit).*virgin|^(?=.*kingdom).*virgin",VIR:"^(?=.*\\bu\\.?\\s?s).*virgin|^(?=.*states).*virgin",WLF:"futuna|wallis",ESH:"western.sahara",YEM:"^(?!.*arab)(?!.*north)(?!.*sana)(?!.*peo)(?!.*dem)(?!.*south)(?!.*aden)(?!.*\\bp\\.?d\\.?r).*yemen",YMD:"^(?=.*peo).*yemen|^(?!.*rep)(?=.*dem).*yemen|^(?=.*south).*yemen|^(?=.*aden).*yemen|^(?=.*\\bp\\.?d\\.?r).*yemen",YUG:"yugoslavia",ZMB:"zambia|northern.?rhodesia",EAZ:"zanzibar",ZWE:"zimbabwe|^(?!.*northern).*rhodesia"}},{}],108:[function(t,e,r){function n(t){return t=Math.round(t),t<0?0:t>255?255:t}function i(t){return t<0?0:t>1?1:t}function a(t){return n("%"===t[t.length-1]?parseFloat(t)/100*255:parseInt(t))}function o(t){return i("%"===t[t.length-1]?parseFloat(t)/100:parseFloat(t))}function s(t,e,r){return r<0?r+=1:r>1&&(r-=1),6*r<1?t+(e-t)*r*6:2*r<1?e:3*r<2?t+(e-t)*(2/3-r)*6:t}function l(t){var e=t.replace(/ /g,"").toLowerCase();if(e in u)return u[e].slice();if("#"===e[0]){if(4===e.length){var r=parseInt(e.substr(1),16);return r>=0&&r<=4095?[(3840&r)>>4|(3840&r)>>8,240&r|(240&r)>>4,15&r|(15&r)<<4,1]:null}if(7===e.length){var r=parseInt(e.substr(1),16);return r>=0&&r<=16777215?[(16711680&r)>>16,(65280&r)>>8,255&r,1]:null}return null}var i=e.indexOf("("),l=e.indexOf(")");if(-1!==i&&l+1===e.length){var c=e.substr(0,i),h=e.substr(i+1,l-(i+1)).split(","),f=1;switch(c){case"rgba":if(4!==h.length)return null;f=o(h.pop());case"rgb":return 3!==h.length?null:[a(h[0]),a(h[1]),a(h[2]),f];case"hsla":if(4!==h.length)return null;f=o(h.pop());case"hsl":if(3!==h.length)return null;var d=(parseFloat(h[0])%360+360)%360/360,p=o(h[1]),m=o(h[2]),g=m<=.5?m*(p+1):m+p-m*p,v=2*m-g;return[n(255*s(v,g,d+1/3)),n(255*s(v,g,d)),n(255*s(v,g,d-1/3)),f];default:return null}}return null}var u={transparent:[0,0,0,0],aliceblue:[240,248,255,1],antiquewhite:[250,235,215,1],aqua:[0,255,255,1],aquamarine:[127,255,212,1],azure:[240,255,255,1],beige:[245,245,220,1],bisque:[255,228,196,1],black:[0,0,0,1],blanchedalmond:[255,235,205,1],blue:[0,0,255,1],blueviolet:[138,43,226,1],brown:[165,42,42,1],burlywood:[222,184,135,1],cadetblue:[95,158,160,1],chartreuse:[127,255,0,1],chocolate:[210,105,30,1],coral:[255,127,80,1],
cornflowerblue:[100,149,237,1],cornsilk:[255,248,220,1],crimson:[220,20,60,1],cyan:[0,255,255,1],darkblue:[0,0,139,1],darkcyan:[0,139,139,1],darkgoldenrod:[184,134,11,1],darkgray:[169,169,169,1],darkgreen:[0,100,0,1],darkgrey:[169,169,169,1],darkkhaki:[189,183,107,1],darkmagenta:[139,0,139,1],darkolivegreen:[85,107,47,1],darkorange:[255,140,0,1],darkorchid:[153,50,204,1],darkred:[139,0,0,1],darksalmon:[233,150,122,1],darkseagreen:[143,188,143,1],darkslateblue:[72,61,139,1],darkslategray:[47,79,79,1],darkslategrey:[47,79,79,1],darkturquoise:[0,206,209,1],darkviolet:[148,0,211,1],deeppink:[255,20,147,1],deepskyblue:[0,191,255,1],dimgray:[105,105,105,1],dimgrey:[105,105,105,1],dodgerblue:[30,144,255,1],firebrick:[178,34,34,1],floralwhite:[255,250,240,1],forestgreen:[34,139,34,1],fuchsia:[255,0,255,1],gainsboro:[220,220,220,1],ghostwhite:[248,248,255,1],gold:[255,215,0,1],goldenrod:[218,165,32,1],gray:[128,128,128,1],green:[0,128,0,1],greenyellow:[173,255,47,1],grey:[128,128,128,1],honeydew:[240,255,240,1],hotpink:[255,105,180,1],indianred:[205,92,92,1],indigo:[75,0,130,1],ivory:[255,255,240,1],khaki:[240,230,140,1],lavender:[230,230,250,1],lavenderblush:[255,240,245,1],lawngreen:[124,252,0,1],lemonchiffon:[255,250,205,1],lightblue:[173,216,230,1],lightcoral:[240,128,128,1],lightcyan:[224,255,255,1],lightgoldenrodyellow:[250,250,210,1],lightgray:[211,211,211,1],lightgreen:[144,238,144,1],lightgrey:[211,211,211,1],lightpink:[255,182,193,1],lightsalmon:[255,160,122,1],lightseagreen:[32,178,170,1],lightskyblue:[135,206,250,1],lightslategray:[119,136,153,1],lightslategrey:[119,136,153,1],lightsteelblue:[176,196,222,1],lightyellow:[255,255,224,1],lime:[0,255,0,1],limegreen:[50,205,50,1],linen:[250,240,230,1],magenta:[255,0,255,1],maroon:[128,0,0,1],mediumaquamarine:[102,205,170,1],mediumblue:[0,0,205,1],mediumorchid:[186,85,211,1],mediumpurple:[147,112,219,1],mediumseagreen:[60,179,113,1],mediumslateblue:[123,104,238,1],mediumspringgreen:[0,250,154,1],mediumturquoise:[72,209,204,1],mediumvioletred:[199,21,133,1],midnightblue:[25,25,112,1],mintcream:[245,255,250,1],mistyrose:[255,228,225,1],moccasin:[255,228,181,1],navajowhite:[255,222,173,1],navy:[0,0,128,1],oldlace:[253,245,230,1],olive:[128,128,0,1],olivedrab:[107,142,35,1],orange:[255,165,0,1],orangered:[255,69,0,1],orchid:[218,112,214,1],palegoldenrod:[238,232,170,1],palegreen:[152,251,152,1],paleturquoise:[175,238,238,1],palevioletred:[219,112,147,1],papayawhip:[255,239,213,1],peachpuff:[255,218,185,1],peru:[205,133,63,1],pink:[255,192,203,1],plum:[221,160,221,1],powderblue:[176,224,230,1],purple:[128,0,128,1],rebeccapurple:[102,51,153,1],red:[255,0,0,1],rosybrown:[188,143,143,1],royalblue:[65,105,225,1],saddlebrown:[139,69,19,1],salmon:[250,128,114,1],sandybrown:[244,164,96,1],seagreen:[46,139,87,1],seashell:[255,245,238,1],sienna:[160,82,45,1],silver:[192,192,192,1],skyblue:[135,206,235,1],slateblue:[106,90,205,1],slategray:[112,128,144,1],slategrey:[112,128,144,1],snow:[255,250,250,1],springgreen:[0,255,127,1],steelblue:[70,130,180,1],tan:[210,180,140,1],teal:[0,128,128,1],thistle:[216,191,216,1],tomato:[255,99,71,1],turquoise:[64,224,208,1],violet:[238,130,238,1],wheat:[245,222,179,1],white:[255,255,255,1],whitesmoke:[245,245,245,1],yellow:[255,255,0,1],yellowgreen:[154,205,50,1]};try{r.parseCSSColor=l}catch(t){}},{}],109:[function(t,e,r){"use strict";function n(t,e,r,n,i,a){var o=6*i*i-6*i,s=3*i*i-4*i+1,l=-6*i*i+6*i,u=3*i*i-2*i;if(t.length){a||(a=new Array(t.length));for(var c=t.length-1;c>=0;--c)a[c]=o*t[c]+s*e[c]+l*r[c]+u*n[c];return a}return o*t+s*e+l*r[c]+u*n}function i(t,e,r,n,i,a){var o=i-1,s=i*i,l=o*o,u=(1+2*i)*l,c=i*l,h=s*(3-2*i),f=s*o;if(t.length){a||(a=new Array(t.length));for(var d=t.length-1;d>=0;--d)a[d]=u*t[d]+c*e[d]+h*r[d]+f*n[d];return a}return u*t+c*e+h*r+f*n}e.exports=i,e.exports.derivative=n},{}],110:[function(t,e,r){"use strict";function n(){this.argTypes=[],this.shimArgs=[],this.arrayArgs=[],this.arrayBlockIndices=[],this.scalarArgs=[],this.offsetArgs=[],this.offsetArgIndex=[],this.indexArgs=[],this.shapeArgs=[],this.funcName="",this.pre=null,this.body=null,this.post=null,this.debug=!1}function i(t){var e=new n;e.pre=t.pre,e.body=t.body,e.post=t.post;var r=t.args.slice(0);e.argTypes=r;for(var i=0;i<r.length;++i){var o=r[i];if("array"===o||"object"==typeof o&&o.blockIndices){if(e.argTypes[i]="array",e.arrayArgs.push(i),e.arrayBlockIndices.push(o.blockIndices?o.blockIndices:0),e.shimArgs.push("array"+i),i<e.pre.args.length&&e.pre.args[i].count>0)throw new Error("cwise: pre() block may not reference array args");if(i<e.post.args.length&&e.post.args[i].count>0)throw new Error("cwise: post() block may not reference array args")}else if("scalar"===o)e.scalarArgs.push(i),e.shimArgs.push("scalar"+i);else if("index"===o){if(e.indexArgs.push(i),i<e.pre.args.length&&e.pre.args[i].count>0)throw new Error("cwise: pre() block may not reference array index");if(i<e.body.args.length&&e.body.args[i].lvalue)throw new Error("cwise: body() block may not write to array index");if(i<e.post.args.length&&e.post.args[i].count>0)throw new Error("cwise: post() block may not reference array index")}else if("shape"===o){if(e.shapeArgs.push(i),i<e.pre.args.length&&e.pre.args[i].lvalue)throw new Error("cwise: pre() block may not write to array shape");if(i<e.body.args.length&&e.body.args[i].lvalue)throw new Error("cwise: body() block may not write to array shape");if(i<e.post.args.length&&e.post.args[i].lvalue)throw new Error("cwise: post() block may not write to array shape")}else{if("object"!=typeof o||!o.offset)throw new Error("cwise: Unknown argument type "+r[i]);e.argTypes[i]="offset",e.offsetArgs.push({array:o.array,offset:o.offset}),e.offsetArgIndex.push(i)}}if(e.arrayArgs.length<=0)throw new Error("cwise: No array arguments specified");if(e.pre.args.length>r.length)throw new Error("cwise: Too many arguments in pre() block");if(e.body.args.length>r.length)throw new Error("cwise: Too many arguments in body() block");if(e.post.args.length>r.length)throw new Error("cwise: Too many arguments in post() block");return e.debug=!!t.printCode||!!t.debug,e.funcName=t.funcName||"cwise",e.blockSize=t.blockSize||64,a(e)}var a=t("./lib/thunk.js");e.exports=i},{"./lib/thunk.js":112}],111:[function(t,e,r){"use strict";function n(t,e,r){var n,i,a=t.length,o=e.arrayArgs.length,s=e.indexArgs.length>0,l=[],u=[],c=0,h=0;for(n=0;n<a;++n)u.push(["i",n,"=0"].join(""));for(i=0;i<o;++i)for(n=0;n<a;++n)h=c,c=t[n],0===n?u.push(["d",i,"s",n,"=t",i,"p",c].join("")):u.push(["d",i,"s",n,"=(t",i,"p",c,"-s",h,"*t",i,"p",h,")"].join(""));for(u.length>0&&l.push("var "+u.join(",")),n=a-1;n>=0;--n)c=t[n],l.push(["for(i",n,"=0;i",n,"<s",c,";++i",n,"){"].join(""));for(l.push(r),n=0;n<a;++n){for(h=c,c=t[n],i=0;i<o;++i)l.push(["p",i,"+=d",i,"s",n].join(""));s&&(n>0&&l.push(["index[",h,"]-=s",h].join("")),l.push(["++index[",c,"]"].join(""))),l.push("}")}return l.join("\n")}function i(t,e,r,i){for(var a=e.length,o=r.arrayArgs.length,s=r.blockSize,l=r.indexArgs.length>0,u=[],c=0;c<o;++c)u.push(["var offset",c,"=p",c].join(""));for(var c=t;c<a;++c)u.push(["for(var j"+c+"=SS[",e[c],"]|0;j",c,">0;){"].join("")),u.push(["if(j",c,"<",s,"){"].join("")),u.push(["s",e[c],"=j",c].join("")),u.push(["j",c,"=0"].join("")),u.push(["}else{s",e[c],"=",s].join("")),u.push(["j",c,"-=",s,"}"].join("")),l&&u.push(["index[",e[c],"]=j",c].join(""));for(var c=0;c<o;++c){for(var h=["offset"+c],f=t;f<a;++f)h.push(["j",f,"*t",c,"p",e[f]].join(""));u.push(["p",c,"=(",h.join("+"),")"].join(""))}u.push(n(e,r,i));for(var c=t;c<a;++c)u.push("}");return u.join("\n")}function a(t){for(var e=0,r=t[0].length;e<r;){for(var n=1;n<t.length;++n)if(t[n][e]!==t[0][e])return e;++e}return e}function o(t,e,r){for(var n=t.body,i=[],a=[],o=0;o<t.args.length;++o){var s=t.args[o];if(!(s.count<=0)){var l=new RegExp(s.name,"g"),u="",c=e.arrayArgs.indexOf(o);switch(e.argTypes[o]){case"offset":var h=e.offsetArgIndex.indexOf(o);c=e.offsetArgs[h].array,u="+q"+h;case"array":u="p"+c+u;var f="l"+o,d="a"+c;if(0===e.arrayBlockIndices[c])1===s.count?"generic"===r[c]?s.lvalue?(i.push(["var ",f,"=",d,".get(",u,")"].join("")),n=n.replace(l,f),a.push([d,".set(",u,",",f,")"].join(""))):n=n.replace(l,[d,".get(",u,")"].join("")):n=n.replace(l,[d,"[",u,"]"].join("")):"generic"===r[c]?(i.push(["var ",f,"=",d,".get(",u,")"].join("")),n=n.replace(l,f),s.lvalue&&a.push([d,".set(",u,",",f,")"].join(""))):(i.push(["var ",f,"=",d,"[",u,"]"].join("")),n=n.replace(l,f),s.lvalue&&a.push([d,"[",u,"]=",f].join("")));else{for(var p=[s.name],m=[u],g=0;g<Math.abs(e.arrayBlockIndices[c]);g++)p.push("\\s*\\[([^\\]]+)\\]"),m.push("$"+(g+1)+"*t"+c+"b"+g);if(l=new RegExp(p.join(""),"g"),u=m.join("+"),"generic"===r[c])throw new Error("cwise: Generic arrays not supported in combination with blocks!");n=n.replace(l,[d,"[",u,"]"].join(""))}break;case"scalar":n=n.replace(l,"Y"+e.scalarArgs.indexOf(o));break;case"index":n=n.replace(l,"index");break;case"shape":n=n.replace(l,"shape")}}}return[i.join("\n"),n,a.join("\n")].join("\n").trim()}function s(t){for(var e=new Array(t.length),r=!0,n=0;n<t.length;++n){var i=t[n],a=i.match(/\d+/);a=a?a[0]:"",0===i.charAt(0)?e[n]="u"+i.charAt(1)+a:e[n]=i.charAt(0)+a,n>0&&(r=r&&e[n]===e[n-1])}return r?e[0]:e.join("")}function l(t,e){for(var r=e[1].length-Math.abs(t.arrayBlockIndices[0])|0,l=new Array(t.arrayArgs.length),c=new Array(t.arrayArgs.length),h=0;h<t.arrayArgs.length;++h)c[h]=e[2*h],l[h]=e[2*h+1];for(var f=[],d=[],p=[],m=[],g=[],h=0;h<t.arrayArgs.length;++h){t.arrayBlockIndices[h]<0?(p.push(0),m.push(r),f.push(r),d.push(r+t.arrayBlockIndices[h])):(p.push(t.arrayBlockIndices[h]),m.push(t.arrayBlockIndices[h]+r),f.push(0),d.push(t.arrayBlockIndices[h]));for(var v=[],y=0;y<l[h].length;y++)p[h]<=l[h][y]&&l[h][y]<m[h]&&v.push(l[h][y]-p[h]);g.push(v)}for(var b=["SS"],x=["'use strict'"],_=[],y=0;y<r;++y)_.push(["s",y,"=SS[",y,"]"].join(""));for(var h=0;h<t.arrayArgs.length;++h){b.push("a"+h),b.push("t"+h),b.push("p"+h);for(var y=0;y<r;++y)_.push(["t",h,"p",y,"=t",h,"[",p[h]+y,"]"].join(""));for(var y=0;y<Math.abs(t.arrayBlockIndices[h]);++y)_.push(["t",h,"b",y,"=t",h,"[",f[h]+y,"]"].join(""))}for(var h=0;h<t.scalarArgs.length;++h)b.push("Y"+h);if(t.shapeArgs.length>0&&_.push("shape=SS.slice(0)"),t.indexArgs.length>0){for(var w=new Array(r),h=0;h<r;++h)w[h]="0";_.push(["index=[",w.join(","),"]"].join(""))}for(var h=0;h<t.offsetArgs.length;++h){for(var M=t.offsetArgs[h],k=[],y=0;y<M.offset.length;++y)0!==M.offset[y]&&(1===M.offset[y]?k.push(["t",M.array,"p",y].join("")):k.push([M.offset[y],"*t",M.array,"p",y].join("")));0===k.length?_.push("q"+h+"=0"):_.push(["q",h,"=",k.join("+")].join(""))}var A=u([].concat(t.pre.thisVars).concat(t.body.thisVars).concat(t.post.thisVars));_=_.concat(A),_.length>0&&x.push("var "+_.join(","));for(var h=0;h<t.arrayArgs.length;++h)x.push("p"+h+"|=0");t.pre.body.length>3&&x.push(o(t.pre,t,c));var T=o(t.body,t,c),S=a(g);S<r?x.push(i(S,g[0],t,T)):x.push(n(g[0],t,T)),t.post.body.length>3&&x.push(o(t.post,t,c)),t.debug&&console.log("-----Generated cwise routine for ",e,":\n"+x.join("\n")+"\n----------");var E=[t.funcName||"unnamed","_cwise_loop_",l[0].join("s"),"m",S,s(c)].join("");return new Function(["function ",E,"(",b.join(","),"){",x.join("\n"),"} return ",E].join(""))()}var u=t("uniq");e.exports=l},{uniq:543}],112:[function(t,e,r){"use strict";function n(t){var e=["'use strict'","var CACHED={}"],r=[],n=t.funcName+"_cwise_thunk";e.push(["return function ",n,"(",t.shimArgs.join(","),"){"].join(""));for(var a=[],o=[],s=[["array",t.arrayArgs[0],".shape.slice(",Math.max(0,t.arrayBlockIndices[0]),t.arrayBlockIndices[0]<0?","+t.arrayBlockIndices[0]+")":")"].join("")],l=[],u=[],c=0;c<t.arrayArgs.length;++c){var h=t.arrayArgs[c];r.push(["t",h,"=array",h,".dtype,","r",h,"=array",h,".order"].join("")),a.push("t"+h),a.push("r"+h),o.push("t"+h),o.push("r"+h+".join()"),s.push("array"+h+".data"),s.push("array"+h+".stride"),s.push("array"+h+".offset|0"),c>0&&(l.push("array"+t.arrayArgs[0]+".shape.length===array"+h+".shape.length+"+(Math.abs(t.arrayBlockIndices[0])-Math.abs(t.arrayBlockIndices[c]))),u.push("array"+t.arrayArgs[0]+".shape[shapeIndex+"+Math.max(0,t.arrayBlockIndices[0])+"]===array"+h+".shape[shapeIndex+"+Math.max(0,t.arrayBlockIndices[c])+"]"))}t.arrayArgs.length>1&&(e.push("if (!("+l.join(" && ")+")) throw new Error('cwise: Arrays do not all have the same dimensionality!')"),e.push("for(var shapeIndex=array"+t.arrayArgs[0]+".shape.length-"+Math.abs(t.arrayBlockIndices[0])+"; shapeIndex--\x3e0;) {"),e.push("if (!("+u.join(" && ")+")) throw new Error('cwise: Arrays do not all have the same shape!')"),e.push("}"));for(var c=0;c<t.scalarArgs.length;++c)s.push("scalar"+t.scalarArgs[c]);return r.push(["type=[",o.join(","),"].join()"].join("")),r.push("proc=CACHED[type]"),e.push("var "+r.join(",")),e.push(["if(!proc){","CACHED[type]=proc=compile([",a.join(","),"])}","return proc(",s.join(","),")}"].join("")),t.debug&&console.log("-----Generated thunk:\n"+e.join("\n")+"\n----------"),new Function("compile",e.join("\n"))(i.bind(void 0,t))}var i=t("./compile.js");e.exports=n},{"./compile.js":111}],113:[function(t,e,r){e.exports=t("cwise-compiler")},{"cwise-compiler":110}],114:[function(e,r,n){!function(e,i){"object"==typeof n&&void 0!==r?i(n):"function"==typeof t&&t.amd?t(["exports"],i):i(e.d3=e.d3||{})}(this,function(t){"use strict";function e(t){return function(e,r){return o(t(e),r)}}function r(t,e){return[t,e]}function n(t,e,r){var n=(e-t)/Math.max(0,r),i=Math.floor(Math.log(n)/Math.LN10),a=n/Math.pow(10,i);return i>=0?(a>=k?10:a>=A?5:a>=T?2:1)*Math.pow(10,i):-Math.pow(10,-i)/(a>=k?10:a>=A?5:a>=T?2:1)}function i(t,e,r){var n=Math.abs(e-t)/Math.max(0,r),i=Math.pow(10,Math.floor(Math.log(n)/Math.LN10)),a=n/i;return a>=k?i*=10:a>=A?i*=5:a>=T&&(i*=2),e<t?-i:i}function a(t){return t.length}var o=function(t,e){return t<e?-1:t>e?1:t>=e?0:NaN},s=function(t){return 1===t.length&&(t=e(t)),{left:function(e,r,n,i){for(null==n&&(n=0),null==i&&(i=e.length);n<i;){var a=n+i>>>1;t(e[a],r)<0?n=a+1:i=a}return n},right:function(e,r,n,i){for(null==n&&(n=0),null==i&&(i=e.length);n<i;){var a=n+i>>>1;t(e[a],r)>0?i=a:n=a+1}return n}}},l=s(o),u=l.right,c=l.left,h=function(t,e){null==e&&(e=r);for(var n=0,i=t.length-1,a=t[0],o=new Array(i<0?0:i);n<i;)o[n]=e(a,a=t[++n]);return o},f=function(t,e,n){var i,a,o,s,l=t.length,u=e.length,c=new Array(l*u);for(null==n&&(n=r),i=o=0;i<l;++i)for(s=t[i],a=0;a<u;++a,++o)c[o]=n(s,e[a]);return c},d=function(t,e){return e<t?-1:e>t?1:e>=t?0:NaN},p=function(t){return null===t?NaN:+t},m=function(t,e){var r,n,i=t.length,a=0,o=-1,s=0,l=0;if(null==e)for(;++o<i;)isNaN(r=p(t[o]))||(n=r-s,s+=n/++a,l+=n*(r-s));else for(;++o<i;)isNaN(r=p(e(t[o],o,t)))||(n=r-s,s+=n/++a,l+=n*(r-s));if(a>1)return l/(a-1)},g=function(t,e){var r=m(t,e);return r?Math.sqrt(r):r},v=function(t,e){var r,n,i,a=t.length,o=-1;if(null==e){for(;++o<a;)if(null!=(r=t[o])&&r>=r)for(n=i=r;++o<a;)null!=(r=t[o])&&(n>r&&(n=r),i<r&&(i=r))}else for(;++o<a;)if(null!=(r=e(t[o],o,t))&&r>=r)for(n=i=r;++o<a;)null!=(r=e(t[o],o,t))&&(n>r&&(n=r),i<r&&(i=r));return[n,i]},y=Array.prototype,b=y.slice,x=y.map,_=function(t){return function(){return t}},w=function(t){return t},M=function(t,e,r){t=+t,e=+e,r=(i=arguments.length)<2?(e=t,t=0,1):i<3?1:+r;for(var n=-1,i=0|Math.max(0,Math.ceil((e-t)/r)),a=new Array(i);++n<i;)a[n]=t+n*r;return a},k=Math.sqrt(50),A=Math.sqrt(10),T=Math.sqrt(2),S=function(t,e,r){var i,a,o,s=e<t,l=-1;if(s&&(i=t,t=e,e=i),0===(o=n(t,e,r))||!isFinite(o))return[];if(o>0)for(t=Math.ceil(t/o),e=Math.floor(e/o),a=new Array(i=Math.ceil(e-t+1));++l<i;)a[l]=(t+l)*o;else for(t=Math.floor(t*o),e=Math.ceil(e*o),a=new Array(i=Math.ceil(t-e+1));++l<i;)a[l]=(t-l)/o;return s&&a.reverse(),a},E=function(t){return Math.ceil(Math.log(t.length)/Math.LN2)+1},L=function(){function t(t){var a,o,s=t.length,l=new Array(s);for(a=0;a<s;++a)l[a]=e(t[a],a,t);var c=r(l),h=c[0],f=c[1],d=n(l,h,f);Array.isArray(d)||(d=i(h,f,d),d=M(Math.ceil(h/d)*d,Math.floor(f/d)*d,d));for(var p=d.length;d[0]<=h;)d.shift(),--p;for(;d[p-1]>f;)d.pop(),--p;var m,g=new Array(p+1);for(a=0;a<=p;++a)m=g[a]=[],m.x0=a>0?d[a-1]:h,m.x1=a<p?d[a]:f;for(a=0;a<s;++a)o=l[a],h<=o&&o<=f&&g[u(d,o,0,p)].push(t[a]);return g}var e=w,r=v,n=E;return t.value=function(r){return arguments.length?(e="function"==typeof r?r:_(r),t):e},t.domain=function(e){return arguments.length?(r="function"==typeof e?e:_([e[0],e[1]]),t):r},t.thresholds=function(e){return arguments.length?(n="function"==typeof e?e:_(Array.isArray(e)?b.call(e):e),t):n},t},C=function(t,e,r){if(null==r&&(r=p),n=t.length){if((e=+e)<=0||n<2)return+r(t[0],0,t);if(e>=1)return+r(t[n-1],n-1,t);var n,i=(n-1)*e,a=Math.floor(i),o=+r(t[a],a,t);return o+(+r(t[a+1],a+1,t)-o)*(i-a)}},I=function(t,e,r){return t=x.call(t,p).sort(o),Math.ceil((r-e)/(2*(C(t,.75)-C(t,.25))*Math.pow(t.length,-1/3)))},z=function(t,e,r){return Math.ceil((r-e)/(3.5*g(t)*Math.pow(t.length,-1/3)))},D=function(t,e){var r,n,i=t.length,a=-1;if(null==e){for(;++a<i;)if(null!=(r=t[a])&&r>=r)for(n=r;++a<i;)null!=(r=t[a])&&r>n&&(n=r)}else for(;++a<i;)if(null!=(r=e(t[a],a,t))&&r>=r)for(n=r;++a<i;)null!=(r=e(t[a],a,t))&&r>n&&(n=r);return n},P=function(t,e){var r,n=t.length,i=n,a=-1,o=0;if(null==e)for(;++a<n;)isNaN(r=p(t[a]))?--i:o+=r;else for(;++a<n;)isNaN(r=p(e(t[a],a,t)))?--i:o+=r;if(i)return o/i},O=function(t,e){var r,n=t.length,i=-1,a=[];if(null==e)for(;++i<n;)isNaN(r=p(t[i]))||a.push(r);else for(;++i<n;)isNaN(r=p(e(t[i],i,t)))||a.push(r);return C(a.sort(o),.5)},R=function(t){for(var e,r,n,i=t.length,a=-1,o=0;++a<i;)o+=t[a].length;for(r=new Array(o);--i>=0;)for(n=t[i],e=n.length;--e>=0;)r[--o]=n[e];return r},F=function(t,e){var r,n,i=t.length,a=-1;if(null==e){for(;++a<i;)if(null!=(r=t[a])&&r>=r)for(n=r;++a<i;)null!=(r=t[a])&&n>r&&(n=r)}else for(;++a<i;)if(null!=(r=e(t[a],a,t))&&r>=r)for(n=r;++a<i;)null!=(r=e(t[a],a,t))&&n>r&&(n=r);return n},j=function(t,e){for(var r=e.length,n=new Array(r);r--;)n[r]=t[e[r]];return n},N=function(t,e){if(r=t.length){var r,n,i=0,a=0,s=t[a];for(null==e&&(e=o);++i<r;)(e(n=t[i],s)<0||0!==e(s,s))&&(s=n,a=i);return 0===e(s,s)?a:void 0}},B=function(t,e,r){for(var n,i,a=(null==r?t.length:r)-(e=null==e?0:+e);a;)i=Math.random()*a--|0,n=t[a+e],t[a+e]=t[i+e],t[i+e]=n;return t},U=function(t,e){var r,n=t.length,i=-1,a=0;if(null==e)for(;++i<n;)(r=+t[i])&&(a+=r);else for(;++i<n;)(r=+e(t[i],i,t))&&(a+=r);return a},V=function(t){if(!(i=t.length))return[];for(var e=-1,r=F(t,a),n=new Array(r);++e<r;)for(var i,o=-1,s=n[e]=new Array(i);++o<i;)s[o]=t[o][e];return n},H=function(){return V(arguments)};t.bisect=u,t.bisectRight=u,t.bisectLeft=c,t.ascending=o,t.bisector=s,t.cross=f,t.descending=d,t.deviation=g,t.extent=v,t.histogram=L,t.thresholdFreedmanDiaconis=I,t.thresholdScott=z,t.thresholdSturges=E,t.max=D,t.mean=P,t.median=O,t.merge=R,t.min=F,t.pairs=h,t.permute=j,t.quantile=C,t.range=M,t.scan=N,t.shuffle=B,t.sum=U,t.ticks=S,t.tickIncrement=n,t.tickStep=i,t.transpose=V,t.variance=m,t.zip=H,Object.defineProperty(t,"__esModule",{value:!0})})},{}],115:[function(e,r,n){!function(e,i){"object"==typeof n&&void 0!==r?i(n):"function"==typeof t&&t.amd?t(["exports"],i):i(e.d3=e.d3||{})}(this,function(t){"use strict";function e(){}function r(t,r){var n=new e;if(t instanceof e)t.each(function(t,e){n.set(e,t)});else if(Array.isArray(t)){var i,a=-1,o=t.length;if(null==r)for(;++a<o;)n.set(a,t[a]);else for(;++a<o;)n.set(r(i=t[a],a,t),i)}else if(t)for(var s in t)n.set(s,t[s]);return n}function n(){return{}}function i(t,e,r){t[e]=r}function a(){return r()}function o(t,e,r){t.set(e,r)}function s(){}function l(t,e){var r=new s;if(t instanceof s)t.each(function(t){r.add(t)});else if(t){var n=-1,i=t.length;if(null==e)for(;++n<i;)r.add(t[n]);else for(;++n<i;)r.add(e(t[n],n,t))}return r}e.prototype=r.prototype={constructor:e,has:function(t){return"$"+t in this},get:function(t){return this["$"+t]},set:function(t,e){return this["$"+t]=e,this},remove:function(t){var e="$"+t;return e in this&&delete this[e]},clear:function(){for(var t in this)"$"===t[0]&&delete this[t]},keys:function(){var t=[];for(var e in this)"$"===e[0]&&t.push(e.slice(1));return t},values:function(){var t=[];for(var e in this)"$"===e[0]&&t.push(this[e]);return t},entries:function(){var t=[];for(var e in this)"$"===e[0]&&t.push({key:e.slice(1),value:this[e]});return t},size:function(){var t=0;for(var e in this)"$"===e[0]&&++t;return t},empty:function(){for(var t in this)if("$"===t[0])return!1;return!0},each:function(t){for(var e in this)"$"===e[0]&&t(this[e],e.slice(1),this)}};var u=function(){function t(e,n,i,a){if(n>=c.length)return null!=l?l(e):null!=s?e.sort(s):e;for(var o,u,h,f=-1,d=e.length,p=c[n++],m=r(),g=i();++f<d;)(h=m.get(o=p(u=e[f])+""))?h.push(u):m.set(o,[u]);return m.each(function(e,r){a(g,r,t(e,n,i,a))}),g}function e(t,r){if(++r>c.length)return t;var n,i=h[r-1];return null!=l&&r>=c.length?n=t.entries():(n=[],t.each(function(t,i){n.push({key:i,values:e(t,r)})})),null!=i?n.sort(function(t,e){return i(t.key,e.key)}):n}var s,l,u,c=[],h=[];return u={object:function(e){return t(e,0,n,i)},map:function(e){return t(e,0,a,o)},entries:function(r){return e(t(r,0,a,o),0)},key:function(t){return c.push(t),u},sortKeys:function(t){return h[c.length-1]=t,u},sortValues:function(t){return s=t,u},rollup:function(t){return l=t,u}}},c=r.prototype;s.prototype=l.prototype={constructor:s,has:c.has,add:function(t){return t+="",this["$"+t]=t,this},remove:c.remove,clear:c.clear,values:c.keys,size:c.size,empty:c.empty,each:c.each};var h=function(t){var e=[];for(var r in t)e.push(r);return e},f=function(t){var e=[];for(var r in t)e.push(t[r]);return e},d=function(t){var e=[];for(var r in t)e.push({key:r,value:t[r]});return e};t.nest=u,t.set=l,t.map=r,t.keys=h,t.values=f,t.entries=d,Object.defineProperty(t,"__esModule",{value:!0})})},{}],116:[function(e,r,n){!function(e,i){"object"==typeof n&&void 0!==r?i(n):"function"==typeof t&&t.amd?t(["exports"],i):i(e.d3=e.d3||{})}(this,function(t){"use strict";function e(t,e){var r=Object.create(t.prototype);for(var n in e)r[n]=e[n];return r}function r(){}function n(t){var e;return t=(t+"").trim().toLowerCase(),(e=I.exec(t))?(e=parseInt(e[1],16),new l(e>>8&15|e>>4&240,e>>4&15|240&e,(15&e)<<4|15&e,1)):(e=z.exec(t))?i(parseInt(e[1],16)):(e=D.exec(t))?new l(e[1],e[2],e[3],1):(e=P.exec(t))?new l(255*e[1]/100,255*e[2]/100,255*e[3]/100,1):(e=O.exec(t))?a(e[1],e[2],e[3],e[4]):(e=R.exec(t))?a(255*e[1]/100,255*e[2]/100,255*e[3]/100,e[4]):(e=F.exec(t))?u(e[1],e[2]/100,e[3]/100,1):(e=j.exec(t))?u(e[1],e[2]/100,e[3]/100,e[4]):N.hasOwnProperty(t)?i(N[t]):"transparent"===t?new l(NaN,NaN,NaN,0):null}function i(t){return new l(t>>16&255,t>>8&255,255&t,1)}function a(t,e,r,n){return n<=0&&(t=e=r=NaN),new l(t,e,r,n)}function o(t){return t instanceof r||(t=n(t)),t?(t=t.rgb(),new l(t.r,t.g,t.b,t.opacity)):new l}function s(t,e,r,n){return 1===arguments.length?o(t):new l(t,e,r,null==n?1:n)}function l(t,e,r,n){this.r=+t,this.g=+e,this.b=+r,this.opacity=+n}function u(t,e,r,n){return n<=0?t=e=r=NaN:r<=0||r>=1?t=e=NaN:e<=0&&(t=NaN),new f(t,e,r,n)}function c(t){if(t instanceof f)return new f(t.h,t.s,t.l,t.opacity);if(t instanceof r||(t=n(t)),!t)return new f;if(t instanceof f)return t;t=t.rgb();var e=t.r/255,i=t.g/255,a=t.b/255,o=Math.min(e,i,a),s=Math.max(e,i,a),l=NaN,u=s-o,c=(s+o)/2;return u?(l=e===s?(i-a)/u+6*(i<a):i===s?(a-e)/u+2:(e-i)/u+4,u/=c<.5?s+o:2-s-o,l*=60):u=c>0&&c<1?0:l,new f(l,u,c,t.opacity)}function h(t,e,r,n){return 1===arguments.length?c(t):new f(t,e,r,null==n?1:n)}function f(t,e,r,n){this.h=+t,this.s=+e,this.l=+r,this.opacity=+n}function d(t,e,r){return 255*(t<60?e+(r-e)*t/60:t<180?r:t<240?e+(r-e)*(240-t)/60:e)}function p(t){if(t instanceof g)return new g(t.l,t.a,t.b,t.opacity);if(t instanceof M){var e=t.h*B;return new g(t.l,Math.cos(e)*t.c,Math.sin(e)*t.c,t.opacity)}t instanceof l||(t=o(t));var r=x(t.r),n=x(t.g),i=x(t.b),a=v((.4124564*r+.3575761*n+.1804375*i)/V),s=v((.2126729*r+.7151522*n+.072175*i)/H);return new g(116*s-16,500*(a-s),200*(s-v((.0193339*r+.119192*n+.9503041*i)/q)),t.opacity)}function m(t,e,r,n){return 1===arguments.length?p(t):new g(t,e,r,null==n?1:n)}function g(t,e,r,n){this.l=+t,this.a=+e,this.b=+r,this.opacity=+n}function v(t){return t>X?Math.pow(t,1/3):t/W+G}function y(t){return t>Y?t*t*t:W*(t-G)}function b(t){return 255*(t<=.0031308?12.92*t:1.055*Math.pow(t,1/2.4)-.055)}function x(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function _(t){if(t instanceof M)return new M(t.h,t.c,t.l,t.opacity);t instanceof g||(t=p(t));var e=Math.atan2(t.b,t.a)*U;return new M(e<0?e+360:e,Math.sqrt(t.a*t.a+t.b*t.b),t.l,t.opacity)}function w(t,e,r,n){return 1===arguments.length?_(t):new M(t,e,r,null==n?1:n)}function M(t,e,r,n){this.h=+t,this.c=+e,this.l=+r,this.opacity=+n}function k(t){if(t instanceof T)return new T(t.h,t.s,t.l,t.opacity);t instanceof l||(t=o(t));var e=t.r/255,r=t.g/255,n=t.b/255,i=(rt*n+tt*e-et*r)/(rt+tt-et),a=n-i,s=($*(r-i)-K*a)/Q,u=Math.sqrt(s*s+a*a)/($*i*(1-i)),c=u?Math.atan2(s,a)*U-120:NaN;return new T(c<0?c+360:c,u,i,t.opacity)}function A(t,e,r,n){return 1===arguments.length?k(t):new T(t,e,r,null==n?1:n)}function T(t,e,r,n){this.h=+t,this.s=+e,this.l=+r,this.opacity=+n}var S=function(t,e,r){t.prototype=e.prototype=r,r.constructor=t},E="\\s*([+-]?\\d+)\\s*",L="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)\\s*",C="\\s*([+-]?\\d*\\.?\\d+(?:[eE][+-]?\\d+)?)%\\s*",I=/^#([0-9a-f]{3})$/,z=/^#([0-9a-f]{6})$/,D=new RegExp("^rgb\\("+[E,E,E]+"\\)$"),P=new RegExp("^rgb\\("+[C,C,C]+"\\)$"),O=new RegExp("^rgba\\("+[E,E,E,L]+"\\)$"),R=new RegExp("^rgba\\("+[C,C,C,L]+"\\)$"),F=new RegExp("^hsl\\("+[L,C,C]+"\\)$"),j=new RegExp("^hsla\\("+[L,C,C,L]+"\\)$"),N={aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074};S(r,n,{displayable:function(){return this.rgb().displayable()},toString:function(){return this.rgb()+""}}),S(l,s,e(r,{brighter:function(t){return t=null==t?1/.7:Math.pow(1/.7,t),new l(this.r*t,this.g*t,this.b*t,this.opacity)},darker:function(t){return t=null==t?.7:Math.pow(.7,t),new l(this.r*t,this.g*t,this.b*t,this.opacity)},rgb:function(){return this},displayable:function(){return 0<=this.r&&this.r<=255&&0<=this.g&&this.g<=255&&0<=this.b&&this.b<=255&&0<=this.opacity&&this.opacity<=1},toString:function(){var t=this.opacity;return t=isNaN(t)?1:Math.max(0,Math.min(1,t)),(1===t?"rgb(":"rgba(")+Math.max(0,Math.min(255,Math.round(this.r)||0))+", "+Math.max(0,Math.min(255,Math.round(this.g)||0))+", "+Math.max(0,Math.min(255,Math.round(this.b)||0))+(1===t?")":", "+t+")")}})),S(f,h,e(r,{brighter:function(t){return t=null==t?1/.7:Math.pow(1/.7,t),new f(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=null==t?.7:Math.pow(.7,t),new f(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=this.h%360+360*(this.h<0),e=isNaN(t)||isNaN(this.s)?0:this.s,r=this.l,n=r+(r<.5?r:1-r)*e,i=2*r-n;return new l(d(t>=240?t-240:t+120,i,n),d(t,i,n),d(t<120?t+240:t-120,i,n),this.opacity)},displayable:function(){return(0<=this.s&&this.s<=1||isNaN(this.s))&&0<=this.l&&this.l<=1&&0<=this.opacity&&this.opacity<=1}}));var B=Math.PI/180,U=180/Math.PI,V=.95047,H=1,q=1.08883,G=4/29,Y=6/29,W=3*Y*Y,X=Y*Y*Y;S(g,m,e(r,{brighter:function(t){return new g(this.l+18*(null==t?1:t),this.a,this.b,this.opacity)},darker:function(t){return new g(this.l-18*(null==t?1:t),this.a,this.b,this.opacity)},rgb:function(){var t=(this.l+16)/116,e=isNaN(this.a)?t:t+this.a/500,r=isNaN(this.b)?t:t-this.b/200;return t=H*y(t),e=V*y(e),r=q*y(r),new l(b(3.2404542*e-1.5371385*t-.4985314*r),b(-.969266*e+1.8760108*t+.041556*r),b(.0556434*e-.2040259*t+1.0572252*r),this.opacity)}})),S(M,w,e(r,{brighter:function(t){return new M(this.h,this.c,this.l+18*(null==t?1:t),this.opacity)},darker:function(t){return new M(this.h,this.c,this.l-18*(null==t?1:t),this.opacity)},rgb:function(){return p(this).rgb()}}));var Z=-.14861,J=1.78277,K=-.29227,Q=-.90649,$=1.97294,tt=$*Q,et=$*J,rt=J*K-Q*Z;S(T,A,e(r,{brighter:function(t){return t=null==t?1/.7:Math.pow(1/.7,t),new T(this.h,this.s,this.l*t,this.opacity)},darker:function(t){return t=null==t?.7:Math.pow(.7,t),new T(this.h,this.s,this.l*t,this.opacity)},rgb:function(){var t=isNaN(this.h)?0:(this.h+120)*B,e=+this.l,r=isNaN(this.s)?0:this.s*e*(1-e),n=Math.cos(t),i=Math.sin(t);return new l(255*(e+r*(Z*n+J*i)),255*(e+r*(K*n+Q*i)),255*(e+r*($*n)),this.opacity)}})),t.color=n,t.rgb=s,t.hsl=h,t.lab=m,t.hcl=w,t.cubehelix=A,Object.defineProperty(t,"__esModule",{value:!0})})},{}],117:[function(e,r,n){!function(e,i){"object"==typeof n&&void 0!==r?i(n):"function"==typeof t&&t.amd?t(["exports"],i):i(e.d3=e.d3||{})}(this,function(t){"use strict";function e(){for(var t,e=0,n=arguments.length,i={};e<n;++e){if(!(t=arguments[e]+"")||t in i)throw new Error("illegal type: "+t);i[t]=[]}return new r(i)}function r(t){this._=t}function n(t,e){return t.trim().split(/^|\s+/).map(function(t){var r="",n=t.indexOf(".");if(n>=0&&(r=t.slice(n+1),t=t.slice(0,n)),t&&!e.hasOwnProperty(t))throw new Error("unknown type: "+t);return{type:t,name:r}})}function i(t,e){for(var r,n=0,i=t.length;n<i;++n)if((r=t[n]).name===e)return r.value}function a(t,e,r){for(var n=0,i=t.length;n<i;++n)if(t[n].name===e){t[n]=o,t=t.slice(0,n).concat(t.slice(n+1));break}return null!=r&&t.push({name:e,value:r}),t}var o={value:function(){}};r.prototype=e.prototype={constructor:r,on:function(t,e){var r,o=this._,s=n(t+"",o),l=-1,u=s.length;{if(!(arguments.length<2)){
if(null!=e&&"function"!=typeof e)throw new Error("invalid callback: "+e);for(;++l<u;)if(r=(t=s[l]).type)o[r]=a(o[r],t.name,e);else if(null==e)for(r in o)o[r]=a(o[r],t.name,null);return this}for(;++l<u;)if((r=(t=s[l]).type)&&(r=i(o[r],t.name)))return r}},copy:function(){var t={},e=this._;for(var n in e)t[n]=e[n].slice();return new r(t)},call:function(t,e){if((r=arguments.length-2)>0)for(var r,n,i=new Array(r),a=0;a<r;++a)i[a]=arguments[a+2];if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(n=this._[t],a=0,r=n.length;a<r;++a)n[a].value.apply(e,i)},apply:function(t,e,r){if(!this._.hasOwnProperty(t))throw new Error("unknown type: "+t);for(var n=this._[t],i=0,a=n.length;i<a;++i)n[i].value.apply(e,r)}},t.dispatch=e,Object.defineProperty(t,"__esModule",{value:!0})})},{}],118:[function(e,r,n){!function(i,a){"object"==typeof n&&void 0!==r?a(n,e("d3-quadtree"),e("d3-collection"),e("d3-dispatch"),e("d3-timer")):"function"==typeof t&&t.amd?t(["exports","d3-quadtree","d3-collection","d3-dispatch","d3-timer"],a):a(i.d3=i.d3||{},i.d3,i.d3,i.d3,i.d3)}(this,function(t,e,r,n,i){"use strict";function a(t){return t.x+t.vx}function o(t){return t.y+t.vy}function s(t){return t.index}function l(t,e){var r=t.get(e);if(!r)throw new Error("missing: "+e);return r}function u(t){return t.x}function c(t){return t.y}var h=function(t,e){function r(){var r,i,a=n.length,o=0,s=0;for(r=0;r<a;++r)i=n[r],o+=i.x,s+=i.y;for(o=o/a-t,s=s/a-e,r=0;r<a;++r)i=n[r],i.x-=o,i.y-=s}var n;return null==t&&(t=0),null==e&&(e=0),r.initialize=function(t){n=t},r.x=function(e){return arguments.length?(t=+e,r):t},r.y=function(t){return arguments.length?(e=+t,r):e},r},f=function(t){return function(){return t}},d=function(){return 1e-6*(Math.random()-.5)},p=function(t){function r(){function t(t,e,r,n,i){var a=t.data,o=t.r,s=m+o;{if(!a)return e>f+s||n<f-s||r>p+s||i<p-s;if(a.index>h.index){var l=f-a.x-a.vx,c=p-a.y-a.vy,v=l*l+c*c;v<s*s&&(0===l&&(l=d(),v+=l*l),0===c&&(c=d(),v+=c*c),v=(s-(v=Math.sqrt(v)))/v*u,h.vx+=(l*=v)*(s=(o*=o)/(g+o)),h.vy+=(c*=v)*s,a.vx-=l*(s=1-s),a.vy-=c*s)}}}for(var r,i,h,f,p,m,g,v=s.length,y=0;y<c;++y)for(i=e.quadtree(s,a,o).visitAfter(n),r=0;r<v;++r)h=s[r],m=l[h.index],g=m*m,f=h.x+h.vx,p=h.y+h.vy,i.visit(t)}function n(t){if(t.data)return t.r=l[t.data.index];for(var e=t.r=0;e<4;++e)t[e]&&t[e].r>t.r&&(t.r=t[e].r)}function i(){if(s){var e,r,n=s.length;for(l=new Array(n),e=0;e<n;++e)r=s[e],l[r.index]=+t(r,e,s)}}var s,l,u=1,c=1;return"function"!=typeof t&&(t=f(null==t?1:+t)),r.initialize=function(t){s=t,i()},r.iterations=function(t){return arguments.length?(c=+t,r):c},r.strength=function(t){return arguments.length?(u=+t,r):u},r.radius=function(e){return arguments.length?(t="function"==typeof e?e:f(+e),i(),r):t},r},m=function(t){function e(t){return 1/Math.min(p[t.source.index],p[t.target.index])}function n(e){for(var r=0,n=t.length;r<b;++r)for(var i,a,o,s,l,h,f,p=0;p<n;++p)i=t[p],a=i.source,o=i.target,s=o.x+o.vx-a.x-a.vx||d(),l=o.y+o.vy-a.y-a.vy||d(),h=Math.sqrt(s*s+l*l),h=(h-c[p])/h*e*u[p],s*=h,l*=h,o.vx-=s*(f=m[p]),o.vy-=l*f,a.vx+=s*(f=1-f),a.vy+=l*f}function i(){if(h){var e,n,i=h.length,s=t.length,f=r.map(h,g);for(e=0,p=new Array(i);e<s;++e)n=t[e],n.index=e,"object"!=typeof n.source&&(n.source=l(f,n.source)),"object"!=typeof n.target&&(n.target=l(f,n.target)),p[n.source.index]=(p[n.source.index]||0)+1,p[n.target.index]=(p[n.target.index]||0)+1;for(e=0,m=new Array(s);e<s;++e)n=t[e],m[e]=p[n.source.index]/(p[n.source.index]+p[n.target.index]);u=new Array(s),a(),c=new Array(s),o()}}function a(){if(h)for(var e=0,r=t.length;e<r;++e)u[e]=+v(t[e],e,t)}function o(){if(h)for(var e=0,r=t.length;e<r;++e)c[e]=+y(t[e],e,t)}var u,c,h,p,m,g=s,v=e,y=f(30),b=1;return null==t&&(t=[]),n.initialize=function(t){h=t,i()},n.links=function(e){return arguments.length?(t=e,i(),n):t},n.id=function(t){return arguments.length?(g=t,n):g},n.iterations=function(t){return arguments.length?(b=+t,n):b},n.strength=function(t){return arguments.length?(v="function"==typeof t?t:f(+t),a(),n):v},n.distance=function(t){return arguments.length?(y="function"==typeof t?t:f(+t),o(),n):y},n},g=10,v=Math.PI*(3-Math.sqrt(5)),y=function(t){function e(){a(),y.call("tick",l),u<c&&(m.stop(),y.call("end",l))}function a(){var e,r,n=t.length;for(u+=(f-u)*h,p.each(function(t){t(u)}),e=0;e<n;++e)r=t[e],null==r.fx?r.x+=r.vx*=d:(r.x=r.fx,r.vx=0),null==r.fy?r.y+=r.vy*=d:(r.y=r.fy,r.vy=0)}function o(){for(var e,r=0,n=t.length;r<n;++r){if(e=t[r],e.index=r,isNaN(e.x)||isNaN(e.y)){var i=g*Math.sqrt(r),a=r*v;e.x=i*Math.cos(a),e.y=i*Math.sin(a)}(isNaN(e.vx)||isNaN(e.vy))&&(e.vx=e.vy=0)}}function s(e){return e.initialize&&e.initialize(t),e}var l,u=1,c=.001,h=1-Math.pow(c,1/300),f=0,d=.6,p=r.map(),m=i.timer(e),y=n.dispatch("tick","end");return null==t&&(t=[]),o(),l={tick:a,restart:function(){return m.restart(e),l},stop:function(){return m.stop(),l},nodes:function(e){return arguments.length?(t=e,o(),p.each(s),l):t},alpha:function(t){return arguments.length?(u=+t,l):u},alphaMin:function(t){return arguments.length?(c=+t,l):c},alphaDecay:function(t){return arguments.length?(h=+t,l):+h},alphaTarget:function(t){return arguments.length?(f=+t,l):f},velocityDecay:function(t){return arguments.length?(d=1-t,l):1-d},force:function(t,e){return arguments.length>1?(null==e?p.remove(t):p.set(t,s(e)),l):p.get(t)},find:function(e,r,n){var i,a,o,s,l,u=0,c=t.length;for(null==n?n=1/0:n*=n,u=0;u<c;++u)s=t[u],i=e-s.x,a=r-s.y,(o=i*i+a*a)<n&&(l=s,n=o);return l},on:function(t,e){return arguments.length>1?(y.on(t,e),l):y.on(t)}}},b=function(){function t(t){var r,l=a.length,h=e.quadtree(a,u,c).visitAfter(n);for(s=t,r=0;r<l;++r)o=a[r],h.visit(i)}function r(){if(a){var t,e,r=a.length;for(l=new Array(r),t=0;t<r;++t)e=a[t],l[e.index]=+h(e,t,a)}}function n(t){var e,r,n,i,a,o=0;if(t.length){for(n=i=a=0;a<4;++a)(e=t[a])&&(r=e.value)&&(o+=r,n+=r*e.x,i+=r*e.y);t.x=n/o,t.y=i/o}else{e=t,e.x=e.data.x,e.y=e.data.y;do{o+=l[e.data.index]}while(e=e.next)}t.value=o}function i(t,e,r,n){if(!t.value)return!0;var i=t.x-o.x,a=t.y-o.y,u=n-e,c=i*i+a*a;if(u*u/g<c)return c<m&&(0===i&&(i=d(),c+=i*i),0===a&&(a=d(),c+=a*a),c<p&&(c=Math.sqrt(p*c)),o.vx+=i*t.value*s/c,o.vy+=a*t.value*s/c),!0;if(!(t.length||c>=m)){(t.data!==o||t.next)&&(0===i&&(i=d(),c+=i*i),0===a&&(a=d(),c+=a*a),c<p&&(c=Math.sqrt(p*c)));do{t.data!==o&&(u=l[t.data.index]*s/c,o.vx+=i*u,o.vy+=a*u)}while(t=t.next)}}var a,o,s,l,h=f(-30),p=1,m=1/0,g=.81;return t.initialize=function(t){a=t,r()},t.strength=function(e){return arguments.length?(h="function"==typeof e?e:f(+e),r(),t):h},t.distanceMin=function(e){return arguments.length?(p=e*e,t):Math.sqrt(p)},t.distanceMax=function(e){return arguments.length?(m=e*e,t):Math.sqrt(m)},t.theta=function(e){return arguments.length?(g=e*e,t):Math.sqrt(g)},t},x=function(t){function e(t){for(var e,r=0,o=n.length;r<o;++r)e=n[r],e.vx+=(a[r]-e.x)*i[r]*t}function r(){if(n){var e,r=n.length;for(i=new Array(r),a=new Array(r),e=0;e<r;++e)i[e]=isNaN(a[e]=+t(n[e],e,n))?0:+o(n[e],e,n)}}var n,i,a,o=f(.1);return"function"!=typeof t&&(t=f(null==t?0:+t)),e.initialize=function(t){n=t,r()},e.strength=function(t){return arguments.length?(o="function"==typeof t?t:f(+t),r(),e):o},e.x=function(n){return arguments.length?(t="function"==typeof n?n:f(+n),r(),e):t},e},_=function(t){function e(t){for(var e,r=0,o=n.length;r<o;++r)e=n[r],e.vy+=(a[r]-e.y)*i[r]*t}function r(){if(n){var e,r=n.length;for(i=new Array(r),a=new Array(r),e=0;e<r;++e)i[e]=isNaN(a[e]=+t(n[e],e,n))?0:+o(n[e],e,n)}}var n,i,a,o=f(.1);return"function"!=typeof t&&(t=f(null==t?0:+t)),e.initialize=function(t){n=t,r()},e.strength=function(t){return arguments.length?(o="function"==typeof t?t:f(+t),r(),e):o},e.y=function(n){return arguments.length?(t="function"==typeof n?n:f(+n),r(),e):t},e};t.forceCenter=h,t.forceCollide=p,t.forceLink=m,t.forceManyBody=b,t.forceSimulation=y,t.forceX=x,t.forceY=_,Object.defineProperty(t,"__esModule",{value:!0})})},{"d3-collection":115,"d3-dispatch":117,"d3-quadtree":120,"d3-timer":121}],119:[function(e,r,n){!function(i,a){"object"==typeof n&&void 0!==r?a(n,e("d3-color")):"function"==typeof t&&t.amd?t(["exports","d3-color"],a):a(i.d3=i.d3||{},i.d3)}(this,function(t,e){"use strict";function r(t,e,r,n,i){var a=t*t,o=a*t;return((1-3*t+3*a-o)*e+(4-6*a+3*o)*r+(1+3*t+3*a-3*o)*n+o*i)/6}function n(t,e){return function(r){return t+r*e}}function i(t,e,r){return t=Math.pow(t,r),e=Math.pow(e,r)-t,r=1/r,function(n){return Math.pow(t+n*e,r)}}function a(t,e){var r=e-t;return r?n(t,r>180||r<-180?r-360*Math.round(r/360):r):S(isNaN(t)?e:t)}function o(t){return 1==(t=+t)?s:function(e,r){return r-e?i(e,r,t):S(isNaN(e)?r:e)}}function s(t,e){var r=e-t;return r?n(t,r):S(isNaN(t)?e:t)}function l(t){return function(r){var n,i,a=r.length,o=new Array(a),s=new Array(a),l=new Array(a);for(n=0;n<a;++n)i=e.rgb(r[n]),o[n]=i.r||0,s[n]=i.g||0,l[n]=i.b||0;return o=t(o),s=t(s),l=t(l),i.opacity=1,function(t){return i.r=o(t),i.g=s(t),i.b=l(t),i+""}}}function u(t){return function(){return t}}function c(t){return function(e){return t(e)+""}}function h(t){return"none"===t?U:(_||(_=document.createElement("DIV"),w=document.documentElement,M=document.defaultView),_.style.transform=t,t=M.getComputedStyle(w.appendChild(_),null).getPropertyValue("transform"),w.removeChild(_),t=t.slice(7,-1).split(","),V(+t[0],+t[1],+t[2],+t[3],+t[4],+t[5]))}function f(t){return null==t?U:(k||(k=document.createElementNS("http://www.w3.org/2000/svg","g")),k.setAttribute("transform",t),(t=k.transform.baseVal.consolidate())?(t=t.matrix,V(t.a,t.b,t.c,t.d,t.e,t.f)):U)}function d(t,e,r,n){function i(t){return t.length?t.pop()+" ":""}function a(t,n,i,a,o,s){if(t!==i||n!==a){var l=o.push("translate(",null,e,null,r);s.push({i:l-4,x:D(t,i)},{i:l-2,x:D(n,a)})}else(i||a)&&o.push("translate("+i+e+a+r)}function o(t,e,r,a){t!==e?(t-e>180?e+=360:e-t>180&&(t+=360),a.push({i:r.push(i(r)+"rotate(",null,n)-2,x:D(t,e)})):e&&r.push(i(r)+"rotate("+e+n)}function s(t,e,r,a){t!==e?a.push({i:r.push(i(r)+"skewX(",null,n)-2,x:D(t,e)}):e&&r.push(i(r)+"skewX("+e+n)}function l(t,e,r,n,a,o){if(t!==r||e!==n){var s=a.push(i(a)+"scale(",null,",",null,")");o.push({i:s-4,x:D(t,r)},{i:s-2,x:D(e,n)})}else 1===r&&1===n||a.push(i(a)+"scale("+r+","+n+")")}return function(e,r){var n=[],i=[];return e=t(e),r=t(r),a(e.translateX,e.translateY,r.translateX,r.translateY,n,i),o(e.rotate,r.rotate,n,i),s(e.skewX,r.skewX,n,i),l(e.scaleX,e.scaleY,r.scaleX,r.scaleY,n,i),e=r=null,function(t){for(var e,r=-1,a=i.length;++r<a;)n[(e=i[r]).i]=e.x(t);return n.join("")}}}function p(t){return((t=Math.exp(t))+1/t)/2}function m(t){return((t=Math.exp(t))-1/t)/2}function g(t){return((t=Math.exp(2*t))-1)/(t+1)}function v(t){return function(r,n){var i=t((r=e.hsl(r)).h,(n=e.hsl(n)).h),a=s(r.s,n.s),o=s(r.l,n.l),l=s(r.opacity,n.opacity);return function(t){return r.h=i(t),r.s=a(t),r.l=o(t),r.opacity=l(t),r+""}}}function y(t,r){var n=s((t=e.lab(t)).l,(r=e.lab(r)).l),i=s(t.a,r.a),a=s(t.b,r.b),o=s(t.opacity,r.opacity);return function(e){return t.l=n(e),t.a=i(e),t.b=a(e),t.opacity=o(e),t+""}}function b(t){return function(r,n){var i=t((r=e.hcl(r)).h,(n=e.hcl(n)).h),a=s(r.c,n.c),o=s(r.l,n.l),l=s(r.opacity,n.opacity);return function(t){return r.h=i(t),r.c=a(t),r.l=o(t),r.opacity=l(t),r+""}}}function x(t){return function r(n){function i(r,i){var a=t((r=e.cubehelix(r)).h,(i=e.cubehelix(i)).h),o=s(r.s,i.s),l=s(r.l,i.l),u=s(r.opacity,i.opacity);return function(t){return r.h=a(t),r.s=o(t),r.l=l(Math.pow(t,n)),r.opacity=u(t),r+""}}return n=+n,i.gamma=r,i}(1)}var _,w,M,k,A=function(t){var e=t.length-1;return function(n){var i=n<=0?n=0:n>=1?(n=1,e-1):Math.floor(n*e),a=t[i],o=t[i+1],s=i>0?t[i-1]:2*a-o,l=i<e-1?t[i+2]:2*o-a;return r((n-i/e)*e,s,a,o,l)}},T=function(t){var e=t.length;return function(n){var i=Math.floor(((n%=1)<0?++n:n)*e),a=t[(i+e-1)%e],o=t[i%e],s=t[(i+1)%e],l=t[(i+2)%e];return r((n-i/e)*e,a,o,s,l)}},S=function(t){return function(){return t}},E=function t(r){function n(t,r){var n=i((t=e.rgb(t)).r,(r=e.rgb(r)).r),a=i(t.g,r.g),o=i(t.b,r.b),l=s(t.opacity,r.opacity);return function(e){return t.r=n(e),t.g=a(e),t.b=o(e),t.opacity=l(e),t+""}}var i=o(r);return n.gamma=t,n}(1),L=l(A),C=l(T),I=function(t,e){var r,n=e?e.length:0,i=t?Math.min(n,t.length):0,a=new Array(n),o=new Array(n);for(r=0;r<i;++r)a[r]=j(t[r],e[r]);for(;r<n;++r)o[r]=e[r];return function(t){for(r=0;r<i;++r)o[r]=a[r](t);return o}},z=function(t,e){var r=new Date;return t=+t,e-=t,function(n){return r.setTime(t+e*n),r}},D=function(t,e){return t=+t,e-=t,function(r){return t+e*r}},P=function(t,e){var r,n={},i={};null!==t&&"object"==typeof t||(t={}),null!==e&&"object"==typeof e||(e={});for(r in e)r in t?n[r]=j(t[r],e[r]):i[r]=e[r];return function(t){for(r in n)i[r]=n[r](t);return i}},O=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,R=new RegExp(O.source,"g"),F=function(t,e){var r,n,i,a=O.lastIndex=R.lastIndex=0,o=-1,s=[],l=[];for(t+="",e+="";(r=O.exec(t))&&(n=R.exec(e));)(i=n.index)>a&&(i=e.slice(a,i),s[o]?s[o]+=i:s[++o]=i),(r=r[0])===(n=n[0])?s[o]?s[o]+=n:s[++o]=n:(s[++o]=null,l.push({i:o,x:D(r,n)})),a=R.lastIndex;return a<e.length&&(i=e.slice(a),s[o]?s[o]+=i:s[++o]=i),s.length<2?l[0]?c(l[0].x):u(e):(e=l.length,function(t){for(var r,n=0;n<e;++n)s[(r=l[n]).i]=r.x(t);return s.join("")})},j=function(t,r){var n,i=typeof r;return null==r||"boolean"===i?S(r):("number"===i?D:"string"===i?(n=e.color(r))?(r=n,E):F:r instanceof e.color?E:r instanceof Date?z:Array.isArray(r)?I:"function"!=typeof r.valueOf&&"function"!=typeof r.toString||isNaN(r)?P:D)(t,r)},N=function(t,e){return t=+t,e-=t,function(r){return Math.round(t+e*r)}},B=180/Math.PI,U={translateX:0,translateY:0,rotate:0,skewX:0,scaleX:1,scaleY:1},V=function(t,e,r,n,i,a){var o,s,l;return(o=Math.sqrt(t*t+e*e))&&(t/=o,e/=o),(l=t*r+e*n)&&(r-=t*l,n-=e*l),(s=Math.sqrt(r*r+n*n))&&(r/=s,n/=s,l/=s),t*n<e*r&&(t=-t,e=-e,l=-l,o=-o),{translateX:i,translateY:a,rotate:Math.atan2(e,t)*B,skewX:Math.atan(l)*B,scaleX:o,scaleY:s}},H=d(h,"px, ","px)","deg)"),q=d(f,", ",")",")"),G=Math.SQRT2,Y=function(t,e){var r,n,i=t[0],a=t[1],o=t[2],s=e[0],l=e[1],u=e[2],c=s-i,h=l-a,f=c*c+h*h;if(f<1e-12)n=Math.log(u/o)/G,r=function(t){return[i+t*c,a+t*h,o*Math.exp(G*t*n)]};else{var d=Math.sqrt(f),v=(u*u-o*o+4*f)/(2*o*2*d),y=(u*u-o*o-4*f)/(2*u*2*d),b=Math.log(Math.sqrt(v*v+1)-v),x=Math.log(Math.sqrt(y*y+1)-y);n=(x-b)/G,r=function(t){var e=t*n,r=p(b),s=o/(2*d)*(r*g(G*e+b)-m(b));return[i+s*c,a+s*h,o*r/p(G*e+b)]}}return r.duration=1e3*n,r},W=v(a),X=v(s),Z=b(a),J=b(s),K=x(a),Q=x(s),$=function(t,e){for(var r=new Array(e),n=0;n<e;++n)r[n]=t(n/(e-1));return r};t.interpolate=j,t.interpolateArray=I,t.interpolateBasis=A,t.interpolateBasisClosed=T,t.interpolateDate=z,t.interpolateNumber=D,t.interpolateObject=P,t.interpolateRound=N,t.interpolateString=F,t.interpolateTransformCss=H,t.interpolateTransformSvg=q,t.interpolateZoom=Y,t.interpolateRgb=E,t.interpolateRgbBasis=L,t.interpolateRgbBasisClosed=C,t.interpolateHsl=W,t.interpolateHslLong=X,t.interpolateLab=y,t.interpolateHcl=Z,t.interpolateHclLong=J,t.interpolateCubehelix=K,t.interpolateCubehelixLong=Q,t.quantize=$,Object.defineProperty(t,"__esModule",{value:!0})})},{"d3-color":116}],120:[function(e,r,n){!function(e,i){"object"==typeof n&&void 0!==r?i(n):"function"==typeof t&&t.amd?t(["exports"],i):i(e.d3=e.d3||{})}(this,function(t){"use strict";function e(t,e,r,n){if(isNaN(e)||isNaN(r))return t;var i,a,o,s,l,u,c,h,f,d=t._root,p={data:n},m=t._x0,g=t._y0,v=t._x1,y=t._y1;if(!d)return t._root=p,t;for(;d.length;)if((u=e>=(a=(m+v)/2))?m=a:v=a,(c=r>=(o=(g+y)/2))?g=o:y=o,i=d,!(d=d[h=c<<1|u]))return i[h]=p,t;if(s=+t._x.call(null,d.data),l=+t._y.call(null,d.data),e===s&&r===l)return p.next=d,i?i[h]=p:t._root=p,t;do{i=i?i[h]=new Array(4):t._root=new Array(4),(u=e>=(a=(m+v)/2))?m=a:v=a,(c=r>=(o=(g+y)/2))?g=o:y=o}while((h=c<<1|u)==(f=(l>=o)<<1|s>=a));return i[f]=d,i[h]=p,t}function r(t){var r,n,i,a,o=t.length,s=new Array(o),l=new Array(o),u=1/0,c=1/0,h=-1/0,f=-1/0;for(n=0;n<o;++n)isNaN(i=+this._x.call(null,r=t[n]))||isNaN(a=+this._y.call(null,r))||(s[n]=i,l[n]=a,i<u&&(u=i),i>h&&(h=i),a<c&&(c=a),a>f&&(f=a));for(h<u&&(u=this._x0,h=this._x1),f<c&&(c=this._y0,f=this._y1),this.cover(u,c).cover(h,f),n=0;n<o;++n)e(this,s[n],l[n],t[n]);return this}function n(t){for(var e=0,r=t.length;e<r;++e)this.remove(t[e]);return this}function i(t){return t[0]}function a(t){return t[1]}function o(t,e,r){var n=new s(null==e?i:e,null==r?a:r,NaN,NaN,NaN,NaN);return null==t?n:n.addAll(t)}function s(t,e,r,n,i,a){this._x=t,this._y=e,this._x0=r,this._y0=n,this._x1=i,this._y1=a,this._root=void 0}function l(t){for(var e={data:t.data},r=e;t=t.next;)r=r.next={data:t.data};return e}var u=function(t){var r=+this._x.call(null,t),n=+this._y.call(null,t);return e(this.cover(r,n),r,n,t)},c=function(t,e){if(isNaN(t=+t)||isNaN(e=+e))return this;var r=this._x0,n=this._y0,i=this._x1,a=this._y1;if(isNaN(r))i=(r=Math.floor(t))+1,a=(n=Math.floor(e))+1;else{if(!(r>t||t>i||n>e||e>a))return this;var o,s,l=i-r,u=this._root;switch(s=(e<(n+a)/2)<<1|t<(r+i)/2){case 0:do{o=new Array(4),o[s]=u,u=o}while(l*=2,i=r+l,a=n+l,t>i||e>a);break;case 1:do{o=new Array(4),o[s]=u,u=o}while(l*=2,r=i-l,a=n+l,r>t||e>a);break;case 2:do{o=new Array(4),o[s]=u,u=o}while(l*=2,i=r+l,n=a-l,t>i||n>e);break;case 3:do{o=new Array(4),o[s]=u,u=o}while(l*=2,r=i-l,n=a-l,r>t||n>e)}this._root&&this._root.length&&(this._root=u)}return this._x0=r,this._y0=n,this._x1=i,this._y1=a,this},h=function(){var t=[];return this.visit(function(e){if(!e.length)do{t.push(e.data)}while(e=e.next)}),t},f=function(t){return arguments.length?this.cover(+t[0][0],+t[0][1]).cover(+t[1][0],+t[1][1]):isNaN(this._x0)?void 0:[[this._x0,this._y0],[this._x1,this._y1]]},d=function(t,e,r,n,i){this.node=t,this.x0=e,this.y0=r,this.x1=n,this.y1=i},p=function(t,e,r){var n,i,a,o,s,l,u,c=this._x0,h=this._y0,f=this._x1,p=this._y1,m=[],g=this._root;for(g&&m.push(new d(g,c,h,f,p)),null==r?r=1/0:(c=t-r,h=e-r,f=t+r,p=e+r,r*=r);l=m.pop();)if(!(!(g=l.node)||(i=l.x0)>f||(a=l.y0)>p||(o=l.x1)<c||(s=l.y1)<h))if(g.length){var v=(i+o)/2,y=(a+s)/2;m.push(new d(g[3],v,y,o,s),new d(g[2],i,y,v,s),new d(g[1],v,a,o,y),new d(g[0],i,a,v,y)),(u=(e>=y)<<1|t>=v)&&(l=m[m.length-1],m[m.length-1]=m[m.length-1-u],m[m.length-1-u]=l)}else{var b=t-+this._x.call(null,g.data),x=e-+this._y.call(null,g.data),_=b*b+x*x;if(_<r){var w=Math.sqrt(r=_);c=t-w,h=e-w,f=t+w,p=e+w,n=g.data}}return n},m=function(t){if(isNaN(a=+this._x.call(null,t))||isNaN(o=+this._y.call(null,t)))return this;var e,r,n,i,a,o,s,l,u,c,h,f,d=this._root,p=this._x0,m=this._y0,g=this._x1,v=this._y1;if(!d)return this;if(d.length)for(;;){if((u=a>=(s=(p+g)/2))?p=s:g=s,(c=o>=(l=(m+v)/2))?m=l:v=l,e=d,!(d=d[h=c<<1|u]))return this;if(!d.length)break;(e[h+1&3]||e[h+2&3]||e[h+3&3])&&(r=e,f=h)}for(;d.data!==t;)if(n=d,!(d=d.next))return this;return(i=d.next)&&delete d.next,n?(i?n.next=i:delete n.next,this):e?(i?e[h]=i:delete e[h],(d=e[0]||e[1]||e[2]||e[3])&&d===(e[3]||e[2]||e[1]||e[0])&&!d.length&&(r?r[f]=d:this._root=d),this):(this._root=i,this)},g=function(){return this._root},v=function(){var t=0;return this.visit(function(e){if(!e.length)do{++t}while(e=e.next)}),t},y=function(t){var e,r,n,i,a,o,s=[],l=this._root;for(l&&s.push(new d(l,this._x0,this._y0,this._x1,this._y1));e=s.pop();)if(!t(l=e.node,n=e.x0,i=e.y0,a=e.x1,o=e.y1)&&l.length){var u=(n+a)/2,c=(i+o)/2;(r=l[3])&&s.push(new d(r,u,c,a,o)),(r=l[2])&&s.push(new d(r,n,c,u,o)),(r=l[1])&&s.push(new d(r,u,i,a,c)),(r=l[0])&&s.push(new d(r,n,i,u,c))}return this},b=function(t){var e,r=[],n=[];for(this._root&&r.push(new d(this._root,this._x0,this._y0,this._x1,this._y1));e=r.pop();){var i=e.node;if(i.length){var a,o=e.x0,s=e.y0,l=e.x1,u=e.y1,c=(o+l)/2,h=(s+u)/2;(a=i[0])&&r.push(new d(a,o,s,c,h)),(a=i[1])&&r.push(new d(a,c,s,l,h)),(a=i[2])&&r.push(new d(a,o,h,c,u)),(a=i[3])&&r.push(new d(a,c,h,l,u))}n.push(e)}for(;e=n.pop();)t(e.node,e.x0,e.y0,e.x1,e.y1);return this},x=function(t){return arguments.length?(this._x=t,this):this._x},_=function(t){return arguments.length?(this._y=t,this):this._y},w=o.prototype=s.prototype;w.copy=function(){var t,e,r=new s(this._x,this._y,this._x0,this._y0,this._x1,this._y1),n=this._root;if(!n)return r;if(!n.length)return r._root=l(n),r;for(t=[{source:n,target:r._root=new Array(4)}];n=t.pop();)for(var i=0;i<4;++i)(e=n.source[i])&&(e.length?t.push({source:e,target:n.target[i]=new Array(4)}):n.target[i]=l(e));return r},w.add=u,w.addAll=r,w.cover=c,w.data=h,w.extent=f,w.find=p,w.remove=m,w.removeAll=n,w.root=g,w.size=v,w.visit=y,w.visitAfter=b,w.x=x,w.y=_,t.quadtree=o,Object.defineProperty(t,"__esModule",{value:!0})})},{}],121:[function(e,r,n){!function(e,i){"object"==typeof n&&void 0!==r?i(n):"function"==typeof t&&t.amd?t(["exports"],i):i(e.d3=e.d3||{})}(this,function(t){"use strict";function e(){return v||(x(r),v=b.now()+y)}function r(){v=0}function n(){this._call=this._time=this._next=null}function i(t,e,r){var i=new n;return i.restart(t,e,r),i}function a(){e(),++f;for(var t,r=c;r;)(t=v-r._time)>=0&&r._call.call(null,t),r=r._next;--f}function o(){v=(g=b.now())+y,f=d=0;try{a()}finally{f=0,l(),v=0}}function s(){var t=b.now(),e=t-g;e>m&&(y-=e,g=t)}function l(){for(var t,e,r=c,n=1/0;r;)r._call?(n>r._time&&(n=r._time),t=r,r=r._next):(e=r._next,r._next=null,r=t?t._next=e:c=e);h=t,u(n)}function u(t){if(!f){d&&(d=clearTimeout(d));var e=t-v;e>24?(t<1/0&&(d=setTimeout(o,e)),p&&(p=clearInterval(p))):(p||(g=v,p=setInterval(s,m)),f=1,x(o))}}var c,h,f=0,d=0,p=0,m=1e3,g=0,v=0,y=0,b="object"==typeof performance&&performance.now?performance:Date,x="function"==typeof requestAnimationFrame?requestAnimationFrame:function(t){setTimeout(t,17)};n.prototype=i.prototype={constructor:n,restart:function(t,r,n){if("function"!=typeof t)throw new TypeError("callback is not a function");n=(null==n?e():+n)+(null==r?0:+r),this._next||h===this||(h?h._next=this:c=this,h=this),this._call=t,this._time=n,u()},stop:function(){this._call&&(this._call=null,this._time=1/0,u())}};var _=function(t,e,r){var i=new n;return e=null==e?0:+e,i.restart(function(r){i.stop(),t(r+e)},e,r),i},w=function(t,r,i){var a=new n,o=r;return null==r?(a.restart(t,r,i),a):(r=+r,i=null==i?e():+i,a.restart(function e(n){n+=o,a.restart(e,o+=r,i),t(n)},r,i),a)};t.now=e,t.timer=i,t.timerFlush=a,t.timeout=_,t.interval=w,Object.defineProperty(t,"__esModule",{value:!0})})},{}],122:[function(e,r,n){!function(){function e(t){return t&&(t.ownerDocument||t.document||t).documentElement}function n(t){return t&&(t.ownerDocument&&t.ownerDocument.defaultView||t.document&&t||t.defaultView)}function i(t,e){return t<e?-1:t>e?1:t>=e?0:NaN}function a(t){return null===t?NaN:+t}function o(t){return!isNaN(t)}function s(t){return{left:function(e,r,n,i){for(arguments.length<3&&(n=0),arguments.length<4&&(i=e.length);n<i;){var a=n+i>>>1;t(e[a],r)<0?n=a+1:i=a}return n},right:function(e,r,n,i){for(arguments.length<3&&(n=0),arguments.length<4&&(i=e.length);n<i;){var a=n+i>>>1;t(e[a],r)>0?i=a:n=a+1}return n}}}function l(t){return t.length}function u(t){for(var e=1;t*e%1;)e*=10;return e}function c(t,e){for(var r in e)Object.defineProperty(t.prototype,r,{value:e[r],enumerable:!1})}function h(){this._=Object.create(null)}function f(t){return(t+="")===_o||t[0]===wo?wo+t:t}function d(t){return(t+="")[0]===wo?t.slice(1):t}function p(t){return f(t)in this._}function m(t){return(t=f(t))in this._&&delete this._[t]}function g(){var t=[];for(var e in this._)t.push(d(e));return t}function v(){var t=0;for(var e in this._)++t;return t}function y(){for(var t in this._)return!1;return!0}function b(){this._=Object.create(null)}function x(t){return t}function _(t,e,r){return function(){var n=r.apply(e,arguments);return n===e?t:n}}function w(t,e){if(e in t)return e;e=e.charAt(0).toUpperCase()+e.slice(1);for(var r=0,n=Mo.length;r<n;++r){var i=Mo[r]+e;if(i in t)return i}}function M(){}function k(){}function A(t){function e(){for(var e,n=r,i=-1,a=n.length;++i<a;)(e=n[i].on)&&e.apply(this,arguments);return t}var r=[],n=new h;return e.on=function(e,i){var a,o=n.get(e);return arguments.length<2?o&&o.on:(o&&(o.on=null,r=r.slice(0,a=r.indexOf(o)).concat(r.slice(a+1)),n.remove(e)),i&&r.push(n.set(e,{on:i})),t)},e}function T(){uo.event.preventDefault()}function S(){for(var t,e=uo.event;t=e.sourceEvent;)e=t;return e}function E(t){for(var e=new k,r=0,n=arguments.length;++r<n;)e[arguments[r]]=A(e);return e.of=function(r,n){return function(i){try{var a=i.sourceEvent=uo.event;i.target=t,uo.event=i,e[i.type].apply(r,n)}finally{uo.event=a}}},e}function L(t){return Ao(t,Lo),t}function C(t){return"function"==typeof t?t:function(){return To(t,this)}}function I(t){return"function"==typeof t?t:function(){return So(t,this)}}function z(t,e){function r(){this.removeAttribute(t)}function n(){this.removeAttributeNS(t.space,t.local)}function i(){this.setAttribute(t,e)}function a(){this.setAttributeNS(t.space,t.local,e)}function o(){var r=e.apply(this,arguments);null==r?this.removeAttribute(t):this.setAttribute(t,r)}function s(){var r=e.apply(this,arguments);null==r?this.removeAttributeNS(t.space,t.local):this.setAttributeNS(t.space,t.local,r)}return t=uo.ns.qualify(t),null==e?t.local?n:r:"function"==typeof e?t.local?s:o:t.local?a:i}function D(t){return t.trim().replace(/\s+/g," ")}function P(t){return new RegExp("(?:^|\\s+)"+uo.requote(t)+"(?:\\s+|$)","g")}function O(t){return(t+"").trim().split(/^|\s+/)}function R(t,e){function r(){for(var r=-1;++r<i;)t[r](this,e)}function n(){for(var r=-1,n=e.apply(this,arguments);++r<i;)t[r](this,n)}t=O(t).map(F);var i=t.length;return"function"==typeof e?n:r}function F(t){var e=P(t);return function(r,n){if(i=r.classList)return n?i.add(t):i.remove(t);var i=r.getAttribute("class")||"";n?(e.lastIndex=0,e.test(i)||r.setAttribute("class",D(i+" "+t))):r.setAttribute("class",D(i.replace(e," ")))}}function j(t,e,r){function n(){this.style.removeProperty(t)}function i(){this.style.setProperty(t,e,r)}function a(){var n=e.apply(this,arguments);null==n?this.style.removeProperty(t):this.style.setProperty(t,n,r)}return null==e?n:"function"==typeof e?a:i}function N(t,e){function r(){delete this[t]}function n(){this[t]=e}function i(){var r=e.apply(this,arguments);null==r?delete this[t]:this[t]=r}return null==e?r:"function"==typeof e?i:n}function B(t){function e(){var e=this.ownerDocument,r=this.namespaceURI;return r===Co&&e.documentElement.namespaceURI===Co?e.createElement(t):e.createElementNS(r,t)}function r(){return this.ownerDocument.createElementNS(t.space,t.local)}return"function"==typeof t?t:(t=uo.ns.qualify(t)).local?r:e}function U(){var t=this.parentNode;t&&t.removeChild(this)}function V(t){return{__data__:t}}function H(t){return function(){return Eo(this,t)}}function q(t){return arguments.length||(t=i),function(e,r){return e&&r?t(e.__data__,r.__data__):!e-!r}}function G(t,e){for(var r=0,n=t.length;r<n;r++)for(var i,a=t[r],o=0,s=a.length;o<s;o++)(i=a[o])&&e(i,o,r);return t}function Y(t){return Ao(t,zo),t}function W(t){var e,r;return function(n,i,a){var o,s=t[a].update,l=s.length;for(a!=r&&(r=a,e=0),i>=e&&(e=i+1);!(o=s[e])&&++e<l;);return o}}function X(t,e,r){function n(){var e=this[o];e&&(this.removeEventListener(t,e,e.$),delete this[o])}function i(){var i=l(e,ho(arguments));n.call(this),this.addEventListener(t,this[o]=i,i.$=r),i._=e}function a(){var e,r=new RegExp("^__on([^.]+)"+uo.requote(t)+"$");for(var n in this)if(e=n.match(r)){var i=this[n];this.removeEventListener(e[1],i,i.$),delete this[n]}}var o="__on"+t,s=t.indexOf("."),l=Z;s>0&&(t=t.slice(0,s));var u=Do.get(t);return u&&(t=u,l=J),s?e?i:n:e?M:a}function Z(t,e){return function(r){var n=uo.event;uo.event=r,e[0]=this.__data__;try{t.apply(this,e)}finally{uo.event=n}}}function J(t,e){var r=Z(t,e);return function(t){var e=this,n=t.relatedTarget;n&&(n===e||8&n.compareDocumentPosition(e))||r.call(e,t)}}function K(t){var r=".dragsuppress-"+ ++Oo,i="click"+r,a=uo.select(n(t)).on("touchmove"+r,T).on("dragstart"+r,T).on("selectstart"+r,T);if(null==Po&&(Po=!("onselectstart"in t)&&w(t.style,"userSelect")),Po){var o=e(t).style,s=o[Po];o[Po]="none"}return function(t){if(a.on(r,null),Po&&(o[Po]=s),t){var e=function(){a.on(i,null)};a.on(i,function(){T(),e()},!0),setTimeout(e,0)}}}function Q(t,e){e.changedTouches&&(e=e.changedTouches[0]);var r=t.ownerSVGElement||t;if(r.createSVGPoint){var i=r.createSVGPoint();if(Ro<0){var a=n(t);if(a.scrollX||a.scrollY){r=uo.select("body").append("svg").style({position:"absolute",top:0,left:0,margin:0,padding:0,border:"none"},"important");var o=r[0][0].getScreenCTM();Ro=!(o.f||o.e),r.remove()}}return Ro?(i.x=e.pageX,i.y=e.pageY):(i.x=e.clientX,i.y=e.clientY),i=i.matrixTransform(t.getScreenCTM().inverse()),[i.x,i.y]}var s=t.getBoundingClientRect();return[e.clientX-s.left-t.clientLeft,e.clientY-s.top-t.clientTop]}function $(){return uo.event.changedTouches[0].identifier}function tt(t){return t>0?1:t<0?-1:0}function et(t,e,r){return(e[0]-t[0])*(r[1]-t[1])-(e[1]-t[1])*(r[0]-t[0])}function rt(t){return t>1?0:t<-1?No:Math.acos(t)}function nt(t){return t>1?Vo:t<-1?-Vo:Math.asin(t)}function it(t){return((t=Math.exp(t))-1/t)/2}function at(t){return((t=Math.exp(t))+1/t)/2}function ot(t){return((t=Math.exp(2*t))-1)/(t+1)}function st(t){return(t=Math.sin(t/2))*t}function lt(){}function ut(t,e,r){return this instanceof ut?(this.h=+t,this.s=+e,void(this.l=+r)):arguments.length<2?t instanceof ut?new ut(t.h,t.s,t.l):Mt(""+t,kt,ut):new ut(t,e,r)}function ct(t,e,r){function n(t){return t>360?t-=360:t<0&&(t+=360),t<60?a+(o-a)*t/60:t<180?o:t<240?a+(o-a)*(240-t)/60:a}function i(t){return Math.round(255*n(t))}var a,o;return t=isNaN(t)?0:(t%=360)<0?t+360:t,e=isNaN(e)?0:e<0?0:e>1?1:e,r=r<0?0:r>1?1:r,o=r<=.5?r*(1+e):r+e-r*e,a=2*r-o,new bt(i(t+120),i(t),i(t-120))}function ht(t,e,r){return this instanceof ht?(this.h=+t,this.c=+e,void(this.l=+r)):arguments.length<2?t instanceof ht?new ht(t.h,t.c,t.l):t instanceof dt?mt(t.l,t.a,t.b):mt((t=At((t=uo.rgb(t)).r,t.g,t.b)).l,t.a,t.b):new ht(t,e,r)}function ft(t,e,r){return isNaN(t)&&(t=0),isNaN(e)&&(e=0),new dt(r,Math.cos(t*=Ho)*e,Math.sin(t)*e)}function dt(t,e,r){return this instanceof dt?(this.l=+t,this.a=+e,void(this.b=+r)):arguments.length<2?t instanceof dt?new dt(t.l,t.a,t.b):t instanceof ht?ft(t.h,t.c,t.l):At((t=bt(t)).r,t.g,t.b):new dt(t,e,r)}function pt(t,e,r){var n=(t+16)/116,i=n+e/500,a=n-r/200;return i=gt(i)*Qo,n=gt(n)*$o,a=gt(a)*ts,new bt(yt(3.2404542*i-1.5371385*n-.4985314*a),yt(-.969266*i+1.8760108*n+.041556*a),yt(.0556434*i-.2040259*n+1.0572252*a))}function mt(t,e,r){return t>0?new ht(Math.atan2(r,e)*qo,Math.sqrt(e*e+r*r),t):new ht(NaN,NaN,t)}function gt(t){return t>.206893034?t*t*t:(t-4/29)/7.787037}function vt(t){return t>.008856?Math.pow(t,1/3):7.787037*t+4/29}function yt(t){return Math.round(255*(t<=.00304?12.92*t:1.055*Math.pow(t,1/2.4)-.055))}function bt(t,e,r){return this instanceof bt?(this.r=~~t,this.g=~~e,void(this.b=~~r)):arguments.length<2?t instanceof bt?new bt(t.r,t.g,t.b):Mt(""+t,bt,ct):new bt(t,e,r)}function xt(t){return new bt(t>>16,t>>8&255,255&t)}function _t(t){return xt(t)+""}function wt(t){return t<16?"0"+Math.max(0,t).toString(16):Math.min(255,t).toString(16)}function Mt(t,e,r){var n,i,a,o=0,s=0,l=0;if(n=/([a-z]+)\((.*)\)/.exec(t=t.toLowerCase()))switch(i=n[2].split(","),n[1]){case"hsl":return r(parseFloat(i[0]),parseFloat(i[1])/100,parseFloat(i[2])/100);case"rgb":return e(St(i[0]),St(i[1]),St(i[2]))}return(a=ns.get(t))?e(a.r,a.g,a.b):(null==t||"#"!==t.charAt(0)||isNaN(a=parseInt(t.slice(1),16))||(4===t.length?(o=(3840&a)>>4,o|=o>>4,s=240&a,s|=s>>4,l=15&a,l|=l<<4):7===t.length&&(o=(16711680&a)>>16,s=(65280&a)>>8,l=255&a)),e(o,s,l))}function kt(t,e,r){var n,i,a=Math.min(t/=255,e/=255,r/=255),o=Math.max(t,e,r),s=o-a,l=(o+a)/2;return s?(i=l<.5?s/(o+a):s/(2-o-a),n=t==o?(e-r)/s+(e<r?6:0):e==o?(r-t)/s+2:(t-e)/s+4,n*=60):(n=NaN,i=l>0&&l<1?0:n),new ut(n,i,l)}function At(t,e,r){t=Tt(t),e=Tt(e),r=Tt(r);var n=vt((.4124564*t+.3575761*e+.1804375*r)/Qo),i=vt((.2126729*t+.7151522*e+.072175*r)/$o);return dt(116*i-16,500*(n-i),200*(i-vt((.0193339*t+.119192*e+.9503041*r)/ts)))}function Tt(t){return(t/=255)<=.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)}function St(t){var e=parseFloat(t);return"%"===t.charAt(t.length-1)?Math.round(2.55*e):e}
function Et(t){return"function"==typeof t?t:function(){return t}}function Lt(t){return function(e,r,n){return 2===arguments.length&&"function"==typeof r&&(n=r,r=null),Ct(e,r,t,n)}}function Ct(t,e,r,n){function i(){var t,e=l.status;if(!e&&zt(l)||e>=200&&e<300||304===e){try{t=r.call(a,l)}catch(t){return void o.error.call(a,t)}o.load.call(a,t)}else o.error.call(a,l)}var a={},o=uo.dispatch("beforesend","progress","load","error"),s={},l=new XMLHttpRequest,u=null;return!this.XDomainRequest||"withCredentials"in l||!/^(http(s)?:)?\/\//.test(t)||(l=new XDomainRequest),"onload"in l?l.onload=l.onerror=i:l.onreadystatechange=function(){l.readyState>3&&i()},l.onprogress=function(t){var e=uo.event;uo.event=t;try{o.progress.call(a,l)}finally{uo.event=e}},a.header=function(t,e){return t=(t+"").toLowerCase(),arguments.length<2?s[t]:(null==e?delete s[t]:s[t]=e+"",a)},a.mimeType=function(t){return arguments.length?(e=null==t?null:t+"",a):e},a.responseType=function(t){return arguments.length?(u=t,a):u},a.response=function(t){return r=t,a},["get","post"].forEach(function(t){a[t]=function(){return a.send.apply(a,[t].concat(ho(arguments)))}}),a.send=function(r,n,i){if(2===arguments.length&&"function"==typeof n&&(i=n,n=null),l.open(r,t,!0),null==e||"accept"in s||(s.accept=e+",*/*"),l.setRequestHeader)for(var c in s)l.setRequestHeader(c,s[c]);return null!=e&&l.overrideMimeType&&l.overrideMimeType(e),null!=u&&(l.responseType=u),null!=i&&a.on("error",i).on("load",function(t){i(null,t)}),o.beforesend.call(a,l),l.send(null==n?null:n),a},a.abort=function(){return l.abort(),a},uo.rebind(a,o,"on"),null==n?a:a.get(It(n))}function It(t){return 1===t.length?function(e,r){t(null==e?r:null)}:t}function zt(t){var e=t.responseType;return e&&"text"!==e?t.response:t.responseText}function Dt(t,e,r){var n=arguments.length;n<2&&(e=0),n<3&&(r=Date.now());var i=r+e,a={c:t,t:i,n:null};return as?as.n=a:is=a,as=a,os||(ss=clearTimeout(ss),os=1,ls(Pt)),a}function Pt(){var t=Ot(),e=Rt()-t;e>24?(isFinite(e)&&(clearTimeout(ss),ss=setTimeout(Pt,e)),os=0):(os=1,ls(Pt))}function Ot(){for(var t=Date.now(),e=is;e;)t>=e.t&&e.c(t-e.t)&&(e.c=null),e=e.n;return t}function Rt(){for(var t,e=is,r=1/0;e;)e.c?(e.t<r&&(r=e.t),e=(t=e).n):e=t?t.n=e.n:is=e.n;return as=t,r}function Ft(t,e){return e-(t?Math.ceil(Math.log(t)/Math.LN10):1)}function jt(t,e){var r=Math.pow(10,3*xo(8-e));return{scale:e>8?function(t){return t/r}:function(t){return t*r},symbol:t}}function Nt(t){var e=t.decimal,r=t.thousands,n=t.grouping,i=t.currency,a=n&&r?function(t,e){for(var i=t.length,a=[],o=0,s=n[0],l=0;i>0&&s>0&&(l+s+1>e&&(s=Math.max(1,e-l)),a.push(t.substring(i-=s,i+s)),!((l+=s+1)>e));)s=n[o=(o+1)%n.length];return a.reverse().join(r)}:x;return function(t){var r=cs.exec(t),n=r[1]||" ",o=r[2]||">",s=r[3]||"-",l=r[4]||"",u=r[5],c=+r[6],h=r[7],f=r[8],d=r[9],p=1,m="",g="",v=!1,y=!0;switch(f&&(f=+f.substring(1)),(u||"0"===n&&"="===o)&&(u=n="0",o="="),d){case"n":h=!0,d="g";break;case"%":p=100,g="%",d="f";break;case"p":p=100,g="%",d="r";break;case"b":case"o":case"x":case"X":"#"===l&&(m="0"+d.toLowerCase());case"c":y=!1;case"d":v=!0,f=0;break;case"s":p=-1,d="r"}"$"===l&&(m=i[0],g=i[1]),"r"!=d||f||(d="g"),null!=f&&("g"==d?f=Math.max(1,Math.min(21,f)):"e"!=d&&"f"!=d||(f=Math.max(0,Math.min(20,f)))),d=hs.get(d)||Bt;var b=u&&h;return function(t){var r=g;if(v&&t%1)return"";var i=t<0||0===t&&1/t<0?(t=-t,"-"):"-"===s?"":s;if(p<0){var l=uo.formatPrefix(t,f);t=l.scale(t),r=l.symbol+g}else t*=p;t=d(t,f);var x,_,w=t.lastIndexOf(".");if(w<0){var M=y?t.lastIndexOf("e"):-1;M<0?(x=t,_=""):(x=t.substring(0,M),_=t.substring(M))}else x=t.substring(0,w),_=e+t.substring(w+1);!u&&h&&(x=a(x,1/0));var k=m.length+x.length+_.length+(b?0:i.length),A=k<c?new Array(k=c-k+1).join(n):"";return b&&(x=a(A+x,A.length?c-_.length:1/0)),i+=m,t=x+_,("<"===o?i+t+A:">"===o?A+i+t:"^"===o?A.substring(0,k>>=1)+i+t+A.substring(k):i+(b?t:A+t))+r}}}function Bt(t){return t+""}function Ut(){this._=new Date(arguments.length>1?Date.UTC.apply(this,arguments):arguments[0])}function Vt(t,e,r){function n(e){var r=t(e),n=a(r,1);return e-r<n-e?r:n}function i(r){return e(r=t(new ds(r-1)),1),r}function a(t,r){return e(t=new ds(+t),r),t}function o(t,n,a){var o=i(t),s=[];if(a>1)for(;o<n;)r(o)%a||s.push(new Date(+o)),e(o,1);else for(;o<n;)s.push(new Date(+o)),e(o,1);return s}function s(t,e,r){try{ds=Ut;var n=new Ut;return n._=t,o(n,e,r)}finally{ds=Date}}t.floor=t,t.round=n,t.ceil=i,t.offset=a,t.range=o;var l=t.utc=Ht(t);return l.floor=l,l.round=Ht(n),l.ceil=Ht(i),l.offset=Ht(a),l.range=s,t}function Ht(t){return function(e,r){try{ds=Ut;var n=new Ut;return n._=e,t(n,r)._}finally{ds=Date}}}function qt(t){function e(t){function e(e){for(var r,i,a,o=[],s=-1,l=0;++s<n;)37===t.charCodeAt(s)&&(o.push(t.slice(l,s)),null!=(i=ms[r=t.charAt(++s)])&&(r=t.charAt(++s)),(a=E[r])&&(r=a(e,null==i?"e"===r?" ":"0":i)),o.push(r),l=s+1);return o.push(t.slice(l,s)),o.join("")}var n=t.length;return e.parse=function(e){var n={y:1900,m:0,d:1,H:0,M:0,S:0,L:0,Z:null};if(r(n,t,e,0)!=e.length)return null;"p"in n&&(n.H=n.H%12+12*n.p);var i=null!=n.Z&&ds!==Ut,a=new(i?Ut:ds);return"j"in n?a.setFullYear(n.y,0,n.j):"W"in n||"U"in n?("w"in n||(n.w="W"in n?1:0),a.setFullYear(n.y,0,1),a.setFullYear(n.y,0,"W"in n?(n.w+6)%7+7*n.W-(a.getDay()+5)%7:n.w+7*n.U-(a.getDay()+6)%7)):a.setFullYear(n.y,n.m,n.d),a.setHours(n.H+(n.Z/100|0),n.M+n.Z%100,n.S,n.L),i?a._:a},e.toString=function(){return t},e}function r(t,e,r,n){for(var i,a,o,s=0,l=e.length,u=r.length;s<l;){if(n>=u)return-1;if(37===(i=e.charCodeAt(s++))){if(o=e.charAt(s++),!(a=L[o in ms?e.charAt(s++):o])||(n=a(t,r,n))<0)return-1}else if(i!=r.charCodeAt(n++))return-1}return n}function n(t,e,r){w.lastIndex=0;var n=w.exec(e.slice(r));return n?(t.w=M.get(n[0].toLowerCase()),r+n[0].length):-1}function i(t,e,r){x.lastIndex=0;var n=x.exec(e.slice(r));return n?(t.w=_.get(n[0].toLowerCase()),r+n[0].length):-1}function a(t,e,r){T.lastIndex=0;var n=T.exec(e.slice(r));return n?(t.m=S.get(n[0].toLowerCase()),r+n[0].length):-1}function o(t,e,r){k.lastIndex=0;var n=k.exec(e.slice(r));return n?(t.m=A.get(n[0].toLowerCase()),r+n[0].length):-1}function s(t,e,n){return r(t,E.c.toString(),e,n)}function l(t,e,n){return r(t,E.x.toString(),e,n)}function u(t,e,n){return r(t,E.X.toString(),e,n)}function c(t,e,r){var n=b.get(e.slice(r,r+=2).toLowerCase());return null==n?-1:(t.p=n,r)}var h=t.dateTime,f=t.date,d=t.time,p=t.periods,m=t.days,g=t.shortDays,v=t.months,y=t.shortMonths;e.utc=function(t){function r(t){try{ds=Ut;var e=new ds;return e._=t,n(e)}finally{ds=Date}}var n=e(t);return r.parse=function(t){try{ds=Ut;var e=n.parse(t);return e&&e._}finally{ds=Date}},r.toString=n.toString,r},e.multi=e.utc.multi=ce;var b=uo.map(),x=Yt(m),_=Wt(m),w=Yt(g),M=Wt(g),k=Yt(v),A=Wt(v),T=Yt(y),S=Wt(y);p.forEach(function(t,e){b.set(t.toLowerCase(),e)});var E={a:function(t){return g[t.getDay()]},A:function(t){return m[t.getDay()]},b:function(t){return y[t.getMonth()]},B:function(t){return v[t.getMonth()]},c:e(h),d:function(t,e){return Gt(t.getDate(),e,2)},e:function(t,e){return Gt(t.getDate(),e,2)},H:function(t,e){return Gt(t.getHours(),e,2)},I:function(t,e){return Gt(t.getHours()%12||12,e,2)},j:function(t,e){return Gt(1+fs.dayOfYear(t),e,3)},L:function(t,e){return Gt(t.getMilliseconds(),e,3)},m:function(t,e){return Gt(t.getMonth()+1,e,2)},M:function(t,e){return Gt(t.getMinutes(),e,2)},p:function(t){return p[+(t.getHours()>=12)]},S:function(t,e){return Gt(t.getSeconds(),e,2)},U:function(t,e){return Gt(fs.sundayOfYear(t),e,2)},w:function(t){return t.getDay()},W:function(t,e){return Gt(fs.mondayOfYear(t),e,2)},x:e(f),X:e(d),y:function(t,e){return Gt(t.getFullYear()%100,e,2)},Y:function(t,e){return Gt(t.getFullYear()%1e4,e,4)},Z:le,"%":function(){return"%"}},L={a:n,A:i,b:a,B:o,c:s,d:re,e:re,H:ie,I:ie,j:ne,L:se,m:ee,M:ae,p:c,S:oe,U:Zt,w:Xt,W:Jt,x:l,X:u,y:Qt,Y:Kt,Z:$t,"%":ue};return e}function Gt(t,e,r){var n=t<0?"-":"",i=(n?-t:t)+"",a=i.length;return n+(a<r?new Array(r-a+1).join(e)+i:i)}function Yt(t){return new RegExp("^(?:"+t.map(uo.requote).join("|")+")","i")}function Wt(t){for(var e=new h,r=-1,n=t.length;++r<n;)e.set(t[r].toLowerCase(),r);return e}function Xt(t,e,r){gs.lastIndex=0;var n=gs.exec(e.slice(r,r+1));return n?(t.w=+n[0],r+n[0].length):-1}function Zt(t,e,r){gs.lastIndex=0;var n=gs.exec(e.slice(r));return n?(t.U=+n[0],r+n[0].length):-1}function Jt(t,e,r){gs.lastIndex=0;var n=gs.exec(e.slice(r));return n?(t.W=+n[0],r+n[0].length):-1}function Kt(t,e,r){gs.lastIndex=0;var n=gs.exec(e.slice(r,r+4));return n?(t.y=+n[0],r+n[0].length):-1}function Qt(t,e,r){gs.lastIndex=0;var n=gs.exec(e.slice(r,r+2));return n?(t.y=te(+n[0]),r+n[0].length):-1}function $t(t,e,r){return/^[+-]\d{4}$/.test(e=e.slice(r,r+5))?(t.Z=-e,r+5):-1}function te(t){return t+(t>68?1900:2e3)}function ee(t,e,r){gs.lastIndex=0;var n=gs.exec(e.slice(r,r+2));return n?(t.m=n[0]-1,r+n[0].length):-1}function re(t,e,r){gs.lastIndex=0;var n=gs.exec(e.slice(r,r+2));return n?(t.d=+n[0],r+n[0].length):-1}function ne(t,e,r){gs.lastIndex=0;var n=gs.exec(e.slice(r,r+3));return n?(t.j=+n[0],r+n[0].length):-1}function ie(t,e,r){gs.lastIndex=0;var n=gs.exec(e.slice(r,r+2));return n?(t.H=+n[0],r+n[0].length):-1}function ae(t,e,r){gs.lastIndex=0;var n=gs.exec(e.slice(r,r+2));return n?(t.M=+n[0],r+n[0].length):-1}function oe(t,e,r){gs.lastIndex=0;var n=gs.exec(e.slice(r,r+2));return n?(t.S=+n[0],r+n[0].length):-1}function se(t,e,r){gs.lastIndex=0;var n=gs.exec(e.slice(r,r+3));return n?(t.L=+n[0],r+n[0].length):-1}function le(t){var e=t.getTimezoneOffset(),r=e>0?"-":"+",n=xo(e)/60|0,i=xo(e)%60;return r+Gt(n,"0",2)+Gt(i,"0",2)}function ue(t,e,r){vs.lastIndex=0;var n=vs.exec(e.slice(r,r+1));return n?r+n[0].length:-1}function ce(t){for(var e=t.length,r=-1;++r<e;)t[r][0]=this(t[r][0]);return function(e){for(var r=0,n=t[r];!n[1](e);)n=t[++r];return n[0](e)}}function he(){}function fe(t,e,r){var n=r.s=t+e,i=n-t,a=n-i;r.t=t-a+(e-i)}function de(t,e){t&&_s.hasOwnProperty(t.type)&&_s[t.type](t,e)}function pe(t,e,r){var n,i=-1,a=t.length-r;for(e.lineStart();++i<a;)n=t[i],e.point(n[0],n[1],n[2]);e.lineEnd()}function me(t,e){var r=-1,n=t.length;for(e.polygonStart();++r<n;)pe(t[r],e,1);e.polygonEnd()}function ge(){function t(t,e){t*=Ho,e=e*Ho/2+No/4;var r=t-n,o=r>=0?1:-1,s=o*r,l=Math.cos(e),u=Math.sin(e),c=a*u,h=i*l+c*Math.cos(s),f=c*o*Math.sin(s);Ms.add(Math.atan2(f,h)),n=t,i=l,a=u}var e,r,n,i,a;ks.point=function(o,s){ks.point=t,n=(e=o)*Ho,i=Math.cos(s=(r=s)*Ho/2+No/4),a=Math.sin(s)},ks.lineEnd=function(){t(e,r)}}function ve(t){var e=t[0],r=t[1],n=Math.cos(r);return[n*Math.cos(e),n*Math.sin(e),Math.sin(r)]}function ye(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}function be(t,e){return[t[1]*e[2]-t[2]*e[1],t[2]*e[0]-t[0]*e[2],t[0]*e[1]-t[1]*e[0]]}function xe(t,e){t[0]+=e[0],t[1]+=e[1],t[2]+=e[2]}function _e(t,e){return[t[0]*e,t[1]*e,t[2]*e]}function we(t){var e=Math.sqrt(t[0]*t[0]+t[1]*t[1]+t[2]*t[2]);t[0]/=e,t[1]/=e,t[2]/=e}function Me(t){return[Math.atan2(t[1],t[0]),nt(t[2])]}function ke(t,e){return xo(t[0]-e[0])<Fo&&xo(t[1]-e[1])<Fo}function Ae(t,e){t*=Ho;var r=Math.cos(e*=Ho);Te(r*Math.cos(t),r*Math.sin(t),Math.sin(e))}function Te(t,e,r){++As,Ss+=(t-Ss)/As,Es+=(e-Es)/As,Ls+=(r-Ls)/As}function Se(){function t(t,i){t*=Ho;var a=Math.cos(i*=Ho),o=a*Math.cos(t),s=a*Math.sin(t),l=Math.sin(i),u=Math.atan2(Math.sqrt((u=r*l-n*s)*u+(u=n*o-e*l)*u+(u=e*s-r*o)*u),e*o+r*s+n*l);Ts+=u,Cs+=u*(e+(e=o)),Is+=u*(r+(r=s)),zs+=u*(n+(n=l)),Te(e,r,n)}var e,r,n;Rs.point=function(i,a){i*=Ho;var o=Math.cos(a*=Ho);e=o*Math.cos(i),r=o*Math.sin(i),n=Math.sin(a),Rs.point=t,Te(e,r,n)}}function Ee(){Rs.point=Ae}function Le(){function t(t,e){t*=Ho;var r=Math.cos(e*=Ho),o=r*Math.cos(t),s=r*Math.sin(t),l=Math.sin(e),u=i*l-a*s,c=a*o-n*l,h=n*s-i*o,f=Math.sqrt(u*u+c*c+h*h),d=n*o+i*s+a*l,p=f&&-rt(d)/f,m=Math.atan2(f,d);Ds+=p*u,Ps+=p*c,Os+=p*h,Ts+=m,Cs+=m*(n+(n=o)),Is+=m*(i+(i=s)),zs+=m*(a+(a=l)),Te(n,i,a)}var e,r,n,i,a;Rs.point=function(o,s){e=o,r=s,Rs.point=t,o*=Ho;var l=Math.cos(s*=Ho);n=l*Math.cos(o),i=l*Math.sin(o),a=Math.sin(s),Te(n,i,a)},Rs.lineEnd=function(){t(e,r),Rs.lineEnd=Ee,Rs.point=Ae}}function Ce(t,e){function r(r,n){return r=t(r,n),e(r[0],r[1])}return t.invert&&e.invert&&(r.invert=function(r,n){return(r=e.invert(r,n))&&t.invert(r[0],r[1])}),r}function Ie(){return!0}function ze(t,e,r,n,i){var a=[],o=[];if(t.forEach(function(t){if(!((e=t.length-1)<=0)){var e,r=t[0],n=t[e];if(ke(r,n)){i.lineStart();for(var s=0;s<e;++s)i.point((r=t[s])[0],r[1]);return void i.lineEnd()}var l=new Pe(r,t,null,!0),u=new Pe(r,null,l,!1);l.o=u,a.push(l),o.push(u),l=new Pe(n,t,null,!1),u=new Pe(n,null,l,!0),l.o=u,a.push(l),o.push(u)}}),o.sort(e),De(a),De(o),a.length){for(var s=0,l=r,u=o.length;s<u;++s)o[s].e=l=!l;for(var c,h,f=a[0];;){for(var d=f,p=!0;d.v;)if((d=d.n)===f)return;c=d.z,i.lineStart();do{if(d.v=d.o.v=!0,d.e){if(p)for(var s=0,u=c.length;s<u;++s)i.point((h=c[s])[0],h[1]);else n(d.x,d.n.x,1,i);d=d.n}else{if(p){c=d.p.z;for(var s=c.length-1;s>=0;--s)i.point((h=c[s])[0],h[1])}else n(d.x,d.p.x,-1,i);d=d.p}d=d.o,c=d.z,p=!p}while(!d.v);i.lineEnd()}}}function De(t){if(e=t.length){for(var e,r,n=0,i=t[0];++n<e;)i.n=r=t[n],r.p=i,i=r;i.n=r=t[0],r.p=i}}function Pe(t,e,r,n){this.x=t,this.z=e,this.o=r,this.e=n,this.v=!1,this.n=this.p=null}function Oe(t,e,r,n){return function(i,a){function o(e,r){var n=i(e,r);t(e=n[0],r=n[1])&&a.point(e,r)}function s(t,e){var r=i(t,e);g.point(r[0],r[1])}function l(){y.point=s,g.lineStart()}function u(){y.point=o,g.lineEnd()}function c(t,e){m.push([t,e]);var r=i(t,e);x.point(r[0],r[1])}function h(){x.lineStart(),m=[]}function f(){c(m[0][0],m[0][1]),x.lineEnd();var t,e=x.clean(),r=b.buffer(),n=r.length;if(m.pop(),p.push(m),m=null,n)if(1&e){t=r[0];var i,n=t.length-1,o=-1;if(n>0){for(_||(a.polygonStart(),_=!0),a.lineStart();++o<n;)a.point((i=t[o])[0],i[1]);a.lineEnd()}}else n>1&&2&e&&r.push(r.pop().concat(r.shift())),d.push(r.filter(Re))}var d,p,m,g=e(a),v=i.invert(n[0],n[1]),y={point:o,lineStart:l,lineEnd:u,polygonStart:function(){y.point=c,y.lineStart=h,y.lineEnd=f,d=[],p=[]},polygonEnd:function(){y.point=o,y.lineStart=l,y.lineEnd=u,d=uo.merge(d);var t=Ve(v,p);d.length?(_||(a.polygonStart(),_=!0),ze(d,je,t,r,a)):t&&(_||(a.polygonStart(),_=!0),a.lineStart(),r(null,null,1,a),a.lineEnd()),_&&(a.polygonEnd(),_=!1),d=p=null},sphere:function(){a.polygonStart(),a.lineStart(),r(null,null,1,a),a.lineEnd(),a.polygonEnd()}},b=Fe(),x=e(b),_=!1;return y}}function Re(t){return t.length>1}function Fe(){var t,e=[];return{lineStart:function(){e.push(t=[])},point:function(e,r){t.push([e,r])},lineEnd:M,buffer:function(){var r=e;return e=[],t=null,r},rejoin:function(){e.length>1&&e.push(e.pop().concat(e.shift()))}}}function je(t,e){return((t=t.x)[0]<0?t[1]-Vo-Fo:Vo-t[1])-((e=e.x)[0]<0?e[1]-Vo-Fo:Vo-e[1])}function Ne(t){var e,r=NaN,n=NaN,i=NaN;return{lineStart:function(){t.lineStart(),e=1},point:function(a,o){var s=a>0?No:-No,l=xo(a-r);xo(l-No)<Fo?(t.point(r,n=(n+o)/2>0?Vo:-Vo),t.point(i,n),t.lineEnd(),t.lineStart(),t.point(s,n),t.point(a,n),e=0):i!==s&&l>=No&&(xo(r-i)<Fo&&(r-=i*Fo),xo(a-s)<Fo&&(a-=s*Fo),n=Be(r,n,a,o),t.point(i,n),t.lineEnd(),t.lineStart(),t.point(s,n),e=0),t.point(r=a,n=o),i=s},lineEnd:function(){t.lineEnd(),r=n=NaN},clean:function(){return 2-e}}}function Be(t,e,r,n){var i,a,o=Math.sin(t-r);return xo(o)>Fo?Math.atan((Math.sin(e)*(a=Math.cos(n))*Math.sin(r)-Math.sin(n)*(i=Math.cos(e))*Math.sin(t))/(i*a*o)):(e+n)/2}function Ue(t,e,r,n){var i;if(null==t)i=r*Vo,n.point(-No,i),n.point(0,i),n.point(No,i),n.point(No,0),n.point(No,-i),n.point(0,-i),n.point(-No,-i),n.point(-No,0),n.point(-No,i);else if(xo(t[0]-e[0])>Fo){var a=t[0]<e[0]?No:-No;i=r*a/2,n.point(-a,i),n.point(0,i),n.point(a,i)}else n.point(e[0],e[1])}function Ve(t,e){var r=t[0],n=t[1],i=[Math.sin(r),-Math.cos(r),0],a=0,o=0;Ms.reset();for(var s=0,l=e.length;s<l;++s){var u=e[s],c=u.length;if(c)for(var h=u[0],f=h[0],d=h[1]/2+No/4,p=Math.sin(d),m=Math.cos(d),g=1;;){g===c&&(g=0),t=u[g];var v=t[0],y=t[1]/2+No/4,b=Math.sin(y),x=Math.cos(y),_=v-f,w=_>=0?1:-1,M=w*_,k=M>No,A=p*b;if(Ms.add(Math.atan2(A*w*Math.sin(M),m*x+A*Math.cos(M))),a+=k?_+w*Bo:_,k^f>=r^v>=r){var T=be(ve(h),ve(t));we(T);var S=be(i,T);we(S);var E=(k^_>=0?-1:1)*nt(S[2]);(n>E||n===E&&(T[0]||T[1]))&&(o+=k^_>=0?1:-1)}if(!g++)break;f=v,p=b,m=x,h=t}}return(a<-Fo||a<Fo&&Ms<-Fo)^1&o}function He(t){function e(t,e){return Math.cos(t)*Math.cos(e)>a}function r(t){var r,a,l,u,c;return{lineStart:function(){u=l=!1,c=1},point:function(h,f){var d,p=[h,f],m=e(h,f),g=o?m?0:i(h,f):m?i(h+(h<0?No:-No),f):0;if(!r&&(u=l=m)&&t.lineStart(),m!==l&&(d=n(r,p),(ke(r,d)||ke(p,d))&&(p[0]+=Fo,p[1]+=Fo,m=e(p[0],p[1]))),m!==l)c=0,m?(t.lineStart(),d=n(p,r),t.point(d[0],d[1])):(d=n(r,p),t.point(d[0],d[1]),t.lineEnd()),r=d;else if(s&&r&&o^m){var v;g&a||!(v=n(p,r,!0))||(c=0,o?(t.lineStart(),t.point(v[0][0],v[0][1]),t.point(v[1][0],v[1][1]),t.lineEnd()):(t.point(v[1][0],v[1][1]),t.lineEnd(),t.lineStart(),t.point(v[0][0],v[0][1])))}!m||r&&ke(r,p)||t.point(p[0],p[1]),r=p,l=m,a=g},lineEnd:function(){l&&t.lineEnd(),r=null},clean:function(){return c|(u&&l)<<1}}}function n(t,e,r){var n=ve(t),i=ve(e),o=[1,0,0],s=be(n,i),l=ye(s,s),u=s[0],c=l-u*u;if(!c)return!r&&t;var h=a*l/c,f=-a*u/c,d=be(o,s),p=_e(o,h);xe(p,_e(s,f));var m=d,g=ye(p,m),v=ye(m,m),y=g*g-v*(ye(p,p)-1);if(!(y<0)){var b=Math.sqrt(y),x=_e(m,(-g-b)/v);if(xe(x,p),x=Me(x),!r)return x;var _,w=t[0],M=e[0],k=t[1],A=e[1];M<w&&(_=w,w=M,M=_);var T=M-w,S=xo(T-No)<Fo,E=S||T<Fo;if(!S&&A<k&&(_=k,k=A,A=_),E?S?k+A>0^x[1]<(xo(x[0]-w)<Fo?k:A):k<=x[1]&&x[1]<=A:T>No^(w<=x[0]&&x[0]<=M)){var L=_e(m,(-g+b)/v);return xe(L,p),[x,Me(L)]}}}function i(e,r){var n=o?t:No-t,i=0;return e<-n?i|=1:e>n&&(i|=2),r<-n?i|=4:r>n&&(i|=8),i}var a=Math.cos(t),o=a>0,s=xo(a)>Fo;return Oe(e,r,gr(t,6*Ho),o?[0,-t]:[-No,t-No])}function qe(t,e,r,n){return function(i){var a,o=i.a,s=i.b,l=o.x,u=o.y,c=s.x,h=s.y,f=0,d=1,p=c-l,m=h-u;if(a=t-l,p||!(a>0)){if(a/=p,p<0){if(a<f)return;a<d&&(d=a)}else if(p>0){if(a>d)return;a>f&&(f=a)}if(a=r-l,p||!(a<0)){if(a/=p,p<0){if(a>d)return;a>f&&(f=a)}else if(p>0){if(a<f)return;a<d&&(d=a)}if(a=e-u,m||!(a>0)){if(a/=m,m<0){if(a<f)return;a<d&&(d=a)}else if(m>0){if(a>d)return;a>f&&(f=a)}if(a=n-u,m||!(a<0)){if(a/=m,m<0){if(a>d)return;a>f&&(f=a)}else if(m>0){if(a<f)return;a<d&&(d=a)}return f>0&&(i.a={x:l+f*p,y:u+f*m}),d<1&&(i.b={x:l+d*p,y:u+d*m}),i}}}}}}function Ge(t,e,r,n){function i(n,i){return xo(n[0]-t)<Fo?i>0?0:3:xo(n[0]-r)<Fo?i>0?2:1:xo(n[1]-e)<Fo?i>0?1:0:i>0?3:2}function a(t,e){return o(t.x,e.x)}function o(t,e){var r=i(t,1),n=i(e,1);return r!==n?r-n:0===r?e[1]-t[1]:1===r?t[0]-e[0]:2===r?t[1]-e[1]:e[0]-t[0]}return function(s){function l(t){for(var e=0,r=g.length,n=t[1],i=0;i<r;++i)for(var a,o=1,s=g[i],l=s.length,u=s[0];o<l;++o)a=s[o],u[1]<=n?a[1]>n&&et(u,a,t)>0&&++e:a[1]<=n&&et(u,a,t)<0&&--e,u=a;return 0!==e}function u(a,s,l,u){var c=0,h=0;if(null==a||(c=i(a,l))!==(h=i(s,l))||o(a,s)<0^l>0)do{u.point(0===c||3===c?t:r,c>1?n:e)}while((c=(c+l+4)%4)!==h);else u.point(s[0],s[1])}function c(i,a){return t<=i&&i<=r&&e<=a&&a<=n}function h(t,e){c(t,e)&&s.point(t,e)}function f(){L.point=p,g&&g.push(v=[]),k=!0,M=!1,_=w=NaN}function d(){m&&(p(y,b),x&&M&&S.rejoin(),m.push(S.buffer())),L.point=h,M&&s.lineEnd()}function p(t,e){t=Math.max(-js,Math.min(js,t)),e=Math.max(-js,Math.min(js,e));var r=c(t,e);if(g&&v.push([t,e]),k)y=t,b=e,x=r,k=!1,r&&(s.lineStart(),s.point(t,e));else if(r&&M)s.point(t,e);else{var n={a:{x:_,y:w},b:{x:t,y:e}};E(n)?(M||(s.lineStart(),s.point(n.a.x,n.a.y)),s.point(n.b.x,n.b.y),r||s.lineEnd(),A=!1):r&&(s.lineStart(),s.point(t,e),A=!1)}_=t,w=e,M=r}var m,g,v,y,b,x,_,w,M,k,A,T=s,S=Fe(),E=qe(t,e,r,n),L={point:h,lineStart:f,lineEnd:d,polygonStart:function(){s=S,m=[],g=[],A=!0},polygonEnd:function(){s=T,m=uo.merge(m);var e=l([t,n]),r=A&&e,i=m.length;(r||i)&&(s.polygonStart(),r&&(s.lineStart(),u(null,null,1,s),s.lineEnd()),i&&ze(m,a,e,u,s),s.polygonEnd()),m=g=v=null}};return L}}function Ye(t){var e=0,r=No/3,n=lr(t),i=n(e,r);return i.parallels=function(t){return arguments.length?n(e=t[0]*No/180,r=t[1]*No/180):[e/No*180,r/No*180]},i}function We(t,e){function r(t,e){var r=Math.sqrt(a-2*i*Math.sin(e))/i;return[r*Math.sin(t*=i),o-r*Math.cos(t)]}var n=Math.sin(t),i=(n+Math.sin(e))/2,a=1+n*(2*i-n),o=Math.sqrt(a)/i;return r.invert=function(t,e){var r=o-e;return[Math.atan2(t,r)/i,nt((a-(t*t+r*r)*i*i)/(2*i))]},r}function Xe(){function t(t,e){Bs+=i*t-n*e,n=t,i=e}var e,r,n,i;Gs.point=function(a,o){Gs.point=t,e=n=a,r=i=o},Gs.lineEnd=function(){t(e,r)}}function Ze(t,e){t<Us&&(Us=t),t>Hs&&(Hs=t),e<Vs&&(Vs=e),e>qs&&(qs=e)}function Je(){function t(t,e){o.push("M",t,",",e,a)}function e(t,e){o.push("M",t,",",e),s.point=r}function r(t,e){o.push("L",t,",",e)}function n(){s.point=t}function i(){o.push("Z")}var a=Ke(4.5),o=[],s={point:t,lineStart:function(){s.point=e},lineEnd:n,polygonStart:function(){s.lineEnd=i},polygonEnd:function(){s.lineEnd=n,s.point=t},pointRadius:function(t){return a=Ke(t),s},result:function(){if(o.length){var t=o.join("");return o=[],t}}};return s}function Ke(t){return"m0,"+t+"a"+t+","+t+" 0 1,1 0,"+-2*t+"a"+t+","+t+" 0 1,1 0,"+2*t+"z"}function Qe(t,e){Ss+=t,Es+=e,++Ls}function $e(){function t(t,n){var i=t-e,a=n-r,o=Math.sqrt(i*i+a*a);Cs+=o*(e+t)/2,Is+=o*(r+n)/2,zs+=o,Qe(e=t,r=n)}var e,r;Ws.point=function(n,i){Ws.point=t,Qe(e=n,r=i)}}function tr(){Ws.point=Qe}function er(){function t(t,e){var r=t-n,a=e-i,o=Math.sqrt(r*r+a*a);Cs+=o*(n+t)/2,Is+=o*(i+e)/2,zs+=o,o=i*t-n*e,Ds+=o*(n+t),Ps+=o*(i+e),Os+=3*o,Qe(n=t,i=e)}var e,r,n,i;Ws.point=function(a,o){Ws.point=t,Qe(e=n=a,r=i=o)},Ws.lineEnd=function(){t(e,r)}}function rr(t){function e(e,r){t.moveTo(e+o,r),t.arc(e,r,o,0,Bo)}function r(e,r){t.moveTo(e,r),s.point=n}function n(e,r){t.lineTo(e,r)}function i(){s.point=e}function a(){t.closePath()}var o=4.5,s={point:e,lineStart:function(){s.point=r},lineEnd:i,polygonStart:function(){s.lineEnd=a},polygonEnd:function(){s.lineEnd=i,s.point=e},pointRadius:function(t){return o=t,s},result:M};return s}function nr(t){function e(t){return(s?n:r)(t)}function r(e){return or(e,function(r,n){r=t(r,n),e.point(r[0],r[1])})}function n(e){function r(r,n){r=t(r,n),e.point(r[0],r[1])}function n(){b=NaN,k.point=a,e.lineStart()}function a(r,n){var a=ve([r,n]),o=t(r,n);i(b,x,y,_,w,M,b=o[0],x=o[1],y=r,_=a[0],w=a[1],M=a[2],s,e),e.point(b,x)}function o(){k.point=r,e.lineEnd()}function l(){n(),k.point=u,k.lineEnd=c}function u(t,e){a(h=t,f=e),d=b,p=x,m=_,g=w,v=M,k.point=a}function c(){i(b,x,y,_,w,M,d,p,h,m,g,v,s,e),k.lineEnd=o,o()}var h,f,d,p,m,g,v,y,b,x,_,w,M,k={point:r,lineStart:n,lineEnd:o,polygonStart:function(){e.polygonStart(),k.lineStart=l},polygonEnd:function(){e.polygonEnd(),k.lineStart=n}};return k}function i(e,r,n,s,l,u,c,h,f,d,p,m,g,v){var y=c-e,b=h-r,x=y*y+b*b;if(x>4*a&&g--){var _=s+d,w=l+p,M=u+m,k=Math.sqrt(_*_+w*w+M*M),A=Math.asin(M/=k),T=xo(xo(M)-1)<Fo||xo(n-f)<Fo?(n+f)/2:Math.atan2(w,_),S=t(T,A),E=S[0],L=S[1],C=E-e,I=L-r,z=b*C-y*I;(z*z/x>a||xo((y*C+b*I)/x-.5)>.3||s*d+l*p+u*m<o)&&(i(e,r,n,s,l,u,E,L,T,_/=k,w/=k,M,g,v),v.point(E,L),i(E,L,T,_,w,M,c,h,f,d,p,m,g,v))}}var a=.5,o=Math.cos(30*Ho),s=16;return e.precision=function(t){return arguments.length?(s=(a=t*t)>0&&16,e):Math.sqrt(a)},e}function ir(t){var e=nr(function(e,r){return t([e*qo,r*qo])});return function(t){return ur(e(t))}}function ar(t){this.stream=t}function or(t,e){return{point:e,sphere:function(){t.sphere()},lineStart:function(){t.lineStart()},lineEnd:function(){t.lineEnd()},polygonStart:function(){t.polygonStart()},polygonEnd:function(){t.polygonEnd()}}}function sr(t){return lr(function(){return t})()}function lr(t){function e(t){return t=s(t[0]*Ho,t[1]*Ho),[t[0]*f+l,u-t[1]*f]}function r(t){return(t=s.invert((t[0]-l)/f,(u-t[1])/f))&&[t[0]*qo,t[1]*qo]}function n(){s=Ce(o=fr(v,y,b),a);var t=a(m,g);return l=d-t[0]*f,u=p+t[1]*f,i()}function i(){return c&&(c.valid=!1,c=null),e}var a,o,s,l,u,c,h=nr(function(t,e){return t=a(t,e),[t[0]*f+l,u-t[1]*f]}),f=150,d=480,p=250,m=0,g=0,v=0,y=0,b=0,_=Fs,w=x,M=null,k=null;return e.stream=function(t){return c&&(c.valid=!1),c=ur(_(o,h(w(t)))),c.valid=!0,c},e.clipAngle=function(t){return arguments.length?(_=null==t?(M=t,Fs):He((M=+t)*Ho),i()):M},e.clipExtent=function(t){return arguments.length?(k=t,w=t?Ge(t[0][0],t[0][1],t[1][0],t[1][1]):x,i()):k},e.scale=function(t){return arguments.length?(f=+t,n()):f},e.translate=function(t){return arguments.length?(d=+t[0],p=+t[1],n()):[d,p]},e.center=function(t){return arguments.length?(m=t[0]%360*Ho,g=t[1]%360*Ho,n()):[m*qo,g*qo]},e.rotate=function(t){return arguments.length?(v=t[0]%360*Ho,y=t[1]%360*Ho,b=t.length>2?t[2]%360*Ho:0,n()):[v*qo,y*qo,b*qo]},uo.rebind(e,h,"precision"),function(){return a=t.apply(this,arguments),e.invert=a.invert&&r,n()}}function ur(t){return or(t,function(e,r){t.point(e*Ho,r*Ho)})}function cr(t,e){return[t,e]}function hr(t,e){return[t>No?t-Bo:t<-No?t+Bo:t,e]}function fr(t,e,r){return t?e||r?Ce(pr(t),mr(e,r)):pr(t):e||r?mr(e,r):hr}function dr(t){return function(e,r){return e+=t,[e>No?e-Bo:e<-No?e+Bo:e,r]}}function pr(t){var e=dr(t);return e.invert=dr(-t),e}function mr(t,e){function r(t,e){var r=Math.cos(e),s=Math.cos(t)*r,l=Math.sin(t)*r,u=Math.sin(e),c=u*n+s*i;return[Math.atan2(l*a-c*o,s*n-u*i),nt(c*a+l*o)]}var n=Math.cos(t),i=Math.sin(t),a=Math.cos(e),o=Math.sin(e);return r.invert=function(t,e){var r=Math.cos(e),s=Math.cos(t)*r,l=Math.sin(t)*r,u=Math.sin(e),c=u*a-l*o;return[Math.atan2(l*a+u*o,s*n+c*i),nt(c*n-s*i)]},r}function gr(t,e){var r=Math.cos(t),n=Math.sin(t);return function(i,a,o,s){var l=o*e;null!=i?(i=vr(r,i),a=vr(r,a),(o>0?i<a:i>a)&&(i+=o*Bo)):(i=t+o*Bo,a=t-.5*l);for(var u,c=i;o>0?c>a:c<a;c-=l)s.point((u=Me([r,-n*Math.cos(c),-n*Math.sin(c)]))[0],u[1])}}function vr(t,e){var r=ve(e);r[0]-=t,we(r);var n=rt(-r[1]);return((-r[2]<0?-n:n)+2*Math.PI-Fo)%(2*Math.PI)}function yr(t,e,r){var n=uo.range(t,e-Fo,r).concat(e);return function(t){return n.map(function(e){return[t,e]})}}function br(t,e,r){var n=uo.range(t,e-Fo,r).concat(e);return function(t){return n.map(function(e){return[e,t]})}}function xr(t){return t.source}function _r(t){return t.target}function wr(t,e,r,n){var i=Math.cos(e),a=Math.sin(e),o=Math.cos(n),s=Math.sin(n),l=i*Math.cos(t),u=i*Math.sin(t),c=o*Math.cos(r),h=o*Math.sin(r),f=2*Math.asin(Math.sqrt(st(n-e)+i*o*st(r-t))),d=1/Math.sin(f),p=f?function(t){var e=Math.sin(t*=f)*d,r=Math.sin(f-t)*d,n=r*l+e*c,i=r*u+e*h,o=r*a+e*s;return[Math.atan2(i,n)*qo,Math.atan2(o,Math.sqrt(n*n+i*i))*qo]}:function(){return[t*qo,e*qo]};return p.distance=f,p}function Mr(){function t(t,i){var a=Math.sin(i*=Ho),o=Math.cos(i),s=xo((t*=Ho)-e),l=Math.cos(s);Xs+=Math.atan2(Math.sqrt((s=o*Math.sin(s))*s+(s=n*a-r*o*l)*s),r*a+n*o*l),e=t,r=a,n=o}var e,r,n;Zs.point=function(i,a){e=i*Ho,r=Math.sin(a*=Ho),n=Math.cos(a),Zs.point=t},Zs.lineEnd=function(){Zs.point=Zs.lineEnd=M}}function kr(t,e){function r(e,r){var n=Math.cos(e),i=Math.cos(r),a=t(n*i);return[a*i*Math.sin(e),a*Math.sin(r)]}return r.invert=function(t,r){var n=Math.sqrt(t*t+r*r),i=e(n),a=Math.sin(i),o=Math.cos(i);return[Math.atan2(t*a,n*o),Math.asin(n&&r*a/n)]},r}function Ar(t,e){function r(t,e){o>0?e<-Vo+Fo&&(e=-Vo+Fo):e>Vo-Fo&&(e=Vo-Fo);var r=o/Math.pow(i(e),a);return[r*Math.sin(a*t),o-r*Math.cos(a*t)]}var n=Math.cos(t),i=function(t){return Math.tan(No/4+t/2)},a=t===e?Math.sin(t):Math.log(n/Math.cos(e))/Math.log(i(e)/i(t)),o=n*Math.pow(i(t),a)/a;return a?(r.invert=function(t,e){var r=o-e,n=tt(a)*Math.sqrt(t*t+r*r);return[Math.atan2(t,r)/a,2*Math.atan(Math.pow(o/n,1/a))-Vo]},r):Sr}function Tr(t,e){function r(t,e){var r=a-e;return[r*Math.sin(i*t),a-r*Math.cos(i*t)]}var n=Math.cos(t),i=t===e?Math.sin(t):(n-Math.cos(e))/(e-t),a=n/i+t;return xo(i)<Fo?cr:(r.invert=function(t,e){var r=a-e;return[Math.atan2(t,r)/i,a-tt(i)*Math.sqrt(t*t+r*r)]},r)}function Sr(t,e){return[t,Math.log(Math.tan(No/4+e/2))]}function Er(t){var e,r=sr(t),n=r.scale,i=r.translate,a=r.clipExtent;return r.scale=function(){var t=n.apply(r,arguments);return t===r?e?r.clipExtent(null):r:t},r.translate=function(){var t=i.apply(r,arguments);return t===r?e?r.clipExtent(null):r:t},r.clipExtent=function(t){var o=a.apply(r,arguments);if(o===r){if(e=null==t){var s=No*n(),l=i();a([[l[0]-s,l[1]-s],[l[0]+s,l[1]+s]])}}else e&&(o=null);return o},r.clipExtent(null)}function Lr(t,e){return[Math.log(Math.tan(No/4+e/2)),-t]}function Cr(t){return t[0]}function Ir(t){return t[1]}function zr(t){for(var e=t.length,r=[0,1],n=2,i=2;i<e;i++){for(;n>1&&et(t[r[n-2]],t[r[n-1]],t[i])<=0;)--n;r[n++]=i}return r.slice(0,n)}function Dr(t,e){return t[0]-e[0]||t[1]-e[1]}function Pr(t,e,r){return(r[0]-e[0])*(t[1]-e[1])<(r[1]-e[1])*(t[0]-e[0])}function Or(t,e,r,n){var i=t[0],a=r[0],o=e[0]-i,s=n[0]-a,l=t[1],u=r[1],c=e[1]-l,h=n[1]-u,f=(s*(l-u)-h*(i-a))/(h*o-s*c);return[i+f*o,l+f*c]}function Rr(t){var e=t[0],r=t[t.length-1];return!(e[0]-r[0]||e[1]-r[1])}function Fr(){an(this),this.edge=this.site=this.circle=null}function jr(t){var e=sl.pop()||new Fr;return e.site=t,e}function Nr(t){Zr(t),il.remove(t),sl.push(t),an(t)}function Br(t){var e=t.circle,r=e.x,n=e.cy,i={x:r,y:n},a=t.P,o=t.N,s=[t];Nr(t);for(var l=a;l.circle&&xo(r-l.circle.x)<Fo&&xo(n-l.circle.cy)<Fo;)a=l.P,s.unshift(l),Nr(l),l=a;s.unshift(l),Zr(l);for(var u=o;u.circle&&xo(r-u.circle.x)<Fo&&xo(n-u.circle.cy)<Fo;)o=u.N,s.push(u),Nr(u),u=o;s.push(u),Zr(u);var c,h=s.length;for(c=1;c<h;++c)u=s[c],l=s[c-1],en(u.edge,l.site,u.site,i);l=s[0],u=s[h-1],u.edge=$r(l.site,u.site,null,i),Xr(l),Xr(u)}function Ur(t){for(var e,r,n,i,a=t.x,o=t.y,s=il._;s;)if((n=Vr(s,o)-a)>Fo)s=s.L;else{if(!((i=a-Hr(s,o))>Fo)){n>-Fo?(e=s.P,r=s):i>-Fo?(e=s,r=s.N):e=r=s;break}if(!s.R){e=s;break}s=s.R}var l=jr(t);if(il.insert(e,l),e||r){if(e===r)return Zr(e),r=jr(e.site),il.insert(l,r),l.edge=r.edge=$r(e.site,l.site),Xr(e),void Xr(r);if(!r)return void(l.edge=$r(e.site,l.site));Zr(e),Zr(r);var u=e.site,c=u.x,h=u.y,f=t.x-c,d=t.y-h,p=r.site,m=p.x-c,g=p.y-h,v=2*(f*g-d*m),y=f*f+d*d,b=m*m+g*g,x={x:(g*y-d*b)/v+c,y:(f*b-m*y)/v+h};en(r.edge,u,p,x),l.edge=$r(u,t,null,x),r.edge=$r(t,p,null,x),Xr(e),Xr(r)}}function Vr(t,e){var r=t.site,n=r.x,i=r.y,a=i-e;if(!a)return n;var o=t.P;if(!o)return-1/0;r=o.site;var s=r.x,l=r.y,u=l-e;if(!u)return s;var c=s-n,h=1/a-1/u,f=c/u;return h?(-f+Math.sqrt(f*f-2*h*(c*c/(-2*u)-l+u/2+i-a/2)))/h+n:(n+s)/2}function Hr(t,e){var r=t.N;if(r)return Vr(r,e);var n=t.site;return n.y===e?n.x:1/0}function qr(t){this.site=t,this.edges=[]}function Gr(t){for(var e,r,n,i,a,o,s,l,u,c,h=t[0][0],f=t[1][0],d=t[0][1],p=t[1][1],m=nl,g=m.length;g--;)if((a=m[g])&&a.prepare())for(s=a.edges,l=s.length,o=0;o<l;)c=s[o].end(),n=c.x,i=c.y,u=s[++o%l].start(),e=u.x,r=u.y,(xo(n-e)>Fo||xo(i-r)>Fo)&&(s.splice(o,0,new rn(tn(a.site,c,xo(n-h)<Fo&&p-i>Fo?{x:h,y:xo(e-h)<Fo?r:p}:xo(i-p)<Fo&&f-n>Fo?{x:xo(r-p)<Fo?e:f,y:p}:xo(n-f)<Fo&&i-d>Fo?{x:f,y:xo(e-f)<Fo?r:d}:xo(i-d)<Fo&&n-h>Fo?{x:xo(r-d)<Fo?e:h,y:d}:null),a.site,null)),++l)}function Yr(t,e){return e.angle-t.angle}function Wr(){an(this),this.x=this.y=this.arc=this.site=this.cy=null}function Xr(t){var e=t.P,r=t.N;if(e&&r){var n=e.site,i=t.site,a=r.site;if(n!==a){var o=i.x,s=i.y,l=n.x-o,u=n.y-s,c=a.x-o,h=a.y-s,f=2*(l*h-u*c);if(!(f>=-jo)){var d=l*l+u*u,p=c*c+h*h,m=(h*d-u*p)/f,g=(l*p-c*d)/f,h=g+s,v=ll.pop()||new Wr;v.arc=t,v.site=i,v.x=m+o,v.y=h+Math.sqrt(m*m+g*g),v.cy=h,t.circle=v;for(var y=null,b=ol._;b;)if(v.y<b.y||v.y===b.y&&v.x<=b.x){if(!b.L){y=b.P;break}b=b.L}else{if(!b.R){y=b;break}b=b.R}ol.insert(y,v),y||(al=v)}}}}function Zr(t){var e=t.circle;e&&(e.P||(al=e.N),ol.remove(e),ll.push(e),an(e),t.circle=null)}function Jr(t){for(var e,r=rl,n=qe(t[0][0],t[0][1],t[1][0],t[1][1]),i=r.length;i--;)e=r[i],(!Kr(e,t)||!n(e)||xo(e.a.x-e.b.x)<Fo&&xo(e.a.y-e.b.y)<Fo)&&(e.a=e.b=null,r.splice(i,1))}function Kr(t,e){var r=t.b;if(r)return!0;var n,i,a=t.a,o=e[0][0],s=e[1][0],l=e[0][1],u=e[1][1],c=t.l,h=t.r,f=c.x,d=c.y,p=h.x,m=h.y,g=(f+p)/2,v=(d+m)/2;if(m===d){if(g<o||g>=s)return;if(f>p){if(a){if(a.y>=u)return}else a={x:g,y:l};r={x:g,y:u}}else{if(a){if(a.y<l)return}else a={x:g,y:u};r={x:g,y:l}}}else if(n=(f-p)/(m-d),i=v-n*g,n<-1||n>1)if(f>p){if(a){if(a.y>=u)return}else a={x:(l-i)/n,y:l};r={x:(u-i)/n,y:u}}else{if(a){if(a.y<l)return}else a={x:(u-i)/n,y:u};r={x:(l-i)/n,y:l}}else if(d<m){if(a){if(a.x>=s)return}else a={x:o,y:n*o+i};r={
x:s,y:n*s+i}}else{if(a){if(a.x<o)return}else a={x:s,y:n*s+i};r={x:o,y:n*o+i}}return t.a=a,t.b=r,!0}function Qr(t,e){this.l=t,this.r=e,this.a=this.b=null}function $r(t,e,r,n){var i=new Qr(t,e);return rl.push(i),r&&en(i,t,e,r),n&&en(i,e,t,n),nl[t.i].edges.push(new rn(i,t,e)),nl[e.i].edges.push(new rn(i,e,t)),i}function tn(t,e,r){var n=new Qr(t,null);return n.a=e,n.b=r,rl.push(n),n}function en(t,e,r,n){t.a||t.b?t.l===r?t.b=n:t.a=n:(t.a=n,t.l=e,t.r=r)}function rn(t,e,r){var n=t.a,i=t.b;this.edge=t,this.site=e,this.angle=r?Math.atan2(r.y-e.y,r.x-e.x):t.l===e?Math.atan2(i.x-n.x,n.y-i.y):Math.atan2(n.x-i.x,i.y-n.y)}function nn(){this._=null}function an(t){t.U=t.C=t.L=t.R=t.P=t.N=null}function on(t,e){var r=e,n=e.R,i=r.U;i?i.L===r?i.L=n:i.R=n:t._=n,n.U=i,r.U=n,r.R=n.L,r.R&&(r.R.U=r),n.L=r}function sn(t,e){var r=e,n=e.L,i=r.U;i?i.L===r?i.L=n:i.R=n:t._=n,n.U=i,r.U=n,r.L=n.R,r.L&&(r.L.U=r),n.R=r}function ln(t){for(;t.L;)t=t.L;return t}function un(t,e){var r,n,i,a=t.sort(cn).pop();for(rl=[],nl=new Array(t.length),il=new nn,ol=new nn;;)if(i=al,a&&(!i||a.y<i.y||a.y===i.y&&a.x<i.x))a.x===r&&a.y===n||(nl[a.i]=new qr(a),Ur(a),r=a.x,n=a.y),a=t.pop();else{if(!i)break;Br(i.arc)}e&&(Jr(e),Gr(e));var o={cells:nl,edges:rl};return il=ol=rl=nl=null,o}function cn(t,e){return e.y-t.y||e.x-t.x}function hn(t,e,r){return(t.x-r.x)*(e.y-t.y)-(t.x-e.x)*(r.y-t.y)}function fn(t){return t.x}function dn(t){return t.y}function pn(){return{leaf:!0,nodes:[],point:null,x:null,y:null}}function mn(t,e,r,n,i,a){if(!t(e,r,n,i,a)){var o=.5*(r+i),s=.5*(n+a),l=e.nodes;l[0]&&mn(t,l[0],r,n,o,s),l[1]&&mn(t,l[1],o,n,i,s),l[2]&&mn(t,l[2],r,s,o,a),l[3]&&mn(t,l[3],o,s,i,a)}}function gn(t,e,r,n,i,a,o){var s,l=1/0;return function t(u,c,h,f,d){if(!(c>a||h>o||f<n||d<i)){if(p=u.point){var p,m=e-u.x,g=r-u.y,v=m*m+g*g;if(v<l){var y=Math.sqrt(l=v);n=e-y,i=r-y,a=e+y,o=r+y,s=p}}for(var b=u.nodes,x=.5*(c+f),_=.5*(h+d),w=e>=x,M=r>=_,k=M<<1|w,A=k+4;k<A;++k)if(u=b[3&k])switch(3&k){case 0:t(u,c,h,x,_);break;case 1:t(u,x,h,f,_);break;case 2:t(u,c,_,x,d);break;case 3:t(u,x,_,f,d)}}}(t,n,i,a,o),s}function vn(t,e){t=uo.rgb(t),e=uo.rgb(e);var r=t.r,n=t.g,i=t.b,a=e.r-r,o=e.g-n,s=e.b-i;return function(t){return"#"+wt(Math.round(r+a*t))+wt(Math.round(n+o*t))+wt(Math.round(i+s*t))}}function yn(t,e){var r,n={},i={};for(r in t)r in e?n[r]=_n(t[r],e[r]):i[r]=t[r];for(r in e)r in t||(i[r]=e[r]);return function(t){for(r in n)i[r]=n[r](t);return i}}function bn(t,e){return t=+t,e=+e,function(r){return t*(1-r)+e*r}}function xn(t,e){var r,n,i,a=cl.lastIndex=hl.lastIndex=0,o=-1,s=[],l=[];for(t+="",e+="";(r=cl.exec(t))&&(n=hl.exec(e));)(i=n.index)>a&&(i=e.slice(a,i),s[o]?s[o]+=i:s[++o]=i),(r=r[0])===(n=n[0])?s[o]?s[o]+=n:s[++o]=n:(s[++o]=null,l.push({i:o,x:bn(r,n)})),a=hl.lastIndex;return a<e.length&&(i=e.slice(a),s[o]?s[o]+=i:s[++o]=i),s.length<2?l[0]?(e=l[0].x,function(t){return e(t)+""}):function(){return e}:(e=l.length,function(t){for(var r,n=0;n<e;++n)s[(r=l[n]).i]=r.x(t);return s.join("")})}function _n(t,e){for(var r,n=uo.interpolators.length;--n>=0&&!(r=uo.interpolators[n](t,e)););return r}function wn(t,e){var r,n=[],i=[],a=t.length,o=e.length,s=Math.min(t.length,e.length);for(r=0;r<s;++r)n.push(_n(t[r],e[r]));for(;r<a;++r)i[r]=t[r];for(;r<o;++r)i[r]=e[r];return function(t){for(r=0;r<s;++r)i[r]=n[r](t);return i}}function Mn(t){return function(e){return e<=0?0:e>=1?1:t(e)}}function kn(t){return function(e){return 1-t(1-e)}}function An(t){return function(e){return.5*(e<.5?t(2*e):2-t(2-2*e))}}function Tn(t){return t*t}function Sn(t){return t*t*t}function En(t){if(t<=0)return 0;if(t>=1)return 1;var e=t*t,r=e*t;return 4*(t<.5?r:3*(t-e)+r-.75)}function Ln(t){return function(e){return Math.pow(e,t)}}function Cn(t){return 1-Math.cos(t*Vo)}function In(t){return Math.pow(2,10*(t-1))}function zn(t){return 1-Math.sqrt(1-t*t)}function Dn(t,e){var r;return arguments.length<2&&(e=.45),arguments.length?r=e/Bo*Math.asin(1/t):(t=1,r=e/4),function(n){return 1+t*Math.pow(2,-10*n)*Math.sin((n-r)*Bo/e)}}function Pn(t){return t||(t=1.70158),function(e){return e*e*((t+1)*e-t)}}function On(t){return t<1/2.75?7.5625*t*t:t<2/2.75?7.5625*(t-=1.5/2.75)*t+.75:t<2.5/2.75?7.5625*(t-=2.25/2.75)*t+.9375:7.5625*(t-=2.625/2.75)*t+.984375}function Rn(t,e){t=uo.hcl(t),e=uo.hcl(e);var r=t.h,n=t.c,i=t.l,a=e.h-r,o=e.c-n,s=e.l-i;return isNaN(o)&&(o=0,n=isNaN(n)?e.c:n),isNaN(a)?(a=0,r=isNaN(r)?e.h:r):a>180?a-=360:a<-180&&(a+=360),function(t){return ft(r+a*t,n+o*t,i+s*t)+""}}function Fn(t,e){t=uo.hsl(t),e=uo.hsl(e);var r=t.h,n=t.s,i=t.l,a=e.h-r,o=e.s-n,s=e.l-i;return isNaN(o)&&(o=0,n=isNaN(n)?e.s:n),isNaN(a)?(a=0,r=isNaN(r)?e.h:r):a>180?a-=360:a<-180&&(a+=360),function(t){return ct(r+a*t,n+o*t,i+s*t)+""}}function jn(t,e){t=uo.lab(t),e=uo.lab(e);var r=t.l,n=t.a,i=t.b,a=e.l-r,o=e.a-n,s=e.b-i;return function(t){return pt(r+a*t,n+o*t,i+s*t)+""}}function Nn(t,e){return e-=t,function(r){return Math.round(t+e*r)}}function Bn(t){var e=[t.a,t.b],r=[t.c,t.d],n=Vn(e),i=Un(e,r),a=Vn(Hn(r,e,-i))||0;e[0]*r[1]<r[0]*e[1]&&(e[0]*=-1,e[1]*=-1,n*=-1,i*=-1),this.rotate=(n?Math.atan2(e[1],e[0]):Math.atan2(-r[0],r[1]))*qo,this.translate=[t.e,t.f],this.scale=[n,a],this.skew=a?Math.atan2(i,a)*qo:0}function Un(t,e){return t[0]*e[0]+t[1]*e[1]}function Vn(t){var e=Math.sqrt(Un(t,t));return e&&(t[0]/=e,t[1]/=e),e}function Hn(t,e,r){return t[0]+=r*e[0],t[1]+=r*e[1],t}function qn(t){return t.length?t.pop()+",":""}function Gn(t,e,r,n){if(t[0]!==e[0]||t[1]!==e[1]){var i=r.push("translate(",null,",",null,")");n.push({i:i-4,x:bn(t[0],e[0])},{i:i-2,x:bn(t[1],e[1])})}else(e[0]||e[1])&&r.push("translate("+e+")")}function Yn(t,e,r,n){t!==e?(t-e>180?e+=360:e-t>180&&(t+=360),n.push({i:r.push(qn(r)+"rotate(",null,")")-2,x:bn(t,e)})):e&&r.push(qn(r)+"rotate("+e+")")}function Wn(t,e,r,n){t!==e?n.push({i:r.push(qn(r)+"skewX(",null,")")-2,x:bn(t,e)}):e&&r.push(qn(r)+"skewX("+e+")")}function Xn(t,e,r,n){if(t[0]!==e[0]||t[1]!==e[1]){var i=r.push(qn(r)+"scale(",null,",",null,")");n.push({i:i-4,x:bn(t[0],e[0])},{i:i-2,x:bn(t[1],e[1])})}else 1===e[0]&&1===e[1]||r.push(qn(r)+"scale("+e+")")}function Zn(t,e){var r=[],n=[];return t=uo.transform(t),e=uo.transform(e),Gn(t.translate,e.translate,r,n),Yn(t.rotate,e.rotate,r,n),Wn(t.skew,e.skew,r,n),Xn(t.scale,e.scale,r,n),t=e=null,function(t){for(var e,i=-1,a=n.length;++i<a;)r[(e=n[i]).i]=e.x(t);return r.join("")}}function Jn(t,e){return e=(e-=t=+t)||1/e,function(r){return(r-t)/e}}function Kn(t,e){return e=(e-=t=+t)||1/e,function(r){return Math.max(0,Math.min(1,(r-t)/e))}}function Qn(t){for(var e=t.source,r=t.target,n=ti(e,r),i=[e];e!==n;)e=e.parent,i.push(e);for(var a=i.length;r!==n;)i.splice(a,0,r),r=r.parent;return i}function $n(t){for(var e=[],r=t.parent;null!=r;)e.push(t),t=r,r=r.parent;return e.push(t),e}function ti(t,e){if(t===e)return t;for(var r=$n(t),n=$n(e),i=r.pop(),a=n.pop(),o=null;i===a;)o=i,i=r.pop(),a=n.pop();return o}function ei(t){t.fixed|=2}function ri(t){t.fixed&=-7}function ni(t){t.fixed|=4,t.px=t.x,t.py=t.y}function ii(t){t.fixed&=-5}function ai(t,e,r){var n=0,i=0;if(t.charge=0,!t.leaf)for(var a,o=t.nodes,s=o.length,l=-1;++l<s;)null!=(a=o[l])&&(ai(a,e,r),t.charge+=a.charge,n+=a.charge*a.cx,i+=a.charge*a.cy);if(t.point){t.leaf||(t.point.x+=Math.random()-.5,t.point.y+=Math.random()-.5);var u=e*r[t.point.index];t.charge+=t.pointCharge=u,n+=u*t.point.x,i+=u*t.point.y}t.cx=n/t.charge,t.cy=i/t.charge}function oi(t,e){return uo.rebind(t,e,"sort","children","value"),t.nodes=t,t.links=fi,t}function si(t,e){for(var r=[t];null!=(t=r.pop());)if(e(t),(i=t.children)&&(n=i.length))for(var n,i;--n>=0;)r.push(i[n])}function li(t,e){for(var r=[t],n=[];null!=(t=r.pop());)if(n.push(t),(a=t.children)&&(i=a.length))for(var i,a,o=-1;++o<i;)r.push(a[o]);for(;null!=(t=n.pop());)e(t)}function ui(t){return t.children}function ci(t){return t.value}function hi(t,e){return e.value-t.value}function fi(t){return uo.merge(t.map(function(t){return(t.children||[]).map(function(e){return{source:t,target:e}})}))}function di(t){return t.x}function pi(t){return t.y}function mi(t,e,r){t.y0=e,t.y=r}function gi(t){return uo.range(t.length)}function vi(t){for(var e=-1,r=t[0].length,n=[];++e<r;)n[e]=0;return n}function yi(t){for(var e,r=1,n=0,i=t[0][1],a=t.length;r<a;++r)(e=t[r][1])>i&&(n=r,i=e);return n}function bi(t){return t.reduce(xi,0)}function xi(t,e){return t+e[1]}function _i(t,e){return wi(t,Math.ceil(Math.log(e.length)/Math.LN2+1))}function wi(t,e){for(var r=-1,n=+t[0],i=(t[1]-n)/e,a=[];++r<=e;)a[r]=i*r+n;return a}function Mi(t){return[uo.min(t),uo.max(t)]}function ki(t,e){return t.value-e.value}function Ai(t,e){var r=t._pack_next;t._pack_next=e,e._pack_prev=t,e._pack_next=r,r._pack_prev=e}function Ti(t,e){t._pack_next=e,e._pack_prev=t}function Si(t,e){var r=e.x-t.x,n=e.y-t.y,i=t.r+e.r;return.999*i*i>r*r+n*n}function Ei(t){function e(t){c=Math.min(t.x-t.r,c),h=Math.max(t.x+t.r,h),f=Math.min(t.y-t.r,f),d=Math.max(t.y+t.r,d)}if((r=t.children)&&(u=r.length)){var r,n,i,a,o,s,l,u,c=1/0,h=-1/0,f=1/0,d=-1/0;if(r.forEach(Li),n=r[0],n.x=-n.r,n.y=0,e(n),u>1&&(i=r[1],i.x=i.r,i.y=0,e(i),u>2))for(a=r[2],zi(n,i,a),e(a),Ai(n,a),n._pack_prev=a,Ai(a,i),i=n._pack_next,o=3;o<u;o++){zi(n,i,a=r[o]);var p=0,m=1,g=1;for(s=i._pack_next;s!==i;s=s._pack_next,m++)if(Si(s,a)){p=1;break}if(1==p)for(l=n._pack_prev;l!==s._pack_prev&&!Si(l,a);l=l._pack_prev,g++);p?(m<g||m==g&&i.r<n.r?Ti(n,i=s):Ti(n=l,i),o--):(Ai(n,a),i=a,e(a))}var v=(c+h)/2,y=(f+d)/2,b=0;for(o=0;o<u;o++)a=r[o],a.x-=v,a.y-=y,b=Math.max(b,a.r+Math.sqrt(a.x*a.x+a.y*a.y));t.r=b,r.forEach(Ci)}}function Li(t){t._pack_next=t._pack_prev=t}function Ci(t){delete t._pack_next,delete t._pack_prev}function Ii(t,e,r,n){var i=t.children;if(t.x=e+=n*t.x,t.y=r+=n*t.y,t.r*=n,i)for(var a=-1,o=i.length;++a<o;)Ii(i[a],e,r,n)}function zi(t,e,r){var n=t.r+r.r,i=e.x-t.x,a=e.y-t.y;if(n&&(i||a)){var o=e.r+r.r,s=i*i+a*a;o*=o,n*=n;var l=.5+(n-o)/(2*s),u=Math.sqrt(Math.max(0,2*o*(n+s)-(n-=s)*n-o*o))/(2*s);r.x=t.x+l*i+u*a,r.y=t.y+l*a-u*i}else r.x=t.x+n,r.y=t.y}function Di(t,e){return t.parent==e.parent?1:2}function Pi(t){var e=t.children;return e.length?e[0]:t.t}function Oi(t){var e,r=t.children;return(e=r.length)?r[e-1]:t.t}function Ri(t,e,r){var n=r/(e.i-t.i);e.c-=n,e.s+=r,t.c+=n,e.z+=r,e.m+=r}function Fi(t){for(var e,r=0,n=0,i=t.children,a=i.length;--a>=0;)e=i[a],e.z+=r,e.m+=r,r+=e.s+(n+=e.c)}function ji(t,e,r){return t.a.parent===e.parent?t.a:r}function Ni(t){return 1+uo.max(t,function(t){return t.y})}function Bi(t){return t.reduce(function(t,e){return t+e.x},0)/t.length}function Ui(t){var e=t.children;return e&&e.length?Ui(e[0]):t}function Vi(t){var e,r=t.children;return r&&(e=r.length)?Vi(r[e-1]):t}function Hi(t){return{x:t.x,y:t.y,dx:t.dx,dy:t.dy}}function qi(t,e){var r=t.x+e[3],n=t.y+e[0],i=t.dx-e[1]-e[3],a=t.dy-e[0]-e[2];return i<0&&(r+=i/2,i=0),a<0&&(n+=a/2,a=0),{x:r,y:n,dx:i,dy:a}}function Gi(t){var e=t[0],r=t[t.length-1];return e<r?[e,r]:[r,e]}function Yi(t){return t.rangeExtent?t.rangeExtent():Gi(t.range())}function Wi(t,e,r,n){var i=r(t[0],t[1]),a=n(e[0],e[1]);return function(t){return a(i(t))}}function Xi(t,e){var r,n=0,i=t.length-1,a=t[n],o=t[i];return o<a&&(r=n,n=i,i=r,r=a,a=o,o=r),t[n]=e.floor(a),t[i]=e.ceil(o),t}function Zi(t){return t?{floor:function(e){return Math.floor(e/t)*t},ceil:function(e){return Math.ceil(e/t)*t}}:wl}function Ji(t,e,r,n){var i=[],a=[],o=0,s=Math.min(t.length,e.length)-1;for(t[s]<t[0]&&(t=t.slice().reverse(),e=e.slice().reverse());++o<=s;)i.push(r(t[o-1],t[o])),a.push(n(e[o-1],e[o]));return function(e){var r=uo.bisect(t,e,1,s)-1;return a[r](i[r](e))}}function Ki(t,e,r,n){function i(){var i=Math.min(t.length,e.length)>2?Ji:Wi,l=n?Kn:Jn;return o=i(t,e,l,r),s=i(e,t,l,_n),a}function a(t){return o(t)}var o,s;return a.invert=function(t){return s(t)},a.domain=function(e){return arguments.length?(t=e.map(Number),i()):t},a.range=function(t){return arguments.length?(e=t,i()):e},a.rangeRound=function(t){return a.range(t).interpolate(Nn)},a.clamp=function(t){return arguments.length?(n=t,i()):n},a.interpolate=function(t){return arguments.length?(r=t,i()):r},a.ticks=function(e){return ea(t,e)},a.tickFormat=function(e,r){return ra(t,e,r)},a.nice=function(e){return $i(t,e),i()},a.copy=function(){return Ki(t,e,r,n)},i()}function Qi(t,e){return uo.rebind(t,e,"range","rangeRound","interpolate","clamp")}function $i(t,e){return Xi(t,Zi(ta(t,e)[2])),Xi(t,Zi(ta(t,e)[2])),t}function ta(t,e){null==e&&(e=10);var r=Gi(t),n=r[1]-r[0],i=Math.pow(10,Math.floor(Math.log(n/e)/Math.LN10)),a=e/n*i;return a<=.15?i*=10:a<=.35?i*=5:a<=.75&&(i*=2),r[0]=Math.ceil(r[0]/i)*i,r[1]=Math.floor(r[1]/i)*i+.5*i,r[2]=i,r}function ea(t,e){return uo.range.apply(uo,ta(t,e))}function ra(t,e,r){var n=ta(t,e);if(r){var i=cs.exec(r);if(i.shift(),"s"===i[8]){var a=uo.formatPrefix(Math.max(xo(n[0]),xo(n[1])));return i[7]||(i[7]="."+na(a.scale(n[2]))),i[8]="f",r=uo.format(i.join("")),function(t){return r(a.scale(t))+a.symbol}}i[7]||(i[7]="."+ia(i[8],n)),r=i.join("")}else r=",."+na(n[2])+"f";return uo.format(r)}function na(t){return-Math.floor(Math.log(t)/Math.LN10+.01)}function ia(t,e){var r=na(e[2]);return t in Ml?Math.abs(r-na(Math.max(xo(e[0]),xo(e[1]))))+ +("e"!==t):r-2*("%"===t)}function aa(t,e,r,n){function i(t){return(r?Math.log(t<0?0:t):-Math.log(t>0?0:-t))/Math.log(e)}function a(t){return r?Math.pow(e,t):-Math.pow(e,-t)}function o(e){return t(i(e))}return o.invert=function(e){return a(t.invert(e))},o.domain=function(e){return arguments.length?(r=e[0]>=0,t.domain((n=e.map(Number)).map(i)),o):n},o.base=function(r){return arguments.length?(e=+r,t.domain(n.map(i)),o):e},o.nice=function(){var e=Xi(n.map(i),r?Math:Al);return t.domain(e),n=e.map(a),o},o.ticks=function(){var t=Gi(n),o=[],s=t[0],l=t[1],u=Math.floor(i(s)),c=Math.ceil(i(l)),h=e%1?2:e;if(isFinite(c-u)){if(r){for(;u<c;u++)for(var f=1;f<h;f++)o.push(a(u)*f);o.push(a(u))}else for(o.push(a(u));u++<c;)for(var f=h-1;f>0;f--)o.push(a(u)*f);for(u=0;o[u]<s;u++);for(c=o.length;o[c-1]>l;c--);o=o.slice(u,c)}return o},o.tickFormat=function(t,r){if(!arguments.length)return kl;arguments.length<2?r=kl:"function"!=typeof r&&(r=uo.format(r));var n=Math.max(1,e*t/o.ticks().length);return function(t){var o=t/a(Math.round(i(t)));return o*e<e-.5&&(o*=e),o<=n?r(t):""}},o.copy=function(){return aa(t.copy(),e,r,n)},Qi(o,t)}function oa(t,e,r){function n(e){return t(i(e))}var i=sa(e),a=sa(1/e);return n.invert=function(e){return a(t.invert(e))},n.domain=function(e){return arguments.length?(t.domain((r=e.map(Number)).map(i)),n):r},n.ticks=function(t){return ea(r,t)},n.tickFormat=function(t,e){return ra(r,t,e)},n.nice=function(t){return n.domain($i(r,t))},n.exponent=function(o){return arguments.length?(i=sa(e=o),a=sa(1/e),t.domain(r.map(i)),n):e},n.copy=function(){return oa(t.copy(),e,r)},Qi(n,t)}function sa(t){return function(e){return e<0?-Math.pow(-e,t):Math.pow(e,t)}}function la(t,e){function r(r){return a[((i.get(r)||("range"===e.t?i.set(r,t.push(r)):NaN))-1)%a.length]}function n(e,r){return uo.range(t.length).map(function(t){return e+r*t})}var i,a,o;return r.domain=function(n){if(!arguments.length)return t;t=[],i=new h;for(var a,o=-1,s=n.length;++o<s;)i.has(a=n[o])||i.set(a,t.push(a));return r[e.t].apply(r,e.a)},r.range=function(t){return arguments.length?(a=t,o=0,e={t:"range",a:arguments},r):a},r.rangePoints=function(i,s){arguments.length<2&&(s=0);var l=i[0],u=i[1],c=t.length<2?(l=(l+u)/2,0):(u-l)/(t.length-1+s);return a=n(l+c*s/2,c),o=0,e={t:"rangePoints",a:arguments},r},r.rangeRoundPoints=function(i,s){arguments.length<2&&(s=0);var l=i[0],u=i[1],c=t.length<2?(l=u=Math.round((l+u)/2),0):(u-l)/(t.length-1+s)|0;return a=n(l+Math.round(c*s/2+(u-l-(t.length-1+s)*c)/2),c),o=0,e={t:"rangeRoundPoints",a:arguments},r},r.rangeBands=function(i,s,l){arguments.length<2&&(s=0),arguments.length<3&&(l=s);var u=i[1]<i[0],c=i[u-0],h=i[1-u],f=(h-c)/(t.length-s+2*l);return a=n(c+f*l,f),u&&a.reverse(),o=f*(1-s),e={t:"rangeBands",a:arguments},r},r.rangeRoundBands=function(i,s,l){arguments.length<2&&(s=0),arguments.length<3&&(l=s);var u=i[1]<i[0],c=i[u-0],h=i[1-u],f=Math.floor((h-c)/(t.length-s+2*l));return a=n(c+Math.round((h-c-(t.length-s)*f)/2),f),u&&a.reverse(),o=Math.round(f*(1-s)),e={t:"rangeRoundBands",a:arguments},r},r.rangeBand=function(){return o},r.rangeExtent=function(){return Gi(e.a[0])},r.copy=function(){return la(t,e)},r.domain(t)}function ua(t,e){function r(){var r=0,i=e.length;for(s=[];++r<i;)s[r-1]=uo.quantile(t,r/i);return n}function n(t){if(!isNaN(t=+t))return e[uo.bisect(s,t)]}var s;return n.domain=function(e){return arguments.length?(t=e.map(a).filter(o).sort(i),r()):t},n.range=function(t){return arguments.length?(e=t,r()):e},n.quantiles=function(){return s},n.invertExtent=function(r){return r=e.indexOf(r),r<0?[NaN,NaN]:[r>0?s[r-1]:t[0],r<s.length?s[r]:t[t.length-1]]},n.copy=function(){return ua(t,e)},r()}function ca(t,e,r){function n(e){return r[Math.max(0,Math.min(o,Math.floor(a*(e-t))))]}function i(){return a=r.length/(e-t),o=r.length-1,n}var a,o;return n.domain=function(r){return arguments.length?(t=+r[0],e=+r[r.length-1],i()):[t,e]},n.range=function(t){return arguments.length?(r=t,i()):r},n.invertExtent=function(e){return e=r.indexOf(e),e=e<0?NaN:e/a+t,[e,e+1/a]},n.copy=function(){return ca(t,e,r)},i()}function ha(t,e){function r(r){if(r<=r)return e[uo.bisect(t,r)]}return r.domain=function(e){return arguments.length?(t=e,r):t},r.range=function(t){return arguments.length?(e=t,r):e},r.invertExtent=function(r){return r=e.indexOf(r),[t[r-1],t[r]]},r.copy=function(){return ha(t,e)},r}function fa(t){function e(t){return+t}return e.invert=e,e.domain=e.range=function(r){return arguments.length?(t=r.map(e),e):t},e.ticks=function(e){return ea(t,e)},e.tickFormat=function(e,r){return ra(t,e,r)},e.copy=function(){return fa(t)},e}function da(){return 0}function pa(t){return t.innerRadius}function ma(t){return t.outerRadius}function ga(t){return t.startAngle}function va(t){return t.endAngle}function ya(t){return t&&t.padAngle}function ba(t,e,r,n){return(t-r)*e-(e-n)*t>0?0:1}function xa(t,e,r,n,i){var a=t[0]-e[0],o=t[1]-e[1],s=(i?n:-n)/Math.sqrt(a*a+o*o),l=s*o,u=-s*a,c=t[0]+l,h=t[1]+u,f=e[0]+l,d=e[1]+u,p=(c+f)/2,m=(h+d)/2,g=f-c,v=d-h,y=g*g+v*v,b=r-n,x=c*d-f*h,_=(v<0?-1:1)*Math.sqrt(Math.max(0,b*b*y-x*x)),w=(x*v-g*_)/y,M=(-x*g-v*_)/y,k=(x*v+g*_)/y,A=(-x*g+v*_)/y,T=w-p,S=M-m,E=k-p,L=A-m;return T*T+S*S>E*E+L*L&&(w=k,M=A),[[w-l,M-u],[w*r/b,M*r/b]]}function _a(t){function e(e){function o(){u.push("M",a(t(c),s))}for(var l,u=[],c=[],h=-1,f=e.length,d=Et(r),p=Et(n);++h<f;)i.call(this,l=e[h],h)?c.push([+d.call(this,l,h),+p.call(this,l,h)]):c.length&&(o(),c=[]);return c.length&&o(),u.length?u.join(""):null}var r=Cr,n=Ir,i=Ie,a=wa,o=a.key,s=.7;return e.x=function(t){return arguments.length?(r=t,e):r},e.y=function(t){return arguments.length?(n=t,e):n},e.defined=function(t){return arguments.length?(i=t,e):i},e.interpolate=function(t){return arguments.length?(o="function"==typeof t?a=t:(a=Il.get(t)||wa).key,e):o},e.tension=function(t){return arguments.length?(s=t,e):s},e}function wa(t){return t.length>1?t.join("L"):t+"Z"}function Ma(t){return t.join("L")+"Z"}function ka(t){for(var e=0,r=t.length,n=t[0],i=[n[0],",",n[1]];++e<r;)i.push("H",(n[0]+(n=t[e])[0])/2,"V",n[1]);return r>1&&i.push("H",n[0]),i.join("")}function Aa(t){for(var e=0,r=t.length,n=t[0],i=[n[0],",",n[1]];++e<r;)i.push("V",(n=t[e])[1],"H",n[0]);return i.join("")}function Ta(t){for(var e=0,r=t.length,n=t[0],i=[n[0],",",n[1]];++e<r;)i.push("H",(n=t[e])[0],"V",n[1]);return i.join("")}function Sa(t,e){return t.length<4?wa(t):t[1]+Ca(t.slice(1,-1),Ia(t,e))}function Ea(t,e){return t.length<3?Ma(t):t[0]+Ca((t.push(t[0]),t),Ia([t[t.length-2]].concat(t,[t[1]]),e))}function La(t,e){return t.length<3?wa(t):t[0]+Ca(t,Ia(t,e))}function Ca(t,e){if(e.length<1||t.length!=e.length&&t.length!=e.length+2)return wa(t);var r=t.length!=e.length,n="",i=t[0],a=t[1],o=e[0],s=o,l=1;if(r&&(n+="Q"+(a[0]-2*o[0]/3)+","+(a[1]-2*o[1]/3)+","+a[0]+","+a[1],i=t[1],l=2),e.length>1){s=e[1],a=t[l],l++,n+="C"+(i[0]+o[0])+","+(i[1]+o[1])+","+(a[0]-s[0])+","+(a[1]-s[1])+","+a[0]+","+a[1];for(var u=2;u<e.length;u++,l++)a=t[l],s=e[u],n+="S"+(a[0]-s[0])+","+(a[1]-s[1])+","+a[0]+","+a[1]}if(r){var c=t[l];n+="Q"+(a[0]+2*s[0]/3)+","+(a[1]+2*s[1]/3)+","+c[0]+","+c[1]}return n}function Ia(t,e){for(var r,n=[],i=(1-e)/2,a=t[0],o=t[1],s=1,l=t.length;++s<l;)r=a,a=o,o=t[s],n.push([i*(o[0]-r[0]),i*(o[1]-r[1])]);return n}function za(t){if(t.length<3)return wa(t);var e=1,r=t.length,n=t[0],i=n[0],a=n[1],o=[i,i,i,(n=t[1])[0]],s=[a,a,a,n[1]],l=[i,",",a,"L",Ra(Pl,o),",",Ra(Pl,s)];for(t.push(t[r-1]);++e<=r;)n=t[e],o.shift(),o.push(n[0]),s.shift(),s.push(n[1]),Fa(l,o,s);return t.pop(),l.push("L",n),l.join("")}function Da(t){if(t.length<4)return wa(t);for(var e,r=[],n=-1,i=t.length,a=[0],o=[0];++n<3;)e=t[n],a.push(e[0]),o.push(e[1]);for(r.push(Ra(Pl,a)+","+Ra(Pl,o)),--n;++n<i;)e=t[n],a.shift(),a.push(e[0]),o.shift(),o.push(e[1]),Fa(r,a,o);return r.join("")}function Pa(t){for(var e,r,n=-1,i=t.length,a=i+4,o=[],s=[];++n<4;)r=t[n%i],o.push(r[0]),s.push(r[1]);for(e=[Ra(Pl,o),",",Ra(Pl,s)],--n;++n<a;)r=t[n%i],o.shift(),o.push(r[0]),s.shift(),s.push(r[1]),Fa(e,o,s);return e.join("")}function Oa(t,e){var r=t.length-1;if(r)for(var n,i,a=t[0][0],o=t[0][1],s=t[r][0]-a,l=t[r][1]-o,u=-1;++u<=r;)n=t[u],i=u/r,n[0]=e*n[0]+(1-e)*(a+i*s),n[1]=e*n[1]+(1-e)*(o+i*l);return za(t)}function Ra(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]+t[3]*e[3]}function Fa(t,e,r){t.push("C",Ra(zl,e),",",Ra(zl,r),",",Ra(Dl,e),",",Ra(Dl,r),",",Ra(Pl,e),",",Ra(Pl,r))}function ja(t,e){return(e[1]-t[1])/(e[0]-t[0])}function Na(t){for(var e=0,r=t.length-1,n=[],i=t[0],a=t[1],o=n[0]=ja(i,a);++e<r;)n[e]=(o+(o=ja(i=a,a=t[e+1])))/2;return n[e]=o,n}function Ba(t){for(var e,r,n,i,a=[],o=Na(t),s=-1,l=t.length-1;++s<l;)e=ja(t[s],t[s+1]),xo(e)<Fo?o[s]=o[s+1]=0:(r=o[s]/e,n=o[s+1]/e,(i=r*r+n*n)>9&&(i=3*e/Math.sqrt(i),o[s]=i*r,o[s+1]=i*n));for(s=-1;++s<=l;)i=(t[Math.min(l,s+1)][0]-t[Math.max(0,s-1)][0])/(6*(1+o[s]*o[s])),a.push([i||0,o[s]*i||0]);return a}function Ua(t){return t.length<3?wa(t):t[0]+Ca(t,Ba(t))}function Va(t){for(var e,r,n,i=-1,a=t.length;++i<a;)e=t[i],r=e[0],n=e[1]-Vo,e[0]=r*Math.cos(n),e[1]=r*Math.sin(n);return t}function Ha(t){function e(e){function l(){m.push("M",s(t(v),h),c,u(t(g.reverse()),h),"Z")}for(var f,d,p,m=[],g=[],v=[],y=-1,b=e.length,x=Et(r),_=Et(i),w=r===n?function(){return d}:Et(n),M=i===a?function(){return p}:Et(a);++y<b;)o.call(this,f=e[y],y)?(g.push([d=+x.call(this,f,y),p=+_.call(this,f,y)]),v.push([+w.call(this,f,y),+M.call(this,f,y)])):g.length&&(l(),g=[],v=[]);return g.length&&l(),m.length?m.join(""):null}var r=Cr,n=Cr,i=0,a=Ir,o=Ie,s=wa,l=s.key,u=s,c="L",h=.7;return e.x=function(t){return arguments.length?(r=n=t,e):n},e.x0=function(t){return arguments.length?(r=t,e):r},e.x1=function(t){return arguments.length?(n=t,e):n},e.y=function(t){return arguments.length?(i=a=t,e):a},e.y0=function(t){return arguments.length?(i=t,e):i},e.y1=function(t){return arguments.length?(a=t,e):a},e.defined=function(t){return arguments.length?(o=t,e):o},e.interpolate=function(t){return arguments.length?(l="function"==typeof t?s=t:(s=Il.get(t)||wa).key,u=s.reverse||s,c=s.closed?"M":"L",e):l},e.tension=function(t){return arguments.length?(h=t,e):h},e}function qa(t){return t.radius}function Ga(t){return[t.x,t.y]}function Ya(t){return function(){var e=t.apply(this,arguments),r=e[0],n=e[1]-Vo;return[r*Math.cos(n),r*Math.sin(n)]}}function Wa(){return 64}function Xa(){return"circle"}function Za(t){var e=Math.sqrt(t/No);return"M0,"+e+"A"+e+","+e+" 0 1,1 0,"+-e+"A"+e+","+e+" 0 1,1 0,"+e+"Z"}function Ja(t){return function(){var e,r,n;(e=this[t])&&(n=e[r=e.active])&&(n.timer.c=null,n.timer.t=NaN,--e.count?delete e[r]:delete this[t],e.active+=.5,n.event&&n.event.interrupt.call(this,this.__data__,n.index))}}function Ka(t,e,r){return Ao(t,Ul),t.namespace=e,t.id=r,t}function Qa(t,e,r,n){var i=t.id,a=t.namespace;return G(t,"function"==typeof r?function(t,o,s){t[a][i].tween.set(e,n(r.call(t,t.__data__,o,s)))}:(r=n(r),function(t){t[a][i].tween.set(e,r)}))}function $a(t){return null==t&&(t=""),function(){this.textContent=t}}function to(t){return null==t?"__transition__":"__transition_"+t+"__"}function eo(t,e,r,n,i){function a(t){var e=m.delay;if(u.t=e+l,e<=t)return o(t-e);u.c=o}function o(r){var i=p.active,a=p[i];a&&(a.timer.c=null,a.timer.t=NaN,--p.count,delete p[i],a.event&&a.event.interrupt.call(t,t.__data__,a.index));for(var o in p)if(+o<n){var h=p[o];h.timer.c=null,h.timer.t=NaN,--p.count,delete p[o]}u.c=s,Dt(function(){return u.c&&s(r||1)&&(u.c=null,u.t=NaN),1},0,l),p.active=n,m.event&&m.event.start.call(t,t.__data__,e),d=[],m.tween.forEach(function(r,n){(n=n.call(t,t.__data__,e))&&d.push(n)}),f=m.ease,c=m.duration}function s(i){for(var a=i/c,o=f(a),s=d.length;s>0;)d[--s].call(t,o);if(a>=1)return m.event&&m.event.end.call(t,t.__data__,e),--p.count?delete p[n]:delete t[r],1}var l,u,c,f,d,p=t[r]||(t[r]={active:0,count:0}),m=p[n];m||(l=i.time,u=Dt(a,0,l),m=p[n]={tween:new h,time:l,timer:u,delay:i.delay,duration:i.duration,ease:i.ease,index:e},i=null,++p.count)}function ro(t,e,r){t.attr("transform",function(t){var n=e(t);return"translate("+(isFinite(n)?n:r(t))+",0)"})}function no(t,e,r){t.attr("transform",function(t){var n=e(t);return"translate(0,"+(isFinite(n)?n:r(t))+")"})}function io(t){return t.toISOString()}function ao(t,e,r){function n(e){return t(e)}function i(t,r){var n=t[1]-t[0],i=n/r,a=uo.bisect(Jl,i);return a==Jl.length?[e.year,ta(t.map(function(t){return t/31536e6}),r)[2]]:a?e[i/Jl[a-1]<Jl[a]/i?a-1:a]:[$l,ta(t,r)[2]]}return n.invert=function(e){return oo(t.invert(e))},n.domain=function(e){return arguments.length?(t.domain(e),n):t.domain().map(oo)},n.nice=function(t,e){function r(r){return!isNaN(r)&&!t.range(r,oo(+r+1),e).length}var a=n.domain(),o=Gi(a),s=null==t?i(o,10):"number"==typeof t&&i(o,t);return s&&(t=s[0],e=s[1]),n.domain(Xi(a,e>1?{floor:function(e){for(;r(e=t.floor(e));)e=oo(e-1);return e},ceil:function(e){for(;r(e=t.ceil(e));)e=oo(+e+1);return e}}:t))},n.ticks=function(t,e){var r=Gi(n.domain()),a=null==t?i(r,10):"number"==typeof t?i(r,t):!t.range&&[{range:t},e];return a&&(t=a[0],e=a[1]),t.range(r[0],oo(+r[1]+1),e<1?1:e)},n.tickFormat=function(){return r},n.copy=function(){return ao(t.copy(),e,r)},Qi(n,t)}function oo(t){return new Date(t)}function so(t){return JSON.parse(t.responseText)}function lo(t){var e=fo.createRange();return e.selectNode(fo.body),e.createContextualFragment(t.responseText)}var uo={version:"3.5.17"},co=[].slice,ho=function(t){return co.call(t)},fo=this.document;if(fo)try{ho(fo.documentElement.childNodes)[0].nodeType}catch(t){ho=function(t){for(var e=t.length,r=new Array(e);e--;)r[e]=t[e];return r}}if(Date.now||(Date.now=function(){return+new Date}),fo)try{fo.createElement("DIV").style.setProperty("opacity",0,"")}catch(t){var po=this.Element.prototype,mo=po.setAttribute,go=po.setAttributeNS,vo=this.CSSStyleDeclaration.prototype,yo=vo.setProperty;po.setAttribute=function(t,e){mo.call(this,t,e+"")},po.setAttributeNS=function(t,e,r){go.call(this,t,e,r+"")},vo.setProperty=function(t,e,r){yo.call(this,t,e+"",r)}}uo.ascending=i,uo.descending=function(t,e){return e<t?-1:e>t?1:e>=t?0:NaN},uo.min=function(t,e){var r,n,i=-1,a=t.length;if(1===arguments.length){for(;++i<a;)if(null!=(n=t[i])&&n>=n){r=n;break}for(;++i<a;)null!=(n=t[i])&&r>n&&(r=n)}else{for(;++i<a;)if(null!=(n=e.call(t,t[i],i))&&n>=n){r=n;break}for(;++i<a;)null!=(n=e.call(t,t[i],i))&&r>n&&(r=n)}return r},uo.max=function(t,e){var r,n,i=-1,a=t.length;if(1===arguments.length){for(;++i<a;)if(null!=(n=t[i])&&n>=n){r=n;break}for(;++i<a;)null!=(n=t[i])&&n>r&&(r=n)}else{for(;++i<a;)if(null!=(n=e.call(t,t[i],i))&&n>=n){r=n;break}for(;++i<a;)null!=(n=e.call(t,t[i],i))&&n>r&&(r=n)}return r},uo.extent=function(t,e){var r,n,i,a=-1,o=t.length;if(1===arguments.length){for(;++a<o;)if(null!=(n=t[a])&&n>=n){r=i=n;break}for(;++a<o;)null!=(n=t[a])&&(r>n&&(r=n),i<n&&(i=n))}else{for(;++a<o;)if(null!=(n=e.call(t,t[a],a))&&n>=n){r=i=n;break}for(;++a<o;)null!=(n=e.call(t,t[a],a))&&(r>n&&(r=n),i<n&&(i=n))}return[r,i]},uo.sum=function(t,e){var r,n=0,i=t.length,a=-1;if(1===arguments.length)for(;++a<i;)o(r=+t[a])&&(n+=r);else for(;++a<i;)o(r=+e.call(t,t[a],a))&&(n+=r);return n},uo.mean=function(t,e){var r,n=0,i=t.length,s=-1,l=i;if(1===arguments.length)for(;++s<i;)o(r=a(t[s]))?n+=r:--l;else for(;++s<i;)o(r=a(e.call(t,t[s],s)))?n+=r:--l;if(l)return n/l},uo.quantile=function(t,e){var r=(t.length-1)*e+1,n=Math.floor(r),i=+t[n-1],a=r-n;return a?i+a*(t[n]-i):i},uo.median=function(t,e){var r,n=[],s=t.length,l=-1;if(1===arguments.length)for(;++l<s;)o(r=a(t[l]))&&n.push(r);else for(;++l<s;)o(r=a(e.call(t,t[l],l)))&&n.push(r);if(n.length)return uo.quantile(n.sort(i),.5)},uo.variance=function(t,e){var r,n,i=t.length,s=0,l=0,u=-1,c=0;if(1===arguments.length)for(;++u<i;)o(r=a(t[u]))&&(n=r-s,s+=n/++c,l+=n*(r-s));else for(;++u<i;)o(r=a(e.call(t,t[u],u)))&&(n=r-s,s+=n/++c,l+=n*(r-s));if(c>1)return l/(c-1)},uo.deviation=function(){var t=uo.variance.apply(this,arguments);return t?Math.sqrt(t):t};var bo=s(i);uo.bisectLeft=bo.left,uo.bisect=uo.bisectRight=bo.right,uo.bisector=function(t){return s(1===t.length?function(e,r){return i(t(e),r)}:t)},uo.shuffle=function(t,e,r){(a=arguments.length)<3&&(r=t.length,a<2&&(e=0));for(var n,i,a=r-e;a;)i=Math.random()*a--|0,n=t[a+e],t[a+e]=t[i+e],t[i+e]=n;return t},uo.permute=function(t,e){for(var r=e.length,n=new Array(r);r--;)n[r]=t[e[r]];return n},uo.pairs=function(t){for(var e=0,r=t.length-1,n=t[0],i=new Array(r<0?0:r);e<r;)i[e]=[n,n=t[++e]];return i},uo.transpose=function(t){if(!(i=t.length))return[];for(var e=-1,r=uo.min(t,l),n=new Array(r);++e<r;)for(var i,a=-1,o=n[e]=new Array(i);++a<i;)o[a]=t[a][e];return n},uo.zip=function(){return uo.transpose(arguments)},uo.keys=function(t){var e=[];for(var r in t)e.push(r);return e},uo.values=function(t){var e=[];for(var r in t)e.push(t[r]);return e},uo.entries=function(t){var e=[];for(var r in t)e.push({key:r,value:t[r]});return e},uo.merge=function(t){for(var e,r,n,i=t.length,a=-1,o=0;++a<i;)o+=t[a].length;for(r=new Array(o);--i>=0;)for(n=t[i],e=n.length;--e>=0;)r[--o]=n[e];return r};var xo=Math.abs;uo.range=function(t,e,r){if(arguments.length<3&&(r=1,arguments.length<2&&(e=t,t=0)),(e-t)/r==1/0)throw new Error("infinite range");var n,i=[],a=u(xo(r)),o=-1;if(t*=a,e*=a,r*=a,r<0)for(;(n=t+r*++o)>e;)i.push(n/a);else for(;(n=t+r*++o)<e;)i.push(n/a);return i},uo.map=function(t,e){var r=new h;if(t instanceof h)t.forEach(function(t,e){r.set(t,e)});else if(Array.isArray(t)){var n,i=-1,a=t.length;if(1===arguments.length)for(;++i<a;)r.set(i,t[i]);else for(;++i<a;)r.set(e.call(t,n=t[i],i),n)}else for(var o in t)r.set(o,t[o]);return r};var _o="__proto__",wo="\0";c(h,{has:p,get:function(t){return this._[f(t)]},set:function(t,e){return this._[f(t)]=e},remove:m,keys:g,values:function(){var t=[];for(var e in this._)t.push(this._[e]);return t},entries:function(){var t=[];for(var e in this._)t.push({key:d(e),value:this._[e]});return t},size:v,empty:y,forEach:function(t){for(var e in this._)t.call(this,d(e),this._[e])}}),uo.nest=function(){function t(e,o,s){if(s>=a.length)return n?n.call(i,o):r?o.sort(r):o;for(var l,u,c,f,d=-1,p=o.length,m=a[s++],g=new h;++d<p;)(f=g.get(l=m(u=o[d])))?f.push(u):g.set(l,[u]);return e?(u=e(),c=function(r,n){u.set(r,t(e,n,s))}):(u={},c=function(r,n){u[r]=t(e,n,s)}),g.forEach(c),u}function e(t,r){if(r>=a.length)return t;var n=[],i=o[r++];return t.forEach(function(t,i){n.push({key:t,values:e(i,r)})}),i?n.sort(function(t,e){return i(t.key,e.key)}):n}var r,n,i={},a=[],o=[];return i.map=function(e,r){return t(r,e,0)},i.entries=function(r){return e(t(uo.map,r,0),0)},i.key=function(t){return a.push(t),i},i.sortKeys=function(t){return o[a.length-1]=t,i},i.sortValues=function(t){return r=t,i},i.rollup=function(t){return n=t,i},i},uo.set=function(t){var e=new b;if(t)for(var r=0,n=t.length;r<n;++r)e.add(t[r]);return e},c(b,{has:p,add:function(t){return this._[f(t+="")]=!0,t},remove:m,values:g,size:v,empty:y,forEach:function(t){for(var e in this._)t.call(this,d(e))}}),uo.behavior={},uo.rebind=function(t,e){
for(var r,n=1,i=arguments.length;++n<i;)t[r=arguments[n]]=_(t,e,e[r]);return t};var Mo=["webkit","ms","moz","Moz","o","O"];uo.dispatch=function(){for(var t=new k,e=-1,r=arguments.length;++e<r;)t[arguments[e]]=A(t);return t},k.prototype.on=function(t,e){var r=t.indexOf("."),n="";if(r>=0&&(n=t.slice(r+1),t=t.slice(0,r)),t)return arguments.length<2?this[t].on(n):this[t].on(n,e);if(2===arguments.length){if(null==e)for(t in this)this.hasOwnProperty(t)&&this[t].on(n,null);return this}},uo.event=null,uo.requote=function(t){return t.replace(ko,"\\$&")};var ko=/[\\\^\$\*\+\?\|\[\]\(\)\.\{\}]/g,Ao={}.__proto__?function(t,e){t.__proto__=e}:function(t,e){for(var r in e)t[r]=e[r]},To=function(t,e){return e.querySelector(t)},So=function(t,e){return e.querySelectorAll(t)},Eo=function(t,e){var r=t.matches||t[w(t,"matchesSelector")];return(Eo=function(t,e){return r.call(t,e)})(t,e)};"function"==typeof Sizzle&&(To=function(t,e){return Sizzle(t,e)[0]||null},So=Sizzle,Eo=Sizzle.matchesSelector),uo.selection=function(){return uo.select(fo.documentElement)};var Lo=uo.selection.prototype=[];Lo.select=function(t){var e,r,n,i,a=[];t=C(t);for(var o=-1,s=this.length;++o<s;){a.push(e=[]),e.parentNode=(n=this[o]).parentNode;for(var l=-1,u=n.length;++l<u;)(i=n[l])?(e.push(r=t.call(i,i.__data__,l,o)),r&&"__data__"in i&&(r.__data__=i.__data__)):e.push(null)}return L(a)},Lo.selectAll=function(t){var e,r,n=[];t=I(t);for(var i=-1,a=this.length;++i<a;)for(var o=this[i],s=-1,l=o.length;++s<l;)(r=o[s])&&(n.push(e=ho(t.call(r,r.__data__,s,i))),e.parentNode=r);return L(n)};var Co="http://www.w3.org/1999/xhtml",Io={svg:"http://www.w3.org/2000/svg",xhtml:Co,xlink:"http://www.w3.org/1999/xlink",xml:"http://www.w3.org/XML/1998/namespace",xmlns:"http://www.w3.org/2000/xmlns/"};uo.ns={prefix:Io,qualify:function(t){var e=t.indexOf(":"),r=t;return e>=0&&"xmlns"!==(r=t.slice(0,e))&&(t=t.slice(e+1)),Io.hasOwnProperty(r)?{space:Io[r],local:t}:t}},Lo.attr=function(t,e){if(arguments.length<2){if("string"==typeof t){var r=this.node();return t=uo.ns.qualify(t),t.local?r.getAttributeNS(t.space,t.local):r.getAttribute(t)}for(e in t)this.each(z(e,t[e]));return this}return this.each(z(t,e))},Lo.classed=function(t,e){if(arguments.length<2){if("string"==typeof t){var r=this.node(),n=(t=O(t)).length,i=-1;if(e=r.classList){for(;++i<n;)if(!e.contains(t[i]))return!1}else for(e=r.getAttribute("class");++i<n;)if(!P(t[i]).test(e))return!1;return!0}for(e in t)this.each(R(e,t[e]));return this}return this.each(R(t,e))},Lo.style=function(t,e,r){var i=arguments.length;if(i<3){if("string"!=typeof t){i<2&&(e="");for(r in t)this.each(j(r,t[r],e));return this}if(i<2){var a=this.node();return n(a).getComputedStyle(a,null).getPropertyValue(t)}r=""}return this.each(j(t,e,r))},Lo.property=function(t,e){if(arguments.length<2){if("string"==typeof t)return this.node()[t];for(e in t)this.each(N(e,t[e]));return this}return this.each(N(t,e))},Lo.text=function(t){return arguments.length?this.each("function"==typeof t?function(){var e=t.apply(this,arguments);this.textContent=null==e?"":e}:null==t?function(){this.textContent=""}:function(){this.textContent=t}):this.node().textContent},Lo.html=function(t){return arguments.length?this.each("function"==typeof t?function(){var e=t.apply(this,arguments);this.innerHTML=null==e?"":e}:null==t?function(){this.innerHTML=""}:function(){this.innerHTML=t}):this.node().innerHTML},Lo.append=function(t){return t=B(t),this.select(function(){return this.appendChild(t.apply(this,arguments))})},Lo.insert=function(t,e){return t=B(t),e=C(e),this.select(function(){return this.insertBefore(t.apply(this,arguments),e.apply(this,arguments)||null)})},Lo.remove=function(){return this.each(U)},Lo.data=function(t,e){function r(t,r){var n,i,a,o=t.length,c=r.length,f=Math.min(o,c),d=new Array(c),p=new Array(c),m=new Array(o);if(e){var g,v=new h,y=new Array(o);for(n=-1;++n<o;)(i=t[n])&&(v.has(g=e.call(i,i.__data__,n))?m[n]=i:v.set(g,i),y[n]=g);for(n=-1;++n<c;)(i=v.get(g=e.call(r,a=r[n],n)))?!0!==i&&(d[n]=i,i.__data__=a):p[n]=V(a),v.set(g,!0);for(n=-1;++n<o;)n in y&&!0!==v.get(y[n])&&(m[n]=t[n])}else{for(n=-1;++n<f;)i=t[n],a=r[n],i?(i.__data__=a,d[n]=i):p[n]=V(a);for(;n<c;++n)p[n]=V(r[n]);for(;n<o;++n)m[n]=t[n]}p.update=d,p.parentNode=d.parentNode=m.parentNode=t.parentNode,s.push(p),l.push(d),u.push(m)}var n,i,a=-1,o=this.length;if(!arguments.length){for(t=new Array(o=(n=this[0]).length);++a<o;)(i=n[a])&&(t[a]=i.__data__);return t}var s=Y([]),l=L([]),u=L([]);if("function"==typeof t)for(;++a<o;)r(n=this[a],t.call(n,n.parentNode.__data__,a));else for(;++a<o;)r(n=this[a],t);return l.enter=function(){return s},l.exit=function(){return u},l},Lo.datum=function(t){return arguments.length?this.property("__data__",t):this.property("__data__")},Lo.filter=function(t){var e,r,n,i=[];"function"!=typeof t&&(t=H(t));for(var a=0,o=this.length;a<o;a++){i.push(e=[]),e.parentNode=(r=this[a]).parentNode;for(var s=0,l=r.length;s<l;s++)(n=r[s])&&t.call(n,n.__data__,s,a)&&e.push(n)}return L(i)},Lo.order=function(){for(var t=-1,e=this.length;++t<e;)for(var r,n=this[t],i=n.length-1,a=n[i];--i>=0;)(r=n[i])&&(a&&a!==r.nextSibling&&a.parentNode.insertBefore(r,a),a=r);return this},Lo.sort=function(t){t=q.apply(this,arguments);for(var e=-1,r=this.length;++e<r;)this[e].sort(t);return this.order()},Lo.each=function(t){return G(this,function(e,r,n){t.call(e,e.__data__,r,n)})},Lo.call=function(t){var e=ho(arguments);return t.apply(e[0]=this,e),this},Lo.empty=function(){return!this.node()},Lo.node=function(){for(var t=0,e=this.length;t<e;t++)for(var r=this[t],n=0,i=r.length;n<i;n++){var a=r[n];if(a)return a}return null},Lo.size=function(){var t=0;return G(this,function(){++t}),t};var zo=[];uo.selection.enter=Y,uo.selection.enter.prototype=zo,zo.append=Lo.append,zo.empty=Lo.empty,zo.node=Lo.node,zo.call=Lo.call,zo.size=Lo.size,zo.select=function(t){for(var e,r,n,i,a,o=[],s=-1,l=this.length;++s<l;){n=(i=this[s]).update,o.push(e=[]),e.parentNode=i.parentNode;for(var u=-1,c=i.length;++u<c;)(a=i[u])?(e.push(n[u]=r=t.call(i.parentNode,a.__data__,u,s)),r.__data__=a.__data__):e.push(null)}return L(o)},zo.insert=function(t,e){return arguments.length<2&&(e=W(this)),Lo.insert.call(this,t,e)},uo.select=function(t){var r;return"string"==typeof t?(r=[To(t,fo)],r.parentNode=fo.documentElement):(r=[t],r.parentNode=e(t)),L([r])},uo.selectAll=function(t){var e;return"string"==typeof t?(e=ho(So(t,fo)),e.parentNode=fo.documentElement):(e=ho(t),e.parentNode=null),L([e])},Lo.on=function(t,e,r){var n=arguments.length;if(n<3){if("string"!=typeof t){n<2&&(e=!1);for(r in t)this.each(X(r,t[r],e));return this}if(n<2)return(n=this.node()["__on"+t])&&n._;r=!1}return this.each(X(t,e,r))};var Do=uo.map({mouseenter:"mouseover",mouseleave:"mouseout"});fo&&Do.forEach(function(t){"on"+t in fo&&Do.remove(t)});var Po,Oo=0;uo.mouse=function(t){return Q(t,S())};var Ro=this.navigator&&/WebKit/.test(this.navigator.userAgent)?-1:0;uo.touch=function(t,e,r){if(arguments.length<3&&(r=e,e=S().changedTouches),e)for(var n,i=0,a=e.length;i<a;++i)if((n=e[i]).identifier===r)return Q(t,n)},uo.behavior.drag=function(){function t(){this.on("mousedown.drag",a).on("touchstart.drag",o)}function e(t,e,n,a,o){return function(){function s(){var t,r,n=e(f,m);n&&(t=n[0]-b[0],r=n[1]-b[1],p|=t|r,b=n,d({type:"drag",x:n[0]+u[0],y:n[1]+u[1],dx:t,dy:r}))}function l(){e(f,m)&&(v.on(a+g,null).on(o+g,null),y(p),d({type:"dragend"}))}var u,c=this,h=uo.event.target.correspondingElement||uo.event.target,f=c.parentNode,d=r.of(c,arguments),p=0,m=t(),g=".drag"+(null==m?"":"-"+m),v=uo.select(n(h)).on(a+g,s).on(o+g,l),y=K(h),b=e(f,m);i?(u=i.apply(c,arguments),u=[u.x-b[0],u.y-b[1]]):u=[0,0],d({type:"dragstart"})}}var r=E(t,"drag","dragstart","dragend"),i=null,a=e(M,uo.mouse,n,"mousemove","mouseup"),o=e($,uo.touch,x,"touchmove","touchend");return t.origin=function(e){return arguments.length?(i=e,t):i},uo.rebind(t,r,"on")},uo.touches=function(t,e){return arguments.length<2&&(e=S().touches),e?ho(e).map(function(e){var r=Q(t,e);return r.identifier=e.identifier,r}):[]};var Fo=1e-6,jo=Fo*Fo,No=Math.PI,Bo=2*No,Uo=Bo-Fo,Vo=No/2,Ho=No/180,qo=180/No,Go=Math.SQRT2;uo.interpolateZoom=function(t,e){var r,n,i=t[0],a=t[1],o=t[2],s=e[0],l=e[1],u=e[2],c=s-i,h=l-a,f=c*c+h*h;if(f<jo)n=Math.log(u/o)/Go,r=function(t){return[i+t*c,a+t*h,o*Math.exp(Go*t*n)]};else{var d=Math.sqrt(f),p=(u*u-o*o+4*f)/(2*o*2*d),m=(u*u-o*o-4*f)/(2*u*2*d),g=Math.log(Math.sqrt(p*p+1)-p),v=Math.log(Math.sqrt(m*m+1)-m);n=(v-g)/Go,r=function(t){var e=t*n,r=at(g),s=o/(2*d)*(r*ot(Go*e+g)-it(g));return[i+s*c,a+s*h,o*r/at(Go*e+g)]}}return r.duration=1e3*n,r},uo.behavior.zoom=function(){function t(t){t.on(I,h).on(Wo+".zoom",d).on("dblclick.zoom",p).on(P,f)}function e(t){return[(t[0]-k.x)/k.k,(t[1]-k.y)/k.k]}function r(t){return[t[0]*k.k+k.x,t[1]*k.k+k.y]}function i(t){k.k=Math.max(S[0],Math.min(S[1],t))}function a(t,e){e=r(e),k.x+=t[0]-e[0],k.y+=t[1]-e[1]}function o(e,r,n,o){e.__chart__={x:k.x,y:k.y,k:k.k},i(Math.pow(2,o)),a(g=r,n),e=uo.select(e),L>0&&(e=e.transition().duration(L)),e.call(t.event)}function s(){_&&_.domain(x.range().map(function(t){return(t-k.x)/k.k}).map(x.invert)),M&&M.domain(w.range().map(function(t){return(t-k.y)/k.k}).map(w.invert))}function l(t){C++||t({type:"zoomstart"})}function u(t){s(),t({type:"zoom",scale:k.k,translate:[k.x,k.y]})}function c(t){--C||(t({type:"zoomend"}),g=null)}function h(){function t(){s=1,a(uo.mouse(i),f),u(o)}function r(){h.on(z,null).on(D,null),d(s),c(o)}var i=this,o=O.of(i,arguments),s=0,h=uo.select(n(i)).on(z,t).on(D,r),f=e(uo.mouse(i)),d=K(i);Bl.call(i),l(o)}function f(){function t(){var t=uo.touches(p);return d=k.k,t.forEach(function(t){t.identifier in g&&(g[t.identifier]=e(t))}),t}function r(){var e=uo.event.target;uo.select(e).on(x,n).on(_,s),w.push(e);for(var r=uo.event.changedTouches,i=0,a=r.length;i<a;++i)g[r[i].identifier]=null;var l=t(),u=Date.now();if(1===l.length){if(u-b<500){var c=l[0];o(p,c,g[c.identifier],Math.floor(Math.log(k.k)/Math.LN2)+1),T()}b=u}else if(l.length>1){var c=l[0],h=l[1],f=c[0]-h[0],d=c[1]-h[1];v=f*f+d*d}}function n(){var t,e,r,n,o=uo.touches(p);Bl.call(p);for(var s=0,l=o.length;s<l;++s,n=null)if(r=o[s],n=g[r.identifier]){if(e)break;t=r,e=n}if(n){var c=(c=r[0]-t[0])*c+(c=r[1]-t[1])*c,h=v&&Math.sqrt(c/v);t=[(t[0]+r[0])/2,(t[1]+r[1])/2],e=[(e[0]+n[0])/2,(e[1]+n[1])/2],i(h*d)}b=null,a(t,e),u(m)}function s(){if(uo.event.touches.length){for(var e=uo.event.changedTouches,r=0,n=e.length;r<n;++r)delete g[e[r].identifier];for(var i in g)return void t()}uo.selectAll(w).on(y,null),M.on(I,h).on(P,f),A(),c(m)}var d,p=this,m=O.of(p,arguments),g={},v=0,y=".zoom-"+uo.event.changedTouches[0].identifier,x="touchmove"+y,_="touchend"+y,w=[],M=uo.select(p),A=K(p);r(),l(m),M.on(I,null).on(P,r)}function d(){var t=O.of(this,arguments);y?clearTimeout(y):(Bl.call(this),m=e(g=v||uo.mouse(this)),l(t)),y=setTimeout(function(){y=null,c(t)},50),T(),i(Math.pow(2,.002*Yo())*k.k),a(g,m),u(t)}function p(){var t=uo.mouse(this),r=Math.log(k.k)/Math.LN2;o(this,t,e(t),uo.event.shiftKey?Math.ceil(r)-1:Math.floor(r)+1)}var m,g,v,y,b,x,_,w,M,k={x:0,y:0,k:1},A=[960,500],S=Xo,L=250,C=0,I="mousedown.zoom",z="mousemove.zoom",D="mouseup.zoom",P="touchstart.zoom",O=E(t,"zoomstart","zoom","zoomend");return Wo||(Wo="onwheel"in fo?(Yo=function(){return-uo.event.deltaY*(uo.event.deltaMode?120:1)},"wheel"):"onmousewheel"in fo?(Yo=function(){return uo.event.wheelDelta},"mousewheel"):(Yo=function(){return-uo.event.detail},"MozMousePixelScroll")),t.event=function(t){t.each(function(){var t=O.of(this,arguments),e=k;jl?uo.select(this).transition().each("start.zoom",function(){k=this.__chart__||{x:0,y:0,k:1},l(t)}).tween("zoom:zoom",function(){var r=A[0],n=A[1],i=g?g[0]:r/2,a=g?g[1]:n/2,o=uo.interpolateZoom([(i-k.x)/k.k,(a-k.y)/k.k,r/k.k],[(i-e.x)/e.k,(a-e.y)/e.k,r/e.k]);return function(e){var n=o(e),s=r/n[2];this.__chart__=k={x:i-n[0]*s,y:a-n[1]*s,k:s},u(t)}}).each("interrupt.zoom",function(){c(t)}).each("end.zoom",function(){c(t)}):(this.__chart__=k,l(t),u(t),c(t))})},t.translate=function(e){return arguments.length?(k={x:+e[0],y:+e[1],k:k.k},s(),t):[k.x,k.y]},t.scale=function(e){return arguments.length?(k={x:k.x,y:k.y,k:null},i(+e),s(),t):k.k},t.scaleExtent=function(e){return arguments.length?(S=null==e?Xo:[+e[0],+e[1]],t):S},t.center=function(e){return arguments.length?(v=e&&[+e[0],+e[1]],t):v},t.size=function(e){return arguments.length?(A=e&&[+e[0],+e[1]],t):A},t.duration=function(e){return arguments.length?(L=+e,t):L},t.x=function(e){return arguments.length?(_=e,x=e.copy(),k={x:0,y:0,k:1},t):_},t.y=function(e){return arguments.length?(M=e,w=e.copy(),k={x:0,y:0,k:1},t):M},uo.rebind(t,O,"on")};var Yo,Wo,Xo=[0,1/0];uo.color=lt,lt.prototype.toString=function(){return this.rgb()+""},uo.hsl=ut;var Zo=ut.prototype=new lt;Zo.brighter=function(t){return t=Math.pow(.7,arguments.length?t:1),new ut(this.h,this.s,this.l/t)},Zo.darker=function(t){return t=Math.pow(.7,arguments.length?t:1),new ut(this.h,this.s,t*this.l)},Zo.rgb=function(){return ct(this.h,this.s,this.l)},uo.hcl=ht;var Jo=ht.prototype=new lt;Jo.brighter=function(t){return new ht(this.h,this.c,Math.min(100,this.l+Ko*(arguments.length?t:1)))},Jo.darker=function(t){return new ht(this.h,this.c,Math.max(0,this.l-Ko*(arguments.length?t:1)))},Jo.rgb=function(){return ft(this.h,this.c,this.l).rgb()},uo.lab=dt;var Ko=18,Qo=.95047,$o=1,ts=1.08883,es=dt.prototype=new lt;es.brighter=function(t){return new dt(Math.min(100,this.l+Ko*(arguments.length?t:1)),this.a,this.b)},es.darker=function(t){return new dt(Math.max(0,this.l-Ko*(arguments.length?t:1)),this.a,this.b)},es.rgb=function(){return pt(this.l,this.a,this.b)},uo.rgb=bt;var rs=bt.prototype=new lt;rs.brighter=function(t){t=Math.pow(.7,arguments.length?t:1);var e=this.r,r=this.g,n=this.b,i=30;return e||r||n?(e&&e<i&&(e=i),r&&r<i&&(r=i),n&&n<i&&(n=i),new bt(Math.min(255,e/t),Math.min(255,r/t),Math.min(255,n/t))):new bt(i,i,i)},rs.darker=function(t){return t=Math.pow(.7,arguments.length?t:1),new bt(t*this.r,t*this.g,t*this.b)},rs.hsl=function(){return kt(this.r,this.g,this.b)},rs.toString=function(){return"#"+wt(this.r)+wt(this.g)+wt(this.b)};var ns=uo.map({aliceblue:15792383,antiquewhite:16444375,aqua:65535,aquamarine:8388564,azure:15794175,beige:16119260,bisque:16770244,black:0,blanchedalmond:16772045,blue:255,blueviolet:9055202,brown:10824234,burlywood:14596231,cadetblue:6266528,chartreuse:8388352,chocolate:13789470,coral:16744272,cornflowerblue:6591981,cornsilk:16775388,crimson:14423100,cyan:65535,darkblue:139,darkcyan:35723,darkgoldenrod:12092939,darkgray:11119017,darkgreen:25600,darkgrey:11119017,darkkhaki:12433259,darkmagenta:9109643,darkolivegreen:5597999,darkorange:16747520,darkorchid:10040012,darkred:9109504,darksalmon:15308410,darkseagreen:9419919,darkslateblue:4734347,darkslategray:3100495,darkslategrey:3100495,darkturquoise:52945,darkviolet:9699539,deeppink:16716947,deepskyblue:49151,dimgray:6908265,dimgrey:6908265,dodgerblue:2003199,firebrick:11674146,floralwhite:16775920,forestgreen:2263842,fuchsia:16711935,gainsboro:14474460,ghostwhite:16316671,gold:16766720,goldenrod:14329120,gray:8421504,green:32768,greenyellow:11403055,grey:8421504,honeydew:15794160,hotpink:16738740,indianred:13458524,indigo:4915330,ivory:16777200,khaki:15787660,lavender:15132410,lavenderblush:16773365,lawngreen:8190976,lemonchiffon:16775885,lightblue:11393254,lightcoral:15761536,lightcyan:14745599,lightgoldenrodyellow:16448210,lightgray:13882323,lightgreen:9498256,lightgrey:13882323,lightpink:16758465,lightsalmon:16752762,lightseagreen:2142890,lightskyblue:8900346,lightslategray:7833753,lightslategrey:7833753,lightsteelblue:11584734,lightyellow:16777184,lime:65280,limegreen:3329330,linen:16445670,magenta:16711935,maroon:8388608,mediumaquamarine:6737322,mediumblue:205,mediumorchid:12211667,mediumpurple:9662683,mediumseagreen:3978097,mediumslateblue:8087790,mediumspringgreen:64154,mediumturquoise:4772300,mediumvioletred:13047173,midnightblue:1644912,mintcream:16121850,mistyrose:16770273,moccasin:16770229,navajowhite:16768685,navy:128,oldlace:16643558,olive:8421376,olivedrab:7048739,orange:16753920,orangered:16729344,orchid:14315734,palegoldenrod:15657130,palegreen:10025880,paleturquoise:11529966,palevioletred:14381203,papayawhip:16773077,peachpuff:16767673,peru:13468991,pink:16761035,plum:14524637,powderblue:11591910,purple:8388736,rebeccapurple:6697881,red:16711680,rosybrown:12357519,royalblue:4286945,saddlebrown:9127187,salmon:16416882,sandybrown:16032864,seagreen:3050327,seashell:16774638,sienna:10506797,silver:12632256,skyblue:8900331,slateblue:6970061,slategray:7372944,slategrey:7372944,snow:16775930,springgreen:65407,steelblue:4620980,tan:13808780,teal:32896,thistle:14204888,tomato:16737095,turquoise:4251856,violet:15631086,wheat:16113331,white:16777215,whitesmoke:16119285,yellow:16776960,yellowgreen:10145074});ns.forEach(function(t,e){ns.set(t,xt(e))}),uo.functor=Et,uo.xhr=Lt(x),uo.dsv=function(t,e){function r(t,r,a){arguments.length<3&&(a=r,r=null);var o=Ct(t,e,null==r?n:i(r),a);return o.row=function(t){return arguments.length?o.response(null==(r=t)?n:i(t)):r},o}function n(t){return r.parse(t.responseText)}function i(t){return function(e){return r.parse(e.responseText,t)}}function a(e){return e.map(o).join(t)}function o(t){return s.test(t)?'"'+t.replace(/\"/g,'""')+'"':t}var s=new RegExp('["'+t+"\n]"),l=t.charCodeAt(0);return r.parse=function(t,e){var n;return r.parseRows(t,function(t,r){if(n)return n(t,r-1);var i=new Function("d","return {"+t.map(function(t,e){return JSON.stringify(t)+": d["+e+"]"}).join(",")+"}");n=e?function(t,r){return e(i(t),r)}:i})},r.parseRows=function(t,e){function r(){if(c>=u)return o;if(i)return i=!1,a;var e=c;if(34===t.charCodeAt(e)){for(var r=e;r++<u;)if(34===t.charCodeAt(r)){if(34!==t.charCodeAt(r+1))break;++r}c=r+2;var n=t.charCodeAt(r+1);return 13===n?(i=!0,10===t.charCodeAt(r+2)&&++c):10===n&&(i=!0),t.slice(e+1,r).replace(/""/g,'"')}for(;c<u;){var n=t.charCodeAt(c++),s=1;if(10===n)i=!0;else if(13===n)i=!0,10===t.charCodeAt(c)&&(++c,++s);else if(n!==l)continue;return t.slice(e,c-s)}return t.slice(e)}for(var n,i,a={},o={},s=[],u=t.length,c=0,h=0;(n=r())!==o;){for(var f=[];n!==a&&n!==o;)f.push(n),n=r();e&&null==(f=e(f,h++))||s.push(f)}return s},r.format=function(e){if(Array.isArray(e[0]))return r.formatRows(e);var n=new b,i=[];return e.forEach(function(t){for(var e in t)n.has(e)||i.push(n.add(e))}),[i.map(o).join(t)].concat(e.map(function(e){return i.map(function(t){return o(e[t])}).join(t)})).join("\n")},r.formatRows=function(t){return t.map(a).join("\n")},r},uo.csv=uo.dsv(",","text/csv"),uo.tsv=uo.dsv("\t","text/tab-separated-values");var is,as,os,ss,ls=this[w(this,"requestAnimationFrame")]||function(t){setTimeout(t,17)};uo.timer=function(){Dt.apply(this,arguments)},uo.timer.flush=function(){Ot(),Rt()},uo.round=function(t,e){return e?Math.round(t*(e=Math.pow(10,e)))/e:Math.round(t)};var us=["y","z","a","f","p","n","\xb5","m","","k","M","G","T","P","E","Z","Y"].map(jt);uo.formatPrefix=function(t,e){var r=0;return(t=+t)&&(t<0&&(t*=-1),e&&(t=uo.round(t,Ft(t,e))),r=1+Math.floor(1e-12+Math.log(t)/Math.LN10),r=Math.max(-24,Math.min(24,3*Math.floor((r-1)/3)))),us[8+r/3]};var cs=/(?:([^{])?([<>=^]))?([+\- ])?([$#])?(0)?(\d+)?(,)?(\.-?\d+)?([a-z%])?/i,hs=uo.map({b:function(t){return t.toString(2)},c:function(t){return String.fromCharCode(t)},o:function(t){return t.toString(8)},x:function(t){return t.toString(16)},X:function(t){return t.toString(16).toUpperCase()},g:function(t,e){return t.toPrecision(e)},e:function(t,e){return t.toExponential(e)},f:function(t,e){return t.toFixed(e)},r:function(t,e){return(t=uo.round(t,Ft(t,e))).toFixed(Math.max(0,Math.min(20,Ft(t*(1+1e-15),e))))}}),fs=uo.time={},ds=Date;Ut.prototype={getDate:function(){return this._.getUTCDate()},getDay:function(){return this._.getUTCDay()},getFullYear:function(){return this._.getUTCFullYear()},getHours:function(){return this._.getUTCHours()},getMilliseconds:function(){return this._.getUTCMilliseconds()},getMinutes:function(){return this._.getUTCMinutes()},getMonth:function(){return this._.getUTCMonth()},getSeconds:function(){return this._.getUTCSeconds()},getTime:function(){return this._.getTime()},getTimezoneOffset:function(){return 0},valueOf:function(){return this._.valueOf()},setDate:function(){ps.setUTCDate.apply(this._,arguments)},setDay:function(){ps.setUTCDay.apply(this._,arguments)},setFullYear:function(){ps.setUTCFullYear.apply(this._,arguments)},setHours:function(){ps.setUTCHours.apply(this._,arguments)},setMilliseconds:function(){ps.setUTCMilliseconds.apply(this._,arguments)},setMinutes:function(){ps.setUTCMinutes.apply(this._,arguments)},setMonth:function(){ps.setUTCMonth.apply(this._,arguments)},setSeconds:function(){ps.setUTCSeconds.apply(this._,arguments)},setTime:function(){ps.setTime.apply(this._,arguments)}};var ps=Date.prototype;fs.year=Vt(function(t){return t=fs.day(t),t.setMonth(0,1),t},function(t,e){t.setFullYear(t.getFullYear()+e)},function(t){return t.getFullYear()}),fs.years=fs.year.range,fs.years.utc=fs.year.utc.range,fs.day=Vt(function(t){var e=new ds(2e3,0);return e.setFullYear(t.getFullYear(),t.getMonth(),t.getDate()),e},function(t,e){t.setDate(t.getDate()+e)},function(t){return t.getDate()-1}),fs.days=fs.day.range,fs.days.utc=fs.day.utc.range,fs.dayOfYear=function(t){var e=fs.year(t);return Math.floor((t-e-6e4*(t.getTimezoneOffset()-e.getTimezoneOffset()))/864e5)},["sunday","monday","tuesday","wednesday","thursday","friday","saturday"].forEach(function(t,e){e=7-e;var r=fs[t]=Vt(function(t){return(t=fs.day(t)).setDate(t.getDate()-(t.getDay()+e)%7),t},function(t,e){t.setDate(t.getDate()+7*Math.floor(e))},function(t){var r=fs.year(t).getDay();return Math.floor((fs.dayOfYear(t)+(r+e)%7)/7)-(r!==e)});fs[t+"s"]=r.range,fs[t+"s"].utc=r.utc.range,fs[t+"OfYear"]=function(t){var r=fs.year(t).getDay();return Math.floor((fs.dayOfYear(t)+(r+e)%7)/7)}}),fs.week=fs.sunday,fs.weeks=fs.sunday.range,fs.weeks.utc=fs.sunday.utc.range,fs.weekOfYear=fs.sundayOfYear;var ms={"-":"",_:" ",0:"0"},gs=/^\s*\d+/,vs=/^%/;uo.locale=function(t){return{numberFormat:Nt(t),timeFormat:qt(t)}};var ys=uo.locale({decimal:".",thousands:",",grouping:[3],currency:["$",""],dateTime:"%a %b %e %X %Y",date:"%m/%d/%Y",time:"%H:%M:%S",periods:["AM","PM"],days:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]});uo.format=ys.numberFormat,uo.geo={},he.prototype={s:0,t:0,add:function(t){fe(t,this.t,bs),fe(bs.s,this.s,this),this.s?this.t+=bs.t:this.s=bs.t},reset:function(){this.s=this.t=0},valueOf:function(){return this.s}};var bs=new he;uo.geo.stream=function(t,e){t&&xs.hasOwnProperty(t.type)?xs[t.type](t,e):de(t,e)};var xs={Feature:function(t,e){de(t.geometry,e)},FeatureCollection:function(t,e){for(var r=t.features,n=-1,i=r.length;++n<i;)de(r[n].geometry,e)}},_s={Sphere:function(t,e){e.sphere()},Point:function(t,e){t=t.coordinates,e.point(t[0],t[1],t[2])},MultiPoint:function(t,e){for(var r=t.coordinates,n=-1,i=r.length;++n<i;)t=r[n],e.point(t[0],t[1],t[2])},LineString:function(t,e){pe(t.coordinates,e,0)},MultiLineString:function(t,e){for(var r=t.coordinates,n=-1,i=r.length;++n<i;)pe(r[n],e,0)},Polygon:function(t,e){me(t.coordinates,e)},MultiPolygon:function(t,e){for(var r=t.coordinates,n=-1,i=r.length;++n<i;)me(r[n],e)},GeometryCollection:function(t,e){for(var r=t.geometries,n=-1,i=r.length;++n<i;)de(r[n],e)}};uo.geo.area=function(t){return ws=0,uo.geo.stream(t,ks),ws};var ws,Ms=new he,ks={sphere:function(){ws+=4*No},point:M,lineStart:M,lineEnd:M,polygonStart:function(){Ms.reset(),ks.lineStart=ge},polygonEnd:function(){var t=2*Ms;ws+=t<0?4*No+t:t,ks.lineStart=ks.lineEnd=ks.point=M}};uo.geo.bounds=function(){function t(t,e){b.push(x=[c=t,f=t]),e<h&&(h=e),e>d&&(d=e)}function e(e,r){var n=ve([e*Ho,r*Ho]);if(v){var i=be(v,n),a=[i[1],-i[0],0],o=be(a,i);we(o),o=Me(o);var l=e-p,u=l>0?1:-1,m=o[0]*qo*u,g=xo(l)>180;if(g^(u*p<m&&m<u*e)){var y=o[1]*qo;y>d&&(d=y)}else if(m=(m+360)%360-180,g^(u*p<m&&m<u*e)){var y=-o[1]*qo;y<h&&(h=y)}else r<h&&(h=r),r>d&&(d=r);g?e<p?s(c,e)>s(c,f)&&(f=e):s(e,f)>s(c,f)&&(c=e):f>=c?(e<c&&(c=e),e>f&&(f=e)):e>p?s(c,e)>s(c,f)&&(f=e):s(e,f)>s(c,f)&&(c=e)}else t(e,r);v=n,p=e}function r(){_.point=e}function n(){x[0]=c,x[1]=f,_.point=t,v=null}function i(t,r){if(v){var n=t-p;y+=xo(n)>180?n+(n>0?360:-360):n}else m=t,g=r;ks.point(t,r),e(t,r)}function a(){ks.lineStart()}function o(){i(m,g),ks.lineEnd(),xo(y)>Fo&&(c=-(f=180)),x[0]=c,x[1]=f,v=null}function s(t,e){return(e-=t)<0?e+360:e}function l(t,e){return t[0]-e[0]}function u(t,e){return e[0]<=e[1]?e[0]<=t&&t<=e[1]:t<e[0]||e[1]<t}var c,h,f,d,p,m,g,v,y,b,x,_={point:t,lineStart:r,lineEnd:n,polygonStart:function(){_.point=i,_.lineStart=a,_.lineEnd=o,y=0,ks.polygonStart()},polygonEnd:function(){ks.polygonEnd(),_.point=t,_.lineStart=r,_.lineEnd=n,Ms<0?(c=-(f=180),h=-(d=90)):y>Fo?d=90:y<-Fo&&(h=-90),x[0]=c,x[1]=f}};return function(t){d=f=-(c=h=1/0),b=[],uo.geo.stream(t,_);var e=b.length;if(e){b.sort(l);for(var r,n=1,i=b[0],a=[i];n<e;++n)r=b[n],u(r[0],i)||u(r[1],i)?(s(i[0],r[1])>s(i[0],i[1])&&(i[1]=r[1]),s(r[0],i[1])>s(i[0],i[1])&&(i[0]=r[0])):a.push(i=r);for(var o,r,p=-1/0,e=a.length-1,n=0,i=a[e];n<=e;i=r,++n)r=a[n],(o=s(i[1],r[0]))>p&&(p=o,c=r[0],f=i[1])}return b=x=null,c===1/0||h===1/0?[[NaN,NaN],[NaN,NaN]]:[[c,h],[f,d]]}}(),uo.geo.centroid=function(t){As=Ts=Ss=Es=Ls=Cs=Is=zs=Ds=Ps=Os=0,uo.geo.stream(t,Rs);var e=Ds,r=Ps,n=Os,i=e*e+r*r+n*n;return i<jo&&(e=Cs,r=Is,n=zs,Ts<Fo&&(e=Ss,r=Es,n=Ls),(i=e*e+r*r+n*n)<jo)?[NaN,NaN]:[Math.atan2(r,e)*qo,nt(n/Math.sqrt(i))*qo]};var As,Ts,Ss,Es,Ls,Cs,Is,zs,Ds,Ps,Os,Rs={sphere:M,point:Ae,lineStart:Se,lineEnd:Ee,polygonStart:function(){Rs.lineStart=Le},polygonEnd:function(){Rs.lineStart=Se}},Fs=Oe(Ie,Ne,Ue,[-No,-No/2]),js=1e9;uo.geo.clipExtent=function(){var t,e,r,n,i,a,o={stream:function(t){return i&&(i.valid=!1),i=a(t),i.valid=!0,i},extent:function(s){return arguments.length?(a=Ge(t=+s[0][0],e=+s[0][1],r=+s[1][0],n=+s[1][1]),i&&(i.valid=!1,i=null),o):[[t,e],[r,n]]}};return o.extent([[0,0],[960,500]])},(uo.geo.conicEqualArea=function(){return Ye(We)}).raw=We,uo.geo.albers=function(){return uo.geo.conicEqualArea().rotate([96,0]).center([-.6,38.7]).parallels([29.5,45.5]).scale(1070)},uo.geo.albersUsa=function(){function t(t){var a=t[0],o=t[1];return e=null,r(a,o),e||(n(a,o),e)||i(a,o),e}var e,r,n,i,a=uo.geo.albers(),o=uo.geo.conicEqualArea().rotate([154,0]).center([-2,58.5]).parallels([55,65]),s=uo.geo.conicEqualArea().rotate([157,0]).center([-3,19.9]).parallels([8,18]),l={point:function(t,r){e=[t,r]}};return t.invert=function(t){var e=a.scale(),r=a.translate(),n=(t[0]-r[0])/e,i=(t[1]-r[1])/e;return(i>=.12&&i<.234&&n>=-.425&&n<-.214?o:i>=.166&&i<.234&&n>=-.214&&n<-.115?s:a).invert(t)},t.stream=function(t){var e=a.stream(t),r=o.stream(t),n=s.stream(t);return{point:function(t,i){e.point(t,i),r.point(t,i),n.point(t,i)},sphere:function(){e.sphere(),r.sphere(),n.sphere()},lineStart:function(){e.lineStart(),r.lineStart(),n.lineStart()},lineEnd:function(){e.lineEnd(),r.lineEnd(),n.lineEnd()},polygonStart:function(){e.polygonStart(),r.polygonStart(),n.polygonStart()},polygonEnd:function(){e.polygonEnd(),r.polygonEnd(),n.polygonEnd()}}},t.precision=function(e){return arguments.length?(a.precision(e),o.precision(e),s.precision(e),t):a.precision()},t.scale=function(e){return arguments.length?(a.scale(e),o.scale(.35*e),s.scale(e),t.translate(a.translate())):a.scale()},t.translate=function(e){if(!arguments.length)return a.translate();var u=a.scale(),c=+e[0],h=+e[1];return r=a.translate(e).clipExtent([[c-.455*u,h-.238*u],[c+.455*u,h+.238*u]]).stream(l).point,n=o.translate([c-.307*u,h+.201*u]).clipExtent([[c-.425*u+Fo,h+.12*u+Fo],[c-.214*u-Fo,h+.234*u-Fo]]).stream(l).point,i=s.translate([c-.205*u,h+.212*u]).clipExtent([[c-.214*u+Fo,h+.166*u+Fo],[c-.115*u-Fo,h+.234*u-Fo]]).stream(l).point,t},t.scale(1070)};var Ns,Bs,Us,Vs,Hs,qs,Gs={point:M,lineStart:M,lineEnd:M,polygonStart:function(){Bs=0,Gs.lineStart=Xe},polygonEnd:function(){Gs.lineStart=Gs.lineEnd=Gs.point=M,Ns+=xo(Bs/2)}},Ys={point:Ze,lineStart:M,lineEnd:M,polygonStart:M,polygonEnd:M},Ws={point:Qe,lineStart:$e,lineEnd:tr,polygonStart:function(){Ws.lineStart=er},polygonEnd:function(){Ws.point=Qe,Ws.lineStart=$e,Ws.lineEnd=tr}};uo.geo.path=function(){function t(t){return t&&("function"==typeof s&&a.pointRadius(+s.apply(this,arguments)),o&&o.valid||(o=i(a)),uo.geo.stream(t,o)),a.result()}function e(){return o=null,t}var r,n,i,a,o,s=4.5;return t.area=function(t){return Ns=0,uo.geo.stream(t,i(Gs)),Ns},t.centroid=function(t){return Ss=Es=Ls=Cs=Is=zs=Ds=Ps=Os=0,uo.geo.stream(t,i(Ws)),Os?[Ds/Os,Ps/Os]:zs?[Cs/zs,Is/zs]:Ls?[Ss/Ls,Es/Ls]:[NaN,NaN]},t.bounds=function(t){return Hs=qs=-(Us=Vs=1/0),uo.geo.stream(t,i(Ys)),[[Us,Vs],[Hs,qs]]},t.projection=function(t){return arguments.length?(i=(r=t)?t.stream||ir(t):x,e()):r},t.context=function(t){return arguments.length?(a=null==(n=t)?new Je:new rr(t),"function"!=typeof s&&a.pointRadius(s),e()):n},t.pointRadius=function(e){return arguments.length?(s="function"==typeof e?e:(a.pointRadius(+e),+e),t):s},t.projection(uo.geo.albersUsa()).context(null)},uo.geo.transform=function(t){return{stream:function(e){var r=new ar(e);for(var n in t)r[n]=t[n];return r}}},ar.prototype={point:function(t,e){this.stream.point(t,e)},sphere:function(){this.stream.sphere()},lineStart:function(){this.stream.lineStart()},lineEnd:function(){this.stream.lineEnd()},polygonStart:function(){this.stream.polygonStart()},polygonEnd:function(){this.stream.polygonEnd()}},uo.geo.projection=sr,uo.geo.projectionMutator=lr,(uo.geo.equirectangular=function(){return sr(cr)}).raw=cr.invert=cr,uo.geo.rotation=function(t){function e(e){return e=t(e[0]*Ho,e[1]*Ho),e[0]*=qo,e[1]*=qo,e}return t=fr(t[0]%360*Ho,t[1]*Ho,t.length>2?t[2]*Ho:0),e.invert=function(e){return e=t.invert(e[0]*Ho,e[1]*Ho),e[0]*=qo,e[1]*=qo,e},e},hr.invert=cr,uo.geo.circle=function(){function t(){var t="function"==typeof n?n.apply(this,arguments):n,e=fr(-t[0]*Ho,-t[1]*Ho,0).invert,i=[];return r(null,null,1,{point:function(t,r){i.push(t=e(t,r)),t[0]*=qo,t[1]*=qo}}),{type:"Polygon",coordinates:[i]}}var e,r,n=[0,0],i=6;return t.origin=function(e){return arguments.length?(n=e,t):n},t.angle=function(n){return arguments.length?(r=gr((e=+n)*Ho,i*Ho),t):e},t.precision=function(n){return arguments.length?(r=gr(e*Ho,(i=+n)*Ho),t):i},t.angle(90)},uo.geo.distance=function(t,e){var r,n=(e[0]-t[0])*Ho,i=t[1]*Ho,a=e[1]*Ho,o=Math.sin(n),s=Math.cos(n),l=Math.sin(i),u=Math.cos(i),c=Math.sin(a),h=Math.cos(a);return Math.atan2(Math.sqrt((r=h*o)*r+(r=u*c-l*h*s)*r),l*c+u*h*s)},uo.geo.graticule=function(){function t(){return{type:"MultiLineString",coordinates:e()}}function e(){return uo.range(Math.ceil(a/g)*g,i,g).map(f).concat(uo.range(Math.ceil(u/v)*v,l,v).map(d)).concat(uo.range(Math.ceil(n/p)*p,r,p).filter(function(t){return xo(t%g)>Fo}).map(c)).concat(uo.range(Math.ceil(s/m)*m,o,m).filter(function(t){return xo(t%v)>Fo}).map(h))}var r,n,i,a,o,s,l,u,c,h,f,d,p=10,m=p,g=90,v=360,y=2.5;return t.lines=function(){return e().map(function(t){return{type:"LineString",coordinates:t}})},t.outline=function(){return{type:"Polygon",coordinates:[f(a).concat(d(l).slice(1),f(i).reverse().slice(1),d(u).reverse().slice(1))]}},t.extent=function(e){return arguments.length?t.majorExtent(e).minorExtent(e):t.minorExtent()},t.majorExtent=function(e){return arguments.length?(a=+e[0][0],i=+e[1][0],u=+e[0][1],l=+e[1][1],a>i&&(e=a,a=i,i=e),u>l&&(e=u,u=l,l=e),t.precision(y)):[[a,u],[i,l]]},t.minorExtent=function(e){return arguments.length?(n=+e[0][0],r=+e[1][0],s=+e[0][1],o=+e[1][1],n>r&&(e=n,n=r,r=e),s>o&&(e=s,s=o,o=e),t.precision(y)):[[n,s],[r,o]]},t.step=function(e){return arguments.length?t.majorStep(e).minorStep(e):t.minorStep()},t.majorStep=function(e){return arguments.length?(g=+e[0],v=+e[1],t):[g,v]},t.minorStep=function(e){
return arguments.length?(p=+e[0],m=+e[1],t):[p,m]},t.precision=function(e){return arguments.length?(y=+e,c=yr(s,o,90),h=br(n,r,y),f=yr(u,l,90),d=br(a,i,y),t):y},t.majorExtent([[-180,-90+Fo],[180,90-Fo]]).minorExtent([[-180,-80-Fo],[180,80+Fo]])},uo.geo.greatArc=function(){function t(){return{type:"LineString",coordinates:[e||n.apply(this,arguments),r||i.apply(this,arguments)]}}var e,r,n=xr,i=_r;return t.distance=function(){return uo.geo.distance(e||n.apply(this,arguments),r||i.apply(this,arguments))},t.source=function(r){return arguments.length?(n=r,e="function"==typeof r?null:r,t):n},t.target=function(e){return arguments.length?(i=e,r="function"==typeof e?null:e,t):i},t.precision=function(){return arguments.length?t:0},t},uo.geo.interpolate=function(t,e){return wr(t[0]*Ho,t[1]*Ho,e[0]*Ho,e[1]*Ho)},uo.geo.length=function(t){return Xs=0,uo.geo.stream(t,Zs),Xs};var Xs,Zs={sphere:M,point:M,lineStart:Mr,lineEnd:M,polygonStart:M,polygonEnd:M},Js=kr(function(t){return Math.sqrt(2/(1+t))},function(t){return 2*Math.asin(t/2)});(uo.geo.azimuthalEqualArea=function(){return sr(Js)}).raw=Js;var Ks=kr(function(t){var e=Math.acos(t);return e&&e/Math.sin(e)},x);(uo.geo.azimuthalEquidistant=function(){return sr(Ks)}).raw=Ks,(uo.geo.conicConformal=function(){return Ye(Ar)}).raw=Ar,(uo.geo.conicEquidistant=function(){return Ye(Tr)}).raw=Tr;var Qs=kr(function(t){return 1/t},Math.atan);(uo.geo.gnomonic=function(){return sr(Qs)}).raw=Qs,Sr.invert=function(t,e){return[t,2*Math.atan(Math.exp(e))-Vo]},(uo.geo.mercator=function(){return Er(Sr)}).raw=Sr;var $s=kr(function(){return 1},Math.asin);(uo.geo.orthographic=function(){return sr($s)}).raw=$s;var tl=kr(function(t){return 1/(1+t)},function(t){return 2*Math.atan(t)});(uo.geo.stereographic=function(){return sr(tl)}).raw=tl,Lr.invert=function(t,e){return[-e,2*Math.atan(Math.exp(t))-Vo]},(uo.geo.transverseMercator=function(){var t=Er(Lr),e=t.center,r=t.rotate;return t.center=function(t){return t?e([-t[1],t[0]]):(t=e(),[t[1],-t[0]])},t.rotate=function(t){return t?r([t[0],t[1],t.length>2?t[2]+90:90]):(t=r(),[t[0],t[1],t[2]-90])},r([0,0,90])}).raw=Lr,uo.geom={},uo.geom.hull=function(t){function e(t){if(t.length<3)return[];var e,i=Et(r),a=Et(n),o=t.length,s=[],l=[];for(e=0;e<o;e++)s.push([+i.call(this,t[e],e),+a.call(this,t[e],e),e]);for(s.sort(Dr),e=0;e<o;e++)l.push([s[e][0],-s[e][1]]);var u=zr(s),c=zr(l),h=c[0]===u[0],f=c[c.length-1]===u[u.length-1],d=[];for(e=u.length-1;e>=0;--e)d.push(t[s[u[e]][2]]);for(e=+h;e<c.length-f;++e)d.push(t[s[c[e]][2]]);return d}var r=Cr,n=Ir;return arguments.length?e(t):(e.x=function(t){return arguments.length?(r=t,e):r},e.y=function(t){return arguments.length?(n=t,e):n},e)},uo.geom.polygon=function(t){return Ao(t,el),t};var el=uo.geom.polygon.prototype=[];el.area=function(){for(var t,e=-1,r=this.length,n=this[r-1],i=0;++e<r;)t=n,n=this[e],i+=t[1]*n[0]-t[0]*n[1];return.5*i},el.centroid=function(t){var e,r,n=-1,i=this.length,a=0,o=0,s=this[i-1];for(arguments.length||(t=-1/(6*this.area()));++n<i;)e=s,s=this[n],r=e[0]*s[1]-s[0]*e[1],a+=(e[0]+s[0])*r,o+=(e[1]+s[1])*r;return[a*t,o*t]},el.clip=function(t){for(var e,r,n,i,a,o,s=Rr(t),l=-1,u=this.length-Rr(this),c=this[u-1];++l<u;){for(e=t.slice(),t.length=0,i=this[l],a=e[(n=e.length-s)-1],r=-1;++r<n;)o=e[r],Pr(o,c,i)?(Pr(a,c,i)||t.push(Or(a,o,c,i)),t.push(o)):Pr(a,c,i)&&t.push(Or(a,o,c,i)),a=o;s&&t.push(t[0]),c=i}return t};var rl,nl,il,al,ol,sl=[],ll=[];qr.prototype.prepare=function(){for(var t,e=this.edges,r=e.length;r--;)t=e[r].edge,t.b&&t.a||e.splice(r,1);return e.sort(Yr),e.length},rn.prototype={start:function(){return this.edge.l===this.site?this.edge.a:this.edge.b},end:function(){return this.edge.l===this.site?this.edge.b:this.edge.a}},nn.prototype={insert:function(t,e){var r,n,i;if(t){if(e.P=t,e.N=t.N,t.N&&(t.N.P=e),t.N=e,t.R){for(t=t.R;t.L;)t=t.L;t.L=e}else t.R=e;r=t}else this._?(t=ln(this._),e.P=null,e.N=t,t.P=t.L=e,r=t):(e.P=e.N=null,this._=e,r=null);for(e.L=e.R=null,e.U=r,e.C=!0,t=e;r&&r.C;)n=r.U,r===n.L?(i=n.R,i&&i.C?(r.C=i.C=!1,n.C=!0,t=n):(t===r.R&&(on(this,r),t=r,r=t.U),r.C=!1,n.C=!0,sn(this,n))):(i=n.L,i&&i.C?(r.C=i.C=!1,n.C=!0,t=n):(t===r.L&&(sn(this,r),t=r,r=t.U),r.C=!1,n.C=!0,on(this,n))),r=t.U;this._.C=!1},remove:function(t){t.N&&(t.N.P=t.P),t.P&&(t.P.N=t.N),t.N=t.P=null;var e,r,n,i=t.U,a=t.L,o=t.R;if(r=a?o?ln(o):a:o,i?i.L===t?i.L=r:i.R=r:this._=r,a&&o?(n=r.C,r.C=t.C,r.L=a,a.U=r,r!==o?(i=r.U,r.U=t.U,t=r.R,i.L=t,r.R=o,o.U=r):(r.U=i,i=r,t=r.R)):(n=t.C,t=r),t&&(t.U=i),!n){if(t&&t.C)return void(t.C=!1);do{if(t===this._)break;if(t===i.L){if(e=i.R,e.C&&(e.C=!1,i.C=!0,on(this,i),e=i.R),e.L&&e.L.C||e.R&&e.R.C){e.R&&e.R.C||(e.L.C=!1,e.C=!0,sn(this,e),e=i.R),e.C=i.C,i.C=e.R.C=!1,on(this,i),t=this._;break}}else if(e=i.L,e.C&&(e.C=!1,i.C=!0,sn(this,i),e=i.L),e.L&&e.L.C||e.R&&e.R.C){e.L&&e.L.C||(e.R.C=!1,e.C=!0,on(this,e),e=i.L),e.C=i.C,i.C=e.L.C=!1,sn(this,i),t=this._;break}e.C=!0,t=i,i=i.U}while(!t.C);t&&(t.C=!1)}}},uo.geom.voronoi=function(t){function e(t){var e=new Array(t.length),n=s[0][0],i=s[0][1],a=s[1][0],o=s[1][1];return un(r(t),s).cells.forEach(function(r,s){var l=r.edges,u=r.site;(e[s]=l.length?l.map(function(t){var e=t.start();return[e.x,e.y]}):u.x>=n&&u.x<=a&&u.y>=i&&u.y<=o?[[n,o],[a,o],[a,i],[n,i]]:[]).point=t[s]}),e}function r(t){return t.map(function(t,e){return{x:Math.round(a(t,e)/Fo)*Fo,y:Math.round(o(t,e)/Fo)*Fo,i:e}})}var n=Cr,i=Ir,a=n,o=i,s=ul;return t?e(t):(e.links=function(t){return un(r(t)).edges.filter(function(t){return t.l&&t.r}).map(function(e){return{source:t[e.l.i],target:t[e.r.i]}})},e.triangles=function(t){var e=[];return un(r(t)).cells.forEach(function(r,n){for(var i,a=r.site,o=r.edges.sort(Yr),s=-1,l=o.length,u=o[l-1].edge,c=u.l===a?u.r:u.l;++s<l;)u,i=c,u=o[s].edge,c=u.l===a?u.r:u.l,n<i.i&&n<c.i&&hn(a,i,c)<0&&e.push([t[n],t[i.i],t[c.i]])}),e},e.x=function(t){return arguments.length?(a=Et(n=t),e):n},e.y=function(t){return arguments.length?(o=Et(i=t),e):i},e.clipExtent=function(t){return arguments.length?(s=null==t?ul:t,e):s===ul?null:s},e.size=function(t){return arguments.length?e.clipExtent(t&&[[0,0],t]):s===ul?null:s&&s[1]},e)};var ul=[[-1e6,-1e6],[1e6,1e6]];uo.geom.delaunay=function(t){return uo.geom.voronoi().triangles(t)},uo.geom.quadtree=function(t,e,r,n,i){function a(t){function a(t,e,r,n,i,a,o,s){if(!isNaN(r)&&!isNaN(n))if(t.leaf){var l=t.x,c=t.y;if(null!=l)if(xo(l-r)+xo(c-n)<.01)u(t,e,r,n,i,a,o,s);else{var h=t.point;t.x=t.y=t.point=null,u(t,h,l,c,i,a,o,s),u(t,e,r,n,i,a,o,s)}else t.x=r,t.y=n,t.point=e}else u(t,e,r,n,i,a,o,s)}function u(t,e,r,n,i,o,s,l){var u=.5*(i+s),c=.5*(o+l),h=r>=u,f=n>=c,d=f<<1|h;t.leaf=!1,t=t.nodes[d]||(t.nodes[d]=pn()),h?i=u:s=u,f?o=c:l=c,a(t,e,r,n,i,o,s,l)}var c,h,f,d,p,m,g,v,y,b=Et(s),x=Et(l);if(null!=e)m=e,g=r,v=n,y=i;else if(v=y=-(m=g=1/0),h=[],f=[],p=t.length,o)for(d=0;d<p;++d)c=t[d],c.x<m&&(m=c.x),c.y<g&&(g=c.y),c.x>v&&(v=c.x),c.y>y&&(y=c.y),h.push(c.x),f.push(c.y);else for(d=0;d<p;++d){var _=+b(c=t[d],d),w=+x(c,d);_<m&&(m=_),w<g&&(g=w),_>v&&(v=_),w>y&&(y=w),h.push(_),f.push(w)}var M=v-m,k=y-g;M>k?y=g+M:v=m+k;var A=pn();if(A.add=function(t){a(A,t,+b(t,++d),+x(t,d),m,g,v,y)},A.visit=function(t){mn(t,A,m,g,v,y)},A.find=function(t){return gn(A,t[0],t[1],m,g,v,y)},d=-1,null==e){for(;++d<p;)a(A,t[d],h[d],f[d],m,g,v,y);--d}else t.forEach(A.add);return h=f=t=c=null,A}var o,s=Cr,l=Ir;return(o=arguments.length)?(s=fn,l=dn,3===o&&(i=r,n=e,r=e=0),a(t)):(a.x=function(t){return arguments.length?(s=t,a):s},a.y=function(t){return arguments.length?(l=t,a):l},a.extent=function(t){return arguments.length?(null==t?e=r=n=i=null:(e=+t[0][0],r=+t[0][1],n=+t[1][0],i=+t[1][1]),a):null==e?null:[[e,r],[n,i]]},a.size=function(t){return arguments.length?(null==t?e=r=n=i=null:(e=r=0,n=+t[0],i=+t[1]),a):null==e?null:[n-e,i-r]},a)},uo.interpolateRgb=vn,uo.interpolateObject=yn,uo.interpolateNumber=bn,uo.interpolateString=xn;var cl=/[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g,hl=new RegExp(cl.source,"g");uo.interpolate=_n,uo.interpolators=[function(t,e){var r=typeof e;return("string"===r?ns.has(e.toLowerCase())||/^(#|rgb\(|hsl\()/i.test(e)?vn:xn:e instanceof lt?vn:Array.isArray(e)?wn:"object"===r&&isNaN(e)?yn:bn)(t,e)}],uo.interpolateArray=wn;var fl=function(){return x},dl=uo.map({linear:fl,poly:Ln,quad:function(){return Tn},cubic:function(){return Sn},sin:function(){return Cn},exp:function(){return In},circle:function(){return zn},elastic:Dn,back:Pn,bounce:function(){return On}}),pl=uo.map({in:x,out:kn,"in-out":An,"out-in":function(t){return An(kn(t))}});uo.ease=function(t){var e=t.indexOf("-"),r=e>=0?t.slice(0,e):t,n=e>=0?t.slice(e+1):"in";return r=dl.get(r)||fl,n=pl.get(n)||x,Mn(n(r.apply(null,co.call(arguments,1))))},uo.interpolateHcl=Rn,uo.interpolateHsl=Fn,uo.interpolateLab=jn,uo.interpolateRound=Nn,uo.transform=function(t){var e=fo.createElementNS(uo.ns.prefix.svg,"g");return(uo.transform=function(t){if(null!=t){e.setAttribute("transform",t);var r=e.transform.baseVal.consolidate()}return new Bn(r?r.matrix:ml)})(t)},Bn.prototype.toString=function(){return"translate("+this.translate+")rotate("+this.rotate+")skewX("+this.skew+")scale("+this.scale+")"};var ml={a:1,b:0,c:0,d:1,e:0,f:0};uo.interpolateTransform=Zn,uo.layout={},uo.layout.bundle=function(){return function(t){for(var e=[],r=-1,n=t.length;++r<n;)e.push(Qn(t[r]));return e}},uo.layout.chord=function(){function t(){var t,u,h,f,d,p={},m=[],g=uo.range(a),v=[];for(r=[],n=[],t=0,f=-1;++f<a;){for(u=0,d=-1;++d<a;)u+=i[f][d];m.push(u),v.push(uo.range(a)),t+=u}for(o&&g.sort(function(t,e){return o(m[t],m[e])}),s&&v.forEach(function(t,e){t.sort(function(t,r){return s(i[e][t],i[e][r])})}),t=(Bo-c*a)/t,u=0,f=-1;++f<a;){for(h=u,d=-1;++d<a;){var y=g[f],b=v[y][d],x=i[y][b],_=u,w=u+=x*t;p[y+"-"+b]={index:y,subindex:b,startAngle:_,endAngle:w,value:x}}n[y]={index:y,startAngle:h,endAngle:u,value:m[y]},u+=c}for(f=-1;++f<a;)for(d=f-1;++d<a;){var M=p[f+"-"+d],k=p[d+"-"+f];(M.value||k.value)&&r.push(M.value<k.value?{source:k,target:M}:{source:M,target:k})}l&&e()}function e(){r.sort(function(t,e){return l((t.source.value+t.target.value)/2,(e.source.value+e.target.value)/2)})}var r,n,i,a,o,s,l,u={},c=0;return u.matrix=function(t){return arguments.length?(a=(i=t)&&i.length,r=n=null,u):i},u.padding=function(t){return arguments.length?(c=t,r=n=null,u):c},u.sortGroups=function(t){return arguments.length?(o=t,r=n=null,u):o},u.sortSubgroups=function(t){return arguments.length?(s=t,r=null,u):s},u.sortChords=function(t){return arguments.length?(l=t,r&&e(),u):l},u.chords=function(){return r||t(),r},u.groups=function(){return n||t(),n},u},uo.layout.force=function(){function t(t){return function(e,r,n,i){if(e.point!==t){var a=e.cx-t.x,o=e.cy-t.y,s=i-r,l=a*a+o*o;if(s*s/v<l){if(l<m){var u=e.charge/l;t.px-=a*u,t.py-=o*u}return!0}if(e.point&&l&&l<m){var u=e.pointCharge/l;t.px-=a*u,t.py-=o*u}}return!e.charge}}function e(t){t.px=uo.event.x,t.py=uo.event.y,l.resume()}var r,n,i,a,o,s,l={},u=uo.dispatch("start","tick","end"),c=[1,1],h=.9,f=gl,d=vl,p=-30,m=yl,g=.1,v=.64,y=[],b=[];return l.tick=function(){if((i*=.99)<.005)return r=null,u.end({type:"end",alpha:i=0}),!0;var e,n,l,f,d,m,v,x,_,w=y.length,M=b.length;for(n=0;n<M;++n)l=b[n],f=l.source,d=l.target,x=d.x-f.x,_=d.y-f.y,(m=x*x+_*_)&&(m=i*o[n]*((m=Math.sqrt(m))-a[n])/m,x*=m,_*=m,d.x-=x*(v=f.weight+d.weight?f.weight/(f.weight+d.weight):.5),d.y-=_*v,f.x+=x*(v=1-v),f.y+=_*v);if((v=i*g)&&(x=c[0]/2,_=c[1]/2,n=-1,v))for(;++n<w;)l=y[n],l.x+=(x-l.x)*v,l.y+=(_-l.y)*v;if(p)for(ai(e=uo.geom.quadtree(y),i,s),n=-1;++n<w;)(l=y[n]).fixed||e.visit(t(l));for(n=-1;++n<w;)l=y[n],l.fixed?(l.x=l.px,l.y=l.py):(l.x-=(l.px-(l.px=l.x))*h,l.y-=(l.py-(l.py=l.y))*h);u.tick({type:"tick",alpha:i})},l.nodes=function(t){return arguments.length?(y=t,l):y},l.links=function(t){return arguments.length?(b=t,l):b},l.size=function(t){return arguments.length?(c=t,l):c},l.linkDistance=function(t){return arguments.length?(f="function"==typeof t?t:+t,l):f},l.distance=l.linkDistance,l.linkStrength=function(t){return arguments.length?(d="function"==typeof t?t:+t,l):d},l.friction=function(t){return arguments.length?(h=+t,l):h},l.charge=function(t){return arguments.length?(p="function"==typeof t?t:+t,l):p},l.chargeDistance=function(t){return arguments.length?(m=t*t,l):Math.sqrt(m)},l.gravity=function(t){return arguments.length?(g=+t,l):g},l.theta=function(t){return arguments.length?(v=t*t,l):Math.sqrt(v)},l.alpha=function(t){return arguments.length?(t=+t,i?t>0?i=t:(r.c=null,r.t=NaN,r=null,u.end({type:"end",alpha:i=0})):t>0&&(u.start({type:"start",alpha:i=t}),r=Dt(l.tick)),l):i},l.start=function(){function t(t,n){if(!r){for(r=new Array(i),l=0;l<i;++l)r[l]=[];for(l=0;l<u;++l){var a=b[l];r[a.source.index].push(a.target),r[a.target.index].push(a.source)}}for(var o,s=r[e],l=-1,c=s.length;++l<c;)if(!isNaN(o=s[l][t]))return o;return Math.random()*n}var e,r,n,i=y.length,u=b.length,h=c[0],m=c[1];for(e=0;e<i;++e)(n=y[e]).index=e,n.weight=0;for(e=0;e<u;++e)n=b[e],"number"==typeof n.source&&(n.source=y[n.source]),"number"==typeof n.target&&(n.target=y[n.target]),++n.source.weight,++n.target.weight;for(e=0;e<i;++e)n=y[e],isNaN(n.x)&&(n.x=t("x",h)),isNaN(n.y)&&(n.y=t("y",m)),isNaN(n.px)&&(n.px=n.x),isNaN(n.py)&&(n.py=n.y);if(a=[],"function"==typeof f)for(e=0;e<u;++e)a[e]=+f.call(this,b[e],e);else for(e=0;e<u;++e)a[e]=f;if(o=[],"function"==typeof d)for(e=0;e<u;++e)o[e]=+d.call(this,b[e],e);else for(e=0;e<u;++e)o[e]=d;if(s=[],"function"==typeof p)for(e=0;e<i;++e)s[e]=+p.call(this,y[e],e);else for(e=0;e<i;++e)s[e]=p;return l.resume()},l.resume=function(){return l.alpha(.1)},l.stop=function(){return l.alpha(0)},l.drag=function(){if(n||(n=uo.behavior.drag().origin(x).on("dragstart.force",ei).on("drag.force",e).on("dragend.force",ri)),!arguments.length)return n;this.on("mouseover.force",ni).on("mouseout.force",ii).call(n)},uo.rebind(l,u,"on")};var gl=20,vl=1,yl=1/0;uo.layout.hierarchy=function(){function t(i){var a,o=[i],s=[];for(i.depth=0;null!=(a=o.pop());)if(s.push(a),(u=r.call(t,a,a.depth))&&(l=u.length)){for(var l,u,c;--l>=0;)o.push(c=u[l]),c.parent=a,c.depth=a.depth+1;n&&(a.value=0),a.children=u}else n&&(a.value=+n.call(t,a,a.depth)||0),delete a.children;return li(i,function(t){var r,i;e&&(r=t.children)&&r.sort(e),n&&(i=t.parent)&&(i.value+=t.value)}),s}var e=hi,r=ui,n=ci;return t.sort=function(r){return arguments.length?(e=r,t):e},t.children=function(e){return arguments.length?(r=e,t):r},t.value=function(e){return arguments.length?(n=e,t):n},t.revalue=function(e){return n&&(si(e,function(t){t.children&&(t.value=0)}),li(e,function(e){var r;e.children||(e.value=+n.call(t,e,e.depth)||0),(r=e.parent)&&(r.value+=e.value)})),e},t},uo.layout.partition=function(){function t(e,r,n,i){var a=e.children;if(e.x=r,e.y=e.depth*i,e.dx=n,e.dy=i,a&&(o=a.length)){var o,s,l,u=-1;for(n=e.value?n/e.value:0;++u<o;)t(s=a[u],r,l=s.value*n,i),r+=l}}function e(t){var r=t.children,n=0;if(r&&(i=r.length))for(var i,a=-1;++a<i;)n=Math.max(n,e(r[a]));return 1+n}function r(r,a){var o=n.call(this,r,a);return t(o[0],0,i[0],i[1]/e(o[0])),o}var n=uo.layout.hierarchy(),i=[1,1];return r.size=function(t){return arguments.length?(i=t,r):i},oi(r,n)},uo.layout.pie=function(){function t(o){var s,l=o.length,u=o.map(function(r,n){return+e.call(t,r,n)}),c=+("function"==typeof n?n.apply(this,arguments):n),h=("function"==typeof i?i.apply(this,arguments):i)-c,f=Math.min(Math.abs(h)/l,+("function"==typeof a?a.apply(this,arguments):a)),d=f*(h<0?-1:1),p=uo.sum(u),m=p?(h-l*d)/p:0,g=uo.range(l),v=[];return null!=r&&g.sort(r===bl?function(t,e){return u[e]-u[t]}:function(t,e){return r(o[t],o[e])}),g.forEach(function(t){v[t]={data:o[t],value:s=u[t],startAngle:c,endAngle:c+=s*m+d,padAngle:f}}),v}var e=Number,r=bl,n=0,i=Bo,a=0;return t.value=function(r){return arguments.length?(e=r,t):e},t.sort=function(e){return arguments.length?(r=e,t):r},t.startAngle=function(e){return arguments.length?(n=e,t):n},t.endAngle=function(e){return arguments.length?(i=e,t):i},t.padAngle=function(e){return arguments.length?(a=e,t):a},t};var bl={};uo.layout.stack=function(){function t(s,l){if(!(f=s.length))return s;var u=s.map(function(r,n){return e.call(t,r,n)}),c=u.map(function(e){return e.map(function(e,r){return[a.call(t,e,r),o.call(t,e,r)]})}),h=r.call(t,c,l);u=uo.permute(u,h),c=uo.permute(c,h);var f,d,p,m,g=n.call(t,c,l),v=u[0].length;for(p=0;p<v;++p)for(i.call(t,u[0][p],m=g[p],c[0][p][1]),d=1;d<f;++d)i.call(t,u[d][p],m+=c[d-1][p][1],c[d][p][1]);return s}var e=x,r=gi,n=vi,i=mi,a=di,o=pi;return t.values=function(r){return arguments.length?(e=r,t):e},t.order=function(e){return arguments.length?(r="function"==typeof e?e:xl.get(e)||gi,t):r},t.offset=function(e){return arguments.length?(n="function"==typeof e?e:_l.get(e)||vi,t):n},t.x=function(e){return arguments.length?(a=e,t):a},t.y=function(e){return arguments.length?(o=e,t):o},t.out=function(e){return arguments.length?(i=e,t):i},t};var xl=uo.map({"inside-out":function(t){var e,r,n=t.length,i=t.map(yi),a=t.map(bi),o=uo.range(n).sort(function(t,e){return i[t]-i[e]}),s=0,l=0,u=[],c=[];for(e=0;e<n;++e)r=o[e],s<l?(s+=a[r],u.push(r)):(l+=a[r],c.push(r));return c.reverse().concat(u)},reverse:function(t){return uo.range(t.length).reverse()},default:gi}),_l=uo.map({silhouette:function(t){var e,r,n,i=t.length,a=t[0].length,o=[],s=0,l=[];for(r=0;r<a;++r){for(e=0,n=0;e<i;e++)n+=t[e][r][1];n>s&&(s=n),o.push(n)}for(r=0;r<a;++r)l[r]=(s-o[r])/2;return l},wiggle:function(t){var e,r,n,i,a,o,s,l,u,c=t.length,h=t[0],f=h.length,d=[];for(d[0]=l=u=0,r=1;r<f;++r){for(e=0,i=0;e<c;++e)i+=t[e][r][1];for(e=0,a=0,s=h[r][0]-h[r-1][0];e<c;++e){for(n=0,o=(t[e][r][1]-t[e][r-1][1])/(2*s);n<e;++n)o+=(t[n][r][1]-t[n][r-1][1])/s;a+=o*t[e][r][1]}d[r]=l-=i?a/i*s:0,l<u&&(u=l)}for(r=0;r<f;++r)d[r]-=u;return d},expand:function(t){var e,r,n,i=t.length,a=t[0].length,o=1/i,s=[];for(r=0;r<a;++r){for(e=0,n=0;e<i;e++)n+=t[e][r][1];if(n)for(e=0;e<i;e++)t[e][r][1]/=n;else for(e=0;e<i;e++)t[e][r][1]=o}for(r=0;r<a;++r)s[r]=0;return s},zero:vi});uo.layout.histogram=function(){function t(t,a){for(var o,s,l=[],u=t.map(r,this),c=n.call(this,u,a),h=i.call(this,c,u,a),a=-1,f=u.length,d=h.length-1,p=e?1:1/f;++a<d;)o=l[a]=[],o.dx=h[a+1]-(o.x=h[a]),o.y=0;if(d>0)for(a=-1;++a<f;)(s=u[a])>=c[0]&&s<=c[1]&&(o=l[uo.bisect(h,s,1,d)-1],o.y+=p,o.push(t[a]));return l}var e=!0,r=Number,n=Mi,i=_i;return t.value=function(e){return arguments.length?(r=e,t):r},t.range=function(e){return arguments.length?(n=Et(e),t):n},t.bins=function(e){return arguments.length?(i="number"==typeof e?function(t){return wi(t,e)}:Et(e),t):i},t.frequency=function(r){return arguments.length?(e=!!r,t):e},t},uo.layout.pack=function(){function t(t,a){var o=r.call(this,t,a),s=o[0],l=i[0],u=i[1],c=null==e?Math.sqrt:"function"==typeof e?e:function(){return e};if(s.x=s.y=0,li(s,function(t){t.r=+c(t.value)}),li(s,Ei),n){var h=n*(e?1:Math.max(2*s.r/l,2*s.r/u))/2;li(s,function(t){t.r+=h}),li(s,Ei),li(s,function(t){t.r-=h})}return Ii(s,l/2,u/2,e?1:1/Math.max(2*s.r/l,2*s.r/u)),o}var e,r=uo.layout.hierarchy().sort(ki),n=0,i=[1,1];return t.size=function(e){return arguments.length?(i=e,t):i},t.radius=function(r){return arguments.length?(e=null==r||"function"==typeof r?r:+r,t):e},t.padding=function(e){return arguments.length?(n=+e,t):n},oi(t,r)},uo.layout.tree=function(){function t(t,i){var c=o.call(this,t,i),h=c[0],f=e(h);if(li(f,r),f.parent.m=-f.z,si(f,n),u)si(h,a);else{var d=h,p=h,m=h;si(h,function(t){t.x<d.x&&(d=t),t.x>p.x&&(p=t),t.depth>m.depth&&(m=t)});var g=s(d,p)/2-d.x,v=l[0]/(p.x+s(p,d)/2+g),y=l[1]/(m.depth||1);si(h,function(t){t.x=(t.x+g)*v,t.y=t.depth*y})}return c}function e(t){for(var e,r={A:null,children:[t]},n=[r];null!=(e=n.pop());)for(var i,a=e.children,o=0,s=a.length;o<s;++o)n.push((a[o]=i={_:a[o],parent:e,children:(i=a[o].children)&&i.slice()||[],A:null,a:null,z:0,m:0,c:0,s:0,t:null,i:o}).a=i);return r.children[0]}function r(t){var e=t.children,r=t.parent.children,n=t.i?r[t.i-1]:null;if(e.length){Fi(t);var a=(e[0].z+e[e.length-1].z)/2;n?(t.z=n.z+s(t._,n._),t.m=t.z-a):t.z=a}else n&&(t.z=n.z+s(t._,n._));t.parent.A=i(t,n,t.parent.A||r[0])}function n(t){t._.x=t.z+t.parent.m,t.m+=t.parent.m}function i(t,e,r){if(e){for(var n,i=t,a=t,o=e,l=i.parent.children[0],u=i.m,c=a.m,h=o.m,f=l.m;o=Oi(o),i=Pi(i),o&&i;)l=Pi(l),a=Oi(a),a.a=t,n=o.z+h-i.z-u+s(o._,i._),n>0&&(Ri(ji(o,t,r),t,n),u+=n,c+=n),h+=o.m,u+=i.m,f+=l.m,c+=a.m;o&&!Oi(a)&&(a.t=o,a.m+=h-c),i&&!Pi(l)&&(l.t=i,l.m+=u-f,r=t)}return r}function a(t){t.x*=l[0],t.y=t.depth*l[1]}var o=uo.layout.hierarchy().sort(null).value(null),s=Di,l=[1,1],u=null;return t.separation=function(e){return arguments.length?(s=e,t):s},t.size=function(e){return arguments.length?(u=null==(l=e)?a:null,t):u?null:l},t.nodeSize=function(e){return arguments.length?(u=null==(l=e)?null:a,t):u?l:null},oi(t,o)},uo.layout.cluster=function(){function t(t,a){var o,s=e.call(this,t,a),l=s[0],u=0;li(l,function(t){var e=t.children;e&&e.length?(t.x=Bi(e),t.y=Ni(e)):(t.x=o?u+=r(t,o):0,t.y=0,o=t)});var c=Ui(l),h=Vi(l),f=c.x-r(c,h)/2,d=h.x+r(h,c)/2;return li(l,i?function(t){t.x=(t.x-l.x)*n[0],t.y=(l.y-t.y)*n[1]}:function(t){t.x=(t.x-f)/(d-f)*n[0],t.y=(1-(l.y?t.y/l.y:1))*n[1]}),s}var e=uo.layout.hierarchy().sort(null).value(null),r=Di,n=[1,1],i=!1;return t.separation=function(e){return arguments.length?(r=e,t):r},t.size=function(e){return arguments.length?(i=null==(n=e),t):i?null:n},t.nodeSize=function(e){return arguments.length?(i=null!=(n=e),t):i?n:null},oi(t,e)},uo.layout.treemap=function(){function t(t,e){for(var r,n,i=-1,a=t.length;++i<a;)n=(r=t[i]).value*(e<0?0:e),r.area=isNaN(n)||n<=0?0:n}function e(r){var a=r.children;if(a&&a.length){var o,s,l,u=h(r),c=[],f=a.slice(),p=1/0,m="slice"===d?u.dx:"dice"===d?u.dy:"slice-dice"===d?1&r.depth?u.dy:u.dx:Math.min(u.dx,u.dy);for(t(f,u.dx*u.dy/r.value),c.area=0;(l=f.length)>0;)c.push(o=f[l-1]),c.area+=o.area,"squarify"!==d||(s=n(c,m))<=p?(f.pop(),p=s):(c.area-=c.pop().area,i(c,m,u,!1),m=Math.min(u.dx,u.dy),c.length=c.area=0,p=1/0);c.length&&(i(c,m,u,!0),c.length=c.area=0),a.forEach(e)}}function r(e){var n=e.children;if(n&&n.length){var a,o=h(e),s=n.slice(),l=[];for(t(s,o.dx*o.dy/e.value),l.area=0;a=s.pop();)l.push(a),l.area+=a.area,null!=a.z&&(i(l,a.z?o.dx:o.dy,o,!s.length),l.length=l.area=0);n.forEach(r)}}function n(t,e){for(var r,n=t.area,i=0,a=1/0,o=-1,s=t.length;++o<s;)(r=t[o].area)&&(r<a&&(a=r),r>i&&(i=r));return n*=n,e*=e,n?Math.max(e*i*p/n,n/(e*a*p)):1/0}function i(t,e,r,n){var i,a=-1,o=t.length,s=r.x,u=r.y,c=e?l(t.area/e):0;if(e==r.dx){for((n||c>r.dy)&&(c=r.dy);++a<o;)i=t[a],i.x=s,i.y=u,i.dy=c,s+=i.dx=Math.min(r.x+r.dx-s,c?l(i.area/c):0);i.z=!0,i.dx+=r.x+r.dx-s,r.y+=c,r.dy-=c}else{for((n||c>r.dx)&&(c=r.dx);++a<o;)i=t[a],i.x=s,i.y=u,i.dx=c,u+=i.dy=Math.min(r.y+r.dy-u,c?l(i.area/c):0);i.z=!1,i.dy+=r.y+r.dy-u,r.x+=c,r.dx-=c}}function a(n){var i=o||s(n),a=i[0];return a.x=a.y=0,a.value?(a.dx=u[0],a.dy=u[1]):a.dx=a.dy=0,o&&s.revalue(a),t([a],a.dx*a.dy/a.value),(o?r:e)(a),f&&(o=i),i}var o,s=uo.layout.hierarchy(),l=Math.round,u=[1,1],c=null,h=Hi,f=!1,d="squarify",p=.5*(1+Math.sqrt(5));return a.size=function(t){return arguments.length?(u=t,a):u},a.padding=function(t){function e(e){var r=t.call(a,e,e.depth);return null==r?Hi(e):qi(e,"number"==typeof r?[r,r,r,r]:r)}function r(e){return qi(e,t)}if(!arguments.length)return c;var n;return h=null==(c=t)?Hi:"function"==(n=typeof t)?e:"number"===n?(t=[t,t,t,t],r):r,a},a.round=function(t){return arguments.length?(l=t?Math.round:Number,a):l!=Number},a.sticky=function(t){return arguments.length?(f=t,o=null,a):f},a.ratio=function(t){return arguments.length?(p=t,a):p},a.mode=function(t){return arguments.length?(d=t+"",a):d},oi(a,s)},uo.random={normal:function(t,e){var r=arguments.length;return r<2&&(e=1),r<1&&(t=0),function(){var r,n,i;do{r=2*Math.random()-1,n=2*Math.random()-1,i=r*r+n*n}while(!i||i>1);return t+e*r*Math.sqrt(-2*Math.log(i)/i)}},logNormal:function(){var t=uo.random.normal.apply(uo,arguments);return function(){return Math.exp(t())}},bates:function(t){var e=uo.random.irwinHall(t);return function(){return e()/t}},irwinHall:function(t){return function(){for(var e=0,r=0;r<t;r++)e+=Math.random();return e}}},uo.scale={};var wl={floor:x,ceil:x};uo.scale.linear=function(){return Ki([0,1],[0,1],_n,!1)};var Ml={s:1,g:1,p:1,r:1,e:1};uo.scale.log=function(){return aa(uo.scale.linear().domain([0,1]),10,!0,[1,10])};var kl=uo.format(".0e"),Al={floor:function(t){return-Math.ceil(-t)},ceil:function(t){return-Math.floor(-t)}};uo.scale.pow=function(){return oa(uo.scale.linear(),1,[0,1])},uo.scale.sqrt=function(){return uo.scale.pow().exponent(.5)},uo.scale.ordinal=function(){return la([],{t:"range",a:[[]]})},uo.scale.category10=function(){return uo.scale.ordinal().range(Tl)},uo.scale.category20=function(){return uo.scale.ordinal().range(Sl)},uo.scale.category20b=function(){return uo.scale.ordinal().range(El)},uo.scale.category20c=function(){return uo.scale.ordinal().range(Ll)};var Tl=[2062260,16744206,2924588,14034728,9725885,9197131,14907330,8355711,12369186,1556175].map(_t),Sl=[2062260,11454440,16744206,16759672,2924588,10018698,14034728,16750742,9725885,12955861,9197131,12885140,14907330,16234194,8355711,13092807,12369186,14408589,1556175,10410725].map(_t),El=[3750777,5395619,7040719,10264286,6519097,9216594,11915115,13556636,9202993,12426809,15186514,15190932,8666169,11356490,14049643,15177372,8077683,10834324,13528509,14589654].map(_t),Ll=[3244733,7057110,10406625,13032431,15095053,16616764,16625259,16634018,3253076,7652470,10607003,13101504,7695281,10394312,12369372,14342891,6513507,9868950,12434877,14277081].map(_t);uo.scale.quantile=function(){return ua([],[])},uo.scale.quantize=function(){return ca(0,1,[0,1])},uo.scale.threshold=function(){return ha([.5],[0,1])},uo.scale.identity=function(){return fa([0,1])},uo.svg={},uo.svg.arc=function(){function t(){var t=Math.max(0,+r.apply(this,arguments)),u=Math.max(0,+n.apply(this,arguments)),c=o.apply(this,arguments)-Vo,h=s.apply(this,arguments)-Vo,f=Math.abs(h-c),d=c>h?0:1;if(u<t&&(p=u,u=t,t=p),f>=Uo)return e(u,d)+(t?e(t,1-d):"")+"Z";var p,m,g,v,y,b,x,_,w,M,k,A,T=0,S=0,E=[];if((v=(+l.apply(this,arguments)||0)/2)&&(g=a===Cl?Math.sqrt(t*t+u*u):+a.apply(this,arguments),d||(S*=-1),u&&(S=nt(g/u*Math.sin(v))),t&&(T=nt(g/t*Math.sin(v)))),u){y=u*Math.cos(c+S),b=u*Math.sin(c+S),x=u*Math.cos(h-S),_=u*Math.sin(h-S);var L=Math.abs(h-c-2*S)<=No?0:1;if(S&&ba(y,b,x,_)===d^L){var C=(c+h)/2;y=u*Math.cos(C),b=u*Math.sin(C),x=_=null}}else y=b=0;if(t){w=t*Math.cos(h-T),M=t*Math.sin(h-T),k=t*Math.cos(c+T),A=t*Math.sin(c+T);var I=Math.abs(c-h+2*T)<=No?0:1;if(T&&ba(w,M,k,A)===1-d^I){var z=(c+h)/2;w=t*Math.cos(z),M=t*Math.sin(z),k=A=null}}else w=M=0;if(f>Fo&&(p=Math.min(Math.abs(u-t)/2,+i.apply(this,arguments)))>.001){m=t<u^d?0:1;var D=p,P=p;if(f<No){var O=null==k?[w,M]:null==x?[y,b]:Or([y,b],[k,A],[x,_],[w,M]),R=y-O[0],F=b-O[1],j=x-O[0],N=_-O[1],B=1/Math.sin(Math.acos((R*j+F*N)/(Math.sqrt(R*R+F*F)*Math.sqrt(j*j+N*N)))/2),U=Math.sqrt(O[0]*O[0]+O[1]*O[1]);P=Math.min(p,(t-U)/(B-1)),D=Math.min(p,(u-U)/(B+1))}if(null!=x){var V=xa(null==k?[w,M]:[k,A],[y,b],u,D,d),H=xa([x,_],[w,M],u,D,d);p===D?E.push("M",V[0],"A",D,",",D," 0 0,",m," ",V[1],"A",u,",",u," 0 ",1-d^ba(V[1][0],V[1][1],H[1][0],H[1][1]),",",d," ",H[1],"A",D,",",D," 0 0,",m," ",H[0]):E.push("M",V[0],"A",D,",",D," 0 1,",m," ",H[0])}else E.push("M",y,",",b);if(null!=k){var q=xa([y,b],[k,A],t,-P,d),G=xa([w,M],null==x?[y,b]:[x,_],t,-P,d);p===P?E.push("L",G[0],"A",P,",",P," 0 0,",m," ",G[1],"A",t,",",t," 0 ",d^ba(G[1][0],G[1][1],q[1][0],q[1][1]),",",1-d," ",q[1],"A",P,",",P," 0 0,",m," ",q[0]):E.push("L",G[0],"A",P,",",P," 0 0,",m," ",q[0])}else E.push("L",w,",",M)}else E.push("M",y,",",b),null!=x&&E.push("A",u,",",u," 0 ",L,",",d," ",x,",",_),E.push("L",w,",",M),null!=k&&E.push("A",t,",",t," 0 ",I,",",1-d," ",k,",",A);return E.push("Z"),E.join("")}function e(t,e){return"M0,"+t+"A"+t+","+t+" 0 1,"+e+" 0,"+-t+"A"+t+","+t+" 0 1,"+e+" 0,"+t}var r=pa,n=ma,i=da,a=Cl,o=ga,s=va,l=ya;return t.innerRadius=function(e){return arguments.length?(r=Et(e),t):r},t.outerRadius=function(e){return arguments.length?(n=Et(e),t):n},t.cornerRadius=function(e){return arguments.length?(i=Et(e),t):i},t.padRadius=function(e){return arguments.length?(a=e==Cl?Cl:Et(e),t):a},t.startAngle=function(e){return arguments.length?(o=Et(e),t):o},t.endAngle=function(e){return arguments.length?(s=Et(e),t):s},t.padAngle=function(e){return arguments.length?(l=Et(e),t):l},t.centroid=function(){var t=(+r.apply(this,arguments)+ +n.apply(this,arguments))/2,e=(+o.apply(this,arguments)+ +s.apply(this,arguments))/2-Vo;return[Math.cos(e)*t,Math.sin(e)*t]},t};var Cl="auto";uo.svg.line=function(){return _a(x)};var Il=uo.map({linear:wa,"linear-closed":Ma,step:ka,"step-before":Aa,"step-after":Ta,basis:za,"basis-open":Da,"basis-closed":Pa,bundle:Oa,cardinal:La,"cardinal-open":Sa,"cardinal-closed":Ea,monotone:Ua});Il.forEach(function(t,e){e.key=t,e.closed=/-closed$/.test(t)});var zl=[0,2/3,1/3,0],Dl=[0,1/3,2/3,0],Pl=[0,1/6,2/3,1/6];uo.svg.line.radial=function(){var t=_a(Va);return t.radius=t.x,delete t.x,t.angle=t.y,delete t.y,t},Aa.reverse=Ta,Ta.reverse=Aa,uo.svg.area=function(){return Ha(x)},uo.svg.area.radial=function(){var t=Ha(Va);return t.radius=t.x,delete t.x,t.innerRadius=t.x0,delete t.x0,t.outerRadius=t.x1,delete t.x1,t.angle=t.y,delete t.y,t.startAngle=t.y0,delete t.y0,t.endAngle=t.y1,delete t.y1,t},uo.svg.chord=function(){function t(t,s){var l=e(this,a,t,s),u=e(this,o,t,s);return"M"+l.p0+n(l.r,l.p1,l.a1-l.a0)+(r(l,u)?i(l.r,l.p1,l.r,l.p0):i(l.r,l.p1,u.r,u.p0)+n(u.r,u.p1,u.a1-u.a0)+i(u.r,u.p1,l.r,l.p0))+"Z"}function e(t,e,r,n){var i=e.call(t,r,n),a=s.call(t,i,n),o=l.call(t,i,n)-Vo,c=u.call(t,i,n)-Vo;return{r:a,a0:o,a1:c,p0:[a*Math.cos(o),a*Math.sin(o)],p1:[a*Math.cos(c),a*Math.sin(c)]}}function r(t,e){return t.a0==e.a0&&t.a1==e.a1}function n(t,e,r){return"A"+t+","+t+" 0 "+ +(r>No)+",1 "+e}function i(t,e,r,n){return"Q 0,0 "+n}var a=xr,o=_r,s=qa,l=ga,u=va;return t.radius=function(e){return arguments.length?(s=Et(e),t):s},t.source=function(e){return arguments.length?(a=Et(e),t):a},t.target=function(e){return arguments.length?(o=Et(e),t):o},t.startAngle=function(e){return arguments.length?(l=Et(e),t):l},t.endAngle=function(e){return arguments.length?(u=Et(e),t):u},t},uo.svg.diagonal=function(){function t(t,i){var a=e.call(this,t,i),o=r.call(this,t,i),s=(a.y+o.y)/2,l=[a,{x:a.x,y:s},{x:o.x,y:s},o];return l=l.map(n),"M"+l[0]+"C"+l[1]+" "+l[2]+" "+l[3]}var e=xr,r=_r,n=Ga;return t.source=function(r){return arguments.length?(e=Et(r),t):e},t.target=function(e){return arguments.length?(r=Et(e),t):r},t.projection=function(e){return arguments.length?(n=e,t):n},t},uo.svg.diagonal.radial=function(){var t=uo.svg.diagonal(),e=Ga,r=t.projection;return t.projection=function(t){return arguments.length?r(Ya(e=t)):e},t},uo.svg.symbol=function(){function t(t,n){return(Ol.get(e.call(this,t,n))||Za)(r.call(this,t,n))}var e=Xa,r=Wa;return t.type=function(r){return arguments.length?(e=Et(r),t):e},t.size=function(e){return arguments.length?(r=Et(e),t):r},t};var Ol=uo.map({circle:Za,cross:function(t){var e=Math.sqrt(t/5)/2;return"M"+-3*e+","+-e+"H"+-e+"V"+-3*e+"H"+e+"V"+-e+"H"+3*e+"V"+e+"H"+e+"V"+3*e+"H"+-e+"V"+e+"H"+-3*e+"Z"},diamond:function(t){var e=Math.sqrt(t/(2*Fl)),r=e*Fl;return"M0,"+-e+"L"+r+",0 0,"+e+" "+-r+",0Z"},square:function(t){var e=Math.sqrt(t)/2;return"M"+-e+","+-e+"L"+e+","+-e+" "+e+","+e+" "+-e+","+e+"Z"},"triangle-down":function(t){var e=Math.sqrt(t/Rl),r=e*Rl/2;return"M0,"+r+"L"+e+","+-r+" "+-e+","+-r+"Z"},"triangle-up":function(t){var e=Math.sqrt(t/Rl),r=e*Rl/2;return"M0,"+-r+"L"+e+","+r+" "+-e+","+r+"Z"}});uo.svg.symbolTypes=Ol.keys();var Rl=Math.sqrt(3),Fl=Math.tan(30*Ho);Lo.transition=function(t){for(var e,r,n=jl||++Vl,i=to(t),a=[],o=Nl||{time:Date.now(),ease:En,delay:0,duration:250},s=-1,l=this.length;++s<l;){a.push(e=[]);for(var u=this[s],c=-1,h=u.length;++c<h;)(r=u[c])&&eo(r,c,i,n,o),e.push(r)}return Ka(a,i,n)},Lo.interrupt=function(t){return this.each(null==t?Bl:Ja(to(t)))};var jl,Nl,Bl=Ja(to()),Ul=[],Vl=0;Ul.call=Lo.call,Ul.empty=Lo.empty,Ul.node=Lo.node,Ul.size=Lo.size,uo.transition=function(t,e){
return t&&t.transition?jl?t.transition(e):t:uo.selection().transition(t)},uo.transition.prototype=Ul,Ul.select=function(t){var e,r,n,i=this.id,a=this.namespace,o=[];t=C(t);for(var s=-1,l=this.length;++s<l;){o.push(e=[]);for(var u=this[s],c=-1,h=u.length;++c<h;)(n=u[c])&&(r=t.call(n,n.__data__,c,s))?("__data__"in n&&(r.__data__=n.__data__),eo(r,c,a,i,n[a][i]),e.push(r)):e.push(null)}return Ka(o,a,i)},Ul.selectAll=function(t){var e,r,n,i,a,o=this.id,s=this.namespace,l=[];t=I(t);for(var u=-1,c=this.length;++u<c;)for(var h=this[u],f=-1,d=h.length;++f<d;)if(n=h[f]){a=n[s][o],r=t.call(n,n.__data__,f,u),l.push(e=[]);for(var p=-1,m=r.length;++p<m;)(i=r[p])&&eo(i,p,s,o,a),e.push(i)}return Ka(l,s,o)},Ul.filter=function(t){var e,r,n,i=[];"function"!=typeof t&&(t=H(t));for(var a=0,o=this.length;a<o;a++){i.push(e=[]);for(var r=this[a],s=0,l=r.length;s<l;s++)(n=r[s])&&t.call(n,n.__data__,s,a)&&e.push(n)}return Ka(i,this.namespace,this.id)},Ul.tween=function(t,e){var r=this.id,n=this.namespace;return arguments.length<2?this.node()[n][r].tween.get(t):G(this,null==e?function(e){e[n][r].tween.remove(t)}:function(i){i[n][r].tween.set(t,e)})},Ul.attr=function(t,e){function r(){this.removeAttribute(s)}function n(){this.removeAttributeNS(s.space,s.local)}function i(t){return null==t?r:(t+="",function(){var e,r=this.getAttribute(s);return r!==t&&(e=o(r,t),function(t){this.setAttribute(s,e(t))})})}function a(t){return null==t?n:(t+="",function(){var e,r=this.getAttributeNS(s.space,s.local);return r!==t&&(e=o(r,t),function(t){this.setAttributeNS(s.space,s.local,e(t))})})}if(arguments.length<2){for(e in t)this.attr(e,t[e]);return this}var o="transform"==t?Zn:_n,s=uo.ns.qualify(t);return Qa(this,"attr."+t,e,s.local?a:i)},Ul.attrTween=function(t,e){function r(t,r){var n=e.call(this,t,r,this.getAttribute(i));return n&&function(t){this.setAttribute(i,n(t))}}function n(t,r){var n=e.call(this,t,r,this.getAttributeNS(i.space,i.local));return n&&function(t){this.setAttributeNS(i.space,i.local,n(t))}}var i=uo.ns.qualify(t);return this.tween("attr."+t,i.local?n:r)},Ul.style=function(t,e,r){function i(){this.style.removeProperty(t)}function a(e){return null==e?i:(e+="",function(){var i,a=n(this).getComputedStyle(this,null).getPropertyValue(t);return a!==e&&(i=_n(a,e),function(e){this.style.setProperty(t,i(e),r)})})}var o=arguments.length;if(o<3){if("string"!=typeof t){o<2&&(e="");for(r in t)this.style(r,t[r],e);return this}r=""}return Qa(this,"style."+t,e,a)},Ul.styleTween=function(t,e,r){function i(i,a){var o=e.call(this,i,a,n(this).getComputedStyle(this,null).getPropertyValue(t));return o&&function(e){this.style.setProperty(t,o(e),r)}}return arguments.length<3&&(r=""),this.tween("style."+t,i)},Ul.text=function(t){return Qa(this,"text",t,$a)},Ul.remove=function(){var t=this.namespace;return this.each("end.transition",function(){var e;this[t].count<2&&(e=this.parentNode)&&e.removeChild(this)})},Ul.ease=function(t){var e=this.id,r=this.namespace;return arguments.length<1?this.node()[r][e].ease:("function"!=typeof t&&(t=uo.ease.apply(uo,arguments)),G(this,function(n){n[r][e].ease=t}))},Ul.delay=function(t){var e=this.id,r=this.namespace;return arguments.length<1?this.node()[r][e].delay:G(this,"function"==typeof t?function(n,i,a){n[r][e].delay=+t.call(n,n.__data__,i,a)}:(t=+t,function(n){n[r][e].delay=t}))},Ul.duration=function(t){var e=this.id,r=this.namespace;return arguments.length<1?this.node()[r][e].duration:G(this,"function"==typeof t?function(n,i,a){n[r][e].duration=Math.max(1,t.call(n,n.__data__,i,a))}:(t=Math.max(1,t),function(n){n[r][e].duration=t}))},Ul.each=function(t,e){var r=this.id,n=this.namespace;if(arguments.length<2){var i=Nl,a=jl;try{jl=r,G(this,function(e,i,a){Nl=e[n][r],t.call(e,e.__data__,i,a)})}finally{Nl=i,jl=a}}else G(this,function(i){var a=i[n][r];(a.event||(a.event=uo.dispatch("start","end","interrupt"))).on(t,e)});return this},Ul.transition=function(){for(var t,e,r,n,i=this.id,a=++Vl,o=this.namespace,s=[],l=0,u=this.length;l<u;l++){s.push(t=[]);for(var e=this[l],c=0,h=e.length;c<h;c++)(r=e[c])&&(n=r[o][i],eo(r,c,o,a,{time:n.time,ease:n.ease,delay:n.delay+n.duration,duration:n.duration})),t.push(r)}return Ka(s,o,a)},uo.svg.axis=function(){function t(t){t.each(function(){var t,u=uo.select(this),c=this.__chart__||r,h=this.__chart__=r.copy(),f=null==l?h.ticks?h.ticks.apply(h,s):h.domain():l,d=null==e?h.tickFormat?h.tickFormat.apply(h,s):x:e,p=u.selectAll(".tick").data(f,h),m=p.enter().insert("g",".domain").attr("class","tick").style("opacity",Fo),g=uo.transition(p.exit()).style("opacity",Fo).remove(),v=uo.transition(p.order()).style("opacity",1),y=Math.max(i,0)+o,b=Yi(h),_=u.selectAll(".domain").data([0]),w=(_.enter().append("path").attr("class","domain"),uo.transition(_));m.append("line"),m.append("text");var M,k,A,T,S=m.select("line"),E=v.select("line"),L=p.select("text").text(d),C=m.select("text"),I=v.select("text"),z="top"===n||"left"===n?-1:1;if("bottom"===n||"top"===n?(t=ro,M="x",A="y",k="x2",T="y2",L.attr("dy",z<0?"0em":".71em").style("text-anchor","middle"),w.attr("d","M"+b[0]+","+z*a+"V0H"+b[1]+"V"+z*a)):(t=no,M="y",A="x",k="y2",T="x2",L.attr("dy",".32em").style("text-anchor",z<0?"end":"start"),w.attr("d","M"+z*a+","+b[0]+"H0V"+b[1]+"H"+z*a)),S.attr(T,z*i),C.attr(A,z*y),E.attr(k,0).attr(T,z*i),I.attr(M,0).attr(A,z*y),h.rangeBand){var D=h,P=D.rangeBand()/2;c=h=function(t){return D(t)+P}}else c.rangeBand?c=h:g.call(t,h,c);m.call(t,c,h),v.call(t,h,h)})}var e,r=uo.scale.linear(),n=Hl,i=6,a=6,o=3,s=[10],l=null;return t.scale=function(e){return arguments.length?(r=e,t):r},t.orient=function(e){return arguments.length?(n=e in ql?e+"":Hl,t):n},t.ticks=function(){return arguments.length?(s=ho(arguments),t):s},t.tickValues=function(e){return arguments.length?(l=e,t):l},t.tickFormat=function(r){return arguments.length?(e=r,t):e},t.tickSize=function(e){var r=arguments.length;return r?(i=+e,a=+arguments[r-1],t):i},t.innerTickSize=function(e){return arguments.length?(i=+e,t):i},t.outerTickSize=function(e){return arguments.length?(a=+e,t):a},t.tickPadding=function(e){return arguments.length?(o=+e,t):o},t.tickSubdivide=function(){return arguments.length&&t},t};var Hl="bottom",ql={top:1,right:1,bottom:1,left:1};uo.svg.brush=function(){function t(n){n.each(function(){var n=uo.select(this).style("pointer-events","all").style("-webkit-tap-highlight-color","rgba(0,0,0,0)").on("mousedown.brush",a).on("touchstart.brush",a),o=n.selectAll(".background").data([0]);o.enter().append("rect").attr("class","background").style("visibility","hidden").style("cursor","crosshair"),n.selectAll(".extent").data([0]).enter().append("rect").attr("class","extent").style("cursor","move");var s=n.selectAll(".resize").data(m,x);s.exit().remove(),s.enter().append("g").attr("class",function(t){return"resize "+t}).style("cursor",function(t){return Gl[t]}).append("rect").attr("x",function(t){return/[ew]$/.test(t)?-3:null}).attr("y",function(t){return/^[ns]/.test(t)?-3:null}).attr("width",6).attr("height",6).style("visibility","hidden"),s.style("display",t.empty()?"none":null);var l,h=uo.transition(n),f=uo.transition(o);u&&(l=Yi(u),f.attr("x",l[0]).attr("width",l[1]-l[0]),r(h)),c&&(l=Yi(c),f.attr("y",l[0]).attr("height",l[1]-l[0]),i(h)),e(h)})}function e(t){t.selectAll(".resize").attr("transform",function(t){return"translate("+h[+/e$/.test(t)]+","+f[+/^s/.test(t)]+")"})}function r(t){t.select(".extent").attr("x",h[0]),t.selectAll(".extent,.n>rect,.s>rect").attr("width",h[1]-h[0])}function i(t){t.select(".extent").attr("y",f[0]),t.selectAll(".extent,.e>rect,.w>rect").attr("height",f[1]-f[0])}function a(){function a(){32==uo.event.keyCode&&(L||(b=null,I[0]-=h[1],I[1]-=f[1],L=2),T())}function m(){32==uo.event.keyCode&&2==L&&(I[0]+=h[1],I[1]+=f[1],L=0,T())}function g(){var t=uo.mouse(_),n=!1;x&&(t[0]+=x[0],t[1]+=x[1]),L||(uo.event.altKey?(b||(b=[(h[0]+h[1])/2,(f[0]+f[1])/2]),I[0]=h[+(t[0]<b[0])],I[1]=f[+(t[1]<b[1])]):b=null),S&&v(t,u,0)&&(r(k),n=!0),E&&v(t,c,1)&&(i(k),n=!0),n&&(e(k),M({type:"brush",mode:L?"move":"resize"}))}function v(t,e,r){var n,i,a=Yi(e),l=a[0],u=a[1],c=I[r],m=r?f:h,g=m[1]-m[0];if(L&&(l-=c,u-=g+c),n=(r?p:d)?Math.max(l,Math.min(u,t[r])):t[r],L?i=(n+=c)+g:(b&&(c=Math.max(l,Math.min(u,2*b[r]-n))),c<n?(i=n,n=c):i=c),m[0]!=n||m[1]!=i)return r?s=null:o=null,m[0]=n,m[1]=i,!0}function y(){g(),k.style("pointer-events","all").selectAll(".resize").style("display",t.empty()?"none":null),uo.select("body").style("cursor",null),z.on("mousemove.brush",null).on("mouseup.brush",null).on("touchmove.brush",null).on("touchend.brush",null).on("keydown.brush",null).on("keyup.brush",null),C(),M({type:"brushend"})}var b,x,_=this,w=uo.select(uo.event.target),M=l.of(_,arguments),k=uo.select(_),A=w.datum(),S=!/^(n|s)$/.test(A)&&u,E=!/^(e|w)$/.test(A)&&c,L=w.classed("extent"),C=K(_),I=uo.mouse(_),z=uo.select(n(_)).on("keydown.brush",a).on("keyup.brush",m);if(uo.event.changedTouches?z.on("touchmove.brush",g).on("touchend.brush",y):z.on("mousemove.brush",g).on("mouseup.brush",y),k.interrupt().selectAll("*").interrupt(),L)I[0]=h[0]-I[0],I[1]=f[0]-I[1];else if(A){var D=+/w$/.test(A),P=+/^n/.test(A);x=[h[1-D]-I[0],f[1-P]-I[1]],I[0]=h[D],I[1]=f[P]}else uo.event.altKey&&(b=I.slice());k.style("pointer-events","none").selectAll(".resize").style("display",null),uo.select("body").style("cursor",w.style("cursor")),M({type:"brushstart"}),g()}var o,s,l=E(t,"brushstart","brush","brushend"),u=null,c=null,h=[0,0],f=[0,0],d=!0,p=!0,m=Yl[0];return t.event=function(t){t.each(function(){var t=l.of(this,arguments),e={x:h,y:f,i:o,j:s},r=this.__chart__||e;this.__chart__=e,jl?uo.select(this).transition().each("start.brush",function(){o=r.i,s=r.j,h=r.x,f=r.y,t({type:"brushstart"})}).tween("brush:brush",function(){var r=wn(h,e.x),n=wn(f,e.y);return o=s=null,function(i){h=e.x=r(i),f=e.y=n(i),t({type:"brush",mode:"resize"})}}).each("end.brush",function(){o=e.i,s=e.j,t({type:"brush",mode:"resize"}),t({type:"brushend"})}):(t({type:"brushstart"}),t({type:"brush",mode:"resize"}),t({type:"brushend"}))})},t.x=function(e){return arguments.length?(u=e,m=Yl[!u<<1|!c],t):u},t.y=function(e){return arguments.length?(c=e,m=Yl[!u<<1|!c],t):c},t.clamp=function(e){return arguments.length?(u&&c?(d=!!e[0],p=!!e[1]):u?d=!!e:c&&(p=!!e),t):u&&c?[d,p]:u?d:c?p:null},t.extent=function(e){var r,n,i,a,l;return arguments.length?(u&&(r=e[0],n=e[1],c&&(r=r[0],n=n[0]),o=[r,n],u.invert&&(r=u(r),n=u(n)),n<r&&(l=r,r=n,n=l),r==h[0]&&n==h[1]||(h=[r,n])),c&&(i=e[0],a=e[1],u&&(i=i[1],a=a[1]),s=[i,a],c.invert&&(i=c(i),a=c(a)),a<i&&(l=i,i=a,a=l),i==f[0]&&a==f[1]||(f=[i,a])),t):(u&&(o?(r=o[0],n=o[1]):(r=h[0],n=h[1],u.invert&&(r=u.invert(r),n=u.invert(n)),n<r&&(l=r,r=n,n=l))),c&&(s?(i=s[0],a=s[1]):(i=f[0],a=f[1],c.invert&&(i=c.invert(i),a=c.invert(a)),a<i&&(l=i,i=a,a=l))),u&&c?[[r,i],[n,a]]:u?[r,n]:c&&[i,a])},t.clear=function(){return t.empty()||(h=[0,0],f=[0,0],o=s=null),t},t.empty=function(){return!!u&&h[0]==h[1]||!!c&&f[0]==f[1]},uo.rebind(t,l,"on")};var Gl={n:"ns-resize",e:"ew-resize",s:"ns-resize",w:"ew-resize",nw:"nwse-resize",ne:"nesw-resize",se:"nwse-resize",sw:"nesw-resize"},Yl=[["n","e","s","w","nw","ne","se","sw"],["e","w"],["n","s"],[]],Wl=fs.format=ys.timeFormat,Xl=Wl.utc,Zl=Xl("%Y-%m-%dT%H:%M:%S.%LZ");Wl.iso=Date.prototype.toISOString&&+new Date("2000-01-01T00:00:00.000Z")?io:Zl,io.parse=function(t){var e=new Date(t);return isNaN(e)?null:e},io.toString=Zl.toString,fs.second=Vt(function(t){return new ds(1e3*Math.floor(t/1e3))},function(t,e){t.setTime(t.getTime()+1e3*Math.floor(e))},function(t){return t.getSeconds()}),fs.seconds=fs.second.range,fs.seconds.utc=fs.second.utc.range,fs.minute=Vt(function(t){return new ds(6e4*Math.floor(t/6e4))},function(t,e){t.setTime(t.getTime()+6e4*Math.floor(e))},function(t){return t.getMinutes()}),fs.minutes=fs.minute.range,fs.minutes.utc=fs.minute.utc.range,fs.hour=Vt(function(t){var e=t.getTimezoneOffset()/60;return new ds(36e5*(Math.floor(t/36e5-e)+e))},function(t,e){t.setTime(t.getTime()+36e5*Math.floor(e))},function(t){return t.getHours()}),fs.hours=fs.hour.range,fs.hours.utc=fs.hour.utc.range,fs.month=Vt(function(t){return t=fs.day(t),t.setDate(1),t},function(t,e){t.setMonth(t.getMonth()+e)},function(t){return t.getMonth()}),fs.months=fs.month.range,fs.months.utc=fs.month.utc.range;var Jl=[1e3,5e3,15e3,3e4,6e4,3e5,9e5,18e5,36e5,108e5,216e5,432e5,864e5,1728e5,6048e5,2592e6,7776e6,31536e6],Kl=[[fs.second,1],[fs.second,5],[fs.second,15],[fs.second,30],[fs.minute,1],[fs.minute,5],[fs.minute,15],[fs.minute,30],[fs.hour,1],[fs.hour,3],[fs.hour,6],[fs.hour,12],[fs.day,1],[fs.day,2],[fs.week,1],[fs.month,1],[fs.month,3],[fs.year,1]],Ql=Wl.multi([[".%L",function(t){return t.getMilliseconds()}],[":%S",function(t){return t.getSeconds()}],["%I:%M",function(t){return t.getMinutes()}],["%I %p",function(t){return t.getHours()}],["%a %d",function(t){return t.getDay()&&1!=t.getDate()}],["%b %d",function(t){return 1!=t.getDate()}],["%B",function(t){return t.getMonth()}],["%Y",Ie]]),$l={range:function(t,e,r){return uo.range(Math.ceil(t/r)*r,+e,r).map(oo)},floor:x,ceil:x};Kl.year=fs.year,fs.scale=function(){return ao(uo.scale.linear(),Kl,Ql)};var tu=Kl.map(function(t){return[t[0].utc,t[1]]}),eu=Xl.multi([[".%L",function(t){return t.getUTCMilliseconds()}],[":%S",function(t){return t.getUTCSeconds()}],["%I:%M",function(t){return t.getUTCMinutes()}],["%I %p",function(t){return t.getUTCHours()}],["%a %d",function(t){return t.getUTCDay()&&1!=t.getUTCDate()}],["%b %d",function(t){return 1!=t.getUTCDate()}],["%B",function(t){return t.getUTCMonth()}],["%Y",Ie]]);tu.year=fs.year.utc,fs.scale.utc=function(){return ao(uo.scale.linear(),tu,eu)},uo.text=Lt(function(t){return t.responseText}),uo.json=function(t,e){return Ct(t,"application/json",so,e)},uo.html=function(t,e){return Ct(t,"text/html",lo,e)},uo.xml=Lt(function(t){return t.responseXML}),"function"==typeof t&&t.amd?(this.d3=uo,t(uo)):"object"==typeof r&&r.exports?r.exports=uo:this.d3=uo}()},{}],123:[function(t,e,r){"use strict";function n(t,e){this.point=t,this.index=e}function i(t,e){for(var r=t.point,n=e.point,i=r.length,a=0;a<i;++a){var o=n[a]-r[a];if(o)return o}return 0}function a(t,e,r){if(1===t)return r?[[-1,0]]:[];var n=e.map(function(t,e){return[t[0],e]});n.sort(function(t,e){return t[0]-e[0]});for(var i=new Array(t-1),a=1;a<t;++a){var o=n[a-1],s=n[a];i[a-1]=[o[1],s[1]]}return r&&i.push([-1,i[0][1]],[i[t-1][1],-1]),i}function o(t,e){var r=t.length;if(0===r)return[];var o=t[0].length;if(o<1)return[];if(1===o)return a(r,t,e);for(var u=new Array(r),c=1,h=0;h<r;++h){for(var f=t[h],d=new Array(o+1),p=0,m=0;m<o;++m){var g=f[m];d[m]=g,p+=g*g}d[o]=p,u[h]=new n(d,h),c=Math.max(p,c)}l(u,i),r=u.length;for(var v=new Array(r+o+1),y=new Array(r+o+1),b=(o+1)*(o+1)*c,x=new Array(o+1),h=0;h<=o;++h)x[h]=0;x[o]=b,v[0]=x.slice(),y[0]=-1;for(var h=0;h<=o;++h){var d=x.slice();d[h]=1,v[h+1]=d,y[h+1]=-1}for(var h=0;h<r;++h){var _=u[h];v[h+o+1]=_.point,y[h+o+1]=_.index}var w=s(v,!1);if(w=e?w.filter(function(t){for(var e=0,r=0;r<=o;++r){var n=y[t[r]];if(n<0&&++e>=2)return!1;t[r]=n}return!0}):w.filter(function(t){for(var e=0;e<=o;++e){var r=y[t[e]];if(r<0)return!1;t[e]=r}return!0}),1&o)for(var h=0;h<w.length;++h){var _=w[h],d=_[0];_[0]=_[1],_[1]=d}return w}var s=t("incremental-convex-hull"),l=t("uniq");e.exports=o},{"incremental-convex-hull":290,uniq:543}],124:[function(t,e,r){(function(t){function r(t,e){return d[0]=t,d[1]=e,f[0]}function n(t){return f[0]=t,d[0]}function i(t){return f[0]=t,d[1]}function a(t,e){return d[1]=t,d[0]=e,f[0]}function o(t){return f[0]=t,d[1]}function s(t){return f[0]=t,d[0]}function l(t,e){return p.writeUInt32LE(t,0,!0),p.writeUInt32LE(e,4,!0),p.readDoubleLE(0,!0)}function u(t){return p.writeDoubleLE(t,0,!0),p.readUInt32LE(0,!0)}function c(t){return p.writeDoubleLE(t,0,!0),p.readUInt32LE(4,!0)}var h=!1;if("undefined"!=typeof Float64Array){var f=new Float64Array(1),d=new Uint32Array(f.buffer);f[0]=1,h=!0,1072693248===d[1]?(e.exports=function(t){return f[0]=t,[d[0],d[1]]},e.exports.pack=r,e.exports.lo=n,e.exports.hi=i):1072693248===d[0]?(e.exports=function(t){return f[0]=t,[d[1],d[0]]},e.exports.pack=a,e.exports.lo=o,e.exports.hi=s):h=!1}if(!h){var p=new t(8);e.exports=function(t){return p.writeDoubleLE(t,0,!0),[p.readUInt32LE(0,!0),p.readUInt32LE(4,!0)]},e.exports.pack=l,e.exports.lo=u,e.exports.hi=c}e.exports.sign=function(t){return e.exports.hi(t)>>>31},e.exports.exponent=function(t){return(e.exports.hi(t)<<1>>>21)-1023},e.exports.fraction=function(t){var r=e.exports.lo(t),n=e.exports.hi(t),i=1048575&n;return 2146435072&n&&(i+=1<<20),[r,i]},e.exports.denormalized=function(t){return!(2146435072&e.exports.hi(t))}}).call(this,t("buffer").Buffer)},{buffer:77}],125:[function(t,e,r){"use strict";function n(t,e,r){var i=0|t[r];if(i<=0)return[];var a,o=new Array(i);if(r===t.length-1)for(a=0;a<i;++a)o[a]=e;else for(a=0;a<i;++a)o[a]=n(t,e,r+1);return o}function i(t,e){var r,n;for(r=new Array(t),n=0;n<t;++n)r[n]=e;return r}function a(t,e){switch(void 0===e&&(e=0),typeof t){case"number":if(t>0)return i(0|t,e);break;case"object":if("number"==typeof t.length)return n(t,e,0)}return[]}e.exports=a},{}],126:[function(t,e,r){"use strict";function n(t,e,r){r=r||2;var n=e&&e.length,a=n?e[0]*r:t.length,s=i(t,0,a,r,!0),l=[];if(!s)return l;var u,c,f,d,p,m,g;if(n&&(s=h(t,e,s,r)),t.length>80*r){u=f=t[0],c=d=t[1];for(var v=r;v<a;v+=r)p=t[v],m=t[v+1],p<u&&(u=p),m<c&&(c=m),p>f&&(f=p),m>d&&(d=m);g=Math.max(f-u,d-c)}return o(s,l,r,u,c,g),l}function i(t,e,r,n,i){var a,o;if(i===I(t,e,r,n)>0)for(a=e;a<r;a+=n)o=E(a,t[a],t[a+1],o);else for(a=r-n;a>=e;a-=n)o=E(a,t[a],t[a+1],o);return o&&w(o,o.next)&&(L(o),o=o.next),o}function a(t,e){if(!t)return t;e||(e=t);var r,n=t;do{if(r=!1,n.steiner||!w(n,n.next)&&0!==_(n.prev,n,n.next))n=n.next;else{if(L(n),(n=e=n.prev)===n.next)return null;r=!0}}while(r||n!==e);return e}function o(t,e,r,n,i,h,f){if(t){!f&&h&&m(t,n,i,h);for(var d,p,g=t;t.prev!==t.next;)if(d=t.prev,p=t.next,h?l(t,n,i,h):s(t))e.push(d.i/r),e.push(t.i/r),e.push(p.i/r),L(t),t=p.next,g=p.next;else if((t=p)===g){f?1===f?(t=u(t,e,r),o(t,e,r,n,i,h,2)):2===f&&c(t,e,r,n,i,h):o(a(t),e,r,n,i,h,1);break}}}function s(t){var e=t.prev,r=t,n=t.next;if(_(e,r,n)>=0)return!1;for(var i=t.next.next;i!==t.prev;){if(b(e.x,e.y,r.x,r.y,n.x,n.y,i.x,i.y)&&_(i.prev,i,i.next)>=0)return!1;i=i.next}return!0}function l(t,e,r,n){var i=t.prev,a=t,o=t.next;if(_(i,a,o)>=0)return!1;for(var s=i.x<a.x?i.x<o.x?i.x:o.x:a.x<o.x?a.x:o.x,l=i.y<a.y?i.y<o.y?i.y:o.y:a.y<o.y?a.y:o.y,u=i.x>a.x?i.x>o.x?i.x:o.x:a.x>o.x?a.x:o.x,c=i.y>a.y?i.y>o.y?i.y:o.y:a.y>o.y?a.y:o.y,h=v(s,l,e,r,n),f=v(u,c,e,r,n),d=t.nextZ;d&&d.z<=f;){if(d!==t.prev&&d!==t.next&&b(i.x,i.y,a.x,a.y,o.x,o.y,d.x,d.y)&&_(d.prev,d,d.next)>=0)return!1;d=d.nextZ}for(d=t.prevZ;d&&d.z>=h;){if(d!==t.prev&&d!==t.next&&b(i.x,i.y,a.x,a.y,o.x,o.y,d.x,d.y)&&_(d.prev,d,d.next)>=0)return!1;d=d.prevZ}return!0}function u(t,e,r){var n=t;do{var i=n.prev,a=n.next.next;!w(i,a)&&M(i,n,n.next,a)&&A(i,a)&&A(a,i)&&(e.push(i.i/r),e.push(n.i/r),e.push(a.i/r),L(n),L(n.next),n=t=a),n=n.next}while(n!==t);return n}function c(t,e,r,n,i,s){var l=t;do{for(var u=l.next.next;u!==l.prev;){if(l.i!==u.i&&x(l,u)){var c=S(l,u);return l=a(l,l.next),c=a(c,c.next),o(l,e,r,n,i,s),void o(c,e,r,n,i,s)}u=u.next}l=l.next}while(l!==t)}function h(t,e,r,n){var o,s,l,u,c,h=[];for(o=0,s=e.length;o<s;o++)l=e[o]*n,u=o<s-1?e[o+1]*n:t.length,c=i(t,l,u,n,!1),c===c.next&&(c.steiner=!0),h.push(y(c));for(h.sort(f),o=0;o<h.length;o++)d(h[o],r),r=a(r,r.next);return r}function f(t,e){return t.x-e.x}function d(t,e){if(e=p(t,e)){var r=S(e,t);a(r,r.next)}}function p(t,e){var r,n=e,i=t.x,a=t.y,o=-1/0;do{if(a<=n.y&&a>=n.next.y){var s=n.x+(a-n.y)*(n.next.x-n.x)/(n.next.y-n.y);if(s<=i&&s>o){if(o=s,s===i){if(a===n.y)return n;if(a===n.next.y)return n.next}r=n.x<n.next.x?n:n.next}}n=n.next}while(n!==e);if(!r)return null;if(i===o)return r.prev;var l,u=r,c=r.x,h=r.y,f=1/0;for(n=r.next;n!==u;)i>=n.x&&n.x>=c&&b(a<h?i:o,a,c,h,a<h?o:i,a,n.x,n.y)&&((l=Math.abs(a-n.y)/(i-n.x))<f||l===f&&n.x>r.x)&&A(n,t)&&(r=n,f=l),n=n.next;return r}function m(t,e,r,n){var i=t;do{null===i.z&&(i.z=v(i.x,i.y,e,r,n)),i.prevZ=i.prev,i.nextZ=i.next,i=i.next}while(i!==t);i.prevZ.nextZ=null,i.prevZ=null,g(i)}function g(t){var e,r,n,i,a,o,s,l,u=1;do{for(r=t,t=null,a=null,o=0;r;){for(o++,n=r,s=0,e=0;e<u&&(s++,n=n.nextZ);e++);for(l=u;s>0||l>0&&n;)0===s?(i=n,n=n.nextZ,l--):0!==l&&n?r.z<=n.z?(i=r,r=r.nextZ,s--):(i=n,n=n.nextZ,l--):(i=r,r=r.nextZ,s--),a?a.nextZ=i:t=i,i.prevZ=a,a=i;r=n}a.nextZ=null,u*=2}while(o>1);return t}function v(t,e,r,n,i){return t=32767*(t-r)/i,e=32767*(e-n)/i,t=16711935&(t|t<<8),t=252645135&(t|t<<4),t=858993459&(t|t<<2),t=1431655765&(t|t<<1),e=16711935&(e|e<<8),e=252645135&(e|e<<4),e=858993459&(e|e<<2),e=1431655765&(e|e<<1),t|e<<1}function y(t){var e=t,r=t;do{e.x<r.x&&(r=e),e=e.next}while(e!==t);return r}function b(t,e,r,n,i,a,o,s){return(i-o)*(e-s)-(t-o)*(a-s)>=0&&(t-o)*(n-s)-(r-o)*(e-s)>=0&&(r-o)*(a-s)-(i-o)*(n-s)>=0}function x(t,e){return t.next.i!==e.i&&t.prev.i!==e.i&&!k(t,e)&&A(t,e)&&A(e,t)&&T(t,e)}function _(t,e,r){return(e.y-t.y)*(r.x-e.x)-(e.x-t.x)*(r.y-e.y)}function w(t,e){return t.x===e.x&&t.y===e.y}function M(t,e,r,n){return!!(w(t,e)&&w(r,n)||w(t,n)&&w(r,e))||_(t,e,r)>0!=_(t,e,n)>0&&_(r,n,t)>0!=_(r,n,e)>0}function k(t,e){var r=t;do{if(r.i!==t.i&&r.next.i!==t.i&&r.i!==e.i&&r.next.i!==e.i&&M(r,r.next,t,e))return!0;r=r.next}while(r!==t);return!1}function A(t,e){return _(t.prev,t,t.next)<0?_(t,e,t.next)>=0&&_(t,t.prev,e)>=0:_(t,e,t.prev)<0||_(t,t.next,e)<0}function T(t,e){var r=t,n=!1,i=(t.x+e.x)/2,a=(t.y+e.y)/2;do{r.y>a!=r.next.y>a&&i<(r.next.x-r.x)*(a-r.y)/(r.next.y-r.y)+r.x&&(n=!n),r=r.next}while(r!==t);return n}function S(t,e){var r=new C(t.i,t.x,t.y),n=new C(e.i,e.x,e.y),i=t.next,a=e.prev;return t.next=e,e.prev=t,r.next=i,i.prev=r,n.next=r,r.prev=n,a.next=n,n.prev=a,n}function E(t,e,r,n){var i=new C(t,e,r);return n?(i.next=n.next,i.prev=n,n.next.prev=i,n.next=i):(i.prev=i,i.next=i),i}function L(t){t.next.prev=t.prev,t.prev.next=t.next,t.prevZ&&(t.prevZ.nextZ=t.nextZ),t.nextZ&&(t.nextZ.prevZ=t.prevZ)}function C(t,e,r){this.i=t,this.x=e,this.y=r,this.prev=null,this.next=null,this.z=null,this.prevZ=null,this.nextZ=null,this.steiner=!1}function I(t,e,r,n){for(var i=0,a=e,o=r-n;a<r;a+=n)i+=(t[o]-t[a])*(t[a+1]+t[o+1]),o=a;return i}e.exports=n,n.deviation=function(t,e,r,n){var i=e&&e.length,a=i?e[0]*r:t.length,o=Math.abs(I(t,0,a,r));if(i)for(var s=0,l=e.length;s<l;s++){var u=e[s]*r,c=s<l-1?e[s+1]*r:t.length;o-=Math.abs(I(t,u,c,r))}var h=0;for(s=0;s<n.length;s+=3){var f=n[s]*r,d=n[s+1]*r,p=n[s+2]*r;h+=Math.abs((t[f]-t[p])*(t[d+1]-t[f+1])-(t[f]-t[d])*(t[p+1]-t[f+1]))}return 0===o&&0===h?0:Math.abs((h-o)/o)},n.flatten=function(t){for(var e=t[0][0].length,r={vertices:[],holes:[],dimensions:e},n=0,i=0;i<t.length;i++){for(var a=0;a<t[i].length;a++)for(var o=0;o<e;o++)r.vertices.push(t[i][a][o]);i>0&&(n+=t[i-1].length,r.holes.push(n))}return r}},{}],127:[function(t,e,r){"use strict";function n(t,e){var r=t.length;if("number"!=typeof e){e=0;for(var n=0;n<r;++n){var a=t[n];e=Math.max(e,a[0],a[1])}e=1+(0|e)}e|=0;for(var o=new Array(e),n=0;n<e;++n)o[n]=[];for(var n=0;n<r;++n){var a=t[n];o[a[0]].push(a[1]),o[a[1]].push(a[0])}for(var s=0;s<e;++s)i(o[s],function(t,e){return t-e});return o}e.exports=n;var i=t("uniq")},{uniq:543}],128:[function(e,r,n){(function(i,a){!function(e,i){"object"==typeof n&&void 0!==r?r.exports=i():"function"==typeof t&&t.amd?t(i):e.ES6Promise=i()}(this,function(){"use strict";function t(t){return"function"==typeof t||"object"==typeof t&&null!==t}function r(t){return"function"==typeof t}function n(t){G=t}function o(t){Y=t}function s(){return function(){q(u)}}function l(){var t=setTimeout;return function(){return t(u,1)}}function u(){for(var t=0;t<H;t+=2){(0,Q[t])(Q[t+1]),Q[t]=void 0,Q[t+1]=void 0}H=0}function c(t,e){var r=arguments,n=this,i=new this.constructor(f);void 0===i[tt]&&I(i);var a=n._state;return a?function(){var t=r[a-1];Y(function(){return E(a,i,t,n._result)})}():k(n,i,t,e),i}function h(t){var e=this;if(t&&"object"==typeof t&&t.constructor===e)return t;var r=new e(f);return x(r,t),r}function f(){}function d(){return new TypeError("You cannot resolve a promise with itself")}function p(){return new TypeError("A promises callback cannot return that same promise.")}function m(t){try{return t.then}catch(t){return it.error=t,it}}function g(t,e,r,n){try{t.call(e,r,n)}catch(t){return t}}function v(t,e,r){Y(function(t){var n=!1,i=g(r,e,function(r){n||(n=!0,e!==r?x(t,r):w(t,r))},function(e){n||(n=!0,M(t,e))},"Settle: "+(t._label||" unknown promise"));!n&&i&&(n=!0,M(t,i))},t)}function y(t,e){e._state===rt?w(t,e._result):e._state===nt?M(t,e._result):k(e,void 0,function(e){return x(t,e)},function(e){return M(t,e)})}function b(t,e,n){e.constructor===t.constructor&&n===c&&e.constructor.resolve===h?y(t,e):n===it?M(t,it.error):void 0===n?w(t,e):r(n)?v(t,e,n):w(t,e)}function x(e,r){e===r?M(e,d()):t(r)?b(e,r,m(r)):w(e,r)}function _(t){t._onerror&&t._onerror(t._result),A(t)}function w(t,e){t._state===et&&(t._result=e,t._state=rt,0!==t._subscribers.length&&Y(A,t))}function M(t,e){t._state===et&&(t._state=nt,t._result=e,Y(_,t))}function k(t,e,r,n){var i=t._subscribers,a=i.length;t._onerror=null,i[a]=e,i[a+rt]=r,i[a+nt]=n,0===a&&t._state&&Y(A,t)}function A(t){var e=t._subscribers,r=t._state;if(0!==e.length){for(var n=void 0,i=void 0,a=t._result,o=0;o<e.length;o+=3)n=e[o],i=e[o+r],n?E(r,n,i,a):i(a);t._subscribers.length=0}}function T(){this.error=null}function S(t,e){try{return t(e)}catch(t){return at.error=t,at}}function E(t,e,n,i){var a=r(n),o=void 0,s=void 0,l=void 0,u=void 0;if(a){if(o=S(n,i),o===at?(u=!0,s=o.error,o=null):l=!0,e===o)return void M(e,p())}else o=i,l=!0;e._state!==et||(a&&l?x(e,o):u?M(e,s):t===rt?w(e,o):t===nt&&M(e,o))}function L(t,e){try{e(function(e){x(t,e)},function(e){M(t,e)})}catch(e){M(t,e)}}function C(){return ot++}function I(t){t[tt]=ot++,t._state=void 0,t._result=void 0,t._subscribers=[]}function z(t,e){this._instanceConstructor=t,this.promise=new t(f),this.promise[tt]||I(this.promise),V(e)?(this._input=e,this.length=e.length,this._remaining=e.length,this._result=new Array(this.length),0===this.length?w(this.promise,this._result):(this.length=this.length||0,this._enumerate(),0===this._remaining&&w(this.promise,this._result))):M(this.promise,D())}function D(){return new Error("Array Methods must be provided an Array")}function P(t){return new z(this,t).promise}function O(t){var e=this;return new e(V(t)?function(r,n){for(var i=t.length,a=0;a<i;a++)e.resolve(t[a]).then(r,n)}:function(t,e){return e(new TypeError("You must pass an array to race."))})}function R(t){var e=this,r=new e(f);return M(r,t),r}function F(){throw new TypeError("You must pass a resolver function as the first argument to the promise constructor")}function j(){throw new TypeError("Failed to construct 'Promise': Please use the 'new' operator, this object constructor cannot be called as a function.")}function N(t){this[tt]=C(),this._result=this._state=void 0,this._subscribers=[],f!==t&&("function"!=typeof t&&F(),this instanceof N?L(this,t):j())}function B(){var t=void 0;if(void 0!==a)t=a;else if("undefined"!=typeof self)t=self;else try{t=Function("return this")()}catch(t){throw new Error("polyfill failed because global object is unavailable in this environment")}var e=t.Promise;if(e){var r=null;try{r=Object.prototype.toString.call(e.resolve())}catch(t){}if("[object Promise]"===r&&!e.cast)return}t.Promise=N}var U=void 0;U=Array.isArray?Array.isArray:function(t){return"[object Array]"===Object.prototype.toString.call(t)};var V=U,H=0,q=void 0,G=void 0,Y=function(t,e){Q[H]=t,Q[H+1]=e,2===(H+=2)&&(G?G(u):$())},W="undefined"!=typeof window?window:void 0,X=W||{},Z=X.MutationObserver||X.WebKitMutationObserver,J="undefined"==typeof self&&void 0!==i&&"[object process]"==={}.toString.call(i),K="undefined"!=typeof Uint8ClampedArray&&"undefined"!=typeof importScripts&&"undefined"!=typeof MessageChannel,Q=new Array(1e3),$=void 0;$=J?function(){return function(){return i.nextTick(u)}}():Z?function(){var t=0,e=new Z(u),r=document.createTextNode("");return e.observe(r,{characterData:!0}),function(){r.data=t=++t%2}}():K?function(){var t=new MessageChannel;return t.port1.onmessage=u,function(){return t.port2.postMessage(0)}}():void 0===W&&"function"==typeof e?function(){try{var t=e,r=t("vertx");return q=r.runOnLoop||r.runOnContext,s()}catch(t){return l()}}():l();var tt=Math.random().toString(36).substring(16),et=void 0,rt=1,nt=2,it=new T,at=new T,ot=0;return z.prototype._enumerate=function(){for(var t=this.length,e=this._input,r=0;this._state===et&&r<t;r++)this._eachEntry(e[r],r)},z.prototype._eachEntry=function(t,e){var r=this._instanceConstructor,n=r.resolve;if(n===h){var i=m(t);if(i===c&&t._state!==et)this._settledAt(t._state,e,t._result);else if("function"!=typeof i)this._remaining--,this._result[e]=t;else if(r===N){var a=new r(f);b(a,t,i),this._willSettleAt(a,e)}else this._willSettleAt(new r(function(e){return e(t)}),e)}else this._willSettleAt(n(t),e)},z.prototype._settledAt=function(t,e,r){var n=this.promise;n._state===et&&(this._remaining--,t===nt?M(n,r):this._result[e]=r),0===this._remaining&&w(n,this._result)},z.prototype._willSettleAt=function(t,e){var r=this;k(t,void 0,function(t){return r._settledAt(rt,e,t)},function(t){return r._settledAt(nt,e,t)})},N.all=P,N.race=O,N.resolve=h,N.reject=R,N._setScheduler=n,N._setAsap=o,N._asap=Y,N.prototype={constructor:N,then:c,catch:function(t){return this.then(null,t)}},B(),N.polyfill=B,N.Promise=N,N})}).call(this,e("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{_process:487}],129:[function(t,e,r){function n(){this._events=this._events||{},this._maxListeners=this._maxListeners||void 0}function i(t){return"function"==typeof t}function a(t){return"number"==typeof t}function o(t){return"object"==typeof t&&null!==t}function s(t){return void 0===t}e.exports=n,n.EventEmitter=n,n.prototype._events=void 0,n.prototype._maxListeners=void 0,n.defaultMaxListeners=10,n.prototype.setMaxListeners=function(t){if(!a(t)||t<0||isNaN(t))throw TypeError("n must be a positive number");return this._maxListeners=t,this},n.prototype.emit=function(t){var e,r,n,a,l,u;if(this._events||(this._events={}),"error"===t&&(!this._events.error||o(this._events.error)&&!this._events.error.length)){if((e=arguments[1])instanceof Error)throw e;var c=new Error('Uncaught, unspecified "error" event. ('+e+")");throw c.context=e,c}if(r=this._events[t],s(r))return!1;if(i(r))switch(arguments.length){case 1:r.call(this);break;case 2:r.call(this,arguments[1]);break;case 3:r.call(this,arguments[1],arguments[2]);break;default:a=Array.prototype.slice.call(arguments,1),r.apply(this,a)}else if(o(r))for(a=Array.prototype.slice.call(arguments,1),u=r.slice(),n=u.length,l=0;l<n;l++)u[l].apply(this,a);return!0},n.prototype.addListener=function(t,e){var r;if(!i(e))throw TypeError("listener must be a function");return this._events||(this._events={}),this._events.newListener&&this.emit("newListener",t,i(e.listener)?e.listener:e),this._events[t]?o(this._events[t])?this._events[t].push(e):this._events[t]=[this._events[t],e]:this._events[t]=e,o(this._events[t])&&!this._events[t].warned&&(r=s(this._maxListeners)?n.defaultMaxListeners:this._maxListeners)&&r>0&&this._events[t].length>r&&(this._events[t].warned=!0,console.error("(node) warning: possible EventEmitter memory leak detected. %d listeners added. Use emitter.setMaxListeners() to increase limit.",this._events[t].length),"function"==typeof console.trace&&console.trace()),this},n.prototype.on=n.prototype.addListener,n.prototype.once=function(t,e){function r(){this.removeListener(t,r),n||(n=!0,e.apply(this,arguments))}if(!i(e))throw TypeError("listener must be a function");var n=!1;return r.listener=e,this.on(t,r),this},n.prototype.removeListener=function(t,e){var r,n,a,s;if(!i(e))throw TypeError("listener must be a function");if(!this._events||!this._events[t])return this;if(r=this._events[t],a=r.length,n=-1,
r===e||i(r.listener)&&r.listener===e)delete this._events[t],this._events.removeListener&&this.emit("removeListener",t,e);else if(o(r)){for(s=a;s-- >0;)if(r[s]===e||r[s].listener&&r[s].listener===e){n=s;break}if(n<0)return this;1===r.length?(r.length=0,delete this._events[t]):r.splice(n,1),this._events.removeListener&&this.emit("removeListener",t,e)}return this},n.prototype.removeAllListeners=function(t){var e,r;if(!this._events)return this;if(!this._events.removeListener)return 0===arguments.length?this._events={}:this._events[t]&&delete this._events[t],this;if(0===arguments.length){for(e in this._events)"removeListener"!==e&&this.removeAllListeners(e);return this.removeAllListeners("removeListener"),this._events={},this}if(r=this._events[t],i(r))this.removeListener(t,r);else if(r)for(;r.length;)this.removeListener(t,r[r.length-1]);return delete this._events[t],this},n.prototype.listeners=function(t){return this._events&&this._events[t]?i(this._events[t])?[this._events[t]]:this._events[t].slice():[]},n.prototype.listenerCount=function(t){if(this._events){var e=this._events[t];if(i(e))return 1;if(e)return e.length}return 0},n.listenerCount=function(t,e){return t.listenerCount(e)}},{}],130:[function(t,e,r){"use strict";function n(t,e,r){var n=e||0,i=r||1;return[[t[12]+t[0],t[13]+t[1],t[14]+t[2],t[15]+t[3]],[t[12]-t[0],t[13]-t[1],t[14]-t[2],t[15]-t[3]],[t[12]+t[4],t[13]+t[5],t[14]+t[6],t[15]+t[7]],[t[12]-t[4],t[13]-t[5],t[14]-t[6],t[15]-t[7]],[n*t[12]+t[8],n*t[13]+t[9],n*t[14]+t[10],n*t[15]+t[11]],[i*t[12]-t[8],i*t[13]-t[9],i*t[14]-t[10],i*t[15]-t[11]]]}e.exports=n},{}],131:[function(t,e,r){"use strict";function n(t){for(var e,r=t.length,n=0;n<r;n++)if(((e=t.charCodeAt(n))<9||e>13)&&32!==e&&133!==e&&160!==e&&5760!==e&&6158!==e&&(e<8192||e>8205)&&8232!==e&&8233!==e&&8239!==e&&8287!==e&&8288!==e&&12288!==e&&65279!==e)return!1;return!0}e.exports=function(t){var e=typeof t;if("string"===e){var r=t;if(0===(t=+t)&&n(r))return!1}else if("number"!==e)return!1;return t-t<1}},{}],132:[function(t,e,r){"use strict";function n(t){return new Function("f","var p = (f && f.properties || {}); return "+i(t))}function i(t){if(!t)return"true";var e=t[0];return t.length<=1?"any"===e?"false":"true":"("+("=="===e?o(t[1],t[2],"===",!1):"!="===e?o(t[1],t[2],"!==",!1):"<"===e||">"===e||"<="===e||">="===e?o(t[1],t[2],e,!0):"any"===e?s(t.slice(1),"||"):"all"===e?s(t.slice(1),"&&"):"none"===e?c(s(t.slice(1),"||")):"in"===e?l(t[1],t.slice(2)):"!in"===e?c(l(t[1],t.slice(2))):"has"===e?u(t[1]):"!has"===e?c(u([t[1]])):"true")+")"}function a(t){return"$type"===t?"f.type":"$id"===t?"f.id":"p["+JSON.stringify(t)+"]"}function o(t,e,r,n){var i=a(t),o="$type"===t?f.indexOf(e):JSON.stringify(e);return(n?"typeof "+i+"=== typeof "+o+"&&":"")+i+r+o}function s(t,e){return t.map(i).join(e)}function l(t,e){"$type"===t&&(e=e.map(function(t){return f.indexOf(t)}));var r=JSON.stringify(e.sort(h)),n=a(t);return e.length<=200?r+".indexOf("+n+") !== -1":"function(v, a, i, j) {while (i <= j) { var m = (i + j) >> 1; if (a[m] === v) return true; if (a[m] > v) j = m - 1; else i = m + 1;}return false; }("+n+", "+r+",0,"+(e.length-1)+")"}function u(t){return JSON.stringify(t)+" in p"}function c(t){return"!("+t+")"}function h(t,e){return t<e?-1:t>e?1:0}e.exports=n;var f=["Unknown","Point","LineString","Polygon"]},{}],133:[function(t,e,r){"use strict";function n(t,e,r){return Math.min(e,Math.max(t,r))}function i(t,e,r){this.dimension=t.length,this.bounds=[new Array(this.dimension),new Array(this.dimension)];for(var n=0;n<this.dimension;++n)this.bounds[0][n]=-1/0,this.bounds[1][n]=1/0;this._state=t.slice().reverse(),this._velocity=e.slice().reverse(),this._time=[r],this._scratch=[t.slice(),t.slice(),t.slice(),t.slice(),t.slice()]}function a(t){for(var e=new Array(t),r=0;r<t;++r)e[r]=0;return e}function o(t,e,r){switch(arguments.length){case 0:return new i([0],[0],0);case 1:if("number"==typeof t){var n=a(t);return new i(n,n,0)}return new i(t,a(t.length),0);case 2:if("number"==typeof e){var n=a(t.length);return new i(t,n,+e)}r=0;case 3:if(t.length!==e.length)throw new Error("state and velocity lengths must match");return new i(t,e,r)}}e.exports=o;var s=t("cubic-hermite"),l=t("binary-search-bounds"),u=i.prototype;u.flush=function(t){var e=l.gt(this._time,t)-1;e<=0||(this._time.splice(0,e),this._state.splice(0,e*this.dimension),this._velocity.splice(0,e*this.dimension))},u.curve=function(t){var e=this._time,r=e.length,i=l.le(e,t),a=this._scratch[0],o=this._state,u=this._velocity,c=this.dimension,h=this.bounds;if(i<0)for(var f=c-1,d=0;d<c;++d,--f)a[d]=o[f];else if(i>=r-1)for(var f=o.length-1,p=t-e[r-1],d=0;d<c;++d,--f)a[d]=o[f]+p*u[f];else{for(var f=c*(i+1)-1,m=e[i],g=e[i+1],v=g-m||1,y=this._scratch[1],b=this._scratch[2],x=this._scratch[3],_=this._scratch[4],w=!0,d=0;d<c;++d,--f)y[d]=o[f],x[d]=u[f]*v,b[d]=o[f+c],_[d]=u[f+c]*v,w=w&&y[d]===b[d]&&x[d]===_[d]&&0===x[d];if(w)for(var d=0;d<c;++d)a[d]=y[d];else s(y,x,b,_,(t-m)/v,a)}for(var M=h[0],k=h[1],d=0;d<c;++d)a[d]=n(M[d],k[d],a[d]);return a},u.dcurve=function(t){var e=this._time,r=e.length,n=l.le(e,t),i=this._scratch[0],a=this._state,o=this._velocity,u=this.dimension;if(n>=r-1)for(var c=a.length-1,h=(e[r-1],0);h<u;++h,--c)i[h]=o[c];else{for(var c=u*(n+1)-1,f=e[n],d=e[n+1],p=d-f||1,m=this._scratch[1],g=this._scratch[2],v=this._scratch[3],y=this._scratch[4],b=!0,h=0;h<u;++h,--c)m[h]=a[c],v[h]=o[c]*p,g[h]=a[c+u],y[h]=o[c+u]*p,b=b&&m[h]===g[h]&&v[h]===y[h]&&0===v[h];if(b)for(var h=0;h<u;++h)i[h]=0;else{s.derivative(m,v,g,y,(t-f)/p,i);for(var h=0;h<u;++h)i[h]/=p}}return i},u.lastT=function(){var t=this._time;return t[t.length-1]},u.stable=function(){for(var t=this._velocity,e=t.length,r=this.dimension-1;r>=0;--r)if(t[--e])return!1;return!0},u.jump=function(t){var e=this.lastT(),r=this.dimension;if(!(t<e||arguments.length!==r+1)){var i=this._state,a=this._velocity,o=i.length-this.dimension,s=this.bounds,l=s[0],u=s[1];this._time.push(e,t);for(var c=0;c<2;++c)for(var h=0;h<r;++h)i.push(i[o++]),a.push(0);this._time.push(t);for(var h=r;h>0;--h)i.push(n(l[h-1],u[h-1],arguments[h])),a.push(0)}},u.push=function(t){var e=this.lastT(),r=this.dimension;if(!(t<e||arguments.length!==r+1)){var i=this._state,a=this._velocity,o=i.length-this.dimension,s=t-e,l=this.bounds,u=l[0],c=l[1],h=s>1e-6?1/s:0;this._time.push(t);for(var f=r;f>0;--f){var d=n(u[f-1],c[f-1],arguments[f]);i.push(d),a.push((d-i[o++])*h)}}},u.set=function(t){var e=this.dimension;if(!(t<this.lastT()||arguments.length!==e+1)){var r=this._state,i=this._velocity,a=this.bounds,o=a[0],s=a[1];this._time.push(t);for(var l=e;l>0;--l)r.push(n(o[l-1],s[l-1],arguments[l])),i.push(0)}},u.move=function(t){var e=this.lastT(),r=this.dimension;if(!(t<=e||arguments.length!==r+1)){var i=this._state,a=this._velocity,o=i.length-this.dimension,s=this.bounds,l=s[0],u=s[1],c=t-e,h=c>1e-6?1/c:0;this._time.push(t);for(var f=r;f>0;--f){var d=arguments[f];i.push(n(l[f-1],u[f-1],i[o++]+d)),a.push(d*h)}}},u.idle=function(t){var e=this.lastT();if(!(t<e)){var r=this.dimension,i=this._state,a=this._velocity,o=i.length-r,s=this.bounds,l=s[0],u=s[1],c=t-e;this._time.push(t);for(var h=r-1;h>=0;--h)i.push(n(l[h],u[h],i[o]+c*a[o])),a.push(0),o+=1}}},{"binary-search-bounds":66,"cubic-hermite":109}],134:[function(t,e,r){"use strict";function n(t){t=t||{};var e,r,n=t.canvas||document.createElement("canvas"),o=t.family||"sans-serif",s=t.shape||[512,512],l=t.step||[32,32],u=parseFloat(t.size)||16,c=t.chars||[32,126],h=Math.floor((l[0]-u)/2),f=t.radius||1.5*h,d=new a(u,h,f,0,o),p=null==t.align?"optical":t.align,m=null==t.fit||1==t.fit?.5:t.fit;if(Array.isArray(c)){if(2===c.length&&"number"==typeof c[0]&&"number"==typeof c[1]){var g=[];for(e=c[0],r=0;e<=c[1];e++)g[r++]=String.fromCharCode(e);c=g}}else c=String(c).split("");s=s.slice(),n.width=s[0],n.height=s[1];var v=n.getContext("2d");v.fillStyle="#000",v.fillRect(0,0,n.width,n.height),v.textBaseline="middle";var y=l[0],b=l[1],x=0,_=0,w=u/b,M=Math.min(c.length,Math.floor(s[0]/y)*Math.ceil(s[1]/b)),k=d.ctx.textAlign,A=d.buffer,T=d.middle;for(d.ctx.textAlign="center",d.buffer=d.size/2,e=0;e<M;e++)if(c[e]){var S=i(c[e],o,w),E=1,L=[0,0];if(m){var C=m;Array.isArray(m)&&(C=m[e]);var I=.5*(S.bounds[3]-S.bounds[1]),z=.5*(S.bounds[2]-S.bounds[0]),D=Math.max(I,z),P=Math.sqrt(I*I+z*z),O=.333*S.radius+.333*D+.333*P;E=b*C/(O*b*2),d.ctx.font=u*E+"px "+o}else d.ctx.font=u+"px "+o;p&&(L="optical"===p||!0===p?[.5*y-y*S.center[0],.5*b-b*S.center[1]]:[.5*y-y*(S.bounds[2]+S.bounds[0])*.5,.5*b-b*(S.bounds[3]+S.bounds[1])*.5],d.middle=T+L[1]*E);var R=d.draw(c[e]);v.putImageData(R,x+L[0]*E,_),x+=l[0],x>s[0]-l[0]&&(x=0,_+=l[1])}return d.ctx.textAlign=k,d.buffer=A,d.middle=T,n}function i(t,e,r){if(s[e]&&s[e][t])return s[e][t];var n=200*r,i=o(t,{size:200,fontSize:n,fontFamily:e});s[e]||(s[e]={});var a={center:[i.center[0]/200,i.center[1]/200],bounds:i.bounds.map(function(t){return t/200}),radius:i.radius/200};return s[e][t]=a,a}var a=t("tiny-sdf"),o=t("optical-properties");e.exports=n;var s={}},{"optical-properties":471,"tiny-sdf":533}],135:[function(t,e,r){"use strict";function n(t,e,r,n,i,a){this._color=t,this.key=e,this.value=r,this.left=n,this.right=i,this._count=a}function i(t){return new n(t._color,t.key,t.value,t.left,t.right,t._count)}function a(t,e){return new n(t,e.key,e.value,e.left,e.right,e._count)}function o(t){t._count=1+(t.left?t.left._count:0)+(t.right?t.right._count:0)}function s(t,e){this._compare=t,this.root=e}function l(t,e){if(e.left){var r=l(t,e.left);if(r)return r}var r=t(e.key,e.value);return r||(e.right?l(t,e.right):void 0)}function u(t,e,r,n){if(e(t,n.key)<=0){if(n.left){var i=u(t,e,r,n.left);if(i)return i}var i=r(n.key,n.value);if(i)return i}if(n.right)return u(t,e,r,n.right)}function c(t,e,r,n,i){var a,o=r(t,i.key),s=r(e,i.key);if(o<=0){if(i.left&&(a=c(t,e,r,n,i.left)))return a;if(s>0&&(a=n(i.key,i.value)))return a}if(s>0&&i.right)return c(t,e,r,n,i.right)}function h(t,e){this.tree=t,this._stack=e}function f(t,e){t.key=e.key,t.value=e.value,t.left=e.left,t.right=e.right,t._color=e._color,t._count=e._count}function d(t){for(var e,r,n,s,l=t.length-1;l>=0;--l){if(e=t[l],0===l)return void(e._color=v);if(r=t[l-1],r.left===e){if(n=r.right,n.right&&n.right._color===g){if(n=r.right=i(n),s=n.right=i(n.right),r.right=n.left,n.left=r,n.right=s,n._color=r._color,e._color=v,r._color=v,s._color=v,o(r),o(n),l>1){var u=t[l-2];u.left===r?u.left=n:u.right=n}return void(t[l-1]=n)}if(n.left&&n.left._color===g){if(n=r.right=i(n),s=n.left=i(n.left),r.right=s.left,n.left=s.right,s.left=r,s.right=n,s._color=r._color,r._color=v,n._color=v,e._color=v,o(r),o(n),o(s),l>1){var u=t[l-2];u.left===r?u.left=s:u.right=s}return void(t[l-1]=s)}if(n._color===v){if(r._color===g)return r._color=v,void(r.right=a(g,n));r.right=a(g,n);continue}if(n=i(n),r.right=n.left,n.left=r,n._color=r._color,r._color=g,o(r),o(n),l>1){var u=t[l-2];u.left===r?u.left=n:u.right=n}t[l-1]=n,t[l]=r,l+1<t.length?t[l+1]=e:t.push(e),l+=2}else{if(n=r.left,n.left&&n.left._color===g){if(n=r.left=i(n),s=n.left=i(n.left),r.left=n.right,n.right=r,n.left=s,n._color=r._color,e._color=v,r._color=v,s._color=v,o(r),o(n),l>1){var u=t[l-2];u.right===r?u.right=n:u.left=n}return void(t[l-1]=n)}if(n.right&&n.right._color===g){if(n=r.left=i(n),s=n.right=i(n.right),r.left=s.right,n.right=s.left,s.right=r,s.left=n,s._color=r._color,r._color=v,n._color=v,e._color=v,o(r),o(n),o(s),l>1){var u=t[l-2];u.right===r?u.right=s:u.left=s}return void(t[l-1]=s)}if(n._color===v){if(r._color===g)return r._color=v,void(r.left=a(g,n));r.left=a(g,n);continue}if(n=i(n),r.left=n.right,n.right=r,n._color=r._color,r._color=g,o(r),o(n),l>1){var u=t[l-2];u.right===r?u.right=n:u.left=n}t[l-1]=n,t[l]=r,l+1<t.length?t[l+1]=e:t.push(e),l+=2}}}function p(t,e){return t<e?-1:t>e?1:0}function m(t){return new s(t||p,null)}e.exports=m;var g=0,v=1,y=s.prototype;Object.defineProperty(y,"keys",{get:function(){var t=[];return this.forEach(function(e,r){t.push(e)}),t}}),Object.defineProperty(y,"values",{get:function(){var t=[];return this.forEach(function(e,r){t.push(r)}),t}}),Object.defineProperty(y,"length",{get:function(){return this.root?this.root._count:0}}),y.insert=function(t,e){for(var r=this._compare,i=this.root,l=[],u=[];i;){var c=r(t,i.key);l.push(i),u.push(c),i=c<=0?i.left:i.right}l.push(new n(g,t,e,null,null,1));for(var h=l.length-2;h>=0;--h){var i=l[h];u[h]<=0?l[h]=new n(i._color,i.key,i.value,l[h+1],i.right,i._count+1):l[h]=new n(i._color,i.key,i.value,i.left,l[h+1],i._count+1)}for(var h=l.length-1;h>1;--h){var f=l[h-1],i=l[h];if(f._color===v||i._color===v)break;var d=l[h-2];if(d.left===f)if(f.left===i){var p=d.right;if(!p||p._color!==g){if(d._color=g,d.left=f.right,f._color=v,f.right=d,l[h-2]=f,l[h-1]=i,o(d),o(f),h>=3){var m=l[h-3];m.left===d?m.left=f:m.right=f}break}f._color=v,d.right=a(v,p),d._color=g,h-=1}else{var p=d.right;if(!p||p._color!==g){if(f.right=i.left,d._color=g,d.left=i.right,i._color=v,i.left=f,i.right=d,l[h-2]=i,l[h-1]=f,o(d),o(f),o(i),h>=3){var m=l[h-3];m.left===d?m.left=i:m.right=i}break}f._color=v,d.right=a(v,p),d._color=g,h-=1}else if(f.right===i){var p=d.left;if(!p||p._color!==g){if(d._color=g,d.right=f.left,f._color=v,f.left=d,l[h-2]=f,l[h-1]=i,o(d),o(f),h>=3){var m=l[h-3];m.right===d?m.right=f:m.left=f}break}f._color=v,d.left=a(v,p),d._color=g,h-=1}else{var p=d.left;if(!p||p._color!==g){if(f.left=i.right,d._color=g,d.right=i.left,i._color=v,i.right=f,i.left=d,l[h-2]=i,l[h-1]=f,o(d),o(f),o(i),h>=3){var m=l[h-3];m.right===d?m.right=i:m.left=i}break}f._color=v,d.left=a(v,p),d._color=g,h-=1}}return l[0]._color=v,new s(r,l[0])},y.forEach=function(t,e,r){if(this.root)switch(arguments.length){case 1:return l(t,this.root);case 2:return u(e,this._compare,t,this.root);case 3:if(this._compare(e,r)>=0)return;return c(e,r,this._compare,t,this.root)}},Object.defineProperty(y,"begin",{get:function(){for(var t=[],e=this.root;e;)t.push(e),e=e.left;return new h(this,t)}}),Object.defineProperty(y,"end",{get:function(){for(var t=[],e=this.root;e;)t.push(e),e=e.right;return new h(this,t)}}),y.at=function(t){if(t<0)return new h(this,[]);for(var e=this.root,r=[];;){if(r.push(e),e.left){if(t<e.left._count){e=e.left;continue}t-=e.left._count}if(!t)return new h(this,r);if(t-=1,!e.right)break;if(t>=e.right._count)break;e=e.right}return new h(this,[])},y.ge=function(t){for(var e=this._compare,r=this.root,n=[],i=0;r;){var a=e(t,r.key);n.push(r),a<=0&&(i=n.length),r=a<=0?r.left:r.right}return n.length=i,new h(this,n)},y.gt=function(t){for(var e=this._compare,r=this.root,n=[],i=0;r;){var a=e(t,r.key);n.push(r),a<0&&(i=n.length),r=a<0?r.left:r.right}return n.length=i,new h(this,n)},y.lt=function(t){for(var e=this._compare,r=this.root,n=[],i=0;r;){var a=e(t,r.key);n.push(r),a>0&&(i=n.length),r=a<=0?r.left:r.right}return n.length=i,new h(this,n)},y.le=function(t){for(var e=this._compare,r=this.root,n=[],i=0;r;){var a=e(t,r.key);n.push(r),a>=0&&(i=n.length),r=a<0?r.left:r.right}return n.length=i,new h(this,n)},y.find=function(t){for(var e=this._compare,r=this.root,n=[];r;){var i=e(t,r.key);if(n.push(r),0===i)return new h(this,n);r=i<=0?r.left:r.right}return new h(this,[])},y.remove=function(t){var e=this.find(t);return e?e.remove():this},y.get=function(t){for(var e=this._compare,r=this.root;r;){var n=e(t,r.key);if(0===n)return r.value;r=n<=0?r.left:r.right}};var b=h.prototype;Object.defineProperty(b,"valid",{get:function(){return this._stack.length>0}}),Object.defineProperty(b,"node",{get:function(){return this._stack.length>0?this._stack[this._stack.length-1]:null},enumerable:!0}),b.clone=function(){return new h(this.tree,this._stack.slice())},b.remove=function(){var t=this._stack;if(0===t.length)return this.tree;var e=new Array(t.length),r=t[t.length-1];e[e.length-1]=new n(r._color,r.key,r.value,r.left,r.right,r._count);for(var i=t.length-2;i>=0;--i){var r=t[i];r.left===t[i+1]?e[i]=new n(r._color,r.key,r.value,e[i+1],r.right,r._count):e[i]=new n(r._color,r.key,r.value,r.left,e[i+1],r._count)}if(r=e[e.length-1],r.left&&r.right){var a=e.length;for(r=r.left;r.right;)e.push(r),r=r.right;var o=e[a-1];e.push(new n(r._color,o.key,o.value,r.left,r.right,r._count)),e[a-1].key=r.key,e[a-1].value=r.value;for(var i=e.length-2;i>=a;--i)r=e[i],e[i]=new n(r._color,r.key,r.value,r.left,e[i+1],r._count);e[a-1].left=e[a]}if(r=e[e.length-1],r._color===g){var l=e[e.length-2];l.left===r?l.left=null:l.right===r&&(l.right=null),e.pop();for(var i=0;i<e.length;++i)e[i]._count--;return new s(this.tree._compare,e[0])}if(r.left||r.right){r.left?f(r,r.left):r.right&&f(r,r.right),r._color=v;for(var i=0;i<e.length-1;++i)e[i]._count--;return new s(this.tree._compare,e[0])}if(1===e.length)return new s(this.tree._compare,null);for(var i=0;i<e.length;++i)e[i]._count--;var u=e[e.length-2];return d(e),u.left===r?u.left=null:u.right=null,new s(this.tree._compare,e[0])},Object.defineProperty(b,"key",{get:function(){if(this._stack.length>0)return this._stack[this._stack.length-1].key},enumerable:!0}),Object.defineProperty(b,"value",{get:function(){if(this._stack.length>0)return this._stack[this._stack.length-1].value},enumerable:!0}),Object.defineProperty(b,"index",{get:function(){var t=0,e=this._stack;if(0===e.length){var r=this.tree.root;return r?r._count:0}e[e.length-1].left&&(t=e[e.length-1].left._count);for(var n=e.length-2;n>=0;--n)e[n+1]===e[n].right&&(++t,e[n].left&&(t+=e[n].left._count));return t},enumerable:!0}),b.next=function(){var t=this._stack;if(0!==t.length){var e=t[t.length-1];if(e.right)for(e=e.right;e;)t.push(e),e=e.left;else for(t.pop();t.length>0&&t[t.length-1].right===e;)e=t[t.length-1],t.pop()}},Object.defineProperty(b,"hasNext",{get:function(){var t=this._stack;if(0===t.length)return!1;if(t[t.length-1].right)return!0;for(var e=t.length-1;e>0;--e)if(t[e-1].left===t[e])return!0;return!1}}),b.update=function(t){var e=this._stack;if(0===e.length)throw new Error("Can't update empty node!");var r=new Array(e.length),i=e[e.length-1];r[r.length-1]=new n(i._color,i.key,t,i.left,i.right,i._count);for(var a=e.length-2;a>=0;--a)i=e[a],i.left===e[a+1]?r[a]=new n(i._color,i.key,i.value,r[a+1],i.right,i._count):r[a]=new n(i._color,i.key,i.value,i.left,r[a+1],i._count);return new s(this.tree._compare,r[0])},b.prev=function(){var t=this._stack;if(0!==t.length){var e=t[t.length-1];if(e.left)for(e=e.left;e;)t.push(e),e=e.right;else for(t.pop();t.length>0&&t[t.length-1].left===e;)e=t[t.length-1],t.pop()}},Object.defineProperty(b,"hasPrev",{get:function(){var t=this._stack;if(0===t.length)return!1;if(t[t.length-1].left)return!0;for(var e=t.length-1;e>0;--e)if(t[e-1].right===t[e])return!0;return!1}})},{}],136:[function(t,e,r){function n(t){if(t<0)return Number("0/0");for(var e=o[0],r=o.length-1;r>0;--r)e+=o[r]/(t+r);var n=t+a+.5;return.5*Math.log(2*Math.PI)+(t+.5)*Math.log(n)-n+Math.log(e)-Math.log(t)}var i=[.9999999999998099,676.5203681218851,-1259.1392167224028,771.3234287776531,-176.6150291621406,12.507343278686905,-.13857109526572012,9984369578019572e-21,1.5056327351493116e-7],a=607/128,o=[.9999999999999971,57.15623566586292,-59.59796035547549,14.136097974741746,-.4919138160976202,3399464998481189e-20,4652362892704858e-20,-9837447530487956e-20,.0001580887032249125,-.00021026444172410488,.00021743961811521265,-.0001643181065367639,8441822398385275e-20,-26190838401581408e-21,36899182659531625e-22];e.exports=function t(e){if(e<.5)return Math.PI/(Math.sin(Math.PI*e)*t(1-e));if(e>100)return Math.exp(n(e));e-=1;for(var r=i[0],a=1;a<9;a++)r+=i[a]/(e+a);var o=e+7+.5;return Math.sqrt(2*Math.PI)*Math.pow(o,e+.5)*Math.exp(-o)*r},e.exports.log=n},{}],137:[function(t,e,r){function n(t){if("Polygon"===t.type)return i(t.coordinates);if("MultiPolygon"===t.type){for(var e=0,r=0;r<t.coordinates.length;r++)e+=i(t.coordinates[r]);return e}return null}function i(t){var e=0;if(t&&t.length>0){e+=Math.abs(a(t[0]));for(var r=1;r<t.length;r++)e-=Math.abs(a(t[r]))}return e}function a(t){var e=0;if(t.length>2){for(var r,n,i=0;i<t.length-1;i++)r=t[i],n=t[i+1],e+=o(n[0]-r[0])*(2+Math.sin(o(r[1]))+Math.sin(o(n[1])));e=e*s.RADIUS*s.RADIUS/2}return e}function o(t){return t*Math.PI/180}var s=t("wgs84");e.exports.geometry=n,e.exports.ring=a},{wgs84:565}],138:[function(t,e,r){function n(t,e){switch(t&&t.type||null){case"FeatureCollection":return t.features=t.features.map(i(n,e)),t;case"Feature":return t.geometry=n(t.geometry,e),t;case"Polygon":case"MultiPolygon":return a(t,e);default:return t}}function i(t,e){return function(r){return t(r,e)}}function a(t,e){return"Polygon"===t.type?t.coordinates=o(t.coordinates,e):"MultiPolygon"===t.type&&(t.coordinates=t.coordinates.map(i(o,e))),t}function o(t,e){e=!!e,t[0]=s(t[0],!e);for(var r=1;r<t.length;r++)t[r]=s(t[r],e);return t}function s(t,e){return l(t)===e?t:t.reverse()}function l(t){return u.ring(t)>=0}var u=t("geojson-area");e.exports=n},{"geojson-area":137}],139:[function(t,e,r){"use strict";function n(t,e,r,n,o,l,u,c){if(r/=e,n/=e,u>=r&&c<=n)return t;if(u>n||c<r)return null;for(var h=[],f=0;f<t.length;f++){var d,p,m=t[f],g=m.geometry,v=m.type;if(d=m.min[o],p=m.max[o],d>=r&&p<=n)h.push(m);else if(!(d>n||p<r)){var y=1===v?i(g,r,n,o):a(g,r,n,o,l,3===v);y.length&&h.push(s(m.tags,v,y,m.id))}}return h.length?h:null}function i(t,e,r,n){for(var i=[],a=0;a<t.length;a++){var o=t[a],s=o[n];s>=e&&s<=r&&i.push(o)}return i}function a(t,e,r,n,i,a){for(var s=[],l=0;l<t.length;l++){var u,c,h,f=0,d=0,p=null,m=t[l],g=m.area,v=m.dist,y=m.outer,b=m.length,x=[];for(c=0;c<b-1;c++)u=p||m[c],p=m[c+1],f=d||u[n],d=p[n],f<e?d>r?(x.push(i(u,p,e),i(u,p,r)),a||(x=o(s,x,g,v,y))):d>=e&&x.push(i(u,p,e)):f>r?d<e?(x.push(i(u,p,r),i(u,p,e)),a||(x=o(s,x,g,v,y))):d<=r&&x.push(i(u,p,r)):(x.push(u),d<e?(x.push(i(u,p,e)),a||(x=o(s,x,g,v,y))):d>r&&(x.push(i(u,p,r)),a||(x=o(s,x,g,v,y))));u=m[b-1],f=u[n],f>=e&&f<=r&&x.push(u),h=x[x.length-1],a&&h&&(x[0][0]!==h[0]||x[0][1]!==h[1])&&x.push(x[0]),o(s,x,g,v,y)}return s}function o(t,e,r,n,i){return e.length&&(e.area=r,e.dist=n,void 0!==i&&(e.outer=i),t.push(e)),[]}e.exports=n;var s=t("./feature")},{"./feature":141}],140:[function(t,e,r){"use strict";function n(t,e){var r=[];if("FeatureCollection"===t.type)for(var n=0;n<t.features.length;n++)i(r,t.features[n],e);else"Feature"===t.type?i(r,t,e):i(r,{geometry:t},e);return r}function i(t,e,r){if(null!==e.geometry){var n,s,l,c,h=e.geometry,f=h.type,d=h.coordinates,p=e.properties,m=e.id;if("Point"===f)t.push(u(p,1,[o(d)],m));else if("MultiPoint"===f)t.push(u(p,1,a(d),m));else if("LineString"===f)t.push(u(p,2,[a(d,r)],m));else if("MultiLineString"===f||"Polygon"===f){for(l=[],n=0;n<d.length;n++)c=a(d[n],r),"Polygon"===f&&(c.outer=0===n),l.push(c);t.push(u(p,"Polygon"===f?3:2,l,m))}else if("MultiPolygon"===f){for(l=[],n=0;n<d.length;n++)for(s=0;s<d[n].length;s++)c=a(d[n][s],r),c.outer=0===s,l.push(c);t.push(u(p,3,l,m))}else{if("GeometryCollection"!==f)throw new Error("Input data is not a valid GeoJSON object.");for(n=0;n<h.geometries.length;n++)i(t,{geometry:h.geometries[n],properties:p},r)}}}function a(t,e){for(var r=[],n=0;n<t.length;n++)r.push(o(t[n]));return e&&(l(r,e),s(r)),r}function o(t){var e=Math.sin(t[1]*Math.PI/180),r=t[0]/360+.5,n=.5-.25*Math.log((1+e)/(1-e))/Math.PI;return n=n<0?0:n>1?1:n,[r,n,0]}function s(t){for(var e,r,n=0,i=0,a=0;a<t.length-1;a++)e=r||t[a],r=t[a+1],n+=e[0]*r[1]-r[0]*e[1],i+=Math.abs(r[0]-e[0])+Math.abs(r[1]-e[1]);t.area=Math.abs(n/2),t.dist=i}e.exports=n;var l=t("./simplify"),u=t("./feature")},{"./feature":141,"./simplify":143}],141:[function(t,e,r){"use strict";function n(t,e,r,n){var a={id:n||null,type:e,geometry:r,tags:t||null,min:[1/0,1/0],max:[-1/0,-1/0]};return i(a),a}function i(t){var e=t.geometry,r=t.min,n=t.max;if(1===t.type)a(r,n,e);else for(var i=0;i<e.length;i++)a(r,n,e[i]);return t}function a(t,e,r){for(var n,i=0;i<r.length;i++)n=r[i],t[0]=Math.min(n[0],t[0]),e[0]=Math.max(n[0],e[0]),t[1]=Math.min(n[1],t[1]),e[1]=Math.max(n[1],e[1])}e.exports=n},{}],142:[function(t,e,r){"use strict";function n(t,e){return new i(t,e)}function i(t,e){e=this.options=l(Object.create(this.options),e);var r=e.debug;r&&console.time("preprocess data");var n=1<<e.maxZoom,i=c(t,e.tolerance/(n*e.extent));this.tiles={},this.tileCoords=[],r&&(console.timeEnd("preprocess data"),console.log("index: maxZoom: %d, maxPoints: %d",e.indexMaxZoom,e.indexMaxPoints),console.time("generate tiles"),this.stats={},this.total=0),i=d(i,e.buffer/e.extent,o),i.length&&this.splitTile(i,0,0,0),r&&(i.length&&console.log("features: %d, points: %d",this.tiles[0].numFeatures,this.tiles[0].numPoints),console.timeEnd("generate tiles"),console.log("tiles generated:",this.total,JSON.stringify(this.stats)))}function a(t,e,r){return 32*((1<<t)*r+e)+t}function o(t,e,r){return[r,(r-t[0])*(e[1]-t[1])/(e[0]-t[0])+t[1],1]}function s(t,e,r){return[(r-t[1])*(e[0]-t[0])/(e[1]-t[1])+t[0],r,1]}function l(t,e){for(var r in e)t[r]=e[r];return t}function u(t,e,r){var n=t.source;if(1!==n.length)return!1;var i=n[0];if(3!==i.type||i.geometry.length>1)return!1;var a=i.geometry[0].length;if(5!==a)return!1;for(var o=0;o<a;o++){var s=h.point(i.geometry[0][o],e,t.z2,t.x,t.y);if(s[0]!==-r&&s[0]!==e+r||s[1]!==-r&&s[1]!==e+r)return!1}return!0}e.exports=n;var c=t("./convert"),h=t("./transform"),f=t("./clip"),d=t("./wrap"),p=t("./tile");i.prototype.options={maxZoom:14,indexMaxZoom:5,indexMaxPoints:1e5,solidChildren:!1,tolerance:3,extent:4096,buffer:64,debug:0},i.prototype.splitTile=function(t,e,r,n,i,l,c){for(var h=[t,e,r,n],d=this.options,m=d.debug,g=null;h.length;){n=h.pop(),r=h.pop(),e=h.pop(),t=h.pop();var v=1<<e,y=a(e,r,n),b=this.tiles[y],x=e===d.maxZoom?0:d.tolerance/(v*d.extent);if(!b&&(m>1&&console.time("creation"),b=this.tiles[y]=p(t,v,r,n,x,e===d.maxZoom),this.tileCoords.push({z:e,x:r,y:n}),m)){m>1&&(console.log("tile z%d-%d-%d (features: %d, points: %d, simplified: %d)",e,r,n,b.numFeatures,b.numPoints,b.numSimplified),console.timeEnd("creation"));var _="z"+e;this.stats[_]=(this.stats[_]||0)+1,this.total++}if(b.source=t,i){if(e===d.maxZoom||e===i)continue;var w=1<<i-e;if(r!==Math.floor(l/w)||n!==Math.floor(c/w))continue}else if(e===d.indexMaxZoom||b.numPoints<=d.indexMaxPoints)continue;if(d.solidChildren||!u(b,d.extent,d.buffer)){b.source=null,m>1&&console.time("clipping");var M,k,A,T,S,E,L=.5*d.buffer/d.extent,C=.5-L,I=.5+L,z=1+L;M=k=A=T=null,S=f(t,v,r-L,r+I,0,o,b.min[0],b.max[0]),E=f(t,v,r+C,r+z,0,o,b.min[0],b.max[0]),S&&(M=f(S,v,n-L,n+I,1,s,b.min[1],b.max[1]),k=f(S,v,n+C,n+z,1,s,b.min[1],b.max[1])),E&&(A=f(E,v,n-L,n+I,1,s,b.min[1],b.max[1]),T=f(E,v,n+C,n+z,1,s,b.min[1],b.max[1])),m>1&&console.timeEnd("clipping"),t.length&&(h.push(M||[],e+1,2*r,2*n),h.push(k||[],e+1,2*r,2*n+1),h.push(A||[],e+1,2*r+1,2*n),h.push(T||[],e+1,2*r+1,2*n+1))}else i&&(g=e)}return g},i.prototype.getTile=function(t,e,r){var n=this.options,i=n.extent,o=n.debug,s=1<<t;e=(e%s+s)%s;var l=a(t,e,r);if(this.tiles[l])return h.tile(this.tiles[l],i);o>1&&console.log("drilling down to z%d-%d-%d",t,e,r);for(var c,f=t,d=e,p=r;!c&&f>0;)f--,d=Math.floor(d/2),p=Math.floor(p/2),c=this.tiles[a(f,d,p)];if(!c||!c.source)return null;if(o>1&&console.log("found parent tile z%d-%d-%d",f,d,p),u(c,i,n.buffer))return h.tile(c,i);o>1&&console.time("drilling down");var m=this.splitTile(c.source,f,d,p,t,e,r);if(o>1&&console.timeEnd("drilling down"),null!==m){var g=1<<t-m;l=a(m,Math.floor(e/g),Math.floor(r/g))}return this.tiles[l]?h.tile(this.tiles[l],i):null}},{"./clip":139,"./convert":140,"./tile":144,"./transform":145,"./wrap":146}],143:[function(t,e,r){"use strict";function n(t,e){var r,n,a,o,s=e*e,l=t.length,u=0,c=l-1,h=[];for(t[u][2]=1,t[c][2]=1;c;){for(n=0,r=u+1;r<c;r++)(a=i(t[r],t[u],t[c]))>n&&(o=r,n=a);n>s?(t[o][2]=n,h.push(u),h.push(o),u=o):(c=h.pop(),u=h.pop())}}function i(t,e,r){var n=e[0],i=e[1],a=r[0],o=r[1],s=t[0],l=t[1],u=a-n,c=o-i;if(0!==u||0!==c){var h=((s-n)*u+(l-i)*c)/(u*u+c*c);h>1?(n=a,i=o):h>0&&(n+=u*h,i+=c*h)}return u=s-n,c=l-i,u*u+c*c}e.exports=n},{}],144:[function(t,e,r){"use strict";function n(t,e,r,n,a,o){for(var s={features:[],numPoints:0,numSimplified:0,numFeatures:0,source:null,x:r,y:n,z2:e,transformed:!1,min:[2,1],max:[-1,0]},l=0;l<t.length;l++){s.numFeatures++,i(s,t[l],a,o);var u=t[l].min,c=t[l].max;u[0]<s.min[0]&&(s.min[0]=u[0]),u[1]<s.min[1]&&(s.min[1]=u[1]),c[0]>s.max[0]&&(s.max[0]=c[0]),c[1]>s.max[1]&&(s.max[1]=c[1])}return s}function i(t,e,r,n){var i,o,s,l,u=e.geometry,c=e.type,h=[],f=r*r;if(1===c)for(i=0;i<u.length;i++)h.push(u[i]),t.numPoints++,t.numSimplified++;else for(i=0;i<u.length;i++)if(s=u[i],n||!(2===c&&s.dist<r||3===c&&s.area<f)){var d=[];for(o=0;o<s.length;o++)l=s[o],(n||l[2]>f)&&(d.push(l),t.numSimplified++),t.numPoints++;3===c&&a(d,s.outer),h.push(d)}else t.numPoints+=s.length;if(h.length){var p={geometry:h,type:c,tags:e.tags||null};null!==e.id&&(p.id=e.id),t.features.push(p)}}function a(t,e){o(t)<0===e&&t.reverse()}function o(t){for(var e,r,n=0,i=0,a=t.length,o=a-1;i<a;o=i++)e=t[i],r=t[o],n+=(r[0]-e[0])*(e[1]+r[1]);return n}e.exports=n},{}],145:[function(t,e,r){"use strict";function n(t,e){if(t.transformed)return t;var r,n,a,o=t.z2,s=t.x,l=t.y;for(r=0;r<t.features.length;r++){var u=t.features[r],c=u.geometry;if(1===u.type)for(n=0;n<c.length;n++)c[n]=i(c[n],e,o,s,l);else for(n=0;n<c.length;n++){var h=c[n];for(a=0;a<h.length;a++)h[a]=i(h[a],e,o,s,l)}}return t.transformed=!0,t}function i(t,e,r,n,i){return[Math.round(e*(t[0]*r-n)),Math.round(e*(t[1]*r-i))]}r.tile=n,r.point=i},{}],146:[function(t,e,r){"use strict";function n(t,e,r){var n=t,a=o(t,1,-1-e,e,0,r,-1,2),s=o(t,1,1-e,2+e,0,r,-1,2);return(a||s)&&(n=o(t,1,-e,1+e,0,r,-1,2)||[],a&&(n=i(a,1).concat(n)),s&&(n=n.concat(i(s,-1)))),n}function i(t,e){for(var r=[],n=0;n<t.length;n++){var i,o=t[n],l=o.type;if(1===l)i=a(o.geometry,e);else{i=[];for(var u=0;u<o.geometry.length;u++)i.push(a(o.geometry[u],e))}r.push(s(o.tags,l,i,o.id))}return r}function a(t,e){var r=[];r.area=t.area,r.dist=t.dist;for(var n=0;n<t.length;n++)r.push([t[n][0]+e,t[n][1],t[n][2]]);return r}var o=t("./clip"),s=t("./feature");e.exports=n},{"./clip":139,"./feature":141}],147:[function(t,e,r){function n(t,e){if("string"!=typeof t)throw new TypeError("must specify type string");if(e=e||{},"undefined"==typeof document&&!e.canvas)return null;var r=e.canvas||document.createElement("canvas");"number"==typeof e.width&&(r.width=e.width),"number"==typeof e.height&&(r.height=e.height);var n,i=e;try{var a=[t];0===t.indexOf("webgl")&&a.push("experimental-"+t);for(var o=0;o<a.length;o++)if(n=r.getContext(a[o],i))return n}catch(t){n=null}return n||null}e.exports=n},{}],148:[function(t,e,r){"use strict";function n(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t}function i(t){this.gl=t,this.pixelRatio=1,this.bounds=[[-10,-10,-10],[10,10,10]],this.ticks=[[],[],[]],this.autoTicks=!0,this.tickSpacing=[1,1,1],this.tickEnable=[!0,!0,!0],this.tickFont=["sans-serif","sans-serif","sans-serif"],this.tickSize=[12,12,12],this.tickAngle=[0,0,0],this.tickColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.tickPad=[10,10,10],this.lastCubeProps={cubeEdges:[0,0,0],axis:[0,0,0]},this.labels=["x","y","z"],this.labelEnable=[!0,!0,!0],this.labelFont="sans-serif",this.labelSize=[20,20,20],this.labelAngle=[0,0,0],this.labelColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.labelPad=[10,10,10],this.lineEnable=[!0,!0,!0],this.lineMirror=[!1,!1,!1],this.lineWidth=[1,1,1],this.lineColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.lineTickEnable=[!0,!0,!0],this.lineTickMirror=[!1,!1,!1],this.lineTickLength=[0,0,0],this.lineTickWidth=[1,1,1],this.lineTickColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.gridEnable=[!0,!0,!0],this.gridWidth=[1,1,1],this.gridColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.zeroEnable=[!0,!0,!0],this.zeroLineColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.zeroLineWidth=[2,2,2],this.backgroundEnable=[!1,!1,!1],this.backgroundColor=[[.8,.8,.8,.5],[.8,.8,.8,.5],[.8,.8,.8,.5]],this._firstInit=!0,this._text=null,this._lines=null,this._background=c(t)}function a(){this.primalOffset=[0,0,0],this.primalMinor=[0,0,0],this.mirrorOffset=[0,0,0],this.mirrorMinor=[0,0,0]}function o(t,e,r,n,i){for(var a=t.primalOffset,o=t.primalMinor,s=t.mirrorOffset,l=t.mirrorMinor,u=n[e],c=0;c<3;++c)if(e!==c){var h=a,f=s,d=o,p=l
;u&1<<c&&(h=s,f=a,d=l,p=o),h[c]=r[0][c],f[c]=r[1][c],i[c]>0?(d[c]=-1,p[c]=0):(d[c]=0,p[c]=1)}}function s(t,e){var r=new i(t);return r.update(e),r}e.exports=s;var l=t("./lib/text.js"),u=t("./lib/lines.js"),c=t("./lib/background.js"),h=t("./lib/cube.js"),f=t("./lib/ticks.js"),d=new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]),p=i.prototype;p.update=function(t){function e(e,r,n){if(n in t){var i,a=t[n],o=this[n];(e?Array.isArray(a)&&Array.isArray(a[0]):Array.isArray(a))?this[n]=i=[r(a[0]),r(a[1]),r(a[2])]:this[n]=i=[r(a),r(a),r(a)];for(var s=0;s<3;++s)if(i[s]!==o[s])return!0}return!1}t=t||{};var r,n=e.bind(this,!1,Number),i=e.bind(this,!1,Boolean),a=e.bind(this,!1,String),o=e.bind(this,!0,function(t){if(Array.isArray(t)){if(3===t.length)return[+t[0],+t[1],+t[2],1];if(4===t.length)return[+t[0],+t[1],+t[2],+t[3]]}return[0,0,0,1]}),s=!1,c=!1;if("bounds"in t)for(var h=t.bounds,d=0;d<2;++d)for(var p=0;p<3;++p)h[d][p]!==this.bounds[d][p]&&(c=!0),this.bounds[d][p]=h[d][p];if("ticks"in t){r=t.ticks,s=!0,this.autoTicks=!1;for(var d=0;d<3;++d)this.tickSpacing[d]=0}else n("tickSpacing")&&(this.autoTicks=!0,c=!0);if(this._firstInit&&("ticks"in t||"tickSpacing"in t||(this.autoTicks=!0),c=!0,s=!0,this._firstInit=!1),c&&this.autoTicks&&(r=f.create(this.bounds,this.tickSpacing),s=!0),s){for(var d=0;d<3;++d)r[d].sort(function(t,e){return t.x-e.x});f.equal(r,this.ticks)?s=!1:this.ticks=r}i("tickEnable"),a("tickFont")&&(s=!0),n("tickSize"),n("tickAngle"),n("tickPad"),o("tickColor");var m=a("labels");a("labelFont")&&(m=!0),i("labelEnable"),n("labelSize"),n("labelPad"),o("labelColor"),i("lineEnable"),i("lineMirror"),n("lineWidth"),o("lineColor"),i("lineTickEnable"),i("lineTickMirror"),n("lineTickLength"),n("lineTickWidth"),o("lineTickColor"),i("gridEnable"),n("gridWidth"),o("gridColor"),i("zeroEnable"),o("zeroLineColor"),n("zeroLineWidth"),i("backgroundEnable"),o("backgroundColor"),this._text?this._text&&(m||s)&&this._text.update(this.bounds,this.labels,this.labelFont,this.ticks,this.tickFont):this._text=l(this.gl,this.bounds,this.labels,this.labelFont,this.ticks,this.tickFont),this._lines&&s&&(this._lines.dispose(),this._lines=null),this._lines||(this._lines=u(this.gl,this.bounds,this.ticks))};var m=[new a,new a,new a],g=[0,0,0],v={model:d,view:d,projection:d};p.isOpaque=function(){return!0},p.isTransparent=function(){return!1},p.drawTransparent=function(t){};var y=[0,0,0],b=[0,0,0],x=[0,0,0];p.draw=function(t){t=t||v;for(var e=this.gl,r=t.model||d,i=t.view||d,a=t.projection||d,s=this.bounds,l=h(r,i,a,s),u=l.cubeEdges,c=l.axis,f=i[12],p=i[13],_=i[14],w=i[15],M=this.pixelRatio*(a[3]*f+a[7]*p+a[11]*_+a[15]*w)/e.drawingBufferHeight,k=0;k<3;++k)this.lastCubeProps.cubeEdges[k]=u[k],this.lastCubeProps.axis[k]=c[k];for(var A=m,k=0;k<3;++k)o(m[k],k,this.bounds,u,c);for(var e=this.gl,T=g,k=0;k<3;++k)this.backgroundEnable[k]?T[k]=c[k]:T[k]=0;this._background.draw(r,i,a,s,T,this.backgroundColor),this._lines.bind(r,i,a,this);for(var k=0;k<3;++k){var S=[0,0,0];c[k]>0?S[k]=s[1][k]:S[k]=s[0][k];for(var E=0;E<2;++E){var L=(k+1+E)%3,C=(k+1+(1^E))%3;this.gridEnable[L]&&this._lines.drawGrid(L,C,this.bounds,S,this.gridColor[L],this.gridWidth[L]*this.pixelRatio)}for(var E=0;E<2;++E){var L=(k+1+E)%3,C=(k+1+(1^E))%3;this.zeroEnable[C]&&s[0][C]<=0&&s[1][C]>=0&&this._lines.drawZero(L,C,this.bounds,S,this.zeroLineColor[C],this.zeroLineWidth[C]*this.pixelRatio)}}for(var k=0;k<3;++k){this.lineEnable[k]&&this._lines.drawAxisLine(k,this.bounds,A[k].primalOffset,this.lineColor[k],this.lineWidth[k]*this.pixelRatio),this.lineMirror[k]&&this._lines.drawAxisLine(k,this.bounds,A[k].mirrorOffset,this.lineColor[k],this.lineWidth[k]*this.pixelRatio);for(var I=n(y,A[k].primalMinor),z=n(b,A[k].mirrorMinor),D=this.lineTickLength,E=0;E<3;++E){var P=M/r[5*E];I[E]*=D[E]*P,z[E]*=D[E]*P}this.lineTickEnable[k]&&this._lines.drawAxisTicks(k,A[k].primalOffset,I,this.lineTickColor[k],this.lineTickWidth[k]*this.pixelRatio),this.lineTickMirror[k]&&this._lines.drawAxisTicks(k,A[k].mirrorOffset,z,this.lineTickColor[k],this.lineTickWidth[k]*this.pixelRatio)}this._text.bind(r,i,a,this.pixelRatio);for(var k=0;k<3;++k){for(var O=A[k].primalMinor,R=n(x,A[k].primalOffset),E=0;E<3;++E)this.lineTickEnable[k]&&(R[E]+=M*O[E]*Math.max(this.lineTickLength[E],0)/r[5*E]);if(this.tickEnable[k]){for(var E=0;E<3;++E)R[E]+=M*O[E]*this.tickPad[E]/r[5*E];this._text.drawTicks(k,this.tickSize[k],this.tickAngle[k],R,this.tickColor[k])}if(this.labelEnable[k]){for(var E=0;E<3;++E)R[E]+=M*O[E]*this.labelPad[E]/r[5*E];R[k]+=.5*(s[0][k]+s[1][k]),this._text.drawLabel(k,this.labelSize[k],this.labelAngle[k],R,this.labelColor[k])}}},p.dispose=function(){this._text.dispose(),this._lines.dispose(),this._background.dispose(),this._lines=null,this._text=null,this._background=null,this.gl=null}},{"./lib/background.js":149,"./lib/cube.js":150,"./lib/lines.js":151,"./lib/text.js":153,"./lib/ticks.js":154}],149:[function(t,e,r){"use strict";function n(t,e,r,n){this.gl=t,this.buffer=e,this.vao=r,this.shader=n}function i(t){for(var e=[],r=[],i=0,l=0;l<3;++l)for(var u=(l+1)%3,c=(l+2)%3,h=[0,0,0],f=[0,0,0],d=-1;d<=1;d+=2){r.push(i,i+2,i+1,i+1,i+2,i+3),h[l]=d,f[l]=d;for(var p=-1;p<=1;p+=2){h[u]=p;for(var m=-1;m<=1;m+=2)h[c]=m,e.push(h[0],h[1],h[2],f[0],f[1],f[2]),i+=1}var g=u;u=c,c=g}var v=a(t,new Float32Array(e)),y=a(t,new Uint16Array(r),t.ELEMENT_ARRAY_BUFFER),b=o(t,[{buffer:v,type:t.FLOAT,size:3,offset:0,stride:24},{buffer:v,type:t.FLOAT,size:3,offset:12,stride:24}],y),x=s(t);return x.attributes.position.location=0,x.attributes.normal.location=1,new n(t,v,b,x)}e.exports=i;var a=t("gl-buffer"),o=t("gl-vao"),s=t("./shaders").bg,l=n.prototype;l.draw=function(t,e,r,n,i,a){for(var o=!1,s=0;s<3;++s)o=o||i[s];if(o){var l=this.gl;l.enable(l.POLYGON_OFFSET_FILL),l.polygonOffset(1,2),this.shader.bind(),this.shader.uniforms={model:t,view:e,projection:r,bounds:n,enable:i,colors:a},this.vao.bind(),this.vao.draw(this.gl.TRIANGLES,36),l.disable(l.POLYGON_OFFSET_FILL)}},l.dispose=function(){this.vao.dispose(),this.buffer.dispose(),this.shader.dispose()}},{"./shaders":152,"gl-buffer":156,"gl-vao":271}],150:[function(t,e,r){"use strict";function n(t,e,r){for(var n=0;n<4;++n){t[n]=r[12+n];for(var i=0;i<3;++i)t[n]+=e[i]*r[4*i+n]}}function i(t){for(var e=0;e<m.length;++e)if(t=l.positive(t,m[e]),t.length<3)return 0;for(var r=t[0],n=r[0]/r[3],i=r[1]/r[3],a=0,e=1;e+1<t.length;++e){var o=t[e],s=t[e+1],u=o[0]/o[3],c=o[1]/o[3],h=s[0]/s[3],f=s[1]/s[3],d=u-n,p=c-i,g=h-n,v=f-i;a+=Math.abs(d*v-p*g)}return a}function a(t,e,r,a){s(c,e,t),s(c,r,c);for(var l=0,m=0;m<2;++m){d[2]=a[m][2];for(var b=0;b<2;++b){d[1]=a[b][1];for(var x=0;x<2;++x)d[0]=a[x][0],n(h[l],d,c),l+=1}}for(var _=-1,m=0;m<8;++m){for(var w=h[m][3],M=0;M<3;++M)f[m][M]=h[m][M]/w;w<0&&(_<0?_=m:f[m][2]<f[_][2]&&(_=m))}if(_<0){_=0;for(var k=0;k<3;++k){for(var A=(k+2)%3,T=(k+1)%3,S=-1,E=-1,L=0;L<2;++L){var C=L<<k,I=C+(L<<A)+(1-L<<T),z=C+(1-L<<A)+(L<<T);u(f[C],f[I],f[z],p)<0||(L?S=1:E=1)}if(S<0||E<0)E>S&&(_|=1<<k);else{for(var L=0;L<2;++L){var C=L<<k,I=C+(L<<A)+(1-L<<T),z=C+(1-L<<A)+(L<<T),D=i([h[C],h[I],h[z],h[C+(1<<A)+(1<<T)]]);L?S=D:E=D}E>S&&(_|=1<<k)}}}for(var P=7^_,O=-1,m=0;m<8;++m)m!==_&&m!==P&&(O<0?O=m:f[O][1]>f[m][1]&&(O=m));for(var R=-1,m=0;m<3;++m){var F=O^1<<m;if(F!==_&&F!==P){R<0&&(R=F);var T=f[F];T[0]<f[R][0]&&(R=F)}}for(var j=-1,m=0;m<3;++m){var F=O^1<<m;if(F!==_&&F!==P&&F!==R){j<0&&(j=F);var T=f[F];T[0]>f[j][0]&&(j=F)}}var N=g;N[0]=N[1]=N[2]=0,N[o.log2(R^O)]=O&R,N[o.log2(O^j)]=O&j;var B=7^j;B===_||B===P?(B=7^R,N[o.log2(j^B)]=B&j):N[o.log2(R^B)]=B&R;for(var U=v,V=_,k=0;k<3;++k)U[k]=V&1<<k?-1:1;return y}e.exports=a;var o=t("bit-twiddle"),s=t("gl-mat4/multiply"),l=(t("gl-mat4/invert"),t("split-polygon")),u=t("robust-orientation"),c=new Array(16),h=(new Array(16),new Array(8)),f=new Array(8),d=new Array(3),p=[0,0,0];!function(){for(var t=0;t<8;++t)h[t]=[1,1,1,1],f[t]=[1,1,1]}();var m=[[0,0,1,0,0],[0,0,-1,1,0],[0,-1,0,1,0],[0,1,0,1,0],[-1,0,0,1,0],[1,0,0,1,0]],g=[1,1,1],v=[0,0,0],y={cubeEdges:g,axis:v}},{"bit-twiddle":67,"gl-mat4/invert":181,"gl-mat4/multiply":183,"robust-orientation":508,"split-polygon":526}],151:[function(t,e,r){"use strict";function n(t){return t[0]=t[1]=t[2]=0,t}function i(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t}function a(t,e,r,n,i,a,o,s){this.gl=t,this.vertBuffer=e,this.vao=r,this.shader=n,this.tickCount=i,this.tickOffset=a,this.gridCount=o,this.gridOffset=s}function o(t,e,r){var n=[],i=[0,0,0],o=[0,0,0],c=[0,0,0],h=[0,0,0];n.push(0,0,1,0,1,1,0,0,-1,0,0,-1,0,1,1,0,1,-1);for(var f=0;f<3;++f){for(var d=n.length/3|0,p=0;p<r[f].length;++p){var m=+r[f][p].x;n.push(m,0,1,m,1,1,m,0,-1,m,0,-1,m,1,1,m,1,-1)}var g=n.length/3|0;i[f]=d,o[f]=g-d;for(var d=n.length/3|0,v=0;v<r[f].length;++v){var m=+r[f][v].x;n.push(m,0,1,m,1,1,m,0,-1,m,0,-1,m,1,1,m,1,-1)}var g=n.length/3|0;c[f]=d,h[f]=g-d}var y=s(t,new Float32Array(n)),b=l(t,[{buffer:y,type:t.FLOAT,size:3,stride:0,offset:0}]),x=u(t);return x.attributes.position.location=0,new a(t,y,b,x,o,i,h,c)}e.exports=o;var s=t("gl-buffer"),l=t("gl-vao"),u=t("./shaders").line,c=[0,0,0],h=[0,0,0],f=[0,0,0],d=[0,0,0],p=[1,1],m=a.prototype;m.bind=function(t,e,r){this.shader.bind(),this.shader.uniforms.model=t,this.shader.uniforms.view=e,this.shader.uniforms.projection=r,p[0]=this.gl.drawingBufferWidth,p[1]=this.gl.drawingBufferHeight,this.shader.uniforms.screenShape=p,this.vao.bind()},m.drawAxisLine=function(t,e,r,a,o){var s=n(h);this.shader.uniforms.majorAxis=h,s[t]=e[1][t]-e[0][t],this.shader.uniforms.minorAxis=s;var l=i(d,r);l[t]+=e[0][t],this.shader.uniforms.offset=l,this.shader.uniforms.lineWidth=o,this.shader.uniforms.color=a;var u=n(f);u[(t+2)%3]=1,this.shader.uniforms.screenAxis=u,this.vao.draw(this.gl.TRIANGLES,6);var u=n(f);u[(t+1)%3]=1,this.shader.uniforms.screenAxis=u,this.vao.draw(this.gl.TRIANGLES,6)},m.drawAxisTicks=function(t,e,r,i,a){if(this.tickCount[t]){var o=n(c);o[t]=1,this.shader.uniforms.majorAxis=o,this.shader.uniforms.offset=e,this.shader.uniforms.minorAxis=r,this.shader.uniforms.color=i,this.shader.uniforms.lineWidth=a;var s=n(f);s[t]=1,this.shader.uniforms.screenAxis=s,this.vao.draw(this.gl.TRIANGLES,this.tickCount[t],this.tickOffset[t])}},m.drawGrid=function(t,e,r,a,o,s){if(this.gridCount[t]){var l=n(h);l[e]=r[1][e]-r[0][e],this.shader.uniforms.minorAxis=l;var u=i(d,a);u[e]+=r[0][e],this.shader.uniforms.offset=u;var p=n(c);p[t]=1,this.shader.uniforms.majorAxis=p;var m=n(f);m[t]=1,this.shader.uniforms.screenAxis=m,this.shader.uniforms.lineWidth=s,this.shader.uniforms.color=o,this.vao.draw(this.gl.TRIANGLES,this.gridCount[t],this.gridOffset[t])}},m.drawZero=function(t,e,r,a,o,s){var l=n(h);this.shader.uniforms.majorAxis=l,l[t]=r[1][t]-r[0][t],this.shader.uniforms.minorAxis=l;var u=i(d,a);u[t]+=r[0][t],this.shader.uniforms.offset=u;var c=n(f);c[e]=1,this.shader.uniforms.screenAxis=c,this.shader.uniforms.lineWidth=s,this.shader.uniforms.color=o,this.vao.draw(this.gl.TRIANGLES,6)},m.dispose=function(){this.vao.dispose(),this.vertBuffer.dispose(),this.shader.dispose()}},{"./shaders":152,"gl-buffer":156,"gl-vao":271}],152:[function(t,e,r){"use strict";var n=t("gl-shader");r.line=function(t){return n(t,"#define GLSLIFY 1\nattribute vec3 position;\n\nuniform mat4 model, view, projection;\nuniform vec3 offset, majorAxis, minorAxis, screenAxis;\nuniform float lineWidth;\nuniform vec2 screenShape;\n\nvec3 project(vec3 p) {\n vec4 pp = projection * view * model * vec4(p, 1.0);\n return pp.xyz / max(pp.w, 0.0001);\n}\n\nvoid main() {\n vec3 major = position.x * majorAxis;\n vec3 minor = position.y * minorAxis;\n\n vec3 vPosition = major + minor + offset;\n vec3 pPosition = project(vPosition);\n vec3 offset = project(vPosition + screenAxis * position.z);\n\n vec2 screen = normalize((offset - pPosition).xy * screenShape) / screenShape;\n\n gl_Position = vec4(pPosition + vec3(0.5 * screen * lineWidth, 0), 1.0);\n}\n","precision mediump float;\n#define GLSLIFY 1\nuniform vec4 color;\nvoid main() {\n gl_FragColor = color;\n}",null,[{name:"position",type:"vec3"}])};r.text=function(t){return n(t,"#define GLSLIFY 1\nattribute vec3 position;\n\nuniform mat4 model, view, projection;\nuniform vec3 offset, axis;\nuniform float scale, angle, pixelScale;\nuniform vec2 resolution;\n\nvoid main() { \n //Compute plane offset\n vec2 planeCoord = position.xy * pixelScale;\n mat2 planeXform = scale * mat2(cos(angle), sin(angle),\n -sin(angle), cos(angle));\n vec2 viewOffset = 2.0 * planeXform * planeCoord / resolution;\n\n //Compute world offset\n float axisDistance = position.z;\n vec3 dataPosition = axisDistance * axis + offset;\n vec4 worldPosition = model * vec4(dataPosition, 1);\n \n //Compute clip position\n vec4 viewPosition = view * worldPosition;\n vec4 clipPosition = projection * viewPosition;\n clipPosition /= clipPosition.w;\n\n //Apply text offset in clip coordinates\n clipPosition += vec4(viewOffset, 0, 0);\n\n //Done\n gl_Position = clipPosition;\n}","precision mediump float;\n#define GLSLIFY 1\nuniform vec4 color;\nvoid main() {\n gl_FragColor = color;\n}",null,[{name:"position",type:"vec3"}])};r.bg=function(t){return n(t,"#define GLSLIFY 1\nattribute vec3 position;\nattribute vec3 normal;\n\nuniform mat4 model, view, projection;\nuniform vec3 enable;\nuniform vec3 bounds[2];\n\nvarying vec3 colorChannel;\n\nvoid main() {\n if(dot(normal, enable) > 0.0) {\n vec3 nPosition = mix(bounds[0], bounds[1], 0.5 * (position + 1.0));\n gl_Position = projection * view * model * vec4(nPosition, 1.0);\n } else {\n gl_Position = vec4(0,0,0,0);\n }\n colorChannel = abs(normal);\n}","precision mediump float;\n#define GLSLIFY 1\n\nuniform vec4 colors[3];\n\nvarying vec3 colorChannel;\n\nvoid main() {\n gl_FragColor = colorChannel.x * colors[0] + \n colorChannel.y * colors[1] +\n colorChannel.z * colors[2];\n}",null,[{name:"position",type:"vec3"},{name:"normal",type:"vec3"}])}},{"gl-shader":255}],153:[function(t,e,r){(function(r){"use strict";function n(t,e,r,n){this.gl=t,this.shader=e,this.buffer=r,this.vao=n,this.tickOffset=this.tickCount=this.labelOffset=this.labelCount=null}function i(t,e){try{return l(t,e)}catch(t){return console.warn("error vectorizing text:",t),{cells:[],positions:[]}}}function a(t,e,r,i,a,l){var c=o(t),h=s(t,[{buffer:c,size:3}]),f=u(t);f.attributes.position.location=0;var d=new n(t,f,c,h);return d.update(e,r,i,a,l),d}e.exports=a;var o=t("gl-buffer"),s=t("gl-vao"),l=t("vectorize-text"),u=t("./shaders").text,c=window||r.global||{},h=c.__TEXT_CACHE||{};c.__TEXT_CACHE={};var f=n.prototype,d=[0,0];f.bind=function(t,e,r,n){this.vao.bind(),this.shader.bind();var i=this.shader.uniforms;i.model=t,i.view=e,i.projection=r,i.pixelScale=n,d[0]=this.gl.drawingBufferWidth,d[1]=this.gl.drawingBufferHeight,this.shader.uniforms.resolution=d},f.update=function(t,e,r,n,a){function o(t,e,r,n){var a=h[r];a||(a=h[r]={});var o=a[e];o||(o=a[e]=i(e,{triangles:!0,font:r,textAlign:"center",textBaseline:"middle"}));for(var l=(n||12)/12,u=o.positions,c=o.cells,f=0,d=c.length;f<d;++f)for(var p=c[f],m=2;m>=0;--m){var g=u[p[m]];s.push(l*g[0],-l*g[1],t)}}for(var s=(this.gl,[]),l=[0,0,0],u=[0,0,0],c=[0,0,0],f=[0,0,0],d=0;d<3;++d){c[d]=s.length/3|0,o(.5*(t[0][d]+t[1][d]),e[d],r),f[d]=(s.length/3|0)-c[d],l[d]=s.length/3|0;for(var p=0;p<n[d].length;++p)n[d][p].text&&o(n[d][p].x,n[d][p].text,n[d][p].font||a,n[d][p].fontSize||12);u[d]=(s.length/3|0)-l[d]}this.buffer.update(s),this.tickOffset=l,this.tickCount=u,this.labelOffset=c,this.labelCount=f};var p=[0,0,0];f.drawTicks=function(t,e,r,n,i){if(this.tickCount[t]){var a=p;a[0]=a[1]=a[2]=0,a[t]=1,this.shader.uniforms.axis=a,this.shader.uniforms.color=i,this.shader.uniforms.angle=r,this.shader.uniforms.scale=e,this.shader.uniforms.offset=n,this.vao.draw(this.gl.TRIANGLES,this.tickCount[t],this.tickOffset[t])}};var m=[0,0,0];f.drawLabel=function(t,e,r,n,i){this.labelCount[t]&&(this.shader.uniforms.axis=m,this.shader.uniforms.color=i,this.shader.uniforms.angle=r,this.shader.uniforms.scale=e,this.shader.uniforms.offset=n,this.vao.draw(this.gl.TRIANGLES,this.labelCount[t],this.labelOffset[t]))},f.dispose=function(){this.shader.dispose(),this.vao.dispose(),this.buffer.dispose()}}).call(this,t("_process"))},{"./shaders":152,_process:487,"gl-buffer":156,"gl-vao":271,"vectorize-text":554}],154:[function(t,e,r){"use strict";function n(t,e){var r=t+"",n=r.indexOf("."),i=0;n>=0&&(i=r.length-n-1);var a=Math.pow(10,i),o=Math.round(t*e*a),s=o+"";if(s.indexOf("e")>=0)return s;var l=o/a,u=o%a;o<0?(l=0|-Math.ceil(l),u=0|-u):(l=0|Math.floor(l),u|=0);var c=""+l;if(o<0&&(c="-"+c),i){for(var h=""+u;h.length<i;)h="0"+h;return c+"."+h}return c}function i(t,e){for(var r=[],i=0;i<3;++i){for(var a=[],o=(t[0][i],t[1][i],0);o*e[i]<=t[1][i];++o)a.push({x:o*e[i],text:n(e[i],o)});for(var o=-1;o*e[i]>=t[0][i];--o)a.push({x:o*e[i],text:n(e[i],o)});r.push(a)}return r}function a(t,e){for(var r=0;r<3;++r){if(t[r].length!==e[r].length)return!1;for(var n=0;n<t[r].length;++n){var i=t[r][n],a=e[r][n];if(i.x!==a.x||i.text!==a.text||i.font!==a.font||i.fontColor!==a.fontColor||i.fontSize!==a.fontSize||i.dx!==a.dx||i.dy!==a.dy)return!1}}return!0}r.create=i,r.equal=a},{}],155:[function(t,e,r){"use strict";function n(t,e,r){this.lo=t,this.hi=e,this.pixelsPerDataUnit=r}function i(t,e,r,n,i){for(var a=0;a<3;++a){for(var o=p,s=m,l=0;l<3;++l)s[l]=o[l]=r[l];s[3]=o[3]=1,s[a]+=1,h(s,s,e),s[3]<0&&(t[a]=1/0),o[a]-=1,h(o,o,e),o[3]<0&&(t[a]=1/0);var u=(o[0]/o[3]-s[0]/s[3])*n,c=(o[1]/o[3]-s[1]/s[3])*i;t[a]=.25*Math.sqrt(u*u+c*c)}return t}function a(t,e,r,n,a){var h=e.model||f,p=e.view||f,m=e.projection||f,y=t.bounds,a=a||l(h,p,m,y),b=a.axis;a.edges;u(d,p,h),u(d,m,d);for(var x=g,_=0;_<3;++_)x[_].lo=1/0,x[_].hi=-1/0,x[_].pixelsPerDataUnit=1/0;var w=o(c(d,d));c(d,d);for(var M=0;M<3;++M){var k=(M+1)%3,A=(M+2)%3,T=v;t:for(var _=0;_<2;++_){var S=[];if(b[M]<0!=!!_){T[M]=y[_][M];for(var E=0;E<2;++E){T[k]=y[E^_][k];for(var L=0;L<2;++L)T[A]=y[L^E^_][A],S.push(T.slice())}for(var E=0;E<w.length;++E){if(0===S.length)continue t;S=s.positive(S,w[E])}for(var E=0;E<S.length;++E)for(var A=S[E],C=i(v,d,A,r,n),L=0;L<3;++L)x[L].lo=Math.min(x[L].lo,A[L]),x[L].hi=Math.max(x[L].hi,A[L]),L!==M&&(x[L].pixelsPerDataUnit=Math.min(x[L].pixelsPerDataUnit,Math.abs(C[L])))}}}return x}e.exports=a;var o=t("extract-frustum-planes"),s=t("split-polygon"),l=t("./lib/cube.js"),u=t("gl-mat4/multiply"),c=t("gl-mat4/transpose"),h=t("gl-vec4/transformMat4"),f=new Float32Array([1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1]),d=new Float32Array(16),p=[0,0,0,1],m=[0,0,0,1],g=[new n(1/0,-1/0,1/0),new n(1/0,-1/0,1/0),new n(1/0,-1/0,1/0)],v=[0,0,0]},{"./lib/cube.js":150,"extract-frustum-planes":130,"gl-mat4/multiply":183,"gl-mat4/transpose":191,"gl-vec4/transformMat4":277,"split-polygon":526}],156:[function(t,e,r){"use strict";function n(t,e,r,n,i){this.gl=t,this.type=e,this.handle=r,this.length=n,this.usage=i}function i(t,e,r,n,i,a){var o=i.length*i.BYTES_PER_ELEMENT;if(a<0)return t.bufferData(e,i,n),o;if(o+a>r)throw new Error("gl-buffer: If resizing buffer, must not specify offset");return t.bufferSubData(e,a,i),r}function a(t,e){for(var r=l.malloc(t.length,e),n=t.length,i=0;i<n;++i)r[i]=t[i];return r}function o(t,e){for(var r=1,n=e.length-1;n>=0;--n){if(e[n]!==r)return!1;r*=t[n]}return!0}function s(t,e,r,i){if(r=r||t.ARRAY_BUFFER,i=i||t.DYNAMIC_DRAW,r!==t.ARRAY_BUFFER&&r!==t.ELEMENT_ARRAY_BUFFER)throw new Error("gl-buffer: Invalid type for webgl buffer, must be either gl.ARRAY_BUFFER or gl.ELEMENT_ARRAY_BUFFER");if(i!==t.DYNAMIC_DRAW&&i!==t.STATIC_DRAW&&i!==t.STREAM_DRAW)throw new Error("gl-buffer: Invalid usage for buffer, must be either gl.DYNAMIC_DRAW, gl.STATIC_DRAW or gl.STREAM_DRAW");var a=t.createBuffer(),o=new n(t,r,a,0,i);return o.update(e),o}var l=t("typedarray-pool"),u=t("ndarray-ops"),c=t("ndarray"),h=["uint8","uint8_clamped","uint16","uint32","int8","int16","int32","float32"],f=n.prototype;f.bind=function(){this.gl.bindBuffer(this.type,this.handle)},f.unbind=function(){this.gl.bindBuffer(this.type,null)},f.dispose=function(){this.gl.deleteBuffer(this.handle)},f.update=function(t,e){if("number"!=typeof e&&(e=-1),this.bind(),"object"==typeof t&&void 0!==t.shape){var r=t.dtype;if(h.indexOf(r)<0&&(r="float32"),this.type===this.gl.ELEMENT_ARRAY_BUFFER){r=gl.getExtension("OES_element_index_uint")&&"uint16"!==r?"uint32":"uint16"}if(r===t.dtype&&o(t.shape,t.stride))0===t.offset&&t.data.length===t.shape[0]?this.length=i(this.gl,this.type,this.length,this.usage,t.data,e):this.length=i(this.gl,this.type,this.length,this.usage,t.data.subarray(t.offset,t.shape[0]),e);else{var n=l.malloc(t.size,r),s=c(n,t.shape);u.assign(s,t),this.length=e<0?i(this.gl,this.type,this.length,this.usage,n,e):i(this.gl,this.type,this.length,this.usage,n.subarray(0,t.size),e),l.free(n)}}else if(Array.isArray(t)){var f;f=this.type===this.gl.ELEMENT_ARRAY_BUFFER?a(t,"uint16"):a(t,"float32"),this.length=e<0?i(this.gl,this.type,this.length,this.usage,f,e):i(this.gl,this.type,this.length,this.usage,f.subarray(0,t.length),e),l.free(f)}else if("object"==typeof t&&"number"==typeof t.length)this.length=i(this.gl,this.type,this.length,this.usage,t,e);else{if("number"!=typeof t&&void 0!==t)throw new Error("gl-buffer: Invalid data type");if(e>=0)throw new Error("gl-buffer: Cannot specify offset when resizing buffer");t|=0,t<=0&&(t=1),this.gl.bufferData(this.type,0|t,this.usage),this.length=t}},e.exports=s},{ndarray:467,"ndarray-ops":461,"typedarray-pool":541}],157:[function(t,e,r){e.exports={0:"NONE",1:"ONE",2:"LINE_LOOP",3:"LINE_STRIP",4:"TRIANGLES",5:"TRIANGLE_STRIP",6:"TRIANGLE_FAN",256:"DEPTH_BUFFER_BIT",512:"NEVER",513:"LESS",514:"EQUAL",515:"LEQUAL",516:"GREATER",517:"NOTEQUAL",518:"GEQUAL",519:"ALWAYS",768:"SRC_COLOR",769:"ONE_MINUS_SRC_COLOR",770:"SRC_ALPHA",771:"ONE_MINUS_SRC_ALPHA",772:"DST_ALPHA",773:"ONE_MINUS_DST_ALPHA",774:"DST_COLOR",775:"ONE_MINUS_DST_COLOR",776:"SRC_ALPHA_SATURATE",1024:"STENCIL_BUFFER_BIT",1028:"FRONT",1029:"BACK",1032:"FRONT_AND_BACK",1280:"INVALID_ENUM",1281:"INVALID_VALUE",1282:"INVALID_OPERATION",1285:"OUT_OF_MEMORY",1286:"INVALID_FRAMEBUFFER_OPERATION",2304:"CW",2305:"CCW",2849:"LINE_WIDTH",2884:"CULL_FACE",2885:"CULL_FACE_MODE",2886:"FRONT_FACE",2928:"DEPTH_RANGE",2929:"DEPTH_TEST",2930:"DEPTH_WRITEMASK",2931:"DEPTH_CLEAR_VALUE",2932:"DEPTH_FUNC",2960:"STENCIL_TEST",2961:"STENCIL_CLEAR_VALUE",2962:"STENCIL_FUNC",2963:"STENCIL_VALUE_MASK",2964:"STENCIL_FAIL",2965:"STENCIL_PASS_DEPTH_FAIL",2966:"STENCIL_PASS_DEPTH_PASS",2967:"STENCIL_REF",2968:"STENCIL_WRITEMASK",2978:"VIEWPORT",3024:"DITHER",3042:"BLEND",3088:"SCISSOR_BOX",3089:"SCISSOR_TEST",3106:"COLOR_CLEAR_VALUE",3107:"COLOR_WRITEMASK",3317:"UNPACK_ALIGNMENT",3333:"PACK_ALIGNMENT",3379:"MAX_TEXTURE_SIZE",3386:"MAX_VIEWPORT_DIMS",3408:"SUBPIXEL_BITS",3410:"RED_BITS",3411:"GREEN_BITS",3412:"BLUE_BITS",3413:"ALPHA_BITS",3414:"DEPTH_BITS",3415:"STENCIL_BITS",3553:"TEXTURE_2D",4352:"DONT_CARE",4353:"FASTEST",4354:"NICEST",5120:"BYTE",5121:"UNSIGNED_BYTE",5122:"SHORT",5123:"UNSIGNED_SHORT",5124:"INT",5125:"UNSIGNED_INT",5126:"FLOAT",5386:"INVERT",5890:"TEXTURE",6401:"STENCIL_INDEX",6402:"DEPTH_COMPONENT",6406:"ALPHA",6407:"RGB",6408:"RGBA",6409:"LUMINANCE",6410:"LUMINANCE_ALPHA",7680:"KEEP",7681:"REPLACE",7682:"INCR",7683:"DECR",7936:"VENDOR",7937:"RENDERER",7938:"VERSION",9728:"NEAREST",9729:"LINEAR",9984:"NEAREST_MIPMAP_NEAREST",9985:"LINEAR_MIPMAP_NEAREST",9986:"NEAREST_MIPMAP_LINEAR",9987:"LINEAR_MIPMAP_LINEAR",10240:"TEXTURE_MAG_FILTER",10241:"TEXTURE_MIN_FILTER",10242:"TEXTURE_WRAP_S",10243:"TEXTURE_WRAP_T",10497:"REPEAT",10752:"POLYGON_OFFSET_UNITS",16384:"COLOR_BUFFER_BIT",32769:"CONSTANT_COLOR",32770:"ONE_MINUS_CONSTANT_COLOR",32771:"CONSTANT_ALPHA",32772:"ONE_MINUS_CONSTANT_ALPHA",32773:"BLEND_COLOR",32774:"FUNC_ADD",32777:"BLEND_EQUATION_RGB",32778:"FUNC_SUBTRACT",32779:"FUNC_REVERSE_SUBTRACT",32819:"UNSIGNED_SHORT_4_4_4_4",32820:"UNSIGNED_SHORT_5_5_5_1",32823:"POLYGON_OFFSET_FILL",32824:"POLYGON_OFFSET_FACTOR",32854:"RGBA4",32855:"RGB5_A1",32873:"TEXTURE_BINDING_2D",32926:"SAMPLE_ALPHA_TO_COVERAGE",32928:"SAMPLE_COVERAGE",32936:"SAMPLE_BUFFERS",32937:"SAMPLES",32938:"SAMPLE_COVERAGE_VALUE",32939:"SAMPLE_COVERAGE_INVERT",32968:"BLEND_DST_RGB",32969:"BLEND_SRC_RGB",32970:"BLEND_DST_ALPHA",32971:"BLEND_SRC_ALPHA",33071:"CLAMP_TO_EDGE",33170:"GENERATE_MIPMAP_HINT",33189:"DEPTH_COMPONENT16",33306:"DEPTH_STENCIL_ATTACHMENT",33635:"UNSIGNED_SHORT_5_6_5",33648:"MIRRORED_REPEAT",33901:"ALIASED_POINT_SIZE_RANGE",33902:"ALIASED_LINE_WIDTH_RANGE",33984:"TEXTURE0",33985:"TEXTURE1",33986:"TEXTURE2",33987:"TEXTURE3",33988:"TEXTURE4",33989:"TEXTURE5",33990:"TEXTURE6",33991:"TEXTURE7",33992:"TEXTURE8",33993:"TEXTURE9",33994:"TEXTURE10",33995:"TEXTURE11",33996:"TEXTURE12",33997:"TEXTURE13",33998:"TEXTURE14",33999:"TEXTURE15",34e3:"TEXTURE16",34001:"TEXTURE17",34002:"TEXTURE18",34003:"TEXTURE19",34004:"TEXTURE20",34005:"TEXTURE21",34006:"TEXTURE22",34007:"TEXTURE23",34008:"TEXTURE24",34009:"TEXTURE25",34010:"TEXTURE26",34011:"TEXTURE27",34012:"TEXTURE28",34013:"TEXTURE29",34014:"TEXTURE30",34015:"TEXTURE31",34016:"ACTIVE_TEXTURE",34024:"MAX_RENDERBUFFER_SIZE",34041:"DEPTH_STENCIL",34055:"INCR_WRAP",34056:"DECR_WRAP",34067:"TEXTURE_CUBE_MAP",34068:"TEXTURE_BINDING_CUBE_MAP",34069:"TEXTURE_CUBE_MAP_POSITIVE_X",34070:"TEXTURE_CUBE_MAP_NEGATIVE_X",34071:"TEXTURE_CUBE_MAP_POSITIVE_Y",34072:"TEXTURE_CUBE_MAP_NEGATIVE_Y",34073:"TEXTURE_CUBE_MAP_POSITIVE_Z",34074:"TEXTURE_CUBE_MAP_NEGATIVE_Z",34076:"MAX_CUBE_MAP_TEXTURE_SIZE",34338:"VERTEX_ATTRIB_ARRAY_ENABLED",34339:"VERTEX_ATTRIB_ARRAY_SIZE",34340:"VERTEX_ATTRIB_ARRAY_STRIDE",34341:"VERTEX_ATTRIB_ARRAY_TYPE",34342:"CURRENT_VERTEX_ATTRIB",34373:"VERTEX_ATTRIB_ARRAY_POINTER",34466:"NUM_COMPRESSED_TEXTURE_FORMATS",34467:"COMPRESSED_TEXTURE_FORMATS",34660:"BUFFER_SIZE",34661:"BUFFER_USAGE",34816:"STENCIL_BACK_FUNC",34817:"STENCIL_BACK_FAIL",34818:"STENCIL_BACK_PASS_DEPTH_FAIL",34819:"STENCIL_BACK_PASS_DEPTH_PASS",34877:"BLEND_EQUATION_ALPHA",34921:"MAX_VERTEX_ATTRIBS",34922:"VERTEX_ATTRIB_ARRAY_NORMALIZED",34930:"MAX_TEXTURE_IMAGE_UNITS",34962:"ARRAY_BUFFER",34963:"ELEMENT_ARRAY_BUFFER",34964:"ARRAY_BUFFER_BINDING",34965:"ELEMENT_ARRAY_BUFFER_BINDING",34975:"VERTEX_ATTRIB_ARRAY_BUFFER_BINDING",35040:"STREAM_DRAW",35044:"STATIC_DRAW",35048:"DYNAMIC_DRAW",35632:"FRAGMENT_SHADER",35633:"VERTEX_SHADER",35660:"MAX_VERTEX_TEXTURE_IMAGE_UNITS",35661:"MAX_COMBINED_TEXTURE_IMAGE_UNITS",35663:"SHADER_TYPE",35664:"FLOAT_VEC2",35665:"FLOAT_VEC3",35666:"FLOAT_VEC4",35667:"INT_VEC2",35668:"INT_VEC3",35669:"INT_VEC4",35670:"BOOL",35671:"BOOL_VEC2",35672:"BOOL_VEC3",35673:"BOOL_VEC4",35674:"FLOAT_MAT2",35675:"FLOAT_MAT3",35676:"FLOAT_MAT4",35678:"SAMPLER_2D",35680:"SAMPLER_CUBE",35712:"DELETE_STATUS",35713:"COMPILE_STATUS",35714:"LINK_STATUS",35715:"VALIDATE_STATUS",35716:"INFO_LOG_LENGTH",35717:"ATTACHED_SHADERS",35718:"ACTIVE_UNIFORMS",35719:"ACTIVE_UNIFORM_MAX_LENGTH",35720:"SHADER_SOURCE_LENGTH",35721:"ACTIVE_ATTRIBUTES",35722:"ACTIVE_ATTRIBUTE_MAX_LENGTH",35724:"SHADING_LANGUAGE_VERSION",35725:"CURRENT_PROGRAM",36003:"STENCIL_BACK_REF",36004:"STENCIL_BACK_VALUE_MASK",36005:"STENCIL_BACK_WRITEMASK",36006:"FRAMEBUFFER_BINDING",36007:"RENDERBUFFER_BINDING",36048:"FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE",36049:"FRAMEBUFFER_ATTACHMENT_OBJECT_NAME",36050:"FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL",36051:"FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE",36053:"FRAMEBUFFER_COMPLETE",36054:"FRAMEBUFFER_INCOMPLETE_ATTACHMENT",36055:"FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT",36057:"FRAMEBUFFER_INCOMPLETE_DIMENSIONS",36061:"FRAMEBUFFER_UNSUPPORTED",36064:"COLOR_ATTACHMENT0",36096:"DEPTH_ATTACHMENT",36128:"STENCIL_ATTACHMENT",36160:"FRAMEBUFFER",36161:"RENDERBUFFER",36162:"RENDERBUFFER_WIDTH",36163:"RENDERBUFFER_HEIGHT",36164:"RENDERBUFFER_INTERNAL_FORMAT",36168:"STENCIL_INDEX8",36176:"RENDERBUFFER_RED_SIZE",36177:"RENDERBUFFER_GREEN_SIZE",36178:"RENDERBUFFER_BLUE_SIZE",36179:"RENDERBUFFER_ALPHA_SIZE",36180:"RENDERBUFFER_DEPTH_SIZE",36181:"RENDERBUFFER_STENCIL_SIZE",36194:"RGB565",36336:"LOW_FLOAT",36337:"MEDIUM_FLOAT",36338:"HIGH_FLOAT",36339:"LOW_INT",36340:"MEDIUM_INT",36341:"HIGH_INT",36346:"SHADER_COMPILER",36347:"MAX_VERTEX_UNIFORM_VECTORS",36348:"MAX_VARYING_VECTORS",36349:"MAX_FRAGMENT_UNIFORM_VECTORS",37440:"UNPACK_FLIP_Y_WEBGL",37441:"UNPACK_PREMULTIPLY_ALPHA_WEBGL",37442:"CONTEXT_LOST_WEBGL",37443:"UNPACK_COLORSPACE_CONVERSION_WEBGL",37444:"BROWSER_DEFAULT_WEBGL"}},{}],158:[function(t,e,r){var n=t("./1.0/numbers");e.exports=function(t){return n[t]}},{"./1.0/numbers":157}],159:[function(t,e,r){"use strict";function n(t,e,r,n){this.plot=t,this.shader=e,this.bufferHi=r,this.bufferLo=n,this.bounds=[1/0,1/0,-1/0,-1/0],this.numPoints=0,this.color=[0,0,0,1]}function i(t,e){var r=a(t.gl,l.vertex,l.fragment),i=o(t.gl),s=o(t.gl),u=new n(t,r,i,s);return u.update(e),t.addObject(u),u}var a=t("gl-shader"),o=t("gl-buffer"),s=t("typedarray-pool"),l=t("./lib/shaders");e.exports=i;var u=[[1,0,0,1,0,0],[1,0,0,-1,0,0],[-1,0,0,-1,0,0],[-1,0,0,-1,0,0],[-1,0,0,1,0,0],[1,0,0,1,0,0],[1,0,-1,0,0,1],[1,0,-1,0,0,-1],[1,0,1,0,0,-1],[1,0,1,0,0,-1],[1,0,1,0,0,1],[1,0,-1,0,0,1],[-1,0,-1,0,0,1],[-1,0,-1,0,0,-1],[-1,0,1,0,0,-1],[-1,0,1,0,0,-1],[-1,0,1,0,0,1],[-1,0,-1,0,0,1],[0,1,1,0,0,0],[0,1,-1,0,0,0],[0,-1,-1,0,0,0],[0,-1,-1,0,0,0],[0,1,1,0,0,0],[0,-1,1,0,0,0],[0,1,0,-1,1,0],[0,1,0,-1,-1,0],[0,1,0,1,-1,0],[0,1,0,1,1,0],[0,1,0,-1,1,0],[0,1,0,1,-1,0],[0,-1,0,-1,1,0],[0,-1,0,-1,-1,0],[0,-1,0,1,-1,0],[0,-1,0,1,1,0],[0,-1,0,-1,1,0],[0,-1,0,1,-1,0]],c=n.prototype;c.draw=function(){var t=new Float32Array([0,0]),e=new Float32Array([0,0]),r=new Float32Array([0,0]),n=new Float32Array([0,0]),i=[1,1];return function(){var a=this.plot,o=this.shader,s=this.bounds,l=this.numPoints;if(l){var c=a.gl,h=a.dataBox,f=a.viewBox,d=a.pixelRatio,p=s[2]-s[0],m=s[3]-s[1],g=h[2]-h[0],v=h[3]-h[1],y=2*p/g,b=2*m/v,x=(s[0]-h[0]-.5*g)/p,_=(s[1]-h[1]-.5*v)/m;t[0]=y,t[1]=b,e[0]=y-t[0],e[1]=b-t[1],r[0]=x,r[1]=_,n[0]=x-r[0],n[1]=_-r[1];var w=f[2]-f[0],M=f[3]-f[1];i[0]=2*d/w,i[1]=2*d/M,o.bind(),o.uniforms.scaleHi=t,o.uniforms.scaleLo=e,o.uniforms.translateHi=r,o.uniforms.translateLo=n,o.uniforms.pixelScale=i,o.uniforms.color=this.color,this.bufferLo.bind(),o.attributes.positionLo.pointer(c.FLOAT,!1,16,0),this.bufferHi.bind(),o.attributes.positionHi.pointer(c.FLOAT,!1,16,0),o.attributes.pixelOffset.pointer(c.FLOAT,!1,16,8),c.drawArrays(c.TRIANGLES,0,l*u.length)}}}(),c.drawPick=function(t){return t},c.pick=function(){return null},c.update=function(t){t=t||{};var e,r,n,i=t.positions||[],a=t.errors||[],o=1;"lineWidth"in t&&(o=+t.lineWidth);var l=5;"capSize"in t&&(l=+t.capSize),this.color=(t.color||[0,0,0,1]).slice();var c=this.bounds=[1/0,1/0,-1/0,-1/0],h=this.numPoints=i.length>>1;for(e=0;e<h;++e)r=i[2*e],n=i[2*e+1],c[0]=Math.min(r,c[0]),c[1]=Math.min(n,c[1]),c[2]=Math.max(r,c[2]),c[3]=Math.max(n,c[3]);c[2]===c[0]&&(c[2]+=1),c[3]===c[1]&&(c[3]+=1);var f=1/(c[2]-c[0]),d=1/(c[3]-c[1]),p=c[0],m=c[1],g=s.mallocFloat64(h*u.length*4),v=s.mallocFloat32(h*u.length*4),y=s.mallocFloat32(h*u.length*4),b=0;for(e=0;e<h;++e){r=i[2*e],n=i[2*e+1];for(var x=a[4*e],_=a[4*e+1],w=a[4*e+2],M=a[4*e+3],k=0;k<u.length;++k){var A=u[k],T=A[0],S=A[1];T<0?T*=x:T>0&&(T*=_),S<0?S*=w:S>0&&(S*=M),g[b++]=f*(r-p+T),g[b++]=d*(n-m+S),g[b++]=o*A[2]+(l+o)*A[4],g[b++]=o*A[3]+(l+o)*A[5]}}for(e=0;e<g.length;e++)v[e]=g[e],y[e]=g[e]-v[e];this.bufferHi.update(v),this.bufferLo.update(y),s.free(g)},c.dispose=function(){this.plot.removeObject(this),this.shader.dispose(),this.bufferHi.dispose(),this.bufferLo.dispose()}},{"./lib/shaders":160,"gl-buffer":156,"gl-shader":255,"typedarray-pool":541}],160:[function(t,e,r){e.exports={
vertex:"precision highp float;\n#define GLSLIFY 1\n\nattribute vec2 positionHi;\nattribute vec2 positionLo;\nattribute vec2 pixelOffset;\n\nuniform vec2 scaleHi, scaleLo, translateHi, translateLo, pixelScale;\n\nvec2 project(vec2 scHi, vec2 trHi, vec2 scLo, vec2 trLo, vec2 posHi, vec2 posLo) {\n return (posHi + trHi) * scHi\n + (posLo + trLo) * scHi\n + (posHi + trHi) * scLo\n + (posLo + trLo) * scLo;\n}\n\nvoid main() {\n vec3 scrPosition = vec3(\n project(scaleHi, translateHi, scaleLo, translateLo, positionHi, positionLo),\n 1);\n gl_Position = vec4(\n scrPosition.xy + scrPosition.z * pixelScale * pixelOffset,\n 0,\n scrPosition.z);\n}\n",fragment:"precision mediump float;\n#define GLSLIFY 1\n\nuniform vec4 color;\n\nvoid main() {\n gl_FragColor = vec4(color.rgb * color.a, color.a);\n}\n"}},{}],161:[function(t,e,r){"use strict";function n(t,e,r,n){this.gl=t,this.shader=n,this.buffer=e,this.vao=r,this.pixelRatio=1,this.bounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],this.clipBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.lineWidth=[1,1,1],this.capSize=[10,10,10],this.lineCount=[0,0,0],this.lineOffset=[0,0,0],this.opacity=1}function i(t,e){for(var r=0;r<3;++r)t[0][r]=Math.min(t[0][r],e[r]),t[1][r]=Math.max(t[1][r],e[r])}function a(t,e,r,n){for(var i=f[n],a=0;a<i.length;++a){var o=i[a];t.push(e[0],e[1],e[2],r[0],r[1],r[2],r[3],o[0],o[1],o[2])}return i.length}function o(t){var e=t.gl,r=s(e),i=l(e,[{buffer:r,type:e.FLOAT,size:3,offset:0,stride:40},{buffer:r,type:e.FLOAT,size:4,offset:12,stride:40},{buffer:r,type:e.FLOAT,size:3,offset:28,stride:40}]),a=u(e);a.attributes.position.location=0,a.attributes.color.location=1,a.attributes.offset.location=2;var o=new n(e,r,i,a);return o.update(t),o}e.exports=o;var s=t("gl-buffer"),l=t("gl-vao"),u=t("./shaders/index"),c=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],h=n.prototype;h.isOpaque=function(){return this.opacity>=1},h.isTransparent=function(){return this.opacity<1},h.drawTransparent=h.draw=function(t){var e=this.gl,r=this.shader.uniforms;this.shader.bind();var n=r.view=t.view||c,i=r.projection=t.projection||c;r.model=t.model||c,r.clipBounds=this.clipBounds,r.opacity=this.opacity;var a=n[12],o=n[13],s=n[14],l=n[15],u=this.pixelRatio*(i[3]*a+i[7]*o+i[11]*s+i[15]*l)/e.drawingBufferHeight;this.vao.bind();for(var h=0;h<3;++h)e.lineWidth(this.lineWidth[h]),r.capSize=this.capSize[h]*u,this.lineCount[h]&&e.drawArrays(e.LINES,this.lineOffset[h],this.lineCount[h]);this.vao.unbind()};var f=function(){for(var t=new Array(3),e=0;e<3;++e){for(var r=[],n=1;n<=2;++n)for(var i=-1;i<=1;i+=2){var a=(n+e)%3,o=[0,0,0];o[a]=i,r.push(o)}t[e]=r}return t}();h.update=function(t){t=t||{},"lineWidth"in t&&(this.lineWidth=t.lineWidth,Array.isArray(this.lineWidth)||(this.lineWidth=[this.lineWidth,this.lineWidth,this.lineWidth])),"capSize"in t&&(this.capSize=t.capSize,Array.isArray(this.capSize)||(this.capSize=[this.capSize,this.capSize,this.capSize])),"opacity"in t&&(this.opacity=t.opacity);var e=t.color||[[0,0,0],[0,0,0],[0,0,0]],r=t.position,n=t.error;if(Array.isArray(e[0])||(e=[e,e,e]),r&&n){var o=[],s=r.length,l=0;this.bounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],this.lineCount=[0,0,0];for(var u=0;u<3;++u){this.lineOffset[u]=l;t:for(var c=0;c<s;++c){for(var h=r[c],f=0;f<3;++f)if(isNaN(h[f])||!isFinite(h[f]))continue t;var d=n[c],p=e[u];if(Array.isArray(p[0])&&(p=e[c]),3===p.length&&(p=[p[0],p[1],p[2],1]),!isNaN(d[0][u])&&!isNaN(d[1][u])){if(d[0][u]<0){var m=h.slice();m[u]+=d[0][u],o.push(h[0],h[1],h[2],p[0],p[1],p[2],p[3],0,0,0,m[0],m[1],m[2],p[0],p[1],p[2],p[3],0,0,0),i(this.bounds,m),l+=2+a(o,m,p,u)}if(d[1][u]>0){var m=h.slice();m[u]+=d[1][u],o.push(h[0],h[1],h[2],p[0],p[1],p[2],p[3],0,0,0,m[0],m[1],m[2],p[0],p[1],p[2],p[3],0,0,0),i(this.bounds,m),l+=2+a(o,m,p,u)}}}this.lineCount[u]=l-this.lineOffset[u]}this.buffer.update(o)}},h.dispose=function(){this.shader.dispose(),this.buffer.dispose(),this.vao.dispose()}},{"./shaders/index":163,"gl-buffer":156,"gl-vao":271}],162:[function(t,e,r){e.exports=function(t){"string"==typeof t&&(t=[t]);for(var e=[].slice.call(arguments,1),r=[],n=0;n<t.length-1;n++)r.push(t[n],e[n]||"");return r.push(t[n]),r.join("")}},{}],163:[function(t,e,r){"use strict";var n=t("glslify"),i=t("gl-shader"),a=n(["precision mediump float;\n#define GLSLIFY 1\n\nattribute vec3 position, offset;\nattribute vec4 color;\nuniform mat4 model, view, projection;\nuniform float capSize;\nvarying vec4 fragColor;\nvarying vec3 fragPosition;\n\nvoid main() {\n vec4 worldPosition = model * vec4(position, 1.0);\n worldPosition = (worldPosition / worldPosition.w) + vec4(capSize * offset, 0.0);\n gl_Position = projection * view * worldPosition;\n fragColor = color;\n fragPosition = position;\n}"]),o=n(["precision mediump float;\n#define GLSLIFY 1\nuniform vec3 clipBounds[2];\nuniform float opacity;\nvarying vec3 fragPosition;\nvarying vec4 fragColor;\n\nvoid main() {\n if(any(lessThan(fragPosition, clipBounds[0])) || any(greaterThan(fragPosition, clipBounds[1]))) {\n discard;\n }\n gl_FragColor = opacity * fragColor;\n}"]);e.exports=function(t){return i(t,a,o,null,[{name:"position",type:"vec3"},{name:"color",type:"vec4"},{name:"offset",type:"vec3"}])}},{"gl-shader":255,glslify:162}],164:[function(t,e,r){"use strict";function n(t){return[t.getParameter(t.FRAMEBUFFER_BINDING),t.getParameter(t.RENDERBUFFER_BINDING),t.getParameter(t.TEXTURE_BINDING_2D)]}function i(t,e){t.bindFramebuffer(t.FRAMEBUFFER,e[0]),t.bindRenderbuffer(t.RENDERBUFFER,e[1]),t.bindTexture(t.TEXTURE_2D,e[2])}function a(t,e){var r=t.getParameter(e.MAX_COLOR_ATTACHMENTS_WEBGL);y=new Array(r+1);for(var n=0;n<=r;++n){for(var i=new Array(r),a=0;a<n;++a)i[a]=t.COLOR_ATTACHMENT0+a;for(var a=n;a<r;++a)i[a]=t.NONE;y[n]=i}}function o(t){switch(t){case p:throw new Error("gl-fbo: Framebuffer unsupported");case m:throw new Error("gl-fbo: Framebuffer incomplete attachment");case g:throw new Error("gl-fbo: Framebuffer incomplete dimensions");case v:throw new Error("gl-fbo: Framebuffer incomplete missing attachment");default:throw new Error("gl-fbo: Framebuffer failed for unspecified reason")}}function s(t,e,r,n,i,a){if(!n)return null;var o=d(t,e,r,i,n);return o.magFilter=t.NEAREST,o.minFilter=t.NEAREST,o.mipSamples=1,o.bind(),t.framebufferTexture2D(t.FRAMEBUFFER,a,t.TEXTURE_2D,o.handle,0),o}function l(t,e,r,n,i){var a=t.createRenderbuffer();return t.bindRenderbuffer(t.RENDERBUFFER,a),t.renderbufferStorage(t.RENDERBUFFER,n,e,r),t.framebufferRenderbuffer(t.FRAMEBUFFER,i,t.RENDERBUFFER,a),a}function u(t){var e=n(t.gl),r=t.gl,a=t.handle=r.createFramebuffer(),u=t._shape[0],c=t._shape[1],h=t.color.length,f=t._ext,d=t._useStencil,p=t._useDepth,m=t._colorType;r.bindFramebuffer(r.FRAMEBUFFER,a);for(var g=0;g<h;++g)t.color[g]=s(r,u,c,m,r.RGBA,r.COLOR_ATTACHMENT0+g);0===h?(t._color_rb=l(r,u,c,r.RGBA4,r.COLOR_ATTACHMENT0),f&&f.drawBuffersWEBGL(y[0])):h>1&&f.drawBuffersWEBGL(y[h]);var v=r.getExtension("WEBGL_depth_texture");v?d?t.depth=s(r,u,c,v.UNSIGNED_INT_24_8_WEBGL,r.DEPTH_STENCIL,r.DEPTH_STENCIL_ATTACHMENT):p&&(t.depth=s(r,u,c,r.UNSIGNED_SHORT,r.DEPTH_COMPONENT,r.DEPTH_ATTACHMENT)):p&&d?t._depth_rb=l(r,u,c,r.DEPTH_STENCIL,r.DEPTH_STENCIL_ATTACHMENT):p?t._depth_rb=l(r,u,c,r.DEPTH_COMPONENT16,r.DEPTH_ATTACHMENT):d&&(t._depth_rb=l(r,u,c,r.STENCIL_INDEX,r.STENCIL_ATTACHMENT));var b=r.checkFramebufferStatus(r.FRAMEBUFFER);if(b!==r.FRAMEBUFFER_COMPLETE){t._destroyed=!0,r.bindFramebuffer(r.FRAMEBUFFER,null),r.deleteFramebuffer(t.handle),t.handle=null,t.depth&&(t.depth.dispose(),t.depth=null),t._depth_rb&&(r.deleteRenderbuffer(t._depth_rb),t._depth_rb=null);for(var g=0;g<t.color.length;++g)t.color[g].dispose(),t.color[g]=null;t._color_rb&&(r.deleteRenderbuffer(t._color_rb),t._color_rb=null),i(r,e),o(b)}i(r,e)}function c(t,e,r,n,i,a,o,s){this.gl=t,this._shape=[0|e,0|r],this._destroyed=!1,this._ext=s,this.color=new Array(i);for(var l=0;l<i;++l)this.color[l]=null;this._color_rb=null,this.depth=null,this._depth_rb=null,this._colorType=n,this._useDepth=a,this._useStencil=o;var c=this,h=[0|e,0|r];Object.defineProperties(h,{0:{get:function(){return c._shape[0]},set:function(t){return c.width=t}},1:{get:function(){return c._shape[1]},set:function(t){return c.height=t}}}),this._shapeVector=h,u(this)}function h(t,e,r){if(t._destroyed)throw new Error("gl-fbo: Can't resize destroyed FBO");if(t._shape[0]!==e||t._shape[1]!==r){var a=t.gl,s=a.getParameter(a.MAX_RENDERBUFFER_SIZE);if(e<0||e>s||r<0||r>s)throw new Error("gl-fbo: Can't resize FBO, invalid dimensions");t._shape[0]=e,t._shape[1]=r;for(var l=n(a),u=0;u<t.color.length;++u)t.color[u].shape=t._shape;t._color_rb&&(a.bindRenderbuffer(a.RENDERBUFFER,t._color_rb),a.renderbufferStorage(a.RENDERBUFFER,a.RGBA4,t._shape[0],t._shape[1])),t.depth&&(t.depth.shape=t._shape),t._depth_rb&&(a.bindRenderbuffer(a.RENDERBUFFER,t._depth_rb),t._useDepth&&t._useStencil?a.renderbufferStorage(a.RENDERBUFFER,a.DEPTH_STENCIL,t._shape[0],t._shape[1]):t._useDepth?a.renderbufferStorage(a.RENDERBUFFER,a.DEPTH_COMPONENT16,t._shape[0],t._shape[1]):t._useStencil&&a.renderbufferStorage(a.RENDERBUFFER,a.STENCIL_INDEX,t._shape[0],t._shape[1])),a.bindFramebuffer(a.FRAMEBUFFER,t.handle);var c=a.checkFramebufferStatus(a.FRAMEBUFFER);c!==a.FRAMEBUFFER_COMPLETE&&(t.dispose(),i(a,l),o(c)),i(a,l)}}function f(t,e,r,n){p||(p=t.FRAMEBUFFER_UNSUPPORTED,m=t.FRAMEBUFFER_INCOMPLETE_ATTACHMENT,g=t.FRAMEBUFFER_INCOMPLETE_DIMENSIONS,v=t.FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT);var i=t.getExtension("WEBGL_draw_buffers");if(!y&&i&&a(t,i),Array.isArray(e)&&(n=r,r=0|e[1],e=0|e[0]),"number"!=typeof e)throw new Error("gl-fbo: Missing shape parameter");var o=t.getParameter(t.MAX_RENDERBUFFER_SIZE);if(e<0||e>o||r<0||r>o)throw new Error("gl-fbo: Parameters are too large for FBO");n=n||{};var s=1;if("color"in n){if((s=Math.max(0|n.color,0))<0)throw new Error("gl-fbo: Must specify a nonnegative number of colors");if(s>1){if(!i)throw new Error("gl-fbo: Multiple draw buffer extension not supported");if(s>t.getParameter(i.MAX_COLOR_ATTACHMENTS_WEBGL))throw new Error("gl-fbo: Context does not support "+s+" draw buffers")}}var l=t.UNSIGNED_BYTE,u=t.getExtension("OES_texture_float");if(n.float&&s>0){if(!u)throw new Error("gl-fbo: Context does not support floating point textures");l=t.FLOAT}else n.preferFloat&&s>0&&u&&(l=t.FLOAT);var h=!0;"depth"in n&&(h=!!n.depth);var f=!1;return"stencil"in n&&(f=!!n.stencil),new c(t,e,r,l,s,h,f,i)}var d=t("gl-texture2d");e.exports=f;var p,m,g,v,y=null,b=c.prototype;Object.defineProperties(b,{shape:{get:function(){return this._destroyed?[0,0]:this._shapeVector},set:function(t){if(Array.isArray(t)||(t=[0|t,0|t]),2!==t.length)throw new Error("gl-fbo: Shape vector must be length 2");var e=0|t[0],r=0|t[1];return h(this,e,r),[e,r]},enumerable:!1},width:{get:function(){return this._destroyed?0:this._shape[0]},set:function(t){return t|=0,h(this,t,this._shape[1]),t},enumerable:!1},height:{get:function(){return this._destroyed?0:this._shape[1]},set:function(t){return t|=0,h(this,this._shape[0],t),t},enumerable:!1}}),b.bind=function(){if(!this._destroyed){var t=this.gl;t.bindFramebuffer(t.FRAMEBUFFER,this.handle),t.viewport(0,0,this._shape[0],this._shape[1])}},b.dispose=function(){if(!this._destroyed){this._destroyed=!0;var t=this.gl;t.deleteFramebuffer(this.handle),this.handle=null,this.depth&&(this.depth.dispose(),this.depth=null),this._depth_rb&&(t.deleteRenderbuffer(this._depth_rb),this._depth_rb=null);for(var e=0;e<this.color.length;++e)this.color[e].dispose(),this.color[e]=null;this._color_rb&&(t.deleteRenderbuffer(this._color_rb),this._color_rb=null)}}},{"gl-texture2d":267}],165:[function(t,e,r){function n(t,e,r){"use strict";var n=o(e)||"of unknown name (see npm glsl-shader-name)",l="unknown type";void 0!==r&&(l=r===a.FRAGMENT_SHADER?"fragment":"vertex");for(var u=i("Error compiling %s shader %s:\n",l,n),c=i("%s%s",u,t),h=t.split("\n"),f={},d=0;d<h.length;d++){var p=h[d];if(""!==p){var m=parseInt(p.split(":")[2]);if(isNaN(m))throw new Error(i("Could not parse error: %s",p));f[m]=p}}for(var g=s(e).split("\n"),d=0;d<g.length;d++)if(f[d+3]||f[d+2]||f[d+1]){var v=g[d];if(u+=v+"\n",f[d+1]){var y=f[d+1];y=y.substr(y.split(":",3).join(":").length+1).trim(),u+=i("^^^ %s\n\n",y)}}return{long:u.trim(),short:c.trim()}}var i=t("sprintf-js").sprintf,a=t("gl-constants/lookup"),o=t("glsl-shader-name"),s=t("add-line-numbers");e.exports=n},{"add-line-numbers":40,"gl-constants/lookup":158,"glsl-shader-name":279,"sprintf-js":527}],166:[function(t,e,r){"use strict";function n(t,e,r,n,i,a,o){this.plot=t,this.shader=e,this.pickShader=r,this.positionBuffer=n,this.weightBuffer=i,this.colorBuffer=a,this.idBuffer=o,this.xData=[],this.yData=[],this.shape=[0,0],this.bounds=[1/0,1/0,-1/0,-1/0],this.pickOffset=0}function i(t,e){var r=t.gl,i=l(r,c.vertex,c.fragment),a=l(r,c.pickVertex,c.pickFragment),o=u(r),s=u(r),h=u(r),f=u(r),d=new n(t,i,a,o,s,h,f);return d.update(e),t.addObject(d),d}e.exports=i;var a=t("binary-search-bounds"),o=t("iota-array"),s=t("typedarray-pool"),l=t("gl-shader"),u=t("gl-buffer"),c=t("./lib/shaders"),h=n.prototype,f=[0,0,1,0,0,1,1,0,1,1,0,1];h.draw=function(){var t=[1,0,0,0,1,0,0,0,1];return function(){var e=this.plot,r=this.shader,n=this.bounds,i=this.numVertices;if(!(i<=0)){var a=e.gl,o=e.dataBox,s=n[2]-n[0],l=n[3]-n[1],u=o[2]-o[0],c=o[3]-o[1];t[0]=2*s/u,t[4]=2*l/c,t[6]=2*(n[0]-o[0])/u-1,t[7]=2*(n[1]-o[1])/c-1,r.bind();var h=r.uniforms;h.viewTransform=t,h.shape=this.shape;var f=r.attributes;this.positionBuffer.bind(),f.position.pointer(),this.weightBuffer.bind(),f.weight.pointer(a.UNSIGNED_BYTE,!1),this.colorBuffer.bind(),f.color.pointer(a.UNSIGNED_BYTE,!0),a.drawArrays(a.TRIANGLES,0,i)}}}(),h.drawPick=function(){var t=[1,0,0,0,1,0,0,0,1],e=[0,0,0,0];return function(r){var n=this.plot,i=this.pickShader,a=this.bounds,o=this.numVertices;if(!(o<=0)){var s=n.gl,l=n.dataBox,u=a[2]-a[0],c=a[3]-a[1],h=l[2]-l[0],f=l[3]-l[1];t[0]=2*u/h,t[4]=2*c/f,t[6]=2*(a[0]-l[0])/h-1,t[7]=2*(a[1]-l[1])/f-1;for(var d=0;d<4;++d)e[d]=r>>8*d&255;this.pickOffset=r,i.bind();var p=i.uniforms;p.viewTransform=t,p.pickOffset=e,p.shape=this.shape;var m=i.attributes;return this.positionBuffer.bind(),m.position.pointer(),this.weightBuffer.bind(),m.weight.pointer(s.UNSIGNED_BYTE,!1),this.idBuffer.bind(),m.pickId.pointer(s.UNSIGNED_BYTE,!1),s.drawArrays(s.TRIANGLES,0,o),r+this.shape[0]*this.shape[1]}}}(),h.pick=function(t,e,r){var n=this.pickOffset,i=this.shape[0]*this.shape[1];if(r<n||r>=n+i)return null;var a=r-n,o=this.xData,s=this.yData;return{object:this,pointId:a,dataCoord:[o[a%this.shape[0]],s[a/this.shape[0]|0]]}},h.update=function(t){t=t||{};var e=t.shape||[0,0],r=t.x||o(e[0]),n=t.y||o(e[1]),i=t.z||new Float32Array(e[0]*e[1]);this.xData=r,this.yData=n;var l=t.colorLevels||[0],u=t.colorValues||[0,0,0,1],c=l.length,h=this.bounds,d=h[0]=r[0],p=h[1]=n[0],m=h[2]=r[r.length-1],g=h[3]=n[n.length-1],v=1/(m-d),y=1/(g-p),b=e[0],x=e[1];this.shape=[b,x];var _=(b-1)*(x-1)*(f.length>>>1);this.numVertices=_;for(var w=s.mallocUint8(4*_),M=s.mallocFloat32(2*_),k=s.mallocUint8(2*_),A=s.mallocUint32(_),T=0,S=0;S<x-1;++S)for(var E=y*(n[S]-p),L=y*(n[S+1]-p),C=0;C<b-1;++C)for(var I=v*(r[C]-d),z=v*(r[C+1]-d),D=0;D<f.length;D+=2){var P,O,R,F,j=f[D],N=f[D+1],B=(S+N)*b+(C+j),U=i[B],V=a.le(l,U);if(V<0)P=u[0],O=u[1],R=u[2],F=u[3];else if(V===c-1)P=u[4*c-4],O=u[4*c-3],R=u[4*c-2],F=u[4*c-1];else{var H=(U-l[V])/(l[V+1]-l[V]),q=1-H,G=4*V,Y=4*(V+1);P=q*u[G]+H*u[Y],O=q*u[G+1]+H*u[Y+1],R=q*u[G+2]+H*u[Y+2],F=q*u[G+3]+H*u[Y+3]}w[4*T]=255*P,w[4*T+1]=255*O,w[4*T+2]=255*R,w[4*T+3]=255*F,M[2*T]=.5*I+.5*z,M[2*T+1]=.5*E+.5*L,k[2*T]=j,k[2*T+1]=N,A[T]=S*b+C,T+=1}this.positionBuffer.update(M),this.weightBuffer.update(k),this.colorBuffer.update(w),this.idBuffer.update(A),s.free(M),s.free(w),s.free(k),s.free(A)},h.dispose=function(){this.shader.dispose(),this.pickShader.dispose(),this.positionBuffer.dispose(),this.weightBuffer.dispose(),this.colorBuffer.dispose(),this.idBuffer.dispose(),this.plot.removeObject(this)}},{"./lib/shaders":167,"binary-search-bounds":168,"gl-buffer":156,"gl-shader":255,"iota-array":293,"typedarray-pool":541}],167:[function(t,e,r){"use strict";e.exports={fragment:"precision lowp float;\n#define GLSLIFY 1\nvarying vec4 fragColor;\nvoid main() {\n gl_FragColor = vec4(fragColor.rgb * fragColor.a, fragColor.a);\n}\n",vertex:"precision mediump float;\n#define GLSLIFY 1\n\nattribute vec2 position;\nattribute vec4 color;\nattribute vec2 weight;\n\nuniform vec2 shape;\nuniform mat3 viewTransform;\n\nvarying vec4 fragColor;\n\nvoid main() {\n vec3 vPosition = viewTransform * vec3( position + (weight-.5)/(shape-1.) , 1.0);\n fragColor = color;\n gl_Position = vec4(vPosition.xy, 0, vPosition.z);\n}\n",pickFragment:"precision mediump float;\n#define GLSLIFY 1\n\nvarying vec4 fragId;\nvarying vec2 vWeight;\n\nuniform vec2 shape;\nuniform vec4 pickOffset;\n\nvoid main() {\n vec2 d = step(.5, vWeight);\n vec4 id = fragId + pickOffset;\n id.x += d.x + d.y*shape.x;\n\n id.y += floor(id.x / 256.0);\n id.x -= floor(id.x / 256.0) * 256.0;\n\n id.z += floor(id.y / 256.0);\n id.y -= floor(id.y / 256.0) * 256.0;\n\n id.w += floor(id.z / 256.0);\n id.z -= floor(id.z / 256.0) * 256.0;\n\n gl_FragColor = id/255.;\n}\n",pickVertex:"precision mediump float;\n#define GLSLIFY 1\n\nattribute vec2 position;\nattribute vec4 pickId;\nattribute vec2 weight;\n\nuniform vec2 shape;\nuniform mat3 viewTransform;\n\nvarying vec4 fragId;\nvarying vec2 vWeight;\n\nvoid main() {\n vWeight = weight;\n\n fragId = pickId;\n\n vec3 vPosition = viewTransform * vec3( position + (weight-.5)/(shape-1.) , 1.0);\n gl_Position = vec4(vPosition.xy, 0, vPosition.z);\n}\n"}},{}],168:[function(t,e,r){arguments[4][84][0].apply(r,arguments)},{dup:84}],169:[function(t,e,r){r.lineVertex="precision highp float;\n#define GLSLIFY 1\n\nattribute vec2 aHi, aLo, dHi, dLo;\n\nuniform vec2 scaleHi, translateHi, scaleLo, translateLo, screenShape;\nuniform float width;\n\nvarying vec2 direction;\n\n\nvec2 project_1_0(vec2 scHi, vec2 trHi, vec2 scLo, vec2 trLo, vec2 posHi, vec2 posLo) {\n return (posHi + trHi) * scHi\n + (posLo + trLo) * scHi\n + (posHi + trHi) * scLo\n + (posLo + trLo) * scLo;\n}\n\n\nvec2 project_2_1(vec2 scHi, vec2 scLo, vec2 posHi, vec2 posLo) {\n return scHi * posHi\n + scLo * posHi\n + scHi * posLo\n + scLo * posLo;\n}\n\nvoid main() {\n vec2 p = project_1_0(scaleHi, translateHi, scaleLo, translateLo, aHi, aLo);\n vec2 dir = project_2_1(scaleHi, scaleLo, dHi, dLo);\n vec2 n = 0.5 * width * normalize(screenShape.yx * vec2(dir.y, -dir.x)) / screenShape.xy;\n vec2 tangent = normalize(screenShape.xy * dir);\n if(dir.x < 0.0 || (dir.x == 0.0 && dir.y < 0.0)) {\n direction = -tangent;\n } else {\n direction = tangent;\n }\n gl_Position = vec4(p + n, 0.0, 1.0);\n}",r.lineFragment="precision highp float;\n#define GLSLIFY 1\n\nuniform vec4 color;\nuniform vec2 screenShape;\nuniform sampler2D dashPattern;\nuniform float dashLength;\n\nvarying vec2 direction;\n\nvoid main() {\n float t = fract(dot(direction, gl_FragCoord.xy) / dashLength);\n vec4 pcolor = color * texture2D(dashPattern, vec2(t, 0.0)).r;\n gl_FragColor = vec4(pcolor.rgb * pcolor.a, pcolor.a);\n}",r.mitreVertex="precision highp float;\n#define GLSLIFY 1\n\nattribute vec2 aHi, aLo;\n\nuniform vec2 scaleHi, translateHi, scaleLo, translateLo;\nuniform float radius;\n\n\nvec2 project_1_0(vec2 scHi, vec2 trHi, vec2 scLo, vec2 trLo, vec2 posHi, vec2 posLo) {\n return (posHi + trHi) * scHi\n + (posLo + trLo) * scHi\n + (posHi + trHi) * scLo\n + (posLo + trLo) * scLo;\n}\n\n\nvoid main() {\n vec2 p = project_1_0(scaleHi, translateHi, scaleLo, translateLo, aHi, aLo);\n gl_Position = vec4(p, 0.0, 1.0);\n gl_PointSize = radius;\n}",r.mitreFragment="precision mediump float;\n#define GLSLIFY 1\n\nuniform vec4 color;\n\nvoid main() {\n if(length(gl_PointCoord.xy - 0.5) > 0.25) {\n discard;\n }\n gl_FragColor = vec4(color.rgb, color.a);\n}",r.pickVertex="precision highp float;\n#define GLSLIFY 1\n\nattribute vec2 aHi, aLo, dHi;\nattribute vec4 pick0, pick1;\n\nuniform vec2 scaleHi, translateHi, scaleLo, translateLo, screenShape;\nuniform float width;\n\nvarying vec4 pickA, pickB;\n\n\nvec2 project_1_0(vec2 scHi, vec2 trHi, vec2 scLo, vec2 trLo, vec2 posHi, vec2 posLo) {\n return (posHi + trHi) * scHi\n + (posLo + trLo) * scHi\n + (posHi + trHi) * scLo\n + (posLo + trLo) * scLo;\n}\n\n\nvoid main() {\n vec2 p = project_1_0(scaleHi, translateHi, scaleLo, translateLo, aHi, aLo);\n vec2 n = width * normalize(screenShape.yx * vec2(dHi.y, -dHi.x)) / screenShape.xy;\n gl_Position = vec4(p + n, 0, 1);\n pickA = pick0;\n pickB = pick1;\n}",r.pickFragment="precision mediump float;\n#define GLSLIFY 1\n\nuniform vec4 pickOffset;\n\nvarying vec4 pickA, pickB;\n\nvoid main() {\n vec4 fragId = vec4(pickA.xyz, 0.0);\n if(pickB.w > pickA.w) {\n fragId.xyz = pickB.xyz;\n }\n\n fragId += pickOffset;\n\n fragId.y += floor(fragId.x / 256.0);\n fragId.x -= floor(fragId.x / 256.0) * 256.0;\n\n fragId.z += floor(fragId.y / 256.0);\n fragId.y -= floor(fragId.y / 256.0) * 256.0;\n\n fragId.w += floor(fragId.z / 256.0);\n fragId.z -= floor(fragId.z / 256.0) * 256.0;\n\n gl_FragColor = fragId / 255.0;\n}",r.fillVertex="precision highp float;\n#define GLSLIFY 1\n\nattribute vec2 aHi, aLo, dHi;\n\nuniform vec2 scaleHi, translateHi, scaleLo, translateLo, projectAxis;\nuniform float projectValue, depth;\n\n\nvec2 project_1_0(vec2 scHi, vec2 trHi, vec2 scLo, vec2 trLo, vec2 posHi, vec2 posLo) {\n return (posHi + trHi) * scHi\n + (posLo + trLo) * scHi\n + (posHi + trHi) * scLo\n + (posLo + trLo) * scLo;\n}\n\n\nvoid main() {\n vec2 p = project_1_0(scaleHi, translateHi, scaleLo, translateLo, aHi, aLo);\n if(dHi.y < 0.0 || (dHi.y == 0.0 && dHi.x < 0.0)) {\n if(dot(p, projectAxis) < projectValue) {\n p = p * (1.0 - abs(projectAxis)) + projectAxis * projectValue;\n }\n }\n gl_Position = vec4(p, depth, 1);\n}",r.fillFragment="precision mediump float;\n#define GLSLIFY 1\n\nuniform vec4 color;\n\nvoid main() {\n gl_FragColor = vec4(color.rgb * color.a, color.a);\n}"},{}],170:[function(t,e,r){"use strict";function n(t,e,r,n,i,a,o,s,l){this.plot=t,this.dashPattern=e,this.lineBufferHi=r,this.lineBufferLo=n,this.pickBuffer=i,this.lineShader=a,this.mitreShader=o,this.fillShader=s,this.pickShader=l,this.usingDashes=!1,this.bounds=[1/0,1/0,-1/0,-1/0],this.width=1,this.color=[0,0,1,1],this.fill=[!1,!1,!1,!1],this.fillColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.data=null,this.numPoints=0,this.vertCount=0,this.pickOffset=0}function i(t){return t.map(function(t){return t.slice()})}function a(t,e){var r=t.gl,i=s(r),a=s(r),u=s(r),c=l(r,[1,1]),f=o(r,h.lineVertex,h.lineFragment),d=o(r,h.mitreVertex,h.mitreFragment),p=o(r,h.fillVertex,h.fillFragment),m=o(r,h.pickVertex,h.pickFragment),g=new n(t,c,i,a,u,f,d,p,m);return t.addObject(g),g.update(e),g}e.exports=a;var o=t("gl-shader"),s=t("gl-buffer"),l=t("gl-texture2d"),u=t("ndarray"),c=t("typedarray-pool"),h=t("./lib/shaders"),f=n.prototype;f.setProjectionModel=function(){var t={scaleHi:new Float32Array([0,0]),scaleLo:new Float32Array([0,0]),translateHi:new Float32Array([0,0]),translateLo:new Float32Array([0,0]),screenShape:[0,0]};return function(){var e=this.bounds,r=this.plot.viewBox,n=this.plot.dataBox,i=e[2]-e[0],a=e[3]-e[1],o=n[2]-n[0],s=n[3]-n[1],l=r[2]-r[0],u=r[3]-r[1],c=2*i/o,h=2*a/s,f=(e[0]-n[0]-.5*o)/i,d=(e[1]-n[1]-.5*s)/a;return t.scaleHi[0]=c,t.scaleHi[1]=h,t.scaleLo[0]=c-t.scaleHi[0],t.scaleLo[1]=h-t.scaleHi[1],t.translateHi[0]=f,t.translateHi[1]=d,t.translateLo[0]=f-t.translateHi[0],t.translateLo[1]=d-t.translateHi[1],t.screenShape[0]=l,t.screenShape[1]=u,t}}(),f.setProjectionUniforms=function(t,e){t.scaleHi=e.scaleHi,t.scaleLo=e.scaleLo,t.translateHi=e.translateHi,t.translateLo=e.translateLo,t.screenShape=e.screenShape},f.draw=function(){var t=[1,0],e=[-1,0],r=[0,1],n=[0,-1];return function(){var i=this.vertCount;if(i){var a=this.setProjectionModel(),o=this.plot,s=this.width,l=o.gl,u=o.pixelRatio,c=this.color,h=this.fillShader.attributes;this.lineBufferLo.bind(),h.aLo.pointer(l.FLOAT,!1,16,0),this.lineBufferHi.bind();var f=this.fill;if(f[0]||f[1]||f[2]||f[3]){var d=this.fillShader;d.bind();var p=d.uniforms;this.setProjectionUniforms(p,a),p.depth=o.nextDepthValue(),h.aHi.pointer(l.FLOAT,!1,16,0),h.dHi.pointer(l.FLOAT,!1,16,8),l.depthMask(!0),l.enable(l.DEPTH_TEST);var m=this.fillColor;f[0]&&(p.color=m[0],p.projectAxis=e,p.projectValue=1,l.drawArrays(l.TRIANGLES,0,i)),f[1]&&(p.color=m[1],p.projectAxis=n,p.projectValue=1,l.drawArrays(l.TRIANGLES,0,i)),f[2]&&(p.color=m[2],p.projectAxis=t,p.projectValue=1,l.drawArrays(l.TRIANGLES,0,i)),f[3]&&(p.color=m[3],p.projectAxis=r,p.projectValue=1,l.drawArrays(l.TRIANGLES,0,i)),l.depthMask(!1),l.disable(l.DEPTH_TEST)}var g=this.lineShader;g.bind(),this.lineBufferLo.bind(),g.attributes.aLo.pointer(l.FLOAT,!1,16,0),g.attributes.dLo.pointer(l.FLOAT,!1,16,8),this.lineBufferHi.bind();var v=g.uniforms;this.setProjectionUniforms(v,a),v.color=c,v.width=s*u,v.dashPattern=this.dashPattern.bind(),v.dashLength=this.dashLength*u;var y=g.attributes;if(y.aHi.pointer(l.FLOAT,!1,16,0),y.dHi.pointer(l.FLOAT,!1,16,8),l.drawArrays(l.TRIANGLES,0,i),s>2&&!this.usingDashes){var b=this.mitreShader;this.lineBufferLo.bind(),b.attributes.aLo.pointer(l.FLOAT,!1,48,0),this.lineBufferHi.bind(),b.bind();var x=b.uniforms;this.setProjectionUniforms(x,a),x.color=c,x.radius=s*u,b.attributes.aHi.pointer(l.FLOAT,!1,48,0),l.drawArrays(l.POINTS,0,i/3|0)}}}}(),f.drawPick=function(){var t=[0,0,0,0];return function(e){var r=this.vertCount,n=this.numPoints;if(this.pickOffset=e,!r)return e+n;var i=this.setProjectionModel(),a=this.plot,o=this.width,s=a.gl,l=a.pickPixelRatio,u=this.pickShader,c=this.pickBuffer;t[0]=255&e,t[1]=e>>>8&255,t[2]=e>>>16&255,t[3]=e>>>24,u.bind();var h=u.uniforms;this.setProjectionUniforms(h,i),h.width=o*l,h.pickOffset=t;var f=u.attributes;return this.lineBufferHi.bind(),f.aHi.pointer(s.FLOAT,!1,16,0),f.dHi.pointer(s.FLOAT,!1,16,8),this.lineBufferLo.bind(),f.aLo.pointer(s.FLOAT,!1,16,0),c.bind(),f.pick0.pointer(s.UNSIGNED_BYTE,!1,8,0),f.pick1.pointer(s.UNSIGNED_BYTE,!1,8,4),s.drawArrays(s.TRIANGLES,0,r),e+n}}(),f.pick=function(t,e,r){var n=this.pickOffset,i=this.numPoints;if(r<n||r>=n+i)return null;var a=r-n,o=this.data;return{object:this,pointId:a,dataCoord:[o[2*a],o[2*a+1]]}},f.update=function(t){t=t||{};var e,r,n,a,o,s=this.plot.gl;this.color=(t.color||[0,0,1,1]).slice(),this.width=+(t.width||1),this.fill=(t.fill||[!1,!1,!1,!1]).slice(),this.fillColor=i(t.fillColor||[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]]);var h=t.dashes||[1],f=0;for(e=0;e<h.length;++e)f+=h[e];var d=c.mallocUint8(f);n=0;var p=255;for(e=0;e<h.length;++e){for(r=0;r<h[e];++r)d[n++]=p;p^=255}this.dashPattern.dispose(),this.usingDashes=h.length>1,this.dashPattern=l(s,u(d,[f,1,4],[1,0,0])),this.dashPattern.minFilter=s.NEAREST,this.dashPattern.magFilter=s.NEAREST,this.dashLength=f,c.free(d);var m=t.positions;this.data=m;var g=this.bounds;g[0]=g[1]=1/0,g[2]=g[3]=-1/0;var v=this.numPoints=m.length>>>1;if(0!==v){for(e=0;e<v;++e)a=m[2*e],o=m[2*e+1],isNaN(a)||isNaN(o)||(g[0]=Math.min(g[0],a),g[1]=Math.min(g[1],o),g[2]=Math.max(g[2],a),g[3]=Math.max(g[3],o));g[0]===g[2]&&(g[2]+=1),g[3]===g[1]&&(g[3]+=1);var y=c.mallocFloat64(24*(v-1)),b=c.mallocFloat32(24*(v-1)),x=c.mallocFloat32(24*(v-1)),_=c.mallocUint32(12*(v-1)),w=b.length,M=_.length;n=v;for(var k=0;n>1;){var A=--n;a=m[2*n],o=m[2*n+1];var T=A-1,S=m[2*T],E=m[2*T+1];if(!(isNaN(a)||isNaN(o)||isNaN(S)||isNaN(E))){k+=1,a=(a-g[0])/(g[2]-g[0]),o=(o-g[1])/(g[3]-g[1]),S=(S-g[0])/(g[2]-g[0]),E=(E-g[1])/(g[3]-g[1]);var L=S-a,C=E-o,I=A|1<<24,z=A-1,D=A,P=A-1|1<<24;y[--w]=-C,y[--w]=-L,y[--w]=o,y[--w]=a,_[--M]=I,_[--M]=z,y[--w]=C,y[--w]=L,y[--w]=E,y[--w]=S,_[--M]=D,_[--M]=P,y[--w]=-C,y[--w]=-L,y[--w]=E,y[--w]=S,_[--M]=D,_[--M]=P,y[--w]=C,y[--w]=L,y[--w]=E,y[--w]=S,_[--M]=D,_[--M]=P,y[--w]=-C,y[--w]=-L,y[--w]=o,y[--w]=a,_[--M]=I,_[--M]=z,y[--w]=C,y[--w]=L,y[--w]=o,y[--w]=a,_[--M]=I,_[--M]=z}}for(e=0;e<y.length;e++)b[e]=y[e],x[e]=y[e]-b[e];this.vertCount=6*k,this.lineBufferHi.update(b.subarray(w)),this.lineBufferLo.update(x.subarray(w)),this.pickBuffer.update(_.subarray(M)),c.free(y),c.free(b),c.free(x),c.free(_)}},f.dispose=function(){this.plot.removeObject(this),this.lineBufferLo.dispose(),this.lineBufferHi.dispose(),this.pickBuffer.dispose(),this.lineShader.dispose(),this.mitreShader.dispose(),this.fillShader.dispose(),this.pickShader.dispose(),this.dashPattern.dispose()}},{"./lib/shaders":169,"gl-buffer":156,"gl-shader":255,"gl-texture2d":267,ndarray:467,"typedarray-pool":541}],171:[function(t,e,r){var n=t("gl-shader"),i="precision mediump float;\n#define GLSLIFY 1\n\nattribute vec3 position, nextPosition;\nattribute float arcLength, lineWidth;\nattribute vec4 color;\n\nuniform vec2 screenShape;\nuniform float pixelRatio;\nuniform mat4 model, view, projection;\n\nvarying vec4 fragColor;\nvarying vec3 worldPosition;\nvarying float pixelArcLength;\n\nvoid main() {\n vec4 projected = projection * view * model * vec4(position, 1.0);\n vec4 tangentClip = projection * view * model * vec4(nextPosition - position, 0.0);\n vec2 tangent = normalize(screenShape * tangentClip.xy);\n vec2 offset = 0.5 * pixelRatio * lineWidth * vec2(tangent.y, -tangent.x) / screenShape;\n\n gl_Position = vec4(projected.xy + projected.w * offset, projected.zw);\n\n worldPosition = position;\n pixelArcLength = arcLength;\n fragColor = color;\n}\n",a=[{name:"position",type:"vec3"},{name:"nextPosition",type:"vec3"},{name:"arcLength",type:"float"},{name:"lineWidth",type:"float"},{name:"color",type:"vec4"}];r.createShader=function(t){return n(t,i,"precision mediump float;\n#define GLSLIFY 1\n\nuniform vec3 clipBounds[2];\nuniform sampler2D dashTexture;\nuniform float dashScale;\nuniform float opacity;\n\nvarying vec3 worldPosition;\nvarying float pixelArcLength;\nvarying vec4 fragColor;\n\nvoid main() {\n if(any(lessThan(worldPosition, clipBounds[0])) || any(greaterThan(worldPosition, clipBounds[1]))) {\n discard;\n }\n float dashWeight = texture2D(dashTexture, vec2(dashScale * pixelArcLength, 0)).r;\n if(dashWeight < 0.5) {\n discard;\n }\n gl_FragColor = fragColor * opacity;\n}\n",null,a)},r.createPickShader=function(t){return n(t,i,"precision mediump float;\n#define GLSLIFY 1\n\n#define FLOAT_MAX 1.70141184e38\n#define FLOAT_MIN 1.17549435e-38\n\nlowp vec4 encode_float_1_0(highp float v) {\n highp float av = abs(v);\n\n //Handle special cases\n if(av < FLOAT_MIN) {\n return vec4(0.0, 0.0, 0.0, 0.0);\n } else if(v > FLOAT_MAX) {\n return vec4(127.0, 128.0, 0.0, 0.0) / 255.0;\n } else if(v < -FLOAT_MAX) {\n return vec4(255.0, 128.0, 0.0, 0.0) / 255.0;\n }\n\n highp vec4 c = vec4(0,0,0,0);\n\n //Compute exponent and mantissa\n highp float e = floor(log2(av));\n highp float m = av * pow(2.0, -e) - 1.0;\n \n //Unpack mantissa\n c[1] = floor(128.0 * m);\n m -= c[1] / 128.0;\n c[2] = floor(32768.0 * m);\n m -= c[2] / 32768.0;\n c[3] = floor(8388608.0 * m);\n \n //Unpack exponent\n highp float ebias = e + 127.0;\n c[0] = floor(ebias / 2.0);\n ebias -= c[0] * 2.0;\n c[1] += floor(ebias) * 128.0; \n\n //Unpack sign bit\n c[0] += 128.0 * step(0.0, -v);\n\n //Scale back to range\n return c / 255.0;\n}\n\n\n\nuniform float pickId;\nuniform vec3 clipBounds[2];\n\nvarying vec3 worldPosition;\nvarying float pixelArcLength;\nvarying vec4 fragColor;\n\nvoid main() {\n if(any(lessThan(worldPosition, clipBounds[0])) || any(greaterThan(worldPosition, clipBounds[1]))) {\n discard;\n }\n gl_FragColor = vec4(pickId/255.0, encode_float_1_0(pixelArcLength).xyz);\n}",null,a)}},{"gl-shader":255}],172:[function(t,e,r){"use strict";function n(t,e){for(var r=0,n=0;n<3;++n){var i=t[n]-e[n];r+=i*i}return Math.sqrt(r)}function i(t){
for(var e=[[-1e6,-1e6,-1e6],[1e6,1e6,1e6]],r=0;r<3;++r)e[0][r]=Math.max(t[0][r],e[0][r]),e[1][r]=Math.min(t[1][r],e[1][r]);return e}function a(t,e,r,n){this.arcLength=t,this.position=e,this.index=r,this.dataCoordinate=n}function o(t,e,r,n,i,a){this.gl=t,this.shader=e,this.pickShader=r,this.buffer=n,this.vao=i,this.clipBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.points=[],this.arcLength=[],this.vertexCount=0,this.bounds=[[0,0,0],[0,0,0]],this.pickId=0,this.lineWidth=1,this.texture=a,this.dashScale=1,this.opacity=1,this.dirty=!0,this.pixelRatio=1}function s(t){var e=t.gl||t.scene&&t.scene.gl,r=m(e);r.attributes.position.location=0,r.attributes.nextPosition.location=1,r.attributes.arcLength.location=2,r.attributes.lineWidth.location=3,r.attributes.color.location=4;var n=g(e);n.attributes.position.location=0,n.attributes.nextPosition.location=1,n.attributes.arcLength.location=2,n.attributes.lineWidth.location=3,n.attributes.color.location=4;for(var i=l(e),a=u(e,[{buffer:i,size:3,offset:0,stride:48},{buffer:i,size:3,offset:12,stride:48},{buffer:i,size:1,offset:24,stride:48},{buffer:i,size:1,offset:28,stride:48},{buffer:i,size:4,offset:32,stride:48}]),s=d(new Array(1024),[256,1,4]),h=0;h<1024;++h)s.data[h]=255;var f=c(e,s);f.wrap=e.REPEAT;var p=new o(e,r,n,i,a,f);return p.update(t),p}e.exports=s;var l=t("gl-buffer"),u=t("gl-vao"),c=t("gl-texture2d"),h=t("glsl-read-float"),f=t("binary-search-bounds"),d=t("ndarray"),p=t("./lib/shaders"),m=p.createShader,g=p.createPickShader,v=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],y=o.prototype;y.isTransparent=function(){return this.opacity<1},y.isOpaque=function(){return this.opacity>=1},y.pickSlots=1,y.setPickBase=function(t){this.pickId=t},y.drawTransparent=y.draw=function(t){var e=this.gl,r=this.shader,n=this.vao;r.bind(),r.uniforms={model:t.model||v,view:t.view||v,projection:t.projection||v,clipBounds:i(this.clipBounds),dashTexture:this.texture.bind(),dashScale:this.dashScale/this.arcLength[this.arcLength.length-1],opacity:this.opacity,screenShape:[e.drawingBufferWidth,e.drawingBufferHeight],pixelRatio:this.pixelRatio},n.bind(),n.draw(e.TRIANGLE_STRIP,this.vertexCount)},y.drawPick=function(t){var e=this.gl,r=this.pickShader,n=this.vao;r.bind(),r.uniforms={model:t.model||v,view:t.view||v,projection:t.projection||v,pickId:this.pickId,clipBounds:i(this.clipBounds),screenShape:[e.drawingBufferWidth,e.drawingBufferHeight],pixelRatio:this.pixelRatio},n.bind(),n.draw(e.TRIANGLE_STRIP,this.vertexCount)},y.update=function(t){var e,r;this.dirty=!0;var i=!!t.connectGaps;"dashScale"in t&&(this.dashScale=t.dashScale),"opacity"in t&&(this.opacity=+t.opacity);var a=t.position||t.positions;if(a){var o=t.color||t.colors||[0,0,0,1],s=t.lineWidth||1,l=[],u=[],c=[],h=0,p=0,m=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],g=!1;t:for(e=1;e<a.length;++e){var v=a[e-1],y=a[e];for(u.push(h),c.push(v.slice()),r=0;r<3;++r){if(isNaN(v[r])||isNaN(y[r])||!isFinite(v[r])||!isFinite(y[r])){if(!i&&l.length>0){for(var b=0;b<24;++b)l.push(l[l.length-12]);p+=2,g=!0}continue t}m[0][r]=Math.min(m[0][r],v[r],y[r]),m[1][r]=Math.max(m[1][r],v[r],y[r])}var x,_;Array.isArray(o[0])?(x=o[e-1],_=o[e]):x=_=o,3===x.length&&(x=[x[0],x[1],x[2],1]),3===_.length&&(_=[_[0],_[1],_[2],1]);var w;w=Array.isArray(s)?s[e-1]:s;var M=h;if(h+=n(v,y),g){for(r=0;r<2;++r)l.push(v[0],v[1],v[2],y[0],y[1],y[2],M,w,x[0],x[1],x[2],x[3]);p+=2,g=!1}l.push(v[0],v[1],v[2],y[0],y[1],y[2],M,w,x[0],x[1],x[2],x[3],v[0],v[1],v[2],y[0],y[1],y[2],M,-w,x[0],x[1],x[2],x[3],y[0],y[1],y[2],v[0],v[1],v[2],h,-w,_[0],_[1],_[2],_[3],y[0],y[1],y[2],v[0],v[1],v[2],h,w,_[0],_[1],_[2],_[3]),p+=4}if(this.buffer.update(l),u.push(h),c.push(a[a.length-1].slice()),this.bounds=m,this.vertexCount=p,this.points=c,this.arcLength=u,"dashes"in t){var k=t.dashes,A=k.slice();for(A.unshift(0),e=1;e<A.length;++e)A[e]=A[e-1]+A[e];var T=d(new Array(1024),[256,1,4]);for(e=0;e<256;++e){for(r=0;r<4;++r)T.set(e,0,r,0);1&f.le(A,A[A.length-1]*e/255)?T.set(e,0,0,0):T.set(e,0,0,255)}this.texture.setPixels(T)}}},y.dispose=function(){this.shader.dispose(),this.vao.dispose(),this.buffer.dispose()},y.pick=function(t){if(!t)return null;if(t.id!==this.pickId)return null;var e=h(t.value[0],t.value[1],t.value[2],0),r=f.le(this.arcLength,e);if(r<0)return null;if(r===this.arcLength.length-1)return new a(this.arcLength[this.arcLength.length-1],this.points[this.points.length-1].slice(),r);for(var n=this.points[r],i=this.points[Math.min(r+1,this.points.length-1)],o=(e-this.arcLength[r])/(this.arcLength[r+1]-this.arcLength[r]),s=1-o,l=[0,0,0],u=0;u<3;++u)l[u]=s*n[u]+o*i[u];var c=Math.min(o<.5?r:r+1,this.points.length-1);return new a(e,l,c,this.points[c])}},{"./lib/shaders":171,"binary-search-bounds":66,"gl-buffer":156,"gl-texture2d":267,"gl-vao":271,"glsl-read-float":278,ndarray:467}],173:[function(t,e,r){function n(t,e){var r=e[0],n=e[1],i=e[2],a=e[3],o=r*a-i*n;return o?(o=1/o,t[0]=a*o,t[1]=-n*o,t[2]=-i*o,t[3]=r*o,t):null}e.exports=n},{}],174:[function(t,e,r){function n(t,e){var r=e[0],n=e[1],i=e[2],a=e[3],o=e[4],s=e[5],l=e[6],u=e[7],c=e[8],h=c*o-s*u,f=-c*a+s*l,d=u*a-o*l,p=r*h+n*f+i*d;return p?(p=1/p,t[0]=h*p,t[1]=(-c*n+i*u)*p,t[2]=(s*n-i*o)*p,t[3]=f*p,t[4]=(c*r-i*l)*p,t[5]=(-s*r+i*a)*p,t[6]=d*p,t[7]=(-u*r+n*l)*p,t[8]=(o*r-n*a)*p,t):null}e.exports=n},{}],175:[function(t,e,r){function n(t){var e=new Float32Array(16);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e}e.exports=n},{}],176:[function(t,e,r){function n(){var t=new Float32Array(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}e.exports=n},{}],177:[function(t,e,r){function n(t){var e=t[0],r=t[1],n=t[2],i=t[3],a=t[4],o=t[5],s=t[6],l=t[7],u=t[8],c=t[9],h=t[10],f=t[11],d=t[12],p=t[13],m=t[14],g=t[15];return(e*o-r*a)*(h*g-f*m)-(e*s-n*a)*(c*g-f*p)+(e*l-i*a)*(c*m-h*p)+(r*s-n*o)*(u*g-f*d)-(r*l-i*o)*(u*m-h*d)+(n*l-i*s)*(u*p-c*d)}e.exports=n},{}],178:[function(t,e,r){function n(t,e){var r=e[0],n=e[1],i=e[2],a=e[3],o=r+r,s=n+n,l=i+i,u=r*o,c=n*o,h=n*s,f=i*o,d=i*s,p=i*l,m=a*o,g=a*s,v=a*l;return t[0]=1-h-p,t[1]=c+v,t[2]=f-g,t[3]=0,t[4]=c-v,t[5]=1-u-p,t[6]=d+m,t[7]=0,t[8]=f+g,t[9]=d-m,t[10]=1-u-h,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}e.exports=n},{}],179:[function(t,e,r){function n(t,e,r){var n=e[0],i=e[1],a=e[2],o=e[3],s=n+n,l=i+i,u=a+a,c=n*s,h=n*l,f=n*u,d=i*l,p=i*u,m=a*u,g=o*s,v=o*l,y=o*u;return t[0]=1-(d+m),t[1]=h+y,t[2]=f-v,t[3]=0,t[4]=h-y,t[5]=1-(c+m),t[6]=p+g,t[7]=0,t[8]=f+v,t[9]=p-g,t[10]=1-(c+d),t[11]=0,t[12]=r[0],t[13]=r[1],t[14]=r[2],t[15]=1,t}e.exports=n},{}],180:[function(t,e,r){function n(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t}e.exports=n},{}],181:[function(t,e,r){function n(t,e){var r=e[0],n=e[1],i=e[2],a=e[3],o=e[4],s=e[5],l=e[6],u=e[7],c=e[8],h=e[9],f=e[10],d=e[11],p=e[12],m=e[13],g=e[14],v=e[15],y=r*s-n*o,b=r*l-i*o,x=r*u-a*o,_=n*l-i*s,w=n*u-a*s,M=i*u-a*l,k=c*m-h*p,A=c*g-f*p,T=c*v-d*p,S=h*g-f*m,E=h*v-d*m,L=f*v-d*g,C=y*L-b*E+x*S+_*T-w*A+M*k;return C?(C=1/C,t[0]=(s*L-l*E+u*S)*C,t[1]=(i*E-n*L-a*S)*C,t[2]=(m*M-g*w+v*_)*C,t[3]=(f*w-h*M-d*_)*C,t[4]=(l*T-o*L-u*A)*C,t[5]=(r*L-i*T+a*A)*C,t[6]=(g*x-p*M-v*b)*C,t[7]=(c*M-f*x+d*b)*C,t[8]=(o*E-s*T+u*k)*C,t[9]=(n*T-r*E-a*k)*C,t[10]=(p*w-m*x+v*y)*C,t[11]=(h*x-c*w-d*y)*C,t[12]=(s*A-o*S-l*k)*C,t[13]=(r*S-n*A+i*k)*C,t[14]=(m*b-p*_-g*y)*C,t[15]=(c*_-h*b+f*y)*C,t):null}e.exports=n},{}],182:[function(t,e,r){function n(t,e,r,n){var a,o,s,l,u,c,h,f,d,p,m=e[0],g=e[1],v=e[2],y=n[0],b=n[1],x=n[2],_=r[0],w=r[1],M=r[2];return Math.abs(m-_)<1e-6&&Math.abs(g-w)<1e-6&&Math.abs(v-M)<1e-6?i(t):(h=m-_,f=g-w,d=v-M,p=1/Math.sqrt(h*h+f*f+d*d),h*=p,f*=p,d*=p,a=b*d-x*f,o=x*h-y*d,s=y*f-b*h,p=Math.sqrt(a*a+o*o+s*s),p?(p=1/p,a*=p,o*=p,s*=p):(a=0,o=0,s=0),l=f*s-d*o,u=d*a-h*s,c=h*o-f*a,p=Math.sqrt(l*l+u*u+c*c),p?(p=1/p,l*=p,u*=p,c*=p):(l=0,u=0,c=0),t[0]=a,t[1]=l,t[2]=h,t[3]=0,t[4]=o,t[5]=u,t[6]=f,t[7]=0,t[8]=s,t[9]=c,t[10]=d,t[11]=0,t[12]=-(a*m+o*g+s*v),t[13]=-(l*m+u*g+c*v),t[14]=-(h*m+f*g+d*v),t[15]=1,t)}var i=t("./identity");e.exports=n},{"./identity":180}],183:[function(t,e,r){function n(t,e,r){var n=e[0],i=e[1],a=e[2],o=e[3],s=e[4],l=e[5],u=e[6],c=e[7],h=e[8],f=e[9],d=e[10],p=e[11],m=e[12],g=e[13],v=e[14],y=e[15],b=r[0],x=r[1],_=r[2],w=r[3];return t[0]=b*n+x*s+_*h+w*m,t[1]=b*i+x*l+_*f+w*g,t[2]=b*a+x*u+_*d+w*v,t[3]=b*o+x*c+_*p+w*y,b=r[4],x=r[5],_=r[6],w=r[7],t[4]=b*n+x*s+_*h+w*m,t[5]=b*i+x*l+_*f+w*g,t[6]=b*a+x*u+_*d+w*v,t[7]=b*o+x*c+_*p+w*y,b=r[8],x=r[9],_=r[10],w=r[11],t[8]=b*n+x*s+_*h+w*m,t[9]=b*i+x*l+_*f+w*g,t[10]=b*a+x*u+_*d+w*v,t[11]=b*o+x*c+_*p+w*y,b=r[12],x=r[13],_=r[14],w=r[15],t[12]=b*n+x*s+_*h+w*m,t[13]=b*i+x*l+_*f+w*g,t[14]=b*a+x*u+_*d+w*v,t[15]=b*o+x*c+_*p+w*y,t}e.exports=n},{}],184:[function(t,e,r){function n(t,e,r,n,i){var a=1/Math.tan(e/2),o=1/(n-i);return t[0]=a/r,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=a,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=(i+n)*o,t[11]=-1,t[12]=0,t[13]=0,t[14]=2*i*n*o,t[15]=0,t}e.exports=n},{}],185:[function(t,e,r){function n(t,e,r,n){var i,a,o,s,l,u,c,h,f,d,p,m,g,v,y,b,x,_,w,M,k,A,T,S,E=n[0],L=n[1],C=n[2],I=Math.sqrt(E*E+L*L+C*C);return Math.abs(I)<1e-6?null:(I=1/I,E*=I,L*=I,C*=I,i=Math.sin(r),a=Math.cos(r),o=1-a,s=e[0],l=e[1],u=e[2],c=e[3],h=e[4],f=e[5],d=e[6],p=e[7],m=e[8],g=e[9],v=e[10],y=e[11],b=E*E*o+a,x=L*E*o+C*i,_=C*E*o-L*i,w=E*L*o-C*i,M=L*L*o+a,k=C*L*o+E*i,A=E*C*o+L*i,T=L*C*o-E*i,S=C*C*o+a,t[0]=s*b+h*x+m*_,t[1]=l*b+f*x+g*_,t[2]=u*b+d*x+v*_,t[3]=c*b+p*x+y*_,t[4]=s*w+h*M+m*k,t[5]=l*w+f*M+g*k,t[6]=u*w+d*M+v*k,t[7]=c*w+p*M+y*k,t[8]=s*A+h*T+m*S,t[9]=l*A+f*T+g*S,t[10]=u*A+d*T+v*S,t[11]=c*A+p*T+y*S,e!==t&&(t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t)}e.exports=n},{}],186:[function(t,e,r){function n(t,e,r){var n=Math.sin(r),i=Math.cos(r),a=e[4],o=e[5],s=e[6],l=e[7],u=e[8],c=e[9],h=e[10],f=e[11];return e!==t&&(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[4]=a*i+u*n,t[5]=o*i+c*n,t[6]=s*i+h*n,t[7]=l*i+f*n,t[8]=u*i-a*n,t[9]=c*i-o*n,t[10]=h*i-s*n,t[11]=f*i-l*n,t}e.exports=n},{}],187:[function(t,e,r){function n(t,e,r){var n=Math.sin(r),i=Math.cos(r),a=e[0],o=e[1],s=e[2],l=e[3],u=e[8],c=e[9],h=e[10],f=e[11];return e!==t&&(t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[0]=a*i-u*n,t[1]=o*i-c*n,t[2]=s*i-h*n,t[3]=l*i-f*n,t[8]=a*n+u*i,t[9]=o*n+c*i,t[10]=s*n+h*i,t[11]=l*n+f*i,t}e.exports=n},{}],188:[function(t,e,r){function n(t,e,r){var n=Math.sin(r),i=Math.cos(r),a=e[0],o=e[1],s=e[2],l=e[3],u=e[4],c=e[5],h=e[6],f=e[7];return e!==t&&(t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[0]=a*i+u*n,t[1]=o*i+c*n,t[2]=s*i+h*n,t[3]=l*i+f*n,t[4]=u*i-a*n,t[5]=c*i-o*n,t[6]=h*i-s*n,t[7]=f*i-l*n,t}e.exports=n},{}],189:[function(t,e,r){function n(t,e,r){var n=r[0],i=r[1],a=r[2];return t[0]=e[0]*n,t[1]=e[1]*n,t[2]=e[2]*n,t[3]=e[3]*n,t[4]=e[4]*i,t[5]=e[5]*i,t[6]=e[6]*i,t[7]=e[7]*i,t[8]=e[8]*a,t[9]=e[9]*a,t[10]=e[10]*a,t[11]=e[11]*a,t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t}e.exports=n},{}],190:[function(t,e,r){function n(t,e,r){var n,i,a,o,s,l,u,c,h,f,d,p,m=r[0],g=r[1],v=r[2];return e===t?(t[12]=e[0]*m+e[4]*g+e[8]*v+e[12],t[13]=e[1]*m+e[5]*g+e[9]*v+e[13],t[14]=e[2]*m+e[6]*g+e[10]*v+e[14],t[15]=e[3]*m+e[7]*g+e[11]*v+e[15]):(n=e[0],i=e[1],a=e[2],o=e[3],s=e[4],l=e[5],u=e[6],c=e[7],h=e[8],f=e[9],d=e[10],p=e[11],t[0]=n,t[1]=i,t[2]=a,t[3]=o,t[4]=s,t[5]=l,t[6]=u,t[7]=c,t[8]=h,t[9]=f,t[10]=d,t[11]=p,t[12]=n*m+s*g+h*v+e[12],t[13]=i*m+l*g+f*v+e[13],t[14]=a*m+u*g+d*v+e[14],t[15]=o*m+c*g+p*v+e[15]),t}e.exports=n},{}],191:[function(t,e,r){function n(t,e){if(t===e){var r=e[1],n=e[2],i=e[3],a=e[6],o=e[7],s=e[11];t[1]=e[4],t[2]=e[8],t[3]=e[12],t[4]=r,t[6]=e[9],t[7]=e[13],t[8]=n,t[9]=a,t[11]=e[14],t[12]=i,t[13]=o,t[14]=s}else t[0]=e[0],t[1]=e[4],t[2]=e[8],t[3]=e[12],t[4]=e[1],t[5]=e[5],t[6]=e[9],t[7]=e[13],t[8]=e[2],t[9]=e[6],t[10]=e[10],t[11]=e[14],t[12]=e[3],t[13]=e[7],t[14]=e[11],t[15]=e[15];return t}e.exports=n},{}],192:[function(t,e,r){"use strict";function n(t,e){switch(e.length){case 0:break;case 1:t[0]=1/e[0];break;case 4:i(t,e);break;case 9:a(t,e);break;case 16:o(t,e);break;default:throw new Error("currently supports matrices up to 4x4")}return t}e.exports=n;var i=t("gl-mat2/invert"),a=t("gl-mat3/invert"),o=t("gl-mat4/invert")},{"gl-mat2/invert":173,"gl-mat3/invert":174,"gl-mat4/invert":181}],193:[function(t,e,r){r.glMatrix=t("./gl-matrix/common.js"),r.mat2=t("./gl-matrix/mat2.js"),r.mat2d=t("./gl-matrix/mat2d.js"),r.mat3=t("./gl-matrix/mat3.js"),r.mat4=t("./gl-matrix/mat4.js"),r.quat=t("./gl-matrix/quat.js"),r.vec2=t("./gl-matrix/vec2.js"),r.vec3=t("./gl-matrix/vec3.js"),r.vec4=t("./gl-matrix/vec4.js")},{"./gl-matrix/common.js":194,"./gl-matrix/mat2.js":195,"./gl-matrix/mat2d.js":196,"./gl-matrix/mat3.js":197,"./gl-matrix/mat4.js":198,"./gl-matrix/quat.js":199,"./gl-matrix/vec2.js":200,"./gl-matrix/vec3.js":201,"./gl-matrix/vec4.js":202}],194:[function(t,e,r){var n={};n.EPSILON=1e-6,n.ARRAY_TYPE="undefined"!=typeof Float32Array?Float32Array:Array,n.RANDOM=Math.random,n.ENABLE_SIMD=!1,n.SIMD_AVAILABLE=n.ARRAY_TYPE===Float32Array&&"SIMD"in this,n.USE_SIMD=n.ENABLE_SIMD&&n.SIMD_AVAILABLE,n.setMatrixArrayType=function(t){n.ARRAY_TYPE=t};var i=Math.PI/180;n.toRadian=function(t){return t*i},n.equals=function(t,e){return Math.abs(t-e)<=n.EPSILON*Math.max(1,Math.abs(t),Math.abs(e))},e.exports=n},{}],195:[function(t,e,r){var n=t("./common.js"),i={};i.create=function(){var t=new n.ARRAY_TYPE(4);return t[0]=1,t[1]=0,t[2]=0,t[3]=1,t},i.clone=function(t){var e=new n.ARRAY_TYPE(4);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e},i.copy=function(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t},i.identity=function(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=1,t},i.fromValues=function(t,e,r,i){var a=new n.ARRAY_TYPE(4);return a[0]=t,a[1]=e,a[2]=r,a[3]=i,a},i.set=function(t,e,r,n,i){return t[0]=e,t[1]=r,t[2]=n,t[3]=i,t},i.transpose=function(t,e){if(t===e){var r=e[1];t[1]=e[2],t[2]=r}else t[0]=e[0],t[1]=e[2],t[2]=e[1],t[3]=e[3];return t},i.invert=function(t,e){var r=e[0],n=e[1],i=e[2],a=e[3],o=r*a-i*n;return o?(o=1/o,t[0]=a*o,t[1]=-n*o,t[2]=-i*o,t[3]=r*o,t):null},i.adjoint=function(t,e){var r=e[0];return t[0]=e[3],t[1]=-e[1],t[2]=-e[2],t[3]=r,t},i.determinant=function(t){return t[0]*t[3]-t[2]*t[1]},i.multiply=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=e[3],s=r[0],l=r[1],u=r[2],c=r[3];return t[0]=n*s+a*l,t[1]=i*s+o*l,t[2]=n*u+a*c,t[3]=i*u+o*c,t},i.mul=i.multiply,i.rotate=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=e[3],s=Math.sin(r),l=Math.cos(r);return t[0]=n*l+a*s,t[1]=i*l+o*s,t[2]=n*-s+a*l,t[3]=i*-s+o*l,t},i.scale=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=e[3],s=r[0],l=r[1];return t[0]=n*s,t[1]=i*s,t[2]=a*l,t[3]=o*l,t},i.fromRotation=function(t,e){var r=Math.sin(e),n=Math.cos(e);return t[0]=n,t[1]=r,t[2]=-r,t[3]=n,t},i.fromScaling=function(t,e){return t[0]=e[0],t[1]=0,t[2]=0,t[3]=e[1],t},i.str=function(t){return"mat2("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+")"},i.frob=function(t){return Math.sqrt(Math.pow(t[0],2)+Math.pow(t[1],2)+Math.pow(t[2],2)+Math.pow(t[3],2))},i.LDU=function(t,e,r,n){return t[2]=n[2]/n[0],r[0]=n[0],r[1]=n[1],r[3]=n[3]-t[2]*r[1],[t,e,r]},i.add=function(t,e,r){return t[0]=e[0]+r[0],t[1]=e[1]+r[1],t[2]=e[2]+r[2],t[3]=e[3]+r[3],t},i.subtract=function(t,e,r){return t[0]=e[0]-r[0],t[1]=e[1]-r[1],t[2]=e[2]-r[2],t[3]=e[3]-r[3],t},i.sub=i.subtract,i.exactEquals=function(t,e){return t[0]===e[0]&&t[1]===e[1]&&t[2]===e[2]&&t[3]===e[3]},i.equals=function(t,e){var r=t[0],i=t[1],a=t[2],o=t[3],s=e[0],l=e[1],u=e[2],c=e[3];return Math.abs(r-s)<=n.EPSILON*Math.max(1,Math.abs(r),Math.abs(s))&&Math.abs(i-l)<=n.EPSILON*Math.max(1,Math.abs(i),Math.abs(l))&&Math.abs(a-u)<=n.EPSILON*Math.max(1,Math.abs(a),Math.abs(u))&&Math.abs(o-c)<=n.EPSILON*Math.max(1,Math.abs(o),Math.abs(c))},i.multiplyScalar=function(t,e,r){return t[0]=e[0]*r,t[1]=e[1]*r,t[2]=e[2]*r,t[3]=e[3]*r,t},i.multiplyScalarAndAdd=function(t,e,r,n){return t[0]=e[0]+r[0]*n,t[1]=e[1]+r[1]*n,t[2]=e[2]+r[2]*n,t[3]=e[3]+r[3]*n,t},e.exports=i},{"./common.js":194}],196:[function(t,e,r){var n=t("./common.js"),i={};i.create=function(){var t=new n.ARRAY_TYPE(6);return t[0]=1,t[1]=0,t[2]=0,t[3]=1,t[4]=0,t[5]=0,t},i.clone=function(t){var e=new n.ARRAY_TYPE(6);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e},i.copy=function(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t},i.identity=function(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=1,t[4]=0,t[5]=0,t},i.fromValues=function(t,e,r,i,a,o){var s=new n.ARRAY_TYPE(6);return s[0]=t,s[1]=e,s[2]=r,s[3]=i,s[4]=a,s[5]=o,s},i.set=function(t,e,r,n,i,a,o){return t[0]=e,t[1]=r,t[2]=n,t[3]=i,t[4]=a,t[5]=o,t},i.invert=function(t,e){var r=e[0],n=e[1],i=e[2],a=e[3],o=e[4],s=e[5],l=r*a-n*i;return l?(l=1/l,t[0]=a*l,t[1]=-n*l,t[2]=-i*l,t[3]=r*l,t[4]=(i*s-a*o)*l,t[5]=(n*o-r*s)*l,t):null},i.determinant=function(t){return t[0]*t[3]-t[1]*t[2]},i.multiply=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=e[3],s=e[4],l=e[5],u=r[0],c=r[1],h=r[2],f=r[3],d=r[4],p=r[5];return t[0]=n*u+a*c,t[1]=i*u+o*c,t[2]=n*h+a*f,t[3]=i*h+o*f,t[4]=n*d+a*p+s,t[5]=i*d+o*p+l,t},i.mul=i.multiply,i.rotate=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=e[3],s=e[4],l=e[5],u=Math.sin(r),c=Math.cos(r);return t[0]=n*c+a*u,t[1]=i*c+o*u,t[2]=n*-u+a*c,t[3]=i*-u+o*c,t[4]=s,t[5]=l,t},i.scale=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=e[3],s=e[4],l=e[5],u=r[0],c=r[1];return t[0]=n*u,t[1]=i*u,t[2]=a*c,t[3]=o*c,t[4]=s,t[5]=l,t},i.translate=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=e[3],s=e[4],l=e[5],u=r[0],c=r[1];return t[0]=n,t[1]=i,t[2]=a,t[3]=o,t[4]=n*u+a*c+s,t[5]=i*u+o*c+l,t},i.fromRotation=function(t,e){var r=Math.sin(e),n=Math.cos(e);return t[0]=n,t[1]=r,t[2]=-r,t[3]=n,t[4]=0,t[5]=0,t},i.fromScaling=function(t,e){return t[0]=e[0],t[1]=0,t[2]=0,t[3]=e[1],t[4]=0,t[5]=0,t},i.fromTranslation=function(t,e){return t[0]=1,t[1]=0,t[2]=0,t[3]=1,t[4]=e[0],t[5]=e[1],t},i.str=function(t){return"mat2d("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+", "+t[4]+", "+t[5]+")"},i.frob=function(t){return Math.sqrt(Math.pow(t[0],2)+Math.pow(t[1],2)+Math.pow(t[2],2)+Math.pow(t[3],2)+Math.pow(t[4],2)+Math.pow(t[5],2)+1)},i.add=function(t,e,r){return t[0]=e[0]+r[0],t[1]=e[1]+r[1],t[2]=e[2]+r[2],t[3]=e[3]+r[3],t[4]=e[4]+r[4],t[5]=e[5]+r[5],t},i.subtract=function(t,e,r){return t[0]=e[0]-r[0],t[1]=e[1]-r[1],t[2]=e[2]-r[2],t[3]=e[3]-r[3],t[4]=e[4]-r[4],t[5]=e[5]-r[5],t},i.sub=i.subtract,i.multiplyScalar=function(t,e,r){return t[0]=e[0]*r,t[1]=e[1]*r,t[2]=e[2]*r,t[3]=e[3]*r,t[4]=e[4]*r,t[5]=e[5]*r,t},i.multiplyScalarAndAdd=function(t,e,r,n){return t[0]=e[0]+r[0]*n,t[1]=e[1]+r[1]*n,t[2]=e[2]+r[2]*n,t[3]=e[3]+r[3]*n,t[4]=e[4]+r[4]*n,t[5]=e[5]+r[5]*n,t},i.exactEquals=function(t,e){return t[0]===e[0]&&t[1]===e[1]&&t[2]===e[2]&&t[3]===e[3]&&t[4]===e[4]&&t[5]===e[5]},i.equals=function(t,e){var r=t[0],i=t[1],a=t[2],o=t[3],s=t[4],l=t[5],u=e[0],c=e[1],h=e[2],f=e[3],d=e[4],p=e[5];return Math.abs(r-u)<=n.EPSILON*Math.max(1,Math.abs(r),Math.abs(u))&&Math.abs(i-c)<=n.EPSILON*Math.max(1,Math.abs(i),Math.abs(c))&&Math.abs(a-h)<=n.EPSILON*Math.max(1,Math.abs(a),Math.abs(h))&&Math.abs(o-f)<=n.EPSILON*Math.max(1,Math.abs(o),Math.abs(f))&&Math.abs(s-d)<=n.EPSILON*Math.max(1,Math.abs(s),Math.abs(d))&&Math.abs(l-p)<=n.EPSILON*Math.max(1,Math.abs(l),Math.abs(p))},e.exports=i},{"./common.js":194}],197:[function(t,e,r){var n=t("./common.js"),i={};i.create=function(){var t=new n.ARRAY_TYPE(9);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},i.fromMat4=function(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[4],t[4]=e[5],t[5]=e[6],t[6]=e[8],t[7]=e[9],t[8]=e[10],t},i.clone=function(t){var e=new n.ARRAY_TYPE(9);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e},i.copy=function(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t},i.fromValues=function(t,e,r,i,a,o,s,l,u){var c=new n.ARRAY_TYPE(9);return c[0]=t,c[1]=e,c[2]=r,c[3]=i,c[4]=a,c[5]=o,c[6]=s,c[7]=l,c[8]=u,c},i.set=function(t,e,r,n,i,a,o,s,l,u){return t[0]=e,t[1]=r,t[2]=n,t[3]=i,t[4]=a,t[5]=o,t[6]=s,t[7]=l,t[8]=u,t},i.identity=function(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},i.transpose=function(t,e){if(t===e){var r=e[1],n=e[2],i=e[5];t[1]=e[3],t[2]=e[6],t[3]=r,t[5]=e[7],t[6]=n,t[7]=i}else t[0]=e[0],t[1]=e[3],t[2]=e[6],t[3]=e[1],t[4]=e[4],t[5]=e[7],t[6]=e[2],t[7]=e[5],t[8]=e[8];return t},i.invert=function(t,e){var r=e[0],n=e[1],i=e[2],a=e[3],o=e[4],s=e[5],l=e[6],u=e[7],c=e[8],h=c*o-s*u,f=-c*a+s*l,d=u*a-o*l,p=r*h+n*f+i*d;return p?(p=1/p,t[0]=h*p,t[1]=(-c*n+i*u)*p,t[2]=(s*n-i*o)*p,t[3]=f*p,t[4]=(c*r-i*l)*p,t[5]=(-s*r+i*a)*p,t[6]=d*p,t[7]=(-u*r+n*l)*p,t[8]=(o*r-n*a)*p,t):null},i.adjoint=function(t,e){var r=e[0],n=e[1],i=e[2],a=e[3],o=e[4],s=e[5],l=e[6],u=e[7],c=e[8];return t[0]=o*c-s*u,t[1]=i*u-n*c,t[2]=n*s-i*o,t[3]=s*l-a*c,t[4]=r*c-i*l,t[5]=i*a-r*s,t[6]=a*u-o*l,t[7]=n*l-r*u,t[8]=r*o-n*a,t},i.determinant=function(t){var e=t[0],r=t[1],n=t[2],i=t[3],a=t[4],o=t[5],s=t[6],l=t[7],u=t[8];return e*(u*a-o*l)+r*(-u*i+o*s)+n*(l*i-a*s)},i.multiply=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=e[3],s=e[4],l=e[5],u=e[6],c=e[7],h=e[8],f=r[0],d=r[1],p=r[2],m=r[3],g=r[4],v=r[5],y=r[6],b=r[7],x=r[8];return t[0]=f*n+d*o+p*u,t[1]=f*i+d*s+p*c,t[2]=f*a+d*l+p*h,t[3]=m*n+g*o+v*u,t[4]=m*i+g*s+v*c,t[5]=m*a+g*l+v*h,t[6]=y*n+b*o+x*u,t[7]=y*i+b*s+x*c,t[8]=y*a+b*l+x*h,t},i.mul=i.multiply,i.translate=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=e[3],s=e[4],l=e[5],u=e[6],c=e[7],h=e[8],f=r[0],d=r[1];return t[0]=n,t[1]=i,t[2]=a,t[3]=o,t[4]=s,t[5]=l,t[6]=f*n+d*o+u,t[7]=f*i+d*s+c,t[8]=f*a+d*l+h,t},i.rotate=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=e[3],s=e[4],l=e[5],u=e[6],c=e[7],h=e[8],f=Math.sin(r),d=Math.cos(r);return t[0]=d*n+f*o,t[1]=d*i+f*s,t[2]=d*a+f*l,t[3]=d*o-f*n,t[4]=d*s-f*i,t[5]=d*l-f*a,t[6]=u,t[7]=c,t[8]=h,t},i.scale=function(t,e,r){var n=r[0],i=r[1];return t[0]=n*e[0],t[1]=n*e[1],t[2]=n*e[2],t[3]=i*e[3],t[4]=i*e[4],t[5]=i*e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t},i.fromTranslation=function(t,e){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=1,t[5]=0,t[6]=e[0],t[7]=e[1],t[8]=1,t},i.fromRotation=function(t,e){var r=Math.sin(e),n=Math.cos(e);return t[0]=n,t[1]=r,t[2]=0,t[3]=-r,t[4]=n,t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},i.fromScaling=function(t,e){return t[0]=e[0],t[1]=0,t[2]=0,t[3]=0,t[4]=e[1],t[5]=0,t[6]=0,t[7]=0,t[8]=1,t},i.fromMat2d=function(t,e){return t[0]=e[0],t[1]=e[1],t[2]=0,t[3]=e[2],t[4]=e[3],t[5]=0,t[6]=e[4],t[7]=e[5],t[8]=1,t},i.fromQuat=function(t,e){var r=e[0],n=e[1],i=e[2],a=e[3],o=r+r,s=n+n,l=i+i,u=r*o,c=n*o,h=n*s,f=i*o,d=i*s,p=i*l,m=a*o,g=a*s,v=a*l;return t[0]=1-h-p,t[3]=c-v,t[6]=f+g,t[1]=c+v,t[4]=1-u-p,t[7]=d-m,t[2]=f-g,t[5]=d+m,t[8]=1-u-h,t},i.normalFromMat4=function(t,e){var r=e[0],n=e[1],i=e[2],a=e[3],o=e[4],s=e[5],l=e[6],u=e[7],c=e[8],h=e[9],f=e[10],d=e[11],p=e[12],m=e[13],g=e[14],v=e[15],y=r*s-n*o,b=r*l-i*o,x=r*u-a*o,_=n*l-i*s,w=n*u-a*s,M=i*u-a*l,k=c*m-h*p,A=c*g-f*p,T=c*v-d*p,S=h*g-f*m,E=h*v-d*m,L=f*v-d*g,C=y*L-b*E+x*S+_*T-w*A+M*k;return C?(C=1/C,t[0]=(s*L-l*E+u*S)*C,t[1]=(l*T-o*L-u*A)*C,t[2]=(o*E-s*T+u*k)*C,t[3]=(i*E-n*L-a*S)*C,t[4]=(r*L-i*T+a*A)*C,t[5]=(n*T-r*E-a*k)*C,t[6]=(m*M-g*w+v*_)*C,t[7]=(g*x-p*M-v*b)*C,t[8]=(p*w-m*x+v*y)*C,t):null},i.str=function(t){return"mat3("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+", "+t[4]+", "+t[5]+", "+t[6]+", "+t[7]+", "+t[8]+")"},i.frob=function(t){return Math.sqrt(Math.pow(t[0],2)+Math.pow(t[1],2)+Math.pow(t[2],2)+Math.pow(t[3],2)+Math.pow(t[4],2)+Math.pow(t[5],2)+Math.pow(t[6],2)+Math.pow(t[7],2)+Math.pow(t[8],2))},i.add=function(t,e,r){return t[0]=e[0]+r[0],t[1]=e[1]+r[1],t[2]=e[2]+r[2],t[3]=e[3]+r[3],t[4]=e[4]+r[4],t[5]=e[5]+r[5],t[6]=e[6]+r[6],t[7]=e[7]+r[7],t[8]=e[8]+r[8],t},i.subtract=function(t,e,r){return t[0]=e[0]-r[0],t[1]=e[1]-r[1],t[2]=e[2]-r[2],t[3]=e[3]-r[3],t[4]=e[4]-r[4],t[5]=e[5]-r[5],t[6]=e[6]-r[6],t[7]=e[7]-r[7],t[8]=e[8]-r[8],t},i.sub=i.subtract,i.multiplyScalar=function(t,e,r){return t[0]=e[0]*r,t[1]=e[1]*r,t[2]=e[2]*r,t[3]=e[3]*r,t[4]=e[4]*r,t[5]=e[5]*r,t[6]=e[6]*r,t[7]=e[7]*r,t[8]=e[8]*r,t},i.multiplyScalarAndAdd=function(t,e,r,n){return t[0]=e[0]+r[0]*n,t[1]=e[1]+r[1]*n,t[2]=e[2]+r[2]*n,t[3]=e[3]+r[3]*n,t[4]=e[4]+r[4]*n,t[5]=e[5]+r[5]*n,t[6]=e[6]+r[6]*n,t[7]=e[7]+r[7]*n,t[8]=e[8]+r[8]*n,t},i.exactEquals=function(t,e){return t[0]===e[0]&&t[1]===e[1]&&t[2]===e[2]&&t[3]===e[3]&&t[4]===e[4]&&t[5]===e[5]&&t[6]===e[6]&&t[7]===e[7]&&t[8]===e[8]},i.equals=function(t,e){var r=t[0],i=t[1],a=t[2],o=t[3],s=t[4],l=t[5],u=t[6],c=t[7],h=t[8],f=e[0],d=e[1],p=e[2],m=e[3],g=e[4],v=e[5],y=t[6],b=e[7],x=e[8];return Math.abs(r-f)<=n.EPSILON*Math.max(1,Math.abs(r),Math.abs(f))&&Math.abs(i-d)<=n.EPSILON*Math.max(1,Math.abs(i),Math.abs(d))&&Math.abs(a-p)<=n.EPSILON*Math.max(1,Math.abs(a),Math.abs(p))&&Math.abs(o-m)<=n.EPSILON*Math.max(1,Math.abs(o),Math.abs(m))&&Math.abs(s-g)<=n.EPSILON*Math.max(1,Math.abs(s),Math.abs(g))&&Math.abs(l-v)<=n.EPSILON*Math.max(1,Math.abs(l),Math.abs(v))&&Math.abs(u-y)<=n.EPSILON*Math.max(1,Math.abs(u),Math.abs(y))&&Math.abs(c-b)<=n.EPSILON*Math.max(1,Math.abs(c),Math.abs(b))&&Math.abs(h-x)<=n.EPSILON*Math.max(1,Math.abs(h),Math.abs(x))},e.exports=i},{"./common.js":194}],198:[function(t,e,r){var n=t("./common.js"),i={scalar:{},SIMD:{}};i.create=function(){var t=new n.ARRAY_TYPE(16);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},i.clone=function(t){var e=new n.ARRAY_TYPE(16);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e[4]=t[4],e[5]=t[5],e[6]=t[6],e[7]=t[7],e[8]=t[8],e[9]=t[9],e[10]=t[10],e[11]=t[11],e[12]=t[12],e[13]=t[13],e[14]=t[14],e[15]=t[15],e},i.copy=function(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t},i.fromValues=function(t,e,r,i,a,o,s,l,u,c,h,f,d,p,m,g){var v=new n.ARRAY_TYPE(16);return v[0]=t,v[1]=e,v[2]=r,v[3]=i,v[4]=a,v[5]=o,v[6]=s,v[7]=l,v[8]=u,v[9]=c,v[10]=h,v[11]=f,v[12]=d,v[13]=p,v[14]=m,v[15]=g,v},i.set=function(t,e,r,n,i,a,o,s,l,u,c,h,f,d,p,m,g){return t[0]=e,t[1]=r,t[2]=n,t[3]=i,t[4]=a,t[5]=o,t[6]=s,t[7]=l,t[8]=u,t[9]=c,t[10]=h,t[11]=f,t[12]=d,t[13]=p,t[14]=m,t[15]=g,t},i.identity=function(t){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},i.scalar.transpose=function(t,e){if(t===e){var r=e[1],n=e[2],i=e[3],a=e[6],o=e[7],s=e[11];t[1]=e[4],t[2]=e[8],t[3]=e[12],t[4]=r,t[6]=e[9],t[7]=e[13],t[8]=n,t[9]=a,t[11]=e[14],t[12]=i,t[13]=o,t[14]=s}else t[0]=e[0],t[1]=e[4],t[2]=e[8],t[3]=e[12],t[4]=e[1],t[5]=e[5],t[6]=e[9],t[7]=e[13],t[8]=e[2],t[9]=e[6],t[10]=e[10],t[11]=e[14],t[12]=e[3],t[13]=e[7],t[14]=e[11],t[15]=e[15];return t},i.SIMD.transpose=function(t,e){var r,n,i,a,o,s,l,u,c,h;return r=SIMD.Float32x4.load(e,0),n=SIMD.Float32x4.load(e,4),i=SIMD.Float32x4.load(e,8),a=SIMD.Float32x4.load(e,12),o=SIMD.Float32x4.shuffle(r,n,0,1,4,5),s=SIMD.Float32x4.shuffle(i,a,0,1,4,5),l=SIMD.Float32x4.shuffle(o,s,0,2,4,6),u=SIMD.Float32x4.shuffle(o,s,1,3,5,7),SIMD.Float32x4.store(t,0,l),SIMD.Float32x4.store(t,4,u),o=SIMD.Float32x4.shuffle(r,n,2,3,6,7),s=SIMD.Float32x4.shuffle(i,a,2,3,6,7),c=SIMD.Float32x4.shuffle(o,s,0,2,4,6),h=SIMD.Float32x4.shuffle(o,s,1,3,5,7),SIMD.Float32x4.store(t,8,c),SIMD.Float32x4.store(t,12,h),t},i.transpose=n.USE_SIMD?i.SIMD.transpose:i.scalar.transpose,i.scalar.invert=function(t,e){var r=e[0],n=e[1],i=e[2],a=e[3],o=e[4],s=e[5],l=e[6],u=e[7],c=e[8],h=e[9],f=e[10],d=e[11],p=e[12],m=e[13],g=e[14],v=e[15],y=r*s-n*o,b=r*l-i*o,x=r*u-a*o,_=n*l-i*s,w=n*u-a*s,M=i*u-a*l,k=c*m-h*p,A=c*g-f*p,T=c*v-d*p,S=h*g-f*m,E=h*v-d*m,L=f*v-d*g,C=y*L-b*E+x*S+_*T-w*A+M*k;return C?(C=1/C,t[0]=(s*L-l*E+u*S)*C,t[1]=(i*E-n*L-a*S)*C,t[2]=(m*M-g*w+v*_)*C,t[3]=(f*w-h*M-d*_)*C,t[4]=(l*T-o*L-u*A)*C,t[5]=(r*L-i*T+a*A)*C,t[6]=(g*x-p*M-v*b)*C,t[7]=(c*M-f*x+d*b)*C,t[8]=(o*E-s*T+u*k)*C,t[9]=(n*T-r*E-a*k)*C,t[10]=(p*w-m*x+v*y)*C,t[11]=(h*x-c*w-d*y)*C,t[12]=(s*A-o*S-l*k)*C,t[13]=(r*S-n*A+i*k)*C,t[14]=(m*b-p*_-g*y)*C,t[15]=(c*_-h*b+f*y)*C,t):null},i.SIMD.invert=function(t,e){var r,n,i,a,o,s,l,u,c,h,f=SIMD.Float32x4.load(e,0),d=SIMD.Float32x4.load(e,4),p=SIMD.Float32x4.load(e,8),m=SIMD.Float32x4.load(e,12);return o=SIMD.Float32x4.shuffle(f,d,0,1,4,5),n=SIMD.Float32x4.shuffle(p,m,0,1,4,5),r=SIMD.Float32x4.shuffle(o,n,0,2,4,6),n=SIMD.Float32x4.shuffle(n,o,1,3,5,7),o=SIMD.Float32x4.shuffle(f,d,2,3,6,7),a=SIMD.Float32x4.shuffle(p,m,2,3,6,7),i=SIMD.Float32x4.shuffle(o,a,0,2,4,6),a=SIMD.Float32x4.shuffle(a,o,1,3,5,7),o=SIMD.Float32x4.mul(i,a),o=SIMD.Float32x4.swizzle(o,1,0,3,2),s=SIMD.Float32x4.mul(n,o),l=SIMD.Float32x4.mul(r,o),o=SIMD.Float32x4.swizzle(o,2,3,0,1),s=SIMD.Float32x4.sub(SIMD.Float32x4.mul(n,o),s),l=SIMD.Float32x4.sub(SIMD.Float32x4.mul(r,o),l),l=SIMD.Float32x4.swizzle(l,2,3,0,1),o=SIMD.Float32x4.mul(n,i),o=SIMD.Float32x4.swizzle(o,1,0,3,2),s=SIMD.Float32x4.add(SIMD.Float32x4.mul(a,o),s),c=SIMD.Float32x4.mul(r,o),o=SIMD.Float32x4.swizzle(o,2,3,0,1),s=SIMD.Float32x4.sub(s,SIMD.Float32x4.mul(a,o)),c=SIMD.Float32x4.sub(SIMD.Float32x4.mul(r,o),c),c=SIMD.Float32x4.swizzle(c,2,3,0,1),o=SIMD.Float32x4.mul(SIMD.Float32x4.swizzle(n,2,3,0,1),a),o=SIMD.Float32x4.swizzle(o,1,0,3,2),i=SIMD.Float32x4.swizzle(i,2,3,0,1),s=SIMD.Float32x4.add(SIMD.Float32x4.mul(i,o),s),u=SIMD.Float32x4.mul(r,o),o=SIMD.Float32x4.swizzle(o,2,3,0,1),s=SIMD.Float32x4.sub(s,SIMD.Float32x4.mul(i,o)),u=SIMD.Float32x4.sub(SIMD.Float32x4.mul(r,o),u),u=SIMD.Float32x4.swizzle(u,2,3,0,1),o=SIMD.Float32x4.mul(r,n),o=SIMD.Float32x4.swizzle(o,1,0,3,2),u=SIMD.Float32x4.add(SIMD.Float32x4.mul(a,o),u),c=SIMD.Float32x4.sub(SIMD.Float32x4.mul(i,o),c),o=SIMD.Float32x4.swizzle(o,2,3,0,1),u=SIMD.Float32x4.sub(SIMD.Float32x4.mul(a,o),u),c=SIMD.Float32x4.sub(c,SIMD.Float32x4.mul(i,o)),o=SIMD.Float32x4.mul(r,a),o=SIMD.Float32x4.swizzle(o,1,0,3,2),l=SIMD.Float32x4.sub(l,SIMD.Float32x4.mul(i,o)),u=SIMD.Float32x4.add(SIMD.Float32x4.mul(n,o),u),o=SIMD.Float32x4.swizzle(o,2,3,0,1),l=SIMD.Float32x4.add(SIMD.Float32x4.mul(i,o),l),u=SIMD.Float32x4.sub(u,SIMD.Float32x4.mul(n,o)),o=SIMD.Float32x4.mul(r,i),o=SIMD.Float32x4.swizzle(o,1,0,3,2),l=SIMD.Float32x4.add(SIMD.Float32x4.mul(a,o),l),c=SIMD.Float32x4.sub(c,SIMD.Float32x4.mul(n,o)),o=SIMD.Float32x4.swizzle(o,2,3,0,1),l=SIMD.Float32x4.sub(l,SIMD.Float32x4.mul(a,o)),c=SIMD.Float32x4.add(SIMD.Float32x4.mul(n,o),c),h=SIMD.Float32x4.mul(r,s),h=SIMD.Float32x4.add(SIMD.Float32x4.swizzle(h,2,3,0,1),h),h=SIMD.Float32x4.add(SIMD.Float32x4.swizzle(h,1,0,3,2),h),o=SIMD.Float32x4.reciprocalApproximation(h),h=SIMD.Float32x4.sub(SIMD.Float32x4.add(o,o),SIMD.Float32x4.mul(h,SIMD.Float32x4.mul(o,o))),(h=SIMD.Float32x4.swizzle(h,0,0,0,0))?(SIMD.Float32x4.store(t,0,SIMD.Float32x4.mul(h,s)),SIMD.Float32x4.store(t,4,SIMD.Float32x4.mul(h,l)),SIMD.Float32x4.store(t,8,SIMD.Float32x4.mul(h,u)),SIMD.Float32x4.store(t,12,SIMD.Float32x4.mul(h,c)),t):null},i.invert=n.USE_SIMD?i.SIMD.invert:i.scalar.invert,i.scalar.adjoint=function(t,e){var r=e[0],n=e[1],i=e[2],a=e[3],o=e[4],s=e[5],l=e[6],u=e[7],c=e[8],h=e[9],f=e[10],d=e[11],p=e[12],m=e[13],g=e[14],v=e[15];return t[0]=s*(f*v-d*g)-h*(l*v-u*g)+m*(l*d-u*f),t[1]=-(n*(f*v-d*g)-h*(i*v-a*g)+m*(i*d-a*f)),t[2]=n*(l*v-u*g)-s*(i*v-a*g)+m*(i*u-a*l),t[3]=-(n*(l*d-u*f)-s*(i*d-a*f)+h*(i*u-a*l)),t[4]=-(o*(f*v-d*g)-c*(l*v-u*g)+p*(l*d-u*f)),t[5]=r*(f*v-d*g)-c*(i*v-a*g)+p*(i*d-a*f),t[6]=-(r*(l*v-u*g)-o*(i*v-a*g)+p*(i*u-a*l)),t[7]=r*(l*d-u*f)-o*(i*d-a*f)+c*(i*u-a*l),t[8]=o*(h*v-d*m)-c*(s*v-u*m)+p*(s*d-u*h),t[9]=-(r*(h*v-d*m)-c*(n*v-a*m)+p*(n*d-a*h)),t[10]=r*(s*v-u*m)-o*(n*v-a*m)+p*(n*u-a*s),t[11]=-(r*(s*d-u*h)-o*(n*d-a*h)+c*(n*u-a*s)),t[12]=-(o*(h*g-f*m)-c*(s*g-l*m)+p*(s*f-l*h)),t[13]=r*(h*g-f*m)-c*(n*g-i*m)+p*(n*f-i*h),t[14]=-(r*(s*g-l*m)-o*(n*g-i*m)+p*(n*l-i*s)),t[15]=r*(s*f-l*h)-o*(n*f-i*h)+c*(n*l-i*s),t},i.SIMD.adjoint=function(t,e){var r,n,i,a,o,s,l,u,c,h,f,d,p,r=SIMD.Float32x4.load(e,0),n=SIMD.Float32x4.load(e,4),i=SIMD.Float32x4.load(e,8),a=SIMD.Float32x4.load(e,12)
;return c=SIMD.Float32x4.shuffle(r,n,0,1,4,5),s=SIMD.Float32x4.shuffle(i,a,0,1,4,5),o=SIMD.Float32x4.shuffle(c,s,0,2,4,6),s=SIMD.Float32x4.shuffle(s,c,1,3,5,7),c=SIMD.Float32x4.shuffle(r,n,2,3,6,7),u=SIMD.Float32x4.shuffle(i,a,2,3,6,7),l=SIMD.Float32x4.shuffle(c,u,0,2,4,6),u=SIMD.Float32x4.shuffle(u,c,1,3,5,7),c=SIMD.Float32x4.mul(l,u),c=SIMD.Float32x4.swizzle(c,1,0,3,2),h=SIMD.Float32x4.mul(s,c),f=SIMD.Float32x4.mul(o,c),c=SIMD.Float32x4.swizzle(c,2,3,0,1),h=SIMD.Float32x4.sub(SIMD.Float32x4.mul(s,c),h),f=SIMD.Float32x4.sub(SIMD.Float32x4.mul(o,c),f),f=SIMD.Float32x4.swizzle(f,2,3,0,1),c=SIMD.Float32x4.mul(s,l),c=SIMD.Float32x4.swizzle(c,1,0,3,2),h=SIMD.Float32x4.add(SIMD.Float32x4.mul(u,c),h),p=SIMD.Float32x4.mul(o,c),c=SIMD.Float32x4.swizzle(c,2,3,0,1),h=SIMD.Float32x4.sub(h,SIMD.Float32x4.mul(u,c)),p=SIMD.Float32x4.sub(SIMD.Float32x4.mul(o,c),p),p=SIMD.Float32x4.swizzle(p,2,3,0,1),c=SIMD.Float32x4.mul(SIMD.Float32x4.swizzle(s,2,3,0,1),u),c=SIMD.Float32x4.swizzle(c,1,0,3,2),l=SIMD.Float32x4.swizzle(l,2,3,0,1),h=SIMD.Float32x4.add(SIMD.Float32x4.mul(l,c),h),d=SIMD.Float32x4.mul(o,c),c=SIMD.Float32x4.swizzle(c,2,3,0,1),h=SIMD.Float32x4.sub(h,SIMD.Float32x4.mul(l,c)),d=SIMD.Float32x4.sub(SIMD.Float32x4.mul(o,c),d),d=SIMD.Float32x4.swizzle(d,2,3,0,1),c=SIMD.Float32x4.mul(o,s),c=SIMD.Float32x4.swizzle(c,1,0,3,2),d=SIMD.Float32x4.add(SIMD.Float32x4.mul(u,c),d),p=SIMD.Float32x4.sub(SIMD.Float32x4.mul(l,c),p),c=SIMD.Float32x4.swizzle(c,2,3,0,1),d=SIMD.Float32x4.sub(SIMD.Float32x4.mul(u,c),d),p=SIMD.Float32x4.sub(p,SIMD.Float32x4.mul(l,c)),c=SIMD.Float32x4.mul(o,u),c=SIMD.Float32x4.swizzle(c,1,0,3,2),f=SIMD.Float32x4.sub(f,SIMD.Float32x4.mul(l,c)),d=SIMD.Float32x4.add(SIMD.Float32x4.mul(s,c),d),c=SIMD.Float32x4.swizzle(c,2,3,0,1),f=SIMD.Float32x4.add(SIMD.Float32x4.mul(l,c),f),d=SIMD.Float32x4.sub(d,SIMD.Float32x4.mul(s,c)),c=SIMD.Float32x4.mul(o,l),c=SIMD.Float32x4.swizzle(c,1,0,3,2),f=SIMD.Float32x4.add(SIMD.Float32x4.mul(u,c),f),p=SIMD.Float32x4.sub(p,SIMD.Float32x4.mul(s,c)),c=SIMD.Float32x4.swizzle(c,2,3,0,1),f=SIMD.Float32x4.sub(f,SIMD.Float32x4.mul(u,c)),p=SIMD.Float32x4.add(SIMD.Float32x4.mul(s,c),p),SIMD.Float32x4.store(t,0,h),SIMD.Float32x4.store(t,4,f),SIMD.Float32x4.store(t,8,d),SIMD.Float32x4.store(t,12,p),t},i.adjoint=n.USE_SIMD?i.SIMD.adjoint:i.scalar.adjoint,i.determinant=function(t){var e=t[0],r=t[1],n=t[2],i=t[3],a=t[4],o=t[5],s=t[6],l=t[7],u=t[8],c=t[9],h=t[10],f=t[11],d=t[12],p=t[13],m=t[14],g=t[15];return(e*o-r*a)*(h*g-f*m)-(e*s-n*a)*(c*g-f*p)+(e*l-i*a)*(c*m-h*p)+(r*s-n*o)*(u*g-f*d)-(r*l-i*o)*(u*m-h*d)+(n*l-i*s)*(u*p-c*d)},i.SIMD.multiply=function(t,e,r){var n=SIMD.Float32x4.load(e,0),i=SIMD.Float32x4.load(e,4),a=SIMD.Float32x4.load(e,8),o=SIMD.Float32x4.load(e,12),s=SIMD.Float32x4.load(r,0),l=SIMD.Float32x4.add(SIMD.Float32x4.mul(SIMD.Float32x4.swizzle(s,0,0,0,0),n),SIMD.Float32x4.add(SIMD.Float32x4.mul(SIMD.Float32x4.swizzle(s,1,1,1,1),i),SIMD.Float32x4.add(SIMD.Float32x4.mul(SIMD.Float32x4.swizzle(s,2,2,2,2),a),SIMD.Float32x4.mul(SIMD.Float32x4.swizzle(s,3,3,3,3),o))));SIMD.Float32x4.store(t,0,l);var u=SIMD.Float32x4.load(r,4),c=SIMD.Float32x4.add(SIMD.Float32x4.mul(SIMD.Float32x4.swizzle(u,0,0,0,0),n),SIMD.Float32x4.add(SIMD.Float32x4.mul(SIMD.Float32x4.swizzle(u,1,1,1,1),i),SIMD.Float32x4.add(SIMD.Float32x4.mul(SIMD.Float32x4.swizzle(u,2,2,2,2),a),SIMD.Float32x4.mul(SIMD.Float32x4.swizzle(u,3,3,3,3),o))));SIMD.Float32x4.store(t,4,c);var h=SIMD.Float32x4.load(r,8),f=SIMD.Float32x4.add(SIMD.Float32x4.mul(SIMD.Float32x4.swizzle(h,0,0,0,0),n),SIMD.Float32x4.add(SIMD.Float32x4.mul(SIMD.Float32x4.swizzle(h,1,1,1,1),i),SIMD.Float32x4.add(SIMD.Float32x4.mul(SIMD.Float32x4.swizzle(h,2,2,2,2),a),SIMD.Float32x4.mul(SIMD.Float32x4.swizzle(h,3,3,3,3),o))));SIMD.Float32x4.store(t,8,f);var d=SIMD.Float32x4.load(r,12),p=SIMD.Float32x4.add(SIMD.Float32x4.mul(SIMD.Float32x4.swizzle(d,0,0,0,0),n),SIMD.Float32x4.add(SIMD.Float32x4.mul(SIMD.Float32x4.swizzle(d,1,1,1,1),i),SIMD.Float32x4.add(SIMD.Float32x4.mul(SIMD.Float32x4.swizzle(d,2,2,2,2),a),SIMD.Float32x4.mul(SIMD.Float32x4.swizzle(d,3,3,3,3),o))));return SIMD.Float32x4.store(t,12,p),t},i.scalar.multiply=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=e[3],s=e[4],l=e[5],u=e[6],c=e[7],h=e[8],f=e[9],d=e[10],p=e[11],m=e[12],g=e[13],v=e[14],y=e[15],b=r[0],x=r[1],_=r[2],w=r[3];return t[0]=b*n+x*s+_*h+w*m,t[1]=b*i+x*l+_*f+w*g,t[2]=b*a+x*u+_*d+w*v,t[3]=b*o+x*c+_*p+w*y,b=r[4],x=r[5],_=r[6],w=r[7],t[4]=b*n+x*s+_*h+w*m,t[5]=b*i+x*l+_*f+w*g,t[6]=b*a+x*u+_*d+w*v,t[7]=b*o+x*c+_*p+w*y,b=r[8],x=r[9],_=r[10],w=r[11],t[8]=b*n+x*s+_*h+w*m,t[9]=b*i+x*l+_*f+w*g,t[10]=b*a+x*u+_*d+w*v,t[11]=b*o+x*c+_*p+w*y,b=r[12],x=r[13],_=r[14],w=r[15],t[12]=b*n+x*s+_*h+w*m,t[13]=b*i+x*l+_*f+w*g,t[14]=b*a+x*u+_*d+w*v,t[15]=b*o+x*c+_*p+w*y,t},i.multiply=n.USE_SIMD?i.SIMD.multiply:i.scalar.multiply,i.mul=i.multiply,i.scalar.translate=function(t,e,r){var n,i,a,o,s,l,u,c,h,f,d,p,m=r[0],g=r[1],v=r[2];return e===t?(t[12]=e[0]*m+e[4]*g+e[8]*v+e[12],t[13]=e[1]*m+e[5]*g+e[9]*v+e[13],t[14]=e[2]*m+e[6]*g+e[10]*v+e[14],t[15]=e[3]*m+e[7]*g+e[11]*v+e[15]):(n=e[0],i=e[1],a=e[2],o=e[3],s=e[4],l=e[5],u=e[6],c=e[7],h=e[8],f=e[9],d=e[10],p=e[11],t[0]=n,t[1]=i,t[2]=a,t[3]=o,t[4]=s,t[5]=l,t[6]=u,t[7]=c,t[8]=h,t[9]=f,t[10]=d,t[11]=p,t[12]=n*m+s*g+h*v+e[12],t[13]=i*m+l*g+f*v+e[13],t[14]=a*m+u*g+d*v+e[14],t[15]=o*m+c*g+p*v+e[15]),t},i.SIMD.translate=function(t,e,r){var n=SIMD.Float32x4.load(e,0),i=SIMD.Float32x4.load(e,4),a=SIMD.Float32x4.load(e,8),o=SIMD.Float32x4.load(e,12),s=SIMD.Float32x4(r[0],r[1],r[2],0);e!==t&&(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11]),n=SIMD.Float32x4.mul(n,SIMD.Float32x4.swizzle(s,0,0,0,0)),i=SIMD.Float32x4.mul(i,SIMD.Float32x4.swizzle(s,1,1,1,1)),a=SIMD.Float32x4.mul(a,SIMD.Float32x4.swizzle(s,2,2,2,2));var l=SIMD.Float32x4.add(n,SIMD.Float32x4.add(i,SIMD.Float32x4.add(a,o)));return SIMD.Float32x4.store(t,12,l),t},i.translate=n.USE_SIMD?i.SIMD.translate:i.scalar.translate,i.scalar.scale=function(t,e,r){var n=r[0],i=r[1],a=r[2];return t[0]=e[0]*n,t[1]=e[1]*n,t[2]=e[2]*n,t[3]=e[3]*n,t[4]=e[4]*i,t[5]=e[5]*i,t[6]=e[6]*i,t[7]=e[7]*i,t[8]=e[8]*a,t[9]=e[9]*a,t[10]=e[10]*a,t[11]=e[11]*a,t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t},i.SIMD.scale=function(t,e,r){var n,i,a,o=SIMD.Float32x4(r[0],r[1],r[2],0);return n=SIMD.Float32x4.load(e,0),SIMD.Float32x4.store(t,0,SIMD.Float32x4.mul(n,SIMD.Float32x4.swizzle(o,0,0,0,0))),i=SIMD.Float32x4.load(e,4),SIMD.Float32x4.store(t,4,SIMD.Float32x4.mul(i,SIMD.Float32x4.swizzle(o,1,1,1,1))),a=SIMD.Float32x4.load(e,8),SIMD.Float32x4.store(t,8,SIMD.Float32x4.mul(a,SIMD.Float32x4.swizzle(o,2,2,2,2))),t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15],t},i.scale=n.USE_SIMD?i.SIMD.scale:i.scalar.scale,i.rotate=function(t,e,r,i){var a,o,s,l,u,c,h,f,d,p,m,g,v,y,b,x,_,w,M,k,A,T,S,E,L=i[0],C=i[1],I=i[2],z=Math.sqrt(L*L+C*C+I*I);return Math.abs(z)<n.EPSILON?null:(z=1/z,L*=z,C*=z,I*=z,a=Math.sin(r),o=Math.cos(r),s=1-o,l=e[0],u=e[1],c=e[2],h=e[3],f=e[4],d=e[5],p=e[6],m=e[7],g=e[8],v=e[9],y=e[10],b=e[11],x=L*L*s+o,_=C*L*s+I*a,w=I*L*s-C*a,M=L*C*s-I*a,k=C*C*s+o,A=I*C*s+L*a,T=L*I*s+C*a,S=C*I*s-L*a,E=I*I*s+o,t[0]=l*x+f*_+g*w,t[1]=u*x+d*_+v*w,t[2]=c*x+p*_+y*w,t[3]=h*x+m*_+b*w,t[4]=l*M+f*k+g*A,t[5]=u*M+d*k+v*A,t[6]=c*M+p*k+y*A,t[7]=h*M+m*k+b*A,t[8]=l*T+f*S+g*E,t[9]=u*T+d*S+v*E,t[10]=c*T+p*S+y*E,t[11]=h*T+m*S+b*E,e!==t&&(t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t)},i.scalar.rotateX=function(t,e,r){var n=Math.sin(r),i=Math.cos(r),a=e[4],o=e[5],s=e[6],l=e[7],u=e[8],c=e[9],h=e[10],f=e[11];return e!==t&&(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[4]=a*i+u*n,t[5]=o*i+c*n,t[6]=s*i+h*n,t[7]=l*i+f*n,t[8]=u*i-a*n,t[9]=c*i-o*n,t[10]=h*i-s*n,t[11]=f*i-l*n,t},i.SIMD.rotateX=function(t,e,r){var n=SIMD.Float32x4.splat(Math.sin(r)),i=SIMD.Float32x4.splat(Math.cos(r));e!==t&&(t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]);var a=SIMD.Float32x4.load(e,4),o=SIMD.Float32x4.load(e,8);return SIMD.Float32x4.store(t,4,SIMD.Float32x4.add(SIMD.Float32x4.mul(a,i),SIMD.Float32x4.mul(o,n))),SIMD.Float32x4.store(t,8,SIMD.Float32x4.sub(SIMD.Float32x4.mul(o,i),SIMD.Float32x4.mul(a,n))),t},i.rotateX=n.USE_SIMD?i.SIMD.rotateX:i.scalar.rotateX,i.scalar.rotateY=function(t,e,r){var n=Math.sin(r),i=Math.cos(r),a=e[0],o=e[1],s=e[2],l=e[3],u=e[8],c=e[9],h=e[10],f=e[11];return e!==t&&(t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[0]=a*i-u*n,t[1]=o*i-c*n,t[2]=s*i-h*n,t[3]=l*i-f*n,t[8]=a*n+u*i,t[9]=o*n+c*i,t[10]=s*n+h*i,t[11]=l*n+f*i,t},i.SIMD.rotateY=function(t,e,r){var n=SIMD.Float32x4.splat(Math.sin(r)),i=SIMD.Float32x4.splat(Math.cos(r));e!==t&&(t[4]=e[4],t[5]=e[5],t[6]=e[6],t[7]=e[7],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]);var a=SIMD.Float32x4.load(e,0),o=SIMD.Float32x4.load(e,8);return SIMD.Float32x4.store(t,0,SIMD.Float32x4.sub(SIMD.Float32x4.mul(a,i),SIMD.Float32x4.mul(o,n))),SIMD.Float32x4.store(t,8,SIMD.Float32x4.add(SIMD.Float32x4.mul(a,n),SIMD.Float32x4.mul(o,i))),t},i.rotateY=n.USE_SIMD?i.SIMD.rotateY:i.scalar.rotateY,i.scalar.rotateZ=function(t,e,r){var n=Math.sin(r),i=Math.cos(r),a=e[0],o=e[1],s=e[2],l=e[3],u=e[4],c=e[5],h=e[6],f=e[7];return e!==t&&(t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]),t[0]=a*i+u*n,t[1]=o*i+c*n,t[2]=s*i+h*n,t[3]=l*i+f*n,t[4]=u*i-a*n,t[5]=c*i-o*n,t[6]=h*i-s*n,t[7]=f*i-l*n,t},i.SIMD.rotateZ=function(t,e,r){var n=SIMD.Float32x4.splat(Math.sin(r)),i=SIMD.Float32x4.splat(Math.cos(r));e!==t&&(t[8]=e[8],t[9]=e[9],t[10]=e[10],t[11]=e[11],t[12]=e[12],t[13]=e[13],t[14]=e[14],t[15]=e[15]);var a=SIMD.Float32x4.load(e,0),o=SIMD.Float32x4.load(e,4);return SIMD.Float32x4.store(t,0,SIMD.Float32x4.add(SIMD.Float32x4.mul(a,i),SIMD.Float32x4.mul(o,n))),SIMD.Float32x4.store(t,4,SIMD.Float32x4.sub(SIMD.Float32x4.mul(o,i),SIMD.Float32x4.mul(a,n))),t},i.rotateZ=n.USE_SIMD?i.SIMD.rotateZ:i.scalar.rotateZ,i.fromTranslation=function(t,e){return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=e[0],t[13]=e[1],t[14]=e[2],t[15]=1,t},i.fromScaling=function(t,e){return t[0]=e[0],t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=e[1],t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=e[2],t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},i.fromRotation=function(t,e,r){var i,a,o,s=r[0],l=r[1],u=r[2],c=Math.sqrt(s*s+l*l+u*u);return Math.abs(c)<n.EPSILON?null:(c=1/c,s*=c,l*=c,u*=c,i=Math.sin(e),a=Math.cos(e),o=1-a,t[0]=s*s*o+a,t[1]=l*s*o+u*i,t[2]=u*s*o-l*i,t[3]=0,t[4]=s*l*o-u*i,t[5]=l*l*o+a,t[6]=u*l*o+s*i,t[7]=0,t[8]=s*u*o+l*i,t[9]=l*u*o-s*i,t[10]=u*u*o+a,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t)},i.fromXRotation=function(t,e){var r=Math.sin(e),n=Math.cos(e);return t[0]=1,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=n,t[6]=r,t[7]=0,t[8]=0,t[9]=-r,t[10]=n,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},i.fromYRotation=function(t,e){var r=Math.sin(e),n=Math.cos(e);return t[0]=n,t[1]=0,t[2]=-r,t[3]=0,t[4]=0,t[5]=1,t[6]=0,t[7]=0,t[8]=r,t[9]=0,t[10]=n,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},i.fromZRotation=function(t,e){var r=Math.sin(e),n=Math.cos(e);return t[0]=n,t[1]=r,t[2]=0,t[3]=0,t[4]=-r,t[5]=n,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=1,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},i.fromRotationTranslation=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=e[3],s=n+n,l=i+i,u=a+a,c=n*s,h=n*l,f=n*u,d=i*l,p=i*u,m=a*u,g=o*s,v=o*l,y=o*u;return t[0]=1-(d+m),t[1]=h+y,t[2]=f-v,t[3]=0,t[4]=h-y,t[5]=1-(c+m),t[6]=p+g,t[7]=0,t[8]=f+v,t[9]=p-g,t[10]=1-(c+d),t[11]=0,t[12]=r[0],t[13]=r[1],t[14]=r[2],t[15]=1,t},i.getTranslation=function(t,e){return t[0]=e[12],t[1]=e[13],t[2]=e[14],t},i.getRotation=function(t,e){var r=e[0]+e[5]+e[10],n=0;return r>0?(n=2*Math.sqrt(r+1),t[3]=.25*n,t[0]=(e[6]-e[9])/n,t[1]=(e[8]-e[2])/n,t[2]=(e[1]-e[4])/n):e[0]>e[5]&e[0]>e[10]?(n=2*Math.sqrt(1+e[0]-e[5]-e[10]),t[3]=(e[6]-e[9])/n,t[0]=.25*n,t[1]=(e[1]+e[4])/n,t[2]=(e[8]+e[2])/n):e[5]>e[10]?(n=2*Math.sqrt(1+e[5]-e[0]-e[10]),t[3]=(e[8]-e[2])/n,t[0]=(e[1]+e[4])/n,t[1]=.25*n,t[2]=(e[6]+e[9])/n):(n=2*Math.sqrt(1+e[10]-e[0]-e[5]),t[3]=(e[1]-e[4])/n,t[0]=(e[8]+e[2])/n,t[1]=(e[6]+e[9])/n,t[2]=.25*n),t},i.fromRotationTranslationScale=function(t,e,r,n){var i=e[0],a=e[1],o=e[2],s=e[3],l=i+i,u=a+a,c=o+o,h=i*l,f=i*u,d=i*c,p=a*u,m=a*c,g=o*c,v=s*l,y=s*u,b=s*c,x=n[0],_=n[1],w=n[2];return t[0]=(1-(p+g))*x,t[1]=(f+b)*x,t[2]=(d-y)*x,t[3]=0,t[4]=(f-b)*_,t[5]=(1-(h+g))*_,t[6]=(m+v)*_,t[7]=0,t[8]=(d+y)*w,t[9]=(m-v)*w,t[10]=(1-(h+p))*w,t[11]=0,t[12]=r[0],t[13]=r[1],t[14]=r[2],t[15]=1,t},i.fromRotationTranslationScaleOrigin=function(t,e,r,n,i){var a=e[0],o=e[1],s=e[2],l=e[3],u=a+a,c=o+o,h=s+s,f=a*u,d=a*c,p=a*h,m=o*c,g=o*h,v=s*h,y=l*u,b=l*c,x=l*h,_=n[0],w=n[1],M=n[2],k=i[0],A=i[1],T=i[2];return t[0]=(1-(m+v))*_,t[1]=(d+x)*_,t[2]=(p-b)*_,t[3]=0,t[4]=(d-x)*w,t[5]=(1-(f+v))*w,t[6]=(g+y)*w,t[7]=0,t[8]=(p+b)*M,t[9]=(g-y)*M,t[10]=(1-(f+m))*M,t[11]=0,t[12]=r[0]+k-(t[0]*k+t[4]*A+t[8]*T),t[13]=r[1]+A-(t[1]*k+t[5]*A+t[9]*T),t[14]=r[2]+T-(t[2]*k+t[6]*A+t[10]*T),t[15]=1,t},i.fromQuat=function(t,e){var r=e[0],n=e[1],i=e[2],a=e[3],o=r+r,s=n+n,l=i+i,u=r*o,c=n*o,h=n*s,f=i*o,d=i*s,p=i*l,m=a*o,g=a*s,v=a*l;return t[0]=1-h-p,t[1]=c+v,t[2]=f-g,t[3]=0,t[4]=c-v,t[5]=1-u-p,t[6]=d+m,t[7]=0,t[8]=f+g,t[9]=d-m,t[10]=1-u-h,t[11]=0,t[12]=0,t[13]=0,t[14]=0,t[15]=1,t},i.frustum=function(t,e,r,n,i,a,o){var s=1/(r-e),l=1/(i-n),u=1/(a-o);return t[0]=2*a*s,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=2*a*l,t[6]=0,t[7]=0,t[8]=(r+e)*s,t[9]=(i+n)*l,t[10]=(o+a)*u,t[11]=-1,t[12]=0,t[13]=0,t[14]=o*a*2*u,t[15]=0,t},i.perspective=function(t,e,r,n,i){var a=1/Math.tan(e/2),o=1/(n-i);return t[0]=a/r,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=a,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=(i+n)*o,t[11]=-1,t[12]=0,t[13]=0,t[14]=2*i*n*o,t[15]=0,t},i.perspectiveFromFieldOfView=function(t,e,r,n){var i=Math.tan(e.upDegrees*Math.PI/180),a=Math.tan(e.downDegrees*Math.PI/180),o=Math.tan(e.leftDegrees*Math.PI/180),s=Math.tan(e.rightDegrees*Math.PI/180),l=2/(o+s),u=2/(i+a);return t[0]=l,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=u,t[6]=0,t[7]=0,t[8]=-(o-s)*l*.5,t[9]=(i-a)*u*.5,t[10]=n/(r-n),t[11]=-1,t[12]=0,t[13]=0,t[14]=n*r/(r-n),t[15]=0,t},i.ortho=function(t,e,r,n,i,a,o){var s=1/(e-r),l=1/(n-i),u=1/(a-o);return t[0]=-2*s,t[1]=0,t[2]=0,t[3]=0,t[4]=0,t[5]=-2*l,t[6]=0,t[7]=0,t[8]=0,t[9]=0,t[10]=2*u,t[11]=0,t[12]=(e+r)*s,t[13]=(i+n)*l,t[14]=(o+a)*u,t[15]=1,t},i.lookAt=function(t,e,r,a){var o,s,l,u,c,h,f,d,p,m,g=e[0],v=e[1],y=e[2],b=a[0],x=a[1],_=a[2],w=r[0],M=r[1],k=r[2];return Math.abs(g-w)<n.EPSILON&&Math.abs(v-M)<n.EPSILON&&Math.abs(y-k)<n.EPSILON?i.identity(t):(f=g-w,d=v-M,p=y-k,m=1/Math.sqrt(f*f+d*d+p*p),f*=m,d*=m,p*=m,o=x*p-_*d,s=_*f-b*p,l=b*d-x*f,m=Math.sqrt(o*o+s*s+l*l),m?(m=1/m,o*=m,s*=m,l*=m):(o=0,s=0,l=0),u=d*l-p*s,c=p*o-f*l,h=f*s-d*o,m=Math.sqrt(u*u+c*c+h*h),m?(m=1/m,u*=m,c*=m,h*=m):(u=0,c=0,h=0),t[0]=o,t[1]=u,t[2]=f,t[3]=0,t[4]=s,t[5]=c,t[6]=d,t[7]=0,t[8]=l,t[9]=h,t[10]=p,t[11]=0,t[12]=-(o*g+s*v+l*y),t[13]=-(u*g+c*v+h*y),t[14]=-(f*g+d*v+p*y),t[15]=1,t)},i.str=function(t){return"mat4("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+", "+t[4]+", "+t[5]+", "+t[6]+", "+t[7]+", "+t[8]+", "+t[9]+", "+t[10]+", "+t[11]+", "+t[12]+", "+t[13]+", "+t[14]+", "+t[15]+")"},i.frob=function(t){return Math.sqrt(Math.pow(t[0],2)+Math.pow(t[1],2)+Math.pow(t[2],2)+Math.pow(t[3],2)+Math.pow(t[4],2)+Math.pow(t[5],2)+Math.pow(t[6],2)+Math.pow(t[7],2)+Math.pow(t[8],2)+Math.pow(t[9],2)+Math.pow(t[10],2)+Math.pow(t[11],2)+Math.pow(t[12],2)+Math.pow(t[13],2)+Math.pow(t[14],2)+Math.pow(t[15],2))},i.add=function(t,e,r){return t[0]=e[0]+r[0],t[1]=e[1]+r[1],t[2]=e[2]+r[2],t[3]=e[3]+r[3],t[4]=e[4]+r[4],t[5]=e[5]+r[5],t[6]=e[6]+r[6],t[7]=e[7]+r[7],t[8]=e[8]+r[8],t[9]=e[9]+r[9],t[10]=e[10]+r[10],t[11]=e[11]+r[11],t[12]=e[12]+r[12],t[13]=e[13]+r[13],t[14]=e[14]+r[14],t[15]=e[15]+r[15],t},i.subtract=function(t,e,r){return t[0]=e[0]-r[0],t[1]=e[1]-r[1],t[2]=e[2]-r[2],t[3]=e[3]-r[3],t[4]=e[4]-r[4],t[5]=e[5]-r[5],t[6]=e[6]-r[6],t[7]=e[7]-r[7],t[8]=e[8]-r[8],t[9]=e[9]-r[9],t[10]=e[10]-r[10],t[11]=e[11]-r[11],t[12]=e[12]-r[12],t[13]=e[13]-r[13],t[14]=e[14]-r[14],t[15]=e[15]-r[15],t},i.sub=i.subtract,i.multiplyScalar=function(t,e,r){return t[0]=e[0]*r,t[1]=e[1]*r,t[2]=e[2]*r,t[3]=e[3]*r,t[4]=e[4]*r,t[5]=e[5]*r,t[6]=e[6]*r,t[7]=e[7]*r,t[8]=e[8]*r,t[9]=e[9]*r,t[10]=e[10]*r,t[11]=e[11]*r,t[12]=e[12]*r,t[13]=e[13]*r,t[14]=e[14]*r,t[15]=e[15]*r,t},i.multiplyScalarAndAdd=function(t,e,r,n){return t[0]=e[0]+r[0]*n,t[1]=e[1]+r[1]*n,t[2]=e[2]+r[2]*n,t[3]=e[3]+r[3]*n,t[4]=e[4]+r[4]*n,t[5]=e[5]+r[5]*n,t[6]=e[6]+r[6]*n,t[7]=e[7]+r[7]*n,t[8]=e[8]+r[8]*n,t[9]=e[9]+r[9]*n,t[10]=e[10]+r[10]*n,t[11]=e[11]+r[11]*n,t[12]=e[12]+r[12]*n,t[13]=e[13]+r[13]*n,t[14]=e[14]+r[14]*n,t[15]=e[15]+r[15]*n,t},i.exactEquals=function(t,e){return t[0]===e[0]&&t[1]===e[1]&&t[2]===e[2]&&t[3]===e[3]&&t[4]===e[4]&&t[5]===e[5]&&t[6]===e[6]&&t[7]===e[7]&&t[8]===e[8]&&t[9]===e[9]&&t[10]===e[10]&&t[11]===e[11]&&t[12]===e[12]&&t[13]===e[13]&&t[14]===e[14]&&t[15]===e[15]},i.equals=function(t,e){var r=t[0],i=t[1],a=t[2],o=t[3],s=t[4],l=t[5],u=t[6],c=t[7],h=t[8],f=t[9],d=t[10],p=t[11],m=t[12],g=t[13],v=t[14],y=t[15],b=e[0],x=e[1],_=e[2],w=e[3],M=e[4],k=e[5],A=e[6],T=e[7],S=e[8],E=e[9],L=e[10],C=e[11],I=e[12],z=e[13],D=e[14],P=e[15];return Math.abs(r-b)<=n.EPSILON*Math.max(1,Math.abs(r),Math.abs(b))&&Math.abs(i-x)<=n.EPSILON*Math.max(1,Math.abs(i),Math.abs(x))&&Math.abs(a-_)<=n.EPSILON*Math.max(1,Math.abs(a),Math.abs(_))&&Math.abs(o-w)<=n.EPSILON*Math.max(1,Math.abs(o),Math.abs(w))&&Math.abs(s-M)<=n.EPSILON*Math.max(1,Math.abs(s),Math.abs(M))&&Math.abs(l-k)<=n.EPSILON*Math.max(1,Math.abs(l),Math.abs(k))&&Math.abs(u-A)<=n.EPSILON*Math.max(1,Math.abs(u),Math.abs(A))&&Math.abs(c-T)<=n.EPSILON*Math.max(1,Math.abs(c),Math.abs(T))&&Math.abs(h-S)<=n.EPSILON*Math.max(1,Math.abs(h),Math.abs(S))&&Math.abs(f-E)<=n.EPSILON*Math.max(1,Math.abs(f),Math.abs(E))&&Math.abs(d-L)<=n.EPSILON*Math.max(1,Math.abs(d),Math.abs(L))&&Math.abs(p-C)<=n.EPSILON*Math.max(1,Math.abs(p),Math.abs(C))&&Math.abs(m-I)<=n.EPSILON*Math.max(1,Math.abs(m),Math.abs(I))&&Math.abs(g-z)<=n.EPSILON*Math.max(1,Math.abs(g),Math.abs(z))&&Math.abs(v-D)<=n.EPSILON*Math.max(1,Math.abs(v),Math.abs(D))&&Math.abs(y-P)<=n.EPSILON*Math.max(1,Math.abs(y),Math.abs(P))},e.exports=i},{"./common.js":194}],199:[function(t,e,r){var n=t("./common.js"),i=t("./mat3.js"),a=t("./vec3.js"),o=t("./vec4.js"),s={};s.create=function(){var t=new n.ARRAY_TYPE(4);return t[0]=0,t[1]=0,t[2]=0,t[3]=1,t},s.rotationTo=function(){var t=a.create(),e=a.fromValues(1,0,0),r=a.fromValues(0,1,0);return function(n,i,o){var l=a.dot(i,o);return l<-.999999?(a.cross(t,e,i),a.length(t)<1e-6&&a.cross(t,r,i),a.normalize(t,t),s.setAxisAngle(n,t,Math.PI),n):l>.999999?(n[0]=0,n[1]=0,n[2]=0,n[3]=1,n):(a.cross(t,i,o),n[0]=t[0],n[1]=t[1],n[2]=t[2],n[3]=1+l,s.normalize(n,n))}}(),s.setAxes=function(){var t=i.create();return function(e,r,n,i){return t[0]=n[0],t[3]=n[1],t[6]=n[2],t[1]=i[0],t[4]=i[1],t[7]=i[2],t[2]=-r[0],t[5]=-r[1],t[8]=-r[2],s.normalize(e,s.fromMat3(e,t))}}(),s.clone=o.clone,s.fromValues=o.fromValues,s.copy=o.copy,s.set=o.set,s.identity=function(t){return t[0]=0,t[1]=0,t[2]=0,t[3]=1,t},s.setAxisAngle=function(t,e,r){r*=.5;var n=Math.sin(r);return t[0]=n*e[0],t[1]=n*e[1],t[2]=n*e[2],t[3]=Math.cos(r),t},s.getAxisAngle=function(t,e){var r=2*Math.acos(e[3]),n=Math.sin(r/2);return 0!=n?(t[0]=e[0]/n,t[1]=e[1]/n,t[2]=e[2]/n):(t[0]=1,t[1]=0,t[2]=0),r},s.add=o.add,s.multiply=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=e[3],s=r[0],l=r[1],u=r[2],c=r[3];return t[0]=n*c+o*s+i*u-a*l,t[1]=i*c+o*l+a*s-n*u,t[2]=a*c+o*u+n*l-i*s,t[3]=o*c-n*s-i*l-a*u,t},s.mul=s.multiply,s.scale=o.scale,s.rotateX=function(t,e,r){r*=.5;var n=e[0],i=e[1],a=e[2],o=e[3],s=Math.sin(r),l=Math.cos(r);return t[0]=n*l+o*s,t[1]=i*l+a*s,t[2]=a*l-i*s,t[3]=o*l-n*s,t},s.rotateY=function(t,e,r){r*=.5;var n=e[0],i=e[1],a=e[2],o=e[3],s=Math.sin(r),l=Math.cos(r);return t[0]=n*l-a*s,t[1]=i*l+o*s,t[2]=a*l+n*s,t[3]=o*l-i*s,t},s.rotateZ=function(t,e,r){r*=.5;var n=e[0],i=e[1],a=e[2],o=e[3],s=Math.sin(r),l=Math.cos(r);return t[0]=n*l+i*s,t[1]=i*l-n*s,t[2]=a*l+o*s,t[3]=o*l-a*s,t},s.calculateW=function(t,e){var r=e[0],n=e[1],i=e[2];return t[0]=r,t[1]=n,t[2]=i,t[3]=Math.sqrt(Math.abs(1-r*r-n*n-i*i)),t},s.dot=o.dot,s.lerp=o.lerp,s.slerp=function(t,e,r,n){var i,a,o,s,l,u=e[0],c=e[1],h=e[2],f=e[3],d=r[0],p=r[1],m=r[2],g=r[3];return a=u*d+c*p+h*m+f*g,a<0&&(a=-a,d=-d,p=-p,m=-m,g=-g),1-a>1e-6?(i=Math.acos(a),o=Math.sin(i),s=Math.sin((1-n)*i)/o,l=Math.sin(n*i)/o):(s=1-n,l=n),t[0]=s*u+l*d,t[1]=s*c+l*p,t[2]=s*h+l*m,t[3]=s*f+l*g,t},s.sqlerp=function(){var t=s.create(),e=s.create();return function(r,n,i,a,o,l){return s.slerp(t,n,o,l),s.slerp(e,i,a,l),s.slerp(r,t,e,2*l*(1-l)),r}}(),s.invert=function(t,e){var r=e[0],n=e[1],i=e[2],a=e[3],o=r*r+n*n+i*i+a*a,s=o?1/o:0;return t[0]=-r*s,t[1]=-n*s,t[2]=-i*s,t[3]=a*s,t},s.conjugate=function(t,e){return t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t[3]=e[3],t},s.length=o.length,s.len=s.length,s.squaredLength=o.squaredLength,s.sqrLen=s.squaredLength,s.normalize=o.normalize,s.fromMat3=function(t,e){var r,n=e[0]+e[4]+e[8];if(n>0)r=Math.sqrt(n+1),t[3]=.5*r,r=.5/r,t[0]=(e[5]-e[7])*r,t[1]=(e[6]-e[2])*r,t[2]=(e[1]-e[3])*r;else{var i=0;e[4]>e[0]&&(i=1),e[8]>e[3*i+i]&&(i=2);var a=(i+1)%3,o=(i+2)%3;r=Math.sqrt(e[3*i+i]-e[3*a+a]-e[3*o+o]+1),t[i]=.5*r,r=.5/r,t[3]=(e[3*a+o]-e[3*o+a])*r,t[a]=(e[3*a+i]+e[3*i+a])*r,t[o]=(e[3*o+i]+e[3*i+o])*r}return t},s.str=function(t){return"quat("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+")"},s.exactEquals=o.exactEquals,s.equals=o.equals,e.exports=s},{"./common.js":194,"./mat3.js":197,"./vec3.js":201,"./vec4.js":202}],200:[function(t,e,r){var n=t("./common.js"),i={};i.create=function(){var t=new n.ARRAY_TYPE(2);return t[0]=0,t[1]=0,t},i.clone=function(t){var e=new n.ARRAY_TYPE(2);return e[0]=t[0],e[1]=t[1],e},i.fromValues=function(t,e){var r=new n.ARRAY_TYPE(2);return r[0]=t,r[1]=e,r},i.copy=function(t,e){return t[0]=e[0],t[1]=e[1],t},i.set=function(t,e,r){return t[0]=e,t[1]=r,t},i.add=function(t,e,r){return t[0]=e[0]+r[0],t[1]=e[1]+r[1],t},i.subtract=function(t,e,r){return t[0]=e[0]-r[0],t[1]=e[1]-r[1],t},i.sub=i.subtract,i.multiply=function(t,e,r){return t[0]=e[0]*r[0],t[1]=e[1]*r[1],t},i.mul=i.multiply,i.divide=function(t,e,r){return t[0]=e[0]/r[0],t[1]=e[1]/r[1],t},i.div=i.divide,i.ceil=function(t,e){return t[0]=Math.ceil(e[0]),t[1]=Math.ceil(e[1]),t},i.floor=function(t,e){return t[0]=Math.floor(e[0]),t[1]=Math.floor(e[1]),t},i.min=function(t,e,r){return t[0]=Math.min(e[0],r[0]),t[1]=Math.min(e[1],r[1]),t},i.max=function(t,e,r){return t[0]=Math.max(e[0],r[0]),t[1]=Math.max(e[1],r[1]),t},i.round=function(t,e){return t[0]=Math.round(e[0]),t[1]=Math.round(e[1]),t},i.scale=function(t,e,r){return t[0]=e[0]*r,t[1]=e[1]*r,t},i.scaleAndAdd=function(t,e,r,n){return t[0]=e[0]+r[0]*n,t[1]=e[1]+r[1]*n,t},i.distance=function(t,e){var r=e[0]-t[0],n=e[1]-t[1];return Math.sqrt(r*r+n*n)},i.dist=i.distance,i.squaredDistance=function(t,e){var r=e[0]-t[0],n=e[1]-t[1];return r*r+n*n},i.sqrDist=i.squaredDistance,i.length=function(t){var e=t[0],r=t[1];return Math.sqrt(e*e+r*r)},i.len=i.length,i.squaredLength=function(t){var e=t[0],r=t[1];return e*e+r*r},i.sqrLen=i.squaredLength,i.negate=function(t,e){return t[0]=-e[0],t[1]=-e[1],t},i.inverse=function(t,e){return t[0]=1/e[0],t[1]=1/e[1],t},i.normalize=function(t,e){var r=e[0],n=e[1],i=r*r+n*n;return i>0&&(i=1/Math.sqrt(i),t[0]=e[0]*i,t[1]=e[1]*i),t},i.dot=function(t,e){return t[0]*e[0]+t[1]*e[1]},i.cross=function(t,e,r){var n=e[0]*r[1]-e[1]*r[0];return t[0]=t[1]=0,t[2]=n,t},i.lerp=function(t,e,r,n){var i=e[0],a=e[1];return t[0]=i+n*(r[0]-i),t[1]=a+n*(r[1]-a),t},i.random=function(t,e){e=e||1;var r=2*n.RANDOM()*Math.PI;return t[0]=Math.cos(r)*e,t[1]=Math.sin(r)*e,t},i.transformMat2=function(t,e,r){var n=e[0],i=e[1];return t[0]=r[0]*n+r[2]*i,t[1]=r[1]*n+r[3]*i,t},i.transformMat2d=function(t,e,r){var n=e[0],i=e[1];return t[0]=r[0]*n+r[2]*i+r[4],t[1]=r[1]*n+r[3]*i+r[5],t},i.transformMat3=function(t,e,r){var n=e[0],i=e[1];return t[0]=r[0]*n+r[3]*i+r[6],t[1]=r[1]*n+r[4]*i+r[7],t},i.transformMat4=function(t,e,r){var n=e[0],i=e[1];return t[0]=r[0]*n+r[4]*i+r[12],t[1]=r[1]*n+r[5]*i+r[13],t},i.forEach=function(){var t=i.create();return function(e,r,n,i,a,o){var s,l;for(r||(r=2),n||(n=0),l=i?Math.min(i*r+n,e.length):e.length,s=n;s<l;s+=r)t[0]=e[s],t[1]=e[s+1],a(t,t,o),e[s]=t[0],e[s+1]=t[1];return e}}(),i.str=function(t){return"vec2("+t[0]+", "+t[1]+")"},i.exactEquals=function(t,e){return t[0]===e[0]&&t[1]===e[1]},i.equals=function(t,e){var r=t[0],i=t[1],a=e[0],o=e[1];return Math.abs(r-a)<=n.EPSILON*Math.max(1,Math.abs(r),Math.abs(a))&&Math.abs(i-o)<=n.EPSILON*Math.max(1,Math.abs(i),Math.abs(o))},e.exports=i},{"./common.js":194}],201:[function(t,e,r){var n=t("./common.js"),i={};i.create=function(){var t=new n.ARRAY_TYPE(3);return t[0]=0,t[1]=0,t[2]=0,t},i.clone=function(t){var e=new n.ARRAY_TYPE(3);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e},i.fromValues=function(t,e,r){var i=new n.ARRAY_TYPE(3);return i[0]=t,i[1]=e,i[2]=r,i},i.copy=function(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t},i.set=function(t,e,r,n){return t[0]=e,t[1]=r,t[2]=n,t},i.add=function(t,e,r){return t[0]=e[0]+r[0],t[1]=e[1]+r[1],t[2]=e[2]+r[2],t},i.subtract=function(t,e,r){return t[0]=e[0]-r[0],t[1]=e[1]-r[1],t[2]=e[2]-r[2],t},i.sub=i.subtract,i.multiply=function(t,e,r){return t[0]=e[0]*r[0],t[1]=e[1]*r[1],t[2]=e[2]*r[2],t},i.mul=i.multiply,i.divide=function(t,e,r){return t[0]=e[0]/r[0],t[1]=e[1]/r[1],t[2]=e[2]/r[2],t},i.div=i.divide,i.ceil=function(t,e){return t[0]=Math.ceil(e[0]),t[1]=Math.ceil(e[1]),t[2]=Math.ceil(e[2]),t},i.floor=function(t,e){return t[0]=Math.floor(e[0]),t[1]=Math.floor(e[1]),t[2]=Math.floor(e[2]),t},i.min=function(t,e,r){return t[0]=Math.min(e[0],r[0]),t[1]=Math.min(e[1],r[1]),t[2]=Math.min(e[2],r[2]),t},i.max=function(t,e,r){return t[0]=Math.max(e[0],r[0]),t[1]=Math.max(e[1],r[1]),t[2]=Math.max(e[2],r[2]),t},i.round=function(t,e){return t[0]=Math.round(e[0]),t[1]=Math.round(e[1]),t[2]=Math.round(e[2]),t},i.scale=function(t,e,r){return t[0]=e[0]*r,t[1]=e[1]*r,t[2]=e[2]*r,t},i.scaleAndAdd=function(t,e,r,n){return t[0]=e[0]+r[0]*n,t[1]=e[1]+r[1]*n,t[2]=e[2]+r[2]*n,t},i.distance=function(t,e){var r=e[0]-t[0],n=e[1]-t[1],i=e[2]-t[2];return Math.sqrt(r*r+n*n+i*i)},i.dist=i.distance,i.squaredDistance=function(t,e){var r=e[0]-t[0],n=e[1]-t[1],i=e[2]-t[2];return r*r+n*n+i*i},i.sqrDist=i.squaredDistance,i.length=function(t){var e=t[0],r=t[1],n=t[2];return Math.sqrt(e*e+r*r+n*n)},i.len=i.length,i.squaredLength=function(t){var e=t[0],r=t[1],n=t[2];return e*e+r*r+n*n},i.sqrLen=i.squaredLength,i.negate=function(t,e){return t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t},i.inverse=function(t,e){return t[0]=1/e[0],t[1]=1/e[1],t[2]=1/e[2],t},i.normalize=function(t,e){var r=e[0],n=e[1],i=e[2],a=r*r+n*n+i*i;return a>0&&(a=1/Math.sqrt(a),t[0]=e[0]*a,t[1]=e[1]*a,t[2]=e[2]*a),t},i.dot=function(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]},i.cross=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=r[0],s=r[1],l=r[2];return t[0]=i*l-a*s,t[1]=a*o-n*l,t[2]=n*s-i*o,t},i.lerp=function(t,e,r,n){var i=e[0],a=e[1],o=e[2];return t[0]=i+n*(r[0]-i),t[1]=a+n*(r[1]-a),t[2]=o+n*(r[2]-o),t},i.hermite=function(t,e,r,n,i,a){var o=a*a,s=o*(2*a-3)+1,l=o*(a-2)+a,u=o*(a-1),c=o*(3-2*a);return t[0]=e[0]*s+r[0]*l+n[0]*u+i[0]*c,t[1]=e[1]*s+r[1]*l+n[1]*u+i[1]*c,t[2]=e[2]*s+r[2]*l+n[2]*u+i[2]*c,t},i.bezier=function(t,e,r,n,i,a){var o=1-a,s=o*o,l=a*a,u=s*o,c=3*a*s,h=3*l*o,f=l*a;return t[0]=e[0]*u+r[0]*c+n[0]*h+i[0]*f,t[1]=e[1]*u+r[1]*c+n[1]*h+i[1]*f,t[2]=e[2]*u+r[2]*c+n[2]*h+i[2]*f,t},i.random=function(t,e){e=e||1;var r=2*n.RANDOM()*Math.PI,i=2*n.RANDOM()-1,a=Math.sqrt(1-i*i)*e;return t[0]=Math.cos(r)*a,t[1]=Math.sin(r)*a,t[2]=i*e,t},i.transformMat4=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=r[3]*n+r[7]*i+r[11]*a+r[15];return o=o||1,t[0]=(r[0]*n+r[4]*i+r[8]*a+r[12])/o,t[1]=(r[1]*n+r[5]*i+r[9]*a+r[13])/o,t[2]=(r[2]*n+r[6]*i+r[10]*a+r[14])/o,t},i.transformMat3=function(t,e,r){var n=e[0],i=e[1],a=e[2];return t[0]=n*r[0]+i*r[3]+a*r[6],t[1]=n*r[1]+i*r[4]+a*r[7],t[2]=n*r[2]+i*r[5]+a*r[8],t},i.transformQuat=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=r[0],s=r[1],l=r[2],u=r[3],c=u*n+s*a-l*i,h=u*i+l*n-o*a,f=u*a+o*i-s*n,d=-o*n-s*i-l*a;return t[0]=c*u+d*-o+h*-l-f*-s,t[1]=h*u+d*-s+f*-o-c*-l,t[2]=f*u+d*-l+c*-s-h*-o,t},i.rotateX=function(t,e,r,n){var i=[],a=[];return i[0]=e[0]-r[0],i[1]=e[1]-r[1],i[2]=e[2]-r[2],a[0]=i[0],a[1]=i[1]*Math.cos(n)-i[2]*Math.sin(n),a[2]=i[1]*Math.sin(n)+i[2]*Math.cos(n),t[0]=a[0]+r[0],t[1]=a[1]+r[1],t[2]=a[2]+r[2],t},i.rotateY=function(t,e,r,n){var i=[],a=[];return i[0]=e[0]-r[0],i[1]=e[1]-r[1],i[2]=e[2]-r[2],a[0]=i[2]*Math.sin(n)+i[0]*Math.cos(n),a[1]=i[1],a[2]=i[2]*Math.cos(n)-i[0]*Math.sin(n),t[0]=a[0]+r[0],t[1]=a[1]+r[1],t[2]=a[2]+r[2],t},i.rotateZ=function(t,e,r,n){var i=[],a=[];return i[0]=e[0]-r[0],i[1]=e[1]-r[1],i[2]=e[2]-r[2],a[0]=i[0]*Math.cos(n)-i[1]*Math.sin(n),a[1]=i[0]*Math.sin(n)+i[1]*Math.cos(n),a[2]=i[2],t[0]=a[0]+r[0],t[1]=a[1]+r[1],t[2]=a[2]+r[2],t},i.forEach=function(){var t=i.create();return function(e,r,n,i,a,o){var s,l;for(r||(r=3),n||(n=0),l=i?Math.min(i*r+n,e.length):e.length,s=n;s<l;s+=r)t[0]=e[s],t[1]=e[s+1],t[2]=e[s+2],a(t,t,o),e[s]=t[0],e[s+1]=t[1],e[s+2]=t[2];return e}}(),i.angle=function(t,e){var r=i.fromValues(t[0],t[1],t[2]),n=i.fromValues(e[0],e[1],e[2]);i.normalize(r,r),i.normalize(n,n);var a=i.dot(r,n);return a>1?0:Math.acos(a)},i.str=function(t){return"vec3("+t[0]+", "+t[1]+", "+t[2]+")"},i.exactEquals=function(t,e){return t[0]===e[0]&&t[1]===e[1]&&t[2]===e[2]},i.equals=function(t,e){var r=t[0],i=t[1],a=t[2],o=e[0],s=e[1],l=e[2];return Math.abs(r-o)<=n.EPSILON*Math.max(1,Math.abs(r),Math.abs(o))&&Math.abs(i-s)<=n.EPSILON*Math.max(1,Math.abs(i),Math.abs(s))&&Math.abs(a-l)<=n.EPSILON*Math.max(1,Math.abs(a),Math.abs(l))},e.exports=i},{"./common.js":194}],202:[function(t,e,r){var n=t("./common.js"),i={};i.create=function(){var t=new n.ARRAY_TYPE(4);return t[0]=0,t[1]=0,t[2]=0,t[3]=0,t},i.clone=function(t){var e=new n.ARRAY_TYPE(4);return e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],e},i.fromValues=function(t,e,r,i){var a=new n.ARRAY_TYPE(4);return a[0]=t,a[1]=e,a[2]=r,a[3]=i,a},i.copy=function(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=e[3],t},i.set=function(t,e,r,n,i){return t[0]=e,t[1]=r,t[2]=n,t[3]=i,t},i.add=function(t,e,r){return t[0]=e[0]+r[0],t[1]=e[1]+r[1],t[2]=e[2]+r[2],t[3]=e[3]+r[3],t},i.subtract=function(t,e,r){return t[0]=e[0]-r[0],t[1]=e[1]-r[1],t[2]=e[2]-r[2],t[3]=e[3]-r[3],t},i.sub=i.subtract,i.multiply=function(t,e,r){return t[0]=e[0]*r[0],t[1]=e[1]*r[1],t[2]=e[2]*r[2],t[3]=e[3]*r[3],t},i.mul=i.multiply,i.divide=function(t,e,r){return t[0]=e[0]/r[0],t[1]=e[1]/r[1],t[2]=e[2]/r[2],t[3]=e[3]/r[3],t},i.div=i.divide,i.ceil=function(t,e){return t[0]=Math.ceil(e[0]),t[1]=Math.ceil(e[1]),t[2]=Math.ceil(e[2]),t[3]=Math.ceil(e[3]),t},i.floor=function(t,e){return t[0]=Math.floor(e[0]),t[1]=Math.floor(e[1]),t[2]=Math.floor(e[2]),t[3]=Math.floor(e[3]),t},i.min=function(t,e,r){return t[0]=Math.min(e[0],r[0]),t[1]=Math.min(e[1],r[1]),t[2]=Math.min(e[2],r[2]),t[3]=Math.min(e[3],r[3]),t},i.max=function(t,e,r){return t[0]=Math.max(e[0],r[0]),t[1]=Math.max(e[1],r[1]),t[2]=Math.max(e[2],r[2]),t[3]=Math.max(e[3],r[3]),t},i.round=function(t,e){return t[0]=Math.round(e[0]),t[1]=Math.round(e[1]),t[2]=Math.round(e[2]),t[3]=Math.round(e[3]),t},i.scale=function(t,e,r){return t[0]=e[0]*r,t[1]=e[1]*r,t[2]=e[2]*r,t[3]=e[3]*r,t},i.scaleAndAdd=function(t,e,r,n){return t[0]=e[0]+r[0]*n,t[1]=e[1]+r[1]*n,t[2]=e[2]+r[2]*n,t[3]=e[3]+r[3]*n,t},i.distance=function(t,e){var r=e[0]-t[0],n=e[1]-t[1],i=e[2]-t[2],a=e[3]-t[3];return Math.sqrt(r*r+n*n+i*i+a*a)},i.dist=i.distance,i.squaredDistance=function(t,e){var r=e[0]-t[0],n=e[1]-t[1],i=e[2]-t[2],a=e[3]-t[3];return r*r+n*n+i*i+a*a},i.sqrDist=i.squaredDistance,i.length=function(t){var e=t[0],r=t[1],n=t[2],i=t[3];return Math.sqrt(e*e+r*r+n*n+i*i)},i.len=i.length,i.squaredLength=function(t){var e=t[0],r=t[1],n=t[2],i=t[3];return e*e+r*r+n*n+i*i},i.sqrLen=i.squaredLength,i.negate=function(t,e){return t[0]=-e[0],t[1]=-e[1],t[2]=-e[2],t[3]=-e[3],t},i.inverse=function(t,e){return t[0]=1/e[0],t[1]=1/e[1],t[2]=1/e[2],
t[3]=1/e[3],t},i.normalize=function(t,e){var r=e[0],n=e[1],i=e[2],a=e[3],o=r*r+n*n+i*i+a*a;return o>0&&(o=1/Math.sqrt(o),t[0]=r*o,t[1]=n*o,t[2]=i*o,t[3]=a*o),t},i.dot=function(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]+t[3]*e[3]},i.lerp=function(t,e,r,n){var i=e[0],a=e[1],o=e[2],s=e[3];return t[0]=i+n*(r[0]-i),t[1]=a+n*(r[1]-a),t[2]=o+n*(r[2]-o),t[3]=s+n*(r[3]-s),t},i.random=function(t,e){return e=e||1,t[0]=n.RANDOM(),t[1]=n.RANDOM(),t[2]=n.RANDOM(),t[3]=n.RANDOM(),i.normalize(t,t),i.scale(t,t,e),t},i.transformMat4=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=e[3];return t[0]=r[0]*n+r[4]*i+r[8]*a+r[12]*o,t[1]=r[1]*n+r[5]*i+r[9]*a+r[13]*o,t[2]=r[2]*n+r[6]*i+r[10]*a+r[14]*o,t[3]=r[3]*n+r[7]*i+r[11]*a+r[15]*o,t},i.transformQuat=function(t,e,r){var n=e[0],i=e[1],a=e[2],o=r[0],s=r[1],l=r[2],u=r[3],c=u*n+s*a-l*i,h=u*i+l*n-o*a,f=u*a+o*i-s*n,d=-o*n-s*i-l*a;return t[0]=c*u+d*-o+h*-l-f*-s,t[1]=h*u+d*-s+f*-o-c*-l,t[2]=f*u+d*-l+c*-s-h*-o,t[3]=e[3],t},i.forEach=function(){var t=i.create();return function(e,r,n,i,a,o){var s,l;for(r||(r=4),n||(n=0),l=i?Math.min(i*r+n,e.length):e.length,s=n;s<l;s+=r)t[0]=e[s],t[1]=e[s+1],t[2]=e[s+2],t[3]=e[s+3],a(t,t,o),e[s]=t[0],e[s+1]=t[1],e[s+2]=t[2],e[s+3]=t[3];return e}}(),i.str=function(t){return"vec4("+t[0]+", "+t[1]+", "+t[2]+", "+t[3]+")"},i.exactEquals=function(t,e){return t[0]===e[0]&&t[1]===e[1]&&t[2]===e[2]&&t[3]===e[3]},i.equals=function(t,e){var r=t[0],i=t[1],a=t[2],o=t[3],s=e[0],l=e[1],u=e[2],c=e[3];return Math.abs(r-s)<=n.EPSILON*Math.max(1,Math.abs(r),Math.abs(s))&&Math.abs(i-l)<=n.EPSILON*Math.max(1,Math.abs(i),Math.abs(l))&&Math.abs(a-u)<=n.EPSILON*Math.max(1,Math.abs(a),Math.abs(u))&&Math.abs(o-c)<=n.EPSILON*Math.max(1,Math.abs(o),Math.abs(c))},e.exports=i},{"./common.js":194}],203:[function(t,e,r){"use strict";function n(t,e){for(var r=[0,0,0,0],n=0;n<4;++n)for(var i=0;i<4;++i)r[i]+=t[4*n+i]*e[n];return r}function i(t,e,r,i,a){for(var o=n(i,n(r,n(e,[t[0],t[1],t[2],1]))),s=0;s<3;++s)o[s]/=o[3];return[.5*a[0]*(1+o[0]),.5*a[1]*(1-o[1])]}function a(t,e){if(2===t.length){for(var r=0,n=0,i=0;i<2;++i)r+=Math.pow(e[i]-t[0][i],2),n+=Math.pow(e[i]-t[1][i],2);return r=Math.sqrt(r),n=Math.sqrt(n),r+n<1e-6?[1,0]:[n/(r+n),r/(n+r)]}if(3===t.length){var a=[0,0];return u(t[0],t[1],t[2],e,a),l(t,a)}return[]}function o(t,e){for(var r=[0,0,0],n=0;n<t.length;++n)for(var i=t[n],a=e[n],o=0;o<3;++o)r[o]+=a*i[o];return r}function s(t,e,r,n,s,l){if(1===t.length)return[0,t[0].slice()];for(var u=new Array(t.length),c=0;c<t.length;++c)u[c]=i(t[c],r,n,s,l);for(var h=0,f=1/0,c=0;c<u.length;++c){for(var d=0,p=0;p<2;++p)d+=Math.pow(u[c][p]-e[p],2);d<f&&(f=d,h=c)}for(var m=a(u,e),g=0,c=0;c<3;++c){if(m[c]<-.001||m[c]>1.0001)return null;g+=m[c]}return Math.abs(g-1)>.001?null:[h,o(t,m),m]}var l=t("barycentric"),u=t("polytope-closest-point/lib/closest_point_2d.js");e.exports=s},{barycentric:49,"polytope-closest-point/lib/closest_point_2d.js":486}],204:[function(t,e,r){var n="precision mediump float;\n#define GLSLIFY 1\n\nuniform vec3 clipBounds[2];\nuniform float pickId;\n\nvarying vec3 f_position;\nvarying vec4 f_id;\n\nvoid main() {\n if(any(lessThan(f_position, clipBounds[0])) || \n any(greaterThan(f_position, clipBounds[1]))) {\n discard;\n }\n gl_FragColor = vec4(pickId, f_id.xyz);\n}";r.meshShader={vertex:"precision mediump float;\n#define GLSLIFY 1\n\nattribute vec3 position, normal;\nattribute vec4 color;\nattribute vec2 uv;\n\nuniform mat4 model\n , view\n , projection;\nuniform vec3 eyePosition\n , lightPosition;\n\nvarying vec3 f_normal\n , f_lightDirection\n , f_eyeDirection\n , f_data;\nvarying vec4 f_color;\nvarying vec2 f_uv;\n\nvoid main() {\n vec4 m_position = model * vec4(position, 1.0);\n vec4 t_position = view * m_position;\n gl_Position = projection * t_position;\n f_color = color;\n f_normal = normal;\n f_data = position;\n f_eyeDirection = eyePosition - position;\n f_lightDirection = lightPosition - position;\n f_uv = uv;\n}",fragment:"precision mediump float;\n#define GLSLIFY 1\n\nfloat beckmannDistribution_2_0(float x, float roughness) {\n float NdotH = max(x, 0.0001);\n float cos2Alpha = NdotH * NdotH;\n float tan2Alpha = (cos2Alpha - 1.0) / cos2Alpha;\n float roughness2 = roughness * roughness;\n float denom = 3.141592653589793 * roughness2 * cos2Alpha * cos2Alpha;\n return exp(tan2Alpha / roughness2) / denom;\n}\n\n\n\nfloat cookTorranceSpecular_1_1(\n vec3 lightDirection,\n vec3 viewDirection,\n vec3 surfaceNormal,\n float roughness,\n float fresnel) {\n\n float VdotN = max(dot(viewDirection, surfaceNormal), 0.0);\n float LdotN = max(dot(lightDirection, surfaceNormal), 0.0);\n\n //Half angle vector\n vec3 H = normalize(lightDirection + viewDirection);\n\n //Geometric term\n float NdotH = max(dot(surfaceNormal, H), 0.0);\n float VdotH = max(dot(viewDirection, H), 0.000001);\n float LdotH = max(dot(lightDirection, H), 0.000001);\n float G1 = (2.0 * NdotH * VdotN) / VdotH;\n float G2 = (2.0 * NdotH * LdotN) / LdotH;\n float G = min(1.0, min(G1, G2));\n \n //Distribution term\n float D = beckmannDistribution_2_0(NdotH, roughness);\n\n //Fresnel term\n float F = pow(1.0 - VdotN, fresnel);\n\n //Multiply terms and done\n return G * F * D / max(3.14159265 * VdotN, 0.000001);\n}\n\n\n\nuniform vec3 clipBounds[2];\nuniform float roughness\n , fresnel\n , kambient\n , kdiffuse\n , kspecular\n , opacity;\nuniform sampler2D texture;\n\nvarying vec3 f_normal\n , f_lightDirection\n , f_eyeDirection\n , f_data;\nvarying vec4 f_color;\nvarying vec2 f_uv;\n\nvoid main() {\n if(any(lessThan(f_data, clipBounds[0])) || \n any(greaterThan(f_data, clipBounds[1]))) {\n discard;\n }\n\n vec3 N = normalize(f_normal);\n vec3 L = normalize(f_lightDirection);\n vec3 V = normalize(f_eyeDirection);\n \n if(!gl_FrontFacing) {\n N = -N;\n }\n\n float specular = cookTorranceSpecular_1_1(L, V, N, roughness, fresnel);\n float diffuse = min(kambient + kdiffuse * max(dot(N, L), 0.0), 1.0);\n\n vec4 surfaceColor = f_color * texture2D(texture, f_uv);\n vec4 litColor = surfaceColor.a * vec4(diffuse * surfaceColor.rgb + kspecular * vec3(1,1,1) * specular, 1.0);\n\n gl_FragColor = litColor * opacity;\n}",attributes:[{name:"position",type:"vec3"},{name:"normal",type:"vec3"},{name:"color",type:"vec4"},{name:"uv",type:"vec2"}]},r.wireShader={vertex:"precision mediump float;\n#define GLSLIFY 1\n\nattribute vec3 position;\nattribute vec4 color;\nattribute vec2 uv;\n\nuniform mat4 model, view, projection;\n\nvarying vec4 f_color;\nvarying vec3 f_data;\nvarying vec2 f_uv;\n\nvoid main() {\n gl_Position = projection * view * model * vec4(position, 1.0);\n f_color = color;\n f_data = position;\n f_uv = uv;\n}",fragment:"precision mediump float;\n#define GLSLIFY 1\n\nuniform vec3 clipBounds[2];\nuniform sampler2D texture;\nuniform float opacity;\n\nvarying vec4 f_color;\nvarying vec3 f_data;\nvarying vec2 f_uv;\n\nvoid main() {\n if(any(lessThan(f_data, clipBounds[0])) || \n any(greaterThan(f_data, clipBounds[1]))) {\n discard;\n }\n\n gl_FragColor = f_color * texture2D(texture, f_uv) * opacity;\n}",attributes:[{name:"position",type:"vec3"},{name:"color",type:"vec4"},{name:"uv",type:"vec2"}]},r.pointShader={vertex:"precision mediump float;\n#define GLSLIFY 1\n\nattribute vec3 position;\nattribute vec4 color;\nattribute vec2 uv;\nattribute float pointSize;\n\nuniform mat4 model, view, projection;\nuniform vec3 clipBounds[2];\n\nvarying vec4 f_color;\nvarying vec2 f_uv;\n\nvoid main() {\n if(any(lessThan(position, clipBounds[0])) || \n any(greaterThan(position, clipBounds[1]))) {\n gl_Position = vec4(0,0,0,0);\n } else {\n gl_Position = projection * view * model * vec4(position, 1.0);\n }\n gl_PointSize = pointSize;\n f_color = color;\n f_uv = uv;\n}",fragment:"precision mediump float;\n#define GLSLIFY 1\n\nuniform sampler2D texture;\nuniform float opacity;\n\nvarying vec4 f_color;\nvarying vec2 f_uv;\n\nvoid main() {\n vec2 pointR = gl_PointCoord.xy - vec2(0.5,0.5);\n if(dot(pointR, pointR) > 0.25) {\n discard;\n }\n gl_FragColor = f_color * texture2D(texture, f_uv) * opacity;\n}",attributes:[{name:"position",type:"vec3"},{name:"color",type:"vec4"},{name:"uv",type:"vec2"},{name:"pointSize",type:"float"}]},r.pickShader={vertex:"precision mediump float;\n#define GLSLIFY 1\n\nattribute vec3 position;\nattribute vec4 id;\n\nuniform mat4 model, view, projection;\n\nvarying vec3 f_position;\nvarying vec4 f_id;\n\nvoid main() {\n gl_Position = projection * view * model * vec4(position, 1.0);\n f_id = id;\n f_position = position;\n}",fragment:n,attributes:[{name:"position",type:"vec3"},{name:"id",type:"vec4"}]},r.pointPickShader={vertex:"precision mediump float;\n#define GLSLIFY 1\n\nattribute vec3 position;\nattribute float pointSize;\nattribute vec4 id;\n\nuniform mat4 model, view, projection;\nuniform vec3 clipBounds[2];\n\nvarying vec3 f_position;\nvarying vec4 f_id;\n\nvoid main() {\n if(any(lessThan(position, clipBounds[0])) || \n any(greaterThan(position, clipBounds[1]))) {\n gl_Position = vec4(0,0,0,0);\n } else {\n gl_Position = projection * view * model * vec4(position, 1.0);\n gl_PointSize = pointSize;\n }\n f_id = id;\n f_position = position;\n}",fragment:n,attributes:[{name:"position",type:"vec3"},{name:"pointSize",type:"float"},{name:"id",type:"vec4"}]},r.contourShader={vertex:"precision mediump float;\n#define GLSLIFY 1\n\nattribute vec3 position;\n\nuniform mat4 model, view, projection;\n\nvoid main() {\n gl_Position = projection * view * model * vec4(position, 1.0);\n}",fragment:"precision mediump float;\n#define GLSLIFY 1\n\nuniform vec3 contourColor;\n\nvoid main() {\n gl_FragColor = vec4(contourColor,1);\n}\n",attributes:[{name:"position",type:"vec3"}]}},{}],205:[function(t,e,r){"use strict";function n(t,e,r,n,i,a,o,s,l,u,c,h,f,d,p,m,g,v,y,b,x,_,w,M,k,A,T){this.gl=t,this.cells=[],this.positions=[],this.intensity=[],this.texture=e,this.dirty=!0,this.triShader=r,this.lineShader=n,this.pointShader=i,this.pickShader=a,this.pointPickShader=o,this.contourShader=s,this.trianglePositions=l,this.triangleColors=c,this.triangleNormals=f,this.triangleUVs=h,this.triangleIds=u,this.triangleVAO=d,this.triangleCount=0,this.lineWidth=1,this.edgePositions=p,this.edgeColors=g,this.edgeUVs=v,this.edgeIds=m,this.edgeVAO=y,this.edgeCount=0,this.pointPositions=b,this.pointColors=_,this.pointUVs=w,this.pointSizes=M,this.pointIds=x,this.pointVAO=k,this.pointCount=0,this.contourLineWidth=1,this.contourPositions=A,this.contourVAO=T,this.contourCount=0,this.contourColor=[0,0,0],this.contourEnable=!0,this.pickId=1,this.bounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],this.clipBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.lightPosition=[1e5,1e5,0],this.ambientLight=.8,this.diffuseLight=.8,this.specularLight=2,this.roughness=.5,this.fresnel=1.5,this.opacity=1,this._model=D,this._view=D,this._projection=D,this._resolution=[1,1]}function i(t){for(var e=w({colormap:t,nshades:256,format:"rgba"}),r=new Uint8Array(1024),n=0;n<256;++n){for(var i=e[n],a=0;a<3;++a)r[4*n+a]=i[a];r[4*n+3]=255*i[3]}return _(r,[256,256,4],[4,0,1])}function a(t,e,r){for(var n=new Array(e),i=0;i<e;++i)n[i]=0;for(var a=t.length,i=0;i<a;++i)for(var o=t[i],s=0;s<o.length;++s)n[o[s]]=r[i];return n}function o(t){for(var e=t.length,r=new Array(e),n=0;n<e;++n)r[n]=t[n][2];return r}function s(t){var e=p(t,S.vertex,S.fragment);return e.attributes.position.location=0,e.attributes.color.location=2,e.attributes.uv.location=3,e.attributes.normal.location=4,e}function l(t){var e=p(t,E.vertex,E.fragment);return e.attributes.position.location=0,e.attributes.color.location=2,e.attributes.uv.location=3,e}function u(t){var e=p(t,L.vertex,L.fragment);return e.attributes.position.location=0,e.attributes.color.location=2,e.attributes.uv.location=3,e.attributes.pointSize.location=4,e}function c(t){var e=p(t,C.vertex,C.fragment);return e.attributes.position.location=0,e.attributes.id.location=1,e}function h(t){var e=p(t,I.vertex,I.fragment);return e.attributes.position.location=0,e.attributes.id.location=1,e.attributes.pointSize.location=4,e}function f(t){var e=p(t,z.vertex,z.fragment);return e.attributes.position.location=0,e}function d(t,e){1===arguments.length&&(e=t,t=e.gl);var r=s(t),i=l(t),a=u(t),o=c(t),d=h(t),p=f(t),y=v(t,_(new Uint8Array([255,255,255,255]),[1,1,4]));y.generateMipmap(),y.minFilter=t.LINEAR_MIPMAP_LINEAR,y.magFilter=t.LINEAR;var b=m(t),x=m(t),w=m(t),M=m(t),k=m(t),A=g(t,[{buffer:b,type:t.FLOAT,size:3},{buffer:k,type:t.UNSIGNED_BYTE,size:4,normalized:!0},{buffer:x,type:t.FLOAT,size:4},{buffer:w,type:t.FLOAT,size:2},{buffer:M,type:t.FLOAT,size:3}]),T=m(t),S=m(t),E=m(t),L=m(t),C=g(t,[{buffer:T,type:t.FLOAT,size:3},{buffer:L,type:t.UNSIGNED_BYTE,size:4,normalized:!0},{buffer:S,type:t.FLOAT,size:4},{buffer:E,type:t.FLOAT,size:2}]),I=m(t),z=m(t),D=m(t),P=m(t),O=m(t),R=g(t,[{buffer:I,type:t.FLOAT,size:3},{buffer:O,type:t.UNSIGNED_BYTE,size:4,normalized:!0},{buffer:z,type:t.FLOAT,size:4},{buffer:D,type:t.FLOAT,size:2},{buffer:P,type:t.FLOAT,size:1}]),F=m(t),j=g(t,[{buffer:F,type:t.FLOAT,size:3}]),N=new n(t,y,r,i,a,o,d,p,b,k,x,w,M,A,T,L,S,E,C,I,O,z,D,P,R,F,j);return N.update(e),N}var p=t("gl-shader"),m=t("gl-buffer"),g=t("gl-vao"),v=t("gl-texture2d"),y=t("normals"),b=t("gl-mat4/multiply"),x=t("gl-mat4/invert"),_=t("ndarray"),w=t("colormap"),M=t("simplicial-complex-contour"),k=t("typedarray-pool"),A=t("./lib/shaders"),T=t("./lib/closest-point"),S=A.meshShader,E=A.wireShader,L=A.pointShader,C=A.pickShader,I=A.pointPickShader,z=A.contourShader,D=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],P=n.prototype;P.isOpaque=function(){return this.opacity>=1},P.isTransparent=function(){return this.opacity<1},P.pickSlots=1,P.setPickBase=function(t){this.pickId=t},P.highlight=function(t){if(!t||!this.contourEnable)return void(this.contourCount=0);for(var e=M(this.cells,this.intensity,t.intensity),r=e.cells,n=e.vertexIds,i=e.vertexWeights,a=r.length,o=k.mallocFloat32(6*a),s=0,l=0;l<a;++l)for(var u=r[l],c=0;c<2;++c){var h=u[0];2===u.length&&(h=u[c]);for(var f=n[h][0],d=n[h][1],p=i[h],m=1-p,g=this.positions[f],v=this.positions[d],y=0;y<3;++y)o[s++]=p*g[y]+m*v[y]}this.contourCount=s/3|0,this.contourPositions.update(o.subarray(0,s)),k.free(o)},P.update=function(t){t=t||{};var e=this.gl;this.dirty=!0,"contourEnable"in t&&(this.contourEnable=t.contourEnable),"contourColor"in t&&(this.contourColor=t.contourColor),"lineWidth"in t&&(this.lineWidth=t.lineWidth),"lightPosition"in t&&(this.lightPosition=t.lightPosition),"opacity"in t&&(this.opacity=t.opacity),"ambient"in t&&(this.ambientLight=t.ambient),"diffuse"in t&&(this.diffuseLight=t.diffuse),"specular"in t&&(this.specularLight=t.specular),"roughness"in t&&(this.roughness=t.roughness),"fresnel"in t&&(this.fresnel=t.fresnel),t.texture?(this.texture.dispose(),this.texture=v(e,t.texture)):t.colormap&&(this.texture.shape=[256,256],this.texture.minFilter=e.LINEAR_MIPMAP_LINEAR,this.texture.magFilter=e.LINEAR,this.texture.setPixels(i(t.colormap)),this.texture.generateMipmap());var r=t.cells,n=t.positions;if(n&&r){var s=[],l=[],u=[],c=[],h=[],f=[],d=[],p=[],m=[],g=[],b=[],x=[],_=[],w=[];this.cells=r,this.positions=n;var M=t.vertexNormals,k=t.cellNormals,A=void 0===t.vertexNormalsEpsilon?1e-6:t.vertexNormalsEpsilon,T=void 0===t.faceNormalsEpsilon?1e-6:t.faceNormalsEpsilon;t.useFacetNormals&&!k&&(k=y.faceNormals(r,n,T)),k||M||(M=y.vertexNormals(r,n,A));var S=t.vertexColors,E=t.cellColors,L=t.meshColor||[1,1,1,1],C=t.vertexUVs,I=t.vertexIntensity,z=t.cellUVs,D=t.cellIntensity,P=1/0,O=-1/0;if(!C&&!z)if(I)if(t.vertexIntensityBounds)P=+t.vertexIntensityBounds[0],O=+t.vertexIntensityBounds[1];else for(var R=0;R<I.length;++R){var F=I[R];P=Math.min(P,F),O=Math.max(O,F)}else if(D)for(var R=0;R<D.length;++R){var F=D[R];P=Math.min(P,F),O=Math.max(O,F)}else for(var R=0;R<n.length;++R){var F=n[R][2];P=Math.min(P,F),O=Math.max(O,F)}this.intensity=I||(D?a(r,n.length,D):o(n));var j=t.pointSizes,N=t.pointSize||1;this.bounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]];for(var R=0;R<n.length;++R)for(var B=n[R],U=0;U<3;++U)!isNaN(B[U])&&isFinite(B[U])&&(this.bounds[0][U]=Math.min(this.bounds[0][U],B[U]),this.bounds[1][U]=Math.max(this.bounds[1][U],B[U]));var V=0,H=0,q=0;t:for(var R=0;R<r.length;++R){var G=r[R];switch(G.length){case 1:for(var Y=G[0],B=n[Y],U=0;U<3;++U)if(isNaN(B[U])||!isFinite(B[U]))continue t;g.push(B[0],B[1],B[2]);var W;W=S?S[Y]:E?E[R]:L,3===W.length?b.push(W[0],W[1],W[2],1):b.push(W[0],W[1],W[2],W[3]);var X;X=C?C[Y]:I?[(I[Y]-P)/(O-P),0]:z?z[R]:D?[(D[R]-P)/(O-P),0]:[(B[2]-P)/(O-P),0],x.push(X[0],X[1]),j?_.push(j[Y]):_.push(N),w.push(R),q+=1;break;case 2:for(var U=0;U<2;++U)for(var Y=G[U],B=n[Y],Z=0;Z<3;++Z)if(isNaN(B[Z])||!isFinite(B[Z]))continue t;for(var U=0;U<2;++U){var Y=G[U],B=n[Y];f.push(B[0],B[1],B[2]);var W;W=S?S[Y]:E?E[R]:L,3===W.length?d.push(W[0],W[1],W[2],1):d.push(W[0],W[1],W[2],W[3]);var X;X=C?C[Y]:I?[(I[Y]-P)/(O-P),0]:z?z[R]:D?[(D[R]-P)/(O-P),0]:[(B[2]-P)/(O-P),0],p.push(X[0],X[1]),m.push(R)}H+=1;break;case 3:for(var U=0;U<3;++U)for(var Y=G[U],B=n[Y],Z=0;Z<3;++Z)if(isNaN(B[Z])||!isFinite(B[Z]))continue t;for(var U=0;U<3;++U){var Y=G[U],B=n[Y];s.push(B[0],B[1],B[2]);var W;W=S?S[Y]:E?E[R]:L,3===W.length?l.push(W[0],W[1],W[2],1):l.push(W[0],W[1],W[2],W[3]);var X;X=C?C[Y]:I?[(I[Y]-P)/(O-P),0]:z?z[R]:D?[(D[R]-P)/(O-P),0]:[(B[2]-P)/(O-P),0],c.push(X[0],X[1]);var J;J=M?M[Y]:k[R],u.push(J[0],J[1],J[2]),h.push(R)}V+=1}}this.pointCount=q,this.edgeCount=H,this.triangleCount=V,this.pointPositions.update(g),this.pointColors.update(b),this.pointUVs.update(x),this.pointSizes.update(_),this.pointIds.update(new Uint32Array(w)),this.edgePositions.update(f),this.edgeColors.update(d),this.edgeUVs.update(p),this.edgeIds.update(new Uint32Array(m)),this.trianglePositions.update(s),this.triangleColors.update(l),this.triangleUVs.update(c),this.triangleNormals.update(u),this.triangleIds.update(new Uint32Array(h))}},P.drawTransparent=P.draw=function(t){t=t||{};for(var e=this.gl,r=t.model||D,n=t.view||D,i=t.projection||D,a=[[-1e6,-1e6,-1e6],[1e6,1e6,1e6]],o=0;o<3;++o)a[0][o]=Math.max(a[0][o],this.clipBounds[0][o]),a[1][o]=Math.min(a[1][o],this.clipBounds[1][o]);var s={model:r,view:n,projection:i,clipBounds:a,kambient:this.ambientLight,kdiffuse:this.diffuseLight,kspecular:this.specularLight,roughness:this.roughness,fresnel:this.fresnel,eyePosition:[0,0,0],lightPosition:[0,0,0],opacity:this.opacity,contourColor:this.contourColor,texture:0};this.texture.bind(0);var l=new Array(16);b(l,s.view,s.model),b(l,s.projection,l),x(l,l);for(var o=0;o<3;++o)s.eyePosition[o]=l[12+o]/l[15];for(var u=l[15],o=0;o<3;++o)u+=this.lightPosition[o]*l[4*o+3];for(var o=0;o<3;++o){for(var c=l[12+o],h=0;h<3;++h)c+=l[4*h+o]*this.lightPosition[h];s.lightPosition[o]=c/u}if(this.triangleCount>0){var f=this.triShader;f.bind(),f.uniforms=s,this.triangleVAO.bind(),e.drawArrays(e.TRIANGLES,0,3*this.triangleCount),this.triangleVAO.unbind()}if(this.edgeCount>0&&this.lineWidth>0){var f=this.lineShader;f.bind(),f.uniforms=s,this.edgeVAO.bind(),e.lineWidth(this.lineWidth),e.drawArrays(e.LINES,0,2*this.edgeCount),this.edgeVAO.unbind()}if(this.pointCount>0){var f=this.pointShader;f.bind(),f.uniforms=s,this.pointVAO.bind(),e.drawArrays(e.POINTS,0,this.pointCount),this.pointVAO.unbind()}if(this.contourEnable&&this.contourCount>0&&this.contourLineWidth>0){var f=this.contourShader;f.bind(),f.uniforms=s,this.contourVAO.bind(),e.drawArrays(e.LINES,0,this.contourCount),this.contourVAO.unbind()}},P.drawPick=function(t){t=t||{};for(var e=this.gl,r=t.model||D,n=t.view||D,i=t.projection||D,a=[[-1e6,-1e6,-1e6],[1e6,1e6,1e6]],o=0;o<3;++o)a[0][o]=Math.max(a[0][o],this.clipBounds[0][o]),a[1][o]=Math.min(a[1][o],this.clipBounds[1][o]);this._model=[].slice.call(r),this._view=[].slice.call(n),this._projection=[].slice.call(i),this._resolution=[e.drawingBufferWidth,e.drawingBufferHeight];var s={model:r,view:n,projection:i,clipBounds:a,pickId:this.pickId/255},l=this.pickShader;if(l.bind(),l.uniforms=s,this.triangleCount>0&&(this.triangleVAO.bind(),e.drawArrays(e.TRIANGLES,0,3*this.triangleCount),this.triangleVAO.unbind()),this.edgeCount>0&&(this.edgeVAO.bind(),e.lineWidth(this.lineWidth),e.drawArrays(e.LINES,0,2*this.edgeCount),this.edgeVAO.unbind()),this.pointCount>0){var l=this.pointPickShader;l.bind(),l.uniforms=s,this.pointVAO.bind(),e.drawArrays(e.POINTS,0,this.pointCount),this.pointVAO.unbind()}},P.pick=function(t){if(!t)return null;if(t.id!==this.pickId)return null;for(var e=t.value[0]+256*t.value[1]+65536*t.value[2],r=this.cells[e],n=this.positions,i=new Array(r.length),a=0;a<r.length;++a)i[a]=n[r[a]];var o=T(i,[t.coord[0],this._resolution[1]-t.coord[1]],this._model,this._view,this._projection,this._resolution);if(!o)return null;for(var s=o[2],l=0,a=0;a<r.length;++a)l+=s[a]*this.intensity[r[a]];return{position:o[1],index:r[o[0]],cell:r,cellId:e,intensity:l,dataCoordinate:this.positions[r[o[0]]]}},P.dispose=function(){this.texture.dispose(),this.triShader.dispose(),this.lineShader.dispose(),this.pointShader.dispose(),this.pickShader.dispose(),this.pointPickShader.dispose(),this.triangleVAO.dispose(),this.trianglePositions.dispose(),this.triangleColors.dispose(),this.triangleUVs.dispose(),this.triangleNormals.dispose(),this.triangleIds.dispose(),this.edgeVAO.dispose(),this.edgePositions.dispose(),this.edgeColors.dispose(),this.edgeUVs.dispose(),this.edgeIds.dispose(),this.pointVAO.dispose(),this.pointPositions.dispose(),this.pointColors.dispose(),this.pointUVs.dispose(),this.pointSizes.dispose(),this.pointIds.dispose(),this.contourVAO.dispose(),this.contourPositions.dispose(),this.contourShader.dispose()},e.exports=d},{"./lib/closest-point":203,"./lib/shaders":204,colormap:99,"gl-buffer":156,"gl-mat4/invert":181,"gl-mat4/multiply":183,"gl-shader":255,"gl-texture2d":267,"gl-vao":271,ndarray:467,normals:469,"simplicial-complex-contour":517,"typedarray-pool":541}],206:[function(t,e,r){"use strict";function n(t,e,r){this.plot=t,this.vbo=e,this.shader=r}function i(t){var e=t.gl;return new n(t,a(e,[0,0,0,1,1,0,1,1]),o(e,s.boxVert,s.lineFrag))}e.exports=i;var a=t("gl-buffer"),o=t("gl-shader"),s=t("./shaders"),l=n.prototype;l.bind=function(){var t=this.shader;this.vbo.bind(),this.shader.bind(),t.attributes.coord.pointer(),t.uniforms.screenBox=this.plot.screenBox},l.drawBox=function(){var t=[0,0],e=[0,0];return function(r,n,i,a,o){var s=this.plot,l=this.shader,u=s.gl;t[0]=r,t[1]=n,e[0]=i,e[1]=a,l.uniforms.lo=t,l.uniforms.hi=e,l.uniforms.color=o,u.drawArrays(u.TRIANGLE_STRIP,0,4)}}(),l.dispose=function(){this.vbo.dispose(),this.shader.dispose()}},{"./shaders":209,"gl-buffer":156,"gl-shader":212}],207:[function(t,e,r){"use strict";function n(t,e,r,n){this.plot=t,this.vbo=e,this.shader=r,this.tickShader=n,this.ticks=[[],[]]}function i(t,e){return t-e}function a(t){var e=t.gl;return new n(t,o(e),s(e,u.gridVert,u.gridFrag),s(e,u.tickVert,u.gridFrag))}e.exports=a;var o=t("gl-buffer"),s=t("gl-shader"),l=t("binary-search-bounds"),u=t("./shaders"),c=n.prototype;c.draw=function(){var t=[0,0],e=[0,0],r=[0,0];return function(){for(var n=this.plot,i=this.vbo,a=this.shader,o=this.ticks,s=n.gl,l=n._tickBounds,u=n.dataBox,c=n.viewBox,h=n.gridLineWidth,f=n.gridLineColor,d=n.gridLineEnable,p=n.pixelRatio,m=0;m<2;++m){var g=l[m],v=l[m+2],y=v-g,b=.5*(u[m+2]+u[m]),x=u[m+2]-u[m];e[m]=2*y/x,t[m]=2*(g-b)/x}a.bind(),i.bind(),a.attributes.dataCoord.pointer(),a.uniforms.dataShift=t,a.uniforms.dataScale=e;for(var _=0,m=0;m<2;++m){r[0]=r[1]=0,r[m]=1,a.uniforms.dataAxis=r,a.uniforms.lineWidth=h[m]/(c[m+2]-c[m])*p,a.uniforms.color=f[m];var w=6*o[m].length;d[m]&&w&&s.drawArrays(s.TRIANGLES,_,w),_+=w}}}(),c.drawTickMarks=function(){var t=[0,0],e=[0,0],r=[1,0],n=[0,1],a=[0,0],o=[0,0];return function(){for(var s=this.plot,u=this.vbo,c=this.tickShader,h=this.ticks,f=s.gl,d=s._tickBounds,p=s.dataBox,m=s.viewBox,g=s.pixelRatio,v=s.screenBox,y=v[2]-v[0],b=v[3]-v[1],x=m[2]-m[0],_=m[3]-m[1],w=0;w<2;++w){var M=d[w],k=d[w+2],A=k-M,T=.5*(p[w+2]+p[w]),S=p[w+2]-p[w];e[w]=2*A/S,t[w]=2*(M-T)/S}e[0]*=x/y,t[0]*=x/y,e[1]*=_/b,t[1]*=_/b,c.bind(),u.bind(),c.attributes.dataCoord.pointer();var E=c.uniforms;E.dataShift=t,E.dataScale=e;var L=s.tickMarkLength,C=s.tickMarkWidth,I=s.tickMarkColor,z=6*h[0].length,D=Math.min(l.ge(h[0],(p[0]-d[0])/(d[2]-d[0]),i),h[0].length),P=Math.min(l.gt(h[0],(p[2]-d[0])/(d[2]-d[0]),i),h[0].length),O=0+6*D,R=6*Math.max(0,P-D),F=Math.min(l.ge(h[1],(p[1]-d[1])/(d[3]-d[1]),i),h[1].length),j=Math.min(l.gt(h[1],(p[3]-d[1])/(d[3]-d[1]),i),h[1].length),N=z+6*F,B=6*Math.max(0,j-F);a[0]=2*(m[0]-L[1])/y-1,a[1]=(m[3]+m[1])/b-1,o[0]=L[1]*g/y,o[1]=C[1]*g/b,B&&(E.color=I[1],E.tickScale=o,E.dataAxis=n,E.screenOffset=a,f.drawArrays(f.TRIANGLES,N,B)),a[0]=(m[2]+m[0])/y-1,a[1]=2*(m[1]-L[0])/b-1,o[0]=C[0]*g/y,o[1]=L[0]*g/b,R&&(E.color=I[0],E.tickScale=o,E.dataAxis=r,E.screenOffset=a,f.drawArrays(f.TRIANGLES,O,R)),a[0]=2*(m[2]+L[3])/y-1,a[1]=(m[3]+m[1])/b-1,o[0]=L[3]*g/y,o[1]=C[3]*g/b,B&&(E.color=I[3],E.tickScale=o,E.dataAxis=n,E.screenOffset=a,f.drawArrays(f.TRIANGLES,N,B)),a[0]=(m[2]+m[0])/y-1,a[1]=2*(m[3]+L[2])/b-1,o[0]=C[2]*g/y,o[1]=L[2]*g/b,R&&(E.color=I[2],E.tickScale=o,E.dataAxis=r,E.screenOffset=a,f.drawArrays(f.TRIANGLES,O,R))}}(),c.update=function(){var t=[1,1,-1,-1,1,-1],e=[1,-1,1,1,-1,-1];return function(r){for(var n=r.ticks,i=r.bounds,a=new Float32Array(18*(n[0].length+n[1].length)),o=(this.plot.zeroLineEnable,0),s=[[],[]],l=0;l<2;++l)for(var u=s[l],c=n[l],h=i[l],f=i[l+2],d=0;d<c.length;++d){var p=(c[d].x-h)/(f-h);u.push(p);for(var m=0;m<6;++m)a[o++]=p,a[o++]=t[m],a[o++]=e[m]}this.ticks=s,this.vbo.update(a)}}(),c.dispose=function(){this.vbo.dispose(),this.shader.dispose(),this.tickShader.dispose()}},{"./shaders":209,"binary-search-bounds":211,"gl-buffer":156,"gl-shader":212}],208:[function(t,e,r){"use strict";function n(t,e,r){this.plot=t,this.vbo=e,this.shader=r}function i(t){var e=t.gl;return new n(t,a(e,[-1,-1,-1,1,1,-1,1,1]),o(e,s.lineVert,s.lineFrag))}e.exports=i;var a=t("gl-buffer"),o=t("gl-shader"),s=t("./shaders"),l=n.prototype;l.bind=function(){var t=this.shader;this.vbo.bind(),this.shader.bind(),t.attributes.coord.pointer(),t.uniforms.screenBox=this.plot.screenBox},l.drawLine=function(){var t=[0,0],e=[0,0];return function(r,n,i,a,o,s){var l=this.plot,u=this.shader,c=l.gl;t[0]=r,t[1]=n,e[0]=i,e[1]=a,u.uniforms.start=t,u.uniforms.end=e,u.uniforms.width=o*l.pixelRatio,u.uniforms.color=s,c.drawArrays(c.TRIANGLE_STRIP,0,4)}}(),l.dispose=function(){this.vbo.dispose(),this.shader.dispose()}},{"./shaders":209,"gl-buffer":156,"gl-shader":212}],209:[function(t,e,r){"use strict";var n="precision lowp float;\n#define GLSLIFY 1\nuniform vec4 color;\nvoid main() {\n gl_FragColor = vec4(color.xyz * color.w, color.w);\n}\n";e.exports={lineVert:"precision mediump float;\n#define GLSLIFY 1\n\nattribute vec2 coord;\n\nuniform vec4 screenBox;\nuniform vec2 start, end;\nuniform float width;\n\nvec2 perp(vec2 v) {\n return vec2(v.y, -v.x);\n}\n\nvec2 screen(vec2 v) {\n return 2.0 * (v - screenBox.xy) / (screenBox.zw - screenBox.xy) - 1.0;\n}\n\nvoid main() {\n vec2 delta = normalize(perp(start - end));\n vec2 offset = mix(start, end, 0.5 * (coord.y+1.0));\n gl_Position = vec4(screen(offset + 0.5 * width * delta * coord.x), 0, 1);\n}\n",lineFrag:n,textVert:"#define GLSLIFY 1\nattribute vec3 textCoordinate;\n\nuniform vec2 dataScale, dataShift, dataAxis, screenOffset, textScale;\nuniform float angle;\n\nvoid main() {\n float dataOffset = textCoordinate.z;\n vec2 glyphOffset = textCoordinate.xy;\n mat2 glyphMatrix = mat2(cos(angle), sin(angle), -sin(angle), cos(angle));\n vec2 screenCoordinate = dataAxis * (dataScale * dataOffset + dataShift) +\n glyphMatrix * glyphOffset * textScale + screenOffset;\n gl_Position = vec4(screenCoordinate, 0, 1);\n}\n",textFrag:n,gridVert:"precision mediump float;\n#define GLSLIFY 1\n\nattribute vec3 dataCoord;\n\nuniform vec2 dataAxis, dataShift, dataScale;\nuniform float lineWidth;\n\nvoid main() {\n vec2 pos = dataAxis * (dataScale * dataCoord.x + dataShift);\n pos += 10.0 * dataCoord.y * vec2(dataAxis.y, -dataAxis.x) + dataCoord.z * lineWidth;\n gl_Position = vec4(pos, 0, 1);\n}\n",gridFrag:n,boxVert:"precision mediump float;\n#define GLSLIFY 1\n\nattribute vec2 coord;\n\nuniform vec4 screenBox;\nuniform vec2 lo, hi;\n\nvec2 screen(vec2 v) {\n return 2.0 * (v - screenBox.xy) / (screenBox.zw - screenBox.xy) - 1.0;\n}\n\nvoid main() {\n gl_Position = vec4(screen(mix(lo, hi, coord)), 0, 1);\n}\n",tickVert:"precision mediump float;\n#define GLSLIFY 1\n\nattribute vec3 dataCoord;\n\nuniform vec2 dataAxis, dataShift, dataScale, screenOffset, tickScale;\n\nvoid main() {\n vec2 pos = dataAxis * (dataScale * dataCoord.x + dataShift);\n gl_Position = vec4(pos + tickScale*dataCoord.yz + screenOffset, 0, 1);\n}\n"}},{}],210:[function(t,e,r){"use strict";function n(t,e,r){this.plot=t,this.vbo=e,this.shader=r,this.tickOffset=[[],[]],this.tickX=[[],[]],this.labelOffset=[0,0],this.labelCount=[0,0]}function i(t){var e=t.gl;return new n(t,a(e),o(e,u.textVert,u.textFrag))}e.exports=i;var a=t("gl-buffer"),o=t("gl-shader"),s=t("text-cache"),l=t("binary-search-bounds"),u=t("./shaders"),c=n.prototype;c.drawTicks=function(){var t=[0,0],e=[0,0],r=[0,0];return function(n){var i=this.plot,a=this.shader,o=this.tickX[n],s=this.tickOffset[n],u=i.gl,c=i.viewBox,h=i.dataBox,f=i.screenBox,d=i.pixelRatio,p=i.tickEnable,m=i.tickPad,g=i.tickColor,v=i.tickAngle,y=i.labelEnable,b=i.labelPad,x=i.labelColor,_=i.labelAngle,w=this.labelOffset[n],M=this.labelCount[n],k=l.lt(o,h[n]),A=l.le(o,h[n+2]);t[0]=t[1]=0,t[n]=1,e[n]=(c[2+n]+c[n])/(f[2+n]-f[n])-1;var T=2/f[2+(1^n)]-f[1^n];e[1^n]=T*c[1^n]-1,p[n]&&(e[1^n]-=T*d*m[n],k<A&&s[A]>s[k]&&(a.uniforms.dataAxis=t,a.uniforms.screenOffset=e,a.uniforms.color=g[n],a.uniforms.angle=v[n],u.drawArrays(u.TRIANGLES,s[k],s[A]-s[k]))),y[n]&&M&&(e[1^n]-=T*d*b[n],a.uniforms.dataAxis=r,a.uniforms.screenOffset=e,a.uniforms.color=x[n],a.uniforms.angle=_[n],u.drawArrays(u.TRIANGLES,w,M)),e[1^n]=T*c[2+(1^n)]-1,p[n+2]&&(e[1^n]+=T*d*m[n+2],k<A&&s[A]>s[k]&&(a.uniforms.dataAxis=t,a.uniforms.screenOffset=e,a.uniforms.color=g[n+2],a.uniforms.angle=v[n+2],u.drawArrays(u.TRIANGLES,s[k],s[A]-s[k]))),y[n+2]&&M&&(e[1^n]+=T*d*b[n+2],a.uniforms.dataAxis=r,a.uniforms.screenOffset=e,a.uniforms.color=x[n+2],a.uniforms.angle=_[n+2],u.drawArrays(u.TRIANGLES,w,M))}}(),c.drawTitle=function(){var t=[0,0],e=[0,0];return function(){var r=this.plot,n=this.shader,i=r.gl,a=r.screenBox,o=r.titleCenter,s=r.titleAngle,l=r.titleColor,u=r.pixelRatio;if(this.titleCount){for(var c=0;c<2;++c)e[c]=2*(o[c]*u-a[c])/(a[2+c]-a[c])-1;n.bind(),n.uniforms.dataAxis=t,n.uniforms.screenOffset=e,n.uniforms.angle=s,n.uniforms.color=l,i.drawArrays(i.TRIANGLES,this.titleOffset,this.titleCount)}}}(),c.bind=function(){var t=[0,0],e=[0,0],r=[0,0];return function(){var n=this.plot,i=this.shader,a=n._tickBounds,o=n.dataBox,s=n.screenBox,l=n.viewBox;i.bind();for(var u=0;u<2;++u){var c=a[u],h=a[u+2],f=h-c,d=.5*(o[u+2]+o[u]),p=o[u+2]-o[u],m=l[u],g=l[u+2],v=g-m,y=s[u],b=s[u+2],x=b-y;e[u]=2*f/p*v/x,t[u]=2*(c-d)/p*v/x}r[1]=2*n.pixelRatio/(s[3]-s[1]),r[0]=r[1]*(s[3]-s[1])/(s[2]-s[0]),i.uniforms.dataScale=e,i.uniforms.dataShift=t,i.uniforms.textScale=r,this.vbo.bind(),i.attributes.textCoordinate.pointer()}}(),c.update=function(t){var e,r,n,i,a,o=[],l=t.ticks,u=t.bounds;for(a=0;a<2;++a){var c=[Math.floor(o.length/3)],h=[-1/0],f=l[a];for(e=0;e<f.length;++e){var d=f[e],p=d.x,m=d.text,g=d.font||"sans-serif";i=d.fontSize||12;for(var v=1/(u[a+2]-u[a]),y=u[a],b=m.split("\n"),x=0;x<b.length;x++)for(n=s(g,b[x]).data,r=0;r<n.length;r+=2)o.push(n[r]*i,-n[r+1]*i-x*i*1.2,(p-y)*v);c.push(Math.floor(o.length/3)),h.push(p)}this.tickOffset[a]=c,this.tickX[a]=h}for(a=0;a<2;++a){for(this.labelOffset[a]=Math.floor(o.length/3),n=s(t.labelFont[a],t.labels[a],{textAlign:"center"}).data,
i=t.labelSize[a],e=0;e<n.length;e+=2)o.push(n[e]*i,-n[e+1]*i,0);this.labelCount[a]=Math.floor(o.length/3)-this.labelOffset[a]}for(this.titleOffset=Math.floor(o.length/3),n=s(t.titleFont,t.title).data,i=t.titleSize,e=0;e<n.length;e+=2)o.push(n[e]*i,-n[e+1]*i,0);this.titleCount=Math.floor(o.length/3)-this.titleOffset,this.vbo.update(o)},c.dispose=function(){this.vbo.dispose(),this.shader.dispose()}},{"./shaders":209,"binary-search-bounds":211,"gl-buffer":156,"gl-shader":212,"text-cache":532}],211:[function(t,e,r){arguments[4][84][0].apply(r,arguments)},{dup:84}],212:[function(t,e,r){"use strict";function n(t){this.gl=t,this.gl.lastAttribCount=0,this._vref=this._fref=this._relink=this.vertShader=this.fragShader=this.program=this.attributes=this.uniforms=this.types=null}function i(t,e){return t.name<e.name?-1:1}function a(t,e,r,i,a){var o=new n(t);return o.update(e,r,i,a),o}var o=t("./lib/create-uniforms"),s=t("./lib/create-attributes"),l=t("./lib/reflect"),u=t("./lib/shader-cache"),c=t("./lib/runtime-reflect"),h=t("./lib/GLError"),f=n.prototype;f.bind=function(){this.program||this._relink();var t,e=this.gl.getProgramParameter(this.program,this.gl.ACTIVE_ATTRIBUTES),r=this.gl.lastAttribCount;if(e>r)for(t=r;t<e;t++)this.gl.enableVertexAttribArray(t);else if(r>e)for(t=e;t<r;t++)this.gl.disableVertexAttribArray(t);this.gl.lastAttribCount=e,this.gl.useProgram(this.program)},f.dispose=function(){for(var t=this.gl.lastAttribCount,e=0;e<t;e++)this.gl.disableVertexAttribArray(e);this.gl.lastAttribCount=0,this._fref&&this._fref.dispose(),this._vref&&this._vref.dispose(),this.attributes=this.types=this.vertShader=this.fragShader=this.program=this._relink=this._fref=this._vref=null},f.update=function(t,e,r,n){function a(){d.program=u.program(p,d._vref,d._fref,_,w);for(var t=0;t<r.length;++t)E[t]=p.getUniformLocation(d.program,r[t].name)}if(!e||1===arguments.length){var f=t;t=f.vertex,e=f.fragment,r=f.uniforms,n=f.attributes}var d=this,p=d.gl,m=d._vref;d._vref=u.shader(p,p.VERTEX_SHADER,t),m&&m.dispose(),d.vertShader=d._vref.shader;var g=this._fref;if(d._fref=u.shader(p,p.FRAGMENT_SHADER,e),g&&g.dispose(),d.fragShader=d._fref.shader,!r||!n){var v=p.createProgram();if(p.attachShader(v,d.fragShader),p.attachShader(v,d.vertShader),p.linkProgram(v),!p.getProgramParameter(v,p.LINK_STATUS)){var y=p.getProgramInfoLog(v);throw new h(y,"Error linking program:"+y)}r=r||c.uniforms(p,v),n=n||c.attributes(p,v),p.deleteProgram(v)}n=n.slice(),n.sort(i);var b,x=[],_=[],w=[];for(b=0;b<n.length;++b){var M=n[b];if(M.type.indexOf("mat")>=0){for(var k=0|M.type.charAt(M.type.length-1),A=new Array(k),T=0;T<k;++T)A[T]=w.length,_.push(M.name+"["+T+"]"),"number"==typeof M.location?w.push(M.location+T):Array.isArray(M.location)&&M.location.length===k&&"number"==typeof M.location[T]?w.push(0|M.location[T]):w.push(-1);x.push({name:M.name,type:M.type,locations:A})}else x.push({name:M.name,type:M.type,locations:[w.length]}),_.push(M.name),"number"==typeof M.location?w.push(0|M.location):w.push(-1)}var S=0;for(b=0;b<w.length;++b)if(w[b]<0){for(;w.indexOf(S)>=0;)S+=1;w[b]=S}var E=new Array(r.length);a(),d._relink=a,d.types={uniforms:l(r),attributes:l(n)},d.attributes=s(p,d,x,w),Object.defineProperty(d,"uniforms",o(p,d,r,E))},e.exports=a},{"./lib/GLError":213,"./lib/create-attributes":214,"./lib/create-uniforms":215,"./lib/reflect":216,"./lib/runtime-reflect":217,"./lib/shader-cache":218}],213:[function(t,e,r){function n(t,e,r){this.shortMessage=e||"",this.longMessage=r||"",this.rawError=t||"",this.message="gl-shader: "+(e||t||"")+(r?"\n"+r:""),this.stack=(new Error).stack}n.prototype=new Error,n.prototype.name="GLError",n.prototype.constructor=n,e.exports=n},{}],214:[function(t,e,r){"use strict";function n(t,e,r,n,i,a){this._gl=t,this._wrapper=e,this._index=r,this._locations=n,this._dimension=i,this._constFunc=a}function i(t,e,r,i,a,o,s){for(var l=["gl","v"],u=[],c=0;c<a;++c)l.push("x"+c),u.push("x"+c);l.push("if(x0.length===void 0){return gl.vertexAttrib"+a+"f(v,"+u.join()+")}else{return gl.vertexAttrib"+a+"fv(v,x0)}");var h=Function.apply(null,l),f=new n(t,e,r,i,a,h);Object.defineProperty(o,s,{set:function(e){return t.disableVertexAttribArray(i[r]),h(t,i[r],e),e},get:function(){return f},enumerable:!0})}function a(t,e,r,n,a,o,s){for(var l=new Array(a),u=new Array(a),c=0;c<a;++c)i(t,e,r[c],n,a,l,c),u[c]=l[c];Object.defineProperty(l,"location",{set:function(t){if(Array.isArray(t))for(var e=0;e<a;++e)u[e].location=t[e];else for(var e=0;e<a;++e)u[e].location=t+e;return t},get:function(){for(var t=new Array(a),e=0;e<a;++e)t[e]=n[r[e]];return t},enumerable:!0}),l.pointer=function(e,i,o,s){e=e||t.FLOAT,i=!!i,o=o||a*a,s=s||0;for(var l=0;l<a;++l){var u=n[r[l]];t.vertexAttribPointer(u,a,e,i,o,s+l*a),t.enableVertexAttribArray(u)}};var h=new Array(a),f=t["vertexAttrib"+a+"fv"];Object.defineProperty(o,s,{set:function(e){for(var i=0;i<a;++i){var o=n[r[i]];if(t.disableVertexAttribArray(o),Array.isArray(e[0]))f.call(t,o,e[i]);else{for(var s=0;s<a;++s)h[s]=e[a*i+s];f.call(t,o,h)}}return e},get:function(){return l},enumerable:!0})}function o(t,e,r,n){for(var o={},l=0,u=r.length;l<u;++l){var c=r[l],h=c.name,f=c.type,d=c.locations;switch(f){case"bool":case"int":case"float":i(t,e,d[0],n,1,o,h);break;default:if(f.indexOf("vec")>=0){var p=f.charCodeAt(f.length-1)-48;if(p<2||p>4)throw new s("","Invalid data type for attribute "+h+": "+f);i(t,e,d[0],n,p,o,h)}else{if(!(f.indexOf("mat")>=0))throw new s("","Unknown data type for attribute "+h+": "+f);var p=f.charCodeAt(f.length-1)-48;if(p<2||p>4)throw new s("","Invalid data type for attribute "+h+": "+f);a(t,e,d,n,p,o,h)}}}return o}e.exports=o;var s=t("./GLError"),l=n.prototype;l.pointer=function(t,e,r,n){var i=this,a=i._gl,o=i._locations[i._index];a.vertexAttribPointer(o,i._dimension,t||a.FLOAT,!!e,r||0,n||0),a.enableVertexAttribArray(o)},l.set=function(t,e,r,n){return this._constFunc(this._locations[this._index],t,e,r,n)},Object.defineProperty(l,"location",{get:function(){return this._locations[this._index]},set:function(t){return t!==this._locations[this._index]&&(this._locations[this._index]=0|t,this._wrapper.program=null),0|t}})},{"./GLError":213}],215:[function(t,e,r){"use strict";function n(t){return new Function("y","return function(){return y}")(t)}function i(t,e){for(var r=new Array(t),n=0;n<t;++n)r[n]=e;return r}function a(t,e,r,a){function l(r){return new Function("gl","wrapper","locations","return function(){return gl.getUniform(wrapper.program,locations["+r+"])}")(t,e,a)}function u(t,e,r){switch(r){case"bool":case"int":case"sampler2D":case"samplerCube":return"gl.uniform1i(locations["+e+"],obj"+t+")";case"float":return"gl.uniform1f(locations["+e+"],obj"+t+")";default:var n=r.indexOf("vec");if(!(0<=n&&n<=1&&r.length===4+n)){if(0===r.indexOf("mat")&&4===r.length){var i=r.charCodeAt(r.length-1)-48;if(i<2||i>4)throw new s("","Invalid uniform dimension type for matrix "+name+": "+r);return"gl.uniformMatrix"+i+"fv(locations["+e+"],false,obj"+t+")"}throw new s("","Unknown uniform data type for "+name+": "+r)}var i=r.charCodeAt(r.length-1)-48;if(i<2||i>4)throw new s("","Invalid data type");switch(r.charAt(0)){case"b":case"i":return"gl.uniform"+i+"iv(locations["+e+"],obj"+t+")";case"v":return"gl.uniform"+i+"fv(locations["+e+"],obj"+t+")";default:throw new s("","Unrecognized data type for vector "+name+": "+r)}}}function c(t,e){if("object"!=typeof e)return[[t,e]];var r=[];for(var n in e){var i=e[n],a=t;parseInt(n)+""===n?a+="["+n+"]":a+="."+n,"object"==typeof i?r.push.apply(r,c(a,i)):r.push([a,i])}return r}function h(e){for(var n=["return function updateProperty(obj){"],i=c("",e),o=0;o<i.length;++o){var s=i[o],l=s[0],h=s[1];a[h]&&n.push(u(l,h,r[h].type))}return n.push("return obj}"),new Function("gl","locations",n.join("\n"))(t,a)}function f(t){switch(t){case"bool":return!1;case"int":case"sampler2D":case"samplerCube":case"float":return 0;default:var e=t.indexOf("vec");if(0<=e&&e<=1&&t.length===4+e){var r=t.charCodeAt(t.length-1)-48;if(r<2||r>4)throw new s("","Invalid data type");return"b"===t.charAt(0)?i(r,!1):i(r,0)}if(0===t.indexOf("mat")&&4===t.length){var r=t.charCodeAt(t.length-1)-48;if(r<2||r>4)throw new s("","Invalid uniform dimension type for matrix "+name+": "+t);return i(r*r,0)}throw new s("","Unknown uniform data type for "+name+": "+t)}}function d(t,e,i){if("object"==typeof i){var o=p(i);Object.defineProperty(t,e,{get:n(o),set:h(i),enumerable:!0,configurable:!1})}else a[i]?Object.defineProperty(t,e,{get:l(i),set:h(i),enumerable:!0,configurable:!1}):t[e]=f(r[i].type)}function p(t){var e;if(Array.isArray(t)){e=new Array(t.length);for(var r=0;r<t.length;++r)d(e,r,t[r])}else{e={};for(var n in t)d(e,n,t[n])}return e}var m=o(r,!0);return{get:n(p(m)),set:h(m),enumerable:!0,configurable:!0}}var o=t("./reflect"),s=t("./GLError");e.exports=a},{"./GLError":213,"./reflect":216}],216:[function(t,e,r){"use strict";function n(t,e){for(var r={},n=0;n<t.length;++n)for(var i=t[n].name,a=i.split("."),o=r,s=0;s<a.length;++s){var l=a[s].split("[");if(l.length>1){l[0]in o||(o[l[0]]=[]),o=o[l[0]];for(var u=1;u<l.length;++u){var c=parseInt(l[u]);u<l.length-1||s<a.length-1?(c in o||(u<l.length-1?o[c]=[]:o[c]={}),o=o[c]):o[c]=e?n:t[n].type}}else s<a.length-1?(l[0]in o||(o[l[0]]={}),o=o[l[0]]):o[l[0]]=e?n:t[n].type}return r}e.exports=n},{}],217:[function(t,e,r){"use strict";function n(t,e){if(!s){var r=Object.keys(o);s={};for(var n=0;n<r.length;++n){var i=r[n];s[t[i]]=o[i]}}return s[e]}function i(t,e){for(var r=t.getProgramParameter(e,t.ACTIVE_UNIFORMS),i=[],a=0;a<r;++a){var o=t.getActiveUniform(e,a);if(o){var s=n(t,o.type);if(o.size>1)for(var l=0;l<o.size;++l)i.push({name:o.name.replace("[0]","["+l+"]"),type:s});else i.push({name:o.name,type:s})}}return i}function a(t,e){for(var r=t.getProgramParameter(e,t.ACTIVE_ATTRIBUTES),i=[],a=0;a<r;++a){var o=t.getActiveAttrib(e,a);o&&i.push({name:o.name,type:n(t,o.type)})}return i}r.uniforms=i,r.attributes=a;var o={FLOAT:"float",FLOAT_VEC2:"vec2",FLOAT_VEC3:"vec3",FLOAT_VEC4:"vec4",INT:"int",INT_VEC2:"ivec2",INT_VEC3:"ivec3",INT_VEC4:"ivec4",BOOL:"bool",BOOL_VEC2:"bvec2",BOOL_VEC3:"bvec3",BOOL_VEC4:"bvec4",FLOAT_MAT2:"mat2",FLOAT_MAT3:"mat3",FLOAT_MAT4:"mat4",SAMPLER_2D:"sampler2D",SAMPLER_CUBE:"samplerCube"},s=null},{}],218:[function(t,e,r){"use strict";function n(t,e,r,n,i,a,o){this.id=t,this.src=e,this.type=r,this.shader=n,this.count=a,this.programs=[],this.cache=o}function i(t){this.gl=t,this.shaders=[{},{}],this.programs={}}function a(t,e,r){var n=t.createShader(e);if(t.shaderSource(n,r),t.compileShader(n),!t.getShaderParameter(n,t.COMPILE_STATUS)){var i=t.getShaderInfoLog(n);try{var a=h(i,r,e)}catch(t){throw console.warn("Failed to format compiler error: "+t),new c(i,"Error compiling shader:\n"+i)}throw new c(i,a.short,a.long)}return n}function o(t,e,r,n,i){var a=t.createProgram();t.attachShader(a,e),t.attachShader(a,r);for(var o=0;o<n.length;++o)t.bindAttribLocation(a,i[o],n[o]);if(t.linkProgram(a),!t.getProgramParameter(a,t.LINK_STATUS)){var s=t.getProgramInfoLog(a);throw new c(s,"Error linking program: "+s)}return a}function s(t){var e=d.get(t);return e||(e=new i(t),d.set(t,e)),e}function l(t,e,r){return s(t).getShaderReference(e,r)}function u(t,e,r,n,i){return s(t).getProgram(e,r,n,i)}r.shader=l,r.program=u;var c=t("./GLError"),h=t("gl-format-compiler-error"),f="undefined"==typeof WeakMap?t("weakmap-shim"):WeakMap,d=new f,p=0;n.prototype.dispose=function(){if(0==--this.count){for(var t=this.cache,e=t.gl,r=this.programs,n=0,i=r.length;n<i;++n){var a=t.programs[r[n]];a&&(delete t.programs[n],e.deleteProgram(a))}e.deleteShader(this.shader),delete t.shaders[this.type===e.FRAGMENT_SHADER|0][this.src]}};var m=i.prototype;m.getShaderReference=function(t,e){var r=this.gl,i=this.shaders[t===r.FRAGMENT_SHADER|0],o=i[e];if(o&&r.isShader(o.shader))o.count+=1;else{var s=a(r,t,e);o=i[e]=new n(p++,e,t,s,[],1,this)}return o},m.getProgram=function(t,e,r,n){var i=[t.id,e.id,r.join(":"),n.join(":")].join("@"),a=this.programs[i];return a&&this.gl.isProgram(a)||(this.programs[i]=a=o(this.gl,t.shader,e.shader,r,n),t.programs.push(i),e.programs.push(i)),a}},{"./GLError":213,"gl-format-compiler-error":165,"weakmap-shim":562}],219:[function(t,e,r){"use strict";function n(t,e){this.gl=t,this.pickBuffer=e,this.screenBox=[0,0,t.drawingBufferWidth,t.drawingBufferHeight],this.viewBox=[0,0,0,0],this.dataBox=[-10,-10,10,10],this.gridLineEnable=[!0,!0],this.gridLineWidth=[1,1],this.gridLineColor=[[0,0,0,1],[0,0,0,1]],this.pixelRatio=1,this.tickMarkLength=[0,0,0,0],this.tickMarkWidth=[0,0,0,0],this.tickMarkColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.tickPad=[15,15,15,15],this.tickAngle=[0,0,0,0],this.tickEnable=[!0,!0,!0,!0],this.tickColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.labelPad=[15,15,15,15],this.labelAngle=[0,Math.PI/2,0,3*Math.PI/2],this.labelEnable=[!0,!0,!0,!0],this.labelColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.titleCenter=[0,0],this.titleEnable=!0,this.titleAngle=0,this.titleColor=[0,0,0,1],this.borderColor=[0,0,0,0],this.backgroundColor=[0,0,0,0],this.zeroLineEnable=[!0,!0],this.zeroLineWidth=[4,4],this.zeroLineColor=[[0,0,0,1],[0,0,0,1]],this.borderLineEnable=[!0,!0,!0,!0],this.borderLineWidth=[2,2,2,2],this.borderLineColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.grid=null,this.text=null,this.line=null,this.box=null,this.objects=[],this.overlays=[],this._tickBounds=[1/0,1/0,-1/0,-1/0],this.static=!1,this.dirty=!1,this.pickDirty=!1,this.pickDelay=120,this.pickRadius=10,this._pickTimeout=null,this._drawPick=this.drawPick.bind(this),this._depthCounter=0}function i(t){for(var e=t.slice(),r=0;r<e.length;++r)e[r]=e[r].slice();return e}function a(t,e){return t.x-e.x}function o(t){var e=t.gl,r=s(e,[e.drawingBufferWidth,e.drawingBufferHeight]),i=new n(e,r);return i.grid=l(i),i.text=u(i),i.line=c(i),i.box=h(i),i.update(t),i}e.exports=o;var s=t("gl-select-static"),l=t("./lib/grid"),u=t("./lib/text"),c=t("./lib/line"),h=t("./lib/box"),f=n.prototype;f.setDirty=function(){this.dirty=this.pickDirty=!0},f.setOverlayDirty=function(){this.dirty=!0},f.nextDepthValue=function(){return this._depthCounter++/65536},f.draw=function(){return function(){var t=this.gl,e=this.screenBox,r=this.viewBox,n=this.dataBox,i=this.pixelRatio,a=this.grid,o=this.line,s=this.text,l=this.objects;if(this._depthCounter=0,this.pickDirty&&(this._pickTimeout&&clearTimeout(this._pickTimeout),this.pickDirty=!1,this._pickTimeout=setTimeout(this._drawPick,this.pickDelay)),this.dirty){this.dirty=!1,t.bindFramebuffer(t.FRAMEBUFFER,null),t.enable(t.SCISSOR_TEST),t.disable(t.DEPTH_TEST),t.depthFunc(t.LESS),t.depthMask(!1),t.enable(t.BLEND),t.blendEquation(t.FUNC_ADD,t.FUNC_ADD),t.blendFunc(t.ONE,t.ONE_MINUS_SRC_ALPHA),t.scissor(e[0],e[1],e[2]-e[0],e[3]-e[1]);var u=this.borderColor;t.clearColor(u[0]*u[3],u[1]*u[3],u[2]*u[3],u[3]),t.clear(t.COLOR_BUFFER_BIT|t.DEPTH_BUFFER_BIT),t.scissor(r[0],r[1],r[2]-r[0],r[3]-r[1]),t.viewport(r[0],r[1],r[2]-r[0],r[3]-r[1]);var c=this.backgroundColor;t.clearColor(c[0]*c[3],c[1]*c[3],c[2]*c[3],c[3]),t.clear(t.COLOR_BUFFER_BIT),a.draw();var h=this.zeroLineEnable,f=this.zeroLineColor,d=this.zeroLineWidth;if(h[0]||h[1]){o.bind();for(var p=0;p<2;++p)if(h[p]&&n[p]<=0&&n[p+2]>=0){var m=e[p]-n[p]*(e[p+2]-e[p])/(n[p+2]-n[p]);0===p?o.drawLine(m,e[1],m,e[3],d[p],f[p]):o.drawLine(e[0],m,e[2],m,d[p],f[p])}}for(var p=0;p<l.length;++p)l[p].draw();t.viewport(e[0],e[1],e[2]-e[0],e[3]-e[1]),t.scissor(e[0],e[1],e[2]-e[0],e[3]-e[1]),this.grid.drawTickMarks(),o.bind();var g=this.borderLineEnable,v=this.borderLineWidth,y=this.borderLineColor;g[1]&&o.drawLine(r[0],r[1]-.5*v[1]*i,r[0],r[3]+.5*v[3]*i,v[1],y[1]),g[0]&&o.drawLine(r[0]-.5*v[0]*i,r[1],r[2]+.5*v[2]*i,r[1],v[0],y[0]),g[3]&&o.drawLine(r[2],r[1]-.5*v[1]*i,r[2],r[3]+.5*v[3]*i,v[3],y[3]),g[2]&&o.drawLine(r[0]-.5*v[0]*i,r[3],r[2]+.5*v[2]*i,r[3],v[2],y[2]),s.bind();for(var p=0;p<2;++p)s.drawTicks(p);this.titleEnable&&s.drawTitle();for(var b=this.overlays,p=0;p<b.length;++p)b[p].draw();t.disable(t.SCISSOR_TEST),t.disable(t.BLEND),t.depthMask(!0)}}}(),f.drawPick=function(){return function(){if(!this.static){var t=this.pickBuffer;this.gl;this._pickTimeout=null,t.begin();for(var e=1,r=this.objects,n=0;n<r.length;++n)e=r[n].drawPick(e);t.end()}}}(),f.pick=function(){return function(t,e){if(!this.static){var r=this.pixelRatio,n=this.pickPixelRatio,i=this.viewBox,a=0|Math.round((t-i[0]/r)*n),o=0|Math.round((e-i[1]/r)*n),s=this.pickBuffer.query(a,o,this.pickRadius);if(!s)return null;for(var l=s.id+(s.value[0]<<8)+(s.value[1]<<16)+(s.value[2]<<24),u=this.objects,c=0;c<u.length;++c){var h=u[c].pick(a,o,l);if(h)return h}return null}}}(),f.setScreenBox=function(t){var e=this.screenBox,r=this.pixelRatio;e[0]=0|Math.round(t[0]*r),e[1]=0|Math.round(t[1]*r),e[2]=0|Math.round(t[2]*r),e[3]=0|Math.round(t[3]*r),this.setDirty()},f.setDataBox=function(t){var e=this.dataBox;(e[0]!==t[0]||e[1]!==t[1]||e[2]!==t[2]||e[3]!==t[3])&&(e[0]=t[0],e[1]=t[1],e[2]=t[2],e[3]=t[3],this.setDirty())},f.setViewBox=function(t){var e=this.pixelRatio,r=this.viewBox;r[0]=0|Math.round(t[0]*e),r[1]=0|Math.round(t[1]*e),r[2]=0|Math.round(t[2]*e),r[3]=0|Math.round(t[3]*e);var n=this.pickPixelRatio;this.pickBuffer.shape=[0|Math.round((t[2]-t[0])*n),0|Math.round((t[3]-t[1])*n)],this.setDirty()},f.update=function(t){t=t||{};var e=this.gl;this.pixelRatio=t.pixelRatio||1;var r=this.pixelRatio;this.pickPixelRatio=Math.max(r,1),this.setScreenBox(t.screenBox||[0,0,e.drawingBufferWidth/r,e.drawingBufferHeight/r]);this.screenBox;this.setViewBox(t.viewBox||[.125*(this.screenBox[2]-this.screenBox[0])/r,.125*(this.screenBox[3]-this.screenBox[1])/r,.875*(this.screenBox[2]-this.screenBox[0])/r,.875*(this.screenBox[3]-this.screenBox[1])/r]);var n=this.viewBox,o=(n[2]-n[0])/(n[3]-n[1]);this.setDataBox(t.dataBox||[-10,-10/o,10,10/o]),this.borderColor=(t.borderColor||[0,0,0,0]).slice(),this.backgroundColor=(t.backgroundColor||[0,0,0,0]).slice(),this.gridLineEnable=(t.gridLineEnable||[!0,!0]).slice(),this.gridLineWidth=(t.gridLineWidth||[1,1]).slice(),this.gridLineColor=i(t.gridLineColor||[[.5,.5,.5,1],[.5,.5,.5,1]]),this.zeroLineEnable=(t.zeroLineEnable||[!0,!0]).slice(),this.zeroLineWidth=(t.zeroLineWidth||[4,4]).slice(),this.zeroLineColor=i(t.zeroLineColor||[[0,0,0,1],[0,0,0,1]]),this.tickMarkLength=(t.tickMarkLength||[0,0,0,0]).slice(),this.tickMarkWidth=(t.tickMarkWidth||[0,0,0,0]).slice(),this.tickMarkColor=i(t.tickMarkColor||[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]]),this.titleCenter=(t.titleCenter||[.5*(n[0]+n[2])/r,(n[3]+120)/r]).slice(),this.titleEnable=!("titleEnable"in t&&!t.titleEnable),this.titleAngle=t.titleAngle||0,this.titleColor=(t.titleColor||[0,0,0,1]).slice(),this.labelPad=(t.labelPad||[15,15,15,15]).slice(),this.labelAngle=(t.labelAngle||[0,Math.PI/2,0,3*Math.PI/2]).slice(),this.labelEnable=(t.labelEnable||[!0,!0,!0,!0]).slice(),this.labelColor=i(t.labelColor||[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]]),this.tickPad=(t.tickPad||[15,15,15,15]).slice(),this.tickAngle=(t.tickAngle||[0,0,0,0]).slice(),this.tickEnable=(t.tickEnable||[!0,!0,!0,!0]).slice(),this.tickColor=i(t.tickColor||[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]]),this.borderLineEnable=(t.borderLineEnable||[!0,!0,!0,!0]).slice(),this.borderLineWidth=(t.borderLineWidth||[2,2,2,2]).slice(),this.borderLineColor=i(t.borderLineColor||[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]]);var s=t.ticks||[[],[]],l=this._tickBounds;l[0]=l[1]=1/0,l[2]=l[3]=-1/0;for(var u=0;u<2;++u){var c=s[u].slice(0);0!==c.length&&(c.sort(a),l[u]=Math.min(l[u],c[0].x),l[u+2]=Math.max(l[u+2],c[c.length-1].x))}this.grid.update({bounds:l,ticks:s}),this.text.update({bounds:l,ticks:s,labels:t.labels||["x","y"],labelSize:t.labelSize||[12,12],labelFont:t.labelFont||["sans-serif","sans-serif"],title:t.title||"",titleSize:t.titleSize||18,titleFont:t.titleFont||"sans-serif"}),this.static=!!t.static,this.setDirty()},f.dispose=function(){this.box.dispose(),this.grid.dispose(),this.text.dispose(),this.line.dispose();for(var t=this.objects.length-1;t>=0;--t)this.objects[t].dispose();this.objects.length=0;for(var t=this.overlays.length-1;t>=0;--t)this.overlays[t].dispose();this.overlays.length=0,this.gl=null},f.addObject=function(t){this.objects.indexOf(t)<0&&(this.objects.push(t),this.setDirty())},f.removeObject=function(t){for(var e=this.objects,r=0;r<e.length;++r)if(e[r]===t){e.splice(r,1),this.setDirty();break}},f.addOverlay=function(t){this.overlays.indexOf(t)<0&&(this.overlays.push(t),this.setOverlayDirty())},f.removeOverlay=function(t){for(var e=this.overlays,r=0;r<e.length;++r)if(e[r]===t){e.splice(r,1),this.setOverlayDirty();break}}},{"./lib/box":206,"./lib/grid":207,"./lib/line":208,"./lib/text":210,"gl-select-static":254}],220:[function(t,e,r){var n=t("gl-shader");e.exports=function(t){return n(t,"precision mediump float;\n#define GLSLIFY 1\nattribute vec2 position;\nvarying vec2 uv;\nvoid main() {\n uv = position;\n gl_Position = vec4(position, 0, 1);\n}","precision mediump float;\n#define GLSLIFY 1\n\nuniform sampler2D accumBuffer;\nvarying vec2 uv;\n\nvoid main() {\n vec4 accum = texture2D(accumBuffer, 0.5 * (uv + 1.0));\n gl_FragColor = min(vec4(1,1,1,1), accum);\n}",null,[{name:"position",type:"vec2"}])}},{"gl-shader":255}],221:[function(t,e,r){"use strict";function n(){this.mouse=[-1,-1],this.screen=null,this.distance=1/0,this.index=null,this.dataCoordinate=null,this.dataPosition=null,this.object=null,this.data=null}function i(t,e){var r=null;try{r=t.getContext("webgl",e),r||(r=t.getContext("experimental-webgl",e))}catch(t){return null}return r}function a(t){var e=Math.round(Math.log(Math.abs(t))/Math.log(10));if(e<0){var r=Math.round(Math.pow(10,-e));return Math.ceil(t*r)/r}if(e>0){var r=Math.round(Math.pow(10,e));return Math.ceil(t/r)*r}return Math.ceil(t)}function o(t){return"boolean"!=typeof t||t}function s(t){function e(){if(!w&&G.autoResize){var t=M.parentNode,e=1,r=1;t&&t!==document.body?(e=t.clientWidth,r=t.clientHeight):(e=window.innerWidth,r=window.innerHeight);var n=0|Math.ceil(e*G.pixelRatio),i=0|Math.ceil(r*G.pixelRatio);if(n!==M.width||i!==M.height){M.width=n,M.height=i;var a=M.style;a.position=a.position||"absolute",a.left="0px",a.top="0px",a.width=e+"px",a.height=r+"px",N=!0}}}function r(){for(var t=O.length,e=j.length,r=0;r<e;++r)F[r]=0;t:for(var r=0;r<t;++r){var n=O[r],i=n.pickSlots;if(i){for(var a=0;a<e;++a)if(F[a]+i<255){R[r]=a,n.setPickBase(F[a]+1),F[a]+=i;continue t}var o=f(A,q);R[r]=e,j.push(o),F.push(i),n.setPickBase(1),e+=1}else R[r]=-1}for(;e>0&&0===F[e-1];)F.pop(),j.pop().dispose()}function s(){if(G.contextLost)return!0;A.isContextLost()&&(G.contextLost=!0,G.mouseListener.enabled=!1,G.selection.object=null,G.oncontextloss&&G.oncontextloss())}function b(){if(!s()){A.colorMask(!0,!0,!0,!0),A.depthMask(!0),A.disable(A.BLEND),A.enable(A.DEPTH_TEST);for(var t=O.length,e=j.length,r=0;r<e;++r){var n=j[r];n.shape=Y,n.begin();for(var i=0;i<t;++i)if(R[i]===r){var a=O[i];a.drawPick&&(a.pixelRatio=1,a.drawPick(H))}n.end()}}}function x(){if(!s()){e();var t=G.camera.tick();H.view=G.camera.matrix,N=N||t,B=B||t,z.pixelRatio=G.pixelRatio,P.pixelRatio=G.pixelRatio;var r=O.length,n=Z[0],i=Z[1];n[0]=n[1]=n[2]=1/0,i[0]=i[1]=i[2]=-1/0;for(var o=0;o<r;++o){var l=O[o];l.pixelRatio=G.pixelRatio,l.axes=G.axes,N=N||!!l.dirty,B=B||!!l.dirty;var u=l.bounds;if(u)for(var h=u[0],f=u[1],d=0;d<3;++d)n[d]=Math.min(n[d],h[d]),i[d]=Math.max(i[d],f[d])}var m=G.bounds;if(G.autoBounds)for(var d=0;d<3;++d){if(i[d]<n[d])n[d]=-1,i[d]=1;else{n[d]===i[d]&&(n[d]-=1,i[d]+=1);var v=.05*(i[d]-n[d]);n[d]=n[d]-v,i[d]=i[d]+v}m[0][d]=n[d],m[1][d]=i[d]}for(var y=!1,d=0;d<3;++d)y=y||J[0][d]!==m[0][d]||J[1][d]!==m[1][d],J[0][d]=m[0][d],J[1][d]=m[1][d];if(B=B||y,N=N||y){if(y){for(var x=[0,0,0],o=0;o<3;++o)x[o]=a((m[1][o]-m[0][o])/10);z.autoTicks?z.update({bounds:m,tickSpacing:x}):z.update({bounds:m})}var _=A.drawingBufferWidth,w=A.drawingBufferHeight;q[0]=_,q[1]=w,Y[0]=0|Math.max(_/G.pixelRatio,1),Y[1]=0|Math.max(w/G.pixelRatio,1),g(U,G.fovy,_/w,G.zNear,G.zFar);for(var o=0;o<16;++o)V[o]=0;V[15]=1;for(var M=0,o=0;o<3;++o)M=Math.max(M,m[1][o]-m[0][o]);for(var o=0;o<3;++o)G.autoScale?V[5*o]=G.aspect[o]/(m[1][o]-m[0][o]):V[5*o]=1/M,G.autoCenter&&(V[12+o]=.5*-V[5*o]*(m[0][o]+m[1][o]));for(var o=0;o<r;++o){var l=O[o];l.axesBounds=m,G.clipToBounds&&(l.clipBounds=m)}S.object&&(G.snapToData?P.position=S.dataCoordinate:P.position=S.dataPosition,P.bounds=m),B&&(B=!1,b()),G.axesPixels=c(G.axes,H,_,w),G.onrender&&G.onrender(),A.bindFramebuffer(A.FRAMEBUFFER,null),A.viewport(0,0,_,w);var k=G.clearColor;A.clearColor(k[0],k[1],k[2],k[3]),A.clear(A.COLOR_BUFFER_BIT|A.DEPTH_BUFFER_BIT),A.depthMask(!0),A.colorMask(!0,!0,!0,!0),A.enable(A.DEPTH_TEST),A.depthFunc(A.LEQUAL),A.disable(A.BLEND),A.disable(A.CULL_FACE);var T=!1;z.enable&&(T=T||z.isTransparent(),z.draw(H)),P.axes=z,S.object&&P.draw(H),A.disable(A.CULL_FACE);for(var o=0;o<r;++o){var l=O[o];l.axes=z,l.pixelRatio=G.pixelRatio,l.isOpaque&&l.isOpaque()&&l.draw(H),l.isTransparent&&l.isTransparent()&&(T=!0)}if(T){E.shape=q,E.bind(),A.clear(A.DEPTH_BUFFER_BIT),A.colorMask(!1,!1,!1,!1),A.depthMask(!0),A.depthFunc(A.LESS),z.enable&&z.isTransparent()&&z.drawTransparent(H);for(var o=0;o<r;++o){var l=O[o];l.isOpaque&&l.isOpaque()&&l.draw(H)}A.enable(A.BLEND),A.blendEquation(A.FUNC_ADD),A.blendFunc(A.ONE,A.ONE_MINUS_SRC_ALPHA),A.colorMask(!0,!0,!0,!0),A.depthMask(!1),A.clearColor(0,0,0,0),A.clear(A.COLOR_BUFFER_BIT),z.isTransparent()&&z.drawTransparent(H);for(var o=0;o<r;++o){var l=O[o];l.isTransparent&&l.isTransparent()&&l.drawTransparent(H)}A.bindFramebuffer(A.FRAMEBUFFER,null),A.blendFunc(A.ONE,A.ONE_MINUS_SRC_ALPHA),A.disable(A.DEPTH_TEST),L.bind(),E.color[0].bind(0),L.uniforms.accumBuffer=0,p(A),A.disable(A.BLEND)}N=!1;for(var o=0;o<r;++o)O[o].dirty=!1}}}function _(){w||G.contextLost||(requestAnimationFrame(_),x())}t=t||{};var w=!1,M=(t.pixelRatio||parseFloat(window.devicePixelRatio),t.canvas);if(!M)if(M=document.createElement("canvas"),t.container){var k=t.container;k.appendChild(M)}else document.body.appendChild(M);var A=t.gl;if(A||(A=i(M,t.glOptions||{premultipliedAlpha:!0,antialias:!0})),!A)throw new Error("webgl not supported");var T=t.bounds||[[-10,-10,-10],[10,10,10]],S=new n,E=d(A,[A.drawingBufferWidth,A.drawingBufferHeight],{preferFloat:!y}),L=v(A),C=t.camera||{eye:[2,0,0],center:[0,0,0],up:[0,1,0],zoomMin:.1,zoomMax:100,mode:"turntable"},I=t.axes||{},z=u(A,I);z.enable=!I.disable;var D=t.spikes||{},P=h(A,D),O=[],R=[],F=[],j=[],N=!0,B=!0,U=new Array(16),V=new Array(16),H={view:null,projection:U,model:V},B=!0,q=[A.drawingBufferWidth,A.drawingBufferHeight],G={gl:A,contextLost:!1,pixelRatio:t.pixelRatio||parseFloat(window.devicePixelRatio),canvas:M,selection:S,camera:l(M,C),axes:z,axesPixels:null,spikes:P,bounds:T,objects:O,shape:q,aspect:t.aspectRatio||[1,1,1],pickRadius:t.pickRadius||10,zNear:t.zNear||.01,zFar:t.zFar||1e3,fovy:t.fovy||Math.PI/4,clearColor:t.clearColor||[0,0,0,0],autoResize:o(t.autoResize),autoBounds:o(t.autoBounds),autoScale:!!t.autoScale,autoCenter:o(t.autoCenter),clipToBounds:o(t.clipToBounds),snapToData:!!t.snapToData,onselect:t.onselect||null,onrender:t.onrender||null,onclick:t.onclick||null,cameraParams:H,oncontextloss:null,mouseListener:null},Y=[A.drawingBufferWidth/G.pixelRatio|0,A.drawingBufferHeight/G.pixelRatio|0];G.autoResize&&e(),window.addEventListener("resize",e),G.update=function(t){w||(t=t||{},N=!0,B=!0)},G.add=function(t){w||(t.axes=z,O.push(t),R.push(-1),N=!0,B=!0,r())},G.remove=function(t){if(!w){var e=O.indexOf(t);e<0||(O.splice(e,1),R.pop(),N=!0,B=!0,r())}},G.dispose=function(){if(!w&&(w=!0,window.removeEventListener("resize",e),M.removeEventListener("webglcontextlost",s),G.mouseListener.enabled=!1,!G.contextLost)){z.dispose(),P.dispose();for(var t=0;t<O.length;++t)O[t].dispose();E.dispose();for(var t=0;t<j.length;++t)j[t].dispose();L.dispose(),A=null,z=null,P=null,O=[]}};var W=!1,X=0;G.mouseListener=m(M,function(t,e,r){if(!w){var n=j.length,i=O.length,a=S.object;S.distance=1/0,S.mouse[0]=e,S.mouse[1]=r,S.object=null,S.screen=null,S.dataCoordinate=S.dataPosition=null;var o=!1;if(t&&X)W=!0;else{W&&(B=!0),W=!1;for(var s=0;s<n;++s){var l=j[s].query(e,Y[1]-r-1,G.pickRadius);if(l){if(l.distance>S.distance)continue;for(var u=0;u<i;++u){var c=O[u];if(R[u]===s){var h=c.pick(l);h&&(S.buttons=t,S.screen=l.coord,S.distance=l.distance,S.object=c,S.index=h.distance,S.dataPosition=h.position,S.dataCoordinate=h.dataCoordinate,S.data=h,o=!0)}}}}}a&&a!==S.object&&(a.highlight&&a.highlight(null),N=!0),S.object&&(S.object.highlight&&S.object.highlight(S.data),N=!0),o=o||S.object!==a,o&&G.onselect&&G.onselect(S),1&t&&!(1&X)&&G.onclick&&G.onclick(S),X=t}}),M.addEventListener("webglcontextlost",s);var Z=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],J=[Z[0].slice(),Z[1].slice()];return _(),G.redraw=function(){w||(N=!0,x())},G}e.exports=s;var l=t("3d-view-controls"),u=t("gl-axes3d"),c=t("gl-axes3d/properties"),h=t("gl-spikes3d"),f=t("gl-select-static"),d=t("gl-fbo"),p=t("a-big-triangle"),m=t("mouse-change"),g=t("gl-mat4/perspective"),v=t("./lib/shader"),y=t("is-mobile")()},{"./lib/shader":220,"3d-view-controls":36,"a-big-triangle":39,"gl-axes3d":148,"gl-axes3d/properties":155,"gl-fbo":164,"gl-mat4/perspective":184,"gl-select-static":254,"gl-spikes3d":264,"is-mobile":296,"mouse-change":452}],222:[function(t,e,r){r.pointVertex="precision mediump float;\n#define GLSLIFY 1\n\nattribute vec2 position;\n\nuniform mat3 matrix;\nuniform float pointSize;\nuniform float pointCloud;\n\nhighp float rand(vec2 co) {\n highp float a = 12.9898;\n highp float b = 78.233;\n highp float c = 43758.5453;\n highp float d = dot(co.xy, vec2(a, b));\n highp float e = mod(d, 3.14);\n return fract(sin(e) * c);\n}\n\nvoid main() {\n vec3 hgPosition = matrix * vec3(position, 1);\n gl_Position = vec4(hgPosition.xy, 0, hgPosition.z);\n // if we don't jitter the point size a bit, overall point cloud\n // saturation 'jumps' on zooming, which is disturbing and confusing\n gl_PointSize = pointSize * ((19.5 + rand(position)) / 20.0);\n if(pointCloud != 0.0) { // pointCloud is truthy\n // get the same square surface as circle would be\n gl_PointSize *= 0.886;\n }\n}",r.pointFragment="precision mediump float;\n#define GLSLIFY 1\n\nuniform vec4 color, borderColor;\nuniform float centerFraction;\nuniform float pointCloud;\n\nvoid main() {\n float radius;\n vec4 baseColor;\n if(pointCloud != 0.0) { // pointCloud is truthy\n if(centerFraction == 1.0) {\n gl_FragColor = color;\n } else {\n gl_FragColor = mix(borderColor, color, centerFraction);\n }\n } else {\n radius = length(2.0 * gl_PointCoord.xy - 1.0);\n if(radius > 1.0) {\n discard;\n }\n baseColor = mix(borderColor, color, step(radius, centerFraction));\n gl_FragColor = vec4(baseColor.rgb * baseColor.a, baseColor.a);\n }\n}\n",r.pickVertex="precision mediump float;\n#define GLSLIFY 1\n\nattribute vec2 position;\nattribute vec4 pickId;\n\nuniform mat3 matrix;\nuniform float pointSize;\nuniform vec4 pickOffset;\n\nvarying vec4 fragId;\n\nvoid main() {\n vec3 hgPosition = matrix * vec3(position, 1);\n gl_Position = vec4(hgPosition.xy, 0, hgPosition.z);\n gl_PointSize = pointSize;\n\n vec4 id = pickId + pickOffset;\n id.y += floor(id.x / 256.0);\n id.x -= floor(id.x / 256.0) * 256.0;\n\n id.z += floor(id.y / 256.0);\n id.y -= floor(id.y / 256.0) * 256.0;\n\n id.w += floor(id.z / 256.0);\n id.z -= floor(id.z / 256.0) * 256.0;\n\n fragId = id;\n}\n",r.pickFragment="precision mediump float;\n#define GLSLIFY 1\n\nvarying vec4 fragId;\n\nvoid main() {\n float radius = length(2.0 * gl_PointCoord.xy - 1.0);\n if(radius > 1.0) {\n discard;\n }\n gl_FragColor = fragId / 255.0;\n}\n"},{}],223:[function(t,e,r){arguments[4][212][0].apply(r,arguments)},{"./lib/GLError":224,"./lib/create-attributes":225,"./lib/create-uniforms":226,"./lib/reflect":227,"./lib/runtime-reflect":228,"./lib/shader-cache":229,dup:212}],224:[function(t,e,r){arguments[4][213][0].apply(r,arguments)},{dup:213}],225:[function(t,e,r){arguments[4][214][0].apply(r,arguments)},{
"./GLError":224,dup:214}],226:[function(t,e,r){arguments[4][215][0].apply(r,arguments)},{"./GLError":224,"./reflect":227,dup:215}],227:[function(t,e,r){arguments[4][216][0].apply(r,arguments)},{dup:216}],228:[function(t,e,r){arguments[4][217][0].apply(r,arguments)},{dup:217}],229:[function(t,e,r){arguments[4][218][0].apply(r,arguments)},{"./GLError":224,dup:218,"gl-format-compiler-error":165,"weakmap-shim":562}],230:[function(t,e,r){"use strict";function n(t,e,r,n,i){this.plot=t,this.offsetBuffer=e,this.pickBuffer=r,this.shader=n,this.pickShader=i,this.sizeMin=.5,this.sizeMinCap=2,this.sizeMax=20,this.areaRatio=1,this.pointCount=0,this.color=[1,0,0,1],this.borderColor=[0,0,0,1],this.blend=!1,this.pickOffset=0,this.points=null}function i(t,e){var r,n=0,i=t.length>>>1;for(r=0;r<i;r++){var a=t[2*r],o=t[2*r+1];a>=e[0]&&a<=e[2]&&o>=e[1]&&o<=e[3]&&n++}return n}function a(t,e){var r=t.gl,i=s(r),a=s(r),l=o(r,u.pointVertex,u.pointFragment),c=o(r,u.pickVertex,u.pickFragment),h=new n(t,i,a,l,c);return h.update(e),t.addObject(h),h}var o=t("gl-shader"),s=t("gl-buffer"),l=t("typedarray-pool"),u=t("./lib/shader");e.exports=a;var c=n.prototype;c.dispose=function(){this.shader.dispose(),this.pickShader.dispose(),this.offsetBuffer.dispose(),this.pickBuffer.dispose(),this.plot.removeObject(this)},c.update=function(t){function e(e,r){return e in t?t[e]:r}var r;t=t||{},this.sizeMin=e("sizeMin",.5),this.sizeMax=e("sizeMax",20),this.color=e("color",[1,0,0,1]).slice(),this.areaRatio=e("areaRatio",1),this.borderColor=e("borderColor",[0,0,0,1]).slice(),this.blend=e("blend",!1);var n=t.positions.length>>>1,i=t.positions instanceof Float32Array,a=t.idToIndex instanceof Int32Array&&t.idToIndex.length>=n,o=t.positions,s=i?o:l.mallocFloat32(o.length),u=a?t.idToIndex:l.mallocInt32(n);if(i||s.set(o),!a)for(s.set(o),r=0;r<n;r++)u[r]=r;this.points=o,this.offsetBuffer.update(s),this.pickBuffer.update(u),i||l.free(s),a||l.free(u),this.pointCount=n,this.pickOffset=0},c.unifiedDraw=function(){var t=[1,0,0,0,1,0,0,0,1],e=[0,0,0,0];return function(r){var n=void 0!==r,a=n?this.pickShader:this.shader,o=this.plot.gl,s=this.plot.dataBox;if(0===this.pointCount)return r;var l=s[2]-s[0],u=s[3]-s[1],c=i(this.points,s),h=this.plot.pickPixelRatio*Math.max(Math.min(this.sizeMinCap,this.sizeMin),Math.min(this.sizeMax,this.sizeMax/Math.pow(c,.33333)));t[0]=2/l,t[4]=2/u,t[6]=-2*s[0]/l-1,t[7]=-2*s[1]/u-1,this.offsetBuffer.bind(),a.bind(),a.attributes.position.pointer(),a.uniforms.matrix=t,a.uniforms.color=this.color,a.uniforms.borderColor=this.borderColor,a.uniforms.pointCloud=h<5,a.uniforms.pointSize=h,a.uniforms.centerFraction=Math.min(1,Math.max(0,Math.sqrt(1-this.areaRatio))),n&&(e[0]=255&r,e[1]=r>>8&255,e[2]=r>>16&255,e[3]=r>>24&255,this.pickBuffer.bind(),a.attributes.pickId.pointer(o.UNSIGNED_BYTE),a.uniforms.pickOffset=e,this.pickOffset=r);var f=o.getParameter(o.BLEND),d=o.getParameter(o.DITHER);return f&&!this.blend&&o.disable(o.BLEND),d&&o.disable(o.DITHER),o.drawArrays(o.POINTS,0,this.pointCount),f&&!this.blend&&o.enable(o.BLEND),d&&o.enable(o.DITHER),r+this.pointCount}}(),c.draw=c.unifiedDraw,c.drawPick=c.unifiedDraw,c.pick=function(t,e,r){var n=this.pickOffset,i=this.pointCount;if(r<n||r>=n+i)return null;var a=r-n,o=this.points;return{object:this,pointId:a,dataCoord:[o[2*a],o[2*a+1]]}}},{"./lib/shader":222,"gl-buffer":156,"gl-shader":223,"typedarray-pool":541}],231:[function(t,e,r){function n(t,e,r,n){var i,a,o,s,l,u=e[0],c=e[1],h=e[2],f=e[3],d=r[0],p=r[1],m=r[2],g=r[3];return a=u*d+c*p+h*m+f*g,a<0&&(a=-a,d=-d,p=-p,m=-m,g=-g),1-a>1e-6?(i=Math.acos(a),o=Math.sin(i),s=Math.sin((1-n)*i)/o,l=Math.sin(n*i)/o):(s=1-n,l=n),t[0]=s*u+l*d,t[1]=s*c+l*p,t[2]=s*h+l*m,t[3]=s*f+l*g,t}e.exports=n},{}],232:[function(t,e,r){"use strict";e.exports={vertex:"precision highp float;\n#define GLSLIFY 1\n\n\nvec4 computePosition_1_0(vec2 posHi, vec2 posLo, vec2 scHi, vec2 scLo, vec2 trHi, vec2 trLo) {\n return vec4((posHi + trHi) * scHi\n \t\t\t//FIXME: this thingy does not give noticeable precision gain, need test\n + (posLo + trLo) * scHi\n + (posHi + trHi) * scLo\n + (posLo + trLo) * scLo\n , 0, 1);\n}\n\n\nattribute vec2 positionHi, positionLo;\nattribute float size, border;\nattribute vec2 char, color;\n\n//this is 64-bit form of scale and translate\nuniform vec2 scaleHi, scaleLo, translateHi, translateLo;\nuniform float pixelRatio;\nuniform vec4 viewBox;\nuniform sampler2D palette;\n\nvarying vec4 charColor, borderColor;\nvarying vec2 charId;\nvarying vec2 pointCoord;\nvarying float pointSize;\nvarying float borderWidth;\n\n\nvoid main() {\n charColor = texture2D(palette, vec2(color.x / 255., 0));\n borderColor = texture2D(palette, vec2(color.y / 255., 0));\n\n gl_PointSize = size * pixelRatio;\n pointSize = size * pixelRatio;\n\n charId = char;\n borderWidth = border;\n\n gl_Position = computePosition_1_0(\n positionHi, positionLo,\n scaleHi, scaleLo,\n translateHi, translateLo);\n\n pointCoord = viewBox.xy + (viewBox.zw - viewBox.xy) * (gl_Position.xy * .5 + .5);\n}\n",fragment:"precision highp float;\n#define GLSLIFY 1\n\nuniform sampler2D chars;\nuniform vec2 charsShape;\nuniform float charsStep, pixelRatio, charOffset;\n\nvarying vec4 borderColor;\nvarying vec4 charColor;\nvarying vec2 charId;\nvarying vec2 pointCoord;\nvarying float pointSize;\nvarying float borderWidth;\n\nvoid main() {\n\tvec2 pointUV = (pointCoord - gl_FragCoord.xy + pointSize * .5) / pointSize;\n\tpointUV.x = 1. - pointUV.x;\n\tvec2 texCoord = ((charId + pointUV) * charsStep) / charsShape;\n\tfloat dist = texture2D(chars, texCoord).r;\n\n\t//max-distance alpha\n\tif (dist < 1e-2)\n\t\tdiscard;\n\n\tfloat gamma = .0045 * charsStep / pointSize;\n\n //null-border case\n \tif (borderWidth * borderColor.a == 0.) {\n\t\tfloat charAmt = smoothstep(.748 - gamma, .748 + gamma, dist);\n\t\tgl_FragColor = vec4(charColor.rgb, charAmt*charColor.a);\n\t\treturn;\n\t}\n\n\tfloat dif = 5. * pixelRatio * borderWidth / pointSize;\n\tfloat borderLevel = .748 - dif * .5;\n\tfloat charLevel = .748 + dif * .5;\n\n\tfloat borderAmt = smoothstep(borderLevel - gamma, borderLevel + gamma, dist);\n\tfloat charAmt = smoothstep(charLevel - gamma, charLevel + gamma, dist);\n\n\tvec4 color = borderColor;\n\tcolor.a *= borderAmt;\n\n\tgl_FragColor = mix(color, charColor, charAmt);\n}\n",pickVertex:"precision highp float;\n#define GLSLIFY 1\n\nattribute vec2 positionHi, positionLo;\nattribute vec4 id;\nattribute float size;\n\nuniform vec2 scaleHi, scaleLo, translateHi, translateLo;\nuniform vec4 pickOffset;\nuniform float pixelRatio;\n\nvarying vec4 fragColor;\n\n\nvec4 computePosition_1_0(vec2 posHi, vec2 posLo, vec2 scHi, vec2 scLo, vec2 trHi, vec2 trLo) {\n return vec4((posHi + trHi) * scHi\n \t\t\t//FIXME: this thingy does not give noticeable precision gain, need test\n + (posLo + trLo) * scHi\n + (posHi + trHi) * scLo\n + (posLo + trLo) * scLo\n , 0, 1);\n}\n\n\nvoid main() {\n vec4 fragId = id + pickOffset;\n\n fragId.y += floor(fragId.x / 256.0);\n fragId.x -= floor(fragId.x / 256.0) * 256.0;\n\n fragId.z += floor(fragId.y / 256.0);\n fragId.y -= floor(fragId.y / 256.0) * 256.0;\n\n fragId.w += floor(fragId.z / 256.0);\n fragId.z -= floor(fragId.z / 256.0) * 256.0;\n\n fragColor = fragId / 255.0;\n\n gl_PointSize = size * .25 * pixelRatio;\n\n gl_Position = computePosition_1_0(\n positionHi, positionLo,\n scaleHi, scaleLo,\n translateHi, translateLo);\n}\n",pickFragment:"precision lowp float;\n#define GLSLIFY 1\nvarying vec4 fragColor;\nvoid main() {\n gl_FragColor = fragColor;\n}\n"}},{}],233:[function(t,e,r){arguments[4][84][0].apply(r,arguments)},{dup:84}],234:[function(t,e,r){arguments[4][212][0].apply(r,arguments)},{"./lib/GLError":235,"./lib/create-attributes":236,"./lib/create-uniforms":237,"./lib/reflect":238,"./lib/runtime-reflect":239,"./lib/shader-cache":240,dup:212}],235:[function(t,e,r){arguments[4][213][0].apply(r,arguments)},{dup:213}],236:[function(t,e,r){arguments[4][214][0].apply(r,arguments)},{"./GLError":235,dup:214}],237:[function(t,e,r){arguments[4][215][0].apply(r,arguments)},{"./GLError":235,"./reflect":238,dup:215}],238:[function(t,e,r){arguments[4][216][0].apply(r,arguments)},{dup:216}],239:[function(t,e,r){arguments[4][217][0].apply(r,arguments)},{dup:217}],240:[function(t,e,r){arguments[4][218][0].apply(r,arguments)},{"./GLError":235,dup:218,"gl-format-compiler-error":165,"weakmap-shim":562}],241:[function(t,e,r){"use strict";function n(t,e,r,n,a){a<=4*f?i(0,a-1,t,e,r,n):h(0,a-1,t,e,r,n)}function i(t,e,r,n,i,a){for(var o=t+1;o<=e;++o){for(var s=r[o],l=n[2*o],u=n[2*o+1],c=i[o],h=a[o],f=o;f>t;){var d=r[f-1],p=n[2*(f-1)];if((d-s||l-p)>=0)break;r[f]=d,n[2*f]=p,n[2*f+1]=n[2*f-1],i[f]=i[f-1],a[f]=a[f-1],f-=1}r[f]=s,n[2*f]=l,n[2*f+1]=u,i[f]=c,a[f]=h}}function a(t,e,r,n,i,a){var o=r[t],s=n[2*t],l=n[2*t+1],u=i[t],c=a[t];r[t]=r[e],n[2*t]=n[2*e],n[2*t+1]=n[2*e+1],i[t]=i[e],a[t]=a[e],r[e]=o,n[2*e]=s,n[2*e+1]=l,i[e]=u,a[e]=c}function o(t,e,r,n,i,a){r[t]=r[e],n[2*t]=n[2*e],n[2*t+1]=n[2*e+1],i[t]=i[e],a[t]=a[e]}function s(t,e,r,n,i,a,o){var s=n[t],l=i[2*t],u=i[2*t+1],c=a[t],h=o[t];n[t]=n[e],i[2*t]=i[2*e],i[2*t+1]=i[2*e+1],a[t]=a[e],o[t]=o[e],n[e]=n[r],i[2*e]=i[2*r],i[2*e+1]=i[2*r+1],a[e]=a[r],o[e]=o[r],n[r]=s,i[2*r]=l,i[2*r+1]=u,a[r]=c,o[r]=h}function l(t,e,r,n,i,a,o,s,l,u,c){s[t]=s[e],l[2*t]=l[2*e],l[2*t+1]=l[2*e+1],u[t]=u[e],c[t]=c[e],s[e]=r,l[2*e]=n,l[2*e+1]=i,u[e]=a,c[e]=o}function u(t,e,r,n,i){return(r[t]-r[e]||n[2*e]-n[2*t]||i[t]-i[e])<0}function c(t,e,r,n,i,a,o,s){return(e-a[t]||o[2*t]-r||i-s[t])<0}function h(t,e,r,n,d,p){var m=(e-t+1)/6|0,g=t+m,v=e-m,y=t+e>>1,b=y-m,x=y+m,_=g,w=b,M=y,k=x,A=v,T=t+1,S=e-1,E=0;u(_,w,r,n,d,p)&&(E=_,_=w,w=E),u(k,A,r,n,d,p)&&(E=k,k=A,A=E),u(_,M,r,n,d,p)&&(E=_,_=M,M=E),u(w,M,r,n,d,p)&&(E=w,w=M,M=E),u(_,k,r,n,d,p)&&(E=_,_=k,k=E),u(M,k,r,n,d,p)&&(E=M,M=k,k=E),u(w,A,r,n,d,p)&&(E=w,w=A,A=E),u(w,M,r,n,d,p)&&(E=w,w=M,M=E),u(k,A,r,n,d,p)&&(E=k,k=A,A=E);var L=r[w],C=n[2*w],I=n[2*w+1],z=d[w],D=p[w],P=r[k],O=n[2*k],R=n[2*k+1],F=d[k],j=p[k],N=_,B=M,U=A,V=g,H=y,q=v,G=r[N],Y=r[B],W=r[U];r[V]=G,r[H]=Y,r[q]=W;for(var X=0;X<2;++X){var Z=n[2*N+X],J=n[2*B+X],K=n[2*U+X];n[2*V+X]=Z,n[2*H+X]=J,n[2*q+X]=K}var Q=d[N],$=d[B],tt=d[U];d[V]=Q,d[H]=$,d[q]=tt;var et=p[N],rt=p[B],nt=p[U];p[V]=et,p[H]=rt,p[q]=nt,o(b,t,r,n,d,p),o(x,e,r,n,d,p);for(var it=T;it<=S;++it)if(c(it,L,C,I,z,r,n,d))it!==T&&a(it,T,r,n,d,p),++T;else if(!c(it,P,O,R,F,r,n,d))for(;;){if(c(S,P,O,R,F,r,n,d)){c(S,L,C,I,z,r,n,d)?(s(it,T,S,r,n,d,p),++T,--S):(a(it,S,r,n,d,p),--S);break}if(--S<it)break}l(t,T-1,L,C,I,z,D,r,n,d,p),l(e,S+1,P,O,R,F,j,r,n,d,p),T-2-t<=f?i(t,T-2,r,n,d,p):h(t,T-2,r,n,d,p),e-(S+2)<=f?i(S+2,e,r,n,d,p):h(S+2,e,r,n,d,p),S-T<=f?i(T,S,r,n,d,p):h(T,S,r,n,d,p)}e.exports=n;var f=32},{}],242:[function(t,e,r){"use strict";function n(t,e,r,n,i,a,o,s){for(var l=r,u=r;u<n;++u){var c=t[2*u],h=t[2*u+1],f=e[u];i<=c&&c<=o&&a<=h&&h<=s&&(u===l?l+=1:(t[2*u]=t[2*l],t[2*u+1]=t[2*l+1],e[u]=e[l],t[2*l]=c,t[2*l+1]=h,e[l]=f,l+=1))}return l}function i(t,e,r){this.pixelSize=t,this.offset=e,this.count=r}function a(t,e,r,a){function l(i,a,o,s,u,c){var h=.5*o,f=s+1,d=u-s;r[_]=d,x[_++]=c;for(var p=0;p<2;++p)for(var m=0;m<2;++m){var g=i+p*h,v=a+m*h,y=n(t,e,f,u,g,v,g+h,v+h);if(y!==f){if(y-f>=Math.max(.9*d,32)){var b=u+s>>>1;l(g,v,h,f,b,c+1),f=b}l(g,v,h,f,y,c+1),f=y}}}var u=t.length>>>1;if(u<1)return[];for(var c=1/0,h=1/0,f=-1/0,d=-1/0,p=0;p<u;++p){var m=t[2*p],g=t[2*p+1];c=Math.min(c,m),f=Math.max(f,m),h=Math.min(h,g),d=Math.max(d,g),e[p]=p}c===f&&(f+=1+Math.abs(f)),h===d&&(d+=1+Math.abs(f));var v=1/(f-c),y=1/(d-h),b=Math.max(f-c,d-h);a=a||[0,0,0,0],a[0]=c,a[1]=h,a[2]=f,a[3]=d;var x=o.mallocInt32(u),_=0;l(c,h,b,0,u,0),s(x,t,e,r,u);for(var w=[],M=0,k=u,_=u-1;_>=0;--_){t[2*_]=(t[2*_]-c)*v,t[2*_+1]=(t[2*_+1]-h)*y;var A=x[_];A!==M&&(w.push(new i(b*Math.pow(.5,A),_+1,k-(_+1))),k=_+1,M=A)}return w.push(new i(b*Math.pow(.5,A+1),0,k)),o.free(x),w}var o=t("typedarray-pool"),s=t("./lib/sort");e.exports=a},{"./lib/sort":241,"typedarray-pool":541}],243:[function(t,e,r){"use strict";function n(t,e,r,n,i,a,o,s){this.plot=t,this.shader=e,this.pickShader=r,this.positionBuffer=n,this.sizeBuffer=i,this.colorBuffer=a,this.idBuffer=o,this.charBuffer=s,this.pointCount=0,this.pickOffset=0,this.points=null,this.scales=[],this.xCoords=[],this.charCanvas=document.createElement("canvas"),this.charTexture=m(this.plot.gl,this.charCanvas),this.charStep=400,this.charFit=.255,this.snapThreshold=1e4,this.paletteTexture=m(this.plot.gl,[256,1])}function i(){var t=this.plot,e=t.viewBox,r=t.dataBox,n=t.pixelRatio,i=r[2]-r[0],a=r[3]-r[1],u=2/i,c=2/a,h=-r[0]-.5*i,f=-r[1]-.5*a;_[0]=u,w[0]=u-_[0],_[1]=c,w[1]=c-_[1],M[0]=h,k[0]=h-M[0],M[1]=f,k[1]=f-M[1];var d=e[2]-e[0],p=e[3]-e[1];o=Math.min(i/d,a/p),A[0]=2*n/d,A[1]=2*n/p,s=r[0],l=r[2]}function a(t,e){var r=t.gl,i=u(r,f.vertex,f.fragment),a=u(r,f.pickVertex,f.pickFragment),o=c(r),s=c(r),l=c(r),h=c(r),d=c(r),p=new n(t,i,a,o,s,l,h,d);return p.update(e),t.addObject(p),p}e.exports=a;var o,s,l,u=t("gl-shader"),c=t("gl-buffer"),h=t("typedarray-pool"),f=t("./lib/shaders"),d=t("snap-points-2d"),p=t("font-atlas-sdf"),m=t("gl-texture2d"),g=t("color-id"),v=t("ndarray"),y=t("clamp"),b=t("binary-search-bounds"),x=n.prototype,_=new Float32Array([0,0]),w=new Float32Array([0,0]),M=new Float32Array([0,0]),k=new Float32Array([0,0]),A=[0,0],T=[0,0,0,0];x.drawPick=function(t){var e=void 0!==t,r=this.plot,n=this.pointCount,a=n>this.snapThreshold;if(!n)return t;i.call(this);var u=r.gl,c=e?this.pickShader:this.shader,h=u.isEnabled(u.BLEND);if(c.bind(),e){this.pickOffset=t;for(var f=0;f<4;++f)T[f]=t>>8*f&255;c.uniforms.pickOffset=T,this.idBuffer.bind(),c.attributes.id.pointer(u.UNSIGNED_BYTE,!1)}else u.blendFuncSeparate(u.SRC_ALPHA,u.ONE_MINUS_SRC_ALPHA,u.ONE,u.ONE_MINUS_SRC_ALPHA),u.blendColor(0,0,0,1),h||u.enable(u.BLEND),this.colorBuffer.bind(),c.attributes.color.pointer(u.UNSIGNED_BYTE,!1),this.charBuffer.bind(),c.attributes.char.pointer(u.UNSIGNED_BYTE,!1),c.uniforms.chars=this.charTexture.bind(0),c.uniforms.charsShape=[this.charCanvas.width,this.charCanvas.height],c.uniforms.charsStep=this.charStep,c.uniforms.palette=this.paletteTexture.bind(1);this.sizeBuffer.bind(),c.attributes.size.pointer(u.FLOAT,!1,8,0),e||c.attributes.border.pointer(u.FLOAT,!1,8,4),this.positionBuffer.bind(),c.attributes.positionHi.pointer(u.FLOAT,!1,16,0),c.attributes.positionLo.pointer(u.FLOAT,!1,16,8),c.uniforms.pixelRatio=r.pixelRatio,c.uniforms.scaleHi=_,c.uniforms.scaleLo=w,c.uniforms.translateHi=M,c.uniforms.translateLo=k,c.uniforms.viewBox=r.viewBox;var d=this.scales;if(a)for(var p=d.length-1;p>=0;p--){var m=d[p];if(!(m.pixelSize&&m.pixelSize<1.25*o&&p>1)){var g=m.offset,v=m.count+g,y=b.ge(this.xCoords,s,g,v-1),x=b.lt(this.xCoords,l,y,v-1)+1;x>y&&u.drawArrays(u.POINTS,y,x-y)}}else u.drawArrays(u.POINTS,0,n);if(e)return t+n;h?u.blendFunc(u.ONE,u.ONE_MINUS_SRC_ALPHA):u.disable(u.BLEND)},x.draw=x.drawPick,x.pick=function(t,e,r){var n=this.pickOffset,i=this.pointCount;if(r<n||r>=n+i)return null;var a=r-n,o=this.points;return{object:this,pointId:a,dataCoord:[o[2*a],o[2*a+1]]}},x.update=function(t){t=t||{};var e=t.positions||[],r=t.colors||[],n=t.glyphs||[],i=t.sizes||[],a=t.borderWidths||[],o=t.borderColors||[],s=this.plot.gl,l=this.pointCount,u=l>this.snapThreshold;if(null!=t.positions){this.points=e,l=this.points.length/2,u=l>this.snapThreshold;var c=h.mallocFloat32(2*l),f=h.mallocFloat64(2*l),m=h.mallocUint32(l),b=h.mallocFloat32(4*l);f.set(this.points),u&&(this.i2idx&&h.free(this.i2idx),this.i2idx=h.mallocInt32(l),this.scales=d(f,this.i2idx,c)),this.pointCount=l;for(var x=0;x<l;++x){var _=u?this.i2idx[x]:x;m[x]=_;var w=e[2*_],M=e[2*_+1];b[4*x]=w,b[4*x+1]=M,b[4*x+2]=w-b[4*x],b[4*x+3]=M-b[4*x+1],this.xCoords[x]=w}this.idBuffer.update(m),this.positionBuffer.update(b),h.free(b),h.free(m),h.free(f),h.free(c)}for(var k=h.mallocFloat32(2*l),A=h.mallocUint8(2*l),T=h.mallocUint8(2*l),S={},E=[],L=[],C=[],x=0,I=l,z=0;x<I;++x){var D=[255*r[4*x],255*r[4*x+1],255*r[4*x+2],255*r[4*x+3]],P=g(D,!1);null==S[P]&&(S[P]=z++,L.push(D[0]),L.push(D[1]),L.push(D[2]),L.push(D[3])),E.push(P),o&&o.length&&(D=[255*o[4*x],255*o[4*x+1],255*o[4*x+2],255*o[4*x+3]],P=g(D,!1),null==S[P]&&(S[P]=z++,L.push(D[0]),L.push(D[1]),L.push(D[2]),L.push(D[3])),C.push(P))}for(var O={},x=0,I=l,z=0;x<I;x++){var R=n[x];null==O[R]&&(O[R]=z++)}for(var F=0,x=0,I=i.length;x<I;++x)i[x]>F&&(F=i[x]);var j=this.charStep;this.charStep=y(Math.ceil(4*F),128,768);var N=Object.keys(O),B=this.charStep,U=Math.floor(B/2),V=s.getParameter(s.MAX_TEXTURE_SIZE),H=V/B*(V/B),q=Math.min(V,B*N.length),G=Math.min(V,B*Math.ceil(B*N.length/V)),Y=Math.floor(q/B);N.length>H&&console.warn("gl-scatter2d-fancy: number of characters is more than maximum texture size. Try reducing it."),this.chars&&this.chars+""==N+""&&this.charStep==j||(this.charCanvas=p({canvas:this.charCanvas,family:"sans-serif",size:U,shape:[q,G],step:[B,B],chars:N,align:!0,fit:this.charFit}),this.chars=N);for(var x=0;x<l;++x){var _=u?this.i2idx[x]:x,W=i[_],X=a[_];k[2*x]=2*W,k[2*x+1]=X;var P=E[_],Z=S[P];A[2*x]=Z;var J=C[_],K=S[J];A[2*x+1]=K;var R=n[_],Q=O[R];T[2*x+1]=Math.floor(Q/Y),T[2*x]=Q%Y}this.sizeBuffer.update(k),this.colorBuffer.update(A),this.charBuffer.update(T),this.charTexture.shape=[this.charCanvas.width,this.charCanvas.height],this.charCanvas&&this.charCanvas.width&&this.charTexture.setPixels(this.charCanvas),this.paletteTexture.setPixels(v(L.slice(0,1024),[256,1,4])),h.free(k),h.free(A),h.free(T)},x.dispose=function(){this.shader.dispose(),this.pickShader.dispose(),this.positionBuffer.dispose(),this.sizeBuffer.dispose(),this.colorBuffer.dispose(),this.idBuffer.dispose(),this.charBuffer.dispose(),this.plot.removeObject(this)}},{"./lib/shaders":232,"binary-search-bounds":233,clamp:88,"color-id":92,"font-atlas-sdf":134,"gl-buffer":156,"gl-shader":234,"gl-texture2d":267,ndarray:467,"snap-points-2d":242,"typedarray-pool":541}],244:[function(t,e,r){r.pointVertex="precision highp float;\n#define GLSLIFY 1\n\nattribute vec2 positionHi, positionLo;\nattribute float weight;\n\nuniform vec2 scaleHi, scaleLo, translateHi, translateLo;\nuniform float pointSize, useWeight;\n\nvarying float fragWeight;\n\n\nvec4 pfx_1_0(vec2 scaleHi, vec2 scaleLo, vec2 translateHi, vec2 translateLo, vec2 positionHi, vec2 positionLo) {\n return vec4((positionHi + translateHi) * scaleHi\n + (positionLo + translateLo) * scaleHi\n + (positionHi + translateHi) * scaleLo\n + (positionLo + translateLo) * scaleLo, 0.0, 1.0);\n}\n\nvoid main() {\n gl_Position = pfx_1_0(scaleHi, scaleLo, translateHi, translateLo, positionHi, positionLo);\n gl_PointSize = pointSize;\n fragWeight = mix(1.0, weight, useWeight);\n}",r.pointFragment="precision mediump float;\n#define GLSLIFY 1\n\nuniform vec4 color, borderColor;\nuniform float centerFraction;\n\nvarying float fragWeight;\n\nfloat smoothStep(float x, float y) {\n return 1.0 / (1.0 + exp(50.0*(x - y)));\n}\n\nvoid main() {\n float radius = length(2.0*gl_PointCoord.xy-1.0);\n if(radius > 1.0) {\n discard;\n }\n vec4 baseColor = mix(borderColor, color, smoothStep(radius, centerFraction));\n float alpha = 1.0 - pow(1.0 - baseColor.a, fragWeight);\n gl_FragColor = vec4(baseColor.rgb * alpha, alpha);\n}\n",r.pickVertex="precision highp float;\n#define GLSLIFY 1\n\nvec4 pfx_1_0(vec2 scaleHi, vec2 scaleLo, vec2 translateHi, vec2 translateLo, vec2 positionHi, vec2 positionLo) {\n return vec4((positionHi + translateHi) * scaleHi\n + (positionLo + translateLo) * scaleHi\n + (positionHi + translateHi) * scaleLo\n + (positionLo + translateLo) * scaleLo, 0.0, 1.0);\n}\n\nattribute vec2 positionHi, positionLo;\nattribute vec4 pickId;\n\nuniform vec2 scaleHi, scaleLo, translateHi, translateLo;\nuniform float pointSize;\nuniform vec4 pickOffset;\n\nvarying vec4 fragId;\n\nvoid main() {\n\n vec4 id = pickId + pickOffset;\n id.y += floor(id.x / 256.0);\n id.x -= floor(id.x / 256.0) * 256.0;\n\n id.z += floor(id.y / 256.0);\n id.y -= floor(id.y / 256.0) * 256.0;\n\n id.w += floor(id.z / 256.0);\n id.z -= floor(id.z / 256.0) * 256.0;\n\n gl_Position = pfx_1_0(scaleHi, scaleLo, translateHi, translateLo, positionHi, positionLo);\n gl_PointSize = pointSize;\n fragId = id;\n}",r.pickFragment="precision mediump float;\n#define GLSLIFY 1\n\nvarying vec4 fragId;\n\nvoid main() {\n float radius = length(2.0 * gl_PointCoord.xy - 1.0);\n if(radius > 1.0) {\n discard;\n }\n gl_FragColor = fragId / 255.0;\n}"},{}],245:[function(t,e,r){arguments[4][84][0].apply(r,arguments)},{dup:84}],246:[function(t,e,r){arguments[4][241][0].apply(r,arguments)},{dup:241}],247:[function(t,e,r){arguments[4][242][0].apply(r,arguments)},{"./lib/sort":246,dup:242,"typedarray-pool":541}],248:[function(t,e,r){"use strict";function n(t,e,r,n,i,a,o){this.plot=t,this.positionBufferHi=e,this.positionBufferLo=r,this.pickBuffer=n,this.weightBuffer=i,this.shader=a,this.pickShader=o,this.scales=[],this.size=12,this.borderSize=1,this.pointCount=0,this.color=[1,0,0,1],this.borderColor=[0,0,0,1],this.bounds=[1/0,1/0,-1/0,-1/0],this.pickOffset=0,this.points=null,this.xCoords=null,this.snapPoints=!0}function i(t,e){var r=t.gl,i=o(r),s=o(r),l=o(r),u=o(r),h=a(r,c.pointVertex,c.pointFragment),f=a(r,c.pickVertex,c.pickFragment),d=new n(t,i,s,l,u,h,f);return d.update(e),t.addObject(d),d}var a=t("gl-shader"),o=t("gl-buffer"),s=t("binary-search-bounds"),l=t("snap-points-2d"),u=t("typedarray-pool"),c=t("./lib/shader"),h=t("array-normalize"),f=t("array-bounds");e.exports=i;var d=n.prototype,p=new Float32Array(2),m=new Float32Array(2),g=new Float32Array(2),v=new Float32Array(2),y=[0,0,0,0];d.dispose=function(){this.shader.dispose(),this.pickShader.dispose(),this.positionBufferHi.dispose(),this.positionBufferLo.dispose(),this.pickBuffer.dispose(),this.xCoords&&u.free(this.xCoords),this.plot.removeObject(this)},d.update=function(t){function e(e,r){return e in t?t[e]:r}if(t=t||{},this.size=e("size",12),this.color=e("color",[1,0,0,1]).slice(),this.borderSize=e("borderSize",1),this.borderColor=e("borderColor",[0,0,0,1]).slice(),this.snapPoints=e("snapPoints",!0),null!=t.positions){this.xCoords&&u.free(this.xCoords),this.points=t.positions;var r=this.points.length>>>1,n=u.mallocInt32(r),i=u.mallocFloat32(r),a=u.mallocFloat64(2*r);if(a.set(this.points),this.snapPoints)this.scales=l(a,n,i,this.bounds);else{this.bounds=f(a,2),h(a,2,this.bounds);for(var o=0;o<r;o++)n[o]=o,i[o]=1}var s=u.mallocFloat64(r),c=u.mallocFloat32(2*r),d=u.mallocFloat32(2*r);c.set(a);for(var o=0,p=0;o<r;o++,p+=2)d[p]=a[p]-c[p],d[p+1]=a[p+1]-c[p+1],s[o]=a[p];this.positionBufferHi.update(c),this.positionBufferLo.update(d),this.pickBuffer.update(n),this.weightBuffer.update(i),u.free(c),u.free(d),u.free(i),u.free(a),u.free(n),this.xCoords=s,this.pointCount=r,this.pickOffset=0}},d.draw=function(t){var e=void 0!==t,r=this.plot,n=e?this.pickShader:this.shader,i=this.scales,a=this.positionBufferHi,o=this.positionBufferLo,s=this.pickBuffer,l=this.bounds,u=this.size,c=this.borderSize,h=r.gl,f=e?r.pickPixelRatio:r.pixelRatio,d=r.viewBox,b=r.dataBox;if(0===this.pointCount)return t;var x=l[2]-l[0],_=l[3]-l[1],w=b[2]-b[0],M=b[3]-b[1],k=(d[2]-d[0])*f/r.pixelRatio,A=(d[3]-d[1])*f/r.pixelRatio,T=this.pixelSize=Math.min(w/k,M/A),S=2*x/w,E=2*_/M;p[0]=S,p[1]=E,m[0]=S-p[0],m[1]=E-p[1];var L=(l[0]-b[0]-.5*w)/x,C=(l[1]-b[1]-.5*M)/_;g[0]=L,g[1]=C,v[0]=L-g[0],v[1]=C-g[1],n.bind(),n.uniforms.scaleHi=p,n.uniforms.scaleLo=m,n.uniforms.translateHi=g,n.uniforms.translateLo=v,n.uniforms.color=this.color,n.uniforms.borderColor=this.borderColor,n.uniforms.pointSize=f*(u+c),n.uniforms.centerFraction=0===this.borderSize?2:u/(u+c+1.25),a.bind(),n.attributes.positionHi.pointer(),o.bind(),n.attributes.positionLo.pointer(),e?(this.pickOffset=t,y[0]=255&t,y[1]=t>>8&255,y[2]=t>>16&255,y[3]=t>>24&255,n.uniforms.pickOffset=y,s.bind(),n.attributes.pickId.pointer(h.UNSIGNED_BYTE)):(n.uniforms.useWeight=1,this.weightBuffer.bind(),n.attributes.weight.pointer());var I=!0;if(this.snapPoints)for(var z=i.length-1;z>=0;z--){var D=i[z];if(!(D.pixelSize<T&&z>1)){var P=this.getVisibleRange(D),O=P[0],R=P[1];R>O&&h.drawArrays(h.POINTS,O,R-O),!e&&I&&(I=!1,n.uniforms.useWeight=0)}}else h.drawArrays(h.POINTS,0,this.pointCount);return t+this.pointCount},d.getVisibleRange=function(t){var e=this.plot.dataBox,r=this.bounds,n=this.pixelSize,i=this.size,a=this.plot.pixelRatio,o=r[2]-r[0];r[3],r[1];if(!t)for(var t,l=this.scales.length-1;l>=0&&(t=this.scales[l],t.pixelSize<n&&l>1);l--);var u=this.xCoords,c=(e[0]-r[0]-n*i*a)/o,h=(e[2]-r[0]+n*i*a)/o,f=t.offset,d=t.count+f,p=s.ge(u,c,f,d-1);return[p,s.lt(u,h,p,d-1)+1]},d.drawPick=d.draw,d.pick=function(t,e,r){var n=r-this.pickOffset;return n<0||n>=this.pointCount?null:{object:this,pointId:n,dataCoord:[this.points[2*n],this.points[2*n+1]]}}},{"./lib/shader":244,"array-bounds":44,"array-normalize":45,"binary-search-bounds":245,"gl-buffer":156,"gl-shader":255,"snap-points-2d":247,"typedarray-pool":541}],249:[function(t,e,r){"use strict";function n(t,e){var r=a[e];if(r||(r=a[e]={}),t in r)return r[t];for(var n=i(t,{textAlign:"center",textBaseline:"middle",lineHeight:1,font:e}),o=i(t,{triangles:!0,textAlign:"center",textBaseline:"middle",lineHeight:1,font:e}),s=[[1/0,1/0],[-1/0,-1/0]],l=0;l<n.positions.length;++l)for(var u=n.positions[l],c=0;c<2;++c)s[0][c]=Math.min(s[0][c],u[c]),s[1][c]=Math.max(s[1][c],u[c]);return r[t]=[o,n,s]}var i=t("vectorize-text");e.exports=n;var a={}},{"vectorize-text":554}],250:[function(t,e,r){function n(t,e){var r=i(t,e),n=r.attributes;return n.position.location=0,n.color.location=1,n.glyph.location=2,n.id.location=3,r}var i=t("gl-shader"),a="precision mediump float;\n#define GLSLIFY 1\n\nattribute vec3 position;\nattribute vec4 color;\nattribute vec2 glyph;\nattribute vec4 id;\n\n\nuniform vec4 highlightId;\nuniform float highlightScale;\nuniform mat4 model, view, projection;\nuniform vec3 clipBounds[2];\n\nvarying vec4 interpColor;\nvarying vec4 pickId;\nvarying vec3 dataCoordinate;\n\nvoid main() {\n if(any(lessThan(position, clipBounds[0])) || \n any(greaterThan(position, clipBounds[1])) ) {\n gl_Position = vec4(0,0,0,0);\n } else {\n float scale = 1.0;\n if(distance(highlightId, id) < 0.0001) {\n scale = highlightScale;\n }\n\n vec4 worldPosition = model * vec4(position, 1);\n vec4 viewPosition = view * worldPosition;\n viewPosition = viewPosition / viewPosition.w;\n vec4 clipPosition = projection * (viewPosition + scale * vec4(glyph.x, -glyph.y, 0, 0));\n \n gl_Position = clipPosition;\n interpColor = color;\n pickId = id;\n dataCoordinate = position;\n }\n}",o="precision mediump float;\n#define GLSLIFY 1\n\nattribute vec3 position;\nattribute vec4 color;\nattribute vec2 glyph;\nattribute vec4 id;\n\nuniform mat4 model, view, projection;\nuniform vec2 screenSize;\nuniform vec3 clipBounds[2];\nuniform float highlightScale, pixelRatio;\nuniform vec4 highlightId;\n\nvarying vec4 interpColor;\nvarying vec4 pickId;\nvarying vec3 dataCoordinate;\n\nvoid main() {\n if(any(lessThan(position, clipBounds[0])) || any(greaterThan(position, clipBounds[1]))) {\n gl_Position = vec4(0,0,0,0);\n } else {\n float scale = pixelRatio;\n if(distance(highlightId.bgr, id.bgr) < 0.001) {\n scale *= highlightScale;\n }\n\n vec4 worldPosition = model * vec4(position, 1.0);\n vec4 viewPosition = view * worldPosition;\n vec4 clipPosition = projection * viewPosition;\n clipPosition /= clipPosition.w;\n \n gl_Position = clipPosition + vec4(screenSize * scale * vec2(glyph.x, -glyph.y), 0.0, 0.0);\n interpColor = color;\n pickId = id;\n dataCoordinate = position;\n }\n}",s="precision mediump float;\n#define GLSLIFY 1\n\nattribute vec3 position;\nattribute vec4 color;\nattribute vec2 glyph;\nattribute vec4 id;\n\nuniform float highlightScale;\nuniform vec4 highlightId;\nuniform vec3 axes[2];\nuniform mat4 model, view, projection;\nuniform vec2 screenSize;\nuniform vec3 clipBounds[2];\nuniform float scale, pixelRatio;\n\nvarying vec4 interpColor;\nvarying vec4 pickId;\nvarying vec3 dataCoordinate;\n\nvoid main() {\n if(any(lessThan(position, clipBounds[0])) ||\n any(greaterThan(position, clipBounds[1])) ) {\n gl_Position = vec4(0,0,0,0);\n } else {\n float lscale = pixelRatio * scale;\n if(distance(highlightId, id) < 0.0001) {\n lscale *= highlightScale;\n }\n\n vec4 clipCenter = projection * view * model * vec4(position, 1);\n vec3 dataPosition = position + 0.5*lscale*(axes[0] * glyph.x + axes[1] * glyph.y) * clipCenter.w * screenSize.y;\n vec4 clipPosition = projection * view * model * vec4(dataPosition, 1);\n\n gl_Position = clipPosition;\n interpColor = color;\n pickId = id;\n dataCoordinate = dataPosition;\n }\n}\n",l="precision mediump float;\n#define GLSLIFY 1\n\nuniform vec3 fragClipBounds[2];\nuniform float opacity;\n\nvarying vec4 interpColor;\nvarying vec4 pickId;\nvarying vec3 dataCoordinate;\n\nvoid main() {\n if(any(lessThan(dataCoordinate, fragClipBounds[0])) ||\n any(greaterThan(dataCoordinate, fragClipBounds[1])) ) {\n discard;\n } else {\n gl_FragColor = interpColor * opacity;\n }\n}\n",u="precision mediump float;\n#define GLSLIFY 1\n\nuniform vec3 fragClipBounds[2];\nuniform float pickGroup;\n\nvarying vec4 pickId;\nvarying vec3 dataCoordinate;\n\nvoid main() {\n if(any(lessThan(dataCoordinate, fragClipBounds[0])) || \n any(greaterThan(dataCoordinate, fragClipBounds[1])) ) {\n discard;\n } else {\n gl_FragColor = vec4(pickGroup, pickId.bgr);\n }\n}",c=[{name:"position",type:"vec3"},{name:"color",type:"vec4"},{name:"glyph",type:"vec2"},{name:"id",type:"vec4"}],h={vertex:a,fragment:l,attributes:c},f={vertex:o,fragment:l,attributes:c},d={vertex:s,fragment:l,attributes:c},p={vertex:a,fragment:u,attributes:c},m={vertex:o,fragment:u,attributes:c},g={vertex:s,fragment:u,attributes:c};r.createPerspective=function(t){return n(t,h)},r.createOrtho=function(t){return n(t,f)},r.createProject=function(t){return n(t,d)},r.createPickPerspective=function(t){return n(t,p)},r.createPickOrtho=function(t){return n(t,m)},r.createPickProject=function(t){return n(t,g)}},{"gl-shader":255}],251:[function(t,e,r){"use strict";function n(t,e){var r=t[0],n=t[1],i=t[2],a=t[3];return t[0]=e[0]*r+e[4]*n+e[8]*i+e[12]*a,t[1]=e[1]*r+e[5]*n+e[9]*i+e[13]*a,t[2]=e[2]*r+e[6]*n+e[10]*i+e[14]*a,t[3]=e[3]*r+e[7]*n+e[11]*i+e[15]*a,t}function i(t,e,r,i){return n(i,i,r),n(i,i,e),n(i,i,t)}function a(t,e){this.index=t,this.dataCoordinate=this.position=e}function o(t,e,r,n,i,o,s,l,u,c,h,f){this.gl=t,this.pixelRatio=1,this.shader=e,this.orthoShader=r,this.projectShader=n,this.pointBuffer=i,this.colorBuffer=o,this.glyphBuffer=s,this.idBuffer=l,this.vao=u,this.vertexCount=0,this.lineVertexCount=0,this.opacity=1,this.lineWidth=0,this.projectScale=[2/3,2/3,2/3],this.projectOpacity=[1,1,1],this.pickId=0,this.pickPerspectiveShader=c,this.pickOrthoShader=h,this.pickProjectShader=f,this.points=[],this._selectResult=new a(0,[0,0,0]),this.useOrtho=!0,this.bounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],this.axesProject=[!0,!0,!0],this.axesBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.highlightId=[1,1,1,1],this.highlightScale=2,this.clipBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.dirty=!0}function s(t){return t[0]=t[1]=t[2]=0,t}function l(t,e){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[3]=1,t}function u(t,e,r,n){return t[0]=e[0],t[1]=e[1],t[2]=e[2],t[r]=n,t}function c(t){for(var e=L,r=0;r<2;++r)for(var n=0;n<3;++n)e[r][n]=Math.max(Math.min(t[r][n],1e8),-1e8);return e}function h(t,e,r,n,a){var o,h=e.axesProject,f=e.gl,d=t.uniforms,p=r.model||x,m=r.view||x,g=r.projection||x,y=e.axesBounds,b=c(e.clipBounds);o=e.axes?e.axes.lastCubeProps.axis:[1,1,1],w[0]=2/f.drawingBufferWidth,w[1]=2/f.drawingBufferHeight,t.bind(),d.view=m,d.projection=g,d.screenSize=w,d.highlightId=e.highlightId,d.highlightScale=e.highlightScale,d.clipBounds=b,
d.pickGroup=e.pickId/255,d.pixelRatio=e.pixelRatio;for(var _=0;_<3;++_)if(h[_]&&e.projectOpacity[_]<1===n){d.scale=e.projectScale[_],d.opacity=e.projectOpacity[_];for(var L=S,C=0;C<16;++C)L[C]=0;for(var C=0;C<4;++C)L[5*C]=1;L[5*_]=0,o[_]<0?L[12+_]=y[0][_]:L[12+_]=y[1][_],v(L,p,L),d.model=L;var I=(_+1)%3,z=(_+2)%3,D=s(M),P=s(k);D[I]=1,P[z]=1;var O=i(g,m,p,l(A,D)),R=i(g,m,p,l(T,P));if(Math.abs(O[1])>Math.abs(R[1])){var F=O;O=R,R=F,F=D,D=P,P=F;var j=I;I=z,z=j}O[0]<0&&(D[I]=-1),R[1]>0&&(P[z]=-1);for(var N=0,B=0,C=0;C<4;++C)N+=Math.pow(p[4*I+C],2),B+=Math.pow(p[4*z+C],2);D[I]/=Math.sqrt(N),P[z]/=Math.sqrt(B),d.axes[0]=D,d.axes[1]=P,d.fragClipBounds[0]=u(E,b[0],_,-1e8),d.fragClipBounds[1]=u(E,b[1],_,1e8),e.vao.draw(f.TRIANGLES,e.vertexCount),e.lineWidth>0&&(f.lineWidth(e.lineWidth),e.vao.draw(f.LINES,e.lineVertexCount,e.vertexCount))}}function f(t,e,r,n,i,a){var o=r.gl;if(r.vao.bind(),i===r.opacity<1||a){t.bind();var s=t.uniforms;s.model=n.model||x,s.view=n.view||x,s.projection=n.projection||x,w[0]=2/o.drawingBufferWidth,w[1]=2/o.drawingBufferHeight,s.screenSize=w,s.highlightId=r.highlightId,s.highlightScale=r.highlightScale,s.fragClipBounds=z,s.clipBounds=r.axes.bounds,s.opacity=r.opacity,s.pickGroup=r.pickId/255,s.pixelRatio=r.pixelRatio,r.vao.draw(o.TRIANGLES,r.vertexCount),r.lineWidth>0&&(o.lineWidth(r.lineWidth),r.vao.draw(o.LINES,r.lineVertexCount,r.vertexCount))}h(e,r,n,i,a),r.vao.unbind()}function d(t){var e=t.gl,r=y.createPerspective(e),n=y.createOrtho(e),i=y.createProject(e),a=y.createPickPerspective(e),s=y.createPickOrtho(e),l=y.createPickProject(e),u=p(e),c=p(e),h=p(e),f=p(e),d=m(e,[{buffer:u,size:3,type:e.FLOAT},{buffer:c,size:4,type:e.FLOAT},{buffer:h,size:2,type:e.FLOAT},{buffer:f,size:4,type:e.UNSIGNED_BYTE,normalized:!0}]),g=new o(e,r,n,i,u,c,h,f,d,a,s,l);return g.update(t),g}var p=t("gl-buffer"),m=t("gl-vao"),g=t("typedarray-pool"),v=t("gl-mat4/multiply"),y=t("./lib/shaders"),b=t("./lib/glyphs"),x=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1];e.exports=d;var _=o.prototype;_.pickSlots=1,_.setPickBase=function(t){this.pickId=t},_.isTransparent=function(){if(this.opacity<1)return!0;for(var t=0;t<3;++t)if(this.axesProject[t]&&this.projectOpacity[t]<1)return!0;return!1},_.isOpaque=function(){if(this.opacity>=1)return!0;for(var t=0;t<3;++t)if(this.axesProject[t]&&this.projectOpacity[t]>=1)return!0;return!1};var w=[0,0],M=[0,0,0],k=[0,0,0],A=[0,0,0,1],T=[0,0,0,1],S=x.slice(),E=[0,0,0],L=[[0,0,0],[0,0,0]],C=[-1e8,-1e8,-1e8],I=[1e8,1e8,1e8],z=[C,I];_.draw=function(t){f(this.useOrtho?this.orthoShader:this.shader,this.projectShader,this,t,!1,!1)},_.drawTransparent=function(t){f(this.useOrtho?this.orthoShader:this.shader,this.projectShader,this,t,!0,!1)},_.drawPick=function(t){f(this.useOrtho?this.pickOrthoShader:this.pickPerspectiveShader,this.pickProjectShader,this,t,!1,!0)},_.pick=function(t){if(!t)return null;if(t.id!==this.pickId)return null;var e=t.value[2]+(t.value[1]<<8)+(t.value[0]<<16);if(e>=this.pointCount||e<0)return null;var r=this.points[e],n=this._selectResult;n.index=e;for(var i=0;i<3;++i)n.position[i]=n.dataCoordinate[i]=r[i];return n},_.highlight=function(t){if(t){var e=t.index,r=255&e,n=e>>8&255,i=e>>16&255;this.highlightId=[r/255,n/255,i/255,0]}else this.highlightId=[1,1,1,1]},_.update=function(t){if(t=t||{},"perspective"in t&&(this.useOrtho=!t.perspective),"orthographic"in t&&(this.useOrtho=!!t.orthographic),"lineWidth"in t&&(this.lineWidth=t.lineWidth),"project"in t)if(Array.isArray(t.project))this.axesProject=t.project;else{var e=!!t.project;this.axesProject=[e,e,e]}if("projectScale"in t)if(Array.isArray(t.projectScale))this.projectScale=t.projectScale.slice();else{var r=+t.projectScale;this.projectScale=[r,r,r]}if("projectOpacity"in t)if(Array.isArray(t.projectOpacity))this.projectOpacity=t.projectOpacity.slice();else{var r=+t.projectOpacity;this.projectOpacity=[r,r,r]}"opacity"in t&&(this.opacity=t.opacity),this.dirty=!0;var n=t.position;if(n){var i=t.font||"normal",a=t.alignment||[0,0],o=[1/0,1/0,1/0],s=[-1/0,-1/0,-1/0],l=t.glyph,u=t.color,c=t.size,h=t.angle,f=t.lineColor,d=0,p=0,m=0,v=n.length;t:for(var y=0;y<v;++y){for(var x=n[y],_=0;_<3;++_)if(isNaN(x[_])||!isFinite(x[_]))continue t;var w;w=Array.isArray(l)?b(l[y],i):l?b(l,i):b("\u25cf",i);var M=w[0],k=w[1],A=w[2];p+=3*M.cells.length,m+=2*k.edges.length}var T=p+m,S=g.mallocFloat(3*T),E=g.mallocFloat(4*T),L=g.mallocFloat(2*T),C=g.mallocUint32(T),I=[0,a[1]],z=0,D=p,P=[0,0,0,1],O=[0,0,0,1],R=Array.isArray(u)&&Array.isArray(u[0]),F=Array.isArray(f)&&Array.isArray(f[0]);t:for(var y=0;y<v;++y){for(var x=n[y],_=0;_<3;++_){if(isNaN(x[_])||!isFinite(x[_])){d+=1;continue t}s[_]=Math.max(s[_],x[_]),o[_]=Math.min(o[_],x[_])}var w;w=Array.isArray(l)?b(l[y],i):l?b(l,i):b("\u25cf",i);var M=w[0],k=w[1],A=w[2];if(Array.isArray(u)){var j;if(j=R?u[y]:u,3===j.length){for(var _=0;_<3;++_)P[_]=j[_];P[3]=1}else if(4===j.length)for(var _=0;_<4;++_)P[_]=j[_]}else P[0]=P[1]=P[2]=0,P[3]=1;if(Array.isArray(f)){var j;if(j=F?f[y]:f,3===j.length){for(var _=0;_<3;++_)O[_]=j[_];O[_]=1}else if(4===j.length)for(var _=0;_<4;++_)O[_]=j[_]}else O[0]=O[1]=O[2]=0,O[3]=1;var N=.5;Array.isArray(c)?N=+c[y]:c?N=+c:this.useOrtho&&(N=12);var B=0;Array.isArray(h)?B=+h[y]:h&&(B=+h);for(var U=Math.cos(B),V=Math.sin(B),x=n[y],_=0;_<3;++_)s[_]=Math.max(s[_],x[_]),o[_]=Math.min(o[_],x[_]);a[0]<0?I[0]=a[0]*(1+A[1][0]):a[0]>0&&(I[0]=-a[0]*(1+A[0][0]));for(var H=M.cells,q=M.positions,_=0;_<H.length;++_)for(var G=H[_],Y=0;Y<3;++Y){for(var W=0;W<3;++W)S[3*z+W]=x[W];for(var W=0;W<4;++W)E[4*z+W]=P[W];C[z]=d;var X=q[G[Y]];L[2*z]=N*(U*X[0]-V*X[1]+I[0]),L[2*z+1]=N*(V*X[0]+U*X[1]+I[1]),z+=1}for(var H=k.edges,q=k.positions,_=0;_<H.length;++_)for(var G=H[_],Y=0;Y<2;++Y){for(var W=0;W<3;++W)S[3*D+W]=x[W];for(var W=0;W<4;++W)E[4*D+W]=O[W];C[D]=d;var X=q[G[Y]];L[2*D]=N*(U*X[0]-V*X[1]+I[0]),L[2*D+1]=N*(V*X[0]+U*X[1]+I[1]),D+=1}d+=1}this.vertexCount=p,this.lineVertexCount=m,this.pointBuffer.update(S),this.colorBuffer.update(E),this.glyphBuffer.update(L),this.idBuffer.update(new Uint32Array(C)),g.free(S),g.free(E),g.free(L),g.free(C),this.bounds=[o,s],this.points=n,this.pointCount=n.length}},_.dispose=function(){this.shader.dispose(),this.orthoShader.dispose(),this.pickPerspectiveShader.dispose(),this.pickOrthoShader.dispose(),this.vao.dispose(),this.pointBuffer.dispose(),this.colorBuffer.dispose(),this.glyphBuffer.dispose(),this.idBuffer.dispose()}},{"./lib/glyphs":249,"./lib/shaders":250,"gl-buffer":156,"gl-mat4/multiply":183,"gl-vao":271,"typedarray-pool":541}],252:[function(t,e,r){"use strict";r.boxVertex="precision mediump float;\n#define GLSLIFY 1\n\nattribute vec2 vertex;\n\nuniform vec2 cornerA, cornerB;\n\nvoid main() {\n gl_Position = vec4(mix(cornerA, cornerB, vertex), 0, 1);\n}\n",r.boxFragment="precision mediump float;\n#define GLSLIFY 1\n\nuniform vec4 color;\n\nvoid main() {\n gl_FragColor = color;\n}\n"},{}],253:[function(t,e,r){"use strict";function n(t,e,r){this.plot=t,this.boxBuffer=e,this.boxShader=r,this.enabled=!0,this.selectBox=[1/0,1/0,-1/0,-1/0],this.borderColor=[0,0,0,1],this.innerFill=!1,this.innerColor=[0,0,0,.25],this.outerFill=!0,this.outerColor=[0,0,0,.5],this.borderWidth=10}function i(t,e){var r=t.gl,i=o(r,[0,0,0,1,1,0,1,1]),l=a(r,s.boxVertex,s.boxFragment),u=new n(t,i,l);return u.update(e),t.addOverlay(u),u}var a=t("gl-shader"),o=t("gl-buffer"),s=t("./lib/shaders");e.exports=i;var l=n.prototype;l.draw=function(){if(this.enabled){var t=this.plot,e=this.selectBox,r=this.borderWidth,n=(this.innerFill,this.innerColor),i=(this.outerFill,this.outerColor),a=this.borderColor,o=t.box,s=t.screenBox,l=t.dataBox,u=t.viewBox,c=t.pixelRatio,h=(e[0]-l[0])*(u[2]-u[0])/(l[2]-l[0])+u[0],f=(e[1]-l[1])*(u[3]-u[1])/(l[3]-l[1])+u[1],d=(e[2]-l[0])*(u[2]-u[0])/(l[2]-l[0])+u[0],p=(e[3]-l[1])*(u[3]-u[1])/(l[3]-l[1])+u[1];if(h=Math.max(h,u[0]),f=Math.max(f,u[1]),d=Math.min(d,u[2]),p=Math.min(p,u[3]),!(d<h||p<f)){o.bind();var m=s[2]-s[0],g=s[3]-s[1];if(this.outerFill&&(o.drawBox(0,0,m,f,i),o.drawBox(0,f,h,p,i),o.drawBox(0,p,m,g,i),o.drawBox(d,f,m,p,i)),this.innerFill&&o.drawBox(h,f,d,p,n),r>0){var v=r*c;o.drawBox(h-v,f-v,d+v,f+v,a),o.drawBox(h-v,p-v,d+v,p+v,a),o.drawBox(h-v,f-v,h+v,p+v,a),o.drawBox(d-v,f-v,d+v,p+v,a)}}}},l.update=function(t){t=t||{},this.innerFill=!!t.innerFill,this.outerFill=!!t.outerFill,this.innerColor=(t.innerColor||[0,0,0,.5]).slice(),this.outerColor=(t.outerColor||[0,0,0,.5]).slice(),this.borderColor=(t.borderColor||[0,0,0,1]).slice(),this.borderWidth=t.borderWidth||0,this.selectBox=(t.selectBox||this.selectBox).slice()},l.dispose=function(){this.boxBuffer.dispose(),this.boxShader.dispose(),this.plot.removeOverlay(this)}},{"./lib/shaders":252,"gl-buffer":156,"gl-shader":255}],254:[function(t,e,r){"use strict";function n(t,e,r,n,i){this.coord=[t,e],this.id=r,this.value=n,this.distance=i}function i(t,e,r){this.gl=t,this.fbo=e,this.buffer=r,this._readTimeout=null;var n=this;this._readCallback=function(){n.gl&&(e.bind(),t.readPixels(0,0,e.shape[0],e.shape[1],t.RGBA,t.UNSIGNED_BYTE,n.buffer),n._readTimeout=null)}}function a(t,e){return new i(t,o(t,e),s.mallocUint8(e[0]*e[1]*4))}e.exports=a;var o=t("gl-fbo"),s=t("typedarray-pool"),l=t("ndarray"),u=t("bit-twiddle").nextPow2,c=t("cwise/lib/wrapper")({args:["array",{offset:[0,0,1],array:0},{offset:[0,0,2],array:0},{offset:[0,0,3],array:0},"scalar","scalar","index"],pre:{body:"{this_closestD2=1e8,this_closestX=-1,this_closestY=-1}",args:[],thisVars:["this_closestD2","this_closestX","this_closestY"],localVars:[]},body:{body:"{if(_inline_49_arg0_<255||_inline_49_arg1_<255||_inline_49_arg2_<255||_inline_49_arg3_<255){var _inline_49_l=_inline_49_arg4_-_inline_49_arg6_[0],_inline_49_a=_inline_49_arg5_-_inline_49_arg6_[1],_inline_49_f=_inline_49_l*_inline_49_l+_inline_49_a*_inline_49_a;_inline_49_f<this_closestD2&&(this_closestD2=_inline_49_f,this_closestX=_inline_49_arg6_[0],this_closestY=_inline_49_arg6_[1])}}",args:[{name:"_inline_49_arg0_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_49_arg1_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_49_arg2_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_49_arg3_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_49_arg4_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_49_arg5_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_49_arg6_",lvalue:!1,rvalue:!0,count:4}],thisVars:["this_closestD2","this_closestX","this_closestY"],localVars:["_inline_49_a","_inline_49_f","_inline_49_l"]},post:{body:"{return[this_closestX,this_closestY,this_closestD2]}",args:[],thisVars:["this_closestD2","this_closestX","this_closestY"],localVars:[]},debug:!1,funcName:"cwise",blockSize:64}),h=i.prototype;Object.defineProperty(h,"shape",{get:function(){return this.gl?this.fbo.shape.slice():[0,0]},set:function(t){if(this.gl){this.fbo.shape=t;var e=this.fbo.shape[0],r=this.fbo.shape[1];if(r*e*4>this.buffer.length){s.free(this.buffer);for(var n=this.buffer=s.mallocUint8(u(r*e*4)),i=0;i<r*e*4;++i)n[i]=255}return t}}}),h.begin=function(){var t=this.gl;this.shape;t&&(this.fbo.bind(),t.clearColor(1,1,1,1),t.clear(t.COLOR_BUFFER_BIT|t.DEPTH_BUFFER_BIT))},h.end=function(){var t=this.gl;t&&(t.bindFramebuffer(t.FRAMEBUFFER,null),this._readTimeout||clearTimeout(this._readTimeout),this._readTimeout=setTimeout(this._readCallback,1))},h.query=function(t,e,r){if(!this.gl)return null;var i=this.fbo.shape.slice();t|=0,e|=0,"number"!=typeof r&&(r=1);var a=0|Math.min(Math.max(t-r,0),i[0]),o=0|Math.min(Math.max(t+r,0),i[0]),s=0|Math.min(Math.max(e-r,0),i[1]),u=0|Math.min(Math.max(e+r,0),i[1]);if(o<=a||u<=s)return null;var h=[o-a,u-s],f=l(this.buffer,[h[0],h[1],4],[4,4*i[0],1],4*(a+i[0]*s)),d=c(f.hi(h[0],h[1],1),r,r),p=d[0],m=d[1];return p<0||Math.pow(this.radius,2)<d[2]?null:new n(p+a|0,m+s|0,f.get(p,m,0),[f.get(p,m,1),f.get(p,m,2),f.get(p,m,3)],Math.sqrt(d[2]))},h.dispose=function(){this.gl&&(this.fbo.dispose(),s.free(this.buffer),this.gl=null,this._readTimeout&&clearTimeout(this._readTimeout))}},{"bit-twiddle":67,"cwise/lib/wrapper":113,"gl-fbo":164,ndarray:467,"typedarray-pool":541}],255:[function(t,e,r){"use strict";function n(t){this.gl=t,this._vref=this._fref=this._relink=this.vertShader=this.fragShader=this.program=this.attributes=this.uniforms=this.types=null}function i(t,e){return t.name<e.name?-1:1}function a(t,e,r,i,a){var o=new n(t);return o.update(e,r,i,a),o}var o=t("./lib/create-uniforms"),s=t("./lib/create-attributes"),l=t("./lib/reflect"),u=t("./lib/shader-cache"),c=t("./lib/runtime-reflect"),h=t("./lib/GLError"),f=n.prototype;f.bind=function(){this.program||this._relink(),this.gl.useProgram(this.program)},f.dispose=function(){this._fref&&this._fref.dispose(),this._vref&&this._vref.dispose(),this.attributes=this.types=this.vertShader=this.fragShader=this.program=this._relink=this._fref=this._vref=null},f.update=function(t,e,r,n){function a(){d.program=u.program(p,d._vref,d._fref,x,_);for(var t=0;t<r.length;++t)E[t]=p.getUniformLocation(d.program,r[t].name)}if(!e||1===arguments.length){var f=t;t=f.vertex,e=f.fragment,r=f.uniforms,n=f.attributes}var d=this,p=d.gl,m=d._vref;d._vref=u.shader(p,p.VERTEX_SHADER,t),m&&m.dispose(),d.vertShader=d._vref.shader;var g=this._fref;if(d._fref=u.shader(p,p.FRAGMENT_SHADER,e),g&&g.dispose(),d.fragShader=d._fref.shader,!r||!n){var v=p.createProgram();if(p.attachShader(v,d.fragShader),p.attachShader(v,d.vertShader),p.linkProgram(v),!p.getProgramParameter(v,p.LINK_STATUS)){var y=p.getProgramInfoLog(v);throw new h(y,"Error linking program:"+y)}r=r||c.uniforms(p,v),n=n||c.attributes(p,v),p.deleteProgram(v)}n=n.slice(),n.sort(i);for(var b=[],x=[],_=[],w=0;w<n.length;++w){var M=n[w];if(M.type.indexOf("mat")>=0){for(var k=0|M.type.charAt(M.type.length-1),A=new Array(k),T=0;T<k;++T)A[T]=_.length,x.push(M.name+"["+T+"]"),"number"==typeof M.location?_.push(M.location+T):Array.isArray(M.location)&&M.location.length===k&&"number"==typeof M.location[T]?_.push(0|M.location[T]):_.push(-1);b.push({name:M.name,type:M.type,locations:A})}else b.push({name:M.name,type:M.type,locations:[_.length]}),x.push(M.name),"number"==typeof M.location?_.push(0|M.location):_.push(-1)}for(var S=0,w=0;w<_.length;++w)if(_[w]<0){for(;_.indexOf(S)>=0;)S+=1;_[w]=S}var E=new Array(r.length);a(),d._relink=a,d.types={uniforms:l(r),attributes:l(n)},d.attributes=s(p,d,b,_),Object.defineProperty(d,"uniforms",o(p,d,r,E))},e.exports=a},{"./lib/GLError":256,"./lib/create-attributes":257,"./lib/create-uniforms":258,"./lib/reflect":259,"./lib/runtime-reflect":260,"./lib/shader-cache":261}],256:[function(t,e,r){arguments[4][213][0].apply(r,arguments)},{dup:213}],257:[function(t,e,r){arguments[4][214][0].apply(r,arguments)},{"./GLError":256,dup:214}],258:[function(t,e,r){arguments[4][215][0].apply(r,arguments)},{"./GLError":256,"./reflect":259,dup:215}],259:[function(t,e,r){arguments[4][216][0].apply(r,arguments)},{dup:216}],260:[function(t,e,r){arguments[4][217][0].apply(r,arguments)},{dup:217}],261:[function(t,e,r){arguments[4][218][0].apply(r,arguments)},{"./GLError":256,dup:218,"gl-format-compiler-error":165,"weakmap-shim":562}],262:[function(t,e,r){"use strict";function n(t){this.plot=t,this.enable=[!0,!0,!1,!1],this.width=[1,1,1,1],this.color=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.center=[1/0,1/0]}function i(t,e){var r=new n(t);return r.update(e),t.addOverlay(r),r}e.exports=i;var a=n.prototype;a.update=function(t){t=t||{},this.enable=(t.enable||[!0,!0,!1,!1]).slice(),this.width=(t.width||[1,1,1,1]).slice(),this.color=(t.color||[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]]).map(function(t){return t.slice()}),this.center=(t.center||[1/0,1/0]).slice(),this.plot.setOverlayDirty()},a.draw=function(){var t=this.enable,e=this.width,r=this.color,n=this.center,i=this.plot,a=i.line,o=i.dataBox,s=i.viewBox;if(a.bind(),o[0]<=n[0]&&n[0]<=o[2]&&o[1]<=n[1]&&n[1]<=o[3]){var l=s[0]+(n[0]-o[0])/(o[2]-o[0])*(s[2]-s[0]),u=s[1]+(n[1]-o[1])/(o[3]-o[1])*(s[3]-s[1]);t[0]&&a.drawLine(l,u,s[0],u,e[0],r[0]),t[1]&&a.drawLine(l,u,l,s[1],e[1],r[1]),t[2]&&a.drawLine(l,u,s[2],u,e[2],r[2]),t[3]&&a.drawLine(l,u,l,s[3],e[3],r[3])}},a.dispose=function(){this.plot.removeOverlay(this)}},{}],263:[function(t,e,r){"use strict";var n=t("gl-shader");e.exports=function(t){return n(t,"precision mediump float;\n#define GLSLIFY 1\n\nattribute vec3 position, color;\nattribute float weight;\n\nuniform mat4 model, view, projection;\nuniform vec3 coordinates[3];\nuniform vec4 colors[3];\nuniform vec2 screenShape;\nuniform float lineWidth;\n\nvarying vec4 fragColor;\n\nvoid main() {\n vec3 vertexPosition = mix(coordinates[0],\n mix(coordinates[2], coordinates[1], 0.5 * (position + 1.0)), abs(position));\n\n vec4 clipPos = projection * view * model * vec4(vertexPosition, 1.0);\n vec2 clipOffset = (projection * view * model * vec4(color, 0.0)).xy;\n vec2 delta = weight * clipOffset * screenShape;\n vec2 lineOffset = normalize(vec2(delta.y, -delta.x)) / screenShape;\n\n gl_Position = vec4(clipPos.xy + clipPos.w * 0.5 * lineWidth * lineOffset, clipPos.z, clipPos.w);\n fragColor = color.x * colors[0] + color.y * colors[1] + color.z * colors[2];\n}\n","precision mediump float;\n#define GLSLIFY 1\n\nvarying vec4 fragColor;\n\nvoid main() {\n gl_FragColor = fragColor;\n}",null,[{name:"position",type:"vec3"},{name:"color",type:"vec3"},{name:"weight",type:"float"}])}},{"gl-shader":255}],264:[function(t,e,r){"use strict";function n(t,e,r,n){this.gl=t,this.buffer=e,this.vao=r,this.shader=n,this.pixelRatio=1,this.bounds=[[-1e3,-1e3,-1e3],[1e3,1e3,1e3]],this.position=[0,0,0],this.lineWidth=[2,2,2],this.colors=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.enabled=[!0,!0,!0],this.drawSides=[!0,!0,!0],this.axes=null}function i(t,e){function r(t,e,r,n,a,o){var s=[t,e,r,0,0,0,1];s[n+3]=1,s[n]=a,i.push.apply(i,s),s[6]=-1,i.push.apply(i,s),s[n]=o,i.push.apply(i,s),i.push.apply(i,s),s[6]=1,i.push.apply(i,s),s[n]=a,i.push.apply(i,s)}var i=[];r(0,0,0,0,0,1),r(0,0,0,1,0,1),r(0,0,0,2,0,1),r(1,0,0,1,-1,1),r(1,0,0,2,-1,1),r(0,1,0,0,-1,1),r(0,1,0,2,-1,1),r(0,0,1,0,-1,1),r(0,0,1,1,-1,1);var l=a(t,i),u=o(t,[{type:t.FLOAT,buffer:l,size:3,offset:0,stride:28},{type:t.FLOAT,buffer:l,size:3,offset:12,stride:28},{type:t.FLOAT,buffer:l,size:1,offset:24,stride:28}]),c=s(t);c.attributes.position.location=0,c.attributes.color.location=1,c.attributes.weight.location=2;var h=new n(t,l,u,c);return h.update(e),h}var a=t("gl-buffer"),o=t("gl-vao"),s=t("./shaders/index");e.exports=i;var l=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],u=n.prototype,c=[0,0,0],h=[0,0,0],f=[0,0];u.isTransparent=function(){return!1},u.drawTransparent=function(t){},u.draw=function(t){var e=this.gl,r=this.vao,n=this.shader;r.bind(),n.bind();var i,a=t.model||l,o=t.view||l,s=t.projection||l;this.axes&&(i=this.axes.lastCubeProps.axis);for(var u=c,d=h,p=0;p<3;++p)i&&i[p]<0?(u[p]=this.bounds[0][p],d[p]=this.bounds[1][p]):(u[p]=this.bounds[1][p],d[p]=this.bounds[0][p]);f[0]=e.drawingBufferWidth,f[1]=e.drawingBufferHeight,n.uniforms.model=a,n.uniforms.view=o,n.uniforms.projection=s,n.uniforms.coordinates=[this.position,u,d],n.uniforms.colors=this.colors,n.uniforms.screenShape=f;for(var p=0;p<3;++p)n.uniforms.lineWidth=this.lineWidth[p]*this.pixelRatio,this.enabled[p]&&(r.draw(e.TRIANGLES,6,6*p),this.drawSides[p]&&r.draw(e.TRIANGLES,12,18+12*p));r.unbind()},u.update=function(t){t&&("bounds"in t&&(this.bounds=t.bounds),"position"in t&&(this.position=t.position),"lineWidth"in t&&(this.lineWidth=t.lineWidth),"colors"in t&&(this.colors=t.colors),"enabled"in t&&(this.enabled=t.enabled),"drawSides"in t&&(this.drawSides=t.drawSides))},u.dispose=function(){this.vao.dispose(),this.buffer.dispose(),this.shader.dispose()}},{"./shaders/index":263,"gl-buffer":156,"gl-vao":271}],265:[function(t,e,r){var n=t("gl-shader"),i="precision mediump float;\n#define GLSLIFY 1\n\nattribute vec4 uv;\nattribute vec3 f;\nattribute vec3 normal;\n\nuniform mat4 model, view, projection, inverseModel;\nuniform vec3 lightPosition, eyePosition;\nuniform sampler2D colormap;\n\nvarying float value, kill;\nvarying vec3 worldCoordinate;\nvarying vec2 planeCoordinate;\nvarying vec3 lightDirection, eyeDirection, surfaceNormal;\nvarying vec4 vColor;\n\nvoid main() {\n worldCoordinate = vec3(uv.zw, f.x);\n vec4 worldPosition = model * vec4(worldCoordinate, 1.0);\n vec4 clipPosition = projection * view * worldPosition;\n gl_Position = clipPosition;\n kill = f.y;\n value = f.z;\n planeCoordinate = uv.xy;\n\n vColor = texture2D(colormap, vec2(value, value));\n\n //Lighting geometry parameters\n vec4 cameraCoordinate = view * worldPosition;\n cameraCoordinate.xyz /= cameraCoordinate.w;\n lightDirection = lightPosition - cameraCoordinate.xyz;\n eyeDirection = eyePosition - cameraCoordinate.xyz;\n surfaceNormal = normalize((vec4(normal,0) * inverseModel).xyz);\n}\n",a="precision mediump float;\n#define GLSLIFY 1\n\nfloat beckmannDistribution_2_0(float x, float roughness) {\n float NdotH = max(x, 0.0001);\n float cos2Alpha = NdotH * NdotH;\n float tan2Alpha = (cos2Alpha - 1.0) / cos2Alpha;\n float roughness2 = roughness * roughness;\n float denom = 3.141592653589793 * roughness2 * cos2Alpha * cos2Alpha;\n return exp(tan2Alpha / roughness2) / denom;\n}\n\n\n\nfloat beckmannSpecular_1_1(\n vec3 lightDirection,\n vec3 viewDirection,\n vec3 surfaceNormal,\n float roughness) {\n return beckmannDistribution_2_0(dot(surfaceNormal, normalize(lightDirection + viewDirection)), roughness);\n}\n\n\n\nuniform vec3 lowerBound, upperBound;\nuniform float contourTint;\nuniform vec4 contourColor;\nuniform sampler2D colormap;\nuniform vec3 clipBounds[2];\nuniform float roughness, fresnel, kambient, kdiffuse, kspecular, opacity;\nuniform float vertexColor;\n\nvarying float value, kill;\nvarying vec3 worldCoordinate;\nvarying vec3 lightDirection, eyeDirection, surfaceNormal;\nvarying vec4 vColor;\n\nvoid main() {\n if (kill > 0.0 ||\n any(lessThan(worldCoordinate, clipBounds[0])) || any(greaterThan(worldCoordinate, clipBounds[1]))) {\n discard;\n }\n\n vec3 N = normalize(surfaceNormal);\n vec3 V = normalize(eyeDirection);\n vec3 L = normalize(lightDirection);\n\n if(gl_FrontFacing) {\n N = -N;\n }\n\n float specular = max(beckmannSpecular_1_1(L, V, N, roughness), 0.);\n float diffuse = min(kambient + kdiffuse * max(dot(N, L), 0.0), 1.0);\n\n //decide how to interpolate color \u2014 in vertex or in fragment\n vec4 surfaceColor = step(vertexColor, .5) * texture2D(colormap, vec2(value, value)) + step(.5, vertexColor) * vColor;\n\n vec4 litColor = surfaceColor.a * vec4(diffuse * surfaceColor.rgb + kspecular * vec3(1,1,1) * specular, 1.0);\n\n gl_FragColor = mix(litColor, contourColor, contourTint) * opacity;\n}\n",o="precision mediump float;\n#define GLSLIFY 1\n\nattribute vec4 uv;\nattribute float f;\n\nuniform mat3 permutation;\nuniform mat4 model, view, projection;\nuniform float height, zOffset;\nuniform sampler2D colormap;\n\nvarying float value, kill;\nvarying vec3 worldCoordinate;\nvarying vec2 planeCoordinate;\nvarying vec3 lightDirection, eyeDirection, surfaceNormal;\nvarying vec4 vColor;\n\nvoid main() {\n vec3 dataCoordinate = permutation * vec3(uv.xy, height);\n vec4 worldPosition = model * vec4(dataCoordinate, 1.0);\n\n vec4 clipPosition = projection * view * worldPosition;\n clipPosition.z = clipPosition.z + zOffset;\n\n gl_Position = clipPosition;\n value = f;\n kill = -1.0;\n worldCoordinate = dataCoordinate;\n planeCoordinate = uv.zw;\n\n vColor = texture2D(colormap, vec2(value, value));\n\n //Don't do lighting for contours\n surfaceNormal = vec3(1,0,0);\n eyeDirection = vec3(0,1,0);\n lightDirection = vec3(0,0,1);\n}\n",s="precision mediump float;\n#define GLSLIFY 1\n\nuniform vec2 shape;\nuniform vec3 clipBounds[2];\nuniform float pickId;\n\nvarying float value, kill;\nvarying vec3 worldCoordinate;\nvarying vec2 planeCoordinate;\nvarying vec3 surfaceNormal;\n\nvec2 splitFloat(float v) {\n float vh = 255.0 * v;\n float upper = floor(vh);\n float lower = fract(vh);\n return vec2(upper / 255.0, floor(lower * 16.0) / 16.0);\n}\n\nvoid main() {\n if(kill > 0.0 ||\n any(lessThan(worldCoordinate, clipBounds[0])) || any(greaterThan(worldCoordinate, clipBounds[1]))) {\n discard;\n }\n vec2 ux = splitFloat(planeCoordinate.x / shape.x);\n vec2 uy = splitFloat(planeCoordinate.y / shape.y);\n gl_FragColor = vec4(pickId, ux.x, uy.x, ux.y + (uy.y/16.0));\n}\n";r.createShader=function(t){var e=n(t,i,a,null,[{name:"uv",type:"vec4"},{name:"f",type:"vec3"},{name:"normal",type:"vec3"}]);return e.attributes.uv.location=0,e.attributes.f.location=1,e.attributes.normal.location=2,e},r.createPickShader=function(t){var e=n(t,i,s,null,[{name:"uv",type:"vec4"},{name:"f",type:"vec3"},{name:"normal",type:"vec3"}]);return e.attributes.uv.location=0,e.attributes.f.location=1,e.attributes.normal.location=2,e},r.createContourShader=function(t){var e=n(t,o,a,null,[{name:"uv",type:"vec4"},{name:"f",type:"float"}]);return e.attributes.uv.location=0,e.attributes.f.location=1,e},r.createPickContourShader=function(t){var e=n(t,o,s,null,[{name:"uv",type:"vec4"},{name:"f",type:"float"}]);return e.attributes.uv.location=0,e.attributes.f.location=1,e}},{"gl-shader":255}],266:[function(t,e,r){"use strict";function n(t,e,r,n,i){this.position=t,this.index=e,this.uv=r,this.level=n,this.dataCoordinate=i}function i(t){var e=x([y({colormap:t,nshades:R,format:"rgba"}).map(function(t){return[t[0],t[1],t[2],255*t[3]]})]);return b.divseq(e,255),e}function a(t,e,r,i,a,o,s,l,u,c,h,f,d,p){this.gl=t,this.shape=e,this.bounds=r,this.intensityBounds=[],this._shader=i,this._pickShader=a,this._coordinateBuffer=o,this._vao=s,this._colorMap=l,this._contourShader=u,this._contourPickShader=c,this._contourBuffer=h,this._contourVAO=f,this._contourOffsets=[[],[],[]],this._contourCounts=[[],[],[]],this._vertexCount=0,this._pickResult=new n([0,0,0],[0,0],[0,0],[0,0,0],[0,0,0]),this._dynamicBuffer=d,this._dynamicVAO=p,this._dynamicOffsets=[0,0,0],this._dynamicCounts=[0,0,0],this.contourWidth=[1,1,1],this.contourLevels=[[1],[1],[1]],this.contourTint=[0,0,0],this.contourColor=[[.5,.5,.5,1],[.5,.5,.5,1],[.5,.5,.5,1]],this.showContour=!0,this.showSurface=!0,this.enableHighlight=[!0,!0,!0],this.highlightColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.highlightTint=[1,1,1],this.highlightLevel=[-1,-1,-1],this.enableDynamic=[!0,!0,!0],this.dynamicLevel=[NaN,NaN,NaN],this.dynamicColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.dynamicTint=[1,1,1],this.dynamicWidth=[1,1,1],this.axesBounds=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]],this.surfaceProject=[!1,!1,!1],this.contourProject=[[!1,!1,!1],[!1,!1,!1],[!1,!1,!1]],this.colorBounds=[!1,!1],this._field=[_(v.mallocFloat(1024),[0,0]),_(v.mallocFloat(1024),[0,0]),_(v.mallocFloat(1024),[0,0])],this.pickId=1,this.clipBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.snapToData=!1,this.opacity=1,this.lightPosition=[10,1e4,0],this.ambientLight=.8,this.diffuseLight=.8,this.specularLight=2,this.roughness=.5,this.fresnel=1.5,this.vertexColor=0,this.dirty=!0}function o(t,e){var r,n,i,a=e.axes&&e.axes.lastCubeProps.axis||j,o=e.showSurface,s=e.showContour;for(r=0;r<3;++r)for(o=o||e.surfaceProject[r],n=0;n<3;++n)s=s||e.contourProject[r][n];for(r=0;r<3;++r){var l=N.projections[r];for(n=0;n<16;++n)l[n]=0;for(n=0;n<4;++n)l[5*n]=1;l[5*r]=0,l[12+r]=e.axesBounds[+(a[r]>0)][r],M(l,t.model,l);var u=N.clipBounds[r];for(i=0;i<2;++i)for(n=0;n<3;++n)u[i][n]=t.clipBounds[i][n];u[0][r]=-1e8,u[1][r]=1e8}return N.showSurface=o,N.showContour=s,N}function s(t,e){t=t||{};var r=this.gl;r.disable(r.CULL_FACE),this._colorMap.bind(0);var n=B;n.model=t.model||D,n.view=t.view||D,n.projection=t.projection||D,n.lowerBound=[this.bounds[0][0],this.bounds[0][1],this.colorBounds[0]||this.bounds[0][2]],n.upperBound=[this.bounds[1][0],this.bounds[1][1],this.colorBounds[1]||this.bounds[1][2]],n.contourColor=this.contourColor[0],n.inverseModel=k(n.inverseModel,n.model);for(var i=0;i<2;++i)for(var a=n.clipBounds[i],s=0;s<3;++s)a[s]=Math.min(Math.max(this.clipBounds[i][s],-1e8),1e8);n.kambient=this.ambientLight,n.kdiffuse=this.diffuseLight,n.kspecular=this.specularLight,n.roughness=this.roughness,n.fresnel=this.fresnel,n.opacity=this.opacity,n.height=0,n.permutation=V,n.vertexColor=this.vertexColor;var l=U;for(M(l,n.view,n.model),M(l,n.projection,l),k(l,l),i=0;i<3;++i)n.eyePosition[i]=l[12+i]/l[15];var u=l[15];for(i=0;i<3;++i)u+=this.lightPosition[i]*l[4*i+3];for(i=0;i<3;++i){var c=l[12+i];for(s=0;s<3;++s)c+=l[4*s+i]*this.lightPosition[s];n.lightPosition[i]=c/u}var h=o(n,this);if(h.showSurface&&e===this.opacity<1){for(this._shader.bind(),this._shader.uniforms=n,this._vao.bind(),this.showSurface&&this._vertexCount&&this._vao.draw(r.TRIANGLES,this._vertexCount),i=0;i<3;++i)this.surfaceProject[i]&&this.vertexCount&&(this._shader.uniforms.model=h.projections[i],this._shader.uniforms.clipBounds=h.clipBounds[i],this._vao.draw(r.TRIANGLES,this._vertexCount));this._vao.unbind()}if(h.showContour&&!e){var f=this._contourShader;n.kambient=1,n.kdiffuse=0,n.kspecular=0,n.opacity=1,f.bind(),f.uniforms=n;var d=this._contourVAO;for(d.bind(),i=0;i<3;++i)for(f.uniforms.permutation=O[i],r.lineWidth(this.contourWidth[i]),s=0;s<this.contourLevels[i].length;++s)this._contourCounts[i][s]&&(s===this.highlightLevel[i]?(f.uniforms.contourColor=this.highlightColor[i],f.uniforms.contourTint=this.highlightTint[i]):0!==s&&s-1!==this.highlightLevel[i]||(f.uniforms.contourColor=this.contourColor[i],f.uniforms.contourTint=this.contourTint[i]),f.uniforms.height=this.contourLevels[i][s],d.draw(r.LINES,this._contourCounts[i][s],this._contourOffsets[i][s]));for(i=0;i<3;++i)for(f.uniforms.model=h.projections[i],f.uniforms.clipBounds=h.clipBounds[i],s=0;s<3;++s)if(this.contourProject[i][s]){f.uniforms.permutation=O[s],r.lineWidth(this.contourWidth[s]);for(var p=0;p<this.contourLevels[s].length;++p)p===this.highlightLevel[s]?(f.uniforms.contourColor=this.highlightColor[s],f.uniforms.contourTint=this.highlightTint[s]):0!==p&&p-1!==this.highlightLevel[s]||(f.uniforms.contourColor=this.contourColor[s],f.uniforms.contourTint=this.contourTint[s]),f.uniforms.height=this.contourLevels[s][p],d.draw(r.LINES,this._contourCounts[s][p],this._contourOffsets[s][p])}for(d=this._dynamicVAO,d.bind(),i=0;i<3;++i)if(0!==this._dynamicCounts[i])for(f.uniforms.model=n.model,f.uniforms.clipBounds=n.clipBounds,f.uniforms.permutation=O[i],r.lineWidth(this.dynamicWidth[i]),f.uniforms.contourColor=this.dynamicColor[i],f.uniforms.contourTint=this.dynamicTint[i],f.uniforms.height=this.dynamicLevel[i],d.draw(r.LINES,this._dynamicCounts[i],this._dynamicOffsets[i]),s=0;s<3;++s)this.contourProject[s][i]&&(f.uniforms.model=h.projections[s],f.uniforms.clipBounds=h.clipBounds[s],d.draw(r.LINES,this._dynamicCounts[i],this._dynamicOffsets[i]));d.unbind()}}function l(t,e){var r=e.shape.slice(),n=t.shape.slice();b.assign(t.lo(1,1).hi(r[0],r[1]),e),b.assign(t.lo(1).hi(r[0],1),e.hi(r[0],1)),b.assign(t.lo(1,n[1]-1).hi(r[0],1),e.lo(0,r[1]-1).hi(r[0],1)),b.assign(t.lo(0,1).hi(1,r[1]),e.hi(1)),b.assign(t.lo(n[0]-1,1).hi(1,r[1]),e.lo(r[0]-1)),t.set(0,0,e.get(0,0)),t.set(0,n[1]-1,e.get(0,r[1]-1)),t.set(n[0]-1,0,e.get(r[0]-1,0)),t.set(n[0]-1,n[1]-1,e.get(r[0]-1,r[1]-1))}function u(t,e){return Array.isArray(t)?[e(t[0]),e(t[1]),e(t[2])]:[e(t),e(t),e(t)]}function c(t){return Array.isArray(t)?3===t.length?[t[0],t[1],t[2],1]:[t[0],t[1],t[2],t[3]]:[0,0,0,1]}function h(t){if(Array.isArray(t)){if(Array.isArray(t))return[c(t[0]),c(t[1]),c(t[2])];var e=c(t);return[e.slice(),e.slice(),e.slice()]}}function f(t){var e=t.gl,r=E(e),n=C(e),i=L(e),o=I(e),s=p(e),l=m(e,[{buffer:s,size:4,stride:z,offset:0},{buffer:s,size:3,stride:z,offset:16},{buffer:s,size:3,stride:z,offset:28}]),u=p(e),c=m(e,[{buffer:u,size:4,stride:20,offset:0},{buffer:u,size:1,stride:20,offset:16}]),h=p(e),f=m(e,[{buffer:h,size:2,type:e.FLOAT}]),d=g(e,1,R,e.RGBA,e.UNSIGNED_BYTE);d.minFilter=e.LINEAR,d.magFilter=e.LINEAR;var v=new a(e,[0,0],[[0,0,0],[0,0,0]],r,n,s,l,d,i,o,u,c,h,f),y={levels:[[],[],[]]};for(var b in t)y[b]=t[b];return y.colormap=y.colormap||"jet",v.update(y),v}e.exports=f
;var d=t("bit-twiddle"),p=t("gl-buffer"),m=t("gl-vao"),g=t("gl-texture2d"),v=t("typedarray-pool"),y=t("colormap"),b=t("ndarray-ops"),x=t("ndarray-pack"),_=t("ndarray"),w=t("surface-nets"),M=t("gl-mat4/multiply"),k=t("gl-mat4/invert"),A=t("binary-search-bounds"),T=t("ndarray-gradient"),S=t("./lib/shaders"),E=S.createShader,L=S.createContourShader,C=S.createPickShader,I=S.createPickContourShader,z=40,D=[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1],P=[[0,0],[0,1],[1,0],[1,1],[1,0],[0,1]],O=[[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]];!function(){for(var t=0;t<3;++t){var e=O[t],r=(t+1)%3,n=(t+2)%3;e[r+0]=1,e[n+3]=1,e[t+6]=1}}();var R=256,F=a.prototype;F.isTransparent=function(){return this.opacity<1},F.isOpaque=function(){if(this.opacity>=1)return!0;for(var t=0;t<3;++t)if(this._contourCounts[t].length>0||this._dynamicCounts[t]>0)return!0;return!1},F.pickSlots=1,F.setPickBase=function(t){this.pickId=t};var j=[0,0,0],N={showSurface:!1,showContour:!1,projections:[D.slice(),D.slice(),D.slice()],clipBounds:[[[0,0,0],[0,0,0]],[[0,0,0],[0,0,0]],[[0,0,0],[0,0,0]]]},B={model:D,view:D,projection:D,inverseModel:D.slice(),lowerBound:[0,0,0],upperBound:[0,0,0],colorMap:0,clipBounds:[[0,0,0],[0,0,0]],height:0,contourTint:0,contourColor:[0,0,0,1],permutation:[1,0,0,0,1,0,0,0,1],zOffset:-1e-4,kambient:1,kdiffuse:1,kspecular:1,lightPosition:[1e3,1e3,1e3],eyePosition:[0,0,0],roughness:1,fresnel:1,opacity:1,vertexColor:0},U=D.slice(),V=[1,0,0,0,1,0,0,0,1];F.draw=function(t){return s.call(this,t,!1)},F.drawTransparent=function(t){return s.call(this,t,!0)};var H={model:D,view:D,projection:D,inverseModel:D,clipBounds:[[0,0,0],[0,0,0]],height:0,shape:[0,0],pickId:0,lowerBound:[0,0,0],upperBound:[0,0,0],zOffset:0,permutation:[1,0,0,0,1,0,0,0,1],lightPosition:[0,0,0],eyePosition:[0,0,0]};F.drawPick=function(t){t=t||{};var e=this.gl;e.disable(e.CULL_FACE);var r=H;r.model=t.model||D,r.view=t.view||D,r.projection=t.projection||D,r.shape=this._field[2].shape,r.pickId=this.pickId/255,r.lowerBound=this.bounds[0],r.upperBound=this.bounds[1],r.permutation=V;for(var n=0;n<2;++n)for(var i=r.clipBounds[n],a=0;a<3;++a)i[a]=Math.min(Math.max(this.clipBounds[n][a],-1e8),1e8);var s=o(r,this);if(s.showSurface){for(this._pickShader.bind(),this._pickShader.uniforms=r,this._vao.bind(),this._vao.draw(e.TRIANGLES,this._vertexCount),n=0;n<3;++n)this.surfaceProject[n]&&(this._pickShader.uniforms.model=s.projections[n],this._pickShader.uniforms.clipBounds=s.clipBounds[n],this._vao.draw(e.TRIANGLES,this._vertexCount));this._vao.unbind()}if(s.showContour){var l=this._contourPickShader;l.bind(),l.uniforms=r;var u=this._contourVAO;for(u.bind(),a=0;a<3;++a)for(e.lineWidth(this.contourWidth[a]),l.uniforms.permutation=O[a],n=0;n<this.contourLevels[a].length;++n)this._contourCounts[a][n]&&(l.uniforms.height=this.contourLevels[a][n],u.draw(e.LINES,this._contourCounts[a][n],this._contourOffsets[a][n]));for(n=0;n<3;++n)for(l.uniforms.model=s.projections[n],l.uniforms.clipBounds=s.clipBounds[n],a=0;a<3;++a)if(this.contourProject[n][a]){l.uniforms.permutation=O[a],e.lineWidth(this.contourWidth[a]);for(var c=0;c<this.contourLevels[a].length;++c)this._contourCounts[a][c]&&(l.uniforms.height=this.contourLevels[a][c],u.draw(e.LINES,this._contourCounts[a][c],this._contourOffsets[a][c]))}u.unbind()}},F.pick=function(t){if(!t)return null;if(t.id!==this.pickId)return null;var e=this._field[2].shape,r=this._pickResult,n=e[0]*(t.value[0]+(t.value[2]>>4)/16)/255,i=Math.floor(n),a=n-i,o=e[1]*(t.value[1]+(15&t.value[2])/16)/255,s=Math.floor(o),l=o-s;i+=1,s+=1;var u=r.position;u[0]=u[1]=u[2]=0;for(var c=0;c<2;++c)for(var h=c?a:1-a,f=0;f<2;++f)for(var d=f?l:1-l,p=i+c,m=s+f,g=h*d,v=0;v<3;++v)u[v]+=this._field[v].get(p,m)*g;for(var y=this._pickResult.level,b=0;b<3;++b)if(y[b]=A.le(this.contourLevels[b],u[b]),y[b]<0)this.contourLevels[b].length>0&&(y[b]=0);else if(y[b]<this.contourLevels[b].length-1){var x=this.contourLevels[b][y[b]],_=this.contourLevels[b][y[b]+1];Math.abs(x-u[b])>Math.abs(_-u[b])&&(y[b]+=1)}for(r.index[0]=a<.5?i:i+1,r.index[1]=l<.5?s:s+1,r.uv[0]=n/e[0],r.uv[1]=o/e[1],v=0;v<3;++v)r.dataCoordinate[v]=this._field[v].get(r.index[0],r.index[1]);return r},F.update=function(t){t=t||{},this.dirty=!0,"contourWidth"in t&&(this.contourWidth=u(t.contourWidth,Number)),"showContour"in t&&(this.showContour=u(t.showContour,Boolean)),"showSurface"in t&&(this.showSurface=!!t.showSurface),"contourTint"in t&&(this.contourTint=u(t.contourTint,Boolean)),"contourColor"in t&&(this.contourColor=h(t.contourColor)),"contourProject"in t&&(this.contourProject=u(t.contourProject,function(t){return u(t,Boolean)})),"surfaceProject"in t&&(this.surfaceProject=t.surfaceProject),"dynamicColor"in t&&(this.dynamicColor=h(t.dynamicColor)),"dynamicTint"in t&&(this.dynamicTint=u(t.dynamicTint,Number)),"dynamicWidth"in t&&(this.dynamicWidth=u(t.dynamicWidth,Number)),"opacity"in t&&(this.opacity=t.opacity),"colorBounds"in t&&(this.colorBounds=t.colorBounds),"vertexColor"in t&&(this.vertexColor=t.vertexColor?1:0);var e=t.field||t.coords&&t.coords[2]||null,r=!1;if(e||(e=this._field[2].shape[0]||this._field[2].shape[2]?this._field[2].lo(1,1).hi(this._field[2].shape[0]-2,this._field[2].shape[1]-2):this._field[2].hi(0,0)),"field"in t||"coords"in t){var n=(e.shape[0]+2)*(e.shape[1]+2);n>this._field[2].data.length&&(v.freeFloat(this._field[2].data),this._field[2].data=v.mallocFloat(d.nextPow2(n))),this._field[2]=_(this._field[2].data,[e.shape[0]+2,e.shape[1]+2]),l(this._field[2],e),this.shape=e.shape.slice();for(var a=this.shape,o=0;o<2;++o)this._field[2].size>this._field[o].data.length&&(v.freeFloat(this._field[o].data),this._field[o].data=v.mallocFloat(this._field[2].size)),this._field[o]=_(this._field[o].data,[a[0]+2,a[1]+2]);if(t.coords){var s=t.coords;if(!Array.isArray(s)||3!==s.length)throw new Error("gl-surface: invalid coordinates for x/y");for(o=0;o<2;++o){var c=s[o];for(y=0;y<2;++y)if(c.shape[y]!==a[y])throw new Error("gl-surface: coords have incorrect shape");l(this._field[o],c)}}else if(t.ticks){var f=t.ticks;if(!Array.isArray(f)||2!==f.length)throw new Error("gl-surface: invalid ticks");for(o=0;o<2;++o){var p=f[o];if((Array.isArray(p)||p.length)&&(p=_(p)),p.shape[0]!==a[o])throw new Error("gl-surface: invalid tick length");var m=_(p.data,a);m.stride[o]=p.stride[0],m.stride[1^o]=0,l(this._field[o],m)}}else{for(o=0;o<2;++o){var g=[0,0];g[o]=1,this._field[o]=_(this._field[o].data,[a[0]+2,a[1]+2],g,0)}this._field[0].set(0,0,0);for(var y=0;y<a[0];++y)this._field[0].set(y+1,0,y);for(this._field[0].set(a[0]+1,0,a[0]-1),this._field[1].set(0,0,0),y=0;y<a[1];++y)this._field[1].set(0,y+1,y);this._field[1].set(0,a[1]+1,a[1]-1)}var b=this._field,x=_(v.mallocFloat(3*b[2].size*2),[3,a[0]+2,a[1]+2,2]);for(o=0;o<3;++o)T(x.pick(o),b[o],"mirror");var M=_(v.mallocFloat(3*b[2].size),[a[0]+2,a[1]+2,3]);for(o=0;o<a[0]+2;++o)for(y=0;y<a[1]+2;++y){var k=x.get(0,o,y,0),A=x.get(0,o,y,1),S=x.get(1,o,y,0),E=x.get(1,o,y,1),L=x.get(2,o,y,0),C=x.get(2,o,y,1),I=S*C-E*L,z=L*A-C*k,D=k*E-A*S,O=Math.sqrt(I*I+z*z+D*D);O<1e-8?(O=Math.max(Math.abs(I),Math.abs(z),Math.abs(D)),O<1e-8?(D=1,z=I=0,O=1):O=1/O):O=1/Math.sqrt(O),M.set(o,y,0,I*O),M.set(o,y,1,z*O),M.set(o,y,2,D*O)}v.free(x.data);var R=[1/0,1/0,1/0],F=[-1/0,-1/0,-1/0],j=1/0,N=-1/0,B=(a[0]-1)*(a[1]-1)*6,U=v.mallocFloat(d.nextPow2(10*B)),V=0,H=0;for(o=0;o<a[0]-1;++o)t:for(y=0;y<a[1]-1;++y){for(var q=0;q<2;++q)for(var G=0;G<2;++G)for(var Y=0;Y<3;++Y){var W=this._field[Y].get(1+o+q,1+y+G);if(isNaN(W)||!isFinite(W))continue t}for(Y=0;Y<6;++Y){var X=o+P[Y][0],Z=y+P[Y][1],J=this._field[0].get(X+1,Z+1),K=this._field[1].get(X+1,Z+1);W=this._field[2].get(X+1,Z+1);var Q=W;I=M.get(X+1,Z+1,0),z=M.get(X+1,Z+1,1),D=M.get(X+1,Z+1,2),t.intensity&&(Q=t.intensity.get(X,Z)),U[V++]=X,U[V++]=Z,U[V++]=J,U[V++]=K,U[V++]=W,U[V++]=0,U[V++]=Q,U[V++]=I,U[V++]=z,U[V++]=D,R[0]=Math.min(R[0],J),R[1]=Math.min(R[1],K),R[2]=Math.min(R[2],W),j=Math.min(j,Q),F[0]=Math.max(F[0],J),F[1]=Math.max(F[1],K),F[2]=Math.max(F[2],W),N=Math.max(N,Q),H+=1}}for(t.intensityBounds&&(j=+t.intensityBounds[0],N=+t.intensityBounds[1]),o=6;o<V;o+=10)U[o]=(U[o]-j)/(N-j);this._vertexCount=H,this._coordinateBuffer.update(U.subarray(0,V)),v.freeFloat(U),v.free(M.data),this.bounds=[R,F],this.intensity=t.intensity||this._field[2],this.intensityBounds[0]===j&&this.intensityBounds[1]===N||(r=!0),this.intensityBounds=[j,N]}if("levels"in t){var $=t.levels;for($=Array.isArray($[0])?$.slice():[[],[],$],o=0;o<3;++o)$[o]=$[o].slice(),$.sort(function(t,e){return t-e});t:for(o=0;o<3;++o){if($[o].length!==this.contourLevels[o].length){r=!0;break}for(y=0;y<$[o].length;++y)if($[o][y]!==this.contourLevels[o][y]){r=!0;break t}}this.contourLevels=$}if(r){b=this._field,a=this.shape;for(var tt=[],et=0;et<3;++et){$=this.contourLevels[et];var rt=[],nt=[],it=[0,0,0];for(o=0;o<$.length;++o){var at=w(this._field[et],$[o]);rt.push(tt.length/5|0),H=0;t:for(y=0;y<at.cells.length;++y){var ot=at.cells[y];for(Y=0;Y<2;++Y){var st=at.positions[ot[Y]],lt=st[0],ut=0|Math.floor(lt),ct=lt-ut,ht=st[1],ft=0|Math.floor(ht),dt=ht-ft,pt=!1;e:for(var mt=0;mt<3;++mt){it[mt]=0;var gt=(et+mt+1)%3;for(q=0;q<2;++q){var vt=q?ct:1-ct;for(X=0|Math.min(Math.max(ut+q,0),a[0]),G=0;G<2;++G){var yt=G?dt:1-dt;if(Z=0|Math.min(Math.max(ft+G,0),a[1]),W=mt<2?this._field[gt].get(X,Z):(this.intensity.get(X,Z)-this.intensityBounds[0])/(this.intensityBounds[1]-this.intensityBounds[0]),!isFinite(W)||isNaN(W)){pt=!0;break e}var bt=vt*yt;it[mt]+=bt*W}}}if(pt){if(Y>0){for(var xt=0;xt<5;++xt)tt.pop();H-=1}continue t}tt.push(it[0],it[1],st[0],st[1],it[2]),H+=1}}nt.push(H)}this._contourOffsets[et]=rt,this._contourCounts[et]=nt}var _t=v.mallocFloat(tt.length);for(o=0;o<tt.length;++o)_t[o]=tt[o];this._contourBuffer.update(_t),v.freeFloat(_t)}t.colormap&&this._colorMap.setPixels(i(t.colormap))},F.dispose=function(){this._shader.dispose(),this._vao.dispose(),this._coordinateBuffer.dispose(),this._colorMap.dispose(),this._contourBuffer.dispose(),this._contourVAO.dispose(),this._contourShader.dispose(),this._contourPickShader.dispose(),this._dynamicBuffer.dispose(),this._dynamicVAO.dispose();for(var t=0;t<3;++t)v.freeFloat(this._field[t].data)},F.highlight=function(t){if(!t)return this._dynamicCounts=[0,0,0],this.dyanamicLevel=[NaN,NaN,NaN],void(this.highlightLevel=[-1,-1,-1]);for(var e=0;e<3;++e)this.enableHighlight[e]?this.highlightLevel[e]=t.level[e]:this.highlightLevel[e]=-1;var r;if(r=this.snapToData?t.dataCoordinate:t.position,this.enableDynamic[0]&&r[0]!==this.dynamicLevel[0]||this.enableDynamic[1]&&r[1]!==this.dynamicLevel[1]||this.enableDynamic[2]&&r[2]!==this.dynamicLevel[2]){for(var n=0,i=this.shape,a=v.mallocFloat(12*i[0]*i[1]),o=0;o<3;++o)if(this.enableDynamic[o]){this.dynamicLevel[o]=r[o];var s=(o+1)%3,l=(o+2)%3,u=this._field[o],c=this._field[s],h=this._field[l],f=(this.intensity,w(u,r[o])),d=f.cells,p=f.positions;for(this._dynamicOffsets[o]=n,e=0;e<d.length;++e)for(var m=d[e],g=0;g<2;++g){var y=p[m[g]],b=+y[0],x=0|b,_=0|Math.min(x+1,i[0]),M=b-x,k=1-M,A=+y[1],T=0|A,S=0|Math.min(T+1,i[1]),E=A-T,L=1-E,C=k*L,I=k*E,z=M*L,D=M*E,P=C*c.get(x,T)+I*c.get(x,S)+z*c.get(_,T)+D*c.get(_,S),O=C*h.get(x,T)+I*h.get(x,S)+z*h.get(_,T)+D*h.get(_,S);if(isNaN(P)||isNaN(O)){g&&(n-=1);break}a[2*n+0]=P,a[2*n+1]=O,n+=1}this._dynamicCounts[o]=n-this._dynamicOffsets[o]}else this.dynamicLevel[o]=NaN,this._dynamicCounts[o]=0;this._dynamicBuffer.update(a.subarray(0,2*n)),v.freeFloat(a)}}},{"./lib/shaders":265,"binary-search-bounds":66,"bit-twiddle":67,colormap:99,"gl-buffer":156,"gl-mat4/invert":181,"gl-mat4/multiply":183,"gl-texture2d":267,"gl-vao":271,ndarray:467,"ndarray-gradient":458,"ndarray-ops":461,"ndarray-pack":462,"surface-nets":531,"typedarray-pool":541}],267:[function(t,e,r){"use strict";function n(t){v=[t.LINEAR,t.NEAREST_MIPMAP_LINEAR,t.LINEAR_MIPMAP_NEAREST,t.LINEAR_MIPMAP_NEAREST],y=[t.NEAREST,t.LINEAR,t.NEAREST_MIPMAP_NEAREST,t.NEAREST_MIPMAP_LINEAR,t.LINEAR_MIPMAP_NEAREST,t.LINEAR_MIPMAP_LINEAR],b=[t.REPEAT,t.CLAMP_TO_EDGE,t.MIRRORED_REPEAT]}function i(t){return"undefined"!=typeof HTMLCanvasElement&&t instanceof HTMLCanvasElement||"undefined"!=typeof HTMLImageElement&&t instanceof HTMLImageElement||"undefined"!=typeof HTMLVideoElement&&t instanceof HTMLVideoElement||"undefined"!=typeof ImageData&&t instanceof ImageData}function a(t,e,r){var n=t.gl,i=n.getParameter(n.MAX_TEXTURE_SIZE);if(e<0||e>i||r<0||r>i)throw new Error("gl-texture2d: Invalid texture size");return t._shape=[e,r],t.bind(),n.texImage2D(n.TEXTURE_2D,0,t.format,e,r,0,t.format,t.type,null),t._mipLevels=[0],t}function o(t,e,r,n,i,a){this.gl=t,this.handle=e,this.format=i,this.type=a,this._shape=[r,n],this._mipLevels=[0],this._magFilter=t.NEAREST,this._minFilter=t.NEAREST,this._wrapS=t.CLAMP_TO_EDGE,this._wrapT=t.CLAMP_TO_EDGE,this._anisoSamples=1;var o=this,s=[this._wrapS,this._wrapT];Object.defineProperties(s,[{get:function(){return o._wrapS},set:function(t){return o.wrapS=t}},{get:function(){return o._wrapT},set:function(t){return o.wrapT=t}}]),this._wrapVector=s;var l=[this._shape[0],this._shape[1]];Object.defineProperties(l,[{get:function(){return o._shape[0]},set:function(t){return o.width=t}},{get:function(){return o._shape[1]},set:function(t){return o.height=t}}]),this._shapeVector=l}function s(t,e){return 3===t.length?1===e[2]&&e[1]===t[0]*t[2]&&e[0]===t[2]:1===e[0]&&e[1]===t[0]}function l(t,e,r,n,i,a,o,l){var u=l.dtype,c=l.shape.slice();if(c.length<2||c.length>3)throw new Error("gl-texture2d: Invalid ndarray, must be 2d or 3d");var h=0,f=0,d=s(c,l.stride.slice());"float32"===u?h=t.FLOAT:"float64"===u?(h=t.FLOAT,d=!1,u="float32"):"uint8"===u?h=t.UNSIGNED_BYTE:(h=t.UNSIGNED_BYTE,d=!1,u="uint8");if(2===c.length)f=t.LUMINANCE,c=[c[0],c[1],1],l=p(l.data,c,[l.stride[0],l.stride[1],1],l.offset);else{if(3!==c.length)throw new Error("gl-texture2d: Invalid shape for texture");if(1===c[2])f=t.ALPHA;else if(2===c[2])f=t.LUMINANCE_ALPHA;else if(3===c[2])f=t.RGB;else{if(4!==c[2])throw new Error("gl-texture2d: Invalid shape for pixel coords");f=t.RGBA}c[2]}if(f!==t.LUMINANCE&&f!==t.ALPHA||i!==t.LUMINANCE&&i!==t.ALPHA||(f=i),f!==i)throw new Error("gl-texture2d: Incompatible texture format for setPixels");var v=l.size,y=o.indexOf(n)<0;if(y&&o.push(n),h===a&&d)0===l.offset&&l.data.length===v?y?t.texImage2D(t.TEXTURE_2D,n,i,c[0],c[1],0,i,a,l.data):t.texSubImage2D(t.TEXTURE_2D,n,e,r,c[0],c[1],i,a,l.data):y?t.texImage2D(t.TEXTURE_2D,n,i,c[0],c[1],0,i,a,l.data.subarray(l.offset,l.offset+v)):t.texSubImage2D(t.TEXTURE_2D,n,e,r,c[0],c[1],i,a,l.data.subarray(l.offset,l.offset+v));else{var b;b=a===t.FLOAT?g.mallocFloat32(v):g.mallocUint8(v);var _=p(b,c,[c[2],c[2]*c[0],1]);h===t.FLOAT&&a===t.UNSIGNED_BYTE?x(_,l):m.assign(_,l),y?t.texImage2D(t.TEXTURE_2D,n,i,c[0],c[1],0,i,a,b.subarray(0,v)):t.texSubImage2D(t.TEXTURE_2D,n,e,r,c[0],c[1],i,a,b.subarray(0,v)),a===t.FLOAT?g.freeFloat32(b):g.freeUint8(b)}}function u(t){var e=t.createTexture();return t.bindTexture(t.TEXTURE_2D,e),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.NEAREST),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.NEAREST),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),e}function c(t,e,r,n,i){var a=t.getParameter(t.MAX_TEXTURE_SIZE);if(e<0||e>a||r<0||r>a)throw new Error("gl-texture2d: Invalid texture shape");if(i===t.FLOAT&&!t.getExtension("OES_texture_float"))throw new Error("gl-texture2d: Floating point textures not supported on this platform");var s=u(t);return t.texImage2D(t.TEXTURE_2D,0,n,e,r,0,n,i,null),new o(t,s,e,r,n,i)}function h(t,e,r,n,i,a){var s=u(t);return t.texImage2D(t.TEXTURE_2D,0,i,i,a,e),new o(t,s,r,n,i,a)}function f(t,e){var r=e.dtype,n=e.shape.slice(),i=t.getParameter(t.MAX_TEXTURE_SIZE);if(n[0]<0||n[0]>i||n[1]<0||n[1]>i)throw new Error("gl-texture2d: Invalid texture size");var a=s(n,e.stride.slice()),l=0;"float32"===r?l=t.FLOAT:"float64"===r?(l=t.FLOAT,a=!1,r="float32"):"uint8"===r?l=t.UNSIGNED_BYTE:(l=t.UNSIGNED_BYTE,a=!1,r="uint8");var c=0;if(2===n.length)c=t.LUMINANCE,n=[n[0],n[1],1],e=p(e.data,n,[e.stride[0],e.stride[1],1],e.offset);else{if(3!==n.length)throw new Error("gl-texture2d: Invalid shape for texture");if(1===n[2])c=t.ALPHA;else if(2===n[2])c=t.LUMINANCE_ALPHA;else if(3===n[2])c=t.RGB;else{if(4!==n[2])throw new Error("gl-texture2d: Invalid shape for pixel coords");c=t.RGBA}}l!==t.FLOAT||t.getExtension("OES_texture_float")||(l=t.UNSIGNED_BYTE,a=!1);var h,f,d=e.size;if(a)h=0===e.offset&&e.data.length===d?e.data:e.data.subarray(e.offset,e.offset+d);else{var v=[n[2],n[2]*n[0],1];f=g.malloc(d,r);var y=p(f,n,v,0);"float32"!==r&&"float64"!==r||l!==t.UNSIGNED_BYTE?m.assign(y,e):x(y,e),h=f.subarray(0,d)}var b=u(t);return t.texImage2D(t.TEXTURE_2D,0,c,n[0],n[1],0,c,l,h),a||g.free(f),new o(t,b,n[0],n[1],c,l)}function d(t){if(arguments.length<=1)throw new Error("gl-texture2d: Missing arguments for texture2d constructor");if(v||n(t),"number"==typeof arguments[1])return c(t,arguments[1],arguments[2],arguments[3]||t.RGBA,arguments[4]||t.UNSIGNED_BYTE);if(Array.isArray(arguments[1]))return c(t,0|arguments[1][0],0|arguments[1][1],arguments[2]||t.RGBA,arguments[3]||t.UNSIGNED_BYTE);if("object"==typeof arguments[1]){var e=arguments[1],r=i(e)?e:e.raw;if(r)return h(t,r,0|e.width,0|e.height,arguments[2]||t.RGBA,arguments[3]||t.UNSIGNED_BYTE);if(e.shape&&e.data&&e.stride)return f(t,e)}throw new Error("gl-texture2d: Invalid arguments for texture2d constructor")}var p=t("ndarray"),m=t("ndarray-ops"),g=t("typedarray-pool");e.exports=d;var v=null,y=null,b=null,x=function(t,e){m.muls(t,e,255)},_=o.prototype;Object.defineProperties(_,{minFilter:{get:function(){return this._minFilter},set:function(t){this.bind();var e=this.gl;if(this.type===e.FLOAT&&v.indexOf(t)>=0&&(e.getExtension("OES_texture_float_linear")||(t=e.NEAREST)),y.indexOf(t)<0)throw new Error("gl-texture2d: Unknown filter mode "+t);return e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,t),this._minFilter=t}},magFilter:{get:function(){return this._magFilter},set:function(t){this.bind();var e=this.gl;if(this.type===e.FLOAT&&v.indexOf(t)>=0&&(e.getExtension("OES_texture_float_linear")||(t=e.NEAREST)),y.indexOf(t)<0)throw new Error("gl-texture2d: Unknown filter mode "+t);return e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,t),this._magFilter=t}},mipSamples:{get:function(){return this._anisoSamples},set:function(t){var e=this._anisoSamples;if(this._anisoSamples=0|Math.max(t,1),e!==this._anisoSamples){var r=this.gl.getExtension("EXT_texture_filter_anisotropic");r&&this.gl.texParameterf(this.gl.TEXTURE_2D,r.TEXTURE_MAX_ANISOTROPY_EXT,this._anisoSamples)}return this._anisoSamples}},wrapS:{get:function(){return this._wrapS},set:function(t){if(this.bind(),b.indexOf(t)<0)throw new Error("gl-texture2d: Unknown wrap mode "+t);return this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_WRAP_S,t),this._wrapS=t}},wrapT:{get:function(){return this._wrapT},set:function(t){if(this.bind(),b.indexOf(t)<0)throw new Error("gl-texture2d: Unknown wrap mode "+t);return this.gl.texParameteri(this.gl.TEXTURE_2D,this.gl.TEXTURE_WRAP_T,t),this._wrapT=t}},wrap:{get:function(){return this._wrapVector},set:function(t){if(Array.isArray(t)||(t=[t,t]),2!==t.length)throw new Error("gl-texture2d: Must specify wrap mode for rows and columns");for(var e=0;e<2;++e)if(b.indexOf(t[e])<0)throw new Error("gl-texture2d: Unknown wrap mode "+t);this._wrapS=t[0],this._wrapT=t[1];var r=this.gl;return this.bind(),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_S,this._wrapS),r.texParameteri(r.TEXTURE_2D,r.TEXTURE_WRAP_T,this._wrapT),t}},shape:{get:function(){return this._shapeVector},set:function(t){if(Array.isArray(t)){if(2!==t.length)throw new Error("gl-texture2d: Invalid texture shape")}else t=[0|t,0|t];return a(this,0|t[0],0|t[1]),[0|t[0],0|t[1]]}},width:{get:function(){return this._shape[0]},set:function(t){return t|=0,a(this,t,this._shape[1]),t}},height:{get:function(){return this._shape[1]},set:function(t){return t|=0,a(this,this._shape[0],t),t}}}),_.bind=function(t){var e=this.gl;return void 0!==t&&e.activeTexture(e.TEXTURE0+(0|t)),e.bindTexture(e.TEXTURE_2D,this.handle),void 0!==t?0|t:e.getParameter(e.ACTIVE_TEXTURE)-e.TEXTURE0},_.dispose=function(){this.gl.deleteTexture(this.handle)},_.generateMipmap=function(){this.bind(),this.gl.generateMipmap(this.gl.TEXTURE_2D);for(var t=Math.min(this._shape[0],this._shape[1]),e=0;t>0;++e,t>>>=1)this._mipLevels.indexOf(e)<0&&this._mipLevels.push(e)},_.setPixels=function(t,e,r,n){var a=this.gl;this.bind(),Array.isArray(e)?(n=r,r=0|e[1],e=0|e[0]):(e=e||0,r=r||0),n=n||0;var o=i(t)?t:t.raw;if(o){this._mipLevels.indexOf(n)<0?(a.texImage2D(a.TEXTURE_2D,0,this.format,this.format,this.type,o),this._mipLevels.push(n)):a.texSubImage2D(a.TEXTURE_2D,n,e,r,this.format,this.type,o)}else{if(!(t.shape&&t.stride&&t.data))throw new Error("gl-texture2d: Unsupported data type");if(t.shape.length<2||e+t.shape[1]>this._shape[1]>>>n||r+t.shape[0]>this._shape[0]>>>n||e<0||r<0)throw new Error("gl-texture2d: Texture dimensions are out of bounds");l(a,e,r,n,this.format,this.type,this._mipLevels,t)}}},{ndarray:467,"ndarray-ops":461,"typedarray-pool":541}],268:[function(t,e,r){"use strict";function n(t,e,r){e?e.bind():t.bindBuffer(t.ELEMENT_ARRAY_BUFFER,null);var n=0|t.getParameter(t.MAX_VERTEX_ATTRIBS);if(r){if(r.length>n)throw new Error("gl-vao: Too many vertex attributes");for(var i=0;i<r.length;++i){var a=r[i];if(a.buffer){var o=a.buffer,s=a.size||4,l=a.type||t.FLOAT,u=!!a.normalized,c=a.stride||0,h=a.offset||0;o.bind(),t.enableVertexAttribArray(i),t.vertexAttribPointer(i,s,l,u,c,h)}else{if("number"==typeof a)t.vertexAttrib1f(i,a);else if(1===a.length)t.vertexAttrib1f(i,a[0]);else if(2===a.length)t.vertexAttrib2f(i,a[0],a[1]);else if(3===a.length)t.vertexAttrib3f(i,a[0],a[1],a[2]);else{if(4!==a.length)throw new Error("gl-vao: Invalid vertex attribute");t.vertexAttrib4f(i,a[0],a[1],a[2],a[3])}t.disableVertexAttribArray(i)}}for(;i<n;++i)t.disableVertexAttribArray(i)}else{t.bindBuffer(t.ARRAY_BUFFER,null);for(var i=0;i<n;++i)t.disableVertexAttribArray(i)}}e.exports=n},{}],269:[function(t,e,r){"use strict";function n(t){this.gl=t,this._elements=null,this._attributes=null,this._elementsType=t.UNSIGNED_SHORT}function i(t){return new n(t)}var a=t("./do-bind.js");n.prototype.bind=function(){a(this.gl,this._elements,this._attributes)},n.prototype.update=function(t,e,r){this._elements=e,this._attributes=t,this._elementsType=r||this.gl.UNSIGNED_SHORT},n.prototype.dispose=function(){},n.prototype.unbind=function(){},n.prototype.draw=function(t,e,r){r=r||0;var n=this.gl;this._elements?n.drawElements(t,e,this._elementsType,r):n.drawArrays(t,r,e)},e.exports=i},{"./do-bind.js":268}],270:[function(t,e,r){"use strict";function n(t,e,r,n,i,a){this.location=t,this.dimension=e,this.a=r,this.b=n,this.c=i,this.d=a}function i(t,e,r){this.gl=t,this._ext=e,this.handle=r,this._attribs=[],this._useElements=!1,this._elementsType=t.UNSIGNED_SHORT}function a(t,e){return new i(t,e,e.createVertexArrayOES())}var o=t("./do-bind.js");n.prototype.bind=function(t){switch(this.dimension){case 1:t.vertexAttrib1f(this.location,this.a);break;case 2:t.vertexAttrib2f(this.location,this.a,this.b);break;case 3:t.vertexAttrib3f(this.location,this.a,this.b,this.c);break;case 4:t.vertexAttrib4f(this.location,this.a,this.b,this.c,this.d)}},i.prototype.bind=function(){this._ext.bindVertexArrayOES(this.handle);for(var t=0;t<this._attribs.length;++t)this._attribs[t].bind(this.gl)},i.prototype.unbind=function(){this._ext.bindVertexArrayOES(null)},i.prototype.dispose=function(){this._ext.deleteVertexArrayOES(this.handle)},i.prototype.update=function(t,e,r){if(this.bind(),o(this.gl,e,t),this.unbind(),this._attribs.length=0,t)for(var i=0;i<t.length;++i){var a=t[i];"number"==typeof a?this._attribs.push(new n(i,1,a)):Array.isArray(a)&&this._attribs.push(new n(i,a.length,a[0],a[1],a[2],a[3]))}this._useElements=!!e,this._elementsType=r||this.gl.UNSIGNED_SHORT},i.prototype.draw=function(t,e,r){r=r||0;var n=this.gl;this._useElements?n.drawElements(t,e,this._elementsType,r):n.drawArrays(t,r,e)},e.exports=a},{"./do-bind.js":268}],271:[function(t,e,r){"use strict";function n(t){this.bindVertexArrayOES=t.bindVertexArray.bind(t),this.createVertexArrayOES=t.createVertexArray.bind(t),this.deleteVertexArrayOES=t.deleteVertexArray.bind(t)}function i(t,e,r,i){var s,l=t.createVertexArray?new n(t):t.getExtension("OES_vertex_array_object");return s=l?a(t,l):o(t),s.update(e,r,i),s}var a=t("./lib/vao-native.js"),o=t("./lib/vao-emulated.js");e.exports=i},{"./lib/vao-emulated.js":269,"./lib/vao-native.js":270}],272:[function(t,e,r){function n(t,e,r){var n=e[0],i=e[1],a=e[2],o=r[0],s=r[1],l=r[2];return t[0]=i*l-a*s,t[1]=a*o-n*l,t[2]=n*s-i*o,t}e.exports=n},{}],273:[function(t,e,r){function n(t,e){return t[0]*e[0]+t[1]*e[1]+t[2]*e[2]}e.exports=n},{}],274:[function(t,e,r){function n(t){var e=t[0],r=t[1],n=t[2];return Math.sqrt(e*e+r*r+n*n)}e.exports=n},{}],275:[function(t,e,r){function n(t,e,r,n){var i=e[0],a=e[1],o=e[2];return t[0]=i+n*(r[0]-i),t[1]=a+n*(r[1]-a),t[2]=o+n*(r[2]-o),t}e.exports=n},{}],276:[function(t,e,r){function n(t,e){var r=e[0],n=e[1],i=e[2],a=r*r+n*n+i*i;return a>0&&(a=1/Math.sqrt(a),t[0]=e[0]*a,t[1]=e[1]*a,t[2]=e[2]*a),t}e.exports=n},{}],277:[function(t,e,r){function n(t,e,r){var n=e[0],i=e[1],a=e[2],o=e[3];return t[0]=r[0]*n+r[4]*i+r[8]*a+r[12]*o,t[1]=r[1]*n+r[5]*i+r[9]*a+r[13]*o,t[2]=r[2]*n+r[6]*i+r[10]*a+r[14]*o,t[3]=r[3]*n+r[7]*i+r[11]*a+r[15]*o,t}e.exports=n},{}],278:[function(t,e,r){function n(t,e,r,n){return i[0]=n,i[1]=r,i[2]=e,i[3]=t,a[0]}e.exports=n;var i=new Uint8Array(4),a=new Float32Array(i.buffer)},{}],279:[function(t,e,r){function n(t){for(var e=Array.isArray(t)?t:i(t),r=0;r<e.length;r++){var n=e[r];if("preprocessor"===n.type){var o=n.data.match(/\#define\s+SHADER_NAME(_B64)?\s+(.+)$/);if(o&&o[2]){var s=o[1],l=o[2];return(s?a(l):l).trim()}}}}var i=t("glsl-tokenizer"),a=t("atob-lite");e.exports=n},{"atob-lite":48,"glsl-tokenizer":286}],280:[function(t,e,r){function n(t){function e(t){t.length&&V.push({type:M[B],data:t,position:G,line:H,column:q})}function r(t){j=0,X+=t,F=X.length;for(var e;O=X[j],j<F;){switch(e=j,B){case h:j=E();break;case f:j=S();break;case d:j=T();break;case p:j=L();break;case m:j=z();break;case w:j=I();break;case g:j=D();break;case c:j=P();break;case x:j=A();break;case u:j=k()}if(e!==j)switch(X[e]){case"\n":q=0,++H;break;default:++q}}return N+=j,X=X.slice(j),V}function n(t){return U.length&&e(U.join("")),B=_,e("(eof)"),V}function k(){return U=U.length?[]:U,"/"===R&&"*"===O?(G=N+j-1,B=h,R=O,j+1):"/"===R&&"/"===O?(G=N+j-1,B=f,R=O,j+1):"#"===O?(B=d,G=N+j,j):/\s/.test(O)?(B=x,G=N+j,j):(Y=/\d/.test(O),W=/[^\w_]/.test(O),G=N+j,B=Y?m:W?p:c,j)}function A(){return/[^\s]/g.test(O)?(e(U.join("")),B=u,j):(U.push(O),R=O,j+1)}function T(){return"\r"!==O&&"\n"!==O||"\\"===R?(U.push(O),R=O,j+1):(e(U.join("")),B=u,j)}function S(){return T()}function E(){return"/"===O&&"*"===R?(U.push(O),e(U.join("")),B=u,j+1):(U.push(O),R=O,j+1)}function L(){if("."===R&&/\d/.test(O))return B=g,j;if("/"===R&&"*"===O)return B=h,j;if("/"===R&&"/"===O)return B=f,j;if("."===O&&U.length){for(;C(U););return B=g,j}if(";"===O||")"===O||"("===O){if(U.length)for(;C(U););return e(O),B=u,j+1}var t=2===U.length&&"="!==O;if(/[\w_\d\s]/.test(O)||t){for(;C(U););return B=u,j}return U.push(O),R=O,j+1}function C(t){for(var r,n,i=0;;){if(r=a.indexOf(t.slice(0,t.length+i).join("")),n=a[r],-1===r){if(i--+t.length>0)continue;n=t.slice(0,1).join("")}return e(n),G+=n.length,U=U.slice(n.length),U.length}}function I(){return/[^a-fA-F0-9]/.test(O)?(e(U.join("")),B=u,j):(U.push(O),R=O,j+1)}function z(){return"."===O?(U.push(O),B=g,R=O,j+1):/[eE]/.test(O)?(U.push(O),B=g,R=O,j+1):"x"===O&&1===U.length&&"0"===U[0]?(B=w,U.push(O),R=O,j+1):/[^\d]/.test(O)?(e(U.join("")),B=u,j):(U.push(O),R=O,j+1)}function D(){return"f"===O&&(U.push(O),R=O,j+=1),/[eE]/.test(O)?(U.push(O),R=O,j+1):"-"===O&&/[eE]/.test(R)?(U.push(O),R=O,j+1):/[^\d]/.test(O)?(e(U.join("")),B=u,j):(U.push(O),R=O,j+1)}function P(){if(/[^\d\w_]/.test(O)){var t=U.join("");return B=J.indexOf(t)>-1?b:Z.indexOf(t)>-1?y:v,e(U.join("")),B=u,j}return U.push(O),R=O,j+1}var O,R,F,j=0,N=0,B=u,U=[],V=[],H=1,q=0,G=0,Y=!1,W=!1,X="";t=t||{};var Z=o,J=i;return"300 es"===t.version&&(Z=l,J=s),function(t){return V=[],null!==t?r(t.replace?t.replace(/\r\n/g,"\n"):t):n()}}e.exports=n;var i=t("./lib/literals"),a=t("./lib/operators"),o=t("./lib/builtins"),s=t("./lib/literals-300es"),l=t("./lib/builtins-300es"),u=999,c=9999,h=0,f=1,d=2,p=3,m=4,g=5,v=6,y=7,b=8,x=9,_=10,w=11,M=["block-comment","line-comment","preprocessor","operator","integer","float","ident","builtin","keyword","whitespace","eof","integer"]},{"./lib/builtins":282,"./lib/builtins-300es":281,"./lib/literals":284,"./lib/literals-300es":283,"./lib/operators":285}],281:[function(t,e,r){var n=t("./builtins");n=n.slice().filter(function(t){return!/^(gl\_|texture)/.test(t)}),e.exports=n.concat(["gl_VertexID","gl_InstanceID","gl_Position","gl_PointSize","gl_FragCoord","gl_FrontFacing","gl_FragDepth","gl_PointCoord","gl_MaxVertexAttribs","gl_MaxVertexUniformVectors","gl_MaxVertexOutputVectors","gl_MaxFragmentInputVectors","gl_MaxVertexTextureImageUnits","gl_MaxCombinedTextureImageUnits","gl_MaxTextureImageUnits","gl_MaxFragmentUniformVectors","gl_MaxDrawBuffers","gl_MinProgramTexelOffset","gl_MaxProgramTexelOffset","gl_DepthRangeParameters","gl_DepthRange","trunc","round","roundEven","isnan","isinf","floatBitsToInt","floatBitsToUint","intBitsToFloat","uintBitsToFloat","packSnorm2x16","unpackSnorm2x16","packUnorm2x16","unpackUnorm2x16","packHalf2x16","unpackHalf2x16","outerProduct","transpose","determinant","inverse","texture","textureSize","textureProj","textureLod","textureOffset","texelFetch","texelFetchOffset","textureProjOffset","textureLodOffset","textureProjLod","textureProjLodOffset","textureGrad","textureGradOffset","textureProjGrad","textureProjGradOffset"])},{"./builtins":282}],282:[function(t,e,r){
e.exports=["abs","acos","all","any","asin","atan","ceil","clamp","cos","cross","dFdx","dFdy","degrees","distance","dot","equal","exp","exp2","faceforward","floor","fract","gl_BackColor","gl_BackLightModelProduct","gl_BackLightProduct","gl_BackMaterial","gl_BackSecondaryColor","gl_ClipPlane","gl_ClipVertex","gl_Color","gl_DepthRange","gl_DepthRangeParameters","gl_EyePlaneQ","gl_EyePlaneR","gl_EyePlaneS","gl_EyePlaneT","gl_Fog","gl_FogCoord","gl_FogFragCoord","gl_FogParameters","gl_FragColor","gl_FragCoord","gl_FragData","gl_FragDepth","gl_FragDepthEXT","gl_FrontColor","gl_FrontFacing","gl_FrontLightModelProduct","gl_FrontLightProduct","gl_FrontMaterial","gl_FrontSecondaryColor","gl_LightModel","gl_LightModelParameters","gl_LightModelProducts","gl_LightProducts","gl_LightSource","gl_LightSourceParameters","gl_MaterialParameters","gl_MaxClipPlanes","gl_MaxCombinedTextureImageUnits","gl_MaxDrawBuffers","gl_MaxFragmentUniformComponents","gl_MaxLights","gl_MaxTextureCoords","gl_MaxTextureImageUnits","gl_MaxTextureUnits","gl_MaxVaryingFloats","gl_MaxVertexAttribs","gl_MaxVertexTextureImageUnits","gl_MaxVertexUniformComponents","gl_ModelViewMatrix","gl_ModelViewMatrixInverse","gl_ModelViewMatrixInverseTranspose","gl_ModelViewMatrixTranspose","gl_ModelViewProjectionMatrix","gl_ModelViewProjectionMatrixInverse","gl_ModelViewProjectionMatrixInverseTranspose","gl_ModelViewProjectionMatrixTranspose","gl_MultiTexCoord0","gl_MultiTexCoord1","gl_MultiTexCoord2","gl_MultiTexCoord3","gl_MultiTexCoord4","gl_MultiTexCoord5","gl_MultiTexCoord6","gl_MultiTexCoord7","gl_Normal","gl_NormalMatrix","gl_NormalScale","gl_ObjectPlaneQ","gl_ObjectPlaneR","gl_ObjectPlaneS","gl_ObjectPlaneT","gl_Point","gl_PointCoord","gl_PointParameters","gl_PointSize","gl_Position","gl_ProjectionMatrix","gl_ProjectionMatrixInverse","gl_ProjectionMatrixInverseTranspose","gl_ProjectionMatrixTranspose","gl_SecondaryColor","gl_TexCoord","gl_TextureEnvColor","gl_TextureMatrix","gl_TextureMatrixInverse","gl_TextureMatrixInverseTranspose","gl_TextureMatrixTranspose","gl_Vertex","greaterThan","greaterThanEqual","inversesqrt","length","lessThan","lessThanEqual","log","log2","matrixCompMult","max","min","mix","mod","normalize","not","notEqual","pow","radians","reflect","refract","sign","sin","smoothstep","sqrt","step","tan","texture2D","texture2DLod","texture2DProj","texture2DProjLod","textureCube","textureCubeLod","texture2DLodEXT","texture2DProjLodEXT","textureCubeLodEXT","texture2DGradEXT","texture2DProjGradEXT","textureCubeGradEXT"]},{}],283:[function(t,e,r){var n=t("./literals");e.exports=n.slice().concat(["layout","centroid","smooth","case","mat2x2","mat2x3","mat2x4","mat3x2","mat3x3","mat3x4","mat4x2","mat4x3","mat4x4","uint","uvec2","uvec3","uvec4","samplerCubeShadow","sampler2DArray","sampler2DArrayShadow","isampler2D","isampler3D","isamplerCube","isampler2DArray","usampler2D","usampler3D","usamplerCube","usampler2DArray","coherent","restrict","readonly","writeonly","resource","atomic_uint","noperspective","patch","sample","subroutine","common","partition","active","filter","image1D","image2D","image3D","imageCube","iimage1D","iimage2D","iimage3D","iimageCube","uimage1D","uimage2D","uimage3D","uimageCube","image1DArray","image2DArray","iimage1DArray","iimage2DArray","uimage1DArray","uimage2DArray","image1DShadow","image2DShadow","image1DArrayShadow","image2DArrayShadow","imageBuffer","iimageBuffer","uimageBuffer","sampler1DArray","sampler1DArrayShadow","isampler1D","isampler1DArray","usampler1D","usampler1DArray","isampler2DRect","usampler2DRect","samplerBuffer","isamplerBuffer","usamplerBuffer","sampler2DMS","isampler2DMS","usampler2DMS","sampler2DMSArray","isampler2DMSArray","usampler2DMSArray"])},{"./literals":284}],284:[function(t,e,r){e.exports=["precision","highp","mediump","lowp","attribute","const","uniform","varying","break","continue","do","for","while","if","else","in","out","inout","float","int","void","bool","true","false","discard","return","mat2","mat3","mat4","vec2","vec3","vec4","ivec2","ivec3","ivec4","bvec2","bvec3","bvec4","sampler1D","sampler2D","sampler3D","samplerCube","sampler1DShadow","sampler2DShadow","struct","asm","class","union","enum","typedef","template","this","packed","goto","switch","default","inline","noinline","volatile","public","static","extern","external","interface","long","short","double","half","fixed","unsigned","input","output","hvec2","hvec3","hvec4","dvec2","dvec3","dvec4","fvec2","fvec3","fvec4","sampler2DRect","sampler3DRect","sampler2DRectShadow","sizeof","cast","namespace","using"]},{}],285:[function(t,e,r){e.exports=["<<=",">>=","++","--","<<",">>","<=",">=","==","!=","&&","||","+=","-=","*=","/=","%=","&=","^^","^=","|=","(",")","[","]",".","!","~","*","/","%","+","-","<",">","&","^","|","?",":","=",",",";","{","}"]},{}],286:[function(t,e,r){function n(t,e){var r=i(e),n=[];return n=n.concat(r(t)),n=n.concat(r(null))}var i=t("./index");e.exports=n},{"./index":280}],287:[function(t,e,r){"use strict";function n(t,e,r){var n=this.cells=[];if(t instanceof ArrayBuffer){this.arrayBuffer=t;var a=new Int32Array(this.arrayBuffer);t=a[0],e=a[1],r=a[2],this.d=e+2*r;for(var o=0;o<this.d*this.d;o++){var s=a[i+o],l=a[i+o+1];n.push(s===l?null:a.subarray(s,l))}var u=a[i+n.length],c=a[i+n.length+1];this.keys=a.subarray(u,c),this.bboxes=a.subarray(c),this.insert=this._insertReadonly}else{this.d=e+2*r;for(var h=0;h<this.d*this.d;h++)n.push([]);this.keys=[],this.bboxes=[]}this.n=e,this.extent=t,this.padding=r,this.scale=e/t,this.uid=0;var f=r/e*t;this.min=-f,this.max=t+f}e.exports=n;var i=3;n.prototype.insert=function(t,e,r,n,i){this._forEachCell(e,r,n,i,this._insertCell,this.uid++),this.keys.push(t),this.bboxes.push(e),this.bboxes.push(r),this.bboxes.push(n),this.bboxes.push(i)},n.prototype._insertReadonly=function(){throw"Cannot insert into a GridIndex created from an ArrayBuffer."},n.prototype._insertCell=function(t,e,r,n,i,a){this.cells[i].push(a)},n.prototype.query=function(t,e,r,n){var i=this.min,a=this.max;if(t<=i&&e<=i&&a<=r&&a<=n)return Array.prototype.slice.call(this.keys);var o=[],s={};return this._forEachCell(t,e,r,n,this._queryCell,o,s),o},n.prototype._queryCell=function(t,e,r,n,i,a,o){var s=this.cells[i];if(null!==s)for(var l=this.keys,u=this.bboxes,c=0;c<s.length;c++){var h=s[c];if(void 0===o[h]){var f=4*h;t<=u[f+2]&&e<=u[f+3]&&r>=u[f+0]&&n>=u[f+1]?(o[h]=!0,a.push(l[h])):o[h]=!1}}},n.prototype._forEachCell=function(t,e,r,n,i,a,o){for(var s=this._convertToCellCoord(t),l=this._convertToCellCoord(e),u=this._convertToCellCoord(r),c=this._convertToCellCoord(n),h=s;h<=u;h++)for(var f=l;f<=c;f++){var d=this.d*f+h;if(i.call(this,t,e,r,n,d,a,o))return}},n.prototype._convertToCellCoord=function(t){return Math.max(0,Math.min(this.d-1,Math.floor(t*this.scale)+this.padding))},n.prototype.toArrayBuffer=function(){if(this.arrayBuffer)return this.arrayBuffer;for(var t=this.cells,e=i+this.cells.length+1+1,r=0,n=0;n<this.cells.length;n++)r+=this.cells[n].length;var a=new Int32Array(e+r+this.keys.length+this.bboxes.length);a[0]=this.extent,a[1]=this.n,a[2]=this.padding;for(var o=e,s=0;s<t.length;s++){var l=t[s];a[i+s]=o,a.set(l,o),o+=l.length}return a[i+t.length]=o,a.set(this.keys,o),o+=this.keys.length,a[i+t.length+1]=o,a.set(this.bboxes,o),o+=this.bboxes.length,a.buffer}},{}],288:[function(t,e,r){(function(r){"use strict";var n,i=t("is-browser");n="function"==typeof r.matchMedia?!r.matchMedia("(hover: none)").matches:i,e.exports=n}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"is-browser":294}],289:[function(t,e,r){r.read=function(t,e,r,n,i){var a,o,s=8*i-n-1,l=(1<<s)-1,u=l>>1,c=-7,h=r?i-1:0,f=r?-1:1,d=t[e+h];for(h+=f,a=d&(1<<-c)-1,d>>=-c,c+=s;c>0;a=256*a+t[e+h],h+=f,c-=8);for(o=a&(1<<-c)-1,a>>=-c,c+=n;c>0;o=256*o+t[e+h],h+=f,c-=8);if(0===a)a=1-u;else{if(a===l)return o?NaN:1/0*(d?-1:1);o+=Math.pow(2,n),a-=u}return(d?-1:1)*o*Math.pow(2,a-n)},r.write=function(t,e,r,n,i,a){var o,s,l,u=8*a-i-1,c=(1<<u)-1,h=c>>1,f=23===i?Math.pow(2,-24)-Math.pow(2,-77):0,d=n?0:a-1,p=n?1:-1,m=e<0||0===e&&1/e<0?1:0;for(e=Math.abs(e),isNaN(e)||e===1/0?(s=isNaN(e)?1:0,o=c):(o=Math.floor(Math.log(e)/Math.LN2),e*(l=Math.pow(2,-o))<1&&(o--,l*=2),e+=o+h>=1?f/l:f*Math.pow(2,1-h),e*l>=2&&(o++,l/=2),o+h>=c?(s=0,o=c):o+h>=1?(s=(e*l-1)*Math.pow(2,i),o+=h):(s=e*Math.pow(2,h-1)*Math.pow(2,i),o=0));i>=8;t[r+d]=255&s,d+=p,s/=256,i-=8);for(o=o<<i|s,u+=i;u>0;t[r+d]=255&o,d+=p,o/=256,u-=8);t[r+d-p]|=128*m}},{}],290:[function(t,e,r){"use strict";function n(t,e,r){this.vertices=t,this.adjacent=e,this.boundary=r,this.lastVisited=-1}function i(t,e,r){this.vertices=t,this.cell=e,this.index=r}function a(t,e){return c(t.vertices,e.vertices)}function o(t){for(var e=["function orient(){var tuple=this.tuple;return test("],r=0;r<=t;++r)r>0&&e.push(","),e.push("tuple[",r,"]");e.push(")}return orient");var n=new Function("test",e.join("")),i=u[t+1];return i||(i=u),n(i)}function s(t,e,r){this.dimension=t,this.vertices=e,this.simplices=r,this.interior=r.filter(function(t){return!t.boundary}),this.tuple=new Array(t+1);for(var n=0;n<=t;++n)this.tuple[n]=this.vertices[n];var i=h[t];i||(i=h[t]=o(t)),this.orient=i}function l(t,e){var r=t.length;if(0===r)throw new Error("Must have at least d+1 points");var i=t[0].length;if(r<=i)throw new Error("Must input at least d+1 points");var a=t.slice(0,i+1),o=u.apply(void 0,a);if(0===o)throw new Error("Input not in general position");for(var l=new Array(i+1),c=0;c<=i;++c)l[c]=c;o<0&&(l[0]=1,l[1]=0);for(var h=new n(l,new Array(i+1),!1),f=h.adjacent,d=new Array(i+2),c=0;c<=i;++c){for(var p=l.slice(),m=0;m<=i;++m)m===c&&(p[m]=-1);var g=p[0];p[0]=p[1],p[1]=g;var v=new n(p,new Array(i+1),!0);f[c]=v,d[c]=v}d[i+1]=h;for(var c=0;c<=i;++c)for(var p=f[c].vertices,y=f[c].adjacent,m=0;m<=i;++m){var b=p[m];if(b<0)y[m]=h;else for(var x=0;x<=i;++x)f[x].vertices.indexOf(b)<0&&(y[m]=f[x])}for(var _=new s(i,a,d),w=!!e,c=i+1;c<r;++c)_.insert(t[c],w);return _.boundary()}e.exports=l;var u=t("robust-orientation"),c=t("simplicial-complex").compareCells;n.prototype.flip=function(){var t=this.vertices[0];this.vertices[0]=this.vertices[1],this.vertices[1]=t;var e=this.adjacent[0];this.adjacent[0]=this.adjacent[1],this.adjacent[1]=e};var h=[],f=s.prototype;f.handleBoundaryDegeneracy=function(t,e){var r=this.dimension,n=this.vertices.length-1,i=this.tuple,a=this.vertices,o=[t];for(t.lastVisited=-n;o.length>0;){t=o.pop();for(var s=(t.vertices,t.adjacent),l=0;l<=r;++l){var u=s[l];if(u.boundary&&!(u.lastVisited<=-n)){for(var c=u.vertices,h=0;h<=r;++h){var f=c[h];i[h]=f<0?e:a[f]}var d=this.orient();if(d>0)return u;u.lastVisited=-n,0===d&&o.push(u)}}}return null},f.walk=function(t,e){var r=this.vertices.length-1,n=this.dimension,i=this.vertices,a=this.tuple,o=e?this.interior.length*Math.random()|0:this.interior.length-1,s=this.interior[o];t:for(;!s.boundary;){for(var l=s.vertices,u=s.adjacent,c=0;c<=n;++c)a[c]=i[l[c]];s.lastVisited=r;for(var c=0;c<=n;++c){var h=u[c];if(!(h.lastVisited>=r)){var f=a[c];a[c]=t;var d=this.orient();if(a[c]=f,d<0){s=h;continue t}h.boundary?h.lastVisited=-r:h.lastVisited=r}}return}return s},f.addPeaks=function(t,e){var r=this.vertices.length-1,o=this.dimension,s=this.vertices,l=this.tuple,u=this.interior,c=this.simplices,h=[e];e.lastVisited=r,e.vertices[e.vertices.indexOf(-1)]=r,e.boundary=!1,u.push(e);for(var f=[];h.length>0;){var e=h.pop(),d=e.vertices,p=e.adjacent,m=d.indexOf(r);if(!(m<0))for(var g=0;g<=o;++g)if(g!==m){var v=p[g];if(v.boundary&&!(v.lastVisited>=r)){var y=v.vertices;if(v.lastVisited!==-r){for(var b=0,x=0;x<=o;++x)y[x]<0?(b=x,l[x]=t):l[x]=s[y[x]];var _=this.orient();if(_>0){y[b]=r,v.boundary=!1,u.push(v),h.push(v),v.lastVisited=r;continue}v.lastVisited=-r}var w=v.adjacent,M=d.slice(),k=p.slice(),A=new n(M,k,!0);c.push(A);var T=w.indexOf(e);if(!(T<0)){w[T]=A,k[m]=v,M[g]=-1,k[g]=e,p[g]=A,A.flip();for(var x=0;x<=o;++x){var S=M[x];if(!(S<0||S===r)){for(var E=new Array(o-1),L=0,C=0;C<=o;++C){var I=M[C];I<0||C===x||(E[L++]=I)}f.push(new i(E,A,x))}}}}}}f.sort(a);for(var g=0;g+1<f.length;g+=2){var z=f[g],D=f[g+1],P=z.index,O=D.index;P<0||O<0||(z.cell.adjacent[z.index]=D.cell,D.cell.adjacent[D.index]=z.cell)}},f.insert=function(t,e){var r=this.vertices;r.push(t);var n=this.walk(t,e);if(n){for(var i=this.dimension,a=this.tuple,o=0;o<=i;++o){var s=n.vertices[o];a[o]=s<0?t:r[s]}var l=this.orient(a);l<0||(0!==l||(n=this.handleBoundaryDegeneracy(n,t)))&&this.addPeaks(t,n)}},f.boundary=function(){for(var t=this.dimension,e=[],r=this.simplices,n=r.length,i=0;i<n;++i){var a=r[i];if(a.boundary){for(var o=new Array(t),s=a.vertices,l=0,u=0,c=0;c<=t;++c)s[c]>=0?o[l++]=s[c]:u=1&c;if(u===(1&t)){var h=o[0];o[0]=o[1],o[1]=h}e.push(o)}}return e}},{"robust-orientation":508,"simplicial-complex":519}],291:[function(t,e,r){"use strict";function n(t,e,r,n,i){this.mid=t,this.left=e,this.right=r,this.leftPoints=n,this.rightPoints=i,this.count=(e?e.count:0)+(r?r.count:0)+n.length}function i(t,e){t.mid=e.mid,t.left=e.left,t.right=e.right,t.leftPoints=e.leftPoints,t.rightPoints=e.rightPoints,t.count=e.count}function a(t,e){var r=p(e);t.mid=r.mid,t.left=r.left,t.right=r.right,t.leftPoints=r.leftPoints,t.rightPoints=r.rightPoints,t.count=r.count}function o(t,e){var r=t.intervals([]);r.push(e),a(t,r)}function s(t,e){var r=t.intervals([]),n=r.indexOf(e);return n<0?y:(r.splice(n,1),a(t,r),b)}function l(t,e,r){for(var n=0;n<t.length&&t[n][0]<=e;++n){var i=r(t[n]);if(i)return i}}function u(t,e,r){for(var n=t.length-1;n>=0&&t[n][1]>=e;--n){var i=r(t[n]);if(i)return i}}function c(t,e){for(var r=0;r<t.length;++r){var n=e(t[r]);if(n)return n}}function h(t,e){return t-e}function f(t,e){var r=t[0]-e[0];return r||t[1]-e[1]}function d(t,e){var r=t[1]-e[1];return r||t[0]-e[0]}function p(t){if(0===t.length)return null;for(var e=[],r=0;r<t.length;++r)e.push(t[r][0],t[r][1]);e.sort(h);for(var i=e[e.length>>1],a=[],o=[],s=[],r=0;r<t.length;++r){var l=t[r];l[1]<i?a.push(l):i<l[0]?o.push(l):s.push(l)}var u=s,c=s.slice();return u.sort(f),c.sort(d),new n(i,p(a),p(o),u,c)}function m(t){this.root=t}function g(t){return new m(t&&0!==t.length?p(t):null)}var v=t("binary-search-bounds"),y=0,b=1;e.exports=g;var x=n.prototype;x.intervals=function(t){return t.push.apply(t,this.leftPoints),this.left&&this.left.intervals(t),this.right&&this.right.intervals(t),t},x.insert=function(t){var e=this.count-this.leftPoints.length;if(this.count+=1,t[1]<this.mid)this.left?4*(this.left.count+1)>3*(e+1)?o(this,t):this.left.insert(t):this.left=p([t]);else if(t[0]>this.mid)this.right?4*(this.right.count+1)>3*(e+1)?o(this,t):this.right.insert(t):this.right=p([t]);else{var r=v.ge(this.leftPoints,t,f),n=v.ge(this.rightPoints,t,d);this.leftPoints.splice(r,0,t),this.rightPoints.splice(n,0,t)}},x.remove=function(t){var e=this.count-this.leftPoints;if(t[1]<this.mid){if(!this.left)return y;if(4*(this.right?this.right.count:0)>3*(e-1))return s(this,t);var r=this.left.remove(t);return 2===r?(this.left=null,this.count-=1,b):(r===b&&(this.count-=1),r)}if(t[0]>this.mid){if(!this.right)return y;if(4*(this.left?this.left.count:0)>3*(e-1))return s(this,t);var r=this.right.remove(t);return 2===r?(this.right=null,this.count-=1,b):(r===b&&(this.count-=1),r)}if(1===this.count)return this.leftPoints[0]===t?2:y;if(1===this.leftPoints.length&&this.leftPoints[0]===t){if(this.left&&this.right){for(var n=this,a=this.left;a.right;)n=a,a=a.right;if(n===this)a.right=this.right;else{var o=this.left,r=this.right;n.count-=a.count,n.right=a.left,a.left=o,a.right=r}i(this,a),this.count=(this.left?this.left.count:0)+(this.right?this.right.count:0)+this.leftPoints.length}else this.left?i(this,this.left):i(this,this.right);return b}for(var o=v.ge(this.leftPoints,t,f);o<this.leftPoints.length&&this.leftPoints[o][0]===t[0];++o)if(this.leftPoints[o]===t){this.count-=1,this.leftPoints.splice(o,1);for(var r=v.ge(this.rightPoints,t,d);r<this.rightPoints.length&&this.rightPoints[r][1]===t[1];++r)if(this.rightPoints[r]===t)return this.rightPoints.splice(r,1),b}return y},x.queryPoint=function(t,e){if(t<this.mid){if(this.left){var r=this.left.queryPoint(t,e);if(r)return r}return l(this.leftPoints,t,e)}if(t>this.mid){if(this.right){var r=this.right.queryPoint(t,e);if(r)return r}return u(this.rightPoints,t,e)}return c(this.leftPoints,e)},x.queryInterval=function(t,e,r){if(t<this.mid&&this.left){var n=this.left.queryInterval(t,e,r);if(n)return n}if(e>this.mid&&this.right){var n=this.right.queryInterval(t,e,r);if(n)return n}return e<this.mid?l(this.leftPoints,e,r):t>this.mid?u(this.rightPoints,t,r):c(this.leftPoints,r)};var _=m.prototype;_.insert=function(t){this.root?this.root.insert(t):this.root=new n(t[0],null,null,[t],[t])},_.remove=function(t){if(this.root){var e=this.root.remove(t);return 2===e&&(this.root=null),e!==y}return!1},_.queryPoint=function(t,e){if(this.root)return this.root.queryPoint(t,e)},_.queryInterval=function(t,e,r){if(t<=e&&this.root)return this.root.queryInterval(t,e,r)},Object.defineProperty(_,"count",{get:function(){return this.root?this.root.count:0}}),Object.defineProperty(_,"intervals",{get:function(){return this.root?this.root.intervals([]):[]}})},{"binary-search-bounds":66}],292:[function(t,e,r){"use strict";function n(t,e){e=e||new Array(t.length);for(var r=0;r<t.length;++r)e[t[r]]=r;return e}e.exports=n},{}],293:[function(t,e,r){"use strict";function n(t){for(var e=new Array(t),r=0;r<t;++r)e[r]=r;return e}e.exports=n},{}],294:[function(t,e,r){e.exports=!0},{}],295:[function(t,e,r){function n(t){return!!t.constructor&&"function"==typeof t.constructor.isBuffer&&t.constructor.isBuffer(t)}function i(t){return"function"==typeof t.readFloatLE&&"function"==typeof t.slice&&n(t.slice(0,0))}e.exports=function(t){return null!=t&&(n(t)||i(t)||!!t._isBuffer)}},{}],296:[function(t,e,r){function n(t){return t||"undefined"==typeof navigator||(t=navigator.userAgent),t&&t.headers&&"string"==typeof t.headers["user-agent"]&&(t=t.headers["user-agent"]),"string"==typeof t&&(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(t)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(t.substr(0,4)))}e.exports=n},{}],297:[function(t,e,r){"use strict";var n=Object.prototype.toString;e.exports=function(t){var e;return"[object Object]"===n.call(t)&&(null===(e=Object.getPrototypeOf(t))||e===Object.getPrototypeOf({}))}},{}],298:[function(t,e,r){"use strict";function n(t,e,r,n,a){return new i(t,e,r,n,a)}function i(t,e,r,n,i){e=e||a,r=r||o,i=i||Array,this.nodeSize=n||64,this.points=t,this.ids=new i(t.length),this.coords=new i(2*t.length);for(var l=0;l<t.length;l++)this.ids[l]=l,this.coords[2*l]=e(t[l]),this.coords[2*l+1]=r(t[l]);s(this.ids,this.coords,this.nodeSize,0,this.ids.length-1,0)}function a(t){return t[0]}function o(t){return t[1]}var s=t("./sort"),l=t("./range"),u=t("./within");e.exports=n,i.prototype={range:function(t,e,r,n){return l(this.ids,this.coords,t,e,r,n,this.nodeSize)},within:function(t,e,r){return u(this.ids,this.coords,t,e,r,this.nodeSize)}}},{"./range":299,"./sort":300,"./within":301}],299:[function(t,e,r){"use strict";function n(t,e,r,n,i,a,o){for(var s,l,u=[0,t.length-1,0],c=[];u.length;){var h=u.pop(),f=u.pop(),d=u.pop();if(f-d<=o)for(var p=d;p<=f;p++)s=e[2*p],l=e[2*p+1],s>=r&&s<=i&&l>=n&&l<=a&&c.push(t[p]);else{var m=Math.floor((d+f)/2);s=e[2*m],l=e[2*m+1],s>=r&&s<=i&&l>=n&&l<=a&&c.push(t[m]);var g=(h+1)%2;(0===h?r<=s:n<=l)&&(u.push(d),u.push(m-1),u.push(g)),(0===h?i>=s:a>=l)&&(u.push(m+1),u.push(f),u.push(g))}}return c}e.exports=n},{}],300:[function(t,e,r){"use strict";function n(t,e,r,a,o,s){if(!(o-a<=r)){var l=Math.floor((a+o)/2);i(t,e,l,a,o,s%2),n(t,e,r,a,l-1,s+1),n(t,e,r,l+1,o,s+1)}}function i(t,e,r,n,o,s){for(;o>n;){if(o-n>600){var l=o-n+1,u=r-n+1,c=Math.log(l),h=.5*Math.exp(2*c/3),f=.5*Math.sqrt(c*h*(l-h)/l)*(u-l/2<0?-1:1);i(t,e,r,Math.max(n,Math.floor(r-u*h/l+f)),Math.min(o,Math.floor(r+(l-u)*h/l+f)),s)}var d=e[2*r+s],p=n,m=o;for(a(t,e,n,r),e[2*o+s]>d&&a(t,e,n,o);p<m;){for(a(t,e,p,m),p++,m--;e[2*p+s]<d;)p++;for(;e[2*m+s]>d;)m--}e[2*n+s]===d?a(t,e,n,m):(m++,a(t,e,m,o)),m<=r&&(n=m+1),r<=m&&(o=m-1)}}function a(t,e,r,n){o(t,r,n),o(e,2*r,2*n),o(e,2*r+1,2*n+1)}function o(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}e.exports=n},{}],301:[function(t,e,r){"use strict";function n(t,e,r,n,a,o){for(var s=[0,t.length-1,0],l=[],u=a*a;s.length;){var c=s.pop(),h=s.pop(),f=s.pop();if(h-f<=o)for(var d=f;d<=h;d++)i(e[2*d],e[2*d+1],r,n)<=u&&l.push(t[d]);else{var p=Math.floor((f+h)/2),m=e[2*p],g=e[2*p+1];i(m,g,r,n)<=u&&l.push(t[p]);var v=(c+1)%2;(0===c?r-a<=m:n-a<=g)&&(s.push(f),s.push(p-1),s.push(v)),(0===c?r+a>=m:n+a>=g)&&(s.push(p+1),s.push(h),s.push(v))}}return l}function i(t,e,r,n){var i=t-r,a=e-n;return i*i+a*a}e.exports=n},{}],302:[function(t,e,r){"use strict";function n(t,e){var r;if(h(t)){var l,u=t.stops&&"object"==typeof t.stops[0][0],c=u||void 0!==t.property,f=u||!c,d=t.type||e||"exponential";if("exponential"===d)l=o;else if("interval"===d)l=a;else if("categorical"===d)l=i;else{if("identity"!==d)throw new Error('Unknown function type "'+d+'"');l=s}if(u){for(var p={},m=[],g=0;g<t.stops.length;g++){var v=t.stops[g];void 0===p[v[0].zoom]&&(p[v[0].zoom]={zoom:v[0].zoom,type:t.type,property:t.property,stops:[]}),p[v[0].zoom].stops.push([v[0].value,v[1]])}for(var y in p)m.push([p[y].zoom,n(p[y])]);r=function(e,r){return o({stops:m,base:t.base},e)(e,r)},r.isFeatureConstant=!1,r.isZoomConstant=!1}else f?(r=function(e){return l(t,e)},r.isFeatureConstant=!0,r.isZoomConstant=!1):(r=function(e,r){return l(t,r[t.property])},r.isFeatureConstant=!1,r.isZoomConstant=!0)}else r=function(){return t},r.isFeatureConstant=!0,r.isZoomConstant=!0;return r}function i(t,e){for(var r=0;r<t.stops.length;r++)if(e===t.stops[r][0])return t.stops[r][1];return t.stops[0][1]}function a(t,e){for(var r=0;r<t.stops.length&&!(e<t.stops[r][0]);r++);return t.stops[Math.max(r-1,0)][1]}function o(t,e){for(var r=void 0!==t.base?t.base:1,n=0;;){if(n>=t.stops.length)break;if(e<=t.stops[n][0])break;n++}return 0===n?t.stops[n][1]:n===t.stops.length?t.stops[n-1][1]:l(e,r,t.stops[n-1][0],t.stops[n][0],t.stops[n-1][1],t.stops[n][1])}function s(t,e){return e}function l(t,e,r,n,i,a){return"function"==typeof i?function(){var o=i.apply(void 0,arguments),s=a.apply(void 0,arguments);return l(t,e,r,n,o,s)}:i.length?c(t,e,r,n,i,a):u(t,e,r,n,i,a)}function u(t,e,r,n,i,a){var o,s=n-r,l=t-r;return o=1===e?l/s:(Math.pow(e,l)-1)/(Math.pow(e,s)-1),i*(1-o)+a*o}function c(t,e,r,n,i,a){for(var o=[],s=0;s<i.length;s++)o[s]=u(t,e,r,n,i[s],a[s]);return o}function h(t){return"object"==typeof t&&(t.stops||"identity"===t.type)}e.exports.isFunctionDefinition=h,e.exports.interpolated=function(t){return n(t,"exponential")},e.exports["piecewise-constant"]=function(t){return n(t,"interval")}},{}],303:[function(t,e,r){t("path");e.exports={debug:{fragmentSource:"#ifdef GL_ES\nprecision mediump float;\n#else\n#define lowp\n#define mediump\n#define highp\n#endif\n\nuniform lowp vec4 u_color;\n\nvoid main() {\n gl_FragColor = u_color;\n}\n",vertexSource:"#ifdef GL_ES\nprecision highp float;\n#else\n#define lowp\n#define mediump\n#define highp\n#endif\n\nattribute vec2 a_pos;\n\nuniform mat4 u_matrix;\n\nvoid main() {\n gl_Position = u_matrix * vec4(a_pos, step(32767.0, a_pos.x), 1);\n}\n"},fill:{fragmentSource:"#ifdef GL_ES\nprecision mediump float;\n#else\n#define lowp\n#define mediump\n#define highp\n#endif\n\n#pragma mapbox: define lowp vec4 color\n#pragma mapbox: define lowp float opacity\n\nvoid main() {\n #pragma mapbox: initialize lowp vec4 color\n #pragma mapbox: initialize lowp float opacity\n\n gl_FragColor = color * opacity;\n\n#ifdef OVERDRAW_INSPECTOR\n gl_FragColor = vec4(1.0);\n#endif\n}\n",vertexSource:"#ifdef GL_ES\nprecision highp float;\n#else\n#define lowp\n#define mediump\n#define highp\n#endif\n\nattribute vec2 a_pos;\n\nuniform mat4 u_matrix;\n\n#pragma mapbox: define lowp vec4 color\n#pragma mapbox: define lowp float opacity\n\nvoid main() {\n #pragma mapbox: initialize lowp vec4 color\n #pragma mapbox: initialize lowp float opacity\n\n gl_Position = u_matrix * vec4(a_pos, 0, 1);\n}\n"},circle:{fragmentSource:"#ifdef GL_ES\nprecision mediump float;\n#else\n#define lowp\n#define mediump\n#define highp\n#endif\n\n#pragma mapbox: define lowp vec4 color\n#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\n\nvarying vec2 v_extrude;\nvarying lowp float v_antialiasblur;\n\nvoid main() {\n #pragma mapbox: initialize lowp vec4 color\n #pragma mapbox: initialize lowp float blur\n #pragma mapbox: initialize lowp float opacity\n\n float t = smoothstep(1.0 - max(blur, v_antialiasblur), 1.0, length(v_extrude));\n gl_FragColor = color * (1.0 - t) * opacity;\n\n#ifdef OVERDRAW_INSPECTOR\n gl_FragColor = vec4(1.0);\n#endif\n}\n",vertexSource:"#ifdef GL_ES\nprecision highp float;\n#else\n#define lowp\n#define mediump\n#define highp\n#endif\n\nuniform mat4 u_matrix;\nuniform bool u_scale_with_map;\nuniform vec2 u_extrude_scale;\nuniform float u_devicepixelratio;\n\nattribute vec2 a_pos;\n\n#pragma mapbox: define lowp vec4 color\n#pragma mapbox: define mediump float radius\n#pragma mapbox: define lowp float blur\n#pragma mapbox: define lowp float opacity\n\nvarying vec2 v_extrude;\nvarying lowp float v_antialiasblur;\n\nvoid main(void) {\n #pragma mapbox: initialize lowp vec4 color\n #pragma mapbox: initialize mediump float radius\n #pragma mapbox: initialize lowp float blur\n #pragma mapbox: initialize lowp float opacity\n\n // unencode the extrusion vector that we snuck into the a_pos vector\n v_extrude = vec2(mod(a_pos, 2.0) * 2.0 - 1.0);\n\n vec2 extrude = v_extrude * radius * u_extrude_scale;\n // multiply a_pos by 0.5, since we had it * 2 in order to sneak\n // in extrusion data\n gl_Position = u_matrix * vec4(floor(a_pos * 0.5), 0, 1);\n\n if (u_scale_with_map) {\n gl_Position.xy += extrude;\n } else {\n gl_Position.xy += extrude * gl_Position.w;\n }\n\n // This is a minimum blur distance that serves as a faux-antialiasing for\n // the circle. since blur is a ratio of the circle's size and the intent is\n // to keep the blur at roughly 1px, the two are inversely related.\n v_antialiasblur = 1.0 / u_devicepixelratio / radius;\n}\n"},line:{fragmentSource:"#ifdef GL_ES\nprecision mediump float;\n#else\n#define lowp\n#define mediump\n#define highp\n#endif\n\nuniform lowp vec4 u_color;\nuniform lowp float u_opacity;\nuniform float u_blur;\n\nvarying vec2 v_linewidth;\nvarying vec2 v_normal;\nvarying float v_gamma_scale;\n\nvoid main() {\n // Calculate the distance of the pixel from the line in pixels.\n float dist = length(v_normal) * v_linewidth.s;\n\n // Calculate the antialiasing fade factor. This is either when fading in\n // the line in case of an offset line (v_linewidth.t) or when fading out\n // (v_linewidth.s)\n float blur = u_blur * v_gamma_scale;\n float alpha = clamp(min(dist - (v_linewidth.t - blur), v_linewidth.s - dist) / blur, 0.0, 1.0);\n\n gl_FragColor = u_color * (alpha * u_opacity);\n\n#ifdef OVERDRAW_INSPECTOR\n gl_FragColor = vec4(1.0);\n#endif\n}\n",vertexSource:"#ifdef GL_ES\nprecision highp float;\n#else\n#define lowp\n#define mediump\n#define highp\n#endif\n\n// floor(127 / 2) == 63.0\n// the maximum allowed miter limit is 2.0 at the moment. the extrude normal is\n// stored in a byte (-128..127). we scale regular normals up to length 63, but\n// there are also \"special\" normals that have a bigger length (of up to 126 in\n// this case).\n// #define scale 63.0\n#define scale 0.015873016\n\nattribute vec2 a_pos;\nattribute vec4 a_data;\n\nuniform mat4 u_matrix;\nuniform mediump float u_ratio;\nuniform mediump float u_linewidth;\nuniform mediump float u_gapwidth;\nuniform mediump float u_antialiasing;\nuniform mediump float u_extra;\nuniform mat2 u_antialiasingmatrix;\nuniform mediump float u_offset;\nuniform mediump float u_blur;\n\nvarying vec2 v_normal;\nvarying vec2 v_linewidth;\nvarying float v_gamma_scale;\n\nvoid main() {\n vec2 a_extrude = a_data.xy - 128.0;\n float a_direction = mod(a_data.z, 4.0) - 1.0;\n\n // We store the texture normals in the most insignificant bit\n // transform y so that 0 => -1 and 1 => 1\n // In the texture normal, x is 0 if the normal points straight up/down and 1 if it's a round cap\n // y is 1 if the normal points up, and -1 if it points down\n mediump vec2 normal = mod(a_pos, 2.0);\n normal.y = sign(normal.y - 0.5);\n v_normal = normal;\n\n float inset = u_gapwidth + (u_gapwidth > 0.0 ? u_antialiasing : 0.0);\n float outset = u_gapwidth + u_linewidth * (u_gapwidth > 0.0 ? 2.0 : 1.0) + u_antialiasing;\n\n // Scale the extrusion vector down to a normal and then up by the line width\n // of this vertex.\n mediump vec2 dist = outset * a_extrude * scale;\n\n // Calculate the offset when drawing a line that is to the side of the actual line.\n // We do this by creating a vector that points towards the extrude, but rotate\n // it when we're drawing round end points (a_direction = -1 or 1) since their\n // extrude vector points in another direction.\n mediump float u = 0.5 * a_direction;\n mediump float t = 1.0 - abs(u);\n mediump vec2 offset = u_offset * a_extrude * scale * normal.y * mat2(t, -u, u, t);\n\n // Remove the texture normal bit of the position before scaling it with the\n // model/view matrix.\n gl_Position = u_matrix * vec4(floor(a_pos * 0.5) + (offset + dist) / u_ratio, 0.0, 1.0);\n\n // position of y on the screen\n float y = gl_Position.y / gl_Position.w;\n\n // how much features are squished in the y direction by the tilt\n float squish_scale = length(a_extrude) / length(u_antialiasingmatrix * a_extrude);\n\n // how much features are squished in all directions by the perspectiveness\n float perspective_scale = 1.0 / (1.0 - min(y * u_extra, 0.9));\n\n v_linewidth = vec2(outset, inset);\n v_gamma_scale = perspective_scale * squish_scale;\n}\n"},linepattern:{
fragmentSource:"#ifdef GL_ES\nprecision mediump float;\n#else\n#define lowp\n#define mediump\n#define highp\n#endif\n\nuniform float u_blur;\n\nuniform vec2 u_pattern_size_a;\nuniform vec2 u_pattern_size_b;\nuniform vec2 u_pattern_tl_a;\nuniform vec2 u_pattern_br_a;\nuniform vec2 u_pattern_tl_b;\nuniform vec2 u_pattern_br_b;\nuniform float u_fade;\nuniform float u_opacity;\n\nuniform sampler2D u_image;\n\nvarying vec2 v_normal;\nvarying vec2 v_linewidth;\nvarying float v_linesofar;\nvarying float v_gamma_scale;\n\nvoid main() {\n // Calculate the distance of the pixel from the line in pixels.\n float dist = length(v_normal) * v_linewidth.s;\n\n // Calculate the antialiasing fade factor. This is either when fading in\n // the line in case of an offset line (v_linewidth.t) or when fading out\n // (v_linewidth.s)\n float blur = u_blur * v_gamma_scale;\n float alpha = clamp(min(dist - (v_linewidth.t - blur), v_linewidth.s - dist) / blur, 0.0, 1.0);\n\n float x_a = mod(v_linesofar / u_pattern_size_a.x, 1.0);\n float x_b = mod(v_linesofar / u_pattern_size_b.x, 1.0);\n float y_a = 0.5 + (v_normal.y * v_linewidth.s / u_pattern_size_a.y);\n float y_b = 0.5 + (v_normal.y * v_linewidth.s / u_pattern_size_b.y);\n vec2 pos_a = mix(u_pattern_tl_a, u_pattern_br_a, vec2(x_a, y_a));\n vec2 pos_b = mix(u_pattern_tl_b, u_pattern_br_b, vec2(x_b, y_b));\n\n vec4 color = mix(texture2D(u_image, pos_a), texture2D(u_image, pos_b), u_fade);\n\n alpha *= u_opacity;\n\n gl_FragColor = color * alpha;\n\n#ifdef OVERDRAW_INSPECTOR\n gl_FragColor = vec4(1.0);\n#endif\n}\n",vertexSource:"#ifdef GL_ES\nprecision highp float;\n#else\n#define lowp\n#define mediump\n#define highp\n#endif\n\n// floor(127 / 2) == 63.0\n// the maximum allowed miter limit is 2.0 at the moment. the extrude normal is\n// stored in a byte (-128..127). we scale regular normals up to length 63, but\n// there are also \"special\" normals that have a bigger length (of up to 126 in\n// this case).\n// #define scale 63.0\n#define scale 0.015873016\n\n// We scale the distance before adding it to the buffers so that we can store\n// long distances for long segments. Use this value to unscale the distance.\n#define LINE_DISTANCE_SCALE 2.0\n\nattribute vec2 a_pos;\nattribute vec4 a_data;\n\nuniform mat4 u_matrix;\nuniform mediump float u_ratio;\nuniform mediump float u_linewidth;\nuniform mediump float u_gapwidth;\nuniform mediump float u_antialiasing;\nuniform mediump float u_extra;\nuniform mat2 u_antialiasingmatrix;\nuniform mediump float u_offset;\n\nvarying vec2 v_normal;\nvarying vec2 v_linewidth;\nvarying float v_linesofar;\nvarying float v_gamma_scale;\n\nvoid main() {\n vec2 a_extrude = a_data.xy - 128.0;\n float a_direction = mod(a_data.z, 4.0) - 1.0;\n float a_linesofar = (floor(a_data.z / 4.0) + a_data.w * 64.0) * LINE_DISTANCE_SCALE;\n\n // We store the texture normals in the most insignificant bit\n // transform y so that 0 => -1 and 1 => 1\n // In the texture normal, x is 0 if the normal points straight up/down and 1 if it's a round cap\n // y is 1 if the normal points up, and -1 if it points down\n mediump vec2 normal = mod(a_pos, 2.0);\n normal.y = sign(normal.y - 0.5);\n v_normal = normal;\n\n float inset = u_gapwidth + (u_gapwidth > 0.0 ? u_antialiasing : 0.0);\n float outset = u_gapwidth + u_linewidth * (u_gapwidth > 0.0 ? 2.0 : 1.0) + u_antialiasing;\n\n // Scale the extrusion vector down to a normal and then up by the line width\n // of this vertex.\n mediump vec2 dist = outset * a_extrude * scale;\n\n // Calculate the offset when drawing a line that is to the side of the actual line.\n // We do this by creating a vector that points towards the extrude, but rotate\n // it when we're drawing round end points (a_direction = -1 or 1) since their\n // extrude vector points in another direction.\n mediump float u = 0.5 * a_direction;\n mediump float t = 1.0 - abs(u);\n mediump vec2 offset = u_offset * a_extrude * scale * normal.y * mat2(t, -u, u, t);\n\n // Remove the texture normal bit of the position before scaling it with the\n // model/view matrix.\n gl_Position = u_matrix * vec4(floor(a_pos * 0.5) + (offset + dist) / u_ratio, 0.0, 1.0);\n v_linesofar = a_linesofar;\n\n // position of y on the screen\n float y = gl_Position.y / gl_Position.w;\n\n // how much features are squished in the y direction by the tilt\n float squish_scale = length(a_extrude) / length(u_antialiasingmatrix * a_extrude);\n\n // how much features are squished in all directions by the perspectiveness\n float perspective_scale = 1.0 / (1.0 - min(y * u_extra, 0.9));\n\n v_linewidth = vec2(outset, inset);\n v_gamma_scale = perspective_scale * squish_scale;\n}\n"},linesdfpattern:{fragmentSource:"#ifdef GL_ES\nprecision mediump float;\n#else\n#define lowp\n#define mediump\n#define highp\n#endif\n\nuniform lowp vec4 u_color;\nuniform lowp float u_opacity;\n\nuniform float u_blur;\nuniform sampler2D u_image;\nuniform float u_sdfgamma;\nuniform float u_mix;\n\nvarying vec2 v_normal;\nvarying vec2 v_linewidth;\nvarying vec2 v_tex_a;\nvarying vec2 v_tex_b;\nvarying float v_gamma_scale;\n\nvoid main() {\n // Calculate the distance of the pixel from the line in pixels.\n float dist = length(v_normal) * v_linewidth.s;\n\n // Calculate the antialiasing fade factor. This is either when fading in\n // the line in case of an offset line (v_linewidth.t) or when fading out\n // (v_linewidth.s)\n float blur = u_blur * v_gamma_scale;\n float alpha = clamp(min(dist - (v_linewidth.t - blur), v_linewidth.s - dist) / blur, 0.0, 1.0);\n\n float sdfdist_a = texture2D(u_image, v_tex_a).a;\n float sdfdist_b = texture2D(u_image, v_tex_b).a;\n float sdfdist = mix(sdfdist_a, sdfdist_b, u_mix);\n alpha *= smoothstep(0.5 - u_sdfgamma, 0.5 + u_sdfgamma, sdfdist);\n\n gl_FragColor = u_color * (alpha * u_opacity);\n\n#ifdef OVERDRAW_INSPECTOR\n gl_FragColor = vec4(1.0);\n#endif\n}\n",vertexSource:"#ifdef GL_ES\nprecision highp float;\n#else\n#define lowp\n#define mediump\n#define highp\n#endif\n\n// floor(127 / 2) == 63.0\n// the maximum allowed miter limit is 2.0 at the moment. the extrude normal is\n// stored in a byte (-128..127). we scale regular normals up to length 63, but\n// there are also \"special\" normals that have a bigger length (of up to 126 in\n// this case).\n// #define scale 63.0\n#define scale 0.015873016\n\n// We scale the distance before adding it to the buffers so that we can store\n// long distances for long segments. Use this value to unscale the distance.\n#define LINE_DISTANCE_SCALE 2.0\n\nattribute vec2 a_pos;\nattribute vec4 a_data;\n\nuniform mat4 u_matrix;\nuniform mediump float u_ratio;\nuniform mediump float u_linewidth;\nuniform mediump float u_gapwidth;\nuniform mediump float u_antialiasing;\nuniform vec2 u_patternscale_a;\nuniform float u_tex_y_a;\nuniform vec2 u_patternscale_b;\nuniform float u_tex_y_b;\nuniform float u_extra;\nuniform mat2 u_antialiasingmatrix;\nuniform mediump float u_offset;\n\nvarying vec2 v_normal;\nvarying vec2 v_linewidth;\nvarying vec2 v_tex_a;\nvarying vec2 v_tex_b;\nvarying float v_gamma_scale;\n\nvoid main() {\n vec2 a_extrude = a_data.xy - 128.0;\n float a_direction = mod(a_data.z, 4.0) - 1.0;\n float a_linesofar = (floor(a_data.z / 4.0) + a_data.w * 64.0) * LINE_DISTANCE_SCALE;\n\n // We store the texture normals in the most insignificant bit\n // transform y so that 0 => -1 and 1 => 1\n // In the texture normal, x is 0 if the normal points straight up/down and 1 if it's a round cap\n // y is 1 if the normal points up, and -1 if it points down\n mediump vec2 normal = mod(a_pos, 2.0);\n normal.y = sign(normal.y - 0.5);\n v_normal = normal;\n\n float inset = u_gapwidth + (u_gapwidth > 0.0 ? u_antialiasing : 0.0);\n float outset = u_gapwidth + u_linewidth * (u_gapwidth > 0.0 ? 2.0 : 1.0) + u_antialiasing;\n\n // Scale the extrusion vector down to a normal and then up by the line width\n // of this vertex.\n mediump vec2 dist = outset * a_extrude * scale;\n\n // Calculate the offset when drawing a line that is to the side of the actual line.\n // We do this by creating a vector that points towards the extrude, but rotate\n // it when we're drawing round end points (a_direction = -1 or 1) since their\n // extrude vector points in another direction.\n mediump float u = 0.5 * a_direction;\n mediump float t = 1.0 - abs(u);\n mediump vec2 offset = u_offset * a_extrude * scale * normal.y * mat2(t, -u, u, t);\n\n // Remove the texture normal bit of the position before scaling it with the\n // model/view matrix.\n gl_Position = u_matrix * vec4(floor(a_pos * 0.5) + (offset + dist) / u_ratio, 0.0, 1.0);\n\n v_tex_a = vec2(a_linesofar * u_patternscale_a.x, normal.y * u_patternscale_a.y + u_tex_y_a);\n v_tex_b = vec2(a_linesofar * u_patternscale_b.x, normal.y * u_patternscale_b.y + u_tex_y_b);\n\n // position of y on the screen\n float y = gl_Position.y / gl_Position.w;\n\n // how much features are squished in the y direction by the tilt\n float squish_scale = length(a_extrude) / length(u_antialiasingmatrix * a_extrude);\n\n // how much features are squished in all directions by the perspectiveness\n float perspective_scale = 1.0 / (1.0 - min(y * u_extra, 0.9));\n\n v_linewidth = vec2(outset, inset);\n v_gamma_scale = perspective_scale * squish_scale;\n}\n"},outline:{fragmentSource:"#ifdef GL_ES\nprecision mediump float;\n#else\n#define lowp\n#define mediump\n#define highp\n#endif\n\n#pragma mapbox: define lowp vec4 outline_color\n#pragma mapbox: define lowp float opacity\n\nvarying vec2 v_pos;\n\nvoid main() {\n #pragma mapbox: initialize lowp vec4 outline_color\n #pragma mapbox: initialize lowp float opacity\n\n float dist = length(v_pos - gl_FragCoord.xy);\n float alpha = smoothstep(1.0, 0.0, dist);\n gl_FragColor = outline_color * (alpha * opacity);\n\n#ifdef OVERDRAW_INSPECTOR\n gl_FragColor = vec4(1.0);\n#endif\n}\n",vertexSource:"#ifdef GL_ES\nprecision highp float;\n#else\n#define lowp\n#define mediump\n#define highp\n#endif\n\nattribute vec2 a_pos;\n\nuniform mat4 u_matrix;\nuniform vec2 u_world;\n\nvarying vec2 v_pos;\n\n#pragma mapbox: define lowp vec4 outline_color\n#pragma mapbox: define lowp float opacity\n\nvoid main() {\n #pragma mapbox: initialize lowp vec4 outline_color\n #pragma mapbox: initialize lowp float opacity\n\n gl_Position = u_matrix * vec4(a_pos, 0, 1);\n v_pos = (gl_Position.xy / gl_Position.w + 1.0) / 2.0 * u_world;\n}\n"},outlinepattern:{fragmentSource:"#ifdef GL_ES\nprecision mediump float;\n#else\n#define lowp\n#define mediump\n#define highp\n#endif\n\nuniform float u_opacity;\nuniform vec2 u_pattern_tl_a;\nuniform vec2 u_pattern_br_a;\nuniform vec2 u_pattern_tl_b;\nuniform vec2 u_pattern_br_b;\nuniform float u_mix;\n\nuniform sampler2D u_image;\n\nvarying vec2 v_pos_a;\nvarying vec2 v_pos_b;\nvarying vec2 v_pos;\n\nvoid main() {\n vec2 imagecoord = mod(v_pos_a, 1.0);\n vec2 pos = mix(u_pattern_tl_a, u_pattern_br_a, imagecoord);\n vec4 color1 = texture2D(u_image, pos);\n\n vec2 imagecoord_b = mod(v_pos_b, 1.0);\n vec2 pos2 = mix(u_pattern_tl_b, u_pattern_br_b, imagecoord_b);\n vec4 color2 = texture2D(u_image, pos2);\n\n // find distance to outline for alpha interpolation\n\n float dist = length(v_pos - gl_FragCoord.xy);\n float alpha = smoothstep(1.0, 0.0, dist);\n \n\n gl_FragColor = mix(color1, color2, u_mix) * alpha * u_opacity;\n\n#ifdef OVERDRAW_INSPECTOR\n gl_FragColor = vec4(1.0);\n#endif\n}\n",vertexSource:"#ifdef GL_ES\nprecision highp float;\n#else\n#define lowp\n#define mediump\n#define highp\n#endif\n\nuniform vec2 u_pattern_size_a;\nuniform vec2 u_pattern_size_b;\nuniform vec2 u_pixel_coord_upper;\nuniform vec2 u_pixel_coord_lower;\nuniform float u_scale_a;\nuniform float u_scale_b;\nuniform float u_tile_units_to_pixels;\n\nattribute vec2 a_pos;\n\nuniform mat4 u_matrix;\nuniform vec2 u_world;\n\nvarying vec2 v_pos_a;\nvarying vec2 v_pos_b;\nvarying vec2 v_pos;\n\nvoid main() {\n gl_Position = u_matrix * vec4(a_pos, 0, 1);\n vec2 scaled_size_a = u_scale_a * u_pattern_size_a;\n vec2 scaled_size_b = u_scale_b * u_pattern_size_b;\n\n // the correct offset needs to be calculated.\n //\n // The offset depends on how many pixels are between the world origin and\n // the edge of the tile:\n // vec2 offset = mod(pixel_coord, size)\n //\n // At high zoom levels there are a ton of pixels between the world origin\n // and the edge of the tile. The glsl spec only guarantees 16 bits of\n // precision for highp floats. We need more than that.\n //\n // The pixel_coord is passed in as two 16 bit values:\n // pixel_coord_upper = floor(pixel_coord / 2^16)\n // pixel_coord_lower = mod(pixel_coord, 2^16)\n //\n // The offset is calculated in a series of steps that should preserve this precision:\n vec2 offset_a = mod(mod(mod(u_pixel_coord_upper, scaled_size_a) * 256.0, scaled_size_a) * 256.0 + u_pixel_coord_lower, scaled_size_a);\n vec2 offset_b = mod(mod(mod(u_pixel_coord_upper, scaled_size_b) * 256.0, scaled_size_b) * 256.0 + u_pixel_coord_lower, scaled_size_b);\n\n v_pos_a = (u_tile_units_to_pixels * a_pos + offset_a) / scaled_size_a;\n v_pos_b = (u_tile_units_to_pixels * a_pos + offset_b) / scaled_size_b;\n\n v_pos = (gl_Position.xy / gl_Position.w + 1.0) / 2.0 * u_world;\n}\n"},pattern:{fragmentSource:"#ifdef GL_ES\nprecision mediump float;\n#else\n#define lowp\n#define mediump\n#define highp\n#endif\n\nuniform float u_opacity;\nuniform vec2 u_pattern_tl_a;\nuniform vec2 u_pattern_br_a;\nuniform vec2 u_pattern_tl_b;\nuniform vec2 u_pattern_br_b;\nuniform float u_mix;\n\nuniform sampler2D u_image;\n\nvarying vec2 v_pos_a;\nvarying vec2 v_pos_b;\n\nvoid main() {\n\n vec2 imagecoord = mod(v_pos_a, 1.0);\n vec2 pos = mix(u_pattern_tl_a, u_pattern_br_a, imagecoord);\n vec4 color1 = texture2D(u_image, pos);\n\n vec2 imagecoord_b = mod(v_pos_b, 1.0);\n vec2 pos2 = mix(u_pattern_tl_b, u_pattern_br_b, imagecoord_b);\n vec4 color2 = texture2D(u_image, pos2);\n\n gl_FragColor = mix(color1, color2, u_mix) * u_opacity;\n\n#ifdef OVERDRAW_INSPECTOR\n gl_FragColor = vec4(1.0);\n#endif\n}\n",vertexSource:"#ifdef GL_ES\nprecision highp float;\n#else\n#define lowp\n#define mediump\n#define highp\n#endif\n\nuniform mat4 u_matrix;\nuniform vec2 u_pattern_size_a;\nuniform vec2 u_pattern_size_b;\nuniform vec2 u_pixel_coord_upper;\nuniform vec2 u_pixel_coord_lower;\nuniform float u_scale_a;\nuniform float u_scale_b;\nuniform float u_tile_units_to_pixels;\n\nattribute vec2 a_pos;\n\nvarying vec2 v_pos_a;\nvarying vec2 v_pos_b;\n\nvoid main() {\n gl_Position = u_matrix * vec4(a_pos, 0, 1);\n vec2 scaled_size_a = u_scale_a * u_pattern_size_a;\n vec2 scaled_size_b = u_scale_b * u_pattern_size_b;\n\n // the correct offset needs to be calculated.\n //\n // The offset depends on how many pixels are between the world origin and\n // the edge of the tile:\n // vec2 offset = mod(pixel_coord, size)\n //\n // At high zoom levels there are a ton of pixels between the world origin\n // and the edge of the tile. The glsl spec only guarantees 16 bits of\n // precision for highp floats. We need more than that.\n //\n // The pixel_coord is passed in as two 16 bit values:\n // pixel_coord_upper = floor(pixel_coord / 2^16)\n // pixel_coord_lower = mod(pixel_coord, 2^16)\n //\n // The offset is calculated in a series of steps that should preserve this precision:\n vec2 offset_a = mod(mod(mod(u_pixel_coord_upper, scaled_size_a) * 256.0, scaled_size_a) * 256.0 + u_pixel_coord_lower, scaled_size_a);\n vec2 offset_b = mod(mod(mod(u_pixel_coord_upper, scaled_size_b) * 256.0, scaled_size_b) * 256.0 + u_pixel_coord_lower, scaled_size_b);\n\n v_pos_a = (u_tile_units_to_pixels * a_pos + offset_a) / scaled_size_a;\n v_pos_b = (u_tile_units_to_pixels * a_pos + offset_b) / scaled_size_b;\n}\n"},raster:{fragmentSource:"#ifdef GL_ES\nprecision mediump float;\n#else\n#define lowp\n#define mediump\n#define highp\n#endif\n\nuniform float u_opacity0;\nuniform float u_opacity1;\nuniform sampler2D u_image0;\nuniform sampler2D u_image1;\nvarying vec2 v_pos0;\nvarying vec2 v_pos1;\n\nuniform float u_brightness_low;\nuniform float u_brightness_high;\n\nuniform float u_saturation_factor;\nuniform float u_contrast_factor;\nuniform vec3 u_spin_weights;\n\nvoid main() {\n\n // read and cross-fade colors from the main and parent tiles\n vec4 color0 = texture2D(u_image0, v_pos0);\n vec4 color1 = texture2D(u_image1, v_pos1);\n vec4 color = color0 * u_opacity0 + color1 * u_opacity1;\n vec3 rgb = color.rgb;\n\n // spin\n rgb = vec3(\n dot(rgb, u_spin_weights.xyz),\n dot(rgb, u_spin_weights.zxy),\n dot(rgb, u_spin_weights.yzx));\n\n // saturation\n float average = (color.r + color.g + color.b) / 3.0;\n rgb += (average - rgb) * u_saturation_factor;\n\n // contrast\n rgb = (rgb - 0.5) * u_contrast_factor + 0.5;\n\n // brightness\n vec3 u_high_vec = vec3(u_brightness_low, u_brightness_low, u_brightness_low);\n vec3 u_low_vec = vec3(u_brightness_high, u_brightness_high, u_brightness_high);\n\n gl_FragColor = vec4(mix(u_high_vec, u_low_vec, rgb), color.a);\n\n#ifdef OVERDRAW_INSPECTOR\n gl_FragColor = vec4(1.0);\n#endif\n}\n",vertexSource:"#ifdef GL_ES\nprecision highp float;\n#else\n#define lowp\n#define mediump\n#define highp\n#endif\n\nuniform mat4 u_matrix;\nuniform vec2 u_tl_parent;\nuniform float u_scale_parent;\nuniform float u_buffer_scale;\n\nattribute vec2 a_pos;\nattribute vec2 a_texture_pos;\n\nvarying vec2 v_pos0;\nvarying vec2 v_pos1;\n\nvoid main() {\n gl_Position = u_matrix * vec4(a_pos, 0, 1);\n v_pos0 = (((a_texture_pos / 32767.0) - 0.5) / u_buffer_scale ) + 0.5;\n v_pos1 = (v_pos0 * u_scale_parent) + u_tl_parent;\n}\n"},icon:{fragmentSource:"#ifdef GL_ES\nprecision mediump float;\n#else\n#define lowp\n#define mediump\n#define highp\n#endif\n\nuniform sampler2D u_texture;\nuniform sampler2D u_fadetexture;\nuniform lowp float u_opacity;\n\nvarying vec2 v_tex;\nvarying vec2 v_fade_tex;\n\nvoid main() {\n lowp float alpha = texture2D(u_fadetexture, v_fade_tex).a * u_opacity;\n gl_FragColor = texture2D(u_texture, v_tex) * alpha;\n\n#ifdef OVERDRAW_INSPECTOR\n gl_FragColor = vec4(1.0);\n#endif\n}\n",vertexSource:"#ifdef GL_ES\nprecision highp float;\n#else\n#define lowp\n#define mediump\n#define highp\n#endif\n\nattribute vec2 a_pos;\nattribute vec2 a_offset;\nattribute vec2 a_texture_pos;\nattribute vec4 a_data;\n\n\n// matrix is for the vertex position.\nuniform mat4 u_matrix;\n\nuniform mediump float u_zoom;\nuniform bool u_rotate_with_map;\nuniform vec2 u_extrude_scale;\n\nuniform vec2 u_texsize;\n\nvarying vec2 v_tex;\nvarying vec2 v_fade_tex;\n\nvoid main() {\n vec2 a_tex = a_texture_pos.xy;\n mediump float a_labelminzoom = a_data[0];\n mediump vec2 a_zoom = a_data.pq;\n mediump float a_minzoom = a_zoom[0];\n mediump float a_maxzoom = a_zoom[1];\n\n // u_zoom is the current zoom level adjusted for the change in font size\n mediump float z = 2.0 - step(a_minzoom, u_zoom) - (1.0 - step(a_maxzoom, u_zoom));\n\n vec2 extrude = u_extrude_scale * (a_offset / 64.0);\n if (u_rotate_with_map) {\n gl_Position = u_matrix * vec4(a_pos + extrude, 0, 1);\n gl_Position.z += z * gl_Position.w;\n } else {\n gl_Position = u_matrix * vec4(a_pos, 0, 1) + vec4(extrude, 0, 0);\n }\n\n v_tex = a_tex / u_texsize;\n v_fade_tex = vec2(a_labelminzoom / 255.0, 0.0);\n}\n"},sdf:{fragmentSource:"#ifdef GL_ES\nprecision mediump float;\n#else\n#define lowp\n#define mediump\n#define highp\n#endif\n\nuniform sampler2D u_texture;\nuniform sampler2D u_fadetexture;\nuniform lowp vec4 u_color;\nuniform lowp float u_opacity;\nuniform lowp float u_buffer;\nuniform lowp float u_gamma;\n\nvarying vec2 v_tex;\nvarying vec2 v_fade_tex;\nvarying float v_gamma_scale;\n\nvoid main() {\n lowp float dist = texture2D(u_texture, v_tex).a;\n lowp float fade_alpha = texture2D(u_fadetexture, v_fade_tex).a;\n lowp float gamma = u_gamma * v_gamma_scale;\n lowp float alpha = smoothstep(u_buffer - gamma, u_buffer + gamma, dist) * fade_alpha;\n\n gl_FragColor = u_color * (alpha * u_opacity);\n\n#ifdef OVERDRAW_INSPECTOR\n gl_FragColor = vec4(1.0);\n#endif\n}\n",vertexSource:"#ifdef GL_ES\nprecision highp float;\n#else\n#define lowp\n#define mediump\n#define highp\n#endif\n\nconst float PI = 3.141592653589793;\n\nattribute vec2 a_pos;\nattribute vec2 a_offset;\nattribute vec2 a_texture_pos;\nattribute vec4 a_data;\n\n\n// matrix is for the vertex position.\nuniform mat4 u_matrix;\n\nuniform mediump float u_zoom;\nuniform bool u_rotate_with_map;\nuniform bool u_pitch_with_map;\nuniform mediump float u_pitch;\nuniform mediump float u_bearing;\nuniform mediump float u_aspect_ratio;\nuniform vec2 u_extrude_scale;\n\nuniform vec2 u_texsize;\n\nvarying vec2 v_tex;\nvarying vec2 v_fade_tex;\nvarying float v_gamma_scale;\n\nvoid main() {\n vec2 a_tex = a_texture_pos.xy;\n mediump float a_labelminzoom = a_data[0];\n mediump vec2 a_zoom = a_data.pq;\n mediump float a_minzoom = a_zoom[0];\n mediump float a_maxzoom = a_zoom[1];\n\n // u_zoom is the current zoom level adjusted for the change in font size\n mediump float z = 2.0 - step(a_minzoom, u_zoom) - (1.0 - step(a_maxzoom, u_zoom));\n\n // pitch-alignment: map\n // rotation-alignment: map | viewport\n if (u_pitch_with_map) {\n lowp float angle = u_rotate_with_map ? (a_data[1] / 256.0 * 2.0 * PI) : u_bearing;\n lowp float asin = sin(angle);\n lowp float acos = cos(angle);\n mat2 RotationMatrix = mat2(acos, asin, -1.0 * asin, acos);\n vec2 offset = RotationMatrix * a_offset;\n vec2 extrude = u_extrude_scale * (offset / 64.0);\n gl_Position = u_matrix * vec4(a_pos + extrude, 0, 1);\n gl_Position.z += z * gl_Position.w;\n // pitch-alignment: viewport\n // rotation-alignment: map\n } else if (u_rotate_with_map) {\n // foreshortening factor to apply on pitched maps\n // as a label goes from horizontal <=> vertical in angle\n // it goes from 0% foreshortening to up to around 70% foreshortening\n lowp float pitchfactor = 1.0 - cos(u_pitch * sin(u_pitch * 0.75));\n\n lowp float lineangle = a_data[1] / 256.0 * 2.0 * PI;\n\n // use the lineangle to position points a,b along the line\n // project the points and calculate the label angle in projected space\n // this calculation allows labels to be rendered unskewed on pitched maps\n vec4 a = u_matrix * vec4(a_pos, 0, 1);\n vec4 b = u_matrix * vec4(a_pos + vec2(cos(lineangle),sin(lineangle)), 0, 1);\n lowp float angle = atan((b[1]/b[3] - a[1]/a[3])/u_aspect_ratio, b[0]/b[3] - a[0]/a[3]);\n lowp float asin = sin(angle);\n lowp float acos = cos(angle);\n mat2 RotationMatrix = mat2(acos, -1.0 * asin, asin, acos);\n\n vec2 offset = RotationMatrix * (vec2((1.0-pitchfactor)+(pitchfactor*cos(angle*2.0)), 1.0) * a_offset);\n vec2 extrude = u_extrude_scale * (offset / 64.0);\n gl_Position = u_matrix * vec4(a_pos, 0, 1) + vec4(extrude, 0, 0);\n gl_Position.z += z * gl_Position.w;\n // pitch-alignment: viewport\n // rotation-alignment: viewport\n } else {\n vec2 extrude = u_extrude_scale * (a_offset / 64.0);\n gl_Position = u_matrix * vec4(a_pos, 0, 1) + vec4(extrude, 0, 0);\n }\n\n v_gamma_scale = (gl_Position.w - 0.5);\n\n v_tex = a_tex / u_texsize;\n v_fade_tex = vec2(a_labelminzoom / 255.0, 0.0);\n}\n"},collisionbox:{fragmentSource:"#ifdef GL_ES\nprecision mediump float;\n#else\n#define lowp\n#define mediump\n#define highp\n#endif\n\nuniform float u_zoom;\nuniform float u_maxzoom;\n\nvarying float v_max_zoom;\nvarying float v_placement_zoom;\n\nvoid main() {\n\n float alpha = 0.5;\n\n gl_FragColor = vec4(0.0, 1.0, 0.0, 1.0) * alpha;\n\n if (v_placement_zoom > u_zoom) {\n gl_FragColor = vec4(1.0, 0.0, 0.0, 1.0) * alpha;\n }\n\n if (u_zoom >= v_max_zoom) {\n gl_FragColor = vec4(0.0, 0.0, 0.0, 1.0) * alpha * 0.25;\n }\n\n if (v_placement_zoom >= u_maxzoom) {\n gl_FragColor = vec4(0.0, 0.0, 1.0, 1.0) * alpha * 0.2;\n }\n}\n",vertexSource:"#ifdef GL_ES\nprecision highp float;\n#else\n#define lowp\n#define mediump\n#define highp\n#endif\n\nattribute vec2 a_pos;\nattribute vec2 a_extrude;\nattribute vec2 a_data;\n\nuniform mat4 u_matrix;\nuniform float u_scale;\n\nvarying float v_max_zoom;\nvarying float v_placement_zoom;\n\nvoid main() {\n gl_Position = u_matrix * vec4(a_pos + a_extrude / u_scale, 0.0, 1.0);\n\n v_max_zoom = a_data.x;\n v_placement_zoom = a_data.y;\n}\n"}},e.exports.util="float evaluate_zoom_function_1(const vec4 values, const float t) {\n if (t < 1.0) {\n return mix(values[0], values[1], t);\n } else if (t < 2.0) {\n return mix(values[1], values[2], t - 1.0);\n } else {\n return mix(values[2], values[3], t - 2.0);\n }\n}\nvec4 evaluate_zoom_function_4(const vec4 value0, const vec4 value1, const vec4 value2, const vec4 value3, const float t) {\n if (t < 1.0) {\n return mix(value0, value1, t);\n } else if (t < 2.0) {\n return mix(value1, value2, t - 1.0);\n } else {\n return mix(value2, value3, t - 2.0);\n }\n}\n"},{path:476}],304:[function(t,e,r){"use strict";function n(t,e){this.message=(t?t+": ":"")+i.apply(i,Array.prototype.slice.call(arguments,2)),null!==e&&void 0!==e&&e.__line__&&(this.line=e.__line__)}var i=t("util").format;e.exports=n},{util:549}],305:[function(t,e,r){"use strict";e.exports=function(t){for(var e=1;e<arguments.length;e++){var r=arguments[e];for(var n in r)t[n]=r[n]}return t}},{}],306:[function(t,e,r){"use strict";e.exports=function(t){return t instanceof Number?"number":t instanceof String?"string":t instanceof Boolean?"boolean":Array.isArray(t)?"array":null===t?"null":typeof t}},{}],307:[function(t,e,r){"use strict";e.exports=function(t){return t instanceof Number||t instanceof String||t instanceof Boolean?t.valueOf():t}},{}],308:[function(t,e,r){"use strict";var n=t("../error/validation_error"),i=t("../util/get_type"),a=t("../util/extend");e.exports=function(e){var r=t("./validate_function"),o=t("./validate_object"),s={"*":function(){return[]},array:t("./validate_array"),boolean:t("./validate_boolean"),number:t("./validate_number"),color:t("./validate_color"),constants:t("./validate_constants"),enum:t("./validate_enum"),filter:t("./validate_filter"),function:t("./validate_function"),layer:t("./validate_layer"),object:t("./validate_object"),source:t("./validate_source"),string:t("./validate_string")},l=e.value,u=e.valueSpec,c=e.key,h=e.styleSpec,f=e.style;if("string"===i(l)&&"@"===l[0]){if(h.$version>7)return[new n(c,l,"constants have been deprecated as of v8")];if(!(l in f.constants))return[new n(c,l,'constant "%s" not found',l)];e=a({},e,{value:f.constants[l]})}return u.function&&"object"===i(l)?r(e):u.type&&s[u.type]?s[u.type](e):o(a({},e,{valueSpec:u.type?h[u.type]:u}))}},{"../error/validation_error":304,"../util/extend":305,"../util/get_type":306,"./validate_array":309,"./validate_boolean":310,"./validate_color":311,"./validate_constants":312,"./validate_enum":313,"./validate_filter":314,"./validate_function":315,"./validate_layer":317,"./validate_number":319,"./validate_object":320,"./validate_source":322,"./validate_string":323}],309:[function(t,e,r){"use strict";var n=t("../util/get_type"),i=t("./validate"),a=t("../error/validation_error");e.exports=function(t){var e=t.value,r=t.valueSpec,o=t.style,s=t.styleSpec,l=t.key,u=t.arrayElementValidator||i;if("array"!==n(e))return[new a(l,e,"array expected, %s found",n(e))];if(r.length&&e.length!==r.length)return[new a(l,e,"array length %d expected, length %d found",r.length,e.length)];if(r["min-length"]&&e.length<r["min-length"])return[new a(l,e,"array length at least %d expected, length %d found",r["min-length"],e.length)];var c={type:r.value};s.$version<7&&(c.function=r.function),"object"===n(r.value)&&(c=r.value);for(var h=[],f=0;f<e.length;f++)h=h.concat(u({array:e,arrayIndex:f,value:e[f],valueSpec:c,style:o,styleSpec:s,key:l+"["+f+"]"}));return h}},{"../error/validation_error":304,"../util/get_type":306,"./validate":308}],310:[function(t,e,r){"use strict";var n=t("../util/get_type"),i=t("../error/validation_error");e.exports=function(t){var e=t.value,r=t.key,a=n(e);return"boolean"!==a?[new i(r,e,"boolean expected, %s found",a)]:[]}},{"../error/validation_error":304,"../util/get_type":306}],311:[function(t,e,r){"use strict";var n=t("../error/validation_error"),i=t("../util/get_type"),a=t("csscolorparser").parseCSSColor;e.exports=function(t){var e=t.key,r=t.value,o=i(r);return"string"!==o?[new n(e,r,"color expected, %s found",o)]:null===a(r)?[new n(e,r,'color expected, "%s" found',r)]:[]}},{"../error/validation_error":304,"../util/get_type":306,csscolorparser:108}],312:[function(t,e,r){"use strict";var n=t("../error/validation_error"),i=t("../util/get_type");e.exports=function(t){var e=t.key,r=t.value;if(t.styleSpec.$version>7)return r?[new n(e,r,"constants have been deprecated as of v8")]:[];var a=i(r);if("object"!==a)return[new n(e,r,"object expected, %s found",a)];var o=[];for(var s in r)"@"!==s[0]&&o.push(new n(e+"."+s,r[s],'constants must start with "@"'));return o}},{"../error/validation_error":304,"../util/get_type":306}],313:[function(t,e,r){"use strict";var n=t("../error/validation_error"),i=t("../util/unbundle_jsonlint");e.exports=function(t){var e=t.key,r=t.value,a=t.valueSpec,o=[];return-1===a.values.indexOf(i(r))&&o.push(new n(e,r,"expected one of [%s], %s found",a.values.join(", "),r)),o}},{"../error/validation_error":304,"../util/unbundle_jsonlint":307}],314:[function(t,e,r){"use strict";var n=t("../error/validation_error"),i=t("./validate_enum"),a=t("../util/get_type"),o=t("../util/unbundle_jsonlint");e.exports=function t(e){var r,s=e.value,l=e.key,u=e.styleSpec,c=[];if("array"!==a(s))return[new n(l,s,"array expected, %s found",a(s))];if(s.length<1)return[new n(l,s,"filter array must have at least 1 element")];switch(c=c.concat(i({key:l+"[0]",value:s[0],valueSpec:u.filter_operator,style:e.style,styleSpec:e.styleSpec})),o(s[0])){case"<":case"<=":case">":case">=":s.length>=2&&"$type"==s[1]&&c.push(new n(l,s,'"$type" cannot be use with operator "%s"',s[0]));case"==":case"!=":3!=s.length&&c.push(new n(l,s,'filter array for operator "%s" must have 3 elements',s[0]));case"in":case"!in":s.length>=2&&(r=a(s[1]),"string"!==r?c.push(new n(l+"[1]",s[1],"string expected, %s found",r)):"@"===s[1][0]&&c.push(new n(l+"[1]",s[1],"filter key cannot be a constant")));for(var h=2;h<s.length;h++)r=a(s[h]),"$type"==s[1]?c=c.concat(i({key:l+"["+h+"]",value:s[h],valueSpec:u.geometry_type,style:e.style,styleSpec:e.styleSpec})):"string"===r&&"@"===s[h][0]?c.push(new n(l+"["+h+"]",s[h],"filter value cannot be a constant")):"string"!==r&&"number"!==r&&"boolean"!==r&&c.push(new n(l+"["+h+"]",s[h],"string, number, or boolean expected, %s found",r));break;case"any":case"all":case"none":for(h=1;h<s.length;h++)c=c.concat(t({key:l+"["+h+"]",value:s[h],style:e.style,styleSpec:e.styleSpec}));break;case"has":case"!has":r=a(s[1]),2!==s.length?c.push(new n(l,s,'filter array for "%s" operator must have 2 elements',s[0])):"string"!==r?c.push(new n(l+"[1]",s[1],"string expected, %s found",r)):"@"===s[1][0]&&c.push(new n(l+"[1]",s[1],"filter key cannot be a constant"))}return c}},{"../error/validation_error":304,"../util/get_type":306,
"../util/unbundle_jsonlint":307,"./validate_enum":313}],315:[function(t,e,r){"use strict";var n=t("../error/validation_error"),i=t("../util/get_type"),a=t("./validate"),o=t("./validate_object"),s=t("./validate_array"),l=t("./validate_number");e.exports=function(t){function e(t){var e=[],a=t.value;return e=e.concat(s({key:t.key,value:a,valueSpec:t.valueSpec,style:t.style,styleSpec:t.styleSpec,arrayElementValidator:r})),"array"===i(a)&&0===a.length&&e.push(new n(t.key,a,"array must have at least one stop")),e}function r(t){var e=[],r=t.value,s=t.key;if("array"!==i(r))return[new n(s,r,"array expected, %s found",i(r))];if(2!==r.length)return[new n(s,r,"array length %d expected, length %d found",2,r.length)];var f=i(r[0]);if(c||(c=f),f!==c)return[new n(s,r,"%s stop key type must match previous stop key type %s",f,c)];if("object"===f){if(void 0===r[0].zoom)return[new n(s,r,"object stop key must have zoom")];if(void 0===r[0].value)return[new n(s,r,"object stop key must have value")];e=e.concat(o({key:s+"[0]",value:r[0],valueSpec:{zoom:{}},style:t.style,styleSpec:t.styleSpec,objectElementValidators:{zoom:l,value:u}}))}else e=e.concat((d?l:u)({key:s+"[0]",value:r[0],valueSpec:{},style:t.style,styleSpec:t.styleSpec}));return e=e.concat(a({key:s+"[1]",value:r[1],valueSpec:h,style:t.style,styleSpec:t.styleSpec})),"number"===i(r[0])&&("piecewise-constant"===h.function&&r[0]%1!=0&&e.push(new n(s+"[0]",r[0],"zoom level for piecewise-constant functions must be an integer")),0!==t.arrayIndex&&r[0]<t.array[t.arrayIndex-1][0]&&e.push(new n(s+"[0]",r[0],"array stops must appear in ascending order"))),e}function u(t){var e=[],r=i(t.value);return"number"!==r&&"string"!==r&&"array"!==r&&e.push(new n(t.key,t.value,"property value must be a number, string or array")),e}var c,h=t.valueSpec,f=void 0!==t.value.property||"object"===c,d=void 0===t.value.property||"object"===c,p=o({key:t.key,value:t.value,valueSpec:t.styleSpec.function,style:t.style,styleSpec:t.styleSpec,objectElementValidators:{stops:e}});return t.styleSpec.$version>=8&&(f&&!t.valueSpec["property-function"]?p.push(new n(t.key,t.value,"property functions not supported")):d&&!t.valueSpec["zoom-function"]&&p.push(new n(t.key,t.value,"zoom functions not supported"))),p}},{"../error/validation_error":304,"../util/get_type":306,"./validate":308,"./validate_array":309,"./validate_number":319,"./validate_object":320}],316:[function(t,e,r){"use strict";var n=t("../error/validation_error"),i=t("./validate_string");e.exports=function(t){var e=t.value,r=t.key,a=i(t);return a.length?a:(-1===e.indexOf("{fontstack}")&&a.push(new n(r,e,'"glyphs" url must include a "{fontstack}" token')),-1===e.indexOf("{range}")&&a.push(new n(r,e,'"glyphs" url must include a "{range}" token')),a)}},{"../error/validation_error":304,"./validate_string":323}],317:[function(t,e,r){"use strict";var n=t("../error/validation_error"),i=t("../util/unbundle_jsonlint"),a=t("./validate_object"),o=t("./validate_filter"),s=t("./validate_paint_property"),l=t("./validate_layout_property"),u=t("../util/extend");e.exports=function(t){var e=[],r=t.value,c=t.key,h=t.style,f=t.styleSpec;r.type||r.ref||e.push(new n(c,r,'either "type" or "ref" is required'));var d=i(r.type),p=i(r.ref);if(r.id)for(var m=0;m<t.arrayIndex;m++){var g=h.layers[m];i(g.id)===i(r.id)&&e.push(new n(c,r.id,'duplicate layer id "%s", previously used at line %d',r.id,g.id.__line__))}if("ref"in r){["type","source","source-layer","filter","layout"].forEach(function(t){t in r&&e.push(new n(c,r[t],'"%s" is prohibited for ref layers',t))});var v;h.layers.forEach(function(t){t.id==p&&(v=t)}),v?v.ref?e.push(new n(c,r.ref,"ref cannot reference another ref layer")):d=i(v.type):e.push(new n(c,r.ref,'ref layer "%s" not found',p))}else if("background"!==d)if(r.source){var y=h.sources&&h.sources[r.source];y?"vector"==y.type&&"raster"==d?e.push(new n(c,r.source,'layer "%s" requires a raster source',r.id)):"raster"==y.type&&"raster"!=d?e.push(new n(c,r.source,'layer "%s" requires a vector source',r.id)):"vector"!=y.type||r["source-layer"]||e.push(new n(c,r,'layer "%s" must specify a "source-layer"',r.id)):e.push(new n(c,r.source,'source "%s" not found',r.source))}else e.push(new n(c,r,'missing required property "source"'));return e=e.concat(a({key:c,value:r,valueSpec:f.layer,style:t.style,styleSpec:t.styleSpec,objectElementValidators:{filter:o,layout:function(t){return a({layer:r,key:t.key,value:t.value,style:t.style,styleSpec:t.styleSpec,objectElementValidators:{"*":function(t){return l(u({layerType:d},t))}}})},paint:function(t){return a({layer:r,key:t.key,value:t.value,style:t.style,styleSpec:t.styleSpec,objectElementValidators:{"*":function(t){return s(u({layerType:d},t))}}})}}}))}},{"../error/validation_error":304,"../util/extend":305,"../util/unbundle_jsonlint":307,"./validate_filter":314,"./validate_layout_property":318,"./validate_object":320,"./validate_paint_property":321}],318:[function(t,e,r){"use strict";var n=t("./validate"),i=t("../error/validation_error");e.exports=function(t){var e=t.key,r=t.style,a=t.styleSpec,o=t.value,s=t.objectKey,l=a["layout_"+t.layerType];if(t.valueSpec||l[s]){var u=[];return"symbol"===t.layerType&&("icon-image"===s&&r&&!r.sprite?u.push(new i(e,o,'use of "icon-image" requires a style "sprite" property')):"text-field"===s&&r&&!r.glyphs&&u.push(new i(e,o,'use of "text-field" requires a style "glyphs" property'))),u.concat(n({key:t.key,value:o,valueSpec:t.valueSpec||l[s],style:r,styleSpec:a}))}return[new i(e,o,'unknown property "%s"',s)]}},{"../error/validation_error":304,"./validate":308}],319:[function(t,e,r){"use strict";var n=t("../util/get_type"),i=t("../error/validation_error");e.exports=function(t){var e=t.key,r=t.value,a=t.valueSpec,o=n(r);return"number"!==o?[new i(e,r,"number expected, %s found",o)]:"minimum"in a&&r<a.minimum?[new i(e,r,"%s is less than the minimum value %s",r,a.minimum)]:"maximum"in a&&r>a.maximum?[new i(e,r,"%s is greater than the maximum value %s",r,a.maximum)]:[]}},{"../error/validation_error":304,"../util/get_type":306}],320:[function(t,e,r){"use strict";var n=t("../error/validation_error"),i=t("../util/get_type"),a=t("./validate");e.exports=function(t){var e=t.key,r=t.value,o=t.valueSpec,s=t.objectElementValidators||{},l=t.style,u=t.styleSpec,c=[],h=i(r);if("object"!==h)return[new n(e,r,"object expected, %s found",h)];for(var f in r){var d=f.split(".")[0],p=o&&(o[d]||o["*"]),m=s[d]||s["*"];p||m?c=c.concat((m||a)({key:(e?e+".":e)+f,value:r[f],valueSpec:p,style:l,styleSpec:u,object:r,objectKey:f})):""!==e&&1!==e.split(".").length&&c.push(new n(e,r[f],'unknown property "%s"',f))}for(d in o)o[d].required&&void 0===o[d].default&&void 0===r[d]&&c.push(new n(e,r,'missing required property "%s"',d));return c}},{"../error/validation_error":304,"../util/get_type":306,"./validate":308}],321:[function(t,e,r){"use strict";var n=t("./validate"),i=t("../error/validation_error");e.exports=function(t){var e=t.key,r=t.style,a=t.styleSpec,o=t.value,s=t.objectKey,l=a["paint_"+t.layerType],u=s.match(/^(.*)-transition$/);return u&&l[u[1]]&&l[u[1]].transition?n({key:e,value:o,valueSpec:a.transition,style:r,styleSpec:a}):t.valueSpec||l[s]?n({key:t.key,value:o,valueSpec:t.valueSpec||l[s],style:r,styleSpec:a}):[new i(e,o,'unknown property "%s"',s)]}},{"../error/validation_error":304,"./validate":308}],322:[function(t,e,r){"use strict";var n=t("../error/validation_error"),i=t("../util/unbundle_jsonlint"),a=t("./validate_object"),o=t("./validate_enum");e.exports=function(t){var e=t.value,r=t.key,s=t.styleSpec,l=t.style;if(!e.type)return[new n(r,e,'"type" is required')];switch(i(e.type)){case"vector":case"raster":var u=[];if(u=u.concat(a({key:r,value:e,valueSpec:s.source_tile,style:t.style,styleSpec:s})),"url"in e)for(var c in e)["type","url","tileSize"].indexOf(c)<0&&u.push(new n(r+"."+c,e[c],'a source with a "url" property may not include a "%s" property',c));return u;case"geojson":return a({key:r,value:e,valueSpec:s.source_geojson,style:l,styleSpec:s});case"video":return a({key:r,value:e,valueSpec:s.source_video,style:l,styleSpec:s});case"image":return a({key:r,value:e,valueSpec:s.source_image,style:l,styleSpec:s});default:return o({key:r+".type",value:e.type,valueSpec:{values:["vector","raster","geojson","video","image"]},style:l,styleSpec:s})}}},{"../error/validation_error":304,"../util/unbundle_jsonlint":307,"./validate_enum":313,"./validate_object":320}],323:[function(t,e,r){"use strict";var n=t("../util/get_type"),i=t("../error/validation_error");e.exports=function(t){var e=t.value,r=t.key,a=n(e);return"string"!==a?[new i(r,e,"string expected, %s found",a)]:[]}},{"../error/validation_error":304,"../util/get_type":306}],324:[function(t,e,r){"use strict";function n(t,e){e=e||l;var r=[];return r=r.concat(s({key:"",value:t,valueSpec:e.$root,styleSpec:e,style:t,objectElementValidators:{glyphs:u}})),e.$version>7&&t.constants&&(r=r.concat(o({key:"constants",value:t.constants,style:t,styleSpec:e}))),i(r)}function i(t){return[].concat(t).sort(function(t,e){return t.line-e.line})}function a(t){return function(){return i(t.apply(this,arguments))}}var o=t("./validate/validate_constants"),s=t("./validate/validate"),l=t("../reference/latest.min"),u=t("./validate/validate_glyphs_url");n.source=a(t("./validate/validate_source")),n.layer=a(t("./validate/validate_layer")),n.filter=a(t("./validate/validate_filter")),n.paintProperty=a(t("./validate/validate_paint_property")),n.layoutProperty=a(t("./validate/validate_layout_property")),e.exports=n},{"../reference/latest.min":325,"./validate/validate":308,"./validate/validate_constants":312,"./validate/validate_filter":314,"./validate/validate_glyphs_url":316,"./validate/validate_layer":317,"./validate/validate_layout_property":318,"./validate/validate_paint_property":321,"./validate/validate_source":322}],325:[function(t,e,r){e.exports=t("./v8.min.json")},{"./v8.min.json":326}],326:[function(t,e,r){e.exports={$version:8,$root:{version:{required:!0,type:"enum",values:[8]},name:{type:"string"},metadata:{type:"*"},center:{type:"array",value:"number"},zoom:{type:"number"},bearing:{type:"number",default:0,period:360,units:"degrees"},pitch:{type:"number",default:0,units:"degrees"},sources:{required:!0,type:"sources"},sprite:{type:"string"},glyphs:{type:"string"},transition:{type:"transition"},layers:{required:!0,type:"array",value:"layer"}},sources:{"*":{type:"source"}},source:["source_tile","source_geojson","source_video","source_image"],source_tile:{type:{required:!0,type:"enum",values:["vector","raster"]},url:{type:"string"},tiles:{type:"array",value:"string"},minzoom:{type:"number",default:0},maxzoom:{type:"number",default:22},tileSize:{type:"number",default:512,units:"pixels"},"*":{type:"*"}},source_geojson:{type:{required:!0,type:"enum",values:["geojson"]},data:{type:"*"},maxzoom:{type:"number",default:14},buffer:{type:"number",default:64},tolerance:{type:"number",default:3},cluster:{type:"boolean",default:!1},clusterRadius:{type:"number",default:400},clusterMaxZoom:{type:"number"}},source_video:{type:{required:!0,type:"enum",values:["video"]},urls:{required:!0,type:"array",value:"string"},coordinates:{required:!0,type:"array",length:4,value:{type:"array",length:2,value:"number"}}},source_image:{type:{required:!0,type:"enum",values:["image"]},url:{required:!0,type:"string"},coordinates:{required:!0,type:"array",length:4,value:{type:"array",length:2,value:"number"}}},layer:{id:{type:"string",required:!0},type:{type:"enum",values:["fill","line","symbol","circle","raster","background"]},metadata:{type:"*"},ref:{type:"string"},source:{type:"string"},"source-layer":{type:"string"},minzoom:{type:"number",minimum:0,maximum:22},maxzoom:{type:"number",minimum:0,maximum:22},interactive:{type:"boolean",default:!1},filter:{type:"filter"},layout:{type:"layout"},paint:{type:"paint"},"paint.*":{type:"paint"}},layout:["layout_fill","layout_line","layout_circle","layout_symbol","layout_raster","layout_background"],layout_background:{visibility:{type:"enum",function:"piecewise-constant","zoom-function":!0,values:["visible","none"],default:"visible"}},layout_fill:{visibility:{type:"enum",function:"piecewise-constant","zoom-function":!0,values:["visible","none"],default:"visible"}},layout_circle:{visibility:{type:"enum",function:"piecewise-constant","zoom-function":!0,values:["visible","none"],default:"visible"}},layout_line:{"line-cap":{type:"enum",function:"piecewise-constant","zoom-function":!0,"property-function":!0,values:["butt","round","square"],default:"butt"},"line-join":{type:"enum",function:"piecewise-constant","zoom-function":!0,"property-function":!0,values:["bevel","round","miter"],default:"miter"},"line-miter-limit":{type:"number",default:2,function:"interpolated","zoom-function":!0,"property-function":!0,requires:[{"line-join":"miter"}]},"line-round-limit":{type:"number",default:1.05,function:"interpolated","zoom-function":!0,"property-function":!0,requires:[{"line-join":"round"}]},visibility:{type:"enum",function:"piecewise-constant","zoom-function":!0,values:["visible","none"],default:"visible"}},layout_symbol:{"symbol-placement":{type:"enum",function:"piecewise-constant","zoom-function":!0,"property-function":!0,values:["point","line"],default:"point"},"symbol-spacing":{type:"number",default:250,minimum:1,function:"interpolated","zoom-function":!0,"property-function":!0,units:"pixels",requires:[{"symbol-placement":"line"}]},"symbol-avoid-edges":{type:"boolean",function:"piecewise-constant","zoom-function":!0,"property-function":!0,default:!1},"icon-allow-overlap":{type:"boolean",function:"piecewise-constant","zoom-function":!0,"property-function":!0,default:!1,requires:["icon-image"]},"icon-ignore-placement":{type:"boolean",function:"piecewise-constant","zoom-function":!0,"property-function":!0,default:!1,requires:["icon-image"]},"icon-optional":{type:"boolean",function:"piecewise-constant","zoom-function":!0,"property-function":!0,default:!1,requires:["icon-image","text-field"]},"icon-rotation-alignment":{type:"enum",function:"piecewise-constant","zoom-function":!0,"property-function":!0,values:["map","viewport"],default:"viewport",requires:["icon-image"]},"icon-size":{type:"number",default:1,minimum:0,function:"interpolated","zoom-function":!0,"property-function":!0,requires:["icon-image"]},"icon-text-fit":{type:"enum",function:"piecewise-constant","zoom-function":!0,"property-function":!1,values:["none","both","width","height"],default:"none",requires:["icon-image","text-field"]},"icon-text-fit-padding":{type:"array",value:"number",length:4,default:[0,0,0,0],units:"pixels",function:"interpolated","zoom-function":!0,"property-function":!0,requires:["icon-image","icon-text-fit","text-field"]},"icon-image":{type:"string",function:"piecewise-constant","zoom-function":!0,"property-function":!0,tokens:!0},"icon-rotate":{type:"number",default:0,period:360,function:"interpolated","zoom-function":!0,"property-function":!0,units:"degrees",requires:["icon-image"]},"icon-padding":{type:"number",default:2,minimum:0,function:"interpolated","zoom-function":!0,"property-function":!0,units:"pixels",requires:["icon-image"]},"icon-keep-upright":{type:"boolean",function:"piecewise-constant","zoom-function":!0,"property-function":!0,default:!1,requires:["icon-image",{"icon-rotation-alignment":"map"},{"symbol-placement":"line"}]},"icon-offset":{type:"array",value:"number",length:2,default:[0,0],function:"interpolated","zoom-function":!0,"property-function":!0,requires:["icon-image"]},"text-pitch-alignment":{type:"enum",function:"piecewise-constant","zoom-function":!0,"property-function":!0,values:["map","viewport"],requires:["text-field"]},"text-rotation-alignment":{type:"enum",function:"piecewise-constant","zoom-function":!0,"property-function":!0,values:["map","viewport"],default:"viewport",requires:["text-field"]},"text-field":{type:"string",function:"piecewise-constant","zoom-function":!0,"property-function":!0,default:"",tokens:!0},"text-font":{type:"array",value:"string",function:"piecewise-constant","zoom-function":!0,"property-function":!0,default:["Open Sans Regular","Arial Unicode MS Regular"],requires:["text-field"]},"text-size":{type:"number",default:16,minimum:0,units:"pixels",function:"interpolated","zoom-function":!0,"property-function":!0,requires:["text-field"]},"text-max-width":{type:"number",default:10,minimum:0,units:"em",function:"interpolated","zoom-function":!0,"property-function":!0,requires:["text-field"]},"text-line-height":{type:"number",default:1.2,units:"em",function:"interpolated","zoom-function":!0,"property-function":!0,requires:["text-field"]},"text-letter-spacing":{type:"number",default:0,units:"em",function:"interpolated","zoom-function":!0,"property-function":!0,requires:["text-field"]},"text-justify":{type:"enum",function:"piecewise-constant","zoom-function":!0,"property-function":!0,values:["left","center","right"],default:"center",requires:["text-field"]},"text-anchor":{type:"enum",function:"piecewise-constant","zoom-function":!0,"property-function":!0,values:["center","left","right","top","bottom","top-left","top-right","bottom-left","bottom-right"],default:"center",requires:["text-field"]},"text-max-angle":{type:"number",default:45,units:"degrees",function:"interpolated","zoom-function":!0,"property-function":!0,requires:["text-field",{"symbol-placement":"line"}]},"text-rotate":{type:"number",default:0,period:360,units:"degrees",function:"interpolated","zoom-function":!0,"property-function":!0,requires:["text-field"]},"text-padding":{type:"number",default:2,minimum:0,units:"pixels",function:"interpolated","zoom-function":!0,"property-function":!0,requires:["text-field"]},"text-keep-upright":{type:"boolean",function:"piecewise-constant","zoom-function":!0,"property-function":!0,default:!0,requires:["text-field",{"text-rotation-alignment":"map"},{"symbol-placement":"line"}]},"text-transform":{type:"enum",function:"piecewise-constant","zoom-function":!0,"property-function":!0,values:["none","uppercase","lowercase"],default:"none",requires:["text-field"]},"text-offset":{type:"array",value:"number",units:"ems",function:"interpolated","zoom-function":!0,"property-function":!0,length:2,default:[0,0],requires:["text-field"]},"text-allow-overlap":{type:"boolean",function:"piecewise-constant","zoom-function":!0,"property-function":!0,default:!1,requires:["text-field"]},"text-ignore-placement":{type:"boolean",function:"piecewise-constant","zoom-function":!0,"property-function":!0,default:!1,requires:["text-field"]},"text-optional":{type:"boolean",function:"piecewise-constant","zoom-function":!0,"property-function":!0,default:!1,requires:["text-field","icon-image"]},visibility:{type:"enum",function:"piecewise-constant","zoom-function":!0,values:["visible","none"],default:"visible"}},layout_raster:{visibility:{type:"enum",function:"piecewise-constant","zoom-function":!0,values:["visible","none"],default:"visible"}},filter:{type:"array",value:"*"},filter_operator:{type:"enum",values:["==","!=",">",">=","<","<=","in","!in","all","any","none","has","!has"]},geometry_type:{type:"enum",values:["Point","LineString","Polygon"]},color_operation:{type:"enum",values:["lighten","saturate","spin","fade","mix"]},function:{stops:{type:"array",required:!0,value:"function_stop"},base:{type:"number",default:1,minimum:0},property:{type:"string",default:"$zoom"},type:{type:"enum",values:["exponential","interval","categorical"],default:"exponential"}},function_stop:{type:"array",minimum:0,maximum:22,value:["number","color"],length:2},paint:["paint_fill","paint_line","paint_circle","paint_symbol","paint_raster","paint_background"],paint_fill:{"fill-antialias":{type:"boolean",function:"piecewise-constant","zoom-function":!0,"property-function":!0,default:!0},"fill-opacity":{type:"number",function:"interpolated","zoom-function":!0,"property-function":!0,default:1,minimum:0,maximum:1,transition:!0},"fill-color":{type:"color",default:"#000000",function:"interpolated","zoom-function":!0,"property-function":!0,transition:!0,requires:[{"!":"fill-pattern"}]},"fill-outline-color":{type:"color",function:"interpolated","zoom-function":!0,"property-function":!0,transition:!0,requires:[{"!":"fill-pattern"},{"fill-antialias":!0}]},"fill-translate":{type:"array",value:"number",length:2,default:[0,0],function:"interpolated","zoom-function":!0,"property-function":!0,transition:!0,units:"pixels"},"fill-translate-anchor":{type:"enum",function:"piecewise-constant","zoom-function":!0,"property-function":!0,values:["map","viewport"],default:"map",requires:["fill-translate"]},"fill-pattern":{type:"string",function:"piecewise-constant","zoom-function":!0,"property-function":!0,transition:!0}},paint_line:{"line-opacity":{type:"number",function:"interpolated","zoom-function":!0,"property-function":!0,default:1,minimum:0,maximum:1,transition:!0},"line-color":{type:"color",default:"#000000",function:"interpolated","zoom-function":!0,"property-function":!0,transition:!0,requires:[{"!":"line-pattern"}]},"line-translate":{type:"array",value:"number",length:2,default:[0,0],function:"interpolated","zoom-function":!0,"property-function":!0,transition:!0,units:"pixels"},"line-translate-anchor":{type:"enum",function:"piecewise-constant","zoom-function":!0,"property-function":!0,values:["map","viewport"],default:"map",requires:["line-translate"]},"line-width":{type:"number",default:1,minimum:0,function:"interpolated","zoom-function":!0,"property-function":!0,transition:!0,units:"pixels"},"line-gap-width":{type:"number",default:0,minimum:0,function:"interpolated","zoom-function":!0,"property-function":!0,transition:!0,units:"pixels"},"line-offset":{type:"number",default:0,function:"interpolated","zoom-function":!0,"property-function":!0,transition:!0,units:"pixels"},"line-blur":{type:"number",default:0,minimum:0,function:"interpolated","zoom-function":!0,"property-function":!0,transition:!0,units:"pixels"},"line-dasharray":{type:"array",value:"number",function:"piecewise-constant","zoom-function":!0,"property-function":!0,minimum:0,transition:!0,units:"line widths",requires:[{"!":"line-pattern"}]},"line-pattern":{type:"string",function:"piecewise-constant","zoom-function":!0,"property-function":!0,transition:!0}},paint_circle:{"circle-radius":{type:"number",default:5,minimum:0,function:"interpolated","zoom-function":!0,"property-function":!0,transition:!0,units:"pixels"},"circle-color":{type:"color",default:"#000000",function:"interpolated","zoom-function":!0,"property-function":!0,transition:!0},"circle-blur":{type:"number",default:0,function:"interpolated","zoom-function":!0,"property-function":!0,transition:!0},"circle-opacity":{type:"number",default:1,minimum:0,maximum:1,function:"interpolated","zoom-function":!0,"property-function":!0,transition:!0},"circle-translate":{type:"array",value:"number",length:2,default:[0,0],function:"interpolated","zoom-function":!0,"property-function":!0,transition:!0,units:"pixels"},"circle-translate-anchor":{type:"enum",function:"piecewise-constant","zoom-function":!0,"property-function":!0,values:["map","viewport"],default:"map",requires:["circle-translate"]},"circle-pitch-scale":{type:"enum",function:"piecewise-constant","zoom-function":!0,"property-function":!0,values:["map","viewport"],default:"map"}},paint_symbol:{"icon-opacity":{type:"number",default:1,minimum:0,maximum:1,function:"interpolated","zoom-function":!0,"property-function":!0,transition:!0,requires:["icon-image"]},"icon-color":{type:"color",default:"#000000",function:"interpolated","zoom-function":!0,"property-function":!0,transition:!0,requires:["icon-image"]},"icon-halo-color":{type:"color",default:"rgba(0, 0, 0, 0)",function:"interpolated","zoom-function":!0,"property-function":!0,transition:!0,requires:["icon-image"]},"icon-halo-width":{type:"number",default:0,minimum:0,function:"interpolated","zoom-function":!0,"property-function":!0,transition:!0,units:"pixels",requires:["icon-image"]},"icon-halo-blur":{type:"number",default:0,minimum:0,function:"interpolated","zoom-function":!0,"property-function":!0,transition:!0,units:"pixels",requires:["icon-image"]},"icon-translate":{type:"array",value:"number",length:2,default:[0,0],function:"interpolated","zoom-function":!0,"property-function":!0,transition:!0,units:"pixels",requires:["icon-image"]},"icon-translate-anchor":{type:"enum",function:"piecewise-constant","zoom-function":!0,"property-function":!0,values:["map","viewport"],default:"map",requires:["icon-image","icon-translate"]},"text-opacity":{type:"number",default:1,minimum:0,maximum:1,function:"interpolated","zoom-function":!0,"property-function":!0,transition:!0,requires:["text-field"]},"text-color":{type:"color",default:"#000000",function:"interpolated","zoom-function":!0,"property-function":!0,transition:!0,requires:["text-field"]},"text-halo-color":{type:"color",default:"rgba(0, 0, 0, 0)",function:"interpolated","zoom-function":!0,"property-function":!0,transition:!0,requires:["text-field"]},"text-halo-width":{type:"number",default:0,minimum:0,function:"interpolated","zoom-function":!0,"property-function":!0,transition:!0,units:"pixels",requires:["text-field"]},"text-halo-blur":{type:"number",default:0,minimum:0,function:"interpolated","zoom-function":!0,"property-function":!0,transition:!0,units:"pixels",requires:["text-field"]},"text-translate":{type:"array",value:"number",length:2,default:[0,0],function:"interpolated","zoom-function":!0,"property-function":!0,transition:!0,units:"pixels",requires:["text-field"]},"text-translate-anchor":{type:"enum",function:"piecewise-constant","zoom-function":!0,"property-function":!0,values:["map","viewport"],default:"map",requires:["text-field","text-translate"]}},paint_raster:{"raster-opacity":{type:"number",default:1,minimum:0,maximum:1,function:"interpolated","zoom-function":!0,transition:!0},"raster-hue-rotate":{type:"number",default:0,period:360,function:"interpolated","zoom-function":!0,transition:!0,units:"degrees"},"raster-brightness-min":{type:"number",function:"interpolated","zoom-function":!0,default:0,minimum:0,maximum:1,transition:!0},"raster-brightness-max":{type:"number",function:"interpolated","zoom-function":!0,default:1,minimum:0,maximum:1,transition:!0},"raster-saturation":{type:"number",default:0,minimum:-1,maximum:1,function:"interpolated","zoom-function":!0,transition:!0},"raster-contrast":{type:"number",default:0,minimum:-1,maximum:1,function:"interpolated","zoom-function":!0,transition:!0},"raster-fade-duration":{type:"number",default:300,minimum:0,function:"interpolated","zoom-function":!0,transition:!0,units:"milliseconds"}},paint_background:{"background-color":{type:"color",default:"#000000",function:"interpolated","zoom-function":!0,transition:!0,requires:[{"!":"background-pattern"}]},"background-pattern":{type:"string",function:"piecewise-constant","zoom-function":!0,transition:!0},"background-opacity":{type:"number",default:1,minimum:0,maximum:1,function:"interpolated","zoom-function":!0,transition:!0}},transition:{duration:{type:"number",default:300,minimum:0,units:"milliseconds"},delay:{type:"number",default:0,minimum:0,units:"milliseconds"}}}},{}],327:[function(t,e,r){"use strict";function n(t){return!!(i()&&a()&&o()&&s()&&l()&&u()&&c()&&h(t&&t.failIfMajorPerformanceCaveat))}function i(){return"undefined"!=typeof window&&"undefined"!=typeof document}function a(){return Array.prototype&&Array.prototype.every&&Array.prototype.filter&&Array.prototype.forEach&&Array.prototype.indexOf&&Array.prototype.lastIndexOf&&Array.prototype.map&&Array.prototype.some&&Array.prototype.reduce&&Array.prototype.reduceRight&&Array.isArray}function o(){return Function.prototype&&Function.prototype.bind}function s(){return Object.keys&&Object.create&&Object.getPrototypeOf&&Object.getOwnPropertyNames&&Object.isSealed&&Object.isFrozen&&Object.isExtensible&&Object.getOwnPropertyDescriptor&&Object.defineProperty&&Object.defineProperties&&Object.seal&&Object.freeze&&Object.preventExtensions}function l(){return"JSON"in window&&"parse"in JSON&&"stringify"in JSON}function u(){return"Worker"in window}function c(){return"Uint8ClampedArray"in window}function h(t){return void 0===d[t]&&(d[t]=f(t)),d[t]}function f(t){var e=document.createElement("canvas"),r=Object.create(n.webGLContextAttributes);return r.failIfMajorPerformanceCaveat=t,e.probablySupportsContext?e.probablySupportsContext("webgl",r)||e.probablySupportsContext("experimental-webgl",r):e.supportsContext?e.supportsContext("webgl",r)||e.supportsContext("experimental-webgl",r):e.getContext("webgl",r)||e.getContext("experimental-webgl",r)}void 0!==e&&e.exports?e.exports=n:window&&(window.mapboxgl=window.mapboxgl||{},window.mapboxgl.supported=n);var d={};n.webGLContextAttributes={antialias:!1,alpha:!0,stencil:!0,depth:!0}},{}],328:[function(t,e,r){"use strict";function n(t){var e=t.layoutVertexArrayType;this.layoutVertexArray=new e;var r=t.elementArrayType;r&&(this.elementArray=new r);var n=t.elementArrayType2;n&&(this.elementArray2=new n),this.paintVertexArrays=i.mapObject(t.paintVertexArrayTypes,function(t){return new t})}var i=t("../util/util");e.exports=n,n.MAX_VERTEX_ARRAY_LENGTH=Math.pow(2,16)-1,n.prototype.hasCapacityFor=function(t){return this.layoutVertexArray.length+t<=n.MAX_VERTEX_ARRAY_LENGTH},n.prototype.isEmpty=function(){return 0===this.layoutVertexArray.length},n.prototype.trim=function(){this.layoutVertexArray.trim(),this.elementArray&&this.elementArray.trim(),this.elementArray2&&this.elementArray2.trim();for(var t in this.paintVertexArrays)this.paintVertexArrays[t].trim()},n.prototype.serialize=function(){return{layoutVertexArray:this.layoutVertexArray.serialize(),elementArray:this.elementArray&&this.elementArray.serialize(),elementArray2:this.elementArray2&&this.elementArray2.serialize(),paintVertexArrays:i.mapObject(this.paintVertexArrays,function(t){return t.serialize()})}},n.prototype.getTransferables=function(t){t.push(this.layoutVertexArray.arrayBuffer),this.elementArray&&t.push(this.elementArray.arrayBuffer),this.elementArray2&&t.push(this.elementArray2.arrayBuffer);for(var e in this.paintVertexArrays)t.push(this.paintVertexArrays[e].arrayBuffer)}},{"../util/util":442}],329:[function(t,e,r){"use strict";function n(t){if(this.zoom=t.zoom,this.overscaling=t.overscaling,this.layer=t.layer,this.childLayers=t.childLayers,this.type=this.layer.type,this.features=[],this.id=this.layer.id,this.index=t.index,this.sourceLayer=this.layer.sourceLayer,this.sourceLayerIndex=t.sourceLayerIndex,this.minZoom=this.layer.minzoom,this.maxZoom=this.layer.maxzoom,this.paintAttributes=i(this),t.arrays){var e=this.programInterfaces;this.bufferGroups=c.mapObject(t.arrays,function(r,n){var i=e[n],a=t.paintVertexArrayTypes[n];return r.map(function(t){return new u(t,{layoutVertexArrayType:i.layoutVertexArrayType.serialize(),elementArrayType:i.elementArrayType&&i.elementArrayType.serialize(),elementArrayType2:i.elementArrayType2&&i.elementArrayType2.serialize(),paintVertexArrayTypes:a})})})}}function i(t){var e={};for(var r in t.programInterfaces){for(var n=e[r]={},i=0;i<t.childLayers.length;i++){n[t.childLayers[i].id]={attributes:[],uniforms:[],defines:[],vertexPragmas:{define:{},initialize:{}},fragmentPragmas:{define:{},initialize:{}}}}var s=t.programInterfaces[r];if(s.paintAttributes)for(var l=0;l<s.paintAttributes.length;l++){var u=s.paintAttributes[l];u.multiplier=u.multiplier||1;for(var h=0;h<t.childLayers.length;h++){var d=t.childLayers[h],p=n[d.id],m=u.name;f("a_"===u.name.slice(0,2));var g,v=u.name.slice(2);if(p.fragmentPragmas.initialize[v]="",d.isPaintValueFeatureConstant(u.paintProperty))p.uniforms.push(u),p.fragmentPragmas.define[v]=p.vertexPragmas.define[v]=["uniform","{precision}","{type}",m].join(" ")+";",p.fragmentPragmas.initialize[v]=p.vertexPragmas.initialize[v]=["{precision}","{type}",v,"=",m].join(" ")+";\n";else if(d.isPaintValueZoomConstant(u.paintProperty)){p.attributes.push(c.extend({},u,{name:m})),g=["varying","{precision}","{type}",v].join(" ")+";\n"
;var y=[p.fragmentPragmas.define[v],"attribute","{precision}","{type}",m].join(" ")+";\n";p.fragmentPragmas.define[v]=g,p.vertexPragmas.define[v]=g+y,p.vertexPragmas.initialize[v]=[v,"=",m,"/",u.multiplier.toFixed(1)].join(" ")+";\n"}else{for(var b="u_"+m.slice(2)+"_t",x=d.getPaintValueStopZoomLevels(u.paintProperty),_=0;_<x.length&&x[_]<t.zoom;)_++;for(var w=Math.max(0,Math.min(x.length-4,_-2)),M=[],k=0;k<4;k++)M.push(x[Math.min(w+k,x.length-1)]);g=["varying","{precision}","{type}",v].join(" ")+";\n",p.vertexPragmas.define[v]=g+["uniform","lowp","float",b].join(" ")+";\n",p.fragmentPragmas.define[v]=g,p.uniforms.push(c.extend({},u,{name:b,getValue:o(u,w),components:1}));var A=u.components;if(1===A)p.attributes.push(c.extend({},u,{getValue:a(u,M),isFunction:!0,components:4*A})),p.vertexPragmas.define[v]+=["attribute","{precision}","vec4",m].join(" ")+";\n",p.vertexPragmas.initialize[v]=[v,"=","evaluate_zoom_function_1("+m+", "+b+")","/",u.multiplier.toFixed(1)].join(" ")+";\n";else{for(var T=[],S=0;S<4;S++)T.push(m+S),p.attributes.push(c.extend({},u,{getValue:a(u,[M[S]]),isFunction:!0,name:m+S})),p.vertexPragmas.define[v]+=["attribute","{precision}","{type}",m+S].join(" ")+";\n";p.vertexPragmas.initialize[v]=[v," = ","evaluate_zoom_function_4("+T.join(", ")+", "+b+")","/",u.multiplier.toFixed(1)].join(" ")+";\n"}}}}}return e}function a(t,e){return function(r,n,i){if(1===e.length)return t.getValue(r,c.extend({},n,{zoom:e[0]}),i);for(var a=[],o=0;o<e.length;o++){var s=e[o];a.push(t.getValue(r,c.extend({},n,{zoom:s}),i)[0])}return a}}function o(t,e){return function(r,n){var i=r.getPaintInterpolationT(t.paintProperty,n.zoom);return[Math.max(0,Math.min(4,i-e))]}}var s=t("feature-filter"),l=t("./array_group"),u=t("./buffer_group"),c=t("../util/util"),h=t("../util/struct_array"),f=t("assert");e.exports=n,n.create=function(e){return new({fill:t("./bucket/fill_bucket"),line:t("./bucket/line_bucket"),circle:t("./bucket/circle_bucket"),symbol:t("./bucket/symbol_bucket")}[e.layer.type])(e)},n.EXTENT=8192,n.prototype.populateArrays=function(){this.createArrays(),this.recalculateStyleLayers();for(var t=0;t<this.features.length;t++)this.addFeature(this.features[t]);this.trimArrays()},n.prototype.prepareArrayGroup=function(t,e){var r=this.arrayGroups[t],n=r.length&&r[r.length-1];return n&&n.hasCapacityFor(e)||(n=new l({layoutVertexArrayType:this.programInterfaces[t].layoutVertexArrayType,elementArrayType:this.programInterfaces[t].elementArrayType,elementArrayType2:this.programInterfaces[t].elementArrayType2,paintVertexArrayTypes:this.paintVertexArrayTypes[t]}),n.index=r.length,r.push(n)),n},n.prototype.createArrays=function(){this.arrayGroups={},this.paintVertexArrayTypes={};for(var t in this.programInterfaces){this.arrayGroups[t]=[];var e=this.paintVertexArrayTypes[t]={},r=this.paintAttributes[t];for(var i in r)e[i]=new n.VertexArrayType(r[i].attributes)}},n.prototype.destroy=function(t){for(var e in this.bufferGroups)for(var r=this.bufferGroups[e],n=0;n<r.length;n++)r[n].destroy(t)},n.prototype.trimArrays=function(){for(var t in this.arrayGroups)for(var e=this.arrayGroups[t],r=0;r<e.length;r++)e[r].trim()},n.prototype.isEmpty=function(){for(var t in this.arrayGroups)for(var e=this.arrayGroups[t],r=0;r<e.length;r++)if(!e[r].isEmpty())return!1;return!0},n.prototype.getTransferables=function(t){for(var e in this.arrayGroups)for(var r=this.arrayGroups[e],n=0;n<r.length;n++)r[n].getTransferables(t)},n.prototype.setUniforms=function(t,e,r,n,i){for(var a=this.paintAttributes[e][n.id].uniforms,o=0;o<a.length;o++){var s=a[o],l=r[s.name];t["uniform"+s.components+"fv"](l,s.getValue(n,i))}},n.prototype.serialize=function(){return{layerId:this.layer.id,zoom:this.zoom,arrays:c.mapObject(this.arrayGroups,function(t){return t.map(function(t){return t.serialize()})}),paintVertexArrayTypes:c.mapObject(this.paintVertexArrayTypes,function(t){return c.mapObject(t,function(t){return t.serialize()})}),childLayerIds:this.childLayers.map(function(t){return t.id})}},n.prototype.createFilter=function(){this.filter||(this.filter=s(this.layer.filter))};var d={lastIntegerZoom:1/0,lastIntegerZoomTime:0,lastZoom:0};n.prototype.recalculateStyleLayers=function(){for(var t=0;t<this.childLayers.length;t++)this.childLayers[t].recalculate(this.zoom,d)},n.prototype.populatePaintArrays=function(t,e,r,n,i){for(var a=0;a<this.childLayers.length;a++)for(var o=this.childLayers[a],s=this.arrayGroups[t],l=n.index;l<s.length;l++){var u=s[l],c=u.layoutVertexArray.length,h=u.paintVertexArrays[o.id];h.resize(c);for(var f=this.paintAttributes[t][o.id].attributes,d=0;d<f.length;d++)for(var p=f[d],m=p.getValue(o,e,r),g=p.multiplier||1,v=p.components||1,y=l===n.index?i:0,b=y;b<c;b++)for(var x=h.get(b),_=0;_<v;_++){var w=v>1?p.name+_:p.name;x[w]=m[_]*g}}},n.VertexArrayType=function(t){return new h({members:t,alignment:4})},n.ElementArrayType=function(t){return new h({members:[{type:"Uint16",name:"vertices",components:t||3}]})}},{"../util/struct_array":440,"../util/util":442,"./array_group":328,"./bucket/circle_bucket":330,"./bucket/fill_bucket":331,"./bucket/line_bucket":332,"./bucket/symbol_bucket":333,"./buffer_group":335,assert:47,"feature-filter":132}],330:[function(t,e,r){"use strict";function n(){i.apply(this,arguments)}var i=t("../bucket"),a=t("../../util/util"),o=t("../load_geometry"),s=i.EXTENT;e.exports=n,n.prototype=a.inherit(i,{}),n.prototype.addCircleVertex=function(t,e,r,n,i){return t.emplaceBack(2*e+(n+1)/2,2*r+(i+1)/2)},n.prototype.programInterfaces={circle:{layoutVertexArrayType:new i.VertexArrayType([{name:"a_pos",components:2,type:"Int16"}]),elementArrayType:new i.ElementArrayType,paintAttributes:[{name:"a_color",components:4,type:"Uint8",getValue:function(t,e,r){return t.getPaintValue("circle-color",e,r)},multiplier:255,paintProperty:"circle-color"},{name:"a_radius",components:1,type:"Uint16",isLayerConstant:!1,getValue:function(t,e,r){return[t.getPaintValue("circle-radius",e,r)]},multiplier:10,paintProperty:"circle-radius"},{name:"a_blur",components:1,type:"Uint16",isLayerConstant:!1,getValue:function(t,e,r){return[t.getPaintValue("circle-blur",e,r)]},multiplier:10,paintProperty:"circle-blur"},{name:"a_opacity",components:1,type:"Uint16",isLayerConstant:!1,getValue:function(t,e,r){return[t.getPaintValue("circle-opacity",e,r)]},multiplier:255,paintProperty:"circle-opacity"}]}},n.prototype.addFeature=function(t){for(var e={zoom:this.zoom},r=o(t),n=this.prepareArrayGroup("circle",0),i=n.layoutVertexArray.length,a=0;a<r.length;a++)for(var l=0;l<r[a].length;l++){var u=r[a][l].x,c=r[a][l].y;if(!(u<0||u>=s||c<0||c>=s)){var h=this.prepareArrayGroup("circle",4),f=h.layoutVertexArray,d=this.addCircleVertex(f,u,c,-1,-1);this.addCircleVertex(f,u,c,1,-1),this.addCircleVertex(f,u,c,1,1),this.addCircleVertex(f,u,c,-1,1),h.elementArray.emplaceBack(d,d+1,d+2),h.elementArray.emplaceBack(d,d+3,d+2)}}this.populatePaintArrays("circle",e,t.properties,n,i)}},{"../../util/util":442,"../bucket":329,"../load_geometry":337}],331:[function(t,e,r){"use strict";function n(){i.apply(this,arguments)}var i=t("../bucket"),a=t("../../util/util"),o=t("../load_geometry"),s=t("earcut"),l=t("../../util/classify_rings");e.exports=n,n.prototype=a.inherit(i,{}),n.prototype.programInterfaces={fill:{layoutVertexArrayType:new i.VertexArrayType([{name:"a_pos",components:2,type:"Int16"}]),elementArrayType:new i.ElementArrayType(1),elementArrayType2:new i.ElementArrayType(2),paintAttributes:[{name:"a_color",components:4,type:"Uint8",getValue:function(t,e,r){return t.getPaintValue("fill-color",e,r)},multiplier:255,paintProperty:"fill-color"},{name:"a_outline_color",components:4,type:"Uint8",getValue:function(t,e,r){return t.getPaintValue("fill-outline-color",e,r)},multiplier:255,paintProperty:"fill-outline-color"},{name:"a_opacity",components:1,type:"Uint8",getValue:function(t,e,r){return[t.getPaintValue("fill-opacity",e,r)]},multiplier:255,paintProperty:"fill-opacity"}]}},n.prototype.addFeature=function(t){for(var e=o(t),r=l(e,500),n=this.prepareArrayGroup("fill",0),i=n.layoutVertexArray.length,a=0;a<r.length;a++)this.addPolygon(r[a]);this.populatePaintArrays("fill",{zoom:this.zoom},t.properties,n,i)},n.prototype.addPolygon=function(t){for(var e=0,r=0;r<t.length;r++)e+=t[r].length;for(var n=this.prepareArrayGroup("fill",e),i=[],a=[],o=n.layoutVertexArray.length,l=0;l<t.length;l++){var u=t[l];l>0&&a.push(i.length/2);for(var c=0;c<u.length;c++){var h=u[c],f=n.layoutVertexArray.emplaceBack(h.x,h.y);c>=1&&n.elementArray2.emplaceBack(f-1,f),i.push(h.x),i.push(h.y)}}for(var d=s(i,a),p=0;p<d.length;p++)n.elementArray.emplaceBack(d[p]+o)}},{"../../util/classify_rings":430,"../../util/util":442,"../bucket":329,"../load_geometry":337,earcut:126}],332:[function(t,e,r){"use strict";function n(){i.apply(this,arguments)}var i=t("../bucket"),a=t("../../util/util"),o=t("../load_geometry"),s=i.EXTENT,l=Math.cos(Math.PI/180*37.5),u=Math.pow(2,14)/.5;e.exports=n,n.prototype=a.inherit(i,{}),n.prototype.addLineVertex=function(t,e,r,n,i,a,o){return t.emplaceBack(e.x<<1|n,e.y<<1|i,Math.round(63*r.x)+128,Math.round(63*r.y)+128,1+(0===a?0:a<0?-1:1)|(.5*o&63)<<2,.5*o>>6)},n.prototype.programInterfaces={line:{layoutVertexArrayType:new i.VertexArrayType([{name:"a_pos",components:2,type:"Int16"},{name:"a_data",components:4,type:"Uint8"}]),elementArrayType:new i.ElementArrayType}},n.prototype.addFeature=function(t){for(var e=o(t,15),r=0;r<e.length;r++)this.addLine(e[r],this.layer.layout["line-join"],this.layer.layout["line-cap"],this.layer.layout["line-miter-limit"],this.layer.layout["line-round-limit"])},n.prototype.addLine=function(t,e,r,n,i){for(var a=t.length;a>2&&t[a-1].equals(t[a-2]);)a--;if(!(t.length<2)){"bevel"===e&&(n=1.05);var o=s/(512*this.overscaling)*15,u=t[0],c=t[a-1],h=u.equals(c);if(this.prepareArrayGroup("line",10*a),2!==a||!h){this.distance=0;var f,d,p,m,g,v,y,b=r,x=h?"butt":r,_=!0;this.e1=this.e2=this.e3=-1,h&&(f=t[a-2],g=u.sub(f)._unit()._perp());for(var w=0;w<a;w++)if(!(p=h&&w===a-1?t[1]:t[w+1])||!t[w].equals(p)){g&&(m=g),f&&(d=f),f=t[w],g=p?p.sub(f)._unit()._perp():m,m=m||g;var M=m.add(g)._unit(),k=M.x*g.x+M.y*g.y,A=1/k,T=k<l&&d&&p;if(T&&w>0){var S=f.dist(d);if(S>2*o){var E=f.sub(f.sub(d)._mult(o/S)._round());this.distance+=E.dist(d),this.addCurrentVertex(E,this.distance,m.mult(1),0,0,!1),d=E}}var L=d&&p,C=L?e:p?b:x;if(L&&"round"===C&&(A<i?C="miter":A<=2&&(C="fakeround")),"miter"===C&&A>n&&(C="bevel"),"bevel"===C&&(A>2&&(C="flipbevel"),A<n&&(C="miter")),d&&(this.distance+=f.dist(d)),"miter"===C)M._mult(A),this.addCurrentVertex(f,this.distance,M,0,0,!1);else if("flipbevel"===C){if(A>100)M=g.clone();else{var I=m.x*g.y-m.y*g.x>0?-1:1,z=A*m.add(g).mag()/m.sub(g).mag();M._perp()._mult(z*I)}this.addCurrentVertex(f,this.distance,M,0,0,!1),this.addCurrentVertex(f,this.distance,M.mult(-1),0,0,!1)}else if("bevel"===C||"fakeround"===C){var D=m.x*g.y-m.y*g.x>0,P=-Math.sqrt(A*A-1);if(D?(y=0,v=P):(v=0,y=P),_||this.addCurrentVertex(f,this.distance,m,v,y,!1),"fakeround"===C){for(var O,R=Math.floor(8*(.5-(k-.5))),F=0;F<R;F++)O=g.mult((F+1)/(R+1))._add(m)._unit(),this.addPieSliceVertex(f,this.distance,O,D);this.addPieSliceVertex(f,this.distance,M,D);for(var j=R-1;j>=0;j--)O=m.mult((j+1)/(R+1))._add(g)._unit(),this.addPieSliceVertex(f,this.distance,O,D)}p&&this.addCurrentVertex(f,this.distance,g,-v,-y,!1)}else"butt"===C?(_||this.addCurrentVertex(f,this.distance,m,0,0,!1),p&&this.addCurrentVertex(f,this.distance,g,0,0,!1)):"square"===C?(_||(this.addCurrentVertex(f,this.distance,m,1,1,!1),this.e1=this.e2=-1),p&&this.addCurrentVertex(f,this.distance,g,-1,-1,!1)):"round"===C&&(_||(this.addCurrentVertex(f,this.distance,m,0,0,!1),this.addCurrentVertex(f,this.distance,m,1,1,!0),this.e1=this.e2=-1),p&&(this.addCurrentVertex(f,this.distance,g,-1,-1,!0),this.addCurrentVertex(f,this.distance,g,0,0,!1)));if(T&&w<a-1){var N=f.dist(p);if(N>2*o){var B=f.add(p.sub(f)._mult(o/N)._round());this.distance+=B.dist(f),this.addCurrentVertex(B,this.distance,g.mult(1),0,0,!1),f=B}}_=!1}}}},n.prototype.addCurrentVertex=function(t,e,r,n,i,a){var o,s=a?1:0,l=this.arrayGroups.line[this.arrayGroups.line.length-1],c=l.layoutVertexArray,h=l.elementArray;o=r.clone(),n&&o._sub(r.perp()._mult(n)),this.e3=this.addLineVertex(c,t,o,s,0,n,e),this.e1>=0&&this.e2>=0&&h.emplaceBack(this.e1,this.e2,this.e3),this.e1=this.e2,this.e2=this.e3,o=r.mult(-1),i&&o._sub(r.perp()._mult(i)),this.e3=this.addLineVertex(c,t,o,s,1,-i,e),this.e1>=0&&this.e2>=0&&h.emplaceBack(this.e1,this.e2,this.e3),this.e1=this.e2,this.e2=this.e3,e>u/2&&(this.distance=0,this.addCurrentVertex(t,this.distance,r,n,i,a))},n.prototype.addPieSliceVertex=function(t,e,r,n){var i=n?1:0;r=r.mult(n?-1:1);var a=this.arrayGroups.line[this.arrayGroups.line.length-1],o=a.layoutVertexArray,s=a.elementArray;this.e3=this.addLineVertex(o,t,r,0,i,0,e),this.e1>=0&&this.e2>=0&&s.emplaceBack(this.e1,this.e2,this.e3),n?this.e2=this.e3:this.e1=this.e3}},{"../../util/util":442,"../bucket":329,"../load_geometry":337}],333:[function(t,e,r){"use strict";function n(t){o.apply(this,arguments),this.showCollisionBoxes=t.showCollisionBoxes,this.overscaling=t.overscaling,this.collisionBoxArray=t.collisionBoxArray,this.symbolQuadsArray=t.symbolQuadsArray,this.symbolInstancesArray=t.symbolInstancesArray,this.sdfIcons=t.sdfIcons,this.iconsNeedLinear=t.iconsNeedLinear,this.adjustedTextSize=t.adjustedTextSize,this.adjustedIconSize=t.adjustedIconSize,this.fontstack=t.fontstack}function i(t,e,r,n,i,a,o,s,l,u,c){return t.emplaceBack(e,r,Math.round(64*n),Math.round(64*i),a/4,o/4,10*(u||0),c,10*(s||0),10*Math.min(l||25,25))}var a=t("point-geometry"),o=t("../bucket"),s=t("../../symbol/anchor"),l=t("../../symbol/get_anchors"),u=t("../../util/token"),c=t("../../symbol/quads"),h=t("../../symbol/shaping"),f=t("../../symbol/resolve_text"),d=t("../../symbol/mergelines"),p=t("../../symbol/clip_line"),m=t("../../util/util"),g=t("../load_geometry"),v=t("../../symbol/collision_feature"),y=h.shapeText,b=h.shapeIcon,x=c.getGlyphQuads,_=c.getIconQuads,w=o.EXTENT;e.exports=n,n.MAX_QUADS=65535,n.prototype=m.inherit(o,{}),n.prototype.serialize=function(){var t=o.prototype.serialize.apply(this);return t.sdfIcons=this.sdfIcons,t.iconsNeedLinear=this.iconsNeedLinear,t.adjustedTextSize=this.adjustedTextSize,t.adjustedIconSize=this.adjustedIconSize,t.fontstack=this.fontstack,t};var M=new o.VertexArrayType([{name:"a_pos",components:2,type:"Int16"},{name:"a_offset",components:2,type:"Int16"},{name:"a_texture_pos",components:2,type:"Uint16"},{name:"a_data",components:4,type:"Uint8"}]),k=new o.ElementArrayType;n.prototype.addCollisionBoxVertex=function(t,e,r,n,i){return t.emplaceBack(e.x,e.y,Math.round(r.x),Math.round(r.y),10*n,10*i)},n.prototype.programInterfaces={glyph:{layoutVertexArrayType:M,elementArrayType:k},icon:{layoutVertexArrayType:M,elementArrayType:k},collisionBox:{layoutVertexArrayType:new o.VertexArrayType([{name:"a_pos",components:2,type:"Int16"},{name:"a_extrude",components:2,type:"Int16"},{name:"a_data",components:2,type:"Uint8"}])}},n.prototype.populateArrays=function(t,e,r){var n={lastIntegerZoom:1/0,lastIntegerZoomTime:0,lastZoom:0};this.adjustedTextMaxSize=this.layer.getLayoutValue("text-size",{zoom:18,zoomHistory:n}),this.adjustedTextSize=this.layer.getLayoutValue("text-size",{zoom:this.zoom+1,zoomHistory:n}),this.adjustedIconMaxSize=this.layer.getLayoutValue("icon-size",{zoom:18,zoomHistory:n}),this.adjustedIconSize=this.layer.getLayoutValue("icon-size",{zoom:this.zoom+1,zoomHistory:n});var i=512*this.overscaling;this.tilePixelRatio=w/i,this.compareText={},this.iconsNeedLinear=!1,this.symbolInstancesStartIndex=this.symbolInstancesArray.length;var a=this.layer.layout,o=this.features,s=this.textFeatures,l=.5,c=.5;switch(a["text-anchor"]){case"right":case"top-right":case"bottom-right":l=1;break;case"left":case"top-left":case"bottom-left":l=0}switch(a["text-anchor"]){case"bottom":case"bottom-right":case"bottom-left":c=1;break;case"top":case"top-right":case"top-left":c=0}for(var h="right"===a["text-justify"]?1:"left"===a["text-justify"]?0:.5,f=24*a["text-line-height"],p="line"!==a["symbol-placement"]?24*a["text-max-width"]:0,v=24*a["text-letter-spacing"],x=[24*a["text-offset"][0],24*a["text-offset"][1]],_=this.fontstack=a["text-font"].join(","),M=[],k=0;k<o.length;k++)M.push(g(o[k]));if("line"===a["symbol-placement"]){var A=d(o,s,M);M=A.geometries,o=A.features,s=A.textFeatures}for(var T,S,E=0;E<o.length;E++)if(M[E]){if(T=s[E]?y(s[E],e[_],p,f,l,c,h,v,x):null,a["icon-image"]){var L=u(o[E].properties,a["icon-image"]),C=r[L];S=b(C,a),C&&(void 0===this.sdfIcons?this.sdfIcons=C.sdf:this.sdfIcons!==C.sdf&&m.warnOnce("Style sheet warning: Cannot mix SDF and non-SDF icons in one buffer"),1!==C.pixelRatio?this.iconsNeedLinear=!0:0===a["icon-rotate"]&&this.layer.isLayoutValueFeatureConstant("icon-rotate")||(this.iconsNeedLinear=!0))}else S=null;(T||S)&&this.addFeature(M[E],T,S,o[E])}this.symbolInstancesEndIndex=this.symbolInstancesArray.length,this.placeFeatures(t,this.showCollisionBoxes),this.trimArrays()},n.prototype.addFeature=function(t,e,r,n){var i=this.layer.layout,a=this.adjustedTextSize/24,o=void 0!==this.adjustedTextMaxSize?this.adjustedTextMaxSize:this.adjustedTextSize,u=this.tilePixelRatio*a,c=this.tilePixelRatio*o/24,h=this.tilePixelRatio*this.adjustedIconSize,f=this.tilePixelRatio*i["symbol-spacing"],d=i["symbol-avoid-edges"],m=i["text-padding"]*this.tilePixelRatio,g=i["icon-padding"]*this.tilePixelRatio,v=i["text-max-angle"]/180*Math.PI,y="map"===i["text-rotation-alignment"]&&"line"===i["symbol-placement"],b="map"===i["icon-rotation-alignment"]&&"line"===i["symbol-placement"],x=i["text-allow-overlap"]||i["icon-allow-overlap"]||i["text-ignore-placement"]||i["icon-ignore-placement"],_="line"===i["symbol-placement"],M=f/2;_&&(t=p(t,0,0,w,w));for(var k=0;k<t.length;k++){var A,T=t[k];A=_?l(T,f,v,e,r,24,c,this.overscaling,w):[new s(T[0].x,T[0].y,0)];for(var S=0,E=A.length;S<E;S++){var L=A[S];if(!(e&&_&&this.anchorIsTooClose(e.text,M,L))){var C=!(L.x<0||L.x>w||L.y<0||L.y>w);if(!d||C){var I=C||x;this.addSymbolInstance(L,T,e,r,this.layer,I,this.symbolInstancesArray.length,this.collisionBoxArray,n.index,this.sourceLayerIndex,this.index,u,m,y,h,g,b,{zoom:this.zoom},n.properties)}}}}},n.prototype.anchorIsTooClose=function(t,e,r){var n=this.compareText;if(t in n){for(var i=n[t],a=i.length-1;a>=0;a--)if(r.dist(i[a])<e)return!0}else n[t]=[];return n[t].push(r),!1},n.prototype.placeFeatures=function(t,e){this.recalculateStyleLayers(),this.createArrays();var r=this.layer.layout,n=t.maxScale,i="map"===r["text-rotation-alignment"]&&"line"===r["symbol-placement"],a="map"===r["icon-rotation-alignment"]&&"line"===r["symbol-placement"];if(r["text-allow-overlap"]||r["icon-allow-overlap"]||r["text-ignore-placement"]||r["icon-ignore-placement"]){var o=this.symbolInstancesArray.toArray(this.symbolInstancesStartIndex,this.symbolInstancesEndIndex),s=t.angle,l=Math.sin(s),u=Math.cos(s);this.sortedSymbolInstances=o.sort(function(t,e){return(l*t.anchorPointX+u*t.anchorPointY|0)-(l*e.anchorPointX+u*e.anchorPointY|0)||e.index-t.index})}for(var c=this.symbolInstancesStartIndex;c<this.symbolInstancesEndIndex;c++){var h=this.sortedSymbolInstances?this.sortedSymbolInstances[c-this.symbolInstancesStartIndex]:this.symbolInstancesArray.get(c),f={boxStartIndex:h.textBoxStartIndex,boxEndIndex:h.textBoxEndIndex},d={boxStartIndex:h.iconBoxStartIndex,boxEndIndex:h.iconBoxEndIndex},p=!(h.textBoxStartIndex===h.textBoxEndIndex),m=!(h.iconBoxStartIndex===h.iconBoxEndIndex),g=r["text-optional"]||!p,v=r["icon-optional"]||!m,y=p?t.placeCollisionFeature(f,r["text-allow-overlap"],r["symbol-avoid-edges"]):t.minScale,b=m?t.placeCollisionFeature(d,r["icon-allow-overlap"],r["symbol-avoid-edges"]):t.minScale;g||v?!v&&y?y=Math.max(b,y):!g&&b&&(b=Math.max(b,y)):b=y=Math.max(b,y),p&&(t.insertCollisionFeature(f,y,r["text-ignore-placement"]),y<=n&&this.addSymbols("glyph",h.glyphQuadStartIndex,h.glyphQuadEndIndex,y,r["text-keep-upright"],i,t.angle)),m&&(t.insertCollisionFeature(d,b,r["icon-ignore-placement"]),b<=n&&this.addSymbols("icon",h.iconQuadStartIndex,h.iconQuadEndIndex,b,r["icon-keep-upright"],a,t.angle))}e&&this.addToDebugBuffers(t)},n.prototype.addSymbols=function(t,e,r,n,a,o,s){for(var l=this.prepareArrayGroup(t,4*(r-e)),u=l.elementArray,c=l.layoutVertexArray,h=this.zoom,f=Math.max(Math.log(n)/Math.LN2+h,0),d=e;d<r;d++){var p=this.symbolQuadsArray.get(d).SymbolQuad,m=(p.anchorAngle+s+Math.PI)%(2*Math.PI);if(!(a&&o&&(m<=Math.PI/2||m>3*Math.PI/2))){var g=p.tl,v=p.tr,y=p.bl,b=p.br,x=p.tex,_=p.anchorPoint,w=Math.max(h+Math.log(p.minScale)/Math.LN2,f),M=Math.min(h+Math.log(p.maxScale)/Math.LN2,25);if(!(M<=w)){w===f&&(w=0);var k=Math.round(p.glyphAngle/(2*Math.PI)*256),A=i(c,_.x,_.y,g.x,g.y,x.x,x.y,w,M,f,k);i(c,_.x,_.y,v.x,v.y,x.x+x.w,x.y,w,M,f,k),i(c,_.x,_.y,y.x,y.y,x.x,x.y+x.h,w,M,f,k),i(c,_.x,_.y,b.x,b.y,x.x+x.w,x.y+x.h,w,M,f,k),u.emplaceBack(A,A+1,A+2),u.emplaceBack(A+1,A+2,A+3)}}}},n.prototype.updateIcons=function(t){this.recalculateStyleLayers();var e=this.layer.layout["icon-image"];if(e)for(var r=0;r<this.features.length;r++){var n=u(this.features[r].properties,e);n&&(t[n]=!0)}},n.prototype.updateFont=function(t){this.recalculateStyleLayers();var e=this.layer.layout["text-font"],r=t[e]=t[e]||{};this.textFeatures=f(this.features,this.layer.layout,r)},n.prototype.addToDebugBuffers=function(t){for(var e=this.prepareArrayGroup("collisionBox",0),r=e.layoutVertexArray,n=-t.angle,i=t.yStretch,o=this.symbolInstancesStartIndex;o<this.symbolInstancesEndIndex;o++){var s=this.symbolInstancesArray.get(o);s.textCollisionFeature={boxStartIndex:s.textBoxStartIndex,boxEndIndex:s.textBoxEndIndex},s.iconCollisionFeature={boxStartIndex:s.iconBoxStartIndex,boxEndIndex:s.iconBoxEndIndex};for(var l=0;l<2;l++){var u=s[0===l?"textCollisionFeature":"iconCollisionFeature"];if(u)for(var c=u.boxStartIndex;c<u.boxEndIndex;c++){var h=this.collisionBoxArray.get(c),f=h.anchorPoint,d=new a(h.x1,h.y1*i)._rotate(n),p=new a(h.x2,h.y1*i)._rotate(n),m=new a(h.x1,h.y2*i)._rotate(n),g=new a(h.x2,h.y2*i)._rotate(n),v=Math.max(0,Math.min(25,this.zoom+Math.log(h.maxScale)/Math.LN2)),y=Math.max(0,Math.min(25,this.zoom+Math.log(h.placementScale)/Math.LN2));this.addCollisionBoxVertex(r,f,d,v,y),this.addCollisionBoxVertex(r,f,p,v,y),this.addCollisionBoxVertex(r,f,p,v,y),this.addCollisionBoxVertex(r,f,g,v,y),this.addCollisionBoxVertex(r,f,g,v,y),this.addCollisionBoxVertex(r,f,m,v,y),this.addCollisionBoxVertex(r,f,m,v,y),this.addCollisionBoxVertex(r,f,d,v,y)}}}},n.prototype.addSymbolInstance=function(t,e,r,i,a,o,s,l,u,c,h,f,d,p,g,y,b,w,M){var k,A,T,S,E,L,C,I;if(r&&(C=o?x(t,r,f,e,a,p):[],E=new v(l,e,t,u,c,h,r,f,d,p,!1)),k=this.symbolQuadsArray.length,C&&C.length)for(var z=0;z<C.length;z++)this.addSymbolQuad(C[z]);A=this.symbolQuadsArray.length;var D=E?E.boxStartIndex:this.collisionBoxArray.length,P=E?E.boxEndIndex:this.collisionBoxArray.length;i&&(I=o?_(t,i,g,e,a,b,r,w,M):[],L=new v(l,e,t,u,c,h,i,g,y,b,!0)),T=this.symbolQuadsArray.length,I&&1===I.length&&this.addSymbolQuad(I[0]),S=this.symbolQuadsArray.length;var O=L?L.boxStartIndex:this.collisionBoxArray.length,R=L?L.boxEndIndex:this.collisionBoxArray.length;return S>n.MAX_QUADS&&m.warnOnce("Too many symbols being rendered in a tile. See https://github.com/mapbox/mapbox-gl-js/issues/2907"),A>n.MAX_QUADS&&m.warnOnce("Too many glyphs being rendered in a tile. See https://github.com/mapbox/mapbox-gl-js/issues/2907"),this.symbolInstancesArray.emplaceBack(D,P,O,R,k,A,T,S,t.x,t.y,s)},n.prototype.addSymbolQuad=function(t){return this.symbolQuadsArray.emplaceBack(t.anchorPoint.x,t.anchorPoint.y,t.tl.x,t.tl.y,t.tr.x,t.tr.y,t.bl.x,t.bl.y,t.br.x,t.br.y,t.tex.h,t.tex.w,t.tex.x,t.tex.y,t.anchorAngle,t.glyphAngle,t.maxScale,t.minScale)}},{"../../symbol/anchor":391,"../../symbol/clip_line":393,"../../symbol/collision_feature":395,"../../symbol/get_anchors":397,"../../symbol/mergelines":400,"../../symbol/quads":401,"../../symbol/resolve_text":402,"../../symbol/shaping":403,"../../util/token":441,"../../util/util":442,"../bucket":329,"../load_geometry":337,"point-geometry":484}],334:[function(t,e,r){"use strict";function n(t,e,r){this.arrayBuffer=t.arrayBuffer,this.length=t.length,this.attributes=e.members,this.itemSize=e.bytesPerElement,this.type=r,this.arrayType=e}e.exports=n,n.prototype.bind=function(t){var e=t[this.type];this.buffer?t.bindBuffer(e,this.buffer):(this.buffer=t.createBuffer(),t.bindBuffer(e,this.buffer),t.bufferData(e,this.arrayBuffer,t.STATIC_DRAW),this.arrayBuffer=null)};var i={Int8:"BYTE",Uint8:"UNSIGNED_BYTE",Int16:"SHORT",Uint16:"UNSIGNED_SHORT"};n.prototype.setVertexAttribPointers=function(t,e){for(var r=0;r<this.attributes.length;r++){var n=this.attributes[r],a=e[n.name];void 0!==a&&t.vertexAttribPointer(a,n.components,t[i[n.type]],!1,this.arrayType.bytesPerElement,n.offset)}},n.prototype.destroy=function(t){this.buffer&&t.deleteBuffer(this.buffer)},n.BufferType={VERTEX:"ARRAY_BUFFER",ELEMENT:"ELEMENT_ARRAY_BUFFER"}},{}],335:[function(t,e,r){"use strict";function n(t,e){this.layoutVertexBuffer=new a(t.layoutVertexArray,e.layoutVertexArrayType,a.BufferType.VERTEX),t.elementArray&&(this.elementBuffer=new a(t.elementArray,e.elementArrayType,a.BufferType.ELEMENT));var r,n=this.vaos={};t.elementArray2&&(this.elementBuffer2=new a(t.elementArray2,e.elementArrayType2,a.BufferType.ELEMENT),r=this.secondVaos={}),this.paintVertexBuffers=i.mapObject(t.paintVertexArrays,function(i,s){return n[s]=new o,t.elementArray2&&(r[s]=new o),new a(i,e.paintVertexArrayTypes[s],a.BufferType.VERTEX)})}var i=t("../util/util"),a=t("./buffer"),o=t("../render/vertex_array_object");e.exports=n,n.prototype.destroy=function(t){this.layoutVertexBuffer.destroy(t),this.elementBuffer&&this.elementBuffer.destroy(t),this.elementBuffer2&&this.elementBuffer2.destroy(t);for(var e in this.paintVertexBuffers)this.paintVertexBuffers[e].destroy(t);for(var r in this.vaos)this.vaos[r].destroy(t);for(var n in this.secondVaos)this.secondVaos[n].destroy(t)}},{"../render/vertex_array_object":357,"../util/util":442,"./buffer":334}],336:[function(t,e,r){"use strict";function n(t,e,r){if(t.grid){var n=t,i=e;t=n.coord,e=n.overscaling,this.grid=new p(n.grid),this.featureIndexArray=new k(n.featureIndexArray),this.rawTileData=i,this.bucketLayerIDs=n.bucketLayerIDs}else this.grid=new p(h,16,0),this.featureIndexArray=new k;this.coord=t,this.overscaling=e,this.x=t.x,this.y=t.y,this.z=t.z-Math.log(e)/Math.LN2,this.setCollisionTile(r)}function i(t){return Math.sqrt(t[0]*t[0]+t[1]*t[1])}function a(t,e){return e-t}function o(t){return t["line-gap-width"]>0?t["line-gap-width"]+2*t["line-width"]:t["line-width"]}function s(t,e,r,n,i){if(!e[0]&&!e[1])return t;e=u.convert(e),"viewport"===r&&e._rotate(-n);for(var a=[],o=0;o<t.length;o++){for(var s=t[o],l=[],c=0;c<s.length;c++)l.push(s[c].sub(e._mult(i)));a.push(l)}return a}function l(t,e){for(var r=[],n=new u(0,0),i=0;i<t.length;i++){for(var a=t[i],o=[],s=0;s<a.length;s++){var l=a[s-1],c=a[s],h=a[s+1],f=0===s?n:c.sub(l)._unit()._perp(),d=s===a.length-1?n:h.sub(c)._unit()._perp(),p=f._add(d)._unit(),m=p.x*d.x+p.y*d.y;p._mult(1/m),o.push(p._mult(e)._add(c))}r.push(o)}return r}var u=t("point-geometry"),c=t("./load_geometry"),h=t("./bucket").EXTENT,f=t("feature-filter"),d=t("../util/struct_array"),p=t("grid-index"),m=t("../util/dictionary_coder"),g=t("vector-tile"),v=t("pbf"),y=t("../util/vectortile_to_geojson"),b=t("../util/util").arraysIntersect,x=t("../util/intersection_tests"),_=x.multiPolygonIntersectsBufferedMultiPoint,w=x.multiPolygonIntersectsMultiPolygon,M=x.multiPolygonIntersectsBufferedMultiLine,k=new d({members:[{type:"Uint32",name:"featureIndex"},{type:"Uint16",name:"sourceLayerIndex"},{type:"Uint16",name:"bucketIndex"}]});e.exports=n,n.prototype.insert=function(t,e,r,n){var i=this.featureIndexArray.length;this.featureIndexArray.emplaceBack(e,r,n);for(var a=c(t),o=0;o<a.length;o++){for(var s=a[o],l=[1/0,1/0,-1/0,-1/0],u=0;u<s.length;u++){var h=s[u];l[0]=Math.min(l[0],h.x),l[1]=Math.min(l[1],h.y),l[2]=Math.max(l[2],h.x),l[3]=Math.max(l[3],h.y)}this.grid.insert(i,l[0],l[1],l[2],l[3])}},n.prototype.setCollisionTile=function(t){this.collisionTile=t},n.prototype.serialize=function(){var t={coord:this.coord,overscaling:this.overscaling,grid:this.grid.toArrayBuffer(),featureIndexArray:this.featureIndexArray.serialize(),bucketLayerIDs:this.bucketLayerIDs};return{data:t,transferables:[t.grid,t.featureIndexArray.arrayBuffer]}},n.prototype.query=function(t,e){this.vtLayers||(this.vtLayers=new g.VectorTile(new v(new Uint8Array(this.rawTileData))).layers,this.sourceLayerCoder=new m(this.vtLayers?Object.keys(this.vtLayers).sort():["_geojsonTileLayer"]));var r={},n=t.params||{},s=h/t.tileSize/t.scale,l=f(n.filter),c=0;for(var d in e){var p=e[d],y=p.paint,b=0;"line"===p.type?b=o(y)/2+Math.abs(y["line-offset"])+i(y["line-translate"]):"fill"===p.type?b=i(y["fill-translate"]):"circle"===p.type&&(b=y["circle-radius"]+i(y["circle-translate"])),c=Math.max(c,b*s)}for(var x=t.queryGeometry.map(function(t){return t.map(function(t){return new u(t.x,t.y)})}),_=1/0,w=1/0,M=-1/0,k=-1/0,A=0;A<x.length;A++)for(var T=x[A],S=0;S<T.length;S++){var E=T[S];_=Math.min(_,E.x),w=Math.min(w,E.y),M=Math.max(M,E.x),k=Math.max(k,E.y)}var L=this.grid.query(_-c,w-c,M+c,k+c);L.sort(a),this.filterMatching(r,L,this.featureIndexArray,x,l,n.layers,e,t.bearing,s);var C=this.collisionTile.queryRenderedSymbols(_,w,M,k,t.scale);return C.sort(),this.filterMatching(r,C,this.collisionTile.collisionBoxArray,x,l,n.layers,e,t.bearing,s),r},n.prototype.filterMatching=function(t,e,r,n,i,a,u,h,f){for(var d,p=0;p<e.length;p++){var m=e[p];if(m!==d){d=m;var g=r.get(m),v=this.bucketLayerIDs[g.bucketIndex];if(!a||b(a,v)){var x=this.sourceLayerCoder.decode(g.sourceLayerIndex),k=this.vtLayers[x],A=k.feature(g.featureIndex);if(i(A))for(var T=null,S=0;S<v.length;S++){var E=v[S];if(!(a&&a.indexOf(E)<0)){var L=u[E];if(L){var C;if("symbol"!==L.type){T||(T=c(A));var I=L.paint;if("line"===L.type){C=s(n,I["line-translate"],I["line-translate-anchor"],h,f);var z=o(I)/2*f;if(I["line-offset"]&&(T=l(T,I["line-offset"]*f)),!M(C,T,z))continue}else if("fill"===L.type){if(C=s(n,I["fill-translate"],I["fill-translate-anchor"],h,f),!w(C,T))continue}else if("circle"===L.type){C=s(n,I["circle-translate"],I["circle-translate-anchor"],h,f);var D=I["circle-radius"]*f;if(!_(C,T,D))continue}}var P=new y(A,this.z,this.x,this.y);P.layer=L.serialize({includeRefProperties:!0});var O=t[E];void 0===O&&(O=t[E]=[]),O.push(P)}}}}}}}},{"../util/dictionary_coder":432,"../util/intersection_tests":437,"../util/struct_array":440,"../util/util":442,"../util/vectortile_to_geojson":443,"./bucket":329,"./load_geometry":337,"feature-filter":132,"grid-index":287,pbf:478,"point-geometry":484,"vector-tile":550}],337:[function(t,e,r){"use strict";function n(t){return{min:-1*Math.pow(2,t-1),max:Math.pow(2,t-1)-1}}var i=t("../util/util"),a=t("./bucket").EXTENT,o=t("assert"),s={15:n(15),16:n(16)};e.exports=function(t,e){var r=s[e||16];o(r);for(var n=a/t.extent,l=t.loadGeometry(),u=0;u<l.length;u++)for(var c=l[u],h=0;h<c.length;h++){var f=c[h];f.x=Math.round(f.x*n),f.y=Math.round(f.y*n),(f.x<r.min||f.x>r.max||f.y<r.min||f.y>r.max)&&i.warnOnce("Geometry exceeds allowed extent, reduce your vector tile buffer size")}return l}},{"../util/util":442,"./bucket":329,assert:47}],338:[function(t,e,r){"use strict";function n(t,e,r){this.column=t,this.row=e,this.zoom=r}e.exports=n,n.prototype={clone:function(){return new n(this.column,this.row,this.zoom)},zoomTo:function(t){return this.clone()._zoomTo(t)},sub:function(t){return this.clone()._sub(t)},_zoomTo:function(t){var e=Math.pow(2,t-this.zoom);return this.column*=e,this.row*=e,this.zoom=t,this},_sub:function(t){return t=t.zoomTo(this.zoom),this.column-=t.column,this.row-=t.row,this}}},{}],339:[function(t,e,r){"use strict";function n(t,e){if(isNaN(t)||isNaN(e))throw new Error("Invalid LngLat object: ("+t+", "+e+")");if(this.lng=+t,this.lat=+e,this.lat>90||this.lat<-90)throw new Error("Invalid LngLat latitude value: must be between -90 and 90")}e.exports=n
;var i=t("../util/util").wrap;n.prototype.wrap=function(){return new n(i(this.lng,-180,180),this.lat)},n.prototype.toArray=function(){return[this.lng,this.lat]},n.prototype.toString=function(){return"LngLat("+this.lng+", "+this.lat+")"},n.convert=function(t){return t instanceof n?t:Array.isArray(t)?new n(t[0],t[1]):t}},{"../util/util":442}],340:[function(t,e,r){"use strict";function n(t,e){t&&(e?this.extend(t).extend(e):4===t.length?this.extend([t[0],t[1]]).extend([t[2],t[3]]):this.extend(t[0]).extend(t[1]))}e.exports=n;var i=t("./lng_lat");n.prototype={extend:function(t){var e,r,a=this._sw,o=this._ne;if(t instanceof i)e=t,r=t;else{if(!(t instanceof n))return t?this.extend(i.convert(t)||n.convert(t)):this;if(e=t._sw,r=t._ne,!e||!r)return this}return a||o?(a.lng=Math.min(e.lng,a.lng),a.lat=Math.min(e.lat,a.lat),o.lng=Math.max(r.lng,o.lng),o.lat=Math.max(r.lat,o.lat)):(this._sw=new i(e.lng,e.lat),this._ne=new i(r.lng,r.lat)),this},getCenter:function(){return new i((this._sw.lng+this._ne.lng)/2,(this._sw.lat+this._ne.lat)/2)},getSouthWest:function(){return this._sw},getNorthEast:function(){return this._ne},getNorthWest:function(){return new i(this.getWest(),this.getNorth())},getSouthEast:function(){return new i(this.getEast(),this.getSouth())},getWest:function(){return this._sw.lng},getSouth:function(){return this._sw.lat},getEast:function(){return this._ne.lng},getNorth:function(){return this._ne.lat},toArray:function(){return[this._sw.toArray(),this._ne.toArray()]},toString:function(){return"LngLatBounds("+this._sw.toString()+", "+this._ne.toString()+")"}},n.convert=function(t){return!t||t instanceof n?t:new n(t)}},{"./lng_lat":339}],341:[function(t,e,r){"use strict";function n(t,e){this.tileSize=512,this._minZoom=t||0,this._maxZoom=e||22,this.latRange=[-85.05113,85.05113],this.width=0,this.height=0,this._center=new i(0,0),this.zoom=0,this.angle=0,this._altitude=1.5,this._pitch=0,this._unmodified=!0}var i=t("./lng_lat"),a=t("point-geometry"),o=t("./coordinate"),s=t("../util/util").wrap,l=t("../util/interpolate"),u=t("../source/tile_coord"),c=t("../data/bucket").EXTENT,h=t("gl-matrix"),f=h.vec4,d=h.mat4,p=h.mat2;e.exports=n,n.prototype={get minZoom(){return this._minZoom},set minZoom(t){this._minZoom!==t&&(this._minZoom=t,this.zoom=Math.max(this.zoom,t))},get maxZoom(){return this._maxZoom},set maxZoom(t){this._maxZoom!==t&&(this._maxZoom=t,this.zoom=Math.min(this.zoom,t))},get worldSize(){return this.tileSize*this.scale},get centerPoint(){return this.size._div(2)},get size(){return new a(this.width,this.height)},get bearing(){return-this.angle/Math.PI*180},set bearing(t){var e=-s(t,-180,180)*Math.PI/180;this.angle!==e&&(this._unmodified=!1,this.angle=e,this._calcMatrices(),this.rotationMatrix=p.create(),p.rotate(this.rotationMatrix,this.rotationMatrix,this.angle))},get pitch(){return this._pitch/Math.PI*180},set pitch(t){var e=Math.min(60,t)/180*Math.PI;this._pitch!==e&&(this._unmodified=!1,this._pitch=e,this._calcMatrices())},get altitude(){return this._altitude},set altitude(t){var e=Math.max(.75,t);this._altitude!==e&&(this._unmodified=!1,this._altitude=e,this._calcMatrices())},get zoom(){return this._zoom},set zoom(t){var e=Math.min(Math.max(t,this.minZoom),this.maxZoom);this._zoom!==e&&(this._unmodified=!1,this._zoom=e,this.scale=this.zoomScale(e),this.tileZoom=Math.floor(e),this.zoomFraction=e-this.tileZoom,this._calcMatrices(),this._constrain())},get center(){return this._center},set center(t){t.lat===this._center.lat&&t.lng===this._center.lng||(this._unmodified=!1,this._center=t,this._calcMatrices(),this._constrain())},coveringZoomLevel:function(t){return(t.roundZoom?Math.round:Math.floor)(this.zoom+this.scaleZoom(this.tileSize/t.tileSize))},coveringTiles:function(t){var e=this.coveringZoomLevel(t),r=e;if(e<t.minzoom)return[];e>t.maxzoom&&(e=t.maxzoom);var n=this,i=n.locationCoordinate(n.center)._zoomTo(e),o=new a(i.column-.5,i.row-.5);return u.cover(e,[n.pointCoordinate(new a(0,0))._zoomTo(e),n.pointCoordinate(new a(n.width,0))._zoomTo(e),n.pointCoordinate(new a(n.width,n.height))._zoomTo(e),n.pointCoordinate(new a(0,n.height))._zoomTo(e)],t.reparseOverscaled?r:e).sort(function(t,e){return o.dist(t)-o.dist(e)})},resize:function(t,e){this.width=t,this.height=e,this.pixelsToGLUnits=[2/t,-2/e],this._calcMatrices(),this._constrain()},get unmodified(){return this._unmodified},zoomScale:function(t){return Math.pow(2,t)},scaleZoom:function(t){return Math.log(t)/Math.LN2},project:function(t,e){return new a(this.lngX(t.lng,e),this.latY(t.lat,e))},unproject:function(t,e){return new i(this.xLng(t.x,e),this.yLat(t.y,e))},get x(){return this.lngX(this.center.lng)},get y(){return this.latY(this.center.lat)},get point(){return new a(this.x,this.y)},lngX:function(t,e){return(180+t)*(e||this.worldSize)/360},latY:function(t,e){return(180-180/Math.PI*Math.log(Math.tan(Math.PI/4+t*Math.PI/360)))*(e||this.worldSize)/360},xLng:function(t,e){return 360*t/(e||this.worldSize)-180},yLat:function(t,e){var r=180-360*t/(e||this.worldSize);return 360/Math.PI*Math.atan(Math.exp(r*Math.PI/180))-90},panBy:function(t){var e=this.centerPoint._add(t);this.center=this.pointLocation(e)},setLocationAtPoint:function(t,e){var r=this.locationCoordinate(t),n=this.pointCoordinate(e),i=this.pointCoordinate(this.centerPoint),a=n._sub(r);this._unmodified=!1,this.center=this.coordinateLocation(i._sub(a))},locationPoint:function(t){return this.coordinatePoint(this.locationCoordinate(t))},pointLocation:function(t){return this.coordinateLocation(this.pointCoordinate(t))},locationCoordinate:function(t){var e=this.zoomScale(this.tileZoom)/this.worldSize,r=i.convert(t);return new o(this.lngX(r.lng)*e,this.latY(r.lat)*e,this.tileZoom)},coordinateLocation:function(t){var e=this.zoomScale(t.zoom);return new i(this.xLng(t.column,e),this.yLat(t.row,e))},pointCoordinate:function(t){var e=[t.x,t.y,0,1],r=[t.x,t.y,1,1];f.transformMat4(e,e,this.pixelMatrixInverse),f.transformMat4(r,r,this.pixelMatrixInverse);var n=e[3],i=r[3],a=e[0]/n,s=r[0]/i,u=e[1]/n,c=r[1]/i,h=e[2]/n,d=r[2]/i,p=h===d?0:(0-h)/(d-h),m=this.worldSize/this.zoomScale(this.tileZoom);return new o(l(a,s,p)/m,l(u,c,p)/m,this.tileZoom)},coordinatePoint:function(t){var e=this.worldSize/this.zoomScale(t.zoom),r=[t.column*e,t.row*e,0,1];return f.transformMat4(r,r,this.pixelMatrix),new a(r[0]/r[3],r[1]/r[3])},calculatePosMatrix:function(t,e){void 0===e&&(e=1/0),t instanceof u&&(t=t.toCoordinate(e));var r=Math.min(t.zoom,e),n=this.worldSize/Math.pow(2,r),i=new Float64Array(16);return d.identity(i),d.translate(i,i,[t.column*n,t.row*n,0]),d.scale(i,i,[n/c,n/c,1]),d.multiply(i,this.projMatrix,i),new Float32Array(i)},_constrain:function(){if(this.center&&this.width&&this.height&&!this._constraining){this._constraining=!0;var t,e,r,n,i,o,s,l,u=this.size,c=this._unmodified;this.latRange&&(t=this.latY(this.latRange[1]),e=this.latY(this.latRange[0]),i=e-t<u.y?u.y/(e-t):0),this.lngRange&&(r=this.lngX(this.lngRange[0]),n=this.lngX(this.lngRange[1]),o=n-r<u.x?u.x/(n-r):0);var h=Math.max(o||0,i||0);if(h)return this.center=this.unproject(new a(o?(n+r)/2:this.x,i?(e+t)/2:this.y)),this.zoom+=this.scaleZoom(h),this._unmodified=c,void(this._constraining=!1);if(this.latRange){var f=this.y,d=u.y/2;f-d<t&&(l=t+d),f+d>e&&(l=e-d)}if(this.lngRange){var p=this.x,m=u.x/2;p-m<r&&(s=r+m),p+m>n&&(s=n-m)}void 0===s&&void 0===l||(this.center=this.unproject(new a(void 0!==s?s:this.x,void 0!==l?l:this.y))),this._unmodified=c,this._constraining=!1}},_calcMatrices:function(){if(this.height){var t=Math.atan(.5/this.altitude),e=Math.sin(t)*this.altitude/Math.sin(Math.PI/2-this._pitch-t),r=Math.cos(Math.PI/2-this._pitch)*e+this.altitude,n=new Float64Array(16);if(d.perspective(n,2*Math.atan(this.height/2/this.altitude),this.width/this.height,.1,r),d.translate(n,n,[0,0,-this.altitude]),d.scale(n,n,[1,-1,1/this.height]),d.rotateX(n,n,this._pitch),d.rotateZ(n,n,this.angle),d.translate(n,n,[-this.x,-this.y,0]),this.projMatrix=n,n=d.create(),d.scale(n,n,[this.width/2,-this.height/2,1]),d.translate(n,n,[1,-1,0]),this.pixelMatrix=d.multiply(new Float64Array(16),n,this.projMatrix),!(n=d.invert(new Float64Array(16),this.pixelMatrix)))throw new Error("failed to invert matrix");this.pixelMatrixInverse=n}}}},{"../data/bucket":329,"../source/tile_coord":369,"../util/interpolate":436,"../util/util":442,"./coordinate":338,"./lng_lat":339,"gl-matrix":193,"point-geometry":484}],342:[function(t,e,r){"use strict";var n={" ":[16,[]],"!":[10,[5,21,5,7,-1,-1,5,2,4,1,5,0,6,1,5,2]],'"':[16,[4,21,4,14,-1,-1,12,21,12,14]],"#":[21,[11,25,4,-7,-1,-1,17,25,10,-7,-1,-1,4,12,18,12,-1,-1,3,6,17,6]],$:[20,[8,25,8,-4,-1,-1,12,25,12,-4,-1,-1,17,18,15,20,12,21,8,21,5,20,3,18,3,16,4,14,5,13,7,12,13,10,15,9,16,8,17,6,17,3,15,1,12,0,8,0,5,1,3,3]],"%":[24,[21,21,3,0,-1,-1,8,21,10,19,10,17,9,15,7,14,5,14,3,16,3,18,4,20,6,21,8,21,10,20,13,19,16,19,19,20,21,21,-1,-1,17,7,15,6,14,4,14,2,16,0,18,0,20,1,21,3,21,5,19,7,17,7]],"&":[26,[23,12,23,13,22,14,21,14,20,13,19,11,17,6,15,3,13,1,11,0,7,0,5,1,4,2,3,4,3,6,4,8,5,9,12,13,13,14,14,16,14,18,13,20,11,21,9,20,8,18,8,16,9,13,11,10,16,3,18,1,20,0,22,0,23,1,23,2]],"'":[10,[5,19,4,20,5,21,6,20,6,18,5,16,4,15]],"(":[14,[11,25,9,23,7,20,5,16,4,11,4,7,5,2,7,-2,9,-5,11,-7]],")":[14,[3,25,5,23,7,20,9,16,10,11,10,7,9,2,7,-2,5,-5,3,-7]],"*":[16,[8,21,8,9,-1,-1,3,18,13,12,-1,-1,13,18,3,12]],"+":[26,[13,18,13,0,-1,-1,4,9,22,9]],",":[10,[6,1,5,0,4,1,5,2,6,1,6,-1,5,-3,4,-4]],"-":[26,[4,9,22,9]],".":[10,[5,2,4,1,5,0,6,1,5,2]],"/":[22,[20,25,2,-7]],0:[20,[9,21,6,20,4,17,3,12,3,9,4,4,6,1,9,0,11,0,14,1,16,4,17,9,17,12,16,17,14,20,11,21,9,21]],1:[20,[6,17,8,18,11,21,11,0]],2:[20,[4,16,4,17,5,19,6,20,8,21,12,21,14,20,15,19,16,17,16,15,15,13,13,10,3,0,17,0]],3:[20,[5,21,16,21,10,13,13,13,15,12,16,11,17,8,17,6,16,3,14,1,11,0,8,0,5,1,4,2,3,4]],4:[20,[13,21,3,7,18,7,-1,-1,13,21,13,0]],5:[20,[15,21,5,21,4,12,5,13,8,14,11,14,14,13,16,11,17,8,17,6,16,3,14,1,11,0,8,0,5,1,4,2,3,4]],6:[20,[16,18,15,20,12,21,10,21,7,20,5,17,4,12,4,7,5,3,7,1,10,0,11,0,14,1,16,3,17,6,17,7,16,10,14,12,11,13,10,13,7,12,5,10,4,7]],7:[20,[17,21,7,0,-1,-1,3,21,17,21]],8:[20,[8,21,5,20,4,18,4,16,5,14,7,13,11,12,14,11,16,9,17,7,17,4,16,2,15,1,12,0,8,0,5,1,4,2,3,4,3,7,4,9,6,11,9,12,13,13,15,14,16,16,16,18,15,20,12,21,8,21]],9:[20,[16,14,15,11,13,9,10,8,9,8,6,9,4,11,3,14,3,15,4,18,6,20,9,21,10,21,13,20,15,18,16,14,16,9,15,4,13,1,10,0,8,0,5,1,4,3]],":":[10,[5,14,4,13,5,12,6,13,5,14,-1,-1,5,2,4,1,5,0,6,1,5,2]],";":[10,[5,14,4,13,5,12,6,13,5,14,-1,-1,6,1,5,0,4,1,5,2,6,1,6,-1,5,-3,4,-4]],"<":[24,[20,18,4,9,20,0]],"=":[26,[4,12,22,12,-1,-1,4,6,22,6]],">":[24,[4,18,20,9,4,0]],"?":[18,[3,16,3,17,4,19,5,20,7,21,11,21,13,20,14,19,15,17,15,15,14,13,13,12,9,10,9,7,-1,-1,9,2,8,1,9,0,10,1,9,2]],"@":[27,[18,13,17,15,15,16,12,16,10,15,9,14,8,11,8,8,9,6,11,5,14,5,16,6,17,8,-1,-1,12,16,10,14,9,11,9,8,10,6,11,5,-1,-1,18,16,17,8,17,6,19,5,21,5,23,7,24,10,24,12,23,15,22,17,20,19,18,20,15,21,12,21,9,20,7,19,5,17,4,15,3,12,3,9,4,6,5,4,7,2,9,1,12,0,15,0,18,1,20,2,21,3,-1,-1,19,16,18,8,18,6,19,5]],A:[18,[9,21,1,0,-1,-1,9,21,17,0,-1,-1,4,7,14,7]],B:[21,[4,21,4,0,-1,-1,4,21,13,21,16,20,17,19,18,17,18,15,17,13,16,12,13,11,-1,-1,4,11,13,11,16,10,17,9,18,7,18,4,17,2,16,1,13,0,4,0]],C:[21,[18,16,17,18,15,20,13,21,9,21,7,20,5,18,4,16,3,13,3,8,4,5,5,3,7,1,9,0,13,0,15,1,17,3,18,5]],D:[21,[4,21,4,0,-1,-1,4,21,11,21,14,20,16,18,17,16,18,13,18,8,17,5,16,3,14,1,11,0,4,0]],E:[19,[4,21,4,0,-1,-1,4,21,17,21,-1,-1,4,11,12,11,-1,-1,4,0,17,0]],F:[18,[4,21,4,0,-1,-1,4,21,17,21,-1,-1,4,11,12,11]],G:[21,[18,16,17,18,15,20,13,21,9,21,7,20,5,18,4,16,3,13,3,8,4,5,5,3,7,1,9,0,13,0,15,1,17,3,18,5,18,8,-1,-1,13,8,18,8]],H:[22,[4,21,4,0,-1,-1,18,21,18,0,-1,-1,4,11,18,11]],I:[8,[4,21,4,0]],J:[16,[12,21,12,5,11,2,10,1,8,0,6,0,4,1,3,2,2,5,2,7]],K:[21,[4,21,4,0,-1,-1,18,21,4,7,-1,-1,9,12,18,0]],L:[17,[4,21,4,0,-1,-1,4,0,16,0]],M:[24,[4,21,4,0,-1,-1,4,21,12,0,-1,-1,20,21,12,0,-1,-1,20,21,20,0]],N:[22,[4,21,4,0,-1,-1,4,21,18,0,-1,-1,18,21,18,0]],O:[22,[9,21,7,20,5,18,4,16,3,13,3,8,4,5,5,3,7,1,9,0,13,0,15,1,17,3,18,5,19,8,19,13,18,16,17,18,15,20,13,21,9,21]],P:[21,[4,21,4,0,-1,-1,4,21,13,21,16,20,17,19,18,17,18,14,17,12,16,11,13,10,4,10]],Q:[22,[9,21,7,20,5,18,4,16,3,13,3,8,4,5,5,3,7,1,9,0,13,0,15,1,17,3,18,5,19,8,19,13,18,16,17,18,15,20,13,21,9,21,-1,-1,12,4,18,-2]],R:[21,[4,21,4,0,-1,-1,4,21,13,21,16,20,17,19,18,17,18,15,17,13,16,12,13,11,4,11,-1,-1,11,11,18,0]],S:[20,[17,18,15,20,12,21,8,21,5,20,3,18,3,16,4,14,5,13,7,12,13,10,15,9,16,8,17,6,17,3,15,1,12,0,8,0,5,1,3,3]],T:[16,[8,21,8,0,-1,-1,1,21,15,21]],U:[22,[4,21,4,6,5,3,7,1,10,0,12,0,15,1,17,3,18,6,18,21]],V:[18,[1,21,9,0,-1,-1,17,21,9,0]],W:[24,[2,21,7,0,-1,-1,12,21,7,0,-1,-1,12,21,17,0,-1,-1,22,21,17,0]],X:[20,[3,21,17,0,-1,-1,17,21,3,0]],Y:[18,[1,21,9,11,9,0,-1,-1,17,21,9,11]],Z:[20,[17,21,3,0,-1,-1,3,21,17,21,-1,-1,3,0,17,0]],"[":[14,[4,25,4,-7,-1,-1,5,25,5,-7,-1,-1,4,25,11,25,-1,-1,4,-7,11,-7]],"\\":[14,[0,21,14,-3]],"]":[14,[9,25,9,-7,-1,-1,10,25,10,-7,-1,-1,3,25,10,25,-1,-1,3,-7,10,-7]],"^":[16,[6,15,8,18,10,15,-1,-1,3,12,8,17,13,12,-1,-1,8,17,8,0]],_:[16,[0,-2,16,-2]],"`":[10,[6,21,5,20,4,18,4,16,5,15,6,16,5,17]],a:[19,[15,14,15,0,-1,-1,15,11,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3]],b:[19,[4,21,4,0,-1,-1,4,11,6,13,8,14,11,14,13,13,15,11,16,8,16,6,15,3,13,1,11,0,8,0,6,1,4,3]],c:[18,[15,11,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3]],d:[19,[15,21,15,0,-1,-1,15,11,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3]],e:[18,[3,8,15,8,15,10,14,12,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3]],f:[12,[10,21,8,21,6,20,5,17,5,0,-1,-1,2,14,9,14]],g:[19,[15,14,15,-2,14,-5,13,-6,11,-7,8,-7,6,-6,-1,-1,15,11,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3]],h:[19,[4,21,4,0,-1,-1,4,10,7,13,9,14,12,14,14,13,15,10,15,0]],i:[8,[3,21,4,20,5,21,4,22,3,21,-1,-1,4,14,4,0]],j:[10,[5,21,6,20,7,21,6,22,5,21,-1,-1,6,14,6,-3,5,-6,3,-7,1,-7]],k:[17,[4,21,4,0,-1,-1,14,14,4,4,-1,-1,8,8,15,0]],l:[8,[4,21,4,0]],m:[30,[4,14,4,0,-1,-1,4,10,7,13,9,14,12,14,14,13,15,10,15,0,-1,-1,15,10,18,13,20,14,23,14,25,13,26,10,26,0]],n:[19,[4,14,4,0,-1,-1,4,10,7,13,9,14,12,14,14,13,15,10,15,0]],o:[19,[8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3,16,6,16,8,15,11,13,13,11,14,8,14]],p:[19,[4,14,4,-7,-1,-1,4,11,6,13,8,14,11,14,13,13,15,11,16,8,16,6,15,3,13,1,11,0,8,0,6,1,4,3]],q:[19,[15,14,15,-7,-1,-1,15,11,13,13,11,14,8,14,6,13,4,11,3,8,3,6,4,3,6,1,8,0,11,0,13,1,15,3]],r:[13,[4,14,4,0,-1,-1,4,8,5,11,7,13,9,14,12,14]],s:[17,[14,11,13,13,10,14,7,14,4,13,3,11,4,9,6,8,11,7,13,6,14,4,14,3,13,1,10,0,7,0,4,1,3,3]],t:[12,[5,21,5,4,6,1,8,0,10,0,-1,-1,2,14,9,14]],u:[19,[4,14,4,4,5,1,7,0,10,0,12,1,15,4,-1,-1,15,14,15,0]],v:[16,[2,14,8,0,-1,-1,14,14,8,0]],w:[22,[3,14,7,0,-1,-1,11,14,7,0,-1,-1,11,14,15,0,-1,-1,19,14,15,0]],x:[17,[3,14,14,0,-1,-1,14,14,3,0]],y:[16,[2,14,8,0,-1,-1,14,14,8,0,6,-4,4,-6,2,-7,1,-7]],z:[17,[14,14,3,0,-1,-1,3,14,14,14,-1,-1,3,0,14,0]],"{":[14,[9,25,7,24,6,23,5,21,5,19,6,17,7,16,8,14,8,12,6,10,-1,-1,7,24,6,22,6,20,7,18,8,17,9,15,9,13,8,11,4,9,8,7,9,5,9,3,8,1,7,0,6,-2,6,-4,7,-6,-1,-1,6,8,8,6,8,4,7,2,6,1,5,-1,5,-3,6,-5,7,-6,9,-7]],"|":[8,[4,25,4,-7]],"}":[14,[5,25,7,24,8,23,9,21,9,19,8,17,7,16,6,14,6,12,8,10,-1,-1,7,24,8,22,8,20,7,18,6,17,5,15,5,13,6,11,10,9,6,7,5,5,5,3,6,1,7,0,8,-2,8,-4,7,-6,-1,-1,8,8,6,6,6,4,7,2,8,1,9,-1,9,-3,8,-5,7,-6,5,-7]],"~":[24,[3,6,3,8,4,11,6,12,8,12,10,11,14,8,16,7,18,7,20,8,21,10,-1,-1,3,8,4,10,6,11,8,11,10,10,14,7,16,6,18,6,20,7,21,10,21,12]]};e.exports=function(t,e,r,i){i=i||1;var a,o,s,l,u,c,h,f,d=[];for(a=0,o=t.length;a<o;a++)if(u=n[t[a]]){for(f=null,s=0,l=u[1].length;s<l;s+=2)-1===u[1][s]&&-1===u[1][s+1]?f=null:(c=e+u[1][s]*i,h=r-u[1][s+1]*i,f&&d.push(f.x,f.y,c,h),f={x:c,y:h});e+=u[0]*i}return d}},{}],343:[function(t,e,r){"use strict";var n=e.exports={};n.version=t("../package.json").version,n.Map=t("./ui/map"),n.Control=t("./ui/control/control"),n.Navigation=t("./ui/control/navigation"),n.Geolocate=t("./ui/control/geolocate"),n.Attribution=t("./ui/control/attribution"),n.Popup=t("./ui/popup"),n.Marker=t("./ui/marker"),n.Style=t("./style/style"),n.LngLat=t("./geo/lng_lat"),n.LngLatBounds=t("./geo/lng_lat_bounds"),n.Point=t("point-geometry"),n.Evented=t("./util/evented"),n.util=t("./util/util"),n.supported=t("./util/browser").supported;var i=t("./util/ajax");n.util.getJSON=i.getJSON,n.util.getArrayBuffer=i.getArrayBuffer;var a=t("./util/config");n.config=a,Object.defineProperty(n,"accessToken",{get:function(){return a.ACCESS_TOKEN},set:function(t){a.ACCESS_TOKEN=t}})},{"../package.json":444,"./geo/lng_lat":339,"./geo/lng_lat_bounds":340,"./style/style":378,"./ui/control/attribution":409,"./ui/control/control":410,"./ui/control/geolocate":411,"./ui/control/navigation":412,"./ui/map":421,"./ui/marker":422,"./ui/popup":423,"./util/ajax":425,"./util/browser":426,"./util/config":431,"./util/evented":434,"./util/util":442,"point-geometry":484}],344:[function(t,e,r){"use strict";var n=t("assert");e.exports=function(t){for(var e={define:{},initialize:{}},r=0;r<t.length;r++){var i=t[r];n("u_"===i.name.slice(0,2));var a="{precision} "+(1===i.components?"float":"vec"+i.components);e.define[i.name.slice(2)]="uniform "+a+" "+i.name+";\n",e.initialize[i.name.slice(2)]=a+" "+i.name.slice(2)+" = "+i.name+";\n"}return e}},{assert:47}],345:[function(t,e,r){"use strict";function n(t,e,r){var n,s=t.gl,l=t.transform,u=r.paint["background-color"],c=r.paint["background-pattern"],h=r.paint["background-opacity"],f=c?t.spriteAtlas.getPosition(c.from,!0):null,d=c?t.spriteAtlas.getPosition(c.to,!0):null;if(t.setDepthSublayer(0),f&&d){if(t.isOpaquePass)return;n=t.useProgram("pattern"),s.uniform1i(n.u_image,0),s.uniform2fv(n.u_pattern_tl_a,f.tl),s.uniform2fv(n.u_pattern_br_a,f.br),s.uniform2fv(n.u_pattern_tl_b,d.tl),s.uniform2fv(n.u_pattern_br_b,d.br),s.uniform1f(n.u_opacity,h),s.uniform1f(n.u_mix,c.t),s.uniform2fv(n.u_pattern_size_a,f.size),s.uniform2fv(n.u_pattern_size_b,d.size),s.uniform1f(n.u_scale_a,c.fromScale),s.uniform1f(n.u_scale_b,c.toScale),s.activeTexture(s.TEXTURE0),t.spriteAtlas.bind(s,!0),t.tileExtentPatternVAO.bind(s,n,t.tileExtentBuffer)}else{if(t.isOpaquePass!==(1===u[3]))return;var p=a([{name:"u_color",components:4},{name:"u_opacity",components:1}]);n=t.useProgram("fill",[],p,p),s.uniform4fv(n.u_color,u),s.uniform1f(n.u_opacity,h),t.tileExtentVAO.bind(s,n,t.tileExtentBuffer)}s.disable(s.STENCIL_TEST);for(var m=l.coveringTiles({tileSize:o}),g=0;g<m.length;g++){var v=m[g];if(f&&d){var y={coord:v,tileSize:o};s.uniform1f(n.u_tile_units_to_pixels,1/i(y,1,t.transform.tileZoom));var b=y.tileSize*Math.pow(2,t.transform.tileZoom-y.coord.z),x=b*(y.coord.x+v.w*Math.pow(2,y.coord.z)),_=b*y.coord.y;s.uniform2f(n.u_pixel_coord_upper,x>>16,_>>16),s.uniform2f(n.u_pixel_coord_lower,65535&x,65535&_)}s.uniformMatrix4fv(n.u_matrix,!1,t.transform.calculatePosMatrix(v)),s.drawArrays(s.TRIANGLE_STRIP,0,t.tileExtentBuffer.length)}s.stencilMask(0),s.stencilFunc(s.EQUAL,128,128)}var i=t("../source/pixels_to_tile_units"),a=t("./create_uniform_pragmas"),o=512;e.exports=n},{"../source/pixels_to_tile_units":363,"./create_uniform_pragmas":344}],346:[function(t,e,r){"use strict";function n(t,e,r,n){if(!t.isOpaquePass){var a=t.gl;t.setDepthSublayer(0),t.depthMask(!1),a.disable(a.STENCIL_TEST);for(var o=0;o<n.length;o++){var s=n[o],l=e.getTile(s),u=l.getBucket(r);if(u){var c=u.bufferGroups.circle;if(c){var h=u.paintAttributes.circle[r.id],f=t.useProgram("circle",h.defines,h.vertexPragmas,h.fragmentPragmas);"map"===r.paint["circle-pitch-scale"]?(a.uniform1i(f.u_scale_with_map,!0),a.uniform2f(f.u_extrude_scale,t.transform.pixelsToGLUnits[0]*t.transform.altitude,t.transform.pixelsToGLUnits[1]*t.transform.altitude)):(a.uniform1i(f.u_scale_with_map,!1),a.uniform2fv(f.u_extrude_scale,t.transform.pixelsToGLUnits)),a.uniform1f(f.u_devicepixelratio,i.devicePixelRatio),a.uniformMatrix4fv(f.u_matrix,!1,t.translatePosMatrix(s.posMatrix,l,r.paint["circle-translate"],r.paint["circle-translate-anchor"])),u.setUniforms(a,"circle",f,r,{zoom:t.transform.zoom});for(var d=0;d<c.length;d++){var p=c[d];p.vaos[r.id].bind(a,f,p.layoutVertexBuffer,p.elementBuffer,p.paintVertexBuffers[r.id]),a.drawElements(a.TRIANGLES,3*p.elementBuffer.length,a.UNSIGNED_SHORT,0)}}}}}}var i=t("../util/browser");e.exports=n},{"../util/browser":426}],347:[function(t,e,r){"use strict";function n(t,e,r,n){var i=t.gl;i.enable(i.STENCIL_TEST);for(var a=t.useProgram("collisionbox"),o=0;o<n.length;o++){var s=n[o],l=e.getTile(s),u=l.getBucket(r);if(u){var c=u.bufferGroups.collisionBox;if(c&&c.length){var h=c[0];0!==h.layoutVertexBuffer.length&&(i.uniformMatrix4fv(a.u_matrix,!1,s.posMatrix),t.enableTileClippingMask(s),t.lineWidth(1),i.uniform1f(a.u_scale,Math.pow(2,t.transform.zoom-l.coord.z)),i.uniform1f(a.u_zoom,10*t.transform.zoom),i.uniform1f(a.u_maxzoom,10*(l.coord.z+1)),h.vaos[r.id].bind(i,a,h.layoutVertexBuffer),i.drawArrays(i.LINES,0,h.layoutVertexBuffer.length))}}}}e.exports=n},{}],348:[function(t,e,r){"use strict";function n(t,e,r){if(!t.isOpaquePass&&t.options.debug)for(var n=0;n<r.length;n++)i(t,e,r[n])}function i(t,e,r){var n=t.gl;n.disable(n.STENCIL_TEST),t.lineWidth(1*o.devicePixelRatio);var i=r.posMatrix,h=t.useProgram("debug");n.uniformMatrix4fv(h.u_matrix,!1,i),n.uniform4f(h.u_color,1,0,0,1),t.debugVAO.bind(n,h,t.debugBuffer),n.drawArrays(n.LINE_STRIP,0,t.debugBuffer.length);for(var f=a(r.toString(),50,200,5),d=new t.PosArray,p=0;p<f.length;p+=2)d.emplaceBack(f[p],f[p+1]);var m=new u(d.serialize(),t.PosArray.serialize(),u.BufferType.VERTEX);(new c).bind(n,h,m),n.uniform4f(h.u_color,1,1,1,1);for(var g=e.getTile(r).tileSize,v=l/(Math.pow(2,t.transform.zoom-r.z)*g),y=[[-1,-1],[-1,1],[1,-1],[1,1]],b=0;b<y.length;b++){var x=y[b];n.uniformMatrix4fv(h.u_matrix,!1,s.translate([],i,[v*x[0],v*x[1],0])),n.drawArrays(n.LINES,0,m.length)}n.uniform4f(h.u_color,0,0,0,1),n.uniformMatrix4fv(h.u_matrix,!1,i),n.drawArrays(n.LINES,0,m.length)}var a=t("../lib/debugtext"),o=t("../util/browser"),s=t("gl-matrix").mat4,l=t("../data/bucket").EXTENT,u=t("../data/buffer"),c=t("./vertex_array_object");e.exports=n},{"../data/bucket":329,"../data/buffer":334,"../lib/debugtext":342,"../util/browser":426,"./vertex_array_object":357,"gl-matrix":193}],349:[function(t,e,r){"use strict";function n(t,e,r,n){var o=t.gl;o.enable(o.STENCIL_TEST);var s;if(s=!r.paint["fill-pattern"]&&(r.isPaintValueFeatureConstant("fill-color")&&r.isPaintValueFeatureConstant("fill-opacity")&&1===r.paint["fill-color"][3]&&1===r.paint["fill-opacity"]),t.isOpaquePass===s){t.setDepthSublayer(1);for(var l=0;l<n.length;l++)i(t,e,r,n[l])}if(!t.isOpaquePass&&r.paint["fill-antialias"]){t.lineWidth(2),t.depthMask(!1);var u=r.getPaintProperty("fill-outline-color");(u||!r.paint["fill-pattern"])&&u?t.setDepthSublayer(2):t.setDepthSublayer(0);for(var c=0;c<n.length;c++)a(t,e,r,n[c])}}function i(t,e,r,n){var i=e.getTile(n),a=i.getBucket(r);if(a){var s=a.bufferGroups.fill;if(s){var l,u=t.gl,c=r.paint["fill-pattern"];if(c)l=t.useProgram("pattern"),o(c,r.paint["fill-opacity"],i,n,t,l),u.activeTexture(u.TEXTURE0),t.spriteAtlas.bind(u,!0);else{var h=a.paintAttributes.fill[r.id];l=t.useProgram("fill",h.defines,h.vertexPragmas,h.fragmentPragmas),a.setUniforms(u,"fill",l,r,{zoom:t.transform.zoom})}u.uniformMatrix4fv(l.u_matrix,!1,t.translatePosMatrix(n.posMatrix,i,r.paint["fill-translate"],r.paint["fill-translate-anchor"])),t.enableTileClippingMask(n);for(var f=0;f<s.length;f++){var d=s[f];d.vaos[r.id].bind(u,l,d.layoutVertexBuffer,d.elementBuffer,d.paintVertexBuffers[r.id]),u.drawElements(u.TRIANGLES,d.elementBuffer.length,u.UNSIGNED_SHORT,0)}}}}function a(t,e,r,n){var i=e.getTile(n),a=i.getBucket(r);if(a){var s,l=t.gl,u=a.bufferGroups.fill,c=r.paint["fill-pattern"],h=r.paint["fill-opacity"],f=r.getPaintProperty("fill-outline-color");if(c&&!f)s=t.useProgram("outlinepattern"),l.uniform2f(s.u_world,l.drawingBufferWidth,l.drawingBufferHeight);else{var d=a.paintAttributes.fill[r.id];s=t.useProgram("outline",d.defines,d.vertexPragmas,d.fragmentPragmas),l.uniform2f(s.u_world,l.drawingBufferWidth,l.drawingBufferHeight),l.uniform1f(s.u_opacity,h),a.setUniforms(l,"fill",s,r,{zoom:t.transform.zoom})}l.uniformMatrix4fv(s.u_matrix,!1,t.translatePosMatrix(n.posMatrix,i,r.paint["fill-translate"],r.paint["fill-translate-anchor"])),c&&o(c,h,i,n,t,s),t.enableTileClippingMask(n);for(var p=0;p<u.length;p++){var m=u[p];m.secondVaos[r.id].bind(l,s,m.layoutVertexBuffer,m.elementBuffer2,m.paintVertexBuffers[r.id]),l.drawElements(l.LINES,2*m.elementBuffer2.length,l.UNSIGNED_SHORT,0)}}}function o(t,e,r,n,i,a){var o=i.gl,l=i.spriteAtlas.getPosition(t.from,!0),u=i.spriteAtlas.getPosition(t.to,!0);if(l&&u){o.uniform1i(a.u_image,0),o.uniform2fv(a.u_pattern_tl_a,l.tl),o.uniform2fv(a.u_pattern_br_a,l.br),o.uniform2fv(a.u_pattern_tl_b,u.tl),o.uniform2fv(a.u_pattern_br_b,u.br),o.uniform1f(a.u_opacity,e),o.uniform1f(a.u_mix,t.t),o.uniform1f(a.u_tile_units_to_pixels,1/s(r,1,i.transform.tileZoom)),o.uniform2fv(a.u_pattern_size_a,l.size),o.uniform2fv(a.u_pattern_size_b,u.size),o.uniform1f(a.u_scale_a,t.fromScale),o.uniform1f(a.u_scale_b,t.toScale);var c=r.tileSize*Math.pow(2,i.transform.tileZoom-r.coord.z),h=c*(r.coord.x+n.w*Math.pow(2,r.coord.z)),f=c*r.coord.y;o.uniform2f(a.u_pixel_coord_upper,h>>16,f>>16),o.uniform2f(a.u_pixel_coord_lower,65535&h,65535&f),o.activeTexture(o.TEXTURE0),i.spriteAtlas.bind(o,!0)}}var s=t("../source/pixels_to_tile_units");e.exports=n},{"../source/pixels_to_tile_units":363}],350:[function(t,e,r){"use strict";var n=t("../util/browser"),i=t("gl-matrix").mat2,a=t("../source/pixels_to_tile_units");e.exports=function(t,e,r,o){if(!t.isOpaquePass){t.setDepthSublayer(0),t.depthMask(!1);var s=t.gl;if(s.enable(s.STENCIL_TEST),!(r.paint["line-width"]<=0)){var l=1/n.devicePixelRatio,u=r.paint["line-blur"]+l,c=r.paint["line-color"],h=t.transform,f=i.create();i.scale(f,f,[1,Math.cos(h._pitch)]),i.rotate(f,f,t.transform.angle);var d,p,m,g,v,y=Math.sqrt(h.height*h.height/4*(1+h.altitude*h.altitude)),b=h.height/2*Math.tan(h._pitch),x=(y+b)/y-1,_=r.paint["line-dasharray"],w=r.paint["line-pattern"];if(_)d=t.useProgram("linesdfpattern"),s.uniform1f(d.u_linewidth,r.paint["line-width"]/2),s.uniform1f(d.u_gapwidth,r.paint["line-gap-width"]/2),s.uniform1f(d.u_antialiasing,l/2),s.uniform1f(d.u_blur,u),s.uniform4fv(d.u_color,c),s.uniform1f(d.u_opacity,r.paint["line-opacity"]),p=t.lineAtlas.getDash(_.from,"round"===r.layout["line-cap"]),m=t.lineAtlas.getDash(_.to,"round"===r.layout["line-cap"]),s.uniform1i(d.u_image,0),s.activeTexture(s.TEXTURE0),t.lineAtlas.bind(s),s.uniform1f(d.u_tex_y_a,p.y),s.uniform1f(d.u_tex_y_b,m.y),s.uniform1f(d.u_mix,_.t),s.uniform1f(d.u_extra,x),s.uniform1f(d.u_offset,-r.paint["line-offset"]),s.uniformMatrix2fv(d.u_antialiasingmatrix,!1,f);else if(w){if(g=t.spriteAtlas.getPosition(w.from,!0),v=t.spriteAtlas.getPosition(w.to,!0),!g||!v)return;d=t.useProgram("linepattern"),s.uniform1i(d.u_image,0),s.activeTexture(s.TEXTURE0),t.spriteAtlas.bind(s,!0),s.uniform1f(d.u_linewidth,r.paint["line-width"]/2),s.uniform1f(d.u_gapwidth,r.paint["line-gap-width"]/2),s.uniform1f(d.u_antialiasing,l/2),s.uniform1f(d.u_blur,u),s.uniform2fv(d.u_pattern_tl_a,g.tl),s.uniform2fv(d.u_pattern_br_a,g.br),s.uniform2fv(d.u_pattern_tl_b,v.tl),s.uniform2fv(d.u_pattern_br_b,v.br),s.uniform1f(d.u_fade,w.t),s.uniform1f(d.u_opacity,r.paint["line-opacity"]),s.uniform1f(d.u_extra,x),s.uniform1f(d.u_offset,-r.paint["line-offset"]),s.uniformMatrix2fv(d.u_antialiasingmatrix,!1,f)}else d=t.useProgram("line"),s.uniform1f(d.u_linewidth,r.paint["line-width"]/2),s.uniform1f(d.u_gapwidth,r.paint["line-gap-width"]/2),s.uniform1f(d.u_antialiasing,l/2),s.uniform1f(d.u_blur,u),s.uniform1f(d.u_extra,x),s.uniform1f(d.u_offset,-r.paint["line-offset"]),s.uniformMatrix2fv(d.u_antialiasingmatrix,!1,f),s.uniform4fv(d.u_color,c),s.uniform1f(d.u_opacity,r.paint["line-opacity"]);for(var M=0;M<o.length;M++){var k=o[M],A=e.getTile(k),T=A.getBucket(r);if(T){var S=T.bufferGroups.line;if(S){t.enableTileClippingMask(k);var E=t.translatePosMatrix(k.posMatrix,A,r.paint["line-translate"],r.paint["line-translate-anchor"]);s.uniformMatrix4fv(d.u_matrix,!1,E);var L=1/a(A,1,t.transform.zoom);if(_){var C=p.width*_.fromScale,I=m.width*_.toScale,z=[1/a(A,C,t.transform.tileZoom),-p.height/2],D=[1/a(A,I,t.transform.tileZoom),-m.height/2],P=t.lineAtlas.width/(256*Math.min(C,I)*n.devicePixelRatio)/2;s.uniform1f(d.u_ratio,L),s.uniform2fv(d.u_patternscale_a,z),s.uniform2fv(d.u_patternscale_b,D),s.uniform1f(d.u_sdfgamma,P)}else w?(s.uniform1f(d.u_ratio,L),s.uniform2fv(d.u_pattern_size_a,[a(A,g.size[0]*w.fromScale,t.transform.tileZoom),v.size[1]]),s.uniform2fv(d.u_pattern_size_b,[a(A,v.size[0]*w.toScale,t.transform.tileZoom),v.size[1]])):s.uniform1f(d.u_ratio,L);for(var O=0;O<S.length;O++){var R=S[O];R.vaos[r.id].bind(s,d,R.layoutVertexBuffer,R.elementBuffer),s.drawElements(s.TRIANGLES,3*R.elementBuffer.length,s.UNSIGNED_SHORT,0)}}}}}}}},{"../source/pixels_to_tile_units":363,"../util/browser":426,"gl-matrix":193}],351:[function(t,e,r){"use strict";function n(t,e,r,n){if(!t.isOpaquePass){var a=t.gl;a.enable(a.DEPTH_TEST),t.depthMask(!0),a.depthFunc(a.LESS);for(var o=n.length&&n[0].z,s=0;s<n.length;s++){var l=n[s];t.setDepthSublayer(l.z-o),i(t,e,r,l)}a.depthFunc(a.LEQUAL)}}function i(t,e,r,n){var i=t.gl;i.disable(i.STENCIL_TEST);var u=e.getTile(n),c=t.transform.calculatePosMatrix(n,e.maxzoom),h=t.useProgram("raster");i.uniformMatrix4fv(h.u_matrix,!1,c),i.uniform1f(h.u_brightness_low,r.paint["raster-brightness-min"]),i.uniform1f(h.u_brightness_high,r.paint["raster-brightness-max"]),i.uniform1f(h.u_saturation_factor,s(r.paint["raster-saturation"])),i.uniform1f(h.u_contrast_factor,o(r.paint["raster-contrast"])),i.uniform3fv(h.u_spin_weights,a(r.paint["raster-hue-rotate"]));var f,d,p=u.source&&u.source.findLoadedParent(n,0,{}),m=l(u,p,r,t.transform);i.activeTexture(i.TEXTURE0),i.bindTexture(i.TEXTURE_2D,u.texture),i.activeTexture(i.TEXTURE1),p?(i.bindTexture(i.TEXTURE_2D,p.texture),f=Math.pow(2,p.coord.z-u.coord.z),d=[u.coord.x*f%1,u.coord.y*f%1]):(i.bindTexture(i.TEXTURE_2D,u.texture),m[1]=0),i.uniform2fv(h.u_tl_parent,d||[0,0]),i.uniform1f(h.u_scale_parent,f||1),i.uniform1f(h.u_buffer_scale,1),i.uniform1f(h.u_opacity0,m[0]),i.uniform1f(h.u_opacity1,m[1]),i.uniform1i(h.u_image0,0),i.uniform1i(h.u_image1,1);var g=u.boundsBuffer||t.rasterBoundsBuffer;(u.boundsVAO||t.rasterBoundsVAO).bind(i,h,g),i.drawArrays(i.TRIANGLE_STRIP,0,g.length)}function a(t){t*=Math.PI/180;var e=Math.sin(t),r=Math.cos(t);return[(2*r+1)/3,(-Math.sqrt(3)*e-r+1)/3,(Math.sqrt(3)*e-r+1)/3]}function o(t){return t>0?1/(1-t):1+t}function s(t){return t>0?1-1/(1.001-t):-t}function l(t,e,r,n){var i=[1,0],a=r.paint["raster-fade-duration"];if(t.source&&a>0){var o=(new Date).getTime(),s=(o-t.timeAdded)/a,l=e?(o-e.timeAdded)/a:-1,c=n.coveringZoomLevel(t.source),h=!!e&&Math.abs(e.coord.z-c)>Math.abs(t.coord.z-c);!e||h?(i[0]=u.clamp(s,0,1),i[1]=1-i[0]):(i[0]=u.clamp(1-l,0,1),i[1]=1-i[0])}var f=r.paint["raster-opacity"];return i[0]*=f,i[1]*=f,i}var u=t("../util/util"),c=t("../util/struct_array");e.exports=n,n.RasterBoundsArray=new c({members:[{name:"a_pos",type:"Int16",components:2},{name:"a_texture_pos",type:"Int16",components:2}]})},{"../util/struct_array":440,"../util/util":442}],352:[function(t,e,r){"use strict";function n(t,e,r,n){if(!t.isOpaquePass){var a=!(r.layout["text-allow-overlap"]||r.layout["icon-allow-overlap"]||r.layout["text-ignore-placement"]||r.layout["icon-ignore-placement"]),o=t.gl;a?o.disable(o.STENCIL_TEST):o.enable(o.STENCIL_TEST),t.setDepthSublayer(0),t.depthMask(!1),o.disable(o.DEPTH_TEST),i(t,e,r,n,!1,r.paint["icon-translate"],r.paint["icon-translate-anchor"],r.layout["icon-rotation-alignment"],r.layout["icon-rotation-alignment"],r.layout["icon-size"],r.paint["icon-halo-width"],r.paint["icon-halo-color"],r.paint["icon-halo-blur"],r.paint["icon-opacity"],r.paint["icon-color"]),
i(t,e,r,n,!0,r.paint["text-translate"],r.paint["text-translate-anchor"],r.layout["text-rotation-alignment"],r.layout["text-pitch-alignment"],r.layout["text-size"],r.paint["text-halo-width"],r.paint["text-halo-color"],r.paint["text-halo-blur"],r.paint["text-opacity"],r.paint["text-color"]),o.enable(o.DEPTH_TEST),e.map.showCollisionBoxes&&s(t,e,r,n)}}function i(t,e,r,n,i,o,s,l,u,c,h,f,d,p,m){for(var g=0;g<n.length;g++){var v=e.getTile(n[g]),y=v.getBucket(r);if(y){var b=y.bufferGroups,x=i?b.glyph:b.icon;x.length&&(t.enableTileClippingMask(n[g]),a(t,r,n[g].posMatrix,v,y,x,i,i||y.sdfIcons,!i&&y.iconsNeedLinear,i?y.adjustedTextSize:y.adjustedIconSize,y.fontstack,o,s,l,u,c,h,f,d,p,m))}}}function a(t,e,r,n,i,a,s,u,c,h,f,d,p,m,g,v,y,b,x,_,w){var M,k,A,T=t.gl,S=t.transform,E="map"===m,L="map"===g,C=s?24:1,I=v/C;if(L?(k=l(n,1,t.transform.zoom)*I,A=1/Math.cos(S._pitch),M=[k,k]):(k=t.transform.altitude*I,A=1,M=[S.pixelsToGLUnits[0]*k,S.pixelsToGLUnits[1]*k]),s||t.style.sprite.loaded()){var z=t.useProgram(u?"sdf":"icon");if(T.uniformMatrix4fv(z.u_matrix,!1,t.translatePosMatrix(r,n,d,p)),T.uniform1i(z.u_rotate_with_map,E),T.uniform1i(z.u_pitch_with_map,L),T.uniform2fv(z.u_extrude_scale,M),T.activeTexture(T.TEXTURE0),T.uniform1i(z.u_texture,0),s){var D=f&&t.glyphSource.getGlyphAtlas(f);if(!D)return;D.updateTexture(T),T.uniform2f(z.u_texsize,D.width/4,D.height/4)}else{var P=t.options.rotating||t.options.zooming,O=1!==I||o.devicePixelRatio!==t.spriteAtlas.pixelRatio||c,R=L||t.transform.pitch;t.spriteAtlas.bind(T,u||P||O||R),T.uniform2f(z.u_texsize,t.spriteAtlas.width/4,t.spriteAtlas.height/4)}var F=Math.log(v/h)/Math.LN2||0;T.uniform1f(z.u_zoom,10*(t.transform.zoom-F)),T.activeTexture(T.TEXTURE1),t.frameHistory.bind(T),T.uniform1i(z.u_fadetexture,1);var j;if(u){var N=.105*C/v/o.devicePixelRatio;if(y){T.uniform1f(z.u_gamma,(1.19*x/I/8+N)*A),T.uniform4fv(z.u_color,b),T.uniform1f(z.u_opacity,_),T.uniform1f(z.u_buffer,(6-y/I)/8);for(var B=0;B<a.length;B++)j=a[B],j.vaos[e.id].bind(T,z,j.layoutVertexBuffer,j.elementBuffer),T.drawElements(T.TRIANGLES,3*j.elementBuffer.length,T.UNSIGNED_SHORT,0)}T.uniform1f(z.u_gamma,N*A),T.uniform4fv(z.u_color,w),T.uniform1f(z.u_opacity,_),T.uniform1f(z.u_buffer,.75),T.uniform1f(z.u_pitch,S.pitch/360*2*Math.PI),T.uniform1f(z.u_bearing,S.bearing/360*2*Math.PI),T.uniform1f(z.u_aspect_ratio,S.width/S.height);for(var U=0;U<a.length;U++)j=a[U],j.vaos[e.id].bind(T,z,j.layoutVertexBuffer,j.elementBuffer),T.drawElements(T.TRIANGLES,3*j.elementBuffer.length,T.UNSIGNED_SHORT,0)}else{T.uniform1f(z.u_opacity,_);for(var V=0;V<a.length;V++)j=a[V],j.vaos[e.id].bind(T,z,j.layoutVertexBuffer,j.elementBuffer),T.drawElements(T.TRIANGLES,3*j.elementBuffer.length,T.UNSIGNED_SHORT,0)}}}var o=t("../util/browser"),s=t("./draw_collision_debug"),l=t("../source/pixels_to_tile_units");e.exports=n},{"../source/pixels_to_tile_units":363,"../util/browser":426,"./draw_collision_debug":347}],353:[function(t,e,r){"use strict";function n(){this.changeTimes=new Float64Array(256),this.changeOpacities=new Uint8Array(256),this.opacities=new Uint8ClampedArray(256),this.array=new Uint8Array(this.opacities.buffer),this.fadeDuration=300,this.previousZoom=0,this.firstFrame=!0}e.exports=n,n.prototype.record=function(t){var e=Date.now();this.firstFrame&&(e=0,this.firstFrame=!1),t=Math.floor(10*t);var r;if(t<this.previousZoom)for(r=t+1;r<=this.previousZoom;r++)this.changeTimes[r]=e,this.changeOpacities[r]=this.opacities[r];else for(r=t;r>this.previousZoom;r--)this.changeTimes[r]=e,this.changeOpacities[r]=this.opacities[r];for(r=0;r<256;r++){var n=e-this.changeTimes[r],i=n/this.fadeDuration*255;this.opacities[r]=r<=t?this.changeOpacities[r]+i:this.changeOpacities[r]-i}this.changed=!0,this.previousZoom=t},n.prototype.bind=function(t){this.texture?(t.bindTexture(t.TEXTURE_2D,this.texture),this.changed&&(t.texSubImage2D(t.TEXTURE_2D,0,0,0,256,1,t.ALPHA,t.UNSIGNED_BYTE,this.array),this.changed=!1)):(this.texture=t.createTexture(),t.bindTexture(t.TEXTURE_2D,this.texture),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.NEAREST),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.NEAREST),t.texImage2D(t.TEXTURE_2D,0,t.ALPHA,256,1,0,t.ALPHA,t.UNSIGNED_BYTE,this.array))}},{}],354:[function(t,e,r){"use strict";function n(t,e){this.width=t,this.height=e,this.nextRow=0,this.bytes=4,this.data=new Uint8Array(this.width*this.height*this.bytes),this.positions={}}var i=t("../util/util");e.exports=n,n.prototype.setSprite=function(t){this.sprite=t},n.prototype.getDash=function(t,e){var r=t.join(",")+e;return this.positions[r]||(this.positions[r]=this.addDash(t,e)),this.positions[r]},n.prototype.addDash=function(t,e){var r=e?7:0,n=2*r+1;if(this.nextRow+n>this.height)return i.warnOnce("LineAtlas out of space"),null;for(var a=0,o=0;o<t.length;o++)a+=t[o];for(var s=this.width/a,l=s/2,u=t.length%2==1,c=-r;c<=r;c++)for(var h=this.nextRow+r+c,f=this.width*h,d=u?-t[t.length-1]:0,p=t[0],m=1,g=0;g<this.width;g++){for(;p<g/s;)d=p,p+=t[m],u&&m===t.length-1&&(p+=t[0]),m++;var v,y=Math.abs(g-d*s),b=Math.abs(g-p*s),x=Math.min(y,b),_=m%2==1;if(e){var w=r?c/r*(l+1):0;if(_){var M=l-Math.abs(w);v=Math.sqrt(x*x+M*M)}else v=l-Math.sqrt(x*x+w*w)}else v=(_?1:-1)*x;this.data[3+4*(f+g)]=Math.max(0,Math.min(255,v+128))}var k={y:(this.nextRow+r+.5)/this.height,height:2*r/this.height,width:a};return this.nextRow+=n,this.dirty=!0,k},n.prototype.bind=function(t){this.texture?(t.bindTexture(t.TEXTURE_2D,this.texture),this.dirty&&(this.dirty=!1,t.texSubImage2D(t.TEXTURE_2D,0,0,0,this.width,this.height,t.RGBA,t.UNSIGNED_BYTE,this.data))):(this.texture=t.createTexture(),t.bindTexture(t.TEXTURE_2D,this.texture),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.REPEAT),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.REPEAT),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.LINEAR),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,this.width,this.height,0,t.RGBA,t.UNSIGNED_BYTE,this.data))}},{"../util/util":442}],355:[function(t,e,r){"use strict";function n(t,e){this.gl=t,this.transform=e,this.reusableTextures={},this.preFbos={},this.frameHistory=new o,this.setup(),this.numSublayers=s.maxUnderzooming+s.maxOverzooming+1,this.depthEpsilon=1/Math.pow(2,16),this.lineWidthRange=t.getParameter(t.ALIASED_LINE_WIDTH_RANGE)}var i=t("../util/browser"),a=t("gl-matrix").mat4,o=t("./frame_history"),s=t("../source/source_cache"),l=t("../data/bucket").EXTENT,u=t("../source/pixels_to_tile_units"),c=t("../util/util"),h=t("../util/struct_array"),f=t("../data/buffer"),d=t("./vertex_array_object"),p=t("./draw_raster").RasterBoundsArray,m=t("./create_uniform_pragmas");e.exports=n,c.extend(n.prototype,t("./painter/use_program")),n.prototype.resize=function(t,e){var r=this.gl;this.width=t*i.devicePixelRatio,this.height=e*i.devicePixelRatio,r.viewport(0,0,this.width,this.height)},n.prototype.setup=function(){var t=this.gl;t.verbose=!0,t.enable(t.BLEND),t.blendFunc(t.ONE,t.ONE_MINUS_SRC_ALPHA),t.enable(t.STENCIL_TEST),t.enable(t.DEPTH_TEST),t.depthFunc(t.LEQUAL),this._depthMask=!1,t.depthMask(!1);var e=this.PosArray=new h({members:[{name:"a_pos",type:"Int16",components:2}]}),r=new e;r.emplaceBack(0,0),r.emplaceBack(l,0),r.emplaceBack(0,l),r.emplaceBack(l,l),this.tileExtentBuffer=new f(r.serialize(),e.serialize(),f.BufferType.VERTEX),this.tileExtentVAO=new d,this.tileExtentPatternVAO=new d;var n=new e;n.emplaceBack(0,0),n.emplaceBack(l,0),n.emplaceBack(l,l),n.emplaceBack(0,l),n.emplaceBack(0,0),this.debugBuffer=new f(n.serialize(),e.serialize(),f.BufferType.VERTEX),this.debugVAO=new d;var i=new p;i.emplaceBack(0,0,0,0),i.emplaceBack(l,0,32767,0),i.emplaceBack(0,l,0,32767),i.emplaceBack(l,l,32767,32767),this.rasterBoundsBuffer=new f(i.serialize(),p.serialize(),f.BufferType.VERTEX),this.rasterBoundsVAO=new d},n.prototype.clearColor=function(){var t=this.gl;t.clearColor(0,0,0,0),t.clear(t.COLOR_BUFFER_BIT)},n.prototype.clearStencil=function(){var t=this.gl;t.clearStencil(0),t.stencilMask(255),t.clear(t.STENCIL_BUFFER_BIT)},n.prototype.clearDepth=function(){var t=this.gl;t.clearDepth(1),this.depthMask(!0),t.clear(t.DEPTH_BUFFER_BIT)},n.prototype._renderTileClippingMasks=function(t){var e=this.gl;e.colorMask(!1,!1,!1,!1),this.depthMask(!1),e.disable(e.DEPTH_TEST),e.enable(e.STENCIL_TEST),e.stencilMask(248),e.stencilOp(e.KEEP,e.KEEP,e.REPLACE);var r=1;this._tileClippingMaskIDs={};for(var n=0;n<t.length;n++){var i=t[n],a=this._tileClippingMaskIDs[i.id]=r++<<3;e.stencilFunc(e.ALWAYS,a,248);var o=m([{name:"u_color",components:4},{name:"u_opacity",components:1}]),s=this.useProgram("fill",[],o,o);e.uniformMatrix4fv(s.u_matrix,!1,i.posMatrix),this.tileExtentVAO.bind(e,s,this.tileExtentBuffer),e.drawArrays(e.TRIANGLE_STRIP,0,this.tileExtentBuffer.length)}e.stencilMask(0),e.colorMask(!0,!0,!0,!0),this.depthMask(!0),e.enable(e.DEPTH_TEST)},n.prototype.enableTileClippingMask=function(t){var e=this.gl;e.stencilFunc(e.EQUAL,this._tileClippingMaskIDs[t.id],248)},n.prototype.prepareBuffers=function(){},n.prototype.bindDefaultFramebuffer=function(){var t=this.gl;t.bindFramebuffer(t.FRAMEBUFFER,null)};var g={symbol:t("./draw_symbol"),circle:t("./draw_circle"),line:t("./draw_line"),fill:t("./draw_fill"),raster:t("./draw_raster"),background:t("./draw_background"),debug:t("./draw_debug")};n.prototype.render=function(t,e){this.style=t,this.options=e,this.lineAtlas=t.lineAtlas,this.spriteAtlas=t.spriteAtlas,this.spriteAtlas.setSprite(t.sprite),this.glyphSource=t.glyphSource,this.frameHistory.record(this.transform.zoom),this.prepareBuffers(),this.clearColor(),this.clearDepth(),this.showOverdrawInspector(e.showOverdrawInspector),this.depthRange=(t._order.length+2)*this.numSublayers*this.depthEpsilon,this.renderPass({isOpaquePass:!0}),this.renderPass({isOpaquePass:!1})},n.prototype.renderPass=function(t){var e=this.style._groups,r=t.isOpaquePass;this.currentLayer=r?this.style._order.length:-1;for(var n=0;n<e.length;n++){var i,a=e[r?e.length-1-n:n],o=this.style.sources[a.source],s=[];if(o){for(s=o.getVisibleCoordinates(),i=0;i<s.length;i++)s[i].posMatrix=this.transform.calculatePosMatrix(s[i],o.maxzoom);this.clearStencil(),o.prepare&&o.prepare(),o.isTileClipped&&this._renderTileClippingMasks(s)}for(r?(this._showOverdrawInspector||this.gl.disable(this.gl.BLEND),this.isOpaquePass=!0):(this.gl.enable(this.gl.BLEND),this.isOpaquePass=!1,s.reverse()),i=0;i<a.length;i++){var l=a[r?a.length-1-i:i];this.currentLayer+=r?-1:1,this.renderLayer(this,o,l,s)}o&&g.debug(this,o,s)}},n.prototype.depthMask=function(t){t!==this._depthMask&&(this._depthMask=t,this.gl.depthMask(t))},n.prototype.renderLayer=function(t,e,r,n){r.isHidden(this.transform.zoom)||("background"===r.type||n.length)&&(this.id=r.id,g[r.type](t,e,r,n))},n.prototype.setDepthSublayer=function(t){var e=1-((1+this.currentLayer)*this.numSublayers+t)*this.depthEpsilon,r=e-1+this.depthRange;this.gl.depthRange(r,e)},n.prototype.translatePosMatrix=function(t,e,r,n){if(!r[0]&&!r[1])return t;if("viewport"===n){var i=Math.sin(-this.transform.angle),o=Math.cos(-this.transform.angle);r=[r[0]*o-r[1]*i,r[0]*i+r[1]*o]}var s=[u(e,r[0],this.transform.zoom),u(e,r[1],this.transform.zoom),0],l=new Float32Array(16);return a.translate(l,t,s),l},n.prototype.saveTexture=function(t){var e=this.reusableTextures[t.size];e?e.push(t):this.reusableTextures[t.size]=[t]},n.prototype.getTexture=function(t){var e=this.reusableTextures[t];return e&&e.length>0?e.pop():null},n.prototype.lineWidth=function(t){this.gl.lineWidth(c.clamp(t,this.lineWidthRange[0],this.lineWidthRange[1]))},n.prototype.showOverdrawInspector=function(t){if(t||this._showOverdrawInspector){this._showOverdrawInspector=t;var e=this.gl;if(t){e.blendFunc(e.CONSTANT_COLOR,e.ONE);e.blendColor(1/8,1/8,1/8,0),e.clearColor(0,0,0,1),e.clear(e.COLOR_BUFFER_BIT)}else e.blendFunc(e.ONE,e.ONE_MINUS_SRC_ALPHA)}}},{"../data/bucket":329,"../data/buffer":334,"../source/pixels_to_tile_units":363,"../source/source_cache":367,"../util/browser":426,"../util/struct_array":440,"../util/util":442,"./create_uniform_pragmas":344,"./draw_background":345,"./draw_circle":346,"./draw_debug":348,"./draw_fill":349,"./draw_line":350,"./draw_raster":351,"./draw_symbol":352,"./frame_history":353,"./painter/use_program":356,"./vertex_array_object":357,"gl-matrix":193}],356:[function(t,e,r){"use strict";function n(t,e){return t.replace(/#pragma mapbox: ([\w]+) ([\w]+) ([\w]+) ([\w]+)/g,function(t,r,n,i,a){return e[r][a].replace(/{type}/g,i).replace(/{precision}/g,n)})}var i=t("assert"),a=t("../../util/util"),o=t("mapbox-gl-shaders"),s=o.util;e.exports._createProgram=function(t,e,r,l){for(var u=this.gl,c=u.createProgram(),h=o[t],f="#define MAPBOX_GL_JS;\n",d=0;d<e.length;d++)f+="#define "+e[d]+";\n";var p=u.createShader(u.FRAGMENT_SHADER);u.shaderSource(p,n(f+h.fragmentSource,l)),u.compileShader(p),i(u.getShaderParameter(p,u.COMPILE_STATUS),u.getShaderInfoLog(p)),u.attachShader(c,p);var m=u.createShader(u.VERTEX_SHADER);u.shaderSource(m,n(f+s+h.vertexSource,r)),u.compileShader(m),i(u.getShaderParameter(m,u.COMPILE_STATUS),u.getShaderInfoLog(m)),u.attachShader(c,m),u.linkProgram(c),i(u.getProgramParameter(c,u.LINK_STATUS),u.getProgramInfoLog(c));for(var g={},v=u.getProgramParameter(c,u.ACTIVE_ATTRIBUTES),y=0;y<v;y++){var b=u.getActiveAttrib(c,y);g[b.name]=u.getAttribLocation(c,b.name)}for(var x={},_=u.getProgramParameter(c,u.ACTIVE_UNIFORMS),w=0;w<_;w++){var M=u.getActiveUniform(c,w);x[M.name]=u.getUniformLocation(c,M.name)}return a.extend({program:c,definition:h,attributes:g,numAttributes:v},g,x)},e.exports._createProgramCached=function(t,e,r,n){this.cache=this.cache||{};var i=JSON.stringify({name:t,defines:e,vertexPragmas:r,fragmentPragmas:n});return this.cache[i]||(this.cache[i]=this._createProgram(t,e,r,n)),this.cache[i]},e.exports.useProgram=function(t,e,r,n){var i=this.gl;e=e||[],this._showOverdrawInspector&&(e=e.concat("OVERDRAW_INSPECTOR"));var a=this._createProgramCached(t,e,r,n);return this.currentProgram!==a&&(i.useProgram(a.program),this.currentProgram=a),a}},{"../../util/util":442,assert:47,"mapbox-gl-shaders":303}],357:[function(t,e,r){"use strict";function n(){this.boundProgram=null,this.boundVertexBuffer=null,this.boundVertexBuffer2=null,this.boundElementBuffer=null,this.vao=null}var i=t("assert");e.exports=n,n.prototype.bind=function(t,e,r,n,i){void 0===t.extVertexArrayObject&&(t.extVertexArrayObject=t.getExtension("OES_vertex_array_object"));var a=!this.vao||this.boundProgram!==e||this.boundVertexBuffer!==r||this.boundVertexBuffer2!==i||this.boundElementBuffer!==n;!t.extVertexArrayObject||a?this.freshBind(t,e,r,n,i):t.extVertexArrayObject.bindVertexArrayOES(this.vao)},n.prototype.freshBind=function(t,e,r,n,a){var o,s=e.numAttributes;if(t.extVertexArrayObject)this.vao&&this.destroy(t),this.vao=t.extVertexArrayObject.createVertexArrayOES(),t.extVertexArrayObject.bindVertexArrayOES(this.vao),o=0,this.boundProgram=e,this.boundVertexBuffer=r,this.boundVertexBuffer2=a,this.boundElementBuffer=n;else{o=t.currentNumAttributes||0;for(var l=s;l<o;l++)i(0!==l),t.disableVertexAttribArray(l)}for(var u=o;u<s;u++)t.enableVertexAttribArray(u);r.bind(t),r.setVertexAttribPointers(t,e),a&&(a.bind(t),a.setVertexAttribPointers(t,e)),n&&n.bind(t),t.currentNumAttributes=s},n.prototype.unbind=function(t){var e=t.extVertexArrayObject;e&&e.bindVertexArrayOES(null)},n.prototype.destroy=function(t){var e=t.extVertexArrayObject;e&&this.vao&&(e.deleteVertexArrayOES(this.vao),this.vao=null)}},{assert:47}],358:[function(t,e,r){"use strict";function n(t,e,r){e=e||{},this.id=t,this.dispatcher=r,this._data=e.data,void 0!==e.maxzoom&&(this.maxzoom=e.maxzoom),e.type&&(this.type=e.type);var n=s/this.tileSize;this.workerOptions=a.extend({source:this.id,cluster:e.cluster||!1,geojsonVtOptions:{buffer:(void 0!==e.buffer?e.buffer:128)*n,tolerance:(void 0!==e.tolerance?e.tolerance:.375)*n,extent:s,maxZoom:this.maxzoom},superclusterOptions:{maxZoom:Math.min(e.clusterMaxZoom,this.maxzoom-1)||this.maxzoom-1,extent:s,radius:(e.clusterRadius||50)*n,log:!1}},e.workerOptions),this._updateWorkerData(function(t){if(t)return void this.fire("error",{error:t});this.fire("load")}.bind(this))}var i=t("../util/evented"),a=t("../util/util"),o=t("resolve-url"),s=t("../data/bucket").EXTENT;e.exports=n,n.prototype=a.inherit(i,{type:"geojson",minzoom:0,maxzoom:18,tileSize:512,isTileClipped:!0,reparseOverscaled:!0,onAdd:function(t){this.map=t},setData:function(t){return this._data=t,this._updateWorkerData(function(t){if(t)return this.fire("error",{error:t});this.fire("change")}.bind(this)),this},_updateWorkerData:function(t){var e=a.extend({},this.workerOptions),r=this._data;"string"==typeof r?e.url="undefined"!=typeof window?o(window.location.href,r):r:e.data=JSON.stringify(r),this.workerID=this.dispatcher.send(this.type+".loadData",e,function(e){this._loaded=!0,t(e)}.bind(this))},loadTile:function(t,e){var r=t.coord.z>this.maxzoom?Math.pow(2,t.coord.z-this.maxzoom):1,n={type:this.type,uid:t.uid,coord:t.coord,zoom:t.coord.z,maxZoom:this.maxzoom,tileSize:this.tileSize,source:this.id,overscaling:r,angle:this.map.transform.angle,pitch:this.map.transform.pitch,showCollisionBoxes:this.map.showCollisionBoxes};t.workerID=this.dispatcher.send("load tile",n,function(r,n){if(t.unloadVectorData(this.map.painter),!t.aborted)return r?e(r):(t.loadVectorData(n,this.map.style),t.redoWhenDone&&(t.redoWhenDone=!1,t.redoPlacement(this)),e(null))}.bind(this),this.workerID)},abortTile:function(t){t.aborted=!0},unloadTile:function(t){t.unloadVectorData(this.map.painter),this.dispatcher.send("remove tile",{uid:t.uid,source:this.id},function(){},t.workerID)},serialize:function(){return{type:this.type,data:this._data}}})},{"../data/bucket":329,"../util/evented":434,"../util/util":442,"resolve-url":501}],359:[function(t,e,r){"use strict";function n(t,e,r){r&&(this.loadGeoJSON=r),h.call(this,t,e)}var i=t("../util/util"),a=t("../util/ajax"),o=t("geojson-rewind"),s=t("./geojson_wrapper"),l=t("vt-pbf"),u=t("supercluster"),c=t("geojson-vt"),h=t("./vector_tile_worker_source");e.exports=n,n.prototype=i.inherit(h,{_geoJSONIndexes:{},loadVectorData:function(t,e){var r=t.source,n=t.coord;if(!this._geoJSONIndexes[r])return e(null,null);var i=this._geoJSONIndexes[r].getTile(Math.min(n.z,t.maxZoom),n.x,n.y);if(!i)return e(null,null);var a=new s(i.features);a.name="_geojsonTileLayer";var o=l({layers:{_geojsonTileLayer:a}});0===o.byteOffset&&o.byteLength===o.buffer.byteLength||(o=new Uint8Array(o)),e(null,{tile:a,rawTileData:o.buffer})},loadData:function(t,e){var r=function(r,n){return r?e(r):"object"!=typeof n?e(new Error("Input data is not a valid GeoJSON object.")):(o(n,!0),void this._indexData(n,t,function(r,n){if(r)return e(r);this._geoJSONIndexes[t.source]=n,e(null)}.bind(this)))}.bind(this);this.loadGeoJSON(t,r)},loadGeoJSON:function(t,e){if(t.url)a.getJSON(t.url,e);else{if("string"!=typeof t.data)return e(new Error("Input data is not a valid GeoJSON object."));try{return e(null,JSON.parse(t.data))}catch(t){return e(new Error("Input data is not a valid GeoJSON object."))}}},_indexData:function(t,e,r){try{e.cluster?r(null,u(e.superclusterOptions).load(t.features)):r(null,c(t,e.geojsonVtOptions))}catch(t){return r(t)}}})},{"../util/ajax":425,"../util/util":442,"./geojson_wrapper":360,"./vector_tile_worker_source":371,"geojson-rewind":138,"geojson-vt":142,supercluster:529,"vt-pbf":556}],360:[function(t,e,r){"use strict";function n(t){this.features=t,this.length=t.length,this.extent=s}function i(t){if(this.type=t.type,1===t.type){this.rawGeometry=[];for(var e=0;e<t.geometry.length;e++)this.rawGeometry.push([t.geometry[e]])}else this.rawGeometry=t.geometry;this.properties=t.tags,this.extent=s}var a=t("point-geometry"),o=t("vector-tile").VectorTileFeature,s=t("../data/bucket").EXTENT;e.exports=n,n.prototype.feature=function(t){return new i(this.features[t])},i.prototype.loadGeometry=function(){var t=this.rawGeometry;this.geometry=[];for(var e=0;e<t.length;e++){for(var r=t[e],n=[],i=0;i<r.length;i++)n.push(new a(r[i][0],r[i][1]));this.geometry.push(n)}return this.geometry},i.prototype.bbox=function(){this.geometry||this.loadGeometry();for(var t=this.geometry,e=1/0,r=-1/0,n=1/0,i=-1/0,a=0;a<t.length;a++)for(var o=t[a],s=0;s<o.length;s++){var l=o[s];e=Math.min(e,l.x),r=Math.max(r,l.x),n=Math.min(n,l.y),i=Math.max(i,l.y)}return[e,n,r,i]},i.prototype.toGeoJSON=o.prototype.toGeoJSON},{"../data/bucket":329,"point-geometry":484,"vector-tile":550}],361:[function(t,e,r){"use strict";function n(t,e,r){this.id=t,this.dispatcher=r,this.url=e.url,this.coordinates=e.coordinates,u.getImage(e.url,function(t,r){if(t)return this.fire("error",{error:t});this.image=r,this.image.addEventListener("load",function(){this.map._rerender()}.bind(this)),this._loaded=!0,this.fire("load"),this.map&&this.setCoordinates(e.coordinates)}.bind(this))}var i=t("../util/util"),a=t("./tile_coord"),o=t("../geo/lng_lat"),s=t("point-geometry"),l=t("../util/evented"),u=t("../util/ajax"),c=t("../data/bucket").EXTENT,h=t("../render/draw_raster").RasterBoundsArray,f=t("../data/buffer"),d=t("../render/vertex_array_object");e.exports=n,n.prototype=i.inherit(l,{minzoom:0,maxzoom:22,tileSize:512,onAdd:function(t){this.map=t,this.image&&this.setCoordinates(this.coordinates)},setCoordinates:function(t){this.coordinates=t;var e=this.map,r=t.map(function(t){return e.transform.locationCoordinate(o.convert(t)).zoomTo(0)}),n=this.centerCoord=i.getCoordinatesCenter(r);return n.column=Math.round(n.column),n.row=Math.round(n.row),this.minzoom=this.maxzoom=n.zoom,this._coord=new a(n.zoom,n.column,n.row),this._tileCoords=r.map(function(t){var e=t.zoomTo(n.zoom);return new s(Math.round((e.column-n.column)*c),Math.round((e.row-n.row)*c))}),this.fire("change"),this},_setTile:function(t){this._prepared=!1,this.tile=t;var e=new h;e.emplaceBack(this._tileCoords[0].x,this._tileCoords[0].y,0,0),e.emplaceBack(this._tileCoords[1].x,this._tileCoords[1].y,32767,0),e.emplaceBack(this._tileCoords[3].x,this._tileCoords[3].y,0,32767),e.emplaceBack(this._tileCoords[2].x,this._tileCoords[2].y,32767,32767),this.tile.buckets={},this.tile.boundsBuffer=new f(e.serialize(),h.serialize(),f.BufferType.VERTEX),this.tile.boundsVAO=new d,this.tile.state="loaded"},prepare:function(){if(this._loaded&&this.image&&this.image.complete&&this.tile){var t=this.map.painter,e=t.gl;this._prepared?(e.bindTexture(e.TEXTURE_2D,this.tile.texture),e.texSubImage2D(e.TEXTURE_2D,0,0,0,e.RGBA,e.UNSIGNED_BYTE,this.image)):(this.tile.texture=e.createTexture(),e.bindTexture(e.TEXTURE_2D,this.tile.texture),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_S,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_WRAP_T,e.CLAMP_TO_EDGE),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MIN_FILTER,e.LINEAR),e.texParameteri(e.TEXTURE_2D,e.TEXTURE_MAG_FILTER,e.LINEAR),e.texImage2D(e.TEXTURE_2D,0,e.RGBA,e.RGBA,e.UNSIGNED_BYTE,this.image))}},loadTile:function(t,e){this._coord&&this._coord.toString()===t.coord.toString()?(this._setTile(t),e(null)):(t.state="errored",e(null))},serialize:function(){return{type:"image",urls:this.url,coordinates:this.coordinates}}})},{"../data/bucket":329,"../data/buffer":334,"../geo/lng_lat":339,"../render/draw_raster":351,"../render/vertex_array_object":357,"../util/ajax":425,"../util/evented":434,"../util/util":442,"./tile_coord":369,"point-geometry":484}],362:[function(t,e,r){"use strict";var n=t("../util/util"),i=t("../util/ajax"),a=t("../util/browser"),o=t("../util/mapbox").normalizeSourceURL;e.exports=function(t,e){var r=function(t,r){if(t)return e(t);var i=n.pick(r,["tiles","minzoom","maxzoom","attribution"]);r.vector_layers&&(i.vectorLayers=r.vector_layers,i.vectorLayerIds=i.vectorLayers.map(function(t){return t.id})),e(null,i)};t.url?i.getJSON(o(t.url),r):a.frame(r.bind(null,null,t))}},{"../util/ajax":425,"../util/browser":426,"../util/mapbox":439,"../util/util":442}],363:[function(t,e,r){"use strict";var n=t("../data/bucket");e.exports=function(t,e,r){return e*(n.EXTENT/(t.tileSize*Math.pow(2,r-t.coord.z)))}},{"../data/bucket":329}],364:[function(t,e,r){"use strict";function n(t,e){var r=t.coord,n=e.coord;return r.z-n.z||r.y-n.y||r.w-n.w||r.x-n.x}function i(t){for(var e=t[0]||{},r=1;r<t.length;r++){var n=t[r];for(var i in n){var a=n[i],o=e[i];if(void 0===o)o=e[i]=a;else for(var s=0;s<a.length;s++)o.push(a[s])}}return e}var a=t("./tile_coord");r.rendered=function(t,e,r,a,o,s){var l=t.tilesIn(r);l.sort(n);for(var u=[],c=0;c<l.length;c++){var h=l[c];h.tile.featureIndex&&u.push(h.tile.featureIndex.query({queryGeometry:h.queryGeometry,scale:h.scale,tileSize:h.tile.tileSize,bearing:s,params:a},e))}return i(u)},r.source=function(t,e){for(var r=t.getRenderableIds().map(function(e){return t.getTileByID(e)}),n=[],i={},o=0;o<r.length;o++){var s=r[o],l=new a(Math.min(s.sourceMaxZoom,s.coord.z),s.coord.x,s.coord.y,0).id;i[l]||(i[l]=!0,s.querySourceFeatures(n,e))}return n}},{"./tile_coord":369}],365:[function(t,e,r){"use strict";function n(t,e,r){this.id=t,this.dispatcher=r,i.extend(this,i.pick(e,["url","scheme","tileSize"])),s(e,function(t,e){if(t)return this.fire("error",t);i.extend(this,e),this.fire("load")}.bind(this))}var i=t("../util/util"),a=t("../util/ajax"),o=t("../util/evented"),s=t("./load_tilejson"),l=t("../util/mapbox").normalizeTileURL;e.exports=n,n.prototype=i.inherit(o,{minzoom:0,maxzoom:22,roundZoom:!0,scheme:"xyz",tileSize:512,_loaded:!1,onAdd:function(t){this.map=t},serialize:function(){return{type:"raster",url:this.url,tileSize:this.tileSize}},loadTile:function(t,e){function r(r,n){if(delete t.request,!t.aborted){if(r)return e(r);var i=this.map.painter.gl;t.texture=this.map.painter.getTexture(n.width),t.texture?(i.bindTexture(i.TEXTURE_2D,t.texture),i.texSubImage2D(i.TEXTURE_2D,0,0,0,i.RGBA,i.UNSIGNED_BYTE,n)):(t.texture=i.createTexture(),i.bindTexture(i.TEXTURE_2D,t.texture),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MIN_FILTER,i.LINEAR_MIPMAP_NEAREST),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_MAG_FILTER,i.LINEAR),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_S,i.CLAMP_TO_EDGE),i.texParameteri(i.TEXTURE_2D,i.TEXTURE_WRAP_T,i.CLAMP_TO_EDGE),i.pixelStorei(i.UNPACK_PREMULTIPLY_ALPHA_WEBGL,!0),i.texImage2D(i.TEXTURE_2D,0,i.RGBA,i.RGBA,i.UNSIGNED_BYTE,n),t.texture.size=n.width),i.generateMipmap(i.TEXTURE_2D),this.map.animationLoop.set(this.map.style.rasterFadeDuration),t.state="loaded",e(null)}}var n=l(t.coord.url(this.tiles,null,this.scheme),this.url,this.tileSize);t.request=a.getImage(n,r.bind(this))},abortTile:function(t){t.request&&(t.request.abort(),delete t.request)},unloadTile:function(t){t.texture&&this.map.painter.saveTexture(t.texture)}})},{"../util/ajax":425,"../util/evented":434,"../util/mapbox":439,"../util/util":442,"./load_tilejson":362}],366:[function(t,e,r){"use strict";var n=t("../util/util"),i={vector:t("../source/vector_tile_source"),raster:t("../source/raster_tile_source"),geojson:t("../source/geojson_source"),video:t("../source/video_source"),image:t("../source/image_source")};r.create=function(t,e,r){if(e=new i[e.type](t,e,r),e.id!==t)throw new Error("Expected Source id to be "+t+" instead of "+e.id);return n.bindAll(["load","abort","unload","serialize","prepare"],e),e},r.getType=function(t){return i[t]},r.setType=function(t,e){i[t]=e}},{"../source/geojson_source":358,"../source/image_source":361,"../source/raster_tile_source":365,"../source/vector_tile_source":370,"../source/video_source":372,"../util/util":442}],367:[function(t,e,r){"use strict";function n(t,e,r){this.id=t,this.dispatcher=r;var n=this._source=o.create(t,e,r).on("load",function(){this.map&&this._source.onAdd&&this._source.onAdd(this.map),this._sourceLoaded=!0,this.tileSize=n.tileSize,this.minzoom=n.minzoom,this.maxzoom=n.maxzoom,this.roundZoom=n.roundZoom,this.reparseOverscaled=n.reparseOverscaled,this.isTileClipped=n.isTileClipped,this.attribution=n.attribution,this.vectorLayerIds=n.vectorLayerIds,this.fire("load")}.bind(this)).on("error",function(t){this._sourceErrored=!0,this.fire("error",t)}.bind(this)).on("change",function(){this.reload(),this.transform&&this.update(this.transform,this.map&&this.map.style.rasterFadeDuration),this.fire("change")}.bind(this));this._tiles={},this._cache=new c(0,this.unloadTile.bind(this)),this._isIdRenderable=this._isIdRenderable.bind(this)}function i(t,e,r){var n=r.zoomTo(Math.min(t.z,e));return{x:(n.column-(t.x+t.w*Math.pow(2,t.z)))*d,y:(n.row-t.y)*d}}function a(t,e){return t%32-e%32}var o=t("./source"),s=t("./tile"),l=t("../util/evented"),u=t("./tile_coord"),c=t("../util/lru_cache"),h=t("../geo/coordinate"),f=t("../util/util"),d=t("../data/bucket").EXTENT;e.exports=n,n.maxOverzooming=10,n.maxUnderzooming=3,n.prototype=f.inherit(l,{onAdd:function(t){this.map=t,this._source&&this._source.onAdd&&this._source.onAdd(t)},loaded:function(){if(this._sourceErrored)return!0;if(!this._sourceLoaded)return!1;for(var t in this._tiles){var e=this._tiles[t];if("loaded"!==e.state&&"errored"!==e.state)return!1}return!0},getSource:function(){return this._source},loadTile:function(t,e){return this._source.loadTile(t,e)},unloadTile:function(t){if(this._source.unloadTile)return this._source.unloadTile(t)},abortTile:function(t){if(this._source.abortTile)return this._source.abortTile(t)},serialize:function(){return this._source.serialize()},prepare:function(){if(this._sourceLoaded&&this._source.prepare)return this._source.prepare()},getIds:function(){return Object.keys(this._tiles).map(Number).sort(a)},getRenderableIds:function(){return this.getIds().filter(this._isIdRenderable)},_isIdRenderable:function(t){return this._tiles[t].isRenderable()&&!this._coveredTiles[t]},reload:function(){this._cache.reset();for(var t in this._tiles){var e=this._tiles[t];"loading"!==e.state&&(e.state="reloading"),this.loadTile(this._tiles[t],this._tileLoaded.bind(this,this._tiles[t]))}},_tileLoaded:function(t,e){if(e)return t.state="errored",this.fire("tile.error",{tile:t,error:e}),void this._source.fire("tile.error",{tile:t,error:e});t.source=this,t.timeAdded=(new Date).getTime(),this.fire("tile.load",{tile:t}),this._source.fire("tile.load",{tile:t})},getTile:function(t){return this.getTileByID(t.id)},getTileByID:function(t){return this._tiles[t]},getZoom:function(t){return t.zoom+t.scaleZoom(t.tileSize/this.tileSize)},findLoadedChildren:function(t,e,r){var n=!1;for(var i in this._tiles){var a=this._tiles[i];if(!(r[i]||!a.isRenderable()||a.coord.z<=t.z||a.coord.z>e)){var o=Math.pow(2,Math.min(a.coord.z,this.maxzoom)-Math.min(t.z,this.maxzoom));if(Math.floor(a.coord.x/o)===t.x&&Math.floor(a.coord.y/o)===t.y)for(r[i]=!0,n=!0;a&&a.coord.z-1>t.z;){var s=a.coord.parent(this.maxzoom).id;a=this._tiles[s],a&&a.isRenderable()&&(delete r[i],r[s]=!0)}}}return n},findLoadedParent:function(t,e,r){for(var n=t.z-1;n>=e;n--){t=t.parent(this.maxzoom);var i=this._tiles[t.id];if(i&&i.isRenderable())return r[t.id]=!0,i;if(this._cache.has(t.id))return this.addTile(t),r[t.id]=!0,this._tiles[t.id]}},updateCacheSize:function(t){var e=Math.ceil(t.width/t.tileSize)+1,r=Math.ceil(t.height/t.tileSize)+1,n=e*r;this._cache.setMaxSize(Math.floor(5*n))},update:function(t,e){if(this._sourceLoaded){var r,i,a;this.updateCacheSize(t);var o=(this.roundZoom?Math.round:Math.floor)(this.getZoom(t)),s=Math.max(o-n.maxOverzooming,this.minzoom),l=Math.max(o+n.maxUnderzooming,this.minzoom),c={},h=(new Date).getTime();this._coveredTiles={};var d=this.used?t.coveringTiles(this._source):[];for(r=0;r<d.length;r++)i=d[r],a=this.addTile(i),c[i.id]=!0,a.isRenderable()||this.findLoadedChildren(i,l,c)||this.findLoadedParent(i,s,c);for(var p={},m=Object.keys(c),g=0;g<m.length;g++){var v=m[g];i=u.fromID(v),a=this._tiles[v],a&&a.timeAdded>h-(e||0)&&(this.findLoadedChildren(i,l,c)&&(c[v]=!0),this.findLoadedParent(i,s,p))}var y;for(y in p)c[y]||(this._coveredTiles[y]=!0);for(y in p)c[y]=!0;var b=f.keysDifference(this._tiles,c);for(r=0;r<b.length;r++)this.removeTile(+b[r]);this.transform=t}},addTile:function(t){var e=this._tiles[t.id];if(e)return e;var r=t.wrapped()
;if(e=this._tiles[r.id],e||(e=this._cache.get(r.id))&&this._redoPlacement&&this._redoPlacement(e),!e){var n=t.z,i=n>this.maxzoom?Math.pow(2,n-this.maxzoom):1;e=new s(r,this.tileSize*i,this.maxzoom),this.loadTile(e,this._tileLoaded.bind(this,e))}return e.uses++,this._tiles[t.id]=e,this.fire("tile.add",{tile:e}),this._source.fire("tile.add",{tile:e}),e},removeTile:function(t){var e=this._tiles[t];e&&(e.uses--,delete this._tiles[t],this.fire("tile.remove",{tile:e}),this._source.fire("tile.remove",{tile:e}),e.uses>0||(e.isRenderable()?this._cache.add(e.coord.wrapped().id,e):(e.aborted=!0,this.abortTile(e),this.unloadTile(e))))},clearTiles:function(){for(var t in this._tiles)this.removeTile(t);this._cache.reset()},tilesIn:function(t){for(var e={},r=this.getIds(),n=1/0,a=1/0,o=-1/0,s=-1/0,l=t[0].zoom,c=0;c<t.length;c++){var f=t[c];n=Math.min(n,f.column),a=Math.min(a,f.row),o=Math.max(o,f.column),s=Math.max(s,f.row)}for(var p=0;p<r.length;p++){var m=this._tiles[r[p]],g=u.fromID(r[p]),v=[i(g,m.sourceMaxZoom,new h(n,a,l)),i(g,m.sourceMaxZoom,new h(o,s,l))];if(v[0].x<d&&v[0].y<d&&v[1].x>=0&&v[1].y>=0){for(var y=[],b=0;b<t.length;b++)y.push(i(g,m.sourceMaxZoom,t[b]));var x=e[m.coord.id];void 0===x&&(x=e[m.coord.id]={tile:m,coord:g,queryGeometry:[],scale:Math.pow(2,this.transform.zoom-m.coord.z)}),x.queryGeometry.push(y)}}var _=[];for(var w in e)_.push(e[w]);return _},redoPlacement:function(){for(var t=this.getIds(),e=0;e<t.length;e++){this.getTileByID(t[e]).redoPlacement(this)}},getVisibleCoordinates:function(){return this.getRenderableIds().map(u.fromID)}})},{"../data/bucket":329,"../geo/coordinate":338,"../util/evented":434,"../util/lru_cache":438,"../util/util":442,"./source":366,"./tile":368,"./tile_coord":369}],368:[function(t,e,r){"use strict";function n(t,e,r){this.coord=t,this.uid=a.uniqueId(),this.uses=0,this.tileSize=e,this.sourceMaxZoom=r,this.buckets={},this.state="loading"}function i(t,e){if(e){for(var r={},n=0;n<t.length;n++){var i=e.getLayer(t[n].layerId);if(i){var s=o.create(a.extend({layer:i,childLayers:t[n].childLayerIds.map(e.getLayer.bind(e)).filter(function(t){return t})},t[n]));r[s.id]=s}}return r}}var a=t("../util/util"),o=t("../data/bucket"),s=t("../data/feature_index"),l=t("vector-tile"),u=t("pbf"),c=t("../util/vectortile_to_geojson"),h=t("feature-filter"),f=t("../symbol/collision_tile"),d=t("../symbol/collision_box"),p=t("../symbol/symbol_instances"),m=t("../symbol/symbol_quads");e.exports=n,n.prototype={loadVectorData:function(t,e){this.state="loaded",t&&(this.collisionBoxArray=new d(t.collisionBoxArray),this.collisionTile=new f(t.collisionTile,this.collisionBoxArray),this.symbolInstancesArray=new p(t.symbolInstancesArray),this.symbolQuadsArray=new m(t.symbolQuadsArray),this.featureIndex=new s(t.featureIndex,t.rawTileData,this.collisionTile),this.rawTileData=t.rawTileData,this.buckets=i(t.buckets,e))},reloadSymbolData:function(t,e,r){if("unloaded"!==this.state){this.collisionTile=new f(t.collisionTile,this.collisionBoxArray),this.featureIndex.setCollisionTile(this.collisionTile);for(var n in this.buckets){var o=this.buckets[n];"symbol"===o.type&&(o.destroy(e.gl),delete this.buckets[n])}a.extend(this.buckets,i(t.buckets,r))}},unloadVectorData:function(t){for(var e in this.buckets){this.buckets[e].destroy(t.gl)}this.collisionBoxArray=null,this.symbolQuadsArray=null,this.symbolInstancesArray=null,this.collisionTile=null,this.featureIndex=null,this.rawTileData=null,this.buckets=null,this.state="unloaded"},redoPlacement:function(t){function e(e,r){this.reloadSymbolData(r,t.map.painter,t.map.style),t.fire("tile.load",{tile:this}),this.state="loaded",this.redoWhenDone&&(this.redoPlacement(t),this.redoWhenDone=!1)}if("loaded"!==this.state||"reloading"===this.state)return void(this.redoWhenDone=!0);this.state="reloading",t.dispatcher.send("redo placement",{uid:this.uid,source:t.id,angle:t.map.transform.angle,pitch:t.map.transform.pitch,showCollisionBoxes:t.map.showCollisionBoxes},e.bind(this),this.workerID)},getBucket:function(t){return this.buckets&&this.buckets[t.ref||t.id]},querySourceFeatures:function(t,e){if(this.rawTileData){this.vtLayers||(this.vtLayers=new l.VectorTile(new u(new Uint8Array(this.rawTileData))).layers);var r=this.vtLayers._geojsonTileLayer||this.vtLayers[e.sourceLayer];if(r)for(var n=h(e.filter),i={z:this.coord.z,x:this.coord.x,y:this.coord.y},a=0;a<r.length;a++){var o=r.feature(a);if(n(o)){var s=new c(o,this.coord.z,this.coord.x,this.coord.y);s.tile=i,t.push(s)}}}},isRenderable:function(){return"loaded"===this.state||"reloading"===this.state}}},{"../data/bucket":329,"../data/feature_index":336,"../symbol/collision_box":394,"../symbol/collision_tile":396,"../symbol/symbol_instances":405,"../symbol/symbol_quads":406,"../util/util":442,"../util/vectortile_to_geojson":443,"feature-filter":132,pbf:478,"vector-tile":550}],369:[function(t,e,r){"use strict";function n(t,e,r,n){l(!isNaN(t)&&t>=0&&t%1==0),l(!isNaN(e)&&e>=0&&e%1==0),l(!isNaN(r)&&r>=0&&r%1==0),isNaN(n)&&(n=0),this.z=+t,this.x=+e,this.y=+r,this.w=+n,(n*=2)<0&&(n=-1*n-1);var i=1<<this.z;this.id=32*(i*i*n+i*this.y+this.x)+this.z,this.posMatrix=null}function i(t,e,r){for(var n,i="",a=t;a>0;a--)n=1<<a-1,i+=(e&n?1:0)+(r&n?2:0);return i}function a(t,e){if(t.row>e.row){var r=t;t=e,e=r}return{x0:t.column,y0:t.row,x1:e.column,y1:e.row,dx:e.column-t.column,dy:e.row-t.row}}function o(t,e,r,n,i){var a=Math.max(r,Math.floor(e.y0)),o=Math.min(n,Math.ceil(e.y1));if(t.x0===e.x0&&t.y0===e.y0?t.x0+e.dy/t.dy*t.dx<e.x1:t.x1-e.dy/t.dy*t.dx<e.x0){var s=t;t=e,e=s}for(var l=t.dx/t.dy,u=e.dx/e.dy,c=t.dx>0,h=e.dx<0,f=a;f<o;f++){var d=l*Math.max(0,Math.min(t.dy,f+c-t.y0))+t.x0,p=u*Math.max(0,Math.min(e.dy,f+h-e.y0))+e.x0;i(Math.floor(p),Math.ceil(d),f)}}function s(t,e,r,n,i,s){var l,u=a(t,e),c=a(e,r),h=a(r,t);u.dy>c.dy&&(l=u,u=c,c=l),u.dy>h.dy&&(l=u,u=h,h=l),c.dy>h.dy&&(l=c,c=h,h=l),u.dy&&o(h,u,n,i,s),c.dy&&o(h,c,n,i,s)}var l=t("assert"),u=t("whoots-js"),c=t("../geo/coordinate");e.exports=n,n.prototype.toString=function(){return this.z+"/"+this.x+"/"+this.y},n.prototype.toCoordinate=function(t){var e=Math.min(this.z,t),r=Math.pow(2,e),n=this.y,i=this.x+r*this.w;return new c(i,n,e)},n.fromID=function(t){var e=t%32,r=1<<e,i=(t-e)/32,a=i%r,o=(i-a)/r%r,s=Math.floor(i/(r*r));return s%2!=0&&(s=-1*s-1),s/=2,new n(e,a,o,s)},n.prototype.url=function(t,e,r){var n=u.getTileBBox(this.x,this.y,this.z),a=i(this.z,this.x,this.y);return t[(this.x+this.y)%t.length].replace("{prefix}",(this.x%16).toString(16)+(this.y%16).toString(16)).replace("{z}",Math.min(this.z,e||this.z)).replace("{x}",this.x).replace("{y}","tms"===r?Math.pow(2,this.z)-this.y-1:this.y).replace("{quadkey}",a).replace("{bbox-epsg-3857}",n)},n.prototype.parent=function(t){return 0===this.z?null:this.z>t?new n(this.z-1,this.x,this.y,this.w):new n(this.z-1,Math.floor(this.x/2),Math.floor(this.y/2),this.w)},n.prototype.wrapped=function(){return new n(this.z,this.x,this.y,0)},n.prototype.children=function(t){if(this.z>=t)return[new n(this.z+1,this.x,this.y,this.w)];var e=this.z+1,r=2*this.x,i=2*this.y;return[new n(e,r,i,this.w),new n(e,r+1,i,this.w),new n(e,r,i+1,this.w),new n(e,r+1,i+1,this.w)]},n.cover=function(t,e,r){function i(t,e,i){var s,l,u;if(i>=0&&i<=a)for(s=t;s<e;s++)l=(s%a+a)%a,u=new n(r,l,i,Math.floor(s/a)),o[u.id]=u}var a=1<<t,o={};return s(e[0],e[1],e[2],0,a,i),s(e[2],e[3],e[0],0,a,i),Object.keys(o).map(function(t){return o[t]})}},{"../geo/coordinate":338,assert:47,"whoots-js":566}],370:[function(t,e,r){"use strict";function n(t,e,r){if(this.id=t,this.dispatcher=r,a.extend(this,a.pick(e,["url","scheme","tileSize"])),this._options=a.extend({type:"vector"},e),512!==this.tileSize)throw new Error("vector tile sources must have a tileSize of 512");o(e,function(t,e){if(t)return void this.fire("error",t);a.extend(this,e),this.fire("load")}.bind(this))}var i=t("../util/evented"),a=t("../util/util"),o=t("./load_tilejson"),s=t("../util/mapbox").normalizeTileURL;e.exports=n,n.prototype=a.inherit(i,{minzoom:0,maxzoom:22,scheme:"xyz",tileSize:512,reparseOverscaled:!0,isTileClipped:!0,onAdd:function(t){this.map=t},serialize:function(){return a.extend({},this._options)},loadTile:function(t,e){function r(r,n){if(!t.aborted){if(r)return e(r);t.loadVectorData(n,this.map.style),t.redoWhenDone&&(t.redoWhenDone=!1,t.redoPlacement(this)),e(null),t.reloadCallback&&(this.loadTile(t,t.reloadCallback),t.reloadCallback=null)}}var n=t.coord.z>this.maxzoom?Math.pow(2,t.coord.z-this.maxzoom):1,i={url:s(t.coord.url(this.tiles,this.maxzoom,this.scheme),this.url),uid:t.uid,coord:t.coord,zoom:t.coord.z,tileSize:this.tileSize*n,source:this.id,overscaling:n,angle:this.map.transform.angle,pitch:this.map.transform.pitch,showCollisionBoxes:this.map.showCollisionBoxes};t.workerID?"loading"===t.state?t.reloadCallback=e:(i.rawTileData=t.rawTileData,this.dispatcher.send("reload tile",i,r.bind(this),t.workerID)):t.workerID=this.dispatcher.send("load tile",i,r.bind(this))},abortTile:function(t){this.dispatcher.send("abort tile",{uid:t.uid,source:this.id},null,t.workerID)},unloadTile:function(t){t.unloadVectorData(this.map.painter),this.dispatcher.send("remove tile",{uid:t.uid,source:this.id},null,t.workerID)}})},{"../util/evented":434,"../util/mapbox":439,"../util/util":442,"./load_tilejson":362}],371:[function(t,e,r){"use strict";function n(t,e,r){this.actor=t,this.styleLayers=e,r&&(this.loadVectorData=r),this.loading={},this.loaded={}}var i=t("../util/ajax"),a=t("vector-tile"),o=t("pbf"),s=t("./worker_tile");e.exports=n,n.prototype={loadTile:function(t,e){function r(t,r){return delete this.loading[n][i],t?e(t):r?(a.data=r.tile,a.parse(a.data,this.styleLayers.getLayerFamilies(),this.actor,r.rawTileData,e),this.loaded[n]=this.loaded[n]||{},void(this.loaded[n][i]=a)):e(null,null)}var n=t.source,i=t.uid;this.loading[n]||(this.loading[n]={});var a=this.loading[n][i]=new s(t);a.abort=this.loadVectorData(t,r.bind(this))},reloadTile:function(t,e){var r=this.loaded[t.source],n=t.uid;if(r&&r[n]){var i=r[n];i.parse(i.data,this.styleLayers.getLayerFamilies(),this.actor,t.rawTileData,e)}},abortTile:function(t){var e=this.loading[t.source],r=t.uid;e&&e[r]&&e[r].abort&&(e[r].abort(),delete e[r])},removeTile:function(t){var e=this.loaded[t.source],r=t.uid;e&&e[r]&&delete e[r]},loadVectorData:function(t,e){function r(t,r){if(t)return e(t);var n=new a.VectorTile(new o(new Uint8Array(r)));e(t,{tile:n,rawTileData:r})}var n=i.getArrayBuffer(t.url,r.bind(this));return function(){n.abort()}},redoPlacement:function(t,e){var r=this.loaded[t.source],n=this.loading[t.source],i=t.uid;if(r&&r[i]){var a=r[i],o=a.redoPlacement(t.angle,t.pitch,t.showCollisionBoxes);o.result&&e(null,o.result,o.transferables)}else n&&n[i]&&(n[i].angle=t.angle)}}},{"../util/ajax":425,"./worker_tile":374,pbf:478,"vector-tile":550}],372:[function(t,e,r){"use strict";function n(t,e){this.id=t,this.urls=e.urls,this.coordinates=e.coordinates,u.getVideo(e.urls,function(t,r){if(t)return this.fire("error",{error:t});this.video=r,this.video.loop=!0;var n;this.video.addEventListener("playing",function(){n=this.map.style.animationLoop.set(1/0),this.map._rerender()}.bind(this)),this.video.addEventListener("pause",function(){this.map.style.animationLoop.cancel(n)}.bind(this)),this.map&&(this.video.play(),this.setCoordinates(e.coordinates)),this.fire("load")}.bind(this))}var i=t("../util/util"),a=t("./tile_coord"),o=t("../geo/lng_lat"),s=t("point-geometry"),l=t("../util/evented"),u=t("../util/ajax"),c=t("../data/bucket").EXTENT,h=t("../render/draw_raster").RasterBoundsArray,f=t("../data/buffer"),d=t("../render/vertex_array_object");e.exports=n,n.prototype=i.inherit(l,{minzoom:0,maxzoom:22,tileSize:512,roundZoom:!0,getVideo:function(){return this.video},onAdd:function(t){this.map||(this.map=t,this.video&&(this.video.play(),this.setCoordinates(this.coordinates)))},setCoordinates:function(t){this.coordinates=t;var e=this.map,r=t.map(function(t){return e.transform.locationCoordinate(o.convert(t)).zoomTo(0)}),n=this.centerCoord=i.getCoordinatesCenter(r);return n.column=Math.round(n.column),n.row=Math.round(n.row),this.minzoom=this.maxzoom=n.zoom,this._coord=new a(n.zoom,n.column,n.row),this._tileCoords=r.map(function(t){var e=t.zoomTo(n.zoom);return new s(Math.round((e.column-n.column)*c),Math.round((e.row-n.row)*c))}),this.fire("change"),this},_setTile:function(t){this._prepared=!1,this.tile=t;var e=new h;e.emplaceBack(this._tileCoords[0].x,this._tileCoords[0].y,0,0),e.emplaceBack(this._tileCoords[1].x,this._tileCoords[1].y,32767,0),e.emplaceBack(this._tileCoords[3].x,this._tileCoords[3].y,0,32767),e.emplaceBack(this._tileCoords[2].x,this._tileCoords[2].y,32767,32767),this.tile.buckets={},this.tile.boundsBuffer=new f(e.serialize(),h.serialize(),f.BufferType.VERTEX),this.tile.boundsVAO=new d,this.tile.state="loaded"},prepare:function(){if(!(this.video.readyState<2)&&this.tile){var t=this.map.painter.gl;this._prepared?(t.bindTexture(t.TEXTURE_2D,this.tile.texture),t.texSubImage2D(t.TEXTURE_2D,0,0,0,t.RGBA,t.UNSIGNED_BYTE,this.video)):(this._prepared=!0,this.tile.texture=t.createTexture(),t.bindTexture(t.TEXTURE_2D,this.tile.texture),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.LINEAR),t.texImage2D(t.TEXTURE_2D,0,t.RGBA,t.RGBA,t.UNSIGNED_BYTE,this.video)),this._currentTime=this.video.currentTime}},loadTile:function(t,e){this._coord&&this._coord.toString()===t.coord.toString()?(this._setTile(t),e(null)):(t.state="errored",e(null))},serialize:function(){return{type:"video",urls:this.urls,coordinates:this.coordinates}}})},{"../data/bucket":329,"../data/buffer":334,"../geo/lng_lat":339,"../render/draw_raster":351,"../render/vertex_array_object":357,"../util/ajax":425,"../util/evented":434,"../util/util":442,"./tile_coord":369,"point-geometry":484}],373:[function(t,e,r){"use strict";function n(t){this.self=t,this.actor=new a(t,this);var e={getLayers:function(){return this.layers}.bind(this),getLayerFamilies:function(){return this.layerFamilies}.bind(this)};this.workerSources={vector:new l(this.actor,e),geojson:new u(this.actor,e)},this.self.registerWorkerSource=function(t,r){if(this.workerSources[t])throw new Error('Worker source with name "'+t+'" already registered.');this.workerSources[t]=new r(this.actor,e)}.bind(this)}function i(t){var e={};for(var r in t){var n=t[r],i=n.ref||n.id,a=t[i];a.layout&&"none"===a.layout.visibility||(e[i]=e[i]||[],r===i?e[i].unshift(n):e[i].push(n))}return e}var a=t("../util/actor"),o=t("../style/style_layer"),s=t("../util/util"),l=t("./vector_tile_worker_source"),u=t("./geojson_worker_source");e.exports=function(t){return new n(t)},s.extend(n.prototype,{"set layers":function(t){function e(t){var e=o.create(t,t.ref&&r.layers[t.ref]);e.updatePaintTransitions({},{transition:!1}),r.layers[e.id]=e}this.layers={};for(var r=this,n=[],a=0;a<t.length;a++){var s=t[a];"fill"!==s.type&&"line"!==s.type&&"circle"!==s.type&&"symbol"!==s.type||(s.ref?n.push(a):e(s))}for(var l=0;l<n.length;l++)e(t[n[l]]);this.layerFamilies=i(this.layers)},"update layers":function(t){function e(t){var e=a.layers[t.ref];a.layers[t.id]?a.layers[t.id].set(t,e):a.layers[t.id]=o.create(t,e),a.layers[t.id].updatePaintTransitions({},{transition:!1})}var r,n,a=this;for(r in t)n=t[r],n.ref&&e(n);for(r in t)n=t[r],n.ref||e(n);this.layerFamilies=i(this.layers)},"load tile":function(t,e){var r=t.type||"vector";this.workerSources[r].loadTile(t,e)},"reload tile":function(t,e){var r=t.type||"vector";this.workerSources[r].reloadTile(t,e)},"abort tile":function(t){var e=t.type||"vector";this.workerSources[e].abortTile(t)},"remove tile":function(t){var e=t.type||"vector";this.workerSources[e].removeTile(t)},"redo placement":function(t,e){var r=t.type||"vector";this.workerSources[r].redoPlacement(t,e)},"load worker source":function(t,e){try{this.self.importScripts(t.url),e()}catch(t){e(t)}}})},{"../style/style_layer":381,"../util/actor":424,"../util/util":442,"./geojson_worker_source":359,"./vector_tile_worker_source":371}],374:[function(t,e,r){"use strict";function n(t){this.coord=t.coord,this.uid=t.uid,this.zoom=t.zoom,this.tileSize=t.tileSize,this.source=t.source,this.overscaling=t.overscaling,this.angle=t.angle,this.pitch=t.pitch,this.showCollisionBoxes=t.showCollisionBoxes}function i(t){return!t.isEmpty()}function a(t){return t.serialize()}function o(t){var e=[];for(var r in t)t[r].getTransferables(e);return e}function s(t){return t.id}var l=t("../data/feature_index"),u=t("../symbol/collision_tile"),c=t("../data/bucket"),h=t("../symbol/collision_box"),f=t("../util/dictionary_coder"),d=t("../util/util"),p=t("../symbol/symbol_instances"),m=t("../symbol/symbol_quads");e.exports=n,n.prototype.parse=function(t,e,r,n,g){function v(t,e){for(var r=0;r<t.length;r++){var n=t.feature(r);n.index=r;for(var i in e)e[i].filter(n)&&e[i].features.push(n)}}function y(t){if(t)return g(t);if(2===++N){for(var e=P.length-1;e>=0;e--)b(E,P[e]);x()}}function b(t,e){if(e.populateArrays(A,j,F),"symbol"!==e.type)for(var r=0;r<e.features.length;r++){var n=e.features[r];T.insert(n,n.index,e.sourceLayerIndex,e.index)}e.features=null}function x(){E.status="done",E.redoPlacementAfterDone&&(E.redoPlacement(E.angle,E.pitch,null),E.redoPlacementAfterDone=!1);var t=T.serialize(),e=A.serialize(),r=E.collisionBoxArray.serialize(),s=E.symbolInstancesArray.serialize(),l=E.symbolQuadsArray.serialize(),u=[n].concat(t.transferables).concat(e.transferables),c=D.filter(i);g(null,{buckets:c.map(a),featureIndex:t.data,collisionTile:e.data,collisionBoxArray:r,symbolInstancesArray:s,symbolQuadsArray:l,rawTileData:n},o(c).concat(u))}this.status="parsing",this.data=t,this.collisionBoxArray=new h,this.symbolInstancesArray=new p,this.symbolQuadsArray=new m;var _,w,M,k,A=new u(this.angle,this.pitch,this.collisionBoxArray),T=new l(this.coord,this.overscaling,A,t.layers),S=new f(t.layers?Object.keys(t.layers).sort():["_geojsonTileLayer"]),E=this,L={},C={},I=0;for(var z in e)w=e[z][0],w.source===this.source&&(w.ref||w.minzoom&&this.zoom<w.minzoom||w.maxzoom&&this.zoom>=w.maxzoom||w.layout&&"none"===w.layout.visibility||t.layers&&!t.layers[w.sourceLayer]||(k=c.create({layer:w,index:I++,childLayers:e[z],zoom:this.zoom,overscaling:this.overscaling,showCollisionBoxes:this.showCollisionBoxes,collisionBoxArray:this.collisionBoxArray,symbolQuadsArray:this.symbolQuadsArray,symbolInstancesArray:this.symbolInstancesArray,sourceLayerIndex:S.encode(w.sourceLayer||"_geojsonTileLayer")}),k.createFilter(),L[w.id]=k,t.layers&&(M=w.sourceLayer,C[M]=C[M]||{},C[M][w.id]=k)));if(t.layers)for(M in C)1===w.version&&d.warnOnce('Vector tile source "'+this.source+'" layer "'+M+'" does not use vector tile spec v2 and therefore may have some rendering errors.'),(w=t.layers[M])&&v(w,C[M]);else v(t,L);var D=[],P=this.symbolBuckets=[],O=[];T.bucketLayerIDs={};for(var R in L)k=L[R],0!==k.features.length&&(T.bucketLayerIDs[k.index]=k.childLayers.map(s),D.push(k),"symbol"===k.type?P.push(k):O.push(k));var F={},j={},N=0;if(P.length>0){for(_=P.length-1;_>=0;_--)P[_].updateIcons(F),P[_].updateFont(j);for(var B in j)j[B]=Object.keys(j[B]).map(Number);F=Object.keys(F),r.send("get glyphs",{uid:this.uid,stacks:j},function(t,e){j=e,y(t)}),F.length?r.send("get icons",{icons:F},function(t,e){F=e,y(t)}):y()}for(_=O.length-1;_>=0;_--)b(this,O[_]);if(0===P.length)return x()},n.prototype.redoPlacement=function(t,e,r){if("done"!==this.status)return this.redoPlacementAfterDone=!0,this.angle=t,{};for(var n=new u(t,e,this.collisionBoxArray),s=this.symbolBuckets,l=s.length-1;l>=0;l--)s[l].placeFeatures(n,r);var c=n.serialize(),h=s.filter(i);return{result:{buckets:h.map(a),collisionTile:c.data},transferables:o(h).concat(c.transferables)}}},{"../data/bucket":329,"../data/feature_index":336,"../symbol/collision_box":394,"../symbol/collision_tile":396,"../symbol/symbol_instances":405,"../symbol/symbol_quads":406,"../util/dictionary_coder":432,"../util/util":442}],375:[function(t,e,r){"use strict";function n(){this.n=0,this.times=[]}e.exports=n,n.prototype.stopped=function(){return this.times=this.times.filter(function(t){return t.time>=(new Date).getTime()}),!this.times.length},n.prototype.set=function(t){return this.times.push({id:this.n,time:t+(new Date).getTime()}),this.n++},n.prototype.cancel=function(t){this.times=this.times.filter(function(e){return e.id!==t})}},{}],376:[function(t,e,r){"use strict";function n(t){this.base=t,this.retina=s.devicePixelRatio>1;var e=this.retina?"@2x":"";o.getJSON(l(t,e,".json"),function(t,e){if(t)return void this.fire("error",{error:t});this.data=e,this.img&&this.fire("load")}.bind(this)),o.getImage(l(t,e,".png"),function(t,e){if(t)return void this.fire("error",{error:t});for(var r=e.getData(),n=e.data=new Uint8Array(r.length),i=0;i<r.length;i+=4){var a=r[i+3]/255;n[i+0]=r[i+0]*a,n[i+1]=r[i+1]*a,n[i+2]=r[i+2]*a,n[i+3]=r[i+3]}this.img=e,this.data&&this.fire("load")}.bind(this))}function i(){}var a=t("../util/evented"),o=t("../util/ajax"),s=t("../util/browser"),l=t("../util/mapbox").normalizeSpriteURL;e.exports=n,n.prototype=Object.create(a),n.prototype.toJSON=function(){return this.base},n.prototype.loaded=function(){return!(!this.data||!this.img)},n.prototype.resize=function(){if(s.devicePixelRatio>1!==this.retina){var t=new n(this.base);t.on("load",function(){this.img=t.img,this.data=t.data,this.retina=t.retina}.bind(this))}},i.prototype={x:0,y:0,width:0,height:0,pixelRatio:1,sdf:!1},n.prototype.getSpritePosition=function(t){if(!this.loaded())return new i;var e=this.data&&this.data[t];return e&&this.img?e:new i}},{"../util/ajax":425,"../util/browser":426,"../util/evented":434,"../util/mapbox":439}],377:[function(t,e,r){"use strict";var n=t("csscolorparser").parseCSSColor,i=t("../util/util"),a=t("./style_function"),o={};e.exports=function t(e){if(a.isFunctionDefinition(e))return i.extend({},e,{stops:e.stops.map(function(e){return[e[0],t(e[1])]})});if("string"==typeof e){if(!o[e]){var r=n(e);if(!r)throw new Error("Invalid color "+e);o[e]=[r[0]/255*r[3],r[1]/255*r[3],r[2]/255*r[3],r[3]]}return o[e]}throw new Error("Invalid color "+e)}},{"../util/util":442,"./style_function":380,csscolorparser:108}],378:[function(t,e,r){"use strict";function n(t,e,r){this.animationLoop=e||new m,this.dispatcher=new p(r||1,this),this.spriteAtlas=new l(1024,1024),this.lineAtlas=new u(256,512),this._layers={},this._order=[],this._groups=[],this.sources={},this.zoomHistory={},c.bindAll(["_forwardSourceEvent","_forwardTileEvent","_forwardLayerEvent","_redoPlacement"],this),this._resetUpdates();var n=function(t,e){if(t)return void this.fire("error",{error:t});if(!g.emitErrors(this,g(e))){this._loaded=!0,this.stylesheet=e,this.updateClasses();var r=e.sources;for(var n in r)this.addSource(n,r[n]);e.sprite&&(this.sprite=new o(e.sprite),this.sprite.on("load",this.fire.bind(this,"change"))),this.glyphSource=new s(e.glyphs),this._resolve(),this.fire("load")}}.bind(this);"string"==typeof t?h.getJSON(f(t),n):d.frame(n.bind(this,null,t)),this.on("source.load",function(t){var e=t.source;if(e&&e.vectorLayerIds)for(var r in this._layers){var n=this._layers[r];n.source===e.id&&this._validateLayer(n)}})}var i=t("../util/evented"),a=t("./style_layer"),o=t("./image_sprite"),s=t("../symbol/glyph_source"),l=t("../symbol/sprite_atlas"),u=t("../render/line_atlas"),c=t("../util/util"),h=t("../util/ajax"),f=t("../util/mapbox").normalizeStyleURL,d=t("../util/browser"),p=t("../util/dispatcher"),m=t("./animation_loop"),g=t("./validate_style"),v=t("../source/source"),y=t("../source/query_features"),b=t("../source/source_cache"),x=t("./style_spec"),_=t("./style_function");e.exports=n,n.prototype=c.inherit(i,{_loaded:!1,_validateLayer:function(t){var e=this.sources[t.source];t.sourceLayer&&e&&e.vectorLayerIds&&-1===e.vectorLayerIds.indexOf(t.sourceLayer)&&this.fire("error",{error:new Error('Source layer "'+t.sourceLayer+'" does not exist on source "'+e.id+'" as specified by style layer "'+t.id+'"')})},loaded:function(){if(!this._loaded)return!1;if(Object.keys(this._updates.sources).length)return!1;for(var t in this.sources)if(!this.sources[t].loaded())return!1;return!(this.sprite&&!this.sprite.loaded())},_resolve:function(){var t,e;this._layers={},this._order=this.stylesheet.layers.map(function(t){return t.id});for(var r=0;r<this.stylesheet.layers.length;r++)e=this.stylesheet.layers[r],e.ref||(t=a.create(e),this._layers[t.id]=t,t.on("error",this._forwardLayerEvent));for(var n=0;n<this.stylesheet.layers.length;n++)if(e=this.stylesheet.layers[n],e.ref){var i=this.getLayer(e.ref);t=a.create(e,i),this._layers[t.id]=t,t.on("error",this._forwardLayerEvent)}this._groupLayers(),this._updateWorkerLayers()},_groupLayers:function(){var t;this._groups=[];for(var e=0;e<this._order.length;++e){var r=this._layers[this._order[e]];t&&r.source===t.source||(t=[],t.source=r.source,this._groups.push(t)),t.push(r)}},_updateWorkerLayers:function(t){this.dispatcher.broadcast(t?"update layers":"set layers",this._serializeLayers(t))},_serializeLayers:function(t){t=t||this._order;for(var e=[],r={includeRefProperties:!0},n=0;n<t.length;n++)e.push(this._layers[t[n]].serialize(r));return e},_applyClasses:function(t,e){if(this._loaded){t=t||[],e=e||{transition:!0};var r=this.stylesheet.transition||{},n=this._updates.allPaintProps?this._layers:this._updates.paintProps;for(var i in n){var a=this._layers[i],o=this._updates.paintProps[i];if(this._updates.allPaintProps||o.all)a.updatePaintTransitions(t,e,r,this.animationLoop);else for(var s in o)this._layers[i].updatePaintTransition(s,t,e,r,this.animationLoop)}}},_recalculate:function(t){for(var e in this.sources)this.sources[e].used=!1;this._updateZoomHistory(t),this.rasterFadeDuration=300;for(var r in this._layers){var n=this._layers[r];n.recalculate(t,this.zoomHistory),!n.isHidden(t)&&n.source&&(this.sources[n.source].used=!0)}Math.floor(this.z)!==Math.floor(t)&&this.animationLoop.set(300),this.z=t,this.fire("zoom")},_updateZoomHistory:function(t){var e=this.zoomHistory;void 0===e.lastIntegerZoom&&(e.lastIntegerZoom=Math.floor(t),e.lastIntegerZoomTime=0,e.lastZoom=t),Math.floor(e.lastZoom)<Math.floor(t)?(e.lastIntegerZoom=Math.floor(t),e.lastIntegerZoomTime=Date.now()):Math.floor(e.lastZoom)>Math.floor(t)&&(e.lastIntegerZoom=Math.floor(t+1),e.lastIntegerZoomTime=Date.now()),e.lastZoom=t},_checkLoaded:function(){if(!this._loaded)throw new Error("Style is not done loading")},update:function(t,e){if(!this._updates.changed)return this;if(this._updates.allLayers)this._groupLayers(),this._updateWorkerLayers();else{var r=Object.keys(this._updates.layers);r.length&&this._updateWorkerLayers(r)}var n,i=Object.keys(this._updates.sources);for(n=0;n<i.length;n++)this._reloadSource(i[n]);for(n=0;n<this._updates.events.length;n++){var a=this._updates.events[n];this.fire(a[0],a[1])}return this._applyClasses(t,e),this._updates.changed&&this.fire("change"),this._resetUpdates(),this},_resetUpdates:function(){this._updates={events:[],layers:{},sources:{},paintProps:{}}},addSource:function(t,e){if(this._checkLoaded(),void 0!==this.sources[t])throw new Error("There is already a source with this ID");if(!e.type)throw new Error("The type property must be defined, but the only the following properties were given: "+Object.keys(e)+".");return["vector","raster","geojson","video","image"].indexOf(e.type)>=0&&this._handleErrors(g.source,"sources."+t,e)?this:(e=new b(t,e,this.dispatcher),this.sources[t]=e,e.style=this,e.on("load",this._forwardSourceEvent).on("error",this._forwardSourceEvent).on("change",this._forwardSourceEvent).on("tile.add",this._forwardTileEvent).on("tile.load",this._forwardTileEvent).on("tile.error",this._forwardTileEvent).on("tile.remove",this._forwardTileEvent).on("tile.stats",this._forwardTileEvent),this._updates.events.push(["source.add",{source:e}]),this._updates.changed=!0,this)},removeSource:function(t){if(this._checkLoaded(),void 0===this.sources[t])throw new Error("There is no source with this ID");var e=this.sources[t];return delete this.sources[t],delete this._updates.sources[t],e.off("load",this._forwardSourceEvent).off("error",this._forwardSourceEvent).off("change",this._forwardSourceEvent).off("tile.add",this._forwardTileEvent).off("tile.load",this._forwardTileEvent).off("tile.error",this._forwardTileEvent).off("tile.remove",this._forwardTileEvent).off("tile.stats",this._forwardTileEvent),this._updates.events.push(["source.remove",{source:e}]),this._updates.changed=!0,this},getSource:function(t){return this.sources[t]&&this.sources[t].getSource()},addLayer:function(t,e){if(this._checkLoaded(),!(t instanceof a)){if(this._handleErrors(g.layer,"layers."+t.id,t,!1,{arrayIndex:-1}))return this;var r=t.ref&&this.getLayer(t.ref);t=a.create(t,r)}return this._validateLayer(t),t.on("error",this._forwardLayerEvent),this._layers[t.id]=t,this._order.splice(e?this._order.indexOf(e):1/0,0,t.id),this._updates.allLayers=!0,t.source&&(this._updates.sources[t.source]=!0),this._updates.events.push(["layer.add",{layer:t}]),this.updateClasses(t.id)},removeLayer:function(t){this._checkLoaded();var e=this._layers[t];if(void 0===e)throw new Error("There is no layer with this ID");for(var r in this._layers)this._layers[r].ref===t&&this.removeLayer(r);return e.off("error",this._forwardLayerEvent),delete this._layers[t],delete this._updates.layers[t],delete this._updates.paintProps[t],this._order.splice(this._order.indexOf(t),1),this._updates.allLayers=!0,this._updates.events.push(["layer.remove",{layer:e}]),this._updates.changed=!0,this},getLayer:function(t){return this._layers[t]},getReferentLayer:function(t){var e=this.getLayer(t);return e.ref&&(e=this.getLayer(e.ref)),e},setLayerZoomRange:function(t,e,r){this._checkLoaded();var n=this.getReferentLayer(t);return n.minzoom===e&&n.maxzoom===r?this:(null!=e&&(n.minzoom=e),null!=r&&(n.maxzoom=r),this._updateLayer(n))},setFilter:function(t,e){this._checkLoaded();var r=this.getReferentLayer(t);return null!==e&&this._handleErrors(g.filter,"layers."+r.id+".filter",e)?this:c.deepEqual(r.filter,e)?this:(r.filter=c.clone(e),this._updateLayer(r))},getFilter:function(t){return this.getReferentLayer(t).filter},setLayoutProperty:function(t,e,r){this._checkLoaded();var n=this.getReferentLayer(t);return c.deepEqual(n.getLayoutProperty(e),r)?this:(n.setLayoutProperty(e,r),this._updateLayer(n))},getLayoutProperty:function(t,e){return this.getReferentLayer(t).getLayoutProperty(e)},setPaintProperty:function(t,e,r,n){this._checkLoaded();var i=this.getLayer(t);if(c.deepEqual(i.getPaintProperty(e,n),r))return this;var a=i.isPaintValueFeatureConstant(e);return i.setPaintProperty(e,r,n),!(r&&_.isFunctionDefinition(r)&&"$zoom"!==r.property&&void 0!==r.property)&&a||(this._updates.layers[t]=!0,i.source&&(this._updates.sources[i.source]=!0)),this.updateClasses(t,e)},getPaintProperty:function(t,e,r){return this.getLayer(t).getPaintProperty(e,r)},updateClasses:function(t,e){if(this._updates.changed=!0,t){var r=this._updates.paintProps;r[t]||(r[t]={}),r[t][e||"all"]=!0}else this._updates.allPaintProps=!0;return this},serialize:function(){return c.filterObject({version:this.stylesheet.version,name:this.stylesheet.name,metadata:this.stylesheet.metadata,center:this.stylesheet.center,zoom:this.stylesheet.zoom,bearing:this.stylesheet.bearing,pitch:this.stylesheet.pitch,sprite:this.stylesheet.sprite,glyphs:this.stylesheet.glyphs,transition:this.stylesheet.transition,sources:c.mapObject(this.sources,function(t){return t.serialize()}),layers:this._order.map(function(t){return this._layers[t].serialize()},this)},function(t){return void 0!==t})},_updateLayer:function(t){return this._updates.layers[t.id]=!0,t.source&&(this._updates.sources[t.source]=!0),this._updates.changed=!0,this},_flattenRenderedFeatures:function(t){for(var e=[],r=this._order.length-1;r>=0;r--)for(var n=this._order[r],i=0;i<t.length;i++){var a=t[i][n];if(a)for(var o=0;o<a.length;o++)e.push(a[o])}return e},queryRenderedFeatures:function(t,e,r,n){
e&&e.filter&&this._handleErrors(g.filter,"queryRenderedFeatures.filter",e.filter,!0);var i={};if(e&&e.layers)for(var a=0;a<e.layers.length;a++){var o=e.layers[a];i[this._layers[o].source]=!0}var s=[];for(var l in this.sources)if(!e.layers||i[l]){var u=this.sources[l],c=y.rendered(u,this._layers,t,e,r,n);s.push(c)}return this._flattenRenderedFeatures(s)},querySourceFeatures:function(t,e){e&&e.filter&&this._handleErrors(g.filter,"querySourceFeatures.filter",e.filter,!0);var r=this.sources[t];return r?y.source(r,e):[]},addSourceType:function(t,e,r){return v.getType(t)?r(new Error('A source type called "'+t+'" already exists.')):(v.setType(t,e),e.workerSourceURL?void this.dispatcher.broadcast("load worker source",{name:t,url:e.workerSourceURL},r):r(null,null))},_handleErrors:function(t,e,r,n,i){var a=n?g.throwErrors:g.emitErrors,o=t.call(g,c.extend({key:e,style:this.serialize(),value:r,styleSpec:x},i));return a.call(g,this,o)},_remove:function(){this.dispatcher.remove()},_reloadSource:function(t){this.sources[t].reload()},_updateSources:function(t){for(var e in this.sources)this.sources[e].update(t)},_redoPlacement:function(){for(var t in this.sources)this.sources[t].redoPlacement&&this.sources[t].redoPlacement()},_forwardSourceEvent:function(t){this.fire("source."+t.type,c.extend({source:t.target.getSource()},t))},_forwardTileEvent:function(t){this.fire(t.type,c.extend({source:t.target},t))},_forwardLayerEvent:function(t){this.fire("layer."+t.type,c.extend({layer:{id:t.target.id}},t))},"get sprite json":function(t,e){var r=this.sprite;r.loaded()?e(null,{sprite:r.data,retina:r.retina}):r.on("load",function(){e(null,{sprite:r.data,retina:r.retina})})},"get icons":function(t,e){var r=this.sprite,n=this.spriteAtlas;r.loaded()?(n.setSprite(r),n.addIcons(t.icons,e)):r.on("load",function(){n.setSprite(r),n.addIcons(t.icons,e)})},"get glyphs":function(t,e){function r(t,r,n){t&&console.error(t),a[n]=r,0===--i&&e(null,a)}var n=t.stacks,i=Object.keys(n).length,a={};for(var o in n)this.glyphSource.getSimpleGlyphs(o,n[o],t.uid,r)}})},{"../render/line_atlas":354,"../source/query_features":364,"../source/source":366,"../source/source_cache":367,"../symbol/glyph_source":399,"../symbol/sprite_atlas":404,"../util/ajax":425,"../util/browser":426,"../util/dispatcher":433,"../util/evented":434,"../util/mapbox":439,"../util/util":442,"./animation_loop":375,"./image_sprite":376,"./style_function":380,"./style_layer":381,"./style_spec":388,"./validate_style":390}],379:[function(t,e,r){"use strict";function n(t,e){this.value=s.clone(e),this.isFunction=a.isFunctionDefinition(e),this.json=JSON.stringify(this.value);var r="color"===t.type&&this.value?o(this.value):e;if(this.calculate=a[t.function||"piecewise-constant"](r),this.isFeatureConstant=this.calculate.isFeatureConstant,this.isZoomConstant=this.calculate.isZoomConstant,"piecewise-constant"===t.function&&t.transition&&(this.calculate=i(this.calculate)),!this.isFeatureConstant&&!this.isZoomConstant){this.stopZoomLevels=[];for(var n=[],l=this.value.stops,u=0;u<this.value.stops.length;u++){var c=l[u][0].zoom;this.stopZoomLevels.indexOf(c)<0&&(this.stopZoomLevels.push(c),n.push([c,n.length]))}this.calculateInterpolationT=a.interpolated({stops:n,base:e.base})}}function i(t){return function(e,r){var n,i,a,o=e.zoom,s=e.zoomHistory,l=e.duration,u=o%1,c=Math.min((Date.now()-s.lastIntegerZoomTime)/l,1),h=1;return o>s.lastIntegerZoom?(n=u+(1-u)*c,h*=2,i=t({zoom:o-1},r),a=t({zoom:o},r)):(n=1-(1-c)*u,a=t({zoom:o},r),i=t({zoom:o+1},r),h/=2),void 0===i||void 0===a?void 0:{from:i,fromScale:h,to:a,toScale:1,t:n}}}var a=t("./style_function"),o=t("./parse_color"),s=t("../util/util");e.exports=n},{"../util/util":442,"./parse_color":377,"./style_function":380}],380:[function(t,e,r){"use strict";var n=t("mapbox-gl-function");r.interpolated=function(t){var e=n.interpolated(t),r=function(t,r){return e(t&&t.zoom,r||{})};return r.isFeatureConstant=e.isFeatureConstant,r.isZoomConstant=e.isZoomConstant,r},r["piecewise-constant"]=function(t){var e=n["piecewise-constant"](t),r=function(t,r){return e(t&&t.zoom,r||{})};return r.isFeatureConstant=e.isFeatureConstant,r.isZoomConstant=e.isZoomConstant,r},r.isFunctionDefinition=n.isFunctionDefinition},{"mapbox-gl-function":302}],381:[function(t,e,r){"use strict";function n(t,e){this.set(t,e)}function i(t){return t.value}var a=t("../util/util"),o=t("./style_transition"),s=t("./style_declaration"),l=t("./style_spec"),u=t("./validate_style"),c=t("./parse_color"),h=t("../util/evented");e.exports=n;n.create=function(e,r){return new({background:t("./style_layer/background_style_layer"),circle:t("./style_layer/circle_style_layer"),fill:t("./style_layer/fill_style_layer"),line:t("./style_layer/line_style_layer"),raster:t("./style_layer/raster_style_layer"),symbol:t("./style_layer/symbol_style_layer")}[(r||e).type])(e,r)},n.prototype=a.inherit(h,{set:function(t,e){this.id=t.id,this.ref=t.ref,this.metadata=t.metadata,this.type=(e||t).type,this.source=(e||t).source,this.sourceLayer=(e||t)["source-layer"],this.minzoom=(e||t).minzoom,this.maxzoom=(e||t).maxzoom,this.filter=(e||t).filter,this.paint={},this.layout={},this._paintSpecifications=l["paint_"+this.type],this._layoutSpecifications=l["layout_"+this.type],this._paintTransitions={},this._paintTransitionOptions={},this._paintDeclarations={},this._layoutDeclarations={},this._layoutFunctions={};var r,n;for(var i in t){var a=i.match(/^paint(?:\.(.*))?$/);if(a){var o=a[1]||"";for(r in t[i])this.setPaintProperty(r,t[i][r],o)}}if(this.ref)this._layoutDeclarations=e._layoutDeclarations;else for(n in t.layout)this.setLayoutProperty(n,t.layout[n]);for(r in this._paintSpecifications)this.paint[r]=this.getPaintValue(r);for(n in this._layoutSpecifications)this._updateLayoutValue(n)},setLayoutProperty:function(t,e){if(null==e)delete this._layoutDeclarations[t];else{var r="layers."+this.id+".layout."+t;if(this._handleErrors(u.layoutProperty,r,t,e))return;this._layoutDeclarations[t]=new s(this._layoutSpecifications[t],e)}this._updateLayoutValue(t)},getLayoutProperty:function(t){return this._layoutDeclarations[t]&&this._layoutDeclarations[t].value},getLayoutValue:function(t,e,r){var n=this._layoutSpecifications[t],i=this._layoutDeclarations[t];return i?i.calculate(e,r):n.default},setPaintProperty:function(t,e,r){var n="layers."+this.id+(r?'["paint.'+r+'"].':".paint.")+t;if(a.endsWith(t,"-transition"))if(this._paintTransitionOptions[r||""]||(this._paintTransitionOptions[r||""]={}),null===e||void 0===e)delete this._paintTransitionOptions[r||""][t];else{if(this._handleErrors(u.paintProperty,n,t,e))return;this._paintTransitionOptions[r||""][t]=e}else if(this._paintDeclarations[r||""]||(this._paintDeclarations[r||""]={}),null===e||void 0===e)delete this._paintDeclarations[r||""][t];else{if(this._handleErrors(u.paintProperty,n,t,e))return;this._paintDeclarations[r||""][t]=new s(this._paintSpecifications[t],e)}},getPaintProperty:function(t,e){return e=e||"",a.endsWith(t,"-transition")?this._paintTransitionOptions[e]&&this._paintTransitionOptions[e][t]:this._paintDeclarations[e]&&this._paintDeclarations[e][t]&&this._paintDeclarations[e][t].value},getPaintValue:function(t,e,r){var n=this._paintSpecifications[t],i=this._paintTransitions[t];return i?i.calculate(e,r):"color"===n.type&&n.default?c(n.default):n.default},getPaintValueStopZoomLevels:function(t){var e=this._paintTransitions[t];return e?e.declaration.stopZoomLevels:[]},getPaintInterpolationT:function(t,e){return this._paintTransitions[t].declaration.calculateInterpolationT({zoom:e})},isPaintValueFeatureConstant:function(t){var e=this._paintTransitions[t];return!e||e.declaration.isFeatureConstant},isLayoutValueFeatureConstant:function(t){var e=this._layoutDeclarations[t];return!e||e.isFeatureConstant},isPaintValueZoomConstant:function(t){var e=this._paintTransitions[t];return!e||e.declaration.isZoomConstant},isHidden:function(t){return!!(this.minzoom&&t<this.minzoom)||(!!(this.maxzoom&&t>=this.maxzoom)||("none"===this.layout.visibility||0===this.paint[this.type+"-opacity"]))},updatePaintTransitions:function(t,e,r,n){for(var i=a.extend({},this._paintDeclarations[""]),o=0;o<t.length;o++)a.extend(i,this._paintDeclarations[t[o]]);var s;for(s in i)this._applyPaintDeclaration(s,i[s],e,r,n);for(s in this._paintTransitions)s in i||this._applyPaintDeclaration(s,null,e,r,n)},updatePaintTransition:function(t,e,r,n,i){for(var a=this._paintDeclarations[""][t],o=0;o<e.length;o++){var s=this._paintDeclarations[e[o]];s&&s[t]&&(a=s[t])}this._applyPaintDeclaration(t,a,r,n,i)},recalculate:function(t,e){for(var r in this._paintTransitions)this.paint[r]=this.getPaintValue(r,{zoom:t,zoomHistory:e});for(var n in this._layoutFunctions)this.layout[n]=this.getLayoutValue(n,{zoom:t,zoomHistory:e})},serialize:function(t){var e={id:this.id,ref:this.ref,metadata:this.metadata,minzoom:this.minzoom,maxzoom:this.maxzoom};for(var r in this._paintDeclarations){e[""===r?"paint":"paint."+r]=a.mapObject(this._paintDeclarations[r],i)}return(!this.ref||t&&t.includeRefProperties)&&a.extend(e,{type:this.type,source:this.source,"source-layer":this.sourceLayer,filter:this.filter,layout:a.mapObject(this._layoutDeclarations,i)}),a.filterObject(e,function(t,e){return void 0!==t&&!("layout"===e&&!Object.keys(t).length)})},_applyPaintDeclaration:function(t,e,r,n,i){var l=r.transition?this._paintTransitions[t]:void 0,u=this._paintSpecifications[t];if(null!==e&&void 0!==e||(e=new s(u,u.default)),!l||l.declaration.json!==e.json){var c=a.extend({duration:300,delay:0},n,this.getPaintProperty(t+"-transition")),h=this._paintTransitions[t]=new o(u,e,l,c);h.instant()||(h.loopID=i.set(h.endTime-Date.now())),l&&i.cancel(l.loopID)}},_updateLayoutValue:function(t){var e=this._layoutDeclarations[t];e&&e.isFunction?this._layoutFunctions[t]=!0:(delete this._layoutFunctions[t],this.layout[t]=this.getLayoutValue(t))},_handleErrors:function(t,e,r,n){return u.emitErrors(this,t.call(u,{key:e,layerType:this.type,objectKey:r,value:n,styleSpec:l,style:{glyphs:!0,sprite:!0}}))}})},{"../util/evented":434,"../util/util":442,"./parse_color":377,"./style_declaration":379,"./style_layer/background_style_layer":382,"./style_layer/circle_style_layer":383,"./style_layer/fill_style_layer":384,"./style_layer/line_style_layer":385,"./style_layer/raster_style_layer":386,"./style_layer/symbol_style_layer":387,"./style_spec":388,"./style_transition":389,"./validate_style":390}],382:[function(t,e,r){"use strict";function n(){a.apply(this,arguments)}var i=t("../../util/util"),a=t("../style_layer");e.exports=n,n.prototype=i.inherit(a,{})},{"../../util/util":442,"../style_layer":381}],383:[function(t,e,r){"use strict";function n(){a.apply(this,arguments)}var i=t("../../util/util"),a=t("../style_layer");e.exports=n,n.prototype=i.inherit(a,{})},{"../../util/util":442,"../style_layer":381}],384:[function(t,e,r){"use strict";function n(){a.apply(this,arguments)}var i=t("../../util/util"),a=t("../style_layer");n.prototype=i.inherit(a,{getPaintValue:function(t,e,r){return"fill-outline-color"===t&&void 0===this.getPaintProperty("fill-outline-color")?a.prototype.getPaintValue.call(this,"fill-color",e,r):a.prototype.getPaintValue.call(this,t,e,r)},getPaintValueStopZoomLevels:function(t){return"fill-outline-color"===t&&void 0===this.getPaintProperty("fill-outline-color")?a.prototype.getPaintValueStopZoomLevels.call(this,"fill-color"):a.prototype.getPaintValueStopZoomLevels.call(this,arguments)},getPaintInterpolationT:function(t,e){return"fill-outline-color"===t&&void 0===this.getPaintProperty("fill-outline-color")?a.prototype.getPaintInterpolationT.call(this,"fill-color",e):a.prototype.getPaintInterpolationT.call(this,t,e)},isPaintValueFeatureConstant:function(t){return"fill-outline-color"===t&&void 0===this.getPaintProperty("fill-outline-color")?a.prototype.isPaintValueFeatureConstant.call(this,"fill-color"):a.prototype.isPaintValueFeatureConstant.call(this,t)},isPaintValueZoomConstant:function(t){return"fill-outline-color"===t&&void 0===this.getPaintProperty("fill-outline-color")?a.prototype.isPaintValueZoomConstant.call(this,"fill-color"):a.prototype.isPaintValueZoomConstant.call(this,t)}}),e.exports=n},{"../../util/util":442,"../style_layer":381}],385:[function(t,e,r){"use strict";function n(){a.apply(this,arguments)}var i=t("../../util/util"),a=t("../style_layer");e.exports=n,n.prototype=i.inherit(a,{getPaintValue:function(t,e,r){var n=a.prototype.getPaintValue.apply(this,arguments);if(n&&"line-dasharray"===t){var i=Math.floor(e.zoom);this._flooredZoom!==i&&(this._flooredZoom=i,this._flooredLineWidth=this.getPaintValue("line-width",e,r)),n.fromScale*=this._flooredLineWidth,n.toScale*=this._flooredLineWidth}return n}})},{"../../util/util":442,"../style_layer":381}],386:[function(t,e,r){"use strict";function n(){a.apply(this,arguments)}var i=t("../../util/util"),a=t("../style_layer");e.exports=n,n.prototype=i.inherit(a,{})},{"../../util/util":442,"../style_layer":381}],387:[function(t,e,r){"use strict";function n(){a.apply(this,arguments)}var i=t("../../util/util"),a=t("../style_layer");e.exports=n,n.prototype=i.inherit(a,{isHidden:function(){if(a.prototype.isHidden.apply(this,arguments))return!0;var t=0===this.paint["text-opacity"]||!this.layout["text-field"],e=0===this.paint["icon-opacity"]||!this.layout["icon-image"];return!(!t||!e)},getLayoutValue:function(t,e,r){return("text-rotation-alignment"!==t||"line"!==this.getLayoutValue("symbol-placement",e,r)||this.getLayoutProperty("text-rotation-alignment"))&&("icon-rotation-alignment"!==t||"line"!==this.getLayoutValue("symbol-placement",e,r)||this.getLayoutProperty("icon-rotation-alignment"))?"text-pitch-alignment"!==t||this.getLayoutProperty("text-pitch-alignment")?a.prototype.getLayoutValue.apply(this,arguments):this.getLayoutValue("text-rotation-alignment"):"map"}})},{"../../util/util":442,"../style_layer":381}],388:[function(t,e,r){"use strict";e.exports=t("mapbox-gl-style-spec/reference/latest.min")},{"mapbox-gl-style-spec/reference/latest.min":325}],389:[function(t,e,r){"use strict";function n(t,e,r,n){this.declaration=e,this.startTime=this.endTime=(new Date).getTime(),"piecewise-constant"===t.function&&t.transition?this.interp=i:this.interp=o[t.type],this.oldTransition=r,this.duration=n.duration||0,this.delay=n.delay||0,this.instant()||(this.endTime=this.startTime+this.duration+this.delay,this.ease=a.easeCubicInOut),r&&r.endTime<=this.startTime&&delete r.oldTransition}function i(t,e,r){return void 0===(t&&t.to)||void 0===(e&&e.to)?void 0:{from:t.to,fromScale:t.toScale,to:e.to,toScale:e.toScale,t:r}}var a=t("../util/util"),o=t("../util/interpolate");e.exports=n,n.prototype.instant=function(){return!this.oldTransition||!this.interp||0===this.duration&&0===this.delay},n.prototype.calculate=function(t,e){var r=this.declaration.calculate(a.extend({},t,{duration:this.duration}),e);if(this.instant())return r;var n=t.time||Date.now();if(n<this.endTime){var i=this.oldTransition.calculate(a.extend({},t,{time:this.startTime}),e),o=this.ease((n-this.startTime-this.delay)/this.duration);r=this.interp(i,r,o)}return r}},{"../util/interpolate":436,"../util/util":442}],390:[function(t,e,r){"use strict";e.exports=t("mapbox-gl-style-spec/lib/validate_style.min"),e.exports.emitErrors=function(t,e){if(e&&e.length){for(var r=0;r<e.length;r++)t.fire("error",{error:new Error(e[r].message)});return!0}return!1},e.exports.throwErrors=function(t,e){if(e)for(var r=0;r<e.length;r++)throw new Error(e[r].message)}},{"mapbox-gl-style-spec/lib/validate_style.min":324}],391:[function(t,e,r){"use strict";function n(t,e,r,n){this.x=t,this.y=e,this.angle=r,void 0!==n&&(this.segment=n)}var i=t("point-geometry");e.exports=n,n.prototype=Object.create(i.prototype),n.prototype.clone=function(){return new n(this.x,this.y,this.angle,this.segment)}},{"point-geometry":484}],392:[function(t,e,r){"use strict";function n(t,e,r,n,i){if(void 0===e.segment)return!0;for(var a=e,o=e.segment+1,s=0;s>-r/2;){if(--o<0)return!1;s-=t[o].dist(a),a=t[o]}s+=t[o].dist(t[o+1]),o++;for(var l=[],u=0;s<r/2;){var c=t[o-1],h=t[o],f=t[o+1];if(!f)return!1;var d=c.angleTo(h)-h.angleTo(f);for(d=Math.abs((d+3*Math.PI)%(2*Math.PI)-Math.PI),l.push({distance:s,angleDelta:d}),u+=d;s-l[0].distance>n;)u-=l.shift().angleDelta;if(u>i)return!1;o++,s+=h.dist(f)}return!0}e.exports=n},{}],393:[function(t,e,r){"use strict";function n(t,e,r,n,a){for(var o=[],s=0;s<t.length;s++)for(var l,u=t[s],c=0;c<u.length-1;c++){var h=u[c],f=u[c+1];h.x<e&&f.x<e||(h.x<e?h=new i(e,h.y+(f.y-h.y)*((e-h.x)/(f.x-h.x)))._round():f.x<e&&(f=new i(e,h.y+(f.y-h.y)*((e-h.x)/(f.x-h.x)))._round()),h.y<r&&f.y<r||(h.y<r?h=new i(h.x+(f.x-h.x)*((r-h.y)/(f.y-h.y)),r)._round():f.y<r&&(f=new i(h.x+(f.x-h.x)*((r-h.y)/(f.y-h.y)),r)._round()),h.x>=n&&f.x>=n||(h.x>=n?h=new i(n,h.y+(f.y-h.y)*((n-h.x)/(f.x-h.x)))._round():f.x>=n&&(f=new i(n,h.y+(f.y-h.y)*((n-h.x)/(f.x-h.x)))._round()),h.y>=a&&f.y>=a||(h.y>=a?h=new i(h.x+(f.x-h.x)*((a-h.y)/(f.y-h.y)),a)._round():f.y>=a&&(f=new i(h.x+(f.x-h.x)*((a-h.y)/(f.y-h.y)),a)._round()),l&&h.equals(l[l.length-1])||(l=[h],o.push(l)),l.push(f)))))}return o}var i=t("point-geometry");e.exports=n},{"point-geometry":484}],394:[function(t,e,r){"use strict";var n=t("../util/struct_array"),i=t("../util/util"),a=t("point-geometry"),o=e.exports=new n({members:[{type:"Int16",name:"anchorPointX"},{type:"Int16",name:"anchorPointY"},{type:"Int16",name:"x1"},{type:"Int16",name:"y1"},{type:"Int16",name:"x2"},{type:"Int16",name:"y2"},{type:"Float32",name:"maxScale"},{type:"Uint32",name:"featureIndex"},{type:"Uint16",name:"sourceLayerIndex"},{type:"Uint16",name:"bucketIndex"},{type:"Int16",name:"bbox0"},{type:"Int16",name:"bbox1"},{type:"Int16",name:"bbox2"},{type:"Int16",name:"bbox3"},{type:"Float32",name:"placementScale"}]});i.extendAll(o.prototype.StructType.prototype,{get anchorPoint(){return new a(this.anchorPointX,this.anchorPointY)}})},{"../util/struct_array":440,"../util/util":442,"point-geometry":484}],395:[function(t,e,r){"use strict";function n(t,e,r,n,i,a,o,s,l,u,c){var h=o.top*s-l,f=o.bottom*s+l,d=o.left*s-l,p=o.right*s+l;if(this.boxStartIndex=t.length,u){var m=f-h,g=p-d;if(m>0)if(m=Math.max(10*s,m),c){var v=e[r.segment+1].sub(e[r.segment])._unit()._mult(g),y=[r.sub(v),r.add(v)];this._addLineCollisionBoxes(t,y,r,0,g,m,n,i,a)}else this._addLineCollisionBoxes(t,e,r,r.segment,g,m,n,i,a)}else t.emplaceBack(r.x,r.y,d,h,p,f,1/0,n,i,a,0,0,0,0,0);this.boxEndIndex=t.length}e.exports=n,n.prototype._addLineCollisionBoxes=function(t,e,r,n,i,a,o,s,l){var u=a/2,c=Math.floor(i/u),h=-a/2,f=this.boxes,d=r,p=n+1,m=h;do{if(--p<0)return f;m-=e[p].dist(d),d=e[p]}while(m>-i/2);for(var g=e[p].dist(e[p+1]),v=0;v<c;v++){for(var y=-i/2+v*u;m+g<y;){if(m+=g,++p+1>=e.length)return f;g=e[p].dist(e[p+1])}var b=y-m,x=e[p],_=e[p+1],w=_.sub(x)._unit()._mult(b)._add(x)._round(),M=Math.max(Math.abs(y-h)-u/2,0),k=i/2/M;t.emplaceBack(w.x,w.y,-a/2,-a/2,a/2,a/2,k,o,s,l,0,0,0,0,0)}return f}},{}],396:[function(t,e,r){"use strict";function n(t,e,r){if("object"==typeof t){var n=t;r=e,t=n.angle,e=n.pitch,this.grid=new o(n.grid),this.ignoredGrid=new o(n.ignoredGrid)}else this.grid=new o(a,12,6),this.ignoredGrid=new o(a,12,0);this.angle=t,this.pitch=e;var i=Math.sin(t),s=Math.cos(t);if(this.rotationMatrix=[s,-i,i,s],this.reverseRotationMatrix=[s,i,-i,s],this.yStretch=1/Math.cos(e/180*Math.PI),this.yStretch=Math.pow(this.yStretch,1.3),this.collisionBoxArray=r,0===r.length){r.emplaceBack();r.emplaceBack(0,0,0,-32767,0,32767,32767,0,0,0,0,0,0,0,0,0),r.emplaceBack(a,0,0,-32767,0,32767,32767,0,0,0,0,0,0,0,0,0),r.emplaceBack(0,0,-32767,0,32767,0,32767,0,0,0,0,0,0,0,0,0),r.emplaceBack(0,a,-32767,0,32767,0,32767,0,0,0,0,0,0,0,0,0)}this.tempCollisionBox=r.get(0),this.edges=[r.get(1),r.get(2),r.get(3),r.get(4)]}var i=t("point-geometry"),a=t("../data/bucket").EXTENT,o=t("grid-index");e.exports=n,n.prototype.serialize=function(){var t={angle:this.angle,pitch:this.pitch,grid:this.grid.toArrayBuffer(),ignoredGrid:this.ignoredGrid.toArrayBuffer()};return{data:t,transferables:[t.grid,t.ignoredGrid]}},n.prototype.minScale=.25,n.prototype.maxScale=2,n.prototype.placeCollisionFeature=function(t,e,r){for(var n=this.collisionBoxArray,a=this.minScale,o=this.rotationMatrix,s=this.yStretch,l=t.boxStartIndex;l<t.boxEndIndex;l++){var u=n.get(l),c=u.anchorPoint._matMult(o),h=c.x,f=c.y,d=h+u.x1,p=f+u.y1*s,m=h+u.x2,g=f+u.y2*s;if(u.bbox0=d,u.bbox1=p,u.bbox2=m,u.bbox3=g,!e)for(var v=this.grid.query(d,p,m,g),y=0;y<v.length;y++){var b=n.get(v[y]),x=b.anchorPoint._matMult(o);if((a=this.getPlacementScale(a,c,u,x,b))>=this.maxScale)return a}if(r){var _;if(this.angle){var w=this.reverseRotationMatrix,M=new i(u.x1,u.y1).matMult(w),k=new i(u.x2,u.y1).matMult(w),A=new i(u.x1,u.y2).matMult(w),T=new i(u.x2,u.y2).matMult(w);_=this.tempCollisionBox,_.anchorPointX=u.anchorPoint.x,_.anchorPointY=u.anchorPoint.y,_.x1=Math.min(M.x,k.x,A.x,T.x),_.y1=Math.min(M.y,k.x,A.x,T.x),_.x2=Math.max(M.x,k.x,A.x,T.x),_.y2=Math.max(M.y,k.x,A.x,T.x),_.maxScale=u.maxScale}else _=u;for(var S=0;S<this.edges.length;S++){var E=this.edges[S];if((a=this.getPlacementScale(a,u.anchorPoint,_,E.anchorPoint,E))>=this.maxScale)return a}}}return a},n.prototype.queryRenderedSymbols=function(t,e,r,n,a){var o={},s=[],l=this.collisionBoxArray,u=this.rotationMatrix,c=new i(t,e)._matMult(u),h=this.tempCollisionBox;h.anchorX=c.x,h.anchorY=c.y,h.x1=0,h.y1=0,h.x2=r-t,h.y2=n-e,h.maxScale=a,a=h.maxScale;for(var f=[c.x+h.x1/a,c.y+h.y1/a*this.yStretch,c.x+h.x2/a,c.y+h.y2/a*this.yStretch],d=this.grid.query(f[0],f[1],f[2],f[3]),p=this.ignoredGrid.query(f[0],f[1],f[2],f[3]),m=0;m<p.length;m++)d.push(p[m]);for(var g=0;g<d.length;g++){var v=l.get(d[g]),y=v.sourceLayerIndex,b=v.featureIndex;if(void 0===o[y]&&(o[y]={}),!o[y][b]){var x=v.anchorPoint.matMult(u);this.getPlacementScale(this.minScale,c,h,x,v)>=a&&(o[y][b]=!0,s.push(d[g]))}}return s},n.prototype.getPlacementScale=function(t,e,r,n,i){var a=e.x-n.x,o=e.y-n.y,s=(i.x1-r.x2)/a,l=(i.x2-r.x1)/a,u=(i.y1-r.y2)*this.yStretch/o,c=(i.y2-r.y1)*this.yStretch/o;(isNaN(s)||isNaN(l))&&(s=l=1),(isNaN(u)||isNaN(c))&&(u=c=1);var h=Math.min(Math.max(s,l),Math.max(u,c)),f=i.maxScale,d=r.maxScale;return h>f&&(h=f),h>d&&(h=d),h>t&&h>=i.placementScale&&(t=h),t},n.prototype.insertCollisionFeature=function(t,e,r){for(var n=r?this.ignoredGrid:this.grid,i=this.collisionBoxArray,a=t.boxStartIndex;a<t.boxEndIndex;a++){var o=i.get(a);o.placementScale=e,e<this.maxScale&&n.insert(a,o.bbox0,o.bbox1,o.bbox2,o.bbox3)}}},{"../data/bucket":329,"grid-index":287,"point-geometry":484}],397:[function(t,e,r){"use strict";function n(t,e,r,n,a,o,s,l,u){var c=n?.6*o*s:0,h=Math.max(n?n.right-n.left:0,a?a.right-a.left:0),f=0===t[0].x||t[0].x===u||0===t[0].y||t[0].y===u;e-h*s<e/4&&(e=h*s+e/4);var d=2*o;return i(t,f?e/2*l%e:(h/2+d)*s*l%e,e,c,r,h*s,f,!1,u)}function i(t,e,r,n,l,u,c,h,f){for(var d=u/2,p=0,m=0;m<t.length-1;m++)p+=t[m].dist(t[m+1]);for(var g=0,v=e-r,y=[],b=0;b<t.length-1;b++){for(var x=t[b],_=t[b+1],w=x.dist(_),M=_.angleTo(x);v+r<g+w;){v+=r;var k=(v-g)/w,A=a(x.x,_.x,k),T=a(x.y,_.y,k);if(A>=0&&A<f&&T>=0&&T<f&&v-d>=0&&v+d<=p){var S=new o(A,T,M,b)._round();n&&!s(t,S,u,n,l)||y.push(S)}}g+=w}return h||y.length||c||(y=i(t,g/2,r,n,l,u,c,!0,f)),y}var a=t("../util/interpolate"),o=t("../symbol/anchor"),s=t("./check_max_angle");e.exports=n},{"../symbol/anchor":391,"../util/interpolate":436,"./check_max_angle":392}],398:[function(t,e,r){"use strict";function n(){this.width=o,this.height=o,this.bin=new i(this.width,this.height),this.index={},this.ids={},this.data=new Uint8Array(this.width*this.height)}var i=t("shelf-pack"),a=t("../util/util"),o=128;e.exports=n,n.prototype.getGlyphs=function(){var t,e,r,n={};for(var i in this.ids)t=i.split("#"),e=t[0],r=t[1],n[e]||(n[e]=[]),n[e].push(r);return n},n.prototype.getRects=function(){var t,e,r,n={};for(var i in this.ids)t=i.split("#"),e=t[0],r=t[1],n[e]||(n[e]={}),n[e][r]=this.index[i];return n},n.prototype.addGlyph=function(t,e,r,n){if(!r)return null;var i=e+"#"+r.id;if(this.index[i])return this.ids[i].indexOf(t)<0&&this.ids[i].push(t),this.index[i];if(!r.bitmap)return null;var o=r.width+2*n,s=r.height+2*n,l=o+2,u=s+2;l+=4-l%4,u+=4-u%4;var c=this.bin.packOne(l,u);if(c||(this.resize(),c=this.bin.packOne(l,u)),!c)return a.warnOnce("glyph bitmap overflow"),null;this.index[i]=c,this.ids[i]=[t];for(var h=this.data,f=r.bitmap,d=0;d<s;d++)for(var p=this.width*(c.y+d+1)+c.x+1,m=o*d,g=0;g<o;g++)h[p+g]=f[m+g];return this.dirty=!0,c},n.prototype.resize=function(){var t=this.width,e=this.height;if(!(t>=2048||e>=2048)){this.texture&&(this.gl&&this.gl.deleteTexture(this.texture),this.texture=null),this.width*=4,this.height*=4,this.bin.resize(this.width,this.height);for(var r=new ArrayBuffer(this.width*this.height),n=0;n<e;n++){var i=new Uint8Array(this.data.buffer,e*n,t);new Uint8Array(r,e*n*4,t).set(i)}this.data=new Uint8Array(r)}},n.prototype.bind=function(t){this.gl=t,this.texture?t.bindTexture(t.TEXTURE_2D,this.texture):(this.texture=t.createTexture(),t.bindTexture(t.TEXTURE_2D,this.texture),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,t.LINEAR),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),t.texImage2D(t.TEXTURE_2D,0,t.ALPHA,this.width,this.height,0,t.ALPHA,t.UNSIGNED_BYTE,null))},n.prototype.updateTexture=function(t){this.bind(t),this.dirty&&(t.texSubImage2D(t.TEXTURE_2D,0,0,0,this.width,this.height,t.ALPHA,t.UNSIGNED_BYTE,this.data),this.dirty=!1)}},{"../util/util":442,"shelf-pack":514}],399:[function(t,e,r){"use strict";function n(t){this.url=t&&o(t),this.atlases={},this.stacks={},this.loading={}}function i(t,e,r){this.advance=t.advance,this.left=t.left-r-1,this.top=t.top+r+1,this.rect=e}function a(t,e,r,n){return n=n||"abc",r.replace("{s}",n[t.length%n.length]).replace("{fontstack}",t).replace("{range}",e)}var o=t("../util/mapbox").normalizeGlyphsURL,s=t("../util/ajax").getArrayBuffer,l=t("../util/glyphs"),u=t("../symbol/glyph_atlas"),c=t("pbf");e.exports=n,n.prototype.getSimpleGlyphs=function(t,e,r,n){void 0===this.stacks[t]&&(this.stacks[t]={}),void 0===this.atlases[t]&&(this.atlases[t]=new u);for(var a,o={},s=this.stacks[t],l=this.atlases[t],c={},h=0,f=0;f<e.length;f++){var d=e[f];if(a=Math.floor(d/256),s[a]){var p=s[a].glyphs[d],m=l.addGlyph(r,t,p,3);p&&(o[d]=new i(p,m,3))}else void 0===c[a]&&(c[a]=[],h++),c[a].push(d)}h||n(void 0,o,t);var g=function(e,a,s){if(!e)for(var u=this.stacks[t][a]=s.stacks[0],f=0;f<c[a].length;f++){var d=c[a][f],p=u.glyphs[d],m=l.addGlyph(r,t,p,3);p&&(o[d]=new i(p,m,3))}--h||n(void 0,o,t)}.bind(this);for(var v in c)this.loadRange(t,v,g)},n.prototype.loadRange=function(t,e,r){if(256*e>65535)return r("glyphs > 65535 not supported");void 0===this.loading[t]&&(this.loading[t]={});var n=this.loading[t];if(n[e])n[e].push(r);else{n[e]=[r];var i=256*e+"-"+(256*e+255),o=a(t,i,this.url);s(o,function(t,r){for(var i=!t&&new l(new c(new Uint8Array(r))),a=0;a<n[e].length;a++)n[e][a](t,e,i);delete n[e]})}},n.prototype.getGlyphAtlas=function(t){return this.atlases[t]}},{"../symbol/glyph_atlas":398,"../util/ajax":425,"../util/glyphs":435,"../util/mapbox":439,pbf:478}],400:[function(t,e,r){"use strict";e.exports=function(t,e,r){function n(n){c.push(t[n]),h.push(r[n]),f.push(e[n]),d++}function i(t,e,r){var n=u[t];return delete u[t],u[e]=n,h[n][0].pop(),h[n][0]=h[n][0].concat(r[0]),n}function a(t,e,r){var n=l[e];return delete l[e],l[t]=n,h[n][0].shift(),h[n][0]=r[0].concat(h[n][0]),n}function o(t,e,r){var n=r?e[0][e[0].length-1]:e[0][0];return t+":"+n.x+":"+n.y}var s,l={},u={},c=[],h=[],f=[],d=0;for(s=0;s<t.length;s++){var p=r[s],m=e[s];if(m){var g=o(m,p),v=o(m,p,!0);if(g in u&&v in l&&u[g]!==l[v]){var y=a(g,v,p),b=i(g,v,h[y]);delete l[g],delete u[v],u[o(m,h[b],!0)]=b,h[y]=null}else g in u?i(g,v,p):v in l?a(g,v,p):(n(s),l[g]=d-1,u[v]=d-1)}else n(s)}return{features:c,textFeatures:f,geometries:h}}},{}],401:[function(t,e,r){"use strict";function n(t,e,r,n,i,a,o,s,l,u){this.anchorPoint=t,this.tl=e,this.tr=r,this.bl=n,this.br=i,this.tex=a,this.anchorAngle=o,this.glyphAngle=s,this.minScale=l,this.maxScale=u}function i(t,e,r,i,a,o,u,c,h){var f,d,p,m,g=e.image.rect,v=a.layout,y=e.left-1,b=y+g.w/e.image.pixelRatio,x=e.top-1,_=x+g.h/e.image.pixelRatio;if("none"!==v["icon-text-fit"]&&u){var w=b-y,M=_-x,k=v["text-size"]/24,A=u.left*k,T=u.right*k,S=u.top*k,E=u.bottom*k,L=T-A,C=E-S,I=v["icon-text-fit-padding"][0],z=v["icon-text-fit-padding"][1],D=v["icon-text-fit-padding"][2],P=v["icon-text-fit-padding"][3],O="width"===v["icon-text-fit"]?.5*(C-M):0,R="height"===v["icon-text-fit"]?.5*(L-w):0,F="width"===v["icon-text-fit"]||"both"===v["icon-text-fit"]?L:w,j="height"===v["icon-text-fit"]||"both"===v["icon-text-fit"]?C:M;f=new s(A+R-P,S+O-I),d=new s(A+R+z+F,S+O-I),p=new s(A+R+z+F,S+O+D+j),m=new s(A+R-P,S+O+D+j)}else f=new s(y,x),d=new s(b,x),p=new s(b,_),m=new s(y,_);var N=a.getLayoutValue("icon-rotate",c,h)*Math.PI/180;if(o){var B=i[t.segment];if(t.y===B.y&&t.x===B.x&&t.segment+1<i.length){var U=i[t.segment+1];N+=Math.atan2(t.y-U.y,t.x-U.x)+Math.PI}else N+=Math.atan2(t.y-B.y,t.x-B.x)}if(N){var V=Math.sin(N),H=Math.cos(N),q=[H,-V,V,H];f=f.matMult(q),d=d.matMult(q),m=m.matMult(q),p=p.matMult(q)}return[new n(new s(t.x,t.y),f,d,m,p,e.image.rect,0,0,l,1/0)]}function a(t,e,r,i,a,u){for(var c=a.layout["text-rotate"]*Math.PI/180,h=a.layout["text-keep-upright"],f=e.positionedGlyphs,d=[],p=0;p<f.length;p++){var m=f[p],g=m.glyph,v=g.rect;if(v){var y,b=(m.x+g.advance/2)*r,x=l;u?(y=[],x=o(y,t,b,i,t.segment,!0),h&&(x=Math.min(x,o(y,t,b,i,t.segment,!1)))):y=[{anchorPoint:new s(t.x,t.y),offset:0,angle:0,maxScale:1/0,minScale:l}];for(var _=m.x+g.left,w=m.y-g.top,M=_+v.w,k=w+v.h,A=new s(_,w),T=new s(M,w),S=new s(_,k),E=new s(M,k),L=0;L<y.length;L++){var C=y[L],I=A,z=T,D=S,P=E;if(c){var O=Math.sin(c),R=Math.cos(c),F=[R,-O,O,R];I=I.matMult(F),z=z.matMult(F),D=D.matMult(F),P=P.matMult(F)}var j=Math.max(C.minScale,x),N=(t.angle+C.offset+2*Math.PI)%(2*Math.PI),B=(C.angle+C.offset+2*Math.PI)%(2*Math.PI);d.push(new n(C.anchorPoint,I,z,D,P,v,N,B,j,C.maxScale))}}}return d}function o(t,e,r,n,i,a){var o=!a;r<0&&(a=!a),a&&i++;var u=new s(e.x,e.y),c=n[i],h=1/0;r=Math.abs(r);for(var f=l;;){var d=u.dist(c),p=r/d,m=Math.atan2(c.y-u.y,c.x-u.x);if(a||(m+=Math.PI),t.push({anchorPoint:u,offset:o?Math.PI:0,minScale:p,maxScale:h,angle:(m+2*Math.PI)%(2*Math.PI)}),p<=f)break;for(u=c;u.equals(c);)if(i+=a?1:-1,!(c=n[i]))return p;var g=c.sub(u)._unit();u=u.sub(g._mult(d)),h=p}return f}var s=t("point-geometry");e.exports={getIconQuads:i,getGlyphQuads:a,SymbolQuad:n};var l=.5},{"point-geometry":484}],402:[function(t,e,r){"use strict";function n(t,e,r){for(var n=[],a=0,o=t.length;a<o;a++){var s=i(t[a].properties,e["text-field"]);if(s){s=s.toString();var l=e["text-transform"];"uppercase"===l?s=s.toLocaleUpperCase():"lowercase"===l&&(s=s.toLocaleLowerCase());for(var u=0;u<s.length;u++)r[s.charCodeAt(u)]=!0;n[a]=s}else n[a]=null}return n}var i=t("../util/token");e.exports=n},{"../util/token":441}],403:[function(t,e,r){"use strict";function n(t,e,r,n){this.codePoint=t,this.x=e,this.y=r,this.glyph=n}function i(t,e,r,n,i,a){this.positionedGlyphs=t,this.text=e,this.top=r,this.bottom=n,this.left=i,this.right=a}function a(t,e,r,a,s,l,u,c,h){for(var f=[],d=new i(f,t,h[1],h[1],h[0],h[0]),p=0,m=0;m<t.length;m++){var g=t.charCodeAt(m),v=e[g];v&&(f.push(new n(g,p,-17,v)),p+=v.advance+c)}return!!f.length&&(o(d,e,a,r,s,l,u,h),d)}function o(t,e,r,n,i,a,o,u){var c=null,d=0,p=0,m=0,g=0,v=t.positionedGlyphs;if(n)for(var y=0;y<v.length;y++){var b=v[y];if(b.x-=d,b.y+=r*m,b.x>n&&null!==c){var x=v[c+1].x;g=Math.max(x,g);for(var _=c+1;_<=y;_++)v[_].y+=r,v[_].x-=x;if(o){var w=c;h[v[c].codePoint]&&w--,s(v,e,p,w,o)}p=c+1,c=null,d+=x,m++}f[b.codePoint]&&(c=y)}var M=v[v.length-1],k=M.x+e[M.codePoint].advance;g=Math.max(g,k);var A=(m+1)*r;s(v,e,p,v.length-1,o),l(v,o,i,a,g,r,m,u),t.top+=-a*A,t.bottom=t.top+A,t.left+=-i*g,t.right=t.left+g}function s(t,e,r,n,i){for(var a=e[t[n].codePoint].advance,o=(t[n].x+a)*i,s=r;s<=n;s++)t[s].x-=o}
function l(t,e,r,n,i,a,o,s){for(var l=(e-r)*i+s[0],u=(-n*(o+1)+.5)*a+s[1],c=0;c<t.length;c++)t[c].x+=l,t[c].y+=u}function u(t,e){if(!t||!t.rect)return null;var r=e["icon-offset"][0],n=e["icon-offset"][1],i=r-t.width/2,a=i+t.width,o=n-t.height/2;return new c(t,o,o+t.height,i,a)}function c(t,e,r,n,i){this.image=t,this.top=e,this.bottom=r,this.left=n,this.right=i}e.exports={shapeText:a,shapeIcon:u};var h={32:!0,8203:!0},f={32:!0,38:!0,43:!0,45:!0,47:!0,173:!0,183:!0,8203:!0,8208:!0,8211:!0}},{}],404:[function(t,e,r){"use strict";function n(t,e){this.width=t,this.height=e,this.bin=new o(t,e),this.images={},this.data=!1,this.texture=0,this.filter=0,this.pixelRatio=1,this.dirty=!0}function i(t,e,r,n,i,a,o,s,l,u,c){var h,f,d=n*e+r,p=s*a+o;if(c)for(p-=a,f=-1;f<=u;f++,d=((f+u)%u+n)*e+r,p+=a)for(h=-1;h<=l;h++)i[p+h]=t[d+(h+l)%l];else for(f=0;f<u;f++,d+=e,p+=a)for(h=0;h<l;h++)i[p+h]=t[d+h]}function a(t,e,r,n,i){this.rect=t,this.width=e,this.height=r,this.sdf=n,this.pixelRatio=i}var o=t("shelf-pack"),s=t("../util/browser"),l=t("../util/util");e.exports=n,n.prototype.allocateImage=function(t,e){t/=this.pixelRatio,e/=this.pixelRatio;var r=t+2+(4-(t+2)%4),n=e+2+(4-(e+2)%4),i=this.bin.packOne(r,n);return i||(l.warnOnce("SpriteAtlas out of space."),null)},n.prototype.getImage=function(t,e){if(this.images[t])return this.images[t];if(!this.sprite)return null;var r=this.sprite.getSpritePosition(t);if(!r.width||!r.height)return null;var n=this.allocateImage(r.width,r.height);if(!n)return null;var i=new a(n,r.width/r.pixelRatio,r.height/r.pixelRatio,r.sdf,r.pixelRatio/this.pixelRatio);return this.images[t]=i,this.copy(n,r,e),i},n.prototype.getPosition=function(t,e){var r=this.getImage(t,e),n=r&&r.rect;if(!n)return null;var i=r.width*r.pixelRatio,a=r.height*r.pixelRatio;return{size:[r.width,r.height],tl:[(n.x+1)/this.width,(n.y+1)/this.height],br:[(n.x+1+i)/this.width,(n.y+1+a)/this.height]}},n.prototype.allocate=function(){if(!this.data){var t=Math.floor(this.width*this.pixelRatio),e=Math.floor(this.height*this.pixelRatio);this.data=new Uint32Array(t*e);for(var r=0;r<this.data.length;r++)this.data[r]=0}},n.prototype.copy=function(t,e,r){if(this.sprite.img.data){var n=new Uint32Array(this.sprite.img.data.buffer);this.allocate();var a=this.data;i(n,this.sprite.img.width,e.x,e.y,a,this.width*this.pixelRatio,(t.x+1)*this.pixelRatio,(t.y+1)*this.pixelRatio,e.width,e.height,r),this.dirty=!0}},n.prototype.setSprite=function(t){t&&(this.pixelRatio=s.devicePixelRatio>1?2:1,this.canvas&&(this.canvas.width=this.width*this.pixelRatio,this.canvas.height=this.height*this.pixelRatio)),this.sprite=t},n.prototype.addIcons=function(t,e){for(var r=0;r<t.length;r++)this.getImage(t[r]);e(null,this.images)},n.prototype.bind=function(t,e){var r=!1;this.texture?t.bindTexture(t.TEXTURE_2D,this.texture):(this.texture=t.createTexture(),t.bindTexture(t.TEXTURE_2D,this.texture),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_S,t.CLAMP_TO_EDGE),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_WRAP_T,t.CLAMP_TO_EDGE),r=!0);var n=e?t.LINEAR:t.NEAREST;n!==this.filter&&(t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MIN_FILTER,n),t.texParameteri(t.TEXTURE_2D,t.TEXTURE_MAG_FILTER,n),this.filter=n),this.dirty&&(this.allocate(),r?t.texImage2D(t.TEXTURE_2D,0,t.RGBA,this.width*this.pixelRatio,this.height*this.pixelRatio,0,t.RGBA,t.UNSIGNED_BYTE,new Uint8Array(this.data.buffer)):t.texSubImage2D(t.TEXTURE_2D,0,0,0,this.width*this.pixelRatio,this.height*this.pixelRatio,t.RGBA,t.UNSIGNED_BYTE,new Uint8Array(this.data.buffer)),this.dirty=!1)}},{"../util/browser":426,"../util/util":442,"shelf-pack":514}],405:[function(t,e,r){"use strict";var n=t("../util/struct_array"),i=t("../util/util"),a=t("point-geometry"),o=e.exports=new n({members:[{type:"Uint16",name:"textBoxStartIndex"},{type:"Uint16",name:"textBoxEndIndex"},{type:"Uint16",name:"iconBoxStartIndex"},{type:"Uint16",name:"iconBoxEndIndex"},{type:"Uint16",name:"glyphQuadStartIndex"},{type:"Uint16",name:"glyphQuadEndIndex"},{type:"Uint16",name:"iconQuadStartIndex"},{type:"Uint16",name:"iconQuadEndIndex"},{type:"Int16",name:"anchorPointX"},{type:"Int16",name:"anchorPointY"},{type:"Int8",name:"index"}]});i.extendAll(o.prototype.StructType.prototype,{get anchorPoint(){return new a(this.anchorPointX,this.anchorPointY)}})},{"../util/struct_array":440,"../util/util":442,"point-geometry":484}],406:[function(t,e,r){"use strict";var n=t("../util/struct_array"),i=t("../util/util"),a=t("point-geometry"),o=t("./quads").SymbolQuad,s=e.exports=new n({members:[{type:"Int16",name:"anchorPointX"},{type:"Int16",name:"anchorPointY"},{type:"Float32",name:"tlX"},{type:"Float32",name:"tlY"},{type:"Float32",name:"trX"},{type:"Float32",name:"trY"},{type:"Float32",name:"blX"},{type:"Float32",name:"blY"},{type:"Float32",name:"brX"},{type:"Float32",name:"brY"},{type:"Int16",name:"texH"},{type:"Int16",name:"texW"},{type:"Int16",name:"texX"},{type:"Int16",name:"texY"},{type:"Float32",name:"anchorAngle"},{type:"Float32",name:"glyphAngle"},{type:"Float32",name:"maxScale"},{type:"Float32",name:"minScale"}]});i.extendAll(s.prototype.StructType.prototype,{get anchorPoint(){return new a(this.anchorPointX,this.anchorPointY)},get SymbolQuad(){return new o(this.anchorPoint,new a(this.tlX,this.tlY),new a(this.trX,this.trY),new a(this.blX,this.blY),new a(this.brX,this.brY),{x:this.texX,y:this.texY,h:this.texH,w:this.texW,height:this.texH,width:this.texW},this.anchorAngle,this.glyphAngle,this.minScale,this.maxScale)}})},{"../util/struct_array":440,"../util/util":442,"./quads":401,"point-geometry":484}],407:[function(t,e,r){"use strict";var n=t("../util/dom"),i=t("point-geometry"),a={scrollZoom:t("./handler/scroll_zoom"),boxZoom:t("./handler/box_zoom"),dragRotate:t("./handler/drag_rotate"),dragPan:t("./handler/drag_pan"),keyboard:t("./handler/keyboard"),doubleClickZoom:t("./handler/dblclick_zoom"),touchZoomRotate:t("./handler/touch_zoom_rotate")};e.exports=function(t,e){function r(t){v("mouseout",t)}function o(e){t.stop(),_=n.mousePos(b,e),v("mousedown",e)}function s(e){var r=t.dragRotate&&t.dragRotate.isActive();x&&!r&&v("contextmenu",x),x=null,v("mouseup",e)}function l(e){if(!(t.dragPan&&t.dragPan.isActive()||t.dragRotate&&t.dragRotate.isActive())){for(var r=e.toElement||e.target;r&&r!==b;)r=r.parentNode;r===b&&v("mousemove",e)}}function u(e){t.stop(),y("touchstart",e),!e.touches||e.touches.length>1||(w?(clearTimeout(w),w=null,v("dblclick",e)):w=setTimeout(d,300))}function c(t){y("touchmove",t)}function h(t){y("touchend",t)}function f(t){y("touchcancel",t)}function d(){w=null}function p(t){n.mousePos(b,t).equals(_)&&v("click",t)}function m(t){v("dblclick",t),t.preventDefault()}function g(t){x=t,t.preventDefault()}function v(e,r){var i=n.mousePos(b,r);return t.fire(e,{lngLat:t.unproject(i),point:i,originalEvent:r})}function y(e,r){var a=n.touchPos(b,r),o=a.reduce(function(t,e,r,n){return t.add(e.div(n.length))},new i(0,0));return t.fire(e,{lngLat:t.unproject(o),point:o,lngLats:a.map(function(e){return t.unproject(e)},this),points:a,originalEvent:r})}var b=t.getCanvasContainer(),x=null,_=null,w=null;for(var M in a)t[M]=new a[M](t,e),e.interactive&&e[M]&&t[M].enable();b.addEventListener("mouseout",r,!1),b.addEventListener("mousedown",o,!1),b.addEventListener("mouseup",s,!1),b.addEventListener("mousemove",l,!1),b.addEventListener("touchstart",u,!1),b.addEventListener("touchend",h,!1),b.addEventListener("touchmove",c,!1),b.addEventListener("touchcancel",f,!1),b.addEventListener("click",p,!1),b.addEventListener("dblclick",m,!1),b.addEventListener("contextmenu",g,!1)}},{"../util/dom":428,"./handler/box_zoom":413,"./handler/dblclick_zoom":414,"./handler/drag_pan":415,"./handler/drag_rotate":416,"./handler/keyboard":417,"./handler/scroll_zoom":418,"./handler/touch_zoom_rotate":419,"point-geometry":484}],408:[function(t,e,r){"use strict";var n=t("../util/util"),i=t("../util/interpolate"),a=t("../util/browser"),o=t("../geo/lng_lat"),s=t("../geo/lng_lat_bounds"),l=t("point-geometry"),u=e.exports=function(){};n.extend(u.prototype,{getCenter:function(){return this.transform.center},setCenter:function(t,e){return this.jumpTo({center:t},e),this},panBy:function(t,e,r){return this.panTo(this.transform.center,n.extend({offset:l.convert(t).mult(-1)},e),r),this},panTo:function(t,e,r){return this.easeTo(n.extend({center:t},e),r)},getZoom:function(){return this.transform.zoom},setZoom:function(t,e){return this.jumpTo({zoom:t},e),this},zoomTo:function(t,e,r){return this.easeTo(n.extend({zoom:t},e),r)},zoomIn:function(t,e){return this.zoomTo(this.getZoom()+1,t,e),this},zoomOut:function(t,e){return this.zoomTo(this.getZoom()-1,t,e),this},getBearing:function(){return this.transform.bearing},setBearing:function(t,e){return this.jumpTo({bearing:t},e),this},rotateTo:function(t,e,r){return this.easeTo(n.extend({bearing:t},e),r)},resetNorth:function(t,e){return this.rotateTo(0,n.extend({duration:1e3},t),e),this},snapToNorth:function(t,e){return Math.abs(this.getBearing())<this._bearingSnap?this.resetNorth(t,e):this},getPitch:function(){return this.transform.pitch},setPitch:function(t,e){return this.jumpTo({pitch:t},e),this},fitBounds:function(t,e,r){e=n.extend({padding:0,offset:[0,0],maxZoom:1/0},e),t=s.convert(t);var i=l.convert(e.offset),a=this.transform,o=a.project(t.getNorthWest()),u=a.project(t.getSouthEast()),c=u.sub(o),h=(a.width-2*e.padding-2*Math.abs(i.x))/c.x,f=(a.height-2*e.padding-2*Math.abs(i.y))/c.y;return e.center=a.unproject(o.add(u).div(2)),e.zoom=Math.min(a.scaleZoom(a.scale*Math.min(h,f)),e.maxZoom),e.bearing=0,e.linear?this.easeTo(e,r):this.flyTo(e,r)},jumpTo:function(t,e){this.stop();var r=this.transform,n=!1,i=!1,a=!1;return"zoom"in t&&r.zoom!==+t.zoom&&(n=!0,r.zoom=+t.zoom),"center"in t&&(r.center=o.convert(t.center)),"bearing"in t&&r.bearing!==+t.bearing&&(i=!0,r.bearing=+t.bearing),"pitch"in t&&r.pitch!==+t.pitch&&(a=!0,r.pitch=+t.pitch),this.fire("movestart",e).fire("move",e),n&&this.fire("zoomstart",e).fire("zoom",e).fire("zoomend",e),i&&this.fire("rotate",e),a&&this.fire("pitch",e),this.fire("moveend",e)},easeTo:function(t,e){this.stop(),t=n.extend({offset:[0,0],duration:500,easing:n.ease},t);var r,a,s=this.transform,u=l.convert(t.offset),c=this.getZoom(),h=this.getBearing(),f=this.getPitch(),d="zoom"in t?+t.zoom:c,p="bearing"in t?this._normalizeBearing(t.bearing,h):h,m="pitch"in t?+t.pitch:f;"center"in t?(r=o.convert(t.center),a=s.centerPoint.add(u)):"around"in t?(r=o.convert(t.around),a=s.locationPoint(r)):(a=s.centerPoint.add(u),r=s.pointLocation(a));var g=s.locationPoint(r);return!1===t.animate&&(t.duration=0),this.zooming=d!==c,this.rotating=h!==p,this.pitching=m!==f,t.noMoveStart||this.fire("movestart",e),this.zooming&&this.fire("zoomstart",e),clearTimeout(this._onEaseEnd),this._ease(function(t){this.zooming&&(s.zoom=i(c,d,t)),this.rotating&&(s.bearing=i(h,p,t)),this.pitching&&(s.pitch=i(f,m,t)),s.setLocationAtPoint(r,g.add(a.sub(g)._mult(t))),this.fire("move",e),this.zooming&&this.fire("zoom",e),this.rotating&&this.fire("rotate",e),this.pitching&&this.fire("pitch",e)},function(){t.delayEndEvents?this._onEaseEnd=setTimeout(this._easeToEnd.bind(this,e),t.delayEndEvents):this._easeToEnd(e)}.bind(this),t),this},_easeToEnd:function(t){var e=this.zooming;this.zooming=!1,this.rotating=!1,this.pitching=!1,e&&this.fire("zoomend",t),this.fire("moveend",t)},flyTo:function(t,e){function r(t){var e=(A*A-k*k+(t?-1:1)*L*L*T*T)/(2*(t?A:k)*L*T);return Math.log(Math.sqrt(e*e+1)-e)}function a(t){return(Math.exp(t)-Math.exp(-t))/2}function s(t){return(Math.exp(t)+Math.exp(-t))/2}function u(t){return a(t)/s(t)}this.stop(),t=n.extend({offset:[0,0],speed:1.2,curve:1.42,easing:n.ease},t);var c=this.transform,h=l.convert(t.offset),f=this.getZoom(),d=this.getBearing(),p=this.getPitch(),m="center"in t?o.convert(t.center):this.getCenter(),g="zoom"in t?+t.zoom:f,v="bearing"in t?this._normalizeBearing(t.bearing,d):d,y="pitch"in t?+t.pitch:p;Math.abs(c.center.lng)+Math.abs(m.lng)>180&&(c.center.lng>0&&m.lng<0?m.lng+=360:c.center.lng<0&&m.lng>0&&(m.lng-=360));var b=c.zoomScale(g-f),x=c.point,_="center"in t?c.project(m).sub(h.div(b)):x,w=c.worldSize,M=t.curve,k=Math.max(c.width,c.height),A=k/b,T=_.sub(x).mag();if("minZoom"in t){var S=n.clamp(Math.min(t.minZoom,f,g),c.minZoom,c.maxZoom),E=k/c.zoomScale(S-f);M=Math.sqrt(E/T*2)}var L=M*M,C=r(0),I=function(t){return s(C)/s(C+M*t)},z=function(t){return k*((s(C)*u(C+M*t)-a(C))/L)/T},D=(r(1)-C)/M;if(Math.abs(T)<1e-6){if(Math.abs(k-A)<1e-6)return this.easeTo(t);var P=A<k?-1:1;D=Math.abs(Math.log(A/k))/M,z=function(){return 0},I=function(t){return Math.exp(P*M*t)}}if("duration"in t)t.duration=+t.duration;else{var O="screenSpeed"in t?+t.screenSpeed/M:+t.speed;t.duration=1e3*D/O}return this.zooming=!0,d!==v&&(this.rotating=!0),p!==y&&(this.pitching=!0),this.fire("movestart",e),this.fire("zoomstart",e),this._ease(function(t){var r=t*D,n=z(r);c.zoom=f+c.scaleZoom(1/I(r)),c.center=c.unproject(x.add(_.sub(x).mult(n)),w),this.rotating&&(c.bearing=i(d,v,t)),this.pitching&&(c.pitch=i(p,y,t)),this.fire("move",e),this.fire("zoom",e),this.rotating&&this.fire("rotate",e),this.pitching&&this.fire("pitch",e)},function(){this.zooming=!1,this.rotating=!1,this.pitching=!1,this.fire("zoomend",e),this.fire("moveend",e)},t),this},isEasing:function(){return!!this._abortFn},stop:function(){return this._abortFn&&(this._abortFn(),this._finishEase()),this},_ease:function(t,e,r){this._finishFn=e,this._abortFn=a.timed(function(e){t.call(this,r.easing(e)),1===e&&this._finishEase()},!1===r.animate?0:r.duration,this)},_finishEase:function(){delete this._abortFn;var t=this._finishFn;delete this._finishFn,t.call(this)},_normalizeBearing:function(t,e){t=n.wrap(t,-180,180);var r=Math.abs(t-e);return Math.abs(t-360-e)<r&&(t-=360),Math.abs(t+360-e)<r&&(t+=360),t},_updateEasing:function(t,e,r){var i;if(this.ease){var a=this.ease,o=(Date.now()-a.start)/a.duration,s=a.easing(o+.01)-a.easing(o),l=.27/Math.sqrt(s*s+1e-4)*.01,u=Math.sqrt(.0729-l*l);i=n.bezier(l,u,.25,1)}else i=r?n.bezier.apply(n,r):n.ease;return this.ease={start:(new Date).getTime(),to:Math.pow(2,e),duration:t,easing:i},i}})},{"../geo/lng_lat":339,"../geo/lng_lat_bounds":340,"../util/browser":426,"../util/interpolate":436,"../util/util":442,"point-geometry":484}],409:[function(t,e,r){"use strict";function n(t){o.setOptions(this,t)}var i=t("./control"),a=t("../../util/dom"),o=t("../../util/util");e.exports=n,n.createAttributionString=function(t){var e=[];for(var r in t){var n=t[r];n.attribution&&e.indexOf(n.attribution)<0&&e.push(n.attribution)}return e.sort(function(t,e){return t.length-e.length}),e=e.filter(function(t,r){for(var n=r+1;n<e.length;n++)if(e[n].indexOf(t)>=0)return!1;return!0}),e.join(" | ")},n.prototype=o.inherit(i,{options:{position:"bottom-right"},onAdd:function(t){var e=this._container=a.create("div","mapboxgl-ctrl-attrib",t.getContainer());return this._update(),t.on("source.load",this._update.bind(this)),t.on("source.change",this._update.bind(this)),t.on("source.remove",this._update.bind(this)),t.on("moveend",this._updateEditLink.bind(this)),e},_update:function(){this._map.style&&(this._container.innerHTML=n.createAttributionString(this._map.style.sources)),this._editLink=this._container.getElementsByClassName("mapbox-improve-map")[0],this._updateEditLink()},_updateEditLink:function(){if(this._editLink){var t=this._map.getCenter();this._editLink.href="https://www.mapbox.com/map-feedback/#/"+t.lng+"/"+t.lat+"/"+Math.round(this._map.getZoom()+1)}}})},{"../../util/dom":428,"../../util/util":442,"./control":410}],410:[function(t,e,r){"use strict";function n(){}var i=t("../../util/util"),a=t("../../util/evented");e.exports=n,n.prototype={addTo:function(t){this._map=t;var e=this._container=this.onAdd(t);if(this.options&&this.options.position){var r=this.options.position,n=t._controlCorners[r];e.className+=" mapboxgl-ctrl",-1!==r.indexOf("bottom")?n.insertBefore(e,n.firstChild):n.appendChild(e)}return this},remove:function(){return this._container.parentNode.removeChild(this._container),this.onRemove&&this.onRemove(this._map),this._map=null,this}},i.extend(n.prototype,a)},{"../../util/evented":434,"../../util/util":442}],411:[function(t,e,r){"use strict";function n(t){s.setOptions(this,t)}var i=t("./control"),a=t("../../util/browser"),o=t("../../util/dom"),s=t("../../util/util");e.exports=n;var l={enableHighAccuracy:!1,timeout:6e3};n.prototype=s.inherit(i,{options:{position:"top-right"},onAdd:function(t){var e=this._container=o.create("div","mapboxgl-ctrl-group",t.getContainer());return a.supportsGeolocation?(this._container.addEventListener("contextmenu",this._onContextMenu.bind(this)),this._geolocateButton=o.create("button","mapboxgl-ctrl-icon mapboxgl-ctrl-geolocate",this._container),this._geolocateButton.type="button",this._geolocateButton.addEventListener("click",this._onClickGeolocate.bind(this)),e):e},_onContextMenu:function(t){t.preventDefault()},_onClickGeolocate:function(){navigator.geolocation.getCurrentPosition(this._success.bind(this),this._error.bind(this),l),this._timeoutId=setTimeout(this._finish.bind(this),1e4)},_success:function(t){this._map.jumpTo({center:[t.coords.longitude,t.coords.latitude],zoom:17,bearing:0,pitch:0}),this.fire("geolocate",t),this._finish()},_error:function(t){this.fire("error",t),this._finish()},_finish:function(){this._timeoutId&&clearTimeout(this._timeoutId),this._timeoutId=void 0}})},{"../../util/browser":426,"../../util/dom":428,"../../util/util":442,"./control":410}],412:[function(t,e,r){"use strict";function n(t){s.setOptions(this,t)}function i(t){return new MouseEvent(t.type,{button:2,buttons:2,bubbles:!0,cancelable:!0,detail:t.detail,view:t.view,screenX:t.screenX,screenY:t.screenY,clientX:t.clientX,clientY:t.clientY,movementX:t.movementX,movementY:t.movementY,ctrlKey:t.ctrlKey,shiftKey:t.shiftKey,altKey:t.altKey,metaKey:t.metaKey})}var a=t("./control"),o=t("../../util/dom"),s=t("../../util/util");e.exports=n,n.prototype=s.inherit(a,{options:{position:"top-right"},onAdd:function(t){var e="mapboxgl-ctrl",r=this._container=o.create("div",e+"-group",t.getContainer());return this._container.addEventListener("contextmenu",this._onContextMenu.bind(this)),this._zoomInButton=this._createButton(e+"-icon "+e+"-zoom-in",t.zoomIn.bind(t)),this._zoomOutButton=this._createButton(e+"-icon "+e+"-zoom-out",t.zoomOut.bind(t)),this._compass=this._createButton(e+"-icon "+e+"-compass",t.resetNorth.bind(t)),this._compassArrow=o.create("div","arrow",this._compass),this._compass.addEventListener("mousedown",this._onCompassDown.bind(this)),this._onCompassMove=this._onCompassMove.bind(this),this._onCompassUp=this._onCompassUp.bind(this),t.on("rotate",this._rotateCompassArrow.bind(this)),this._rotateCompassArrow(),this._el=t.getCanvasContainer(),r},_onContextMenu:function(t){t.preventDefault()},_onCompassDown:function(t){0===t.button&&(o.disableDrag(),document.addEventListener("mousemove",this._onCompassMove),document.addEventListener("mouseup",this._onCompassUp),this._el.dispatchEvent(i(t)),t.stopPropagation())},_onCompassMove:function(t){0===t.button&&(this._el.dispatchEvent(i(t)),t.stopPropagation())},_onCompassUp:function(t){0===t.button&&(document.removeEventListener("mousemove",this._onCompassMove),document.removeEventListener("mouseup",this._onCompassUp),o.enableDrag(),this._el.dispatchEvent(i(t)),t.stopPropagation())},_createButton:function(t,e){var r=o.create("button",t,this._container);return r.type="button",r.addEventListener("click",function(){e()}),r},_rotateCompassArrow:function(){var t="rotate("+this._map.transform.angle*(180/Math.PI)+"deg)";this._compassArrow.style.transform=t}})},{"../../util/dom":428,"../../util/util":442,"./control":410}],413:[function(t,e,r){"use strict";function n(t){this._map=t,this._el=t.getCanvasContainer(),this._container=t.getContainer(),o.bindHandlers(this)}var i=t("../../util/dom"),a=t("../../geo/lng_lat_bounds"),o=t("../../util/util");e.exports=n,n.prototype={_enabled:!1,_active:!1,isEnabled:function(){return this._enabled},isActive:function(){return this._active},enable:function(){this.isEnabled()||(this._el.addEventListener("mousedown",this._onMouseDown,!1),this._enabled=!0)},disable:function(){this.isEnabled()&&(this._el.removeEventListener("mousedown",this._onMouseDown),this._enabled=!1)},_onMouseDown:function(t){t.shiftKey&&0===t.button&&(document.addEventListener("mousemove",this._onMouseMove,!1),document.addEventListener("keydown",this._onKeyDown,!1),document.addEventListener("mouseup",this._onMouseUp,!1),i.disableDrag(),this._startPos=i.mousePos(this._el,t),this._active=!0)},_onMouseMove:function(t){var e=this._startPos,r=i.mousePos(this._el,t);this._box||(this._box=i.create("div","mapboxgl-boxzoom",this._container),this._container.classList.add("mapboxgl-crosshair"),this._fireEvent("boxzoomstart",t));var n=Math.min(e.x,r.x),a=Math.max(e.x,r.x),o=Math.min(e.y,r.y),s=Math.max(e.y,r.y);i.setTransform(this._box,"translate("+n+"px,"+o+"px)"),this._box.style.width=a-n+"px",this._box.style.height=s-o+"px"},_onMouseUp:function(t){if(0===t.button){var e=this._startPos,r=i.mousePos(this._el,t),n=new a(this._map.unproject(e),this._map.unproject(r));this._finish(),e.x===r.x&&e.y===r.y?this._fireEvent("boxzoomcancel",t):this._map.fitBounds(n,{linear:!0}).fire("boxzoomend",{originalEvent:t,boxZoomBounds:n})}},_onKeyDown:function(t){27===t.keyCode&&(this._finish(),this._fireEvent("boxzoomcancel",t))},_finish:function(){this._active=!1,document.removeEventListener("mousemove",this._onMouseMove,!1),document.removeEventListener("keydown",this._onKeyDown,!1),document.removeEventListener("mouseup",this._onMouseUp,!1),this._container.classList.remove("mapboxgl-crosshair"),this._box&&(this._box.parentNode.removeChild(this._box),this._box=null),i.enableDrag()},_fireEvent:function(t,e){return this._map.fire(t,{originalEvent:e})}}},{"../../geo/lng_lat_bounds":340,"../../util/dom":428,"../../util/util":442}],414:[function(t,e,r){"use strict";function n(t){this._map=t,this._onDblClick=this._onDblClick.bind(this)}e.exports=n,n.prototype={_enabled:!1,isEnabled:function(){return this._enabled},enable:function(){this.isEnabled()||(this._map.on("dblclick",this._onDblClick),this._enabled=!0)},disable:function(){this.isEnabled()&&(this._map.off("dblclick",this._onDblClick),this._enabled=!1)},_onDblClick:function(t){this._map.zoomTo(this._map.getZoom()+(t.originalEvent.shiftKey?-1:1),{around:t.lngLat},t)}}},{}],415:[function(t,e,r){"use strict";function n(t){this._map=t,this._el=t.getCanvasContainer(),a.bindHandlers(this)}var i=t("../../util/dom"),a=t("../../util/util");e.exports=n;var o=a.bezier(0,0,.3,1);n.prototype={_enabled:!1,_active:!1,isEnabled:function(){return this._enabled},isActive:function(){return this._active},enable:function(){this.isEnabled()||(this._el.addEventListener("mousedown",this._onDown),this._el.addEventListener("touchstart",this._onDown),this._enabled=!0)},disable:function(){this.isEnabled()&&(this._el.removeEventListener("mousedown",this._onDown),this._el.removeEventListener("touchstart",this._onDown),this._enabled=!1)},_onDown:function(t){this._ignoreEvent(t)||this.isActive()||(t.touches?(document.addEventListener("touchmove",this._onMove),document.addEventListener("touchend",this._onTouchEnd)):(document.addEventListener("mousemove",this._onMove),document.addEventListener("mouseup",this._onMouseUp)),this._active=!1,this._startPos=this._pos=i.mousePos(this._el,t),this._inertia=[[Date.now(),this._pos]])},_onMove:function(t){if(!this._ignoreEvent(t)){this.isActive()||(this._active=!0,this._fireEvent("dragstart",t),this._fireEvent("movestart",t));var e=i.mousePos(this._el,t),r=this._map;r.stop(),this._drainInertiaBuffer(),this._inertia.push([Date.now(),e]),r.transform.setLocationAtPoint(r.transform.pointLocation(this._pos),e),this._fireEvent("drag",t),this._fireEvent("move",t),this._pos=e,t.preventDefault()}},_onUp:function(t){if(this.isActive()){this._active=!1,this._fireEvent("dragend",t),this._drainInertiaBuffer();var e=function(){this._fireEvent("moveend",t)}.bind(this),r=this._inertia;if(r.length<2)return void e();var n=r[r.length-1],i=r[0],a=n[1].sub(i[1]),s=(n[0]-i[0])/1e3;if(0===s||n[1].equals(i[1]))return void e();var l=a.mult(.3/s),u=l.mag();u>1400&&(u=1400,l._unit()._mult(u));var c=u/750,h=l.mult(-c/2);this._map.panBy(h,{duration:1e3*c,easing:o,noMoveStart:!0},{originalEvent:t})}},_onMouseUp:function(t){this._ignoreEvent(t)||(this._onUp(t),document.removeEventListener("mousemove",this._onMove),document.removeEventListener("mouseup",this._onMouseUp))},_onTouchEnd:function(t){this._ignoreEvent(t)||(this._onUp(t),document.removeEventListener("touchmove",this._onMove),document.removeEventListener("touchend",this._onTouchEnd))},_fireEvent:function(t,e){return this._map.fire(t,{originalEvent:e})},_ignoreEvent:function(t){var e=this._map;if(e.boxZoom&&e.boxZoom.isActive())return!0;if(e.dragRotate&&e.dragRotate.isActive())return!0;if(t.touches)return t.touches.length>1;if(t.ctrlKey)return!0;return"mousemove"===t.type?!1&t.buttons:0!==t.button},_drainInertiaBuffer:function(){for(var t=this._inertia,e=Date.now();t.length>0&&e-t[0][0]>160;)t.shift()}}},{"../../util/dom":428,"../../util/util":442}],416:[function(t,e,r){"use strict";function n(t,e){this._map=t,this._el=t.getCanvasContainer(),this._bearingSnap=e.bearingSnap,o.bindHandlers(this)}var i=t("../../util/dom"),a=t("point-geometry"),o=t("../../util/util");e.exports=n;var s=o.bezier(0,0,.25,1);n.prototype={_enabled:!1,_active:!1,isEnabled:function(){return this._enabled},isActive:function(){return this._active},enable:function(){this.isEnabled()||(this._el.addEventListener("mousedown",this._onDown),this._enabled=!0)},disable:function(){this.isEnabled()&&(this._el.removeEventListener("mousedown",this._onDown),this._enabled=!1)},_onDown:function(t){if(!this._ignoreEvent(t)&&!this.isActive()){document.addEventListener("mousemove",this._onMove),document.addEventListener("mouseup",this._onUp),this._active=!1,this._inertia=[[Date.now(),this._map.getBearing()]],this._startPos=this._pos=i.mousePos(this._el,t),this._center=this._map.transform.centerPoint;var e=this._startPos.sub(this._center);e.mag()<200&&(this._center=this._startPos.add(new a(-200,0)._rotate(e.angle()))),t.preventDefault()}},_onMove:function(t){if(!this._ignoreEvent(t)){this.isActive()||(this._active=!0,this._fireEvent("rotatestart",t),this._fireEvent("movestart",t));var e=this._map;e.stop();var r=this._pos,n=i.mousePos(this._el,t),a=this._center,o=r.sub(a).angleWith(n.sub(a))/Math.PI*180,s=e.getBearing()-o,l=this._inertia,u=l[l.length-1];this._drainInertiaBuffer(),l.push([Date.now(),e._normalizeBearing(s,u[1])]),e.transform.bearing=s,this._fireEvent("rotate",t),this._fireEvent("move",t),this._pos=n}},_onUp:function(t){if(!this._ignoreEvent(t)&&(document.removeEventListener("mousemove",this._onMove),document.removeEventListener("mouseup",this._onUp),this.isActive())){this._active=!1,this._fireEvent("rotateend",t),this._drainInertiaBuffer();var e=this._map,r=e.getBearing(),n=this._inertia,i=function(){Math.abs(r)<this._bearingSnap?e.resetNorth({noMoveStart:!0},{originalEvent:t}):this._fireEvent("moveend",t)}.bind(this);if(n.length<2)return void i();var a=n[0],o=n[n.length-1],l=n[n.length-2],u=e._normalizeBearing(r,l[1]),c=o[1]-a[1],h=c<0?-1:1,f=(o[0]-a[0])/1e3;if(0===c||0===f)return void i();var d=Math.abs(c*(.25/f));d>180&&(d=180);var p=d/180;u+=h*d*(p/2),Math.abs(e._normalizeBearing(u,0))<this._bearingSnap&&(u=e._normalizeBearing(0,u)),e.rotateTo(u,{duration:1e3*p,easing:s,noMoveStart:!0},{originalEvent:t})}},_fireEvent:function(t,e){return this._map.fire(t,{originalEvent:e})},_ignoreEvent:function(t){var e=this._map;if(e.boxZoom&&e.boxZoom.isActive())return!0;if(e.dragPan&&e.dragPan.isActive())return!0;if(t.touches)return t.touches.length>1;var r=t.ctrlKey?1:2,n=t.ctrlKey?0:2;return"mousemove"===t.type?t.buttons&0===r:t.button!==n},_drainInertiaBuffer:function(){for(var t=this._inertia,e=Date.now();t.length>0&&e-t[0][0]>160;)t.shift()}}},{"../../util/dom":428,"../../util/util":442,"point-geometry":484}],417:[function(t,e,r){"use strict";function n(t){this._map=t,this._el=t.getCanvasContainer(),this._onKeyDown=this._onKeyDown.bind(this)}e.exports=n;n.prototype={_enabled:!1,isEnabled:function(){return this._enabled},enable:function(){this.isEnabled()||(this._el.addEventListener("keydown",this._onKeyDown,!1),this._enabled=!0)},disable:function(){this.isEnabled()&&(this._el.removeEventListener("keydown",this._onKeyDown),this._enabled=!1)},_onKeyDown:function(t){if(!(t.altKey||t.ctrlKey||t.metaKey)){var e=this._map,r={originalEvent:t};if(!e.isEasing())switch(t.keyCode){case 61:case 107:case 171:case 187:e.zoomTo(Math.round(e.getZoom())+(t.shiftKey?2:1),r);break;case 189:case 109:case 173:e.zoomTo(Math.round(e.getZoom())-(t.shiftKey?2:1),r);break;case 37:t.shiftKey?e.easeTo({bearing:e.getBearing()-2},r):(t.preventDefault(),e.panBy([-80,0],r));break;case 39:t.shiftKey?e.easeTo({bearing:e.getBearing()+2},r):(t.preventDefault(),e.panBy([80,0],r));break;case 38:t.shiftKey?e.easeTo({pitch:e.getPitch()+5},r):(t.preventDefault(),e.panBy([0,-80],r));break;case 40:t.shiftKey?e.easeTo({pitch:Math.max(e.getPitch()-5,0)},r):(t.preventDefault(),e.panBy([0,80],r))}}}}},{}],418:[function(t,e,r){"use strict";function n(t){this._map=t,this._el=t.getCanvasContainer(),o.bindHandlers(this)}var i=t("../../util/dom"),a=t("../../util/browser"),o=t("../../util/util");e.exports=n;var s="undefined"!=typeof navigator?navigator.userAgent.toLowerCase():"",l=-1!==s.indexOf("firefox"),u=-1!==s.indexOf("safari")&&-1===s.indexOf("chrom");n.prototype={_enabled:!1,isEnabled:function(){return this._enabled},enable:function(){this.isEnabled()||(this._el.addEventListener("wheel",this._onWheel,!1),this._el.addEventListener("mousewheel",this._onWheel,!1),this._enabled=!0)},disable:function(){this.isEnabled()&&(this._el.removeEventListener("wheel",this._onWheel),this._el.removeEventListener("mousewheel",this._onWheel),this._enabled=!1)},_onWheel:function(t){var e;"wheel"===t.type?(e=t.deltaY,l&&t.deltaMode===window.WheelEvent.DOM_DELTA_PIXEL&&(e/=a.devicePixelRatio),t.deltaMode===window.WheelEvent.DOM_DELTA_LINE&&(e*=40)):"mousewheel"===t.type&&(e=-t.wheelDeltaY,u&&(e/=3));var r=a.now(),n=r-(this._time||0);this._pos=i.mousePos(this._el,t),this._time=r,0!==e&&e%4.000244140625==0?(this._type="wheel",e=Math.floor(e/4)):0!==e&&Math.abs(e)<4?this._type="trackpad":n>400?(this._type=null,this._lastValue=e,this._timeout=setTimeout(this._onTimeout,40)):this._type||(this._type=Math.abs(n*e)<200?"trackpad":"wheel",this._timeout&&(clearTimeout(this._timeout),this._timeout=null,e+=this._lastValue)),t.shiftKey&&e&&(e/=4),this._type&&this._zoom(-e,t),t.preventDefault()},_onTimeout:function(){this._type="wheel",this._zoom(-this._lastValue)},_zoom:function(t,e){if(0!==t){var r=this._map,n=2/(1+Math.exp(-Math.abs(t/100)));t<0&&0!==n&&(n=1/n);var i=r.ease?r.ease.to:r.transform.scale,a=r.transform.scaleZoom(i*n);r.zoomTo(a,{duration:0,around:r.unproject(this._pos),delayEndEvents:200},{originalEvent:e})}}}},{"../../util/browser":426,"../../util/dom":428,"../../util/util":442}],419:[function(t,e,r){"use strict";function n(t){this._map=t,this._el=t.getCanvasContainer(),a.bindHandlers(this)}var i=t("../../util/dom"),a=t("../../util/util");e.exports=n;var o=a.bezier(0,0,.15,1);n.prototype={_enabled:!1,isEnabled:function(){return this._enabled},enable:function(){this.isEnabled()||(this._el.addEventListener("touchstart",this._onStart,!1),this._enabled=!0)},disable:function(){this.isEnabled()&&(this._el.removeEventListener("touchstart",this._onStart),this._enabled=!1)},disableRotation:function(){this._rotationDisabled=!0},enableRotation:function(){this._rotationDisabled=!1},_onStart:function(t){if(2===t.touches.length){var e=i.mousePos(this._el,t.touches[0]),r=i.mousePos(this._el,t.touches[1]);this._startVec=e.sub(r),this._startScale=this._map.transform.scale,this._startBearing=this._map.transform.bearing,this._gestureIntent=void 0,this._inertia=[],
document.addEventListener("touchmove",this._onMove,!1),document.addEventListener("touchend",this._onEnd,!1)}},_onMove:function(t){if(2===t.touches.length){var e=i.mousePos(this._el,t.touches[0]),r=i.mousePos(this._el,t.touches[1]),n=e.add(r).div(2),a=e.sub(r),o=a.mag()/this._startVec.mag(),s=this._rotationDisabled?0:180*a.angleWith(this._startVec)/Math.PI,l=this._map;if(this._gestureIntent){var u={duration:0,around:l.unproject(n)};"rotate"===this._gestureIntent&&(u.bearing=this._startBearing+s),"zoom"!==this._gestureIntent&&"rotate"!==this._gestureIntent||(u.zoom=l.transform.scaleZoom(this._startScale*o)),l.stop(),this._drainInertiaBuffer(),this._inertia.push([Date.now(),o,n]),l.easeTo(u,{originalEvent:t})}else{var c=Math.abs(1-o)>.15;Math.abs(s)>4?this._gestureIntent="rotate":c&&(this._gestureIntent="zoom"),this._gestureIntent&&(this._startVec=a,this._startScale=l.transform.scale,this._startBearing=l.transform.bearing)}t.preventDefault()}},_onEnd:function(t){document.removeEventListener("touchmove",this._onMove),document.removeEventListener("touchend",this._onEnd),this._drainInertiaBuffer();var e=this._inertia,r=this._map;if(e.length<2)return void r.snapToNorth({},{originalEvent:t});var n=e[e.length-1],i=e[0],a=r.transform.scaleZoom(this._startScale*n[1]),s=r.transform.scaleZoom(this._startScale*i[1]),l=a-s,u=(n[0]-i[0])/1e3,c=n[2];if(0===u||a===s)return void r.snapToNorth({},{originalEvent:t});var h=.15*l/u;Math.abs(h)>2.5&&(h=h>0?2.5:-2.5);var f=1e3*Math.abs(h/(12*.15)),d=a+h*f/2e3;d<0&&(d=0),r.easeTo({zoom:d,duration:f,easing:o,around:r.unproject(c)},{originalEvent:t})},_drainInertiaBuffer:function(){for(var t=this._inertia,e=Date.now();t.length>2&&e-t[0][0]>160;)t.shift()}}},{"../../util/dom":428,"../../util/util":442}],420:[function(t,e,r){"use strict";function n(){i.bindAll(["_onHashChange","_updateHash"],this)}e.exports=n;var i=t("../util/util");n.prototype={addTo:function(t){return this._map=t,window.addEventListener("hashchange",this._onHashChange,!1),this._map.on("moveend",this._updateHash),this},remove:function(){return window.removeEventListener("hashchange",this._onHashChange,!1),this._map.off("moveend",this._updateHash),delete this._map,this},_onHashChange:function(){var t=location.hash.replace("#","").split("/");return t.length>=3&&(this._map.jumpTo({center:[+t[2],+t[1]],zoom:+t[0],bearing:+(t[3]||0)}),!0)},_updateHash:function(){var t=this._map.getCenter(),e=this._map.getZoom(),r=this._map.getBearing(),n=Math.max(0,Math.ceil(Math.log(e)/Math.LN2)),i="#"+Math.round(100*e)/100+"/"+t.lat.toFixed(n)+"/"+t.lng.toFixed(n)+(r?"/"+Math.round(10*r)/10:"");window.history.replaceState("","",i)}}},{"../util/util":442}],421:[function(t,e,r){"use strict";function n(t){t.parentNode&&t.parentNode.removeChild(t)}var i=t("../util/canvas"),a=t("../util/util"),o=t("../util/browser"),s=t("../util/browser").window,l=t("../util/evented"),u=t("../util/dom"),c=t("../style/style"),h=t("../style/animation_loop"),f=t("../render/painter"),d=t("../geo/transform"),p=t("./hash"),m=t("./bind_handlers"),g=t("./camera"),v=t("../geo/lng_lat"),y=t("../geo/lng_lat_bounds"),b=t("point-geometry"),x=t("./control/attribution"),_={center:[0,0],zoom:0,bearing:0,pitch:0,minZoom:0,maxZoom:20,interactive:!0,scrollZoom:!0,boxZoom:!0,dragRotate:!0,dragPan:!0,keyboard:!0,doubleClickZoom:!0,touchZoomRotate:!0,bearingSnap:7,hash:!1,attributionControl:!0,failIfMajorPerformanceCaveat:!1,preserveDrawingBuffer:!1,trackResize:!0,workerCount:Math.max(o.hardwareConcurrency-1,1)},w=e.exports=function(t){if(t=a.extend({},_,t),t.workerCount<1)throw new Error("workerCount must an integer greater than or equal to 1.");this._interactive=t.interactive,this._failIfMajorPerformanceCaveat=t.failIfMajorPerformanceCaveat,this._preserveDrawingBuffer=t.preserveDrawingBuffer,this._trackResize=t.trackResize,this._workerCount=t.workerCount,this._bearingSnap=t.bearingSnap,"string"==typeof t.container?this._container=document.getElementById(t.container):this._container=t.container,this.animationLoop=new h,this.transform=new d(t.minZoom,t.maxZoom),t.maxBounds&&this.setMaxBounds(t.maxBounds),a.bindAll(["_forwardStyleEvent","_forwardSourceEvent","_forwardLayerEvent","_forwardTileEvent","_onStyleLoad","_onStyleChange","_onSourceAdd","_onSourceRemove","_onSourceUpdate","_onWindowOnline","_onWindowResize","_update","_render"],this),this._setupContainer(),this._setupPainter(),this.on("move",this._update.bind(this,!1)),this.on("zoom",this._update.bind(this,!0)),this.on("moveend",function(){this.animationLoop.set(300),this._rerender()}.bind(this)),void 0!==s&&(s.addEventListener("online",this._onWindowOnline,!1),s.addEventListener("resize",this._onWindowResize,!1)),m(this,t),this._hash=t.hash&&(new p).addTo(this),this._hash&&this._hash._onHashChange()||this.jumpTo({center:t.center,zoom:t.zoom,bearing:t.bearing,pitch:t.pitch}),this.stacks={},this._classes=[],this.resize(),t.classes&&this.setClasses(t.classes),t.style&&this.setStyle(t.style),t.attributionControl&&this.addControl(new x(t.attributionControl));var e=this.fire.bind(this,"error");this.on("style.error",e),this.on("source.error",e),this.on("tile.error",e),this.on("layer.error",e)};a.extend(w.prototype,l),a.extend(w.prototype,g.prototype),a.extend(w.prototype,{addControl:function(t){return t.addTo(this),this},addClass:function(t,e){return this._classes.indexOf(t)>=0||""===t?this:(this._classes.push(t),this._classOptions=e,this.style&&this.style.updateClasses(),this._update(!0))},removeClass:function(t,e){var r=this._classes.indexOf(t);return r<0||""===t?this:(this._classes.splice(r,1),this._classOptions=e,this.style&&this.style.updateClasses(),this._update(!0))},setClasses:function(t,e){for(var r={},n=0;n<t.length;n++)""!==t[n]&&(r[t[n]]=!0);return this._classes=Object.keys(r),this._classOptions=e,this.style&&this.style.updateClasses(),this._update(!0)},hasClass:function(t){return this._classes.indexOf(t)>=0},getClasses:function(){return this._classes},resize:function(){var t=0,e=0;return this._container&&(t=this._container.offsetWidth||400,e=this._container.offsetHeight||300),this._canvas.resize(t,e),this.transform.resize(t,e),this.painter.resize(t,e),this.fire("movestart").fire("move").fire("resize").fire("moveend")},getBounds:function(){var t=new y(this.transform.pointLocation(new b(0,0)),this.transform.pointLocation(this.transform.size));return(this.transform.angle||this.transform.pitch)&&(t.extend(this.transform.pointLocation(new b(this.transform.size.x,0))),t.extend(this.transform.pointLocation(new b(0,this.transform.size.y)))),t},setMaxBounds:function(t){if(t){var e=y.convert(t);this.transform.lngRange=[e.getWest(),e.getEast()],this.transform.latRange=[e.getSouth(),e.getNorth()],this.transform._constrain(),this._update()}else null!==t&&void 0!==t||(this.transform.lngRange=[],this.transform.latRange=[],this._update());return this},setMinZoom:function(t){if((t=null===t||void 0===t?0:t)>=0&&t<=this.transform.maxZoom)return this.transform.minZoom=t,this._update(),this.getZoom()<t&&this.setZoom(t),this;throw new Error("minZoom must be between 0 and the current maxZoom, inclusive")},setMaxZoom:function(t){if((t=null===t||void 0===t?20:t)>=this.transform.minZoom&&t<=20)return this.transform.maxZoom=t,this._update(),this.getZoom()>t&&this.setZoom(t),this;throw new Error("maxZoom must be between the current minZoom and 20, inclusive")},project:function(t){return this.transform.locationPoint(v.convert(t))},unproject:function(t){return this.transform.pointLocation(b.convert(t))},queryRenderedFeatures:function(){var t,e={};return 2===arguments.length?(t=arguments[0],e=arguments[1]):1===arguments.length&&function(t){return t instanceof b||Array.isArray(t)}(arguments[0])?t=arguments[0]:1===arguments.length&&(e=arguments[0]),this.style.queryRenderedFeatures(this._makeQueryGeometry(t),e,this.transform.zoom,this.transform.angle)},_makeQueryGeometry:function(t){void 0===t&&(t=[b.convert([0,0]),b.convert([this.transform.width,this.transform.height])]);var e;if(t instanceof b||"number"==typeof t[0])e=[b.convert(t)];else{var r=[b.convert(t[0]),b.convert(t[1])];e=[r[0],new b(r[1].x,r[0].y),r[1],new b(r[0].x,r[1].y),r[0]]}return e=e.map(function(t){return this.transform.pointCoordinate(t)}.bind(this))},querySourceFeatures:function(t,e){return this.style.querySourceFeatures(t,e)},setStyle:function(t){return this.style&&(this.style.off("load",this._onStyleLoad).off("error",this._forwardStyleEvent).off("change",this._onStyleChange).off("source.add",this._onSourceAdd).off("source.remove",this._onSourceRemove).off("source.load",this._onSourceUpdate).off("source.error",this._forwardSourceEvent).off("source.change",this._onSourceUpdate).off("layer.add",this._forwardLayerEvent).off("layer.remove",this._forwardLayerEvent).off("layer.error",this._forwardLayerEvent).off("tile.add",this._forwardTileEvent).off("tile.remove",this._forwardTileEvent).off("tile.load",this._update).off("tile.error",this._forwardTileEvent).off("tile.stats",this._forwardTileEvent)._remove(),this.off("rotate",this.style._redoPlacement),this.off("pitch",this.style._redoPlacement)),t?(this.style=t instanceof c?t:new c(t,this.animationLoop,this._workerCount),this.style.on("load",this._onStyleLoad).on("error",this._forwardStyleEvent).on("change",this._onStyleChange).on("source.add",this._onSourceAdd).on("source.remove",this._onSourceRemove).on("source.load",this._onSourceUpdate).on("source.error",this._forwardSourceEvent).on("source.change",this._onSourceUpdate).on("layer.add",this._forwardLayerEvent).on("layer.remove",this._forwardLayerEvent).on("layer.error",this._forwardLayerEvent).on("tile.add",this._forwardTileEvent).on("tile.remove",this._forwardTileEvent).on("tile.load",this._update).on("tile.error",this._forwardTileEvent).on("tile.stats",this._forwardTileEvent),this.on("rotate",this.style._redoPlacement),this.on("pitch",this.style._redoPlacement),this):(this.style=null,this)},getStyle:function(){if(this.style)return this.style.serialize()},addSource:function(t,e){return this.style.addSource(t,e),this._update(!0),this},addSourceType:function(t,e,r){return this.style.addSourceType(t,e,r)},removeSource:function(t){return this.style.removeSource(t),this._update(!0),this},getSource:function(t){return this.style.getSource(t)},addLayer:function(t,e){return this.style.addLayer(t,e),this._update(!0),this},removeLayer:function(t){return this.style.removeLayer(t),this._update(!0),this},getLayer:function(t){return this.style.getLayer(t)},setFilter:function(t,e){return this.style.setFilter(t,e),this._update(!0),this},setLayerZoomRange:function(t,e,r){return this.style.setLayerZoomRange(t,e,r),this._update(!0),this},getFilter:function(t){return this.style.getFilter(t)},setPaintProperty:function(t,e,r,n){return this.style.setPaintProperty(t,e,r,n),this._update(!0),this},getPaintProperty:function(t,e,r){return this.style.getPaintProperty(t,e,r)},setLayoutProperty:function(t,e,r){return this.style.setLayoutProperty(t,e,r),this._update(!0),this},getLayoutProperty:function(t,e){return this.style.getLayoutProperty(t,e)},getContainer:function(){return this._container},getCanvasContainer:function(){return this._canvasContainer},getCanvas:function(){return this._canvas.getElement()},_setupContainer:function(){var t=this._container;t.classList.add("mapboxgl-map");var e=this._canvasContainer=u.create("div","mapboxgl-canvas-container",t);this._interactive&&e.classList.add("mapboxgl-interactive"),this._canvas=new i(this,e);var r=this._controlContainer=u.create("div","mapboxgl-control-container",t),n=this._controlCorners={};["top-left","top-right","bottom-left","bottom-right"].forEach(function(t){n[t]=u.create("div","mapboxgl-ctrl-"+t,r)})},_setupPainter:function(){var t=this._canvas.getWebGLContext({failIfMajorPerformanceCaveat:this._failIfMajorPerformanceCaveat,preserveDrawingBuffer:this._preserveDrawingBuffer});if(!t)return void this.fire("error",{error:new Error("Failed to initialize WebGL")});this.painter=new f(t,this.transform)},_contextLost:function(t){t.preventDefault(),this._frameId&&o.cancelFrame(this._frameId),this.fire("webglcontextlost",{originalEvent:t})},_contextRestored:function(t){this._setupPainter(),this.resize(),this._update(),this.fire("webglcontextrestored",{originalEvent:t})},loaded:function(){return!this._styleDirty&&!this._sourcesDirty&&!(!this.style||!this.style.loaded())},_update:function(t){return this.style?(this._styleDirty=this._styleDirty||t,this._sourcesDirty=!0,this._rerender(),this):this},_render:function(){try{this.style&&this._styleDirty&&(this._styleDirty=!1,this.style.update(this._classes,this._classOptions),this._classOptions=null,this.style._recalculate(this.transform.zoom)),this.style&&this._sourcesDirty&&(this._sourcesDirty=!1,this.style._updateSources(this.transform)),this.painter.render(this.style,{debug:this.showTileBoundaries,showOverdrawInspector:this._showOverdrawInspector,vertices:this.vertices,rotating:this.rotating,zooming:this.zooming}),this.fire("render"),this.loaded()&&!this._loaded&&(this._loaded=!0,this.fire("load")),this._frameId=null,this.animationLoop.stopped()||(this._styleDirty=!0),(this._sourcesDirty||this._repaint||this._styleDirty)&&this._rerender()}catch(t){this.fire("error",{error:t})}return this},remove:function(){this._hash&&this._hash.remove(),o.cancelFrame(this._frameId),this.setStyle(null),void 0!==s&&s.removeEventListener("resize",this._onWindowResize,!1);var t=this.painter.gl.getExtension("WEBGL_lose_context");t&&t.loseContext(),n(this._canvasContainer),n(this._controlContainer),this._container.classList.remove("mapboxgl-map")},_rerender:function(){this.style&&!this._frameId&&(this._frameId=o.frame(this._render))},_forwardStyleEvent:function(t){this.fire("style."+t.type,a.extend({style:t.target},t))},_forwardSourceEvent:function(t){this.fire(t.type,a.extend({style:t.target},t))},_forwardLayerEvent:function(t){this.fire(t.type,a.extend({style:t.target},t))},_forwardTileEvent:function(t){this.fire(t.type,a.extend({style:t.target},t))},_onStyleLoad:function(t){this.transform.unmodified&&this.jumpTo(this.style.stylesheet),this.style.update(this._classes,{transition:!1}),this._forwardStyleEvent(t)},_onStyleChange:function(t){this._update(!0),this._forwardStyleEvent(t)},_onSourceAdd:function(t){var e=t.source;e.onAdd&&e.onAdd(this),this._forwardSourceEvent(t)},_onSourceRemove:function(t){var e=t.source;e.onRemove&&e.onRemove(this),this._forwardSourceEvent(t)},_onSourceUpdate:function(t){this._update(),this._forwardSourceEvent(t)},_onWindowOnline:function(){this._update()},_onWindowResize:function(){this._trackResize&&this.stop().resize()._update()}}),a.extendAll(w.prototype,{_showTileBoundaries:!1,get showTileBoundaries(){return this._showTileBoundaries},set showTileBoundaries(t){this._showTileBoundaries!==t&&(this._showTileBoundaries=t,this._update())},_showCollisionBoxes:!1,get showCollisionBoxes(){return this._showCollisionBoxes},set showCollisionBoxes(t){this._showCollisionBoxes!==t&&(this._showCollisionBoxes=t,this.style._redoPlacement())},_showOverdrawInspector:!1,get showOverdrawInspector(){return this._showOverdrawInspector},set showOverdrawInspector(t){this._showOverdrawInspector!==t&&(this._showOverdrawInspector=t,this._update())},_repaint:!1,get repaint(){return this._repaint},set repaint(t){this._repaint=t,this._update()},_vertices:!1,get vertices(){return this._vertices},set vertices(t){this._vertices=t,this._update()}})},{"../geo/lng_lat":339,"../geo/lng_lat_bounds":340,"../geo/transform":341,"../render/painter":355,"../style/animation_loop":375,"../style/style":378,"../util/browser":426,"../util/canvas":427,"../util/dom":428,"../util/evented":434,"../util/util":442,"./bind_handlers":407,"./camera":408,"./control/attribution":409,"./hash":420,"point-geometry":484}],422:[function(t,e,r){"use strict";function n(t,e){t||(t=i.create("div")),t.classList.add("mapboxgl-marker"),this._el=t,this._offset=o.convert(e&&e.offset||[0,0]),this._update=this._update.bind(this)}e.exports=n;var i=t("../util/dom"),a=t("../geo/lng_lat"),o=t("point-geometry");n.prototype={addTo:function(t){return this.remove(),this._map=t,t.getCanvasContainer().appendChild(this._el),t.on("move",this._update),this._update(),this},remove:function(){this._map&&(this._map.off("move",this._update),this._map=null);var t=this._el.parentNode;return t&&t.removeChild(this._el),this},getLngLat:function(){return this._lngLat},setLngLat:function(t){return this._lngLat=a.convert(t),this._update(),this},getElement:function(){return this._el},_update:function(){if(this._map){var t=this._map.project(this._lngLat)._add(this._offset);i.setTransform(this._el,"translate("+t.x+"px,"+t.y+"px)")}}}},{"../geo/lng_lat":339,"../util/dom":428,"point-geometry":484}],423:[function(t,e,r){"use strict";function n(t){i.setOptions(this,t),i.bindAll(["_update","_onClickClose"],this)}e.exports=n;var i=t("../util/util"),a=t("../util/evented"),o=t("../util/dom"),s=t("../geo/lng_lat");n.prototype=i.inherit(a,{options:{closeButton:!0,closeOnClick:!0},addTo:function(t){return this._map=t,this._map.on("move",this._update),this.options.closeOnClick&&this._map.on("click",this._onClickClose),this._update(),this},remove:function(){return this._content&&this._content.parentNode&&this._content.parentNode.removeChild(this._content),this._container&&(this._container.parentNode.removeChild(this._container),delete this._container),this._map&&(this._map.off("move",this._update),this._map.off("click",this._onClickClose),delete this._map),this.fire("close"),this},getLngLat:function(){return this._lngLat},setLngLat:function(t){return this._lngLat=s.convert(t),this._update(),this},setText:function(t){return this.setDOMContent(document.createTextNode(t))},setHTML:function(t){var e,r=document.createDocumentFragment(),n=document.createElement("body");for(n.innerHTML=t;;){if(!(e=n.firstChild))break;r.appendChild(e)}return this.setDOMContent(r)},setDOMContent:function(t){return this._createContent(),this._content.appendChild(t),this._update(),this},_createContent:function(){this._content&&this._content.parentNode&&this._content.parentNode.removeChild(this._content),this._content=o.create("div","mapboxgl-popup-content",this._container),this.options.closeButton&&(this._closeButton=o.create("button","mapboxgl-popup-close-button",this._content),this._closeButton.type="button",this._closeButton.innerHTML="&#215;",this._closeButton.addEventListener("click",this._onClickClose))},_update:function(){if(this._map&&this._lngLat&&this._content){this._container||(this._container=o.create("div","mapboxgl-popup",this._map.getContainer()),this._tip=o.create("div","mapboxgl-popup-tip",this._container),this._container.appendChild(this._content));var t=this._map.project(this._lngLat).round(),e=this.options.anchor;if(!e){var r=this._container.offsetWidth,n=this._container.offsetHeight;e=t.y<n?["top"]:t.y>this._map.transform.height-n?["bottom"]:[],t.x<r/2?e.push("left"):t.x>this._map.transform.width-r/2&&e.push("right"),e=0===e.length?"bottom":e.join("-")}var i={top:"translate(-50%,0)","top-left":"translate(0,0)","top-right":"translate(-100%,0)",bottom:"translate(-50%,-100%)","bottom-left":"translate(0,-100%)","bottom-right":"translate(-100%,-100%)",left:"translate(0,-50%)",right:"translate(-100%,-50%)"},a=this._container.classList;for(var s in i)a.remove("mapboxgl-popup-anchor-"+s);a.add("mapboxgl-popup-anchor-"+e),o.setTransform(this._container,i[e]+" translate("+t.x+"px,"+t.y+"px)")}},_onClickClose:function(){this.remove()}})},{"../geo/lng_lat":339,"../util/dom":428,"../util/evented":434,"../util/util":442}],424:[function(t,e,r){"use strict";function n(t,e){this.target=t,this.parent=e,this.callbacks={},this.callbackID=0,this.receive=this.receive.bind(this),this.target.addEventListener("message",this.receive,!1)}e.exports=n,n.prototype.receive=function(t){function e(t,e,r){this.postMessage({type:"<response>",id:String(i),error:t?String(t):null,data:e},r)}var r,n=t.data,i=n.id;if("<response>"===n.type)r=this.callbacks[n.id],delete this.callbacks[n.id],r&&r(n.error||null,n.data);else if(void 0!==n.id&&this.parent[n.type])this.parent[n.type](n.data,e.bind(this));else if(void 0!==n.id&&this.parent.workerSources){var a=n.type.split(".");this.parent.workerSources[a[0]][a[1]](n.data,e.bind(this))}else this.parent[n.type](n.data)},n.prototype.send=function(t,e,r,n){var i=null;r&&(this.callbacks[i=this.callbackID++]=r),this.postMessage({type:t,id:String(i),data:e},n)},n.prototype.postMessage=function(t,e){this.target.postMessage(t,e)}},{}],425:[function(t,e,r){"use strict";function n(t){var e=document.createElement("a");return e.href=t,e.protocol===document.location.protocol&&e.host===document.location.host}r.getJSON=function(t,e){var r=new XMLHttpRequest;return r.open("GET",t,!0),r.setRequestHeader("Accept","application/json"),r.onerror=function(t){e(t)},r.onload=function(){if(r.status>=200&&r.status<300&&r.response){var t;try{t=JSON.parse(r.response)}catch(t){return e(t)}e(null,t)}else e(new Error(r.statusText))},r.send(),r},r.getArrayBuffer=function(t,e){var r=new XMLHttpRequest;return r.open("GET",t,!0),r.responseType="arraybuffer",r.onerror=function(t){e(t)},r.onload=function(){r.status>=200&&r.status<300&&r.response?e(null,r.response):e(new Error(r.statusText))},r.send(),r},r.getImage=function(t,e){return r.getArrayBuffer(t,function(t,r){if(t)return e(t);var n=new Image;n.onload=function(){e(null,n),(window.URL||window.webkitURL).revokeObjectURL(n.src)};var i=new Blob([new Uint8Array(r)],{type:"image/png"});return n.src=(window.URL||window.webkitURL).createObjectURL(i),n.getData=function(){var t=document.createElement("canvas"),e=t.getContext("2d");return t.width=n.width,t.height=n.height,e.drawImage(n,0,0),e.getImageData(0,0,n.width,n.height).data},n})},r.getVideo=function(t,e){var r=document.createElement("video");r.onloadstart=function(){e(null,r)};for(var i=0;i<t.length;i++){var a=document.createElement("source");n(t[i])||(r.crossOrigin="Anonymous"),a.src=t[i],r.appendChild(a)}return r.getData=function(){return r},r}},{}],426:[function(t,e,r){"use strict";r.window=window,e.exports.now=function(){return window.performance&&window.performance.now?window.performance.now.bind(window.performance):Date.now.bind(Date)}();var n=window.requestAnimationFrame||window.mozRequestAnimationFrame||window.webkitRequestAnimationFrame||window.msRequestAnimationFrame;r.frame=function(t){return n(t)};var i=window.cancelAnimationFrame||window.mozCancelAnimationFrame||window.webkitCancelAnimationFrame||window.msCancelAnimationFrame;r.cancelFrame=function(t){i(t)},r.timed=function(t,n,i){function a(l){o||(l=e.exports.now(),l>=s+n?t.call(i,1):(t.call(i,(l-s)/n),r.frame(a)))}if(!n)return t.call(i,1),null;var o=!1,s=e.exports.now();return r.frame(a),function(){o=!0}},r.supported=t("mapbox-gl-supported"),r.hardwareConcurrency=navigator.hardwareConcurrency||4,Object.defineProperty(r,"devicePixelRatio",{get:function(){return window.devicePixelRatio}}),r.supportsWebp=!1;var a=document.createElement("img");a.onload=function(){r.supportsWebp=!0},a.src="data:image/webp;base64,UklGRh4AAABXRUJQVlA4TBEAAAAvAQAAAAfQ//73v/+BiOh/AAA=",r.supportsGeolocation=!!navigator.geolocation},{"mapbox-gl-supported":327}],427:[function(t,e,r){"use strict";function n(t,e){this.canvas=document.createElement("canvas"),t&&e&&(this.canvas.style.position="absolute",this.canvas.classList.add("mapboxgl-canvas"),this.canvas.addEventListener("webglcontextlost",t._contextLost.bind(t),!1),this.canvas.addEventListener("webglcontextrestored",t._contextRestored.bind(t),!1),this.canvas.setAttribute("tabindex",0),e.appendChild(this.canvas))}var i=t("../util"),a=t("mapbox-gl-supported");e.exports=n,n.prototype.resize=function(t,e){var r=window.devicePixelRatio||1;this.canvas.width=r*t,this.canvas.height=r*e,this.canvas.style.width=t+"px",this.canvas.style.height=e+"px"},n.prototype.getWebGLContext=function(t){return t=i.extend({},t,a.webGLContextAttributes),this.canvas.getContext("webgl",t)||this.canvas.getContext("experimental-webgl",t)},n.prototype.getElement=function(){return this.canvas}},{"../util":442,"mapbox-gl-supported":327}],428:[function(t,e,r){"use strict";function n(t){for(var e=0;e<t.length;e++)if(t[e]in s)return t[e]}function i(t){t.preventDefault(),t.stopPropagation(),window.removeEventListener("click",i,!0)}var a=t("point-geometry");r.create=function(t,e,r){var n=document.createElement(t);return e&&(n.className=e),r&&r.appendChild(n),n};var o,s=document.documentElement.style,l=n(["userSelect","MozUserSelect","WebkitUserSelect","msUserSelect"]);r.disableDrag=function(){l&&(o=s[l],s[l]="none")},r.enableDrag=function(){l&&(s[l]=o)};var u=n(["transform","WebkitTransform"]);r.setTransform=function(t,e){t.style[u]=e},r.suppressClick=function(){window.addEventListener("click",i,!0),window.setTimeout(function(){window.removeEventListener("click",i,!0)},0)},r.mousePos=function(t,e){var r=t.getBoundingClientRect();return e=e.touches?e.touches[0]:e,new a(e.clientX-r.left-t.clientLeft,e.clientY-r.top-t.clientTop)},r.touchPos=function(t,e){for(var r=t.getBoundingClientRect(),n=[],i=0;i<e.touches.length;i++)n.push(new a(e.touches[i].clientX-r.left-t.clientLeft,e.touches[i].clientY-r.top-t.clientTop));return n}},{"point-geometry":484}],429:[function(t,e,r){"use strict";var n=t("webworkify");e.exports=function(){return new n(t("../../source/worker"))}},{"../../source/worker":373,webworkify:564}],430:[function(t,e,r){"use strict";function n(t,e){return e.area-t.area}function i(t){for(var e,r,n=0,i=0,a=t.length,o=a-1;i<a;o=i++)e=t[i],r=t[o],n+=(r.x-e.x)*(e.y+r.y);return n}var a=t("quickselect");e.exports=function(t,e){var r=t.length;if(r<=1)return[t];for(var o,s,l=[],u=0;u<r;u++){var c=i(t[u]);0!==c&&(t[u].area=Math.abs(c),void 0===s&&(s=c<0),s===c<0?(o&&l.push(o),o=[t[u]]):o.push(t[u]))}if(o&&l.push(o),e>1)for(var h=0;h<l.length;h++)l[h].length<=e||(a(l[h],e,1,l[h].length-1,n),l[h]=l[h].slice(0,e));return l}},{quickselect:493}],431:[function(t,e,r){"use strict";e.exports={API_URL:"https://api.mapbox.com",REQUIRE_ACCESS_TOKEN:!0}},{}],432:[function(t,e,r){"use strict";function n(t){this._stringToNumber={},this._numberToString=[];for(var e=0;e<t.length;e++){var r=t[e];this._stringToNumber[r]=e,this._numberToString[e]=r}}var i=t("assert");e.exports=n,n.prototype.encode=function(t){return i(t in this._stringToNumber),this._stringToNumber[t]},n.prototype.decode=function(t){return i(t<this._numberToString.length),this._numberToString[t]}},{assert:47}],433:[function(t,e,r){"use strict";function n(t,e){this.actors=[],this.currentActor=0;for(var r=0;r<t;r++){var n=new o,i=new a(n,e);i.name="Worker "+r,this.actors.push(i)}}var i=t("./util"),a=t("./actor"),o=t("./web_worker");e.exports=n,n.prototype={broadcast:function(t,e,r){r=r||function(){},i.asyncAll(this.actors,function(r,n){r.send(t,e,n)},r)},send:function(t,e,r,n,i){return("number"!=typeof n||isNaN(n))&&(n=this.currentActor=(this.currentActor+1)%this.actors.length),this.actors[n].send(t,e,r,i),n},remove:function(){for(var t=0;t<this.actors.length;t++)this.actors[t].target.terminate();this.actors=[]}}},{"./actor":424,"./util":442,"./web_worker":429}],434:[function(t,e,r){"use strict";var n=t("./util"),i={on:function(t,e){return this._events=this._events||{},this._events[t]=this._events[t]||[],this._events[t].push(e),this},off:function(t,e){if(!t)return delete this._events,this;if(!this.listens(t))return this;if(e){var r=this._events[t].indexOf(e);r>=0&&this._events[t].splice(r,1),this._events[t].length||delete this._events[t]}else delete this._events[t];return this},once:function(t,e){var r=function(n){this.off(t,r),e.call(this,n)}.bind(this);return this.on(t,r),this},fire:function(t,e){if(!this.listens(t))return n.endsWith(t,"error")&&console.error(e&&e.error||e||"Empty error event"),this;e=n.extend({},e),n.extend(e,{type:t,target:this});for(var r=this._events[t].slice(),i=0;i<r.length;i++)r[i].call(this,e);return this},listens:function(t){return!(!this._events||!this._events[t])}};e.exports=i},{"./util":442}],435:[function(t,e,r){"use strict";function n(t,e){this.stacks=t.readFields(i,[],e)}function i(t,e,r){if(1===t){var n=r.readMessage(a,{glyphs:{}});e.push(n)}}function a(t,e,r){if(1===t)e.name=r.readString();else if(2===t)e.range=r.readString();else if(3===t){var n=r.readMessage(o,{});e.glyphs[n.id]=n}}function o(t,e,r){1===t?e.id=r.readVarint():2===t?e.bitmap=r.readBytes():3===t?e.width=r.readVarint():4===t?e.height=r.readVarint():5===t?e.left=r.readSVarint():6===t?e.top=r.readSVarint():7===t&&(e.advance=r.readVarint())}e.exports=n},{}],436:[function(t,e,r){"use strict";function n(t,e,r){return t*(1-r)+e*r}e.exports=n,n.number=n,n.vec2=function(t,e,r){return[n(t[0],e[0],r),n(t[1],e[1],r)]},n.color=function(t,e,r){return[n(t[0],e[0],r),n(t[1],e[1],r),n(t[2],e[2],r),n(t[3],e[3],r)]},n.array=function(t,e,r){return t.map(function(t,i){return n(t,e[i],r)})}},{}],437:[function(t,e,r){"use strict";function n(t,e,r){for(var n=0;n<t.length;n++)for(var i=t[n],a=0;a<e.length;a++)for(var o=e[a],s=0;s<o.length;s++){var l=o[s];if(d(i,l))return!0;if(c(l,i,r))return!0}return!1}function i(t,e){if(1===t.length&&1===t[0].length)return f(e,t[0][0]);for(var r=0;r<e.length;r++)for(var n=e[r],i=0;i<n.length;i++)if(f(t,n[i]))return!0;for(var a=0;a<t.length;a++){for(var o=t[a],l=0;l<o.length;l++)if(f(e,o[l]))return!0;for(var u=0;u<e.length;u++)if(s(o,e[u]))return!0}return!1}function a(t,e,r){for(var n=0;n<e.length;n++)for(var i=e[n],a=0;a<t.length;a++){var s=t[a];if(s.length>=3)for(var l=0;l<i.length;l++)if(d(s,i[l]))return!0;if(o(s,i,r))return!0}return!1}function o(t,e,r){if(t.length>1){if(s(t,e))return!0;for(var n=0;n<e.length;n++)if(c(e[n],t,r))return!0}for(var i=0;i<t.length;i++)if(c(t[i],e,r))return!0;return!1}function s(t,e){for(var r=0;r<t.length-1;r++)for(var n=t[r],i=t[r+1],a=0;a<e.length-1;a++){var o=e[a],s=e[a+1];if(u(n,i,o,s))return!0}return!1}function l(t,e,r){return(r.y-t.y)*(e.x-t.x)>(e.y-t.y)*(r.x-t.x)}function u(t,e,r,n){return l(t,r,n)!==l(e,r,n)&&l(t,e,r)!==l(t,e,n)}function c(t,e,r){var n=r*r;if(1===e.length)return t.distSqr(e[0])<n;for(var i=1;i<e.length;i++){if(h(t,e[i-1],e[i])<n)return!0}return!1}function h(t,e,r){var n=e.distSqr(r);if(0===n)return t.distSqr(e);var i=((t.x-e.x)*(r.x-e.x)+(t.y-e.y)*(r.y-e.y))/n;return i<0?t.distSqr(e):i>1?t.distSqr(r):t.distSqr(r.sub(e)._mult(i)._add(e))}function f(t,e){for(var r,n,i,a=!1,o=0;o<t.length;o++){r=t[o];for(var s=0,l=r.length-1;s<r.length;l=s++)n=r[s],i=r[l],n.y>e.y!=i.y>e.y&&e.x<(i.x-n.x)*(e.y-n.y)/(i.y-n.y)+n.x&&(a=!a)}return a}function d(t,e){for(var r=!1,n=0,i=t.length-1;n<t.length;i=n++){var a=t[n],o=t[i];a.y>e.y!=o.y>e.y&&e.x<(o.x-a.x)*(e.y-a.y)/(o.y-a.y)+a.x&&(r=!r)}return r}e.exports={multiPolygonIntersectsBufferedMultiPoint:n,multiPolygonIntersectsMultiPolygon:i,multiPolygonIntersectsBufferedMultiLine:a}},{}],438:[function(t,e,r){"use strict";function n(t,e){this.max=t,this.onRemove=e,this.reset()}e.exports=n,n.prototype.reset=function(){for(var t in this.data)this.onRemove(this.data[t]);return this.data={},this.order=[],this},n.prototype.add=function(t,e){if(this.has(t))this.order.splice(this.order.indexOf(t),1),this.data[t]=e,this.order.push(t);else if(this.data[t]=e,this.order.push(t),this.order.length>this.max){var r=this.get(this.order[0]);r&&this.onRemove(r)}return this},n.prototype.has=function(t){return t in this.data},n.prototype.keys=function(){return this.order},n.prototype.get=function(t){if(!this.has(t))return null;var e=this.data[t];return delete this.data[t],this.order.splice(this.order.indexOf(t),1),e},n.prototype.setMaxSize=function(t){for(this.max=t;this.order.length>this.max;){var e=this.get(this.order[0]);e&&this.onRemove(e)}return this}},{}],439:[function(t,e,r){"use strict";function n(t,e,r){if(!(r=r||o.ACCESS_TOKEN)&&o.REQUIRE_ACCESS_TOKEN)throw new Error("An API access token is required to use Mapbox GL. See https://www.mapbox.com/developers/api/#access-tokens");if(t=t.replace(/^mapbox:\/\//,o.API_URL+e),
t+=-1!==t.indexOf("?")?"&access_token=":"?access_token=",o.REQUIRE_ACCESS_TOKEN){if("s"===r[0])throw new Error("Use a public access token (pk.*) with Mapbox GL JS, not a secret access token (sk.*). See https://www.mapbox.com/developers/api/#access-tokens");t+=r}return t}function i(t){return t?"?"+t:""}function a(t){return t.access_token&&"tk."===t.access_token.slice(0,3)?u.extend({},t,{access_token:o.ACCESS_TOKEN}):t}var o=t("./config"),s=t("./browser"),l=t("url"),u=t("./util");e.exports.normalizeStyleURL=function(t,e){var r=l.parse(t);return"mapbox:"!==r.protocol?t:n("mapbox:/"+r.pathname+i(r.query),"/styles/v1/",e)},e.exports.normalizeSourceURL=function(t,e){return"mapbox:"!==l.parse(t).protocol?t:n(t+".json","/v4/",e)+"&secure"},e.exports.normalizeGlyphsURL=function(t,e){var r=l.parse(t);return"mapbox:"!==r.protocol?t:n("mapbox://"+r.pathname.split("/")[1]+"/{fontstack}/{range}.pbf"+i(r.query),"/fonts/v1/",e)},e.exports.normalizeSpriteURL=function(t,e,r,a){var o=l.parse(t);return"mapbox:"!==o.protocol?(o.pathname+=e+r,l.format(o)):n("mapbox:/"+o.pathname+"/sprite"+e+r+i(o.query),"/styles/v1/",a)},e.exports.normalizeTileURL=function(t,e,r){var n=l.parse(t,!0);if(!e)return t;if("mapbox:"!==l.parse(e).protocol)return t;var i=s.supportsWebp?".webp":"$1",o=s.devicePixelRatio>=2||512===r?"@2x":"";return l.format({protocol:n.protocol,hostname:n.hostname,pathname:n.pathname.replace(/(\.(?:png|jpg)\d*)/,o+i),query:a(n.query)})}},{"./browser":426,"./config":431,"./util":442,url:545}],440:[function(t,e,r){"use strict";function n(t){function e(){f.apply(this,arguments)}function r(){d.apply(this,arguments),this.members=e.prototype.members}var n=JSON.stringify(t);if(g[n])return g[n];void 0===t.alignment&&(t.alignment=1),e.prototype=Object.create(f.prototype);var s=0,u=0,v=["Uint8"];return e.prototype.members=t.members.map(function(r){r={name:r.name,type:r.type,components:r.components||1},p(r.name.length),p(r.type in m),v.indexOf(r.type)<0&&v.push(r.type);var n=o(r.type);u=Math.max(u,n),r.offset=s=a(s,Math.max(t.alignment,n));for(var i=0;i<r.components;i++)Object.defineProperty(e.prototype,r.name+(1===r.components?"":i),{get:c(r,i),set:h(r,i)});return s+=n*r.components,r}),e.prototype.alignment=t.alignment,e.prototype.size=a(s,Math.max(u,t.alignment)),r.serialize=i,r.prototype=Object.create(d.prototype),r.prototype.StructType=e,r.prototype.bytesPerElement=e.prototype.size,r.prototype.emplaceBack=l(e.prototype.members,e.prototype.size),r.prototype._usedTypes=v,g[n]=r,r}function i(){return{members:this.prototype.StructType.prototype.members,alignment:this.prototype.StructType.prototype.alignment,bytesPerElement:this.prototype.bytesPerElement}}function a(t,e){return Math.ceil(t/e)*e}function o(t){return m[t].BYTES_PER_ELEMENT}function s(t){return t.toLowerCase()}function l(t,e){for(var r=[],n=[],i="var i = this.length;\nthis.resize(this.length + 1);\n",a=0;a<t.length;a++){var l=t[a],u=o(l.type);r.indexOf(u)<0&&(r.push(u),i+="var o"+u.toFixed(0)+" = i * "+(e/u).toFixed(0)+";\n");for(var c=0;c<l.components;c++){var h="v"+n.length,f="o"+u.toFixed(0)+" + "+(l.offset/u+c).toFixed(0);i+="this."+s(l.type)+"["+f+"] = "+h+";\n",n.push(h)}}return i+="return i;",new Function(n,i)}function u(t,e){var r="this._pos"+o(t.type).toFixed(0),n=(t.offset/o(t.type)+e).toFixed(0),i=r+" + "+n;return"this._structArray."+s(t.type)+"["+i+"]"}function c(t,e){return new Function([],"return "+u(t,e)+";")}function h(t,e){return new Function(["x"],u(t,e)+" = x;")}function f(t,e){this._structArray=t,this._pos1=e*this.size,this._pos2=this._pos1/2,this._pos4=this._pos1/4,this._pos8=this._pos1/8}function d(t){void 0!==t?(this.arrayBuffer=t.arrayBuffer,this.length=t.length,this.capacity=this.arrayBuffer.byteLength/this.bytesPerElement,this._refreshViews()):(this.capacity=-1,this.resize(0))}var p=t("assert");e.exports=n;var m={Int8:Int8Array,Uint8:Uint8Array,Uint8Clamped:Uint8ClampedArray,Int16:Int16Array,Uint16:Uint16Array,Int32:Int32Array,Uint32:Uint32Array,Float32:Float32Array,Float64:Float64Array},g={};d.prototype.DEFAULT_CAPACITY=128,d.prototype.RESIZE_MULTIPLIER=5,d.prototype.serialize=function(){return this.trim(),{length:this.length,arrayBuffer:this.arrayBuffer}},d.prototype.get=function(t){return new this.StructType(this,t)},d.prototype.trim=function(){this.length!==this.capacity&&(this.capacity=this.length,this.arrayBuffer=this.arrayBuffer.slice(0,this.length*this.bytesPerElement),this._refreshViews())},d.prototype.resize=function(t){if(this.length=t,t>this.capacity){this.capacity=Math.max(t,Math.floor(this.capacity*this.RESIZE_MULTIPLIER),this.DEFAULT_CAPACITY),this.arrayBuffer=new ArrayBuffer(this.capacity*this.bytesPerElement);var e=this.uint8;this._refreshViews(),e&&this.uint8.set(e)}},d.prototype._refreshViews=function(){for(var t=0;t<this._usedTypes.length;t++){var e=this._usedTypes[t];this[s(e)]=new m[e](this.arrayBuffer)}},d.prototype.toArray=function(t,e){for(var r=[],n=t;n<e;n++){var i=this.get(n);r.push(i)}return r}},{assert:47}],441:[function(t,e,r){"use strict";function n(t,e){return e.replace(/{([^{}]+)}/g,function(e,r){return r in t?t[r]:""})}e.exports=n},{}],442:[function(t,e,r){"use strict";var n=t("unitbezier"),i=t("../geo/coordinate");r.easeCubicInOut=function(t){if(t<=0)return 0;if(t>=1)return 1;var e=t*t,r=e*t;return 4*(t<.5?r:3*(t-e)+r-.75)},r.bezier=function(t,e,r,i){var a=new n(t,e,r,i);return function(t){return a.solve(t)}},r.ease=r.bezier(.25,.1,.25,1),r.clamp=function(t,e,r){return Math.min(r,Math.max(e,t))},r.wrap=function(t,e,r){var n=r-e,i=((t-e)%n+n)%n+e;return i===e?r:i},r.coalesce=function(){for(var t=0;t<arguments.length;t++){var e=arguments[t];if(null!==e&&void 0!==e)return e}},r.asyncAll=function(t,e,r){if(!t.length)return r(null,[]);var n=t.length,i=new Array(t.length),a=null;t.forEach(function(t,o){e(t,function(t,e){t&&(a=t),i[o]=e,0==--n&&r(a,i)})})},r.keysDifference=function(t,e){var r=[];for(var n in t)n in e||r.push(n);return r},r.extend=function(t){for(var e=1;e<arguments.length;e++){var r=arguments[e];for(var n in r)t[n]=r[n]}return t},r.extendAll=function(t,e){for(var r in e)Object.defineProperty(t,r,Object.getOwnPropertyDescriptor(e,r));return t},r.inherit=function(t,e){var n="function"==typeof t?t.prototype:t,i=Object.create(n);return r.extendAll(i,e),i},r.pick=function(t,e){for(var r={},n=0;n<e.length;n++){var i=e[n];i in t&&(r[i]=t[i])}return r};var a=1;r.uniqueId=function(){return a++},r.debounce=function(t,e){var r,n;return function(){n=arguments,clearTimeout(r),r=setTimeout(function(){t.apply(null,n)},e)}},r.bindAll=function(t,e){t.forEach(function(t){e[t]&&(e[t]=e[t].bind(e))})},r.bindHandlers=function(t){for(var e in t)"function"==typeof t[e]&&0===e.indexOf("_on")&&(t[e]=t[e].bind(t))},r.setOptions=function(t,e){t.hasOwnProperty("options")||(t.options=t.options?Object.create(t.options):{});for(var r in e)t.options[r]=e[r];return t.options},r.getCoordinatesCenter=function(t){for(var e=1/0,r=1/0,n=-1/0,a=-1/0,o=0;o<t.length;o++)e=Math.min(e,t[o].column),r=Math.min(r,t[o].row),n=Math.max(n,t[o].column),a=Math.max(a,t[o].row);var s=n-e,l=a-r,u=Math.max(s,l);return new i((e+n)/2,(r+a)/2,0).zoomTo(Math.floor(-Math.log(u)/Math.LN2))},r.endsWith=function(t,e){return-1!==t.indexOf(e,t.length-e.length)},r.startsWith=function(t,e){return 0===t.indexOf(e)},r.mapObject=function(t,e,r){var n={};for(var i in t)n[i]=e.call(r||this,t[i],i,t);return n},r.filterObject=function(t,e,r){var n={};for(var i in t)e.call(r||this,t[i],i,t)&&(n[i]=t[i]);return n},r.deepEqual=function t(e,r){if(Array.isArray(e)){if(!Array.isArray(r)||e.length!==r.length)return!1;for(var n=0;n<e.length;n++)if(!t(e[n],r[n]))return!1;return!0}if("object"==typeof e&&null!==e&&null!==r){if("object"!=typeof r)return!1;if(Object.keys(e).length!==Object.keys(r).length)return!1;for(var i in e)if(!t(e[i],r[i]))return!1;return!0}return e===r},r.clone=function(t){return Array.isArray(t)?t.map(r.clone):"object"==typeof t?r.mapObject(t,r.clone):t},r.arraysIntersect=function(t,e){for(var r=0;r<t.length;r++)if(e.indexOf(t[r])>=0)return!0;return!1};var o={};r.warnOnce=function(t){o[t]||("undefined"!=typeof console&&console.warn(t),o[t]=!0)}},{"../geo/coordinate":338,unitbezier:544}],443:[function(t,e,r){"use strict";function n(t,e,r,n){this._vectorTileFeature=t,t._z=e,t._x=r,t._y=n,this.properties=t.properties,null!=t.id&&(this.id=t.id)}e.exports=n,n.prototype={type:"Feature",get geometry(){return void 0===this._geometry&&(this._geometry=this._vectorTileFeature.toGeoJSON(this._vectorTileFeature._x,this._vectorTileFeature._y,this._vectorTileFeature._z).geometry),this._geometry},set geometry(t){this._geometry=t},toJSON:function(){var t={};for(var e in this)"_geometry"!==e&&"_vectorTileFeature"!==e&&"toJSON"!==e&&(t[e]=this[e]);return t}}},{}],444:[function(t,e,r){e.exports={_args:[[{raw:"mapbox-gl@^0.22.0",scope:null,escapedName:"mapbox-gl",name:"mapbox-gl",rawSpec:"^0.22.0",spec:">=0.22.0 <0.23.0",type:"range"},"/home/etienne/Documents/plotly/plotly.js"]],_from:"mapbox-gl@>=0.22.0 <0.23.0",_id:"mapbox-gl@0.22.1",_inCache:!0,_location:"/mapbox-gl",_nodeVersion:"4.4.5",_npmOperationalInternal:{host:"packages-12-west.internal.npmjs.com",tmp:"tmp/mapbox-gl-0.22.1.tgz_1471549891670_0.8762630566488951"},_npmUser:{name:"lucaswoj",email:"lucas@lucaswoj.com"},_npmVersion:"2.15.5",_phantomChildren:{},_requested:{raw:"mapbox-gl@^0.22.0",scope:null,escapedName:"mapbox-gl",name:"mapbox-gl",rawSpec:"^0.22.0",spec:">=0.22.0 <0.23.0",type:"range"},_requiredBy:["/"],_resolved:"https://registry.npmjs.org/mapbox-gl/-/mapbox-gl-0.22.1.tgz",_shasum:"92a965547d4c2f24c22cbc487eeda48694cb627a",_shrinkwrap:null,_spec:"mapbox-gl@^0.22.0",_where:"/home/etienne/Documents/plotly/plotly.js",browser:{"./js/util/ajax.js":"./js/util/browser/ajax.js","./js/util/browser.js":"./js/util/browser/browser.js","./js/util/canvas.js":"./js/util/browser/canvas.js","./js/util/dom.js":"./js/util/browser/dom.js","./js/util/web_worker.js":"./js/util/browser/web_worker.js"},bugs:{url:"https://github.com/mapbox/mapbox-gl-js/issues"},dependencies:{csscolorparser:"^1.0.2",earcut:"^2.0.3","feature-filter":"^2.2.0","geojson-rewind":"^0.1.0","geojson-vt":"^2.4.0","gl-matrix":"^2.3.1","grid-index":"^1.0.0","mapbox-gl-function":"^1.2.1","mapbox-gl-shaders":"github:mapbox/mapbox-gl-shaders#de2ab007455aa2587c552694c68583f94c9f2747","mapbox-gl-style-spec":"github:mapbox/mapbox-gl-style-spec#83b1a3e5837d785af582efd5ed1a212f2df6a4ae","mapbox-gl-supported":"^1.2.0",pbf:"^1.3.2",pngjs:"^2.2.0","point-geometry":"^0.0.0",quickselect:"^1.0.0",request:"^2.39.0","resolve-url":"^0.2.1","shelf-pack":"^1.0.0",supercluster:"^2.0.1",unassertify:"^2.0.0",unitbezier:"^0.0.0","vector-tile":"^1.3.0","vt-pbf":"^2.0.2",webworkify:"^1.3.0","whoots-js":"^2.0.0"},description:"A WebGL interactive maps library",devDependencies:{"babel-preset-react":"^6.11.1",babelify:"^7.3.0",benchmark:"~2.1.0",browserify:"^13.0.0",clipboard:"^1.5.12","concat-stream":"1.5.1",coveralls:"^2.11.8",doctrine:"^1.2.1",documentation:"https://github.com/documentationjs/documentation/archive/bb41619c734e59ef3fbc3648610032efcfdaaace.tar.gz","documentation-theme-utils":"3.0.0",envify:"^3.4.0",eslint:"^2.5.3","eslint-config-mourner":"^2.0.0","eslint-plugin-html":"^1.5.1",gl:"^4.0.1",handlebars:"4.0.5","highlight.js":"9.3.0",istanbul:"^0.4.2","json-loader":"^0.5.4",lodash:"^4.13.1","mapbox-gl-test-suite":"github:mapbox/mapbox-gl-test-suite#7babab52fb02788ebbc38384139bf350e8e38552","memory-fs":"^0.3.0",minifyify:"^7.0.1","npm-run-all":"^3.0.0",nyc:"6.4.0",proxyquire:"^1.7.9",remark:"4.2.2","remark-html":"3.0.0",sinon:"^1.15.4",st:"^1.2.0",tap:"^5.7.0","transform-loader":"^0.2.3","unist-util-visit":"1.1.0",vinyl:"1.1.1","vinyl-fs":"2.4.3",watchify:"^3.7.0",webpack:"^1.13.1","webworkify-webpack":"^1.1.3"},directories:{},dist:{shasum:"92a965547d4c2f24c22cbc487eeda48694cb627a",tarball:"https://registry.npmjs.org/mapbox-gl/-/mapbox-gl-0.22.1.tgz"},engines:{node:">=4.0.0"},gitHead:"13a9015341f0602ccb55c98c53079838ad4b70b5",homepage:"https://github.com/mapbox/mapbox-gl-js#readme",license:"BSD-3-Clause",main:"js/mapbox-gl.js",maintainers:[{name:"aaronlidman",email:"aaronlidman@gmail.com"},{name:"ajashton",email:"aj.ashton@gmail.com"},{name:"ansis",email:"ansis.brammanis@gmail.com"},{name:"bergwerkgis",email:"wb@bergwerk-gis.at"},{name:"bhousel",email:"bryan@mapbox.com"},{name:"bsudekum",email:"bobby@mapbox.com"},{name:"camilleanne",email:"camille@mapbox.com"},{name:"dnomadb",email:"damon@mapbox.com"},{name:"dthompson",email:"dthompson@gmail.com"},{name:"emilymcafee",email:"emily@mapbox.com"},{name:"flippmoke",email:"flippmoke@gmail.com"},{name:"freenerd",email:"spam@freenerd.de"},{name:"gretacb",email:"carol@mapbox.com"},{name:"ian29",email:"ian.villeda@gmail.com"},{name:"ianshward",email:"ian@mapbox.com"},{name:"ingalls",email:"nicholas.ingalls@gmail.com"},{name:"jfirebaugh",email:"john.firebaugh@gmail.com"},{name:"jrpruit1",email:"jake@jakepruitt.com"},{name:"karenzshea",email:"karen@mapbox.com"},{name:"kkaefer",email:"kkaefer@gmail.com"},{name:"lbud",email:"lauren@mapbox.com"},{name:"lucaswoj",email:"lucas@lucaswoj.com"},{name:"lxbarth",email:"alex@mapbox.com"},{name:"lyzidiamond",email:"lyzi@mapbox.com"},{name:"mapbox-admin",email:"accounts@mapbox.com"},{name:"mateov",email:"matt@mapbox.com"},{name:"mcwhittemore",email:"mcwhittemore@gmail.com"},{name:"miccolis",email:"jeff@miccolis.net"},{name:"mikemorris",email:"michael.patrick.morris@gmail.com"},{name:"morganherlocker",email:"morgan.herlocker@gmail.com"},{name:"mourner",email:"agafonkin@gmail.com"},{name:"nickidlugash",email:"nicki@mapbox.com"},{name:"rclark",email:"ryan.clark.j@gmail.com"},{name:"samanbb",email:"saman@mapbox.com"},{name:"sbma44",email:"tlee@mapbox.com"},{name:"scothis",email:"scothis@gmail.com"},{name:"sgillies",email:"sean@mapbox.com"},{name:"springmeyer",email:"dane@mapbox.com"},{name:"themarex",email:"patrick@mapbox.com"},{name:"tmcw",email:"tom@macwright.org"},{name:"tristen",email:"tristen.brown@gmail.com"},{name:"willwhite",email:"will@mapbox.com"},{name:"yhahn",email:"young@mapbox.com"}],name:"mapbox-gl",optionalDependencies:{},readme:"ERROR: No README data found!",repository:{type:"git",url:"git://github.com/mapbox/mapbox-gl-js.git"},scripts:{build:"npm run build-docs # invoked by publisher when publishing docs on the mb-pages branch","build-dev":"browserify js/mapbox-gl.js --debug --standalone mapboxgl > dist/mapbox-gl-dev.js && tap --no-coverage test/build/dev.test.js","build-docs":"documentation build --github --format html -c documentation.yml --theme ./docs/_theme --output docs/api/","build-min":"browserify js/mapbox-gl.js --debug -t unassertify --plugin [minifyify --map mapbox-gl.js.map --output dist/mapbox-gl.js.map] --standalone mapboxgl > dist/mapbox-gl.js && tap --no-coverage test/build/min.test.js","build-token":"browserify debug/access-token-src.js --debug -t envify > debug/access-token.js",lint:"eslint --ignore-path .gitignore js test bench docs/_posts/examples/*.html","open-changed-examples":"git diff --name-only mb-pages HEAD -- docs/_posts/examples/*.html | awk '{print \"http://127.0.0.1:4000/mapbox-gl-js/example/\" substr($0,33,length($0)-37)}' | xargs open",start:"run-p build-token watch-dev watch-bench start-server","start-bench":"run-p build-token watch-bench start-server","start-debug":"run-p build-token watch-dev start-server","start-docs":"npm run build-min && npm run build-docs && jekyll serve -w","start-server":"st --no-cache --localhost --port 9966 --index index.html .",test:"npm run lint && tap --reporter dot test/js/*/*.js test/build/webpack.test.js","test-suite":"node test/render.test.js && node test/query.test.js","watch-bench":"node bench/download-data.js && watchify bench/index.js --plugin [minifyify --no-map] -t [babelify --presets react] -t unassertify -t envify -o bench/bench.js -v","watch-dev":"watchify js/mapbox-gl.js --debug --standalone mapboxgl -o dist/mapbox-gl-dev.js -v"},version:"0.22.1"}},{}],445:[function(t,e,r){"use strict";function n(t,e,r){for(var n=new Array(t),i=0;i<t;++i)n[i]=0,i===e&&(n[i]+=.5),i===r&&(n[i]+=.5);return n}function i(t,e){if(0===e||e===(1<<t+1)-1)return[];for(var r=[],i=[],a=0;a<=t;++a)if(e&1<<a){r.push(n(t,a-1,a-1)),i.push(null);for(var s=0;s<=t;++s)~e&1<<s&&(r.push(n(t,a-1,s-1)),i.push([a,s]))}var l=o(r),u=[];t:for(var a=0;a<l.length;++a){for(var c=l[a],h=[],s=0;s<c.length;++s){if(!i[c[s]])continue t;h.push(i[c[s]].slice())}u.push(h)}return u}function a(t){for(var e=1<<t+1,r=new Array(e),n=0;n<e;++n)r[n]=i(t,n);return r}e.exports=a;var o=t("convex-hull")},{"convex-hull":103}],446:[function(t,e,r){function n(t,e,r){var n=e[0],i=e[1],a=e[2],o=e[3];return t[0]=r[0]*n+r[4]*i+r[8]*a+r[12]*o,t[1]=r[1]*n+r[5]*i+r[9]*a+r[13]*o,t[2]=r[2]*n+r[6]*i+r[10]*a+r[14]*o,t[3]=r[3]*n+r[7]*i+r[11]*a+r[15]*o,t}function i(t,e){t[0][0]=e[0],t[0][1]=e[1],t[0][2]=e[2],t[1][0]=e[4],t[1][1]=e[5],t[1][2]=e[6],t[2][0]=e[8],t[2][1]=e[9],t[2][2]=e[10]}function a(t,e,r,n,i){t[0]=e[0]*n+r[0]*i,t[1]=e[1]*n+r[1]*i,t[2]=e[2]*n+r[2]*i}var o=t("./normalize"),s=t("gl-mat4/create"),l=t("gl-mat4/clone"),u=t("gl-mat4/determinant"),c=t("gl-mat4/invert"),h=t("gl-mat4/transpose"),f={length:t("gl-vec3/length"),normalize:t("gl-vec3/normalize"),dot:t("gl-vec3/dot"),cross:t("gl-vec3/cross")},d=s(),p=s(),m=[0,0,0,0],g=[[0,0,0],[0,0,0],[0,0,0]],v=[0,0,0];e.exports=function(t,e,r,s,y,b){if(e||(e=[0,0,0]),r||(r=[0,0,0]),s||(s=[0,0,0]),y||(y=[0,0,0,1]),b||(b=[0,0,0,1]),!o(d,t))return!1;if(l(p,d),p[3]=0,p[7]=0,p[11]=0,p[15]=1,Math.abs(u(p)<1e-8))return!1;var x=d[3],_=d[7],w=d[11],M=d[12],k=d[13],A=d[14],T=d[15];if(0!==x||0!==_||0!==w){m[0]=x,m[1]=_,m[2]=w,m[3]=T;if(!c(p,p))return!1;h(p,p),n(y,m,p)}else y[0]=y[1]=y[2]=0,y[3]=1;if(e[0]=M,e[1]=k,e[2]=A,i(g,d),r[0]=f.length(g[0]),f.normalize(g[0],g[0]),s[0]=f.dot(g[0],g[1]),a(g[1],g[1],g[0],1,-s[0]),r[1]=f.length(g[1]),f.normalize(g[1],g[1]),s[0]/=r[1],s[1]=f.dot(g[0],g[2]),a(g[2],g[2],g[0],1,-s[1]),s[2]=f.dot(g[1],g[2]),a(g[2],g[2],g[1],1,-s[2]),r[2]=f.length(g[2]),f.normalize(g[2],g[2]),s[1]/=r[2],s[2]/=r[2],f.cross(v,g[1],g[2]),f.dot(g[0],v)<0)for(var S=0;S<3;S++)r[S]*=-1,g[S][0]*=-1,g[S][1]*=-1,g[S][2]*=-1;return b[0]=.5*Math.sqrt(Math.max(1+g[0][0]-g[1][1]-g[2][2],0)),b[1]=.5*Math.sqrt(Math.max(1-g[0][0]+g[1][1]-g[2][2],0)),b[2]=.5*Math.sqrt(Math.max(1-g[0][0]-g[1][1]+g[2][2],0)),b[3]=.5*Math.sqrt(Math.max(1+g[0][0]+g[1][1]+g[2][2],0)),g[2][1]>g[1][2]&&(b[0]=-b[0]),g[0][2]>g[2][0]&&(b[1]=-b[1]),g[1][0]>g[0][1]&&(b[2]=-b[2]),!0}},{"./normalize":447,"gl-mat4/clone":175,"gl-mat4/create":176,"gl-mat4/determinant":177,"gl-mat4/invert":181,"gl-mat4/transpose":191,"gl-vec3/cross":272,"gl-vec3/dot":273,"gl-vec3/length":274,"gl-vec3/normalize":276}],447:[function(t,e,r){e.exports=function(t,e){var r=e[15];if(0===r)return!1;for(var n=1/r,i=0;i<16;i++)t[i]=e[i]*n;return!0}},{}],448:[function(t,e,r){function n(t,e,r,n){if(0===c(e)||0===c(r))return!1;var i=u(e,f.translate,f.scale,f.skew,f.perspective,f.quaternion),a=u(r,d.translate,d.scale,d.skew,d.perspective,d.quaternion);return!(!i||!a)&&(s(p.translate,f.translate,d.translate,n),s(p.skew,f.skew,d.skew,n),s(p.scale,f.scale,d.scale,n),s(p.perspective,f.perspective,d.perspective,n),h(p.quaternion,f.quaternion,d.quaternion,n),l(t,p.translate,p.scale,p.skew,p.perspective,p.quaternion),!0)}function i(){return{translate:a(),scale:a(1),skew:a(),perspective:o(),quaternion:o()}}function a(t){return[t||0,t||0,t||0]}function o(){return[0,0,0,1]}var s=t("gl-vec3/lerp"),l=t("mat4-recompose"),u=t("mat4-decompose"),c=t("gl-mat4/determinant"),h=t("quat-slerp"),f=i(),d=i(),p=i();e.exports=n},{"gl-mat4/determinant":177,"gl-vec3/lerp":275,"mat4-decompose":446,"mat4-recompose":449,"quat-slerp":489}],449:[function(t,e,r){var n={identity:t("gl-mat4/identity"),translate:t("gl-mat4/translate"),multiply:t("gl-mat4/multiply"),create:t("gl-mat4/create"),scale:t("gl-mat4/scale"),fromRotationTranslation:t("gl-mat4/fromRotationTranslation")},i=(n.create(),n.create());e.exports=function(t,e,r,a,o,s){return n.identity(t),n.fromRotationTranslation(t,s,e),t[3]=o[0],t[7]=o[1],t[11]=o[2],t[15]=o[3],n.identity(i),0!==a[2]&&(i[9]=a[2],n.multiply(t,t,i)),0!==a[1]&&(i[9]=0,i[8]=a[1],n.multiply(t,t,i)),0!==a[0]&&(i[8]=0,i[4]=a[0],n.multiply(t,t,i)),n.scale(t,t,r),t}},{"gl-mat4/create":176,"gl-mat4/fromRotationTranslation":179,"gl-mat4/identity":180,"gl-mat4/multiply":183,"gl-mat4/scale":189,"gl-mat4/translate":190}],450:[function(t,e,r){"use strict";function n(t){this._components=t.slice(),this._time=[0],this.prevMatrix=t.slice(),this.nextMatrix=t.slice(),this.computedMatrix=t.slice(),this.computedInverse=t.slice(),this.computedEye=[0,0,0],this.computedUp=[0,0,0],this.computedCenter=[0,0,0],this.computedRadius=[0],this._limits=[-1/0,1/0]}function i(t){return t=t||{},new n(t.matrix||[1,0,0,0,0,1,0,0,0,0,1,0,0,0,0,1])}var a=t("binary-search-bounds"),o=t("mat4-interpolate"),s=t("gl-mat4/invert"),l=t("gl-mat4/rotateX"),u=t("gl-mat4/rotateY"),c=t("gl-mat4/rotateZ"),h=t("gl-mat4/lookAt"),f=t("gl-mat4/translate"),d=(t("gl-mat4/scale"),t("gl-vec3/normalize")),p=[0,0,0];e.exports=i;var m=n.prototype;m.recalcMatrix=function(t){var e=this._time,r=a.le(e,t),n=this.computedMatrix;if(!(r<0)){var i=this._components;if(r===e.length-1)for(var l=16*r,u=0;u<16;++u)n[u]=i[l++];else{for(var c=e[r+1]-e[r],l=16*r,h=this.prevMatrix,f=!0,u=0;u<16;++u)h[u]=i[l++];for(var p=this.nextMatrix,u=0;u<16;++u)p[u]=i[l++],f=f&&h[u]===p[u];if(c<1e-6||f)for(var u=0;u<16;++u)n[u]=h[u];else o(n,h,p,(t-e[r])/c)}var m=this.computedUp;m[0]=n[1],m[1]=n[5],m[2]=n[9],d(m,m);var g=this.computedInverse;s(g,n);var v=this.computedEye,y=g[15];v[0]=g[12]/y,v[1]=g[13]/y,v[2]=g[14]/y;for(var b=this.computedCenter,x=Math.exp(this.computedRadius[0]),u=0;u<3;++u)b[u]=v[u]-n[2+4*u]*x}},m.idle=function(t){if(!(t<this.lastT())){for(var e=this._components,r=e.length-16,n=0;n<16;++n)e.push(e[r++]);this._time.push(t)}},m.flush=function(t){var e=a.gt(this._time,t)-2;e<0||(this._time.splice(0,e),this._components.splice(0,16*e))},m.lastT=function(){return this._time[this._time.length-1]},m.lookAt=function(t,e,r,n){this.recalcMatrix(t),e=e||this.computedEye,r=r||p,n=n||this.computedUp,this.setMatrix(t,h(this.computedMatrix,e,r,n));for(var i=0,a=0;a<3;++a)i+=Math.pow(r[a]-e[a],2);i=Math.log(Math.sqrt(i)),this.computedRadius[0]=i},m.rotate=function(t,e,r,n){this.recalcMatrix(t);var i=this.computedInverse;e&&u(i,i,e),r&&l(i,i,r),n&&c(i,i,n),this.setMatrix(t,s(this.computedMatrix,i))};var g=[0,0,0];m.pan=function(t,e,r,n){g[0]=-(e||0),g[1]=-(r||0),g[2]=-(n||0),this.recalcMatrix(t);var i=this.computedInverse;f(i,i,g),this.setMatrix(t,s(i,i))},m.translate=function(t,e,r,n){g[0]=e||0,g[1]=r||0,g[2]=n||0,this.recalcMatrix(t);var i=this.computedMatrix;f(i,i,g),this.setMatrix(t,i)},m.setMatrix=function(t,e){if(!(t<this.lastT())){this._time.push(t);for(var r=0;r<16;++r)this._components.push(e[r])}},m.setDistance=function(t,e){this.computedRadius[0]=e},m.setDistanceLimits=function(t,e){var r=this._limits;r[0]=t,r[1]=e},m.getDistanceLimits=function(t){var e=this._limits;return t?(t[0]=e[0],t[1]=e[1],t):e}},{"binary-search-bounds":66,"gl-mat4/invert":181,"gl-mat4/lookAt":182,"gl-mat4/rotateX":186,"gl-mat4/rotateY":187,"gl-mat4/rotateZ":188,"gl-mat4/scale":189,"gl-mat4/translate":190,"gl-vec3/normalize":276,"mat4-interpolate":448}],451:[function(t,e,r){"use strict";function n(t){var e=t.length;if(e<3){for(var r=new Array(e),n=0;n<e;++n)r[n]=n;return 2===e&&t[0][0]===t[1][0]&&t[0][1]===t[1][1]?[0]:r}for(var a=new Array(e),n=0;n<e;++n)a[n]=n;a.sort(function(e,r){var n=t[e][0]-t[r][0];return n||t[e][1]-t[r][1]});for(var o=[a[0],a[1]],s=[a[0],a[1]],n=2;n<e;++n){for(var l=a[n],u=t[l],c=o.length;c>1&&i(t[o[c-2]],t[o[c-1]],u)<=0;)c-=1,o.pop();for(o.push(l),c=s.length;c>1&&i(t[s[c-2]],t[s[c-1]],u)>=0;)c-=1,s.pop();s.push(l)}for(var r=new Array(s.length+o.length-2),h=0,n=0,f=o.length;n<f;++n)r[h++]=o[n];for(var d=s.length-2;d>0;--d)r[h++]=s[d];return r}e.exports=n;var i=t("robust-orientation")[3]},{"robust-orientation":508}],452:[function(t,e,r){"use strict";function n(t,e){function r(t){var e=!1;return"altKey"in t&&(e=e||t.altKey!==g.alt,g.alt=!!t.altKey),"shiftKey"in t&&(e=e||t.shiftKey!==g.shift,g.shift=!!t.shiftKey),"ctrlKey"in t&&(e=e||t.ctrlKey!==g.control,g.control=!!t.ctrlKey),"metaKey"in t&&(e=e||t.metaKey!==g.meta,g.meta=!!t.metaKey),e}function n(t,n){var a=i.x(n),o=i.y(n);"buttons"in n&&(t=0|n.buttons),(t!==d||a!==p||o!==m||r(n))&&(d=0|t,p=a||0,m=o||0,e&&e(d,p,m,g))}function a(t){n(0,t)}function o(){(d||p||m||g.shift||g.alt||g.meta||g.control)&&(p=m=0,d=0,g.shift=g.alt=g.control=g.meta=!1,e&&e(0,0,0,g))}function s(t){r(t)&&e&&e(d,p,m,g)}function l(t){0===i.buttons(t)?n(0,t):n(d,t)}function u(t){n(d|i.buttons(t),t)}function c(t){n(d&~i.buttons(t),t)}function h(){v||(v=!0,t.addEventListener("mousemove",l),t.addEventListener("mousedown",u),t.addEventListener("mouseup",c),t.addEventListener("mouseleave",a),t.addEventListener("mouseenter",a),t.addEventListener("mouseout",a),t.addEventListener("mouseover",a),t.addEventListener("blur",o),t.addEventListener("keyup",s),t.addEventListener("keydown",s),t.addEventListener("keypress",s),t!==window&&(window.addEventListener("blur",o),window.addEventListener("keyup",s),window.addEventListener("keydown",s),window.addEventListener("keypress",s)))}function f(){v&&(v=!1,t.removeEventListener("mousemove",l),t.removeEventListener("mousedown",u),t.removeEventListener("mouseup",c),t.removeEventListener("mouseleave",a),t.removeEventListener("mouseenter",a),t.removeEventListener("mouseout",a),t.removeEventListener("mouseover",a),t.removeEventListener("blur",o),t.removeEventListener("keyup",s),t.removeEventListener("keydown",s),t.removeEventListener("keypress",s),t!==window&&(window.removeEventListener("blur",o),window.removeEventListener("keyup",s),window.removeEventListener("keydown",s),window.removeEventListener("keypress",s)))}e||(e=t,t=window);var d=0,p=0,m=0,g={shift:!1,alt:!1,control:!1,meta:!1},v=!1;h();var y={element:t};return Object.defineProperties(y,{enabled:{get:function(){return v},set:function(t){t?h():f()},enumerable:!0},buttons:{get:function(){return d},enumerable:!0},x:{get:function(){return p},enumerable:!0},y:{get:function(){return m},enumerable:!0},mods:{get:function(){return g},enumerable:!0}}),y}e.exports=n;var i=t("mouse-event")},{"mouse-event":454}],453:[function(t,e,r){function n(t,e,r){e=e||t.currentTarget||t.srcElement,Array.isArray(r)||(r=[0,0]);var n=t.clientX||0,a=t.clientY||0,o=i(e);return r[0]=n-o.left,r[1]=a-o.top,r}function i(t){return t===window||t===document||t===document.body?a:t.getBoundingClientRect()}var a={left:0,top:0};e.exports=n},{}],454:[function(t,e,r){"use strict";function n(t){if("object"==typeof t){if("buttons"in t)return t.buttons;if("which"in t){var e=t.which;if(2===e)return 4;if(3===e)return 2;if(e>0)return 1<<e-1}else if("button"in t){var e=t.button;if(1===e)return 4;if(2===e)return 2;if(e>=0)return 1<<e}}return 0}function i(t){return t.target||t.srcElement||window}function a(t){if("object"==typeof t){if("offsetX"in t)return t.offsetX;var e=i(t),r=e.getBoundingClientRect();return t.clientX-r.left}return 0}function o(t){if("object"==typeof t){if("offsetY"in t)return t.offsetY;var e=i(t),r=e.getBoundingClientRect();return t.clientY-r.top}return 0}r.buttons=n,r.element=i,r.x=a,r.y=o},{}],455:[function(t,e,r){"use strict";function n(t,e,r){"function"==typeof t&&(r=!!e,e=t,t=window);var n=i("ex",t),a=function(t){r&&t.preventDefault();var i=t.deltaX||0,a=t.deltaY||0,o=t.deltaZ||0,s=t.deltaMode,l=1;switch(s){case 1:l=n;break;case 2:l=window.innerHeight}if(i*=l,a*=l,o*=l,i||a||o)return e(i,a,o,t)};return t.addEventListener("wheel",a),a}var i=t("to-px");e.exports=n},{"to-px":535}],456:[function(t,e,r){"use strict";function n(t){return"a"+t}function i(t){return"d"+t}function a(t,e){return"c"+t+"_"+e}function o(t){return"s"+t}function s(t,e){return"t"+t+"_"+e}function l(t){return"o"+t}function u(t){return"x"+t}function c(t){return"p"+t}function h(t,e){return"d"+t+"_"+e}function f(t){return"i"+t}function d(t,e){return"u"+t+"_"+e}function p(t){return"b"+t}function m(t){return"y"+t}function g(t){return"e"+t}function v(t){return"v"+t}function y(t,e,r){for(var n=0,i=0;i<t;++i)e&1<<i&&(n|=1<<r[i]);return n}function b(t,e,r,b,x,E){function L(t,e){j.push("for(",f(x[t]),"=",e,";",f(x[t]),"<",o(x[t]),";","++",f(x[t]),"){")}function C(t){for(var e=0;e<O;++e)j.push(c(e),"+=",d(e,x[t]),";");j.push("}")}function I(t){for(var e=t-1;e>=0;--e)L(e,0);for(var r=[],e=0;e<O;++e)E[e]?r.push(i(e)+".get("+c(e)+")"):r.push(i(e)+"["+c(e)+"]");for(var e=0;e<b;++e)r.push(u(e));j.push(M,"[",T,"++]=phase(",r.join(),");");for(var e=0;e<t;++e)C(e);for(var n=0;n<O;++n)j.push(c(n),"+=",d(n,x[t]),";")}function z(t){for(var e=0;e<O;++e)E[e]?j.push(a(e,0),"=",i(e),".get(",c(e),");"):j.push(a(e,0),"=",i(e),"[",c(e),"];");for(var r=[],e=0;e<O;++e)r.push(a(e,0));for(var e=0;e<b;++e)r.push(u(e));j.push(p(0),"=",M,"[",T,"]=phase(",r.join(),");");for(var n=1;n<1<<R;++n)j.push(p(n),"=",M,"[",T,"+",g(n),"];");for(var o=[],n=1;n<1<<R;++n)o.push("("+p(0)+"!=="+p(n)+")");j.push("if(",o.join("||"),"){");for(var s=[],e=0;e<R;++e)s.push(f(e));for(var e=0;e<O;++e){s.push(a(e,0));for(var n=1;n<1<<R;++n)E[e]?j.push(a(e,n),"=",i(e),".get(",c(e),"+",h(e,n),");"):j.push(a(e,n),"=",i(e),"[",c(e),"+",h(e,n),"];"),s.push(a(e,n))}for(var e=0;e<1<<R;++e)s.push(p(e));for(var e=0;e<b;++e)s.push(u(e));j.push("vertex(",s.join(),");",v(0),"=",w,"[",T,"]=",k,"++;");for(var l=(1<<R)-1,d=p(l),n=0;n<R;++n)if(0==(t&~(1<<n))){for(var m=l^1<<n,y=p(m),x=[],_=m;_>0;_=_-1&m)x.push(w+"["+T+"+"+g(_)+"]");x.push(v(0));for(var _=0;_<O;++_)1&n?x.push(a(_,l),a(_,m)):x.push(a(_,m),a(_,l));1&n?x.push(d,y):x.push(y,d);for(var _=0;_<b;++_)x.push(u(_));j.push("if(",d,"!==",y,"){","face(",x.join(),")}")}j.push("}",T,"+=1;")}function D(){for(var t=1;t<1<<R;++t)j.push(S,"=",g(t),";",g(t),"=",m(t),";",m(t),"=",S,";")}function P(t,e){if(t<0)return void z(e);I(t),j.push("if(",o(x[t]),">0){",f(x[t]),"=1;"),P(t-1,e|1<<x[t]);for(var r=0;r<O;++r)j.push(c(r),"+=",d(r,x[t]),";");t===R-1&&(j.push(T,"=0;"),D()),L(t,2),P(t-1,e),t===R-1&&(j.push("if(",f(x[R-1]),"&1){",T,"=0;}"),D()),C(t),j.push("}")}var O=E.length,R=x.length;if(R<2)throw new Error("ndarray-extract-contour: Dimension must be at least 2");for(var F="extractContour"+x.join("_"),j=[],N=[],B=[],U=0;U<O;++U)B.push(n(U));for(var U=0;U<b;++U)B.push(u(U));for(var U=0;U<R;++U)N.push(o(U)+"="+n(0)+".shape["+U+"]|0");for(var U=0;U<O;++U){N.push(i(U)+"="+n(U)+".data",l(U)+"="+n(U)+".offset|0");for(var V=0;V<R;++V)N.push(s(U,V)+"="+n(U)+".stride["+V+"]|0")}for(var U=0;U<O;++U){N.push(c(U)+"="+l(U)),N.push(a(U,0));for(var V=1;V<1<<R;++V){for(var H=[],q=0;q<R;++q)V&1<<q&&H.push("-"+s(U,q));N.push(h(U,V)+"=("+H.join("")+")|0"),N.push(a(U,V)+"=0")}}for(var U=0;U<O;++U)for(var V=0;V<R;++V){var G=[s(U,x[V])];V>0&&G.push(s(U,x[V-1])+"*"+o(x[V-1])),N.push(d(U,x[V])+"=("+G.join("-")+")|0")}for(var U=0;U<R;++U)N.push(f(U)+"=0");N.push(k+"=0");for(var Y=["2"],U=R-2;U>=0;--U)Y.push(o(x[U]));N.push(A+"=("+Y.join("*")+")|0",M+"=mallocUint32("+A+")",w+"=mallocUint32("+A+")",T+"=0"),N.push(p(0)+"=0");for(var V=1;V<1<<R;++V){for(var W=[],X=[],q=0;q<R;++q)V&1<<q&&(0===X.length?W.push("1"):W.unshift(X.join("*"))),X.push(o(x[q]));var Z="";W[0].indexOf(o(x[R-2]))<0&&(Z="-");var J=y(R,V,x);N.push(g(J)+"=(-"+W.join("-")+")|0",m(J)+"=("+Z+W.join("-")+")|0",p(J)+"=0")}N.push(v(0)+"=0",S+"=0"),P(R-1,0),j.push("freeUint32(",w,");freeUint32(",M,");");var K=["'use strict';","function ",F,"(",B.join(),"){","var ",N.join(),";",j.join(""),"}","return ",F].join("");return new Function("vertex","face","phase","mallocUint32","freeUint32",K)(t,e,r,_.mallocUint32,_.freeUint32)}function x(t){function e(t){throw new Error("ndarray-extract-contour: "+t)}"object"!=typeof t&&e("Must specify arguments");var r=t.order;Array.isArray(r)||e("Must specify order");var n=t.arrayArguments||1;n<1&&e("Must have at least one array argument");var i=t.scalarArguments||0;i<0&&e("Scalar arg count must be > 0"),
"function"!=typeof t.vertex&&e("Must specify vertex creation function"),"function"!=typeof t.cell&&e("Must specify cell creation function"),"function"!=typeof t.phase&&e("Must specify phase function");for(var a=t.getters||[],o=new Array(n),s=0;s<n;++s)a.indexOf(s)>=0?o[s]=!0:o[s]=!1;return b(t.vertex,t.cell,t.phase,i,r,o)}var _=t("typedarray-pool");e.exports=x;var w="V",M="P",k="N",A="Q",T="X",S="T"},{"typedarray-pool":541}],457:[function(t,e,r){"use strict";var n=t("cwise/lib/wrapper")({args:["index","array","scalar"],pre:{body:"{}",args:[],thisVars:[],localVars:[]},body:{body:"{_inline_4_arg1_=_inline_4_arg2_.apply(void 0,_inline_4_arg0_)}",args:[{name:"_inline_4_arg0_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_4_arg1_",lvalue:!0,rvalue:!1,count:1},{name:"_inline_4_arg2_",lvalue:!1,rvalue:!0,count:1}],thisVars:[],localVars:[]},post:{body:"{}",args:[],thisVars:[],localVars:[]},debug:!1,funcName:"cwise",blockSize:64});e.exports=function(t,e){return n(t,e),t}},{"cwise/lib/wrapper":113}],458:[function(t,e,r){"use strict";function n(t){if(t in l)return l[t];for(var e=[],r=0;r<t;++r)e.push("out",r,"s=0.5*(inp",r,"l-inp",r,"r);");for(var n=["array"],i=["junk"],r=0;r<t;++r){n.push("array"),i.push("out"+r+"s");var a=o(t);a[r]=-1,n.push({array:0,offset:a.slice()}),a[r]=1,n.push({array:0,offset:a.slice()}),i.push("inp"+r+"l","inp"+r+"r")}return l[t]=s({args:n,pre:c,post:c,body:{body:e.join(""),args:i.map(function(t){return{name:t,lvalue:0===t.indexOf("out"),rvalue:0===t.indexOf("inp"),count:"junk"!==t|0}}),thisVars:[],localVars:[]},funcName:"fdTemplate"+t})}function i(t){var e=t.join(),r=u[e];if(r)return r;for(var i=t.length,a=["function gradient(dst,src){var s=src.shape.slice();"],o=0;o<1<<i;++o){for(var s=[],c=0;c<i;++c)o&1<<c&&s.push(c+1);for(var d=0;d<1<<s.length;++d){for(var p=s.slice(),c=0;c<s.length;++c)d&1<<c&&(p[c]=-p[c]);!function(e){for(var r=i-e.length,n=[],o=[],s=[],l=0;l<i;++l)e.indexOf(l+1)>=0?s.push("0"):e.indexOf(-(l+1))>=0?s.push("s["+l+"]-1"):(s.push("-1"),n.push("1"),o.push("s["+l+"]-2"));var u=".lo("+n.join()+").hi("+o.join()+")";if(0===n.length&&(u=""),r>0){a.push("if(1");for(var l=0;l<i;++l)e.indexOf(l+1)>=0||e.indexOf(-(l+1))>=0||a.push("&&s[",l,"]>2");a.push("){grad",r,"(src.pick(",s.join(),")",u);for(var l=0;l<i;++l)e.indexOf(l+1)>=0||e.indexOf(-(l+1))>=0||a.push(",dst.pick(",s.join(),",",l,")",u);a.push(");")}for(var l=0;l<e.length;++l){var c=Math.abs(e[l])-1,h="dst.pick("+s.join()+","+c+")"+u;switch(t[c]){case"clamp":var f=s.slice(),d=s.slice();e[l]<0?f[c]="s["+c+"]-2":d[c]="1",0===r?a.push("if(s[",c,"]>1){dst.set(",s.join(),",",c,",0.5*(src.get(",f.join(),")-src.get(",d.join(),")))}else{dst.set(",s.join(),",",c,",0)};"):a.push("if(s[",c,"]>1){diff(",h,",src.pick(",f.join(),")",u,",src.pick(",d.join(),")",u,");}else{zero(",h,");};");break;case"mirror":0===r?a.push("dst.set(",s.join(),",",c,",0);"):a.push("zero(",h,");");break;case"wrap":var p=s.slice(),m=s.slice();e[l]<0?(p[c]="s["+c+"]-2",m[c]="0"):(p[c]="s["+c+"]-1",m[c]="1"),0===r?a.push("if(s[",c,"]>2){dst.set(",s.join(),",",c,",0.5*(src.get(",p.join(),")-src.get(",m.join(),")))}else{dst.set(",s.join(),",",c,",0)};"):a.push("if(s[",c,"]>2){diff(",h,",src.pick(",p.join(),")",u,",src.pick(",m.join(),")",u,");}else{zero(",h,");};");break;default:throw new Error("ndarray-gradient: Invalid boundary condition")}}r>0&&a.push("};")}(p)}}a.push("return dst;};return gradient");for(var m=["diff","zero"],g=[h,f],o=1;o<=i;++o)m.push("grad"+o),g.push(n(o));m.push(a.join(""));var v=Function.apply(void 0,m),r=v.apply(void 0,g);return l[e]=r,r}function a(t,e,r){if(Array.isArray(r)){if(r.length!==e.dimension)throw new Error("ndarray-gradient: invalid boundary conditions")}else r="string"==typeof r?o(e.dimension,r):o(e.dimension,"clamp");if(t.dimension!==e.dimension+1)throw new Error("ndarray-gradient: output dimension must be +1 input dimension");if(t.shape[e.dimension]!==e.dimension)throw new Error("ndarray-gradient: output shape must match input shape");for(var n=0;n<e.dimension;++n)if(t.shape[n]!==e.shape[n])throw new Error("ndarray-gradient: shape mismatch");return 0===e.size?t:e.dimension<=0?(t.set(0),t):i(r)(t,e)}e.exports=a;var o=t("dup"),s=t("cwise-compiler"),l={},u={},c={body:"",args:[],thisVars:[],localVars:[]},h=s({args:["array","array","array"],pre:c,post:c,body:{args:[{name:"out",lvalue:!0,rvalue:!1,count:1},{name:"left",lvalue:!1,rvalue:!0,count:1},{name:"right",lvalue:!1,rvalue:!0,count:1}],body:"out=0.5*(left-right)",thisVars:[],localVars:[]},funcName:"cdiff"}),f=s({args:["array"],pre:c,post:c,body:{args:[{name:"out",lvalue:!0,rvalue:!1,count:1}],body:"out=0",thisVars:[],localVars:[]},funcName:"zero"})},{"cwise-compiler":110,dup:125}],459:[function(t,e,r){"use strict";function n(t,e,r){var n=e.dimension,o=a([],r);return i(t,e,function(t,e){for(var r=0;r<n;++r){t[r]=o[(n+1)*n+r];for(var i=0;i<n;++i)t[r]+=o[(n+1)*i+r]*e[i]}for(var a=o[(n+1)*(n+1)-1],i=0;i<n;++i)a+=o[(n+1)*i+n]*e[i];for(var s=1/a,r=0;r<n;++r)t[r]*=s;return t}),t}var i=t("ndarray-warp"),a=t("gl-matrix-invert");e.exports=n},{"gl-matrix-invert":192,"ndarray-warp":466}],460:[function(t,e,r){"use strict";function n(t,e){var r=Math.floor(e),n=e-r,i=0<=r&&r<t.shape[0],a=0<=r+1&&r+1<t.shape[0];return(1-n)*(i?+t.get(r):0)+n*(a?+t.get(r+1):0)}function i(t,e,r){var n=Math.floor(e),i=e-n,a=0<=n&&n<t.shape[0],o=0<=n+1&&n+1<t.shape[0],s=Math.floor(r),l=r-s,u=0<=s&&s<t.shape[1],c=0<=s+1&&s+1<t.shape[1],h=a&&u?t.get(n,s):0,f=a&&c?t.get(n,s+1):0;return(1-l)*((1-i)*h+i*(o&&u?t.get(n+1,s):0))+l*((1-i)*f+i*(o&&c?t.get(n+1,s+1):0))}function a(t,e,r,n){var i=Math.floor(e),a=e-i,o=0<=i&&i<t.shape[0],s=0<=i+1&&i+1<t.shape[0],l=Math.floor(r),u=r-l,c=0<=l&&l<t.shape[1],h=0<=l+1&&l+1<t.shape[1],f=Math.floor(n),d=n-f,p=0<=f&&f<t.shape[2],m=0<=f+1&&f+1<t.shape[2],g=o&&c&&p?t.get(i,l,f):0,v=o&&h&&p?t.get(i,l+1,f):0,y=s&&c&&p?t.get(i+1,l,f):0,b=s&&h&&p?t.get(i+1,l+1,f):0,x=o&&c&&m?t.get(i,l,f+1):0,_=o&&h&&m?t.get(i,l+1,f+1):0;return(1-d)*((1-u)*((1-a)*g+a*y)+u*((1-a)*v+a*b))+d*((1-u)*((1-a)*x+a*(s&&c&&m?t.get(i+1,l,f+1):0))+u*((1-a)*_+a*(s&&h&&m?t.get(i+1,l+1,f+1):0)))}function o(t){var e,r,n=0|t.shape.length,i=new Array(n),a=new Array(n),o=new Array(n),s=new Array(n);for(e=0;e<n;++e)r=+arguments[e+1],i[e]=Math.floor(r),a[e]=r-i[e],o[e]=0<=i[e]&&i[e]<t.shape[e],s[e]=0<=i[e]+1&&i[e]+1<t.shape[e];var l,u,c,h=0;t:for(e=0;e<1<<n;++e){for(u=1,c=t.offset,l=0;l<n;++l)if(e&1<<l){if(!s[l])continue t;u*=a[l],c+=t.stride[l]*(i[l]+1)}else{if(!o[l])continue t;u*=1-a[l],c+=t.stride[l]*i[l]}h+=u*t.data[c]}return h}function s(t,e,r,s){switch(t.shape.length){case 0:return 0;case 1:return n(t,e);case 2:return i(t,e,r);case 3:return a(t,e,r,s);default:return o.apply(void 0,arguments)}}e.exports=s,e.exports.d1=n,e.exports.d2=i,e.exports.d3=a},{}],461:[function(t,e,r){"use strict";function n(t){if(!t)return s;for(var e=0;e<t.args.length;++e){var r=t.args[e];t.args[e]=0===e?{name:r,lvalue:!0,rvalue:!!t.rvalue,count:t.count||1}:{name:r,lvalue:!1,rvalue:!0,count:1}}return t.thisVars||(t.thisVars=[]),t.localVars||(t.localVars=[]),t}function i(t){return o({args:t.args,pre:n(t.pre),body:n(t.body),post:n(t.proc),funcName:t.funcName})}function a(t){for(var e=[],r=0;r<t.args.length;++r)e.push("a"+r);return new Function("P",["return function ",t.funcName,"_ndarrayops(",e.join(","),") {P(",e.join(","),");return a0}"].join(""))(i(t))}var o=t("cwise-compiler"),s={body:"",args:[],thisVars:[],localVars:[]},l={add:"+",sub:"-",mul:"*",div:"/",mod:"%",band:"&",bor:"|",bxor:"^",lshift:"<<",rshift:">>",rrshift:">>>"};!function(){for(var t in l){var e=l[t];r[t]=a({args:["array","array","array"],body:{args:["a","b","c"],body:"a=b"+e+"c"},funcName:t}),r[t+"eq"]=a({args:["array","array"],body:{args:["a","b"],body:"a"+e+"=b"},rvalue:!0,funcName:t+"eq"}),r[t+"s"]=a({args:["array","array","scalar"],body:{args:["a","b","s"],body:"a=b"+e+"s"},funcName:t+"s"}),r[t+"seq"]=a({args:["array","scalar"],body:{args:["a","s"],body:"a"+e+"=s"},rvalue:!0,funcName:t+"seq"})}}();var u={not:"!",bnot:"~",neg:"-",recip:"1.0/"};!function(){for(var t in u){var e=u[t];r[t]=a({args:["array","array"],body:{args:["a","b"],body:"a="+e+"b"},funcName:t}),r[t+"eq"]=a({args:["array"],body:{args:["a"],body:"a="+e+"a"},rvalue:!0,count:2,funcName:t+"eq"})}}();var c={and:"&&",or:"||",eq:"===",neq:"!==",lt:"<",gt:">",leq:"<=",geq:">="};!function(){for(var t in c){var e=c[t];r[t]=a({args:["array","array","array"],body:{args:["a","b","c"],body:"a=b"+e+"c"},funcName:t}),r[t+"s"]=a({args:["array","array","scalar"],body:{args:["a","b","s"],body:"a=b"+e+"s"},funcName:t+"s"}),r[t+"eq"]=a({args:["array","array"],body:{args:["a","b"],body:"a=a"+e+"b"},rvalue:!0,count:2,funcName:t+"eq"}),r[t+"seq"]=a({args:["array","scalar"],body:{args:["a","s"],body:"a=a"+e+"s"},rvalue:!0,count:2,funcName:t+"seq"})}}();var h=["abs","acos","asin","atan","ceil","cos","exp","floor","log","round","sin","sqrt","tan"];!function(){for(var t=0;t<h.length;++t){var e=h[t];r[e]=a({args:["array","array"],pre:{args:[],body:"this_f=Math."+e,thisVars:["this_f"]},body:{args:["a","b"],body:"a=this_f(b)",thisVars:["this_f"]},funcName:e}),r[e+"eq"]=a({args:["array"],pre:{args:[],body:"this_f=Math."+e,thisVars:["this_f"]},body:{args:["a"],body:"a=this_f(a)",thisVars:["this_f"]},rvalue:!0,count:2,funcName:e+"eq"})}}();var f=["max","min","atan2","pow"];!function(){for(var t=0;t<f.length;++t){var e=f[t];r[e]=a({args:["array","array","array"],pre:{args:[],body:"this_f=Math."+e,thisVars:["this_f"]},body:{args:["a","b","c"],body:"a=this_f(b,c)",thisVars:["this_f"]},funcName:e}),r[e+"s"]=a({args:["array","array","scalar"],pre:{args:[],body:"this_f=Math."+e,thisVars:["this_f"]},body:{args:["a","b","c"],body:"a=this_f(b,c)",thisVars:["this_f"]},funcName:e+"s"}),r[e+"eq"]=a({args:["array","array"],pre:{args:[],body:"this_f=Math."+e,thisVars:["this_f"]},body:{args:["a","b"],body:"a=this_f(a,b)",thisVars:["this_f"]},rvalue:!0,count:2,funcName:e+"eq"}),r[e+"seq"]=a({args:["array","scalar"],pre:{args:[],body:"this_f=Math."+e,thisVars:["this_f"]},body:{args:["a","b"],body:"a=this_f(a,b)",thisVars:["this_f"]},rvalue:!0,count:2,funcName:e+"seq"})}}();var d=["atan2","pow"];!function(){for(var t=0;t<d.length;++t){var e=d[t];r[e+"op"]=a({args:["array","array","array"],pre:{args:[],body:"this_f=Math."+e,thisVars:["this_f"]},body:{args:["a","b","c"],body:"a=this_f(c,b)",thisVars:["this_f"]},funcName:e+"op"}),r[e+"ops"]=a({args:["array","array","scalar"],pre:{args:[],body:"this_f=Math."+e,thisVars:["this_f"]},body:{args:["a","b","c"],body:"a=this_f(c,b)",thisVars:["this_f"]},funcName:e+"ops"}),r[e+"opeq"]=a({args:["array","array"],pre:{args:[],body:"this_f=Math."+e,thisVars:["this_f"]},body:{args:["a","b"],body:"a=this_f(b,a)",thisVars:["this_f"]},rvalue:!0,count:2,funcName:e+"opeq"}),r[e+"opseq"]=a({args:["array","scalar"],pre:{args:[],body:"this_f=Math."+e,thisVars:["this_f"]},body:{args:["a","b"],body:"a=this_f(b,a)",thisVars:["this_f"]},rvalue:!0,count:2,funcName:e+"opseq"})}}(),r.any=o({args:["array"],pre:s,body:{args:[{name:"a",lvalue:!1,rvalue:!0,count:1}],body:"if(a){return true}",localVars:[],thisVars:[]},post:{args:[],localVars:[],thisVars:[],body:"return false"},funcName:"any"}),r.all=o({args:["array"],pre:s,body:{args:[{name:"x",lvalue:!1,rvalue:!0,count:1}],body:"if(!x){return false}",localVars:[],thisVars:[]},post:{args:[],localVars:[],thisVars:[],body:"return true"},funcName:"all"}),r.sum=o({args:["array"],pre:{args:[],localVars:[],thisVars:["this_s"],body:"this_s=0"},body:{args:[{name:"a",lvalue:!1,rvalue:!0,count:1}],body:"this_s+=a",localVars:[],thisVars:["this_s"]},post:{args:[],localVars:[],thisVars:["this_s"],body:"return this_s"},funcName:"sum"}),r.prod=o({args:["array"],pre:{args:[],localVars:[],thisVars:["this_s"],body:"this_s=1"},body:{args:[{name:"a",lvalue:!1,rvalue:!0,count:1}],body:"this_s*=a",localVars:[],thisVars:["this_s"]},post:{args:[],localVars:[],thisVars:["this_s"],body:"return this_s"},funcName:"prod"}),r.norm2squared=o({args:["array"],pre:{args:[],localVars:[],thisVars:["this_s"],body:"this_s=0"},body:{args:[{name:"a",lvalue:!1,rvalue:!0,count:2}],body:"this_s+=a*a",localVars:[],thisVars:["this_s"]},post:{args:[],localVars:[],thisVars:["this_s"],body:"return this_s"},funcName:"norm2squared"}),r.norm2=o({args:["array"],pre:{args:[],localVars:[],thisVars:["this_s"],body:"this_s=0"},body:{args:[{name:"a",lvalue:!1,rvalue:!0,count:2}],body:"this_s+=a*a",localVars:[],thisVars:["this_s"]},post:{args:[],localVars:[],thisVars:["this_s"],body:"return Math.sqrt(this_s)"},funcName:"norm2"}),r.norminf=o({args:["array"],pre:{args:[],localVars:[],thisVars:["this_s"],body:"this_s=0"},body:{args:[{name:"a",lvalue:!1,rvalue:!0,count:4}],body:"if(-a>this_s){this_s=-a}else if(a>this_s){this_s=a}",localVars:[],thisVars:["this_s"]},post:{args:[],localVars:[],thisVars:["this_s"],body:"return this_s"},funcName:"norminf"}),r.norm1=o({args:["array"],pre:{args:[],localVars:[],thisVars:["this_s"],body:"this_s=0"},body:{args:[{name:"a",lvalue:!1,rvalue:!0,count:3}],body:"this_s+=a<0?-a:a",localVars:[],thisVars:["this_s"]},post:{args:[],localVars:[],thisVars:["this_s"],body:"return this_s"},funcName:"norm1"}),r.sup=o({args:["array"],pre:{body:"this_h=-Infinity",args:[],thisVars:["this_h"],localVars:[]},body:{body:"if(_inline_1_arg0_>this_h)this_h=_inline_1_arg0_",args:[{name:"_inline_1_arg0_",lvalue:!1,rvalue:!0,count:2}],thisVars:["this_h"],localVars:[]},post:{body:"return this_h",args:[],thisVars:["this_h"],localVars:[]}}),r.inf=o({args:["array"],pre:{body:"this_h=Infinity",args:[],thisVars:["this_h"],localVars:[]},body:{body:"if(_inline_1_arg0_<this_h)this_h=_inline_1_arg0_",args:[{name:"_inline_1_arg0_",lvalue:!1,rvalue:!0,count:2}],thisVars:["this_h"],localVars:[]},post:{body:"return this_h",args:[],thisVars:["this_h"],localVars:[]}}),r.argmin=o({args:["index","array","shape"],pre:{body:"{this_v=Infinity;this_i=_inline_0_arg2_.slice(0)}",args:[{name:"_inline_0_arg0_",lvalue:!1,rvalue:!1,count:0},{name:"_inline_0_arg1_",lvalue:!1,rvalue:!1,count:0},{name:"_inline_0_arg2_",lvalue:!1,rvalue:!0,count:1}],thisVars:["this_i","this_v"],localVars:[]},body:{body:"{if(_inline_1_arg1_<this_v){this_v=_inline_1_arg1_;for(var _inline_1_k=0;_inline_1_k<_inline_1_arg0_.length;++_inline_1_k){this_i[_inline_1_k]=_inline_1_arg0_[_inline_1_k]}}}",args:[{name:"_inline_1_arg0_",lvalue:!1,rvalue:!0,count:2},{name:"_inline_1_arg1_",lvalue:!1,rvalue:!0,count:2}],thisVars:["this_i","this_v"],localVars:["_inline_1_k"]},post:{body:"{return this_i}",args:[],thisVars:["this_i"],localVars:[]}}),r.argmax=o({args:["index","array","shape"],pre:{body:"{this_v=-Infinity;this_i=_inline_0_arg2_.slice(0)}",args:[{name:"_inline_0_arg0_",lvalue:!1,rvalue:!1,count:0},{name:"_inline_0_arg1_",lvalue:!1,rvalue:!1,count:0},{name:"_inline_0_arg2_",lvalue:!1,rvalue:!0,count:1}],thisVars:["this_i","this_v"],localVars:[]},body:{body:"{if(_inline_1_arg1_>this_v){this_v=_inline_1_arg1_;for(var _inline_1_k=0;_inline_1_k<_inline_1_arg0_.length;++_inline_1_k){this_i[_inline_1_k]=_inline_1_arg0_[_inline_1_k]}}}",args:[{name:"_inline_1_arg0_",lvalue:!1,rvalue:!0,count:2},{name:"_inline_1_arg1_",lvalue:!1,rvalue:!0,count:2}],thisVars:["this_i","this_v"],localVars:["_inline_1_k"]},post:{body:"{return this_i}",args:[],thisVars:["this_i"],localVars:[]}}),r.random=a({args:["array"],pre:{args:[],body:"this_f=Math.random",thisVars:["this_f"]},body:{args:["a"],body:"a=this_f()",thisVars:["this_f"]},funcName:"random"}),r.assign=a({args:["array","array"],body:{args:["a","b"],body:"a=b"},funcName:"assign"}),r.assigns=a({args:["array","scalar"],body:{args:["a","b"],body:"a=b"},funcName:"assigns"}),r.equals=o({args:["array","array"],pre:s,body:{args:[{name:"x",lvalue:!1,rvalue:!0,count:1},{name:"y",lvalue:!1,rvalue:!0,count:1}],body:"if(x!==y){return false}",localVars:[],thisVars:[]},post:{args:[],localVars:[],thisVars:[],body:"return true"},funcName:"equals"})},{"cwise-compiler":110}],462:[function(t,e,r){"use strict";var n=t("ndarray"),i=t("./doConvert.js");e.exports=function(t,e){for(var r=[],a=t,o=1;Array.isArray(a);)r.push(a.length),o*=a.length,a=a[0];return 0===r.length?n():(e||(e=n(new Float64Array(o),r)),i(e,t),e)}},{"./doConvert.js":463,ndarray:467}],463:[function(t,e,r){e.exports=t("cwise-compiler")({args:["array","scalar","index"],pre:{body:"{}",args:[],thisVars:[],localVars:[]},body:{body:"{\nvar _inline_1_v=_inline_1_arg1_,_inline_1_i\nfor(_inline_1_i=0;_inline_1_i<_inline_1_arg2_.length-1;++_inline_1_i) {\n_inline_1_v=_inline_1_v[_inline_1_arg2_[_inline_1_i]]\n}\n_inline_1_arg0_=_inline_1_v[_inline_1_arg2_[_inline_1_arg2_.length-1]]\n}",args:[{name:"_inline_1_arg0_",lvalue:!0,rvalue:!1,count:1},{name:"_inline_1_arg1_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_1_arg2_",lvalue:!1,rvalue:!0,count:4}],thisVars:[],localVars:["_inline_1_i","_inline_1_v"]},post:{body:"{}",args:[],thisVars:[],localVars:[]},funcName:"convert",blockSize:64})},{"cwise-compiler":110}],464:[function(t,e,r){"use strict";function n(t){switch(t){case"uint8":return[l.mallocUint8,l.freeUint8];case"uint16":return[l.mallocUint16,l.freeUint16];case"uint32":return[l.mallocUint32,l.freeUint32];case"int8":return[l.mallocInt8,l.freeInt8];case"int16":return[l.mallocInt16,l.freeInt16];case"int32":return[l.mallocInt32,l.freeInt32];case"float32":return[l.mallocFloat,l.freeFloat];case"float64":return[l.mallocDouble,l.freeDouble];default:return null}}function i(t){for(var e=[],r=0;r<t;++r)e.push("s"+r);for(var r=0;r<t;++r)e.push("n"+r);for(var r=1;r<t;++r)e.push("d"+r);for(var r=1;r<t;++r)e.push("e"+r);for(var r=1;r<t;++r)e.push("f"+r);return e}function a(t,e){function r(t){return"generic"===e?["data.get(",t,")"].join(""):["data[",t,"]"].join("")}function a(t,r){return"generic"===e?["data.set(",t,",",r,")"].join(""):["data[",t,"]=",r].join("")}var o=["'use strict'"],s=["ndarrayInsertionSort",t.join("d"),e].join(""),l=["left","right","data","offset"].concat(i(t.length)),u=n(e),c=["i,j,cptr,ptr=left*s0+offset"];if(t.length>1){for(var h=[],f=1;f<t.length;++f)c.push("i"+f),h.push("n"+f);u?c.push("scratch=malloc("+h.join("*")+")"):c.push("scratch=new Array("+h.join("*")+")"),c.push("dptr","sptr","a","b")}else c.push("scratch");if(o.push(["function ",s,"(",l.join(","),"){var ",c.join(",")].join(""),"for(i=left+1;i<=right;++i){","j=i;ptr+=s0","cptr=ptr"),t.length>1){o.push("dptr=0;sptr=ptr");for(var f=t.length-1;f>=0;--f){var d=t[f];0!==d&&o.push(["for(i",d,"=0;i",d,"<n",d,";++i",d,"){"].join(""))}o.push("scratch[dptr++]=",r("sptr"));for(var f=0;f<t.length;++f){var d=t[f];0!==d&&o.push("sptr+=d"+d,"}")}o.push("__g:while(j--\x3eleft){","dptr=0","sptr=cptr-s0");for(var f=1;f<t.length;++f)1===f&&o.push("__l:"),o.push(["for(i",f,"=0;i",f,"<n",f,";++i",f,"){"].join(""));o.push(["a=",r("sptr"),"\nb=scratch[dptr]\nif(a<b){break __g}\nif(a>b){break __l}"].join(""));for(var f=t.length-1;f>=1;--f)o.push("sptr+=e"+f,"dptr+=f"+f,"}");o.push("dptr=cptr;sptr=cptr-s0");for(var f=t.length-1;f>=0;--f){var d=t[f];0!==d&&o.push(["for(i",d,"=0;i",d,"<n",d,";++i",d,"){"].join(""))}o.push(a("dptr",r("sptr")));for(var f=0;f<t.length;++f){var d=t[f];0!==d&&o.push(["dptr+=d",d,";sptr+=d",d].join(""),"}")}o.push("cptr-=s0\n}"),o.push("dptr=cptr;sptr=0");for(var f=t.length-1;f>=0;--f){var d=t[f];0!==d&&o.push(["for(i",d,"=0;i",d,"<n",d,";++i",d,"){"].join(""))}o.push(a("dptr","scratch[sptr++]"));for(var f=0;f<t.length;++f){var d=t[f];0!==d&&o.push("dptr+=d"+d,"}")}}else o.push("scratch="+r("ptr"),"while((j--\x3eleft)&&("+r("cptr-s0")+">scratch)){",a("cptr",r("cptr-s0")),"cptr-=s0","}",a("cptr","scratch"));if(o.push("}"),t.length>1&&u&&o.push("free(scratch)"),o.push("} return "+s),u){var p=new Function("malloc","free",o.join("\n"));return p(u[0],u[1])}var p=new Function(o.join("\n"));return p()}function o(t,e,r){function a(t){return["(offset+",t,"*s0)"].join("")}function o(t){return"generic"===e?["data.get(",t,")"].join(""):["data[",t,"]"].join("")}function s(t,r){return"generic"===e?["data.set(",t,",",r,")"].join(""):["data[",t,"]=",r].join("")}function l(e,r,n){if(1===e.length)_.push("ptr0="+a(e[0]));else for(var i=0;i<e.length;++i)_.push(["b_ptr",i,"=s0*",e[i]].join(""));r&&_.push("pivot_ptr=0"),_.push("ptr_shift=offset");for(var i=t.length-1;i>=0;--i){var o=t[i];0!==o&&_.push(["for(i",o,"=0;i",o,"<n",o,";++i",o,"){"].join(""))}if(e.length>1)for(var i=0;i<e.length;++i)_.push(["ptr",i,"=b_ptr",i,"+ptr_shift"].join(""));_.push(n),r&&_.push("++pivot_ptr");for(var i=0;i<t.length;++i){var o=t[i];0!==o&&(e.length>1?_.push("ptr_shift+=d"+o):_.push("ptr0+=d"+o),_.push("}"))}}function c(e,r,n,i){if(1===r.length)_.push("ptr0="+a(r[0]));else{for(var o=0;o<r.length;++o)_.push(["b_ptr",o,"=s0*",r[o]].join(""));_.push("ptr_shift=offset")}n&&_.push("pivot_ptr=0"),e&&_.push(e+":");for(var o=1;o<t.length;++o)_.push(["for(i",o,"=0;i",o,"<n",o,";++i",o,"){"].join(""));if(r.length>1)for(var o=0;o<r.length;++o)_.push(["ptr",o,"=b_ptr",o,"+ptr_shift"].join(""));_.push(i);for(var o=t.length-1;o>=1;--o)n&&_.push("pivot_ptr+=f"+o),r.length>1?_.push("ptr_shift+=e"+o):_.push("ptr0+=e"+o),_.push("}")}function h(){t.length>1&&k&&_.push("free(pivot1)","free(pivot2)")}function f(e,r){var n="el"+e,i="el"+r;if(t.length>1){var s="__l"+ ++A;c(s,[n,i],!1,["comp=",o("ptr0"),"-",o("ptr1"),"\n","if(comp>0){tmp0=",n,";",n,"=",i,";",i,"=tmp0;break ",s,"}\n","if(comp<0){break ",s,"}"].join(""))}else _.push(["if(",o(a(n)),">",o(a(i)),"){tmp0=",n,";",n,"=",i,";",i,"=tmp0}"].join(""))}function d(e,r){t.length>1?l([e,r],!1,s("ptr0",o("ptr1"))):_.push(s(a(e),o(a(r))))}function p(e,r,n){if(t.length>1){var i="__l"+ ++A;c(i,[r],!0,[e,"=",o("ptr0"),"-pivot",n,"[pivot_ptr]\n","if(",e,"!==0){break ",i,"}"].join(""))}else _.push([e,"=",o(a(r)),"-pivot",n].join(""))}function m(e,r){t.length>1?l([e,r],!1,["tmp=",o("ptr0"),"\n",s("ptr0",o("ptr1")),"\n",s("ptr1","tmp")].join("")):_.push(["ptr0=",a(e),"\n","ptr1=",a(r),"\n","tmp=",o("ptr0"),"\n",s("ptr0",o("ptr1")),"\n",s("ptr1","tmp")].join(""))}function g(e,r,n){t.length>1?(l([e,r,n],!1,["tmp=",o("ptr0"),"\n",s("ptr0",o("ptr1")),"\n",s("ptr1",o("ptr2")),"\n",s("ptr2","tmp")].join("")),_.push("++"+r,"--"+n)):_.push(["ptr0=",a(e),"\n","ptr1=",a(r),"\n","ptr2=",a(n),"\n","++",r,"\n","--",n,"\n","tmp=",o("ptr0"),"\n",s("ptr0",o("ptr1")),"\n",s("ptr1",o("ptr2")),"\n",s("ptr2","tmp")].join(""))}function v(t,e){m(t,e),_.push("--"+e)}function y(e,r,n){t.length>1?l([e,r],!0,[s("ptr0",o("ptr1")),"\n",s("ptr1",["pivot",n,"[pivot_ptr]"].join(""))].join("")):_.push(s(a(e),o(a(r))),s(a(r),"pivot"+n))}function b(e,r){_.push(["if((",r,"-",e,")<=",u,"){\n","insertionSort(",e,",",r,",data,offset,",i(t.length).join(","),")\n","}else{\n",w,"(",e,",",r,",data,offset,",i(t.length).join(","),")\n","}"].join(""))}function x(e,r,n){t.length>1?(_.push(["__l",++A,":while(true){"].join("")),l([e],!0,["if(",o("ptr0"),"!==pivot",r,"[pivot_ptr]){break __l",A,"}"].join("")),_.push(n,"}")):_.push(["while(",o(a(e)),"===pivot",r,"){",n,"}"].join(""))}var _=["'use strict'"],w=["ndarrayQuickSort",t.join("d"),e].join(""),M=["left","right","data","offset"].concat(i(t.length)),k=n(e),A=0;_.push(["function ",w,"(",M.join(","),"){"].join(""));var T=["sixth=((right-left+1)/6)|0","index1=left+sixth","index5=right-sixth","index3=(left+right)>>1","index2=index3-sixth","index4=index3+sixth","el1=index1","el2=index2","el3=index3","el4=index4","el5=index5","less=left+1","great=right-1","pivots_are_equal=true","tmp","tmp0","x","y","z","k","ptr0","ptr1","ptr2","comp_pivot1=0","comp_pivot2=0","comp=0"];if(t.length>1){for(var S=[],E=1;E<t.length;++E)S.push("n"+E),T.push("i"+E);for(var E=0;E<8;++E)T.push("b_ptr"+E);T.push("ptr3","ptr4","ptr5","ptr6","ptr7","pivot_ptr","ptr_shift","elementSize="+S.join("*")),k?T.push("pivot1=malloc(elementSize)","pivot2=malloc(elementSize)"):T.push("pivot1=new Array(elementSize),pivot2=new Array(elementSize)")}else T.push("pivot1","pivot2");if(_.push("var "+T.join(",")),f(1,2),f(4,5),f(1,3),f(2,3),f(1,4),f(3,4),f(2,5),f(2,3),f(4,5),t.length>1?l(["el1","el2","el3","el4","el5","index1","index3","index5"],!0,["pivot1[pivot_ptr]=",o("ptr1"),"\n","pivot2[pivot_ptr]=",o("ptr3"),"\n","pivots_are_equal=pivots_are_equal&&(pivot1[pivot_ptr]===pivot2[pivot_ptr])\n","x=",o("ptr0"),"\n","y=",o("ptr2"),"\n","z=",o("ptr4"),"\n",s("ptr5","x"),"\n",s("ptr6","y"),"\n",s("ptr7","z")].join("")):_.push(["pivot1=",o(a("el2")),"\n","pivot2=",o(a("el4")),"\n","pivots_are_equal=pivot1===pivot2\n","x=",o(a("el1")),"\n","y=",o(a("el3")),"\n","z=",o(a("el5")),"\n",s(a("index1"),"x"),"\n",s(a("index3"),"y"),"\n",s(a("index5"),"z")].join("")),d("index2","left"),d("index4","right"),_.push("if(pivots_are_equal){"),_.push("for(k=less;k<=great;++k){"),p("comp","k",1),_.push("if(comp===0){continue}"),_.push("if(comp<0){"),_.push("if(k!==less){"),m("k","less"),_.push("}"),_.push("++less"),_.push("}else{"),_.push("while(true){"),p("comp","great",1),_.push("if(comp>0){"),_.push("great--"),_.push("}else if(comp<0){"),g("k","less","great"),_.push("break"),_.push("}else{"),v("k","great"),_.push("break"),_.push("}"),_.push("}"),_.push("}"),_.push("}"),_.push("}else{"),_.push("for(k=less;k<=great;++k){"),p("comp_pivot1","k",1),_.push("if(comp_pivot1<0){"),_.push("if(k!==less){"),m("k","less"),_.push("}"),_.push("++less"),_.push("}else{"),p("comp_pivot2","k",2),_.push("if(comp_pivot2>0){"),_.push("while(true){"),p("comp","great",2),_.push("if(comp>0){"),_.push("if(--great<k){break}"),_.push("continue"),_.push("}else{"),p("comp","great",1),_.push("if(comp<0){"),g("k","less","great"),_.push("}else{"),v("k","great"),_.push("}"),_.push("break"),_.push("}"),_.push("}"),_.push("}"),_.push("}"),_.push("}"),_.push("}"),y("left","(less-1)",1),y("right","(great+1)",2),b("left","(less-2)"),b("(great+2)","right"),_.push("if(pivots_are_equal){"),h(),_.push("return"),_.push("}"),_.push("if(less<index1&&great>index5){"),x("less",1,"++less"),x("great",2,"--great"),_.push("for(k=less;k<=great;++k){"),p("comp_pivot1","k",1),_.push("if(comp_pivot1===0){"),_.push("if(k!==less){"),m("k","less"),_.push("}"),_.push("++less"),_.push("}else{"),p("comp_pivot2","k",2),_.push("if(comp_pivot2===0){"),_.push("while(true){"),p("comp","great",2),_.push("if(comp===0){"),_.push("if(--great<k){break}"),_.push("continue"),_.push("}else{"),p("comp","great",1),_.push("if(comp<0){"),g("k","less","great"),_.push("}else{"),v("k","great"),_.push("}"),_.push("break"),_.push("}"),_.push("}"),_.push("}"),_.push("}"),_.push("}"),_.push("}"),h(),b("less","great"),_.push("}return "+w),t.length>1&&k){var L=new Function("insertionSort","malloc","free",_.join("\n"));return L(r,k[0],k[1])}var L=new Function("insertionSort",_.join("\n"));return L(r)}function s(t,e){var r=["'use strict'"],n=["ndarraySortWrapper",t.join("d"),e].join(""),s=["array"];r.push(["function ",n,"(",s.join(","),"){"].join(""));for(var l=["data=array.data,offset=array.offset|0,shape=array.shape,stride=array.stride"],c=0;c<t.length;++c)l.push(["s",c,"=stride[",c,"]|0,n",c,"=shape[",c,"]|0"].join(""));for(var h=new Array(t.length),f=[],c=0;c<t.length;++c){var d=t[c];0!==d&&(0===f.length?h[d]="1":h[d]=f.join("*"),f.push("n"+d))}for(var p=-1,m=-1,c=0;c<t.length;++c){var g=t[c];0!==g&&(p>0?l.push(["d",g,"=s",g,"-d",p,"*n",p].join("")):l.push(["d",g,"=s",g].join("")),p=g);var d=t.length-1-c;0!==d&&(m>0?l.push(["e",d,"=s",d,"-e",m,"*n",m,",f",d,"=",h[d],"-f",m,"*n",m].join("")):l.push(["e",d,"=s",d,",f",d,"=",h[d]].join("")),m=d)}r.push("var "+l.join(","));var v=["0","n0-1","data","offset"].concat(i(t.length));r.push(["if(n0<=",u,"){","insertionSort(",v.join(","),")}else{","quickSort(",v.join(","),")}"].join("")),r.push("}return "+n);var y=new Function("insertionSort","quickSort",r.join("\n")),b=a(t,e);return y(b,o(t,e,b))}var l=t("typedarray-pool"),u=32;e.exports=s},{"typedarray-pool":541}],465:[function(t,e,r){"use strict";function n(t){var e=t.order,r=t.dtype,n=[e,r],o=n.join(":"),s=a[o];return s||(a[o]=s=i(e,r)),s(t),t}var i=t("./lib/compile_sort.js"),a={};e.exports=n},{"./lib/compile_sort.js":464}],466:[function(t,e,r){"use strict";var n=t("ndarray-linear-interpolate"),i=t("cwise/lib/wrapper")({args:["index","array","scalar","scalar","scalar"],pre:{body:"{this_warped=new Array(_inline_21_arg4_)}",args:[{name:"_inline_21_arg0_",lvalue:!1,rvalue:!1,count:0},{name:"_inline_21_arg1_",lvalue:!1,rvalue:!1,count:0},{name:"_inline_21_arg2_",lvalue:!1,rvalue:!1,count:0},{name:"_inline_21_arg3_",lvalue:!1,rvalue:!1,count:0},{name:"_inline_21_arg4_",lvalue:!1,rvalue:!0,count:1}],thisVars:["this_warped"],localVars:[]},body:{body:"{_inline_22_arg2_(this_warped,_inline_22_arg0_),_inline_22_arg1_=_inline_22_arg3_.apply(void 0,this_warped)}",args:[{name:"_inline_22_arg0_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_22_arg1_",lvalue:!0,rvalue:!1,count:1},{name:"_inline_22_arg2_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_22_arg3_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_22_arg4_",lvalue:!1,rvalue:!1,count:0}],thisVars:["this_warped"],localVars:[]},post:{body:"{}",args:[],thisVars:[],localVars:[]},debug:!1,funcName:"warpND",blockSize:64}),a=t("cwise/lib/wrapper")({args:["index","array","scalar","scalar","scalar"],pre:{body:"{this_warped=[0]}",args:[],thisVars:["this_warped"],localVars:[]},body:{body:"{_inline_25_arg2_(this_warped,_inline_25_arg0_),_inline_25_arg1_=_inline_25_arg3_(_inline_25_arg4_,this_warped[0])}",args:[{name:"_inline_25_arg0_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_25_arg1_",lvalue:!0,rvalue:!1,count:1},{name:"_inline_25_arg2_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_25_arg3_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_25_arg4_",lvalue:!1,rvalue:!0,count:1}],thisVars:["this_warped"],localVars:[]},post:{body:"{}",args:[],thisVars:[],localVars:[]},debug:!1,funcName:"warp1D",blockSize:64}),o=t("cwise/lib/wrapper")({args:["index","array","scalar","scalar","scalar"],pre:{body:"{this_warped=[0,0]}",args:[],thisVars:["this_warped"],localVars:[]},body:{body:"{_inline_28_arg2_(this_warped,_inline_28_arg0_),_inline_28_arg1_=_inline_28_arg3_(_inline_28_arg4_,this_warped[0],this_warped[1])}",args:[{name:"_inline_28_arg0_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_28_arg1_",lvalue:!0,rvalue:!1,count:1},{name:"_inline_28_arg2_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_28_arg3_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_28_arg4_",lvalue:!1,rvalue:!0,count:1}],thisVars:["this_warped"],localVars:[]},post:{body:"{}",args:[],thisVars:[],localVars:[]},debug:!1,funcName:"warp2D",blockSize:64}),s=t("cwise/lib/wrapper")({args:["index","array","scalar","scalar","scalar"],pre:{body:"{this_warped=[0,0,0]}",args:[],thisVars:["this_warped"],localVars:[]},body:{body:"{_inline_31_arg2_(this_warped,_inline_31_arg0_),_inline_31_arg1_=_inline_31_arg3_(_inline_31_arg4_,this_warped[0],this_warped[1],this_warped[2])}",args:[{name:"_inline_31_arg0_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_31_arg1_",lvalue:!0,rvalue:!1,count:1},{name:"_inline_31_arg2_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_31_arg3_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_31_arg4_",lvalue:!1,rvalue:!0,count:1}],thisVars:["this_warped"],localVars:[]},post:{body:"{}",args:[],thisVars:[],localVars:[]},debug:!1,funcName:"warp3D",blockSize:64});e.exports=function(t,e,r){switch(e.shape.length){case 1:a(t,r,n.d1,e);break;case 2:o(t,r,n.d2,e);break;case 3:s(t,r,n.d3,e);break;default:i(t,r,n.bind(void 0,e),e.shape.length)}return t}},{"cwise/lib/wrapper":113,"ndarray-linear-interpolate":460}],467:[function(t,e,r){function n(t,e){return t[0]-e[0]}function i(){var t,e=this.stride,r=new Array(e.length);for(t=0;t<r.length;++t)r[t]=[Math.abs(e[t]),t];r.sort(n);var i=new Array(r.length);for(t=0;t<i.length;++t)i[t]=r[t][1];return i}function a(t,e){var r=["View",e,"d",t].join("");e<0&&(r="View_Nil"+t);var n="generic"===t;if(-1===e){
var a="function "+r+"(a){this.data=a;};var proto="+r+".prototype;proto.dtype='"+t+"';proto.index=function(){return -1};proto.size=0;proto.dimension=-1;proto.shape=proto.stride=proto.order=[];proto.lo=proto.hi=proto.transpose=proto.step=function(){return new "+r+"(this.data);};proto.get=proto.set=function(){};proto.pick=function(){return null};return function construct_"+r+"(a){return new "+r+"(a);}",o=new Function(a);return o()}if(0===e){var a="function "+r+"(a,d) {this.data = a;this.offset = d};var proto="+r+".prototype;proto.dtype='"+t+"';proto.index=function(){return this.offset};proto.dimension=0;proto.size=1;proto.shape=proto.stride=proto.order=[];proto.lo=proto.hi=proto.transpose=proto.step=function "+r+"_copy() {return new "+r+"(this.data,this.offset)};proto.pick=function "+r+"_pick(){return TrivialArray(this.data);};proto.valueOf=proto.get=function "+r+"_get(){return "+(n?"this.data.get(this.offset)":"this.data[this.offset]")+"};proto.set=function "+r+"_set(v){return "+(n?"this.data.set(this.offset,v)":"this.data[this.offset]=v")+"};return function construct_"+r+"(a,b,c,d){return new "+r+"(a,d)}",o=new Function("TrivialArray",a);return o(h[t][0])}var a=["'use strict'"],s=l(e),u=s.map(function(t){return"i"+t}),c="this.offset+"+s.map(function(t){return"this.stride["+t+"]*i"+t}).join("+"),f=s.map(function(t){return"b"+t}).join(","),d=s.map(function(t){return"c"+t}).join(",");a.push("function "+r+"(a,"+f+","+d+",d){this.data=a","this.shape=["+f+"]","this.stride=["+d+"]","this.offset=d|0}","var proto="+r+".prototype","proto.dtype='"+t+"'","proto.dimension="+e),a.push("Object.defineProperty(proto,'size',{get:function "+r+"_size(){return "+s.map(function(t){return"this.shape["+t+"]"}).join("*"),"}})"),1===e?a.push("proto.order=[0]"):(a.push("Object.defineProperty(proto,'order',{get:"),e<4?(a.push("function "+r+"_order(){"),2===e?a.push("return (Math.abs(this.stride[0])>Math.abs(this.stride[1]))?[1,0]:[0,1]}})"):3===e&&a.push("var s0=Math.abs(this.stride[0]),s1=Math.abs(this.stride[1]),s2=Math.abs(this.stride[2]);if(s0>s1){if(s1>s2){return [2,1,0];}else if(s0>s2){return [1,2,0];}else{return [1,0,2];}}else if(s0>s2){return [2,0,1];}else if(s2>s1){return [0,1,2];}else{return [0,2,1];}}})")):a.push("ORDER})")),a.push("proto.set=function "+r+"_set("+u.join(",")+",v){"),n?a.push("return this.data.set("+c+",v)}"):a.push("return this.data["+c+"]=v}"),a.push("proto.get=function "+r+"_get("+u.join(",")+"){"),n?a.push("return this.data.get("+c+")}"):a.push("return this.data["+c+"]}"),a.push("proto.index=function "+r+"_index(",u.join(),"){return "+c+"}"),a.push("proto.hi=function "+r+"_hi("+u.join(",")+"){return new "+r+"(this.data,"+s.map(function(t){return["(typeof i",t,"!=='number'||i",t,"<0)?this.shape[",t,"]:i",t,"|0"].join("")}).join(",")+","+s.map(function(t){return"this.stride["+t+"]"}).join(",")+",this.offset)}");var p=s.map(function(t){return"a"+t+"=this.shape["+t+"]"}),m=s.map(function(t){return"c"+t+"=this.stride["+t+"]"});a.push("proto.lo=function "+r+"_lo("+u.join(",")+"){var b=this.offset,d=0,"+p.join(",")+","+m.join(","));for(var g=0;g<e;++g)a.push("if(typeof i"+g+"==='number'&&i"+g+">=0){d=i"+g+"|0;b+=c"+g+"*d;a"+g+"-=d}");a.push("return new "+r+"(this.data,"+s.map(function(t){return"a"+t}).join(",")+","+s.map(function(t){return"c"+t}).join(",")+",b)}"),a.push("proto.step=function "+r+"_step("+u.join(",")+"){var "+s.map(function(t){return"a"+t+"=this.shape["+t+"]"}).join(",")+","+s.map(function(t){return"b"+t+"=this.stride["+t+"]"}).join(",")+",c=this.offset,d=0,ceil=Math.ceil");for(var g=0;g<e;++g)a.push("if(typeof i"+g+"==='number'){d=i"+g+"|0;if(d<0){c+=b"+g+"*(a"+g+"-1);a"+g+"=ceil(-a"+g+"/d)}else{a"+g+"=ceil(a"+g+"/d)}b"+g+"*=d}");a.push("return new "+r+"(this.data,"+s.map(function(t){return"a"+t}).join(",")+","+s.map(function(t){return"b"+t}).join(",")+",c)}");for(var v=new Array(e),y=new Array(e),g=0;g<e;++g)v[g]="a[i"+g+"]",y[g]="b[i"+g+"]";a.push("proto.transpose=function "+r+"_transpose("+u+"){"+u.map(function(t,e){return t+"=("+t+"===undefined?"+e+":"+t+"|0)"}).join(";"),"var a=this.shape,b=this.stride;return new "+r+"(this.data,"+v.join(",")+","+y.join(",")+",this.offset)}"),a.push("proto.pick=function "+r+"_pick("+u+"){var a=[],b=[],c=this.offset");for(var g=0;g<e;++g)a.push("if(typeof i"+g+"==='number'&&i"+g+">=0){c=(c+this.stride["+g+"]*i"+g+")|0}else{a.push(this.shape["+g+"]);b.push(this.stride["+g+"])}");a.push("var ctor=CTOR_LIST[a.length+1];return ctor(this.data,a,b,c)}"),a.push("return function construct_"+r+"(data,shape,stride,offset){return new "+r+"(data,"+s.map(function(t){return"shape["+t+"]"}).join(",")+","+s.map(function(t){return"stride["+t+"]"}).join(",")+",offset)}");var o=new Function("CTOR_LIST","ORDER",a.join("\n"));return o(h[t],i)}function o(t){if(u(t))return"buffer";if(c)switch(Object.prototype.toString.call(t)){case"[object Float64Array]":return"float64";case"[object Float32Array]":return"float32";case"[object Int8Array]":return"int8";case"[object Int16Array]":return"int16";case"[object Int32Array]":return"int32";case"[object Uint8Array]":return"uint8";case"[object Uint16Array]":return"uint16";case"[object Uint32Array]":return"uint32";case"[object Uint8ClampedArray]":return"uint8_clamped"}return Array.isArray(t)?"array":"generic"}function s(t,e,r,n){if(void 0===t){var i=h.array[0];return i([])}"number"==typeof t&&(t=[t]),void 0===e&&(e=[t.length]);var s=e.length;if(void 0===r){r=new Array(s);for(var l=s-1,u=1;l>=0;--l)r[l]=u,u*=e[l]}if(void 0===n){n=0;for(var l=0;l<s;++l)r[l]<0&&(n-=(e[l]-1)*r[l])}for(var c=o(t),f=h[c];f.length<=s+1;)f.push(a(c,f.length-1));var i=f[s+1];return i(t,e,r,n)}var l=t("iota-array"),u=t("is-buffer"),c="undefined"!=typeof Float64Array,h={float32:[],float64:[],int8:[],int16:[],int32:[],uint8:[],uint16:[],uint32:[],array:[],uint8_clamped:[],buffer:[],generic:[]};e.exports=s},{"iota-array":293,"is-buffer":295}],468:[function(t,e,r){"use strict";function n(t,e){if(isNaN(t)||isNaN(e))return NaN;if(t===e)return t;if(0===t)return e<0?-a:a;var r=i.hi(t),n=i.lo(t);return e>t==t>0?n===o?(r+=1,n=0):n+=1:0===n?(n=o,r-=1):n-=1,i.pack(n,r)}var i=t("double-bits"),a=Math.pow(2,-1074),o=-1>>>0;e.exports=n},{"double-bits":124}],469:[function(t,e,r){r.vertexNormals=function(t,e,r){for(var n=e.length,i=new Array(n),a=void 0===r?1e-6:r,o=0;o<n;++o)i[o]=[0,0,0];for(var o=0;o<t.length;++o)for(var s=t[o],l=0,u=s[s.length-1],c=s[0],h=0;h<s.length;++h){l=u,u=c,c=s[(h+1)%s.length];for(var f=e[l],d=e[u],p=e[c],m=new Array(3),g=0,v=new Array(3),y=0,b=0;b<3;++b)m[b]=f[b]-d[b],g+=m[b]*m[b],v[b]=p[b]-d[b],y+=v[b]*v[b];if(g*y>a)for(var x=i[u],_=1/Math.sqrt(g*y),b=0;b<3;++b){var w=(b+1)%3,M=(b+2)%3;x[b]+=_*(v[w]*m[M]-v[M]*m[w])}}for(var o=0;o<n;++o){for(var x=i[o],k=0,b=0;b<3;++b)k+=x[b]*x[b];if(k>a)for(var _=1/Math.sqrt(k),b=0;b<3;++b)x[b]*=_;else for(var b=0;b<3;++b)x[b]=0}return i},r.faceNormals=function(t,e,r){for(var n=t.length,i=new Array(n),a=void 0===r?1e-6:r,o=0;o<n;++o){for(var s=t[o],l=new Array(3),u=0;u<3;++u)l[u]=e[s[u]];for(var c=new Array(3),h=new Array(3),u=0;u<3;++u)c[u]=l[1][u]-l[0][u],h[u]=l[2][u]-l[0][u];for(var f=new Array(3),d=0,u=0;u<3;++u){var p=(u+1)%3,m=(u+2)%3;f[u]=c[p]*h[m]-c[m]*h[p],d+=f[u]*f[u]}d=d>a?1/Math.sqrt(d):0;for(var u=0;u<3;++u)f[u]*=d;i[o]=f}return i}},{}],470:[function(t,e,r){"use strict";function n(t){if(null===t||void 0===t)throw new TypeError("Object.assign cannot be called with null or undefined");return Object(t)}var i=Object.getOwnPropertySymbols,a=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable;e.exports=function(){try{if(!Object.assign)return!1;var t=new String("abc");if(t[5]="de","5"===Object.getOwnPropertyNames(t)[0])return!1;for(var e={},r=0;r<10;r++)e["_"+String.fromCharCode(r)]=r;if("0123456789"!==Object.getOwnPropertyNames(e).map(function(t){return e[t]}).join(""))return!1;var n={};return"abcdefghijklmnopqrst".split("").forEach(function(t){n[t]=t}),"abcdefghijklmnopqrst"===Object.keys(Object.assign({},n)).join("")}catch(t){return!1}}()?Object.assign:function(t,e){for(var r,s,l=n(t),u=1;u<arguments.length;u++){r=Object(arguments[u]);for(var c in r)a.call(r,c)&&(l[c]=r[c]);if(i){s=i(r);for(var h=0;h<s.length;h++)o.call(r,s[h])&&(l[s[h]]=r[s[h]])}}return l}},{}],471:[function(t,e,r){"use strict";function n(t,e){var r,n,o;return"string"==typeof t?(r=i(t,e),n=r.width,o=r.height):t instanceof HTMLCanvasElement?(n=t.width,o=t.height,t=t.getContext("2d"),r=t.getImageData(0,0,n,o)):t instanceof ImageData&&(n=t.width,o=t.height,r=t),a(r)}function i(t,e){e||(e={});var r=e.family||"sans-serif",n=l.width,i=l.height,a=e.width||e.height||e.size;a&&a!=n&&(n=i=l.width=l.height=a);var o=e.fontSize||n/2;return u.fillStyle="#000",u.fillRect(0,0,n,i),u.font=o+"px "+r,u.textBaseline="middle",u.textAlign="center",u.fillStyle="white",u.fillText(t,n/2,i/2),u.getImageData(0,0,n,i)}function a(t){var e,r,n,i,a,l,u,c,h,f,d,p,m,g=t.data,v=t.width,y=t.height,b=Array(y),x=Array(y),_=0,w=0,M=v,k=0,A=0,T=Array(y);for(r=0;r<y;r++)if(l=0,u=0,a=4*r*v,d=o(g.subarray(a,a+4*v),4),d[0]!==d[1]){for(_||(_=r),w=r,e=d[0];e<d[1];e++)i=4*e,n=g[a+i],l+=n,u+=e*n;b[r]=0===l?0:l/v,x[r]=0===l?0:u/l,d[0]<M&&(M=d[0]),d[1]>k&&(k=d[1]),T[r]=d}for(l=0,c=0,u=0,r=0;r<y;r++)(p=b[r])&&(c+=p*r,l+=p,u+=x[r]*p);for(f=c/l,h=u/l,A=0,m=0,r=0;r<y;r++)(d=T[r])&&(m=Math.max(s(h-d[0],f-r),s(h-d[1],f-r)))>A&&(A=m);return{center:[h,f],bounds:[M,_,k,w+1],radius:Math.sqrt(A)}}function o(t,e){var r=0,n=t.length,i=0;for(e||(e=4);!t[i]&&i<n;)i+=e;for(r=i,i=t.length;!t[i]&&i>r;)i-=e;return n=i,[r/e,n/e]}function s(t,e){return t*t+e*e}e.exports=n;var l=document.createElement("canvas"),u=l.getContext("2d");l.width=200,l.height=200,n.canvas=l},{}],472:[function(t,e,r){"use strict";function n(t,e,r,n,i,a,o,s,l,u){var c=e+a+u;if(h>0){var h=Math.sqrt(c+1);t[0]=.5*(o-l)/h,t[1]=.5*(s-n)/h,t[2]=.5*(r-a)/h,t[3]=.5*h}else{var f=Math.max(e,a,u),h=Math.sqrt(2*f-c+1);e>=f?(t[0]=.5*h,t[1]=.5*(i+r)/h,t[2]=.5*(s+n)/h,t[3]=.5*(o-l)/h):a>=f?(t[0]=.5*(r+i)/h,t[1]=.5*h,t[2]=.5*(l+o)/h,t[3]=.5*(s-n)/h):(t[0]=.5*(n+s)/h,t[1]=.5*(o+l)/h,t[2]=.5*h,t[3]=.5*(r-i)/h)}return t}e.exports=n},{}],473:[function(t,e,r){"use strict";function n(t,e,r){return Math.sqrt(Math.pow(t,2)+Math.pow(e,2)+Math.pow(r,2))}function i(t,e,r,n){return Math.sqrt(Math.pow(t,2)+Math.pow(e,2)+Math.pow(r,2)+Math.pow(n,2))}function a(t,e){var r=e[0],n=e[1],a=e[2],o=e[3],s=i(r,n,a,o);s>1e-6?(t[0]=r/s,t[1]=n/s,t[2]=a/s,t[3]=o/s):(t[0]=t[1]=t[2]=0,t[3]=1)}function o(t,e,r){this.radius=l([r]),this.center=l(e),this.rotation=l(t),this.computedRadius=this.radius.curve(0),this.computedCenter=this.center.curve(0),this.computedRotation=this.rotation.curve(0),this.computedUp=[.1,0,0],this.computedEye=[.1,0,0],this.computedMatrix=[.1,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],this.recalcMatrix(0)}function s(t){t=t||{};var e=t.center||[0,0,0],r=t.rotation||[0,0,0,1],n=t.radius||1;e=[].slice.call(e,0,3),r=[].slice.call(r,0,4),a(r,r);var i=new o(r,e,Math.log(n));return i.setDistanceLimits(t.zoomMin,t.zoomMax),("eye"in t||"up"in t)&&i.lookAt(0,t.eye,t.center,t.up),i}e.exports=s;var l=t("filtered-vector"),u=t("gl-mat4/lookAt"),c=t("gl-mat4/fromQuat"),h=t("gl-mat4/invert"),f=t("./lib/quatFromFrame"),d=o.prototype;d.lastT=function(){return Math.max(this.radius.lastT(),this.center.lastT(),this.rotation.lastT())},d.recalcMatrix=function(t){this.radius.curve(t),this.center.curve(t),this.rotation.curve(t);var e=this.computedRotation;a(e,e);var r=this.computedMatrix;c(r,e);var n=this.computedCenter,i=this.computedEye,o=this.computedUp,s=Math.exp(this.computedRadius[0]);i[0]=n[0]+s*r[2],i[1]=n[1]+s*r[6],i[2]=n[2]+s*r[10],o[0]=r[1],o[1]=r[5],o[2]=r[9];for(var l=0;l<3;++l){for(var u=0,h=0;h<3;++h)u+=r[l+4*h]*i[h];r[12+l]=-u}},d.getMatrix=function(t,e){this.recalcMatrix(t);var r=this.computedMatrix;if(e){for(var n=0;n<16;++n)e[n]=r[n];return e}return r},d.idle=function(t){this.center.idle(t),this.radius.idle(t),this.rotation.idle(t)},d.flush=function(t){this.center.flush(t),this.radius.flush(t),this.rotation.flush(t)},d.pan=function(t,e,r,i){e=e||0,r=r||0,i=i||0,this.recalcMatrix(t);var a=this.computedMatrix,o=a[1],s=a[5],l=a[9],u=n(o,s,l);o/=u,s/=u,l/=u;var c=a[0],h=a[4],f=a[8],d=c*o+h*s+f*l;c-=o*d,h-=s*d,f-=l*d;var p=n(c,h,f);c/=p,h/=p,f/=p;var m=a[2],g=a[6],v=a[10],y=m*o+g*s+v*l,b=m*c+g*h+v*f;m-=y*o+b*c,g-=y*s+b*h,v-=y*l+b*f;var x=n(m,g,v);m/=x,g/=x,v/=x;var _=c*e+o*r,w=h*e+s*r,M=f*e+l*r;this.center.move(t,_,w,M);var k=Math.exp(this.computedRadius[0]);k=Math.max(1e-4,k+i),this.radius.set(t,Math.log(k))},d.rotate=function(t,e,r,a){this.recalcMatrix(t),e=e||0,r=r||0;var o=this.computedMatrix,s=o[0],l=o[4],u=o[8],c=o[1],h=o[5],f=o[9],d=o[2],p=o[6],m=o[10],g=e*s+r*c,v=e*l+r*h,y=e*u+r*f,b=-(p*y-m*v),x=-(m*g-d*y),_=-(d*v-p*g),w=Math.sqrt(Math.max(0,1-Math.pow(b,2)-Math.pow(x,2)-Math.pow(_,2))),M=i(b,x,_,w);M>1e-6?(b/=M,x/=M,_/=M,w/=M):(b=x=_=0,w=1);var k=this.computedRotation,A=k[0],T=k[1],S=k[2],E=k[3],L=A*w+E*b+T*_-S*x,C=T*w+E*x+S*b-A*_,I=S*w+E*_+A*x-T*b,z=E*w-A*b-T*x-S*_;if(a){b=d,x=p,_=m;var D=Math.sin(a)/n(b,x,_);b*=D,x*=D,_*=D,w=Math.cos(e),L=L*w+z*b+C*_-I*x,C=C*w+z*x+I*b-L*_,I=I*w+z*_+L*x-C*b,z=z*w-L*b-C*x-I*_}var P=i(L,C,I,z);P>1e-6?(L/=P,C/=P,I/=P,z/=P):(L=C=I=0,z=1),this.rotation.set(t,L,C,I,z)},d.lookAt=function(t,e,r,n){this.recalcMatrix(t),r=r||this.computedCenter,e=e||this.computedEye,n=n||this.computedUp;var i=this.computedMatrix;u(i,e,r,n);var o=this.computedRotation;f(o,i[0],i[1],i[2],i[4],i[5],i[6],i[8],i[9],i[10]),a(o,o),this.rotation.set(t,o[0],o[1],o[2],o[3]);for(var s=0,l=0;l<3;++l)s+=Math.pow(r[l]-e[l],2);this.radius.set(t,.5*Math.log(Math.max(s,1e-6))),this.center.set(t,r[0],r[1],r[2])},d.translate=function(t,e,r,n){this.center.move(t,e||0,r||0,n||0)},d.setMatrix=function(t,e){var r=this.computedRotation;f(r,e[0],e[1],e[2],e[4],e[5],e[6],e[8],e[9],e[10]),a(r,r),this.rotation.set(t,r[0],r[1],r[2],r[3]);var n=this.computedMatrix;h(n,e);var i=n[15];if(Math.abs(i)>1e-6){var o=n[12]/i,s=n[13]/i,l=n[14]/i;this.recalcMatrix(t);var u=Math.exp(this.computedRadius[0]);this.center.set(t,o-n[2]*u,s-n[6]*u,l-n[10]*u),this.radius.idle(t)}else this.center.idle(t),this.radius.idle(t)},d.setDistance=function(t,e){e>0&&this.radius.set(t,Math.log(e))},d.setDistanceLimits=function(t,e){t=t>0?Math.log(t):-1/0,e=e>0?Math.log(e):1/0,e=Math.max(e,t),this.radius.bounds[0][0]=t,this.radius.bounds[1][0]=e},d.getDistanceLimits=function(t){var e=this.radius.bounds;return t?(t[0]=Math.exp(e[0][0]),t[1]=Math.exp(e[1][0]),t):[Math.exp(e[0][0]),Math.exp(e[1][0])]},d.toJSON=function(){return this.recalcMatrix(this.lastT()),{center:this.computedCenter.slice(),rotation:this.computedRotation.slice(),distance:Math.log(this.computedRadius[0]),zoomMin:this.radius.bounds[0][0],zoomMax:this.radius.bounds[1][0]}},d.fromJSON=function(t){var e=this.lastT(),r=t.center;r&&this.center.set(e,r[0],r[1],r[2]);var n=t.rotation;n&&this.rotation.set(e,n[0],n[1],n[2],n[3]);var i=t.distance;i&&i>0&&this.radius.set(e,Math.log(i)),this.setDistanceLimits(t.zoomMin,t.zoomMax)}},{"./lib/quatFromFrame":472,"filtered-vector":133,"gl-mat4/fromQuat":178,"gl-mat4/invert":181,"gl-mat4/lookAt":182}],474:[function(t,e,r){"use strict";var n=t("repeat-string");e.exports=function(t,e,r){return r=void 0!==r?r+"":" ",n(r,e)+t}},{"repeat-string":500}],475:[function(t,e,r){e.exports=function(t,e){e||(e=[0,""]),t=String(t);var r=parseFloat(t,10);return e[0]=r,e[1]=t.match(/[\d.\-\+]*\s*(.*)/)[1]||"",e}},{}],476:[function(t,e,r){(function(t){function e(t,e){for(var r=0,n=t.length-1;n>=0;n--){var i=t[n];"."===i?t.splice(n,1):".."===i?(t.splice(n,1),r++):r&&(t.splice(n,1),r--)}if(e)for(;r--;r)t.unshift("..");return t}function n(t,e){if(t.filter)return t.filter(e);for(var r=[],n=0;n<t.length;n++)e(t[n],n,t)&&r.push(t[n]);return r}var i=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/,a=function(t){return i.exec(t).slice(1)};r.resolve=function(){for(var r="",i=!1,a=arguments.length-1;a>=-1&&!i;a--){var o=a>=0?arguments[a]:t.cwd();if("string"!=typeof o)throw new TypeError("Arguments to path.resolve must be strings");o&&(r=o+"/"+r,i="/"===o.charAt(0))}return r=e(n(r.split("/"),function(t){return!!t}),!i).join("/"),(i?"/":"")+r||"."},r.normalize=function(t){var i=r.isAbsolute(t),a="/"===o(t,-1);return t=e(n(t.split("/"),function(t){return!!t}),!i).join("/"),t||i||(t="."),t&&a&&(t+="/"),(i?"/":"")+t},r.isAbsolute=function(t){return"/"===t.charAt(0)},r.join=function(){var t=Array.prototype.slice.call(arguments,0);return r.normalize(n(t,function(t,e){if("string"!=typeof t)throw new TypeError("Arguments to path.join must be strings");return t}).join("/"))},r.relative=function(t,e){function n(t){for(var e=0;e<t.length&&""===t[e];e++);for(var r=t.length-1;r>=0&&""===t[r];r--);return e>r?[]:t.slice(e,r-e+1)}t=r.resolve(t).substr(1),e=r.resolve(e).substr(1);for(var i=n(t.split("/")),a=n(e.split("/")),o=Math.min(i.length,a.length),s=o,l=0;l<o;l++)if(i[l]!==a[l]){s=l;break}for(var u=[],l=s;l<i.length;l++)u.push("..");return u=u.concat(a.slice(s)),u.join("/")},r.sep="/",r.delimiter=":",r.dirname=function(t){var e=a(t),r=e[0],n=e[1];return r||n?(n&&(n=n.substr(0,n.length-1)),r+n):"."},r.basename=function(t,e){var r=a(t)[2];return e&&r.substr(-1*e.length)===e&&(r=r.substr(0,r.length-e.length)),r},r.extname=function(t){return a(t)[3]};var o="b"==="ab".substr(-1)?function(t,e,r){return t.substr(e,r)}:function(t,e,r){return e<0&&(e=t.length+e),t.substr(e,r)}}).call(this,t("_process"))},{_process:487}],477:[function(t,e,r){"use strict";function n(t){var e;t&&t.length&&(e=t,t=e.length);var r=new Uint8Array(t||0);return e&&r.set(e),r.readUInt32LE=a.readUInt32LE,r.writeUInt32LE=a.writeUInt32LE,r.readInt32LE=a.readInt32LE,r.writeInt32LE=a.writeInt32LE,r.readFloatLE=a.readFloatLE,r.writeFloatLE=a.writeFloatLE,r.readDoubleLE=a.readDoubleLE,r.writeDoubleLE=a.writeDoubleLE,r.toString=a.toString,r.write=a.write,r.slice=a.slice,r.copy=a.copy,r._isBuffer=!0,r}function i(t){for(var e,r,n=t.length,i=[],a=0;a<n;a++){if((e=t.charCodeAt(a))>55295&&e<57344){if(!r){e>56319||a+1===n?i.push(239,191,189):r=e;continue}if(e<56320){i.push(239,191,189),r=e;continue}e=r-55296<<10|e-56320|65536,r=null}else r&&(i.push(239,191,189),r=null);e<128?i.push(e):e<2048?i.push(e>>6|192,63&e|128):e<65536?i.push(e>>12|224,e>>6&63|128,63&e|128):i.push(e>>18|240,e>>12&63|128,e>>6&63|128,63&e|128)}return i}e.exports=n;var a,o,s,l=t("ieee754");a={readUInt32LE:function(t){return(this[t]|this[t+1]<<8|this[t+2]<<16)+16777216*this[t+3]},writeUInt32LE:function(t,e){this[e]=t,this[e+1]=t>>>8,this[e+2]=t>>>16,this[e+3]=t>>>24},readInt32LE:function(t){return(this[t]|this[t+1]<<8|this[t+2]<<16)+(this[t+3]<<24)},readFloatLE:function(t){return l.read(this,t,!0,23,4)},readDoubleLE:function(t){return l.read(this,t,!0,52,8)},writeFloatLE:function(t,e){return l.write(this,t,e,!0,23,4)},writeDoubleLE:function(t,e){return l.write(this,t,e,!0,52,8)},toString:function(t,e,r){var n="",i="";e=e||0,r=Math.min(this.length,r||this.length);for(var a=e;a<r;a++){var o=this[a];o<=127?(n+=decodeURIComponent(i)+String.fromCharCode(o),i=""):i+="%"+o.toString(16)}return n+=decodeURIComponent(i)},write:function(t,e){for(var r=t===o?s:i(t),n=0;n<r.length;n++)this[e+n]=r[n]},slice:function(t,e){return this.subarray(t,e)},copy:function(t,e){e=e||0;for(var r=0;r<this.length;r++)t[e+r]=this[r]}},a.writeInt32LE=a.writeUInt32LE,n.byteLength=function(t){return o=t,s=i(t),s.length},n.isBuffer=function(t){return!(!t||!t._isBuffer)}},{ieee754:289}],478:[function(t,e,r){(function(r){"use strict";function n(t){this.buf=g.isBuffer(t)?t:new g(t||0),this.pos=0,this.length=this.buf.length}function i(t,e){var r,n=e.buf;if(r=n[e.pos++],t+=268435456*(127&r),r<128)return t;if(r=n[e.pos++],t+=34359738368*(127&r),r<128)return t;if(r=n[e.pos++],t+=4398046511104*(127&r),r<128)return t;if(r=n[e.pos++],t+=562949953421312*(127&r),r<128)return t;if(r=n[e.pos++],t+=72057594037927940*(127&r),r<128)return t;if(r=n[e.pos++],t+=0x8000000000000000*(127&r),r<128)return t;throw new Error("Expected varint not more than 10 bytes")}function a(t,e){e.realloc(10);for(var r=e.pos+10;t>=1;){if(e.pos>=r)throw new Error("Given varint doesn't fit into 10 bytes");var n=255&t;e.buf[e.pos++]=n|(t>=128?128:0),t/=128}}function o(t,e,r){var n=e<=16383?1:e<=2097151?2:e<=268435455?3:Math.ceil(Math.log(e)/(7*Math.LN2));r.realloc(n);for(var i=r.pos-1;i>=t;i--)r.buf[i+n]=r.buf[i]}function s(t,e){for(var r=0;r<t.length;r++)e.writeVarint(t[r])}function l(t,e){for(var r=0;r<t.length;r++)e.writeSVarint(t[r])}function u(t,e){for(var r=0;r<t.length;r++)e.writeFloat(t[r])}function c(t,e){for(var r=0;r<t.length;r++)e.writeDouble(t[r])}function h(t,e){for(var r=0;r<t.length;r++)e.writeBoolean(t[r])}function f(t,e){for(var r=0;r<t.length;r++)e.writeFixed32(t[r])}function d(t,e){for(var r=0;r<t.length;r++)e.writeSFixed32(t[r])}function p(t,e){for(var r=0;r<t.length;r++)e.writeFixed64(t[r])}function m(t,e){for(var r=0;r<t.length;r++)e.writeSFixed64(t[r])}e.exports=n;var g=r.Buffer||t("./buffer");n.Varint=0,n.Fixed64=1,n.Bytes=2,n.Fixed32=5;var v=Math.pow(2,63);n.prototype={destroy:function(){this.buf=null},readFields:function(t,e,r){for(r=r||this.length;this.pos<r;){var n=this.readVarint(),i=n>>3,a=this.pos;t(i,e,this),this.pos===a&&this.skip(n)}return e},readMessage:function(t,e){return this.readFields(t,e,this.readVarint()+this.pos)},readFixed32:function(){var t=this.buf.readUInt32LE(this.pos);return this.pos+=4,t},readSFixed32:function(){var t=this.buf.readInt32LE(this.pos);return this.pos+=4,t},readFixed64:function(){var t=this.buf.readUInt32LE(this.pos)+4294967296*this.buf.readUInt32LE(this.pos+4);return this.pos+=8,t},readSFixed64:function(){var t=this.buf.readUInt32LE(this.pos)+4294967296*this.buf.readInt32LE(this.pos+4);return this.pos+=8,t},readFloat:function(){var t=this.buf.readFloatLE(this.pos);return this.pos+=4,t},readDouble:function(){var t=this.buf.readDoubleLE(this.pos);return this.pos+=8,t},readVarint:function(){var t,e,r=this.buf;return e=r[this.pos++],t=127&e,e<128?t:(e=r[this.pos++],t|=(127&e)<<7,e<128?t:(e=r[this.pos++],t|=(127&e)<<14,e<128?t:(e=r[this.pos++],t|=(127&e)<<21,e<128?t:i(t,this))))},readVarint64:function(){var t=this.pos,e=this.readVarint();if(e<v)return e;for(var r=this.pos-2;255===this.buf[r];)r--;r<t&&(r=t),e=0;for(var n=0;n<r-t+1;n++){var i=127&~this.buf[t+n];e+=n<4?i<<7*n:i*Math.pow(2,7*n)}return-e-1},readSVarint:function(){var t=this.readVarint();return t%2==1?(t+1)/-2:t/2},readBoolean:function(){return Boolean(this.readVarint())},readString:function(){var t=this.readVarint()+this.pos,e=this.buf.toString("utf8",this.pos,t);return this.pos=t,e},readBytes:function(){var t=this.readVarint()+this.pos,e=this.buf.slice(this.pos,t);return this.pos=t,e},readPackedVarint:function(){for(var t=this.readVarint()+this.pos,e=[];this.pos<t;)e.push(this.readVarint());return e},readPackedSVarint:function(){for(var t=this.readVarint()+this.pos,e=[];this.pos<t;)e.push(this.readSVarint());return e},readPackedBoolean:function(){for(var t=this.readVarint()+this.pos,e=[];this.pos<t;)e.push(this.readBoolean());return e},readPackedFloat:function(){for(var t=this.readVarint()+this.pos,e=[];this.pos<t;)e.push(this.readFloat());return e},readPackedDouble:function(){for(var t=this.readVarint()+this.pos,e=[];this.pos<t;)e.push(this.readDouble());return e},readPackedFixed32:function(){for(var t=this.readVarint()+this.pos,e=[];this.pos<t;)e.push(this.readFixed32());return e},readPackedSFixed32:function(){for(var t=this.readVarint()+this.pos,e=[];this.pos<t;)e.push(this.readSFixed32());return e},readPackedFixed64:function(){for(var t=this.readVarint()+this.pos,e=[];this.pos<t;)e.push(this.readFixed64());return e},readPackedSFixed64:function(){for(var t=this.readVarint()+this.pos,e=[];this.pos<t;)e.push(this.readSFixed64());return e},skip:function(t){var e=7&t;if(e===n.Varint)for(;this.buf[this.pos++]>127;);else if(e===n.Bytes)this.pos=this.readVarint()+this.pos;else if(e===n.Fixed32)this.pos+=4;else{if(e!==n.Fixed64)throw new Error("Unimplemented type: "+e);this.pos+=8}},writeTag:function(t,e){this.writeVarint(t<<3|e)},realloc:function(t){for(var e=this.length||16;e<this.pos+t;)e*=2;if(e!==this.length){var r=new g(e);this.buf.copy(r),this.buf=r,this.length=e}},finish:function(){return this.length=this.pos,this.pos=0,this.buf.slice(0,this.length)},writeFixed32:function(t){this.realloc(4),this.buf.writeUInt32LE(t,this.pos),this.pos+=4},writeSFixed32:function(t){this.realloc(4),this.buf.writeInt32LE(t,this.pos),this.pos+=4},writeFixed64:function(t){this.realloc(8),this.buf.writeInt32LE(-1&t,this.pos),this.buf.writeUInt32LE(Math.floor(t*(1/4294967296)),this.pos+4),this.pos+=8},writeSFixed64:function(t){this.realloc(8),this.buf.writeInt32LE(-1&t,this.pos),this.buf.writeInt32LE(Math.floor(t*(1/4294967296)),this.pos+4),this.pos+=8},writeVarint:function(t){if((t=+t)>268435455)return void a(t,this);this.realloc(4),this.buf[this.pos++]=127&t|(t>127?128:0),t<=127||(this.buf[this.pos++]=127&(t>>>=7)|(t>127?128:0),t<=127||(this.buf[this.pos++]=127&(t>>>=7)|(t>127?128:0),t<=127||(this.buf[this.pos++]=t>>>7&127)))},writeSVarint:function(t){this.writeVarint(t<0?2*-t-1:2*t)},writeBoolean:function(t){this.writeVarint(Boolean(t))},writeString:function(t){t=String(t);var e=g.byteLength(t);this.writeVarint(e),this.realloc(e),this.buf.write(t,this.pos),this.pos+=e},writeFloat:function(t){this.realloc(4),this.buf.writeFloatLE(t,this.pos),this.pos+=4},writeDouble:function(t){this.realloc(8),this.buf.writeDoubleLE(t,this.pos),this.pos+=8},writeBytes:function(t){var e=t.length;this.writeVarint(e),this.realloc(e);for(var r=0;r<e;r++)this.buf[this.pos++]=t[r]},writeRawMessage:function(t,e){this.pos++;var r=this.pos;t(e,this);var n=this.pos-r;n>=128&&o(r,n,this),this.pos=r-1,this.writeVarint(n),this.pos+=n},writeMessage:function(t,e,r){this.writeTag(t,n.Bytes),this.writeRawMessage(e,r)},writePackedVarint:function(t,e){this.writeMessage(t,s,e)},writePackedSVarint:function(t,e){this.writeMessage(t,l,e)},writePackedBoolean:function(t,e){this.writeMessage(t,h,e)},writePackedFloat:function(t,e){this.writeMessage(t,u,e)},writePackedDouble:function(t,e){this.writeMessage(t,c,e)},writePackedFixed32:function(t,e){this.writeMessage(t,f,e)},writePackedSFixed32:function(t,e){this.writeMessage(t,d,e)},writePackedFixed64:function(t,e){this.writeMessage(t,p,e)},writePackedSFixed64:function(t,e){this.writeMessage(t,m,e)},writeBytesField:function(t,e){this.writeTag(t,n.Bytes),this.writeBytes(e)},writeFixed32Field:function(t,e){this.writeTag(t,n.Fixed32),this.writeFixed32(e)},writeSFixed32Field:function(t,e){this.writeTag(t,n.Fixed32),this.writeSFixed32(e)},writeFixed64Field:function(t,e){this.writeTag(t,n.Fixed64),this.writeFixed64(e)},writeSFixed64Field:function(t,e){this.writeTag(t,n.Fixed64),this.writeSFixed64(e)},writeVarintField:function(t,e){this.writeTag(t,n.Varint),this.writeVarint(e)},writeSVarintField:function(t,e){this.writeTag(t,n.Varint),this.writeSVarint(e)},writeStringField:function(t,e){this.writeTag(t,n.Bytes),this.writeString(e)},writeFloatField:function(t,e){this.writeTag(t,n.Fixed32),this.writeFloat(e)},writeDoubleField:function(t,e){this.writeTag(t,n.Fixed64),this.writeDouble(e)},writeBooleanField:function(t,e){this.writeVarintField(t,Boolean(e))}}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./buffer":477}],479:[function(t,e,r){"use strict";function n(t){var e=t.length;if(e<i){for(var r=1,n=0;n<e;++n)for(var o=0;o<n;++o)if(t[n]<t[o])r=-r;else if(t[n]===t[o])return 0;return r}for(var s=a.mallocUint8(e),n=0;n<e;++n)s[n]=0;for(var r=1,n=0;n<e;++n)if(!s[n]){var l=1;s[n]=1;for(var o=t[n];o!==n;o=t[o]){if(s[o])return a.freeUint8(s),0;l+=1,s[o]=1}1&l||(r=-r)}return a.freeUint8(s),r}e.exports=n;var i=32,a=t("typedarray-pool")},{"typedarray-pool":541}],480:[function(t,e,r){"use strict";function n(t){var e=t.length;switch(e){case 0:case 1:return 0;case 2:return t[1]}var r,n,i,s=a.mallocUint32(e),l=a.mallocUint32(e),u=0;for(o(t,l),i=0;i<e;++i)s[i]=t[i];for(i=e-1;i>0;--i)n=l[i],r=s[i],s[i]=s[n],s[n]=r,l[i]=l[r],l[r]=n,u=(u+r)*i;return a.freeUint32(l),a.freeUint32(s),u}function i(t,e,r){switch(t){case 0:return r||[];case 1:return r?(r[0]=0,r):[0];case 2:return r?(e?(r[0]=0,r[1]=1):(r[0]=1,r[1]=0),r):e?[0,1]:[1,0]}r=r||new Array(t);var n,i,a,o=1;for(r[0]=0,a=1;a<t;++a)r[a]=a,o=o*a|0;for(a=t-1;a>0;--a)n=e/o|0,e=e-n*o|0,o=o/a|0,i=0|r[a],r[a]=0|r[n],r[n]=0|i;return r}var a=t("typedarray-pool"),o=t("invert-permutation");r.rank=n,r.unrank=i},{"invert-permutation":292,"typedarray-pool":541}],481:[function(t,e,r){"use strict";function n(t,e){function r(t,e){var r=s[e][t[e]];r.splice(r.indexOf(t),1)}function n(t,n,a){for(var o,l,u,c=0;c<2;++c)if(s[c][n].length>0){o=s[c][n][0],u=c;break}l=o[1^u];for(var h=0;h<2;++h)for(var f=s[h][n],d=0;d<f.length;++d){var p=f[d],m=p[1^h],g=i(e[t],e[n],e[l],e[m]);g>0&&(o=p,l=m,u=h)}return a?l:(o&&r(o,u),l)}for(var a=0|e.length,o=t.length,s=[new Array(a),new Array(a)],l=0;l<a;++l)s[0][l]=[],s[1][l]=[];for(var l=0;l<o;++l){var u=t[l];s[0][u[0]].push(u),s[1][u[1]].push(u)}for(var c=[],l=0;l<a;++l)s[0][l].length+s[1][l].length===0&&c.push([l]);for(var l=0;l<a;++l)for(var h=0;h<2;++h){for(var f=[];s[h][l].length>0;){var d=(s[0][l].length,function(t,a){var o=s[a][t][0],l=[t];r(o,a);for(var u=o[1^a];;){for(;u!==t;)l.push(u),u=n(l[l.length-2],u,!1);if(s[0][t].length+s[1][t].length===0)break;var c=l[l.length-1],h=t,f=l[1],d=n(c,h,!0);if(i(e[c],e[h],e[f],e[d])<0)break;l.push(t),u=n(c,h)}return l}(l,h));!function(t,e){return e[1]===e[e.length-1]}(f,d)?(f.length>0&&c.push(f),f=d):f.push.apply(f,d)}f.length>0&&c.push(f)}return c}e.exports=n;var i=t("compare-angle")},{"compare-angle":100}],482:[function(t,e,r){"use strict";function n(t,e){for(var r=i(t,e.length),n=new Array(e.length),a=new Array(e.length),o=[],s=0;s<e.length;++s){var l=r[s].length;a[s]=l,n[s]=!0,l<=1&&o.push(s)}for(;o.length>0;){var u=o.pop();n[u]=!1;for(var c=r[u],s=0;s<c.length;++s){var h=c[s];0==--a[h]&&o.push(h)}}for(var f=new Array(e.length),d=[],s=0;s<e.length;++s)if(n[s]){var u=d.length;f[s]=u,d.push(e[s])}else f[s]=-1;for(var p=[],s=0;s<t.length;++s){var m=t[s];n[m[0]]&&n[m[1]]&&p.push([f[m[0]],f[m[1]]])}return[p,d]}e.exports=n;var i=t("edges-to-adjacency-list")},{"edges-to-adjacency-list":127}],483:[function(t,e,r){"use strict";function n(t,e){for(var r=new Array(t),n=0;n<t;++n)r[n]=e;return r}function i(t){for(var e=new Array(t),r=0;r<t;++r)e[r]=[];return e}function a(t,e){function r(t){for(var r=t.length,n=[0],i=0;i<r;++i){var a=e[t[i]],o=e[t[(i+1)%r]],s=u(-a[0],a[1]),l=u(-a[0],o[1]),h=u(o[0],a[1]),f=u(o[0],o[1]);n=c(n,c(c(s,l),c(h,f)))}return n[n.length-1]>0}function a(t){for(var e=t.length,r=0;r<e;++r)if(!P[t[r]])return!1;return!0}var d=f(t,e);t=d[0],e=d[1];for(var p=e.length,m=(t.length,o(t,e.length)),g=0;g<p;++g)if(m[g].length%2==1)throw new Error("planar-graph-to-polyline: graph must be manifold");var v=s(t,e);v=v.filter(r);for(var y=v.length,b=new Array(y),x=new Array(y),g=0;g<y;++g){b[g]=g;var _=new Array(y),w=v[g].map(function(t){return e[t]}),M=l([w]),k=0;t:for(var A=0;A<y;++A)if(_[A]=0,g!==A){for(var T=v[A],S=T.length,E=0;E<S;++E){var L=M(e[T[E]]);if(0!==L){L<0&&(_[A]=1,k+=1);continue t}}_[A]=1,k+=1}x[g]=[k,g,_]}x.sort(function(t,e){return e[0]-t[0]});for(var g=0;g<y;++g)for(var _=x[g],C=_[1],I=_[2],A=0;A<y;++A)I[A]&&(b[A]=C);for(var z=i(y),g=0;g<y;++g)z[g].push(b[g]),z[b[g]].push(g);for(var D={},P=n(p,!1),g=0;g<y;++g)for(var T=v[g],S=T.length,A=0;A<S;++A){var O=T[A],R=T[(A+1)%S],F=Math.min(O,R)+":"+Math.max(O,R);if(F in D){var j=D[F];z[j].push(g),z[g].push(j),P[O]=P[R]=!0}else D[F]=g}for(var N=[],B=n(y,-1),g=0;g<y;++g)b[g]!==g||a(v[g])?B[g]=-1:(N.push(g),B[g]=0);for(var d=[];N.length>0;){var U=N.pop(),V=z[U];h(V,function(t,e){return t-e});var H,q=V.length,G=B[U];if(0===G){var T=v[U];H=[T]}for(var g=0;g<q;++g){var Y=V[g];if(!(B[Y]>=0)&&(B[Y]=1^G,N.push(Y),0===G)){var T=v[Y];a(T)||(T.reverse(),H.push(T))}}0===G&&d.push(H)}return d}e.exports=a
;var o=t("edges-to-adjacency-list"),s=t("planar-dual"),l=t("point-in-big-polygon"),u=t("two-product"),c=t("robust-sum"),h=t("uniq"),f=t("./lib/trim-leaves")},{"./lib/trim-leaves":482,"edges-to-adjacency-list":127,"planar-dual":481,"point-in-big-polygon":485,"robust-sum":513,"two-product":539,uniq:543}],484:[function(t,e,r){"use strict";function n(t,e){this.x=t,this.y=e}e.exports=n,n.prototype={clone:function(){return new n(this.x,this.y)},add:function(t){return this.clone()._add(t)},sub:function(t){return this.clone()._sub(t)},mult:function(t){return this.clone()._mult(t)},div:function(t){return this.clone()._div(t)},rotate:function(t){return this.clone()._rotate(t)},matMult:function(t){return this.clone()._matMult(t)},unit:function(){return this.clone()._unit()},perp:function(){return this.clone()._perp()},round:function(){return this.clone()._round()},mag:function(){return Math.sqrt(this.x*this.x+this.y*this.y)},equals:function(t){return this.x===t.x&&this.y===t.y},dist:function(t){return Math.sqrt(this.distSqr(t))},distSqr:function(t){var e=t.x-this.x,r=t.y-this.y;return e*e+r*r},angle:function(){return Math.atan2(this.y,this.x)},angleTo:function(t){return Math.atan2(this.y-t.y,this.x-t.x)},angleWith:function(t){return this.angleWithSep(t.x,t.y)},angleWithSep:function(t,e){return Math.atan2(this.x*e-this.y*t,this.x*t+this.y*e)},_matMult:function(t){var e=t[0]*this.x+t[1]*this.y,r=t[2]*this.x+t[3]*this.y;return this.x=e,this.y=r,this},_add:function(t){return this.x+=t.x,this.y+=t.y,this},_sub:function(t){return this.x-=t.x,this.y-=t.y,this},_mult:function(t){return this.x*=t,this.y*=t,this},_div:function(t){return this.x/=t,this.y/=t,this},_unit:function(){return this._div(this.mag()),this},_perp:function(){var t=this.y;return this.y=this.x,this.x=-t,this},_rotate:function(t){var e=Math.cos(t),r=Math.sin(t),n=e*this.x-r*this.y,i=r*this.x+e*this.y;return this.x=n,this.y=i,this},_round:function(){return this.x=Math.round(this.x),this.y=Math.round(this.y),this}},n.convert=function(t){return t instanceof n?t:Array.isArray(t)?new n(t[0],t[1]):t}},{}],485:[function(t,e,r){function n(){return!0}function i(t){return function(e,r){var i=t[e];return!!i&&!!i.queryPoint(r,n)}}function a(t){for(var e={},r=0;r<t.length;++r){var n=t[r],a=n[0][0],o=n[0][1],s=n[1][1],l=[Math.min(o,s),Math.max(o,s)];a in e?e[a].push(l):e[a]=[l]}for(var u={},c=Object.keys(e),r=0;r<c.length;++r){var h=e[c[r]];u[c[r]]=d(h)}return i(u)}function o(t,e){return function(r){var n=p.le(e,r[0]);if(n<0)return 1;var i=t[n];if(!i){if(!(n>0&&e[n]===r[0]))return 1;i=t[n-1]}for(var a=1;i;){var o=i.key,s=h(r,o[0],o[1]);if(o[0][0]<o[1][0])if(s<0)i=i.left;else{if(!(s>0))return 0;a=-1,i=i.right}else if(s>0)i=i.left;else{if(!(s<0))return 0;a=1,i=i.right}}return a}}function s(t){return 1}function l(t){return function(e){return t(e[0],e[1])?0:1}}function u(t,e){return function(r){return t(r[0],r[1])?0:e(r)}}function c(t){for(var e=t.length,r=[],n=[],i=0;i<e;++i)for(var c=t[i],h=c.length,d=h-1,p=0;p<h;d=p++){var m=c[d],g=c[p];m[0]===g[0]?n.push([m,g]):r.push([m,g])}if(0===r.length)return 0===n.length?s:l(a(n));var v=f(r),y=o(v.slabs,v.coordinates);return 0===n.length?y:u(a(n),y)}e.exports=c;var h=t("robust-orientation")[3],f=t("slab-decomposition"),d=t("interval-tree-1d"),p=t("binary-search-bounds")},{"binary-search-bounds":66,"interval-tree-1d":291,"robust-orientation":508,"slab-decomposition":525}],486:[function(t,e,r){"use strict";function n(t,e,r,n,s){i.length<n.length&&(i=new Float64Array(n.length),a=new Float64Array(n.length),o=new Float64Array(n.length));for(var l=0;l<n.length;++l)i[l]=t[l]-n[l],a[l]=e[l]-t[l],o[l]=r[l]-t[l];for(var u=0,c=0,h=0,f=0,d=0,p=0,l=0;l<n.length;++l){var m=a[l],g=o[l],v=i[l];u+=m*m,c+=m*g,h+=g*g,f+=v*m,d+=v*g,p+=v*v}var y,b=Math.abs(u*h-c*c),x=c*d-h*f,_=c*f-u*d;if(x+_<=b)if(x<0)_<0&&f<0?(_=0,-f>=u?(x=1,y=u+2*f+p):(x=-f/u,y=f*x+p)):(x=0,d>=0?(_=0,y=p):-d>=h?(_=1,y=h+2*d+p):(_=-d/h,y=d*_+p));else if(_<0)_=0,f>=0?(x=0,y=p):-f>=u?(x=1,y=u+2*f+p):(x=-f/u,y=f*x+p);else{var w=1/b;x*=w,_*=w,y=x*(u*x+c*_+2*f)+_*(c*x+h*_+2*d)+p}else{var M,k,A,T;x<0?(M=c+f,k=h+d,k>M?(A=k-M,T=u-2*c+h,A>=T?(x=1,_=0,y=u+2*f+p):(x=A/T,_=1-x,y=x*(u*x+c*_+2*f)+_*(c*x+h*_+2*d)+p)):(x=0,k<=0?(_=1,y=h+2*d+p):d>=0?(_=0,y=p):(_=-d/h,y=d*_+p))):_<0?(M=c+d,k=u+f,k>M?(A=k-M,T=u-2*c+h,A>=T?(_=1,x=0,y=h+2*d+p):(_=A/T,x=1-_,y=x*(u*x+c*_+2*f)+_*(c*x+h*_+2*d)+p)):(_=0,k<=0?(x=1,y=u+2*f+p):f>=0?(x=0,y=p):(x=-f/u,y=f*x+p))):(A=h+d-c-f,A<=0?(x=0,_=1,y=h+2*d+p):(T=u-2*c+h,A>=T?(x=1,_=0,y=u+2*f+p):(x=A/T,_=1-x,y=x*(u*x+c*_+2*f)+_*(c*x+h*_+2*d)+p)))}for(var S=1-x-_,l=0;l<n.length;++l)s[l]=S*t[l]+x*e[l]+_*r[l];return y<0?0:y}var i=new Float64Array(4),a=new Float64Array(4),o=new Float64Array(4);e.exports=n},{}],487:[function(t,e,r){function n(){throw new Error("setTimeout has not been defined")}function i(){throw new Error("clearTimeout has not been defined")}function a(t){if(h===setTimeout)return setTimeout(t,0);if((h===n||!h)&&setTimeout)return h=setTimeout,setTimeout(t,0);try{return h(t,0)}catch(e){try{return h.call(null,t,0)}catch(e){return h.call(this,t,0)}}}function o(t){if(f===clearTimeout)return clearTimeout(t);if((f===i||!f)&&clearTimeout)return f=clearTimeout,clearTimeout(t);try{return f(t)}catch(e){try{return f.call(null,t)}catch(e){return f.call(this,t)}}}function s(){g&&p&&(g=!1,p.length?m=p.concat(m):v=-1,m.length&&l())}function l(){if(!g){var t=a(s);g=!0;for(var e=m.length;e;){for(p=m,m=[];++v<e;)p&&p[v].run();v=-1,e=m.length}p=null,g=!1,o(t)}}function u(t,e){this.fun=t,this.array=e}function c(){}var h,f,d=e.exports={};!function(){try{h="function"==typeof setTimeout?setTimeout:n}catch(t){h=n}try{f="function"==typeof clearTimeout?clearTimeout:i}catch(t){f=i}}();var p,m=[],g=!1,v=-1;d.nextTick=function(t){var e=new Array(arguments.length-1);if(arguments.length>1)for(var r=1;r<arguments.length;r++)e[r-1]=arguments[r];m.push(new u(t,e)),1!==m.length||g||a(l)},u.prototype.run=function(){this.fun.apply(null,this.array)},d.title="browser",d.browser=!0,d.env={},d.argv=[],d.version="",d.versions={},d.on=c,d.addListener=c,d.once=c,d.off=c,d.removeListener=c,d.removeAllListeners=c,d.emit=c,d.prependListener=c,d.prependOnceListener=c,d.listeners=function(t){return[]},d.binding=function(t){throw new Error("process.binding is not supported")},d.cwd=function(){return"/"},d.chdir=function(t){throw new Error("process.chdir is not supported")},d.umask=function(){return 0}},{}],488:[function(e,r,n){(function(e){!function(i){function a(t){throw new RangeError(P[t])}function o(t,e){for(var r=t.length,n=[];r--;)n[r]=e(t[r]);return n}function s(t,e){var r=t.split("@"),n="";return r.length>1&&(n=r[0]+"@",t=r[1]),t=t.replace(D,"."),n+o(t.split("."),e).join(".")}function l(t){for(var e,r,n=[],i=0,a=t.length;i<a;)e=t.charCodeAt(i++),e>=55296&&e<=56319&&i<a?(r=t.charCodeAt(i++),56320==(64512&r)?n.push(((1023&e)<<10)+(1023&r)+65536):(n.push(e),i--)):n.push(e);return n}function u(t){return o(t,function(t){var e="";return t>65535&&(t-=65536,e+=F(t>>>10&1023|55296),t=56320|1023&t),e+=F(t)}).join("")}function c(t){return t-48<10?t-22:t-65<26?t-65:t-97<26?t-97:M}function h(t,e){return t+22+75*(t<26)-((0!=e)<<5)}function f(t,e,r){var n=0;for(t=r?R(t/S):t>>1,t+=R(t/e);t>O*A>>1;n+=M)t=R(t/O);return R(n+(O+1)*t/(t+T))}function d(t){var e,r,n,i,o,s,l,h,d,p,m=[],g=t.length,v=0,y=L,b=E;for(r=t.lastIndexOf(C),r<0&&(r=0),n=0;n<r;++n)t.charCodeAt(n)>=128&&a("not-basic"),m.push(t.charCodeAt(n));for(i=r>0?r+1:0;i<g;){for(o=v,s=1,l=M;i>=g&&a("invalid-input"),h=c(t.charCodeAt(i++)),(h>=M||h>R((w-v)/s))&&a("overflow"),v+=h*s,d=l<=b?k:l>=b+A?A:l-b,!(h<d);l+=M)p=M-d,s>R(w/p)&&a("overflow"),s*=p;e=m.length+1,b=f(v-o,e,0==o),R(v/e)>w-y&&a("overflow"),y+=R(v/e),v%=e,m.splice(v++,0,y)}return u(m)}function p(t){var e,r,n,i,o,s,u,c,d,p,m,g,v,y,b,x=[];for(t=l(t),g=t.length,e=L,r=0,o=E,s=0;s<g;++s)(m=t[s])<128&&x.push(F(m));for(n=i=x.length,i&&x.push(C);n<g;){for(u=w,s=0;s<g;++s)(m=t[s])>=e&&m<u&&(u=m);for(v=n+1,u-e>R((w-r)/v)&&a("overflow"),r+=(u-e)*v,e=u,s=0;s<g;++s)if(m=t[s],m<e&&++r>w&&a("overflow"),m==e){for(c=r,d=M;p=d<=o?k:d>=o+A?A:d-o,!(c<p);d+=M)b=c-p,y=M-p,x.push(F(h(p+b%y,0))),c=R(b/y);x.push(F(h(c,0))),o=f(r,v,n==i),r=0,++n}++r,++e}return x.join("")}function m(t){return s(t,function(t){return I.test(t)?d(t.slice(4).toLowerCase()):t})}function g(t){return s(t,function(t){return z.test(t)?"xn--"+p(t):t})}var v="object"==typeof n&&n&&!n.nodeType&&n,y="object"==typeof r&&r&&!r.nodeType&&r,b="object"==typeof e&&e;b.global!==b&&b.window!==b&&b.self!==b||(i=b);var x,_,w=2147483647,M=36,k=1,A=26,T=38,S=700,E=72,L=128,C="-",I=/^xn--/,z=/[^\x20-\x7E]/,D=/[\x2E\u3002\uFF0E\uFF61]/g,P={overflow:"Overflow: input needs wider integers to process","not-basic":"Illegal input >= 0x80 (not a basic code point)","invalid-input":"Invalid input"},O=M-k,R=Math.floor,F=String.fromCharCode;if(x={version:"1.4.1",ucs2:{decode:l,encode:u},decode:d,encode:p,toASCII:g,toUnicode:m},"function"==typeof t&&"object"==typeof t.amd&&t.amd)t("punycode",function(){return x});else if(v&&y)if(r.exports==v)y.exports=x;else for(_ in x)x.hasOwnProperty(_)&&(v[_]=x[_]);else i.punycode=x}(this)}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],489:[function(t,e,r){e.exports=t("gl-quat/slerp")},{"gl-quat/slerp":231}],490:[function(t,e,r){"use strict";function n(t,e){return Object.prototype.hasOwnProperty.call(t,e)}e.exports=function(t,e,r,a){e=e||"&",r=r||"=";var o={};if("string"!=typeof t||0===t.length)return o;var s=/\+/g;t=t.split(e);var l=1e3;a&&"number"==typeof a.maxKeys&&(l=a.maxKeys);var u=t.length;l>0&&u>l&&(u=l);for(var c=0;c<u;++c){var h,f,d,p,m=t[c].replace(s,"%20"),g=m.indexOf(r);g>=0?(h=m.substr(0,g),f=m.substr(g+1)):(h=m,f=""),d=decodeURIComponent(h),p=decodeURIComponent(f),n(o,d)?i(o[d])?o[d].push(p):o[d]=[o[d],p]:o[d]=p}return o};var i=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)}},{}],491:[function(t,e,r){"use strict";function n(t,e){if(t.map)return t.map(e);for(var r=[],n=0;n<t.length;n++)r.push(e(t[n],n));return r}var i=function(t){switch(typeof t){case"string":return t;case"boolean":return t?"true":"false";case"number":return isFinite(t)?t:"";default:return""}};e.exports=function(t,e,r,s){return e=e||"&",r=r||"=",null===t&&(t=void 0),"object"==typeof t?n(o(t),function(o){var s=encodeURIComponent(i(o))+r;return a(t[o])?n(t[o],function(t){return s+encodeURIComponent(i(t))}).join(e):s+encodeURIComponent(i(t[o]))}).join(e):s?encodeURIComponent(i(s))+r+encodeURIComponent(i(t)):""};var a=Array.isArray||function(t){return"[object Array]"===Object.prototype.toString.call(t)},o=Object.keys||function(t){var e=[];for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&e.push(r);return e}},{}],492:[function(t,e,r){"use strict";r.decode=r.parse=t("./decode"),r.encode=r.stringify=t("./encode")},{"./decode":490,"./encode":491}],493:[function(t,e,r){"use strict";function n(t,e,r,o,s){for(r=r||0,o=o||t.length-1,s=s||a;o>r;){if(o-r>600){var l=o-r+1,u=e-r+1,c=Math.log(l),h=.5*Math.exp(2*c/3),f=.5*Math.sqrt(c*h*(l-h)/l)*(u-l/2<0?-1:1);n(t,e,Math.max(r,Math.floor(e-u*h/l+f)),Math.min(o,Math.floor(e+(l-u)*h/l+f)),s)}var d=t[e],p=r,m=o;for(i(t,r,e),s(t[o],d)>0&&i(t,r,o);p<m;){for(i(t,p,m),p++,m--;s(t[p],d)<0;)p++;for(;s(t[m],d)>0;)m--}0===s(t[r],d)?i(t,r,m):(m++,i(t,m,o)),m<=e&&(r=m+1),e<=m&&(o=m-1)}}function i(t,e,r){var n=t[e];t[e]=t[r],t[r]=n}function a(t,e){return t<e?-1:t>e?1:0}e.exports=n},{}],494:[function(t,e,r){"use strict";function n(t,e){for(var r=t.length,n=new Array(r),a=0;a<r;++a)n[a]=i(t[a],e[a]);return n}var i=t("big-rat/add");e.exports=n},{"big-rat/add":50}],495:[function(t,e,r){"use strict";function n(t){for(var e=new Array(t.length),r=0;r<t.length;++r)e[r]=i(t[r]);return e}e.exports=n;var i=t("big-rat")},{"big-rat":53}],496:[function(t,e,r){"use strict";function n(t,e){for(var r=i(e),n=t.length,o=new Array(n),s=0;s<n;++s)o[s]=a(t[s],r);return o}var i=t("big-rat"),a=t("big-rat/mul");e.exports=n},{"big-rat":53,"big-rat/mul":62}],497:[function(t,e,r){"use strict";function n(t,e){for(var r=t.length,n=new Array(r),a=0;a<r;++a)n[a]=i(t[a],e[a]);return n}var i=t("big-rat/sub");e.exports=n},{"big-rat/sub":64}],498:[function(t,e,r){"use strict";function n(t){t.sort(a);for(var e=t.length,r=0,n=0;n<e;++n){var s=t[n],l=o(s);if(0!==l){if(r>0){var u=t[r-1];if(0===i(s,u)&&o(u)!==l){r-=1;continue}}t[r++]=s}}return t.length=r,t}var i=t("compare-cell"),a=t("compare-oriented-cell"),o=t("cell-orientation");e.exports=n},{"cell-orientation":85,"compare-cell":101,"compare-oriented-cell":102}],499:[function(e,r,n){!function(e,i){"object"==typeof n&&void 0!==r?r.exports=i():"function"==typeof t&&t.amd?t(i):e.createREGL=i()}(this,function(){"use strict";function t(t){return"undefined"!=typeof btoa?btoa(t):"base64:"+t}function e(t){var e=new Error("(regl) "+t);throw console.error(e),e}function r(t,r){t||e(r)}function n(t){return t?": "+t:""}function i(t,r,i){t in r||e("unknown parameter ("+t+")"+n(i)+". possible values: "+Object.keys(r).join())}function a(t,r){Qt(t)||e("invalid parameter type"+n(r)+". must be a typed array")}function o(t,r,i){typeof t!==r&&e("invalid parameter type"+n(i)+". expected "+r+", got "+typeof t)}function s(t,r){t>=0&&(0|t)===t||e("invalid parameter type, ("+t+")"+n(r)+". must be a nonnegative integer")}function l(t,r,i){r.indexOf(t)<0&&e("invalid value"+n(i)+". must be one of: "+r)}function u(t){Object.keys(t).forEach(function(t){te.indexOf(t)<0&&e('invalid regl constructor argument "'+t+'". must be one of '+te)})}function c(t,e){for(t+="";t.length<e;)t=" "+t;return t}function h(){this.name="unknown",this.lines=[],this.index={},this.hasErrors=!1}function f(t,e){this.number=t,this.line=e,this.errors=[]}function d(t,e,r){this.file=t,this.line=e,this.message=r}function p(){var t=new Error,e=(t.stack||t).toString(),r=/compileProcedure.*\n\s*at.*\((.*)\)/.exec(e);if(r)return r[1];var n=/compileProcedure.*\n\s*at\s+(.*)(\n|$)/.exec(e);return n?n[1]:"unknown"}function m(){var t=new Error,e=(t.stack||t).toString(),r=/at REGLCommand.*\n\s+at.*\((.*)\)/.exec(e);if(r)return r[1];var n=/at REGLCommand.*\n\s+at\s+(.*)\n/.exec(e);return n?n[1]:"unknown"}function g(e,r){var n=e.split("\n"),i=1,a=0,o={unknown:new h,0:new h};o.unknown.name=o[0].name=r||p(),o.unknown.lines.push(new f(0,""));for(var s=0;s<n.length;++s){var l=n[s],u=/^\s*\#\s*(\w+)\s+(.+)\s*$/.exec(l);if(u)switch(u[1]){case"line":var c=/(\d+)(\s+\d+)?/.exec(u[2]);c&&(i=0|c[1],c[2]&&((a=0|c[2])in o||(o[a]=new h)));break;case"define":var d=/SHADER_NAME(_B64)?\s+(.*)$/.exec(u[2]);d&&(o[a].name=d[1]?t(d[2]):d[2])}o[a].lines.push(new f(i++,l))}return Object.keys(o).forEach(function(t){var e=o[t];e.lines.forEach(function(t){e.index[t.number]=t})}),o}function v(t){var e=[];return t.split("\n").forEach(function(t){if(!(t.length<5)){var r=/^ERROR\:\s+(\d+)\:(\d+)\:\s*(.*)$/.exec(t);r?e.push(new d(0|r[1],0|r[2],r[3].trim())):t.length>0&&e.push(new d("unknown",0,t))}}),e}function y(t,e){e.forEach(function(e){var r=t[e.file];if(r){var n=r.index[e.line];if(n)return n.errors.push(e),void(r.hasErrors=!0)}t.unknown.hasErrors=!0,t.unknown.lines[0].errors.push(e)})}function b(t,e,n,i,a){if(!t.getShaderParameter(e,t.COMPILE_STATUS)){var o=t.getShaderInfoLog(e),s=i===t.FRAGMENT_SHADER?"fragment":"vertex";T(n,"string",s+" shader source must be a string",a);var l=g(n,a),u=v(o);y(l,u),Object.keys(l).forEach(function(t){function e(t,e){n.push(t),i.push(e||"")}var r=l[t];if(r.hasErrors){var n=[""],i=[""];e("file number "+t+": "+r.name+"\n","color:red;text-decoration:underline;font-weight:bold"),r.lines.forEach(function(t){if(t.errors.length>0){e(c(t.number,4)+"| ","background-color:yellow; font-weight:bold"),e(t.line+"\n","color:red; background-color:yellow; font-weight:bold");var r=0;t.errors.forEach(function(n){var i=n.message,a=/^\s*\'(.*)\'\s*\:\s*(.*)$/.exec(i);if(a){var o=a[1];switch(i=a[2],o){case"assign":o="="}r=Math.max(t.line.indexOf(o,r),0)}else r=0;e(c("| ",6)),e(c("^^^",r+3)+"\n","font-weight:bold"),e(c("| ",6)),e(i+"\n","font-weight:bold")}),e(c("| ",6)+"\n")}else e(c(t.number,4)+"| "),e(t.line+"\n","color:red")}),"undefined"!=typeof document?(i[0]=n.join("%c"),console.log.apply(console,i)):console.log(n.join(""))}}),r.raise("Error compiling "+s+" shader, "+l[0].name)}}function x(t,e,n,i,a){if(!t.getProgramParameter(e,t.LINK_STATUS)){var o=t.getProgramInfoLog(e),s=g(n,a),l=g(i,a),u='Error linking program with vertex shader, "'+l[0].name+'", and fragment shader "'+s[0].name+'"';"undefined"!=typeof document?console.log("%c"+u+"\n%c"+o,"color:red;text-decoration:underline;font-weight:bold","color:red"):console.log(u+"\n"+o),r.raise(u)}}function _(t){t._commandRef=p()}function w(t,e,r,n){function i(t){return t?n.id(t):0}function a(t,e){Object.keys(e).forEach(function(e){t[n.id(e)]=!0})}_(t),t._fragId=i(t.static.frag),t._vertId=i(t.static.vert);var o=t._uniformSet={};a(o,e.static),a(o,e.dynamic);var s=t._attributeSet={};a(s,r.static),a(s,r.dynamic),t._hasCount="count"in t.static||"count"in t.dynamic||"elements"in t.static||"elements"in t.dynamic}function M(t,r){var n=m();e(t+" in command "+(r||p())+("unknown"===n?"":" called from "+n))}function k(t,e,r){t||M(e,r||p())}function A(t,e,r,i){t in e||M("unknown parameter ("+t+")"+n(r)+". possible values: "+Object.keys(e).join(),i||p())}function T(t,e,r,i){typeof t!==e&&M("invalid parameter type"+n(r)+". expected "+e+", got "+typeof t,i||p())}function S(t){t()}function E(t,e,r){t.texture?l(t.texture._texture.internalformat,e,"unsupported texture format for attachment"):l(t.renderbuffer._renderbuffer.format,r,"unsupported renderbuffer format for attachment")}function L(t,e){return t===ue||t===le||t===ce?2:t===he?4:fe[t]*e}function C(t){return!(t&t-1||!t)}function I(t,e,n){var i,a=e.width,o=e.height,s=e.channels;r(a>0&&a<=n.maxTextureSize&&o>0&&o<=n.maxTextureSize,"invalid texture shape"),t.wrapS===ee&&t.wrapT===ee||r(C(a)&&C(o),"incompatible wrap mode for texture, both width and height must be power of 2"),1===e.mipmask?1!==a&&1!==o&&r(t.minFilter!==ne&&t.minFilter!==ae&&t.minFilter!==ie&&t.minFilter!==oe,"min filter requires mipmap"):(r(C(a)&&C(o),"texture must be a square power of 2 to support mipmapping"),r(e.mipmask===(a<<1)-1,"missing or incomplete mipmap data")),e.type===se&&(n.extensions.indexOf("oes_texture_float_linear")<0&&r(t.minFilter===re&&t.magFilter===re,"filter not supported, must enable oes_texture_float_linear"),r(!t.genMipmaps,"mipmap generation not supported with float textures"));var l=e.images;for(i=0;i<16;++i)if(l[i]){var u=a>>i,c=o>>i;r(e.mipmask&1<<i,"missing mipmap data");var h=l[i];if(r(h.width===u&&h.height===c,"invalid shape for mip images"),r(h.format===e.format&&h.internalformat===e.internalformat&&h.type===e.type,"incompatible type for mip image"),h.compressed);else if(h.data){var f=Math.ceil(L(h.type,s)*u/h.unpackAlignment)*h.unpackAlignment;r(h.data.byteLength===f*c,"invalid data for image, buffer size is inconsistent with image format")}else h.element||h.copy}else t.genMipmaps||r(0==(e.mipmask&1<<i),"extra mipmap data");e.compressed&&r(!t.genMipmaps,"mipmap generation for compressed images not supported")}function z(t,e,n,i){var a=t.width,o=t.height,s=t.channels;r(a>0&&a<=i.maxTextureSize&&o>0&&o<=i.maxTextureSize,"invalid texture shape"),r(a===o,"cube map must be square"),r(e.wrapS===ee&&e.wrapT===ee,"wrap mode not supported by cube map");for(var l=0;l<n.length;++l){var u=n[l];r(u.width===a&&u.height===o,"inconsistent cube map face shape"),e.genMipmaps&&(r(!u.compressed,"can not generate mipmap for compressed textures"),r(1===u.mipmask,"can not specify mipmaps and generate mipmaps"));for(var c=u.images,h=0;h<16;++h){var f=c[h];if(f){var d=a>>h,p=o>>h;r(u.mipmask&1<<h,"missing mipmap data"),r(f.width===d&&f.height===p,"invalid shape for mip images"),r(f.format===t.format&&f.internalformat===t.internalformat&&f.type===t.type,"incompatible type for mip image"),f.compressed||(f.data?r(f.data.byteLength===d*p*Math.max(L(f.type,s),f.unpackAlignment),"invalid data for image, buffer size is inconsistent with image format"):f.element||f.copy)}}}}function D(t,e){this.id=pe++,this.type=t,this.data=e}function P(t){return t.replace(/\\/g,"\\\\").replace(/"/g,'\\"')}function O(t){if(0===t.length)return[];var e=t.charAt(0),r=t.charAt(t.length-1);if(t.length>1&&e===r&&('"'===e||"'"===e))return['"'+P(t.substr(1,t.length-2))+'"'];var n=/\[(false|true|null|\d+|'[^']*'|"[^"]*")\]/.exec(t);if(n)return O(t.substr(0,n.index)).concat(O(n[1])).concat(O(t.substr(n.index+n[0].length)));var i=t.split(".");if(1===i.length)return['"'+P(t)+'"'];for(var a=[],o=0;o<i.length;++o)a=a.concat(O(i[o]));return a}function R(t){return"["+O(t).join("][")+"]"}function F(t,e){return new D(t,R(e+""))}function j(t){return"function"==typeof t&&!t._reglType||t instanceof D}function N(t,e){return"function"==typeof t?new D(me,t):t}function B(){var t={"":0},e=[""];return{id:function(r){var n=t[r];return n||(n=t[r]=e.length,e.push(r),n)},str:function(t){return e[t]}}}function U(t,e,r){function n(){var e=window.innerWidth,n=window.innerHeight;if(t!==document.body){var i=t.getBoundingClientRect();e=i.right-i.left,n=i.bottom-i.top}a.width=r*e,a.height=r*n,$t(a.style,{width:e+"px",height:n+"px"})}function i(){window.removeEventListener("resize",n),t.removeChild(a)}var a=document.createElement("canvas");return $t(a.style,{border:0,margin:0,padding:0,top:0,left:0}),t.appendChild(a),t===document.body&&(a.style.position="absolute",$t(t.style,{margin:0,padding:0})),window.addEventListener("resize",n,!1),n(),{canvas:a,onDestroy:i}}function V(t,e){function r(r){try{return t.getContext(r,e)}catch(t){return null}}return r("webgl")||r("experimental-webgl")||r("webgl-experimental")}function H(t){return"string"==typeof t.nodeName&&"function"==typeof t.appendChild&&"function"==typeof t.getBoundingClientRect}function q(t){return"function"==typeof t.drawArrays||"function"==typeof t.drawElements}function G(t){return"string"==typeof t?t.split():(de(Array.isArray(t),"invalid extension array"),t)}function Y(t){return"string"==typeof t?(de("undefined"!=typeof document,"not supported outside of DOM"),document.querySelector(t)):t}function W(t){var e,r,n,i,a=t||{},o={},s=[],l=[],u="undefined"==typeof window?1:window.devicePixelRatio,c=!1,h=function(t){t&&de.raise(t)},f=function(){};if("string"==typeof a?(de("undefined"!=typeof document,"selector queries only supported in DOM enviroments"),e=document.querySelector(a),de(e,"invalid query string for element")):"object"==typeof a?H(a)?e=a:q(a)?(i=a,n=i.canvas):(de.constructor(a),"gl"in a?i=a.gl:"canvas"in a?n=Y(a.canvas):"container"in a&&(r=Y(a.container)),"attributes"in a&&(o=a.attributes,de.type(o,"object","invalid context attributes")),"extensions"in a&&(s=G(a.extensions)),"optionalExtensions"in a&&(l=G(a.optionalExtensions)),"onDone"in a&&(de.type(a.onDone,"function","invalid or missing onDone callback"),h=a.onDone),"profile"in a&&(c=!!a.profile),"pixelRatio"in a&&(u=+a.pixelRatio,de(u>0,"invalid pixel ratio"))):de.raise("invalid arguments to regl"),e&&("canvas"===e.nodeName.toLowerCase()?n=e:r=e),!i){if(!n){de("undefined"!=typeof document,"must manually specify webgl context outside of DOM environments");var d=U(r||document.body,h,u);if(!d)return null;n=d.canvas,f=d.onDestroy}i=V(n,o)}return i?{gl:i,canvas:n,container:r,extensions:s,optionalExtensions:l,pixelRatio:u,profile:c,onDone:h,onDestroy:f}:(f(),h("webgl not supported, try upgrading your browser or graphics drivers http://get.webgl.org"),null)}function X(t,e){function r(e){de.type(e,"string","extension name must be string");var r,i=e.toLowerCase();try{r=n[i]=t.getExtension(i)}catch(t){}return!!r}for(var n={},i=0;i<e.extensions.length;++i){var a=e.extensions[i];if(!r(a))return e.onDestroy(),e.onDone('"'+a+'" extension is not supported by the current WebGL context, try upgrading your system or a different browser'),null}return e.optionalExtensions.forEach(r),{extensions:n,restore:function(){Object.keys(n).forEach(function(t){if(!r(t))throw new Error("(regl): error restoring extension "+t)})}}}function Z(t){return!!t&&"object"==typeof t&&Array.isArray(t.shape)&&Array.isArray(t.stride)&&"number"==typeof t.offset&&t.shape.length===t.stride.length&&(Array.isArray(t.data)||Qt(t.data))}function J(t,e){for(var r=Array(t),n=0;n<t;++n)r[n]=e(n);return r}function K(t){for(var e=16;e<=1<<28;e*=16)if(t<=e)return e;return 0}function Q(t){var e,r;return e=(t>65535)<<4,t>>>=e,r=(t>255)<<3,t>>>=r,e|=r,r=(t>15)<<2,t>>>=r,e|=r,r=(t>3)<<1,t>>>=r,(e|=r)|t>>1}function $(t){var e=K(t),r=Ee[Q(e)>>2];return r.length>0?r.pop():new ArrayBuffer(e)}function tt(t){Ee[Q(t.byteLength)>>2].push(t)}function et(t,e){var r=null;switch(t){case _e:r=new Int8Array($(e),0,e);break;case we:r=new Uint8Array($(e),0,e);break;case Me:r=new Int16Array($(2*e),0,e);break;case ke:r=new Uint16Array($(2*e),0,e);break;case Ae:r=new Int32Array($(4*e),0,e);break;case Te:r=new Uint32Array($(4*e),0,e);break;case Se:r=new Float32Array($(4*e),0,e);break;default:return null}return r.length!==e?r.subarray(0,e):r}function rt(t){tt(t.buffer)}function nt(t,e,r){for(var n=0;n<e;++n)r[n]=t[n]}function it(t,e,r,n){for(var i=0,a=0;a<e;++a)for(var o=t[a],s=0;s<r;++s)n[i++]=o[s]}function at(t,e,r,n,i,a){for(var o=a,s=0;s<e;++s)for(var l=t[s],u=0;u<r;++u)for(var c=l[u],h=0;h<n;++h)i[o++]=c[h]}function ot(t,e,r,n,i){for(var a=1,o=r+1;o<e.length;++o)a*=e[o];var s=e[r];if(e.length-r==4){var l=e[r+1],u=e[r+2],c=e[r+3];for(o=0;o<s;++o)at(t[o],l,u,c,n,i),i+=a}else for(o=0;o<s;++o)ot(t[o],e,r+1,n,i),i+=a}function st(t,e,r,n){var i=1;if(e.length)for(var a=0;a<e.length;++a)i*=e[a];else i=0;var o=n||Le.allocType(r,i);switch(e.length){case 0:break;case 1:nt(t,e[0],o);break;case 2:it(t,e[0],e[1],o);break;case 3:at(t,e[0],e[1],e[2],o,0);break;default:ot(t,e,0,o,0)}return o}function lt(t){for(var e=[],r=t;r.length;r=r[0])e.push(r.length);return e}function ut(t){return 0|Kt[Object.prototype.toString.call(t)]}function ct(t,e){for(var r=0;r<e.length;++r)t[r]=e[r]}function ht(t,e,r,n,i,a,o){for(var s=0,l=0;l<r;++l)for(var u=0;u<n;++u)t[s++]=e[i*l+a*u+o]}function ft(t,e,r){function n(e){this.id=h++,this.buffer=t.createBuffer(),this.type=e,this.usage=Oe,this.byteLength=0,this.dimension=1,this.dtype=Fe,this.persistentData=null,r.profile&&(this.stats={size:0})}function i(t,e){var r=d.pop();return r||(r=new n(t)),r.bind(),s(r,e,Re,0,1,!1),r}function a(t){d.push(t)}function o(e,r,n){e.byteLength=r.byteLength,t.bufferData(e.type,r,n)}function s(t,e,r,n,i,a){var s;if(t.usage=r,Array.isArray(e)){if(t.dtype=n||je,e.length>0){var l;if(Array.isArray(e[0])){s=Pe(e);for(var u=1,c=1;c<s.length;++c)u*=s[c];t.dimension=u,l=De(e,s,t.dtype),o(t,l,r),a?t.persistentData=l:Le.freeType(l)}else if("number"==typeof e[0]){t.dimension=i;var h=Le.allocType(t.dtype,e.length);ct(h,e),o(t,h,r),a?t.persistentData=h:Le.freeType(h)}else Qt(e[0])?(t.dimension=e[0].length,t.dtype=n||ut(e[0])||je,l=De(e,[e.length,e[0].length],t.dtype),o(t,l,r),a?t.persistentData=l:Le.freeType(l)):de.raise("invalid buffer data")}}else if(Qt(e))t.dtype=n||ut(e),t.dimension=i,o(t,e,r),a&&(t.persistentData=new Uint8Array(new Uint8Array(e.buffer)));else if(Z(e)){s=e.shape;var f=e.stride,d=e.offset,p=0,m=0,g=0,v=0;1===s.length?(p=s[0],m=1,g=f[0],v=0):2===s.length?(p=s[0],m=s[1],g=f[0],v=f[1]):de.raise("invalid shape"),t.dtype=n||ut(e.data)||je,t.dimension=m;var y=Le.allocType(t.dtype,p*m);ht(y,e.data,p,m,g,v,d),o(t,y,r),a?t.persistentData=y:Le.freeType(y)}else de.raise("invalid buffer data")}function l(r){e.bufferCount--;var n=r.buffer;de(n,"buffer must not be deleted already"),t.deleteBuffer(n),r.buffer=null,delete f[r.id]}function u(i,a,o,u){function c(e){var n=Oe,i=null,a=0,o=0,l=1;return Array.isArray(e)||Qt(e)||Z(e)?i=e:"number"==typeof e?a=0|e:e&&(de.type(e,"object","buffer arguments must be an object, a number or an array"),"data"in e&&(de(null===i||Array.isArray(i)||Qt(i)||Z(i),"invalid data for buffer"),i=e.data),"usage"in e&&(de.parameter(e.usage,ze,"invalid buffer usage"),n=ze[e.usage]),"type"in e&&(de.parameter(e.type,Ie,"invalid buffer type"),o=Ie[e.type]),"dimension"in e&&(de.type(e.dimension,"number","invalid dimension"),l=0|e.dimension),"length"in e&&(de.nni(a,"buffer length must be a nonnegative integer"),a=0|e.length)),p.bind(),i?s(p,i,n,o,l,u):(t.bufferData(p.type,a,n),p.dtype=o||Fe,p.usage=n,p.dimension=l,p.byteLength=a),r.profile&&(p.stats.size=p.byteLength*Ne[p.dtype]),c}function h(e,r){de(r+e.byteLength<=p.byteLength,"invalid buffer subdata call, buffer is too small. Can't write data of size "+e.byteLength+" starting from offset "+r+" to a buffer of size "+p.byteLength),t.bufferSubData(p.type,r,e)}function d(t,e){var r,n=0|(e||0);if(p.bind(),Array.isArray(t)){if(t.length>0)if("number"==typeof t[0]){var i=Le.allocType(p.dtype,t.length);ct(i,t),h(i,n),Le.freeType(i)}else if(Array.isArray(t[0])||Qt(t[0])){r=Pe(t);var a=De(t,r,p.dtype);h(a,n),Le.freeType(a)}else de.raise("invalid buffer data")}else if(Qt(t))h(t,n);else if(Z(t)){r=t.shape;var o=t.stride,s=0,l=0,u=0,f=0;1===r.length?(s=r[0],l=1,u=o[0],f=0):2===r.length?(s=r[0],l=r[1],u=o[0],f=o[1]):de.raise("invalid shape");var d=Array.isArray(t.data)?p.dtype:ut(t.data),m=Le.allocType(d,s*l);ht(m,t.data,s,l,u,f,t.offset),h(m,n),Le.freeType(m)}else de.raise("invalid data for buffer subdata");return c}e.bufferCount++;var p=new n(a);return f[p.id]=p,o||c(i),c._reglType="buffer",c._buffer=p,c.subdata=d,r.profile&&(c.stats=p.stats),c.destroy=function(){l(p)},c}function c(){xe(f).forEach(function(e){e.buffer=t.createBuffer(),t.bindBuffer(e.type,e.buffer),t.bufferData(e.type,e.persistentData||e.byteLength,e.usage)})}var h=0,f={};n.prototype.bind=function(){t.bindBuffer(this.type,this.buffer)},n.prototype.destroy=function(){l(this)};var d=[];return r.profile&&(e.getTotalBufferSize=function(){var t=0;return Object.keys(f).forEach(function(e){t+=f[e].stats.size}),t}),{create:u,createStream:i,destroyStream:a,clear:function(){xe(f).forEach(l),d.forEach(l)},getBuffer:function(t){return t&&t._buffer instanceof n?t._buffer:null},restore:c,_initBuffer:s}}function dt(t,e,r,n){function i(t){this.id=h++,c[this.id]=this,this.buffer=t,this.primType=He,this.vertCount=0,this.type=0}function a(t){var e=d.pop();return e||(e=new i(r.create(null,Je,!0,!1)._buffer)),s(e,t,Ke,-1,-1,0,0),e}function o(t){d.push(t)}function s(n,i,a,o,s,l,u){if(n.buffer.bind(),i){var c=u;u||Qt(i)&&(!Z(i)||Qt(i.data))||(c=e.oes_element_index_uint?Ze:We),r._initBuffer(n.buffer,i,a,c,3)}else t.bufferData(Je,l,a),n.buffer.dtype=h||Ge,n.buffer.usage=a,n.buffer.dimension=3,n.buffer.byteLength=l;var h=u;if(!u){switch(n.buffer.dtype){case Ge:case qe:h=Ge;break;case We:case Ye:h=We;break;case Ze:case Xe:h=Ze;break;default:de.raise("unsupported type for element array")}n.buffer.dtype=h}n.type=h,de(h!==Ze||!!e.oes_element_index_uint,"32 bit element buffers not supported, enable oes_element_index_uint first");var f=s;f<0&&(f=n.buffer.byteLength,h===We?f>>=1:h===Ze&&(f>>=2)),n.vertCount=f;var d=o;if(o<0){d=He;var p=n.buffer.dimension;1===p&&(d=Ue),2===p&&(d=Ve),3===p&&(d=He)}n.primType=d}function l(t){n.elementsCount--,de(null!==t.buffer,"must not double destroy elements"),delete c[t.id],t.buffer.destroy(),t.buffer=null}function u(t,e){function a(t){if(t)if("number"==typeof t)o(t),u.primType=He,u.vertCount=0|t,u.type=Ge;else{var e=null,r=Qe,n=-1,i=-1,l=0,c=0;Array.isArray(t)||Qt(t)||Z(t)?e=t:(de.type(t,"object","invalid arguments for elements"),"data"in t&&(e=t.data,de(Array.isArray(e)||Qt(e)||Z(e),"invalid data for element buffer")),"usage"in t&&(de.parameter(t.usage,ze,"invalid element buffer usage"),r=ze[t.usage]),"primitive"in t&&(de.parameter(t.primitive,Be,"invalid element buffer primitive"),n=Be[t.primitive]),"count"in t&&(de("number"==typeof t.count&&t.count>=0,"invalid vertex count for elements"),i=0|t.count),"type"in t&&(de.parameter(t.type,f,"invalid buffer type"),c=f[t.type]),"length"in t?l=0|t.length:(l=i,c===We||c===Ye?l*=2:c!==Ze&&c!==Xe||(l*=4))),s(u,e,r,n,i,l,c)}else o(),u.primType=He,
u.vertCount=0,u.type=Ge;return a}var o=r.create(null,Je,!0),u=new i(o._buffer);return n.elementsCount++,a(t),a._reglType="elements",a._elements=u,a.subdata=function(t,e){return o.subdata(t,e),a},a.destroy=function(){l(u)},a}var c={},h=0,f={uint8:Ge,uint16:We};e.oes_element_index_uint&&(f.uint32=Ze),i.prototype.bind=function(){this.buffer.bind()};var d=[];return{create:u,createStream:a,destroyStream:o,getElements:function(t){return"function"==typeof t&&t._elements instanceof i?t._elements:null},clear:function(){xe(c).forEach(l)}}}function pt(t){for(var e=Le.allocType(er,t.length),r=0;r<t.length;++r)if(isNaN(t[r]))e[r]=65535;else if(t[r]===1/0)e[r]=31744;else if(t[r]===-1/0)e[r]=64512;else{$e[0]=t[r];var n=tr[0],i=n>>>31<<15,a=(n<<1>>>24)-127,o=n>>13&1023;if(a<-24)e[r]=i;else if(a<-14){var s=-14-a;e[r]=i+(o+1024>>s)}else e[r]=a>15?i+31744:i+(a+15<<10)+o}return e}function mt(t){return Array.isArray(t)||Qt(t)}function gt(t){return"[object "+t+"]"}function vt(t){return Array.isArray(t)&&(0===t.length||"number"==typeof t[0])}function yt(t){return!!Array.isArray(t)&&!(0===t.length||!mt(t[0]))}function bt(t){return Object.prototype.toString.call(t)}function xt(t){return bt(t)===dn}function _t(t){return bt(t)===pn}function wt(t){return bt(t)===mn}function Mt(t){return bt(t)===gn}function kt(t){if(!t)return!1;var e=bt(t);return vn.indexOf(e)>=0||(vt(t)||yt(t)||Z(t))}function At(t){return 0|Kt[Object.prototype.toString.call(t)]}function Tt(t,e){var r=e.length;switch(t.type){case Or:case Rr:case Fr:case jr:var n=Le.allocType(t.type,r);n.set(e),t.data=n;break;case wr:t.data=pt(e);break;default:de.raise("unsupported texture type, must specify a typed array")}}function St(t,e){return Le.allocType(t.type===wr?jr:t.type,e)}function Et(t,e){t.type===wr?(t.data=pt(e),Le.freeType(e)):t.data=e}function Lt(t,e,r,n,i,a){for(var o=t.width,s=t.height,l=t.channels,u=o*s*l,c=St(t,u),h=0,f=0;f<s;++f)for(var d=0;d<o;++d)for(var p=0;p<l;++p)c[h++]=e[r*d+n*f+i*p+a];Et(t,c)}function Ct(t,e,r,n,i,a){var o;if(o=void 0!==bn[t]?bn[t]:fn[t]*yn[e],a&&(o*=6),i){for(var s=0,l=r;l>=1;)s+=o*l*l,l/=2;return s}return o*r*n}function It(t,e,r,n,i,a,o){function s(){this.internalformat=or,this.format=or,this.type=Or,this.compressed=!1,this.premultiplyAlpha=!1,this.flipY=!1,this.unpackAlignment=1,this.colorSpace=0,this.width=0,this.height=0,this.channels=0}function l(t,e){t.internalformat=e.internalformat,t.format=e.format,t.type=e.type,t.compressed=e.compressed,t.premultiplyAlpha=e.premultiplyAlpha,t.flipY=e.flipY,t.unpackAlignment=e.unpackAlignment,t.colorSpace=e.colorSpace,t.width=e.width,t.height=e.height,t.channels=e.channels}function u(t,n){if("object"==typeof n&&n){if("premultiplyAlpha"in n&&(de.type(n.premultiplyAlpha,"boolean","invalid premultiplyAlpha"),t.premultiplyAlpha=n.premultiplyAlpha),"flipY"in n&&(de.type(n.flipY,"boolean","invalid texture flip"),t.flipY=n.flipY),"alignment"in n&&(de.oneOf(n.alignment,[1,2,4,8],"invalid texture unpack alignment"),t.unpackAlignment=n.alignment),"colorSpace"in n&&(de.parameter(n.colorSpace,j,"invalid colorSpace"),t.colorSpace=j[n.colorSpace]),"type"in n){var i=n.type;de(e.oes_texture_float||!("float"===i||"float32"===i),"you must enable the OES_texture_float extension in order to use floating point textures."),de(e.oes_texture_half_float||!("half float"===i||"float16"===i),"you must enable the OES_texture_half_float extension in order to use 16-bit floating point textures."),de(e.webgl_depth_texture||!("uint16"===i||"uint32"===i||"depth stencil"===i),"you must enable the WEBGL_depth_texture extension in order to use depth/stencil textures."),de.parameter(i,N,"invalid texture type"),t.type=N[i]}var a=t.width,o=t.height,s=t.channels,l=!1;"shape"in n?(de(Array.isArray(n.shape)&&n.shape.length>=2,"shape must be an array"),a=n.shape[0],o=n.shape[1],3===n.shape.length&&(s=n.shape[2],de(s>0&&s<=4,"invalid number of channels"),l=!0),de(a>=0&&a<=r.maxTextureSize,"invalid width"),de(o>=0&&o<=r.maxTextureSize,"invalid height")):("radius"in n&&(a=o=n.radius,de(a>=0&&a<=r.maxTextureSize,"invalid radius")),"width"in n&&(a=n.width,de(a>=0&&a<=r.maxTextureSize,"invalid width")),"height"in n&&(o=n.height,de(o>=0&&o<=r.maxTextureSize,"invalid height")),"channels"in n&&(s=n.channels,de(s>0&&s<=4,"invalid number of channels"),l=!0)),t.width=0|a,t.height=0|o,t.channels=0|s;var u=!1;if("format"in n){var c=n.format;de(e.webgl_depth_texture||!("depth"===c||"depth stencil"===c),"you must enable the WEBGL_depth_texture extension in order to use depth/stencil textures."),de.parameter(c,B,"invalid texture format");var h=t.internalformat=B[c];t.format=J[h],c in N&&("type"in n||(t.type=N[c])),c in U&&(t.compressed=!0),u=!0}!l&&u?t.channels=fn[t.format]:l&&!u?t.channels!==hn[t.format]&&(t.format=t.internalformat=hn[t.channels]):u&&l&&de(t.channels===fn[t.format],"number of channels inconsistent with specified format")}}function c(e){t.pixelStorei(an,e.flipY),t.pixelStorei(on,e.premultiplyAlpha),t.pixelStorei(sn,e.colorSpace),t.pixelStorei(nn,e.unpackAlignment)}function h(){s.call(this),this.xOffset=0,this.yOffset=0,this.data=null,this.needsFree=!1,this.element=null,this.needsCopy=!1}function f(t,e){var n=null;if(kt(e)?n=e:e&&(de.type(e,"object","invalid pixel data type"),u(t,e),"x"in e&&(t.xOffset=0|e.x),"y"in e&&(t.yOffset=0|e.y),kt(e.data)&&(n=e.data)),de(!t.compressed||n instanceof Uint8Array,"compressed texture data must be stored in a uint8array"),e.copy){de(!n,"can not specify copy and data field for the same texture");var a=i.viewportWidth,o=i.viewportHeight;t.width=t.width||a-t.xOffset,t.height=t.height||o-t.yOffset,t.needsCopy=!0,de(t.xOffset>=0&&t.xOffset<a&&t.yOffset>=0&&t.yOffset<o&&t.width>0&&t.width<=a&&t.height>0&&t.height<=o,"copy texture read out of bounds")}else if(n){if(Qt(n))t.channels=t.channels||4,t.data=n,"type"in e||t.type!==Or||(t.type=At(n));else if(vt(n))t.channels=t.channels||4,Tt(t,n),t.alignment=1,t.needsFree=!0;else if(Z(n)){var s=n.data;Array.isArray(s)||t.type!==Or||(t.type=At(s));var l,c,h,f,d,p,m=n.shape,g=n.stride;3===m.length?(h=m[2],p=g[2]):(de(2===m.length,"invalid ndarray pixel data, must be 2 or 3D"),h=1,p=1),l=m[0],c=m[1],f=g[0],d=g[1],t.alignment=1,t.width=l,t.height=c,t.channels=h,t.format=t.internalformat=hn[h],t.needsFree=!0,Lt(t,s,f,d,p,n.offset)}else if(xt(n)||_t(n))xt(n)?t.element=n:t.element=n.canvas,t.width=t.element.width,t.height=t.element.height,t.channels=4;else if(wt(n))t.element=n,t.width=n.naturalWidth,t.height=n.naturalHeight,t.channels=4;else if(Mt(n))t.element=n,t.width=n.videoWidth,t.height=n.videoHeight,t.channels=4;else if(yt(n)){var v=t.width||n[0].length,y=t.height||n.length,b=t.channels;b=mt(n[0][0])?b||n[0][0].length:b||1;for(var x=Ce.shape(n),_=1,w=0;w<x.length;++w)_*=x[w];var M=St(t,_);Ce.flatten(n,x,"",M),Et(t,M),t.alignment=1,t.width=v,t.height=y,t.channels=b,t.format=t.internalformat=hn[b],t.needsFree=!0}}else t.width=t.width||1,t.height=t.height||1,t.channels=t.channels||4;t.type===jr?de(r.extensions.indexOf("oes_texture_float")>=0,"oes_texture_float extension not enabled"):t.type===wr&&de(r.extensions.indexOf("oes_texture_half_float")>=0,"oes_texture_half_float extension not enabled")}function d(e,r,i){var a=e.element,o=e.data,s=e.internalformat,l=e.format,u=e.type,h=e.width,f=e.height;c(e),a?t.texImage2D(r,i,l,l,u,a):e.compressed?t.compressedTexImage2D(r,i,s,h,f,0,o):e.needsCopy?(n(),t.copyTexImage2D(r,i,l,e.xOffset,e.yOffset,h,f,0)):t.texImage2D(r,i,l,h,f,0,l,u,o)}function p(e,r,i,a,o){var s=e.element,l=e.data,u=e.internalformat,h=e.format,f=e.type,d=e.width,p=e.height;c(e),s?t.texSubImage2D(r,o,i,a,h,f,s):e.compressed?t.compressedTexSubImage2D(r,o,i,a,u,d,p,l):e.needsCopy?(n(),t.copyTexSubImage2D(r,o,i,a,e.xOffset,e.yOffset,d,p)):t.texSubImage2D(r,o,i,a,d,p,h,f,l)}function m(){return K.pop()||new h}function g(t){t.needsFree&&Le.freeType(t.data),h.call(t),K.push(t)}function v(){s.call(this),this.genMipmaps=!1,this.mipmapHint=$r,this.mipmask=0,this.images=Array(16)}function y(t,e,r){var n=t.images[0]=m();t.mipmask=1,n.width=t.width=e,n.height=t.height=r,n.channels=t.channels=4}function b(t,e){var r=null;if(kt(e))r=t.images[0]=m(),l(r,t),f(r,e),t.mipmask=1;else if(u(t,e),Array.isArray(e.mipmap))for(var n=e.mipmap,i=0;i<n.length;++i)r=t.images[i]=m(),l(r,t),r.width>>=i,r.height>>=i,f(r,n[i]),t.mipmask|=1<<i;else r=t.images[0]=m(),l(r,t),f(r,e),t.mipmask=1;l(t,t.images[0]),(t.compressed&&t.internalformat===Mr||t.internalformat===kr||t.internalformat===Ar||t.internalformat===Tr)&&de(t.width%4==0&&t.height%4==0,"for compressed texture formats, mipmap level 0 must have width and height that are a multiple of 4")}function x(t,e){for(var r=t.images,n=0;n<r.length;++n){if(!r[n])return;d(r[n],e,n)}}function _(){var t=Q.pop()||new v;s.call(t),t.mipmask=0;for(var e=0;e<16;++e)t.images[e]=null;return t}function w(t){for(var e=t.images,r=0;r<e.length;++r)e[r]&&g(e[r]),e[r]=null;Q.push(t)}function M(){this.minFilter=Yr,this.magFilter=Yr,this.wrapS=Vr,this.wrapT=Vr,this.anisotropic=1,this.genMipmaps=!1,this.mipmapHint=$r}function k(t,e){if("min"in e){var n=e.min;de.parameter(n,F),t.minFilter=F[n],cn.indexOf(t.minFilter)>=0&&(t.genMipmaps=!0)}if("mag"in e){var i=e.mag;de.parameter(i,R),t.magFilter=R[i]}var a=t.wrapS,o=t.wrapT;if("wrap"in e){var s=e.wrap;"string"==typeof s?(de.parameter(s,O),a=o=O[s]):Array.isArray(s)&&(de.parameter(s[0],O),de.parameter(s[1],O),a=O[s[0]],o=O[s[1]])}else{if("wrapS"in e){var l=e.wrapS;de.parameter(l,O),a=O[l]}if("wrapT"in e){var u=e.wrapT;de.parameter(u,O),o=O[u]}}if(t.wrapS=a,t.wrapT=o,"anisotropic"in e){var c=e.anisotropic;de("number"==typeof c&&c>=1&&c<=r.maxAnisotropic,"aniso samples must be between 1 and "),t.anisotropic=e.anisotropic}if("mipmap"in e){var h=!1;switch(typeof e.mipmap){case"string":de.parameter(e.mipmap,P,"invalid mipmap hint"),t.mipmapHint=P[e.mipmap],t.genMipmaps=!0,h=!0;break;case"boolean":h=t.genMipmaps=e.mipmap;break;case"object":de(Array.isArray(e.mipmap),"invalid mipmap type"),t.genMipmaps=!1,h=!0;break;default:de.raise("invalid mipmap type")}!h||"min"in e||(t.minFilter=Xr)}}function A(r,n){t.texParameteri(n,Gr,r.minFilter),t.texParameteri(n,qr,r.magFilter),t.texParameteri(n,Nr,r.wrapS),t.texParameteri(n,Br,r.wrapT),e.ext_texture_filter_anisotropic&&t.texParameteri(n,rn,r.anisotropic),r.genMipmaps&&(t.hint(Qr,r.mipmapHint),t.generateMipmap(n))}function T(e){s.call(this),this.mipmask=0,this.internalformat=or,this.id=$++,this.refCount=1,this.target=e,this.texture=t.createTexture(),this.unit=-1,this.bindCount=0,this.texInfo=new M,o.profile&&(this.stats={size:0})}function S(e){t.activeTexture(un),t.bindTexture(e.target,e.texture)}function E(){var e=rt[0];e?t.bindTexture(e.target,e.texture):t.bindTexture(nr,null)}function L(e){var r=e.texture;de(r,"must not double destroy texture");var n=e.unit,i=e.target;n>=0&&(t.activeTexture(un+n),t.bindTexture(i,null),rt[n]=null),t.deleteTexture(r),e.texture=null,e.params=null,e.pixels=null,e.refCount=0,delete tt[e.id],a.textureCount--}function C(e,n){function i(t,e){var n=c.texInfo;M.call(n);var a=_();return"number"==typeof t?"number"==typeof e?y(a,0|t,0|e):y(a,0|t,0|t):t?(de.type(t,"object","invalid arguments to regl.texture"),k(n,t),b(a,t)):y(a,1,1),n.genMipmaps&&(a.mipmask=(a.width<<1)-1),c.mipmask=a.mipmask,l(c,a),de.texture2D(n,a,r),c.internalformat=a.internalformat,i.width=a.width,i.height=a.height,S(c),x(a,nr),A(n,nr),E(),w(a),o.profile&&(c.stats.size=Ct(c.internalformat,c.type,a.width,a.height,n.genMipmaps,!1)),i.format=q[c.internalformat],i.type=G[c.type],i.mag=Y[n.magFilter],i.min=W[n.minFilter],i.wrapS=X[n.wrapS],i.wrapT=X[n.wrapT],i}function s(t,e,r,n){de(!!t,"must specify image data");var a=0|e,o=0|r,s=0|n,u=m();return l(u,c),u.width=0,u.height=0,f(u,t),u.width=u.width||(c.width>>s)-a,u.height=u.height||(c.height>>s)-o,de(c.type===u.type&&c.format===u.format&&c.internalformat===u.internalformat,"incompatible format for texture.subimage"),de(a>=0&&o>=0&&a+u.width<=c.width&&o+u.height<=c.height,"texture.subimage write out of bounds"),de(c.mipmask&1<<s,"missing mipmap data"),de(u.data||u.element||u.needsCopy,"missing image data"),S(c),p(u,nr,a,o,s),E(),g(u),i}function u(e,r){var n=0|e,a=0|r||n;if(n===c.width&&a===c.height)return i;i.width=c.width=n,i.height=c.height=a,S(c);for(var s=0;c.mipmask>>s;++s)t.texImage2D(nr,s,c.format,n>>s,a>>s,0,c.format,c.type,null);return E(),o.profile&&(c.stats.size=Ct(c.internalformat,c.type,n,a,!1,!1)),i}var c=new T(nr);return tt[c.id]=c,a.textureCount++,i(e,n),i.subimage=s,i.resize=u,i._reglType="texture2d",i._texture=c,o.profile&&(i.stats=c.stats),i.destroy=function(){c.decRef()},i}function I(e,n,i,s,c,h){function d(t,e,n,i,a,s){var c,h=C.texInfo;for(M.call(h),c=0;c<6;++c)I[c]=_();if("number"!=typeof t&&t)if("object"==typeof t)if(e)b(I[0],t),b(I[1],e),b(I[2],n),b(I[3],i),b(I[4],a),b(I[5],s);else if(k(h,t),u(C,t),"faces"in t){var f=t.faces;for(de(Array.isArray(f)&&6===f.length,"cube faces must be a length 6 array"),c=0;c<6;++c)de("object"==typeof f[c]&&!!f[c],"invalid input for cube map face"),l(I[c],C),b(I[c],f[c])}else for(c=0;c<6;++c)b(I[c],t);else de.raise("invalid arguments to cube map");else{var p=0|t||1;for(c=0;c<6;++c)y(I[c],p,p)}for(l(C,I[0]),h.genMipmaps?C.mipmask=(I[0].width<<1)-1:C.mipmask=I[0].mipmask,de.textureCube(C,h,I,r),C.internalformat=I[0].internalformat,d.width=I[0].width,d.height=I[0].height,S(C),c=0;c<6;++c)x(I[c],ar+c);for(A(h,ir),E(),o.profile&&(C.stats.size=Ct(C.internalformat,C.type,d.width,d.height,h.genMipmaps,!0)),d.format=q[C.internalformat],d.type=G[C.type],d.mag=Y[h.magFilter],d.min=W[h.minFilter],d.wrapS=X[h.wrapS],d.wrapT=X[h.wrapT],c=0;c<6;++c)w(I[c]);return d}function v(t,e,r,n,i){de(!!e,"must specify image data"),de("number"==typeof t&&t===(0|t)&&t>=0&&t<6,"invalid face");var a=0|r,o=0|n,s=0|i,u=m();return l(u,C),u.width=0,u.height=0,f(u,e),u.width=u.width||(C.width>>s)-a,u.height=u.height||(C.height>>s)-o,de(C.type===u.type&&C.format===u.format&&C.internalformat===u.internalformat,"incompatible format for texture.subimage"),de(a>=0&&o>=0&&a+u.width<=C.width&&o+u.height<=C.height,"texture.subimage write out of bounds"),de(C.mipmask&1<<s,"missing mipmap data"),de(u.data||u.element||u.needsCopy,"missing image data"),S(C),p(u,ar+t,a,o,s),E(),g(u),d}function L(e){var r=0|e;if(r!==C.width){d.width=C.width=r,d.height=C.height=r,S(C);for(var n=0;n<6;++n)for(var i=0;C.mipmask>>i;++i)t.texImage2D(ar+n,i,C.format,r>>i,r>>i,0,C.format,C.type,null);return E(),o.profile&&(C.stats.size=Ct(C.internalformat,C.type,d.width,d.height,!1,!0)),d}}var C=new T(ir);tt[C.id]=C,a.cubeCount++;var I=new Array(6);return d(e,n,i,s,c,h),d.subimage=v,d.resize=L,d._reglType="textureCube",d._texture=C,o.profile&&(d.stats=C.stats),d.destroy=function(){C.decRef()},d}function z(){for(var e=0;e<et;++e)t.activeTexture(un+e),t.bindTexture(nr,null),rt[e]=null;xe(tt).forEach(L),a.cubeCount=0,a.textureCount=0}function D(){xe(tt).forEach(function(e){e.texture=t.createTexture(),t.bindTexture(e.target,e.texture);for(var r=0;r<32;++r)if(0!=(e.mipmask&1<<r))if(e.target===nr)t.texImage2D(nr,r,e.internalformat,e.width>>r,e.height>>r,0,e.internalformat,e.type,null);else for(var n=0;n<6;++n)t.texImage2D(ar+n,r,e.internalformat,e.width>>r,e.height>>r,0,e.internalformat,e.type,null);A(e.texInfo,e.target)})}var P={"don't care":$r,"dont care":$r,nice:en,fast:tn},O={repeat:Ur,clamp:Vr,mirror:Hr},R={nearest:Yr,linear:Wr},F=$t({mipmap:Kr,"nearest mipmap nearest":Xr,"linear mipmap nearest":Zr,"nearest mipmap linear":Jr,"linear mipmap linear":Kr},R),j={none:0,browser:ln},N={uint8:Or,rgba4:pr,rgb565:gr,"rgb5 a1":mr},B={alpha:sr,luminance:ur,"luminance alpha":cr,rgb:lr,rgba:or,rgba4:hr,"rgb5 a1":fr,rgb565:dr},U={};e.ext_srgb&&(B.srgb=xr,B.srgba=_r),e.oes_texture_float&&(N.float32=N.float=jr),e.oes_texture_half_float&&(N.float16=N["half float"]=wr),e.webgl_depth_texture&&($t(B,{depth:yr,"depth stencil":br}),$t(N,{uint16:Rr,uint32:Fr,"depth stencil":vr})),e.webgl_compressed_texture_s3tc&&$t(U,{"rgb s3tc dxt1":Mr,"rgba s3tc dxt1":kr,"rgba s3tc dxt3":Ar,"rgba s3tc dxt5":Tr}),e.webgl_compressed_texture_atc&&$t(U,{"rgb atc":Sr,"rgba atc explicit alpha":Er,"rgba atc interpolated alpha":Lr}),e.webgl_compressed_texture_pvrtc&&$t(U,{"rgb pvrtc 4bppv1":Cr,"rgb pvrtc 2bppv1":Ir,"rgba pvrtc 4bppv1":zr,"rgba pvrtc 2bppv1":Dr}),e.webgl_compressed_texture_etc1&&(U["rgb etc1"]=Pr);var V=Array.prototype.slice.call(t.getParameter(rr));Object.keys(U).forEach(function(t){var e=U[t];V.indexOf(e)>=0&&(B[t]=e)});var H=Object.keys(B);r.textureFormats=H;var q=[];Object.keys(B).forEach(function(t){var e=B[t];q[e]=t});var G=[];Object.keys(N).forEach(function(t){var e=N[t];G[e]=t});var Y=[];Object.keys(R).forEach(function(t){var e=R[t];Y[e]=t});var W=[];Object.keys(F).forEach(function(t){var e=F[t];W[e]=t});var X=[];Object.keys(O).forEach(function(t){var e=O[t];X[e]=t});var J=H.reduce(function(t,e){var r=B[e];return r===ur||r===sr||r===ur||r===cr||r===yr||r===br?t[r]=r:r===fr||e.indexOf("rgba")>=0?t[r]=or:t[r]=lr,t},{}),K=[],Q=[],$=0,tt={},et=r.maxTextureUnits,rt=Array(et).map(function(){return null});return $t(T.prototype,{bind:function(){var e=this;e.bindCount+=1;var r=e.unit;if(r<0){for(var n=0;n<et;++n){var i=rt[n];if(i){if(i.bindCount>0)continue;i.unit=-1}rt[n]=e,r=n;break}r>=et&&de.raise("insufficient number of texture units"),o.profile&&a.maxTextureUnits<r+1&&(a.maxTextureUnits=r+1),e.unit=r,t.activeTexture(un+r),t.bindTexture(e.target,e.texture)}return r},unbind:function(){this.bindCount-=1},decRef:function(){--this.refCount<=0&&L(this)}}),o.profile&&(a.getTotalTextureSize=function(){var t=0;return Object.keys(tt).forEach(function(e){t+=tt[e].stats.size}),t}),{create2D:C,createCube:I,clear:z,getTexture:function(t){return null},restore:D}}function zt(t,e,r){return wn[t]*e*r}function Dt(t,e,r,n,i,a){function o(t,e,r){this.target=t,this.texture=e,this.renderbuffer=r;var n=0,i=0;e?(n=e.width,i=e.height):r&&(n=r.width,i=r.height),this.width=n,this.height=i}function s(t){t&&(t.texture&&t.texture._texture.decRef(),t.renderbuffer&&t.renderbuffer._renderbuffer.decRef())}function l(t,e,r){if(t)if(t.texture){var n=t.texture._texture,i=Math.max(1,n.width),a=Math.max(1,n.height);de(i===e&&a===r,"inconsistent width/height for supplied texture"),n.refCount+=1}else{var o=t.renderbuffer._renderbuffer;de(o.width===e&&o.height===r,"inconsistent width/height for renderbuffer"),o.refCount+=1}}function u(e,r){r&&(r.texture?t.framebufferTexture2D(kn,e,r.target,r.texture._texture.texture,0):t.framebufferRenderbuffer(kn,e,An,r.renderbuffer._renderbuffer.renderbuffer))}function c(t){var e=Tn,r=null,n=null,i=t;"object"==typeof t&&(i=t.data,"target"in t&&(e=0|t.target)),de.type(i,"function","invalid attachment data");var a=i._reglType;return"texture2d"===a?(r=i,de(e===Tn)):"textureCube"===a?(r=i,de(e>=Sn&&e<Sn+6,"invalid cube map target")):"renderbuffer"===a?(n=i,e=An):de.raise("invalid regl object for attachment"),new o(e,r,n)}function h(t,e,r,a,s){if(r){var l=n.create2D({width:t,height:e,format:a,type:s});return l._texture.refCount=0,new o(Tn,l,null)}var u=i.create({width:t,height:e,format:a});return u._renderbuffer.refCount=0,new o(An,null,u)}function f(t){return t&&(t.texture||t.renderbuffer)}function d(t,e,r){t&&(t.texture?t.texture.resize(e,r):t.renderbuffer&&t.renderbuffer.resize(e,r))}function p(){this.id=A++,T[this.id]=this,this.framebuffer=t.createFramebuffer(),this.width=0,this.height=0,this.colorAttachments=[],this.depthAttachment=null,this.stencilAttachment=null,this.depthStencilAttachment=null}function m(t){t.colorAttachments.forEach(s),s(t.depthAttachment),s(t.stencilAttachment),s(t.depthStencilAttachment)}function g(e){var r=e.framebuffer;de(r,"must not double destroy framebuffer"),t.deleteFramebuffer(r),e.framebuffer=null,a.framebufferCount--,delete T[e.id]}function v(e){var n;t.bindFramebuffer(kn,e.framebuffer);var i=e.colorAttachments;for(n=0;n<i.length;++n)u(En+n,i[n]);for(n=i.length;n<r.maxColorAttachments;++n)t.framebufferTexture2D(kn,En+n,Tn,null,0);t.framebufferTexture2D(kn,In,Tn,null,0),t.framebufferTexture2D(kn,Ln,Tn,null,0),t.framebufferTexture2D(kn,Cn,Tn,null,0),u(Ln,e.depthAttachment),u(Cn,e.stencilAttachment),u(In,e.depthStencilAttachment);var a=t.checkFramebufferStatus(kn);a!==zn&&de.raise("framebuffer configuration not supported, status = "+Un[a]),t.bindFramebuffer(kn,_.next),_.cur=_.next,t.getError()}function y(t,n){function i(t,n){var a;de(_.next!==s,"can not update framebuffer which is currently in use");var o=e.webgl_draw_buffers,u=0,d=0,p=!0,g=!0,y=null,b=!0,x="rgba",A="uint8",T=1,S=null,E=null,L=null,C=!1;if("number"==typeof t)u=0|t,d=0|n||u;else if(t){de.type(t,"object","invalid arguments for framebuffer");var I=t;if("shape"in I){var z=I.shape;de(Array.isArray(z)&&z.length>=2,"invalid shape for framebuffer"),u=z[0],d=z[1]}else"radius"in I&&(u=d=I.radius),"width"in I&&(u=I.width),"height"in I&&(d=I.height);("color"in I||"colors"in I)&&(y=I.color||I.colors,Array.isArray(y)&&de(1===y.length||o,"multiple render targets not supported")),y||("colorCount"in I&&(T=0|I.colorCount,de(T>0,"invalid color buffer count")),"colorTexture"in I&&(b=!!I.colorTexture,x="rgba4"),"colorType"in I&&(A=I.colorType,b?(de(e.oes_texture_float||!("float"===A||"float32"===A),"you must enable OES_texture_float in order to use floating point framebuffer objects"),de(e.oes_texture_half_float||!("half float"===A||"float16"===A),"you must enable OES_texture_half_float in order to use 16-bit floating point framebuffer objects")):"half float"===A||"float16"===A?(de(e.ext_color_buffer_half_float,"you must enable EXT_color_buffer_half_float to use 16-bit render buffers"),x="rgba16f"):"float"!==A&&"float32"!==A||(de(e.webgl_color_buffer_float,"you must enable WEBGL_color_buffer_float in order to use 32-bit floating point renderbuffers"),x="rgba32f"),de.oneOf(A,k,"invalid color type")),"colorFormat"in I&&(x=I.colorFormat,w.indexOf(x)>=0?b=!0:M.indexOf(x)>=0?b=!1:b?de.oneOf(I.colorFormat,w,"invalid color format for texture"):de.oneOf(I.colorFormat,M,"invalid color format for renderbuffer"))),("depthTexture"in I||"depthStencilTexture"in I)&&(C=!(!I.depthTexture&&!I.depthStencilTexture),de(!C||e.webgl_depth_texture,"webgl_depth_texture extension not supported")),"depth"in I&&("boolean"==typeof I.depth?p=I.depth:(S=I.depth,g=!1)),"stencil"in I&&("boolean"==typeof I.stencil?g=I.stencil:(E=I.stencil,p=!1)),"depthStencil"in I&&("boolean"==typeof I.depthStencil?p=g=I.depthStencil:(L=I.depthStencil,p=!1,g=!1))}else u=d=1;var D=null,P=null,O=null,R=null;if(Array.isArray(y))D=y.map(c);else if(y)D=[c(y)];else for(D=new Array(T),a=0;a<T;++a)D[a]=h(u,d,b,x,A);de(e.webgl_draw_buffers||D.length<=1,"you must enable the WEBGL_draw_buffers extension in order to use multiple color buffers."),de(D.length<=r.maxColorAttachments,"too many color attachments, not supported"),u=u||D[0].width,d=d||D[0].height,S?P=c(S):p&&!g&&(P=h(u,d,C,"depth","uint32")),E?O=c(E):g&&!p&&(O=h(u,d,!1,"stencil","uint8")),L?R=c(L):!S&&!E&&g&&p&&(R=h(u,d,C,"depth stencil","depth stencil")),de(!!S+!!E+!!L<=1,"invalid framebuffer configuration, can specify exactly one depth/stencil attachment");var F=null;for(a=0;a<D.length;++a)if(l(D[a],u,d),de(!D[a]||D[a].texture&&Pn.indexOf(D[a].texture._texture.format)>=0||D[a].renderbuffer&&Bn.indexOf(D[a].renderbuffer._renderbuffer.format)>=0,"framebuffer color attachment "+a+" is invalid"),D[a]&&D[a].texture){var j=On[D[a].texture._texture.format]*Rn[D[a].texture._texture.type];null===F?F=j:de(F===j,"all color attachments much have the same number of bits per pixel.")}return l(P,u,d),de(!P||P.texture&&P.texture._texture.format===Dn||P.renderbuffer&&P.renderbuffer._renderbuffer.format===Fn,"invalid depth attachment for framebuffer object"),l(O,u,d),de(!O||O.renderbuffer&&O.renderbuffer._renderbuffer.format===jn,"invalid stencil attachment for framebuffer object"),l(R,u,d),de(!R||R.texture&&R.texture._texture.format===Nn||R.renderbuffer&&R.renderbuffer._renderbuffer.format===Nn,"invalid depth-stencil attachment for framebuffer object"),m(s),s.width=u,s.height=d,s.colorAttachments=D,s.depthAttachment=P,s.stencilAttachment=O,s.depthStencilAttachment=R,i.color=D.map(f),i.depth=f(P),i.stencil=f(O),i.depthStencil=f(R),i.width=s.width,i.height=s.height,v(s),i}function o(t,e){de(_.next!==s,"can not resize a framebuffer which is currently in use");var r=0|t,n=0|e||r;if(r===s.width&&n===s.height)return i;for(var a=s.colorAttachments,o=0;o<a.length;++o)d(a[o],r,n);return d(s.depthAttachment,r,n),d(s.stencilAttachment,r,n),d(s.depthStencilAttachment,r,n),s.width=i.width=r,s.height=i.height=n,v(s),i}var s=new p;return a.framebufferCount++,i(t,n),$t(i,{resize:o,_reglType:"framebuffer",_framebuffer:s,destroy:function(){g(s),m(s)},use:function(t){_.setFBO({framebuffer:i},t)}})}function b(t){function i(t){var r;de(o.indexOf(_.next)<0,"can not update framebuffer which is currently in use");var a=e.webgl_draw_buffers,s={color:null},l=0,u=null,c="rgba",h="uint8",f=1;if("number"==typeof t)l=0|t;else if(t){de.type(t,"object","invalid arguments for framebuffer");var d=t;if("shape"in d){var p=d.shape;de(Array.isArray(p)&&p.length>=2,"invalid shape for framebuffer"),de(p[0]===p[1],"cube framebuffer must be square"),l=p[0]}else"radius"in d&&(l=0|d.radius),"width"in d?(l=0|d.width,"height"in d&&de(d.height===l,"must be square")):"height"in d&&(l=0|d.height);("color"in d||"colors"in d)&&(u=d.color||d.colors,Array.isArray(u)&&de(1===u.length||a,"multiple render targets not supported")),u||("colorCount"in d&&(f=0|d.colorCount,de(f>0,"invalid color buffer count")),"colorType"in d&&(de.oneOf(d.colorType,k,"invalid color type"),h=d.colorType),"colorFormat"in d&&(c=d.colorFormat,de.oneOf(d.colorFormat,w,"invalid color format for texture"))),"depth"in d&&(s.depth=d.depth),"stencil"in d&&(s.stencil=d.stencil),"depthStencil"in d&&(s.depthStencil=d.depthStencil)}else l=1;var m;if(u)if(Array.isArray(u))for(m=[],r=0;r<u.length;++r)m[r]=u[r];else m=[u];else{m=Array(f);var g={radius:l,format:c,type:h};for(r=0;r<f;++r)m[r]=n.createCube(g)}for(s.color=Array(m.length),r=0;r<m.length;++r){var v=m[r];de("function"==typeof v&&"textureCube"===v._reglType,"invalid cube map"),l=l||v.width,de(v.width===l&&v.height===l,"invalid cube map shape"),s.color[r]={target:Sn,data:m[r]}}for(r=0;r<6;++r){for(var b=0;b<m.length;++b)s.color[b].target=Sn+r;r>0&&(s.depth=o[0].depth,s.stencil=o[0].stencil,s.depthStencil=o[0].depthStencil),o[r]?o[r](s):o[r]=y(s)}return $t(i,{width:l,height:l,color:m})}function a(t){var e,n=0|t;if(de(n>0&&n<=r.maxCubeMapSize,"invalid radius for cube fbo"),n===i.width)return i;var a=i.color;for(e=0;e<a.length;++e)a[e].resize(n);for(e=0;e<6;++e)o[e].resize(n);return i.width=i.height=n,i}var o=Array(6);return i(t),$t(i,{faces:o,resize:a,_reglType:"framebufferCube",destroy:function(){o.forEach(function(t){t.destroy()})}})}function x(){xe(T).forEach(function(e){e.framebuffer=t.createFramebuffer(),v(e)})}var _={cur:null,next:null,dirty:!1,setFBO:null},w=["rgba"],M=["rgba4","rgb565","rgb5 a1"];e.ext_srgb&&M.push("srgba"),e.ext_color_buffer_half_float&&M.push("rgba16f","rgb16f"),e.webgl_color_buffer_float&&M.push("rgba32f");var k=["uint8"];e.oes_texture_half_float&&k.push("half float","float16"),e.oes_texture_float&&k.push("float","float32");var A=0,T={};return $t(_,{getFramebuffer:function(t){if("function"==typeof t&&"framebuffer"===t._reglType){var e=t._framebuffer;if(e instanceof p)return e}return null},create:y,createCube:b,clear:function(){xe(T).forEach(g)},restore:x})}function Pt(){this.state=0,this.x=0,this.y=0,this.z=0,this.w=0,this.buffer=null,this.size=0,this.normalized=!1,this.type=Vn,this.offset=0,this.stride=0,this.divisor=0}function Ot(t,e,r,n,i){for(var a=r.maxAttributes,o=new Array(a),s=0;s<a;++s)o[s]=new Pt;return{Record:Pt,scope:{},state:o}}function Rt(t,e,r,n){function i(t,e,r,n){this.name=t,this.id=e,this.location=r,this.info=n}function a(t,e){for(var r=0;r<t.length;++r)if(t[r].id===e.id)return void(t[r].location=e.location);t.push(e)}function o(r,n,i){var a=r===Hn?c:h,o=a[n];if(!o){var s=e.str(n);o=t.createShader(r),t.shaderSource(o,s),t.compileShader(o),de.shaderError(t,o,s,r,i),a[n]=o}return o}function s(t,e){this.id=p++,this.fragId=t,this.vertId=e,this.program=null,this.uniforms=[],this.attributes=[],n.profile&&(this.stats={uniformsCount:0,attributesCount:0})}function l(r,s){var l,u,c=o(Hn,r.fragId),h=o(qn,r.vertId),f=r.program=t.createProgram();t.attachShader(f,c),t.attachShader(f,h),t.linkProgram(f),de.linkError(t,f,e.str(r.fragId),e.str(r.vertId),s);var d=t.getProgramParameter(f,Gn);n.profile&&(r.stats.uniformsCount=d);var p=r.uniforms;for(l=0;l<d;++l)if(u=t.getActiveUniform(f,l))if(u.size>1)for(var m=0;m<u.size;++m){var g=u.name.replace("[0]","["+m+"]");a(p,new i(g,e.id(g),t.getUniformLocation(f,g),u))}else a(p,new i(u.name,e.id(u.name),t.getUniformLocation(f,u.name),u));var v=t.getProgramParameter(f,Yn);n.profile&&(r.stats.attributesCount=v);var y=r.attributes;for(l=0;l<v;++l)(u=t.getActiveAttrib(f,l))&&a(y,new i(u.name,e.id(u.name),t.getAttribLocation(f,u.name),u))}function u(){c={},h={};for(var t=0;t<d.length;++t)l(d[t])}var c={},h={},f={},d=[],p=0;return n.profile&&(r.getMaxUniformsCount=function(){var t=0;return d.forEach(function(e){e.stats.uniformsCount>t&&(t=e.stats.uniformsCount)}),t},r.getMaxAttributesCount=function(){var t=0;return d.forEach(function(e){e.stats.attributesCount>t&&(t=e.stats.attributesCount)}),t}),{clear:function(){var e=t.deleteShader.bind(t);xe(c).forEach(e),c={},xe(h).forEach(e),h={},d.forEach(function(e){t.deleteProgram(e.program)}),d.length=0,f={},r.shaderCount=0},program:function(t,e,n){de.command(t>=0,"missing vertex shader",n),de.command(e>=0,"missing fragment shader",n);var i=f[e];i||(i=f[e]={});var a=i[t];return a||(a=new s(e,t),r.shaderCount++,l(a,n),i[t]=a,d.push(a)),a},restore:u,shader:o,frag:-1,vert:-1}}function Ft(t,e,r,n,i,a){function o(o){var s;null===e.next?(de(i.preserveDrawingBuffer,'you must create a webgl context with "preserveDrawingBuffer":true in order to read pixels from the drawing buffer'),s=Xn):(de(null!==e.next.colorAttachments[0].texture,"You cannot read from a renderbuffer"),s=e.next.colorAttachments[0].texture._texture.type,a.oes_texture_float?de(s===Xn||s===Jn,"Reading from a framebuffer is only allowed for the types 'uint8' and 'float'"):de(s===Xn,"Reading from a framebuffer is only allowed for the type 'uint8'"));var l=0,u=0,c=n.framebufferWidth,h=n.framebufferHeight,f=null;Qt(o)?f=o:o&&(de.type(o,"object","invalid arguments to regl.read()"),l=0|o.x,u=0|o.y,de(l>=0&&l<n.framebufferWidth,"invalid x offset for regl.read"),de(u>=0&&u<n.framebufferHeight,"invalid y offset for regl.read"),c=0|(o.width||n.framebufferWidth-l),h=0|(o.height||n.framebufferHeight-u),f=o.data||null),f&&(s===Xn?de(f instanceof Uint8Array,"buffer must be 'Uint8Array' when reading from a framebuffer of type 'uint8'"):s===Jn&&de(f instanceof Float32Array,"buffer must be 'Float32Array' when reading from a framebuffer of type 'float'")),de(c>0&&c+l<=n.framebufferWidth,"invalid width for read pixels"),de(h>0&&h+u<=n.framebufferHeight,"invalid height for read pixels"),r();var d=c*h*4;return f||(s===Xn?f=new Uint8Array(d):s===Jn&&(f=f||new Float32Array(d))),de.isTypedArray(f,"data buffer for regl.read() must be a typedarray"),de(f.byteLength>=d,"data buffer for regl.read() too small"),t.pixelStorei(Zn,4),t.readPixels(l,u,c,h,Wn,s,f),f}function s(t){var r;return e.setFBO({framebuffer:t.framebuffer},function(){r=o(t)}),r}function l(t){return t&&"framebuffer"in t?s(t):o(t)}return l}function jt(t){return Array.prototype.slice.call(t)}function Nt(t){return jt(t).join("")}function Bt(){function t(t){for(var e=0;e<l.length;++e)if(l[e]===t)return s[e];var r="g"+o++;return s.push(r),l.push(t),r}function e(){function t(){r.push.apply(r,jt(arguments))}function e(){var t="v"+o++;return n.push(t),arguments.length>0&&(r.push(t,"="),r.push.apply(r,jt(arguments)),r.push(";")),t}var r=[],n=[];return $t(t,{def:e,toString:function(){return Nt([n.length>0?"var "+n+";":"",Nt(r)])}})}function r(){function t(t,e){
n(t,e,"=",r.def(t,e),";")}var r=e(),n=e(),i=r.toString,a=n.toString;return $t(function(){r.apply(r,jt(arguments))},{def:r.def,entry:r,exit:n,save:t,set:function(e,n,i){t(e,n),r(e,n,"=",i,";")},toString:function(){return i()+a()}})}function n(){var t=Nt(arguments),e=r(),n=r(),i=e.toString,a=n.toString;return $t(e,{then:function(){return e.apply(e,jt(arguments)),this},else:function(){return n.apply(n,jt(arguments)),this},toString:function(){var e=a();return e&&(e="else{"+e+"}"),Nt(["if(",t,"){",i(),"}",e])}})}function i(t,e){function n(){var t="a"+i.length;return i.push(t),t}var i=[];e=e||0;for(var a=0;a<e;++a)n();var o=r(),s=o.toString;return c[t]=$t(o,{arg:n,toString:function(){return Nt(["function(",i.join(),"){",s(),"}"])}})}function a(){var t=['"use strict";',u,"return {"];Object.keys(c).forEach(function(e){t.push('"',e,'":',c[e].toString(),",")}),t.push("}");var e=Nt(t).replace(/;/g,";\n").replace(/}/g,"}\n").replace(/{/g,"{\n");return Function.apply(null,s.concat(e)).apply(null,l)}var o=0,s=[],l=[],u=e(),c={};return{global:u,link:t,block:e,proc:i,scope:r,cond:n,compile:a}}function Ut(t){return Array.isArray(t)||Qt(t)||Z(t)}function Vt(t){return t.sort(function(t,e){return t===zi?-1:e===zi?1:t<e?-1:1})}function Ht(t,e,r,n){this.thisDep=t,this.contextDep=e,this.propDep=r,this.append=n}function qt(t){return t&&!(t.thisDep||t.contextDep||t.propDep)}function Gt(t){return new Ht(!1,!1,!1,t)}function Yt(t,e){var r=t.type;if(r===ei){var n=t.data.length;return new Ht(!0,n>=1,n>=2,e)}if(r===ai){var i=t.data;return new Ht(i.thisDep,i.contextDep,i.propDep,e)}return new Ht(r===ii,r===ni,r===ri,e)}function Wt(t,e,r,n,i,a,o,s,l,u,c,h,f,d,p){function m(t){return t.replace(".","_")}function g(t,e,r){var n=m(t);et.push(t),tt[n]=$[n]=!!r,rt[n]=e}function v(t,e,r){var n=m(t);et.push(t),Array.isArray(r)?($[n]=r.slice(),tt[n]=r.slice()):$[n]=tt[n]=r,nt[n]=e}function y(){var t=Bt(),r=t.link,n=t.global;t.id=ot++,t.batchId="0";var i=r(it),a=t.shared={props:"a0"};Object.keys(it).forEach(function(t){a[t]=n.def(i,".",t)}),de.optional(function(){t.CHECK=r(de),t.commandStr=de.guessCommand(),t.command=r(t.commandStr),t.assert=function(t,e,n){t("if(!(",e,"))",this.CHECK,".commandRaise(",r(n),",",this.command,");")},at.invalidBlendCombinations=Ua});var o=t.next={},s=t.current={};Object.keys(nt).forEach(function(t){Array.isArray($[t])&&(o[t]=n.def(a.next,".",t),s[t]=n.def(a.current,".",t))});var l=t.constants={};Object.keys(at).forEach(function(t){l[t]=n.def(JSON.stringify(at[t]))}),t.invoke=function(e,n){switch(n.type){case ei:var i=["this",a.context,a.props,t.batchId];return e.def(r(n.data),".call(",i.slice(0,Math.max(n.data.length+1,4)),")");case ri:return e.def(a.props,n.data);case ni:return e.def(a.context,n.data);case ii:return e.def("this",n.data);case ai:return n.data.append(t,e),n.data.ref}},t.attribCache={};var c={};return t.scopeAttrib=function(t){var n=e.id(t);if(n in c)return c[n];var i=u.scope[n];return i||(i=u.scope[n]=new X),c[n]=r(i)},t}function b(t){var e,r=t.static,n=t.dynamic;if(Di in r){var i=!!r[Di];e=Gt(function(t,e){return i}),e.enable=i}else if(Di in n){var a=n[Di];e=Yt(a,function(t,e){return t.invoke(e,a)})}return e}function x(t,e){var r=t.static,n=t.dynamic;if(Pi in r){var i=r[Pi];return i?(i=s.getFramebuffer(i),de.command(i,"invalid framebuffer object"),Gt(function(t,e){var r=t.link(i),n=t.shared;e.set(n.framebuffer,".next",r);var a=n.context;return e.set(a,"."+Vi,r+".width"),e.set(a,"."+Hi,r+".height"),r})):Gt(function(t,e){var r=t.shared;e.set(r.framebuffer,".next","null");var n=r.context;return e.set(n,"."+Vi,n+"."+Yi),e.set(n,"."+Hi,n+"."+Wi),"null"})}if(Pi in n){var a=n[Pi];return Yt(a,function(t,e){var r=t.invoke(e,a),n=t.shared,i=n.framebuffer,o=e.def(i,".getFramebuffer(",r,")");de.optional(function(){t.assert(e,"!"+r+"||"+o,"invalid framebuffer object")}),e.set(i,".next",o);var s=n.context;return e.set(s,"."+Vi,o+"?"+o+".width:"+s+"."+Yi),e.set(s,"."+Hi,o+"?"+o+".height:"+s+"."+Wi),o})}return null}function _(t,e,r){function n(t){if(t in i){var n=i[t];de.commandType(n,"object","invalid "+t,r.commandStr);var o,s,l=!0,u=0|n.x,c=0|n.y;return"width"in n?(o=0|n.width,de.command(o>=0,"invalid "+t,r.commandStr)):l=!1,"height"in n?(s=0|n.height,de.command(s>=0,"invalid "+t,r.commandStr)):l=!1,new Ht(!l&&e&&e.thisDep,!l&&e&&e.contextDep,!l&&e&&e.propDep,function(t,e){var r=t.shared.context,i=o;"width"in n||(i=e.def(r,".",Vi,"-",u));var a=s;return"height"in n||(a=e.def(r,".",Hi,"-",c)),[u,c,i,a]})}if(t in a){var h=a[t],f=Yt(h,function(e,r){var n=e.invoke(r,h);de.optional(function(){e.assert(r,n+"&&typeof "+n+'==="object"',"invalid "+t)});var i=e.shared.context,a=r.def(n,".x|0"),o=r.def(n,".y|0"),s=r.def('"width" in ',n,"?",n,".width|0:","(",i,".",Vi,"-",a,")"),l=r.def('"height" in ',n,"?",n,".height|0:","(",i,".",Hi,"-",o,")");return de.optional(function(){e.assert(r,s+">=0&&"+l+">=0","invalid "+t)}),[a,o,s,l]});return e&&(f.thisDep=f.thisDep||e.thisDep,f.contextDep=f.contextDep||e.contextDep,f.propDep=f.propDep||e.propDep),f}return e?new Ht(e.thisDep,e.contextDep,e.propDep,function(t,e){var r=t.shared.context;return[0,0,e.def(r,".",Vi),e.def(r,".",Hi)]}):null}var i=t.static,a=t.dynamic,o=n(zi);if(o){var s=o;o=new Ht(o.thisDep,o.contextDep,o.propDep,function(t,e){var r=s.append(t,e),n=t.shared.context;return e.set(n,"."+qi,r[2]),e.set(n,"."+Gi,r[3]),r})}return{viewport:o,scissor_box:n(Ii)}}function w(t){function r(t){if(t in i){var r=e.id(i[t]);de.optional(function(){c.shader(qa[t],r,de.guessCommand())});var n=Gt(function(){return r});return n.id=r,n}if(t in a){var o=a[t];return Yt(o,function(e,r){var n=e.invoke(r,o),i=r.def(e.shared.strings,".id(",n,")");return de.optional(function(){r(e.shared.shader,".shader(",qa[t],",",i,",",e.command,");")}),i})}return null}var n,i=t.static,a=t.dynamic,o=r(Ri),s=r(Oi),l=null;return qt(o)&&qt(s)?(l=c.program(s.id,o.id),n=Gt(function(t,e){return t.link(l)})):n=new Ht(o&&o.thisDep||s&&s.thisDep,o&&o.contextDep||s&&s.contextDep,o&&o.propDep||s&&s.propDep,function(t,e){var r,n=t.shared.shader;r=o?o.append(t,e):e.def(n,".",Ri);var i;i=s?s.append(t,e):e.def(n,".",Oi);var a=n+".program("+i+","+r;return de.optional(function(){a+=","+t.command}),e.def(a+")")}),{frag:o,vert:s,progVar:n,program:l}}function M(t,e){function r(t,r){if(t in n){var a=0|n[t];return de.command(!r||a>=0,"invalid "+t,e.commandStr),Gt(function(t,e){return r&&(t.OFFSET=a),a})}if(t in i){var s=i[t];return Yt(s,function(e,n){var i=e.invoke(n,s);return r&&(e.OFFSET=i,de.optional(function(){e.assert(n,i+">=0","invalid "+t)})),i})}return r&&o?Gt(function(t,e){return t.OFFSET="0",0}):null}var n=t.static,i=t.dynamic,o=function(){if(Fi in n){var t=n[Fi];Ut(t)?t=a.getElements(a.create(t,!0)):t&&(t=a.getElements(t),de.command(t,"invalid elements",e.commandStr));var r=Gt(function(e,r){if(t){var n=e.link(t);return e.ELEMENTS=n,n}return e.ELEMENTS=null,null});return r.value=t,r}if(Fi in i){var o=i[Fi];return Yt(o,function(t,e){var r=t.shared,n=r.isBufferArgs,i=r.elements,a=t.invoke(e,o),s=e.def("null"),l=e.def(n,"(",a,")"),u=t.cond(l).then(s,"=",i,".createStream(",a,");").else(s,"=",i,".getElements(",a,");");return de.optional(function(){t.assert(u.else,"!"+a+"||"+s,"invalid elements")}),e.entry(u),e.exit(t.cond(l).then(i,".destroyStream(",s,");")),t.ELEMENTS=s,s})}return null}(),s=r(Bi,!0);return{elements:o,primitive:function(){if(ji in n){var t=n[ji];return de.commandParameter(t,Be,"invalid primitve",e.commandStr),Gt(function(e,r){return Be[t]})}if(ji in i){var r=i[ji];return Yt(r,function(t,e){var n=t.constants.primTypes,i=t.invoke(e,r);return de.optional(function(){t.assert(e,i+" in "+n,"invalid primitive, must be one of "+Object.keys(Be))}),e.def(n,"[",i,"]")})}return o?qt(o)?Gt(o.value?function(t,e){return e.def(t.ELEMENTS,".primType")}:function(){return Aa}):new Ht(o.thisDep,o.contextDep,o.propDep,function(t,e){var r=t.ELEMENTS;return e.def(r,"?",r,".primType:",Aa)}):null}(),count:function(){if(Ni in n){var t=0|n[Ni];return de.command("number"==typeof t&&t>=0,"invalid vertex count",e.commandStr),Gt(function(){return t})}if(Ni in i){var r=i[Ni];return Yt(r,function(t,e){var n=t.invoke(e,r);return de.optional(function(){t.assert(e,"typeof "+n+'==="number"&&'+n+">=0&&"+n+"===("+n+"|0)","invalid vertex count")}),n})}if(o){if(qt(o)){if(o)return s?new Ht(s.thisDep,s.contextDep,s.propDep,function(t,e){var r=e.def(t.ELEMENTS,".vertCount-",t.OFFSET);return de.optional(function(){t.assert(e,r+">=0","invalid vertex offset/element buffer too small")}),r}):Gt(function(t,e){return e.def(t.ELEMENTS,".vertCount")});var a=Gt(function(){return-1});return de.optional(function(){a.MISSING=!0}),a}var l=new Ht(o.thisDep||s.thisDep,o.contextDep||s.contextDep,o.propDep||s.propDep,function(t,e){var r=t.ELEMENTS;return t.OFFSET?e.def(r,"?",r,".vertCount-",t.OFFSET,":-1"):e.def(r,"?",r,".vertCount:-1")});return de.optional(function(){l.DYNAMIC=!0}),l}return null}(),instances:r(Ui,!1),offset:s}}function k(t,e){var r=t.static,i=t.dynamic,a={};return et.forEach(function(t){function o(e,n){if(t in r){var o=e(r[t]);a[s]=Gt(function(){return o})}else if(t in i){var l=i[t];a[s]=Yt(l,function(t,e){return n(t,e,t.invoke(e,l))})}}var s=m(t);switch(t){case gi:case si:case oi:case Ai:case hi:case Ci:case xi:case wi:case Mi:case pi:return o(function(r){return de.commandType(r,"boolean",t,e.commandStr),r},function(e,r,n){return de.optional(function(){e.assert(r,"typeof "+n+'==="boolean"',"invalid flag "+t,e.commandStr)}),n});case fi:return o(function(r){return de.commandParameter(r,Va,"invalid "+t,e.commandStr),Va[r]},function(e,r,n){var i=e.constants.compareFuncs;return de.optional(function(){e.assert(r,n+" in "+i,"invalid "+t+", must be one of "+Object.keys(Va))}),r.def(i,"[",n,"]")});case di:return o(function(t){return de.command(mt(t)&&2===t.length&&"number"==typeof t[0]&&"number"==typeof t[1]&&t[0]<=t[1],"depth range is 2d array",e.commandStr),t},function(t,e,r){return de.optional(function(){t.assert(e,t.shared.isArrayLike+"("+r+")&&"+r+".length===2&&typeof "+r+'[0]==="number"&&typeof '+r+'[1]==="number"&&'+r+"[0]<="+r+"[1]","depth range must be a 2d array")}),[e.def("+",r,"[0]"),e.def("+",r,"[1]")]});case ci:return o(function(t){de.commandType(t,"object","blend.func",e.commandStr);var r="srcRGB"in t?t.srcRGB:t.src,n="srcAlpha"in t?t.srcAlpha:t.src,i="dstRGB"in t?t.dstRGB:t.dst,a="dstAlpha"in t?t.dstAlpha:t.dst;return de.commandParameter(r,Ba,s+".srcRGB",e.commandStr),de.commandParameter(n,Ba,s+".srcAlpha",e.commandStr),de.commandParameter(i,Ba,s+".dstRGB",e.commandStr),de.commandParameter(a,Ba,s+".dstAlpha",e.commandStr),de.command(-1===Ua.indexOf(r+", "+i),"unallowed blending combination (srcRGB, dstRGB) = ("+r+", "+i+")",e.commandStr),[Ba[r],Ba[i],Ba[n],Ba[a]]},function(e,r,n){function i(i,o){var s=r.def('"',i,o,'" in ',n,"?",n,".",i,o,":",n,".",i);return de.optional(function(){e.assert(r,s+" in "+a,"invalid "+t+"."+i+o+", must be one of "+Object.keys(Ba))}),s}var a=e.constants.blendFuncs;de.optional(function(){e.assert(r,n+"&&typeof "+n+'==="object"',"invalid blend func, must be an object")});var o=i("src","RGB"),s=i("dst","RGB");de.optional(function(){var t=e.constants.invalidBlendCombinations;e.assert(r,t+".indexOf("+o+'+", "+'+s+") === -1 ","unallowed blending combination for (srcRGB, dstRGB)")});var l=r.def(a,"[",o,"]"),u=r.def(a,"[",i("src","Alpha"),"]");return[l,r.def(a,"[",s,"]"),u,r.def(a,"[",i("dst","Alpha"),"]")]});case ui:return o(function(r){return"string"==typeof r?(de.commandParameter(r,Z,"invalid "+t,e.commandStr),[Z[r],Z[r]]):"object"==typeof r?(de.commandParameter(r.rgb,Z,t+".rgb",e.commandStr),de.commandParameter(r.alpha,Z,t+".alpha",e.commandStr),[Z[r.rgb],Z[r.alpha]]):void de.commandRaise("invalid blend.equation",e.commandStr)},function(e,r,n){var i=e.constants.blendEquations,a=r.def(),o=r.def(),s=e.cond("typeof ",n,'==="string"');return de.optional(function(){function r(t,r,n){e.assert(t,n+" in "+i,"invalid "+r+", must be one of "+Object.keys(Z))}r(s.then,t,n),e.assert(s.else,n+"&&typeof "+n+'==="object"',"invalid "+t),r(s.else,t+".rgb",n+".rgb"),r(s.else,t+".alpha",n+".alpha")}),s.then(a,"=",o,"=",i,"[",n,"];"),s.else(a,"=",i,"[",n,".rgb];",o,"=",i,"[",n,".alpha];"),r(s),[a,o]});case li:return o(function(t){return de.command(mt(t)&&4===t.length,"blend.color must be a 4d array",e.commandStr),J(4,function(e){return+t[e]})},function(t,e,r){return de.optional(function(){t.assert(e,t.shared.isArrayLike+"("+r+")&&"+r+".length===4","blend.color must be a 4d array")}),J(4,function(t){return e.def("+",r,"[",t,"]")})});case Ti:return o(function(t){return de.commandType(t,"number",s,e.commandStr),0|t},function(t,e,r){return de.optional(function(){t.assert(e,"typeof "+r+'==="number"',"invalid stencil.mask")}),e.def(r,"|0")});case Si:return o(function(r){de.commandType(r,"object",s,e.commandStr);var n=r.cmp||"keep",i=r.ref||0,a="mask"in r?r.mask:-1;return de.commandParameter(n,Va,t+".cmp",e.commandStr),de.commandType(i,"number",t+".ref",e.commandStr),de.commandType(a,"number",t+".mask",e.commandStr),[Va[n],i,a]},function(t,e,r){var n=t.constants.compareFuncs;return de.optional(function(){function i(){t.assert(e,Array.prototype.join.call(arguments,""),"invalid stencil.func")}i(r+"&&typeof ",r,'==="object"'),i('!("cmp" in ',r,")||(",r,".cmp in ",n,")")}),[e.def('"cmp" in ',r,"?",n,"[",r,".cmp]",":",Da),e.def(r,".ref|0"),e.def('"mask" in ',r,"?",r,".mask|0:-1")]});case Ei:case Li:return o(function(r){de.commandType(r,"object",s,e.commandStr);var n=r.fail||"keep",i=r.zfail||"keep",a=r.zpass||"keep";return de.commandParameter(n,Ha,t+".fail",e.commandStr),de.commandParameter(i,Ha,t+".zfail",e.commandStr),de.commandParameter(a,Ha,t+".zpass",e.commandStr),[t===Li?Sa:Ta,Ha[n],Ha[i],Ha[a]]},function(e,r,n){function i(i){return de.optional(function(){e.assert(r,'!("'+i+'" in '+n+")||("+n+"."+i+" in "+a+")","invalid "+t+"."+i+", must be one of "+Object.keys(Ha))}),r.def('"',i,'" in ',n,"?",a,"[",n,".",i,"]:",Da)}var a=e.constants.stencilOps;return de.optional(function(){e.assert(r,n+"&&typeof "+n+'==="object"',"invalid "+t)}),[t===Li?Sa:Ta,i("fail"),i("zfail"),i("zpass")]});case _i:return o(function(t){de.commandType(t,"object",s,e.commandStr);var r=0|t.factor,n=0|t.units;return de.commandType(r,"number",s+".factor",e.commandStr),de.commandType(n,"number",s+".units",e.commandStr),[r,n]},function(e,r,n){return de.optional(function(){e.assert(r,n+"&&typeof "+n+'==="object"',"invalid "+t)}),[r.def(n,".factor|0"),r.def(n,".units|0")]});case vi:return o(function(t){var r=0;return"front"===t?r=Ta:"back"===t&&(r=Sa),de.command(!!r,s,e.commandStr),r},function(t,e,r){return de.optional(function(){t.assert(e,r+'==="front"||'+r+'==="back"',"invalid cull.face")}),e.def(r,'==="front"?',Ta,":",Sa)});case bi:return o(function(t){return de.command("number"==typeof t&&t>=n.lineWidthDims[0]&&t<=n.lineWidthDims[1],"invalid line width, must positive number between "+n.lineWidthDims[0]+" and "+n.lineWidthDims[1],e.commandStr),t},function(t,e,r){return de.optional(function(){t.assert(e,"typeof "+r+'==="number"&&'+r+">="+n.lineWidthDims[0]+"&&"+r+"<="+n.lineWidthDims[1],"invalid line width")}),r});case yi:return o(function(t){return de.commandParameter(t,Ga,s,e.commandStr),Ga[t]},function(t,e,r){return de.optional(function(){t.assert(e,r+'==="cw"||'+r+'==="ccw"',"invalid frontFace, must be one of cw,ccw")}),e.def(r+'==="cw"?'+Ea+":"+La)});case mi:return o(function(t){return de.command(mt(t)&&4===t.length,"color.mask must be length 4 array",e.commandStr),t.map(function(t){return!!t})},function(t,e,r){return de.optional(function(){t.assert(e,t.shared.isArrayLike+"("+r+")&&"+r+".length===4","invalid color.mask")}),J(4,function(t){return"!!"+r+"["+t+"]"})});case ki:return o(function(t){de.command("object"==typeof t&&t,s,e.commandStr);var r="value"in t?t.value:1,n=!!t.invert;return de.command("number"==typeof r&&r>=0&&r<=1,"sample.coverage.value must be a number between 0 and 1",e.commandStr),[r,n]},function(t,e,r){return de.optional(function(){t.assert(e,r+"&&typeof "+r+'==="object"',"invalid sample.coverage")}),[e.def('"value" in ',r,"?+",r,".value:1"),e.def("!!",r,".invert")]})}}),a}function A(t,e){var r=t.static,n=t.dynamic,i={};return Object.keys(r).forEach(function(t){var n,a=r[t];if("number"==typeof a||"boolean"==typeof a)n=Gt(function(){return a});else if("function"==typeof a){var o=a._reglType;"texture2d"===o||"textureCube"===o?n=Gt(function(t){return t.link(a)}):"framebuffer"===o||"framebufferCube"===o?(de.command(a.color.length>0,'missing color attachment for framebuffer sent to uniform "'+t+'"',e.commandStr),n=Gt(function(t){return t.link(a.color[0])})):de.commandRaise('invalid data for uniform "'+t+'"',e.commandStr)}else mt(a)?n=Gt(function(e){return e.global.def("[",J(a.length,function(r){return de.command("number"==typeof a[r]||"boolean"==typeof a[r],"invalid uniform "+t,e.commandStr),a[r]}),"]")}):de.commandRaise('invalid or missing data for uniform "'+t+'"',e.commandStr);n.value=a,i[t]=n}),Object.keys(n).forEach(function(t){var e=n[t];i[t]=Yt(e,function(t,r){return t.invoke(r,e)})}),i}function T(t,r){var n=t.static,a=t.dynamic,o={};return Object.keys(n).forEach(function(t){var a=n[t],s=e.id(t),l=new X;if(Ut(a))l.state=$n,l.buffer=i.getBuffer(i.create(a,Zi,!1,!0)),l.type=0;else{var u=i.getBuffer(a);if(u)l.state=$n,l.buffer=u,l.type=0;else if(de.command("object"==typeof a&&a,"invalid data for attribute "+t,r.commandStr),a.constant){var c=a.constant;l.buffer="null",l.state=ti,"number"==typeof c?l.x=c:(de.command(mt(c)&&c.length>0&&c.length<=4,"invalid constant for attribute "+t,r.commandStr),Kn.forEach(function(t,e){e<c.length&&(l[t]=c[e])}))}else{u=Ut(a.buffer)?i.getBuffer(i.create(a.buffer,Zi,!1,!0)):i.getBuffer(a.buffer),de.command(!!u,'missing buffer for attribute "'+t+'"',r.commandStr);var h=0|a.offset;de.command(h>=0,'invalid offset for attribute "'+t+'"',r.commandStr);var f=0|a.stride;de.command(f>=0&&f<256,'invalid stride for attribute "'+t+'", must be integer betweeen [0, 255]',r.commandStr);var d=0|a.size;de.command(!("size"in a)||d>0&&d<=4,'invalid size for attribute "'+t+'", must be 1,2,3,4',r.commandStr);var p=!!a.normalized,m=0;"type"in a&&(de.commandParameter(a.type,Ie,"invalid type for attribute "+t,r.commandStr),m=Ie[a.type]);var g=0|a.divisor;"divisor"in a&&(de.command(0===g||K,'cannot specify divisor for attribute "'+t+'", instancing not supported',r.commandStr),de.command(g>=0,'invalid divisor for attribute "'+t+'"',r.commandStr)),de.optional(function(){var e=r.commandStr,n=["buffer","offset","divisor","normalized","type","size","stride"];Object.keys(a).forEach(function(r){de.command(n.indexOf(r)>=0,'unknown parameter "'+r+'" for attribute pointer "'+t+'" (valid parameters are '+n+")",e)})}),l.buffer=u,l.state=$n,l.size=d,l.normalized=p,l.type=m||u.dtype,l.offset=h,l.stride=f,l.divisor=g}}o[t]=Gt(function(t,e){var r=t.attribCache;if(s in r)return r[s];var n={isStream:!1};return Object.keys(l).forEach(function(t){n[t]=l[t]}),l.buffer&&(n.buffer=t.link(l.buffer),n.type=n.type||n.buffer+".dtype"),r[s]=n,n})}),Object.keys(a).forEach(function(t){function e(e,n){function i(t){n(u[t],"=",a,".",t,"|0;")}var a=e.invoke(n,r),o=e.shared,s=o.isBufferArgs,l=o.buffer;de.optional(function(){e.assert(n,a+"&&(typeof "+a+'==="object"||typeof '+a+'==="function")&&('+s+"("+a+")||"+l+".getBuffer("+a+")||"+l+".getBuffer("+a+".buffer)||"+s+"("+a+'.buffer)||("constant" in '+a+"&&(typeof "+a+'.constant==="number"||'+o.isArrayLike+"("+a+".constant))))",'invalid dynamic attribute "'+t+'"')});var u={isStream:n.def(!1)},c=new X;c.state=$n,Object.keys(c).forEach(function(t){u[t]=n.def(""+c[t])});var h=u.buffer,f=u.type;return n("if(",s,"(",a,")){",u.isStream,"=true;",h,"=",l,".createStream(",Zi,",",a,");",f,"=",h,".dtype;","}else{",h,"=",l,".getBuffer(",a,");","if(",h,"){",f,"=",h,".dtype;",'}else if("constant" in ',a,"){",u.state,"=",ti,";","if(typeof "+a+'.constant === "number"){',u[Kn[0]],"=",a,".constant;",Kn.slice(1).map(function(t){return u[t]}).join("="),"=0;","}else{",Kn.map(function(t,e){return u[t]+"="+a+".constant.length>="+e+"?"+a+".constant["+e+"]:0;"}).join(""),"}}else{","if(",s,"(",a,".buffer)){",h,"=",l,".createStream(",Zi,",",a,".buffer);","}else{",h,"=",l,".getBuffer(",a,".buffer);","}",f,'="type" in ',a,"?",o.glTypes,"[",a,".type]:",h,".dtype;",u.normalized,"=!!",a,".normalized;"),i("size"),i("offset"),i("stride"),i("divisor"),n("}}"),n.exit("if(",u.isStream,"){",l,".destroyStream(",h,");","}"),u}var r=a[t];o[t]=Yt(r,e)}),o}function S(t){var e=t.static,r=t.dynamic,n={};return Object.keys(e).forEach(function(t){var r=e[t];n[t]=Gt(function(t,e){return"number"==typeof r||"boolean"==typeof r?""+r:t.link(r)})}),Object.keys(r).forEach(function(t){var e=r[t];n[t]=Yt(e,function(t,r){return t.invoke(r,e)})}),n}function E(t,e,r,n,i){function a(t){var e=u[t];e&&(h[t]=e)}var o=t.static,s=t.dynamic;de.optional(function(){function t(t){Object.keys(t).forEach(function(t){de.command(e.indexOf(t)>=0,'unknown parameter "'+t+'"',i.commandStr)})}var e=[Pi,Oi,Ri,Fi,ji,Bi,Ni,Ui,Di].concat(et);t(o),t(s)});var l=x(t,i),u=_(t,l,i),c=M(t,i),h=k(t,i),f=w(t,i);a(zi),a(m(Ii));var d=Object.keys(h).length>0,p={framebuffer:l,draw:c,shader:f,state:h,dirty:d};return p.profile=b(t,i),p.uniforms=A(r,i),p.attributes=T(e,i),p.context=S(n,i),p}function L(t,e,r){var n=t.shared,i=n.context,a=t.scope();Object.keys(r).forEach(function(n){e.save(i,"."+n);var o=r[n];a(i,".",n,"=",o.append(t,e),";")}),e(a)}function C(t,e,r,n){var i,a=t.shared,o=a.gl,s=a.framebuffer;Q&&(i=e.def(a.extensions,".webgl_draw_buffers"));var l,u=t.constants,c=u.drawBuffer,h=u.backBuffer;l=r?r.append(t,e):e.def(s,".next"),n||e("if(",l,"!==",s,".cur){"),e("if(",l,"){",o,".bindFramebuffer(",ja,",",l,".framebuffer);"),Q&&e(i,".drawBuffersWEBGL(",c,"[",l,".colorAttachments.length]);"),e("}else{",o,".bindFramebuffer(",ja,",null);"),Q&&e(i,".drawBuffersWEBGL(",h,");"),e("}",s,".cur=",l,";"),n||e("}")}function I(t,e,r){var n=t.shared,i=n.gl,a=t.current,o=t.next,s=n.current,l=n.next,u=t.cond(s,".dirty");et.forEach(function(e){var n=m(e);if(!(n in r.state)){var c,h;if(n in o){c=o[n],h=a[n];var f=J($[n].length,function(t){return u.def(c,"[",t,"]")});u(t.cond(f.map(function(t,e){return t+"!=="+h+"["+e+"]"}).join("||")).then(i,".",nt[n],"(",f,");",f.map(function(t,e){return h+"["+e+"]="+t}).join(";"),";"))}else{c=u.def(l,".",n);var d=t.cond(c,"!==",s,".",n);u(d),n in rt?d(t.cond(c).then(i,".enable(",rt[n],");").else(i,".disable(",rt[n],");"),s,".",n,"=",c,";"):d(i,".",nt[n],"(",c,");",s,".",n,"=",c,";")}}}),0===Object.keys(r.state).length&&u(s,".dirty=false;"),e(u)}function z(t,e,r,n){var i=t.shared,a=t.current,o=i.current,s=i.gl;Vt(Object.keys(r)).forEach(function(i){var l=r[i];if(!n||n(l)){var u=l.append(t,e);if(rt[i]){var c=rt[i];qt(l)?u?e(s,".enable(",c,");"):e(s,".disable(",c,");"):e(t.cond(u).then(s,".enable(",c,");").else(s,".disable(",c,");")),e(o,".",i,"=",u,";")}else if(mt(u)){var h=a[i];e(s,".",nt[i],"(",u,");",u.map(function(t,e){return h+"["+e+"]="+t}).join(";"),";")}else e(s,".",nt[i],"(",u,");",o,".",i,"=",u,";")}})}function D(t,e){K&&(t.instancing=e.def(t.shared.extensions,".angle_instanced_arrays"))}function P(t,e,r,n,i){function a(){return"undefined"==typeof performance?"Date.now()":"performance.now()"}function o(t){u=e.def(),t(u,"=",a(),";"),"string"==typeof i?t(p,".count+=",i,";"):t(p,".count++;"),d&&(n?(c=e.def(),t(c,"=",g,".getNumPendingQueries();")):t(g,".beginQuery(",p,");"))}function s(t){t(p,".cpuTime+=",a(),"-",u,";"),d&&(n?t(g,".pushScopeStats(",c,",",g,".getNumPendingQueries(),",p,");"):t(g,".endQuery();"))}function l(t){var r=e.def(m,".profile");e(m,".profile=",t,";"),e.exit(m,".profile=",r,";")}var u,c,h,f=t.shared,p=t.stats,m=f.current,g=f.timer,v=r.profile;if(v){if(qt(v))return void(v.enable?(o(e),s(e.exit),l("true")):l("false"));h=v.append(t,e),l(h)}else h=e.def(m,".profile");var y=t.block();o(y),e("if(",h,"){",y,"}");var b=t.block();s(b),e.exit("if(",h,"){",b,"}")}function O(t,e,r,n,i){function a(t){switch(t){case ua:case da:case va:return 2;case ca:case pa:case ya:return 3;case ha:case ma:case ba:return 4;default:return 1}}function o(r,n,i){function a(){e("if(!",c,".buffer){",l,".enableVertexAttribArray(",u,");}");var r,a=i.type;if(r=i.size?e.def(i.size,"||",n):n,e("if(",c,".type!==",a,"||",c,".size!==",r,"||",p.map(function(t){return c+"."+t+"!=="+i[t]}).join("||"),"){",l,".bindBuffer(",Zi,",",f,".buffer);",l,".vertexAttribPointer(",[u,r,a,i.normalized,i.stride,i.offset],");",c,".type=",a,";",c,".size=",r,";",p.map(function(t){return c+"."+t+"="+i[t]+";"}).join(""),"}"),K){var o=i.divisor;e("if(",c,".divisor!==",o,"){",t.instancing,".vertexAttribDivisorANGLE(",[u,o],");",c,".divisor=",o,";}")}}function o(){e("if(",c,".buffer){",l,".disableVertexAttribArray(",u,");","}if(",Kn.map(function(t,e){return c+"."+t+"!=="+d[e]}).join("||"),"){",l,".vertexAttrib4f(",u,",",d,");",Kn.map(function(t,e){return c+"."+t+"="+d[e]+";"}).join(""),"}")}var l=s.gl,u=e.def(r,".location"),c=e.def(s.attributes,"[",u,"]"),h=i.state,f=i.buffer,d=[i.x,i.y,i.z,i.w],p=["buffer","normalized","offset","stride"];h===$n?a():h===ti?o():(e("if(",h,"===",$n,"){"),a(),e("}else{"),o(),e("}"))}var s=t.shared;n.forEach(function(n){var s,l=n.name,u=r.attributes[l];if(u){if(!i(u))return;s=u.append(t,e)}else{if(!i(Ya))return;var c=t.scopeAttrib(l);de.optional(function(){t.assert(e,c+".state","missing attribute "+l)}),s={},Object.keys(new X).forEach(function(t){s[t]=e.def(c,".",t)})}o(t.link(n),a(n.info.type),s)})}function R(t,r,n,i,a){for(var o,s=t.shared,l=s.gl,u=0;u<i.length;++u){var c,h=i[u],f=h.name,d=h.info.type,p=n.uniforms[f],m=t.link(h),g=m+".location";if(p){if(!a(p))continue;if(qt(p)){var v=p.value;if(de.command(null!==v&&void 0!==v,'missing uniform "'+f+'"',t.commandStr),d===Ma||d===ka){de.command("function"==typeof v&&(d===Ma&&("texture2d"===v._reglType||"framebuffer"===v._reglType)||d===ka&&("textureCube"===v._reglType||"framebufferCube"===v._reglType)),"invalid texture for uniform "+f,t.commandStr);var y=t.link(v._texture||v.color[0]._texture);r(l,".uniform1i(",g,",",y+".bind());"),r.exit(y,".unbind();")}else if(d===xa||d===_a||d===wa){de.optional(function(){de.command(mt(v),"invalid matrix for uniform "+f,t.commandStr),de.command(d===xa&&4===v.length||d===_a&&9===v.length||d===wa&&16===v.length,"invalid length for matrix uniform "+f,t.commandStr)});var b=t.global.def("new Float32Array(["+Array.prototype.slice.call(v)+"])"),x=2;d===_a?x=3:d===wa&&(x=4),r(l,".uniformMatrix",x,"fv(",g,",false,",b,");")}else{switch(d){case la:de.commandType(v,"number","uniform "+f,t.commandStr),o="1f";break;case ua:de.command(mt(v)&&2===v.length,"uniform "+f,t.commandStr),o="2f";break;case ca:de.command(mt(v)&&3===v.length,"uniform "+f,t.commandStr),o="3f";break;case ha:de.command(mt(v)&&4===v.length,"uniform "+f,t.commandStr),o="4f";break;case ga:de.commandType(v,"boolean","uniform "+f,t.commandStr),o="1i";break;case fa:de.commandType(v,"number","uniform "+f,t.commandStr),o="1i";break;case va:case da:de.command(mt(v)&&2===v.length,"uniform "+f,t.commandStr),o="2i";break;case ya:case pa:de.command(mt(v)&&3===v.length,"uniform "+f,t.commandStr),o="3i";break;case ba:case ma:de.command(mt(v)&&4===v.length,"uniform "+f,t.commandStr),o="4i"}r(l,".uniform",o,"(",g,",",mt(v)?Array.prototype.slice.call(v):v,");")}continue}c=p.append(t,r)}else{if(!a(Ya))continue;c=r.def(s.uniforms,"[",e.id(f),"]")}d===Ma?r("if(",c,"&&",c,'._reglType==="framebuffer"){',c,"=",c,".color[0];","}"):d===ka&&r("if(",c,"&&",c,'._reglType==="framebufferCube"){',c,"=",c,".color[0];","}"),de.optional(function(){function e(e,n){t.assert(r,e,'bad data or missing for uniform "'+f+'". '+n)}function n(t){e("typeof "+c+'==="'+t+'"',"invalid type, expected "+t)}function i(r,n){e(s.isArrayLike+"("+c+")&&"+c+".length==="+r,"invalid vector, should have length "+r,t.commandStr)}function a(r){e("typeof "+c+'==="function"&&'+c+'._reglType==="texture'+(r===Ki?"2d":"Cube")+'"',"invalid texture type",t.commandStr)}switch(d){case fa:n("number");break;case da:i(2,"number");break;case pa:i(3,"number");break;case ma:i(4,"number");break;case la:n("number");break;case ua:i(2,"number");break;case ca:i(3,"number");break;case ha:i(4,"number");break;case ga:n("boolean");break;case va:i(2,"boolean");break;case ya:i(3,"boolean");break;case ba:i(4,"boolean");break;case xa:i(4,"number");break;case _a:i(9,"number");break;case wa:i(16,"number");break;case Ma:a(Ki);break;case ka:a(Qi)}});var _=1;switch(d){case Ma:case ka:var w=r.def(c,"._texture");r(l,".uniform1i(",g,",",w,".bind());"),r.exit(w,".unbind();");continue;case fa:case ga:o="1i";break;case da:case va:o="2i",_=2;break;case pa:case ya:o="3i",_=3;break;case ma:case ba:o="4i",_=4;break;case la:o="1f";break;case ua:o="2f",_=2;break;case ca:o="3f",_=3;break;case ha:o="4f",_=4;break;case xa:o="Matrix2fv";break;case _a:o="Matrix3fv";break;case wa:o="Matrix4fv"}if(r(l,".uniform",o,"(",g,","),"M"===o.charAt(0)){var M=Math.pow(d-xa+2,2),k=t.global.def("new Float32Array(",M,")");r("false,(Array.isArray(",c,")||",c," instanceof Float32Array)?",c,":(",J(M,function(t){return k+"["+t+"]="+c+"["+t+"]"}),",",k,")")}else r(_>1?J(_,function(t){return c+"["+t+"]"}):c);r(");")}}function F(t,e,r,n){function i(i){var a=c[i];return a?a.contextDep&&n.contextDynamic||a.propDep?a.append(t,r):a.append(t,e):e.def(u,".",i)}function a(){function t(){r(g,".drawElementsInstancedANGLE(",[f,p,v,d+"<<(("+v+"-"+Qn+")>>1)",m],");")}function e(){r(g,".drawArraysInstancedANGLE(",[f,d,p,m],");")}h?y?t():(r("if(",h,"){"),t(),r("}else{"),e(),r("}")):e()}function o(){function t(){r(l+".drawElements("+[f,p,v,d+"<<(("+v+"-"+Qn+")>>1)"]+");")}function e(){r(l+".drawArrays("+[f,d,p]+");")}h?y?t():(r("if(",h,"){"),t(),r("}else{"),e(),r("}")):e()}var s=t.shared,l=s.gl,u=s.draw,c=n.draw,h=function(){var i,a=c.elements,o=e;return a?((a.contextDep&&n.contextDynamic||a.propDep)&&(o=r),i=a.append(t,o)):i=o.def(u,".",Fi),i&&o("if("+i+")"+l+".bindBuffer("+Ji+","+i+".buffer.buffer);"),i}(),f=i(ji),d=i(Bi),p=function(){var i,a=c.count,o=e;return a?((a.contextDep&&n.contextDynamic||a.propDep)&&(o=r),i=a.append(t,o),de.optional(function(){a.MISSING&&t.assert(e,"false","missing vertex count"),a.DYNAMIC&&t.assert(o,i+">=0","missing vertex count")})):(i=o.def(u,".",Ni),de.optional(function(){t.assert(o,i+">=0","missing vertex count")})),i}();if("number"==typeof p){if(0===p)return}else r("if(",p,"){"),r.exit("}");var m,g;K&&(m=i(Ui),g=t.instancing);var v=h+".type",y=c.elements&&qt(c.elements);K&&("number"!=typeof m||m>=0)?"string"==typeof m?(r("if(",m,">0){"),a(),r("}else if(",m,"<0){"),o(),r("}")):a():o()}function j(t,e,r,n,i){var a=y(),o=a.proc("body",i);return de.optional(function(){a.commandStr=e.commandStr,a.command=a.link(e.commandStr)}),K&&(a.instancing=o.def(a.shared.extensions,".angle_instanced_arrays")),t(a,o,r,n),a.compile().body}function N(t,e,r,n){D(t,e),O(t,e,r,n.attributes,function(){return!0}),R(t,e,r,n.uniforms,function(){return!0}),F(t,e,e,r)}function B(t,e){var r=t.proc("draw",1);D(t,r),L(t,r,e.context),C(t,r,e.framebuffer),I(t,r,e),z(t,r,e.state),P(t,r,e,!1,!0);var n=e.shader.progVar.append(t,r);if(r(t.shared.gl,".useProgram(",n,".program);"),e.shader.program)N(t,r,e,e.shader.program);else{var i=t.global.def("{}"),a=r.def(n,".id"),o=r.def(i,"[",a,"]");r(t.cond(o).then(o,".call(this,a0);").else(o,"=",i,"[",a,"]=",t.link(function(r){return j(N,t,e,r,1)}),"(",n,");",o,".call(this,a0);"))}Object.keys(e.state).length>0&&r(t.shared.current,".dirty=true;")}function U(t,e,r,n){function i(){return!0}t.batchId="a1",D(t,e),O(t,e,r,n.attributes,i),R(t,e,r,n.uniforms,i),F(t,e,e,r)}function V(t,e,r,n){function i(t){return t.contextDep&&o||t.propDep}function a(t){return!i(t)}D(t,e);var o=r.contextDep,s=e.def(),l=e.def();t.shared.props=l,t.batchId=s;var u=t.scope(),c=t.scope();if(e(u.entry,"for(",s,"=0;",s,"<","a1",";++",s,"){",l,"=","a0","[",s,"];",c,"}",u.exit),r.needsContext&&L(t,c,r.context),r.needsFramebuffer&&C(t,c,r.framebuffer),z(t,c,r.state,i),
r.profile&&i(r.profile)&&P(t,c,r,!1,!0),n)O(t,u,r,n.attributes,a),O(t,c,r,n.attributes,i),R(t,u,r,n.uniforms,a),R(t,c,r,n.uniforms,i),F(t,u,c,r);else{var h=t.global.def("{}"),f=r.shader.progVar.append(t,c),d=c.def(f,".id"),p=c.def(h,"[",d,"]");c(t.shared.gl,".useProgram(",f,".program);","if(!",p,"){",p,"=",h,"[",d,"]=",t.link(function(e){return j(U,t,r,e,2)}),"(",f,");}",p,".call(this,a0[",s,"],",s,");")}}function H(t,e){function r(t){return t.contextDep&&i||t.propDep}var n=t.proc("batch",2);t.batchId="0",D(t,n);var i=!1,a=!0;Object.keys(e.context).forEach(function(t){i=i||e.context[t].propDep}),i||(L(t,n,e.context),a=!1);var o=e.framebuffer,s=!1;o?(o.propDep?i=s=!0:o.contextDep&&i&&(s=!0),s||C(t,n,o)):C(t,n,null),e.state.viewport&&e.state.viewport.propDep&&(i=!0),I(t,n,e),z(t,n,e.state,function(t){return!r(t)}),e.profile&&r(e.profile)||P(t,n,e,!1,"a1"),e.contextDep=i,e.needsContext=a,e.needsFramebuffer=s;var l=e.shader.progVar;if(l.contextDep&&i||l.propDep)V(t,n,e,null);else{var u=l.append(t,n);if(n(t.shared.gl,".useProgram(",u,".program);"),e.shader.program)V(t,n,e,e.shader.program);else{var c=t.global.def("{}"),h=n.def(u,".id"),f=n.def(c,"[",h,"]");n(t.cond(f).then(f,".call(this,a0,a1);").else(f,"=",c,"[",h,"]=",t.link(function(r){return j(V,t,e,r,2)}),"(",u,");",f,".call(this,a0,a1);"))}}Object.keys(e.state).length>0&&n(t.shared.current,".dirty=true;")}function q(t,r){function n(e){var n=r.shader[e];n&&i.set(a.shader,"."+e,n.append(t,i))}var i=t.proc("scope",3);t.batchId="a2";var a=t.shared,o=a.current;L(t,i,r.context),r.framebuffer&&r.framebuffer.append(t,i),Vt(Object.keys(r.state)).forEach(function(e){var n=r.state[e],o=n.append(t,i);mt(o)?o.forEach(function(r,n){i.set(t.next[e],"["+n+"]",r)}):i.set(a.next,"."+e,o)}),P(t,i,r,!0,!0),[Fi,Bi,Ni,Ui,ji].forEach(function(e){var n=r.draw[e];n&&i.set(a.draw,"."+e,""+n.append(t,i))}),Object.keys(r.uniforms).forEach(function(n){i.set(a.uniforms,"["+e.id(n)+"]",r.uniforms[n].append(t,i))}),Object.keys(r.attributes).forEach(function(e){var n=r.attributes[e].append(t,i),a=t.scopeAttrib(e);Object.keys(new X).forEach(function(t){i.set(a,"."+t,n[t])})}),n(Oi),n(Ri),Object.keys(r.state).length>0&&(i(o,".dirty=true;"),i.exit(o,".dirty=true;")),i("a1(",t.shared.context,",a0,",t.batchId,");")}function G(t){if("object"==typeof t&&!mt(t)){for(var e=Object.keys(t),r=0;r<e.length;++r)if(ge.isDynamic(t[e[r]]))return!0;return!1}}function Y(t,e,r){function n(t,e){o.forEach(function(r){var n=i[r];if(ge.isDynamic(n)){var a=t.invoke(e,n);e(c,".",r,"=",a,";")}})}var i=e.static[r];if(i&&G(i)){var a=t.global,o=Object.keys(i),s=!1,l=!1,u=!1,c=t.global.def("{}");o.forEach(function(e){var r=i[e];if(ge.isDynamic(r)){"function"==typeof r&&(r=i[e]=ge.unbox(r));var n=Yt(r,null);s=s||n.thisDep,u=u||n.propDep,l=l||n.contextDep}else{switch(a(c,".",e,"="),typeof r){case"number":a(r);break;case"string":a('"',r,'"');break;case"object":Array.isArray(r)&&a("[",r.join(),"]");break;default:a(t.link(r))}a(";")}}),e.dynamic[r]=new ge.DynamicVariable(ai,{thisDep:s,contextDep:l,propDep:u,ref:c,append:n}),delete e.static[r]}}function W(t,e,r,n,i){var a=y();a.stats=a.link(i),Object.keys(e.static).forEach(function(t){Y(a,e,t)}),Xi.forEach(function(e){Y(a,t,e)});var o=E(t,e,r,n,a);return B(a,o),q(a,o),H(a,o),a.compile()}var X=u.Record,Z={add:32774,subtract:32778,"reverse subtract":32779};r.ext_blend_minmax&&(Z.min=Ca,Z.max=Ia);var K=r.angle_instanced_arrays,Q=r.webgl_draw_buffers,$={dirty:!0,profile:p.profile},tt={},et=[],rt={},nt={};g(oi,ea),g(si,ta),v(li,"blendColor",[0,0,0,0]),v(ui,"blendEquationSeparate",[Ra,Ra]),v(ci,"blendFuncSeparate",[Oa,Pa,Oa,Pa]),g(hi,na,!0),v(fi,"depthFunc",Fa),v(di,"depthRange",[0,1]),v(pi,"depthMask",!0),v(mi,mi,[!0,!0,!0,!0]),g(gi,$i),v(vi,"cullFace",Sa),v(yi,yi,La),v(bi,bi,1),g(xi,aa),v(_i,"polygonOffset",[0,0]),g(wi,oa),g(Mi,sa),v(ki,"sampleCoverage",[1,!1]),g(Ai,ra),v(Ti,"stencilMask",-1),v(Si,"stencilFunc",[za,0,-1]),v(Ei,"stencilOpSeparate",[Ta,Da,Da,Da]),v(Li,"stencilOpSeparate",[Sa,Da,Da,Da]),g(Ci,ia),v(Ii,"scissor",[0,0,t.drawingBufferWidth,t.drawingBufferHeight]),v(zi,zi,[0,0,t.drawingBufferWidth,t.drawingBufferHeight]);var it={gl:t,context:f,strings:e,next:tt,current:$,draw:h,elements:a,buffer:i,shader:c,attributes:u.state,uniforms:l,framebuffer:s,extensions:r,timer:d,isBufferArgs:Ut},at={primTypes:Be,compareFuncs:Va,blendFuncs:Ba,blendEquations:Z,stencilOps:Ha,glTypes:Ie,orientationType:Ga};de.optional(function(){it.isArrayLike=mt}),Q&&(at.backBuffer=[Sa],at.drawBuffer=J(n.maxDrawbuffers,function(t){return 0===t?[0]:J(t,function(t){return Na+t})}));var ot=0;return{next:tt,current:$,procs:function(){var e=y(),r=e.proc("poll"),i=e.proc("refresh"),a=e.block();r(a),i(a);var o=e.shared,s=o.gl,l=o.next,u=o.current;a(u,".dirty=false;"),C(e,r),C(e,i,null,!0);var c,h=t.getExtension("angle_instanced_arrays");h&&(c=e.link(h));for(var f=0;f<n.maxAttributes;++f){var d=i.def(o.attributes,"[",f,"]"),p=e.cond(d,".buffer");p.then(s,".enableVertexAttribArray(",f,");",s,".bindBuffer(",Zi,",",d,".buffer.buffer);",s,".vertexAttribPointer(",f,",",d,".size,",d,".type,",d,".normalized,",d,".stride,",d,".offset);").else(s,".disableVertexAttribArray(",f,");",s,".vertexAttrib4f(",f,",",d,".x,",d,".y,",d,".z,",d,".w);",d,".buffer=null;"),i(p),h&&i(c,".vertexAttribDivisorANGLE(",f,",",d,".divisor);")}return Object.keys(rt).forEach(function(t){var n=rt[t],o=a.def(l,".",t),c=e.block();c("if(",o,"){",s,".enable(",n,")}else{",s,".disable(",n,")}",u,".",t,"=",o,";"),i(c),r("if(",o,"!==",u,".",t,"){",c,"}")}),Object.keys(nt).forEach(function(t){var n,o,c=nt[t],h=$[t],f=e.block();if(f(s,".",c,"("),mt(h)){var d=h.length;n=e.global.def(l,".",t),o=e.global.def(u,".",t),f(J(d,function(t){return n+"["+t+"]"}),");",J(d,function(t){return o+"["+t+"]="+n+"["+t+"];"}).join("")),r("if(",J(d,function(t){return n+"["+t+"]!=="+o+"["+t+"]"}).join("||"),"){",f,"}")}else n=a.def(l,".",t),o=a.def(u,".",t),f(n,");",u,".",t,"=",n,";"),r("if(",n,"!==",o,"){",f,"}");i(f)}),e.compile()}(),compile:W}}function Xt(){return{bufferCount:0,elementsCount:0,framebufferCount:0,shaderCount:0,textureCount:0,cubeCount:0,renderbufferCount:0,maxTextureUnits:0}}function Zt(t,e){for(var r=0;r<t.length;++r)if(t[r]===e)return r;return-1}function Jt(t){function e(){if(0===q.length)return k&&k.update(),void(J=null);J=ve.next(e),f();for(var t=q.length-1;t>=0;--t){var r=q[t];r&&r(E,null,0)}v.flush(),k&&k.update()}function r(){!J&&q.length>0&&(J=ve.next(e))}function n(){J&&(ve.cancel(e),J=null)}function i(t){t.preventDefault(),b=!0,n(),G.forEach(function(t){t()})}function a(t){v.getError(),b=!1,x.restore(),O.restore(),z.restore(),R.restore(),F.restore(),j.restore(),k&&k.restore(),N.procs.refresh(),r(),Y.forEach(function(t){t()})}function o(){q.length=0,n(),H&&(H.removeEventListener(eo,i),H.removeEventListener(ro,a)),O.clear(),j.clear(),F.clear(),R.clear(),D.clear(),z.clear(),k&&k.clear(),Z.forEach(function(t){t()})}function s(t){function e(t){var e={},r={};return Object.keys(t).forEach(function(n){var i=t[n];ge.isDynamic(i)?r[n]=ge.unbox(i,n):e[n]=i}),{dynamic:r,static:e}}function r(t){for(;d.length<t;)d.push(null);return d}function n(t,e){var n;if(b&&de.raise("context lost"),"function"==typeof t)return f.call(this,null,t,0);if("function"==typeof e){if("number"==typeof t){for(n=0;n<t;++n)f.call(this,null,e,n);return}if(Array.isArray(t)){for(n=0;n<t.length;++n)f.call(this,t[n],e,n);return}return f.call(this,t,e,0)}if("number"==typeof t){if(t>0)return h.call(this,r(0|t),0|t)}else{if(!Array.isArray(t))return c.call(this,t);if(t.length)return h.call(this,t,t.length)}}de(!!t,"invalid args to regl({...})"),de.type(t,"object","invalid args to regl({...})");var i=e(t.context||{}),a=e(t.uniforms||{}),o=e(t.attributes||{}),s=e(function(t){function e(t){if(t in r){var e=r[t];delete r[t],Object.keys(e).forEach(function(n){r[t+"."+n]=e[n]})}}var r=$t({},t);return delete r.uniforms,delete r.attributes,delete r.context,"stencil"in r&&r.stencil.op&&(r.stencil.opBack=r.stencil.opFront=r.stencil.op,delete r.stencil.op),e("blend"),e("depth"),e("cull"),e("stencil"),e("polygonOffset"),e("scissor"),e("sample"),r}(t)),l={gpuTime:0,cpuTime:0,count:0},u=N.compile(s,o,a,i,l),c=u.draw,h=u.batch,f=u.scope,d=[];return $t(n,{stats:l})}function l(t,e){var r=0;N.procs.poll();var n=e.color;n&&(v.clearColor(+n[0]||0,+n[1]||0,+n[2]||0,+n[3]||0),r|=Ka),"depth"in e&&(v.clearDepth(+e.depth),r|=Qa),"stencil"in e&&(v.clearStencil(0|e.stencil),r|=$a),de(!!r,"called regl.clear with no buffer specified"),v.clear(r)}function u(t){if(de("object"==typeof t&&t,"regl.clear() takes an object as input"),"framebuffer"in t)if(t.framebuffer&&"framebufferCube"===t.framebuffer_reglType)for(var e=0;e<6;++e)K($t({framebuffer:t.framebuffer.faces[e]},t),l);else K(t,l);else l(null,t)}function c(t){function e(){function e(){var t=Zt(q,e);q[t]=q[q.length-1],q.length-=1,q.length<=0&&n()}var r=Zt(q,t);de(r>=0,"cannot cancel a frame twice"),q[r]=e}return de.type(t,"function","regl.frame() callback must be a function"),q.push(t),r(),{cancel:e}}function h(){var t=V.viewport,e=V.scissor_box;t[0]=t[1]=e[0]=e[1]=0,E.viewportWidth=E.framebufferWidth=E.drawingBufferWidth=t[2]=e[2]=v.drawingBufferWidth,E.viewportHeight=E.framebufferHeight=E.drawingBufferHeight=t[3]=e[3]=v.drawingBufferHeight}function f(){E.tick+=1,E.time=p(),h(),N.procs.poll()}function d(){h(),N.procs.refresh(),k&&k.update()}function p(){return(ye()-A)/1e3}function m(t,e){de.type(e,"function","listener callback must be a function");var r;switch(t){case"frame":return c(e);case"lost":r=G;break;case"restore":r=Y;break;case"destroy":r=Z;break;default:de.raise("invalid event, must be one of frame,lost,restore,destroy")}return r.push(e),{cancel:function(){for(var t=0;t<r.length;++t)if(r[t]===e)return r[t]=r[r.length-1],void r.pop()}}}var g=W(t);if(!g)return null;var v=g.gl,y=v.getContextAttributes(),b=v.isContextLost(),x=X(v,g);if(!x)return null;var _=B(),w=Xt(),M=x.extensions,k=Ja(v,M),A=ye(),T=v.drawingBufferWidth,S=v.drawingBufferHeight,E={tick:0,time:0,viewportWidth:T,viewportHeight:S,framebufferWidth:T,framebufferHeight:S,drawingBufferWidth:T,drawingBufferHeight:S,pixelRatio:g.pixelRatio},L={},C={elements:null,primitive:4,count:-1,offset:0,instances:-1},I=be(v,M),z=ft(v,w,g),D=dt(v,M,z,w),P=Ot(v,M,I,z,_),O=Rt(v,_,w,g),R=It(v,M,I,function(){N.procs.poll()},E,w,g),F=Mn(v,M,I,w,g),j=Dt(v,M,I,R,F,w),N=Wt(v,_,M,I,z,D,R,j,L,P,O,C,E,k,g),U=Ft(v,j,N.procs.poll,E,y,M),V=N.next,H=v.canvas,q=[],G=[],Y=[],Z=[g.onDestroy],J=null;H&&(H.addEventListener(eo,i,!1),H.addEventListener(ro,a,!1));var K=j.setFBO=s({framebuffer:ge.define.call(null,no,"framebuffer")});d();var Q=$t(s,{clear:u,prop:ge.define.bind(null,no),context:ge.define.bind(null,io),this:ge.define.bind(null,ao),draw:s({}),buffer:function(t){return z.create(t,to,!1,!1)},elements:function(t){return D.create(t,!1)},texture:R.create2D,cube:R.createCube,renderbuffer:F.create,framebuffer:j.create,framebufferCube:j.createCube,attributes:y,frame:c,on:m,limits:I,hasExtension:function(t){return I.extensions.indexOf(t.toLowerCase())>=0},read:U,destroy:o,_gl:v,_refresh:d,poll:function(){f(),k&&k.update()},now:p,stats:w});return g.onDone(null,Q),Q}var Kt={"[object Int8Array]":5120,"[object Int16Array]":5122,"[object Int32Array]":5124,"[object Uint8Array]":5121,"[object Uint8ClampedArray]":5121,"[object Uint16Array]":5123,"[object Uint32Array]":5125,"[object Float32Array]":5126,"[object Float64Array]":5121,"[object ArrayBuffer]":5121},Qt=function(t){return Object.prototype.toString.call(t)in Kt},$t=function(t,e){for(var r=Object.keys(e),n=0;n<r.length;++n)t[r[n]]=e[r[n]];return t},te=["gl","canvas","container","attributes","pixelRatio","extensions","optionalExtensions","profile","onDone"],ee=33071,re=9728,ne=9984,ie=9985,ae=9986,oe=9987,se=5126,le=32819,ue=32820,ce=33635,he=34042,fe={};fe[5120]=fe[5121]=1,fe[5122]=fe[5123]=fe[36193]=fe[ce]=fe[le]=fe[ue]=2,fe[5124]=fe[5125]=fe[se]=fe[he]=4;var de=$t(r,{optional:S,raise:e,commandRaise:M,command:k,parameter:i,commandParameter:A,constructor:u,type:o,commandType:T,isTypedArray:a,nni:s,oneOf:l,shaderError:b,linkError:x,callSite:m,saveCommandRef:_,saveDrawInfo:w,framebufferFormat:E,guessCommand:p,texture2D:I,textureCube:z}),pe=0,me=0,ge={DynamicVariable:D,define:F,isDynamic:j,unbox:N,accessor:R},ve={next:"function"==typeof requestAnimationFrame?function(t){return requestAnimationFrame(t)}:function(t){return setTimeout(t,16)},cancel:"function"==typeof cancelAnimationFrame?function(t){return cancelAnimationFrame(t)}:clearTimeout},ye="undefined"!=typeof performance&&performance.now?function(){return performance.now()}:function(){return+new Date},be=function(t,e){var r=1;e.ext_texture_filter_anisotropic&&(r=t.getParameter(34047));var n=1,i=1;return e.webgl_draw_buffers&&(n=t.getParameter(34852),i=t.getParameter(36063)),{colorBits:[t.getParameter(3410),t.getParameter(3411),t.getParameter(3412),t.getParameter(3413)],depthBits:t.getParameter(3414),stencilBits:t.getParameter(3415),subpixelBits:t.getParameter(3408),extensions:Object.keys(e).filter(function(t){return!!e[t]}),maxAnisotropic:r,maxDrawbuffers:n,maxColorAttachments:i,pointSizeDims:t.getParameter(33901),lineWidthDims:t.getParameter(33902),maxViewportDims:t.getParameter(3386),maxCombinedTextureUnits:t.getParameter(35661),maxCubeMapSize:t.getParameter(34076),maxRenderbufferSize:t.getParameter(34024),maxTextureUnits:t.getParameter(34930),maxTextureSize:t.getParameter(3379),maxAttributes:t.getParameter(34921),maxVertexUniforms:t.getParameter(36347),maxVertexTextureUnits:t.getParameter(35660),maxVaryingVectors:t.getParameter(36348),maxFragmentUniforms:t.getParameter(36349),glsl:t.getParameter(35724),renderer:t.getParameter(7937),vendor:t.getParameter(7936),version:t.getParameter(7938)}},xe=function(t){return Object.keys(t).map(function(e){return t[e]})},_e=5120,we=5121,Me=5122,ke=5123,Ae=5124,Te=5125,Se=5126,Ee=J(8,function(){return[]}),Le={alloc:$,free:tt,allocType:et,freeType:rt},Ce={shape:lt,flatten:st},Ie={int8:5120,int16:5122,int32:5124,uint8:5121,uint16:5123,uint32:5125,float:5126,float32:5126},ze={dynamic:35048,stream:35040,static:35044},De=Ce.flatten,Pe=Ce.shape,Oe=35044,Re=35040,Fe=5121,je=5126,Ne=[];Ne[5120]=1,Ne[5122]=2,Ne[5124]=4,Ne[5121]=1,Ne[5123]=2,Ne[5125]=4,Ne[5126]=4;var Be={points:0,point:0,lines:1,line:1,triangles:4,triangle:4,"line loop":2,"line strip":3,"triangle strip":5,"triangle fan":6},Ue=0,Ve=1,He=4,qe=5120,Ge=5121,Ye=5122,We=5123,Xe=5124,Ze=5125,Je=34963,Ke=35040,Qe=35044,$e=new Float32Array(1),tr=new Uint32Array($e.buffer),er=5123,rr=34467,nr=3553,ir=34067,ar=34069,or=6408,sr=6406,lr=6407,ur=6409,cr=6410,hr=32854,fr=32855,dr=36194,pr=32819,mr=32820,gr=33635,vr=34042,yr=6402,br=34041,xr=35904,_r=35906,wr=36193,Mr=33776,kr=33777,Ar=33778,Tr=33779,Sr=35986,Er=35987,Lr=34798,Cr=35840,Ir=35841,zr=35842,Dr=35843,Pr=36196,Or=5121,Rr=5123,Fr=5125,jr=5126,Nr=10242,Br=10243,Ur=10497,Vr=33071,Hr=33648,qr=10240,Gr=10241,Yr=9728,Wr=9729,Xr=9984,Zr=9985,Jr=9986,Kr=9987,Qr=33170,$r=4352,tn=4353,en=4354,rn=34046,nn=3317,an=37440,on=37441,sn=37443,ln=37444,un=33984,cn=[Xr,Jr,Zr,Kr],hn=[0,ur,cr,lr,or],fn={};fn[ur]=fn[sr]=fn[yr]=1,fn[br]=fn[cr]=2,fn[lr]=fn[xr]=3,fn[or]=fn[_r]=4;var dn=gt("HTMLCanvasElement"),pn=gt("CanvasRenderingContext2D"),mn=gt("HTMLImageElement"),gn=gt("HTMLVideoElement"),vn=Object.keys(Kt).concat([dn,pn,mn,gn]),yn=[];yn[Or]=1,yn[jr]=4,yn[wr]=2,yn[Rr]=2,yn[Fr]=4;var bn=[];bn[hr]=2,bn[fr]=2,bn[dr]=2,bn[br]=4,bn[Mr]=.5,bn[kr]=.5,bn[Ar]=1,bn[Tr]=1,bn[Sr]=.5,bn[Er]=1,bn[Lr]=1,bn[Cr]=.5,bn[Ir]=.25,bn[zr]=.5,bn[Dr]=.25,bn[Pr]=.5;var xn=36161,_n=32854,wn=[];wn[_n]=2,wn[32855]=2,wn[36194]=2,wn[33189]=2,wn[36168]=1,wn[34041]=4,wn[35907]=4,wn[34836]=16,wn[34842]=8,wn[34843]=6;var Mn=function(t,e,r,n,i){function a(t){this.id=h++,this.refCount=1,this.renderbuffer=t,this.format=_n,this.width=0,this.height=0,i.profile&&(this.stats={size:0})}function o(e){var r=e.renderbuffer;de(r,"must not double destroy renderbuffer"),t.bindRenderbuffer(xn,null),t.deleteRenderbuffer(r),e.renderbuffer=null,e.refCount=0,delete f[e.id],n.renderbufferCount--}function s(e,o){function s(e,n){var a=0,o=0,l=_n;if("object"==typeof e&&e){var f=e;if("shape"in f){var d=f.shape;de(Array.isArray(d)&&d.length>=2,"invalid renderbuffer shape"),a=0|d[0],o=0|d[1]}else"radius"in f&&(a=o=0|f.radius),"width"in f&&(a=0|f.width),"height"in f&&(o=0|f.height);"format"in f&&(de.parameter(f.format,u,"invalid renderbuffer format"),l=u[f.format])}else"number"==typeof e?(a=0|e,o="number"==typeof n?0|n:a):e?de.raise("invalid arguments to renderbuffer constructor"):a=o=1;if(de(a>0&&o>0&&a<=r.maxRenderbufferSize&&o<=r.maxRenderbufferSize,"invalid renderbuffer size"),a!==h.width||o!==h.height||l!==h.format)return s.width=h.width=a,s.height=h.height=o,h.format=l,t.bindRenderbuffer(xn,h.renderbuffer),t.renderbufferStorage(xn,l,a,o),i.profile&&(h.stats.size=zt(h.format,h.width,h.height)),s.format=c[h.format],s}function l(e,n){var a=0|e,o=0|n||a;return a===h.width&&o===h.height?s:(de(a>0&&o>0&&a<=r.maxRenderbufferSize&&o<=r.maxRenderbufferSize,"invalid renderbuffer size"),s.width=h.width=a,s.height=h.height=o,t.bindRenderbuffer(xn,h.renderbuffer),t.renderbufferStorage(xn,h.format,a,o),i.profile&&(h.stats.size=zt(h.format,h.width,h.height)),s)}var h=new a(t.createRenderbuffer());return f[h.id]=h,n.renderbufferCount++,s(e,o),s.resize=l,s._reglType="renderbuffer",s._renderbuffer=h,i.profile&&(s.stats=h.stats),s.destroy=function(){h.decRef()},s}function l(){xe(f).forEach(function(e){e.renderbuffer=t.createRenderbuffer(),t.bindRenderbuffer(xn,e.renderbuffer),t.renderbufferStorage(xn,e.format,e.width,e.height)}),t.bindRenderbuffer(xn,null)}var u={rgba4:_n,rgb565:36194,"rgb5 a1":32855,depth:33189,stencil:36168,"depth stencil":34041};e.ext_srgb&&(u.srgba=35907),e.ext_color_buffer_half_float&&(u.rgba16f=34842,u.rgb16f=34843),e.webgl_color_buffer_float&&(u.rgba32f=34836);var c=[];Object.keys(u).forEach(function(t){var e=u[t];c[e]=t});var h=0,f={};return a.prototype.decRef=function(){--this.refCount<=0&&o(this)},i.profile&&(n.getTotalRenderbufferSize=function(){var t=0;return Object.keys(f).forEach(function(e){t+=f[e].stats.size}),t}),{create:s,clear:function(){xe(f).forEach(o)},restore:l}},kn=36160,An=36161,Tn=3553,Sn=34069,En=36064,Ln=36096,Cn=36128,In=33306,zn=36053,Dn=6402,Pn=[6408],On=[];On[6408]=4;var Rn=[];Rn[5121]=1,Rn[5126]=4,Rn[36193]=2;var Fn=33189,jn=36168,Nn=34041,Bn=[32854,32855,36194,35907,34842,34843,34836],Un={};Un[zn]="complete",Un[36054]="incomplete attachment",Un[36057]="incomplete dimensions",Un[36055]="incomplete, missing attachment",Un[36061]="unsupported";var Vn=5126,Hn=35632,qn=35633,Gn=35718,Yn=35721,Wn=6408,Xn=5121,Zn=3333,Jn=5126,Kn="xyzw".split(""),Qn=5121,$n=1,ti=2,ei=0,ri=1,ni=2,ii=3,ai=4,oi="dither",si="blend.enable",li="blend.color",ui="blend.equation",ci="blend.func",hi="depth.enable",fi="depth.func",di="depth.range",pi="depth.mask",mi="colorMask",gi="cull.enable",vi="cull.face",yi="frontFace",bi="lineWidth",xi="polygonOffset.enable",_i="polygonOffset.offset",wi="sample.alpha",Mi="sample.enable",ki="sample.coverage",Ai="stencil.enable",Ti="stencil.mask",Si="stencil.func",Ei="stencil.opFront",Li="stencil.opBack",Ci="scissor.enable",Ii="scissor.box",zi="viewport",Di="profile",Pi="framebuffer",Oi="vert",Ri="frag",Fi="elements",ji="primitive",Ni="count",Bi="offset",Ui="instances",Vi=Pi+"Width",Hi=Pi+"Height",qi=zi+"Width",Gi=zi+"Height",Yi="drawingBufferWidth",Wi="drawingBufferHeight",Xi=[ci,ui,Si,Ei,Li,ki,zi,Ii,_i],Zi=34962,Ji=34963,Ki=3553,Qi=34067,$i=2884,ta=3042,ea=3024,ra=2960,na=2929,ia=3089,aa=32823,oa=32926,sa=32928,la=5126,ua=35664,ca=35665,ha=35666,fa=5124,da=35667,pa=35668,ma=35669,ga=35670,va=35671,ya=35672,ba=35673,xa=35674,_a=35675,wa=35676,Ma=35678,ka=35680,Aa=4,Ta=1028,Sa=1029,Ea=2304,La=2305,Ca=32775,Ia=32776,za=519,Da=7680,Pa=0,Oa=1,Ra=32774,Fa=513,ja=36160,Na=36064,Ba={0:0,1:1,zero:0,one:1,"src color":768,"one minus src color":769,"src alpha":770,"one minus src alpha":771,"dst color":774,"one minus dst color":775,"dst alpha":772,"one minus dst alpha":773,"constant color":32769,"one minus constant color":32770,"constant alpha":32771,"one minus constant alpha":32772,"src alpha saturate":776},Ua=["constant color, constant alpha","one minus constant color, constant alpha","constant color, one minus constant alpha","one minus constant color, one minus constant alpha","constant alpha, constant color","constant alpha, one minus constant color","one minus constant alpha, constant color","one minus constant alpha, one minus constant color"],Va={never:512,less:513,"<":513,equal:514,"=":514,"==":514,"===":514,lequal:515,"<=":515,greater:516,">":516,notequal:517,"!=":517,"!==":517,gequal:518,">=":518,always:519},Ha={0:0,zero:0,keep:7680,replace:7681,increment:7682,decrement:7683,"increment wrap":34055,"decrement wrap":34056,invert:5386},qa={frag:35632,vert:35633},Ga={cw:Ea,ccw:La},Ya=new Ht(!1,!1,!1,function(){}),Wa=34918,Xa=34919,Za=35007,Ja=function(t,e){function r(){return f.pop()||h.createQueryEXT()}function n(t){f.push(t)}function i(t){var e=r();h.beginQueryEXT(Za,e),d.push(e),u(d.length-1,d.length,t)}function a(){h.endQueryEXT(Za)}function o(){this.startQueryIndex=-1,this.endQueryIndex=-1,this.sum=0,this.stats=null}function s(){return p.pop()||new o}function l(t){p.push(t)}function u(t,e,r){var n=s();n.startQueryIndex=t,n.endQueryIndex=e,n.sum=0,n.stats=r,m.push(n)}function c(){var t,e,r=d.length;if(0!==r){v.length=Math.max(v.length,r+1),g.length=Math.max(g.length,r+1),g[0]=0,v[0]=0;var i=0;for(t=0,e=0;e<d.length;++e){var a=d[e];h.getQueryObjectEXT(a,Xa)?(i+=h.getQueryObjectEXT(a,Wa),n(a)):d[t++]=a,g[e+1]=i,v[e+1]=t}for(d.length=t,t=0,e=0;e<m.length;++e){var o=m[e],s=o.startQueryIndex,u=o.endQueryIndex;o.sum+=g[u]-g[s];var c=v[s],f=v[u];f===c?(o.stats.gpuTime+=o.sum/1e6,l(o)):(o.startQueryIndex=c,o.endQueryIndex=f,m[t++]=o)}m.length=t}}var h=e.ext_disjoint_timer_query;if(!h)return null;var f=[],d=[],p=[],m=[],g=[],v=[];return{beginQuery:i,endQuery:a,pushScopeStats:u,update:c,getNumPendingQueries:function(){return d.length},clear:function(){f.push.apply(f,d);for(var t=0;t<f.length;t++)h.deleteQueryEXT(f[t]);d.length=0,f.length=0},restore:function(){d.length=0,f.length=0}}},Ka=16384,Qa=256,$a=1024,to=34962,eo="webglcontextlost",ro="webglcontextrestored",no=1,io=2,ao=3;return Jt})},{}],500:[function(t,e,r){"use strict";function n(t,e){if("string"!=typeof t)throw new TypeError("expected a string");if(1===e)return t;if(2===e)return t+t;var r=t.length*e;if(i!==t||void 0===i)i=t,a="";else if(a.length>=r)return a.substr(0,r);for(;r>a.length&&e>1;)1&e&&(a+=t),e>>=1,t+=t;return a+=t,a=a.substr(0,r)}var i,a="";e.exports=n},{}],501:[function(e,r,n){!function(e,i){"function"==typeof t&&t.amd?t(i):"object"==typeof n?r.exports=i():e.resolveUrl=i()}(this,function(){function t(){var t=arguments.length;if(0===t)throw new Error("resolveUrl requires at least one argument; got none.");var e=document.createElement("base");if(e.href=arguments[0],1===t)return e.href;var r=document.getElementsByTagName("head")[0];r.insertBefore(e,r.firstChild);for(var n,i=document.createElement("a"),a=1;a<t;a++)i.href=arguments[a],n=i.href,e.href=n;return r.removeChild(e),n}return t})},{}],502:[function(t,e,r){(function(t){e.exports=t.performance&&t.performance.now?function(){return performance.now()}:Date.now||function(){return+new Date}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{}],503:[function(t,e,r){"use strict";function n(t){for(var e=t.length,r=t[t.length-1],n=e,i=e-2;i>=0;--i){var a=r,o=t[i];r=a+o;var s=r-a,l=o-s;l&&(t[--n]=r,r=l)}for(var u=0,i=n;i<e;++i){var a=t[i],o=r;r=a+o;var s=r-a,l=o-s;l&&(t[u++]=l)}return t[u++]=r,t.length=u,t}e.exports=n},{}],504:[function(t,e,r){"use strict";function n(t,e){for(var r=new Array(t.length-1),n=1;n<t.length;++n)for(var i=r[n-1]=new Array(t.length-1),a=0,o=0;a<t.length;++a)a!==e&&(i[o++]=t[n][a]);return r}function i(t){for(var e=new Array(t),r=0;r<t;++r){e[r]=new Array(t);for(var n=0;n<t;++n)e[r][n]=["m[",r,"][",n,"]"].join("")}return e}function a(t){return 1&t?"-":""}function o(t){if(1===t.length)return t[0];if(2===t.length)return["sum(",t[0],",",t[1],")"].join("");var e=t.length>>1;return["sum(",o(t.slice(0,e)),",",o(t.slice(e)),")"].join("")}function s(t){if(2===t.length)return["sum(prod(",t[0][0],",",t[1][1],"),prod(-",t[0][1],",",t[1][0],"))"].join("");for(var e=[],r=0;r<t.length;++r)e.push(["scale(",s(n(t,r)),",",a(r),t[0][r],")"].join(""));return o(e)}function l(t){return new Function("sum","scale","prod","compress",["function robustDeterminant",t,"(m){return compress(",s(i(t)),")};return robustDeterminant",t].join(""))(c,h,u,f)}var u=t("two-product"),c=t("robust-sum"),h=t("robust-scale"),f=t("robust-compress"),d=6,p=[function(){return[0]},function(t){return[t[0][0]]}];!function(){for(;p.length<d;)p.push(l(p.length));for(var t=[],r=["function robustDeterminant(m){switch(m.length){"],n=0;n<d;++n)t.push("det"+n),r.push("case ",n,":return det",n,"(m);");r.push("}var det=CACHE[m.length];if(!det)det=CACHE[m.length]=gen(m.length);return det(m);}return robustDeterminant"),t.push("CACHE","gen",r.join(""));var i=Function.apply(void 0,t);e.exports=i.apply(void 0,p.concat([p,l]));for(var n=0;n<p.length;++n)e.exports[n]=p[n]}()},{"robust-compress":503,"robust-scale":510,"robust-sum":513,"two-product":539}],505:[function(t,e,r){"use strict";function n(t,e){for(var r=i(t[0],e[0]),n=1;n<t.length;++n)r=a(r,i(t[n],e[n]));return r}var i=t("two-product"),a=t("robust-sum");e.exports=n},{"robust-sum":513,"two-product":539}],506:[function(t,e,r){"use strict";function n(t,e){for(var r=new Array(t.length-1),n=1;n<t.length;++n)for(var i=r[n-1]=new Array(t.length-1),a=0,o=0;a<t.length;++a)a!==e&&(i[o++]=t[n][a]);return r}function i(t){for(var e=new Array(t),r=0;r<t;++r){e[r]=new Array(t);for(var n=0;n<t;++n)e[r][n]=["m",n,"[",t-r-2,"]"].join("")}return e}function a(t){if(1===t.length)return t[0];if(2===t.length)return["sum(",t[0],",",t[1],")"].join("");var e=t.length>>1;return["sum(",a(t.slice(0,e)),",",a(t.slice(e)),")"].join("")}function o(t,e){if("m"===t.charAt(0)){if("w"===e.charAt(0)){var r=t.split("[");return["w",e.substr(1),"m",r[0].substr(1)].join("")}return["prod(",t,",",e,")"].join("")}return o(e,t)}function s(t){return!0&t?"-":""}function l(t){if(2===t.length)return[["diff(",o(t[0][0],t[1][1]),",",o(t[1][0],t[0][1]),")"].join("")];for(var e=[],r=0;r<t.length;++r)e.push(["scale(",a(l(n(t,r))),",",s(r),t[0][r],")"].join(""));return e}function u(t,e){for(var r=[],n=0;n<e-2;++n)r.push(["prod(m",t,"[",n,"],m",t,"[",n,"])"].join(""));return a(r)}function c(t){for(var e=[],r=[],o=i(t),s=0;s<t;++s)o[0][s]="1",o[t-1][s]="w"+s;for(var s=0;s<t;++s)0==(1&s)?e.push.apply(e,l(n(o,s))):r.push.apply(r,l(n(o,s)));for(var c=a(e),h=a(r),f="exactInSphere"+t,d=[],s=0;s<t;++s)d.push("m"+s);for(var p=["function ",f,"(",d.join(),"){"],s=0;s<t;++s){p.push("var w",s,"=",u(s,t),";");for(var b=0;b<t;++b)b!==s&&p.push("var w",s,"m",b,"=scale(w",s,",m",b,"[0]);")}return p.push("var p=",c,",n=",h,",d=diff(p,n);return d[d.length-1];}return ",f),new Function("sum","diff","prod","scale",p.join(""))(g,v,m,y)}function h(){return 0}function f(){return 0}function d(){return 0}function p(t){var e=x[t.length];return e||(e=x[t.length]=c(t.length)),e.apply(void 0,t)}var m=t("two-product"),g=t("robust-sum"),v=t("robust-subtract"),y=t("robust-scale"),b=6,x=[h,f,d];!function(){for(;x.length<=b;)x.push(c(x.length));for(var t=[],r=["slow"],n=0;n<=b;++n)t.push("a"+n),r.push("o"+n);for(var i=["function testInSphere(",t.join(),"){switch(arguments.length){case 0:case 1:return 0;"],n=2;n<=b;++n)i.push("case ",n,":return o",n,"(",t.slice(0,n).join(),");");i.push("}var s=new Array(arguments.length);for(var i=0;i<arguments.length;++i){s[i]=arguments[i]};return slow(s);}return testInSphere"),r.push(i.join(""));var a=Function.apply(void 0,r);e.exports=a.apply(void 0,[p].concat(x));for(var n=0;n<=b;++n)e.exports[n]=x[n]}()},{"robust-scale":510,"robust-subtract":512,"robust-sum":513,"two-product":539}],507:[function(t,e,r){"use strict";function n(t){for(var e="robustLinearSolve"+t+"d",r=["function ",e,"(A,b){return ["],n=0;n<t;++n){r.push("det([");for(var i=0;i<t;++i){i>0&&r.push(","),r.push("[");for(var a=0;a<t;++a)a>0&&r.push(","),a===n?r.push("+b[",i,"]"):r.push("+A[",i,"][",a,"]");r.push("]")}r.push("]),")}r.push("det(A)]}return ",e);var s=new Function("det",r.join(""));return s(t<6?o[t]:o)}function i(){return[0]}function a(t,e){return[[e[0]],[t[0][0]]]}var o=t("robust-determinant"),s=6,l=[i,a];!function(){for(;l.length<s;)l.push(n(l.length));for(var t=[],r=["function dispatchLinearSolve(A,b){switch(A.length){"],i=0;i<s;++i)t.push("s"+i),r.push("case ",i,":return s",i,"(A,b);");r.push("}var s=CACHE[A.length];if(!s)s=CACHE[A.length]=g(A.length);return s(A,b)}return dispatchLinearSolve"),t.push("CACHE","g",r.join(""));var a=Function.apply(void 0,t);e.exports=a.apply(void 0,l.concat([l,n]));for(var i=0;i<s;++i)e.exports[i]=l[i]}()},{"robust-determinant":504}],508:[function(t,e,r){"use strict";function n(t,e){for(var r=new Array(t.length-1),n=1;n<t.length;++n)for(var i=r[n-1]=new Array(t.length-1),a=0,o=0;a<t.length;++a)a!==e&&(i[o++]=t[n][a]);return r}function i(t){for(var e=new Array(t),r=0;r<t;++r){e[r]=new Array(t);for(var n=0;n<t;++n)e[r][n]=["m",n,"[",t-r-1,"]"].join("")}return e}function a(t){return 1&t?"-":""}function o(t){if(1===t.length)return t[0];if(2===t.length)return["sum(",t[0],",",t[1],")"].join("");var e=t.length>>1;return["sum(",o(t.slice(0,e)),",",o(t.slice(e)),")"].join("")}function s(t){if(2===t.length)return[["sum(prod(",t[0][0],",",t[1][1],"),prod(-",t[0][1],",",t[1][0],"))"].join("")];for(var e=[],r=0;r<t.length;++r)e.push(["scale(",o(s(n(t,r))),",",a(r),t[0][r],")"].join(""));return e}function l(t){for(var e=[],r=[],a=i(t),l=[],u=0;u<t;++u)0==(1&u)?e.push.apply(e,s(n(a,u))):r.push.apply(r,s(n(a,u))),l.push("m"+u);var p=o(e),m=o(r),g="orientation"+t+"Exact",v=["function ",g,"(",l.join(),"){var p=",p,",n=",m,",d=sub(p,n);return d[d.length-1];};return ",g].join("");return new Function("sum","prod","scale","sub",v)(h,c,f,d)}function u(t){var e=v[t.length];return e||(e=v[t.length]=l(t.length)),e.apply(void 0,t)}var c=t("two-product"),h=t("robust-sum"),f=t("robust-scale"),d=t("robust-subtract"),p=5,m=l(3),g=l(4),v=[function(){return 0},function(){return 0},function(t,e){return e[0]-t[0]},function(t,e,r){var n,i=(t[1]-r[1])*(e[0]-r[0]),a=(t[0]-r[0])*(e[1]-r[1]),o=i-a;if(i>0){if(a<=0)return o;n=i+a}else{if(!(i<0))return o;if(a>=0)return o;n=-(i+a)}var s=3.3306690738754716e-16*n;return o>=s||o<=-s?o:m(t,e,r)},function(t,e,r,n){var i=t[0]-n[0],a=e[0]-n[0],o=r[0]-n[0],s=t[1]-n[1],l=e[1]-n[1],u=r[1]-n[1],c=t[2]-n[2],h=e[2]-n[2],f=r[2]-n[2],d=a*u,p=o*l,m=o*s,v=i*u,y=i*l,b=a*s,x=c*(d-p)+h*(m-v)+f*(y-b),_=(Math.abs(d)+Math.abs(p))*Math.abs(c)+(Math.abs(m)+Math.abs(v))*Math.abs(h)+(Math.abs(y)+Math.abs(b))*Math.abs(f),w=7.771561172376103e-16*_;return x>w||-x>w?x:g(t,e,r,n)}];!function(){for(;v.length<=p;)v.push(l(v.length));for(var t=[],r=["slow"],n=0;n<=p;++n)t.push("a"+n),r.push("o"+n);for(var i=["function getOrientation(",t.join(),"){switch(arguments.length){case 0:case 1:return 0;"],n=2;n<=p;++n)i.push("case ",n,":return o",n,"(",t.slice(0,n).join(),");");i.push("}var s=new Array(arguments.length);for(var i=0;i<arguments.length;++i){s[i]=arguments[i]};return slow(s);}return getOrientation"),r.push(i.join(""));var a=Function.apply(void 0,r);e.exports=a.apply(void 0,[u].concat(v));for(var n=0;n<=p;++n)e.exports[n]=v[n]}()},{"robust-scale":510,"robust-subtract":512,"robust-sum":513,"two-product":539}],509:[function(t,e,r){"use strict";function n(t,e){if(1===t.length)return a(e,t[0]);if(1===e.length)return a(t,e[0]);if(0===t.length||0===e.length)return[0];var r=[0];if(t.length<e.length)for(var n=0;n<t.length;++n)r=i(r,a(e,t[n]));else for(var n=0;n<e.length;++n)r=i(r,a(t,e[n]));return r}var i=t("robust-sum"),a=t("robust-scale");e.exports=n},{"robust-scale":510,"robust-sum":513}],
510:[function(t,e,r){"use strict";function n(t,e){var r=t.length;if(1===r){var n=i(t[0],e);return n[0]?n:[n[1]]}var o=new Array(2*r),s=[.1,.1],l=[.1,.1],u=0;i(t[0],e,s),s[0]&&(o[u++]=s[0]);for(var c=1;c<r;++c){i(t[c],e,l);var h=s[1];a(h,l[0],s),s[0]&&(o[u++]=s[0]);var f=l[1],d=s[1],p=f+d,m=p-f,g=d-m;s[1]=p,g&&(o[u++]=g)}return s[1]&&(o[u++]=s[1]),0===u&&(o[u++]=0),o.length=u,o}var i=t("two-product"),a=t("two-sum");e.exports=n},{"two-product":539,"two-sum":540}],511:[function(t,e,r){"use strict";function n(t,e,r,n){for(var i=0;i<2;++i){var a=t[i],o=e[i],s=Math.min(a,o),l=Math.max(a,o),u=r[i],c=n[i],h=Math.min(u,c);if(Math.max(u,c)<s||l<h)return!1}return!0}function i(t,e,r,i){var o=a(t,r,i),s=a(e,r,i);if(o>0&&s>0||o<0&&s<0)return!1;var l=a(r,t,e),u=a(i,t,e);return!(l>0&&u>0||l<0&&u<0)&&(0!==o||0!==s||0!==l||0!==u||n(t,e,r,i))}e.exports=i;var a=t("robust-orientation")[3]},{"robust-orientation":508}],512:[function(t,e,r){"use strict";function n(t,e){var r=t+e,n=r-t,i=r-n,a=e-n,o=t-i,s=o+a;return s?[s,r]:[r]}function i(t,e){var r=0|t.length,i=0|e.length;if(1===r&&1===i)return n(t[0],-e[0]);var a,o,s=r+i,l=new Array(s),u=0,c=0,h=0,f=Math.abs,d=t[c],p=f(d),m=-e[h],g=f(m);p<g?(o=d,(c+=1)<r&&(d=t[c],p=f(d))):(o=m,(h+=1)<i&&(m=-e[h],g=f(m))),c<r&&p<g||h>=i?(a=d,(c+=1)<r&&(d=t[c],p=f(d))):(a=m,(h+=1)<i&&(m=-e[h],g=f(m)));for(var v,y,b,x,_,w=a+o,M=w-a,k=o-M,A=k,T=w;c<r&&h<i;)p<g?(a=d,(c+=1)<r&&(d=t[c],p=f(d))):(a=m,(h+=1)<i&&(m=-e[h],g=f(m))),o=A,w=a+o,M=w-a,k=o-M,k&&(l[u++]=k),v=T+w,y=v-T,b=v-y,x=w-y,_=T-b,A=_+x,T=v;for(;c<r;)a=d,o=A,w=a+o,M=w-a,k=o-M,k&&(l[u++]=k),v=T+w,y=v-T,b=v-y,x=w-y,_=T-b,A=_+x,T=v,(c+=1)<r&&(d=t[c]);for(;h<i;)a=m,o=A,w=a+o,M=w-a,k=o-M,k&&(l[u++]=k),v=T+w,y=v-T,b=v-y,x=w-y,_=T-b,A=_+x,T=v,(h+=1)<i&&(m=-e[h]);return A&&(l[u++]=A),T&&(l[u++]=T),u||(l[u++]=0),l.length=u,l}e.exports=i},{}],513:[function(t,e,r){"use strict";function n(t,e){var r=t+e,n=r-t,i=r-n,a=e-n,o=t-i,s=o+a;return s?[s,r]:[r]}function i(t,e){var r=0|t.length,i=0|e.length;if(1===r&&1===i)return n(t[0],e[0]);var a,o,s=r+i,l=new Array(s),u=0,c=0,h=0,f=Math.abs,d=t[c],p=f(d),m=e[h],g=f(m);p<g?(o=d,(c+=1)<r&&(d=t[c],p=f(d))):(o=m,(h+=1)<i&&(m=e[h],g=f(m))),c<r&&p<g||h>=i?(a=d,(c+=1)<r&&(d=t[c],p=f(d))):(a=m,(h+=1)<i&&(m=e[h],g=f(m)));for(var v,y,b,x,_,w=a+o,M=w-a,k=o-M,A=k,T=w;c<r&&h<i;)p<g?(a=d,(c+=1)<r&&(d=t[c],p=f(d))):(a=m,(h+=1)<i&&(m=e[h],g=f(m))),o=A,w=a+o,M=w-a,k=o-M,k&&(l[u++]=k),v=T+w,y=v-T,b=v-y,x=w-y,_=T-b,A=_+x,T=v;for(;c<r;)a=d,o=A,w=a+o,M=w-a,k=o-M,k&&(l[u++]=k),v=T+w,y=v-T,b=v-y,x=w-y,_=T-b,A=_+x,T=v,(c+=1)<r&&(d=t[c]);for(;h<i;)a=m,o=A,w=a+o,M=w-a,k=o-M,k&&(l[u++]=k),v=T+w,y=v-T,b=v-y,x=w-y,_=T-b,A=_+x,T=v,(h+=1)<i&&(m=e[h]);return A&&(l[u++]=A),T&&(l[u++]=T),u||(l[u++]=0),l.length=u,l}e.exports=i},{}],514:[function(e,r,n){!function(e,i){"object"==typeof n&&void 0!==r?r.exports=i():"function"==typeof t&&t.amd?t(i):e.ShelfPack=i()}(this,function(){function t(t,e,r){r=r||{},this.w=t||64,this.h=e||64,this.autoResize=!!r.autoResize,this.shelves=[],this.stats={},this.count=function(t){this.stats[t]=1+(0|this.stats[t])}}function e(t,e,r){this.x=0,this.y=t,this.w=this.free=e,this.h=r}return t.prototype.pack=function(t,e){t=[].concat(t),e=e||{};for(var r,n,i,a=[],o=0;o<t.length;o++)if(r=t[o].w||t[o].width,n=t[o].h||t[o].height,r&&n){if(!(i=this.packOne(r,n)))continue;e.inPlace&&(t[o].x=i.x,t[o].y=i.y),a.push(i)}if(this.shelves.length>0){for(var s=0,l=0,u=0;u<this.shelves.length;u++){var c=this.shelves[u];l+=c.h,s=Math.max(c.w-c.free,s)}this.resize(s,l)}return a},t.prototype.packOne=function(t,r){for(var n,i,a=0,o={shelf:-1,waste:1/0},s=0;s<this.shelves.length;s++){if(n=this.shelves[s],a+=n.h,r===n.h&&t<=n.free)return this.count(r),n.alloc(t,r);r>n.h||t>n.free||r<n.h&&t<=n.free&&(i=n.h-r)<o.waste&&(o.waste=i,o.shelf=s)}if(-1!==o.shelf)return n=this.shelves[o.shelf],this.count(r),n.alloc(t,r);if(r<=this.h-a&&t<=this.w)return n=new e(a,this.w,r),this.shelves.push(n),this.count(r),n.alloc(t,r);if(this.autoResize){var l,u,c,h;return l=u=this.h,c=h=this.w,(c<=l||t>c)&&(h=2*Math.max(t,c)),(l<c||r>l)&&(u=2*Math.max(r,l)),this.resize(h,u),this.packOne(t,r)}return null},t.prototype.clear=function(){this.shelves=[],this.stats={}},t.prototype.resize=function(t,e){this.w=t,this.h=e;for(var r=0;r<this.shelves.length;r++)this.shelves[r].resize(t);return!0},e.prototype.alloc=function(t,e){if(t>this.free||e>this.h)return null;var r=this.x;return this.x+=t,this.free-=t,{x:r,y:this.y,w:t,h:e,width:t,height:e}},e.prototype.resize=function(t){return this.free+=t-this.w,this.w=t,!0},t})},{}],515:[function(t,e,r){"use strict";e.exports=function(t){return t<0?-1:t>0?1:0}},{}],516:[function(t,e,r){"use strict";function n(t){return a(i(t))}e.exports=n;var i=t("boundary-cells"),a=t("reduce-simplicial-complex")},{"boundary-cells":69,"reduce-simplicial-complex":498}],517:[function(t,e,r){"use strict";function n(t){for(var e=t.length,r=0,n=0;n<e;++n)r=0|Math.max(r,t[n].length);return r-1}function i(t,e){for(var r=t.length,n=h.mallocUint8(r),i=0;i<r;++i)n[i]=t[i]<e|0;return n}function a(t,e){for(var r=t.length,n=e*(e+1)/2*r|0,i=h.mallocUint32(2*n),a=0,o=0;o<r;++o)for(var s=t[o],e=s.length,l=0;l<e;++l)for(var u=0;u<l;++u){var d=s[u],p=s[l];i[a++]=0|Math.min(d,p),i[a++]=0|Math.max(d,p)}f(c(i,[a/2|0,2]));for(var m=2,o=2;o<a;o+=2)i[o-2]===i[o]&&i[o-1]===i[o+1]||(i[m++]=i[o],i[m++]=i[o+1]);return c(i,[m/2|0,2])}function o(t,e,r,n){for(var i=t.data,a=t.shape[0],o=h.mallocDouble(a),s=0,l=0;l<a;++l){var u=i[2*l],f=i[2*l+1];if(r[u]!==r[f]){var d=e[u],p=e[f];i[2*s]=u,i[2*s+1]=f,o[s++]=(p-n)/(p-d)}}return t.shape[0]=s,c(o,[s])}function s(t,e){var r=h.mallocInt32(2*e),n=t.shape[0],i=t.data;r[0]=0;for(var a=0,o=0;o<n;++o){var s=i[2*o];if(s!==a){for(r[2*a+1]=o;++a<s;)r[2*a]=o,r[2*a+1]=o;r[2*a]=o}}for(r[2*a+1]=n;++a<e;)r[2*a]=r[2*a+1]=n;return r}function l(t){for(var e=0|t.shape[0],r=t.data,n=new Array(e),i=0;i<e;++i)n[i]=[r[2*i],r[2*i+1]];return n}function u(t,e,r,u){if(r=r||0,void 0===u&&(u=n(t)),0===t.length||u<1)return{cells:[],vertexIds:[],vertexWeights:[]};var c=i(e,+r),f=a(t,u),p=o(f,e,c,+r),m=s(f,0|e.length),g=d(u)(t,f.data,m,c),v=l(f),y=[].slice.call(p.data,0,p.shape[0]);return h.free(c),h.free(f.data),h.free(p.data),h.free(m),{cells:g,vertexIds:v,vertexWeights:y}}e.exports=u;var c=t("ndarray"),h=t("typedarray-pool"),f=t("ndarray-sort"),d=t("./lib/codegen")},{"./lib/codegen":518,ndarray:467,"ndarray-sort":465,"typedarray-pool":541}],518:[function(t,e,r){"use strict";function n(t){var e=0,r=new Array(t+1);r[0]=[[]];for(var n=1;n<=t;++n)for(var i=r[n]=o(n),s=0;s<i.length;++s)e=Math.max(e,i[n].length);for(var l=["function B(C,E,i,j){","var a=Math.min(i,j)|0,b=Math.max(i,j)|0,l=C[2*a],h=C[2*a+1];","while(l<h){","var m=(l+h)>>1,v=E[2*m+1];","if(v===b){return m}","if(b<v){h=m}else{l=m+1}","}","return l;","};","function getContour",t,"d(F,E,C,S){","var n=F.length,R=[];","for(var i=0;i<n;++i){var c=F[i],l=c.length;"],n=t+1;n>1;--n){n<t+1&&l.push("else "),l.push("if(l===",n,"){");for(var u=[],s=0;s<n;++s)u.push("(S[c["+s+"]]<<"+s+")");l.push("var M=",u.join("+"),";if(M===0||M===",(1<<n)-1,"){continue}switch(M){");for(var i=r[n-1],s=0;s<i.length;++s)l.push("case ",s,":"),function(t){if(!(t.length<=0)){l.push("R.push(");for(var e=0;e<t.length;++e){var r=t[e];e>0&&l.push(","),l.push("[");for(var n=0;n<r.length;++n){var i=r[n];n>0&&l.push(","),l.push("B(C,E,c[",i[0],"],c[",i[1],"])")}l.push("]")}l.push(");")}}(i[s]),l.push("break;");l.push("}}")}return l.push("}return R;};return getContour",t,"d"),new Function("pool",l.join(""))(a)}function i(t){var e=s[t];return e||(e=s[t]=n(t)),e}e.exports=i;var a=t("typedarray-pool"),o=t("marching-simplex-table"),s={}},{"marching-simplex-table":445,"typedarray-pool":541}],519:[function(t,e,r){"use strict";"use restrict";function n(t){for(var e=0,r=Math.max,n=0,i=t.length;n<i;++n)e=r(e,t[n].length);return e-1}function i(t){for(var e=-1,r=Math.max,n=0,i=t.length;n<i;++n)for(var a=t[n],o=0,s=a.length;o<s;++o)e=r(e,a[o]);return e+1}function a(t){for(var e=new Array(t.length),r=0,n=t.length;r<n;++r)e[r]=t[r].slice(0);return e}function o(t,e){var r=t.length,n=t.length-e.length,i=Math.min;if(n)return n;switch(r){case 0:return 0;case 1:return t[0]-e[0];case 2:var a=t[0]+t[1]-e[0]-e[1];return a||i(t[0],t[1])-i(e[0],e[1]);case 3:var o=t[0]+t[1],s=e[0]+e[1];if(a=o+t[2]-(s+e[2]))return a;var l=i(t[0],t[1]),u=i(e[0],e[1]),a=i(l,t[2])-i(u,e[2]);return a||i(l+t[2],o)-i(u+e[2],s);default:var c=t.slice(0);c.sort();var h=e.slice(0);h.sort();for(var f=0;f<r;++f)if(n=c[f]-h[f])return n;return 0}}function s(t,e){return o(t[0],e[0])}function l(t,e){if(e){for(var r=t.length,n=new Array(r),i=0;i<r;++i)n[i]=[t[i],e[i]];n.sort(s);for(var i=0;i<r;++i)t[i]=n[i][0],e[i]=n[i][1];return t}return t.sort(o),t}function u(t){if(0===t.length)return[];for(var e=1,r=t.length,n=1;n<r;++n){var i=t[n];if(o(i,t[n-1])){if(n===e){e++;continue}t[e++]=i}}return t.length=e,t}function c(t,e){for(var r=0,n=t.length-1,i=-1;r<=n;){var a=r+n>>1,s=o(t[a],e);s<=0?(0===s&&(i=a),r=a+1):s>0&&(n=a-1)}return i}function h(t,e){for(var r=new Array(t.length),n=0,i=r.length;n<i;++n)r[n]=[];for(var a=[],n=0,s=e.length;n<s;++n)for(var l=e[n],u=l.length,h=1,f=1<<u;h<f;++h){a.length=b.popCount(h);for(var d=0,p=0;p<u;++p)h&1<<p&&(a[d++]=l[p]);var m=c(t,a);if(!(m<0))for(;;)if(r[m++].push(n),m>=t.length||0!==o(t[m],a))break}return r}function f(t,e){if(!e)return h(u(p(t,0)),t,0);for(var r=new Array(e),n=0;n<e;++n)r[n]=[];for(var n=0,i=t.length;n<i;++n)for(var a=t[n],o=0,s=a.length;o<s;++o)r[a[o]].push(n);return r}function d(t){for(var e=[],r=0,n=t.length;r<n;++r)for(var i=t[r],a=0|i.length,o=1,s=1<<a;o<s;++o){for(var u=[],c=0;c<a;++c)o>>>c&1&&u.push(i[c]);e.push(u)}return l(e)}function p(t,e){if(e<0)return[];for(var r=[],n=(1<<e+1)-1,i=0;i<t.length;++i)for(var a=t[i],o=n;o<1<<a.length;o=b.nextCombination(o)){for(var s=new Array(e+1),u=0,c=0;c<a.length;++c)o&1<<c&&(s[u++]=a[c]);r.push(s)}return l(r)}function m(t){for(var e=[],r=0,n=t.length;r<n;++r)for(var i=t[r],a=0,o=i.length;a<o;++a){for(var s=new Array(i.length-1),u=0,c=0;u<o;++u)u!==a&&(s[c++]=i[u]);e.push(s)}return l(e)}function g(t,e){for(var r=new x(e),n=0;n<t.length;++n)for(var i=t[n],a=0;a<i.length;++a)for(var o=a+1;o<i.length;++o)r.link(i[a],i[o]);for(var s=[],l=r.ranks,n=0;n<l.length;++n)l[n]=-1;for(var n=0;n<t.length;++n){var u=r.find(t[n][0]);l[u]<0?(l[u]=s.length,s.push([t[n].slice(0)])):s[l[u]].push(t[n].slice(0))}return s}function v(t){for(var e=u(l(p(t,0))),r=new x(e.length),n=0;n<t.length;++n)for(var i=t[n],a=0;a<i.length;++a)for(var o=c(e,[i[a]]),s=a+1;s<i.length;++s)r.link(o,c(e,[i[s]]));for(var h=[],f=r.ranks,n=0;n<f.length;++n)f[n]=-1;for(var n=0;n<t.length;++n){var d=r.find(c(e,[t[n][0]]));f[d]<0?(f[d]=h.length,h.push([t[n].slice(0)])):h[f[d]].push(t[n].slice(0))}return h}function y(t,e){return e?g(t,e):v(t)}var b=t("bit-twiddle"),x=t("union-find");r.dimension=n,r.countVertices=i,r.cloneCells=a,r.compareCells=o,r.normalize=l,r.unique=u,r.findCell=c,r.incidence=h,r.dual=f,r.explode=d,r.skeleton=p,r.boundary=m,r.connectedComponents=y},{"bit-twiddle":67,"union-find":542}],520:[function(t,e,r){arguments[4][67][0].apply(r,arguments)},{dup:67}],521:[function(t,e,r){arguments[4][519][0].apply(r,arguments)},{"bit-twiddle":520,dup:519,"union-find":522}],522:[function(t,e,r){"use strict";"use restrict";function n(t){this.roots=new Array(t),this.ranks=new Array(t);for(var e=0;e<t;++e)this.roots[e]=e,this.ranks[e]=0}e.exports=n,n.prototype.length=function(){return this.roots.length},n.prototype.makeSet=function(){var t=this.roots.length;return this.roots.push(t),this.ranks.push(0),t},n.prototype.find=function(t){for(var e=this.roots;e[t]!==t;){var r=e[t];e[t]=e[r],t=r}return t},n.prototype.link=function(t,e){var r=this.find(t),n=this.find(e);if(r!==n){var i=this.ranks,a=this.roots,o=i[r],s=i[n];o<s?a[r]=n:s<o?a[n]=r:(a[n]=r,++i[r])}}},{}],523:[function(t,e,r){"use strict";function n(t,e,r){return Math.abs(a(t,e,r))/Math.sqrt(Math.pow(e[0]-r[0],2)+Math.pow(e[1]-r[1],2))}function i(t,e,r){function i(t){if(b[t])return 1/0;var r=g[t],i=v[t];return r<0||i<0?1/0:n(e[t],e[r],e[i])}function a(t,e){var r=k[t],n=k[e];k[t]=n,k[e]=r,A[r]=e,A[n]=t}function s(t){return y[k[t]]}function l(t){return 1&t?t-1>>1:(t>>1)-1}function u(t){for(var e=s(t);;){var r=e,n=2*t+1,i=2*(t+1),o=t;if(n<T){var l=s(n);l<r&&(o=n,r=l)}if(i<T){s(i)<r&&(o=i)}if(o===t)return t;a(t,o),t=o}}function c(t){for(var e=s(t);t>0;){var r=l(t);if(r>=0){if(e<s(r)){a(t,r),t=r;continue}}return t}}function h(){if(T>0){var t=k[0];return a(0,T-1),T-=1,u(0),t}return-1}function f(t,e){var r=k[t];return y[r]===e?t:(y[r]=-1/0,c(t),h(),y[r]=e,T+=1,c(T-1))}function d(t,e){if(t[e]<0)return e;var r=e,n=e;do{var i=t[n];if(!b[n]||i<0||i===n)break;if(n=i,i=t[n],!b[n]||i<0||i===n)break;n=i,r=t[r]}while(r!==n);for(var a=e;a!==n;a=t[a])t[a]=n;return n}for(var p=e.length,m=t.length,g=new Array(p),v=new Array(p),y=new Array(p),b=new Array(p),x=0;x<p;++x)g[x]=v[x]=-1,y[x]=1/0,b[x]=!1;for(var x=0;x<m;++x){var _=t[x];if(2!==_.length)throw new Error("Input must be a graph");var w=_[1],M=_[0];-1!==v[M]?v[M]=-2:v[M]=w,-1!==g[w]?g[w]=-2:g[w]=M}for(var k=[],A=new Array(p),x=0;x<p;++x){(y[x]=i(x))<1/0?(A[x]=k.length,k.push(x)):A[x]=-1}for(var T=k.length,x=T>>1;x>=0;--x)u(x);for(;;){var S=h();if(S<0||y[S]>r)break;!function(t){if(!b[t]){b[t]=!0;var e=g[t],r=v[t];g[r]>=0&&(g[r]=e),v[e]>=0&&(v[e]=r),A[e]>=0&&f(A[e],i(e)),A[r]>=0&&f(A[r],i(r))}}(S)}for(var E=[],x=0;x<p;++x)b[x]||(A[x]=E.length,E.push(e[x].slice()));var L=(E.length,[]);return t.forEach(function(t){var e=d(g,t[0]),r=d(v,t[1]);if(e>=0&&r>=0&&e!==r){var n=A[e],i=A[r];n!==i&&L.push([n,i])}}),o.unique(o.normalize(L)),{positions:E,edges:L}}e.exports=i;var a=t("robust-orientation"),o=t("simplicial-complex")},{"robust-orientation":508,"simplicial-complex":521}],524:[function(t,e,r){"use strict";function n(t,e){var r,n;if(e[0][0]<e[1][0])r=e[0],n=e[1];else{if(!(e[0][0]>e[1][0])){var i=Math.min(t[0][1],t[1][1]),o=Math.max(t[0][1],t[1][1]),s=Math.min(e[0][1],e[1][1]),l=Math.max(e[0][1],e[1][1]);return o<s?o-s:i>l?i-l:o-l}r=e[1],n=e[0]}var u,c;t[0][1]<t[1][1]?(u=t[0],c=t[1]):(u=t[1],c=t[0]);var h=a(n,r,u);return h||((h=a(n,r,c))||c-n)}function i(t,e){var r,i;if(e[0][0]<e[1][0])r=e[0],i=e[1];else{if(!(e[0][0]>e[1][0]))return n(e,t);r=e[1],i=e[0]}var o,s;if(t[0][0]<t[1][0])o=t[0],s=t[1];else{if(!(t[0][0]>t[1][0]))return-n(t,e);o=t[1],s=t[0]}var l=a(r,i,s),u=a(r,i,o);if(l<0){if(u<=0)return l}else if(l>0){if(u>=0)return l}else if(u)return u;if(l=a(s,o,i),u=a(s,o,r),l<0){if(u<=0)return l}else if(l>0){if(u>=0)return l}else if(u)return u;return i[0]-s[0]}e.exports=i;var a=t("robust-orientation")},{"robust-orientation":508}],525:[function(t,e,r){"use strict";function n(t,e,r){this.slabs=t,this.coordinates=e,this.horizontal=r}function i(t,e){return t.y-e}function a(t,e){for(var r=null;t;){var n,i,o=t.key;o[0][0]<o[1][0]?(n=o[0],i=o[1]):(n=o[1],i=o[0]);var s=h(n,i,e);if(s<0)t=t.left;else if(s>0)if(e[0]!==o[1][0])r=t,t=t.right;else{var l=a(t.right,e);if(l)return l;t=t.left}else{if(e[0]!==o[1][0])return t;var l=a(t.right,e);if(l)return l;t=t.left}}return r}function o(t,e,r,n){this.y=t,this.index=e,this.start=r,this.closed=n}function s(t,e,r,n){this.x=t,this.segment=e,this.create=r,this.index=n}function l(t){for(var e=t.length,r=2*e,i=new Array(r),a=0;a<e;++a){var l=t[a],u=l[0][0]<l[1][0];i[2*a]=new s(l[0][0],l,u,a),i[2*a+1]=new s(l[1][0],l,!u,a)}i.sort(function(t,e){var r=t.x-e.x;return r||((r=t.create-e.create)||Math.min(t.segment[0][1],t.segment[1][1])-Math.min(e.segment[0][1],e.segment[1][1]))});for(var h=c(f),d=[],p=[],m=[],a=0;a<r;){for(var g=i[a].x,v=[];a<r;){var y=i[a];if(y.x!==g)break;a+=1,y.segment[0][0]===y.x&&y.segment[1][0]===y.x?y.create&&(y.segment[0][1]<y.segment[1][1]?(v.push(new o(y.segment[0][1],y.index,!0,!0)),v.push(new o(y.segment[1][1],y.index,!1,!1))):(v.push(new o(y.segment[1][1],y.index,!0,!1)),v.push(new o(y.segment[0][1],y.index,!1,!0)))):h=y.create?h.insert(y.segment,y.index):h.remove(y.segment)}d.push(h.root),p.push(g),m.push(v)}return new n(d,p,m)}e.exports=l;var u=t("binary-search-bounds"),c=t("functional-red-black-tree"),h=t("robust-orientation"),f=t("./lib/order-segments");n.prototype.castUp=function(t){var e=u.le(this.coordinates,t[0]);if(e<0)return-1;var r=(this.slabs[e],a(this.slabs[e],t)),n=-1;if(r&&(n=r.value),this.coordinates[e]===t[0]){var o=null;if(r&&(o=r.key),e>0){var s=a(this.slabs[e-1],t);s&&(o?f(s.key,o)>0&&(o=s.key,n=s.value):(n=s.value,o=s.key))}var l=this.horizontal[e];if(l.length>0){var c=u.ge(l,t[1],i);if(c<l.length){var d=l[c];if(t[1]===d.y){if(d.closed)return d.index;for(;c<l.length-1&&l[c+1].y===t[1];)if(c+=1,d=l[c],d.closed)return d.index;if(d.y===t[1]&&!d.start){if((c+=1)>=l.length)return n;d=l[c]}}if(d.start)if(o){var p=h(o[0],o[1],[t[0],d.y]);o[0][0]>o[1][0]&&(p=-p),p>0&&(n=d.index)}else n=d.index;else d.y!==t[1]&&(n=d.index)}}}return n}},{"./lib/order-segments":524,"binary-search-bounds":66,"functional-red-black-tree":135,"robust-orientation":508}],526:[function(t,e,r){"use strict";function n(t,e){var r=u(l(t,e),[e[e.length-1]]);return r[r.length-1]}function i(t,e,r,n){var i=n-e,a=-e/i;a<0?a=0:a>1&&(a=1);for(var o=1-a,s=t.length,l=new Array(s),u=0;u<s;++u)l[u]=a*t[u]+o*r[u];return l}function a(t,e){for(var r=[],a=[],o=n(t[t.length-1],e),s=t[t.length-1],l=t[0],u=0;u<t.length;++u,s=l){l=t[u];var c=n(l,e);if(o<0&&c>0||o>0&&c<0){var h=i(s,c,l,o);r.push(h),a.push(h.slice())}c<0?a.push(l.slice()):c>0?r.push(l.slice()):(r.push(l.slice()),a.push(l.slice())),o=c}return{positive:r,negative:a}}function o(t,e){for(var r=[],a=n(t[t.length-1],e),o=t[t.length-1],s=t[0],l=0;l<t.length;++l,o=s){s=t[l];var u=n(s,e);(a<0&&u>0||a>0&&u<0)&&r.push(i(o,u,s,a)),u>=0&&r.push(s.slice()),a=u}return r}function s(t,e){for(var r=[],a=n(t[t.length-1],e),o=t[t.length-1],s=t[0],l=0;l<t.length;++l,o=s){s=t[l];var u=n(s,e);(a<0&&u>0||a>0&&u<0)&&r.push(i(o,u,s,a)),u<=0&&r.push(s.slice()),a=u}return r}var l=t("robust-dot-product"),u=t("robust-sum");e.exports=a,e.exports.positive=o,e.exports.negative=s},{"robust-dot-product":505,"robust-sum":513}],527:[function(e,r,n){!function(){"use strict";function e(t){return i(a(t),arguments)}function r(t,r){return e.apply(null,[t].concat(r||[]))}function i(t,r){var n,i,a,s,l,u,c,h,f,d=1,p=t.length,m="";for(i=0;i<p;i++)if("string"==typeof t[i])m+=t[i];else if(Array.isArray(t[i])){if(s=t[i],s[2])for(n=r[d],a=0;a<s[2].length;a++){if(!n.hasOwnProperty(s[2][a]))throw new Error(e('[sprintf] property "%s" does not exist',s[2][a]));n=n[s[2][a]]}else n=s[1]?r[s[1]]:r[d++];if(o.not_type.test(s[8])&&o.not_primitive.test(s[8])&&n instanceof Function&&(n=n()),o.numeric_arg.test(s[8])&&"number"!=typeof n&&isNaN(n))throw new TypeError(e("[sprintf] expecting number but found %T",n));switch(o.number.test(s[8])&&(h=n>=0),s[8]){case"b":n=parseInt(n,10).toString(2);break;case"c":n=String.fromCharCode(parseInt(n,10));break;case"d":case"i":n=parseInt(n,10);break;case"j":n=JSON.stringify(n,null,s[6]?parseInt(s[6]):0);break;case"e":n=s[7]?parseFloat(n).toExponential(s[7]):parseFloat(n).toExponential();break;case"f":n=s[7]?parseFloat(n).toFixed(s[7]):parseFloat(n);break;case"g":n=s[7]?String(Number(n.toPrecision(s[7]))):parseFloat(n);break;case"o":n=(parseInt(n,10)>>>0).toString(8);break;case"s":n=String(n),n=s[7]?n.substring(0,s[7]):n;break;case"t":n=String(!!n),n=s[7]?n.substring(0,s[7]):n;break;case"T":n=Object.prototype.toString.call(n).slice(8,-1).toLowerCase(),n=s[7]?n.substring(0,s[7]):n;break;case"u":n=parseInt(n,10)>>>0;break;case"v":n=n.valueOf(),n=s[7]?n.substring(0,s[7]):n;break;case"x":n=(parseInt(n,10)>>>0).toString(16);break;case"X":n=(parseInt(n,10)>>>0).toString(16).toUpperCase()}o.json.test(s[8])?m+=n:(!o.number.test(s[8])||h&&!s[3]?f="":(f=h?"+":"-",n=n.toString().replace(o.sign,"")),u=s[4]?"0"===s[4]?"0":s[4].charAt(1):" ",c=s[6]-(f+n).length,l=s[6]&&c>0?u.repeat(c):"",m+=s[5]?f+n+l:"0"===u?f+l+n:l+f+n)}return m}function a(t){if(s[t])return s[t];for(var e,r=t,n=[],i=0;r;){if(null!==(e=o.text.exec(r)))n.push(e[0]);else if(null!==(e=o.modulo.exec(r)))n.push("%");else{if(null===(e=o.placeholder.exec(r)))throw new SyntaxError("[sprintf] unexpected placeholder");if(e[2]){i|=1;var a=[],l=e[2],u=[];if(null===(u=o.key.exec(l)))throw new SyntaxError("[sprintf] failed to parse named argument key");for(a.push(u[1]);""!==(l=l.substring(u[0].length));)if(null!==(u=o.key_access.exec(l)))a.push(u[1]);else{if(null===(u=o.index_access.exec(l)))throw new SyntaxError("[sprintf] failed to parse named argument key");a.push(u[1])}e[2]=a}else i|=2;if(3===i)throw new Error("[sprintf] mixing positional and named placeholders is not (yet) supported");n.push(e)}r=r.substring(e[0].length)}return s[t]=n}var o={not_string:/[^s]/,not_bool:/[^t]/,not_type:/[^T]/,not_primitive:/[^v]/,number:/[diefg]/,numeric_arg:/[bcdiefguxX]/,json:/[j]/,not_json:/[^j]/,text:/^[^\x25]+/,modulo:/^\x25{2}/,placeholder:/^\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-gijostTuvxX])/,key:/^([a-z_][a-z_\d]*)/i,key_access:/^\.([a-z_][a-z_\d]*)/i,index_access:/^\[(\d+)\]/,sign:/^[\+\-]/},s=Object.create(null);void 0!==n&&(n.sprintf=e,n.vsprintf=r),"undefined"!=typeof window&&(window.sprintf=e,window.vsprintf=r,"function"==typeof t&&t.amd&&t(function(){return{sprintf:e,vsprintf:r}}))}()},{}],528:[function(t,e,r){"use strict";function n(t){for(var e=t.length,r=new Array(e),n=new Array(e),i=new Array(e),a=new Array(e),o=new Array(e),s=new Array(e),l=0;l<e;++l)r[l]=-1,n[l]=0,i[l]=!1,a[l]=0,o[l]=-1,s[l]=[];for(var u=0,c=[],h=[],l=0;l<e;++l)r[l]<0&&function(e){var l=[e],f=[e];for(r[e]=n[e]=u,i[e]=!0,u+=1;f.length>0;){e=f[f.length-1];var d=t[e];if(a[e]<d.length){for(var p=a[e];p<d.length;++p){var m=d[p];if(r[m]<0){r[m]=n[m]=u,i[m]=!0,u+=1,l.push(m),f.push(m);break}i[m]&&(n[e]=0|Math.min(n[e],n[m])),o[m]>=0&&s[e].push(o[m])}a[e]=p}else{if(n[e]===r[e]){for(var g=[],v=[],y=0,p=l.length-1;p>=0;--p){var b=l[p];if(i[b]=!1,g.push(b),v.push(s[b]),y+=s[b].length,o[b]=c.length,b===e){l.length=p;break}}c.push(g);for(var x=new Array(y),p=0;p<v.length;p++)for(var _=0;_<v[p].length;_++)x[--y]=v[p][_];h.push(x)}f.pop()}}}(l);for(var f,l=0;l<h.length;l++){var d=h[l];if(0!==d.length){d.sort(function(t,e){return t-e}),f=[d[0]];for(var p=1;p<d.length;p++)d[p]!==d[p-1]&&f.push(d[p]);h[l]=f}}return{components:c,adjacencyList:h}}e.exports=n},{}],529:[function(t,e,r){"use strict";function n(t){return new i(t)}function i(t){this.options=d(Object.create(this.options),t),this.trees=new Array(this.options.maxZoom+1)}function a(t,e,r,n,i){return{x:t,y:e,zoom:1/0,id:n,properties:i,parentId:-1,numPoints:r}}function o(t,e){var r=t.geometry.coordinates;return{x:u(r[0]),y:c(r[1]),zoom:1/0,id:e,parentId:-1}}function s(t){return{type:"Feature",properties:l(t),geometry:{type:"Point",coordinates:[h(t.x),f(t.y)]}}}function l(t){var e=t.numPoints,r=e>=1e4?Math.round(e/1e3)+"k":e>=1e3?Math.round(e/100)/10+"k":e;return d(d({},t.properties),{cluster:!0,cluster_id:t.id,point_count:e,point_count_abbreviated:r})}function u(t){return t/360+.5}function c(t){var e=Math.sin(t*Math.PI/180),r=.5-.25*Math.log((1+e)/(1-e))/Math.PI;return r<0?0:r>1?1:r}function h(t){return 360*(t-.5)}function f(t){var e=(180-360*t)*Math.PI/180;return 360*Math.atan(Math.exp(e))/Math.PI-90}function d(t,e){for(var r in e)t[r]=e[r];return t}function p(t){return t.x}function m(t){return t.y}var g=t("kdbush");e.exports=n,i.prototype={options:{minZoom:0,maxZoom:16,radius:40,extent:512,nodeSize:64,log:!1,reduce:null,initial:function(){return{}},map:function(t){return t}},load:function(t){var e=this.options.log;e&&console.time("total time");var r="prepare "+t.length+" points";e&&console.time(r),this.points=t;var n=t.map(o);e&&console.timeEnd(r);for(var i=this.options.maxZoom;i>=this.options.minZoom;i--){var a=+Date.now();this.trees[i+1]=g(n,p,m,this.options.nodeSize,Float32Array),n=this._cluster(n,i),e&&console.log("z%d: %d clusters in %dms",i,n.length,+Date.now()-a)}return this.trees[this.options.minZoom]=g(n,p,m,this.options.nodeSize,Float32Array),e&&console.timeEnd("total time"),this},getClusters:function(t,e){for(var r=this.trees[this._limitZoom(e)],n=r.range(u(t[0]),c(t[3]),u(t[2]),c(t[1])),i=[],a=0;a<n.length;a++){var o=r.points[n[a]];i.push(o.numPoints?s(o):this.points[o.id])}return i},getChildren:function(t,e){for(var r=this.trees[e+1].points[t],n=this.options.radius/(this.options.extent*Math.pow(2,e)),i=this.trees[e+1].within(r.x,r.y,n),a=[],o=0;o<i.length;o++){var l=this.trees[e+1].points[i[o]];l.parentId===t&&a.push(l.numPoints?s(l):this.points[l.id])}return a},getLeaves:function(t,e,r,n){r=r||10,n=n||0;var i=[];return this._appendLeaves(i,t,e,r,n,0),i},getTile:function(t,e,r){var n=this.trees[this._limitZoom(t)],i=Math.pow(2,t),a=this.options.extent,o=this.options.radius,s=o/a,l=(r-s)/i,u=(r+1+s)/i,c={features:[]};return this._addTileFeatures(n.range((e-s)/i,l,(e+1+s)/i,u),n.points,e,r,i,c),0===e&&this._addTileFeatures(n.range(1-s/i,l,1,u),n.points,i,r,i,c),e===i-1&&this._addTileFeatures(n.range(0,l,s/i,u),n.points,-1,r,i,c),c.features.length?c:null},getClusterExpansionZoom:function(t,e){for(;e<this.options.maxZoom;){var r=this.getChildren(t,e);if(e++,1!==r.length)break;t=r[0].properties.cluster_id}return e},_appendLeaves:function(t,e,r,n,i,a){for(var o=this.getChildren(e,r),s=0;s<o.length;s++){var l=o[s].properties;if(l.cluster?a+l.point_count<=i?a+=l.point_count:a=this._appendLeaves(t,l.cluster_id,r+1,n,i,a):a<i?a++:t.push(o[s]),t.length===n)break}return a},_addTileFeatures:function(t,e,r,n,i,a){for(var o=0;o<t.length;o++){var s=e[t[o]];a.features.push({type:1,geometry:[[Math.round(this.options.extent*(s.x*i-r)),Math.round(this.options.extent*(s.y*i-n))]],tags:s.numPoints?l(s):this.points[s.id].properties})}},_limitZoom:function(t){return Math.max(this.options.minZoom,Math.min(t,this.options.maxZoom+1))},_cluster:function(t,e){for(var r=[],n=this.options.radius/(this.options.extent*Math.pow(2,e)),i=0;i<t.length;i++){var o=t[i];if(!(o.zoom<=e)){o.zoom=e;var s=this.trees[e+1],l=s.within(o.x,o.y,n),u=o.numPoints||1,c=o.x*u,h=o.y*u,f=null;this.options.reduce&&(f=this.options.initial(),this._accumulate(f,o));for(var d=0;d<l.length;d++){var p=s.points[l[d]];if(e<p.zoom){var m=p.numPoints||1;p.zoom=e,c+=p.x*m,h+=p.y*m,u+=m,p.parentId=i,this.options.reduce&&this._accumulate(f,p)}}1===u?r.push(o):(o.parentId=i,r.push(a(c/u,h/u,u,i,f)))}}return r},_accumulate:function(t,e){var r=e.numPoints?e.properties:this.options.map(this.points[e.id].properties);this.options.reduce(t,r)}}},{kdbush:298}],530:[function(t,e,r){"use strict";function n(t){return t.split("").map(function(t){return t in i?i[t]:""}).join("")}e.exports=n;var i={" ":" ",0:"\u2070",1:"\xb9",2:"\xb2",3:"\xb3",4:"\u2074",5:"\u2075",6:"\u2076",7:"\u2077",8:"\u2078",9:"\u2079","+":"\u207a","-":"\u207b",a:"\u1d43",b:"\u1d47",c:"\u1d9c",d:"\u1d48",e:"\u1d49",f:"\u1da0",g:"\u1d4d",h:"\u02b0",i:"\u2071",j:"\u02b2",k:"\u1d4f",l:"\u02e1",m:"\u1d50",n:"\u207f",o:"\u1d52",p:"\u1d56",r:"\u02b3",s:"\u02e2",t:"\u1d57",u:"\u1d58",v:"\u1d5b",w:"\u02b7",x:"\u02e3",y:"\u02b8",z:"\u1dbb"}},{}],531:[function(t,e,r){"use strict";function n(t,e){var r=t.length,n=["'use strict';"],i="surfaceNets"+t.join("_")+"d"+e;n.push("var contour=genContour({","order:[",t.join(),"],","scalarArguments: 3,","phase:function phaseFunc(p,a,b,c) { return (p > c)|0 },"),"generic"===e&&n.push("getters:[0],");for(var a=[],l=[],u=0;u<r;++u)a.push("d"+u),l.push("d"+u);for(var u=0;u<1<<r;++u)a.push("v"+u),l.push("v"+u);for(var u=0;u<1<<r;++u)a.push("p"+u),l.push("p"+u);a.push("a","b","c"),l.push("a","c"),n.push("vertex:function vertexFunc(",a.join(),"){");for(var c=[],u=0;u<1<<r;++u)c.push("(p"+u+"<<"+u+")");n.push("var m=(",c.join("+"),")|0;if(m===0||m===",(1<<(1<<r))-1,"){return}");var h=[],f=[];1<<(1<<r)<=128?(n.push("switch(m){"),f=n):n.push("switch(m>>>7){");for(var u=0;u<1<<(1<<r);++u){if(1<<(1<<r)>128&&u%128==0){h.length>0&&f.push("}}");var d="vExtra"+h.length;n.push("case ",u>>>7,":",d,"(m&0x7f,",l.join(),");break;"),f=["function ",d,"(m,",l.join(),"){switch(m){"],h.push(f)}f.push("case ",127&u,":");for(var p=new Array(r),m=new Array(r),g=new Array(r),v=new Array(r),y=0,b=0;b<r;++b)p[b]=[],m[b]=[],g[b]=0,v[b]=0;for(var b=0;b<1<<r;++b)for(var x=0;x<r;++x){var _=b^1<<x;if(!(_>b)&&!(u&1<<_)!=!(u&1<<b)){var w=1;u&1<<_?m[x].push("v"+_+"-v"+b):(m[x].push("v"+b+"-v"+_),w=-w),w<0?(p[x].push("-v"+b+"-v"+_),g[x]+=2):(p[x].push("v"+b+"+v"+_),g[x]-=2),y+=1;for(var M=0;M<r;++M)M!==x&&(_&1<<M?v[M]+=1:v[M]-=1)}}for(var k=[],x=0;x<r;++x)if(0===p[x].length)k.push("d"+x+"-0.5");else{var A="";g[x]<0?A=g[x]+"*c":g[x]>0&&(A="+"+g[x]+"*c");var T=p[x].length/y*.5,S=.5+v[x]/y*.5;k.push("d"+x+"-"+S+"-"+T+"*("+p[x].join("+")+A+")/("+m[x].join("+")+")")}f.push("a.push([",k.join(),"]);","break;")}n.push("}},"),h.length>0&&f.push("}}");for(var E=[],u=0;u<1<<r-1;++u)E.push("v"+u);E.push("c0","c1","p0","p1","a","b","c"),n.push("cell:function cellFunc(",E.join(),"){");var L=s(r-1);n.push("if(p0){b.push(",L.map(function(t){return"["+t.map(function(t){return"v"+t})+"]"}).join(),")}else{b.push(",L.map(function(t){var e=t.slice();return e.reverse(),"["+e.map(function(t){return"v"+t})+"]"}).join(),")}}});function ",i,"(array,level){var verts=[],cells=[];contour(array,verts,cells,level);return {positions:verts,cells:cells};} return ",i,";");for(var u=0;u<h.length;++u)n.push(h[u].join(""));return new Function("genContour",n.join(""))(o)}function i(t,e){for(var r=l(t,e),n=r.length,i=new Array(n),a=new Array(n),o=0;o<n;++o)i[o]=[r[o]],a[o]=[o];return{positions:i,cells:a}}function a(t,e){if(t.dimension<=0)return{positions:[],cells:[]};if(1===t.dimension)return i(t,e);var r=t.order.join()+"-"+t.dtype,a=u[r],e=+e||0;return a||(a=u[r]=n(t.order,t.dtype)),a(t,e)}e.exports=a;var o=t("ndarray-extract-contour"),s=t("triangulate-hypercube"),l=t("zero-crossings"),u={}},{"ndarray-extract-contour":456,"triangulate-hypercube":537,"zero-crossings":584}],532:[function(t,e,r){(function(r){"use strict";function n(t){for(var e=t.cells,r=t.positions,n=new Float32Array(6*e.length),i=0,a=0,o=0;o<e.length;++o)for(var s=e[o],l=0;l<3;++l){var u=r[s[l]];n[i++]=u[0],n[i++]=u[1]+1.4,a=Math.max(u[0],a)}return{data:n,shape:a}}function i(t,e,r){var r=r||{},o=s[t];o||(o=s[t]={" ":{data:new Float32Array(0),shape:.2}});var l=o[e];if(!l)if(e.length<=1||!/\d/.test(e))l=o[e]=n(a(e,{triangles:!0,font:t,textAlign:r.textAlign||"left",textBaseline:"alphabetic"}));else{for(var u=e.split(/(\d|\s)/),c=new Array(u.length),h=0,f=0,d=0;d<u.length;++d)c[d]=i(t,u[d]),h+=c[d].data.length,f+=c[d].shape,d>0&&(f+=.02);for(var p=new Float32Array(h),m=0,g=-.5*f,d=0;d<c.length;++d){for(var v=c[d].data,y=0;y<v.length;y+=2)p[m++]=v[y]+g,p[m++]=v[y+1];g+=c[d].shape+.02}l=o[e]={data:p,shape:f}}return l}e.exports=i;var a=t("vectorize-text"),o=window||r.global||{},s=o.__TEXT_CACHE||{};o.__TEXT_CACHE={}}).call(this,t("_process"))},{_process:487,"vectorize-text":554}],533:[function(t,e,r){"use strict";function n(t,e,r,n,i){this.fontSize=t||24,this.buffer=void 0===e?3:e,this.cutoff=n||.25,this.fontFamily=i||"sans-serif",this.radius=r||8;var a=this.size=this.fontSize+2*this.buffer;this.canvas=document.createElement("canvas"),this.canvas.width=this.canvas.height=a,this.ctx=this.canvas.getContext("2d"),this.ctx.font=t+"px "+this.fontFamily,this.ctx.textBaseline="middle",this.ctx.fillStyle="black",this.gridOuter=new Float64Array(a*a),this.gridInner=new Float64Array(a*a),this.f=new Float64Array(a),this.d=new Float64Array(a),this.z=new Float64Array(a+1),this.v=new Int16Array(a),this.middle=Math.round(a/2*(navigator.userAgent.indexOf("Gecko/")>=0?1.2:1))}function i(t,e,r,n,i,o,s){for(var l=0;l<e;l++){for(var u=0;u<r;u++)n[u]=t[u*e+l];for(a(n,i,o,s,r),u=0;u<r;u++)t[u*e+l]=i[u]}for(u=0;u<r;u++){for(l=0;l<e;l++)n[l]=t[u*e+l];for(a(n,i,o,s,e),l=0;l<e;l++)t[u*e+l]=Math.sqrt(i[l])}}function a(t,e,r,n,i){r[0]=0,n[0]=-o,n[1]=+o;for(var a=1,s=0;a<i;a++){for(var l=(t[a]+a*a-(t[r[s]]+r[s]*r[s]))/(2*a-2*r[s]);l<=n[s];)s--,l=(t[a]+a*a-(t[r[s]]+r[s]*r[s]))/(2*a-2*r[s]);s++,r[s]=a,n[s]=l,n[s+1]=+o}for(a=0,s=0;a<i;a++){
for(;n[s+1]<a;)s++;e[a]=(a-r[s])*(a-r[s])+t[r[s]]}}e.exports=n;var o=1e20;n.prototype.draw=function(t){this.ctx.clearRect(0,0,this.size,this.size),this.ctx.fillText(t,this.buffer,this.middle);for(var e=this.ctx.getImageData(0,0,this.size,this.size),r=e.data,n=0;n<this.size*this.size;n++){var a=r[4*n+3]/255;this.gridOuter[n]=1===a?0:0===a?o:Math.pow(Math.max(0,.5-a),2),this.gridInner[n]=1===a?o:0===a?0:Math.pow(Math.max(0,a-.5),2)}for(i(this.gridOuter,this.size,this.size,this.f,this.d,this.v,this.z),i(this.gridInner,this.size,this.size,this.f,this.d,this.v,this.z),n=0;n<this.size*this.size;n++){var s=this.gridOuter[n]-this.gridInner[n],l=Math.max(0,Math.min(255,Math.round(255-255*(s/this.radius+this.cutoff))));r[4*n+0]=l,r[4*n+1]=l,r[4*n+2]=l,r[4*n+3]=255}return e}},{}],534:[function(e,r,n){!function(e){function n(t,e){if(t=t||"",e=e||{},t instanceof n)return t;if(!(this instanceof n))return new n(t,e);var r=i(t);this._originalInput=t,this._r=r.r,this._g=r.g,this._b=r.b,this._a=r.a,this._roundA=V(100*this._a)/100,this._format=e.format||r.format,this._gradientType=e.gradientType,this._r<1&&(this._r=V(this._r)),this._g<1&&(this._g=V(this._g)),this._b<1&&(this._b=V(this._b)),this._ok=r.ok,this._tc_id=U++}function i(t){var e={r:0,g:0,b:0},r=1,n=null,i=null,o=null,l=!1,c=!1;return"string"==typeof t&&(t=F(t)),"object"==typeof t&&(R(t.r)&&R(t.g)&&R(t.b)?(e=a(t.r,t.g,t.b),l=!0,c="%"===String(t.r).substr(-1)?"prgb":"rgb"):R(t.h)&&R(t.s)&&R(t.v)?(n=D(t.s),i=D(t.v),e=u(t.h,n,i),l=!0,c="hsv"):R(t.h)&&R(t.s)&&R(t.l)&&(n=D(t.s),o=D(t.l),e=s(t.h,n,o),l=!0,c="hsl"),t.hasOwnProperty("a")&&(r=t.a)),r=T(r),{ok:l,format:t.format||c,r:H(255,q(e.r,0)),g:H(255,q(e.g,0)),b:H(255,q(e.b,0)),a:r}}function a(t,e,r){return{r:255*S(t,255),g:255*S(e,255),b:255*S(r,255)}}function o(t,e,r){t=S(t,255),e=S(e,255),r=S(r,255);var n,i,a=q(t,e,r),o=H(t,e,r),s=(a+o)/2;if(a==o)n=i=0;else{var l=a-o;switch(i=s>.5?l/(2-a-o):l/(a+o),a){case t:n=(e-r)/l+(e<r?6:0);break;case e:n=(r-t)/l+2;break;case r:n=(t-e)/l+4}n/=6}return{h:n,s:i,l:s}}function s(t,e,r){function n(t,e,r){return r<0&&(r+=1),r>1&&(r-=1),r<1/6?t+6*(e-t)*r:r<.5?e:r<2/3?t+(e-t)*(2/3-r)*6:t}var i,a,o;if(t=S(t,360),e=S(e,100),r=S(r,100),0===e)i=a=o=r;else{var s=r<.5?r*(1+e):r+e-r*e,l=2*r-s;i=n(l,s,t+1/3),a=n(l,s,t),o=n(l,s,t-1/3)}return{r:255*i,g:255*a,b:255*o}}function l(t,e,r){t=S(t,255),e=S(e,255),r=S(r,255);var n,i,a=q(t,e,r),o=H(t,e,r),s=a,l=a-o;if(i=0===a?0:l/a,a==o)n=0;else{switch(a){case t:n=(e-r)/l+(e<r?6:0);break;case e:n=(r-t)/l+2;break;case r:n=(t-e)/l+4}n/=6}return{h:n,s:i,v:s}}function u(t,r,n){t=6*S(t,360),r=S(r,100),n=S(n,100);var i=e.floor(t),a=t-i,o=n*(1-r),s=n*(1-a*r),l=n*(1-(1-a)*r),u=i%6;return{r:255*[n,s,o,o,l,n][u],g:255*[l,n,n,s,o,o][u],b:255*[o,o,l,n,n,s][u]}}function c(t,e,r,n){var i=[z(V(t).toString(16)),z(V(e).toString(16)),z(V(r).toString(16))];return n&&i[0].charAt(0)==i[0].charAt(1)&&i[1].charAt(0)==i[1].charAt(1)&&i[2].charAt(0)==i[2].charAt(1)?i[0].charAt(0)+i[1].charAt(0)+i[2].charAt(0):i.join("")}function h(t,e,r,n,i){var a=[z(V(t).toString(16)),z(V(e).toString(16)),z(V(r).toString(16)),z(P(n))];return i&&a[0].charAt(0)==a[0].charAt(1)&&a[1].charAt(0)==a[1].charAt(1)&&a[2].charAt(0)==a[2].charAt(1)&&a[3].charAt(0)==a[3].charAt(1)?a[0].charAt(0)+a[1].charAt(0)+a[2].charAt(0)+a[3].charAt(0):a.join("")}function f(t,e,r,n){return[z(P(n)),z(V(t).toString(16)),z(V(e).toString(16)),z(V(r).toString(16))].join("")}function d(t,e){e=0===e?0:e||10;var r=n(t).toHsl();return r.s-=e/100,r.s=E(r.s),n(r)}function p(t,e){e=0===e?0:e||10;var r=n(t).toHsl();return r.s+=e/100,r.s=E(r.s),n(r)}function m(t){return n(t).desaturate(100)}function g(t,e){e=0===e?0:e||10;var r=n(t).toHsl();return r.l+=e/100,r.l=E(r.l),n(r)}function v(t,e){e=0===e?0:e||10;var r=n(t).toRgb();return r.r=q(0,H(255,r.r-V(-e/100*255))),r.g=q(0,H(255,r.g-V(-e/100*255))),r.b=q(0,H(255,r.b-V(-e/100*255))),n(r)}function y(t,e){e=0===e?0:e||10;var r=n(t).toHsl();return r.l-=e/100,r.l=E(r.l),n(r)}function b(t,e){var r=n(t).toHsl(),i=(r.h+e)%360;return r.h=i<0?360+i:i,n(r)}function x(t){var e=n(t).toHsl();return e.h=(e.h+180)%360,n(e)}function _(t){var e=n(t).toHsl(),r=e.h;return[n(t),n({h:(r+120)%360,s:e.s,l:e.l}),n({h:(r+240)%360,s:e.s,l:e.l})]}function w(t){var e=n(t).toHsl(),r=e.h;return[n(t),n({h:(r+90)%360,s:e.s,l:e.l}),n({h:(r+180)%360,s:e.s,l:e.l}),n({h:(r+270)%360,s:e.s,l:e.l})]}function M(t){var e=n(t).toHsl(),r=e.h;return[n(t),n({h:(r+72)%360,s:e.s,l:e.l}),n({h:(r+216)%360,s:e.s,l:e.l})]}function k(t,e,r){e=e||6,r=r||30;var i=n(t).toHsl(),a=360/r,o=[n(t)];for(i.h=(i.h-(a*e>>1)+720)%360;--e;)i.h=(i.h+a)%360,o.push(n(i));return o}function A(t,e){e=e||6;for(var r=n(t).toHsv(),i=r.h,a=r.s,o=r.v,s=[],l=1/e;e--;)s.push(n({h:i,s:a,v:o})),o=(o+l)%1;return s}function T(t){return t=parseFloat(t),(isNaN(t)||t<0||t>1)&&(t=1),t}function S(t,r){C(t)&&(t="100%");var n=I(t);return t=H(r,q(0,parseFloat(t))),n&&(t=parseInt(t*r,10)/100),e.abs(t-r)<1e-6?1:t%r/parseFloat(r)}function E(t){return H(1,q(0,t))}function L(t){return parseInt(t,16)}function C(t){return"string"==typeof t&&-1!=t.indexOf(".")&&1===parseFloat(t)}function I(t){return"string"==typeof t&&-1!=t.indexOf("%")}function z(t){return 1==t.length?"0"+t:""+t}function D(t){return t<=1&&(t=100*t+"%"),t}function P(t){return e.round(255*parseFloat(t)).toString(16)}function O(t){return L(t)/255}function R(t){return!!X.CSS_UNIT.exec(t)}function F(t){t=t.replace(N,"").replace(B,"").toLowerCase();var e=!1;if(Y[t])t=Y[t],e=!0;else if("transparent"==t)return{r:0,g:0,b:0,a:0,format:"name"};var r;return(r=X.rgb.exec(t))?{r:r[1],g:r[2],b:r[3]}:(r=X.rgba.exec(t))?{r:r[1],g:r[2],b:r[3],a:r[4]}:(r=X.hsl.exec(t))?{h:r[1],s:r[2],l:r[3]}:(r=X.hsla.exec(t))?{h:r[1],s:r[2],l:r[3],a:r[4]}:(r=X.hsv.exec(t))?{h:r[1],s:r[2],v:r[3]}:(r=X.hsva.exec(t))?{h:r[1],s:r[2],v:r[3],a:r[4]}:(r=X.hex8.exec(t))?{r:L(r[1]),g:L(r[2]),b:L(r[3]),a:O(r[4]),format:e?"name":"hex8"}:(r=X.hex6.exec(t))?{r:L(r[1]),g:L(r[2]),b:L(r[3]),format:e?"name":"hex"}:(r=X.hex4.exec(t))?{r:L(r[1]+""+r[1]),g:L(r[2]+""+r[2]),b:L(r[3]+""+r[3]),a:O(r[4]+""+r[4]),format:e?"name":"hex8"}:!!(r=X.hex3.exec(t))&&{r:L(r[1]+""+r[1]),g:L(r[2]+""+r[2]),b:L(r[3]+""+r[3]),format:e?"name":"hex"}}function j(t){var e,r;return t=t||{level:"AA",size:"small"},e=(t.level||"AA").toUpperCase(),r=(t.size||"small").toLowerCase(),"AA"!==e&&"AAA"!==e&&(e="AA"),"small"!==r&&"large"!==r&&(r="small"),{level:e,size:r}}var N=/^\s+/,B=/\s+$/,U=0,V=e.round,H=e.min,q=e.max,G=e.random;n.prototype={isDark:function(){return this.getBrightness()<128},isLight:function(){return!this.isDark()},isValid:function(){return this._ok},getOriginalInput:function(){return this._originalInput},getFormat:function(){return this._format},getAlpha:function(){return this._a},getBrightness:function(){var t=this.toRgb();return(299*t.r+587*t.g+114*t.b)/1e3},getLuminance:function(){var t,r,n,i,a,o,s=this.toRgb();return t=s.r/255,r=s.g/255,n=s.b/255,i=t<=.03928?t/12.92:e.pow((t+.055)/1.055,2.4),a=r<=.03928?r/12.92:e.pow((r+.055)/1.055,2.4),o=n<=.03928?n/12.92:e.pow((n+.055)/1.055,2.4),.2126*i+.7152*a+.0722*o},setAlpha:function(t){return this._a=T(t),this._roundA=V(100*this._a)/100,this},toHsv:function(){var t=l(this._r,this._g,this._b);return{h:360*t.h,s:t.s,v:t.v,a:this._a}},toHsvString:function(){var t=l(this._r,this._g,this._b),e=V(360*t.h),r=V(100*t.s),n=V(100*t.v);return 1==this._a?"hsv("+e+", "+r+"%, "+n+"%)":"hsva("+e+", "+r+"%, "+n+"%, "+this._roundA+")"},toHsl:function(){var t=o(this._r,this._g,this._b);return{h:360*t.h,s:t.s,l:t.l,a:this._a}},toHslString:function(){var t=o(this._r,this._g,this._b),e=V(360*t.h),r=V(100*t.s),n=V(100*t.l);return 1==this._a?"hsl("+e+", "+r+"%, "+n+"%)":"hsla("+e+", "+r+"%, "+n+"%, "+this._roundA+")"},toHex:function(t){return c(this._r,this._g,this._b,t)},toHexString:function(t){return"#"+this.toHex(t)},toHex8:function(t){return h(this._r,this._g,this._b,this._a,t)},toHex8String:function(t){return"#"+this.toHex8(t)},toRgb:function(){return{r:V(this._r),g:V(this._g),b:V(this._b),a:this._a}},toRgbString:function(){return 1==this._a?"rgb("+V(this._r)+", "+V(this._g)+", "+V(this._b)+")":"rgba("+V(this._r)+", "+V(this._g)+", "+V(this._b)+", "+this._roundA+")"},toPercentageRgb:function(){return{r:V(100*S(this._r,255))+"%",g:V(100*S(this._g,255))+"%",b:V(100*S(this._b,255))+"%",a:this._a}},toPercentageRgbString:function(){return 1==this._a?"rgb("+V(100*S(this._r,255))+"%, "+V(100*S(this._g,255))+"%, "+V(100*S(this._b,255))+"%)":"rgba("+V(100*S(this._r,255))+"%, "+V(100*S(this._g,255))+"%, "+V(100*S(this._b,255))+"%, "+this._roundA+")"},toName:function(){return 0===this._a?"transparent":!(this._a<1)&&(W[c(this._r,this._g,this._b,!0)]||!1)},toFilter:function(t){var e="#"+f(this._r,this._g,this._b,this._a),r=e,i=this._gradientType?"GradientType = 1, ":"";if(t){var a=n(t);r="#"+f(a._r,a._g,a._b,a._a)}return"progid:DXImageTransform.Microsoft.gradient("+i+"startColorstr="+e+",endColorstr="+r+")"},toString:function(t){var e=!!t;t=t||this._format;var r=!1,n=this._a<1&&this._a>=0;return e||!n||"hex"!==t&&"hex6"!==t&&"hex3"!==t&&"hex4"!==t&&"hex8"!==t&&"name"!==t?("rgb"===t&&(r=this.toRgbString()),"prgb"===t&&(r=this.toPercentageRgbString()),"hex"!==t&&"hex6"!==t||(r=this.toHexString()),"hex3"===t&&(r=this.toHexString(!0)),"hex4"===t&&(r=this.toHex8String(!0)),"hex8"===t&&(r=this.toHex8String()),"name"===t&&(r=this.toName()),"hsl"===t&&(r=this.toHslString()),"hsv"===t&&(r=this.toHsvString()),r||this.toHexString()):"name"===t&&0===this._a?this.toName():this.toRgbString()},clone:function(){return n(this.toString())},_applyModification:function(t,e){var r=t.apply(null,[this].concat([].slice.call(e)));return this._r=r._r,this._g=r._g,this._b=r._b,this.setAlpha(r._a),this},lighten:function(){return this._applyModification(g,arguments)},brighten:function(){return this._applyModification(v,arguments)},darken:function(){return this._applyModification(y,arguments)},desaturate:function(){return this._applyModification(d,arguments)},saturate:function(){return this._applyModification(p,arguments)},greyscale:function(){return this._applyModification(m,arguments)},spin:function(){return this._applyModification(b,arguments)},_applyCombination:function(t,e){return t.apply(null,[this].concat([].slice.call(e)))},analogous:function(){return this._applyCombination(k,arguments)},complement:function(){return this._applyCombination(x,arguments)},monochromatic:function(){return this._applyCombination(A,arguments)},splitcomplement:function(){return this._applyCombination(M,arguments)},triad:function(){return this._applyCombination(_,arguments)},tetrad:function(){return this._applyCombination(w,arguments)}},n.fromRatio=function(t,e){if("object"==typeof t){var r={};for(var i in t)t.hasOwnProperty(i)&&(r[i]="a"===i?t[i]:D(t[i]));t=r}return n(t,e)},n.equals=function(t,e){return!(!t||!e)&&n(t).toRgbString()==n(e).toRgbString()},n.random=function(){return n.fromRatio({r:G(),g:G(),b:G()})},n.mix=function(t,e,r){r=0===r?0:r||50;var i=n(t).toRgb(),a=n(e).toRgb(),o=r/100;return n({r:(a.r-i.r)*o+i.r,g:(a.g-i.g)*o+i.g,b:(a.b-i.b)*o+i.b,a:(a.a-i.a)*o+i.a})},n.readability=function(t,r){var i=n(t),a=n(r);return(e.max(i.getLuminance(),a.getLuminance())+.05)/(e.min(i.getLuminance(),a.getLuminance())+.05)},n.isReadable=function(t,e,r){var i,a,o=n.readability(t,e);switch(a=!1,i=j(r),i.level+i.size){case"AAsmall":case"AAAlarge":a=o>=4.5;break;case"AAlarge":a=o>=3;break;case"AAAsmall":a=o>=7}return a},n.mostReadable=function(t,e,r){var i,a,o,s,l=null,u=0;r=r||{},a=r.includeFallbackColors,o=r.level,s=r.size;for(var c=0;c<e.length;c++)(i=n.readability(t,e[c]))>u&&(u=i,l=n(e[c]));return n.isReadable(t,l,{level:o,size:s})||!a?l:(r.includeFallbackColors=!1,n.mostReadable(t,["#fff","#000"],r))};var Y=n.names={aliceblue:"f0f8ff",antiquewhite:"faebd7",aqua:"0ff",aquamarine:"7fffd4",azure:"f0ffff",beige:"f5f5dc",bisque:"ffe4c4",black:"000",blanchedalmond:"ffebcd",blue:"00f",blueviolet:"8a2be2",brown:"a52a2a",burlywood:"deb887",burntsienna:"ea7e5d",cadetblue:"5f9ea0",chartreuse:"7fff00",chocolate:"d2691e",coral:"ff7f50",cornflowerblue:"6495ed",cornsilk:"fff8dc",crimson:"dc143c",cyan:"0ff",darkblue:"00008b",darkcyan:"008b8b",darkgoldenrod:"b8860b",darkgray:"a9a9a9",darkgreen:"006400",darkgrey:"a9a9a9",darkkhaki:"bdb76b",darkmagenta:"8b008b",darkolivegreen:"556b2f",darkorange:"ff8c00",darkorchid:"9932cc",darkred:"8b0000",darksalmon:"e9967a",darkseagreen:"8fbc8f",darkslateblue:"483d8b",darkslategray:"2f4f4f",darkslategrey:"2f4f4f",darkturquoise:"00ced1",darkviolet:"9400d3",deeppink:"ff1493",deepskyblue:"00bfff",dimgray:"696969",dimgrey:"696969",dodgerblue:"1e90ff",firebrick:"b22222",floralwhite:"fffaf0",forestgreen:"228b22",fuchsia:"f0f",gainsboro:"dcdcdc",ghostwhite:"f8f8ff",gold:"ffd700",goldenrod:"daa520",gray:"808080",green:"008000",greenyellow:"adff2f",grey:"808080",honeydew:"f0fff0",hotpink:"ff69b4",indianred:"cd5c5c",indigo:"4b0082",ivory:"fffff0",khaki:"f0e68c",lavender:"e6e6fa",lavenderblush:"fff0f5",lawngreen:"7cfc00",lemonchiffon:"fffacd",lightblue:"add8e6",lightcoral:"f08080",lightcyan:"e0ffff",lightgoldenrodyellow:"fafad2",lightgray:"d3d3d3",lightgreen:"90ee90",lightgrey:"d3d3d3",lightpink:"ffb6c1",lightsalmon:"ffa07a",lightseagreen:"20b2aa",lightskyblue:"87cefa",lightslategray:"789",lightslategrey:"789",lightsteelblue:"b0c4de",lightyellow:"ffffe0",lime:"0f0",limegreen:"32cd32",linen:"faf0e6",magenta:"f0f",maroon:"800000",mediumaquamarine:"66cdaa",mediumblue:"0000cd",mediumorchid:"ba55d3",mediumpurple:"9370db",mediumseagreen:"3cb371",mediumslateblue:"7b68ee",mediumspringgreen:"00fa9a",mediumturquoise:"48d1cc",mediumvioletred:"c71585",midnightblue:"191970",mintcream:"f5fffa",mistyrose:"ffe4e1",moccasin:"ffe4b5",navajowhite:"ffdead",navy:"000080",oldlace:"fdf5e6",olive:"808000",olivedrab:"6b8e23",orange:"ffa500",orangered:"ff4500",orchid:"da70d6",palegoldenrod:"eee8aa",palegreen:"98fb98",paleturquoise:"afeeee",palevioletred:"db7093",papayawhip:"ffefd5",peachpuff:"ffdab9",peru:"cd853f",pink:"ffc0cb",plum:"dda0dd",powderblue:"b0e0e6",purple:"800080",rebeccapurple:"663399",red:"f00",rosybrown:"bc8f8f",royalblue:"4169e1",saddlebrown:"8b4513",salmon:"fa8072",sandybrown:"f4a460",seagreen:"2e8b57",seashell:"fff5ee",sienna:"a0522d",silver:"c0c0c0",skyblue:"87ceeb",slateblue:"6a5acd",slategray:"708090",slategrey:"708090",snow:"fffafa",springgreen:"00ff7f",steelblue:"4682b4",tan:"d2b48c",teal:"008080",thistle:"d8bfd8",tomato:"ff6347",turquoise:"40e0d0",violet:"ee82ee",wheat:"f5deb3",white:"fff",whitesmoke:"f5f5f5",yellow:"ff0",yellowgreen:"9acd32"},W=n.hexNames=function(t){var e={};for(var r in t)t.hasOwnProperty(r)&&(e[t[r]]=r);return e}(Y),X=function(){var t="(?:[-\\+]?\\d*\\.\\d+%?)|(?:[-\\+]?\\d+%?)",e="[\\s|\\(]+("+t+")[,|\\s]+("+t+")[,|\\s]+("+t+")\\s*\\)?",r="[\\s|\\(]+("+t+")[,|\\s]+("+t+")[,|\\s]+("+t+")[,|\\s]+("+t+")\\s*\\)?";return{CSS_UNIT:new RegExp(t),rgb:new RegExp("rgb"+e),rgba:new RegExp("rgba"+r),hsl:new RegExp("hsl"+e),hsla:new RegExp("hsla"+r),hsv:new RegExp("hsv"+e),hsva:new RegExp("hsva"+r),hex3:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex6:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/,hex4:/^#?([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})([0-9a-fA-F]{1})$/,hex8:/^#?([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})([0-9a-fA-F]{2})$/}}();void 0!==r&&r.exports?r.exports=n:"function"==typeof t&&t.amd?t(function(){return n}):window.tinycolor=n}(Math)},{}],535:[function(t,e,r){"use strict";function n(t,e){var r=o(getComputedStyle(t).getPropertyValue(e));return r[0]*a(r[1],t)}function i(t,e){var r=document.createElement("div");r.style["font-size"]="128"+t,e.appendChild(r);var i=n(r,"font-size")/128;return e.removeChild(r),i}function a(t,e){switch(e=e||document.body,t=(t||"px").trim().toLowerCase(),e!==window&&e!==document||(e=document.body),t){case"%":return e.clientHeight/100;case"ch":case"ex":return i(t,e);case"em":return n(e,"font-size");case"rem":return n(document.body,"font-size");case"vw":return window.innerWidth/100;case"vh":return window.innerHeight/100;case"vmin":return Math.min(window.innerWidth,window.innerHeight)/100;case"vmax":return Math.max(window.innerWidth,window.innerHeight)/100;case"in":return s;case"cm":return s/2.54;case"mm":return s/25.4;case"pt":return s/72;case"pc":return s/6}return 1}var o=t("parse-unit");e.exports=a;var s=96},{"parse-unit":475}],536:[function(e,r,n){!function(e,i){"object"==typeof n&&void 0!==r?i(n):"function"==typeof t&&t.amd?t(["exports"],i):i(e.topojson=e.topojson||{})}(this,function(t){"use strict";function e(t,e){var n=e.id,i=e.bbox,a=null==e.properties?{}:e.properties,o=r(t,e);return null==n&&null==i?{type:"Feature",properties:a,geometry:o}:null==i?{type:"Feature",id:n,properties:a,geometry:o}:{type:"Feature",id:n,bbox:i,properties:a,geometry:o}}function r(t,e){function r(t,e){e.length&&e.pop();for(var r=h[t<0?~t:t],n=0,i=r.length;n<i;++n)e.push(u(r[n].slice(),n));t<0&&c(e,i)}function n(t){return u(t.slice())}function i(t){for(var e=[],n=0,i=t.length;n<i;++n)r(t[n],e);return e.length<2&&e.push(e[0].slice()),e}function a(t){for(var e=i(t);e.length<4;)e.push(e[0].slice());return e}function o(t){return t.map(a)}function s(t){var e,r=t.type;switch(r){case"GeometryCollection":return{type:r,geometries:t.geometries.map(s)};case"Point":e=n(t.coordinates);break;case"MultiPoint":e=t.coordinates.map(n);break;case"LineString":e=i(t.arcs);break;case"MultiLineString":e=t.arcs.map(i);break;case"Polygon":e=o(t.arcs);break;case"MultiPolygon":e=t.arcs.map(o);break;default:return null}return{type:r,coordinates:e}}var u=l(t),h=t.arcs;return s(e)}function n(t,e,r){var n,a,o;if(arguments.length>1)n=i(t,e,r);else for(a=0,n=new Array(o=t.arcs.length);a<o;++a)n[a]=a;return{type:"MultiLineString",arcs:f(t,n)}}function i(t,e,r){function n(t){var e=t<0?~t:t;(c[e]||(c[e]=[])).push({i:t,g:l})}function i(t){t.forEach(n)}function a(t){t.forEach(i)}function o(t){t.forEach(a)}function s(t){switch(l=t,t.type){case"GeometryCollection":t.geometries.forEach(s);break;case"LineString":i(t.arcs);break;case"MultiLineString":case"Polygon":a(t.arcs);break;case"MultiPolygon":o(t.arcs)}}var l,u=[],c=[];return s(e),c.forEach(null==r?function(t){u.push(t[0].i)}:function(t){r(t[0].g,t[t.length-1].g)&&u.push(t[0].i)}),u}function a(t){for(var e,r=-1,n=t.length,i=t[n-1],a=0;++r<n;)e=i,i=t[r],a+=e[0]*i[1]-e[1]*i[0];return Math.abs(a)}function o(t,e){function n(t){switch(t.type){case"GeometryCollection":t.geometries.forEach(n);break;case"Polygon":i(t.arcs);break;case"MultiPolygon":t.arcs.forEach(i)}}function i(t){t.forEach(function(e){e.forEach(function(e){(s[e=e<0?~e:e]||(s[e]=[])).push(t)})}),l.push(t)}function o(e){return a(r(t,{type:"Polygon",arcs:[e]}).coordinates[0])}var s={},l=[],u=[];return e.forEach(n),l.forEach(function(t){if(!t._){var e=[],r=[t];for(t._=1,u.push(e);t=r.pop();)e.push(t),t.forEach(function(t){t.forEach(function(t){s[t<0?~t:t].forEach(function(t){t._||(t._=1,r.push(t))})})})}}),l.forEach(function(t){delete t._}),{type:"MultiPolygon",arcs:u.map(function(e){var r,n=[];if(e.forEach(function(t){t.forEach(function(t){t.forEach(function(t){s[t<0?~t:t].length<2&&n.push(t)})})}),n=f(t,n),(r=n.length)>1)for(var i,a,l=1,u=o(n[0]);l<r;++l)(i=o(n[l]))>u&&(a=n[0],n[0]=n[l],n[l]=a,u=i);return n})}}var s=function(t){return t},l=function(t){if(null==(e=t.transform))return s;var e,r,n,i=e.scale[0],a=e.scale[1],o=e.translate[0],l=e.translate[1];return function(t,e){return e||(r=n=0),t[0]=(r+=t[0])*i+o,t[1]=(n+=t[1])*a+l,t}},u=function(t){function e(t){s[0]=t[0],s[1]=t[1],o(s),s[0]<u&&(u=s[0]),s[0]>h&&(h=s[0]),s[1]<c&&(c=s[1]),s[1]>f&&(f=s[1])}function r(t){switch(t.type){case"GeometryCollection":t.geometries.forEach(r);break;case"Point":e(t.coordinates);break;case"MultiPoint":t.coordinates.forEach(e)}}var n=t.bbox;if(!n){var i,a,o=l(t),s=new Array(2),u=1/0,c=u,h=-u,f=-u;t.arcs.forEach(function(t){for(var e=-1,r=t.length;++e<r;)i=t[e],s[0]=i[0],s[1]=i[1],o(s,e),s[0]<u&&(u=s[0]),s[0]>h&&(h=s[0]),s[1]<c&&(c=s[1]),s[1]>f&&(f=s[1])});for(a in t.objects)r(t.objects[a]);n=t.bbox=[u,c,h,f]}return n},c=function(t,e){for(var r,n=t.length,i=n-e;i<--n;)r=t[i],t[i++]=t[n],t[n]=r},h=function(t,r){return"GeometryCollection"===r.type?{type:"FeatureCollection",features:r.geometries.map(function(r){return e(t,r)})}:e(t,r)},f=function(t,e){function r(e){var r,n=t.arcs[e<0?~e:e],i=n[0];return t.transform?(r=[0,0],n.forEach(function(t){r[0]+=t[0],r[1]+=t[1]})):r=n[n.length-1],e<0?[r,i]:[i,r]}function n(t,e){for(var r in t){var n=t[r];delete e[n.start],delete n.start,delete n.end,n.forEach(function(t){i[t<0?~t:t]=1}),s.push(n)}}var i={},a={},o={},s=[],l=-1;return e.forEach(function(r,n){var i,a=t.arcs[r<0?~r:r];a.length<3&&!a[1][0]&&!a[1][1]&&(i=e[++l],e[l]=r,e[n]=i)}),e.forEach(function(t){var e,n,i=r(t),s=i[0],l=i[1];if(e=o[s])if(delete o[e.end],e.push(t),e.end=l,n=a[l]){delete a[n.start];var u=n===e?e:e.concat(n);a[u.start=e.start]=o[u.end=n.end]=u}else a[e.start]=o[e.end]=e;else if(e=a[l])if(delete a[e.start],e.unshift(t),e.start=s,n=o[s]){delete o[n.end];var c=n===e?e:n.concat(e);a[c.start=n.start]=o[c.end=e.end]=c}else a[e.start]=o[e.end]=e;else e=[t],a[e.start=s]=o[e.end=l]=e}),n(o,a),n(a,o),e.forEach(function(t){i[t<0?~t:t]||s.push([t])}),s},d=function(t){return r(t,n.apply(this,arguments))},p=function(t){return r(t,o.apply(this,arguments))},m=function(t,e){for(var r=0,n=t.length;r<n;){var i=r+n>>>1;t[i]<e?r=i+1:n=i}return r},g=function(t){function e(t,e){t.forEach(function(t){t<0&&(t=~t);var r=i[t];r?r.push(e):i[t]=[e]})}function r(t,r){t.forEach(function(t){e(t,r)})}function n(t,e){"GeometryCollection"===t.type?t.geometries.forEach(function(t){n(t,e)}):t.type in o&&o[t.type](t.arcs,e)}var i={},a=t.map(function(){return[]}),o={LineString:e,MultiLineString:r,Polygon:r,MultiPolygon:function(t,e){t.forEach(function(t){r(t,e)})}};t.forEach(n);for(var s in i)for(var l=i[s],u=l.length,c=0;c<u;++c)for(var h=c+1;h<u;++h){var f,d=l[c],p=l[h];(f=a[d])[s=m(f,p)]!==p&&f.splice(s,0,p),(f=a[p])[s=m(f,d)]!==d&&f.splice(s,0,d)}return a},v=function(t,e){function r(t){t[0]=Math.round((t[0]-o)/s),t[1]=Math.round((t[1]-l)/c)}function n(t){switch(t.type){case"GeometryCollection":t.geometries.forEach(n);break;case"Point":r(t.coordinates);break;case"MultiPoint":t.coordinates.forEach(r)}}if(!((e=Math.floor(e))>=2))throw new Error("n must be \u22652");if(t.transform)throw new Error("already quantized");var i,a=u(t),o=a[0],s=(a[2]-o)/(e-1)||1,l=a[1],c=(a[3]-l)/(e-1)||1;t.arcs.forEach(function(t){for(var e,r,n,i=1,a=1,u=t.length,h=t[0],f=h[0]=Math.round((h[0]-o)/s),d=h[1]=Math.round((h[1]-l)/c);i<u;++i)h=t[i],r=Math.round((h[0]-o)/s),n=Math.round((h[1]-l)/c),r===f&&n===d||(e=t[a++],e[0]=r-f,f=r,e[1]=n-d,d=n);a<2&&(e=t[a++],e[0]=0,e[1]=0),t.length=a});for(i in t.objects)n(t.objects[i]);return t.transform={scale:[s,c],translate:[o,l]},t},y=function(t){if(null==(e=t.transform))return s;var e,r,n,i=e.scale[0],a=e.scale[1],o=e.translate[0],l=e.translate[1];return function(t,e){e||(r=n=0);var s=Math.round((t[0]-o)/i),u=Math.round((t[1]-l)/a);return t[0]=s-r,r=s,t[1]=u-n,n=u,t}};t.bbox=u,t.feature=h,t.mesh=d,t.meshArcs=n,t.merge=p,t.mergeArcs=o,t.neighbors=g,t.quantize=v,t.transform=l,t.untransform=y,Object.defineProperty(t,"__esModule",{value:!0})})},{}],537:[function(t,e,r){"use strict";function n(t){if(t<0)return[];if(0===t)return[[0]];for(var e=0|Math.round(o(t+1)),r=[],n=0;n<e;++n){for(var s=i.unrank(t,n),l=[0],u=0,c=0;c<s.length;++c)u+=1<<s[c],l.push(u);a(s)<1&&(l[0]=u,l[t]=0),r.push(l)}return r}e.exports=n;var i=t("permutation-rank"),a=t("permutation-parity"),o=t("gamma")},{gamma:136,"permutation-parity":479,"permutation-rank":480}],538:[function(t,e,r){"use strict";function n(t,e,r){return Math.sqrt(Math.pow(t,2)+Math.pow(e,2)+Math.pow(r,2))}function i(t){return Math.min(1,Math.max(-1,t))}function a(t){var e=Math.abs(t[0]),r=Math.abs(t[1]),n=Math.abs(t[2]),i=[0,0,0];e>Math.max(r,n)?i[2]=1:r>Math.max(e,n)?i[0]=1:i[1]=1;for(var a=0,o=0,s=0;s<3;++s)a+=t[s]*t[s],o+=i[s]*t[s];for(var s=0;s<3;++s)i[s]-=o/a*t[s];return f(i,i),i}function o(t,e,r,n,i,a,o,s){this.center=l(r),this.up=l(n),this.right=l(i),this.radius=l([a]),this.angle=l([o,s]),this.angle.bounds=[[-1/0,-Math.PI/2],[1/0,Math.PI/2]],this.setDistanceLimits(t,e),this.computedCenter=this.center.curve(0),this.computedUp=this.up.curve(0),this.computedRight=this.right.curve(0),this.computedRadius=this.radius.curve(0),this.computedAngle=this.angle.curve(0),this.computedToward=[0,0,0],this.computedEye=[0,0,0],this.computedMatrix=new Array(16);for(var u=0;u<16;++u)this.computedMatrix[u]=.5;this.recalcMatrix(0)}function s(t){t=t||{};var e=t.center||[0,0,0],r=t.up||[0,1,0],i=t.right||a(r),s=t.radius||1,l=t.theta||0,u=t.phi||0;if(e=[].slice.call(e,0,3),r=[].slice.call(r,0,3),f(r,r),i=[].slice.call(i,0,3),f(i,i),"eye"in t){var c=t.eye,p=[c[0]-e[0],c[1]-e[1],c[2]-e[2]];h(i,p,r),n(i[0],i[1],i[2])<1e-6?i=a(r):f(i,i),s=n(p[0],p[1],p[2]);var m=d(r,p)/s,g=d(i,p)/s;u=Math.acos(m),l=Math.acos(g)}return s=Math.log(s),new o(t.zoomMin,t.zoomMax,e,r,i,s,l,u)}e.exports=s;var l=t("filtered-vector"),u=t("gl-mat4/invert"),c=t("gl-mat4/rotate"),h=t("gl-vec3/cross"),f=t("gl-vec3/normalize"),d=t("gl-vec3/dot"),p=o.prototype;p.setDistanceLimits=function(t,e){t=t>0?Math.log(t):-1/0,e=e>0?Math.log(e):1/0,e=Math.max(e,t),this.radius.bounds[0][0]=t,this.radius.bounds[1][0]=e},p.getDistanceLimits=function(t){var e=this.radius.bounds[0];return t?(t[0]=Math.exp(e[0][0]),t[1]=Math.exp(e[1][0]),t):[Math.exp(e[0][0]),Math.exp(e[1][0])]},p.recalcMatrix=function(t){this.center.curve(t),this.up.curve(t),this.right.curve(t),this.radius.curve(t),this.angle.curve(t);for(var e=this.computedUp,r=this.computedRight,i=0,a=0,o=0;o<3;++o)a+=e[o]*r[o],i+=e[o]*e[o];for(var s=Math.sqrt(i),l=0,o=0;o<3;++o)r[o]-=e[o]*a/i,l+=r[o]*r[o],e[o]/=s;for(var u=Math.sqrt(l),o=0;o<3;++o)r[o]/=u;var c=this.computedToward;h(c,e,r),f(c,c);for(var d=Math.exp(this.computedRadius[0]),p=this.computedAngle[0],m=this.computedAngle[1],g=Math.cos(p),v=Math.sin(p),y=Math.cos(m),b=Math.sin(m),x=this.computedCenter,_=g*y,w=v*y,M=b,k=-g*b,A=-v*b,T=y,S=this.computedEye,E=this.computedMatrix,o=0;o<3;++o){var L=_*r[o]+w*c[o]+M*e[o];E[4*o+1]=k*r[o]+A*c[o]+T*e[o],E[4*o+2]=L,E[4*o+3]=0}var C=E[1],I=E[5],z=E[9],D=E[2],P=E[6],O=E[10],R=I*O-z*P,F=z*D-C*O,j=C*P-I*D,N=n(R,F,j);R/=N,F/=N,j/=N,E[0]=R,E[4]=F,E[8]=j;for(var o=0;o<3;++o)S[o]=x[o]+E[2+4*o]*d;for(var o=0;o<3;++o){for(var l=0,B=0;B<3;++B)l+=E[o+4*B]*S[B];E[12+o]=-l}E[15]=1},p.getMatrix=function(t,e){this.recalcMatrix(t);var r=this.computedMatrix;if(e){for(var n=0;n<16;++n)e[n]=r[n];return e}return r};var m=[0,0,0];p.rotate=function(t,e,r,n){if(this.angle.move(t,e,r),n){this.recalcMatrix(t);var i=this.computedMatrix;m[0]=i[2],m[1]=i[6],m[2]=i[10];for(var a=this.computedUp,o=this.computedRight,s=this.computedToward,l=0;l<3;++l)i[4*l]=a[l],i[4*l+1]=o[l],i[4*l+2]=s[l];c(i,i,n,m);for(var l=0;l<3;++l)a[l]=i[4*l],o[l]=i[4*l+1];this.up.set(t,a[0],a[1],a[2]),this.right.set(t,o[0],o[1],o[2])}},p.pan=function(t,e,r,i){e=e||0,r=r||0,i=i||0,this.recalcMatrix(t);var a=this.computedMatrix,o=(Math.exp(this.computedRadius[0]),a[1]),s=a[5],l=a[9],u=n(o,s,l);o/=u,s/=u,l/=u;var c=a[0],h=a[4],f=a[8],d=c*o+h*s+f*l;c-=o*d,h-=s*d,f-=l*d;var p=n(c,h,f);c/=p,h/=p,f/=p;var m=c*e+o*r,g=h*e+s*r,v=f*e+l*r;this.center.move(t,m,g,v);var y=Math.exp(this.computedRadius[0]);y=Math.max(1e-4,y+i),this.radius.set(t,Math.log(y))},p.translate=function(t,e,r,n){this.center.move(t,e||0,r||0,n||0)},p.setMatrix=function(t,e,r,a){var o=1;"number"==typeof r&&(o=0|r),(o<0||o>3)&&(o=1);var s=(o+2)%3;e||(this.recalcMatrix(t),e=this.computedMatrix);var l=e[o],c=e[o+4],h=e[o+8];if(a){var f=Math.abs(l),d=Math.abs(c),p=Math.abs(h),m=Math.max(f,d,p);f===m?(l=l<0?-1:1,c=h=0):p===m?(h=h<0?-1:1,l=c=0):(c=c<0?-1:1,l=h=0)}else{var g=n(l,c,h);l/=g,c/=g,h/=g}var v=e[s],y=e[s+4],b=e[s+8],x=v*l+y*c+b*h;v-=l*x,y-=c*x,b-=h*x;var _=n(v,y,b);v/=_,y/=_,b/=_;var w=c*b-h*y,M=h*v-l*b,k=l*y-c*v,A=n(w,M,k);w/=A,M/=A,k/=A,this.center.jump(t,q,G,Y),this.radius.idle(t),this.up.jump(t,l,c,h),this.right.jump(t,v,y,b);var T,S;if(2===o){var E=e[1],L=e[5],C=e[9],I=E*v+L*y+C*b,z=E*w+L*M+C*k;T=R<0?-Math.PI/2:Math.PI/2,S=Math.atan2(z,I)}else{var D=e[2],P=e[6],O=e[10],R=D*l+P*c+O*h,F=D*v+P*y+O*b,j=D*w+P*M+O*k;T=Math.asin(i(R)),S=Math.atan2(j,F)}this.angle.jump(t,S,T),this.recalcMatrix(t);var N=e[2],B=e[6],U=e[10],V=this.computedMatrix;u(V,e);var H=V[15],q=V[12]/H,G=V[13]/H,Y=V[14]/H,W=Math.exp(this.computedRadius[0]);this.center.jump(t,q-N*W,G-B*W,Y-U*W)},p.lastT=function(){return Math.max(this.center.lastT(),this.up.lastT(),this.right.lastT(),this.radius.lastT(),this.angle.lastT())},p.idle=function(t){this.center.idle(t),this.up.idle(t),this.right.idle(t),this.radius.idle(t),this.angle.idle(t)},p.flush=function(t){this.center.flush(t),this.up.flush(t),this.right.flush(t),this.radius.flush(t),this.angle.flush(t)},p.setDistance=function(t,e){e>0&&this.radius.set(t,Math.log(e))},p.lookAt=function(t,e,r,a){this.recalcMatrix(t),e=e||this.computedEye,r=r||this.computedCenter,a=a||this.computedUp;var o=a[0],s=a[1],l=a[2],u=n(o,s,l);if(!(u<1e-6)){o/=u,s/=u,l/=u;var c=e[0]-r[0],h=e[1]-r[1],f=e[2]-r[2],d=n(c,h,f);if(!(d<1e-6)){c/=d,h/=d,f/=d;var p=this.computedRight,m=p[0],g=p[1],v=p[2],y=o*m+s*g+l*v;m-=y*o,g-=y*s,v-=y*l;var b=n(m,g,v);if(!(b<.01&&(m=s*f-l*h,g=l*c-o*f,v=o*h-s*c,(b=n(m,g,v))<1e-6))){m/=b,g/=b,v/=b,this.up.set(t,o,s,l),this.right.set(t,m,g,v),this.center.set(t,r[0],r[1],r[2]),this.radius.set(t,Math.log(d));var x=s*v-l*g,_=l*m-o*v,w=o*g-s*m,M=n(x,_,w);x/=M,_/=M,w/=M;var k=o*c+s*h+l*f,A=m*c+g*h+v*f,T=x*c+_*h+w*f,S=Math.asin(i(k)),E=Math.atan2(T,A),L=this.angle._state,C=L[L.length-1],I=L[L.length-2];C%=2*Math.PI;var z=Math.abs(C+2*Math.PI-E),D=Math.abs(C-E),P=Math.abs(C-2*Math.PI-E);z<D&&(C+=2*Math.PI),P<D&&(C-=2*Math.PI),this.angle.jump(this.angle.lastT(),C,I),this.angle.set(t,E,S)}}}}},{"filtered-vector":133,"gl-mat4/invert":181,"gl-mat4/rotate":185,"gl-vec3/cross":272,"gl-vec3/dot":273,"gl-vec3/normalize":276}],539:[function(t,e,r){"use strict";function n(t,e,r){var n=t*e,a=i*t,o=a-t,s=a-o,l=t-s,u=i*e,c=u-e,h=u-c,f=e-h,d=n-s*h,p=d-l*h,m=p-s*f,g=l*f-m;return r?(r[0]=g,r[1]=n,r):[g,n]}e.exports=n;var i=+(Math.pow(2,27)+1)},{}],540:[function(t,e,r){"use strict";function n(t,e,r){var n=t+e,i=n-t,a=n-i,o=e-i,s=t-a;return r?(r[0]=s+o,r[1]=n,r):[s+o,n]}e.exports=n},{}],541:[function(t,e,r){(function(e,n){"use strict";function i(t){if(t){var e=t.length||t.byteLength,r=y.log2(e);w[r].push(t)}}function a(t){i(t.buffer)}function o(t){var t=y.nextPow2(t),e=y.log2(t),r=w[e];return r.length>0?r.pop():new ArrayBuffer(t)}function s(t){return new Uint8Array(o(t),0,t)}function l(t){return new Uint16Array(o(2*t),0,t)}function u(t){return new Uint32Array(o(4*t),0,t)}function c(t){return new Int8Array(o(t),0,t)}function h(t){return new Int16Array(o(2*t),0,t)}function f(t){return new Int32Array(o(4*t),0,t)}function d(t){return new Float32Array(o(4*t),0,t)}function p(t){return new Float64Array(o(8*t),0,t)}function m(t){return x?new Uint8ClampedArray(o(t),0,t):s(t)}function g(t){return new DataView(o(t),0,t)}function v(t){t=y.nextPow2(t);var e=y.log2(t),r=M[e];return r.length>0?r.pop():new n(t)}var y=t("bit-twiddle"),b=t("dup");e.__TYPEDARRAY_POOL||(e.__TYPEDARRAY_POOL={UINT8:b([32,0]),UINT16:b([32,0]),UINT32:b([32,0]),INT8:b([32,0]),INT16:b([32,0]),INT32:b([32,0]),FLOAT:b([32,0]),DOUBLE:b([32,0]),DATA:b([32,0]),UINT8C:b([32,0]),BUFFER:b([32,0])});var x="undefined"!=typeof Uint8ClampedArray,_=e.__TYPEDARRAY_POOL;_.UINT8C||(_.UINT8C=b([32,0])),_.BUFFER||(_.BUFFER=b([32,0]));var w=_.DATA,M=_.BUFFER;r.free=function(t){if(n.isBuffer(t))M[y.log2(t.length)].push(t);else{if("[object ArrayBuffer]"!==Object.prototype.toString.call(t)&&(t=t.buffer),!t)return;var e=t.length||t.byteLength,r=0|y.log2(e);w[r].push(t)}},r.freeUint8=r.freeUint16=r.freeUint32=r.freeInt8=r.freeInt16=r.freeInt32=r.freeFloat32=r.freeFloat=r.freeFloat64=r.freeDouble=r.freeUint8Clamped=r.freeDataView=a,r.freeArrayBuffer=i,r.freeBuffer=function(t){M[y.log2(t.length)].push(t)},r.malloc=function(t,e){
if(void 0===e||"arraybuffer"===e)return o(t);switch(e){case"uint8":return s(t);case"uint16":return l(t);case"uint32":return u(t);case"int8":return c(t);case"int16":return h(t);case"int32":return f(t);case"float":case"float32":return d(t);case"double":case"float64":return p(t);case"uint8_clamped":return m(t);case"buffer":return v(t);case"data":case"dataview":return g(t);default:return null}return null},r.mallocArrayBuffer=o,r.mallocUint8=s,r.mallocUint16=l,r.mallocUint32=u,r.mallocInt8=c,r.mallocInt16=h,r.mallocInt32=f,r.mallocFloat32=r.mallocFloat=d,r.mallocFloat64=r.mallocDouble=p,r.mallocUint8Clamped=m,r.mallocDataView=g,r.mallocBuffer=v,r.clearCache=function(){for(var t=0;t<32;++t)_.UINT8[t].length=0,_.UINT16[t].length=0,_.UINT32[t].length=0,_.INT8[t].length=0,_.INT16[t].length=0,_.INT32[t].length=0,_.FLOAT[t].length=0,_.DOUBLE[t].length=0,_.UINT8C[t].length=0,w[t].length=0,M[t].length=0}}).call(this,"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{},t("buffer").Buffer)},{"bit-twiddle":67,buffer:77,dup:125}],542:[function(t,e,r){"use strict";"use restrict";function n(t){this.roots=new Array(t),this.ranks=new Array(t);for(var e=0;e<t;++e)this.roots[e]=e,this.ranks[e]=0}e.exports=n;var i=n.prototype;Object.defineProperty(i,"length",{get:function(){return this.roots.length}}),i.makeSet=function(){var t=this.roots.length;return this.roots.push(t),this.ranks.push(0),t},i.find=function(t){for(var e=t,r=this.roots;r[t]!==t;)t=r[t];for(;r[e]!==t;){var n=r[e];r[e]=t,e=n}return t},i.link=function(t,e){var r=this.find(t),n=this.find(e);if(r!==n){var i=this.ranks,a=this.roots,o=i[r],s=i[n];o<s?a[r]=n:s<o?a[n]=r:(a[n]=r,++i[r])}}},{}],543:[function(t,e,r){"use strict";function n(t,e){for(var r=1,n=t.length,i=t[0],a=t[0],o=1;o<n;++o)if(a=i,i=t[o],e(i,a)){if(o===r){r++;continue}t[r++]=i}return t.length=r,t}function i(t){for(var e=1,r=t.length,n=t[0],i=t[0],a=1;a<r;++a,i=n)if(i=n,(n=t[a])!==i){if(a===e){e++;continue}t[e++]=n}return t.length=e,t}function a(t,e,r){return 0===t.length?t:e?(r||t.sort(e),n(t,e)):(r||t.sort(),i(t))}e.exports=a},{}],544:[function(t,e,r){function n(t,e,r,n){this.cx=3*t,this.bx=3*(r-t)-this.cx,this.ax=1-this.cx-this.bx,this.cy=3*e,this.by=3*(n-e)-this.cy,this.ay=1-this.cy-this.by,this.p1x=t,this.p1y=n,this.p2x=r,this.p2y=n}e.exports=n,n.prototype.sampleCurveX=function(t){return((this.ax*t+this.bx)*t+this.cx)*t},n.prototype.sampleCurveY=function(t){return((this.ay*t+this.by)*t+this.cy)*t},n.prototype.sampleCurveDerivativeX=function(t){return(3*this.ax*t+2*this.bx)*t+this.cx},n.prototype.solveCurveX=function(t,e){void 0===e&&(e=1e-6);var r,n,i,a,o;for(i=t,o=0;o<8;o++){if(a=this.sampleCurveX(i)-t,Math.abs(a)<e)return i;var s=this.sampleCurveDerivativeX(i);if(Math.abs(s)<1e-6)break;i-=a/s}if(r=0,n=1,(i=t)<r)return r;if(i>n)return n;for(;r<n;){if(a=this.sampleCurveX(i),Math.abs(a-t)<e)return i;t>a?r=i:n=i,i=.5*(n-r)+r}return i},n.prototype.solve=function(t,e){return this.sampleCurveY(this.solveCurveX(t,e))}},{}],545:[function(t,e,r){"use strict";function n(){this.protocol=null,this.slashes=null,this.auth=null,this.host=null,this.port=null,this.hostname=null,this.hash=null,this.search=null,this.query=null,this.pathname=null,this.path=null,this.href=null}function i(t,e,r){if(t&&u.isObject(t)&&t instanceof n)return t;var i=new n;return i.parse(t,e,r),i}function a(t){return u.isString(t)&&(t=i(t)),t instanceof n?t.format():n.prototype.format.call(t)}function o(t,e){return i(t,!1,!0).resolve(e)}function s(t,e){return t?i(t,!1,!0).resolveObject(e):e}var l=t("punycode"),u=t("./util");r.parse=i,r.resolve=o,r.resolveObject=s,r.format=a,r.Url=n;var c=/^([a-z0-9.+-]+:)/i,h=/:[0-9]*$/,f=/^(\/\/?(?!\/)[^\?\s]*)(\?[^\s]*)?$/,d=["<",">",'"',"`"," ","\r","\n","\t"],p=["{","}","|","\\","^","`"].concat(d),m=["'"].concat(p),g=["%","/","?",";","#"].concat(m),v=["/","?","#"],y=/^[+a-z0-9A-Z_-]{0,63}$/,b=/^([+a-z0-9A-Z_-]{0,63})(.*)$/,x={javascript:!0,"javascript:":!0},_={javascript:!0,"javascript:":!0},w={http:!0,https:!0,ftp:!0,gopher:!0,file:!0,"http:":!0,"https:":!0,"ftp:":!0,"gopher:":!0,"file:":!0},M=t("querystring");n.prototype.parse=function(t,e,r){if(!u.isString(t))throw new TypeError("Parameter 'url' must be a string, not "+typeof t);var n=t.indexOf("?"),i=-1!==n&&n<t.indexOf("#")?"?":"#",a=t.split(i),o=/\\/g;a[0]=a[0].replace(o,"/"),t=a.join(i);var s=t;if(s=s.trim(),!r&&1===t.split("#").length){var h=f.exec(s);if(h)return this.path=s,this.href=s,this.pathname=h[1],h[2]?(this.search=h[2],this.query=e?M.parse(this.search.substr(1)):this.search.substr(1)):e&&(this.search="",this.query={}),this}var d=c.exec(s);if(d){d=d[0];var p=d.toLowerCase();this.protocol=p,s=s.substr(d.length)}if(r||d||s.match(/^\/\/[^@\/]+@[^@\/]+/)){var k="//"===s.substr(0,2);!k||d&&_[d]||(s=s.substr(2),this.slashes=!0)}if(!_[d]&&(k||d&&!w[d])){for(var A=-1,T=0;T<v.length;T++){var S=s.indexOf(v[T]);-1!==S&&(-1===A||S<A)&&(A=S)}var E,L;L=-1===A?s.lastIndexOf("@"):s.lastIndexOf("@",A),-1!==L&&(E=s.slice(0,L),s=s.slice(L+1),this.auth=decodeURIComponent(E)),A=-1;for(var T=0;T<g.length;T++){var S=s.indexOf(g[T]);-1!==S&&(-1===A||S<A)&&(A=S)}-1===A&&(A=s.length),this.host=s.slice(0,A),s=s.slice(A),this.parseHost(),this.hostname=this.hostname||"";var C="["===this.hostname[0]&&"]"===this.hostname[this.hostname.length-1];if(!C)for(var I=this.hostname.split(/\./),T=0,z=I.length;T<z;T++){var D=I[T];if(D&&!D.match(y)){for(var P="",O=0,R=D.length;O<R;O++)D.charCodeAt(O)>127?P+="x":P+=D[O];if(!P.match(y)){var F=I.slice(0,T),j=I.slice(T+1),N=D.match(b);N&&(F.push(N[1]),j.unshift(N[2])),j.length&&(s="/"+j.join(".")+s),this.hostname=F.join(".");break}}}this.hostname.length>255?this.hostname="":this.hostname=this.hostname.toLowerCase(),C||(this.hostname=l.toASCII(this.hostname));var B=this.port?":"+this.port:"",U=this.hostname||"";this.host=U+B,this.href+=this.host,C&&(this.hostname=this.hostname.substr(1,this.hostname.length-2),"/"!==s[0]&&(s="/"+s))}if(!x[p])for(var T=0,z=m.length;T<z;T++){var V=m[T];if(-1!==s.indexOf(V)){var H=encodeURIComponent(V);H===V&&(H=escape(V)),s=s.split(V).join(H)}}var q=s.indexOf("#");-1!==q&&(this.hash=s.substr(q),s=s.slice(0,q));var G=s.indexOf("?");if(-1!==G?(this.search=s.substr(G),this.query=s.substr(G+1),e&&(this.query=M.parse(this.query)),s=s.slice(0,G)):e&&(this.search="",this.query={}),s&&(this.pathname=s),w[p]&&this.hostname&&!this.pathname&&(this.pathname="/"),this.pathname||this.search){var B=this.pathname||"",Y=this.search||"";this.path=B+Y}return this.href=this.format(),this},n.prototype.format=function(){var t=this.auth||"";t&&(t=encodeURIComponent(t),t=t.replace(/%3A/i,":"),t+="@");var e=this.protocol||"",r=this.pathname||"",n=this.hash||"",i=!1,a="";this.host?i=t+this.host:this.hostname&&(i=t+(-1===this.hostname.indexOf(":")?this.hostname:"["+this.hostname+"]"),this.port&&(i+=":"+this.port)),this.query&&u.isObject(this.query)&&Object.keys(this.query).length&&(a=M.stringify(this.query));var o=this.search||a&&"?"+a||"";return e&&":"!==e.substr(-1)&&(e+=":"),this.slashes||(!e||w[e])&&!1!==i?(i="//"+(i||""),r&&"/"!==r.charAt(0)&&(r="/"+r)):i||(i=""),n&&"#"!==n.charAt(0)&&(n="#"+n),o&&"?"!==o.charAt(0)&&(o="?"+o),r=r.replace(/[?#]/g,function(t){return encodeURIComponent(t)}),o=o.replace("#","%23"),e+i+r+o+n},n.prototype.resolve=function(t){return this.resolveObject(i(t,!1,!0)).format()},n.prototype.resolveObject=function(t){if(u.isString(t)){var e=new n;e.parse(t,!1,!0),t=e}for(var r=new n,i=Object.keys(this),a=0;a<i.length;a++){var o=i[a];r[o]=this[o]}if(r.hash=t.hash,""===t.href)return r.href=r.format(),r;if(t.slashes&&!t.protocol){for(var s=Object.keys(t),l=0;l<s.length;l++){var c=s[l];"protocol"!==c&&(r[c]=t[c])}return w[r.protocol]&&r.hostname&&!r.pathname&&(r.path=r.pathname="/"),r.href=r.format(),r}if(t.protocol&&t.protocol!==r.protocol){if(!w[t.protocol]){for(var h=Object.keys(t),f=0;f<h.length;f++){var d=h[f];r[d]=t[d]}return r.href=r.format(),r}if(r.protocol=t.protocol,t.host||_[t.protocol])r.pathname=t.pathname;else{for(var p=(t.pathname||"").split("/");p.length&&!(t.host=p.shift()););t.host||(t.host=""),t.hostname||(t.hostname=""),""!==p[0]&&p.unshift(""),p.length<2&&p.unshift(""),r.pathname=p.join("/")}if(r.search=t.search,r.query=t.query,r.host=t.host||"",r.auth=t.auth,r.hostname=t.hostname||t.host,r.port=t.port,r.pathname||r.search){var m=r.pathname||"",g=r.search||"";r.path=m+g}return r.slashes=r.slashes||t.slashes,r.href=r.format(),r}var v=r.pathname&&"/"===r.pathname.charAt(0),y=t.host||t.pathname&&"/"===t.pathname.charAt(0),b=y||v||r.host&&t.pathname,x=b,M=r.pathname&&r.pathname.split("/")||[],p=t.pathname&&t.pathname.split("/")||[],k=r.protocol&&!w[r.protocol];if(k&&(r.hostname="",r.port=null,r.host&&(""===M[0]?M[0]=r.host:M.unshift(r.host)),r.host="",t.protocol&&(t.hostname=null,t.port=null,t.host&&(""===p[0]?p[0]=t.host:p.unshift(t.host)),t.host=null),b=b&&(""===p[0]||""===M[0])),y)r.host=t.host||""===t.host?t.host:r.host,r.hostname=t.hostname||""===t.hostname?t.hostname:r.hostname,r.search=t.search,r.query=t.query,M=p;else if(p.length)M||(M=[]),M.pop(),M=M.concat(p),r.search=t.search,r.query=t.query;else if(!u.isNullOrUndefined(t.search)){if(k){r.hostname=r.host=M.shift();var A=!!(r.host&&r.host.indexOf("@")>0)&&r.host.split("@");A&&(r.auth=A.shift(),r.host=r.hostname=A.shift())}return r.search=t.search,r.query=t.query,u.isNull(r.pathname)&&u.isNull(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.href=r.format(),r}if(!M.length)return r.pathname=null,r.search?r.path="/"+r.search:r.path=null,r.href=r.format(),r;for(var T=M.slice(-1)[0],S=(r.host||t.host||M.length>1)&&("."===T||".."===T)||""===T,E=0,L=M.length;L>=0;L--)T=M[L],"."===T?M.splice(L,1):".."===T?(M.splice(L,1),E++):E&&(M.splice(L,1),E--);if(!b&&!x)for(;E--;E)M.unshift("..");!b||""===M[0]||M[0]&&"/"===M[0].charAt(0)||M.unshift(""),S&&"/"!==M.join("/").substr(-1)&&M.push("");var C=""===M[0]||M[0]&&"/"===M[0].charAt(0);if(k){r.hostname=r.host=C?"":M.length?M.shift():"";var A=!!(r.host&&r.host.indexOf("@")>0)&&r.host.split("@");A&&(r.auth=A.shift(),r.host=r.hostname=A.shift())}return b=b||r.host&&M.length,b&&!C&&M.unshift(""),M.length?r.pathname=M.join("/"):(r.pathname=null,r.path=null),u.isNull(r.pathname)&&u.isNull(r.search)||(r.path=(r.pathname?r.pathname:"")+(r.search?r.search:"")),r.auth=t.auth||r.auth,r.slashes=r.slashes||t.slashes,r.href=r.format(),r},n.prototype.parseHost=function(){var t=this.host,e=h.exec(t);e&&(e=e[0],":"!==e&&(this.port=e.substr(1)),t=t.substr(0,t.length-e.length)),t&&(this.hostname=t)}},{"./util":546,punycode:488,querystring:492}],546:[function(t,e,r){"use strict";e.exports={isString:function(t){return"string"==typeof t},isObject:function(t){return"object"==typeof t&&null!==t},isNull:function(t){return null===t},isNullOrUndefined:function(t){return null==t}}},{}],547:[function(t,e,r){"function"==typeof Object.create?e.exports=function(t,e){t.super_=e,t.prototype=Object.create(e.prototype,{constructor:{value:t,enumerable:!1,writable:!0,configurable:!0}})}:e.exports=function(t,e){t.super_=e;var r=function(){};r.prototype=e.prototype,t.prototype=new r,t.prototype.constructor=t}},{}],548:[function(t,e,r){e.exports=function(t){return t&&"object"==typeof t&&"function"==typeof t.copy&&"function"==typeof t.fill&&"function"==typeof t.readUInt8}},{}],549:[function(t,e,r){(function(e,n){function i(t,e){var n={seen:[],stylize:o};return arguments.length>=3&&(n.depth=arguments[2]),arguments.length>=4&&(n.colors=arguments[3]),m(e)?n.showHidden=e:e&&r._extend(n,e),_(n.showHidden)&&(n.showHidden=!1),_(n.depth)&&(n.depth=2),_(n.colors)&&(n.colors=!1),_(n.customInspect)&&(n.customInspect=!0),n.colors&&(n.stylize=a),l(n,t,n.depth)}function a(t,e){var r=i.styles[e];return r?"\x1b["+i.colors[r][0]+"m"+t+"\x1b["+i.colors[r][1]+"m":t}function o(t,e){return t}function s(t){var e={};return t.forEach(function(t,r){e[t]=!0}),e}function l(t,e,n){if(t.customInspect&&e&&T(e.inspect)&&e.inspect!==r.inspect&&(!e.constructor||e.constructor.prototype!==e)){var i=e.inspect(n,t);return b(i)||(i=l(t,i,n)),i}var a=u(t,e);if(a)return a;var o=Object.keys(e),m=s(o);if(t.showHidden&&(o=Object.getOwnPropertyNames(e)),A(e)&&(o.indexOf("message")>=0||o.indexOf("description")>=0))return c(e);if(0===o.length){if(T(e)){var g=e.name?": "+e.name:"";return t.stylize("[Function"+g+"]","special")}if(w(e))return t.stylize(RegExp.prototype.toString.call(e),"regexp");if(k(e))return t.stylize(Date.prototype.toString.call(e),"date");if(A(e))return c(e)}var v="",y=!1,x=["{","}"];if(p(e)&&(y=!0,x=["[","]"]),T(e)){v=" [Function"+(e.name?": "+e.name:"")+"]"}if(w(e)&&(v=" "+RegExp.prototype.toString.call(e)),k(e)&&(v=" "+Date.prototype.toUTCString.call(e)),A(e)&&(v=" "+c(e)),0===o.length&&(!y||0==e.length))return x[0]+v+x[1];if(n<0)return w(e)?t.stylize(RegExp.prototype.toString.call(e),"regexp"):t.stylize("[Object]","special");t.seen.push(e);var _;return _=y?h(t,e,n,m,o):o.map(function(r){return f(t,e,n,m,r,y)}),t.seen.pop(),d(_,v,x)}function u(t,e){if(_(e))return t.stylize("undefined","undefined");if(b(e)){var r="'"+JSON.stringify(e).replace(/^"|"$/g,"").replace(/'/g,"\\'").replace(/\\"/g,'"')+"'";return t.stylize(r,"string")}return y(e)?t.stylize(""+e,"number"):m(e)?t.stylize(""+e,"boolean"):g(e)?t.stylize("null","null"):void 0}function c(t){return"["+Error.prototype.toString.call(t)+"]"}function h(t,e,r,n,i){for(var a=[],o=0,s=e.length;o<s;++o)I(e,String(o))?a.push(f(t,e,r,n,String(o),!0)):a.push("");return i.forEach(function(i){i.match(/^\d+$/)||a.push(f(t,e,r,n,i,!0))}),a}function f(t,e,r,n,i,a){var o,s,u;if(u=Object.getOwnPropertyDescriptor(e,i)||{value:e[i]},u.get?s=u.set?t.stylize("[Getter/Setter]","special"):t.stylize("[Getter]","special"):u.set&&(s=t.stylize("[Setter]","special")),I(n,i)||(o="["+i+"]"),s||(t.seen.indexOf(u.value)<0?(s=g(r)?l(t,u.value,null):l(t,u.value,r-1),s.indexOf("\n")>-1&&(s=a?s.split("\n").map(function(t){return" "+t}).join("\n").substr(2):"\n"+s.split("\n").map(function(t){return" "+t}).join("\n"))):s=t.stylize("[Circular]","special")),_(o)){if(a&&i.match(/^\d+$/))return s;o=JSON.stringify(""+i),o.match(/^"([a-zA-Z_][a-zA-Z_0-9]*)"$/)?(o=o.substr(1,o.length-2),o=t.stylize(o,"name")):(o=o.replace(/'/g,"\\'").replace(/\\"/g,'"').replace(/(^"|"$)/g,"'"),o=t.stylize(o,"string"))}return o+": "+s}function d(t,e,r){var n=0;return t.reduce(function(t,e){return n++,e.indexOf("\n")>=0&&n++,t+e.replace(/\u001b\[\d\d?m/g,"").length+1},0)>60?r[0]+(""===e?"":e+"\n ")+" "+t.join(",\n ")+" "+r[1]:r[0]+e+" "+t.join(", ")+" "+r[1]}function p(t){return Array.isArray(t)}function m(t){return"boolean"==typeof t}function g(t){return null===t}function v(t){return null==t}function y(t){return"number"==typeof t}function b(t){return"string"==typeof t}function x(t){return"symbol"==typeof t}function _(t){return void 0===t}function w(t){return M(t)&&"[object RegExp]"===E(t)}function M(t){return"object"==typeof t&&null!==t}function k(t){return M(t)&&"[object Date]"===E(t)}function A(t){return M(t)&&("[object Error]"===E(t)||t instanceof Error)}function T(t){return"function"==typeof t}function S(t){return null===t||"boolean"==typeof t||"number"==typeof t||"string"==typeof t||"symbol"==typeof t||void 0===t}function E(t){return Object.prototype.toString.call(t)}function L(t){return t<10?"0"+t.toString(10):t.toString(10)}function C(){var t=new Date,e=[L(t.getHours()),L(t.getMinutes()),L(t.getSeconds())].join(":");return[t.getDate(),O[t.getMonth()],e].join(" ")}function I(t,e){return Object.prototype.hasOwnProperty.call(t,e)}var z=/%[sdj%]/g;r.format=function(t){if(!b(t)){for(var e=[],r=0;r<arguments.length;r++)e.push(i(arguments[r]));return e.join(" ")}for(var r=1,n=arguments,a=n.length,o=String(t).replace(z,function(t){if("%%"===t)return"%";if(r>=a)return t;switch(t){case"%s":return String(n[r++]);case"%d":return Number(n[r++]);case"%j":try{return JSON.stringify(n[r++])}catch(t){return"[Circular]"}default:return t}}),s=n[r];r<a;s=n[++r])g(s)||!M(s)?o+=" "+s:o+=" "+i(s);return o},r.deprecate=function(t,i){function a(){if(!o){if(e.throwDeprecation)throw new Error(i);e.traceDeprecation?console.trace(i):console.error(i),o=!0}return t.apply(this,arguments)}if(_(n.process))return function(){return r.deprecate(t,i).apply(this,arguments)};if(!0===e.noDeprecation)return t;var o=!1;return a};var D,P={};r.debuglog=function(t){if(_(D)&&(D=e.env.NODE_DEBUG||""),t=t.toUpperCase(),!P[t])if(new RegExp("\\b"+t+"\\b","i").test(D)){var n=e.pid;P[t]=function(){var e=r.format.apply(r,arguments);console.error("%s %d: %s",t,n,e)}}else P[t]=function(){};return P[t]},r.inspect=i,i.colors={bold:[1,22],italic:[3,23],underline:[4,24],inverse:[7,27],white:[37,39],grey:[90,39],black:[30,39],blue:[34,39],cyan:[36,39],green:[32,39],magenta:[35,39],red:[31,39],yellow:[33,39]},i.styles={special:"cyan",number:"yellow",boolean:"yellow",undefined:"grey",null:"bold",string:"green",date:"magenta",regexp:"red"},r.isArray=p,r.isBoolean=m,r.isNull=g,r.isNullOrUndefined=v,r.isNumber=y,r.isString=b,r.isSymbol=x,r.isUndefined=_,r.isRegExp=w,r.isObject=M,r.isDate=k,r.isError=A,r.isFunction=T,r.isPrimitive=S,r.isBuffer=t("./support/isBuffer");var O=["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"];r.log=function(){console.log("%s - %s",C(),r.format.apply(r,arguments))},r.inherits=t("inherits"),r._extend=function(t,e){if(!e||!M(e))return t;for(var r=Object.keys(e),n=r.length;n--;)t[r[n]]=e[r[n]];return t}}).call(this,t("_process"),"undefined"!=typeof global?global:"undefined"!=typeof self?self:"undefined"!=typeof window?window:{})},{"./support/isBuffer":548,_process:487,inherits:547}],550:[function(t,e,r){e.exports.VectorTile=t("./lib/vectortile.js"),e.exports.VectorTileFeature=t("./lib/vectortilefeature.js"),e.exports.VectorTileLayer=t("./lib/vectortilelayer.js")},{"./lib/vectortile.js":551,"./lib/vectortilefeature.js":552,"./lib/vectortilelayer.js":553}],551:[function(t,e,r){"use strict";function n(t,e){this.layers=t.readFields(i,{},e)}function i(t,e,r){if(3===t){var n=new a(r,r.readVarint()+r.pos);n.length&&(e[n.name]=n)}}var a=t("./vectortilelayer");e.exports=n},{"./vectortilelayer":553}],552:[function(t,e,r){"use strict";function n(t,e,r,n,a){this.properties={},this.extent=r,this.type=0,this._pbf=t,this._geometry=-1,this._keys=n,this._values=a,t.readFields(i,this,e)}function i(t,e,r){1==t?e.id=r.readVarint():2==t?a(r,e):3==t?e.type=r.readVarint():4==t&&(e._geometry=r.pos)}function a(t,e){for(var r=t.readVarint()+t.pos;t.pos<r;){var n=e._keys[t.readVarint()],i=e._values[t.readVarint()];e.properties[n]=i}}function o(t){var e=t.length;if(e<=1)return[t];for(var r,n,i=[],a=0;a<e;a++){var o=s(t[a]);0!==o&&(void 0===n&&(n=o<0),n===o<0?(r&&i.push(r),r=[t[a]]):r.push(t[a]))}return r&&i.push(r),i}function s(t){for(var e,r,n=0,i=0,a=t.length,o=a-1;i<a;o=i++)e=t[i],r=t[o],n+=(r.x-e.x)*(e.y+r.y);return n}var l=t("point-geometry");e.exports=n,n.types=["Unknown","Point","LineString","Polygon"],n.prototype.loadGeometry=function(){var t=this._pbf;t.pos=this._geometry;for(var e,r=t.readVarint()+t.pos,n=1,i=0,a=0,o=0,s=[];t.pos<r;){if(!i){var u=t.readVarint();n=7&u,i=u>>3}if(i--,1===n||2===n)a+=t.readSVarint(),o+=t.readSVarint(),1===n&&(e&&s.push(e),e=[]),e.push(new l(a,o));else{if(7!==n)throw new Error("unknown command "+n);e&&e.push(e[0].clone())}}return e&&s.push(e),s},n.prototype.bbox=function(){var t=this._pbf;t.pos=this._geometry;for(var e=t.readVarint()+t.pos,r=1,n=0,i=0,a=0,o=1/0,s=-1/0,l=1/0,u=-1/0;t.pos<e;){if(!n){var c=t.readVarint();r=7&c,n=c>>3}if(n--,1===r||2===r)i+=t.readSVarint(),a+=t.readSVarint(),i<o&&(o=i),i>s&&(s=i),a<l&&(l=a),a>u&&(u=a);else if(7!==r)throw new Error("unknown command "+r)}return[o,l,s,u]},n.prototype.toGeoJSON=function(t,e,r){function i(t){for(var e=0;e<t.length;e++){var r=t[e],n=180-360*(r.y+c)/l;t[e]=[360*(r.x+u)/l-180,360/Math.PI*Math.atan(Math.exp(n*Math.PI/180))-90]}}var a,s,l=this.extent*Math.pow(2,r),u=this.extent*t,c=this.extent*e,h=this.loadGeometry(),f=n.types[this.type];switch(this.type){case 1:var d=[];for(a=0;a<h.length;a++)d[a]=h[a][0];h=d,i(h);break;case 2:for(a=0;a<h.length;a++)i(h[a]);break;case 3:for(h=o(h),a=0;a<h.length;a++)for(s=0;s<h[a].length;s++)i(h[a][s])}1===h.length?h=h[0]:f="Multi"+f;var p={type:"Feature",geometry:{type:f,coordinates:h},properties:this.properties};return"id"in this&&(p.id=this.id),p}},{"point-geometry":484}],553:[function(t,e,r){"use strict";function n(t,e){this.version=1,this.name=null,this.extent=4096,this.length=0,this._pbf=t,this._keys=[],this._values=[],this._features=[],t.readFields(i,this,e),this.length=this._features.length}function i(t,e,r){15===t?e.version=r.readVarint():1===t?e.name=r.readString():5===t?e.extent=r.readVarint():2===t?e._features.push(r.pos):3===t?e._keys.push(r.readString()):4===t&&e._values.push(a(r))}function a(t){for(var e=null,r=t.readVarint()+t.pos;t.pos<r;){var n=t.readVarint()>>3;e=1===n?t.readString():2===n?t.readFloat():3===n?t.readDouble():4===n?t.readVarint64():5===n?t.readVarint():6===n?t.readSVarint():7===n?t.readBoolean():null}return e}var o=t("./vectortilefeature.js");e.exports=n,n.prototype.feature=function(t){if(t<0||t>=this._features.length)throw new Error("feature index out of bounds");this._pbf.pos=this._features[t];var e=this._pbf.readVarint()+this._pbf.pos;return new o(this._pbf,e,this.extent,this._keys,this._values)}},{"./vectortilefeature.js":552}],554:[function(t,e,r){"use strict";function n(t,e){return"object"==typeof e&&null!==e||(e={}),i(t,e.canvas||a,e.context||o,e)}e.exports=n;var i=t("./lib/vtext"),a=null,o=null;"undefined"!=typeof document&&(a=document.createElement("canvas"),a.width=8192,a.height=1024,o=a.getContext("2d"))},{"./lib/vtext":555}],555:[function(t,e,r){"use strict";function n(t,e,r){for(var n=e.textAlign||"start",i=e.textBaseline||"alphabetic",a=[1<<30,1<<30],o=[0,0],s=t.length,l=0;l<s;++l)for(var u=t[l],c=0;c<2;++c)a[c]=0|Math.min(a[c],u[c]),o[c]=0|Math.max(o[c],u[c]);var h=0;switch(n){case"center":h=-.5*(a[0]+o[0]);break;case"right":case"end":h=-o[0];break;case"left":case"start":h=-a[0];break;default:throw new Error("vectorize-text: Unrecognized textAlign: '"+n+"'")}var f=0;switch(i){case"hanging":case"top":f=-a[1];break;case"middle":f=-.5*(a[1]+o[1]);break;case"alphabetic":case"ideographic":f=-3*r;break;case"bottom":f=-o[1];break;default:throw new Error("vectorize-text: Unrecoginized textBaseline: '"+i+"'")}var d=1/r;return"lineHeight"in e?d*=+e.lineHeight:"width"in e?d=e.width/(o[0]-a[0]):"height"in e&&(d=e.height/(o[1]-a[1])),t.map(function(t){return[d*(t[0]+h),d*(t[1]+f)]})}function i(t,e,r,n){var i=0|Math.ceil(e.measureText(r).width+2*n);if(i>8192)throw new Error("vectorize-text: String too long (sorry, this will get fixed later)");var a=3*n;t.height<a&&(t.height=a),e.fillStyle="#000",e.fillRect(0,0,t.width,t.height),e.fillStyle="#fff",e.fillText(r,n,2*n);var o=e.getImageData(0,0,i,a);return c(o.data,[a,i,4]).pick(-1,-1,0).transpose(1,0)}function a(t,e){var r=u(t,128);return e?h(r.cells,r.positions,.25):{edges:r.cells,positions:r.positions}}function o(t,e,r,i){var o=a(t,i),s=n(o.positions,e,r),l=o.edges,u="ccw"===e.orientation;if(f(s,l),e.polygons||e.polygon||e.polyline){for(var c=p(l,s),h=new Array(c.length),m=0;m<c.length;++m){for(var g=c[m],v=new Array(g.length),y=0;y<g.length;++y){for(var b=g[y],x=new Array(b.length),_=0;_<b.length;++_)x[_]=s[b[_]].slice();u&&x.reverse(),v[y]=x}h[m]=v}return h}return e.triangles||e.triangulate||e.triangle?{cells:d(s,l,{delaunay:!1,exterior:!1,interior:!0}),positions:s}:{edges:l,positions:s}}function s(t,e,r){try{return o(t,e,r,!0)}catch(t){}try{return o(t,e,r,!1)}catch(t){}return e.polygons||e.polyline||e.polygon?[]:e.triangles||e.triangulate||e.triangle?{cells:[],positions:[]}:{edges:[],positions:[]}}function l(t,e,r,n){var a=n.size||64,o=n.font||"normal";return r.font=a+"px "+o,r.textAlign="start",r.textBaseline="alphabetic",r.direction="ltr",s(i(e,r,t,a),n,a)}e.exports=l,e.exports.processPixels=s;var u=t("surface-nets"),c=t("ndarray"),h=t("simplify-planar-graph"),f=t("clean-pslg"),d=t("cdt2d"),p=t("planar-graph-to-polyline")},{cdt2d:79,"clean-pslg":89,ndarray:467,"planar-graph-to-polyline":483,"simplify-planar-graph":523,"surface-nets":531}],556:[function(t,e,r){function n(t){var e=[];for(var r in t.layers)e.push(a(t.layers[r]));var n=new c;return h.tile.write({layers:e},n),n.finish()}function i(t){var e={};for(var r in t)e[r]=new f(t[r].features),e[r].name=r;return n({layers:e})}function a(t){for(var e={name:t.name||"",version:t.version||1,extent:t.extent||4096,keys:[],values:[],features:[]},r={},n={},i=0;i<t.length;i++){var a=t.feature(i);a.geometry=l(a.loadGeometry());var o=[];for(var s in a.properties){var c=r[s];void 0===c&&(e.keys.push(s),c=e.keys.length-1,r[s]=c);var h=u(a.properties[s]),f=n[h.key];void 0===f&&(e.values.push(h),f=e.values.length-1,n[h.key]=f),o.push(c),o.push(f)}a.tags=o,e.features.push(a)}return e}function o(t,e){return(e<<3)+(7&t)}function s(t){return t<<1^t>>31}function l(t){for(var e=[],r=0,n=0,i=t.length,a=0;a<i;a++){var l=t[a];e.push(o(1,1));for(var u=0;u<l.length;u++){1===u&&e.push(o(2,l.length-1));var c=l[u].x-r,h=l[u].y-n;e.push(s(c),s(h)),r+=c,n+=h}}return e}function u(t){var e,r=typeof t;return"string"===r?e={string_value:t}:"boolean"===r?e={bool_value:t}:"number"===r?e=t%1!=0?{double_value:t}:t<0?{sint_value:t}:{uint_value:t}:(t=JSON.stringify(t),e={string_value:t}),e.key=r+":"+t,e}var c=t("pbf"),h=t("./vector-tile-pb"),f=t("./lib/geojson_wrapper");e.exports=n,e.exports.fromVectorTileJs=n,e.exports.fromGeojsonVt=i,e.exports.GeoJSONWrapper=f},{"./lib/geojson_wrapper":557,"./vector-tile-pb":558,pbf:478}],557:[function(t,e,r){"use strict";function n(t){this.features=t,this.length=t.length}function i(t){this.id="number"==typeof t.id?t.id:void 0,this.type=t.type,this.rawGeometry=1===t.type?[t.geometry]:t.geometry,this.properties=t.tags,this.extent=4096}var a=t("point-geometry"),o=t("vector-tile").VectorTileFeature;e.exports=n,n.prototype.feature=function(t){return new i(this.features[t])},i.prototype.loadGeometry=function(){var t=this.rawGeometry;this.geometry=[];for(var e=0;e<t.length;e++){for(var r=t[e],n=[],i=0;i<r.length;i++)n.push(new a(r[i][0],r[i][1]));this.geometry.push(n)}return this.geometry},i.prototype.bbox=function(){this.geometry||this.loadGeometry();for(var t=this.geometry,e=1/0,r=-1/0,n=1/0,i=-1/0,a=0;a<t.length;a++)for(var o=t[a],s=0;s<o.length;s++){var l=o[s];e=Math.min(e,l.x),r=Math.max(r,l.x),n=Math.min(n,l.y),i=Math.max(i,l.y)}return[e,n,r,i]},i.prototype.toGeoJSON=o.prototype.toGeoJSON},{"point-geometry":484,"vector-tile":550}],558:[function(t,e,r){"use strict";function n(t,e){return t.readFields(i,{layers:[]},e)}function i(t,e,r){3===t&&e.layers.push(f(r,r.readVarint()+r.pos))}function a(t,e){var r;if(void 0!==t.layers)for(r=0;r<t.layers.length;r++)e.writeMessage(3,p,t.layers[r])}function o(t,e){return t.readFields(s,{},e)}function s(t,e,r){1===t?e.string_value=r.readString():2===t?e.float_value=r.readFloat():3===t?e.double_value=r.readDouble():4===t?e.int_value=r.readVarint():5===t?e.uint_value=r.readVarint():6===t?e.sint_value=r.readSVarint():7===t&&(e.bool_value=r.readBoolean())}function l(t,e){void 0!==t.string_value&&e.writeStringField(1,t.string_value),void 0!==t.float_value&&e.writeFloatField(2,t.float_value),void 0!==t.double_value&&e.writeDoubleField(3,t.double_value),void 0!==t.int_value&&e.writeVarintField(4,t.int_value),void 0!==t.uint_value&&e.writeVarintField(5,t.uint_value),void 0!==t.sint_value&&e.writeSVarintField(6,t.sint_value),void 0!==t.bool_value&&e.writeBooleanField(7,t.bool_value)}function u(t,e){var r=t.readFields(c,{},e);return void 0===r.type&&(r.type="Unknown"),r}function c(t,e,r){1===t?e.id=r.readVarint():2===t?e.tags=r.readPackedVarint():3===t?e.type=r.readVarint():4===t&&(e.geometry=r.readPackedVarint())}function h(t,e){void 0!==t.id&&e.writeVarintField(1,t.id),void 0!==t.tags&&e.writePackedVarint(2,t.tags),void 0!==t.type&&e.writeVarintField(3,t.type),void 0!==t.geometry&&e.writePackedVarint(4,t.geometry)}function f(t,e){return t.readFields(d,{features:[],keys:[],values:[]},e)}function d(t,e,r){15===t?e.version=r.readVarint():1===t?e.name=r.readString():2===t?e.features.push(u(r,r.readVarint()+r.pos)):3===t?e.keys.push(r.readString()):4===t?e.values.push(o(r,r.readVarint()+r.pos)):5===t&&(e.extent=r.readVarint())}function p(t,e){void 0!==t.version&&e.writeVarintField(15,t.version),void 0!==t.name&&e.writeStringField(1,t.name);var r;if(void 0!==t.features)for(r=0;r<t.features.length;r++)e.writeMessage(2,h,t.features[r]);if(void 0!==t.keys)for(r=0;r<t.keys.length;r++)e.writeStringField(3,t.keys[r]);if(void 0!==t.values)for(r=0;r<t.values.length;r++)e.writeMessage(4,l,t.values[r]);void 0!==t.extent&&e.writeVarintField(5,t.extent)}var m=r.tile={read:n,write:a};m.GeomType={Unknown:0,Point:1,LineString:2,Polygon:3},m.value={read:o,write:l},m.feature={read:u,write:h},m.layer={read:f,write:p}},{}],559:[function(t,e,r){!function(){"use strict";function t(e){e.permitHostObjects___&&e.permitHostObjects___(t)}function r(t){return!(t.substr(0,d.length)==d&&"___"===t.substr(t.length-3))}function n(t){if(t!==Object(t))throw new TypeError("Not an object: "+t);var e=t[p];if(e&&e.key===t)return e;if(f(t)){e={key:t};try{return h(t,p,{value:e,writable:!1,enumerable:!1,configurable:!1}),e}catch(t){return}}}function i(t){return t.prototype=null,Object.freeze(t)}function a(){y||"undefined"==typeof console||(y=!0,console.warn("WeakMap should be invoked as new WeakMap(), not WeakMap(). This will be an error in the future."))}if("undefined"==typeof ses||!ses.ok||ses.ok()){"undefined"!=typeof ses&&(ses.weakMapPermitHostObjects=t);var o=!1;if("function"==typeof WeakMap){var s=WeakMap;if("undefined"!=typeof navigator&&/Firefox/.test(navigator.userAgent));else{var l=new s,u=Object.freeze({});if(l.set(u,1),1===l.get(u))return void(e.exports=WeakMap);o=!0}}var c=(Object.prototype.hasOwnProperty,Object.getOwnPropertyNames),h=Object.defineProperty,f=Object.isExtensible,d="weakmap:",p=d+"ident:"+Math.random()+"___";if("undefined"!=typeof crypto&&"function"==typeof crypto.getRandomValues&&"function"==typeof ArrayBuffer&&"function"==typeof Uint8Array){var m=new ArrayBuffer(25),g=new Uint8Array(m);crypto.getRandomValues(g),p=d+"rand:"+Array.prototype.map.call(g,function(t){return(t%36).toString(36)}).join("")+"___"}if(h(Object,"getOwnPropertyNames",{value:function(t){return c(t).filter(r)}}),"getPropertyNames"in Object){var v=Object.getPropertyNames;h(Object,"getPropertyNames",{value:function(t){return v(t).filter(r)}})}!function(){var t=Object.freeze;h(Object,"freeze",{value:function(e){return n(e),t(e)}});var e=Object.seal;h(Object,"seal",{value:function(t){return n(t),e(t)}});var r=Object.preventExtensions;h(Object,"preventExtensions",{value:function(t){return n(t),r(t)}})}();var y=!1,b=0,x=function(){function t(t,e){var r,i=n(t);return i?u in i?i[u]:e:(r=s.indexOf(t),r>=0?l[r]:e)}function e(t){var e=n(t);return e?u in e:s.indexOf(t)>=0}function r(t,e){var r,i=n(t);return i?i[u]=e:(r=s.indexOf(t),r>=0?l[r]=e:(r=s.length,l[r]=e,s[r]=t)),this}function o(t){var e,r,i=n(t);return i?u in i&&delete i[u]:!((e=s.indexOf(t))<0)&&(r=s.length-1,s[e]=void 0,l[e]=l[r],s[e]=s[r],s.length=r,l.length=r,!0)}this instanceof x||a();var s=[],l=[],u=b++;return Object.create(x.prototype,{get___:{value:i(t)},has___:{value:i(e)},set___:{value:i(r)},delete___:{value:i(o)}})};x.prototype=Object.create(Object.prototype,{get:{value:function(t,e){return this.get___(t,e)},writable:!0,configurable:!0},has:{value:function(t){return this.has___(t)},writable:!0,configurable:!0},set:{value:function(t,e){return this.set___(t,e)},writable:!0,configurable:!0},delete:{value:function(t){return this.delete___(t)},writable:!0,configurable:!0}}),"function"==typeof s?function(){function r(){function e(t,e){return c?u.has(t)?u.get(t):c.get___(t,e):u.get(t,e)}function r(t){return u.has(t)||!!c&&c.has___(t)}function n(t){var e=!!u.delete(t);return c?c.delete___(t)||e:e}this instanceof x||a()
;var l,u=new s,c=void 0,h=!1;return l=o?function(t,e){return u.set(t,e),u.has(t)||(c||(c=new x),c.set(t,e)),this}:function(t,e){if(h)try{u.set(t,e)}catch(r){c||(c=new x),c.set___(t,e)}else u.set(t,e);return this},Object.create(x.prototype,{get___:{value:i(e)},has___:{value:i(r)},set___:{value:i(l)},delete___:{value:i(n)},permitHostObjects___:{value:i(function(e){if(e!==t)throw new Error("bogus call to permitHostObjects___");h=!0})}})}o&&"undefined"!=typeof Proxy&&(Proxy=void 0),r.prototype=x.prototype,e.exports=r,Object.defineProperty(WeakMap.prototype,"constructor",{value:WeakMap,enumerable:!1,configurable:!0,writable:!0})}():("undefined"!=typeof Proxy&&(Proxy=void 0),e.exports=x)}}()},{}],560:[function(t,e,r){function n(){var t={};return function(e){if(("object"!=typeof e||null===e)&&"function"!=typeof e)throw new Error("Weakmap-shim: Key must be object");var r=e.valueOf(t);return r&&r.identity===t?r:i(e,t)}}var i=t("./hidden-store.js");e.exports=n},{"./hidden-store.js":561}],561:[function(t,e,r){function n(t,e){var r={identity:e},n=t.valueOf;return Object.defineProperty(t,"valueOf",{value:function(t){return t!==e?n.apply(this,arguments):r},writable:!0}),r}e.exports=n},{}],562:[function(t,e,r){function n(){var t=i();return{get:function(e,r){var n=t(e);return n.hasOwnProperty("value")?n.value:r},set:function(e,r){return t(e).value=r,this},has:function(e){return"value"in t(e)},delete:function(e){return delete t(e).value}}}var i=t("./create-store.js");e.exports=n},{"./create-store.js":560}],563:[function(t,e,r){var n=t("get-canvas-context");e.exports=function(t){return n("webgl",t)}},{"get-canvas-context":147}],564:[function(t,e,r){var n=arguments[3],i=arguments[4],a=arguments[5],o=JSON.stringify;e.exports=function(t,e){function r(t){g[t]=!0;for(var e in i[t][1]){var n=i[t][1][e];g[n]||r(n)}}for(var s,l=Object.keys(a),u=0,c=l.length;u<c;u++){var h=l[u],f=a[h].exports;if(f===t||f&&f.default===t){s=h;break}}if(!s){s=Math.floor(Math.pow(16,8)*Math.random()).toString(16);for(var d={},u=0,c=l.length;u<c;u++){var h=l[u];d[h]=h}i[s]=[Function(["require","module","exports"],"("+t+")(self)"),d]}var p=Math.floor(Math.pow(16,8)*Math.random()).toString(16),m={};m[s]=s,i[p]=[Function(["require"],"var f = require("+ o(s) +");(f.default ? f.default : f)(self);"),m];var g={};r(p);var v="("+n+")({"+Object.keys(g).map(function(t){return o(t)+":["+i[t][0]+","+o(i[t][1])+"]"}).join(",")+"},{},["+o(p)+"])",y=window.URL||window.webkitURL||window.mozURL||window.msURL,b=new Blob([v],{type:"text/javascript"});if(e&&e.bare)return b;var x=y.createObjectURL(b),_=new Worker(x);return _.objectURL=x,_}},{}],565:[function(t,e,r){e.exports.RADIUS=6378137,e.exports.FLATTENING=1/298.257223563,e.exports.POLAR_RADIUS=6356752.3142},{}],566:[function(e,r,n){!function(e,i){"object"==typeof n&&void 0!==r?i(n):"function"==typeof t&&t.amd?t(["exports"],i):i(e.WhooTS=e.WhooTS||{})}(this,function(t){function e(t,e,n,i,a,o){return o=o||{},t+"?"+["bbox="+r(n,i,a),"format="+(o.format||"image/png"),"service="+(o.service||"WMS"),"version="+(o.version||"1.1.1"),"request="+(o.request||"GetMap"),"srs="+(o.srs||"EPSG:3857"),"width="+(o.width||256),"height="+(o.height||256),"layers="+e].join("&")}function r(t,e,r){e=Math.pow(2,r)-e-1;var i=n(256*t,256*e,r),a=n(256*(t+1),256*(e+1),r);return i[0]+","+i[1]+","+a[0]+","+a[1]}function n(t,e,r){var n=2*Math.PI*6378137/256/Math.pow(2,r);return[t*n-2*Math.PI*6378137/2,e*n-2*Math.PI*6378137/2]}t.getURL=e,t.getTileBBox=r,t.getMercCoords=n,Object.defineProperty(t,"__esModule",{value:!0})})},{}],567:[function(t,e,r){function n(t){this.local=this.regionalOptions[t||""]||this.regionalOptions[""]}function i(t,e,r,n){var i,a;if("object"==typeof t)i=t,a=e||{};else{if(!("number"==typeof t&&t>=1888&&t<=2111))throw new Error("Solar year outside range 1888-2111");if(!("number"==typeof e&&e>=1&&e<=12))throw new Error("Solar month outside range 1 - 12");if(!("number"==typeof r&&r>=1&&r<=31))throw new Error("Solar day outside range 1 - 31");i={year:t,month:e,day:r},a=n||{}}var o=p[i.year-p[0]],s=i.year<<9|i.month<<5|i.day;a.year=s>=o?i.year:i.year-1,o=p[a.year-p[0]];var l,u=o>>9&4095,c=o>>5&15,h=31&o,f=new Date(u,c-1,h),m=new Date(i.year,i.month-1,i.day);l=Math.round((m-f)/864e5);var g,v=d[a.year-d[0]];for(g=0;g<13;g++){var y=v&1<<12-g?30:29;if(l<y)break;l-=y}var b=v>>13;return!b||g<b?(a.isIntercalary=!1,a.month=1+g):g===b?(a.isIntercalary=!0,a.month=g):(a.isIntercalary=!1,a.month=g),a.day=1+l,a}function a(t,e,r,n,i){var a,o;if("object"==typeof t)o=t,a=e||{};else{if(!("number"==typeof t&&t>=1888&&t<=2111))throw new Error("Lunar year outside range 1888-2111");if(!("number"==typeof e&&e>=1&&e<=12))throw new Error("Lunar month outside range 1 - 12");if(!("number"==typeof r&&r>=1&&r<=30))throw new Error("Lunar day outside range 1 - 30");var s;"object"==typeof n?(s=!1,a=n):(s=!!n,a=i||{}),o={year:t,month:e,day:r,isIntercalary:s}}var l;l=o.day-1;var u,c=d[o.year-d[0]],h=c>>13;u=h?o.month>h?o.month:o.isIntercalary?o.month:o.month-1:o.month-1;for(var f=0;f<u;f++){l+=c&1<<12-f?30:29}var m=p[o.year-p[0]],g=m>>9&4095,v=m>>5&15,y=31&m,b=new Date(g,v-1,y+l);return a.year=b.getFullYear(),a.month=1+b.getMonth(),a.day=b.getDate(),a}var o=t("../main"),s=t("object-assign"),l=o.instance();n.prototype=new o.baseCalendar,s(n.prototype,{name:"Chinese",jdEpoch:1721425.5,hasYearZero:!1,minMonth:0,firstMonth:0,minDay:1,regionalOptions:{"":{name:"Chinese",epochs:["BEC","EC"],monthNumbers:function(t,e){if("string"==typeof t){var r=t.match(c);return r?r[0]:""}var n=this._validateYear(t),i=t.month(),a=""+this.toChineseMonth(n,i);return e&&a.length<2&&(a="0"+a),this.isIntercalaryMonth(n,i)&&(a+="i"),a},monthNames:function(t){if("string"==typeof t){var e=t.match(h);return e?e[0]:""}var r=this._validateYear(t),n=t.month(),i=this.toChineseMonth(r,n),a=["\u4e00\u6708","\u4e8c\u6708","\u4e09\u6708","\u56db\u6708","\u4e94\u6708","\u516d\u6708","\u4e03\u6708","\u516b\u6708","\u4e5d\u6708","\u5341\u6708","\u5341\u4e00\u6708","\u5341\u4e8c\u6708"][i-1];return this.isIntercalaryMonth(r,n)&&(a="\u95f0"+a),a},monthNamesShort:function(t){if("string"==typeof t){var e=t.match(f);return e?e[0]:""}var r=this._validateYear(t),n=t.month(),i=this.toChineseMonth(r,n),a=["\u4e00","\u4e8c","\u4e09","\u56db","\u4e94","\u516d","\u4e03","\u516b","\u4e5d","\u5341","\u5341\u4e00","\u5341\u4e8c"][i-1];return this.isIntercalaryMonth(r,n)&&(a="\u95f0"+a),a},parseMonth:function(t,e){t=this._validateYear(t);var r,n=parseInt(e);if(isNaN(n))"\u95f0"===e[0]&&(r=!0,e=e.substring(1)),"\u6708"===e[e.length-1]&&(e=e.substring(0,e.length-1)),n=1+["\u4e00","\u4e8c","\u4e09","\u56db","\u4e94","\u516d","\u4e03","\u516b","\u4e5d","\u5341","\u5341\u4e00","\u5341\u4e8c"].indexOf(e);else{var i=e[e.length-1];r="i"===i||"I"===i}return this.toMonthIndex(t,n,r)},dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],digits:null,dateFormat:"yyyy/mm/dd",firstDay:1,isRTL:!1}},_validateYear:function(t,e){if(t.year&&(t=t.year()),"number"!=typeof t||t<1888||t>2111)throw e.replace(/\{0\}/,this.local.name);return t},toMonthIndex:function(t,e,r){var n=this.intercalaryMonth(t);if(r&&e!==n||e<1||e>12)throw o.local.invalidMonth.replace(/\{0\}/,this.local.name);return n?!r&&e<=n?e-1:e:e-1},toChineseMonth:function(t,e){t.year&&(t=t.year(),e=t.month());var r=this.intercalaryMonth(t),n=r?12:11;if(e<0||e>n)throw o.local.invalidMonth.replace(/\{0\}/,this.local.name);return r?e<r?e+1:e:e+1},intercalaryMonth:function(t){return t=this._validateYear(t),d[t-d[0]]>>13},isIntercalaryMonth:function(t,e){t.year&&(t=t.year(),e=t.month());var r=this.intercalaryMonth(t);return!!r&&r===e},leapYear:function(t){return 0!==this.intercalaryMonth(t)},weekOfYear:function(t,e,r){var n,i=this._validateYear(t,o.local.invalidyear),a=p[i-p[0]],s=a>>9&4095,u=a>>5&15,c=31&a;n=l.newDate(s,u,c),n.add(4-(n.dayOfWeek()||7),"d");var h=this.toJD(t,e,r)-n.toJD();return 1+Math.floor(h/7)},monthsInYear:function(t){return this.leapYear(t)?13:12},daysInMonth:function(t,e){t.year&&(e=t.month(),t=t.year()),t=this._validateYear(t);var r=d[t-d[0]];if(e>(r>>13?12:11))throw o.local.invalidMonth.replace(/\{0\}/,this.local.name);return r&1<<12-e?30:29},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)<6},toJD:function(t,e,r){var n=this._validate(t,s,r,o.local.invalidDate);t=this._validateYear(n.year()),e=n.month(),r=n.day();var i=this.isIntercalaryMonth(t,e),s=this.toChineseMonth(t,e),u=a(t,s,r,i);return l.toJD(u.year,u.month,u.day)},fromJD:function(t){var e=l.fromJD(t),r=i(e.year(),e.month(),e.day()),n=this.toMonthIndex(r.year,r.month,r.isIntercalary);return this.newDate(r.year,n,r.day)},fromString:function(t){var e=t.match(u),r=this._validateYear(+e[1]),n=+e[2],i=!!e[3],a=this.toMonthIndex(r,n,i),o=+e[4];return this.newDate(r,a,o)},add:function(t,e,r){var i=t.year(),a=t.month(),o=this.isIntercalaryMonth(i,a),s=this.toChineseMonth(i,a),l=Object.getPrototypeOf(n.prototype).add.call(this,t,e,r);if("y"===r){var u=l.year(),c=l.month(),h=this.isIntercalaryMonth(u,s),f=o&&h?this.toMonthIndex(u,s,!0):this.toMonthIndex(u,s,!1);f!==c&&l.month(f)}return l}});var u=/^\s*(-?\d\d\d\d|\d\d)[-\/](\d?\d)([iI]?)[-\/](\d?\d)/m,c=/^\d?\d[iI]?/m,h=/^\u95f0?\u5341?[\u4e00\u4e8c\u4e09\u56db\u4e94\u516d\u4e03\u516b\u4e5d]?\u6708/m,f=/^\u95f0?\u5341?[\u4e00\u4e8c\u4e09\u56db\u4e94\u516d\u4e03\u516b\u4e5d]?/m;o.calendars.chinese=n;var d=[1887,5780,5802,19157,2742,50359,1198,2646,46378,7466,3412,30122,5482,67949,2396,5294,43597,6732,6954,36181,2772,4954,18781,2396,54427,5274,6730,47781,5800,6868,21210,4790,59703,2350,5270,46667,3402,3496,38325,1388,4782,18735,2350,52374,6804,7498,44457,2906,1388,29294,4700,63789,6442,6804,56138,5802,2772,38235,1210,4698,22827,5418,63125,3476,5802,43701,2484,5302,27223,2646,70954,7466,3412,54698,5482,2412,38062,5294,2636,32038,6954,60245,2772,4826,43357,2394,5274,39501,6730,72357,5800,5844,53978,4790,2358,38039,5270,87627,3402,3496,54708,5484,4782,43311,2350,3222,27978,7498,68965,2904,5484,45677,4700,6444,39573,6804,6986,19285,2772,62811,1210,4698,47403,5418,5780,38570,5546,76469,2420,5302,51799,2646,5414,36501,3412,5546,18869,2412,54446,5276,6732,48422,6822,2900,28010,4826,92509,2394,5274,55883,6730,6820,47956,5812,2778,18779,2358,62615,5270,5450,46757,3492,5556,27318,4718,67887,2350,3222,52554,7498,3428,38252,5468,4700,31022,6444,64149,6804,6986,43861,2772,5338,35421,2650,70955,5418,5780,54954,5546,2740,38074,5302,2646,29991,3366,61011,3412,5546,43445,2412,5294,35406,6732,72998,6820,6996,52586,2778,2396,38045,5274,6698,23333,6820,64338,5812,2746,43355,2358,5270,39499,5450,79525,3492,5548],p=[1887,966732,967231,967733,968265,968766,969297,969798,970298,970829,971330,971830,972362,972863,973395,973896,974397,974928,975428,975929,976461,976962,977462,977994,978494,979026,979526,980026,980558,981059,981559,982091,982593,983124,983624,984124,984656,985157,985656,986189,986690,987191,987722,988222,988753,989254,989754,990286,990788,991288,991819,992319,992851,993352,993851,994383,994885,995385,995917,996418,996918,997450,997949,998481,998982,999483,1000014,1000515,1001016,1001548,1002047,1002578,1003080,1003580,1004111,1004613,1005113,1005645,1006146,1006645,1007177,1007678,1008209,1008710,1009211,1009743,1010243,1010743,1011275,1011775,1012306,1012807,1013308,1013840,1014341,1014841,1015373,1015874,1016404,1016905,1017405,1017937,1018438,1018939,1019471,1019972,1020471,1021002,1021503,1022035,1022535,1023036,1023568,1024069,1024568,1025100,1025601,1026102,1026633,1027133,1027666,1028167,1028666,1029198,1029699,1030199,1030730,1031231,1031763,1032264,1032764,1033296,1033797,1034297,1034828,1035329,1035830,1036362,1036861,1037393,1037894,1038394,1038925,1039427,1039927,1040459,1040959,1041491,1041992,1042492,1043023,1043524,1044024,1044556,1045057,1045558,1046090,1046590,1047121,1047622,1048122,1048654,1049154,1049655,1050187,1050689,1051219,1051720,1052220,1052751,1053252,1053752,1054284,1054786,1055285,1055817,1056317,1056849,1057349,1057850,1058382,1058883,1059383,1059915,1060415,1060947,1061447,1061947,1062479,1062981,1063480,1064012,1064514,1065014,1065545,1066045,1066577,1067078,1067578,1068110,1068611,1069112,1069642,1070142,1070674,1071175,1071675,1072207,1072709,1073209,1073740,1074241,1074741,1075273,1075773,1076305,1076807,1077308,1077839,1078340,1078840,1079372,1079871,1080403,1080904]},{"../main":581,"object-assign":470}],568:[function(t,e,r){function n(t){this.local=this.regionalOptions[t||""]||this.regionalOptions[""]}var i=t("../main"),a=t("object-assign");n.prototype=new i.baseCalendar,a(n.prototype,{name:"Coptic",jdEpoch:1825029.5,daysPerMonth:[30,30,30,30,30,30,30,30,30,30,30,30,5],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Coptic",epochs:["BAM","AM"],monthNames:["Thout","Paopi","Hathor","Koiak","Tobi","Meshir","Paremhat","Paremoude","Pashons","Paoni","Epip","Mesori","Pi Kogi Enavot"],monthNamesShort:["Tho","Pao","Hath","Koi","Tob","Mesh","Pat","Pad","Pash","Pao","Epi","Meso","PiK"],dayNames:["Tkyriaka","Pesnau","Pshoment","Peftoou","Ptiou","Psoou","Psabbaton"],dayNamesShort:["Tky","Pes","Psh","Pef","Pti","Pso","Psa"],dayNamesMin:["Tk","Pes","Psh","Pef","Pt","Pso","Psa"],digits:null,dateFormat:"dd/mm/yyyy",firstDay:0,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,i.local.invalidYear),t=e.year()+(e.year()<0?1:0);return t%4==3||t%4==-1},monthsInYear:function(t){return this._validate(t,this.minMonth,this.minDay,i.local.invalidYear||i.regionalOptions[""].invalidYear),13},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(-n.dayOfWeek(),"d"),Math.floor((n.dayOfYear()-1)/7)+1},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,i.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(13===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)<6},toJD:function(t,e,r){var n=this._validate(t,e,r,i.local.invalidDate);return t=n.year(),t<0&&t++,n.day()+30*(n.month()-1)+365*(t-1)+Math.floor(t/4)+this.jdEpoch-1},fromJD:function(t){var e=Math.floor(t)+.5-this.jdEpoch,r=Math.floor((e-Math.floor((e+366)/1461))/365)+1;r<=0&&r--,e=Math.floor(t)+.5-this.newDate(r,1,1).toJD();var n=Math.floor(e/30)+1,i=e-30*(n-1)+1;return this.newDate(r,n,i)}}),i.calendars.coptic=n},{"../main":581,"object-assign":470}],569:[function(t,e,r){function n(t){this.local=this.regionalOptions[t||""]||this.regionalOptions[""]}var i=t("../main"),a=t("object-assign");n.prototype=new i.baseCalendar,a(n.prototype,{name:"Discworld",jdEpoch:1721425.5,daysPerMonth:[16,32,32,32,32,32,32,32,32,32,32,32,32],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Discworld",epochs:["BUC","UC"],monthNames:["Ick","Offle","February","March","April","May","June","Grune","August","Spune","Sektober","Ember","December"],monthNamesShort:["Ick","Off","Feb","Mar","Apr","May","Jun","Gru","Aug","Spu","Sek","Emb","Dec"],dayNames:["Sunday","Octeday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Oct","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Oc","Mo","Tu","We","Th","Fr","Sa"],digits:null,dateFormat:"yyyy/mm/dd",firstDay:2,isRTL:!1}},leapYear:function(t){return this._validate(t,this.minMonth,this.minDay,i.local.invalidYear),!1},monthsInYear:function(t){return this._validate(t,this.minMonth,this.minDay,i.local.invalidYear),13},daysInYear:function(t){return this._validate(t,this.minMonth,this.minDay,i.local.invalidYear),400},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(-n.dayOfWeek(),"d"),Math.floor((n.dayOfYear()-1)/8)+1},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,i.local.invalidMonth);return this.daysPerMonth[r.month()-1]},daysInWeek:function(){return 8},dayOfWeek:function(t,e,r){return(this._validate(t,e,r,i.local.invalidDate).day()+1)%8},weekDay:function(t,e,r){var n=this.dayOfWeek(t,e,r);return n>=2&&n<=6},extraInfo:function(t,e,r){var n=this._validate(t,e,r,i.local.invalidDate);return{century:o[Math.floor((n.year()-1)/100)+1]||""}},toJD:function(t,e,r){var n=this._validate(t,e,r,i.local.invalidDate);return t=n.year()+(n.year()<0?1:0),e=n.month(),(r=n.day())+(e>1?16:0)+(e>2?32*(e-2):0)+400*(t-1)+this.jdEpoch-1},fromJD:function(t){t=Math.floor(t+.5)-Math.floor(this.jdEpoch)-1;var e=Math.floor(t/400)+1;t-=400*(e-1),t+=t>15?16:0;var r=Math.floor(t/32)+1,n=t-32*(r-1)+1;return this.newDate(e<=0?e-1:e,r,n)}});var o={20:"Fruitbat",21:"Anchovy"};i.calendars.discworld=n},{"../main":581,"object-assign":470}],570:[function(t,e,r){function n(t){this.local=this.regionalOptions[t||""]||this.regionalOptions[""]}var i=t("../main"),a=t("object-assign");n.prototype=new i.baseCalendar,a(n.prototype,{name:"Ethiopian",jdEpoch:1724220.5,daysPerMonth:[30,30,30,30,30,30,30,30,30,30,30,30,5],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Ethiopian",epochs:["BEE","EE"],monthNames:["Meskerem","Tikemet","Hidar","Tahesas","Tir","Yekatit","Megabit","Miazia","Genbot","Sene","Hamle","Nehase","Pagume"],monthNamesShort:["Mes","Tik","Hid","Tah","Tir","Yek","Meg","Mia","Gen","Sen","Ham","Neh","Pag"],dayNames:["Ehud","Segno","Maksegno","Irob","Hamus","Arb","Kidame"],dayNamesShort:["Ehu","Seg","Mak","Iro","Ham","Arb","Kid"],dayNamesMin:["Eh","Se","Ma","Ir","Ha","Ar","Ki"],digits:null,dateFormat:"dd/mm/yyyy",firstDay:0,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,i.local.invalidYear),t=e.year()+(e.year()<0?1:0);return t%4==3||t%4==-1},monthsInYear:function(t){return this._validate(t,this.minMonth,this.minDay,i.local.invalidYear||i.regionalOptions[""].invalidYear),13},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(-n.dayOfWeek(),"d"),Math.floor((n.dayOfYear()-1)/7)+1},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,i.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(13===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)<6},toJD:function(t,e,r){var n=this._validate(t,e,r,i.local.invalidDate);return t=n.year(),t<0&&t++,n.day()+30*(n.month()-1)+365*(t-1)+Math.floor(t/4)+this.jdEpoch-1},fromJD:function(t){var e=Math.floor(t)+.5-this.jdEpoch,r=Math.floor((e-Math.floor((e+366)/1461))/365)+1;r<=0&&r--,e=Math.floor(t)+.5-this.newDate(r,1,1).toJD();var n=Math.floor(e/30)+1,i=e-30*(n-1)+1;return this.newDate(r,n,i)}}),i.calendars.ethiopian=n},{"../main":581,"object-assign":470}],571:[function(t,e,r){function n(t){this.local=this.regionalOptions[t||""]||this.regionalOptions[""]}function i(t,e){return t-e*Math.floor(t/e)}var a=t("../main"),o=t("object-assign");n.prototype=new a.baseCalendar,o(n.prototype,{name:"Hebrew",jdEpoch:347995.5,daysPerMonth:[30,29,30,29,30,29,30,29,30,29,30,29,29],hasYearZero:!1,minMonth:1,firstMonth:7,minDay:1,regionalOptions:{"":{name:"Hebrew",epochs:["BAM","AM"],monthNames:["Nisan","Iyar","Sivan","Tammuz","Av","Elul","Tishrei","Cheshvan","Kislev","Tevet","Shevat","Adar","Adar II"],monthNamesShort:["Nis","Iya","Siv","Tam","Av","Elu","Tis","Che","Kis","Tev","She","Ada","Ad2"],dayNames:["Yom Rishon","Yom Sheni","Yom Shlishi","Yom Revi'i","Yom Chamishi","Yom Shishi","Yom Shabbat"],dayNamesShort:["Ris","She","Shl","Rev","Cha","Shi","Sha"],dayNamesMin:["Ri","She","Shl","Re","Ch","Shi","Sha"],digits:null,dateFormat:"dd/mm/yyyy",firstDay:0,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,a.local.invalidYear);return this._leapYear(e.year())},_leapYear:function(t){return t=t<0?t+1:t,i(7*t+1,19)<7},monthsInYear:function(t){return this._validate(t,this.minMonth,this.minDay,a.local.invalidYear),this._leapYear(t.year?t.year():t)?13:12},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(-n.dayOfWeek(),"d"),Math.floor((n.dayOfYear()-1)/7)+1},daysInYear:function(t){return t=this._validate(t,this.minMonth,this.minDay,a.local.invalidYear).year(),this.toJD(-1===t?1:t+1,7,1)-this.toJD(t,7,1)},daysInMonth:function(t,e){return t.year&&(e=t.month(),t=t.year()),this._validate(t,e,this.minDay,a.local.invalidMonth),12===e&&this.leapYear(t)?30:8===e&&5===i(this.daysInYear(t),10)?30:9===e&&3===i(this.daysInYear(t),10)?29:this.daysPerMonth[e-1]},weekDay:function(t,e,r){return 6!==this.dayOfWeek(t,e,r)},extraInfo:function(t,e,r){var n=this._validate(t,e,r,a.local.invalidDate);return{yearType:(this.leapYear(n)?"embolismic":"common")+" "+["deficient","regular","complete"][this.daysInYear(n)%10-3]}},toJD:function(t,e,r){var n=this._validate(t,e,r,a.local.invalidDate);t=n.year(),e=n.month(),r=n.day();var i=t<=0?t+1:t,o=this.jdEpoch+this._delay1(i)+this._delay2(i)+r+1;if(e<7){for(var s=7;s<=this.monthsInYear(t);s++)o+=this.daysInMonth(t,s);for(var s=1;s<e;s++)o+=this.daysInMonth(t,s)}else for(var s=7;s<e;s++)o+=this.daysInMonth(t,s);return o},_delay1:function(t){var e=Math.floor((235*t-234)/19),r=12084+13753*e,n=29*e+Math.floor(r/25920);return i(3*(n+1),7)<3&&n++,n},_delay2:function(t){var e=this._delay1(t-1),r=this._delay1(t);return this._delay1(t+1)-r==356?2:r-e==382?1:0},fromJD:function(t){t=Math.floor(t)+.5;for(var e=Math.floor(98496*(t-this.jdEpoch)/35975351)-1;t>=this.toJD(-1===e?1:e+1,7,1);)e++;for(var r=t<this.toJD(e,1,1)?7:1;t>this.toJD(e,r,this.daysInMonth(e,r));)r++;var n=t-this.toJD(e,r,1)+1;return this.newDate(e,r,n)}}),a.calendars.hebrew=n},{"../main":581,"object-assign":470}],572:[function(t,e,r){function n(t){this.local=this.regionalOptions[t||""]||this.regionalOptions[""]}var i=t("../main"),a=t("object-assign");n.prototype=new i.baseCalendar,a(n.prototype,{name:"Islamic",jdEpoch:1948439.5,daysPerMonth:[30,29,30,29,30,29,30,29,30,29,30,29],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Islamic",epochs:["BH","AH"],monthNames:["Muharram","Safar","Rabi' al-awwal","Rabi' al-thani","Jumada al-awwal","Jumada al-thani","Rajab","Sha'aban","Ramadan","Shawwal","Dhu al-Qi'dah","Dhu al-Hijjah"],monthNamesShort:["Muh","Saf","Rab1","Rab2","Jum1","Jum2","Raj","Sha'","Ram","Shaw","DhuQ","DhuH"],dayNames:["Yawm al-ahad","Yawm al-ithnayn","Yawm ath-thulaathaa'","Yawm al-arbi'aa'","Yawm al-kham\u012bs","Yawm al-jum'a","Yawm as-sabt"],dayNamesShort:["Aha","Ith","Thu","Arb","Kha","Jum","Sab"],dayNamesMin:["Ah","It","Th","Ar","Kh","Ju","Sa"],digits:null,dateFormat:"yyyy/mm/dd",firstDay:6,isRTL:!1}},leapYear:function(t){return(11*this._validate(t,this.minMonth,this.minDay,i.local.invalidYear).year()+14)%30<11},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(-n.dayOfWeek(),"d"),Math.floor((n.dayOfYear()-1)/7)+1},daysInYear:function(t){return this.leapYear(t)?355:354},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,i.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(12===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return 5!==this.dayOfWeek(t,e,r)},toJD:function(t,e,r){var n=this._validate(t,e,r,i.local.invalidDate);return t=n.year(),e=n.month(),r=n.day(),t=t<=0?t+1:t,r+Math.ceil(29.5*(e-1))+354*(t-1)+Math.floor((3+11*t)/30)+this.jdEpoch-1},fromJD:function(t){t=Math.floor(t)+.5;var e=Math.floor((30*(t-this.jdEpoch)+10646)/10631);e=e<=0?e-1:e;var r=Math.min(12,Math.ceil((t-29-this.toJD(e,1,1))/29.5)+1),n=t-this.toJD(e,r,1)+1;return this.newDate(e,r,n)}}),i.calendars.islamic=n},{"../main":581,"object-assign":470}],573:[function(t,e,r){function n(t){this.local=this.regionalOptions[t||""]||this.regionalOptions[""]}var i=t("../main"),a=t("object-assign");n.prototype=new i.baseCalendar,a(n.prototype,{name:"Julian",jdEpoch:1721423.5,daysPerMonth:[31,28,31,30,31,30,31,31,30,31,30,31],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Julian",epochs:["BC","AD"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],digits:null,dateFormat:"mm/dd/yyyy",firstDay:0,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,i.local.invalidYear),t=e.year()<0?e.year()+1:e.year();return t%4==0},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(4-(n.dayOfWeek()||7),"d"),Math.floor((n.dayOfYear()-1)/7)+1},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,i.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(2===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)<6},toJD:function(t,e,r){var n=this._validate(t,e,r,i.local.invalidDate);return t=n.year(),e=n.month(),r=n.day(),t<0&&t++,e<=2&&(t--,e+=12),Math.floor(365.25*(t+4716))+Math.floor(30.6001*(e+1))+r-1524.5},fromJD:function(t){var e=Math.floor(t+.5),r=e+1524,n=Math.floor((r-122.1)/365.25),i=Math.floor(365.25*n),a=Math.floor((r-i)/30.6001),o=a-Math.floor(a<14?1:13),s=n-Math.floor(o>2?4716:4715),l=r-i-Math.floor(30.6001*a);return s<=0&&s--,this.newDate(s,o,l)}}),i.calendars.julian=n},{"../main":581,"object-assign":470}],574:[function(t,e,r){function n(t){this.local=this.regionalOptions[t||""]||this.regionalOptions[""]}function i(t,e){return t-e*Math.floor(t/e)}function a(t,e){return i(t-1,e)+1}var o=t("../main"),s=t("object-assign");n.prototype=new o.baseCalendar,s(n.prototype,{name:"Mayan",jdEpoch:584282.5,hasYearZero:!0,minMonth:0,firstMonth:0,minDay:0,regionalOptions:{"":{name:"Mayan",epochs:["",""],monthNames:["0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17"],monthNamesShort:["0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17"],dayNames:["0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19"],dayNamesShort:["0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19"],dayNamesMin:["0","1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19"],digits:null,dateFormat:"YYYY.m.d",firstDay:0,isRTL:!1,haabMonths:["Pop","Uo","Zip","Zotz","Tzec","Xul","Yaxkin","Mol","Chen","Yax","Zac","Ceh","Mac","Kankin","Muan","Pax","Kayab","Cumku","Uayeb"],tzolkinMonths:["Imix","Ik","Akbal","Kan","Chicchan","Cimi","Manik","Lamat","Muluc","Oc","Chuen","Eb","Ben","Ix","Men","Cib","Caban","Etznab","Cauac","Ahau"]}},leapYear:function(t){return this._validate(t,this.minMonth,this.minDay,o.local.invalidYear),!1},formatYear:function(t){t=this._validate(t,this.minMonth,this.minDay,o.local.invalidYear).year();var e=Math.floor(t/400);return t%=400,t+=t<0?400:0,e+"."+Math.floor(t/20)+"."+t%20},forYear:function(t){if(t=t.split("."),t.length<3)throw"Invalid Mayan year";for(var e=0,r=0;r<t.length;r++){var n=parseInt(t[r],10);if(Math.abs(n)>19||r>0&&n<0)throw"Invalid Mayan year";e=20*e+n}return e},monthsInYear:function(t){return this._validate(t,this.minMonth,this.minDay,o.local.invalidYear),18},weekOfYear:function(t,e,r){return this._validate(t,e,r,o.local.invalidDate),0},daysInYear:function(t){return this._validate(t,this.minMonth,this.minDay,o.local.invalidYear),360},daysInMonth:function(t,e){return this._validate(t,e,this.minDay,o.local.invalidMonth),20},daysInWeek:function(){return 5},dayOfWeek:function(t,e,r){return this._validate(t,e,r,o.local.invalidDate).day()},weekDay:function(t,e,r){return this._validate(t,e,r,o.local.invalidDate),!0},extraInfo:function(t,e,r){var n=this._validate(t,e,r,o.local.invalidDate),i=n.toJD(),a=this._toHaab(i),s=this._toTzolkin(i);return{haabMonthName:this.local.haabMonths[a[0]-1],haabMonth:a[0],haabDay:a[1],tzolkinDayName:this.local.tzolkinMonths[s[0]-1],tzolkinDay:s[0],tzolkinTrecena:s[1]}},_toHaab:function(t){t-=this.jdEpoch;var e=i(t+8+340,365);return[Math.floor(e/20)+1,i(e,20)]},_toTzolkin:function(t){return t-=this.jdEpoch,[a(t+20,20),a(t+4,13)]},toJD:function(t,e,r){var n=this._validate(t,e,r,o.local.invalidDate);return n.day()+20*n.month()+360*n.year()+this.jdEpoch},fromJD:function(t){t=Math.floor(t)+.5-this.jdEpoch;var e=Math.floor(t/360);t%=360,t+=t<0?360:0;var r=Math.floor(t/20),n=t%20;return this.newDate(e,r,n)}}),o.calendars.mayan=n},{"../main":581,"object-assign":470}],575:[function(t,e,r){function n(t){this.local=this.regionalOptions[t||""]||this.regionalOptions[""]}var i=t("../main"),a=t("object-assign");n.prototype=new i.baseCalendar;var o=i.instance("gregorian");a(n.prototype,{name:"Nanakshahi",jdEpoch:2257673.5,daysPerMonth:[31,31,31,31,31,30,30,30,30,30,30,30],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Nanakshahi",epochs:["BN","AN"],monthNames:["Chet","Vaisakh","Jeth","Harh","Sawan","Bhadon","Assu","Katak","Maghar","Poh","Magh","Phagun"],monthNamesShort:["Che","Vai","Jet","Har","Saw","Bha","Ass","Kat","Mgr","Poh","Mgh","Pha"],dayNames:["Somvaar","Mangalvar","Budhvaar","Veervaar","Shukarvaar","Sanicharvaar","Etvaar"],dayNamesShort:["Som","Mangal","Budh","Veer","Shukar","Sanichar","Et"],dayNamesMin:["So","Ma","Bu","Ve","Sh","Sa","Et"],digits:null,dateFormat:"dd-mm-yyyy",firstDay:0,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,i.local.invalidYear||i.regionalOptions[""].invalidYear);return o.leapYear(e.year()+(e.year()<1?1:0)+1469)},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(1-(n.dayOfWeek()||7),"d"),Math.floor((n.dayOfYear()-1)/7)+1},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,i.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(12===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)<6},toJD:function(t,e,r){var n=this._validate(t,e,r,i.local.invalidMonth),t=n.year();t<0&&t++;for(var a=n.day(),s=1;s<n.month();s++)a+=this.daysPerMonth[s-1];return a+o.toJD(t+1468,3,13)},fromJD:function(t){t=Math.floor(t+.5);for(var e=Math.floor((t-(this.jdEpoch-1))/366);t>=this.toJD(e+1,1,1);)e++;for(var r=t-Math.floor(this.toJD(e,1,1)+.5)+1,n=1;r>this.daysInMonth(e,n);)r-=this.daysInMonth(e,n),n++;return this.newDate(e,n,r)}}),i.calendars.nanakshahi=n},{"../main":581,"object-assign":470}],576:[function(t,e,r){function n(t){this.local=this.regionalOptions[t||""]||this.regionalOptions[""]}var i=t("../main"),a=t("object-assign");n.prototype=new i.baseCalendar,a(n.prototype,{name:"Nepali",jdEpoch:1700709.5,daysPerMonth:[31,31,32,32,31,30,30,29,30,29,30,30],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,daysPerYear:365,regionalOptions:{"":{name:"Nepali",epochs:["BBS","ABS"],monthNames:["Baisakh","Jestha","Ashadh","Shrawan","Bhadra","Ashwin","Kartik","Mangsir","Paush","Mangh","Falgun","Chaitra"],monthNamesShort:["Bai","Je","As","Shra","Bha","Ash","Kar","Mang","Pau","Ma","Fal","Chai"],dayNames:["Aaitabaar","Sombaar","Manglbaar","Budhabaar","Bihibaar","Shukrabaar","Shanibaar"],dayNamesShort:["Aaita","Som","Mangl","Budha","Bihi","Shukra","Shani"],dayNamesMin:["Aai","So","Man","Bu","Bi","Shu","Sha"],digits:null,dateFormat:"dd/mm/yyyy",firstDay:1,isRTL:!1}},leapYear:function(t){return this.daysInYear(t)!==this.daysPerYear},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(-n.dayOfWeek(),"d"),Math.floor((n.dayOfYear()-1)/7)+1},daysInYear:function(t){if(t=this._validate(t,this.minMonth,this.minDay,i.local.invalidYear).year(),void 0===this.NEPALI_CALENDAR_DATA[t])return this.daysPerYear;for(var e=0,r=this.minMonth;r<=12;r++)e+=this.NEPALI_CALENDAR_DATA[t][r];return e},daysInMonth:function(t,e){return t.year&&(e=t.month(),t=t.year()),this._validate(t,e,this.minDay,i.local.invalidMonth),void 0===this.NEPALI_CALENDAR_DATA[t]?this.daysPerMonth[e-1]:this.NEPALI_CALENDAR_DATA[t][e]},weekDay:function(t,e,r){return 6!==this.dayOfWeek(t,e,r)},toJD:function(t,e,r){var n=this._validate(t,e,r,i.local.invalidDate);t=n.year(),e=n.month(),r=n.day();var a=i.instance(),o=0,s=e,l=t;this._createMissingCalendarData(t);var u=t-(s>9||9===s&&r>=this.NEPALI_CALENDAR_DATA[l][0]?56:57);for(9!==e&&(o=r,
s--);9!==s;)s<=0&&(s=12,l--),o+=this.NEPALI_CALENDAR_DATA[l][s],s--;return 9===e?(o+=r-this.NEPALI_CALENDAR_DATA[l][0])<0&&(o+=a.daysInYear(u)):o+=this.NEPALI_CALENDAR_DATA[l][9]-this.NEPALI_CALENDAR_DATA[l][0],a.newDate(u,1,1).add(o,"d").toJD()},fromJD:function(t){var e=i.instance(),r=e.fromJD(t),n=r.year(),a=r.dayOfYear(),o=n+56;this._createMissingCalendarData(o);for(var s=9,l=this.NEPALI_CALENDAR_DATA[o][0],u=this.NEPALI_CALENDAR_DATA[o][s]-l+1;a>u;)s++,s>12&&(s=1,o++),u+=this.NEPALI_CALENDAR_DATA[o][s];var c=this.NEPALI_CALENDAR_DATA[o][s]-(u-a);return this.newDate(o,s,c)},_createMissingCalendarData:function(t){var e=this.daysPerMonth.slice(0);e.unshift(17);for(var r=t-1;r<t+2;r++)void 0===this.NEPALI_CALENDAR_DATA[r]&&(this.NEPALI_CALENDAR_DATA[r]=e)},NEPALI_CALENDAR_DATA:{1970:[18,31,31,32,31,31,31,30,29,30,29,30,30],1971:[18,31,31,32,31,32,30,30,29,30,29,30,30],1972:[17,31,32,31,32,31,30,30,30,29,29,30,30],1973:[19,30,32,31,32,31,30,30,30,29,30,29,31],1974:[19,31,31,32,30,31,31,30,29,30,29,30,30],1975:[18,31,31,32,32,30,31,30,29,30,29,30,30],1976:[17,31,32,31,32,31,30,30,30,29,29,30,31],1977:[18,31,32,31,32,31,31,29,30,29,30,29,31],1978:[18,31,31,32,31,31,31,30,29,30,29,30,30],1979:[18,31,31,32,32,31,30,30,29,30,29,30,30],1980:[17,31,32,31,32,31,30,30,30,29,29,30,31],1981:[18,31,31,31,32,31,31,29,30,30,29,30,30],1982:[18,31,31,32,31,31,31,30,29,30,29,30,30],1983:[18,31,31,32,32,31,30,30,29,30,29,30,30],1984:[17,31,32,31,32,31,30,30,30,29,29,30,31],1985:[18,31,31,31,32,31,31,29,30,30,29,30,30],1986:[18,31,31,32,31,31,31,30,29,30,29,30,30],1987:[18,31,32,31,32,31,30,30,29,30,29,30,30],1988:[17,31,32,31,32,31,30,30,30,29,29,30,31],1989:[18,31,31,31,32,31,31,30,29,30,29,30,30],1990:[18,31,31,32,31,31,31,30,29,30,29,30,30],1991:[18,31,32,31,32,31,30,30,29,30,29,30,30],1992:[17,31,32,31,32,31,30,30,30,29,30,29,31],1993:[18,31,31,31,32,31,31,30,29,30,29,30,30],1994:[18,31,31,32,31,31,31,30,29,30,29,30,30],1995:[17,31,32,31,32,31,30,30,30,29,29,30,30],1996:[17,31,32,31,32,31,30,30,30,29,30,29,31],1997:[18,31,31,32,31,31,31,30,29,30,29,30,30],1998:[18,31,31,32,31,31,31,30,29,30,29,30,30],1999:[17,31,32,31,32,31,30,30,30,29,29,30,31],2e3:[17,30,32,31,32,31,30,30,30,29,30,29,31],2001:[18,31,31,32,31,31,31,30,29,30,29,30,30],2002:[18,31,31,32,32,31,30,30,29,30,29,30,30],2003:[17,31,32,31,32,31,30,30,30,29,29,30,31],2004:[17,30,32,31,32,31,30,30,30,29,30,29,31],2005:[18,31,31,32,31,31,31,30,29,30,29,30,30],2006:[18,31,31,32,32,31,30,30,29,30,29,30,30],2007:[17,31,32,31,32,31,30,30,30,29,29,30,31],2008:[17,31,31,31,32,31,31,29,30,30,29,29,31],2009:[18,31,31,32,31,31,31,30,29,30,29,30,30],2010:[18,31,31,32,32,31,30,30,29,30,29,30,30],2011:[17,31,32,31,32,31,30,30,30,29,29,30,31],2012:[17,31,31,31,32,31,31,29,30,30,29,30,30],2013:[18,31,31,32,31,31,31,30,29,30,29,30,30],2014:[18,31,31,32,32,31,30,30,29,30,29,30,30],2015:[17,31,32,31,32,31,30,30,30,29,29,30,31],2016:[17,31,31,31,32,31,31,29,30,30,29,30,30],2017:[18,31,31,32,31,31,31,30,29,30,29,30,30],2018:[18,31,32,31,32,31,30,30,29,30,29,30,30],2019:[17,31,32,31,32,31,30,30,30,29,30,29,31],2020:[17,31,31,31,32,31,31,30,29,30,29,30,30],2021:[18,31,31,32,31,31,31,30,29,30,29,30,30],2022:[17,31,32,31,32,31,30,30,30,29,29,30,30],2023:[17,31,32,31,32,31,30,30,30,29,30,29,31],2024:[17,31,31,31,32,31,31,30,29,30,29,30,30],2025:[18,31,31,32,31,31,31,30,29,30,29,30,30],2026:[17,31,32,31,32,31,30,30,30,29,29,30,31],2027:[17,30,32,31,32,31,30,30,30,29,30,29,31],2028:[17,31,31,32,31,31,31,30,29,30,29,30,30],2029:[18,31,31,32,31,32,30,30,29,30,29,30,30],2030:[17,31,32,31,32,31,30,30,30,30,30,30,31],2031:[17,31,32,31,32,31,31,31,31,31,31,31,31],2032:[17,32,32,32,32,32,32,32,32,32,32,32,32],2033:[18,31,31,32,32,31,30,30,29,30,29,30,30],2034:[17,31,32,31,32,31,30,30,30,29,29,30,31],2035:[17,30,32,31,32,31,31,29,30,30,29,29,31],2036:[17,31,31,32,31,31,31,30,29,30,29,30,30],2037:[18,31,31,32,32,31,30,30,29,30,29,30,30],2038:[17,31,32,31,32,31,30,30,30,29,29,30,31],2039:[17,31,31,31,32,31,31,29,30,30,29,30,30],2040:[17,31,31,32,31,31,31,30,29,30,29,30,30],2041:[18,31,31,32,32,31,30,30,29,30,29,30,30],2042:[17,31,32,31,32,31,30,30,30,29,29,30,31],2043:[17,31,31,31,32,31,31,29,30,30,29,30,30],2044:[17,31,31,32,31,31,31,30,29,30,29,30,30],2045:[18,31,32,31,32,31,30,30,29,30,29,30,30],2046:[17,31,32,31,32,31,30,30,30,29,29,30,31],2047:[17,31,31,31,32,31,31,30,29,30,29,30,30],2048:[17,31,31,32,31,31,31,30,29,30,29,30,30],2049:[17,31,32,31,32,31,30,30,30,29,29,30,30],2050:[17,31,32,31,32,31,30,30,30,29,30,29,31],2051:[17,31,31,31,32,31,31,30,29,30,29,30,30],2052:[17,31,31,32,31,31,31,30,29,30,29,30,30],2053:[17,31,32,31,32,31,30,30,30,29,29,30,30],2054:[17,31,32,31,32,31,30,30,30,29,30,29,31],2055:[17,31,31,32,31,31,31,30,29,30,30,29,30],2056:[17,31,31,32,31,32,30,30,29,30,29,30,30],2057:[17,31,32,31,32,31,30,30,30,29,29,30,31],2058:[17,30,32,31,32,31,30,30,30,29,30,29,31],2059:[17,31,31,32,31,31,31,30,29,30,29,30,30],2060:[17,31,31,32,32,31,30,30,29,30,29,30,30],2061:[17,31,32,31,32,31,30,30,30,29,29,30,31],2062:[17,30,32,31,32,31,31,29,30,29,30,29,31],2063:[17,31,31,32,31,31,31,30,29,30,29,30,30],2064:[17,31,31,32,32,31,30,30,29,30,29,30,30],2065:[17,31,32,31,32,31,30,30,30,29,29,30,31],2066:[17,31,31,31,32,31,31,29,30,30,29,29,31],2067:[17,31,31,32,31,31,31,30,29,30,29,30,30],2068:[17,31,31,32,32,31,30,30,29,30,29,30,30],2069:[17,31,32,31,32,31,30,30,30,29,29,30,31],2070:[17,31,31,31,32,31,31,29,30,30,29,30,30],2071:[17,31,31,32,31,31,31,30,29,30,29,30,30],2072:[17,31,32,31,32,31,30,30,29,30,29,30,30],2073:[17,31,32,31,32,31,30,30,30,29,29,30,31],2074:[17,31,31,31,32,31,31,30,29,30,29,30,30],2075:[17,31,31,32,31,31,31,30,29,30,29,30,30],2076:[16,31,32,31,32,31,30,30,30,29,29,30,30],2077:[17,31,32,31,32,31,30,30,30,29,30,29,31],2078:[17,31,31,31,32,31,31,30,29,30,29,30,30],2079:[17,31,31,32,31,31,31,30,29,30,29,30,30],2080:[16,31,32,31,32,31,30,30,30,29,29,30,30],2081:[17,31,31,32,32,31,30,30,30,29,30,30,30],2082:[17,31,32,31,32,31,30,30,30,29,30,30,30],2083:[17,31,31,32,31,31,30,30,30,29,30,30,30],2084:[17,31,31,32,31,31,30,30,30,29,30,30,30],2085:[17,31,32,31,32,31,31,30,30,29,30,30,30],2086:[17,31,32,31,32,31,30,30,30,29,30,30,30],2087:[16,31,31,32,31,31,31,30,30,29,30,30,30],2088:[16,30,31,32,32,30,31,30,30,29,30,30,30],2089:[17,31,32,31,32,31,30,30,30,29,30,30,30],2090:[17,31,32,31,32,31,30,30,30,29,30,30,30],2091:[16,31,31,32,31,31,31,30,30,29,30,30,30],2092:[16,31,31,32,32,31,30,30,30,29,30,30,30],2093:[17,31,32,31,32,31,30,30,30,29,30,30,30],2094:[17,31,31,32,31,31,30,30,30,29,30,30,30],2095:[17,31,31,32,31,31,31,30,29,30,30,30,30],2096:[17,30,31,32,32,31,30,30,29,30,29,30,30],2097:[17,31,32,31,32,31,30,30,30,29,30,30,30],2098:[17,31,31,32,31,31,31,29,30,29,30,30,31],2099:[17,31,31,32,31,31,31,30,29,29,30,30,30],2100:[17,31,32,31,32,30,31,30,29,30,29,30,30]}}),i.calendars.nepali=n},{"../main":581,"object-assign":470}],577:[function(t,e,r){function n(t){this.local=this.regionalOptions[t||""]||this.regionalOptions[""]}function i(t,e){return t-e*Math.floor(t/e)}var a=t("../main"),o=t("object-assign");n.prototype=new a.baseCalendar,o(n.prototype,{name:"Persian",jdEpoch:1948320.5,daysPerMonth:[31,31,31,31,31,31,30,30,30,30,30,29],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Persian",epochs:["BP","AP"],monthNames:["Farvardin","Ordibehesht","Khordad","Tir","Mordad","Shahrivar","Mehr","Aban","Azar","Day","Bahman","Esfand"],monthNamesShort:["Far","Ord","Kho","Tir","Mor","Sha","Meh","Aba","Aza","Day","Bah","Esf"],dayNames:["Yekshambe","Doshambe","Seshambe","Ch\xe6harshambe","Panjshambe","Jom'e","Shambe"],dayNamesShort:["Yek","Do","Se","Ch\xe6","Panj","Jom","Sha"],dayNamesMin:["Ye","Do","Se","Ch","Pa","Jo","Sh"],digits:null,dateFormat:"yyyy/mm/dd",firstDay:6,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,a.local.invalidYear);return 682*((e.year()-(e.year()>0?474:473))%2820+474+38)%2816<682},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(-(n.dayOfWeek()+1)%7,"d"),Math.floor((n.dayOfYear()-1)/7)+1},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,a.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(12===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return 5!==this.dayOfWeek(t,e,r)},toJD:function(t,e,r){var n=this._validate(t,e,r,a.local.invalidDate);t=n.year(),e=n.month(),r=n.day();var o=t-(t>=0?474:473),s=474+i(o,2820);return r+(e<=7?31*(e-1):30*(e-1)+6)+Math.floor((682*s-110)/2816)+365*(s-1)+1029983*Math.floor(o/2820)+this.jdEpoch-1},fromJD:function(t){t=Math.floor(t)+.5;var e=t-this.toJD(475,1,1),r=Math.floor(e/1029983),n=i(e,1029983),a=2820;if(1029982!==n){var o=Math.floor(n/366),s=i(n,366);a=Math.floor((2134*o+2816*s+2815)/1028522)+o+1}var l=a+2820*r+474;l=l<=0?l-1:l;var u=t-this.toJD(l,1,1)+1,c=u<=186?Math.ceil(u/31):Math.ceil((u-6)/30),h=t-this.toJD(l,c,1)+1;return this.newDate(l,c,h)}}),a.calendars.persian=n,a.calendars.jalali=n},{"../main":581,"object-assign":470}],578:[function(t,e,r){function n(t){this.local=this.regionalOptions[t||""]||this.regionalOptions[""]}var i=t("../main"),a=t("object-assign"),o=i.instance();n.prototype=new i.baseCalendar,a(n.prototype,{name:"Taiwan",jdEpoch:2419402.5,yearsOffset:1911,daysPerMonth:[31,28,31,30,31,30,31,31,30,31,30,31],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Taiwan",epochs:["BROC","ROC"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],digits:null,dateFormat:"yyyy/mm/dd",firstDay:1,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,i.local.invalidYear),t=this._t2gYear(e.year());return o.leapYear(t)},weekOfYear:function(t,e,r){var n=this._validate(t,this.minMonth,this.minDay,i.local.invalidYear),t=this._t2gYear(n.year());return o.weekOfYear(t,n.month(),n.day())},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,i.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(2===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)<6},toJD:function(t,e,r){var n=this._validate(t,e,r,i.local.invalidDate),t=this._t2gYear(n.year());return o.toJD(t,n.month(),n.day())},fromJD:function(t){var e=o.fromJD(t),r=this._g2tYear(e.year());return this.newDate(r,e.month(),e.day())},_t2gYear:function(t){return t+this.yearsOffset+(t>=-this.yearsOffset&&t<=-1?1:0)},_g2tYear:function(t){return t-this.yearsOffset-(t>=1&&t<=this.yearsOffset?1:0)}}),i.calendars.taiwan=n},{"../main":581,"object-assign":470}],579:[function(t,e,r){function n(t){this.local=this.regionalOptions[t||""]||this.regionalOptions[""]}var i=t("../main"),a=t("object-assign"),o=i.instance();n.prototype=new i.baseCalendar,a(n.prototype,{name:"Thai",jdEpoch:1523098.5,yearsOffset:543,daysPerMonth:[31,28,31,30,31,30,31,31,30,31,30,31],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Thai",epochs:["BBE","BE"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],digits:null,dateFormat:"dd/mm/yyyy",firstDay:0,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,i.local.invalidYear),t=this._t2gYear(e.year());return o.leapYear(t)},weekOfYear:function(t,e,r){var n=this._validate(t,this.minMonth,this.minDay,i.local.invalidYear),t=this._t2gYear(n.year());return o.weekOfYear(t,n.month(),n.day())},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,i.local.invalidMonth);return this.daysPerMonth[r.month()-1]+(2===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)<6},toJD:function(t,e,r){var n=this._validate(t,e,r,i.local.invalidDate),t=this._t2gYear(n.year());return o.toJD(t,n.month(),n.day())},fromJD:function(t){var e=o.fromJD(t),r=this._g2tYear(e.year());return this.newDate(r,e.month(),e.day())},_t2gYear:function(t){return t-this.yearsOffset-(t>=1&&t<=this.yearsOffset?1:0)},_g2tYear:function(t){return t+this.yearsOffset+(t>=-this.yearsOffset&&t<=-1?1:0)}}),i.calendars.thai=n},{"../main":581,"object-assign":470}],580:[function(t,e,r){function n(t){this.local=this.regionalOptions[t||""]||this.regionalOptions[""]}var i=t("../main"),a=t("object-assign");n.prototype=new i.baseCalendar,a(n.prototype,{name:"UmmAlQura",hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Umm al-Qura",epochs:["BH","AH"],monthNames:["Al-Muharram","Safar","Rabi' al-awwal","Rabi' Al-Thani","Jumada Al-Awwal","Jumada Al-Thani","Rajab","Sha'aban","Ramadan","Shawwal","Dhu al-Qi'dah","Dhu al-Hijjah"],monthNamesShort:["Muh","Saf","Rab1","Rab2","Jum1","Jum2","Raj","Sha'","Ram","Shaw","DhuQ","DhuH"],dayNames:["Yawm al-Ahad","Yawm al-Ithnain","Yawm al-Thal\u0101th\u0101\u2019","Yawm al-Arba\u2018\u0101\u2019","Yawm al-Kham\u012bs","Yawm al-Jum\u2018a","Yawm al-Sabt"],dayNamesMin:["Ah","Ith","Th","Ar","Kh","Ju","Sa"],digits:null,dateFormat:"yyyy/mm/dd",firstDay:6,isRTL:!0}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,i.local.invalidYear);return 355===this.daysInYear(e.year())},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(-n.dayOfWeek(),"d"),Math.floor((n.dayOfYear()-1)/7)+1},daysInYear:function(t){for(var e=0,r=1;r<=12;r++)e+=this.daysInMonth(t,r);return e},daysInMonth:function(t,e){for(var r=this._validate(t,e,this.minDay,i.local.invalidMonth),n=r.toJD()-24e5+.5,a=0,s=0;s<o.length;s++){if(o[s]>n)return o[a]-o[a-1];a++}return 30},weekDay:function(t,e,r){return 5!==this.dayOfWeek(t,e,r)},toJD:function(t,e,r){var n=this._validate(t,e,r,i.local.invalidDate),a=12*(n.year()-1)+n.month()-15292;return n.day()+o[a-1]-1+24e5-.5},fromJD:function(t){for(var e=t-24e5+.5,r=0,n=0;n<o.length&&!(o[n]>e);n++)r++;var i=r+15292,a=Math.floor((i-1)/12),s=a+1,l=i-12*a,u=e-o[r-1]+1;return this.newDate(s,l,u)},isValid:function(t,e,r){var n=i.baseCalendar.prototype.isValid.apply(this,arguments);return n&&(t=null!=t.year?t.year:t,n=t>=1276&&t<=1500),n},_validate:function(t,e,r,n){var a=i.baseCalendar.prototype._validate.apply(this,arguments);if(a.year<1276||a.year>1500)throw n.replace(/\{0\}/,this.local.name);return a}}),i.calendars.ummalqura=n;var o=[20,50,79,109,138,168,197,227,256,286,315,345,374,404,433,463,492,522,551,581,611,641,670,700,729,759,788,818,847,877,906,936,965,995,1024,1054,1083,1113,1142,1172,1201,1231,1260,1290,1320,1350,1379,1409,1438,1468,1497,1527,1556,1586,1615,1645,1674,1704,1733,1763,1792,1822,1851,1881,1910,1940,1969,1999,2028,2058,2087,2117,2146,2176,2205,2235,2264,2294,2323,2353,2383,2413,2442,2472,2501,2531,2560,2590,2619,2649,2678,2708,2737,2767,2796,2826,2855,2885,2914,2944,2973,3003,3032,3062,3091,3121,3150,3180,3209,3239,3268,3298,3327,3357,3386,3416,3446,3476,3505,3535,3564,3594,3623,3653,3682,3712,3741,3771,3800,3830,3859,3889,3918,3948,3977,4007,4036,4066,4095,4125,4155,4185,4214,4244,4273,4303,4332,4362,4391,4421,4450,4480,4509,4539,4568,4598,4627,4657,4686,4716,4745,4775,4804,4834,4863,4893,4922,4952,4981,5011,5040,5070,5099,5129,5158,5188,5218,5248,5277,5307,5336,5366,5395,5425,5454,5484,5513,5543,5572,5602,5631,5661,5690,5720,5749,5779,5808,5838,5867,5897,5926,5956,5985,6015,6044,6074,6103,6133,6162,6192,6221,6251,6281,6311,6340,6370,6399,6429,6458,6488,6517,6547,6576,6606,6635,6665,6694,6724,6753,6783,6812,6842,6871,6901,6930,6960,6989,7019,7048,7078,7107,7137,7166,7196,7225,7255,7284,7314,7344,7374,7403,7433,7462,7492,7521,7551,7580,7610,7639,7669,7698,7728,7757,7787,7816,7846,7875,7905,7934,7964,7993,8023,8053,8083,8112,8142,8171,8201,8230,8260,8289,8319,8348,8378,8407,8437,8466,8496,8525,8555,8584,8614,8643,8673,8702,8732,8761,8791,8821,8850,8880,8909,8938,8968,8997,9027,9056,9086,9115,9145,9175,9205,9234,9264,9293,9322,9352,9381,9410,9440,9470,9499,9529,9559,9589,9618,9648,9677,9706,9736,9765,9794,9824,9853,9883,9913,9943,9972,10002,10032,10061,10090,10120,10149,10178,10208,10237,10267,10297,10326,10356,10386,10415,10445,10474,10504,10533,10562,10592,10621,10651,10680,10710,10740,10770,10799,10829,10858,10888,10917,10947,10976,11005,11035,11064,11094,11124,11153,11183,11213,11242,11272,11301,11331,11360,11389,11419,11448,11478,11507,11537,11567,11596,11626,11655,11685,11715,11744,11774,11803,11832,11862,11891,11921,11950,11980,12010,12039,12069,12099,12128,12158,12187,12216,12246,12275,12304,12334,12364,12393,12423,12453,12483,12512,12542,12571,12600,12630,12659,12688,12718,12747,12777,12807,12837,12866,12896,12926,12955,12984,13014,13043,13072,13102,13131,13161,13191,13220,13250,13280,13310,13339,13368,13398,13427,13456,13486,13515,13545,13574,13604,13634,13664,13693,13723,13752,13782,13811,13840,13870,13899,13929,13958,13988,14018,14047,14077,14107,14136,14166,14195,14224,14254,14283,14313,14342,14372,14401,14431,14461,14490,14520,14550,14579,14609,14638,14667,14697,14726,14756,14785,14815,14844,14874,14904,14933,14963,14993,15021,15051,15081,15110,15140,15169,15199,15228,15258,15287,15317,15347,15377,15406,15436,15465,15494,15524,15553,15582,15612,15641,15671,15701,15731,15760,15790,15820,15849,15878,15908,15937,15966,15996,16025,16055,16085,16114,16144,16174,16204,16233,16262,16292,16321,16350,16380,16409,16439,16468,16498,16528,16558,16587,16617,16646,16676,16705,16734,16764,16793,16823,16852,16882,16912,16941,16971,17001,17030,17060,17089,17118,17148,17177,17207,17236,17266,17295,17325,17355,17384,17414,17444,17473,17502,17532,17561,17591,17620,17650,17679,17709,17738,17768,17798,17827,17857,17886,17916,17945,17975,18004,18034,18063,18093,18122,18152,18181,18211,18241,18270,18300,18330,18359,18388,18418,18447,18476,18506,18535,18565,18595,18625,18654,18684,18714,18743,18772,18802,18831,18860,18890,18919,18949,18979,19008,19038,19068,19098,19127,19156,19186,19215,19244,19274,19303,19333,19362,19392,19422,19452,19481,19511,19540,19570,19599,19628,19658,19687,19717,19746,19776,19806,19836,19865,19895,19924,19954,19983,20012,20042,20071,20101,20130,20160,20190,20219,20249,20279,20308,20338,20367,20396,20426,20455,20485,20514,20544,20573,20603,20633,20662,20692,20721,20751,20780,20810,20839,20869,20898,20928,20957,20987,21016,21046,21076,21105,21135,21164,21194,21223,21253,21282,21312,21341,21371,21400,21430,21459,21489,21519,21548,21578,21607,21637,21666,21696,21725,21754,21784,21813,21843,21873,21902,21932,21962,21991,22021,22050,22080,22109,22138,22168,22197,22227,22256,22286,22316,22346,22375,22405,22434,22464,22493,22522,22552,22581,22611,22640,22670,22700,22730,22759,22789,22818,22848,22877,22906,22936,22965,22994,23024,23054,23083,23113,23143,23173,23202,23232,23261,23290,23320,23349,23379,23408,23438,23467,23497,23527,23556,23586,23616,23645,23674,23704,23733,23763,23792,23822,23851,23881,23910,23940,23970,23999,24029,24058,24088,24117,24147,24176,24206,24235,24265,24294,24324,24353,24383,24413,24442,24472,24501,24531,24560,24590,24619,24648,24678,24707,24737,24767,24796,24826,24856,24885,24915,24944,24974,25003,25032,25062,25091,25121,25150,25180,25210,25240,25269,25299,25328,25358,25387,25416,25446,25475,25505,25534,25564,25594,25624,25653,25683,25712,25742,25771,25800,25830,25859,25888,25918,25948,25977,26007,26037,26067,26096,26126,26155,26184,26214,26243,26272,26302,26332,26361,26391,26421,26451,26480,26510,26539,26568,26598,26627,26656,26686,26715,26745,26775,26805,26834,26864,26893,26923,26952,26982,27011,27041,27070,27099,27129,27159,27188,27218,27248,27277,27307,27336,27366,27395,27425,27454,27484,27513,27542,27572,27602,27631,27661,27691,27720,27750,27779,27809,27838,27868,27897,27926,27956,27985,28015,28045,28074,28104,28134,28163,28193,28222,28252,28281,28310,28340,28369,28399,28428,28458,28488,28517,28547,28577,28607,28636,28665,28695,28724,28754,28783,28813,28843,28872,28901,28931,28960,28990,29019,29049,29078,29108,29137,29167,29196,29226,29255,29285,29315,29345,29375,29404,29434,29463,29492,29522,29551,29580,29610,29640,29669,29699,29729,29759,29788,29818,29847,29876,29906,29935,29964,29994,30023,30053,30082,30112,30141,30171,30200,30230,30259,30289,30318,30348,30378,30408,30437,30467,30496,30526,30555,30585,30614,30644,30673,30703,30732,30762,30791,30821,30850,30880,30909,30939,30968,30998,31027,31057,31086,31116,31145,31175,31204,31234,31263,31293,31322,31352,31381,31411,31441,31471,31500,31530,31559,31589,31618,31648,31676,31706,31736,31766,31795,31825,31854,31884,31913,31943,31972,32002,32031,32061,32090,32120,32150,32180,32209,32239,32268,32298,32327,32357,32386,32416,32445,32475,32504,32534,32563,32593,32622,32652,32681,32711,32740,32770,32799,32829,32858,32888,32917,32947,32976,33006,33035,33065,33094,33124,33153,33183,33213,33243,33272,33302,33331,33361,33390,33420,33450,33479,33509,33539,33568,33598,33627,33657,33686,33716,33745,33775,33804,33834,33863,33893,33922,33952,33981,34011,34040,34069,34099,34128,34158,34187,34217,34247,34277,34306,34336,34365,34395,34424,34454,34483,34512,34542,34571,34601,34631,34660,34690,34719,34749,34778,34808,34837,34867,34896,34926,34955,34985,35015,35044,35074,35103,35133,35162,35192,35222,35251,35280,35310,35340,35370,35399,35429,35458,35488,35517,35547,35576,35605,35635,35665,35694,35723,35753,35782,35811,35841,35871,35901,35930,35960,35989,36019,36048,36078,36107,36136,36166,36195,36225,36254,36284,36314,36343,36373,36403,36433,36462,36492,36521,36551,36580,36610,36639,36669,36698,36728,36757,36786,36816,36845,36875,36904,36934,36963,36993,37022,37052,37081,37111,37141,37170,37200,37229,37259,37288,37318,37347,37377,37406,37436,37465,37495,37524,37554,37584,37613,37643,37672,37701,37731,37760,37790,37819,37849,37878,37908,37938,37967,37997,38027,38056,38085,38115,38144,38174,38203,38233,38262,38292,38322,38351,38381,38410,38440,38469,38499,38528,38558,38587,38617,38646,38676,38705,38735,38764,38794,38823,38853,38882,38912,38941,38971,39001,39030,39059,39089,39118,39148,39178,39208,39237,39267,39297,39326,39355,39385,39414,39444,39473,39503,39532,39562,39592,39621,39650,39680,39709,39739,39768,39798,39827,39857,39886,39916,39946,39975,40005,40035,40064,40094,40123,40153,40182,40212,40241,40271,40300,40330,40359,40389,40418,40448,40477,40507,40536,40566,40595,40625,40655,40685,40714,40744,40773,40803,40832,40862,40892,40921,40951,40980,41009,41039,41068,41098,41127,41157,41186,41216,41245,41275,41304,41334,41364,41393,41422,41452,41481,41511,41540,41570,41599,41629,41658,41688,41718,41748,41777,41807,41836,41865,41894,41924,41953,41983,42012,42042,42072,42102,42131,42161,42190,42220,42249,42279,42308,42337,42367,42397,42426,42456,42485,42515,42545,42574,42604,42633,42662,42692,42721,42751,42780,42810,42839,42869,42899,42929,42958,42988,43017,43046,43076,43105,43135,43164,43194,43223,43253,43283,43312,43342,43371,43401,43430,43460,43489,43519,43548,43578,43607,43637,43666,43696,43726,43755,43785,43814,43844,43873,43903,43932,43962,43991,44021,44050,44080,44109,44139,44169,44198,44228,44258,44287,44317,44346,44375,44405,44434,44464,44493,44523,44553,44582,44612,44641,44671,44700,44730,44759,44788,44818,44847,44877,44906,44936,44966,44996,45025,45055,45084,45114,45143,45172,45202,45231,45261,45290,45320,45350,45380,45409,45439,45468,45498,45527,45556,45586,45615,45644,45674,45704,45733,45763,45793,45823,45852,45882,45911,45940,45970,45999,46028,46058,46088,46117,46147,46177,46206,46236,46265,46295,46324,46354,46383,46413,46442,46472,46501,46531,46560,46590,46620,46649,46679,46708,46738,46767,46797,46826,46856,46885,46915,46944,46974,47003,47033,47063,47092,47122,47151,47181,47210,47240,47269,47298,47328,47357,47387,47417,47446,47476,47506,47535,47565,47594,47624,47653,47682,47712,47741,47771,47800,47830,47860,47890,47919,47949,47978,48008,48037,48066,48096,48125,48155,48184,48214,48244,48273,48303,48333,48362,48392,48421,48450,48480,48509,48538,48568,48598,48627,48657,48687,48717,48746,48776,48805,48834,48864,48893,48922,48952,48982,49011,49041,49071,49100,49130,49160,49189,49218,49248,49277,49306,49336,49365,49395,49425,49455,49484,49514,49543,49573,49602,49632,49661,49690,49720,49749,49779,49809,49838,49868,49898,49927,49957,49986,50016,50045,50075,50104,50133,50163,50192,50222,50252,50281,50311,50340,50370,50400,50429,50459,50488,50518,50547,50576,50606,50635,50665,50694,50724,50754,50784,50813,50843,50872,50902,50931,50960,50990,51019,51049,51078,51108,51138,51167,51197,51227,51256,51286,51315,51345,51374,51403,51433,51462,51492,51522,51552,51582,51611,51641,51670,51699,51729,51758,51787,51816,51846,51876,51906,51936,51965,51995,52025,52054,52083,52113,52142,52171,52200,52230,52260,52290,52319,52349,52379,52408,52438,52467,52497,52526,52555,52585,52614,52644,52673,52703,52733,52762,52792,52822,52851,52881,52910,52939,52969,52998,53028,53057,53087,53116,53146,53176,53205,53235,53264,53294,53324,53353,53383,53412,53441,53471,53500,53530,53559,53589,53619,53648,53678,53708,53737,53767,53796,53825,53855,53884,53913,53943,53973,54003,54032,54062,54092,54121,54151,54180,54209,54239,54268,54297,54327,54357,54387,54416,54446,54476,54505,54535,54564,54593,54623,54652,54681,54711,54741,54770,54800,54830,54859,54889,54919,54948,54977,55007,55036,55066,55095,55125,55154,55184,55213,55243,55273,55302,55332,55361,55391,55420,55450,55479,55508,55538,55567,55597,55627,55657,55686,55716,55745,55775,55804,55834,55863,55892,55922,55951,55981,56011,56040,56070,56100,56129,56159,56188,56218,56247,56276,56306,56335,56365,56394,56424,56454,56483,56513,56543,56572,56601,56631,56660,56690,56719,56749,56778,56808,56837,56867,56897,56926,56956,56985,57015,57044,57074,57103,57133,57162,57192,57221,57251,57280,57310,57340,57369,57399,57429,57458,57487,57517,57546,57576,57605,57634,57664,57694,57723,57753,57783,57813,57842,57871,57901,57930,57959,57989,58018,58048,58077,58107,58137,58167,58196,58226,58255,58285,58314,58343,58373,58402,58432,58461,58491,58521,58551,58580,58610,58639,58669,58698,58727,58757,58786,58816,58845,58875,58905,58934,58964,58994,59023,59053,59082,59111,59141,59170,59200,59229,59259,59288,59318,59348,59377,59407,59436,59466,59495,59525,59554,59584,59613,59643,59672,59702,59731,59761,59791,59820,59850,59879,59909,59939,59968,59997,60027,60056,60086,60115,60145,60174,60204,60234,60264,60293,60323,60352,60381,60411,60440,60469,60499,60528,60558,60588,60618,60648,60677,60707,60736,60765,60795,60824,60853,60883,60912,60942,60972,61002,61031,61061,61090,61120,61149,61179,61208,61237,61267,61296,61326,61356,61385,61415,61445,61474,61504,61533,61563,61592,61621,61651,61680,61710,61739,61769,61799,61828,61858,61888,61917,61947,61976,62006,62035,62064,62094,62123,62153,62182,62212,62242,62271,62301,62331,62360,62390,62419,62448,62478,62507,62537,62566,62596,62625,62655,62685,62715,62744,62774,62803,62832,62862,62891,62921,62950,62980,63009,63039,63069,63099,63128,63157,63187,63216,63246,63275,63305,63334,63363,63393,63423,63453,63482,63512,63541,63571,63600,63630,63659,63689,63718,63747,63777,63807,63836,63866,63895,63925,63955,63984,64014,64043,64073,64102,64131,64161,64190,64220,64249,64279,64309,64339,64368,64398,64427,64457,64486,64515,64545,64574,64603,64633,64663,64692,64722,64752,64782,64811,64841,64870,64899,64929,64958,64987,65017,65047,65076,65106,65136,65166,65195,65225,65254,65283,65313,65342,65371,65401,65431,65460,65490,65520,65549,65579,65608,65638,65667,65697,65726,65755,65785,65815,65844,65874,65903,65933,65963,65992,66022,66051,66081,66110,66140,66169,66199,66228,66258,66287,66317,66346,66376,66405,66435,66465,66494,66524,66553,66583,66612,66641,66671,66700,66730,66760,66789,66819,66849,66878,66908,66937,66967,66996,67025,67055,67084,67114,67143,67173,67203,67233,67262,67292,67321,67351,67380,67409,67439,67468,67497,67527,67557,67587,67617,67646,67676,67705,67735,67764,67793,67823,67852,67882,67911,67941,67971,68e3,68030,68060,68089,68119,68148,68177,68207,68236,68266,68295,68325,68354,68384,68414,68443,68473,68502,68532,68561,68591,68620,68650,68679,68708,68738,68768,68797,68827,68857,68886,68916,68946,68975,69004,69034,69063,69092,69122,69152,69181,69211,69240,69270,69300,69330,69359,69388,69418,69447,69476,69506,69535,69565,69595,69624,69654,69684,69713,69743,69772,69802,69831,69861,69890,69919,69949,69978,70008,70038,70067,70097,70126,70156,70186,70215,70245,70274,70303,70333,70362,70392,70421,70451,70481,70510,70540,70570,70599,70629,70658,70687,70717,70746,70776,70805,70835,70864,70894,70924,70954,70983,71013,71042,71071,71101,71130,71159,71189,71218,71248,71278,71308,71337,71367,71397,71426,71455,71485,71514,71543,71573,71602,71632,71662,71691,71721,71751,71781,71810,71839,71869,71898,71927,71957,71986,72016,72046,72075,72105,72135,72164,72194,72223,72253,72282,72311,72341,72370,72400,72429,72459,72489,72518,72548,72577,72607,72637,72666,72695,72725,72754,72784,72813,72843,72872,72902,72931,72961,72991,73020,73050,73080,73109,73139,73168,73197,73227,73256,73286,73315,73345,73375,73404,73434,73464,73493,73523,73552,73581,73611,73640,73669,73699,73729,73758,73788,73818,73848,73877,73907,73936,73965,73995,74024,74053,74083,74113,74142,74172,74202,74231,74261,74291,74320,74349,74379,74408,74437,74467,74497,74526,74556,74586,74615,74645,74675,74704,74733,74763,74792,74822,74851,74881,74910,74940,74969,74999,75029,75058,75088,75117,75147,75176,75206,75235,75264,75294,75323,75353,75383,75412,75442,75472,75501,75531,75560,75590,75619,75648,75678,75707,75737,75766,75796,75826,75856,75885,75915,75944,75974,76003,76032,76062,76091,76121,76150,76180,76210,76239,76269,76299,76328,76358,76387,76416,76446,76475,76505,76534,76564,76593,76623,76653,76682,76712,76741,76771,76801,76830,76859,76889,76918,76948,76977,77007,77036,77066,77096,77125,77155,77185,77214,77243,77273,77302,77332,77361,77390,77420,77450,77479,77509,77539,77569,77598,77627,77657,77686,77715,77745,77774,77804,77833,77863,77893,77923,77952,77982,78011,78041,78070,78099,78129,78158,78188,78217,78247,78277,78307,78336,78366,78395,78425,78454,78483,78513,78542,78572,78601,78631,78661,78690,78720,78750,78779,78808,78838,78867,78897,78926,78956,78985,79015,79044,79074,79104,79133,79163,79192,79222,79251,79281,79310,79340,79369,79399,79428,79458,79487,79517,79546,79576,79606,79635,79665,79695,79724,79753,79783,79812,79841,79871,79900,79930,79960,79990]},{"../main":581,"object-assign":470}],581:[function(t,e,r){function n(){this.regionalOptions=[],this.regionalOptions[""]={invalidCalendar:"Calendar {0} not found",invalidDate:"Invalid {0} date",invalidMonth:"Invalid {0} month",invalidYear:"Invalid {0} year",differentCalendars:"Cannot mix {0} and {1} dates"},this.local=this.regionalOptions[""],this.calendars={},this._localCals={}}function i(t,e,r,n){if(this._calendar=t,this._year=e,this._month=r,this._day=n,0===this._calendar._validateLevel&&!this._calendar.isValid(this._year,this._month,this._day))throw(u.local.invalidDate||u.regionalOptions[""].invalidDate).replace(/\{0\}/,this._calendar.local.name)}function a(t,e){return t=""+t,"000000".substring(0,e-t.length)+t}function o(){this.shortYearCutoff="+10"}function s(t){this.local=this.regionalOptions[t]||this.regionalOptions[""]}var l=t("object-assign");l(n.prototype,{instance:function(t,e){t=(t||"gregorian").toLowerCase(),e=e||"";var r=this._localCals[t+"-"+e];if(!r&&this.calendars[t]&&(r=new this.calendars[t](e),this._localCals[t+"-"+e]=r),!r)throw(this.local.invalidCalendar||this.regionalOptions[""].invalidCalendar).replace(/\{0\}/,t);return r},newDate:function(t,e,r,n,i){return n=(null!=t&&t.year?t.calendar():"string"==typeof n?this.instance(n,i):n)||this.instance(),n.newDate(t,e,r)},substituteDigits:function(t){
return function(e){return(e+"").replace(/[0-9]/g,function(e){return t[e]})}},substituteChineseDigits:function(t,e){return function(r){for(var n="",i=0;r>0;){var a=r%10;n=(0===a?"":t[a]+e[i])+n,i++,r=Math.floor(r/10)}return 0===n.indexOf(t[1]+e[1])&&(n=n.substr(1)),n||t[0]}}}),l(i.prototype,{newDate:function(t,e,r){return this._calendar.newDate(null==t?this:t,e,r)},year:function(t){return 0===arguments.length?this._year:this.set(t,"y")},month:function(t){return 0===arguments.length?this._month:this.set(t,"m")},day:function(t){return 0===arguments.length?this._day:this.set(t,"d")},date:function(t,e,r){if(!this._calendar.isValid(t,e,r))throw(u.local.invalidDate||u.regionalOptions[""].invalidDate).replace(/\{0\}/,this._calendar.local.name);return this._year=t,this._month=e,this._day=r,this},leapYear:function(){return this._calendar.leapYear(this)},epoch:function(){return this._calendar.epoch(this)},formatYear:function(){return this._calendar.formatYear(this)},monthOfYear:function(){return this._calendar.monthOfYear(this)},weekOfYear:function(){return this._calendar.weekOfYear(this)},daysInYear:function(){return this._calendar.daysInYear(this)},dayOfYear:function(){return this._calendar.dayOfYear(this)},daysInMonth:function(){return this._calendar.daysInMonth(this)},dayOfWeek:function(){return this._calendar.dayOfWeek(this)},weekDay:function(){return this._calendar.weekDay(this)},extraInfo:function(){return this._calendar.extraInfo(this)},add:function(t,e){return this._calendar.add(this,t,e)},set:function(t,e){return this._calendar.set(this,t,e)},compareTo:function(t){if(this._calendar.name!==t._calendar.name)throw(u.local.differentCalendars||u.regionalOptions[""].differentCalendars).replace(/\{0\}/,this._calendar.local.name).replace(/\{1\}/,t._calendar.local.name);var e=this._year!==t._year?this._year-t._year:this._month!==t._month?this.monthOfYear()-t.monthOfYear():this._day-t._day;return 0===e?0:e<0?-1:1},calendar:function(){return this._calendar},toJD:function(){return this._calendar.toJD(this)},fromJD:function(t){return this._calendar.fromJD(t)},toJSDate:function(){return this._calendar.toJSDate(this)},fromJSDate:function(t){return this._calendar.fromJSDate(t)},toString:function(){return(this.year()<0?"-":"")+a(Math.abs(this.year()),4)+"-"+a(this.month(),2)+"-"+a(this.day(),2)}}),l(o.prototype,{_validateLevel:0,newDate:function(t,e,r){return null==t?this.today():(t.year&&(this._validate(t,e,r,u.local.invalidDate||u.regionalOptions[""].invalidDate),r=t.day(),e=t.month(),t=t.year()),new i(this,t,e,r))},today:function(){return this.fromJSDate(new Date)},epoch:function(t){return this._validate(t,this.minMonth,this.minDay,u.local.invalidYear||u.regionalOptions[""].invalidYear).year()<0?this.local.epochs[0]:this.local.epochs[1]},formatYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,u.local.invalidYear||u.regionalOptions[""].invalidYear);return(e.year()<0?"-":"")+a(Math.abs(e.year()),4)},monthsInYear:function(t){return this._validate(t,this.minMonth,this.minDay,u.local.invalidYear||u.regionalOptions[""].invalidYear),12},monthOfYear:function(t,e){var r=this._validate(t,e,this.minDay,u.local.invalidMonth||u.regionalOptions[""].invalidMonth);return(r.month()+this.monthsInYear(r)-this.firstMonth)%this.monthsInYear(r)+this.minMonth},fromMonthOfYear:function(t,e){var r=(e+this.firstMonth-2*this.minMonth)%this.monthsInYear(t)+this.minMonth;return this._validate(t,r,this.minDay,u.local.invalidMonth||u.regionalOptions[""].invalidMonth),r},daysInYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,u.local.invalidYear||u.regionalOptions[""].invalidYear);return this.leapYear(e)?366:365},dayOfYear:function(t,e,r){var n=this._validate(t,e,r,u.local.invalidDate||u.regionalOptions[""].invalidDate);return n.toJD()-this.newDate(n.year(),this.fromMonthOfYear(n.year(),this.minMonth),this.minDay).toJD()+1},daysInWeek:function(){return 7},dayOfWeek:function(t,e,r){var n=this._validate(t,e,r,u.local.invalidDate||u.regionalOptions[""].invalidDate);return(Math.floor(this.toJD(n))+2)%this.daysInWeek()},extraInfo:function(t,e,r){return this._validate(t,e,r,u.local.invalidDate||u.regionalOptions[""].invalidDate),{}},add:function(t,e,r){return this._validate(t,this.minMonth,this.minDay,u.local.invalidDate||u.regionalOptions[""].invalidDate),this._correctAdd(t,this._add(t,e,r),e,r)},_add:function(t,e,r){if(this._validateLevel++,"d"===r||"w"===r){var n=t.toJD()+e*("w"===r?this.daysInWeek():1),i=t.calendar().fromJD(n);return this._validateLevel--,[i.year(),i.month(),i.day()]}try{var a=t.year()+("y"===r?e:0),o=t.monthOfYear()+("m"===r?e:0),i=t.day();"y"===r?(t.month()!==this.fromMonthOfYear(a,o)&&(o=this.newDate(a,t.month(),this.minDay).monthOfYear()),o=Math.min(o,this.monthsInYear(a)),i=Math.min(i,this.daysInMonth(a,this.fromMonthOfYear(a,o)))):"m"===r&&(!function(t){for(;o<t.minMonth;)a--,o+=t.monthsInYear(a);for(var e=t.monthsInYear(a);o>e-1+t.minMonth;)a++,o-=e,e=t.monthsInYear(a)}(this),i=Math.min(i,this.daysInMonth(a,this.fromMonthOfYear(a,o))));var s=[a,this.fromMonthOfYear(a,o),i];return this._validateLevel--,s}catch(t){throw this._validateLevel--,t}},_correctAdd:function(t,e,r,n){if(!(this.hasYearZero||"y"!==n&&"m"!==n||0!==e[0]&&t.year()>0==e[0]>0)){var i={y:[1,1,"y"],m:[1,this.monthsInYear(-1),"m"],w:[this.daysInWeek(),this.daysInYear(-1),"d"],d:[1,this.daysInYear(-1),"d"]}[n],a=r<0?-1:1;e=this._add(t,r*i[0]+a*i[1],i[2])}return t.date(e[0],e[1],e[2])},set:function(t,e,r){this._validate(t,this.minMonth,this.minDay,u.local.invalidDate||u.regionalOptions[""].invalidDate);var n="y"===r?e:t.year(),i="m"===r?e:t.month(),a="d"===r?e:t.day();return"y"!==r&&"m"!==r||(a=Math.min(a,this.daysInMonth(n,i))),t.date(n,i,a)},isValid:function(t,e,r){this._validateLevel++;var n=this.hasYearZero||0!==t;if(n){var i=this.newDate(t,e,this.minDay);n=e>=this.minMonth&&e-this.minMonth<this.monthsInYear(i)&&r>=this.minDay&&r-this.minDay<this.daysInMonth(i)}return this._validateLevel--,n},toJSDate:function(t,e,r){var n=this._validate(t,e,r,u.local.invalidDate||u.regionalOptions[""].invalidDate);return u.instance().fromJD(this.toJD(n)).toJSDate()},fromJSDate:function(t){return this.fromJD(u.instance().fromJSDate(t).toJD())},_validate:function(t,e,r,n){if(t.year){if(0===this._validateLevel&&this.name!==t.calendar().name)throw(u.local.differentCalendars||u.regionalOptions[""].differentCalendars).replace(/\{0\}/,this.local.name).replace(/\{1\}/,t.calendar().local.name);return t}try{if(1===++this._validateLevel&&!this.isValid(t,e,r))throw n.replace(/\{0\}/,this.local.name);var i=this.newDate(t,e,r);return this._validateLevel--,i}catch(t){throw this._validateLevel--,t}}}),s.prototype=new o,l(s.prototype,{name:"Gregorian",jdEpoch:1721425.5,daysPerMonth:[31,28,31,30,31,30,31,31,30,31,30,31],hasYearZero:!1,minMonth:1,firstMonth:1,minDay:1,regionalOptions:{"":{name:"Gregorian",epochs:["BCE","CE"],monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su","Mo","Tu","We","Th","Fr","Sa"],digits:null,dateFormat:"mm/dd/yyyy",firstDay:0,isRTL:!1}},leapYear:function(t){var e=this._validate(t,this.minMonth,this.minDay,u.local.invalidYear||u.regionalOptions[""].invalidYear),t=e.year()+(e.year()<0?1:0);return t%4==0&&(t%100!=0||t%400==0)},weekOfYear:function(t,e,r){var n=this.newDate(t,e,r);return n.add(4-(n.dayOfWeek()||7),"d"),Math.floor((n.dayOfYear()-1)/7)+1},daysInMonth:function(t,e){var r=this._validate(t,e,this.minDay,u.local.invalidMonth||u.regionalOptions[""].invalidMonth);return this.daysPerMonth[r.month()-1]+(2===r.month()&&this.leapYear(r.year())?1:0)},weekDay:function(t,e,r){return(this.dayOfWeek(t,e,r)||7)<6},toJD:function(t,e,r){var n=this._validate(t,e,r,u.local.invalidDate||u.regionalOptions[""].invalidDate);t=n.year(),e=n.month(),r=n.day(),t<0&&t++,e<3&&(e+=12,t--);var i=Math.floor(t/100),a=2-i+Math.floor(i/4);return Math.floor(365.25*(t+4716))+Math.floor(30.6001*(e+1))+r+a-1524.5},fromJD:function(t){var e=Math.floor(t+.5),r=Math.floor((e-1867216.25)/36524.25);r=e+1+r-Math.floor(r/4);var n=r+1524,i=Math.floor((n-122.1)/365.25),a=Math.floor(365.25*i),o=Math.floor((n-a)/30.6001),s=n-a-Math.floor(30.6001*o),l=o-(o>13.5?13:1),u=i-(l>2.5?4716:4715);return u<=0&&u--,this.newDate(u,l,s)},toJSDate:function(t,e,r){var n=this._validate(t,e,r,u.local.invalidDate||u.regionalOptions[""].invalidDate),i=new Date(n.year(),n.month()-1,n.day());return i.setHours(0),i.setMinutes(0),i.setSeconds(0),i.setMilliseconds(0),i.setHours(i.getHours()>12?i.getHours()+2:0),i},fromJSDate:function(t){return this.newDate(t.getFullYear(),t.getMonth()+1,t.getDate())}});var u=e.exports=new n;u.cdate=i,u.baseCalendar=o,u.calendars.gregorian=s},{"object-assign":470}],582:[function(t,e,r){var n=t("object-assign"),i=t("./main");n(i.regionalOptions[""],{invalidArguments:"Invalid arguments",invalidFormat:"Cannot format a date from another calendar",missingNumberAt:"Missing number at position {0}",unknownNameAt:"Unknown name at position {0}",unexpectedLiteralAt:"Unexpected literal at position {0}",unexpectedText:"Additional text found at end"}),i.local=i.regionalOptions[""],n(i.cdate.prototype,{formatDate:function(t,e){return"string"!=typeof t&&(e=t,t=""),this._calendar.formatDate(t||"",this,e)}}),n(i.baseCalendar.prototype,{UNIX_EPOCH:i.instance().newDate(1970,1,1).toJD(),SECS_PER_DAY:86400,TICKS_EPOCH:i.instance().jdEpoch,TICKS_PER_DAY:864e9,ATOM:"yyyy-mm-dd",COOKIE:"D, dd M yyyy",FULL:"DD, MM d, yyyy",ISO_8601:"yyyy-mm-dd",JULIAN:"J",RFC_822:"D, d M yy",RFC_850:"DD, dd-M-yy",RFC_1036:"D, d M yy",RFC_1123:"D, d M yyyy",RFC_2822:"D, d M yyyy",RSS:"D, d M yy",TICKS:"!",TIMESTAMP:"@",W3C:"yyyy-mm-dd",formatDate:function(t,e,r){if("string"!=typeof t&&(r=e,e=t,t=""),!e)return"";if(e.calendar()!==this)throw i.local.invalidFormat||i.regionalOptions[""].invalidFormat;t=t||this.local.dateFormat,r=r||{};for(var n=r.dayNamesShort||this.local.dayNamesShort,a=r.dayNames||this.local.dayNames,o=r.monthNumbers||this.local.monthNumbers,s=r.monthNamesShort||this.local.monthNamesShort,l=r.monthNames||this.local.monthNames,u=(r.calculateWeek||this.local.calculateWeek,function(e,r){for(var n=1;g+n<t.length&&t.charAt(g+n)===e;)n++;return g+=n-1,Math.floor(n/(r||1))>1}),c=function(t,e,r,n){var i=""+e;if(u(t,n))for(;i.length<r;)i="0"+i;return i},h=this,f=this.local.digits,d=function(t){return r.localNumbers&&f?f(t):t},p="",m=!1,g=0;g<t.length;g++)if(m)"'"!==t.charAt(g)||u("'")?p+=t.charAt(g):m=!1;else switch(t.charAt(g)){case"d":p+=d(c("d",e.day(),2));break;case"D":p+=function(t,e,r,n){return u(t)?n[e]:r[e]}("D",e.dayOfWeek(),n,a);break;case"o":p+=c("o",e.dayOfYear(),3);break;case"w":p+=c("w",e.weekOfYear(),2);break;case"m":p+=function(t){return"function"==typeof o?o.call(h,t,u("m")):d(c("m",t.month(),2))}(e);break;case"M":p+=function(t,e){return e?"function"==typeof l?l.call(h,t):l[t.month()-h.minMonth]:"function"==typeof s?s.call(h,t):s[t.month()-h.minMonth]}(e,u("M"));break;case"y":p+=u("y",2)?e.year():(e.year()%100<10?"0":"")+e.year()%100;break;case"Y":u("Y",2),p+=e.formatYear();break;case"J":p+=e.toJD();break;case"@":p+=(e.toJD()-this.UNIX_EPOCH)*this.SECS_PER_DAY;break;case"!":p+=(e.toJD()-this.TICKS_EPOCH)*this.TICKS_PER_DAY;break;case"'":u("'")?p+="'":m=!0;break;default:p+=t.charAt(g)}return p},parseDate:function(t,e,r){if(null==e)throw i.local.invalidArguments||i.regionalOptions[""].invalidArguments;if(""===(e="object"==typeof e?e.toString():e+""))return null;t=t||this.local.dateFormat,r=r||{};var n=r.shortYearCutoff||this.shortYearCutoff;n="string"!=typeof n?n:this.today().year()%100+parseInt(n,10);for(var a=r.dayNamesShort||this.local.dayNamesShort,o=r.dayNames||this.local.dayNames,s=r.parseMonth||this.local.parseMonth,l=r.monthNumbers||this.local.monthNumbers,u=r.monthNamesShort||this.local.monthNamesShort,c=r.monthNames||this.local.monthNames,h=-1,f=-1,d=-1,p=-1,m=-1,g=!1,v=!1,y=function(e,r){for(var n=1;k+n<t.length&&t.charAt(k+n)===e;)n++;return k+=n-1,Math.floor(n/(r||1))>1},b=function(t,r){var n=y(t,r),a=[2,3,n?4:2,n?4:2,10,11,20]["oyYJ@!".indexOf(t)+1],o=new RegExp("^-?\\d{1,"+a+"}"),s=e.substring(M).match(o);if(!s)throw(i.local.missingNumberAt||i.regionalOptions[""].missingNumberAt).replace(/\{0\}/,M);return M+=s[0].length,parseInt(s[0],10)},x=this,_=function(t,r,n,a){for(var o=y(t,a)?n:r,s=0;s<o.length;s++)if(e.substr(M,o[s].length).toLowerCase()===o[s].toLowerCase())return M+=o[s].length,s+x.minMonth;throw(i.local.unknownNameAt||i.regionalOptions[""].unknownNameAt).replace(/\{0\}/,M)},w=function(){if(e.charAt(M)!==t.charAt(k))throw(i.local.unexpectedLiteralAt||i.regionalOptions[""].unexpectedLiteralAt).replace(/\{0\}/,M);M++},M=0,k=0;k<t.length;k++)if(v)"'"!==t.charAt(k)||y("'")?w():v=!1;else switch(t.charAt(k)){case"d":p=b("d");break;case"D":_("D",a,o);break;case"o":m=b("o");break;case"w":b("w");break;case"m":d=function(){if("function"==typeof l){y("m");var t=l.call(x,e.substring(M));return M+=t.length,t}return b("m")}();break;case"M":d=function(){if("function"==typeof c){var t=y("M")?c.call(x,e.substring(M)):u.call(x,e.substring(M));return M+=t.length,t}return _("M",u,c)}();break;case"y":var A=k;g=!y("y",2),k=A,f=b("y",2);break;case"Y":f=b("Y",2);break;case"J":h=b("J")+.5,"."===e.charAt(M)&&(M++,b("J"));break;case"@":h=b("@")/this.SECS_PER_DAY+this.UNIX_EPOCH;break;case"!":h=b("!")/this.TICKS_PER_DAY+this.TICKS_EPOCH;break;case"*":M=e.length;break;case"'":y("'")?w():v=!0;break;default:w()}if(M<e.length)throw i.local.unexpectedText||i.regionalOptions[""].unexpectedText;if(-1===f?f=this.today().year():f<100&&g&&(f+=-1===n?1900:this.today().year()-this.today().year()%100-(f<=n?0:100)),"string"==typeof d&&(d=s.call(this,f,d)),m>-1){d=1,p=m;for(var T=this.daysInMonth(f,d);p>T;T=this.daysInMonth(f,d))d++,p-=T}return h>-1?this.fromJD(h):this.newDate(f,d,p)},determineDate:function(t,e,r,n,i){r&&"object"!=typeof r&&(i=n,n=r,r=null),"string"!=typeof n&&(i=n,n="");var a=this;return e=e?e.newDate():null,t=null==t?e:"string"==typeof t?function(t){try{return a.parseDate(n,t,i)}catch(t){}t=t.toLowerCase();for(var e=(t.match(/^c/)&&r?r.newDate():null)||a.today(),o=/([+-]?[0-9]+)\s*(d|w|m|y)?/g,s=o.exec(t);s;)e.add(parseInt(s[1],10),s[2]||"d"),s=o.exec(t);return e}(t):"number"==typeof t?isNaN(t)||t===1/0||t===-1/0?e:a.today().add(t,"d"):a.newDate(t)}})},{"./main":581,"object-assign":470}],583:[function(t,e,r){e.exports=t("cwise-compiler")({args:["array",{offset:[1],array:0},"scalar","scalar","index"],pre:{body:"{}",args:[],thisVars:[],localVars:[]},post:{body:"{}",args:[],thisVars:[],localVars:[]},body:{body:"{\n var _inline_1_da = _inline_1_arg0_ - _inline_1_arg3_\n var _inline_1_db = _inline_1_arg1_ - _inline_1_arg3_\n if((_inline_1_da >= 0) !== (_inline_1_db >= 0)) {\n _inline_1_arg2_.push(_inline_1_arg4_[0] + 0.5 + 0.5 * (_inline_1_da + _inline_1_db) / (_inline_1_da - _inline_1_db))\n }\n }",args:[{name:"_inline_1_arg0_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_1_arg1_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_1_arg2_",lvalue:!1,rvalue:!0,count:1},{name:"_inline_1_arg3_",lvalue:!1,rvalue:!0,count:2},{name:"_inline_1_arg4_",lvalue:!1,rvalue:!0,count:1}],thisVars:[],localVars:["_inline_1_da","_inline_1_db"]},funcName:"zeroCrossings"})},{"cwise-compiler":110}],584:[function(t,e,r){"use strict";function n(t,e){var r=[];return e=+e||0,i(t.hi(t.shape[0]-1),r,e),r}e.exports=n;var i=t("./lib/zc-core")},{"./lib/zc-core":583}],585:[function(t,e,r){"use strict";var n=t("../../lib"),i=t("../../plots/cartesian/axes"),a=t("./common_defaults"),o=t("./attributes");e.exports=function(t,e,r,s,l){function u(r,i){return n.coerce(t,e,o,r,i)}s=s||{},l=l||{};var c=u("visible",!l.itemIsNotPlainObject),h=u("clicktoshow");if(!c&&!h)return e;a(t,e,r,u);for(var f=e.showarrow,d=["x","y"],p=[-10,-30],m={_fullLayout:r},g=0;g<2;g++){var v=d[g],y=i.coerceRef(t,e,m,v,"","paper");if(i.coercePosition(e,m,u,y,v,.5),f){var b="a"+v,x=i.coerceRef(t,e,m,b,"pixel");"pixel"!==x&&x!==y&&(x=e[b]="pixel");var _="pixel"===x?p[g]:.4;i.coercePosition(e,m,u,x,b,_)}u(v+"anchor"),u(v+"shift")}if(n.noneOrAll(t,e,["x","y"]),f&&n.noneOrAll(t,e,["ax","ay"]),h){var w=u("xclick"),M=u("yclick");e._xclick=void 0===w?e.x:i.cleanPosition(w,m,e.xref),e._yclick=void 0===M?e.y:i.cleanPosition(M,m,e.yref)}return e}},{"../../lib":728,"../../plots/cartesian/axes":772,"./attributes":587,"./common_defaults":590}],586:[function(t,e,r){"use strict";e.exports=[{path:"",backoff:0},{path:"M-2.4,-3V3L0.6,0Z",backoff:.6},{path:"M-3.7,-2.5V2.5L1.3,0Z",backoff:1.3},{path:"M-4.45,-3L-1.65,-0.2V0.2L-4.45,3L1.55,0Z",backoff:1.55},{path:"M-2.2,-2.2L-0.2,-0.2V0.2L-2.2,2.2L-1.4,3L1.6,0L-1.4,-3Z",backoff:1.6},{path:"M-4.4,-2.1L-0.6,-0.2V0.2L-4.4,2.1L-4,3L2,0L-4,-3Z",backoff:2},{path:"M2,0A2,2 0 1,1 0,-2A2,2 0 0,1 2,0Z",backoff:0,noRotate:!0},{path:"M2,2V-2H-2V2Z",backoff:0,noRotate:!0}]},{}],587:[function(t,e,r){"use strict";var n=t("./arrow_paths"),i=t("../../plots/font_attributes"),a=t("../../plots/cartesian/constants");e.exports={_isLinkedToArray:"annotation",visible:{valType:"boolean",dflt:!0,editType:"calcIfAutorange"},text:{valType:"string",editType:"calcIfAutorange"},textangle:{valType:"angle",dflt:0,editType:"calcIfAutorange"},font:i({editType:"calcIfAutorange",colorEditType:"arraydraw"}),width:{valType:"number",min:1,dflt:null,editType:"calcIfAutorange"},height:{valType:"number",min:1,dflt:null,editType:"calcIfAutorange"},opacity:{valType:"number",min:0,max:1,dflt:1,editType:"arraydraw"},align:{valType:"enumerated",values:["left","center","right"],dflt:"center",editType:"arraydraw"},valign:{valType:"enumerated",values:["top","middle","bottom"],dflt:"middle",editType:"arraydraw"},bgcolor:{valType:"color",dflt:"rgba(0,0,0,0)",editType:"arraydraw"},bordercolor:{valType:"color",dflt:"rgba(0,0,0,0)",editType:"arraydraw"},borderpad:{valType:"number",min:0,dflt:1,editType:"calcIfAutorange"},borderwidth:{valType:"number",min:0,dflt:1,editType:"calcIfAutorange"},showarrow:{valType:"boolean",dflt:!0,editType:"calcIfAutorange"},arrowcolor:{valType:"color",editType:"arraydraw"},arrowhead:{valType:"integer",min:0,max:n.length,dflt:1,editType:"arraydraw"},arrowsize:{valType:"number",min:.3,dflt:1,editType:"calcIfAutorange"},arrowwidth:{valType:"number",min:.1,editType:"calcIfAutorange"},standoff:{valType:"number",min:0,dflt:0,editType:"calcIfAutorange"},ax:{valType:"any",editType:"calcIfAutorange"},ay:{valType:"any",editType:"calcIfAutorange"},axref:{valType:"enumerated",dflt:"pixel",values:["pixel",a.idRegex.x.toString()],editType:"calc"},ayref:{valType:"enumerated",dflt:"pixel",values:["pixel",a.idRegex.y.toString()],editType:"calc"},xref:{valType:"enumerated",values:["paper",a.idRegex.x.toString()],editType:"calc"},x:{valType:"any",editType:"calcIfAutorange"},xanchor:{valType:"enumerated",values:["auto","left","center","right"],dflt:"auto",editType:"calcIfAutorange"},xshift:{valType:"number",dflt:0,editType:"calcIfAutorange"},yref:{valType:"enumerated",values:["paper",a.idRegex.y.toString()],editType:"calc"},y:{valType:"any",editType:"calcIfAutorange"},yanchor:{valType:"enumerated",values:["auto","top","middle","bottom"],dflt:"auto",editType:"calcIfAutorange"},yshift:{valType:"number",dflt:0,editType:"calcIfAutorange"},clicktoshow:{valType:"enumerated",values:[!1,"onoff","onout"],dflt:!1,editType:"arraydraw"},xclick:{valType:"any",editType:"arraydraw"},yclick:{valType:"any",editType:"arraydraw"},hovertext:{valType:"string",editType:"arraydraw"},hoverlabel:{bgcolor:{valType:"color",editType:"arraydraw"},bordercolor:{valType:"color",editType:"arraydraw"},font:i({editType:"arraydraw"}),editType:"arraydraw"},captureevents:{valType:"boolean",editType:"arraydraw"},editType:"calc",_deprecated:{ref:{valType:"string",editType:"calc"}}}},{"../../plots/cartesian/constants":777,"../../plots/font_attributes":796,"./arrow_paths":586}],588:[function(t,e,r){"use strict";function n(t){var e=t._fullLayout;i.filterVisible(e.annotations).forEach(function(e){var r,n,i=a.getFromId(t,e.xref),o=a.getFromId(t,e.yref),s=3*e.arrowsize*e.arrowwidth||0;i&&i.autorange&&(r=s+e.xshift,n=s-e.xshift,e.axref===e.xref?(a.expand(i,[i.r2c(e.x)],{ppadplus:r,ppadminus:n}),a.expand(i,[i.r2c(e.ax)],{ppadplus:e._xpadplus,ppadminus:e._xpadminus})):a.expand(i,[i.r2c(e.x)],{ppadplus:Math.max(e._xpadplus,r),ppadminus:Math.max(e._xpadminus,n)})),o&&o.autorange&&(r=s-e.yshift,n=s+e.yshift,e.ayref===e.yref?(a.expand(o,[o.r2c(e.y)],{ppadplus:r,ppadminus:n}),a.expand(o,[o.r2c(e.ay)],{ppadplus:e._ypadplus,ppadminus:e._ypadminus})):a.expand(o,[o.r2c(e.y)],{ppadplus:Math.max(e._ypadplus,r),ppadminus:Math.max(e._ypadminus,n)}))})}var i=t("../../lib"),a=t("../../plots/cartesian/axes"),o=t("./draw").draw;e.exports=function(t){var e=t._fullLayout,r=i.filterVisible(e.annotations);if(r.length&&t._fullData.length){var s={};r.forEach(function(t){s[t.xref]=!0,s[t.yref]=!0});if(a.list(t).filter(function(t){return t.autorange&&s[t._id]}).length)return i.syncOrAsync([o,n],t)}}},{"../../lib":728,"../../plots/cartesian/axes":772,"./draw":593}],589:[function(t,e,r){"use strict";function n(t,e){var r=a(t,e);return r.on.length>0||r.explicitOff.length>0}function i(t,e){var r,n=a(t,e),i=n.on,o=n.off.concat(n.explicitOff),l={};if(i.length||o.length){for(r=0;r<i.length;r++)l["annotations["+i[r]+"].visible"]=!0;for(r=0;r<o.length;r++)l["annotations["+o[r]+"].visible"]=!1;return s.update(t,{},l)}}function a(t,e){var r,n,i,a,s,l,u,c,h=t._fullLayout.annotations,f=[],d=[],p=[],m=(e||[]).length;for(r=0;r<h.length;r++)if(i=h[r],a=i.clicktoshow){for(n=0;n<m;n++)if(s=e[n],l=s.xaxis,u=s.yaxis,l._id===i.xref&&u._id===i.yref&&l.d2r(s.x)===o(i._xclick,l)&&u.d2r(s.y)===o(i._yclick,u)){c=i.visible?"onout"===a?d:p:f,c.push(r);break}n===m&&i.visible&&"onout"===a&&d.push(r)}return{on:f,off:d,explicitOff:p}}function o(t,e){return"log"===e.type?e.l2r(t):e.d2r(t)}var s=t("../../plotly");e.exports={hasClickToShow:n,onClick:i}},{"../../plotly":767}],590:[function(t,e,r){"use strict";var n=t("../../lib"),i=t("../color");e.exports=function(t,e,r,a){a("opacity");var o=a("bgcolor"),s=a("bordercolor"),l=i.opacity(s);a("borderpad");var u=a("borderwidth"),c=a("showarrow");a("text",c?" ":"new text"),a("textangle"),n.coerceFont(a,"font",r.font),a("width"),a("align"),a("height")&&a("valign"),c&&(a("arrowcolor",l?e.bordercolor:i.defaultLine),a("arrowhead"),a("arrowsize"),a("arrowwidth",2*(l&&u||1)),a("standoff"));var h=a("hovertext"),f=r.hoverlabel||{};if(h){var d=a("hoverlabel.bgcolor",f.bgcolor||(i.opacity(o)?i.rgb(o):i.defaultLine)),p=a("hoverlabel.bordercolor",f.bordercolor||i.contrast(d));n.coerceFont(a,"hoverlabel.font",{family:f.font.family,size:f.font.size,color:f.font.color||p})}a("captureevents",!!h)}},{"../../lib":728,"../color":604}],591:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),i=t("../../lib/to_log_range");e.exports=function(t,e,r,a){function o(t){var r=u[t],o=null;o=s?i(r,e.range):Math.pow(10,r),n(o)||(o=null),a(c+t,o)}e=e||{};var s="log"===r&&"linear"===e.type,l="linear"===r&&"log"===e.type;if(s||l)for(var u,c,h=t._fullLayout.annotations,f=e._id.charAt(0),d=0;d<h.length;d++)u=h[d],c="annotations["+d+"].",u[f+"ref"]===e._id&&o(f),u["a"+f+"ref"]===e._id&&o("a"+f)}},{"../../lib/to_log_range":752,"fast-isnumeric":131}],592:[function(t,e,r){"use strict";var n=t("../../plots/array_container_defaults"),i=t("./annotation_defaults");e.exports=function(t,e){n(t,e,{name:"annotations",handleItemDefaults:i})}},{"../../plots/array_container_defaults":769,"./annotation_defaults":585}],593:[function(t,e,r){"use strict";function n(t){var e=t._fullLayout;e._infolayer.selectAll(".annotation").remove();for(var r=0;r<e.annotations.length;r++)e.annotations[r].visible&&i(t,r);return l.previousPromises(t)}function i(t,e){var r=t._fullLayout,n=r.annotations[e]||{};a(t,n,e,!1,c.getFromId(t,n.xref),c.getFromId(t,n.yref))}function a(t,e,r,n,i,a){function l(r){return r.call(f.font,F).attr({"text-anchor":{left:"start",right:"end"}[e.align]||"middle"}),p.convertToTspans(r,t,c),r}function c(){function r(t,e){return"auto"===e&&(e=t<1/3?"left":t>2/3?"right":"center"),{center:0,middle:0,left:.5,bottom:-.5,right:-.5,top:.5}[e]}var o=j.selectAll("a");if(1===o.size()&&o.text()===j.text()){C.insert("a",":first-child").attr({"xlink:xlink:href":o.attr("xlink:href"),"xlink:xlink:show":o.attr("xlink:show")}).style({cursor:"pointer"}).node().appendChild(P.node())}var l=C.select(".annotation-text-math-group"),c=!l.empty(),d=f.bBox((c?l:j).node()),y=d.width,L=d.height,z=e.width||y,F=e.height||L,N=Math.round(z+2*D),B=Math.round(F+2*D);e._w=z,e._h=F;for(var U=!1,V=["x","y"],H=0;H<V.length;H++){var q,G,Y,W,X,Z=V[H],J=e[Z+"ref"]||Z,K=e["a"+Z+"ref"],Q={x:i,y:a}[Z],$=(A+("x"===Z?0:-90))*Math.PI/180,tt=N*Math.cos($),et=B*Math.sin($),rt=Math.abs(tt)+Math.abs(et),nt=e[Z+"anchor"],it=e[Z+"shift"]*("x"===Z?1:-1),at=k[Z];if(Q){var ot=Q.r2fraction(e[Z]);if((t._dragging||!Q.autorange)&&(ot<0||ot>1)&&(K===J?((ot=Q.r2fraction(e["a"+Z]))<0||ot>1)&&(U=!0):U=!0,U))continue;q=Q._offset+Q.r2p(e[Z]),W=.5}else"x"===Z?(Y=e[Z],q=_.l+_.w*Y):(Y=1-e[Z],q=_.t+_.h*Y),W=e.showarrow?.5:Y;if(e.showarrow){at.head=q;var st=e["a"+Z];X=tt*r(.5,e.xanchor)-et*r(.5,e.yanchor),K===J?(at.tail=Q._offset+Q.r2p(st),G=X):(at.tail=q+st,G=X+st),at.text=at.tail+X;var lt=x["x"===Z?"width":"height"];if("paper"===J&&(at.head=u.constrain(at.head,1,lt-1)),"pixel"===K){var ut=-Math.max(at.tail-3,at.text),ct=Math.min(at.tail+3,at.text)-lt;ut>0?(at.tail+=ut,at.text+=ut):ct>0&&(at.tail-=ct,at.text-=ct)}at.tail+=it,at.head+=it}else X=rt*r(W,nt),G=X,at.text=q+X;at.text+=it,X+=it,G+=it,e["_"+Z+"padplus"]=rt/2+G,e["_"+Z+"padminus"]=rt/2-G,e["_"+Z+"size"]=rt,e["_"+Z+"shift"]=X}if(U)return void C.remove();var ht=0,ft=0;if("left"!==e.align&&(ht=(z-y)*("center"===e.align?.5:1)),"top"!==e.valign&&(ft=(F-L)*("middle"===e.valign?.5:1)),c)l.select("svg").attr({x:D+ht-1,y:D+ft}).call(f.setClipUrl,O?M:null);else{var dt=D+ft-d.top,pt=D+ht-d.left;j.call(p.positionText,pt,dt).call(f.setClipUrl,O?M:null)}R.select("rect").call(f.setRect,D,D,z,F),P.call(f.setRect,I/2,I/2,N-I,B-I),C.call(f.setTranslate,Math.round(k.x.text-N/2),Math.round(k.y.text-B/2)),S.attr({transform:"rotate("+A+","+k.x.text+","+k.y.text+")"});var mt=function(r,o){T.selectAll(".annotation-arrow-g").remove();var l=k.x.head,c=k.y.head,d=k.x.tail+r,p=k.y.tail+o,m=k.x.text+r,y=k.y.text+o,x=u.rotationXYMatrix(A,m,y),M=u.apply2DTransform(x),E=u.apply2DTransform2(x),L=+P.attr("width"),I=+P.attr("height"),z=m-.5*L,D=z+L,O=y-.5*I,R=O+I,F=[[z,O,z,R],[z,R,D,R],[D,R,D,O],[D,O,z,O]].map(E);if(!F.reduce(function(t,e){return t^!!u.segmentsIntersect(l,c,l+1e6,c+1e6,e[0],e[1],e[2],e[3])},!1)){F.forEach(function(t){var e=u.segmentsIntersect(d,p,l,c,t[0],t[1],t[2],t[3]);e&&(d=e.x,p=e.y)});var j=e.arrowwidth,N=e.arrowcolor,B=T.append("g").style({opacity:h.opacity(N)}).classed("annotation-arrow-g",!0),U=B.append("path").attr("d","M"+d+","+p+"L"+l+","+c).style("stroke-width",j+"px").call(h.stroke,h.rgb(N));if(v(U,"end",e),w.annotationPosition&&U.node().parentNode&&!n){var V=l,H=c;if(e.standoff){var q=Math.sqrt(Math.pow(l-d,2)+Math.pow(c-p,2));V+=e.standoff*(d-l)/q,H+=e.standoff*(p-c)/q}var G,Y,W,X=B.append("path").classed("annotation-arrow",!0).classed("anndrag",!0).attr({d:"M3,3H-3V-3H3ZM0,0L"+(d-V)+","+(p-H),transform:"translate("+V+","+H+")"}).style("stroke-width",j+6+"px").call(h.stroke,"rgba(0,0,0,0)").call(h.fill,"rgba(0,0,0,0)");g.init({element:X.node(),gd:t,prepFn:function(){var t=f.getTranslate(C);Y=t.x,W=t.y,G={},i&&i.autorange&&(G[i._name+".autorange"]=!0),a&&a.autorange&&(G[a._name+".autorange"]=!0)},moveFn:function(t,r){var n=M(Y,W),o=n[0]+t,s=n[1]+r;C.call(f.setTranslate,o,s),G[b+".x"]=i?i.p2r(i.r2p(e.x)+t):e.x+t/_.w,G[b+".y"]=a?a.p2r(a.r2p(e.y)+r):e.y-r/_.h,e.axref===e.xref&&(G[b+".ax"]=i.p2r(i.r2p(e.ax)+t)),e.ayref===e.yref&&(G[b+".ay"]=a.p2r(a.r2p(e.ay)+r)),B.attr("transform","translate("+t+","+r+")"),S.attr({transform:"rotate("+A+","+o+","+s+")"})},doneFn:function(e){if(e){s.relayout(t,G);var r=document.querySelector(".js-notes-box-panel");r&&r.redraw(r.selectedObj)}}})}}};if(e.showarrow&&mt(0,0),E){var gt,vt;g.init({element:C.node(),gd:t,prepFn:function(){vt=S.attr("transform"),gt={}},moveFn:function(t,r){var o="pointer";if(e.showarrow)e.axref===e.xref?gt[b+".ax"]=i.p2r(i.r2p(e.ax)+t):gt[b+".ax"]=e.ax+t,e.ayref===e.yref?gt[b+".ay"]=a.p2r(a.r2p(e.ay)+r):gt[b+".ay"]=e.ay+r,mt(t,r);else{if(n)return;if(i)gt[b+".x"]=e.x+t/i._m;else{var s=e._xsize/_.w,l=e.x+(e._xshift-e.xshift)/_.w-s/2;gt[b+".x"]=g.align(l+t/_.w,s,0,1,e.xanchor)}if(a)gt[b+".y"]=e.y+r/a._m;else{var u=e._ysize/_.h,c=e.y-(e._yshift+e.yshift)/_.h-u/2;gt[b+".y"]=g.align(c-r/_.h,u,0,1,e.yanchor)}i&&a||(o=g.getCursor(i?.5:gt[b+".x"],a?.5:gt[b+".y"],e.xanchor,e.yanchor))}S.attr({transform:"translate("+t+","+r+")"+vt}),m(C,o)},doneFn:function(e){if(m(C),e){s.relayout(t,gt);var r=document.querySelector(".js-notes-box-panel");r&&r.redraw(r.selectedObj)}}})}}var y,b,x=t._fullLayout,_=t._fullLayout._size,w=t._context.edits;n?(y="annotation-"+n,b=n+".annotations["+r+"]"):(y="annotation",b="annotations["+r+"]"),x._infolayer.selectAll("."+y+'[data-index="'+r+'"]').remove();var M="clip"+x._uid+"_ann"+r;if(!e._input||!1===e.visible)return void o.selectAll("#"+M).remove();var k={x:{},y:{}},A=+e.textangle||0,T=x._infolayer.append("g").classed(y,!0).attr("data-index",String(r)).style("opacity",e.opacity),S=T.append("g").classed("annotation-text-g",!0),E=w[e.showarrow?"annotationTail":"annotationPosition"],L=e.captureevents||w.annotationText||E,C=S.append("g").style("pointer-events",L?"all":null).call(m,"default").on("click",function(){t._dragging=!1;var i={index:r,annotation:e._input,fullAnnotation:e,event:o.event};n&&(i.subplotId=n),t.emit("plotly_clickannotation",i)});e.hovertext&&C.on("mouseover",function(){var r=e.hoverlabel,n=r.font,i=this.getBoundingClientRect(),a=t.getBoundingClientRect();d.loneHover({x0:i.left-a.left,x1:i.right-a.left,y:(i.top+i.bottom)/2-a.top,text:e.hovertext,color:r.bgcolor,borderColor:r.bordercolor,fontFamily:n.family,fontSize:n.size,fontColor:n.color},{container:x._hoverlayer.node(),outerContainer:x._paper.node(),gd:t})}).on("mouseout",function(){d.loneUnhover(x._hoverlayer.node())});var I=e.borderwidth,z=e.borderpad,D=I+z,P=C.append("rect").attr("class","bg").style("stroke-width",I+"px").call(h.stroke,e.bordercolor).call(h.fill,e.bgcolor),O=e.width||e.height,R=x._topclips.selectAll("#"+M).data(O?[0]:[]);R.enter().append("clipPath").classed("annclip",!0).attr("id",M).append("rect"),R.exit().remove();var F=e.font,j=C.append("text").classed("annotation-text",!0).text(e.text);w.annotationText?j.call(p.makeEditable,{delegate:C,gd:t}).call(l).on("edit",function(r){e.text=r,this.call(l);var n={};n[b+".text"]=e.text,i&&i.autorange&&(n[i._name+".autorange"]=!0),a&&a.autorange&&(n[a._name+".autorange"]=!0),s.relayout(t,n)}):j.call(l)}var o=t("d3"),s=t("../../plotly"),l=t("../../plots/plots"),u=t("../../lib"),c=t("../../plots/cartesian/axes"),h=t("../color"),f=t("../drawing"),d=t("../fx"),p=t("../../lib/svg_text_utils"),m=t("../../lib/setcursor"),g=t("../dragelement"),v=t("./draw_arrow_head");e.exports={draw:n,drawOne:i,drawRaw:a}},{"../../lib":728,"../../lib/setcursor":746,"../../lib/svg_text_utils":750,"../../plotly":767,"../../plots/cartesian/axes":772,"../../plots/plots":831,"../color":604,"../dragelement":625,"../drawing":628,"../fx":645,"./draw_arrow_head":594,d3:122}],594:[function(t,e,r){"use strict";var n=t("d3"),i=t("../color"),a=t("./arrow_paths");e.exports=function(t,e,r){function o(){t.style("stroke-dasharray","0px,100px")}function s(e,a){d.path&&(d.noRotate&&(a=0),n.select(f.parentNode).append("path").attr({class:t.attr("class"),d:d.path,transform:"translate("+e.x+","+e.y+")"+(a?"rotate("+180*a/Math.PI+")":"")+"scale("+p+")"}).style({
fill:i.rgb(r.arrowcolor),"stroke-width":0}))}var l,u,c,h,f=t.node(),d=a[r.arrowhead||0],p=(r.arrowwidth||1)*r.arrowsize,m=e.indexOf("start")>=0,g=e.indexOf("end")>=0,v=d.backoff*p+r.standoff;if("line"===f.nodeName){l={x:+t.attr("x1"),y:+t.attr("y1")},u={x:+t.attr("x2"),y:+t.attr("y2")};var y=l.x-u.x,b=l.y-u.y;if(c=Math.atan2(b,y),h=c+Math.PI,v){if(v*v>y*y+b*b)return void o();var x=v*Math.cos(c),_=v*Math.sin(c);m&&(l.x-=x,l.y-=_,t.attr({x1:l.x,y1:l.y})),g&&(u.x+=x,u.y+=_,t.attr({x2:u.x,y2:u.y}))}}else if("path"===f.nodeName){var w=f.getTotalLength(),M="";if(w<v)return void o();if(m){var k=f.getPointAtLength(0),A=f.getPointAtLength(.1);c=Math.atan2(k.y-A.y,k.x-A.x),l=f.getPointAtLength(Math.min(v,w)),v&&(M="0px,"+v+"px,")}if(g){var T=f.getPointAtLength(w),S=f.getPointAtLength(w-.1);if(h=Math.atan2(T.y-S.y,T.x-S.x),u=f.getPointAtLength(Math.max(0,w-v)),v){var E=M?2*v:v;M+=w-E+"px,"+w+"px"}}else M&&(M+=w+"px");M&&t.style("stroke-dasharray",M)}m&&s(l,c),g&&s(u,h)}},{"../color":604,"./arrow_paths":586,d3:122}],595:[function(t,e,r){"use strict";var n=t("./draw"),i=t("./click");e.exports={moduleType:"component",name:"annotations",layoutAttributes:t("./attributes"),supplyLayoutDefaults:t("./defaults"),calcAutorange:t("./calc_autorange"),draw:n.draw,drawOne:n.drawOne,drawRaw:n.drawRaw,hasClickToShow:i.hasClickToShow,onClick:i.onClick,convertCoords:t("./convert_coords")}},{"./attributes":587,"./calc_autorange":588,"./click":589,"./convert_coords":591,"./defaults":592,"./draw":593}],596:[function(t,e,r){"use strict";var n=t("../annotations/attributes"),i=t("../../plot_api/edit_types").overrideAll;e.exports=i({_isLinkedToArray:"annotation",visible:n.visible,x:{valType:"any"},y:{valType:"any"},z:{valType:"any"},ax:{valType:"number"},ay:{valType:"number"},xanchor:n.xanchor,xshift:n.xshift,yanchor:n.yanchor,yshift:n.yshift,text:n.text,textangle:n.textangle,font:n.font,width:n.width,height:n.height,opacity:n.opacity,align:n.align,valign:n.valign,bgcolor:n.bgcolor,bordercolor:n.bordercolor,borderpad:n.borderpad,borderwidth:n.borderwidth,showarrow:n.showarrow,arrowcolor:n.arrowcolor,arrowhead:n.arrowhead,arrowsize:n.arrowsize,arrowwidth:n.arrowwidth,standoff:n.standoff,hovertext:n.hovertext,hoverlabel:n.hoverlabel,captureevents:n.captureevents},"calc","from-root")},{"../../plot_api/edit_types":756,"../annotations/attributes":587}],597:[function(t,e,r){"use strict";function n(t,e){var r=e.fullSceneLayout,n=r.domain,o=e.fullLayout._size,s={pdata:null,type:"linear",autorange:!1,range:[-1/0,1/0]};t._xa={},i.extendFlat(t._xa,s),a.setConvert(t._xa),t._xa._offset=o.l+n.x[0]*o.w,t._xa.l2p=function(){return.5*(1+t.pdata[0]/t.pdata[3])*o.w*(n.x[1]-n.x[0])},t._ya={},i.extendFlat(t._ya,s),a.setConvert(t._ya),t._ya._offset=o.t+(1-n.y[1])*o.h,t._ya.l2p=function(){return.5*(1-t.pdata[1]/t.pdata[3])*o.h*(n.y[1]-n.y[0])}}var i=t("../../lib"),a=t("../../plots/cartesian/axes");e.exports=function(t){for(var e=t.fullSceneLayout,r=e.annotations,i=0;i<r.length;i++)n(r[i],t);t.fullLayout._infolayer.selectAll(".annotation-"+t.id).remove()}},{"../../lib":728,"../../plots/cartesian/axes":772}],598:[function(t,e,r){"use strict";function n(t,e,r,n,o){function u(r,n){return i.coerce(t,e,l,r,n)}function c(t){var n=t+"axis",i={_fullLayout:{}};return i._fullLayout[n]=r[n],a.coercePosition(e,i,u,t,t,.5)}return u("visible",!o.itemIsNotPlainObject)?(s(t,e,n.fullLayout,u),c("x"),c("y"),c("z"),i.noneOrAll(t,e,["x","y","z"]),e.xref="x",e.yref="y",e.zref="z",u("xanchor"),u("yanchor"),u("xshift"),u("yshift"),e.showarrow&&(e.axref="pixel",e.ayref="pixel",u("ax",-10),u("ay",-30),i.noneOrAll(t,e,["ax","ay"])),e):e}var i=t("../../lib"),a=t("../../plots/cartesian/axes"),o=t("../../plots/array_container_defaults"),s=t("../annotations/common_defaults"),l=t("./attributes");e.exports=function(t,e,r){o(t,e,{name:"annotations",handleItemDefaults:n,fullLayout:r.fullLayout})}},{"../../lib":728,"../../plots/array_container_defaults":769,"../../plots/cartesian/axes":772,"../annotations/common_defaults":590,"./attributes":596}],599:[function(t,e,r){"use strict";var n=t("../annotations/draw").drawRaw,i=t("../../plots/gl3d/project"),a=["x","y","z"];e.exports=function(t){for(var e=t.fullSceneLayout,r=t.dataScale,o=e.annotations,s=0;s<o.length;s++){for(var l=o[s],u=!1,c=0;c<3;c++){var h=a[c],f=l[h],d=e[h+"axis"],p=d.r2fraction(f);if(p<0||p>1){u=!0;break}}u?t.fullLayout._infolayer.select(".annotation-"+t.id+'[data-index="'+s+'"]').remove():(l.pdata=i(t.glplot.cameraParams,[e.xaxis.r2l(l.x)*r[0],e.yaxis.r2l(l.y)*r[1],e.zaxis.r2l(l.z)*r[2]]),n(t.graphDiv,l,s,t.id,l._xa,l._ya))}}},{"../../plots/gl3d/project":820,"../annotations/draw":593}],600:[function(t,e,r){"use strict";e.exports={moduleType:"component",name:"annotations3d",schema:{subplots:{scene:{annotations:t("./attributes")}}},layoutAttributes:t("./attributes"),handleDefaults:t("./defaults"),convert:t("./convert"),draw:t("./draw")}},{"./attributes":596,"./convert":597,"./defaults":598,"./draw":599}],601:[function(t,e,r){"use strict";e.exports=t("world-calendars/dist/main"),t("world-calendars/dist/plus"),t("world-calendars/dist/calendars/chinese"),t("world-calendars/dist/calendars/coptic"),t("world-calendars/dist/calendars/discworld"),t("world-calendars/dist/calendars/ethiopian"),t("world-calendars/dist/calendars/hebrew"),t("world-calendars/dist/calendars/islamic"),t("world-calendars/dist/calendars/julian"),t("world-calendars/dist/calendars/mayan"),t("world-calendars/dist/calendars/nanakshahi"),t("world-calendars/dist/calendars/nepali"),t("world-calendars/dist/calendars/persian"),t("world-calendars/dist/calendars/taiwan"),t("world-calendars/dist/calendars/thai"),t("world-calendars/dist/calendars/ummalqura")},{"world-calendars/dist/calendars/chinese":567,"world-calendars/dist/calendars/coptic":568,"world-calendars/dist/calendars/discworld":569,"world-calendars/dist/calendars/ethiopian":570,"world-calendars/dist/calendars/hebrew":571,"world-calendars/dist/calendars/islamic":572,"world-calendars/dist/calendars/julian":573,"world-calendars/dist/calendars/mayan":574,"world-calendars/dist/calendars/nanakshahi":575,"world-calendars/dist/calendars/nepali":576,"world-calendars/dist/calendars/persian":577,"world-calendars/dist/calendars/taiwan":578,"world-calendars/dist/calendars/thai":579,"world-calendars/dist/calendars/ummalqura":580,"world-calendars/dist/main":581,"world-calendars/dist/plus":582}],602:[function(t,e,r){"use strict";function n(t,e,r){for(var n,a,o,s,l,u=Math.floor((e+.05)/h)+c,f=i(r).fromJD(u),d=0;-1!==(d=t.indexOf("%",d));)n=t.charAt(d+1),"0"===n||"-"===n||"_"===n?(o=3,a=t.charAt(d+2),"_"===n&&(n="-")):(a=n,n="0",o=2),s=b[a],s?(l=s===y?y:f.formatDate(s[n]),t=t.substr(0,d)+l+t.substr(d+o),d+=l.length):d+=o;return t}function i(t){var e=x[t];return e||(e=x[t]=s.instance(t))}function a(t){return l.extendFlat({},f,{description:t})}function o(t){return"Sets the calendar system to use with `"+t+"` date data."}var s=t("./calendars"),l=t("../../lib"),u=t("../../constants/numerical"),c=u.EPOCHJD,h=u.ONEDAY,f={valType:"enumerated",values:Object.keys(s.calendars),editType:"calc",dflt:"gregorian"},d=function(t,e,r,n){var i={};return i[r]=f,l.coerce(t,e,i,r,n)},p=function(t,e,r,n){for(var i=0;i<r.length;i++)d(t,e,r[i]+"calendar",n.calendar)},m={chinese:"2000-01-01",coptic:"2000-01-01",discworld:"2000-01-01",ethiopian:"2000-01-01",hebrew:"5000-01-01",islamic:"1000-01-01",julian:"2000-01-01",mayan:"5000-01-01",nanakshahi:"1000-01-01",nepali:"2000-01-01",persian:"1000-01-01",jalali:"1000-01-01",taiwan:"1000-01-01",thai:"2000-01-01",ummalqura:"1400-01-01"},g={chinese:"2000-01-02",coptic:"2000-01-03",discworld:"2000-01-03",ethiopian:"2000-01-05",hebrew:"5000-01-01",islamic:"1000-01-02",julian:"2000-01-03",mayan:"5000-01-01",nanakshahi:"1000-01-05",nepali:"2000-01-05",persian:"1000-01-01",jalali:"1000-01-01",taiwan:"1000-01-04",thai:"2000-01-04",ummalqura:"1400-01-06"},v={chinese:["2000-01-01","2001-01-01"],coptic:["1700-01-01","1701-01-01"],discworld:["1800-01-01","1801-01-01"],ethiopian:["2000-01-01","2001-01-01"],hebrew:["5700-01-01","5701-01-01"],islamic:["1400-01-01","1401-01-01"],julian:["2000-01-01","2001-01-01"],mayan:["5200-01-01","5201-01-01"],nanakshahi:["0500-01-01","0501-01-01"],nepali:["2000-01-01","2001-01-01"],persian:["1400-01-01","1401-01-01"],jalali:["1400-01-01","1401-01-01"],taiwan:["0100-01-01","0101-01-01"],thai:["2500-01-01","2501-01-01"],ummalqura:["1400-01-01","1401-01-01"]},y="##",b={d:{0:"dd","-":"d"},e:{0:"d","-":"d"},a:{0:"D","-":"D"},A:{0:"DD","-":"DD"},j:{0:"oo","-":"o"},W:{0:"ww","-":"w"},m:{0:"mm","-":"m"},b:{0:"M","-":"M"},B:{0:"MM","-":"MM"},y:{0:"yy","-":"yy"},Y:{0:"yyyy","-":"yyyy"},U:y,w:y,c:{0:"D M d %X yyyy","-":"D M d %X yyyy"},x:{0:"mm/dd/yyyy","-":"mm/dd/yyyy"}},x={},_={xcalendar:a(o("x"))},w=l.extendFlat({},_,{ycalendar:a(o("y"))}),M=l.extendFlat({},w,{zcalendar:a(o("z"))}),k=a(["Sets the calendar system to use for `range` and `tick0`","if this is a date axis. This does not set the calendar for","interpreting data on this axis, that's specified in the trace","or via the global `layout.calendar`"].join(" "));e.exports={moduleType:"component",name:"calendars",schema:{traces:{scatter:w,bar:w,box:w,heatmap:w,contour:w,histogram:w,histogram2d:w,histogram2dcontour:w,scatter3d:M,surface:M,mesh3d:M,scattergl:w,ohlc:_,candlestick:_},layout:{calendar:a(["Sets the default calendar system to use for interpreting and","displaying dates throughout the plot."].join(" "))},subplots:{xaxis:{calendar:k},yaxis:{calendar:k},scene:{xaxis:{calendar:k},yaxis:{calendar:k},zaxis:{calendar:k}}},transforms:{filter:{valuecalendar:a(["Sets the calendar system to use for `value`, if it is a date."].join(" ")),targetcalendar:a(["Sets the calendar system to use for `target`, if it is an","array of dates. If `target` is a string (eg *x*) we use the","corresponding trace attribute (eg `xcalendar`) if it exists,","even if `targetcalendar` is provided."].join(" "))}}},layoutAttributes:f,handleDefaults:d,handleTraceDefaults:p,CANONICAL_SUNDAY:g,CANONICAL_TICK:m,DFLTRANGE:v,getCal:i,worldCalFmt:n}},{"../../constants/numerical":707,"../../lib":728,"./calendars":601}],603:[function(t,e,r){"use strict";r.defaults=["#1f77b4","#ff7f0e","#2ca02c","#d62728","#9467bd","#8c564b","#e377c2","#7f7f7f","#bcbd22","#17becf"],r.defaultLine="#444",r.lightLine="#eee",r.background="#fff",r.borderLine="#BEC8D9",r.lightFraction=1e3/11},{}],604:[function(t,e,r){"use strict";function n(t){if(a(t)||"string"!=typeof t)return t;var e=t.trim();if("rgb"!==e.substr(0,3))return t;var r=e.match(/^rgba?\s*\(([^()]*)\)$/);if(!r)return t;var n=r[1].trim().split(/\s*[\s,]\s*/),i="a"===e.charAt(3)&&4===n.length;if(!i&&3!==n.length)return t;for(var o=0;o<n.length;o++){if(!n[o].length)return t;if(n[o]=Number(n[o]),!(n[o]>=0))return t;if(3===o)n[o]>1&&(n[o]=1);else if(n[o]>=1)return t}var s=Math.round(255*n[0])+", "+Math.round(255*n[1])+", "+Math.round(255*n[2]);return i?"rgba("+s+", "+n[3]+")":"rgb("+s+")"}var i=t("tinycolor2"),a=t("fast-isnumeric"),o=e.exports={},s=t("./attributes");o.defaults=s.defaults;var l=o.defaultLine=s.defaultLine;o.lightLine=s.lightLine;var u=o.background=s.background;o.tinyRGB=function(t){var e=t.toRgb();return"rgb("+Math.round(e.r)+", "+Math.round(e.g)+", "+Math.round(e.b)+")"},o.rgb=function(t){return o.tinyRGB(i(t))},o.opacity=function(t){return t?i(t).getAlpha():0},o.addOpacity=function(t,e){var r=i(t).toRgb();return"rgba("+Math.round(r.r)+", "+Math.round(r.g)+", "+Math.round(r.b)+", "+e+")"},o.combine=function(t,e){var r=i(t).toRgb();if(1===r.a)return i(t).toRgbString();var n=i(e||u).toRgb(),a=1===n.a?n:{r:255*(1-n.a)+n.r*n.a,g:255*(1-n.a)+n.g*n.a,b:255*(1-n.a)+n.b*n.a},o={r:a.r*(1-r.a)+r.r*r.a,g:a.g*(1-r.a)+r.g*r.a,b:a.b*(1-r.a)+r.b*r.a};return i(o).toRgbString()},o.contrast=function(t,e,r){var n=i(t);return 1!==n.getAlpha()&&(n=i(o.combine(t,u))),(n.isDark()?e?n.lighten(e):u:r?n.darken(r):l).toString()},o.stroke=function(t,e){var r=i(e);t.style({stroke:o.tinyRGB(r),"stroke-opacity":r.getAlpha()})},o.fill=function(t,e){var r=i(e);t.style({fill:o.tinyRGB(r),"fill-opacity":r.getAlpha()})},o.clean=function(t){if(t&&"object"==typeof t){var e,r,i,a,s=Object.keys(t);for(e=0;e<s.length;e++)if(i=s[e],a=t[i],"color"===i.substr(i.length-5))if(Array.isArray(a))for(r=0;r<a.length;r++)a[r]=n(a[r]);else t[i]=n(a);else if("colorscale"===i.substr(i.length-10)&&Array.isArray(a))for(r=0;r<a.length;r++)Array.isArray(a[r])&&(a[r][1]=n(a[r][1]));else if(Array.isArray(a)){var l=a[0];if(!Array.isArray(l)&&l&&"object"==typeof l)for(r=0;r<a.length;r++)o.clean(a[r])}else a&&"object"==typeof a&&o.clean(a)}}},{"./attributes":603,"fast-isnumeric":131,tinycolor2:534}],605:[function(t,e,r){"use strict";var n=t("../../plots/cartesian/layout_attributes"),i=t("../../plots/font_attributes"),a=t("../../lib/extend").extendFlat,o=t("../../plot_api/edit_types").overrideAll;e.exports=o({thicknessmode:{valType:"enumerated",values:["fraction","pixels"],dflt:"pixels"},thickness:{valType:"number",min:0,dflt:30},lenmode:{valType:"enumerated",values:["fraction","pixels"],dflt:"fraction"},len:{valType:"number",min:0,dflt:1},x:{valType:"number",dflt:1.02,min:-2,max:3},xanchor:{valType:"enumerated",values:["left","center","right"],dflt:"left"},xpad:{valType:"number",min:0,dflt:10},y:{valType:"number",dflt:.5,min:-2,max:3},yanchor:{valType:"enumerated",values:["top","middle","bottom"],dflt:"middle"},ypad:{valType:"number",min:0,dflt:10},outlinecolor:n.linecolor,outlinewidth:n.linewidth,bordercolor:n.linecolor,borderwidth:{valType:"number",min:0,dflt:0},bgcolor:{valType:"color",dflt:"rgba(0,0,0,0)"},tickmode:n.tickmode,nticks:n.nticks,tick0:n.tick0,dtick:n.dtick,tickvals:n.tickvals,ticktext:n.ticktext,ticks:a({},n.ticks,{dflt:""}),ticklen:n.ticklen,tickwidth:n.tickwidth,tickcolor:n.tickcolor,showticklabels:n.showticklabels,tickfont:i({}),tickangle:n.tickangle,tickformat:n.tickformat,tickprefix:n.tickprefix,showtickprefix:n.showtickprefix,ticksuffix:n.ticksuffix,showticksuffix:n.showticksuffix,separatethousands:n.separatethousands,exponentformat:n.exponentformat,showexponent:n.showexponent,title:{valType:"string",dflt:"Click to enter colorscale title"},titlefont:i({}),titleside:{valType:"enumerated",values:["right","top","bottom"],dflt:"top"}},"colorbars","from-root")},{"../../lib/extend":717,"../../plot_api/edit_types":756,"../../plots/cartesian/layout_attributes":783,"../../plots/font_attributes":796}],606:[function(t,e,r){"use strict";var n=t("../../lib"),i=t("../../plots/cartesian/tick_value_defaults"),a=t("../../plots/cartesian/tick_mark_defaults"),o=t("../../plots/cartesian/tick_label_defaults"),s=t("./attributes");e.exports=function(t,e,r){function l(t,e){return n.coerce(c,u,s,t,e)}var u=e.colorbar={},c=t.colorbar||{};l("thickness","fraction"===l("thicknessmode")?30/(r.width-r.margin.l-r.margin.r):30),l("len","fraction"===l("lenmode")?1:r.height-r.margin.t-r.margin.b),l("x"),l("xanchor"),l("xpad"),l("y"),l("yanchor"),l("ypad"),n.noneOrAll(c,u,["x","y"]),l("outlinecolor"),l("outlinewidth"),l("bordercolor"),l("borderwidth"),l("bgcolor"),i(c,u,l,"linear"),o(c,u,l,"linear",{outerTicks:!1,font:r.font,noHover:!0}),a(c,u,l,"linear",{outerTicks:!1,font:r.font,noHover:!0}),l("title"),n.coerceFont(l,"titlefont",r.font),l("titleside")}},{"../../lib":728,"../../plots/cartesian/tick_label_defaults":790,"../../plots/cartesian/tick_mark_defaults":791,"../../plots/cartesian/tick_value_defaults":792,"./attributes":605}],607:[function(t,e,r){"use strict";var n=t("d3"),i=t("tinycolor2"),a=t("../../plotly"),o=t("../../plots/plots"),s=t("../../registry"),l=t("../../plots/cartesian/axes"),u=t("../dragelement"),c=t("../../lib"),h=t("../../lib/extend").extendFlat,f=t("../../lib/setcursor"),d=t("../drawing"),p=t("../color"),m=t("../titles"),g=t("../../lib/svg_text_utils"),v=t("../../constants/alignment").LINE_SPACING,y=t("../../plots/cartesian/axis_defaults"),b=t("../../plots/cartesian/position_defaults"),x=t("../../plots/cartesian/layout_attributes"),_=t("./attributes");e.exports=function(t,e){function r(){function _(t,e){return c.coerce(et,rt,x,t,e)}function k(){if(-1!==["top","bottom"].indexOf(M.titleside)){var e=lt.select(".cbtitle"),r=e.select("text"),a=[-M.outlinewidth/2,M.outlinewidth/2],o=e.select(".h"+rt._id+"title-math-group").node(),s=15.6;if(r.node()&&(s=parseInt(r.node().style.fontSize,10)*v),o?(ct=d.bBox(o).height)>s&&(a[1]-=(ct-s)/2):r.node()&&!r.classed("js-placeholder")&&(ct=d.bBox(r.node()).height),ct){if(ct+=5,"top"===M.titleside)rt.domain[1]-=ct/E.h,a[1]*=-1;else{rt.domain[0]+=ct/E.h;var u=g.lineCount(r);a[1]+=(1-u)*s}e.attr("transform","translate("+a+")"),rt.setScale()}}lt.selectAll(".cbfills,.cblines,.cbaxis").attr("transform","translate(0,"+Math.round(E.h*(1-rt.domain[1]))+")");var h=lt.select(".cbfills").selectAll("rect.cbfill").data(D);h.enter().append("rect").classed("cbfill",!0).style("stroke","none"),h.exit().remove(),h.each(function(t,e){var r=[0===e?I[0]:(D[e]+D[e-1])/2,e===D.length-1?I[1]:(D[e]+D[e+1])/2].map(rt.c2p).map(Math.round);e!==D.length-1&&(r[1]+=r[1]>r[0]?1:-1);var a=O(t).replace("e-",""),o=i(a).toHexString();n.select(this).attr({x:J,width:Math.max(H,2),y:n.min(r),height:Math.max(n.max(r)-n.min(r),2),fill:o})});var f=lt.select(".cblines").selectAll("path.cbline").data(M.line.color&&M.line.width?z:[]);return f.enter().append("path").classed("cbline",!0),f.exit().remove(),f.each(function(t){n.select(this).attr("d","M"+J+","+(Math.round(rt.c2p(t))+M.line.width/2%1)+"h"+H).call(d.lineGroupStyle,M.line.width,P(t),M.line.dash)}),rt._axislayer.selectAll("g."+rt._id+"tick,path").remove(),rt._pos=J+H+(M.outlinewidth||0)/2-("outside"===M.ticks?1:0),rt.side="right",c.syncOrAsync([function(){return l.doTicks(t,rt,!0)},function(){if(-1===["top","bottom"].indexOf(M.titleside)){var e=rt.titlefont.size,r=rt._offset+rt._length/2,i=E.l+(rt.position||0)*E.w+("right"===rt.side?10+e*(rt.showticklabels?1:.5):-10-e*(rt.showticklabels?.5:0));A("h"+rt._id+"title",{avoid:{selection:n.select(t).selectAll("g."+rt._id+"tick"),side:M.titleside,offsetLeft:E.l,offsetTop:E.t,maxShift:S.width},attributes:{x:i,y:r,"text-anchor":"middle"},transform:{rotate:"-90",offset:0}})}}])}function A(e,r){var n,i=w();n=s.traceIs(i,"markerColorscale")?"marker.colorbar.title":"colorbar.title";var a={propContainer:rt,propName:n,traceIndex:i.index,dfltName:"colorscale",containerGroup:lt.select(".cbtitle")},o="h"===e.charAt(0)?e.substr(1):"h"+e;lt.selectAll("."+o+",."+o+"-math-group").remove(),m.draw(t,e,h(a,r||{}))}function T(){var r=H+M.outlinewidth/2+d.bBox(rt._axislayer.node()).width;if(B=ut.select("text"),B.node()&&!B.classed("js-placeholder")){var n,i=ut.select(".h"+rt._id+"title-math-group").node();n=i&&-1!==["top","bottom"].indexOf(M.titleside)?d.bBox(i).width:d.bBox(ut.node()).right-J-E.l,r=Math.max(r,n)}var a=2*M.xpad+r+M.borderwidth+M.outlinewidth/2,s=$-tt;lt.select(".cbbg").attr({x:J-M.xpad-(M.borderwidth+M.outlinewidth)/2,y:tt-X,width:Math.max(a,2),height:Math.max(s+2*X,2)}).call(p.fill,M.bgcolor).call(p.stroke,M.bordercolor).style({"stroke-width":M.borderwidth}),lt.selectAll(".cboutline").attr({x:J,y:tt+M.ypad+("top"===M.titleside?ct:0),width:Math.max(H,2),height:Math.max(s-2*M.ypad-ct,2)}).call(p.stroke,M.outlinecolor).style({fill:"None","stroke-width":M.outlinewidth});var l=({center:.5,right:1}[M.xanchor]||0)*a;lt.attr("transform","translate("+(E.l-l)+","+E.t+")"),o.autoMargin(t,e,{x:M.x,y:M.y,l:a*({right:1,center:.5}[M.xanchor]||0),r:a*({left:1,center:.5}[M.xanchor]||0),t:s*({bottom:1,middle:.5}[M.yanchor]||0),b:s*({top:1,middle:.5}[M.yanchor]||0)})}var S=t._fullLayout,E=S._size;if("function"!=typeof M.fillcolor&&"function"!=typeof M.line.color)return void S._infolayer.selectAll("g."+e).remove();var L,C,I=n.extent(("function"==typeof M.fillcolor?M.fillcolor:M.line.color).domain()),z=[],D=[],P="function"==typeof M.line.color?M.line.color:function(){return M.line.color},O="function"==typeof M.fillcolor?M.fillcolor:function(){return M.fillcolor},R=M.levels.end+M.levels.size/100,F=M.levels.size,j=1.001*I[0]-.001*I[1],N=1.001*I[1]-.001*I[0];for(C=0;C<1e5&&(L=M.levels.start+C*F,!(F>0?L>=R:L<=R));C++)L>j&&L<N&&z.push(L);if("function"==typeof M.fillcolor)if(M.filllevels)for(R=M.filllevels.end+M.filllevels.size/100,F=M.filllevels.size,C=0;C<1e5&&(L=M.filllevels.start+C*F,!(F>0?L>=R:L<=R));C++)L>I[0]&&L<I[1]&&D.push(L);else D=z.map(function(t){return t-M.levels.size/2}),D.push(D[D.length-1]+M.levels.size);else M.fillcolor&&"string"==typeof M.fillcolor&&(D=[0]);M.levels.size<0&&(z.reverse(),D.reverse());var B,U=S.height-S.margin.t-S.margin.b,V=S.width-S.margin.l-S.margin.r,H=Math.round(M.thickness*("fraction"===M.thicknessmode?V:1)),q=H/E.w,G=Math.round(M.len*("fraction"===M.lenmode?U:1)),Y=G/E.h,W=M.xpad/E.w,X=(M.borderwidth+M.outlinewidth)/2,Z=M.ypad/E.h,J=Math.round(M.x*E.w+M.xpad),K=M.x-q*({middle:.5,right:1}[M.xanchor]||0),Q=M.y+Y*(({top:-.5,bottom:.5}[M.yanchor]||0)-.5),$=Math.round(E.h*(1-Q)),tt=$-G,et={type:"linear",range:I,tickmode:M.tickmode,nticks:M.nticks,tick0:M.tick0,dtick:M.dtick,tickvals:M.tickvals,ticktext:M.ticktext,ticks:M.ticks,ticklen:M.ticklen,tickwidth:M.tickwidth,tickcolor:M.tickcolor,showticklabels:M.showticklabels,tickfont:M.tickfont,tickangle:M.tickangle,tickformat:M.tickformat,exponentformat:M.exponentformat,separatethousands:M.separatethousands,showexponent:M.showexponent,showtickprefix:M.showtickprefix,tickprefix:M.tickprefix,showticksuffix:M.showticksuffix,ticksuffix:M.ticksuffix,title:M.title,titlefont:M.titlefont,showline:!0,anchor:"free",position:1},rt={type:"linear",_id:"y"+e},nt={letter:"y",font:S.font,noHover:!0,calendar:S.calendar};if(y(et,rt,_,nt,S),b(et,rt,_,nt),rt.position=M.x+W+q,r.axis=rt,-1!==["top","bottom"].indexOf(M.titleside)&&(rt.titleside=M.titleside,rt.titlex=M.x+W,rt.titley=Q+("top"===M.titleside?Y-Z:Z)),M.line.color&&"auto"===M.tickmode){rt.tickmode="linear",rt.tick0=M.levels.start;var it=M.levels.size,at=c.constrain(($-tt)/50,4,15)+1,ot=(I[1]-I[0])/((M.nticks||at)*it);if(ot>1){var st=Math.pow(10,Math.floor(Math.log(ot)/Math.LN10));it*=st*c.roundUp(ot/st,[2,5,10]),(Math.abs(M.levels.start)/M.levels.size+1e-6)%1<2e-6&&(rt.tick0=0)}rt.dtick=it}rt.domain=[Q+Z,Q+Y-Z],rt.setScale();var lt=S._infolayer.selectAll("g."+e).data([0]);lt.enter().append("g").classed(e,!0).each(function(){var t=n.select(this);t.append("rect").classed("cbbg",!0),t.append("g").classed("cbfills",!0),t.append("g").classed("cblines",!0),t.append("g").classed("cbaxis",!0).classed("crisp",!0),t.append("g").classed("cbtitleunshift",!0).append("g").classed("cbtitle",!0),t.append("rect").classed("cboutline",!0),t.select(".cbtitle").datum(0)}),lt.attr("transform","translate("+Math.round(E.l)+","+Math.round(E.t)+")");var ut=lt.select(".cbtitleunshift").attr("transform","translate(-"+Math.round(E.l)+",-"+Math.round(E.t)+")");rt._axislayer=lt.select(".cbaxis");var ct=0;if(-1!==["top","bottom"].indexOf(M.titleside)){var ht,ft=E.l+(M.x+W)*E.w,dt=rt.titlefont.size;ht="top"===M.titleside?(1-(Q+Y-Z))*E.h+E.t+3+.75*dt:(1-(Q+Z))*E.h+E.t-3-.25*dt,A(rt._id+"title",{attributes:{x:ft,y:ht,"text-anchor":"start"}})}var pt=c.syncOrAsync([o.previousPromises,k,o.previousPromises,T],t);if(pt&&pt.then&&(t._promises||[]).push(pt),t._context.edits.colorbarPosition){var mt,gt,vt;u.init({element:lt.node(),gd:t,prepFn:function(){mt=lt.attr("transform"),f(lt)},moveFn:function(t,e){lt.attr("transform",mt+" translate("+t+","+e+")"),gt=u.align(K+t/E.w,q,0,1,M.xanchor),vt=u.align(Q-e/E.h,Y,0,1,M.yanchor);var r=u.getCursor(gt,vt,M.xanchor,M.yanchor);f(lt,r)},doneFn:function(e){f(lt),e&&void 0!==gt&&void 0!==vt&&a.restyle(t,{"colorbar.x":gt,"colorbar.y":vt},w().index)}})}return pt}function w(){var r,n,i=e.substr(2);for(r=0;r<t._fullData.length;r++)if(n=t._fullData[r],n.uid===i)return n}var M={};return Object.keys(_).forEach(function(t){M[t]=null}),M.fillcolor=null,M.line={color:null,width:null,dash:null},M.levels={start:null,end:null,size:null},M.filllevels=null,Object.keys(M).forEach(function(t){r[t]=function(e){return arguments.length?(M[t]=c.isPlainObject(M[t])?c.extendFlat(M[t],e):e,r):M[t]}}),r.options=function(t){return Object.keys(t).forEach(function(e){"function"==typeof r[e]&&r[e](t[e])}),r},r._opts=M,r}},{"../../constants/alignment":701,"../../lib":728,"../../lib/extend":717,"../../lib/setcursor":746,"../../lib/svg_text_utils":750,"../../plotly":767,"../../plots/cartesian/axes":772,"../../plots/cartesian/axis_defaults":774,"../../plots/cartesian/layout_attributes":783,"../../plots/cartesian/position_defaults":786,"../../plots/plots":831,"../../registry":846,"../color":604,"../dragelement":625,"../drawing":628,"../titles":694,"./attributes":605,d3:122,tinycolor2:534}],608:[function(t,e,r){"use strict";var n=t("../../lib");e.exports=function(t){return n.isPlainObject(t.colorbar)}},{"../../lib":728}],609:[function(t,e,r){"use strict";e.exports={zauto:{valType:"boolean",dflt:!0,editType:"calc",impliedEdits:{zmin:void 0,zmax:void 0}},zmin:{valType:"number",dflt:null,editType:"plot",impliedEdits:{zauto:!1}},zmax:{valType:"number",dflt:null,editType:"plot",impliedEdits:{zauto:!1}},colorscale:{valType:"colorscale",editType:"calc",impliedEdits:{autocolorscale:!1}},autocolorscale:{valType:"boolean",dflt:!0,editType:"calc",impliedEdits:{colorscale:void 0}},reversescale:{valType:"boolean",dflt:!1,editType:"calc"},showscale:{valType:"boolean",dflt:!0,editType:"calc"}}},{}],610:[function(t,e,r){"use strict";var n=t("../../lib"),i=t("./scales"),a=t("./flip_scale");e.exports=function(t,e,r,o){var s,l;r?(s=n.nestedProperty(t,r).get(),l=n.nestedProperty(t._input,r).get()):(s=t,l=t._input);var u=o+"auto",c=o+"min",h=o+"max",f=s[u],d=s[c],p=s[h],m=s.colorscale;!1===f&&void 0!==d||(d=n.aggNums(Math.min,null,e)),!1===f&&void 0!==p||(p=n.aggNums(Math.max,null,e)),d===p&&(d-=.5,p+=.5),s[c]=d,s[h]=p,l[c]=d,l[h]=p,l[u]=!1!==f||void 0===d&&void 0===p,s.autocolorscale&&(m=d*p<0?i.RdBu:d>=0?i.Reds:i.Blues,l.colorscale=m,s.reversescale&&(m=a(m)),s.colorscale=m)}},{"../../lib":728,"./flip_scale":615,"./scales":622}],611:[function(t,e,r){"use strict";var n=t("./attributes"),i=t("../../lib/extend").extendFlat;t("./scales.js");e.exports=function(t,e,r){return{color:{valType:"color",arrayOk:!0,editType:e||"style"},colorscale:i({},n.colorscale,{}),cauto:i({},n.zauto,{impliedEdits:{cmin:void 0,cmax:void 0}}),cmax:i({},n.zmax,{editType:e||n.zmax.editType,impliedEdits:{cauto:!1}}),cmin:i({},n.zmin,{editType:e||n.zmin.editType,impliedEdits:{cauto:!1}}),autocolorscale:i({},n.autocolorscale,{dflt:!1===r?r:n.autocolorscale.dflt}),reversescale:i({},n.reversescale,{})}}},{"../../lib/extend":717,"./attributes":609,"./scales.js":622}],612:[function(t,e,r){"use strict";var n=t("./scales");e.exports=n.RdBu},{"./scales":622}],613:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),i=t("../../lib"),a=t("../colorbar/has_colorbar"),o=t("../colorbar/defaults"),s=t("./is_valid_scale"),l=t("./flip_scale");e.exports=function(t,e,r,u,c){var h=c.prefix,f=c.cLetter,d=h.slice(0,h.length-1),p=h?i.nestedProperty(t,d).get()||{}:t,m=h?i.nestedProperty(e,d).get()||{}:e,g=p[f+"min"],v=p[f+"max"],y=p.colorscale;u(h+f+"auto",!(n(g)&&n(v)&&g<v)),u(h+f+"min"),u(h+f+"max");var b;void 0!==y&&(b=!s(y)),u(h+"autocolorscale",b);var x=u(h+"colorscale");if(u(h+"reversescale")&&(m.colorscale=l(x)),"marker.line."!==h){var _;h&&(_=a(p)),u(h+"showscale",_)&&o(p,m,r)}}},{"../../lib":728,"../colorbar/defaults":606,"../colorbar/has_colorbar":608,"./flip_scale":615,"./is_valid_scale":619,"fast-isnumeric":131}],614:[function(t,e,r){"use strict";e.exports=function(t,e,r){for(var n=t.length,i=new Array(n),a=new Array(n),o=0;o<n;o++){var s=t[o];i[o]=e+s[0]*(r-e),a[o]=s[1]}return{domain:i,range:a}}},{}],615:[function(t,e,r){"use strict";e.exports=function(t){for(var e,r=t.length,n=new Array(r),i=r-1,a=0;i>=0;i--,a++)e=t[i],n[a]=[1-e[0],e[1]];return n}},{}],616:[function(t,e,r){"use strict";var n=t("./scales"),i=t("./default_scale"),a=t("./is_valid_scale_array");e.exports=function(t,e){function r(){try{t=n[t]||JSON.parse(t)}catch(r){t=e}}return e||(e=i),t?("string"==typeof t&&(r(),"string"==typeof t&&r()),a(t)?t:e):e}},{"./default_scale":612,"./is_valid_scale_array":620,"./scales":622}],617:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),i=t("../../lib"),a=t("./is_valid_scale");e.exports=function(t,e){var r=e?i.nestedProperty(t,e).get()||{}:t,o=r.color,s=!1;if(Array.isArray(o))for(var l=0;l<o.length;l++)if(n(o[l])){s=!0;break}return i.isPlainObject(r)&&(s||!0===r.showscale||n(r.cmin)&&n(r.cmax)||a(r.colorscale)||i.isPlainObject(r.colorbar))}},{"../../lib":728,"./is_valid_scale":619,"fast-isnumeric":131}],618:[function(t,e,r){"use strict";r.scales=t("./scales"),r.defaultScale=t("./default_scale"),r.attributes=t("./attributes"),r.handleDefaults=t("./defaults"),r.calc=t("./calc"),r.hasColorscale=t("./has_colorscale"),r.isValidScale=t("./is_valid_scale"),r.getScale=t("./get_scale"),r.flipScale=t("./flip_scale"),r.extractScale=t("./extract_scale"),r.makeColorScaleFunc=t("./make_color_scale_func")},{"./attributes":609,"./calc":610,"./default_scale":612,"./defaults":613,"./extract_scale":614,"./flip_scale":615,"./get_scale":616,"./has_colorscale":617,"./is_valid_scale":619,"./make_color_scale_func":621,"./scales":622}],619:[function(t,e,r){"use strict";var n=t("./scales"),i=t("./is_valid_scale_array");e.exports=function(t){return void 0!==n[t]||i(t)}},{"./is_valid_scale_array":620,"./scales":622}],620:[function(t,e,r){"use strict";var n=t("tinycolor2");e.exports=function(t){var e=0;if(!Array.isArray(t)||t.length<2)return!1;if(!t[0]||!t[t.length-1])return!1;if(0!=+t[0][0]||1!=+t[t.length-1][0])return!1;for(var r=0;r<t.length;r++){var i=t[r];if(2!==i.length||+i[0]<e||!n(i[1]).isValid())return!1;e=+i[0]}return!0}},{tinycolor2:534}],621:[function(t,e,r){"use strict";function n(t){var e={r:t[0],g:t[1],b:t[2],a:t[3]};return a(e).toRgbString()}var i=t("d3"),a=t("tinycolor2"),o=t("fast-isnumeric"),s=t("../color");e.exports=function(t,e){e=e||{};for(var r=t.domain,l=t.range,u=l.length,c=new Array(u),h=0;h<u;h++){var f=a(l[h]).toRgb();c[h]=[f.r,f.g,f.b,f.a]}var d,p=i.scale.linear().domain(r).range(c).clamp(!0),m=e.noNumericCheck,g=e.returnArray;return d=m&&g?p:m?function(t){return n(p(t))}:g?function(t){return o(t)?p(t):a(t).isValid()?t:s.defaultLine}:function(t){return o(t)?n(p(t)):a(t).isValid()?t:s.defaultLine},d.domain=p.domain,d.range=function(){return l},d}},{"../color":604,d3:122,"fast-isnumeric":131,tinycolor2:534}],622:[function(t,e,r){"use strict";e.exports={Greys:[[0,"rgb(0,0,0)"],[1,"rgb(255,255,255)"]],YlGnBu:[[0,"rgb(8,29,88)"],[.125,"rgb(37,52,148)"],[.25,"rgb(34,94,168)"],[.375,"rgb(29,145,192)"],[.5,"rgb(65,182,196)"],[.625,"rgb(127,205,187)"],[.75,"rgb(199,233,180)"],[.875,"rgb(237,248,217)"],[1,"rgb(255,255,217)"]],Greens:[[0,"rgb(0,68,27)"],[.125,"rgb(0,109,44)"],[.25,"rgb(35,139,69)"],[.375,"rgb(65,171,93)"],[.5,"rgb(116,196,118)"],[.625,"rgb(161,217,155)"],[.75,"rgb(199,233,192)"],[.875,"rgb(229,245,224)"],[1,"rgb(247,252,245)"]],YlOrRd:[[0,"rgb(128,0,38)"],[.125,"rgb(189,0,38)"],[.25,"rgb(227,26,28)"],[.375,"rgb(252,78,42)"],[.5,"rgb(253,141,60)"],[.625,"rgb(254,178,76)"],[.75,"rgb(254,217,118)"],[.875,"rgb(255,237,160)"],[1,"rgb(255,255,204)"]],Bluered:[[0,"rgb(0,0,255)"],[1,"rgb(255,0,0)"]],RdBu:[[0,"rgb(5,10,172)"],[.35,"rgb(106,137,247)"],[.5,"rgb(190,190,190)"],[.6,"rgb(220,170,132)"],[.7,"rgb(230,145,90)"],[1,"rgb(178,10,28)"]],Reds:[[0,"rgb(220,220,220)"],[.2,"rgb(245,195,157)"],[.4,"rgb(245,160,105)"],[1,"rgb(178,10,28)"]],Blues:[[0,"rgb(5,10,172)"],[.35,"rgb(40,60,190)"],[.5,"rgb(70,100,245)"],[.6,"rgb(90,120,245)"],[.7,"rgb(106,137,247)"],[1,"rgb(220,220,220)"]],Picnic:[[0,"rgb(0,0,255)"],[.1,"rgb(51,153,255)"],[.2,"rgb(102,204,255)"],[.3,"rgb(153,204,255)"],[.4,"rgb(204,204,255)"],[.5,"rgb(255,255,255)"],[.6,"rgb(255,204,255)"],[.7,"rgb(255,153,255)"],[.8,"rgb(255,102,204)"],[.9,"rgb(255,102,102)"],[1,"rgb(255,0,0)"]],
Rainbow:[[0,"rgb(150,0,90)"],[.125,"rgb(0,0,200)"],[.25,"rgb(0,25,255)"],[.375,"rgb(0,152,255)"],[.5,"rgb(44,255,150)"],[.625,"rgb(151,255,0)"],[.75,"rgb(255,234,0)"],[.875,"rgb(255,111,0)"],[1,"rgb(255,0,0)"]],Portland:[[0,"rgb(12,51,131)"],[.25,"rgb(10,136,186)"],[.5,"rgb(242,211,56)"],[.75,"rgb(242,143,56)"],[1,"rgb(217,30,30)"]],Jet:[[0,"rgb(0,0,131)"],[.125,"rgb(0,60,170)"],[.375,"rgb(5,255,255)"],[.625,"rgb(255,255,0)"],[.875,"rgb(250,0,0)"],[1,"rgb(128,0,0)"]],Hot:[[0,"rgb(0,0,0)"],[.3,"rgb(230,0,0)"],[.6,"rgb(255,210,0)"],[1,"rgb(255,255,255)"]],Blackbody:[[0,"rgb(0,0,0)"],[.2,"rgb(230,0,0)"],[.4,"rgb(230,210,0)"],[.7,"rgb(255,255,255)"],[1,"rgb(160,200,255)"]],Earth:[[0,"rgb(0,0,130)"],[.1,"rgb(0,180,180)"],[.2,"rgb(40,210,40)"],[.4,"rgb(230,230,50)"],[.6,"rgb(120,70,20)"],[1,"rgb(255,255,255)"]],Electric:[[0,"rgb(0,0,0)"],[.15,"rgb(30,0,100)"],[.4,"rgb(120,0,100)"],[.6,"rgb(160,90,0)"],[.8,"rgb(230,200,0)"],[1,"rgb(255,250,220)"]],Viridis:[[0,"#440154"],[.06274509803921569,"#48186a"],[.12549019607843137,"#472d7b"],[.18823529411764706,"#424086"],[.25098039215686274,"#3b528b"],[.3137254901960784,"#33638d"],[.3764705882352941,"#2c728e"],[.4392156862745098,"#26828e"],[.5019607843137255,"#21918c"],[.5647058823529412,"#1fa088"],[.6274509803921569,"#28ae80"],[.6901960784313725,"#3fbc73"],[.7529411764705882,"#5ec962"],[.8156862745098039,"#84d44b"],[.8784313725490196,"#addc30"],[.9411764705882353,"#d8e219"],[1,"#fde725"]]}},{}],623:[function(t,e,r){"use strict";e.exports=function(t,e,r,n,i){var a=(t-r)/(n-r),o=a+e/(n-r),s=(a+o)/2;return"left"===i||"bottom"===i?a:"center"===i||"middle"===i?s:"right"===i||"top"===i?o:a<2/3-s?a:o>4/3-s?o:s}},{}],624:[function(t,e,r){"use strict";var n=t("../../lib"),i=[["sw-resize","s-resize","se-resize"],["w-resize","move","e-resize"],["nw-resize","n-resize","ne-resize"]];e.exports=function(t,e,r,a){return t="left"===r?0:"center"===r?1:"right"===r?2:n.constrain(Math.floor(3*t),0,2),e="bottom"===a?0:"middle"===a?1:"top"===a?2:n.constrain(Math.floor(3*e),0,2),i[e][t]}},{"../../lib":728}],625:[function(t,e,r){"use strict";function n(){var t=document.createElement("div");t.className="dragcover";var e=t.style;return e.position="fixed",e.left=0,e.right=0,e.top=0,e.bottom=0,e.zIndex=999999999,e.background="none",document.body.appendChild(t),t}function i(t){t._dragging=!1,t._replotPending&&l.plot(t)}function a(t){return o(t.changedTouches?t.changedTouches[0]:t,document.body)}var o=t("mouse-event-offset"),s=t("has-hover"),l=t("../../plotly"),u=t("../../lib"),c=t("../../plots/cartesian/constants"),h=t("../../constants/interactions"),f=e.exports={};f.align=t("./align"),f.getCursor=t("./cursor");var d=t("./unhover");f.unhover=d.wrapped,f.unhoverRaw=d.raw,f.init=function(t){function e(e){if(!e.buttons||2!==e.buttons){y._dragged=!1,y._dragging=!0;var i=a(e);return l=i[0],d=i[1],v=e.target,p=(new Date).getTime(),p-y._mouseDownTime<x?b+=1:(b=1,y._mouseDownTime=p),t.prepFn&&t.prepFn(e,l,d),s?(g=n(),g.style.cursor=window.getComputedStyle(_).cursor):(g=document,m=window.getComputedStyle(document.documentElement).cursor,document.documentElement.style.cursor=window.getComputedStyle(_).cursor),document.addEventListener("mousemove",r),document.addEventListener("mouseup",o),document.addEventListener("touchmove",r),document.addEventListener("touchend",o),u.pauseEvent(e)}}function r(e){var r=a(e),n=r[0]-l,i=r[1]-d,o=t.minDrag||c.MINDRAG;return Math.abs(n)<o&&(n=0),Math.abs(i)<o&&(i=0),(n||i)&&(y._dragged=!0,f.unhover(y)),t.moveFn&&t.moveFn(n,i,y._dragged),u.pauseEvent(e)}function o(e){if(document.removeEventListener("mousemove",r),document.removeEventListener("mouseup",o),document.removeEventListener("touchmove",r),document.removeEventListener("touchend",o),s?u.removeElement(g):m&&(g.documentElement.style.cursor=m,m=null),!y._dragging)return void(y._dragged=!1);if(y._dragging=!1,(new Date).getTime()-y._mouseDownTime>x&&(b=Math.max(b-1,1)),t.doneFn&&t.doneFn(y._dragged,b,e),!y._dragged){var n;try{n=new MouseEvent("click",e)}catch(t){var l=a(e);n=document.createEvent("MouseEvents"),n.initMouseEvent("click",e.bubbles,e.cancelable,e.view,e.detail,e.screenX,e.screenY,l[0],l[1],e.ctrlKey,e.altKey,e.shiftKey,e.metaKey,e.button,e.relatedTarget)}v.dispatchEvent(n)}return i(y),y._dragged=!1,u.pauseEvent(e)}var l,d,p,m,g,v,y=t.gd,b=1,x=h.DBLCLICKDELAY,_=t.element;y._mouseDownTime||(y._mouseDownTime=0),_.style.pointerEvents="all",_.onmousedown=e,_.ontouchstart=e},f.coverSlip=n},{"../../constants/interactions":706,"../../lib":728,"../../plotly":767,"../../plots/cartesian/constants":777,"./align":623,"./cursor":624,"./unhover":626,"has-hover":288,"mouse-event-offset":453}],626:[function(t,e,r){"use strict";var n=t("../../lib/events"),i=t("../../lib/throttle"),a=t("../../lib/get_graph_div"),o=t("../fx/constants"),s=e.exports={};s.wrapped=function(t,e,r){t=a(t),i.clear(t._fullLayout._uid+o.HOVERID),s.raw(t,e,r)},s.raw=function(t,e){var r=t._fullLayout,i=t._hoverdata;e||(e={}),e.target&&!1===n.triggerHandler(t,"plotly_beforehover",e)||(r._hoverlayer.selectAll("g").remove(),r._hoverlayer.selectAll("line").remove(),r._hoverlayer.selectAll("circle").remove(),t._hoverdata=void 0,e.target&&i&&t.emit("plotly_unhover",{event:e,points:i}))}},{"../../lib/events":716,"../../lib/get_graph_div":723,"../../lib/throttle":751,"../fx/constants":640}],627:[function(t,e,r){"use strict";r.dash={valType:"string",values:["solid","dot","dash","longdash","dashdot","longdashdot"],dflt:"solid",editType:"style"}},{}],628:[function(t,e,r){"use strict";function n(t,e,r,n,i,a,o,s){if(u.traceIs(r,"symbols")){var l=y(r);e.attr("d",function(t){var e;e="various"===t.ms||"various"===a.size?3:v.isBubble(r)?l(t.ms):(a.size||6)/2,t.mrc=e;var n=b.symbolNumber(t.mx||a.symbol)||0,i=n%100;return t.om=n%200>=100,b.symbolFuncs[i](e)+(n>=200?w:"")}).style("opacity",function(t){return(t.mo+1||a.opacity+1)-1})}var h,f,d,p=!1;if(t.so?(d=o.outlierwidth,f=o.outliercolor,h=a.outliercolor):(d=(t.mlw+1||o.width+1||(t.trace?t.trace.marker.line.width:0)+1)-1,f="mlc"in t?t.mlcc=i(t.mlc):Array.isArray(o.color)?c.defaultLine:o.color,Array.isArray(a.color)&&(h=c.defaultLine,p=!0),h="mc"in t?t.mcc=n(t.mc):a.color||"rgba(0,0,0,0)"),t.om)e.call(c.stroke,h).style({"stroke-width":(d||1)+"px",fill:"none"});else{e.style("stroke-width",d+"px");var m=a.gradient,g=t.mgt;if(g?p=!0:g=m&&m.type,g&&"none"!==g){var x=t.mgc;x?p=!0:x=m.color;var _="g"+s._fullLayout._uid+"-"+r.uid;p&&(_+="-"+t.i),e.call(b.gradient,s,_,g,h,x)}else e.call(c.fill,h);d&&e.call(c.stroke,f)}}function i(t,e,r,n){var i=t[0]-e[0],a=t[1]-e[1],s=r[0]-e[0],l=r[1]-e[1],u=Math.pow(i*i+a*a,T/2),c=Math.pow(s*s+l*l,T/2),h=(c*c*i-u*u*s)*n,f=(c*c*a-u*u*l)*n,d=3*c*(u+c),p=3*u*(u+c);return[[o.round(e[0]+(d&&h/d),2),o.round(e[1]+(d&&f/d),2)],[o.round(e[0]-(p&&h/p),2),o.round(e[1]-(p&&f/p),2)]]}function a(t){var e=t.getAttribute("data-unformatted");if(null!==e)return e+t.getAttribute("data-math")+t.getAttribute("text-anchor")+t.getAttribute("style")}var o=t("d3"),s=t("fast-isnumeric"),l=t("tinycolor2"),u=t("../../registry"),c=t("../color"),h=t("../colorscale"),f=t("../../lib"),d=t("../../lib/svg_text_utils"),p=t("../../constants/xmlns_namespaces"),m=t("../../constants/alignment"),g=m.LINE_SPACING,v=t("../../traces/scatter/subtypes"),y=t("../../traces/scatter/make_bubble_size_func"),b=e.exports={};b.font=function(t,e,r,n){f.isPlainObject(e)&&(n=e.color,r=e.size,e=e.family),e&&t.style("font-family",e),r+1&&t.style("font-size",r+"px"),n&&t.call(c.fill,n)},b.setPosition=function(t,e,r){t.attr("x",e).attr("y",r)},b.setSize=function(t,e,r){t.attr("width",e).attr("height",r)},b.setRect=function(t,e,r,n,i){t.call(b.setPosition,e,r).call(b.setSize,n,i)},b.translatePoint=function(t,e,r,n){var i=r.c2p(t.x),a=n.c2p(t.y);return!!(s(i)&&s(a)&&e.node())&&("text"===e.node().nodeName?e.attr("x",i).attr("y",a):e.attr("transform","translate("+i+","+a+")"),!0)},b.translatePoints=function(t,e,r){t.each(function(t){var n=o.select(this);b.translatePoint(t,n,e,r)})},b.hideOutsideRangePoint=function(t,e,r,n){e.attr("display",r.isPtWithinRange(t)&&n.isPtWithinRange(t)?null:"none")},b.hideOutsideRangePoints=function(t,e){if(e._hasClipOnAxisFalse){var r=e.xaxis,n=e.yaxis;t.each(function(t){b.hideOutsideRangePoint(t,o.select(this),r,n)})}},b.crispRound=function(t,e,r){return e&&s(e)?t._context.staticPlot?e:e<1?1:Math.round(e):r||0},b.singleLineStyle=function(t,e,r,n,i){e.style("fill","none");var a=(((t||[])[0]||{}).trace||{}).line||{},o=r||a.width||0,s=i||a.dash||"";c.stroke(e,n||a.color),b.dashLine(e,s,o)},b.lineGroupStyle=function(t,e,r,n){t.style("fill","none").each(function(t){var i=(((t||[])[0]||{}).trace||{}).line||{},a=e||i.width||0,s=n||i.dash||"";o.select(this).call(c.stroke,r||i.color).call(b.dashLine,s,a)})},b.dashLine=function(t,e,r){r=+r||0,e=b.dashStyle(e,r),t.style({"stroke-dasharray":e,"stroke-width":r+"px"})},b.dashStyle=function(t,e){e=+e||1;var r=Math.max(e,3);return"solid"===t?t="":"dot"===t?t=r+"px,"+r+"px":"dash"===t?t=3*r+"px,"+3*r+"px":"longdash"===t?t=5*r+"px,"+5*r+"px":"dashdot"===t?t=3*r+"px,"+r+"px,"+r+"px,"+r+"px":"longdashdot"===t&&(t=5*r+"px,"+2*r+"px,"+r+"px,"+2*r+"px"),t},b.singleFillStyle=function(t){var e=o.select(t.node()),r=e.data(),n=(((r[0]||[])[0]||{}).trace||{}).fillcolor;n&&t.call(c.fill,n)},b.fillGroupStyle=function(t){t.style("stroke-width",0).each(function(e){var r=o.select(this);try{r.call(c.fill,e[0].trace.fillcolor)}catch(e){f.error(e,t),r.remove()}})};var x=t("./symbol_defs");b.symbolNames=[],b.symbolFuncs=[],b.symbolNeedLines={},b.symbolNoDot={},b.symbolList=[],Object.keys(x).forEach(function(t){var e=x[t];b.symbolList=b.symbolList.concat([e.n,t,e.n+100,t+"-open"]),b.symbolNames[e.n]=t,b.symbolFuncs[e.n]=e.f,e.needLine&&(b.symbolNeedLines[e.n]=!0),e.noDot?b.symbolNoDot[e.n]=!0:b.symbolList=b.symbolList.concat([e.n+200,t+"-dot",e.n+300,t+"-open-dot"])});var _=b.symbolNames.length,w="M0,0.5L0.5,0L0,-0.5L-0.5,0Z";b.symbolNumber=function(t){if("string"==typeof t){var e=0;t.indexOf("-open")>0&&(e=100,t=t.replace("-open","")),t.indexOf("-dot")>0&&(e+=200,t=t.replace("-dot","")),t=b.symbolNames.indexOf(t),t>=0&&(t+=e)}return t%100>=_||t>=400?0:Math.floor(Math.max(t,0))};var M={x1:1,x2:0,y1:0,y2:0},k={x1:0,x2:0,y1:1,y2:0};b.gradient=function(t,e,r,n,i,a){var s=e._fullLayout._defs.select(".gradients").selectAll("#"+r).data([n+i+a],f.identity);s.exit().remove(),s.enter().append("radial"===n?"radialGradient":"linearGradient").each(function(){var t=o.select(this);"horizontal"===n?t.attr(M):"vertical"===n&&t.attr(k),t.attr("id",r);var e=l(i),s=l(a);t.append("stop").attr({offset:"0%","stop-color":c.tinyRGB(s),"stop-opacity":s.getAlpha()}),t.append("stop").attr({offset:"100%","stop-color":c.tinyRGB(e),"stop-opacity":e.getAlpha()})}),t.style({fill:"url(#"+r+")","fill-opacity":null})},b.initGradients=function(t){var e=t._fullLayout._defs.selectAll(".gradients").data([0]);e.enter().append("g").classed("gradients",!0),e.selectAll("linearGradient,radialGradient").remove()},b.singlePointStyle=function(t,e,r,i,a,o){var s=r.marker;n(t,e,r,i,a,s,s.line,o)},b.pointStyle=function(t,e,r){if(t.size()){var n=e.marker,i=b.tryColorscale(n,""),a=b.tryColorscale(n,"line");t.each(function(t){b.singlePointStyle(t,o.select(this),e,i,a,r)})}},b.tryColorscale=function(t,e){var r=e?f.nestedProperty(t,e).get():t,n=r.colorscale,i=r.color;return n&&Array.isArray(i)?h.makeColorScaleFunc(h.extractScale(n,r.cmin,r.cmax)):f.identity};var A={start:1,end:-1,middle:0,bottom:1,top:-1};b.textPointStyle=function(t,e,r){t.each(function(t){var n=o.select(this),i=f.extractOption(t,e,"tx","text");if(!i)return void n.remove();var a=t.tp||e.textposition,l=-1!==a.indexOf("top")?"top":-1!==a.indexOf("bottom")?"bottom":"middle",u=-1!==a.indexOf("left")?"end":-1!==a.indexOf("right")?"start":"middle",c=t.ts||e.textfont.size,h=t.mrc?t.mrc/.8+1:0;c=s(c)&&c>0?c:0,n.call(b.font,t.tf||e.textfont.family,c,t.tc||e.textfont.color).attr("text-anchor",u).text(i).call(d.convertToTspans,r);var p=o.select(this.parentNode),m=(d.lineCount(n)-1)*g+1,v=A[u]*h,y=.75*c+A[l]*h+(A[l]-1)*m*c/2;p.attr("transform","translate("+v+","+y+")")})};var T=.5;b.smoothopen=function(t,e){if(t.length<3)return"M"+t.join("L");var r,n="M"+t[0],a=[];for(r=1;r<t.length-1;r++)a.push(i(t[r-1],t[r],t[r+1],e));for(n+="Q"+a[0][0]+" "+t[1],r=2;r<t.length-1;r++)n+="C"+a[r-2][1]+" "+a[r-1][0]+" "+t[r];return n+="Q"+a[t.length-3][1]+" "+t[t.length-1]},b.smoothclosed=function(t,e){if(t.length<3)return"M"+t.join("L")+"Z";var r,n="M"+t[0],a=t.length-1,o=[i(t[a],t[0],t[1],e)];for(r=1;r<a;r++)o.push(i(t[r-1],t[r],t[r+1],e));for(o.push(i(t[a-1],t[a],t[0],e)),r=1;r<=a;r++)n+="C"+o[r-1][1]+" "+o[r][0]+" "+t[r];return n+="C"+o[a][1]+" "+o[0][0]+" "+t[0]+"Z"};var S={hv:function(t,e){return"H"+o.round(e[0],2)+"V"+o.round(e[1],2)},vh:function(t,e){return"V"+o.round(e[1],2)+"H"+o.round(e[0],2)},hvh:function(t,e){return"H"+o.round((t[0]+e[0])/2,2)+"V"+o.round(e[1],2)+"H"+o.round(e[0],2)},vhv:function(t,e){return"V"+o.round((t[1]+e[1])/2,2)+"H"+o.round(e[0],2)+"V"+o.round(e[1],2)}},E=function(t,e){return"L"+o.round(e[0],2)+","+o.round(e[1],2)};b.steps=function(t){var e=S[t]||E;return function(t){for(var r="M"+o.round(t[0][0],2)+","+o.round(t[0][1],2),n=1;n<t.length;n++)r+=e(t[n-1],t[n]);return r}},b.makeTester=function(){var t=o.select("body").selectAll("#js-plotly-tester").data([0]);t.enter().append("svg").attr("id","js-plotly-tester").attr(p.svgAttrs).style({position:"absolute",left:"-10000px",top:"-10000px",width:"9000px",height:"9000px","z-index":"1"});var e=t.selectAll(".js-reference-point").data([0]);e.enter().append("path").classed("js-reference-point",!0).attr("d","M0,0H1V1H0Z").style({"stroke-width":0,fill:"black"}),b.tester=t,b.testref=e},b.savedBBoxes={};var L=0;b.bBox=function(t,e,r){r||(r=a(t));var n;if(r){if(n=b.savedBBoxes[r])return f.extendFlat({},n)}else if(1===t.childNodes.length){var i=t.childNodes[0];if(r=a(i)){var s=+i.getAttribute("x")||0,l=+i.getAttribute("y")||0,u=i.getAttribute("transform");if(!u){var c=b.bBox(i,!1,r);return s&&(c.left+=s,c.right+=s),l&&(c.top+=l,c.bottom+=l),c}if(r+="~"+s+"~"+l+"~"+u,n=b.savedBBoxes[r])return f.extendFlat({},n)}}var h,p;e?h=t:(p=b.tester.node(),h=t.cloneNode(!0),p.appendChild(h)),o.select(h).attr("transform",null).call(d.positionText,0,0);var m=h.getBoundingClientRect(),g=b.testref.node().getBoundingClientRect();e||p.removeChild(h);var v={height:m.height,width:m.width,left:m.left-g.left,top:m.top-g.top,right:m.right-g.left,bottom:m.bottom-g.top};return L>=1e4&&(b.savedBBoxes={},L=0),r&&(b.savedBBoxes[r]=v),L++,f.extendFlat({},v)},b.setClipUrl=function(t,e){if(!e)return void t.attr("clip-path",null);var r="#"+e,n=o.select("base");n.size()&&n.attr("href")&&(r=window.location.href.split("#")[0]+r),t.attr("clip-path","url("+r+")")},b.getTranslate=function(t){var e=/.*\btranslate\((-?\d*\.?\d*)[^-\d]*(-?\d*\.?\d*)[^\d].*/,r=t.attr?"attr":"getAttribute",n=t[r]("transform")||"",i=n.replace(e,function(t,e,r){return[e,r].join(" ")}).split(" ");return{x:+i[0]||0,y:+i[1]||0}},b.setTranslate=function(t,e,r){var n=/(\btranslate\(.*?\);?)/,i=t.attr?"attr":"getAttribute",a=t.attr?"attr":"setAttribute",o=t[i]("transform")||"";return e=e||0,r=r||0,o=o.replace(n,"").trim(),o+=" translate("+e+", "+r+")",o=o.trim(),t[a]("transform",o),o},b.getScale=function(t){var e=/.*\bscale\((\d*\.?\d*)[^\d]*(\d*\.?\d*)[^\d].*/,r=t.attr?"attr":"getAttribute",n=t[r]("transform")||"",i=n.replace(e,function(t,e,r){return[e,r].join(" ")}).split(" ");return{x:+i[0]||1,y:+i[1]||1}},b.setScale=function(t,e,r){var n=/(\bscale\(.*?\);?)/,i=t.attr?"attr":"getAttribute",a=t.attr?"attr":"setAttribute",o=t[i]("transform")||"";return e=e||1,r=r||1,o=o.replace(n,"").trim(),o+=" scale("+e+", "+r+")",o=o.trim(),t[a]("transform",o),o},b.setPointGroupScale=function(t,e,r){var n,i,a;return e=e||1,r=r||1,i=1===e&&1===r?"":" scale("+e+","+r+")",a=/\s*sc.*/,t.each(function(){n=(this.getAttribute("transform")||"").replace(a,""),n+=i,n=n.trim(),this.setAttribute("transform",n)}),i};var C=/translate\([^)]*\)\s*$/;b.setTextPointsScale=function(t,e,r){t.each(function(){var t,n=o.select(this),i=n.select("text");if(i.node()){var a=parseFloat(i.attr("x")||0),s=parseFloat(i.attr("y")||0),l=(n.attr("transform")||"").match(C);t=1===e&&1===r?[]:["translate("+a+","+s+")","scale("+e+","+r+")","translate("+-a+","+-s+")"],l&&t.push(l),n.attr("transform",t.join(" "))}})}},{"../../constants/alignment":701,"../../constants/xmlns_namespaces":709,"../../lib":728,"../../lib/svg_text_utils":750,"../../registry":846,"../../traces/scatter/make_bubble_size_func":1047,"../../traces/scatter/subtypes":1052,"../color":604,"../colorscale":618,"./symbol_defs":629,d3:122,"fast-isnumeric":131,tinycolor2:534}],629:[function(t,e,r){"use strict";var n=t("d3");e.exports={circle:{n:0,f:function(t){var e=n.round(t,2);return"M"+e+",0A"+e+","+e+" 0 1,1 0,-"+e+"A"+e+","+e+" 0 0,1 "+e+",0Z"}},square:{n:1,f:function(t){var e=n.round(t,2);return"M"+e+","+e+"H-"+e+"V-"+e+"H"+e+"Z"}},diamond:{n:2,f:function(t){var e=n.round(1.3*t,2);return"M"+e+",0L0,"+e+"L-"+e+",0L0,-"+e+"Z"}},cross:{n:3,f:function(t){var e=n.round(.4*t,2),r=n.round(1.2*t,2);return"M"+r+","+e+"H"+e+"V"+r+"H-"+e+"V"+e+"H-"+r+"V-"+e+"H-"+e+"V-"+r+"H"+e+"V-"+e+"H"+r+"Z"}},x:{n:4,f:function(t){var e=n.round(.8*t/Math.sqrt(2),2),r="l"+e+","+e,i="l"+e+",-"+e,a="l-"+e+",-"+e,o="l-"+e+","+e;return"M0,"+e+r+i+a+i+a+o+a+o+r+o+r+"Z"}},"triangle-up":{n:5,f:function(t){var e=n.round(2*t/Math.sqrt(3),2);return"M-"+e+","+n.round(t/2,2)+"H"+e+"L0,-"+n.round(t,2)+"Z"}},"triangle-down":{n:6,f:function(t){var e=n.round(2*t/Math.sqrt(3),2);return"M-"+e+",-"+n.round(t/2,2)+"H"+e+"L0,"+n.round(t,2)+"Z"}},"triangle-left":{n:7,f:function(t){var e=n.round(2*t/Math.sqrt(3),2);return"M"+n.round(t/2,2)+",-"+e+"V"+e+"L-"+n.round(t,2)+",0Z"}},"triangle-right":{n:8,f:function(t){var e=n.round(2*t/Math.sqrt(3),2);return"M-"+n.round(t/2,2)+",-"+e+"V"+e+"L"+n.round(t,2)+",0Z"}},"triangle-ne":{n:9,f:function(t){var e=n.round(.6*t,2),r=n.round(1.2*t,2);return"M-"+r+",-"+e+"H"+e+"V"+r+"Z"}},"triangle-se":{n:10,f:function(t){var e=n.round(.6*t,2),r=n.round(1.2*t,2);return"M"+e+",-"+r+"V"+e+"H-"+r+"Z"}},"triangle-sw":{n:11,f:function(t){var e=n.round(.6*t,2),r=n.round(1.2*t,2);return"M"+r+","+e+"H-"+e+"V-"+r+"Z"}},"triangle-nw":{n:12,f:function(t){var e=n.round(.6*t,2),r=n.round(1.2*t,2);return"M-"+e+","+r+"V-"+e+"H"+r+"Z"}},pentagon:{n:13,f:function(t){var e=n.round(.951*t,2),r=n.round(.588*t,2),i=n.round(-t,2),a=n.round(-.309*t,2);return"M"+e+","+a+"L"+r+","+n.round(.809*t,2)+"H-"+r+"L-"+e+","+a+"L0,"+i+"Z"}},hexagon:{n:14,f:function(t){var e=n.round(t,2),r=n.round(t/2,2),i=n.round(t*Math.sqrt(3)/2,2);return"M"+i+",-"+r+"V"+r+"L0,"+e+"L-"+i+","+r+"V-"+r+"L0,-"+e+"Z"}},hexagon2:{n:15,f:function(t){var e=n.round(t,2),r=n.round(t/2,2),i=n.round(t*Math.sqrt(3)/2,2);return"M-"+r+","+i+"H"+r+"L"+e+",0L"+r+",-"+i+"H-"+r+"L-"+e+",0Z"}},octagon:{n:16,f:function(t){var e=n.round(.924*t,2),r=n.round(.383*t,2);return"M-"+r+",-"+e+"H"+r+"L"+e+",-"+r+"V"+r+"L"+r+","+e+"H-"+r+"L-"+e+","+r+"V-"+r+"Z"}},star:{n:17,f:function(t){var e=1.4*t,r=n.round(.225*e,2),i=n.round(.951*e,2),a=n.round(.363*e,2),o=n.round(.588*e,2),s=n.round(-e,2),l=n.round(-.309*e,2),u=n.round(.118*e,2),c=n.round(.809*e,2);return"M"+r+","+l+"H"+i+"L"+a+","+u+"L"+o+","+c+"L0,"+n.round(.382*e,2)+"L-"+o+","+c+"L-"+a+","+u+"L-"+i+","+l+"H-"+r+"L0,"+s+"Z"}},hexagram:{n:18,f:function(t){var e=n.round(.66*t,2),r=n.round(.38*t,2),i=n.round(.76*t,2);return"M-"+i+",0l-"+r+",-"+e+"h"+i+"l"+r+",-"+e+"l"+r+","+e+"h"+i+"l-"+r+","+e+"l"+r+","+e+"h-"+i+"l-"+r+","+e+"l-"+r+",-"+e+"h-"+i+"Z"}},"star-triangle-up":{n:19,f:function(t){var e=n.round(t*Math.sqrt(3)*.8,2),r=n.round(.8*t,2),i=n.round(1.6*t,2),a=n.round(4*t,2),o="A "+a+","+a+" 0 0 1 ";return"M-"+e+","+r+o+e+","+r+o+"0,-"+i+o+"-"+e+","+r+"Z"}},"star-triangle-down":{n:20,f:function(t){var e=n.round(t*Math.sqrt(3)*.8,2),r=n.round(.8*t,2),i=n.round(1.6*t,2),a=n.round(4*t,2),o="A "+a+","+a+" 0 0 1 ";return"M"+e+",-"+r+o+"-"+e+",-"+r+o+"0,"+i+o+e+",-"+r+"Z"}},"star-square":{n:21,f:function(t){var e=n.round(1.1*t,2),r=n.round(2*t,2),i="A "+r+","+r+" 0 0 1 ";return"M-"+e+",-"+e+i+"-"+e+","+e+i+e+","+e+i+e+",-"+e+i+"-"+e+",-"+e+"Z"}},"star-diamond":{n:22,f:function(t){var e=n.round(1.4*t,2),r=n.round(1.9*t,2),i="A "+r+","+r+" 0 0 1 ";return"M-"+e+",0"+i+"0,"+e+i+e+",0"+i+"0,-"+e+i+"-"+e+",0Z"}},"diamond-tall":{n:23,f:function(t){var e=n.round(.7*t,2),r=n.round(1.4*t,2);return"M0,"+r+"L"+e+",0L0,-"+r+"L-"+e+",0Z"}},"diamond-wide":{n:24,f:function(t){var e=n.round(1.4*t,2),r=n.round(.7*t,2);return"M0,"+r+"L"+e+",0L0,-"+r+"L-"+e+",0Z"}},hourglass:{n:25,f:function(t){var e=n.round(t,2);return"M"+e+","+e+"H-"+e+"L"+e+",-"+e+"H-"+e+"Z"},noDot:!0},bowtie:{n:26,f:function(t){var e=n.round(t,2);return"M"+e+","+e+"V-"+e+"L-"+e+","+e+"V-"+e+"Z"},noDot:!0},"circle-cross":{n:27,f:function(t){var e=n.round(t,2);return"M0,"+e+"V-"+e+"M"+e+",0H-"+e+"M"+e+",0A"+e+","+e+" 0 1,1 0,-"+e+"A"+e+","+e+" 0 0,1 "+e+",0Z"},needLine:!0,noDot:!0},"circle-x":{n:28,f:function(t){var e=n.round(t,2),r=n.round(t/Math.sqrt(2),2);return"M"+r+","+r+"L-"+r+",-"+r+"M"+r+",-"+r+"L-"+r+","+r+"M"+e+",0A"+e+","+e+" 0 1,1 0,-"+e+"A"+e+","+e+" 0 0,1 "+e+",0Z"},needLine:!0,noDot:!0},"square-cross":{n:29,f:function(t){var e=n.round(t,2);return"M0,"+e+"V-"+e+"M"+e+",0H-"+e+"M"+e+","+e+"H-"+e+"V-"+e+"H"+e+"Z"},needLine:!0,noDot:!0},"square-x":{n:30,f:function(t){var e=n.round(t,2);return"M"+e+","+e+"L-"+e+",-"+e+"M"+e+",-"+e+"L-"+e+","+e+"M"+e+","+e+"H-"+e+"V-"+e+"H"+e+"Z"},needLine:!0,noDot:!0},"diamond-cross":{n:31,f:function(t){var e=n.round(1.3*t,2);return"M"+e+",0L0,"+e+"L-"+e+",0L0,-"+e+"ZM0,-"+e+"V"+e+"M-"+e+",0H"+e},needLine:!0,noDot:!0},"diamond-x":{n:32,f:function(t){var e=n.round(1.3*t,2),r=n.round(.65*t,2);return"M"+e+",0L0,"+e+"L-"+e+",0L0,-"+e+"ZM-"+r+",-"+r+"L"+r+","+r+"M-"+r+","+r+"L"+r+",-"+r},needLine:!0,noDot:!0},"cross-thin":{n:33,f:function(t){var e=n.round(1.4*t,2);return"M0,"+e+"V-"+e+"M"+e+",0H-"+e},needLine:!0,noDot:!0},"x-thin":{n:34,f:function(t){var e=n.round(t,2);return"M"+e+","+e+"L-"+e+",-"+e+"M"+e+",-"+e+"L-"+e+","+e},needLine:!0,noDot:!0},asterisk:{n:35,f:function(t){var e=n.round(1.2*t,2),r=n.round(.85*t,2);return"M0,"+e+"V-"+e+"M"+e+",0H-"+e+"M"+r+","+r+"L-"+r+",-"+r+"M"+r+",-"+r+"L-"+r+","+r},needLine:!0,noDot:!0},hash:{n:36,f:function(t){var e=n.round(t/2,2),r=n.round(t,2);return"M"+e+","+r+"V-"+r+"m-"+r+",0V"+r+"M"+r+","+e+"H-"+r+"m0,-"+r+"H"+r},needLine:!0},"y-up":{n:37,f:function(t){var e=n.round(1.2*t,2),r=n.round(1.6*t,2),i=n.round(.8*t,2);return"M-"+e+","+i+"L0,0M"+e+","+i+"L0,0M0,-"+r+"L0,0"},needLine:!0,noDot:!0},"y-down":{n:38,f:function(t){var e=n.round(1.2*t,2),r=n.round(1.6*t,2),i=n.round(.8*t,2);return"M-"+e+",-"+i+"L0,0M"+e+",-"+i+"L0,0M0,"+r+"L0,0"},needLine:!0,noDot:!0},"y-left":{n:39,f:function(t){var e=n.round(1.2*t,2),r=n.round(1.6*t,2),i=n.round(.8*t,2);return"M"+i+","+e+"L0,0M"+i+",-"+e+"L0,0M-"+r+",0L0,0"},needLine:!0,noDot:!0},"y-right":{n:40,f:function(t){var e=n.round(1.2*t,2),r=n.round(1.6*t,2),i=n.round(.8*t,2);return"M-"+i+","+e+"L0,0M-"+i+",-"+e+"L0,0M"+r+",0L0,0"},needLine:!0,noDot:!0},"line-ew":{n:41,f:function(t){var e=n.round(1.4*t,2);return"M"+e+",0H-"+e},needLine:!0,noDot:!0},"line-ns":{n:42,f:function(t){var e=n.round(1.4*t,2);return"M0,"+e+"V-"+e},needLine:!0,noDot:!0},"line-ne":{n:43,f:function(t){var e=n.round(t,2);return"M"+e+",-"+e+"L-"+e+","+e},needLine:!0,noDot:!0},"line-nw":{n:44,f:function(t){var e=n.round(t,2);return"M"+e+","+e+"L-"+e+",-"+e},needLine:!0,noDot:!0}}},{d3:122}],630:[function(t,e,r){"use strict";e.exports={visible:{valType:"boolean",editType:"calc"},type:{valType:"enumerated",values:["percent","constant","sqrt","data"],editType:"calc"},symmetric:{valType:"boolean",editType:"calc"},array:{valType:"data_array",editType:"calc"},arrayminus:{valType:"data_array",editType:"calc"},value:{valType:"number",min:0,dflt:10,editType:"calc"},valueminus:{valType:"number",min:0,dflt:10,editType:"calc"},traceref:{valType:"integer",min:0,dflt:0,editType:"style"},tracerefminus:{valType:"integer",min:0,dflt:0,editType:"style"},copy_ystyle:{valType:"boolean",editType:"plot"},copy_zstyle:{valType:"boolean",editType:"style"},color:{valType:"color",editType:"style"},thickness:{valType:"number",min:0,dflt:2,editType:"style"},width:{valType:"number",min:0,editType:"plot"},editType:"calc",_deprecated:{opacity:{valType:"number",editType:"style"}}}},{}],631:[function(t,e,r){"use strict";function n(t,e,r,n){var a=e["error_"+n]||{},l=a.visible&&-1!==["linear","log"].indexOf(r.type),u=[];if(l){for(var c=s(a),h=0;h<t.length;h++){var f=t[h],d=f[n];if(i(r.c2l(d))){var p=c(d,h);if(i(p[0])&&i(p[1])){var m=f[n+"s"]=d-p[0],g=f[n+"h"]=d+p[1];u.push(m,g)}}}o.expand(r,u,{padded:!0})}}var i=t("fast-isnumeric"),a=t("../../registry"),o=t("../../plots/cartesian/axes"),s=t("./compute_error");e.exports=function(t){for(var e=t.calcdata,r=0;r<e.length;r++){var i=e[r],s=i[0].trace;if(a.traceIs(s,"errorBarsOK")){var l=o.getFromId(t,s.xaxis),u=o.getFromId(t,s.yaxis);n(i,s,l,"x"),n(i,s,u,"y")}}}},{"../../plots/cartesian/axes":772,"../../registry":846,"./compute_error":632,"fast-isnumeric":131}],632:[function(t,e,r){"use strict";function n(t,e){return"percent"===t?function(t){return Math.abs(t*e/100)}:"constant"===t?function(){return Math.abs(e)}:"sqrt"===t?function(t){return Math.sqrt(Math.abs(t))}:void 0}e.exports=function(t){var e=t.type,r=t.symmetric;if("data"===e){var i=t.array,a=t.arrayminus;return r||void 0===a?function(t,e){var r=+i[e];return[r,r]}:function(t,e){return[+a[e],+i[e]]}}var o=n(e,t.value),s=n(e,t.valueminus);return r||void 0===t.valueminus?function(t){var e=o(t);return[e,e]}:function(t){return[s(t),o(t)]}}},{}],633:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),i=t("../../registry"),a=t("../../lib"),o=t("./attributes");e.exports=function(t,e,r,s){function l(t,e){return a.coerce(h,c,o,t,e)}var u="error_"+s.axis,c=e[u]={},h=t[u]||{};if(!1!==l("visible",void 0!==h.array||void 0!==h.value||"sqrt"===h.type)){var f=l("type","array"in h?"data":"percent"),d=!0;"sqrt"!==f&&(d=l("symmetric",!(("data"===f?"arrayminus":"valueminus")in h))),"data"===f?(l("array")||(c.array=[]),l("traceref"),d||(l("arrayminus")||(c.arrayminus=[]),l("tracerefminus"))):"percent"!==f&&"constant"!==f||(l("value"),d||l("valueminus"));var p="copy_"+s.inherit+"style";s.inherit&&(e["error_"+s.inherit]||{}).visible&&l(p,!(h.color||n(h.thickness)||n(h.width))),s.inherit&&c[p]||(l("color",r),l("thickness"),l("width",i.traceIs(e,"gl3d")?0:4))}}},{"../../lib":728,"../../registry":846,"./attributes":630,"fast-isnumeric":131}],634:[function(t,e,r){"use strict";var n=e.exports={};n.attributes=t("./attributes"),n.supplyDefaults=t("./defaults"),n.calc=t("./calc"),n.calcFromTrace=function(t,e){for(var r=t.x||[],i=t.y||[],a=r.length||i.length,o=new Array(a),s=0;s<a;s++)o[s]={x:r[s],y:i[s]};return o[0].trace=t,n.calc({calcdata:[o],_fullLayout:e}),o},n.plot=t("./plot"),n.style=t("./style"),n.hoverInfo=function(t,e,r){(e.error_y||{}).visible&&(r.yerr=t.yh-t.y,e.error_y.symmetric||(r.yerrneg=t.y-t.ys)),(e.error_x||{}).visible&&(r.xerr=t.xh-t.x,e.error_x.symmetric||(r.xerrneg=t.x-t.xs))}},{"./attributes":630,"./calc":631,"./defaults":633,"./plot":635,"./style":636}],635:[function(t,e,r){"use strict";function n(t,e,r){var n={x:e.c2p(t.x),y:r.c2p(t.y)};return void 0!==t.yh&&(n.yh=r.c2p(t.yh),n.ys=r.c2p(t.ys),a(n.ys)||(n.noYS=!0,n.ys=r.c2p(t.ys,!0))),void 0!==t.xh&&(n.xh=e.c2p(t.xh),n.xs=e.c2p(t.xs),a(n.xs)||(n.noXS=!0,n.xs=e.c2p(t.xs,!0))),n}var i=t("d3"),a=t("fast-isnumeric"),o=t("../drawing"),s=t("../../traces/scatter/subtypes");e.exports=function(t,e,r){var l,u=e.xaxis,c=e.yaxis,h=r&&r.duration>0;t.each(function(t){var f,d=t[0].trace,p=d.error_x||{},m=d.error_y||{};d.ids&&(f=function(t){return t.id});var g=s.hasMarkers(d)&&d.marker.maxdisplayed>0;m.visible||p.visible||(t=[]);var v=i.select(this).selectAll("g.errorbar").data(t,f);if(v.exit().remove(),t.length){p.visible||v.selectAll("path.xerror").remove(),m.visible||v.selectAll("path.yerror").remove(),v.style("opacity",1);var y=v.enter().append("g").classed("errorbar",!0);h&&y.style("opacity",0).transition().duration(r.duration).style("opacity",1),o.setClipUrl(v,e.layerClipId),v.each(function(t){var e=i.select(this),o=n(t,u,c);if(!g||t.vis){var s;if(m.visible&&a(o.x)&&a(o.yh)&&a(o.ys)){var f=m.width;s="M"+(o.x-f)+","+o.yh+"h"+2*f+"m-"+f+",0V"+o.ys,o.noYS||(s+="m-"+f+",0h"+2*f);var d=e.select("path.yerror");l=!d.size(),l?d=e.append("path").style("vector-effect","non-scaling-stroke").classed("yerror",!0):h&&(d=d.transition().duration(r.duration).ease(r.easing)),d.attr("d",s)}if(p.visible&&a(o.y)&&a(o.xh)&&a(o.xs)){var v=(p.copy_ystyle?m:p).width;s="M"+o.xh+","+(o.y-v)+"v"+2*v+"m0,-"+v+"H"+o.xs,o.noXS||(s+="m0,-"+v+"v"+2*v);var y=e.select("path.xerror");l=!y.size(),l?y=e.append("path").style("vector-effect","non-scaling-stroke").classed("xerror",!0):h&&(y=y.transition().duration(r.duration).ease(r.easing)),y.attr("d",s)}}})}})}},{"../../traces/scatter/subtypes":1052,"../drawing":628,d3:122,"fast-isnumeric":131}],636:[function(t,e,r){"use strict";var n=t("d3"),i=t("../color");e.exports=function(t){t.each(function(t){var e=t[0].trace,r=e.error_y||{},a=e.error_x||{},o=n.select(this);o.selectAll("path.yerror").style("stroke-width",r.thickness+"px").call(i.stroke,r.color),a.copy_ystyle&&(a=r),o.selectAll("path.xerror").style("stroke-width",a.thickness+"px").call(i.stroke,a.color)})}},{"../color":604,d3:122}],637:[function(t,e,r){"use strict";var n=t("../../plots/font_attributes");e.exports={hoverlabel:{bgcolor:{valType:"color",arrayOk:!0,editType:"none"},bordercolor:{valType:"color",arrayOk:!0,editType:"none"},font:n({arrayOk:!0,editType:"none"}),namelength:{valType:"integer",min:-1,arrayOk:!0,editType:"none"},editType:"calc"}}},{"../../plots/font_attributes":796}],638:[function(t,e,r){"use strict";function n(t,e,r,n){n=n||i.identity,Array.isArray(t)&&(e[0][r]=n(t))}var i=t("../../lib"),a=t("../../registry");e.exports=function(t){for(var e=t.calcdata,r=t._fullLayout,o=0;o<e.length;o++){var s=e[o],l=s[0].trace;if(!a.traceIs(l,"pie")){var u=a.traceIs(l,"2dMap")?n:i.fillArray;u(l.hoverinfo,s,"hi",function(t){return function(e){return i.coerceHoverinfo({hoverinfo:e},{_module:t._module},r)}}(l)),l.hoverlabel&&(u(l.hoverlabel.bgcolor,s,"hbg"),u(l.hoverlabel.bordercolor,s,"hbc"),u(l.hoverlabel.font.size,s,"hts"),u(l.hoverlabel.font.color,s,"htc"),u(l.hoverlabel.font.family,s,"htf"),u(l.hoverlabel.namelength,s,"hnl"))}}}},{"../../lib":728,"../../registry":846}],639:[function(t,e,r){"use strict";var n=t("../../registry"),i=t("./hover").hover;e.exports=function(t,e,r){function a(){t.emit("plotly_click",{points:t._hoverdata,event:e})}var o=n.getComponentMethod("annotations","onClick")(t,t._hoverdata);void 0!==r&&i(t,e,r,!0),t._hoverdata&&e&&e.target&&(o&&o.then?o.then(a):a(),e.stopImmediatePropagation&&e.stopImmediatePropagation())}},{"../../registry":846,"./hover":643}],640:[function(t,e,r){"use strict";e.exports={MAXDIST:20,YANGLE:60,HOVERARROWSIZE:6,HOVERTEXTPAD:3,HOVERFONTSIZE:13,HOVERFONT:"Arial, sans-serif",HOVERMINTIME:50,HOVERID:"-hover"}},{}],641:[function(t,e,r){"use strict";var n=t("../../lib"),i=t("./attributes"),a=t("./hoverlabel_defaults");e.exports=function(t,e,r,o){function s(r,a){return n.coerce(t,e,i,r,a)}a(t,e,s,o.hoverlabel)}},{"../../lib":728,"./attributes":637,"./hoverlabel_defaults":644}],642:[function(t,e,r){"use strict";function n(t,e){return function(r){var n=t(r),i=e(r);return Math.sqrt(n*n+i*i)}}var i=t("../../lib"),a=t("./constants");r.getSubplot=function(t){return t.subplot||t.xaxis+t.yaxis||t.geo},r.flat=function(t,e){for(var r=new Array(t.length),n=0;n<t.length;n++)r[n]=e;return r},r.p2c=function(t,e){for(var r=new Array(t.length),n=0;n<t.length;n++)r[n]=t[n].p2c(e);return r},r.getDistanceFunction=function(t,e,r,i){return"closest"===t?i||n(e,r):"x"===t?e:r},r.getClosest=function(t,e,r){if(!1!==r.index)r.index>=0&&r.index<t.length?r.distance=0:r.index=!1;else for(var n=0;n<t.length;n++){var i=e(t[n])
;i<=r.distance&&(r.index=n,r.distance=i)}return r},r.inbox=function(t,e){return t*e<0||0===t?a.MAXDIST*(.6-.3/Math.max(3,Math.abs(t-e))):1/0},r.appendArrayPointValue=function(t,e,r){var n=e._arrayAttrs;if(n)for(var a=0;a<n.length;a++){var o,s=n[a];if(o="ids"===s?"id":"locations"===s?"location":s,void 0===t[o]){var l=i.nestedProperty(e,s).get();Array.isArray(r)?Array.isArray(l)&&Array.isArray(l[r[0]])&&(t[o]=l[r[0]][r[1]]):t[o]=l[r]}}}},{"../../lib":728,"./constants":640}],643:[function(t,e,r){"use strict";function n(t,e,r,n){if(("pie"===r||"sankey"===r)&&!n)return void t.emit("plotly_hover",{event:e.originalEvent,points:[e]});r||(r="xy");var f=Array.isArray(r)?r:[r],m=t._fullLayout,v=m._plots||[],k=v[r];if(k){var A=k.overlays.map(function(t){return t.id});f=f.concat(A)}for(var T=f.length,S=new Array(T),E=new Array(T),L=0;L<T;L++){var C=f[L],I=v[C];if(I)S[L]=x.getFromId(t,I.xaxis._id),E[L]=x.getFromId(t,I.yaxis._id);else{var z=m[C]._subplot;S[L]=z.xaxis,E[L]=z.yaxis}}var D=e.hovermode||m.hovermode;if(-1===["x","y","closest"].indexOf(D)||!t.calcdata||t.querySelector(".zoombox")||t._dragging)return b.unhoverRaw(t,e);var P,O,R,F,j,N,B,U,V,H,q,G,Y,W=[],X=[];if(Array.isArray(e))for(D="array",R=0;R<e.length;R++)j=t.calcdata[e[R].curveNumber||0],"skip"!==j[0].trace.hoverinfo&&X.push(j);else{for(F=0;F<t.calcdata.length;F++)j=t.calcdata[F],N=j[0].trace,"skip"!==N.hoverinfo&&-1!==f.indexOf(w.getSubplot(N))&&X.push(j);var Z,J,K=!e.target;if(K)Z="xpx"in e?e.xpx:S[0]._length/2,J="ypx"in e?e.ypx:E[0]._length/2;else{if(!1===p.triggerHandler(t,"plotly_beforehover",e))return;var Q=e.target.getBoundingClientRect();if(Z=e.clientX-Q.left,J=e.clientY-Q.top,Z<0||Z>Q.width||J<0||J>Q.height)return b.unhoverRaw(t,e)}if(P="xval"in e?w.flat(f,e.xval):w.p2c(S,Z),O="yval"in e?w.flat(f,e.yval):w.p2c(E,J),!h(P[0])||!h(O[0]))return d.warn("Fx.hover failed",e,t),b.unhoverRaw(t,e)}var $=1/0;for(F=0;F<X.length;F++)if((j=X[F])&&j[0]&&j[0].trace&&!0===j[0].trace.visible&&(N=j[0].trace,-1===["carpet","contourcarpet"].indexOf(N._module.name))){if(B=w.getSubplot(N),U=f.indexOf(B),V=D,G={cd:j,trace:N,xa:S[U],ya:E[U],index:!1,distance:Math.min($,M.MAXDIST),color:y.defaultLine,name:N.name,x0:void 0,x1:void 0,y0:void 0,y1:void 0,xLabelVal:void 0,yLabelVal:void 0,zLabelVal:void 0,text:void 0},m[B]&&(G.subplot=m[B]._subplot),Y=W.length,"array"===V){var tt=e[F];"pointNumber"in tt?(G.index=tt.pointNumber,V="closest"):(V="","xval"in tt&&(H=tt.xval,V="x"),"yval"in tt&&(q=tt.yval,V=V?"closest":"y"))}else H=P[U],q=O[U];if(N._module&&N._module.hoverPoints){var et=N._module.hoverPoints(G,H,q,V);if(et)for(var rt,nt=0;nt<et.length;nt++)rt=et[nt],h(rt.x0)&&h(rt.y0)&&W.push(s(rt,D))}else d.log("Unrecognized trace type in hover:",N);"closest"===D&&W.length>Y&&(W.splice(0,Y),$=W[0].distance)}if(0===W.length)return b.unhoverRaw(t,e);W.sort(function(t,e){return t.distance-e.distance});var it=t._hoverdata,at=[];for(R=0;R<W.length;R++){var ot=W[R],st={data:ot.trace._input,fullData:ot.trace,curveNumber:ot.trace.index,pointNumber:ot.index};ot.trace._module.eventData?st=ot.trace._module.eventData(st,ot):(st.x=ot.xVal,st.y=ot.yVal,st.xaxis=ot.xa,st.yaxis=ot.ya,void 0!==ot.zLabelVal&&(st.z=ot.zLabelVal)),w.appendArrayPointValue(st,ot.trace,ot.index),at.push(st)}if(t._hoverdata=at,u(t,e,it)&&m._hasCartesian){l(W,{hovermode:D,fullLayout:m,container:m._hoverlayer,outerContainer:m._paperdiv})}var lt="y"===D&&X.length>1,ut=y.combine(m.plot_bgcolor||y.background,m.paper_bgcolor),ct={hovermode:D,rotateLabels:lt,bgColor:ut,container:m._hoverlayer,outerContainer:m._paperdiv,commonLabelOpts:m.hoverlabel},ht=i(W,ct,t);if(a(W,lt?"xa":"ya"),o(ht,lt),e.target&&e.target.tagName){var ft=_.getComponentMethod("annotations","hasClickToShow")(t,at);g(c.select(e.target),ft?"pointer":"")}e.target&&!n&&u(t,e,it)&&(it&&t.emit("plotly_unhover",{event:e,points:it}),t.emit("plotly_hover",{event:e,points:t._hoverdata,xaxes:S,yaxes:E,xvals:P,yvals:O}))}function i(t,e,r){var n,i,a=e.hovermode,o=e.rotateLabels,s=e.bgColor,l=e.container,u=e.outerContainer,h=e.commonLabelOpts||{},f=e.fontFamily||M.HOVERFONT,d=e.fontSize||M.HOVERFONTSIZE,p=t[0],g=p.xa,b=p.ya,x="y"===a?"yLabel":"xLabel",_=p[x],w=(String(_)||"").split(" ")[0],A=u.node().getBoundingClientRect(),T=A.top,S=A.width,E=A.height,I=p.distance<=M.MAXDIST&&("x"===a||"y"===a);for(n=0;n<t.length;n++){i=t[n].hoverinfo||t[n].trace.hoverinfo;var z=i.split("+");if(-1===z.indexOf("all")&&-1===z.indexOf(a)){I=!1;break}}var D=l.selectAll("g.axistext").data(I?[0]:[]);D.enter().append("g").classed("axistext",!0),D.exit().remove(),D.each(function(){var e=c.select(this),n=e.selectAll("path").data([0]),i=e.selectAll("text").data([0]);n.enter().append("path").style({"stroke-width":"1px"}),n.style({fill:h.bgcolor||y.defaultLine,stroke:h.bordercolor||y.background}),i.enter().append("text").attr("data-notex",1),i.text(_).call(v.font,h.font.family||f,h.font.size||d,h.font.color||y.background).call(m.positionText,0,0).call(m.convertToTspans,r),e.attr("transform","");var o=i.node().getBoundingClientRect();if("x"===a){i.attr("text-anchor","middle").call(m.positionText,0,"top"===g.side?T-o.bottom-L-C:T-o.top+L+C);var s="top"===g.side?"-":"";n.attr("d","M0,0L"+L+","+s+L+"H"+(C+o.width/2)+"v"+s+(2*C+o.height)+"H-"+(C+o.width/2)+"V"+s+L+"H-"+L+"Z"),e.attr("transform","translate("+(g._offset+(p.x0+p.x1)/2)+","+(b._offset+("top"===g.side?0:b._length))+")")}else{i.attr("text-anchor","right"===b.side?"start":"end").call(m.positionText,("right"===b.side?1:-1)*(C+L),T-o.top-o.height/2);var l="right"===b.side?"":"-";n.attr("d","M0,0L"+l+L+","+L+"V"+(C+o.height/2)+"h"+l+(2*C+o.width)+"V-"+(C+o.height/2)+"H"+l+L+"V-"+L+"Z"),e.attr("transform","translate("+(g._offset+("right"===b.side?g._length:0))+","+(b._offset+(p.y0+p.y1)/2)+")")}t=t.filter(function(t){return void 0!==t.zLabelVal||(t[x]||"").split(" ")[0]===w})});var P=l.selectAll("g.hovertext").data(t,function(t){return[t.trace.index,t.index,t.x0,t.y0,t.name,t.attr,t.xa,t.ya||""].join(",")});return P.enter().append("g").classed("hovertext",!0).each(function(){var t=c.select(this);t.append("rect").call(y.fill,y.addOpacity(s,.8)),t.append("text").classed("name",!0),t.append("path").style("stroke-width","1px"),t.append("text").classed("nums",!0).call(v.font,f,d)}),P.exit().remove(),P.each(function(t){var e=c.select(this).attr("transform",""),n="",i="",l=y.opacity(t.color)?t.color:y.defaultLine,u=y.combine(l,s),h=t.borderColor||y.contrast(u);if(void 0!==t.nameOverride&&(t.name=t.nameOverride),t.name){n=m.plainText(t.name||"");var p=Math.round(t.nameLength);p>-1&&n.length>p&&(n=p>3?n.substr(0,p-3)+"...":n.substr(0,p))}void 0!==t.extraText&&(i+=t.extraText),void 0!==t.zLabel?(void 0!==t.xLabel&&(i+="x: "+t.xLabel+"<br>"),void 0!==t.yLabel&&(i+="y: "+t.yLabel+"<br>"),i+=(i?"z: ":"")+t.zLabel):I&&t[a+"Label"]===_?i=t[("x"===a?"y":"x")+"Label"]||"":void 0===t.xLabel?void 0!==t.yLabel&&(i=t.yLabel):i=void 0===t.yLabel?t.xLabel:"("+t.xLabel+", "+t.yLabel+")",t.text&&!Array.isArray(t.text)&&(i+=(i?"<br>":"")+t.text),""===i&&(""===n&&e.remove(),i=n);var g=e.select("text.nums").call(v.font,t.fontFamily||f,t.fontSize||d,t.fontColor||h).text(i).attr("data-notex",1).call(m.positionText,0,0).call(m.convertToTspans,r),b=e.select("text.name"),x=0;n&&n!==i?(b.call(v.font,t.fontFamily||f,t.fontSize||d,u).text(n).attr("data-notex",1).call(m.positionText,0,0).call(m.convertToTspans,r),x=b.node().getBoundingClientRect().width+2*C):(b.remove(),e.select("rect").remove()),e.select("path").style({fill:u,stroke:h});var w,M,A=g.node().getBoundingClientRect(),z=t.xa._offset+(t.x0+t.x1)/2,D=t.ya._offset+(t.y0+t.y1)/2,P=Math.abs(t.x1-t.x0),O=Math.abs(t.y1-t.y0),R=A.width+L+C+x;t.ty0=T-A.top,t.bx=A.width+2*C,t.by=A.height+2*C,t.anchor="start",t.txwidth=A.width,t.tx2width=x,t.offset=0,o?(t.pos=z,w=D+O/2+R<=E,M=D-O/2-R>=0,"top"!==t.idealAlign&&w||!M?w?(D+=O/2,t.anchor="start"):t.anchor="middle":(D-=O/2,t.anchor="end")):(t.pos=D,w=z+P/2+R<=S,M=z-P/2-R>=0,"left"!==t.idealAlign&&w||!M?w?(z+=P/2,t.anchor="start"):t.anchor="middle":(z-=P/2,t.anchor="end")),g.attr("text-anchor",t.anchor),x&&b.attr("text-anchor",t.anchor),e.attr("transform","translate("+z+","+D+")"+(o?"rotate("+k+")":""))}),P}function a(t,e){function r(t){var e=t[0],r=t[t.length-1];if(i=e.pmin-e.pos-e.dp+e.size,a=r.pos+r.dp+r.size-e.pmax,i>.01){for(s=t.length-1;s>=0;s--)t[s].dp+=i;n=!1}if(!(a<.01)){if(i<-.01){for(s=t.length-1;s>=0;s--)t[s].dp-=a;n=!1}if(n){var u=0;for(o=0;o<t.length;o++)l=t[o],l.pos+l.dp+l.size>e.pmax&&u++;for(o=t.length-1;o>=0&&!(u<=0);o--)l=t[o],l.pos>e.pmax-1&&(l.del=!0,u--);for(o=0;o<t.length&&!(u<=0);o++)if(l=t[o],l.pos<e.pmin+1)for(l.del=!0,u--,a=2*l.size,s=t.length-1;s>=0;s--)t[s].dp-=a;for(o=t.length-1;o>=0&&!(u<=0);o--)l=t[o],l.pos+l.dp+l.size>e.pmax&&(l.del=!0,u--)}}}for(var n,i,a,o,s,l,u,c=0,h=t.map(function(t,r){var n=t[e];return[{i:r,dp:0,pos:t.pos,posref:t.posref,size:t.by*("x"===n._id.charAt(0)?T:1)/2,pmin:n._offset,pmax:n._offset+n._length}]}).sort(function(t,e){return t[0].posref-e[0].posref});!n&&c<=t.length;){for(c++,n=!0,o=0;o<h.length-1;){var f=h[o],d=h[o+1],p=f[f.length-1],m=d[0];if((i=p.pos+p.dp+p.size-m.pos-m.dp+m.size)>.01&&p.pmin===m.pmin&&p.pmax===m.pmax){for(s=d.length-1;s>=0;s--)d[s].dp+=i;for(f.push.apply(f,d),h.splice(o+1,1),u=0,s=f.length-1;s>=0;s--)u+=f[s].dp;for(a=u/f.length,s=f.length-1;s>=0;s--)f[s].dp-=a;n=!1}else o++}h.forEach(r)}for(o=h.length-1;o>=0;o--){var g=h[o];for(s=g.length-1;s>=0;s--){var v=g[s],y=t[v.i];y.offset=v.dp,y.del=v.del}}}function o(t,e){t.each(function(t){var r=c.select(this);if(t.del)return void r.remove();var n="end"===t.anchor?-1:1,i=r.select("text.nums"),a={start:1,end:-1,middle:0}[t.anchor],o=a*(L+C),s=o+a*(t.txwidth+C),l=0,u=t.offset;"middle"===t.anchor&&(o-=t.tx2width/2,s-=t.tx2width/2),e&&(u*=-E,l=t.offset*S),r.select("path").attr("d","middle"===t.anchor?"M-"+t.bx/2+",-"+t.by/2+"h"+t.bx+"v"+t.by+"h-"+t.bx+"Z":"M0,0L"+(n*L+l)+","+(L+u)+"v"+(t.by/2-L)+"h"+n*t.bx+"v-"+t.by+"H"+(n*L+l)+"V"+(u-L)+"Z"),i.call(m.positionText,o+l,u+t.ty0-t.by/2+C),t.tx2width&&(r.select("text.name").call(m.positionText,s+a*C+l,u+t.ty0-t.by/2+C),r.select("rect").call(v.setRect,s+(a-1)*t.tx2width/2+l,u-t.by/2-1,t.tx2width,t.by+2))})}function s(t,e){function r(e,r,n){var i=s(r,n);i&&(t[e]=i)}var n=t.index,i=t.trace||{},a=t.cd[0],o=t.cd[n]||{},s=Array.isArray(n)?function(t,e){return d.castOption(a,n,t)||d.extractOption({},i,"",e)}:function(t,e){return d.extractOption(o,i,t,e)};r("hoverinfo","hi","hoverinfo"),r("color","hbg","hoverlabel.bgcolor"),r("borderColor","hbc","hoverlabel.bordercolor"),r("fontFamily","htf","hoverlabel.font.family"),r("fontSize","hts","hoverlabel.font.size"),r("fontColor","htc","hoverlabel.font.color"),r("nameLength","hnl","hoverlabel.namelength"),t.posref="y"===e?(t.x0+t.x1)/2:(t.y0+t.y1)/2,t.x0=d.constrain(t.x0,0,t.xa._length),t.x1=d.constrain(t.x1,0,t.xa._length),t.y0=d.constrain(t.y0,0,t.ya._length),t.y1=d.constrain(t.y1,0,t.ya._length);var l;if(void 0!==t.xLabelVal){l="log"===t.xa.type&&t.xLabelVal<=0;var u=x.tickText(t.xa,t.xa.c2l(l?-t.xLabelVal:t.xLabelVal),"hover");l?0===t.xLabelVal?t.xLabel="0":t.xLabel="-"+u.text:t.xLabel=u.text,t.xVal=t.xa.c2d(t.xLabelVal)}if(void 0!==t.yLabelVal){l="log"===t.ya.type&&t.yLabelVal<=0;var c=x.tickText(t.ya,t.ya.c2l(l?-t.yLabelVal:t.yLabelVal),"hover");l?0===t.yLabelVal?t.yLabel="0":t.yLabel="-"+c.text:t.yLabel=c.text,t.yVal=t.ya.c2d(t.yLabelVal)}if(void 0!==t.zLabelVal&&(t.zLabel=String(t.zLabelVal)),!(isNaN(t.xerr)||"log"===t.xa.type&&t.xerr<=0)){var h=x.tickText(t.xa,t.xa.c2l(t.xerr),"hover").text;void 0!==t.xerrneg?t.xLabel+=" +"+h+" / -"+x.tickText(t.xa,t.xa.c2l(t.xerrneg),"hover").text:t.xLabel+=" \xb1 "+h,"x"===e&&(t.distance+=1)}if(!(isNaN(t.yerr)||"log"===t.ya.type&&t.yerr<=0)){var f=x.tickText(t.ya,t.ya.c2l(t.yerr),"hover").text;void 0!==t.yerrneg?t.yLabel+=" +"+f+" / -"+x.tickText(t.ya,t.ya.c2l(t.yerrneg),"hover").text:t.yLabel+=" \xb1 "+f,"y"===e&&(t.distance+=1)}var p=t.hoverinfo||t.trace.hoverinfo;return"all"!==p&&(p=p.split("+"),-1===p.indexOf("x")&&(t.xLabel=void 0),-1===p.indexOf("y")&&(t.yLabel=void 0),-1===p.indexOf("z")&&(t.zLabel=void 0),-1===p.indexOf("text")&&(t.text=void 0),-1===p.indexOf("name")&&(t.name=void 0)),t}function l(t,e){var r=e.hovermode,n=e.container,i=t[0],a=i.xa,o=i.ya,s=a.showspikes,l=o.showspikes;if(n.selectAll(".spikeline").remove(),"closest"===r&&(s||l)){var u=e.fullLayout,c=a._offset+(i.x0+i.x1)/2,h=o._offset+(i.y0+i.y1)/2,d=y.combine(u.plot_bgcolor,u.paper_bgcolor),p=f.readability(i.color,d)<1.5?y.contrast(d):i.color;if(l){var m=o.spikemode,g=o.spikethickness,b=o.spikecolor||p,x=o._boundingBox,_=(x.left+x.right)/2<c?x.right:x.left;if(-1!==m.indexOf("toaxis")||-1!==m.indexOf("across")){var w=_,M=c;-1!==m.indexOf("across")&&(w=o._counterSpan[0],M=o._counterSpan[1]),n.append("line").attr({x1:w,x2:M,y1:h,y2:h,"stroke-width":g+2,stroke:d}).classed("spikeline",!0).classed("crisp",!0),n.append("line").attr({x1:w,x2:M,y1:h,y2:h,"stroke-width":g,stroke:b,"stroke-dasharray":v.dashStyle(o.spikedash,g)}).classed("spikeline",!0).classed("crisp",!0)}-1!==m.indexOf("marker")&&n.append("circle").attr({cx:_+("right"!==o.side?g:-g),cy:h,r:g,fill:b}).classed("spikeline",!0)}if(s){var k=a.spikemode,A=a.spikethickness,T=a.spikecolor||p,S=a._boundingBox,E=(S.top+S.bottom)/2<h?S.bottom:S.top;if(-1!==k.indexOf("toaxis")||-1!==k.indexOf("across")){var L=E,C=h;-1!==k.indexOf("across")&&(L=a._counterSpan[0],C=a._counterSpan[1]),n.append("line").attr({x1:c,x2:c,y1:L,y2:C,"stroke-width":A+2,stroke:d}).classed("spikeline",!0).classed("crisp",!0),n.append("line").attr({x1:c,x2:c,y1:L,y2:C,"stroke-width":A,stroke:T,"stroke-dasharray":v.dashStyle(a.spikedash,A)}).classed("spikeline",!0).classed("crisp",!0)}-1!==k.indexOf("marker")&&n.append("circle").attr({cx:c,cy:E-("top"!==a.side?A:-A),r:A,fill:T}).classed("spikeline",!0)}}}function u(t,e,r){if(!r||r.length!==t._hoverdata.length)return!0;for(var n=r.length-1;n>=0;n--){var i=r[n],a=t._hoverdata[n];if(i.curveNumber!==a.curveNumber||String(i.pointNumber)!==String(a.pointNumber))return!0}return!1}var c=t("d3"),h=t("fast-isnumeric"),f=t("tinycolor2"),d=t("../../lib"),p=t("../../lib/events"),m=t("../../lib/svg_text_utils"),g=t("../../lib/override_cursor"),v=t("../drawing"),y=t("../color"),b=t("../dragelement"),x=t("../../plots/cartesian/axes"),_=t("../../registry"),w=t("./helpers"),M=t("./constants"),k=M.YANGLE,A=Math.PI*k/180,T=1/Math.sin(A),S=Math.cos(A),E=Math.sin(A),L=M.HOVERARROWSIZE,C=M.HOVERTEXTPAD;r.hover=function(t,e,r,i){t=d.getGraphDiv(t),d.throttle(t._fullLayout._uid+M.HOVERID,M.HOVERMINTIME,function(){n(t,e,r,i)})},r.loneHover=function(t,e){var r={color:t.color||y.defaultLine,x0:t.x0||t.x||0,x1:t.x1||t.x||0,y0:t.y0||t.y||0,y1:t.y1||t.y||0,xLabel:t.xLabel,yLabel:t.yLabel,zLabel:t.zLabel,text:t.text,name:t.name,idealAlign:t.idealAlign,borderColor:t.borderColor,fontFamily:t.fontFamily,fontSize:t.fontSize,fontColor:t.fontColor,trace:{index:0,hoverinfo:""},xa:{_offset:0},ya:{_offset:0},index:0},n=c.select(e.container),a=e.outerContainer?c.select(e.outerContainer):n,s={hovermode:"closest",rotateLabels:!1,bgColor:e.bgColor||y.background,container:n,outerContainer:a},l=i([r],s,e.gd);return o(l,s.rotateLabels),l.node()}},{"../../lib":728,"../../lib/events":716,"../../lib/override_cursor":738,"../../lib/svg_text_utils":750,"../../plots/cartesian/axes":772,"../../registry":846,"../color":604,"../dragelement":625,"../drawing":628,"./constants":640,"./helpers":642,d3:122,"fast-isnumeric":131,tinycolor2:534}],644:[function(t,e,r){"use strict";var n=t("../../lib");e.exports=function(t,e,r,i){i=i||{},r("hoverlabel.bgcolor",i.bgcolor),r("hoverlabel.bordercolor",i.bordercolor),r("hoverlabel.namelength",i.namelength),n.coerceFont(r,"hoverlabel.font",i.font)}},{"../../lib":728}],645:[function(t,e,r){"use strict";function n(t){var e=s.isD3Selection(t)?t:o.select(t);e.selectAll("g.hovertext").remove(),e.selectAll(".spikeline").remove()}function i(t,e,r){return s.castOption(t,e,"hoverlabel."+r)}function a(t,e,r){function n(r){return s.coerceHoverinfo({hoverinfo:r},{_module:t._module},e)}return s.castOption(t,r,"hoverinfo",n)}var o=t("d3"),s=t("../../lib"),l=t("../dragelement"),u=t("./helpers"),c=t("./layout_attributes");e.exports={moduleType:"component",name:"fx",constants:t("./constants"),schema:{layout:c},attributes:t("./attributes"),layoutAttributes:c,supplyLayoutGlobalDefaults:t("./layout_global_defaults"),supplyDefaults:t("./defaults"),supplyLayoutDefaults:t("./layout_defaults"),calc:t("./calc"),getDistanceFunction:u.getDistanceFunction,getClosest:u.getClosest,inbox:u.inbox,appendArrayPointValue:u.appendArrayPointValue,castHoverOption:i,castHoverinfo:a,hover:t("./hover").hover,unhover:l.unhover,loneHover:t("./hover").loneHover,loneUnhover:n,click:t("./click")}},{"../../lib":728,"../dragelement":625,"./attributes":637,"./calc":638,"./click":639,"./constants":640,"./defaults":641,"./helpers":642,"./hover":643,"./layout_attributes":646,"./layout_defaults":647,"./layout_global_defaults":648,d3:122}],646:[function(t,e,r){"use strict";var n=t("./constants"),i=t("../../plots/font_attributes")({editType:"none"});i.family.dflt=n.HOVERFONT,i.size.dflt=n.HOVERFONTSIZE,e.exports={dragmode:{valType:"enumerated",values:["zoom","pan","select","lasso","orbit","turntable"],dflt:"zoom",editType:"modebar"},hovermode:{valType:"enumerated",values:["x","y","closest",!1],editType:"modebar"},hoverlabel:{bgcolor:{valType:"color",editType:"none"},bordercolor:{valType:"color",editType:"none"},font:i,namelength:{valType:"integer",min:-1,dflt:15,editType:"none"},editType:"none"}}},{"../../plots/font_attributes":796,"./constants":640}],647:[function(t,e,r){"use strict";function n(t){for(var e=!0,r=0;r<t.length;r++){if("h"!==t[r].orientation){e=!1;break}}return e}var i=t("../../lib"),a=t("./layout_attributes");e.exports=function(t,e,r){function o(r,n){return i.coerce(t,e,a,r,n)}o("dragmode");var s;e._has("cartesian")?(e._isHoriz=n(r),s=e._isHoriz?"y":"x"):s="closest",o("hovermode",s);var l=e._has("mapbox"),u=e._has("geo"),c=e._basePlotModules.length;"zoom"===e.dragmode&&((l||u)&&1===c||l&&u&&2===c)&&(e.dragmode="pan")}},{"../../lib":728,"./layout_attributes":646}],648:[function(t,e,r){"use strict";var n=t("../../lib"),i=t("./hoverlabel_defaults"),a=t("./layout_attributes");e.exports=function(t,e){function r(r,i){return n.coerce(t,e,a,r,i)}i(t,e,r)}},{"../../lib":728,"./hoverlabel_defaults":644,"./layout_attributes":646}],649:[function(t,e,r){"use strict";var n=t("../../plots/cartesian/constants");e.exports={_isLinkedToArray:"image",visible:{valType:"boolean",dflt:!0,editType:"arraydraw"},source:{valType:"string",editType:"arraydraw"},layer:{valType:"enumerated",values:["below","above"],dflt:"above",editType:"arraydraw"},sizex:{valType:"number",dflt:0,editType:"arraydraw"},sizey:{valType:"number",dflt:0,editType:"arraydraw"},sizing:{valType:"enumerated",values:["fill","contain","stretch"],dflt:"contain",editType:"arraydraw"},opacity:{valType:"number",min:0,max:1,dflt:1,editType:"arraydraw"},x:{valType:"any",dflt:0,editType:"arraydraw"},y:{valType:"any",dflt:0,editType:"arraydraw"},xanchor:{valType:"enumerated",values:["left","center","right"],dflt:"left",editType:"arraydraw"},yanchor:{valType:"enumerated",values:["top","middle","bottom"],dflt:"top",editType:"arraydraw"},xref:{valType:"enumerated",values:["paper",n.idRegex.x.toString()],dflt:"paper",editType:"arraydraw"},yref:{valType:"enumerated",values:["paper",n.idRegex.y.toString()],dflt:"paper",editType:"arraydraw"},editType:"arraydraw"}},{"../../plots/cartesian/constants":777}],650:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),i=t("../../lib/to_log_range");e.exports=function(t,e,r,a){e=e||{};var o="log"===r&&"linear"===e.type,s="linear"===r&&"log"===e.type;if(o||s)for(var l,u,c=t._fullLayout.images,h=e._id.charAt(0),f=0;f<c.length;f++)if(l=c[f],u="images["+f+"].",l[h+"ref"]===e._id){var d=l[h],p=l["size"+h],m=null,g=null;if(o){m=i(d,e.range);var v=p/Math.pow(10,m)/2;g=2*Math.log(v+Math.sqrt(1+v*v))/Math.LN10}else m=Math.pow(10,d),g=m*(Math.pow(10,p/2)-Math.pow(10,-p/2));n(m)?n(g)||(g=null):(m=null,g=null),a(u+h,m),a(u+"size"+h,g)}}},{"../../lib/to_log_range":752,"fast-isnumeric":131}],651:[function(t,e,r){"use strict";function n(t,e,r){function n(r,n){return i.coerce(t,e,s,r,n)}if(!n("visible",!!n("source")))return e;n("layer"),n("xanchor"),n("yanchor"),n("sizex"),n("sizey"),n("sizing"),n("opacity");for(var o={_fullLayout:r},l=["x","y"],u=0;u<2;u++){var c=l[u],h=a.coerceRef(t,e,o,c,"paper");a.coercePosition(e,o,n,h,c,0)}return e}var i=t("../../lib"),a=t("../../plots/cartesian/axes"),o=t("../../plots/array_container_defaults"),s=t("./attributes");e.exports=function(t,e){o(t,e,{name:"images",handleItemDefaults:n})}},{"../../lib":728,"../../plots/array_container_defaults":769,"../../plots/cartesian/axes":772,"./attributes":649}],652:[function(t,e,r){"use strict";var n=t("d3"),i=t("../drawing"),a=t("../../plots/cartesian/axes"),o=t("../../constants/xmlns_namespaces");e.exports=function(t){function e(e){var r=n.select(this);if(!this.img||this.img.src!==e.source){r.attr("xmlns",o.svg);var i=new Promise(function(t){function n(){r.remove(),t()}var i=new Image;this.img=i,i.setAttribute("crossOrigin","anonymous"),i.onerror=n,i.onload=function(){var e=document.createElement("canvas");e.width=this.width,e.height=this.height,e.getContext("2d").drawImage(this,0,0);var n=e.toDataURL("image/png");r.attr("xlink:href",n),t()},r.on("error",n),i.src=e.source}.bind(this));t._promises.push(i)}}function r(e){var r=n.select(this),o=a.getFromId(t,e.xref),s=a.getFromId(t,e.yref),l=u._size,c=o?Math.abs(o.l2p(e.sizex)-o.l2p(0)):e.sizex*l.w,h=s?Math.abs(s.l2p(e.sizey)-s.l2p(0)):e.sizey*l.h,f=c*m.x[e.xanchor].offset,d=h*m.y[e.yanchor].offset,p=m.x[e.xanchor].sizing+m.y[e.yanchor].sizing,g=(o?o.r2p(e.x)+o._offset:e.x*l.w+l.l)+f,v=(s?s.r2p(e.y)+s._offset:l.h-e.y*l.h+l.t)+d;switch(e.sizing){case"fill":p+=" slice";break;case"stretch":p="none"}r.attr({x:g,y:v,width:c,height:h,preserveAspectRatio:p,opacity:e.opacity});var y=o?o._id:"",b=s?s._id:"",x=y+b;r.call(i.setClipUrl,x?"clip"+u._uid+x:null)}var s,l,u=t._fullLayout,c=[],h={},f=[];for(l=0;l<u.images.length;l++){var d=u.images[l];if(d.visible)if("below"===d.layer&&"paper"!==d.xref&&"paper"!==d.yref){s=d.xref+d.yref;var p=u._plots[s];if(!p){f.push(d);continue}p.mainplot&&(s=p.mainplot.id),h[s]||(h[s]=[]),h[s].push(d)}else"above"===d.layer?c.push(d):f.push(d)}var m={x:{left:{sizing:"xMin",offset:0},center:{sizing:"xMid",offset:-.5},right:{sizing:"xMax",offset:-1}},y:{top:{sizing:"YMin",offset:0},middle:{sizing:"YMid",offset:-.5},bottom:{sizing:"YMax",offset:-1}}},g=u._imageLowerLayer.selectAll("image").data(f),v=u._imageUpperLayer.selectAll("image").data(c);g.enter().append("image"),v.enter().append("image"),g.exit().remove(),v.exit().remove(),g.each(function(t){e.bind(this)(t),r.bind(this)(t)}),v.each(function(t){e.bind(this)(t),r.bind(this)(t)});var y=Object.keys(u._plots);for(l=0;l<y.length;l++){s=y[l];var b=u._plots[s];if(b.imagelayer){var x=b.imagelayer.selectAll("image").data(h[s]||[]);x.enter().append("image"),x.exit().remove(),x.each(function(t){e.bind(this)(t),r.bind(this)(t)})}}}},{"../../constants/xmlns_namespaces":709,"../../plots/cartesian/axes":772,"../drawing":628,d3:122}],653:[function(t,e,r){"use strict";e.exports={moduleType:"component",name:"images",layoutAttributes:t("./attributes"),supplyLayoutDefaults:t("./defaults"),draw:t("./draw"),convertCoords:t("./convert_coords")}},{"./attributes":649,"./convert_coords":650,"./defaults":651,"./draw":652}],654:[function(t,e,r){"use strict";r.isRightAnchor=function(t){return"right"===t.xanchor||"auto"===t.xanchor&&t.x>=2/3},r.isCenterAnchor=function(t){return"center"===t.xanchor||"auto"===t.xanchor&&t.x>1/3&&t.x<2/3},r.isBottomAnchor=function(t){return"bottom"===t.yanchor||"auto"===t.yanchor&&t.y<=1/3},r.isMiddleAnchor=function(t){return"middle"===t.yanchor||"auto"===t.yanchor&&t.y>1/3&&t.y<2/3}},{}],655:[function(t,e,r){"use strict";var n=t("../../plots/font_attributes"),i=t("../color/attributes");e.exports={bgcolor:{valType:"color",editType:"legend"},bordercolor:{valType:"color",dflt:i.defaultLine,editType:"legend"},borderwidth:{valType:"number",min:0,dflt:0,editType:"legend"},font:n({editType:"legend"}),orientation:{valType:"enumerated",values:["v","h"],dflt:"v",editType:"legend"},traceorder:{valType:"flaglist",flags:["reversed","grouped"],extras:["normal"],editType:"legend"},tracegroupgap:{valType:"number",min:0,dflt:10,editType:"legend"},x:{valType:"number",min:-2,max:3,dflt:1.02,editType:"legend"},xanchor:{valType:"enumerated",values:["auto","left","center","right"],dflt:"left",editType:"legend"},y:{valType:"number",min:-2,max:3,dflt:1,editType:"legend"},yanchor:{valType:"enumerated",values:["auto","top","middle","bottom"],dflt:"auto",editType:"legend"},editType:"legend"}},{"../../plots/font_attributes":796,"../color/attributes":603}],656:[function(t,e,r){"use strict";e.exports={scrollBarWidth:4,scrollBarHeight:20,scrollBarColor:"#808BA4",scrollBarMargin:4}},{}],657:[function(t,e,r){"use strict";var n=t("../../registry"),i=t("../../lib"),a=t("./attributes"),o=t("../../plots/layout_attributes"),s=t("./helpers");e.exports=function(t,e,r){function l(t,e){return i.coerce(d,p,a,t,e)}for(var u,c,h,f,d=t.legend||{},p=e.legend={},m=0,g="normal",v=0;v<r.length;v++){var y=r[v];s.legendGetsTrace(y)&&(m++,n.traceIs(y,"pie")&&m++),(n.traceIs(y,"bar")&&"stack"===e.barmode||-1!==["tonextx","tonexty"].indexOf(y.fill))&&(g=s.isGrouped({traceorder:g})?"grouped+reversed":"reversed"),void 0!==y.legendgroup&&""!==y.legendgroup&&(g=s.isReversed({traceorder:g})?"reversed+grouped":"grouped")}if(!1!==i.coerce(t,e,o,"showlegend",m>1)){if(l("bgcolor",e.paper_bgcolor),l("bordercolor"),l("borderwidth"),i.coerceFont(l,"font",e.font),l("orientation"),"h"===p.orientation){var b=t.xaxis;b&&b.rangeslider&&b.rangeslider.visible?(u=0,h="left",c=1.1,f="bottom"):(u=0,h="left",c=-.1,f="top")}l("traceorder",g),s.isGrouped(e.legend)&&l("tracegroupgap"),l("x",u),l("xanchor",h),l("y",c),l("yanchor",f),i.noneOrAll(d,p,["x","y"])}}},{"../../lib":728,"../../plots/layout_attributes":822,"../../registry":846,"./attributes":655,"./helpers":661}],658:[function(t,e,r){"use strict";function n(t,e){function r(r){v.convertToTspans(r,e,function(){a(t,e)})}var n=t.data()[0][0],i=e._fullLayout,o=n.trace,s=d.traceIs(o,"pie"),l=o.index,u=s?n.label:o.name,f=t.selectAll("text.legendtext").data([0]);f.enter().append("text").classed("legendtext",!0),f.attr("text-anchor","start").classed("user-select-none",!0).call(m.font,i.legend.font).text(u),e._context.edits.legendText&&!s?f.call(v.makeEditable,{gd:e}).call(r).on("edit",function(t){this.text(t).call(r);var i=t;this.text()||(t=" ");var a,o,s=n.trace._fullInput||{},u={};if(-1!==["ohlc","candlestick"].indexOf(s.type))a=n.trace.transforms,o=a[a.length-1].direction,u[o+".name"]=t;else if(d.hasTransform(s,"groupby")){var f=d.getTransformIndices(s,"groupby"),p=f[f.length-1],m=h.keyedContainer(s,"transforms["+p+"].styles","target","value.name");""===i?m.remove(n.trace._group):m.set(n.trace._group,t),u=m.constructUpdate()}else u.name=t;return c.restyle(e,u,l)}):f.call(r)}function i(t,e){var r,n=1,i=t.selectAll("rect").data([0]);i.enter().append("rect").classed("legendtoggle",!0).style("cursor","pointer").attr("pointer-events","all").call(g.fill,"rgba(0,0,0,0)"),i.on("mousedown",function(){r=(new Date).getTime(),r-e._legendMouseDownTime<T?n+=1:(n=1,e._legendMouseDownTime=r)}),i.on("mouseup",function(){if(!e._dragged&&!e._editing){var r=e._fullLayout.legend;(new Date).getTime()-e._legendMouseDownTime>T&&(n=Math.max(n-1,1)),1===n?r._clickTimeout=setTimeout(function(){y(t,e,n)},T):2===n&&(r._clickTimeout&&clearTimeout(r._clickTimeout),e._legendMouseDownTime=0,y(t,e,n))}})}function a(t,e){var r=t.data()[0][0];if(!r.trace.showlegend)return void t.remove();var n,i,a=t.select("g[class*=math-group]"),o=a.node(),s=e._fullLayout.legend,l=s.font.size*_;if(o){var u=m.bBox(o);n=u.height,i=u.width,m.setTranslate(a,0,n/4)}else{var c=t.select(".legendtext"),h=v.lineCount(c),f=c.node();n=l*h,i=f?m.bBox(f).width:0;var d=l*(.3+(1-h)/2);v.positionText(c,40,d)}n=Math.max(n,16)+3,r.height=n,r.width=i}function o(t,e,r){var n=t._fullLayout,i=n.legend,a=i.borderwidth,o=k.isGrouped(i),s=0;if(i.width=0,i.height=0,k.isVertical(i))o&&e.each(function(t,e){m.setTranslate(this,0,e*i.tracegroupgap)}),r.each(function(t){var e=t[0],r=e.height,n=e.width;m.setTranslate(this,a,5+a+i.height+r/2),i.height+=r,i.width=Math.max(i.width,n)}),i.width+=45+2*a,i.height+=10+2*a,o&&(i.height+=(i._lgroupsLength-1)*i.tracegroupgap),s=40;else if(o){for(var l=[i.width],c=e.data(),h=0,f=c.length;h<f;h++){var d=c[h].map(function(t){return t[0].width}),p=40+Math.max.apply(null,d);i.width+=i.tracegroupgap+p,l.push(i.width)}e.each(function(t,e){m.setTranslate(this,l[e],0)}),e.each(function(){var t=u.select(this),e=t.selectAll("g.traces"),r=0;e.each(function(t){var e=t[0],n=e.height;m.setTranslate(this,0,5+a+r+n/2),r+=n}),i.height=Math.max(i.height,r)}),i.height+=10+2*a,i.width+=2*a}else{var g=0,v=0,y=0,b=0;r.each(function(t){y=Math.max(40+t[0].width,y)}),r.each(function(t){var e=t[0],r=y,o=i.tracegroupgap||5;a+b+o+r>n.width-(n.margin.r+n.margin.l)&&(b=0,g+=v,i.height=i.height+v,v=0),m.setTranslate(this,a+b,5+a+e.height/2+g),i.width+=o+r,i.height=Math.max(i.height,e.height),b+=o+r,v=Math.max(e.height,v)}),i.width+=2*a,i.height+=10+2*a}i.width=Math.ceil(i.width),i.height=Math.ceil(i.height),r.each(function(e){var r=e[0];u.select(this).select(".legendtoggle").call(m.setRect,0,-r.height/2,(t._context.edits.legendText?0:i.width)+s,r.height)})}function s(t){var e=t._fullLayout,r=e.legend,n="left";A.isRightAnchor(r)?n="right":A.isCenterAnchor(r)&&(n="center");var i="top";A.isBottomAnchor(r)?i="bottom":A.isMiddleAnchor(r)&&(i="middle"),f.autoMargin(t,"legend",{x:r.x,y:r.y,l:r.width*({right:1,center:.5}[n]||0),r:r.width*({left:1,center:.5}[n]||0),b:r.height*({top:1,middle:.5}[i]||0),t:r.height*({bottom:1,middle:.5}[i]||0)})}function l(t){var e=t._fullLayout,r=e.legend,n="left";A.isRightAnchor(r)?n="right":A.isCenterAnchor(r)&&(n="center"),f.autoMargin(t,"legend",{x:r.x,y:.5,l:r.width*({right:1,center:.5}[n]||0),r:r.width*({left:1,center:.5}[n]||0),b:0,t:0})}var u=t("d3"),c=t("../../plotly"),h=t("../../lib"),f=t("../../plots/plots"),d=t("../../registry"),p=t("../dragelement"),m=t("../drawing"),g=t("../color"),v=t("../../lib/svg_text_utils"),y=t("./handle_click"),b=t("./constants"),x=t("../../constants/interactions"),_=t("../../constants/alignment").LINE_SPACING,w=t("./get_legend_data"),M=t("./style"),k=t("./helpers"),A=t("./anchor_utils"),T=x.DBLCLICKDELAY;e.exports=function(t){function e(t,e){L.attr("data-scroll",e).call(m.setTranslate,0,e),C.call(m.setRect,N,t,b.scrollBarWidth,b.scrollBarHeight),S.select("rect").attr({y:v.borderwidth-e})}var r=t._fullLayout,a="legend"+r._uid;if(r._infolayer&&t.calcdata){t._legendMouseDownTime||(t._legendMouseDownTime=0);var v=r.legend,x=r.showlegend&&w(t.calcdata,v),_=r.hiddenlabels||[];if(!r.showlegend||!x.length)return r._infolayer.selectAll(".legend").remove(),r._topdefs.select("#"+a).remove(),void f.autoMargin(t,"legend");var k=r._infolayer.selectAll("g.legend").data([0]);k.enter().append("g").attr({class:"legend","pointer-events":"all"});var S=r._topdefs.selectAll("#"+a).data([0]);S.enter().append("clipPath").attr("id",a).append("rect");var E=k.selectAll("rect.bg").data([0]);E.enter().append("rect").attr({class:"bg","shape-rendering":"crispEdges"}),E.call(g.stroke,v.bordercolor),E.call(g.fill,v.bgcolor),E.style("stroke-width",v.borderwidth+"px");var L=k.selectAll("g.scrollbox").data([0]);L.enter().append("g").attr("class","scrollbox");var C=k.selectAll("rect.scrollbar").data([0]);C.enter().append("rect").attr({class:"scrollbar",rx:20,ry:2,width:0,height:0}).call(g.fill,"#808BA4");var I=L.selectAll("g.groups").data(x);I.enter().append("g").attr("class","groups"),I.exit().remove();var z=I.selectAll("g.traces").data(h.identity)
;z.enter().append("g").attr("class","traces"),z.exit().remove(),z.call(M,t).style("opacity",function(t){var e=t[0].trace;return d.traceIs(e,"pie")?-1!==_.indexOf(t[0].label)?.5:1:"legendonly"===e.visible?.5:1}).each(function(){u.select(this).call(n,t).call(i,t)});var D=0!==k.enter().size();D&&(o(t,I,z),s(t));var P=r.width,O=r.height;o(t,I,z),v.height>O?l(t):s(t);var R=r._size,F=R.l+R.w*v.x,j=R.t+R.h*(1-v.y);A.isRightAnchor(v)?F-=v.width:A.isCenterAnchor(v)&&(F-=v.width/2),A.isBottomAnchor(v)?j-=v.height:A.isMiddleAnchor(v)&&(j-=v.height/2);var N=v.width,B=R.w;N>B?(F=R.l,N=B):(F+N>P&&(F=P-N),F<0&&(F=0),N=Math.min(P-F,v.width));var U=v.height,V=R.h;U>V?(j=R.t,U=V):(j+U>O&&(j=O-U),j<0&&(j=0),U=Math.min(O-j,v.height)),m.setTranslate(k,F,j);var H,q,G=U-b.scrollBarHeight-2*b.scrollBarMargin,Y=v.height-U;if(v.height<=U||t._context.staticPlot)E.attr({width:N-v.borderwidth,height:U-v.borderwidth,x:v.borderwidth/2,y:v.borderwidth/2}),m.setTranslate(L,0,0),S.select("rect").attr({width:N-2*v.borderwidth,height:U-2*v.borderwidth,x:v.borderwidth,y:v.borderwidth}),L.call(m.setClipUrl,a);else{H=b.scrollBarMargin,q=L.attr("data-scroll")||0,E.attr({width:N-2*v.borderwidth+b.scrollBarWidth+b.scrollBarMargin,height:U-v.borderwidth,x:v.borderwidth/2,y:v.borderwidth/2}),S.select("rect").attr({width:N-2*v.borderwidth+b.scrollBarWidth+b.scrollBarMargin,height:U-2*v.borderwidth,x:v.borderwidth,y:v.borderwidth-q}),L.call(m.setClipUrl,a),D&&e(H,q),k.on("wheel",null),k.on("wheel",function(){q=h.constrain(L.attr("data-scroll")-u.event.deltaY/G*Y,-Y,0),H=b.scrollBarMargin-q/Y*G,e(H,q),0!==q&&q!==-Y&&u.event.preventDefault()}),C.on(".drag",null),L.on(".drag",null);var W=u.behavior.drag().on("drag",function(){H=h.constrain(u.event.y-b.scrollBarHeight/2,b.scrollBarMargin,b.scrollBarMargin+G),q=-(H-b.scrollBarMargin)/G*Y,e(H,q)});C.call(W),L.call(W)}if(t._context.edits.legendPosition){var X,Z,J,K;k.classed("cursor-move",!0),p.init({element:k.node(),gd:t,prepFn:function(){var t=m.getTranslate(k);J=t.x,K=t.y},moveFn:function(t,e){var r=J+t,n=K+e;m.setTranslate(k,r,n),X=p.align(r,0,R.l,R.l+R.w,v.xanchor),Z=p.align(n,0,R.t+R.h,R.t,v.yanchor)},doneFn:function(e,n,i){if(e&&void 0!==X&&void 0!==Z)c.relayout(t,{"legend.x":X,"legend.y":Z});else{var a=r._infolayer.selectAll("g.traces").filter(function(){var t=this.getBoundingClientRect();return i.clientX>=t.left&&i.clientX<=t.right&&i.clientY>=t.top&&i.clientY<=t.bottom});a.size()>0&&(1===n?k._clickTimeout=setTimeout(function(){y(a,t,n)},T):2===n&&(k._clickTimeout&&clearTimeout(k._clickTimeout),y(a,t,n)))}}})}}}},{"../../constants/alignment":701,"../../constants/interactions":706,"../../lib":728,"../../lib/svg_text_utils":750,"../../plotly":767,"../../plots/plots":831,"../../registry":846,"../color":604,"../dragelement":625,"../drawing":628,"./anchor_utils":654,"./constants":656,"./get_legend_data":659,"./handle_click":660,"./helpers":661,"./style":663,d3:122}],659:[function(t,e,r){"use strict";var n=t("../../registry"),i=t("./helpers");e.exports=function(t,e){function r(t,r){if(""!==t&&i.isGrouped(e))-1===l.indexOf(t)?(l.push(t),u=!0,s[t]=[[r]]):s[t].push([r]);else{var n="~~i"+h;l.push(n),s[n]=[[r]],h++}}var a,o,s={},l=[],u=!1,c={},h=0;for(a=0;a<t.length;a++){var f=t[a],d=f[0],p=d.trace,m=p.legendgroup;if(i.legendGetsTrace(p)&&p.showlegend)if(n.traceIs(p,"pie"))for(c[m]||(c[m]={}),o=0;o<f.length;o++){var g=f[o].label;c[m][g]||(r(m,{label:g,color:f[o].color,i:f[o].i,trace:p}),c[m][g]=!0)}else r(m,d)}if(!l.length)return[];var v,y,b=l.length;if(u&&i.isGrouped(e))for(y=new Array(b),a=0;a<b;a++)v=s[l[a]],y[a]=i.isReversed(e)?v.reverse():v;else{for(y=[new Array(b)],a=0;a<b;a++)v=s[l[a]][0],y[0][i.isReversed(e)?b-a-1:a]=v;b=1}return e._lgroupsLength=b,y}},{"../../registry":846,"./helpers":661}],660:[function(t,e,r){"use strict";var n=t("../../plotly"),i=t("../../lib"),a=t("../../registry"),o=!0;e.exports=function(t,e,r){function s(t,e,r){var n=_.indexOf(t),i=x[e];return i||(i=x[e]=[]),-1===_.indexOf(t)&&(_.push(t),n=_.length-1),i[n]=r,n}function l(t,e){var r=t._fullInput;if(a.hasTransform(r,"groupby")){var n=w[r.index];if(!n){var o=a.getTransformIndices(r,"groupby"),l=o[o.length-1];n=i.keyedContainer(r,"transforms["+l+"].styles","target","value.visible"),w[r.index]=n}var u=n.get(t._group);void 0===u&&(u=!0),!1!==u&&n.set(t._group,e),M[r.index]=s(r.index,"visible",!1!==r.visible)}else{var c=!1!==r.visible&&e;s(r.index,"visible",c)}}if(!e._dragged&&!e._editing){var u,c,h,f,d,p,m=e._fullLayout.hiddenlabels?e._fullLayout.hiddenlabels.slice():[],g=t.data()[0][0],v=e._fullData,y=g.trace,b=y.legendgroup,x={},_=[],w=[],M=[];if(1===r&&o&&e.data&&e._context.showTips?(i.notifier("Double click on legend to isolate individual trace","long"),o=!1):o=!1,a.traceIs(y,"pie")){var k=g.label,A=m.indexOf(k);1===r?-1===A?m.push(k):m.splice(A,1):2===r&&(m=[],e.calcdata[0].forEach(function(t){k!==t.label&&m.push(t.label)}),e._fullLayout.hiddenlabels&&e._fullLayout.hiddenlabels.length===m.length&&-1===A&&(m=[])),n.relayout(e,"hiddenlabels",m)}else{var T,S=b&&b.length,E=[];if(S)for(u=0;u<v.length;u++)T=v[u],T.visible&&T.legendgroup===b&&E.push(u);if(1===r){var L;switch(y.visible){case!0:L="legendonly";break;case!1:L=!1;break;case"legendonly":L=!0}if(S)for(u=0;u<v.length;u++)!1!==v[u].visible&&v[u].legendgroup===b&&l(v[u],L);else l(y,L)}else if(2===r){var C,I,z,D=!0;for(u=0;u<v.length;u++)if(!(C=v[u]===y)&&!(I=S&&v[u].legendgroup===b)&&!0===v[u].visible&&!a.traceIs(v[u],"notLegendIsolatable")){D=!1;break}for(u=0;u<v.length;u++)if(!1!==v[u].visible&&!a.traceIs(v[u],"notLegendIsolatable"))switch(y.visible){case"legendonly":l(v[u],!0);break;case!0:z=!!D||"legendonly",C=v[u]===y,I=C||S&&v[u].legendgroup===b,l(v[u],!!I||z)}}for(u=0;u<w.length;u++)if(h=w[u]){var P=h.constructUpdate(),O=Object.keys(P);for(c=0;c<O.length;c++)f=O[c],p=x[f]=x[f]||[],p[M[u]]=P[f]}for(d=Object.keys(x),u=0;u<d.length;u++)for(f=d[u],c=0;c<_.length;c++)x[f].hasOwnProperty(c)||(x[f][c]=void 0);n.restyle(e,x,_)}}}},{"../../lib":728,"../../plotly":767,"../../registry":846}],661:[function(t,e,r){"use strict";var n=t("../../registry");r.legendGetsTrace=function(t){return t.visible&&n.traceIs(t,"showLegend")},r.isGrouped=function(t){return-1!==(t.traceorder||"").indexOf("grouped")},r.isVertical=function(t){return"h"!==t.orientation},r.isReversed=function(t){return-1!==(t.traceorder||"").indexOf("reversed")}},{"../../registry":846}],662:[function(t,e,r){"use strict";e.exports={moduleType:"component",name:"legend",layoutAttributes:t("./attributes"),supplyLayoutDefaults:t("./defaults"),draw:t("./draw"),style:t("./style")}},{"./attributes":655,"./defaults":657,"./draw":658,"./style":663}],663:[function(t,e,r){"use strict";var n=t("d3"),i=t("../../registry"),a=t("../../lib"),o=t("../drawing"),s=t("../color"),l=t("../../traces/scatter/subtypes"),u=t("../../traces/pie/style_one");e.exports=function(t,e){function r(t){var e=t[0].trace,r=e.visible&&e.fill&&"none"!==e.fill,i=l.hasLines(e);e&&e._module&&"contourcarpet"===e._module.name&&(i=e.contours.showlines,r="fill"===e.contours.coloring);var a=n.select(this).select(".legendfill").selectAll("path").data(r?[t]:[]);a.enter().append("path").classed("js-fill",!0),a.exit().remove(),a.attr("d","M5,0h30v6h-30z").call(o.fillGroupStyle);var s=n.select(this).select(".legendlines").selectAll("path").data(i?[t]:[]);s.enter().append("path").classed("js-line",!0).attr("d","M5,0h30"),s.exit().remove(),s.call(o.lineGroupStyle)}function c(t){function r(t,e,r){var n=a.nestedProperty(h,t).get(),i=Array.isArray(n)&&e?e(n):n;if(r){if(i<r[0])return r[0];if(i>r[1])return r[1]}return i}function i(t){return t[0]}var s,u,c=t[0],h=c.trace,f=l.hasMarkers(h),d=l.hasText(h),p=l.hasLines(h);if(f||d||p){var m={},g={};f&&(m.mc=r("marker.color",i),m.mo=r("marker.opacity",a.mean,[.2,1]),m.ms=r("marker.size",a.mean,[2,16]),m.mlc=r("marker.line.color",i),m.mlw=r("marker.line.width",a.mean,[0,5]),g.marker={sizeref:1,sizemin:1,sizemode:"diameter"}),p&&(g.line={width:r("line.width",i,[0,10])}),d&&(m.tx="Aa",m.tp=r("textposition",i),m.ts=10,m.tc=r("textfont.color",i),m.tf=r("textfont.family",i)),s=[a.minExtend(c,m)],u=a.minExtend(h,g)}var v=n.select(this).select("g.legendpoints"),y=v.selectAll("path.scatterpts").data(f?s:[]);y.enter().append("path").classed("scatterpts",!0).attr("transform","translate(20,0)"),y.exit().remove(),y.call(o.pointStyle,u,e),f&&(s[0].mrc=3);var b=v.selectAll("g.pointtext").data(d?s:[]);b.enter().append("g").classed("pointtext",!0).append("text").attr("transform","translate(20,0)"),b.exit().remove(),b.selectAll("text").call(o.textPointStyle,u,e)}function h(t){var e=t[0].trace,r=e.marker||{},a=r.line||{},o=n.select(this).select("g.legendpoints").selectAll("path.legendbar").data(i.traceIs(e,"bar")?[t]:[]);o.enter().append("path").classed("legendbar",!0).attr("d","M6,6H-6V-6H6Z").attr("transform","translate(20,0)"),o.exit().remove(),o.each(function(t){var e=n.select(this),i=t[0],o=(i.mlw+1||a.width+1)-1;e.style("stroke-width",o+"px").call(s.fill,i.mc||r.color),o&&e.call(s.stroke,i.mlc||a.color)})}function f(t){var e=t[0].trace,r=n.select(this).select("g.legendpoints").selectAll("path.legendbox").data(i.traceIs(e,"box")&&e.visible?[t]:[]);r.enter().append("path").classed("legendbox",!0).attr("d","M6,6H-6V-6H6Z").attr("transform","translate(20,0)"),r.exit().remove(),r.each(function(){var t=e.line.width,r=n.select(this);r.style("stroke-width",t+"px").call(s.fill,e.fillcolor),t&&r.call(s.stroke,e.line.color)})}function d(t){var e=t[0].trace,r=n.select(this).select("g.legendpoints").selectAll("path.legendpie").data(i.traceIs(e,"pie")&&e.visible?[t]:[]);r.enter().append("path").classed("legendpie",!0).attr("d","M6,6H-6V-6H6Z").attr("transform","translate(20,0)"),r.exit().remove(),r.size()&&r.call(u,t[0],e)}t.each(function(t){var e=n.select(this),r=e.selectAll("g.layers").data([0]);r.enter().append("g").classed("layers",!0),r.style("opacity",t[0].trace.opacity),r.selectAll("g.legendfill").data([t]).enter().append("g").classed("legendfill",!0),r.selectAll("g.legendlines").data([t]).enter().append("g").classed("legendlines",!0);var i=r.selectAll("g.legendsymbols").data([t]);i.enter().append("g").classed("legendsymbols",!0),i.selectAll("g.legendpoints").data([t]).enter().append("g").classed("legendpoints",!0)}).each(h).each(f).each(d).each(r).each(c)}},{"../../lib":728,"../../registry":846,"../../traces/pie/style_one":1017,"../../traces/scatter/subtypes":1052,"../color":604,"../drawing":628,d3:122}],664:[function(t,e,r){"use strict";function n(t,e){var r,n,i=e.currentTarget,a=i.getAttribute("data-attr"),o=i.getAttribute("data-val")||!0,s=t._fullLayout,l={},u=d.list(t,null,!0),c="on";if("zoom"===a){var f,p="in"===o?.5:2,m=(1+p)/2,g=(1-p)/2;for(n=0;n<u.length;n++)if(r=u[n],!r.fixedrange)if(f=r._name,"auto"===o)l[f+".autorange"]=!0;else if("reset"===o){if(void 0===r._rangeInitial)l[f+".autorange"]=!0;else{var v=r._rangeInitial.slice();l[f+".range[0]"]=v[0],l[f+".range[1]"]=v[1]}void 0!==r._showSpikeInitial&&(l[f+".showspikes"]=r._showSpikeInitial,"on"!==c||r._showSpikeInitial||(c="off"))}else{var y=[r.r2l(r.range[0]),r.r2l(r.range[1])],b=[m*y[0]+g*y[1],m*y[1]+g*y[0]];l[f+".range[0]"]=r.l2r(b[0]),l[f+".range[1]"]=r.l2r(b[1])}s._cartesianSpikesEnabled=c}else{if("hovermode"!==a||"x"!==o&&"y"!==o){if("hovermode"===a&&"closest"===o){for(n=0;n<u.length;n++)r=u[n],"on"!==c||r.showspikes||(c="off");s._cartesianSpikesEnabled=c}}else o=s._isHoriz?"y":"x",i.setAttribute("data-val",o),"closest"!==o&&(s._cartesianSpikesEnabled="off");l[a]=o}h.relayout(t,l)}function i(t,e){for(var r=e.currentTarget,n=r.getAttribute("data-attr"),i=r.getAttribute("data-val")||!0,a=t._fullLayout,o=f.getSubplotIds(a,"gl3d"),s={},l=n.split("."),u=0;u<o.length;u++)s[o[u]+"."+l[1]]=i;h.relayout(t,s)}function a(t,e){for(var r=e.currentTarget,n=r.getAttribute("data-attr"),i=t._fullLayout,a=f.getSubplotIds(i,"gl3d"),o={},s=0;s<a.length;s++){var l=a[s],u=l+".camera",c=i[l]._scene;"resetDefault"===n?o[u]=null:"resetLastSave"===n&&(o[u]=p.extendDeep({},c.cameraInitial))}h.relayout(t,o)}function o(t,e){var r=e.currentTarget,n=r._previousVal||!1,i=t.layout,a=t._fullLayout,o=f.getSubplotIds(a,"gl3d"),s=["xaxis","yaxis","zaxis"],l=["showspikes","spikesides","spikethickness","spikecolor"],u={},c={},d={};if(n)d=p.extendDeep(i,n),r._previousVal=null;else{d={"allaxes.showspikes":!1};for(var m=0;m<o.length;m++){var g=o[m],v=a[g],y=u[g]={};y.hovermode=v.hovermode,d[g+".hovermode"]=!1;for(var b=0;b<3;b++){var x=s[b];c=y[x]={};for(var _=0;_<l.length;_++){var w=l[_];c[w]=v[x][w]}}}r._previousVal=p.extendDeep({},u)}h.relayout(t,d)}function s(t,e){for(var r=e.currentTarget,n=r.getAttribute("data-attr"),i=r.getAttribute("data-val")||!0,a=t._fullLayout,o=f.getSubplotIds(a,"geo"),s=0;s<o.length;s++){var l=o[s],u=a[l];if("zoom"===n){var d=u.projection.scale,p="in"===i?2*d:.5*d;h.relayout(t,l+".projection.scale",p)}else"reset"===n&&c(t,"geo")}}function l(t){var e,r=t._fullLayout;e=r._has("cartesian")?r._isHoriz?"y":"x":"closest";var n=!t._fullLayout.hovermode&&e;h.relayout(t,"hovermode",n)}function u(t){for(var e,r,n=t._fullLayout,i=d.list(t,null,!0),a={},o=0;o<i.length;o++)e=i[o],r=e._name,a[r+".showspikes"]="on"===n._cartesianSpikesEnabled;return a}function c(t,e){for(var r=t._fullLayout,n=f.getSubplotIds(r,e),i={},a=0;a<n.length;a++)for(var o=n[a],s=r[o]._subplot,l=s.viewInitial,u=Object.keys(l),c=0;c<u.length;c++){var d=u[c];i[o+"."+d]=l[d]}h.relayout(t,i)}var h=t("../../plotly"),f=t("../../plots/plots"),d=t("../../plots/cartesian/axes"),p=t("../../lib"),m=t("../../snapshot/download"),g=t("../../../build/ploticon"),v=e.exports={};v.toImage={name:"toImage",title:"Download plot as a png",icon:g.camera,click:function(t){var e="png";p.notifier("Taking snapshot - this may take a few seconds","long"),p.isIE()&&(p.notifier("IE only supports svg. Changing format to svg.","long"),e="svg"),m(t,{format:e}).then(function(t){p.notifier("Snapshot succeeded - "+t,"long")}).catch(function(){p.notifier("Sorry there was a problem downloading your snapshot!","long")})}},v.sendDataToCloud={name:"sendDataToCloud",title:"Save and edit plot in cloud",icon:g.disk,click:function(t){f.sendDataToCloud(t)}},v.zoom2d={name:"zoom2d",title:"Zoom",attr:"dragmode",val:"zoom",icon:g.zoombox,click:n},v.pan2d={name:"pan2d",title:"Pan",attr:"dragmode",val:"pan",icon:g.pan,click:n},v.select2d={name:"select2d",title:"Box Select",attr:"dragmode",val:"select",icon:g.selectbox,click:n},v.lasso2d={name:"lasso2d",title:"Lasso Select",attr:"dragmode",val:"lasso",icon:g.lasso,click:n},v.zoomIn2d={name:"zoomIn2d",title:"Zoom in",attr:"zoom",val:"in",icon:g.zoom_plus,click:n},v.zoomOut2d={name:"zoomOut2d",title:"Zoom out",attr:"zoom",val:"out",icon:g.zoom_minus,click:n},v.autoScale2d={name:"autoScale2d",title:"Autoscale",attr:"zoom",val:"auto",icon:g.autoscale,click:n},v.resetScale2d={name:"resetScale2d",title:"Reset axes",attr:"zoom",val:"reset",icon:g.home,click:n},v.hoverClosestCartesian={name:"hoverClosestCartesian",title:"Show closest data on hover",attr:"hovermode",val:"closest",icon:g.tooltip_basic,gravity:"ne",click:n},v.hoverCompareCartesian={name:"hoverCompareCartesian",title:"Compare data on hover",attr:"hovermode",val:function(t){return t._fullLayout._isHoriz?"y":"x"},icon:g.tooltip_compare,gravity:"ne",click:n},v.zoom3d={name:"zoom3d",title:"Zoom",attr:"scene.dragmode",val:"zoom",icon:g.zoombox,click:i},v.pan3d={name:"pan3d",title:"Pan",attr:"scene.dragmode",val:"pan",icon:g.pan,click:i},v.orbitRotation={name:"orbitRotation",title:"orbital rotation",attr:"scene.dragmode",val:"orbit",icon:g["3d_rotate"],click:i},v.tableRotation={name:"tableRotation",title:"turntable rotation",attr:"scene.dragmode",val:"turntable",icon:g["z-axis"],click:i},v.resetCameraDefault3d={name:"resetCameraDefault3d",title:"Reset camera to default",attr:"resetDefault",icon:g.home,click:a},v.resetCameraLastSave3d={name:"resetCameraLastSave3d",title:"Reset camera to last save",attr:"resetLastSave",icon:g.movie,click:a},v.hoverClosest3d={name:"hoverClosest3d",title:"Toggle show closest data on hover",attr:"hovermode",val:null,toggle:!0,icon:g.tooltip_basic,gravity:"ne",click:o},v.zoomInGeo={name:"zoomInGeo",title:"Zoom in",attr:"zoom",val:"in",icon:g.zoom_plus,click:s},v.zoomOutGeo={name:"zoomOutGeo",title:"Zoom out",attr:"zoom",val:"out",icon:g.zoom_minus,click:s},v.resetGeo={name:"resetGeo",title:"Reset",attr:"reset",val:null,icon:g.autoscale,click:s},v.hoverClosestGeo={name:"hoverClosestGeo",title:"Toggle show closest data on hover",attr:"hovermode",val:null,toggle:!0,icon:g.tooltip_basic,gravity:"ne",click:l},v.hoverClosestGl2d={name:"hoverClosestGl2d",title:"Toggle show closest data on hover",attr:"hovermode",val:null,toggle:!0,icon:g.tooltip_basic,gravity:"ne",click:l},v.hoverClosestPie={name:"hoverClosestPie",title:"Toggle show closest data on hover",attr:"hovermode",val:"closest",icon:g.tooltip_basic,gravity:"ne",click:l},v.toggleHover={name:"toggleHover",title:"Toggle show closest data on hover",attr:"hovermode",val:null,toggle:!0,icon:g.tooltip_basic,gravity:"ne",click:function(t,e){l(t),o(t,e)}},v.resetViews={name:"resetViews",title:"Reset views",icon:g.home,click:function(t,e){var r=e.currentTarget;r.setAttribute("data-attr","zoom"),r.setAttribute("data-val","reset"),n(t,e),r.setAttribute("data-attr","resetLastSave"),a(t,e),c(t,"geo"),c(t,"mapbox")}},v.toggleSpikelines={name:"toggleSpikelines",title:"Toggle Spike Lines",icon:g.spikeline,attr:"_cartesianSpikesEnabled",val:"on",click:function(t){var e=t._fullLayout;e._cartesianSpikesEnabled="closest"===e.hovermode&&"on"===e._cartesianSpikesEnabled?"off":"on";var r=u(t);r.hovermode="closest",h.relayout(t,r)}},v.resetViewMapbox={name:"resetViewMapbox",title:"Reset view",attr:"reset",icon:g.home,click:function(t){c(t,"mapbox")}}},{"../../../build/ploticon":2,"../../lib":728,"../../plotly":767,"../../plots/cartesian/axes":772,"../../plots/plots":831,"../../snapshot/download":848}],665:[function(t,e,r){"use strict";r.manage=t("./manage")},{"./manage":666}],666:[function(t,e,r){"use strict";function n(t,e,r){function n(t){for(var r=[],n=0;n<t.length;n++){var i=t[n];-1===e.indexOf(i)&&r.push(f[i])}v.push(r)}var s=t._fullLayout,l=t._fullData,u=s._has("cartesian"),c=s._has("gl3d"),h=s._has("geo"),d=s._has("pie"),p=s._has("gl2d"),m=s._has("ternary"),g=s._has("mapbox"),v=[];if(n(["toImage","sendDataToCloud"]),(u||p||d||m)+h+c>1)return n(["resetViews","toggleHover"]),o(v,r);c&&(n(["zoom3d","pan3d","orbitRotation","tableRotation"]),n(["resetCameraDefault3d","resetCameraLastSave3d"]),n(["hoverClosest3d"]));var y=i(s),b=[];return((u||p)&&!y||m)&&(b=["zoom2d","pan2d"]),(g||h)&&(b=["pan2d"]),a(l)&&(b.push("select2d"),b.push("lasso2d")),b.length&&n(b),!u&&!p||y||m||n(["zoomIn2d","zoomOut2d","autoScale2d","resetScale2d"]),u&&d?n(["toggleHover"]):p?n(["hoverClosestGl2d"]):u?n(["toggleSpikelines","hoverClosestCartesian","hoverCompareCartesian"]):d?n(["hoverClosestPie"]):g?n(["resetViewMapbox","toggleHover"]):h&&(n(["zoomInGeo","zoomOutGeo","resetGeo"]),n(["hoverClosestGeo"])),o(v,r)}function i(t){for(var e=l.list({_fullLayout:t},null,!0),r=!0,n=0;n<e.length;n++)if(!e[n].fixedrange){r=!1;break}return r}function a(t){for(var e=!1,r=0;r<t.length&&!e;r++){var n=t[r];n._module&&n._module.selectPoints&&(c.traceIs(n,"scatter-like")?(u.hasMarkers(n)||u.hasText(n))&&(e=!0):e=!0)}return e}function o(t,e){if(e.length)if(Array.isArray(e[0]))for(var r=0;r<e.length;r++)t.push(e[r]);else t.push(e);return t}function s(t){for(var e=0;e<t.length;e++)for(var r=t[e],n=0;n<r.length;n++){var i=r[n];if("string"==typeof i){if(void 0===f[i])throw new Error(["*modeBarButtons* configuration options","invalid button name"].join(" "));t[e][n]=f[i]}}return t}var l=t("../../plots/cartesian/axes"),u=t("../../traces/scatter/subtypes"),c=t("../../registry"),h=t("./modebar"),f=t("./buttons");e.exports=function(t){var e=t._fullLayout,r=t._context,i=e._modeBar;if(!r.displayModeBar)return void(i&&(i.destroy(),delete e._modeBar));if(!Array.isArray(r.modeBarButtonsToRemove))throw new Error(["*modeBarButtonsToRemove* configuration options","must be an array."].join(" "));if(!Array.isArray(r.modeBarButtonsToAdd))throw new Error(["*modeBarButtonsToAdd* configuration options","must be an array."].join(" "));var a,o=r.modeBarButtons;a=Array.isArray(o)&&o.length?s(o):n(t,r.modeBarButtonsToRemove,r.modeBarButtonsToAdd),i?i.update(t,a):e._modeBar=h(t,a)}},{"../../plots/cartesian/axes":772,"../../registry":846,"../../traces/scatter/subtypes":1052,"./buttons":664,"./modebar":667}],667:[function(t,e,r){"use strict";function n(t){this.container=t.container,this.element=document.createElement("div"),this.update(t.graphInfo,t.buttons),this.container.appendChild(this.element)}function i(t,e){var r=t._fullLayout,i=new n({graphInfo:t,container:r._paperdiv.node(),buttons:e});return r._privateplot&&a.select(i.element).append("span").classed("badge-private float--left",!0).text("PRIVATE"),i}var a=t("d3"),o=t("../../lib"),s=t("../../../build/ploticon"),l=n.prototype;l.update=function(t,e){this.graphInfo=t;var r=this.graphInfo._context;"hover"===r.displayModeBar?this.element.className="modebar modebar--hover":this.element.className="modebar";var n=!this.hasButtons(e),i=this.hasLogo!==r.displaylogo;(n||i)&&(this.removeAllButtons(),this.updateButtons(e),r.displaylogo&&(this.element.appendChild(this.getLogo()),this.hasLogo=!0)),this.updateActiveButton()},l.updateButtons=function(t){var e=this;this.buttons=t,this.buttonElements=[],this.buttonsNames=[],this.buttons.forEach(function(t){var r=e.createGroup();t.forEach(function(t){var n=t.name;if(!n)throw new Error("must provide button 'name' in button config");if(-1!==e.buttonsNames.indexOf(n))throw new Error("button name '"+n+"' is taken");e.buttonsNames.push(n);var i=e.createButton(t);e.buttonElements.push(i),r.appendChild(i)}),e.element.appendChild(r)})},l.createGroup=function(){var t=document.createElement("div");return t.className="modebar-group",t},l.createButton=function(t){var e=this,r=document.createElement("a");r.setAttribute("rel","tooltip"),r.className="modebar-btn";var n=t.title;void 0===n&&(n=t.name),(n||0===n)&&r.setAttribute("data-title",n),void 0!==t.attr&&r.setAttribute("data-attr",t.attr);var i=t.val;if(void 0!==i&&("function"==typeof i&&(i=i(this.graphInfo)),r.setAttribute("data-val",i)),"function"!=typeof t.click)throw new Error("must provide button 'click' function in button config");return r.addEventListener("click",function(r){t.click(e.graphInfo,r),e.updateActiveButton(r.currentTarget)}),r.setAttribute("data-toggle",t.toggle||!1),t.toggle&&a.select(r).classed("active",!0),r.appendChild(this.createIcon(t.icon||s.question,t.name)),r.setAttribute("data-gravity",t.gravity||"n"),r},l.createIcon=function(t,e){var r=t.ascent-t.descent,n="http://www.w3.org/2000/svg",i=document.createElementNS(n,"svg"),a=document.createElementNS(n,"path");i.setAttribute("height","1em"),i.setAttribute("width",t.width/r+"em"),i.setAttribute("viewBox",[0,0,t.width,r].join(" "));var o="toggleSpikelines"===e?"matrix(1.5 0 0 -1.5 0 "+t.ascent+")":"matrix(1 0 0 -1 0 "+t.ascent+")";return a.setAttribute("d",t.path),a.setAttribute("transform",o),i.appendChild(a),i},l.updateActiveButton=function(t){var e=this.graphInfo._fullLayout,r=void 0!==t?t.getAttribute("data-attr"):null;this.buttonElements.forEach(function(t){var n=t.getAttribute("data-val")||!0,i=t.getAttribute("data-attr"),s="true"===t.getAttribute("data-toggle"),l=a.select(t);if(s)i===r&&l.classed("active",!l.classed("active"));else{var u=null===i?i:o.nestedProperty(e,i).get();l.classed("active",u===n)}})},l.hasButtons=function(t){var e=this.buttons;if(!e)return!1;if(t.length!==e.length)return!1;for(var r=0;r<t.length;++r){if(t[r].length!==e[r].length)return!1;for(var n=0;n<t[r].length;n++)if(t[r][n].name!==e[r][n].name)return!1}return!0},l.getLogo=function(){var t=this.createGroup(),e=document.createElement("a");return e.href="https://plot.ly/",e.target="_blank",e.setAttribute("data-title","Produced with Plotly"),e.className="modebar-btn plotlyjsicon modebar-btn--logo",e.appendChild(this.createIcon(s.plotlylogo)),t.appendChild(e),t},l.removeAllButtons=function(){for(;this.element.firstChild;)this.element.removeChild(this.element.firstChild);this.hasLogo=!1},l.destroy=function(){o.removeElement(this.container.querySelector(".modebar"))},e.exports=i},{"../../../build/ploticon":2,"../../lib":728,d3:122}],668:[function(t,e,r){"use strict";var n=t("../../plots/font_attributes"),i=t("../color/attributes"),a=t("../../lib/extend").extendFlat,o=t("./button_attributes");o=a(o,{_isLinkedToArray:"button"}),e.exports={visible:{valType:"boolean",editType:"plot"},buttons:o,x:{valType:"number",min:-2,max:3,editType:"plot"},xanchor:{valType:"enumerated",values:["auto","left","center","right"],dflt:"left",editType:"plot"},y:{valType:"number",min:-2,max:3,editType:"plot"},yanchor:{valType:"enumerated",values:["auto","top","middle","bottom"],dflt:"bottom",editType:"plot"},font:n({editType:"plot"}),bgcolor:{valType:"color",dflt:i.lightLine,editType:"plot"},activecolor:{valType:"color",editType:"plot"},bordercolor:{valType:"color",dflt:i.defaultLine,editType:"plot"},borderwidth:{valType:"number",min:0,dflt:0,editType:"plot"},editType:"plot"}},{"../../lib/extend":717,"../../plots/font_attributes":796,"../color/attributes":603,"./button_attributes":669}],669:[function(t,e,r){"use strict";e.exports={step:{valType:"enumerated",values:["month","year","day","hour","minute","second","all"],dflt:"month",editType:"plot"},stepmode:{valType:"enumerated",values:["backward","todate"],dflt:"backward",editType:"plot"},count:{valType:"number",min:0,dflt:1,editType:"plot"},label:{valType:"string",editType:"plot"},editType:"plot"}},{}],670:[function(t,e,r){"use strict";e.exports={yPad:.02,minButtonWidth:30,rx:3,ry:3,lightAmount:25,darkAmount:10}},{}],671:[function(t,e,r){"use strict";function n(t,e,r){function n(t,e){return a.coerce(i,o,l,t,e)}for(var i,o,s=t.buttons||[],u=e.buttons=[],c=0;c<s.length;c++)if(i=s[c],o={},a.isPlainObject(i)){var h=n("step");"all"!==h&&(!r||"gregorian"===r||"month"!==h&&"year"!==h?n("stepmode"):o.stepmode="backward",n("count")),n("label"),o._index=c,u.push(o)}return u}function i(t,e,r){for(var n=r.filter(function(r){return e[r].anchor===t._id}),i=0,a=0;a<n.length;a++){var o=e[n[a]].domain;o&&(i=Math.max(o[1],i))}return[t.domain[0],i+u.yPad]}var a=t("../../lib"),o=t("../color"),s=t("./attributes"),l=t("./button_attributes"),u=t("./constants");e.exports=function(t,e,r,l,c){function h(t,e){return a.coerce(f,d,s,t,e)}var f=t.rangeselector||{},d=e.rangeselector={};if(h("visible",n(f,d,c).length>0)){var p=i(e,r,l);h("x",p[0]),h("y",p[1]),a.noneOrAll(t,e,["x","y"]),h("xanchor"),h("yanchor"),a.coerceFont(h,"font",r.font);var m=h("bgcolor");h("activecolor",o.contrast(m,u.lightAmount,u.darkAmount)),h("bordercolor"),h("borderwidth")}}},{"../../lib":728,"../color":604,"./attributes":668,"./button_attributes":669,"./constants":670}],672:[function(t,e,r){"use strict";function n(t){for(var e=v.list(t,"x",!0),r=[],n=0;n<e.length;n++){var i=e[n];i.rangeselector&&i.rangeselector.visible&&r.push(i)}return r}function i(t){return t._id}function a(t,e,r){if("all"===e.step)return!0===t.autorange;var n=Object.keys(r);return t.range[0]===r[n[0]]&&t.range[1]===r[n[1]]}function o(t,e,r){var n=t.selectAll("rect").data([0]);n.enter().append("rect").classed("selector-rect",!0),n.attr("shape-rendering","crispEdges"),n.attr({rx:x.rx,ry:x.ry}),n.call(p.stroke,e.bordercolor).call(p.fill,s(e,r)).style("stroke-width",e.borderwidth+"px")}function s(t,e){return e.isActive||e.isHovered?t.activecolor:t.bgcolor}function l(t,e,r,n){function i(t){g.convertToTspans(t,n)}var a=t.selectAll("text").data([0]);a.enter().append("text").classed("selector-text",!0).classed("user-select-none",!0),a.attr("text-anchor","middle"),a.call(m.font,e.font).text(u(r)).call(i)}function u(t){return t.label?t.label:"all"===t.step?"all":t.count+t.step.charAt(0)}function c(t,e,r,n){r.width=0,r.height=0;var i=r.borderwidth;e.each(function(){var t=h.select(this),e=t.select(".selector-text"),n=r.font.size*b,i=Math.max(n*g.lineCount(e),16)+3;r.height=Math.max(r.height,i)}),e.each(function(){var t=h.select(this),e=t.select(".selector-rect"),n=t.select(".selector-text"),a=n.node()&&m.bBox(n.node()).width,o=r.font.size*b,s=g.lineCount(n),l=Math.max(a+10,x.minButtonWidth);t.attr("transform","translate("+(i+r.width)+","+i+")"),e.attr({x:0,y:0,width:l,height:r.height}),g.positionText(n,l/2,r.height/2-(s-1)*o/2+3),r.width+=l+5}),e.selectAll("rect").attr("height",r.height);var a=t._fullLayout._size;r.lx=a.l+a.w*r.x,r.ly=a.t+a.h*(1-r.y);var o="left";y.isRightAnchor(r)&&(r.lx-=r.width,o="right"),y.isCenterAnchor(r)&&(r.lx-=r.width/2,o="center");var s="top";y.isBottomAnchor(r)&&(r.ly-=r.height,s="bottom"),y.isMiddleAnchor(r)&&(r.ly-=r.height/2,s="middle"),r.width=Math.ceil(r.width),r.height=Math.ceil(r.height),r.lx=Math.round(r.lx),r.ly=Math.round(r.ly),d.autoMargin(t,n+"-range-selector",{x:r.x,y:r.y,l:r.width*({right:1,center:.5}[o]||0),r:r.width*({left:1,center:.5}[o]||0),b:r.height*({top:1,middle:.5}[s]||0),t:r.height*({bottom:1,middle:.5}[s]||0)})}var h=t("d3"),f=t("../../plotly"),d=t("../../plots/plots"),p=t("../color"),m=t("../drawing"),g=t("../../lib/svg_text_utils"),v=t("../../plots/cartesian/axis_ids"),y=t("../legend/anchor_utils"),b=t("../../constants/alignment").LINE_SPACING,x=t("./constants"),_=t("./get_update_object");e.exports=function(t){var e=t._fullLayout,r=e._infolayer.selectAll(".rangeselector").data(n(t),i);r.enter().append("g").classed("rangeselector",!0),r.exit().remove(),r.style({cursor:"pointer","pointer-events":"all"}),r.each(function(e){var r=h.select(this),n=e,i=n.rangeselector,s=r.selectAll("g.button").data(i.buttons);s.enter().append("g").classed("button",!0),s.exit().remove(),s.each(function(e){var r=h.select(this),s=_(n,e);e.isActive=a(n,e,s),r.call(o,i,e),r.call(l,i,e,t),r.on("click",function(){t._dragged||f.relayout(t,s)}),r.on("mouseover",function(){e.isHovered=!0,r.call(o,i,e)}),r.on("mouseout",function(){e.isHovered=!1,r.call(o,i,e)})}),c(t,s,i,n._name),r.attr("transform","translate("+i.lx+","+i.ly+")")})}},{"../../constants/alignment":701,"../../lib/svg_text_utils":750,"../../plotly":767,"../../plots/cartesian/axis_ids":775,"../../plots/plots":831,"../color":604,"../drawing":628,"../legend/anchor_utils":654,"./constants":670,"./get_update_object":673,d3:122}],673:[function(t,e,r){"use strict";function n(t,e){var r,n=t.range,a=new Date(t.r2l(n[1])),o=e.step,s=e.count;switch(e.stepmode){case"backward":r=t.l2r(+i.time[o].utc.offset(a,-s));break;case"todate":var l=i.time[o].utc.offset(a,-s);r=t.l2r(+i.time[o].utc.ceil(l))}return[r,n[1]]}var i=t("d3");e.exports=function(t,e){var r=t._name,i={};if("all"===e.step)i[r+".autorange"]=!0;else{var a=n(t,e);i[r+".range[0]"]=a[0],i[r+".range[1]"]=a[1]}return i}},{d3:122}],674:[function(t,e,r){"use strict";e.exports={moduleType:"component",name:"rangeselector",schema:{subplots:{xaxis:{rangeselector:t("./attributes")}}},layoutAttributes:t("./attributes"),handleDefaults:t("./defaults"),draw:t("./draw")}},{"./attributes":668,"./defaults":671,"./draw":672}],675:[function(t,e,r){"use strict";var n=t("../color/attributes");e.exports={bgcolor:{valType:"color",dflt:n.background,editType:"calc"},bordercolor:{valType:"color",dflt:n.defaultLine,editType:"calc"},borderwidth:{valType:"integer",dflt:0,min:0,editType:"calc"},autorange:{valType:"boolean",dflt:!0,editType:"calc"},range:{valType:"info_array",items:[{valType:"any",editType:"calc"},{valType:"any",editType:"calc"}],editType:"calc"},thickness:{valType:"number",dflt:.15,min:0,max:1,editType:"calc"},visible:{valType:"boolean",dflt:!0,editType:"calc"},editType:"calc"}},{"../color/attributes":603}],676:[function(t,e,r){"use strict";var n=t("../../plots/cartesian/axes"),i=t("./constants");e.exports=function(t){for(var e=n.list(t,"x",!0),r=0;r<e.length;r++){var a=e[r],o=a[i.name];o&&o.visible&&o.autorange&&a._min.length&&a._max.length&&(o._input.autorange=!0,
o._input.range=o.range=n.getAutoRange(a))}}},{"../../plots/cartesian/axes":772,"./constants":677}],677:[function(t,e,r){"use strict";e.exports={name:"rangeslider",containerClassName:"rangeslider-container",bgClassName:"rangeslider-bg",rangePlotClassName:"rangeslider-rangeplot",maskMinClassName:"rangeslider-mask-min",maskMaxClassName:"rangeslider-mask-max",slideBoxClassName:"rangeslider-slidebox",grabberMinClassName:"rangeslider-grabber-min",grabAreaMinClassName:"rangeslider-grabarea-min",handleMinClassName:"rangeslider-handle-min",grabberMaxClassName:"rangeslider-grabber-max",grabAreaMaxClassName:"rangeslider-grabarea-max",handleMaxClassName:"rangeslider-handle-max",maskColor:"rgba(0,0,0,0.4)",slideBoxFill:"transparent",slideBoxCursor:"ew-resize",grabAreaFill:"transparent",grabAreaCursor:"col-resize",grabAreaWidth:10,handleWidth:4,handleRadius:1,handleStrokeWidth:1,extraPad:15}},{}],678:[function(t,e,r){"use strict";var n=t("../../lib"),i=t("./attributes");e.exports=function(t,e,r){function a(t,e){return n.coerce(o,l,i,t,e)}if(t[r].rangeslider){n.isPlainObject(t[r].rangeslider)||(t[r].rangeslider={});var o=t[r].rangeslider,s=e[r],l=s.rangeslider={};if(a("visible")){if(a("bgcolor",e.plot_bgcolor),a("bordercolor"),a("borderwidth"),a("thickness"),a("autorange",!s.isValidRange(o.range)),a("range"),l.range){var u=l.range,c=s.range;u[0]=s.l2r(Math.min(s.r2l(u[0]),s.r2l(c[0]))),u[1]=s.l2r(Math.max(s.r2l(u[1]),s.r2l(c[1])))}s.cleanRange("rangeslider.range"),l._input=o}}}},{"../../lib":728,"./attributes":675}],679:[function(t,e,r){"use strict";function n(t){var e=w.list({_fullLayout:t},"x",!0),r=A.name,n=[];if(t._has("gl2d"))return n;for(var i=0;i<e.length;i++){var a=e[i];a[r]&&a[r].visible&&n.push(a)}return n}function i(t,e,r,n){var i=t.select("rect."+A.slideBoxClassName).node(),o=t.select("rect."+A.grabAreaMinClassName).node(),s=t.select("rect."+A.grabAreaMaxClassName).node();t.on("mousedown",function(){function l(l){var u,c,y,b=+l.clientX-f;switch(h){case i:y="ew-resize",u=p+b,c=g+b;break;case o:y="col-resize",u=p+b,c=g;break;case s:y="col-resize",u=p,c=g+b;break;default:y="ew-resize",u=d,c=d+b}if(c<u){var x=c;c=u,u=x}n._pixelMin=u,n._pixelMax=c,k(m.select(v),y),a(t,e,r,n)}function u(){v.removeEventListener("mousemove",l),v.removeEventListener("mouseup",u),y.removeElement(v)}var c=m.event,h=c.target,f=c.clientX,d=f-t.node().getBoundingClientRect().left,p=n.d2p(r._rl[0]),g=n.d2p(r._rl[1]),v=M.coverSlip();v.addEventListener("mousemove",l),v.addEventListener("mouseup",u)})}function a(t,e,r,n){function i(t){return r.l2r(y.constrain(t,n._rl[0],n._rl[1]))}var a=i(n.p2d(n._pixelMin)),o=i(n.p2d(n._pixelMax));window.requestAnimationFrame(function(){g.relayout(e,r._name+".range",[a,o])})}function o(t,e,r,n){function i(t){return y.constrain(t,0,n._width)}function a(t){return y.constrain(t,-o,n._width+o)}var o=A.handleWidth/2,s=i(n.d2p(r._rl[0])),l=i(n.d2p(r._rl[1]));t.select("rect."+A.slideBoxClassName).attr("x",s).attr("width",l-s),t.select("rect."+A.maskMinClassName).attr("width",s),t.select("rect."+A.maskMaxClassName).attr("x",l).attr("width",n._width-l);var u=Math.round(a(s-o))-.5,c=Math.round(a(l-o))+.5;t.select("g."+A.grabberMinClassName).attr("transform","translate("+u+",0.5)"),t.select("g."+A.grabberMaxClassName).attr("transform","translate("+c+",0.5)")}function s(t,e,r,n){var i=t.selectAll("rect."+A.bgClassName).data([0]);i.enter().append("rect").classed(A.bgClassName,!0).attr({x:0,y:0,"shape-rendering":"crispEdges"});var a=n.borderwidth%2==0?n.borderwidth:n.borderwidth-1,o=-n._offsetShift,s=b.crispRound(e,n.borderwidth);i.attr({width:n._width+a,height:n._height+a,transform:"translate("+o+","+o+")",fill:n.bgcolor,stroke:n.bordercolor,"stroke-width":s})}function l(t,e,r,n){var i=e._fullLayout,a=i._topdefs.selectAll("#"+n._clipId).data([0]);a.enter().append("clipPath").attr("id",n._clipId).append("rect").attr({x:0,y:0}),a.select("rect").attr({width:n._width,height:n._height})}function u(t,e,r,n){var i=w.getSubplots(e,r),a=e.calcdata,o=t.selectAll("g."+A.rangePlotClassName).data(i,y.identity);o.enter().append("g").attr("class",function(t){return A.rangePlotClassName+" "+t}).call(b.setClipUrl,n._clipId),o.order(),o.exit().remove();var s;o.each(function(t,i){var o=m.select(this),l=0===i,u=w.getFromId(e,t,"y"),h=u._name,f={data:[],layout:{xaxis:{type:r.type,domain:[0,1],range:n.range.slice(),calendar:r.calendar},width:n._width,height:n._height,margin:{t:0,b:0,l:0,r:0}}};f.layout[h]={type:u.type,domain:[0,1],range:u.range.slice(),calendar:u.calendar},v.supplyDefaults(f);var d=f._fullLayout.xaxis,p=f._fullLayout[h],g={id:t,plotgroup:o,xaxis:d,yaxis:p};l?s=g:(g.mainplot="xy",g.mainplotinfo=s),_.rangePlot(e,g,c(a,t))})}function c(t,e){for(var r=[],n=0;n<t.length;n++){var i=t[n],a=i[0].trace;a.xaxis+a.yaxis===e&&r.push(i)}return r}function h(t,e,r,n){var i=t.selectAll("rect."+A.maskMinClassName).data([0]);i.enter().append("rect").classed(A.maskMinClassName,!0).attr({x:0,y:0}).attr("shape-rendering","crispEdges"),i.attr("height",n._height).call(x.fill,A.maskColor);var a=t.selectAll("rect."+A.maskMaxClassName).data([0]);a.enter().append("rect").classed(A.maskMaxClassName,!0).attr("y",0).attr("shape-rendering","crispEdges"),a.attr("height",n._height).call(x.fill,A.maskColor)}function f(t,e,r,n){if(!e._context.staticPlot){var i=t.selectAll("rect."+A.slideBoxClassName).data([0]);i.enter().append("rect").classed(A.slideBoxClassName,!0).attr("y",0).attr("cursor",A.slideBoxCursor).attr("shape-rendering","crispEdges"),i.attr({height:n._height,fill:A.slideBoxFill})}}function d(t,e,r,n){var i=t.selectAll("g."+A.grabberMinClassName).data([0]);i.enter().append("g").classed(A.grabberMinClassName,!0);var a=t.selectAll("g."+A.grabberMaxClassName).data([0]);a.enter().append("g").classed(A.grabberMaxClassName,!0);var o={x:0,width:A.handleWidth,rx:A.handleRadius,fill:x.background,stroke:x.defaultLine,"stroke-width":A.handleStrokeWidth,"shape-rendering":"crispEdges"},s={y:Math.round(n._height/4),height:Math.round(n._height/2)},l=i.selectAll("rect."+A.handleMinClassName).data([0]);l.enter().append("rect").classed(A.handleMinClassName,!0).attr(o),l.attr(s);var u=a.selectAll("rect."+A.handleMaxClassName).data([0]);if(u.enter().append("rect").classed(A.handleMaxClassName,!0).attr(o),u.attr(s),!e._context.staticPlot){var c={width:A.grabAreaWidth,x:0,y:0,fill:A.grabAreaFill,cursor:A.grabAreaCursor},h=i.selectAll("rect."+A.grabAreaMinClassName).data([0]);h.enter().append("rect").classed(A.grabAreaMinClassName,!0).attr(c),h.attr("height",n._height);var f=a.selectAll("rect."+A.grabAreaMaxClassName).data([0]);f.enter().append("rect").classed(A.grabAreaMaxClassName,!0).attr(c),f.attr("height",n._height)}}function p(t){for(var e=t._fullLayout._pushmargin||{},r=Object.keys(e),n=0;n<r.length;n++){var i=r[n];-1!==i.indexOf(A.name)&&v.autoMargin(t,i)}}var m=t("d3"),g=t("../../plotly"),v=t("../../plots/plots"),y=t("../../lib"),b=t("../drawing"),x=t("../color"),_=t("../../plots/cartesian"),w=t("../../plots/cartesian/axes"),M=t("../dragelement"),k=t("../../lib/setcursor"),A=t("./constants");e.exports=function(t){function e(t){return t._name}var r=t._fullLayout,a=n(r),c=r._infolayer.selectAll("g."+A.containerClassName).data(a,e);c.enter().append("g").classed(A.containerClassName,!0).attr("pointer-events","all"),c.exit().each(function(t){var e=m.select(this),n=t[A.name];e.remove(),r._topdefs.select("#"+n._clipId).remove()}),c.exit().size()&&p(t),0!==a.length&&c.each(function(e){var n=m.select(this),a=e[A.name],c=r[w.id2name(e.anchor)],p=r.margin,g=r._size,y=e.domain,b=c.domain,x=(e._boundingBox||{}).height||0;a._id=A.name+e._id,a._clipId=a._id+"-"+r._uid,a._width=g.w*(y[1]-y[0]),a._height=(r.height-p.b-p.t)*a.thickness,a._offsetShift=Math.floor(a.borderwidth/2);var _=Math.round(p.l+g.w*y[0]),M=Math.round(p.t+g.h*(1-b[0])+x+a._offsetShift+A.extraPad);n.attr("transform","translate("+_+","+M+")");var k=e.r2l(a.range[0]),T=e.r2l(a.range[1]),S=T-k;a.p2d=function(t){return t/a._width*S+k},a.d2p=function(t){return(t-k)/S*a._width},a._rl=[k,T],n.call(s,t,e,a).call(l,t,e,a).call(u,t,e,a).call(h,t,e,a).call(f,t,e,a).call(d,t,e,a),i(n,t,e,a),o(n,t,e,a),v.autoMargin(t,a._id,{x:y[0],y:b[0],l:0,r:0,t:0,b:a._height+p.b+x,pad:A.extraPad+2*a._offsetShift})})}},{"../../lib":728,"../../lib/setcursor":746,"../../plotly":767,"../../plots/cartesian":782,"../../plots/cartesian/axes":772,"../../plots/plots":831,"../color":604,"../dragelement":625,"../drawing":628,"./constants":677,d3:122}],680:[function(t,e,r){"use strict";e.exports={moduleType:"component",name:"rangeslider",schema:{subplots:{xaxis:{rangeslider:t("./attributes")}}},layoutAttributes:t("./attributes"),handleDefaults:t("./defaults"),calcAutorange:t("./calc_autorange"),draw:t("./draw")}},{"./attributes":675,"./calc_autorange":676,"./defaults":678,"./draw":679}],681:[function(t,e,r){"use strict";var n=t("../annotations/attributes"),i=t("../../traces/scatter/attributes").line,a=t("../drawing/attributes").dash,o=t("../../lib/extend").extendFlat;e.exports={_isLinkedToArray:"shape",visible:{valType:"boolean",dflt:!0,editType:"calcIfAutorange"},type:{valType:"enumerated",values:["circle","rect","path","line"],editType:"calcIfAutorange"},layer:{valType:"enumerated",values:["below","above"],dflt:"above",editType:"arraydraw"},xref:o({},n.xref,{}),x0:{valType:"any",editType:"calcIfAutorange"},x1:{valType:"any",editType:"calcIfAutorange"},yref:o({},n.yref,{}),y0:{valType:"any",editType:"calcIfAutorange"},y1:{valType:"any",editType:"calcIfAutorange"},path:{valType:"string",editType:"calcIfAutorange"},opacity:{valType:"number",min:0,max:1,dflt:1,editType:"arraydraw"},line:{color:o({},i.color,{editType:"arraydraw"}),width:o({},i.width,{editType:"calcIfAutorange"}),dash:o({},a,{editType:"arraydraw"}),editType:"calcIfAutorange"},fillcolor:{valType:"color",dflt:"rgba(0,0,0,0)",editType:"arraydraw"},editType:"arraydraw"}},{"../../lib/extend":717,"../../traces/scatter/attributes":1031,"../annotations/attributes":587,"../drawing/attributes":627}],682:[function(t,e,r){"use strict";function n(t,e,r,n,i){var a="category"===t.type?t.r2c:t.d2c;if(void 0!==e)return[a(e),a(r)];if(n){var l,u,c,h,f,d=1/0,p=-1/0,m=n.match(o.segmentRE);for("date"===t.type&&(a=s.decodeDate(a)),l=0;l<m.length;l++)u=m[l],void 0!==(c=i[u.charAt(0)].drawn)&&(!(h=m[l].substr(1).match(o.paramRE))||h.length<c||(f=a(h[c]),f<d&&(d=f),f>p&&(p=f)));return p>=d?[d,p]:void 0}}var i=t("../../lib"),a=t("../../plots/cartesian/axes"),o=t("./constants"),s=t("./helpers");e.exports=function(t){var e=t._fullLayout,r=i.filterVisible(e.shapes);if(r.length&&t._fullData.length)for(var s=0;s<r.length;s++){var l,u,c=r[s],h=c.line.width/2;"paper"!==c.xref&&(l=a.getFromId(t,c.xref),(u=n(l,c.x0,c.x1,c.path,o.paramIsX))&&a.expand(l,u,{ppad:h})),"paper"!==c.yref&&(l=a.getFromId(t,c.yref),(u=n(l,c.y0,c.y1,c.path,o.paramIsY))&&a.expand(l,u,{ppad:h}))}}},{"../../lib":728,"../../plots/cartesian/axes":772,"./constants":683,"./helpers":686}],683:[function(t,e,r){"use strict";e.exports={segmentRE:/[MLHVQCTSZ][^MLHVQCTSZ]*/g,paramRE:/[^\s,]+/g,paramIsX:{M:{0:!0,drawn:0},L:{0:!0,drawn:0},H:{0:!0,drawn:0},V:{},Q:{0:!0,2:!0,drawn:2},C:{0:!0,2:!0,4:!0,drawn:4},T:{0:!0,drawn:0},S:{0:!0,2:!0,drawn:2},Z:{}},paramIsY:{M:{1:!0,drawn:1},L:{1:!0,drawn:1},H:{},V:{0:!0,drawn:0},Q:{1:!0,3:!0,drawn:3},C:{1:!0,3:!0,5:!0,drawn:5},T:{1:!0,drawn:1},S:{1:!0,3:!0,drawn:5},Z:{}},numParams:{M:2,L:2,H:1,V:1,Q:4,C:6,T:2,S:4,Z:0}}},{}],684:[function(t,e,r){"use strict";var n=t("../../plots/array_container_defaults"),i=t("./shape_defaults");e.exports=function(t,e){n(t,e,{name:"shapes",handleItemDefaults:i})}},{"../../plots/array_container_defaults":769,"./shape_defaults":688}],685:[function(t,e,r){"use strict";function n(t){var e=t._fullLayout;e._shapeUpperLayer.selectAll("path").remove(),e._shapeLowerLayer.selectAll("path").remove(),e._shapeSubplotLayers.selectAll("path").remove();for(var r=0;r<e.shapes.length;r++)e.shapes[r].visible&&i(t,r)}function i(t,e){function r(r){var n={"data-index":e,"fill-rule":"evenodd",d:o(t,i)},s=i.line.width?i.line.color:"rgba(0,0,0,0)",l=r.append("path").attr(n).style("opacity",i.opacity).call(f.stroke,s).call(f.fill,i.fillcolor).call(d.dashLine,i.line.dash,i.line.width),u=(i.xref+i.yref).replace(/paper/g,"");l.call(d.setClipUrl,u?"clip"+t._fullLayout._uid+u:null),t._context.edits.shapePosition&&a(t,l,i,e)}t._fullLayout._paper.selectAll('.shapelayer [data-index="'+e+'"]').remove();var n=(t.layout.shapes||[])[e],i=t._fullLayout.shapes[e];if(n&&!1!==i.visible)if("below"!==i.layer)r(t._fullLayout._shapeUpperLayer);else if("paper"===i.xref||"paper"===i.yref)r(t._fullLayout._shapeLowerLayer);else{var s=t._fullLayout._plots[i.xref+i.yref];if(s){var l=s.mainplotinfo||s;r(l.shapelayer)}else r(t._fullLayout._shapeLowerLayer)}}function a(t,e,r,n){function i(t){var r=Z.right-Z.left,n=Z.bottom-Z.top,i=t.clientX-Z.left,a=t.clientY-Z.top,o=r>Y&&n>W&&!t.shiftKey?p.getCursor(i/r,1-a/n):"move";m(e,o),G=o.split("-")[0]}function a(e){N=h.getFromId(t,r.xref),B=h.getFromId(t,r.yref),U=v.getDataToPixel(t,N),V=v.getDataToPixel(t,B,!0),H=v.getPixelToData(t,N),q=v.getPixelToData(t,B,!0);var a="shapes["+n+"]";"path"===r.type?(F=r.path,j=a+".path"):(g=U(r.x0),y=V(r.y0),b=U(r.x1),x=V(r.y1),_=a+".x0",w=a+".y0",M=a+".x1",k=a+".y1"),g<b?(S=g,I=a+".x0",O="x0",E=b,z=a+".x1",R="x1"):(S=b,I=a+".x1",O="x1",E=g,z=a+".x0",R="x0"),y<x?(A=y,L=a+".y0",D="y0",T=x,C=a+".y1",P="y1"):(A=x,L=a+".y1",D="y1",T=y,C=a+".y0",P="y0"),d={},i(e),X.moveFn="move"===G?c:f}function s(r){m(e),r&&u.relayout(t,d)}function c(n,i){if("path"===r.type){var a=function(t){return H(U(t)+n)};N&&"date"===N.type&&(a=v.encodeDate(a));var s=function(t){return q(V(t)+i)};B&&"date"===B.type&&(s=v.encodeDate(s)),r.path=l(F,a,s),d[j]=r.path}else d[_]=r.x0=H(g+n),d[w]=r.y0=q(y+i),d[M]=r.x1=H(b+n),d[k]=r.y1=q(x+i);e.attr("d",o(t,r))}function f(n,i){if("path"===r.type){var a=function(t){return H(U(t)+n)};N&&"date"===N.type&&(a=v.encodeDate(a));var s=function(t){return q(V(t)+i)};B&&"date"===B.type&&(s=v.encodeDate(s)),r.path=l(F,a,s),d[j]=r.path}else{var u=~G.indexOf("n")?A+i:A,c=~G.indexOf("s")?T+i:T,h=~G.indexOf("w")?S+n:S,f=~G.indexOf("e")?E+n:E;c-u>W&&(d[L]=r[D]=q(u),d[C]=r[P]=q(c)),f-h>Y&&(d[I]=r[O]=H(h),d[z]=r[R]=H(f))}e.attr("d",o(t,r))}var d,g,y,b,x,_,w,M,k,A,T,S,E,L,C,I,z,D,P,O,R,F,j,N,B,U,V,H,q,G,Y=10,W=10,X={element:e.node(),gd:t,prepFn:a,doneFn:s},Z=X.element.getBoundingClientRect();p.init(X),e.node().onmousemove=i}function o(t,e){var r,n,i,a,o=e.type,l=h.getFromId(t,e.xref),u=h.getFromId(t,e.yref),c=t._fullLayout._size;if(l?(r=v.shapePositionToRange(l),n=function(t){return l._offset+l.r2p(r(t,!0))}):n=function(t){return c.l+c.w*t},u?(i=v.shapePositionToRange(u),a=function(t){return u._offset+u.r2p(i(t,!0))}):a=function(t){return c.t+c.h*(1-t)},"path"===o)return l&&"date"===l.type&&(n=v.decodeDate(n)),u&&"date"===u.type&&(a=v.decodeDate(a)),s(e.path,n,a);var f=n(e.x0),d=n(e.x1),p=a(e.y0),m=a(e.y1);if("line"===o)return"M"+f+","+p+"L"+d+","+m;if("rect"===o)return"M"+f+","+p+"H"+d+"V"+m+"H"+f+"Z";var g=(f+d)/2,y=(p+m)/2,b=Math.abs(g-f),x=Math.abs(y-p),_="A"+b+","+x,w=g+b+","+y;return"M"+w+_+" 0 1,1 "+g+","+(y-x)+_+" 0 0,1 "+w+"Z"}function s(t,e,r){return t.replace(g.segmentRE,function(t){var n=0,i=t.charAt(0),a=g.paramIsX[i],o=g.paramIsY[i],s=g.numParams[i],l=t.substr(1).replace(g.paramRE,function(t){return a[n]?t=e(t):o[n]&&(t=r(t)),n++,n>s&&(t="X"),t});return n>s&&(l=l.replace(/[\s,]*X.*/,""),c.log("Ignoring extra params in segment "+t)),i+l})}function l(t,e,r){return t.replace(g.segmentRE,function(t){var n=0,i=t.charAt(0),a=g.paramIsX[i],o=g.paramIsY[i],s=g.numParams[i];return i+t.substr(1).replace(g.paramRE,function(t){return n>=s?t:(a[n]?t=e(t):o[n]&&(t=r(t)),n++,t)})})}var u=t("../../plotly"),c=t("../../lib"),h=t("../../plots/cartesian/axes"),f=t("../color"),d=t("../drawing"),p=t("../dragelement"),m=t("../../lib/setcursor"),g=t("./constants"),v=t("./helpers");e.exports={draw:n,drawOne:i}},{"../../lib":728,"../../lib/setcursor":746,"../../plotly":767,"../../plots/cartesian/axes":772,"../color":604,"../dragelement":625,"../drawing":628,"./constants":683,"./helpers":686}],686:[function(t,e,r){"use strict";r.rangeToShapePosition=function(t){return"log"===t.type?t.r2d:function(t){return t}},r.shapePositionToRange=function(t){return"log"===t.type?t.d2r:function(t){return t}},r.decodeDate=function(t){return function(e){return e.replace&&(e=e.replace("_"," ")),t(e)}},r.encodeDate=function(t){return function(e){return t(e).replace(" ","_")}},r.getDataToPixel=function(t,e,n){var i,a=t._fullLayout._size;if(e){var o=r.shapePositionToRange(e);i=function(t){return e._offset+e.r2p(o(t,!0))},"date"===e.type&&(i=r.decodeDate(i))}else i=n?function(t){return a.t+a.h*(1-t)}:function(t){return a.l+a.w*t};return i},r.getPixelToData=function(t,e,n){var i,a=t._fullLayout._size;if(e){var o=r.rangeToShapePosition(e);i=function(t){return o(e.p2r(t-e._offset))}}else i=n?function(t){return 1-(t-a.t)/a.h}:function(t){return(t-a.l)/a.w};return i}},{}],687:[function(t,e,r){"use strict";var n=t("./draw");e.exports={moduleType:"component",name:"shapes",layoutAttributes:t("./attributes"),supplyLayoutDefaults:t("./defaults"),calcAutorange:t("./calc_autorange"),draw:n.draw,drawOne:n.drawOne}},{"./attributes":681,"./calc_autorange":682,"./defaults":684,"./draw":685}],688:[function(t,e,r){"use strict";var n=t("../../lib"),i=t("../../plots/cartesian/axes"),a=t("./attributes"),o=t("./helpers");e.exports=function(t,e,r,s,l){function u(r,i){return n.coerce(t,e,a,r,i)}if(s=s||{},l=l||{},!u("visible",!l.itemIsNotPlainObject))return e;u("layer"),u("opacity"),u("fillcolor"),u("line.color"),u("line.width"),u("line.dash");for(var c=t.path?"path":"rect",h=u("type",c),f=["x","y"],d=0;d<2;d++){var p=f[d],m={_fullLayout:r},g=i.coerceRef(t,e,m,p,"","paper");if("path"!==h){var v,y,b;"paper"!==g?(v=i.getFromId(m,g),b=o.rangeToShapePosition(v),y=o.shapePositionToRange(v)):y=b=n.identity;var x=p+"0",_=p+"1",w=t[x],M=t[_];t[x]=y(t[x],!0),t[_]=y(t[_],!0),i.coercePosition(e,m,u,g,x,.25),i.coercePosition(e,m,u,g,_,.75),e[x]=b(e[x]),e[_]=b(e[_]),t[x]=w,t[_]=M}}return"path"===h?u("path"):n.noneOrAll(t,e,["x0","x1","y0","y1"]),e}},{"../../lib":728,"../../plots/cartesian/axes":772,"./attributes":681,"./helpers":686}],689:[function(t,e,r){"use strict";var n=t("../../plots/font_attributes"),i=t("../../plots/pad_attributes"),a=t("../../lib/extend").extendDeepAll,o=t("../../plot_api/edit_types").overrideAll,s=t("../../plots/animation_attributes"),l=t("./constants"),u={_isLinkedToArray:"step",method:{valType:"enumerated",values:["restyle","relayout","animate","update","skip"],dflt:"restyle"},args:{valType:"info_array",freeLength:!0,items:[{valType:"any"},{valType:"any"},{valType:"any"}]},label:{valType:"string"},value:{valType:"string"},execute:{valType:"boolean",dflt:!0}};e.exports=o({_isLinkedToArray:"slider",visible:{valType:"boolean",dflt:!0},active:{valType:"number",min:0,dflt:0},steps:u,lenmode:{valType:"enumerated",values:["fraction","pixels"],dflt:"fraction"},len:{valType:"number",min:0,dflt:1},x:{valType:"number",min:-2,max:3,dflt:0},pad:a({},i,{},{t:{dflt:20}}),xanchor:{valType:"enumerated",values:["auto","left","center","right"],dflt:"left"},y:{valType:"number",min:-2,max:3,dflt:0},yanchor:{valType:"enumerated",values:["auto","top","middle","bottom"],dflt:"top"},transition:{duration:{valType:"number",min:0,dflt:150},easing:{valType:"enumerated",values:s.transition.easing.values,dflt:"cubic-in-out"}},currentvalue:{visible:{valType:"boolean",dflt:!0},xanchor:{valType:"enumerated",values:["left","center","right"],dflt:"left"},offset:{valType:"number",dflt:10},prefix:{valType:"string"},suffix:{valType:"string"},font:n({})},font:n({}),activebgcolor:{valType:"color",dflt:l.gripBgActiveColor},bgcolor:{valType:"color",dflt:l.railBgColor},bordercolor:{valType:"color",dflt:l.railBorderColor},borderwidth:{valType:"number",min:0,dflt:l.railBorderWidth},ticklen:{valType:"number",min:0,dflt:l.tickLength},tickcolor:{valType:"color",dflt:l.tickColor},tickwidth:{valType:"number",min:0,dflt:1},minorticklen:{valType:"number",min:0,dflt:l.minorTickLength}},"arraydraw","from-root")},{"../../lib/extend":717,"../../plot_api/edit_types":756,"../../plots/animation_attributes":768,"../../plots/font_attributes":796,"../../plots/pad_attributes":830,"./constants":690}],690:[function(t,e,r){"use strict";e.exports={name:"sliders",containerClassName:"slider-container",groupClassName:"slider-group",inputAreaClass:"slider-input-area",railRectClass:"slider-rail-rect",railTouchRectClass:"slider-rail-touch-rect",gripRectClass:"slider-grip-rect",tickRectClass:"slider-tick-rect",inputProxyClass:"slider-input-proxy",labelsClass:"slider-labels",labelGroupClass:"slider-label-group",labelClass:"slider-label",currentValueClass:"slider-current-value",railHeight:5,menuIndexAttrName:"slider-active-index",autoMarginIdRoot:"slider-",minWidth:30,minHeight:30,textPadX:40,arrowOffsetX:4,railRadius:2,railWidth:5,railBorder:4,railBorderWidth:1,railBorderColor:"#bec8d9",railBgColor:"#f8fafc",railInset:8,stepInset:10,gripRadius:10,gripWidth:20,gripHeight:20,gripBorder:20,gripBorderWidth:1,gripBorderColor:"#bec8d9",gripBgColor:"#f6f8fa",gripBgActiveColor:"#dbdde0",labelPadding:8,labelOffset:0,tickWidth:1,tickColor:"#333",tickOffset:25,tickLength:7,minorTickOffset:25,minorTickColor:"#333",minorTickLength:4,currentValuePadding:8,currentValueInset:0}},{}],691:[function(t,e,r){"use strict";function n(t,e,r){function n(r,n){return a.coerce(t,e,s,r,n)}n("visible",i(t,e).length>0)&&(n("active"),n("x"),n("y"),a.noneOrAll(t,e,["x","y"]),n("xanchor"),n("yanchor"),n("len"),n("lenmode"),n("pad.t"),n("pad.r"),n("pad.b"),n("pad.l"),a.coerceFont(n,"font",r.font),n("currentvalue.visible")&&(n("currentvalue.xanchor"),n("currentvalue.prefix"),n("currentvalue.suffix"),n("currentvalue.offset"),a.coerceFont(n,"currentvalue.font",e.font)),n("transition.duration"),n("transition.easing"),n("bgcolor"),n("activebgcolor"),n("bordercolor"),n("borderwidth"),n("ticklen"),n("tickwidth"),n("tickcolor"),n("minorticklen"))}function i(t,e){function r(t,e){return a.coerce(n,i,c,t,e)}for(var n,i,o=t.steps||[],s=e.steps=[],l=0;l<o.length;l++)n=o[l],i={},r("method"),a.isPlainObject(n)&&("skip"===i.method||Array.isArray(n.args))&&(r("args"),r("label","step-"+l),r("value",i.label),r("execute"),s.push(i));return s}var a=t("../../lib"),o=t("../../plots/array_container_defaults"),s=t("./attributes"),l=t("./constants"),u=l.name,c=s.steps;e.exports=function(t,e){o(t,e,{name:u,handleItemDefaults:n})}},{"../../lib":728,"../../plots/array_container_defaults":769,"./attributes":689,"./constants":690}],692:[function(t,e,r){"use strict";function n(t,e){for(var r=t[E.name],n=[],i=0;i<r.length;i++){var a=r[i];a.visible&&a.steps.length&&(a.gd=e,n.push(a))}return n}function i(t){return t._index}function a(t,e){var r=A.tester.selectAll("g."+E.labelGroupClass).data(e.steps);r.enter().append("g").classed(E.labelGroupClass,!0);var n=0,i=0;r.each(function(t){var r=w.select(this),a=u(r,{step:t},e),o=a.node();if(o){var s=A.bBox(o);i=Math.max(i,s.height),n=Math.max(n,s.width)}}),r.remove(),e.inputAreaWidth=Math.max(E.railWidth,E.gripHeight);var a=t._fullLayout._size;e.lx=a.l+a.w*e.x,e.ly=a.t+a.h*(1-e.y),"fraction"===e.lenmode?e.outerLength=Math.round(a.w*e.len):e.outerLength=e.len,e.lenPad=Math.round(.5*E.gripWidth),e.inputAreaStart=0,e.inputAreaLength=Math.round(e.outerLength-e.pad.l-e.pad.r);var o=e.inputAreaLength-2*E.stepInset,l=o/(e.steps.length-1),c=n+E.labelPadding;if(e.labelStride=Math.max(1,Math.ceil(c/l)),e.labelHeight=i,e.currentValueMaxWidth=0,e.currentValueHeight=0,e.currentValueTotalHeight=0,e.currentValueMaxLines=1,e.currentvalue.visible){var h=A.tester.append("g");r.each(function(t){var r=s(h,e,t.label),n=r.node()&&A.bBox(r.node())||{width:0,height:0},i=T.lineCount(r);e.currentValueMaxWidth=Math.max(e.currentValueMaxWidth,Math.ceil(n.width)),e.currentValueHeight=Math.max(e.currentValueHeight,Math.ceil(n.height)),e.currentValueMaxLines=Math.max(e.currentValueMaxLines,i)}),e.currentValueTotalHeight=e.currentValueHeight+e.currentvalue.offset,h.remove()}e.height=e.currentValueTotalHeight+E.tickOffset+e.ticklen+E.labelOffset+e.labelHeight+e.pad.t+e.pad.b;var f="left";S.isRightAnchor(e)&&(e.lx-=e.outerLength,f="right"),S.isCenterAnchor(e)&&(e.lx-=e.outerLength/2,f="center");var d="top";S.isBottomAnchor(e)&&(e.ly-=e.height,d="bottom"),S.isMiddleAnchor(e)&&(e.ly-=e.height/2,d="middle"),e.outerLength=Math.ceil(e.outerLength),e.height=Math.ceil(e.height),e.lx=Math.round(e.lx),e.ly=Math.round(e.ly),M.autoMargin(t,E.autoMarginIdRoot+e._index,{x:e.x,y:e.y,l:e.outerLength*({right:1,center:.5}[f]||0),r:e.outerLength*({left:1,center:.5}[f]||0),b:e.height*({top:1,middle:.5}[d]||0),t:e.height*({bottom:1,middle:.5}[d]||0)})}function o(t,e,r){r.active>=r.steps.length&&(r.active=0),e.call(s,r).call(x,r).call(c,r).call(p,r).call(b,t,r).call(l,t,r),A.setTranslate(e,r.lx+r.pad.l,r.ly+r.pad.t),e.call(g,r,r.active/(r.steps.length-1),!1),e.call(s,r)}function s(t,e,r){if(e.currentvalue.visible){var n,i,a=t.selectAll("text").data([0]);switch(e.currentvalue.xanchor){case"right":n=e.inputAreaLength-E.currentValueInset-e.currentValueMaxWidth,i="left";break;case"center":n=.5*e.inputAreaLength,i="middle";break;default:n=E.currentValueInset,i="left"}a.enter().append("text").classed(E.labelClass,!0).classed("user-select-none",!0).attr({"text-anchor":i,"data-notex":1});var o=e.currentvalue.prefix?e.currentvalue.prefix:"";if("string"==typeof r)o+=r;else{o+=e.steps[e.active].label}e.currentvalue.suffix&&(o+=e.currentvalue.suffix),a.call(A.font,e.currentvalue.font).text(o).call(T.convertToTspans,e.gd);var s=T.lineCount(a),l=(e.currentValueMaxLines+1-s)*e.currentvalue.font.size*L;return T.positionText(a,n,l),a}}function l(t,e,r){var n=t.selectAll("rect."+E.gripRectClass).data([0]);n.enter().append("rect").classed(E.gripRectClass,!0).call(d,e,t,r).style("pointer-events","all"),n.attr({width:E.gripWidth,height:E.gripHeight,rx:E.gripRadius,ry:E.gripRadius}).call(k.stroke,r.bordercolor).call(k.fill,r.bgcolor).style("stroke-width",r.borderwidth+"px")}function u(t,e,r){var n=t.selectAll("text").data([0]);return n.enter().append("text").classed(E.labelClass,!0).classed("user-select-none",!0).attr({"text-anchor":"middle","data-notex":1}),n.call(A.font,r.font).text(e.step.label).call(T.convertToTspans,r.gd),n}function c(t,e){var r=t.selectAll("g."+E.labelsClass).data([0]);r.enter().append("g").classed(E.labelsClass,!0);var n=r.selectAll("g."+E.labelGroupClass).data(e.labelSteps);n.enter().append("g").classed(E.labelGroupClass,!0),n.exit().remove(),n.each(function(t){var r=w.select(this);r.call(u,t,e),A.setTranslate(r,v(e,t.fraction),E.tickOffset+e.ticklen+e.font.size*L+E.labelOffset+e.currentValueTotalHeight)})}function h(t,e,r,n,i){var a=Math.round(n*(r.steps.length-1));a!==r.active&&f(t,e,r,a,!0,i)}function f(t,e,r,n,i,a){var o=r.active;r._input.active=r.active=n;var l=r.steps[r.active];e.call(g,r,r.active/(r.steps.length-1),a),e.call(s,r),t.emit("plotly_sliderchange",{slider:r,step:r.steps[r.active],interaction:i,previousActive:o}),l&&l.method&&i&&(e._nextMethod?(e._nextMethod.step=l,e._nextMethod.doCallback=i,e._nextMethod.doTransition=a):(e._nextMethod={step:l,doCallback:i,doTransition:a},e._nextMethodRaf=window.requestAnimationFrame(function(){var r=e._nextMethod.step;r.method&&(r.execute&&M.executeAPICommand(t,r.method,r.args),e._nextMethod=null,e._nextMethodRaf=null)})))}function d(t,e,r){function n(){return r.data()[0]}var i=r.node(),a=w.select(e);t.on("mousedown",function(){var t=n();e.emit("plotly_sliderstart",{slider:t});var o=r.select("."+E.gripRectClass);w.event.stopPropagation(),w.event.preventDefault(),o.call(k.fill,t.activebgcolor);var s=y(t,w.mouse(i)[0]);h(e,r,t,s,!0),t._dragging=!0,a.on("mousemove",function(){var t=n(),a=y(t,w.mouse(i)[0]);h(e,r,t,a,!1)}),a.on("mouseup",function(){var t=n();t._dragging=!1,o.call(k.fill,t.bgcolor),a.on("mouseup",null),a.on("mousemove",null),e.emit("plotly_sliderend",{slider:t,step:t.steps[t.active]})})})}function p(t,e){var r=t.selectAll("rect."+E.tickRectClass).data(e.steps);r.enter().append("rect").classed(E.tickRectClass,!0),r.exit().remove(),r.attr({width:e.tickwidth+"px","shape-rendering":"crispEdges"}),r.each(function(t,r){var n=r%e.labelStride==0,i=w.select(this);i.attr({height:n?e.ticklen:e.minorticklen}).call(k.fill,e.tickcolor),A.setTranslate(i,v(e,r/(e.steps.length-1))-.5*e.tickwidth,(n?E.tickOffset:E.minorTickOffset)+e.currentValueTotalHeight)})}function m(t){t.labelSteps=[];for(var e=t.steps.length,r=0;r<e;r+=t.labelStride)t.labelSteps.push({fraction:r/(e-1),step:t.steps[r]})}function g(t,e,r,n){var i=t.select("rect."+E.gripRectClass),a=v(e,r);if(!e._invokingCommand){var o=i;n&&e.transition.duration>0&&(o=o.transition().duration(e.transition.duration).ease(e.transition.easing)),o.attr("transform","translate("+(a-.5*E.gripWidth)+","+e.currentValueTotalHeight+")")}}function v(t,e){return t.inputAreaStart+E.stepInset+(t.inputAreaLength-2*E.stepInset)*Math.min(1,Math.max(0,e))}function y(t,e){return Math.min(1,Math.max(0,(e-E.stepInset-t.inputAreaStart)/(t.inputAreaLength-2*E.stepInset-2*t.inputAreaStart)))}function b(t,e,r){var n=t.selectAll("rect."+E.railTouchRectClass).data([0]);n.enter().append("rect").classed(E.railTouchRectClass,!0).call(d,e,t,r).style("pointer-events","all"),n.attr({width:r.inputAreaLength,height:Math.max(r.inputAreaWidth,E.tickOffset+r.ticklen+r.labelHeight)}).call(k.fill,r.bgcolor).attr("opacity",0),A.setTranslate(n,0,r.currentValueTotalHeight)}function x(t,e){var r=t.selectAll("rect."+E.railRectClass).data([0]);r.enter().append("rect").classed(E.railRectClass,!0);var n=e.inputAreaLength-2*E.railInset;r.attr({width:n,height:E.railWidth,rx:E.railRadius,ry:E.railRadius,"shape-rendering":"crispEdges"}).call(k.stroke,e.bordercolor).call(k.fill,e.bgcolor).style("stroke-width",e.borderwidth+"px"),A.setTranslate(r,E.railInset,.5*(e.inputAreaWidth-E.railWidth)+e.currentValueTotalHeight)}function _(t){for(var e=t._fullLayout._pushmargin||{},r=Object.keys(e),n=0;n<r.length;n++){var i=r[n];-1!==i.indexOf(E.autoMarginIdRoot)&&M.autoMargin(t,i)}}var w=t("d3"),M=t("../../plots/plots"),k=t("../color"),A=t("../drawing"),T=t("../../lib/svg_text_utils"),S=t("../legend/anchor_utils"),E=t("./constants"),L=t("../../constants/alignment").LINE_SPACING;e.exports=function(t){var e=t._fullLayout,r=n(e,t),s=e._infolayer.selectAll("g."+E.containerClassName).data(r.length>0?[0]:[]);if(s.enter().append("g").classed(E.containerClassName,!0).style("cursor","ew-resize"),s.exit().remove(),s.exit().size()&&_(t),0!==r.length){var l=s.selectAll("g."+E.groupClassName).data(r,i);l.enter().append("g").classed(E.groupClassName,!0),l.exit().each(function(e){w.select(this).remove(),e._commandObserver.remove(),delete e._commandObserver,M.autoMargin(t,E.autoMarginIdRoot+e._index)});for(var u=0;u<r.length;u++){var c=r[u];a(t,c)}l.each(function(e){if(!(e.steps.length<2)){var r=w.select(this);m(e),M.manageCommandObserver(t,e,e.steps,function(e){var n=r.data()[0];n.active!==e.index&&(n._dragging||f(t,r,n,e.index,!1,!0))}),o(t,w.select(this),e)}})}}},{"../../constants/alignment":701,"../../lib/svg_text_utils":750,"../../plots/plots":831,"../color":604,"../drawing":628,"../legend/anchor_utils":654,"./constants":690,d3:122}],693:[function(t,e,r){"use strict";var n=t("./constants");e.exports={moduleType:"component",name:n.name,layoutAttributes:t("./attributes"),supplyLayoutDefaults:t("./defaults"),draw:t("./draw")}},{"./attributes":689,"./constants":690,"./defaults":691,"./draw":692}],694:[function(t,e,r){"use strict";var n=t("d3"),i=t("fast-isnumeric"),a=t("../../plotly"),o=t("../../plots/plots"),s=t("../../lib"),l=t("../drawing"),u=t("../color"),c=t("../../lib/svg_text_utils"),h=t("../../constants/interactions"),f=/Click to enter .+ title/;(e.exports={}).draw=function(t,e,r){function d(t){s.syncOrAsync([p,m],t)}function p(e){
return e.attr("transform",M?"rotate("+[M.rotate,w.x,w.y]+") translate(0, "+M.offset+")":null),e.style({"font-family":T,"font-size":n.round(S,2)+"px",fill:u.rgb(E),opacity:L*u.opacity(E),"font-weight":o.fontWeight}).attr(w).call(c.convertToTspans,t),o.previousPromises(t)}function m(t){var e=n.select(t.node().parentNode);if(_&&_.selection&&_.side&&I){e.attr("transform",null);var r=0,a={left:"right",right:"left",top:"bottom",bottom:"top"}[_.side],o=-1!==["left","top"].indexOf(_.side)?-1:1,u=i(_.pad)?_.pad:2,c=l.bBox(e.node()),h={left:0,top:0,right:A.width,bottom:A.height},f=_.maxShift||(h[_.side]-c[_.side])*("left"===_.side||"top"===_.side?-1:1);if(f<0)r=f;else{var d=_.offsetLeft||0,p=_.offsetTop||0;c.left-=d,c.right-=d,c.top-=p,c.bottom-=p,_.selection.each(function(){var t=l.bBox(this);s.bBoxIntersect(c,t,u)&&(r=Math.max(r,o*(t[_.side]-c[a])+u))}),r=Math.min(f,r)}if(r>0||f<0){var m={left:[-r,0],right:[r,0],top:[0,-r],bottom:[0,r]}[_.side];e.attr("transform","translate("+m+")")}}}var g,v=r.propContainer,y=r.propName,b=r.traceIndex,x=r.dfltName,_=r.avoid||{},w=r.attributes,M=r.transform,k=r.containerGroup,A=t._fullLayout,T=v.titlefont.family,S=v.titlefont.size,E=v.titlefont.color,L=1,C=!1,I=v.title.trim();"title"===y?g="titleText":-1!==y.indexOf("axis")?g="axisTitleText":y.indexOf(!0)&&(g="colorbarTitleText");var z=t._context.edits[g];""===I&&(L=0),I.match(f)&&(L=.2,C=!0,z||(I=""));var D=I||z;k||(k=A._infolayer.selectAll(".g-"+e).data([0]),k.enter().append("g").classed("g-"+e,!0));var P=k.selectAll("text").data(D?[0]:[]);if(P.enter().append("text"),P.text(I).attr("class",e),P.exit().remove(),D){P.call(d);var O="Click to enter "+x+" title";z&&(I?P.on(".opacity",null):function(){L=0,C=!0,I=O,P.text(I).on("mouseover.opacity",function(){n.select(this).transition().duration(h.SHOW_PLACEHOLDER).style("opacity",1)}).on("mouseout.opacity",function(){n.select(this).transition().duration(h.HIDE_PLACEHOLDER).style("opacity",0)})}(),P.call(c.makeEditable,{gd:t}).on("edit",function(e){void 0!==b?a.restyle(t,y,e,b):a.relayout(t,y,e)}).on("cancel",function(){this.text(this.attr("data-unformatted")).call(d)}).on("input",function(t){this.text(t||" ").call(c.positionText,w.x,w.y)})),P.classed("js-placeholder",C)}}},{"../../constants/interactions":706,"../../lib":728,"../../lib/svg_text_utils":750,"../../plotly":767,"../../plots/plots":831,"../color":604,"../drawing":628,d3:122,"fast-isnumeric":131}],695:[function(t,e,r){"use strict";var n=t("../../plots/font_attributes"),i=t("../color/attributes"),a=t("../../lib/extend").extendFlat,o=t("../../plot_api/edit_types").overrideAll,s=t("../../plots/pad_attributes"),l={_isLinkedToArray:"button",method:{valType:"enumerated",values:["restyle","relayout","animate","update","skip"],dflt:"restyle"},args:{valType:"info_array",freeLength:!0,items:[{valType:"any"},{valType:"any"},{valType:"any"}]},label:{valType:"string",dflt:""},execute:{valType:"boolean",dflt:!0}};e.exports=o({_isLinkedToArray:"updatemenu",_arrayAttrRegexps:[/^updatemenus\[(0|[1-9][0-9]+)\]\.buttons/],visible:{valType:"boolean"},type:{valType:"enumerated",values:["dropdown","buttons"],dflt:"dropdown"},direction:{valType:"enumerated",values:["left","right","up","down"],dflt:"down"},active:{valType:"integer",min:-1,dflt:0},showactive:{valType:"boolean",dflt:!0},buttons:l,x:{valType:"number",min:-2,max:3,dflt:-.05},xanchor:{valType:"enumerated",values:["auto","left","center","right"],dflt:"right"},y:{valType:"number",min:-2,max:3,dflt:1},yanchor:{valType:"enumerated",values:["auto","top","middle","bottom"],dflt:"top"},pad:a({},s,{}),font:n({}),bgcolor:{valType:"color"},bordercolor:{valType:"color",dflt:i.borderLine},borderwidth:{valType:"number",min:0,dflt:1,editType:"arraydraw"}},"arraydraw","from-root")},{"../../lib/extend":717,"../../plot_api/edit_types":756,"../../plots/font_attributes":796,"../../plots/pad_attributes":830,"../color/attributes":603}],696:[function(t,e,r){"use strict";e.exports={name:"updatemenus",containerClassName:"updatemenu-container",headerGroupClassName:"updatemenu-header-group",headerClassName:"updatemenu-header",headerArrowClassName:"updatemenu-header-arrow",dropdownButtonGroupClassName:"updatemenu-dropdown-button-group",dropdownButtonClassName:"updatemenu-dropdown-button",buttonClassName:"updatemenu-button",itemRectClassName:"updatemenu-item-rect",itemTextClassName:"updatemenu-item-text",menuIndexAttrName:"updatemenu-active-index",autoMarginIdRoot:"updatemenu-",blankHeaderOpts:{label:" "},minWidth:30,minHeight:30,textPadX:24,arrowPadX:16,rx:2,ry:2,textOffsetX:12,textOffsetY:3,arrowOffsetX:4,gapButtonHeader:5,gapButton:2,activeColor:"#F4FAFF",hoverColor:"#F4FAFF",arrowSymbol:{left:"\u25c4",right:"\u25ba",up:"\u25b2",down:"\u25bc"}}},{}],697:[function(t,e,r){"use strict";function n(t,e,r){function n(r,n){return a.coerce(t,e,s,r,n)}n("visible",i(t,e).length>0)&&(n("active"),n("direction"),n("type"),n("showactive"),n("x"),n("y"),a.noneOrAll(t,e,["x","y"]),n("xanchor"),n("yanchor"),n("pad.t"),n("pad.r"),n("pad.b"),n("pad.l"),a.coerceFont(n,"font",r.font),n("bgcolor",r.paper_bgcolor),n("bordercolor"),n("borderwidth"))}function i(t,e){function r(t,e){return a.coerce(n,i,c,t,e)}for(var n,i,o=t.buttons||[],s=e.buttons=[],l=0;l<o.length;l++)n=o[l],i={},r("method"),a.isPlainObject(n)&&("skip"===i.method||Array.isArray(n.args))&&(r("args"),r("label"),r("execute"),i._index=l,s.push(i));return s}var a=t("../../lib"),o=t("../../plots/array_container_defaults"),s=t("./attributes"),l=t("./constants"),u=l.name,c=s.buttons;e.exports=function(t,e){o(t,e,{name:u,handleItemDefaults:n})}},{"../../lib":728,"../../plots/array_container_defaults":769,"./attributes":695,"./constants":696}],698:[function(t,e,r){"use strict";function n(t){for(var e=t[L.name],r=[],n=0;n<e.length;n++){var i=e[n];i.visible&&r.push(i)}return r}function i(t){return t._index}function a(t){return-1==+t.attr(L.menuIndexAttrName)}function o(t,e){return+t.attr(L.menuIndexAttrName)===e._index}function s(t,e,r,n,i,a,o,s){e._input.active=e.active=o,"buttons"===e.type?u(t,n,null,null,e):"dropdown"===e.type&&(i.attr(L.menuIndexAttrName,"-1"),l(t,n,i,a,e),s||u(t,n,i,a,e))}function l(t,e,r,n,i){var a=e.selectAll("g."+L.headerClassName).data([0]);a.enter().append("g").classed(L.headerClassName,!0).style("pointer-events","all");var s=i.active,l=i.buttons[s]||L.blankHeaderOpts,c={y:i.pad.t,yPad:0,x:i.pad.l,xPad:0,index:0},h={width:i.headerWidth,height:i.headerHeight};a.call(f,i,l,t).call(b,i,c,h);var d=e.selectAll("text."+L.headerArrowClassName).data([0]);d.enter().append("text").classed(L.headerArrowClassName,!0).classed("user-select-none",!0).attr("text-anchor","end").call(A.font,i.font).text(L.arrowSymbol[i.direction]),d.attr({x:i.headerWidth-L.arrowOffsetX+i.pad.l,y:i.headerHeight/2+L.textOffsetY+i.pad.t}),a.on("click",function(){r.call(x),r.attr(L.menuIndexAttrName,o(r,i)?-1:String(i._index)),u(t,e,r,n,i)}),a.on("mouseover",function(){a.call(g)}),a.on("mouseout",function(){a.call(v,i)}),A.setTranslate(e,i.lx,i.ly)}function u(t,e,r,n,i){r||(r=e,r.attr("pointer-events","all"));var o=a(r)&&"buttons"!==i.type?[]:i.buttons,l="dropdown"===i.type?L.dropdownButtonClassName:L.buttonClassName,u=r.selectAll("g."+l).data(o),d=u.enter().append("g").classed(l,!0),p=u.exit();"dropdown"===i.type?(d.attr("opacity","0").transition().attr("opacity","1"),p.transition().attr("opacity","0").remove()):p.remove();var y=0,x=0,_=-1!==["up","down"].indexOf(i.direction);"dropdown"===i.type&&(_?x=i.headerHeight+L.gapButtonHeader:y=i.headerWidth+L.gapButtonHeader),"dropdown"===i.type&&"up"===i.direction&&(x=-L.gapButtonHeader+L.gapButton-i.openHeight),"dropdown"===i.type&&"left"===i.direction&&(y=-L.gapButtonHeader+L.gapButton-i.openWidth);var k={x:i.lx+y+i.pad.l,y:i.ly+x+i.pad.t,yPad:L.gapButton,xPad:L.gapButton,index:0},A={l:k.x+i.borderwidth,t:k.y+i.borderwidth};u.each(function(a,o){var l=w.select(this);l.call(f,i,a,t).call(b,i,k),l.on("click",function(){w.event.defaultPrevented||(s(t,i,a,e,r,n,o),a.execute&&M.executeAPICommand(t,a.method,a.args),t.emit("plotly_buttonclicked",{menu:i,button:a,active:i.active}))}),l.on("mouseover",function(){l.call(g)}),l.on("mouseout",function(){l.call(v,i),u.call(m,i)})}),u.call(m,i),_?(A.w=Math.max(i.openWidth,i.headerWidth),A.h=k.y-A.t):(A.w=k.x-A.l,A.h=Math.max(i.openHeight,i.headerHeight)),A.direction=i.direction,n&&(u.size()?c(t,e,r,n,i,A):h(n))}function c(t,e,r,n,i,a){var o,s,l,u=i.direction,c="up"===u||"down"===u,h=i.active;if(c)for(s=0,l=0;l<h;l++)s+=i.heights[l]+L.gapButton;else for(o=0,l=0;l<h;l++)o+=i.widths[l]+L.gapButton;n.enable(a,o,s),n.hbar&&n.hbar.attr("opacity","0").transition().attr("opacity","1"),n.vbar&&n.vbar.attr("opacity","0").transition().attr("opacity","1")}function h(t){var e=!!t.hbar,r=!!t.vbar;e&&t.hbar.transition().attr("opacity","0").each("end",function(){e=!1,r||t.disable()}),r&&t.vbar.transition().attr("opacity","0").each("end",function(){r=!1,e||t.disable()})}function f(t,e,r,n){t.call(d,e).call(p,e,r,n)}function d(t,e){var r=t.selectAll("rect").data([0]);r.enter().append("rect").classed(L.itemRectClassName,!0).attr({rx:L.rx,ry:L.ry,"shape-rendering":"crispEdges"}),r.call(k.stroke,e.bordercolor).call(k.fill,e.bgcolor).style("stroke-width",e.borderwidth+"px")}function p(t,e,r,n){var i=t.selectAll("text").data([0]);i.enter().append("text").classed(L.itemTextClassName,!0).classed("user-select-none",!0).attr({"text-anchor":"start","data-notex":1}),i.call(A.font,e.font).text(r.label).call(T.convertToTspans,n)}function m(t,e){var r=e.active;t.each(function(t,n){var i=w.select(this);n===r&&e.showactive&&i.select("rect."+L.itemRectClassName).call(k.fill,L.activeColor)})}function g(t){t.select("rect."+L.itemRectClassName).call(k.fill,L.hoverColor)}function v(t,e){t.select("rect."+L.itemRectClassName).call(k.fill,e.bgcolor)}function y(t,e){e.width1=0,e.height1=0,e.heights=[],e.widths=[],e.totalWidth=0,e.totalHeight=0,e.openWidth=0,e.openHeight=0,e.lx=0,e.ly=0;var r=A.tester.selectAll("g."+L.dropdownButtonClassName).data(e.buttons);r.enter().append("g").classed(L.dropdownButtonClassName,!0);var n=-1!==["up","down"].indexOf(e.direction);r.each(function(r,i){var a=w.select(this);a.call(f,e,r,t);var o=a.select("."+L.itemTextClassName),s=o.node()&&A.bBox(o.node()).width,l=Math.max(s+L.textPadX,L.minWidth),u=e.font.size*E,c=T.lineCount(o),h=Math.max(u*c,L.minHeight)+L.textOffsetY;h=Math.ceil(h),l=Math.ceil(l),e.widths[i]=l,e.heights[i]=h,e.height1=Math.max(e.height1,h),e.width1=Math.max(e.width1,l),n?(e.totalWidth=Math.max(e.totalWidth,l),e.openWidth=e.totalWidth,e.totalHeight+=h+L.gapButton,e.openHeight+=h+L.gapButton):(e.totalWidth+=l+L.gapButton,e.openWidth+=l+L.gapButton,e.totalHeight=Math.max(e.totalHeight,h),e.openHeight=e.totalHeight)}),n?e.totalHeight-=L.gapButton:e.totalWidth-=L.gapButton,e.headerWidth=e.width1+L.arrowPadX,e.headerHeight=e.height1,"dropdown"===e.type&&(n?(e.width1+=L.arrowPadX,e.totalHeight=e.height1):e.totalWidth=e.width1,e.totalWidth+=L.arrowPadX),r.remove();var i=e.totalWidth+e.pad.l+e.pad.r,a=e.totalHeight+e.pad.t+e.pad.b,o=t._fullLayout._size;e.lx=o.l+o.w*e.x,e.ly=o.t+o.h*(1-e.y);var s="left";S.isRightAnchor(e)&&(e.lx-=i,s="right"),S.isCenterAnchor(e)&&(e.lx-=i/2,s="center");var l="top";S.isBottomAnchor(e)&&(e.ly-=a,l="bottom"),S.isMiddleAnchor(e)&&(e.ly-=a/2,l="middle"),e.totalWidth=Math.ceil(e.totalWidth),e.totalHeight=Math.ceil(e.totalHeight),e.lx=Math.round(e.lx),e.ly=Math.round(e.ly),M.autoMargin(t,L.autoMarginIdRoot+e._index,{x:e.x,y:e.y,l:i*({right:1,center:.5}[s]||0),r:i*({left:1,center:.5}[s]||0),b:a*({top:1,middle:.5}[l]||0),t:a*({bottom:1,middle:.5}[l]||0)})}function b(t,e,r,n){n=n||{};var i=t.select("."+L.itemRectClassName),a=t.select("."+L.itemTextClassName),o=e.borderwidth,s=r.index;A.setTranslate(t,o+r.x,o+r.y);var l=-1!==["up","down"].indexOf(e.direction),u=n.height||(l?e.heights[s]:e.height1);i.attr({x:0,y:0,width:n.width||(l?e.width1:e.widths[s]),height:u});var c=e.font.size*E,h=T.lineCount(a),f=(h-1)*c/2;T.positionText(a,L.textOffsetX,u/2-f+L.textOffsetY),l?r.y+=e.heights[s]+r.yPad:r.x+=e.widths[s]+r.xPad,r.index++}function x(t){t.selectAll("g."+L.dropdownButtonClassName).remove()}function _(t){for(var e=t._fullLayout._pushmargin||{},r=Object.keys(e),n=0;n<r.length;n++){var i=r[n];-1!==i.indexOf(L.autoMarginIdRoot)&&M.autoMargin(t,i)}}var w=t("d3"),M=t("../../plots/plots"),k=t("../color"),A=t("../drawing"),T=t("../../lib/svg_text_utils"),S=t("../legend/anchor_utils"),E=t("../../constants/alignment").LINE_SPACING,L=t("./constants"),C=t("./scrollbox");e.exports=function(t){var e=t._fullLayout,r=n(e),a=e._infolayer.selectAll("g."+L.containerClassName).data(r.length>0?[0]:[]);if(a.enter().append("g").classed(L.containerClassName,!0).style("cursor","pointer"),a.exit().remove(),a.exit().size()&&_(t),0!==r.length){var c=a.selectAll("g."+L.headerGroupClassName).data(r,i);c.enter().append("g").classed(L.headerGroupClassName,!0);var h=a.selectAll("g."+L.dropdownButtonGroupClassName).data([0]);h.enter().append("g").classed(L.dropdownButtonGroupClassName,!0).style("pointer-events","all");for(var f=0;f<r.length;f++){var d=r[f];y(t,d)}var p="updatemenus"+e._uid,m=new C(t,h,p);c.enter().size()&&h.call(x).attr(L.menuIndexAttrName,"-1"),c.exit().each(function(e){w.select(this).remove(),h.call(x).attr(L.menuIndexAttrName,"-1"),M.autoMargin(t,L.autoMarginIdRoot+e._index)}),c.each(function(e){var r=w.select(this),n="dropdown"===e.type?h:null;M.manageCommandObserver(t,e,e.buttons,function(i){s(t,e,e.buttons[i.index],r,n,m,i.index,!0)}),"dropdown"===e.type?(l(t,r,h,m,e),o(h,e)&&u(t,r,h,m,e)):u(t,r,null,null,e)})}}},{"../../constants/alignment":701,"../../lib/svg_text_utils":750,"../../plots/plots":831,"../color":604,"../drawing":628,"../legend/anchor_utils":654,"./constants":696,"./scrollbox":700,d3:122}],699:[function(t,e,r){arguments[4][693][0].apply(r,arguments)},{"./attributes":695,"./constants":696,"./defaults":697,"./draw":698,dup:693}],700:[function(t,e,r){"use strict";function n(t,e,r){this.gd=t,this.container=e,this.id=r,this.position=null,this.translateX=null,this.translateY=null,this.hbar=null,this.vbar=null,this.bg=this.container.selectAll("rect.scrollbox-bg").data([0]),this.bg.exit().on(".drag",null).on("wheel",null).remove(),this.bg.enter().append("rect").classed("scrollbox-bg",!0).style("pointer-events","all").attr({opacity:0,x:0,y:0,width:0,height:0})}e.exports=n;var i=t("d3"),a=t("../color"),o=t("../drawing"),s=t("../../lib");n.barWidth=2,n.barLength=20,n.barRadius=2,n.barPad=1,n.barColor="#808BA4",n.prototype.enable=function(t,e,r){var s=this.gd._fullLayout,l=s.width,u=s.height;this.position=t;var c,h,f,d,p=this.position.l,m=this.position.w,g=this.position.t,v=this.position.h,y=this.position.direction,b="down"===y,x="left"===y,_="right"===y,w="up"===y,M=m,k=v;b||x||_||w||(this.position.direction="down",b=!0),b||w?(c=p,h=c+M,b?(f=g,d=Math.min(f+k,u),k=d-f):(d=g+k,f=Math.max(d-k,0),k=d-f)):(f=g,d=f+k,x?(h=p+M,c=Math.max(h-M,0),M=h-c):(c=p,h=Math.min(c+M,l),M=h-c)),this._box={l:c,t:f,w:M,h:k};var A=m>M,T=n.barLength+2*n.barPad,S=n.barWidth+2*n.barPad,E=p,L=g+v;L+S>u&&(L=u-S);var C=this.container.selectAll("rect.scrollbar-horizontal").data(A?[0]:[]);C.exit().on(".drag",null).remove(),C.enter().append("rect").classed("scrollbar-horizontal",!0).call(a.fill,n.barColor),A?(this.hbar=C.attr({rx:n.barRadius,ry:n.barRadius,x:E,y:L,width:T,height:S}),this._hbarXMin=E+T/2,this._hbarTranslateMax=M-T):(delete this.hbar,delete this._hbarXMin,delete this._hbarTranslateMax);var I=v>k,z=n.barWidth+2*n.barPad,D=n.barLength+2*n.barPad,P=p+m,O=g;P+z>l&&(P=l-z);var R=this.container.selectAll("rect.scrollbar-vertical").data(I?[0]:[]);R.exit().on(".drag",null).remove(),R.enter().append("rect").classed("scrollbar-vertical",!0).call(a.fill,n.barColor),I?(this.vbar=R.attr({rx:n.barRadius,ry:n.barRadius,x:P,y:O,width:z,height:D}),this._vbarYMin=O+D/2,this._vbarTranslateMax=k-D):(delete this.vbar,delete this._vbarYMin,delete this._vbarTranslateMax);var F=this.id,j=c-.5,N=I?h+z+.5:h+.5,B=f-.5,U=A?d+S+.5:d+.5,V=s._topdefs.selectAll("#"+F).data(A||I?[0]:[]);if(V.exit().remove(),V.enter().append("clipPath").attr("id",F).append("rect"),A||I?(this._clipRect=V.select("rect").attr({x:Math.floor(j),y:Math.floor(B),width:Math.ceil(N)-Math.floor(j),height:Math.ceil(U)-Math.floor(B)}),this.container.call(o.setClipUrl,F),this.bg.attr({x:p,y:g,width:m,height:v})):(this.bg.attr({width:0,height:0}),this.container.on("wheel",null).on(".drag",null).call(o.setClipUrl,null),delete this._clipRect),A||I){var H=i.behavior.drag().on("dragstart",function(){i.event.sourceEvent.preventDefault()}).on("drag",this._onBoxDrag.bind(this));this.container.on("wheel",null).on("wheel",this._onBoxWheel.bind(this)).on(".drag",null).call(H);var q=i.behavior.drag().on("dragstart",function(){i.event.sourceEvent.preventDefault(),i.event.sourceEvent.stopPropagation()}).on("drag",this._onBarDrag.bind(this));A&&this.hbar.on(".drag",null).call(q),I&&this.vbar.on(".drag",null).call(q)}this.setTranslate(e,r)},n.prototype.disable=function(){(this.hbar||this.vbar)&&(this.bg.attr({width:0,height:0}),this.container.on("wheel",null).on(".drag",null).call(o.setClipUrl,null),delete this._clipRect),this.hbar&&(this.hbar.on(".drag",null),this.hbar.remove(),delete this.hbar,delete this._hbarXMin,delete this._hbarTranslateMax),this.vbar&&(this.vbar.on(".drag",null),this.vbar.remove(),delete this.vbar,delete this._vbarYMin,delete this._vbarTranslateMax)},n.prototype._onBoxDrag=function(){var t=this.translateX,e=this.translateY;this.hbar&&(t-=i.event.dx),this.vbar&&(e-=i.event.dy),this.setTranslate(t,e)},n.prototype._onBoxWheel=function(){var t=this.translateX,e=this.translateY;this.hbar&&(t+=i.event.deltaY),this.vbar&&(e+=i.event.deltaY),this.setTranslate(t,e)},n.prototype._onBarDrag=function(){var t=this.translateX,e=this.translateY;if(this.hbar){var r=t+this._hbarXMin,n=r+this._hbarTranslateMax;t=(s.constrain(i.event.x,r,n)-r)/(n-r)*(this.position.w-this._box.w)}if(this.vbar){var a=e+this._vbarYMin,o=a+this._vbarTranslateMax;e=(s.constrain(i.event.y,a,o)-a)/(o-a)*(this.position.h-this._box.h)}this.setTranslate(t,e)},n.prototype.setTranslate=function(t,e){var r=this.position.w-this._box.w,n=this.position.h-this._box.h;if(t=s.constrain(t||0,0,r),e=s.constrain(e||0,0,n),this.translateX=t,this.translateY=e,this.container.call(o.setTranslate,this._box.l-this.position.l-t,this._box.t-this.position.t-e),this._clipRect&&this._clipRect.attr({x:Math.floor(this.position.l+t-.5),y:Math.floor(this.position.t+e-.5)}),this.hbar){var i=t/r;this.hbar.call(o.setTranslate,t+i*this._hbarTranslateMax,e)}if(this.vbar){var a=e/n;this.vbar.call(o.setTranslate,t,e+a*this._vbarTranslateMax)}}},{"../../lib":728,"../color":604,"../drawing":628,d3:122}],701:[function(t,e,r){"use strict";e.exports={FROM_BL:{left:0,center:.5,right:1,bottom:0,middle:.5,top:1},FROM_TL:{left:0,center:.5,right:1,bottom:1,middle:.5,top:0},LINE_SPACING:1.3,MID_SHIFT:.35}},{}],702:[function(t,e,r){"use strict";e.exports={solid:[1],dot:[1,1],dash:[4,1],longdash:[8,1],dashdot:[4,1,1,1],longdashdot:[8,1,1,1]}},{}],703:[function(t,e,r){"use strict";for(var n=t("../lib/extend").extendFlat,i={circle:{unicode:"\u25cf"},square:{unicode:"\u25a0"},diamond:{unicode:"\u25c6"},cross:{unicode:"\u271a"},x:{unicode:"\u274c"},"triangle-up":{unicode:"\u25b2"},"triangle-down":{unicode:"\u25bc"},"triangle-left":{unicode:"\u25c4"},"triangle-right":{unicode:"\u25ba"},"triangle-ne":{unicode:"\u25e5"},"triangle-nw":{unicode:"\u25e4"},"triangle-se":{unicode:"\u25e2"},"triangle-sw":{unicode:"\u25e3"},pentagon:{unicode:"\u2b1f"},hexagon:{unicode:"\u2b22"},hexagon2:{unicode:"\u2b23"},star:{unicode:"\u2605"},"diamond-tall":{unicode:"\u2666"},bowtie:{unicode:"\u29d3"},"diamond-x":{unicode:"\u2756"},"cross-thin":{unicode:"+",noBorder:!0},asterisk:{unicode:"\u2733",noBorder:!0},"y-up":{unicode:"\u2144",noBorder:!0},"y-down":{unicode:"Y",noBorder:!0},"line-ew":{unicode:"\u2500",noBorder:!0},"line-ns":{unicode:"\u2502",noBorder:!0}},a={},o=Object.keys(i),s=0;s<o.length;s++){var l=o[s];a[l+"-open"]=n({},i[l])}var u={"circle-cross-open":{unicode:"\u2a01",noFill:!0},"circle-x-open":{unicode:"\u2a02",noFill:!0},"square-cross-open":{unicode:"\u229e",noFill:!0},"square-x-open":{unicode:"\u22a0",noFill:!0}};e.exports=n({},i,a,u)},{"../lib/extend":717}],704:[function(t,e,r){"use strict";e.exports={solid:[[],0],dot:[[.5,1],200],dash:[[.5,1],50],longdash:[[.5,1],10],dashdot:[[.5,.625,.875,1],50],longdashdot:[[.5,.7,.8,1],10]}},{}],705:[function(t,e,r){"use strict";e.exports={circle:"\u25cf","circle-open":"\u25cb",square:"\u25a0","square-open":"\u25a1",diamond:"\u25c6","diamond-open":"\u25c7",cross:"+",x:"\u274c"}},{}],706:[function(t,e,r){"use strict";e.exports={SHOW_PLACEHOLDER:100,HIDE_PLACEHOLDER:1e3,DBLCLICKDELAY:300,DESELECTDIM:.2}},{}],707:[function(t,e,r){"use strict";e.exports={BADNUM:void 0,FP_SAFE:Number.MAX_VALUE/1e4,ONEAVGYEAR:315576e5,ONEAVGMONTH:26298e5,ONEDAY:864e5,ONEHOUR:36e5,ONEMIN:6e4,ONESEC:1e3,EPOCHJD:2440587.5,ALMOST_EQUAL:1-1e-6,MINUS_SIGN:"\u2212"}},{}],708:[function(t,e,r){"use strict";e.exports={entityToUnicode:{mu:"\u03bc","#956":"\u03bc",amp:"&","#28":"&",lt:"<","#60":"<",gt:">","#62":">",nbsp:"\xa0","#160":"\xa0",times:"\xd7","#215":"\xd7",plusmn:"\xb1","#177":"\xb1",deg:"\xb0","#176":"\xb0"}}},{}],709:[function(t,e,r){"use strict";r.xmlns="http://www.w3.org/2000/xmlns/",r.svg="http://www.w3.org/2000/svg",r.xlink="http://www.w3.org/1999/xlink",r.svgAttrs={xmlns:r.svg,"xmlns:xlink":r.xlink}},{}],710:[function(t,e,r){"use strict";var n=t("./plotly");r.version="1.31.2",t("es6-promise").polyfill(),t("../build/plotcss"),t("./fonts/mathjax_config"),r.plot=n.plot,r.newPlot=n.newPlot,r.restyle=n.restyle,r.relayout=n.relayout,r.redraw=n.redraw,r.update=n.update,r.extendTraces=n.extendTraces,r.prependTraces=n.prependTraces,r.addTraces=n.addTraces,r.deleteTraces=n.deleteTraces,r.moveTraces=n.moveTraces,r.purge=n.purge,r.setPlotConfig=t("./plot_api/set_plot_config"),r.register=t("./plot_api/register"),r.toImage=t("./plot_api/to_image"),r.downloadImage=t("./snapshot/download"),r.validate=t("./plot_api/validate"),r.addFrames=n.addFrames,r.deleteFrames=n.deleteFrames,r.animate=n.animate,r.register(t("./traces/scatter")),r.register([t("./components/fx"),t("./components/legend"),t("./components/annotations"),t("./components/annotations3d"),t("./components/shapes"),t("./components/images"),t("./components/updatemenus"),t("./components/sliders"),t("./components/rangeslider"),t("./components/rangeselector")]),r.Icons=t("../build/ploticon"),r.Plots=n.Plots,r.Fx=t("./components/fx"),r.Snapshot=t("./snapshot"),r.PlotSchema=t("./plot_api/plot_schema"),r.Queue=t("./lib/queue"),r.d3=t("d3")},{"../build/plotcss":1,"../build/ploticon":2,"./components/annotations":595,"./components/annotations3d":600,"./components/fx":645,"./components/images":653,"./components/legend":662,"./components/rangeselector":674,"./components/rangeslider":680,"./components/shapes":687,"./components/sliders":693,"./components/updatemenus":699,"./fonts/mathjax_config":711,"./lib/queue":741,"./plot_api/plot_schema":761,"./plot_api/register":762,"./plot_api/set_plot_config":763,"./plot_api/to_image":765,"./plot_api/validate":766,"./plotly":767,"./snapshot":851,"./snapshot/download":848,"./traces/scatter":1042,d3:122,"es6-promise":128}],711:[function(t,e,r){"use strict";"undefined"!=typeof MathJax?(r.MathJax=!0,MathJax.Hub.Config({messageStyle:"none",skipStartupTypeset:!0,displayAlign:"left",tex2jax:{inlineMath:[["$","$"],["\\(","\\)"]]}}),MathJax.Hub.Configured()):r.MathJax=!1},{}],712:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),i=t("../constants/numerical").BADNUM,a=/^['"%,$#\s']+|[, ]|['"%,$#\s']+$/g;e.exports=function(t){return"string"==typeof t&&(t=t.replace(a,"")),n(t)?Number(t):i}},{"../constants/numerical":707,"fast-isnumeric":131}],713:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),i=t("tinycolor2"),a=t("../plots/attributes"),o=t("../components/colorscale/get_scale"),s=(Object.keys(t("../components/colorscale/scales")),t("./nested_property")),l=t("./regex").counter;r.valObjectMeta={data_array:{coerceFunction:function(t,e,r){Array.isArray(t)?e.set(t):void 0!==r&&e.set(r)}},enumerated:{coerceFunction:function(t,e,r,n){n.coerceNumber&&(t=+t),-1===n.values.indexOf(t)?e.set(r):e.set(t)},validateFunction:function(t,e){e.coerceNumber&&(t=+t);for(var r=e.values,n=0;n<r.length;n++){var i=String(r[n]);if("/"===i.charAt(0)&&"/"===i.charAt(i.length-1)){if(new RegExp(i.substr(1,i.length-2)).test(t))return!0}else if(t===r[n])return!0}return!1}},boolean:{coerceFunction:function(t,e,r){!0===t||!1===t?e.set(t):e.set(r)}},number:{coerceFunction:function(t,e,r,i){!n(t)||void 0!==i.min&&t<i.min||void 0!==i.max&&t>i.max?e.set(r):e.set(+t)}},integer:{coerceFunction:function(t,e,r,i){t%1||!n(t)||void 0!==i.min&&t<i.min||void 0!==i.max&&t>i.max?e.set(r):e.set(+t)}},string:{coerceFunction:function(t,e,r,n){if("string"!=typeof t){var i="number"==typeof t;!0!==n.strict&&i?e.set(String(t)):e.set(r)}else n.noBlank&&!t?e.set(r):e.set(t)}},color:{coerceFunction:function(t,e,r){i(t).isValid()?e.set(t):e.set(r)}},colorscale:{coerceFunction:function(t,e,r){e.set(o(t,r))}},angle:{coerceFunction:function(t,e,r){"auto"===t?e.set("auto"):n(t)?(Math.abs(t)>180&&(t-=360*Math.round(t/360)),e.set(+t)):e.set(r)}},subplotid:{coerceFunction:function(t,e,r){if("string"==typeof t&&l(r).test(t))return void e.set(t);e.set(r)},validateFunction:function(t,e){var r=e.dflt;return t===r||"string"==typeof t&&!!l(r).test(t)}},flaglist:{coerceFunction:function(t,e,r,n){if("string"!=typeof t)return void e.set(r);if(-1!==(n.extras||[]).indexOf(t))return void e.set(t);for(var i=t.split("+"),a=0;a<i.length;){var o=i[a];-1===n.flags.indexOf(o)||i.indexOf(o)<a?i.splice(a,1):a++}i.length?e.set(i.join("+")):e.set(r)}},any:{coerceFunction:function(t,e,r){void 0===t?e.set(r):e.set(t)}},info_array:{coerceFunction:function(t,e,n,i){if(!Array.isArray(t))return void e.set(n);var a=i.items,o=[];n=Array.isArray(n)?n:[];for(var s=0;s<a.length;s++)r.coerce(t,o,a,"["+s+"]",n[s]);e.set(o)},validateFunction:function(t,e){if(!Array.isArray(t))return!1;var n=e.items;if(!e.freeLength&&t.length!==n.length)return!1;for(var i=0;i<t.length;i++){if(!r.validate(t[i],e.items[i]))return!1}return!0}}},r.coerce=function(t,e,n,i,a){var o=s(n,i).get(),l=s(t,i),u=s(e,i),c=l.get();return void 0===a&&(a=o.dflt),o.arrayOk&&Array.isArray(c)?(u.set(c),c):(r.valObjectMeta[o.valType].coerceFunction(c,u,a,o),u.get())},r.coerce2=function(t,e,n,i,a){var o=s(t,i),l=r.coerce(t,e,n,i,a),u=o.get();return void 0!==u&&null!==u&&l},r.coerceFont=function(t,e,r){var n={};return r=r||{},n.family=t(e+".family",r.family),n.size=t(e+".size",r.size),n.color=t(e+".color",r.color),n},r.coerceHoverinfo=function(t,e,n){var i,o=e._module.attributes,s=o.hoverinfo?{hoverinfo:o.hoverinfo}:a,l=s.hoverinfo;if(1===n._dataLength){var u="all"===l.dflt?l.flags.slice():l.dflt.split("+");u.splice(u.indexOf("name"),1),i=u.join("+")}return r.coerce(t,e,s,"hoverinfo",i)},r.validate=function(t,e){var n=r.valObjectMeta[e.valType];if(e.arrayOk&&Array.isArray(t))return!0;if(n.validateFunction)return n.validateFunction(t,e);var i={},a=i,o={set:function(t){a=t}};return n.coerceFunction(t,o,i,e),a!==i}},{"../components/colorscale/get_scale":616,"../components/colorscale/scales":622,"../plots/attributes":770,"./nested_property":735,"./regex":742,"fast-isnumeric":131,tinycolor2:534}],714:[function(t,e,r){"use strict";function n(t){return t&&M.componentsRegistry.calendars&&"string"==typeof t&&"gregorian"!==t}function i(t,e){return String(t+Math.pow(10,e)).substr(1)}function a(t,e,r,n,a){if((e||r||n||a)&&(t+=" "+i(e,2)+":"+i(r,2),(n||a)&&(t+=":"+i(n,2),a))){for(var o=4;a%10==0;)o-=1,a/=10;t+="."+i(a,o)}return t}function o(t,e,r){t=t.replace(D,function(t){var r=Math.min(+t.charAt(1)||6,6);return(e/1e3%1+2).toFixed(r).substr(2).replace(/0+$/,"")||"0"});var i=new Date(Math.floor(e+.05));if(n(r))try{t=M.getComponentMethod("calendars","worldCalFmt")(t,e,r)}catch(t){return"Invalid"}return k(t)(i)}function s(t,e){var r=m(t+.05,y),n=i(Math.floor(r/b),2)+":"+i(m(Math.floor(r/x),60),2);if("M"!==e){d(e)||(e=0);var a=Math.min(m(t/_,60),P[e]),o=(100+a).toFixed(e).substr(1);e>0&&(o=o.replace(/0+$/,"").replace(/[\.]$/,"")),n+=":"+o}return n}function l(t){return t.formatDate("yyyy")}function u(t){return t.formatDate("M yyyy")}function c(t){return t.formatDate("M d")}function h(t){return t.formatDate("M d, yyyy")}var f=t("d3"),d=t("fast-isnumeric"),p=t("./loggers").error,m=t("./mod"),g=t("../constants/numerical"),v=g.BADNUM,y=g.ONEDAY,b=g.ONEHOUR,x=g.ONEMIN,_=g.ONESEC,w=g.EPOCHJD,M=t("../registry"),k=f.time.format.utc,A=/^\s*(-?\d\d\d\d|\d\d)(-(\d?\d)(-(\d?\d)([ Tt]([01]?\d|2[0-3])(:([0-5]\d)(:([0-5]\d(\.\d+)?))?(Z|z|[+\-]\d\d:?\d\d)?)?)?)?)?\s*$/m,T=/^\s*(-?\d\d\d\d|\d\d)(-(\d?\di?)(-(\d?\d)([ Tt]([01]?\d|2[0-3])(:([0-5]\d)(:([0-5]\d(\.\d+)?))?(Z|z|[+\-]\d\d:?\d\d)?)?)?)?)?\s*$/m,S=(new Date).getFullYear()-70;r.dateTick0=function(t,e){return n(t)?e?M.getComponentMethod("calendars","CANONICAL_SUNDAY")[t]:M.getComponentMethod("calendars","CANONICAL_TICK")[t]:e?"2000-01-02":"2000-01-01"},r.dfltRange=function(t){return n(t)?M.getComponentMethod("calendars","DFLTRANGE")[t]:["2000-01-01","2001-01-01"]},r.isJSDate=function(t){return"object"==typeof t&&null!==t&&"function"==typeof t.getTime};var E,L;r.dateTime2ms=function(t,e){if(r.isJSDate(t))return t=Number(t)-t.getTimezoneOffset()*x,t>=E&&t<=L?t:v;if("string"!=typeof t&&"number"!=typeof t)return v;t=String(t);var i=n(e),a=t.charAt(0);!i||"G"!==a&&"g"!==a||(t=t.substr(1),e="");var o=i&&"chinese"===e.substr(0,7),s=t.match(o?T:A);if(!s)return v;var l=s[1],u=s[3]||"1",c=Number(s[5]||1),h=Number(s[7]||0),f=Number(s[9]||0),d=Number(s[11]||0);if(i){if(2===l.length)return v;l=Number(l);var p;try{var m=M.getComponentMethod("calendars","getCal")(e);if(o){var g="i"===u.charAt(u.length-1);u=parseInt(u,10),p=m.newDate(l,m.toMonthIndex(l,u,g),c)}else p=m.newDate(l,Number(u),c)}catch(t){return v}return p?(p.toJD()-w)*y+h*b+f*x+d*_:v}l=2===l.length?(Number(l)+2e3-S)%100+S:Number(l),u-=1;var k=new Date(Date.UTC(2e3,u,c,h,f));return k.setUTCFullYear(l),k.getUTCMonth()!==u?v:k.getUTCDate()!==c?v:k.getTime()+d*_},E=r.MIN_MS=r.dateTime2ms("-9999"),L=r.MAX_MS=r.dateTime2ms("9999-12-31 23:59:59.9999"),r.isDateTime=function(t,e){return r.dateTime2ms(t,e)!==v};var C=90*y,I=3*b,z=5*x;r.ms2DateTime=function(t,e,r){if("number"!=typeof t||!(t>=E&&t<=L))return v;e||(e=0);var i,o,s,l,u,c,h=Math.floor(10*m(t+.05,1)),f=Math.round(t-h/10);if(n(r)){var d=Math.floor(f/y)+w,p=Math.floor(m(t,y));try{i=M.getComponentMethod("calendars","getCal")(r).fromJD(d).formatDate("yyyy-mm-dd")}catch(t){i=k("G%Y-%m-%d")(new Date(f))}if("-"===i.charAt(0))for(;i.length<11;)i="-0"+i.substr(1);else for(;i.length<10;)i="0"+i;o=e<C?Math.floor(p/b):0,s=e<C?Math.floor(p%b/x):0,l=e<I?Math.floor(p%x/_):0,u=e<z?p%_*10+h:0}else c=new Date(f),i=k("%Y-%m-%d")(c),o=e<C?c.getUTCHours():0,s=e<C?c.getUTCMinutes():0,l=e<I?c.getUTCSeconds():0,u=e<z?10*c.getUTCMilliseconds()+h:0;return a(i,o,s,l,u)},r.ms2DateTimeLocal=function(t){if(!(t>=E+y&&t<=L-y))return v;var e=Math.floor(10*m(t+.05,1)),r=new Date(Math.round(t-e/10));return a(f.time.format("%Y-%m-%d")(r),r.getHours(),r.getMinutes(),r.getSeconds(),10*r.getUTCMilliseconds()+e)},r.cleanDate=function(t,e,i){if(r.isJSDate(t)||"number"==typeof t){if(n(i))return p("JS Dates and milliseconds are incompatible with world calendars",t),e;if(!(t=r.ms2DateTimeLocal(+t))&&void 0!==e)return e}else if(!r.isDateTime(t,i))return p("unrecognized date",t),e;return t};var D=/%\d?f/g,P=[59,59.9,59.99,59.999,59.9999],O=k("%Y"),R=k("%b %Y"),F=k("%b %-d"),j=k("%b %-d, %Y");r.formatDate=function(t,e,r,i){var a,f;if(i=n(i)&&i,e)return o(e,t,i);if(i)try{var d=Math.floor((t+.05)/y)+w,p=M.getComponentMethod("calendars","getCal")(i).fromJD(d);"y"===r?f=l(p):"m"===r?f=u(p):"d"===r?(a=l(p),f=c(p)):(a=h(p),f=s(t,r))}catch(t){return"Invalid"}else{var m=new Date(Math.floor(t+.05))
;"y"===r?f=O(m):"m"===r?f=R(m):"d"===r?(a=O(m),f=F(m)):(a=j(m),f=s(t,r))}return f+(a?"\n"+a:"")};var N=3*y;r.incrementMonth=function(t,e,r){r=n(r)&&r;var i=m(t,y);if(t=Math.round(t-i),r)try{var a=Math.round(t/y)+w,o=M.getComponentMethod("calendars","getCal")(r),s=o.fromJD(a);return e%12?o.add(s,e,"m"):o.add(s,e/12,"y"),(s.toJD()-w)*y+i}catch(e){p("invalid ms "+t+" in calendar "+r)}var l=new Date(t+N);return l.setUTCMonth(l.getUTCMonth()+e)+i-N},r.findExactDates=function(t,e){for(var r,i,a=0,o=0,s=0,l=0,u=n(e)&&M.getComponentMethod("calendars","getCal")(e),c=0;c<t.length;c++)if(i=t[c],d(i)){if(!(i%y))if(u)try{r=u.fromJD(i/y+w),1===r.day()?1===r.month()?a++:o++:s++}catch(t){}else r=new Date(i),1===r.getUTCDate()?0===r.getUTCMonth()?a++:o++:s++}else l++;o+=a,s+=o;var h=t.length-l;return{exactYears:a/h,exactMonths:o/h,exactDays:s/h}}},{"../constants/numerical":707,"../registry":846,"./loggers":732,"./mod":734,d3:122,"fast-isnumeric":131}],715:[function(t,e,r){"use strict";e.exports=function(t,e){return Array.isArray(t)||(t=[]),t.length=e,t}},{}],716:[function(t,e,r){"use strict";var n=t("events").EventEmitter,i={init:function(t){if(t._ev instanceof n)return t;var e=new n,r=new n;return t._ev=e,t._internalEv=r,t.on=e.on.bind(e),t.once=e.once.bind(e),t.removeListener=e.removeListener.bind(e),t.removeAllListeners=e.removeAllListeners.bind(e),t._internalOn=r.on.bind(r),t._internalOnce=r.once.bind(r),t._removeInternalListener=r.removeListener.bind(r),t._removeAllInternalListeners=r.removeAllListeners.bind(r),t.emit=function(n,i){"undefined"!=typeof jQuery&&jQuery(t).trigger(n,i),e.emit(n,i),r.emit(n,i)},t},triggerHandler:function(t,e,r){var n,i;"undefined"!=typeof jQuery&&(n=jQuery(t).triggerHandler(e,r));var a=t._ev;if(!a)return n;var o=a._events[e];if(!o)return n;"function"==typeof o&&(o=[o]);for(var s=o.pop(),l=0;l<o.length;l++)o[l](r);return i=s(r),void 0!==n?n:i},purge:function(t){return delete t._ev,delete t.on,delete t.once,delete t.removeListener,delete t.removeAllListeners,delete t.emit,delete t._ev,delete t._internalEv,delete t._internalOn,delete t._internalOnce,delete t._removeInternalListener,delete t._removeAllInternalListeners,t}};e.exports=i},{events:129}],717:[function(t,e,r){"use strict";function n(t,e){var r,n;for(r=0;r<t.length;r++){if(null!==(n=t[r])&&"object"==typeof n)return!1;void 0!==n&&(e[r]=n)}return!0}function i(t,e,r,s){var l,u,c,h,f,d,p=t[0],m=t.length;if(2===m&&o(p)&&o(t[1])&&0===p.length){if(n(t[1],p))return p;p.splice(0,p.length)}for(var g=1;g<m;g++){l=t[g];for(u in l)c=p[u],h=l[u],s&&o(h)?p[u]=h:e&&h&&(a(h)||(f=o(h)))?(f?(f=!1,d=c&&o(c)?c:[]):d=c&&a(c)?c:{},p[u]=i([d,h],e,r,s)):(void 0!==h||r)&&(p[u]=h)}return p}var a=t("./is_plain_object.js"),o=Array.isArray;r.extendFlat=function(){return i(arguments,!1,!1,!1)},r.extendDeep=function(){return i(arguments,!0,!1,!1)},r.extendDeepAll=function(){return i(arguments,!0,!0,!1)},r.extendDeepNoArrays=function(){return i(arguments,!0,!1,!0)}},{"./is_plain_object.js":730}],718:[function(t,e,r){"use strict";e.exports=function(t){for(var e={},r=[],n=0,i=0;i<t.length;i++){var a=t[i];1!==e[a]&&(e[a]=1,r[n++]=a)}return r}},{}],719:[function(t,e,r){"use strict";e.exports=function(t){for(var e=[],r=0;r<t.length;r++){var n=t[r];!0===n.visible&&e.push(n)}return e}},{}],720:[function(t,e,r){"use strict";function n(t,e){return(0,l[t])(e)}function i(t){for(var e=0;e<s.length;e++){var r=s[e];if(new RegExp(a[r]).test(t.trim().toLowerCase()))return r}return o.warn("Unrecognized country name: "+t+"."),!1}var a=t("country-regex"),o=t("../lib"),s=Object.keys(a),l={"ISO-3":o.identity,"USA-states":o.identity,"country names":i};r.locationToFeature=function(t,e,r){var i=n(t,e);if(i){for(var a=0;a<r.length;a++){var s=r[a];if(s.id===i)return s}o.warn(["Location with id",i,"does not have a matching topojson feature at this resolution."].join(" "))}return!1}},{"../lib":728,"country-regex":107}],721:[function(t,e,r){"use strict";var n=t("../constants/numerical").BADNUM;r.calcTraceToLineCoords=function(t){for(var e=t[0].trace,r=e.connectgaps,i=[],a=[],o=0;o<t.length;o++){var s=t[o],l=s.lonlat;l[0]!==n?a.push(l):!r&&a.length>0&&(i.push(a),a=[])}return a.length>0&&i.push(a),i},r.makeLine=function(t){return 1===t.length?{type:"LineString",coordinates:t[0]}:{type:"MultiLineString",coordinates:t}},r.makePolygon=function(t){if(1===t.length)return{type:"Polygon",coordinates:t};for(var e=new Array(t.length),r=0;r<t.length;r++)e[r]=[t[r]];return{type:"MultiPolygon",coordinates:e}},r.makeBlank=function(){return{type:"Point",coordinates:[]}}},{"../constants/numerical":707}],722:[function(t,e,r){"use strict";function n(t,e,r,n,i,a,o,s){var l=r-t,u=i-t,c=o-i,h=n-e,f=a-e,d=s-a,p=l*d-c*h;if(0===p)return null;var m=(u*d-c*f)/p,g=(u*h-l*f)/p;return g<0||g>1||m<0||m>1?null:{x:t+l*m,y:e+h*m}}function i(t,e,r,n,i){var a=n*t+i*e;if(a<0)return n*n+i*i;if(a>r){var o=n-t,s=i-e;return o*o+s*s}var l=n*e-i*t;return l*l/r}var a=t("./mod");r.segmentsIntersect=n,r.segmentDistance=function(t,e,r,a,o,s,l,u){if(n(t,e,r,a,o,s,l,u))return 0;var c=r-t,h=a-e,f=l-o,d=u-s,p=c*c+h*h,m=f*f+d*d,g=Math.min(i(c,h,p,o-t,s-e),i(c,h,p,l-t,u-e),i(f,d,m,t-o,e-s),i(f,d,m,r-o,a-s));return Math.sqrt(g)};var o,s,l;r.getTextLocation=function(t,e,r,n){if(t===s&&n===l||(o={},s=t,l=n),o[r])return o[r];var i=t.getPointAtLength(a(r-n/2,e)),u=t.getPointAtLength(a(r+n/2,e)),c=Math.atan((u.y-i.y)/(u.x-i.x)),h=t.getPointAtLength(a(r,e)),f=(4*h.x+i.x+u.x)/6,d=(4*h.y+i.y+u.y)/6,p={x:f,y:d,theta:c};return o[r]=p,p},r.clearLocationCache=function(){s=null},r.getVisibleSegment=function(t,e,r){function n(e){var r=t.getPointAtLength(e);0===e?i=r:e===h&&(a=r);var n=r.x<o?o-r.x:r.x>s?r.x-s:0,c=r.y<l?l-r.y:r.y>u?r.y-u:0;return Math.sqrt(n*n+c*c)}for(var i,a,o=e.left,s=e.right,l=e.top,u=e.bottom,c=0,h=t.getTotalLength(),f=h,d=n(c);d;){if((c+=d+r)>f)return;d=n(c)}for(d=n(f);d;){if(f-=d+r,c>f)return;d=n(f)}return{min:c,max:f,len:f-c,total:h,isClosed:0===c&&f===h&&Math.abs(i.x-a.x)<.1&&Math.abs(i.y-a.y)<.1}}},{"./mod":734}],723:[function(t,e,r){"use strict";e.exports=function(t){var e;if("string"==typeof t){if(null===(e=document.getElementById(t)))throw new Error("No DOM element with id '"+t+"' exists on the page.");return e}if(null===t||void 0===t)throw new Error("DOM element provided is null or undefined");return t}},{}],724:[function(t,e,r){"use strict";function n(t,e){var r=t;return r[3]*=e,r}function i(t){if(s(t))return h;var e=l(t);return e.length?e:h}function a(t){return s(t)?t:f}function o(t,e,r){var o,s,c,d,p,m=t.color,g=Array.isArray(m),v=Array.isArray(e),y=[];if(o=void 0!==t.colorscale?u.makeColorScaleFunc(u.extractScale(t.colorscale,t.cmin,t.cmax)):i,s=g?function(t,e){return void 0===t[e]?h:l(o(t[e]))}:i,c=v?function(t,e){return void 0===t[e]?f:a(t[e])}:a,g||v)for(var b=0;b<r;b++)d=s(m,b),p=c(e,b),y[b]=n(d,p);else y=n(l(m),e);return y}var s=t("fast-isnumeric"),l=t("color-rgba"),u=t("../components/colorscale"),c=t("../components/color/attributes").defaultLine,h=l(c),f=1;e.exports=o},{"../components/color/attributes":603,"../components/colorscale":618,"color-rgba":95,"fast-isnumeric":131}],725:[function(t,e,r){"use strict";function n(t){return[t]}var i=t("./identity");e.exports={keyFun:function(t){return t.key},repeat:n,descend:i,wrap:n,unwrap:function(t){return t[0]}}},{"./identity":727}],726:[function(t,e,r){"use strict";function n(t){for(var e=0;(e=t.indexOf("<sup>",e))>=0;){var r=t.indexOf("</sup>",e);if(r<e)break;t=t.slice(0,e)+l(t.slice(e+5,r))+t.slice(r+6)}return t}function i(t){return t.replace(/\<br\>/g,"\n")}function a(t){return t.replace(/\<.*\>/g,"")}function o(t){for(var e=u.entityToUnicode,r=0;(r=t.indexOf("&",r))>=0;){var n=t.indexOf(";",r);if(n<r)r+=1;else{var i=e[t.slice(r+1,n)];t=i?t.slice(0,r)+i+t.slice(n+1):t.slice(0,r)+t.slice(n+1)}}return t}function s(t){return""+o(a(n(i(t))))}var l=t("superscript-text"),u=t("../constants/string_mappings");e.exports=s},{"../constants/string_mappings":708,"superscript-text":530}],727:[function(t,e,r){"use strict";e.exports=function(t){return t}},{}],728:[function(t,e,r){"use strict";var n=t("d3"),i=t("fast-isnumeric"),a=t("../constants/numerical"),o=a.FP_SAFE,s=a.BADNUM,l=e.exports={};l.nestedProperty=t("./nested_property"),l.keyedContainer=t("./keyed_container"),l.relativeAttr=t("./relative_attr"),l.isPlainObject=t("./is_plain_object"),l.isArray=t("./is_array"),l.mod=t("./mod"),l.toLogRange=t("./to_log_range"),l.relinkPrivateKeys=t("./relink_private"),l.ensureArray=t("./ensure_array");var u=t("./coerce");l.valObjectMeta=u.valObjectMeta,l.coerce=u.coerce,l.coerce2=u.coerce2,l.coerceFont=u.coerceFont,l.coerceHoverinfo=u.coerceHoverinfo,l.validate=u.validate;var c=t("./dates");l.dateTime2ms=c.dateTime2ms,l.isDateTime=c.isDateTime,l.ms2DateTime=c.ms2DateTime,l.ms2DateTimeLocal=c.ms2DateTimeLocal,l.cleanDate=c.cleanDate,l.isJSDate=c.isJSDate,l.formatDate=c.formatDate,l.incrementMonth=c.incrementMonth,l.dateTick0=c.dateTick0,l.dfltRange=c.dfltRange,l.findExactDates=c.findExactDates,l.MIN_MS=c.MIN_MS,l.MAX_MS=c.MAX_MS;var h=t("./search");l.findBin=h.findBin,l.sorterAsc=h.sorterAsc,l.sorterDes=h.sorterDes,l.distinctVals=h.distinctVals,l.roundUp=h.roundUp;var f=t("./stats");l.aggNums=f.aggNums,l.len=f.len,l.mean=f.mean,l.variance=f.variance,l.stdev=f.stdev,l.interp=f.interp;var d=t("./matrix");l.init2dArray=d.init2dArray,l.transposeRagged=d.transposeRagged,l.dot=d.dot,l.translationMatrix=d.translationMatrix,l.rotationMatrix=d.rotationMatrix,l.rotationXYMatrix=d.rotationXYMatrix,l.apply2DTransform=d.apply2DTransform,l.apply2DTransform2=d.apply2DTransform2;var p=t("./geometry2d");l.segmentsIntersect=p.segmentsIntersect,l.segmentDistance=p.segmentDistance,l.getTextLocation=p.getTextLocation,l.clearLocationCache=p.clearLocationCache,l.getVisibleSegment=p.getVisibleSegment;var m=t("./extend");l.extendFlat=m.extendFlat,l.extendDeep=m.extendDeep,l.extendDeepAll=m.extendDeepAll,l.extendDeepNoArrays=m.extendDeepNoArrays;var g=t("./loggers");l.log=g.log,l.warn=g.warn,l.error=g.error;var v=t("./regex");l.counterRegex=v.counter;var y=t("./throttle");l.throttle=y.throttle,l.throttleDone=y.done,l.clearThrottle=y.clear,l.getGraphDiv=t("./get_graph_div"),l.notifier=t("./notifier"),l.filterUnique=t("./filter_unique"),l.filterVisible=t("./filter_visible"),l.pushUnique=t("./push_unique"),l.cleanNumber=t("./clean_number"),l.ensureNumber=function(t){return i(t)?(t=Number(t),t<-o||t>o?s:i(t)?Number(t):s):s},l.noop=t("./noop"),l.identity=t("./identity"),l.swapAttrs=function(t,e,r,n){r||(r="x"),n||(n="y");for(var i=0;i<e.length;i++){var a=e[i],o=l.nestedProperty(t,a.replace("?",r)),s=l.nestedProperty(t,a.replace("?",n)),u=o.get();o.set(s.get()),s.set(u)}},l.pauseEvent=function(t){return t.stopPropagation&&t.stopPropagation(),t.preventDefault&&t.preventDefault(),t.cancelBubble=!0,!1},l.raiseToTop=function(t){t.parentNode.appendChild(t)},l.cancelTransition=function(t){return t.transition().duration(0)},l.constrain=function(t,e,r){return e>r?Math.max(r,Math.min(e,t)):Math.max(e,Math.min(r,t))},l.bBoxIntersect=function(t,e,r){return r=r||0,t.left<=e.right+r&&e.left<=t.right+r&&t.top<=e.bottom+r&&e.top<=t.bottom+r},l.simpleMap=function(t,e,r,n){for(var i=t.length,a=new Array(i),o=0;o<i;o++)a[o]=e(t[o],r,n);return a},l.randstr=function t(e,r,n){if(n||(n=16),void 0===r&&(r=24),r<=0)return"0";var i,a,o,s=Math.log(Math.pow(2,r))/Math.log(n),l="";for(i=2;s===1/0;i*=2)s=Math.log(Math.pow(2,r/i))/Math.log(n)*i;var u=s-Math.floor(s);for(i=0;i<Math.floor(s);i++)o=Math.floor(Math.random()*n).toString(n),l=o+l;u&&(a=Math.pow(n,u),o=Math.floor(Math.random()*a).toString(n),l=o+l);var c=parseInt(l,n);return e&&e.indexOf(l)>-1||c!==1/0&&c>=Math.pow(2,r)?t(e,r,n):l},l.OptionControl=function(t,e){t||(t={}),e||(e="opt");var r={};return r.optionList=[],r._newoption=function(n){n[e]=t,r[n.name]=n,r.optionList.push(n)},r["_"+e]=t,r},l.smooth=function(t,e){if((e=Math.round(e)||0)<2)return t;var r,n,i,a,o=t.length,s=2*o,l=2*e-1,u=new Array(l),c=new Array(o);for(r=0;r<l;r++)u[r]=(1-Math.cos(Math.PI*(r+1)/e))/(2*e);for(r=0;r<o;r++){for(a=0,n=0;n<l;n++)i=r+n+1-e,i<-o?i-=s*Math.round(i/s):i>=s&&(i-=s*Math.floor(i/s)),i<0?i=-1-i:i>=o&&(i=s-1-i),a+=t[i]*u[n];c[r]=a}return c},l.syncOrAsync=function(t,e,r){function n(){return l.syncOrAsync(t,e,r)}for(var i,a;t.length;)if(a=t.splice(0,1)[0],(i=a(e))&&i.then)return i.then(n).then(void 0,l.promiseError);return r&&r(e)},l.stripTrailingSlash=function(t){return"/"===t.substr(-1)?t.substr(0,t.length-1):t},l.noneOrAll=function(t,e,r){if(t){var n,i,a=!1,o=!0;for(n=0;n<r.length;n++)i=t[r[n]],void 0!==i&&null!==i?a=!0:o=!1;if(a&&!o)for(n=0;n<r.length;n++)t[r[n]]=e[r[n]]}},l.mergeArray=function(t,e,r){if(Array.isArray(t))for(var n=Math.min(t.length,e.length),i=0;i<n;i++)e[i][r]=t[i]},l.fillArray=function(t,e,r,n){if(n=n||l.identity,Array.isArray(t))for(var i=0;i<e.length;i++)e[i][r]=n(t[i])},l.castOption=function(t,e,r,n){n=n||l.identity;var i=l.nestedProperty(t,r).get();return Array.isArray(i)?n(Array.isArray(e)&&Array.isArray(i[e[0]])?i[e[0]][e[1]]:i[e]):i},l.extractOption=function(t,e,r,n){if(r in t)return t[r];var i=l.nestedProperty(e,n).get();return Array.isArray(i)?void 0:i},l.getTargetArray=function(t,e){var r=e.target;if("string"==typeof r&&r){var n=l.nestedProperty(t,r).get();return!!Array.isArray(n)&&n}return!!Array.isArray(r)&&r},l.minExtend=function(t,e){var r={};"object"!=typeof e&&(e={});var n,i,a,o=Object.keys(t);for(n=0;n<o.length;n++)i=o[n],a=t[i],"_"!==i.charAt(0)&&"function"!=typeof a&&("module"===i?r[i]=a:Array.isArray(a)?r[i]=a.slice(0,3):r[i]=a&&"object"==typeof a?l.minExtend(t[i],e[i]):a);for(o=Object.keys(e),n=0;n<o.length;n++)i=o[n],"object"==typeof(a=e[i])&&i in r&&"object"==typeof r[i]||(r[i]=a);return r},l.titleCase=function(t){return t.charAt(0).toUpperCase()+t.substr(1)},l.containsAny=function(t,e){for(var r=0;r<e.length;r++)if(-1!==t.indexOf(e[r]))return!0;return!1},l.isPlotDiv=function(t){var e=n.select(t);return e.node()instanceof HTMLElement&&e.size()&&e.classed("js-plotly-plot")},l.removeElement=function(t){var e=t&&t.parentNode;e&&e.removeChild(t)},l.addStyleRule=function(t,e){if(!l.styleSheet){var r=document.createElement("style");r.appendChild(document.createTextNode("")),document.head.appendChild(r),l.styleSheet=r.sheet}var n=l.styleSheet;n.insertRule?n.insertRule(t+"{"+e+"}",0):n.addRule?n.addRule(t,e,0):l.warn("addStyleRule failed")},l.isIE=function(){return void 0!==window.navigator.msSaveBlob},l.isD3Selection=function(t){return t&&"function"==typeof t.classed},l.objectFromPath=function(t,e){for(var r,n=t.split("."),i=r={},a=0;a<n.length;a++){var o=n[a],s=null,l=n[a].match(/(.*)\[([0-9]+)\]/);l?(o=l[1],s=l[2],r=r[o]=[],a===n.length-1?r[s]=e:r[s]={},r=r[s]):(a===n.length-1?r[o]=e:r[o]={},r=r[o])}return i};var b=/^([^\[\.]+)\.(.+)?/,x=/^([^\.]+)\[([0-9]+)\](\.)?(.+)?/;l.expandObjectPaths=function(t){var e,r,n,i,a,o,s;if("object"==typeof t&&!Array.isArray(t))for(r in t)t.hasOwnProperty(r)&&((e=r.match(b))?(i=t[r],n=e[1],delete t[r],t[n]=l.extendDeepNoArrays(t[n]||{},l.objectFromPath(r,l.expandObjectPaths(i))[n])):(e=r.match(x))?(i=t[r],n=e[1],a=parseInt(e[2]),delete t[r],t[n]=t[n]||[],"."===e[3]?(s=e[4],o=t[n][a]=t[n][a]||{},l.extendDeepNoArrays(o,l.objectFromPath(s,l.expandObjectPaths(i)))):t[n][a]=l.expandObjectPaths(i)):t[r]=l.expandObjectPaths(t[r]));return t},l.numSeparate=function(t,e,r){if(r||(r=!1),"string"!=typeof e||0===e.length)throw new Error("Separator string required for formatting!");"number"==typeof t&&(t=String(t));var n=/(\d+)(\d{3})/,i=e.charAt(0),a=e.charAt(1),o=t.split("."),s=o[0],l=o.length>1?i+o[1]:"";if(a&&(o.length>1||s.length>4||r))for(;n.test(s);)s=s.replace(n,"$1"+a+"$2");return s+l};var _=/%{([^\s%{}]*)}/g,w=/^\w*$/;l.templateString=function(t,e){var r={};return t.replace(_,function(t,n){return w.test(n)?e[n]||"":(r[n]=r[n]||l.nestedProperty(e,n).get,r[n]()||"")})}},{"../constants/numerical":707,"./clean_number":712,"./coerce":713,"./dates":714,"./ensure_array":715,"./extend":717,"./filter_unique":718,"./filter_visible":719,"./geometry2d":722,"./get_graph_div":723,"./identity":727,"./is_array":729,"./is_plain_object":730,"./keyed_container":731,"./loggers":732,"./matrix":733,"./mod":734,"./nested_property":735,"./noop":736,"./notifier":737,"./push_unique":740,"./regex":742,"./relative_attr":743,"./relink_private":744,"./search":745,"./stats":748,"./throttle":751,"./to_log_range":752,d3:122,"fast-isnumeric":131}],729:[function(t,e,r){"use strict";var n="undefined"!=typeof ArrayBuffer&&ArrayBuffer.isView?ArrayBuffer:{isView:function(){return!1}};e.exports=function(t){return Array.isArray(t)||n.isView(t)}},{}],730:[function(t,e,r){"use strict";e.exports=function(t){return window&&window.process&&window.process.versions?"[object Object]"===Object.prototype.toString.call(t):"[object Object]"===Object.prototype.toString.call(t)&&Object.getPrototypeOf(t)===Object.prototype}},{}],731:[function(t,e,r){"use strict";var n=t("./nested_property"),i=/^\w*$/;e.exports=function(t,e,r,a){r=r||"name",a=a||"value";var o,s,l={};s=e&&e.length?n(t,e).get():t,e=e||"",s=s||[];var u={};for(o=0;o<s.length;o++)u[s[o][r]]=o;var c=i.test(a),h={set:function(t,e){var i=null===e?4:0,o=u[t];void 0===o?(i|=3,o=s.length,u[t]=o):e!==(c?s[o][a]:n(s[o],a).get())&&(i|=2);var f=s[o]=s[o]||{};return f[r]=t,c?f[a]=e:n(f,a).set(e),null!==e&&(i&=-5),l[o]=l[o]|i,h},get:function(t){var e=u[t];return void 0===e?void 0:c?s[e][a]:n(s[e],a).get()},rename:function(t,e){var n=u[t];return void 0===n?h:(l[n]=1|l[n],u[e]=n,delete u[t],s[n][r]=e,h)},remove:function(t){var e=u[t];if(void 0===e)return h;var i=s[e];if(Object.keys(i).length>2)return l[e]=2|l[e],h.set(t,null);if(c){for(o=e;o<s.length;o++)l[o]=3|l[o];for(o=e;o<s.length;o++)u[s[o][r]]--;s.splice(e,1),delete u[t]}else n(i,a).set(null),l[e]=6|l[e];return h},constructUpdate:function(){for(var t,i,o={},u=Object.keys(l),h=0;h<u.length;h++)i=u[h],t=e+"["+i+"]",s[i]?(1&l[i]&&(o[t+"."+r]=s[i][r]),2&l[i]&&(o[t+"."+a]=c?4&l[i]?null:s[i][a]:4&l[i]?null:n(s[i],a).get())):o[t]=null;return o}};return h}},{"./nested_property":735}],732:[function(t,e,r){"use strict";function n(t,e){if(t.apply)t.apply(t,e);else for(var r=0;r<e.length;r++)t(e[r])}var i=t("../plot_api/plot_config"),a=e.exports={};a.log=function(){if(i.logging>1){for(var t=["LOG:"],e=0;e<arguments.length;e++)t.push(arguments[e]);n(console.trace||console.log,t)}},a.warn=function(){if(i.logging>0){for(var t=["WARN:"],e=0;e<arguments.length;e++)t.push(arguments[e]);n(console.trace||console.log,t)}},a.error=function(){if(i.logging>0){for(var t=["ERROR:"],e=0;e<arguments.length;e++)t.push(arguments[e]);n(console.error,t)}}},{"../plot_api/plot_config":760}],733:[function(t,e,r){"use strict";r.init2dArray=function(t,e){for(var r=new Array(t),n=0;n<t;n++)r[n]=new Array(e);return r},r.transposeRagged=function(t){var e,r,n=0,i=t.length;for(e=0;e<i;e++)n=Math.max(n,t[e].length);var a=new Array(n);for(e=0;e<n;e++)for(a[e]=new Array(i),r=0;r<i;r++)a[e][r]=t[r][e];return a},r.dot=function(t,e){if(!t.length||!e.length||t.length!==e.length)return null;var n,i,a=t.length;if(t[0].length)for(n=new Array(a),i=0;i<a;i++)n[i]=r.dot(t[i],e);else if(e[0].length){var o=r.transposeRagged(e);for(n=new Array(o.length),i=0;i<o.length;i++)n[i]=r.dot(t,o[i])}else for(n=0,i=0;i<a;i++)n+=t[i]*e[i];return n},r.translationMatrix=function(t,e){return[[1,0,t],[0,1,e],[0,0,1]]},r.rotationMatrix=function(t){var e=t*Math.PI/180;return[[Math.cos(e),-Math.sin(e),0],[Math.sin(e),Math.cos(e),0],[0,0,1]]},r.rotationXYMatrix=function(t,e,n){return r.dot(r.dot(r.translationMatrix(e,n),r.rotationMatrix(t)),r.translationMatrix(-e,-n))},r.apply2DTransform=function(t){return function(){var e=arguments;3===e.length&&(e=e[0]);var n=1===arguments.length?e[0]:[e[0],e[1]];return r.dot(t,[n[0],n[1],1]).slice(0,2)}},r.apply2DTransform2=function(t){var e=r.apply2DTransform(t);return function(t){return e(t.slice(0,2)).concat(e(t.slice(2,4)))}}},{}],734:[function(t,e,r){"use strict";e.exports=function(t,e){var r=t%e;return r<0?r+e:r}},{}],735:[function(t,e,r){"use strict";function n(t,e){return function(){var r,i,a,o,s,l=t;for(o=0;o<e.length-1;o++){if(-1===(r=e[o])){for(i=!0,a=[],s=0;s<l.length;s++)a[s]=n(l[s],e.slice(o+1))(),a[s]!==a[0]&&(i=!1);return i?a[0]:a}if("number"==typeof r&&!d(l))return;if("object"!=typeof(l=l[r])||null===l)return}if("object"==typeof l&&null!==l&&null!==(a=l[e[o]]))return a}}function i(t,e){if(!c(t)||p(t)&&"]"===e.charAt(e.length-1)||e.match(v)&&void 0!==t)return!1;if(!d(t))return!0;if(e.match(g))return!0;var r=m(e);return r&&""===r.index}function a(t,e,r){return function(n){var a,c,h=t,f="",p=[[t,f]],m=i(n,r);for(c=0;c<e.length-1;c++){if("number"==typeof(a=e[c])&&!d(h))throw"array index but container is not an array";if(-1===a){if(m=!s(h,e.slice(c+1),n,r))break;return}if(!l(h,a,e[c+1],m))break;if("object"!=typeof(h=h[a])||null===h)throw"container is not an object";f=o(f,a),p.push([h,f])}m?(c===e.length-1&&delete h[e[c]],u(p)):h[e[c]]=n}}function o(t,e){var r=e;return f(e)?r="["+e+"]":t&&(r="."+e),t+r}function s(t,e,r,n){var o,s=d(r),u=!0,c=r,h=n.replace("-1",0),f=!s&&i(r,h),p=e[0];for(o=0;o<t.length;o++)h=n.replace("-1",o),s&&(c=r[o%r.length],f=i(c,h)),f&&(u=!1),l(t,o,p,f)&&a(t[o],e,n.replace("-1",o))(c);return u}function l(t,e,r,n){if(void 0===t[e]){if(n)return!1;t[e]="number"==typeof r?[]:{}}return!0}function u(t){var e,r,n,a,s,l;for(e=t.length-1;e>=0;e--){if(n=t[e][0],a=t[e][1],l=!1,d(n))for(r=n.length-1;r>=0;r--)i(n[r],o(a,r))?l?n[r]=void 0:n.pop():l=!0;else if("object"==typeof n&&null!==n)for(s=Object.keys(n),l=!1,r=s.length-1;r>=0;r--)i(n[s[r]],o(a,s[r]))?delete n[s[r]]:l=!0;if(l)return}}function c(t){return void 0===t||null===t||"object"==typeof t&&(d(t)?!t.length:!Object.keys(t).length)}function h(t,e,r){return{set:function(){throw"bad container"},get:function(){},astr:e,parts:r,obj:t}}var f=t("fast-isnumeric"),d=t("./is_array"),p=t("./is_plain_object"),m=t("../plot_api/container_array_match");e.exports=function(t,e){if(f(e))e=String(e);else if("string"!=typeof e||"[-1]"===e.substr(e.length-4))throw"bad property string";for(var r,i,o,s=0,l=e.split(".");s<l.length;){if(r=String(l[s]).match(/^([^\[\]]*)((\[\-?[0-9]*\])+)$/)){if(r[1])l[s]=r[1];else{if(0!==s)throw"bad property string";l.splice(0,1)}for(i=r[2].substr(1,r[2].length-2).split("]["),o=0;o<i.length;o++)s++,l.splice(s,0,Number(i[o]))}s++}return"object"!=typeof t?h(t,e,l):{set:a(t,l,e),get:n(t,l),astr:e,parts:l,obj:t}};var g=/(^|\.)((domain|range)(\.[xy])?|args|parallels)$/,v=/(^|\.)args\[/},{"../plot_api/container_array_match":755,"./is_array":729,"./is_plain_object":730,"fast-isnumeric":131}],736:[function(t,e,r){"use strict";e.exports=function(){}},{}],737:[function(t,e,r){"use strict";var n=t("d3"),i=t("fast-isnumeric"),a=[];e.exports=function(t,e){function r(t){t.duration(700).style("opacity",0).each("end",function(t){var e=a.indexOf(t);-1!==e&&a.splice(e,1),n.select(this).remove()})}if(-1===a.indexOf(t)){a.push(t);var o=1e3;i(e)?o=e:"long"===e&&(o=3e3);var s=n.select("body").selectAll(".plotly-notifier").data([0]);s.enter().append("div").classed("plotly-notifier",!0);s.selectAll(".notifier-note").data(a).enter().append("div").classed("notifier-note",!0).style("opacity",0).each(function(t){var e=n.select(this);e.append("button").classed("notifier-close",!0).html("&times;").on("click",function(){e.transition().call(r)});for(var i=e.append("p"),a=t.split(/<br\s*\/?>/g),s=0;s<a.length;s++)s&&i.append("br"),i.append("span").text(a[s]);e.transition().duration(700).style("opacity",1).transition().delay(o).call(r)})}}},{d3:122,"fast-isnumeric":131}],738:[function(t,e,r){"use strict";var n=t("./setcursor"),i="data-savedcursor";e.exports=function(t,e){var r=t.attr(i);if(e){if(!r){for(var a=(t.attr("class")||"").split(" "),o=0;o<a.length;o++){var s=a[o];0===s.indexOf("cursor-")&&t.attr(i,s.substr(7)).classed(s,!1)}t.attr(i)||t.attr(i,"!!")}n(t,e)}else r&&(t.attr(i,null),"!!"===r?n(t):n(t,r))}},{"./setcursor":746}],739:[function(t,e,r){"use strict";var n=t("./matrix").dot,i=t("../constants/numerical").BADNUM,a=e.exports={};a.tester=function(t){function e(t,e){var r=t[0],n=t[1];return!(r===i||r<a||r>o||n===i||n<s||n>l)&&(!e||!c(t))}function r(t,e){var r=t[0],u=t[1];if(r===i||r<a||r>o||u===i||u<s||u>l)return!1;var c,h,f,d,p,m=n.length,g=n[0][0],v=n[0][1],y=0;for(c=1;c<m;c++)if(h=g,f=v,g=n[c][0],v=n[c][1],d=Math.min(h,g),!(r<d||r>Math.max(h,g)||u>Math.max(f,v)))if(u<Math.min(f,v))r!==d&&y++;else{if(p=g===h?u:f+(r-h)*(v-f)/(g-h),u===p)return 1!==c||!e;u<=p&&r!==d&&y++}return y%2==1}var n=t.slice(),a=n[0][0],o=a,s=n[0][1],l=s;n.push(n[0]);for(var u=1;u<n.length;u++)a=Math.min(a,n[u][0]),o=Math.max(o,n[u][0]),s=Math.min(s,n[u][1]),l=Math.max(l,n[u][1]);var c,h=!1;return 5===n.length&&(n[0][0]===n[1][0]?n[2][0]===n[3][0]&&n[0][1]===n[3][1]&&n[1][1]===n[2][1]&&(h=!0,c=function(t){return t[0]===n[0][0]}):n[0][1]===n[1][1]&&n[2][1]===n[3][1]&&n[0][0]===n[3][0]&&n[1][0]===n[2][0]&&(h=!0,c=function(t){return t[1]===n[0][1]})),{xmin:a,xmax:o,ymin:s,ymax:l,pts:n,contains:h?e:r,isRect:h}};var o=a.isSegmentBent=function(t,e,r,i){var a,o,s,l=t[e],u=[t[r][0]-l[0],t[r][1]-l[1]],c=n(u,u),h=Math.sqrt(c),f=[-u[1]/h,u[0]/h];for(a=e+1;a<r;a++)if(o=[t[a][0]-l[0],t[a][1]-l[1]],(s=n(o,u))<0||s>c||Math.abs(n(o,f))>i)return!0;return!1};a.filter=function(t,e){function r(r){t.push(r);var s=n.length,l=i;n.splice(a+1);for(var u=l+1;u<t.length;u++)(u===t.length-1||o(t,l,u+1,e))&&(n.push(t[u]),n.length<s-2&&(i=u,a=n.length-1),l=u)}var n=[t[0]],i=0,a=0;if(t.length>1){r(t.pop())}return{addPt:r,raw:t,filtered:n}}},{"../constants/numerical":707,"./matrix":733}],740:[function(t,e,r){"use strict";e.exports=function(t,e){if(e instanceof RegExp){var r,n=e.toString();for(r=0;r<t.length;r++)if(t[r]instanceof RegExp&&t[r].toString()===n)return t;t.push(e)}else e&&-1===t.indexOf(e)&&t.push(e);return t}},{}],741:[function(t,e,r){"use strict";function n(t,e){for(var r,n=[],a=0;a<e.length;a++)r=e[a],n[a]=r===t?r:"object"==typeof r?Array.isArray(r)?i.extendDeep([],r):i.extendDeepAll({},r):r;return n}var i=t("../lib"),a=t("../plot_api/plot_config"),o={};o.add=function(t,e,r,n,i){var o,s;if(t.undoQueue=t.undoQueue||{index:0,queue:[],sequence:!1},s=t.undoQueue.index,t.autoplay)return void(t.undoQueue.inSequence||(t.autoplay=!1));!t.undoQueue.sequence||t.undoQueue.beginSequence?(o={undo:{calls:[],args:[]},redo:{calls:[],args:[]}},t.undoQueue.queue.splice(s,t.undoQueue.queue.length-s,o),t.undoQueue.index+=1):o=t.undoQueue.queue[s-1],t.undoQueue.beginSequence=!1,o&&(o.undo.calls.unshift(e),o.undo.args.unshift(r),o.redo.calls.push(n),o.redo.args.push(i)),t.undoQueue.queue.length>a.queueLength&&(t.undoQueue.queue.shift(),t.undoQueue.index--)},o.startSequence=function(t){t.undoQueue=t.undoQueue||{index:0,queue:[],sequence:!1},t.undoQueue.sequence=!0,t.undoQueue.beginSequence=!0},o.stopSequence=function(t){t.undoQueue=t.undoQueue||{index:0,queue:[],sequence:!1},t.undoQueue.sequence=!1,t.undoQueue.beginSequence=!1},o.undo=function(t){var e,r;if(t.framework&&t.framework.isPolar)return void t.framework.undo();if(!(void 0===t.undoQueue||isNaN(t.undoQueue.index)||t.undoQueue.index<=0)){for(t.undoQueue.index--,e=t.undoQueue.queue[t.undoQueue.index],t.undoQueue.inSequence=!0,r=0;r<e.undo.calls.length;r++)o.plotDo(t,e.undo.calls[r],e.undo.args[r]);t.undoQueue.inSequence=!1,t.autoplay=!1}},o.redo=function(t){var e,r;if(t.framework&&t.framework.isPolar)return void t.framework.redo();if(!(void 0===t.undoQueue||isNaN(t.undoQueue.index)||t.undoQueue.index>=t.undoQueue.queue.length)){for(e=t.undoQueue.queue[t.undoQueue.index],t.undoQueue.inSequence=!0,r=0;r<e.redo.calls.length;r++)o.plotDo(t,e.redo.calls[r],e.redo.args[r]);t.undoQueue.inSequence=!1,t.autoplay=!1,t.undoQueue.index++}},o.plotDo=function(t,e,r){t.autoplay=!0,r=n(t,r),e.apply(null,r)},e.exports=o},{"../lib":728,"../plot_api/plot_config":760}],742:[function(t,e,r){"use strict";r.counter=function(t,e,r){return new RegExp("^"+t+"([2-9]|[1-9][0-9]+)?"+(e||"")+(r?"":"$"))}},{}],743:[function(t,e,r){"use strict";var n=/^(.*)(\.[^\.\[\]]+|\[\d\])$/,i=/^[^\.\[\]]+$/;e.exports=function(t,e){for(;e;){var r=t.match(n);if(r)t=r[1];else{if(!t.match(i))throw new Error("bad relativeAttr call:"+[t,e]);t=""}if("^"!==e.charAt(0))break;e=e.slice(1)}return t&&"["!==e.charAt(0)?t+"."+e:t+e}},{}],744:[function(t,e,r){"use strict";var n=t("./is_array"),i=t("./is_plain_object");e.exports=function t(e,r){for(var a=Object.keys(r||{}),o=0;o<a.length;o++){var s=a[o],l=r[s],u=e[s];if("_"===s.charAt(0)||"function"==typeof l){if(s in e)continue;e[s]=l}else if(n(l)&&n(u)&&i(l[0]))for(var c=0;c<l.length;c++)i(l[c])&&i(u[c])&&t(u[c],l[c]);else i(l)&&i(u)&&(t(u,l),Object.keys(u).length||delete e[s])}}},{"./is_array":729,"./is_plain_object":730}],745:[function(t,e,r){"use strict";function n(t,e){return t<e}function i(t,e){return t<=e}function a(t,e){return t>e}function o(t,e){return t>=e}var s=t("fast-isnumeric"),l=t("./loggers");r.findBin=function(t,e,r){if(s(e.start))return r?Math.ceil((t-e.start)/e.size)-1:Math.floor((t-e.start)/e.size);var u,c,h=0,f=e.length,d=0;for(c=e[e.length-1]>=e[0]?r?n:i:r?o:a;h<f&&d++<100;)u=Math.floor((h+f)/2),c(e[u],t)?h=u+1:f=u;return d>90&&l.log("Long binary search..."),h-1},r.sorterAsc=function(t,e){return t-e},r.sorterDes=function(t,e){return e-t},r.distinctVals=function(t){var e=t.slice();e.sort(r.sorterAsc);for(var n=e.length-1,i=e[n]-e[0]||1,a=i/(n||1)/1e4,o=[e[0]],s=0;s<n;s++)e[s+1]>e[s]+a&&(i=Math.min(i,e[s+1]-e[s]),o.push(e[s+1]));return{vals:o,minDiff:i}},r.roundUp=function(t,e,r){for(var n,i=0,a=e.length-1,o=0,s=r?0:1,l=r?1:0,u=r?Math.ceil:Math.floor;i<a&&o++<100;)n=u((i+a)/2),e[n]<=t?i=n+s:a=n-l;return e[i]}},{"./loggers":732,"fast-isnumeric":131}],746:[function(t,e,r){"use strict";e.exports=function(t,e){(t.attr("class")||"").split(" ").forEach(function(e){0===e.indexOf("cursor-")&&t.classed(e,!1)}),e&&t.classed("cursor-"+e,!0)}},{}],747:[function(t,e,r){"use strict";var n=t("../components/color"),i=function(){};e.exports=function(t){for(var e in t)"function"==typeof t[e]&&(t[e]=i);t.destroy=function(){t.container.parentNode.removeChild(t.container)};var r=document.createElement("div");return r.textContent="Webgl is not supported by your browser - visit http://get.webgl.org for more info",r.style.cursor="pointer",r.style.fontSize="24px",r.style.color=n.defaults[0],t.container.appendChild(r),t.container.style.background="#FFFFFF",t.container.onclick=function(){window.open("http://get.webgl.org")},!1}},{"../components/color":604}],748:[function(t,e,r){"use strict";var n=t("fast-isnumeric");r.aggNums=function(t,e,i,a){var o,s;if(a||(a=i.length),n(e)||(e=!1),Array.isArray(i[0])){for(s=new Array(a),o=0;o<a;o++)s[o]=r.aggNums(t,e,i[o]);i=s}for(o=0;o<a;o++)n(e)?n(i[o])&&(e=t(+e,+i[o])):e=i[o];return e},r.len=function(t){return r.aggNums(function(t){return t+1},0,t)},r.mean=function(t,e){return e||(e=r.len(t)),r.aggNums(function(t,e){return t+e},0,t)/e},r.variance=function(t,e,i){return e||(e=r.len(t)),n(i)||(i=r.mean(t,e)),r.aggNums(function(t,e){return t+Math.pow(e-i,2)},0,t)/e},r.stdev=function(t,e,n){return Math.sqrt(r.variance(t,e,n))},r.interp=function(t,e){if(!n(e))throw"n should be a finite number";if((e=e*t.length-.5)<0)return t[0];if(e>t.length-1)return t[t.length-1];var r=e%1;return r*t[Math.ceil(e)]+(1-r)*t[Math.floor(e)]}},{"fast-isnumeric":131}],749:[function(t,e,r){"use strict";function n(t){var e=i(t);return e.length?e:[0,0,0,1]}var i=t("color-rgba");e.exports=n},{"color-rgba":95}],750:[function(t,e,r){"use strict";function n(t,e){return t.node().getBoundingClientRect()[e]}function i(t){return t.replace(v,"\\lt ").replace(y,"\\gt ")}function a(t,e,r){var n="math-output-"+f.randstr([],64),a=h.select("body").append("div").attr({id:n}).style({visibility:"hidden",position:"absolute"}).style({"font-size":e.fontSize+"px"}).text(i(t));MathJax.Hub.Queue(["Typeset",MathJax.Hub,a.node()],function(){var e=h.select("body").select("#MathJax_SVG_glyphs")
;if(a.select(".MathJax_SVG").empty()||!a.select("svg").node())f.log("There was an error in the tex syntax.",t),r();else{var n=a.select("svg").node().getBoundingClientRect();r(a.select(".MathJax_SVG"),e,n)}a.remove()})}function o(t,e){if(!t)return null;var r=t.match(e);return r&&(r[3]||r[4])}function s(t,e){if(!t)return"";for(var r=0;r<e.length;r++){var n=e[r];t=t.replace(n.regExp,n.sub)}return t}function l(t){return s(t,A)}function u(t,e){function r(){c++;var e=document.createElementNS(d.svg,"tspan");h.select(e).attr({class:"line",dy:c*m+"em"}),t.appendChild(e),a=e;var r=u;if(u=[{node:e}],r.length>1)for(var i=1;i<r.length;i++)n(r[i])}function n(t){var e,r=t.type,n={};if("a"===r){e="a";var o=t.target,s=t.href,l=t.popup;s&&(n={"xlink:xlink:show":"_blank"===o||"_"!==o.charAt(0)?"new":"replace",target:o,"xlink:xlink:href":s},l&&(n.onclick='window.open(this.href.baseVal,this.target.baseVal,"'+l+'");return false;'))}else e="tspan";t.style&&(n.style=t.style);var c=document.createElementNS(d.svg,e);if("sup"===r||"sub"===r){i(a,w),a.appendChild(c);var f=document.createElementNS(d.svg,"tspan");i(f,w),h.select(f).attr("dy",_[r]),n.dy=x[r],a.appendChild(c),a.appendChild(f)}else a.appendChild(c);h.select(c).attr(n),a=t.node=c,u.push(t)}function i(t,e){t.appendChild(document.createTextNode(e))}e=l(e).replace(T," ");var a,s=!1,u=[],c=-1;L.test(e)?r():(a=t,u=[{node:t}]);for(var p=e.split(S),g=0;g<p.length;g++){var v=p[g],y=v.match(E),k=y&&y[2].toLowerCase(),A=b[k];if("br"===k)r();else if(void 0===A)i(a,v);else if(y[1])!function(t){if(1===u.length)return void f.log("Ignoring unexpected end tag </"+t+">.",e);var r=u.pop();t!==r.type&&f.log("Start tag <"+r.type+"> doesnt match end tag <"+t+">. Pretending it did match.",e),a=u[u.length-1].node}(k);else{var O=y[4],R={type:k},F=o(O,C);if(F?(F=F.replace(P,"$1 fill:"),A&&(F+=";"+A)):A&&(F=A),F&&(R.style=F),"a"===k){s=!0;var j=o(O,I);if(j){var N=document.createElement("a");N.href=j,-1!==M.indexOf(N.protocol)&&(R.href=encodeURI(j),R.target=o(O,z)||"_blank",R.popup=o(O,D))}}n(R)}}return s}function c(t,e,r){var n,i,a,o=r.horizontalAlign,s=r.verticalAlign||"top",l=t.node().getBoundingClientRect(),u=e.node().getBoundingClientRect();return i="bottom"===s?function(){return l.bottom-n.height}:"middle"===s?function(){return l.top+(l.height-n.height)/2}:function(){return l.top},a="right"===o?function(){return l.right-n.width}:"center"===o?function(){return l.left+(l.width-n.width)/2}:function(){return l.left},function(){return n=this.node().getBoundingClientRect(),this.style({top:i()-u.top+"px",left:a()-u.left+"px","z-index":1e3}),this}}var h=t("d3"),f=t("../lib"),d=t("../constants/xmlns_namespaces"),p=t("../constants/string_mappings"),m=t("../constants/alignment").LINE_SPACING,g=/([^$]*)([$]+[^$]*[$]+)([^$]*)/;r.convertToTspans=function(t,e,i){function o(){c.empty()||(f=t.attr("class")+"-math",c.select("svg."+f).remove()),t.text("").style("white-space","pre"),u(t.node(),s)&&t.style("pointer-events","all"),r.positionText(t),i&&i.call(t)}var s=t.text(),l=!t.attr("data-notex")&&"undefined"!=typeof MathJax&&s.match(g),c=h.select(t.node().parentNode);if(!c.empty()){var f=t.attr("class")?t.attr("class").split(" ")[0]:"text";return f+="-math",c.selectAll("svg."+f).remove(),c.selectAll("g."+f+"-group").remove(),t.style("display",null).attr({"data-unformatted":s,"data-math":"N"}),l?(e&&e._promises||[]).push(new Promise(function(e){t.style("display","none");var r=parseInt(t.node().style.fontSize,10);a(l[2],{fontSize:r},function(a,l,u){c.selectAll("svg."+f).remove(),c.selectAll("g."+f+"-group").remove();var h=a&&a.select("svg");if(!h||!h.node())return o(),void e();var d=c.append("g").classed(f+"-group",!0).attr({"pointer-events":"none","data-unformatted":s,"data-math":"Y"});d.node().appendChild(h.node()),l&&l.node()&&h.node().insertBefore(l.node().cloneNode(!0),h.node().firstChild),h.attr({class:f,height:u.height,preserveAspectRatio:"xMinYMin meet"}).style({overflow:"visible","pointer-events":"none"});var p=t.node().style.fill||"black";h.select("g").attr({fill:p,stroke:p});var m=n(h,"width"),g=n(h,"height"),v=+t.attr("x")-m*{start:0,middle:.5,end:1}[t.attr("text-anchor")||"start"],y=r||n(t,"height"),b=-y/4;"y"===f[0]?(d.attr({transform:"rotate("+[-90,+t.attr("x"),+t.attr("y")]+") translate("+[-m/2,b-g/2]+")"}),h.attr({x:+t.attr("x"),y:+t.attr("y")})):"l"===f[0]?h.attr({x:t.attr("x"),y:b-g/2}):"a"===f[0]?h.attr({x:0,y:b}):h.attr({x:v,y:+t.attr("y")+b-g/2}),i&&i.call(t,d),e(d)})})):o(),t}};var v=/(<|&lt;|&#60;)/g,y=/(>|&gt;|&#62;)/g,b={sup:"font-size:70%",sub:"font-size:70%",b:"font-weight:bold",i:"font-style:italic",a:"cursor:pointer",span:"",em:"font-style:italic;font-weight:bold"},x={sub:"0.3em",sup:"-0.6em"},_={sub:"-0.21em",sup:"0.42em"},w="\u200b",M=["http:","https:","mailto:","",void 0,":"],k=new RegExp("</?("+Object.keys(b).join("|")+")( [^>]*)?/?>","g"),A=Object.keys(p.entityToUnicode).map(function(t){return{regExp:new RegExp("&"+t+";","g"),sub:p.entityToUnicode[t]}}),T=/(\r\n?|\n)/g,S=/(<[^<>]*>)/,E=/<(\/?)([^ >]*)(\s+(.*))?>/i,L=/<br(\s+.*)?>/i,C=/(^|[\s"'])style\s*=\s*("([^"]*);?"|'([^']*);?')/i,I=/(^|[\s"'])href\s*=\s*("([^"]*)"|'([^']*)')/i,z=/(^|[\s"'])target\s*=\s*("([^"\s]*)"|'([^'\s]*)')/i,D=/(^|[\s"'])popup\s*=\s*("([\w=,]*)"|'([\w=,]*)')/i,P=/(^|;)\s*color:/;r.plainText=function(t){return(t||"").replace(k," ")},r.lineCount=function(t){return t.selectAll("tspan.line").size()||1},r.positionText=function(t,e,r){return t.each(function(){function t(t,e){return void 0===e?null===(e=n.attr(t))&&(n.attr(t,0),e=0):n.attr(t,e),e}var n=h.select(this),i=t("x",e),a=t("y",r);"text"===this.nodeName&&n.selectAll("tspan.line").attr({x:i,y:a})})},r.makeEditable=function(t,e){function r(){i(),t.style({opacity:0});var e,r=l.attr("class");(e=r?"."+r.split(" ")[0]+"-math-group":"[class*=-math-group]")&&h.select(t.node().parentNode).select(e).style({opacity:0})}function n(t){var e=t.node(),r=document.createRange();r.selectNodeContents(e);var n=window.getSelection();n.removeAllRanges(),n.addRange(r),e.focus()}function i(){var r=h.select(a),i=r.select(".svg-container"),o=i.append("div"),l=t.node().style,u=parseFloat(l.fontSize||12);o.classed("plugin-editable editable",!0).style({position:"absolute","font-family":l.fontFamily||"Arial","font-size":u,color:e.fill||l.fill||"black",opacity:1,"background-color":e.background||"transparent",outline:"#ffffff33 1px solid",margin:[-u/8+1,0,0,-1].join("px ")+"px",padding:"0","box-sizing":"border-box"}).attr({contenteditable:!0}).text(e.text||t.attr("data-unformatted")).call(c(t,i,e)).on("blur",function(){a._editing=!1,t.text(this.textContent).style({opacity:1});var e,r=h.select(this).attr("class");(e=r?"."+r.split(" ")[0]+"-math-group":"[class*=-math-group]")&&h.select(t.node().parentNode).select(e).style({opacity:0});var n=this.textContent;h.select(this).transition().duration(0).remove(),h.select(document).on("mouseup",null),s.edit.call(t,n)}).on("focus",function(){var t=this;a._editing=!0,h.select(document).on("mouseup",function(){if(h.event.target===t)return!1;document.activeElement===o.node()&&o.node().blur()})}).on("keyup",function(){27===h.event.which?(a._editing=!1,t.style({opacity:1}),h.select(this).style({opacity:0}).on("blur",function(){return!1}).transition().remove(),s.cancel.call(t,this.textContent)):(s.input.call(t,this.textContent),h.select(this).call(c(t,i,e)))}).on("keydown",function(){13===h.event.which&&this.blur()}).call(n)}var a=e.gd,o=e.delegate,s=h.dispatch("edit","input","cancel"),l=o||t;if(t.style({"pointer-events":o?"none":"all"}),1!==t.size())throw new Error("boo");return e.immediate?r():l.on("click",r),h.rebind(t,s,"on")}},{"../constants/alignment":701,"../constants/string_mappings":708,"../constants/xmlns_namespaces":709,"../lib":728,d3:122}],751:[function(t,e,r){"use strict";function n(t){t&&null!==t.timer&&(clearTimeout(t.timer),t.timer=null)}var i={};r.throttle=function(t,e,r){function a(){r(),o.ts=Date.now(),o.onDone&&(o.onDone(),o.onDone=null)}var o=i[t],s=Date.now();if(!o){for(var l in i)i[l].ts<s-6e4&&delete i[l];o=i[t]={ts:0,timer:null}}if(n(o),s>o.ts+e)return void a();o.timer=setTimeout(function(){a(),o.timer=null},e)},r.done=function(t){var e=i[t];return e&&e.timer?new Promise(function(t){var r=e.onDone;e.onDone=function(){r&&r(),t(),e.onDone=null}}):Promise.resolve()},r.clear=function(t){if(t)n(i[t]),delete i[t];else for(var e in i)r.clear(e)}},{}],752:[function(t,e,r){"use strict";var n=t("fast-isnumeric");e.exports=function(t,e){if(t>0)return Math.log(t)/Math.LN10;var r=Math.log(Math.min(e[0],e[1]))/Math.LN10;return n(r)||(r=Math.log(Math.max(e[0],e[1]))/Math.LN10-6),r}},{"fast-isnumeric":131}],753:[function(t,e,r){"use strict";var n=e.exports={},i=t("../plots/geo/constants").locationmodeToLayer,a=t("topojson-client").feature;n.getTopojsonName=function(t){return[t.scope.replace(/ /g,"-"),"_",t.resolution.toString(),"m"].join("")},n.getTopojsonPath=function(t,e){return t+e+".json"},n.getTopojsonFeatures=function(t,e){var r=i[t.locationmode],n=e.objects[r];return a(e,n).features}},{"../plots/geo/constants":798,"topojson-client":536}],754:[function(t,e,r){"use strict";function n(t,e){for(var r=new Float32Array(e),n=0;n<e;n++)r[n]=t[n];return r}function i(t,e){for(var r=new Float64Array(e),n=0;n<e;n++)r[n]=t[n];return r}e.exports=function(t,e){if(t instanceof Float32Array)return n(t,e);if(t instanceof Float64Array)return i(t,e);throw new Error("This array type is not yet supported by `truncate`.")}},{}],755:[function(t,e,r){"use strict";var n=t("../registry");e.exports=function(t){for(var e,r,i=n.layoutArrayContainers,a=n.layoutArrayRegexes,o=t.split("[")[0],s=0;s<a.length;s++)if((r=t.match(a[s]))&&0===r.index){e=r[0];break}if(e||(e=i[i.indexOf(o)]),!e)return!1;var l=t.substr(e.length);return l?!!(r=l.match(/^\[(0|[1-9][0-9]*)\](\.(.+))?$/))&&{array:e,index:Number(r[1]),property:r[3]||""}:{array:e,index:"",property:""}}},{"../registry":846}],756:[function(t,e,r){"use strict";function n(t){for(var e={},r=0;r<t.length;r++)e[t[r]]=!1;return e}function i(t,e,r){var n=s({},t);for(var i in n){var o=n[i];l(o)&&(n[i]=a(o,e,r,i))}return"from-root"===r&&(n.editType=e),n}function a(t,e,r,n){if(t.valType){var o=s({},t);if(o.editType=e,Array.isArray(t.items)){o.items=new Array(t.items.length);for(var l=0;l<t.items.length;l++)o.items[l]=a(t.items[l],e,"from-root")}return o}return i(t,e,"_"===n.charAt(0)?"nested":"from-root")}var o=t("../lib"),s=o.extendFlat,l=o.isPlainObject,u={valType:"flaglist",extras:["none"],flags:["calc","calcIfAutorange","clearAxisTypes","plot","style","colorbars"]},c={valType:"flaglist",extras:["none"],flags:["calc","calcIfAutorange","plot","legend","ticks","layoutstyle","modebar","camera","arraydraw"]},h=u.flags.slice().concat(["clearCalc","fullReplot"]),f=c.flags.slice().concat("layoutReplot");e.exports={traces:u,layout:c,traceFlags:function(){return n(h)},layoutFlags:function(){return n(f)},update:function(t,e){var r=e.editType;if(r&&"none"!==r)for(var n=r.split("+"),i=0;i<n.length;i++)t[n[i]]=!0},overrideAll:i}},{"../lib":728}],757:[function(t,e,r){"use strict";function n(t,e){var r=t[e],n=e.charAt(0);r&&"paper"!==r&&(t[e]=f.cleanId(r,n))}function i(t){var e="middle",r="center";return-1!==t.indexOf("top")?e="top":-1!==t.indexOf("bottom")&&(e="bottom"),-1!==t.indexOf("left")?r="left":-1!==t.indexOf("right")&&(r="right"),e+" "+r}function a(t,e){return e in t&&"object"==typeof t[e]&&0===Object.keys(t[e]).length}function o(t){var e=t.search(p);if(e>0)return t.substr(0,e)}var s=t("fast-isnumeric"),l=t("gl-mat4/fromQuat"),u=t("../registry"),c=t("../lib"),h=t("../plots/plots"),f=t("../plots/cartesian/axes"),d=t("../components/color");r.clearPromiseQueue=function(t){Array.isArray(t._promises)&&t._promises.length>0&&c.log("Clearing previous rejected promises from queue."),t._promises=[]},r.cleanLayout=function(t){var e,r;t||(t={}),t.xaxis1&&(t.xaxis||(t.xaxis=t.xaxis1),delete t.xaxis1),t.yaxis1&&(t.yaxis||(t.yaxis=t.yaxis1),delete t.yaxis1);var i=f.list({_fullLayout:t});for(e=0;e<i.length;e++){var o=i[e];o.anchor&&"free"!==o.anchor&&(o.anchor=f.cleanId(o.anchor)),o.overlaying&&(o.overlaying=f.cleanId(o.overlaying)),o.type||(o.isdate?o.type="date":o.islog?o.type="log":!1===o.isdate&&!1===o.islog&&(o.type="linear")),"withzero"!==o.autorange&&"tozero"!==o.autorange||(o.autorange=!0,o.rangemode="tozero"),delete o.islog,delete o.isdate,delete o.categories,a(o,"domain")&&delete o.domain,void 0!==o.autotick&&(void 0===o.tickmode&&(o.tickmode=o.autotick?"auto":"linear"),delete o.autotick)}var s=Array.isArray(t.annotations)?t.annotations.length:0;for(e=0;e<s;e++){var u=t.annotations[e];c.isPlainObject(u)&&(u.ref&&("paper"===u.ref?(u.xref="paper",u.yref="paper"):"data"===u.ref&&(u.xref="x",u.yref="y"),delete u.ref),n(u,"xref"),n(u,"yref"))}var p=Array.isArray(t.shapes)?t.shapes.length:0;for(e=0;e<p;e++){var m=t.shapes[e];c.isPlainObject(m)&&(n(m,"xref"),n(m,"yref"))}var g=t.legend;g&&(g.x>3?(g.x=1.02,g.xanchor="left"):g.x<-2&&(g.x=-.02,g.xanchor="right"),g.y>3?(g.y=1.02,g.yanchor="bottom"):g.y<-2&&(g.y=-.02,g.yanchor="top")),"rotate"===t.dragmode&&(t.dragmode="orbit"),t.scene1&&(t.scene||(t.scene=t.scene1),delete t.scene1);var v=h.getSubplotIds(t,"gl3d");for(e=0;e<v.length;e++){var y=t[v[e]],b=y.cameraposition;if(Array.isArray(b)&&4===b[0].length){var x=b[0],_=b[1],w=b[2],M=l([],x),k=[];for(r=0;r<3;++r)k[r]=_[e]+w*M[2+4*r];y.camera={eye:{x:k[0],y:k[1],z:k[2]},center:{x:_[0],y:_[1],z:_[2]},up:{x:M[1],y:M[5],z:M[9]}},delete y.cameraposition}}return d.clean(t),t},r.cleanData=function(t,e){for(var n=[],o=(t.concat(Array.isArray(e)?e:[]).filter(function(t){return"uid"in t}).map(function(t){return t.uid})),s=0;s<t.length;s++){var l,p=t[s];if(!("uid"in p)||-1!==n.indexOf(p.uid)){var m;for(l=0;l<100&&(m=c.randstr(o),-1!==n.indexOf(m));l++);p.uid=c.randstr(o),o.push(p.uid)}if(n.push(p.uid),"histogramy"===p.type&&"xbins"in p&&!("ybins"in p)&&(p.ybins=p.xbins,delete p.xbins),p.error_y&&"opacity"in p.error_y){var g=d.defaults,v=p.error_y.color||(u.traceIs(p,"bar")?d.defaultLine:g[s%g.length]);p.error_y.color=d.addOpacity(d.rgb(v),d.opacity(v)*p.error_y.opacity),delete p.error_y.opacity}if("bardir"in p&&("h"!==p.bardir||!u.traceIs(p,"bar")&&"histogram"!==p.type.substr(0,9)||(p.orientation="h",r.swapXYData(p)),delete p.bardir),"histogramy"===p.type&&r.swapXYData(p),"histogramx"!==p.type&&"histogramy"!==p.type||(p.type="histogram"),"scl"in p&&(p.colorscale=p.scl,delete p.scl),"reversescl"in p&&(p.reversescale=p.reversescl,delete p.reversescl),p.xaxis&&(p.xaxis=f.cleanId(p.xaxis,"x")),p.yaxis&&(p.yaxis=f.cleanId(p.yaxis,"y")),u.traceIs(p,"gl3d")&&p.scene&&(p.scene=h.subplotsRegistry.gl3d.cleanId(p.scene)),u.traceIs(p,"pie")||u.traceIs(p,"bar")||(Array.isArray(p.textposition)?p.textposition=p.textposition.map(i):p.textposition&&(p.textposition=i(p.textposition))),u.traceIs(p,"2dMap")&&("YIGnBu"===p.colorscale&&(p.colorscale="YlGnBu"),"YIOrRd"===p.colorscale&&(p.colorscale="YlOrRd")),u.traceIs(p,"markerColorscale")&&p.marker){var y=p.marker;"YIGnBu"===y.colorscale&&(y.colorscale="YlGnBu"),"YIOrRd"===y.colorscale&&(y.colorscale="YlOrRd")}if("surface"===p.type&&c.isPlainObject(p.contours)){var b=["x","y","z"];for(l=0;l<b.length;l++){var x=p.contours[b[l]];c.isPlainObject(x)&&(x.highlightColor&&(x.highlightcolor=x.highlightColor,delete x.highlightColor),x.highlightWidth&&(x.highlightwidth=x.highlightWidth,delete x.highlightWidth))}}if(Array.isArray(p.transforms)){var _=p.transforms;for(l=0;l<_.length;l++){var w=_[l];if(c.isPlainObject(w))switch(w.type){case"filter":w.filtersrc&&(w.target=w.filtersrc,delete w.filtersrc),w.calendar&&(w.valuecalendar||(w.valuecalendar=w.calendar),delete w.calendar);break;case"groupby":if(w.styles=w.styles||w.style,w.styles&&!Array.isArray(w.styles)){var M=w.styles,k=Object.keys(M);w.styles=[];for(var A=0;A<k.length;A++)w.styles.push({target:k[A],value:M[k[A]]})}}}}a(p,"line")&&delete p.line,"marker"in p&&(a(p.marker,"line")&&delete p.marker.line,a(p,"marker")&&delete p.marker),d.clean(p)}},r.swapXYData=function(t){var e;if(c.swapAttrs(t,["?","?0","d?","?bins","nbins?","autobin?","?src","error_?"]),Array.isArray(t.z)&&Array.isArray(t.z[0])&&(t.transpose?delete t.transpose:t.transpose=!0),t.error_x&&t.error_y){var r=t.error_y,n="copy_ystyle"in r?r.copy_ystyle:!(r.color||r.thickness||r.width);c.swapAttrs(t,["error_?.copy_ystyle"]),n&&c.swapAttrs(t,["error_?.color","error_?.thickness","error_?.width"])}if("string"==typeof t.hoverinfo){var i=t.hoverinfo.split("+");for(e=0;e<i.length;e++)"x"===i[e]?i[e]="y":"y"===i[e]&&(i[e]="x");t.hoverinfo=i.join("+")}},r.coerceTraceIndices=function(t,e){return s(e)?[e]:Array.isArray(e)&&e.length?e:t.data.map(function(t,e){return e})},r.manageArrayContainers=function(t,e,r){var n=t.obj,i=t.parts,a=i.length,o=i[a-1],l=s(o);if(l&&null===e){var u=i.slice(0,a-1).join(".");c.nestedProperty(n,u).get().splice(o,1)}else l&&void 0===t.get()?(void 0===t.get()&&(r[t.astr]=null),t.set(e)):t.set(e)};var p=/(\.[^\[\]\.]+|\[[^\[\]\.]+\])$/;r.hasParent=function(t,e){for(var r=o(e);r;){if(r in t)return!0;r=o(r)}return!1};var m=["x","y","z"];r.clearAxisTypes=function(t,e,r){for(var n=0;n<e.length;n++)for(var i=t._fullData[n],a=0;a<3;a++){var o=f.getFromTrace(t,i,m[a]);if(o&&"log"!==o.type){var s=o._name,l=o._id.substr(1);if("scene"===l.substr(0,5)){if(void 0!==r[l])continue;s=l+"."+s}var u=s+".type";void 0===r[s]&&void 0===r[u]&&c.nestedProperty(t.layout,u).set(null)}}}},{"../components/color":604,"../lib":728,"../plots/cartesian/axes":772,"../plots/plots":831,"../registry":846,"fast-isnumeric":131,"gl-mat4/fromQuat":178}],758:[function(t,e,r){"use strict";var n=t("../lib/nested_property"),i=t("../lib/is_plain_object"),a=t("../lib/noop"),o=t("../lib/loggers"),s=t("../lib/search").sorterAsc,l=t("../registry");r.containerArrayMatch=t("./container_array_match");var u=r.isAddVal=function(t){return"add"===t||i(t)},c=r.isRemoveVal=function(t){return null===t||"remove"===t};r.applyContainerArrayChanges=function(t,e,r,i){var h=e.astr,f=l.getComponentMethod(h,"supplyLayoutDefaults"),d=l.getComponentMethod(h,"draw"),p=l.getComponentMethod(h,"drawOne"),m=i.replot||i.recalc||f===a||d===a,g=t.layout,v=t._fullLayout;if(r[""]){Object.keys(r).length>1&&o.warn("Full array edits are incompatible with other edits",h);var y=r[""][""];if(c(y))e.set(null);else{if(!Array.isArray(y))return o.warn("Unrecognized full array edit value",h,y),!0;e.set(y)}return!m&&(f(g,v),d(t),!0)}var b,x,_,w,M,k,A,T=Object.keys(r).map(Number).sort(s),S=e.get(),E=S||[],L=n(v,h).get(),C=[],I=-1,z=E.length;for(b=0;b<T.length;b++)if(_=T[b],w=r[_],M=Object.keys(w),k=w[""],A=u(k),_<0||_>E.length-(A?0:1))o.warn("index out of range",h,_);else if(void 0!==k)M.length>1&&o.warn("Insertion & removal are incompatible with edits to the same index.",h,_),c(k)?C.push(_):A?("add"===k&&(k={}),E.splice(_,0,k),L&&L.splice(_,0,{})):o.warn("Unrecognized full object edit value",h,_,k),-1===I&&(I=_);else for(x=0;x<M.length;x++)n(E[_],M[x]).set(w[M[x]]);for(b=C.length-1;b>=0;b--)E.splice(C[b],1),L&&L.splice(C[b],1);if(E.length?S||e.set(E):e.set(null),m)return!1;if(f(g,v),p!==a){var D;if(-1===I)D=T;else{for(z=Math.max(E.length,z),D=[],b=0;b<T.length&&!((_=T[b])>=I);b++)D.push(_);for(b=I;b<z;b++)D.push(b)}for(b=0;b<D.length;b++)p(t,D[b])}else d(t);return!0}},{"../lib/is_plain_object":730,"../lib/loggers":732,"../lib/nested_property":735,"../lib/noop":736,"../lib/search":745,"../registry":846,"./container_array_match":755}],759:[function(t,e,r){"use strict";function n(t,e){try{t._fullLayout._paper.style("background",e)}catch(t){w.error(t)}}function i(t,e){n(t,I.combine(e,"white"))}function a(t,e){t._context||(t._context=w.extendDeep({},_.defaultConfig));var r,a,o,s=t._context;if(e){for(a=Object.keys(e),r=0;r<a.length;r++)"editable"!==(o=a[r])&&"edits"!==o&&o in s&&("setBackground"===o&&"opaque"===e[o]?s[o]=i:s[o]=e[o]);e.plot3dPixelRatio&&!s.plotGlPixelRatio&&(s.plotGlPixelRatio=s.plot3dPixelRatio);var l=e.editable;if(void 0!==l)for(s.editable=l,a=Object.keys(s.edits),r=0;r<a.length;r++)s.edits[a[r]]=l;if(e.edits)for(a=Object.keys(e.edits),r=0;r<a.length;r++)(o=a[r])in s.edits&&(s.edits[o]=e.edits[o])}s.staticPlot&&(s.editable=!1,s.edits={},s.autosizable=!1,s.scrollZoom=!1,s.doubleClick=!1,s.showTips=!1,s.showLink=!1,s.displayModeBar=!1),"hover"!==s.displayModeBar||x||(s.displayModeBar=!0),"transparent"!==s.setBackground&&"function"==typeof s.setBackground||(s.setBackground=n)}function o(t,e,r){var n=y.select(t).selectAll(".plot-container").data([0]);n.enter().insert("div",":first-child").classed("plot-container plotly",!0);var i=n.selectAll(".svg-container").data([0]);i.enter().append("div").classed("svg-container",!0).style("position","relative"),i.html(""),e&&(t.data=e),r&&(t.layout=r),E.manager.fillLayout(t),i.style({width:t._fullLayout.width+"px",height:t._fullLayout.height+"px"}),t.framework=E.manager.framework(t),t.framework({data:t.data,layout:t.layout},i.node()),t.framework.setUndoPoint();var a=t.framework.svg(),o=1,s=t._fullLayout.title;""!==s&&s||(o=0);var l=function(){this.call(P.convertToTspans,t)},u=a.select(".title-group text").call(l);if(t._context.edits.titleText){s&&"Click to enter title"!==s||(o=.2,u.attr({"data-unformatted":"Click to enter title"}).text("Click to enter title").style({opacity:o}).on("mouseover.opacity",function(){y.select(this).transition().duration(100).style("opacity",1)}).on("mouseout.opacity",function(){y.select(this).transition().duration(1e3).style("opacity",0)}));var c=function(){this.call(P.makeEditable,{gd:t}).on("edit",function(e){t.framework({layout:{title:e}}),this.text(e).call(l),this.call(c)}).on("cancel",function(){var t=this.attr("data-unformatted");this.text(t).call(l)})};u.call(c)}return t._context.setBackground(t,t._fullLayout.paper_bgcolor),S.addLinks(t),Promise.resolve()}function s(t,e){var r,n,i=e+1,a=[];for(r=0;r<t.length;r++)n=t[r],n<0?a.push(i+n):a.push(n);return a}function l(t,e,r){var n,i;for(n=0;n<e.length;n++){if((i=e[n])!==parseInt(i,10))throw new Error("all values in "+r+" must be integers");if(i>=t.data.length||i<-t.data.length)throw new Error(r+" must be valid indices for gd.data.");if(e.indexOf(i,n+1)>-1||i>=0&&e.indexOf(-t.data.length+i)>-1||i<0&&e.indexOf(t.data.length+i)>-1)throw new Error("each index in "+r+" must be unique.")}}function u(t,e,r){if(!Array.isArray(t.data))throw new Error("gd.data must be an array.");if(void 0===e)throw new Error("currentIndices is a required argument.");if(Array.isArray(e)||(e=[e]),l(t,e,"currentIndices"),void 0===r||Array.isArray(r)||(r=[r]),void 0!==r&&l(t,r,"newIndices"),void 0!==r&&e.length!==r.length)throw new Error("current and new indices must be of equal length.")}function c(t,e,r){var n,i;if(!Array.isArray(t.data))throw new Error("gd.data must be an array.");if(void 0===e)throw new Error("traces must be defined.");for(Array.isArray(e)||(e=[e]),n=0;n<e.length;n++)if("object"!=typeof(i=e[n])||Array.isArray(i)||null===i)throw new Error("all values in traces array must be non-array objects");if(void 0===r||Array.isArray(r)||(r=[r]),void 0!==r&&r.length!==e.length)throw new Error("if indices is specified, traces.length must equal indices.length")}function h(t,e,r,n){var i=w.isPlainObject(n);if(!Array.isArray(t.data))throw new Error("gd.data must be an array");if(!w.isPlainObject(e))throw new Error("update must be a key:value object");if(void 0===r)throw new Error("indices must be an integer or array of integers");l(t,r,"indices");for(var a in e){if(!Array.isArray(e[a])||e[a].length!==r.length)throw new Error("attribute "+a+" must be an array of length equal to indices array length");if(i&&(!(a in n)||!Array.isArray(n[a])||n[a].length!==e[a].length))throw new Error("when maxPoints is set as a key:value object it must contain a 1:1 corrispondence with the keys and number of traces in the update object")}}function f(t,e,r,n){var i,a,o,l,u,c=w.isPlainObject(n),h=[];Array.isArray(r)||(r=[r]),r=s(r,t.data.length-1);for(var f in e)for(var d=0;d<r.length;d++){if(i=t.data[r[d]],o=w.nestedProperty(i,f),a=o.get(),l=e[f][d],!Array.isArray(l))throw new Error("attribute: "+f+" index: "+d+" must be an array");if(!Array.isArray(a))throw new Error("cannot extend missing or non-array attribute: "+f);u=c?n[f][d]:n,b(u)||(u=-1),h.push({prop:o,target:a,insert:l,maxp:Math.floor(u)})}return h}function d(t,e,r,n,i,a){h(t,e,r,n);for(var o,s,l,u=f(t,e,r,n),c=[],d={},p={},m=0;m<u.length;m++)s=u[m].prop,l=u[m].maxp,o=i(u[m].target,u[m].insert),l>=0&&l<o.length&&(c=a(o,l)),l=u[m].target.length,s.set(o),Array.isArray(d[s.astr])||(d[s.astr]=[]),Array.isArray(p[s.astr])||(p[s.astr]=[]),d[s.astr].push(c),p[s.astr].push(l);return{update:d,maxPoints:p}}function p(t){return void 0===t?null:t}function m(t,e,r){function n(){return r.map(function(){})}function i(t){var e=_.Axes.id2name(t);-1===u.indexOf(e)&&u.push(e)}function a(t){return"LAYOUT"+t+".autorange"}function o(t){return"LAYOUT"+t+".range"}function s(i,a,o){if(Array.isArray(i))return void i.forEach(function(t){s(t,a,o)});if(!(i in e||R.hasParent(e,i))){var l;l="LAYOUT"===i.substr(0,6)?w.nestedProperty(t.layout,i.replace("LAYOUT","")):w.nestedProperty(f[r[o]],i),i in g||(g[i]=n()),void 0===g[i][o]&&(g[i][o]=p(l.get())),void 0!==a&&l.set(a)}}var l,u,c=t._fullLayout,h=t._fullData,f=t.data,d=j.traceFlags(),m={},g={},v={};for(var y in e){if(R.hasParent(e,y))throw new Error("cannot set "+y+"and a parent attribute simultaneously");var b,x,M,k,E,L,C=e[y];if(m[y]=C,"LAYOUT"!==y.substr(0,6)){for(g[y]=n(),l=0;l<r.length;l++)if(b=f[r[l]],x=h[r[l]],M=w.nestedProperty(b,y),k=M.get(),void 0!==(E=Array.isArray(C)?C[l%C.length]:C)){if((L=T.getTraceValObject(x,M.parts))&&L.impliedEdits&&null!==E)for(var I in L.impliedEdits)s(w.relativeAttr(y,I),L.impliedEdits[I],l);else if("colorbar.thicknessmode"===y&&M.get()!==E&&-1!==["fraction","pixels"].indexOf(E)&&x.colorbar){var z=-1!==["top","bottom"].indexOf(x.colorbar.orient)?c.height-c.margin.t-c.margin.b:c.width-c.margin.l-c.margin.r;s("colorbar.thickness",x.colorbar.thickness*("fraction"===E?1/z:z),l)}else if("colorbar.lenmode"===y&&M.get()!==E&&-1!==["fraction","pixels"].indexOf(E)&&x.colorbar){var D=-1!==["top","bottom"].indexOf(x.colorbar.orient)?c.width-c.margin.l-c.margin.r:c.height-c.margin.t-c.margin.b;s("colorbar.len",x.colorbar.len*("fraction"===E?1/D:D),l)}else"colorbar.tick0"!==y&&"colorbar.dtick"!==y||s("colorbar.tickmode","linear",l);if("type"===y&&"pie"===E!=("pie"===k)){var P="x",O="y";"bar"!==E&&"bar"!==k||"h"!==b.orientation||(P="y",O="x"),w.swapAttrs(b,["?","?src"],"labels",P),w.swapAttrs(b,["d?","?0"],"label",P),w.swapAttrs(b,["?","?src"],"values",O),"pie"===k?(w.nestedProperty(b,"marker.color").set(w.nestedProperty(b,"marker.colors").get()),c._pielayer.selectAll("g.trace").remove()):A.traceIs(b,"cartesian")&&(w.nestedProperty(b,"marker.colors").set(w.nestedProperty(b,"marker.color").get()),v[b.xaxis||"x"]=!0,v[b.yaxis||"y"]=!0)}g[y][l]=p(k);var F=["swapxy","swapxyaxes","orientation","orientationaxes"];if(-1!==F.indexOf(y)){if("orientation"===y){M.set(E);var N=b.x&&!b.y?"h":"v";if((M.get()||N)===x.orientation)continue}else"orientationaxes"===y&&(b.orientation={v:"h",h:"v"}[x.orientation]);R.swapXYData(b),d.calc=d.clearAxisTypes=!0}else-1!==S.dataArrayContainers.indexOf(M.parts[0])?(R.manageArrayContainers(M,E,g),d.calc=!0):(L?L.arrayOk&&(Array.isArray(E)||Array.isArray(k))?d.calc=!0:j.update(d,L):d.calc=!0,M.set(E))}if(-1!==["swapxyaxes","orientationaxes"].indexOf(y)&&_.Axes.swap(t,r),"orientationaxes"===y){var B=w.nestedProperty(t.layout,"hovermode");"x"===B.get()?B.set("y"):"y"===B.get()&&B.set("x")}if(-1!==["orientation","type"].indexOf(y)){for(u=[],l=0;l<r.length;l++){var U=f[r[l]];A.traceIs(U,"cartesian")&&(i(U.xaxis||"x"),i(U.yaxis||"y"),"type"===y&&s(["autobinx","autobiny"],!0,l))}s(u.map(a),!0,0),s(u.map(o),[0,1],0)}}else M=w.nestedProperty(t.layout,y.replace("LAYOUT","")),g[y]=[p(M.get())],M.set(Array.isArray(C)?C[0]:C),d.calc=!0}var V=!1,H=_.Axes.list(t);for(l=0;l<H.length;l++)if(H[l].autorange){V=!0;break}var q=Object.keys(v);t:for(l=0;l<q.length;l++){for(var G=q[l],Y=G.charAt(0),W=Y+"axis",X=0;X<f.length;X++)if(A.traceIs(f[X],"cartesian")&&(f[X][W]||Y)===G)continue t;s("LAYOUT"+_.Axes.id2name(G),null,0)}return(d.calc||d.calcIfAutorange&&V)&&(d.clearCalc=!0),(d.calc||d.plot||d.calcIfAutorange)&&(d.fullReplot=!0),{flags:d,undoit:g,redoit:m,traces:r,eventData:w.extendDeepNoArrays([],[m,r])}}function g(t,e){function r(t,n){if(Array.isArray(t))return void t.forEach(function(t){r(t,n)});if(!(t in e||R.hasParent(e,t))){var i=w.nestedProperty(l,t);t in x||(x[t]=p(i.get())),void 0!==n&&i.set(n)}}function n(e,r){if(!w.isPlainObject(e))return!1;var n=e[r+"ref"]||r,i=_.Axes.getFromId(t,n);return i||n.charAt(0)!==r||(i=_.Axes.getFromId(t,r)),(i||{}).autorange}function i(t){var e=H.name2id(t.split(".")[0]);return M[e]=1,e}var a,o,s,l=t.layout,u=t._fullLayout,c=Object.keys(e),h=_.Axes.list(t),f={};for(o=0;o<c.length;o++)if(0===c[o].indexOf("allaxes")){for(s=0;s<h.length;s++){var d=h[s]._id.substr(1),m=-1!==d.indexOf("scene")?d+".":"",g=c[o].replace("allaxes",m+h[s]._name);e[g]||(e[g]=e[c[o]])}delete e[c[o]]}var v,y=j.layoutFlags(),b={},x={},M={};for(var k in e){if(R.hasParent(e,k))throw new Error("cannot set "+k+"and a parent attribute simultaneously");var E=w.nestedProperty(l,k),L=e[k],C=E.parts.length,I="string"==typeof E.parts[C-1]?C-1:C-2,z=E.parts[I],D=E.parts[I-1]+"."+z,P=E.parts.slice(0,I).join("."),F=w.nestedProperty(t.layout,P).get(),B=w.nestedProperty(u,P).get(),U=E.get();if(void 0!==L){b[k]=L,x[k]="reverse"===z?L:p(U);var V=T.getLayoutValObject(u,E.parts);if(V&&V.impliedEdits&&null!==L)for(var q in V.impliedEdits)r(w.relativeAttr(k,q),V.impliedEdits[q]);if(-1!==["width","height"].indexOf(k)&&null===L)u[k]=t._initialAutoSize[k];else if(D.match(/^[xyz]axis[0-9]*\.range(\[[0|1]\])?$/))i(D),w.nestedProperty(u,P+"._inputRange").set(null);else if(D.match(/^[xyz]axis[0-9]*\.autorange$/)){i(D),w.nestedProperty(u,P+"._inputRange").set(null);var G=w.nestedProperty(u,P).get();G._inputDomain&&(G._input.domain=G._inputDomain.slice())}else D.match(/^[xyz]axis[0-9]*\.domain(\[[0|1]\])?$/)&&w.nestedProperty(u,P+"._inputDomain").set(null);if("type"===z){var Y=F,W="linear"===B.type&&"log"===L,X="log"===B.type&&"linear"===L;if(W||X){if(Y&&Y.range)if(B.autorange)W&&(Y.range=Y.range[1]>Y.range[0]?[1,2]:[2,1]);else{var Z=Y.range[0],J=Y.range[1];W?(Z<=0&&J<=0&&r(P+".autorange",!0),Z<=0?Z=J/1e6:J<=0&&(J=Z/1e6),r(P+".range[0]",Math.log(Z)/Math.LN10),r(P+".range[1]",Math.log(J)/Math.LN10)):(r(P+".range[0]",Math.pow(10,Z)),r(P+".range[1]",Math.pow(10,J)))}else r(P+".autorange",!0);A.getComponentMethod("annotations","convertCoords")(t,B,L,r),A.getComponentMethod("images","convertCoords")(t,B,L,r)}else r(P+".autorange",!0),r(P+".range",null);w.nestedProperty(u,P+"._inputRange").set(null)}else if(z.match(N.AX_NAME_PATTERN)){var K=w.nestedProperty(u,k).get(),Q=(L||{}).type;Q&&"-"!==Q||(Q="linear"),A.getComponentMethod("annotations","convertCoords")(t,K,Q,r),A.getComponentMethod("images","convertCoords")(t,K,Q,r)}var $=O.containerArrayMatch(k);if($){a=$.array,o=$.index;var tt=$.property,et=w.nestedProperty(l,a),rt=(et||[])[o]||{},nt=rt,it=V||{editType:"calc"},at=-1!==it.editType.indexOf("calcIfAutorange");""===o?(at?y.calc=!0:j.update(y,it),at=!1):""===tt&&(nt=L,O.isAddVal(L)?x[k]=null:O.isRemoveVal(L)?(x[k]=rt,nt=rt):w.warn("unrecognized full object value",e)),at&&(n(nt,"x")||n(nt,"y"))?y.calc=!0:j.update(y,it),f[a]||(f[a]={});var ot=f[a][o];ot||(ot=f[a][o]={}),ot[tt]=L,delete e[k]}else"reverse"===z?(F.range?F.range.reverse():(r(P+".autorange",!0),F.range=[1,0]),B.autorange?y.calc=!0:y.plot=!0):((!u._has("gl2d")||"dragmode"!==k||"lasso"!==L&&"select"!==L||"lasso"===U||"select"===U)&&V?j.update(y,V):y.calc=!0,E.set(L))}}for(a in f){O.applyContainerArrayChanges(t,w.nestedProperty(l,a),f[a],y)||(y.plot=!0)}var st=u._axisConstraintGroups;for(v in M)for(o=0;o<st.length;o++){var lt=st[o];if(lt[v]){y.calc=!0;for(var ut in lt)M[ut]||(H.getFromId(t,ut)._constraintShrinkable=!0)}}var ct=u.width,ht=u.height
;return t.layout.autosize&&S.plotAutoSize(t,t.layout,u),(e.height||e.width||u.width!==ct||u.height!==ht)&&(y.calc=!0),(y.plot||y.calc)&&(y.layoutReplot=!0),{flags:y,undoit:x,redoit:b,eventData:w.extendDeep({},b)}}function v(t){var e=y.select(t),r=t._fullLayout;if(r._container=e.selectAll(".plot-container").data([0]),r._container.enter().insert("div",":first-child").classed("plot-container",!0).classed("plotly",!0),r._paperdiv=r._container.selectAll(".svg-container").data([0]),r._paperdiv.enter().append("div").classed("svg-container",!0).style("position","relative"),r._glcontainer=r._paperdiv.selectAll(".gl-container").data([0]),r._glcontainer.enter().append("div").classed("gl-container",!0),r._paperdiv.selectAll(".main-svg").remove(),r._paper=r._paperdiv.insert("svg",":first-child").classed("main-svg",!0),r._toppaper=r._paperdiv.append("svg").classed("main-svg",!0),!r._uid){var n=[];y.selectAll("defs").each(function(){this.id&&n.push(this.id.split("-")[1])}),r._uid=w.randstr(n)}r._paperdiv.selectAll(".main-svg").attr(D.svgAttrs),r._defs=r._paper.append("defs").attr("id","defs-"+r._uid),r._clips=r._defs.append("g").classed("clips",!0),r._topdefs=r._toppaper.append("defs").attr("id","topdefs-"+r._uid),r._topclips=r._topdefs.append("g").classed("clips",!0),r._bgLayer=r._paper.append("g").classed("bglayer",!0),r._draggers=r._paper.append("g").classed("draglayer",!0);var i=r._paper.append("g").classed("layer-below",!0);r._imageLowerLayer=i.append("g").classed("imagelayer",!0),r._shapeLowerLayer=i.append("g").classed("shapelayer",!0),r._cartesianlayer=r._paper.append("g").classed("cartesianlayer",!0),r._ternarylayer=r._paper.append("g").classed("ternarylayer",!0),r._geolayer=r._paper.append("g").classed("geolayer",!0);var a=r._paper.append("g").classed("layer-above",!0);r._imageUpperLayer=a.append("g").classed("imagelayer",!0),r._shapeUpperLayer=a.append("g").classed("shapelayer",!0),r._pielayer=r._paper.append("g").classed("pielayer",!0),r._glimages=r._paper.append("g").classed("glimages",!0),r._infolayer=r._toppaper.append("g").classed("infolayer",!0),r._zoomlayer=r._toppaper.append("g").classed("zoomlayer",!0),r._hoverlayer=r._toppaper.append("g").classed("hoverlayer",!0),t.emit("plotly_framework")}var y=t("d3"),b=t("fast-isnumeric"),x=t("has-hover"),_=t("../plotly"),w=t("../lib"),M=t("../lib/events"),k=t("../lib/queue"),A=t("../registry"),T=t("./plot_schema"),S=t("../plots/plots"),E=t("../plots/polar"),L=t("../plots/cartesian/graph_interact"),C=t("../components/drawing"),I=t("../components/color"),z=t("../components/errorbars"),D=t("../constants/xmlns_namespaces"),P=t("../lib/svg_text_utils"),O=t("./manage_arrays"),R=t("./helpers"),F=t("./subroutines"),j=t("./edit_types"),N=t("../plots/cartesian/constants"),B=t("../plots/cartesian/constraints"),U=B.enforce,V=B.clean,H=t("../plots/cartesian/axis_ids");_.plot=function(t,e,r,n){function i(){if(m)return _.addFrames(t,m)}function s(){for(var e=x._basePlotModules,r=0;r<e.length;r++)e[r].drawFramework&&e[r].drawFramework(t);return w.syncOrAsync([F.layoutStyles],t)}function l(){var e,r,n,i=t.calcdata;for(A.getComponentMethod("legend","draw")(t),A.getComponentMethod("rangeselector","draw")(t),A.getComponentMethod("sliders","draw")(t),A.getComponentMethod("updatemenus","draw")(t),e=0;e<i.length;e++)r=i[e],n=r[0].trace,!0===n.visible&&n._module.colorbar?n._module.colorbar(t,r):S.autoMargin(t,"cb"+n.uid);return S.doAutoMargin(t),S.previousPromises(t)}function u(){if(JSON.stringify(x._size)!==E)return w.syncOrAsync([l,F.layoutStyles],t)}function c(){if(!k)return void U(t);var e,r,n,i=S.getSubplotIds(x,"cartesian"),a=x._modules,o=[];for(n=0;n<a.length;n++)w.pushUnique(o,a[n].setPositions);if(o.length)for(r=0;r<i.length;r++)for(e=x._plots[i[r]],n=0;n<o.length;n++)o[n](t,e);return z.calc(t),w.syncOrAsync([A.getComponentMethod("shapes","calcAutorange"),A.getComponentMethod("annotations","calcAutorange"),h,A.getComponentMethod("rangeslider","calcAutorange")],t)}function h(){if(!t._transitioning){for(var e=_.Axes.list(t,"",!0),r=0;r<e.length;r++){var n=e[r];V(t,n),_.Axes.doAutoRange(n)}U(t),b&&_.Axes.saveRangeInitial(t)}}function f(){return _.Axes.doTicks(t,"redraw")}function d(){var e,r=t.calcdata,n=x._infolayer.selectAll("g.rangeslider-container");for(e=0;e<r.length;e++){var i=r[e][0].trace,a=!0===i.visible,o=i.uid;if(!a||!A.traceIs(i,"2dMap")){var s=".hm"+o+",.contour"+o+",#clip"+o;x._paper.selectAll(s).remove(),n.selectAll(s).remove()}a&&i._module.colorbar||x._infolayer.selectAll(".cb"+o).remove()}var l=x._basePlotModules;for(e=0;e<l.length;e++)l[e].plot(t);var u=x._paper.selectAll(".layer-subplot");return x._shapeSubplotLayers=u.selectAll(".shapelayer"),S.style(t),A.getComponentMethod("shapes","draw")(t),A.getComponentMethod("annotations","draw")(t),S.addLinks(t),x._replotting=!1,S.previousPromises(t)}function p(){A.getComponentMethod("shapes","draw")(t),A.getComponentMethod("images","draw")(t),A.getComponentMethod("annotations","draw")(t),A.getComponentMethod("legend","draw")(t),A.getComponentMethod("rangeslider","draw")(t),A.getComponentMethod("rangeselector","draw")(t),A.getComponentMethod("sliders","draw")(t),A.getComponentMethod("updatemenus","draw")(t)}var m;if(t=w.getGraphDiv(t),M.init(t),w.isPlainObject(e)){var g=e;e=g.data,r=g.layout,n=g.config,m=g.frames}if(!1===M.triggerHandler(t,"plotly_beforeplot",[e,r,n]))return Promise.reject();e||r||w.isPlotDiv(t)||w.warn("Calling Plotly.plot as if redrawing but this container doesn't yet have a plot.",t),a(t,n),r||(r={}),y.select(t).classed("js-plotly-plot",!0),C.makeTester(),Array.isArray(t._promises)||(t._promises=[]);var b=0===(t.data||[]).length&&Array.isArray(e);if(Array.isArray(e)&&(R.cleanData(e,t.data),b?t.data=e:t.data.push.apply(t.data,e),t.empty=!1),t.layout&&!b||(t.layout=R.cleanLayout(r)),t._dragging&&!t._transitioning)return t._replotPending=!0,Promise.reject();t._replotPending=!1,S.supplyDefaults(t);var x=t._fullLayout;if(e&&e[0]&&e[0].r)return o(t,e,r);x._replotting=!0,b&&v(t),t.framework!==v&&(t.framework=v,v(t)),C.initGradients(t),b&&_.Axes.saveShowSpikeInitial(t);var k=!t.calcdata||t.calcdata.length!==(t._fullData||[]).length;k&&S.doCalcdata(t);for(var T=0;T<t.calcdata.length;T++)t.calcdata[T][0].trace=t._fullData[T];var E=JSON.stringify(x._size),I=[S.previousPromises,i,s,l,u,c,F.layoutStyles,f,d,p,L,S.rehover,S.previousPromises],D=w.syncOrAsync(I,t);return D&&D.then||(D=Promise.resolve()),D.then(function(){return t.emit("plotly_afterplot"),t})},_.redraw=function(t){if(t=w.getGraphDiv(t),!w.isPlotDiv(t))throw new Error("This element is not a Plotly plot: "+t);return R.cleanData(t.data,t.data),R.cleanLayout(t.layout),t.calcdata=void 0,_.plot(t).then(function(){return t.emit("plotly_redraw"),t})},_.newPlot=function(t,e,r,n){return t=w.getGraphDiv(t),S.cleanPlot([],{},t._fullData||{},t._fullLayout||{}),S.purge(t),_.plot(t,e,r,n)},_.extendTraces=function t(e,r,n,i){e=w.getGraphDiv(e);var a=d(e,r,n,i,function(t,e){return t.concat(e)},function(t,e){return t.splice(0,t.length-e)}),o=_.redraw(e),s=[e,a.update,n,a.maxPoints];return k.add(e,_.prependTraces,s,t,arguments),o},_.prependTraces=function t(e,r,n,i){e=w.getGraphDiv(e);var a=d(e,r,n,i,function(t,e){return e.concat(t)},function(t,e){return t.splice(e,t.length)}),o=_.redraw(e),s=[e,a.update,n,a.maxPoints];return k.add(e,_.extendTraces,s,t,arguments),o},_.addTraces=function t(e,r,n){e=w.getGraphDiv(e);var i,a,o=[],s=_.deleteTraces,l=t,h=[e,o],f=[e,r];for(c(e,r,n),Array.isArray(r)||(r=[r]),r=r.map(function(t){return w.extendFlat({},t)}),R.cleanData(r,e.data),i=0;i<r.length;i++)e.data.push(r[i]);for(i=0;i<r.length;i++)o.push(-r.length+i);if(void 0===n)return a=_.redraw(e),k.add(e,s,h,l,f),a;Array.isArray(n)||(n=[n]);try{u(e,o,n)}catch(t){throw e.data.splice(e.data.length-r.length,r.length),t}return k.startSequence(e),k.add(e,s,h,l,f),a=_.moveTraces(e,o,n),k.stopSequence(e),a},_.deleteTraces=function t(e,r){e=w.getGraphDiv(e);var n,i,a=[],o=_.addTraces,u=t,c=[e,a,r],h=[e,r];if(void 0===r)throw new Error("indices must be an integer or array of integers.");for(Array.isArray(r)||(r=[r]),l(e,r,"indices"),r=s(r,e.data.length-1),r.sort(w.sorterDes),n=0;n<r.length;n+=1)i=e.data.splice(r[n],1)[0],a.push(i);var f=_.redraw(e);return k.add(e,o,c,u,h),f},_.moveTraces=function t(e,r,n){e=w.getGraphDiv(e);var i,a=[],o=[],l=t,c=t,h=[e,n,r],f=[e,r,n];if(u(e,r,n),r=Array.isArray(r)?r:[r],void 0===n)for(n=[],i=0;i<r.length;i++)n.push(-r.length+i);for(n=Array.isArray(n)?n:[n],r=s(r,e.data.length-1),n=s(n,e.data.length-1),i=0;i<e.data.length;i++)-1===r.indexOf(i)&&a.push(e.data[i]);for(i=0;i<r.length;i++)o.push({newIndex:n[i],trace:e.data[r[i]]});for(o.sort(function(t,e){return t.newIndex-e.newIndex}),i=0;i<o.length;i+=1)a.splice(o[i].newIndex,0,o[i].trace);e.data=a;var d=_.redraw(e);return k.add(e,l,h,c,f),d},_.restyle=function t(e,r,n,i){e=w.getGraphDiv(e),R.clearPromiseQueue(e);var a={};if("string"==typeof r)a[r]=n;else{if(!w.isPlainObject(r))return w.warn("Restyle fail.",r,n,i),Promise.reject();a=w.extendFlat({},r),void 0===i&&(i=n)}Object.keys(a).length&&(e.changed=!0);var o=R.coerceTraceIndices(e,i),s=m(e,a,o),l=s.flags;l.clearCalc&&(e.calcdata=void 0),l.clearAxisTypes&&R.clearAxisTypes(e,o,{});var u=[];l.fullReplot?u.push(_.plot):(u.push(S.previousPromises),S.supplyDefaults(e),l.style&&u.push(F.doTraceStyle),l.colorbars&&u.push(F.doColorBars)),u.push(S.rehover),k.add(e,t,[e,s.undoit,s.traces],t,[e,s.redoit,s.traces]);var c=w.syncOrAsync(u,e);return c&&c.then||(c=Promise.resolve()),c.then(function(){return e.emit("plotly_restyle",s.eventData),e})},_.relayout=function t(e,r,n){if(e=w.getGraphDiv(e),R.clearPromiseQueue(e),e.framework&&e.framework.isPolar)return Promise.resolve(e);var i={};if("string"==typeof r)i[r]=n;else{if(!w.isPlainObject(r))return w.warn("Relayout fail.",r,n),Promise.reject();i=w.extendFlat({},r)}Object.keys(i).length&&(e.changed=!0);var a=g(e,i),o=a.flags;o.calc&&(e.calcdata=void 0);var s=[S.previousPromises];o.layoutReplot?s.push(F.layoutReplot):Object.keys(i).length&&(S.supplyDefaults(e),o.legend&&s.push(F.doLegend),o.layoutstyle&&s.push(F.layoutStyles),o.ticks&&s.push(F.doTicksRelayout),o.modebar&&s.push(F.doModeBar),o.camera&&s.push(F.doCamera)),s.push(S.rehover),k.add(e,t,[e,a.undoit],t,[e,a.redoit]);var l=w.syncOrAsync(s,e);return l&&l.then||(l=Promise.resolve(e)),l.then(function(){return e.emit("plotly_relayout",a.eventData),e})},_.update=function t(e,r,n,i){if(e=w.getGraphDiv(e),R.clearPromiseQueue(e),e.framework&&e.framework.isPolar)return Promise.resolve(e);w.isPlainObject(r)||(r={}),w.isPlainObject(n)||(n={}),Object.keys(r).length&&(e.changed=!0),Object.keys(n).length&&(e.changed=!0);var a=R.coerceTraceIndices(e,i),o=m(e,w.extendFlat({},r),a),s=o.flags,l=g(e,w.extendFlat({},n)),u=l.flags;(s.clearCalc||u.calc)&&(e.calcdata=void 0),s.clearAxisTypes&&R.clearAxisTypes(e,a,n);var c=[];if(s.fullReplot&&u.layoutReplot){var h=e.data,f=e.layout;e.data=void 0,e.layout=void 0,c.push(function(){return _.plot(e,h,f)})}else s.fullReplot?c.push(_.plot):u.layoutReplot?c.push(F.layoutReplot):(c.push(S.previousPromises),S.supplyDefaults(e),s.style&&c.push(F.doTraceStyle),s.colorbars&&c.push(F.doColorBars),u.legend&&c.push(F.doLegend),u.layoutstyle&&c.push(F.layoutStyles),u.ticks&&c.push(F.doTicksRelayout),u.modebar&&c.push(F.doModeBar),u.camera&&c.push(F.doCamera));c.push(S.rehover),k.add(e,t,[e,o.undoit,l.undoit,o.traces],t,[e,o.redoit,l.redoit,o.traces]);var d=w.syncOrAsync(c,e);return d&&d.then||(d=Promise.resolve(e)),d.then(function(){return e.emit("plotly_update",{data:o.eventData,layout:l.eventData}),e})},_.animate=function(t,e,r){function n(t){return Array.isArray(s)?t>=s.length?s[0]:s[t]:s}function i(t){return Array.isArray(l)?t>=l.length?l[0]:l[t]:l}function a(t,e){var r=0;return function(){if(t&&++r===e)return t()}}if(t=w.getGraphDiv(t),!w.isPlotDiv(t))throw new Error("This element is not a Plotly plot: "+t+". It's likely that you've failed to create a plot before animating it. For more details, see https://plot.ly/javascript/animations/");var o=t._transitionData;o._frameQueue||(o._frameQueue=[]),r=S.supplyAnimationDefaults(r);var s=r.transition,l=r.frame;return void 0===o._frameWaitingCnt&&(o._frameWaitingCnt=0),new Promise(function(l,u){function c(){t.emit("plotly_animated"),window.cancelAnimationFrame(o._animationRaf),o._animationRaf=null}function h(){o._currentFrame&&o._currentFrame.onComplete&&o._currentFrame.onComplete();var e=o._currentFrame=o._frameQueue.shift();if(e){var r=e.name?e.name.toString():null;t._fullLayout._currentFrame=r,o._lastFrameAt=Date.now(),o._timeToNext=e.frameOpts.duration,S.transition(t,e.frame.data,e.frame.layout,R.coerceTraceIndices(t,e.frame.traces),e.frameOpts,e.transitionOpts).then(function(){e.onComplete&&e.onComplete()}),t.emit("plotly_animatingframe",{name:r,frame:e.frame,animation:{frame:e.frameOpts,transition:e.transitionOpts}})}else c()}function f(){t.emit("plotly_animating"),o._lastFrameAt=-1/0,o._timeToNext=0,o._runningTransitions=0,o._currentFrame=null;var e=function(){o._animationRaf=window.requestAnimationFrame(e),Date.now()-o._lastFrameAt>o._timeToNext&&h()};e()}function d(t){return Array.isArray(s)?g>=s.length?t.transitionOpts=s[g]:t.transitionOpts=s[0]:t.transitionOpts=s,g++,t}var p,m,g=0,v=[],y=void 0===e||null===e,b=Array.isArray(e);if(y||b||!w.isPlainObject(e)){if(y||-1!==["string","number"].indexOf(typeof e))for(p=0;p<o._frames.length;p++)(m=o._frames[p])&&(y||String(m.group)===String(e))&&v.push({type:"byname",name:String(m.name),data:d({name:m.name})});else if(b)for(p=0;p<e.length;p++){var x=e[p];-1!==["number","string"].indexOf(typeof x)?(x=String(x),v.push({type:"byname",name:x,data:d({name:x})})):w.isPlainObject(x)&&v.push({type:"object",data:d(w.extendFlat({},x))})}}else v.push({type:"object",data:d(w.extendFlat({},e))});for(p=0;p<v.length;p++)if(m=v[p],"byname"===m.type&&!o._frameHash[m.data.name])return w.warn('animate failure: frame not found: "'+m.data.name+'"'),void u();-1!==["next","immediate"].indexOf(r.mode)&&function(){if(0!==o._frameQueue.length){for(;o._frameQueue.length;){var e=o._frameQueue.pop();e.onInterrupt&&e.onInterrupt()}t.emit("plotly_animationinterrupted",[])}}(),"reverse"===r.direction&&v.reverse();var _=t._fullLayout._currentFrame;if(_&&r.fromcurrent){var M=-1;for(p=0;p<v.length;p++)if(m=v[p],"byname"===m.type&&m.name===_){M=p;break}if(M>0&&M<v.length-1){var k=[];for(p=0;p<v.length;p++)m=v[p],("byname"!==v[p].type||p>M)&&k.push(m);v=k}}v.length>0?function(e){if(0!==e.length){for(var s=0;s<e.length;s++){var c;c="byname"===e[s].type?S.computeFrame(t,e[s].name):e[s].data;var h=i(s),d=n(s);d.duration=Math.min(d.duration,h.duration);var p={frame:c,name:e[s].name,frameOpts:h,transitionOpts:d};s===e.length-1&&(p.onComplete=a(l,2),p.onInterrupt=u),o._frameQueue.push(p)}"immediate"===r.mode&&(o._lastFrameAt=-1/0),o._animationRaf||f()}}(v):(t.emit("plotly_animated"),l())})},_.addFrames=function(t,e,r){t=w.getGraphDiv(t);var n=0;if(null===e||void 0===e)return Promise.resolve();if(!w.isPlotDiv(t))throw new Error("This element is not a Plotly plot: "+t+". It's likely that you've failed to create a plot before adding frames. For more details, see https://plot.ly/javascript/animations/");var i,a,o,s,l=t._transitionData._frames,u=t._transitionData._frameHash;if(!Array.isArray(e))throw new Error("addFrames failure: frameList must be an Array of frame definitions"+e);var c=l.length+2*e.length,h=[];for(i=e.length-1;i>=0;i--)if(w.isPlainObject(e[i])){var f=(u[e[i].name]||{}).name,d=e[i].name;f&&d&&"number"==typeof d&&u[f]&&(n++,w.warn('addFrames: overwriting frame "'+u[f].name+'" with a frame whose name of type "number" also equates to "'+f+'". This is valid but may potentially lead to unexpected behavior since all plotly.js frame names are stored internally as strings.'),n>5&&w.warn("addFrames: This API call has yielded too many warnings. For the rest of this call, further warnings about numeric frame names will be suppressed.")),h.push({frame:S.supplyFrameDefaults(e[i]),index:r&&void 0!==r[i]&&null!==r[i]?r[i]:c+i})}h.sort(function(t,e){return t.index>e.index?-1:t.index<e.index?1:0});var p=[],m=[],g=l.length;for(i=h.length-1;i>=0;i--){if(a=h[i].frame,"number"==typeof a.name&&w.warn("Warning: addFrames accepts frames with numeric names, but the numbers areimplicitly cast to strings"),!a.name)for(;u[a.name="frame "+t._transitionData._counter++];);if(u[a.name]){for(o=0;o<l.length&&(l[o]||{}).name!==a.name;o++);p.push({type:"replace",index:o,value:a}),m.unshift({type:"replace",index:o,value:l[o]})}else s=Math.max(0,Math.min(h[i].index,g)),p.push({type:"insert",index:s,value:a}),m.unshift({type:"delete",index:s}),g++}var v=S.modifyFrames,y=S.modifyFrames,b=[t,m],x=[t,p];return k&&k.add(t,v,b,y,x),S.modifyFrames(t,p)},_.deleteFrames=function(t,e){if(t=w.getGraphDiv(t),!w.isPlotDiv(t))throw new Error("This element is not a Plotly plot: "+t);var r,n,i=t._transitionData._frames,a=[],o=[];if(!e)for(e=[],r=0;r<i.length;r++)e.push(r);for(e=e.slice(0),e.sort(),r=e.length-1;r>=0;r--)n=e[r],a.push({type:"delete",index:n}),o.unshift({type:"insert",index:n,value:i[n]});var s=S.modifyFrames,l=S.modifyFrames,u=[t,o],c=[t,a];return k&&k.add(t,s,u,l,c),S.modifyFrames(t,a)},_.purge=function(t){t=w.getGraphDiv(t);var e=t._fullLayout||{},r=t._fullData||[];return S.cleanPlot([],{},r,e),S.purge(t),M.purge(t),e._container&&e._container.remove(),delete t._context,t}},{"../components/color":604,"../components/drawing":628,"../components/errorbars":634,"../constants/xmlns_namespaces":709,"../lib":728,"../lib/events":716,"../lib/queue":741,"../lib/svg_text_utils":750,"../plotly":767,"../plots/cartesian/axis_ids":775,"../plots/cartesian/constants":777,"../plots/cartesian/constraints":779,"../plots/cartesian/graph_interact":781,"../plots/plots":831,"../plots/polar":834,"../registry":846,"./edit_types":756,"./helpers":757,"./manage_arrays":758,"./plot_schema":761,"./subroutines":764,d3:122,"fast-isnumeric":131,"has-hover":288}],760:[function(t,e,r){"use strict";e.exports={staticPlot:!1,editable:!1,edits:{annotationPosition:!1,annotationTail:!1,annotationText:!1,axisTitleText:!1,colorbarPosition:!1,colorbarTitleText:!1,legendPosition:!1,legendText:!1,shapePosition:!1,titleText:!1},autosizable:!1,queueLength:0,fillFrame:!1,frameMargins:0,scrollZoom:!1,doubleClick:"reset+autosize",showTips:!0,showAxisDragHandles:!0,showAxisRangeEntryBoxes:!0,showLink:!1,sendData:!0,linkText:"Edit chart",showSources:!1,displayModeBar:"hover",modeBarButtonsToRemove:[],modeBarButtonsToAdd:[],modeBarButtons:!1,displaylogo:!0,plotGlPixelRatio:2,setBackground:"transparent",topojsonURL:"https://cdn.plot.ly/",mapboxAccessToken:null,logging:!1,globalTransforms:[]}},{}],761:[function(t,e,r){"use strict";function n(t,e){var r,n,i,a,o=t._basePlotModules;if(o){var s;for(r=0;r<o.length;r++){if(i=o[r],i.attrRegex&&i.attrRegex.test(e)){if(i.layoutAttrOverrides)return i.layoutAttrOverrides;!s&&i.layoutAttributes&&(s=i.layoutAttributes)}var l=i.baseLayoutAttrOverrides;if(l&&e in l)return l[e]}if(s)return s}var u=t._modules;if(u)for(r=0;r<u.length;r++)if((a=u[r].layoutAttributes)&&e in a)return a[e];for(n in g.componentsRegistry)if(i=g.componentsRegistry[n],!i.schema&&e===i.name)return i.layoutAttributes;return e in b?b[e]:"radialaxis"===e||"angularaxis"===e?M[e]:M.layout[e]||!1}function i(t,e,r){if(!t)return!1;if(t._isLinkedToArray)if(a(e[r]))r++;else if(r<e.length)return!1;for(;r<e.length;r++){var n=t[e[r]];if(!v.isPlainObject(n))break;if(t=n,r===e.length-1)break;if(t._isLinkedToArray){if(r++,!a(e[r]))return!1}else if("info_array"===t.valType){r++;var i=e[r];if(!a(i)||i>=t.items.length)return!1;t=t.items[i]}}return t}function a(t){return t===Math.round(t)&&t>=0}function o(t){var e,r;"area"===t?(e={attributes:w},r={}):(e=g.modules[t]._module,r=e.basePlotModule);var n={};n.type=null,T(n,y),T(n,e.attributes),r.attributes&&T(n,r.attributes),n.type=t;var i={meta:e.meta||{},attributes:c(n)};if(e.layoutAttributes){var a={};T(a,e.layoutAttributes),i.layoutAttributes=c(a)}return i}function s(){var t,e,r={};T(r,b);for(t in g.subplotsRegistry)if(e=g.subplotsRegistry[t],e.layoutAttributes)if("cartesian"===e.name)p(r,e,"xaxis"),p(r,e,"yaxis");else{var n="subplot"===e.attr?e.name:e.attr;p(r,e,n)}r=d(r);for(t in g.componentsRegistry){e=g.componentsRegistry[t];var i=e.schema;if(i&&(i.subplots||i.layout)){var a=i.subplots;if(a&&a.xaxis&&!a.yaxis)for(var o in a.xaxis)delete r.yaxis[o]}else e.layoutAttributes&&m(r,e.layoutAttributes,e.name)}return{layoutAttributes:c(r)}}function l(t){var e=g.transformsRegistry[t],r=T({},e.attributes);return Object.keys(g.componentsRegistry).forEach(function(e){var n=g.componentsRegistry[e];n.schema&&n.schema.transforms&&n.schema.transforms[t]&&Object.keys(n.schema.transforms[t]).forEach(function(e){m(r,n.schema.transforms[t][e],e)})}),{attributes:c(r)}}function u(){var t={frames:v.extendDeepAll({},x)};return c(t),t.frames}function c(t){return h(t),f(t),t}function h(t){function e(t){return{valType:"string",editType:"none"}}function n(t,n,i){r.isValObject(t)?"data_array"===t.valType?(t.role="data",i[n+"src"]=e(n)):!0===t.arrayOk&&(i[n+"src"]=e(n)):v.isPlainObject(t)&&(t.role="object")}r.crawl(t,n)}function f(t){function e(t,e,r){if(t){var n=t[E];n&&(delete t[E],r[e]={items:{}},r[e].items[n]=t,r[e].role="object")}}r.crawl(t,e)}function d(t){return A(t,{radialaxis:M.radialaxis,angularaxis:M.angularaxis}),A(t,M.layout),t}function p(t,e,r){var n=v.nestedProperty(t,r),i=T({},e.layoutAttributes);i[S]=!0,n.set(i)}function m(t,e,r){var n=v.nestedProperty(t,r);n.set(T(n.get()||{},e))}var g=t("../registry"),v=t("../lib"),y=t("../plots/attributes"),b=t("../plots/layout_attributes"),x=t("../plots/frame_attributes"),_=t("../plots/animation_attributes"),w=t("../plots/polar/area_attributes"),M=t("../plots/polar/axis_attributes"),k=t("./edit_types"),A=v.extendFlat,T=v.extendDeepAll,S="_isSubplotObj",E="_isLinkedToArray",L=[S,E,"_arrayAttrRegexps","_deprecated"];r.IS_SUBPLOT_OBJ=S,r.IS_LINKED_TO_ARRAY=E,r.DEPRECATED="_deprecated",r.UNDERSCORE_ATTRS=L,r.get=function(){var t={};g.allTypes.concat("area").forEach(function(e){t[e]=o(e)});var e={};return Object.keys(g.transformsRegistry).forEach(function(t){e[t]=l(t)}),{defs:{valObjects:v.valObjectMeta,metaKeys:L.concat(["description","role","editType","impliedEdits"]),editType:{traces:k.traces,layout:k.layout},impliedEdits:{}},traces:t,layout:s(),transforms:e,frames:u(),animation:c(_)}},r.crawl=function(t,e,n,i){var a=n||0;i=i||"",Object.keys(t).forEach(function(n){var o=t[n];if(-1===L.indexOf(n)){var s=(i?i+".":"")+n;e(o,n,t,a,s),r.isValObject(o)||v.isPlainObject(o)&&"impliedEdits"!==n&&r.crawl(o,e,a+1,s)}})},r.isValObject=function(t){return t&&void 0!==t.valType},r.findArrayAttributes=function(t){function e(e,r,o,s){if(a=a.slice(0,s).concat([r]),e&&("data_array"===e.valType||!0===e.arrayOk)&&!("colorbar"===a[s-1]&&("ticktext"===r||"tickvals"===r))){var l=n(a),u=v.nestedProperty(t,l).get();Array.isArray(u)&&i.push(l)}}function n(t){return t.join(".")}var i=[],a=[];if(r.crawl(y,e),t._module&&t._module.attributes&&r.crawl(t._module.attributes,e),t.transforms)for(var o=t.transforms,s=0;s<o.length;s++){var l=o[s],u=l._module;u&&(a=["transforms["+s+"]"],r.crawl(u.attributes,e,1))}return t._fullInput&&t._fullInput._module&&t._fullInput._module.attributes&&(r.crawl(t._fullInput._module.attributes,e),i=v.filterUnique(i)),i},r.getTraceValObject=function(t,e){var r,n,o=e[0],s=1;if("transforms"===o){if(!Array.isArray(t.transforms))return!1;var l=e[1];if(!a(l)||l>=t.transforms.length)return!1;r=(g.transformsRegistry[t.transforms[l].type]||{}).attributes,n=r&&r[e[2]],s=3}else if("area"===t.type)n=w[o];else{var u=t._module;if(u||(u=(g.modules[t.type||y.type.dflt]||{})._module),!u)return!1;if(r=u.attributes,!(n=r&&r[o])){var c=u.basePlotModule;c&&c.attributes&&(n=c.attributes[o])}n||(n=y[o])}return i(n,e,s)},r.getLayoutValObject=function(t,e){return i(n(t,e[0]),e,1)}},{"../lib":728,"../plots/animation_attributes":768,"../plots/attributes":770,"../plots/frame_attributes":797,"../plots/layout_attributes":822,"../plots/polar/area_attributes":832,"../plots/polar/axis_attributes":833,"../registry":846,"./edit_types":756}],762:[function(t,e,r){"use strict";function n(t){o.register(t,t.name,t.categories,t.meta),o.subplotsRegistry[t.basePlotModule.name]||o.registerSubplot(t.basePlotModule)}function i(t){if("string"!=typeof t.name)throw new Error("Transform module *name* must be a string.");var e="Transform module "+t.name,r="function"==typeof t.transform,n="function"==typeof t.calcTransform;if(!r&&!n)throw new Error(e+" is missing a *transform* or *calcTransform* method.");r&&n&&s.log([e+" has both a *transform* and *calcTransform* methods.","Please note that all *transform* methods are executed","before all *calcTransform* methods."].join(" ")),s.isPlainObject(t.attributes)||s.log(e+" registered without an *attributes* object."),"function"!=typeof t.supplyDefaults&&s.log(e+" registered without a *supplyDefaults* method."),o.registerTransform(t)}function a(t){if("string"!=typeof t.name)throw new Error("Component module *name* must be a string.");o.registerComponent(t)}var o=t("../registry"),s=t("../lib");e.exports=function(t){if(!t)throw new Error("No argument passed to Plotly.register.");t&&!Array.isArray(t)&&(t=[t]);for(var e=0;e<t.length;e++){var r=t[e];if(!r)throw new Error("Invalid module was attempted to be registered!");switch(r.moduleType){case"trace":n(r);break;case"transform":i(r);break;case"component":a(r);break;default:throw new Error("Invalid module was attempted to be registered!")}}}},{"../lib":728,"../registry":846}],763:[function(t,e,r){"use strict";var n=t("../plotly"),i=t("../lib");e.exports=function(t){return i.extendFlat(n.defaultConfig,t)}},{"../lib":728,"../plotly":767}],764:[function(t,e,r){"use strict";function n(t,e,r){for(var n=0;n<r.length;n++){var i=r[n][0],a=r[n][1];if(!(i[0]>=t[1]||i[1]<=t[0])&&(a[0]<e[1]&&a[1]>e[0]))return!0}return!1}function i(t,e,r){return t._anchorAxis===e&&(t.mirror||t.side===r)||"all"===t.mirror||"allticks"===t.mirror||t.mirrors&&t.mirrors[e._id+r]}function a(t,e,r){var n=[],i=e._anchorAxis;if(i){var a=i._mainAxis;if(-1===n.indexOf(a)){n.push(a);for(var o=0;o<r.length;o++)r[o].overlaying===a._id&&-1===n.indexOf(r[o])&&n.push(r[o])}}return n}function o(t,e,r){for(var n=0;n<e.length;n++){var a=e[n],o=a._anchorAxis;if(o&&i(a,o,r))return p.crispRound(t,a.linewidth)}}function s(t,e,r,n,i,s){if(n)return r;var l,u=e._mainAxis,c=a(t,u,s),h=o(t,c,i);if(h)return h;for(l=0;l<s.length;l++)if(s[l].overlaying===u._id&&(c=a(t,s[l],s),h=o(t,c,i)))return h;return 0}var l=t("d3"),u=t("../plotly"),c=t("../registry"),h=t("../plots/plots"),f=t("../lib"),d=t("../components/color"),p=t("../components/drawing"),m=t("../components/titles"),g=t("../components/modebar"),v=t("../plots/cartesian/graph_interact"),y=t("../plots/cartesian/constants");r.layoutStyles=function(t){return f.syncOrAsync([h.doAutoMargin,r.lsInner],t)},r.lsInner=function(t){var e,a=t._fullLayout,o=a._size,c=o.p,h=u.Axes.list(t),f=a._has("cartesian");for(e=0;e<h.length;e++)h[e]._linepositions={};a._paperdiv.style({width:a.width+"px",height:a.height+"px"}).selectAll(".main-svg").call(p.setSize,a.width,a.height),t._context.setBackground(t,a.paper_bgcolor);var m=a._paper.selectAll("g.subplot"),v=[],b=[];m.each(function(t){var e=a._plots[t];if(e.mainplot)return e.bg&&e.bg.remove(),void(e.bg=void 0);var r=e.xaxis.domain,i=e.yaxis.domain,o=[];n(r,i,b)?o=[0]:(v.push(t),b.push([r,i]));var s=e.plotgroup.selectAll(".bg").data(o);s.enter().append("rect").classed("bg",!0),s.exit().remove(),s.each(function(){e.bg=s;var t=e.plotgroup.node();t.insertBefore(this,t.childNodes[0])})});var x=a._bgLayer.selectAll(".bg").data(v);x.enter().append("rect").classed("bg",!0),x.exit().remove(),x.each(function(t){a._plots[t].bg=l.select(this)});var _={};return m.each(function(r){function n(t,e){return e?"M"+P+","+t+"H"+R:""}function l(t,e){return e?"M"+t+","+H+"V"+U:""}var u=a._plots[r],m=u.xaxis,g=u.yaxis;m.setScale(),g.setScale(),u.bg&&f&&u.bg.call(p.setRect,m._offset-c,g._offset-c,m._length+2*c,g._length+2*c).call(d.fill,a.plot_bgcolor).style("stroke-width",0),u.clipId="clip"+a._uid+r+"plot";var v=a._clips.selectAll("#"+u.clipId).data([0]);v.enter().append("clipPath").attr({class:"plotclip",id:u.clipId}).append("rect"),v.selectAll("rect").attr({width:m._length,height:g._length}),p.setTranslate(u.plot,m._offset,g._offset);var b,x;for(u._hasClipOnAxisFalse?(b=null,x=u.clipId):(b=u.clipId,x=null),p.setClipUrl(u.plot,b),e=0;e<y.traceLayerClasses.length;e++){var w=y.traceLayerClasses[e];"scatterlayer"!==w&&u.plot.selectAll("g."+w).call(p.setClipUrl,x)}u.layerClipId=x;var M=!m._anchorAxis,k=M&&!_[m._id],A=i(m,g,"bottom"),T=i(m,g,"top"),S=!g._anchorAxis,E=S&&!_[g._id],L=i(g,m,"left"),C=i(g,m,"right"),I=p.crispRound(t,m.linewidth,1),z=p.crispRound(t,g.linewidth,1),D=s(t,m,z,L,"left",h),P=!M&&D?-c-D:0,O=s(t,m,z,C,"right",h),R=m._length+(!M&&O?c+O:0),F=o.h*(1-(m.position||0))+I/2%1,j=g._length+c+I/2,N=-c-I/2,B=!S&&s(t,g,I,A,"bottom",h),U=g._length+(B?c:0),V=!S&&s(t,g,I,T,"top",h),H=V?-c:0,q=o.w*(g.position||0)+z/2%1,G=-c-z/2,Y=m._length+c+z/2;m._linepositions[r]=[A?j:void 0,T?N:void 0,k?F:void 0],m._anchorAxis===g?m._linepositions[r][3]="top"===m.side?N:j:k&&(m._linepositions[r][3]=F),g._linepositions[r]=[L?G:void 0,C?Y:void 0,E?q:void 0],g._anchorAxis===m?g._linepositions[r][3]="right"===g.side?Y:G:E&&(g._linepositions[r][3]=q);var W="translate("+m._offset+","+g._offset+")",X=W,Z=W;k&&(X="translate("+m._offset+","+o.t+")",N+=g._offset-o.t,j+=g._offset-o.t),E&&(Z="translate("+o.l+","+g._offset+")",G+=m._offset-o.l,Y+=m._offset-o.l),f&&(u.xlines.attr("transform",X).attr("d",n(j,A)+n(N,T)+n(F,k)||"M0,0").style("stroke-width",I+"px").call(d.stroke,m.showline?m.linecolor:"rgba(0,0,0,0)"),u.ylines.attr("transform",Z).attr("d",l(G,L)+l(Y,C)+l(q,E)||"M0,0").style("stroke-width",z+"px").call(d.stroke,g.showline?g.linecolor:"rgba(0,0,0,0)")),u.xaxislayer.attr("transform",X),u.yaxislayer.attr("transform",Z),u.gridlayer.attr("transform",W),u.zerolinelayer.attr("transform",W),u.draglayer.attr("transform",W),k&&(_[m._id]=1),E&&(_[g._id]=1)}),u.Axes.makeClipPaths(t),r.drawMainTitle(t),g.manage(t),t._promises.length&&Promise.all(t._promises)},r.drawMainTitle=function(t){var e=t._fullLayout;m.draw(t,"gtitle",{propContainer:e,propName:"title",dfltName:"Plot",attributes:{x:e.width/2,y:e._size.t/2,"text-anchor":"middle"}})},r.doTraceStyle=function(t){for(var e=0;e<t.calcdata.length;e++){var r=t.calcdata[e],n=((r[0]||{}).trace||{})._module||{},i=n.arraysToCalcdata;i&&i(r,r[0].trace)}return h.style(t),c.getComponentMethod("legend","draw")(t),h.previousPromises(t)},r.doColorBars=function(t){for(var e=0;e<t.calcdata.length;e++){var r=t.calcdata[e][0];if((r.t||{}).cb){var n=r.trace,i=r.t.cb;c.traceIs(n,"contour")&&i.line({width:!1!==n.contours.showlines?n.line.width:0,dash:n.line.dash,color:"line"===n.contours.coloring?i._opts.line.color:n.line.color}),c.traceIs(n,"markerColorscale")?i.options(n.marker.colorbar)():i.options(n.colorbar)()}}return h.previousPromises(t)},r.layoutReplot=function(t){var e=t.layout;return t.layout=void 0,u.plot(t,"",e)},r.doLegend=function(t){return c.getComponentMethod("legend","draw")(t),h.previousPromises(t)},r.doTicksRelayout=function(t){return u.Axes.doTicks(t,"redraw"),r.drawMainTitle(t),h.previousPromises(t)},r.doModeBar=function(t){var e=t._fullLayout;g.manage(t),v(t);for(var r=0;r<e._basePlotModules.length;r++){var n=e._basePlotModules[r].updateFx;n&&n(e)}return h.previousPromises(t)},r.doCamera=function(t){for(var e=t._fullLayout,r=h.getSubplotIds(e,"gl3d"),n=0;n<r.length;n++){var i=e[r[n]];i._scene.setCamera(i.camera)}}},{"../components/color":604,"../components/drawing":628,"../components/modebar":665,"../components/titles":694,"../lib":728,"../plotly":767,"../plots/cartesian/constants":777,"../plots/cartesian/graph_interact":781,"../plots/plots":831,"../registry":846,d3:122}],765:[function(t,e,r){"use strict";function n(t,e){
function r(t){return!(t in e)||a.validate(e[t],u[t])}function n(t,r){return a.coerce(e,v,u,t,r)}function h(){return new Promise(function(t){setTimeout(t,o.getDelay(k._fullLayout))})}function f(){return new Promise(function(t,e){var r=s(k,y,_),n=k._fullLayout.width,o=k._fullLayout.height;if(i.purge(k),document.body.removeChild(k),"svg"===y)return t(M?r:"data:image/svg+xml,"+encodeURIComponent(r));var u=document.createElement("canvas");u.id=a.randstr(),l({format:y,width:n,height:o,scale:_,canvas:u,svg:r,promise:!0}).then(t).catch(e)})}function d(t){return M?t.replace(c,""):t}e=e||{};var p,m,g;if(a.isPlainObject(t)?(p=t.data||[],m=t.layout||{},g=t.config||{}):(t=a.getGraphDiv(t),p=a.extendDeep([],t.data),m=a.extendDeep({},t.layout),g=t._context),!r("width")||!r("height"))throw new Error("Height and width should be pixel values.");if(!r("format"))throw new Error("Image format is not jpeg, png, svg or webp.");var v={},y=n("format"),b=n("width"),x=n("height"),_=n("scale"),w=n("setBackground"),M=n("imageDataOnly"),k=document.createElement("div");k.style.position="absolute",k.style.left="-5000px",document.body.appendChild(k);var A=a.extendFlat({},m);b&&(A.width=b),x&&(A.height=x);var T=a.extendFlat({},g,{staticPlot:!0,setBackground:w}),S=o.getRedrawFunc(k);return new Promise(function(t,e){i.plot(k,p,A,T).then(S).then(h).then(f).then(function(e){t(d(e))}).catch(function(t){e(t)})})}var i=t("../plotly"),a=t("../lib"),o=t("../snapshot/helpers"),s=t("../snapshot/tosvg"),l=t("../snapshot/svgtoimg"),u={format:{valType:"enumerated",values:["png","jpeg","webp","svg"],dflt:"png"},width:{valType:"number",min:1},height:{valType:"number",min:1},scale:{valType:"number",min:0,dflt:1},setBackground:{valType:"any",dflt:!1},imageDataOnly:{valType:"boolean",dflt:!1}},c=/^data:image\/\w+;base64,/;e.exports=n},{"../lib":728,"../plotly":767,"../snapshot/helpers":850,"../snapshot/svgtoimg":852,"../snapshot/tosvg":854}],766:[function(t,e,r){"use strict";function n(t,e,r,i,a,u){u=u||[];for(var c=Object.keys(t),f=0;f<c.length;f++){var d=c[f];if("transforms"!==d){var g=u.slice();g.push(d);var v=t[d],y=e[d],b=l(r,d),x="info_array"===(b||{}).valType,_="colorscale"===(b||{}).valType;if(s(r,d))if(p(v)&&p(y))n(v,y,b,i,a,g);else if(b.items&&!x&&m(v)){var w,M,k=b.items,A=k[Object.keys(k)[0]],T=[];for(w=0;w<y.length;w++){var S=y[w]._index||w;M=g.slice(),M.push(S),p(v[S])&&p(y[w])&&(T.push(S),n(v[S],y[w],A,i,a,M))}for(w=0;w<v.length;w++)M=g.slice(),M.push(w),p(v[w])?-1===T.indexOf(w)&&i.push(o("unused",a,M)):i.push(o("object",a,M,v[w]))}else!p(v)&&p(y)?i.push(o("object",a,g,v)):m(v)||!m(y)||x||_?d in e?h.validate(v,b)?"enumerated"===b.valType&&(b.coerceNumber&&v!==+y||v!==y)&&i.push(o("dynamic",a,g,v,y)):i.push(o("value",a,g,v)):i.push(o("unused",a,g,v)):i.push(o("array",a,g,v));else i.push(o("schema",a,g))}}return i}function i(t,e){for(var r=0;r<e.length;r++){var n=e[r].type,i=t.traces[n].layoutAttributes;i&&h.extendFlat(t.layout.layoutAttributes,i)}return t.layout.layoutAttributes}function a(t){return m(t)?"In data trace "+t[1]+", ":"In "+t+", "}function o(t,e,r,n,i){r=r||"";var a,o;m(e)?(a=e[0],o=e[1]):(a=e,o=null);var s=c(r),l=g[t](e,s,n,i);return h.log(l),{code:t,container:a,trace:o,path:r,astr:s,msg:l}}function s(t,e){var r=u(e),n=r.keyMinusId,i=r.id;return!!(n in t&&t[n]._isSubplotObj&&i)||e in t}function l(t,e){return t[u(e).keyMinusId]}function u(t){var e=t.match(v);return{keyMinusId:e&&e[1],id:e&&e[2]}}function c(t){if(!m(t))return String(t);for(var e="",r=0;r<t.length;r++){var n=t[r];"number"==typeof n?e=e.substr(0,e.length-1)+"["+n+"]":e+=n,r<t.length-1&&(e+=".")}return e}var h=t("../lib"),f=t("../plots/plots"),d=t("./plot_schema"),p=h.isPlainObject,m=Array.isArray;e.exports=function(t,e){var r,a,s=d.get(),l=[],u={};m(t)?(u.data=h.extendDeep([],t),r=t):(u.data=[],r=[],l.push(o("array","data"))),p(e)?(u.layout=h.extendDeep({},e),a=e):(u.layout={},a={},arguments.length>1&&l.push(o("object","layout"))),f.supplyDefaults(u);for(var c=u._fullData,g=r.length,v=0;v<g;v++){var y=r[v],b=["data",v];if(p(y)){var x=c[v],_=x.type,w=s.traces[_].attributes;w.type={valType:"enumerated",values:[_]},!1===x.visible&&!1!==y.visible&&l.push(o("invisible",b)),n(y,x,w,l,b);var M=y.transforms,k=x.transforms;if(M){m(M)||l.push(o("array",b,["transforms"])),b.push("transforms");for(var A=0;A<M.length;A++){var T=["transforms",A],S=M[A].type;if(p(M[A])){var E=s.transforms[S]?s.transforms[S].attributes:{};E.type={valType:"enumerated",values:Object.keys(s.transforms)},n(M[A],k[A],E,l,b,T)}else l.push(o("object",b,T))}}}else l.push(o("object",b))}return n(a,u._fullLayout,i(s,c),l,"layout"),0===l.length?void 0:l};var g={object:function(t,e){return("layout"===t&&""===e?"The layout argument":"data"===t[0]&&""===e?"Trace "+t[1]+" in the data argument":a(t)+"key "+e)+" must be linked to an object container"},array:function(t,e){return("data"===t?"The data argument":a(t)+"key "+e)+" must be linked to an array container"},schema:function(t,e){return a(t)+"key "+e+" is not part of the schema"},unused:function(t,e,r){var n=p(r)?"container":"key";return a(t)+n+" "+e+" did not get coerced"},dynamic:function(t,e,r,n){return[a(t)+"key",e,"(set to '"+r+"')","got reset to","'"+n+"'","during defaults."].join(" ")},invisible:function(t){return"Trace "+t[1]+" got defaulted to be not visible"},value:function(t,e,r){return[a(t)+"key "+e,"is set to an invalid value ("+r+")"].join(" ")}},v=h.counterRegex("([a-z]+)")},{"../lib":728,"../plots/plots":831,"./plot_schema":761}],767:[function(t,e,r){"use strict";r.defaultConfig=t("./plot_api/plot_config"),r.Plots=t("./plots/plots"),r.Axes=t("./plots/cartesian/axes"),r.ModeBar=t("./components/modebar"),t("./plot_api/plot_api")},{"./components/modebar":665,"./plot_api/plot_api":759,"./plot_api/plot_config":760,"./plots/cartesian/axes":772,"./plots/plots":831}],768:[function(t,e,r){"use strict";e.exports={mode:{valType:"enumerated",dflt:"afterall",values:["immediate","next","afterall"]},direction:{valType:"enumerated",values:["forward","reverse"],dflt:"forward"},fromcurrent:{valType:"boolean",dflt:!1},frame:{duration:{valType:"number",min:0,dflt:500},redraw:{valType:"boolean",dflt:!0}},transition:{duration:{valType:"number",min:0,dflt:500},easing:{valType:"enumerated",dflt:"cubic-in-out",values:["linear","quad","cubic","sin","exp","circle","elastic","back","bounce","linear-in","quad-in","cubic-in","sin-in","exp-in","circle-in","elastic-in","back-in","bounce-in","linear-out","quad-out","cubic-out","sin-out","exp-out","circle-out","elastic-out","back-out","bounce-out","linear-in-out","quad-in-out","cubic-in-out","sin-in-out","exp-in-out","circle-in-out","elastic-in-out","back-in-out","bounce-in-out"]}}}},{}],769:[function(t,e,r){"use strict";var n=t("../lib");e.exports=function(t,e,r){var i,a=r.name,o=e[a],s=n.isArray(t[a])?t[a]:[],l=e[a]=[];for(i=0;i<s.length;i++){var u=s[i],c={},h={};n.isPlainObject(u)||(h.itemIsNotPlainObject=!0,u={}),r.handleItemDefaults(u,c,e,r,h),c._input=u,c._index=i,l.push(c)}if(n.isArray(o)){var f=Math.min(o.length,l.length);for(i=0;i<f;i++)n.relinkPrivateKeys(l[i],o[i])}}},{"../lib":728}],770:[function(t,e,r){"use strict";var n=t("../components/fx/attributes");e.exports={type:{valType:"enumerated",values:[],dflt:"scatter",editType:"calc+clearAxisTypes"},visible:{valType:"enumerated",values:[!0,!1,"legendonly"],dflt:!0,editType:"calc"},showlegend:{valType:"boolean",dflt:!0,editType:"style"},legendgroup:{valType:"string",dflt:"",editType:"style"},opacity:{valType:"number",min:0,max:1,dflt:1,editType:"style"},name:{valType:"string",editType:"style"},uid:{valType:"string",dflt:"",editType:"calc"},ids:{valType:"data_array",editType:"calc"},customdata:{valType:"data_array",editType:"calc"},hoverinfo:{valType:"flaglist",flags:["x","y","z","text","name"],extras:["all","none","skip"],arrayOk:!0,dflt:"all",editType:"none"},hoverlabel:n.hoverlabel,stream:{token:{valType:"string",noBlank:!0,strict:!0,editType:"calc"},maxpoints:{valType:"number",min:0,max:1e4,dflt:500,editType:"calc"},editType:"calc"}}},{"../components/fx/attributes":637}],771:[function(t,e,r){"use strict";e.exports={xaxis:{valType:"subplotid",dflt:"x",editType:"calc+clearAxisTypes"},yaxis:{valType:"subplotid",dflt:"y",editType:"calc+clearAxisTypes"}}},{}],772:[function(t,e,r){"use strict";function n(t){return+t}function i(t){return String(t)}function a(t,e,r,n,i){function a(e){return(1+100*(e-t)/r.dtick)%100<2}for(var o=0,s=0,l=0,u=0,c=0;c<e.length;c++)e[c]%1==0?l++:M(e[c])||u++,a(e[c])&&o++,a(e[c]+r.dtick/2)&&s++;var h=e.length-u;if(l===h&&"date"!==r.type)r.dtick<1?t=n-.5*r.dtick:(t-=.5)+r.dtick<n&&(t+=r.dtick);else if(s<.1*h&&(o>.3*h||a(n)||a(i))){var f=r.dtick/2;t+=t+f<n?f:-f}return t}function o(t,e,r,n,i){var a=A.findExactDates(e,i);if(a.exactDays>.8){var o=Number(r.substr(1));a.exactYears>.8&&o%12==0?t=B.tickIncrement(t,"M6","reverse")+1.5*P:a.exactMonths>.8?t=B.tickIncrement(t,"M1","reverse")+15.5*P:t-=P/2;var s=B.tickIncrement(t,r);if(s<=n)return s}return t}function s(t){var e,r,n=t.tickvals,i=t.ticktext,a=new Array(n.length),o=A.simpleMap(t.range,t.r2l),s=1.0001*o[0]-1e-4*o[1],l=1.0001*o[1]-1e-4*o[0],u=Math.min(s,l),h=Math.max(s,l),f=0;Array.isArray(i)||(i=[]);var d="category"===t.type?t.d2l_noadd:t.d2l;for("log"===t.type&&"L"!==String(t.dtick).charAt(0)&&(t.dtick="L"+Math.pow(10,Math.floor(Math.min(t.range[0],t.range[1]))-1)),r=0;r<n.length;r++)(e=d(n[r]))>u&&e<h&&(void 0===i[r]?a[f]=B.tickText(t,e):a[f]=c(t,e,String(i[r])),f++);return f<n.length&&a.splice(f,n.length-f),a}function l(t,e,r){return e*A.roundUp(t/e,r)}function u(t){var e=t.dtick;if(t._tickexponent=0,M(e)||"string"==typeof e||(e=1),"category"===t.type&&(t._tickround=null),"date"===t.type){var r=t.r2l(t.tick0),n=t.l2r(r).replace(/(^-|i)/g,""),i=n.length;if("M"===String(e).charAt(0))i>10||"01-01"!==n.substr(5)?t._tickround="d":t._tickround=+e.substr(1)%12==0?"y":"m";else if(e>=P&&i<=10||e>=15*P)t._tickround="d";else if(e>=R&&i<=16||e>=O)t._tickround="M";else if(e>=F&&i<=19||e>=R)t._tickround="S";else{var a=t.l2r(r+e).replace(/^-/,"").length;t._tickround=Math.max(i,a)-20}}else if(M(e)||"L"===e.charAt(0)){var o=t.range.map(t.r2d||Number);M(e)||(e=Number(e.substr(1))),t._tickround=2-Math.floor(Math.log(e)/Math.LN10+.01);var s=Math.max(Math.abs(o[0]),Math.abs(o[1])),l=Math.floor(Math.log(s)/Math.LN10+.01);Math.abs(l)>3&&(m(t.exponentformat)&&!g(l)?t._tickexponent=3*Math.round((l-1)/3):t._tickexponent=l)}else t._tickround=null}function c(t,e,r){var n=t.tickfont||{};return{x:e,dx:0,dy:0,text:r||"",fontSize:n.size,font:n.family,fontColor:n.color}}function h(t,e,r,n){var i=t._tickround,a=r&&t.hoverformat||t.tickformat;n&&(i=M(i)?4:{y:"m",m:"d",d:"M",M:"S",S:4}[i]);var o,s=A.formatDate(e.x,a,i,t.calendar),l=s.indexOf("\n");-1!==l&&(o=s.substr(l+1),s=s.substr(0,l)),n&&("00:00:00"===s||"00:00"===s?(s=o,o=""):8===s.length&&(s=s.replace(/:00$/,""))),o&&(r?"d"===i?s+=", "+o:s=o+(s?", "+s:""):t._inCalcTicks&&o===t._prevDateHead||(s+="<br>"+o,t._prevDateHead=o)),e.text=s}function f(t,e,r,n,i){var a=t.dtick,o=e.x;if("never"===i&&(i=""),!n||"string"==typeof a&&"L"===a.charAt(0)||(a="L3"),t.tickformat||"string"==typeof a&&"L"===a.charAt(0))e.text=v(Math.pow(10,o),t,i,n);else if(M(a)||"D"===a.charAt(0)&&A.mod(o+.01,1)<.1){var s=Math.round(o);-1!==["e","E","power"].indexOf(t.exponentformat)||m(t.exponentformat)&&g(s)?(e.text=0===s?1:1===s?"10":s>1?"10<sup>"+s+"</sup>":"10<sup>"+j+-s+"</sup>",e.fontSize*=1.25):(e.text=v(Math.pow(10,o),t,"","fakehover"),"D1"===a&&"y"===t._id.charAt(0)&&(e.dy-=e.fontSize/6))}else{if("D"!==a.charAt(0))throw"unrecognized dtick "+String(a);e.text=String(Math.round(Math.pow(10,A.mod(o,1)))),e.fontSize*=.75}if("D1"===t.dtick){var l=String(e.text).charAt(0);"0"!==l&&"1"!==l||("y"===t._id.charAt(0)?e.dx-=e.fontSize/4:(e.dy+=e.fontSize/2,e.dx+=(t.range[1]>t.range[0]?1:-1)*e.fontSize*(o<0?.5:.25)))}}function d(t,e){var r=t._categories[Math.round(e.x)];void 0===r&&(r=""),e.text=String(r)}function p(t,e,r,n,i){"never"===i?i="":"all"===t.showexponent&&Math.abs(e.x/t.dtick)<1e-6&&(i="hide"),e.text=v(e.x,t,i,n)}function m(t){return"SI"===t||"B"===t}function g(t){return t>14||t<-15}function v(t,e,r,n){var i=t<0,a=e._tickround,o=r||e.exponentformat||"B",s=e._tickexponent,l=e.tickformat,c=e.separatethousands;if(n){var h={exponentformat:e.exponentformat,dtick:"none"===e.showexponent?e.dtick:M(t)?Math.abs(t)||1:1,range:"none"===e.showexponent?e.range.map(e.r2d):[0,t||1]};u(h),a=(Number(h._tickround)||0)+4,s=h._tickexponent,e.hoverformat&&(l=e.hoverformat)}if(l)return w.format(l)(t).replace(/-/g,j);var f=Math.pow(10,-a)/2;if("none"===o&&(s=0),(t=Math.abs(t))<f)t="0",i=!1;else{if(t+=f,s&&(t*=Math.pow(10,-s),a+=s),0===a)t=String(Math.floor(t));else if(a<0){t=String(Math.round(t)),t=t.substr(0,t.length+a);for(var d=a;d<0;d++)t+="0"}else{t=String(t);var p=t.indexOf(".")+1;p&&(t=t.substr(0,p+a).replace(/\.?0+$/,""))}t=A.numSeparate(t,e._separators,c)}if(s&&"hide"!==o){m(o)&&g(s)&&(o="power");var v;v=s<0?j+-s:"power"!==o?"+"+s:String(s),"e"===o?t+="e"+v:"E"===o?t+="E"+v:"power"===o?t+="\xd710<sup>"+v+"</sup>":"B"===o&&9===s?t+="B":m(o)&&(t+=J[s/3+5])}return i?j+t:t}function y(t,e){var r,n,i=[];for(r=0;r<e.length;r++){var a=[],o=t._fullData[e[r]].xaxis,s=t._fullData[e[r]].yaxis;if(o&&s){for(n=0;n<i.length;n++)-1===i[n].x.indexOf(o)&&-1===i[n].y.indexOf(s)||a.push(n);if(a.length){var l,u=i[a[0]];if(a.length>1)for(n=1;n<a.length;n++)l=i[a[n]],b(u.x,l.x),b(u.y,l.y);b(u.x,[o]),b(u.y,[s])}else i.push({x:[o],y:[s]})}}return i}function b(t,e){for(var r=0;r<e.length;r++)-1===t.indexOf(e[r])&&t.push(e[r])}function x(t,e,r){var n,i,a=[],o=[],s=t.layout;for(n=0;n<e.length;n++)a.push(B.getFromId(t,e[n]));for(n=0;n<r.length;n++)o.push(B.getFromId(t,r[n]));var l=Object.keys(a[0]),u=["anchor","domain","overlaying","position","side","tickangle"],c=["linear","log"];for(n=0;n<l.length;n++){var h=l[n],f=a[0][h],d=o[0][h],p=!0,m=!1,g=!1;if("_"!==h.charAt(0)&&"function"!=typeof f&&-1===u.indexOf(h)){for(i=1;i<a.length&&p;i++){var v=a[i][h];"type"===h&&-1!==c.indexOf(f)&&-1!==c.indexOf(v)&&f!==v?m=!0:v!==f&&(p=!1)}for(i=1;i<o.length&&p;i++){var y=o[i][h];"type"===h&&-1!==c.indexOf(d)&&-1!==c.indexOf(y)&&d!==y?g=!0:o[i][h]!==d&&(p=!1)}p&&(m&&(s[a[0]._name].type="linear"),g&&(s[o[0]._name].type="linear"),_(s,h,a,o))}}for(n=0;n<t._fullLayout.annotations.length;n++){var b=t._fullLayout.annotations[n];-1!==e.indexOf(b.xref)&&-1!==r.indexOf(b.yref)&&A.swapAttrs(s.annotations[n],["?"])}}function _(t,e,r,n){var i,a=A.nestedProperty,o=a(t[r[0]._name],e).get(),s=a(t[n[0]._name],e).get();for("title"===e&&("Click to enter X axis title"===o&&(o="Click to enter Y axis title"),"Click to enter Y axis title"===s&&(s="Click to enter X axis title")),i=0;i<r.length;i++)a(t,r[i]._name+"."+e).set(s);for(i=0;i<n.length;i++)a(t,n[i]._name+"."+e).set(o)}var w=t("d3"),M=t("fast-isnumeric"),k=t("../../registry"),A=t("../../lib"),T=t("../../lib/svg_text_utils"),S=t("../../components/titles"),E=t("../../components/color"),L=t("../../components/drawing"),C=t("../../constants/numerical"),I=C.FP_SAFE,z=C.ONEAVGYEAR,D=C.ONEAVGMONTH,P=C.ONEDAY,O=C.ONEHOUR,R=C.ONEMIN,F=C.ONESEC,j=C.MINUS_SIGN,N=t("../../constants/alignment").MID_SHIFT,B=e.exports={};B.layoutAttributes=t("./layout_attributes"),B.supplyLayoutDefaults=t("./layout_defaults"),B.setConvert=t("./set_convert");var U=t("./axis_autotype"),V=t("./axis_ids");B.id2name=V.id2name,B.cleanId=V.cleanId,B.list=V.list,B.listIds=V.listIds,B.getFromId=V.getFromId,B.getFromTrace=V.getFromTrace,B.coerceRef=function(t,e,r,n,i,a){var o=n.charAt(n.length-1),s=B.listIds(r,o),l=n+"ref",u={};return i||(i=s[0]||a),a||(a=i),u[l]={valType:"enumerated",values:s.concat(a?[a]:[]),dflt:i},A.coerce(t,e,u,l)},B.coercePosition=function(t,e,r,n,i,a){var o,s;if("paper"===n||"pixel"===n)o=A.ensureNumber,s=r(i,a);else{var l=B.getFromId(e,n);a=l.fraction2r(a),s=r(i,a),o=l.cleanPos}t[i]=o(s)},B.cleanPosition=function(t,e,r){return("paper"===r||"pixel"===r?A.ensureNumber:B.getFromId(e,r).cleanPos)(t)};var H=B.getDataConversions=function(t,e,r,a){var o,s="x"===r||"y"===r||"z"===r?r:a;if(Array.isArray(s)){if(o={type:U(a),_categories:[]},B.setConvert(o),"category"===o.type)for(var l=0;l<a.length;l++)o.d2c(a[l])}else o=B.getFromTrace(t,e,s);return o?{d2c:o.d2c,c2d:o.c2d}:"ids"===s?{d2c:i,c2d:i}:{d2c:n,c2d:n}};B.getDataToCoordFunc=function(t,e,r,n){return H(t,e,r,n).d2c},B.counterLetter=function(t){var e=t.charAt(0);return"x"===e?"y":"y"===e?"x":void 0},B.minDtick=function(t,e,r,n){-1===["log","category"].indexOf(t.type)&&n?void 0===t._minDtick?(t._minDtick=e,t._forceTick0=r):t._minDtick&&((t._minDtick/e+1e-6)%1<2e-6&&((r-t._forceTick0)/e%1+1.000001)%1<2e-6?(t._minDtick=e,t._forceTick0=r):((e/t._minDtick+1e-6)%1>2e-6||((r-t._forceTick0)/t._minDtick%1+1.000001)%1>2e-6)&&(t._minDtick=0)):t._minDtick=0},B.getAutoRange=function(t){var e,r=[],n=t._min[0].val,i=t._max[0].val;for(e=1;e<t._min.length&&n===i;e++)n=Math.min(n,t._min[e].val);for(e=1;e<t._max.length&&n===i;e++)i=Math.max(i,t._max[e].val);var a,o,s,l,u,c,h,f=0,d=!1;if(t.range){var p=A.simpleMap(t.range,t.r2l);d=p[1]<p[0]}for("reversed"===t.autorange&&(d=!0,t.autorange=!0),e=0;e<t._min.length;e++)for(o=t._min[e],a=0;a<t._max.length;a++)s=t._max[a],h=s.val-o.val,c=t._length-o.pad-s.pad,h>0&&c>0&&h/c>f&&(l=o,u=s,f=h/c);if(n===i){var m=n-1,g=n+1;r="tozero"===t.rangemode?n<0?[m,0]:[0,g]:"nonnegative"===t.rangemode?[Math.max(0,m),Math.max(0,g)]:[m,g]}else f&&("linear"!==t.type&&"-"!==t.type||("tozero"===t.rangemode?(l.val>=0&&(l={val:0,pad:0}),u.val<=0&&(u={val:0,pad:0})):"nonnegative"===t.rangemode&&(l.val-f*l.pad<0&&(l={val:0,pad:0}),u.val<0&&(u={val:1,pad:0})),f=(u.val-l.val)/(t._length-l.pad-u.pad)),r=[l.val-f*l.pad,u.val+f*u.pad]);return r[0]===r[1]&&("tozero"===t.rangemode?r=r[0]<0?[r[0],0]:r[0]>0?[0,r[0]]:[0,1]:(r=[r[0]-1,r[0]+1],"nonnegative"===t.rangemode&&(r[0]=Math.max(0,r[0])))),d&&r.reverse(),A.simpleMap(r,t.l2r||Number)},B.doAutoRange=function(t){t._length||t.setScale();var e=t._min&&t._max&&t._min.length&&t._max.length;if(t.autorange&&e){t.range=B.getAutoRange(t),t._r=t.range.slice(),t._rl=A.simpleMap(t._r,t.r2l);var r=t._input;r.range=t.range.slice(),r.autorange=t.autorange}},B.saveRangeInitial=function(t,e){for(var r=B.list(t,"",!0),n=!1,i=0;i<r.length;i++){var a=r[i],o=void 0===a._rangeInitial,s=o||!(a.range[0]===a._rangeInitial[0]&&a.range[1]===a._rangeInitial[1]);(o&&!1===a.autorange||e&&s)&&(a._rangeInitial=a.range.slice(),n=!0)}return n},B.saveShowSpikeInitial=function(t,e){for(var r=B.list(t,"",!0),n=!1,i="on",a=0;a<r.length;a++){var o=r[a],s=void 0===o._showSpikeInitial,l=s||!(o.showspikes===o._showspikes);(s||e&&l)&&(o._showSpikeInitial=o.showspikes,n=!0),"on"!==i||o.showspikes||(i="off")}return t._fullLayout._cartesianSpikesEnabled=i,n},B.expand=function(t,e,r){function n(t){if(Array.isArray(t))return function(e){return Math.max(Number(t[e]||0),0)};var e=Math.max(Number(t||0),0);return function(){return e}}function i(r){function n(t){return M(t)&&Math.abs(t)<I}if(l=e[r],M(l)){if(h=b(r)+v,f=x(r)+v,p=l-w(r),m=l+_(r),"log"===t.type&&p<m/10&&(p=m/10),u=t.c2l(p),c=t.c2l(m),y&&(u=Math.min(0,u),c=Math.max(0,c)),n(u)){for(d=!0,o=0;o<t._min.length&&d;o++)s=t._min[o],s.val<=u&&s.pad>=f?d=!1:s.val>=u&&s.pad<=f&&(t._min.splice(o,1),o--);d&&t._min.push({val:u,pad:y&&0===u?0:f})}if(n(c)){for(d=!0,o=0;o<t._max.length&&d;o++)s=t._max[o],s.val>=c&&s.pad>=h?d=!1:s.val<=c&&s.pad<=h&&(t._max.splice(o,1),o--);d&&t._max.push({val:c,pad:y&&0===c?0:h})}}}if((t.autorange||!!A.nestedProperty(t,"rangeslider.autorange").get())&&e){t._min||(t._min=[]),t._max||(t._max=[]),r||(r={}),t._m||t.setScale();var a,o,s,l,u,c,h,f,d,p,m,g=e.length,v=r.padded?.05*t._length:0,y=r.tozero&&("linear"===t.type||"-"===t.type);v&&"domain"===t.constrain&&t._inputDomain&&(v*=(t._inputDomain[1]-t._inputDomain[0])/(t.domain[1]-t.domain[0]));var b=n((t._m>0?r.ppadplus:r.ppadminus)||r.ppad||0),x=n((t._m>0?r.ppadminus:r.ppadplus)||r.ppad||0),_=n(r.vpadplus||r.vpad),w=n(r.vpadminus||r.vpad);for(a=0;a<6;a++)i(a);for(a=g-1;a>5;a--)i(a)}},B.autoBin=function(t,e,r,n,i){var s=A.aggNums(Math.min,null,t),l=A.aggNums(Math.max,null,t);if(i||(i=e.calendar),"category"===e.type)return{start:s-.5,end:l+.5,size:1,_count:l-s+1};var u;if(r)u=(l-s)/r;else{var c=A.distinctVals(t),h=Math.pow(10,Math.floor(Math.log(c.minDiff)/Math.LN10)),f=h*A.roundUp(c.minDiff/h,[.9,1.9,4.9,9.9],!0);u=Math.max(f,2*A.stdev(t)/Math.pow(t.length,n?.25:.4)),M(u)||(u=1)}var d;d="log"===e.type?{type:"linear",range:[s,l]}:{type:e.type,range:A.simpleMap([s,l],e.c2r,0,i),calendar:i},B.setConvert(d),B.autoTicks(d,u);var p,m,g=B.tickIncrement(B.tickFirst(d),d.dtick,"reverse",i);if("number"==typeof d.dtick)g=a(g,t,d,s,l),m=1+Math.floor((l-g)/d.dtick),p=g+m*d.dtick;else for("M"===d.dtick.charAt(0)&&(g=o(g,t,d.dtick,s,i)),p=g,m=0;p<=l;)p=B.tickIncrement(p,d.dtick,!1,i),m++;return{start:e.c2r(g,0,i),end:e.c2r(p,0,i),size:d.dtick,_count:m}},B.calcTicks=function(t){var e=A.simpleMap(t.range,t.r2l);if("auto"===t.tickmode||!t.dtick){var r,n=t.nticks;n||("category"===t.type?(r=t.tickfont?1.2*(t.tickfont.size||12):15,n=t._length/r):(r="y"===t._id.charAt(0)?40:80,n=A.constrain(t._length/r,4,9)+1)),"array"===t.tickmode&&(n*=100),B.autoTicks(t,Math.abs(e[1]-e[0])/n),t._minDtick>0&&t.dtick<2*t._minDtick&&(t.dtick=t._minDtick,t.tick0=t.l2r(t._forceTick0))}if(t.tick0||(t.tick0="date"===t.type?"2000-01-01":0),u(t),"array"===t.tickmode)return s(t);t._tmin=B.tickFirst(t);var i=e[1]<e[0],a=[],o=1.0001*e[1]-1e-4*e[0];"category"===t.type&&(o=i?Math.max(-.5,o):Math.min(t._categories.length-.5,o));for(var l=null,c=Math.max(1e3,t._length||0),h=t._tmin;(i?h>=o:h<=o)&&!(a.length>c||h===l);h=B.tickIncrement(h,t.dtick,i,t.calendar))l=h,a.push(h);t._tmax=a[a.length-1],t._prevDateHead="",t._inCalcTicks=!0;for(var f=new Array(a.length),d=0;d<a.length;d++)f[d]=B.tickText(t,a[d]);return t._inCalcTicks=!1,f};var q=[2,5,10],G=[1,2,3,6,12],Y=[1,2,5,10,15,30],W=[1,2,3,7,14],X=[-.046,0,.301,.477,.602,.699,.778,.845,.903,.954,1],Z=[-.301,0,.301,.699,1];B.autoTicks=function(t,e){var r;if("date"===t.type){t.tick0=A.dateTick0(t.calendar);var n=2*e;n>z?(e/=z,r=Math.pow(10,Math.floor(Math.log(e)/Math.LN10)),t.dtick="M"+12*l(e,r,q)):n>D?(e/=D,t.dtick="M"+l(e,1,G)):n>P?(t.dtick=l(e,P,W),t.tick0=A.dateTick0(t.calendar,!0)):n>O?t.dtick=l(e,O,G):n>R?t.dtick=l(e,R,Y):n>F?t.dtick=l(e,F,Y):(r=Math.pow(10,Math.floor(Math.log(e)/Math.LN10)),t.dtick=l(e,r,q))}else if("log"===t.type){t.tick0=0;var i=A.simpleMap(t.range,t.r2l);if(e>.7)t.dtick=Math.ceil(e);else if(Math.abs(i[1]-i[0])<1){var a=1.5*Math.abs((i[1]-i[0])/e);e=Math.abs(Math.pow(10,i[1])-Math.pow(10,i[0]))/a,r=Math.pow(10,Math.floor(Math.log(e)/Math.LN10)),t.dtick="L"+l(e,r,q)}else t.dtick=e>.3?"D2":"D1"}else"category"===t.type?(t.tick0=0,t.dtick=Math.ceil(Math.max(e,1))):(t.tick0=0,r=Math.pow(10,Math.floor(Math.log(e)/Math.LN10)),t.dtick=l(e,r,q));if(0===t.dtick&&(t.dtick=1),!M(t.dtick)&&"string"!=typeof t.dtick){var o=t.dtick;throw t.dtick=1,"ax.dtick error: "+String(o)}},B.tickIncrement=function(t,e,r,n){var i=r?-1:1;if(M(e))return t+i*e;var a=e.charAt(0),o=i*Number(e.substr(1));if("M"===a)return A.incrementMonth(t,o,n);if("L"===a)return Math.log(Math.pow(10,t)+o)/Math.LN10;if("D"===a){var s="D2"===e?Z:X,l=t+.01*i,u=A.roundUp(A.mod(l,1),s,r);return Math.floor(l)+Math.log(w.round(Math.pow(10,u),1))/Math.LN10}throw"unrecognized dtick "+String(e)},B.tickFirst=function(t){var e=t.r2l||Number,r=A.simpleMap(t.range,e),n=r[1]<r[0],i=n?Math.floor:Math.ceil,a=1.0001*r[0]-1e-4*r[1],o=t.dtick,s=e(t.tick0);if(M(o)){var l=i((a-s)/o)*o+s;return"category"===t.type&&(l=A.constrain(l,0,t._categories.length-1)),l}var u=o.charAt(0),c=Number(o.substr(1));if("M"===u){for(var h,f,d,p=0,m=s;p<10;){if(((h=B.tickIncrement(m,o,n,t.calendar))-a)*(m-a)<=0)return n?Math.min(m,h):Math.max(m,h);f=(a-(m+h)/2)/(h-m),d=u+(Math.abs(Math.round(f))||1)*c,m=B.tickIncrement(m,d,f<0?!n:n,t.calendar),p++}return A.error("tickFirst did not converge",t),m}if("L"===u)return Math.log(i((Math.pow(10,a)-s)/c)*c+s)/Math.LN10;if("D"===u){var g="D2"===o?Z:X,v=A.roundUp(A.mod(a,1),g,n);return Math.floor(a)+Math.log(w.round(Math.pow(10,v),1))/Math.LN10}throw"unrecognized dtick "+String(o)},B.tickText=function(t,e,r){function n(n){var i;return void 0===n||(r?"none"===n:(i={first:t._tmin,last:t._tmax}[n],"all"!==n&&e!==i))}var i,a,o=c(t,e),s="array"===t.tickmode,l=r||s,u="category"===t.type?t.d2l_noadd:t.d2l;if(s&&Array.isArray(t.ticktext)){var m=A.simpleMap(t.range,t.r2l),g=Math.abs(m[1]-m[0])/1e4;for(a=0;a<t.ticktext.length&&!(Math.abs(e-u(t.tickvals[a]))<g);a++);if(a<t.ticktext.length)return o.text=String(t.ticktext[a]),o}return i=r?"never":"none"!==t.exponentformat&&n(t.showexponent)?"hide":"","date"===t.type?h(t,o,r,l):"log"===t.type?f(t,o,r,l,i):"category"===t.type?d(t,o):p(t,o,r,l,i),t.tickprefix&&!n(t.showtickprefix)&&(o.text=t.tickprefix+o.text),t.ticksuffix&&!n(t.showticksuffix)&&(o.text+=t.ticksuffix),o};var J=["f","p","n","\u03bc","m","","k","M","G","T"];B.subplotMatch=/^x([0-9]*)y([0-9]*)$/,B.getSubplots=function(t,e){var r,n,i,a=[],o=t._fullData||t.data||[];for(r=0;r<o.length;r++){var s=o[r];if(!1!==s.visible&&"legendonly"!==s.visible&&(k.traceIs(s,"cartesian")||k.traceIs(s,"gl2d"))){i=(s.xaxis||"x")+(s.yaxis||"y"),-1===a.indexOf(i)&&a.push(i)}}var l=B.list(t,"",!0);for(r=0;r<l.length;r++){var u=l[r],c=u._id.charAt(0),h="free"===u.anchor?"x"===c?"y":"x":u.anchor,f=B.getFromId(t,h),d=!1;for(n=0;n<a.length;n++)if(function(t,e){return-1!==t.indexOf(e._id)}(a[n],u)){d=!0;break}"free"===u.anchor&&d||f&&(i="x"===c?u._id+f._id:f._id+u._id,-1===a.indexOf(i)&&a.push(i))}var p=B.subplotMatch,m=[];for(r=0;r<a.length;r++)i=a[r],p.test(i)&&m.push(i);return m.sort(function(t,e){var r=t.match(p),n=e.match(p);return r[1]===n[1]?+(r[2]||1)-(n[2]||1):+(r[1]||0)-(n[1]||0)}),e?B.findSubplotsWithAxis(m,e):m},B.findSubplotsWithAxis=function(t,e){for(var r=new RegExp("x"===e._id.charAt(0)?"^"+e._id+"y":e._id+"$"),n=[],i=0;i<t.length;i++){var a=t[i];r.test(a)&&n.push(a)}return n},B.makeClipPaths=function(t){var e,r,n=t._fullLayout,i={_offset:0,_length:n.width,_id:""},a={_offset:0,_length:n.height,_id:""},o=B.list(t,"x",!0),s=B.list(t,"y",!0),l=[];for(e=0;e<o.length;e++)for(l.push({x:o[e],y:a}),r=0;r<s.length;r++)0===e&&l.push({x:i,y:s[r]}),l.push({x:o[e],y:s[r]});var u=n._clips.selectAll(".axesclip").data(l,function(t){return t.x._id+t.y._id});u.enter().append("clipPath").classed("axesclip",!0).attr("id",function(t){return"clip"+n._uid+t.x._id+t.y._id}).append("rect"),u.exit().remove(),u.each(function(t){w.select(this).select("rect").attr({x:t.x._offset||0,y:t.y._offset||0,width:t.x._length||1,height:t.y._length||1})})},B.doTicks=function(t,e,r){function n(t){var e=u.l2p(t.x);return e>1&&e<u._length-1}function i(t,e){var r=t.selectAll("path."+_).data("inside"===u.ticks?q:b,x);e&&u.ticks?(r.enter().append("path").classed(_,1).classed("ticks",1).classed("crisp",1).call(E.stroke,u.tickcolor).style("stroke-width",F+"px").attr("d",e),r.attr("transform",d),r.exit().remove()):r.remove()}function a(r,n){function i(t,e){t.each(function(t){var r=y(e),n=w.select(this),i=n.select(".text-math-group"),a=d(t)+(M(e)&&0!=+e?" rotate("+e+","+f(t)+","+(p(t)-t.fontSize/2)+")":"");if(i.empty())n.select("text").attr({transform:a,"text-anchor":r});else{var o=L.bBox(i.node()).width*{end:-.5,start:.5}[r];i.attr("transform",a+(o?"translate("+o+",0)":""))}})}function a(){return I.length&&Promise.all(I)}function s(){if(i(h,u.tickangle),"x"===v&&!M(u.tickangle)&&("log"!==u.type||"D"!==String(u.dtick).charAt(0))){var t=[];for(h.each(function(e){var r=w.select(this),n=r.select(".text-math-group"),i=u.l2p(e.x);n.empty()&&(n=r.select("text"));var a=L.bBox(n.node());t.push({top:0,bottom:10,height:10,left:i-a.width/2,right:i+a.width/2+2,width:a.width+2})}),g=0;g<t.length-1;g++)if(A.bBoxIntersect(t[g],t[g+1])){C=30;break}if(C){Math.abs((b[b.length-1].x-b[0].x)*u._m)/(b.length-1)<2.5*E&&(C=90),i(h,C)}u._lastangle=C}return o(),e+" done"}function l(){function e(t,e){t[0]=Math.min(t[0],e[0]),t[1]=Math.max(t[1],e[1])}if(u.showticklabels){var n=t.getBoundingClientRect(),i=r.node().getBoundingClientRect();u._boundingBox={width:i.width,height:i.height,left:i.left-n.left,right:i.right-n.left,top:i.top-n.top,bottom:i.bottom-n.top}}else{var a,o=c._size;"x"===v?(a="free"===u.anchor?o.t+o.h*(1-u.position):o.t+o.h*(1-u._anchorAxis.domain[{bottom:0,top:1}[u.side]]),u._boundingBox={top:a,bottom:a,left:u._offset,rigth:u._offset+u._length,width:u._length,height:0}):(a="free"===u.anchor?o.l+o.w*u.position:o.l+o.w*u._anchorAxis.domain[{left:0,right:1}[u.side]],u._boundingBox={left:a,right:a,bottom:u._offset+u._length,top:u._offset,height:u._length,width:0})}if(m){var s=u._counterSpan=[1/0,-1/0];for(g=0;g<m.length;g++){var l=c._plots[m[g]],h=l["x"===v?"yaxis":"xaxis"];e(s,[h._offset,h._offset+h._length])}"free"===u.anchor&&e(s,"x"===v?[u._boundingBox.bottom,u._boundingBox.top]:[u._boundingBox.right,u._boundingBox.left])}}var h=r.selectAll("g."+_).data(b,x);if(!M(n))return h.remove(),void o();if(!u.showticklabels)return h.remove(),o(),void l();var f,p,y,k,S;"x"===v?(S="bottom"===U?1:-1,f=function(t){return t.dx+P*S},k=n+(D+z)*S,p=function(t){return t.dy+k+t.fontSize*("bottom"===U?1:-.2)},y=function(t){return M(t)&&0!==t&&180!==t?t*S<0?"end":"start":"middle"}):(S="right"===U?1:-1,p=function(t){return t.dy+t.fontSize*N-P*S},f=function(t){return t.dx+n+(D+z+(90===Math.abs(u.tickangle)?t.fontSize/2:0))*S},y=function(t){return M(t)&&90===Math.abs(t)?"middle":"right"===U?"start":"end"});var E=0,C=0,I=[];h.enter().append("g").classed(_,1).append("text").attr("text-anchor","middle").each(function(e){var r=w.select(this),n=t._promises.length;r.call(T.positionText,f(e),p(e)).call(L.font,e.font,e.fontSize,e.fontColor).text(e.text).call(T.convertToTspans,t),n=t._promises[n],n?I.push(t._promises.pop().then(function(){i(r,u.tickangle)})):i(r,u.tickangle)}),h.exit().remove(),h.each(function(t){E=Math.max(E,t.fontSize)}),i(h,u._lastangle||u.tickangle);var O=A.syncOrAsync([a,s,l]);return O&&O.then&&t._promises.push(O),O}function o(){if(!r){var n,i,a,o,s=V.getFromId(t,e),l=w.select(t).selectAll("g."+e+"tick"),u={selection:l,side:s.side},h=e.charAt(0),f=t._fullLayout._size,d=s.titlefont.size;if(l.size()){var p=L.getTranslate(l.node().parentNode);u.offsetLeft=p.x,u.offsetTop=p.y}var m=10+1.5*d+(s.linewidth?s.linewidth-1:0);"x"===h?(i="free"===s.anchor?{_offset:f.t+(1-(s.position||0))*f.h,_length:0}:V.getFromId(t,s.anchor),a=s._offset+s._length/2,o="top"===s.side?-m-d*(s.showticklabels?1:0):i._length+m+d*(s.showticklabels?1.5:.5),o+=i._offset,s.rangeslider&&s.rangeslider.visible&&s._boundingBox&&(o+=(c.height-c.margin.b-c.margin.t)*s.rangeslider.thickness+s._boundingBox.height),u.side||(u.side="bottom")):(i="free"===s.anchor?{_offset:f.l+(s.position||0)*f.w,_length:0}:V.getFromId(t,s.anchor),o=s._offset+s._length/2,a="right"===s.side?i._length+m+d*(s.showticklabels?1:.5):-m-d*(s.showticklabels?.5:0),a+=i._offset,n={rotate:"-90",offset:0},u.side||(u.side="left")),S.draw(t,e+"title",{propContainer:s,propName:s._name+".title",dfltName:h.toUpperCase()+" axis",avoid:u,transform:n,attributes:{x:a,y:o,"text-anchor":"middle"}})}}function s(t,e){return!0===t.visible&&t.xaxis+t.yaxis===e&&(!(!k.traceIs(t,"bar")||t.orientation!=={x:"h",y:"v"}[v])||t.fill&&t.fill.charAt(t.fill.length-1)===v)}function l(e,r,i){var a=e.gridlayer,o=e.zerolinelayer,l=e["hidegrid"+v]?[]:q,c=u._gridpath||"M0,0"+("x"===v?"v":"h")+r._length,h=a.selectAll("path."+C).data(!1===u.showgrid?[]:l,x);if(h.enter().append("path").classed(C,1).classed("crisp",1).attr("d",c).each(function(t){u.zeroline&&("linear"===u.type||"-"===u.type)&&Math.abs(t.x)<u.dtick/100&&w.select(this).remove()}),h.attr("transform",d).call(E.stroke,u.gridcolor||"#ddd").style("stroke-width",O+"px"),h.exit().remove(),o){for(var f=!1,p=0;p<t._fullData.length;p++)if(s(t._fullData[p],i)){f=!0;break}var m=A.simpleMap(u.range,u.r2l),g=m[0]*m[1]<=0&&u.zeroline&&("linear"===u.type||"-"===u.type)&&l.length&&(f||n({x:0})||!u.showline),y=o.selectAll("path."+I).data(g?[{x:0
}]:[]);y.enter().append("path").classed(I,1).classed("zl",1).classed("crisp",1).attr("d",c),y.attr("transform",d).call(E.stroke,u.zerolinecolor||E.defaultLine).style("stroke-width",R+"px"),y.exit().remove()}}var u,c=t._fullLayout,h=!1;if("object"==typeof e)u=e,e=u._id,h=!0;else if(u=B.getFromId(t,e),"redraw"===e&&c._paper.selectAll("g.subplot").each(function(t){var e=c._plots[t],r=e.xaxis,n=e.yaxis;e.xaxislayer.selectAll("."+r._id+"tick").remove(),e.yaxislayer.selectAll("."+n._id+"tick").remove(),e.gridlayer.selectAll("path").remove(),e.zerolinelayer.selectAll("path").remove(),c._infolayer.select(".g-"+r._id+"title").remove(),c._infolayer.select(".g-"+n._id+"title").remove()}),!e||"redraw"===e)return A.syncOrAsync(B.list(t,"",!0).map(function(r){return function(){if(r._id){var n=B.doTicks(t,r._id);return"redraw"===e&&(r._r=r.range.slice(),r._rl=A.simpleMap(r._r,r.r2l)),n}}}));u.tickformat||(-1===["none","e","E","power","SI","B"].indexOf(u.exponentformat)&&(u.exponentformat="e"),-1===["all","first","last","none"].indexOf(u.showexponent)&&(u.showexponent="all")),u.setScale();var f,d,p,m,g,v=e.charAt(0),y=B.counterLetter(e),b=B.calcTicks(u),x=function(t){return[t.text,t.x,u.mirror].join("_")},_=e+"tick",C=e+"grid",I=e+"zl",z=(u.linewidth||1)/2,D="outside"===u.ticks?u.ticklen:0,P=0,O=L.crispRound(t,u.gridwidth,1),R=L.crispRound(t,u.zerolinewidth,O),F=L.crispRound(t,u.tickwidth,1);if(u._counterangle&&"outside"===u.ticks){var j=u._counterangle*Math.PI/180;D=u.ticklen*Math.cos(j)+1,P=u.ticklen*Math.sin(j)}if(u.showticklabels&&("outside"===u.ticks||u.showline)&&(D+=.2*u.tickfont.size),"x"===v)f=["bottom","top"],d=function(t){return"translate("+u.l2p(t.x)+",0)"},p=function(t,e){if(u._counterangle){var r=u._counterangle*Math.PI/180;return"M0,"+t+"l"+Math.sin(r)*e+","+Math.cos(r)*e}return"M0,"+t+"v"+e};else{if("y"!==v)return void A.warn("Unrecognized doTicks axis:",e);f=["left","right"],d=function(t){return"translate(0,"+u.l2p(t.x)+")"},p=function(t,e){if(u._counterangle){var r=u._counterangle*Math.PI/180;return"M"+t+",0l"+Math.cos(r)*e+","+-Math.sin(r)*e}return"M"+t+",0h"+e}}var U=u.side||f[0],H=[-1,1,U===f[1]?1:-1];if("inside"!==u.ticks==("x"===v)&&(H=H.map(function(t){return-t})),u.visible){var q=b.filter(n);if(h){if(i(u._axislayer,p(u._pos+z*H[2],H[2]*u.ticklen)),u._counteraxis){l({gridlayer:u._gridlayer,zerolinelayer:u._zerolinelayer},u._counteraxis)}return a(u._axislayer,u._pos)}m=B.getSubplots(t,u);var G=m.map(function(t){var e=c._plots[t];if(c._has("cartesian")){var r=e[v+"axislayer"],n=u._linepositions[t]||[],o=e[y+"axis"],s=o._id===u.anchor,h=[!1,!1,!1],d="";if("allticks"===u.mirror?h=[!0,!0,!1]:s&&("ticks"===u.mirror?h=[!0,!0,!1]:h[f.indexOf(U)]=!0),u.mirrors)for(g=0;g<2;g++){var m=u.mirrors[o._id+f[g]];"ticks"!==m&&"labels"!==m||(h[g]=!0)}return void 0!==n[2]&&(h[2]=!0),h.forEach(function(t,e){var r=n[e],i=H[e];t&&M(r)&&(d+=p(r+z*i,i*u.ticklen))}),i(r,d),l(e,o,t),a(r,n[3])}}).filter(function(t){return t&&t.then});return G.length?Promise.all(G):0}},B.swap=function(t,e){for(var r=y(t,e),n=0;n<r.length;n++)x(t,r[n].x,r[n].y)}},{"../../components/color":604,"../../components/drawing":628,"../../components/titles":694,"../../constants/alignment":701,"../../constants/numerical":707,"../../lib":728,"../../lib/svg_text_utils":750,"../../registry":846,"./axis_autotype":773,"./axis_ids":775,"./layout_attributes":783,"./layout_defaults":784,"./set_convert":789,d3:122,"fast-isnumeric":131}],773:[function(t,e,r){"use strict";function n(t){if(!t)return!1;for(var e=0;e<t.length;e++)if(o(t[e]))return!0;return!1}function i(t,e){for(var r,n=0,i=0,a=Math.max(1,(t.length-1)/1e3),l=0;l<t.length;l+=a)r=t[Math.round(l)],s.isDateTime(r,e)&&(n+=1),o(r)&&(i+=1);return n>2*i}function a(t){for(var e,r=Math.max(1,(t.length-1)/1e3),n=0,i=0,a=0;a<t.length;a+=r)e=t[Math.round(a)],s.cleanNumber(e)!==l?n++:"string"==typeof e&&""!==e&&"None"!==e&&i++;return i>2*n}var o=t("fast-isnumeric"),s=t("../../lib"),l=t("../../constants/numerical").BADNUM;e.exports=function(t,e){return i(t,e)?"date":a(t)?"category":n(t)?"linear":"-"}},{"../../constants/numerical":707,"../../lib":728,"fast-isnumeric":131}],774:[function(t,e,r){"use strict";var n=t("tinycolor2").mix,i=t("../../registry"),a=t("../../lib"),o=t("../../components/color/attributes").lightFraction,s=t("./layout_attributes"),l=t("./tick_value_defaults"),u=t("./tick_mark_defaults"),c=t("./tick_label_defaults"),h=t("./category_order_defaults"),f=t("./set_convert"),d=t("./ordered_categories");e.exports=function(t,e,r,p,m){function g(r,n){return a.coerce2(t,e,s,r,n)}var v=p.letter,y=p.font||{},b="Click to enter "+(p.title||v.toUpperCase()+" axis")+" title",x=r("visible",!p.cheateronly),_=e.type;if("date"===_){i.getComponentMethod("calendars","handleDefaults")(t,e,"calendar",p.calendar)}if(f(e,m),r("autorange",!e.isValidRange(t.range))&&r("rangemode"),r("range"),e.cleanRange(),h(t,e,r),e._initialCategories="category"===_?d(v,e.categoryorder,e.categoryarray,p.data):[],!x)return e;var w=r("color"),M=w===t.color?w:y.color;r("title",b),a.coerceFont(r,"titlefont",{family:y.family,size:Math.round(1.2*y.size),color:M}),l(t,e,r,_),c(t,e,r,_,p),u(t,e,r,p);var k=g("linecolor",w),A=g("linewidth"),T=r("showline",!!k||!!A);T||(delete e.linecolor,delete e.linewidth),(T||e.ticks)&&r("mirror");var S=g("gridcolor",n(w,p.bgColor,o).toRgbString()),E=g("gridwidth");r("showgrid",p.showGrid||!!S||!!E)||(delete e.gridcolor,delete e.gridwidth);var L=g("zerolinecolor",w),C=g("zerolinewidth");return r("zeroline",p.showGrid||!!L||!!C)||(delete e.zerolinecolor,delete e.zerolinewidth),e}},{"../../components/color/attributes":603,"../../lib":728,"../../registry":846,"./category_order_defaults":776,"./layout_attributes":783,"./ordered_categories":785,"./set_convert":789,"./tick_label_defaults":790,"./tick_mark_defaults":791,"./tick_value_defaults":792,tinycolor2:534}],775:[function(t,e,r){"use strict";function n(t,e,r){function n(t,r){for(var n=Object.keys(t),i=/^[xyz]axis[0-9]*/,a=[],o=0;o<n.length;o++){var s=n[o];e&&s.charAt(0)!==e||i.test(s)&&a.push(r+s)}return a.sort()}var i=t._fullLayout;if(!i)return[];var o=n(i,"");if(r)return o;for(var s=a.getSubplotIds(i,"gl3d")||[],l=0;l<s.length;l++){var u=s[l];o=o.concat(n(i[u],u+"."))}return o}var i=t("../../registry"),a=t("../plots"),o=t("../../lib"),s=t("./constants");r.id2name=function(t){if("string"==typeof t&&t.match(s.AX_ID_PATTERN)){var e=t.substr(1);return"1"===e&&(e=""),t.charAt(0)+"axis"+e}},r.name2id=function(t){if(t.match(s.AX_NAME_PATTERN)){var e=t.substr(5);return"1"===e&&(e=""),t.charAt(0)+e}},r.cleanId=function(t,e){if(t.match(s.AX_ID_PATTERN)&&(!e||t.charAt(0)===e)){var r=t.substr(1).replace(/^0+/,"");return"1"===r&&(r=""),t.charAt(0)+r}},r.list=function(t,e,r){return n(t,e,r).map(function(e){return o.nestedProperty(t._fullLayout,e).get()})},r.listIds=function(t,e){return n(t,e,!0).map(r.name2id)},r.getFromId=function(t,e,n){var i=t._fullLayout;return"x"===n?e=e.replace(/y[0-9]*/,""):"y"===n&&(e=e.replace(/x[0-9]*/,"")),i[r.id2name(e)]},r.getFromTrace=function(t,e,n){var a=t._fullLayout,o=null;if(i.traceIs(e,"gl3d")){var s=e.scene;"scene"===s.substr(0,5)&&(o=a[s][n+"axis"])}else o=r.getFromId(t,e[n+"axis"]||n);return o}},{"../../lib":728,"../../registry":846,"../plots":831,"./constants":777}],776:[function(t,e,r){"use strict";e.exports=function(t,e,r){if("category"===e.type){var n,i=t.categoryarray,a=Array.isArray(i)&&i.length>0;a&&(n="array");var o=r("categoryorder",n);"array"===o&&r("categoryarray"),a||"array"!==o||(e.categoryorder="trace")}}},{}],777:[function(t,e,r){"use strict";var n=t("../../lib").counterRegex;e.exports={idRegex:{x:n("x"),y:n("y")},attrRegex:n("[xy]axis"),xAxisMatch:n("xaxis"),yAxisMatch:n("yaxis"),AX_ID_PATTERN:/^[xyz][0-9]*$/,AX_NAME_PATTERN:/^[xyz]axis[0-9]*$/,MINDRAG:8,MINSELECT:12,MINZOOM:20,DRAGGERSIZE:20,BENDPX:1.5,REDRAWDELAY:50,SELECTDELAY:100,SELECTID:"-select",DFLTRANGEX:[-1,6],DFLTRANGEY:[-1,4],traceLayerClasses:["imagelayer","maplayer","barlayer","carpetlayer","boxlayer","scatterlayer"],layerValue2layerClass:{"above traces":"above","below traces":"below"}}},{"../../lib":728}],778:[function(t,e,r){"use strict";function n(t,e,r,n){var i,a,s,l,u=n[o(e)].type,c=[];for(a=0;a<r.length;a++)(s=r[a])!==e&&(l=n[o(s)],l.type!==u||l.fixedrange||c.push(s));for(i=0;i<t.length;i++)if(t[i][e]){var h=t[i],f=[];for(a=0;a<c.length;a++)s=c[a],h[s]||f.push(s);return{linkableAxes:f,thisGroup:h}}return{linkableAxes:c,thisGroup:null}}function i(t,e,r,n,i){var a,o,s,l,u;null===e?(e={},e[r]=1,u=t.length,t.push(e)):u=t.indexOf(e);var c=Object.keys(e);for(a=0;a<t.length;a++)if(s=t[a],a!==u&&s[n]){var h=s[n];for(o=0;o<c.length;o++)l=c[o],s[l]=h*i*e[l];return void t.splice(u,1)}if(1!==i)for(o=0;o<c.length;o++)e[c[o]]*=i;e[n]=1}var a=t("../../lib"),o=t("./axis_ids").id2name;e.exports=function(t,e,r,o,s){var l=s._axisConstraintGroups,u=e._id,c=u.charAt(0);if(!e.fixedrange&&(r("constrain"),a.coerce(t,e,{constraintoward:{valType:"enumerated",values:"x"===c?["left","center","right"]:["bottom","middle","top"],dflt:"x"===c?"center":"middle"}},"constraintoward"),t.scaleanchor)){var h=n(l,u,o,s),f=a.coerce(t,e,{scaleanchor:{valType:"enumerated",values:h.linkableAxes}},"scaleanchor");if(f){var d=r("scaleratio");d||(d=e.scaleratio=1),i(l,h.thisGroup,u,f,d)}else-1!==o.indexOf(t.scaleanchor)&&a.warn("ignored "+e._name+'.scaleanchor: "'+t.scaleanchor+'" to avoid either an infinite loop and possibly inconsistent scaleratios, or because the targetaxis has fixed range.')}}},{"../../lib":728,"./axis_ids":775}],779:[function(t,e,r){"use strict";function n(t,e){var r=t._inputDomain,n=s[t.constraintoward],i=r[0]+(r[1]-r[0])*n;t.domain=t._input.domain=[i+(r[0]-i)/e,i+(r[1]-i)/e]}var i=t("./axis_ids").id2name,a=t("./scale_zoom"),o=t("../../constants/numerical").ALMOST_EQUAL,s=t("../../constants/alignment").FROM_BL;r.enforce=function(t){var e,r,s,l,u,c,h,f=t._fullLayout,d=f._axisConstraintGroups;for(e=0;e<d.length;e++){var p=d[e],m=Object.keys(p),g=1/0,v=0,y=1/0,b={},x={},_=!1;for(r=0;r<m.length;r++)s=m[r],x[s]=l=f[i(s)],l._inputDomain?l.domain=l._inputDomain.slice():l._inputDomain=l.domain.slice(),l._inputRange||(l._inputRange=l.range.slice()),l.setScale(),b[s]=u=Math.abs(l._m)/p[s],g=Math.min(g,u),"domain"!==l.constrain&&l._constraintShrinkable||(y=Math.min(y,u)),delete l._constraintShrinkable,v=Math.max(v,u),"domain"===l.constrain&&(_=!0);if(!(g>o*v)||_)for(r=0;r<m.length;r++)if(s=m[r],u=b[s],l=x[s],c=l.constrain,u!==y||"domain"===c)if(h=u/y,"range"===c)a(l,h);else{var w=l._inputDomain,M=(l.domain[1]-l.domain[0])/(w[1]-w[0]),k=(l.r2l(l.range[1])-l.r2l(l.range[0]))/(l.r2l(l._inputRange[1])-l.r2l(l._inputRange[0]));if((h/=M)*k<1){l.domain=l._input.domain=w.slice(),a(l,h);continue}if(k<1&&(l.range=l._input.range=l._inputRange.slice(),h*=k),l.autorange&&l._min.length&&l._max.length){var A=l.r2l(l.range[0]),T=l.r2l(l.range[1]),S=(A+T)/2,E=S,L=S,C=Math.abs(T-S),I=S-C*h*1.0001,z=S+C*h*1.0001;n(l,h),l.setScale();var D,P,O=Math.abs(l._m);for(P=0;P<l._min.length;P++)(D=l._min[P].val-l._min[P].pad/O)>I&&D<E&&(E=D);for(P=0;P<l._max.length;P++)(D=l._max[P].val+l._max[P].pad/O)<z&&D>L&&(L=D);var R=(L-E)/(2*C);h/=R,E=l.l2r(E),L=l.l2r(L),l.range=l._input.range=A<T?[E,L]:[L,E]}n(l,h)}}},r.clean=function(t,e){if(e._inputDomain){for(var r=!1,n=e._id,i=t._fullLayout._axisConstraintGroups,a=0;a<i.length;a++)if(i[a][n]){r=!0;break}r&&"domain"===e.constrain||(e._input.domain=e.domain=e._inputDomain,delete e._inputDomain)}}},{"../../constants/alignment":701,"../../constants/numerical":707,"./axis_ids":775,"./scale_zoom":787}],780:[function(t,e,r){"use strict";function n(t,e,r,n,i,a,o){var s=t.draglayer.selectAll("."+e).data([0]);return s.enter().append("rect").classed("drag",!0).classed(e,!0).style({fill:"transparent","stroke-width":0}).attr("data-subplot",t.id),s.call(S.setRect,n,i,a,o).call(E,r),s.node()}function i(t,e){for(var r=0;r<t.length;r++)if(!t[r].fixedrange)return e;return""}function a(t,e){var r,n=t.range[e],i=Math.abs(n-t.range[1-e]);return"date"===t.type?n:"log"===t.type?(r=Math.ceil(Math.max(0,-Math.log(i)/Math.LN10))+3,x.format("."+r+"g")(Math.pow(10,n))):(r=Math.floor(Math.log(Math.abs(n))/Math.LN10)-Math.floor(Math.log(i)/Math.LN10)+4,x.format("."+String(r)+"g")(n))}function o(t,e,r,n,i){var a,s,l,u;for(a=0;a<t.length;a++)s=t[a],s.fixedrange||(l=s._rl[0],u=s._rl[1]-l,s.range=[s.l2r(l+u*e),s.l2r(l+u*r)],n[s._name+".range[0]"]=s.range[0],n[s._name+".range[1]"]=s.range[1]);if(i&&i.length){var c=(e+(1-r))/2;o(i,c,1-c,n)}}function s(t,e){for(var r=0;r<t.length;r++){var n=t[r];n.fixedrange||(n.range=[n.l2r(n._rl[0]-e/n._m),n.l2r(n._rl[1]-e/n._m)])}}function l(t){return 1-(t>=0?Math.min(t,.9):1/(1/Math.max(t,-.3)+3.222))}function u(t,e){return t?"nsew"===t?"pan"===e?"move":"crosshair":t.toLowerCase()+"-resize":"pointer"}function c(t,e,r,n,i){return t.append("path").attr("class","zoombox").style({fill:e>.2?"rgba(0,0,0,0)":"rgba(255,255,255,0)","stroke-width":0}).attr("transform","translate("+r+", "+n+")").attr("d",i+"Z")}function h(t,e,r){return t.append("path").attr("class","zoombox-corners").style({fill:T.background,stroke:T.defaultLine,"stroke-width":1,opacity:0}).attr("transform","translate("+e+", "+r+")").attr("d","M0,0Z")}function f(t){t.selectAll(".select-outline").remove()}function d(t,e,r,n,i,a){t.attr("d",n+"M"+r.l+","+r.t+"v"+r.h+"h"+r.w+"v-"+r.h+"h-"+r.w+"Z"),i||(t.transition().style("fill",a>.2?"rgba(0,0,0,0.4)":"rgba(255,255,255,0.3)").duration(200),e.transition().style("opacity",1).duration(200))}function p(t){x.select(t).selectAll(".zoombox,.js-zoombox-backdrop,.js-zoombox-menu,.zoombox-corners").remove()}function m(t){return-1!==["lasso","select"].indexOf(t)}function g(t,e){return"M"+(t.l-.5)+","+(e-j-.5)+"h-3v"+(2*j+1)+"h3ZM"+(t.r+.5)+","+(e-j-.5)+"h3v"+(2*j+1)+"h-3Z"}function v(t,e){return"M"+(e-j-.5)+","+(t.t-.5)+"v-3h"+(2*j+1)+"v3ZM"+(e-j-.5)+","+(t.b+.5)+"v3h"+(2*j+1)+"v-3Z"}function y(t){var e=Math.floor(Math.min(t.b-t.t,t.r-t.l,j)/2);return"M"+(t.l-3.5)+","+(t.t-.5+e)+"h3v"+-e+"h"+e+"v-3h-"+(e+3)+"ZM"+(t.r+3.5)+","+(t.t-.5+e)+"h-3v"+-e+"h"+-e+"v-3h"+(e+3)+"ZM"+(t.r+3.5)+","+(t.b+.5-e)+"h-3v"+e+"h"+-e+"v3h"+(e+3)+"ZM"+(t.l-3.5)+","+(t.b+.5-e)+"h3v"+e+"h"+e+"v3h-"+(e+3)+"Z"}function b(t,e,r){var n,i,a,o,s,l,u=!1,c={},h={};for(n=0;n<t.length;n++){for(o=t[n],i=0;i<e.length;i++)if(o[e[i]]){for(s in o)-1===("x"===s.charAt(0)?e:r).indexOf(s)&&(c[s]=1);for(a=0;a<r.length;a++)o[r[a]]&&(u=!0)}for(i=0;i<r.length;i++)if(o[r[i]])for(l in o)-1===("x"===l.charAt(0)?e:r).indexOf(l)&&(h[l]=1)}return u&&(k.extendFlat(c,h),h={}),{x:c,y:h,xy:u}}var x=t("d3"),_=t("tinycolor2"),w=t("../../plotly"),M=t("../../registry"),k=t("../../lib"),A=t("../../lib/svg_text_utils"),T=t("../../components/color"),S=t("../../components/drawing"),E=t("../../lib/setcursor"),L=t("../../components/dragelement"),C=t("../../constants/alignment").FROM_TL,I=t("../plots"),z=t("./axes").doTicks,D=t("./axis_ids").getFromId,P=t("./select"),O=t("./scale_zoom"),R=t("./constants"),F=R.MINDRAG,j=R.MINZOOM,N=!0;e.exports=function(t,e,r,T,E,B,U,V){function H(){et=[e.xaxis],rt=[e.yaxis];var r=et[0],n=rt[0];at=r._length,ot=n._length;var a=dt._axisConstraintGroups,o=[r._id],s=[n._id];tt=[e].concat(U&&V?e.overlays:[]);for(var l=1;l<tt.length;l++){var c=tt[l].xaxis,h=tt[l].yaxis;-1===et.indexOf(c)&&(et.push(c),o.push(c._id)),-1===rt.indexOf(h)&&(rt.push(h),s.push(h._id))}st=i(et,V),lt=i(rt,U),ut=u(lt+st,dt.dragmode),nt=r._offset,it=n._offset;var f=b(a,o,s);ct=f.xy,ht=[];for(var d in f.x)ht.push(D(t,d));ft=[];for(var p in f.y)ft.push(D(t,p))}function q(e,r,n){var i=gt.getBoundingClientRect();yt=r-i.left,bt=n-i.top,xt={l:yt,r:yt,w:0,t:bt,b:bt,h:0},_t=t._hmpixcount?t._hmlumcount/t._hmpixcount:_(t._fullLayout.plot_bgcolor).getLuminance(),wt="M0,0H"+at+"V"+ot+"H0V0",Mt=!1,kt="xy",At=c(pt,_t,nt,it,wt),Tt=h(pt,nt,it),f(pt)}function G(e,r){function n(){kt="",xt.r=xt.l,xt.t=xt.b,Tt.attr("d","M0,0Z")}if(t._transitioningWithDuration)return!1;var i=Math.max(0,Math.min(at,e+yt)),a=Math.max(0,Math.min(ot,r+bt)),o=Math.abs(i-yt),s=Math.abs(a-bt);xt.l=Math.min(yt,i),xt.r=Math.max(yt,i),xt.t=Math.min(bt,a),xt.b=Math.max(bt,a),ct?o>j||s>j?(kt="xy",o/at>s/ot?(s=o*ot/at,bt>a?xt.t=bt-s:xt.b=bt+s):(o=s*at/ot,yt>i?xt.l=yt-o:xt.r=yt+o),Tt.attr("d",y(xt))):n():!lt||s<Math.min(Math.max(.6*o,F),j)?o<F?n():(xt.t=0,xt.b=ot,kt="x",Tt.attr("d",g(xt,bt))):!st||o<Math.min(.6*s,j)?(xt.l=0,xt.r=at,kt="y",Tt.attr("d",v(xt,yt))):(kt="xy",Tt.attr("d",y(xt))),xt.w=xt.r-xt.l,xt.h=xt.b-xt.t,d(At,Tt,xt,wt,Mt,_t),Mt=!0}function Y(e,r){if(Math.min(xt.h,xt.w)<2*F)return 2===r&&K(),p(t);"xy"!==kt&&"x"!==kt||o(et,xt.l/at,xt.r/at,St,ht),"xy"!==kt&&"y"!==kt||o(rt,(ot-xt.b)/ot,(ot-xt.t)/ot,St,ft),p(t),Q(kt),N&&t.data&&t._context.showTips&&(k.notifier("Double-click to<br>zoom back out","long"),N=!1)}function W(e,r){var n=1===(U+V).length;if(e)Q();else if(2!==r||n){if(1===r&&n){var i=U?rt[0]:et[0],o="s"===U||"w"===V?0:1,s=i._name+".range["+o+"]",l=a(i,o),u="left",c="middle";if(i.fixedrange)return;U?(c="n"===U?"top":"bottom","right"===i.side&&(u="right")):"e"===V&&(u="right"),t._context.showAxisRangeEntryBoxes&&x.select(gt).call(A.makeEditable,{gd:t,immediate:!0,background:dt.paper_bgcolor,text:String(l),fill:i.tickfont?i.tickfont.color:"#444",horizontalAlign:u,verticalAlign:c}).on("edit",function(e){var r=i.d2r(e);void 0!==r&&w.relayout(t,s,r)})}}else K()}function X(e){function r(t,e,r){function n(e){return t.l2r(a+(e-a)*r)}if(!t.fixedrange){var i=k.simpleMap(t.range,t.r2l),a=i[0]+(i[1]-i[0])*e;t.range=i.map(n)}}if(t._context.scrollZoom||dt._enablescrollzoom){if(t._transitioningWithDuration)return k.pauseEvent(e);var n=t.querySelector(".plotly");if(H(),!(n.scrollHeight-n.clientHeight>10||n.scrollWidth-n.clientWidth>10)){clearTimeout(Lt);var i=-e.deltaY;if(isFinite(i)||(i=e.wheelDelta/10),!isFinite(i))return void k.log("Did not find wheel motion attributes: ",e);var a,o=Math.exp(-Math.min(Math.max(i,-20),20)/200),s=It.draglayer.select(".nsewdrag").node().getBoundingClientRect(),l=(e.clientX-s.left)/s.width,u=(s.bottom-e.clientY)/s.height;if(V||ct){for(V||(l=.5),a=0;a<et.length;a++)r(et[a],l,o);Et[2]*=o,Et[0]+=Et[2]*l*(1/o-1)}if(U||ct){for(U||(u=.5),a=0;a<rt.length;a++)r(rt[a],u,o);Et[3]*=o,Et[1]+=Et[3]*(1-u)*(1/o-1)}return $(Et),J(U,V),Lt=setTimeout(function(){Et=[0,0,at,ot];var t;t=ct?"xy":(V?"x":"")+(U?"y":""),Q(t)},Ct),k.pauseEvent(e)}}}function Z(e,r){function n(t,e,r){for(var n,i,a=1-e,o=0;o<t.length;o++){var s=t[o];if(!s.fixedrange){n=s,i=s._rl[a]+(s._rl[e]-s._rl[a])/l(r/s._length);var u=s.l2r(i);!1!==u&&void 0!==u&&(s.range[e]=u)}}return n._length*(n._rl[e]-i)/(n._rl[e]-n._rl[a])}if(!t._transitioningWithDuration){if(H(),"ew"===st||"ns"===lt)return st&&s(et,e),lt&&s(rt,r),$([st?-e:0,lt?-r:0,at,ot]),void J(lt,st);if(ct&&st&&lt){var i="w"===st==("n"===lt)?1:-1,a=(e/at+i*r/ot)/2;e=a*at,r=i*a*ot}"w"===st?e=n(et,0,e):"e"===st?e=n(et,1,-e):st||(e=0),"n"===lt?r=n(rt,1,r):"s"===lt?r=n(rt,0,-r):lt||(r=0);var o="w"===st?e:0,u="n"===lt?r:0;if(ct){var c;if(!st&&1===lt.length){for(c=0;c<et.length;c++)et[c].range=et[c]._r.slice(),O(et[c],1-r/ot);e=r*at/ot,o=e/2}if(!lt&&1===st.length){for(c=0;c<rt.length;c++)rt[c].range=rt[c]._r.slice(),O(rt[c],1-e/at);r=e*ot/at,u=r/2}}$([o,u,at-e,ot-r]),J(lt,st)}}function J(e,r){function n(t){for(a=0;a<t.length;a++)t[a].fixedrange||o.push(t[a]._id)}function i(n,i,s){for(a=0;a<n.length;a++){var l=n[a];if((r&&-1!==o.indexOf(l.xref)||e&&-1!==o.indexOf(l.yref))&&(i(t,a),s))return}}var a,o=[];for((r||ct)&&(n(et),n(ht)),(e||ct)&&(n(rt),n(ft)),St={},a=0;a<o.length;a++){var s=o[a];z(t,s,!0);var l=D(t,s);St[l._name+".range[0]"]=l.range[0],St[l._name+".range[1]"]=l.range[1]}i(dt.annotations||[],M.getComponentMethod("annotations","drawOne")),i(dt.shapes||[],M.getComponentMethod("shapes","drawOne")),i(dt.images||[],M.getComponentMethod("images","draw"),!0)}function K(){if(!t._transitioningWithDuration){var e,r,n,i=t._context.doubleClick,a=(st?et:[]).concat(lt?rt:[]),o={};if("reset+autosize"===i)for(i="autosize",r=0;r<a.length;r++)if(e=a[r],e._rangeInitial&&(e.range[0]!==e._rangeInitial[0]||e.range[1]!==e._rangeInitial[1])||!e._rangeInitial&&!e.autorange){i="reset";break}if("autosize"===i)for(r=0;r<a.length;r++)e=a[r],e.fixedrange||(o[e._name+".autorange"]=!0);else if("reset"===i)for((st||ct)&&(a=a.concat(ht)),lt&&!ct&&(a=a.concat(ft)),ct&&(st?lt||(a=a.concat(rt)):a=a.concat(et)),r=0;r<a.length;r++)e=a[r],e._rangeInitial?(n=e._rangeInitial,o[e._name+".range[0]"]=n[0],o[e._name+".range[1]"]=n[1]):o[e._name+".autorange"]=!0;t.emit("plotly_doubleclick",null),w.relayout(t,o)}}function Q(e){void 0===e&&(e=(V?"x":"")+(U?"y":"")),$([0,0,at,ot]),k.syncOrAsync([I.previousPromises,function(){w.relayout(t,St)}],t)}function $(t){function e(t){return t.fixedrange?0:d&&-1!==ht.indexOf(t)?h:p&&-1!==(ct?ht:ft).indexOf(t)?f:0}function r(t,e){return e?(t.range=t._r.slice(),O(t,e),n(t,e)):0}function n(t,e){return t._length*(1-e)*C[t.constraintoward||"middle"]}var i,a,o,s,l,u=dt._plots,c=Object.keys(u),h=t[2]/et[0]._length,f=t[3]/rt[0]._length,d=V||ct,p=U||ct;for(i=0;i<c.length;i++){var m=u[c[i]],g=m.xaxis,v=m.yaxis,y=d&&!g.fixedrange&&-1!==et.indexOf(g),b=p&&!v.fixedrange&&-1!==rt.indexOf(v);if(y?(a=h,s=V?t[0]:n(g,a)):(a=e(g),s=r(g,a)),b?(o=f,l=U?t[1]:n(v,o)):(o=e(v),l=r(v,o)),a||o){a||(a=1),o||(o=1);var x=g._offset-s/a,_=v._offset-l/o;dt._defs.select("#"+m.clipId+"> rect").call(S.setTranslate,s,l).call(S.setScale,a,o);var w=m.plot.selectAll(".scatterlayer .points, .boxlayer .points");m.plot.call(S.setTranslate,x,_).call(S.setScale,1/a,1/o),w.selectAll(".point").call(S.setPointGroupScale,a,o).call(S.hideOutsideRangePoints,m),w.selectAll(".textpoint").call(S.setTextPointsScale,a,o).call(S.hideOutsideRangePoints,m)}}}var tt,et,rt,nt,it,at,ot,st,lt,ut,ct,ht,ft,dt=t._fullLayout,pt=t._fullLayout._zoomlayer,mt=U+V==="nsew";H();var gt=n(e,U+V+"drag",ut,r,T,E,B);if(!lt&&!st&&!m(dt.dragmode))return gt.onmousedown=null,gt.style.pointerEvents=mt?"all":"none",gt;var vt={element:gt,gd:t,plotinfo:e,prepFn:function(e,r,n){var i=t._fullLayout.dragmode;mt?e.shiftKey&&(i="pan"===i?"zoom":"pan"):i="pan",vt.minDrag="lasso"===i?1:void 0,"zoom"===i?(vt.moveFn=G,vt.doneFn=Y,vt.minDrag=1,q(e,r,n)):"pan"===i?(vt.moveFn=Z,vt.doneFn=W,f(pt)):m(i)&&(vt.xaxes=et,vt.yaxes=rt,P(e,r,n,vt,i))}};L.init(vt);var yt,bt,xt,_t,wt,Mt,kt,At,Tt,St={},Et=[0,0,at,ot],Lt=null,Ct=R.REDRAWDELAY,It=e.mainplot?dt._plots[e.mainplot]:e;return U.length*V.length!=1&&(void 0!==gt.onwheel?gt.onwheel=X:void 0!==gt.onmousewheel&&(gt.onmousewheel=X)),gt}},{"../../components/color":604,"../../components/dragelement":625,"../../components/drawing":628,"../../constants/alignment":701,"../../lib":728,"../../lib/setcursor":746,"../../lib/svg_text_utils":750,"../../plotly":767,"../../registry":846,"../plots":831,"./axes":772,"./axis_ids":775,"./constants":777,"./scale_zoom":787,"./select":788,d3:122,tinycolor2:534}],781:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),i=t("../../components/fx"),a=t("../../components/dragelement"),o=t("./constants"),s=t("./dragbox");e.exports=function(t){var e=t._fullLayout;if((e._has("cartesian")||e._has("gl2d"))&&!t._context.staticPlot){Object.keys(e._plots||{}).sort(function(t,r){if((e._plots[t].mainplot&&!0)===(e._plots[r].mainplot&&!0)){var n=t.split("y"),i=r.split("y");return n[0]===i[0]?Number(n[1]||1)-Number(i[1]||1):Number(n[0]||1)-Number(i[0]||1)}return e._plots[t].mainplot?1:-1}).forEach(function(r){var l=e._plots[r],u=l.xaxis,c=l.yaxis,h=(u._linepositions[r]||[])[3],f=(c._linepositions[r]||[])[3],d=o.DRAGGERSIZE;if(n(h)&&"top"===u.side&&(h-=d),n(f)&&"right"!==c.side&&(f-=d),!l.mainplot){var p=s(t,l,0,0,u._length,c._length,"ns","ew");p.onmousemove=function(e){t._fullLayout._rehover=function(){t._fullLayout._hoversubplot===r&&i.hover(t,e,r)},i.hover(t,e,r),t._fullLayout._lasthover=p,t._fullLayout._hoversubplot=r},p.onmouseout=function(e){t._dragging||(t._fullLayout._hoversubplot=null,a.unhover(t,e))},p.onclick=function(e){i.click(t,e,r)},t._context.showAxisDragHandles&&(s(t,l,-d,-d,d,d,"n","w"),s(t,l,u._length,-d,d,d,"n","e"),s(t,l,-d,c._length,d,d,"s","w"),s(t,l,u._length,c._length,d,d,"s","e"))}t._context.showAxisDragHandles&&(n(h)&&("free"===u.anchor&&(h-=e._size.h*(1-c.domain[1])),s(t,l,.1*u._length,h,.8*u._length,d,"","ew"),s(t,l,0,h,.1*u._length,d,"","w"),s(t,l,.9*u._length,h,.1*u._length,d,"","e")),n(f)&&("free"===c.anchor&&(f-=e._size.w*u.domain[0]),s(t,l,f,.1*c._length,d,.8*c._length,"ns",""),s(t,l,f,.9*c._length,d,.1*c._length,"s",""),s(t,l,f,0,d,.1*c._length,"n","")))});var r=e._hoverlayer.node();r.onmousemove=function(r){r.target=e._lasthover,i.hover(t,r,e._hoversubplot)},r.onclick=function(r){r.target=e._lasthover,i.click(t,r)},r.onmousedown=function(t){e._lasthover.onmousedown(t)}}}},{"../../components/dragelement":625,"../../components/fx":645,"./constants":777,"./dragbox":780,"fast-isnumeric":131}],782:[function(t,e,r){"use strict";function n(t,e,r,n,i){var a=t._fullLayout,o=a._modules;e.plot&&e.plot.selectAll("g:not(.scatterlayer)").selectAll("g.trace").remove();for(var s=0;s<o.length;s++){var l=o[s];if("cartesian"===l.basePlotModule.name){for(var u=[],c=0;c<r.length;c++){var h=r[c],f=h[0].trace;f._module===l&&!0===f.visible&&u.push(h)}l.plot(t,e,u,n,i)}}}function i(t){for(var e=t._fullLayout,r=Object.keys(e._plots),n=[],i=[],a=0;a<r.length;a++){var o=r[a],s=e._plots[o],l=s.xaxis,u=s.yaxis,c=l._mainAxis,h=u._mainAxis,f=c._id+h._id;f!==o&&-1!==r.indexOf(f)?(s.mainplot=f,s.mainplotinfo=e._plots[f],i.push(o)):n.push(o)}return n=n.concat(i)}function a(t){var e=t.plotgroup,r=t.id,n=f.layerValue2layerClass[t.xaxis.layer],i=f.layerValue2layerClass[t.yaxis.layer];if(t.mainplot){var a=t.mainplotinfo,o=a.plotgroup,l=r+"-x",u=r+"-y";t.gridlayer=s(a.overgrid,"g",r),t.zerolinelayer=s(a.overzero,"g",r),s(a.overlinesBelow,"path",l),s(a.overlinesBelow,"path",u),s(a.overaxesBelow,"g",l),s(a.overaxesBelow,"g",u),t.plot=s(a.overplot,"g",r),s(a.overlinesAbove,"path",l),s(a.overlinesAbove,"path",u),s(a.overaxesAbove,"g",l),s(a.overaxesAbove,"g",u),t.xlines=o.select(".overlines-"+n).select("."+l),t.ylines=o.select(".overlines-"+i).select("."+u),t.xaxislayer=o.select(".overaxes-"+n).select("."+l),t.yaxislayer=o.select(".overaxes-"+i).select("."+u)}else{var c=s(e,"g","layer-subplot");t.shapelayer=s(c,"g","shapelayer"),t.imagelayer=s(c,"g","imagelayer"),t.gridlayer=s(e,"g","gridlayer"),t.overgrid=s(e,"g","overgrid"),t.zerolinelayer=s(e,"g","zerolinelayer"),t.overzero=s(e,"g","overzero"),s(e,"path","xlines-below"),s(e,"path","ylines-below"),t.overlinesBelow=s(e,"g","overlines-below"),s(e,"g","xaxislayer-below"),s(e,"g","yaxislayer-below"),t.overaxesBelow=s(e,"g","overaxes-below"),t.plot=s(e,"g","plot"),t.overplot=s(e,"g","overplot"),s(e,"path","xlines-above"),s(e,"path","ylines-above"),t.overlinesAbove=s(e,"g","overlines-above"),s(e,"g","xaxislayer-above"),s(e,"g","yaxislayer-above"),t.overaxesAbove=s(e,"g","overaxes-above"),t.xlines=e.select(".xlines-"+n),t.ylines=e.select(".ylines-"+i),t.xaxislayer=e.select(".xaxislayer-"+n),t.yaxislayer=e.select(".yaxislayer-"+i)}for(var h=0;h<f.traceLayerClasses.length;h++)s(t.plot,"g",f.traceLayerClasses[h]);t.xlines.style("fill","none").classed("crisp",!0),t.ylines.style("fill","none").classed("crisp",!0)}function o(t,e){if(t){var r={};t.each(function(t){var n=l.select(this),i="clip"+e._uid+t+"plot";n.remove(),e._draggers.selectAll("g."+t).remove(),e._defs.select("#"+i).remove(),r[t]=!0});for(var n=e._plots,i=Object.keys(n),a=0;a<i.length;a++)for(var o=n[i[a]],s=o.overlays||[],u=0;u<s.length;u++){var c=s[u];r[c.id]&&c.plot.selectAll(".trace").remove()}}}function s(t,e,r){var n=t.selectAll("."+r).data([0]);return n.enter().append(e).classed(r,!0),n}var l=t("d3"),u=t("../../lib"),c=t("../plots"),h=t("./axis_ids"),f=t("./constants");r.name="cartesian",r.attr=["xaxis","yaxis"],r.idRoot=["x","y"],r.idRegex=f.idRegex,r.attrRegex=f.attrRegex,r.attributes=t("./attributes"),r.layoutAttributes=t("./layout_attributes"),r.transitionAxes=t("./transition_axes"),r.plot=function(t,e,r,i){var a,o=t._fullLayout,s=c.getSubplotIds(o,"cartesian"),l=t.calcdata;if(!Array.isArray(e))for(e=[],a=0;a<l.length;a++)e.push(a);for(a=0;a<s.length;a++){for(var u,h=s[a],f=o._plots[h],d=[],p=0;p<l.length;p++){var m=l[p],g=m[0].trace;g.xaxis+g.yaxis===h&&((-1!==e.indexOf(g.index)||g.carpet)&&(u&&u[0].trace.xaxis+u[0].trace.yaxis===h&&-1!==["tonextx","tonexty","tonext"].indexOf(g.fill)&&-1===d.indexOf(u)&&d.push(u),d.push(m)),u=m)}n(t,f,d,r,i)}},r.clean=function(t,e,r,n){var i,a,s,l=n._modules||[],u=e._modules||[];for(s=0;s<l.length;s++)if("scatter"===l[s].name){i=!0;break}for(s=0;s<u.length;s++)if("scatter"===u[s].name){a=!0;break}if(i&&!a){var c=n._plots,f=Object.keys(c||{});for(s=0;s<f.length;s++){var d=c[f[s]];d.plot&&d.plot.select("g.scatterlayer").selectAll("g.trace").remove()}n._infolayer.selectAll("g.rangeslider-container").select("g.scatterlayer").selectAll("g.trace").remove()}var p=n._has&&n._has("cartesian"),m=e._has&&e._has("cartesian");if(p&&!m){var g=n._cartesianlayer.selectAll(".subplot"),v=h.listIds({_fullLayout:n});for(g.call(o,n),n._defs.selectAll(".axesclip").remove(),s=0;s<v.length;s++)n._infolayer.select("."+v[s]+"title").remove()}},r.drawFramework=function(t){var e=t._fullLayout,r=i(t),n=e._cartesianlayer.selectAll(".subplot").data(r,u.identity);n.enter().append("g").attr("class",function(t){return"subplot "+t}),n.order(),n.exit().call(o,e),n.each(function(t){var r=e._plots[t];if(r.plotgroup=l.select(this),r.overlays=[],a(r),r.mainplot){e._plots[r.mainplot].overlays.push(r)}r.draglayer=s(e._draggers,"g",t)})},r.rangePlot=function(t,e,r){a(e),n(t,e,r),c.style(t)}},{"../../lib":728,"../plots":831,"./attributes":771,"./axis_ids":775,"./constants":777,"./layout_attributes":783,"./transition_axes":793,d3:122}],783:[function(t,e,r){"use strict";var n=t("../font_attributes"),i=t("../../components/color/attributes"),a=t("../../components/drawing/attributes").dash,o=t("../../lib/extend").extendFlat,s=t("./constants");e.exports={visible:{valType:"boolean",editType:"plot"},color:{valType:"color",dflt:i.defaultLine,editType:"ticks"},title:{valType:"string",editType:"ticks"},titlefont:n({editType:"ticks"}),type:{valType:"enumerated",values:["-","linear","log","date","category"],dflt:"-",editType:"calc"},autorange:{valType:"enumerated",values:[!0,!1,"reversed"],dflt:!0,editType:"calc",impliedEdits:{"range[0]":void 0,"range[1]":void 0}},rangemode:{valType:"enumerated",values:["normal","tozero","nonnegative"],dflt:"normal",editType:"calc"},range:{valType:"info_array",items:[{valType:"any",editType:"plot",impliedEdits:{"^autorange":!1}},{valType:"any",editType:"plot",impliedEdits:{"^autorange":!1}}],editType:"plot",impliedEdits:{autorange:!1}},fixedrange:{valType:"boolean",dflt:!1,editType:"calc"},scaleanchor:{valType:"enumerated",values:[s.idRegex.x.toString(),s.idRegex.y.toString()],editType:"calc"},scaleratio:{valType:"number",min:0,dflt:1,editType:"calc"},constrain:{valType:"enumerated",values:["range","domain"],dflt:"range",editType:"calc"},constraintoward:{valType:"enumerated",values:["left","center","right","top","middle","bottom"],editType:"calc"},tickmode:{valType:"enumerated",values:["auto","linear","array"],editType:"ticks",impliedEdits:{tick0:void 0,dtick:void 0}},nticks:{valType:"integer",min:0,dflt:0,editType:"ticks"},tick0:{valType:"any",editType:"ticks",impliedEdits:{tickmode:"linear"}},dtick:{valType:"any",editType:"ticks",impliedEdits:{tickmode:"linear"}},tickvals:{valType:"data_array",editType:"ticks"},ticktext:{valType:"data_array",editType:"ticks"},ticks:{valType:"enumerated",values:["outside","inside",""],editType:"ticks"},mirror:{valType:"enumerated",values:[!0,"ticks",!1,"all","allticks"],dflt:!1,editType:"ticks+layoutstyle"},ticklen:{valType:"number",min:0,dflt:5,editType:"ticks"},tickwidth:{valType:"number",min:0,dflt:1,editType:"ticks"},tickcolor:{valType:"color",dflt:i.defaultLine,editType:"ticks"},showticklabels:{valType:"boolean",dflt:!0,editType:"ticks"},showspikes:{valType:"boolean",dflt:!1,editType:"modebar"},spikecolor:{valType:"color",
dflt:null,editType:"none"},spikethickness:{valType:"number",dflt:3,editType:"none"},spikedash:o({},a,{dflt:"dash",editType:"none"}),spikemode:{valType:"flaglist",flags:["toaxis","across","marker"],dflt:"toaxis",editType:"none"},tickfont:n({editType:"ticks"}),tickangle:{valType:"angle",dflt:"auto",editType:"ticks"},tickprefix:{valType:"string",dflt:"",editType:"ticks"},showtickprefix:{valType:"enumerated",values:["all","first","last","none"],dflt:"all",editType:"ticks"},ticksuffix:{valType:"string",dflt:"",editType:"ticks"},showticksuffix:{valType:"enumerated",values:["all","first","last","none"],dflt:"all",editType:"ticks"},showexponent:{valType:"enumerated",values:["all","first","last","none"],dflt:"all",editType:"ticks"},exponentformat:{valType:"enumerated",values:["none","e","E","power","SI","B"],dflt:"B",editType:"ticks"},separatethousands:{valType:"boolean",dflt:!1,editType:"ticks"},tickformat:{valType:"string",dflt:"",editType:"ticks"},hoverformat:{valType:"string",dflt:"",editType:"none"},showline:{valType:"boolean",dflt:!1,editType:"layoutstyle"},linecolor:{valType:"color",dflt:i.defaultLine,editType:"layoutstyle"},linewidth:{valType:"number",min:0,dflt:1,editType:"ticks+layoutstyle"},showgrid:{valType:"boolean",editType:"ticks"},gridcolor:{valType:"color",dflt:i.lightLine,editType:"ticks"},gridwidth:{valType:"number",min:0,dflt:1,editType:"ticks"},zeroline:{valType:"boolean",editType:"ticks"},zerolinecolor:{valType:"color",dflt:i.defaultLine,editType:"ticks"},zerolinewidth:{valType:"number",dflt:1,editType:"ticks"},anchor:{valType:"enumerated",values:["free",s.idRegex.x.toString(),s.idRegex.y.toString()],editType:"plot"},side:{valType:"enumerated",values:["top","bottom","left","right"],editType:"plot"},overlaying:{valType:"enumerated",values:["free",s.idRegex.x.toString(),s.idRegex.y.toString()],editType:"calc"},layer:{valType:"enumerated",values:["above traces","below traces"],dflt:"above traces",editType:"plot"},domain:{valType:"info_array",items:[{valType:"number",min:0,max:1,editType:"calc"},{valType:"number",min:0,max:1,editType:"calc"}],dflt:[0,1],editType:"calc"},position:{valType:"number",min:0,max:1,dflt:0,editType:"plot"},categoryorder:{valType:"enumerated",values:["trace","category ascending","category descending","array"],dflt:"trace",editType:"calc"},categoryarray:{valType:"data_array",editType:"calc"},editType:"calc",_deprecated:{autotick:{valType:"boolean",editType:"ticks"}}}},{"../../components/color/attributes":603,"../../components/drawing/attributes":627,"../../lib/extend":717,"../font_attributes":796,"./constants":777}],784:[function(t,e,r){"use strict";var n=t("../../registry"),i=t("../../lib"),a=t("../../components/color"),o=t("../layout_attributes"),s=t("./constants"),l=t("./layout_attributes"),u=t("./type_defaults"),c=t("./axis_defaults"),h=t("./constraint_defaults"),f=t("./position_defaults"),d=t("./axis_ids");e.exports=function(t,e,r){function p(t,e){return Number(t.substr(5)||1)-Number(e.substr(5)||1)}function m(t,e){return i.coerce(N,B,l,t,e)}function g(t){var e={x:P,y:D}[t];return i.simpleMap(e,d.name2id)}var v,y=Object.keys(t),b=[],x=[],_=[],w=[],M=[],k=[],A={},T={};for(v=0;v<r.length;v++){var S,E,L=r[v];if(n.traceIs(L,"cartesian"))S=b,E=x;else{if(!n.traceIs(L,"gl2d"))continue;S=_,E=w}var C=d.id2name(L.xaxis),I=d.id2name(L.yaxis);if(n.traceIs(L,"carpet")&&("carpet"!==L.type||L._cheater)||C&&i.pushUnique(k,C),"carpet"===L.type&&L._cheater&&C&&i.pushUnique(M,C),C&&-1===S.indexOf(C)&&S.push(C),I&&-1===E.indexOf(I)&&E.push(I),n.traceIs(L,"2dMap")&&(A[C]=!0,A[I]=!0),n.traceIs(L,"oriented")){T["h"===L.orientation?I:C]=!0}}if(!e._has("gl3d")&&!e._has("geo"))for(v=0;v<y.length;v++){var z=y[v];-1===_.indexOf(z)&&-1===b.indexOf(z)&&s.xAxisMatch.test(z)?b.push(z):-1===w.indexOf(z)&&-1===x.indexOf(z)&&s.yAxisMatch.test(z)&&x.push(z)}b.length&&x.length&&i.pushUnique(e._basePlotModules,n.subplotsRegistry.cartesian);var D=b.concat(_).sort(p),P=x.concat(w).sort(p),O=D.concat(P),R=a.background;D.length&&P.length&&(R=i.coerce(t,e,o,"plot_bgcolor"));var F,j,N,B,U=a.combine(R,e.paper_bgcolor),V={x:g("x"),y:g("y")};for(v=0;v<O.length;v++){F=O[v],i.isPlainObject(t[F])||(t[F]={}),N=t[F],B=e[F]={},u(N,B,m,r,F),j=F.charAt(0);var H=function(e,r){for(var n={x:D,y:P}[e],i=[],a=0;a<n.length;a++){var o=n[a];o===r||(t[o]||{}).overlaying||i.push(d.name2id(o))}return i}(j,F),q={letter:j,font:e.font,outerTicks:A[F],showGrid:!T[F],data:r,bgColor:U,calendar:e.calendar,cheateronly:"x"===j&&-1!==M.indexOf(F)&&-1===k.indexOf(F)};c(N,B,m,q,e);m("showspikes")&&(m("spikecolor"),m("spikethickness"),m("spikedash"),m("spikemode"));var G={letter:j,counterAxes:V[j],overlayableAxes:H};f(N,B,m,G),B._input=N}var Y=n.getComponentMethod("rangeslider","handleDefaults"),W=n.getComponentMethod("rangeselector","handleDefaults");for(v=0;v<D.length;v++)F=D[v],N=t[F],B=e[F],Y(t,e,F),"date"===B.type&&W(N,B,e,P,B.calendar),m("fixedrange");for(v=0;v<P.length;v++){F=P[v],N=t[F],B=e[F];var X=e[d.id2name(B.anchor)];m("fixedrange",X&&X.rangeslider&&X.rangeslider.visible)}e._axisConstraintGroups=[];var Z=V.x.concat(V.y);for(v=0;v<O.length;v++)F=O[v],j=F.charAt(0),N=t[F],B=e[F],h(N,B,m,Z,e)}},{"../../components/color":604,"../../lib":728,"../../registry":846,"../layout_attributes":822,"./axis_defaults":774,"./axis_ids":775,"./constants":777,"./constraint_defaults":778,"./layout_attributes":783,"./position_defaults":786,"./type_defaults":794}],785:[function(t,e,r){"use strict";function n(t,e,r){var n,a,o,s,l,u=[],c=r.map(function(e){return e[t]}),h=i.bisector(e).left;for(n=0;n<c.length;n++)for(o=c[n],a=0;a<o.length;a++)null!==(s=o[a])&&void 0!==s&&((l=h(u,s))<u.length&&u[l]===s||u.splice(l,0,s));return u}var i=t("d3");e.exports=function(t,e,r,a){switch(e){case"array":return Array.isArray(r)?r.slice():[];case"category ascending":return n(t,i.ascending,a);case"category descending":return n(t,i.descending,a);case"trace":default:return[]}}},{d3:122}],786:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),i=t("../../lib");e.exports=function(t,e,r,a){var o=a.counterAxes||[],s=a.overlayableAxes||[],l=a.letter;"free"===i.coerce(t,e,{anchor:{valType:"enumerated",values:["free"].concat(o),dflt:n(t.position)?"free":o[0]||"free"}},"anchor")&&r("position"),i.coerce(t,e,{side:{valType:"enumerated",values:"x"===l?["bottom","top"]:["left","right"],dflt:"x"===l?"bottom":"left"}},"side");var u=!1;if(s.length&&(u=i.coerce(t,e,{overlaying:{valType:"enumerated",values:[!1].concat(s),dflt:!1}},"overlaying")),!u){var c=r("domain");c[0]>c[1]-.01&&(e.domain=[0,1]),i.noneOrAll(t.domain,e.domain,[0,1])}return r("layer"),e}},{"../../lib":728,"fast-isnumeric":131}],787:[function(t,e,r){"use strict";var n=t("../../constants/alignment").FROM_BL;e.exports=function(t,e,r){void 0===r&&(r=n[t.constraintoward||"center"]);var i=[t.r2l(t.range[0]),t.r2l(t.range[1])],a=i[0]+(i[1]-i[0])*r;t.range=t._input.range=[t.l2r(a+(i[0]-a)*e),t.l2r(a+(i[1]-a)*e)]}},{"../../constants/alignment":701}],788:[function(t,e,r){"use strict";function n(t){return t._id}function i(t,e){if(Array.isArray(t))for(var r=e.cd[0].trace,n=0;n<t.length;n++){var i=t[n];i.curveNumber=r.index,i.data=r._input,i.fullData=r,l(i,r,i.pointNumber)}return t}var a=t("../../lib/polygon"),o=t("../../lib/throttle"),s=t("../../components/color"),l=t("../../components/fx/helpers").appendArrayPointValue,u=t("./axes"),c=t("./constants"),h=a.filter,f=a.tester,d=c.MINSELECT;e.exports=function(t,e,r,a,l){function p(t){var e="y"===t._id.charAt(0)?1:0;return function(r){return t.p2d(r[e])}}function m(t,e){return t-e}var g,v=a.gd._fullLayout._zoomlayer,y=a.element.getBoundingClientRect(),b=a.plotinfo,x=b.xaxis._offset,_=b.yaxis._offset,w=e-y.left,M=r-y.top,k=w,A=M,T="M"+w+","+M,S=a.xaxes[0]._length,E=a.yaxes[0]._length,L=a.xaxes.map(n),C=a.yaxes.map(n),I=a.xaxes.concat(a.yaxes);"lasso"===l&&(g=h([[w,M]],c.BENDPX));var z=v.selectAll("path.select-outline").data([1,2]);z.enter().append("path").attr("class",function(t){return"select-outline select-outline-"+t}).attr("transform","translate("+x+", "+_+")").attr("d",T+"Z");var D,P,O,R,F,j=v.append("path").attr("class","zoombox-corners").style({fill:s.background,stroke:s.defaultLine,"stroke-width":1}).attr("transform","translate("+x+", "+_+")").attr("d","M0,0Z"),N=[],B=a.gd,U=B._fullLayout._uid+c.SELECTID,V=[];for(D=0;D<B.calcdata.length;D++)if(P=B.calcdata[D],O=P[0].trace,!0===O.visible&&O._module&&O._module.selectPoints)if(a.subplot)O.subplot!==a.subplot&&O.geo!==a.subplot||N.push({selectPoints:O._module.selectPoints,cd:P,xaxis:a.xaxes[0],yaxis:a.yaxes[0]});else{if(-1===L.indexOf(O.xaxis))continue;if(-1===C.indexOf(O.yaxis))continue;N.push({selectPoints:O._module.selectPoints,cd:P,xaxis:u.getFromId(B,O.xaxis),yaxis:u.getFromId(B,O.yaxis)})}var H;H=b.fillRangeItems?b.fillRangeItems:"select"===l?function(t,e){var r=t.range={};for(D=0;D<I.length;D++){var n=I[D],i=n._id.charAt(0);r[n._id]=[n.p2d(e[i+"min"]),n.p2d(e[i+"max"])].sort(m)}}:function(t,e,r){var n=t.lassoPoints={};for(D=0;D<I.length;D++){var i=I[D];n[i._id]=r.filtered.map(p(i))}},a.moveFn=function(t,e){var r;k=Math.max(0,Math.min(S,t+w)),A=Math.max(0,Math.min(E,e+M));var n=Math.abs(k-w),s=Math.abs(A-M);"select"===l?(s<Math.min(.6*n,d)?(r=f([[w,0],[w,E],[k,E],[k,0]]),j.attr("d","M"+r.xmin+","+(M-d)+"h-4v"+2*d+"h4ZM"+(r.xmax-1)+","+(M-d)+"h4v"+2*d+"h-4Z")):n<Math.min(.6*s,d)?(r=f([[0,M],[0,A],[S,A],[S,M]]),j.attr("d","M"+(w-d)+","+r.ymin+"v-4h"+2*d+"v4ZM"+(w-d)+","+(r.ymax-1)+"v4h"+2*d+"v-4Z")):(r=f([[w,M],[w,A],[k,A],[k,M]]),j.attr("d","M0,0Z")),z.attr("d","M"+r.xmin+","+r.ymin+"H"+(r.xmax-1)+"V"+(r.ymax-1)+"H"+r.xmin+"Z")):"lasso"===l&&(g.addPt([k,A]),r=f(g.filtered),z.attr("d","M"+g.filtered.join("L")+"Z")),o.throttle(U,c.SELECTDELAY,function(){for(V=[],D=0;D<N.length;D++){R=N[D];var t=i(R.selectPoints(R,r),R);if(V.length)for(var e=0;e<t.length;e++)V.push(t[e]);else V=t}F={points:V},H(F,r,g),a.gd.emit("plotly_selecting",F)})},a.doneFn=function(t,e){j.remove(),o.done(U).then(function(){if(o.clear(U),t||2!==e)a.gd.emit("plotly_selected",F);else{for(z.remove(),D=0;D<N.length;D++)R=N[D],R.selectPoints(R,!1);B.emit("plotly_deselect",null)}})}}},{"../../components/color":604,"../../components/fx/helpers":642,"../../lib/polygon":739,"../../lib/throttle":751,"./axes":772,"./constants":777}],789:[function(t,e,r){"use strict";function n(t){return Math.pow(10,t)}var i=t("d3"),a=t("fast-isnumeric"),o=t("../../lib"),s=o.cleanNumber,l=o.ms2DateTime,u=o.dateTime2ms,c=o.ensureNumber,h=t("../../constants/numerical"),f=h.FP_SAFE,d=h.BADNUM,p=t("./constants"),m=t("./axis_ids");e.exports=function(t,e){function r(e,r){if(e>0)return Math.log(e)/Math.LN10;if(e<=0&&r&&t.range&&2===t.range.length){var n=t.range[0],i=t.range[1];return.5*(n+i-3*M*Math.abs(n-i))}return d}function h(e,r,n){var i=u(e,n||t.calendar);if(i===d){if(!a(e))return d;i=u(new Date(+e))}return i}function g(e,r,n){return l(e,r,n||t.calendar)}function v(e){return t._categories[Math.round(e)]}function y(e){if(null!==e&&void 0!==e){if(void 0===t._categoriesMap&&(t._categoriesMap={}),void 0!==t._categoriesMap[e])return t._categoriesMap[e];t._categories.push(e);var r=t._categories.length-1;return t._categoriesMap[e]=r,r}return d}function b(e){if(t._categoriesMap){var r=t._categoriesMap[e];if(void 0!==r)return r}if(a(e))return+e}function x(e){return a(e)?i.round(t._b+t._m*e,2):d}function _(e){return(e-t._b)/t._m}e=e||{};var w=(t._id||"x").charAt(0),M=10;t.c2l="log"===t.type?r:c,t.l2c="log"===t.type?n:c,t.l2p=x,t.p2l=_,t.c2p="log"===t.type?function(t,e){return x(r(t,e))}:x,t.p2c="log"===t.type?function(t){return n(_(t))}:_,-1!==["linear","-"].indexOf(t.type)?(t.d2r=t.r2d=t.d2c=t.r2c=t.d2l=t.r2l=s,t.c2d=t.c2r=t.l2d=t.l2r=c,t.d2p=t.r2p=function(e){return t.l2p(s(e))},t.p2d=t.p2r=_,t.cleanPos=c):"log"===t.type?(t.d2r=t.d2l=function(t,e){return r(s(t),e)},t.r2d=t.r2c=function(t){return n(s(t))},t.d2c=t.r2l=s,t.c2d=t.l2r=c,t.c2r=r,t.l2d=n,t.d2p=function(e,r){return t.l2p(t.d2r(e,r))},t.p2d=function(t){return n(_(t))},t.r2p=function(e){return t.l2p(s(e))},t.p2r=_,t.cleanPos=c):"date"===t.type?(t.d2r=t.r2d=o.identity,t.d2c=t.r2c=t.d2l=t.r2l=h,t.c2d=t.c2r=t.l2d=t.l2r=g,t.d2p=t.r2p=function(e,r,n){return t.l2p(h(e,0,n))},t.p2d=t.p2r=function(t,e,r){return g(_(t),e,r)},t.cleanPos=function(e){return o.cleanDate(e,d,t.calendar)}):"category"===t.type&&(t.d2c=t.d2l=y,t.r2d=t.c2d=t.l2d=v,t.d2r=t.d2l_noadd=b,t.r2c=function(e){var r=b(e);return void 0!==r?r:t.fraction2r(.5)},t.l2r=t.c2r=c,t.r2l=b,t.d2p=function(e){return t.l2p(t.r2c(e))},t.p2d=function(t){return v(_(t))},t.r2p=t.d2p,t.p2r=_,t.cleanPos=function(t){return"string"==typeof t&&""!==t?t:c(t)}),t.fraction2r=function(e){var r=t.r2l(t.range[0]),n=t.r2l(t.range[1]);return t.l2r(r+e*(n-r))},t.r2fraction=function(e){var r=t.r2l(t.range[0]),n=t.r2l(t.range[1]);return(t.r2l(e)-r)/(n-r)},t.cleanRange=function(e){e||(e="range");var r,n,i=o.nestedProperty(t,e).get();if(n="date"===t.type?o.dfltRange(t.calendar):"y"===w?p.DFLTRANGEY:p.DFLTRANGEX,n=n.slice(),!i||2!==i.length)return void o.nestedProperty(t,e).set(n);for("date"===t.type&&(i[0]=o.cleanDate(i[0],d,t.calendar),i[1]=o.cleanDate(i[1],d,t.calendar)),r=0;r<2;r++)if("date"===t.type){if(!o.isDateTime(i[r],t.calendar)){t[e]=n;break}if(t.r2l(i[0])===t.r2l(i[1])){var s=o.constrain(t.r2l(i[0]),o.MIN_MS+1e3,o.MAX_MS-1e3);i[0]=t.l2r(s-1e3),i[1]=t.l2r(s+1e3);break}}else{if(!a(i[r])){if(!a(i[1-r])){t[e]=n;break}i[r]=i[1-r]*(r?10:.1)}if(i[r]<-f?i[r]=-f:i[r]>f&&(i[r]=f),i[0]===i[1]){var l=Math.max(1,Math.abs(1e-6*i[0]));i[0]-=l,i[1]+=l}}},t.setScale=function(r){var n=e._size;if(t._categories||(t._categories=[]),t._categoriesMap||(t._categoriesMap={}),t.overlaying){var i=m.getFromId({_fullLayout:e},t.overlaying);t.domain=i.domain}var a=r&&t._r?"_r":"range",s=t.calendar;t.cleanRange(a);var l=t.r2l(t[a][0],s),u=t.r2l(t[a][1],s);if("y"===w?(t._offset=n.t+(1-t.domain[1])*n.h,t._length=n.h*(t.domain[1]-t.domain[0]),t._m=t._length/(l-u),t._b=-t._m*u):(t._offset=n.l+t.domain[0]*n.w,t._length=n.w*(t.domain[1]-t.domain[0]),t._m=t._length/(u-l),t._b=-t._m*l),!isFinite(t._m)||!isFinite(t._b))throw o.notifier("Something went wrong with axis scaling","long"),e._replotting=!1,new Error("axis scaling")},t.makeCalcdata=function(e,r){var n,i,a,o="date"===t.type&&e[r+"calendar"];if(r in e)for(n=e[r],i=new Array(n.length),a=0;a<n.length;a++)i[a]=t.d2c(n[a],0,o);else{var s=r+"0"in e?t.d2c(e[r+"0"],0,o):0,l=e["d"+r]?Number(e["d"+r]):1;for(n=e[{x:"y",y:"x"}[r]],i=new Array(n.length),a=0;a<n.length;a++)i[a]=s+a*l}return i},t.isValidRange=function(e){return Array.isArray(e)&&2===e.length&&a(t.r2l(e[0]))&&a(t.r2l(e[1]))},t.isPtWithinRange="x"===w?function(e){var r=e.x;return r>=t.range[0]&&r<=t.range[1]}:function(e){var r=e.y;return r>=t.range[0]&&r<=t.range[1]},t._min=[],t._max=[],t._separators=e.separators,delete t._minDtick,delete t._forceTick0}},{"../../constants/numerical":707,"../../lib":728,"./axis_ids":775,"./constants":777,d3:122,"fast-isnumeric":131}],790:[function(t,e,r){"use strict";function n(t){var e=["showexponent","showtickprefix","showticksuffix"],r=e.filter(function(e){return void 0!==t[e]}),n=function(e){return t[e]===t[r[0]]};if(r.every(n)||1===r.length)return t[r[0]]}var i=t("../../lib");e.exports=function(t,e,r,a,o){var s=n(t);if(r("tickprefix")&&r("showtickprefix",s),r("ticksuffix")&&r("showticksuffix",s),r("showticklabels")){var l=o.font||{},u=e.color===t.color?e.color:l.color;i.coerceFont(r,"tickfont",{family:l.family,size:l.size,color:u}),r("tickangle"),"category"!==a&&(r("tickformat")||"date"===a||(r("showexponent",s),r("exponentformat"),r("separatethousands")))}"category"===a||o.noHover||r("hoverformat")}},{"../../lib":728}],791:[function(t,e,r){"use strict";var n=t("../../lib"),i=t("./layout_attributes");e.exports=function(t,e,r,a){var o=n.coerce2(t,e,i,"ticklen"),s=n.coerce2(t,e,i,"tickwidth"),l=n.coerce2(t,e,i,"tickcolor",e.color);r("ticks",a.outerTicks||o||s||l?"outside":"")||(delete e.ticklen,delete e.tickwidth,delete e.tickcolor)}},{"../../lib":728,"./layout_attributes":783}],792:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),i=t("../../lib"),a=t("../../constants/numerical").ONEDAY;e.exports=function(t,e,r,o){var s="auto";"array"!==t.tickmode||"log"!==o&&"date"!==o||(t.tickmode="auto"),Array.isArray(t.tickvals)?s="array":t.dtick&&(s="linear");var l=r("tickmode",s);if("auto"===l)r("nticks");else if("linear"===l){var u="date"===o?a:1,c=r("dtick",u);if(n(c))e.dtick=c>0?Number(c):u;else if("string"!=typeof c)e.dtick=u;else{var h=c.charAt(0),f=c.substr(1);f=n(f)?Number(f):0,(f<=0||!("date"===o&&"M"===h&&f===Math.round(f)||"log"===o&&"L"===h||"log"===o&&"D"===h&&(1===f||2===f)))&&(e.dtick=u)}var d="date"===o?i.dateTick0(e.calendar):0,p=r("tick0",d);"date"===o?e.tick0=i.cleanDate(p,d):n(p)&&"D1"!==c&&"D2"!==c?e.tick0=Number(p):e.tick0=d}else{var m=r("tickvals");void 0===m?e.tickmode="auto":r("ticktext")}}},{"../../constants/numerical":707,"../../lib":728,"fast-isnumeric":131}],793:[function(t,e,r){"use strict";var n=t("d3"),i=t("../../plotly"),a=t("../../registry"),o=t("../../components/drawing"),s=t("./axes"),l=t("./constants").attrRegex;e.exports=function(t,e,r,u){function c(e,r){function n(e,r,n){for(i=0;i<e.length;i++){var a=e[i];if(-1===o.indexOf(a.xref)&&-1===o.indexOf(a.yref)||r(t,i),n)return}}var i,o=[];for(o=[e._id,r._id],i=0;i<o.length;i++)s.doTicks(t,o[i],!0);n(g.annotations||[],a.getComponentMethod("annotations","drawOne")),n(g.shapes||[],a.getComponentMethod("shapes","drawOne")),n(g.images||[],a.getComponentMethod("images","draw"),!0)}function h(t){var e=t.xaxis,r=t.yaxis;g._defs.select("#"+t.clipId+"> rect").call(o.setTranslate,0,0).call(o.setScale,1,1),t.plot.call(o.setTranslate,e._offset,r._offset).call(o.setScale,1,1);var n=t.plot.select(".scatterlayer").selectAll(".points");n.selectAll(".point").call(o.setPointGroupScale,1,1).call(o.hideOutsideRangePoints,t),n.selectAll(".textpoint").call(o.setTextPointsScale,1,1).call(o.hideOutsideRangePoints,t)}function f(e,r){var n,i,a,s=y[e.xaxis._id],l=y[e.yaxis._id],u=[];if(s){n=t._fullLayout[s.axisName],i=n._r,a=s.to,u[0]=(i[0]*(1-r)+r*a[0]-i[0])/(i[1]-i[0])*e.xaxis._length;var h=i[1]-i[0],f=a[1]-a[0];n.range[0]=i[0]*(1-r)+r*a[0],n.range[1]=i[1]*(1-r)+r*a[1],u[2]=e.xaxis._length*(1-r+r*f/h)}else u[0]=0,u[2]=e.xaxis._length;if(l){n=t._fullLayout[l.axisName],i=n._r,a=l.to,u[1]=(i[1]*(1-r)+r*a[1]-i[1])/(i[0]-i[1])*e.yaxis._length;var d=i[1]-i[0],p=a[1]-a[0];n.range[0]=i[0]*(1-r)+r*a[0],n.range[1]=i[1]*(1-r)+r*a[1],u[3]=e.yaxis._length*(1-r+r*p/d)}else u[1]=0,u[3]=e.yaxis._length;c(e.xaxis,e.yaxis);var m=e.xaxis,v=e.yaxis,b=!!s,x=!!l,_=b?m._length/u[2]:1,w=x?v._length/u[3]:1,M=b?u[0]:0,k=x?u[1]:0,A=b?u[0]/u[2]*m._length:0,T=x?u[1]/u[3]*v._length:0,S=m._offset-A,E=v._offset-T;g._defs.select("#"+e.clipId+"> rect").call(o.setTranslate,M,k).call(o.setScale,1/_,1/w),e.plot.call(o.setTranslate,S,E).call(o.setScale,_,w).selectAll(".points").selectAll(".point").call(o.setPointGroupScale,1/_,1/w),e.plot.selectAll(".points").selectAll(".textpoint").call(o.setTextPointsScale,1/_,1/w)}function d(){for(var e={},r=0;r<b.length;r++){var n=t._fullLayout[y[b[r]].axisName],a=y[b[r]].to;e[n._name+".range[0]"]=a[0],e[n._name+".range[1]"]=a[1],n.range=a.slice()}return _&&_(),i.relayout(t,e).then(function(){for(var t=0;t<x.length;t++)h(x[t])})}function p(){for(var e={},r=0;r<b.length;r++){var n=t._fullLayout[b[r]+"axis"];e[n._name+".range[0]"]=n.range[0],e[n._name+".range[1]"]=n.range[1],n.range=n._r.slice()}return i.relayout(t,e).then(function(){for(var t=0;t<x.length;t++)h(x[t])})}function m(){M=Date.now();for(var t=Math.min(1,(M-w)/r.duration),e=A(t),n=0;n<x.length;n++)f(x[n],e);M-w>r.duration?(d(),k=window.cancelAnimationFrame(m)):k=window.requestAnimationFrame(m)}var g=t._fullLayout,v=[],y=function(t){var e,r,n,i,a={};for(e in t)if(r=e.split("."),r[0].match(l)){var o=e.charAt(0),s=r[0];if(n=g[s],i={},Array.isArray(t[e])?i.to=t[e].slice(0):Array.isArray(t[e].range)&&(i.to=t[e].range.slice(0)),!i.to)continue;i.axisName=s,i.length=n._length,v.push(o),a[o]=i}return a}(e),b=Object.keys(y),x=function(t,e,r){var n,i,a,o=t._plots,s=[];for(n in o){var l=o[n];if(-1===s.indexOf(l)){var u=l.xaxis._id,c=l.yaxis._id,h=l.xaxis.range,f=l.yaxis.range;l.xaxis._r=l.xaxis.range.slice(),l.yaxis._r=l.yaxis.range.slice(),i=r[u]?r[u].to:h,a=r[c]?r[c].to:f,h[0]===i[0]&&h[1]===i[1]&&f[0]===a[0]&&f[1]===a[1]||-1===e.indexOf(u)&&-1===e.indexOf(c)||s.push(l)}}return s}(g,b,y);if(!x.length)return function(){function e(e,r,n){for(var i=0;i<e.length;i++)if(r(t,i),n)return}e(g.annotations||[],a.getComponentMethod("annotations","drawOne")),e(g.shapes||[],a.getComponentMethod("shapes","drawOne")),e(g.images||[],a.getComponentMethod("images","draw"),!0)}(),!1;var _;u&&(_=u());var w,M,k,A=n.ease(r.easing);return t._transitionData._interruptCallbacks.push(function(){return window.cancelAnimationFrame(k),k=null,p()}),w=Date.now(),k=window.requestAnimationFrame(m),Promise.resolve()}},{"../../components/drawing":628,"../../plotly":767,"../../registry":846,"./axes":772,"./constants":777,d3:122}],794:[function(t,e,r){"use strict";function n(t,e){if("-"===t.type){var r=t._id,n=r.charAt(0);-1!==r.indexOf("scene")&&(r=n);var u=i(e,r,n);if(u){if("histogram"===u.type&&n==={v:"y",h:"x"}[u.orientation||"v"])return void(t.type="linear");var c=n+"calendar",h=u[c];if(o(u,n)){for(var f,d=a(u),p=[],m=0;m<e.length;m++)f=e[m],s.traceIs(f,"box")&&(f[n+"axis"]||n)===r&&(void 0!==f[d]?p.push(f[d][0]):void 0!==f.name?p.push(f.name):p.push("text"),f[c]!==h&&(h=void 0));t.type=l(p,h)}else t.type=l(u[n]||[u[n+"0"]],h)}}}function i(t,e,r){for(var n=0;n<t.length;n++){var i=t[n];if((i[r+"axis"]||r)===e){if(o(i,r))return i;if((i[r]||[]).length||i[r+"0"])return i}}}function a(t){return{v:"x",h:"y"}[t.orientation||"v"]}function o(t,e){var r=a(t),n=s.traceIs(t,"box"),i=s.traceIs(t._fullInput||{},"candlestick");return n&&!i&&e===r&&void 0===t[r]&&void 0===t[r+"0"]}var s=t("../../registry"),l=t("./axis_autotype"),u=t("./axis_ids").name2id;e.exports=function(t,e,r,i,a){a&&(e._name=a,e._id=u(a)),"-"===r("type")&&(n(e,i),"-"===e.type?e.type="linear":t.type=e.type)}},{"../../registry":846,"./axis_autotype":773,"./axis_ids":775}],795:[function(t,e,r){"use strict";function n(t,e,r){var n,i,a,o=!1;if("data"===e.type)n=t._fullData[null!==e.traces?e.traces[0]:0];else{if("layout"!==e.type)return!1;n=t._fullLayout}return i=u.nestedProperty(n,e.prop).get(),a=r[e.type]=r[e.type]||{},a.hasOwnProperty(e.prop)&&a[e.prop]!==i&&(o=!0),a[e.prop]=i,{changed:o,value:i}}function i(t,e){return Array.isArray(e[0])&&1===e[0].length&&-1!==["string","number"].indexOf(typeof e[0][0])?[{type:"layout",prop:"_currentFrame",value:e[0][0].toString()}]:[]}function a(t,e){var r=[],n=e[0],i={};if("string"==typeof n)i[n]=e[1];else{if(!u.isPlainObject(n))return r;i=n}return s(i,function(t,e,n){r.push({type:"layout",prop:t,value:n})},"",0),r}function o(t,e){var r,n,i,a,o=[];if(n=e[0],i=e[1],r=e[2],a={},"string"==typeof n)a[n]=i;else{if(!u.isPlainObject(n))return o;a=n,void 0===r&&(r=i)}return void 0===r&&(r=null),s(a,function(e,n,i){var a;if(Array.isArray(i)){var s=Math.min(i.length,t.data.length);r&&(s=Math.min(s,r.length)),a=[];for(var l=0;l<s;l++)a[l]=r?r[l]:l}else a=r?r.slice(0):null;if(null===a)Array.isArray(i)&&(i=i[0]);else if(Array.isArray(a)){if(!Array.isArray(i)){var u=i;i=[];for(var c=0;c<a.length;c++)i[c]=u}i.length=Math.min(a.length,i.length)}o.push({type:"data",prop:e,traces:a,value:i})},"",0),o}function s(t,e,r,n){Object.keys(t).forEach(function(i){var a=t[i];if("_"!==i[0]){var o=r+(n>0?".":"")+i;u.isPlainObject(a)?s(a,e,o,n+1):e(o,i,a)}})}var l=t("../plotly"),u=t("../lib");r.manageCommandObserver=function(t,e,i,a){var o={},s=!0;e&&e._commandObserver&&(o=e._commandObserver),o.cache||(o.cache={}),o.lookupTable={};var l=r.hasSimpleAPICommandBindings(t,i,o.lookupTable);if(e&&e._commandObserver){if(l)return o;if(e._commandObserver.remove)return e._commandObserver.remove(),e._commandObserver=null,o}if(l){n(t,l,o.cache),o.check=function(){if(s){var e=n(t,l,o.cache);return e.changed&&a&&void 0!==o.lookupTable[e.value]&&(o.disable(),Promise.resolve(a({value:e.value,type:l.type,prop:l.prop,traces:l.traces,index:o.lookupTable[e.value]})).then(o.enable,o.enable)),e.changed}};for(var c=["plotly_relayout","plotly_redraw","plotly_restyle","plotly_update","plotly_animatingframe","plotly_afterplot"],h=0;h<c.length;h++)t._internalOn(c[h],o.check);o.remove=function(){for(var e=0;e<c.length;e++)t._removeInternalListener(c[e],o.check)}}else u.warn("Unable to automatically bind plot updates to API command"),o.lookupTable={},o.remove=function(){};return o.disable=function(){s=!1},o.enable=function(){s=!0},e&&(e._commandObserver=o),o},r.hasSimpleAPICommandBindings=function(t,e,n){var i,a,o=e.length;for(i=0;i<o;i++){var s,l=e[i],u=l.method,c=l.args;if(Array.isArray(c)||(c=[]),!u)return!1;var h=r.computeAPICommandBindings(t,u,c);if(1!==h.length)return!1;if(a){if(s=h[0],s.type!==a.type)return!1;if(s.prop!==a.prop)return!1;if(Array.isArray(a.traces)){if(!Array.isArray(s.traces))return!1;s.traces.sort();for(var f=0;f<a.traces.length;f++)if(a.traces[f]!==s.traces[f])return!1}else if(s.prop!==a.prop)return!1}else a=h[0],Array.isArray(a.traces)&&a.traces.sort();s=h[0];var d=s.value;if(Array.isArray(d)){if(1!==d.length)return!1;d=d[0]}n&&(n[d]=i)}return a},r.executeAPICommand=function(t,e,r){if("skip"===e)return Promise.resolve();var n=l[e],i=[t];Array.isArray(r)||(r=[]);for(var a=0;a<r.length;a++)i.push(r[a]);return n.apply(null,i).catch(function(t){return u.warn("API call to Plotly."+e+" rejected.",t),Promise.reject(t)})},r.computeAPICommandBindings=function(t,e,r){var n;switch(Array.isArray(r)||(r=[]),e){case"restyle":n=o(t,r);break;case"relayout":n=a(t,r);break;case"update":n=o(t,[r[0],r[2]]).concat(a(t,[r[1]]));break;case"animate":n=i(t,r);break;default:n=[]}return n}},{"../lib":728,"../plotly":767}],796:[function(t,e,r){"use strict";e.exports=function(t){var e=t.editType,r=t.colorEditType;void 0===r&&(r=e);var n={family:{valType:"string",noBlank:!0,strict:!0,editType:e},size:{valType:"number",min:1,editType:e},color:{valType:"color",editType:r},editType:e};return t.arrayOk&&(n.family.arrayOk=!0,n.size.arrayOk=!0,n.color.arrayOk=!0),n}},{}],797:[function(t,e,r){"use strict";e.exports={_isLinkedToArray:"frames_entry",group:{valType:"string"},name:{valType:"string"},traces:{valType:"any"},baseframe:{valType:"string"},data:{valType:"any"},layout:{valType:"any"}}},{}],798:[function(t,e,r){"use strict";r.projNames={equirectangular:"equirectangular",mercator:"mercator",orthographic:"orthographic","natural earth":"naturalEarth",kavrayskiy7:"kavrayskiy7",miller:"miller",robinson:"robinson",eckert4:"eckert4","azimuthal equal area":"azimuthalEqualArea","azimuthal equidistant":"azimuthalEquidistant","conic equal area":"conicEqualArea","conic conformal":"conicConformal","conic equidistant":"conicEquidistant",gnomonic:"gnomonic",stereographic:"stereographic",mollweide:"mollweide",hammer:"hammer","transverse mercator":"transverseMercator","albers usa":"albersUsa","winkel tripel":"winkel3",aitoff:"aitoff",sinusoidal:"sinusoidal"},r.axesNames=["lonaxis","lataxis"],r.lonaxisSpan={orthographic:180,"azimuthal equal area":360,"azimuthal equidistant":360,"conic conformal":180,gnomonic:160,stereographic:180,"transverse mercator":180,"*":360},r.lataxisSpan={"conic conformal":150,stereographic:179.5,"*":180},r.scopeDefaults={world:{lonaxisRange:[-180,180],lataxisRange:[-90,90],projType:"equirectangular",projRotate:[0,0,0]},usa:{lonaxisRange:[-180,-50],lataxisRange:[15,80],projType:"albers usa"},europe:{lonaxisRange:[-30,60],lataxisRange:[30,85],projType:"conic conformal",projRotate:[15,0,0],projParallels:[0,60]},asia:{lonaxisRange:[22,160],lataxisRange:[-15,55],projType:"mercator",projRotate:[0,0,0]},africa:{lonaxisRange:[-30,60],lataxisRange:[-40,40],projType:"mercator",projRotate:[0,0,0]},"north america":{lonaxisRange:[-180,-45],lataxisRange:[5,85],projType:"conic conformal",projRotate:[-100,0,0],projParallels:[29.5,45.5]},"south america":{lonaxisRange:[-100,-30],lataxisRange:[-60,15],projType:"mercator",projRotate:[0,0,0]}},r.clipPad=.001,r.precision=.1,r.landColor="#F0DC82",r.waterColor="#3399FF",r.locationmodeToLayer={"ISO-3":"countries","USA-states":"subunits","country names":"countries"},r.sphereSVG={type:"Sphere"},r.fillLayers={ocean:1,land:1,lakes:1},r.lineLayers={subunits:1,countries:1,coastlines:1,rivers:1,frame:1},r.layers=["bg","ocean","land","lakes","subunits","countries","coastlines","rivers","lataxis","lonaxis","frame","backplot","frontplot"],r.layersForChoropleth=["bg","ocean","land","subunits","countries","coastlines","lataxis","lonaxis","frame","backplot","rivers","lakes","frontplot"],r.layerNameToAdjective={ocean:"ocean",land:"land",lakes:"lake",subunits:"subunit",countries:"country",coastlines:"coastline",rivers:"river",frame:"frame"}},{}],799:[function(t,e,r){"use strict";function n(t){this.id=t.id,this.graphDiv=t.graphDiv,this.container=t.container,this.topojsonURL=t.topojsonURL,this.isStatic=t.staticPlot,this.topojsonName=null,this.topojson=null,this.projection=null,this.viewInitial=null,this.fitScale=null,this.bounds=null,this.midPt=null,this.hasChoropleth=!1,this.traceHash={},this.layers={},this.basePaths={},this.dataPaths={},this.dataPoints={},this.clipDef=null,this.clipRect=null,this.bgRect=null,this.makeFramework()}function i(t){for(var e=t.projection,r=e.type,n=s.geo[y.projNames[r]](),i=t._isClipped?y.lonaxisSpan[r]/2:null,a=["center","rotate","parallels","clipExtent"],o=function(t){return t?n:[]},l=0;l<a.length;l++){var u=a[l];"function"!=typeof n[u]&&(n[u]=o)}return n.isLonLatOverEdges=function(t){if(null===n(t))return!0;if(i){var e=n.rotate();return s.geo.distance(t,[-e[0],-e[1]])>i*Math.PI/180}return!1},n.getPath=function(){return s.geo.path().projection(n)},n.getBounds=function(t){return n.getPath().bounds(t)},n.fitExtent=function(t,e){var r=t[1][0]-t[0][0],i=t[1][1]-t[0][1],a=n.clipExtent&&n.clipExtent();n.scale(150).translate([0,0]),a&&n.clipExtent(null);var o=n.getBounds(e),s=Math.min(r/(o[1][0]-o[0][0]),i/(o[1][1]-o[0][1])),l=+t[0][0]+(r-s*(o[1][0]+o[0][0]))/2,u=+t[0][1]+(i-s*(o[1][1]+o[0][1]))/2;return a&&n.clipExtent(a),n.scale(150*s).translate([l,u])},n.precision(y.precision),i&&n.clipAngle(i-y.clipPad),n}function a(t,e){var r=e[t],n=r.dtick,i=y.scopeDefaults[e.scope],a=i.lonaxisRange,o=i.lataxisRange,l="lonaxis"===t?[n]:[0,n];return s.geo.graticule().extent([[a[0],o[0]],[a[1],o[1]]]).step(l)}function o(t,e){var r=y.clipPad,n=t[0]+r,i=t[1]-r,a=e[0]+r,o=e[1]-r;n>0&&i<0&&(i+=360);var s=(i-n)/4;return{type:"Polygon",coordinates:[[[n,a],[n,o],[n+s,o],[n+2*s,o],[n+3*s,o],[i,o],[i,a],[i-s,a],[i-2*s,a],[i-3*s,a],[n,a]]]}}var s=t("d3"),l=t("../../plotly"),u=t("../../lib"),c=t("../../components/color"),h=t("../../components/drawing"),f=t("../../components/fx"),d=t("../plots"),p=t("../cartesian/axes"),m=t("../../components/dragelement"),g=t("../cartesian/select"),v=t("./zoom"),y=t("./constants"),b=t("../../lib/topojson_utils"),x=t("topojson-client").feature;t("./projections")(s);var _=n.prototype;e.exports=function(t){return new n(t)},_.plot=function(t,e,r){var n=this,i=e[this.id],a=b.getTopojsonName(i);null===n.topojson||a!==n.topojsonName?(n.topojsonName=a,void 0===PlotlyGeoAssets.topojson[n.topojsonName]?r.push(n.fetchTopojson().then(function(r){PlotlyGeoAssets.topojson[n.topojsonName]=r,n.topojson=r,n.update(t,e)})):(n.topojson=PlotlyGeoAssets.topojson[n.topojsonName],n.update(t,e))):n.update(t,e)},_.fetchTopojson=function(){var t=b.getTopojsonPath(this.topojsonURL,this.topojsonName);return new Promise(function(e,r){s.json(t,function(n,i){if(n)return r(404===n.status?new Error(["plotly.js could not find topojson file at",t,".","Make sure the *topojsonURL* plot config option","is set properly."].join(" ")):new Error(["unexpected error while fetching topojson file at",t].join(" ")));e(i)})})},_.update=function(t,e){var r=e[this.id];if(!this.updateProjection(e,r)){this.hasChoropleth=!1
;for(var n=0;n<t.length;n++)if("choropleth"===t[n][0].trace.type){this.hasChoropleth=!0;break}this.viewInitial||this.saveViewInitial(r),this.updateBaseLayers(e,r),this.updateDims(e,r),this.updateFx(e,r),d.generalUpdatePerTraceModule(this,t,r);var i=this.layers.frontplot.select(".scatterlayer");this.dataPoints.point=i.selectAll(".point"),this.dataPoints.text=i.selectAll("text"),this.dataPaths.line=i.selectAll(".js-line");var a=this.layers.backplot.select(".choroplethlayer");this.dataPaths.choropleth=a.selectAll("path"),this.render()}},_.updateProjection=function(t,e){var r=t._size,n=e.domain,a=e.projection,s=a.rotation||{},c=e.center||{},h=this.projection=i(e);h.center([c.lon-s.lon,c.lat-s.lat]).rotate([-s.lon,-s.lat,s.roll]).parallels(a.parallels);var f=[[r.l+r.w*n.x[0],r.t+r.h*(1-n.y[1])],[r.l+r.w*n.x[1],r.t+r.h*(1-n.y[0])]],d=e.lonaxis,p=e.lataxis,m=o(d.range,p.range);h.fitExtent(f,m);var g=this.bounds=h.getBounds(m),v=this.fitScale=h.scale(),y=h.translate();if(!isFinite(g[0][0])||!isFinite(g[0][1])||!isFinite(g[1][0])||!isFinite(g[1][1])||isNaN(y[0])||isNaN(y[0])){for(var b=this.graphDiv,x=["projection.rotation","center","lonaxis.range","lataxis.range"],_="Invalid geo settings, relayout'ing to default view.",w={},M=0;M<x.length;M++)w[this.id+"."+x[M]]=null;return this.viewInitial=null,u.warn(_),b._promises.push(l.relayout(b,w)),_}var k=this.midPt=[(g[0][0]+g[1][0])/2,(g[0][1]+g[1][1])/2];if(h.scale(a.scale*v).translate([y[0]+(k[0]-y[0]),y[1]+(k[1]-y[1])]).clipExtent(g),e._isAlbersUsa){var A=h([c.lon,c.lat]),T=h.translate();h.translate([T[0]-(A[0]-T[0]),T[1]-(A[1]-T[1])])}},_.updateBaseLayers=function(t,e){function r(t){return"lonaxis"===t||"lataxis"===t}function n(t){return Boolean(y.lineLayers[t])}function i(t){return Boolean(y.fillLayers[t])}var o=this,l=o.topojson,u=o.layers,f=o.basePaths,d=this.hasChoropleth?y.layersForChoropleth:y.layers,p=d.filter(function(t){return n(t)||i(t)?e["show"+t]:!r(t)||e[t].showgrid}),m=o.framework.selectAll(".layer").data(p,String);m.exit().each(function(t){delete u[t],delete f[t],s.select(this).remove()}),m.enter().append("g").attr("class",function(t){return"layer "+t}).each(function(t){var e=u[t]=s.select(this);"bg"===t?o.bgRect=e.append("rect").style("pointer-events","all"):r(t)?f[t]=e.append("path").style("fill","none"):"backplot"===t?e.append("g").classed("choroplethlayer",!0):"frontplot"===t?e.append("g").classed("scatterlayer",!0):n(t)?f[t]=e.append("path").style("fill","none").style("stroke-miterlimit",2):i(t)&&(f[t]=e.append("path").style("stroke","none"))}),m.order(),m.each(function(t){var o=f[t],s=y.layerNameToAdjective[t];"frame"===t?o.datum(y.sphereSVG):n(t)||i(t)?o.datum(x(l,l.objects[t])):r(t)&&o.datum(a(t,e)).call(c.stroke,e[t].gridcolor).call(h.dashLine,"",e[t].gridwidth),n(t)?o.call(c.stroke,e[s+"color"]).call(h.dashLine,"",e[s+"width"]):i(t)&&o.call(c.fill,e[s+"color"])})},_.updateDims=function(t,e){var r=this.bounds,n=(e.framewidth||0)/2,i=r[0][0]-n,a=r[0][1]-n,o=r[1][0]-i+n,s=r[1][1]-a+n;h.setRect(this.clipRect,i,a,o,s),this.bgRect.call(h.setRect,i,a,o,s).call(c.fill,e.bgcolor),this.xaxis._offset=i,this.xaxis._length=o,this.yaxis._offset=a,this.yaxis._length=s},_.updateFx=function(t,e){function r(){var t=i.viewInitial,e={};for(var r in t)e[i.id+"."+r]=t[r];l.relayout(a,e),a.emit("plotly_doubleclick",null)}function n(t){return i.projection.invert([t[0]+i.xaxis._offset,t[1]+i.yaxis._offset])}var i=this,a=i.graphDiv,o=i.bgRect,u=t.dragmode;if(!i.isStatic){if("pan"===u)o.node().onmousedown=null,o.call(v(i,e)),o.on("dblclick.zoom",r);else if("select"===u||"lasso"===u){o.on(".zoom",null);var c;"select"===u?c=function(t,e){(t.range={})[i.id]=[n([e.xmin,e.ymin]),n([e.xmax,e.ymax])]}:"lasso"===u&&(c=function(t,e,r){(t.lassoPoints={})[i.id]=r.filtered.map(n)});var h={element:i.bgRect.node(),gd:a,plotinfo:{xaxis:i.xaxis,yaxis:i.yaxis,fillRangeItems:c},xaxes:[i.xaxis],yaxes:[i.yaxis],subplot:i.id};h.prepFn=function(t,e,r){g(t,e,r,h,u)},h.doneFn=function(e,r){2===r&&t._zoomlayer.selectAll(".select-outline").remove()},m.init(h)}o.on("mousemove",function(){var t=i.projection.invert(s.mouse(this));if(!t||isNaN(t[0])||isNaN(t[1]))return m.unhover(a,s.event);i.xaxis.p2c=function(){return t[0]},i.yaxis.p2c=function(){return t[1]},f.hover(a,s.event,i.id)}),o.on("mouseout",function(){m.unhover(a,s.event)}),o.on("click",function(){f.click(a,s.event)})}},_.makeFramework=function(){var t=this,e=t.graphDiv._fullLayout,r="clip"+e._uid+t.id;t.clipDef=e._clips.append("clipPath").attr("id",r),t.clipRect=t.clipDef.append("rect"),t.framework=s.select(t.container).append("g").attr("class","geo "+t.id).call(h.setClipUrl,r),t.project=function(e){var r=t.projection(e);return r?[r[0]-t.xaxis._offset,r[1]-t.yaxis._offset]:[null,null]},t.xaxis={_id:"x",c2p:function(e){return t.project(e)[0]}},t.yaxis={_id:"y",c2p:function(e){return t.project(e)[1]}},t.mockAxis={type:"linear",showexponent:"all",exponentformat:"B"},p.setConvert(t.mockAxis,e)},_.saveViewInitial=function(t){var e=t.center||{},r=t.projection,n=r.rotation||{};t._isScoped?this.viewInitial={"center.lon":e.lon,"center.lat":e.lat,"projection.scale":r.scale}:t._isClipped?this.viewInitial={"projection.scale":r.scale,"projection.rotation.lon":n.lon,"projection.rotation.lat":n.lat}:this.viewInitial={"center.lon":e.lon,"center.lat":e.lat,"projection.scale":r.scale,"projection.rotation.lon":n.lon}},_.render=function(){function t(t){var e=n(t.lonlat);return e?"translate("+e[0]+","+e[1]+")":null}function e(t){return n.isLonLatOverEdges(t.lonlat)?"none":null}var r,n=this.projection,i=n.getPath();for(r in this.basePaths)this.basePaths[r].attr("d",i);for(r in this.dataPaths)this.dataPaths[r].attr("d",function(t){return i(t.geojson)});for(r in this.dataPoints)this.dataPoints[r].attr("display",e).attr("transform",t)}},{"../../components/color":604,"../../components/dragelement":625,"../../components/drawing":628,"../../components/fx":645,"../../lib":728,"../../lib/topojson_utils":753,"../../plotly":767,"../cartesian/axes":772,"../cartesian/select":788,"../plots":831,"./constants":798,"./projections":804,"./zoom":805,d3:122,"topojson-client":536}],800:[function(t,e,r){"use strict";var n=t("./geo"),i=t("../../plots/plots"),a=t("../../lib").counterRegex,o="geo";r.name=o,r.attr=o,r.idRoot=o,r.idRegex=r.attrRegex=a(o),r.attributes=t("./layout/attributes"),r.layoutAttributes=t("./layout/layout_attributes"),r.supplyLayoutDefaults=t("./layout/defaults"),r.plot=function(t){var e=t._fullLayout,r=t.calcdata,a=i.getSubplotIds(e,o);void 0===window.PlotlyGeoAssets&&(window.PlotlyGeoAssets={topojson:{}});for(var s=0;s<a.length;s++){var l=a[s],u=i.getSubplotCalcData(r,o,l),c=e[l],h=c._subplot;h||(h=n({id:l,graphDiv:t,container:e._geolayer.node(),topojsonURL:t._context.topojsonURL,staticPlot:t._context.staticPlot}),e[l]._subplot=h),h.plot(u,e,t._promises)}},r.clean=function(t,e,r,n){for(var a=i.getSubplotIds(n,o),s=0;s<a.length;s++){var l=a[s],u=n[l]._subplot;!e[l]&&u&&(u.framework.remove(),u.clipDef.remove())}},r.updateFx=function(t){for(var e=i.getSubplotIds(t,o),r=0;r<e.length;r++){var n=t[e[r]];n._subplot.updateFx(t,n)}}},{"../../lib":728,"../../plots/plots":831,"./geo":799,"./layout/attributes":801,"./layout/defaults":802,"./layout/layout_attributes":803}],801:[function(t,e,r){"use strict";e.exports={geo:{valType:"subplotid",dflt:"geo",editType:"calc"}}},{}],802:[function(t,e,r){"use strict";function n(t,e,r){var n,i=r("resolution"),o=r("scope"),l=a.scopeDefaults[o],u=r("projection.type",l.projType),c=e._isAlbersUsa="albers usa"===u;c&&(o=e.scope="usa");var h=e._isScoped="world"!==o,f=e._isConic=-1!==u.indexOf("conic");e._isClipped=!!a.lonaxisSpan[u];for(var d=0;d<s.length;d++){var p,m=s[d],g=[30,10][d];if(h)p=l[m+"Range"];else{var v=a[m+"Span"],y=(v[u]||v["*"])/2,b=r("projection.rotation."+m.substr(0,3),l.projRotate[d]);p=[b-y,b+y]}r(m+".tick0",r(m+".range",p)[0]),r(m+".dtick",g),n=r(m+".showgrid"),n&&(r(m+".gridcolor"),r(m+".gridwidth"))}var x=e.lonaxis.range,_=e.lataxis.range,w=x[0],M=x[1];w>0&&M<0&&(M+=360);var k,A=(w+M)/2;if(!c){var T=h?l.projRotate:[A,0,0];k=r("projection.rotation.lon",T[0]),r("projection.rotation.lat",T[1]),r("projection.rotation.roll",T[2]),n=r("showcoastlines",!h),n&&(r("coastlinecolor"),r("coastlinewidth")),n=r("showocean"),n&&r("oceancolor")}var S,E;if(c?(S=-96.6,E=38.7):(S=h?A:k,E=(_[0]+_[1])/2),r("center.lon",S),r("center.lat",E),f){r("projection.parallels",l.projParallels||[0,60])}r("projection.scale"),n=r("showland"),n&&r("landcolor"),n=r("showlakes"),n&&r("lakecolor"),n=r("showrivers"),n&&(r("rivercolor"),r("riverwidth")),n=r("showcountries",h&&"usa"!==o),n&&(r("countrycolor"),r("countrywidth")),("usa"===o||"north america"===o&&50===i)&&(r("showsubunits",!0),r("subunitcolor"),r("subunitwidth")),h||(n=r("showframe",!0))&&(r("framecolor"),r("framewidth")),r("bgcolor")}var i=t("../../subplot_defaults"),a=t("../constants"),o=t("./layout_attributes"),s=a.axesNames;e.exports=function(t,e,r){i(t,e,r,{type:"geo",attributes:o,handleDefaults:n,partition:"y"})}},{"../../subplot_defaults":838,"../constants":798,"./layout_attributes":803}],803:[function(t,e,r){"use strict";var n=t("../../../components/color/attributes"),i=t("../constants"),a=t("../../../plot_api/edit_types").overrideAll,o={range:{valType:"info_array",items:[{valType:"number"},{valType:"number"}]},showgrid:{valType:"boolean",dflt:!1},tick0:{valType:"number"},dtick:{valType:"number"},gridcolor:{valType:"color",dflt:n.lightLine},gridwidth:{valType:"number",min:0,dflt:1}};e.exports=a({domain:{x:{valType:"info_array",items:[{valType:"number",min:0,max:1},{valType:"number",min:0,max:1}],dflt:[0,1]},y:{valType:"info_array",items:[{valType:"number",min:0,max:1},{valType:"number",min:0,max:1}],dflt:[0,1]}},resolution:{valType:"enumerated",values:[110,50],dflt:110,coerceNumber:!0},scope:{valType:"enumerated",values:Object.keys(i.scopeDefaults),dflt:"world"},projection:{type:{valType:"enumerated",values:Object.keys(i.projNames)},rotation:{lon:{valType:"number"},lat:{valType:"number"},roll:{valType:"number"}},parallels:{valType:"info_array",items:[{valType:"number"},{valType:"number"}]},scale:{valType:"number",min:0,dflt:1}},center:{lon:{valType:"number"},lat:{valType:"number"}},showcoastlines:{valType:"boolean"},coastlinecolor:{valType:"color",dflt:n.defaultLine},coastlinewidth:{valType:"number",min:0,dflt:1},showland:{valType:"boolean",dflt:!1},landcolor:{valType:"color",dflt:i.landColor},showocean:{valType:"boolean",dflt:!1},oceancolor:{valType:"color",dflt:i.waterColor},showlakes:{valType:"boolean",dflt:!1},lakecolor:{valType:"color",dflt:i.waterColor},showrivers:{valType:"boolean",dflt:!1},rivercolor:{valType:"color",dflt:i.waterColor},riverwidth:{valType:"number",min:0,dflt:1},showcountries:{valType:"boolean"},countrycolor:{valType:"color",dflt:n.defaultLine},countrywidth:{valType:"number",min:0,dflt:1},showsubunits:{valType:"boolean"},subunitcolor:{valType:"color",dflt:n.defaultLine},subunitwidth:{valType:"number",min:0,dflt:1},showframe:{valType:"boolean"},framecolor:{valType:"color",dflt:n.defaultLine},framewidth:{valType:"number",min:0,dflt:1},bgcolor:{valType:"color",dflt:n.background},lonaxis:o,lataxis:o},"plot","from-root")},{"../../../components/color/attributes":603,"../../../plot_api/edit_types":756,"../constants":798}],804:[function(t,e,r){"use strict";function n(t){function e(t,e){return{type:"Feature",id:t.id,properties:t.properties,geometry:r(t.geometry,e)}}function r(e,n){if(!e)return null;if("GeometryCollection"===e.type)return{type:"GeometryCollection",geometries:object.geometries.map(function(t){return r(t,n)})};if(!S.hasOwnProperty(e.type))return null;var i=S[e.type];return t.geo.stream(e,n(i)),i.result()}function n(){}function i(t){if((e=t.length)<4)return!1;for(var e,r=0,n=t[e-1][1]*t[0][0]-t[e-1][0]*t[0][1];++r<e;)n+=t[r-1][1]*t[r][0]-t[r-1][0]*t[r][1];return n<=0}function a(t,e){for(var r=e[0],n=e[1],i=!1,a=0,o=t.length,s=o-1;a<o;s=a++){var l=t[a],u=l[0],c=l[1],h=t[s],f=h[0],d=h[1];c>n^d>n&&r<(f-u)*(n-c)/(d-c)+u&&(i=!i)}return i}function o(t){return t?t/Math.sin(t):1}function s(t){return t>1?I:t<-1?-I:Math.asin(t)}function l(t){return t>1?0:t<-1?C:Math.acos(t)}function u(t,e){var r=(2+I)*Math.sin(e);e/=2;for(var n=0,i=1/0;n<10&&Math.abs(i)>E;n++){var a=Math.cos(e);e-=i=(e+Math.sin(e)*(a+2)-r)/(2*a*(1+a))}return[2/Math.sqrt(C*(4+C))*t*(1+Math.cos(e)),2*Math.sqrt(C/(4+C))*Math.sin(e)]}function c(t,e){function r(r,n){var i=R(r/e,n);return i[0]*=t,i}return arguments.length<2&&(e=t),1===e?R:e===1/0?f:(r.invert=function(r,n){var i=R.invert(r/t,n);return i[0]*=e,i},r)}function h(){var t=2,e=O(c),r=e(t);return r.coefficient=function(r){return arguments.length?e(t=+r):t},r}function f(t,e){return[t*Math.cos(e)/Math.cos(e/=2),2*Math.sin(e)]}function d(t,e){return[3*t/(2*C)*Math.sqrt(C*C/3-e*e),e]}function p(t,e){return[t,1.25*Math.log(Math.tan(C/4+.4*e))]}function m(t){return function(e){var r,n=t*Math.sin(e),i=30;do{e-=r=(e+Math.sin(e)-n)/(1+Math.cos(e))}while(Math.abs(r)>E&&--i>0);return e/2}}function g(t,e){var r=e*e,n=r*r;return[t*(.8707-.131979*r+n*(n*(.003971*r-.001529*n)-.013791)),e*(1.007226+r*(.015085+n*(.028874*r-.044475-.005916*n)))]}function v(t,e){var r,n=Math.min(18,36*Math.abs(e)/C),i=Math.floor(n),a=n-i,o=(r=j[i])[0],s=r[1],l=(r=j[++i])[0],u=r[1],c=(r=j[Math.min(19,++i)])[0],h=r[1];return[t*(l+a*(c-o)/2+a*a*(c-2*l+o)/2),(e>0?I:-I)*(u+a*(h-s)/2+a*a*(h-2*u+s)/2)]}function y(t,e){return[t*Math.cos(e),e]}function b(t,e){var r=Math.cos(e),n=o(l(r*Math.cos(t/=2)));return[2*r*Math.sin(t)*n,Math.sin(e)*n]}function x(t,e){var r=b(t,e);return[(r[0]+t/I)/2,(r[1]+e)/2]}t.geo.project=function(t,e){var n=e.stream;if(!n)throw new Error("not yet supported");return(t&&_.hasOwnProperty(t.type)?_[t.type]:r)(t,n)};var _={Feature:e,FeatureCollection:function(t,r){return{type:"FeatureCollection",features:t.features.map(function(t){return e(t,r)})}}},w=[],M=[],k={point:function(t,e){w.push([t,e])},result:function(){var t=w.length?w.length<2?{type:"Point",coordinates:w[0]}:{type:"MultiPoint",coordinates:w}:null;return w=[],t}},A={lineStart:n,point:function(t,e){w.push([t,e])},lineEnd:function(){w.length&&(M.push(w),w=[])},result:function(){var t=M.length?M.length<2?{type:"LineString",coordinates:M[0]}:{type:"MultiLineString",coordinates:M}:null;return M=[],t}},T={polygonStart:n,lineStart:n,point:function(t,e){w.push([t,e])},lineEnd:function(){var t=w.length;if(t){do{w.push(w[0].slice())}while(++t<4);M.push(w),w=[]}},polygonEnd:n,result:function(){if(!M.length)return null;var t=[],e=[];return M.forEach(function(r){i(r)?t.push([r]):e.push(r)}),e.forEach(function(e){var r=e[0];t.some(function(t){if(a(t[0],r))return t.push(e),!0})||t.push([e])}),M=[],t.length?t.length>1?{type:"MultiPolygon",coordinates:t}:{type:"Polygon",coordinates:t[0]}:null}},S={Point:k,MultiPoint:k,LineString:A,MultiLineString:A,Polygon:T,MultiPolygon:T,Sphere:T},E=1e-6,L=E*E,C=Math.PI,I=C/2,z=(Math.sqrt(C),C/180),D=180/C,P=t.geo.projection,O=t.geo.projectionMutator;t.geo.interrupt=function(e){function r(t,r){for(var n=r<0?-1:1,i=l[+(r<0)],a=0,o=i.length-1;a<o&&t>i[a][2][0];++a);var s=e(t-i[a][1][0],r);return s[0]+=e(i[a][1][0],n*r>n*i[a][0][1]?i[a][0][1]:r)[0],s}function n(){s=l.map(function(t){return t.map(function(t){var r,n=e(t[0][0],t[0][1])[0],i=e(t[2][0],t[2][1])[0],a=e(t[1][0],t[0][1])[1],o=e(t[1][0],t[1][1])[1];return a>o&&(r=a,a=o,o=r),[[n,a],[i,o]]})})}function i(){for(var e=1e-6,r=[],n=0,i=l[0].length;n<i;++n){var o=l[0][n],s=180*o[0][0]/C,u=180*o[0][1]/C,c=180*o[1][1]/C,h=180*o[2][0]/C,f=180*o[2][1]/C;r.push(a([[s+e,u+e],[s+e,c-e],[h-e,c-e],[h-e,f+e]],30))}for(var n=l[1].length-1;n>=0;--n){var o=l[1][n],s=180*o[0][0]/C,u=180*o[0][1]/C,c=180*o[1][1]/C,h=180*o[2][0]/C,f=180*o[2][1]/C;r.push(a([[h-e,f-e],[h-e,c+e],[s+e,c+e],[s+e,u-e]],30))}return{type:"Polygon",coordinates:[t.merge(r)]}}function a(t,e){for(var r,n,i,a=-1,o=t.length,s=t[0],l=[];++a<o;){r=t[a],n=(r[0]-s[0])/e,i=(r[1]-s[1])/e;for(var u=0;u<e;++u)l.push([s[0]+u*n,s[1]+u*i]);s=r}return l.push(r),l}function o(t,e){return Math.abs(t[0]-e[0])<E&&Math.abs(t[1]-e[1])<E}var s,l=[[[[-C,0],[0,I],[C,0]]],[[[-C,0],[0,-I],[C,0]]]];e.invert&&(r.invert=function(t,n){for(var i=s[+(n<0)],a=l[+(n<0)],u=0,c=i.length;u<c;++u){var h=i[u];if(h[0][0]<=t&&t<h[1][0]&&h[0][1]<=n&&n<h[1][1]){var f=e.invert(t-e(a[u][1][0],0)[0],n);return f[0]+=a[u][1][0],o(r(f[0],f[1]),[t,n])?f:null}}});var u=t.geo.projection(r),c=u.stream;return u.stream=function(e){var r=u.rotate(),n=c(e),a=(u.rotate([0,0]),c(e));return u.rotate(r),n.sphere=function(){t.geo.stream(i(),a)},n},u.lobes=function(t){return arguments.length?(l=t.map(function(t){return t.map(function(t){return[[t[0][0]*C/180,t[0][1]*C/180],[t[1][0]*C/180,t[1][1]*C/180],[t[2][0]*C/180,t[2][1]*C/180]]})}),n(),u):l.map(function(t){return t.map(function(t){return[[180*t[0][0]/C,180*t[0][1]/C],[180*t[1][0]/C,180*t[1][1]/C],[180*t[2][0]/C,180*t[2][1]/C]]})})},u},u.invert=function(t,e){var r=.5*e*Math.sqrt((4+C)/C),n=s(r),i=Math.cos(n);return[t/(2/Math.sqrt(C*(4+C))*(1+i)),s((n+r*(i+2))/(2+I))]},(t.geo.eckert4=function(){return P(u)}).raw=u;var R=t.geo.azimuthalEqualArea.raw;f.invert=function(t,e){var r=2*s(e/2);return[t*Math.cos(r/2)/Math.cos(r),r]},(t.geo.hammer=h).raw=c,d.invert=function(t,e){return[2/3*C*t/Math.sqrt(C*C/3-e*e),e]},(t.geo.kavrayskiy7=function(){return P(d)}).raw=d,p.invert=function(t,e){return[t,2.5*Math.atan(Math.exp(.8*e))-.625*C]},(t.geo.miller=function(){return P(p)}).raw=p;var F=(m(C),function(t,e,r){function n(r,n){return[t*r*Math.cos(n=i(n)),e*Math.sin(n)]}var i=m(r);return n.invert=function(n,i){var a=s(i/e);return[n/(t*Math.cos(a)),s((2*a+Math.sin(2*a))/r)]},n}(Math.SQRT2/I,Math.SQRT2,C));(t.geo.mollweide=function(){return P(F)}).raw=F,g.invert=function(t,e){var r,n=e,i=25;do{var a=n*n,o=a*a;n-=r=(n*(1.007226+a*(.015085+o*(.028874*a-.044475-.005916*o)))-e)/(1.007226+a*(.045255+o*(.259866*a-.311325-.005916*11*o)))}while(Math.abs(r)>E&&--i>0);return[t/(.8707+(a=n*n)*(a*(a*a*a*(.003971-.001529*a)-.013791)-.131979)),n]},(t.geo.naturalEarth=function(){return P(g)}).raw=g;var j=[[.9986,-.062],[1,0],[.9986,.062],[.9954,.124],[.99,.186],[.9822,.248],[.973,.31],[.96,.372],[.9427,.434],[.9216,.4958],[.8962,.5571],[.8679,.6176],[.835,.6769],[.7986,.7346],[.7597,.7903],[.7186,.8435],[.6732,.8936],[.6213,.9394],[.5722,.9761],[.5322,1]];j.forEach(function(t){t[1]*=1.0144}),v.invert=function(t,e){var r=e/I,n=90*r,i=Math.min(18,Math.abs(n/5)),a=Math.max(0,Math.floor(i));do{var o=j[a][1],s=j[a+1][1],l=j[Math.min(19,a+2)][1],u=l-o,c=l-2*s+o,h=2*(Math.abs(r)-s)/u,f=c/u,d=h*(1-f*h*(1-2*f*h));if(d>=0||1===a){n=(e>=0?5:-5)*(d+i);var p,m=50;do{i=Math.min(18,Math.abs(n)/5),a=Math.floor(i),d=i-a,o=j[a][1],s=j[a+1][1],l=j[Math.min(19,a+2)][1],n-=(p=(e>=0?I:-I)*(s+d*(l-o)/2+d*d*(l-2*s+o)/2)-e)*D}while(Math.abs(p)>L&&--m>0);break}}while(--a>=0);var g=j[a][0],v=j[a+1][0],y=j[Math.min(19,a+2)][0];return[t/(v+d*(y-g)/2+d*d*(y-2*v+g)/2),n*z]},(t.geo.robinson=function(){return P(v)}).raw=v,y.invert=function(t,e){return[t/Math.cos(e),e]},(t.geo.sinusoidal=function(){return P(y)}).raw=y,b.invert=function(t,e){if(!(t*t+4*e*e>C*C+E)){var r=t,n=e,i=25;do{var a,o=Math.sin(r),s=Math.sin(r/2),u=Math.cos(r/2),c=Math.sin(n),h=Math.cos(n),f=Math.sin(2*n),d=c*c,p=h*h,m=s*s,g=1-p*u*u,v=g?l(h*u)*Math.sqrt(a=1/g):a=0,y=2*v*h*s-t,b=v*c-e,x=a*(p*m+v*h*u*d),_=a*(.5*o*f-2*v*c*s),w=.25*a*(f*s-v*c*p*o),M=a*(d*u+v*m*h),k=_*w-M*x;if(!k)break;var A=(b*_-y*M)/k,T=(y*w-b*x)/k;r-=A,n-=T}while((Math.abs(A)>E||Math.abs(T)>E)&&--i>0);return[r,n]}},(t.geo.aitoff=function(){return P(b)}).raw=b,x.invert=function(t,e){var r=t,n=e,i=25;do{var a,o=Math.cos(n),s=Math.sin(n),u=Math.sin(2*n),c=s*s,h=o*o,f=Math.sin(r),d=Math.cos(r/2),p=Math.sin(r/2),m=p*p,g=1-h*d*d,v=g?l(o*d)*Math.sqrt(a=1/g):a=0,y=.5*(2*v*o*p+r/I)-t,b=.5*(v*s+n)-e,x=.5*a*(h*m+v*o*d*c)+.5/I,_=a*(f*u/4-v*s*p),w=.125*a*(u*p-v*s*h*f),M=.5*a*(c*d+v*m*o)+.5,k=_*w-M*x,A=(b*_-y*M)/k,T=(y*w-b*x)/k;r-=A,n-=T}while((Math.abs(A)>E||Math.abs(T)>E)&&--i>0);return[r,n]},(t.geo.winkel3=function(){return P(x)}).raw=x}e.exports=n},{}],805:[function(t,e,r){"use strict";function n(t,e){var r=t.projection;return(e._isScoped?o:e._isClipped?l:s)(t,r)}function i(t,e){return w.behavior.zoom().translate(e.translate()).scale(e.scale())}function a(t,e,r){function n(t,e){var r=M.nestedProperty(s,t);r.get()!==e&&(r.set(e),M.nestedProperty(o,t).set(e),l[i+"."+t]=e)}var i=t.id,a=t.graphDiv,o=a.layout[i],s=a._fullLayout[i],l={};r(n),n("projection.scale",e.scale()/t.fitScale),a.emit("plotly_relayout",l)}function o(t,e){function r(){w.select(this).style(T)}function n(){e.scale(w.event.scale).translate(w.event.translate),t.render()}function o(r){var n=e.invert(t.midPt);r("center.lon",n[0]),r("center.lat",n[1])}function s(){w.select(this).style(S),a(t,e,o)}var l=i(t,e);return l.on("zoomstart",r).on("zoom",n).on("zoomend",s),l}function s(t,e){function r(t){return e.invert(t)}function n(t){var n=e(r(t));return Math.abs(n[0]-t[0])>b||Math.abs(n[1]-t[1])>b}function o(){w.select(this).style(T),c=w.mouse(this),h=e.rotate(),f=e.translate(),d=h,p=r(c)}function s(){if(m=w.mouse(this),n(c))return y.scale(e.scale()),void y.translate(e.translate());e.scale(w.event.scale),e.translate([f[0],w.event.translate[1]]),p?r(m)&&(v=r(m),g=[d[0]+(v[0]-p[0]),h[1],h[2]],e.rotate(g),d=g):(c=m,p=r(c)),t.render()}function l(){w.select(this).style(S),a(t,e,u)}function u(r){var n=e.rotate(),i=e.invert(t.midPt);r("projection.rotation.lon",-n[0]),r("center.lon",i[0]),r("center.lat",i[1])}var c,h,f,d,p,m,g,v,y=i(t,e),b=2;return y.on("zoomstart",o).on("zoom",s).on("zoomend",l),y}function l(t,e){function r(t){y++||t({type:"zoomstart"})}function n(t){t({type:"zoom"})}function o(t){--y||t({type:"zoomend"})}function s(t){var r=e.rotate();t("projection.rotation.lon",-r[0]),t("projection.rotation.lat",-r[1])}var l,p={r:e.rotate(),k:e.scale()},m=i(t,e),g=_(m,"zoomstart","zoom","zoomend"),y=0,b=m.on;return m.on("zoomstart",function(){w.select(this).style(T);var t=w.mouse(this),i=e.rotate(),a=i,o=e.translate(),s=c(i);l=u(e,t),b.call(m,"zoom",function(){var r=w.mouse(this);if(e.scale(p.k=w.event.scale),l){if(u(e,r)){e.rotate(i).translate(o);var c=u(e,r),m=f(l,c),y=v(h(s,m)),b=p.r=d(y,l,a);isFinite(b[0])&&isFinite(b[1])&&isFinite(b[2])||(b=a),e.rotate(b),a=b}}else t=r,l=u(e,t);n(g.of(this,arguments))}),r(g.of(this,arguments))}).on("zoomend",function(){w.select(this).style(S),b.call(m,"zoom",null),o(g.of(this,arguments)),a(t,e,s)}).on("zoom.redraw",function(){t.render()}),w.rebind(m,g,"on")}function u(t,e){var r=t.invert(e);return r&&isFinite(r[0])&&isFinite(r[1])&&y(r)}function c(t){var e=.5*t[0]*k,r=.5*t[1]*k,n=.5*t[2]*k,i=Math.sin(e),a=Math.cos(e),o=Math.sin(r),s=Math.cos(r),l=Math.sin(n),u=Math.cos(n);return[a*s*u+i*o*l,i*s*u-a*o*l,a*o*u+i*s*l,a*s*l-i*o*u]}function h(t,e){var r=t[0],n=t[1],i=t[2],a=t[3],o=e[0],s=e[1],l=e[2],u=e[3];return[r*o-n*s-i*l-a*u,r*s+n*o+i*u-a*l,r*l-n*u+i*o+a*s,r*u+n*l-i*s+a*o]}function f(t,e){if(t&&e){var r=x(t,e),n=Math.sqrt(b(r,r)),i=.5*Math.acos(Math.max(-1,Math.min(1,b(t,e)))),a=Math.sin(i)/n;return n&&[Math.cos(i),r[2]*a,-r[1]*a,r[0]*a]}}function d(t,e,r){var n=g(e,2,t[0]);n=g(n,1,t[1]),n=g(n,0,t[2]-r[2]);var i,a,o=e[0],s=e[1],l=e[2],u=n[0],c=n[1],h=n[2],f=Math.atan2(s,o)*A,d=Math.sqrt(o*o+s*s);Math.abs(c)>d?(a=(c>0?90:-90)-f,i=0):(a=Math.asin(c/d)*A-f,i=Math.sqrt(d*d-c*c));var m=180-a-2*f,v=(Math.atan2(h,u)-Math.atan2(l,i))*A,y=(Math.atan2(h,u)-Math.atan2(l,-i))*A;return p(r[0],r[1],a,v)<=p(r[0],r[1],m,y)?[a,v,r[2]]:[m,y,r[2]]}function p(t,e,r,n){var i=m(r-t),a=m(n-e);return Math.sqrt(i*i+a*a)}function m(t){return(t%360+540)%360-180}function g(t,e,r){var n=r*k,i=t.slice(),a=0===e?1:0,o=2===e?1:2,s=Math.cos(n),l=Math.sin(n);return i[a]=t[a]*s-t[o]*l,i[o]=t[o]*s+t[a]*l,i}function v(t){return[Math.atan2(2*(t[0]*t[1]+t[2]*t[3]),1-2*(t[1]*t[1]+t[2]*t[2]))*A,Math.asin(Math.max(-1,Math.min(1,2*(t[0]*t[2]-t[3]*t[1]))))*A,Math.atan2(2*(t[0]*t[3]+t[1]*t[2]),1-2*(t[2]*t[2]+t[3]*t[3]))*A]}function y(t){var e=t[0]*k,r=t[1]*k,n=Math.cos(r);return[n*Math.cos(e),n*Math.sin(e),Math.sin(r)]}function b(t,e){for(var r=0,n=0,i=t.length;n<i;++n)r+=t[n]*e[n];return r}function x(t,e){return[t[1]*e[2]-t[2]*e[1],t[2]*e[0]-t[0]*e[2],t[0]*e[1]-t[1]*e[0]]}function _(t){for(var e=0,r=arguments.length,n=[];++e<r;)n.push(arguments[e]);var i=w.dispatch.apply(null,n);return i.of=function(e,r){return function(n){var a;try{a=n.sourceEvent=w.event,n.target=t,w.event=n,i[n.type].apply(e,r)}finally{w.event=a}}},i}var w=t("d3"),M=t("../../lib"),k=Math.PI/180,A=180/Math.PI,T={cursor:"pointer"},S={cursor:"auto"};e.exports=n},{"../../lib":728,d3:122}],806:[function(t,e,r){"use strict";function n(t,e){this.element=t,this.plot=e,this.mouseListener=null,this.wheelListener=null,this.lastInputTime=Date.now(),this.lastPos=[0,0],this.boxEnabled=!1,this.boxInited=!1,this.boxStart=[0,0],this.boxEnd=[0,0],this.dragStart=[0,0]}function i(t){function e(){t.xaxis.autorange=!1,t.yaxis.autorange=!1}function r(){for(var e=t.graphDiv._fullLayout._axisConstraintGroups,r=t.xaxis._id,n=t.yaxis._id,i=0;i<e.length;i++)if(-1!==e[i][r]){if(-1!==e[i][n])return!0;break}return!1}function i(n,i,a){function o(e,r,n){var i=Math.min(r,n),a=Math.max(r,n);i!==a?(f[e]=i,f[e+2]=a,h.dataBox=f,t.setRanges(f)):(t.selectBox.selectBox=[0,0,1,1],t.glplot.setDirty())}var s,u,f=t.calcDataBox(),d=c.viewBox,p=h.lastPos[0],m=h.lastPos[1],g=l.MINDRAG*c.pixelRatio,v=l.MINZOOM*c.pixelRatio;switch(i*=c.pixelRatio,a*=c.pixelRatio,a=d[3]-d[1]-a,t.fullLayout.dragmode){case"zoom":if(n){var y=i/(d[2]-d[0])*(f[2]-f[0])+f[0],b=a/(d[3]-d[1])*(f[3]-f[1])+f[1];h.boxInited||(h.boxStart[0]=y,h.boxStart[1]=b,h.dragStart[0]=i,h.dragStart[1]=a),h.boxEnd[0]=y,h.boxEnd[1]=b,h.boxInited=!0,h.boxEnabled||h.boxStart[0]===h.boxEnd[0]&&h.boxStart[1]===h.boxEnd[1]||(h.boxEnabled=!0);var x=Math.abs(h.dragStart[0]-i)<v,_=Math.abs(h.dragStart[1]-a)<v;if(!r()||x&&_)x&&(h.boxEnd[0]=h.boxStart[0]),_&&(h.boxEnd[1]=h.boxStart[1]);else{s=h.boxEnd[0]-h.boxStart[0],u=h.boxEnd[1]-h.boxStart[1];var w=(f[3]-f[1])/(f[2]-f[0]);Math.abs(s*w)>Math.abs(u)?(h.boxEnd[1]=h.boxStart[1]+Math.abs(s)*w*(u>=0?1:-1),h.boxEnd[1]<f[1]?(h.boxEnd[1]=f[1],h.boxEnd[0]=h.boxStart[0]+(f[1]-h.boxStart[1])/Math.abs(w)):h.boxEnd[1]>f[3]&&(h.boxEnd[1]=f[3],h.boxEnd[0]=h.boxStart[0]+(f[3]-h.boxStart[1])/Math.abs(w))):(h.boxEnd[0]=h.boxStart[0]+Math.abs(u)/w*(s>=0?1:-1),h.boxEnd[0]<f[0]?(h.boxEnd[0]=f[0],h.boxEnd[1]=h.boxStart[1]+(f[0]-h.boxStart[0])*Math.abs(w)):h.boxEnd[0]>f[2]&&(h.boxEnd[0]=f[2],h.boxEnd[1]=h.boxStart[1]+(f[2]-h.boxStart[0])*Math.abs(w)))}}else h.boxEnabled?(s=h.boxStart[0]!==h.boxEnd[0],u=h.boxStart[1]!==h.boxEnd[1],s||u?(s&&(o(0,h.boxStart[0],h.boxEnd[0]),t.xaxis.autorange=!1),u&&(o(1,h.boxStart[1],h.boxEnd[1]),t.yaxis.autorange=!1),t.relayoutCallback()):t.glplot.setDirty(),h.boxEnabled=!1,h.boxInited=!1):h.boxInited&&(h.boxInited=!1);break;case"pan":h.boxEnabled=!1,h.boxInited=!1,n?(h.panning||(h.dragStart[0]=i,h.dragStart[1]=a),Math.abs(h.dragStart[0]-i)<g&&(i=h.dragStart[0]),Math.abs(h.dragStart[1]-a)<g&&(a=h.dragStart[1]),s=(p-i)*(f[2]-f[0])/(c.viewBox[2]-c.viewBox[0]),u=(m-a)*(f[3]-f[1])/(c.viewBox[3]-c.viewBox[1]),f[0]+=s,f[2]+=s,f[1]+=u,f[3]+=u,t.setRanges(f),h.panning=!0,h.lastInputTime=Date.now(),e(),t.cameraChanged(),t.handleAnnotations()):h.panning&&(h.panning=!1,t.relayoutCallback())}h.lastPos[0]=i,h.lastPos[1]=a}var u=t.mouseContainer,c=t.glplot,h=new n(u,c);return h.mouseListener=a(u,i),u.addEventListener("touchstart",function(t){var e=s(t.changedTouches[0],u);i(0,e[0],e[1]),i(1,e[0],e[1])}),u.addEventListener("touchmove",function(t){t.preventDefault();var e=s(t.changedTouches[0],u);i(1,e[0],e[1])}),u.addEventListener("touchend",function(){i(0,h.lastPos[0],h.lastPos[1])}),h.wheelListener=o(u,function(r,n){if(!t.scrollZoom)return!1;var i=t.calcDataBox(),a=c.viewBox,o=h.lastPos[0],s=h.lastPos[1],l=Math.exp(5*n/(a[3]-a[1])),u=o/(a[2]-a[0])*(i[2]-i[0])+i[0],f=s/(a[3]-a[1])*(i[3]-i[1])+i[1];return i[0]=(i[0]-u)*l+u,i[2]=(i[2]-u)*l+u,i[1]=(i[1]-f)*l+f,i[3]=(i[3]-f)*l+f,t.setRanges(i),h.lastInputTime=Date.now(),e(),t.cameraChanged(),t.handleAnnotations(),t.relayoutCallback(),!0}),h}var a=t("mouse-change"),o=t("mouse-wheel"),s=t("mouse-event-offset"),l=t("../cartesian/constants");e.exports=i},{"../cartesian/constants":777,"mouse-change":452,"mouse-event-offset":453,"mouse-wheel":455}],807:[function(t,e,r){"use strict";function n(t){this.scene=t,this.gl=t.gl,this.pixelRatio=t.pixelRatio,this.screenBox=[0,0,1,1],this.viewBox=[0,0,1,1],this.dataBox=[-1,-1,1,1],this.borderLineEnable=[!1,!1,!1,!1],this.borderLineWidth=[1,1,1,1],this.borderLineColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.ticks=[[],[]],this.tickEnable=[!0,!0,!1,!1],this.tickPad=[15,15,15,15],this.tickAngle=[0,0,0,0],this.tickColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.tickMarkLength=[0,0,0,0],this.tickMarkWidth=[0,0,0,0],this.tickMarkColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.labels=["x","y"],this.labelEnable=[!0,!0,!1,!1],this.labelAngle=[0,Math.PI/2,0,3*Math.PI/2],this.labelPad=[15,15,15,15],this.labelSize=[12,12],this.labelFont=["sans-serif","sans-serif"],this.labelColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.title="",this.titleEnable=!0,this.titleCenter=[0,0,0,0],this.titleAngle=0,this.titleColor=[0,0,0,1],this.titleFont="sans-serif",this.titleSize=18,this.gridLineEnable=[!0,!0],this.gridLineColor=[[0,0,0,.5],[0,0,0,.5]],this.gridLineWidth=[1,1],this.zeroLineEnable=[!0,!0],this.zeroLineWidth=[1,1],this.zeroLineColor=[[0,0,0,1],[0,0,0,1]],this.borderColor=[0,0,0,0],this.backgroundColor=[0,0,0,0],this.static=this.scene.staticPlot}function i(t){return new n(t)}var a=t("../plots"),o=t("../cartesian/axes"),s=t("../../lib/html2unicode"),l=t("../../lib/str2rgbarray"),u=n.prototype,c=["xaxis","yaxis"];u.merge=function(t){this.titleEnable=!1,this.backgroundColor=l(t.plot_bgcolor);var e,r,n,i,a,o,u,h,f,d,p;for(d=0;d<2;++d){for(e=c[d],r=t[this.scene[e]._name],n=/Click to enter .+ title/.test(r.title)?"":r.title,p=0;p<=2;p+=2)this.labelEnable[d+p]=!1,this.labels[d+p]=s(n),this.labelColor[d+p]=l(r.titlefont.color),this.labelFont[d+p]=r.titlefont.family,this.labelSize[d+p]=r.titlefont.size,this.labelPad[d+p]=this.getLabelPad(e,r),this.tickEnable[d+p]=!1,this.tickColor[d+p]=l((r.tickfont||{}).color),this.tickAngle[d+p]="auto"===r.tickangle?0:Math.PI*-r.tickangle/180,this.tickPad[d+p]=this.getTickPad(r),this.tickMarkLength[d+p]=0,this.tickMarkWidth[d+p]=r.tickwidth||0,this.tickMarkColor[d+p]=l(r.tickcolor),this.borderLineEnable[d+p]=!1,this.borderLineColor[d+p]=l(r.linecolor),this.borderLineWidth[d+p]=r.linewidth||0;u=this.hasSharedAxis(r),a=this.hasAxisInDfltPos(e,r)&&!u,o=this.hasAxisInAltrPos(e,r)&&!u,i=r.mirror||!1,h=u?-1!==String(i).indexOf("all"):!!i,f=u?"allticks"===i:-1!==String(i).indexOf("ticks"),a?this.labelEnable[d]=!0:o&&(this.labelEnable[d+2]=!0),a?this.tickEnable[d]=r.showticklabels:o&&(this.tickEnable[d+2]=r.showticklabels),(a||h)&&(this.borderLineEnable[d]=r.showline),(o||h)&&(this.borderLineEnable[d+2]=r.showline),(a||f)&&(this.tickMarkLength[d]=this.getTickMarkLength(r)),(o||f)&&(this.tickMarkLength[d+2]=this.getTickMarkLength(r)),this.gridLineEnable[d]=r.showgrid,this.gridLineColor[d]=l(r.gridcolor),this.gridLineWidth[d]=r.gridwidth,this.zeroLineEnable[d]=r.zeroline,this.zeroLineColor[d]=l(r.zerolinecolor),this.zeroLineWidth[d]=r.zerolinewidth}},u.hasSharedAxis=function(t){var e=this.scene,r=a.getSubplotIds(e.fullLayout,"gl2d");return 0!==o.findSubplotsWithAxis(r,t).indexOf(e.id)},u.hasAxisInDfltPos=function(t,e){var r=e.side;return"xaxis"===t?"bottom"===r:"yaxis"===t?"left"===r:void 0},u.hasAxisInAltrPos=function(t,e){var r=e.side;return"xaxis"===t?"top"===r:"yaxis"===t?"right"===r:void 0},u.getLabelPad=function(t,e){var r=e.titlefont.size,n=e.showticklabels;return"xaxis"===t?"top"===e.side?r*(1.5+(n?1:0))-10:r*(1.5+(n?.5:0))-10:"yaxis"===t?"right"===e.side?10+r*(1.5+(n?1:.5)):10+r*(1.5+(n?.5:0)):void 0},u.getTickPad=function(t){return"outside"===t.ticks?10+t.ticklen:15},u.getTickMarkLength=function(t){if(!t.ticks)return 0
;var e=t.ticklen;return"inside"===t.ticks?-e:e},e.exports=i},{"../../lib/html2unicode":726,"../../lib/str2rgbarray":749,"../cartesian/axes":772,"../plots":831}],808:[function(t,e,r){"use strict";var n=t("../../plot_api/edit_types").overrideAll,i=t("./scene2d"),a=t("../plots"),o=t("../../constants/xmlns_namespaces"),s=t("../cartesian/constants"),l=t("../cartesian"),u=t("../../components/fx/layout_attributes");r.name="gl2d",r.attr=["xaxis","yaxis"],r.idRoot=["x","y"],r.idRegex=s.idRegex,r.attrRegex=s.attrRegex,r.attributes=t("../cartesian/attributes"),r.layoutAttrOverrides=n(l.layoutAttributes,"plot","from-root"),r.baseLayoutAttrOverrides=n({plot_bgcolor:a.layoutAttributes.plot_bgcolor,hoverlabel:u.hoverlabel},"plot","nested"),r.plot=function(t){for(var e=t._fullLayout,r=t._fullData,n=a.getSubplotIds(e,"gl2d"),o=0;o<n.length;o++){var s=n[o],l=e._plots[s],u=a.getSubplotData(r,"gl2d",s),c=l._scene2d;void 0===c&&(c=new i({id:s,graphDiv:t,container:t.querySelector(".gl-container"),staticPlot:t._context.staticPlot,plotGlPixelRatio:t._context.plotGlPixelRatio},e),l._scene2d=c),c.plot(u,t.calcdata,e,t.layout)}},r.clean=function(t,e,r,n){for(var i=a.getSubplotIds(n,"gl2d"),o=0;o<i.length;o++){var s=i[o],u=n._plots[s];if(u._scene2d){0===a.getSubplotData(t,"gl2d",s).length&&(u._scene2d.destroy(),delete n._plots[s])}}l.clean.apply(this,arguments)},r.drawFramework=function(t){t._context.staticPlot||l.drawFramework(t)},r.toSVG=function(t){for(var e=t._fullLayout,r=a.getSubplotIds(e,"gl2d"),n=0;n<r.length;n++){var i=e._plots[r[n]],s=i._scene2d,l=s.toImage("png");e._glimages.append("svg:image").attr({xmlns:o.svg,"xlink:href":l,x:0,y:0,width:"100%",height:"100%",preserveAspectRatio:"none"}),s.destroy()}},r.updateFx=function(t){for(var e=a.getSubplotIds(t,"gl2d"),r=0;r<e.length;r++){t._plots[e[r]]._scene2d.updateFx(t.dragmode)}}},{"../../components/fx/layout_attributes":646,"../../constants/xmlns_namespaces":709,"../../plot_api/edit_types":756,"../cartesian":782,"../cartesian/attributes":771,"../cartesian/constants":777,"../plots":831,"./scene2d":809}],809:[function(t,e,r){"use strict";function n(t,e){this.container=t.container,this.graphDiv=t.graphDiv,this.pixelRatio=t.plotGlPixelRatio||window.devicePixelRatio,this.id=t.id,this.staticPlot=!!t.staticPlot,this.scrollZoom=this.graphDiv._context.scrollZoom,this.fullData=null,this.updateRefs(e),this.makeFramework(),this.glplotOptions=p(this),this.glplotOptions.merge(e),this.glplot=c(this.glplotOptions),this.camera=m(this),this.traces={},this.spikes=h(this.glplot),this.selectBox=f(this.glplot,{innerFill:!1,outerFill:!0}),this.lastButtonState=0,this.pickResult=null,this.isMouseOver=!0,this.bounds=[1/0,1/0,-1/0,-1/0],this.stopped=!1,this.redraw=this.draw.bind(this),this.redraw()}function i(t,e){for(var r=0;r<2;++r){var n=t[r],i=e[r];if(n.length!==i.length)return!0;for(var a=0;a<n.length;++a)if(n[a].x!==i[a].x)return!0}return!1}var a,o,s=t("../../registry"),l=t("../../plots/cartesian/axes"),u=t("../../components/fx"),c=t("gl-plot2d"),h=t("gl-spikes2d"),f=t("gl-select-box"),d=t("webgl-context"),p=t("./convert"),m=t("./camera"),g=t("../../lib/html2unicode"),v=t("../../lib/show_no_webgl_msg"),y=t("../../plots/cartesian/constraints"),b=y.enforce,x=y.clean,_=["xaxis","yaxis"];e.exports=n;var w=n.prototype;w.makeFramework=function(){if(this.staticPlot){if(!(o||(a=document.createElement("canvas"),o=d({canvas:a,preserveDrawingBuffer:!1,premultipliedAlpha:!0,antialias:!0}))))throw new Error("Error creating static canvas/context for image server");this.canvas=a,this.gl=o}else{var t=document.createElement("canvas"),e=d({canvas:t,premultipliedAlpha:!0});e||v(this),this.canvas=t,this.gl=e}var r=this.canvas;r.style.width="100%",r.style.height="100%",r.style.position="absolute",r.style.top="0px",r.style.left="0px",r.style["pointer-events"]="none",this.updateSize(r),r.className+="user-select-none";var n=this.svgContainer=document.createElementNS("http://www.w3.org/2000/svg","svg");n.style.position="absolute",n.style.top=n.style.left="0px",n.style.width=n.style.height="100%",n.style["z-index"]=20,n.style["pointer-events"]="none";var i=this.mouseContainer=document.createElement("div");i.style.position="absolute",i.style["pointer-events"]="auto";var s=this.container;s.appendChild(r),s.appendChild(n),s.appendChild(i);var l=this;i.addEventListener("mouseout",function(){l.isMouseOver=!1,l.unhover()}),i.addEventListener("mouseover",function(){l.isMouseOver=!0})},w.toImage=function(t){t||(t="png"),this.stopped=!0,this.staticPlot&&this.container.appendChild(a),this.updateSize(this.canvas),this.glplot.setDirty(),this.glplot.draw();var e=this.glplot.gl,r=e.drawingBufferWidth,n=e.drawingBufferHeight;e.bindFramebuffer(e.FRAMEBUFFER,null);var i=new Uint8Array(r*n*4);e.readPixels(0,0,r,n,e.RGBA,e.UNSIGNED_BYTE,i);for(var o=0,s=n-1;o<s;++o,--s)for(var l=0;l<r;++l)for(var u=0;u<4;++u){var c=i[4*(r*o+l)+u];i[4*(r*o+l)+u]=i[4*(r*s+l)+u],i[4*(r*s+l)+u]=c}var h=document.createElement("canvas");h.width=r,h.height=n;var f=h.getContext("2d"),d=f.createImageData(r,n);d.data.set(i),f.putImageData(d,0,0);var p;switch(t){case"jpeg":p=h.toDataURL("image/jpeg");break;case"webp":p=h.toDataURL("image/webp");break;default:p=h.toDataURL("image/png")}return this.staticPlot&&this.container.removeChild(a),p},w.updateSize=function(t){t||(t=this.canvas);var e=this.pixelRatio,r=this.fullLayout,n=r.width,i=r.height,a=0|Math.ceil(e*n),o=0|Math.ceil(e*i);return t.width===a&&t.height===o||(t.width=a,t.height=o),this.redraw&&this.redraw(),t},w.computeTickMarks=function(){this.xaxis.setScale(),this.yaxis.setScale();for(var t=[l.calcTicks(this.xaxis),l.calcTicks(this.yaxis)],e=0;e<2;++e)for(var r=0;r<t[e].length;++r)t[e][r].text=g(t[e][r].text+"");return t},w.updateRefs=function(t){this.fullLayout=t;var e=l.subplotMatch,r="xaxis"+this.id.match(e)[1],n="yaxis"+this.id.match(e)[2];this.xaxis=this.fullLayout[r],this.yaxis=this.fullLayout[n]},w.relayoutCallback=function(){var t=this.graphDiv,e=this.xaxis,r=this.yaxis,n=t.layout;n.xaxis.autorange=e.autorange,n.xaxis.range=e.range.slice(0),n.yaxis.autorange=r.autorange,n.yaxis.range=r.range.slice(0);var i={lastInputTime:this.camera.lastInputTime};i[e._name]=e.range.slice(0),i[r._name]=r.range.slice(0),t.emit("plotly_relayout",i)},w.cameraChanged=function(){var t=this.camera;this.glplot.setDataBox(this.calcDataBox());var e=this.computeTickMarks();i(e,this.glplotOptions.ticks)&&(this.glplotOptions.ticks=e,this.glplotOptions.dataBox=t.dataBox,this.glplot.update(this.glplotOptions),this.handleAnnotations())},w.handleAnnotations=function(){for(var t=this.graphDiv,e=this.fullLayout.annotations,r=0;r<e.length;r++){var n=e[r];n.xref===this.xaxis._id&&n.yref===this.yaxis._id&&s.getComponentMethod("annotations","drawOne")(t,r)}},w.destroy=function(){if(this.glplot){var t=this.traces;t&&Object.keys(t).map(function(e){t[e].dispose(),delete t[e]}),this.glplot.dispose(),this.staticPlot||this.container.removeChild(this.canvas),this.container.removeChild(this.svgContainer),this.container.removeChild(this.mouseContainer),this.fullData=null,this.glplot=null,this.stopped=!0,this.camera.mouseListener.enabled=!1,this.mouseContainer.removeEventListener("wheel",this.camera.wheelListener),this.camera=null}},w.plot=function(t,e,r){var n=this.glplot;this.updateRefs(r),this.updateTraces(t,e),this.updateFx(r.dragmode);var i=r.width,a=r.height;this.updateSize(this.canvas);var o=this.glplotOptions;o.merge(r),o.screenBox=[0,0,i,a];var s={_fullLayout:{_axisConstraintGroups:this.graphDiv._fullLayout._axisConstraintGroups,xaxis:this.xaxis,yaxis:this.yaxis}};x(s,this.xaxis),x(s,this.yaxis);var u=r._size,c=this.xaxis.domain,h=this.yaxis.domain;o.viewBox=[u.l+c[0]*u.w,u.b+h[0]*u.h,i-u.r-(1-c[1])*u.w,a-u.t-(1-h[1])*u.h],this.mouseContainer.style.width=u.w*(c[1]-c[0])+"px",this.mouseContainer.style.height=u.h*(h[1]-h[0])+"px",this.mouseContainer.height=u.h*(h[1]-h[0]),this.mouseContainer.style.left=u.l+c[0]*u.w+"px",this.mouseContainer.style.top=u.t+(1-h[1])*u.h+"px";var f=this.bounds;f[0]=f[1]=1/0,f[2]=f[3]=-1/0;var d,p,m=Object.keys(this.traces);for(p=0;p<m.length;++p)for(var g=this.traces[m[p]],v=0;v<2;++v)f[v]=Math.min(f[v],g.bounds[v]),f[v+2]=Math.max(f[v+2],g.bounds[v+2]);for(p=0;p<2;++p)f[p]>f[p+2]&&(f[p]=-1,f[p+2]=1),d=this[_[p]],d._length=o.viewBox[p+2]-o.viewBox[p],l.doAutoRange(d),d.setScale();b(s),o.ticks=this.computeTickMarks(),o.dataBox=this.calcDataBox(),o.merge(r),n.update(o),this.glplot.draw()},w.calcDataBox=function(){var t=this.xaxis,e=this.yaxis,r=t.range,n=e.range,i=t.r2l,a=e.r2l;return[i(r[0]),a(n[0]),i(r[1]),a(n[1])]},w.setRanges=function(t){var e=this.xaxis,r=this.yaxis,n=e.l2r,i=r.l2r;e.range=[n(t[0]),n(t[2])],r.range=[i(t[1]),i(t[3])]},w.updateTraces=function(t,e){var r,n,i,a=Object.keys(this.traces);this.fullData=t;t:for(r=0;r<a.length;r++){var o=a[r],s=this.traces[o];for(n=0;n<t.length;n++)if(i=t[n],i.uid===o&&i.type===s.type)continue t;s.dispose(),delete this.traces[o]}for(r=0;r<t.length;r++){i=t[r];var l=e[r],u=this.traces[i.uid];u?u.update(i,l):(u=i._module.plot(this,i,l),this.traces[i.uid]=u)}this.glplot.objects.sort(function(t,e){return t._trace.index-e._trace.index})},w.updateFx=function(t){this.mouseContainer.style["pointer-events"]="lasso"===t||"select"===t?"none":"auto",this.mouseContainer.style.cursor="pan"===t?"move":"zoom"===t?"crosshair":null},w.emitPointAction=function(t,e){for(var r,n=t.trace.uid,i=t.pointIndex,a=0;a<this.fullData.length;a++)this.fullData[a].uid===n&&(r=this.fullData[a]);var o={x:t.traceCoord[0],y:t.traceCoord[1],curveNumber:r.index,pointNumber:i,data:r._input,fullData:this.fullData,xaxis:this.xaxis,yaxis:this.yaxis};u.appendArrayPointValue(o,r,i),this.graphDiv.emit(e,{points:[o]})},w.draw=function(){if(!this.stopped){requestAnimationFrame(this.redraw);var t=this.glplot,e=this.camera,r=e.mouseListener,n=1===this.lastButtonState&&0===r.buttons,i=this.fullLayout;this.lastButtonState=r.buttons,this.cameraChanged();var a,o=r.x*t.pixelRatio,s=this.canvas.height-t.pixelRatio*r.y;if(e.boxEnabled&&"zoom"===i.dragmode){this.selectBox.enabled=!0;for(var l=this.selectBox.selectBox=[Math.min(e.boxStart[0],e.boxEnd[0]),Math.min(e.boxStart[1],e.boxEnd[1]),Math.max(e.boxStart[0],e.boxEnd[0]),Math.max(e.boxStart[1],e.boxEnd[1])],c=0;c<2;c++)e.boxStart[c]===e.boxEnd[c]&&(l[c]=t.dataBox[c],l[c+2]=t.dataBox[c+2]);t.setDirty()}else if(!e.panning&&this.isMouseOver){this.selectBox.enabled=!1;var h=i._size,f=this.xaxis.domain,d=this.yaxis.domain;a=t.pick(o/t.pixelRatio+h.l+f[0]*h.w,s/t.pixelRatio-(h.t+(1-d[1])*h.h));var p=a&&a.object._trace.handlePick(a);if(p&&n&&this.emitPointAction(p,"plotly_click"),a&&"skip"!==a.object._trace.hoverinfo&&i.hovermode&&p&&(!this.lastPickResult||this.lastPickResult.traceUid!==p.trace.uid||this.lastPickResult.dataCoord[0]!==p.dataCoord[0]||this.lastPickResult.dataCoord[1]!==p.dataCoord[1])){var m=p;this.lastPickResult={traceUid:p.trace?p.trace.uid:null,dataCoord:p.dataCoord.slice()},this.spikes.update({center:a.dataCoord}),m.screenCoord=[((t.viewBox[2]-t.viewBox[0])*(a.dataCoord[0]-t.dataBox[0])/(t.dataBox[2]-t.dataBox[0])+t.viewBox[0])/t.pixelRatio,(this.canvas.height-(t.viewBox[3]-t.viewBox[1])*(a.dataCoord[1]-t.dataBox[1])/(t.dataBox[3]-t.dataBox[1])-t.viewBox[1])/t.pixelRatio],this.emitPointAction(p,"plotly_hover");var g=this.fullData[m.trace.index]||{},v=m.pointIndex,y=u.castHoverinfo(g,i,v);if(y&&"all"!==y){var b=y.split("+");-1===b.indexOf("x")&&(m.traceCoord[0]=void 0),-1===b.indexOf("y")&&(m.traceCoord[1]=void 0),-1===b.indexOf("z")&&(m.traceCoord[2]=void 0),-1===b.indexOf("text")&&(m.textLabel=void 0),-1===b.indexOf("name")&&(m.name=void 0)}u.loneHover({x:m.screenCoord[0],y:m.screenCoord[1],xLabel:this.hoverFormatter("xaxis",m.traceCoord[0]),yLabel:this.hoverFormatter("yaxis",m.traceCoord[1]),zLabel:m.traceCoord[2],text:m.textLabel,name:m.name,color:u.castHoverOption(g,v,"bgcolor")||m.color,borderColor:u.castHoverOption(g,v,"bordercolor"),fontFamily:u.castHoverOption(g,v,"font.family"),fontSize:u.castHoverOption(g,v,"font.size"),fontColor:u.castHoverOption(g,v,"font.color")},{container:this.svgContainer,gd:this.graphDiv})}}a||this.unhover(),t.draw()}},w.unhover=function(){this.lastPickResult&&(this.spikes.update({}),this.lastPickResult=null,this.graphDiv.emit("plotly_unhover"),u.loneUnhover(this.svgContainer))},w.hoverFormatter=function(t,e){if(void 0!==e){var r=this[t];return l.tickText(r,r.c2l(e),"hover").text}}},{"../../components/fx":645,"../../lib/html2unicode":726,"../../lib/show_no_webgl_msg":747,"../../plots/cartesian/axes":772,"../../plots/cartesian/constraints":779,"../../registry":846,"./camera":806,"./convert":807,"gl-plot2d":219,"gl-select-box":253,"gl-spikes2d":262,"webgl-context":563}],810:[function(t,e,r){"use strict";function n(t,e){function r(e,r,n,a){var o=p.keyBindingMode;if(!1!==o){var s="rotate"===o,l="pan"===o,c="zoom"===o,f=!!a.control,d=!!a.alt,y=!!a.shift,b=!!(1&e),x=!!(2&e),_=!!(4&e),w=1/t.clientHeight,M=w*(r-m),k=w*(n-g),A=p.flipX?1:-1,T=p.flipY?1:-1,S=i(),E=Math.PI*p.rotateSpeed;if((s&&b&&!f&&!d&&!y||b&&!f&&!d&&y)&&u.rotate(S,A*E*M,-T*E*k,0),(l&&b&&!f&&!d&&!y||x||b&&f&&!d&&!y)&&u.pan(S,-p.translateSpeed*M*h,p.translateSpeed*k*h,0),c&&b&&!f&&!d&&!y||_||b&&!f&&d&&!y){var L=-p.zoomSpeed*k/window.innerHeight*(S-u.lastT())*100;u.pan(S,0,0,h*(Math.exp(L)-1))}return m=r,g=n,v=a,!0}}t=t||document.body,e=e||{};var n=[.01,1/0];"distanceLimits"in e&&(n[0]=e.distanceLimits[0],n[1]=e.distanceLimits[1]),"zoomMin"in e&&(n[0]=e.zoomMin),"zoomMax"in e&&(n[1]=e.zoomMax);var u=a({center:e.center||[0,0,0],up:e.up||[0,1,0],eye:e.eye||[0,0,10],mode:e.mode||"orbit",distanceLimits:n}),c=[0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0],h=0,f=t.clientWidth,d=t.clientHeight,p={keyBindingMode:"rotate",view:u,element:t,delay:e.delay||16,rotateSpeed:e.rotateSpeed||1,zoomSpeed:e.zoomSpeed||1,translateSpeed:e.translateSpeed||1,flipX:!!e.flipX,flipY:!!e.flipY,modes:u.modes,tick:function(){var e=i(),r=this.delay,n=e-2*r;u.idle(e-r),u.recalcMatrix(n),u.flush(e-(100+2*r));for(var a=!0,o=u.computedMatrix,s=0;s<16;++s)a=a&&c[s]===o[s],c[s]=o[s];var l=t.clientWidth===f&&t.clientHeight===d;return f=t.clientWidth,d=t.clientHeight,a?!l:(h=Math.exp(u.computedRadius[0]),!0)},lookAt:function(t,e,r){u.lookAt(u.lastT(),t,e,r)},rotate:function(t,e,r){u.rotate(u.lastT(),t,e,r)},pan:function(t,e,r){u.pan(u.lastT(),t,e,r)},translate:function(t,e,r){u.translate(u.lastT(),t,e,r)}};Object.defineProperties(p,{matrix:{get:function(){return u.computedMatrix},set:function(t){return u.setMatrix(u.lastT(),t),u.computedMatrix},enumerable:!0},mode:{get:function(){return u.getMode()},set:function(t){var e=u.computedUp.slice(),r=u.computedEye.slice(),n=u.computedCenter.slice();if(u.setMode(t),"turntable"===t){var a=i();u._active.lookAt(a,r,n,e),u._active.lookAt(a+500,r,n,[0,0,1]),u._active.flush(a)}return u.getMode()},enumerable:!0},center:{get:function(){return u.computedCenter},set:function(t){return u.lookAt(u.lastT(),null,t),u.computedCenter},enumerable:!0},eye:{get:function(){return u.computedEye},set:function(t){return u.lookAt(u.lastT(),t),u.computedEye},enumerable:!0},up:{get:function(){return u.computedUp},set:function(t){return u.lookAt(u.lastT(),null,null,t),u.computedUp},enumerable:!0},distance:{get:function(){return h},set:function(t){return u.setDistance(u.lastT(),t),t},enumerable:!0},distanceLimits:{get:function(){return u.getDistanceLimits(n)},set:function(t){return u.setDistanceLimits(t),t},enumerable:!0}}),t.addEventListener("contextmenu",function(t){return t.preventDefault(),!1});var m=0,g=0,v={shift:!1,control:!1,alt:!1,meta:!1};return p.mouseListener=o(t,r),t.addEventListener("touchstart",function(e){var n=l(e.changedTouches[0],t);r(0,n[0],n[1],v),r(1,n[0],n[1],v)}),t.addEventListener("touchmove",function(e){var n=l(e.changedTouches[0],t);r(1,n[0],n[1],v)}),t.addEventListener("touchend",function(){r(0,m,g,v)}),p.wheelListener=s(t,function(t,e){if(!1!==p.keyBindingMode){var r=p.flipX?1:-1,n=p.flipY?1:-1,a=i();if(Math.abs(t)>Math.abs(e))u.rotate(a,0,0,-t*r*Math.PI*p.rotateSpeed/window.innerWidth);else{var o=-p.zoomSpeed*n*e/window.innerHeight*(a-u.lastT())/20;u.pan(a,0,0,h*(Math.exp(o)-1))}}},!0),p}e.exports=n;var i=t("right-now"),a=t("3d-view"),o=t("mouse-change"),s=t("mouse-wheel"),l=t("mouse-event-offset")},{"3d-view":37,"mouse-change":452,"mouse-event-offset":453,"mouse-wheel":455,"right-now":502}],811:[function(t,e,r){"use strict";var n=t("../../plot_api/edit_types").overrideAll,i=t("../../components/fx/layout_attributes"),a=t("./scene"),o=t("../plots"),s=t("../../lib"),l=t("../../constants/xmlns_namespaces");r.name="gl3d",r.attr="scene",r.idRoot="scene",r.idRegex=r.attrRegex=s.counterRegex("scene"),r.attributes=t("./layout/attributes"),r.layoutAttributes=t("./layout/layout_attributes"),r.baseLayoutAttrOverrides=n({hoverlabel:i.hoverlabel},"plot","nested"),r.supplyLayoutDefaults=t("./layout/defaults"),r.plot=function(t){for(var e=t._fullLayout,r=t._fullData,n=o.getSubplotIds(e,"gl3d"),i=0;i<n.length;i++){var l=n[i],u=o.getSubplotData(r,"gl3d",l),c=e[l],h=c._scene;h||(h=new a({id:l,graphDiv:t,container:t.querySelector(".gl-container"),staticPlot:t._context.staticPlot,plotGlPixelRatio:t._context.plotGlPixelRatio},e),c._scene=h),h.cameraInitial||(h.cameraInitial=s.extendDeep({},c.camera)),h.plot(u,e,t.layout)}},r.clean=function(t,e,r,n){for(var i=o.getSubplotIds(n,"gl3d"),a=0;a<i.length;a++){var s=i[a];!e[s]&&n[s]._scene&&(n[s]._scene.destroy(),n._infolayer&&n._infolayer.selectAll(".annotation-"+s).remove())}},r.toSVG=function(t){for(var e=t._fullLayout,r=o.getSubplotIds(e,"gl3d"),n=e._size,i=0;i<r.length;i++){var a=e[r[i]],s=a.domain,u=a._scene,c=u.toImage("png");e._glimages.append("svg:image").attr({xmlns:l.svg,"xlink:href":c,x:n.l+n.w*s.x[0],y:n.t+n.h*(1-s.y[1]),width:n.w*(s.x[1]-s.x[0]),height:n.h*(s.y[1]-s.y[0]),preserveAspectRatio:"none"}),u.destroy()}},r.cleanId=function(t){if(t.match(/^scene[0-9]*$/)){var e=t.substr(5);return"1"===e&&(e=""),"scene"+e}},r.updateFx=function(t){for(var e=o.getSubplotIds(t,"gl3d"),r=0;r<e.length;r++){t[e[r]]._scene.updateFx(t.dragmode,t.hovermode)}}},{"../../components/fx/layout_attributes":646,"../../constants/xmlns_namespaces":709,"../../lib":728,"../../plot_api/edit_types":756,"../plots":831,"./layout/attributes":812,"./layout/defaults":816,"./layout/layout_attributes":817,"./scene":821}],812:[function(t,e,r){"use strict";e.exports={scene:{valType:"subplotid",dflt:"scene",editType:"calc+clearAxisTypes"}}},{}],813:[function(t,e,r){"use strict";var n=t("../../../components/color"),i=t("../../cartesian/layout_attributes"),a=t("../../../lib/extend").extendFlat,o=t("../../../plot_api/edit_types").overrideAll;e.exports=o({visible:i.visible,showspikes:{valType:"boolean",dflt:!0},spikesides:{valType:"boolean",dflt:!0},spikethickness:{valType:"number",min:0,dflt:2},spikecolor:{valType:"color",dflt:n.defaultLine},showbackground:{valType:"boolean",dflt:!1},backgroundcolor:{valType:"color",dflt:"rgba(204, 204, 204, 0.5)"},showaxeslabels:{valType:"boolean",dflt:!0},color:i.color,categoryorder:i.categoryorder,categoryarray:i.categoryarray,title:i.title,titlefont:i.titlefont,type:i.type,autorange:i.autorange,rangemode:i.rangemode,range:i.range,tickmode:i.tickmode,nticks:i.nticks,tick0:i.tick0,dtick:i.dtick,tickvals:i.tickvals,ticktext:i.ticktext,ticks:i.ticks,mirror:i.mirror,ticklen:i.ticklen,tickwidth:i.tickwidth,tickcolor:i.tickcolor,showticklabels:i.showticklabels,tickfont:i.tickfont,tickangle:i.tickangle,tickprefix:i.tickprefix,showtickprefix:i.showtickprefix,ticksuffix:i.ticksuffix,showticksuffix:i.showticksuffix,showexponent:i.showexponent,exponentformat:i.exponentformat,separatethousands:i.separatethousands,tickformat:i.tickformat,hoverformat:i.hoverformat,showline:i.showline,linecolor:i.linecolor,linewidth:i.linewidth,showgrid:i.showgrid,gridcolor:a({},i.gridcolor,{dflt:"rgb(204, 204, 204)"}),gridwidth:i.gridwidth,zeroline:i.zeroline,zerolinecolor:i.zerolinecolor,zerolinewidth:i.zerolinewidth},"plot","from-root")},{"../../../components/color":604,"../../../lib/extend":717,"../../../plot_api/edit_types":756,"../../cartesian/layout_attributes":783}],814:[function(t,e,r){"use strict";var n=t("tinycolor2").mix,i=t("../../../lib"),a=t("./axis_attributes"),o=t("../../cartesian/type_defaults"),s=t("../../cartesian/axis_defaults"),l=["xaxis","yaxis","zaxis"];e.exports=function(t,e,r){function u(t,e){return i.coerce(c,h,a,t,e)}for(var c,h,f=0;f<l.length;f++){var d=l[f];c=t[d]||{},h=e[d]={_id:d[0]+r.scene,_name:d},o(c,h,u,r.data),s(c,h,u,{font:r.font,letter:d[0],data:r.data,showGrid:!0,bgColor:r.bgColor,calendar:r.calendar}),u("gridcolor",n(h.color,r.bgColor,13600/187).toRgbString()),u("title",d[0]),h.setScale=i.noop,u("showspikes")&&(u("spikesides"),u("spikethickness"),u("spikecolor",h.color)),u("showaxeslabels"),u("showbackground")&&u("backgroundcolor")}}},{"../../../lib":728,"../../cartesian/axis_defaults":774,"../../cartesian/type_defaults":794,"./axis_attributes":813,tinycolor2:534}],815:[function(t,e,r){"use strict";function n(){this.bounds=[[-10,-10,-10],[10,10,10]],this.ticks=[[],[],[]],this.tickEnable=[!0,!0,!0],this.tickFont=["sans-serif","sans-serif","sans-serif"],this.tickSize=[12,12,12],this.tickAngle=[0,0,0],this.tickColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.tickPad=[18,18,18],this.labels=["x","y","z"],this.labelEnable=[!0,!0,!0],this.labelFont=["Open Sans","Open Sans","Open Sans"],this.labelSize=[20,20,20],this.labelAngle=[0,0,0],this.labelColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.labelPad=[30,30,30],this.lineEnable=[!0,!0,!0],this.lineMirror=[!1,!1,!1],this.lineWidth=[1,1,1],this.lineColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.lineTickEnable=[!0,!0,!0],this.lineTickMirror=[!1,!1,!1],this.lineTickLength=[10,10,10],this.lineTickWidth=[1,1,1],this.lineTickColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.gridEnable=[!0,!0,!0],this.gridWidth=[1,1,1],this.gridColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.zeroEnable=[!0,!0,!0],this.zeroLineColor=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.zeroLineWidth=[2,2,2],this.backgroundEnable=[!0,!0,!0],this.backgroundColor=[[.8,.8,.8,.5],[.8,.8,.8,.5],[.8,.8,.8,.5]],this._defaultTickPad=this.tickPad.slice(),this._defaultLabelPad=this.labelPad.slice(),this._defaultLineTickLength=this.lineTickLength.slice()}function i(t){var e=new n;return e.merge(t),e}var a=t("../../../lib/html2unicode"),o=t("../../../lib/str2rgbarray"),s=["xaxis","yaxis","zaxis"];n.prototype.merge=function(t){for(var e=this,r=0;r<3;++r){var n=t[s[r]];n.visible?(e.labels[r]=a(n.title),"titlefont"in n&&(n.titlefont.color&&(e.labelColor[r]=o(n.titlefont.color)),n.titlefont.family&&(e.labelFont[r]=n.titlefont.family),n.titlefont.size&&(e.labelSize[r]=n.titlefont.size)),"showline"in n&&(e.lineEnable[r]=n.showline),"linecolor"in n&&(e.lineColor[r]=o(n.linecolor)),"linewidth"in n&&(e.lineWidth[r]=n.linewidth),"showgrid"in n&&(e.gridEnable[r]=n.showgrid),"gridcolor"in n&&(e.gridColor[r]=o(n.gridcolor)),"gridwidth"in n&&(e.gridWidth[r]=n.gridwidth),"log"===n.type?e.zeroEnable[r]=!1:"zeroline"in n&&(e.zeroEnable[r]=n.zeroline),"zerolinecolor"in n&&(e.zeroLineColor[r]=o(n.zerolinecolor)),"zerolinewidth"in n&&(e.zeroLineWidth[r]=n.zerolinewidth),"ticks"in n&&n.ticks?e.lineTickEnable[r]=!0:e.lineTickEnable[r]=!1,"ticklen"in n&&(e.lineTickLength[r]=e._defaultLineTickLength[r]=n.ticklen),"tickcolor"in n&&(e.lineTickColor[r]=o(n.tickcolor)),"tickwidth"in n&&(e.lineTickWidth[r]=n.tickwidth),"tickangle"in n&&(e.tickAngle[r]="auto"===n.tickangle?0:Math.PI*-n.tickangle/180),"showticklabels"in n&&(e.tickEnable[r]=n.showticklabels),"tickfont"in n&&(n.tickfont.color&&(e.tickColor[r]=o(n.tickfont.color)),n.tickfont.family&&(e.tickFont[r]=n.tickfont.family),n.tickfont.size&&(e.tickSize[r]=n.tickfont.size)),"mirror"in n?-1!==["ticks","all","allticks"].indexOf(n.mirror)?(e.lineTickMirror[r]=!0,e.lineMirror[r]=!0):!0===n.mirror?(e.lineTickMirror[r]=!1,e.lineMirror[r]=!0):(e.lineTickMirror[r]=!1,e.lineMirror[r]=!1):e.lineMirror[r]=!1,"showbackground"in n&&!1!==n.showbackground?(e.backgroundEnable[r]=!0,e.backgroundColor[r]=o(n.backgroundcolor)):e.backgroundEnable[r]=!1):(e.tickEnable[r]=!1,e.labelEnable[r]=!1,e.lineEnable[r]=!1,e.lineTickEnable[r]=!1,e.gridEnable[r]=!1,e.zeroEnable[r]=!1,e.backgroundEnable[r]=!1)}},e.exports=i},{"../../../lib/html2unicode":726,"../../../lib/str2rgbarray":749}],816:[function(t,e,r){"use strict";function n(t,e,r,n){for(var i=r("bgcolor"),s=a.combine(i,n.paper_bgcolor),u=["up","center","eye"],c=0;c<u.length;c++)r("camera."+u[c]+".x"),r("camera."+u[c]+".y"),r("camera."+u[c]+".z");var h=!!r("aspectratio.x")&&!!r("aspectratio.y")&&!!r("aspectratio.z"),f=h?"manual":"auto",d=r("aspectmode",f);h||(t.aspectratio=e.aspectratio={x:1,y:1,z:1},"manual"===d&&(e.aspectmode="auto"),t.aspectmode=e.aspectmode),l(t,e,{font:n.font,scene:n.id,data:n.fullData,bgColor:s,calendar:n.calendar}),o.getComponentMethod("annotations3d","handleDefaults")(t,e,n),r("dragmode",n.getDfltFromLayout("dragmode")),r("hovermode",n.getDfltFromLayout("hovermode"))}var i=t("../../../lib"),a=t("../../../components/color"),o=t("../../../registry"),s=t("../../subplot_defaults"),l=t("./axis_defaults"),u=t("./layout_attributes");e.exports=function(t,e,r){function a(e){if(!o){return i.validate(t[e],u[e])?t[e]:void 0}}var o=e._basePlotModules.length>1;s(t,e,r,{type:"gl3d",attributes:u,handleDefaults:n,fullLayout:e,font:e.font,fullData:r,getDfltFromLayout:a,paper_bgcolor:e.paper_bgcolor,calendar:e.calendar})}},{"../../../components/color":604,"../../../lib":728,"../../../registry":846,"../../subplot_defaults":838,"./axis_defaults":814,"./layout_attributes":817}],817:[function(t,e,r){"use strict";function n(t,e,r){return{x:{valType:"number",dflt:t,editType:"camera"},y:{valType:"number",dflt:e,editType:"camera"},z:{valType:"number",dflt:r,editType:"camera"},editType:"camera"}}var i=t("./axis_attributes"),a=t("../../../lib/extend").extendFlat,o=t("../../../lib").counterRegex;e.exports={_arrayAttrRegexps:[o("scene",".annotations",!0)],bgcolor:{valType:"color",dflt:"rgba(0,0,0,0)",editType:"plot"},camera:{up:a(n(0,0,1),{}),center:a(n(0,0,0),{}),eye:a(n(1.25,1.25,1.25),{}),editType:"camera"},domain:{x:{valType:"info_array",items:[{valType:"number",min:0,max:1,editType:"plot"},{valType:"number",min:0,max:1,editType:"plot"}],dflt:[0,1],editType:"plot"},y:{valType:"info_array",items:[{valType:"number",min:0,max:1,editType:"plot"},{valType:"number",min:0,max:1,editType:"plot"}],dflt:[0,1],editType:"plot"},editType:"plot"},aspectmode:{valType:"enumerated",values:["auto","cube","data","manual"],dflt:"auto",editType:"plot",impliedEdits:{"aspectratio.x":void 0,"aspectratio.y":void 0,"aspectratio.z":void 0}},aspectratio:{x:{valType:"number",min:0,editType:"plot",impliedEdits:{"^aspectmode":"manual"}},y:{valType:"number",min:0,editType:"plot",impliedEdits:{"^aspectmode":"manual"}},z:{valType:"number",min:0,editType:"plot",impliedEdits:{"^aspectmode":"manual"}},editType:"plot",impliedEdits:{aspectmode:"manual"}},xaxis:i,yaxis:i,zaxis:i,dragmode:{valType:"enumerated",values:["orbit","turntable","zoom","pan",!1],dflt:"turntable",editType:"plot"},hovermode:{valType:"enumerated",values:["closest",!1],dflt:"closest",editType:"modebar"},editType:"plot",_deprecated:{cameraposition:{valType:"info_array",editType:"camera"}}}},{"../../../lib":728,"../../../lib/extend":717,"./axis_attributes":813}],818:[function(t,e,r){"use strict";function n(){this.enabled=[!0,!0,!0],this.colors=[[0,0,0,1],[0,0,0,1],[0,0,0,1]],this.drawSides=[!0,!0,!0],this.lineWidth=[1,1,1]}function i(t){var e=new n;return e.merge(t),e}var a=t("../../../lib/str2rgbarray"),o=["xaxis","yaxis","zaxis"];n.prototype.merge=function(t){for(var e=0;e<3;++e){var r=t[o[e]];r.visible?(this.enabled[e]=r.showspikes,this.colors[e]=a(r.spikecolor),this.drawSides[e]=r.spikesides,this.lineWidth[e]=r.spikethickness):(this.enabled[e]=!1,this.drawSides[e]=!1)}},e.exports=i},{"../../../lib/str2rgbarray":749}],819:[function(t,e,r){"use strict";function n(t){for(var e=new Array(3),r=0;r<3;++r){for(var n=t[r],i=new Array(n.length),a=0;a<n.length;++a)i[a]=n[a].x;e[r]=i}return e}function i(t){for(var e=t.axesOptions,r=t.glplot.axesPixels,i=t.fullSceneLayout,c=[[],[],[]],h=0;h<3;++h){var f=i[l[h]];if(f._length=(r[h].hi-r[h].lo)*r[h].pixelsPerDataUnit/t.dataScale[h],Math.abs(f._length)===1/0)c[h]=[];else{f.range[0]=r[h].lo/t.dataScale[h],f.range[1]=r[h].hi/t.dataScale[h],f._m=1/(t.dataScale[h]*r[h].pixelsPerDataUnit),f.range[0]===f.range[1]&&(f.range[0]-=1,f.range[1]+=1);var d=f.tickmode;if("auto"===f.tickmode){f.tickmode="linear";var p=f.nticks||o.constrain(f._length/40,4,9);a.autoTicks(f,Math.abs(f.range[1]-f.range[0])/p)}for(var m=a.calcTicks(f),g=0;g<m.length;++g)m[g].x=m[g].x*t.dataScale[h],m[g].text=s(m[g].text);c[h]=m,f.tickmode=d}}e.ticks=c;for(var h=0;h<3;++h){u[h]=.5*(t.glplot.bounds[0][h]+t.glplot.bounds[1][h]);for(var g=0;g<2;++g)e.bounds[g][h]=t.glplot.bounds[g][h]}t.contourLevels=n(c)}e.exports=i;var a=t("../../cartesian/axes"),o=t("../../../lib"),s=t("../../../lib/html2unicode"),l=["xaxis","yaxis","zaxis"],u=[0,0,0]},{"../../../lib":728,"../../../lib/html2unicode":726,"../../cartesian/axes":772}],820:[function(t,e,r){"use strict";function n(t,e){var r,n,i=[0,0,0,0];for(r=0;r<4;++r)for(n=0;n<4;++n)i[n]+=t[4*r+n]*e[r];return i}function i(t,e){return n(t.projection,n(t.view,n(t.model,[e[0],e[1],e[2],1])))}e.exports=i},{}],821:[function(t,e,r){"use strict";function n(t){function e(e,r){var n=t.fullSceneLayout[e];return g.tickText(n,n.d2l(r),"hover").text}var r,n=t.svgContainer,i=t.container.getBoundingClientRect(),a=i.width,o=i.height;n.setAttributeNS(null,"viewBox","0 0 "+a+" "+o),n.setAttributeNS(null,"width",a),n.setAttributeNS(null,"height",o),k(t),t.glplot.axes.update(t.axesOptions);for(var s=Object.keys(t.traces),l=null,u=t.glplot.selection,c=0;c<s.length;++c)r=t.traces[s[c]],"skip"!==r.data.hoverinfo&&r.handlePick(u)&&(l=r),r.setContourLevels&&r.setContourLevels();var h;if(null!==l){var f=_(t.glplot.cameraParams,u.dataCoordinate);r=l.data;var d=u.index,p=v.castHoverinfo(r,t.fullLayout,d),m=e("xaxis",u.traceCoordinate[0]),y=e("yaxis",u.traceCoordinate[1]),b=e("zaxis",u.traceCoordinate[2]);if("all"!==p){var x=p.split("+");-1===x.indexOf("x")&&(m=void 0),-1===x.indexOf("y")&&(y=void 0),-1===x.indexOf("z")&&(b=void 0),-1===x.indexOf("text")&&(u.textLabel=void 0),-1===x.indexOf("name")&&(l.name=void 0)}t.fullSceneLayout.hovermode&&v.loneHover({x:(.5+.5*f[0]/f[3])*a,y:(.5-.5*f[1]/f[3])*o,xLabel:m,yLabel:y,zLabel:b,text:u.textLabel,name:l.name,color:v.castHoverOption(r,d,"bgcolor")||l.color,borderColor:v.castHoverOption(r,d,"bordercolor"),fontFamily:v.castHoverOption(r,d,"font.family"),fontSize:v.castHoverOption(r,d,"font.size"),fontColor:v.castHoverOption(r,d,"font.color")},{container:n,gd:t.graphDiv});var w={x:u.traceCoordinate[0],y:u.traceCoordinate[1],z:u.traceCoordinate[2],data:r._input,fullData:r,curveNumber:r.index,pointNumber:d};v.appendArrayPointValue(w,r,d);var M={points:[w]};u.buttons&&u.distance<5?t.graphDiv.emit("plotly_click",M):t.graphDiv.emit("plotly_hover",M),h=M}else v.loneUnhover(n),t.graphDiv.emit("plotly_unhover",h);t.drawAnnotations(t)}function i(t,e,r,i){var a={canvas:r,gl:i,container:t.container,axes:t.axesOptions,spikes:t.spikeOptions,pickRadius:10,snapToData:!0,autoScale:!0,autoBounds:!1};if(t.staticMode){if(!(h||(c=document.createElement("canvas"),h=d({canvas:c,preserveDrawingBuffer:!0,premultipliedAlpha:!0,antialias:!0}))))throw new Error("error creating static canvas/context for image server");a.pixelRatio=t.pixelRatio,a.gl=h,a.canvas=c}try{t.glplot=f(a)}catch(e){b(t)}var o=function(t){if(!1!==t.fullSceneLayout.dragmode){var e={};e[t.id+".camera"]=u(t.camera),t.saveCamera(t.graphDiv.layout),t.graphDiv.emit("plotly_relayout",e)}};if(t.glplot.canvas.addEventListener("mouseup",o.bind(null,t)),t.glplot.canvas.addEventListener("wheel",o.bind(null,t)),t.staticMode||t.glplot.canvas.addEventListener("webglcontextlost",function(t){m.warn("Lost WebGL context."),t.preventDefault()}),!t.camera){var s=t.fullSceneLayout.camera
;t.camera=x(t.container,{center:[s.center.x,s.center.y,s.center.z],eye:[s.eye.x,s.eye.y,s.eye.z],up:[s.up.x,s.up.y,s.up.z],zoomMin:.1,zoomMax:100,mode:"orbit"})}return t.glplot.camera=t.camera,t.glplot.oncontextloss=function(){t.recoverContext()},t.glplot.onrender=n.bind(null,t),t.traces={},!0}function a(t,e){var r=document.createElement("div"),n=t.container;this.graphDiv=t.graphDiv;var a=document.createElementNS("http://www.w3.org/2000/svg","svg");a.style.position="absolute",a.style.top=a.style.left="0px",a.style.width=a.style.height="100%",a.style["z-index"]=20,a.style["pointer-events"]="none",r.appendChild(a),this.svgContainer=a,r.id=t.id,r.style.position="absolute",r.style.top=r.style.left="0px",r.style.width=r.style.height="100%",n.appendChild(r),this.fullLayout=e,this.id=t.id||"scene",this.fullSceneLayout=e[this.id],this.plotArgs=[[],{},{}],this.axesOptions=w(e[this.id]),this.spikeOptions=M(e[this.id]),this.container=r,this.staticMode=!!t.staticPlot,this.pixelRatio=t.plotGlPixelRatio||2,this.dataScale=[1,1,1],this.contourLevels=[[],[],[]],this.convertAnnotations=p.getComponentMethod("annotations3d","convert"),this.drawAnnotations=p.getComponentMethod("annotations3d","draw"),i(this,e)}function o(t,e,r,n,i){for(var a,o=0;o<e.length;++o)if(Array.isArray(e[o]))for(var s=0;s<e[o].length;++s)a=t.d2l(e[o][s],0,i),!isNaN(a)&&isFinite(a)&&(n[0][r]=Math.min(n[0][r],a),n[1][r]=Math.max(n[1][r],a));else a=t.d2l(e[o],0,i),!isNaN(a)&&isFinite(a)&&(n[0][r]=Math.min(n[0][r],a),n[1][r]=Math.max(n[1][r],a))}function s(t,e,r){var n=t.fullSceneLayout;o(n.xaxis,e.x,0,r,e.xcalendar),o(n.yaxis,e.y,1,r,e.ycalendar),o(n.zaxis,e.z,2,r,e.zcalendar)}function l(t){return[[t.eye.x,t.eye.y,t.eye.z],[t.center.x,t.center.y,t.center.z],[t.up.x,t.up.y,t.up.z]]}function u(t){return{up:{x:t.up[0],y:t.up[1],z:t.up[2]},center:{x:t.center[0],y:t.center[1],z:t.center[2]},eye:{x:t.eye[0],y:t.eye[1],z:t.eye[2]}}}var c,h,f=t("gl-plot3d"),d=t("webgl-context"),p=t("../../registry"),m=t("../../lib"),g=t("../../plots/cartesian/axes"),v=t("../../components/fx"),y=t("../../lib/str2rgbarray"),b=t("../../lib/show_no_webgl_msg"),x=t("./camera"),_=t("./project"),w=t("./layout/convert"),M=t("./layout/spikes"),k=t("./layout/tick_marks"),A=a.prototype;A.recoverContext=function(){function t(){return r.isContextLost()?void requestAnimationFrame(t):i(e,e.fullLayout,n,r)?void e.plot.apply(e,e.plotArgs):void m.error("Catastrophic and unrecoverable WebGL error. Context lost.")}var e=this,r=this.glplot.gl,n=this.glplot.canvas;this.glplot.dispose(),requestAnimationFrame(t)};var T=["xaxis","yaxis","zaxis"];A.plot=function(t,e,r){if(this.plotArgs=[t,e,r],!this.glplot.contextLost){var n,i,a,o,l,u,c=e[this.id],h=r[this.id];c.bgcolor?this.glplot.clearColor=y(c.bgcolor):this.glplot.clearColor=[0,0,0,0],this.glplot.snapToData=!0,this.fullLayout=e,this.fullSceneLayout=c,this.glplotLayout=c,this.axesOptions.merge(c),this.spikeOptions.merge(c),this.setCamera(c.camera),this.updateFx(c.dragmode,c.hovermode),this.glplot.update({}),this.setConvert(l),t?Array.isArray(t)||(t=[t]):t=[];var f=[[1/0,1/0,1/0],[-1/0,-1/0,-1/0]];for(a=0;a<t.length;++a)n=t[a],!0===n.visible&&s(this,n,f);var d=[1,1,1];for(o=0;o<3;++o)f[0][o]>f[1][o]?d[o]=1:f[1][o]===f[0][o]?d[o]=1:d[o]=1/(f[1][o]-f[0][o]);for(this.dataScale=d,this.convertAnnotations(this),a=0;a<t.length;++a)n=t[a],!0===n.visible&&(i=this.traces[n.uid],i?i.update(n):(i=n._module.plot(this,n),this.traces[n.uid]=i),i.name=n.name);var p=Object.keys(this.traces);t:for(a=0;a<p.length;++a){for(o=0;o<t.length;++o)if(t[o].uid===p[a]&&!0===t[o].visible)continue t;i=this.traces[p[a]],i.dispose(),delete this.traces[p[a]]}this.glplot.objects.sort(function(t,e){return t._trace.data.index-e._trace.data.index});var m=[[0,0,0],[0,0,0]],g=[],v={};for(a=0;a<3;++a){if(l=c[T[a]],u=l.type,u in v?(v[u].acc*=d[a],v[u].count+=1):v[u]={acc:d[a],count:1},l.autorange){m[0][a]=1/0,m[1][a]=-1/0;var b=this.glplot.objects,x=this.fullSceneLayout.annotations||[],_=l._name.charAt(0);for(o=0;o<b.length;o++){var w=b[o].bounds;m[0][a]=Math.min(m[0][a],w[0][a]/d[a]),m[1][a]=Math.max(m[1][a],w[1][a]/d[a])}for(o=0;o<x.length;o++){var M=x[o];if(M.visible){var k=l.r2l(M[_]);m[0][a]=Math.min(m[0][a],k),m[1][a]=Math.max(m[1][a],k)}}if("rangemode"in l&&"tozero"===l.rangemode&&(m[0][a]=Math.min(m[0][a],0),m[1][a]=Math.max(m[1][a],0)),m[0][a]>m[1][a])m[0][a]=-1,m[1][a]=1;else{var A=m[1][a]-m[0][a];m[0][a]-=A/32,m[1][a]+=A/32}}else{var S=l.range;m[0][a]=l.r2l(S[0]),m[1][a]=l.r2l(S[1])}m[0][a]===m[1][a]&&(m[0][a]-=1,m[1][a]+=1),g[a]=m[1][a]-m[0][a],this.glplot.bounds[0][a]=m[0][a]*d[a],this.glplot.bounds[1][a]=m[1][a]*d[a]}var E=[1,1,1];for(a=0;a<3;++a){l=c[T[a]],u=l.type;var L=v[u];E[a]=Math.pow(L.acc,1/L.count)/d[a]}var C;if("auto"===c.aspectmode)C=Math.max.apply(null,E)/Math.min.apply(null,E)<=4?E:[1,1,1];else if("cube"===c.aspectmode)C=[1,1,1];else if("data"===c.aspectmode)C=E;else{if("manual"!==c.aspectmode)throw new Error("scene.js aspectRatio was not one of the enumerated types");var I=c.aspectratio;C=[I.x,I.y,I.z]}c.aspectratio.x=h.aspectratio.x=C[0],c.aspectratio.y=h.aspectratio.y=C[1],c.aspectratio.z=h.aspectratio.z=C[2],this.glplot.aspect=C;var z=c.domain||null,D=e._size||null;if(z&&D){var P=this.container.style;P.position="absolute",P.left=D.l+z.x[0]*D.w+"px",P.top=D.t+(1-z.y[1])*D.h+"px",P.width=D.w*(z.x[1]-z.x[0])+"px",P.height=D.h*(z.y[1]-z.y[0])+"px"}this.glplot.redraw()}},A.destroy=function(){this.glplot&&(this.camera.mouseListener.enabled=!1,this.container.removeEventListener("wheel",this.camera.wheelListener),this.camera=this.glplot.camera=null,this.glplot.dispose(),this.container.parentNode.removeChild(this.container),this.glplot=null)},A.getCamera=function(){return this.glplot.camera.view.recalcMatrix(this.camera.view.lastT()),u(this.glplot.camera)},A.setCamera=function(t){this.glplot.camera.lookAt.apply(this,l(t))},A.saveCamera=function(t){var e=this.getCamera(),r=m.nestedProperty(t,this.id+".camera"),n=r.get(),i=!1;if(void 0===n)i=!0;else for(var a=0;a<3;a++)for(var o=0;o<3;o++)if(!function(t,e,r,n){var i=["up","center","eye"],a=["x","y","z"];return e[i[r]]&&t[i[r]][a[n]]===e[i[r]][a[n]]}(e,n,a,o)){i=!0;break}return i&&r.set(e),i},A.updateFx=function(t,e){var r=this.camera;r&&("orbit"===t?(r.mode="orbit",r.keyBindingMode="rotate"):"turntable"===t?(r.up=[0,0,1],r.mode="turntable",r.keyBindingMode="rotate"):r.keyBindingMode=t),this.fullSceneLayout.hovermode=e},A.toImage=function(t){t||(t="png"),this.staticMode&&this.container.appendChild(c),this.glplot.redraw();var e=this.glplot.gl,r=e.drawingBufferWidth,n=e.drawingBufferHeight;e.bindFramebuffer(e.FRAMEBUFFER,null);var i=new Uint8Array(r*n*4);e.readPixels(0,0,r,n,e.RGBA,e.UNSIGNED_BYTE,i);for(var a=0,o=n-1;a<o;++a,--o)for(var s=0;s<r;++s)for(var l=0;l<4;++l){var u=i[4*(r*a+s)+l];i[4*(r*a+s)+l]=i[4*(r*o+s)+l],i[4*(r*o+s)+l]=u}var h=document.createElement("canvas");h.width=r,h.height=n;var f=h.getContext("2d"),d=f.createImageData(r,n);d.data.set(i),f.putImageData(d,0,0);var p;switch(t){case"jpeg":p=h.toDataURL("image/jpeg");break;case"webp":p=h.toDataURL("image/webp");break;default:p=h.toDataURL("image/png")}return this.staticMode&&this.container.removeChild(c),p},A.setConvert=function(){for(var t=0;t<3;t++){var e=this.fullSceneLayout[T[t]];g.setConvert(e,this.fullLayout),e.setScale=m.noop}},e.exports=a},{"../../components/fx":645,"../../lib":728,"../../lib/show_no_webgl_msg":747,"../../lib/str2rgbarray":749,"../../plots/cartesian/axes":772,"../../registry":846,"./camera":810,"./layout/convert":815,"./layout/spikes":818,"./layout/tick_marks":819,"./project":820,"gl-plot3d":221,"webgl-context":563}],822:[function(t,e,r){"use strict";var n=t("./font_attributes"),i=t("../components/color/attributes"),a=n({editType:"calc"});a.family.dflt='"Open Sans", verdana, arial, sans-serif',a.size.dflt=12,a.color.dflt=i.defaultLine,e.exports={font:a,title:{valType:"string",dflt:"Click to enter Plot title",editType:"layoutstyle"},titlefont:n({editType:"layoutstyle"}),autosize:{valType:"boolean",dflt:!1,editType:"none"},width:{valType:"number",min:10,dflt:700,editType:"none"},height:{valType:"number",min:10,dflt:450,editType:"none"},margin:{l:{valType:"number",min:0,dflt:80,editType:"calc"},r:{valType:"number",min:0,dflt:80,editType:"calc"},t:{valType:"number",min:0,dflt:100,editType:"calc"},b:{valType:"number",min:0,dflt:80,editType:"calc"},pad:{valType:"number",min:0,dflt:0,editType:"calc"},autoexpand:{valType:"boolean",dflt:!0,editType:"calc"},editType:"calc"},paper_bgcolor:{valType:"color",dflt:i.background,editType:"plot"},plot_bgcolor:{valType:"color",dflt:i.background,editType:"layoutstyle"},separators:{valType:"string",dflt:".,",editType:"plot"},hidesources:{valType:"boolean",dflt:!1,editType:"plot"},smith:{valType:"enumerated",values:[!1],dflt:!1,editType:"none"},showlegend:{valType:"boolean",editType:"legend"}}},{"../components/color/attributes":603,"./font_attributes":796}],823:[function(t,e,r){"use strict";e.exports={styleUrlPrefix:"mapbox://styles/mapbox/",styleUrlSuffix:"v9",controlContainerClassName:"mapboxgl-control-container",noAccessTokenErrorMsg:["Missing Mapbox access token.","Mapbox trace type require a Mapbox access token to be registered.","For example:"," Plotly.plot(gd, data, layout, { mapboxAccessToken: 'my-access-token' });","More info here: https://www.mapbox.com/help/define-access-token/"].join("\n"),mapOnErrorMsg:"Mapbox error."}},{}],824:[function(t,e,r){"use strict";var n=t("../../lib");e.exports=function(t,e){var r=t.split(" "),i=r[0],a=r[1],o=Array.isArray(e)?n.mean(e):e,s=.5+o/100,l=1.5+o/100,u=["",""],c=[0,0];switch(i){case"top":u[0]="top",c[1]=-l;break;case"bottom":u[0]="bottom",c[1]=l}switch(a){case"left":u[1]="right",c[0]=-s;break;case"right":u[1]="left",c[0]=s}var h;return h=u[0]&&u[1]?u.join("-"):u[0]?u[0]:u[1]?u[1]:"center",{anchor:h,offset:c}}},{"../../lib":728}],825:[function(t,e,r){"use strict";function n(t,e){var r=t._fullLayout,n=t._context;if(""===n.mapboxAccessToken)return"";for(var i=n.mapboxAccessToken,a=0;a<e.length;a++){var o=r[e[a]];if(o.accesstoken){i=o.accesstoken;break}}if(!i)throw new Error(u.noAccessTokenErrorMsg);return i}var i=t("mapbox-gl"),a=t("../../lib"),o=t("../plots"),s=t("../../constants/xmlns_namespaces"),l=t("./mapbox"),u=t("./constants");r.name="mapbox",r.attr="subplot",r.idRoot="mapbox",r.idRegex=r.attrRegex=a.counterRegex("mapbox"),r.attributes={subplot:{valType:"subplotid",dflt:"mapbox",editType:"calc"}},r.layoutAttributes=t("./layout_attributes"),r.supplyLayoutDefaults=t("./layout_defaults"),r.plot=function(t){var e=t._fullLayout,r=t.calcdata,s=o.getSubplotIds(e,"mapbox"),u=n(t,s);i.accessToken=u;for(var c=0;c<s.length;c++){var h=s[c],f=o.getSubplotCalcData(r,"mapbox",h),d=e[h],p=d._subplot;d.accesstoken=u,p||(p=l({gd:t,container:e._glcontainer.node(),id:h,fullLayout:e,staticPlot:t._context.staticPlot}),e[h]._subplot=p),p.viewInitial||(p.viewInitial={center:a.extendFlat({},d.center),zoom:d.zoom,bearing:d.bearing,pitch:d.pitch}),p.plot(f,e,t._promises)}},r.clean=function(t,e,r,n){for(var i=o.getSubplotIds(n,"mapbox"),a=0;a<i.length;a++){var s=i[a];!e[s]&&n[s]._subplot&&n[s]._subplot.destroy()}},r.toSVG=function(t){for(var e=t._fullLayout,r=o.getSubplotIds(e,"mapbox"),n=e._size,i=0;i<r.length;i++){var a=e[r[i]],l=a.domain,u=a._subplot,c=u.toImage("png");e._glimages.append("svg:image").attr({xmlns:s.svg,"xlink:href":c,x:n.l+n.w*l.x[0],y:n.t+n.h*(1-l.y[1]),width:n.w*(l.x[1]-l.x[0]),height:n.h*(l.y[1]-l.y[0]),preserveAspectRatio:"none"}),u.destroy()}},r.updateFx=function(t){for(var e=o.getSubplotIds(t,"mapbox"),r=0;r<e.length;r++){t[e[r]]._subplot.updateFx(t)}}},{"../../constants/xmlns_namespaces":709,"../../lib":728,"../plots":831,"./constants":823,"./layout_attributes":827,"./layout_defaults":828,"./mapbox":829,"mapbox-gl":343}],826:[function(t,e,r){"use strict";function n(t,e){this.mapbox=t,this.map=t.map,this.uid=t.uid+"-layer"+e,this.idSource=this.uid+"-source",this.idLayer=this.uid+"-layer",this.sourceType=null,this.source=null,this.layerType=null,this.below=null,this.visible=!1}function i(t){var e=t.source;return s.isPlainObject(e)||"string"==typeof e&&e.length>0}function a(t){var e={},r={};switch(t.type){case"circle":s.extendFlat(r,{"circle-radius":t.circle.radius,"circle-color":t.color,"circle-opacity":t.opacity});break;case"line":s.extendFlat(r,{"line-width":t.line.width,"line-color":t.color,"line-opacity":t.opacity});break;case"fill":s.extendFlat(r,{"fill-color":t.color,"fill-outline-color":t.fill.outlinecolor,"fill-opacity":t.opacity});break;case"symbol":var n=t.symbol,i=l(n.textposition,n.iconsize);s.extendFlat(e,{"icon-image":n.icon+"-15","icon-size":n.iconsize/10,"text-field":n.text,"text-size":n.textfont.size,"text-anchor":i.anchor,"text-offset":i.offset}),s.extendFlat(r,{"icon-color":t.color,"text-color":n.textfont.color,"text-opacity":t.opacity})}return{layout:e,paint:r}}function o(t){var e,r=t.sourcetype,n=t.source,i={type:r},a="string"==typeof n;return"geojson"===r?e="data":"vector"===r&&(e=a?"url":"tiles"),i[e]=n,i}var s=t("../../lib"),l=t("./convert_text_opts"),u=n.prototype;u.update=function(t){this.visible?this.needsNewSource(t)?(this.updateLayer(t),this.updateSource(t)):this.needsNewLayer(t)&&this.updateLayer(t):(this.updateSource(t),this.updateLayer(t)),this.updateStyle(t),this.visible=i(t)},u.needsNewSource=function(t){return this.sourceType!==t.sourcetype||this.source!==t.source||this.layerType!==t.type},u.needsNewLayer=function(t){return this.layerType!==t.type||this.below!==t.below},u.updateSource=function(t){var e=this.map;if(e.getSource(this.idSource)&&e.removeSource(this.idSource),this.sourceType=t.sourcetype,this.source=t.source,i(t)){var r=o(t);e.addSource(this.idSource,r)}},u.updateLayer=function(t){var e=this.map;if(e.getLayer(this.idLayer)&&e.removeLayer(this.idLayer),this.layerType=t.type,i(t)){e.addLayer({id:this.idLayer,source:this.idSource,"source-layer":t.sourcelayer||"",type:t.type},t.below);var r={visibility:"visible"};this.mapbox.setOptions(this.idLayer,"setLayoutProperty",r)}},u.updateStyle=function(t){var e=a(t);i(t)&&(this.mapbox.setOptions(this.idLayer,"setLayoutProperty",e.layout),this.mapbox.setOptions(this.idLayer,"setPaintProperty",e.paint))},u.dispose=function(){var t=this.map;t.removeLayer(this.idLayer),t.removeSource(this.idSource)},e.exports=function(t,e,r){var i=new n(t,e);return i.update(r),i}},{"../../lib":728,"./convert_text_opts":824}],827:[function(t,e,r){"use strict";var n=t("../../lib"),i=t("../../components/color").defaultLine,a=t("../font_attributes"),o=t("../../traces/scatter/attributes").textposition,s=t("../../plot_api/edit_types").overrideAll,l=a({});l.family.dflt="Open Sans Regular, Arial Unicode MS Regular",e.exports=s({_arrayAttrRegexps:[n.counterRegex("mapbox",".layers",!0)],domain:{x:{valType:"info_array",items:[{valType:"number",min:0,max:1},{valType:"number",min:0,max:1}],dflt:[0,1]},y:{valType:"info_array",items:[{valType:"number",min:0,max:1},{valType:"number",min:0,max:1}],dflt:[0,1]}},accesstoken:{valType:"string",noBlank:!0,strict:!0},style:{valType:"any",values:["basic","streets","outdoors","light","dark","satellite","satellite-streets"],dflt:"basic"},center:{lon:{valType:"number",dflt:0},lat:{valType:"number",dflt:0}},zoom:{valType:"number",dflt:1},bearing:{valType:"number",dflt:0},pitch:{valType:"number",dflt:0},layers:{_isLinkedToArray:"layer",sourcetype:{valType:"enumerated",values:["geojson","vector"],dflt:"geojson"},source:{valType:"any"},sourcelayer:{valType:"string",dflt:""},type:{valType:"enumerated",values:["circle","line","fill","symbol"],dflt:"circle"},below:{valType:"string",dflt:""},color:{valType:"color",dflt:i},opacity:{valType:"number",min:0,max:1,dflt:1},circle:{radius:{valType:"number",dflt:15}},line:{width:{valType:"number",dflt:2}},fill:{outlinecolor:{valType:"color",dflt:i}},symbol:{icon:{valType:"string",dflt:"marker"},iconsize:{valType:"number",dflt:10},text:{valType:"string",dflt:""},textfont:l,textposition:n.extendFlat({},o,{arrayOk:!1})}}},"plot","from-root")},{"../../components/color":604,"../../lib":728,"../../plot_api/edit_types":756,"../../traces/scatter/attributes":1031,"../font_attributes":796}],828:[function(t,e,r){"use strict";function n(t,e,r){r("accesstoken"),r("style"),r("center.lon"),r("center.lat"),r("zoom"),r("bearing"),r("pitch"),i(t,e),e._input=t}function i(t,e){function r(t,e){return a.coerce(n,i,s.layers,t,e)}for(var n,i,o=t.layers||[],l=e.layers=[],u=0;u<o.length;u++)if(n=o[u],i={},a.isPlainObject(n)){var c=r("sourcetype");r("source"),"vector"===c&&r("sourcelayer");var h=r("type");r("below"),r("color"),r("opacity"),"circle"===h&&r("circle.radius"),"line"===h&&r("line.width"),"fill"===h&&r("fill.outlinecolor"),"symbol"===h&&(r("symbol.icon"),r("symbol.iconsize"),r("symbol.text"),a.coerceFont(r,"symbol.textfont"),r("symbol.textposition")),i._index=u,l.push(i)}}var a=t("../../lib"),o=t("../subplot_defaults"),s=t("./layout_attributes");e.exports=function(t,e,r){o(t,e,r,{type:"mapbox",attributes:s,handleDefaults:n,partition:"y"})}},{"../../lib":728,"../subplot_defaults":838,"./layout_attributes":827}],829:[function(t,e,r){"use strict";function n(t){this.id=t.id,this.gd=t.gd,this.container=t.container,this.isStatic=t.staticPlot;var e=t.fullLayout;this.uid=e._uid+"-"+this.id,this.opts=e[this.id],this.div=null,this.xaxis=null,this.yaxis=null,this.createFramework(e),this.map=null,this.accessToken=null,this.styleObj=null,this.traceHash={},this.layerList=[]}function i(t){var e=d.style.values,r=d.style.dflt,n={};return u.isPlainObject(t)?(n.id=t.id,n.style=t):"string"==typeof t?(n.id=t,n.style=-1!==e.indexOf(t)?a(t):t):(n.id=r,n.style=a(r)),n}function a(t){return f.styleUrlPrefix+t+"-"+f.styleUrlSuffix}function o(t){return[t.lon,t.lat]}var s=t("mapbox-gl"),l=t("../../components/fx"),u=t("../../lib"),c=t("../../components/dragelement"),h=t("../cartesian/select"),f=t("./constants"),d=t("./layout_attributes"),p=t("./layers"),m=n.prototype;e.exports=function(t){return new n(t)},m.plot=function(t,e,r){var n=this,i=n.opts=e[this.id];n.map&&i.accesstoken!==n.accessToken&&(n.map.remove(),n.map=null,n.styleObj=null,n.traceHash=[],n.layerList={});var a;a=n.map?new Promise(function(r,i){n.updateMap(t,e,r,i)}):new Promise(function(r,i){n.createMap(t,e,r,i)}),r.push(a)},m.createMap=function(t,e,r,n){function a(){l.loneUnhover(e._toppaper)}var c=this,h=c.gd,d=c.opts,p=c.styleObj=i(d.style);c.accessToken=d.accesstoken;var m=c.map=new s.Map({container:c.div,style:p.style,center:o(d.center),zoom:d.zoom,bearing:d.bearing,pitch:d.pitch,interactive:!c.isStatic,preserveDrawingBuffer:c.isStatic,doubleClickZoom:!1,boxZoom:!1}),g=f.controlContainerClassName,v=c.div.getElementsByClassName(g)[0];c.div.removeChild(v),m._canvas.canvas.style.left="0px",m._canvas.canvas.style.top="0px",c.rejectOnError(n),m.once("load",function(){c.updateData(t),c.updateLayout(e),c.resolveOnRender(r)}),c.isStatic||(m.on("moveend",function(t){if(c.map){var e=c.getView();if(d._input.center=d.center=e.center,d._input.zoom=d.zoom=e.zoom,d._input.bearing=d.bearing=e.bearing,d._input.pitch=d.pitch=e.pitch,t.originalEvent){var r={};r[c.id]=u.extendFlat({},e),h.emit("plotly_relayout",r)}}}),m.on("mousemove",function(t){var e=c.div.getBoundingClientRect();t.clientX=t.point.x+e.left,t.clientY=t.point.y+e.top,t.target.getBoundingClientRect=function(){return e},c.xaxis.p2c=function(){return t.lngLat.lng},c.yaxis.p2c=function(){return t.lngLat.lat},l.hover(h,t,c.id)}),m.on("click",function(t){l.click(h,t.originalEvent)}),m.on("dragstart",a),m.on("zoomstart",a),m.on("dblclick",function(){var t=c.viewInitial;m.setCenter(o(t.center)),m.setZoom(t.zoom),m.setBearing(t.bearing),m.setPitch(t.pitch);var e=c.getView();d._input.center=d.center=e.center,d._input.zoom=d.zoom=e.zoom,d._input.bearing=d.bearing=e.bearing,d._input.pitch=d.pitch=e.pitch,h.emit("plotly_doubleclick",null)}))},m.updateMap=function(t,e,r,n){var a=this,o=a.map;a.rejectOnError(n);var s=i(a.opts.style);a.styleObj.id!==s.id?(a.styleObj=s,o.setStyle(s.style),o.style.once("load",function(){a.traceHash={},a.updateData(t),a.updateLayout(e),a.resolveOnRender(r)})):(a.updateData(t),a.updateLayout(e),a.resolveOnRender(r))},m.updateData=function(t){var e,r,n,i,a=this.traceHash;for(n=0;n<t.length;n++){var o=t[n];r=o[0].trace,e=a[r.uid],e?e.update(o):r._module&&(a[r.uid]=r._module.plot(this,o))}var s=Object.keys(a);t:for(n=0;n<s.length;n++){var l=s[n];for(i=0;i<t.length;i++)if(r=t[i][0].trace,l===r.uid)continue t;e=a[l],e.dispose(),delete a[l]}},m.updateLayout=function(t){var e=this.map,r=this.opts;e.setCenter(o(r.center)),e.setZoom(r.zoom),e.setBearing(r.bearing),e.setPitch(r.pitch),this.updateLayers(),this.updateFramework(t),this.updateFx(t),this.map.resize()},m.resolveOnRender=function(t){var e=this.map;e.on("render",function r(){e.loaded()&&(e.off("render",r),t())})},m.rejectOnError=function(t){function e(){t(new Error(f.mapOnErrorMsg))}var r=this.map;r.once("error",e),r.once("style.error",e),r.once("source.error",e),r.once("tile.error",e),r.once("layer.error",e)},m.createFramework=function(t){var e=this,r=e.div=document.createElement("div");r.id=e.uid,r.style.position="absolute",e.container.appendChild(r),e.xaxis={_id:"x",c2p:function(t){return e.project(t).x}},e.yaxis={_id:"y",c2p:function(t){return e.project(t).y}},e.updateFramework(t)},m.updateFx=function(t){function e(t){var e=r.map.unproject(t);return[e.lng,e.lat]}var r=this,n=r.map,i=r.gd;if(!r.isStatic){var a,o=t.dragmode;if(a="select"===o?function(t,n){(t.range={})[r.id]=[e([n.xmin,n.ymin]),e([n.xmax,n.ymax])]}:function(t,n,i){(t.lassoPoints={})[r.id]=i.filtered.map(e)},"select"===o||"lasso"===o){n.dragPan.disable();var s={element:r.div,gd:i,plotinfo:{xaxis:r.xaxis,yaxis:r.yaxis,fillRangeItems:a},xaxes:[r.xaxis],yaxes:[r.yaxis],subplot:r.id};s.prepFn=function(t,e,r){h(t,e,r,s,o)},s.doneFn=function(e,r){2===r&&t._zoomlayer.selectAll(".select-outline").remove()},c.init(s)}else n.dragPan.enable(),r.div.onmousedown=null}},m.updateFramework=function(t){var e=t[this.id].domain,r=t._size,n=this.div.style;n.width=r.w*(e.x[1]-e.x[0])+"px",n.height=r.h*(e.y[1]-e.y[0])+"px",n.left=r.l+e.x[0]*r.w+"px",n.top=r.t+(1-e.y[1])*r.h+"px",this.xaxis._offset=r.l+e.x[0]*r.w,this.xaxis._length=r.w*(e.x[1]-e.x[0]),this.yaxis._offset=r.t+(1-e.y[1])*r.h,this.yaxis._length=r.h*(e.y[1]-e.y[0])},m.updateLayers=function(){var t,e=this.opts,r=e.layers,n=this.layerList;if(r.length!==n.length){for(t=0;t<n.length;t++)n[t].dispose();for(n=this.layerList=[],t=0;t<r.length;t++)n.push(p(this,t,r[t]))}else for(t=0;t<r.length;t++)n[t].update(r[t])},m.destroy=function(){this.map&&(this.map.remove(),this.map=null,this.container.removeChild(this.div))},m.toImage=function(){return this.map.getCanvas().toDataURL()},m.initSource=function(t){var e={type:"geojson",data:{type:"Feature",geometry:{type:"Point",coordinates:[]}}};return this.map.addSource(t,e)},m.setSourceData=function(t,e){this.map.getSource(t).setData(e)},m.setOptions=function(t,e,r){for(var n=this.map,i=Object.keys(r),a=0;a<i.length;a++){var o=i[a];n[e](t,o,r[o])}},m.project=function(t){return this.map.project(new s.LngLat(t[0],t[1]))},m.getView=function(){var t=this.map,e=t.getCenter();return{center:{lon:e.lng,lat:e.lat},zoom:t.getZoom(),bearing:t.getBearing(),pitch:t.getPitch()}}},{"../../components/dragelement":625,"../../components/fx":645,"../../lib":728,"../cartesian/select":788,"./constants":823,"./layers":826,"./layout_attributes":827,"mapbox-gl":343}],830:[function(t,e,r){"use strict";e.exports={t:{valType:"number",dflt:0,editType:"arraydraw"},r:{valType:"number",dflt:0,editType:"arraydraw"},b:{valType:"number",dflt:0,editType:"arraydraw"},l:{valType:"number",dflt:0,editType:"arraydraw"},editType:"arraydraw"}},{}],831:[function(t,e,r){"use strict";function n(t,e){e.text("");var r=e.append("a").attr({"xlink:xlink:href":"#",class:"link--impt link--embedview","font-weight":"bold"}).text(t._context.linkText+" "+String.fromCharCode(187));if(t._context.sendData)r.on("click",function(){g.sendDataToCloud(t)});else{var n=window.location.pathname.split("/"),i=window.location.search;r.attr({"xlink:xlink:show":"new","xlink:xlink:href":"/"+n[2].split(".")[0]+"/"+n[1]+i})}}function i(t,e){var r,n,i=t.trace,a=i._arrayAttrs,o={};for(r=0;r<a.length;r++)n=a[r],o[n]=d.nestedProperty(i,n).get().slice();for(t.trace=e,r=0;r<a.length;r++)n=a[r],d.nestedProperty(t.trace,n).set(o[n])}function a(t,e,r,n){for(var i=t.transforms,a=[t],o=0;o<i.length;o++){var s=i[o],l=_[s.type];l&&l.transform&&(a=l.transform(a,{transform:s,fullTrace:t,fullData:e,layout:r,fullLayout:n,transformIndex:o}))}return a}function o(t){var e,r={left:0,right:0,bottom:0,top:0};if(t)for(e in t)t.hasOwnProperty(e)&&(r.left+=t[e].left||0,r.right+=t[e].right||0,r.bottom+=t[e].bottom||0,r.top+=t[e].top||0);return r}function s(t){for(var e=0;e<t.length;e++){t[e]._categories=t[e]._initialCategories.slice(),t[e]._categoriesMap={};for(var r=0;r<t[e]._categories.length;r++)t[e]._categoriesMap[t[e]._categories[r]]=r}}var l=t("d3"),u=t("fast-isnumeric"),c=t("../plotly"),h=t("../plot_api/plot_schema"),f=t("../registry"),d=t("../lib"),p=t("../components/color"),m=t("../constants/numerical").BADNUM,g=e.exports={},v=t("./animation_attributes"),y=t("./frame_attributes"),b=d.relinkPrivateKeys;d.extendFlat(g,f),g.attributes=t("./attributes"),g.attributes.type.values=g.allTypes,g.fontAttrs=t("./font_attributes"),g.layoutAttributes=t("./layout_attributes"),g.fontWeight="normal";var x=g.subplotsRegistry,_=g.transformsRegistry,w=t("../components/errorbars"),M=t("./command");g.executeAPICommand=M.executeAPICommand,g.computeAPICommandBindings=M.computeAPICommandBindings,g.manageCommandObserver=M.manageCommandObserver,g.hasSimpleAPICommandBindings=M.hasSimpleAPICommandBindings,g.findSubplotIds=function(t,e){var r=[];if(!g.subplotsRegistry[e])return r;for(var n=g.subplotsRegistry[e].attr,i=0;i<t.length;i++){var a=t[i];g.traceIs(a,e)&&-1===r.indexOf(a[n])&&r.push(a[n])}return r},g.getSubplotIds=function(t,e){var r=g.subplotsRegistry[e];if(!r)return[];if(!("cartesian"!==e||t._has&&t._has("cartesian")))return[];if(!("gl2d"!==e||t._has&&t._has("gl2d")))return[];if("cartesian"===e||"gl2d"===e)return Object.keys(t._plots||{});for(var n=r.attrRegex,i=Object.keys(t),a=[],o=0;o<i.length;o++){var s=i[o];n.test(s)&&a.push(s)}var l=r.idRoot.length;return a.sort(function(t,e){return+(t.substr(l)||1)-+(e.substr(l)||1)}),a},g.getSubplotData=function(t,e,r){if(!g.subplotsRegistry[e])return[];for(var n,i=g.subplotsRegistry[e].attr,a=[],o=0;o<t.length;o++)if(n=t[o],"gl2d"===e&&g.traceIs(n,"gl2d")){var s=c.Axes.subplotMatch,l="x"+r.match(s)[1],u="y"+r.match(s)[2];n[i[0]]===l&&n[i[1]]===u&&a.push(n)}else n[i]===r&&a.push(n);return a},g.getSubplotCalcData=function(t,e,r){if(!g.subplotsRegistry[e])return[];for(var n=g.subplotsRegistry[e].attr,i=[],a=0;a<t.length;a++){var o=t[a];o[0].trace[n]===r&&i.push(o)}return i},g.redrawText=function(t){if(!(t.data&&t.data[0]&&t.data[0].r))return new Promise(function(e){setTimeout(function(){f.getComponentMethod("annotations","draw")(t),f.getComponentMethod("legend","draw")(t),(t.calcdata||[]).forEach(function(t){t[0]&&t[0].t&&t[0].t.cb&&t[0].t.cb()}),e(g.previousPromises(t))},300)})},g.resize=function(t){return new Promise(function(e,r){t&&!function(t){var e=window.getComputedStyle(t).display;return!e||"none"===e}(t)||r(new Error("Resize must be passed a displayed plot div element.")),t._redrawTimer&&clearTimeout(t._redrawTimer),t._redrawTimer=setTimeout(function(){if(t.layout.width&&t.layout.height)return void e(t);delete t.layout.width,delete t.layout.height;var r=t.changed;t.autoplay=!0,c.relayout(t,{autosize:!0}).then(function(){t.changed=r,e(t)})},100)})},g.previousPromises=function(t){if((t._promises||[]).length)return Promise.all(t._promises).then(function(){t._promises=[]})},g.addLinks=function(t){if(t._context.showLink||t._context.showSources){var e=t._fullLayout,r=e._paper.selectAll("text.js-plot-link-container").data([0]);r.enter().append("text").classed("js-plot-link-container",!0).style({"font-family":'"Open Sans", Arial, sans-serif',"font-size":"12px",fill:p.defaultLine,"pointer-events":"all"}).each(function(){var t=l.select(this);t.append("tspan").classed("js-link-to-tool",!0),t.append("tspan").classed("js-link-spacer",!0),t.append("tspan").classed("js-sourcelinks",!0)});var i=r.node(),a={y:e._paper.attr("height")-9};document.body.contains(i)&&i.getComputedTextLength()>=e.width-20?(a["text-anchor"]="start",a.x=5):(a["text-anchor"]="end",a.x=e._paper.attr("width")-7),r.attr(a);var o=r.select(".js-link-to-tool"),s=r.select(".js-link-spacer"),u=r.select(".js-sourcelinks");t._context.showSources&&t._context.showSources(t),t._context.showLink&&n(t,o),s.text(o.text()&&u.text()?" - ":"")}},g.sendDataToCloud=function(t){t.emit("plotly_beforeexport");var e=window.PLOTLYENV&&window.PLOTLYENV.BASE_URL||"https://plot.ly",r=l.select(t).append("div").attr("id","hiddenform").style("display","none"),n=r.append("form").attr({action:e+"/external",method:"post",target:"_blank"});return n.append("input").attr({type:"text",name:"data"}).node().value=g.graphJson(t,!1,"keepdata"),n.node().submit(),r.remove(),t.emit("plotly_afterexport"),!1},g.supplyDefaults=function(t){var e,r=t._fullLayout||{},n=t._fullLayout={},a=t.layout||{},o=t._fullData||[],s=t._fullData=[],l=t.data||[];if(t._transitionData||g.createTransitionData(t),r._initialAutoSizeIsDone){var u=r.width,h=r.height;g.supplyLayoutGlobalDefaults(a,n),a.width||(n.width=u),a.height||(n.height=h)}else{g.supplyLayoutGlobalDefaults(a,n);var f=!a.width||!a.height,d=n.autosize,p=t._context&&t._context.autosizable;f&&(d||p)?g.plotAutoSize(t,a,n):f&&g.sanitizeMargins(t),!d&&f&&(a.width=n.width,a.height=n.height)}n._initialAutoSizeIsDone=!0,n._dataLength=l.length,n._globalTransforms=(t._context||{}).globalTransforms,g.supplyDataDefaults(l,s,a,n),n._has=g._hasPlotType.bind(n);var m=n._modules;for(e=0;e<m.length;e++){var v=m[e];v.cleanData&&v.cleanData(s)}if(o.length===l.length)for(e=0;e<s.length;e++)b(s[e],o[e]);g.supplyLayoutModuleDefaults(a,n,s,t._transitionData),n._hasCartesian=n._has("cartesian"),n._hasGeo=n._has("geo"),n._hasGL3D=n._has("gl3d"),n._hasGL2D=n._has("gl2d"),n._hasTernary=n._has("ternary"),n._hasPie=n._has("pie"),g.cleanPlot(s,n,o,r),g.linkSubplots(s,n,o,r),b(n,r),g.doAutoMargin(t);var y=c.Axes.list(t);for(e=0;e<y.length;e++){y[e].setScale()}if((t.calcdata||[]).length===s.length)for(e=0;e<s.length;e++){var x=s[e],_=t.calcdata[e][0];_&&_.trace&&(_.trace._hasCalcTransform?i(_,x):_.trace=x)}},g.createTransitionData=function(t){t._transitionData||(t._transitionData={}),t._transitionData._frames||(t._transitionData._frames=[]),t._transitionData._frameHash||(t._transitionData._frameHash={}),t._transitionData._counter||(t._transitionData._counter=0),t._transitionData._interruptCallbacks||(t._transitionData._interruptCallbacks=[])},g._hasPlotType=function(t){for(var e=this._basePlotModules||[],r=0;r<e.length;r++){if(e[r].name===t)return!0}return!1},g.cleanPlot=function(t,e,r,n){var i,a,o=n._basePlotModules||[];for(i=0;i<o.length;i++){var s=o[i];s.clean&&s.clean(t,e,r,n)}var l=!!n._paper,u=!!n._infolayer;t:for(i=0;i<r.length;i++){var c=r[i],h=c.uid;for(a=0;a<t.length;a++){var f=t[a];if(h===f.uid)continue t}var d=".hm"+h+",.contour"+h+",.carpet"+h+",#clip"+h+",.trace"+h;l&&n._paper.selectAll(d).remove(),u&&(n._infolayer.selectAll(".cb"+h).remove(),n._infolayer.selectAll("g.rangeslider-container").selectAll(d).remove())}n._zoomlayer&&n._zoomlayer.selectAll(".select-outline").remove()},g.linkSubplots=function(t,e,r,n){var i,a=n._plots||{},o=e._plots={},s={_fullData:t,_fullLayout:e},l=c.Axes.getSubplots(s);for(i=0;i<l.length;i++){var u,h=l[i],f=a[h],d=c.Axes.getFromId(s,h,"x"),p=c.Axes.getFromId(s,h,"y");f?(u=o[h]=f,u._scene2d&&u._scene2d.updateRefs(e),u.xaxis.layer!==d.layer&&(u.xlines.attr("d",null),u.xaxislayer.selectAll("*").remove()),u.yaxis.layer!==p.layer&&(u.ylines.attr("d",null),u.yaxislayer.selectAll("*").remove())):(u=o[h]={},u.id=h),u.xaxis=d,u.yaxis=p,
u._hasClipOnAxisFalse=!1;for(var m=0;m<t.length;m++){var g=t[m];if(g.xaxis===u.xaxis._id&&g.yaxis===u.yaxis._id&&!1===g.cliponaxis){u._hasClipOnAxisFalse=!0;break}}}var v=c.Axes.list(s,null,!0);for(i=0;i<v.length;i++){var y=v[i],b=null;y.overlaying&&(b=c.Axes.getFromId(s,y.overlaying))&&b.overlaying&&(y.overlaying=!1,b=null),y._mainAxis=b||y,b&&(y.domain=b.domain.slice()),y._anchorAxis="free"===y.anchor?null:c.Axes.getFromId(s,y.anchor)}},g.clearExpandedTraceDefaultColors=function(t){function e(t,e,i,a){n[a]=e,n.length=a+1,"color"===t.valType&&void 0===t.dflt&&r.push(n.join("."))}var r,n,i;for(n=[],r=t._module._colorAttrs,r||(t._module._colorAttrs=r=[],h.crawl(t._module.attributes,e)),i=0;i<r.length;i++){d.nestedProperty(t,"_input."+r[i]).get()||d.nestedProperty(t,r[i]).set(null)}},g.supplyDataDefaults=function(t,e,r,n){function i(t){e.push(t);var r=t._module;r&&(d.pushUnique(u,r),d.pushUnique(c,t._module.basePlotModule),h++)}var o,s,l,u=n._modules=[],c=n._basePlotModules=[],h=0;n._transformModules=[];var p={},m=[];for(o=0;o<t.length;o++){if(l=t[o],s=g.supplyTraceDefaults(l,h,n,o),s.index=o,s._input=l,s._expandedIndex=h,s.transforms&&s.transforms.length)for(var v=a(s,e,r,n),y=0;y<v.length;y++){var x=v[y],_=g.supplyTraceDefaults(x,h,n,o);b(_,x),x.uid=_.uid=s.uid+y,_.index=o,_._input=l,_._fullInput=s,_._expandedIndex=h,_._expandedInput=x,i(_)}else s._fullInput=s,s._expandedInput=s,i(s);f.traceIs(s,"carpetAxis")&&(p[s.carpet]=s),f.traceIs(s,"carpetDependent")&&m.push(o)}for(o=0;o<m.length;o++)if(s=e[m[o]],s.visible){var w=p[s.carpet];s._carpet=w,w&&w.visible?(s.xaxis=w.xaxis,s.yaxis=w.yaxis):s.visible=!1}},g.supplyAnimationDefaults=function(t){function e(e,r){return d.coerce(t||{},n,v,e,r)}t=t||{};var r,n={};if(e("mode"),e("direction"),e("fromcurrent"),Array.isArray(t.frame))for(n.frame=[],r=0;r<t.frame.length;r++)n.frame[r]=g.supplyAnimationFrameDefaults(t.frame[r]||{});else n.frame=g.supplyAnimationFrameDefaults(t.frame||{});if(Array.isArray(t.transition))for(n.transition=[],r=0;r<t.transition.length;r++)n.transition[r]=g.supplyAnimationTransitionDefaults(t.transition[r]||{});else n.transition=g.supplyAnimationTransitionDefaults(t.transition||{});return n},g.supplyAnimationFrameDefaults=function(t){function e(e,n){return d.coerce(t||{},r,v.frame,e,n)}var r={};return e("duration"),e("redraw"),r},g.supplyAnimationTransitionDefaults=function(t){function e(e,n){return d.coerce(t||{},r,v.transition,e,n)}var r={};return e("duration"),e("easing"),r},g.supplyFrameDefaults=function(t){function e(e,n){return d.coerce(t,r,y,e,n)}var r={};return e("group"),e("name"),e("traces"),e("baseframe"),e("data"),e("layout"),r},g.supplyTraceDefaults=function(t,e,r,n){function i(e,r){return d.coerce(t,o,g.attributes,e,r)}function a(e,r){if(g.traceIs(o,e))return d.coerce(t,o,g.subplotsRegistry[e].attributes,r)}var o={},s=p.defaults[e%p.defaults.length],l=i("visible");i("type"),i("uid"),i("name","trace "+n);for(var u=Object.keys(x),c=0;c<u.length;c++){var h=u[c];if(-1===["cartesian","gl2d"].indexOf(h)){var m=x[h].attr;m&&a(h,m)}}if(l){i("customdata"),i("ids");var v=g.getModule(o);o._module=v,g.traceIs(o,"showLegend")&&(i("showlegend"),i("legendgroup")),f.getComponentMethod("fx","supplyDefaults")(t,o,s,r),v&&(v.supplyDefaults(t,o,s,r),d.coerceHoverinfo(t,o,r)),g.traceIs(o,"noOpacity")||i("opacity"),a("cartesian","xaxis"),a("cartesian","yaxis"),a("gl2d","xaxis"),a("gl2d","yaxis"),g.traceIs(o,"notLegendIsolatable")&&(o.visible=!!o.visible),g.supplyTransformDefaults(t,o,r)}return o},g.supplyTransformDefaults=function(t,e,r){var n=r._globalTransforms||[],i=r._transformModules||[];if(Array.isArray(t.transforms)||0!==n.length)for(var a=t.transforms||[],o=n.concat(a),s=e.transforms=[],l=0;l<o.length;l++){var u,c=o[l],h=c.type,f=_[h],p=!(c._module&&c._module===f),m=f&&"function"==typeof f.transform;f||d.warn("Unrecognized transform type "+h+"."),f&&f.supplyDefaults&&(p||m)?(u=f.supplyDefaults(c,e,r,t),u.type=h,u._module=f,d.pushUnique(i,f)):u=d.extendFlat({},c),s.push(u)}},g.supplyLayoutGlobalDefaults=function(t,e){function r(r,n){return d.coerce(t,e,g.layoutAttributes,r,n)}var n=d.coerceFont(r,"font");r("title"),d.coerceFont(r,"titlefont",{family:n.family,size:Math.round(1.4*n.size),color:n.color}),r("autosize",!(t.width&&t.height)),r("width"),r("height"),r("margin.l"),r("margin.r"),r("margin.t"),r("margin.b"),r("margin.pad"),r("margin.autoexpand"),t.width&&t.height&&g.sanitizeMargins(e),r("paper_bgcolor"),r("separators"),r("hidesources"),r("smith"),f.getComponentMethod("calendars","handleDefaults")(t,e,"calendar"),f.getComponentMethod("fx","supplyLayoutGlobalDefaults")(t,e,r)},g.plotAutoSize=function(t,e,r){var n,i,a=t._context||{},s=a.frameMargins,l=d.isPlotDiv(t);if(l&&t.emit("plotly_autosize"),a.fillFrame)n=window.innerWidth,i=window.innerHeight,document.body.style.overflow="hidden";else if(u(s)&&s>0){var c=o(t._boundingBoxMargins),h=c.left+c.right,f=c.bottom+c.top,p=1-2*s,m=r._container&&r._container.node?r._container.node().getBoundingClientRect():{width:r.width,height:r.height};n=Math.round(p*(m.width-h)),i=Math.round(p*(m.height-f))}else{var v=l?window.getComputedStyle(t):{};n=parseFloat(v.width)||r.width,i=parseFloat(v.height)||r.height}var y=g.layoutAttributes.width.min,b=g.layoutAttributes.height.min;n<y&&(n=y),i<b&&(i=b);var x=!e.width&&Math.abs(r.width-n)>1,_=!e.height&&Math.abs(r.height-i)>1;(_||x)&&(x&&(r.width=n),_&&(r.height=i)),t._initialAutoSize||(t._initialAutoSize={width:n,height:i}),g.sanitizeMargins(r)},g.supplyLayoutModuleDefaults=function(t,e,r,n){var i,a;c.Axes.supplyLayoutDefaults(t,e,r);var o=e._basePlotModules;for(i=0;i<o.length;i++)a=o[i],"cartesian"!==a.name&&a.supplyLayoutDefaults&&a.supplyLayoutDefaults(t,e,r);var s=e._modules;for(i=0;i<s.length;i++)a=s[i],a.supplyLayoutDefaults&&a.supplyLayoutDefaults(t,e,r);var l=e._transformModules;for(i=0;i<l.length;i++)a=l[i],a.supplyLayoutDefaults&&a.supplyLayoutDefaults(t,e,r,n);var u=Object.keys(f.componentsRegistry);for(i=0;i<u.length;i++)a=f.componentsRegistry[u[i]],a.supplyLayoutDefaults&&a.supplyLayoutDefaults(t,e,r)},g.purge=function(t){var e=t._fullLayout||{};void 0!==e._glcontainer&&e._glcontainer.remove(),void 0!==e._geocontainer&&e._geocontainer.remove(),e._modeBar&&e._modeBar.destroy(),t._transitionData&&(t._transitionData._interruptCallbacks&&(t._transitionData._interruptCallbacks.length=0),t._transitionData._animationRaf&&window.cancelAnimationFrame(t._transitionData._animationRaf)),delete t.data,delete t.layout,delete t._fullData,delete t._fullLayout,delete t.calcdata,delete t.framework,delete t.empty,delete t.fid,delete t.undoqueue,delete t.undonum,delete t.autoplay,delete t.changed,delete t._promises,delete t._redrawTimer,delete t.firstscatter,delete t._hmlumcount,delete t._hmpixcount,delete t.numboxes,delete t._transitionData,delete t._transitioning,delete t._initialAutoSize,delete t._transitioningWithDuration,delete t._dragging,delete t._dragged,delete t._hoverdata,delete t._snapshotInProgress,delete t._editing,delete t._replotPending,delete t._mouseDownTime,delete t._legendMouseDownTime,t.removeAllListeners&&t.removeAllListeners()},g.style=function(t){for(var e=t._fullLayout._modules,r=0;r<e.length;r++){var n=e[r];n.style&&n.style(t)}},g.sanitizeMargins=function(t){if(t&&t.margin){var e,r=t.width,n=t.height,i=t.margin,a=r-(i.l+i.r),o=n-(i.t+i.b);a<0&&(e=(r-1)/(i.l+i.r),i.l=Math.floor(e*i.l),i.r=Math.floor(e*i.r)),o<0&&(e=(n-1)/(i.t+i.b),i.t=Math.floor(e*i.t),i.b=Math.floor(e*i.b))}},g.autoMargin=function(t,e,r){var n=t._fullLayout;if(n._pushmargin||(n._pushmargin={}),!1!==n.margin.autoexpand){if(r){var i=void 0===r.pad?12:r.pad;r.l+r.r>.5*n.width&&(r.l=r.r=0),r.b+r.t>.5*n.height&&(r.b=r.t=0),n._pushmargin[e]={l:{val:r.x,size:r.l+i},r:{val:r.x,size:r.r+i},b:{val:r.y,size:r.b+i},t:{val:r.y,size:r.t+i}}}else delete n._pushmargin[e];n._replotting||g.doAutoMargin(t)}},g.doAutoMargin=function(t){var e=t._fullLayout;e._size||(e._size={}),e._pushmargin||(e._pushmargin={});var r=e._size,n=JSON.stringify(r),i=Math.max(e.margin.l||0,0),a=Math.max(e.margin.r||0,0),o=Math.max(e.margin.t||0,0),s=Math.max(e.margin.b||0,0),l=e._pushmargin;if(!1!==e.margin.autoexpand){l.base={l:{val:0,size:i},r:{val:1,size:a},t:{val:1,size:o},b:{val:0,size:s}};for(var h=Object.keys(l),f=0;f<h.length;f++)for(var d=h[f],p=l[d].l||{},m=l[d].b||{},g=p.val,v=p.size,y=m.val,b=m.size,x=0;x<h.length;x++){var _=h[x];if(u(v)&&l[_].r){var w=l[_].r.val,M=l[_].r.size;if(w>g){var k=(v*w+(M-e.width)*g)/(w-g),A=(M*(1-g)+(v-e.width)*(1-w))/(w-g);k>=0&&A>=0&&k+A>i+a&&(i=k,a=A)}}if(u(b)&&l[_].t){var T=l[_].t.val,S=l[_].t.size;if(T>y){var E=(b*T+(S-e.height)*y)/(T-y),L=(S*(1-y)+(b-e.height)*(1-T))/(T-y);E>=0&&L>=0&&E+L>s+o&&(s=E,o=L)}}}}if(r.l=Math.round(i),r.r=Math.round(a),r.t=Math.round(o),r.b=Math.round(s),r.p=Math.round(e.margin.pad),r.w=Math.round(e.width)-r.l-r.r,r.h=Math.round(e.height)-r.t-r.b,!e._replotting&&"{}"!==n&&n!==JSON.stringify(e._size))return c.plot(t)},g.graphJson=function(t,e,r,n,i){function a(t){if("function"==typeof t)return null;if(d.isPlainObject(t)){var e,n,i={};for(e in t)if("function"!=typeof t[e]&&-1===["_","["].indexOf(e.charAt(0))){if("keepdata"===r){if("src"===e.substr(e.length-3))continue}else if("keepstream"===r){if("string"==typeof(n=t[e+"src"])&&n.indexOf(":")>0&&!d.isPlainObject(t.stream))continue}else if("keepall"!==r&&"string"==typeof(n=t[e+"src"])&&n.indexOf(":")>0)continue;i[e]=a(t[e])}return i}return Array.isArray(t)?t.map(a):d.isJSDate(t)?d.ms2DateTimeLocal(+t):t}(i&&e&&!t._fullData||i&&!e&&!t._fullLayout)&&g.supplyDefaults(t);var o=i?t._fullData:t.data,s=i?t._fullLayout:t.layout,l=(t._transitionData||{})._frames,u={data:(o||[]).map(function(t){var r=a(t);return e&&delete r.fit,r})};return e||(u.layout=a(s)),t.framework&&t.framework.isPolar&&(u=t.framework.getConfig()),l&&(u.frames=a(l)),"object"===n?u:JSON.stringify(u)},g.modifyFrames=function(t,e){var r,n,i,a=t._transitionData._frames,o=t._transitionData._frameHash;for(r=0;r<e.length;r++)switch(n=e[r],n.type){case"replace":i=n.value;var s=(a[n.index]||{}).name,l=i.name;a[n.index]=o[l]=i,l!==s&&(delete o[s],o[l]=i);break;case"insert":i=n.value,o[i.name]=i,a.splice(n.index,0,i);break;case"delete":i=a[n.index],delete o[i.name],a.splice(n.index,1)}return Promise.resolve()},g.computeFrame=function(t,e){var r,n,i,a,o=t._transitionData._frameHash;if(!e)throw new Error("computeFrame must be given a string frame name");var s=o[e.toString()];if(!s)return!1;for(var l=[s],u=[s.name];s.baseframe&&(s=o[s.baseframe.toString()])&&-1===u.indexOf(s.name);)l.push(s),u.push(s.name);for(var c={};s=l.pop();)if(s.layout&&(c.layout=g.extendLayout(c.layout,s.layout)),s.data){if(c.data||(c.data=[]),!(n=s.traces))for(n=[],r=0;r<s.data.length;r++)n[r]=r;for(c.traces||(c.traces=[]),r=0;r<s.data.length;r++)void 0!==(i=n[r])&&null!==i&&(a=c.traces.indexOf(i),-1===a&&(a=c.data.length,c.traces[a]=i),c.data[a]=g.extendTrace(c.data[a],s.data[r]))}return c},g.recomputeFrameHash=function(t){for(var e=t._transitionData._frameHash={},r=t._transitionData._frames,n=0;n<r.length;n++){var i=r[n];i&&i.name&&(e[i.name]=i)}},g.extendObjectWithContainers=function(t,e,r){var n,i,a,o,s,l,u,c,h=d.extendDeepNoArrays({},e||{}),f=d.expandObjectPaths(h),p={};if(r&&r.length)for(a=0;a<r.length;a++)n=d.nestedProperty(f,r[a]),i=n.get(),void 0===i?d.nestedProperty(p,r[a]).set(null):(n.set(null),d.nestedProperty(p,r[a]).set(i));if(t=d.extendDeepNoArrays(t||{},f),r&&r.length)for(a=0;a<r.length;a++)if(s=d.nestedProperty(p,r[a]),u=s.get()){for(l=d.nestedProperty(t,r[a]),c=l.get(),Array.isArray(c)||(c=[],l.set(c)),o=0;o<u.length;o++){var m=u[o];c[o]=null===m?null:g.extendObjectWithContainers(c[o],m)}l.set(c)}return t},g.dataArrayContainers=["transforms"],g.layoutArrayContainers=f.layoutArrayContainers,g.extendTrace=function(t,e){return g.extendObjectWithContainers(t,e,g.dataArrayContainers)},g.extendLayout=function(t,e){return g.extendObjectWithContainers(t,e,g.layoutArrayContainers)},g.transition=function(t,e,r,n,i,a){function o(){var n;for(n=0;n<y.length;n++){var i=y[n],a=t._fullData[i],o=a._module;o&&(o.animatable&&b.push(i),t.data[y[n]]=g.extendTrace(t.data[y[n]],e[n]))}var s=d.expandObjectPaths(d.extendDeepNoArrays({},r)),l=/^[xy]axis[0-9]*$/;for(var u in s)l.test(u)&&delete s[u].range;return g.extendLayout(t.layout,s),delete t.calcdata,g.supplyDefaults(t),g.doCalcdata(t),w.calc(t),Promise.resolve()}function s(t){var e=Promise.resolve();if(!t)return e;for(;t.length;)e=e.then(t.shift());return e}function l(t){if(t)for(;t.length;)t.shift()}function u(){return t.emit("plotly_transitioning",[]),new Promise(function(e){function n(){return l++,function(){u++,x||u!==l||h(e)}}t._transitioning=!0,a.duration>0&&(t._transitioningWithDuration=!0),t._transitionData._interruptCallbacks.push(function(){x=!0}),i.redraw&&t._transitionData._interruptCallbacks.push(function(){return c.redraw(t)}),t._transitionData._interruptCallbacks.push(function(){t.emit("plotly_transitioninterrupted",[])});var o,s,l=0,u=0,f=t._fullLayout._basePlotModules,p=!1;if(r)for(s=0;s<f.length;s++)if(f[s].transitionAxes){var m=d.expandObjectPaths(r);p=f[s].transitionAxes(t,m,a,n)||p}for(p?(o=d.extendFlat({},a),o.duration=0):o=a,s=0;s<f.length;s++)f[s].plot(t,b,o,n);setTimeout(n())})}function h(e){if(t._transitionData)return l(t._transitionData._interruptCallbacks),Promise.resolve().then(function(){if(i.redraw)return c.redraw(t)}).then(function(){t._transitioning=!1,t._transitioningWithDuration=!1,t.emit("plotly_transitioned",[])}).then(e)}function f(){if(t._transitionData)return t._transitioning=!1,s(t._transitionData._interruptCallbacks)}var p,m,v=Array.isArray(e)?e.length:0,y=n.slice(0,v),b=[],x=!1;for(p=0;p<y.length;p++){m=y[p];var _=t._fullData[m],M=_._module;if(M&&!M.animatable){var k={};for(var A in e[p])k[A]=[e[p][A]]}}var T=[g.previousPromises,f,o,g.rehover,u],S=d.syncOrAsync(T,t);return S&&S.then||(S=Promise.resolve()),S.then(function(){return t})},g.doCalcdata=function(t,e){var r,n,i,a,o=c.Axes.list(t),l=t._fullData,u=t._fullLayout,d=new Array(l.length),p=(t.calcdata||[]).slice(0);for(t.calcdata=d,t.firstscatter=!0,t.numboxes=0,t._hmpixcount=0,t._hmlumcount=0,u._piecolormap={},u._piedefaultcolorcount=0,i=0;i<l.length;i++)Array.isArray(e)&&-1===e.indexOf(i)&&(d[i]=p[i]);for(i=0;i<l.length;i++)r=l[i],r._arrayAttrs=h.findArrayAttributes(r);s(o);var g=!1;for(i=0;i<l.length;i++)if(r=l[i],!0===r.visible&&r.transforms)for(n=r._module,n&&n.calc&&n.calc(t,r),a=0;a<r.transforms.length;a++){var v=r.transforms[a];n=_[v.type],n&&n.calcTransform&&(r._hasCalcTransform=!0,g=!0,n.calcTransform(t,r,v))}if(g){for(i=0;i<o.length;i++)o[i]._min=[],o[i]._max=[],o[i]._categories=[],o[i]._categoriesMap={};s(o)}for(i=0;i<l.length;i++){var y=[];r=l[i],!0===r.visible&&(n=r._module)&&n.calc&&(y=n.calc(t,r)),Array.isArray(y)&&y[0]||(y=[{x:m,y:m}]),y[0].t||(y[0].t={}),y[0].trace=r,d[i]=y}f.getComponentMethod("fx","calc")(t)},g.rehover=function(t){t._fullLayout._rehover&&t._fullLayout._rehover()},g.generalUpdatePerTraceModule=function(t,e,r){var n,i=t.traceHash,a={};for(n=0;n<e.length;n++){var o=e[n],s=o[0].trace;s.visible&&(a[s.type]=a[s.type]||[],a[s.type].push(o))}var l=Object.keys(i),u=Object.keys(a);for(n=0;n<l.length;n++){var c=l[n];if(-1===u.indexOf(c)){var h=i[c][0];h[0].trace.visible=!1,a[c]=[h]}}for(u=Object.keys(a),n=0;n<u.length;n++){var f=a[u[n]];f[0][0].trace._module.plot(t,function(t){for(var e=[],r=0;r<t.length;r++){var n=t[r];!0===n[0].trace.visible&&e.push(n)}return e}(f),r)}t.traceHash=a}},{"../components/color":604,"../components/errorbars":634,"../constants/numerical":707,"../lib":728,"../plot_api/plot_schema":761,"../plotly":767,"../registry":846,"./animation_attributes":768,"./attributes":770,"./command":795,"./font_attributes":796,"./frame_attributes":797,"./layout_attributes":822,d3:122,"fast-isnumeric":131}],832:[function(t,e,r){"use strict";var n=t("../../traces/scatter/attributes"),i=n.marker;e.exports={r:n.r,t:n.t,marker:{color:i.color,size:i.size,symbol:i.symbol,opacity:i.opacity,editType:"calc"}}},{"../../traces/scatter/attributes":1031}],833:[function(t,e,r){"use strict";function n(t,e){return a({},e,{showline:{valType:"boolean"},showticklabels:{valType:"boolean"},tickorientation:{valType:"enumerated",values:["horizontal","vertical"]},ticklen:{valType:"number",min:0},tickcolor:{valType:"color"},ticksuffix:{valType:"string"},endpadding:{valType:"number"},visible:{valType:"boolean"}})}var i=t("../cartesian/layout_attributes"),a=t("../../lib/extend").extendFlat,o=t("../../plot_api/edit_types").overrideAll,s=a({},i.domain,{});e.exports=o({radialaxis:n("radial",{range:{valType:"info_array",items:[{valType:"number"},{valType:"number"}]},domain:s,orientation:{valType:"number"}}),angularaxis:n("angular",{range:{valType:"info_array",items:[{valType:"number",dflt:0},{valType:"number",dflt:360}]},domain:s}),layout:{direction:{valType:"enumerated",values:["clockwise","counterclockwise"]},orientation:{valType:"angle"}}},"plot","nested")},{"../../lib/extend":717,"../../plot_api/edit_types":756,"../cartesian/layout_attributes":783}],834:[function(t,e,r){"use strict";(e.exports=t("./micropolar")).manager=t("./micropolar_manager")},{"./micropolar":835,"./micropolar_manager":836}],835:[function(t,e,r){var n=t("d3"),i=t("../../lib"),a=i.extendDeepAll,o=t("../../constants/alignment").MID_SHIFT,s=e.exports={version:"0.2.2"};s.Axis=function(){function t(t){r=t||r;var c=u.data,f=u.layout;return("string"==typeof r||r.nodeName)&&(r=n.select(r)),r.datum(c).each(function(t,r){function u(t,e){return l(t)%360+f.orientation}var c=t.slice();h={data:s.util.cloneJson(c),layout:s.util.cloneJson(f)};var d=0;c.forEach(function(t,e){t.color||(t.color=f.defaultColorRange[d],d=(d+1)%f.defaultColorRange.length),t.strokeColor||(t.strokeColor="LinePlot"===t.geometry?t.color:n.rgb(t.color).darker().toString()),h.data[e].color=t.color,h.data[e].strokeColor=t.strokeColor,h.data[e].strokeDash=t.strokeDash,h.data[e].strokeSize=t.strokeSize});var p=c.filter(function(t,e){var r=t.visible;return void 0===r||!0===r}),m=!1,g=p.map(function(t,e){return m=m||void 0!==t.groupId,t});if(m){var v=n.nest().key(function(t,e){return void 0!==t.groupId?t.groupId:"unstacked"}).entries(g),y=[],b=v.map(function(t,e){if("unstacked"===t.key)return t.values;var r=t.values[0].r.map(function(t,e){return 0});return t.values.forEach(function(t,e,n){t.yStack=[r],y.push(r),r=s.util.sumArrays(t.r,r)}),t.values});p=n.merge(b)}p.forEach(function(t,e){t.t=Array.isArray(t.t[0])?t.t:[t.t],t.r=Array.isArray(t.r[0])?t.r:[t.r]});var x=Math.min(f.width-f.margin.left-f.margin.right,f.height-f.margin.top-f.margin.bottom)/2;x=Math.max(10,x);var _,w=[f.margin.left+x,f.margin.top+x];if(m){_=[0,n.max(s.util.sumArrays(s.util.arrayLast(p).r[0],s.util.arrayLast(y)))]}else _=n.extent(s.util.flattenArray(p.map(function(t,e){return t.r})));f.radialAxis.domain!=s.DATAEXTENT&&(_[0]=0),i=n.scale.linear().domain(f.radialAxis.domain!=s.DATAEXTENT&&f.radialAxis.domain?f.radialAxis.domain:_).range([0,x]),h.layout.radialAxis.domain=i.domain();var M,k=s.util.flattenArray(p.map(function(t,e){return t.t})),A="string"==typeof k[0];A&&(k=s.util.deduplicate(k),M=k.slice(),k=n.range(k.length),p=p.map(function(t,e){var r=t;return t.t=[k],m&&(r.yStack=t.yStack),r}));var T=p.filter(function(t,e){return"LinePlot"===t.geometry||"DotPlot"===t.geometry}).length===p.length,S=null===f.needsEndSpacing?A||!T:f.needsEndSpacing,E=f.angularAxis.domain&&f.angularAxis.domain!=s.DATAEXTENT&&!A&&f.angularAxis.domain[0]>=0,L=E?f.angularAxis.domain:n.extent(k),C=Math.abs(k[1]-k[0]);T&&!A&&(C=0);var I=L.slice();S&&A&&(I[1]+=C);var z=f.angularAxis.ticksCount||4;z>8&&(z=z/(z/8)+z%8),f.angularAxis.ticksStep&&(z=(I[1]-I[0])/z);var D=f.angularAxis.ticksStep||(I[1]-I[0])/(z*(f.minorTicks+1));M&&(D=Math.max(Math.round(D),1)),I[2]||(I[2]=D);var P=n.range.apply(this,I);if(P=P.map(function(t,e){return parseFloat(t.toPrecision(12))}),l=n.scale.linear().domain(I.slice(0,2)).range("clockwise"===f.direction?[0,360]:[360,0]),h.layout.angularAxis.domain=l.domain(),h.layout.angularAxis.endPadding=S?C:0,void 0===(e=n.select(this).select("svg.chart-root"))||e.empty()){var O=(new DOMParser).parseFromString("<svg xmlns='http://www.w3.org/2000/svg' class='chart-root'>' + '<g class='outer-group'>' + '<g class='chart-group'>' + '<circle class='background-circle'></circle>' + '<g class='geometry-group'></g>' + '<g class='radial axis-group'>' + '<circle class='outside-circle'></circle>' + '</g>' + '<g class='angular axis-group'></g>' + '<g class='guides-group'><line></line><circle r='0'></circle></g>' + '</g>' + '<g class='legend-group'></g>' + '<g class='tooltips-group'></g>' + '<g class='title-group'><text></text></g>' + '</g>' + '</svg>","application/xml"),R=this.appendChild(this.ownerDocument.importNode(O.documentElement,!0));e=n.select(R)}e.select(".guides-group").style({"pointer-events":"none"}),e.select(".angular.axis-group").style({"pointer-events":"none"}),e.select(".radial.axis-group").style({"pointer-events":"none"});var F,j=e.select(".chart-group"),N={fill:"none",stroke:f.tickColor},B={"font-size":f.font.size,"font-family":f.font.family,fill:f.font.color,"text-shadow":["-1px 0px","1px -1px","-1px 1px","1px 1px"].map(function(t,e){return" "+t+" 0 "+f.font.outlineColor}).join(",")};if(f.showLegend){F=e.select(".legend-group").attr({transform:"translate("+[x,f.margin.top]+")"}).style({display:"block"});var U=p.map(function(t,e){var r=s.util.cloneJson(t);return r.symbol="DotPlot"===t.geometry?t.dotType||"circle":"LinePlot"!=t.geometry?"square":"line",r.visibleInLegend=void 0===t.visibleInLegend||t.visibleInLegend,r.color="LinePlot"===t.geometry?t.strokeColor:t.color,r});s.Legend().config({data:p.map(function(t,e){return t.name||"Element"+e}),legendConfig:a({},s.Legend.defaultConfig().legendConfig,{container:F,elements:U,reverseOrder:f.legend.reverseOrder})})();var V=F.node().getBBox();x=Math.min(f.width-V.width-f.margin.left-f.margin.right,f.height-f.margin.top-f.margin.bottom)/2,x=Math.max(10,x),w=[f.margin.left+x,f.margin.top+x],i.range([0,x]),h.layout.radialAxis.domain=i.domain(),F.attr("transform","translate("+[w[0]+x,w[1]-x]+")")}else F=e.select(".legend-group").style({display:"none"});e.attr({width:f.width,height:f.height}).style({opacity:f.opacity}),j.attr("transform","translate("+w+")").style({cursor:"crosshair"});var H=[(f.width-(f.margin.left+f.margin.right+2*x+(V?V.width:0)))/2,(f.height-(f.margin.top+f.margin.bottom+2*x))/2];if(H[0]=Math.max(0,H[0]),H[1]=Math.max(0,H[1]),e.select(".outer-group").attr("transform","translate("+H+")"),f.title){var q=e.select("g.title-group text").style(B).text(f.title),G=q.node().getBBox();q.attr({x:w[0]-G.width/2,y:w[1]-x-20})}var Y=e.select(".radial.axis-group");if(f.radialAxis.gridLinesVisible){var W=Y.selectAll("circle.grid-circle").data(i.ticks(5));W.enter().append("circle").attr({class:"grid-circle"}).style(N),W.attr("r",i),W.exit().remove()}Y.select("circle.outside-circle").attr({r:x}).style(N);var X=e.select("circle.background-circle").attr({r:x}).style({fill:f.backgroundColor,stroke:f.stroke});if(f.radialAxis.visible){var Z=n.svg.axis().scale(i).ticks(5).tickSize(5);Y.call(Z).attr({transform:"rotate("+f.radialAxis.orientation+")"}),Y.selectAll(".domain").style(N),Y.selectAll("g>text").text(function(t,e){return this.textContent+f.radialAxis.ticksSuffix}).style(B).style({"text-anchor":"start"}).attr({x:0,y:0,dx:0,dy:0,transform:function(t,e){return"horizontal"===f.radialAxis.tickOrientation?"rotate("+-f.radialAxis.orientation+") translate("+[0,B["font-size"]]+")":"translate("+[0,B["font-size"]]+")"}}),Y.selectAll("g>line").style({stroke:"black"})}var J=e.select(".angular.axis-group").selectAll("g.angular-tick").data(P),K=J.enter().append("g").classed("angular-tick",!0);J.attr({transform:function(t,e){return"rotate("+u(t,e)+")"}}).style({display:f.angularAxis.visible?"block":"none"}),J.exit().remove(),K.append("line").classed("grid-line",!0).classed("major",function(t,e){return e%(f.minorTicks+1)==0}).classed("minor",function(t,e){return!(e%(f.minorTicks+1)==0)}).style(N),K.selectAll(".minor").style({stroke:f.minorTickColor}),J.select("line.grid-line").attr({x1:f.tickLength?x-f.tickLength:0,x2:x}).style({display:f.angularAxis.gridLinesVisible?"block":"none"}),K.append("text").classed("axis-text",!0).style(B);var Q=J.select("text.axis-text").attr({x:x+f.labelOffset,dy:o+"em",transform:function(t,e){var r=u(t,e),n=x+f.labelOffset,i=f.angularAxis.tickOrientation;return"horizontal"==i?"rotate("+-r+" "+n+" 0)":"radial"==i?r<270&&r>90?"rotate(180 "+n+" 0)":null:"rotate("+(r<=180&&r>0?-90:90)+" "+n+" 0)"}}).style({"text-anchor":"middle",display:f.angularAxis.labelsVisible?"block":"none"}).text(function(t,e){return e%(f.minorTicks+1)!=0?"":M?M[t]+f.angularAxis.ticksSuffix:t+f.angularAxis.ticksSuffix}).style(B);f.angularAxis.rewriteTicks&&Q.text(function(t,e){return e%(f.minorTicks+1)!=0?"":f.angularAxis.rewriteTicks(this.textContent,e)});var $=n.max(j.selectAll(".angular-tick text")[0].map(function(t,e){return t.getCTM().e+t.getBBox().width}));F.attr({transform:"translate("+[x+$,f.margin.top]+")"});var tt=e.select("g.geometry-group").selectAll("g").size()>0,et=e.select("g.geometry-group").selectAll("g.geometry").data(p);if(et.enter().append("g").attr({class:function(t,e){return"geometry geometry"+e}}),et.exit().remove(),p[0]||tt){var rt=[];p.forEach(function(t,e){var r={};r.radialScale=i,r.angularScale=l,r.container=et.filter(function(t,r){return r==e}),r.geometry=t.geometry,r.orientation=f.orientation,r.direction=f.direction,r.index=e,rt.push({data:t,geometryConfig:r})});var nt=n.nest().key(function(t,e){return void 0!==t.data.groupId||"unstacked"}).entries(rt),it=[];nt.forEach(function(t,e){"unstacked"===t.key?it=it.concat(t.values.map(function(t,e){return[t]})):it.push(t.values)}),it.forEach(function(t,e){var r;r=Array.isArray(t)?t[0].geometryConfig.geometry:t.geometryConfig.geometry;var n=t.map(function(t,e){return a(s[r].defaultConfig(),t)});s[r]().config(n)()})}var at,ot,st=e.select(".guides-group"),lt=e.select(".tooltips-group"),ut=s.tooltipPanel().config({container:lt,fontSize:8})(),ct=s.tooltipPanel().config({container:lt,fontSize:8})(),ht=s.tooltipPanel().config({container:lt,hasTick:!0})();if(!A){var ft=st.select("line").attr({x1:0,y1:0,y2:0}).style({stroke:"grey","pointer-events":"none"});j.on("mousemove.angular-guide",function(t,e){var r=s.util.getMousePos(X).angle;ft.attr({x2:-x,transform:"rotate("+r+")"}).style({opacity:.5});var n=(r+180+360-f.orientation)%360;at=l.invert(n);var i=s.util.convertToCartesian(x+12,r+180);ut.text(s.util.round(at)).move([i[0]+w[0],i[1]+w[1]])}).on("mouseout.angular-guide",function(t,e){st.select("line").style({opacity:0})})}var dt=st.select("circle").style({stroke:"grey",fill:"none"});j.on("mousemove.radial-guide",function(t,e){var r=s.util.getMousePos(X).radius;dt.attr({r:r}).style({opacity:.5}),ot=i.invert(s.util.getMousePos(X).radius);var n=s.util.convertToCartesian(r,f.radialAxis.orientation);ct.text(s.util.round(ot)).move([n[0]+w[0],n[1]+w[1]])}).on("mouseout.radial-guide",function(t,e){dt.style({opacity:0}),ht.hide(),ut.hide(),ct.hide()}),e.selectAll(".geometry-group .mark").on("mouseover.tooltip",function(t,r){var i=n.select(this),a=this.style.fill,o="black",l=this.style.opacity||1;if(i.attr({"data-opacity":l}),a&&"none"!==a){i.attr({"data-fill":a}),o=n.hsl(a).darker().toString(),i.style({fill:o,opacity:1});var u={t:s.util.round(t[0]),r:s.util.round(t[1])};A&&(u.t=M[t[0]]);var c="t: "+u.t+", r: "+u.r,h=this.getBoundingClientRect(),f=e.node().getBoundingClientRect(),d=[h.left+h.width/2-H[0]-f.left,h.top+h.height/2-H[1]-f.top];ht.config({color:o}).text(c),ht.move(d)}else a=this.style.stroke||"black",i.attr({"data-stroke":a}),o=n.hsl(a).darker().toString(),i.style({stroke:o,opacity:1})}).on("mousemove.tooltip",function(t,e){if(0!=n.event.which)return!1;n.select(this).attr("data-fill")&&ht.show()}).on("mouseout.tooltip",function(t,e){ht.hide();var r=n.select(this),i=r.attr("data-fill");i?r.style({fill:i,opacity:r.attr("data-opacity")}):r.style({stroke:r.attr("data-stroke"),opacity:r.attr("data-opacity")})})}),d}var e,r,i,l,u={data:[],layout:{}},c={},h={},f=n.dispatch("hover"),d={};return d.render=function(e){return t(e),this},d.config=function(t){if(!arguments.length)return u;var e=s.util.cloneJson(t);return e.data.forEach(function(t,e){u.data[e]||(u.data[e]={}),a(u.data[e],s.Axis.defaultConfig().data[0]),a(u.data[e],t)}),a(u.layout,s.Axis.defaultConfig().layout),a(u.layout,e.layout),this},d.getLiveConfig=function(){return h},d.getinputConfig=function(){return c},d.radialScale=function(t){return i},d.angularScale=function(t){return l},d.svg=function(){return e},n.rebind(d,f,"on"),d},s.Axis.defaultConfig=function(t,e){return{data:[{t:[1,2,3,4],r:[10,11,12,13],name:"Line1",geometry:"LinePlot",color:null,strokeDash:"solid",strokeColor:null,strokeSize:"1",visibleInLegend:!0,opacity:1}],layout:{defaultColorRange:n.scale.category10().range(),title:null,height:450,width:500,margin:{top:40,right:40,bottom:40,left:40},font:{size:12,color:"gray",outlineColor:"white",family:"Tahoma, sans-serif"},direction:"clockwise",orientation:0,labelOffset:10,radialAxis:{domain:null,orientation:-45,ticksSuffix:"",visible:!0,gridLinesVisible:!0,tickOrientation:"horizontal",rewriteTicks:null},angularAxis:{domain:[0,360],ticksSuffix:"",visible:!0,gridLinesVisible:!0,labelsVisible:!0,tickOrientation:"horizontal",rewriteTicks:null,ticksCount:null,ticksStep:null},minorTicks:0,tickLength:null,tickColor:"silver",minorTickColor:"#eee",backgroundColor:"none",needsEndSpacing:null,showLegend:!0,legend:{reverseOrder:!1},opacity:1}}},s.util={},s.DATAEXTENT="dataExtent",s.AREA="AreaChart",s.LINE="LinePlot",s.DOT="DotPlot",s.BAR="BarChart",s.util._override=function(t,e){for(var r in t)r in e&&(e[r]=t[r])},s.util._extend=function(t,e){for(var r in t)e[r]=t[r]},s.util._rndSnd=function(){return 2*Math.random()-1+(2*Math.random()-1)+(2*Math.random()-1)},s.util.dataFromEquation2=function(t,e){var r=e||6;return n.range(0,360+r,r).map(function(e,r){var n=e*Math.PI/180;return[e,t(n)]})},s.util.dataFromEquation=function(t,e,r){var i=e||6,a=[],o=[];n.range(0,360+i,i).forEach(function(e,r){var n=e*Math.PI/180,i=t(n);a.push(e),o.push(i)});var s={t:a,r:o};return r&&(s.name=r),s},s.util.ensureArray=function(t,e){if(void 0===t)return null;var r=[].concat(t);return n.range(e).map(function(t,e){return r[e]||r[0]})},s.util.fillArrays=function(t,e,r){return e.forEach(function(e,n){t[e]=s.util.ensureArray(t[e],r)}),t},s.util.cloneJson=function(t){return JSON.parse(JSON.stringify(t))},s.util.validateKeys=function(t,e){"string"==typeof e&&(e=e.split("."));var r=e.shift();return t[r]&&(!e.length||objHasKeys(t[r],e))},s.util.sumArrays=function(t,e){return n.zip(t,e).map(function(t,e){return n.sum(t)})},s.util.arrayLast=function(t){return t[t.length-1]},s.util.arrayEqual=function(t,e){for(var r=Math.max(t.length,e.length,1);r-- >=0&&t[r]===e[r];);return-2===r},s.util.flattenArray=function(t){for(var e=[];!s.util.arrayEqual(e,t);)e=t,t=[].concat.apply([],t);return t},s.util.deduplicate=function(t){return t.filter(function(t,e,r){return r.indexOf(t)==e})},s.util.convertToCartesian=function(t,e){var r=e*Math.PI/180;return[t*Math.cos(r),t*Math.sin(r)]},s.util.round=function(t,e){var r=e||2,n=Math.pow(10,r);return Math.round(t*n)/n},s.util.getMousePos=function(t){var e=n.mouse(t.node()),r=e[0],i=e[1],a={};return a.x=r,a.y=i,a.pos=e,a.angle=180*(Math.atan2(i,r)+Math.PI)/Math.PI,a.radius=Math.sqrt(r*r+i*i),a},s.util.duplicatesCount=function(t){for(var e,r={},n={},i=0,a=t.length;i<a;i++)e=t[i],e in r?(r[e]++,n[e]=r[e]):r[e]=1;return n},s.util.duplicates=function(t){return Object.keys(s.util.duplicatesCount(t))},s.util.translator=function(t,e,r,n){if(n){var i=r.slice();r=e,e=i}var a=e.reduce(function(t,e){if(void 0!==t)return t[e]},t);void 0!==a&&(e.reduce(function(t,r,n){if(void 0!==t)return n===e.length-1&&delete t[r],t[r]},t),r.reduce(function(t,e,n){return void 0===t[e]&&(t[e]={}),
n===r.length-1&&(t[e]=a),t[e]},t))},s.PolyChart=function(){function t(){var t=e[0].geometryConfig,r=t.container;"string"==typeof r&&(r=n.select(r)),r.datum(e).each(function(e,r){function a(e,r){return{r:t.radialScale(e[1]),t:(t.angularScale(e[0])+t.orientation)*Math.PI/180}}function o(t){return{x:t.r*Math.cos(t.t),y:t.r*Math.sin(t.t)}}var s=!!e[0].data.yStack,l=e.map(function(t,e){return s?n.zip(t.data.t[0],t.data.r[0],t.data.yStack[0]):n.zip(t.data.t[0],t.data.r[0])}),u=t.angularScale,c=t.radialScale.domain()[0],h={};h.bar=function(r,i,a){var o=e[a].data,s=t.radialScale(r[1])-t.radialScale(0),l=t.radialScale(r[2]||0),c=o.barWidth;n.select(this).attr({class:"mark bar",d:"M"+[[s+l,-c/2],[s+l,c/2],[l,c/2],[l,-c/2]].join("L")+"Z",transform:function(e,r){return"rotate("+(t.orientation+u(e[0]))+")"}})},h.dot=function(t,r,i){var s=t[2]?[t[0],t[1]+t[2]]:t,l=n.svg.symbol().size(e[i].data.dotSize).type(e[i].data.dotType)(t,r);n.select(this).attr({class:"mark dot",d:l,transform:function(t,e){var r=o(a(s));return"translate("+[r.x,r.y]+")"}})};var f=n.svg.line.radial().interpolate(e[0].data.lineInterpolation).radius(function(e){return t.radialScale(e[1])}).angle(function(e){return t.angularScale(e[0])*Math.PI/180});h.line=function(r,i,a){var o=r[2]?l[a].map(function(t,e){return[t[0],t[1]+t[2]]}):l[a];if(n.select(this).each(h.dot).style({opacity:function(t,r){return+e[a].data.dotVisible},fill:g.stroke(r,i,a)}).attr({class:"mark dot"}),!(i>0)){var s=n.select(this.parentNode).selectAll("path.line").data([0]);s.enter().insert("path"),s.attr({class:"line",d:f(o),transform:function(e,r){return"rotate("+(t.orientation+90)+")"},"pointer-events":"none"}).style({fill:function(t,e){return g.fill(r,i,a)},"fill-opacity":0,stroke:function(t,e){return g.stroke(r,i,a)},"stroke-width":function(t,e){return g["stroke-width"](r,i,a)},"stroke-dasharray":function(t,e){return g["stroke-dasharray"](r,i,a)},opacity:function(t,e){return g.opacity(r,i,a)},display:function(t,e){return g.display(r,i,a)}})}};var d=t.angularScale.range(),p=Math.abs(d[1]-d[0])/l[0].length*Math.PI/180,m=n.svg.arc().startAngle(function(t){return-p/2}).endAngle(function(t){return p/2}).innerRadius(function(e){return t.radialScale(c+(e[2]||0))}).outerRadius(function(e){return t.radialScale(c+(e[2]||0))+t.radialScale(e[1])});h.arc=function(e,r,i){n.select(this).attr({class:"mark arc",d:m,transform:function(e,r){return"rotate("+(t.orientation+u(e[0])+90)+")"}})};var g={fill:function(t,r,n){return e[n].data.color},stroke:function(t,r,n){return e[n].data.strokeColor},"stroke-width":function(t,r,n){return e[n].data.strokeSize+"px"},"stroke-dasharray":function(t,r,n){return i[e[n].data.strokeDash]},opacity:function(t,r,n){return e[n].data.opacity},display:function(t,r,n){return void 0===e[n].data.visible||e[n].data.visible?"block":"none"}},v=n.select(this).selectAll("g.layer").data(l);v.enter().append("g").attr({class:"layer"});var y=v.selectAll("path.mark").data(function(t,e){return t});y.enter().append("path").attr({class:"mark"}),y.style(g).each(h[t.geometryType]),y.exit().remove(),v.exit().remove()})}var e=[s.PolyChart.defaultConfig()],r=n.dispatch("hover"),i={solid:"none",dash:[5,2],dot:[2,5]};return t.config=function(t){return arguments.length?(t.forEach(function(t,r){e[r]||(e[r]={}),a(e[r],s.PolyChart.defaultConfig()),a(e[r],t)}),this):e},t.getColorScale=function(){},n.rebind(t,r,"on"),t},s.PolyChart.defaultConfig=function(){return{data:{name:"geom1",t:[[1,2,3,4]],r:[[1,2,3,4]],dotType:"circle",dotSize:64,dotVisible:!1,barWidth:20,color:"#ffa500",strokeSize:1,strokeColor:"silver",strokeDash:"solid",opacity:1,index:0,visible:!0,visibleInLegend:!0},geometryConfig:{geometry:"LinePlot",geometryType:"arc",direction:"clockwise",orientation:0,container:"body",radialScale:null,angularScale:null,colorScale:n.scale.category20()}}},s.BarChart=function(){return s.PolyChart()},s.BarChart.defaultConfig=function(){return{geometryConfig:{geometryType:"bar"}}},s.AreaChart=function(){return s.PolyChart()},s.AreaChart.defaultConfig=function(){return{geometryConfig:{geometryType:"arc"}}},s.DotPlot=function(){return s.PolyChart()},s.DotPlot.defaultConfig=function(){return{geometryConfig:{geometryType:"dot",dotType:"circle"}}},s.LinePlot=function(){return s.PolyChart()},s.LinePlot.defaultConfig=function(){return{geometryConfig:{geometryType:"line"}}},s.Legend=function(){function t(){var r=e.legendConfig,i=e.data.map(function(t,e){return[].concat(t).map(function(t,n){var i=a({},r.elements[e]);return i.name=t,i.color=[].concat(r.elements[e].color)[n],i})}),o=n.merge(i);o=o.filter(function(t,e){return r.elements[e]&&(r.elements[e].visibleInLegend||void 0===r.elements[e].visibleInLegend)}),r.reverseOrder&&(o=o.reverse());var s=r.container;("string"==typeof s||s.nodeName)&&(s=n.select(s));var l=o.map(function(t,e){return t.color}),u=r.fontSize,c=null==r.isContinuous?"number"==typeof o[0]:r.isContinuous,h=c?r.height:u*o.length,f=s.classed("legend-group",!0),d=f.selectAll("svg").data([0]),p=d.enter().append("svg").attr({width:300,height:h+u,xmlns:"http://www.w3.org/2000/svg","xmlns:xlink":"http://www.w3.org/1999/xlink",version:"1.1"});p.append("g").classed("legend-axis",!0),p.append("g").classed("legend-marks",!0);var m=n.range(o.length),g=n.scale[c?"linear":"ordinal"]().domain(m).range(l),v=n.scale[c?"linear":"ordinal"]().domain(m)[c?"range":"rangePoints"]([0,h]),y=function(t,e){var r=3*e;return"line"===t?"M"+[[-e/2,-e/12],[e/2,-e/12],[e/2,e/12],[-e/2,e/12]]+"Z":-1!=n.svg.symbolTypes.indexOf(t)?n.svg.symbol().type(t).size(r)():n.svg.symbol().type("square").size(r)()};if(c){var b=d.select(".legend-marks").append("defs").append("linearGradient").attr({id:"grad1",x1:"0%",y1:"0%",x2:"0%",y2:"100%"}).selectAll("stop").data(l);b.enter().append("stop"),b.attr({offset:function(t,e){return e/(l.length-1)*100+"%"}}).style({"stop-color":function(t,e){return t}}),d.append("rect").classed("legend-mark",!0).attr({height:r.height,width:r.colorBandWidth,fill:"url(#grad1)"})}else{var x=d.select(".legend-marks").selectAll("path.legend-mark").data(o);x.enter().append("path").classed("legend-mark",!0),x.attr({transform:function(t,e){return"translate("+[u/2,v(e)+u/2]+")"},d:function(t,e){var r=t.symbol;return y(r,u)},fill:function(t,e){return g(e)}}),x.exit().remove()}var _=n.svg.axis().scale(v).orient("right"),w=d.select("g.legend-axis").attr({transform:"translate("+[c?r.colorBandWidth:u,u/2]+")"}).call(_);return w.selectAll(".domain").style({fill:"none",stroke:"none"}),w.selectAll("line").style({fill:"none",stroke:c?r.textColor:"none"}),w.selectAll("text").style({fill:r.textColor,"font-size":r.fontSize}).text(function(t,e){return o[e].name}),t}var e=s.Legend.defaultConfig(),r=n.dispatch("hover");return t.config=function(t){return arguments.length?(a(e,t),this):e},n.rebind(t,r,"on"),t},s.Legend.defaultConfig=function(t,e){return{data:["a","b","c"],legendConfig:{elements:[{symbol:"line",color:"red"},{symbol:"square",color:"yellow"},{symbol:"diamond",color:"limegreen"}],height:150,colorBandWidth:30,fontSize:12,container:"body",isContinuous:null,textColor:"grey",reverseOrder:!1}}},s.tooltipPanel=function(){var t,e,r,i={container:null,hasTick:!1,fontSize:12,color:"white",padding:5},o="tooltip-"+s.tooltipPanel.uid++,l=function(){t=i.container.selectAll("g."+o).data([0]);var n=t.enter().append("g").classed(o,!0).style({"pointer-events":"none",display:"none"});return r=n.append("path").style({fill:"white","fill-opacity":.9}).attr({d:"M0 0"}),e=n.append("text").attr({dx:i.padding+10,dy:.3*+i.fontSize}),l};return l.text=function(a){var o=n.hsl(i.color).l,s=o>=.5?"#aaa":"white",u=o>=.5?"black":"white",c=a||"";e.style({fill:u,"font-size":i.fontSize+"px"}).text(c);var h=i.padding,f=e.node().getBBox(),d={fill:i.color,stroke:s,"stroke-width":"2px"},p=f.width+2*h+10,m=f.height+2*h;return r.attr({d:"M"+[[10,-m/2],[10,-m/4],[i.hasTick?0:10,0],[10,m/4],[10,m/2],[p,m/2],[p,-m/2]].join("L")+"Z"}).style(d),t.attr({transform:"translate("+[10,-m/2+2*h]+")"}),t.style({display:"block"}),l},l.move=function(e){if(t)return t.attr({transform:"translate("+[e[0],e[1]]+")"}).style({display:"block"}),l},l.hide=function(){if(t)return t.style({display:"none"}),l},l.show=function(){if(t)return t.style({display:"block"}),l},l.config=function(t){return a(i,t),l},l},s.tooltipPanel.uid=1,s.adapter={},s.adapter.plotly=function(){var t={};return t.convert=function(t,e){var r={};if(t.data&&(r.data=t.data.map(function(t,r){var n=a({},t);return[[n,["marker","color"],["color"]],[n,["marker","opacity"],["opacity"]],[n,["marker","line","color"],["strokeColor"]],[n,["marker","line","dash"],["strokeDash"]],[n,["marker","line","width"],["strokeSize"]],[n,["marker","symbol"],["dotType"]],[n,["marker","size"],["dotSize"]],[n,["marker","barWidth"],["barWidth"]],[n,["line","interpolation"],["lineInterpolation"]],[n,["showlegend"],["visibleInLegend"]]].forEach(function(t,r){s.util.translator.apply(null,t.concat(e))}),e||delete n.marker,e&&delete n.groupId,e?("LinePlot"===n.geometry?(n.type="scatter",!0===n.dotVisible?(delete n.dotVisible,n.mode="lines+markers"):n.mode="lines"):"DotPlot"===n.geometry?(n.type="scatter",n.mode="markers"):"AreaChart"===n.geometry?n.type="area":"BarChart"===n.geometry&&(n.type="bar"),delete n.geometry):("scatter"===n.type?"lines"===n.mode?n.geometry="LinePlot":"markers"===n.mode?n.geometry="DotPlot":"lines+markers"===n.mode&&(n.geometry="LinePlot",n.dotVisible=!0):"area"===n.type?n.geometry="AreaChart":"bar"===n.type&&(n.geometry="BarChart"),delete n.mode,delete n.type),n}),!e&&t.layout&&"stack"===t.layout.barmode)){var i=s.util.duplicates(r.data.map(function(t,e){return t.geometry}));r.data.forEach(function(t,e){var n=i.indexOf(t.geometry);-1!=n&&(r.data[e].groupId=n)})}if(t.layout){var o=a({},t.layout);if([[o,["plot_bgcolor"],["backgroundColor"]],[o,["showlegend"],["showLegend"]],[o,["radialaxis"],["radialAxis"]],[o,["angularaxis"],["angularAxis"]],[o.angularaxis,["showline"],["gridLinesVisible"]],[o.angularaxis,["showticklabels"],["labelsVisible"]],[o.angularaxis,["nticks"],["ticksCount"]],[o.angularaxis,["tickorientation"],["tickOrientation"]],[o.angularaxis,["ticksuffix"],["ticksSuffix"]],[o.angularaxis,["range"],["domain"]],[o.angularaxis,["endpadding"],["endPadding"]],[o.radialaxis,["showline"],["gridLinesVisible"]],[o.radialaxis,["tickorientation"],["tickOrientation"]],[o.radialaxis,["ticksuffix"],["ticksSuffix"]],[o.radialaxis,["range"],["domain"]],[o.angularAxis,["showline"],["gridLinesVisible"]],[o.angularAxis,["showticklabels"],["labelsVisible"]],[o.angularAxis,["nticks"],["ticksCount"]],[o.angularAxis,["tickorientation"],["tickOrientation"]],[o.angularAxis,["ticksuffix"],["ticksSuffix"]],[o.angularAxis,["range"],["domain"]],[o.angularAxis,["endpadding"],["endPadding"]],[o.radialAxis,["showline"],["gridLinesVisible"]],[o.radialAxis,["tickorientation"],["tickOrientation"]],[o.radialAxis,["ticksuffix"],["ticksSuffix"]],[o.radialAxis,["range"],["domain"]],[o.font,["outlinecolor"],["outlineColor"]],[o.legend,["traceorder"],["reverseOrder"]],[o,["labeloffset"],["labelOffset"]],[o,["defaultcolorrange"],["defaultColorRange"]]].forEach(function(t,r){s.util.translator.apply(null,t.concat(e))}),e?(void 0!==o.tickLength&&(o.angularaxis.ticklen=o.tickLength,delete o.tickLength),o.tickColor&&(o.angularaxis.tickcolor=o.tickColor,delete o.tickColor)):(o.angularAxis&&void 0!==o.angularAxis.ticklen&&(o.tickLength=o.angularAxis.ticklen),o.angularAxis&&void 0!==o.angularAxis.tickcolor&&(o.tickColor=o.angularAxis.tickcolor)),o.legend&&"boolean"!=typeof o.legend.reverseOrder&&(o.legend.reverseOrder="normal"!=o.legend.reverseOrder),o.legend&&"boolean"==typeof o.legend.traceorder&&(o.legend.traceorder=o.legend.traceorder?"reversed":"normal",delete o.legend.reverseOrder),o.margin&&void 0!==o.margin.t){var l=["t","r","b","l","pad"],u=["top","right","bottom","left","pad"],c={};n.entries(o.margin).forEach(function(t,e){c[u[l.indexOf(t.key)]]=t.value}),o.margin=c}e&&(delete o.needsEndSpacing,delete o.minorTickColor,delete o.minorTicks,delete o.angularaxis.ticksCount,delete o.angularaxis.ticksCount,delete o.angularaxis.ticksStep,delete o.angularaxis.rewriteTicks,delete o.angularaxis.nticks,delete o.radialaxis.ticksCount,delete o.radialaxis.ticksCount,delete o.radialaxis.ticksStep,delete o.radialaxis.rewriteTicks,delete o.radialaxis.nticks),r.layout=o}return r},t}},{"../../constants/alignment":701,"../../lib":728,d3:122}],836:[function(t,e,r){"use strict";var n=t("d3"),i=t("../../lib"),a=t("../../components/color"),o=t("./micropolar"),s=t("./undo_manager"),l=i.extendDeepAll,u=e.exports={};u.framework=function(t){function e(e,i){return i&&(h=i),n.select(n.select(h).node().parentNode).selectAll(".svg-container>*:not(.chart-root)").remove(),r=r?l(r,e):e,a||(a=o.Axis()),c=o.adapter.plotly().convert(r),a.config(c).render(h),t.data=r.data,t.layout=r.layout,u.fillLayout(t),r}var r,i,a,c,h,f=new s;return e.isPolar=!0,e.svg=function(){return a.svg()},e.getConfig=function(){return r},e.getLiveConfig=function(){return o.adapter.plotly().convert(a.getLiveConfig(),!0)},e.getLiveScales=function(){return{t:a.angularScale(),r:a.radialScale()}},e.setUndoPoint=function(){var t=this,e=o.util.cloneJson(r);!function(e,r){f.add({undo:function(){r&&t(r)},redo:function(){t(e)}})}(e,i),i=o.util.cloneJson(e)},e.undo=function(){f.undo()},e.redo=function(){f.redo()},e},u.fillLayout=function(t){var e=n.select(t).selectAll(".plot-container"),r=e.selectAll(".svg-container"),i=t.framework&&t.framework.svg&&t.framework.svg(),o={width:800,height:600,paper_bgcolor:a.background,_container:e,_paperdiv:r,_paper:i};t._fullLayout=l(o,t.layout)}},{"../../components/color":604,"../../lib":728,"./micropolar":835,"./undo_manager":837,d3:122}],837:[function(t,e,r){"use strict";e.exports=function(){function t(t,e){return t?(i=!0,t[e](),i=!1,this):this}var e,r=[],n=-1,i=!1;return{add:function(t){return i?this:(r.splice(n+1,r.length-n),r.push(t),n=r.length-1,this)},setCallback:function(t){e=t},undo:function(){var i=r[n];return i?(t(i,"undo"),n-=1,e&&e(i.undo),this):this},redo:function(){var i=r[n+1];return i?(t(i,"redo"),n+=1,e&&e(i.redo),this):this},clear:function(){r=[],n=-1},hasUndo:function(){return-1!==n},hasRedo:function(){return n<r.length-1},getCommands:function(){return r},getPreviousCommand:function(){return r[n-1]},getIndex:function(){return n}}}},{}],838:[function(t,e,r){"use strict";var n=t("../lib"),i=t("./plots");e.exports=function(t,e,r,a){function o(t,e){return n.coerce(s,l,c,t,e)}for(var s,l,u=a.type,c=a.attributes,h=a.handleDefaults,f=a.partition||"x",d=i.findSubplotIds(r,u),p=d.length,m=0;m<p;m++){var g=d[m];s=t[g]?t[g]:t[g]={},e[g]=l={},o("domain."+f,[m/p,(m+1)/p]),o("domain."+{x:"y",y:"x"}[f]),a.id=g,h(s,l,o,a)}}},{"../lib":728,"./plots":831}],839:[function(t,e,r){"use strict";var n=t("./ternary"),i=t("../../plots/plots"),a=t("../../lib").counterRegex;r.name="ternary",r.attr="subplot",r.idRoot="ternary",r.idRegex=r.attrRegex=a("ternary"),r.attributes=t("./layout/attributes"),r.layoutAttributes=t("./layout/layout_attributes"),r.supplyLayoutDefaults=t("./layout/defaults"),r.plot=function(t){for(var e=t._fullLayout,r=t.calcdata,a=i.getSubplotIds(e,"ternary"),o=0;o<a.length;o++){var s=a[o],l=i.getSubplotCalcData(r,"ternary",s),u=e[s]._subplot;u||(u=new n({id:s,graphDiv:t,container:e._ternarylayer.node()},e),e[s]._subplot=u),u.plot(l,e,t._promises)}},r.clean=function(t,e,r,n){for(var a=i.getSubplotIds(n,"ternary"),o=0;o<a.length;o++){var s=a[o],l=n[s]._subplot;!e[s]&&l&&(l.plotContainer.remove(),l.clipDef.remove(),l.clipDefRelative.remove())}}},{"../../lib":728,"../../plots/plots":831,"./layout/attributes":840,"./layout/defaults":843,"./layout/layout_attributes":844,"./ternary":845}],840:[function(t,e,r){"use strict";e.exports={subplot:{valType:"subplotid",dflt:"ternary",editType:"calc"}}},{}],841:[function(t,e,r){"use strict";var n=t("../../cartesian/layout_attributes"),i=t("../../../lib/extend").extendFlat;e.exports={title:n.title,titlefont:n.titlefont,color:n.color,tickmode:n.tickmode,nticks:i({},n.nticks,{dflt:6,min:1}),tick0:n.tick0,dtick:n.dtick,tickvals:n.tickvals,ticktext:n.ticktext,ticks:n.ticks,ticklen:n.ticklen,tickwidth:n.tickwidth,tickcolor:n.tickcolor,showticklabels:n.showticklabels,showtickprefix:n.showtickprefix,tickprefix:n.tickprefix,showticksuffix:n.showticksuffix,ticksuffix:n.ticksuffix,showexponent:n.showexponent,exponentformat:n.exponentformat,separatethousands:n.separatethousands,tickfont:n.tickfont,tickangle:n.tickangle,tickformat:n.tickformat,hoverformat:n.hoverformat,showline:i({},n.showline,{dflt:!0}),linecolor:n.linecolor,linewidth:n.linewidth,showgrid:i({},n.showgrid,{dflt:!0}),gridcolor:n.gridcolor,gridwidth:n.gridwidth,layer:n.layer,min:{valType:"number",dflt:0,min:0}}},{"../../../lib/extend":717,"../../cartesian/layout_attributes":783}],842:[function(t,e,r){"use strict";var n=t("tinycolor2").mix,i=t("../../../lib"),a=t("./axis_attributes"),o=t("../../cartesian/tick_label_defaults"),s=t("../../cartesian/tick_mark_defaults"),l=t("../../cartesian/tick_value_defaults");e.exports=function(t,e,r){function u(r,n){return i.coerce(t,e,a,r,n)}e.type="linear";var c=u("color"),h=c===t.color?c:r.font.color,f=e._name,d=f.charAt(0).toUpperCase(),p="Component "+d,m=u("title",p);e._hovertitle=m===p?m:d,i.coerceFont(u,"titlefont",{family:r.font.family,size:Math.round(1.2*r.font.size),color:h}),u("min"),l(t,e,u,"linear"),o(t,e,u,"linear",{noHover:!1}),s(t,e,u,{outerTicks:!0}),u("showticklabels")&&(i.coerceFont(u,"tickfont",{family:r.font.family,size:r.font.size,color:h}),u("tickangle"),u("tickformat")),u("hoverformat"),u("showline")&&(u("linecolor",c),u("linewidth")),u("showgrid")&&(u("gridcolor",n(c,r.bgColor,60).toRgbString()),u("gridwidth")),u("layer")}},{"../../../lib":728,"../../cartesian/tick_label_defaults":790,"../../cartesian/tick_mark_defaults":791,"../../cartesian/tick_value_defaults":792,"./axis_attributes":841,tinycolor2:534}],843:[function(t,e,r){"use strict";function n(t,e,r,n){var a=r("bgcolor"),o=r("sum");n.bgColor=i.combine(a,n.paper_bgcolor);for(var u,c,h,f=0;f<l.length;f++)u=l[f],c=t[u]||{},h=e[u]={_name:u,type:"linear"},s(c,h,n);var d=e.aaxis,p=e.baxis,m=e.caxis;d.min+p.min+m.min>=o&&(d.min=0,p.min=0,m.min=0,t.aaxis&&delete t.aaxis.min,t.baxis&&delete t.baxis.min,t.caxis&&delete t.caxis.min)}var i=t("../../../components/color"),a=t("../../subplot_defaults"),o=t("./layout_attributes"),s=t("./axis_defaults"),l=["aaxis","baxis","caxis"];e.exports=function(t,e,r){a(t,e,r,{type:"ternary",attributes:o,handleDefaults:n,font:e.font,paper_bgcolor:e.paper_bgcolor})}},{"../../../components/color":604,"../../subplot_defaults":838,"./axis_defaults":842,"./layout_attributes":844}],844:[function(t,e,r){"use strict";var n=t("../../../components/color/attributes"),i=t("./axis_attributes"),a=t("../../../plot_api/edit_types").overrideAll;e.exports=a({domain:{x:{valType:"info_array",items:[{valType:"number",min:0,max:1},{valType:"number",min:0,max:1}],dflt:[0,1]},y:{valType:"info_array",items:[{valType:"number",min:0,max:1},{valType:"number",min:0,max:1}],dflt:[0,1]}},bgcolor:{valType:"color",dflt:n.background},sum:{valType:"number",dflt:1,min:0},aaxis:i,baxis:i,caxis:i},"plot","from-root")},{"../../../components/color/attributes":603,"../../../plot_api/edit_types":756,"./axis_attributes":841}],845:[function(t,e,r){"use strict";function n(t,e){this.id=t.id,this.graphDiv=t.graphDiv,this.init(e),this.makeFramework(e)}function i(t){a.select(t).selectAll(".zoombox,.js-zoombox-backdrop,.js-zoombox-menu,.zoombox-corners").remove()}var a=t("d3"),o=t("tinycolor2"),s=t("../../plotly"),l=t("../../lib"),u=t("../../components/color"),c=t("../../components/drawing"),h=t("../cartesian/set_convert"),f=t("../../lib/extend").extendFlat,d=t("../plots"),p=t("../cartesian/axes"),m=t("../../components/dragelement"),g=t("../../components/fx"),v=t("../../components/titles"),y=t("../cartesian/select"),b=t("../cartesian/constants");e.exports=n;var x=n.prototype;x.init=function(t){this.container=t._ternarylayer,this.defs=t._defs,this.layoutId=t._uid,this.traceHash={},this.layers={}},x.plot=function(t,e){var r=this,n=e[r.id],i=e._size;r._hasClipOnAxisFalse=!1;for(var a=0;a<t.length;a++){if(!1===t[a][0].trace.cliponaxis){r._hasClipOnAxisFalse=!0;break}}r.updateLayers(n),r.adjustLayout(n,i),d.generalUpdatePerTraceModule(r,t,n),r.layers.plotbg.select("path").call(u.fill,n.bgcolor)},x.makeFramework=function(t){var e=this,r=t[e.id],n=e.clipId="clip"+e.layoutId+e.id;e.clipDef=t._clips.selectAll("#"+n).data([0]),e.clipDef.enter().append("clipPath").attr("id",n).append("path").attr("d","M0,0Z");var i=e.clipIdRelative="clip-relative"+e.layoutId+e.id;e.clipDefRelative=t._clips.selectAll("#"+i).data([0]),e.clipDefRelative.enter().append("clipPath").attr("id",i).append("path").attr("d","M0,0Z"),e.plotContainer=e.container.selectAll("g."+e.id).data([0]),e.plotContainer.enter().append("g").classed(e.id,!0),e.updateLayers(r),c.setClipUrl(e.layers.backplot,n),c.setClipUrl(e.layers.grids,n)},x.updateLayers=function(t){var e=this,r=e.layers,n=["draglayer","plotbg","backplot","grids"];"below traces"===t.aaxis.layer&&n.push("aaxis","aline"),"below traces"===t.baxis.layer&&n.push("baxis","bline"),"below traces"===t.caxis.layer&&n.push("caxis","cline"),n.push("frontplot"),"above traces"===t.aaxis.layer&&n.push("aaxis","aline"),"above traces"===t.baxis.layer&&n.push("baxis","bline"),"above traces"===t.caxis.layer&&n.push("caxis","cline");var i=e.plotContainer.selectAll("g.toplevel").data(n,String),o=["agrid","bgrid","cgrid"];i.enter().append("g").attr("class",function(t){return"toplevel "+t}).each(function(t){var e=a.select(this);r[t]=e,"frontplot"===t?e.append("g").classed("scatterlayer",!0):"backplot"===t?e.append("g").classed("maplayer",!0):"plotbg"===t?e.append("path").attr("d","M0,0Z"):"aline"===t||"bline"===t||"cline"===t?e.append("path"):"grids"===t&&o.forEach(function(t){r[t]=e.append("g").classed("grid "+t,!0)})}),i.order()};var _=Math.sqrt(4/3);x.adjustLayout=function(t,e){var r,n,i,a,o,s,l=this,d=t.domain,p=(d.x[0]+d.x[1])/2,m=(d.y[0]+d.y[1])/2,g=d.x[1]-d.x[0],v=d.y[1]-d.y[0],y=g*e.w,b=v*e.h,x=t.sum,w=t.aaxis.min,M=t.baxis.min,k=t.caxis.min;y>_*b?(a=b,i=a*_):(i=y,a=i/_),o=g*i/y,s=v*a/b,r=e.l+e.w*p-i/2,n=e.t+e.h*(1-m)-a/2,l.x0=r,l.y0=n,l.w=i,l.h=a,l.sum=x,l.xaxis={type:"linear",range:[w+2*k-x,x-w-2*M],domain:[p-o/2,p+o/2],_id:"x"},h(l.xaxis,l.graphDiv._fullLayout),l.xaxis.setScale(),l.xaxis.isPtWithinRange=function(t){return t.a>=l.aaxis.range[0]&&t.a<=l.aaxis.range[1]&&t.b>=l.baxis.range[1]&&t.b<=l.baxis.range[0]&&t.c>=l.caxis.range[1]&&t.c<=l.caxis.range[0]},l.yaxis={type:"linear",range:[w,x-M-k],domain:[m-s/2,m+s/2],_id:"y"},h(l.yaxis,l.graphDiv._fullLayout),l.yaxis.setScale(),l.yaxis.isPtWithinRange=function(){return!0};var A=l.yaxis.domain[0],T=l.aaxis=f({},t.aaxis,{visible:!0,range:[w,x-M-k],side:"left",_counterangle:30,tickangle:(+t.aaxis.tickangle||0)-30,domain:[A,A+s*_],_axislayer:l.layers.aaxis,_gridlayer:l.layers.agrid,_pos:0,_id:"y",_length:i,_gridpath:"M0,0l"+a+",-"+i/2});h(T,l.graphDiv._fullLayout),T.setScale();var S=l.baxis=f({},t.baxis,{visible:!0,range:[x-w-k,M],side:"bottom",_counterangle:30,domain:l.xaxis.domain,_axislayer:l.layers.baxis,_gridlayer:l.layers.bgrid,_counteraxis:l.aaxis,_pos:0,_id:"x",_length:i,_gridpath:"M0,0l-"+i/2+",-"+a});h(S,l.graphDiv._fullLayout),S.setScale(),T._counteraxis=S;var E=l.caxis=f({},t.caxis,{visible:!0,range:[x-w-M,k],side:"right",_counterangle:30,tickangle:(+t.caxis.tickangle||0)+30,domain:[A,A+s*_],_axislayer:l.layers.caxis,_gridlayer:l.layers.cgrid,_counteraxis:l.baxis,_pos:0,_id:"y",_length:i,_gridpath:"M0,0l-"+a+","+i/2});h(E,l.graphDiv._fullLayout),E.setScale();var L="M"+r+","+(n+a)+"h"+i+"l-"+i/2+",-"+a+"Z";l.clipDef.select("path").attr("d",L),l.layers.plotbg.select("path").attr("d",L);var C="M0,"+a+"h"+i+"l-"+i/2+",-"+a+"Z";l.clipDefRelative.select("path").attr("d",C);var I="translate("+r+","+n+")";l.plotContainer.selectAll(".scatterlayer,.maplayer").attr("transform",I),l.clipDefRelative.select("path").attr("transform",null);var z="translate("+r+","+(n+a)+")";l.layers.baxis.attr("transform",z),l.layers.bgrid.attr("transform",z);var D="translate("+(r+i/2)+","+n+")rotate(30)";l.layers.aaxis.attr("transform",D),l.layers.agrid.attr("transform",D);var P="translate("+(r+i/2)+","+n+")rotate(-30)";l.layers.caxis.attr("transform",P),l.layers.cgrid.attr("transform",P),l.drawAxes(!0),l.plotContainer.selectAll(".crisp").classed("crisp",!1),l.layers.aline.select("path").attr("d",T.showline?"M"+r+","+(n+a)+"l"+i/2+",-"+a:"M0,0").call(u.stroke,T.linecolor||"#000").style("stroke-width",(T.linewidth||0)+"px"),l.layers.bline.select("path").attr("d",S.showline?"M"+r+","+(n+a)+"h"+i:"M0,0").call(u.stroke,S.linecolor||"#000").style("stroke-width",(S.linewidth||0)+"px"),l.layers.cline.select("path").attr("d",E.showline?"M"+(r+i/2)+","+n+"l"+i/2+","+a:"M0,0").call(u.stroke,E.linecolor||"#000").style("stroke-width",(E.linewidth||0)+"px"),l.graphDiv._context.staticPlot||l.initInteractions(),c.setClipUrl(l.layers.frontplot,l._hasClipOnAxisFalse?null:l.clipId)},x.drawAxes=function(t){var e=this,r=e.graphDiv,n=e.id.substr(7)+"title",i=e.aaxis,a=e.baxis,o=e.caxis;if(p.doTicks(r,i,!0),p.doTicks(r,a,!0),p.doTicks(r,o,!0),t){var s=Math.max(i.showticklabels?i.tickfont.size/2:0,(o.showticklabels?.75*o.tickfont.size:0)+("outside"===o.ticks?.87*o.ticklen:0));v.draw(r,"a"+n,{propContainer:i,propName:e.id+".aaxis.title",dfltName:"Component A",attributes:{x:e.x0+e.w/2,y:e.y0-i.titlefont.size/3-s,"text-anchor":"middle"}});var l=(a.showticklabels?a.tickfont.size:0)+("outside"===a.ticks?a.ticklen:0)+3;v.draw(r,"b"+n,{propContainer:a,propName:e.id+".baxis.title",dfltName:"Component B",attributes:{x:e.x0-l,y:e.y0+e.h+.83*a.titlefont.size+l,"text-anchor":"middle"}}),v.draw(r,"c"+n,{propContainer:o,propName:e.id+".caxis.title",dfltName:"Component C",attributes:{x:e.x0+e.w+l,y:e.y0+e.h+.83*o.titlefont.size+l,"text-anchor":"middle"}})}};var w=b.MINZOOM/2+.87,M="m-0.87,.5h"+w+"v3h-"+(w+5.2)+"l"+(w/2+2.6)+",-"+(.87*w+4.5)+"l2.6,1.5l-"+w/2+","+.87*w+"Z",k="m0.87,.5h-"+w+"v3h"+(w+5.2)+"l-"+(w/2+2.6)+",-"+(.87*w+4.5)+"l-2.6,1.5l"+w/2+","+.87*w+"Z",A="m0,1l"+w/2+","+.87*w+"l2.6,-1.5l-"+(w/2+2.6)+",-"+(.87*w+4.5)+"l-"+(w/2+2.6)+","+(.87*w+4.5)+"l2.6,1.5l"+w/2+",-"+.87*w+"Z",T=!0;x.initInteractions=function(){function t(t,e,r){var n=F.getBoundingClientRect();w=e-n.left,S=r-n.top,E={a:R.aaxis.range[0],b:R.baxis.range[1],c:R.caxis.range[1]},C=E,L=R.aaxis.range[1]-E.a,I=o(R.graphDiv._fullLayout[R.id].bgcolor).getLuminance(),z="M0,"+R.h+"L"+R.w/2+", 0L"+R.w+","+R.h+"Z",D=!1,P=N.append("path").attr("class","zoombox").attr("transform","translate("+R.x0+", "+R.y0+")").style({fill:I>.2?"rgba(0,0,0,0)":"rgba(255,255,255,0)","stroke-width":0}).attr("d",z),O=N.append("path").attr("class","zoombox-corners").attr("transform","translate("+R.x0+", "+R.y0+")").style({fill:u.background,stroke:u.defaultLine,"stroke-width":1,opacity:0}).attr("d","M0,0Z"),v()}function e(t,e){return 1-e/R.h}function r(t,e){return 1-(t+(R.h-e)/Math.sqrt(3))/R.w}function n(t,e){return(t-(R.h-e)/Math.sqrt(3))/R.w}function a(t,i){var a=w+t,o=S+i,s=Math.max(0,Math.min(1,e(w,S),e(a,o))),l=Math.max(0,Math.min(1,r(w,S),r(a,o))),u=Math.max(0,Math.min(1,n(w,S),n(a,o))),c=(s/2+u)*R.w,h=(1-s/2-l)*R.w,f=(c+h)/2,d=h-c,p=(1-s)*R.h,m=p-d/_;d<b.MINZOOM?(C=E,P.attr("d",z),O.attr("d","M0,0Z")):(C={a:E.a+s*L,b:E.b+l*L,c:E.c+u*L},P.attr("d",z+"M"+c+","+p+"H"+h+"L"+f+","+m+"L"+c+","+p+"Z"),O.attr("d","M"+w+","+S+"m0.5,0.5h5v-2h-5v-5h-2v5h-5v2h5v5h2ZM"+c+","+p+M+"M"+h+","+p+k+"M"+f+","+m+A)),D||(P.transition().style("fill",I>.2?"rgba(0,0,0,0.4)":"rgba(255,255,255,0.3)").duration(200),O.transition().style("opacity",1).duration(200),D=!0)}function h(t,e){if(C===E)return 2===e&&x(),i(j);i(j);var r={};r[R.id+".aaxis.min"]=C.a,r[R.id+".baxis.min"]=C.b,r[R.id+".caxis.min"]=C.c,s.relayout(j,r),T&&j.data&&j._context.showTips&&(l.notifier("Double-click to<br>zoom back out","long"),T=!1)}function f(){E={a:R.aaxis.range[0],b:R.baxis.range[1],c:R.caxis.range[1]},C=E}function d(t,e){var r=t/R.xaxis._m,n=e/R.yaxis._m;C={a:E.a-n,b:E.b+(r+n)/2,c:E.c-(r-n)/2};var i=[C.a,C.b,C.c].sort(),a={a:i.indexOf(C.a),b:i.indexOf(C.b),c:i.indexOf(C.c)};i[0]<0&&(i[1]+i[0]/2<0?(i[2]+=i[0]+i[1],i[0]=i[1]=0):(i[2]+=i[0]/2,i[1]+=i[0]/2,i[0]=0),C={a:i[a.a],b:i[a.b],c:i[a.c]},e=(E.a-C.a)*R.yaxis._m,t=(E.c-C.c-E.b+C.b)*R.xaxis._m);var o="translate("+(R.x0+t)+","+(R.y0+e)+")";R.plotContainer.selectAll(".scatterlayer,.maplayer").attr("transform",o);var s="translate("+-t+","+-e+")";if(R.clipDefRelative.select("path").attr("transform",s),R.aaxis.range=[C.a,R.sum-C.b-C.c],R.baxis.range=[R.sum-C.a-C.c,C.b],R.caxis.range=[R.sum-C.a-C.b,C.c],R.drawAxes(!1),R.plotContainer.selectAll(".crisp").classed("crisp",!1),R._hasClipOnAxisFalse){var l=R.plotContainer.select(".scatterlayer").selectAll(".points");l.selectAll(".point").call(c.hideOutsideRangePoints,R),l.selectAll(".textpoint").call(c.hideOutsideRangePoints,R)}}function p(t,e){if(t){var r={};r[R.id+".aaxis.min"]=C.a,r[R.id+".baxis.min"]=C.b,r[R.id+".caxis.min"]=C.c,s.relayout(j,r)}else 2===e&&x()}function v(){N.selectAll(".select-outline").remove()}function x(){var t={};t[R.id+".aaxis.min"]=0,t[R.id+".baxis.min"]=0,t[R.id+".caxis.min"]=0,j.emit("plotly_doubleclick",null),s.relayout(j,t)}var w,S,E,L,C,I,z,D,P,O,R=this,F=R.layers.plotbg.select("path").node(),j=R.graphDiv,N=j._fullLayout._zoomlayer,B={element:F,gd:j,plotinfo:{xaxis:R.xaxis,yaxis:R.yaxis},doubleclick:x,subplot:R.id,prepFn:function(e,r,n){B.xaxes=[R.xaxis],B.yaxes=[R.yaxis];var i=j._fullLayout.dragmode;e.shiftKey&&(i="pan"===i?"zoom":"pan"),B.minDrag="lasso"===i?1:void 0,"zoom"===i?(B.moveFn=a,B.doneFn=h,t(e,r,n)):"pan"===i?(B.moveFn=d,B.doneFn=p,f(),v()):"select"!==i&&"lasso"!==i||y(e,r,n,B,i)}};F.onmousemove=function(t){g.hover(j,t,R.id),j._fullLayout._lasthover=F,j._fullLayout._hoversubplot=R.id},F.onmouseout=function(t){j._dragging||m.unhover(j,t)},F.onclick=function(t){g.click(j,t,R.id)},m.init(B)}},{"../../components/color":604,"../../components/dragelement":625,"../../components/drawing":628,"../../components/fx":645,"../../components/titles":694,"../../lib":728,"../../lib/extend":717,"../../plotly":767,"../cartesian/axes":772,"../cartesian/constants":777,"../cartesian/select":788,"../cartesian/set_convert":789,"../plots":831,d3:122,tinycolor2:534}],846:[function(t,e,r){"use strict";function n(t){if(t.layoutAttributes){var e=t.layoutAttributes._arrayAttrRegexps;if(e)for(var n=0;n<e.length;n++)c(r.layoutArrayRegexes,e[n])}}function i(t,e){var n=r.componentsRegistry[t].schema;if(n&&n.traces){var i=n.traces[e];i&&d(r.modules[e]._module.attributes,i)}}function a(t,e){var n=r.componentsRegistry[t].schema;if(n&&n.transforms){var i=n.transforms[e];i&&d(r.transformsRegistry[e].attributes,i)}}function o(t,e){var n=r.componentsRegistry[t].schema;if(n&&n.subplots){var i=r.subplotsRegistry[e],a=i.layoutAttributes,o="subplot"===i.attr?i.name:i.attr;Array.isArray(o)&&(o=o[0]);var s=n.subplots[o];a&&s&&d(a,s)}}function s(t){return"object"==typeof t&&(t=t.type),t}var l=t("./lib/loggers"),u=t("./lib/noop"),c=t("./lib/push_unique"),h=t("./lib/extend"),f=h.extendFlat,d=h.extendDeepAll,p=t("./plots/attributes"),m=t("./plots/layout_attributes");r.modules={},r.allCategories={},r.allTypes=[],r.subplotsRegistry={},r.transformsRegistry={},r.componentsRegistry={},r.layoutArrayContainers=[],r.layoutArrayRegexes=[],r.traceLayoutAttributes={},r.register=function(t,e,n,a){if(r.modules[e])return void l.log("Type "+e+" already registered");for(var o={},s=0;s<n.length;s++)o[n[s]]=!0,r.allCategories[n[s]]=!0;r.modules[e]={_module:t,categories:o},a&&Object.keys(a).length&&(r.modules[e].meta=a),r.allTypes.push(e);for(var u in r.componentsRegistry)i(u,e);t.layoutAttributes&&f(r.traceLayoutAttributes,t.layoutAttributes)},r.registerSubplot=function(t){var e=t.name;if(r.subplotsRegistry[e])return void l.log("Plot type "+e+" already registered.");n(t),r.subplotsRegistry[e]=t
;for(var i in r.componentsRegistry)o(i,t.name)},r.registerComponent=function(t){var e=t.name;r.componentsRegistry[e]=t,t.layoutAttributes&&(t.layoutAttributes._isLinkedToArray&&c(r.layoutArrayContainers,e),n(t));for(var s in r.modules)i(e,s);for(var l in r.subplotsRegistry)o(e,l);for(var u in r.transformsRegistry)a(e,u);t.schema&&t.schema.layout&&d(m,t.schema.layout)},r.registerTransform=function(t){r.transformsRegistry[t.name]=t;for(var e in r.componentsRegistry)a(e,t.name)},r.getModule=function(t){if(void 0!==t.r)return l.warn("Tried to put a polar trace on an incompatible graph of cartesian data. Ignoring this dataset.",t),!1;var e=r.modules[s(t)];return!!e&&e._module},r.traceIs=function(t,e){if("various"===(t=s(t)))return!1;var n=r.modules[t];return n||(t&&"area"!==t&&l.log("Unrecognized trace type "+t+"."),n=r.modules[p.type.dflt]),!!n.categories[e]},r.getTransformIndices=function(t,e){for(var r=[],n=t.transforms||[],i=0;i<n.length;i++)n[i].type===e&&r.push(i);return r},r.hasTransform=function(t,e){for(var r=t.transforms||[],n=0;n<r.length;n++)if(r[n].type===e)return!0;return!1},r.getComponentMethod=function(t,e){var n=r.componentsRegistry[t];return n?n[e]||u:u}},{"./lib/extend":717,"./lib/loggers":732,"./lib/noop":736,"./lib/push_unique":740,"./plots/attributes":770,"./plots/layout_attributes":822}],847:[function(t,e,r){"use strict";function n(t){var e;switch(t){case"themes__thumb":e={autosize:!0,width:150,height:150,title:"",showlegend:!1,margin:{l:5,r:5,t:5,b:5,pad:0},annotations:[]};break;case"thumbnail":e={title:"",hidesources:!0,showlegend:!1,borderwidth:0,bordercolor:"",margin:{l:1,r:1,t:1,b:1,pad:0},annotations:[]};break;default:e={}}return e}function i(t){return["xaxis","yaxis","zaxis"].indexOf(t.slice(0,5))>-1}var a=t("../lib"),o=t("../plots/plots"),s=a.extendFlat,l=a.extendDeep;e.exports=function(t,e){t.framework&&t.framework.isPolar&&(t=t.framework.getConfig());var r,a=t.data,u=t.layout,c=l([],a),h=l({},u,n(e.tileClass)),f=t._context||{};if(e.width&&(h.width=e.width),e.height&&(h.height=e.height),"thumbnail"===e.tileClass||"themes__thumb"===e.tileClass){h.annotations=[];var d=Object.keys(h);for(r=0;r<d.length;r++)i(d[r])&&(h[d[r]].title="");for(r=0;r<c.length;r++){var p=c[r];p.showscale=!1,p.marker&&(p.marker.showscale=!1),"pie"===p.type&&(p.textposition="none")}}if(Array.isArray(e.annotations))for(r=0;r<e.annotations.length;r++)h.annotations.push(e.annotations[r]);var m=o.getSubplotIds(h,"gl3d");if(m.length){var g={};for("thumbnail"===e.tileClass&&(g={title:"",showaxeslabels:!1,showticklabels:!1,linetickenable:!1}),r=0;r<m.length;r++){var v=h[m[r]];v.xaxis||(v.xaxis={}),v.yaxis||(v.yaxis={}),v.zaxis||(v.zaxis={}),s(v.xaxis,g),s(v.yaxis,g),s(v.zaxis,g),v._scene=null}}var y=document.createElement("div");e.tileClass&&(y.className=e.tileClass);var b={gd:y,td:y,layout:h,data:c,config:{staticPlot:void 0===e.staticPlot||e.staticPlot,plotGlPixelRatio:void 0===e.plotGlPixelRatio?2:e.plotGlPixelRatio,displaylogo:e.displaylogo||!1,showLink:e.showLink||!1,showTips:e.showTips||!1,mapboxAccessToken:f.mapboxAccessToken}};return"transparent"!==e.setBackground&&(b.config.setBackground=e.setBackground||"opaque"),b.gd.defaultLayout=n(e.tileClass),b}},{"../lib":728,"../plots/plots":831}],848:[function(t,e,r){"use strict";function n(t,e){return e=e||{},e.format=e.format||"png",new Promise(function(r,n){t._snapshotInProgress&&n(new Error("Snapshotting already in progress.")),a.isIE()&&"svg"!==e.format&&n(new Error("Sorry IE does not support downloading from canvas. Try {format:'svg'} instead.")),t._snapshotInProgress=!0;var s=i(t,e),l=e.filename||t.fn||"newplot";l+="."+e.format,s.then(function(e){return t._snapshotInProgress=!1,o(e,l)}).then(function(t){r(t)}).catch(function(e){t._snapshotInProgress=!1,n(e)})})}var i=t("../plot_api/to_image"),a=t("../lib"),o=t("./filesaver");e.exports=n},{"../lib":728,"../plot_api/to_image":765,"./filesaver":849}],849:[function(t,e,r){"use strict";var n=function(t,e){var r=document.createElement("a"),n="download"in r,i=/Version\/[\d\.]+.*Safari/.test(navigator.userAgent);return new Promise(function(a,o){if("undefined"!=typeof navigator&&/MSIE [1-9]\./.test(navigator.userAgent)&&o(new Error("IE < 10 unsupported")),i&&(document.location.href="data:application/octet-stream"+t.slice(t.search(/[,;]/)),a(e)),e||(e="download"),n&&(r.href=t,r.download=e,document.body.appendChild(r),r.click(),document.body.removeChild(r),a(e)),"undefined"!=typeof navigator&&navigator.msSaveBlob){var s=t.split(/^data:image\/svg\+xml,/)[1],l=decodeURIComponent(s);navigator.msSaveBlob(new Blob([l]),e),a(e)}o(new Error("download error"))})};e.exports=n},{}],850:[function(t,e,r){"use strict";r.getDelay=function(t){return t._has&&(t._has("gl3d")||t._has("gl2d"))?500:0},r.getRedrawFunc=function(t){if(!(t.data&&t.data[0]&&t.data[0].r))return function(){(t.calcdata||[]).forEach(function(t){t[0]&&t[0].t&&t[0].t.cb&&t[0].t.cb()})}}},{}],851:[function(t,e,r){"use strict";var n=t("./helpers"),i={getDelay:n.getDelay,getRedrawFunc:n.getRedrawFunc,clone:t("./cloneplot"),toSVG:t("./tosvg"),svgToImg:t("./svgtoimg"),toImage:t("./toimage"),downloadImage:t("./download")};e.exports=i},{"./cloneplot":847,"./download":848,"./helpers":850,"./svgtoimg":852,"./toimage":853,"./tosvg":854}],852:[function(t,e,r){"use strict";function n(t){var e=t.emitter||new a,r=new Promise(function(n,a){var o=window.Image,s=t.svg,l=t.format||"png";if(i.isIE()&&"svg"!==l){var u=new Error("Sorry IE does not support downloading from canvas. Try {format:'svg'} instead.");return a(u),t.promise?r:e.emit("error",u)}var c=t.canvas,h=t.scale||1,f=t.width||300,d=t.height||150,p=h*f,m=h*d,g=c.getContext("2d"),v=new o,y="data:image/svg+xml,"+encodeURIComponent(s);c.width=p,c.height=m,v.onload=function(){var r;switch("svg"!==l&&g.drawImage(v,0,0,p,m),l){case"jpeg":r=c.toDataURL("image/jpeg");break;case"png":r=c.toDataURL("image/png");break;case"webp":r=c.toDataURL("image/webp");break;case"svg":r=y;break;default:var i="Image format is not jpeg, png, svg or webp.";if(a(new Error(i)),!t.promise)return e.emit("error",i)}n(r),t.promise||e.emit("success",r)},v.onerror=function(r){if(a(r),!t.promise)return e.emit("error",r)},v.src=y});return t.promise?r:e}var i=t("../lib"),a=t("events").EventEmitter;e.exports=n},{"../lib":728,events:129}],853:[function(t,e,r){"use strict";function n(t,e){function r(){var t=s.getDelay(f._fullLayout);setTimeout(function(){var t=u(f),r=document.createElement("canvas");r.id=o.randstr(),n=c({format:e.format,width:f._fullLayout.width,height:f._fullLayout.height,canvas:r,emitter:n,svg:t}),n.clean=function(){f&&document.body.removeChild(f)}},t)}var n=new i,h=l(t,{format:"png"}),f=h.gd;f.style.position="absolute",f.style.left="-5000px",document.body.appendChild(f);var d=s.getRedrawFunc(f);return a.plot(f,h.data,h.layout,h.config).then(d).then(r).catch(function(t){n.emit("error",t)}),n}var i=t("events").EventEmitter,a=t("../plotly"),o=t("../lib"),s=t("./helpers"),l=t("./cloneplot"),u=t("./tosvg"),c=t("./svgtoimg");e.exports=n},{"../lib":728,"../plotly":767,"./cloneplot":847,"./helpers":850,"./svgtoimg":852,"./tosvg":854,events:129}],854:[function(t,e,r){"use strict";function n(t){var e=a.select("body").append("div").style({display:"none"}).html(""),r=t.replace(/(&[^;]*;)/gi,function(t){return"&lt;"===t?"&#60;":"&rt;"===t?"&#62;":-1!==t.indexOf("<")||-1!==t.indexOf(">")?"":e.html(t).text()});return e.remove(),r}function i(t){return t.replace(/&(?!\w+;|\#[0-9]+;| \#x[0-9A-F]+;)/g,"&amp;")}var a=t("d3"),o=t("../lib"),s=t("../components/drawing"),l=t("../components/color"),u=t("../constants/xmlns_namespaces"),c=/"/g,h=new RegExp('("TOBESTRIPPED)|(TOBESTRIPPED")',"g");e.exports=function(t,e,r){var f,d=t._fullLayout,p=d._paper,m=d._toppaper,g=d.width,v=d.height;p.insert("rect",":first-child").call(s.setRect,0,0,g,v).call(l.fill,d.paper_bgcolor);var y=d._basePlotModules||[];for(f=0;f<y.length;f++){var b=y[f];b.toSVG&&b.toSVG(t)}if(m){var x=m.node().childNodes,_=Array.prototype.slice.call(x);for(f=0;f<_.length;f++){var w=_[f];w.childNodes.length&&p.node().appendChild(w)}}d._draggers&&d._draggers.remove(),p.node().style.background="",p.selectAll("text").attr({"data-unformatted":null,"data-math":null}).each(function(){var t=a.select(this);if("hidden"===this.style.visibility||"none"===this.style.display)return void t.remove();t.style({visibility:null,display:null});var e=this.style.fontFamily;e&&-1!==e.indexOf('"')&&t.style("font-family",e.replace(c,"TOBESTRIPPED"))}),p.selectAll(".point,.scatterpts").each(function(){var t=a.select(this),e=this.style.fill;e&&-1!==e.indexOf("url(")&&t.style("fill",e.replace(c,"TOBESTRIPPED"))}),"pdf"!==e&&"eps"!==e||p.selectAll("#MathJax_SVG_glyphs path").attr("stroke-width",0),p.node().setAttributeNS(u.xmlns,"xmlns",u.svg),p.node().setAttributeNS(u.xmlns,"xmlns:xlink",u.xlink),"svg"===e&&r&&(p.attr("width",r*g),p.attr("height",r*v),p.attr("viewBox","0 0 "+g+" "+v));var M=(new window.XMLSerializer).serializeToString(p.node());return M=n(M),M=i(M),M=M.replace(h,"'"),o.isIE()&&(M=M.replace(/"/gi,"'"),M=M.replace(/(\('#)([^']*)('\))/gi,'("#$2")'),M=M.replace(/(\\')/gi,'"')),M}},{"../components/color":604,"../components/drawing":628,"../constants/xmlns_namespaces":709,"../lib":728,d3:122}],855:[function(t,e,r){"use strict";var n=t("../../lib").mergeArray;e.exports=function(t,e){n(e.text,t,"tx"),n(e.hovertext,t,"htx");var r=e.marker;if(r){n(r.opacity,t,"mo"),n(r.color,t,"mc");var i=r.line;i&&(n(i.color,t,"mlc"),n(i.width,t,"mlw"))}}},{"../../lib":728}],856:[function(t,e,r){"use strict";var n=t("../scatter/attributes"),i=t("../../components/colorscale/color_attributes"),a=t("../../components/errorbars/attributes"),o=t("../../components/colorbar/attributes"),s=t("../../plots/font_attributes"),l=t("../../lib/extend").extendFlat,u=s({editType:"calc",arrayOk:!0}),c=n.marker,h=c.line,f=l({},h.width,{dflt:0}),d=l({width:f,editType:"calc"},i("marker.line")),p=l({line:d,editType:"calc"},i("marker"),{showscale:c.showscale,colorbar:o});e.exports={x:n.x,x0:n.x0,dx:n.dx,y:n.y,y0:n.y0,dy:n.dy,text:n.text,hovertext:n.hovertext,textposition:{valType:"enumerated",values:["inside","outside","auto","none"],dflt:"none",arrayOk:!0,editType:"calc"},textfont:l({},u,{}),insidetextfont:l({},u,{}),outsidetextfont:l({},u,{}),constraintext:{valType:"enumerated",values:["inside","outside","both","none"],dflt:"both",editType:"calc"},orientation:{valType:"enumerated",values:["v","h"],editType:"calc+clearAxisTypes"},base:{valType:"any",dflt:null,arrayOk:!0,editType:"calc"},offset:{valType:"number",dflt:null,arrayOk:!0,editType:"calc"},width:{valType:"number",dflt:null,min:0,arrayOk:!0,editType:"calc"},marker:p,r:n.r,t:n.t,error_y:a,error_x:a,_deprecated:{bardir:{valType:"enumerated",editType:"calc",values:["v","h"]}}}},{"../../components/colorbar/attributes":605,"../../components/colorscale/color_attributes":611,"../../components/errorbars/attributes":630,"../../lib/extend":717,"../../plots/font_attributes":796,"../scatter/attributes":1031}],857:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),i=t("../../plots/cartesian/axes"),a=t("../../components/colorscale/has_colorscale"),o=t("../../components/colorscale/calc"),s=t("./arrays_to_calcdata");e.exports=function(t,e){var r,l,u,c,h,f=i.getFromId(t,e.xaxis||"x"),d=i.getFromId(t,e.yaxis||"y"),p=e.orientation||(e.x&&!e.y?"h":"v");"h"===p?(r=f,u=f.makeCalcdata(e,"x"),l=d.makeCalcdata(e,"y"),h=e.xcalendar):(r=d,u=d.makeCalcdata(e,"y"),l=f.makeCalcdata(e,"x"),h=e.ycalendar);var m=Math.min(l.length,u.length),g=new Array(m);for(c=0;c<m;c++)g[c]={p:l[c],s:u[c]};var v,y=e.base;if(Array.isArray(y)){for(c=0;c<Math.min(y.length,g.length);c++)v=r.d2c(y[c],0,h),n(v)?(g[c].b=+v,g[c].hasB=1):g[c].b=0;for(;c<g.length;c++)g[c].b=0}else{v=r.d2c(y,0,h);var b=n(v);for(v=b?v:0,c=0;c<g.length;c++)g[c].b=v,b&&(g[c].hasB=1)}return a(e,"marker")&&o(e,e.marker.color,"marker","c"),a(e,"marker.line")&&o(e,e.marker.line.color,"marker.line","c"),s(g,e),g}},{"../../components/colorscale/calc":610,"../../components/colorscale/has_colorscale":617,"../../plots/cartesian/axes":772,"./arrays_to_calcdata":855,"fast-isnumeric":131}],858:[function(t,e,r){"use strict";var n=t("../../lib"),i=t("../../components/color"),a=t("../scatter/xy_defaults"),o=t("../bar/style_defaults"),s=t("../../components/errorbars/defaults"),l=t("./attributes");e.exports=function(t,e,r,u){function c(r,i){return n.coerce(t,e,l,r,i)}var h=n.coerceFont;if(!a(t,e,u,c))return void(e.visible=!1);c("orientation",e.x&&!e.y?"h":"v"),c("base"),c("offset"),c("width"),c("text"),c("hovertext");var f=c("textposition"),d=Array.isArray(f)||"auto"===f,p=d||"inside"===f,m=d||"outside"===f;if(p||m){var g=h(c,"textfont",u.font);p&&h(c,"insidetextfont",g),m&&h(c,"outsidetextfont",g),c("constraintext")}o(t,e,c,r,u),s(t,e,i.defaultLine,{axis:"y"}),s(t,e,i.defaultLine,{axis:"x",inherit:"y"})}},{"../../components/color":604,"../../components/errorbars/defaults":633,"../../lib":728,"../bar/style_defaults":868,"../scatter/xy_defaults":1054,"./attributes":856}],859:[function(t,e,r){"use strict";var n=t("../../components/fx"),i=t("../../components/errorbars"),a=t("../../components/color"),o=t("../scatter/fill_hover_text");e.exports=function(t,e,r,s){var l,u,c,h,f,d,p,m=t.cd,g=m[0].trace,v=m[0].t,y=t.xa,b=t.ya,x=function(t){return n.inbox(h(t)-l,f(t)-l)};"h"===g.orientation?(l=r,u=function(t){return t.y-t.w/2},c=function(t){return t.y+t.w/2},d=function(t){return n.inbox(t.b-e,t.x-e)+(t.x-e)/(t.x-t.b)},p=x):(l=e,u=function(t){return t.x-t.w/2},c=function(t){return t.x+t.w/2},p=function(t){return n.inbox(t.b-r,t.y-r)+(t.y-r)/(t.y-t.b)},d=x),h="closest"===s?u:function(t){return Math.min(u(t),t.p-v.bargroupwidth/2)},f="closest"===s?c:function(t){return Math.max(c(t),t.p+v.bargroupwidth/2)};var _=n.getDistanceFunction(s,d,p);if(n.getClosest(m,_,t),!1!==t.index){var w=t.index,M=m[w],k=M.mcc||g.marker.color,A=M.mlcc||g.marker.line.color,T=M.mlw||g.marker.line.width;a.opacity(k)?t.color=k:a.opacity(A)&&T&&(t.color=A);var S=g.base?M.b+M.s:M.s;return"h"===g.orientation?(t.x0=t.x1=y.c2p(M.x,!0),t.xLabelVal=S,t.y0=b.c2p(h(M),!0),t.y1=b.c2p(f(M),!0),t.yLabelVal=M.p):(t.y0=t.y1=b.c2p(M.y,!0),t.yLabelVal=S,t.x0=y.c2p(h(M),!0),t.x1=y.c2p(f(M),!0),t.xLabelVal=M.p),o(M,g,t),i.hoverInfo(M,g,t),[t]}}},{"../../components/color":604,"../../components/errorbars":634,"../../components/fx":645,"../scatter/fill_hover_text":1038}],860:[function(t,e,r){"use strict";var n={};n.attributes=t("./attributes"),n.layoutAttributes=t("./layout_attributes"),n.supplyDefaults=t("./defaults"),n.supplyLayoutDefaults=t("./layout_defaults"),n.calc=t("./calc"),n.setPositions=t("./set_positions"),n.colorbar=t("../scatter/colorbar"),n.arraysToCalcdata=t("./arrays_to_calcdata"),n.plot=t("./plot"),n.style=t("./style"),n.hoverPoints=t("./hover"),n.selectPoints=t("./select"),n.moduleType="trace",n.name="bar",n.basePlotModule=t("../../plots/cartesian"),n.categories=["cartesian","bar","oriented","markerColorscale","errorBarsOK","showLegend"],n.meta={},e.exports=n},{"../../plots/cartesian":782,"../scatter/colorbar":1034,"./arrays_to_calcdata":855,"./attributes":856,"./calc":857,"./defaults":858,"./hover":859,"./layout_attributes":861,"./layout_defaults":862,"./plot":863,"./select":864,"./set_positions":865,"./style":867}],861:[function(t,e,r){"use strict";e.exports={barmode:{valType:"enumerated",values:["stack","group","overlay","relative"],dflt:"group",editType:"calc"},barnorm:{valType:"enumerated",values:["","fraction","percent"],dflt:"",editType:"calc"},bargap:{valType:"number",min:0,max:1,editType:"calc"},bargroupgap:{valType:"number",min:0,max:1,dflt:0,editType:"calc"}}},{}],862:[function(t,e,r){"use strict";var n=t("../../registry"),i=t("../../plots/cartesian/axes"),a=t("../../lib"),o=t("./layout_attributes");e.exports=function(t,e,r){function s(r,n){return a.coerce(t,e,o,r,n)}for(var l=!1,u=!1,c=!1,h={},f=0;f<r.length;f++){var d=r[f];if(n.traceIs(d,"bar")){if(l=!0,"overlay"!==t.barmode&&"stack"!==t.barmode){var p=d.xaxis+d.yaxis;h[p]&&(c=!0),h[p]=!0}if(d.visible&&"histogram"===d.type){"category"!==i.getFromId({_fullLayout:e},d["v"===d.orientation?"xaxis":"yaxis"]).type&&(u=!0)}}}if(l){"overlay"!==s("barmode")&&s("barnorm"),s("bargap",u&&!c?0:.2),s("bargroupgap")}}},{"../../lib":728,"../../plots/cartesian/axes":772,"../../registry":846,"./layout_attributes":861}],863:[function(t,e,r){"use strict";function n(t,e,r,n,o,f,d,p){function m(e,r,n){return e.append("text").text(r).attr({class:"bartext",transform:"","text-anchor":"middle","data-notex":1}).call(k.font,n).call(w.convertToTspans,t)}var g=r[0].trace,v=g.orientation,y=s(g,n);if(y){var b=l(g,n);if("none"!==b){var x,_,M,A,T=u(g,n,t._fullLayout.font),S=c(g,n,T),E=h(g,n,T),L=t._fullLayout.barmode,C="stack"===L,I="relative"===L,D=C||I,P=r[n],O=!D||P._outmost,R=Math.abs(f-o)-2*z,F=Math.abs(p-d)-2*z;if("outside"===b&&(O||(b="inside")),"auto"===b)if(O){x=m(e,y,S),_=k.bBox(x.node()),M=_.width,A=_.height;var j=M>0&&A>0,N=M<=R&&A<=F,B=M<=F&&A<=R,U="h"===v?R>=M*(F/A):F>=A*(R/M);j&&(N||B||U)?b="inside":(b="outside",x.remove(),x=null)}else b="inside";if(!x&&(x=m(e,y,"outside"===b?E:S),_=k.bBox(x.node()),M=_.width,A=_.height,M<=0||A<=0))return void x.remove();var V,H;"outside"===b?(H="both"===g.constraintext||"outside"===g.constraintext,V=a(o,f,d,p,_,v,H)):(H="both"===g.constraintext||"inside"===g.constraintext,V=i(o,f,d,p,_,v,H)),x.attr("transform",V)}}}function i(t,e,r,n,i,a,s){var l,u,c,h,f,d=i.width,p=i.height,m=(i.left+i.right)/2,g=(i.top+i.bottom)/2,v=Math.abs(e-t),y=Math.abs(n-r);v>2*z&&y>2*z?(f=z,v-=2*f,y-=2*f):f=0;var b,x;return d<=v&&p<=y?(b=!1,x=1):d<=y&&p<=v?(b=!0,x=1):d<p==v<y?(b=!1,x=s?Math.min(v/d,y/p):1):(b=!0,x=s?Math.min(y/d,v/p):1),b&&(b=90),b?(l=x*p,u=x*d):(l=x*d,u=x*p),"h"===a?e<t?(c=e+f+l/2,h=(r+n)/2):(c=e-f-l/2,h=(r+n)/2):n>r?(c=(t+e)/2,h=n-f-u/2):(c=(t+e)/2,h=n+f+u/2),o(m,g,c,h,x,b)}function a(t,e,r,n,i,a,s){var l,u="h"===a?Math.abs(n-r):Math.abs(e-t);u>2*z&&(l=z);var c=1;s&&(c="h"===a?Math.min(1,u/i.height):Math.min(1,u/i.width));var h,f,d,p,m=(i.left+i.right)/2,g=(i.top+i.bottom)/2;return h=c*i.width,f=c*i.height,"h"===a?e<t?(d=e-l-h/2,p=(r+n)/2):(d=e+l+h/2,p=(r+n)/2):n>r?(d=(t+e)/2,p=n+l+f/2):(d=(t+e)/2,p=n-l-f/2),o(m,g,d,p,c,!1)}function o(t,e,r,n,i,a){var o,s;return i<1?o="scale("+i+") ":(i=1,o=""),s=a?"rotate("+a+" "+t+" "+e+") ":"","translate("+(r-i*t)+" "+(n-i*e)+")"+o+s}function s(t,e){var r=d(t.text,e);return p(S,r)}function l(t,e){var r=d(t.textposition,e);return m(E,r)}function u(t,e,r){return f(L,t.textfont,e,r)}function c(t,e,r){return f(C,t.insidetextfont,e,r)}function h(t,e,r){return f(I,t.outsidetextfont,e,r)}function f(t,e,r,n){e=e||{};var i=d(e.family,r),a=d(e.size,r),o=d(e.color,r);return{family:p(t.family,i,n.family),size:g(t.size,a,n.size),color:v(t.color,o,n.color)}}function d(t,e){var r;return Array.isArray(t)?e<t.length&&(r=t[e]):r=t,r}function p(t,e,r){if("string"==typeof e){if(e||!t.noBlank)return e}else if("number"==typeof e&&!t.strict)return String(e);return void 0!==r?r:t.dflt}function m(t,e,r){return t.coerceNumber&&(e=+e),-1!==t.values.indexOf(e)?e:void 0!==r?r:t.dflt}function g(t,e,r){if(b(e)){e=+e;var n=t.min,i=t.max;if(!(void 0!==n&&e<n||void 0!==i&&e>i))return e}return void 0!==r?r:t.dflt}function v(t,e,r){return x(e).isValid()?e:void 0!==r?r:t.dflt}var y=t("d3"),b=t("fast-isnumeric"),x=t("tinycolor2"),_=t("../../lib"),w=t("../../lib/svg_text_utils"),M=t("../../components/color"),k=t("../../components/drawing"),A=t("../../components/errorbars"),T=t("./attributes"),S=T.text,E=T.textposition,L=T.textfont,C=T.insidetextfont,I=T.outsidetextfont,z=3;e.exports=function(t,e,r){var i=e.xaxis,a=e.yaxis,o=t._fullLayout,s=e.plot.select(".barlayer").selectAll("g.trace.bars").data(r);s.enter().append("g").attr("class","trace bars"),s.append("g").attr("class","points").each(function(e){var r=e[0].node3=y.select(this),s=e[0].t,l=e[0].trace,u=s.poffset,c=Array.isArray(u);r.selectAll("g.point").data(_.identity).enter().append("g").classed("point",!0).each(function(r,s){function h(t){return 0===o.bargap&&0===o.bargroupgap?y.round(Math.round(t)-A,2):t}function f(t,e){return Math.abs(t-e)>=2?h(t):t>e?Math.ceil(t):Math.floor(t)}var d,p,m,g,v=r.p+(c?u[s]:u),x=v+r.w,_=r.b,w=_+r.s;if("h"===l.orientation?(m=a.c2p(v,!0),g=a.c2p(x,!0),d=i.c2p(_,!0),p=i.c2p(w,!0),r.ct=[p,(m+g)/2]):(d=i.c2p(v,!0),p=i.c2p(x,!0),m=a.c2p(_,!0),g=a.c2p(w,!0),r.ct=[(d+p)/2,g]),!(b(d)&&b(p)&&b(m)&&b(g)&&d!==p&&m!==g))return void y.select(this).remove();var k=(r.mlw+1||l.marker.line.width+1||(r.trace?r.trace.marker.line.width:0)+1)-1,A=y.round(k/2%1,2);if(!t._context.staticPlot){var T=M.opacity(r.mc||l.marker.color),S=T<1||k>.01?h:f;d=S(d,p),p=S(p,d),m=S(m,g),g=S(g,m)}var E=y.select(this);E.append("path").style("vector-effect","non-scaling-stroke").attr("d","M"+d+","+m+"V"+g+"H"+p+"V"+m+"Z"),n(t,E,e,s,d,p,m,g)})}),s.call(A.plot,e)}},{"../../components/color":604,"../../components/drawing":628,"../../components/errorbars":634,"../../lib":728,"../../lib/svg_text_utils":750,"./attributes":856,d3:122,"fast-isnumeric":131,tinycolor2:534}],864:[function(t,e,r){"use strict";var n=t("../../constants/interactions").DESELECTDIM;e.exports=function(t,e){var r,i=t.cd,a=[],o=i[0].node3;if(!1===e)for(r=0;r<i.length;r++)i[r].dim=0;else for(r=0;r<i.length;r++){var s=i[r];e.contains(s.ct)?(a.push({pointNumber:r,x:s.x,y:s.y}),s.dim=0):s.dim=1}return o.selectAll(".point").style("opacity",function(t){return t.dim?n:1}),o.selectAll("text").style("opacity",function(t){return t.dim?n:1}),a}},{"../../constants/interactions":706}],865:[function(t,e,r){"use strict";function n(t,e,r,n){if(n.length){var s,l,u,c,h,f=t._fullLayout.barmode,d="overlay"===f,p="group"===f;if(d)i(t,e,r,n);else if(p){for(s=[],l=[],u=0;u<n.length;u++)c=n[u],h=c[0].trace,void 0===h.offset?l.push(c):s.push(c);l.length&&a(t,e,r,l),s.length&&i(t,e,r,s)}else{for(s=[],l=[],u=0;u<n.length;u++)c=n[u],h=c[0].trace,void 0===h.base?l.push(c):s.push(c);l.length&&o(t,e,r,l),s.length&&i(t,e,r,s)}}}function i(t,e,r,n){for(var i=t._fullLayout.barnorm,a=!i,o=0;o<n.length;o++){var l=n[o],u=new w([l],!1,a);s(t,e,u),i?(m(t,r,u),g(t,r,u)):d(t,r,u)}}function a(t,e,r,n){var i=t._fullLayout,a=i.barnorm,o=!a,s=new w(n,!1,o);l(t,e,s),a?(m(t,r,s),g(t,r,s)):d(t,r,s)}function o(t,e,r,n){var i=t._fullLayout,a=i.barmode,o="stack"===a,l="relative"===a,u=t._fullLayout.barnorm,c=l,h=!(u||o||l),f=new w(n,c,h);s(t,e,f),p(t,r,f);for(var d=0;d<n.length;d++)for(var m=n[d],v=0;v<m.length;v++){var y=m[v];if(y.s!==b){var x=y.b+y.s===f.get(y.p,y.s);x&&(y._outmost=!0)}}u&&g(t,r,f)}function s(t,e,r){var n,i,a,o,s=t._fullLayout,l=s.bargap,f=s.bargroupgap,d=r.minDiff,p=r.traces,m=d*(1-l),g=m,v=g*(1-f),y=-v/2;for(n=0;n<p.length;n++)i=p[n],a=i[0],o=a.t,o.barwidth=v,o.poffset=y,o.bargroupwidth=m;r.binWidth=p[0][0].t.barwidth/100,u(r),c(t,e,r),h(t,e,r)}function l(t,e,r){var n,i,a,o,s=t._fullLayout,l=s.bargap,f=s.bargroupgap,d=r.positions,p=r.distinctPositions,m=r.minDiff,g=r.traces,v=d.length!==p.length,y=g.length,b=m*(1-l),x=v?b/y:b,_=x*(1-f);for(n=0;n<y;n++){i=g[n],a=i[0];var w=v?((2*n+1-y)*x-_)/2:-_/2;o=a.t,o.barwidth=_,o.poffset=w,o.bargroupwidth=b}r.binWidth=g[0][0].t.barwidth/100,u(r),c(t,e,r),h(t,e,r,v)}function u(t){var e,r,n,i,a,o,s=t.traces;for(e=0;e<s.length;e++){r=s[e],n=r[0],i=n.trace,o=n.t;var l,u=i.offset,c=o.poffset;if(Array.isArray(u)){for(l=u.slice(0,r.length),a=0;a<l.length;a++)y(l[a])||(l[a]=c);for(a=l.length;a<r.length;a++)l.push(c);o.poffset=l}else void 0!==u&&(o.poffset=u);var h=i.width,f=o.barwidth;if(Array.isArray(h)){var d=h.slice(0,r.length);for(a=0;a<d.length;a++)y(d[a])||(d[a]=f);for(a=d.length;a<r.length;a++)d.push(f);if(o.barwidth=d,void 0===u){for(l=[],a=0;a<r.length;a++)l.push(c+(f-d[a])/2);o.poffset=l}}else void 0!==h&&(o.barwidth=h,void 0===u&&(o.poffset=c+(f-h)/2))}}function c(t,e,r){for(var n=r.traces,i=v(e),a=0;a<n.length;a++)for(var o=n[a],s=o[0].t,l=s.poffset,u=Array.isArray(l),c=s.barwidth,h=Array.isArray(c),f=0;f<o.length;f++){var d=o[f],p=d.w=h?c[f]:c;d[i]=d.p+(u?l[f]:l)+p/2}}function h(t,e,r,n){var i=r.traces,a=r.distinctPositions,o=a[0],s=r.minDiff,l=s/2;_.minDtick(e,s,o,n);for(var u=Math.min.apply(Math,a)-l,c=Math.max.apply(Math,a)+l,h=0;h<i.length;h++){var f=i[h],d=f[0],p=d.trace;if(void 0!==p.width||void 0!==p.offset)for(var m=d.t,g=m.poffset,v=m.barwidth,y=Array.isArray(g),b=Array.isArray(v),x=0;x<f.length;x++){var w=f[x],M=y?g[x]:g,k=b?v[x]:v,A=w.p,T=A+M,S=T+k;u=Math.min(u,T),c=Math.max(c,S)}}_.expand(e,[u,c],{padded:!1})}function f(t,e){y(t[0])?t[0]=Math.min(t[0],e):t[0]=e,y(t[1])?t[1]=Math.max(t[1],e):t[1]=e}function d(t,e,r){for(var n=r.traces,i=v(e),a=[null,null],o=0;o<n.length;o++)for(var s=n[o],l=0;l<s.length;l++){var u=s[l],c=u.b,h=c+u.s;u[i]=h,y(e.c2l(h))&&f(a,h),u.hasB&&y(e.c2l(c))&&f(a,c)}_.expand(e,a,{tozero:!0,padded:!0})}function p(t,e,r){var n,i,a,o,s=t._fullLayout,l=s.barnorm,u=v(e),c=r.traces,h=[null,null];for(n=0;n<c.length;n++)for(i=c[n],a=0;a<i.length;a++)if(o=i[a],o.s!==b){var d=r.put(o.p,o.b+o.s),p=d+o.b+o.s;o.b=d,o[u]=p,l||(y(e.c2l(p))&&f(h,p),o.hasB&&y(e.c2l(d))&&f(h,d))}l||_.expand(e,h,{tozero:!0,padded:!0})}function m(t,e,r){for(var n=r.traces,i=0;i<n.length;i++)for(var a=n[i],o=0;o<a.length;o++){var s=a[o];s.s!==b&&r.put(s.p,s.b+s.s)}}function g(t,e,r){function n(t){y(e.c2l(t))&&(t<l-s||t>u+s||!y(l))&&(h=!0,f(c,t))}for(var i=r.traces,a=v(e),o="fraction"===t._fullLayout.barnorm?1:100,s=o/1e9,l=e.l2c(e.c2l(0)),u="stack"===t._fullLayout.barmode?o:l,c=[l,u],h=!1,d=0;d<i.length;d++)for(var p=i[d],m=0;m<p.length;m++){var g=p[m];if(g.s!==b){var x=Math.abs(o/r.get(g.p,g.s));g.b*=x,g.s*=x;var w=g.b,M=w+g.s;g[a]=M,n(M),g.hasB&&n(w)}}_.expand(e,c,{tozero:!0,padded:h})}function v(t){return t._id.charAt(0)}var y=t("fast-isnumeric"),b=t("../../constants/numerical").BADNUM,x=t("../../registry"),_=t("../../plots/cartesian/axes"),w=t("./sieve.js");e.exports=function(t,e){var r,i=e.xaxis,a=e.yaxis,o=t._fullData,s=t.calcdata,l=[],u=[];for(r=0;r<o.length;r++){var c=o[r];!0===c.visible&&x.traceIs(c,"bar")&&c.xaxis===i._id&&c.yaxis===a._id&&("h"===c.orientation?l.push(s[r]):u.push(s[r]))}n(t,i,a,u),n(t,a,i,l)}},{"../../constants/numerical":707,"../../plots/cartesian/axes":772,"../../registry":846,"./sieve.js":866,"fast-isnumeric":131}],866:[function(t,e,r){"use strict";function n(t,e,r){this.traces=t,this.separateNegativeValues=e,this.dontMergeOverlappingData=r;for(var n=1/0,o=[],s=0;s<t.length;s++){for(var l=t[s],u=0;u<l.length;u++){var c=l[u];c.p!==a&&o.push(c.p)}l[0]&&l[0].width1&&(n=Math.min(l[0].width1,n))}this.positions=o;var h=i.distinctVals(o);this.distinctPositions=h.vals,1===h.vals.length&&n!==1/0?this.minDiff=n:this.minDiff=Math.min(h.minDiff,n),this.binWidth=this.minDiff,this.bins={}}e.exports=n;var i=t("../../lib"),a=t("../../constants/numerical").BADNUM;n.prototype.put=function(t,e){var r=this.getLabel(t,e),n=this.bins[r]||0;return this.bins[r]=n+e,n},n.prototype.get=function(t,e){var r=this.getLabel(t,e);return this.bins[r]||0},n.prototype.getLabel=function(t,e){return(e<0&&this.separateNegativeValues?"v":"^")+(this.dontMergeOverlappingData?t:Math.round(t/this.binWidth))}},{"../../constants/numerical":707,"../../lib":728}],867:[function(t,e,r){"use strict";var n=t("d3"),i=t("../../components/color"),a=t("../../components/drawing"),o=t("../../components/errorbars");e.exports=function(t){var e=n.select(t).selectAll("g.trace.bars"),r=e.size(),s=t._fullLayout;e.style("opacity",function(t){return t[0].trace.opacity}).each(function(t){("stack"===s.barmode&&r>1||0===s.bargap&&0===s.bargroupgap&&!t[0].trace.marker.line.width)&&n.select(this).attr("shape-rendering","crispEdges")}),e.selectAll("g.points").each(function(t){var e=t[0].trace,r=e.marker,o=r.line,s=a.tryColorscale(r,""),l=a.tryColorscale(r,"line");n.select(this).selectAll("path").each(function(t){var e,a,u=(t.mlw+1||o.width+1)-1,c=n.select(this);e="mc"in t?t.mcc=s(t.mc):Array.isArray(r.color)?i.defaultLine:r.color,c.style("stroke-width",u+"px").call(i.fill,e),u&&(a="mlc"in t?t.mlcc=l(t.mlc):Array.isArray(o.color)?i.defaultLine:o.color,c.call(i.stroke,a))})}),e.call(o.style)}},{"../../components/color":604,"../../components/drawing":628,"../../components/errorbars":634,d3:122}],868:[function(t,e,r){"use strict";var n=t("../../components/color"),i=t("../../components/colorscale/has_colorscale"),a=t("../../components/colorscale/defaults");e.exports=function(t,e,r,o,s){r("marker.color",o),i(t,"marker")&&a(t,e,s,r,{prefix:"marker.",cLetter:"c"}),r("marker.line.color",n.defaultLine),i(t,"marker.line")&&a(t,e,s,r,{prefix:"marker.line.",cLetter:"c"}),r("marker.line.width")}},{"../../components/color":604,"../../components/colorscale/defaults":613,"../../components/colorscale/has_colorscale":617}],869:[function(t,e,r){"use strict";var n=t("../scatter/attributes"),i=t("../../components/color/attributes"),a=t("../../lib/extend").extendFlat,o=n.marker,s=o.line;e.exports={y:{valType:"data_array",editType:"calc+clearAxisTypes"},x:{valType:"data_array",editType:"calc+clearAxisTypes"},x0:{valType:"any",editType:"calc+clearAxisTypes"},y0:{valType:"any",editType:"calc+clearAxisTypes"},name:{valType:"string",editType:"calc+clearAxisTypes"},whiskerwidth:{valType:"number",min:0,max:1,dflt:.5,editType:"calcIfAutorange"},boxpoints:{valType:"enumerated",values:["all","outliers","suspectedoutliers",!1],dflt:"outliers",editType:"calcIfAutorange"},boxmean:{valType:"enumerated",values:[!0,"sd",!1],dflt:!1,editType:"calcIfAutorange"},jitter:{valType:"number",min:0,max:1,editType:"calcIfAutorange"},pointpos:{valType:"number",min:-2,max:2,editType:"calcIfAutorange"},orientation:{valType:"enumerated",values:["v","h"],editType:"calc+clearAxisTypes"},marker:{outliercolor:{valType:"color",dflt:"rgba(0, 0, 0, 0)",editType:"style"},symbol:a({},o.symbol,{arrayOk:!1,editType:"plot"}),opacity:a({},o.opacity,{arrayOk:!1,dflt:1,editType:"style"}),size:a({},o.size,{arrayOk:!1,editType:"calcIfAutorange"}),color:a({},o.color,{arrayOk:!1,editType:"style"}),line:{color:a({},s.color,{arrayOk:!1,dflt:i.defaultLine,editType:"style"}),width:a({},s.width,{arrayOk:!1,dflt:0,editType:"style"}),outliercolor:{valType:"color",editType:"style"},outlierwidth:{valType:"number",min:0,dflt:1,editType:"style"},editType:"style"},editType:"plot"},line:{color:{valType:"color",editType:"style"},width:{valType:"number",min:0,dflt:2,editType:"style"},editType:"plot"},fillcolor:n.fillcolor}},{"../../components/color/attributes":603,"../../lib/extend":717,"../scatter/attributes":1031}],870:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),i=t("../../lib"),a=t("../../plots/cartesian/axes");e.exports=function(t,e){var r,o,s,l,u,c,h,f,d,p=a.getFromId(t,e.xaxis||"x"),m=a.getFromId(t,e.yaxis||"y"),g=e.orientation,v=[];"h"===g?(r=p,o="x",u=m,c="y"):(r=m,o="y",u=p,c="x"),s=r.makeCalcdata(e,o),a.expand(r,s,{padded:!0}),h=function(t,e,r,a,o){var s;return r in e?h=a.makeCalcdata(e,r):(s=r+"0"in e?e[r+"0"]:"name"in e&&("category"===a.type||n(e.name)&&-1!==["linear","log"].indexOf(a.type)||i.isDateTime(e.name)&&"date"===a.type)?e.name:t.numboxes,s=a.d2c(s,0,e[r+"calendar"]),h=o.map(function(){return s})),h}(t,e,c,u,s);var y=i.distinctVals(h);return f=y.vals,d=y.minDiff/2,l=function(t,e,r,a,o){var s,l,u,c,h=a.length,f=e.length,d=[],p=[];for(s=0;s<h;++s)l=a[s],t[s]={pos:l},p[s]=l-o,d[s]=[];for(p.push(a[h-1]+o),s=0;s<f;++s)c=e[s],n(c)&&(u=i.findBin(r[s],p))>=0&&u<f&&d[u].push(c);return d}(v,s,h,f,d),function(t,e){var r,n,a,o;for(o=0;o<e.length;++o)r=e[o].sort(i.sorterAsc),n=r.length,a=t[o],a.val=r,a.min=r[0],a.max=r[n-1],a.mean=i.mean(r,n),a.sd=i.stdev(r,n,a.mean),a.q1=i.interp(r,.25),a.med=i.interp(r,.5),a.q3=i.interp(r,.75),a.lf=Math.min(a.q1,r[Math.min(i.findBin(2.5*a.q1-1.5*a.q3,r,!0)+1,n-1)]),a.uf=Math.max(a.q3,r[Math.max(i.findBin(2.5*a.q3-1.5*a.q1,r),0)]),a.lo=4*a.q1-3*a.q3,a.uo=4*a.q3-3*a.q1}(v,l),v=v.filter(function(t){return t.val&&t.val.length}),v.length?(v[0].t={boxnum:t.numboxes,dPos:d},t.numboxes++,v):[{t:{emptybox:!0}}]}},{"../../lib":728,"../../plots/cartesian/axes":772,"fast-isnumeric":131}],871:[function(t,e,r){
"use strict";var n=t("../../lib"),i=t("../../registry"),a=t("../../components/color"),o=t("./attributes");e.exports=function(t,e,r,s){function l(r,i){return n.coerce(t,e,o,r,i)}var u,c=l("y"),h=l("x");if(c&&c.length)u="v",h||l("x0");else{if(!h||!h.length)return void(e.visible=!1);u="h",l("y0")}i.getComponentMethod("calendars","handleTraceDefaults")(t,e,["x","y"],s),l("orientation",u),l("line.color",(t.marker||{}).color||r),l("line.width",2),l("fillcolor",a.addOpacity(e.line.color,.5)),l("whiskerwidth"),l("boxmean");var f=n.coerce2(t,e,o,"marker.outliercolor"),d=l("marker.line.outliercolor"),p=f||d?l("boxpoints","suspectedoutliers"):l("boxpoints");p&&(l("jitter","all"===p?.3:0),l("pointpos","all"===p?-1.5:0),l("marker.symbol"),l("marker.opacity"),l("marker.size"),l("marker.color",e.line.color),l("marker.line.color"),l("marker.line.width"),"suspectedoutliers"===p&&(l("marker.line.outliercolor",e.marker.color),l("marker.line.outlierwidth")))}},{"../../components/color":604,"../../lib":728,"../../registry":846,"./attributes":869}],872:[function(t,e,r){"use strict";var n=t("../../plots/cartesian/axes"),i=t("../../lib"),a=t("../../components/fx"),o=t("../../components/color");e.exports=function(t,e,r,s){var l,u,c,h,f,d,p,m,g,v=t.cd,y=v[0].trace,b=v[0].t,x=t.xa,_=t.ya,w=[];if(h="closest"===s?2.5*b.bdPos:b.bdPos,"h"===y.orientation?(l=function(t){return a.inbox(t.min-e,t.max-e)},u=function(t){var e=t.pos+b.bPos-r;return a.inbox(e-h,e+h)},f="y",d=_,m="x",g=x):(l=function(t){var r=t.pos+b.bPos-e;return a.inbox(r-h,r+h)},u=function(t){return a.inbox(t.min-r,t.max-r)},f="x",d=x,m="y",g=_),c=a.getDistanceFunction(s,l,u),a.getClosest(v,c,t),!1!==t.index){var M=v[t.index],k=y.line.color,A=(y.marker||{}).color;o.opacity(k)&&y.line.width?t.color=k:o.opacity(A)&&y.boxpoints?t.color=A:t.color=y.fillcolor,t[f+"0"]=d.c2p(M.pos+b.bPos-b.bdPos,!0),t[f+"1"]=d.c2p(M.pos+b.bPos+b.bdPos,!0),n.tickText(d,d.c2l(M.pos),"hover").text,t[f+"LabelVal"]=M.pos;var T,S,E={},L=["med","min","q1","q3","max"];y.boxmean&&L.push("mean"),y.boxpoints&&[].push.apply(L,["lf","uf"]);for(var C=0;C<L.length;C++)(T=L[C])in M&&!(M[T]in E)&&(E[M[T]]=!0,p=g.c2p(M[T],!0),S=i.extendFlat({},t),S[m+"0"]=S[m+"1"]=p,S[m+"LabelVal"]=M[T],S.attr=T,"mean"===T&&"sd"in M&&"sd"===y.boxmean&&(S[m+"err"]=M.sd),t.name="",w.push(S));return w}}},{"../../components/color":604,"../../components/fx":645,"../../lib":728,"../../plots/cartesian/axes":772}],873:[function(t,e,r){"use strict";var n={};n.attributes=t("./attributes"),n.layoutAttributes=t("./layout_attributes"),n.supplyDefaults=t("./defaults"),n.supplyLayoutDefaults=t("./layout_defaults"),n.calc=t("./calc"),n.setPositions=t("./set_positions"),n.plot=t("./plot"),n.style=t("./style"),n.hoverPoints=t("./hover"),n.moduleType="trace",n.name="box",n.basePlotModule=t("../../plots/cartesian"),n.categories=["cartesian","symbols","oriented","box","showLegend"],n.meta={},e.exports=n},{"../../plots/cartesian":782,"./attributes":869,"./calc":870,"./defaults":871,"./hover":872,"./layout_attributes":874,"./layout_defaults":875,"./plot":876,"./set_positions":877,"./style":878}],874:[function(t,e,r){"use strict";e.exports={boxmode:{valType:"enumerated",values:["group","overlay"],dflt:"overlay",editType:"calc"},boxgap:{valType:"number",min:0,max:1,dflt:.3,editType:"calc"},boxgroupgap:{valType:"number",min:0,max:1,dflt:.3,editType:"calc"}}},{}],875:[function(t,e,r){"use strict";var n=t("../../registry"),i=t("../../lib"),a=t("./layout_attributes");e.exports=function(t,e,r){function o(r,n){return i.coerce(t,e,a,r,n)}for(var s,l=0;l<r.length;l++)if(n.traceIs(r[l],"box")){s=!0;break}s&&(o("boxmode"),o("boxgap"),o("boxgroupgap"))}},{"../../lib":728,"../../registry":846,"./layout_attributes":874}],876:[function(t,e,r){"use strict";function n(){l=2e9}function i(){var t=l;return l=(69069*l+1)%4294967296,Math.abs(l-t)<429496729?i():l/4294967296}var a=t("d3"),o=t("../../lib"),s=t("../../components/drawing"),l=2e9;e.exports=function(t,e,r){var l,u,c=t._fullLayout,h=e.xaxis,f=e.yaxis;e.plot.select(".boxlayer").selectAll("g.trace.boxes").data(r).enter().append("g").attr("class","trace boxes").each(function(e){var r=e[0].t,d=e[0].trace,p="group"===c.boxmode&&t.numboxes>1,m=r.dPos*(1-c.boxgap)*(1-c.boxgroupgap)/(p?t.numboxes:1),g=p?2*r.dPos*((r.boxnum+.5)/t.numboxes-.5)*(1-c.boxgap):0,v=m*d.whiskerwidth;if(!0!==d.visible||r.emptybox)return void a.select(this).remove();"h"===d.orientation?(l=f,u=h):(l=h,u=f),r.bPos=g,r.bdPos=m,n(),a.select(this).selectAll("path.box").data(o.identity).enter().append("path").style("vector-effect","non-scaling-stroke").attr("class","box").each(function(t){var e=l.c2p(t.pos+g,!0),r=l.c2p(t.pos+g-m,!0),n=l.c2p(t.pos+g+m,!0),i=l.c2p(t.pos+g-v,!0),s=l.c2p(t.pos+g+v,!0),c=u.c2p(t.q1,!0),h=u.c2p(t.q3,!0),f=o.constrain(u.c2p(t.med,!0),Math.min(c,h)+1,Math.max(c,h)-1),p=u.c2p(!1===d.boxpoints?t.min:t.lf,!0),y=u.c2p(!1===d.boxpoints?t.max:t.uf,!0);"h"===d.orientation?a.select(this).attr("d","M"+f+","+r+"V"+n+"M"+c+","+r+"V"+n+"H"+h+"V"+r+"ZM"+c+","+e+"H"+p+"M"+h+","+e+"H"+y+(0===d.whiskerwidth?"":"M"+p+","+i+"V"+s+"M"+y+","+i+"V"+s)):a.select(this).attr("d","M"+r+","+f+"H"+n+"M"+r+","+c+"H"+n+"V"+h+"H"+r+"ZM"+e+","+c+"V"+p+"M"+e+","+h+"V"+y+(0===d.whiskerwidth?"":"M"+i+","+p+"H"+s+"M"+i+","+y+"H"+s))}),d.boxpoints&&a.select(this).selectAll("g.points").data(function(t){return t.forEach(function(t){t.t=r,t.trace=d}),t}).enter().append("g").attr("class","points").selectAll("path").data(function(t){var e,r,n,a,s,l,u,c="all"===d.boxpoints?t.val:t.val.filter(function(e){return e<t.lf||e>t.uf}),h=Math.max((t.max-t.min)/10,t.q3-t.q1),f=1e-9*h,p=.01*h,v=[],y=0;if(d.jitter){if(0===h)for(y=1,v=new Array(c.length),e=0;e<c.length;e++)v[e]=1;else for(e=0;e<c.length;e++)r=Math.max(0,e-5),a=c[r],n=Math.min(c.length-1,e+5),s=c[n],"all"!==d.boxpoints&&(c[e]<t.lf?s=Math.min(s,t.lf):a=Math.max(a,t.uf)),l=Math.sqrt(p*(n-r)/(s-a+f))||0,l=o.constrain(Math.abs(l),0,1),v.push(l),y=Math.max(l,y);u=2*d.jitter/y}return c.map(function(e,r){var n,a=d.pointpos;return d.jitter&&(a+=u*v[r]*(i()-.5)),n="h"===d.orientation?{y:t.pos+a*m+g,x:e}:{x:t.pos+a*m+g,y:e},"suspectedoutliers"===d.boxpoints&&e<t.uo&&e>t.lo&&(n.so=!0),n})}).enter().append("path").classed("point",!0).call(s.translatePoints,h,f),d.boxmean&&a.select(this).selectAll("path.mean").data(o.identity).enter().append("path").attr("class","mean").style({fill:"none","vector-effect":"non-scaling-stroke"}).each(function(t){var e=l.c2p(t.pos+g,!0),r=l.c2p(t.pos+g-m,!0),n=l.c2p(t.pos+g+m,!0),i=u.c2p(t.mean,!0),o=u.c2p(t.mean-t.sd,!0),s=u.c2p(t.mean+t.sd,!0);"h"===d.orientation?a.select(this).attr("d","M"+i+","+r+"V"+n+("sd"!==d.boxmean?"":"m0,0L"+o+","+e+"L"+i+","+r+"L"+s+","+e+"Z")):a.select(this).attr("d","M"+r+","+i+"H"+n+("sd"!==d.boxmean?"":"m0,0L"+e+","+o+"L"+r+","+i+"L"+e+","+s+"Z"))})})}},{"../../components/drawing":628,"../../lib":728,d3:122}],877:[function(t,e,r){"use strict";var n=t("../../registry"),i=t("../../plots/cartesian/axes"),a=t("../../lib");e.exports=function(t,e){var r,o,s,l,u=t._fullLayout,c=e.xaxis,h=e.yaxis,f=["v","h"];for(o=0;o<f.length;++o){var d,p,m,g=f[o],v=[],y=[],b=0,x=0;for(r="h"===g?h:c,s=0;s<t.calcdata.length;++s)d=t.calcdata[s],p=d[0].t,m=d[0].trace,!0===m.visible&&n.traceIs(m,"box")&&!p.emptybox&&m.orientation===g&&m.xaxis===c._id&&m.yaxis===h._id&&(v.push(s),!1!==m.boxpoints&&(b=Math.max(b,m.jitter-m.pointpos-1),x=Math.max(x,m.jitter+m.pointpos-1)));for(s=0;s<v.length;s++)for(d=t.calcdata[v[s]],l=0;l<d.length;l++)y.push(d[l].pos);if(y.length){var _=a.distinctVals(y),w=_.minDiff/2;for(y.length===_.vals.length&&(t.numboxes=1),i.minDtick(r,_.minDiff,_.vals[0],!0),o=0;o<v.length;o++){var M=v[o];t.calcdata[M][0].t.dPos=w}var k=(1-u.boxgap)*(1-u.boxgroupgap)*w/t.numboxes;i.expand(r,_.vals,{vpadminus:w+b*k,vpadplus:w+x*k})}}}},{"../../lib":728,"../../plots/cartesian/axes":772,"../../registry":846}],878:[function(t,e,r){"use strict";var n=t("d3"),i=t("../../components/color"),a=t("../../components/drawing");e.exports=function(t){n.select(t).selectAll("g.trace.boxes").style("opacity",function(t){return t[0].trace.opacity}).each(function(e){var r=e[0].trace,o=r.line.width;n.select(this).selectAll("path.box").style("stroke-width",o+"px").call(i.stroke,r.line.color).call(i.fill,r.fillcolor),n.select(this).selectAll("path.mean").style({"stroke-width":o,"stroke-dasharray":2*o+"px,"+o+"px"}).call(i.stroke,r.line.color),n.select(this).selectAll("g.points path").call(a.pointStyle,r,t)})}},{"../../components/color":604,"../../components/drawing":628,d3:122}],879:[function(t,e,r){"use strict";function n(t){return{name:a.increasing.name,showlegend:a.increasing.showlegend,line:{color:i({},o.line.color,{dflt:t}),width:o.line.width,editType:"style"},fillcolor:o.fillcolor,editType:"style"}}var i=t("../../lib").extendFlat,a=t("../ohlc/attributes"),o=t("../box/attributes");e.exports={x:a.x,open:a.open,high:a.high,low:a.low,close:a.close,line:{width:i({},o.line.width,{}),editType:"style"},increasing:n(a.increasing.line.color.dflt),decreasing:n(a.decreasing.line.color.dflt),text:a.text,whiskerwidth:i({},o.whiskerwidth,{dflt:0})}},{"../../lib":728,"../box/attributes":869,"../ohlc/attributes":990}],880:[function(t,e,r){"use strict";function n(t,e,r,n){o(t,e,r,n),r(n+".line.color"),r(n+".line.width",e.line.width),r(n+".fillcolor")}var i=t("../../lib"),a=t("../ohlc/ohlc_defaults"),o=t("../ohlc/direction_defaults"),s=t("../ohlc/helpers"),l=t("./attributes");e.exports=function(t,e,r,o){function u(r,n){return i.coerce(t,e,l,r,n)}if(s.pushDummyTransformOpts(t,e),0===a(t,e,u,o))return void(e.visible=!1);u("line.width"),n(t,e,u,"increasing"),n(t,e,u,"decreasing"),u("text"),u("whiskerwidth")}},{"../../lib":728,"../ohlc/direction_defaults":992,"../ohlc/helpers":993,"../ohlc/ohlc_defaults":995,"./attributes":879}],881:[function(t,e,r){"use strict";var n=t("../../plot_api/register");e.exports={moduleType:"trace",name:"candlestick",basePlotModule:t("../../plots/cartesian"),categories:["cartesian","showLegend","candlestick"],meta:{},attributes:t("./attributes"),supplyDefaults:t("./defaults")},n(t("../box")),n(t("./transform"))},{"../../plot_api/register":762,"../../plots/cartesian":782,"../box":873,"./attributes":879,"./defaults":880,"./transform":882}],882:[function(t,e,r){"use strict";function n(t,e,r){var n={type:"box",boxpoints:!1,visible:t.visible,hoverinfo:t.hoverinfo,opacity:t.opacity,xaxis:t.xaxis,yaxis:t.yaxis,transforms:o.makeTransform(t,e,r)},i=t[r];return i&&a.extendFlat(n,{x:t.x||[0],xcalendar:t.xcalendar,y:[].concat(t.low).concat(t.high),whiskerwidth:t.whiskerwidth,text:t.text,name:i.name,showlegend:i.showlegend,line:i.line,fillcolor:i.fillcolor}),n}var i=t("fast-isnumeric"),a=t("../../lib"),o=t("../ohlc/helpers");r.moduleType="transform",r.name="candlestick",r.attributes={},r.supplyDefaults=function(t,e,r,n){return o.clearEphemeralTransformOpts(n),o.copyOHLC(t,e),t},r.transform=function(t,e){for(var r=[],i=0;i<t.length;i++){var a=t[i];"candlestick"===a.type?r.push(n(a,e,"increasing"),n(a,e,"decreasing")):r.push(a)}return o.addRangeSlider(r,e.layout),r},r.calcTransform=function(t,e,r){for(var n=r.direction,a=o.getFilterFn(n),s=e.open,l=e.high,u=e.low,c=e.close,h=s.length,f=[],d=[],p=e._fullInput.x?function(t){var r=e.x[t];f.push(r,r,r,r,r,r)}:function(t){f.push(t,t,t,t,t,t)},m=0;m<h;m++)a(s[m],c[m])&&i(l[m])&&i(u[m])&&(p(m),function(t,e,r,n){d.push(r,t,n,n,n,e)}(s[m],l[m],u[m],c[m]));e.x=f,e.y=d}},{"../../lib":728,"../ohlc/helpers":993,"fast-isnumeric":131}],883:[function(t,e,r){"use strict";function n(t,e,r,n){["aaxis","baxis"].forEach(function(a){var o=a.charAt(0),s=t[a]||{},l={},u={tickfont:"x",id:o+"axis",letter:o,font:e.font,name:a,data:t[o],calendar:e.calendar,dfltColor:n,bgColor:r.paper_bgcolor,fullLayout:r};i(s,l,u),l._categories=l._categories||[],e[a]=l,t[a]||"-"===s.type||(t[a]={type:s.type})})}var i=t("./axis_defaults");e.exports=function(t,e,r,i,a){i("a")||(i("da"),i("a0")),i("b")||(i("db"),i("b0")),n(t,e,r,a)}},{"./axis_defaults":888}],884:[function(t,e,r){"use strict";function n(t,e){if(!Array.isArray(t)||e>=10)return null;for(var r=1/0,i=-1/0,a=t.length,o=0;o<a;o++){var s=t[o];if(Array.isArray(s)){var l=n(s,e+1);l&&(r=Math.min(l[0],r),i=Math.max(l[1],i))}else r=Math.min(s,r),i=Math.max(s,i)}return[r,i]}e.exports=function(t){return n(t,0)}},{}],885:[function(t,e,r){"use strict";var n=t("../../plots/font_attributes"),i=t("./axis_attributes"),a=t("../../components/color/attributes"),o=n({editType:"calc"});o.family.dflt='"Open Sans", verdana, arial, sans-serif',o.size.dflt=12,o.color.dflt=a.defaultLine,e.exports={carpet:{valType:"string",editType:"calc"},x:{valType:"data_array",editType:"calc+clearAxisTypes"},y:{valType:"data_array",editType:"calc+clearAxisTypes"},a:{valType:"data_array",editType:"calc"},a0:{valType:"number",dflt:0,editType:"calc"},da:{valType:"number",dflt:1,editType:"calc"},b:{valType:"data_array",editType:"calc"},b0:{valType:"number",dflt:0,editType:"calc"},db:{valType:"number",dflt:1,editType:"calc"},cheaterslope:{valType:"number",dflt:1,editType:"calc"},aaxis:i,baxis:i,font:o,color:{valType:"color",dflt:a.defaultLine,editType:"plot"}}},{"../../components/color/attributes":603,"../../plots/font_attributes":796,"./axis_attributes":887}],886:[function(t,e,r){"use strict";e.exports=function(t,e,r,n){var i,a,o,s,l,u,c,h,f,d,p,m,g,v=Array.isArray(r)?"a":"b",y="a"===v?t.aaxis:t.baxis,b=y.smoothing,x="a"===v?t.a2i:t.b2j,_="a"===v?r:n,w="a"===v?n:r,M="a"===v?e.a.length:e.b.length,k="a"===v?e.b.length:e.a.length,A=Math.floor("a"===v?t.b2j(w):t.a2i(w)),T="a"===v?function(e){return t.evalxy([],e,A)}:function(e){return t.evalxy([],A,e)};b&&(o=Math.max(0,Math.min(k-2,A)),s=A-o,a="a"===v?function(e,r){return t.dxydi([],e,o,r,s)}:function(e,r){return t.dxydj([],o,e,s,r)});var S=x(_[0]),E=x(_[1]),L=S<E?1:-1,C=1e-8*(E-S),I=L>0?Math.floor:Math.ceil,z=L>0?Math.ceil:Math.floor,D=L>0?Math.min:Math.max,P=L>0?Math.max:Math.min,O=I(S+C),R=z(E-C);c=T(S);var F=[[c]];for(i=O;i*L<R*L;i+=L)l=[],p=P(S,i),m=D(E,i+L),g=m-p,u=Math.max(0,Math.min(M-2,Math.floor(.5*(p+m)))),h=T(m),b&&(f=a(u,p-u),d=a(u,m-u),l.push([c[0]+f[0]/3*g,c[1]+f[1]/3*g]),l.push([h[0]-d[0]/3*g,h[1]-d[1]/3*g])),l.push(h),F.push(l),c=h;return F}},{}],887:[function(t,e,r){"use strict";var n=t("../../plots/font_attributes"),i=t("../../components/color/attributes");e.exports={color:{valType:"color",editType:"calc"},smoothing:{valType:"number",dflt:1,min:0,max:1.3,editType:"calc"},title:{valType:"string",editType:"calc"},titlefont:n({editType:"calc"}),titleoffset:{valType:"number",dflt:10,editType:"calc"},type:{valType:"enumerated",values:["-","linear","date","category"],dflt:"-",editType:"calc"},autorange:{valType:"enumerated",values:[!0,!1,"reversed"],dflt:!0,editType:"calc"},rangemode:{valType:"enumerated",values:["normal","tozero","nonnegative"],dflt:"normal",editType:"calc"},range:{valType:"info_array",editType:"calc",items:[{valType:"any",editType:"calc"},{valType:"any",editType:"calc"}]},fixedrange:{valType:"boolean",dflt:!1,editType:"calc"},cheatertype:{valType:"enumerated",values:["index","value"],dflt:"value",editType:"calc"},tickmode:{valType:"enumerated",values:["linear","array"],dflt:"array",editType:"calc"},nticks:{valType:"integer",min:0,dflt:0,editType:"calc"},tickvals:{valType:"data_array",editType:"calc"},ticktext:{valType:"data_array",editType:"calc"},showticklabels:{valType:"enumerated",values:["start","end","both","none"],dflt:"start",editType:"calc"},tickfont:n({editType:"calc"}),tickangle:{valType:"angle",dflt:"auto",editType:"calc"},tickprefix:{valType:"string",dflt:"",editType:"calc"},showtickprefix:{valType:"enumerated",values:["all","first","last","none"],dflt:"all",editType:"calc"},ticksuffix:{valType:"string",dflt:"",editType:"calc"},showticksuffix:{valType:"enumerated",values:["all","first","last","none"],dflt:"all",editType:"calc"},showexponent:{valType:"enumerated",values:["all","first","last","none"],dflt:"all",editType:"calc"},exponentformat:{valType:"enumerated",values:["none","e","E","power","SI","B"],dflt:"B",editType:"calc"},separatethousands:{valType:"boolean",dflt:!1,editType:"calc"},tickformat:{valType:"string",dflt:"",editType:"calc"},categoryorder:{valType:"enumerated",values:["trace","category ascending","category descending","array"],dflt:"trace",editType:"calc"},categoryarray:{valType:"data_array",editType:"calc"},labelpadding:{valType:"integer",dflt:10,editType:"calc"},labelprefix:{valType:"string",editType:"calc"},labelsuffix:{valType:"string",dflt:"",editType:"calc"},showline:{valType:"boolean",dflt:!1,editType:"calc"},linecolor:{valType:"color",dflt:i.defaultLine,editType:"calc"},linewidth:{valType:"number",min:0,dflt:1,editType:"calc"},gridcolor:{valType:"color",editType:"calc"},gridwidth:{valType:"number",min:0,dflt:1,editType:"calc"},showgrid:{valType:"boolean",dflt:!0,editType:"calc"},minorgridcount:{valType:"integer",min:0,dflt:0,editType:"calc"},minorgridwidth:{valType:"number",min:0,dflt:1,editType:"calc"},minorgridcolor:{valType:"color",dflt:i.lightLine,editType:"calc"},startline:{valType:"boolean",editType:"calc"},startlinecolor:{valType:"color",editType:"calc"},startlinewidth:{valType:"number",dflt:1,editType:"calc"},endline:{valType:"boolean",editType:"calc"},endlinewidth:{valType:"number",dflt:1,editType:"calc"},endlinecolor:{valType:"color",editType:"calc"},tick0:{valType:"number",min:0,dflt:0,editType:"calc"},dtick:{valType:"number",min:0,dflt:1,editType:"calc"},arraytick0:{valType:"integer",min:0,dflt:0,editType:"calc"},arraydtick:{valType:"integer",min:1,dflt:1,editType:"calc"},editType:"calc"}},{"../../components/color/attributes":603,"../../plots/font_attributes":796}],888:[function(t,e,r){"use strict";function n(t,e){if("-"===t.type){var r=t._id,n=r.charAt(0),i=n+"calendar",a=t[i];t.type=d(e,a)}}var i=t("./attributes"),a=t("../../components/color").addOpacity,o=t("../../registry"),s=t("../../lib"),l=t("../../plots/cartesian/tick_value_defaults"),u=t("../../plots/cartesian/tick_label_defaults"),c=t("../../plots/cartesian/category_order_defaults"),h=t("../../plots/cartesian/set_convert"),f=t("../../plots/cartesian/ordered_categories"),d=t("../../plots/cartesian/axis_autotype");e.exports=function(t,e,r){function d(r,n){return s.coerce(t,e,v,r,n)}function p(r,n){return s.coerce2(t,e,v,r,n)}var m=r.letter,g=r.font||{},v=i[m+"axis"];r.noHover=!0,r.name&&(e._name=r.name,e._id=r.name);var y=d("type");if("-"===y&&(r.data&&n(e,r.data),"-"===e.type?e.type="linear":y=t.type=e.type),d("smoothing"),d("cheatertype"),d("showticklabels"),d("labelprefix",m+" = "),d("labelsuffix"),d("showtickprefix"),d("showticksuffix"),d("separatethousands"),d("tickformat"),d("exponentformat"),d("showexponent"),d("categoryorder"),d("tickmode"),d("tickvals"),d("ticktext"),d("tick0"),d("dtick"),"array"===e.tickmode&&(d("arraytick0"),d("arraydtick")),d("labelpadding"),e._hovertitle=m,"date"===y){o.getComponentMethod("calendars","handleDefaults")(t,e,"calendar",r.calendar)}h(e,r.fullLayout);var b=d("color",r.dfltColor),x=b===t.color?b:g.color;d("title"),s.coerceFont(d,"titlefont",{family:g.family,size:Math.round(1.2*g.size),color:x}),d("titleoffset"),d("tickangle"),d("autorange",!e.isValidRange(t.range))&&d("rangemode"),d("range"),e.cleanRange(),d("fixedrange"),l(t,e,d,y),u(t,e,d,y,r),c(t,e,d);var _=p("gridcolor",a(b,.3)),w=p("gridwidth"),M=d("showgrid");M||(delete e.gridcolor,delete e.gridwidth);var k=p("startlinecolor",b),A=p("startlinewidth",w);d("startline",e.showgrid||!!k||!!A)||(delete e.startlinecolor,delete e.startlinewidth);var T=p("endlinecolor",b),S=p("endlinewidth",w);return d("endline",e.showgrid||!!T||!!S)||(delete e.endlinecolor,delete e.endlinewidth),M?(d("minorgridcount"),d("minorgridwidth",w),d("minorgridcolor",a(_,.06)),e.minorgridcount||(delete e.minorgridwidth,delete e.minorgridcolor)):(delete e.gridcolor,delete e.gridWidth),e._separators=r.fullLayout.separators,e._initialCategories="category"===y?f(m,e.categoryorder,e.categoryarray,r.data):[],"none"===e.showticklabels&&(delete e.tickfont,delete e.tickangle,delete e.showexponent,delete e.exponentformat,delete e.tickformat,delete e.showticksuffix,delete e.showtickprefix),e.showticksuffix||delete e.ticksuffix,e.showtickprefix||delete e.tickprefix,d("tickmode"),(!e.title||e.title&&0===e.title.length)&&(delete e.titlefont,delete e.titleoffset),e}},{"../../components/color":604,"../../lib":728,"../../plots/cartesian/axis_autotype":773,"../../plots/cartesian/category_order_defaults":776,"../../plots/cartesian/ordered_categories":785,"../../plots/cartesian/set_convert":789,"../../plots/cartesian/tick_label_defaults":790,"../../plots/cartesian/tick_value_defaults":792,"../../registry":846,"./attributes":885}],889:[function(t,e,r){"use strict";var n=t("../../plots/cartesian/axes"),i=t("./cheater_basis"),a=t("./array_minmax"),o=t("./map_2d_array"),s=t("./calc_gridlines"),l=t("./calc_labels"),u=t("./calc_clippath"),c=t("../heatmap/clean_2d_array"),h=t("./smooth_fill_2d_array");e.exports=function(t,e){var r,f=n.getFromId(t,e.xaxis||"x"),d=n.getFromId(t,e.yaxis||"y"),p=e.aaxis,m=e.baxis,g=e._a=e.a,v=e._b=e.b,y={},b=e.y;if(e._cheater){var x="index"===p.cheatertype?g.length:g,_="index"===m.cheatertype?v.length:v;e.x=r=i(x,_,e.cheaterslope)}else r=e.x;e._x=e.x=r=c(r),e._y=e.y=b=c(b),h(r,g,v),h(b,g,v),e.setScale(),y.xp=e.xp=o(e.xp,r,f.c2p),y.yp=e.yp=o(e.yp,b,d.c2p);var w=a(r),M=a(b),k=.5*(w[1]-w[0]),A=.5*(w[1]+w[0]),T=.5*(M[1]-M[0]),S=.5*(M[1]+M[0]);return w=[A-1.3*k,A+1.3*k],M=[S-1.3*T,S+1.3*T],n.expand(f,w,{padded:!0}),n.expand(d,M,{padded:!0}),s(e,y,"a","b"),s(e,y,"b","a"),l(e,p),l(e,m),y.clipsegments=u(e.xctrl,e.yctrl,p,m),y.x=r,y.y=b,y.a=g,y.b=v,[y]}},{"../../plots/cartesian/axes":772,"../heatmap/clean_2d_array":950,"./array_minmax":884,"./calc_clippath":890,"./calc_gridlines":891,"./calc_labels":892,"./cheater_basis":894,"./map_2d_array":906,"./smooth_fill_2d_array":910}],890:[function(t,e,r){"use strict";e.exports=function(t,e,r,n){var i,a,o,s=[],l=!!r.smoothing,u=!!n.smoothing,c=t[0].length-1,h=t.length-1;for(i=0,a=[],o=[];i<=c;i++)a[i]=t[0][i],o[i]=e[0][i];for(s.push({x:a,y:o,bicubic:l}),i=0,a=[],o=[];i<=h;i++)a[i]=t[i][c],o[i]=e[i][c];for(s.push({x:a,y:o,bicubic:u}),i=c,a=[],o=[];i>=0;i--)a[c-i]=t[h][i],o[c-i]=e[h][i];for(s.push({x:a,y:o,bicubic:l}),i=h,a=[],o=[];i>=0;i--)a[h-i]=t[i][0],o[h-i]=e[i][0];return s.push({x:a,y:o,bicubic:u}),s}},{}],891:[function(t,e,r){"use strict";var n=t("../../plots/cartesian/axes"),i=t("../../lib/extend").extendFlat;e.exports=function(t,e,r,a){function o(e){var n,i,o,s,l,u,c,h,f,d,p,g,v=[],y=[],b={};if("b"===r)for(i=t.b2j(e),o=Math.floor(Math.max(0,Math.min(P-2,i))),s=i-o,b.length=P,b.crossLength=D,b.xy=function(e){return t.evalxy([],e,i)},b.dxy=function(e,r){return t.dxydi([],e,o,r,s)},n=0;n<D;n++)u=Math.min(D-2,n),c=n-u,h=t.evalxy([],n,i),E.smoothing&&n>0&&(f=t.dxydi([],n-1,o,0,s),v.push(l[0]+f[0]/3),y.push(l[1]+f[1]/3),d=t.dxydi([],n-1,o,1,s),v.push(h[0]-d[0]/3),y.push(h[1]-d[1]/3)),v.push(h[0]),y.push(h[1]),l=h;else for(n=t.a2i(e),u=Math.floor(Math.max(0,Math.min(D-2,n))),c=n-u,b.length=D,b.crossLength=P,b.xy=function(e){return t.evalxy([],n,e)},b.dxy=function(e,r){return t.dxydj([],u,e,c,r)},i=0;i<P;i++)o=Math.min(P-2,i),s=i-o,h=t.evalxy([],n,i),E.smoothing&&i>0&&(p=t.dxydj([],u,i-1,c,0),v.push(l[0]+p[0]/3),y.push(l[1]+p[1]/3),g=t.dxydj([],u,i-1,c,1),v.push(h[0]-g[0]/3),y.push(h[1]-g[1]/3)),v.push(h[0]),y.push(h[1]),l=h;return b.axisLetter=r,b.axis=M,b.crossAxis=E,b.value=e,b.constvar=a,b.index=m,b.x=v,b.y=y,b.smoothing=E.smoothing,b}function s(e){var n,i,o,s,l,u=[],c=[],h={};if(h.length=w.length,h.crossLength=S.length,"b"===r)for(o=Math.max(0,Math.min(P-2,e)),l=Math.min(1,Math.max(0,e-o)),h.xy=function(r){return t.evalxy([],r,e)},h.dxy=function(e,r){return t.dxydi([],e,o,r,l)},n=0;n<I;n++)u[n]=L[e*O][n],c[n]=C[e*O][n];else for(i=Math.max(0,Math.min(D-2,e)),s=Math.min(1,Math.max(0,e-i)),h.xy=function(r){return t.evalxy([],e,r)},h.dxy=function(e,r){return t.dxydj([],i,e,s,r)},n=0;n<z;n++)u[n]=L[n][e*O],c[n]=C[n][e*O];return h.axisLetter=r,h.axis=M,h.crossAxis=E,h.value=w[e],h.constvar=a,h.index=e,h.x=u,h.y=c,h.smoothing=E.smoothing,h}var l,u,c,h,f,d,p,m,g,v,y,b,x,_,w=t[r],M=t[r+"axis"],k=M._gridlines=[],A=M._minorgridlines=[],T=M._boundarylines=[],S=t[a],E=t[a+"axis"];if("array"===M.tickmode)for(M.tickvals=[],l=0;l<w.length;l++)M.tickvals.push(w[l]);var L=t.xctrl,C=t.yctrl,I=L[0].length,z=L.length,D=t.a.length,P=t.b.length;n.calcTicks(M);var O=M.smoothing?3:1;if("array"===M.tickmode){for(h=5e-15,f=[Math.floor((w.length-1-M.arraytick0)/M.arraydtick*(1+h)),Math.ceil(-M.arraytick0/M.arraydtick/(1+h))].sort(function(t,e){return t-e}),d=f[0]-1,p=f[1]+1,m=d;m<p;m++)(u=M.arraytick0+M.arraydtick*m)<0||u>w.length-1||k.push(i(s(u),{color:M.gridcolor,width:M.gridwidth}));for(m=d;m<p;m++)if(c=M.arraytick0+M.arraydtick*m,y=Math.min(c+M.arraydtick,w.length-1),!(c<0||c>w.length-1||y<0||y>w.length-1))for(b=w[c],x=w[y],l=0;l<M.minorgridcount;l++)(_=y-c)<=0||(v=b+(x-b)*(l+1)/(M.minorgridcount+1)*(M.arraydtick/_))<w[0]||v>w[w.length-1]||A.push(i(o(v),{color:M.minorgridcolor,width:M.minorgridwidth}));M.startline&&T.push(i(s(0),{color:M.startlinecolor,width:M.startlinewidth})),M.endline&&T.push(i(s(w.length-1),{color:M.endlinecolor,width:M.endlinewidth}))}else{for(h=5e-15,f=[Math.floor((w[w.length-1]-M.tick0)/M.dtick*(1+h)),Math.ceil((w[0]-M.tick0)/M.dtick/(1+h))].sort(function(t,e){return t-e}),d=f[0],p=f[1],m=d;m<=p;m++)g=M.tick0+M.dtick*m,k.push(i(o(g),{color:M.gridcolor,width:M.gridwidth}));for(m=d-1;m<p+1;m++)for(g=M.tick0+M.dtick*m,l=0;l<M.minorgridcount;l++)(v=g+M.dtick*(l+1)/(M.minorgridcount+1))<w[0]||v>w[w.length-1]||A.push(i(o(v),{color:M.minorgridcolor,width:M.minorgridwidth}));M.startline&&T.push(i(o(w[0]),{color:M.startlinecolor,width:M.startlinewidth})),M.endline&&T.push(i(o(w[w.length-1]),{color:M.endlinecolor,width:M.endlinewidth}))}}},{"../../lib/extend":717,"../../plots/cartesian/axes":772}],892:[function(t,e,r){"use strict";var n=t("../../plots/cartesian/axes"),i=t("../../lib/extend").extendFlat;e.exports=function(t,e){var r,a,o,s=e._labels=[],l=e._gridlines;for(r=0;r<l.length;r++)o=l[r],-1!==["start","both"].indexOf(e.showticklabels)&&(a=n.tickText(e,o.value),i(a,{prefix:void 0,suffix:void 0,endAnchor:!0,xy:o.xy(0),dxy:o.dxy(0,0),axis:o.axis,length:o.crossAxis.length,font:o.axis.tickfont,isFirst:0===r,isLast:r===l.length-1}),s.push(a)),-1!==["end","both"].indexOf(e.showticklabels)&&(a=n.tickText(e,o.value),i(a,{endAnchor:!1,xy:o.xy(o.crossLength-1),dxy:o.dxy(o.crossLength-2,1),axis:o.axis,length:o.crossAxis.length,font:o.axis.tickfont,isFirst:0===r,isLast:r===l.length-1}),s.push(a))}},{"../../lib/extend":717,"../../plots/cartesian/axes":772}],893:[function(t,e,r){"use strict";e.exports=function(t,e,r,n){var i=t[0]-e[0],a=t[1]-e[1],o=r[0]-e[0],s=r[1]-e[1],l=Math.pow(i*i+a*a,.25),u=Math.pow(o*o+s*s,.25),c=(u*u*i-l*l*o)*n,h=(u*u*a-l*l*s)*n,f=u*(l+u)*3,d=l*(l+u)*3;return[[e[0]+(f&&c/f),e[1]+(f&&h/f)],[e[0]-(d&&c/d),e[1]-(d&&h/d)]]}},{}],894:[function(t,e,r){"use strict";var n=t("../../lib").isArray;e.exports=function(t,e,r){var i,a,o,s,l,u,c=[],h=n(t)?t.length:t,f=n(e)?e.length:e,d=n(t)?t:null,p=n(e)?e:null;d&&(o=(d.length-1)/(d[d.length-1]-d[0])/(h-1)),p&&(s=(p.length-1)/(p[p.length-1]-p[0])/(f-1));var m,g=1/0,v=-1/0;for(a=0;a<f;a++)for(c[a]=[],u=p?(p[a]-p[0])*s:a/(f-1),i=0;i<h;i++)l=d?(d[i]-d[0])*o:i/(h-1),m=l-u*r,g=Math.min(m,g),v=Math.max(m,v),c[a][i]=m;var y=1/(v-g),b=-g*y;for(a=0;a<f;a++)for(i=0;i<h;i++)c[a][i]=y*c[a][i]+b;return c}},{"../../lib":728}],895:[function(t,e,r){"use strict";function n(t,e,r){var n=-.5*r[0]+1.5*e[0],i=-.5*r[1]+1.5*e[1];return[(2*n+t[0])/3,(2*i+t[1])/3]}var i=t("./catmull_rom"),a=t("../../lib").ensureArray;e.exports=function(t,e,r,o,s,l){var u,c,h,f,d,p,m,g,v,y,b=r[0].length,x=r.length,_=s?3*b-2:b,w=l?3*x-2:x;for(t=a(t,w),e=a(e,w),h=0;h<w;h++)t[h]=a(t[h],_),e[h]=a(e[h],_);for(c=0,f=0;c<x;c++,f+=l?3:1)for(d=t[f],p=e[f],m=r[c],g=o[c],u=0,h=0;u<b;u++,h+=s?3:1)d[h]=m[u],p[h]=g[u];if(s)for(c=0,f=0;c<x;c++,f+=l?3:1){for(u=1,h=3;u<b-1;u++,h+=3)v=i([r[c][u-1],o[c][u-1]],[r[c][u],o[c][u]],[r[c][u+1],o[c][u+1]],s),t[f][h-1]=v[0][0],e[f][h-1]=v[0][1],t[f][h+1]=v[1][0],e[f][h+1]=v[1][1];y=n([t[f][0],e[f][0]],[t[f][2],e[f][2]],[t[f][3],e[f][3]]),t[f][1]=y[0],e[f][1]=y[1],y=n([t[f][_-1],e[f][_-1]],[t[f][_-3],e[f][_-3]],[t[f][_-4],e[f][_-4]]),t[f][_-2]=y[0],e[f][_-2]=y[1]}if(l)for(h=0;h<_;h++){for(f=3;f<w-3;f+=3)v=i([t[f-3][h],e[f-3][h]],[t[f][h],e[f][h]],[t[f+3][h],e[f+3][h]],l),t[f-1][h]=v[0][0],e[f-1][h]=v[0][1],t[f+1][h]=v[1][0],e[f+1][h]=v[1][1];y=n([t[0][h],e[0][h]],[t[2][h],e[2][h]],[t[3][h],e[3][h]]),t[1][h]=y[0],e[1][h]=y[1],y=n([t[w-1][h],e[w-1][h]],[t[w-3][h],e[w-3][h]],[t[w-4][h],e[w-4][h]]),t[w-2][h]=y[0],e[w-2][h]=y[1]}if(s&&l)for(f=1;f<w;f+=(f+1)%3==0?2:1){for(h=3;h<_-3;h+=3)v=i([t[f][h-3],e[f][h-3]],[t[f][h],e[f][h]],[t[f][h+3],e[f][h+3]],s),t[f][h-1]=.5*(t[f][h-1]+v[0][0]),e[f][h-1]=.5*(e[f][h-1]+v[0][1]),t[f][h+1]=.5*(t[f][h+1]+v[1][0]),e[f][h+1]=.5*(e[f][h+1]+v[1][1]);y=n([t[f][0],e[f][0]],[t[f][2],e[f][2]],[t[f][3],e[f][3]]),t[f][1]=.5*(t[f][1]+y[0]),e[f][1]=.5*(e[f][1]+y[1]),y=n([t[f][_-1],e[f][_-1]],[t[f][_-3],e[f][_-3]],[t[f][_-4],e[f][_-4]]),t[f][_-2]=.5*(t[f][_-2]+y[0]),e[f][_-2]=.5*(e[f][_-2]+y[1])}return[t,e]}},{"../../lib":728,"./catmull_rom":893}],896:[function(t,e,r){"use strict";e.exports={RELATIVE_CULL_TOLERANCE:1e-6}},{}],897:[function(t,e,r){"use strict";e.exports=function(t,e,r){return e&&r?function(e,r,n,i,a){e||(e=[]);var o,s,l,u,c,h;r*=3,n*=3;var f=i*i,d=1-i,p=d*d,m=d*i*2,g=-3*p,v=3*(p-m),y=3*(m-f),b=3*f,x=a*a,_=x*a,w=1-a,M=w*w,k=M*w;for(h=0;h<t.length;h++)c=t[h],o=g*c[n][r]+v*c[n][r+1]+y*c[n][r+2]+b*c[n][r+3],s=g*c[n+1][r]+v*c[n+1][r+1]+y*c[n+1][r+2]+b*c[n+1][r+3],l=g*c[n+2][r]+v*c[n+2][r+1]+y*c[n+2][r+2]+b*c[n+2][r+3],u=g*c[n+3][r]+v*c[n+3][r+1]+y*c[n+3][r+2]+b*c[n+3][r+3],e[h]=k*o+3*(M*a*s+w*x*l)+_*u;return e}:e?function(e,r,n,i,a){e||(e=[]);var o,s,l,u;r*=3;var c=i*i,h=1-i,f=h*h,d=h*i*2,p=-3*f,m=3*(f-d),g=3*(d-c),v=3*c,y=1-a;for(l=0;l<t.length;l++)u=t[l],o=p*u[n][r]+m*u[n][r+1]+g*u[n][r+2]+v*u[n][r+3],s=p*u[n+1][r]+m*u[n+1][r+1]+g*u[n+1][r+2]+v*u[n+1][r+3],e[l]=y*o+a*s;return e}:r?function(e,r,n,i,a){e||(e=[]);var o,s,l,u,c,h;n*=3;var f=a*a,d=f*a,p=1-a,m=p*p,g=m*p;for(c=0;c<t.length;c++)h=t[c],o=h[n][r+1]-h[n][r],s=h[n+1][r+1]-h[n+1][r],l=h[n+2][r+1]-h[n+2][r],u=h[n+3][r+1]-h[n+3][r],e[c]=g*o+3*(m*a*s+p*f*l)+d*u;return e}:function(e,r,n,i,a){e||(e=[]);var o,s,l,u,c=1-a;for(l=0;l<t.length;l++)u=t[l],o=u[n][r+1]-u[n][r],s=u[n+1][r+1]-u[n+1][r],e[l]=c*o+a*s;return e}}},{}],898:[function(t,e,r){"use strict";e.exports=function(t,e,r){return e&&r?function(e,r,n,i,a){e||(e=[]);var o,s,l,u,c,h;r*=3,n*=3;var f=i*i,d=f*i,p=1-i,m=p*p,g=m*p,v=a*a,y=1-a,b=y*y,x=y*a*2,_=-3*b,w=3*(b-x),M=3*(x-v),k=3*v;for(h=0;h<t.length;h++)c=t[h],o=_*c[n][r]+w*c[n+1][r]+M*c[n+2][r]+k*c[n+3][r],s=_*c[n][r+1]+w*c[n+1][r+1]+M*c[n+2][r+1]+k*c[n+3][r+1],l=_*c[n][r+2]+w*c[n+1][r+2]+M*c[n+2][r+2]+k*c[n+3][r+2],u=_*c[n][r+3]+w*c[n+1][r+3]+M*c[n+2][r+3]+k*c[n+3][r+3],e[h]=g*o+3*(m*i*s+p*f*l)+d*u;return e}:e?function(e,r,n,i,a){e||(e=[]);var o,s,l,u,c,h;r*=3;var f=a*a,d=f*a,p=1-a,m=p*p,g=m*p;for(c=0;c<t.length;c++)h=t[c],o=h[n+1][r]-h[n][r],s=h[n+1][r+1]-h[n][r+1],l=h[n+1][r+2]-h[n][r+2],u=h[n+1][r+3]-h[n][r+3],e[c]=g*o+3*(m*a*s+p*f*l)+d*u;return e}:r?function(e,r,n,i,a){e||(e=[]);var o,s,l,u;n*=3;var c=1-i,h=a*a,f=1-a,d=f*f,p=f*a*2,m=-3*d,g=3*(d-p),v=3*(p-h),y=3*h;for(l=0;l<t.length;l++)u=t[l],o=m*u[n][r]+g*u[n+1][r]+v*u[n+2][r]+y*u[n+3][r],s=m*u[n][r+1]+g*u[n+1][r+1]+v*u[n+2][r+1]+y*u[n+3][r+1],e[l]=c*o+i*s;return e}:function(e,r,n,i,a){e||(e=[]);var o,s,l,u,c=1-i;for(l=0;l<t.length;l++)u=t[l],o=u[n+1][r]-u[n][r],s=u[n+1][r+1]-u[n][r+1],e[l]=c*o+i*s;return e}}},{}],899:[function(t,e,r){"use strict";e.exports=function(t,e,r,n,i){var a=e-2,o=r-2;return n&&i?function(e,r,n){e||(e=[]);var i,s,l,u,c,h,f=Math.max(0,Math.min(Math.floor(r),a)),d=Math.max(0,Math.min(Math.floor(n),o)),p=Math.max(0,Math.min(1,r-f)),m=Math.max(0,Math.min(1,n-d));f*=3,d*=3
;var g=p*p,v=g*p,y=1-p,b=y*y,x=b*y,_=m*m,w=_*m,M=1-m,k=M*M,A=k*M;for(h=0;h<t.length;h++)c=t[h],i=x*c[d][f]+3*(b*p*c[d][f+1]+y*g*c[d][f+2])+v*c[d][f+3],s=x*c[d+1][f]+3*(b*p*c[d+1][f+1]+y*g*c[d+1][f+2])+v*c[d+1][f+3],l=x*c[d+2][f]+3*(b*p*c[d+2][f+1]+y*g*c[d+2][f+2])+v*c[d+2][f+3],u=x*c[d+3][f]+3*(b*p*c[d+3][f+1]+y*g*c[d+3][f+2])+v*c[d+3][f+3],e[h]=A*i+3*(k*m*s+M*_*l)+w*u;return e}:n?function(e,r,n){e||(e=[]);var i,s,l,u,c,h,f=Math.max(0,Math.min(Math.floor(r),a)),d=Math.max(0,Math.min(Math.floor(n),o)),p=Math.max(0,Math.min(1,r-f)),m=Math.max(0,Math.min(1,n-d));f*=3;var g=p*p,v=g*p,y=1-p,b=y*y,x=b*y,_=1-m;for(c=0;c<t.length;c++)h=t[c],i=_*h[d][f]+m*h[d+1][f],s=_*h[d][f+1]+m*h[d+1][f+1],l=_*h[d][f+2]+m*h[d+1][f+1],u=_*h[d][f+3]+m*h[d+1][f+1],e[c]=x*i+3*(b*p*s+y*g*l)+v*u;return e}:i?function(e,r,n){e||(e=[]);var i,s,l,u,c,h,f=Math.max(0,Math.min(Math.floor(r),a)),d=Math.max(0,Math.min(Math.floor(n),o)),p=Math.max(0,Math.min(1,r-f)),m=Math.max(0,Math.min(1,n-d));d*=3;var g=m*m,v=g*m,y=1-m,b=y*y,x=b*y,_=1-p;for(c=0;c<t.length;c++)h=t[c],i=_*h[d][f]+p*h[d][f+1],s=_*h[d+1][f]+p*h[d+1][f+1],l=_*h[d+2][f]+p*h[d+2][f+1],u=_*h[d+3][f]+p*h[d+3][f+1],e[c]=x*i+3*(b*m*s+y*g*l)+v*u;return e}:function(e,r,n){e||(e=[]);var i,s,l,u,c=Math.max(0,Math.min(Math.floor(r),a)),h=Math.max(0,Math.min(Math.floor(n),o)),f=Math.max(0,Math.min(1,r-c)),d=Math.max(0,Math.min(1,n-h)),p=1-d,m=1-f;for(l=0;l<t.length;l++)u=t[l],i=m*u[h][c]+f*u[h][c+1],s=m*u[h+1][c]+f*u[h+1][c+1],e[l]=p*i+d*s;return e}}},{}],900:[function(t,e,r){"use strict";var n=t("../../lib"),i=t("./xy_defaults"),a=t("./ab_defaults"),o=t("./set_convert"),s=t("./attributes"),l=t("../../components/color/attributes");e.exports=function(t,e,r,u){function c(r,i){return n.coerce(t,e,s,r,i)}e._clipPathId="clip"+e.uid+"carpet";var h=c("color",l.defaultLine);if(n.coerceFont(c,"font"),c("carpet"),a(t,e,u,c,h),!e.a||!e.b)return void(e.visible=!1);e.a.length<3&&(e.aaxis.smoothing=0),e.b.length<3&&(e.baxis.smoothing=0);var f=i(t,e,c);o(e),e._cheater&&c("cheaterslope"),f||(e.visible=!1)}},{"../../components/color/attributes":603,"../../lib":728,"./ab_defaults":883,"./attributes":885,"./set_convert":909,"./xy_defaults":911}],901:[function(t,e,r){"use strict";e.exports=function(t){return Array.isArray(t[0])}},{}],902:[function(t,e,r){"use strict";var n={};n.attributes=t("./attributes"),n.supplyDefaults=t("./defaults"),n.plot=t("./plot"),n.calc=t("./calc"),n.animatable=!0,n.moduleType="trace",n.name="carpet",n.basePlotModule=t("../../plots/cartesian"),n.categories=["cartesian","carpet","carpetAxis","notLegendIsolatable"],n.meta={},e.exports=n},{"../../plots/cartesian":782,"./attributes":885,"./calc":889,"./defaults":900,"./plot":908}],903:[function(t,e,r){"use strict";e.exports=function(t,e){for(var r,n=t._fullData.length,i=0;i<n;i++){var a=t._fullData[i];if(a.index!==e.index&&("carpet"===a.type&&(r||(r=a),a.carpet===e.carpet)))return a}return r}},{}],904:[function(t,e,r){"use strict";e.exports=function(t,e,r){if(0===t.length)return"";var n,i=[],a=r?3:1;for(n=0;n<t.length;n+=a)i.push(t[n]+","+e[n]),r&&n<t.length-a&&(i.push("C"),i.push([t[n+1]+","+e[n+1],t[n+2]+","+e[n+2]+" "].join(" ")));return i.join(r?"":"L")}},{}],905:[function(t,e,r){"use strict";e.exports=function(t,e,r){var n;for(Array.isArray(t)?t.length>e.length&&(t=t.slice(0,e.length)):t=[],n=0;n<e.length;n++)t[n]=r(e[n]);return t}},{}],906:[function(t,e,r){"use strict";e.exports=function(t,e,r){var n,i;for(Array.isArray(t)?t.length>e.length&&(t=t.slice(0,e.length)):t=[],n=0;n<e.length;n++)for(Array.isArray(t[n])?t[n].length>e.length&&(t[n]=t[n].slice(0,e.length)):t[n]=[],i=0;i<e[0].length;i++)t[n][i]=r(e[n][i]);return t}},{}],907:[function(t,e,r){"use strict";e.exports=function(t,e,r,n,i,a){var o=i[0]*t.dpdx(e),s=i[1]*t.dpdy(r),l=1,u=1;if(a){var c=Math.sqrt(i[0]*i[0]+i[1]*i[1]),h=Math.sqrt(a[0]*a[0]+a[1]*a[1]),f=(i[0]*a[0]+i[1]*a[1])/c/h;u=Math.max(0,f)}var d=180*Math.atan2(s,o)/Math.PI;return d<-90?(d+=180,l=-l):d>90&&(d-=180,l=-l),{angle:d,flip:l,p:t.c2p(n,e,r),offsetMultplier:u}}},{}],908:[function(t,e,r){"use strict";function n(t,e,r){var n=t.selectAll(e+"."+r).data([0]);return n.enter().append(e).classed(r,!0),n}function i(t,e,r){var i=r[0],u=r[0].trace,c=e.xaxis,h=e.yaxis,f=u.aaxis,d=u.baxis,p=t._fullLayout,m=e.plot.selectAll(".carpetlayer"),g=p._clips,v=n(m,"g","carpet"+u.uid).classed("trace",!0),y=n(v,"g","minorlayer"),b=n(v,"g","majorlayer"),x=n(v,"g","boundarylayer"),_=n(v,"g","labellayer");v.style("opacity",u.opacity),o(c,h,b,f,"a",f._gridlines),o(c,h,b,d,"b",d._gridlines),o(c,h,y,f,"a",f._minorgridlines),o(c,h,y,d,"b",d._minorgridlines),o(c,h,x,f,"a-boundary",f._boundarylines),o(c,h,x,d,"b-boundary",d._boundarylines),l(t,_,u,i,c,h,s(t,c,h,u,i,_,f._labels,"a-label"),s(t,c,h,u,i,_,d._labels,"b-label")),a(u,i,g,c,h)}function a(t,e,r,i,a){var o,s,l,u,c=r.select("#"+t._clipPathId);c.size()||(c=r.append("clipPath").classed("carpetclip",!0));var h=n(c,"path","carpetboundary"),p=e.clipsegments,m=[];for(u=0;u<p.length;u++)o=p[u],s=f([],o.x,i.c2p),l=f([],o.y,a.c2p),m.push(d(s,l,o.bicubic));var g="M"+m.join("L")+"Z";c.attr("id",t._clipPathId),h.attr("d",g)}function o(t,e,r,n,i,a){var o="const-"+i+"-lines",s=r.selectAll("."+o).data(a);s.enter().append("path").classed(o,!0).style("vector-effect","non-scaling-stroke"),s.each(function(r){var n=r,i=n.x,a=n.y,o=f([],i,t.c2p),s=f([],a,e.c2p),l="M"+d(o,s,n.smoothing);c.select(this).attr("d",l).style("stroke-width",n.width).style("stroke",n.color).style("fill","none")}),s.exit().remove()}function s(t,e,r,n,i,a,o,s){var l=a.selectAll("text."+s).data(o);l.enter().append("text").classed(s,!0);var u=0;return l.each(function(i){var a;if("auto"===i.axis.tickangle)a=p(n,e,r,i.xy,i.dxy);else{var o=(i.axis.tickangle+180)*Math.PI/180;a=p(n,e,r,i.xy,[Math.cos(o),Math.sin(o)])}var s=(i.endAnchor?-1:1)*a.flip,l=c.select(this).attr({"text-anchor":s>0?"start":"end","data-notex":1}).call(h.font,i.font).text(i.text).call(m.convertToTspans,t),f=h.bBox(this);l.attr("transform","translate("+a.p[0]+","+a.p[1]+") rotate("+a.angle+")translate("+i.axis.labelpadding*s+","+.3*f.height+")"),u=Math.max(u,f.width+i.axis.labelpadding)}),l.exit().remove(),u}function l(t,e,r,n,i,a,o,s){var l,c,h,f;l=.5*(r.a[0]+r.a[r.a.length-1]),c=r.b[0],h=r.ab2xy(l,c,!0),f=r.dxyda_rough(l,c),u(t,e,r,n,h,f,r.aaxis,i,a,o,"a-title"),l=r.a[0],c=.5*(r.b[0]+r.b[r.b.length-1]),h=r.ab2xy(l,c,!0),f=r.dxydb_rough(l,c),u(t,e,r,n,h,f,r.baxis,i,a,s,"b-title")}function u(t,e,r,n,i,a,o,s,l,u,f){var d=[];o.title&&d.push(o.title);var g=e.selectAll("text."+f).data(d);g.enter().append("text").classed(f,!0),g.each(function(){var e=p(r,s,l,i,a);-1===["start","both"].indexOf(o.showticklabels)&&(u=0),u+=o.titlefont.size+o.titleoffset,c.select(this).text(o.title||"").call(m.convertToTspans,t).attr("transform","translate("+e.p[0]+","+e.p[1]+") rotate("+e.angle+") translate(0,"+u+")").classed("user-select-none",!0).attr("text-anchor","middle").call(h.font,o.titlefont)}),g.exit().remove()}var c=t("d3"),h=t("../../components/drawing"),f=t("./map_1d_array"),d=t("./makepath"),p=t("./orient_text"),m=t("../../lib/svg_text_utils");e.exports=function(t,e,r){for(var n=0;n<r.length;n++)i(t,e,r[n])}},{"../../components/drawing":628,"../../lib/svg_text_utils":750,"./makepath":904,"./map_1d_array":905,"./orient_text":907,d3:122}],909:[function(t,e,r){"use strict";var n=t("./constants"),i=t("../../lib/search").findBin,a=t("./compute_control_points"),o=t("./create_spline_evaluator"),s=t("./create_i_derivative_evaluator"),l=t("./create_j_derivative_evaluator");e.exports=function(t){var e=t.a,r=t.b,u=t.a.length,c=t.b.length,h=t.aaxis,f=t.baxis,d=e[0],p=e[u-1],m=r[0],g=r[c-1],v=e[e.length-1]-e[0],y=r[r.length-1]-r[0],b=v*n.RELATIVE_CULL_TOLERANCE,x=y*n.RELATIVE_CULL_TOLERANCE;d-=b,p+=b,m-=x,g+=x,t.isVisible=function(t,e){return t>d&&t<p&&e>m&&e<g},t.isOccluded=function(t,e){return t<d||t>p||e<m||e>g},h.c2p=function(t){return t},f.c2p=function(t){return t},t.setScale=function(){var e=t.x,r=t.y,n=a(t.xctrl,t.yctrl,e,r,h.smoothing,f.smoothing);t.xctrl=n[0],t.yctrl=n[1],t.evalxy=o([t.xctrl,t.yctrl],u,c,h.smoothing,f.smoothing),t.dxydi=s([t.xctrl,t.yctrl],h.smoothing,f.smoothing),t.dxydj=l([t.xctrl,t.yctrl],h.smoothing,f.smoothing)},t.i2a=function(t){var r=Math.max(0,Math.floor(t[0]),u-2),n=t[0]-r;return(1-n)*e[r]+n*e[r+1]},t.j2b=function(t){var e=Math.max(0,Math.floor(t[1]),u-2),n=t[1]-e;return(1-n)*r[e]+n*r[e+1]},t.ij2ab=function(e){return[t.i2a(e[0]),t.j2b(e[1])]},t.a2i=function(t){var r=Math.max(0,Math.min(i(t,e),u-2)),n=e[r],a=e[r+1];return Math.max(0,Math.min(u-1,r+(t-n)/(a-n)))},t.b2j=function(t){var e=Math.max(0,Math.min(i(t,r),c-2)),n=r[e],a=r[e+1];return Math.max(0,Math.min(c-1,e+(t-n)/(a-n)))},t.ab2ij=function(e){return[t.a2i(e[0]),t.b2j(e[1])]},t.i2c=function(e,r){return t.evalxy([],e,r)},t.ab2xy=function(n,i,a){if(!a&&(n<e[0]||n>e[u-1]|i<r[0]||i>r[c-1]))return[!1,!1];var o=t.a2i(n),s=t.b2j(i),l=t.evalxy([],o,s);if(a){var h,f,d,p,m=0,g=0,v=[];n<e[0]?(h=0,f=0,m=(n-e[0])/(e[1]-e[0])):n>e[u-1]?(h=u-2,f=1,m=(n-e[u-1])/(e[u-1]-e[u-2])):(h=Math.max(0,Math.min(u-2,Math.floor(o))),f=o-h),i<r[0]?(d=0,p=0,g=(i-r[0])/(r[1]-r[0])):i>r[c-1]?(d=c-2,p=1,g=(i-r[c-1])/(r[c-1]-r[c-2])):(d=Math.max(0,Math.min(c-2,Math.floor(s))),p=s-d),m&&(t.dxydi(v,h,d,f,p),l[0]+=v[0]*m,l[1]+=v[1]*m),g&&(t.dxydj(v,h,d,f,p),l[0]+=v[0]*g,l[1]+=v[1]*g)}return l},t.c2p=function(t,e,r){return[e.c2p(t[0]),r.c2p(t[1])]},t.p2x=function(t,e,r){return[e.p2c(t[0]),r.p2c(t[1])]},t.dadi=function(t){var r=Math.max(0,Math.min(e.length-2,t));return e[r+1]-e[r]},t.dbdj=function(t){var e=Math.max(0,Math.min(r.length-2,t));return r[e+1]-r[e]},t.dxyda=function(e,r,n,i){var a=t.dxydi(null,e,r,n,i),o=t.dadi(e,n);return[a[0]/o,a[1]/o]},t.dxydb=function(e,r,n,i){var a=t.dxydj(null,e,r,n,i),o=t.dbdj(r,i);return[a[0]/o,a[1]/o]},t.dxyda_rough=function(e,r,n){var i=v*(n||.1),a=t.ab2xy(e+i,r,!0),o=t.ab2xy(e-i,r,!0);return[.5*(a[0]-o[0])/i,.5*(a[1]-o[1])/i]},t.dxydb_rough=function(e,r,n){var i=y*(n||.1),a=t.ab2xy(e,r+i,!0),o=t.ab2xy(e,r-i,!0);return[.5*(a[0]-o[0])/i,.5*(a[1]-o[1])/i]},t.dpdx=function(t){return t._m},t.dpdy=function(t){return t._m}}},{"../../lib/search":745,"./compute_control_points":895,"./constants":896,"./create_i_derivative_evaluator":897,"./create_j_derivative_evaluator":898,"./create_spline_evaluator":899}],910:[function(t,e,r){"use strict";var n=t("../../lib");e.exports=function(t,e,r){var i,a,o,s=[],l=[],u=t[0].length,c=t.length,h=0;for(i=0;i<u;i++)for(a=0;a<c;a++)void 0===t[a][i]&&(s.push(i),l.push(a),t[a][i]=function(e,r){var n,i=0,a=0;return e>0&&void 0!==(n=t[r][e-1])&&(a++,i+=n),e<u-1&&void 0!==(n=t[r][e+1])&&(a++,i+=n),r>0&&void 0!==(n=t[r-1][e])&&(a++,i+=n),r<c-1&&void 0!==(n=t[r+1][e])&&(a++,i+=n),i/Math.max(1,a)}(i,a)),h=Math.max(h,Math.abs(t[a][i]));if(!s.length)return t;var f,d,p,m,g,v,y,b,x,_,w,M=0,k=0,A=s.length;do{for(M=0,o=0;o<A;o++){i=s[o],a=l[o];var T,S,E,L,C,I,z=0,D=0;0===i?(C=Math.min(u-1,2),E=e[C],L=e[1],T=t[a][C],S=t[a][1],D+=S+(S-T)*(e[0]-L)/(L-E),z++):i===u-1&&(C=Math.max(0,u-3),E=e[C],L=e[u-2],T=t[a][C],S=t[a][u-2],D+=S+(S-T)*(e[u-1]-L)/(L-E),z++),(0===i||i===u-1)&&a>0&&a<c-1&&(f=r[a+1]-r[a],d=r[a]-r[a-1],D+=(d*t[a+1][i]+f*t[a-1][i])/(d+f),z++),0===a?(I=Math.min(c-1,2),E=r[I],L=r[1],T=t[I][i],S=t[1][i],D+=S+(S-T)*(r[0]-L)/(L-E),z++):a===c-1&&(I=Math.max(0,c-3),E=r[I],L=r[c-2],T=t[I][i],S=t[c-2][i],D+=S+(S-T)*(r[c-1]-L)/(L-E),z++),(0===a||a===c-1)&&i>0&&i<u-1&&(f=e[i+1]-e[i],d=e[i]-e[i-1],D+=(d*t[a][i+1]+f*t[a][i-1])/(d+f),z++),z?D/=z:(p=e[i+1]-e[i],m=e[i]-e[i-1],g=r[a+1]-r[a],v=r[a]-r[a-1],y=p*m*(p+m),b=g*v*(g+v),D=(y*(v*t[a+1][i]+g*t[a-1][i])+b*(m*t[a][i+1]+p*t[a][i-1]))/(b*(m+p)+y*(v+g))),x=D-t[a][i],_=x/h,M+=_*_,w=z?0:.85,t[a][i]+=x*(1+w)}M=Math.sqrt(M)}while(k++<100&&M>1e-5);return n.log("Smoother converged to",M,"after",k,"iterations"),t}},{"../../lib":728}],911:[function(t,e,r){"use strict";var n=t("./has_columns"),i=t("../heatmap/convert_column_xyz");e.exports=function(t,e,r){var a=[],o=r("x");o&&!n(o)&&a.push("x"),e._cheater=!o;var s=r("y");if(s&&!n(s)&&a.push("y"),o||s)return a.length&&i(e,e.aaxis,e.baxis,"a","b",a),!0}},{"../heatmap/convert_column_xyz":952,"./has_columns":901}],912:[function(t,e,r){"use strict";var n=t("../scattergeo/attributes"),i=t("../../components/colorscale/attributes"),a=t("../../components/colorbar/attributes"),o=t("../../plots/attributes"),s=t("../../lib/extend"),l=s.extendFlat,u=s.extendDeepAll,c=n.marker.line;e.exports=l({locations:{valType:"data_array",editType:"calc"},locationmode:n.locationmode,z:{valType:"data_array",editType:"calc"},text:l({},n.text,{}),marker:{line:{color:c.color,width:l({},c.width,{dflt:1}),editType:"calc"},editType:"calc"},hoverinfo:l({},o.hoverinfo,{editType:"calc",flags:["location","z","text","name"]})},u({},i,{zmax:{editType:"calc"},zmin:{editType:"calc"}}),{colorbar:a})},{"../../components/colorbar/attributes":605,"../../components/colorscale/attributes":609,"../../lib/extend":717,"../../plots/attributes":770,"../scattergeo/attributes":1069}],913:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),i=t("../../constants/numerical").BADNUM,a=t("../../components/colorscale/calc"),o=t("../scatter/arrays_to_calcdata");e.exports=function(t,e){for(var r=e.locations.length,s=new Array(r),l=0;l<r;l++){var u=s[l]={},c=e.locations[l],h=e.z[l];u.loc="string"==typeof c?c:null,u.z=n(h)?h:i}return o(s,e),a(e,e.z,"","z"),s}},{"../../components/colorscale/calc":610,"../../constants/numerical":707,"../scatter/arrays_to_calcdata":1030,"fast-isnumeric":131}],914:[function(t,e,r){"use strict";var n=t("../../lib"),i=t("../../components/colorscale/defaults"),a=t("./attributes");e.exports=function(t,e,r,o){function s(r,i){return n.coerce(t,e,a,r,i)}var l,u=s("locations");if(u&&(l=u.length),!u||!l)return void(e.visible=!1);var c=s("z");if(!Array.isArray(c))return void(e.visible=!1);c.length>l&&(e.z=c.slice(0,l)),s("locationmode"),s("text"),s("marker.line.color"),s("marker.line.width"),i(t,e,o,s,{prefix:"",cLetter:"z"})}},{"../../components/colorscale/defaults":613,"../../lib":728,"./attributes":912}],915:[function(t,e,r){"use strict";e.exports=function(t,e){return t.location=e.location,t.z=e.z,t}},{}],916:[function(t,e,r){"use strict";function n(t,e,r,n){var s=r.hi||e.hoverinfo,l="all"===s?a.hoverinfo.flags:s.split("+"),u=-1!==l.indexOf("name"),c=-1!==l.indexOf("location"),h=-1!==l.indexOf("z"),f=-1!==l.indexOf("text"),d=!u&&c,p=[];d?t.nameOverride=r.loc:(u&&(t.nameOverride=e.name),c&&p.push(r.loc)),h&&p.push(function(t){return i.tickText(n,n.c2l(t),"hover").text}(r.z)),f&&o(r,e,p),t.extraText=p.join("<br>")}var i=t("../../plots/cartesian/axes"),a=t("./attributes"),o=t("../scatter/fill_hover_text");e.exports=function(t,e,r){var i,a,o,s,l=t.cd,u=l[0].trace,c=t.subplot;for(a=0;a<l.length;a++)if(i=l[a],s=!1,i._polygons){for(o=0;o<i._polygons.length;o++)i._polygons[o].contains([e,r])&&(s=!s),i._polygons[o].contains([e+360,r])&&(s=!s);if(s)break}if(s&&i)return t.x0=t.x1=t.xa.c2p(i.ct),t.y0=t.y1=t.ya.c2p(i.ct),t.index=i.index,t.location=i.loc,t.z=i.z,n(t,u,i,c.mockAxis),[t]}},{"../../plots/cartesian/axes":772,"../scatter/fill_hover_text":1038,"./attributes":912}],917:[function(t,e,r){"use strict";var n={};n.attributes=t("./attributes"),n.supplyDefaults=t("./defaults"),n.colorbar=t("../heatmap/colorbar"),n.calc=t("./calc"),n.plot=t("./plot"),n.hoverPoints=t("./hover"),n.eventData=t("./event_data"),n.selectPoints=t("./select"),n.moduleType="trace",n.name="choropleth",n.basePlotModule=t("../../plots/geo"),n.categories=["geo","noOpacity"],n.meta={},e.exports=n},{"../../plots/geo":800,"../heatmap/colorbar":951,"./attributes":912,"./calc":913,"./defaults":914,"./event_data":915,"./hover":916,"./plot":918,"./select":919}],918:[function(t,e,r){"use strict";function n(t,e){for(var r=t[0].trace,n=t.length,a=f(r,e),o=0;o<n;o++){var s=t[o],l=d(r.locationmode,s.loc,a);l?(s.geojson=l,s.ct=l.properties.ct,s.index=o,s._polygons=i(l)):s.geojson=null}}function i(t){function e(t){for(var e=0;e<t.length-1;e++)if(t[e][0]>0&&t[e+1][0]<0)return e;return null}var r,n,i,a,o=t.geometry,s=o.coordinates,l=t.id,u=[];switch(r="RUS"===l||"FJI"===l?function(t){var r;if(null===e(t))r=t;else for(r=new Array(t.length),a=0;a<t.length;a++)r[a]=[t[a][0]<0?t[a][0]+360:t[a][0],t[a][1]];u.push(h.tester(r))}:"ATA"===l?function(t){var r=e(t);if(null===r)return u.push(h.tester(t));var n=new Array(t.length+1),i=0;for(a=0;a<t.length;a++)a>r?n[i++]=[t[a][0]+360,t[a][1]]:a===r?(n[i++]=t[a],n[i++]=[t[a][0],-90]):n[i++]=t[a];var o=h.tester(n);o.pts.pop(),u.push(o)}:function(t){u.push(h.tester(t))},o.type){case"MultiPolygon":for(n=0;n<s.length;n++)for(i=0;i<s[n].length;i++)r(s[n][i]);break;case"Polygon":for(n=0;n<s.length;n++)r(s[n])}return u}function a(t){t.layers.backplot.selectAll(".trace.choropleth").each(function(t){var e=t[0].trace,r=e.marker||{},n=r.line||{},i=c.makeColorScaleFunc(c.extractScale(e.colorscale,e.zmin,e.zmax));o.select(this).selectAll(".choroplethlocation").each(function(t){o.select(this).attr("fill",i(t.z)).call(l.stroke,t.mlc||n.color).call(u.dashLine,"",t.mlw||n.width||0)})})}var o=t("d3"),s=t("../../lib"),l=t("../../components/color"),u=t("../../components/drawing"),c=t("../../components/colorscale"),h=t("../../lib/polygon"),f=t("../../lib/topojson_utils").getTopojsonFeatures,d=t("../../lib/geo_location_utils").locationToFeature;e.exports=function(t,e){function r(t){return t[0].trace.uid}for(var i=0;i<e.length;i++)n(e[i],t.topojson);var l=t.layers.backplot.select(".choroplethlayer").selectAll("g.trace.choropleth").data(e,r);l.enter().append("g").attr("class","trace choropleth"),l.exit().remove(),l.each(function(t){var e=t[0].node3=o.select(this),r=e.selectAll("path.choroplethlocation").data(s.identity);r.enter().append("path").classed("choroplethlocation",!0),r.exit().remove()}),a(t)}},{"../../components/color":604,"../../components/colorscale":618,"../../components/drawing":628,"../../lib":728,"../../lib/geo_location_utils":720,"../../lib/polygon":739,"../../lib/topojson_utils":753,d3:122}],919:[function(t,e,r){"use strict";var n=t("../../constants/interactions").DESELECTDIM;e.exports=function(t,e){var r,i,a,o,s,l=t.cd,u=t.xaxis,c=t.yaxis,h=[],f=l[0].node3;if(!1===e)for(r=0;r<l.length;r++)l[r].dim=0;else for(r=0;r<l.length;r++)i=l[r],(a=i.ct)&&(o=u.c2p(a),s=c.c2p(a),e.contains([o,s])?(h.push({pointNumber:r,lon:a[0],lat:a[1]}),i.dim=0):i.dim=1);return f.selectAll("path").style("opacity",function(t){return t.dim?n:1}),h}},{"../../constants/interactions":706}],920:[function(t,e,r){"use strict";var n=t("../heatmap/attributes"),i=t("../scatter/attributes"),a=t("../../components/colorscale/attributes"),o=t("../../components/colorbar/attributes"),s=t("../../components/drawing/attributes").dash,l=t("../../plots/font_attributes"),u=t("../../lib/extend").extendFlat,c=i.line;e.exports=u({z:n.z,x:n.x,x0:n.x0,dx:n.dx,y:n.y,y0:n.y0,dy:n.dy,text:n.text,transpose:n.transpose,xtype:n.xtype,ytype:n.ytype,connectgaps:n.connectgaps,autocontour:{valType:"boolean",dflt:!0,editType:"calc",impliedEdits:{"contours.start":void 0,"contours.end":void 0,"contours.size":void 0}},ncontours:{valType:"integer",dflt:15,min:1,editType:"calc"},contours:{start:{valType:"number",dflt:null,editType:"plot",impliedEdits:{"^autocontour":!1}},end:{valType:"number",dflt:null,editType:"plot",impliedEdits:{"^autocontour":!1}},size:{valType:"number",dflt:null,min:0,editType:"plot",impliedEdits:{"^autocontour":!1}},coloring:{valType:"enumerated",values:["fill","heatmap","lines","none"],dflt:"fill",editType:"calc"},showlines:{valType:"boolean",dflt:!0,editType:"plot"},showlabels:{valType:"boolean",dflt:!1,editType:"plot"},labelfont:l({editType:"plot",colorEditType:"style"}),labelformat:{valType:"string",dflt:"",editType:"plot"},editType:"calc",impliedEdits:{autocontour:!1}},line:{color:u({},c.color,{editType:"style+colorbars"}),width:u({},c.width,{editType:"style+colorbars"}),dash:s,smoothing:u({},c.smoothing,{}),editType:"plot"}},a,{autocolorscale:u({},a.autocolorscale,{dflt:!1}),zmin:u({},a.zmin,{editType:"calc"}),zmax:u({},a.zmax,{editType:"calc"})},{colorbar:o})},{"../../components/colorbar/attributes":605,"../../components/colorscale/attributes":609,"../../components/drawing/attributes":627,"../../lib/extend":717,"../../plots/font_attributes":796,"../heatmap/attributes":948,"../scatter/attributes":1031}],921:[function(t,e,r){"use strict";function n(t,e,r){var n={type:"linear",range:[t,e]};return i.autoTicks(n,(e-t)/(r||15)),n}var i=t("../../plots/cartesian/axes"),a=t("../../lib").extendFlat,o=t("../heatmap/calc");e.exports=function(t,e){var r=o(t,e),s=e.contours;if(!1!==e.autocontour){var l=n(e.zmin,e.zmax,e.ncontours);s.size=l.dtick,s.start=i.tickFirst(l),l.range.reverse(),s.end=i.tickFirst(l),s.start===e.zmin&&(s.start+=s.size),s.end===e.zmax&&(s.end-=s.size),s.start>s.end&&(s.start=s.end=(s.start+s.end)/2),e._input.contours||(e._input.contours={}),a(e._input.contours,{start:s.start,end:s.end,size:s.size}),e._input.autocontour=!0}else{var u=s.start,c=s.end,h=e._input.contours;if(u>c&&(s.start=h.start=c,c=s.end=h.end=u,u=s.start),!(s.size>0)){var f;f=u===c?1:n(u,c,e.ncontours).dtick,h.size=s.size=f}}return r}},{"../../lib":728,"../../plots/cartesian/axes":772,"../heatmap/calc":949}],922:[function(t,e,r){"use strict";var n=t("../../plots/plots"),i=t("../../components/colorbar/draw"),a=t("./make_color_map"),o=t("./end_plus");e.exports=function(t,e){var r=e[0].trace,s="cb"+r.uid;if(t._fullLayout._infolayer.selectAll("."+s).remove(),!r.showscale)return void n.autoMargin(t,s);var l=i(t,s);e[0].t.cb=l;var u=r.contours,c=r.line,h=u.size||1,f=u.coloring,d=a(r,{isColorbar:!0});"heatmap"===f&&l.filllevels({start:r.zmin,end:r.zmax,size:(r.zmax-r.zmin)/254}),l.fillcolor("fill"===f||"heatmap"===f?d:"").line({color:"lines"===f?d:c.color,width:!1!==u.showlines?c.width:0,dash:c.dash}).levels({start:u.start,end:o(u),size:h}).options(r.colorbar)()}},{"../../components/colorbar/draw":607,"../../plots/plots":831,"./end_plus":926,"./make_color_map":930}],923:[function(t,e,r){"use strict";e.exports={BOTTOMSTART:[1,9,13,104,713],TOPSTART:[4,6,7,104,713],LEFTSTART:[8,12,14,208,1114],RIGHTSTART:[2,3,11,208,1114],NEWDELTA:[null,[-1,0],[0,-1],[-1,0],[1,0],null,[0,-1],[-1,0],[0,1],[0,1],null,[0,1],[1,0],[1,0],[0,-1]],CHOOSESADDLE:{104:[4,1],208:[2,8],713:[7,13],1114:[11,14]},SADDLEREMAINDER:{1:4,2:8,4:1,7:13,8:2,11:14,13:7,14:11},LABELDISTANCE:2,LABELINCREASE:10,LABELMIN:3,LABELMAX:10,LABELOPTIMIZER:{EDGECOST:1,ANGLECOST:1,NEIGHBORCOST:5,SAMELEVELFACTOR:10,SAMELEVELDISTANCE:5,MAXCOST:100,INITIALSEARCHPOINTS:10,ITERATIONS:5}}},{}],924:[function(t,e,r){"use strict";var n=t("../../lib"),i=t("./attributes");e.exports=function(t,e,r){var a,o=n.coerce2(t,e,i,"contours.start"),s=n.coerce2(t,e,i,"contours.end"),l=!1===o||!1===s,u=r("contours.size");!(a=l?e.autocontour=!0:r("autocontour",!1))&&u||r("ncontours")}},{"../../lib":728,"./attributes":920}],925:[function(t,e,r){"use strict";var n=t("../../lib"),i=t("../heatmap/has_columns"),a=t("../heatmap/xyz_defaults"),o=t("./contours_defaults"),s=t("./style_defaults"),l=t("./attributes");e.exports=function(t,e,r,u){function c(r,i){return n.coerce(t,e,l,r,i)}if(!a(t,e,c,u))return void(e.visible=!1);c("text"),c("connectgaps",i(e)),o(t,e,c),s(t,e,c,u)}},{"../../lib":728,"../heatmap/has_columns":955,"../heatmap/xyz_defaults":963,"./attributes":920,"./contours_defaults":924,"./style_defaults":934}],926:[function(t,e,r){"use strict";e.exports=function(t){return t.end+t.size/1e6}},{}],927:[function(t,e,r){"use strict";function n(t,e,r,n){return Math.abs(t[0]-e[0])<r&&Math.abs(t[1]-e[1])<n}function i(t,e){var r=t[2]-e[2],n=t[3]-e[3];return Math.sqrt(r*r+n*n)}function a(t,e,r,a,c){function h(t){return v[t%v.length]}var f,d=e.join(","),p=d,m=t.crossings[p],g=o(m,r,e),v=[s(t,e,[-g[0],-g[1]])],y=g.join(","),b=t.z.length,x=t.z[0].length;for(f=0;f<1e4;f++){if(m>20?(m=u.CHOOSESADDLE[m][(g[0]||g[1])<0?0:1],t.crossings[p]=u.SADDLEREMAINDER[m]):delete t.crossings[p],!(g=u.NEWDELTA[m])){l.log("Found bad marching index:",m,e,t.level);break}v.push(s(t,e,g)),e[0]+=g[0],e[1]+=g[1],n(v[v.length-1],v[v.length-2],a,c)&&v.pop(),p=e.join(",");var _=g[0]&&(e[0]<0||e[0]>x-2)||g[1]&&(e[1]<0||e[1]>b-2);if(p===d&&g.join(",")===y||r&&_)break;m=t.crossings[p]}1e4===f&&l.log("Infinite loop in contour?");var w,M,k,A,T,S,E,L,C,I,z,D=n(v[0],v[v.length-1],a,c),P=0,O=.2*t.smoothing,R=[],F=0;for(f=1;f<v.length;f++)E=i(v[f],v[f-1]),P+=E,R.push(E);var j=P/R.length*O;for(f=v.length-2;f>=F;f--)if((w=R[f])<j){for(k=0,M=f-1;M>=F&&w+R[M]<j;M--)w+=R[M];if(D&&f===v.length-2)for(k=0;k<M&&w+R[k]<j;k++)w+=R[k];T=f-M+k+1,S=Math.floor((f+M+k+2)/2),A=D||f!==v.length-2?D||-1!==M?T%2?h(S):[(h(S)[0]+h(S+1)[0])/2,(h(S)[1]+h(S+1)[1])/2]:v[0]:v[v.length-1],v.splice(M+1,f-M+1,A),f=M+1,k&&(F=k),D&&(f===v.length-2?v[k]=v[v.length-1]:0===f&&(v[v.length-1]=v[0]))}for(v.splice(0,F),f=0;f<v.length;f++)v[f].length=2;if(!(v.length<2))if(D)v.pop(),t.paths.push(v);else{r||l.log("Unclosed interior contour?",t.level,d,v.join("L"));var N=!1;for(L=0;L<t.edgepaths.length;L++)if(I=t.edgepaths[L],!N&&n(I[0],v[v.length-1],a,c)){v.pop(),N=!0;var B=!1;for(C=0;C<t.edgepaths.length;C++)if(z=t.edgepaths[C],n(z[z.length-1],v[0],a,c)){B=!0,v.shift(),t.edgepaths.splice(L,1),C===L?t.paths.push(v.concat(z)):(C>L&&C--,t.edgepaths[C]=z.concat(v,I));break}B||(t.edgepaths[L]=v.concat(I))}for(L=0;L<t.edgepaths.length&&!N;L++)I=t.edgepaths[L],n(I[I.length-1],v[0],a,c)&&(v.shift(),t.edgepaths[L]=I.concat(v),N=!0);N||t.edgepaths.push(v)}}function o(t,e,r){var n=0,i=0;return t>20&&e?208===t||1114===t?n=0===r[0]?1:-1:i=0===r[1]?1:-1:-1!==u.BOTTOMSTART.indexOf(t)?i=1:-1!==u.LEFTSTART.indexOf(t)?n=1:-1!==u.TOPSTART.indexOf(t)?i=-1:n=-1,[n,i]}function s(t,e,r){var n=e[0]+Math.max(r[0],0),i=e[1]+Math.max(r[1],0),a=t.z[i][n],o=t.xaxis,s=t.yaxis;if(r[1]){var l=(t.level-a)/(t.z[i][n+1]-a);return[o.c2p((1-l)*t.x[n]+l*t.x[n+1],!0),s.c2p(t.y[i],!0),n+l,i]}var u=(t.level-a)/(t.z[i+1][n]-a);return[o.c2p(t.x[n],!0),s.c2p((1-u)*t.y[i]+u*t.y[i+1],!0),n,i+u]}var l=t("../../lib"),u=t("./constants");e.exports=function(t,e,r){var n,i,o,s,u;for(e=e||.01,r=r||.01,o=0;o<t.length;o++){for(s=t[o],u=0;u<s.starts.length;u++)i=s.starts[u],a(s,i,"edge",e,r);for(n=0;Object.keys(s.crossings).length&&n<1e4;)n++,i=Object.keys(s.crossings)[0].split(",").map(Number),a(s,i,void 0,e,r);1e4===n&&l.log("Infinite loop in contour?")}}},{"../../lib":728,"./constants":923}],928:[function(t,e,r){"use strict";var n=t("../heatmap/hover");e.exports=function(t,e,r,i){return n(t,e,r,i,!0)}},{"../heatmap/hover":956}],929:[function(t,e,r){"use strict";var n={};n.attributes=t("./attributes"),n.supplyDefaults=t("./defaults"),n.calc=t("./calc"),n.plot=t("./plot").plot,n.style=t("./style"),n.colorbar=t("./colorbar"),n.hoverPoints=t("./hover"),n.moduleType="trace",n.name="contour",n.basePlotModule=t("../../plots/cartesian"),n.categories=["cartesian","2dMap","contour"],n.meta={},e.exports=n},{"../../plots/cartesian":782,"./attributes":920,"./calc":921,"./colorbar":922,"./defaults":925,"./hover":928,"./plot":932,"./style":933}],930:[function(t,e,r){"use strict";var n=t("d3"),i=t("../../components/colorscale"),a=t("./end_plus");e.exports=function(t){var e=t.contours,r=e.start,o=a(e),s=e.size||1,l=Math.floor((o-r)/s)+1,u="lines"===e.coloring?0:1;isFinite(s)||(s=1,l=1);var c,h,f=t.colorscale,d=f.length,p=new Array(d),m=new Array(d);if("heatmap"===e.coloring){for(t.zauto&&!1===t.autocontour&&(t.zmin=r-s/2,t.zmax=t.zmin+l*s),h=0;h<d;h++)c=f[h],p[h]=c[0]*(t.zmax-t.zmin)+t.zmin,m[h]=c[1];var g=n.extent([t.zmin,t.zmax,e.start,e.start+s*(l-1)]),v=g[t.zmin<t.zmax?0:1],y=g[t.zmin<t.zmax?1:0];v!==t.zmin&&(p.splice(0,0,v),m.splice(0,0,Range[0])),y!==t.zmax&&(p.push(y),m.push(m[m.length-1]))}else for(h=0;h<d;h++)c=f[h],p[h]=(c[0]*(l+u-1)-u/2)*s+r,m[h]=c[1];return i.makeColorScaleFunc({domain:p,range:m},{noNumericCheck:!0})}},{"../../components/colorscale":618,"./end_plus":926,d3:122}],931:[function(t,e,r){"use strict";function n(t,e){var r=(e[0][0]>t?0:1)+(e[0][1]>t?0:2)+(e[1][1]>t?0:4)+(e[1][0]>t?0:8);if(5===r||10===r){return t>(e[0][0]+e[0][1]+e[1][0]+e[1][1])/4?5===r?713:1114:5===r?104:208}return 15===r?0:r}var i=t("./constants");e.exports=function(t){var e,r,a,o,s,l,u,c,h,f=t[0].z,d=f.length,p=f[0].length,m=2===d||2===p;for(r=0;r<d-1;r++)for(o=[],0===r&&(o=o.concat(i.BOTTOMSTART)),r===d-2&&(o=o.concat(i.TOPSTART)),e=0;e<p-1;e++)for(a=o.slice(),0===e&&(a=a.concat(i.LEFTSTART)),e===p-2&&(a=a.concat(i.RIGHTSTART)),s=e+","+r,l=[[f[r][e],f[r][e+1]],[f[r+1][e],f[r+1][e+1]]],h=0;h<t.length;h++)c=t[h],(u=n(c.level,l))&&(c.crossings[s]=u,-1!==a.indexOf(u)&&(c.starts.push([e,r]),m&&-1!==a.indexOf(u,a.indexOf(u)+1)&&c.starts.push([e,r])))}},{"./constants":923}],932:[function(t,e,r){"use strict";function n(t,e,n){var s=n[0].trace,u=n[0].x,h=n[0].y,f=s.contours,d=s.uid,p=e.xaxis,m=e.yaxis,g=t._fullLayout,v="contour"+d,_=i(f,e,n[0]);if(!0!==s.visible)return g._paper.selectAll("."+v+",.hm"+d).remove(),void g._infolayer.selectAll(".cb"+d).remove();"heatmap"===f.coloring?(s.zauto&&!1===s.autocontour&&(s._input.zmin=s.zmin=f.start-f.size/2,s._input.zmax=s.zmax=s.zmin+_.length*f.size),y(t,e,[n])):(g._paper.selectAll(".hm"+d).remove(),g._infolayer.selectAll("g.rangeslider-container").selectAll(".hm"+d).remove()),b(_),x(_);var w=p.c2p(u[0],!0),M=p.c2p(u[u.length-1],!0),k=m.c2p(h[0],!0),A=m.c2p(h[h.length-1],!0),T=[[w,A],[M,A],[M,k],[w,k]],S=r.makeContourGroup(e,n,v);a(S,T,f),o(S,_,T,f),l(S,_,t,n[0],f,T),c(S,e,g._clips,n[0],T)}function i(t,e,r){for(var n=t.size,i=[],a=_(t),o=t.start;o<a;o+=n)if(i.push({level:o,crossings:{},starts:[],edgepaths:[],paths:[],xaxis:e.xaxis,yaxis:e.yaxis,x:r.x,y:r.y,z:r.z,smoothing:r.trace.line.smoothing}),i.length>1e3){d.warn("Too many contours, clipping at 1000",t);break}return i}function a(t,e,r){var n=t.selectAll("g.contourbg").data([0]);n.enter().append("g").classed("contourbg",!0);var i=n.selectAll("path").data("fill"===r.coloring?[0]:[]);i.enter().append("path"),i.exit().remove(),i.attr("d","M"+e.join("L")+"Z").style("stroke","none")}function o(t,e,r,n){var i=t.selectAll("g.contourfill").data([0]);i.enter().append("g").classed("contourfill",!0);var a=i.selectAll("path").data("fill"===n.coloring?e:[]);a.enter().append("path"),a.exit().remove(),a.each(function(t){var e=s(t,r);e?f.select(this).attr("d",e).style("stroke","none"):f.select(this).remove()})}function s(t,e){function r(t){return Math.abs(t[0]-e[2][0])<.01}for(var n,i,a,o,s,l,u=Math.min(t.z[0][0],t.z[0][1]),c=t.edgepaths.length||u<=t.level?"":"M"+e.join("L")+"Z",h=0,f=t.edgepaths.map(function(t,e){return e}),m=!0;f.length;){for(l=p.smoothopen(t.edgepaths[h],t.smoothing),c+=m?l:l.replace(/^M/,"L"),f.splice(f.indexOf(h),1),n=t.edgepaths[h][t.edgepaths[h].length-1],o=-1,a=0;a<4;a++){if(!n){d.log("Missing end?",h,t);break}for(!function(t){return Math.abs(t[1]-e[0][1])<.01}(n)||r(n)?!function(t){return Math.abs(t[0]-e[0][0])<.01}(n)?!function(t){return Math.abs(t[1]-e[2][1])<.01}(n)?r(n)&&(i=e[2]):i=e[3]:i=e[0]:i=e[1],s=0;s<t.edgepaths.length;s++){var g=t.edgepaths[s][0];Math.abs(n[0]-i[0])<.01?Math.abs(n[0]-g[0])<.01&&(g[1]-n[1])*(i[1]-g[1])>=0&&(i=g,o=s):Math.abs(n[1]-i[1])<.01?Math.abs(n[1]-g[1])<.01&&(g[0]-n[0])*(i[0]-g[0])>=0&&(i=g,o=s):d.log("endpt to newendpt is not vert. or horz.",n,i,g)}if(n=i,o>=0)break;c+="L"+i}if(o===t.edgepaths.length){d.log("unclosed perimeter path");break}h=o,m=-1===f.indexOf(h),m&&(h=f[0],c+="Z")}for(h=0;h<t.paths.length;h++)c+=p.smoothclosed(t.paths[h],t.smoothing);return c}function l(t,e,n,i,a,o){var s=t.selectAll("g.contourlines").data([0]);s.enter().append("g").classed("contourlines",!0);var l=!1!==a.showlines,u=a.showlabels,c=l&&u,h=r.createLines(s,l||u,e),m=r.createLineClip(s,c,n._fullLayout._clips,i.trace.uid),g=t.selectAll("g.contourlabels").data(u?[0]:[]);if(g.exit().remove(),g.enter().append("g").classed("contourlabels",!0),u){var v=[o],y=[];d.clearLocationCache();var b=r.labelFormatter(a,i.t.cb,n._fullLayout),x=p.tester.append("text").attr("data-notex",1).call(p.font,a.labelfont),_=e[0].xaxis._length,M=e[0].yaxis._length,k={
left:Math.max(o[0][0],0),right:Math.min(o[2][0],_),top:Math.max(o[0][1],0),bottom:Math.min(o[2][1],M)};k.middle=(k.top+k.bottom)/2,k.center=(k.left+k.right)/2;var A=Math.sqrt(_*_+M*M),T=w.LABELDISTANCE*A/Math.max(1,e.length/w.LABELINCREASE);h.each(function(t){var e=r.calcTextOpts(t.level,b,x,n);f.select(this).selectAll("path").each(function(){var t=this,n=d.getVisibleSegment(t,k,e.height/2);if(n&&!(n.len<(e.width+e.height)*w.LABELMIN))for(var i=Math.min(Math.ceil(n.len/T),w.LABELMAX),a=0;a<i;a++){var o=r.findBestTextLocation(t,n,e,y,k);if(!o)break;r.addLabelData(o,e,y,v)}})}),x.remove(),r.drawLabels(g,y,n,m,c?v:null)}u&&!l&&h.remove()}function u(t,e,r,n){var i=e.width/2,a=e.height/2,o=t.x,s=t.y,l=t.theta,u=Math.cos(l)*i,c=Math.sin(l)*i,h=(o>n.center?n.right-o:o-n.left)/(u+Math.abs(Math.sin(l)*a)),f=(s>n.middle?n.bottom-s:s-n.top)/(Math.abs(c)+Math.cos(l)*a);if(h<1||f<1)return 1/0;var p=M.EDGECOST*(1/(h-1)+1/(f-1));p+=M.ANGLECOST*l*l;for(var m=o-u,g=s-c,v=o+u,y=s+c,b=0;b<r.length;b++){var x=r[b],_=Math.cos(x.theta)*x.width/2,w=Math.sin(x.theta)*x.width/2,k=2*d.segmentDistance(m,g,v,y,x.x-_,x.y-w,x.x+_,x.y+w)/(e.height+x.height),A=x.level===e.level,T=A?M.SAMELEVELDISTANCE:1;if(k<=T)return 1/0;p+=M.NEIGHBORCOST*(A?M.SAMELEVELFACTOR:1)/(k-T)}return p}function c(t,e,r,n,i){var a="clip"+n.trace.uid,o=r.selectAll("#"+a).data(n.trace.connectgaps?[]:[0]);if(o.enter().append("clipPath").classed("contourclip",!0).attr("id",a),o.exit().remove(),!1===n.trace.connectgaps){var l={level:.9,crossings:{},starts:[],edgepaths:[],paths:[],xaxis:e.xaxis,yaxis:e.yaxis,x:n.x,y:n.y,z:h(n),smoothing:0};b([l]),x([l]);var u=s(l,i),c=o.selectAll("path").data([0]);c.enter().append("path"),c.attr("d",u)}else a=null;t.call(p.setClipUrl,a),e.plot.selectAll(".hm"+n.trace.uid).call(p.setClipUrl,a)}function h(t){var e,r,n=t.trace._emptypoints,i=[],a=t.z.length,o=t.z[0].length,s=[];for(e=0;e<o;e++)s.push(1);for(e=0;e<a;e++)i.push(s.slice());for(e=0;e<n.length;e++)r=n[e],i[r[0]][r[1]]=0;return t.zmask=i,i}var f=t("d3"),d=t("../../lib"),p=t("../../components/drawing"),m=t("../../lib/svg_text_utils"),g=t("../../plots/cartesian/axes"),v=t("../../plots/cartesian/set_convert"),y=t("../heatmap/plot"),b=t("./make_crossings"),x=t("./find_all_paths"),_=t("./end_plus"),w=t("./constants"),M=w.LABELOPTIMIZER;r.plot=function(t,e,r){for(var i=0;i<r.length;i++)n(t,e,r[i])},r.makeContourGroup=function(t,e,r){var n=t.plot.select(".maplayer").selectAll("g.contour."+r).data(e);return n.enter().append("g").classed("contour",!0).classed(r,!0),n.exit().remove(),n},r.createLines=function(t,e,r){var n=r[0].smoothing,i=t.selectAll("g.contourlevel").data(e?r:[]);if(i.exit().remove(),i.enter().append("g").classed("contourlevel",!0),e){var a=i.selectAll("path.openline").data(function(t){return t.pedgepaths||t.edgepaths});a.exit().remove(),a.enter().append("path").classed("openline",!0),a.attr("d",function(t){return p.smoothopen(t,n)}).style("stroke-miterlimit",1).style("vector-effect","non-scaling-stroke");var o=i.selectAll("path.closedline").data(function(t){return t.ppaths||t.paths});o.exit().remove(),o.enter().append("path").classed("closedline",!0),o.attr("d",function(t){return p.smoothclosed(t,n)}).style("stroke-miterlimit",1).style("vector-effect","non-scaling-stroke")}return i},r.createLineClip=function(t,e,r,n){var i=e?"clipline"+n:null,a=r.selectAll("#"+i).data(e?[0]:[]);return a.exit().remove(),a.enter().append("clipPath").classed("contourlineclip",!0).attr("id",i),p.setClipUrl(t,i),a},r.labelFormatter=function(t,e,r){if(t.labelformat)return f.format(t.labelformat);var n;return e?n=e.axis:(n={type:"linear",_separators:".,",_id:"ycontour",nticks:(t.end-t.start)/t.size,showexponent:"all",range:[t.start,t.end]},v(n,r),g.calcTicks(n),n._tmin=null,n._tmax=null),function(t){return g.tickText(n,t).text}},r.calcTextOpts=function(t,e,r,n){var i=e(t);r.text(i).call(m.convertToTspans,n);var a=p.bBox(r.node(),!0);return{text:i,width:a.width,height:a.height,level:t,dy:(a.top+a.bottom)/2}},r.findBestTextLocation=function(t,e,r,n,i){var a,o,s,l,c,h=r.width;e.isClosed?(o=e.len/M.INITIALSEARCHPOINTS,a=e.min+o/2,s=e.max):(o=(e.len-h)/(M.INITIALSEARCHPOINTS+1),a=e.min+o+h/2,s=e.max-(o+h)/2);for(var f=1/0,p=0;p<M.ITERATIONS;p++){for(var m=a;m<s;m+=o){var g=d.getTextLocation(t,e.total,m,h),v=u(g,r,n,i);v<f&&(f=v,c=g,l=m)}if(f>2*M.MAXCOST)break;p&&(o/=2),a=l-o/2,s=a+1.5*o}if(f<=M.MAXCOST)return c},r.addLabelData=function(t,e,r,n){var i=e.width/2,a=e.height/2,o=t.x,s=t.y,l=t.theta,u=Math.sin(l),c=Math.cos(l),h=i*c,f=a*u,d=i*u,p=-a*c,m=[[o-h-f,s-d-p],[o+h-f,s+d-p],[o+h+f,s+d+p],[o-h+f,s-d+p]];r.push({text:e.text,x:o,y:s,dy:e.dy,theta:l,level:e.level,width:e.width,height:e.height}),n.push(m)},r.drawLabels=function(t,e,r,n,i){var a=t.selectAll("text").data(e,function(t){return t.text+","+t.x+","+t.y+","+t.theta});if(a.exit().remove(),a.enter().append("text").attr({"data-notex":1,"text-anchor":"middle"}).each(function(t){var e=t.x+Math.sin(t.theta)*t.dy,n=t.y-Math.cos(t.theta)*t.dy;f.select(this).text(t.text).attr({x:e,y:n,transform:"rotate("+180*t.theta/Math.PI+" "+e+" "+n+")"}).call(m.convertToTspans,r)}),i){for(var o="",s=0;s<i.length;s++)o+="M"+i[s].join("L")+"Z";var l=n.selectAll("path").data([0]);l.enter().append("path"),l.attr("d",o)}}},{"../../components/drawing":628,"../../lib":728,"../../lib/svg_text_utils":750,"../../plots/cartesian/axes":772,"../../plots/cartesian/set_convert":789,"../heatmap/plot":961,"./constants":923,"./end_plus":926,"./find_all_paths":927,"./make_crossings":931,d3:122}],933:[function(t,e,r){"use strict";var n=t("d3"),i=t("../../components/drawing"),a=t("../heatmap/style"),o=t("./make_color_map");e.exports=function(t){var e=n.select(t).selectAll("g.contour");e.style("opacity",function(t){return t.trace.opacity}),e.each(function(t){var e=n.select(this),r=t.trace,a=r.contours,s=r.line,l=a.size||1,u=a.start,c="constraint"===a.type,h=!c&&"lines"===a.coloring,f=!c&&"fill"===a.coloring,d=h||f?o(r):null;e.selectAll("g.contourlevel").each(function(t){n.select(this).selectAll("path").call(i.lineGroupStyle,s.width,h?d(t.level):s.color,s.dash)});var p=a.labelfont;if(e.selectAll("g.contourlabels text").each(function(t){i.font(n.select(this),{family:p.family,size:p.size,color:p.color||(h?d(t.level):s.color)})}),c)e.selectAll("g.contourfill path").style("fill",r.fillcolor);else if(f){var m;e.selectAll("g.contourfill path").style("fill",function(t){return void 0===m&&(m=t.level),d(t.level+.5*l)}),void 0===m&&(m=u),e.selectAll("g.contourbg path").style("fill",d(m-.5*l))}}),a(t)}},{"../../components/drawing":628,"../heatmap/style":962,"./make_color_map":930,d3:122}],934:[function(t,e,r){"use strict";var n=t("../../components/colorscale/defaults"),i=t("../../lib");e.exports=function(t,e,r,a,o,s){var l,u=r("contours.coloring"),c="";if("fill"===u&&(l=r("contours.showlines")),!1!==l&&("lines"!==u&&(c=r("line.color",o||"#000")),r("line.width",void 0===s?.5:s),r("line.dash")),r("line.smoothing"),"none"!==u&&n(t,e,a,r,{prefix:"",cLetter:"z"}),r("contours.showlabels")){var h=a.font;i.coerceFont(r,"contours.labelfont",{family:h.family,size:h.size,color:c}),r("contours.labelformat")}}},{"../../components/colorscale/defaults":613,"../../lib":728}],935:[function(t,e,r){"use strict";var n=t("../heatmap/attributes"),i=t("../contour/attributes"),a=i.contours,o=t("../scatter/attributes"),s=t("../../components/colorscale/attributes"),l=t("../../components/colorbar/attributes"),u=t("../../lib/extend").extendFlat,c=o.line,h=t("./constants");e.exports=u({},{carpet:{valType:"string",editType:"calc"},z:n.z,a:n.x,a0:n.x0,da:n.dx,b:n.y,b0:n.y0,db:n.dy,text:n.text,transpose:n.transpose,atype:n.xtype,btype:n.ytype,mode:{valType:"flaglist",flags:["lines","fill"],extras:["none"],editType:"calc"},connectgaps:n.connectgaps,fillcolor:{valType:"color",editType:"calc"},autocontour:i.autocontour,ncontours:i.ncontours,contours:{type:{valType:"enumerated",values:["levels","constraint"],dflt:"levels",editType:"calc"},start:a.start,end:a.end,size:a.size,coloring:{valType:"enumerated",values:["fill","lines","none"],dflt:"fill",editType:"calc"},showlines:a.showlines,showlabels:a.showlabels,labelfont:a.labelfont,labelformat:a.labelformat,operation:{valType:"enumerated",values:[].concat(h.INEQUALITY_OPS).concat(h.INTERVAL_OPS).concat(h.SET_OPS),dflt:"=",editType:"calc"},value:{valType:"any",dflt:0,editType:"calc"},editType:"calc"},line:{color:u({},c.color,{}),width:c.width,dash:c.dash,smoothing:u({},c.smoothing,{}),editType:"plot"}},s,{autocolorscale:u({},s.autocolorscale,{dflt:!1})},{colorbar:l})},{"../../components/colorbar/attributes":605,"../../components/colorscale/attributes":609,"../../lib/extend":717,"../contour/attributes":920,"../heatmap/attributes":948,"../scatter/attributes":1031,"./constants":938}],936:[function(t,e,r){"use strict";function n(t,e,r){var n={type:"linear",range:[t,e]};return o.autoTicks(n,(e-t)/(r||15)),n}function i(t,e){function r(t){A=e._input.zsmooth=e.zsmooth=!1,a.notifier("cannot fast-zsmooth: "+t)}var n,i,o,s,v,y,b,x,_=e.carpetTrace,w=_.aaxis,M=_.baxis,k=l.traceIs(e,"contour"),A=k?"best":e.zsmooth;if(w._minDtick=0,M._minDtick=0,c(e)&&h(e,w,M,"a","b",["z"]),n=e.a?w.makeCalcdata(e,"a"):[],s=e.b?M.makeCalcdata(e,"b"):[],i=e.a0||0,o=e.da||1,v=e.b0||0,y=e.db||1,b=f(e.z,e.transpose),e._emptypoints=m(b),e._interpz=p(b,e._emptypoints,e._interpz),"fast"===A)if("log"===w.type||"log"===M.type)r("log axis found");else{if(n.length){var T=(n[n.length-1]-n[0])/(n.length-1),S=Math.abs(T/100);for(x=0;x<n.length-1;x++)if(Math.abs(n[x+1]-n[x]-T)>S){r("a scale is not linear");break}}if(s.length&&"fast"===A){var E=(s[s.length-1]-s[0])/(s.length-1),L=Math.abs(E/100);for(x=0;x<s.length-1;x++)if(Math.abs(s[x+1]-s[x]-E)>L){r("b scale is not linear");break}}}var C=d(b),I="scaled"===e.xtype?"":n,z=g(e,I,i,o,C,w),D="scaled"===e.ytype?"":s,P=g(e,D,v,y,b.length,M),O={a:z,b:P,z:b};return"levels"===e.contours.type&&u(e,b,"","z"),[O]}var a=t("../../lib"),o=t("../../plots/cartesian/axes"),s=t("../../lib").extendFlat,l=t("../../registry"),u=t("../../components/colorscale/calc"),c=t("../heatmap/has_columns"),h=t("../heatmap/convert_column_xyz"),f=t("../heatmap/clean_2d_array"),d=t("../heatmap/max_row_length"),p=t("../heatmap/interp2d"),m=t("../heatmap/find_empties"),g=t("../heatmap/make_bound_array"),v=t("./defaults"),y=t("../carpet/lookup_carpetid");e.exports=function(t,e){var r=e.carpetTrace=y(t,e);if(r&&r.visible&&"legendonly"!==r.visible){if(!e.a||!e.b){var a=t.data[r.index],l=t.data[e.index];l.a||(l.a=a.a),l.b||(l.b=a.b),v(l,e,e._defaultColor,t._fullLayout)}var u=i(t,e),c=e.contours;if(!0===e.autocontour){var h=n(e.zmin,e.zmax,e.ncontours);c.size=h.dtick,c.start=o.tickFirst(h),h.range.reverse(),c.end=o.tickFirst(h),c.start===e.zmin&&(c.start+=c.size),c.end===e.zmax&&(c.end-=c.size),c.start>c.end&&(c.start=c.end=(c.start+c.end)/2),e._input.contours=s({},c)}else{var f=c.start,d=c.end,p=e._input.contours;if(f>d&&(c.start=p.start=d,d=c.end=p.end=f,f=c.start),!(c.size>0)){var m;m=f===d?1:n(f,d,e.ncontours).dtick,p.size=c.size=m}}return u}}},{"../../components/colorscale/calc":610,"../../lib":728,"../../plots/cartesian/axes":772,"../../registry":846,"../carpet/lookup_carpetid":903,"../heatmap/clean_2d_array":950,"../heatmap/convert_column_xyz":952,"../heatmap/find_empties":954,"../heatmap/has_columns":955,"../heatmap/interp2d":958,"../heatmap/make_bound_array":959,"../heatmap/max_row_length":960,"./defaults":942}],937:[function(t,e,r){"use strict";e.exports=function(t,e,r,n){var i,a,o,s=n.a.length,l=n.b.length,u=n.z,c=-1/0,h=1/0;for(i=0;i<l;i++)h=Math.min(h,u[i][0]),h=Math.min(h,u[i][s-1]),c=Math.max(c,u[i][0]),c=Math.max(c,u[i][s-1]);for(i=1;i<s-1;i++)h=Math.min(h,u[0][i]),h=Math.min(h,u[l-1][i]),c=Math.max(c,u[0][i]),c=Math.max(c,u[l-1][i]);switch(e){case">":case">=":n.contours.value>c&&(t[0].prefixBoundary=!0);break;case"<":case"<=":n.contours.value<h&&(t[0].prefixBoundary=!0);break;case"[]":case"()":a=Math.min.apply(null,n.contours.value),o=Math.max.apply(null,n.contours.value),o<h&&(t[0].prefixBoundary=!0),a>c&&(t[0].prefixBoundary=!0);break;case"][":case")(":a=Math.min.apply(null,n.contours.value),o=Math.max.apply(null,n.contours.value),a<h&&o>c&&(t[0].prefixBoundary=!0)}}},{}],938:[function(t,e,r){"use strict";e.exports={INEQUALITY_OPS:["=","<",">=",">","<="],INTERVAL_OPS:["[]","()","[)","(]","][",")(","](",")["],SET_OPS:["{}","}{"]}},{}],939:[function(t,e,r){"use strict";function n(t,e){function r(t){return s(t)?+t:null}var n,i=Array.isArray(e);return-1!==o.INEQUALITY_OPS.indexOf(t)?n=r(i?e[0]:e):-1!==o.INTERVAL_OPS.indexOf(t)?n=i?[r(e[0]),r(e[1])]:[r(e),r(e)]:-1!==o.SET_OPS.indexOf(t)&&(n=i?e.map(r):[r(e)]),n}function i(t){return function(e){e=n(t,e);var r=Math.min(e[0],e[1]),i=Math.max(e[0],e[1]);return{start:r,end:i,size:i-r}}}function a(t){return function(e){return e=n(t,e),{start:e,end:1/0,size:1/0}}}var o=t("./constants"),s=t("fast-isnumeric");e.exports["[]"]=i("[]"),e.exports["()"]=i("()"),e.exports["[)"]=i("[)"),e.exports["(]"]=i("(]"),e.exports["]["]=i("]["),e.exports[")("]=i(")("),e.exports[")["]=i(")["),e.exports["]("]=i("]("),e.exports[">"]=a(">"),e.exports[">="]=a(">="),e.exports["<"]=a("<"),e.exports["<="]=a("<="),e.exports["="]=a("=")},{"./constants":938,"fast-isnumeric":131}],940:[function(t,e,r){"use strict";var n=t("./constraint_mapping"),i=t("fast-isnumeric");e.exports=function(t,e){var r;-1===["=","<","<=",">",">="].indexOf(e.operation)?(t("contours.value",[0,1]),Array.isArray(e.value)?e.value.length>2?e.value=e.value.slice(2):0===e.length?e.value=[0,1]:e.length<2?(r=parseFloat(e.value[0]),e.value=[r,r+1]):e.value=[parseFloat(e.value[0]),parseFloat(e.value[1])]:i(e.value)&&(r=parseFloat(e.value),e.value=[r,r+1])):(t("contours.value",0),i(e.value)||(Array.isArray(e.value)?e.value=parseFloat(e.value[0]):e.value=0));var a=n[e.operation](e.value);e.start=a.start,e.end=a.end,e.size=a.size}},{"./constraint_mapping":939,"fast-isnumeric":131}],941:[function(t,e,r){"use strict";var n=t("../../lib");e.exports=function(t,e){var r,i,a,o=function(t){return t.reverse()},s=function(t){return t};switch(e){case"][":case")[":case"](":case")(":var l=o;o=s,s=l;case"[]":case"[)":case"(]":case"()":if(2!==t.length)return void n.warn("Contour data invalid for the specified inequality range operation.");for(i=t[0],a=t[1],r=0;r<i.edgepaths.length;r++)i.edgepaths[r]=o(i.edgepaths[r]);for(r=0;r<i.paths.length;r++)i.paths[r]=o(i.paths[r]);for(;a.edgepaths.length;)i.edgepaths.push(s(a.edgepaths.shift()));for(;a.paths.length;)i.paths.push(s(a.paths.shift()));t.pop();break;case">=":case">":if(1!==t.length)return void n.warn("Contour data invalid for the specified inequality operation.");for(i=t[0],r=0;r<i.edgepaths.length;r++)i.edgepaths[r]=o(i.edgepaths[r]);for(r=0;r<i.paths.length;r++)i.paths[r]=o(i.paths[r])}}},{"../../lib":728}],942:[function(t,e,r){"use strict";var n=t("../../lib"),i=t("../heatmap/xyz_defaults"),a=t("./attributes"),o=t("../contour/style_defaults"),s=t("../scatter/fillcolor_defaults"),l=t("../../plots/attributes"),u=t("./constraint_value_defaults"),c=t("../../components/color").addOpacity;e.exports=function(t,e,r,h){function f(r,i){return n.coerce(t,e,a,r,i)}if(f("carpet"),t.a&&t.b){var d,p,m,g,v;if(!i(t,e,f,h,"a","b"))return void(e.visible=!1);f("text"),f("contours.type");var y=e.contours;if("constraint"===y.type){f("contours.operation"),u(f,y),n.coerce(t,e,l,"showlegend",!0),f("contours.coloring","="===y.operation?"lines":"fill"),f("contours.showlines",!0),"="===y.operation&&(y.coloring="lines"),s(t,e,r,f);var b=e.fillcolor?c(e.fillcolor,1):r;o(t,e,f,h,b,2),"="===y.operation&&(f("line.color",r),"fill"===y.coloring&&(y.coloring="lines"),"lines"===y.coloring&&delete e.fillcolor),delete e.showscale,delete e.autocontour,delete e.autocolorscale,delete e.colorscale,delete e.ncontours,delete e.colorbar,e.line&&(delete e.line.autocolorscale,delete e.line.colorscale,delete e.line.mincolor,delete e.line.maxcolor)}else n.coerce(t,e,l,"showlegend",!1),p=n.coerce2(t,e,a,"contours.start"),m=n.coerce2(t,e,a,"contours.end"),d=f("contours.size"),f("contours.coloring"),g=!1===p||!1===m,v=g?e.autocontour=!0:f("autocontour",!1),!v&&d||f("ncontours"),o(t,e,f,h),delete e.value,delete e.operation}else e._defaultColor=r}},{"../../components/color":604,"../../lib":728,"../../plots/attributes":770,"../contour/style_defaults":934,"../heatmap/xyz_defaults":963,"../scatter/fillcolor_defaults":1039,"./attributes":935,"./constraint_value_defaults":940}],943:[function(t,e,r){"use strict";var n=t("../../lib");e.exports=function(t,e,r){for(var i=t.size,a=[],o=r.trace.carpetTrace,s=t.start;s<t.end+i/10;s+=i)if(a.push({level:s,crossings:{},starts:[],edgepaths:[],paths:[],xaxis:o.aaxis,yaxis:o.baxis,x:r.a,y:r.b,z:r.z,smoothing:r.trace.line.smoothing}),a.length>1e3){n.warn("Too many contours, clipping at 1000",t);break}return a}},{"../../lib":728}],944:[function(t,e,r){"use strict";var n={};n.attributes=t("./attributes"),n.supplyDefaults=t("./defaults"),n.colorbar=t("../contour/colorbar"),n.calc=t("./calc"),n.plot=t("./plot"),n.style=t("../contour/style"),n.moduleType="trace",n.name="contourcarpet",n.basePlotModule=t("../../plots/cartesian"),n.categories=["cartesian","carpet","contour","symbols","showLegend","hasLines","carpetDependent"],n.meta={},e.exports=n},{"../../plots/cartesian":782,"../contour/colorbar":922,"../contour/style":933,"./attributes":935,"./calc":936,"./defaults":942,"./plot":947}],945:[function(t,e,r){"use strict";var n=t("../../components/drawing"),i=t("../carpet/axis_aligned_line"),a=t("../../lib");e.exports=function(t,e,r,o,s,l,u,c){function h(t){return Math.abs(t[1]-r[0][1])<S}function f(t){return Math.abs(t[1]-r[2][1])<S}function d(t){return Math.abs(t[0]-r[0][0])<T}function p(t){return Math.abs(t[0]-r[2][0])<T}function m(t,e){var r,n,a,o,m="";for(h(t)&&!p(t)||f(t)&&!d(t)?(o=s.aaxis,a=i(s,l,[t[0],e[0]],.5*(t[1]+e[1]))):(o=s.baxis,a=i(s,l,.5*(t[0]+e[0]),[t[1],e[1]])),r=1;r<a.length;r++)for(m+=o.smoothing?"C":"L",n=0;n<a[r].length;n++){var g=a[r][n];m+=[u.c2p(g[0]),c.c2p(g[1])]+" "}return m}var g,v,y,b,x,_,w,M="",k=e.edgepaths.map(function(t,e){return e}),A=!0,T=1e-4*Math.abs(r[0][0]-r[2][0]),S=1e-4*Math.abs(r[0][1]-r[2][1]);for(g=0,v=null;k.length;){var E=e.edgepaths[g][0];for(v&&(M+=m(v,E)),w=n.smoothopen(e.edgepaths[g].map(o),e.smoothing),M+=A?w:w.replace(/^M/,"L"),k.splice(k.indexOf(g),1),v=e.edgepaths[g][e.edgepaths[g].length-1],x=-1,b=0;b<4;b++){if(!v){a.log("Missing end?",g,e);break}for(h(v)&&!p(v)?y=r[1]:d(v)?y=r[0]:f(v)?y=r[3]:p(v)&&(y=r[2]),_=0;_<e.edgepaths.length;_++){var L=e.edgepaths[_][0];Math.abs(v[0]-y[0])<T?Math.abs(v[0]-L[0])<T&&(L[1]-v[1])*(y[1]-L[1])>=0&&(y=L,x=_):Math.abs(v[1]-y[1])<S?Math.abs(v[1]-L[1])<S&&(L[0]-v[0])*(y[0]-L[0])>=0&&(y=L,x=_):a.log("endpt to newendpt is not vert. or horz.",v,y,L)}if(x>=0)break;M+=m(v,y),v=y}if(x===e.edgepaths.length){a.log("unclosed perimeter path");break}g=x,A=-1===k.indexOf(g),A&&(g=k[0],M+=m(v,y)+"Z",v=null)}for(g=0;g<e.paths.length;g++)M+=n.smoothclosed(e.paths[g].map(o),e.smoothing);return M}},{"../../components/drawing":628,"../../lib":728,"../carpet/axis_aligned_line":886}],946:[function(t,e,r){"use strict";e.exports=function(t,e){var r,n,i,a,o,s,l,u,c;for(r=0;r<t.length;r++){for(a=t[r],o=a.pedgepaths=[],s=a.ppaths=[],n=0;n<a.edgepaths.length;n++){for(c=a.edgepaths[n],l=[],i=0;i<c.length;i++)l[i]=e(c[i]);o.push(l)}for(n=0;n<a.paths.length;n++){for(c=a.paths[n],u=[],i=0;i<c.length;i++)u[i]=e(c[i]);s.push(u)}}}},{}],947:[function(t,e,r){"use strict";function n(t,e,r){function n(t){var e=o.ab2xy(t[0],t[1],!0);return[_.c2p(e[0]),T.c2p(e[1])]}var a=r[0].trace,o=a.carpetTrace=k(t,a),s=t.calcdata[o.index][0];if(o.visible&&"legendonly"!==o.visible){var l=r[0].a,h=r[0].b,m=a.contours,b=a.uid,_=e.xaxis,T=e.yaxis,S=t._fullLayout,E="contour"+b,L=w(m,e,r[0]),C="constraint"===a.contours.type;if(!0!==a.visible)return void S._infolayer.selectAll(".cb"+b).remove();var I=[[l[0],h[h.length-1]],[l[l.length-1],h[h.length-1]],[l[l.length-1],h[0]],[l[0],h[0]]];g(L);var z=1e-8*(l[l.length-1]-l[0]),D=1e-8*(h[h.length-1]-h[0]);v(L,z,D),"constraint"===a.contours.type&&(x(L,a.contours.operation),A(L,a.contours.operation,I,a)),M(L,n);var P,O,R,F,j=y.makeContourGroup(e,r,E),N=[];for(F=s.clipsegments.length-1;F>=0;F--)P=s.clipsegments[F],O=f([],P.x,_.c2p),R=f([],P.y,T.c2p),O.reverse(),R.reverse(),N.push(d(O,R,P.bicubic));var B="M"+N.join("L")+"Z";u(j,s.clipsegments,_,T,C,m.coloring),c(a,j,_,T,L,I,n,o,s,m.coloring,B),i(j,L,t,r[0],m,e,o),p.setClipUrl(j,o._clipPathId)}}function i(t,e,r,n,i,o,s){var l=t.selectAll("g.contourlines").data([0]);l.enter().append("g").classed("contourlines",!0);var u=!1!==i.showlines,c=i.showlabels,f=u&&c,d=y.createLines(l,u||c,e),g=y.createLineClip(l,f,r._fullLayout._defs,n.trace.uid),v=t.selectAll("g.contourlabels").data(c?[0]:[]);if(v.exit().remove(),v.enter().append("g").classed("contourlabels",!0),c){var x=o.xaxis,_=o.yaxis,w=x._length,M=_._length,k=[[[0,0],[w,0],[w,M],[0,M]]],A=[];m.clearLocationCache();var T=y.labelFormatter(i,n.t.cb,r._fullLayout),S=p.tester.append("text").attr("data-notex",1).call(p.font,i.labelfont),E={left:0,right:w,center:w/2,top:0,bottom:M,middle:M/2},L=Math.sqrt(w*w+M*M),C=b.LABELDISTANCE*L/Math.max(1,e.length/b.LABELINCREASE);d.each(function(t){var e=y.calcTextOpts(t.level,T,S,r);h.select(this).selectAll("path").each(function(r){var n=this,i=m.getVisibleSegment(n,E,e.height/2);if(i&&(a(n,r,t,i,s,e.height),!(i.len<(e.width+e.height)*b.LABELMIN)))for(var o=Math.min(Math.ceil(i.len/C),b.LABELMAX),l=0;l<o;l++){var u=y.findBestTextLocation(n,i,e,A,E);if(!u)break;y.addLabelData(u,e,A,k)}})}),S.remove(),y.drawLabels(v,A,r,g,f?k:null)}c&&!u&&d.remove()}function a(t,e,r,n,i,a){function u(t,e){var r,n=0;return(Math.abs(t[0]-f)<.1||Math.abs(t[0]-d)<.1)&&(r=s(i.dxydb_rough(t[0],t[1],.1)),n=Math.max(n,a*l(e,r)/2)),(Math.abs(t[1]-p)<.1||Math.abs(t[1]-m)<.1)&&(r=s(i.dxyda_rough(t[0],t[1],.1)),n=Math.max(n,a*l(e,r)/2)),n}for(var c,h=0;h<r.pedgepaths.length;h++)e===r.pedgepaths[h]&&(c=r.edgepaths[h]);if(c){var f=i.a[0],d=i.a[i.a.length-1],p=i.b[0],m=i.b[i.b.length-1],g=o(t,0,1),v=o(t,n.total,n.total-1),y=u(c[0],g),b=n.total-u(c[c.length-1],v);n.min<y&&(n.min=y),n.max>b&&(n.max=b),n.len=n.max-n.min}}function o(t,e,r){var n=t.getPointAtLength(e),i=t.getPointAtLength(r),a=i.x-n.x,o=i.y-n.y,s=Math.sqrt(a*a+o*o);return[a/s,o/s]}function s(t){var e=Math.sqrt(t[0]*t[0]+t[1]*t[1]);return[t[0]/e,t[1]/e]}function l(t,e){var r=Math.abs(t[0]*e[0]+t[1]*e[1]);return Math.sqrt(1-r*r)/r}function u(t,e,r,n,i,a){var o,s,l,u,c=t.selectAll("g.contourbg").data([0]);c.enter().append("g").classed("contourbg",!0);var h=c.selectAll("path").data("fill"!==a||i?[]:[0]);h.enter().append("path"),h.exit().remove();var p=[];for(u=0;u<e.length;u++)o=e[u],s=f([],o.x,r.c2p),l=f([],o.y,n.c2p),p.push(d(s,l,o.bicubic));h.attr("d","M"+p.join("L")+"Z").style("stroke","none")}function c(t,e,r,n,i,a,o,s,l,u,c){var f=e.selectAll("g.contourfill").data([0]);f.enter().append("g").classed("contourfill",!0);var d=f.selectAll("path").data("fill"===u?i:[]);d.enter().append("path"),d.exit().remove(),d.each(function(e){var i=_(t,e,a,o,s,l,r,n);e.prefixBoundary&&(i=c+i),i?h.select(this).attr("d",i).style("stroke","none"):h.select(this).remove()})}var h=t("d3"),f=t("../carpet/map_1d_array"),d=t("../carpet/makepath"),p=t("../../components/drawing"),m=t("../../lib"),g=t("../contour/make_crossings"),v=t("../contour/find_all_paths"),y=t("../contour/plot"),b=t("../contour/constants"),x=t("./convert_to_constraints"),_=t("./join_all_paths"),w=t("./empty_pathinfo"),M=t("./map_pathinfo"),k=t("../carpet/lookup_carpetid"),A=t("./close_boundaries");e.exports=function(t,e,r){for(var i=0;i<r.length;i++)n(t,e,r[i])}},{"../../components/drawing":628,"../../lib":728,"../carpet/lookup_carpetid":903,"../carpet/makepath":904,"../carpet/map_1d_array":905,"../contour/constants":923,"../contour/find_all_paths":927,"../contour/make_crossings":931,"../contour/plot":932,"./close_boundaries":937,"./convert_to_constraints":941,"./empty_pathinfo":943,"./join_all_paths":945,"./map_pathinfo":946,d3:122}],948:[function(t,e,r){"use strict";var n=t("../scatter/attributes"),i=t("../../components/colorscale/attributes"),a=t("../../components/colorbar/attributes"),o=t("../../lib/extend").extendFlat;e.exports=o({},{z:{valType:"data_array",editType:"calc"},x:o({},n.x,{impliedEdits:{xtype:"array"}}),x0:o({},n.x0,{impliedEdits:{xtype:"scaled"}}),dx:o({},n.dx,{impliedEdits:{xtype:"scaled"}}),y:o({},n.y,{impliedEdits:{ytype:"array"}}),y0:o({},n.y0,{impliedEdits:{ytype:"scaled"}}),dy:o({},n.dy,{impliedEdits:{ytype:"scaled"}}),text:{valType:"data_array",editType:"calc"},transpose:{valType:"boolean",dflt:!1,editType:"calc"},xtype:{valType:"enumerated",values:["array","scaled"],editType:"calc+clearAxisTypes"},ytype:{valType:"enumerated",values:["array","scaled"],editType:"calc+clearAxisTypes"},zsmooth:{valType:"enumerated",values:["fast","best",!1],dflt:!1,editType:"calc"},connectgaps:{valType:"boolean",dflt:!1,editType:"calc"},xgap:{valType:"number",dflt:0,min:0,editType:"plot"},ygap:{valType:"number",dflt:0,min:0,editType:"plot"}},i,{autocolorscale:o({},i.autocolorscale,{dflt:!1})},{colorbar:a})},{"../../components/colorbar/attributes":605,"../../components/colorscale/attributes":609,"../../lib/extend":717,"../scatter/attributes":1031}],949:[function(t,e,r){"use strict";var n=t("../../registry"),i=t("../../lib"),a=t("../../plots/cartesian/axes"),o=t("../histogram2d/calc"),s=t("../../components/colorscale/calc"),l=t("./has_columns"),u=t("./convert_column_xyz"),c=t("./max_row_length"),h=t("./clean_2d_array"),f=t("./interp2d"),d=t("./find_empties"),p=t("./make_bound_array");e.exports=function(t,e){function r(t){E=e._input.zsmooth=e.zsmooth=!1,i.notifier("cannot fast-zsmooth: "+t)}var m,g,v,y,b,x,_,w,M=a.getFromId(t,e.xaxis||"x"),k=a.getFromId(t,e.yaxis||"y"),A=n.traceIs(e,"contour"),T=n.traceIs(e,"histogram"),S=n.traceIs(e,"gl2d"),E=A?"best":e.zsmooth;if(M._minDtick=0,k._minDtick=0,T){var L=o(t,e);m=L.x,g=L.x0,v=L.dx,y=L.y,b=L.y0,x=L.dy,_=L.z}else l(e)?(u(e,M,k,"x","y",["z"]),m=e.x,y=e.y):(m=e.x?M.makeCalcdata(e,"x"):[],y=e.y?k.makeCalcdata(e,"y"):[]),g=e.x0||0,v=e.dx||1,b=e.y0||0,x=e.dy||1,_=h(e.z,e.transpose),(A||e.connectgaps)&&(e._emptypoints=d(_),e._interpz=f(_,e._emptypoints,e._interpz));if("fast"===E)if("log"===M.type||"log"===k.type)r("log axis found");else if(!T){if(m.length){var C=(m[m.length-1]-m[0])/(m.length-1),I=Math.abs(C/100);for(w=0;w<m.length-1;w++)if(Math.abs(m[w+1]-m[w]-C)>I){r("x scale is not linear");break}}if(y.length&&"fast"===E){var z=(y[y.length-1]-y[0])/(y.length-1),D=Math.abs(z/100);for(w=0;w<y.length-1;w++)if(Math.abs(y[w+1]-y[w]-z)>D){r("y scale is not linear");break}}}var P=c(_),O="scaled"===e.xtype?"":m,R=p(e,O,g,v,P,M),F="scaled"===e.ytype?"":y,j=p(e,F,b,x,_.length,k);S||(a.expand(M,R),a.expand(k,j));var N={x:R,y:j,z:_,text:e.text};if(s(e,_,"","z"),A&&e.contours&&"heatmap"===e.contours.coloring){var B={type:"contour"===e.type?"heatmap":"histogram2d",xcalendar:e.xcalendar,ycalendar:e.ycalendar};N.xfill=p(B,O,g,v,P,M),N.yfill=p(B,F,b,x,_.length,k)}return[N]}},{"../../components/colorscale/calc":610,"../../lib":728,"../../plots/cartesian/axes":772,"../../registry":846,"../histogram2d/calc":977,"./clean_2d_array":950,"./convert_column_xyz":952,"./find_empties":954,"./has_columns":955,"./interp2d":958,"./make_bound_array":959,"./max_row_length":960}],950:[function(t,e,r){"use strict";var n=t("fast-isnumeric");e.exports=function(t,e){var r,i,a,o,s,l;if(e){for(r=0,s=0;s<t.length;s++)r=Math.max(r,t[s].length);if(0===r)return!1;a=function(t){return t.length},o=function(t,e,r){return t[r][e]}}else r=t.length,a=function(t,e){return t[e].length},o=function(t,e,r){return t[e][r]};var u=new Array(r);for(s=0;s<r;s++)for(i=a(t,s),u[s]=new Array(i),l=0;l<i;l++)u[s][l]=function(t){if(n(t))return+t}(o(t,s,l));return u}},{"fast-isnumeric":131}],951:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),i=t("../../lib"),a=t("../../plots/plots"),o=t("../../components/colorscale"),s=t("../../components/colorbar/draw");e.exports=function(t,e){var r=e[0].trace,l="cb"+r.uid,u=r.zmin,c=r.zmax;if(n(u)||(u=i.aggNums(Math.min,null,r.z)),n(c)||(c=i.aggNums(Math.max,null,r.z)),t._fullLayout._infolayer.selectAll("."+l).remove(),!r.showscale)return void a.autoMargin(t,l);var h=e[0].t.cb=s(t,l),f=o.makeColorScaleFunc(o.extractScale(r.colorscale,u,c),{noNumericCheck:!0});h.fillcolor(f).filllevels({start:u,end:c,size:(c-u)/254}).options(r.colorbar)()}},{"../../components/colorbar/draw":607,"../../components/colorscale":618,"../../lib":728,"../../plots/plots":831,"fast-isnumeric":131}],952:[function(t,e,r){"use strict";var n=t("../../lib"),i=t("../../constants/numerical").BADNUM;e.exports=function(t,e,r,a,o,s){a=a||"x",o=o||"y",s=s||["z"];var l,u,c,h,f,d=t[a].slice(),p=t[o].slice(),m=t.text,g=Math.min(d.length,p.length),v=void 0!==m&&!Array.isArray(m[0]),y=t[a+"calendar"],b=t[o+"calendar"];for(l=0;l<s.length;l++)(c=t[s[l]])&&(g=Math.min(g,c.length));for(g<d.length&&(d=d.slice(0,g)),g<p.length&&(p=p.slice(0,g)),l=0;l<g;l++)d[l]=e.d2c(d[l],0,y),p[l]=r.d2c(p[l],0,b);var x=n.distinctVals(d),_=x.vals,w=n.distinctVals(p),M=w.vals,k=[];for(l=0;l<s.length;l++)k[l]=n.init2dArray(M.length,_.length);var A,T,S;for(v&&(S=n.init2dArray(M.length,_.length)),l=0;l<g;l++)if(d[l]!==i&&p[l]!==i){for(A=n.findBin(d[l]+x.minDiff/2,_),T=n.findBin(p[l]+w.minDiff/2,M),u=0;u<s.length;u++)f=s[u],c=t[f],h=k[u],h[T][A]=c[l];v&&(S[T][A]=m[l])}for(t[a]=_,t[o]=M,u=0;u<s.length;u++)t[s[u]]=k[u];v&&(t.text=S)}},{"../../constants/numerical":707,"../../lib":728}],953:[function(t,e,r){"use strict";var n=t("../../lib"),i=t("./has_columns"),a=t("./xyz_defaults"),o=t("../../components/colorscale/defaults"),s=t("./attributes");e.exports=function(t,e,r,l){function u(r,i){return n.coerce(t,e,s,r,i)}if(!a(t,e,u,l))return void(e.visible=!1);u("text"),!1===u("zsmooth")&&(u("xgap"),u("ygap")),u("connectgaps",i(e)&&!1!==e.zsmooth),o(t,e,l,u,{prefix:"",cLetter:"z"})}},{"../../components/colorscale/defaults":613,"../../lib":728,"./attributes":948,"./has_columns":955,"./xyz_defaults":963}],954:[function(t,e,r){"use strict";var n=t("./max_row_length");e.exports=function(t){var e,r,i,a,o,s,l,u,c=[],h={},f=[],d=t[0],p=[],m=[0,0,0],g=n(t);for(r=0;r<t.length;r++)for(e=p,p=d,d=t[r+1]||[],i=0;i<g;i++)void 0===p[i]&&(s=(void 0!==p[i-1]?1:0)+(void 0!==p[i+1]?1:0)+(void 0!==e[i]?1:0)+(void 0!==d[i]?1:0),s?(0===r&&s++,0===i&&s++,r===t.length-1&&s++,i===p.length-1&&s++,s<4&&(h[[r,i]]=[r,i,s]),c.push([r,i,s])):f.push([r,i]));for(;f.length;){for(l={},u=!1,o=f.length-1;o>=0;o--)a=f[o],r=a[0],i=a[1],(s=((h[[r-1,i]]||m)[2]+(h[[r+1,i]]||m)[2]+(h[[r,i-1]]||m)[2]+(h[[r,i+1]]||m)[2])/20)&&(l[a]=[r,i,s],f.splice(o,1),u=!0);if(!u)throw"findEmpties iterated with no new neighbors";for(a in l)h[a]=l[a],c.push(l[a])}return c.sort(function(t,e){return e[2]-t[2]})}},{"./max_row_length":960}],955:[function(t,e,r){"use strict";e.exports=function(t){return!Array.isArray(t.z[0])}},{}],956:[function(t,e,r){"use strict";var n=t("../../components/fx"),i=t("../../lib"),a=n.constants.MAXDIST;e.exports=function(t,e,r,o,s){if(!(t.distance<a)){var l,u,c,h,f=t.cd[0],d=f.trace,p=t.xa,m=t.ya,g=f.x,v=f.y,y=f.z,b=f.zmask,x=g,_=v;if(!1!==t.index){try{c=Math.round(t.index[1]),h=Math.round(t.index[0])}catch(e){return void i.error("Error hovering on heatmap, pointNumber must be [row,col], found:",t.index)}if(c<0||c>=y[0].length||h<0||h>y.length)return}else{if(n.inbox(e-g[0],e-g[g.length-1])>a||n.inbox(r-v[0],r-v[v.length-1])>a)return;if(s){var w;for(x=[2*g[0]-g[1]],w=1;w<g.length;w++)x.push((g[w]+g[w-1])/2);for(x.push([2*g[g.length-1]-g[g.length-2]]),_=[2*v[0]-v[1]],w=1;w<v.length;w++)_.push((v[w]+v[w-1])/2);_.push([2*v[v.length-1]-v[v.length-2]])}c=Math.max(0,Math.min(x.length-2,i.findBin(e,x))),h=Math.max(0,Math.min(_.length-2,i.findBin(r,_)))}var M=p.c2p(g[c]),k=p.c2p(g[c+1]),A=m.c2p(v[h]),T=m.c2p(v[h+1]);s?(k=M,l=g[c],T=A,u=v[h]):(l=(g[c]+g[c+1])/2,u=(v[h]+v[h+1])/2,d.zsmooth&&(M=k=(M+k)/2,A=T=(A+T)/2))
;var S=y[h][c];b&&!b[h][c]&&(S=void 0);var E;return Array.isArray(f.text)&&Array.isArray(f.text[h])&&(E=f.text[h][c]),[i.extendFlat(t,{index:[h,c],distance:a+10,x0:M,x1:k,y0:A,y1:T,xLabelVal:l,yLabelVal:u,zLabelVal:S,text:E})]}}},{"../../components/fx":645,"../../lib":728}],957:[function(t,e,r){"use strict";var n={};n.attributes=t("./attributes"),n.supplyDefaults=t("./defaults"),n.calc=t("./calc"),n.plot=t("./plot"),n.colorbar=t("./colorbar"),n.style=t("./style"),n.hoverPoints=t("./hover"),n.moduleType="trace",n.name="heatmap",n.basePlotModule=t("../../plots/cartesian"),n.categories=["cartesian","2dMap"],n.meta={},e.exports=n},{"../../plots/cartesian":782,"./attributes":948,"./calc":949,"./colorbar":951,"./defaults":953,"./hover":956,"./plot":961,"./style":962}],958:[function(t,e,r){"use strict";function n(t){return.5-.25*Math.min(1,.5*t)}function i(t,e,r){var n,i,a,s,l,u,c,h,f,d,p,m,g,v=0;for(s=0;s<e.length;s++){for(n=e[s],i=n[0],a=n[1],p=t[i][a],d=0,f=0,l=0;l<4;l++)u=o[l],(c=t[i+u[0]])&&void 0!==(h=c[a+u[1]])&&(0===d?m=g=h:(m=Math.min(m,h),g=Math.max(g,h)),f++,d+=h);if(0===f)throw"iterateInterp2d order is wrong: no defined neighbors";t[i][a]=d/f,void 0===p?f<4&&(v=1):(t[i][a]=(1+r)*t[i][a]-r*p,g>m&&(v=Math.max(v,Math.abs(t[i][a]-p)/(g-m))))}return v}var a=t("../../lib"),o=[[-1,0],[1,0],[0,-1],[0,1]];e.exports=function(t,e,r){var o,s,l=1;if(Array.isArray(r))for(o=0;o<e.length;o++)s=e[o],t[s[0]][s[1]]=r[s[0]][s[1]];else i(t,e);for(o=0;o<e.length&&!(e[o][2]<4);o++);for(e=e.slice(o),o=0;o<100&&l>.01;o++)l=i(t,e,n(l));return l>.01&&a.log("interp2d didn't converge quickly",l),t}},{"../../lib":728}],959:[function(t,e,r){"use strict";var n=t("../../registry");e.exports=function(t,e,r,i,a,o){var s,l,u,c=[],h=n.traceIs(t,"contour"),f=n.traceIs(t,"histogram"),d=n.traceIs(t,"gl2d");if(Array.isArray(e)&&e.length>1&&!f&&"category"!==o.type){var p=e.length;if(!(p<=a))return h?e.slice(0,a):e.slice(0,a+1);if(h||d)c=e.slice(0,a);else if(1===a)c=[e[0]-.5,e[0]+.5];else{for(c=[1.5*e[0]-.5*e[1]],u=1;u<p;u++)c.push(.5*(e[u-1]+e[u]));c.push(1.5*e[p-1]-.5*e[p-2])}if(p<a){var m=c[c.length-1],g=m-c[c.length-2];for(u=p;u<a;u++)m+=g,c.push(m)}}else{l=i||1;var v=t[o._id.charAt(0)+"calendar"];for(s=f||"category"===o.type?o.r2c(r,0,v)||0:Array.isArray(e)&&1===e.length?e[0]:void 0===r?0:o.d2c(r,0,v),u=h||d?0:-.5;u<a;u++)c.push(s+l*u)}return c}},{"../../registry":846}],960:[function(t,e,r){"use strict";e.exports=function(t){for(var e=0,r=0;r<t.length;r++)e=Math.max(e,t[r].length);return e}},{}],961:[function(t,e,r){"use strict";function n(t,e,r){function n(t,e){var r=e.length-2,n=o.constrain(o.findBin(t,e),0,r),i=e[n],a=e[n+1],s=o.constrain(n+(t-i)/(a-i)-.5,0,r),l=Math.round(s),u=Math.abs(s-l);return s&&s!==r&&u?{bin0:l,frac:u,bin1:Math.round(l+u/(s-l))}:{bin0:l,bin1:l,frac:0}}function c(t,e){if(void 0!==t){var r=q(t);return r[0]=Math.round(r[0]),r[1]=Math.round(r[1]),r[2]=Math.round(r[2]),rt+=e,nt+=r[0]*e,it+=r[1]*e,at+=r[2]*e,r}return[0,0,0,0]}function h(t,e,r){t[e]=r[0],t[e+1]=r[1],t[e+2]=r[2],t[e+3]=Math.round(255*r[3])}var f=r[0].trace,d=f.uid,p=e.xaxis,m=e.yaxis,g=t._fullLayout,v="hm"+d;if(g._paper.selectAll(".contour"+d).remove(),g._infolayer.selectAll("g.rangeslider-container").selectAll(".contour"+d).remove(),!0!==f.visible)return g._paper.selectAll("."+v).remove(),void g._infolayer.selectAll(".cb"+d).remove();var y,b,x,_,w,M,k=r[0].z,A=r[0].x,T=r[0].y,S=a.traceIs(f,"contour"),E=S?"best":f.zsmooth,L=k.length,C=u(k),I=!1,z=!1;for(M=0;void 0===y&&M<A.length-1;)y=p.c2p(A[M]),M++;for(M=A.length-1;void 0===b&&M>0;)b=p.c2p(A[M]),M--;for(b<y&&(x=b,b=y,y=x,I=!0),M=0;void 0===_&&M<T.length-1;)_=m.c2p(T[M]),M++;for(M=T.length-1;void 0===w&&M>0;)w=m.c2p(T[M]),M--;if(w<_&&(x=_,_=w,w=x,z=!0),S&&(A=r[0].xfill,T=r[0].yfill),"fast"!==E){var D="best"===E?0:.5;y=Math.max(-D*p._length,y),b=Math.min((1+D)*p._length,b),_=Math.max(-D*m._length,_),w=Math.min((1+D)*m._length,w)}var P=Math.round(b-y),O=Math.round(w-_),R=P<=0||O<=0,F=e.plot.select(".imagelayer").selectAll("g.hm."+v).data(R?[]:[0]);if(F.enter().append("g").classed("hm",!0).classed(v,!0),F.exit().remove(),!R){var j,N;"fast"===E?(j=C,N=L):(j=P,N=O);var B=document.createElement("canvas");B.width=j,B.height=N;var U,V,H=B.getContext("2d"),q=s.makeColorScaleFunc(s.extractScale(f.colorscale,f.zmin,f.zmax),{noNumericCheck:!0,returnArray:!0});"fast"===E?(U=I?function(t){return C-1-t}:o.identity,V=z?function(t){return L-1-t}:o.identity):(U=function(t){return o.constrain(Math.round(p.c2p(A[t])-y),0,P)},V=function(t){return o.constrain(Math.round(m.c2p(T[t])-_),0,O)});var G,Y,W,X,Z,J,K,Q=V(0),$=[Q,Q],tt=I?0:1,et=z?0:1,rt=0,nt=0,it=0,at=0;if(E){var ot,st=0;try{ot=new Uint8Array(P*O*4)}catch(t){ot=new Array(P*O*4)}if("best"===E){var lt,ut,ct,ht=new Array(A.length),ft=new Array(T.length),dt=new Array(P);for(M=0;M<A.length;M++)ht[M]=Math.round(p.c2p(A[M])-y);for(M=0;M<T.length;M++)ft[M]=Math.round(m.c2p(T[M])-_);for(M=0;M<P;M++)dt[M]=n(M,ht);for(W=0;W<O;W++)for(lt=n(W,ft),ut=k[lt.bin0],ct=k[lt.bin1],M=0;M<P;M++,st+=4)K=function(t,e,r,n){var i=t[r.bin0];if(void 0===i)return c(void 0,1);var a,o=t[r.bin1],s=e[r.bin0],l=e[r.bin1],u=o-i||0,h=s-i||0;return a=void 0===o?void 0===l?0:void 0===s?2*(l-i):2*(2*l-s-i)/3:void 0===l?void 0===s?0:2*(2*i-o-s)/3:void 0===s?2*(2*l-o-i)/3:l+i-o-s,c(i+r.frac*u+n.frac*(h+r.frac*a))}(ut,ct,dt[M],lt),h(ot,st,K)}else for(W=0;W<L;W++)for(J=k[W],$=V(W),M=0;M<P;M++)K=c(J[M],1),st=4*($*P+U(M)),h(ot,st,K);var pt=H.createImageData(P,O);try{pt.data.set(ot)}catch(t){var mt=pt.data,gt=mt.length;for(W=0;W<gt;W++)mt[W]=ot[W]}H.putImageData(pt,0,0)}else for(W=0;W<L;W++)if(J=k[W],$.reverse(),$[et]=V(W+1),$[0]!==$[1]&&void 0!==$[0]&&void 0!==$[1])for(X=U(0),Y=[X,X],M=0;M<C;M++)Y.reverse(),Y[tt]=U(M+1),Y[0]!==Y[1]&&void 0!==Y[0]&&void 0!==Y[1]&&(Z=J[M],K=c(Z,(Y[1]-Y[0])*($[1]-$[0])),H.fillStyle="rgba("+K.join(",")+")",G=function(t,e,r,n,i,a,o,s,l){var u={x0:e,x1:r,y0:n,y1:i},c=2*t.xgap/3,h=2*t.ygap/3,f=t.xgap/3,d=t.ygap/3;return s===l-1&&(u.y1=i-h),a===o-1&&(u.x0=e+c),0===s&&(u.y0=n+h),0===a&&(u.x1=r-c),a>0&&a<o-1&&(u.x0=e+f,u.x1=r-f),s>0&&s<l-1&&(u.y0=n+d,u.y1=i-d),u}(f,Y[0],Y[1],$[0],$[1],M,C,W,L),H.fillRect(G.x0,G.y0,G.x1-G.x0,G.y1-G.y0));nt=Math.round(nt/rt),it=Math.round(it/rt),at=Math.round(at/rt);var vt=i("rgb("+nt+","+it+","+at+")");t._hmpixcount=(t._hmpixcount||0)+rt,t._hmlumcount=(t._hmlumcount||0)+rt*vt.getLuminance();var yt=F.selectAll("image").data(r);yt.enter().append("svg:image").attr({xmlns:l.svg,preserveAspectRatio:"none"}),yt.attr({height:O,width:P,x:y,y:_,"xlink:href":B.toDataURL("image/png")}),yt.exit().remove()}}var i=t("tinycolor2"),a=t("../../registry"),o=t("../../lib"),s=t("../../components/colorscale"),l=t("../../constants/xmlns_namespaces"),u=t("./max_row_length");e.exports=function(t,e,r){for(var i=0;i<r.length;i++)n(t,e,r[i])}},{"../../components/colorscale":618,"../../constants/xmlns_namespaces":709,"../../lib":728,"../../registry":846,"./max_row_length":960,tinycolor2:534}],962:[function(t,e,r){"use strict";var n=t("d3");e.exports=function(t){n.select(t).selectAll(".hm image").style("opacity",function(t){return t.trace.opacity})}},{d3:122}],963:[function(t,e,r){"use strict";function n(t,e){var r=e(t);return"scaled"===(r?e(t+"type","array"):"scaled")&&(e(t+"0"),e("d"+t)),r}function i(t){for(var e,r=!0,n=!1,i=!1,o=0;o<t.length;o++){if(e=t[o],!Array.isArray(e)){r=!1;break}e.length>0&&(n=!0);for(var s=0;s<e.length;s++)if(a(e[s])){i=!0;break}}return r&&n&&i}var a=t("fast-isnumeric"),o=t("../../registry"),s=t("./has_columns");e.exports=function(t,e,r,a,l,u){var c=r("z");l=l||"x",u=u||"y";var h,f;if(void 0===c||!c.length)return 0;if(s(t)){if(h=r(l),f=r(u),!h||!f)return 0}else{if(h=n(l,r),f=n(u,r),!i(c))return 0;r("transpose")}return o.getComponentMethod("calendars","handleTraceDefaults")(t,e,[l,u],a),e.z.length}},{"../../registry":846,"./has_columns":955,"fast-isnumeric":131}],964:[function(t,e,r){"use strict";for(var n=t("../heatmap/attributes"),i=t("../../components/colorscale/attributes"),a=t("../../components/colorbar/attributes"),o=t("../../lib/extend").extendFlat,s=t("../../plot_api/edit_types").overrideAll,l=["z","x","x0","dx","y","y0","dy","text","transpose","xtype","ytype"],u={},c=0;c<l.length;c++){var h=l[c];u[h]=n[h]}o(u,i,{autocolorscale:o({},i.autocolorscale,{dflt:!1})},{colorbar:a}),e.exports=s(u,"calc","nested")},{"../../components/colorbar/attributes":605,"../../components/colorscale/attributes":609,"../../lib/extend":717,"../../plot_api/edit_types":756,"../heatmap/attributes":948}],965:[function(t,e,r){"use strict";function n(t,e){this.scene=t,this.uid=e,this.type="heatmapgl",this.name="",this.hoverinfo="all",this.xData=[],this.yData=[],this.zData=[],this.textLabels=[],this.idToIndex=[],this.bounds=[0,0,0,0],this.options={z:[],x:[],y:[],shape:[0,0],colorLevels:[0],colorValues:[0,0,0,1]},this.heatmap=o(t.glplot,this.options),this.heatmap._trace=this}function i(t){for(var e=t.colorscale,r=t.zmin,n=t.zmax,i=e.length,a=new Array(i),o=new Array(4*i),s=0;s<i;s++){var u=e[s],c=l(u[1]);a[s]=r+u[0]*(n-r);for(var h=0;h<4;h++)o[4*s+h]=c[h]}return{colorLevels:a,colorValues:o}}function a(t,e,r){var i=new n(t,e.uid);return i.update(e,r),i}var o=t("gl-heatmap2d"),s=t("../../plots/cartesian/axes"),l=t("../../lib/str2rgbarray"),u=n.prototype;u.handlePick=function(t){var e=this.options,r=e.shape,n=t.pointId,i=n%r[0],a=Math.floor(n/r[0]),o=n;return{trace:this,dataCoord:t.dataCoord,traceCoord:[e.x[i],e.y[a],e.z[o]],textLabel:this.textLabels[n],name:this.name,pointIndex:[a,i],hoverinfo:this.hoverinfo}},u.update=function(t,e){var r=e[0];this.index=t.index,this.name=t.name,this.hoverinfo=t.hoverinfo;var n=r.z;this.options.z=[].concat.apply([],n);var a=n[0].length,o=n.length;this.options.shape=[a,o],this.options.x=r.x,this.options.y=r.y;var l=i(t);this.options.colorLevels=l.colorLevels,this.options.colorValues=l.colorValues,this.textLabels=[].concat.apply([],t.text),this.heatmap.update(this.options),s.expand(this.scene.xaxis,r.x),s.expand(this.scene.yaxis,r.y)},u.dispose=function(){this.heatmap.dispose()},e.exports=a},{"../../lib/str2rgbarray":749,"../../plots/cartesian/axes":772,"gl-heatmap2d":166}],966:[function(t,e,r){"use strict";var n={};n.attributes=t("./attributes"),n.supplyDefaults=t("../heatmap/defaults"),n.colorbar=t("../heatmap/colorbar"),n.calc=t("../heatmap/calc"),n.plot=t("./convert"),n.moduleType="trace",n.name="heatmapgl",n.basePlotModule=t("../../plots/gl2d"),n.categories=["gl2d","2dMap"],n.meta={},e.exports=n},{"../../plots/gl2d":808,"../heatmap/calc":949,"../heatmap/colorbar":951,"../heatmap/defaults":953,"./attributes":964,"./convert":965}],967:[function(t,e,r){"use strict";function n(t){var e={};e["autobin"+t]=!1;var r={};return r["^autobin"+t]=!1,{start:{valType:"any",dflt:null,editType:"calc",impliedEdits:r},end:{valType:"any",dflt:null,editType:"calc",impliedEdits:r},size:{valType:"any",dflt:null,editType:"calc",impliedEdits:r},editType:"calc",impliedEdits:e}}var i=t("../bar/attributes");e.exports={x:{valType:"data_array",editType:"calc+clearAxisTypes"},y:{valType:"data_array",editType:"calc+clearAxisTypes"},text:i.text,orientation:i.orientation,histfunc:{valType:"enumerated",values:["count","sum","avg","min","max"],dflt:"count",editType:"calc"},histnorm:{valType:"enumerated",values:["","percent","probability","density","probability density"],dflt:"",editType:"calc"},cumulative:{enabled:{valType:"boolean",dflt:!1,editType:"calc"},direction:{valType:"enumerated",values:["increasing","decreasing"],dflt:"increasing",editType:"calc"},currentbin:{valType:"enumerated",values:["include","exclude","half"],dflt:"include",editType:"calc"},editType:"calc"},autobinx:{valType:"boolean",dflt:null,editType:"calc",impliedEdits:{"xbins.start":void 0,"xbins.end":void 0,"xbins.size":void 0}},nbinsx:{valType:"integer",min:0,dflt:0,editType:"calc"},xbins:n("x"),autobiny:{valType:"boolean",dflt:null,editType:"calc",impliedEdits:{"ybins.start":void 0,"ybins.end":void 0,"ybins.size":void 0}},nbinsy:{valType:"integer",min:0,dflt:0,editType:"calc"},ybins:n("y"),marker:i.marker,error_y:i.error_y,error_x:i.error_x,_deprecated:{bardir:i._deprecated.bardir}}},{"../bar/attributes":856}],968:[function(t,e,r){"use strict";e.exports=function(t,e){for(var r=t.length,n=0,i=0;i<r;i++)e[i]?(t[i]/=e[i],n+=t[i]):t[i]=null;return n}},{}],969:[function(t,e,r){"use strict";e.exports=function(t,e,r,n){return r("histnorm"),n.forEach(function(t){r(t+"bins.start"),r(t+"bins.end"),r(t+"bins.size"),r("autobin"+t),r("nbins"+t)}),e}},{}],970:[function(t,e,r){"use strict";var n=t("fast-isnumeric");e.exports={count:function(t,e,r){return r[t]++,1},sum:function(t,e,r,i){var a=i[e];return n(a)?(a=Number(a),r[t]+=a,a):0},avg:function(t,e,r,i,a){var o=i[e];return n(o)&&(o=Number(o),r[t]+=o,a[t]++),0},min:function(t,e,r,i){var a=i[e];if(n(a)){if(a=Number(a),!n(r[t]))return r[t]=a,a;if(r[t]>a){var o=a-r[t];return r[t]=a,o}}return 0},max:function(t,e,r,i){var a=i[e];if(n(a)){if(a=Number(a),!n(r[t]))return r[t]=a,a;if(r[t]<a){var o=a-r[t];return r[t]=a,o}}return 0}}},{"fast-isnumeric":131}],971:[function(t,e,r){"use strict";function n(t,e,r,n,s){var l,c,f,d,p,m=n+"bins",g="overlay"===t._fullLayout.barmode;if(e._autoBinFinished)delete e._autoBinFinished;else{var v=g?[e]:a(t,e),y=[],b=1/0,x=1/0,_=-1/0,w="autobin"+n;for(l=0;l<v.length;l++){c=v[l],p=c._pos0=r.makeCalcdata(c,n);var M=c[m];if(c[w]||!M||null===M.start||null===M.end){f=c[n+"calendar"];var k=c.cumulative;if(M=h.autoBin(p,r,c["nbins"+n],!1,f),g&&1===M._count&&"category"!==r.type){if(s)return[M,p,!0];M=i(t,e,r,n,m)}k.enabled&&"include"!==k.currentbin&&("decreasing"===k.direction?x=Math.min(x,r.r2c(M.start,0,f)-M.size):_=Math.max(_,r.r2c(M.end,0,f)+M.size)),y.push(c)}else d||(d={size:M.size,start:r.r2c(M.start,0,f),end:r.r2c(M.end,0,f)});b=o(b,M.size),x=Math.min(x,r.r2c(M.start,0,f)),_=Math.max(_,r.r2c(M.end,0,f)),l&&(c._autoBinFinished=1)}if(d&&u(d.size)&&u(b)){b=b>d.size/1.9?d.size:d.size/Math.ceil(d.size/b);var A=d.start+(d.size-b)/2;x=A-b*Math.ceil((A-x)/b)}for(l=0;l<y.length;l++)c=y[l],f=c[n+"calendar"],c._input[m]=c[m]={start:r.c2r(x,0,f),end:r.c2r(_,0,f),size:b},c._input[w]=c[w]}return p=e._pos0,delete e._pos0,[e[m],p]}function i(t,e,r,i,o){var s,l,u=a(t,e),h=!1,f=1/0,d=[e];for(s=0;s<u.length;s++)if((l=u[s])===e)h=!0;else if(h){var p=n(t,l,r,i,!0),m=p[0],g=p[2];l._autoBinFinished=1,l._pos0=p[1],g?d.push(l):f=Math.min(f,m.size)}else f=Math.min(f,l[o].size);var v=new Array(d.length);for(s=0;s<d.length;s++)for(var y=d[s]._pos0,b=0;b<y.length;b++)if(void 0!==y[b]){v[s]=y[b];break}for(isFinite(f)||(f=c.distinctVals(v).minDiff),s=0;s<d.length;s++){l=d[s];var x=l[i+"calendar"];l._input[o]=l[o]={start:r.c2r(v[s]-f/2,0,x),end:r.c2r(v[s]+f/2,0,x),size:f}}return e[o]}function a(t,e){for(var r=e.xaxis,n=e.yaxis,i=e.orientation,a=[],o=t._fullData,s=0;s<o.length;s++){var l=o[s];"histogram"===l.type&&l.orientation===i&&l.xaxis===r&&l.yaxis===n&&a.push(l)}return a}function o(t,e){if(t===1/0)return e;var r=s(t);return s(e)<r?e:t}function s(t){return u(t)?t:"string"==typeof t&&"M"===t.charAt(0)?v*+t.substr(1):1/0}function l(t,e,r){function n(e){s=t[e],t[e]/=2}function i(e){o=t[e],t[e]=s+o/2,s+=o}var a,o,s;if("half"===r)if("increasing"===e)for(n(0),a=1;a<t.length;a++)i(a);else for(n(t.length-1),a=t.length-2;a>=0;a--)i(a);else if("increasing"===e){for(a=1;a<t.length;a++)t[a]+=t[a-1];"exclude"===r&&(t.unshift(0),t.pop())}else{for(a=t.length-2;a>=0;a--)t[a]+=t[a+1];"exclude"===r&&(t.push(0),t.shift())}}var u=t("fast-isnumeric"),c=t("../../lib"),h=t("../../plots/cartesian/axes"),f=t("../bar/arrays_to_calcdata"),d=t("./bin_functions"),p=t("./norm_functions"),m=t("./average"),g=t("./clean_bins"),v=t("../../constants/numerical").ONEAVGMONTH;e.exports=function(t,e){if(!0===e.visible){var r,i=[],a=[],o=h.getFromId(t,"h"===e.orientation?e.yaxis||"y":e.xaxis||"x"),s="h"===e.orientation?"y":"x",v={x:"y",y:"x"}[s],y=e[s+"calendar"],b=e.cumulative;g(e,o,s);var x,_,w,M=n(t,e,o,s),k=M[0],A=M[1],T="string"==typeof k.size,S=T?[]:k,E=[],L=[],C=0,I=e.histnorm,z=e.histfunc,D=-1!==I.indexOf("density");b.enabled&&D&&(I=I.replace(/ ?density$/,""),D=!1);var P,O="max"===z||"min"===z,R=O?null:0,F=d.count,j=p[I],N=!1,B=function(t){return o.r2c(t,0,y)};for(Array.isArray(e[v])&&"count"!==z&&(P=e[v],N="avg"===z,F=d[z]),r=B(k.start),_=B(k.end)+(r-h.tickIncrement(r,k.size,!1,y))/1e6;r<_&&i.length<1e6&&(x=h.tickIncrement(r,k.size,!1,y),i.push((r+x)/2),a.push(R),T&&S.push(r),D&&E.push(1/(x-r)),N&&L.push(0),!(x<=r));)r=x;T||"date"!==o.type||(S={start:B(S.start),end:B(S.end),size:S.size});var U=a.length;for(r=0;r<A.length;r++)(w=c.findBin(A[r],S))>=0&&w<U&&(C+=F(w,r,a,P,L));N&&(C=m(a,L)),j&&j(a,C,E),b.enabled&&l(a,b.direction,b.currentbin);var V=Math.min(i.length,a.length),H=[],q=0,G=V-1;for(r=0;r<V;r++)if(a[r]){q=r;break}for(r=V-1;r>=q;r--)if(a[r]){G=r;break}for(r=q;r<=G;r++)u(i[r])&&u(a[r])&&H.push({p:i[r],s:a[r],b:0});return 1===H.length&&(H[0].width1=h.tickIncrement(H[0].p,k.size,!1,y)-H[0].p),f(H,e),H}}},{"../../constants/numerical":707,"../../lib":728,"../../plots/cartesian/axes":772,"../bar/arrays_to_calcdata":855,"./average":968,"./bin_functions":970,"./clean_bins":972,"./norm_functions":975,"fast-isnumeric":131}],972:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),i=t("../../lib").cleanDate,a=t("../../constants/numerical"),o=a.ONEDAY,s=a.BADNUM;e.exports=function(t,e,r){var a=e.type,l=r+"bins",u=t[l];u||(u=t[l]={});var c="date"===a?function(t){return t||0===t?i(t,s,u.calendar):null}:function(t){return n(t)?Number(t):null};u.start=c(u.start),u.end=c(u.end);var h="date"===a?o:1,f=u.size;if(n(f))u.size=f>0?Number(f):h;else if("string"!=typeof f)u.size=h;else{var d=f.charAt(0),p=f.substr(1);p=n(p)?Number(p):0,(p<=0||"date"!==a||"M"!==d||p!==Math.round(p))&&(u.size=h)}var m="autobin"+r;"boolean"!=typeof t[m]&&(t[m]=!((u.start||0===u.start)&&(u.end||0===u.end))),t[m]||delete t["nbins"+r]}},{"../../constants/numerical":707,"../../lib":728,"fast-isnumeric":131}],973:[function(t,e,r){"use strict";var n=t("../../registry"),i=t("../../lib"),a=t("../../components/color"),o=t("./bin_defaults"),s=t("../bar/style_defaults"),l=t("../../components/errorbars/defaults"),u=t("./attributes");e.exports=function(t,e,r,c){function h(r,n){return i.coerce(t,e,u,r,n)}var f=h("x"),d=h("y");h("cumulative.enabled")&&(h("cumulative.direction"),h("cumulative.currentbin")),h("text");var p=h("orientation",d&&!f?"h":"v"),m=e["v"===p?"x":"y"];if(!m||!m.length)return void(e.visible=!1);n.getComponentMethod("calendars","handleTraceDefaults")(t,e,["x","y"],c),e["h"===p?"x":"y"]&&h("histfunc"),o(t,e,h,"h"===p?["y"]:["x"]),s(t,e,h,r,c),l(t,e,a.defaultLine,{axis:"y"}),l(t,e,a.defaultLine,{axis:"x",inherit:"y"})}},{"../../components/color":604,"../../components/errorbars/defaults":633,"../../lib":728,"../../registry":846,"../bar/style_defaults":868,"./attributes":967,"./bin_defaults":969}],974:[function(t,e,r){"use strict";var n={};n.attributes=t("./attributes"),n.layoutAttributes=t("../bar/layout_attributes"),n.supplyDefaults=t("./defaults"),n.supplyLayoutDefaults=t("../bar/layout_defaults"),n.calc=t("./calc"),n.setPositions=t("../bar/set_positions"),n.plot=t("../bar/plot"),n.style=t("../bar/style"),n.colorbar=t("../scatter/colorbar"),n.hoverPoints=t("../bar/hover"),n.selectPoints=t("../bar/select"),n.moduleType="trace",n.name="histogram",n.basePlotModule=t("../../plots/cartesian"),n.categories=["cartesian","bar","histogram","oriented","errorBarsOK","showLegend"],n.meta={},e.exports=n},{"../../plots/cartesian":782,"../bar/hover":859,"../bar/layout_attributes":861,"../bar/layout_defaults":862,"../bar/plot":863,"../bar/select":864,"../bar/set_positions":865,"../bar/style":867,"../scatter/colorbar":1034,"./attributes":967,"./calc":971,"./defaults":973}],975:[function(t,e,r){"use strict";e.exports={percent:function(t,e){for(var r=t.length,n=100/e,i=0;i<r;i++)t[i]*=n},probability:function(t,e){for(var r=t.length,n=0;n<r;n++)t[n]/=e},density:function(t,e,r,n){var i=t.length;n=n||1;for(var a=0;a<i;a++)t[a]*=r[a]*n},"probability density":function(t,e,r,n){var i=t.length;n&&(e/=n);for(var a=0;a<i;a++)t[a]*=r[a]/e}}},{}],976:[function(t,e,r){"use strict";var n=t("../histogram/attributes"),i=t("../heatmap/attributes"),a=t("../../components/colorscale/attributes"),o=t("../../components/colorbar/attributes"),s=t("../../lib/extend").extendFlat;e.exports=s({},{x:n.x,y:n.y,z:{valType:"data_array",editType:"calc"},marker:{color:{valType:"data_array",editType:"calc"},editType:"calc"},histnorm:n.histnorm,histfunc:n.histfunc,autobinx:n.autobinx,nbinsx:n.nbinsx,xbins:n.xbins,autobiny:n.autobiny,nbinsy:n.nbinsy,ybins:n.ybins,xgap:i.xgap,ygap:i.ygap,zsmooth:i.zsmooth},a,{autocolorscale:s({},a.autocolorscale,{dflt:!1})},{colorbar:o})},{"../../components/colorbar/attributes":605,"../../components/colorscale/attributes":609,"../../lib/extend":717,"../heatmap/attributes":948,"../histogram/attributes":967}],977:[function(t,e,r){"use strict";var n=t("../../lib"),i=t("../../plots/cartesian/axes"),a=t("../histogram/bin_functions"),o=t("../histogram/norm_functions"),s=t("../histogram/average"),l=t("../histogram/clean_bins");e.exports=function(t,e){var r,u,c,h,f,d,p=i.getFromId(t,e.xaxis||"x"),m=e.x?p.makeCalcdata(e,"x"):[],g=i.getFromId(t,e.yaxis||"y"),v=e.y?g.makeCalcdata(e,"y"):[],y=e.xcalendar,b=e.ycalendar,x=function(t){return p.r2c(t,0,y)},_=function(t){return g.r2c(t,0,b)},w=function(t){return p.c2r(t,0,y)},M=function(t){return g.c2r(t,0,b)};l(e,p,"x"),l(e,g,"y");var k=Math.min(m.length,v.length);m.length>k&&m.splice(k,m.length-k),v.length>k&&v.splice(k,v.length-k),!e.autobinx&&e.xbins&&null!==e.xbins.start&&null!==e.xbins.end||(e.xbins=i.autoBin(m,p,e.nbinsx,"2d",y),"histogram2dcontour"===e.type&&(e.xbins.start=w(i.tickIncrement(x(e.xbins.start),e.xbins.size,!0,y)),e.xbins.end=w(i.tickIncrement(x(e.xbins.end),e.xbins.size,!1,y))),e._input.xbins=e.xbins,e._input.autobinx=e.autobinx),!e.autobiny&&e.ybins&&null!==e.ybins.start&&null!==e.ybins.end||(e.ybins=i.autoBin(v,g,e.nbinsy,"2d",b),"histogram2dcontour"===e.type&&(e.ybins.start=M(i.tickIncrement(_(e.ybins.start),e.ybins.size,!0,b)),e.ybins.end=M(i.tickIncrement(_(e.ybins.end),e.ybins.size,!1,b))),e._input.ybins=e.ybins,e._input.autobiny=e.autobiny),f=[];var A,T,S=[],E=[],L="string"==typeof e.xbins.size,C="string"==typeof e.ybins.size,I=L?[]:e.xbins,z=C?[]:e.ybins,D=0,P=[],O=e.histnorm,R=e.histfunc,F=-1!==O.indexOf("density"),j="max"===R||"min"===R,N=j?null:0,B=a.count,U=o[O],V=!1,H=[],q=[],G="z"in e?e.z:"marker"in e&&Array.isArray(e.marker.color)?e.marker.color:"";G&&"count"!==R&&(V="avg"===R,B=a[R]);var Y=e.xbins,W=x(Y.start),X=x(Y.end)+(W-i.tickIncrement(W,Y.size,!1,y))/1e6;for(d=W;d<X;d=i.tickIncrement(d,Y.size,!1,y))S.push(N),L&&I.push(d),V&&E.push(0);L&&I.push(d);var Z=S.length;r=e.xbins.start;var J=x(r);for(u=(d-J)/Z,r=w(J+u/2),Y=e.ybins,W=_(Y.start),X=_(Y.end)+(W-i.tickIncrement(W,Y.size,!1,b))/1e6,d=W;d<X;d=i.tickIncrement(d,Y.size,!1,b))f.push(S.concat()),C&&z.push(d),V&&P.push(E.concat());C&&z.push(d);var K=f.length;c=e.ybins.start;var Q=_(c);for(h=(d-Q)/K,c=M(Q+h/2),F&&(H=S.map(function(t,e){return L?1/(I[e+1]-I[e]):1/u}),q=f.map(function(t,e){return C?1/(z[e+1]-z[e]):1/h})),L||"date"!==p.type||(I={start:x(I.start),end:x(I.end),size:I.size}),C||"date"!==g.type||(z={start:_(z.start),end:_(z.end),size:z.size}),d=0;d<k;d++)A=n.findBin(m[d],I),T=n.findBin(v[d],z),A>=0&&A<Z&&T>=0&&T<K&&(D+=B(A,d,f[T],G,P[T]));if(V)for(T=0;T<K;T++)D+=s(f[T],P[T]);if(U)for(T=0;T<K;T++)U(f[T],D,H,q[T]);return{x:m,x0:r,dx:u,y:v,y0:c,dy:h,z:f}}},{"../../lib":728,"../../plots/cartesian/axes":772,"../histogram/average":968,"../histogram/bin_functions":970,"../histogram/clean_bins":972,"../histogram/norm_functions":975}],978:[function(t,e,r){"use strict";var n=t("../../lib"),i=t("./sample_defaults"),a=t("../../components/colorscale/defaults"),o=t("./attributes");e.exports=function(t,e,r,s){function l(r,i){return n.coerce(t,e,o,r,i)}i(t,e,l,s),!1===l("zsmooth")&&(l("xgap"),l("ygap")),a(t,e,s,l,{prefix:"",cLetter:"z"})}},{"../../components/colorscale/defaults":613,"../../lib":728,"./attributes":976,"./sample_defaults":980}],979:[function(t,e,r){"use strict";var n={};n.attributes=t("./attributes"),n.supplyDefaults=t("./defaults"),n.calc=t("../heatmap/calc"),n.plot=t("../heatmap/plot"),n.colorbar=t("../heatmap/colorbar"),n.style=t("../heatmap/style"),n.hoverPoints=t("../heatmap/hover"),n.moduleType="trace",n.name="histogram2d",n.basePlotModule=t("../../plots/cartesian"),n.categories=["cartesian","2dMap","histogram"],n.meta={},e.exports=n},{"../../plots/cartesian":782,"../heatmap/calc":949,"../heatmap/colorbar":951,"../heatmap/hover":956,"../heatmap/plot":961,"../heatmap/style":962,"./attributes":976,"./defaults":978}],980:[function(t,e,r){"use strict";var n=t("../../registry"),i=t("../histogram/bin_defaults");e.exports=function(t,e,r,a){var o=r("x"),s=r("y");if(!(o&&o.length&&s&&s.length))return void(e.visible=!1);n.getComponentMethod("calendars","handleTraceDefaults")(t,e,["x","y"],a),(r("z")||r("marker.color"))&&r("histfunc"),i(t,e,r,["x","y"])}},{"../../registry":846,"../histogram/bin_defaults":969}],981:[function(t,e,r){"use strict";var n=t("../histogram2d/attributes"),i=t("../contour/attributes"),a=t("../../components/colorscale/attributes"),o=t("../../components/colorbar/attributes"),s=t("../../lib/extend").extendFlat;e.exports=s({x:n.x,y:n.y,z:n.z,marker:n.marker,histnorm:n.histnorm,histfunc:n.histfunc,autobinx:n.autobinx,nbinsx:n.nbinsx,xbins:n.xbins,autobiny:n.autobiny,nbinsy:n.nbinsy,ybins:n.ybins,autocontour:i.autocontour,ncontours:i.ncontours,contours:i.contours,line:i.line},a,{zmin:s({},a.zmin,{editType:"calc"}),zmax:s({},a.zmax,{editType:"calc"})},{colorbar:o})},{"../../components/colorbar/attributes":605,"../../components/colorscale/attributes":609,"../../lib/extend":717,"../contour/attributes":920,"../histogram2d/attributes":976}],982:[function(t,e,r){"use strict";var n=t("../../lib"),i=t("../histogram2d/sample_defaults"),a=t("../contour/contours_defaults"),o=t("../contour/style_defaults"),s=t("./attributes");e.exports=function(t,e,r,l){function u(r,i){return n.coerce(t,e,s,r,i)}i(t,e,u,l),a(t,e,u),o(t,e,u,l)}},{"../../lib":728,"../contour/contours_defaults":924,"../contour/style_defaults":934,"../histogram2d/sample_defaults":980,"./attributes":981}],983:[function(t,e,r){"use strict";var n={};n.attributes=t("./attributes"),n.supplyDefaults=t("./defaults"),n.calc=t("../contour/calc"),n.plot=t("../contour/plot").plot,n.style=t("../contour/style"),n.colorbar=t("../contour/colorbar"),n.hoverPoints=t("../contour/hover"),n.moduleType="trace",n.name="histogram2dcontour",n.basePlotModule=t("../../plots/cartesian"),n.categories=["cartesian","2dMap","contour","histogram"],n.meta={},e.exports=n},{"../../plots/cartesian":782,"../contour/calc":921,"../contour/colorbar":922,"../contour/hover":928,"../contour/plot":932,"../contour/style":933,"./attributes":981,"./defaults":982}],984:[function(t,e,r){"use strict";var n=t("../../components/colorscale/color_attributes"),i=t("../../components/colorscale/attributes"),a=t("../../components/colorbar/attributes"),o=t("../surface/attributes"),s=t("../../lib/extend").extendFlat;e.exports=s(n("","calc",!1),{x:{valType:"data_array",editType:"calc+clearAxisTypes"},y:{valType:"data_array",editType:"calc+clearAxisTypes"},z:{valType:"data_array",editType:"calc+clearAxisTypes"},i:{valType:"data_array",editType:"calc"},j:{valType:"data_array",editType:"calc"},k:{valType:"data_array",editType:"calc"},delaunayaxis:{valType:"enumerated",values:["x","y","z"],dflt:"z",editType:"calc"},alphahull:{valType:"number",dflt:-1,editType:"calc"},intensity:{valType:"data_array",editType:"calc"},color:{valType:"color",editType:"calc"},vertexcolor:{valType:"data_array",editType:"calc"},facecolor:{valType:"data_array",editType:"calc"},opacity:o.opacity,flatshading:{valType:"boolean",dflt:!1,editType:"calc"},contour:{show:s({},o.contours.x.show,{}),color:o.contours.x.color,width:o.contours.x.width,editType:"calc"},showscale:i.showscale,colorbar:a,lightposition:{x:s({},o.lightposition.x,{dflt:1e5}),y:s({},o.lightposition.y,{dflt:1e5}),z:s({},o.lightposition.z,{dflt:0}),editType:"calc"},lighting:s({vertexnormalsepsilon:{valType:"number",min:0,max:1,dflt:1e-12,editType:"calc"},facenormalsepsilon:{valType:"number",min:0,max:1,dflt:1e-6,editType:"calc"},editType:"calc"},o.lighting)})},{"../../components/colorbar/attributes":605,"../../components/colorscale/attributes":609,"../../components/colorscale/color_attributes":611,"../../lib/extend":717,"../surface/attributes":1099}],985:[function(t,e,r){"use strict";var n=t("../../components/colorscale/calc");e.exports=function(t,e){e.intensity&&n(e,e.intensity,"","c")}},{"../../components/colorscale/calc":610}],986:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),i=t("../../lib"),a=t("../../plots/plots"),o=t("../../components/colorscale"),s=t("../../components/colorbar/draw");e.exports=function(t,e){var r=e[0].trace,l="cb"+r.uid,u=r.cmin,c=r.cmax,h=r.intensity||[];if(n(u)||(u=i.aggNums(Math.min,null,h)),n(c)||(c=i.aggNums(Math.max,null,h)),t._fullLayout._infolayer.selectAll("."+l).remove(),!r.showscale)return void a.autoMargin(t,l);var f=e[0].t.cb=s(t,l),d=o.makeColorScaleFunc(o.extractScale(r.colorscale,u,c),{noNumericCheck:!0});f.fillcolor(d).filllevels({start:u,end:c,size:(c-u)/254}).options(r.colorbar)()}},{"../../components/colorbar/draw":607,"../../components/colorscale":618,"../../lib":728,"../../plots/plots":831,"fast-isnumeric":131}],987:[function(t,e,r){"use strict";function n(t,e,r){this.scene=t,this.uid=r,this.mesh=e,this.name="",this.color="#fff",this.data=null,this.showContour=!1}function i(t){return t.map(function(t){var e=t[0],r=u(t[1]),n=r.toRgb();return{index:e,rgb:[n.r,n.g,n.b,1]}})}function a(t){return t.map(d)}function o(t,e,r){for(var n=new Array(t.length),i=0;i<t.length;++i)n[i]=[t[i],e[i],r[i]];return n}function s(t,e){var r=t.glplot.gl,i=l({gl:r}),a=new n(t,i,e.uid);return i._trace=a,a.update(e),t.glplot.add(i),a}var l=t("gl-mesh3d"),u=t("tinycolor2"),c=t("delaunay-triangulate"),h=t("alpha-shape"),f=t("convex-hull"),d=t("../../lib/str2rgbarray"),p=n.prototype;p.handlePick=function(t){if(t.object===this.mesh){var e=t.index=t.data.index;return t.traceCoordinate=[this.data.x[e],this.data.y[e],this.data.z[e]],!0}},p.update=function(t){function e(t,e,r,n){return e.map(function(e){return t.d2l(e,0,n)*r})}var r=this.scene,n=r.fullSceneLayout;this.data=t;var s,l=o(e(n.xaxis,t.x,r.dataScale[0],t.xcalendar),e(n.yaxis,t.y,r.dataScale[1],t.ycalendar),e(n.zaxis,t.z,r.dataScale[2],t.zcalendar));if(t.i&&t.j&&t.k)s=o(t.i,t.j,t.k);else if(0===t.alphahull)s=f(l);else if(t.alphahull>0)s=h(t.alphahull,l);else{var u=["x","y","z"].indexOf(t.delaunayaxis);s=c(l.map(function(t){return[t[(u+1)%3],t[(u+2)%3]]}))}var p={positions:l,cells:s,lightPosition:[t.lightposition.x,t.lightposition.y,t.lightposition.z],ambient:t.lighting.ambient,diffuse:t.lighting.diffuse,specular:t.lighting.specular,roughness:t.lighting.roughness,fresnel:t.lighting.fresnel,vertexNormalsEpsilon:t.lighting.vertexnormalsepsilon,faceNormalsEpsilon:t.lighting.facenormalsepsilon,opacity:t.opacity,contourEnable:t.contour.show,contourColor:d(t.contour.color).slice(0,3),contourWidth:t.contour.width,useFacetNormals:t.flatshading};t.intensity?(this.color="#fff",p.vertexIntensity=t.intensity,p.vertexIntensityBounds=[t.cmin,t.cmax],p.colormap=i(t.colorscale)):t.vertexcolor?(this.color=t.vertexcolor[0],p.vertexColors=a(t.vertexcolor)):t.facecolor?(this.color=t.facecolor[0],p.cellColors=a(t.facecolor)):(this.color=t.color,p.meshColor=d(t.color)),this.mesh.update(p)},p.dispose=function(){this.scene.glplot.remove(this.mesh),this.mesh.dispose()},e.exports=s},{"../../lib/str2rgbarray":749,"alpha-shape":43,"convex-hull":103,"delaunay-triangulate":123,"gl-mesh3d":205,tinycolor2:534}],988:[function(t,e,r){"use strict";var n=t("../../registry"),i=t("../../lib"),a=t("../../components/colorscale/defaults"),o=t("./attributes");e.exports=function(t,e,r,s){function l(r,n){
return i.coerce(t,e,o,r,n)}function u(t){var e=t.map(function(t){var e=l(t);return e&&Array.isArray(e)?e:null});return e.every(function(t){return t&&t.length===e[0].length})&&e}var c=u(["x","y","z"]),h=u(["i","j","k"]);if(!c)return void(e.visible=!1);h&&h.forEach(function(t){for(var e=0;e<t.length;++e)t[e]|=0}),n.getComponentMethod("calendars","handleTraceDefaults")(t,e,["x","y","z"],s),["lighting.ambient","lighting.diffuse","lighting.specular","lighting.roughness","lighting.fresnel","lighting.vertexnormalsepsilon","lighting.facenormalsepsilon","lightposition.x","lightposition.y","lightposition.z","contour.show","contour.color","contour.width","colorscale","reversescale","flatshading","alphahull","delaunayaxis","opacity"].forEach(function(t){l(t)}),"intensity"in t?(l("intensity"),a(t,e,s,l,{prefix:"",cLetter:"c"})):(e.showscale=!1,"facecolor"in t?l("facecolor"):"vertexcolor"in t?l("vertexcolor"):l("color",r))}},{"../../components/colorscale/defaults":613,"../../lib":728,"../../registry":846,"./attributes":984}],989:[function(t,e,r){"use strict";var n={};n.attributes=t("./attributes"),n.supplyDefaults=t("./defaults"),n.calc=t("./calc"),n.colorbar=t("./colorbar"),n.plot=t("./convert"),n.moduleType="trace",n.name="mesh3d",n.basePlotModule=t("../../plots/gl3d"),n.categories=["gl3d"],n.meta={},e.exports=n},{"../../plots/gl3d":811,"./attributes":984,"./calc":985,"./colorbar":986,"./convert":987,"./defaults":988}],990:[function(t,e,r){"use strict";function n(t){return{name:{valType:"string",editType:"style"},showlegend:{valType:"boolean",dflt:!0,editType:"style"},line:{color:i({},s.color,{dflt:t}),width:s.width,dash:o,editType:"style"},editType:"style"}}var i=t("../../lib").extendFlat,a=t("../scatter/attributes"),o=t("../../components/drawing/attributes").dash,s=a.line;e.exports={x:{valType:"data_array",editType:"calc+clearAxisTypes"},open:{valType:"data_array",dflt:[],editType:"calc"},high:{valType:"data_array",dflt:[],editType:"calc"},low:{valType:"data_array",dflt:[],editType:"calc"},close:{valType:"data_array",dflt:[],editType:"calc"},line:{width:i({},s.width,{}),dash:i({},o,{}),editType:"style"},increasing:n("#3D9970"),decreasing:n("#FF4136"),text:{valType:"string",dflt:"",arrayOk:!0,editType:"calc"},tickwidth:{valType:"number",min:0,max:.5,dflt:.3,editType:"calcIfAutorange"}}},{"../../components/drawing/attributes":627,"../../lib":728,"../scatter/attributes":1031}],991:[function(t,e,r){"use strict";function n(t,e,r,n){o(t,e,r,n),r(n+".line.color"),r(n+".line.width",e.line.width),r(n+".line.dash",e.line.dash)}var i=t("../../lib"),a=t("./ohlc_defaults"),o=t("./direction_defaults"),s=t("./attributes"),l=t("./helpers");e.exports=function(t,e,r,o){function u(r,n){return i.coerce(t,e,s,r,n)}if(l.pushDummyTransformOpts(t,e),0===a(t,e,u,o))return void(e.visible=!1);u("line.width"),u("line.dash"),n(t,e,u,"increasing"),n(t,e,u,"decreasing"),u("text"),u("tickwidth")}},{"../../lib":728,"./attributes":990,"./direction_defaults":992,"./helpers":993,"./ohlc_defaults":995}],992:[function(t,e,r){"use strict";e.exports=function(t,e,r,n){r(n+".showlegend"),!1===t.showlegend&&(e[n].showlegend=!1),r(n+".name",e.name+" - "+n)}},{}],993:[function(t,e,r){"use strict";function n(t){function e(t,e){return t===e?e>o?a=!0:e<o&&(a=!1):a=t<e,o=e,a}function r(t,r){return i(t)&&i(r)&&e(+t,+r)}function n(t,r){return i(t)&&i(r)&&!e(+t,+r)}var a=!0,o=null;return"increasing"===t?r:n}var i=t("fast-isnumeric"),a=t("../../lib");r.pushDummyTransformOpts=function(t,e){var r={type:e.type,_ephemeral:!0};Array.isArray(t.transforms)?t.transforms.push(r):t.transforms=[r]},r.clearEphemeralTransformOpts=function(t){var e=t.transforms;if(Array.isArray(e)){for(var r=0;r<e.length;r++)e[r]._ephemeral&&e.splice(r,1);0===e.length&&delete t.transforms}},r.copyOHLC=function(t,e){t.open&&(e.open=t.open),t.high&&(e.high=t.high),t.low&&(e.low=t.low),t.close&&(e.close=t.close)},r.makeTransform=function(t,e,r){var n=a.extendFlat([],t.transforms);return n[e.transformIndex]={type:t.type,direction:r,open:t.open,high:t.high,low:t.low,close:t.close},n},r.getFilterFn=function(t){return new n(t)},r.addRangeSlider=function(t,e){for(var r=!1,n=0;n<t.length;n++)if(!0===t[n].visible){r=!0;break}r&&(e.xaxis||(e.xaxis={}),e.xaxis.rangeslider||(e.xaxis.rangeslider={}))}},{"../../lib":728,"fast-isnumeric":131}],994:[function(t,e,r){"use strict";var n=t("../../plot_api/register");e.exports={moduleType:"trace",name:"ohlc",basePlotModule:t("../../plots/cartesian"),categories:["cartesian","showLegend"],meta:{},attributes:t("./attributes"),supplyDefaults:t("./defaults")},n(t("../scatter")),n(t("./transform"))},{"../../plot_api/register":762,"../../plots/cartesian":782,"../scatter":1042,"./attributes":990,"./defaults":991,"./transform":996}],995:[function(t,e,r){"use strict";var n=t("../../registry");e.exports=function(t,e,r,i){var a,o=r("x"),s=r("open"),l=r("high"),u=r("low"),c=r("close");return n.getComponentMethod("calendars","handleTraceDefaults")(t,e,["x"],i),a=Math.min(s.length,l.length,u.length,c.length),o&&(a=Math.min(a,o.length))<o.length&&(e.x=o.slice(0,a)),a<s.length&&(e.open=s.slice(0,a)),a<l.length&&(e.high=l.slice(0,a)),a<u.length&&(e.low=u.slice(0,a)),a<c.length&&(e.close=c.slice(0,a)),a}},{"../../registry":846}],996:[function(t,e,r){"use strict";function n(t,e,r){var n={type:"scatter",mode:"lines",connectgaps:!1,visible:t.visible,opacity:t.opacity,xaxis:t.xaxis,yaxis:t.yaxis,hoverinfo:i(t),transforms:l.makeTransform(t,e,r)},a=t[r];return a&&s.extendFlat(n,{x:t.x||[0],xcalendar:t.xcalendar,y:[].concat(t.low).concat(t.high),text:t.text,name:a.name,showlegend:a.showlegend,line:a.line}),n}function i(t){var e=t.hoverinfo;if("all"===e)return"x+text+name";var r=e.split("+"),n=r.indexOf("y"),i=r.indexOf("text");return-1!==n&&(r.splice(n,1),-1===i&&r.push("text")),r.join("+")}function a(t,e,r){var n=r._fullInput,i=n.tickwidth,a=n._minDiff;if(!a){var o=t._fullData,l=[];a=1/0;var u;for(u=0;u<o.length;u++){var c=o[u]._fullInput;if("ohlc"===c.type&&!0===c.visible&&c.xaxis===e._id&&(l.push(c),c.x&&c.x.length>1)){var h=s.simpleMap(c.x,e.d2c,0,r.xcalendar),f=s.distinctVals(h).minDiff;a=Math.min(a,f)}}for(a===1/0&&(a=1),u=0;u<l.length;u++)l[u]._minDiff=a}return a*i}var o=t("fast-isnumeric"),s=t("../../lib"),l=t("./helpers"),u=t("../../plots/cartesian/axes"),c=t("../../plots/cartesian/axis_ids");r.moduleType="transform",r.name="ohlc",r.attributes={},r.supplyDefaults=function(t,e,r,n){return l.clearEphemeralTransformOpts(n),l.copyOHLC(t,e),t},r.transform=function(t,e){for(var r=[],i=0;i<t.length;i++){var a=t[i];"ohlc"===a.type?r.push(n(a,e,"increasing"),n(a,e,"decreasing")):r.push(a)}return l.addRangeSlider(r,e.layout),r},r.calcTransform=function(t,e,r){var n,i=r.direction,s=l.getFilterFn(i),h=c.getFromTrace(t,e,"x"),f=c.getFromTrace(t,e,"y"),d=a(t,h,e),p=e.open,m=e.high,g=e.low,v=e.close,y=e.text,b=p.length,x=[],_=[],w=[];n=e._fullInput.x?function(t){var r=e.x[t],n=e.xcalendar,i=h.d2c(r,0,n);x.push(h.c2d(i-d,0,n),r,r,r,r,h.c2d(i+d,0,n),null)}:function(t){x.push(t-d,t,t,t,t,t+d,null)};for(var M=function(t,e){return u.tickText(t,t.c2l(e),"hover").text},k=e._fullInput.hoverinfo,A=k.split("+"),T="all"===k,S=T||-1!==A.indexOf("y"),E=T||-1!==A.indexOf("text"),L=Array.isArray(y)?function(t){return y[t]||""}:function(){return y},C=0;C<b;C++)s(p[C],v[C])&&o(m[C])&&o(g[C])&&(n(C),function(t,e,r,n){_.push(t,t,e,r,n,n,null)}(p[C],m[C],g[C],v[C]),function(t,e,r,n,i){var a=[];S&&(a.push("Open: "+M(f,e)),a.push("High: "+M(f,r)),a.push("Low: "+M(f,n)),a.push("Close: "+M(f,i))),E&&a.push(L(t));var o=a.join("<br>");w.push(o,o,o,o,o,o,null)}(C,p[C],m[C],g[C],v[C]));e.x=x,e.y=_,e.text=w}},{"../../lib":728,"../../plots/cartesian/axes":772,"../../plots/cartesian/axis_ids":775,"./helpers":993,"fast-isnumeric":131}],997:[function(t,e,r){"use strict";var n=t("../../components/colorscale/color_attributes"),i=t("../../components/colorbar/attributes"),a=t("../../components/colorscale/scales"),o=t("../../plots/cartesian/layout_attributes"),s=t("../../plots/font_attributes"),l=t("../../lib/extend"),u=l.extendDeepAll,c=l.extendFlat;e.exports={domain:{x:{valType:"info_array",items:[{valType:"number",min:0,max:1,editType:"calc"},{valType:"number",min:0,max:1,editType:"calc"}],dflt:[0,1],editType:"calc"},y:{valType:"info_array",items:[{valType:"number",min:0,max:1,editType:"calc"},{valType:"number",min:0,max:1,editType:"calc"}],dflt:[0,1],editType:"calc"},editType:"calc"},labelfont:s({editType:"calc"}),tickfont:s({editType:"calc"}),rangefont:s({editType:"calc"}),dimensions:{_isLinkedToArray:"dimension",label:{valType:"string",editType:"calc"},tickvals:c({},o.tickvals,{editType:"calc"}),ticktext:c({},o.ticktext,{editType:"calc"}),tickformat:{valType:"string",dflt:"3s",editType:"calc"},visible:{valType:"boolean",dflt:!0,editType:"calc"},range:{valType:"info_array",items:[{valType:"number",editType:"calc"},{valType:"number",editType:"calc"}],editType:"calc"},constraintrange:{valType:"info_array",items:[{valType:"number",editType:"calc"},{valType:"number",editType:"calc"}],editType:"calc"},values:{valType:"data_array",dflt:[],editType:"calc"},editType:"calc"},line:c(u(n("line","calc"),{colorscale:{dflt:a.Viridis},autocolorscale:{dflt:!1}}),{showscale:{valType:"boolean",dflt:!1,editType:"calc"},colorbar:i,editType:"calc"})}},{"../../components/colorbar/attributes":605,"../../components/colorscale/color_attributes":611,"../../components/colorscale/scales":622,"../../lib/extend":717,"../../plots/cartesian/layout_attributes":783,"../../plots/font_attributes":796}],998:[function(t,e,r){"use strict";var n=t("d3"),i=t("../../plots/plots"),a=t("./plot"),o=t("../../constants/xmlns_namespaces"),s=t("./constants");r.name="parcoords",r.attr="type",r.plot=function(t){var e=i.getSubplotCalcData(t.calcdata,"parcoords","parcoords");e.length&&a(t,e)},r.clean=function(t,e,r,n){var i=n._has&&n._has("parcoords"),a=e._has&&e._has("parcoords");i&&!a&&(n._paperdiv.selectAll(".parcoords-line-layers").remove(),n._paperdiv.selectAll(".parcoords-line-layers").remove(),n._paperdiv.selectAll(".parcoords").remove(),n._paperdiv.selectAll(".parcoords").remove(),n._glimages.selectAll("*").remove())},r.toSVG=function(t){function e(e){var n=this,i=n.toDataURL("image/png"),a=r.append("svg:image"),l=t._fullLayout._size,u=t._fullData[e.model.key].domain;a.attr({xmlns:o.svg,"xlink:href":i,x:l.l+l.w*u.x[0]-s.overdrag,y:l.t+l.h*(1-u.y[1]),width:(u.x[1]-u.x[0])*l.w+2*s.overdrag,height:(u.y[1]-u.y[0])*l.h,preserveAspectRatio:"none"})}var r=t._fullLayout._glimages,i=n.select(t).selectAll(".svg-container");i.filter(function(t,e){return e===i.size()-1}).selectAll(".parcoords-lines.context, .parcoords-lines.focus").each(e),window.setTimeout(function(){n.selectAll("#filterBarPattern").attr("id","filterBarPattern")},60)}},{"../../constants/xmlns_namespaces":709,"../../plots/plots":831,"./constants":1001,"./plot":1006,d3:122}],999:[function(t,e,r){"use strict";var n=t("../../components/colorscale/has_colorscale"),i=t("../../components/colorscale/calc"),a=t("../../lib"),o=t("../../lib/gup").wrap;e.exports=function(t,e){var r=!!e.line.colorscale&&a.isArray(e.line.color),s=r?e.line.color:Array.apply(0,Array(e.dimensions.reduce(function(t,e){return Math.max(t,e.values.length)},0))).map(function(){return.5}),l=r?e.line.colorscale:[[0,e.line.color],[1,e.line.color]];return n(e,"line")&&i(e,e.line.color,"line","c"),o({lineColor:s,cscale:l})}},{"../../components/colorscale/calc":610,"../../components/colorscale/has_colorscale":617,"../../lib":728,"../../lib/gup":725}],1e3:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),i=t("../../lib"),a=t("../../plots/plots"),o=t("../../components/colorscale"),s=t("../../components/colorbar/draw");e.exports=function(t,e){var r=e[0].trace,l=r.line,u="cb"+r.uid;if(t._fullLayout._infolayer.selectAll("."+u).remove(),void 0===l||!l.showscale)return void a.autoMargin(t,u);var c=l.color,h=l.cmin,f=l.cmax;n(h)||(h=i.aggNums(Math.min,null,c)),n(f)||(f=i.aggNums(Math.max,null,c));var d=e[0].t.cb=s(t,u),p=o.makeColorScaleFunc(o.extractScale(l.colorscale,h,f),{noNumericCheck:!0});d.fillcolor(p).filllevels({start:h,end:f,size:(f-h)/254}).options(l.colorbar)()}},{"../../components/colorbar/draw":607,"../../components/colorscale":618,"../../lib":728,"../../plots/plots":831,"fast-isnumeric":131}],1001:[function(t,e,r){"use strict";e.exports={maxDimensionCount:60,overdrag:45,verticalPadding:2,tickDistance:50,canvasPixelRatio:1,blockLineCount:5e3,scatter:!1,layers:["contextLineLayer","focusLineLayer","pickLineLayer"],axisTitleOffset:28,axisExtentOffset:10,bar:{width:4,capturewidth:10,fillcolor:"magenta",fillopacity:1,strokecolor:"white",strokeopacity:1,strokewidth:1,handleheight:16,handleopacity:1,handleoverlap:0},cn:{axisExtentText:"axis-extent-text",parcoordsLineLayers:"parcoords-line-layers",parcoordsLineLayer:"parcoords-lines",parcoords:"parcoords",parcoordsControlView:"parcoords-control-view",yAxis:"y-axis",axisOverlays:"axis-overlays",axis:"axis",axisHeading:"axis-heading",axisTitle:"axis-title",axisExtent:"axis-extent",axisExtentTop:"axis-extent-top",axisExtentTopText:"axis-extent-top-text",axisExtentBottom:"axis-extent-bottom",axisExtentBottomText:"axis-extent-bottom-text",axisBrush:"axis-brush"},id:{filterBarPattern:"filter-bar-pattern"}}},{}],1002:[function(t,e,r){"use strict";function n(t,e,r,n,i){i("line.color",r),s(t,"line")&&a.isArray(t.line.color)?(i("line.colorscale"),l(t,e,n,i,{prefix:"line.",cLetter:"c"})):i("line.color",r)}function i(t,e){function r(t,e){return a.coerce(n,i,o.dimensions,t,e)}var n,i,s,l=t.dimensions||[],c=e.dimensions=[],h=1/0;for(l.length>u&&(a.log("parcoords traces support up to "+u+" dimensions at the moment"),l.splice(u)),s=0;s<l.length;s++)if(n=l[s],i={},a.isPlainObject(n)){var f=r("values"),d=r("visible",f.length>0);d&&(r("label"),r("tickvals"),r("ticktext"),r("tickformat"),r("range"),r("constraintrange"),h=Math.min(h,i.values.length)),i._index=s,c.push(i)}if(isFinite(h))for(s=0;s<c.length;s++)i=c[s],i.visible&&i.values.length>h&&(i.values=i.values.slice(0,h));return c}var a=t("../../lib"),o=t("./attributes"),s=t("../../components/colorscale/has_colorscale"),l=t("../../components/colorscale/defaults"),u=t("./constants").maxDimensionCount;e.exports=function(t,e,r,s){function l(r,n){return a.coerce(t,e,o,r,n)}var u=i(t,e);n(t,e,r,s,l),l("domain.x"),l("domain.y"),Array.isArray(u)&&u.length||(e.visible=!1);var c={family:s.font.family,size:Math.round(s.font.size*(10/12)),color:s.font.color};a.coerceFont(l,"labelfont",c),a.coerceFont(l,"tickfont",c),a.coerceFont(l,"rangefont",c)}},{"../../components/colorscale/defaults":613,"../../components/colorscale/has_colorscale":617,"../../lib":728,"./attributes":997,"./constants":1001}],1003:[function(t,e,r){"use strict";var n={};n.attributes=t("./attributes"),n.supplyDefaults=t("./defaults"),n.calc=t("./calc"),n.plot=t("./plot"),n.colorbar=t("./colorbar"),n.moduleType="trace",n.name="parcoords",n.basePlotModule=t("./base_plot"),n.categories=["gl","noOpacity"],n.meta={},e.exports=n},{"./attributes":997,"./base_plot":998,"./calc":999,"./colorbar":1e3,"./defaults":1002,"./plot":1006}],1004:[function(t,e,r){"use strict";function n(t){t.read({x:0,y:0,width:1,height:1,data:x})}function i(t,e,r,n,i){var a=t._gl;a.enable(a.SCISSOR_TEST),a.scissor(e,r,n,i),t.clear({color:[0,0,0,0],depth:1})}function a(t,e,r,a,o,s){function l(n){var c;c=Math.min(a,o-n*a),s.offset=v*n*a,s.count=v*c,0===n&&(window.cancelAnimationFrame(r.currentRafs[u]),delete r.currentRafs[u],i(t,s.scissorX,s.scissorY,s.scissorWidth,s.viewBoxSize[1])),r.clearOnly||(e(s),n*a+c<o&&(r.currentRafs[u]=window.requestAnimationFrame(function(){l(n+1)})),r.drawCompleted=!1)}var u=s.key;r.drawCompleted||(n(t),r.drawCompleted=!0),l(0)}function o(t){return Math.max(m,Math.min(1-m,t))}function s(t,e,r){for(var n=[],i=0;i<256;i++){var a=t(i/255);n.push((e?b:a).concat(r))}return n}function l(t,e){return(t>>>8*e)%256/255}function u(t,e,r,n){for(var i=[],a=0;a<t;a++)for(var s=0;s<g;s++)i.push(s<e?r[s].paddedUnitValues[a]:s===g-1?o(n[a]):s>=g-4?l(a,g-2-s):.5);return i}function c(t,e,r){var n,i,a,o=[];for(i=0;i<t;i++)for(a=0;a<v;a++)for(n=0;n<y;n++)o.push(e[i*g+r*y+n]),r*y+n===g-1&&a%2==0&&(o[o.length-1]*=-1);return o}function h(t,e){var r=[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15],n=r.map(function(r){return c(t,e,r)}),i={};return n.forEach(function(t,e){i["p"+e.toString(16)]=t}),i}function f(t,e,r){return t+e<=r}var d=t("regl"),p=t("./constants").verticalPadding,m=1e-6,g=64,v=2,y=4,b=[119,119,119],x=new Uint8Array(4),_=new Uint8Array(4);e.exports=function(t,e,r,n,o,l,c,m,g,v){function y(t){j[0]=t[0],j[1]=t[1]}function b(t,e,i,a,o,s,l,u,c,h,d){var g,v,y,b,x=[t,e],_=p/s,w=[0,1].map(function(){return[0,1,2,3].map(function(){return new Float32Array(16)})}),M=[0,1].map(function(){return[0,1,2,3].map(function(){return new Float32Array(16)})});for(g=0;g<2;g++)for(b=x[g],v=0;v<4;v++)for(y=0;y<16;y++){var k=y+16*v;w[g][v][y]=y+16*v===b?1:0,M[g][v][y]=(!m&&f(y,16*v,z)?A[0===k?0:1+(k-1)%(A.length-1)].filter[g]:g)+(2*g-1)*_}return{key:l,resolution:[r,n],viewBoxPosition:[i+I,a],viewBoxSize:[o,s],i:t,ii:e,dim1A:w[0][0],dim1B:w[0][1],dim1C:w[0][2],dim1D:w[0][3],dim2A:w[1][0],dim2B:w[1][1],dim2C:w[1][2],dim2D:w[1][3],loA:M[0][0],loB:M[0][1],loC:M[0][2],loD:M[0][3],hiA:M[1][0],hiB:M[1][1],hiC:M[1][2],hiD:M[1][3],colorClamp:j,scatter:u||0,scissorX:c===h?0:i+I,scissorWidth:(c===d?r-i+I:o+.5)+(c===h?i+I:0),scissorY:a,scissorHeight:s}}function x(t,o,s){var l,u,c,h=1/0,f=-1/0;for(l=0;l<z;l++)t[l].dim2.canvasX>f&&(f=t[l].dim2.canvasX,c=l),t[l].dim1.canvasX<h&&(h=t[l].dim1.canvasX,u=l);for(0===z&&i(O,0,0,r,n),l=0;l<z;l++){var d=t[l],p=d.dim1,m=p.crossfilterDimensionIndex,g=d.canvasX,y=d.canvasY,x=d.dim2,_=x.crossfilterDimensionIndex,w=d.panelSizeX,M=d.panelSizeY,A=g+w;if(o||!N[m]||N[m][0]!==g||N[m][1]!==A){N[m]=[g,A];var T=b(m,_,g,y,w,M,p.crossfilterDimensionIndex,v||p.scatter?1:0,l,u,c);k.clearOnly=s,a(O,F,k,o?e.blockLineCount:S,S,T)}}}function w(t,e){return O.read({x:t,y:e,width:1,height:1,data:_}),_}function M(t,e,r,n){var i=new Uint8Array(4*r*n);return O.read({x:t,y:e,width:r,height:n,data:i}),i}var k={currentRafs:{},drawCompleted:!0,clearOnly:!1},A=o.slice(),T=A.length,S=A[0]?A[0].values.length:0,E=m,L=g?e.color.map(function(t,r){return r/e.color.length}):e.color,C=Math.max(1/255,Math.pow(1/L.length,1/3)),I=e.canvasOverdrag,z=l.length,D=u(S,T,A,L),P=h(S,D),O=d({canvas:t,attributes:{preserveDrawingBuffer:!0,antialias:!g}}),R=O.texture({shape:[256,1],format:"rgba",type:"uint8",mag:"nearest",min:"nearest",data:s(c,m,Math.round(255*(m?C:1)))}),F=O({profile:!1,blend:{enable:E,func:{srcRGB:"src alpha",dstRGB:"one minus src alpha",srcAlpha:1,dstAlpha:1},equation:{rgb:"add",alpha:"add"},color:[0,0,0,0]},depth:{enable:!E,mask:!0,func:"less",range:[0,1]},cull:{enable:!0,face:"back"},scissor:{enable:!0,box:{x:O.prop("scissorX"),y:O.prop("scissorY"),width:O.prop("scissorWidth"),height:O.prop("scissorHeight")}},dither:!1,vert:g?"precision highp float;\n#define GLSLIFY 1\n\nattribute vec4 p0, p1, p2, p3,\n p4, p5, p6, p7,\n p8, p9, pa, pb,\n pc, pd, pe;\n\nattribute vec4 pf;\n\nuniform mat4 dim1A, dim2A, dim1B, dim2B, dim1C, dim2C, dim1D, dim2D,\n loA, hiA, loB, hiB, loC, hiC, loD, hiD;\n\nuniform vec2 resolution,\n viewBoxPosition,\n viewBoxSize;\n\nuniform sampler2D palette;\n\nuniform vec2 colorClamp;\n\nuniform float scatter;\n\nvarying vec4 fragColor;\n\nvec4 zero = vec4(0, 0, 0, 0);\nvec4 unit = vec4(1, 1, 1, 1);\nvec2 xyProjection = vec2(1, 1);\n\nmat4 mclamp(mat4 m, mat4 lo, mat4 hi) {\n return mat4(clamp(m[0], lo[0], hi[0]),\n clamp(m[1], lo[1], hi[1]),\n clamp(m[2], lo[2], hi[2]),\n clamp(m[3], lo[3], hi[3]));\n}\n\nbool mshow(mat4 p, mat4 lo, mat4 hi) {\n return mclamp(p, lo, hi) == p;\n}\n\nfloat val(mat4 p, mat4 v) {\n return dot(matrixCompMult(p, v) * unit, unit);\n}\n\nvoid main() {\n\n float x = 0.5 * sign(pf[3]) + 0.5;\n float prominence = abs(pf[3]);\n float depth = 1.0 - prominence;\n\n mat4 pA = mat4(p0, p1, p2, p3);\n mat4 pB = mat4(p4, p5, p6, p7);\n mat4 pC = mat4(p8, p9, pa, pb);\n mat4 pD = mat4(pc, pd, pe, abs(pf));\n\n float show = float(mshow(pA, loA, hiA) &&\n mshow(pB, loB, hiB) &&\n mshow(pC, loC, hiC) &&\n mshow(pD, loD, hiD));\n\n vec2 yy = show * vec2(val(pA, dim2A) + val(pB, dim2B) + val(pC, dim2C) + val(pD, dim2D),\n val(pA, dim1A) + val(pB, dim1B) + val(pC, dim1C) + val(pD, dim1D));\n\n vec2 dimensionToggle = vec2(x, 1.0 - x);\n\n vec2 scatterToggle = vec2(scatter, 1.0 - scatter);\n\n float y = dot(yy, dimensionToggle);\n mat2 xy = mat2(viewBoxSize * yy + dimensionToggle, viewBoxSize * vec2(x, y));\n\n vec2 viewBoxXY = viewBoxPosition + xy * scatterToggle;\n\n float depthOrHide = depth + 2.0 * (1.0 - show);\n\n gl_Position = vec4(\n xyProjection * (2.0 * viewBoxXY / resolution - 1.0),\n depthOrHide,\n 1.0\n );\n\n // pick coloring\n fragColor = vec4(pf.rgb, 1.0);\n}\n":"precision highp float;\n#define GLSLIFY 1\n\nattribute vec4 p0, p1, p2, p3,\n p4, p5, p6, p7,\n p8, p9, pa, pb,\n pc, pd, pe;\n\nattribute vec4 pf;\n\nuniform mat4 dim1A, dim2A, dim1B, dim2B, dim1C, dim2C, dim1D, dim2D,\n loA, hiA, loB, hiB, loC, hiC, loD, hiD;\n\nuniform vec2 resolution,\n viewBoxPosition,\n viewBoxSize;\n\nuniform sampler2D palette;\n\nuniform vec2 colorClamp;\n\nuniform float scatter;\n\nvarying vec4 fragColor;\n\nvec4 zero = vec4(0, 0, 0, 0);\nvec4 unit = vec4(1, 1, 1, 1);\nvec2 xyProjection = vec2(1, 1);\n\nmat4 mclamp(mat4 m, mat4 lo, mat4 hi) {\n return mat4(clamp(m[0], lo[0], hi[0]),\n clamp(m[1], lo[1], hi[1]),\n clamp(m[2], lo[2], hi[2]),\n clamp(m[3], lo[3], hi[3]));\n}\n\nbool mshow(mat4 p, mat4 lo, mat4 hi) {\n return mclamp(p, lo, hi) == p;\n}\n\nfloat val(mat4 p, mat4 v) {\n return dot(matrixCompMult(p, v) * unit, unit);\n}\n\nvoid main() {\n\n float x = 0.5 * sign(pf[3]) + 0.5;\n float prominence = abs(pf[3]);\n float depth = 1.0 - prominence;\n\n mat4 pA = mat4(p0, p1, p2, p3);\n mat4 pB = mat4(p4, p5, p6, p7);\n mat4 pC = mat4(p8, p9, pa, pb);\n mat4 pD = mat4(pc, pd, pe, abs(pf));\n\n float show = float(mshow(pA, loA, hiA) &&\n mshow(pB, loB, hiB) &&\n mshow(pC, loC, hiC) &&\n mshow(pD, loD, hiD));\n\n vec2 yy = show * vec2(val(pA, dim2A) + val(pB, dim2B) + val(pC, dim2C) + val(pD, dim2D),\n val(pA, dim1A) + val(pB, dim1B) + val(pC, dim1C) + val(pD, dim1D));\n\n vec2 dimensionToggle = vec2(x, 1.0 - x);\n\n vec2 scatterToggle = vec2(scatter, 1.0 - scatter);\n\n float y = dot(yy, dimensionToggle);\n mat2 xy = mat2(viewBoxSize * yy + dimensionToggle, viewBoxSize * vec2(x, y));\n\n vec2 viewBoxXY = viewBoxPosition + xy * scatterToggle;\n\n float depthOrHide = depth + 2.0 * (1.0 - show);\n\n gl_Position = vec4(\n xyProjection * (2.0 * viewBoxXY / resolution - 1.0),\n depthOrHide,\n 1.0\n );\n\n // visible coloring\n float clampedColorIndex = clamp((prominence - colorClamp[0]) / (colorClamp[1] - colorClamp[0]), 0.0, 1.0);\n fragColor = texture2D(palette, vec2((clampedColorIndex * 255.0 + 0.5) / 256.0, 0.5));\n}\n",frag:"precision lowp float;\n#define GLSLIFY 1\n\nvarying vec4 fragColor;\n\nvoid main() {\n gl_FragColor = fragColor;\n}\n",primitive:"lines",lineWidth:1,attributes:P,uniforms:{resolution:O.prop("resolution"),viewBoxPosition:O.prop("viewBoxPosition"),viewBoxSize:O.prop("viewBoxSize"),dim1A:O.prop("dim1A"),dim2A:O.prop("dim2A"),dim1B:O.prop("dim1B"),dim2B:O.prop("dim2B"),dim1C:O.prop("dim1C"),dim2C:O.prop("dim2C"),dim1D:O.prop("dim1D"),dim2D:O.prop("dim2D"),loA:O.prop("loA"),hiA:O.prop("hiA"),loB:O.prop("loB"),hiB:O.prop("hiB"),loC:O.prop("loC"),hiC:O.prop("hiC"),loD:O.prop("loD"),hiD:O.prop("hiD"),palette:R,colorClamp:O.prop("colorClamp"),scatter:O.prop("scatter")},offset:O.prop("offset"),count:O.prop("count")}),j=[0,1],N=[];return{setColorDomain:y,render:x,readPixel:w,readPixels:M,destroy:O.destroy}}},{"./constants":1001,regl:499}],1005:[function(t,e,r){"use strict";function n(t){return!("visible"in t)||t.visible}function i(t){var e=t.range?t.range[0]:b.min(t.values),r=t.range?t.range[1]:b.max(t.values);return!isNaN(e)&&isFinite(e)||(e=0),!isNaN(r)&&isFinite(r)||(r=0),e===r&&(void 0===e?(e=0,r=1):0===e?(e-=1,r+=1):(e*=.9,r*=1.1)),[e,r]}function a(t,e){var r,n,i,a,o;for(r=0,n=t.range(),i=1/0,a=n[0],o;r<n.length;r++){if((o=Math.abs(n[r]-e))>i)return a;i=o,a=n[r]}return n[n.length-1]}function o(t,e){return function(r,n){if(e){var i=e[n];return null===i||void 0===i?t(r):i}return t(r)}}function s(t,e,r){var n=i(r),a=r.ticktext;return r.tickvals?b.scale.ordinal().domain(r.tickvals.map(o(b.format(r.tickformat),a))).range(r.tickvals.map(function(t){return(t-n[0])/(n[1]-n[0])}).map(function(r){return t-e+r*(e-(t-e))})):b.scale.linear().domain(n).range([t-e,e])}function l(t,e){return b.scale.linear().range([t-e,e])}function u(t){return b.scale.linear().domain(i(t))}function c(t){var e=i(t);return t.tickvals&&b.scale.ordinal().domain(t.tickvals).range(t.tickvals.map(function(t){return(t-e[0])/(e[1]-e[0])}))}function h(t){var e=t.map(function(t){return t[0]}),r=t.map(function(t){return t[1]}),n=r.map(function(t){return b.rgb(t)}),i=function(t){return function(e){return e[t]}},a="rgb".split("").map(function(t){return b.scale.linear().clamp(!0).domain(e).range(n.map(i(t)))});return function(t){return a.map(function(e){return e(t)})}}function f(t,e,r){var i=M(e),a=i.trace,o=i.lineColor,s=i.cscale,l=a.line,c=a.domain,f=a.dimensions,d=t.width,p=a.labelfont,m=a.tickfont,g=a.rangefont,b=y.extendDeep({},l,{color:o.map(u({values:o,range:[l.cmin,l.cmax]})),blockLineCount:v.blockLineCount,canvasOverdrag:v.overdrag*v.canvasPixelRatio}),x=Math.floor(d*(c.x[1]-c.x[0])),_=Math.floor(t.height*(c.y[1]-c.y[0])),w=t.margin||{l:80,r:80,t:100,b:80},k=x,A=_;return{key:r,colCount:f.filter(n).length,dimensions:f,tickDistance:v.tickDistance,unitToColor:h(s),lines:b,labelFont:p,tickFont:m,rangeFont:g,translateX:c.x[0]*d,translateY:t.height-c.y[1]*t.height,pad:w,canvasWidth:k*v.canvasPixelRatio+2*b.canvasOverdrag,canvasHeight:A*v.canvasPixelRatio,width:k,height:A,canvasPixelRatio:v.canvasPixelRatio}}function d(t){var e=t.width,r=t.height,i=t.dimensions,a=t.canvasPixelRatio,o=function(r){return e*r/Math.max(1,t.colCount-1)},h=v.verticalPadding/(r*a),f=1-2*h,d=function(t){return h+f*t},p={key:t.key,xScale:o,model:t},m={};return p.dimensions=i.filter(n).map(function(e,n){var i=u(e),h=m[e.label];return m[e.label]=(h||0)+1,{key:e.label+(h?"__"+h:""),label:e.label,tickFormat:e.tickformat,tickvals:e.tickvals,ticktext:e.ticktext,ordinal:!!e.tickvals,scatter:v.scatter||e.scatter,xIndex:n,crossfilterDimensionIndex:n,visibleIndex:e._index,height:r,values:e.values,paddedUnitValues:e.values.map(i).map(d),xScale:o,x:o(n),canvasX:o(n)*a,unitScale:l(r,v.verticalPadding),domainScale:s(r,v.verticalPadding,e),ordinalScale:c(e),domainToUnitScale:i,filter:e.constraintrange?e.constraintrange.map(i):[0,1],parent:p,model:t}}),p}function p(t){return v.layers.map(function(e){return{key:e,context:"contextLineLayer"===e,pick:"pickLineLayer"===e,viewModel:t,model:t.model}})}function m(t){t.classed(v.cn.axisExtentText,!0).attr("text-anchor","middle").style("cursor","default").style("user-select","none")}var g=t("./lines"),v=t("./constants"),y=t("../../lib"),b=t("d3"),x=t("../../components/drawing"),_=t("../../lib/gup").keyFun,w=t("../../lib/gup").repeat,M=t("../../lib/gup").unwrap;e.exports=function(t,e,r,n,i){function o(t){var e=t.selectAll("defs").data(w,_);e.enter().append("defs");var r=e.selectAll("#"+v.id.filterBarPattern).data(w,_);r.enter().append("pattern").attr("id",v.id.filterBarPattern).attr("patternUnits","userSpaceOnUse"),r.attr("x",-v.bar.width).attr("width",v.bar.capturewidth).attr("height",function(t){return t.model.height});var n=r.selectAll("rect").data(w,_);n.enter().append("rect").attr("shape-rendering","crispEdges"),n.attr("height",function(t){return t.model.height}).attr("width",v.bar.width).attr("x",v.bar.width/2).attr("fill",v.bar.fillcolor).attr("fill-opacity",v.bar.fillopacity).attr("stroke",v.bar.strokecolor).attr("stroke-opacity",v.bar.strokeopacity).attr("stroke-width",v.bar.strokewidth)}function s(t){return t.dimensions.some(function(t){return 0!==t.filter[0]||1!==t.filter[1]})}function l(t,e){for(var r=e.panels||(e.panels=[]),n=t.each(function(t){return t})[e.key].map(function(t){return t.__data__}),i=n.length-1,a=0;a<1;a++)for(var o=0;o<i;o++){var s=r[o+a*i]||(r[o+a*i]={}),l=n[o],u=n[o+1];s.dim1=l,s.dim2=u,s.canvasX=l.canvasX,s.panelSizeX=u.canvasX-l.canvasX,s.panelSizeY=e.model.canvasHeight/1,s.y=a*s.panelSizeY,s.canvasY=e.model.canvasHeight-s.y-s.panelSizeY}}function u(t,e){for(var r=e.panels||(e.panels=[]),n=t.each(function(t){return t})[e.key].map(function(t){return t.__data__}),i=n.length-1,a=i,o=0;o<i;o++)for(var s=0;s<i;s++){var l=r[s+o*i]||(r[s+o*i]={}),u=n[s],c=n[s+1];l.dim1=n[o+1],l.dim2=c,l.canvasX=u.canvasX,l.panelSizeX=c.canvasX-u.canvasX,l.panelSizeY=e.model.canvasHeight/a,l.y=o*l.panelSizeY,l.canvasY=e.model.canvasHeight-l.y-l.panelSizeY}}function c(t,e){return(v.scatter?u:l)(t,e)}function h(t){return t.ordinal?function(){return""}:b.format(t.tickFormat)}function y(){W=!0,T=!0}function k(t){S=!1;var e=t.parent,r=t.brush.extent(),n=e.dimensions,i=n[t.xIndex].filter,a=W&&r[0]===r[1];a&&(t.brush.clear(),b.select(this).select("rect.extent").attr("y",-100));var o=a?[0,1]:r.slice();if(o[0]!==i[0]||o[1]!==i[1]){n[t.xIndex].filter=o,e.focusLineLayer&&e.focusLineLayer.render(e.panels,!0);var l=s(e);!X&&l?(e.contextLineLayer&&e.contextLineLayer.render(e.panels,!0),X=!0):X&&!l&&(e.contextLineLayer&&e.contextLineLayer.render(e.panels,!0,!0),X=!1)}W=!1}function A(t){var e=t.parent,r=t.brush.extent(),n=r[0]===r[1],o=e.dimensions,s=o[t.xIndex].filter;if(!n&&t.ordinal&&(s[0]=a(t.ordinalScale,s[0]),s[1]=a(t.ordinalScale,s[1]),s[0]===s[1]&&(s[0]=Math.max(0,s[0]-.05),s[1]=Math.min(1,s[1]+.05)),b.select(this).transition().duration(150).call(t.brush.extent(s)),e.focusLineLayer.render(e.panels,!0)),e.pickLineLayer&&e.pickLineLayer.render(e.panels,!0),S=!0,T="ending",i&&i.filterChanged){var l=t.domainToUnitScale.invert,u=s.map(l);i.filterChanged(e.key,t.visibleIndex,u)}}var T=!1,S=!0,E=r.filter(function(t){return M(t).trace.visible}).map(f.bind(0,n)).map(d);t.selectAll("."+v.cn.parcoordsLineLayers).remove();var L=t.selectAll("."+v.cn.parcoordsLineLayers).data(E,_);L.enter().insert("div","."+e.attr("class").split(" ").join(" .")).classed(v.cn.parcoordsLineLayers,!0).style("box-sizing","content-box"),L.style("transform",function(t){return"translate("+(t.model.translateX-v.overdrag)+"px,"+t.model.translateY+"px)"});var C=L.selectAll("."+v.cn.parcoordsLineLayer).data(p,_),I={renderers:[],dimensions:[]},z=null;C.enter().append("canvas").attr("class",function(t){return v.cn.parcoordsLineLayer+" "+(t.context?"context":t.pick?"pick":"focus")}).style("box-sizing","content-box").style("float","left").style("clear","both").style("left",0).style("overflow","visible").style("position","absolute").filter(function(t){return t.pick}).on("mousemove",function(t){if(S&&t.lineLayer&&i&&i.hover){var e=b.event,r=this.width,n=this.height,a=b.mouse(this),o=a[0],s=a[1];if(o<0||s<0||o>=r||s>=n)return;var l=t.lineLayer.readPixel(o,n-1-s),u=0!==l[3],c=u?l[2]+256*(l[1]+256*l[0]):null,h={x:o,y:s,clientX:e.clientX,clientY:e.clientY,dataIndex:t.model.key,curveNumber:c};c!==z&&(u?i.hover(h):i.unhover&&i.unhover(h),z=c)}}),C.style("margin",function(t){var e=t.model.pad;return e.t+"px "+e.r+"px "+e.b+"px "+e.l+"px"}).attr("width",function(t){return t.model.canvasWidth
}).attr("height",function(t){return t.model.canvasHeight}).style("width",function(t){return t.model.width+2*v.overdrag+"px"}).style("height",function(t){return t.model.height+"px"}).style("opacity",function(t){return t.pick?.01:1}),e.style("background","rgba(255, 255, 255, 0)");var D=e.selectAll("."+v.cn.parcoords).data(E,_);D.exit().remove(),D.enter().append("g").classed(v.cn.parcoords,!0).attr("overflow","visible").style("box-sizing","content-box").style("position","absolute").style("left",0).style("overflow","visible").style("shape-rendering","crispEdges").style("pointer-events","none").call(o),D.attr("width",function(t){return t.model.width+t.model.pad.l+t.model.pad.r}).attr("height",function(t){return t.model.height+t.model.pad.t+t.model.pad.b}).attr("transform",function(t){return"translate("+t.model.translateX+","+t.model.translateY+")"});var P=D.selectAll("."+v.cn.parcoordsControlView).data(w,_);P.enter().append("g").classed(v.cn.parcoordsControlView,!0).style("box-sizing","content-box"),P.attr("transform",function(t){return"translate("+t.model.pad.l+","+t.model.pad.t+")"});var O=P.selectAll("."+v.cn.yAxis).data(function(t){return t.dimensions},_);O.enter().append("g").classed(v.cn.yAxis,!0).each(function(t){I.dimensions.push(t)}),P.each(function(t){c(O,t)}),C.each(function(t){t.lineLayer=g(this,t.model.lines,t.model.canvasWidth,t.model.canvasHeight,t.viewModel.dimensions,t.viewModel.panels,t.model.unitToColor,t.context,t.pick,v.scatter),t.viewModel[t.key]=t.lineLayer,I.renderers.push(function(){t.lineLayer.render(t.viewModel.panels,!0)}),t.lineLayer.render(t.viewModel.panels,!t.context)}),O.attr("transform",function(t){return"translate("+t.xScale(t.xIndex)+", 0)"}),O.call(b.behavior.drag().origin(function(t){return t}).on("drag",function(t){var e=t.parent;S=!1,T||(t.x=Math.max(-v.overdrag,Math.min(t.model.width+v.overdrag,b.event.x)),t.canvasX=t.x*t.model.canvasPixelRatio,O.sort(function(t,e){return t.x-e.x}).each(function(e,r){e.xIndex=r,e.x=t===e?e.x:e.xScale(e.xIndex),e.canvasX=e.x*e.model.canvasPixelRatio}),c(O,e),O.filter(function(e){return 0!==Math.abs(t.xIndex-e.xIndex)}).attr("transform",function(t){return"translate("+t.xScale(t.xIndex)+", 0)"}),b.select(this).attr("transform","translate("+t.x+", 0)"),O.each(function(r,n,i){i===t.parent.key&&(e.dimensions[n]=r)}),e.contextLineLayer&&e.contextLineLayer.render(e.panels,!1,!s(e)),e.focusLineLayer.render&&e.focusLineLayer.render(e.panels))}).on("dragend",function(t){var e=t.parent;if(T)return void("ending"===T&&(T=!1));t.x=t.xScale(t.xIndex),t.canvasX=t.x*t.model.canvasPixelRatio,c(O,e),b.select(this).attr("transform",function(t){return"translate("+t.x+", 0)"}),e.contextLineLayer&&e.contextLineLayer.render(e.panels,!1,!s(e)),e.focusLineLayer&&e.focusLineLayer.render(e.panels),e.pickLineLayer&&e.pickLineLayer.render(e.panels,!0),S=!0,i&&i.axesMoved&&i.axesMoved(e.key,e.dimensions.map(function(t){return t.crossfilterDimensionIndex}))})),O.exit().remove();var R=O.selectAll("."+v.cn.axisOverlays).data(w,_);R.enter().append("g").classed(v.cn.axisOverlays,!0),R.selectAll("."+v.cn.axis).remove();var F=R.selectAll("."+v.cn.axis).data(w,_);F.enter().append("g").classed(v.cn.axis,!0),F.each(function(t){var e=t.model.height/t.model.tickDistance,r=t.domainScale,n=r.domain();b.select(this).call(b.svg.axis().orient("left").tickSize(4).outerTickSize(2).ticks(e,t.tickFormat).tickValues(t.ordinal?n:null).tickFormat(t.ordinal?function(t){return t}:null).scale(r)),x.font(F.selectAll("text"),t.model.tickFont)}),F.selectAll(".domain, .tick>line").attr("fill","none").attr("stroke","black").attr("stroke-opacity",.25).attr("stroke-width","1px"),F.selectAll("text").style("text-shadow","1px 1px 1px #fff, -1px -1px 1px #fff, 1px -1px 1px #fff, -1px 1px 1px #fff").style("cursor","default").style("user-select","none");var j=R.selectAll("."+v.cn.axisHeading).data(w,_);j.enter().append("g").classed(v.cn.axisHeading,!0);var N=j.selectAll("."+v.cn.axisTitle).data(w,_);N.enter().append("text").classed(v.cn.axisTitle,!0).attr("text-anchor","middle").style("cursor","ew-resize").style("user-select","none").style("pointer-events","auto"),N.attr("transform","translate(0,"+-v.axisTitleOffset+")").text(function(t){return t.label}).each(function(t){x.font(N,t.model.labelFont)});var B=R.selectAll("."+v.cn.axisExtent).data(w,_);B.enter().append("g").classed(v.cn.axisExtent,!0);var U=B.selectAll("."+v.cn.axisExtentTop).data(w,_);U.enter().append("g").classed(v.cn.axisExtentTop,!0),U.attr("transform","translate(0,"+-v.axisExtentOffset+")");var V=U.selectAll("."+v.cn.axisExtentTopText).data(w,_);V.enter().append("text").classed(v.cn.axisExtentTopText,!0).call(m),V.text(function(t){return h(t)(t.domainScale.domain().slice(-1)[0])}).each(function(t){x.font(V,t.model.rangeFont)});var H=B.selectAll("."+v.cn.axisExtentBottom).data(w,_);H.enter().append("g").classed(v.cn.axisExtentBottom,!0),H.attr("transform",function(t){return"translate(0,"+(t.model.height+v.axisExtentOffset)+")"});var q=H.selectAll("."+v.cn.axisExtentBottomText).data(w,_);q.enter().append("text").classed(v.cn.axisExtentBottomText,!0).attr("dy","0.75em").call(m),q.text(function(t){return h(t)(t.domainScale.domain()[0])}).each(function(t){x.font(q,t.model.rangeFont)});var G=R.selectAll("."+v.cn.axisBrush).data(w,_),Y=G.enter().append("g").classed(v.cn.axisBrush,!0);G.each(function(t){t.brush||(t.brush=b.svg.brush().y(t.unitScale).on("brushstart",y).on("brush",k).on("brushend",A),0===t.filter[0]&&1===t.filter[1]||t.brush.extent(t.filter),b.select(this).call(t.brush))}),Y.selectAll("rect").attr("x",-v.bar.capturewidth/2).attr("width",v.bar.capturewidth),Y.selectAll("rect.extent").attr("fill","url(#"+v.id.filterBarPattern+")").style("cursor","ns-resize").filter(function(t){return 0===t.filter[0]&&1===t.filter[1]}).attr("y",-100),Y.selectAll(".resize rect").attr("height",v.bar.handleheight).attr("opacity",0).style("visibility","visible"),Y.selectAll(".resize.n rect").style("cursor","n-resize").attr("y",v.bar.handleoverlap-v.bar.handleheight),Y.selectAll(".resize.s rect").style("cursor","s-resize").attr("y",v.bar.handleoverlap);var W=!1,X=!1;return I}},{"../../components/drawing":628,"../../lib":728,"../../lib/gup":725,"./constants":1001,"./lines":1004,d3:122}],1006:[function(t,e,r){"use strict";var n=t("./parcoords");e.exports=function(t,e){var r=t._fullLayout,i=r._paper,a=r._paperdiv,o={},s={},l=r._size;e.forEach(function(e,r){o[r]=t.data[r].dimensions,s[r]=t.data[r].dimensions.slice()});var u=function(e,r,n){var i=s[e][r],a=i.constraintrange;a&&2===a.length||(a=i.constraintrange=[]),a[0]=n[0],a[1]=n[1],t.emit("plotly_restyle")},c=function(e){t.emit("plotly_hover",e)},h=function(e){t.emit("plotly_unhover",e)},f=function(e,r){function n(t){return!("visible"in t)||t.visible}function i(t,e,r){var n=e.indexOf(r),i=t.indexOf(n);return-1===i&&(i+=e.length),i}var a=function(t){return function(e,n){return i(r,t,e)-i(r,t,n)}}(s[e].filter(n));o[e].sort(a),s[e].filter(function(t){return!n(t)}).sort(function(t){return s[e].indexOf(t)}).forEach(function(t){o[e].splice(o[e].indexOf(t),1),o[e].splice(s[e].indexOf(t),0,t)}),t.emit("plotly_restyle")};n(a,i,e,{width:l.w,height:l.h,margin:{t:l.t,r:l.r,b:l.b,l:l.l}},{filterChanged:u,hover:c,unhover:h,axesMoved:f})}},{"./parcoords":1005}],1007:[function(t,e,r){"use strict";var n=t("../../components/color/attributes"),i=t("../../plots/font_attributes"),a=t("../../plots/attributes"),o=t("../../lib/extend").extendFlat,s=i({editType:"calc",colorEditType:"style"});e.exports={labels:{valType:"data_array",editType:"calc"},label0:{valType:"number",dflt:0,editType:"calc"},dlabel:{valType:"number",dflt:1,editType:"calc"},values:{valType:"data_array",editType:"calc"},marker:{colors:{valType:"data_array",editType:"calc"},line:{color:{valType:"color",dflt:n.defaultLine,arrayOk:!0,editType:"style"},width:{valType:"number",min:0,dflt:0,arrayOk:!0,editType:"style"},editType:"calc"},editType:"calc"},text:{valType:"data_array",editType:"calc"},hovertext:{valType:"string",dflt:"",arrayOk:!0,editType:"style"},scalegroup:{valType:"string",dflt:"",editType:"calc"},textinfo:{valType:"flaglist",flags:["label","text","value","percent"],extras:["none"],editType:"calc"},hoverinfo:o({},a.hoverinfo,{flags:["label","text","value","percent","name"]}),textposition:{valType:"enumerated",values:["inside","outside","auto","none"],dflt:"auto",arrayOk:!0,editType:"calc"},textfont:o({},s,{}),insidetextfont:o({},s,{}),outsidetextfont:o({},s,{}),domain:{x:{valType:"info_array",items:[{valType:"number",min:0,max:1,editType:"calc"},{valType:"number",min:0,max:1,editType:"calc"}],dflt:[0,1],editType:"calc"},y:{valType:"info_array",items:[{valType:"number",min:0,max:1,editType:"calc"},{valType:"number",min:0,max:1,editType:"calc"}],dflt:[0,1],editType:"calc"},editType:"calc"},hole:{valType:"number",min:0,max:1,dflt:0,editType:"calc"},sort:{valType:"boolean",dflt:!0,editType:"calc"},direction:{valType:"enumerated",values:["clockwise","counterclockwise"],dflt:"counterclockwise",editType:"calc"},rotation:{valType:"number",min:-360,max:360,dflt:0,editType:"calc"},pull:{valType:"number",min:0,max:1,dflt:0,arrayOk:!0,editType:"calc"}}},{"../../components/color/attributes":603,"../../lib/extend":717,"../../plots/attributes":770,"../../plots/font_attributes":796}],1008:[function(t,e,r){"use strict";function n(t,e){for(var r=[],n=0;n<t.length;n++){var i=t[n],a=i[0].trace;a._module===e&&!0===a.visible&&r.push(i)}return r}var i=t("../../registry");r.name="pie",r.plot=function(t){var e=i.getModule("pie"),r=n(t.calcdata,e);r.length&&e.plot(t,r)},r.clean=function(t,e,r,n){var i=n._has&&n._has("pie"),a=e._has&&e._has("pie");i&&!a&&n._pielayer.selectAll("g.trace").remove()}},{"../../registry":846}],1009:[function(t,e,r){"use strict";function n(t){if(!l){var e=o.defaults;l=e.slice();var r;for(r=0;r<e.length;r++)l.push(a(e[r]).lighten(20).toHexString());for(r=0;r<o.defaults.length;r++)l.push(a(e[r]).darken(20).toHexString())}return l[t%l.length]}var i=t("fast-isnumeric"),a=t("tinycolor2"),o=t("../../components/color"),s=t("./helpers");e.exports=function(t,e){var r,l,u,c,h,f,d=e.values,p=e.labels,m=[],g=t._fullLayout,v=g._piecolormap,y={},b=!1,x=0,_=g.hiddenlabels||[];if(e.dlabel)for(p=new Array(d.length),r=0;r<d.length;r++)p[r]=String(e.label0+r*e.dlabel);for(r=0;r<d.length;r++)l=d[r],i(l)&&((l=+l)<0||(u=p[r],void 0!==u&&""!==u||(u=r),u=String(u),void 0===y[u]&&(y[u]=!0,c=a(e.marker.colors[r]),c.isValid()?(c=o.addOpacity(c,c.getAlpha()),v[u]||(v[u]=c)):v[u]?c=v[u]:(c=!1,b=!0),h=-1!==_.indexOf(u),h||(x+=l),m.push({v:l,label:u,color:c,i:r,hidden:h}))));if(e.sort&&m.sort(function(t,e){return e.v-t.v}),b)for(r=0;r<m.length;r++)f=m[r],!1===f.color&&(v[f.label]=f.color=n(g._piedefaultcolorcount),g._piedefaultcolorcount++);if(m[0]&&(m[0].vTotal=x),e.textinfo&&"none"!==e.textinfo){var w,M=-1!==e.textinfo.indexOf("label"),k=-1!==e.textinfo.indexOf("text"),A=-1!==e.textinfo.indexOf("value"),T=-1!==e.textinfo.indexOf("percent"),S=g.separators;for(r=0;r<m.length;r++)f=m[r],w=M?[f.label]:[],k&&e.text[f.i]&&w.push(e.text[f.i]),A&&w.push(s.formatPieValue(f.v,S)),T&&w.push(s.formatPiePercent(f.v/x,S)),f.text=w.join("<br>")}return m};var l},{"../../components/color":604,"./helpers":1011,"fast-isnumeric":131,tinycolor2:534}],1010:[function(t,e,r){"use strict";var n=t("../../lib"),i=t("./attributes");e.exports=function(t,e,r,a){function o(r,a){return n.coerce(t,e,i,r,a)}var s=n.coerceFont,l=o("values");if(!Array.isArray(l)||!l.length)return void(e.visible=!1);var u=o("labels");Array.isArray(u)||(o("label0"),o("dlabel")),o("marker.line.width")&&o("marker.line.color");var c=o("marker.colors");Array.isArray(c)||(e.marker.colors=[]),o("scalegroup");var h=o("text"),f=o("textinfo",Array.isArray(h)?"text+percent":"percent");if(o("hovertext"),f&&"none"!==f){var d=o("textposition"),p=Array.isArray(d)||"auto"===d,m=p||"inside"===d,g=p||"outside"===d;if(m||g){var v=s(o,"textfont",a.font);m&&s(o,"insidetextfont",v),g&&s(o,"outsidetextfont",v)}}o("domain.x"),o("domain.y"),o("hole"),o("sort"),o("direction"),o("rotation"),o("pull")}},{"../../lib":728,"./attributes":1007}],1011:[function(t,e,r){"use strict";var n=t("../../lib");r.formatPiePercent=function(t,e){var r=(100*t).toPrecision(3);return-1!==r.lastIndexOf(".")&&(r=r.replace(/[.]?0+$/,"")),n.numSeparate(r,e)+"%"},r.formatPieValue=function(t,e){var r=t.toPrecision(10);return-1!==r.lastIndexOf(".")&&(r=r.replace(/[.]?0+$/,"")),n.numSeparate(r,e)}},{"../../lib":728}],1012:[function(t,e,r){"use strict";var n={};n.attributes=t("./attributes"),n.supplyDefaults=t("./defaults"),n.supplyLayoutDefaults=t("./layout_defaults"),n.layoutAttributes=t("./layout_attributes"),n.calc=t("./calc"),n.plot=t("./plot"),n.style=t("./style"),n.styleOne=t("./style_one"),n.moduleType="trace",n.name="pie",n.basePlotModule=t("./base_plot"),n.categories=["pie","showLegend"],n.meta={},e.exports=n},{"./attributes":1007,"./base_plot":1008,"./calc":1009,"./defaults":1010,"./layout_attributes":1013,"./layout_defaults":1014,"./plot":1015,"./style":1016,"./style_one":1017}],1013:[function(t,e,r){"use strict";e.exports={hiddenlabels:{valType:"data_array",editType:"calc"}}},{}],1014:[function(t,e,r){"use strict";var n=t("../../lib"),i=t("./layout_attributes");e.exports=function(t,e){!function(r,a){n.coerce(t,e,i,r,a)}("hiddenlabels")}},{"../../lib":728,"./layout_attributes":1013}],1015:[function(t,e,r){"use strict";function n(t,e,r){var n=Math.sqrt(t.width*t.width+t.height*t.height),a=t.width/t.height,o=Math.PI*Math.min(e.v/r.vTotal,.5),s=1-r.trace.hole,l=i(e,r),u={scale:l*r.r*2/n,rCenter:1-l,rotate:0};if(u.scale>=1)return u;var c=a+1/(2*Math.tan(o)),h=r.r*Math.min(1/(Math.sqrt(c*c+.5)+c),s/(Math.sqrt(a*a+s/2)+a)),f={scale:2*h/t.height,rCenter:Math.cos(h/r.r)-h*a/r.r,rotate:(180/Math.PI*e.midangle+720)%180-90},d=1/a,p=d+1/(2*Math.tan(o)),m=r.r*Math.min(1/(Math.sqrt(p*p+.5)+p),s/(Math.sqrt(d*d+s/2)+d)),g={scale:2*m/t.width,rCenter:Math.cos(m/r.r)-m/a/r.r,rotate:(180/Math.PI*e.midangle+810)%180-90},v=g.scale>f.scale?g:f;return u.scale<1&&v.scale>u.scale?v:u}function i(t,e){if(t.v===e.vTotal&&!e.trace.hole)return 1;var r=Math.PI*Math.min(t.v/e.vTotal,.5);return Math.min(1/(1+1/Math.sin(r)),(1-e.trace.hole)/2)}function a(t,e){var r=e.pxmid[0],n=e.pxmid[1],i=t.width/2,a=t.height/2;return r<0&&(i*=-1),n<0&&(a*=-1),{scale:1,rCenter:1,rotate:0,x:i+Math.abs(a)*(i>0?1:-1)/2,y:a/(1+r*r/(n*n)),outside:!0}}function o(t,e){function r(t,e){return t.pxmid[1]-e.pxmid[1]}function n(t,e){return e.pxmid[1]-t.pxmid[1]}var i,a,o,s,l,u,c,h,f,d,p,m,g;for(a=0;a<2;a++)for(o=a?r:n,l=a?Math.max:Math.min,c=a?1:-1,i=0;i<2;i++){for(s=i?Math.max:Math.min,u=i?1:-1,h=t[a][i],h.sort(o),f=t[1-a][i],d=f.concat(h),m=[],p=0;p<h.length;p++)void 0!==h[p].yLabelMid&&m.push(h[p]);for(g=!1,p=0;a&&p<f.length;p++)if(void 0!==f[p].yLabelMid){g=f[p];break}for(p=0;p<m.length;p++){var v=p&&m[p-1];g&&!p&&(v=g),function(t,r){r||(r={});var n,i,o,h,f,p,m=r.labelExtraY+(a?r.yLabelMax:r.yLabelMin),g=a?t.yLabelMin:t.yLabelMax,v=a?t.yLabelMax:t.yLabelMin,y=t.cyFinal+l(t.px0[1],t.px1[1]),b=m-g;if(b*c>0&&(t.labelExtraY=b),Array.isArray(e.pull))for(i=0;i<d.length;i++)(o=d[i])===t||(e.pull[t.i]||0)>=e.pull[o.i]||((t.pxmid[1]-o.pxmid[1])*c>0?(h=o.cyFinal+l(o.px0[1],o.px1[1]),(b=h-g-t.labelExtraY)*c>0&&(t.labelExtraY+=b)):(v+t.labelExtraY-y)*c>0&&(n=3*u*Math.abs(i-d.indexOf(t)),f=o.cxFinal+s(o.px0[0],o.px1[0]),(p=f+n-(t.cxFinal+t.pxmid[0])-t.labelExtraX)*u>0&&(t.labelExtraX+=p)))}(m[p],v)}}}function s(t,e){var r,n,i,a,o,s,l,c,h,f,d=[];for(i=0;i<t.length;i++){if(o=t[i][0],s=o.trace,r=e.w*(s.domain.x[1]-s.domain.x[0]),n=e.h*(s.domain.y[1]-s.domain.y[0]),l=s.tiltaxis*Math.PI/180,c=s.pull,Array.isArray(c))for(c=0,a=0;a<s.pull.length;a++)s.pull[a]>c&&(c=s.pull[a]);o.r=Math.min(r/u(s.tilt,Math.sin(l),s.depth),n/u(s.tilt,Math.cos(l),s.depth))/(2+2*c),o.cx=e.l+e.w*(s.domain.x[1]+s.domain.x[0])/2,o.cy=e.t+e.h*(2-s.domain.y[1]-s.domain.y[0])/2,s.scalegroup&&-1===d.indexOf(s.scalegroup)&&d.push(s.scalegroup)}for(a=0;a<d.length;a++){for(f=1/0,h=d[a],i=0;i<t.length;i++)o=t[i][0],o.trace.scalegroup===h&&(f=Math.min(f,o.r*o.r/o.vTotal));for(i=0;i<t.length;i++)o=t[i][0],o.trace.scalegroup===h&&(o.r=Math.sqrt(f*o.vTotal))}}function l(t){function e(t){var e=h.r*Math.sin(t),r=-h.r*Math.cos(t);return d?[e*(1-s*n*n)+r*o*s,e*o*s+r*(1-s*i*i),Math.sin(a)*(r*i-e*n)]:[e,r]}var r,n,i,a,o,s,l,u,c,h=t[0],f=h.trace,d=f.tilt,p=f.rotation*Math.PI/180,m=2*Math.PI/h.vTotal,g="px0",v="px1";if("counterclockwise"===f.direction){for(l=0;l<t.length&&t[l].hidden;l++);if(l===t.length)return;p+=m*t[l].v,m*=-1,g="px1",v="px0"}for(d&&(a=d*Math.PI/180,r=f.tiltaxis*Math.PI/180,o=Math.sin(r)*Math.cos(r),s=1-Math.cos(a),n=Math.sin(r),i=Math.cos(r)),c=e(p),l=0;l<t.length;l++)u=t[l],u.hidden||(u[g]=c,p+=m*u.v/2,u.pxmid=e(p),u.midangle=p,p+=m*u.v/2,c=e(p),u[v]=c,u.largeArc=u.v>h.vTotal/2?1:0)}function u(t,e,r){if(!t)return 1;var n=Math.sin(t*Math.PI/180);return Math.max(.01,r*n*Math.abs(e)+2*Math.sqrt(1-n*n*e*e))}var c=t("d3"),h=t("../../components/fx"),f=t("../../components/color"),d=t("../../components/drawing"),p=t("../../lib/svg_text_utils"),m=t("./helpers");e.exports=function(t,e){var r=t._fullLayout;s(e,r._size);var u=r._pielayer.selectAll("g.trace").data(e);u.enter().append("g").attr({"stroke-linejoin":"round",class:"trace"}),u.exit().remove(),u.order(),u.each(function(e){var s=c.select(this),u=e[0],g=u.trace,v=(g.depth||0)*u.r*Math.sin(0)/2,y=g.tiltaxis||0,b=y*Math.PI/180,x=[v*Math.sin(b),v*Math.cos(b)],_=u.r*Math.cos(0),w=s.selectAll("g.part").data(g.tilt?["top","sides"]:["top"]);w.enter().append("g").attr("class",function(t){return t+" part"}),w.exit().remove(),w.order(),l(e),s.selectAll(".top").each(function(){var s=c.select(this).selectAll("g.slice").data(e);s.enter().append("g").classed("slice",!0),s.exit().remove();var l=[[[],[]],[[],[]]],v=!1;s.each(function(e){function o(n){n.originalEvent=c.event;var a=t._fullLayout,o=t._fullData[g.index],s=h.castHoverinfo(o,a,e.i);if("all"===s&&(s="label+text+value+percent+name"),t._dragging||!1===a.hovermode||"none"===s||"skip"===s||!s)return void h.hover(t,n,"pie");var l=i(e,u),f=w+e.pxmid[0]*(1-l),d=M+e.pxmid[1]*(1-l),p=r.separators,v=[];-1!==s.indexOf("label")&&v.push(e.label),-1!==s.indexOf("text")&&(o.hovertext?v.push(Array.isArray(o.hovertext)?o.hovertext[e.i]:o.hovertext):o.text&&o.text[e.i]&&v.push(o.text[e.i])),-1!==s.indexOf("value")&&v.push(m.formatPieValue(e.v,p)),-1!==s.indexOf("percent")&&v.push(m.formatPiePercent(e.v/u.vTotal,p)),h.loneHover({x0:f-l*u.r,x1:f+l*u.r,y:d,text:v.join("<br>"),name:-1!==s.indexOf("name")?o.name:void 0,idealAlign:e.pxmid[0]<0?"left":"right",color:h.castHoverOption(g,e.i,"bgcolor")||e.color,borderColor:h.castHoverOption(g,e.i,"bordercolor"),fontFamily:h.castHoverOption(g,e.i,"font.family"),fontSize:h.castHoverOption(g,e.i,"font.size"),fontColor:h.castHoverOption(g,e.i,"font.color")},{container:a._hoverlayer.node(),outerContainer:a._paper.node(),gd:t}),h.hover(t,n,"pie"),T=!0}function s(e){e.originalEvent=c.event,t.emit("plotly_unhover",{event:c.event,points:[e]}),T&&(h.loneUnhover(r._hoverlayer.node()),T=!1)}function f(){t._hoverdata=[e],t._hoverdata.trace=u.trace,h.click(t,c.event)}function b(t,r,n,i){return"a"+i*u.r+","+i*_+" "+y+" "+e.largeArc+(n?" 1 ":" 0 ")+i*(r[0]-t[0])+","+i*(r[1]-t[1])}if(e.hidden)return void c.select(this).selectAll("path,g").remove();e.pointNumber=e.i,e.curveNumber=g.index,l[e.pxmid[1]<0?0:1][e.pxmid[0]<0?0:1].push(e);var w=u.cx+x[0],M=u.cy+x[1],k=c.select(this),A=k.selectAll("path.surface").data([e]),T=!1;if(A.enter().append("path").classed("surface",!0).style({"pointer-events":"all"}),k.select("path.textline").remove(),k.on("mouseover",o).on("mouseout",s).on("click",f),g.pull){var S=+(Array.isArray(g.pull)?g.pull[e.i]:g.pull)||0;S>0&&(w+=S*e.pxmid[0],M+=S*e.pxmid[1])}e.cxFinal=w,e.cyFinal=M;var E=g.hole;if(e.v===u.vTotal){var L="M"+(w+e.px0[0])+","+(M+e.px0[1])+b(e.px0,e.pxmid,!0,1)+b(e.pxmid,e.px0,!0,1)+"Z";E?A.attr("d","M"+(w+E*e.px0[0])+","+(M+E*e.px0[1])+b(e.px0,e.pxmid,!1,E)+b(e.pxmid,e.px0,!1,E)+"Z"+L):A.attr("d",L)}else{var C=b(e.px0,e.px1,!0,1);if(E){var I=1-E;A.attr("d","M"+(w+E*e.px1[0])+","+(M+E*e.px1[1])+b(e.px1,e.px0,!1,E)+"l"+I*e.px0[0]+","+I*e.px0[1]+C+"Z")}else A.attr("d","M"+w+","+M+"l"+e.px0[0]+","+e.px0[1]+C+"Z")}var z=Array.isArray(g.textposition)?g.textposition[e.i]:g.textposition,D=k.selectAll("g.slicetext").data(e.text&&"none"!==z?[0]:[]);D.enter().append("g").classed("slicetext",!0),D.exit().remove(),D.each(function(){var r=c.select(this).selectAll("text").data([0]);r.enter().append("text").attr("data-notex",1),r.exit().remove(),r.text(e.text).attr({class:"slicetext",transform:"","text-anchor":"middle"}).call(d.font,"outside"===z?g.outsidetextfont:g.insidetextfont).call(p.convertToTspans,t);var i,o=d.bBox(r.node());"outside"===z?i=a(o,e):(i=n(o,e,u),"auto"===z&&i.scale<1&&(r.call(d.font,g.outsidetextfont),g.outsidetextfont.family===g.insidetextfont.family&&g.outsidetextfont.size===g.insidetextfont.size||(o=d.bBox(r.node())),i=a(o,e)));var s=w+e.pxmid[0]*i.rCenter+(i.x||0),l=M+e.pxmid[1]*i.rCenter+(i.y||0);i.outside&&(e.yLabelMin=l-o.height/2,e.yLabelMid=l,e.yLabelMax=l+o.height/2,e.labelExtraX=0,e.labelExtraY=0,v=!0),r.attr("transform","translate("+s+","+l+")"+(i.scale<1?"scale("+i.scale+")":"")+(i.rotate?"rotate("+i.rotate+")":"")+"translate("+-(o.left+o.right)/2+","+-(o.top+o.bottom)/2+")")})}),v&&o(l,g),s.each(function(t){if(t.labelExtraX||t.labelExtraY){var e=c.select(this),r=e.select("g.slicetext text");r.attr("transform","translate("+t.labelExtraX+","+t.labelExtraY+")"+r.attr("transform"));var n=t.cxFinal+t.pxmid[0],i=t.cyFinal+t.pxmid[1],a="M"+n+","+i,o=(t.yLabelMax-t.yLabelMin)*(t.pxmid[0]<0?-1:1)/4;if(t.labelExtraX){var s=t.labelExtraX*t.pxmid[1]/t.pxmid[0],l=t.yLabelMid+t.labelExtraY-(t.cyFinal+t.pxmid[1]);Math.abs(s)>Math.abs(l)?a+="l"+l*t.pxmid[0]/t.pxmid[1]+","+l+"H"+(n+t.labelExtraX+o):a+="l"+t.labelExtraX+","+s+"v"+(l-s)+"h"+o}else a+="V"+(t.yLabelMid+t.labelExtraY)+"h"+o;e.append("path").classed("textline",!0).call(f.stroke,g.outsidetextfont.color).attr({"stroke-width":Math.min(2,g.outsidetextfont.size/8),d:a,fill:"none"})}})})}),setTimeout(function(){u.selectAll("tspan").each(function(){var t=c.select(this);t.attr("dy")&&t.attr("dy",t.attr("dy"))})},0)}},{"../../components/color":604,"../../components/drawing":628,"../../components/fx":645,"../../lib/svg_text_utils":750,"./helpers":1011,d3:122}],1016:[function(t,e,r){"use strict";var n=t("d3"),i=t("./style_one");e.exports=function(t){t._fullLayout._pielayer.selectAll(".trace").each(function(t){var e=t[0],r=e.trace,a=n.select(this);a.style({opacity:r.opacity}),a.selectAll(".top path.surface").each(function(t){n.select(this).call(i,t,r)})})}},{"./style_one":1017,d3:122}],1017:[function(t,e,r){"use strict";var n=t("../../components/color");e.exports=function(t,e,r){var i=r.marker.line.color;Array.isArray(i)&&(i=i[e.i]||n.defaultLine);var a=r.marker.line.width||0;Array.isArray(a)&&(a=a[e.i]||0),t.style({"stroke-width":a}).call(n.fill,e.color).call(n.stroke,i)}},{"../../components/color":604}],1018:[function(t,e,r){"use strict";var n=t("../scattergl/attributes");e.exports={x:n.x,y:n.y,xy:{valType:"data_array",editType:"calc"},indices:{valType:"data_array",editType:"calc"},xbounds:{valType:"data_array",editType:"calc"},ybounds:{valType:"data_array",editType:"calc"},text:n.text,marker:{color:{valType:"color",arrayOk:!1,editType:"calc"},opacity:{valType:"number",min:0,max:1,dflt:1,arrayOk:!1,editType:"calc"},blend:{valType:"boolean",dflt:null,editType:"calc"},sizemin:{valType:"number",min:.1,max:2,dflt:.5,editType:"calc"},sizemax:{valType:"number",min:.1,dflt:20,editType:"calc"},border:{color:{valType:"color",arrayOk:!1,editType:"calc"},arearatio:{valType:"number",min:0,max:1,dflt:0,editType:"calc"},editType:"calc"},editType:"calc"}}},{"../scattergl/attributes":1077}],1019:[function(t,e,r){"use strict";function n(t,e){this.scene=t,this.uid=e,this.type="pointcloud",this.pickXData=[],this.pickYData=[],this.xData=[],this.yData=[],this.textLabels=[],this.color="rgb(0, 0, 0)",this.name="",this.hoverinfo="all",this.idToIndex=new Int32Array(0),this.bounds=[0,0,0,0],this.pointcloudOptions={positions:new Float32Array(0),idToIndex:this.idToIndex,sizemin:.5,sizemax:12,color:[0,0,0,1],areaRatio:1,borderColor:[0,0,0,1]},this.pointcloud=a(t.glplot,this.pointcloudOptions),this.pointcloud._trace=this}function i(t,e){var r=new n(t,e.uid);return r.update(e),r}var a=t("gl-pointcloud2d"),o=t("../../lib/str2rgbarray"),s=t("../scatter/get_trace_color"),l=["xaxis","yaxis"],u=n.prototype;u.handlePick=function(t){var e=this.idToIndex[t.pointId];return{trace:this,dataCoord:t.dataCoord,traceCoord:this.pickXYData?[this.pickXYData[2*e],this.pickXYData[2*e+1]]:[this.pickXData[e],this.pickYData[e]],textLabel:Array.isArray(this.textLabels)?this.textLabels[e]:this.textLabels,color:this.color,name:this.name,pointIndex:e,hoverinfo:this.hoverinfo}},u.update=function(t){this.index=t.index,this.textLabels=t.text,this.name=t.name,this.hoverinfo=t.hoverinfo,this.bounds=[1/0,1/0,-1/0,-1/0],this.updateFast(t),this.color=s(t,{})},u.updateFast=function(t){var e,r,n,i,a,s,l=this.xData=this.pickXData=t.x,u=this.yData=this.pickYData=t.y,c=this.pickXYData=t.xy,h=t.xbounds&&t.ybounds,f=t.indices,d=this.bounds;if(c){if(n=c,e=c.length>>>1,h)d[0]=t.xbounds[0],d[2]=t.xbounds[1],d[1]=t.ybounds[0],d[3]=t.ybounds[1];else for(s=0;s<e;s++)i=n[2*s],a=n[2*s+1],i<d[0]&&(d[0]=i),i>d[2]&&(d[2]=i),a<d[1]&&(d[1]=a),a>d[3]&&(d[3]=a);if(f)r=f;else for(r=new Int32Array(e),s=0;s<e;s++)r[s]=s}else for(e=l.length,n=new Float32Array(2*e),r=new Int32Array(e),s=0;s<e;s++)i=l[s],a=u[s],r[s]=s,n[2*s]=i,n[2*s+1]=a,i<d[0]&&(d[0]=i),i>d[2]&&(d[2]=i),a<d[1]&&(d[1]=a),a>d[3]&&(d[3]=a);this.idToIndex=r,this.pointcloudOptions.idToIndex=r,this.pointcloudOptions.positions=n;var p=o(t.marker.color),m=o(t.marker.border.color),g=t.opacity*t.marker.opacity;p[3]*=g,this.pointcloudOptions.color=p;var v=t.marker.blend;if(null===v){v=l.length<100||u.length<100}this.pointcloudOptions.blend=v,m[3]*=g,this.pointcloudOptions.borderColor=m;var y=t.marker.sizemin,b=Math.max(t.marker.sizemax,t.marker.sizemin);this.pointcloudOptions.sizeMin=y,this.pointcloudOptions.sizeMax=b,this.pointcloudOptions.areaRatio=t.marker.border.arearatio,this.pointcloud.update(this.pointcloudOptions),this.expandAxesFast(d,b/2)},u.expandAxesFast=function(t,e){for(var r,n,i,a=e||.5,o=0;o<2;o++)r=this.scene[l[o]],n=r._min,n||(n=[]),n.push({val:t[o],pad:a}),i=r._max,i||(i=[]),i.push({val:t[o+2],pad:a})},u.dispose=function(){this.pointcloud.dispose()},e.exports=i},{"../../lib/str2rgbarray":749,"../scatter/get_trace_color":1040,"gl-pointcloud2d":230}],1020:[function(t,e,r){"use strict";var n=t("../../lib"),i=t("./attributes");e.exports=function(t,e,r){function a(r,a){return n.coerce(t,e,i,r,a)}a("x"),a("y"),a("xbounds"),a("ybounds"),t.xy&&t.xy instanceof Float32Array&&(e.xy=t.xy),t.indices&&t.indices instanceof Int32Array&&(e.indices=t.indices),a("text"),a("marker.color",r),a("marker.opacity"),a("marker.blend"),a("marker.sizemin"),a("marker.sizemax"),a("marker.border.color",r),a("marker.border.arearatio")}},{"../../lib":728,"./attributes":1018}],1021:[function(t,e,r){"use strict";var n={};n.attributes=t("./attributes"),n.supplyDefaults=t("./defaults"),n.calc=t("../scatter3d/calc"),n.plot=t("./convert"),n.moduleType="trace",n.name="pointcloud",n.basePlotModule=t("../../plots/gl2d"),n.categories=["gl2d","showLegend"],n.meta={},e.exports=n},{"../../plots/gl2d":808,"../scatter3d/calc":1056,"./attributes":1018,"./convert":1019,"./defaults":1020}],1022:[function(t,e,r){"use strict";var n=t("../../plots/font_attributes"),i=t("../../plots/attributes"),a=t("../../components/color/attributes"),o=t("../../components/fx/attributes"),s=t("../../lib/extend").extendFlat,l=t("../../plot_api/edit_types").overrideAll;e.exports=l({hoverinfo:s({},i.hoverinfo,{flags:["label","text","value","percent","name"]}),hoverlabel:o.hoverlabel,domain:{x:{valType:"info_array",items:[{valType:"number",min:0,max:1},{valType:"number",min:0,max:1}],dflt:[0,1]},y:{valType:"info_array",items:[{valType:"number",min:0,max:1},{valType:"number",min:0,max:1}],dflt:[0,1]}},orientation:{valType:"enumerated",values:["v","h"],dflt:"h"},valueformat:{valType:"string",dflt:".3s"},valuesuffix:{valType:"string",dflt:""},arrangement:{valType:"enumerated",values:["snap","perpendicular","freeform","fixed"],dflt:"snap"},textfont:n({}),node:{label:{valType:"data_array",dflt:[]},color:{valType:"color",arrayOk:!0},line:{color:{valType:"color",dflt:a.defaultLine,arrayOk:!0},width:{valType:"number",min:0,dflt:.5,arrayOk:!0}},pad:{valType:"number",arrayOk:!1,min:0,dflt:20},thickness:{valType:"number",arrayOk:!1,min:1,dflt:20}},link:{label:{valType:"data_array",dflt:[]},color:{valType:"color",arrayOk:!0},line:{color:{valType:"color",dflt:a.defaultLine,arrayOk:!0},width:{valType:"number",min:0,dflt:0,arrayOk:!0}},source:{valType:"data_array",dflt:[]},target:{valType:"data_array",dflt:[]},value:{valType:"data_array",dflt:[]}}},"calc","nested")},{"../../components/color/attributes":603,"../../components/fx/attributes":637,"../../lib/extend":717,"../../plot_api/edit_types":756,"../../plots/attributes":770,"../../plots/font_attributes":796}],1023:[function(t,e,r){"use strict";var n=t("../../plot_api/edit_types").overrideAll,i=t("../../plots/plots"),a=t("./plot"),o=t("../../components/fx/layout_attributes");r.name="sankey",r.attr="type",r.baseLayoutAttrOverrides=n({hoverlabel:o.hoverlabel},"plot","nested"),r.plot=function(t){var e=i.getSubplotCalcData(t.calcdata,"sankey","sankey");e.length&&a(t,e)},r.clean=function(t,e,r,n){var i=n._has&&n._has("sankey"),a=e._has&&e._has("sankey");i&&!a&&n._paperdiv.selectAll(".sankey").remove()}},{"../../components/fx/layout_attributes":646,"../../plot_api/edit_types":756,"../../plots/plots":831,"./plot":1028}],1024:[function(t,e,r){"use strict";function n(t,e,r){for(var n=t.map(function(){return[]}),a=0;a<Math.min(e.length,r.length);a++){if(e[a]===r[a])return!0;n[e[a]].push(r[a])}return i(n).components.some(function(t){return t.length>1})}var i=t("strongly-connected-components"),a=t("../../lib"),o=t("../../lib/gup").wrap;e.exports=function(t,e){return n(e.node.label,e.link.source,e.link.target)&&(a.error("Circularity is present in the Sankey data. Removing all nodes and links."),e.link.label=[],e.link.source=[],e.link.target=[],e.link.value=[],e.link.color=[],e.node.label=[],e.node.color=[]),o({link:e.link,node:e.node})}},{"../../lib":728,"../../lib/gup":725,"strongly-connected-components":528}],1025:[function(t,e,r){"use strict";e.exports={nodeTextOffsetHorizontal:4,nodeTextOffsetVertical:3,nodePadAcross:10,sankeyIterations:50,forceIterations:5,forceTicksPerFrame:10,duration:500,ease:"cubic-in-out",cn:{sankey:"sankey",sankeyLinks:"sankey-links",sankeyLink:"sankey-link",sankeyNodeSet:"sankey-node-set",sankeyNode:"sankey-node",nodeRect:"node-rect",nodeCapture:"node-capture",nodeCentered:"node-entered",nodeLabelGuide:"node-label-guide",nodeLabel:"node-label",nodeLabelTextPath:"node-label-text-path"}}},{}],1026:[function(t,e,r){"use strict";var n=t("../../lib"),i=t("./attributes"),a=t("../../components/color/attributes").defaults,o=t("../../components/color"),s=t("tinycolor2");e.exports=function(t,e,r,l){function u(r,a){return n.coerce(t,e,i,r,a)}u("node.label"),u("node.pad"),u("node.thickness"),u("node.line.color"),u("node.line.width");var c=function(t){return a[t%a.length]};u("node.color",e.node.label.map(function(t,e){return o.addOpacity(c(e),.8)})),u("link.label"),u("link.source"),u("link.target"),u("link.value"),u("link.line.color"),u("link.line.width"),u("link.color",e.link.value.map(function(){return s(l.paper_bgcolor).getLuminance()<.333?"rgba(255, 255, 255, 0.6)":"rgba(0, 0, 0, 0.2)"})),u("domain.x"),u("domain.y"),u("orientation"),u("valueformat"),u("valuesuffix"),u("arrangement"),n.coerceFont(u,"textfont",n.extendFlat({},l.font));var h=function(t,r){
return-1===e.link.source.indexOf(r)&&-1===e.link.target.indexOf(r)};e.node.label.some(h)&&n.warn("Some of the nodes are neither sources nor targets, they will not be displayed.")}},{"../../components/color":604,"../../components/color/attributes":603,"../../lib":728,"./attributes":1022,tinycolor2:534}],1027:[function(t,e,r){"use strict";var n={};n.attributes=t("./attributes"),n.supplyDefaults=t("./defaults"),n.calc=t("./calc"),n.plot=t("./plot"),n.moduleType="trace",n.name="sankey",n.basePlotModule=t("./base_plot"),n.categories=["noOpacity"],n.meta={},e.exports=n},{"./attributes":1022,"./base_plot":1023,"./calc":1024,"./defaults":1026,"./plot":1028}],1028:[function(t,e,r){"use strict";function n(t){return""!==t}function i(t,e){return t.filter(function(t){return t.key===e.traceId})}function a(t,e){p.select(t).select("path").style("fill-opacity",e),p.select(t).select("rect").style("fill-opacity",e)}function o(t){p.select(t).select("text.name").style("fill","black")}function s(t){return function(e){return-1!==t.node.sourceLinks.indexOf(e.link)||-1!==t.node.targetLinks.indexOf(e.link)}}function l(t){return function(e){return-1!==e.node.sourceLinks.indexOf(t.link)||-1!==e.node.targetLinks.indexOf(t.link)}}function u(t,e,r){e&&r&&i(r,e).selectAll("."+b.sankeyLink).filter(s(e)).call(h.bind(0,e,r,!1))}function c(t,e,r){e&&r&&i(r,e).selectAll("."+b.sankeyLink).filter(s(e)).call(f.bind(0,e,r,!1))}function h(t,e,r,n){var a=n.datum().link.label;n.style("fill-opacity",.4),a&&i(e,t).selectAll("."+b.sankeyLink).filter(function(t){return t.link.label===a}).style("fill-opacity",.4),r&&i(e,t).selectAll("."+b.sankeyNode).filter(l(t)).call(u)}function f(t,e,r,n){var a=n.datum().link.label;n.style("fill-opacity",function(t){return t.tinyColorAlpha}),a&&i(e,t).selectAll("."+b.sankeyLink).filter(function(t){return t.link.label===a}).style("fill-opacity",function(t){return t.tinyColorAlpha}),r&&i(e,t).selectAll(b.sankeyNode).filter(l(t)).call(c)}function d(t,e){var r=t.hoverlabel||{},n=y.nestedProperty(r,e).get();return!Array.isArray(n)&&n}var p=t("d3"),m=t("./render"),g=t("../../components/fx"),v=t("../../components/color"),y=t("../../lib"),b=t("./constants").cn;e.exports=function(t,e){var r=t._fullLayout,i=r._paper,s=r._size,l=function(e,r){var n=r.link;n.originalEvent=p.event,t._hoverdata=[n],g.click(t,{target:!0})},y=function(e,r,n){var i=r.link;i.originalEvent=p.event,p.select(e).call(h.bind(0,r,n,!0)),g.hover(t,i,"sankey")},x=function(e,i){var s=i.link.trace,l=t._fullLayout._paperdiv.node().getBoundingClientRect(),u=e.getBoundingClientRect(),c=u.left+u.width/2,h=u.top+u.height/2,f=g.loneHover({x:c-l.left,y:h-l.top,name:p.format(i.valueFormat)(i.link.value)+i.valueSuffix,text:[i.link.label||"",["Source:",i.link.source.label].join(" "),["Target:",i.link.target.label].join(" ")].filter(n).join("<br>"),color:d(s,"bgcolor")||v.addOpacity(i.tinyColorHue,1),borderColor:d(s,"bordercolor"),fontFamily:d(s,"font.family"),fontSize:d(s,"font.size"),fontColor:d(s,"font.color"),idealAlign:p.event.x<c?"right":"left"},{container:r._hoverlayer.node(),outerContainer:r._paper.node(),gd:t});a(f,.65),o(f)},_=function(e,n,i){p.select(e).call(f.bind(0,n,i,!0)),t.emit("plotly_unhover",{event:p.event,points:[n.link]}),g.loneUnhover(r._hoverlayer.node())},w=function(e,r,n){var i=r.node;i.originalEvent=p.event,t._hoverdata=[i],p.select(e).call(c,r,n),g.click(t,{target:!0})},M=function(e,r,n){var i=r.node;i.originalEvent=p.event,p.select(e).call(u,r,n),g.hover(t,i,"sankey")},k=function(e,i){var s=i.node.trace,l=p.select(e).select("."+b.nodeRect),u=t._fullLayout._paperdiv.node().getBoundingClientRect(),c=l.node().getBoundingClientRect(),h=c.left-2-u.left,f=c.right+2-u.left,m=c.top+c.height/4-u.top,v=g.loneHover({x0:h,x1:f,y:m,name:p.format(i.valueFormat)(i.node.value)+i.valueSuffix,text:[i.node.label,["Incoming flow count:",i.node.targetLinks.length].join(" "),["Outgoing flow count:",i.node.sourceLinks.length].join(" ")].filter(n).join("<br>"),color:d(s,"bgcolor")||i.tinyColorHue,borderColor:d(s,"bordercolor"),fontFamily:d(s,"font.family"),fontSize:d(s,"font.size"),fontColor:d(s,"font.color"),idealAlign:"left"},{container:r._hoverlayer.node(),outerContainer:r._paper.node(),gd:t});a(v,.85),o(v)},A=function(e,n,i){p.select(e).call(c,n,i),t.emit("plotly_unhover",{event:p.event,points:[n.node]}),g.loneUnhover(r._hoverlayer.node())};m(i,e,{width:s.w,height:s.h,margin:{t:s.t,r:s.r,b:s.b,l:s.l}},{linkEvents:{hover:y,follow:x,unhover:_,select:l},nodeEvents:{hover:M,follow:k,unhover:A,select:w}})}},{"../../components/color":604,"../../components/fx":645,"../../lib":728,"./constants":1025,"./render":1029,d3:122}],1029:[function(t,e,r){"use strict";function n(t){var e,r=[];for(e=0;e<t.length;e++)t[e].originalX=t[e].x,t[e].originalY=t[e].y,-1===r.indexOf(t[e].x)&&r.push(t[e].x);for(r.sort(function(t,e){return t-e}),e=0;e<t.length;e++)t[e].originalLayerIndex=r.indexOf(t[e].originalX),t[e].originalLayer=t[e].originalLayerIndex/(r.length-1)}function i(t){t.lastDraggedX=t.x,t.lastDraggedY=t.y}function a(t){return function(e){return e.node.originalX===t.node.originalX}}function o(t){for(var e=0;e<t.length;e++)t[e].y=t[e].y+t[e].dy/2}function s(t){for(var e=0;e<t.length;e++)t[e].y=t[e].y-t[e].dy/2}function l(t,e,r){for(var n,i=N(e).trace,a=i.domain,s=i.node,l=i.link,u=i.arrangement,c="h"===i.orientation,h=i.node.pad,f=i.node.thickness,d=i.node.line.color,p=i.node.line.width,m=i.link.line.color,g=i.link.line.width,v=i.valueformat,y=i.valuesuffix,b=i.textfont,x=t.width*(a.x[1]-a.x[0]),_=t.height*(a.y[1]-a.y[0]),w=s.label.map(function(t,e){return{pointNumber:e,label:t,color:R.isArray(s.color)?s.color[e]:s.color}}),M=l.value.map(function(t,e){return{pointNumber:e,label:l.label[e],color:R.isArray(l.color)?l.color[e]:l.color,source:l.source[e],target:l.target[e],value:t}}),k=P().size(c?[x,_]:[_,x]).nodeWidth(f).nodePadding(h).nodes(w).links(M).layout(L.sankeyIterations),A=k.nodes(),T=0;T<A.length;T++)n=A[T],n.width=x,n.height=_;return o(w),{key:r,trace:i,guid:Math.floor(1e12*(1+Math.random())),horizontal:c,width:x,height:_,nodePad:h,nodeLineColor:d,nodeLineWidth:p,linkLineColor:m,linkLineWidth:g,valueFormat:v,valueSuffix:y,textFont:b,translateX:a.x[0]*x+t.margin.l,translateY:t.height-a.y[1]*t.height+t.margin.t,dragParallel:c?_:x,dragPerpendicular:c?x:_,nodes:w,links:M,arrangement:u,sankey:k,forceLayouts:{},interactionState:{dragInProgress:!1,hovered:!1}}}function u(t,e,r){var n=I(r.color),i=r.source.label+"|"+r.target.label,a=t[i];t[i]=(a||0)+1;var o=i+"__"+t[i];return r.trace=e.trace,r.curveNumber=e.trace.index,{key:o,traceId:e.key,link:r,tinyColorHue:z.tinyRGB(n),tinyColorAlpha:n.getAlpha(),linkLineColor:e.linkLineColor,linkLineWidth:e.linkLineWidth,valueFormat:e.valueFormat,valueSuffix:e.valueSuffix,sankey:e.sankey,interactionState:e.interactionState}}function c(t,e,r){var n=I(r.color),i=L.nodePadAcross,a=e.nodePad/2,o=r.dx,s=Math.max(.5,r.dy),l=r.label,u=t[l];t[l]=(u||0)+1;var c=l+"__"+t[l];return r.trace=e.trace,r.curveNumber=e.trace.index,{key:c,traceId:e.key,node:r,nodePad:e.nodePad,nodeLineColor:e.nodeLineColor,nodeLineWidth:e.nodeLineWidth,textFont:e.textFont,size:e.horizontal?e.height:e.width,visibleWidth:Math.ceil(o),visibleHeight:s,zoneX:-i,zoneY:-a,zoneWidth:o+2*i,zoneHeight:s+2*a,labelY:e.horizontal?r.dy/2+1:r.dx/2+1,left:1===r.originalLayer,sizeAcross:e.width,forceLayouts:e.forceLayouts,horizontal:e.horizontal,darkBackground:n.getBrightness()<=128,tinyColorHue:z.tinyRGB(n),tinyColorAlpha:n.getAlpha(),valueFormat:e.valueFormat,valueSuffix:e.valueSuffix,sankey:e.sankey,arrangement:e.arrangement,uniqueNodeLabelPathId:[e.guid,e.key,c].join(" "),interactionState:e.interactionState}}function h(t){t.attr("transform",function(t){return"translate("+t.node.x.toFixed(3)+", "+(t.node.y-t.node.dy/2).toFixed(3)+")"})}function f(t){var e=t.sankey.nodes();s(e);var r=t.sankey.link()(t.link);return o(e),r}function d(t){t.call(h)}function p(t,e){t.call(d),e.attr("d",f)}function m(t){t.attr("width",function(t){return t.visibleWidth}).attr("height",function(t){return t.visibleHeight})}function g(t){return t.link.dy>1||t.linkLineWidth>0}function v(t){return"translate("+t.translateX+","+t.translateY+")"+(t.horizontal?"matrix(1 0 0 1 0 0)":"matrix(0 1 1 0 0 0)")}function y(t){return"translate("+(t.horizontal?0:t.labelY)+" "+(t.horizontal?t.labelY:0)+")"}function b(t){return C.svg.line()([[t.horizontal?t.left?-t.sizeAcross:t.visibleWidth+L.nodeTextOffsetHorizontal:L.nodeTextOffsetHorizontal,0],[t.horizontal?t.left?-L.nodeTextOffsetHorizontal:t.sizeAcross:t.visibleHeight-L.nodeTextOffsetHorizontal,0]])}function x(t){return t.horizontal?"matrix(1 0 0 1 0 0)":"matrix(0 1 1 0 0 0)"}function _(t){return t.horizontal?"scale(1 1)":"scale(-1 1)"}function w(t){return t.darkBackground&&!t.horizontal?"rgb(255,255,255)":"rgb(0,0,0)"}function M(t){return t.horizontal&&t.left?"100%":"0%"}function k(t,e,r){t.on(".basic",null).on("mouseover.basic",function(t){t.interactionState.dragInProgress||(r.hover(this,t,e),t.interactionState.hovered=[this,t])}).on("mousemove.basic",function(t){t.interactionState.dragInProgress||(r.follow(this,t),t.interactionState.hovered=[this,t])}).on("mouseout.basic",function(t){t.interactionState.dragInProgress||(r.unhover(this,t,e),t.interactionState.hovered=!1)}).on("click.basic",function(t){t.interactionState.hovered&&(r.unhover(this,t,e),t.interactionState.hovered=!1),t.interactionState.dragInProgress||r.select(this,t,e)})}function A(t,e,r){var n=C.behavior.drag().origin(function(t){return t.node}).on("dragstart",function(n){if("fixed"!==n.arrangement&&(R.raiseToTop(this),n.interactionState.dragInProgress=n.node,i(n.node),n.interactionState.hovered&&(r.nodeEvents.unhover.apply(0,n.interactionState.hovered),n.interactionState.hovered=!1),"snap"===n.arrangement)){var a=n.traceId+"|"+Math.floor(n.node.originalX);n.forceLayouts[a]?n.forceLayouts[a].alpha(1):T(t,a,n),S(t,e,n,a)}}).on("drag",function(r){if("fixed"!==r.arrangement){var n=C.event.x,o=C.event.y;"snap"===r.arrangement?(r.node.x=n,r.node.y=o):("freeform"===r.arrangement&&(r.node.x=n),r.node.y=Math.max(r.node.dy/2,Math.min(r.size-r.node.dy/2,o))),i(r.node),"snap"!==r.arrangement&&(r.sankey.relayout(),p(t.filter(a(r)),e))}}).on("dragend",function(t){t.interactionState.dragInProgress=!1});t.on(".drag",null).call(n)}function T(t,e,r){var n=r.sankey.nodes().filter(function(t){return t.originalX===r.node.originalX});r.forceLayouts[e]=O.forceSimulation(n).alphaDecay(0).force("collide",O.forceCollide().radius(function(t){return t.dy/2+r.nodePad/2}).strength(1).iterations(L.forceIterations)).force("constrain",E(t,e,n,r)).stop()}function S(t,e,r,n){window.requestAnimationFrame(function i(){for(var o=0;o<L.forceTicksPerFrame;o++)r.forceLayouts[n].tick();r.sankey.relayout(),p(t.filter(a(r)),e),r.forceLayouts[n].alpha()>0&&window.requestAnimationFrame(i)})}function E(t,e,r,n){return function(){for(var t=0,i=0;i<r.length;i++){var a=r[i];a===n.interactionState.dragInProgress?(a.x=a.lastDraggedX,a.y=a.lastDraggedY):(a.vx=(a.originalX-a.x)/L.forceTicksPerFrame,a.y=Math.min(n.size-a.dy/2,Math.max(a.dy/2,a.y))),t=Math.max(t,Math.abs(a.vx),Math.abs(a.vy))}!n.interactionState.dragInProgress&&t<.1&&n.forceLayouts[e].alpha()>0&&n.forceLayouts[e].alpha(0)}}var L=t("./constants"),C=t("d3"),I=t("tinycolor2"),z=t("../../components/color"),D=t("../../components/drawing"),P=t("@plotly/d3-sankey").sankey,O=t("d3-force"),R=t("../../lib"),F=t("../../lib/gup").keyFun,j=t("../../lib/gup").repeat,N=t("../../lib/gup").unwrap;e.exports=function(t,e,r,i){var a=t.selectAll("."+L.cn.sankey).data(e.filter(function(t){return N(t).trace.visible}).map(l.bind(null,r)),F);a.exit().remove(),a.enter().append("g").classed(L.cn.sankey,!0).style("box-sizing","content-box").style("position","absolute").style("left",0).style("shape-rendering","geometricPrecision").style("pointer-events","auto").style("box-sizing","content-box").attr("transform",v),a.transition().ease(L.ease).duration(L.duration).attr("transform",v);var o=a.selectAll("."+L.cn.sankeyLinks).data(j,F);o.enter().append("g").classed(L.cn.sankeyLinks,!0).style("fill","none");var s=o.selectAll("."+L.cn.sankeyLink).data(function(t){var e={};return t.sankey.links().filter(function(t){return t.value}).map(u.bind(null,e,t))},F);s.enter().append("path").classed(L.cn.sankeyLink,!0).attr("d",f).call(k,a,i.linkEvents),s.style("stroke",function(t){return g(t)?z.tinyRGB(I(t.linkLineColor)):t.tinyColorHue}).style("stroke-opacity",function(t){return g(t)?z.opacity(t.linkLineColor):t.tinyColorAlpha}).style("stroke-width",function(t){return g(t)?t.linkLineWidth:1}).style("fill",function(t){return t.tinyColorHue}).style("fill-opacity",function(t){return t.tinyColorAlpha}),s.transition().ease(L.ease).duration(L.duration).attr("d",f),s.exit().transition().ease(L.ease).duration(L.duration).style("opacity",0).remove();var d=a.selectAll("."+L.cn.sankeyNodeSet).data(j,F);d.enter().append("g").classed(L.cn.sankeyNodeSet,!0),d.style("cursor",function(t){switch(t.arrangement){case"fixed":return"default";case"perpendicular":return"ns-resize";default:return"move"}});var p=d.selectAll("."+L.cn.sankeyNode).data(function(t){var e=t.sankey.nodes(),r={};return n(e),e.filter(function(t){return t.value}).map(c.bind(null,r,t))},F);p.enter().append("g").classed(L.cn.sankeyNode,!0).call(h).call(k,a,i.nodeEvents),p.call(A,s,i),p.transition().ease(L.ease).duration(L.duration).call(h),p.exit().transition().ease(L.ease).duration(L.duration).style("opacity",0).remove();var T=p.selectAll("."+L.cn.nodeRect).data(j);T.enter().append("rect").classed(L.cn.nodeRect,!0).call(m),T.style("stroke-width",function(t){return t.nodeLineWidth}).style("stroke",function(t){return z.tinyRGB(I(t.nodeLineColor))}).style("stroke-opacity",function(t){return z.opacity(t.nodeLineColor)}).style("fill",function(t){return t.tinyColorHue}).style("fill-opacity",function(t){return t.tinyColorAlpha}),T.transition().ease(L.ease).duration(L.duration).call(m);var S=p.selectAll("."+L.cn.nodeCapture).data(j);S.enter().append("rect").classed(L.cn.nodeCapture,!0).style("fill-opacity",0),S.attr("x",function(t){return t.zoneX}).attr("y",function(t){return t.zoneY}).attr("width",function(t){return t.zoneWidth}).attr("height",function(t){return t.zoneHeight});var E=p.selectAll("."+L.cn.nodeCentered).data(j);E.enter().append("g").classed(L.cn.nodeCentered,!0).attr("transform",y),E.transition().ease(L.ease).duration(L.duration).attr("transform",y);var C=E.selectAll("."+L.cn.nodeLabelGuide).data(j);C.enter().append("path").classed(L.cn.nodeLabelGuide,!0).attr("id",function(t){return t.uniqueNodeLabelPathId}).attr("d",b).attr("transform",x),C.transition().ease(L.ease).duration(L.duration).attr("d",b).attr("transform",x);var P=E.selectAll("."+L.cn.nodeLabel).data(j);P.enter().append("text").classed(L.cn.nodeLabel,!0).attr("transform",_).style("user-select","none").style("cursor","default").style("fill","black"),P.style("text-shadow",function(t){return t.horizontal?"-1px 1px 1px #fff, 1px 1px 1px #fff, 1px -1px 1px #fff, -1px -1px 1px #fff":"none"}).each(function(t){D.font(P,t.textFont)}),P.transition().ease(L.ease).duration(L.duration).attr("transform",_);var O=P.selectAll("."+L.cn.nodeLabelTextPath).data(j);O.enter().append("textPath").classed(L.cn.nodeLabelTextPath,!0).attr("alignment-baseline","middle").attr("xlink:href",function(t){return"#"+t.uniqueNodeLabelPathId}).attr("startOffset",M).style("fill",w),O.text(function(t){return t.horizontal||t.node.dy>5?t.node.label:""}).attr("text-anchor",function(t){return t.horizontal&&t.left?"end":"start"}),O.transition().ease(L.ease).duration(L.duration).attr("startOffset",M).style("fill",w)}},{"../../components/color":604,"../../components/drawing":628,"../../lib":728,"../../lib/gup":725,"./constants":1025,"@plotly/d3-sankey":38,d3:122,"d3-force":118,tinycolor2:534}],1030:[function(t,e,r){"use strict";var n=t("../../lib");e.exports=function(t,e){for(var r=0;r<t.length;r++)t[r].i=r;n.mergeArray(e.text,t,"tx"),n.mergeArray(e.hovertext,t,"htx"),n.mergeArray(e.customdata,t,"data"),n.mergeArray(e.textposition,t,"tp"),e.textfont&&(n.mergeArray(e.textfont.size,t,"ts"),n.mergeArray(e.textfont.color,t,"tc"),n.mergeArray(e.textfont.family,t,"tf"));var i=e.marker;if(i){n.mergeArray(i.size,t,"ms"),n.mergeArray(i.opacity,t,"mo"),n.mergeArray(i.symbol,t,"mx"),n.mergeArray(i.color,t,"mc");var a=i.line;i.line&&(n.mergeArray(a.color,t,"mlc"),n.mergeArray(a.width,t,"mlw"));var o=i.gradient;o&&"none"!==o.type&&(n.mergeArray(o.type,t,"mgt"),n.mergeArray(o.color,t,"mgc"))}}},{"../../lib":728}],1031:[function(t,e,r){"use strict";var n=t("../../components/colorscale/color_attributes"),i=t("../../components/errorbars/attributes"),a=t("../../components/colorbar/attributes"),o=t("../../plots/font_attributes"),s=t("../../components/drawing/attributes").dash,l=t("../../components/drawing"),u=(t("./constants"),t("../../lib/extend").extendFlat);e.exports={x:{valType:"data_array",editType:"calc+clearAxisTypes"},x0:{valType:"any",dflt:0,editType:"calc+clearAxisTypes"},dx:{valType:"number",dflt:1,editType:"calc"},y:{valType:"data_array",editType:"calc+clearAxisTypes"},y0:{valType:"any",dflt:0,editType:"calc+clearAxisTypes"},dy:{valType:"number",dflt:1,editType:"calc"},text:{valType:"string",dflt:"",arrayOk:!0,editType:"calc"},hovertext:{valType:"string",dflt:"",arrayOk:!0,editType:"style"},mode:{valType:"flaglist",flags:["lines","markers","text"],extras:["none"],editType:"calc"},hoveron:{valType:"flaglist",flags:["points","fills"],editType:"style"},line:{color:{valType:"color",editType:"style"},width:{valType:"number",min:0,dflt:2,editType:"style"},shape:{valType:"enumerated",values:["linear","spline","hv","vh","hvh","vhv"],dflt:"linear",editType:"plot"},smoothing:{valType:"number",min:0,max:1.3,dflt:1,editType:"plot"},dash:u({},s,{editType:"style"}),simplify:{valType:"boolean",dflt:!0,editType:"plot"},editType:"plot"},connectgaps:{valType:"boolean",dflt:!1,editType:"calc"},cliponaxis:{valType:"boolean",dflt:!0,editType:"plot"},fill:{valType:"enumerated",values:["none","tozeroy","tozerox","tonexty","tonextx","toself","tonext"],dflt:"none",editType:"calc"},fillcolor:{valType:"color",editType:"style"},marker:u({symbol:{valType:"enumerated",values:l.symbolList,dflt:"circle",arrayOk:!0,editType:"style"},opacity:{valType:"number",min:0,max:1,arrayOk:!0,editType:"style"},size:{valType:"number",min:0,dflt:6,arrayOk:!0,editType:"calcIfAutorange"},maxdisplayed:{valType:"number",min:0,dflt:0,editType:"plot"},sizeref:{valType:"number",dflt:1,editType:"calc"},sizemin:{valType:"number",min:0,dflt:0,editType:"calc"},sizemode:{valType:"enumerated",values:["diameter","area"],dflt:"diameter",editType:"calc"},showscale:{valType:"boolean",dflt:!1,editType:"calc"},colorbar:a,line:u({width:{valType:"number",min:0,arrayOk:!0,editType:"style"},editType:"calc"},n("marker.line")),gradient:{type:{valType:"enumerated",values:["radial","horizontal","vertical","none"],arrayOk:!0,dflt:"none",editType:"calc"},color:{valType:"color",arrayOk:!0,editType:"calc"},editType:"calc"},editType:"calc"},n("marker")),textposition:{valType:"enumerated",values:["top left","top center","top right","middle left","middle center","middle right","bottom left","bottom center","bottom right"],dflt:"middle center",arrayOk:!0,editType:"calc"},textfont:o({editType:"calc",colorEditType:"style",arrayOk:!0}),r:{valType:"data_array",editType:"calc"},t:{valType:"data_array",editType:"calc"},error_y:i,error_x:i}},{"../../components/colorbar/attributes":605,"../../components/colorscale/color_attributes":611,"../../components/drawing":628,"../../components/drawing/attributes":627,"../../components/errorbars/attributes":630,"../../lib/extend":717,"../../plots/font_attributes":796,"./constants":1036}],1032:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),i=t("../../plots/cartesian/axes"),a=t("../../constants/numerical").BADNUM,o=t("./subtypes"),s=t("./colorscale_calc"),l=t("./arrays_to_calcdata");e.exports=function(t,e){var r,u,c,h=i.getFromId(t,e.xaxis||"x"),f=i.getFromId(t,e.yaxis||"y"),d=h.makeCalcdata(e,"x"),p=f.makeCalcdata(e,"y"),m=Math.min(d.length,p.length);h._minDtick=0,f._minDtick=0,d.length>m&&d.splice(m,d.length-m),p.length>m&&p.splice(m,p.length-m);var g={padded:!0},v={padded:!0};if(o.hasMarkers(e)){if(r=e.marker,u=r.size,Array.isArray(u)){var y={type:"linear"};i.setConvert(y),u=y.makeCalcdata(e.marker,"size"),u.length>m&&u.splice(m,u.length-m)}var b,x=1.6*(e.marker.sizeref||1);b="area"===e.marker.sizemode?function(t){return Math.max(Math.sqrt((t||0)/x),3)}:function(t){return Math.max((t||0)/x,3)},g.ppad=v.ppad=Array.isArray(u)?u.map(b):b(u)}s(e),!("tozerox"===e.fill||"tonextx"===e.fill&&t.firstscatter)||d[0]===d[m-1]&&p[0]===p[m-1]?e.error_y.visible||-1===["tonexty","tozeroy"].indexOf(e.fill)&&(o.hasMarkers(e)||o.hasText(e))||(g.padded=!1,g.ppad=0):g.tozero=!0,!("tozeroy"===e.fill||"tonexty"===e.fill&&t.firstscatter)||d[0]===d[m-1]&&p[0]===p[m-1]?-1!==["tonextx","tozerox"].indexOf(e.fill)&&(v.padded=!1):v.tozero=!0,i.expand(h,d,g),i.expand(f,p,v);var _=new Array(m);for(c=0;c<m;c++)_[c]=n(d[c])&&n(p[c])?{x:d[c],y:p[c]}:{x:a,y:a},e.ids&&(_[c].id=String(e.ids[c]));return l(_,e),t.firstscatter=!1,_}},{"../../constants/numerical":707,"../../plots/cartesian/axes":772,"./arrays_to_calcdata":1030,"./colorscale_calc":1035,"./subtypes":1052,"fast-isnumeric":131}],1033:[function(t,e,r){"use strict";e.exports=function(t){for(var e=0;e<t.length;e++){var r=t[e];if("scatter"===r.type){var n=r.fill;if("none"!==n&&"toself"!==n&&(r.opacity=void 0,"tonexty"===n||"tonextx"===n))for(var i=e-1;i>=0;i--){var a=t[i];if("scatter"===a.type&&a.xaxis===r.xaxis&&a.yaxis===r.yaxis){a.opacity=void 0;break}}}}}},{}],1034:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),i=t("../../lib"),a=t("../../plots/plots"),o=t("../../components/colorscale"),s=t("../../components/colorbar/draw");e.exports=function(t,e){var r=e[0].trace,l=r.marker,u="cb"+r.uid;if(t._fullLayout._infolayer.selectAll("."+u).remove(),void 0===l||!l.showscale)return void a.autoMargin(t,u);var c=l.color,h=l.cmin,f=l.cmax;n(h)||(h=i.aggNums(Math.min,null,c)),n(f)||(f=i.aggNums(Math.max,null,c));var d=e[0].t.cb=s(t,u),p=o.makeColorScaleFunc(o.extractScale(l.colorscale,h,f),{noNumericCheck:!0});d.fillcolor(p).filllevels({start:h,end:f,size:(f-h)/254}).options(l.colorbar)()}},{"../../components/colorbar/draw":607,"../../components/colorscale":618,"../../lib":728,"../../plots/plots":831,"fast-isnumeric":131}],1035:[function(t,e,r){"use strict";var n=t("../../components/colorscale/has_colorscale"),i=t("../../components/colorscale/calc"),a=t("./subtypes");e.exports=function(t){a.hasLines(t)&&n(t,"line")&&i(t,t.line.color,"line","c"),a.hasMarkers(t)&&(n(t,"marker")&&i(t,t.marker.color,"marker","c"),n(t,"marker.line")&&i(t,t.marker.line.color,"marker.line","c"))}},{"../../components/colorscale/calc":610,"../../components/colorscale/has_colorscale":617,"./subtypes":1052}],1036:[function(t,e,r){"use strict";e.exports={PTS_LINESONLY:20,minTolerance:.2,toleranceGrowth:10,maxScreensAway:20}},{}],1037:[function(t,e,r){"use strict";var n=t("../../lib"),i=t("./attributes"),a=t("./constants"),o=t("./subtypes"),s=t("./xy_defaults"),l=t("./marker_defaults"),u=t("./line_defaults"),c=t("./line_shape_defaults"),h=t("./text_defaults"),f=t("./fillcolor_defaults"),d=t("../../components/errorbars/defaults");e.exports=function(t,e,r,p){function m(r,a){return n.coerce(t,e,i,r,a)}var g=s(t,e,p,m),v=g<a.PTS_LINESONLY?"lines+markers":"lines";if(!g)return void(e.visible=!1);m("text"),m("hovertext"),m("mode",v),o.hasLines(e)&&(u(t,e,r,p,m),c(t,e,m),m("connectgaps"),m("line.simplify")),o.hasMarkers(e)&&l(t,e,r,p,m,{gradient:!0}),o.hasText(e)&&h(t,e,p,m);var y=[];(o.hasMarkers(e)||o.hasText(e))&&(m("marker.maxdisplayed"),y.push("points")),m("fill"),"none"!==e.fill&&(f(t,e,r,m),o.hasLines(e)||c(t,e,m)),"tonext"!==e.fill&&"toself"!==e.fill||y.push("fills"),m("hoveron",y.join("+")||"points"),d(t,e,r,{axis:"y"}),d(t,e,r,{axis:"x",inherit:"y"}),m("cliponaxis")}},{"../../components/errorbars/defaults":633,"../../lib":728,"./attributes":1031,"./constants":1036,"./fillcolor_defaults":1039,"./line_defaults":1043,"./line_shape_defaults":1045,"./marker_defaults":1048,"./subtypes":1052,"./text_defaults":1053,"./xy_defaults":1054}],1038:[function(t,e,r){"use strict";function n(t){return t||0===t}var i=t("../../lib");e.exports=function(t,e,r){var a=Array.isArray(r)?function(t){r.push(t)}:function(t){r.text=t},o=i.extractOption(t,e,"htx","hovertext");if(n(o))return a(o);var s=i.extractOption(t,e,"tx","text");return n(s)?a(s):void 0}},{"../../lib":728}],1039:[function(t,e,r){"use strict";var n=t("../../components/color");e.exports=function(t,e,r,i){var a=!1;if(e.marker){var o=e.marker.color,s=(e.marker.line||{}).color;o&&!Array.isArray(o)?a=o:s&&!Array.isArray(s)&&(a=s)}i("fillcolor",n.addOpacity((e.line||{}).color||a||r,.5))}},{"../../components/color":604}],1040:[function(t,e,r){"use strict";var n=t("../../components/color"),i=t("./subtypes");e.exports=function(t,e){var r,a;if("lines"===t.mode)return r=t.line.color,r&&n.opacity(r)?r:t.fillcolor;if("none"===t.mode)return t.fill?t.fillcolor:"";var o=e.mcc||(t.marker||{}).color,s=e.mlcc||((t.marker||{}).line||{}).color;return a=o&&n.opacity(o)?o:s&&n.opacity(s)&&(e.mlw||((t.marker||{}).line||{}).width)?s:"",a?n.opacity(a)<.3?n.addOpacity(a,.3):a:(r=(t.line||{}).color,r&&n.opacity(r)&&i.hasLines(t)&&t.line.width?r:t.fillcolor)}},{"../../components/color":604,"./subtypes":1052}],1041:[function(t,e,r){"use strict";var n=t("../../lib"),i=t("../../components/fx"),a=t("../../components/errorbars"),o=t("./get_trace_color"),s=t("../../components/color"),l=t("./fill_hover_text"),u=i.constants.MAXDIST;e.exports=function(t,e,r,c){var h=t.cd,f=h[0].trace,d=t.xa,p=t.ya,m=d.c2p(e),g=p.c2p(r),v=[m,g],y=f.hoveron||"";if(-1!==y.indexOf("points")){var b=function(t){var e=Math.max(3,t.mrc||0);return Math.max(Math.abs(d.c2p(t.x)-m)-e,1-3/e)},x=function(t){var e=Math.max(3,t.mrc||0);return Math.max(Math.abs(p.c2p(t.y)-g)-e,1-3/e)},_=function(t){var e=Math.max(3,t.mrc||0),r=d.c2p(t.x)-m,n=p.c2p(t.y)-g;return Math.max(Math.sqrt(r*r+n*n)-e,1-3/e)},w=i.getDistanceFunction(c,b,x,_);if(i.getClosest(h,w,t),!1!==t.index){var M=h[t.index],k=d.c2p(M.x,!0),A=p.c2p(M.y,!0),T=M.mrc||1;return n.extendFlat(t,{color:o(f,M),x0:k-T,x1:k+T,xLabelVal:M.x,y0:A-T,y1:A+T,yLabelVal:M.y}),l(M,f,t),a.hoverInfo(M,f,t),[t]}}if(-1!==y.indexOf("fills")&&f._polygons){var S,E,L,C,I,z,D,P,O,R=f._polygons,F=[],j=!1,N=1/0,B=-1/0,U=1/0,V=-1/0;for(S=0;S<R.length;S++)L=R[S],L.contains(v)&&(j=!j,F.push(L),U=Math.min(U,L.ymin),V=Math.max(V,L.ymax));if(j){U=Math.max(U,0),V=Math.min(V,p._length);var H=(U+V)/2;for(S=0;S<F.length;S++)for(C=F[S].pts,E=1;E<C.length;E++)P=C[E-1][1],O=C[E][1],P>H!=O>=H&&(z=C[E-1][0],D=C[E][0],I=z+(D-z)*(H-P)/(O-P),N=Math.min(N,I),B=Math.max(B,I));N=Math.max(N,0),B=Math.min(B,d._length);var q=s.defaultLine;return s.opacity(f.fillcolor)?q=f.fillcolor:s.opacity((f.line||{}).color)&&(q=f.line.color),n.extendFlat(t,{distance:u+10,x0:N,x1:B,y0:H,y1:H,color:q}),delete t.index,f.text&&!Array.isArray(f.text)?t.text=String(f.text):t.text=f.name,[t]}}}},{"../../components/color":604,"../../components/errorbars":634,"../../components/fx":645,"../../lib":728,"./fill_hover_text":1038,"./get_trace_color":1040}],1042:[function(t,e,r){"use strict";var n={},i=t("./subtypes");n.hasLines=i.hasLines,n.hasMarkers=i.hasMarkers,n.hasText=i.hasText,n.isBubble=i.isBubble,n.attributes=t("./attributes"),n.supplyDefaults=t("./defaults"),n.cleanData=t("./clean_data"),n.calc=t("./calc"),n.arraysToCalcdata=t("./arrays_to_calcdata"),n.plot=t("./plot"),n.colorbar=t("./colorbar"),n.style=t("./style"),n.hoverPoints=t("./hover"),n.selectPoints=t("./select"),n.animatable=!0,n.moduleType="trace",n.name="scatter",n.basePlotModule=t("../../plots/cartesian"),n.categories=["cartesian","symbols","markerColorscale","errorBarsOK","showLegend","scatter-like"],n.meta={},e.exports=n},{"../../plots/cartesian":782,"./arrays_to_calcdata":1030,"./attributes":1031,"./calc":1032,"./clean_data":1033,"./colorbar":1034,"./defaults":1037,"./hover":1041,"./plot":1049,"./select":1050,"./style":1051,"./subtypes":1052}],1043:[function(t,e,r){"use strict";var n=t("../../components/colorscale/has_colorscale"),i=t("../../components/colorscale/defaults");e.exports=function(t,e,r,a,o,s){var l=(t.marker||{}).color;if(o("line.color",r),n(t,"line"))i(t,e,a,o,{prefix:"line.",cLetter:"c"});else{o("line.color",!Array.isArray(l)&&l||r)}o("line.width"),(s||{}).noDash||o("line.dash")}},{"../../components/colorscale/defaults":613,"../../components/colorscale/has_colorscale":617}],1044:[function(t,e,r){"use strict";var n=t("../../constants/numerical").BADNUM,i=t("../../lib"),a=i.segmentsIntersect,o=i.constrain,s=t("./constants");e.exports=function(t,e){function r(e){var r=O.c2p(t[e].x),i=R.c2p(t[e].y);return r!==n&&i!==n&&[r,i]}function l(t){var e=t[0]/O._length,r=t[1]/R._length;return(1+s.toleranceGrowth*Math.max(0,-e,e-1,-r,r-1))*N}function u(t,e){var r=t[0]-e[0],n=t[1]-e[1];return Math.sqrt(r*r+n*n)}function c(t,e){for(var r=[],n=0,i=0;i<4;i++){var o=it[i],s=a(t[0],t[1],e[0],e[1],o[0],o[1],o[2],o[3]);s&&(!n||Math.abs(s.x-r[0][0])>1||Math.abs(s.y-r[0][1])>1)&&(s=[s.x,s.y],n&&u(s,t)<u(r[0],t)?r.unshift(s):r.push(s),n++)}return r}function h(t){if(t[0]<tt||t[0]>et||t[1]<rt||t[1]>nt)return[o(t[0],tt,et),o(t[1],rt,nt)]}function f(t,e){return t[0]===e[0]&&(t[0]===tt||t[0]===et)||(t[1]===e[1]&&(t[1]===rt||t[1]===nt)||void 0)}function d(t,e){var r=[],n=h(t),i=h(e);return n&&i&&f(n,i)?r:(n&&r.push(n),i&&r.push(i),r)}function p(t,e,r){return function(n,a){var o=h(n),s=h(a),l=[];if(o&&s&&f(o,s))return l;o&&l.push(o),s&&l.push(s);var u=2*i.constrain((n[t]+a[t])/2,e,r)-((o||n)[t]+(s||a)[t]);if(u){var c;c=o&&s?u>0==o[t]>s[t]?o:s:o||s,c[t]+=u}return l}}function m(t,e){var r=e[0]-t[0],n=(e[1]-t[1])/r;return(t[1]*e[0]-e[1]*t[0])/r>0?[n>0?tt:et,nt]:[n>0?et:tt,rt]}function g(t){var e=t[0],r=t[1],n=e===q[G-1][0],i=r===q[G-1][1];if(!n||!i)if(G>1){var a=e===q[G-2][0],o=r===q[G-2][1];n&&(e===tt||e===et)&&a?o?G--:q[G-1]=t:i&&(r===rt||r===nt)&&o?a?G--:q[G-1]=t:q[G++]=t}else q[G++]=t}function v(t){q[G-1][0]!==t[0]&&q[G-1][1]!==t[1]&&g([X,Z]),g(t),J=null,X=Z=0}function y(t){if(Y=t[0]<tt?tt:t[0]>et?et:0,W=t[1]<rt?rt:t[1]>nt?nt:0,Y||W){if(G)if(J){var e=Q(J,t);e.length>1&&(v(e[0]),q[G++]=e[1])}else K=Q(q[G-1],t)[0],q[G++]=K;else q[G++]=[Y||t[0],W||t[1]];var r=q[G-1];Y&&W&&(r[0]!==Y||r[1]!==W)?(J&&(X!==Y&&Z!==W?g(X&&Z?m(J,t):[X||Y,Z||W]):X&&Z&&g([X,Z])),g([Y,W])):X-Y&&Z-W&&g([Y||X,W||Z]),J=t,X=Y,Z=W}else J&&v(Q(J,t)[0]),q[G++]=t}var b,x,_,w,M,k,A,T,S,E,L,C,I,z,D,P,O=e.xaxis,R=e.yaxis,F=e.simplify,j=e.connectGaps,N=e.baseTolerance,B=e.shape,U="linear"===B,V=[],H=s.minTolerance,q=new Array(t.length),G=0;F||(N=H=-1);var Y,W,X,Z,J,K,Q,$=s.maxScreensAway,tt=-O._length*$,et=O._length*(1+$),rt=-R._length*$,nt=R._length*(1+$),it=[[tt,rt,et,rt],[et,rt,et,nt],[et,nt,tt,nt],[tt,nt,tt,rt]];for("linear"===B||"spline"===B?Q=c:"hv"===B||"vh"===B?Q=d:"hvh"===B?Q=p(0,tt,et):"vhv"===B&&(Q=p(1,rt,nt)),b=0;b<t.length;b++)if(x=r(b)){for(G=0,J=null,y(x),b++;b<t.length;b++){if(!(w=r(b))){if(j)continue;break}if(U){if(!((E=u(w,x))<l(w)*H)){for(T=[(w[0]-x[0])/E,(w[1]-x[1])/E],M=x,L=E,C=z=D=0,A=!1,_=w,b++;b<t.length;b++){if(!(k=r(b))){if(j)continue;break}if(S=[k[0]-x[0],k[1]-x[1]],P=S[0]*T[1]-S[1]*T[0],z=Math.min(z,P),(D=Math.max(D,P))-z>l(k))break;_=k,I=S[0]*T[0]+S[1]*T[1],I>L?(L=I,w=k,A=!1):I<C&&(C=I,M=k,A=!0)}if(A?(y(w),_!==M&&y(M)):(M!==x&&y(M),_!==w&&y(w)),y(_),b>=t.length||!k)break;y(k),x=k}}else y(w)}J&&g([X||J[0],Z||J[1]]),V.push(q.slice(0,G))}return V}},{"../../constants/numerical":707,"../../lib":728,"./constants":1036}],1045:[function(t,e,r){"use strict";e.exports=function(t,e,r){"spline"===r("line.shape")&&r("line.smoothing")}},{}],1046:[function(t,e,r){"use strict";e.exports=function(t,e,r){for(var n,i,a=null,o=0;o<r.length;++o)n=r[o],i=n[0].trace,!0===i.visible?(i._nexttrace=null,
-1!==["tonextx","tonexty","tonext"].indexOf(i.fill)&&(i._prevtrace=a,a&&(a._nexttrace=i)),a=i):i._prevtrace=i._nexttrace=null}},{}],1047:[function(t,e,r){"use strict";var n=t("fast-isnumeric");e.exports=function(t){var e=t.marker,r=e.sizeref||1,i=e.sizemin||0,a="area"===e.sizemode?function(t){return Math.sqrt(t/r)}:function(t){return t/r};return function(t){var e=a(t/2);return n(e)&&e>0?Math.max(e,i):0}}},{"fast-isnumeric":131}],1048:[function(t,e,r){"use strict";var n=t("../../components/color"),i=t("../../components/colorscale/has_colorscale"),a=t("../../components/colorscale/defaults"),o=t("./subtypes");e.exports=function(t,e,r,s,l,u){var c,h=o.isBubble(t),f=(t.line||{}).color;if(u=u||{},f&&(r=f),l("marker.symbol"),l("marker.opacity",h?.7:1),l("marker.size"),l("marker.color",r),i(t,"marker")&&a(t,e,s,l,{prefix:"marker.",cLetter:"c"}),u.noLine||(c=f&&!Array.isArray(f)&&e.marker.color!==f?f:h?n.background:n.defaultLine,l("marker.line.color",c),i(t,"marker.line")&&a(t,e,s,l,{prefix:"marker.line.",cLetter:"c"}),l("marker.line.width",h?1:0)),h&&(l("marker.sizeref"),l("marker.sizemin"),l("marker.sizemode")),u.gradient){"none"!==l("marker.gradient.type")&&l("marker.gradient.color")}}},{"../../components/color":604,"../../components/colorscale/defaults":613,"../../components/colorscale/has_colorscale":617,"./subtypes":1052}],1049:[function(t,e,r){"use strict";function n(t,e,r){var n;e.selectAll("g.trace").each(function(t){var e=o.select(this);if(n=t[0].trace,n._nexttrace){if(n._nextFill=e.select(".js-fill.js-tonext"),!n._nextFill.size()){var i=":first-child";e.select(".js-fill.js-tozero").size()&&(i+=" + *"),n._nextFill=e.insert("path",i).attr("class","js-fill js-tonext")}}else e.selectAll(".js-fill.js-tonext").remove(),n._nextFill=null;n.fill&&("tozero"===n.fill.substr(0,6)||"toself"===n.fill||"to"===n.fill.substr(0,2)&&!n._prevtrace)?(n._ownFill=e.select(".js-fill.js-tozero"),n._ownFill.size()||(n._ownFill=e.insert("path",":first-child").attr("class","js-fill js-tozero"))):(e.selectAll(".js-fill.js-tozero").remove(),n._ownFill=null),e.selectAll(".js-fill").call(l.setClipUrl,r.layerClipId)})}function i(t,e,r,n,i,f,p){function m(t){return M?t.transition():t}function g(t){return t.filter(function(t){return t.vis})}function v(t){return t.id}function y(t){if(t.ids)return v}function b(){return!1}function x(e){var n,i,a,u=e[0].trace,h=o.select(this),f=c.hasMarkers(u),d=c.hasText(u),p=y(u),v=b,x=b;f&&(v=u.marker.maxdisplayed||u._needsCull?g:s.identity),d&&(x=u.marker.maxdisplayed||u._needsCull?g:s.identity),i=h.selectAll("path.point"),n=i.data(v,p);var _=n.enter().append("path").classed("point",!0);M&&_.call(l.pointStyle,u,t).call(l.translatePoints,k,A).style("opacity",0).transition().style("opacity",1);var w=f&&l.tryColorscale(u.marker,""),T=f&&l.tryColorscale(u.marker,"line");n.order(),n.each(function(e){var n=o.select(this),i=m(n);a=l.translatePoint(e,i,k,A),a?(l.singlePointStyle(e,i,u,w,T,t),r.layerClipId&&l.hideOutsideRangePoint(e,i,k,A),u.customdata&&n.classed("plotly-customdata",null!==e.data&&void 0!==e.data)):i.remove()}),M?n.exit().transition().style("opacity",0).remove():n.exit().remove(),i=h.selectAll("g"),n=i.data(x,p),n.enter().append("g").classed("textpoint",!0).append("text"),n.order(),n.each(function(t){var e=o.select(this),n=m(e.select("text"));a=l.translatePoint(t,n,k,A),a?r.layerClipId&&l.hideOutsideRangePoint(t,e,k,A):e.remove()}),n.selectAll("text").call(l.textPointStyle,u,t).each(function(t){var e=k.c2p(t.x),r=A.c2p(t.y);o.select(this).selectAll("tspan.line").each(function(){m(o.select(this)).attr({x:e,y:r})})}),n.exit().remove()}var _,w;a(t,e,r,n,i);var M=!!p&&p.duration>0,k=r.xaxis,A=r.yaxis,T=n[0].trace,S=T.line,E=o.select(f);if(E.call(u.plot,r,p),!0===T.visible){m(E).style("opacity",T.opacity);var L,C,I=T.fill.charAt(T.fill.length-1);"x"!==I&&"y"!==I&&(I=""),n[0].node3=E;var z="",D=[],P=T._prevtrace;P&&(z=P._prevRevpath||"",C=P._nextFill,D=P._polygons);var O,R,F,j,N,B,U,V,H,q="",G="",Y=[],W=s.noop;if(L=T._ownFill,c.hasLines(T)||"none"!==T.fill){for(C&&C.datum(n),-1!==["hv","vh","hvh","vhv"].indexOf(S.shape)?(F=l.steps(S.shape),j=l.steps(S.shape.split("").reverse().join(""))):F=j="spline"===S.shape?function(t){var e=t[t.length-1];return t.length>1&&t[0][0]===e[0]&&t[0][1]===e[1]?l.smoothclosed(t.slice(1),S.smoothing):l.smoothopen(t,S.smoothing)}:function(t){return"M"+t.join("L")},N=function(t){return j(t.reverse())},Y=h(n,{xaxis:k,yaxis:A,connectGaps:T.connectgaps,baseTolerance:Math.max(S.width||1,3)/4,shape:S.shape,simplify:S.simplify}),H=T._polygons=new Array(Y.length),w=0;w<Y.length;w++)T._polygons[w]=d(Y[w]);Y.length&&(B=Y[0][0],U=Y[Y.length-1],V=U[U.length-1]),W=function(t){return function(e){if(O=F(e),R=N(e),q?I?(q+="L"+O.substr(1),G=R+"L"+G.substr(1)):(q+="Z"+O,G=R+"Z"+G):(q=O,G=R),c.hasLines(T)&&e.length>1){var r=o.select(this);if(r.datum(n),t)m(r.style("opacity",0).attr("d",O).call(l.lineGroupStyle)).style("opacity",1);else{var i=m(r);i.attr("d",O),l.singleLineStyle(n,i)}}}}}var X=E.selectAll(".js-line").data(Y);m(X.exit()).style("opacity",0).remove(),X.each(W(!1)),X.enter().append("path").classed("js-line",!0).style("vector-effect","non-scaling-stroke").call(l.lineGroupStyle).each(W(!0)),l.setClipUrl(X,r.layerClipId),Y.length&&(L?B&&V&&(I?("y"===I?B[1]=V[1]=A.c2p(0,!0):"x"===I&&(B[0]=V[0]=k.c2p(0,!0)),m(L).attr("d","M"+V+"L"+B+"L"+q.substr(1)).call(l.singleFillStyle)):m(L).attr("d",q+"Z").call(l.singleFillStyle)):"tonext"===T.fill.substr(0,6)&&q&&z&&("tonext"===T.fill?m(C).attr("d",q+"Z"+z+"Z").call(l.singleFillStyle):m(C).attr("d",q+"L"+z.substr(1)+"Z").call(l.singleFillStyle),T._polygons=T._polygons.concat(D)),T._prevRevpath=G,T._prevPolygons=H);var Z=E.selectAll(".points");_=Z.data([n]),Z.each(x),_.enter().append("g").classed("points",!0).each(x),_.exit().remove(),_.each(function(t){var e=!1===t[0].trace.cliponaxis;l.setClipUrl(o.select(this),e?null:r.layerClipId)})}}function a(t,e,r,n,i){var a=r.xaxis,l=r.yaxis,u=o.extent(s.simpleMap(a.range,a.r2c)),h=o.extent(s.simpleMap(l.range,l.r2c)),f=n[0].trace;if(c.hasMarkers(f)){var d=f.marker.maxdisplayed;if(0!==d){var p=n.filter(function(t){return t.x>=u[0]&&t.x<=u[1]&&t.y>=h[0]&&t.y<=h[1]}),m=Math.ceil(p.length/d),g=0;i.forEach(function(t,r){var n=t[0].trace;c.hasMarkers(n)&&n.marker.maxdisplayed>0&&r<e&&g++});var v=Math.round(g*m/3+Math.floor(g/3)*m/7.1);n.forEach(function(t){delete t.vis}),p.forEach(function(t,e){0===Math.round((e+v)%m)&&(t.vis=!0)})}}}var o=t("d3"),s=t("../../lib"),l=t("../../components/drawing"),u=t("../../components/errorbars"),c=t("./subtypes"),h=t("./line_points"),f=t("./link_traces"),d=t("../../lib/polygon").tester;e.exports=function(t,e,r,a,s){var l,u,c,h,d,p=e.plot.select("g.scatterlayer"),m=!a,g=!!a&&a.duration>0;for(c=p.selectAll("g.trace"),h=c.data(r,function(t){return t[0].trace.uid}),h.enter().append("g").attr("class",function(t){return"trace scatter trace"+t[0].trace.uid}).style("stroke-miterlimit",2),f(t,e,r),n(t,p,e),l=0,u={};l<r.length;l++)u[r[l][0].trace.uid]=l;if(p.selectAll("g.trace").sort(function(t,e){return u[t[0].trace.uid]>u[e[0].trace.uid]?1:-1}),g){s&&(d=s());o.transition().duration(a.duration).ease(a.easing).each("end",function(){d&&d()}).each("interrupt",function(){d&&d()}).each(function(){p.selectAll("g.trace").each(function(n,o){i(t,o,e,n,r,this,a)})})}else p.selectAll("g.trace").each(function(n,o){i(t,o,e,n,r,this,a)});m&&h.exit().remove(),p.selectAll("path:not([d])").remove()}},{"../../components/drawing":628,"../../components/errorbars":634,"../../lib":728,"../../lib/polygon":739,"./line_points":1044,"./link_traces":1046,"./subtypes":1052,d3:122}],1050:[function(t,e,r){"use strict";var n=t("./subtypes"),i=t("../../constants/interactions").DESELECTDIM;e.exports=function(t,e){var r,a,o,s,l=t.cd,u=t.xaxis,c=t.yaxis,h=[],f=l[0].trace,d=f.marker;if(!n.hasMarkers(f)&&!n.hasText(f))return[];var p=Array.isArray(d.opacity)?1:d.opacity;if(!1===e)for(r=0;r<l.length;r++)l[r].dim=0;else for(r=0;r<l.length;r++)a=l[r],o=u.c2p(a.x),s=c.c2p(a.y),e.contains([o,s])?(h.push({pointNumber:r,x:a.x,y:a.y}),a.dim=0):a.dim=1;return l[0].node3.selectAll("path.point").style("opacity",function(t){return((t.mo+1||p+1)-1)*(t.dim?i:1)}),l[0].node3.selectAll("text").style("opacity",function(t){return t.dim?i:1}),h}},{"../../constants/interactions":706,"./subtypes":1052}],1051:[function(t,e,r){"use strict";var n=t("d3"),i=t("../../components/drawing"),a=t("../../components/errorbars");e.exports=function(t){var e=n.select(t).selectAll("g.trace.scatter");e.style("opacity",function(t){return t[0].trace.opacity}),e.selectAll("g.points").each(function(e){var r=n.select(this),a=r.selectAll("path.point"),o=e.trace||e[0].trace;a.call(i.pointStyle,o,t),r.selectAll("text").call(i.textPointStyle,o,t)}),e.selectAll("g.trace path.js-line").call(i.lineGroupStyle),e.selectAll("g.trace path.js-fill").call(i.fillGroupStyle),e.call(a.style)}},{"../../components/drawing":628,"../../components/errorbars":634,d3:122}],1052:[function(t,e,r){"use strict";var n=t("../../lib");e.exports={hasLines:function(t){return t.visible&&t.mode&&-1!==t.mode.indexOf("lines")},hasMarkers:function(t){return t.visible&&t.mode&&-1!==t.mode.indexOf("markers")},hasText:function(t){return t.visible&&t.mode&&-1!==t.mode.indexOf("text")},isBubble:function(t){return n.isPlainObject(t.marker)&&Array.isArray(t.marker.size)}}},{"../../lib":728}],1053:[function(t,e,r){"use strict";var n=t("../../lib");e.exports=function(t,e,r,i){i("textposition"),n.coerceFont(i,"textfont",r.font)}},{"../../lib":728}],1054:[function(t,e,r){"use strict";var n=t("../../registry");e.exports=function(t,e,r,i){var a,o=i("x"),s=i("y");if(n.getComponentMethod("calendars","handleTraceDefaults")(t,e,["x","y"],r),o)s?(a=Math.min(o.length,s.length),a<o.length&&(e.x=o.slice(0,a)),a<s.length&&(e.y=s.slice(0,a))):(a=o.length,i("y0"),i("dy"));else{if(!s)return 0;a=e.y.length,i("x0"),i("dx")}return a}},{"../../registry":846}],1055:[function(t,e,r){"use strict";function n(t){return{show:{valType:"boolean",dflt:!1},opacity:{valType:"number",min:0,max:1,dflt:1},scale:{valType:"number",min:0,max:10,dflt:2/3}}}var i=t("../scatter/attributes"),a=t("../../components/colorscale/color_attributes"),o=t("../../components/errorbars/attributes"),s=t("../../constants/gl3d_dashes"),l=t("../../constants/gl3d_markers"),u=t("../../lib/extend").extendFlat,c=t("../../plot_api/edit_types").overrideAll,h=i.line,f=i.marker,d=f.line,p=e.exports=c({x:i.x,y:i.y,z:{valType:"data_array"},text:u({},i.text,{}),hovertext:u({},i.hovertext,{}),mode:u({},i.mode,{dflt:"lines+markers"}),surfaceaxis:{valType:"enumerated",values:[-1,0,1,2],dflt:-1},surfacecolor:{valType:"color"},projection:{x:n("x"),y:n("y"),z:n("z")},connectgaps:i.connectgaps,line:u({width:h.width,dash:{valType:"enumerated",values:Object.keys(s),dflt:"solid"},showscale:{valType:"boolean",dflt:!1}},a("line")),marker:u({symbol:{valType:"enumerated",values:Object.keys(l),dflt:"circle",arrayOk:!0},size:u({},f.size,{dflt:8}),sizeref:f.sizeref,sizemin:f.sizemin,sizemode:f.sizemode,opacity:u({},f.opacity,{arrayOk:!1}),showscale:f.showscale,colorbar:f.colorbar,line:u({width:u({},d.width,{arrayOk:!1})},a("marker.line"))},a("marker")),textposition:u({},i.textposition,{dflt:"top center"}),textfont:i.textfont,error_x:o,error_y:o,error_z:o},"calc","nested");p.x.editType=p.y.editType=p.z.editType="calc+clearAxisTypes"},{"../../components/colorscale/color_attributes":611,"../../components/errorbars/attributes":630,"../../constants/gl3d_dashes":704,"../../constants/gl3d_markers":705,"../../lib/extend":717,"../../plot_api/edit_types":756,"../scatter/attributes":1031}],1056:[function(t,e,r){"use strict";var n=t("../scatter/arrays_to_calcdata"),i=t("../scatter/colorscale_calc");e.exports=function(t,e){var r=[{x:!1,y:!1,trace:e,t:{}}];return n(r,e),i(e),r}},{"../scatter/arrays_to_calcdata":1030,"../scatter/colorscale_calc":1035}],1057:[function(t,e,r){"use strict";function n(t,e,r){if(!e||!e.visible)return null;for(var n=o(e),i=new Array(t.length),a=0;a<t.length;a++){var s=n(+t[a],a);i[a]=[-s[0]*r,s[1]*r]}return i}function i(t){for(var e=0;e<t.length;e++)if(t[e])return t[e].length;return 0}function a(t,e){var r=[n(t.x,t.error_x,e[0]),n(t.y,t.error_y,e[1]),n(t.z,t.error_z,e[2])],a=i(r);if(0===a)return null;for(var o=new Array(a),s=0;s<a;s++){for(var l=[[0,0,0],[0,0,0]],u=0;u<3;u++)if(r[u])for(var c=0;c<2;c++)l[c][u]=r[u][s][c];o[s]=l}return o}var o=t("../../components/errorbars/compute_error");e.exports=a},{"../../components/errorbars/compute_error":632}],1058:[function(t,e,r){"use strict";function n(t,e){this.scene=t,this.uid=e,this.linePlot=null,this.scatterPlot=null,this.errorBars=null,this.textMarkers=null,this.delaunayMesh=null,this.color=null,this.mode="",this.dataPoints=[],this.axesBounds=[[-1/0,-1/0,-1/0],[1/0,1/0,1/0]],this.textLabels=null,this.data=null}function i(t,e,r){var n,i=(r+1)%3,a=(r+2)%3,o=[],s=[];for(n=0;n<t.length;++n){var l=t[n];!isNaN(l[i])&&isFinite(l[i])&&!isNaN(l[a])&&isFinite(l[a])&&(o.push([l[i],l[a]]),s.push(n))}var u=v(o);for(n=0;n<u.length;++n)for(var c=u[n],h=0;h<c.length;++h)c[h]=s[c[h]];return{positions:t,cells:u,meshColor:e}}function a(t){for(var e=[0,0,0],r=[[0,0,0],[0,0,0],[0,0,0]],n=[0,0,0],i=0;i<3;i++){var a=t[i];a&&!1!==a.copy_zstyle&&(a=t[2]),a&&(e[i]=a.width/2,r[i]=b(a.color),n=a.thickness)}return{capSize:e,color:r,lineWidth:n}}function o(t){var e=[0,0];return Array.isArray(t)?[0,-1]:(t.indexOf("bottom")>=0&&(e[1]+=1),t.indexOf("top")>=0&&(e[1]-=1),t.indexOf("left")>=0&&(e[0]-=1),t.indexOf("right")>=0&&(e[0]+=1),e)}function s(t,e){return e(4*t)}function l(t){return M[t]}function u(t,e,r,n,i){var a=null;if(Array.isArray(t)){a=[];for(var o=0;o<e;o++)void 0===t[o]?a[o]=n:a[o]=r(t[o],i)}else a=r(t,y.identity);return a}function c(t,e){var r,n,i,c,h,f,d=[],p=t.fullSceneLayout,m=t.dataScale,g=p.xaxis,v=p.yaxis,w=p.zaxis,M=e.marker,A=e.line,T=e.x||[],S=e.y||[],E=e.z||[],L=T.length,C=e.xcalendar,I=e.ycalendar,z=e.zcalendar;for(n=0;n<L;n++)i=g.d2l(T[n],0,C)*m[0],c=v.d2l(S[n],0,I)*m[1],h=w.d2l(E[n],0,z)*m[2],d[n]=[i,c,h];if(Array.isArray(e.text))f=e.text;else if(void 0!==e.text)for(f=new Array(L),n=0;n<L;n++)f[n]=e.text;if(r={position:d,mode:e.mode,text:f},"line"in e&&(r.lineColor=x(A,1,L),r.lineWidth=A.width,r.lineDashes=A.dash),"marker"in e){var D=_(e);r.scatterColor=x(M,1,L),r.scatterSize=u(M.size,L,s,20,D),r.scatterMarker=u(M.symbol,L,l,"\u25cf"),r.scatterLineWidth=M.line.width,r.scatterLineColor=x(M.line,1,L),r.scatterAngle=0}"textposition"in e&&(r.textOffset=o(e.textposition),r.textColor=x(e.textfont,1,L),r.textSize=u(e.textfont.size,L,y.identity,12),r.textFont=e.textfont.family,r.textAngle=0);var P=["x","y","z"];for(r.project=[!1,!1,!1],r.projectScale=[1,1,1],r.projectOpacity=[1,1,1],n=0;n<3;++n){var O=e.projection[P[n]];(r.project[n]=O.show)&&(r.projectOpacity[n]=O.opacity,r.projectScale[n]=O.scale)}r.errorBounds=k(e,m);var R=a([e.error_x,e.error_y,e.error_z]);return r.errorColor=R.color,r.errorLineWidth=R.lineWidth,r.errorCapSize=R.capSize,r.delaunayAxis=e.surfaceaxis,r.delaunayColor=b(e.surfacecolor),r}function h(t){if(Array.isArray(t)){var e=t[0];return Array.isArray(e)&&(t=e),"rgb("+t.slice(0,3).map(function(t){return Math.round(255*t)})+")"}return null}function f(t,e){var r=new n(t,e.uid);return r.update(e),r}var d=t("gl-line3d"),p=t("gl-scatter3d"),m=t("gl-error3d"),g=t("gl-mesh3d"),v=t("delaunay-triangulate"),y=t("../../lib"),b=t("../../lib/str2rgbarray"),x=t("../../lib/gl_format_color"),_=t("../scatter/make_bubble_size_func"),w=t("../../constants/gl3d_dashes"),M=t("../../constants/gl3d_markers"),k=t("./calc_errors"),A=n.prototype;A.handlePick=function(t){if(t.object&&(t.object===this.linePlot||t.object===this.delaunayMesh||t.object===this.textMarkers||t.object===this.scatterPlot)){t.object.highlight&&t.object.highlight(null),this.scatterPlot&&(t.object=this.scatterPlot,this.scatterPlot.highlight(t.data)),this.textLabels?void 0!==this.textLabels[t.data.index]?t.textLabel=this.textLabels[t.data.index]:t.textLabel=this.textLabels:t.textLabel="";var e=t.index=t.data.index;return t.traceCoordinate=[this.data.x[e],this.data.y[e],this.data.z[e]],!0}},A.update=function(t){var e,r,n,a,o=this.scene.glplot.gl,s=w.solid;this.data=t;var l=c(this.scene,t);"mode"in l&&(this.mode=l.mode),"lineDashes"in l&&l.lineDashes in w&&(s=w[l.lineDashes]),this.color=h(l.scatterColor)||h(l.lineColor),this.dataPoints=l.position,e={gl:o,position:l.position,color:l.lineColor,lineWidth:l.lineWidth||1,dashes:s[0],dashScale:s[1],opacity:t.opacity,connectGaps:t.connectgaps},-1!==this.mode.indexOf("lines")?this.linePlot?this.linePlot.update(e):(this.linePlot=d(e),this.linePlot._trace=this,this.scene.glplot.add(this.linePlot)):this.linePlot&&(this.scene.glplot.remove(this.linePlot),this.linePlot.dispose(),this.linePlot=null);var u=t.opacity;if(t.marker&&t.marker.opacity&&(u*=t.marker.opacity),r={gl:o,position:l.position,color:l.scatterColor,size:l.scatterSize,glyph:l.scatterMarker,opacity:u,orthographic:!0,lineWidth:l.scatterLineWidth,lineColor:l.scatterLineColor,project:l.project,projectScale:l.projectScale,projectOpacity:l.projectOpacity},-1!==this.mode.indexOf("markers")?this.scatterPlot?this.scatterPlot.update(r):(this.scatterPlot=p(r),this.scatterPlot._trace=this,this.scatterPlot.highlightScale=1,this.scene.glplot.add(this.scatterPlot)):this.scatterPlot&&(this.scene.glplot.remove(this.scatterPlot),this.scatterPlot.dispose(),this.scatterPlot=null),a={gl:o,position:l.position,glyph:l.text,color:l.textColor,size:l.textSize,angle:l.textAngle,alignment:l.textOffset,font:l.textFont,orthographic:!0,lineWidth:0,project:!1,opacity:t.opacity},this.textLabels=t.hovertext||t.text,-1!==this.mode.indexOf("text")?this.textMarkers?this.textMarkers.update(a):(this.textMarkers=p(a),this.textMarkers._trace=this,this.textMarkers.highlightScale=1,this.scene.glplot.add(this.textMarkers)):this.textMarkers&&(this.scene.glplot.remove(this.textMarkers),this.textMarkers.dispose(),this.textMarkers=null),n={gl:o,position:l.position,color:l.errorColor,error:l.errorBounds,lineWidth:l.errorLineWidth,capSize:l.errorCapSize,opacity:t.opacity},this.errorBars?l.errorBounds?this.errorBars.update(n):(this.scene.glplot.remove(this.errorBars),this.errorBars.dispose(),this.errorBars=null):l.errorBounds&&(this.errorBars=m(n),this.errorBars._trace=this,this.scene.glplot.add(this.errorBars)),l.delaunayAxis>=0){var f=i(l.position,l.delaunayColor,l.delaunayAxis);f.opacity=t.opacity,this.delaunayMesh?this.delaunayMesh.update(f):(f.gl=o,this.delaunayMesh=g(f),this.delaunayMesh._trace=this,this.scene.glplot.add(this.delaunayMesh))}else this.delaunayMesh&&(this.scene.glplot.remove(this.delaunayMesh),this.delaunayMesh.dispose(),this.delaunayMesh=null)},A.dispose=function(){this.linePlot&&(this.scene.glplot.remove(this.linePlot),this.linePlot.dispose()),this.scatterPlot&&(this.scene.glplot.remove(this.scatterPlot),this.scatterPlot.dispose()),this.errorBars&&(this.scene.glplot.remove(this.errorBars),this.errorBars.dispose()),this.textMarkers&&(this.scene.glplot.remove(this.textMarkers),this.textMarkers.dispose()),this.delaunayMesh&&(this.scene.glplot.remove(this.delaunayMesh),this.delaunayMesh.dispose())},e.exports=f},{"../../constants/gl3d_dashes":704,"../../constants/gl3d_markers":705,"../../lib":728,"../../lib/gl_format_color":724,"../../lib/str2rgbarray":749,"../scatter/make_bubble_size_func":1047,"./calc_errors":1057,"delaunay-triangulate":123,"gl-error3d":161,"gl-line3d":172,"gl-mesh3d":205,"gl-scatter3d":251}],1059:[function(t,e,r){"use strict";function n(t,e,r,n){var a=0,o=r("x"),s=r("y"),l=r("z");return i.getComponentMethod("calendars","handleTraceDefaults")(t,e,["x","y","z"],n),o&&s&&l&&(a=Math.min(o.length,s.length,l.length),a<o.length&&(e.x=o.slice(0,a)),a<s.length&&(e.y=s.slice(0,a)),a<l.length&&(e.z=l.slice(0,a))),a}var i=t("../../registry"),a=t("../../lib"),o=t("../scatter/subtypes"),s=t("../scatter/marker_defaults"),l=t("../scatter/line_defaults"),u=t("../scatter/text_defaults"),c=t("../../components/errorbars/defaults"),h=t("./attributes");e.exports=function(t,e,r,i){function f(r,n){return a.coerce(t,e,h,r,n)}if(!n(t,e,f,i))return void(e.visible=!1);f("text"),f("hovertext"),f("mode"),o.hasLines(e)&&(f("connectgaps"),l(t,e,r,i,f)),o.hasMarkers(e)&&s(t,e,r,i,f),o.hasText(e)&&u(t,e,i,f);var d=(e.line||{}).color,p=(e.marker||{}).color;f("surfaceaxis")>=0&&f("surfacecolor",d||p);for(var m=["x","y","z"],g=0;g<3;++g){var v="projection."+m[g];f(v+".show")&&(f(v+".opacity"),f(v+".scale"))}c(t,e,r,{axis:"z"}),c(t,e,r,{axis:"y",inherit:"z"}),c(t,e,r,{axis:"x",inherit:"z"})}},{"../../components/errorbars/defaults":633,"../../lib":728,"../../registry":846,"../scatter/line_defaults":1043,"../scatter/marker_defaults":1048,"../scatter/subtypes":1052,"../scatter/text_defaults":1053,"./attributes":1055}],1060:[function(t,e,r){"use strict";var n={};n.plot=t("./convert"),n.attributes=t("./attributes"),n.markerSymbols=t("../../constants/gl3d_markers"),n.supplyDefaults=t("./defaults"),n.colorbar=t("../scatter/colorbar"),n.calc=t("./calc"),n.moduleType="trace",n.name="scatter3d",n.basePlotModule=t("../../plots/gl3d"),n.categories=["gl3d","symbols","markerColorscale","showLegend"],n.meta={},e.exports=n},{"../../constants/gl3d_markers":705,"../../plots/gl3d":811,"../scatter/colorbar":1034,"./attributes":1055,"./calc":1056,"./convert":1058,"./defaults":1059}],1061:[function(t,e,r){"use strict";var n=t("../scatter/attributes"),i=t("../../plots/attributes"),a=t("../../components/colorscale/color_attributes"),o=t("../../components/colorbar/attributes"),s=t("../../lib/extend").extendFlat,l=n.marker,u=n.line,c=l.line;e.exports={carpet:{valType:"string",editType:"calc"},a:{valType:"data_array",editType:"calc"},b:{valType:"data_array",editType:"calc"},mode:s({},n.mode,{dflt:"markers"}),text:s({},n.text,{}),line:{color:u.color,width:u.width,dash:u.dash,shape:s({},u.shape,{values:["linear","spline"]}),smoothing:u.smoothing,editType:"calc"},connectgaps:n.connectgaps,fill:s({},n.fill,{values:["none","toself","tonext"]}),fillcolor:n.fillcolor,marker:s({symbol:l.symbol,opacity:l.opacity,maxdisplayed:l.maxdisplayed,size:l.size,sizeref:l.sizeref,sizemin:l.sizemin,sizemode:l.sizemode,line:s({width:c.width,editType:"calc"},a("marker".line)),gradient:l.gradient,editType:"calc"},a("marker"),{showscale:l.showscale,colorbar:o}),textfont:n.textfont,textposition:n.textposition,hoverinfo:s({},i.hoverinfo,{flags:["a","b","text","name"]}),hoveron:n.hoveron}},{"../../components/colorbar/attributes":605,"../../components/colorscale/color_attributes":611,"../../lib/extend":717,"../../plots/attributes":770,"../scatter/attributes":1031}],1062:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),i=t("../../plots/cartesian/axes"),a=t("../scatter/subtypes"),o=t("../scatter/colorscale_calc"),s=t("../scatter/arrays_to_calcdata"),l=t("../carpet/lookup_carpetid");e.exports=function(t,e){var r=e.carpetTrace=l(t,e);if(r&&r.visible&&"legendonly"!==r.visible){var u;e.xaxis=r.xaxis,e.yaxis=r.yaxis;var c,h,f=e.a.length,d=new Array(f),p=!1;for(u=0;u<f;u++)if(c=e.a[u],h=e.b[u],n(c)&&n(h)){var m=r.ab2xy(+c,+h,!0),g=r.isVisible(+c,+h);g||(p=!0),d[u]={x:m[0],y:m[1],a:c,b:h,vis:g}}else d[u]={x:!1,y:!1};e._needsCull=p,d[0].carpet=r,d[0].trace=e;var v,y;if(a.hasMarkers(e)&&(v=e.marker,y=v.size,Array.isArray(y))){var b={type:"linear"};i.setConvert(b),y=b.makeCalcdata(e.marker,"size"),y.length>f&&y.splice(f,y.length-f)}return o(e),s(d,e),d}}},{"../../plots/cartesian/axes":772,"../carpet/lookup_carpetid":903,"../scatter/arrays_to_calcdata":1030,"../scatter/colorscale_calc":1035,"../scatter/subtypes":1052,"fast-isnumeric":131}],1063:[function(t,e,r){"use strict";var n=t("../../lib"),i=t("../scatter/constants"),a=t("../scatter/subtypes"),o=t("../scatter/marker_defaults"),s=t("../scatter/line_defaults"),l=t("../scatter/line_shape_defaults"),u=t("../scatter/text_defaults"),c=t("../scatter/fillcolor_defaults"),h=t("./attributes");e.exports=function(t,e,r,f){function d(r,i){return n.coerce(t,e,h,r,i)}d("carpet"),e.xaxis="x",e.yaxis="y";var p,m=d("a"),g=d("b");if(!(p=Math.min(m.length,g.length)))return void(e.visible=!1);m&&p<m.length&&(e.a=m.slice(0,p)),g&&p<g.length&&(e.b=g.slice(0,p)),d("text"),d("mode",p<i.PTS_LINESONLY?"lines+markers":"lines"),a.hasLines(e)&&(s(t,e,r,f,d),l(t,e,d),d("connectgaps")),a.hasMarkers(e)&&o(t,e,r,f,d,{gradient:!0}),a.hasText(e)&&u(t,e,f,d);var v=[];(a.hasMarkers(e)||a.hasText(e))&&(d("marker.maxdisplayed"),v.push("points")),d("fill"),"none"!==e.fill&&(c(t,e,r,d),a.hasLines(e)||l(t,e,d)),"tonext"!==e.fill&&"toself"!==e.fill||v.push("fills"),d("hoveron",v.join("+")||"points")}},{"../../lib":728,"../scatter/constants":1036,"../scatter/fillcolor_defaults":1039,"../scatter/line_defaults":1043,"../scatter/line_shape_defaults":1045,"../scatter/marker_defaults":1048,"../scatter/subtypes":1052,"../scatter/text_defaults":1053,"./attributes":1061}],1064:[function(t,e,r){"use strict";var n=t("../scatter/hover");e.exports=function(t,e,r,i){function a(t,e){var r;r=t.labelprefix&&t.labelprefix.length>0?t.labelprefix.replace(/ = $/,""):t._hovertitle,v.push(r+": "+e.toFixed(3)+t.labelsuffix)}var o=n(t,e,r,i);if(o&&!1!==o[0].index){var s=o[0];if(void 0===s.index){var l=1-s.y0/t.ya._length,u=t.xa._length,c=u*l/2,h=u-c;return s.x0=Math.max(Math.min(s.x0,h),c),s.x1=Math.max(Math.min(s.x1,h),c),o}var f=s.cd[s.index];s.a=f.a,s.b=f.b,s.xLabelVal=void 0,s.yLabelVal=void 0;var d=s.trace,p=d._carpet,m=f.hi||d.hoverinfo,g=m.split("+"),v=[];-1!==g.indexOf("all")&&(g=["a","b"]),-1!==g.indexOf("a")&&a(p.aaxis,f.a),-1!==g.indexOf("b")&&a(p.baxis,f.b);var y=p.ab2ij([f.a,f.b]),b=Math.floor(y[0]),x=y[0]-b,_=Math.floor(y[1]),w=y[1]-_,M=p.evalxy([],b,_,x,w);return v.push("y: "+M[1].toFixed(3)),s.extraText=v.join("<br>"),o}}},{"../scatter/hover":1041}],1065:[function(t,e,r){"use strict";var n={};n.attributes=t("./attributes"),n.supplyDefaults=t("./defaults"),n.colorbar=t("../scatter/colorbar"),n.calc=t("./calc"),n.plot=t("./plot"),n.style=t("./style"),n.hoverPoints=t("./hover"),n.selectPoints=t("./select"),n.moduleType="trace",n.name="scattercarpet",n.basePlotModule=t("../../plots/cartesian"),n.categories=["carpet","symbols","markerColorscale","showLegend","carpetDependent"],n.meta={},e.exports=n},{"../../plots/cartesian":782,"../scatter/colorbar":1034,"./attributes":1061,"./calc":1062,"./defaults":1063,"./hover":1064,"./plot":1066,"./select":1067,"./style":1068}],1066:[function(t,e,r){"use strict";var n=t("../scatter/plot"),i=t("../../plots/cartesian/axes"),a=t("../../components/drawing");e.exports=function(t,e,r){var o,s,l,u=r[0][0].carpet,c={xaxis:i.getFromId(t,u.xaxis||"x"),yaxis:i.getFromId(t,u.yaxis||"y"),plot:e.plot};for(n(t,c,r),o=0;o<r.length;o++)s=r[o][0].trace,l=c.plot.selectAll("g.trace"+s.uid+" .js-line"),a.setClipUrl(l,u._clipPathId)}},{"../../components/drawing":628,"../../plots/cartesian/axes":772,"../scatter/plot":1049}],1067:[function(t,e,r){"use strict";var n=t("../scatter/select");e.exports=function(t,e){var r=n(t,e);if(r){var i,a,o,s=t.cd;for(o=0;o<r.length;o++)i=r[o],a=s[i.pointNumber],i.a=a.a,i.b=a.b,i.c=a.c,delete i.x,delete i.y;return r}}},{"../scatter/select":1050}],1068:[function(t,e,r){"use strict";var n=t("../scatter/style");e.exports=function(t){for(var e=t._fullLayout._modules,r=0;r<e.length;r++)if("scatter"===e[r].name)return;n(t)}},{"../scatter/style":1051}],1069:[function(t,e,r){"use strict";var n=t("../scatter/attributes"),i=t("../../plots/attributes"),a=t("../../components/colorscale/color_attributes"),o=t("../../components/drawing/attributes").dash,s=t("../../lib/extend").extendFlat,l=t("../../plot_api/edit_types").overrideAll,u=n.marker,c=n.line,h=u.line;e.exports=l({lon:{valType:"data_array"},lat:{valType:"data_array"},locations:{valType:"data_array"},locationmode:{valType:"enumerated",values:["ISO-3","USA-states","country names"],dflt:"ISO-3"},mode:s({},n.mode,{dflt:"markers"}),text:s({},n.text,{}),hovertext:s({},n.hovertext,{}),textfont:n.textfont,textposition:n.textposition,line:{color:c.color,width:c.width,dash:o},connectgaps:n.connectgaps,marker:s({symbol:u.symbol,opacity:u.opacity,size:u.size,sizeref:u.sizeref,sizemin:u.sizemin,sizemode:u.sizemode,showscale:u.showscale,colorbar:u.colorbar,line:s({width:h.width},a("marker.line")),gradient:u.gradient},a("marker")),fill:{valType:"enumerated",values:["none","toself"],dflt:"none"},fillcolor:n.fillcolor,hoverinfo:s({},i.hoverinfo,{flags:["lon","lat","location","text","name"]})},"calc","nested")},{"../../components/colorscale/color_attributes":611,"../../components/drawing/attributes":627,"../../lib/extend":717,"../../plot_api/edit_types":756,"../../plots/attributes":770,"../scatter/attributes":1031}],1070:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),i=t("../../constants/numerical").BADNUM,a=t("../scatter/colorscale_calc"),o=t("../scatter/arrays_to_calcdata");e.exports=function(t,e){for(var r=Array.isArray(e.locations),s=r?e.locations.length:e.lon.length,l=new Array(s),u=0;u<s;u++){var c=l[u]={};if(r){var h=e.locations[u];c.loc="string"==typeof h?h:null}else{var f=e.lon[u],d=e.lat[u];n(f)&&n(d)?c.lonlat=[+f,+d]:c.lonlat=[i,i]}}return o(l,e),a(e),l}},{"../../constants/numerical":707,"../scatter/arrays_to_calcdata":1030,"../scatter/colorscale_calc":1035,"fast-isnumeric":131}],1071:[function(t,e,r){"use strict";function n(t,e,r){var n,i,a=0,o=r("locations");return o?(r("locationmode"),a=o.length):(n=r("lon")||[],i=r("lat")||[],a=Math.min(n.length,i.length),a<n.length&&(e.lon=n.slice(0,a)),a<i.length&&(e.lat=i.slice(0,a)),a)}var i=t("../../lib"),a=t("../scatter/subtypes"),o=t("../scatter/marker_defaults"),s=t("../scatter/line_defaults"),l=t("../scatter/text_defaults"),u=t("../scatter/fillcolor_defaults"),c=t("./attributes");e.exports=function(t,e,r,h){function f(r,n){return i.coerce(t,e,c,r,n)}if(!n(t,e,f))return void(e.visible=!1);f("text"),f("hovertext"),f("mode"),a.hasLines(e)&&(s(t,e,r,h,f),f("connectgaps")),a.hasMarkers(e)&&o(t,e,r,h,f,{gradient:!0}),a.hasText(e)&&l(t,e,h,f),f("fill"),"none"!==e.fill&&u(t,e,r,f)}},{"../../lib":728,"../scatter/fillcolor_defaults":1039,"../scatter/line_defaults":1043,"../scatter/marker_defaults":1048,"../scatter/subtypes":1052,"../scatter/text_defaults":1053,"./attributes":1069}],1072:[function(t,e,r){"use strict";e.exports=function(t,e){return t.lon=e.lon,t.lat=e.lat,t.location=e.loc?e.loc:null,t}},{}],1073:[function(t,e,r){"use strict";function n(t,e,r){function n(t){return a.tickText(r,r.c2l(t),"hover").text+"\xb0"}var i=e.hi||t.hoverinfo,o="all"===i?u.hoverinfo.flags:i.split("+"),s=-1!==o.indexOf("location")&&Array.isArray(t.locations),c=-1!==o.indexOf("lon"),h=-1!==o.indexOf("lat"),f=-1!==o.indexOf("text"),d=[];return s?d.push(e.loc):c&&h?d.push("("+n(e.lonlat[0])+", "+n(e.lonlat[1])+")"):c?d.push("lon: "+n(e.lonlat[0])):h&&d.push("lat: "+n(e.lonlat[1])),f&&l(e,t,d),d.join("<br>")}var i=t("../../components/fx"),a=t("../../plots/cartesian/axes"),o=t("../../constants/numerical").BADNUM,s=t("../scatter/get_trace_color"),l=t("../scatter/fill_hover_text"),u=t("./attributes");e.exports=function(t,e,r){function a(t){var n=t.lonlat;if(n[0]===o)return 1/0;if(d(n))return 1/0;var i=p(n),a=p([e,r]),s=Math.abs(i[0]-a[0]),l=Math.abs(i[1]-a[1]),u=Math.max(3,t.mrc||0);return Math.max(Math.sqrt(s*s+l*l)-u,1-3/u)}var l=t.cd,u=l[0].trace,c=t.xa,h=t.ya,f=t.subplot,d=f.projection.isLonLatOverEdges,p=f.project;if(i.getClosest(l,a,t),!1!==t.index){var m=l[t.index],g=m.lonlat,v=[c.c2p(g),h.c2p(g)],y=m.mrc||1;return t.x0=v[0]-y,t.x1=v[0]+y,t.y0=v[1]-y,t.y1=v[1]+y,t.loc=m.loc,t.lon=g[0],t.lat=g[1],t.color=s(u,m),t.extraText=n(u,m,f.mockAxis),[t]}}},{"../../components/fx":645,"../../constants/numerical":707,"../../plots/cartesian/axes":772,"../scatter/fill_hover_text":1038,"../scatter/get_trace_color":1040,"./attributes":1069}],1074:[function(t,e,r){"use strict";var n={};n.attributes=t("./attributes"),n.supplyDefaults=t("./defaults"),n.colorbar=t("../scatter/colorbar"),n.calc=t("./calc"),n.plot=t("./plot"),n.hoverPoints=t("./hover"),n.eventData=t("./event_data"),
n.selectPoints=t("./select"),n.moduleType="trace",n.name="scattergeo",n.basePlotModule=t("../../plots/geo"),n.categories=["geo","symbols","markerColorscale","showLegend","scatter-like"],n.meta={},e.exports=n},{"../../plots/geo":800,"../scatter/colorbar":1034,"./attributes":1069,"./calc":1070,"./defaults":1071,"./event_data":1072,"./hover":1073,"./plot":1075,"./select":1076}],1075:[function(t,e,r){"use strict";function n(t,e){var r=t[0].trace;if(Array.isArray(r.locations))for(var n=c(r,e),i=r.locationmode,a=0;a<t.length;a++){var o=t[a],s=h(i,o.loc,n);o.lonlat=s?s.properties.ct:[u,u]}}function i(t){var e=t.layers.frontplot.selectAll(".trace.scattergeo");e.style("opacity",function(t){return t[0].trace.opacity}),e.each(function(e){var r=e[0].trace,n=a.select(this);n.selectAll("path.point").call(o.pointStyle,r,t.graphDiv),n.selectAll("text").call(o.textPointStyle,r,t.graphDiv)}),e.selectAll("path.js-line").style("fill","none").each(function(t){var e=a.select(this),r=t.trace,n=r.line||{};e.call(s.stroke,n.color).call(o.dashLine,n.dash||"",n.width||0),"none"!==r.fill&&e.call(s.fill,r.fillcolor)})}var a=t("d3"),o=t("../../components/drawing"),s=t("../../components/color"),l=t("../../lib"),u=t("../../constants/numerical").BADNUM,c=t("../../lib/topojson_utils").getTopojsonFeatures,h=t("../../lib/geo_location_utils").locationToFeature,f=t("../../lib/geojson_utils"),d=t("../scatter/subtypes");e.exports=function(t,e){function r(t){return t[0].trace.uid}function o(t,e){t.lonlat[0]===u&&a.select(e).remove()}for(var s=0;s<e.length;s++)n(e[s],t.topojson);var c=t.layers.frontplot.select(".scatterlayer").selectAll("g.trace.scattergeo").data(e,r);c.enter().append("g").attr("class","trace scattergeo"),c.exit().remove(),c.selectAll("*").remove(),c.each(function(t){var e=t[0].node3=a.select(this),r=t[0].trace;if(d.hasLines(r)||"none"!==r.fill){var n=f.calcTraceToLineCoords(t),i="none"!==r.fill?f.makePolygon(n):f.makeLine(n);e.selectAll("path.js-line").data([{geojson:i,trace:r}]).enter().append("path").classed("js-line",!0).style("stroke-miterlimit",2)}d.hasMarkers(r)&&e.selectAll("path.point").data(l.identity).enter().append("path").classed("point",!0).each(function(t){o(t,this)}),d.hasText(r)&&e.selectAll("g").data(l.identity).enter().append("g").append("text").each(function(t){o(t,this)})}),i(t)}},{"../../components/color":604,"../../components/drawing":628,"../../constants/numerical":707,"../../lib":728,"../../lib/geo_location_utils":720,"../../lib/geojson_utils":721,"../../lib/topojson_utils":753,"../scatter/subtypes":1052,d3:122}],1076:[function(t,e,r){"use strict";var n=t("../scatter/subtypes"),i=t("../../constants/interactions").DESELECTDIM;e.exports=function(t,e){var r,a,o,s,l,u=t.cd,c=t.xaxis,h=t.yaxis,f=[],d=u[0].trace,p=u[0].node3;if(!n.hasMarkers(d)&&!n.hasText(d))return[];var m=d.marker,g=Array.isArray(m.opacity)?1:m.opacity;if(!1===e)for(l=0;l<u.length;l++)u[l].dim=0;else for(l=0;l<u.length;l++)r=u[l],a=r.lonlat,o=c.c2p(a),s=h.c2p(a),e.contains([o,s])?(f.push({pointNumber:l,lon:a[0],lat:a[1]}),r.dim=0):r.dim=1;return p.selectAll("path.point").style("opacity",function(t){return((t.mo+1||g+1)-1)*(t.dim?i:1)}),p.selectAll("text").style("opacity",function(t){return t.dim?i:1}),f}},{"../../constants/interactions":706,"../scatter/subtypes":1052}],1077:[function(t,e,r){"use strict";var n=t("../scatter/attributes"),i=t("../../components/colorscale/color_attributes"),a=t("../../constants/gl2d_dashes"),o=t("../../constants/gl2d_markers"),s=t("../../lib/extend").extendFlat,l=t("../../plot_api/edit_types").overrideAll,u=n.line,c=n.marker,h=c.line,f=e.exports=l({x:n.x,x0:n.x0,dx:n.dx,y:n.y,y0:n.y0,dy:n.dy,text:s({},n.text,{}),mode:{valType:"flaglist",flags:["lines","markers"],extras:["none"]},line:{color:u.color,width:u.width,dash:{valType:"enumerated",values:Object.keys(a),dflt:"solid"}},marker:s({},i("marker"),{symbol:{valType:"enumerated",values:Object.keys(o),dflt:"circle",arrayOk:!0},size:c.size,sizeref:c.sizeref,sizemin:c.sizemin,sizemode:c.sizemode,opacity:c.opacity,showscale:c.showscale,colorbar:c.colorbar,line:s({},i("marker.line"),{width:h.width})}),connectgaps:n.connectgaps,fill:s({},n.fill,{values:["none","tozeroy","tozerox"]}),fillcolor:n.fillcolor,error_y:n.error_y,error_x:n.error_x},"calc","nested");f.x.editType=f.y.editType=f.x0.editType=f.y0.editType="calc+clearAxisTypes"},{"../../components/colorscale/color_attributes":611,"../../constants/gl2d_dashes":702,"../../constants/gl2d_markers":703,"../../lib/extend":717,"../../plot_api/edit_types":756,"../scatter/attributes":1031}],1078:[function(t,e,r){"use strict";var n=t("../../plots/cartesian/axes"),i=t("../scatter/arrays_to_calcdata"),a=t("../scatter/colorscale_calc");e.exports=function(t,e){var r,o=t._fullLayout.dragmode;if("lasso"===o||"select"===o){var s,l=n.getFromId(t,e.xaxis||"x"),u=n.getFromId(t,e.yaxis||"y"),c=l.makeCalcdata(e,"x"),h=u.makeCalcdata(e,"y"),f=Math.min(c.length,h.length);for(r=new Array(f),s=0;s<f;s++)r[s]={x:c[s],y:h[s]}}else r=[{x:!1,y:!1,trace:e,t:{}}],i(r,e);return a(e),r}},{"../../plots/cartesian/axes":772,"../scatter/arrays_to_calcdata":1030,"../scatter/colorscale_calc":1035}],1079:[function(t,e,r){"use strict";function n(t,e){this.scene=t,this.uid=e,this.type="scattergl",this.pickXData=[],this.pickYData=[],this.xData=[],this.yData=[],this.textLabels=[],this.color="rgb(0, 0, 0)",this.name="",this.hoverinfo="all",this.connectgaps=!0,this.index=null,this.idToIndex=[],this.bounds=[0,0,0,0],this.isVisible=!1,this.hasLines=!1,this.hasErrorX=!1,this.hasErrorY=!1,this.hasMarkers=!1,this.line=this.initObject(m,{positions:new Float64Array(0),color:[0,0,0,1],width:1,fill:[!1,!1,!1,!1],fillColor:[[0,0,0,1],[0,0,0,1],[0,0,0,1],[0,0,0,1]],dashes:[1]},0),this.errorX=this.initObject(g,{positions:new Float64Array(0),errors:new Float64Array(0),lineWidth:1,capSize:0,color:[0,0,0,1]},1),this.errorY=this.initObject(g,{positions:new Float64Array(0),errors:new Float64Array(0),lineWidth:1,capSize:0,color:[0,0,0,1]},2);var r={positions:new Float64Array(0),sizes:[],colors:[],glyphs:[],borderWidths:[],borderColors:[],size:12,color:[0,0,0,1],borderSize:1,borderColor:[0,0,0,1],snapPoints:!0},n=y.extendFlat({},r,{snapPoints:!1});this.scatter=this.initObject(d,r,3),this.fancyScatter=this.initObject(p,r,4),this.selectScatter=this.initObject(d,n,5)}function i(t,e,r){return Array.isArray(e)||(e=[e]),a(t,e,r)}function a(t,e,r){for(var n=new Array(r),i=e[0],a=0;a<r;++a)n[a]=t(a>=e.length?i:e[a]);return n}function o(t,e,r){return l(O(t,r),P(e,r),r)}function s(t,e,r,n){var i=k(t,e,n);return i=Array.isArray(i[0])?i:a(y.identity,[i],n),l(i,P(r,n),n)}function l(t,e,r){for(var n=new Array(4*r),i=0;i<r;++i){for(var a=0;a<3;++a)n[4*i+a]=t[i][a];n[4*i+3]=t[i][3]*e[i]}return n}function u(t){return""===t.split("-open")[1]}function c(t,e,r,n,i){var a,o=i?C:1;for(a=0;a<3;a++)t[4*r+a]=e[4*n+a];t[4*r+a]=o*e[4*n+a]}function h(t){for(var e,r=t.length,n=Math.max(1,(r-1)/Math.min(Math.max(r,1),1e3)),i=0;i<r;i+=n)if(e=t[Math.floor(i)],!(v(e)||e instanceof Date))return!1;return!0}function f(t,e,r){var i=new n(t,e.uid);return i.update(e,r),i}var d=t("gl-scatter2d"),p=t("gl-scatter2d-sdf"),m=t("gl-line2d"),g=t("gl-error2d"),v=t("fast-isnumeric"),y=t("../../lib"),b=t("../../plots/cartesian/axes"),x=t("../../plots/cartesian/axis_autotype"),_=t("../../components/errorbars"),w=t("../../lib/str2rgbarray"),M=t("../../lib/typed_array_truncate"),k=t("../../lib/gl_format_color"),A=t("../scatter/subtypes"),T=t("../scatter/make_bubble_size_func"),S=t("../scatter/get_trace_color"),E=t("../../constants/gl2d_markers"),L=t("../../constants/gl2d_dashes"),C=t("../../constants/interactions").DESELECTDIM,I=["xaxis","yaxis"],z=[0,0,0,0],D=n.prototype;D.initObject=function(t,e,r){function n(){u||(u=t(s,e),u._trace=o,u._index=r),u.update(e)}function i(){u&&u.update(l)}function a(){u&&u.dispose()}var o=this,s=o.scene.glplot,l=y.extendFlat({},e),u=null;return{options:e,update:n,clear:i,dispose:a}},D.handlePick=function(t){var e=t.pointId;(t.object!==this.line||this.connectgaps)&&(e=this.idToIndex[t.pointId]);var r=this.pickXData[e];return{trace:this,dataCoord:t.dataCoord,traceCoord:[v(r)||!y.isDateTime(r)?r:y.dateTime2ms(r),this.pickYData[e]],textLabel:Array.isArray(this.textLabels)?this.textLabels[e]:this.textLabels,color:Array.isArray(this.color)?this.color[e]:this.color,name:this.name,pointIndex:e,hoverinfo:this.hoverinfo}},D.isFancy=function(t){if("linear"!==this.scene.xaxis.type&&"date"!==this.scene.xaxis.type)return!0;if("linear"!==this.scene.yaxis.type)return!0;if(!t.x||!t.y)return!0;if(this.hasMarkers){var e=t.marker||{};if(Array.isArray(e.symbol)||"circle"!==e.symbol||Array.isArray(e.size)||Array.isArray(e.color)||Array.isArray(e.line.width)||Array.isArray(e.line.color)||Array.isArray(e.opacity))return!0}return!(!this.hasLines||this.connectgaps)||(!!this.hasErrorX||!!this.hasErrorY)};var P=i.bind(null,function(t){return+t}),O=i.bind(null,w),R=i.bind(null,function(t){return E[t]?t:"circle"});D.update=function(t,e){!0!==t.visible?(this.isVisible=!1,this.hasLines=!1,this.hasErrorX=!1,this.hasErrorY=!1,this.hasMarkers=!1):(this.isVisible=!0,this.hasLines=A.hasLines(t),this.hasErrorX=!0===t.error_x.visible,this.hasErrorY=!0===t.error_y.visible,this.hasMarkers=A.hasMarkers(t)),this.textLabels=t.text,this.name=t.name,this.hoverinfo=t.hoverinfo,this.bounds=[1/0,1/0,-1/0,-1/0],this.connectgaps=!!t.connectgaps,this.isVisible?this.isFancy(t)?this.updateFancy(t):this.updateFast(t):(this.line.clear(),this.errorX.clear(),this.errorY.clear(),this.scatter.clear(),this.fancyScatter.clear()),this.scene.glplot.objects.sort(function(t,e){return t._index-e._index}),this.index=t.index,this.color=S(t,{}),e&&e[0]&&!e[0]._glTrace&&(e[0]._glTrace=this)},D.updateFast=function(t){var e,r,n,i,a,o=this.xData=this.pickXData=t.x,s=this.yData=this.pickYData=t.y,l=o.length,u=new Array(l),c=new Float64Array(2*l),f=this.bounds,d=0,p=0,m=t.selection,g=t.xcalendar,b=h(o),_=!b&&"date"===x(o,g);if(b||_)for(e=0;e<l;++e)i=o[e],a=s[e],v(a)&&(b||(i=y.dateTime2ms(i,g)),c[p++]=i,c[p++]=a,u[d++]=e,f[0]=Math.min(f[0],i),f[1]=Math.min(f[1],a),f[2]=Math.max(f[2],i),f[3]=Math.max(f[3],a));if(c=M(c,p),this.idToIndex=u,m&&m.length)for(r=new Float64Array(2*m.length),e=0,n=m.length;e<n;e++)r[2*e+0]=m[e].x,r[2*e+1]=m[e].y;this.updateLines(t,c),this.updateError("X",t),this.updateError("Y",t);var k;if(this.hasMarkers){var A,T,S;r?(this.scatter.options.positions=null,A=w(t.marker.color),T=w(t.marker.line.color),S=t.opacity*t.marker.opacity*C,A[3]*=S,this.scatter.options.color=A,T[3]*=S,this.scatter.options.borderColor=T,k=t.marker.size,this.scatter.options.size=k,this.scatter.options.borderSize=t.marker.line.width,this.scatter.update(),this.scatter.options.positions=c,this.selectScatter.options.positions=r,A=w(t.marker.color),T=w(t.marker.line.color),S=t.opacity*t.marker.opacity,A[3]*=S,this.selectScatter.options.color=A,T[3]*=S,this.selectScatter.options.borderColor=T,k=t.marker.size,this.selectScatter.options.size=k,this.selectScatter.options.borderSize=t.marker.line.width,this.selectScatter.update()):(this.scatter.options.positions=c,A=w(t.marker.color),T=w(t.marker.line.color),S=t.opacity*t.marker.opacity,A[3]*=S,this.scatter.options.color=A,T[3]*=S,this.scatter.options.borderColor=T,k=t.marker.size,this.scatter.options.size=k,this.scatter.options.borderSize=t.marker.line.width,this.scatter.update())}else this.scatter.clear();this.fancyScatter.clear(),this.expandAxesFast(f,k)},D.updateFancy=function(t){var e=this.scene,r=e.xaxis,n=e.yaxis,a=this.bounds,o=t.selection,l=this.pickXData=r.makeCalcdata(t,"x").slice(),h=this.pickYData=n.makeCalcdata(t,"y").slice();this.xData=l.slice(),this.yData=h.slice();var f,d,p,m,g,v,y,b=_.calcFromTrace(t,e.fullLayout),x=l.length,w=new Array(x),k=new Float64Array(2*x),A=new Float64Array(4*x),S=new Float64Array(4*x),L=0,C=0,I=0,D=0,O="log"===r.type?r.d2l:function(t){return t},F="log"===n.type?n.d2l:function(t){return t};for(f=0;f<x;++f)this.xData[f]=d=O(l[f]),this.yData[f]=p=F(h[f]),isNaN(d)||isNaN(p)||(w[L++]=f,k[C++]=d,k[C++]=p,m=A[I++]=d-b[f].xs||0,g=A[I++]=b[f].xh-d||0,A[I++]=0,A[I++]=0,S[D++]=0,S[D++]=0,v=S[D++]=p-b[f].ys||0,y=S[D++]=b[f].yh-p||0,a[0]=Math.min(a[0],d-m),a[1]=Math.min(a[1],p-v),a[2]=Math.max(a[2],d+g),a[3]=Math.max(a[3],p+y));k=M(k,C),this.idToIndex=w,this.updateLines(t,k),this.updateError("X",t,k,A),this.updateError("Y",t,k,S);var j,N;if(o&&o.length)for(N={},f=0;f<o.length;f++)N[o[f].pointNumber]=!0;if(this.hasMarkers){this.scatter.options.positions=k,this.scatter.options.sizes=new Array(L),this.scatter.options.glyphs=new Array(L),this.scatter.options.borderWidths=new Array(L),this.scatter.options.colors=new Array(4*L),this.scatter.options.borderColors=new Array(4*L);var B,U,V,H,q,G,Y,W,X,Z,J=T(t),K=t.marker,Q=K.opacity,$=t.opacity,tt=R(K.symbol,x),et=s(K,Q,$,x),rt=P(K.line.width,x),nt=s(K.line,Q,$,x);for(j=i(J,K.size,x),f=0;f<L;++f)B=w[f],V=tt[B],H=E[V],q=u(V),G=N&&!N[B],Y=H.noBorder&&!q?nt:et,W=q?et:nt,U=j[B],X=rt[B],Z=H.noBorder||H.noFill?.1*U:0,this.scatter.options.sizes[f]=4*U,this.scatter.options.glyphs[f]=H.unicode,this.scatter.options.borderWidths[f]=.5*(X>Z?X-Z:0),!q||H.noBorder||H.noFill?c(this.scatter.options.colors,Y,f,B,G):c(this.scatter.options.colors,z,f,0),c(this.scatter.options.borderColors,W,f,B,G);N?(this.scatter.options.positions=null,this.fancyScatter.update(),this.scatter.options.positions=k):this.fancyScatter.update()}else this.fancyScatter.clear();this.scatter.clear(),this.expandAxesFancy(l,h,j)},D.updateLines=function(t,e){var r;if(this.hasLines){var n=e;if(!t.connectgaps){var i=0,a=this.xData,s=this.yData;for(n=new Float64Array(2*a.length),r=0;r<a.length;++r)n[i++]=a[r],n[i++]=s[r]}this.line.options.positions=n;var l=o(t.line.color,t.opacity,1),u=Math.round(.5*this.line.options.width),c=(L[t.line.dash]||[1]).slice();for(r=0;r<c.length;++r)c[r]*=u;switch(t.fill){case"tozeroy":this.line.options.fill=[!1,!0,!1,!1];break;case"tozerox":this.line.options.fill=[!0,!1,!1,!1];break;default:this.line.options.fill=[!1,!1,!1,!1]}var h=w(t.fillcolor);this.line.options.color=l,this.line.options.width=2*t.line.width,this.line.options.dashes=c,this.line.options.fillColor=[h,h,h,h],this.line.update()}else this.line.clear()},D.updateError=function(t,e,r,n){var i=this["error"+t],a=e["error_"+t.toLowerCase()];"x"===t.toLowerCase()&&a.copy_ystyle&&(a=e.error_y),this["hasError"+t]?(i.options.positions=r,i.options.errors=n,i.options.capSize=a.width,i.options.lineWidth=a.thickness/2,i.options.color=o(a.color,1,1),i.update()):i.clear()},D.expandAxesFast=function(t,e){for(var r,n,i,a=e||10,o=0;o<2;o++)r=this.scene[I[o]],n=r._min,n||(n=[]),n.push({val:t[o],pad:a}),i=r._max,i||(i=[]),i.push({val:t[o+2],pad:a})},D.expandAxesFancy=function(t,e,r){var n=this.scene,i={padded:!0,ppad:r};b.expand(n.xaxis,t,i),b.expand(n.yaxis,e,i)},D.dispose=function(){this.line.dispose(),this.errorX.dispose(),this.errorY.dispose(),this.scatter.dispose(),this.fancyScatter.dispose()},e.exports=f},{"../../components/errorbars":634,"../../constants/gl2d_dashes":702,"../../constants/gl2d_markers":703,"../../constants/interactions":706,"../../lib":728,"../../lib/gl_format_color":724,"../../lib/str2rgbarray":749,"../../lib/typed_array_truncate":754,"../../plots/cartesian/axes":772,"../../plots/cartesian/axis_autotype":773,"../scatter/get_trace_color":1040,"../scatter/make_bubble_size_func":1047,"../scatter/subtypes":1052,"fast-isnumeric":131,"gl-error2d":159,"gl-line2d":170,"gl-scatter2d":248,"gl-scatter2d-sdf":243}],1080:[function(t,e,r){"use strict";var n=t("../../lib"),i=t("../scatter/constants"),a=t("../scatter/subtypes"),o=t("../scatter/xy_defaults"),s=t("../scatter/marker_defaults"),l=t("../scatter/line_defaults"),u=t("../scatter/fillcolor_defaults"),c=t("../../components/errorbars/defaults"),h=t("./attributes");e.exports=function(t,e,r,f){function d(r,i){return n.coerce(t,e,h,r,i)}var p=o(t,e,f,d);if(!p)return void(e.visible=!1);d("text"),d("mode",p<i.PTS_LINESONLY?"lines+markers":"lines"),a.hasLines(e)&&(d("connectgaps"),l(t,e,r,f,d)),a.hasMarkers(e)&&s(t,e,r,f,d),d("fill"),"none"!==e.fill&&u(t,e,r,d),c(t,e,r,{axis:"y"}),c(t,e,r,{axis:"x",inherit:"y"})}},{"../../components/errorbars/defaults":633,"../../lib":728,"../scatter/constants":1036,"../scatter/fillcolor_defaults":1039,"../scatter/line_defaults":1043,"../scatter/marker_defaults":1048,"../scatter/subtypes":1052,"../scatter/xy_defaults":1054,"./attributes":1077}],1081:[function(t,e,r){"use strict";var n={};n.attributes=t("./attributes"),n.supplyDefaults=t("./defaults"),n.colorbar=t("../scatter/colorbar"),n.hoverPoints=t("../scatter/hover"),n.calc=t("./calc"),n.plot=t("./convert"),n.selectPoints=t("./select"),n.moduleType="trace",n.name="scattergl",n.basePlotModule=t("../../plots/gl2d"),n.categories=["gl2d","symbols","errorBarsOK","markerColorscale","showLegend","scatter-like"],n.meta={},e.exports=n},{"../../plots/gl2d":808,"../scatter/colorbar":1034,"../scatter/hover":1041,"./attributes":1077,"./calc":1078,"./convert":1079,"./defaults":1080,"./select":1082}],1082:[function(t,e,r){"use strict";var n=t("../scatter/subtypes");e.exports=function(t,e){var r,i,a,o,s=t.cd,l=t.xaxis,u=t.yaxis,c=[],h=s[0].trace,f=s[0]._glTrace,d=f.scene;if(!n.hasMarkers(h)&&!n.hasText(h))return[];if(!1===e)for(r=0;r<s.length;r++)s[r].dim=0;else for(r=0;r<s.length;r++)i=s[r],a=l.c2p(i.x),o=u.c2p(i.y),e.contains([a,o])?(c.push({pointNumber:r,x:i.x,y:i.y}),i.dim=0):i.dim=1;return h.selection=c,f.update(h,s),d.glplot.setDirty(),c}},{"../scatter/subtypes":1052}],1083:[function(t,e,r){"use strict";var n=t("../scattergeo/attributes"),i=t("../scatter/attributes"),a=t("../../plots/mapbox/layout_attributes"),o=t("../../plots/attributes"),s=t("../../components/colorbar/attributes"),l=t("../../lib/extend").extendFlat,u=t("../../plot_api/edit_types").overrideAll,c=n.line,h=n.marker;e.exports=u({lon:n.lon,lat:n.lat,mode:l({},i.mode,{dflt:"markers"}),text:l({},i.text,{}),hovertext:l({},i.hovertext,{}),line:{color:c.color,width:c.width},connectgaps:i.connectgaps,marker:{symbol:{valType:"string",dflt:"circle",arrayOk:!0},opacity:h.opacity,size:h.size,sizeref:h.sizeref,sizemin:h.sizemin,sizemode:h.sizemode,color:h.color,colorscale:h.colorscale,cauto:h.cauto,cmax:h.cmax,cmin:h.cmin,autocolorscale:h.autocolorscale,reversescale:h.reversescale,showscale:h.showscale,colorbar:s},fill:n.fill,fillcolor:i.fillcolor,textfont:a.layers.symbol.textfont,textposition:a.layers.symbol.textposition,hoverinfo:l({},o.hoverinfo,{flags:["lon","lat","text","name"]})},"calc","nested")},{"../../components/colorbar/attributes":605,"../../lib/extend":717,"../../plot_api/edit_types":756,"../../plots/attributes":770,"../../plots/mapbox/layout_attributes":827,"../scatter/attributes":1031,"../scattergeo/attributes":1069}],1084:[function(t,e,r){"use strict";function n(){return{geojson:g.makeBlank(),layout:{visibility:"none"},paint:{}}}function i(t,e){function r(t,e){return a.opacity*e*(t.dim?_:1)}function n(t,r,n,i){void 0===e[r][n]&&(e[r][n]=i),t[r]=e[r][n]}var i,a=t[0].trace,o=a.marker;v.hasColorscale(a,"marker")?i=v.makeColorScaleFunc(v.extractScale(o.colorscale,o.cmin,o.cmax)):Array.isArray(o.color)&&(i=p.identity);var s;b.isBubble(a)&&(s=y(a));var l;Array.isArray(o.opacity)?l=function(t){return r(t,d(t.mo)?+p.constrain(t.mo,0,1):0)}:a._hasDimmedPts&&(l=function(t){return r(t,o.opacity)});for(var u=[],c=0;c<t.length;c++){var h=t[c],m=h.lonlat;if(!f(m)){var g={};if(i){var x=h.mcc=i(h.mc);n(g,w,x,c)}s&&n(g,M,s(h.ms),c),l&&n(g,k,l(h),c),u.push({type:"Feature",geometry:{type:"Point",coordinates:m},properties:g})}}return{type:"FeatureCollection",features:u}}function a(t){for(var e=t[0].trace,r=e.marker||{},n=r.symbol,i=e.text,a="circle"!==n?u(n):c,o=b.hasText(e)?u(i):c,s=[],l=0;l<t.length;l++){var h=t[l];f(h.lonlat)||s.push({type:"Feature",geometry:{type:"Point",coordinates:h.lonlat},properties:{symbol:a(h.mx),text:o(h.tx)}})}return{type:"FeatureCollection",features:s}}function o(t,e){var r,n=t.marker;if(Array.isArray(n.color)){for(var i=Object.keys(e[w]),a=[],o=0;o<i.length;o++){var s=i[o];a.push([e[w][s],s])}r={property:w,stops:a}}else r=n.color;return r}function s(t,e){var r,n=t.marker;if(Array.isArray(n.size)){for(var i=Object.keys(e[M]),a=[],o=0;o<i.length;o++){var s=i[o];a.push([e[M][s],+s])}r={property:M,stops:a.sort(h)}}else r=n.size/2;return r}function l(t,e){var r,n=t.marker;if(Array.isArray(n.opacity)||t._hasDimmedPts){for(var i=Object.keys(e[k]),a=[],o=0;o<i.length;o++){var s=i[o];a.push([e[k][s],+s])}r={property:k,stops:a.sort(h)}}else r=t.opacity*n.opacity;return r}function u(t){return Array.isArray(t)?function(t){return t}:t?function(){return t}:c}function c(){return""}function h(t,e){return t[0]-e[0]}function f(t){return t[0]===m}var d=t("fast-isnumeric"),p=t("../../lib"),m=t("../../constants/numerical").BADNUM,g=t("../../lib/geojson_utils"),v=t("../../components/colorscale"),y=t("../scatter/make_bubble_size_func"),b=t("../scatter/subtypes"),x=t("../../plots/mapbox/convert_text_opts"),_=t("../../constants/interactions").DESELECTDIM,w="circle-color",M="circle-radius",k="circle-opacity";e.exports=function(t){var e=t[0].trace,r=!0===e.visible,u="none"!==e.fill,c=b.hasLines(e),h=b.hasMarkers(e),f=b.hasText(e),d=h&&"circle"===e.marker.symbol,m=h&&"circle"!==e.marker.symbol,v=n(),y=n(),_=n(),A=n(),T={fill:v,line:y,circle:_,symbol:A};if(!r)return T;var S;if((u||c)&&(S=g.calcTraceToLineCoords(t)),u&&(v.geojson=g.makePolygon(S),v.layout.visibility="visible",p.extendFlat(v.paint,{"fill-color":e.fillcolor})),c&&(y.geojson=g.makeLine(S),y.layout.visibility="visible",p.extendFlat(y.paint,{"line-width":e.line.width,"line-color":e.line.color,"line-opacity":e.opacity})),d){var E={};E[w]={},E[M]={},E[k]={},_.geojson=i(t,E),_.layout.visibility="visible",p.extendFlat(_.paint,{"circle-opacity":l(e,E),"circle-color":o(e,E),"circle-radius":s(e,E)})}if((m||f)&&(A.geojson=a(t),p.extendFlat(A.layout,{visibility:"visible","icon-image":"{symbol}-15","text-field":"{text}"}),m&&(p.extendFlat(A.layout,{"icon-size":e.marker.size/10}),p.extendFlat(A.paint,{"icon-opacity":e.opacity*e.marker.opacity,"icon-color":e.marker.color})),f)){var L=(e.marker||{}).size,C=x(e.textposition,L);p.extendFlat(A.layout,{"text-size":e.textfont.size,"text-anchor":C.anchor,"text-offset":C.offset}),p.extendFlat(A.paint,{"text-color":e.textfont.color,"text-opacity":e.opacity})}return T}},{"../../components/colorscale":618,"../../constants/interactions":706,"../../constants/numerical":707,"../../lib":728,"../../lib/geojson_utils":721,"../../plots/mapbox/convert_text_opts":824,"../scatter/make_bubble_size_func":1047,"../scatter/subtypes":1052,"fast-isnumeric":131}],1085:[function(t,e,r){"use strict";function n(t,e,r){var n=r("lon")||[],i=r("lat")||[],a=Math.min(n.length,i.length);return a<n.length&&(e.lon=n.slice(0,a)),a<i.length&&(e.lat=i.slice(0,a)),a}var i=t("../../lib"),a=t("../scatter/subtypes"),o=t("../scatter/marker_defaults"),s=t("../scatter/line_defaults"),l=t("../scatter/text_defaults"),u=t("../scatter/fillcolor_defaults"),c=t("./attributes");e.exports=function(t,e,r,h){function f(r,n){return i.coerce(t,e,c,r,n)}if(!n(t,e,f))return void(e.visible=!1);if(f("text"),f("hovertext"),f("mode"),a.hasLines(e)&&(s(t,e,r,h,f,{noDash:!0}),f("connectgaps")),a.hasMarkers(e)){o(t,e,r,h,f,{noLine:!0});var d=e.marker;d.line={width:0},"circle"!==d.symbol&&(Array.isArray(d.size)&&(d.size=d.size[0]),Array.isArray(d.color)&&(d.color=d.color[0]))}a.hasText(e)&&l(t,e,h,f),f("fill"),"none"!==e.fill&&u(t,e,r,f)}},{"../../lib":728,"../scatter/fillcolor_defaults":1039,"../scatter/line_defaults":1043,"../scatter/marker_defaults":1048,"../scatter/subtypes":1052,"../scatter/text_defaults":1053,"./attributes":1083}],1086:[function(t,e,r){"use strict";e.exports=function(t,e){return t.lon=e.lon,t.lat=e.lat,t}},{}],1087:[function(t,e,r){"use strict";function n(t,e){function r(t){return t+"\xb0"}var n=e.hi||t.hoverinfo,i=n.split("+"),a=-1!==i.indexOf("all"),s=-1!==i.indexOf("lon"),l=-1!==i.indexOf("lat"),u=e.lonlat,c=[];return a||s&&l?c.push("("+r(u[0])+", "+r(u[1])+")"):s?c.push("lon: "+r(u[0])):l&&c.push("lat: "+r(u[1])),(a||-1!==i.indexOf("text"))&&o(e,t,c),c.join("<br>")}var i=t("../../components/fx"),a=t("../scatter/get_trace_color"),o=t("../scatter/fill_hover_text"),s=t("../../constants/numerical").BADNUM;e.exports=function(t,e,r){function o(t){var e=t.lonlat;if(e[0]===s)return 1/0;var n=Math.abs(c.c2p(e)-c.c2p([p,e[1]])),i=Math.abs(h.c2p(e)-h.c2p([e[0],r])),a=Math.max(3,t.mrc||0);return Math.max(Math.sqrt(n*n+i*i)-a,1-3/a)}var l=t.cd,u=l[0].trace,c=t.xa,h=t.ya,f=e>=0?Math.floor((e+180)/360):Math.ceil((e-180)/360),d=360*f,p=e-d;if(i.getClosest(l,o,t),!1!==t.index){var m=l[t.index],g=m.lonlat,v=[g[0]+d,g[1]],y=c.c2p(v),b=h.c2p(v),x=m.mrc||1;return t.x0=y-x,t.x1=y+x,t.y0=b-x,t.y1=b+x,t.color=a(u,m),t.extraText=n(u,m),[t]}}},{"../../components/fx":645,"../../constants/numerical":707,"../scatter/fill_hover_text":1038,"../scatter/get_trace_color":1040}],1088:[function(t,e,r){"use strict";var n={};n.attributes=t("./attributes"),n.supplyDefaults=t("./defaults"),n.colorbar=t("../scatter/colorbar"),n.calc=t("../scattergeo/calc"),n.plot=t("./plot"),n.hoverPoints=t("./hover"),n.eventData=t("./event_data"),n.selectPoints=t("./select"),n.moduleType="trace",n.name="scattermapbox",n.basePlotModule=t("../../plots/mapbox"),n.categories=["mapbox","gl","symbols","markerColorscale","showLegend","scatterlike"],n.meta={},e.exports=n},{"../../plots/mapbox":825,"../scatter/colorbar":1034,"../scattergeo/calc":1070,"./attributes":1083,"./defaults":1085,"./event_data":1086,"./hover":1087,"./plot":1089,"./select":1090}],1089:[function(t,e,r){"use strict";function n(t,e){this.mapbox=t,this.map=t.map,this.uid=e,this.idSourceFill=e+"-source-fill",this.idSourceLine=e+"-source-line",this.idSourceCircle=e+"-source-circle",this.idSourceSymbol=e+"-source-symbol",this.idLayerFill=e+"-layer-fill",this.idLayerLine=e+"-layer-line",this.idLayerCircle=e+"-layer-circle",this.idLayerSymbol=e+"-layer-symbol",this.mapbox.initSource(this.idSourceFill),this.mapbox.initSource(this.idSourceLine),this.mapbox.initSource(this.idSourceCircle),this.mapbox.initSource(this.idSourceSymbol),this.map.addLayer({id:this.idLayerFill,source:this.idSourceFill,type:"fill"}),this.map.addLayer({id:this.idLayerLine,source:this.idSourceLine,type:"line"}),this.map.addLayer({id:this.idLayerCircle,source:this.idSourceCircle,type:"circle"}),this.map.addLayer({id:this.idLayerSymbol,source:this.idSourceSymbol,type:"symbol"})}function i(t){return"visible"===t.layout.visibility}var a=t("./convert"),o=n.prototype;o.update=function(t){var e=this.mapbox,r=a(t);e.setOptions(this.idLayerFill,"setLayoutProperty",r.fill.layout),e.setOptions(this.idLayerLine,"setLayoutProperty",r.line.layout),e.setOptions(this.idLayerCircle,"setLayoutProperty",r.circle.layout),e.setOptions(this.idLayerSymbol,"setLayoutProperty",r.symbol.layout),i(r.fill)&&(e.setSourceData(this.idSourceFill,r.fill.geojson),e.setOptions(this.idLayerFill,"setPaintProperty",r.fill.paint)),i(r.line)&&(e.setSourceData(this.idSourceLine,r.line.geojson),e.setOptions(this.idLayerLine,"setPaintProperty",r.line.paint)),i(r.circle)&&(e.setSourceData(this.idSourceCircle,r.circle.geojson),e.setOptions(this.idLayerCircle,"setPaintProperty",r.circle.paint)),i(r.symbol)&&(e.setSourceData(this.idSourceSymbol,r.symbol.geojson),e.setOptions(this.idLayerSymbol,"setPaintProperty",r.symbol.paint)),t[0].trace._glTrace=this},o.dispose=function(){var t=this.map;t.removeLayer(this.idLayerFill),t.removeLayer(this.idLayerLine),t.removeLayer(this.idLayerCircle),t.removeLayer(this.idLayerSymbol),t.removeSource(this.idSourceFill),t.removeSource(this.idSourceLine),t.removeSource(this.idSourceCircle),t.removeSource(this.idSourceSymbol)},e.exports=function(t,e){var r=e[0].trace,i=new n(t,r.uid);return i.update(e),i}},{"./convert":1084}],1090:[function(t,e,r){"use strict";var n=t("../scatter/subtypes");e.exports=function(t,e){var r,i,a,o,s,l=t.cd,u=t.xaxis,c=t.yaxis,h=[],f=l[0].trace;if(f._hasDimmedPts=!1,!n.hasMarkers(f))return[];if(!1===e)for(s=0;s<l.length;s++)l[s].dim=0;else for(s=0;s<l.length;s++)r=l[s],i=r.lonlat,a=u.c2p(i),o=c.c2p(i),e.contains([a,o])?(f._hasDimmedPts=!0,h.push({pointNumber:s,lon:i[0],lat:i[1]}),r.dim=0):r.dim=1;return f._glTrace.update(l),h}},{"../scatter/subtypes":1052}],1091:[function(t,e,r){"use strict";var n=t("../scatter/attributes"),i=t("../../plots/attributes"),a=t("../../components/colorscale/color_attributes"),o=t("../../components/colorbar/attributes"),s=t("../../components/drawing/attributes").dash,l=t("../../lib/extend").extendFlat,u=n.marker,c=n.line,h=u.line;e.exports={a:{valType:"data_array",editType:"calc"},b:{valType:"data_array",editType:"calc"},c:{valType:"data_array",editType:"calc"},sum:{valType:"number",dflt:0,min:0,editType:"calc"},mode:l({},n.mode,{dflt:"markers"}),text:l({},n.text,{}),hovertext:l({},n.hovertext,{}),line:{color:c.color,width:c.width,dash:s,shape:l({},c.shape,{values:["linear","spline"]}),smoothing:c.smoothing,editType:"calc"},connectgaps:n.connectgaps,cliponaxis:n.cliponaxis,fill:l({},n.fill,{values:["none","toself","tonext"]}),fillcolor:n.fillcolor,marker:l({symbol:u.symbol,opacity:u.opacity,maxdisplayed:u.maxdisplayed,size:u.size,sizeref:u.sizeref,sizemin:u.sizemin,sizemode:u.sizemode,line:l({width:h.width,editType:"calc"},a("marker.line")),gradient:u.gradient,editType:"calc"},a("marker"),{showscale:u.showscale,colorbar:o}),textfont:n.textfont,textposition:n.textposition,hoverinfo:l({},i.hoverinfo,{flags:["a","b","c","text","name"]}),hoveron:n.hoveron}},{"../../components/colorbar/attributes":605,"../../components/colorscale/color_attributes":611,"../../components/drawing/attributes":627,"../../lib/extend":717,"../../plots/attributes":770,"../scatter/attributes":1031}],1092:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),i=t("../../plots/cartesian/axes"),a=t("../scatter/subtypes"),o=t("../scatter/colorscale_calc"),s=t("../scatter/arrays_to_calcdata"),l=["a","b","c"],u={a:["b","c"],b:["a","c"],c:["a","b"]};e.exports=function(t,e){var r,c,h,f,d,p,m=t._fullLayout[e.subplot],g=m.sum,v=e.sum||g;for(r=0;r<l.length;r++)if(h=l[r],!e[h]){for(d=e[u[h][0]],p=e[u[h][1]],f=new Array(d.length),c=0;c<d.length;c++)f[c]=v-d[c]-p[c];e[h]=f}var y,b,x,_,w,M,k=e.a.length,A=new Array(k);for(r=0;r<k;r++)y=e.a[r],b=e.b[r],x=e.c[r],n(y)&&n(b)&&n(x)?(y=+y,b=+b,x=+x,_=g/(y+b+x),1!==_&&(y*=_,b*=_,x*=_),M=y,w=x-b,A[r]={x:w,y:M,a:y,b:b,c:x}):A[r]={x:!1,y:!1};var T,S;if(a.hasMarkers(e)&&(T=e.marker,S=T.size,Array.isArray(S))){var E={type:"linear"};i.setConvert(E),S=E.makeCalcdata(e.marker,"size"),S.length>k&&S.splice(k,S.length-k)}return o(e),s(A,e),A}},{"../../plots/cartesian/axes":772,"../scatter/arrays_to_calcdata":1030,"../scatter/colorscale_calc":1035,"../scatter/subtypes":1052,"fast-isnumeric":131}],1093:[function(t,e,r){"use strict";var n=t("../../lib"),i=t("../scatter/constants"),a=t("../scatter/subtypes"),o=t("../scatter/marker_defaults"),s=t("../scatter/line_defaults"),l=t("../scatter/line_shape_defaults"),u=t("../scatter/text_defaults"),c=t("../scatter/fillcolor_defaults"),h=t("./attributes");e.exports=function(t,e,r,f){function d(r,i){return n.coerce(t,e,h,r,i)}var p,m=d("a"),g=d("b"),v=d("c");if(m?(p=m.length,g?(p=Math.min(p,g.length),v&&(p=Math.min(p,v.length))):p=v?Math.min(p,v.length):0):g&&v&&(p=Math.min(g.length,v.length)),!p)return void(e.visible=!1);m&&p<m.length&&(e.a=m.slice(0,p)),g&&p<g.length&&(e.b=g.slice(0,p)),v&&p<v.length&&(e.c=v.slice(0,p)),d("sum"),d("text"),d("hovertext"),d("mode",p<i.PTS_LINESONLY?"lines+markers":"lines"),a.hasLines(e)&&(s(t,e,r,f,d),l(t,e,d),d("connectgaps")),a.hasMarkers(e)&&o(t,e,r,f,d,{gradient:!0}),a.hasText(e)&&u(t,e,f,d);var y=[];(a.hasMarkers(e)||a.hasText(e))&&(d("marker.maxdisplayed"),y.push("points")),d("fill"),"none"!==e.fill&&(c(t,e,r,d),a.hasLines(e)||l(t,e,d)),"tonext"!==e.fill&&"toself"!==e.fill||y.push("fills"),d("hoveron",y.join("+")||"points"),d("cliponaxis")}},{"../../lib":728,"../scatter/constants":1036,
"../scatter/fillcolor_defaults":1039,"../scatter/line_defaults":1043,"../scatter/line_shape_defaults":1045,"../scatter/marker_defaults":1048,"../scatter/subtypes":1052,"../scatter/text_defaults":1053,"./attributes":1091}],1094:[function(t,e,r){"use strict";var n=t("../scatter/hover"),i=t("../../plots/cartesian/axes");e.exports=function(t,e,r,a){function o(t,e){y.push(t._hovertitle+": "+i.tickText(t,e,"hover").text)}var s=n(t,e,r,a);if(s&&!1!==s[0].index){var l=s[0];if(void 0===l.index){var u=1-l.y0/t.ya._length,c=t.xa._length,h=c*u/2,f=c-h;return l.x0=Math.max(Math.min(l.x0,f),h),l.x1=Math.max(Math.min(l.x1,f),h),s}var d=l.cd[l.index];l.a=d.a,l.b=d.b,l.c=d.c,l.xLabelVal=void 0,l.yLabelVal=void 0;var p=l.trace,m=p._ternary,g=d.hi||p.hoverinfo,v=g.split("+"),y=[];return-1!==v.indexOf("all")&&(v=["a","b","c"]),-1!==v.indexOf("a")&&o(m.aaxis,d.a),-1!==v.indexOf("b")&&o(m.baxis,d.b),-1!==v.indexOf("c")&&o(m.caxis,d.c),l.extraText=y.join("<br>"),s}}},{"../../plots/cartesian/axes":772,"../scatter/hover":1041}],1095:[function(t,e,r){"use strict";var n={};n.attributes=t("./attributes"),n.supplyDefaults=t("./defaults"),n.colorbar=t("../scatter/colorbar"),n.calc=t("./calc"),n.plot=t("./plot"),n.style=t("./style"),n.hoverPoints=t("./hover"),n.selectPoints=t("./select"),n.moduleType="trace",n.name="scatterternary",n.basePlotModule=t("../../plots/ternary"),n.categories=["ternary","symbols","markerColorscale","showLegend","scatter-like"],n.meta={},e.exports=n},{"../../plots/ternary":839,"../scatter/colorbar":1034,"./attributes":1091,"./calc":1092,"./defaults":1093,"./hover":1094,"./plot":1096,"./select":1097,"./style":1098}],1096:[function(t,e,r){"use strict";var n=t("../scatter/plot");e.exports=function(t,e){var r=t.plotContainer;r.select(".scatterlayer").selectAll("*").remove();for(var i={xaxis:t.xaxis,yaxis:t.yaxis,plot:r,layerClipId:t._hasClipOnAxisFalse?t.clipIdRelative:null},a=0;a<e.length;a++)e[a][0].trace._ternary=t;n(t.graphDiv,i,e)}},{"../scatter/plot":1049}],1097:[function(t,e,r){arguments[4][1067][0].apply(r,arguments)},{"../scatter/select":1050,dup:1067}],1098:[function(t,e,r){arguments[4][1068][0].apply(r,arguments)},{"../scatter/style":1051,dup:1068}],1099:[function(t,e,r){"use strict";function n(t){return{valType:"boolean",dflt:!1}}function i(t){return{show:{valType:"boolean",dflt:!1},project:{x:n("x"),y:n("y"),z:n("z")},color:{valType:"color",dflt:a.defaultLine},usecolormap:{valType:"boolean",dflt:!1},width:{valType:"number",min:1,max:16,dflt:2},highlight:{valType:"boolean",dflt:!0},highlightcolor:{valType:"color",dflt:a.defaultLine},highlightwidth:{valType:"number",min:1,max:16,dflt:2}}}var a=t("../../components/color"),o=t("../../components/colorscale/attributes"),s=t("../../components/colorbar/attributes"),l=t("../../lib/extend").extendFlat,u=t("../../plot_api/edit_types").overrideAll,c=e.exports=u({z:{valType:"data_array"},x:{valType:"data_array"},y:{valType:"data_array"},text:{valType:"data_array"},surfacecolor:{valType:"data_array"},cauto:o.zauto,cmin:o.zmin,cmax:o.zmax,colorscale:o.colorscale,autocolorscale:l({},o.autocolorscale,{dflt:!1}),reversescale:o.reversescale,showscale:o.showscale,colorbar:s,contours:{x:i("x"),y:i("y"),z:i("z")},hidesurface:{valType:"boolean",dflt:!1},lightposition:{x:{valType:"number",min:-1e5,max:1e5,dflt:10},y:{valType:"number",min:-1e5,max:1e5,dflt:1e4},z:{valType:"number",min:-1e5,max:1e5,dflt:0}},lighting:{ambient:{valType:"number",min:0,max:1,dflt:.8},diffuse:{valType:"number",min:0,max:1,dflt:.8},specular:{valType:"number",min:0,max:2,dflt:.05},roughness:{valType:"number",min:0,max:1,dflt:.5},fresnel:{valType:"number",min:0,max:5,dflt:.2}},opacity:{valType:"number",min:0,max:1,dflt:1},_deprecated:{zauto:l({},o.zauto,{}),zmin:l({},o.zmin,{}),zmax:l({},o.zmax,{})}},"calc","nested");c.x.editType=c.y.editType=c.z.editType="calc+clearAxisTypes"},{"../../components/color":604,"../../components/colorbar/attributes":605,"../../components/colorscale/attributes":609,"../../lib/extend":717,"../../plot_api/edit_types":756}],1100:[function(t,e,r){"use strict";var n=t("../../components/colorscale/calc");e.exports=function(t,e){e.surfacecolor?n(e,e.surfacecolor,"","c"):n(e,e.z,"","c")}},{"../../components/colorscale/calc":610}],1101:[function(t,e,r){"use strict";var n=t("fast-isnumeric"),i=t("../../lib"),a=t("../../plots/plots"),o=t("../../components/colorscale"),s=t("../../components/colorbar/draw");e.exports=function(t,e){var r=e[0].trace,l="cb"+r.uid,u=r.cmin,c=r.cmax,h=r.surfacecolor||r.z;if(n(u)||(u=i.aggNums(Math.min,null,h)),n(c)||(c=i.aggNums(Math.max,null,h)),t._fullLayout._infolayer.selectAll("."+l).remove(),!r.showscale)return void a.autoMargin(t,l);var f=e[0].t.cb=s(t,l),d=o.makeColorScaleFunc(o.extractScale(r.colorscale,u,c),{noNumericCheck:!0});f.fillcolor(d).filllevels({start:u,end:c,size:(c-u)/254}).options(r.colorbar)()}},{"../../components/colorbar/draw":607,"../../components/colorscale":618,"../../lib":728,"../../plots/plots":831,"fast-isnumeric":131}],1102:[function(t,e,r){"use strict";function n(t,e,r){this.scene=t,this.uid=r,this.surface=e,this.data=null,this.showContour=[!1,!1,!1],this.dataScale=1}function i(t,e){return void 0===e&&(e=1),t.map(function(t){var r=t[0],n=p(t[1]),i=n.toRgb();return{index:r,rgb:[i.r,i.g,i.b,e]}})}function a(t){var e=t[0].rgb,r=t[t.length-1].rgb;return e[0]===r[0]&&e[1]===r[1]&&e[2]===r[2]&&e[3]===r[3]}function o(t){var e=t.shape,r=[e[0]+2,e[1]+2],n=c(new Float32Array(r[0]*r[1]),r);return d.assign(n.lo(1,1).hi(e[0],e[1]),t),d.assign(n.lo(1).hi(e[0],1),t.hi(e[0],1)),d.assign(n.lo(1,r[1]-1).hi(e[0],1),t.lo(0,e[1]-1).hi(e[0],1)),d.assign(n.lo(0,1).hi(1,e[1]),t.hi(1)),d.assign(n.lo(r[0]-1,1).hi(1,e[1]),t.lo(e[0]-1)),n.set(0,0,t.get(0,0)),n.set(0,r[1]-1,t.get(0,e[1]-1)),n.set(r[0]-1,0,t.get(e[0]-1,0)),n.set(r[0]-1,r[1]-1,t.get(e[0]-1,e[1]-1)),n}function s(t){var e=Math.max(t[0].shape[0],t[0].shape[1]);if(e<g){for(var r=g/e,n=[0|Math.floor(t[0].shape[0]*r+1),0|Math.floor(t[0].shape[1]*r+1)],i=n[0]*n[1],a=0;a<t.length;++a){var s=o(t[a]),l=c(new Float32Array(i),n);h(l,s,[r,0,0,0,r,0,0,0,1]),t[a]=l}return r}return 1}function l(t,e){var r=t.glplot.gl,i=u({gl:r}),a=new n(t,i,e.uid);return i._trace=a,a.update(e),t.glplot.add(i),a}var u=t("gl-surface3d"),c=t("ndarray"),h=t("ndarray-homography"),f=t("ndarray-fill"),d=t("ndarray-ops"),p=t("tinycolor2"),m=t("../../lib/str2rgbarray"),g=128,v=n.prototype;v.handlePick=function(t){if(t.object===this.surface){var e=t.index=[Math.min(0|Math.round(t.data.index[0]/this.dataScale-1),this.data.z[0].length-1),Math.min(0|Math.round(t.data.index[1]/this.dataScale-1),this.data.z.length-1)],r=[0,0,0];Array.isArray(this.data.x[0])?r[0]=this.data.x[e[1]][e[0]]:r[0]=this.data.x[e[0]],Array.isArray(this.data.y[0])?r[1]=this.data.y[e[1]][e[0]]:r[1]=this.data.y[e[1]],r[2]=this.data.z[e[1]][e[0]],t.traceCoordinate=r;var n=this.scene.fullSceneLayout;t.dataCoordinate=[n.xaxis.d2l(r[0],0,this.data.xcalendar)*this.scene.dataScale[0],n.yaxis.d2l(r[1],0,this.data.ycalendar)*this.scene.dataScale[1],n.zaxis.d2l(r[2],0,this.data.zcalendar)*this.scene.dataScale[2]];var i=this.data.text;return i&&i[e[1]]&&void 0!==i[e[1]][e[0]]?t.textLabel=i[e[1]][e[0]]:t.textLabel="",t.data.dataCoordinate=t.dataCoordinate.slice(),this.surface.highlight(t.data),this.scene.glplot.spikes.position=t.dataCoordinate,!0}},v.setContourLevels=function(){for(var t=[[],[],[]],e=!1,r=0;r<3;++r)this.showContour[r]&&(e=!0,t[r]=this.scene.contourLevels[r]);e&&this.surface.update({levels:t})},v.update=function(t){var e,r=this.scene,n=r.fullSceneLayout,o=this.surface,l=t.opacity,u=i(t.colorscale,l),h=t.z,d=t.x,p=t.y,g=n.xaxis,v=n.yaxis,y=n.zaxis,b=r.dataScale,x=h[0].length,_=h.length,w=[c(new Float32Array(x*_),[x,_]),c(new Float32Array(x*_),[x,_]),c(new Float32Array(x*_),[x,_])],M=w[0],k=w[1],A=r.contourLevels;this.data=t;var T=t.xcalendar,S=t.ycalendar,E=t.zcalendar;f(w[2],function(t,e){return y.d2l(h[e][t],0,E)*b[2]}),Array.isArray(d[0])?f(M,function(t,e){return g.d2l(d[e][t],0,T)*b[0]}):f(M,function(t){return g.d2l(d[t],0,T)*b[0]}),Array.isArray(p[0])?f(k,function(t,e){return v.d2l(p[e][t],0,S)*b[1]}):f(k,function(t,e){return v.d2l(p[e],0,S)*b[1]});var L={colormap:u,levels:[[],[],[]],showContour:[!0,!0,!0],showSurface:!t.hidesurface,contourProject:[[!1,!1,!1],[!1,!1,!1],[!1,!1,!1]],contourWidth:[1,1,1],contourColor:[[1,1,1,1],[1,1,1,1],[1,1,1,1]],contourTint:[1,1,1],dynamicColor:[[1,1,1,1],[1,1,1,1],[1,1,1,1]],dynamicWidth:[1,1,1],dynamicTint:[1,1,1],opacity:t.opacity};if(L.intensityBounds=[t.cmin,t.cmax],t.surfacecolor){var C=c(new Float32Array(x*_),[x,_]);f(C,function(e,r){return t.surfacecolor[r][e]}),w.push(C)}else L.intensityBounds[0]*=b[2],L.intensityBounds[1]*=b[2];this.dataScale=s(w),t.surfacecolor&&(L.intensity=w.pop());var I=[!0,!0,!0],z=["x","y","z"];for(e=0;e<3;++e){var D=t.contours[z[e]];I[e]=D.highlight,L.showContour[e]=D.show||D.highlight,L.showContour[e]&&(L.contourProject[e]=[D.project.x,D.project.y,D.project.z],D.show?(this.showContour[e]=!0,L.levels[e]=A[e],o.highlightColor[e]=L.contourColor[e]=m(D.color),D.usecolormap?o.highlightTint[e]=L.contourTint[e]=0:o.highlightTint[e]=L.contourTint[e]=1,L.contourWidth[e]=D.width):this.showContour[e]=!1,D.highlight&&(L.dynamicColor[e]=m(D.highlightcolor),L.dynamicWidth[e]=D.highlightwidth))}a(u)&&(L.vertexColor=!0),L.coords=w,o.update(L),o.visible=t.visible,o.enableDynamic=I,o.snapToData=!0,"lighting"in t&&(o.ambientLight=t.lighting.ambient,o.diffuseLight=t.lighting.diffuse,o.specularLight=t.lighting.specular,o.roughness=t.lighting.roughness,o.fresnel=t.lighting.fresnel),"lightposition"in t&&(o.lightPosition=[t.lightposition.x,t.lightposition.y,t.lightposition.z]),l&&l<1&&(o.supportsTransparency=!0)},v.dispose=function(){this.scene.glplot.remove(this.surface),this.surface.dispose()},e.exports=l},{"../../lib/str2rgbarray":749,"gl-surface3d":266,ndarray:467,"ndarray-fill":457,"ndarray-homography":459,"ndarray-ops":461,tinycolor2:534}],1103:[function(t,e,r){"use strict";function n(t,e,r){e in t&&!(r in t)&&(t[r]=t[e])}var i=t("../../registry"),a=t("../../lib"),o=t("../../components/colorscale/defaults"),s=t("./attributes");e.exports=function(t,e,r,l){function u(r,n){return a.coerce(t,e,s,r,n)}var c,h,f=u("z");if(!f)return void(e.visible=!1);var d=f[0].length,p=f.length;if(u("x"),u("y"),i.getComponentMethod("calendars","handleTraceDefaults")(t,e,["x","y","z"],l),!Array.isArray(e.x))for(e.x=[],c=0;c<d;++c)e.x[c]=c;if(u("text"),!Array.isArray(e.y))for(e.y=[],c=0;c<p;++c)e.y[c]=c;["lighting.ambient","lighting.diffuse","lighting.specular","lighting.roughness","lighting.fresnel","lightposition.x","lightposition.y","lightposition.z","hidesurface","opacity"].forEach(function(t){u(t)});var m=u("surfacecolor");u("colorscale");var g=["x","y","z"];for(c=0;c<3;++c){var v="contours."+g[c],y=u(v+".show"),b=u(v+".highlight");if(y||b)for(h=0;h<3;++h)u(v+".project."+g[h]);y&&(u(v+".color"),u(v+".width"),u(v+".usecolormap")),b&&(u(v+".highlightcolor"),u(v+".highlightwidth"))}m||(n(t,"zmin","cmin"),n(t,"zmax","cmax"),n(t,"zauto","cauto")),o(t,e,l,u,{prefix:"",cLetter:"c"})}},{"../../components/colorscale/defaults":613,"../../lib":728,"../../registry":846,"./attributes":1099}],1104:[function(t,e,r){"use strict";var n={};n.attributes=t("./attributes"),n.supplyDefaults=t("./defaults"),n.colorbar=t("./colorbar"),n.calc=t("./calc"),n.plot=t("./convert"),n.moduleType="trace",n.name="surface",n.basePlotModule=t("../../plots/gl3d"),n.categories=["gl3d","2dMap","noOpacity"],n.meta={},e.exports=n},{"../../plots/gl3d":811,"./attributes":1099,"./calc":1100,"./colorbar":1101,"./convert":1102,"./defaults":1103}],1105:[function(t,e,r){"use strict";var n=t("../../components/annotations/attributes"),i=t("../../lib/extend").extendFlat,a=t("../../plot_api/edit_types").overrideAll,o=t("../../plots/font_attributes");e.exports=a({domain:{x:{valType:"info_array",items:[{valType:"number",min:0,max:1},{valType:"number",min:0,max:1}],dflt:[0,1]},y:{valType:"info_array",items:[{valType:"number",min:0,max:1},{valType:"number",min:0,max:1}],dflt:[0,1]}},columnwidth:{valType:"number",arrayOk:!0,dflt:null},columnorder:{valType:"data_array"},header:{values:{valType:"data_array",dflt:[]},format:{valType:"data_array",dflt:[]},prefix:{valType:"string",arrayOk:!0,dflt:null},suffix:{valType:"string",arrayOk:!0,dflt:null},height:{valType:"number",dflt:28},align:i({},n.align,{arrayOk:!0}),line:{width:{valType:"number",arrayOk:!0,dflt:1},color:{valType:"color",arrayOk:!0,dflt:"grey"}},fill:{color:{valType:"color",arrayOk:!0,dflt:"white"}},font:i({},o({arrayOk:!0}))},cells:{values:{valType:"data_array",dflt:[]},format:{valType:"data_array",dflt:[]},prefix:{valType:"string",arrayOk:!0,dflt:null},suffix:{valType:"string",arrayOk:!0,dflt:null},height:{valType:"number",dflt:20},align:i({},n.align,{arrayOk:!0}),line:{width:{valType:"number",arrayOk:!0,dflt:1},color:{valType:"color",arrayOk:!0,dflt:"grey"}},fill:{color:{valType:"color",arrayOk:!0,dflt:"white"}},font:i({},o({arrayOk:!0}))}},"calc","from-root")},{"../../components/annotations/attributes":587,"../../lib/extend":717,"../../plot_api/edit_types":756,"../../plots/font_attributes":796}],1106:[function(t,e,r){"use strict";var n=t("../../plots/plots"),i=t("./plot");r.name="table",r.attr="type",r.plot=function(t){var e=n.getSubplotCalcData(t.calcdata,"table","table");e.length&&i(t,e)},r.clean=function(t,e,r,n){var i=n._has&&n._has("table"),a=e._has&&e._has("table");i&&!a&&n._paperdiv.selectAll(".table").remove()}},{"../../plots/plots":831,"./plot":1113}],1107:[function(t,e,r){"use strict";var n=t("../../lib/gup").wrap;e.exports=function(t,e){return n(e)}},{"../../lib/gup":725}],1108:[function(t,e,r){"use strict";e.exports={maxDimensionCount:60,overdrag:45,cellPad:8,latexCheck:/^\$.*\$$/,wrapSplitCharacter:" ",wrapSpacer:" ",lineBreaker:"<br>",uplift:5,goldenRatio:1.618,columnTitleOffset:28,columnExtentOffset:10,transitionEase:"cubic-out",transitionDuration:100,releaseTransitionEase:"cubic-out",releaseTransitionDuration:120,scrollbarWidth:8,scrollbarCaptureWidth:18,scrollbarOffset:5,scrollbarHideDelay:1e3,scrollbarHideDuration:1e3,cn:{table:"table",tableControlView:"table-control-view",scrollBackground:"scroll-background",yColumn:"y-column",columnBlock:"column-block",scrollAreaClip:"scroll-area-clip",scrollAreaClipRect:"scroll-area-clip-rect",columnBoundary:"column-boundary",columnBoundaryClippath:"column-boundary-clippath",columnBoundaryRect:"column-boundary-rect",columnCells:"column-cells",columnCell:"column-cell",cellRect:"cell-rect",cellText:"cell-text",cellTextHolder:"cell-text-holder",scrollbarKit:"scrollbar-kit",scrollbar:"scrollbar",scrollbarSlider:"scrollbar-slider",scrollbarGlyph:"scrollbar-glyph",scrollbarCaptureZone:"scrollbar-capture-zone"}}},{}],1109:[function(t,e,r){"use strict";function n(t){return t.calcdata.columns.reduce(function(e,r){return r.xIndex<t.xIndex?e+r.columnWidth:e},0)}function i(t,e){return Object.keys(t).map(function(r){return l({},t[r],{auxiliaryBlocks:e})})}function a(t,e){for(var r,n={},i=0,a=0,s=o(),l=0,u=0,c=0;c<t.length;c++)r=t[c],s.rows.push({rowIndex:c,rowHeight:r}),((a+=r)>=e||c===t.length-1)&&(n[i]=s,s.key=u++,s.firstRowIndex=l,s.lastRowIndex=c,s=o(),i+=a,l=c+1,a=0);return n}function o(){return{firstRowIndex:null,lastRowIndex:null,rows:[]}}var s=t("./constants"),l=t("../../lib/extend").extendFlat;e.exports=function(t,e){var r=e.header.values.map(function(t){return Array.isArray(t)?t:[t]}),o=e.cells.values,u=e.domain,c=Math.floor(t._fullLayout._size.w*(u.x[1]-u.x[0])),h=Math.floor(t._fullLayout._size.h*(u.y[1]-u.y[0])),f=r.length?r[0].map(function(){return e.header.height}):[],d=o.length?o[0].map(function(){return e.cells.height}):[],p=f.reduce(function(t,e){return t+e},0),m=h-p,g=m+s.uplift,v=a(d,g),y=a(f,p),b=i(y,[]),x=i(v,b),_={},w=e._fullInput.columnorder,M=r.map(function(t,r){return Array.isArray(e.columnwidth)?e.columnwidth[Math.min(r,e.columnwidth.length-1)]:isFinite(e.columnwidth)&&null!==e.columnwidth?e.columnwidth:1}),k=M.reduce(function(t,e){return t+e},0);M=M.map(function(t){return t/k*c});var A={key:e.index,translateX:u.x[0]*t._fullLayout._size.w,translateY:t._fullLayout._size.h*(1-u.y[1]),size:t._fullLayout._size,width:c,height:h,columnOrder:w,groupHeight:h,rowBlocks:x,headerRowBlocks:b,scrollY:0,cells:e.cells,headerCells:l({},e.header,{values:r}),gdColumns:r.map(function(t){return t[0]}),gdColumnsOriginalOrder:r.map(function(t){return t[0]}),prevPages:[0,0],scrollbarState:{scrollbarScrollInProgress:!1},columns:r.map(function(t,e){var r=_[t];return _[t]=(r||0)+1,{key:t+"__"+_[t],label:t,specIndex:e,xIndex:w[e],xScale:n,x:void 0,calcdata:void 0,columnWidth:M[e]}})};return A.columns.forEach(function(t){t.calcdata=A,t.x=n(t)}),A}},{"../../lib/extend":717,"./constants":1108}],1110:[function(t,e,r){"use strict";function n(t){var e=t.rowBlocks[t.page],r=e?e.rows[0].rowIndex:0;return[r,e?r+e.rows.length:0]}var i=t("../../lib/extend").extendFlat;r.splitToPanels=function(t){var e=[0,0],r=i({},t,{key:"header",type:"header",page:0,prevPages:e,currentRepaint:[null,null],dragHandle:!0,values:t.calcdata.headerCells.values[t.specIndex],rowBlocks:t.calcdata.headerRowBlocks,calcdata:i({},t.calcdata,{cells:t.calcdata.headerCells})});return[i({},t,{key:"cells1",type:"cells",page:0,prevPages:e,currentRepaint:[null,null],dragHandle:!1,values:t.calcdata.cells.values[t.specIndex],rowBlocks:t.calcdata.rowBlocks}),i({},t,{key:"cells2",type:"cells",page:1,prevPages:e,currentRepaint:[null,null],dragHandle:!1,values:t.calcdata.cells.values[t.specIndex],rowBlocks:t.calcdata.rowBlocks}),r]},r.splitToCells=function(t){var e=n(t);return t.values.slice(e[0],e[1]).map(function(r,n){return{keyWithinBlock:n+("string"==typeof r&&r.match(/[<$&> ]/)?"_keybuster_"+Math.random():""),key:e[0]+n,column:t,calcdata:t.calcdata,page:t.page,rowBlocks:t.rowBlocks,value:r}})}},{"../../lib/extend":717}],1111:[function(t,e,r){"use strict";function n(t,e){for(var r=t.columnorder||[],n=t.header.values.length,i=r.slice(0,n),a=i.slice().sort(function(t,e){return t-e}),o=i.map(function(t){return a.indexOf(t)}),s=o.length;s<n;s++)o.push(s);e("columnorder",o)}var i=t("../../lib"),a=t("./attributes");e.exports=function(t,e,r,o){function s(r,n){return i.coerce(t,e,a,r,n)}s("domain.x"),s("domain.y"),s("columnwidth"),s("header.values"),s("header.format"),s("header.align"),s("header.prefix"),s("header.suffix"),s("header.height"),s("header.line.width"),s("header.line.color"),s("header.fill.color"),i.coerceFont(s,"header.font",i.extendFlat({},o.font)),n(e,s),s("cells.values"),s("cells.format"),s("cells.align"),s("cells.prefix"),s("cells.suffix"),s("cells.height"),s("cells.line.width"),s("cells.line.color"),s("cells.fill.color"),i.coerceFont(s,"cells.font",i.extendFlat({},o.font))}},{"../../lib":728,"./attributes":1105}],1112:[function(t,e,r){"use strict";var n={};n.attributes=t("./attributes"),n.supplyDefaults=t("./defaults"),n.calc=t("./calc"),n.plot=t("./plot"),n.moduleType="trace",n.name="table",n.basePlotModule=t("./base_plot"),n.categories=["noOpacity"],n.meta={},e.exports=n},{"./attributes":1105,"./base_plot":1106,"./calc":1107,"./defaults":1111,"./plot":1113}],1113:[function(t,e,r){"use strict";function n(t,e){return"clip"+t._fullLayout._uid+"_scrollAreaBottomClip_"+e.key}function i(t,e){return"clip"+t._fullLayout._uid+"_columnBoundaryClippath_"+e.calcdata.key+"_"+e.specIndex}function a(t){return[].concat.apply([],t.map(function(t){return t})).map(function(t){return t.__data__})}function o(t,e,r){function n(t){var e=t.rowBlocks;return D(e,e.length-1)+(e.length?P(e[e.length-1],1/0):1)}var i=t.selectAll("."+j.cn.scrollbarKit).data(B.repeat,B.keyFun);i.enter().append("g").classed(j.cn.scrollbarKit,!0).style("shape-rendering","geometricPrecision"),i.each(function(t){var e=t.scrollbarState;e.totalHeight=n(t),e.scrollableAreaHeight=t.groupHeight-k(t),e.currentlyVisibleHeight=Math.min(e.totalHeight,e.scrollableAreaHeight),e.ratio=e.currentlyVisibleHeight/e.totalHeight,e.barLength=Math.max(e.ratio*e.currentlyVisibleHeight,j.goldenRatio*j.scrollbarWidth),e.barWiggleRoom=e.currentlyVisibleHeight-e.barLength,e.wiggleRoom=Math.max(0,e.totalHeight-e.scrollableAreaHeight),e.topY=0===e.barWiggleRoom?0:t.scrollY/e.wiggleRoom*e.barWiggleRoom,e.bottomY=e.topY+e.barLength,e.dragMultiplier=e.wiggleRoom/e.barWiggleRoom}).attr("transform",function(t){return"translate("+(t.width+j.scrollbarWidth/2+j.scrollbarOffset)+" "+k(t)+")"});var a=i.selectAll("."+j.cn.scrollbar).data(B.repeat,B.keyFun);a.enter().append("g").classed(j.cn.scrollbar,!0);var o=a.selectAll("."+j.cn.scrollbarSlider).data(B.repeat,B.keyFun);o.enter().append("g").classed(j.cn.scrollbarSlider,!0),o.attr("transform",function(t){return"translate(0 "+(t.scrollbarState.topY||0)+")"});var s=o.selectAll("."+j.cn.scrollbarGlyph).data(B.repeat,B.keyFun);s.enter().append("line").classed(j.cn.scrollbarGlyph,!0).attr("stroke","black").attr("stroke-width",j.scrollbarWidth).attr("stroke-linecap","round").attr("y1",j.scrollbarWidth/2),s.attr("y2",function(t){return t.scrollbarState.barLength-j.scrollbarWidth/2}).attr("stroke-opacity",function(t){return t.columnDragInProgress||!t.scrollbarState.barWiggleRoom||r?0:.4}),s.transition().delay(0).duration(0),s.transition().delay(j.scrollbarHideDelay).duration(j.scrollbarHideDuration).attr("stroke-opacity",0);var l=a.selectAll("."+j.cn.scrollbarCaptureZone).data(B.repeat,B.keyFun);l.enter().append("line").classed(j.cn.scrollbarCaptureZone,!0).attr("stroke","white").attr("stroke-opacity",.01).attr("stroke-width",j.scrollbarCaptureWidth).attr("stroke-linecap","butt").attr("y1",0).on("mousedown",function(r){var n=N.event.y,i=this.getBoundingClientRect(),a=r.scrollbarState,o=n-i.top,s=N.scale.linear().domain([0,a.scrollableAreaHeight]).range([0,a.totalHeight]).clamp(!0);a.topY<=o&&o<=a.bottomY||S(e,t,null,s(o-a.barLength/2))(r)}).call(N.behavior.drag().origin(function(t){return N.event.stopPropagation(),t.scrollbarState.scrollbarScrollInProgress=!0,t}).on("drag",S(e,t)).on("dragend",function(){})),l.attr("y2",function(t){return t.scrollbarState.scrollableAreaHeight})}function s(t,e,r,n){var i=l(r),a=u(i);d(a),m(c(a));var o=f(a),s=h(o);p(s),g(s,e,n,t),z(a)}function l(t){var e=t.selectAll("."+j.cn.columnCells).data(B.repeat,B.keyFun);return e.enter().append("g").classed(j.cn.columnCells,!0),e.exit().remove(),e}function u(t){var e=t.selectAll("."+j.cn.columnCell).data(Y.splitToCells,function(t){return t.keyWithinBlock});return e.enter().append("g").classed(j.cn.columnCell,!0),e.exit().remove(),e}function c(t){var e=t.selectAll("."+j.cn.cellRect).data(B.repeat,function(t){return t.keyWithinBlock});return e.enter().append("rect").classed(j.cn.cellRect,!0),e}function h(t){var e=t.selectAll("."+j.cn.cellText).data(B.repeat,function(t){return t.keyWithinBlock});return e.enter().append("text").classed(j.cn.cellText,!0).style("cursor",function(){return"auto"}).on("mousedown",function(){N.event.stopPropagation()}),e}function f(t){var e=t.selectAll("."+j.cn.cellTextHolder).data(B.repeat,function(t){return t.keyWithinBlock});return e.enter().append("g").classed(j.cn.cellTextHolder,!0).style("shape-rendering","geometricPrecision"),e}function d(t){t.each(function(t,e){var r=t.calcdata.cells.font,n=t.column.specIndex,i={size:x(r.size,n,e),color:x(r.color,n,e),family:x(r.family,n,e)};t.rowNumber=t.key,t.align=x(t.calcdata.cells.align,n,e),t.cellBorderWidth=x(t.calcdata.cells.line.width,n,e),t.font=i})}function p(t){t.each(function(t){U.font(N.select(this),t.font)})}function m(t){t.attr("width",function(t){return t.column.columnWidth}).attr("stroke-width",function(t){return t.cellBorderWidth}).each(function(t){var e=N.select(this);W.stroke(e,x(t.calcdata.cells.line.color,t.column.specIndex,t.rowNumber)),W.fill(e,x(t.calcdata.cells.fill.color,t.column.specIndex,t.rowNumber))})}function g(t,e,r,n){t.text(function(t){var e=t.column.specIndex,r=t.rowNumber,n=t.value,i="string"==typeof n,a=i&&n.match(/<br>/i),o=!i||a;t.mayHaveMarkup=i&&n.match(/[<&>]/);var s=v(n);t.latex=s;var l,u=s?"":x(t.calcdata.cells.prefix,e,r)||"",c=s?"":x(t.calcdata.cells.suffix,e,r)||"",h=s?null:x(t.calcdata.cells.format,e,r)||null,f=u+(h?N.format(h)(t.value):t.value)+c;t.wrappingNeeded=!t.wrapped&&!o&&!s&&(l=y(f)),t.cellHeightMayIncrease=a||s||t.mayHaveMarkup||(void 0===l?y(f):l),t.needsConvertToTspans=t.mayHaveMarkup||t.wrappingNeeded||t.latex;var d;if(t.wrappingNeeded){var p=" "===j.wrapSplitCharacter?f.replace(/<a href=/gi,"<a_href="):f,m=p.split(j.wrapSplitCharacter),g=" "===j.wrapSplitCharacter?m.map(function(t){return t.replace(/<a_href=/gi,"<a href=")}):m;t.fragments=g.map(function(t){return{text:t,width:null}}),t.fragments.push({fragment:j.wrapSpacer,width:null}),d=g.join(j.lineBreaker)+j.lineBreaker+j.wrapSpacer}else delete t.fragments,d=f;return d}).attr("dy",function(t){return t.needsConvertToTspans?0:"0.75em"}).each(function(t){var i=this,a=N.select(i),o=t.wrappingNeeded?L:C;t.needsConvertToTspans?V.convertToTspans(a,n,o(r,i,e,n,t)):N.select(i.parentNode).attr("transform",function(t){return"translate("+I(t)+" "+j.cellPad+")"}).attr("text-anchor",function(t){return{left:"start",center:"middle",right:"end"}[t.align]})})}function v(t){return"string"==typeof t&&t.match(j.latexCheck)}function y(t){return-1!==t.indexOf(j.wrapSplitCharacter)}function b(t,e,r){var n=e.gdColumnsOriginalOrder;e.gdColumns.sort(function(t,e){return r[n.indexOf(t)]-r[n.indexOf(e)]}),e.columnorder=r,t.emit("plotly_restyle")}function x(t,e,r){if(Array.isArray(t)){var n=t[Math.min(e,t.length-1)];return Array.isArray(n)?n[Math.min(r,n.length-1)]:n}return t}function _(t,e,r){t.transition().ease(j.releaseTransitionEase).duration(j.releaseTransitionDuration).attr("transform","translate("+e.x+" "+r+")")}function w(t){return"cells"===t.type}function M(t){return"header"===t.type}function k(t){return(t.rowBlocks.length?t.rowBlocks[0].auxiliaryBlocks:[]).reduce(function(t,e){return t+P(e,1/0)},0)}function A(t,e,r){for(var n=[],i=0,a=0;a<t.length;a++){for(var o=t[a],s=o.rows,l=0,u=0;u<s.length;u++)l+=s[u].rowHeight;o.allRowsHeight=l;var c=i+l,h=e,f=h+r;h<c&&f>i&&n.push(a),i+=l}return n}function T(t,e,r){var n=a(e)[0];if(void 0!==n){var i=n.rowBlocks,s=n.calcdata,l=D(i,i.length),u=n.calcdata.groupHeight-k(n),c=s.scrollY=Math.max(0,Math.min(l-u,s.scrollY)),h=A(i,c,u);1===h.length&&(h[0]===i.length-1?h.unshift(h[0]-1):h.push(h[0]+1)),h[0]%2&&h.reverse(),e.each(function(t,e){t.page=h[e],t.scrollY=c}),e.attr("transform",function(t){return"translate(0 "+(D(t.rowBlocks,t.page)-t.scrollY)+")"}),t&&(E(t,r,e,h,n.prevPages,n,0),E(t,r,e,h,n.prevPages,n,1),o(r,t))}}function S(t,e,r,n){return function(i){var a=i.calcdata?i.calcdata:i,o=e.filter(function(t){return a.key===t.key}),s=r||a.scrollbarState.dragMultiplier;a.scrollY=void 0===n?a.scrollY+s*N.event.dy:n;var l=o.selectAll("."+j.cn.yColumn).selectAll("."+j.cn.columnBlock).filter(w);T(t,l,o)}}function E(t,e,r,n,i,a,o){n[o]!==i[o]&&(clearTimeout(a.currentRepaint[o]),a.currentRepaint[o]=setTimeout(function(){var a=r.filter(function(t,e){return e===o&&n[e]!==i[e]});s(t,e,a,r),i[o]=n[o]}))}function L(t,e,r){return function(){var n=N.select(e.parentNode);n.each(function(t){var e=t.fragments;n.selectAll("tspan.line").each(function(t,r){e[r].width=this.getComputedTextLength()});var r,i,a=e[e.length-1].width,o=e.slice(0,-1),s=[],l=0,u=t.column.columnWidth-2*j.cellPad;for(t.value="";o.length;)r=o.shift(),i=r.width+a,l+i>u&&(t.value+=s.join(j.wrapSpacer)+j.lineBreaker,s=[],l=0),s.push(r.text),l+=i;l&&(t.value+=s.join(j.wrapSpacer)),t.wrapped=!0}),n.selectAll("tspan.line").remove(),g(n.select("."+j.cn.cellText),r,t),N.select(e.parentNode.parentNode).call(z)}}function C(t,e,r,n,i){return function(){if(!i.settledY){var a=N.select(e.parentNode),s=R(i),l=i.key-s.firstRowIndex,u=s.rows[l].rowHeight,c=i.cellHeightMayIncrease?e.parentNode.getBoundingClientRect().height+2*j.cellPad:u,h=Math.max(c,u);h-s.rows[l].rowHeight&&(s.rows[l].rowHeight=h,t.selectAll("."+j.cn.columnCell).call(z),T(null,t.filter(w),0),o(r,n,!0)),a.attr("transform",function(){var t=this,e=t.parentNode,r=e.getBoundingClientRect(),n=N.select(t.parentNode).select("."+j.cn.cellRect).node().getBoundingClientRect(),a=t.transform.baseVal.consolidate(),o=n.top-r.top+(a?a.matrix.f:j.cellPad);return"translate("+I(i,N.select(t.parentNode).select("."+j.cn.cellTextHolder).node().getBoundingClientRect().width)+" "+o+")"}),i.settledY=!0}}}function I(t,e){switch(t.align){case"left":return j.cellPad;case"right":return t.column.columnWidth-(e||0)-j.cellPad;case"center":return(t.column.columnWidth-(e||0))/2;default:return j.cellPad}}function z(t){t.attr("transform",function(t){var e=t.rowBlocks[0].auxiliaryBlocks.reduce(function(t,e){return t+P(e,1/0)},0);return"translate(0 "+(P(R(t),t.key)+e)+")"}).selectAll("."+j.cn.cellRect).attr("height",function(t){return F(R(t),t.key).rowHeight})}function D(t,e){for(var r=0,n=e-1;n>=0;n--)r+=O(t[n]);return r}function P(t,e){for(var r=0,n=0;n<t.rows.length&&t.rows[n].rowIndex<e;n++)r+=t.rows[n].rowHeight;return r}function O(t){var e=t.allRowsHeight;if(void 0!==e)return e;for(var r=0,n=0;n<t.rows.length;n++)r+=t.rows[n].rowHeight;return t.allRowsHeight=r,r}function R(t){return t.rowBlocks[t.page]}function F(t,e){return t.rows[e-t.firstRowIndex]}var j=t("./constants"),N=t("d3"),B=t("../../lib/gup"),U=t("../../components/drawing"),V=t("../../lib/svg_text_utils"),H=t("../../lib").raiseToTop,q=t("../../lib").cancelTransition,G=t("./data_preparation_helper"),Y=t("./data_split_helpers"),W=t("../../components/color");e.exports=function(t,e){var r=t._fullLayout._paper.selectAll("."+j.cn.table).data(e.map(function(e){var r=B.unwrap(e),n=r.trace;return G(t,n)}),B.keyFun);r.exit().remove(),r.enter().append("g").classed(j.cn.table,!0).attr("overflow","visible").style("box-sizing","content-box").style("position","absolute").style("left",0).style("overflow","visible").style("shape-rendering","crispEdges").style("pointer-events","all"),r.attr("width",function(t){return t.width+t.size.l+t.size.r}).attr("height",function(t){return t.height+t.size.t+t.size.b}).attr("transform",function(t){return"translate("+t.translateX+","+t.translateY+")"});var l=r.selectAll("."+j.cn.tableControlView).data(B.repeat,B.keyFun);l.enter().append("g").classed(j.cn.tableControlView,!0).style("box-sizing","content-box").on("mousemove",function(e){l.filter(function(t){return e===t}).call(o,t)}).on("mousewheel",function(e){e.scrollbarState.wheeling||(e.scrollbarState.wheeling=!0,N.event.stopPropagation(),N.event.preventDefault(),S(t,l,null,e.scrollY+N.event.deltaY)(e),e.scrollbarState.wheeling=!1)}).call(o,t,!0),l.attr("transform",function(t){return"translate("+t.size.l+" "+t.size.t+")"});var u=l.selectAll("."+j.cn.scrollBackground).data(B.repeat,B.keyFun);u.enter().append("rect").classed(j.cn.scrollBackground,!0).attr("fill","none"),u.attr("width",function(t){return t.width}).attr("height",function(t){return t.height}),l.each(function(e){U.setClipUrl(N.select(this),n(t,e))});var c=l.selectAll("."+j.cn.yColumn).data(function(t){return t.columns},B.keyFun);c.enter().append("g").classed(j.cn.yColumn,!0),c.exit().remove(),c.attr("transform",function(t){return"translate("+t.x+" 0)"}).call(N.behavior.drag().origin(function(e){return _(N.select(this),e,-j.uplift),H(this),e.calcdata.columnDragInProgress=!0,o(l.filter(function(t){return e.calcdata.key===t.key}),t),e}).on("drag",function(t){var e=N.select(this),r=function(e){return(t===e?N.event.x:e.x)+e.columnWidth/2};t.x=Math.max(-j.overdrag,Math.min(t.calcdata.width+j.overdrag-t.columnWidth,N.event.x)),a(c).filter(function(e){return e.calcdata.key===t.calcdata.key}).sort(function(t,e){return r(t)-r(e)}).forEach(function(e,r){e.xIndex=r,e.x=t===e?e.x:e.xScale(e)}),c.filter(function(e){return t!==e}).transition().ease(j.transitionEase).duration(j.transitionDuration).attr("transform",function(t){return"translate("+t.x+" 0)"}),e.call(q).attr("transform","translate("+t.x+" -"+j.uplift+" )")}).on("dragend",function(e){var r=N.select(this),n=e.calcdata;e.x=e.xScale(e),
e.calcdata.columnDragInProgress=!1,_(r,e,0),b(t,n,n.columns.map(function(t){return t.xIndex}))})),c.each(function(e){U.setClipUrl(N.select(this),i(t,e))});var h=c.selectAll("."+j.cn.columnBlock).data(Y.splitToPanels,B.keyFun);h.enter().append("g").classed(j.cn.columnBlock,!0).attr("id",function(t){return t.key}),h.style("cursor",function(t){return t.dragHandle?"ew-resize":t.calcdata.scrollbarState.barWiggleRoom?"ns-resize":"default"});var f=h.filter(M),d=h.filter(w);d.call(N.behavior.drag().origin(function(t){return N.event.stopPropagation(),t}).on("drag",S(t,l,-1)).on("dragend",function(){})),s(t,l,f,h),s(t,l,d,h);var p=l.selectAll("."+j.cn.scrollAreaClip).data(B.repeat,B.keyFun);p.enter().append("clipPath").classed(j.cn.scrollAreaClip,!0).attr("id",function(e){return n(t,e)});var m=p.selectAll("."+j.cn.scrollAreaClipRect).data(B.repeat,B.keyFun);m.enter().append("rect").classed(j.cn.scrollAreaClipRect,!0).attr("x",-j.overdrag).attr("y",-j.uplift).attr("fill","none"),m.attr("width",function(t){return t.width+2*j.overdrag}).attr("height",function(t){return t.height+j.uplift}),c.selectAll("."+j.cn.columnBoundary).data(B.repeat,B.keyFun).enter().append("g").classed(j.cn.columnBoundary,!0);var g=c.selectAll("."+j.cn.columnBoundaryClippath).data(B.repeat,B.keyFun);g.enter().append("clipPath").classed(j.cn.columnBoundaryClippath,!0),g.attr("id",function(e){return i(t,e)});var v=g.selectAll("."+j.cn.columnBoundaryRect).data(B.repeat,B.keyFun);v.enter().append("rect").classed(j.cn.columnBoundaryRect,!0).attr("fill","none"),v.attr("width",function(t){return t.columnWidth}).attr("height",function(t){return t.calcdata.height+j.uplift}),T(null,d,l)}},{"../../components/color":604,"../../components/drawing":628,"../../lib":728,"../../lib/gup":725,"../../lib/svg_text_utils":750,"./constants":1108,"./data_preparation_helper":1109,"./data_split_helpers":1110,d3:122}],1114:[function(t,e,r){"use strict";function n(t,e,r,n){if(n.enabled){for(var a=n.target,o=u.nestedProperty(e,a),s=o.get(),c=l.getDataConversions(t,e,a,s),h=i(n,c),f=new Array(r.length),d=0;d<r.length;d++)f[d]=h(s,r[d]);o.set(f)}}function i(t,e){var r=t.func,n=e.d2c,i=e.c2d;switch(r){case"count":return a;case"first":return o;case"last":return s;case"sum":return function(t,e){for(var r=0,a=0;a<e.length;a++){var o=n(t[e[a]]);o!==h&&(r+=o)}return i(r)};case"avg":return function(t,e){for(var r=0,a=0,o=0;o<e.length;o++){var s=n(t[e[o]]);s!==h&&(r+=s,a++)}return a?i(r/a):h};case"min":return function(t,e){for(var r=1/0,a=0;a<e.length;a++){var o=n(t[e[a]]);o!==h&&(r=Math.min(r,o))}return r===1/0?h:i(r)};case"max":return function(t,e){for(var r=-1/0,a=0;a<e.length;a++){var o=n(t[e[a]]);o!==h&&(r=Math.max(r,o))}return r===-1/0?h:i(r)};case"median":return function(t,e){for(var r=[],a=0;a<e.length;a++){var o=n(t[e[a]]);o!==h&&r.push(o)}if(!r.length)return h;r.sort();var s=(r.length-1)/2;return i((r[Math.floor(s)]+r[Math.ceil(s)])/2)};case"mode":return function(t,e){for(var r={},a=0,o=h,s=0;s<e.length;s++){var l=n(t[e[s]]);if(l!==h){var u=r[l]=(r[l]||0)+1;u>a&&(a=u,o=l)}}return a?i(o):h};case"rms":return function(t,e){for(var r=0,a=0,o=0;o<e.length;o++){var s=n(t[e[o]]);s!==h&&(r+=s*s,a++)}return a?i(Math.sqrt(r/a)):h};case"stddev":return function(e,r){var i,a=0,o=0,s=1,l=h;for(i=0;i<r.length&&l===h;i++)l=n(e[r[i]]);if(l===h)return h;for(;i<r.length;i++){var u=n(e[r[i]]);if(u!==h){var c=u-l;a+=c,o+=c*c,s++}}var f="sample"===t.funcmode?s-1:s;return f?Math.sqrt((o-a*a/s)/f):0}}}function a(t,e){return e.length}function o(t,e){return t[e[0]]}function s(t,e){return t[e[e.length-1]]}var l=t("../plots/cartesian/axes"),u=t("../lib"),c=t("../plot_api/plot_schema"),h=t("../constants/numerical").BADNUM;r.moduleType="transform",r.name="aggregate";var f=r.attributes={enabled:{valType:"boolean",dflt:!0,editType:"calc"},groups:{valType:"string",strict:!0,noBlank:!0,arrayOk:!0,dflt:"x",editType:"calc"},aggregations:{_isLinkedToArray:"aggregation",target:{valType:"string",editType:"calc"},func:{valType:"enumerated",values:["count","sum","avg","median","mode","rms","stddev","min","max","first","last"],dflt:"first",editType:"calc"},funcmode:{valType:"enumerated",values:["sample","population"],dflt:"sample",editType:"calc"},enabled:{valType:"boolean",dflt:!0,editType:"calc"},editType:"calc"},editType:"calc"},d=f.aggregations;r.supplyDefaults=function(t,e){function r(e,r){return u.coerce(t,a,f,e,r)}function n(t,e){return u.coerce(p[i],h,d,t,e)}var i,a={};if(!r("enabled"))return a;var o=c.findArrayAttributes(e),s={};for(i=0;i<o.length;i++)s[o[i]]=1;var l=r("groups");if(!Array.isArray(l)){if(!s[l])return void(a.enabled=!1);s[l]=0}var h,p=t.aggregations||[],m=a.aggregations=new Array(p.length);for(i=0;i<p.length;i++){h={_index:i};var g=n("target"),v=n("func");n("enabled")&&g&&(s[g]||"count"===v&&void 0===s[g])?("stddev"===v&&n("funcmode"),s[g]=0,m[i]=h):m[i]={enabled:!1,_index:i}}for(i=0;i<o.length;i++)s[o[i]]&&m.push({target:o[i],func:d.func.dflt,enabled:!0,_index:-1});return a},r.calcTransform=function(t,e,r){if(r.enabled){var i=r.groups,a=u.getTargetArray(e,{target:i});if(a){var o,s,l,c={},h=[];for(o=0;o<a.length;o++)s=a[o],l=c[s],void 0===l?(c[s]=h.length,h.push([o])):h[l].push(o);var f=r.aggregations;for(o=0;o<f.length;o++)n(t,e,h,f[o]);"string"==typeof i&&n(t,e,h,{target:i,func:"first",enabled:!0})}}}},{"../constants/numerical":707,"../lib":728,"../plot_api/plot_schema":761,"../plots/cartesian/axes":772}],1115:[function(t,e,r){"use strict";function n(t,e,r){function n(t){return-1!==t.indexOf(a)}var i,a=t.operation,o=t.value,c=Array.isArray(o),h=function(r){return e(r,0,t.valuecalendar)},f=function(t){return e(t,0,r)};switch(n(s)?i=h(c?o[0]:o):n(l)?i=c?[h(o[0]),h(o[1])]:[h(o),h(o)]:n(u)&&(i=c?o.map(h):[h(o)]),a){case"=":return function(t){return f(t)===i};case"!=":return function(t){return f(t)!==i};case"<":return function(t){return f(t)<i};case"<=":return function(t){return f(t)<=i};case">":return function(t){return f(t)>i};case">=":return function(t){return f(t)>=i};case"[]":return function(t){var e=f(t);return e>=i[0]&&e<=i[1]};case"()":return function(t){var e=f(t);return e>i[0]&&e<i[1]};case"[)":return function(t){var e=f(t);return e>=i[0]&&e<i[1]};case"(]":return function(t){var e=f(t);return e>i[0]&&e<=i[1]};case"][":return function(t){var e=f(t);return e<=i[0]||e>=i[1]};case")(":return function(t){var e=f(t);return e<i[0]||e>i[1]};case"](":return function(t){var e=f(t);return e<=i[0]||e>i[1]};case")[":return function(t){var e=f(t);return e<i[0]||e>=i[1]};case"{}":return function(t){return-1!==i.indexOf(f(t))};case"}{":return function(t){return-1===i.indexOf(f(t))}}}var i=t("../lib"),a=t("../registry"),o=t("../plots/cartesian/axes"),s=["=","!=","<",">=",">","<="],l=["[]","()","[)","(]","][",")(","](",")["],u=["{}","}{"];r.moduleType="transform",r.name="filter",r.attributes={enabled:{valType:"boolean",dflt:!0,editType:"calc"},target:{valType:"string",strict:!0,noBlank:!0,arrayOk:!0,dflt:"x",editType:"calc"},operation:{valType:"enumerated",values:[].concat(s).concat(l).concat(u),dflt:"=",editType:"calc"},value:{valType:"any",dflt:0,editType:"calc"},preservegaps:{valType:"boolean",dflt:!1,editType:"calc"},editType:"calc"},r.supplyDefaults=function(t){function e(e,a){return i.coerce(t,n,r.attributes,e,a)}var n={};if(e("enabled")){e("preservegaps"),e("operation"),e("value"),e("target");var o=a.getComponentMethod("calendars","handleDefaults");o(t,n,"valuecalendar",null),o(t,n,"targetcalendar",null)}return n},r.calcTransform=function(t,e,r){function a(t,r){for(var n=0;n<h.length;n++){t(i.nestedProperty(e,h[n]),r)}}if(r.enabled){var s=i.getTargetArray(e,r);if(s){var l=r.target,u=s.length,c=r.targetcalendar,h=e._arrayAttrs;if("string"==typeof l){var f=i.nestedProperty(e,l+"calendar").get();f&&(c=f)}var d,p,m=o.getDataToCoordFunc(t,e,l,s),g=n(r,m,c),v={};r.preservegaps?(d=function(t){v[t.astr]=i.extendDeep([],t.get()),t.set(new Array(u))},p=function(t,e){var r=v[t.astr][e];t.get()[e]=r}):(d=function(t){v[t.astr]=i.extendDeep([],t.get()),t.set([])},p=function(t,e){var r=v[t.astr][e];t.get().push(r)}),a(d);for(var y=0;y<u;y++){g(s[y])&&a(p,y)}}}}},{"../lib":728,"../plots/cartesian/axes":772,"../registry":846}],1116:[function(t,e,r){"use strict";function n(t,e){var r,n,s,l,u,c,h,f,d,p,m=e.transform,g=t.transforms[e.transformIndex].groups;if(!Array.isArray(g)||0===g.length)return[t];var v=i.filterUnique(g),y=new Array(v.length),b=g.length,x=a.findArrayAttributes(t),_=m.styles||[],w={};for(r=0;r<_.length;r++)w[_[r].target]=_[r].value;m.styles&&(p=i.keyedContainer(m,"styles","target","value.name"));var M={};for(r=0;r<v.length;r++){c=v[r],M[c]=r,h=y[r]=i.extendDeepNoArrays({},t),h._group=c;var k=null;for(p&&(k=p.get(c)),h.name=k||i.templateString(m.nameformat,{trace:t.name,group:c}),f=h.transforms,h.transforms=[],n=0;n<f.length;n++)h.transforms[n]=i.extendDeepNoArrays({},f[n]);for(n=0;n<x.length;n++)i.nestedProperty(h,x[n]).set([])}for(s=0;s<x.length;s++){for(l=x[s],n=0,d=[];n<v.length;n++)d[n]=i.nestedProperty(y[n],l).get();for(u=i.nestedProperty(t,l).get(),n=0;n<b;n++)d[M[g[n]]].push(u[n])}for(r=0;r<v.length;r++)c=v[r],h=y[r],o.clearExpandedTraceDefaultColors(h),h=i.extendDeepNoArrays(h,w[c]||{});return y}var i=t("../lib"),a=t("../plot_api/plot_schema"),o=t("../plots/plots");r.moduleType="transform",r.name="groupby",r.attributes={enabled:{valType:"boolean",dflt:!0,editType:"calc"},groups:{valType:"data_array",dflt:[],editType:"calc"},nameformat:{valType:"string",editType:"calc"},styles:{_isLinkedToArray:"style",target:{valType:"string",editType:"calc"},value:{valType:"any",dflt:{},editType:"calc"},editType:"calc"},editType:"calc"},r.supplyDefaults=function(t,e,n){function a(e,n){return i.coerce(t,s,r.attributes,e,n)}var o,s={};if(!a("enabled"))return s;a("groups"),a("nameformat",n._dataLength>1?"%{group} (%{trace})":"%{group}");var l=t.styles,u=s.styles=[];if(l)for(o=0;o<l.length;o++)u[o]={},i.coerce(l[o],u[o],r.attributes.styles,"target"),i.coerce(l[o],u[o],r.attributes.styles,"value");return s},r.transform=function(t,e){var r,i,a,o=[];for(i=0;i<t.length;i++)for(r=n(t[i],e),a=0;a<r.length;a++)o.push(r[a]);return o}},{"../lib":728,"../plot_api/plot_schema":761,"../plots/plots":831}],1117:[function(t,e,r){"use strict";function n(t,e,r){for(var n=e.length,a=new Array(n),o=e.slice().sort(i(t,r)),s=0;s<n;s++)for(var l=e[s],u=0;u<n;u++){var c=o[u];if(l===c){a[u]=s,o[u]=null;break}}return a}function i(t,e){switch(t.order){case"ascending":return function(t,r){return e(t)-e(r)};case"descending":return function(t,r){return e(r)-e(t)}}}var a=t("../lib"),o=t("../plots/cartesian/axes");r.moduleType="transform",r.name="sort",r.attributes={enabled:{valType:"boolean",dflt:!0,editType:"calc"},target:{valType:"string",strict:!0,noBlank:!0,arrayOk:!0,dflt:"x",editType:"calc"},order:{valType:"enumerated",values:["ascending","descending"],dflt:"ascending",editType:"calc"},editType:"calc"},r.supplyDefaults=function(t){function e(e,i){return a.coerce(t,n,r.attributes,e,i)}var n={};return e("enabled")&&(e("target"),e("order")),n},r.calcTransform=function(t,e,r){if(r.enabled){var i=a.getTargetArray(e,r);if(i)for(var s=r.target,l=i.length,u=e._arrayAttrs,c=o.getDataToCoordFunc(t,e,s,i),h=n(r,i,c),f=0;f<u.length;f++){for(var d=a.nestedProperty(e,u[f]),p=d.get(),m=new Array(l),g=0;g<l;g++)m[g]=p[h[g]];d.set(m)}}}},{"../lib":728,"../plots/cartesian/axes":772}]},{},[20])(20)});
/trunk/applications/graphiques/js/evolution-evenements.js
New file
0,0 → 1,155
function tableauxOntAuMoinsUnElementEnCommun(haystack, arr) {
return arr.some(function (v) {
return haystack.indexOf(v) >= 0;
});
};
 
function obtenirNomEspeceSelectionnee() {
return $('#selecteur_liste_especes option:selected').text();
}
 
function obtenirNomStadeSelectionne() {
return $('#selecteur_stade option:selected').text();
}
 
function surChangementSelecteurEspece(id_espece_selectionnee, evenements) {
 
var $evenements_options = $('#selecteur_stade option');
 
$('#selecteur_stade option').addClass('hide');
if(id_espece_selectionnee == 0) {
$('#selecteur_stade').addClass('hide');
} else {
$('#selecteur_stade').removeClass('hide');
$evenements_options.each(function() {
var $evenement_option = $(this);
if($evenement_option.val() != 0) {
var stades_option = $evenement_option.data('evenements');
$evenement_option.toggleClass('hide', !tableauxOntAuMoinsUnElementEnCommun(evenements, stades_option));
} else {
$evenement_option.removeClass('hide');
}
});
}
 
// mise sur le selecteur par défaut
$('#selecteur_stade').val("0");
}
 
function surChangementSelecteurStade(id_stade_selectionne) {
obtenirDonneesStadePhenologiques($('#selecteur_liste_especes').val(), id_stade_selectionne)
}
 
function obtenirDonneesStadePhenologiques(id_espece, id_stades) {
$.get(url_jrest+'OdsExport/ExportEvolutionPhenologiqueJson?espece='+id_espece+'&evenements='+id_stades, function(e) {
var donnees_dispos = !jQuery.isEmptyObject(e);
if(donnees_dispos) {
dessinerGraphiqueEvolutionStadesPhenologiques(e, id_stades);
}
 
$('.aucune-donnee').toggleClass('hide', donnees_dispos);
$('.conteneur-graphique').toggleClass('hide', !donnees_dispos);
});
}
 
function renvoyerNomsEvenementLegendeGraphique(id_stades) {
var stades = id_stades.split(',');
var stades_legende = {};
 
if(stades.length == 2) {
var stade_debut = global_evenements[stades[0]];
var stade_fin = global_evenements[stades[1]];
var legende_debut = 'début '+(stade_debut.nom)+' (stade '+(stade_debut.code)+')';
var legende_fin = 'fin '+stade_fin.nom+' (stade '+stade_fin.code+')';
stades_legende[stades[0]] = legende_debut;
stades_legende[stades[1]] = legende_fin;
} else {
var stade_unique = global_evenements[stades[0]];
stades_legende[stades[0]] = stade_unique.nom;
}
 
return stades_legende;
}
 
function dessinerGraphiqueEvolutionStadesPhenologiques(data, id_stades) {
 
var noms_evenements = renvoyerNomsEvenementLegendeGraphique(id_stades);
var nb_evenements = 0;
var graph_data = new Array();
for (var id_evenement in data) {
if (!data.hasOwnProperty(id_evenement)) continue;
 
var data_evenement = data[id_evenement];
 
graph_data.push({
type: "scatter",
mode: 'lines+markers',
name: noms_evenements[id_evenement],
x: data_evenement.x,
y: data_evenement.y,
text: data_evenement.text,
hoverinfo: 'text'
});
 
nb_evenements++;
}
 
var nom_espece_selectionnee = obtenirNomEspeceSelectionnee();
var nom_stade_selectionne = obtenirNomStadeSelectionne().toLowerCase();
 
var titre_graphique = 'Dates moyennes de ';
if(nb_evenements > 1) {
titre_graphique += 'début et fin de ';
}
titre_graphique += nom_stade_selectionne+' pour l\'espèce '+nom_espece_selectionnee;
 
var layout = {
title: titre_graphique,
xaxis: {
title: 'Années',
showgrid: false,
zeroline: false,
tickvals: annees_observations,
ticktext: annees_observations,
autoticks: false,
},
yaxis: {
title: '',
autoticks: false,
tickvals: [1,2,3,4,5,6,7,8,9,10,11,12],
ticktext: ['janvier', 'février', 'mars', 'avril', 'mai', 'juin', 'juillet', 'août', 'septembre', 'octobre', 'novembre', 'décembre'],
},
// pour la légende apparaisse en bas du graphique afin de ne pas gâcher
// presque un tiers de l'espace de la page
legend:{
xanchor:"center",
yanchor:"top",
y:-0.3,
x:0.5
}
};
var conteneur_graphique = document.getElementById('conteneur-graphique');
Plotly.purge(conteneur_graphique);
var graphique = Plotly.plot(conteneur_graphique, graph_data, layout);
}
 
$(document).ready(function() {
$('#selecteur_liste_especes').change(function(e) {
var conteneur_graphique = document.getElementById('conteneur-graphique');
Plotly.purge(conteneur_graphique);
surChangementSelecteurEspece($(this).val(), $(this).find(":selected").data('id-evenements'));
});
 
$('#selecteur_stade').change(function(e) {
var conteneur_graphique = document.getElementById('conteneur-graphique');
Plotly.purge(conteneur_graphique);
if($(this).val() == "0") {
return;
}
surChangementSelecteurStade($(this).val());
});
 
if(espece_defaut != null && stades_defaut != 0) {
obtenirDonneesStadePhenologiques(espece_defaut, stades_defaut);
}
});
/trunk/applications/graphiques/js/calendrier-evenements.js
New file
0,0 → 1,165
function capitaliserPremiereLettre(string) {
return string.charAt(0).toUpperCase() + string.slice(1);
}
 
function obtenirNomEspeceSelectionnee() {
return $('#selecteur_liste_especes option:selected').text();
}
 
function obtenirAnneeSelectionnee() {
return $('#selecteur_annees option:selected').text();
}
 
function obtenirDonneesPhasesPhenologiques(id_espece, annee) {
$.get(url_jrest+'OdsExport/ExportPhasesPhenologiquesJson?espece='+id_espece+'&annee='+annee, function(e) {
var donnees_dispos = !jQuery.isEmptyObject(e);
if(donnees_dispos) {
dessinerGraphiquePhasesPhenologiques(e, annee);
}
 
$('.aucune-donnee').toggleClass('hide', donnees_dispos);
$('.conteneur-graphique').toggleClass('hide', !donnees_dispos);
});
}
 
 
var legende_points = {};
var legende_points_index = {};
function dessinerGraphiquePhasesPhenologiques(data, annee) {
 
var traces = new Array();
var nb_evenements = 0;
for (var id_evenement in data) {
if (!data.hasOwnProperty(id_evenement)) continue;
var data_evenement = data[id_evenement];
traces.push({
x: data_evenement.x,
type: 'box',
name: capitaliserPremiereLettre(id_evenement),
});
 
legende_points[capitaliserPremiereLettre(id_evenement)] = data_evenement.text_index;
legende_points_index[capitaliserPremiereLettre(id_evenement)] = Object.keys(data_evenement.text_index).map(function(x) {
return parseFloat(x.replace("'", ''));
});
 
nb_evenements++;
}
 
var titre = 'Espèce '+obtenirNomEspeceSelectionnee();
if(annee == "0") {
titre += '<br /> Toutes les années';
} else {
titre += '<br /> Année '+obtenirAnneeSelectionnee();
}
 
var layout = {
title: titre,
xaxis: {
title: '',
autorange: true,
autoticks: false,
hoverformat: '.7f',
tickvals: [1,2,3,4,5,6,7,8,9,10,11,12],
ticktext: ['janvier', 'février', 'mars', 'avril', 'mai', 'juin', 'juillet', 'août', 'septembre', 'octobre', 'novembre', 'décembre'],
},
// pour la légende apparaisse en bas du graphique afin de ne pas gâcher
// presque un tiers de l'espace de la page
legend:{
xanchor:"center",
yanchor:"top",
y:-0.3,
x:0.5
},
yaxis: {
tickangle: (nb_evenements == 1 ? -90 : 0),
}
legend: false
};
 
Plotly.newPlot('conteneur-graphique', traces, layout);
var graphique = document.getElementById('conteneur-graphique');
 
graphique.on('plotly_hover', function(data) {
modifierAffichageToolTips(data);
});
 
}
 
function modifierAffichageToolTips(data) {
var axeY = data.points[0].y;
$('text.nums, text.name').css('visibility', 'hidden');
$('text.nums, text.name').css('width', 0);
$('text.nums').each(function() {
 
// certains label contiennent du texte qui ne doit pas être changé
// par exemple si un point tombe pile sur un début de mois
// le nom du mois doit rester affiché
if(isNaN($(this).data('unformatted'))) {
$(this).css('visibility', 'visible');
$(this).css('width', '100%');
return true;
}
 
var $label_axe_y = $(this).parent().find(":contains("+axeY+")");
if($label_axe_y.length != 0) {
$label_axe_y.css('z-index', -99999);
$label_axe_y.hide();
}
var $text_hover_clone = creerCopieTooltip($(this), axeY);
$(this).parent().append($text_hover_clone);
});
}
 
function renvoyerDatePourIndexNumerique(index_valeur, index_evenement_legende) {
// des fois le graphique fait des arrondis de valeurs dont on ne peut plus relier
// la valeur du graphique a sa date, dans ce cas là on prend la plus proche du tableau
var index_valeur_formate = parseFloat(index_valeur).toFixed(7);
var text_hover = legende_points[index_evenement_legende]["'"+index_valeur_formate+"'"];
if(typeof text_hover == "undefined") {
index_valeur_f = parseFloat(index_valeur);
index_valeur = legende_points_index[index_evenement_legende].reduce(function(prev, curr) {
return (Math.abs(curr - index_valeur_f) < Math.abs(prev - index_valeur_f) ? curr : prev);
});
text_hover = legende_points[index_evenement_legende]["'"+index_valeur+"'"];
}
 
return text_hover;
}
 
function creerCopieTooltip($original, index_evenement_legende) {
var $clone = $original.clone(true);
var text_hover = renvoyerDatePourIndexNumerique($original.data('unformatted'), index_evenement_legende)
 
$clone.html(text_hover);
$clone.data('unformatted', text_hover);
$clone.attr('data-unformatted', text_hover);
$clone.css('visibility', 'visible');
$clone.css('width', '100%');
$clone.css('font-size', '11px');
 
return $clone;
}
 
$(document).ready(function() {
 
$('#selecteur_liste_especes').change(function(e) {
var conteneur_graphique = document.getElementById('conteneur-graphique');
Plotly.purge(conteneur_graphique);
obtenirDonneesPhasesPhenologiques($(this).val(), $('#selecteur_annees').val());
});
 
$('#selecteur_annees').change(function(e) {
var conteneur_graphique = document.getElementById('conteneur-graphique');
Plotly.purge(conteneur_graphique);
 
if($('#selecteur_liste_especes').val() != "0") {
obtenirDonneesPhasesPhenologiques($('#selecteur_liste_especes').val(), $(this).val());
}
});
 
if(espece_defaut != null) {
obtenirDonneesPhasesPhenologiques(espece_defaut, annee_defaut);
}
 
});
/trunk/applications/graphiques/js/jquery-3.2.1.min.js
New file
0,0 → 1,5
/*! jQuery v3.2.1 | (c) JS Foundation and other contributors | jquery.org/license */
!function(a,b){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){"use strict";var c=[],d=a.document,e=Object.getPrototypeOf,f=c.slice,g=c.concat,h=c.push,i=c.indexOf,j={},k=j.toString,l=j.hasOwnProperty,m=l.toString,n=m.call(Object),o={};function p(a,b){b=b||d;var c=b.createElement("script");c.text=a,b.head.appendChild(c).parentNode.removeChild(c)}var q="3.2.1",r=function(a,b){return new r.fn.init(a,b)},s=/^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g,t=/^-ms-/,u=/-([a-z])/g,v=function(a,b){return b.toUpperCase()};r.fn=r.prototype={jquery:q,constructor:r,length:0,toArray:function(){return f.call(this)},get:function(a){return null==a?f.call(this):a<0?this[a+this.length]:this[a]},pushStack:function(a){var b=r.merge(this.constructor(),a);return b.prevObject=this,b},each:function(a){return r.each(this,a)},map:function(a){return this.pushStack(r.map(this,function(b,c){return a.call(b,c,b)}))},slice:function(){return this.pushStack(f.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},eq:function(a){var b=this.length,c=+a+(a<0?b:0);return this.pushStack(c>=0&&c<b?[this[c]]:[])},end:function(){return this.prevObject||this.constructor()},push:h,sort:c.sort,splice:c.splice},r.extend=r.fn.extend=function(){var a,b,c,d,e,f,g=arguments[0]||{},h=1,i=arguments.length,j=!1;for("boolean"==typeof g&&(j=g,g=arguments[h]||{},h++),"object"==typeof g||r.isFunction(g)||(g={}),h===i&&(g=this,h--);h<i;h++)if(null!=(a=arguments[h]))for(b in a)c=g[b],d=a[b],g!==d&&(j&&d&&(r.isPlainObject(d)||(e=Array.isArray(d)))?(e?(e=!1,f=c&&Array.isArray(c)?c:[]):f=c&&r.isPlainObject(c)?c:{},g[b]=r.extend(j,f,d)):void 0!==d&&(g[b]=d));return g},r.extend({expando:"jQuery"+(q+Math.random()).replace(/\D/g,""),isReady:!0,error:function(a){throw new Error(a)},noop:function(){},isFunction:function(a){return"function"===r.type(a)},isWindow:function(a){return null!=a&&a===a.window},isNumeric:function(a){var b=r.type(a);return("number"===b||"string"===b)&&!isNaN(a-parseFloat(a))},isPlainObject:function(a){var b,c;return!(!a||"[object Object]"!==k.call(a))&&(!(b=e(a))||(c=l.call(b,"constructor")&&b.constructor,"function"==typeof c&&m.call(c)===n))},isEmptyObject:function(a){var b;for(b in a)return!1;return!0},type:function(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?j[k.call(a)]||"object":typeof a},globalEval:function(a){p(a)},camelCase:function(a){return a.replace(t,"ms-").replace(u,v)},each:function(a,b){var c,d=0;if(w(a)){for(c=a.length;d<c;d++)if(b.call(a[d],d,a[d])===!1)break}else for(d in a)if(b.call(a[d],d,a[d])===!1)break;return a},trim:function(a){return null==a?"":(a+"").replace(s,"")},makeArray:function(a,b){var c=b||[];return null!=a&&(w(Object(a))?r.merge(c,"string"==typeof a?[a]:a):h.call(c,a)),c},inArray:function(a,b,c){return null==b?-1:i.call(b,a,c)},merge:function(a,b){for(var c=+b.length,d=0,e=a.length;d<c;d++)a[e++]=b[d];return a.length=e,a},grep:function(a,b,c){for(var d,e=[],f=0,g=a.length,h=!c;f<g;f++)d=!b(a[f],f),d!==h&&e.push(a[f]);return e},map:function(a,b,c){var d,e,f=0,h=[];if(w(a))for(d=a.length;f<d;f++)e=b(a[f],f,c),null!=e&&h.push(e);else for(f in a)e=b(a[f],f,c),null!=e&&h.push(e);return g.apply([],h)},guid:1,proxy:function(a,b){var c,d,e;if("string"==typeof b&&(c=a[b],b=a,a=c),r.isFunction(a))return d=f.call(arguments,2),e=function(){return a.apply(b||this,d.concat(f.call(arguments)))},e.guid=a.guid=a.guid||r.guid++,e},now:Date.now,support:o}),"function"==typeof Symbol&&(r.fn[Symbol.iterator]=c[Symbol.iterator]),r.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(a,b){j["[object "+b+"]"]=b.toLowerCase()});function w(a){var b=!!a&&"length"in a&&a.length,c=r.type(a);return"function"!==c&&!r.isWindow(a)&&("array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a)}var x=function(a){var b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u="sizzle"+1*new Date,v=a.document,w=0,x=0,y=ha(),z=ha(),A=ha(),B=function(a,b){return a===b&&(l=!0),0},C={}.hasOwnProperty,D=[],E=D.pop,F=D.push,G=D.push,H=D.slice,I=function(a,b){for(var c=0,d=a.length;c<d;c++)if(a[c]===b)return c;return-1},J="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",K="[\\x20\\t\\r\\n\\f]",L="(?:\\\\.|[\\w-]|[^\0-\\xa0])+",M="\\["+K+"*("+L+")(?:"+K+"*([*^$|!~]?=)"+K+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+L+"))|)"+K+"*\\]",N=":("+L+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+M+")*)|.*)\\)|)",O=new RegExp(K+"+","g"),P=new RegExp("^"+K+"+|((?:^|[^\\\\])(?:\\\\.)*)"+K+"+$","g"),Q=new RegExp("^"+K+"*,"+K+"*"),R=new RegExp("^"+K+"*([>+~]|"+K+")"+K+"*"),S=new RegExp("="+K+"*([^\\]'\"]*?)"+K+"*\\]","g"),T=new RegExp(N),U=new RegExp("^"+L+"$"),V={ID:new RegExp("^#("+L+")"),CLASS:new RegExp("^\\.("+L+")"),TAG:new RegExp("^("+L+"|[*])"),ATTR:new RegExp("^"+M),PSEUDO:new RegExp("^"+N),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+K+"*(even|odd|(([+-]|)(\\d*)n|)"+K+"*(?:([+-]|)"+K+"*(\\d+)|))"+K+"*\\)|)","i"),bool:new RegExp("^(?:"+J+")$","i"),needsContext:new RegExp("^"+K+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+K+"*((?:-\\d)?\\d*)"+K+"*\\)|)(?=[^-]|$)","i")},W=/^(?:input|select|textarea|button)$/i,X=/^h\d$/i,Y=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,$=/[+~]/,_=new RegExp("\\\\([\\da-f]{1,6}"+K+"?|("+K+")|.)","ig"),aa=function(a,b,c){var d="0x"+b-65536;return d!==d||c?b:d<0?String.fromCharCode(d+65536):String.fromCharCode(d>>10|55296,1023&d|56320)},ba=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ca=function(a,b){return b?"\0"===a?"\ufffd":a.slice(0,-1)+"\\"+a.charCodeAt(a.length-1).toString(16)+" ":"\\"+a},da=function(){m()},ea=ta(function(a){return a.disabled===!0&&("form"in a||"label"in a)},{dir:"parentNode",next:"legend"});try{G.apply(D=H.call(v.childNodes),v.childNodes),D[v.childNodes.length].nodeType}catch(fa){G={apply:D.length?function(a,b){F.apply(a,H.call(b))}:function(a,b){var c=a.length,d=0;while(a[c++]=b[d++]);a.length=c-1}}}function ga(a,b,d,e){var f,h,j,k,l,o,r,s=b&&b.ownerDocument,w=b?b.nodeType:9;if(d=d||[],"string"!=typeof a||!a||1!==w&&9!==w&&11!==w)return d;if(!e&&((b?b.ownerDocument||b:v)!==n&&m(b),b=b||n,p)){if(11!==w&&(l=Z.exec(a)))if(f=l[1]){if(9===w){if(!(j=b.getElementById(f)))return d;if(j.id===f)return d.push(j),d}else if(s&&(j=s.getElementById(f))&&t(b,j)&&j.id===f)return d.push(j),d}else{if(l[2])return G.apply(d,b.getElementsByTagName(a)),d;if((f=l[3])&&c.getElementsByClassName&&b.getElementsByClassName)return G.apply(d,b.getElementsByClassName(f)),d}if(c.qsa&&!A[a+" "]&&(!q||!q.test(a))){if(1!==w)s=b,r=a;else if("object"!==b.nodeName.toLowerCase()){(k=b.getAttribute("id"))?k=k.replace(ba,ca):b.setAttribute("id",k=u),o=g(a),h=o.length;while(h--)o[h]="#"+k+" "+sa(o[h]);r=o.join(","),s=$.test(a)&&qa(b.parentNode)||b}if(r)try{return G.apply(d,s.querySelectorAll(r)),d}catch(x){}finally{k===u&&b.removeAttribute("id")}}}return i(a.replace(P,"$1"),b,d,e)}function ha(){var a=[];function b(c,e){return a.push(c+" ")>d.cacheLength&&delete b[a.shift()],b[c+" "]=e}return b}function ia(a){return a[u]=!0,a}function ja(a){var b=n.createElement("fieldset");try{return!!a(b)}catch(c){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function ka(a,b){var c=a.split("|"),e=c.length;while(e--)d.attrHandle[c[e]]=b}function la(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&a.sourceIndex-b.sourceIndex;if(d)return d;if(c)while(c=c.nextSibling)if(c===b)return-1;return a?1:-1}function ma(a){return function(b){var c=b.nodeName.toLowerCase();return"input"===c&&b.type===a}}function na(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function oa(a){return function(b){return"form"in b?b.parentNode&&b.disabled===!1?"label"in b?"label"in b.parentNode?b.parentNode.disabled===a:b.disabled===a:b.isDisabled===a||b.isDisabled!==!a&&ea(b)===a:b.disabled===a:"label"in b&&b.disabled===a}}function pa(a){return ia(function(b){return b=+b,ia(function(c,d){var e,f=a([],c.length,b),g=f.length;while(g--)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function qa(a){return a&&"undefined"!=typeof a.getElementsByTagName&&a}c=ga.support={},f=ga.isXML=function(a){var b=a&&(a.ownerDocument||a).documentElement;return!!b&&"HTML"!==b.nodeName},m=ga.setDocument=function(a){var b,e,g=a?a.ownerDocument||a:v;return g!==n&&9===g.nodeType&&g.documentElement?(n=g,o=n.documentElement,p=!f(n),v!==n&&(e=n.defaultView)&&e.top!==e&&(e.addEventListener?e.addEventListener("unload",da,!1):e.attachEvent&&e.attachEvent("onunload",da)),c.attributes=ja(function(a){return a.className="i",!a.getAttribute("className")}),c.getElementsByTagName=ja(function(a){return a.appendChild(n.createComment("")),!a.getElementsByTagName("*").length}),c.getElementsByClassName=Y.test(n.getElementsByClassName),c.getById=ja(function(a){return o.appendChild(a).id=u,!n.getElementsByName||!n.getElementsByName(u).length}),c.getById?(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){return a.getAttribute("id")===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c=b.getElementById(a);return c?[c]:[]}}):(d.filter.ID=function(a){var b=a.replace(_,aa);return function(a){var c="undefined"!=typeof a.getAttributeNode&&a.getAttributeNode("id");return c&&c.value===b}},d.find.ID=function(a,b){if("undefined"!=typeof b.getElementById&&p){var c,d,e,f=b.getElementById(a);if(f){if(c=f.getAttributeNode("id"),c&&c.value===a)return[f];e=b.getElementsByName(a),d=0;while(f=e[d++])if(c=f.getAttributeNode("id"),c&&c.value===a)return[f]}return[]}}),d.find.TAG=c.getElementsByTagName?function(a,b){return"undefined"!=typeof b.getElementsByTagName?b.getElementsByTagName(a):c.qsa?b.querySelectorAll(a):void 0}:function(a,b){var c,d=[],e=0,f=b.getElementsByTagName(a);if("*"===a){while(c=f[e++])1===c.nodeType&&d.push(c);return d}return f},d.find.CLASS=c.getElementsByClassName&&function(a,b){if("undefined"!=typeof b.getElementsByClassName&&p)return b.getElementsByClassName(a)},r=[],q=[],(c.qsa=Y.test(n.querySelectorAll))&&(ja(function(a){o.appendChild(a).innerHTML="<a id='"+u+"'></a><select id='"+u+"-\r\\' msallowcapture=''><option selected=''></option></select>",a.querySelectorAll("[msallowcapture^='']").length&&q.push("[*^$]="+K+"*(?:''|\"\")"),a.querySelectorAll("[selected]").length||q.push("\\["+K+"*(?:value|"+J+")"),a.querySelectorAll("[id~="+u+"-]").length||q.push("~="),a.querySelectorAll(":checked").length||q.push(":checked"),a.querySelectorAll("a#"+u+"+*").length||q.push(".#.+[+~]")}),ja(function(a){a.innerHTML="<a href='' disabled='disabled'></a><select disabled='disabled'><option/></select>";var b=n.createElement("input");b.setAttribute("type","hidden"),a.appendChild(b).setAttribute("name","D"),a.querySelectorAll("[name=d]").length&&q.push("name"+K+"*[*^$|!~]?="),2!==a.querySelectorAll(":enabled").length&&q.push(":enabled",":disabled"),o.appendChild(a).disabled=!0,2!==a.querySelectorAll(":disabled").length&&q.push(":enabled",":disabled"),a.querySelectorAll("*,:x"),q.push(",.*:")})),(c.matchesSelector=Y.test(s=o.matches||o.webkitMatchesSelector||o.mozMatchesSelector||o.oMatchesSelector||o.msMatchesSelector))&&ja(function(a){c.disconnectedMatch=s.call(a,"*"),s.call(a,"[s!='']:x"),r.push("!=",N)}),q=q.length&&new RegExp(q.join("|")),r=r.length&&new RegExp(r.join("|")),b=Y.test(o.compareDocumentPosition),t=b||Y.test(o.contains)?function(a,b){var c=9===a.nodeType?a.documentElement:a,d=b&&b.parentNode;return a===d||!(!d||1!==d.nodeType||!(c.contains?c.contains(d):a.compareDocumentPosition&&16&a.compareDocumentPosition(d)))}:function(a,b){if(b)while(b=b.parentNode)if(b===a)return!0;return!1},B=b?function(a,b){if(a===b)return l=!0,0;var d=!a.compareDocumentPosition-!b.compareDocumentPosition;return d?d:(d=(a.ownerDocument||a)===(b.ownerDocument||b)?a.compareDocumentPosition(b):1,1&d||!c.sortDetached&&b.compareDocumentPosition(a)===d?a===n||a.ownerDocument===v&&t(v,a)?-1:b===n||b.ownerDocument===v&&t(v,b)?1:k?I(k,a)-I(k,b):0:4&d?-1:1)}:function(a,b){if(a===b)return l=!0,0;var c,d=0,e=a.parentNode,f=b.parentNode,g=[a],h=[b];if(!e||!f)return a===n?-1:b===n?1:e?-1:f?1:k?I(k,a)-I(k,b):0;if(e===f)return la(a,b);c=a;while(c=c.parentNode)g.unshift(c);c=b;while(c=c.parentNode)h.unshift(c);while(g[d]===h[d])d++;return d?la(g[d],h[d]):g[d]===v?-1:h[d]===v?1:0},n):n},ga.matches=function(a,b){return ga(a,null,null,b)},ga.matchesSelector=function(a,b){if((a.ownerDocument||a)!==n&&m(a),b=b.replace(S,"='$1']"),c.matchesSelector&&p&&!A[b+" "]&&(!r||!r.test(b))&&(!q||!q.test(b)))try{var d=s.call(a,b);if(d||c.disconnectedMatch||a.document&&11!==a.document.nodeType)return d}catch(e){}return ga(b,n,null,[a]).length>0},ga.contains=function(a,b){return(a.ownerDocument||a)!==n&&m(a),t(a,b)},ga.attr=function(a,b){(a.ownerDocument||a)!==n&&m(a);var e=d.attrHandle[b.toLowerCase()],f=e&&C.call(d.attrHandle,b.toLowerCase())?e(a,b,!p):void 0;return void 0!==f?f:c.attributes||!p?a.getAttribute(b):(f=a.getAttributeNode(b))&&f.specified?f.value:null},ga.escape=function(a){return(a+"").replace(ba,ca)},ga.error=function(a){throw new Error("Syntax error, unrecognized expression: "+a)},ga.uniqueSort=function(a){var b,d=[],e=0,f=0;if(l=!c.detectDuplicates,k=!c.sortStable&&a.slice(0),a.sort(B),l){while(b=a[f++])b===a[f]&&(e=d.push(f));while(e--)a.splice(d[e],1)}return k=null,a},e=ga.getText=function(a){var b,c="",d=0,f=a.nodeType;if(f){if(1===f||9===f||11===f){if("string"==typeof a.textContent)return a.textContent;for(a=a.firstChild;a;a=a.nextSibling)c+=e(a)}else if(3===f||4===f)return a.nodeValue}else while(b=a[d++])c+=e(b);return c},d=ga.selectors={cacheLength:50,createPseudo:ia,match:V,attrHandle:{},find:{},relative:{">":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(a){return a[1]=a[1].replace(_,aa),a[3]=(a[3]||a[4]||a[5]||"").replace(_,aa),"~="===a[2]&&(a[3]=" "+a[3]+" "),a.slice(0,4)},CHILD:function(a){return a[1]=a[1].toLowerCase(),"nth"===a[1].slice(0,3)?(a[3]||ga.error(a[0]),a[4]=+(a[4]?a[5]+(a[6]||1):2*("even"===a[3]||"odd"===a[3])),a[5]=+(a[7]+a[8]||"odd"===a[3])):a[3]&&ga.error(a[0]),a},PSEUDO:function(a){var b,c=!a[6]&&a[2];return V.CHILD.test(a[0])?null:(a[3]?a[2]=a[4]||a[5]||"":c&&T.test(c)&&(b=g(c,!0))&&(b=c.indexOf(")",c.length-b)-c.length)&&(a[0]=a[0].slice(0,b),a[2]=c.slice(0,b)),a.slice(0,3))}},filter:{TAG:function(a){var b=a.replace(_,aa).toLowerCase();return"*"===a?function(){return!0}:function(a){return a.nodeName&&a.nodeName.toLowerCase()===b}},CLASS:function(a){var b=y[a+" "];return b||(b=new RegExp("(^|"+K+")"+a+"("+K+"|$)"))&&y(a,function(a){return b.test("string"==typeof a.className&&a.className||"undefined"!=typeof a.getAttribute&&a.getAttribute("class")||"")})},ATTR:function(a,b,c){return function(d){var e=ga.attr(d,a);return null==e?"!="===b:!b||(e+="","="===b?e===c:"!="===b?e!==c:"^="===b?c&&0===e.indexOf(c):"*="===b?c&&e.indexOf(c)>-1:"$="===b?c&&e.slice(-c.length)===c:"~="===b?(" "+e.replace(O," ")+" ").indexOf(c)>-1:"|="===b&&(e===c||e.slice(0,c.length+1)===c+"-"))}},CHILD:function(a,b,c,d,e){var f="nth"!==a.slice(0,3),g="last"!==a.slice(-4),h="of-type"===b;return 1===d&&0===e?function(a){return!!a.parentNode}:function(b,c,i){var j,k,l,m,n,o,p=f!==g?"nextSibling":"previousSibling",q=b.parentNode,r=h&&b.nodeName.toLowerCase(),s=!i&&!h,t=!1;if(q){if(f){while(p){m=b;while(m=m[p])if(h?m.nodeName.toLowerCase()===r:1===m.nodeType)return!1;o=p="only"===a&&!o&&"nextSibling"}return!0}if(o=[g?q.firstChild:q.lastChild],g&&s){m=q,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n&&j[2],m=n&&q.childNodes[n];while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if(1===m.nodeType&&++t&&m===b){k[a]=[w,n,t];break}}else if(s&&(m=b,l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),j=k[a]||[],n=j[0]===w&&j[1],t=n),t===!1)while(m=++n&&m&&m[p]||(t=n=0)||o.pop())if((h?m.nodeName.toLowerCase()===r:1===m.nodeType)&&++t&&(s&&(l=m[u]||(m[u]={}),k=l[m.uniqueID]||(l[m.uniqueID]={}),k[a]=[w,t]),m===b))break;return t-=e,t===d||t%d===0&&t/d>=0}}},PSEUDO:function(a,b){var c,e=d.pseudos[a]||d.setFilters[a.toLowerCase()]||ga.error("unsupported pseudo: "+a);return e[u]?e(b):e.length>1?(c=[a,a,"",b],d.setFilters.hasOwnProperty(a.toLowerCase())?ia(function(a,c){var d,f=e(a,b),g=f.length;while(g--)d=I(a,f[g]),a[d]=!(c[d]=f[g])}):function(a){return e(a,0,c)}):e}},pseudos:{not:ia(function(a){var b=[],c=[],d=h(a.replace(P,"$1"));return d[u]?ia(function(a,b,c,e){var f,g=d(a,null,e,[]),h=a.length;while(h--)(f=g[h])&&(a[h]=!(b[h]=f))}):function(a,e,f){return b[0]=a,d(b,null,f,c),b[0]=null,!c.pop()}}),has:ia(function(a){return function(b){return ga(a,b).length>0}}),contains:ia(function(a){return a=a.replace(_,aa),function(b){return(b.textContent||b.innerText||e(b)).indexOf(a)>-1}}),lang:ia(function(a){return U.test(a||"")||ga.error("unsupported lang: "+a),a=a.replace(_,aa).toLowerCase(),function(b){var c;do if(c=p?b.lang:b.getAttribute("xml:lang")||b.getAttribute("lang"))return c=c.toLowerCase(),c===a||0===c.indexOf(a+"-");while((b=b.parentNode)&&1===b.nodeType);return!1}}),target:function(b){var c=a.location&&a.location.hash;return c&&c.slice(1)===b.id},root:function(a){return a===o},focus:function(a){return a===n.activeElement&&(!n.hasFocus||n.hasFocus())&&!!(a.type||a.href||~a.tabIndex)},enabled:oa(!1),disabled:oa(!0),checked:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&!!a.checked||"option"===b&&!!a.selected},selected:function(a){return a.parentNode&&a.parentNode.selectedIndex,a.selected===!0},empty:function(a){for(a=a.firstChild;a;a=a.nextSibling)if(a.nodeType<6)return!1;return!0},parent:function(a){return!d.pseudos.empty(a)},header:function(a){return X.test(a.nodeName)},input:function(a){return W.test(a.nodeName)},button:function(a){var b=a.nodeName.toLowerCase();return"input"===b&&"button"===a.type||"button"===b},text:function(a){var b;return"input"===a.nodeName.toLowerCase()&&"text"===a.type&&(null==(b=a.getAttribute("type"))||"text"===b.toLowerCase())},first:pa(function(){return[0]}),last:pa(function(a,b){return[b-1]}),eq:pa(function(a,b,c){return[c<0?c+b:c]}),even:pa(function(a,b){for(var c=0;c<b;c+=2)a.push(c);return a}),odd:pa(function(a,b){for(var c=1;c<b;c+=2)a.push(c);return a}),lt:pa(function(a,b,c){for(var d=c<0?c+b:c;--d>=0;)a.push(d);return a}),gt:pa(function(a,b,c){for(var d=c<0?c+b:c;++d<b;)a.push(d);return a})}},d.pseudos.nth=d.pseudos.eq;for(b in{radio:!0,checkbox:!0,file:!0,password:!0,image:!0})d.pseudos[b]=ma(b);for(b in{submit:!0,reset:!0})d.pseudos[b]=na(b);function ra(){}ra.prototype=d.filters=d.pseudos,d.setFilters=new ra,g=ga.tokenize=function(a,b){var c,e,f,g,h,i,j,k=z[a+" "];if(k)return b?0:k.slice(0);h=a,i=[],j=d.preFilter;while(h){c&&!(e=Q.exec(h))||(e&&(h=h.slice(e[0].length)||h),i.push(f=[])),c=!1,(e=R.exec(h))&&(c=e.shift(),f.push({value:c,type:e[0].replace(P," ")}),h=h.slice(c.length));for(g in d.filter)!(e=V[g].exec(h))||j[g]&&!(e=j[g](e))||(c=e.shift(),f.push({value:c,type:g,matches:e}),h=h.slice(c.length));if(!c)break}return b?h.length:h?ga.error(a):z(a,i).slice(0)};function sa(a){for(var b=0,c=a.length,d="";b<c;b++)d+=a[b].value;return d}function ta(a,b,c){var d=b.dir,e=b.next,f=e||d,g=c&&"parentNode"===f,h=x++;return b.first?function(b,c,e){while(b=b[d])if(1===b.nodeType||g)return a(b,c,e);return!1}:function(b,c,i){var j,k,l,m=[w,h];if(i){while(b=b[d])if((1===b.nodeType||g)&&a(b,c,i))return!0}else while(b=b[d])if(1===b.nodeType||g)if(l=b[u]||(b[u]={}),k=l[b.uniqueID]||(l[b.uniqueID]={}),e&&e===b.nodeName.toLowerCase())b=b[d]||b;else{if((j=k[f])&&j[0]===w&&j[1]===h)return m[2]=j[2];if(k[f]=m,m[2]=a(b,c,i))return!0}return!1}}function ua(a){return a.length>1?function(b,c,d){var e=a.length;while(e--)if(!a[e](b,c,d))return!1;return!0}:a[0]}function va(a,b,c){for(var d=0,e=b.length;d<e;d++)ga(a,b[d],c);return c}function wa(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;h<i;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function xa(a,b,c,d,e,f){return d&&!d[u]&&(d=xa(d)),e&&!e[u]&&(e=xa(e,f)),ia(function(f,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=f||va(b||"*",h.nodeType?[h]:h,[]),q=!a||!f&&b?p:wa(p,m,a,h,i),r=c?e||(f?a:o||d)?[]:g:q;if(c&&c(q,r,h,i),d){j=wa(r,n),d(j,[],h,i),k=j.length;while(k--)(l=j[k])&&(r[n[k]]=!(q[n[k]]=l))}if(f){if(e||a){if(e){j=[],k=r.length;while(k--)(l=r[k])&&j.push(q[k]=l);e(null,r=[],j,i)}k=r.length;while(k--)(l=r[k])&&(j=e?I(f,l):m[k])>-1&&(f[j]=!(g[j]=l))}}else r=wa(r===g?r.splice(o,r.length):r),e?e(null,g,r,i):G.apply(g,r)})}function ya(a){for(var b,c,e,f=a.length,g=d.relative[a[0].type],h=g||d.relative[" "],i=g?1:0,k=ta(function(a){return a===b},h,!0),l=ta(function(a){return I(b,a)>-1},h,!0),m=[function(a,c,d){var e=!g&&(d||c!==j)||((b=c).nodeType?k(a,c,d):l(a,c,d));return b=null,e}];i<f;i++)if(c=d.relative[a[i].type])m=[ta(ua(m),c)];else{if(c=d.filter[a[i].type].apply(null,a[i].matches),c[u]){for(e=++i;e<f;e++)if(d.relative[a[e].type])break;return xa(i>1&&ua(m),i>1&&sa(a.slice(0,i-1).concat({value:" "===a[i-2].type?"*":""})).replace(P,"$1"),c,i<e&&ya(a.slice(i,e)),e<f&&ya(a=a.slice(e)),e<f&&sa(a))}m.push(c)}return ua(m)}function za(a,b){var c=b.length>0,e=a.length>0,f=function(f,g,h,i,k){var l,o,q,r=0,s="0",t=f&&[],u=[],v=j,x=f||e&&d.find.TAG("*",k),y=w+=null==v?1:Math.random()||.1,z=x.length;for(k&&(j=g===n||g||k);s!==z&&null!=(l=x[s]);s++){if(e&&l){o=0,g||l.ownerDocument===n||(m(l),h=!p);while(q=a[o++])if(q(l,g||n,h)){i.push(l);break}k&&(w=y)}c&&((l=!q&&l)&&r--,f&&t.push(l))}if(r+=s,c&&s!==r){o=0;while(q=b[o++])q(t,u,g,h);if(f){if(r>0)while(s--)t[s]||u[s]||(u[s]=E.call(i));u=wa(u)}G.apply(i,u),k&&!f&&u.length>0&&r+b.length>1&&ga.uniqueSort(i)}return k&&(w=y,j=v),t};return c?ia(f):f}return h=ga.compile=function(a,b){var c,d=[],e=[],f=A[a+" "];if(!f){b||(b=g(a)),c=b.length;while(c--)f=ya(b[c]),f[u]?d.push(f):e.push(f);f=A(a,za(e,d)),f.selector=a}return f},i=ga.select=function(a,b,c,e){var f,i,j,k,l,m="function"==typeof a&&a,n=!e&&g(a=m.selector||a);if(c=c||[],1===n.length){if(i=n[0]=n[0].slice(0),i.length>2&&"ID"===(j=i[0]).type&&9===b.nodeType&&p&&d.relative[i[1].type]){if(b=(d.find.ID(j.matches[0].replace(_,aa),b)||[])[0],!b)return c;m&&(b=b.parentNode),a=a.slice(i.shift().value.length)}f=V.needsContext.test(a)?0:i.length;while(f--){if(j=i[f],d.relative[k=j.type])break;if((l=d.find[k])&&(e=l(j.matches[0].replace(_,aa),$.test(i[0].type)&&qa(b.parentNode)||b))){if(i.splice(f,1),a=e.length&&sa(i),!a)return G.apply(c,e),c;break}}}return(m||h(a,n))(e,b,!p,c,!b||$.test(a)&&qa(b.parentNode)||b),c},c.sortStable=u.split("").sort(B).join("")===u,c.detectDuplicates=!!l,m(),c.sortDetached=ja(function(a){return 1&a.compareDocumentPosition(n.createElement("fieldset"))}),ja(function(a){return a.innerHTML="<a href='#'></a>","#"===a.firstChild.getAttribute("href")})||ka("type|href|height|width",function(a,b,c){if(!c)return a.getAttribute(b,"type"===b.toLowerCase()?1:2)}),c.attributes&&ja(function(a){return a.innerHTML="<input/>",a.firstChild.setAttribute("value",""),""===a.firstChild.getAttribute("value")})||ka("value",function(a,b,c){if(!c&&"input"===a.nodeName.toLowerCase())return a.defaultValue}),ja(function(a){return null==a.getAttribute("disabled")})||ka(J,function(a,b,c){var d;if(!c)return a[b]===!0?b.toLowerCase():(d=a.getAttributeNode(b))&&d.specified?d.value:null}),ga}(a);r.find=x,r.expr=x.selectors,r.expr[":"]=r.expr.pseudos,r.uniqueSort=r.unique=x.uniqueSort,r.text=x.getText,r.isXMLDoc=x.isXML,r.contains=x.contains,r.escapeSelector=x.escape;var y=function(a,b,c){var d=[],e=void 0!==c;while((a=a[b])&&9!==a.nodeType)if(1===a.nodeType){if(e&&r(a).is(c))break;d.push(a)}return d},z=function(a,b){for(var c=[];a;a=a.nextSibling)1===a.nodeType&&a!==b&&c.push(a);return c},A=r.expr.match.needsContext;function B(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()}var C=/^<([a-z][^\/\0>:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i,D=/^.[^:#\[\.,]*$/;function E(a,b,c){return r.isFunction(b)?r.grep(a,function(a,d){return!!b.call(a,d,a)!==c}):b.nodeType?r.grep(a,function(a){return a===b!==c}):"string"!=typeof b?r.grep(a,function(a){return i.call(b,a)>-1!==c}):D.test(b)?r.filter(b,a,c):(b=r.filter(b,a),r.grep(a,function(a){return i.call(b,a)>-1!==c&&1===a.nodeType}))}r.filter=function(a,b,c){var d=b[0];return c&&(a=":not("+a+")"),1===b.length&&1===d.nodeType?r.find.matchesSelector(d,a)?[d]:[]:r.find.matches(a,r.grep(b,function(a){return 1===a.nodeType}))},r.fn.extend({find:function(a){var b,c,d=this.length,e=this;if("string"!=typeof a)return this.pushStack(r(a).filter(function(){for(b=0;b<d;b++)if(r.contains(e[b],this))return!0}));for(c=this.pushStack([]),b=0;b<d;b++)r.find(a,e[b],c);return d>1?r.uniqueSort(c):c},filter:function(a){return this.pushStack(E(this,a||[],!1))},not:function(a){return this.pushStack(E(this,a||[],!0))},is:function(a){return!!E(this,"string"==typeof a&&A.test(a)?r(a):a||[],!1).length}});var F,G=/^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]+))$/,H=r.fn.init=function(a,b,c){var e,f;if(!a)return this;if(c=c||F,"string"==typeof a){if(e="<"===a[0]&&">"===a[a.length-1]&&a.length>=3?[null,a,null]:G.exec(a),!e||!e[1]&&b)return!b||b.jquery?(b||c).find(a):this.constructor(b).find(a);if(e[1]){if(b=b instanceof r?b[0]:b,r.merge(this,r.parseHTML(e[1],b&&b.nodeType?b.ownerDocument||b:d,!0)),C.test(e[1])&&r.isPlainObject(b))for(e in b)r.isFunction(this[e])?this[e](b[e]):this.attr(e,b[e]);return this}return f=d.getElementById(e[2]),f&&(this[0]=f,this.length=1),this}return a.nodeType?(this[0]=a,this.length=1,this):r.isFunction(a)?void 0!==c.ready?c.ready(a):a(r):r.makeArray(a,this)};H.prototype=r.fn,F=r(d);var I=/^(?:parents|prev(?:Until|All))/,J={children:!0,contents:!0,next:!0,prev:!0};r.fn.extend({has:function(a){var b=r(a,this),c=b.length;return this.filter(function(){for(var a=0;a<c;a++)if(r.contains(this,b[a]))return!0})},closest:function(a,b){var c,d=0,e=this.length,f=[],g="string"!=typeof a&&r(a);if(!A.test(a))for(;d<e;d++)for(c=this[d];c&&c!==b;c=c.parentNode)if(c.nodeType<11&&(g?g.index(c)>-1:1===c.nodeType&&r.find.matchesSelector(c,a))){f.push(c);break}return this.pushStack(f.length>1?r.uniqueSort(f):f)},index:function(a){return a?"string"==typeof a?i.call(r(a),this[0]):i.call(this,a.jquery?a[0]:a):this[0]&&this[0].parentNode?this.first().prevAll().length:-1},add:function(a,b){return this.pushStack(r.uniqueSort(r.merge(this.get(),r(a,b))))},addBack:function(a){return this.add(null==a?this.prevObject:this.prevObject.filter(a))}});function K(a,b){while((a=a[b])&&1!==a.nodeType);return a}r.each({parent:function(a){var b=a.parentNode;return b&&11!==b.nodeType?b:null},parents:function(a){return y(a,"parentNode")},parentsUntil:function(a,b,c){return y(a,"parentNode",c)},next:function(a){return K(a,"nextSibling")},prev:function(a){return K(a,"previousSibling")},nextAll:function(a){return y(a,"nextSibling")},prevAll:function(a){return y(a,"previousSibling")},nextUntil:function(a,b,c){return y(a,"nextSibling",c)},prevUntil:function(a,b,c){return y(a,"previousSibling",c)},siblings:function(a){return z((a.parentNode||{}).firstChild,a)},children:function(a){return z(a.firstChild)},contents:function(a){return B(a,"iframe")?a.contentDocument:(B(a,"template")&&(a=a.content||a),r.merge([],a.childNodes))}},function(a,b){r.fn[a]=function(c,d){var e=r.map(this,b,c);return"Until"!==a.slice(-5)&&(d=c),d&&"string"==typeof d&&(e=r.filter(d,e)),this.length>1&&(J[a]||r.uniqueSort(e),I.test(a)&&e.reverse()),this.pushStack(e)}});var L=/[^\x20\t\r\n\f]+/g;function M(a){var b={};return r.each(a.match(L)||[],function(a,c){b[c]=!0}),b}r.Callbacks=function(a){a="string"==typeof a?M(a):r.extend({},a);var b,c,d,e,f=[],g=[],h=-1,i=function(){for(e=e||a.once,d=b=!0;g.length;h=-1){c=g.shift();while(++h<f.length)f[h].apply(c[0],c[1])===!1&&a.stopOnFalse&&(h=f.length,c=!1)}a.memory||(c=!1),b=!1,e&&(f=c?[]:"")},j={add:function(){return f&&(c&&!b&&(h=f.length-1,g.push(c)),function d(b){r.each(b,function(b,c){r.isFunction(c)?a.unique&&j.has(c)||f.push(c):c&&c.length&&"string"!==r.type(c)&&d(c)})}(arguments),c&&!b&&i()),this},remove:function(){return r.each(arguments,function(a,b){var c;while((c=r.inArray(b,f,c))>-1)f.splice(c,1),c<=h&&h--}),this},has:function(a){return a?r.inArray(a,f)>-1:f.length>0},empty:function(){return f&&(f=[]),this},disable:function(){return e=g=[],f=c="",this},disabled:function(){return!f},lock:function(){return e=g=[],c||b||(f=c=""),this},locked:function(){return!!e},fireWith:function(a,c){return e||(c=c||[],c=[a,c.slice?c.slice():c],g.push(c),b||i()),this},fire:function(){return j.fireWith(this,arguments),this},fired:function(){return!!d}};return j};function N(a){return a}function O(a){throw a}function P(a,b,c,d){var e;try{a&&r.isFunction(e=a.promise)?e.call(a).done(b).fail(c):a&&r.isFunction(e=a.then)?e.call(a,b,c):b.apply(void 0,[a].slice(d))}catch(a){c.apply(void 0,[a])}}r.extend({Deferred:function(b){var c=[["notify","progress",r.Callbacks("memory"),r.Callbacks("memory"),2],["resolve","done",r.Callbacks("once memory"),r.Callbacks("once memory"),0,"resolved"],["reject","fail",r.Callbacks("once memory"),r.Callbacks("once memory"),1,"rejected"]],d="pending",e={state:function(){return d},always:function(){return f.done(arguments).fail(arguments),this},"catch":function(a){return e.then(null,a)},pipe:function(){var a=arguments;return r.Deferred(function(b){r.each(c,function(c,d){var e=r.isFunction(a[d[4]])&&a[d[4]];f[d[1]](function(){var a=e&&e.apply(this,arguments);a&&r.isFunction(a.promise)?a.promise().progress(b.notify).done(b.resolve).fail(b.reject):b[d[0]+"With"](this,e?[a]:arguments)})}),a=null}).promise()},then:function(b,d,e){var f=0;function g(b,c,d,e){return function(){var h=this,i=arguments,j=function(){var a,j;if(!(b<f)){if(a=d.apply(h,i),a===c.promise())throw new TypeError("Thenable self-resolution");j=a&&("object"==typeof a||"function"==typeof a)&&a.then,r.isFunction(j)?e?j.call(a,g(f,c,N,e),g(f,c,O,e)):(f++,j.call(a,g(f,c,N,e),g(f,c,O,e),g(f,c,N,c.notifyWith))):(d!==N&&(h=void 0,i=[a]),(e||c.resolveWith)(h,i))}},k=e?j:function(){try{j()}catch(a){r.Deferred.exceptionHook&&r.Deferred.exceptionHook(a,k.stackTrace),b+1>=f&&(d!==O&&(h=void 0,i=[a]),c.rejectWith(h,i))}};b?k():(r.Deferred.getStackHook&&(k.stackTrace=r.Deferred.getStackHook()),a.setTimeout(k))}}return r.Deferred(function(a){c[0][3].add(g(0,a,r.isFunction(e)?e:N,a.notifyWith)),c[1][3].add(g(0,a,r.isFunction(b)?b:N)),c[2][3].add(g(0,a,r.isFunction(d)?d:O))}).promise()},promise:function(a){return null!=a?r.extend(a,e):e}},f={};return r.each(c,function(a,b){var g=b[2],h=b[5];e[b[1]]=g.add,h&&g.add(function(){d=h},c[3-a][2].disable,c[0][2].lock),g.add(b[3].fire),f[b[0]]=function(){return f[b[0]+"With"](this===f?void 0:this,arguments),this},f[b[0]+"With"]=g.fireWith}),e.promise(f),b&&b.call(f,f),f},when:function(a){var b=arguments.length,c=b,d=Array(c),e=f.call(arguments),g=r.Deferred(),h=function(a){return function(c){d[a]=this,e[a]=arguments.length>1?f.call(arguments):c,--b||g.resolveWith(d,e)}};if(b<=1&&(P(a,g.done(h(c)).resolve,g.reject,!b),"pending"===g.state()||r.isFunction(e[c]&&e[c].then)))return g.then();while(c--)P(e[c],h(c),g.reject);return g.promise()}});var Q=/^(Eval|Internal|Range|Reference|Syntax|Type|URI)Error$/;r.Deferred.exceptionHook=function(b,c){a.console&&a.console.warn&&b&&Q.test(b.name)&&a.console.warn("jQuery.Deferred exception: "+b.message,b.stack,c)},r.readyException=function(b){a.setTimeout(function(){throw b})};var R=r.Deferred();r.fn.ready=function(a){return R.then(a)["catch"](function(a){r.readyException(a)}),this},r.extend({isReady:!1,readyWait:1,ready:function(a){(a===!0?--r.readyWait:r.isReady)||(r.isReady=!0,a!==!0&&--r.readyWait>0||R.resolveWith(d,[r]))}}),r.ready.then=R.then;function S(){d.removeEventListener("DOMContentLoaded",S),
a.removeEventListener("load",S),r.ready()}"complete"===d.readyState||"loading"!==d.readyState&&!d.documentElement.doScroll?a.setTimeout(r.ready):(d.addEventListener("DOMContentLoaded",S),a.addEventListener("load",S));var T=function(a,b,c,d,e,f,g){var h=0,i=a.length,j=null==c;if("object"===r.type(c)){e=!0;for(h in c)T(a,b,h,c[h],!0,f,g)}else if(void 0!==d&&(e=!0,r.isFunction(d)||(g=!0),j&&(g?(b.call(a,d),b=null):(j=b,b=function(a,b,c){return j.call(r(a),c)})),b))for(;h<i;h++)b(a[h],c,g?d:d.call(a[h],h,b(a[h],c)));return e?a:j?b.call(a):i?b(a[0],c):f},U=function(a){return 1===a.nodeType||9===a.nodeType||!+a.nodeType};function V(){this.expando=r.expando+V.uid++}V.uid=1,V.prototype={cache:function(a){var b=a[this.expando];return b||(b={},U(a)&&(a.nodeType?a[this.expando]=b:Object.defineProperty(a,this.expando,{value:b,configurable:!0}))),b},set:function(a,b,c){var d,e=this.cache(a);if("string"==typeof b)e[r.camelCase(b)]=c;else for(d in b)e[r.camelCase(d)]=b[d];return e},get:function(a,b){return void 0===b?this.cache(a):a[this.expando]&&a[this.expando][r.camelCase(b)]},access:function(a,b,c){return void 0===b||b&&"string"==typeof b&&void 0===c?this.get(a,b):(this.set(a,b,c),void 0!==c?c:b)},remove:function(a,b){var c,d=a[this.expando];if(void 0!==d){if(void 0!==b){Array.isArray(b)?b=b.map(r.camelCase):(b=r.camelCase(b),b=b in d?[b]:b.match(L)||[]),c=b.length;while(c--)delete d[b[c]]}(void 0===b||r.isEmptyObject(d))&&(a.nodeType?a[this.expando]=void 0:delete a[this.expando])}},hasData:function(a){var b=a[this.expando];return void 0!==b&&!r.isEmptyObject(b)}};var W=new V,X=new V,Y=/^(?:\{[\w\W]*\}|\[[\w\W]*\])$/,Z=/[A-Z]/g;function $(a){return"true"===a||"false"!==a&&("null"===a?null:a===+a+""?+a:Y.test(a)?JSON.parse(a):a)}function _(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(Z,"-$&").toLowerCase(),c=a.getAttribute(d),"string"==typeof c){try{c=$(c)}catch(e){}X.set(a,b,c)}else c=void 0;return c}r.extend({hasData:function(a){return X.hasData(a)||W.hasData(a)},data:function(a,b,c){return X.access(a,b,c)},removeData:function(a,b){X.remove(a,b)},_data:function(a,b,c){return W.access(a,b,c)},_removeData:function(a,b){W.remove(a,b)}}),r.fn.extend({data:function(a,b){var c,d,e,f=this[0],g=f&&f.attributes;if(void 0===a){if(this.length&&(e=X.get(f),1===f.nodeType&&!W.get(f,"hasDataAttrs"))){c=g.length;while(c--)g[c]&&(d=g[c].name,0===d.indexOf("data-")&&(d=r.camelCase(d.slice(5)),_(f,d,e[d])));W.set(f,"hasDataAttrs",!0)}return e}return"object"==typeof a?this.each(function(){X.set(this,a)}):T(this,function(b){var c;if(f&&void 0===b){if(c=X.get(f,a),void 0!==c)return c;if(c=_(f,a),void 0!==c)return c}else this.each(function(){X.set(this,a,b)})},null,b,arguments.length>1,null,!0)},removeData:function(a){return this.each(function(){X.remove(this,a)})}}),r.extend({queue:function(a,b,c){var d;if(a)return b=(b||"fx")+"queue",d=W.get(a,b),c&&(!d||Array.isArray(c)?d=W.access(a,b,r.makeArray(c)):d.push(c)),d||[]},dequeue:function(a,b){b=b||"fx";var c=r.queue(a,b),d=c.length,e=c.shift(),f=r._queueHooks(a,b),g=function(){r.dequeue(a,b)};"inprogress"===e&&(e=c.shift(),d--),e&&("fx"===b&&c.unshift("inprogress"),delete f.stop,e.call(a,g,f)),!d&&f&&f.empty.fire()},_queueHooks:function(a,b){var c=b+"queueHooks";return W.get(a,c)||W.access(a,c,{empty:r.Callbacks("once memory").add(function(){W.remove(a,[b+"queue",c])})})}}),r.fn.extend({queue:function(a,b){var c=2;return"string"!=typeof a&&(b=a,a="fx",c--),arguments.length<c?r.queue(this[0],a):void 0===b?this:this.each(function(){var c=r.queue(this,a,b);r._queueHooks(this,a),"fx"===a&&"inprogress"!==c[0]&&r.dequeue(this,a)})},dequeue:function(a){return this.each(function(){r.dequeue(this,a)})},clearQueue:function(a){return this.queue(a||"fx",[])},promise:function(a,b){var c,d=1,e=r.Deferred(),f=this,g=this.length,h=function(){--d||e.resolveWith(f,[f])};"string"!=typeof a&&(b=a,a=void 0),a=a||"fx";while(g--)c=W.get(f[g],a+"queueHooks"),c&&c.empty&&(d++,c.empty.add(h));return h(),e.promise(b)}});var aa=/[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source,ba=new RegExp("^(?:([+-])=|)("+aa+")([a-z%]*)$","i"),ca=["Top","Right","Bottom","Left"],da=function(a,b){return a=b||a,"none"===a.style.display||""===a.style.display&&r.contains(a.ownerDocument,a)&&"none"===r.css(a,"display")},ea=function(a,b,c,d){var e,f,g={};for(f in b)g[f]=a.style[f],a.style[f]=b[f];e=c.apply(a,d||[]);for(f in b)a.style[f]=g[f];return e};function fa(a,b,c,d){var e,f=1,g=20,h=d?function(){return d.cur()}:function(){return r.css(a,b,"")},i=h(),j=c&&c[3]||(r.cssNumber[b]?"":"px"),k=(r.cssNumber[b]||"px"!==j&&+i)&&ba.exec(r.css(a,b));if(k&&k[3]!==j){j=j||k[3],c=c||[],k=+i||1;do f=f||".5",k/=f,r.style(a,b,k+j);while(f!==(f=h()/i)&&1!==f&&--g)}return c&&(k=+k||+i||0,e=c[1]?k+(c[1]+1)*c[2]:+c[2],d&&(d.unit=j,d.start=k,d.end=e)),e}var ga={};function ha(a){var b,c=a.ownerDocument,d=a.nodeName,e=ga[d];return e?e:(b=c.body.appendChild(c.createElement(d)),e=r.css(b,"display"),b.parentNode.removeChild(b),"none"===e&&(e="block"),ga[d]=e,e)}function ia(a,b){for(var c,d,e=[],f=0,g=a.length;f<g;f++)d=a[f],d.style&&(c=d.style.display,b?("none"===c&&(e[f]=W.get(d,"display")||null,e[f]||(d.style.display="")),""===d.style.display&&da(d)&&(e[f]=ha(d))):"none"!==c&&(e[f]="none",W.set(d,"display",c)));for(f=0;f<g;f++)null!=e[f]&&(a[f].style.display=e[f]);return a}r.fn.extend({show:function(){return ia(this,!0)},hide:function(){return ia(this)},toggle:function(a){return"boolean"==typeof a?a?this.show():this.hide():this.each(function(){da(this)?r(this).show():r(this).hide()})}});var ja=/^(?:checkbox|radio)$/i,ka=/<([a-z][^\/\0>\x20\t\r\n\f]+)/i,la=/^$|\/(?:java|ecma)script/i,ma={option:[1,"<select multiple='multiple'>","</select>"],thead:[1,"<table>","</table>"],col:[2,"<table><colgroup>","</colgroup></table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],_default:[0,"",""]};ma.optgroup=ma.option,ma.tbody=ma.tfoot=ma.colgroup=ma.caption=ma.thead,ma.th=ma.td;function na(a,b){var c;return c="undefined"!=typeof a.getElementsByTagName?a.getElementsByTagName(b||"*"):"undefined"!=typeof a.querySelectorAll?a.querySelectorAll(b||"*"):[],void 0===b||b&&B(a,b)?r.merge([a],c):c}function oa(a,b){for(var c=0,d=a.length;c<d;c++)W.set(a[c],"globalEval",!b||W.get(b[c],"globalEval"))}var pa=/<|&#?\w+;/;function qa(a,b,c,d,e){for(var f,g,h,i,j,k,l=b.createDocumentFragment(),m=[],n=0,o=a.length;n<o;n++)if(f=a[n],f||0===f)if("object"===r.type(f))r.merge(m,f.nodeType?[f]:f);else if(pa.test(f)){g=g||l.appendChild(b.createElement("div")),h=(ka.exec(f)||["",""])[1].toLowerCase(),i=ma[h]||ma._default,g.innerHTML=i[1]+r.htmlPrefilter(f)+i[2],k=i[0];while(k--)g=g.lastChild;r.merge(m,g.childNodes),g=l.firstChild,g.textContent=""}else m.push(b.createTextNode(f));l.textContent="",n=0;while(f=m[n++])if(d&&r.inArray(f,d)>-1)e&&e.push(f);else if(j=r.contains(f.ownerDocument,f),g=na(l.appendChild(f),"script"),j&&oa(g),c){k=0;while(f=g[k++])la.test(f.type||"")&&c.push(f)}return l}!function(){var a=d.createDocumentFragment(),b=a.appendChild(d.createElement("div")),c=d.createElement("input");c.setAttribute("type","radio"),c.setAttribute("checked","checked"),c.setAttribute("name","t"),b.appendChild(c),o.checkClone=b.cloneNode(!0).cloneNode(!0).lastChild.checked,b.innerHTML="<textarea>x</textarea>",o.noCloneChecked=!!b.cloneNode(!0).lastChild.defaultValue}();var ra=d.documentElement,sa=/^key/,ta=/^(?:mouse|pointer|contextmenu|drag|drop)|click/,ua=/^([^.]*)(?:\.(.+)|)/;function va(){return!0}function wa(){return!1}function xa(){try{return d.activeElement}catch(a){}}function ya(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)ya(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),e===!1)e=wa;else if(!e)return a;return 1===f&&(g=e,e=function(a){return r().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=r.guid++)),a.each(function(){r.event.add(this,b,e,d,c)})}r.event={global:{},add:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.get(a);if(q){c.handler&&(f=c,c=f.handler,e=f.selector),e&&r.find.matchesSelector(ra,e),c.guid||(c.guid=r.guid++),(i=q.events)||(i=q.events={}),(g=q.handle)||(g=q.handle=function(b){return"undefined"!=typeof r&&r.event.triggered!==b.type?r.event.dispatch.apply(a,arguments):void 0}),b=(b||"").match(L)||[""],j=b.length;while(j--)h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n&&(l=r.event.special[n]||{},n=(e?l.delegateType:l.bindType)||n,l=r.event.special[n]||{},k=r.extend({type:n,origType:p,data:d,handler:c,guid:c.guid,selector:e,needsContext:e&&r.expr.match.needsContext.test(e),namespace:o.join(".")},f),(m=i[n])||(m=i[n]=[],m.delegateCount=0,l.setup&&l.setup.call(a,d,o,g)!==!1||a.addEventListener&&a.addEventListener(n,g)),l.add&&(l.add.call(a,k),k.handler.guid||(k.handler.guid=c.guid)),e?m.splice(m.delegateCount++,0,k):m.push(k),r.event.global[n]=!0)}},remove:function(a,b,c,d,e){var f,g,h,i,j,k,l,m,n,o,p,q=W.hasData(a)&&W.get(a);if(q&&(i=q.events)){b=(b||"").match(L)||[""],j=b.length;while(j--)if(h=ua.exec(b[j])||[],n=p=h[1],o=(h[2]||"").split(".").sort(),n){l=r.event.special[n]||{},n=(d?l.delegateType:l.bindType)||n,m=i[n]||[],h=h[2]&&new RegExp("(^|\\.)"+o.join("\\.(?:.*\\.|)")+"(\\.|$)"),g=f=m.length;while(f--)k=m[f],!e&&p!==k.origType||c&&c.guid!==k.guid||h&&!h.test(k.namespace)||d&&d!==k.selector&&("**"!==d||!k.selector)||(m.splice(f,1),k.selector&&m.delegateCount--,l.remove&&l.remove.call(a,k));g&&!m.length&&(l.teardown&&l.teardown.call(a,o,q.handle)!==!1||r.removeEvent(a,n,q.handle),delete i[n])}else for(n in i)r.event.remove(a,n+b[j],c,d,!0);r.isEmptyObject(i)&&W.remove(a,"handle events")}},dispatch:function(a){var b=r.event.fix(a),c,d,e,f,g,h,i=new Array(arguments.length),j=(W.get(this,"events")||{})[b.type]||[],k=r.event.special[b.type]||{};for(i[0]=b,c=1;c<arguments.length;c++)i[c]=arguments[c];if(b.delegateTarget=this,!k.preDispatch||k.preDispatch.call(this,b)!==!1){h=r.event.handlers.call(this,b,j),c=0;while((f=h[c++])&&!b.isPropagationStopped()){b.currentTarget=f.elem,d=0;while((g=f.handlers[d++])&&!b.isImmediatePropagationStopped())b.rnamespace&&!b.rnamespace.test(g.namespace)||(b.handleObj=g,b.data=g.data,e=((r.event.special[g.origType]||{}).handle||g.handler).apply(f.elem,i),void 0!==e&&(b.result=e)===!1&&(b.preventDefault(),b.stopPropagation()))}return k.postDispatch&&k.postDispatch.call(this,b),b.result}},handlers:function(a,b){var c,d,e,f,g,h=[],i=b.delegateCount,j=a.target;if(i&&j.nodeType&&!("click"===a.type&&a.button>=1))for(;j!==this;j=j.parentNode||this)if(1===j.nodeType&&("click"!==a.type||j.disabled!==!0)){for(f=[],g={},c=0;c<i;c++)d=b[c],e=d.selector+" ",void 0===g[e]&&(g[e]=d.needsContext?r(e,this).index(j)>-1:r.find(e,this,null,[j]).length),g[e]&&f.push(d);f.length&&h.push({elem:j,handlers:f})}return j=this,i<b.length&&h.push({elem:j,handlers:b.slice(i)}),h},addProp:function(a,b){Object.defineProperty(r.Event.prototype,a,{enumerable:!0,configurable:!0,get:r.isFunction(b)?function(){if(this.originalEvent)return b(this.originalEvent)}:function(){if(this.originalEvent)return this.originalEvent[a]},set:function(b){Object.defineProperty(this,a,{enumerable:!0,configurable:!0,writable:!0,value:b})}})},fix:function(a){return a[r.expando]?a:new r.Event(a)},special:{load:{noBubble:!0},focus:{trigger:function(){if(this!==xa()&&this.focus)return this.focus(),!1},delegateType:"focusin"},blur:{trigger:function(){if(this===xa()&&this.blur)return this.blur(),!1},delegateType:"focusout"},click:{trigger:function(){if("checkbox"===this.type&&this.click&&B(this,"input"))return this.click(),!1},_default:function(a){return B(a.target,"a")}},beforeunload:{postDispatch:function(a){void 0!==a.result&&a.originalEvent&&(a.originalEvent.returnValue=a.result)}}}},r.removeEvent=function(a,b,c){a.removeEventListener&&a.removeEventListener(b,c)},r.Event=function(a,b){return this instanceof r.Event?(a&&a.type?(this.originalEvent=a,this.type=a.type,this.isDefaultPrevented=a.defaultPrevented||void 0===a.defaultPrevented&&a.returnValue===!1?va:wa,this.target=a.target&&3===a.target.nodeType?a.target.parentNode:a.target,this.currentTarget=a.currentTarget,this.relatedTarget=a.relatedTarget):this.type=a,b&&r.extend(this,b),this.timeStamp=a&&a.timeStamp||r.now(),void(this[r.expando]=!0)):new r.Event(a,b)},r.Event.prototype={constructor:r.Event,isDefaultPrevented:wa,isPropagationStopped:wa,isImmediatePropagationStopped:wa,isSimulated:!1,preventDefault:function(){var a=this.originalEvent;this.isDefaultPrevented=va,a&&!this.isSimulated&&a.preventDefault()},stopPropagation:function(){var a=this.originalEvent;this.isPropagationStopped=va,a&&!this.isSimulated&&a.stopPropagation()},stopImmediatePropagation:function(){var a=this.originalEvent;this.isImmediatePropagationStopped=va,a&&!this.isSimulated&&a.stopImmediatePropagation(),this.stopPropagation()}},r.each({altKey:!0,bubbles:!0,cancelable:!0,changedTouches:!0,ctrlKey:!0,detail:!0,eventPhase:!0,metaKey:!0,pageX:!0,pageY:!0,shiftKey:!0,view:!0,"char":!0,charCode:!0,key:!0,keyCode:!0,button:!0,buttons:!0,clientX:!0,clientY:!0,offsetX:!0,offsetY:!0,pointerId:!0,pointerType:!0,screenX:!0,screenY:!0,targetTouches:!0,toElement:!0,touches:!0,which:function(a){var b=a.button;return null==a.which&&sa.test(a.type)?null!=a.charCode?a.charCode:a.keyCode:!a.which&&void 0!==b&&ta.test(a.type)?1&b?1:2&b?3:4&b?2:0:a.which}},r.event.addProp),r.each({mouseenter:"mouseover",mouseleave:"mouseout",pointerenter:"pointerover",pointerleave:"pointerout"},function(a,b){r.event.special[a]={delegateType:b,bindType:b,handle:function(a){var c,d=this,e=a.relatedTarget,f=a.handleObj;return e&&(e===d||r.contains(d,e))||(a.type=f.origType,c=f.handler.apply(this,arguments),a.type=b),c}}}),r.fn.extend({on:function(a,b,c,d){return ya(this,a,b,c,d)},one:function(a,b,c,d){return ya(this,a,b,c,d,1)},off:function(a,b,c){var d,e;if(a&&a.preventDefault&&a.handleObj)return d=a.handleObj,r(a.delegateTarget).off(d.namespace?d.origType+"."+d.namespace:d.origType,d.selector,d.handler),this;if("object"==typeof a){for(e in a)this.off(e,b,a[e]);return this}return b!==!1&&"function"!=typeof b||(c=b,b=void 0),c===!1&&(c=wa),this.each(function(){r.event.remove(this,a,c,b)})}});var za=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([a-z][^\/\0>\x20\t\r\n\f]*)[^>]*)\/>/gi,Aa=/<script|<style|<link/i,Ba=/checked\s*(?:[^=]|=\s*.checked.)/i,Ca=/^true\/(.*)/,Da=/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;function Ea(a,b){return B(a,"table")&&B(11!==b.nodeType?b:b.firstChild,"tr")?r(">tbody",a)[0]||a:a}function Fa(a){return a.type=(null!==a.getAttribute("type"))+"/"+a.type,a}function Ga(a){var b=Ca.exec(a.type);return b?a.type=b[1]:a.removeAttribute("type"),a}function Ha(a,b){var c,d,e,f,g,h,i,j;if(1===b.nodeType){if(W.hasData(a)&&(f=W.access(a),g=W.set(b,f),j=f.events)){delete g.handle,g.events={};for(e in j)for(c=0,d=j[e].length;c<d;c++)r.event.add(b,e,j[e][c])}X.hasData(a)&&(h=X.access(a),i=r.extend({},h),X.set(b,i))}}function Ia(a,b){var c=b.nodeName.toLowerCase();"input"===c&&ja.test(a.type)?b.checked=a.checked:"input"!==c&&"textarea"!==c||(b.defaultValue=a.defaultValue)}function Ja(a,b,c,d){b=g.apply([],b);var e,f,h,i,j,k,l=0,m=a.length,n=m-1,q=b[0],s=r.isFunction(q);if(s||m>1&&"string"==typeof q&&!o.checkClone&&Ba.test(q))return a.each(function(e){var f=a.eq(e);s&&(b[0]=q.call(this,e,f.html())),Ja(f,b,c,d)});if(m&&(e=qa(b,a[0].ownerDocument,!1,a,d),f=e.firstChild,1===e.childNodes.length&&(e=f),f||d)){for(h=r.map(na(e,"script"),Fa),i=h.length;l<m;l++)j=e,l!==n&&(j=r.clone(j,!0,!0),i&&r.merge(h,na(j,"script"))),c.call(a[l],j,l);if(i)for(k=h[h.length-1].ownerDocument,r.map(h,Ga),l=0;l<i;l++)j=h[l],la.test(j.type||"")&&!W.access(j,"globalEval")&&r.contains(k,j)&&(j.src?r._evalUrl&&r._evalUrl(j.src):p(j.textContent.replace(Da,""),k))}return a}function Ka(a,b,c){for(var d,e=b?r.filter(b,a):a,f=0;null!=(d=e[f]);f++)c||1!==d.nodeType||r.cleanData(na(d)),d.parentNode&&(c&&r.contains(d.ownerDocument,d)&&oa(na(d,"script")),d.parentNode.removeChild(d));return a}r.extend({htmlPrefilter:function(a){return a.replace(za,"<$1></$2>")},clone:function(a,b,c){var d,e,f,g,h=a.cloneNode(!0),i=r.contains(a.ownerDocument,a);if(!(o.noCloneChecked||1!==a.nodeType&&11!==a.nodeType||r.isXMLDoc(a)))for(g=na(h),f=na(a),d=0,e=f.length;d<e;d++)Ia(f[d],g[d]);if(b)if(c)for(f=f||na(a),g=g||na(h),d=0,e=f.length;d<e;d++)Ha(f[d],g[d]);else Ha(a,h);return g=na(h,"script"),g.length>0&&oa(g,!i&&na(a,"script")),h},cleanData:function(a){for(var b,c,d,e=r.event.special,f=0;void 0!==(c=a[f]);f++)if(U(c)){if(b=c[W.expando]){if(b.events)for(d in b.events)e[d]?r.event.remove(c,d):r.removeEvent(c,d,b.handle);c[W.expando]=void 0}c[X.expando]&&(c[X.expando]=void 0)}}}),r.fn.extend({detach:function(a){return Ka(this,a,!0)},remove:function(a){return Ka(this,a)},text:function(a){return T(this,function(a){return void 0===a?r.text(this):this.empty().each(function(){1!==this.nodeType&&11!==this.nodeType&&9!==this.nodeType||(this.textContent=a)})},null,a,arguments.length)},append:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.appendChild(a)}})},prepend:function(){return Ja(this,arguments,function(a){if(1===this.nodeType||11===this.nodeType||9===this.nodeType){var b=Ea(this,a);b.insertBefore(a,b.firstChild)}})},before:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this)})},after:function(){return Ja(this,arguments,function(a){this.parentNode&&this.parentNode.insertBefore(a,this.nextSibling)})},empty:function(){for(var a,b=0;null!=(a=this[b]);b++)1===a.nodeType&&(r.cleanData(na(a,!1)),a.textContent="");return this},clone:function(a,b){return a=null!=a&&a,b=null==b?a:b,this.map(function(){return r.clone(this,a,b)})},html:function(a){return T(this,function(a){var b=this[0]||{},c=0,d=this.length;if(void 0===a&&1===b.nodeType)return b.innerHTML;if("string"==typeof a&&!Aa.test(a)&&!ma[(ka.exec(a)||["",""])[1].toLowerCase()]){a=r.htmlPrefilter(a);try{for(;c<d;c++)b=this[c]||{},1===b.nodeType&&(r.cleanData(na(b,!1)),b.innerHTML=a);b=0}catch(e){}}b&&this.empty().append(a)},null,a,arguments.length)},replaceWith:function(){var a=[];return Ja(this,arguments,function(b){var c=this.parentNode;r.inArray(this,a)<0&&(r.cleanData(na(this)),c&&c.replaceChild(b,this))},a)}}),r.each({appendTo:"append",prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){r.fn[a]=function(a){for(var c,d=[],e=r(a),f=e.length-1,g=0;g<=f;g++)c=g===f?this:this.clone(!0),r(e[g])[b](c),h.apply(d,c.get());return this.pushStack(d)}});var La=/^margin/,Ma=new RegExp("^("+aa+")(?!px)[a-z%]+$","i"),Na=function(b){var c=b.ownerDocument.defaultView;return c&&c.opener||(c=a),c.getComputedStyle(b)};!function(){function b(){if(i){i.style.cssText="box-sizing:border-box;position:relative;display:block;margin:auto;border:1px;padding:1px;top:1%;width:50%",i.innerHTML="",ra.appendChild(h);var b=a.getComputedStyle(i);c="1%"!==b.top,g="2px"===b.marginLeft,e="4px"===b.width,i.style.marginRight="50%",f="4px"===b.marginRight,ra.removeChild(h),i=null}}var c,e,f,g,h=d.createElement("div"),i=d.createElement("div");i.style&&(i.style.backgroundClip="content-box",i.cloneNode(!0).style.backgroundClip="",o.clearCloneStyle="content-box"===i.style.backgroundClip,h.style.cssText="border:0;width:8px;height:0;top:0;left:-9999px;padding:0;margin-top:1px;position:absolute",h.appendChild(i),r.extend(o,{pixelPosition:function(){return b(),c},boxSizingReliable:function(){return b(),e},pixelMarginRight:function(){return b(),f},reliableMarginLeft:function(){return b(),g}}))}();function Oa(a,b,c){var d,e,f,g,h=a.style;return c=c||Na(a),c&&(g=c.getPropertyValue(b)||c[b],""!==g||r.contains(a.ownerDocument,a)||(g=r.style(a,b)),!o.pixelMarginRight()&&Ma.test(g)&&La.test(b)&&(d=h.width,e=h.minWidth,f=h.maxWidth,h.minWidth=h.maxWidth=h.width=g,g=c.width,h.width=d,h.minWidth=e,h.maxWidth=f)),void 0!==g?g+"":g}function Pa(a,b){return{get:function(){return a()?void delete this.get:(this.get=b).apply(this,arguments)}}}var Qa=/^(none|table(?!-c[ea]).+)/,Ra=/^--/,Sa={position:"absolute",visibility:"hidden",display:"block"},Ta={letterSpacing:"0",fontWeight:"400"},Ua=["Webkit","Moz","ms"],Va=d.createElement("div").style;function Wa(a){if(a in Va)return a;var b=a[0].toUpperCase()+a.slice(1),c=Ua.length;while(c--)if(a=Ua[c]+b,a in Va)return a}function Xa(a){var b=r.cssProps[a];return b||(b=r.cssProps[a]=Wa(a)||a),b}function Ya(a,b,c){var d=ba.exec(b);return d?Math.max(0,d[2]-(c||0))+(d[3]||"px"):b}function Za(a,b,c,d,e){var f,g=0;for(f=c===(d?"border":"content")?4:"width"===b?1:0;f<4;f+=2)"margin"===c&&(g+=r.css(a,c+ca[f],!0,e)),d?("content"===c&&(g-=r.css(a,"padding"+ca[f],!0,e)),"margin"!==c&&(g-=r.css(a,"border"+ca[f]+"Width",!0,e))):(g+=r.css(a,"padding"+ca[f],!0,e),"padding"!==c&&(g+=r.css(a,"border"+ca[f]+"Width",!0,e)));return g}function $a(a,b,c){var d,e=Na(a),f=Oa(a,b,e),g="border-box"===r.css(a,"boxSizing",!1,e);return Ma.test(f)?f:(d=g&&(o.boxSizingReliable()||f===a.style[b]),"auto"===f&&(f=a["offset"+b[0].toUpperCase()+b.slice(1)]),f=parseFloat(f)||0,f+Za(a,b,c||(g?"border":"content"),d,e)+"px")}r.extend({cssHooks:{opacity:{get:function(a,b){if(b){var c=Oa(a,"opacity");return""===c?"1":c}}}},cssNumber:{animationIterationCount:!0,columnCount:!0,fillOpacity:!0,flexGrow:!0,flexShrink:!0,fontWeight:!0,lineHeight:!0,opacity:!0,order:!0,orphans:!0,widows:!0,zIndex:!0,zoom:!0},cssProps:{"float":"cssFloat"},style:function(a,b,c,d){if(a&&3!==a.nodeType&&8!==a.nodeType&&a.style){var e,f,g,h=r.camelCase(b),i=Ra.test(b),j=a.style;return i||(b=Xa(h)),g=r.cssHooks[b]||r.cssHooks[h],void 0===c?g&&"get"in g&&void 0!==(e=g.get(a,!1,d))?e:j[b]:(f=typeof c,"string"===f&&(e=ba.exec(c))&&e[1]&&(c=fa(a,b,e),f="number"),null!=c&&c===c&&("number"===f&&(c+=e&&e[3]||(r.cssNumber[h]?"":"px")),o.clearCloneStyle||""!==c||0!==b.indexOf("background")||(j[b]="inherit"),g&&"set"in g&&void 0===(c=g.set(a,c,d))||(i?j.setProperty(b,c):j[b]=c)),void 0)}},css:function(a,b,c,d){var e,f,g,h=r.camelCase(b),i=Ra.test(b);return i||(b=Xa(h)),g=r.cssHooks[b]||r.cssHooks[h],g&&"get"in g&&(e=g.get(a,!0,c)),void 0===e&&(e=Oa(a,b,d)),"normal"===e&&b in Ta&&(e=Ta[b]),""===c||c?(f=parseFloat(e),c===!0||isFinite(f)?f||0:e):e}}),r.each(["height","width"],function(a,b){r.cssHooks[b]={get:function(a,c,d){if(c)return!Qa.test(r.css(a,"display"))||a.getClientRects().length&&a.getBoundingClientRect().width?$a(a,b,d):ea(a,Sa,function(){return $a(a,b,d)})},set:function(a,c,d){var e,f=d&&Na(a),g=d&&Za(a,b,d,"border-box"===r.css(a,"boxSizing",!1,f),f);return g&&(e=ba.exec(c))&&"px"!==(e[3]||"px")&&(a.style[b]=c,c=r.css(a,b)),Ya(a,c,g)}}}),r.cssHooks.marginLeft=Pa(o.reliableMarginLeft,function(a,b){if(b)return(parseFloat(Oa(a,"marginLeft"))||a.getBoundingClientRect().left-ea(a,{marginLeft:0},function(){return a.getBoundingClientRect().left}))+"px"}),r.each({margin:"",padding:"",border:"Width"},function(a,b){r.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];d<4;d++)e[a+ca[d]+b]=f[d]||f[d-2]||f[0];return e}},La.test(a)||(r.cssHooks[a+b].set=Ya)}),r.fn.extend({css:function(a,b){return T(this,function(a,b,c){var d,e,f={},g=0;if(Array.isArray(b)){for(d=Na(a),e=b.length;g<e;g++)f[b[g]]=r.css(a,b[g],!1,d);return f}return void 0!==c?r.style(a,b,c):r.css(a,b)},a,b,arguments.length>1)}});function _a(a,b,c,d,e){return new _a.prototype.init(a,b,c,d,e)}r.Tween=_a,_a.prototype={constructor:_a,init:function(a,b,c,d,e,f){this.elem=a,this.prop=c,this.easing=e||r.easing._default,this.options=b,this.start=this.now=this.cur(),this.end=d,this.unit=f||(r.cssNumber[c]?"":"px")},cur:function(){var a=_a.propHooks[this.prop];return a&&a.get?a.get(this):_a.propHooks._default.get(this)},run:function(a){var b,c=_a.propHooks[this.prop];return this.options.duration?this.pos=b=r.easing[this.easing](a,this.options.duration*a,0,1,this.options.duration):this.pos=b=a,this.now=(this.end-this.start)*b+this.start,this.options.step&&this.options.step.call(this.elem,this.now,this),c&&c.set?c.set(this):_a.propHooks._default.set(this),this}},_a.prototype.init.prototype=_a.prototype,_a.propHooks={_default:{get:function(a){var b;return 1!==a.elem.nodeType||null!=a.elem[a.prop]&&null==a.elem.style[a.prop]?a.elem[a.prop]:(b=r.css(a.elem,a.prop,""),b&&"auto"!==b?b:0)},set:function(a){r.fx.step[a.prop]?r.fx.step[a.prop](a):1!==a.elem.nodeType||null==a.elem.style[r.cssProps[a.prop]]&&!r.cssHooks[a.prop]?a.elem[a.prop]=a.now:r.style(a.elem,a.prop,a.now+a.unit)}}},_a.propHooks.scrollTop=_a.propHooks.scrollLeft={set:function(a){a.elem.nodeType&&a.elem.parentNode&&(a.elem[a.prop]=a.now)}},r.easing={linear:function(a){return a},swing:function(a){return.5-Math.cos(a*Math.PI)/2},_default:"swing"},r.fx=_a.prototype.init,r.fx.step={};var ab,bb,cb=/^(?:toggle|show|hide)$/,db=/queueHooks$/;function eb(){bb&&(d.hidden===!1&&a.requestAnimationFrame?a.requestAnimationFrame(eb):a.setTimeout(eb,r.fx.interval),r.fx.tick())}function fb(){return a.setTimeout(function(){ab=void 0}),ab=r.now()}function gb(a,b){var c,d=0,e={height:a};for(b=b?1:0;d<4;d+=2-b)c=ca[d],e["margin"+c]=e["padding"+c]=a;return b&&(e.opacity=e.width=a),e}function hb(a,b,c){for(var d,e=(kb.tweeners[b]||[]).concat(kb.tweeners["*"]),f=0,g=e.length;f<g;f++)if(d=e[f].call(c,b,a))return d}function ib(a,b,c){var d,e,f,g,h,i,j,k,l="width"in b||"height"in b,m=this,n={},o=a.style,p=a.nodeType&&da(a),q=W.get(a,"fxshow");c.queue||(g=r._queueHooks(a,"fx"),null==g.unqueued&&(g.unqueued=0,h=g.empty.fire,g.empty.fire=function(){g.unqueued||h()}),g.unqueued++,m.always(function(){m.always(function(){g.unqueued--,r.queue(a,"fx").length||g.empty.fire()})}));for(d in b)if(e=b[d],cb.test(e)){if(delete b[d],f=f||"toggle"===e,e===(p?"hide":"show")){if("show"!==e||!q||void 0===q[d])continue;p=!0}n[d]=q&&q[d]||r.style(a,d)}if(i=!r.isEmptyObject(b),i||!r.isEmptyObject(n)){l&&1===a.nodeType&&(c.overflow=[o.overflow,o.overflowX,o.overflowY],j=q&&q.display,null==j&&(j=W.get(a,"display")),k=r.css(a,"display"),"none"===k&&(j?k=j:(ia([a],!0),j=a.style.display||j,k=r.css(a,"display"),ia([a]))),("inline"===k||"inline-block"===k&&null!=j)&&"none"===r.css(a,"float")&&(i||(m.done(function(){o.display=j}),null==j&&(k=o.display,j="none"===k?"":k)),o.display="inline-block")),c.overflow&&(o.overflow="hidden",m.always(function(){o.overflow=c.overflow[0],o.overflowX=c.overflow[1],o.overflowY=c.overflow[2]})),i=!1;for(d in n)i||(q?"hidden"in q&&(p=q.hidden):q=W.access(a,"fxshow",{display:j}),f&&(q.hidden=!p),p&&ia([a],!0),m.done(function(){p||ia([a]),W.remove(a,"fxshow");for(d in n)r.style(a,d,n[d])})),i=hb(p?q[d]:0,d,m),d in q||(q[d]=i.start,p&&(i.end=i.start,i.start=0))}}function jb(a,b){var c,d,e,f,g;for(c in a)if(d=r.camelCase(c),e=b[d],f=a[c],Array.isArray(f)&&(e=f[1],f=a[c]=f[0]),c!==d&&(a[d]=f,delete a[c]),g=r.cssHooks[d],g&&"expand"in g){f=g.expand(f),delete a[d];for(c in f)c in a||(a[c]=f[c],b[c]=e)}else b[d]=e}function kb(a,b,c){var d,e,f=0,g=kb.prefilters.length,h=r.Deferred().always(function(){delete i.elem}),i=function(){if(e)return!1;for(var b=ab||fb(),c=Math.max(0,j.startTime+j.duration-b),d=c/j.duration||0,f=1-d,g=0,i=j.tweens.length;g<i;g++)j.tweens[g].run(f);return h.notifyWith(a,[j,f,c]),f<1&&i?c:(i||h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j]),!1)},j=h.promise({elem:a,props:r.extend({},b),opts:r.extend(!0,{specialEasing:{},easing:r.easing._default},c),originalProperties:b,originalOptions:c,startTime:ab||fb(),duration:c.duration,tweens:[],createTween:function(b,c){var d=r.Tween(a,j.opts,b,c,j.opts.specialEasing[b]||j.opts.easing);return j.tweens.push(d),d},stop:function(b){var c=0,d=b?j.tweens.length:0;if(e)return this;for(e=!0;c<d;c++)j.tweens[c].run(1);return b?(h.notifyWith(a,[j,1,0]),h.resolveWith(a,[j,b])):h.rejectWith(a,[j,b]),this}}),k=j.props;for(jb(k,j.opts.specialEasing);f<g;f++)if(d=kb.prefilters[f].call(j,a,k,j.opts))return r.isFunction(d.stop)&&(r._queueHooks(j.elem,j.opts.queue).stop=r.proxy(d.stop,d)),d;return r.map(k,hb,j),r.isFunction(j.opts.start)&&j.opts.start.call(a,j),j.progress(j.opts.progress).done(j.opts.done,j.opts.complete).fail(j.opts.fail).always(j.opts.always),r.fx.timer(r.extend(i,{elem:a,anim:j,queue:j.opts.queue})),j}r.Animation=r.extend(kb,{tweeners:{"*":[function(a,b){var c=this.createTween(a,b);return fa(c.elem,a,ba.exec(b),c),c}]},tweener:function(a,b){r.isFunction(a)?(b=a,a=["*"]):a=a.match(L);for(var c,d=0,e=a.length;d<e;d++)c=a[d],kb.tweeners[c]=kb.tweeners[c]||[],kb.tweeners[c].unshift(b)},prefilters:[ib],prefilter:function(a,b){b?kb.prefilters.unshift(a):kb.prefilters.push(a)}}),r.speed=function(a,b,c){var d=a&&"object"==typeof a?r.extend({},a):{complete:c||!c&&b||r.isFunction(a)&&a,duration:a,easing:c&&b||b&&!r.isFunction(b)&&b};return r.fx.off?d.duration=0:"number"!=typeof d.duration&&(d.duration in r.fx.speeds?d.duration=r.fx.speeds[d.duration]:d.duration=r.fx.speeds._default),null!=d.queue&&d.queue!==!0||(d.queue="fx"),d.old=d.complete,d.complete=function(){r.isFunction(d.old)&&d.old.call(this),d.queue&&r.dequeue(this,d.queue)},d},r.fn.extend({fadeTo:function(a,b,c,d){return this.filter(da).css("opacity",0).show().end().animate({opacity:b},a,c,d)},animate:function(a,b,c,d){var e=r.isEmptyObject(a),f=r.speed(b,c,d),g=function(){var b=kb(this,r.extend({},a),f);(e||W.get(this,"finish"))&&b.stop(!0)};return g.finish=g,e||f.queue===!1?this.each(g):this.queue(f.queue,g)},stop:function(a,b,c){var d=function(a){var b=a.stop;delete a.stop,b(c)};return"string"!=typeof a&&(c=b,b=a,a=void 0),b&&a!==!1&&this.queue(a||"fx",[]),this.each(function(){var b=!0,e=null!=a&&a+"queueHooks",f=r.timers,g=W.get(this);if(e)g[e]&&g[e].stop&&d(g[e]);else for(e in g)g[e]&&g[e].stop&&db.test(e)&&d(g[e]);for(e=f.length;e--;)f[e].elem!==this||null!=a&&f[e].queue!==a||(f[e].anim.stop(c),b=!1,f.splice(e,1));!b&&c||r.dequeue(this,a)})},finish:function(a){return a!==!1&&(a=a||"fx"),this.each(function(){var b,c=W.get(this),d=c[a+"queue"],e=c[a+"queueHooks"],f=r.timers,g=d?d.length:0;for(c.finish=!0,r.queue(this,a,[]),e&&e.stop&&e.stop.call(this,!0),b=f.length;b--;)f[b].elem===this&&f[b].queue===a&&(f[b].anim.stop(!0),f.splice(b,1));for(b=0;b<g;b++)d[b]&&d[b].finish&&d[b].finish.call(this);delete c.finish})}}),r.each(["toggle","show","hide"],function(a,b){var c=r.fn[b];r.fn[b]=function(a,d,e){return null==a||"boolean"==typeof a?c.apply(this,arguments):this.animate(gb(b,!0),a,d,e)}}),r.each({slideDown:gb("show"),slideUp:gb("hide"),slideToggle:gb("toggle"),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){r.fn[a]=function(a,c,d){return this.animate(b,a,c,d)}}),r.timers=[],r.fx.tick=function(){var a,b=0,c=r.timers;for(ab=r.now();b<c.length;b++)a=c[b],a()||c[b]!==a||c.splice(b--,1);c.length||r.fx.stop(),ab=void 0},r.fx.timer=function(a){r.timers.push(a),r.fx.start()},r.fx.interval=13,r.fx.start=function(){bb||(bb=!0,eb())},r.fx.stop=function(){bb=null},r.fx.speeds={slow:600,fast:200,_default:400},r.fn.delay=function(b,c){return b=r.fx?r.fx.speeds[b]||b:b,c=c||"fx",this.queue(c,function(c,d){var e=a.setTimeout(c,b);d.stop=function(){a.clearTimeout(e)}})},function(){var a=d.createElement("input"),b=d.createElement("select"),c=b.appendChild(d.createElement("option"));a.type="checkbox",o.checkOn=""!==a.value,o.optSelected=c.selected,a=d.createElement("input"),a.value="t",a.type="radio",o.radioValue="t"===a.value}();var lb,mb=r.expr.attrHandle;r.fn.extend({attr:function(a,b){return T(this,r.attr,a,b,arguments.length>1)},removeAttr:function(a){return this.each(function(){r.removeAttr(this,a)})}}),r.extend({attr:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return"undefined"==typeof a.getAttribute?r.prop(a,b,c):(1===f&&r.isXMLDoc(a)||(e=r.attrHooks[b.toLowerCase()]||(r.expr.match.bool.test(b)?lb:void 0)),void 0!==c?null===c?void r.removeAttr(a,b):e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:(a.setAttribute(b,c+""),c):e&&"get"in e&&null!==(d=e.get(a,b))?d:(d=r.find.attr(a,b),
null==d?void 0:d))},attrHooks:{type:{set:function(a,b){if(!o.radioValue&&"radio"===b&&B(a,"input")){var c=a.value;return a.setAttribute("type",b),c&&(a.value=c),b}}}},removeAttr:function(a,b){var c,d=0,e=b&&b.match(L);if(e&&1===a.nodeType)while(c=e[d++])a.removeAttribute(c)}}),lb={set:function(a,b,c){return b===!1?r.removeAttr(a,c):a.setAttribute(c,c),c}},r.each(r.expr.match.bool.source.match(/\w+/g),function(a,b){var c=mb[b]||r.find.attr;mb[b]=function(a,b,d){var e,f,g=b.toLowerCase();return d||(f=mb[g],mb[g]=e,e=null!=c(a,b,d)?g:null,mb[g]=f),e}});var nb=/^(?:input|select|textarea|button)$/i,ob=/^(?:a|area)$/i;r.fn.extend({prop:function(a,b){return T(this,r.prop,a,b,arguments.length>1)},removeProp:function(a){return this.each(function(){delete this[r.propFix[a]||a]})}}),r.extend({prop:function(a,b,c){var d,e,f=a.nodeType;if(3!==f&&8!==f&&2!==f)return 1===f&&r.isXMLDoc(a)||(b=r.propFix[b]||b,e=r.propHooks[b]),void 0!==c?e&&"set"in e&&void 0!==(d=e.set(a,c,b))?d:a[b]=c:e&&"get"in e&&null!==(d=e.get(a,b))?d:a[b]},propHooks:{tabIndex:{get:function(a){var b=r.find.attr(a,"tabindex");return b?parseInt(b,10):nb.test(a.nodeName)||ob.test(a.nodeName)&&a.href?0:-1}}},propFix:{"for":"htmlFor","class":"className"}}),o.optSelected||(r.propHooks.selected={get:function(a){var b=a.parentNode;return b&&b.parentNode&&b.parentNode.selectedIndex,null},set:function(a){var b=a.parentNode;b&&(b.selectedIndex,b.parentNode&&b.parentNode.selectedIndex)}}),r.each(["tabIndex","readOnly","maxLength","cellSpacing","cellPadding","rowSpan","colSpan","useMap","frameBorder","contentEditable"],function(){r.propFix[this.toLowerCase()]=this});function pb(a){var b=a.match(L)||[];return b.join(" ")}function qb(a){return a.getAttribute&&a.getAttribute("class")||""}r.fn.extend({addClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).addClass(a.call(this,b,qb(this)))});if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])d.indexOf(" "+f+" ")<0&&(d+=f+" ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},removeClass:function(a){var b,c,d,e,f,g,h,i=0;if(r.isFunction(a))return this.each(function(b){r(this).removeClass(a.call(this,b,qb(this)))});if(!arguments.length)return this.attr("class","");if("string"==typeof a&&a){b=a.match(L)||[];while(c=this[i++])if(e=qb(c),d=1===c.nodeType&&" "+pb(e)+" "){g=0;while(f=b[g++])while(d.indexOf(" "+f+" ")>-1)d=d.replace(" "+f+" "," ");h=pb(d),e!==h&&c.setAttribute("class",h)}}return this},toggleClass:function(a,b){var c=typeof a;return"boolean"==typeof b&&"string"===c?b?this.addClass(a):this.removeClass(a):r.isFunction(a)?this.each(function(c){r(this).toggleClass(a.call(this,c,qb(this),b),b)}):this.each(function(){var b,d,e,f;if("string"===c){d=0,e=r(this),f=a.match(L)||[];while(b=f[d++])e.hasClass(b)?e.removeClass(b):e.addClass(b)}else void 0!==a&&"boolean"!==c||(b=qb(this),b&&W.set(this,"__className__",b),this.setAttribute&&this.setAttribute("class",b||a===!1?"":W.get(this,"__className__")||""))})},hasClass:function(a){var b,c,d=0;b=" "+a+" ";while(c=this[d++])if(1===c.nodeType&&(" "+pb(qb(c))+" ").indexOf(b)>-1)return!0;return!1}});var rb=/\r/g;r.fn.extend({val:function(a){var b,c,d,e=this[0];{if(arguments.length)return d=r.isFunction(a),this.each(function(c){var e;1===this.nodeType&&(e=d?a.call(this,c,r(this).val()):a,null==e?e="":"number"==typeof e?e+="":Array.isArray(e)&&(e=r.map(e,function(a){return null==a?"":a+""})),b=r.valHooks[this.type]||r.valHooks[this.nodeName.toLowerCase()],b&&"set"in b&&void 0!==b.set(this,e,"value")||(this.value=e))});if(e)return b=r.valHooks[e.type]||r.valHooks[e.nodeName.toLowerCase()],b&&"get"in b&&void 0!==(c=b.get(e,"value"))?c:(c=e.value,"string"==typeof c?c.replace(rb,""):null==c?"":c)}}}),r.extend({valHooks:{option:{get:function(a){var b=r.find.attr(a,"value");return null!=b?b:pb(r.text(a))}},select:{get:function(a){var b,c,d,e=a.options,f=a.selectedIndex,g="select-one"===a.type,h=g?null:[],i=g?f+1:e.length;for(d=f<0?i:g?f:0;d<i;d++)if(c=e[d],(c.selected||d===f)&&!c.disabled&&(!c.parentNode.disabled||!B(c.parentNode,"optgroup"))){if(b=r(c).val(),g)return b;h.push(b)}return h},set:function(a,b){var c,d,e=a.options,f=r.makeArray(b),g=e.length;while(g--)d=e[g],(d.selected=r.inArray(r.valHooks.option.get(d),f)>-1)&&(c=!0);return c||(a.selectedIndex=-1),f}}}}),r.each(["radio","checkbox"],function(){r.valHooks[this]={set:function(a,b){if(Array.isArray(b))return a.checked=r.inArray(r(a).val(),b)>-1}},o.checkOn||(r.valHooks[this].get=function(a){return null===a.getAttribute("value")?"on":a.value})});var sb=/^(?:focusinfocus|focusoutblur)$/;r.extend(r.event,{trigger:function(b,c,e,f){var g,h,i,j,k,m,n,o=[e||d],p=l.call(b,"type")?b.type:b,q=l.call(b,"namespace")?b.namespace.split("."):[];if(h=i=e=e||d,3!==e.nodeType&&8!==e.nodeType&&!sb.test(p+r.event.triggered)&&(p.indexOf(".")>-1&&(q=p.split("."),p=q.shift(),q.sort()),k=p.indexOf(":")<0&&"on"+p,b=b[r.expando]?b:new r.Event(p,"object"==typeof b&&b),b.isTrigger=f?2:3,b.namespace=q.join("."),b.rnamespace=b.namespace?new RegExp("(^|\\.)"+q.join("\\.(?:.*\\.|)")+"(\\.|$)"):null,b.result=void 0,b.target||(b.target=e),c=null==c?[b]:r.makeArray(c,[b]),n=r.event.special[p]||{},f||!n.trigger||n.trigger.apply(e,c)!==!1)){if(!f&&!n.noBubble&&!r.isWindow(e)){for(j=n.delegateType||p,sb.test(j+p)||(h=h.parentNode);h;h=h.parentNode)o.push(h),i=h;i===(e.ownerDocument||d)&&o.push(i.defaultView||i.parentWindow||a)}g=0;while((h=o[g++])&&!b.isPropagationStopped())b.type=g>1?j:n.bindType||p,m=(W.get(h,"events")||{})[b.type]&&W.get(h,"handle"),m&&m.apply(h,c),m=k&&h[k],m&&m.apply&&U(h)&&(b.result=m.apply(h,c),b.result===!1&&b.preventDefault());return b.type=p,f||b.isDefaultPrevented()||n._default&&n._default.apply(o.pop(),c)!==!1||!U(e)||k&&r.isFunction(e[p])&&!r.isWindow(e)&&(i=e[k],i&&(e[k]=null),r.event.triggered=p,e[p](),r.event.triggered=void 0,i&&(e[k]=i)),b.result}},simulate:function(a,b,c){var d=r.extend(new r.Event,c,{type:a,isSimulated:!0});r.event.trigger(d,null,b)}}),r.fn.extend({trigger:function(a,b){return this.each(function(){r.event.trigger(a,b,this)})},triggerHandler:function(a,b){var c=this[0];if(c)return r.event.trigger(a,b,c,!0)}}),r.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(a,b){r.fn[b]=function(a,c){return arguments.length>0?this.on(b,null,a,c):this.trigger(b)}}),r.fn.extend({hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}}),o.focusin="onfocusin"in a,o.focusin||r.each({focus:"focusin",blur:"focusout"},function(a,b){var c=function(a){r.event.simulate(b,a.target,r.event.fix(a))};r.event.special[b]={setup:function(){var d=this.ownerDocument||this,e=W.access(d,b);e||d.addEventListener(a,c,!0),W.access(d,b,(e||0)+1)},teardown:function(){var d=this.ownerDocument||this,e=W.access(d,b)-1;e?W.access(d,b,e):(d.removeEventListener(a,c,!0),W.remove(d,b))}}});var tb=a.location,ub=r.now(),vb=/\?/;r.parseXML=function(b){var c;if(!b||"string"!=typeof b)return null;try{c=(new a.DOMParser).parseFromString(b,"text/xml")}catch(d){c=void 0}return c&&!c.getElementsByTagName("parsererror").length||r.error("Invalid XML: "+b),c};var wb=/\[\]$/,xb=/\r?\n/g,yb=/^(?:submit|button|image|reset|file)$/i,zb=/^(?:input|select|textarea|keygen)/i;function Ab(a,b,c,d){var e;if(Array.isArray(b))r.each(b,function(b,e){c||wb.test(a)?d(a,e):Ab(a+"["+("object"==typeof e&&null!=e?b:"")+"]",e,c,d)});else if(c||"object"!==r.type(b))d(a,b);else for(e in b)Ab(a+"["+e+"]",b[e],c,d)}r.param=function(a,b){var c,d=[],e=function(a,b){var c=r.isFunction(b)?b():b;d[d.length]=encodeURIComponent(a)+"="+encodeURIComponent(null==c?"":c)};if(Array.isArray(a)||a.jquery&&!r.isPlainObject(a))r.each(a,function(){e(this.name,this.value)});else for(c in a)Ab(c,a[c],b,e);return d.join("&")},r.fn.extend({serialize:function(){return r.param(this.serializeArray())},serializeArray:function(){return this.map(function(){var a=r.prop(this,"elements");return a?r.makeArray(a):this}).filter(function(){var a=this.type;return this.name&&!r(this).is(":disabled")&&zb.test(this.nodeName)&&!yb.test(a)&&(this.checked||!ja.test(a))}).map(function(a,b){var c=r(this).val();return null==c?null:Array.isArray(c)?r.map(c,function(a){return{name:b.name,value:a.replace(xb,"\r\n")}}):{name:b.name,value:c.replace(xb,"\r\n")}}).get()}});var Bb=/%20/g,Cb=/#.*$/,Db=/([?&])_=[^&]*/,Eb=/^(.*?):[ \t]*([^\r\n]*)$/gm,Fb=/^(?:about|app|app-storage|.+-extension|file|res|widget):$/,Gb=/^(?:GET|HEAD)$/,Hb=/^\/\//,Ib={},Jb={},Kb="*/".concat("*"),Lb=d.createElement("a");Lb.href=tb.href;function Mb(a){return function(b,c){"string"!=typeof b&&(c=b,b="*");var d,e=0,f=b.toLowerCase().match(L)||[];if(r.isFunction(c))while(d=f[e++])"+"===d[0]?(d=d.slice(1)||"*",(a[d]=a[d]||[]).unshift(c)):(a[d]=a[d]||[]).push(c)}}function Nb(a,b,c,d){var e={},f=a===Jb;function g(h){var i;return e[h]=!0,r.each(a[h]||[],function(a,h){var j=h(b,c,d);return"string"!=typeof j||f||e[j]?f?!(i=j):void 0:(b.dataTypes.unshift(j),g(j),!1)}),i}return g(b.dataTypes[0])||!e["*"]&&g("*")}function Ob(a,b){var c,d,e=r.ajaxSettings.flatOptions||{};for(c in b)void 0!==b[c]&&((e[c]?a:d||(d={}))[c]=b[c]);return d&&r.extend(!0,a,d),a}function Pb(a,b,c){var d,e,f,g,h=a.contents,i=a.dataTypes;while("*"===i[0])i.shift(),void 0===d&&(d=a.mimeType||b.getResponseHeader("Content-Type"));if(d)for(e in h)if(h[e]&&h[e].test(d)){i.unshift(e);break}if(i[0]in c)f=i[0];else{for(e in c){if(!i[0]||a.converters[e+" "+i[0]]){f=e;break}g||(g=e)}f=f||g}if(f)return f!==i[0]&&i.unshift(f),c[f]}function Qb(a,b,c,d){var e,f,g,h,i,j={},k=a.dataTypes.slice();if(k[1])for(g in a.converters)j[g.toLowerCase()]=a.converters[g];f=k.shift();while(f)if(a.responseFields[f]&&(c[a.responseFields[f]]=b),!i&&d&&a.dataFilter&&(b=a.dataFilter(b,a.dataType)),i=f,f=k.shift())if("*"===f)f=i;else if("*"!==i&&i!==f){if(g=j[i+" "+f]||j["* "+f],!g)for(e in j)if(h=e.split(" "),h[1]===f&&(g=j[i+" "+h[0]]||j["* "+h[0]])){g===!0?g=j[e]:j[e]!==!0&&(f=h[0],k.unshift(h[1]));break}if(g!==!0)if(g&&a["throws"])b=g(b);else try{b=g(b)}catch(l){return{state:"parsererror",error:g?l:"No conversion from "+i+" to "+f}}}return{state:"success",data:b}}r.extend({active:0,lastModified:{},etag:{},ajaxSettings:{url:tb.href,type:"GET",isLocal:Fb.test(tb.protocol),global:!0,processData:!0,async:!0,contentType:"application/x-www-form-urlencoded; charset=UTF-8",accepts:{"*":Kb,text:"text/plain",html:"text/html",xml:"application/xml, text/xml",json:"application/json, text/javascript"},contents:{xml:/\bxml\b/,html:/\bhtml/,json:/\bjson\b/},responseFields:{xml:"responseXML",text:"responseText",json:"responseJSON"},converters:{"* text":String,"text html":!0,"text json":JSON.parse,"text xml":r.parseXML},flatOptions:{url:!0,context:!0}},ajaxSetup:function(a,b){return b?Ob(Ob(a,r.ajaxSettings),b):Ob(r.ajaxSettings,a)},ajaxPrefilter:Mb(Ib),ajaxTransport:Mb(Jb),ajax:function(b,c){"object"==typeof b&&(c=b,b=void 0),c=c||{};var e,f,g,h,i,j,k,l,m,n,o=r.ajaxSetup({},c),p=o.context||o,q=o.context&&(p.nodeType||p.jquery)?r(p):r.event,s=r.Deferred(),t=r.Callbacks("once memory"),u=o.statusCode||{},v={},w={},x="canceled",y={readyState:0,getResponseHeader:function(a){var b;if(k){if(!h){h={};while(b=Eb.exec(g))h[b[1].toLowerCase()]=b[2]}b=h[a.toLowerCase()]}return null==b?null:b},getAllResponseHeaders:function(){return k?g:null},setRequestHeader:function(a,b){return null==k&&(a=w[a.toLowerCase()]=w[a.toLowerCase()]||a,v[a]=b),this},overrideMimeType:function(a){return null==k&&(o.mimeType=a),this},statusCode:function(a){var b;if(a)if(k)y.always(a[y.status]);else for(b in a)u[b]=[u[b],a[b]];return this},abort:function(a){var b=a||x;return e&&e.abort(b),A(0,b),this}};if(s.promise(y),o.url=((b||o.url||tb.href)+"").replace(Hb,tb.protocol+"//"),o.type=c.method||c.type||o.method||o.type,o.dataTypes=(o.dataType||"*").toLowerCase().match(L)||[""],null==o.crossDomain){j=d.createElement("a");try{j.href=o.url,j.href=j.href,o.crossDomain=Lb.protocol+"//"+Lb.host!=j.protocol+"//"+j.host}catch(z){o.crossDomain=!0}}if(o.data&&o.processData&&"string"!=typeof o.data&&(o.data=r.param(o.data,o.traditional)),Nb(Ib,o,c,y),k)return y;l=r.event&&o.global,l&&0===r.active++&&r.event.trigger("ajaxStart"),o.type=o.type.toUpperCase(),o.hasContent=!Gb.test(o.type),f=o.url.replace(Cb,""),o.hasContent?o.data&&o.processData&&0===(o.contentType||"").indexOf("application/x-www-form-urlencoded")&&(o.data=o.data.replace(Bb,"+")):(n=o.url.slice(f.length),o.data&&(f+=(vb.test(f)?"&":"?")+o.data,delete o.data),o.cache===!1&&(f=f.replace(Db,"$1"),n=(vb.test(f)?"&":"?")+"_="+ub++ +n),o.url=f+n),o.ifModified&&(r.lastModified[f]&&y.setRequestHeader("If-Modified-Since",r.lastModified[f]),r.etag[f]&&y.setRequestHeader("If-None-Match",r.etag[f])),(o.data&&o.hasContent&&o.contentType!==!1||c.contentType)&&y.setRequestHeader("Content-Type",o.contentType),y.setRequestHeader("Accept",o.dataTypes[0]&&o.accepts[o.dataTypes[0]]?o.accepts[o.dataTypes[0]]+("*"!==o.dataTypes[0]?", "+Kb+"; q=0.01":""):o.accepts["*"]);for(m in o.headers)y.setRequestHeader(m,o.headers[m]);if(o.beforeSend&&(o.beforeSend.call(p,y,o)===!1||k))return y.abort();if(x="abort",t.add(o.complete),y.done(o.success),y.fail(o.error),e=Nb(Jb,o,c,y)){if(y.readyState=1,l&&q.trigger("ajaxSend",[y,o]),k)return y;o.async&&o.timeout>0&&(i=a.setTimeout(function(){y.abort("timeout")},o.timeout));try{k=!1,e.send(v,A)}catch(z){if(k)throw z;A(-1,z)}}else A(-1,"No Transport");function A(b,c,d,h){var j,m,n,v,w,x=c;k||(k=!0,i&&a.clearTimeout(i),e=void 0,g=h||"",y.readyState=b>0?4:0,j=b>=200&&b<300||304===b,d&&(v=Pb(o,y,d)),v=Qb(o,v,y,j),j?(o.ifModified&&(w=y.getResponseHeader("Last-Modified"),w&&(r.lastModified[f]=w),w=y.getResponseHeader("etag"),w&&(r.etag[f]=w)),204===b||"HEAD"===o.type?x="nocontent":304===b?x="notmodified":(x=v.state,m=v.data,n=v.error,j=!n)):(n=x,!b&&x||(x="error",b<0&&(b=0))),y.status=b,y.statusText=(c||x)+"",j?s.resolveWith(p,[m,x,y]):s.rejectWith(p,[y,x,n]),y.statusCode(u),u=void 0,l&&q.trigger(j?"ajaxSuccess":"ajaxError",[y,o,j?m:n]),t.fireWith(p,[y,x]),l&&(q.trigger("ajaxComplete",[y,o]),--r.active||r.event.trigger("ajaxStop")))}return y},getJSON:function(a,b,c){return r.get(a,b,c,"json")},getScript:function(a,b){return r.get(a,void 0,b,"script")}}),r.each(["get","post"],function(a,b){r[b]=function(a,c,d,e){return r.isFunction(c)&&(e=e||d,d=c,c=void 0),r.ajax(r.extend({url:a,type:b,dataType:e,data:c,success:d},r.isPlainObject(a)&&a))}}),r._evalUrl=function(a){return r.ajax({url:a,type:"GET",dataType:"script",cache:!0,async:!1,global:!1,"throws":!0})},r.fn.extend({wrapAll:function(a){var b;return this[0]&&(r.isFunction(a)&&(a=a.call(this[0])),b=r(a,this[0].ownerDocument).eq(0).clone(!0),this[0].parentNode&&b.insertBefore(this[0]),b.map(function(){var a=this;while(a.firstElementChild)a=a.firstElementChild;return a}).append(this)),this},wrapInner:function(a){return r.isFunction(a)?this.each(function(b){r(this).wrapInner(a.call(this,b))}):this.each(function(){var b=r(this),c=b.contents();c.length?c.wrapAll(a):b.append(a)})},wrap:function(a){var b=r.isFunction(a);return this.each(function(c){r(this).wrapAll(b?a.call(this,c):a)})},unwrap:function(a){return this.parent(a).not("body").each(function(){r(this).replaceWith(this.childNodes)}),this}}),r.expr.pseudos.hidden=function(a){return!r.expr.pseudos.visible(a)},r.expr.pseudos.visible=function(a){return!!(a.offsetWidth||a.offsetHeight||a.getClientRects().length)},r.ajaxSettings.xhr=function(){try{return new a.XMLHttpRequest}catch(b){}};var Rb={0:200,1223:204},Sb=r.ajaxSettings.xhr();o.cors=!!Sb&&"withCredentials"in Sb,o.ajax=Sb=!!Sb,r.ajaxTransport(function(b){var c,d;if(o.cors||Sb&&!b.crossDomain)return{send:function(e,f){var g,h=b.xhr();if(h.open(b.type,b.url,b.async,b.username,b.password),b.xhrFields)for(g in b.xhrFields)h[g]=b.xhrFields[g];b.mimeType&&h.overrideMimeType&&h.overrideMimeType(b.mimeType),b.crossDomain||e["X-Requested-With"]||(e["X-Requested-With"]="XMLHttpRequest");for(g in e)h.setRequestHeader(g,e[g]);c=function(a){return function(){c&&(c=d=h.onload=h.onerror=h.onabort=h.onreadystatechange=null,"abort"===a?h.abort():"error"===a?"number"!=typeof h.status?f(0,"error"):f(h.status,h.statusText):f(Rb[h.status]||h.status,h.statusText,"text"!==(h.responseType||"text")||"string"!=typeof h.responseText?{binary:h.response}:{text:h.responseText},h.getAllResponseHeaders()))}},h.onload=c(),d=h.onerror=c("error"),void 0!==h.onabort?h.onabort=d:h.onreadystatechange=function(){4===h.readyState&&a.setTimeout(function(){c&&d()})},c=c("abort");try{h.send(b.hasContent&&b.data||null)}catch(i){if(c)throw i}},abort:function(){c&&c()}}}),r.ajaxPrefilter(function(a){a.crossDomain&&(a.contents.script=!1)}),r.ajaxSetup({accepts:{script:"text/javascript, application/javascript, application/ecmascript, application/x-ecmascript"},contents:{script:/\b(?:java|ecma)script\b/},converters:{"text script":function(a){return r.globalEval(a),a}}}),r.ajaxPrefilter("script",function(a){void 0===a.cache&&(a.cache=!1),a.crossDomain&&(a.type="GET")}),r.ajaxTransport("script",function(a){if(a.crossDomain){var b,c;return{send:function(e,f){b=r("<script>").prop({charset:a.scriptCharset,src:a.url}).on("load error",c=function(a){b.remove(),c=null,a&&f("error"===a.type?404:200,a.type)}),d.head.appendChild(b[0])},abort:function(){c&&c()}}}});var Tb=[],Ub=/(=)\?(?=&|$)|\?\?/;r.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var a=Tb.pop()||r.expando+"_"+ub++;return this[a]=!0,a}}),r.ajaxPrefilter("json jsonp",function(b,c,d){var e,f,g,h=b.jsonp!==!1&&(Ub.test(b.url)?"url":"string"==typeof b.data&&0===(b.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ub.test(b.data)&&"data");if(h||"jsonp"===b.dataTypes[0])return e=b.jsonpCallback=r.isFunction(b.jsonpCallback)?b.jsonpCallback():b.jsonpCallback,h?b[h]=b[h].replace(Ub,"$1"+e):b.jsonp!==!1&&(b.url+=(vb.test(b.url)?"&":"?")+b.jsonp+"="+e),b.converters["script json"]=function(){return g||r.error(e+" was not called"),g[0]},b.dataTypes[0]="json",f=a[e],a[e]=function(){g=arguments},d.always(function(){void 0===f?r(a).removeProp(e):a[e]=f,b[e]&&(b.jsonpCallback=c.jsonpCallback,Tb.push(e)),g&&r.isFunction(f)&&f(g[0]),g=f=void 0}),"script"}),o.createHTMLDocument=function(){var a=d.implementation.createHTMLDocument("").body;return a.innerHTML="<form></form><form></form>",2===a.childNodes.length}(),r.parseHTML=function(a,b,c){if("string"!=typeof a)return[];"boolean"==typeof b&&(c=b,b=!1);var e,f,g;return b||(o.createHTMLDocument?(b=d.implementation.createHTMLDocument(""),e=b.createElement("base"),e.href=d.location.href,b.head.appendChild(e)):b=d),f=C.exec(a),g=!c&&[],f?[b.createElement(f[1])]:(f=qa([a],b,g),g&&g.length&&r(g).remove(),r.merge([],f.childNodes))},r.fn.load=function(a,b,c){var d,e,f,g=this,h=a.indexOf(" ");return h>-1&&(d=pb(a.slice(h)),a=a.slice(0,h)),r.isFunction(b)?(c=b,b=void 0):b&&"object"==typeof b&&(e="POST"),g.length>0&&r.ajax({url:a,type:e||"GET",dataType:"html",data:b}).done(function(a){f=arguments,g.html(d?r("<div>").append(r.parseHTML(a)).find(d):a)}).always(c&&function(a,b){g.each(function(){c.apply(this,f||[a.responseText,b,a])})}),this},r.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(a,b){r.fn[b]=function(a){return this.on(b,a)}}),r.expr.pseudos.animated=function(a){return r.grep(r.timers,function(b){return a===b.elem}).length},r.offset={setOffset:function(a,b,c){var d,e,f,g,h,i,j,k=r.css(a,"position"),l=r(a),m={};"static"===k&&(a.style.position="relative"),h=l.offset(),f=r.css(a,"top"),i=r.css(a,"left"),j=("absolute"===k||"fixed"===k)&&(f+i).indexOf("auto")>-1,j?(d=l.position(),g=d.top,e=d.left):(g=parseFloat(f)||0,e=parseFloat(i)||0),r.isFunction(b)&&(b=b.call(a,c,r.extend({},h))),null!=b.top&&(m.top=b.top-h.top+g),null!=b.left&&(m.left=b.left-h.left+e),"using"in b?b.using.call(a,m):l.css(m)}},r.fn.extend({offset:function(a){if(arguments.length)return void 0===a?this:this.each(function(b){r.offset.setOffset(this,a,b)});var b,c,d,e,f=this[0];if(f)return f.getClientRects().length?(d=f.getBoundingClientRect(),b=f.ownerDocument,c=b.documentElement,e=b.defaultView,{top:d.top+e.pageYOffset-c.clientTop,left:d.left+e.pageXOffset-c.clientLeft}):{top:0,left:0}},position:function(){if(this[0]){var a,b,c=this[0],d={top:0,left:0};return"fixed"===r.css(c,"position")?b=c.getBoundingClientRect():(a=this.offsetParent(),b=this.offset(),B(a[0],"html")||(d=a.offset()),d={top:d.top+r.css(a[0],"borderTopWidth",!0),left:d.left+r.css(a[0],"borderLeftWidth",!0)}),{top:b.top-d.top-r.css(c,"marginTop",!0),left:b.left-d.left-r.css(c,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var a=this.offsetParent;while(a&&"static"===r.css(a,"position"))a=a.offsetParent;return a||ra})}}),r.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(a,b){var c="pageYOffset"===b;r.fn[a]=function(d){return T(this,function(a,d,e){var f;return r.isWindow(a)?f=a:9===a.nodeType&&(f=a.defaultView),void 0===e?f?f[b]:a[d]:void(f?f.scrollTo(c?f.pageXOffset:e,c?e:f.pageYOffset):a[d]=e)},a,d,arguments.length)}}),r.each(["top","left"],function(a,b){r.cssHooks[b]=Pa(o.pixelPosition,function(a,c){if(c)return c=Oa(a,b),Ma.test(c)?r(a).position()[b]+"px":c})}),r.each({Height:"height",Width:"width"},function(a,b){r.each({padding:"inner"+a,content:b,"":"outer"+a},function(c,d){r.fn[d]=function(e,f){var g=arguments.length&&(c||"boolean"!=typeof e),h=c||(e===!0||f===!0?"margin":"border");return T(this,function(b,c,e){var f;return r.isWindow(b)?0===d.indexOf("outer")?b["inner"+a]:b.document.documentElement["client"+a]:9===b.nodeType?(f=b.documentElement,Math.max(b.body["scroll"+a],f["scroll"+a],b.body["offset"+a],f["offset"+a],f["client"+a])):void 0===e?r.css(b,c,h):r.style(b,c,e,h)},b,g?e:void 0,g)}})}),r.fn.extend({bind:function(a,b,c){return this.on(a,null,b,c)},unbind:function(a,b){return this.off(a,null,b)},delegate:function(a,b,c,d){return this.on(b,a,c,d)},undelegate:function(a,b,c){return 1===arguments.length?this.off(a,"**"):this.off(b,a||"**",c)}}),r.holdReady=function(a){a?r.readyWait++:r.ready(!0)},r.isArray=Array.isArray,r.parseJSON=JSON.parse,r.nodeName=B,"function"==typeof define&&define.amd&&define("jquery",[],function(){return r});var Vb=a.jQuery,Wb=a.$;return r.noConflict=function(b){return a.$===r&&(a.$=Wb),b&&a.jQuery===r&&(a.jQuery=Vb),r},b||(a.jQuery=a.$=r),r});
 
/trunk/applications/graphiques
New file
Property changes:
Added: svn:ignore
+config.ini
/trunk/applications/rendu/configurations/.directory
New file
0,0 → 1,5
[Dolphin]
Timestamp=2011,2,17,11,48,5
 
[Settings]
ShowDotFiles=true
/trunk/applications/rendu/configurations/config.defaut.ini
New file
0,0 → 1,56
; +------------------------------------------------------------------------------------------------------+
; Général
; Séparateur de dossier
ds = DIRECTORY_SEPARATOR
 
; +------------------------------------------------------------------------------------------------------+
; Info sur l'application
info.nom = Saisie des observations
; Abréviation de l'application
info.abr = SODS
; Code numérique de la version de l'application
info.version.code.num = "0.1"
; Code alphabétique de la version de l'application
info.version.code.alpha = ""
; Nom de la version de l'application
info.version.nom = ""
; Version du Framework nécessaire au fonctionnement de cette application
info.framework.version = 0.2
;Encodage de l'application
appli_encodage = "UTF-8"
; Nom de domaine pour l'URL de base de l'application : 162.38.234.9
domaine = "www.obs-saisons.fr"
; URL de base de l'application, si elle est laissée vide, l'application fonctionnera en Stand-alone
url_base = ""
; URL de base de l'application avec l'indication du fichier de départ
url_base_index = "{ref:url_base}index.php"
; URL de base où se situe le .htacces réalisant la réecriture d'URL pour les permaliens de l'application
url_base_permalien = "{ref:url_base}"
 
 
; Mettre à true si l'application nécessite de s'identifier.
identification = true
; Nom de la classe à utiliser pour gérer les utilisateurs
objet_utilisateur = DrupalUtilisateur
 
; +------------------------------------------------------------------------------------------------------+
; Paramétrage de la session
; Devons nous démarrer une session : oui (true) ou non (false)
session_demarrage = "php:true"
; Définition du nom de la session à utiliser
session_nom = "ods_saisie"
 
; +------------------------------------------------------------------------------------------------------+
; Débogage
; Indique si oui ou non on veut afficher le débogage.
fw_debogage = true
; Indique si oui ou non on veut lancer le chronométrage
chronometrage = false
 
; +------------------------------------------------------------------------------------------------------+
; Spécifique à l'application
; Url du Jrest utilisé pour les services web fournissant les données à l'application
url_jrest = "/applications/jrest/"
; Emplacement du dossier de base des images pour illustrer les espèces
dossier_images_especes = "/images_especes/"
url_images_especes = "/images_especes/"
/trunk/applications/rendu/configurations
New file
Property changes:
Added: svn:ignore
+config.ini
/trunk/applications/rendu/framework.defaut.php
New file
0,0 → 1,5
<?php
// Inclusion du Framework
// Indiquer ci-dessous le chemin vers le fichier autoload.inc.php de la bonne version du Framework
require_once '/framework/autoload.inc.php';
?>
/trunk/applications/rendu/bibliotheque/.directory
New file
0,0 → 1,5
[Dolphin]
Timestamp=2011,2,17,11,45,24
 
[Settings]
ShowDotFiles=true
/trunk/applications/rendu/bibliotheque/dao/EspeceDao.php
New file
0,0 → 1,33
<?php
// declare(encoding='UTF-8');
/**
* Modèle d'accès à la base de données de saisies pour le module espece.
*
* @package ODS_saisie
* @category php 5.2
* @author Aurélien Peronnet <aurelien@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
* @version SVN: $Id: StationDao.php 154 2010-09-13 12:15:11Z aurelien $
*
*/
class EspeceDao extends Dao {
const SERVICE_ESPECE = 'OdsEspece';
const METHODE_ESPECES_TYPE = 'EspecesActivesParType';
/**
* Retourne l'ensemble des especes présentes organisées hierarchiquement par type.
*
* @return array un tableau contenant les informations sur les especes.
*/
public function getListeEspecesParType() {
$url = $this->url_jrest.self::SERVICE_ESPECE.'/'.self::METHODE_ESPECES_TYPE.'/';
$json = $this->envoyerRequeteConsultation($url);
$donnees = json_decode($json, true);
return $donnees;
}
}
?>
/trunk/applications/rendu/bibliotheque/dao/EvenementDao.php
New file
0,0 → 1,34
<?php
// declare(encoding='UTF-8');
/**
* Modèle d'accès à la base de données de saisies pour le module evenement.
*
* @package ODS_saisie
* @category php 5.2
* @author Aurélien Peronnet <aurelien@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
* @version SVN: $Id: StationDao.php 154 2010-09-13 12:15:11Z aurelien $
*
*/
class EvenementDao extends Dao {
const SERVICE_ESPECE = 'OdsEvenement';
const METHODE_TOUS_EVENEMENTS = 'TousEvenements';
 
/**
* Retourne l'ensemble des évènements.
*
* @return array un tableau contenant les informations sur les evenements.
*/
public function getListeEvenements() {
$url = $this->url_jrest.self::SERVICE_ESPECE.'/'.self::METHODE_TOUS_EVENEMENTS.'/';
$json = $this->envoyerRequeteConsultation($url);
$donnees = json_decode($json, true);
return $donnees;
}
}
?>
/trunk/applications/rendu/bibliotheque/dao/ObservationDao.php
New file
0,0 → 1,49
<?php
// declare(encoding='UTF-8');
/**
* Modèle d'accès à la base de données de saisies pour le module observation.
*
* @package ODS_saisie
* @category php 5.2
* @author Aurélien Peronnet <aurelien@tela-botanica.org>
* @copyright 2017 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
* @version SVN: $Id: StationDao.php 154 2017-09-13 12:15:11Z aurelien $
*
*/
class ObservationDao extends Dao {
 
const SERVICE_ESPECE = 'OdsObservation';
const METHODE_MIN_ANNEE = 'AnneeMinimumObservation';
const METHODE_ANNEES_AYANT_OBS = 'AnneesAyantObservations';
 
/**
* Retourne l'année de la première observation.
*
* @return int l'année de la première observation.
*/
public function getAnneeMinimumObservation() {
 
$url = $this->url_jrest.self::SERVICE_ESPECE.'/'.self::METHODE_MIN_ANNEE.'/';
$json = $this->envoyerRequeteConsultation($url);
$donnees = json_decode($json, true);
 
return $donnees;
}
 
/**
* Retourne les années possédant des observations
*
* @return array les années possédant des observations.
*/
public function getAnneesAyantObservations() {
 
$url = $this->url_jrest.self::SERVICE_ESPECE.'/'.self::METHODE_ANNEES_AYANT_OBS.'/';
$json = $this->envoyerRequeteConsultation($url);
$donnees = json_decode($json, true);
 
return $donnees;
}
}
?>
/trunk/applications/rendu/bibliotheque/dao/Dao.php
New file
0,0 → 1,225
<?php
// declare(encoding='UTF-8');
/**
* Classe modèle spécifique à l'application, donc d'accés au données, elle ne devrait pas être appelée de l'extérieur.
* Elle est abstraite donc doit obligatoirement être étendue.
*
* @category Php5
* @package ODS_saisie
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
* @version SVN: $Id$
*/
abstract class Dao {
const ORDRE_ASCENDANT = 'ASC';
const ORDRE_DESCENDANT = 'DESC';
const HTTP_REQUETE_SEPARATEUR = '&';
protected $distinction = '0';
protected $limite_debut = null;
protected $limite_nbre = null;
protected $ordre = null;
protected $url_jrest = null;
public function __construct() {
$this->url_jrest = Config::get('url_jrest');
}
//+----------------------------------------------------------------------------------------------------------------+
// ACCESSEURS
public function setDistinction($distinct) {
$this->distinction = $distinct;
}
public function getDistinction() {
return $this->distinction;
}
public function viderDistinction() {
$this->distinction = null;
}
 
public function avoirLimitation() {
$limitation = false;
if (!is_null($this->limite_debut) && !is_null($this->limite_nbre)) {
$limitation = true;
}
return $limitation;
}
public function setLimitation($limite_debut, $limite_nbre) {
$this->limite_debut = $limite_debut;
$this->limite_nbre = $limite_nbre;
}
public function getLimiteDebut() {
return $this->limite_debut;
}
public function getLimiteNbre() {
return $this->limite_nbre;
}
public function viderLimite() {
$this->limite_debut = null;
$this->limite_nbre = null;
}
public function addOrdre($champ, $trie = self::ORDRE_ASCENDANT) {
if (!isset($this->ordre[$champ])) {
if (self::ORDRE_ASCENDANT == $trie || self::ORDRE_DESCENDANT == $trie) {
$this->ordre[$champ] = $trie;
} else {
$e = "La valeur pour le tri doit être : {self::ORDRE_ASCENDANT} ou {self::ORDRE_DESCENDANT}.";
trigger_error($e, E_USER_WARNING);
}
} else {
$e = "Le champ $champ existe déjà dans le tableau des ordres.";
trigger_error($e, E_USER_WARNING);
}
}
public function getOrdre() {
$champs = array();
foreach ($this->ordre as $champ => $trie) {
$champs[] = "$champ $trie";
}
return implode(', ', $champs);
}
public function viderOrdre() {
$this->ordre = null;
}
//+----------------------------------------------------------------------------------------------------------------+
// MÉTHODES
protected function envoyerRequeteConsultation($url) {
$url = $this->traiterUrlParametres($url);
$retour = $this->envoyerRequete($url, 'GET');
return $retour;
}
protected function envoyerRequeteAjout($url, Array $donnees) {
$retour = $this->envoyerRequete($url, 'PUT', $donnees);
return $retour;
}
protected function envoyerRequeteModif($url, Array $donnees) {
$retour = $this->envoyerRequete($url, 'POST', $donnees);
return $retour;
}
protected function envoyerRequeteSuppression($url) {
$retour = $this->envoyerRequete($url, 'DELETE');
return $retour;
}
private function envoyerRequete($url, $mode, Array $donnees = array()) {
$contenu = false;
if ($mode != 'GET' && $mode != 'PUT' && $mode != 'POST' && $mode != 'DELETE') {
$e = "Le mode de requête '$mode' n'est pas accepté!";
trigger_error($e, E_USER_WARNING);
} else {
$contexte = stream_context_create(array(
'http' => array(
'method' => $mode,
'header' => "Content-type: application/x-www-form-urlencoded\r\n",
'content' => http_build_query($donnees, null, self::HTTP_REQUETE_SEPARATEUR))));
/*if($url == 'http://162.38.234.9/obs_saisons/applications/jrest/OdsObservation/13') {
Debug::printr(http_build_query($donnees, null, self::HTTP_REQUETE_SEPARATEUR));
exit;
}*/
$flux = @fopen($url, 'r', false, $contexte);
if (!$flux) {
$this->traiterEntete($http_response_header, $url);
$e = "L'ouverture de l'url '$url' par la méthode HTTP '$mode' a échoué!";
trigger_error($e, E_USER_WARNING);
} else {
// Informations sur les en-têtes et métadonnées du flux
$entetes = stream_get_meta_data($flux);
$this->traiterEntete($entetes, $url);
// Contenu actuel de $url
$contenu = stream_get_contents($flux);
fclose($flux);
}
}
$this->reinitialiser();
return $contenu;
}
private function traiterUrlParametres($url) {
$parametres = array();
if (! is_null($this->getLimiteDebut())) {
$parametres[] = 'start='.$this->getLimiteDebut();
}
if (! is_null($this->getLimiteNbre())) {
$parametres[] = 'limit='.$this->getLimiteNbre();
}
if (! is_null($this->ordre)) {
$parametres[] = 'orderby='.urlencode($this->getOrdre());
}
if ($this->getDistinction() != 0) {
$parametres[] = 'distinct='.$this->getDistinction();
}
if (count($parametres) > 0) {
$url_parametres = implode('&', $parametres);
$url = $url.'?'.$url_parametres;
}
return $url;
}
private function traiterEntete($entetes, $uri) {
$infos = $this->analyserEntete($entetes, $uri);
$this->traiterEnteteDebug($infos);
$this->traiterEnteteMessage($infos);
}
private function analyserEntete($entetes, $uri) {
$infos = array('date' => null, 'uri' => $uri, 'debugs' => null, 'messages' => null);
if (isset($entetes['wrapper_data'])) {
$entetes = $entetes['wrapper_data'];
}
foreach ($entetes as $entete) {
if (preg_match('/^X-DebugJrest-Data: (.+)$/', $entete, $match)) {
$infos['debugs'] = json_decode($match[1]);
}
if (preg_match('/^X-MessageJrest-Data: (.+)$/', $entete, $match)) {
$infos['messages'] = json_decode($match[1]);
}
if (preg_match('/^Date: .+ ([012][0-9]:[012345][0-9]:[012345][0-9]) .*$/', $entete, $match)) {
$infos['date'] = $match[1];
}
}
return $infos;
}
private function traiterEnteteDebug($entetes) {
if (isset($entetes['debugs'])) {
$date = $entetes['date'];
$uri = $entetes['uri'];
$debugs = $entetes['debugs'];
foreach ($debugs as $debug) {
Debug::printr("DEBUG : $date - $uri :\n$debug");
}
}
}
private function traiterEnteteMessage($entetes) {
if (isset($entetes['messages'])) {
$date = $entetes['date'];
$uri = $entetes['uri'];
$messages = $entetes['messages'];
foreach ($messages as $message) {
Debug::printr("MESSAGE : $date - $uri :\n$message");
}
}
}
private function reinitialiser() {
$this->viderDistinction();
$this->viderLimite();
$this->viderOrdre();
}
}
?>
/trunk/applications/rendu/index.php
New file
0,0 → 1,63
<?php
// declare(encoding='UTF-8');
/** Inclusion du fichier principal de l'application*/
require_once 'rendu.php';
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="Content-style-type" content="text/css" />
<meta http-equiv="Content-script-type" content="text/javascript" />
<meta http-equiv="Content-language" content="fr" />
 
<title><?php echo AppControleur::getMetaTitre(); ?></title>
<meta name="description" content="<?php echo AppControleur::getMetaDescription();?>" />
<meta name="keywords" content="<?php echo AppControleur::getMetaTags();?>" />
<meta name="revisit-after" content="15 days" />
<meta name="robots" content="index,follow" />
<meta name="author" content="Tela Botanica" />
<?= Liens::renvoyerStylesInclus() ?>
<?= Liens::renvoyerScriptsInclus() ?>
</head>
<body>
<div id="reducteur">
<div id="bandeau">
<div id="bandeau_contenu">
<div id="titre_monde">
<h1>Observatoire des saisons</h1>
</div>
</div>
</div>
<div id="droite">
<div id="onglets" class="gauche">
<?php echo AppControleur::getContenuNavigation(); ?>
</div>
<div id="contenu">
<div id="entete">
<?php echo AppControleur::getContenuTete(); ?>
</div>
<div id="texte">
<?php echo AppControleur::getContenuCorps(); ?>
</div>
<div id="pied_texte">
<?php echo AppControleur::getContenuPied(); ?>
</div>
</div>
<div id="pied" style="clear:left">
<div>
<?php echo AppControleur::getChrono(); ?>
<?php echo AppControleur::getExceptions(); ?>
</div>
</div>
<div id="debug"> </div>
</div>
</div>
</body>
</html>
/trunk/applications/rendu/squelettes/.directory
New file
0,0 → 1,5
[Dolphin]
Timestamp=2011,2,1,14,2,48
 
[Settings]
ShowDotFiles=true
/trunk/applications/rendu/squelettes/images/marqueur_fructification.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/applications/rendu/squelettes/images/marqueur_fructification.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/applications/rendu/squelettes/images/marqueur_feuillaison.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/applications/rendu/squelettes/images/marqueur_feuillaison.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/applications/rendu/squelettes/images/marqueur_senescence.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/applications/rendu/squelettes/images/marqueur_senescence.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/applications/rendu/squelettes/images/marqueur_floraison.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/applications/rendu/squelettes/images/marqueur_floraison.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/applications/rendu/squelettes/images/marqueur.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/applications/rendu/squelettes/images/marqueur.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/applications/rendu/squelettes/images/marqueur_1ere_apparition.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/applications/rendu/squelettes/images/marqueur_1ere_apparition.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/applications/rendu/squelettes/css/jquery_ui/.directory
New file
0,0 → 1,5
[Dolphin]
Timestamp=2011,2,1,14,30,20
 
[Settings]
ShowDotFiles=true
/trunk/applications/rendu/squelettes/css/jquery_ui/images/ui-bg_glass_100_f6f6f6_1x400.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/applications/rendu/squelettes/css/jquery_ui/images/ui-bg_glass_100_f6f6f6_1x400.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/applications/rendu/squelettes/css/jquery_ui/images/ui-icons_222222_256x240.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/applications/rendu/squelettes/css/jquery_ui/images/ui-icons_222222_256x240.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/applications/rendu/squelettes/css/jquery_ui/images/ui-bg_gloss-wave_35_f6a828_500x100.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/applications/rendu/squelettes/css/jquery_ui/images/ui-bg_gloss-wave_35_f6a828_500x100.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/applications/rendu/squelettes/css/jquery_ui/images/ui-icons_ef8c08_256x240.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/applications/rendu/squelettes/css/jquery_ui/images/ui-icons_ef8c08_256x240.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/applications/rendu/squelettes/css/jquery_ui/images/ui-bg_diagonals-thick_18_b81900_40x40.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/applications/rendu/squelettes/css/jquery_ui/images/ui-bg_diagonals-thick_18_b81900_40x40.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/applications/rendu/squelettes/css/jquery_ui/images/.directory
New file
0,0 → 1,5
[Dolphin]
Timestamp=2011,2,1,14,30,26
 
[Settings]
ShowDotFiles=true
/trunk/applications/rendu/squelettes/css/jquery_ui/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/applications/rendu/squelettes/css/jquery_ui/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/applications/rendu/squelettes/css/jquery_ui/images/ui-icons_ffffff_256x240.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/applications/rendu/squelettes/css/jquery_ui/images/ui-icons_ffffff_256x240.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/applications/rendu/squelettes/css/jquery_ui/images/ui-bg_flat_10_000000_40x100.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/applications/rendu/squelettes/css/jquery_ui/images/ui-bg_flat_10_000000_40x100.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/applications/rendu/squelettes/css/jquery_ui/images/ui-bg_glass_100_fdf5ce_1x400.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/applications/rendu/squelettes/css/jquery_ui/images/ui-bg_glass_100_fdf5ce_1x400.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/applications/rendu/squelettes/css/jquery_ui/images/ui-bg_glass_65_ffffff_1x400.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/applications/rendu/squelettes/css/jquery_ui/images/ui-bg_glass_65_ffffff_1x400.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/applications/rendu/squelettes/css/jquery_ui/images/ui-bg_diagonals-thick_20_666666_40x40.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/applications/rendu/squelettes/css/jquery_ui/images/ui-bg_diagonals-thick_20_666666_40x40.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/applications/rendu/squelettes/css/jquery_ui/images/ui-icons_228ef1_256x240.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/applications/rendu/squelettes/css/jquery_ui/images/ui-icons_228ef1_256x240.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/applications/rendu/squelettes/css/jquery_ui/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/applications/rendu/squelettes/css/jquery_ui/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/applications/rendu/squelettes/css/jquery_ui/images/ui-icons_ffd27a_256x240.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/applications/rendu/squelettes/css/jquery_ui/images/ui-icons_ffd27a_256x240.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/applications/rendu/squelettes/css/jquery_ui/jquery-ui-1.8.9.custom.css
New file
0,0 → 1,318
/*
* jQuery UI CSS Framework 1.8.9
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Theming/API
*/
 
/* Layout helpers
----------------------------------*/
.ui-helper-hidden { display: none; }
.ui-helper-hidden-accessible { position: absolute !important; clip: rect(1px 1px 1px 1px); clip: rect(1px,1px,1px,1px); }
.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
.ui-helper-clearfix { display: inline-block; }
/* required comment for clearfix to work in Opera \*/
* html .ui-helper-clearfix { height:1%; }
.ui-helper-clearfix { display:block; }
/* end clearfix */
.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
 
 
/* Interaction Cues
----------------------------------*/
.ui-state-disabled { cursor: default !important; }
 
 
/* Icons
----------------------------------*/
 
/* states and images */
.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
 
 
/* Misc visuals
----------------------------------*/
 
/* Overlays */
.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
 
 
/*
* jQuery UI CSS Framework 1.8.9
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Theming/API
*
* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS,%20Tahoma,%20Verdana,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=03_highlight_soft.png&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=02_glass.png&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=03_highlight_soft.png&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=08_diagonals_thick.png&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=08_diagonals_thick.png&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=01_flat.png&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px
*/
 
 
/* Component containers
----------------------------------*/
.ui-widget { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1.1em; }
.ui-widget .ui-widget { font-size: 1em; }
.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1em; }
.ui-widget-content { border: 1px solid #dddddd; background: #eeeeee url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x; color: #333333; }
.ui-widget-content a { color: #333333; }
.ui-widget-header { border: 1px solid #e78f08; background: #f6a828 url(images/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; }
.ui-widget-header a { color: #ffffff; }
 
/* Interaction states
----------------------------------*/
.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #cccccc; background: #f6f6f6 url(images/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #1c94c4; }
.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #1c94c4; text-decoration: none; }
.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #fbcb09; background: #fdf5ce url(images/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #c77405; }
.ui-state-hover a, .ui-state-hover a:hover { color: #c77405; text-decoration: none; }
.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #fbd850; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #eb8f00; }
.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #eb8f00; text-decoration: none; }
.ui-widget :active { outline: none; }
 
/* Interaction Cues
----------------------------------*/
.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fed22f; background: #ffe45c url(images/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x; color: #363636; }
.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; }
.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #b81900 url(images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat; color: #ffffff; }
.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #ffffff; }
.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #ffffff; }
.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
 
/* Icons
----------------------------------*/
 
/* states and images */
.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); }
.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
.ui-widget-header .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); }
.ui-state-default .ui-icon { background-image: url(images/ui-icons_ef8c08_256x240.png); }
.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); }
.ui-state-active .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); }
.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_228ef1_256x240.png); }
.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_ffd27a_256x240.png); }
 
/* positioning */
.ui-icon-carat-1-n { background-position: 0 0; }
.ui-icon-carat-1-ne { background-position: -16px 0; }
.ui-icon-carat-1-e { background-position: -32px 0; }
.ui-icon-carat-1-se { background-position: -48px 0; }
.ui-icon-carat-1-s { background-position: -64px 0; }
.ui-icon-carat-1-sw { background-position: -80px 0; }
.ui-icon-carat-1-w { background-position: -96px 0; }
.ui-icon-carat-1-nw { background-position: -112px 0; }
.ui-icon-carat-2-n-s { background-position: -128px 0; }
.ui-icon-carat-2-e-w { background-position: -144px 0; }
.ui-icon-triangle-1-n { background-position: 0 -16px; }
.ui-icon-triangle-1-ne { background-position: -16px -16px; }
.ui-icon-triangle-1-e { background-position: -32px -16px; }
.ui-icon-triangle-1-se { background-position: -48px -16px; }
.ui-icon-triangle-1-s { background-position: -64px -16px; }
.ui-icon-triangle-1-sw { background-position: -80px -16px; }
.ui-icon-triangle-1-w { background-position: -96px -16px; }
.ui-icon-triangle-1-nw { background-position: -112px -16px; }
.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
.ui-icon-arrow-1-n { background-position: 0 -32px; }
.ui-icon-arrow-1-ne { background-position: -16px -32px; }
.ui-icon-arrow-1-e { background-position: -32px -32px; }
.ui-icon-arrow-1-se { background-position: -48px -32px; }
.ui-icon-arrow-1-s { background-position: -64px -32px; }
.ui-icon-arrow-1-sw { background-position: -80px -32px; }
.ui-icon-arrow-1-w { background-position: -96px -32px; }
.ui-icon-arrow-1-nw { background-position: -112px -32px; }
.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
.ui-icon-arrow-4 { background-position: 0 -80px; }
.ui-icon-arrow-4-diag { background-position: -16px -80px; }
.ui-icon-extlink { background-position: -32px -80px; }
.ui-icon-newwin { background-position: -48px -80px; }
.ui-icon-refresh { background-position: -64px -80px; }
.ui-icon-shuffle { background-position: -80px -80px; }
.ui-icon-transfer-e-w { background-position: -96px -80px; }
.ui-icon-transferthick-e-w { background-position: -112px -80px; }
.ui-icon-folder-collapsed { background-position: 0 -96px; }
.ui-icon-folder-open { background-position: -16px -96px; }
.ui-icon-document { background-position: -32px -96px; }
.ui-icon-document-b { background-position: -48px -96px; }
.ui-icon-note { background-position: -64px -96px; }
.ui-icon-mail-closed { background-position: -80px -96px; }
.ui-icon-mail-open { background-position: -96px -96px; }
.ui-icon-suitcase { background-position: -112px -96px; }
.ui-icon-comment { background-position: -128px -96px; }
.ui-icon-person { background-position: -144px -96px; }
.ui-icon-print { background-position: -160px -96px; }
.ui-icon-trash { background-position: -176px -96px; }
.ui-icon-locked { background-position: -192px -96px; }
.ui-icon-unlocked { background-position: -208px -96px; }
.ui-icon-bookmark { background-position: -224px -96px; }
.ui-icon-tag { background-position: -240px -96px; }
.ui-icon-home { background-position: 0 -112px; }
.ui-icon-flag { background-position: -16px -112px; }
.ui-icon-calendar { background-position: -32px -112px; }
.ui-icon-cart { background-position: -48px -112px; }
.ui-icon-pencil { background-position: -64px -112px; }
.ui-icon-clock { background-position: -80px -112px; }
.ui-icon-disk { background-position: -96px -112px; }
.ui-icon-calculator { background-position: -112px -112px; }
.ui-icon-zoomin { background-position: -128px -112px; }
.ui-icon-zoomout { background-position: -144px -112px; }
.ui-icon-search { background-position: -160px -112px; }
.ui-icon-wrench { background-position: -176px -112px; }
.ui-icon-gear { background-position: -192px -112px; }
.ui-icon-heart { background-position: -208px -112px; }
.ui-icon-star { background-position: -224px -112px; }
.ui-icon-link { background-position: -240px -112px; }
.ui-icon-cancel { background-position: 0 -128px; }
.ui-icon-plus { background-position: -16px -128px; }
.ui-icon-plusthick { background-position: -32px -128px; }
.ui-icon-minus { background-position: -48px -128px; }
.ui-icon-minusthick { background-position: -64px -128px; }
.ui-icon-close { background-position: -80px -128px; }
.ui-icon-closethick { background-position: -96px -128px; }
.ui-icon-key { background-position: -112px -128px; }
.ui-icon-lightbulb { background-position: -128px -128px; }
.ui-icon-scissors { background-position: -144px -128px; }
.ui-icon-clipboard { background-position: -160px -128px; }
.ui-icon-copy { background-position: -176px -128px; }
.ui-icon-contact { background-position: -192px -128px; }
.ui-icon-image { background-position: -208px -128px; }
.ui-icon-video { background-position: -224px -128px; }
.ui-icon-script { background-position: -240px -128px; }
.ui-icon-alert { background-position: 0 -144px; }
.ui-icon-info { background-position: -16px -144px; }
.ui-icon-notice { background-position: -32px -144px; }
.ui-icon-help { background-position: -48px -144px; }
.ui-icon-check { background-position: -64px -144px; }
.ui-icon-bullet { background-position: -80px -144px; }
.ui-icon-radio-off { background-position: -96px -144px; }
.ui-icon-radio-on { background-position: -112px -144px; }
.ui-icon-pin-w { background-position: -128px -144px; }
.ui-icon-pin-s { background-position: -144px -144px; }
.ui-icon-play { background-position: 0 -160px; }
.ui-icon-pause { background-position: -16px -160px; }
.ui-icon-seek-next { background-position: -32px -160px; }
.ui-icon-seek-prev { background-position: -48px -160px; }
.ui-icon-seek-end { background-position: -64px -160px; }
.ui-icon-seek-start { background-position: -80px -160px; }
/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
.ui-icon-seek-first { background-position: -80px -160px; }
.ui-icon-stop { background-position: -96px -160px; }
.ui-icon-eject { background-position: -112px -160px; }
.ui-icon-volume-off { background-position: -128px -160px; }
.ui-icon-volume-on { background-position: -144px -160px; }
.ui-icon-power { background-position: 0 -176px; }
.ui-icon-signal-diag { background-position: -16px -176px; }
.ui-icon-signal { background-position: -32px -176px; }
.ui-icon-battery-0 { background-position: -48px -176px; }
.ui-icon-battery-1 { background-position: -64px -176px; }
.ui-icon-battery-2 { background-position: -80px -176px; }
.ui-icon-battery-3 { background-position: -96px -176px; }
.ui-icon-circle-plus { background-position: 0 -192px; }
.ui-icon-circle-minus { background-position: -16px -192px; }
.ui-icon-circle-close { background-position: -32px -192px; }
.ui-icon-circle-triangle-e { background-position: -48px -192px; }
.ui-icon-circle-triangle-s { background-position: -64px -192px; }
.ui-icon-circle-triangle-w { background-position: -80px -192px; }
.ui-icon-circle-triangle-n { background-position: -96px -192px; }
.ui-icon-circle-arrow-e { background-position: -112px -192px; }
.ui-icon-circle-arrow-s { background-position: -128px -192px; }
.ui-icon-circle-arrow-w { background-position: -144px -192px; }
.ui-icon-circle-arrow-n { background-position: -160px -192px; }
.ui-icon-circle-zoomin { background-position: -176px -192px; }
.ui-icon-circle-zoomout { background-position: -192px -192px; }
.ui-icon-circle-check { background-position: -208px -192px; }
.ui-icon-circlesmall-plus { background-position: 0 -208px; }
.ui-icon-circlesmall-minus { background-position: -16px -208px; }
.ui-icon-circlesmall-close { background-position: -32px -208px; }
.ui-icon-squaresmall-plus { background-position: -48px -208px; }
.ui-icon-squaresmall-minus { background-position: -64px -208px; }
.ui-icon-squaresmall-close { background-position: -80px -208px; }
.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
 
 
/* Misc visuals
----------------------------------*/
 
/* Corner radius */
.ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; }
.ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; }
.ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
.ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
.ui-corner-top { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; }
.ui-corner-bottom { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
.ui-corner-right { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
.ui-corner-left { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
.ui-corner-all { -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; }
 
/* Overlays */
.ui-widget-overlay { background: #666666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat; opacity: .50;filter:Alpha(Opacity=50); }
.ui-widget-shadow { margin: -5px 0 0 -5px; padding: 5px; background: #000000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x; opacity: .20;filter:Alpha(Opacity=20); -moz-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; }/*
* jQuery UI Slider 1.8.9
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Slider#theming
*/
.ui-slider { position: relative; text-align: left; }
.ui-slider .ui-slider-handle { position: absolute; z-index: 2; width: 1.2em; height: 1.2em; cursor: default; }
.ui-slider .ui-slider-range { position: absolute; z-index: 1; font-size: .7em; display: block; border: 0; background-position: 0 0; }
 
.ui-slider-horizontal { height: .8em; }
.ui-slider-horizontal .ui-slider-handle { top: -.3em; margin-left: -.6em; }
.ui-slider-horizontal .ui-slider-range { top: 0; height: 100%; }
.ui-slider-horizontal .ui-slider-range-min { left: 0; }
.ui-slider-horizontal .ui-slider-range-max { right: 0; }
 
.ui-slider-vertical { width: .8em; height: 100px; }
.ui-slider-vertical .ui-slider-handle { left: -.3em; margin-left: 0; margin-bottom: -.6em; }
.ui-slider-vertical .ui-slider-range { left: 0; width: 100%; }
.ui-slider-vertical .ui-slider-range-min { bottom: 0; }
.ui-slider-vertical .ui-slider-range-max { top: 0; }
/trunk/applications/rendu/squelettes/css/.directory
New file
0,0 → 1,5
[Dolphin]
Timestamp=2011,2,1,14,30,16
 
[Settings]
ShowDotFiles=true
/trunk/applications/rendu/squelettes/css/rendu.css
New file
0,0 → 1,139
#contenu_application {
 
}
 
.separation_invisible {
clear:both;
visibility:hidden;
}
 
.droite {
float: left;
padding-left: 10px;
}
 
.separation_en_deux > * {
width: 49%;
}
 
.conteneur_carte {
height: 450px;
padding-top: 10px;
}
 
#table_dates {
width: 100%;
border-collapse: collapse;
}
 
#table_dates tbody {
border: none;
margin-top: 0;
padding-top: 0;
}
 
#conteneur_slider_date {
padding-top:10px;
width: 100%;
padding-bottom: 0px;
}
 
#slider_date .ui-slider-handle {
background: none;
background-color:#ACC700;
}
 
.total_nb_obs {
font-weight: bold;
font-size: 14px;
margin-top: 5px;
}
 
.selecteur_critere {
padding-right: 5px;
display: inline-block;
margin-left: 10px;
margin-top: 10px;
}
 
.conteneur_selecteur_liste_especes {
display: flex;
flex-direction: row;
justify-content: center;
}
 
.conteneur_selecteur_liste_especes > div {
flex: 1;
}
 
.conteneur_selecteur_espece {
display: flex;
align-items: center;
}
 
 
.criteres {
padding-bottom: 10px;
}
 
.conteneur_selecteur_liste_annees {
width: 100%;
}
 
.conteneur_selecteur_liste_annees > div {
display: flex;
justify-content: normal;
}
 
.conteneur_selecteur_liste_annees > div > div {
margin-left: 20px;
margin-right: 20px;
}
 
.conteneur_annee {
display: flex;
align-items: center;
justify-content: left;
}
 
.conteneur_date {
display: table-cell;
text-align:center;
border-left: 2px solid black;
border-right: 2px solid black;
}
 
.lien_vers_profil {
cursor: pointer;
text-decoration: underline;
}
 
.legende {
border: 1px solid black;
display: block;
float: left;
height: 1em;
width: 20px;
}
 
/* =========================== Styles des différents stades ============================ */
 
.stade_feuillaison {
background-color: #ACC700;
}
 
.stade_floraison {
background-color: #B549B9;
}
 
.stade_fructification {
background-color: #FF7F00;
}
 
.stade_senescence {
background-color: #BF3600;
}
 
.stade_1ere_apparition {
background-color: #B549B9;
}
/trunk/applications/rendu/squelettes/js/commun.js
New file
0,0 → 1,612
var map = null;
var ctaLayer = null;
var tableau_marqueurs = new Array();
var infowindow = new google.maps.InfoWindow();
var infos_observations = new Array();
var nb_observations_par_espece = {};
var nb_observations_par_annee = {};
 
var type_espece = '0';
var espece = '0';
var evenement = '0';
var annee = '0';
var mois = '0';
var jour = '0';
var departement = '0';
var region = '0';
var valeur_slider_defaut = '0';
 
/**
*
*/
Date.prototype.getDOY = function() {
var onejan = new Date(this.getFullYear(),0,1);
return Math.ceil((this - onejan) / 86400000);
}
 
var tableau_couleurs = new Array(
"#ff0000", "#733d00", "#f2ffbf", "#00ccff", "#2e1a33", "#00ff66", "#ffe1bf", "#ff8800",
"#005266", "#be00cc", "#592d2d", "#ffcc00", "#336641", "#264599", "#80206c", "#bf7960",
"#665c33", "#bf0000", "#80a2ff", "#ff80c4", "#806c60", "#ccff00", "#00ffcc", "#090040",
"#bf004d", "#2a3326", "#668000", "#608079", "#3600cc", "#8c696e"
);
 
liste_mois = new Array("jan","fev","mar","avr","mai","jun","jui","aou","sep","oct","nov","dec");
 
evenements_debut_annee = new Array("")
 
var tableau_couleurs_en_cours = new Array();
 
var timerSlider = null;
 
function getUrlBaseJrest() {
return urlBaseJrest;
}
 
function traiterParametresUrl() {
 
var vars = [], hash;
var hashes = window.location.href.slice(window.location.href.indexOf('?') + 1).split('&');
for(var i = 0; i < hashes.length; i++)
{
hash = hashes[i].split('=');
vars.push(hash[0]);
vars[hash[0]] = hash[1];
}
 
if(vars['type_espece'] != null) {
type_espece = vars['type_espece'];
$('#selecteur_liste_types_especes').val(type_espece);
}
 
if(vars['espece'] != null) {
if(type_espece != '0') {
modifierTableauEspeces();
}
espece = vars['espece'];
$('#selecteur_especes').val(espece);
 
}
 
if(vars['evenement'] != null) {
if(espece != 0) {
modifierTableauEvenement()
}
evenement = vars['evenement'];
$('#selecteur_evenements').val(evenement);
}
 
if(vars['annee'] != null) {
annee = vars['annee'];
$('#selecteur_liste_annees').val(annee);
} else {
date = new Date()
annee = date.getFullYear();
$('#selecteur_liste_annees').val(annee);
}
 
if(vars['mois'] != null) {
mois = vars['mois'];
} else {
date = new Date();
if(annee == date.getFullYear()) {
mois = date.getMonth();
valeur_slider_defaut = date.getDOY();
} else {
mois = 11;
date.setYear(annee);
date.setMonth(mois);
date.setDate(31);
valeur_slider_defaut = date.getDOY();
}
}
 
if(vars['departement'] != null) {
departement = vars['departement'];
$('#selecteur_liste_departement').val(annee);
} else {
if(vars['region'] != null) {
region = vars['region'];
$('#selecteur_liste_region').val(annee);
}
}
 
if(vars['cacher_criteres'] != null && vars['cacher_criteres'] == '1') {
$(".cacher_widget").hide();
}
}
 
function obtenirCodeWidget() {
 
var UrlBase = url_widget;
UrlBase += '?';
if(type_espece != '0') UrlBase += "type_espece="+type_espece;
//TODO: décider si l'on peut garder l'espece et si le cas échéant on la cache
if(espece != '0') UrlBase += "&espece="+espece;
if(evenement != '0') UrlBase += "&evenement="+evenement;
if(annee != '0') UrlBase += "&annee="+annee;
if(departement != '0') UrlBase += "&departement="+departement;
if(region != '0') UrlBase += "&region="+region;
if(mois != '0') UrlBase += "&mois="+mois;
UrlBase += "&cacher_criteres=1";
 
UrlBase = UrlBase.replace('?&','?');
 
code_widget = '<iframe src="'+UrlBase+'" width="735px" height="650px"><p>Votre navigateur ne supporte pas les iframes.</p></iframe>'
 
return code_widget;
}
 
String.prototype.hashCode = function() {
var hash = 0, i, chr;
if (this.length === 0) return hash;
for (i = 0; i < this.length; i++) {
chr = this.charCodeAt(i);
hash = ((hash << 5) - hash) + chr;
hash |= 0; // Convert to 32bit integer
}
return hash;
};
 
function renverserTableauEtHashcoderIndex(trans) {
var key, tmp_ar = {};
 
for (key in trans)
{
if (trans.hasOwnProperty(key))
{
tmp_ar[trans[key].hashCode()] = key;
}
}
 
return tmp_ar;
}
 
function trierTableau(tableau) {
if(!tableau) {
return;
}
 
var tableau_trie = tableau.slice(0);
tableau_trie.sort(function(a,b){
return a.localeCompare(b);
});
 
return tableau_trie;
}
 
$('#lien_cette_recherche').ready(function() {
$('#lien_cette_recherche').click(function() {
window.alert(obtenirCodeWidget());
return false;
});
});
 
function selectionnerParametresDynamiquesParDefaut() {
if($('.conteneur_selecteur_liste_annees').is(':visible')) {
var annee_courante = (new Date()).getFullYear();
$('#annee_numero_'+annee_courante).attr( "checked", true );
}
premier_chargement = false;
}
 
var premier_chargement = true;
$(document).ready(function() {
traiterParametresUrl();
});
 
/**
************************************************************************************************
************************************************************************************************
 
Fonctions concernant les gestion des filtres sur la carte
 
************************************************************************************************
************************************************************************************************
**/
 
function setDateSlider() {
numeroJour = $("#slider_date").slider("value");
dateObs = new Date(annee,0,0);
dateObs.setDate(dateObs.getDate()+numeroJour);
 
mois = dateObs.getMonth();
jour = dateObs.getDay();
afficherObservations();
}
 
function initialiserSliderDates() {
 
date_min = 1;
date_max = 365;
 
$("#slider_date").slider({
min: date_min,
max: date_max,
value: valeur_slider_defaut
});
 
taille_criteres = Math.round($("#slider_date").width()/(liste_mois.length));
 
valeurs_slider = '<table id="table_dates"><tbody><tr>';
 
for (i in liste_mois) {
valeurs_slider += '<td class="conteneur_date">'+liste_mois[i]+'</td>';
}
 
valeurs_slider += '</tr></tbody></table>';
 
$("conteneur_date").css(".conteneur_date{ width:"+taille_criteres+"px;}");
 
$("#valeurs_date").html(valeurs_slider);
 
$("#slider_date").bind("slidestop", function(event, ui) {
setDateSlider();
return true;
});
 
$(window).bind("resize", resizeWindow);
function resizeWindow( e ) {
taille_criteres = Math.round($("#slider_date").width()/(liste_mois.length));
$("#css_slider").html(".conteneur_date{ width:"+taille_criteres+"px;}");
}
}
 
function initialiserListeRegion() {
 
$('#selecteur_liste_region').change(function() {
region = $('select#selecteur_liste_region option:selected').val();
obtenirObservations();
});
}
 
function initialiserListeDepartement() {
 
$('#selecteur_liste_departement').change(function() {
departement = $('select#selecteur_liste_departement option:selected').val();
obtenirObservations();
});
}
 
 
function initialiserListeTypesEspeces() {
 
$('#selecteur_liste_types_especes').change(function() {
type_espece = $('select#selecteur_liste_types_especes option:selected').val();
modifierTableauEspeces();
obtenirObservations();
});
}
 
function incrementerValeurSlider() {
var valeur_en_cours = $('#slider_date').slider("value");
if($('#slider_date').slider("value") < $('#slider_date').slider("option", "max")) {
valeur_en_cours++;
$('#slider_date').slider("value",valeur_en_cours);
setDateSlider();
} else {
clearInterval(timerSlider);
$('#demarrer_slider').removeAttr('disabled');
}
}
 
function initialiserBoutonsSlider() {
 
$('#demarrer_slider').click(function() {
 
if($('#slider_date').slider("value") == $('#slider_date').slider("option","max")) {
min_slider = $('#slider_date').slider("option","min");
$('#slider_date').slider("value",min_slider);
}
 
timerSlider = setInterval("incrementerValeurSlider()",150);
$('#demarrer_slider').attr('disabled', 'disabled');
});
 
$('#arreter_slider').click(function() {
if(timerSlider != null) {
clearInterval(timerSlider);
$('#demarrer_slider').removeAttr('disabled');
}
});
 
}
 
function initialiserValeursParDefaut() {
type_espece = 0;
$('select#selecteur_liste_types_especes').val("0");
modifierTableauEspeces();
obtenirObservations();
}
 
$('#slider_date').ready(function() {
initialiserSliderDates();
initialiserBoutonsSlider();
initialiserListeTypesEspeces();
initialiserListeEspeces();
initialiserListeEvenements();
initialiserListeAnnees();
initialiserValeursParDefaut();
initialiserListeRegion();
initialiserListeDepartement()
});
 
 
/**
************************************************************************************************
************************************************************************************************
 
Fonctions concernant la carte permettant de pointer d'afficher l'emplacement des observation
 
************************************************************************************************
************************************************************************************************
**/
function initialiserCarte() {
 
if($('#map_canvas').length == 0) {
return;
}
 
var latlng = new google.maps.LatLng(47.0504, 2.2347);
var myOptions = {
zoom: 5,
center:latlng,
mapTypeId: google.maps.MapTypeId.ROADMAP,
mapTypeControlOptions: {
mapTypeIds: ['OSM',
google.maps.MapTypeId.ROADMAP,
google.maps.MapTypeId.HYBRID,
google.maps.MapTypeId.SATELLITE,
google.maps.MapTypeId.TERRAIN]
}
};
 
var osmMapType = new google.maps.ImageMapType({
getTileUrl: function(coord, zoom) {
return "http://tile.openstreetmap.org/" +
zoom + "/" + coord.x + "/" + coord.y + ".png";
},
tileSize: new google.maps.Size(256, 256),
isPng: true,
alt: "OpenStreetMap",
name: "OSM",
maxZoom: 19
});
 
map = new google.maps.Map(document.getElementById("map_canvas"),
myOptions);
// Ajout de la couche OSM à la carte
map.mapTypes.set('OSM', osmMapType);
 
marker = new google.maps.Marker({
position: latlng,
title:""
});
 
chargerLimitesCommunales();
 
$('.lien_vers_profil').live('click', function(event) {
event.preventDefault();
window.open($(this).attr('href'));
return false;
});
}
 
function chargerLimitesCommunales() {
if (urlsLimitesCommunales != null) {
for (urlId in urlsLimitesCommunales) {
var url = urlsLimitesCommunales[urlId];
ctaLayer = new google.maps.KmlLayer(url, {preserveViewport: false});
ctaLayer.setMap(map);
}
}
}
 
var obs_xhr = null;
function obtenirObservations() {
 
if(obs_xhr != null) {
viderMarqueurs();
console.log('annulation de la xhr');
obs_xhr.abort();
}
 
annee = getAnneeSelectionnee();
requete = '?annee='+annee;
 
if(type_espece != '0') {
requete += '&type_espece='+type_espece;
}
 
var espece = getEspeceSelectionnee();
if(espece != '0') {
requete += '&espece='+espece;
}
 
if(evenement != '0') {
requete += '&evenement='+evenement;
}
 
if(departement != '0') {
requete += '&departement='+departement;
}
 
if(region != '0') {
requete += '&region='+region;
}
 
$.get(getUrlBaseJrest()+'OdsExport/ExportObservationJson/'+requete, function(data) {
 
obs_xhr = null;
 
infos_observations = data;
 
nb_observations_par_espece = {};
nb_observations_par_annee = {};
 
if(tableau_marqueurs.length > 0) {
viderMarqueurs();
}
 
for(i in infos_observations) {
creerEtAjouterMarqueur(i, infos_observations[i]);
}
 
afficherObservations();
});
}
 
function creerEtAjouterMarqueur(id_marqueur, infos_obs) {
 
latlng = new google.maps.LatLng(infos_obs['latitude'],infos_obs['longitude']);
 
var chaine_couleur = '';
 
for(i in infos_obs.obs) {
var observation = infos_obs.obs[i];
 
if(typeof(tableau_couleurs_en_cours[observation.id_espece]) != 'undefined') {
chaine_couleur += tableau_couleurs_en_cours[observation.id_espece]+",";
}
 
if(!nb_observations_par_espece[observation.id_espece]) {
nb_observations_par_espece[observation.id_espece] = 0;
}
nb_observations_par_espece[observation.id_espece]++;
 
var annee_obs = observation.date.split('/')[2];
if(!nb_observations_par_annee[annee_obs]) {
nb_observations_par_annee[annee_obs] = 0;
}
nb_observations_par_annee[annee_obs]++;
}
 
chaine_couleur = chaine_couleur.slice(0,chaine_couleur.length - 1);
var image = obtenirImagePourChaineCouleur(chaine_couleur);
 
tableau_marqueurs[id_marqueur] = new google.maps.Marker({
position: latlng,
title:infos_obs.evenenement,
icon:image,
optimized: false
});
 
google.maps.event.addListener(tableau_marqueurs[id_marqueur], 'click', function() {
contenu_fenetre = formaterContenuFenetre(infos_obs.obs);
infowindow.close();
infowindow.setContent(contenu_fenetre);
infowindow.open(map,this);
});
 
tableau_marqueurs[id_marqueur].setDraggable(false);
tableau_marqueurs[id_marqueur].setClickable(true);
 
tableau_marqueurs[id_marqueur].setMap(map);
 
}
 
function viderMarqueurs() {
 
infowindow.close();
for(i in tableau_marqueurs) {
tableau_marqueurs[i].setMap(null);
}
 
tableau_marqueurs = new Array();
}
 
 
function obtenirImagePourChaineCouleur(chaine_couleur) {
 
chaine_couleur = encodeURIComponent(chaine_couleur);
var image = getUrlBaseJrest()+"OdsMarqueur/point?couleurs="+chaine_couleur;
 
return image;
}
 
function convertirDateObsVersJs(chaine_date) {
 
tableau_date = chaine_date.split('/');
date_obs = new Date();
 
date_obs.setDate(tableau_date[0]);
date_obs.setMonth(tableau_date[1]);
date_obs.setFullYear(tableau_date[2]);
 
return date_obs;
}
 
function dateEstDansIntervalle(t_obs) {
 
date_obs = convertirDateObsVersJs(t_obs);
 
dans_intervalle = false;
 
var dateDebutAnnee = new Date();
dateDebutAnnee.setDate(1);
dateDebutAnnee.setMonth(1);
dateDebutAnnee.setFullYear(date_obs.getFullYear());
var quantieme = (date_obs.getTime() - dateDebutAnnee.getTime()) / (24 * 3600 * 1000)+1;
 
if($('#slider_date').slider("value") >= quantieme) {
dans_intervalle = true;
}
 
return dans_intervalle;
}
 
function comparerDates(date_1, date_2){
diff = date_1.getTime()-date_2.getTime();
return (diff==0?diff:diff/Math.abs(diff));
}
 
function obtenirMarqueurPourStade(stade) {
 
iconeStade = '../images/marqueur_'+stade+'.png';
 
return iconeStade;
}
 
function formaterContenuFenetre(infos_obs) {
 
contenu_fenetre = '';
date_courante = new Date(annee,mois,jour);
 
for(i in infos_obs) {
 
t_obs = infos_obs[i].date;
 
if(dateEstDansIntervalle(t_obs)) {
nom_stade ='';
if(infos_obs[i].code_bbch != '') {
nom_stade = ' stade '+infos_obs[i].code_bbch;
}
 
contenu_fenetre += '<div class="fenetre_infos">';
contenu_fenetre += '<div class="nom_sci">'+infos_obs[i].nom_scientifique+'</div>';
contenu_fenetre += '<div class="nom_sci">'+infos_obs[i].evenenement+nom_stade+'</div>';
contenu_fenetre += '<div class="date_obs"> Observ&eacute; le : '+infos_obs[i].date+' </div>';
contenu_fenetre += construireUrlProfilParticipant(infos_obs[i].participant);
contenu_fenetre += '</div><br />';
}
}
 
return contenu_fenetre;
}
 
function construireUrlProfilParticipant(id) {
return '<a class="lien_vers_profil" href="http://obs-saisons.fr/user/'+id+'"> Voir l\'auteur </a>';
}
 
function getCouleurAleatoire() {
var letters = '0123456789ABCDEF';
var color = '#';
for (var i = 0; i < 6; i++) {
color += letters[Math.floor(Math.random() * 16)];
}
return color;
}
 
$('#map_canvas').ready(function() {
initialiserCarte();
});
/trunk/applications/rendu/squelettes/js/jquery-1.4.4.js
New file
0,0 → 1,7179
/*!
* jQuery JavaScript Library v1.4.4
* http://jquery.com/
*
* Copyright 2010, John Resig
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* Includes Sizzle.js
* http://sizzlejs.com/
* Copyright 2010, The Dojo Foundation
* Released under the MIT, BSD, and GPL Licenses.
*
* Date: Thu Nov 11 19:04:53 2010 -0500
*/
(function( window, undefined ) {
 
// Use the correct document accordingly with window argument (sandbox)
var document = window.document;
var jQuery = (function() {
 
// Define a local copy of jQuery
var jQuery = function( selector, context ) {
// The jQuery object is actually just the init constructor 'enhanced'
return new jQuery.fn.init( selector, context );
},
 
// Map over jQuery in case of overwrite
_jQuery = window.jQuery,
 
// Map over the $ in case of overwrite
_$ = window.$,
 
// A central reference to the root jQuery(document)
rootjQuery,
 
// A simple way to check for HTML strings or ID strings
// (both of which we optimize for)
quickExpr = /^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/,
 
// Is it a simple selector
isSimple = /^.[^:#\[\.,]*$/,
 
// Check if a string has a non-whitespace character in it
rnotwhite = /\S/,
rwhite = /\s/,
 
// Used for trimming whitespace
trimLeft = /^\s+/,
trimRight = /\s+$/,
 
// Check for non-word characters
rnonword = /\W/,
 
// Check for digits
rdigit = /\d/,
 
// Match a standalone tag
rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/,
 
// JSON RegExp
rvalidchars = /^[\],:{}\s]*$/,
rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
 
// Useragent RegExp
rwebkit = /(webkit)[ \/]([\w.]+)/,
ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/,
rmsie = /(msie) ([\w.]+)/,
rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/,
 
// Keep a UserAgent string for use with jQuery.browser
userAgent = navigator.userAgent,
 
// For matching the engine and version of the browser
browserMatch,
// Has the ready events already been bound?
readyBound = false,
// The functions to execute on DOM ready
readyList = [],
 
// The ready event handler
DOMContentLoaded,
 
// Save a reference to some core methods
toString = Object.prototype.toString,
hasOwn = Object.prototype.hasOwnProperty,
push = Array.prototype.push,
slice = Array.prototype.slice,
trim = String.prototype.trim,
indexOf = Array.prototype.indexOf,
// [[Class]] -> type pairs
class2type = {};
 
jQuery.fn = jQuery.prototype = {
init: function( selector, context ) {
var match, elem, ret, doc;
 
// Handle $(""), $(null), or $(undefined)
if ( !selector ) {
return this;
}
 
// Handle $(DOMElement)
if ( selector.nodeType ) {
this.context = this[0] = selector;
this.length = 1;
return this;
}
// The body element only exists once, optimize finding it
if ( selector === "body" && !context && document.body ) {
this.context = document;
this[0] = document.body;
this.selector = "body";
this.length = 1;
return this;
}
 
// Handle HTML strings
if ( typeof selector === "string" ) {
// Are we dealing with HTML string or an ID?
match = quickExpr.exec( selector );
 
// Verify a match, and that no context was specified for #id
if ( match && (match[1] || !context) ) {
 
// HANDLE: $(html) -> $(array)
if ( match[1] ) {
doc = (context ? context.ownerDocument || context : document);
 
// If a single string is passed in and it's a single tag
// just do a createElement and skip the rest
ret = rsingleTag.exec( selector );
 
if ( ret ) {
if ( jQuery.isPlainObject( context ) ) {
selector = [ document.createElement( ret[1] ) ];
jQuery.fn.attr.call( selector, context, true );
 
} else {
selector = [ doc.createElement( ret[1] ) ];
}
 
} else {
ret = jQuery.buildFragment( [ match[1] ], [ doc ] );
selector = (ret.cacheable ? ret.fragment.cloneNode(true) : ret.fragment).childNodes;
}
return jQuery.merge( this, selector );
// HANDLE: $("#id")
} else {
elem = document.getElementById( match[2] );
 
// Check parentNode to catch when Blackberry 4.6 returns
// nodes that are no longer in the document #6963
if ( elem && elem.parentNode ) {
// Handle the case where IE and Opera return items
// by name instead of ID
if ( elem.id !== match[2] ) {
return rootjQuery.find( selector );
}
 
// Otherwise, we inject the element directly into the jQuery object
this.length = 1;
this[0] = elem;
}
 
this.context = document;
this.selector = selector;
return this;
}
 
// HANDLE: $("TAG")
} else if ( !context && !rnonword.test( selector ) ) {
this.selector = selector;
this.context = document;
selector = document.getElementsByTagName( selector );
return jQuery.merge( this, selector );
 
// HANDLE: $(expr, $(...))
} else if ( !context || context.jquery ) {
return (context || rootjQuery).find( selector );
 
// HANDLE: $(expr, context)
// (which is just equivalent to: $(context).find(expr)
} else {
return jQuery( context ).find( selector );
}
 
// HANDLE: $(function)
// Shortcut for document ready
} else if ( jQuery.isFunction( selector ) ) {
return rootjQuery.ready( selector );
}
 
if (selector.selector !== undefined) {
this.selector = selector.selector;
this.context = selector.context;
}
 
return jQuery.makeArray( selector, this );
},
 
// Start with an empty selector
selector: "",
 
// The current version of jQuery being used
jquery: "1.4.4",
 
// The default length of a jQuery object is 0
length: 0,
 
// The number of elements contained in the matched element set
size: function() {
return this.length;
},
 
toArray: function() {
return slice.call( this, 0 );
},
 
// Get the Nth element in the matched element set OR
// Get the whole matched element set as a clean array
get: function( num ) {
return num == null ?
 
// Return a 'clean' array
this.toArray() :
 
// Return just the object
( num < 0 ? this.slice(num)[ 0 ] : this[ num ] );
},
 
// Take an array of elements and push it onto the stack
// (returning the new matched element set)
pushStack: function( elems, name, selector ) {
// Build a new jQuery matched element set
var ret = jQuery();
 
if ( jQuery.isArray( elems ) ) {
push.apply( ret, elems );
} else {
jQuery.merge( ret, elems );
}
 
// Add the old object onto the stack (as a reference)
ret.prevObject = this;
 
ret.context = this.context;
 
if ( name === "find" ) {
ret.selector = this.selector + (this.selector ? " " : "") + selector;
} else if ( name ) {
ret.selector = this.selector + "." + name + "(" + selector + ")";
}
 
// Return the newly-formed element set
return ret;
},
 
// Execute a callback for every element in the matched set.
// (You can seed the arguments with an array of args, but this is
// only used internally.)
each: function( callback, args ) {
return jQuery.each( this, callback, args );
},
ready: function( fn ) {
// Attach the listeners
jQuery.bindReady();
 
// If the DOM is already ready
if ( jQuery.isReady ) {
// Execute the function immediately
fn.call( document, jQuery );
 
// Otherwise, remember the function for later
} else if ( readyList ) {
// Add the function to the wait list
readyList.push( fn );
}
 
return this;
},
eq: function( i ) {
return i === -1 ?
this.slice( i ) :
this.slice( i, +i + 1 );
},
 
first: function() {
return this.eq( 0 );
},
 
last: function() {
return this.eq( -1 );
},
 
slice: function() {
return this.pushStack( slice.apply( this, arguments ),
"slice", slice.call(arguments).join(",") );
},
 
map: function( callback ) {
return this.pushStack( jQuery.map(this, function( elem, i ) {
return callback.call( elem, i, elem );
}));
},
end: function() {
return this.prevObject || jQuery(null);
},
 
// For internal use only.
// Behaves like an Array's method, not like a jQuery method.
push: push,
sort: [].sort,
splice: [].splice
};
 
// Give the init function the jQuery prototype for later instantiation
jQuery.fn.init.prototype = jQuery.fn;
 
jQuery.extend = jQuery.fn.extend = function() {
var options, name, src, copy, copyIsArray, clone,
target = arguments[0] || {},
i = 1,
length = arguments.length,
deep = false;
 
// Handle a deep copy situation
if ( typeof target === "boolean" ) {
deep = target;
target = arguments[1] || {};
// skip the boolean and the target
i = 2;
}
 
// Handle case when target is a string or something (possible in deep copy)
if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
target = {};
}
 
// extend jQuery itself if only one argument is passed
if ( length === i ) {
target = this;
--i;
}
 
for ( ; i < length; i++ ) {
// Only deal with non-null/undefined values
if ( (options = arguments[ i ]) != null ) {
// Extend the base object
for ( name in options ) {
src = target[ name ];
copy = options[ name ];
 
// Prevent never-ending loop
if ( target === copy ) {
continue;
}
 
// Recurse if we're merging plain objects or arrays
if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
if ( copyIsArray ) {
copyIsArray = false;
clone = src && jQuery.isArray(src) ? src : [];
 
} else {
clone = src && jQuery.isPlainObject(src) ? src : {};
}
 
// Never move original objects, clone them
target[ name ] = jQuery.extend( deep, clone, copy );
 
// Don't bring in undefined values
} else if ( copy !== undefined ) {
target[ name ] = copy;
}
}
}
}
 
// Return the modified object
return target;
};
 
jQuery.extend({
noConflict: function( deep ) {
window.$ = _$;
 
if ( deep ) {
window.jQuery = _jQuery;
}
 
return jQuery;
},
// Is the DOM ready to be used? Set to true once it occurs.
isReady: false,
 
// A counter to track how many items to wait for before
// the ready event fires. See #6781
readyWait: 1,
// Handle when the DOM is ready
ready: function( wait ) {
// A third-party is pushing the ready event forwards
if ( wait === true ) {
jQuery.readyWait--;
}
 
// Make sure that the DOM is not already loaded
if ( !jQuery.readyWait || (wait !== true && !jQuery.isReady) ) {
// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
if ( !document.body ) {
return setTimeout( jQuery.ready, 1 );
}
 
// Remember that the DOM is ready
jQuery.isReady = true;
 
// If a normal DOM Ready event fired, decrement, and wait if need be
if ( wait !== true && --jQuery.readyWait > 0 ) {
return;
}
 
// If there are functions bound, to execute
if ( readyList ) {
// Execute all of them
var fn,
i = 0,
ready = readyList;
 
// Reset the list of functions
readyList = null;
 
while ( (fn = ready[ i++ ]) ) {
fn.call( document, jQuery );
}
 
// Trigger any bound ready events
if ( jQuery.fn.trigger ) {
jQuery( document ).trigger( "ready" ).unbind( "ready" );
}
}
}
},
bindReady: function() {
if ( readyBound ) {
return;
}
 
readyBound = true;
 
// Catch cases where $(document).ready() is called after the
// browser event has already occurred.
if ( document.readyState === "complete" ) {
// Handle it asynchronously to allow scripts the opportunity to delay ready
return setTimeout( jQuery.ready, 1 );
}
 
// Mozilla, Opera and webkit nightlies currently support this event
if ( document.addEventListener ) {
// Use the handy event callback
document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
// A fallback to window.onload, that will always work
window.addEventListener( "load", jQuery.ready, false );
 
// If IE event model is used
} else if ( document.attachEvent ) {
// ensure firing before onload,
// maybe late but safe also for iframes
document.attachEvent("onreadystatechange", DOMContentLoaded);
// A fallback to window.onload, that will always work
window.attachEvent( "onload", jQuery.ready );
 
// If IE and not a frame
// continually check to see if the document is ready
var toplevel = false;
 
try {
toplevel = window.frameElement == null;
} catch(e) {}
 
if ( document.documentElement.doScroll && toplevel ) {
doScrollCheck();
}
}
},
 
// See test/unit/core.js for details concerning isFunction.
// Since version 1.3, DOM methods and functions like alert
// aren't supported. They return false on IE (#2968).
isFunction: function( obj ) {
return jQuery.type(obj) === "function";
},
 
isArray: Array.isArray || function( obj ) {
return jQuery.type(obj) === "array";
},
 
// A crude way of determining if an object is a window
isWindow: function( obj ) {
return obj && typeof obj === "object" && "setInterval" in obj;
},
 
isNaN: function( obj ) {
return obj == null || !rdigit.test( obj ) || isNaN( obj );
},
 
type: function( obj ) {
return obj == null ?
String( obj ) :
class2type[ toString.call(obj) ] || "object";
},
 
isPlainObject: function( obj ) {
// Must be an Object.
// Because of IE, we also have to check the presence of the constructor property.
// Make sure that DOM nodes and window objects don't pass through, as well
if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
return false;
}
// Not own constructor property must be Object
if ( obj.constructor &&
!hasOwn.call(obj, "constructor") &&
!hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
return false;
}
// Own properties are enumerated firstly, so to speed up,
// if last one is own, then all properties are own.
var key;
for ( key in obj ) {}
return key === undefined || hasOwn.call( obj, key );
},
 
isEmptyObject: function( obj ) {
for ( var name in obj ) {
return false;
}
return true;
},
error: function( msg ) {
throw msg;
},
parseJSON: function( data ) {
if ( typeof data !== "string" || !data ) {
return null;
}
 
// Make sure leading/trailing whitespace is removed (IE can't handle it)
data = jQuery.trim( data );
// Make sure the incoming data is actual JSON
// Logic borrowed from http://json.org/json2.js
if ( rvalidchars.test(data.replace(rvalidescape, "@")
.replace(rvalidtokens, "]")
.replace(rvalidbraces, "")) ) {
 
// Try to use the native JSON parser first
return window.JSON && window.JSON.parse ?
window.JSON.parse( data ) :
(new Function("return " + data))();
 
} else {
jQuery.error( "Invalid JSON: " + data );
}
},
 
noop: function() {},
 
// Evalulates a script in a global context
globalEval: function( data ) {
if ( data && rnotwhite.test(data) ) {
// Inspired by code by Andrea Giammarchi
// http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html
var head = document.getElementsByTagName("head")[0] || document.documentElement,
script = document.createElement("script");
 
script.type = "text/javascript";
 
if ( jQuery.support.scriptEval ) {
script.appendChild( document.createTextNode( data ) );
} else {
script.text = data;
}
 
// Use insertBefore instead of appendChild to circumvent an IE6 bug.
// This arises when a base node is used (#2709).
head.insertBefore( script, head.firstChild );
head.removeChild( script );
}
},
 
nodeName: function( elem, name ) {
return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase();
},
 
// args is for internal usage only
each: function( object, callback, args ) {
var name, i = 0,
length = object.length,
isObj = length === undefined || jQuery.isFunction(object);
 
if ( args ) {
if ( isObj ) {
for ( name in object ) {
if ( callback.apply( object[ name ], args ) === false ) {
break;
}
}
} else {
for ( ; i < length; ) {
if ( callback.apply( object[ i++ ], args ) === false ) {
break;
}
}
}
 
// A special, fast, case for the most common use of each
} else {
if ( isObj ) {
for ( name in object ) {
if ( callback.call( object[ name ], name, object[ name ] ) === false ) {
break;
}
}
} else {
for ( var value = object[0];
i < length && callback.call( value, i, value ) !== false; value = object[++i] ) {}
}
}
 
return object;
},
 
// Use native String.trim function wherever possible
trim: trim ?
function( text ) {
return text == null ?
"" :
trim.call( text );
} :
 
// Otherwise use our own trimming functionality
function( text ) {
return text == null ?
"" :
text.toString().replace( trimLeft, "" ).replace( trimRight, "" );
},
 
// results is for internal usage only
makeArray: function( array, results ) {
var ret = results || [];
 
if ( array != null ) {
// The window, strings (and functions) also have 'length'
// The extra typeof function check is to prevent crashes
// in Safari 2 (See: #3039)
// Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930
var type = jQuery.type(array);
 
if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) {
push.call( ret, array );
} else {
jQuery.merge( ret, array );
}
}
 
return ret;
},
 
inArray: function( elem, array ) {
if ( array.indexOf ) {
return array.indexOf( elem );
}
 
for ( var i = 0, length = array.length; i < length; i++ ) {
if ( array[ i ] === elem ) {
return i;
}
}
 
return -1;
},
 
merge: function( first, second ) {
var i = first.length,
j = 0;
 
if ( typeof second.length === "number" ) {
for ( var l = second.length; j < l; j++ ) {
first[ i++ ] = second[ j ];
}
} else {
while ( second[j] !== undefined ) {
first[ i++ ] = second[ j++ ];
}
}
 
first.length = i;
 
return first;
},
 
grep: function( elems, callback, inv ) {
var ret = [], retVal;
inv = !!inv;
 
// Go through the array, only saving the items
// that pass the validator function
for ( var i = 0, length = elems.length; i < length; i++ ) {
retVal = !!callback( elems[ i ], i );
if ( inv !== retVal ) {
ret.push( elems[ i ] );
}
}
 
return ret;
},
 
// arg is for internal usage only
map: function( elems, callback, arg ) {
var ret = [], value;
 
// Go through the array, translating each of the items to their
// new value (or values).
for ( var i = 0, length = elems.length; i < length; i++ ) {
value = callback( elems[ i ], i, arg );
 
if ( value != null ) {
ret[ ret.length ] = value;
}
}
 
return ret.concat.apply( [], ret );
},
 
// A global GUID counter for objects
guid: 1,
 
proxy: function( fn, proxy, thisObject ) {
if ( arguments.length === 2 ) {
if ( typeof proxy === "string" ) {
thisObject = fn;
fn = thisObject[ proxy ];
proxy = undefined;
 
} else if ( proxy && !jQuery.isFunction( proxy ) ) {
thisObject = proxy;
proxy = undefined;
}
}
 
if ( !proxy && fn ) {
proxy = function() {
return fn.apply( thisObject || this, arguments );
};
}
 
// Set the guid of unique handler to the same of original handler, so it can be removed
if ( fn ) {
proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++;
}
 
// So proxy can be declared as an argument
return proxy;
},
 
// Mutifunctional method to get and set values to a collection
// The value/s can be optionally by executed if its a function
access: function( elems, key, value, exec, fn, pass ) {
var length = elems.length;
// Setting many attributes
if ( typeof key === "object" ) {
for ( var k in key ) {
jQuery.access( elems, k, key[k], exec, fn, value );
}
return elems;
}
// Setting one attribute
if ( value !== undefined ) {
// Optionally, function values get executed if exec is true
exec = !pass && exec && jQuery.isFunction(value);
for ( var i = 0; i < length; i++ ) {
fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );
}
return elems;
}
// Getting an attribute
return length ? fn( elems[0], key ) : undefined;
},
 
now: function() {
return (new Date()).getTime();
},
 
// Use of jQuery.browser is frowned upon.
// More details: http://docs.jquery.com/Utilities/jQuery.browser
uaMatch: function( ua ) {
ua = ua.toLowerCase();
 
var match = rwebkit.exec( ua ) ||
ropera.exec( ua ) ||
rmsie.exec( ua ) ||
ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) ||
[];
 
return { browser: match[1] || "", version: match[2] || "0" };
},
 
browser: {}
});
 
// Populate the class2type map
jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) {
class2type[ "[object " + name + "]" ] = name.toLowerCase();
});
 
browserMatch = jQuery.uaMatch( userAgent );
if ( browserMatch.browser ) {
jQuery.browser[ browserMatch.browser ] = true;
jQuery.browser.version = browserMatch.version;
}
 
// Deprecated, use jQuery.browser.webkit instead
if ( jQuery.browser.webkit ) {
jQuery.browser.safari = true;
}
 
if ( indexOf ) {
jQuery.inArray = function( elem, array ) {
return indexOf.call( array, elem );
};
}
 
// Verify that \s matches non-breaking spaces
// (IE fails on this test)
if ( !rwhite.test( "\xA0" ) ) {
trimLeft = /^[\s\xA0]+/;
trimRight = /[\s\xA0]+$/;
}
 
// All jQuery objects should point back to these
rootjQuery = jQuery(document);
 
// Cleanup functions for the document ready method
if ( document.addEventListener ) {
DOMContentLoaded = function() {
document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false );
jQuery.ready();
};
 
} else if ( document.attachEvent ) {
DOMContentLoaded = function() {
// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
if ( document.readyState === "complete" ) {
document.detachEvent( "onreadystatechange", DOMContentLoaded );
jQuery.ready();
}
};
}
 
// The DOM ready check for Internet Explorer
function doScrollCheck() {
if ( jQuery.isReady ) {
return;
}
 
try {
// If IE is used, use the trick by Diego Perini
// http://javascript.nwbox.com/IEContentLoaded/
document.documentElement.doScroll("left");
} catch(e) {
setTimeout( doScrollCheck, 1 );
return;
}
 
// and execute any waiting functions
jQuery.ready();
}
 
// Expose jQuery to the global object
return (window.jQuery = window.$ = jQuery);
 
})();
 
 
(function() {
 
jQuery.support = {};
 
var root = document.documentElement,
script = document.createElement("script"),
div = document.createElement("div"),
id = "script" + jQuery.now();
 
div.style.display = "none";
div.innerHTML = " <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
 
var all = div.getElementsByTagName("*"),
a = div.getElementsByTagName("a")[0],
select = document.createElement("select"),
opt = select.appendChild( document.createElement("option") );
 
// Can't get basic test support
if ( !all || !all.length || !a ) {
return;
}
 
jQuery.support = {
// IE strips leading whitespace when .innerHTML is used
leadingWhitespace: div.firstChild.nodeType === 3,
 
// Make sure that tbody elements aren't automatically inserted
// IE will insert them into empty tables
tbody: !div.getElementsByTagName("tbody").length,
 
// Make sure that link elements get serialized correctly by innerHTML
// This requires a wrapper element in IE
htmlSerialize: !!div.getElementsByTagName("link").length,
 
// Get the style information from getAttribute
// (IE uses .cssText insted)
style: /red/.test( a.getAttribute("style") ),
 
// Make sure that URLs aren't manipulated
// (IE normalizes it by default)
hrefNormalized: a.getAttribute("href") === "/a",
 
// Make sure that element opacity exists
// (IE uses filter instead)
// Use a regex to work around a WebKit issue. See #5145
opacity: /^0.55$/.test( a.style.opacity ),
 
// Verify style float existence
// (IE uses styleFloat instead of cssFloat)
cssFloat: !!a.style.cssFloat,
 
// Make sure that if no value is specified for a checkbox
// that it defaults to "on".
// (WebKit defaults to "" instead)
checkOn: div.getElementsByTagName("input")[0].value === "on",
 
// Make sure that a selected-by-default option has a working selected property.
// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
optSelected: opt.selected,
 
// Will be defined later
deleteExpando: true,
optDisabled: false,
checkClone: false,
scriptEval: false,
noCloneEvent: true,
boxModel: null,
inlineBlockNeedsLayout: false,
shrinkWrapBlocks: false,
reliableHiddenOffsets: true
};
 
// Make sure that the options inside disabled selects aren't marked as disabled
// (WebKit marks them as diabled)
select.disabled = true;
jQuery.support.optDisabled = !opt.disabled;
 
script.type = "text/javascript";
try {
script.appendChild( document.createTextNode( "window." + id + "=1;" ) );
} catch(e) {}
 
root.insertBefore( script, root.firstChild );
 
// Make sure that the execution of code works by injecting a script
// tag with appendChild/createTextNode
// (IE doesn't support this, fails, and uses .text instead)
if ( window[ id ] ) {
jQuery.support.scriptEval = true;
delete window[ id ];
}
 
// Test to see if it's possible to delete an expando from an element
// Fails in Internet Explorer
try {
delete script.test;
 
} catch(e) {
jQuery.support.deleteExpando = false;
}
 
root.removeChild( script );
 
if ( div.attachEvent && div.fireEvent ) {
div.attachEvent("onclick", function click() {
// Cloning a node shouldn't copy over any
// bound event handlers (IE does this)
jQuery.support.noCloneEvent = false;
div.detachEvent("onclick", click);
});
div.cloneNode(true).fireEvent("onclick");
}
 
div = document.createElement("div");
div.innerHTML = "<input type='radio' name='radiotest' checked='checked'/>";
 
var fragment = document.createDocumentFragment();
fragment.appendChild( div.firstChild );
 
// WebKit doesn't clone checked state correctly in fragments
jQuery.support.checkClone = fragment.cloneNode(true).cloneNode(true).lastChild.checked;
 
// Figure out if the W3C box model works as expected
// document.body must exist before we can do this
jQuery(function() {
var div = document.createElement("div");
div.style.width = div.style.paddingLeft = "1px";
 
document.body.appendChild( div );
jQuery.boxModel = jQuery.support.boxModel = div.offsetWidth === 2;
 
if ( "zoom" in div.style ) {
// Check if natively block-level elements act like inline-block
// elements when setting their display to 'inline' and giving
// them layout
// (IE < 8 does this)
div.style.display = "inline";
div.style.zoom = 1;
jQuery.support.inlineBlockNeedsLayout = div.offsetWidth === 2;
 
// Check if elements with layout shrink-wrap their children
// (IE 6 does this)
div.style.display = "";
div.innerHTML = "<div style='width:4px;'></div>";
jQuery.support.shrinkWrapBlocks = div.offsetWidth !== 2;
}
 
div.innerHTML = "<table><tr><td style='padding:0;display:none'></td><td>t</td></tr></table>";
var tds = div.getElementsByTagName("td");
 
// Check if table cells still have offsetWidth/Height when they are set
// to display:none and there are still other visible table cells in a
// table row; if so, offsetWidth/Height are not reliable for use when
// determining if an element has been hidden directly using
// display:none (it is still safe to use offsets if a parent element is
// hidden; don safety goggles and see bug #4512 for more information).
// (only IE 8 fails this test)
jQuery.support.reliableHiddenOffsets = tds[0].offsetHeight === 0;
 
tds[0].style.display = "";
tds[1].style.display = "none";
 
// Check if empty table cells still have offsetWidth/Height
// (IE < 8 fail this test)
jQuery.support.reliableHiddenOffsets = jQuery.support.reliableHiddenOffsets && tds[0].offsetHeight === 0;
div.innerHTML = "";
 
document.body.removeChild( div ).style.display = "none";
div = tds = null;
});
 
// Technique from Juriy Zaytsev
// http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/
var eventSupported = function( eventName ) {
var el = document.createElement("div");
eventName = "on" + eventName;
 
var isSupported = (eventName in el);
if ( !isSupported ) {
el.setAttribute(eventName, "return;");
isSupported = typeof el[eventName] === "function";
}
el = null;
 
return isSupported;
};
 
jQuery.support.submitBubbles = eventSupported("submit");
jQuery.support.changeBubbles = eventSupported("change");
 
// release memory in IE
root = script = div = all = a = null;
})();
 
 
 
var windowData = {},
rbrace = /^(?:\{.*\}|\[.*\])$/;
 
jQuery.extend({
cache: {},
 
// Please use with caution
uuid: 0,
 
// Unique for each copy of jQuery on the page
expando: "jQuery" + jQuery.now(),
 
// The following elements throw uncatchable exceptions if you
// attempt to add expando properties to them.
noData: {
"embed": true,
// Ban all objects except for Flash (which handle expandos)
"object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
"applet": true
},
 
data: function( elem, name, data ) {
if ( !jQuery.acceptData( elem ) ) {
return;
}
 
elem = elem == window ?
windowData :
elem;
 
var isNode = elem.nodeType,
id = isNode ? elem[ jQuery.expando ] : null,
cache = jQuery.cache, thisCache;
 
if ( isNode && !id && typeof name === "string" && data === undefined ) {
return;
}
 
// Get the data from the object directly
if ( !isNode ) {
cache = elem;
 
// Compute a unique ID for the element
} else if ( !id ) {
elem[ jQuery.expando ] = id = ++jQuery.uuid;
}
 
// Avoid generating a new cache unless none exists and we
// want to manipulate it.
if ( typeof name === "object" ) {
if ( isNode ) {
cache[ id ] = jQuery.extend(cache[ id ], name);
 
} else {
jQuery.extend( cache, name );
}
 
} else if ( isNode && !cache[ id ] ) {
cache[ id ] = {};
}
 
thisCache = isNode ? cache[ id ] : cache;
 
// Prevent overriding the named cache with undefined values
if ( data !== undefined ) {
thisCache[ name ] = data;
}
 
return typeof name === "string" ? thisCache[ name ] : thisCache;
},
 
removeData: function( elem, name ) {
if ( !jQuery.acceptData( elem ) ) {
return;
}
 
elem = elem == window ?
windowData :
elem;
 
var isNode = elem.nodeType,
id = isNode ? elem[ jQuery.expando ] : elem,
cache = jQuery.cache,
thisCache = isNode ? cache[ id ] : id;
 
// If we want to remove a specific section of the element's data
if ( name ) {
if ( thisCache ) {
// Remove the section of cache data
delete thisCache[ name ];
 
// If we've removed all the data, remove the element's cache
if ( isNode && jQuery.isEmptyObject(thisCache) ) {
jQuery.removeData( elem );
}
}
 
// Otherwise, we want to remove all of the element's data
} else {
if ( isNode && jQuery.support.deleteExpando ) {
delete elem[ jQuery.expando ];
 
} else if ( elem.removeAttribute ) {
elem.removeAttribute( jQuery.expando );
 
// Completely remove the data cache
} else if ( isNode ) {
delete cache[ id ];
 
// Remove all fields from the object
} else {
for ( var n in elem ) {
delete elem[ n ];
}
}
}
},
 
// A method for determining if a DOM node can handle the data expando
acceptData: function( elem ) {
if ( elem.nodeName ) {
var match = jQuery.noData[ elem.nodeName.toLowerCase() ];
 
if ( match ) {
return !(match === true || elem.getAttribute("classid") !== match);
}
}
 
return true;
}
});
 
jQuery.fn.extend({
data: function( key, value ) {
var data = null;
 
if ( typeof key === "undefined" ) {
if ( this.length ) {
var attr = this[0].attributes, name;
data = jQuery.data( this[0] );
 
for ( var i = 0, l = attr.length; i < l; i++ ) {
name = attr[i].name;
 
if ( name.indexOf( "data-" ) === 0 ) {
name = name.substr( 5 );
dataAttr( this[0], name, data[ name ] );
}
}
}
 
return data;
 
} else if ( typeof key === "object" ) {
return this.each(function() {
jQuery.data( this, key );
});
}
 
var parts = key.split(".");
parts[1] = parts[1] ? "." + parts[1] : "";
 
if ( value === undefined ) {
data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);
 
// Try to fetch any internally stored data first
if ( data === undefined && this.length ) {
data = jQuery.data( this[0], key );
data = dataAttr( this[0], key, data );
}
 
return data === undefined && parts[1] ?
this.data( parts[0] ) :
data;
 
} else {
return this.each(function() {
var $this = jQuery( this ),
args = [ parts[0], value ];
 
$this.triggerHandler( "setData" + parts[1] + "!", args );
jQuery.data( this, key, value );
$this.triggerHandler( "changeData" + parts[1] + "!", args );
});
}
},
 
removeData: function( key ) {
return this.each(function() {
jQuery.removeData( this, key );
});
}
});
 
function dataAttr( elem, key, data ) {
// If nothing was found internally, try to fetch any
// data from the HTML5 data-* attribute
if ( data === undefined && elem.nodeType === 1 ) {
data = elem.getAttribute( "data-" + key );
 
if ( typeof data === "string" ) {
try {
data = data === "true" ? true :
data === "false" ? false :
data === "null" ? null :
!jQuery.isNaN( data ) ? parseFloat( data ) :
rbrace.test( data ) ? jQuery.parseJSON( data ) :
data;
} catch( e ) {}
 
// Make sure we set the data so it isn't changed later
jQuery.data( elem, key, data );
 
} else {
data = undefined;
}
}
 
return data;
}
 
 
 
 
jQuery.extend({
queue: function( elem, type, data ) {
if ( !elem ) {
return;
}
 
type = (type || "fx") + "queue";
var q = jQuery.data( elem, type );
 
// Speed up dequeue by getting out quickly if this is just a lookup
if ( !data ) {
return q || [];
}
 
if ( !q || jQuery.isArray(data) ) {
q = jQuery.data( elem, type, jQuery.makeArray(data) );
 
} else {
q.push( data );
}
 
return q;
},
 
dequeue: function( elem, type ) {
type = type || "fx";
 
var queue = jQuery.queue( elem, type ),
fn = queue.shift();
 
// If the fx queue is dequeued, always remove the progress sentinel
if ( fn === "inprogress" ) {
fn = queue.shift();
}
 
if ( fn ) {
// Add a progress sentinel to prevent the fx queue from being
// automatically dequeued
if ( type === "fx" ) {
queue.unshift("inprogress");
}
 
fn.call(elem, function() {
jQuery.dequeue(elem, type);
});
}
}
});
 
jQuery.fn.extend({
queue: function( type, data ) {
if ( typeof type !== "string" ) {
data = type;
type = "fx";
}
 
if ( data === undefined ) {
return jQuery.queue( this[0], type );
}
return this.each(function( i ) {
var queue = jQuery.queue( this, type, data );
 
if ( type === "fx" && queue[0] !== "inprogress" ) {
jQuery.dequeue( this, type );
}
});
},
dequeue: function( type ) {
return this.each(function() {
jQuery.dequeue( this, type );
});
},
 
// Based off of the plugin by Clint Helfers, with permission.
// http://blindsignals.com/index.php/2009/07/jquery-delay/
delay: function( time, type ) {
time = jQuery.fx ? jQuery.fx.speeds[time] || time : time;
type = type || "fx";
 
return this.queue( type, function() {
var elem = this;
setTimeout(function() {
jQuery.dequeue( elem, type );
}, time );
});
},
 
clearQueue: function( type ) {
return this.queue( type || "fx", [] );
}
});
 
 
 
 
var rclass = /[\n\t]/g,
rspaces = /\s+/,
rreturn = /\r/g,
rspecialurl = /^(?:href|src|style)$/,
rtype = /^(?:button|input)$/i,
rfocusable = /^(?:button|input|object|select|textarea)$/i,
rclickable = /^a(?:rea)?$/i,
rradiocheck = /^(?:radio|checkbox)$/i;
 
jQuery.props = {
"for": "htmlFor",
"class": "className",
readonly: "readOnly",
maxlength: "maxLength",
cellspacing: "cellSpacing",
rowspan: "rowSpan",
colspan: "colSpan",
tabindex: "tabIndex",
usemap: "useMap",
frameborder: "frameBorder"
};
 
jQuery.fn.extend({
attr: function( name, value ) {
return jQuery.access( this, name, value, true, jQuery.attr );
},
 
removeAttr: function( name, fn ) {
return this.each(function(){
jQuery.attr( this, name, "" );
if ( this.nodeType === 1 ) {
this.removeAttribute( name );
}
});
},
 
addClass: function( value ) {
if ( jQuery.isFunction(value) ) {
return this.each(function(i) {
var self = jQuery(this);
self.addClass( value.call(this, i, self.attr("class")) );
});
}
 
if ( value && typeof value === "string" ) {
var classNames = (value || "").split( rspaces );
 
for ( var i = 0, l = this.length; i < l; i++ ) {
var elem = this[i];
 
if ( elem.nodeType === 1 ) {
if ( !elem.className ) {
elem.className = value;
 
} else {
var className = " " + elem.className + " ",
setClass = elem.className;
 
for ( var c = 0, cl = classNames.length; c < cl; c++ ) {
if ( className.indexOf( " " + classNames[c] + " " ) < 0 ) {
setClass += " " + classNames[c];
}
}
elem.className = jQuery.trim( setClass );
}
}
}
}
 
return this;
},
 
removeClass: function( value ) {
if ( jQuery.isFunction(value) ) {
return this.each(function(i) {
var self = jQuery(this);
self.removeClass( value.call(this, i, self.attr("class")) );
});
}
 
if ( (value && typeof value === "string") || value === undefined ) {
var classNames = (value || "").split( rspaces );
 
for ( var i = 0, l = this.length; i < l; i++ ) {
var elem = this[i];
 
if ( elem.nodeType === 1 && elem.className ) {
if ( value ) {
var className = (" " + elem.className + " ").replace(rclass, " ");
for ( var c = 0, cl = classNames.length; c < cl; c++ ) {
className = className.replace(" " + classNames[c] + " ", " ");
}
elem.className = jQuery.trim( className );
 
} else {
elem.className = "";
}
}
}
}
 
return this;
},
 
toggleClass: function( value, stateVal ) {
var type = typeof value,
isBool = typeof stateVal === "boolean";
 
if ( jQuery.isFunction( value ) ) {
return this.each(function(i) {
var self = jQuery(this);
self.toggleClass( value.call(this, i, self.attr("class"), stateVal), stateVal );
});
}
 
return this.each(function() {
if ( type === "string" ) {
// toggle individual class names
var className,
i = 0,
self = jQuery( this ),
state = stateVal,
classNames = value.split( rspaces );
 
while ( (className = classNames[ i++ ]) ) {
// check each className given, space seperated list
state = isBool ? state : !self.hasClass( className );
self[ state ? "addClass" : "removeClass" ]( className );
}
 
} else if ( type === "undefined" || type === "boolean" ) {
if ( this.className ) {
// store className if set
jQuery.data( this, "__className__", this.className );
}
 
// toggle whole className
this.className = this.className || value === false ? "" : jQuery.data( this, "__className__" ) || "";
}
});
},
 
hasClass: function( selector ) {
var className = " " + selector + " ";
for ( var i = 0, l = this.length; i < l; i++ ) {
if ( (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) {
return true;
}
}
 
return false;
},
 
val: function( value ) {
if ( !arguments.length ) {
var elem = this[0];
 
if ( elem ) {
if ( jQuery.nodeName( elem, "option" ) ) {
// attributes.value is undefined in Blackberry 4.7 but
// uses .value. See #6932
var val = elem.attributes.value;
return !val || val.specified ? elem.value : elem.text;
}
 
// We need to handle select boxes special
if ( jQuery.nodeName( elem, "select" ) ) {
var index = elem.selectedIndex,
values = [],
options = elem.options,
one = elem.type === "select-one";
 
// Nothing was selected
if ( index < 0 ) {
return null;
}
 
// Loop through all the selected options
for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) {
var option = options[ i ];
 
// Don't return options that are disabled or in a disabled optgroup
if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) &&
(!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) {
 
// Get the specific value for the option
value = jQuery(option).val();
 
// We don't need an array for one selects
if ( one ) {
return value;
}
 
// Multi-Selects return an array
values.push( value );
}
}
 
return values;
}
 
// Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
if ( rradiocheck.test( elem.type ) && !jQuery.support.checkOn ) {
return elem.getAttribute("value") === null ? "on" : elem.value;
}
 
// Everything else, we just grab the value
return (elem.value || "").replace(rreturn, "");
 
}
 
return undefined;
}
 
var isFunction = jQuery.isFunction(value);
 
return this.each(function(i) {
var self = jQuery(this), val = value;
 
if ( this.nodeType !== 1 ) {
return;
}
 
if ( isFunction ) {
val = value.call(this, i, self.val());
}
 
// Treat null/undefined as ""; convert numbers to string
if ( val == null ) {
val = "";
} else if ( typeof val === "number" ) {
val += "";
} else if ( jQuery.isArray(val) ) {
val = jQuery.map(val, function (value) {
return value == null ? "" : value + "";
});
}
 
if ( jQuery.isArray(val) && rradiocheck.test( this.type ) ) {
this.checked = jQuery.inArray( self.val(), val ) >= 0;
 
} else if ( jQuery.nodeName( this, "select" ) ) {
var values = jQuery.makeArray(val);
 
jQuery( "option", this ).each(function() {
this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
});
 
if ( !values.length ) {
this.selectedIndex = -1;
}
 
} else {
this.value = val;
}
});
}
});
 
jQuery.extend({
attrFn: {
val: true,
css: true,
html: true,
text: true,
data: true,
width: true,
height: true,
offset: true
},
attr: function( elem, name, value, pass ) {
// don't set attributes on text and comment nodes
if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) {
return undefined;
}
 
if ( pass && name in jQuery.attrFn ) {
return jQuery(elem)[name](value);
}
 
var notxml = elem.nodeType !== 1 || !jQuery.isXMLDoc( elem ),
// Whether we are setting (or getting)
set = value !== undefined;
 
// Try to normalize/fix the name
name = notxml && jQuery.props[ name ] || name;
 
// These attributes require special treatment
var special = rspecialurl.test( name );
 
// Safari mis-reports the default selected property of an option
// Accessing the parent's selectedIndex property fixes it
if ( name === "selected" && !jQuery.support.optSelected ) {
var parent = elem.parentNode;
if ( parent ) {
parent.selectedIndex;
 
// Make sure that it also works with optgroups, see #5701
if ( parent.parentNode ) {
parent.parentNode.selectedIndex;
}
}
}
 
// If applicable, access the attribute via the DOM 0 way
// 'in' checks fail in Blackberry 4.7 #6931
if ( (name in elem || elem[ name ] !== undefined) && notxml && !special ) {
if ( set ) {
// We can't allow the type property to be changed (since it causes problems in IE)
if ( name === "type" && rtype.test( elem.nodeName ) && elem.parentNode ) {
jQuery.error( "type property can't be changed" );
}
 
if ( value === null ) {
if ( elem.nodeType === 1 ) {
elem.removeAttribute( name );
}
 
} else {
elem[ name ] = value;
}
}
 
// browsers index elements by id/name on forms, give priority to attributes.
if ( jQuery.nodeName( elem, "form" ) && elem.getAttributeNode(name) ) {
return elem.getAttributeNode( name ).nodeValue;
}
 
// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
if ( name === "tabIndex" ) {
var attributeNode = elem.getAttributeNode( "tabIndex" );
 
return attributeNode && attributeNode.specified ?
attributeNode.value :
rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
0 :
undefined;
}
 
return elem[ name ];
}
 
if ( !jQuery.support.style && notxml && name === "style" ) {
if ( set ) {
elem.style.cssText = "" + value;
}
 
return elem.style.cssText;
}
 
if ( set ) {
// convert the value to a string (all browsers do this but IE) see #1070
elem.setAttribute( name, "" + value );
}
 
// Ensure that missing attributes return undefined
// Blackberry 4.7 returns "" from getAttribute #6938
if ( !elem.attributes[ name ] && (elem.hasAttribute && !elem.hasAttribute( name )) ) {
return undefined;
}
 
var attr = !jQuery.support.hrefNormalized && notxml && special ?
// Some attributes require a special call on IE
elem.getAttribute( name, 2 ) :
elem.getAttribute( name );
 
// Non-existent attributes return null, we normalize to undefined
return attr === null ? undefined : attr;
}
});
 
 
 
 
var rnamespaces = /\.(.*)$/,
rformElems = /^(?:textarea|input|select)$/i,
rperiod = /\./g,
rspace = / /g,
rescape = /[^\w\s.|`]/g,
fcleanup = function( nm ) {
return nm.replace(rescape, "\\$&");
},
focusCounts = { focusin: 0, focusout: 0 };
 
/*
* A number of helper functions used for managing events.
* Many of the ideas behind this code originated from
* Dean Edwards' addEvent library.
*/
jQuery.event = {
 
// Bind an event to an element
// Original by Dean Edwards
add: function( elem, types, handler, data ) {
if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
return;
}
 
// For whatever reason, IE has trouble passing the window object
// around, causing it to be cloned in the process
if ( jQuery.isWindow( elem ) && ( elem !== window && !elem.frameElement ) ) {
elem = window;
}
 
if ( handler === false ) {
handler = returnFalse;
} else if ( !handler ) {
// Fixes bug #7229. Fix recommended by jdalton
return;
}
 
var handleObjIn, handleObj;
 
if ( handler.handler ) {
handleObjIn = handler;
handler = handleObjIn.handler;
}
 
// Make sure that the function being executed has a unique ID
if ( !handler.guid ) {
handler.guid = jQuery.guid++;
}
 
// Init the element's event structure
var elemData = jQuery.data( elem );
 
// If no elemData is found then we must be trying to bind to one of the
// banned noData elements
if ( !elemData ) {
return;
}
 
// Use a key less likely to result in collisions for plain JS objects.
// Fixes bug #7150.
var eventKey = elem.nodeType ? "events" : "__events__",
events = elemData[ eventKey ],
eventHandle = elemData.handle;
if ( typeof events === "function" ) {
// On plain objects events is a fn that holds the the data
// which prevents this data from being JSON serialized
// the function does not need to be called, it just contains the data
eventHandle = events.handle;
events = events.events;
 
} else if ( !events ) {
if ( !elem.nodeType ) {
// On plain objects, create a fn that acts as the holder
// of the values to avoid JSON serialization of event data
elemData[ eventKey ] = elemData = function(){};
}
 
elemData.events = events = {};
}
 
if ( !eventHandle ) {
elemData.handle = eventHandle = function() {
// Handle the second event of a trigger and when
// an event is called after a page has unloaded
return typeof jQuery !== "undefined" && !jQuery.event.triggered ?
jQuery.event.handle.apply( eventHandle.elem, arguments ) :
undefined;
};
}
 
// Add elem as a property of the handle function
// This is to prevent a memory leak with non-native events in IE.
eventHandle.elem = elem;
 
// Handle multiple events separated by a space
// jQuery(...).bind("mouseover mouseout", fn);
types = types.split(" ");
 
var type, i = 0, namespaces;
 
while ( (type = types[ i++ ]) ) {
handleObj = handleObjIn ?
jQuery.extend({}, handleObjIn) :
{ handler: handler, data: data };
 
// Namespaced event handlers
if ( type.indexOf(".") > -1 ) {
namespaces = type.split(".");
type = namespaces.shift();
handleObj.namespace = namespaces.slice(0).sort().join(".");
 
} else {
namespaces = [];
handleObj.namespace = "";
}
 
handleObj.type = type;
if ( !handleObj.guid ) {
handleObj.guid = handler.guid;
}
 
// Get the current list of functions bound to this event
var handlers = events[ type ],
special = jQuery.event.special[ type ] || {};
 
// Init the event handler queue
if ( !handlers ) {
handlers = events[ type ] = [];
 
// Check for a special event handler
// Only use addEventListener/attachEvent if the special
// events handler returns false
if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
// Bind the global event handler to the element
if ( elem.addEventListener ) {
elem.addEventListener( type, eventHandle, false );
 
} else if ( elem.attachEvent ) {
elem.attachEvent( "on" + type, eventHandle );
}
}
}
if ( special.add ) {
special.add.call( elem, handleObj );
 
if ( !handleObj.handler.guid ) {
handleObj.handler.guid = handler.guid;
}
}
 
// Add the function to the element's handler list
handlers.push( handleObj );
 
// Keep track of which events have been used, for global triggering
jQuery.event.global[ type ] = true;
}
 
// Nullify elem to prevent memory leaks in IE
elem = null;
},
 
global: {},
 
// Detach an event or set of events from an element
remove: function( elem, types, handler, pos ) {
// don't do events on text and comment nodes
if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
return;
}
 
if ( handler === false ) {
handler = returnFalse;
}
 
var ret, type, fn, j, i = 0, all, namespaces, namespace, special, eventType, handleObj, origType,
eventKey = elem.nodeType ? "events" : "__events__",
elemData = jQuery.data( elem ),
events = elemData && elemData[ eventKey ];
 
if ( !elemData || !events ) {
return;
}
if ( typeof events === "function" ) {
elemData = events;
events = events.events;
}
 
// types is actually an event object here
if ( types && types.type ) {
handler = types.handler;
types = types.type;
}
 
// Unbind all events for the element
if ( !types || typeof types === "string" && types.charAt(0) === "." ) {
types = types || "";
 
for ( type in events ) {
jQuery.event.remove( elem, type + types );
}
 
return;
}
 
// Handle multiple events separated by a space
// jQuery(...).unbind("mouseover mouseout", fn);
types = types.split(" ");
 
while ( (type = types[ i++ ]) ) {
origType = type;
handleObj = null;
all = type.indexOf(".") < 0;
namespaces = [];
 
if ( !all ) {
// Namespaced event handlers
namespaces = type.split(".");
type = namespaces.shift();
 
namespace = new RegExp("(^|\\.)" +
jQuery.map( namespaces.slice(0).sort(), fcleanup ).join("\\.(?:.*\\.)?") + "(\\.|$)");
}
 
eventType = events[ type ];
 
if ( !eventType ) {
continue;
}
 
if ( !handler ) {
for ( j = 0; j < eventType.length; j++ ) {
handleObj = eventType[ j ];
 
if ( all || namespace.test( handleObj.namespace ) ) {
jQuery.event.remove( elem, origType, handleObj.handler, j );
eventType.splice( j--, 1 );
}
}
 
continue;
}
 
special = jQuery.event.special[ type ] || {};
 
for ( j = pos || 0; j < eventType.length; j++ ) {
handleObj = eventType[ j ];
 
if ( handler.guid === handleObj.guid ) {
// remove the given handler for the given type
if ( all || namespace.test( handleObj.namespace ) ) {
if ( pos == null ) {
eventType.splice( j--, 1 );
}
 
if ( special.remove ) {
special.remove.call( elem, handleObj );
}
}
 
if ( pos != null ) {
break;
}
}
}
 
// remove generic event handler if no more handlers exist
if ( eventType.length === 0 || pos != null && eventType.length === 1 ) {
if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) {
jQuery.removeEvent( elem, type, elemData.handle );
}
 
ret = null;
delete events[ type ];
}
}
 
// Remove the expando if it's no longer used
if ( jQuery.isEmptyObject( events ) ) {
var handle = elemData.handle;
if ( handle ) {
handle.elem = null;
}
 
delete elemData.events;
delete elemData.handle;
 
if ( typeof elemData === "function" ) {
jQuery.removeData( elem, eventKey );
 
} else if ( jQuery.isEmptyObject( elemData ) ) {
jQuery.removeData( elem );
}
}
},
 
// bubbling is internal
trigger: function( event, data, elem /*, bubbling */ ) {
// Event object or event type
var type = event.type || event,
bubbling = arguments[3];
 
if ( !bubbling ) {
event = typeof event === "object" ?
// jQuery.Event object
event[ jQuery.expando ] ? event :
// Object literal
jQuery.extend( jQuery.Event(type), event ) :
// Just the event type (string)
jQuery.Event(type);
 
if ( type.indexOf("!") >= 0 ) {
event.type = type = type.slice(0, -1);
event.exclusive = true;
}
 
// Handle a global trigger
if ( !elem ) {
// Don't bubble custom events when global (to avoid too much overhead)
event.stopPropagation();
 
// Only trigger if we've ever bound an event for it
if ( jQuery.event.global[ type ] ) {
jQuery.each( jQuery.cache, function() {
if ( this.events && this.events[type] ) {
jQuery.event.trigger( event, data, this.handle.elem );
}
});
}
}
 
// Handle triggering a single element
 
// don't do events on text and comment nodes
if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) {
return undefined;
}
 
// Clean up in case it is reused
event.result = undefined;
event.target = elem;
 
// Clone the incoming data, if any
data = jQuery.makeArray( data );
data.unshift( event );
}
 
event.currentTarget = elem;
 
// Trigger the event, it is assumed that "handle" is a function
var handle = elem.nodeType ?
jQuery.data( elem, "handle" ) :
(jQuery.data( elem, "__events__" ) || {}).handle;
 
if ( handle ) {
handle.apply( elem, data );
}
 
var parent = elem.parentNode || elem.ownerDocument;
 
// Trigger an inline bound script
try {
if ( !(elem && elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()]) ) {
if ( elem[ "on" + type ] && elem[ "on" + type ].apply( elem, data ) === false ) {
event.result = false;
event.preventDefault();
}
}
 
// prevent IE from throwing an error for some elements with some event types, see #3533
} catch (inlineError) {}
 
if ( !event.isPropagationStopped() && parent ) {
jQuery.event.trigger( event, data, parent, true );
 
} else if ( !event.isDefaultPrevented() ) {
var old,
target = event.target,
targetType = type.replace( rnamespaces, "" ),
isClick = jQuery.nodeName( target, "a" ) && targetType === "click",
special = jQuery.event.special[ targetType ] || {};
 
if ( (!special._default || special._default.call( elem, event ) === false) &&
!isClick && !(target && target.nodeName && jQuery.noData[target.nodeName.toLowerCase()]) ) {
 
try {
if ( target[ targetType ] ) {
// Make sure that we don't accidentally re-trigger the onFOO events
old = target[ "on" + targetType ];
 
if ( old ) {
target[ "on" + targetType ] = null;
}
 
jQuery.event.triggered = true;
target[ targetType ]();
}
 
// prevent IE from throwing an error for some elements with some event types, see #3533
} catch (triggerError) {}
 
if ( old ) {
target[ "on" + targetType ] = old;
}
 
jQuery.event.triggered = false;
}
}
},
 
handle: function( event ) {
var all, handlers, namespaces, namespace_re, events,
namespace_sort = [],
args = jQuery.makeArray( arguments );
 
event = args[0] = jQuery.event.fix( event || window.event );
event.currentTarget = this;
 
// Namespaced event handlers
all = event.type.indexOf(".") < 0 && !event.exclusive;
 
if ( !all ) {
namespaces = event.type.split(".");
event.type = namespaces.shift();
namespace_sort = namespaces.slice(0).sort();
namespace_re = new RegExp("(^|\\.)" + namespace_sort.join("\\.(?:.*\\.)?") + "(\\.|$)");
}
 
event.namespace = event.namespace || namespace_sort.join(".");
 
events = jQuery.data(this, this.nodeType ? "events" : "__events__");
 
if ( typeof events === "function" ) {
events = events.events;
}
 
handlers = (events || {})[ event.type ];
 
if ( events && handlers ) {
// Clone the handlers to prevent manipulation
handlers = handlers.slice(0);
 
for ( var j = 0, l = handlers.length; j < l; j++ ) {
var handleObj = handlers[ j ];
 
// Filter the functions by class
if ( all || namespace_re.test( handleObj.namespace ) ) {
// Pass in a reference to the handler function itself
// So that we can later remove it
event.handler = handleObj.handler;
event.data = handleObj.data;
event.handleObj = handleObj;
var ret = handleObj.handler.apply( this, args );
 
if ( ret !== undefined ) {
event.result = ret;
if ( ret === false ) {
event.preventDefault();
event.stopPropagation();
}
}
 
if ( event.isImmediatePropagationStopped() ) {
break;
}
}
}
}
 
return event.result;
},
 
props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
 
fix: function( event ) {
if ( event[ jQuery.expando ] ) {
return event;
}
 
// store a copy of the original event object
// and "clone" to set read-only properties
var originalEvent = event;
event = jQuery.Event( originalEvent );
 
for ( var i = this.props.length, prop; i; ) {
prop = this.props[ --i ];
event[ prop ] = originalEvent[ prop ];
}
 
// Fix target property, if necessary
if ( !event.target ) {
// Fixes #1925 where srcElement might not be defined either
event.target = event.srcElement || document;
}
 
// check if target is a textnode (safari)
if ( event.target.nodeType === 3 ) {
event.target = event.target.parentNode;
}
 
// Add relatedTarget, if necessary
if ( !event.relatedTarget && event.fromElement ) {
event.relatedTarget = event.fromElement === event.target ? event.toElement : event.fromElement;
}
 
// Calculate pageX/Y if missing and clientX/Y available
if ( event.pageX == null && event.clientX != null ) {
var doc = document.documentElement,
body = document.body;
 
event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);
event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0);
}
 
// Add which for key events
if ( event.which == null && (event.charCode != null || event.keyCode != null) ) {
event.which = event.charCode != null ? event.charCode : event.keyCode;
}
 
// Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs)
if ( !event.metaKey && event.ctrlKey ) {
event.metaKey = event.ctrlKey;
}
 
// Add which for click: 1 === left; 2 === middle; 3 === right
// Note: button is not normalized, so don't use it
if ( !event.which && event.button !== undefined ) {
event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));
}
 
return event;
},
 
// Deprecated, use jQuery.guid instead
guid: 1E8,
 
// Deprecated, use jQuery.proxy instead
proxy: jQuery.proxy,
 
special: {
ready: {
// Make sure the ready event is setup
setup: jQuery.bindReady,
teardown: jQuery.noop
},
 
live: {
add: function( handleObj ) {
jQuery.event.add( this,
liveConvert( handleObj.origType, handleObj.selector ),
jQuery.extend({}, handleObj, {handler: liveHandler, guid: handleObj.handler.guid}) );
},
 
remove: function( handleObj ) {
jQuery.event.remove( this, liveConvert( handleObj.origType, handleObj.selector ), handleObj );
}
},
 
beforeunload: {
setup: function( data, namespaces, eventHandle ) {
// We only want to do this special case on windows
if ( jQuery.isWindow( this ) ) {
this.onbeforeunload = eventHandle;
}
},
 
teardown: function( namespaces, eventHandle ) {
if ( this.onbeforeunload === eventHandle ) {
this.onbeforeunload = null;
}
}
}
}
};
 
jQuery.removeEvent = document.removeEventListener ?
function( elem, type, handle ) {
if ( elem.removeEventListener ) {
elem.removeEventListener( type, handle, false );
}
} :
function( elem, type, handle ) {
if ( elem.detachEvent ) {
elem.detachEvent( "on" + type, handle );
}
};
 
jQuery.Event = function( src ) {
// Allow instantiation without the 'new' keyword
if ( !this.preventDefault ) {
return new jQuery.Event( src );
}
 
// Event object
if ( src && src.type ) {
this.originalEvent = src;
this.type = src.type;
// Event type
} else {
this.type = src;
}
 
// timeStamp is buggy for some events on Firefox(#3843)
// So we won't rely on the native value
this.timeStamp = jQuery.now();
 
// Mark it as fixed
this[ jQuery.expando ] = true;
};
 
function returnFalse() {
return false;
}
function returnTrue() {
return true;
}
 
// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
jQuery.Event.prototype = {
preventDefault: function() {
this.isDefaultPrevented = returnTrue;
 
var e = this.originalEvent;
if ( !e ) {
return;
}
// if preventDefault exists run it on the original event
if ( e.preventDefault ) {
e.preventDefault();
 
// otherwise set the returnValue property of the original event to false (IE)
} else {
e.returnValue = false;
}
},
stopPropagation: function() {
this.isPropagationStopped = returnTrue;
 
var e = this.originalEvent;
if ( !e ) {
return;
}
// if stopPropagation exists run it on the original event
if ( e.stopPropagation ) {
e.stopPropagation();
}
// otherwise set the cancelBubble property of the original event to true (IE)
e.cancelBubble = true;
},
stopImmediatePropagation: function() {
this.isImmediatePropagationStopped = returnTrue;
this.stopPropagation();
},
isDefaultPrevented: returnFalse,
isPropagationStopped: returnFalse,
isImmediatePropagationStopped: returnFalse
};
 
// Checks if an event happened on an element within another element
// Used in jQuery.event.special.mouseenter and mouseleave handlers
var withinElement = function( event ) {
// Check if mouse(over|out) are still within the same parent element
var parent = event.relatedTarget;
 
// Firefox sometimes assigns relatedTarget a XUL element
// which we cannot access the parentNode property of
try {
// Traverse up the tree
while ( parent && parent !== this ) {
parent = parent.parentNode;
}
 
if ( parent !== this ) {
// set the correct event type
event.type = event.data;
 
// handle event if we actually just moused on to a non sub-element
jQuery.event.handle.apply( this, arguments );
}
 
// assuming we've left the element since we most likely mousedover a xul element
} catch(e) { }
},
 
// In case of event delegation, we only need to rename the event.type,
// liveHandler will take care of the rest.
delegate = function( event ) {
event.type = event.data;
jQuery.event.handle.apply( this, arguments );
};
 
// Create mouseenter and mouseleave events
jQuery.each({
mouseenter: "mouseover",
mouseleave: "mouseout"
}, function( orig, fix ) {
jQuery.event.special[ orig ] = {
setup: function( data ) {
jQuery.event.add( this, fix, data && data.selector ? delegate : withinElement, orig );
},
teardown: function( data ) {
jQuery.event.remove( this, fix, data && data.selector ? delegate : withinElement );
}
};
});
 
// submit delegation
if ( !jQuery.support.submitBubbles ) {
 
jQuery.event.special.submit = {
setup: function( data, namespaces ) {
if ( this.nodeName.toLowerCase() !== "form" ) {
jQuery.event.add(this, "click.specialSubmit", function( e ) {
var elem = e.target,
type = elem.type;
 
if ( (type === "submit" || type === "image") && jQuery( elem ).closest("form").length ) {
e.liveFired = undefined;
return trigger( "submit", this, arguments );
}
});
jQuery.event.add(this, "keypress.specialSubmit", function( e ) {
var elem = e.target,
type = elem.type;
 
if ( (type === "text" || type === "password") && jQuery( elem ).closest("form").length && e.keyCode === 13 ) {
e.liveFired = undefined;
return trigger( "submit", this, arguments );
}
});
 
} else {
return false;
}
},
 
teardown: function( namespaces ) {
jQuery.event.remove( this, ".specialSubmit" );
}
};
 
}
 
// change delegation, happens here so we have bind.
if ( !jQuery.support.changeBubbles ) {
 
var changeFilters,
 
getVal = function( elem ) {
var type = elem.type, val = elem.value;
 
if ( type === "radio" || type === "checkbox" ) {
val = elem.checked;
 
} else if ( type === "select-multiple" ) {
val = elem.selectedIndex > -1 ?
jQuery.map( elem.options, function( elem ) {
return elem.selected;
}).join("-") :
"";
 
} else if ( elem.nodeName.toLowerCase() === "select" ) {
val = elem.selectedIndex;
}
 
return val;
},
 
testChange = function testChange( e ) {
var elem = e.target, data, val;
 
if ( !rformElems.test( elem.nodeName ) || elem.readOnly ) {
return;
}
 
data = jQuery.data( elem, "_change_data" );
val = getVal(elem);
 
// the current data will be also retrieved by beforeactivate
if ( e.type !== "focusout" || elem.type !== "radio" ) {
jQuery.data( elem, "_change_data", val );
}
if ( data === undefined || val === data ) {
return;
}
 
if ( data != null || val ) {
e.type = "change";
e.liveFired = undefined;
return jQuery.event.trigger( e, arguments[1], elem );
}
};
 
jQuery.event.special.change = {
filters: {
focusout: testChange,
 
beforedeactivate: testChange,
 
click: function( e ) {
var elem = e.target, type = elem.type;
 
if ( type === "radio" || type === "checkbox" || elem.nodeName.toLowerCase() === "select" ) {
return testChange.call( this, e );
}
},
 
// Change has to be called before submit
// Keydown will be called before keypress, which is used in submit-event delegation
keydown: function( e ) {
var elem = e.target, type = elem.type;
 
if ( (e.keyCode === 13 && elem.nodeName.toLowerCase() !== "textarea") ||
(e.keyCode === 32 && (type === "checkbox" || type === "radio")) ||
type === "select-multiple" ) {
return testChange.call( this, e );
}
},
 
// Beforeactivate happens also before the previous element is blurred
// with this event you can't trigger a change event, but you can store
// information
beforeactivate: function( e ) {
var elem = e.target;
jQuery.data( elem, "_change_data", getVal(elem) );
}
},
 
setup: function( data, namespaces ) {
if ( this.type === "file" ) {
return false;
}
 
for ( var type in changeFilters ) {
jQuery.event.add( this, type + ".specialChange", changeFilters[type] );
}
 
return rformElems.test( this.nodeName );
},
 
teardown: function( namespaces ) {
jQuery.event.remove( this, ".specialChange" );
 
return rformElems.test( this.nodeName );
}
};
 
changeFilters = jQuery.event.special.change.filters;
 
// Handle when the input is .focus()'d
changeFilters.focus = changeFilters.beforeactivate;
}
 
function trigger( type, elem, args ) {
args[0].type = type;
return jQuery.event.handle.apply( elem, args );
}
 
// Create "bubbling" focus and blur events
if ( document.addEventListener ) {
jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
jQuery.event.special[ fix ] = {
setup: function() {
if ( focusCounts[fix]++ === 0 ) {
document.addEventListener( orig, handler, true );
}
},
teardown: function() {
if ( --focusCounts[fix] === 0 ) {
document.removeEventListener( orig, handler, true );
}
}
};
 
function handler( e ) {
e = jQuery.event.fix( e );
e.type = fix;
return jQuery.event.trigger( e, null, e.target );
}
});
}
 
jQuery.each(["bind", "one"], function( i, name ) {
jQuery.fn[ name ] = function( type, data, fn ) {
// Handle object literals
if ( typeof type === "object" ) {
for ( var key in type ) {
this[ name ](key, data, type[key], fn);
}
return this;
}
if ( jQuery.isFunction( data ) || data === false ) {
fn = data;
data = undefined;
}
 
var handler = name === "one" ? jQuery.proxy( fn, function( event ) {
jQuery( this ).unbind( event, handler );
return fn.apply( this, arguments );
}) : fn;
 
if ( type === "unload" && name !== "one" ) {
this.one( type, data, fn );
 
} else {
for ( var i = 0, l = this.length; i < l; i++ ) {
jQuery.event.add( this[i], type, handler, data );
}
}
 
return this;
};
});
 
jQuery.fn.extend({
unbind: function( type, fn ) {
// Handle object literals
if ( typeof type === "object" && !type.preventDefault ) {
for ( var key in type ) {
this.unbind(key, type[key]);
}
 
} else {
for ( var i = 0, l = this.length; i < l; i++ ) {
jQuery.event.remove( this[i], type, fn );
}
}
 
return this;
},
delegate: function( selector, types, data, fn ) {
return this.live( types, data, fn, selector );
},
undelegate: function( selector, types, fn ) {
if ( arguments.length === 0 ) {
return this.unbind( "live" );
} else {
return this.die( types, null, fn, selector );
}
},
trigger: function( type, data ) {
return this.each(function() {
jQuery.event.trigger( type, data, this );
});
},
 
triggerHandler: function( type, data ) {
if ( this[0] ) {
var event = jQuery.Event( type );
event.preventDefault();
event.stopPropagation();
jQuery.event.trigger( event, data, this[0] );
return event.result;
}
},
 
toggle: function( fn ) {
// Save reference to arguments for access in closure
var args = arguments,
i = 1;
 
// link all the functions, so any of them can unbind this click handler
while ( i < args.length ) {
jQuery.proxy( fn, args[ i++ ] );
}
 
return this.click( jQuery.proxy( fn, function( event ) {
// Figure out which function to execute
var lastToggle = ( jQuery.data( this, "lastToggle" + fn.guid ) || 0 ) % i;
jQuery.data( this, "lastToggle" + fn.guid, lastToggle + 1 );
 
// Make sure that clicks stop
event.preventDefault();
 
// and execute the function
return args[ lastToggle ].apply( this, arguments ) || false;
}));
},
 
hover: function( fnOver, fnOut ) {
return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
}
});
 
var liveMap = {
focus: "focusin",
blur: "focusout",
mouseenter: "mouseover",
mouseleave: "mouseout"
};
 
jQuery.each(["live", "die"], function( i, name ) {
jQuery.fn[ name ] = function( types, data, fn, origSelector /* Internal Use Only */ ) {
var type, i = 0, match, namespaces, preType,
selector = origSelector || this.selector,
context = origSelector ? this : jQuery( this.context );
if ( typeof types === "object" && !types.preventDefault ) {
for ( var key in types ) {
context[ name ]( key, data, types[key], selector );
}
return this;
}
 
if ( jQuery.isFunction( data ) ) {
fn = data;
data = undefined;
}
 
types = (types || "").split(" ");
 
while ( (type = types[ i++ ]) != null ) {
match = rnamespaces.exec( type );
namespaces = "";
 
if ( match ) {
namespaces = match[0];
type = type.replace( rnamespaces, "" );
}
 
if ( type === "hover" ) {
types.push( "mouseenter" + namespaces, "mouseleave" + namespaces );
continue;
}
 
preType = type;
 
if ( type === "focus" || type === "blur" ) {
types.push( liveMap[ type ] + namespaces );
type = type + namespaces;
 
} else {
type = (liveMap[ type ] || type) + namespaces;
}
 
if ( name === "live" ) {
// bind live handler
for ( var j = 0, l = context.length; j < l; j++ ) {
jQuery.event.add( context[j], "live." + liveConvert( type, selector ),
{ data: data, selector: selector, handler: fn, origType: type, origHandler: fn, preType: preType } );
}
 
} else {
// unbind live handler
context.unbind( "live." + liveConvert( type, selector ), fn );
}
}
return this;
};
});
 
function liveHandler( event ) {
var stop, maxLevel, related, match, handleObj, elem, j, i, l, data, close, namespace, ret,
elems = [],
selectors = [],
events = jQuery.data( this, this.nodeType ? "events" : "__events__" );
 
if ( typeof events === "function" ) {
events = events.events;
}
 
// Make sure we avoid non-left-click bubbling in Firefox (#3861)
if ( event.liveFired === this || !events || !events.live || event.button && event.type === "click" ) {
return;
}
if ( event.namespace ) {
namespace = new RegExp("(^|\\.)" + event.namespace.split(".").join("\\.(?:.*\\.)?") + "(\\.|$)");
}
 
event.liveFired = this;
 
var live = events.live.slice(0);
 
for ( j = 0; j < live.length; j++ ) {
handleObj = live[j];
 
if ( handleObj.origType.replace( rnamespaces, "" ) === event.type ) {
selectors.push( handleObj.selector );
 
} else {
live.splice( j--, 1 );
}
}
 
match = jQuery( event.target ).closest( selectors, event.currentTarget );
 
for ( i = 0, l = match.length; i < l; i++ ) {
close = match[i];
 
for ( j = 0; j < live.length; j++ ) {
handleObj = live[j];
 
if ( close.selector === handleObj.selector && (!namespace || namespace.test( handleObj.namespace )) ) {
elem = close.elem;
related = null;
 
// Those two events require additional checking
if ( handleObj.preType === "mouseenter" || handleObj.preType === "mouseleave" ) {
event.type = handleObj.preType;
related = jQuery( event.relatedTarget ).closest( handleObj.selector )[0];
}
 
if ( !related || related !== elem ) {
elems.push({ elem: elem, handleObj: handleObj, level: close.level });
}
}
}
}
 
for ( i = 0, l = elems.length; i < l; i++ ) {
match = elems[i];
 
if ( maxLevel && match.level > maxLevel ) {
break;
}
 
event.currentTarget = match.elem;
event.data = match.handleObj.data;
event.handleObj = match.handleObj;
 
ret = match.handleObj.origHandler.apply( match.elem, arguments );
 
if ( ret === false || event.isPropagationStopped() ) {
maxLevel = match.level;
 
if ( ret === false ) {
stop = false;
}
if ( event.isImmediatePropagationStopped() ) {
break;
}
}
}
 
return stop;
}
 
function liveConvert( type, selector ) {
return (type && type !== "*" ? type + "." : "") + selector.replace(rperiod, "`").replace(rspace, "&");
}
 
jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
"change select submit keydown keypress keyup error").split(" "), function( i, name ) {
 
// Handle event binding
jQuery.fn[ name ] = function( data, fn ) {
if ( fn == null ) {
fn = data;
data = null;
}
 
return arguments.length > 0 ?
this.bind( name, data, fn ) :
this.trigger( name );
};
 
if ( jQuery.attrFn ) {
jQuery.attrFn[ name ] = true;
}
});
 
// Prevent memory leaks in IE
// Window isn't included so as not to unbind existing unload events
// More info:
// - http://isaacschlueter.com/2006/10/msie-memory-leaks/
if ( window.attachEvent && !window.addEventListener ) {
jQuery(window).bind("unload", function() {
for ( var id in jQuery.cache ) {
if ( jQuery.cache[ id ].handle ) {
// Try/Catch is to handle iframes being unloaded, see #4280
try {
jQuery.event.remove( jQuery.cache[ id ].handle.elem );
} catch(e) {}
}
}
});
}
 
 
/*!
* Sizzle CSS Selector Engine - v1.0
* Copyright 2009, The Dojo Foundation
* Released under the MIT, BSD, and GPL Licenses.
* More information: http://sizzlejs.com/
*/
(function(){
 
var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
done = 0,
toString = Object.prototype.toString,
hasDuplicate = false,
baseHasDuplicate = true;
 
// Here we check if the JavaScript engine is using some sort of
// optimization where it does not always call our comparision
// function. If that is the case, discard the hasDuplicate value.
// Thus far that includes Google Chrome.
[0, 0].sort(function() {
baseHasDuplicate = false;
return 0;
});
 
var Sizzle = function( selector, context, results, seed ) {
results = results || [];
context = context || document;
 
var origContext = context;
 
if ( context.nodeType !== 1 && context.nodeType !== 9 ) {
return [];
}
if ( !selector || typeof selector !== "string" ) {
return results;
}
 
var m, set, checkSet, extra, ret, cur, pop, i,
prune = true,
contextXML = Sizzle.isXML( context ),
parts = [],
soFar = selector;
// Reset the position of the chunker regexp (start from head)
do {
chunker.exec( "" );
m = chunker.exec( soFar );
 
if ( m ) {
soFar = m[3];
parts.push( m[1] );
if ( m[2] ) {
extra = m[3];
break;
}
}
} while ( m );
 
if ( parts.length > 1 && origPOS.exec( selector ) ) {
 
if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {
set = posProcess( parts[0] + parts[1], context );
 
} else {
set = Expr.relative[ parts[0] ] ?
[ context ] :
Sizzle( parts.shift(), context );
 
while ( parts.length ) {
selector = parts.shift();
 
if ( Expr.relative[ selector ] ) {
selector += parts.shift();
}
set = posProcess( selector, set );
}
}
 
} else {
// Take a shortcut and set the context if the root selector is an ID
// (but not if it'll be faster if the inner selector is an ID)
if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&
Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {
 
ret = Sizzle.find( parts.shift(), context, contextXML );
context = ret.expr ?
Sizzle.filter( ret.expr, ret.set )[0] :
ret.set[0];
}
 
if ( context ) {
ret = seed ?
{ expr: parts.pop(), set: makeArray(seed) } :
Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML );
 
set = ret.expr ?
Sizzle.filter( ret.expr, ret.set ) :
ret.set;
 
if ( parts.length > 0 ) {
checkSet = makeArray( set );
 
} else {
prune = false;
}
 
while ( parts.length ) {
cur = parts.pop();
pop = cur;
 
if ( !Expr.relative[ cur ] ) {
cur = "";
} else {
pop = parts.pop();
}
 
if ( pop == null ) {
pop = context;
}
 
Expr.relative[ cur ]( checkSet, pop, contextXML );
}
 
} else {
checkSet = parts = [];
}
}
 
if ( !checkSet ) {
checkSet = set;
}
 
if ( !checkSet ) {
Sizzle.error( cur || selector );
}
 
if ( toString.call(checkSet) === "[object Array]" ) {
if ( !prune ) {
results.push.apply( results, checkSet );
 
} else if ( context && context.nodeType === 1 ) {
for ( i = 0; checkSet[i] != null; i++ ) {
if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) {
results.push( set[i] );
}
}
 
} else {
for ( i = 0; checkSet[i] != null; i++ ) {
if ( checkSet[i] && checkSet[i].nodeType === 1 ) {
results.push( set[i] );
}
}
}
 
} else {
makeArray( checkSet, results );
}
 
if ( extra ) {
Sizzle( extra, origContext, results, seed );
Sizzle.uniqueSort( results );
}
 
return results;
};
 
Sizzle.uniqueSort = function( results ) {
if ( sortOrder ) {
hasDuplicate = baseHasDuplicate;
results.sort( sortOrder );
 
if ( hasDuplicate ) {
for ( var i = 1; i < results.length; i++ ) {
if ( results[i] === results[ i - 1 ] ) {
results.splice( i--, 1 );
}
}
}
}
 
return results;
};
 
Sizzle.matches = function( expr, set ) {
return Sizzle( expr, null, null, set );
};
 
Sizzle.matchesSelector = function( node, expr ) {
return Sizzle( expr, null, null, [node] ).length > 0;
};
 
Sizzle.find = function( expr, context, isXML ) {
var set;
 
if ( !expr ) {
return [];
}
 
for ( var i = 0, l = Expr.order.length; i < l; i++ ) {
var match,
type = Expr.order[i];
if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {
var left = match[1];
match.splice( 1, 1 );
 
if ( left.substr( left.length - 1 ) !== "\\" ) {
match[1] = (match[1] || "").replace(/\\/g, "");
set = Expr.find[ type ]( match, context, isXML );
 
if ( set != null ) {
expr = expr.replace( Expr.match[ type ], "" );
break;
}
}
}
}
 
if ( !set ) {
set = context.getElementsByTagName( "*" );
}
 
return { set: set, expr: expr };
};
 
Sizzle.filter = function( expr, set, inplace, not ) {
var match, anyFound,
old = expr,
result = [],
curLoop = set,
isXMLFilter = set && set[0] && Sizzle.isXML( set[0] );
 
while ( expr && set.length ) {
for ( var type in Expr.filter ) {
if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {
var found, item,
filter = Expr.filter[ type ],
left = match[1];
 
anyFound = false;
 
match.splice(1,1);
 
if ( left.substr( left.length - 1 ) === "\\" ) {
continue;
}
 
if ( curLoop === result ) {
result = [];
}
 
if ( Expr.preFilter[ type ] ) {
match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );
 
if ( !match ) {
anyFound = found = true;
 
} else if ( match === true ) {
continue;
}
}
 
if ( match ) {
for ( var i = 0; (item = curLoop[i]) != null; i++ ) {
if ( item ) {
found = filter( item, match, i, curLoop );
var pass = not ^ !!found;
 
if ( inplace && found != null ) {
if ( pass ) {
anyFound = true;
 
} else {
curLoop[i] = false;
}
 
} else if ( pass ) {
result.push( item );
anyFound = true;
}
}
}
}
 
if ( found !== undefined ) {
if ( !inplace ) {
curLoop = result;
}
 
expr = expr.replace( Expr.match[ type ], "" );
 
if ( !anyFound ) {
return [];
}
 
break;
}
}
}
 
// Improper expression
if ( expr === old ) {
if ( anyFound == null ) {
Sizzle.error( expr );
 
} else {
break;
}
}
 
old = expr;
}
 
return curLoop;
};
 
Sizzle.error = function( msg ) {
throw "Syntax error, unrecognized expression: " + msg;
};
 
var Expr = Sizzle.selectors = {
order: [ "ID", "NAME", "TAG" ],
 
match: {
ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,
ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,
TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,
CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+\-]*)\))?/,
POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,
PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/
},
 
leftMatch: {},
 
attrMap: {
"class": "className",
"for": "htmlFor"
},
 
attrHandle: {
href: function( elem ) {
return elem.getAttribute( "href" );
}
},
 
relative: {
"+": function(checkSet, part){
var isPartStr = typeof part === "string",
isTag = isPartStr && !/\W/.test( part ),
isPartStrNotTag = isPartStr && !isTag;
 
if ( isTag ) {
part = part.toLowerCase();
}
 
for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {
if ( (elem = checkSet[i]) ) {
while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}
 
checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ?
elem || false :
elem === part;
}
}
 
if ( isPartStrNotTag ) {
Sizzle.filter( part, checkSet, true );
}
},
 
">": function( checkSet, part ) {
var elem,
isPartStr = typeof part === "string",
i = 0,
l = checkSet.length;
 
if ( isPartStr && !/\W/.test( part ) ) {
part = part.toLowerCase();
 
for ( ; i < l; i++ ) {
elem = checkSet[i];
 
if ( elem ) {
var parent = elem.parentNode;
checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false;
}
}
 
} else {
for ( ; i < l; i++ ) {
elem = checkSet[i];
 
if ( elem ) {
checkSet[i] = isPartStr ?
elem.parentNode :
elem.parentNode === part;
}
}
 
if ( isPartStr ) {
Sizzle.filter( part, checkSet, true );
}
}
},
 
"": function(checkSet, part, isXML){
var nodeCheck,
doneName = done++,
checkFn = dirCheck;
 
if ( typeof part === "string" && !/\W/.test(part) ) {
part = part.toLowerCase();
nodeCheck = part;
checkFn = dirNodeCheck;
}
 
checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML );
},
 
"~": function( checkSet, part, isXML ) {
var nodeCheck,
doneName = done++,
checkFn = dirCheck;
 
if ( typeof part === "string" && !/\W/.test( part ) ) {
part = part.toLowerCase();
nodeCheck = part;
checkFn = dirNodeCheck;
}
 
checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML );
}
},
 
find: {
ID: function( match, context, isXML ) {
if ( typeof context.getElementById !== "undefined" && !isXML ) {
var m = context.getElementById(match[1]);
// Check parentNode to catch when Blackberry 4.6 returns
// nodes that are no longer in the document #6963
return m && m.parentNode ? [m] : [];
}
},
 
NAME: function( match, context ) {
if ( typeof context.getElementsByName !== "undefined" ) {
var ret = [],
results = context.getElementsByName( match[1] );
 
for ( var i = 0, l = results.length; i < l; i++ ) {
if ( results[i].getAttribute("name") === match[1] ) {
ret.push( results[i] );
}
}
 
return ret.length === 0 ? null : ret;
}
},
 
TAG: function( match, context ) {
return context.getElementsByTagName( match[1] );
}
},
preFilter: {
CLASS: function( match, curLoop, inplace, result, not, isXML ) {
match = " " + match[1].replace(/\\/g, "") + " ";
 
if ( isXML ) {
return match;
}
 
for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
if ( elem ) {
if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n]/g, " ").indexOf(match) >= 0) ) {
if ( !inplace ) {
result.push( elem );
}
 
} else if ( inplace ) {
curLoop[i] = false;
}
}
}
 
return false;
},
 
ID: function( match ) {
return match[1].replace(/\\/g, "");
},
 
TAG: function( match, curLoop ) {
return match[1].toLowerCase();
},
 
CHILD: function( match ) {
if ( match[1] === "nth" ) {
// parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
var test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec(
match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" ||
!/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);
 
// calculate the numbers (first)n+(last) including if they are negative
match[2] = (test[1] + (test[2] || 1)) - 0;
match[3] = test[3] - 0;
}
 
// TODO: Move to normal caching system
match[0] = done++;
 
return match;
},
 
ATTR: function( match, curLoop, inplace, result, not, isXML ) {
var name = match[1].replace(/\\/g, "");
if ( !isXML && Expr.attrMap[name] ) {
match[1] = Expr.attrMap[name];
}
 
if ( match[2] === "~=" ) {
match[4] = " " + match[4] + " ";
}
 
return match;
},
 
PSEUDO: function( match, curLoop, inplace, result, not ) {
if ( match[1] === "not" ) {
// If we're dealing with a complex expression, or a simple one
if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) {
match[3] = Sizzle(match[3], null, null, curLoop);
 
} else {
var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);
 
if ( !inplace ) {
result.push.apply( result, ret );
}
 
return false;
}
 
} else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {
return true;
}
return match;
},
 
POS: function( match ) {
match.unshift( true );
 
return match;
}
},
filters: {
enabled: function( elem ) {
return elem.disabled === false && elem.type !== "hidden";
},
 
disabled: function( elem ) {
return elem.disabled === true;
},
 
checked: function( elem ) {
return elem.checked === true;
},
selected: function( elem ) {
// Accessing this property makes selected-by-default
// options in Safari work properly
elem.parentNode.selectedIndex;
return elem.selected === true;
},
 
parent: function( elem ) {
return !!elem.firstChild;
},
 
empty: function( elem ) {
return !elem.firstChild;
},
 
has: function( elem, i, match ) {
return !!Sizzle( match[3], elem ).length;
},
 
header: function( elem ) {
return (/h\d/i).test( elem.nodeName );
},
 
text: function( elem ) {
return "text" === elem.type;
},
radio: function( elem ) {
return "radio" === elem.type;
},
 
checkbox: function( elem ) {
return "checkbox" === elem.type;
},
 
file: function( elem ) {
return "file" === elem.type;
},
password: function( elem ) {
return "password" === elem.type;
},
 
submit: function( elem ) {
return "submit" === elem.type;
},
 
image: function( elem ) {
return "image" === elem.type;
},
 
reset: function( elem ) {
return "reset" === elem.type;
},
 
button: function( elem ) {
return "button" === elem.type || elem.nodeName.toLowerCase() === "button";
},
 
input: function( elem ) {
return (/input|select|textarea|button/i).test( elem.nodeName );
}
},
setFilters: {
first: function( elem, i ) {
return i === 0;
},
 
last: function( elem, i, match, array ) {
return i === array.length - 1;
},
 
even: function( elem, i ) {
return i % 2 === 0;
},
 
odd: function( elem, i ) {
return i % 2 === 1;
},
 
lt: function( elem, i, match ) {
return i < match[3] - 0;
},
 
gt: function( elem, i, match ) {
return i > match[3] - 0;
},
 
nth: function( elem, i, match ) {
return match[3] - 0 === i;
},
 
eq: function( elem, i, match ) {
return match[3] - 0 === i;
}
},
filter: {
PSEUDO: function( elem, match, i, array ) {
var name = match[1],
filter = Expr.filters[ name ];
 
if ( filter ) {
return filter( elem, i, match, array );
 
} else if ( name === "contains" ) {
return (elem.textContent || elem.innerText || Sizzle.getText([ elem ]) || "").indexOf(match[3]) >= 0;
 
} else if ( name === "not" ) {
var not = match[3];
 
for ( var j = 0, l = not.length; j < l; j++ ) {
if ( not[j] === elem ) {
return false;
}
}
 
return true;
 
} else {
Sizzle.error( "Syntax error, unrecognized expression: " + name );
}
},
 
CHILD: function( elem, match ) {
var type = match[1],
node = elem;
 
switch ( type ) {
case "only":
case "first":
while ( (node = node.previousSibling) ) {
if ( node.nodeType === 1 ) {
return false;
}
}
 
if ( type === "first" ) {
return true;
}
 
node = elem;
 
case "last":
while ( (node = node.nextSibling) ) {
if ( node.nodeType === 1 ) {
return false;
}
}
 
return true;
 
case "nth":
var first = match[2],
last = match[3];
 
if ( first === 1 && last === 0 ) {
return true;
}
var doneName = match[0],
parent = elem.parentNode;
if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) {
var count = 0;
for ( node = parent.firstChild; node; node = node.nextSibling ) {
if ( node.nodeType === 1 ) {
node.nodeIndex = ++count;
}
}
 
parent.sizcache = doneName;
}
var diff = elem.nodeIndex - last;
 
if ( first === 0 ) {
return diff === 0;
 
} else {
return ( diff % first === 0 && diff / first >= 0 );
}
}
},
 
ID: function( elem, match ) {
return elem.nodeType === 1 && elem.getAttribute("id") === match;
},
 
TAG: function( elem, match ) {
return (match === "*" && elem.nodeType === 1) || elem.nodeName.toLowerCase() === match;
},
CLASS: function( elem, match ) {
return (" " + (elem.className || elem.getAttribute("class")) + " ")
.indexOf( match ) > -1;
},
 
ATTR: function( elem, match ) {
var name = match[1],
result = Expr.attrHandle[ name ] ?
Expr.attrHandle[ name ]( elem ) :
elem[ name ] != null ?
elem[ name ] :
elem.getAttribute( name ),
value = result + "",
type = match[2],
check = match[4];
 
return result == null ?
type === "!=" :
type === "=" ?
value === check :
type === "*=" ?
value.indexOf(check) >= 0 :
type === "~=" ?
(" " + value + " ").indexOf(check) >= 0 :
!check ?
value && result !== false :
type === "!=" ?
value !== check :
type === "^=" ?
value.indexOf(check) === 0 :
type === "$=" ?
value.substr(value.length - check.length) === check :
type === "|=" ?
value === check || value.substr(0, check.length + 1) === check + "-" :
false;
},
 
POS: function( elem, match, i, array ) {
var name = match[2],
filter = Expr.setFilters[ name ];
 
if ( filter ) {
return filter( elem, i, match, array );
}
}
}
};
 
var origPOS = Expr.match.POS,
fescape = function(all, num){
return "\\" + (num - 0 + 1);
};
 
for ( var type in Expr.match ) {
Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) );
Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) );
}
 
var makeArray = function( array, results ) {
array = Array.prototype.slice.call( array, 0 );
 
if ( results ) {
results.push.apply( results, array );
return results;
}
return array;
};
 
// Perform a simple check to determine if the browser is capable of
// converting a NodeList to an array using builtin methods.
// Also verifies that the returned array holds DOM nodes
// (which is not the case in the Blackberry browser)
try {
Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType;
 
// Provide a fallback method if it does not work
} catch( e ) {
makeArray = function( array, results ) {
var i = 0,
ret = results || [];
 
if ( toString.call(array) === "[object Array]" ) {
Array.prototype.push.apply( ret, array );
 
} else {
if ( typeof array.length === "number" ) {
for ( var l = array.length; i < l; i++ ) {
ret.push( array[i] );
}
 
} else {
for ( ; array[i]; i++ ) {
ret.push( array[i] );
}
}
}
 
return ret;
};
}
 
var sortOrder, siblingCheck;
 
if ( document.documentElement.compareDocumentPosition ) {
sortOrder = function( a, b ) {
if ( a === b ) {
hasDuplicate = true;
return 0;
}
 
if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {
return a.compareDocumentPosition ? -1 : 1;
}
 
return a.compareDocumentPosition(b) & 4 ? -1 : 1;
};
 
} else {
sortOrder = function( a, b ) {
var al, bl,
ap = [],
bp = [],
aup = a.parentNode,
bup = b.parentNode,
cur = aup;
 
// The nodes are identical, we can exit early
if ( a === b ) {
hasDuplicate = true;
return 0;
 
// If the nodes are siblings (or identical) we can do a quick check
} else if ( aup === bup ) {
return siblingCheck( a, b );
 
// If no parents were found then the nodes are disconnected
} else if ( !aup ) {
return -1;
 
} else if ( !bup ) {
return 1;
}
 
// Otherwise they're somewhere else in the tree so we need
// to build up a full list of the parentNodes for comparison
while ( cur ) {
ap.unshift( cur );
cur = cur.parentNode;
}
 
cur = bup;
 
while ( cur ) {
bp.unshift( cur );
cur = cur.parentNode;
}
 
al = ap.length;
bl = bp.length;
 
// Start walking down the tree looking for a discrepancy
for ( var i = 0; i < al && i < bl; i++ ) {
if ( ap[i] !== bp[i] ) {
return siblingCheck( ap[i], bp[i] );
}
}
 
// We ended someplace up the tree so do a sibling check
return i === al ?
siblingCheck( a, bp[i], -1 ) :
siblingCheck( ap[i], b, 1 );
};
 
siblingCheck = function( a, b, ret ) {
if ( a === b ) {
return ret;
}
 
var cur = a.nextSibling;
 
while ( cur ) {
if ( cur === b ) {
return -1;
}
 
cur = cur.nextSibling;
}
 
return 1;
};
}
 
// Utility function for retreiving the text value of an array of DOM nodes
Sizzle.getText = function( elems ) {
var ret = "", elem;
 
for ( var i = 0; elems[i]; i++ ) {
elem = elems[i];
 
// Get the text from text nodes and CDATA nodes
if ( elem.nodeType === 3 || elem.nodeType === 4 ) {
ret += elem.nodeValue;
 
// Traverse everything else, except comment nodes
} else if ( elem.nodeType !== 8 ) {
ret += Sizzle.getText( elem.childNodes );
}
}
 
return ret;
};
 
// Check to see if the browser returns elements by name when
// querying by getElementById (and provide a workaround)
(function(){
// We're going to inject a fake input element with a specified name
var form = document.createElement("div"),
id = "script" + (new Date()).getTime(),
root = document.documentElement;
 
form.innerHTML = "<a name='" + id + "'/>";
 
// Inject it into the root element, check its status, and remove it quickly
root.insertBefore( form, root.firstChild );
 
// The workaround has to do additional checks after a getElementById
// Which slows things down for other browsers (hence the branching)
if ( document.getElementById( id ) ) {
Expr.find.ID = function( match, context, isXML ) {
if ( typeof context.getElementById !== "undefined" && !isXML ) {
var m = context.getElementById(match[1]);
 
return m ?
m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ?
[m] :
undefined :
[];
}
};
 
Expr.filter.ID = function( elem, match ) {
var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
 
return elem.nodeType === 1 && node && node.nodeValue === match;
};
}
 
root.removeChild( form );
 
// release memory in IE
root = form = null;
})();
 
(function(){
// Check to see if the browser returns only elements
// when doing getElementsByTagName("*")
 
// Create a fake element
var div = document.createElement("div");
div.appendChild( document.createComment("") );
 
// Make sure no comments are found
if ( div.getElementsByTagName("*").length > 0 ) {
Expr.find.TAG = function( match, context ) {
var results = context.getElementsByTagName( match[1] );
 
// Filter out possible comments
if ( match[1] === "*" ) {
var tmp = [];
 
for ( var i = 0; results[i]; i++ ) {
if ( results[i].nodeType === 1 ) {
tmp.push( results[i] );
}
}
 
results = tmp;
}
 
return results;
};
}
 
// Check to see if an attribute returns normalized href attributes
div.innerHTML = "<a href='#'></a>";
 
if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&
div.firstChild.getAttribute("href") !== "#" ) {
 
Expr.attrHandle.href = function( elem ) {
return elem.getAttribute( "href", 2 );
};
}
 
// release memory in IE
div = null;
})();
 
if ( document.querySelectorAll ) {
(function(){
var oldSizzle = Sizzle,
div = document.createElement("div"),
id = "__sizzle__";
 
div.innerHTML = "<p class='TEST'></p>";
 
// Safari can't handle uppercase or unicode characters when
// in quirks mode.
if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
return;
}
Sizzle = function( query, context, extra, seed ) {
context = context || document;
 
// Make sure that attribute selectors are quoted
query = query.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']");
 
// Only use querySelectorAll on non-XML documents
// (ID selectors don't work in non-HTML documents)
if ( !seed && !Sizzle.isXML(context) ) {
if ( context.nodeType === 9 ) {
try {
return makeArray( context.querySelectorAll(query), extra );
} catch(qsaError) {}
 
// qSA works strangely on Element-rooted queries
// We can work around this by specifying an extra ID on the root
// and working up from there (Thanks to Andrew Dupont for the technique)
// IE 8 doesn't work on object elements
} else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
var old = context.getAttribute( "id" ),
nid = old || id;
 
if ( !old ) {
context.setAttribute( "id", nid );
}
 
try {
return makeArray( context.querySelectorAll( "#" + nid + " " + query ), extra );
 
} catch(pseudoError) {
} finally {
if ( !old ) {
context.removeAttribute( "id" );
}
}
}
}
return oldSizzle(query, context, extra, seed);
};
 
for ( var prop in oldSizzle ) {
Sizzle[ prop ] = oldSizzle[ prop ];
}
 
// release memory in IE
div = null;
})();
}
 
(function(){
var html = document.documentElement,
matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector,
pseudoWorks = false;
 
try {
// This should fail with an exception
// Gecko does not error, returns false instead
matches.call( document.documentElement, "[test!='']:sizzle" );
} catch( pseudoError ) {
pseudoWorks = true;
}
 
if ( matches ) {
Sizzle.matchesSelector = function( node, expr ) {
// Make sure that attribute selectors are quoted
expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']");
 
if ( !Sizzle.isXML( node ) ) {
try {
if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) {
return matches.call( node, expr );
}
} catch(e) {}
}
 
return Sizzle(expr, null, null, [node]).length > 0;
};
}
})();
 
(function(){
var div = document.createElement("div");
 
div.innerHTML = "<div class='test e'></div><div class='test'></div>";
 
// Opera can't find a second classname (in 9.6)
// Also, make sure that getElementsByClassName actually exists
if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) {
return;
}
 
// Safari caches class attributes, doesn't catch changes (in 3.2)
div.lastChild.className = "e";
 
if ( div.getElementsByClassName("e").length === 1 ) {
return;
}
Expr.order.splice(1, 0, "CLASS");
Expr.find.CLASS = function( match, context, isXML ) {
if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {
return context.getElementsByClassName(match[1]);
}
};
 
// release memory in IE
div = null;
})();
 
function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
for ( var i = 0, l = checkSet.length; i < l; i++ ) {
var elem = checkSet[i];
 
if ( elem ) {
var match = false;
 
elem = elem[dir];
 
while ( elem ) {
if ( elem.sizcache === doneName ) {
match = checkSet[elem.sizset];
break;
}
 
if ( elem.nodeType === 1 && !isXML ){
elem.sizcache = doneName;
elem.sizset = i;
}
 
if ( elem.nodeName.toLowerCase() === cur ) {
match = elem;
break;
}
 
elem = elem[dir];
}
 
checkSet[i] = match;
}
}
}
 
function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
for ( var i = 0, l = checkSet.length; i < l; i++ ) {
var elem = checkSet[i];
 
if ( elem ) {
var match = false;
elem = elem[dir];
 
while ( elem ) {
if ( elem.sizcache === doneName ) {
match = checkSet[elem.sizset];
break;
}
 
if ( elem.nodeType === 1 ) {
if ( !isXML ) {
elem.sizcache = doneName;
elem.sizset = i;
}
 
if ( typeof cur !== "string" ) {
if ( elem === cur ) {
match = true;
break;
}
 
} else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {
match = elem;
break;
}
}
 
elem = elem[dir];
}
 
checkSet[i] = match;
}
}
}
 
if ( document.documentElement.contains ) {
Sizzle.contains = function( a, b ) {
return a !== b && (a.contains ? a.contains(b) : true);
};
 
} else if ( document.documentElement.compareDocumentPosition ) {
Sizzle.contains = function( a, b ) {
return !!(a.compareDocumentPosition(b) & 16);
};
 
} else {
Sizzle.contains = function() {
return false;
};
}
 
Sizzle.isXML = function( elem ) {
// documentElement is verified for cases where it doesn't yet exist
// (such as loading iframes in IE - #4833)
var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;
 
return documentElement ? documentElement.nodeName !== "HTML" : false;
};
 
var posProcess = function( selector, context ) {
var match,
tmpSet = [],
later = "",
root = context.nodeType ? [context] : context;
 
// Position selectors must be done after the filter
// And so must :not(positional) so we move all PSEUDOs to the end
while ( (match = Expr.match.PSEUDO.exec( selector )) ) {
later += match[0];
selector = selector.replace( Expr.match.PSEUDO, "" );
}
 
selector = Expr.relative[selector] ? selector + "*" : selector;
 
for ( var i = 0, l = root.length; i < l; i++ ) {
Sizzle( selector, root[i], tmpSet );
}
 
return Sizzle.filter( later, tmpSet );
};
 
// EXPOSE
jQuery.find = Sizzle;
jQuery.expr = Sizzle.selectors;
jQuery.expr[":"] = jQuery.expr.filters;
jQuery.unique = Sizzle.uniqueSort;
jQuery.text = Sizzle.getText;
jQuery.isXMLDoc = Sizzle.isXML;
jQuery.contains = Sizzle.contains;
 
 
})();
 
 
var runtil = /Until$/,
rparentsprev = /^(?:parents|prevUntil|prevAll)/,
// Note: This RegExp should be improved, or likely pulled from Sizzle
rmultiselector = /,/,
isSimple = /^.[^:#\[\.,]*$/,
slice = Array.prototype.slice,
POS = jQuery.expr.match.POS;
 
jQuery.fn.extend({
find: function( selector ) {
var ret = this.pushStack( "", "find", selector ),
length = 0;
 
for ( var i = 0, l = this.length; i < l; i++ ) {
length = ret.length;
jQuery.find( selector, this[i], ret );
 
if ( i > 0 ) {
// Make sure that the results are unique
for ( var n = length; n < ret.length; n++ ) {
for ( var r = 0; r < length; r++ ) {
if ( ret[r] === ret[n] ) {
ret.splice(n--, 1);
break;
}
}
}
}
}
 
return ret;
},
 
has: function( target ) {
var targets = jQuery( target );
return this.filter(function() {
for ( var i = 0, l = targets.length; i < l; i++ ) {
if ( jQuery.contains( this, targets[i] ) ) {
return true;
}
}
});
},
 
not: function( selector ) {
return this.pushStack( winnow(this, selector, false), "not", selector);
},
 
filter: function( selector ) {
return this.pushStack( winnow(this, selector, true), "filter", selector );
},
is: function( selector ) {
return !!selector && jQuery.filter( selector, this ).length > 0;
},
 
closest: function( selectors, context ) {
var ret = [], i, l, cur = this[0];
 
if ( jQuery.isArray( selectors ) ) {
var match, selector,
matches = {},
level = 1;
 
if ( cur && selectors.length ) {
for ( i = 0, l = selectors.length; i < l; i++ ) {
selector = selectors[i];
 
if ( !matches[selector] ) {
matches[selector] = jQuery.expr.match.POS.test( selector ) ?
jQuery( selector, context || this.context ) :
selector;
}
}
 
while ( cur && cur.ownerDocument && cur !== context ) {
for ( selector in matches ) {
match = matches[selector];
 
if ( match.jquery ? match.index(cur) > -1 : jQuery(cur).is(match) ) {
ret.push({ selector: selector, elem: cur, level: level });
}
}
 
cur = cur.parentNode;
level++;
}
}
 
return ret;
}
 
var pos = POS.test( selectors ) ?
jQuery( selectors, context || this.context ) : null;
 
for ( i = 0, l = this.length; i < l; i++ ) {
cur = this[i];
 
while ( cur ) {
if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {
ret.push( cur );
break;
 
} else {
cur = cur.parentNode;
if ( !cur || !cur.ownerDocument || cur === context ) {
break;
}
}
}
}
 
ret = ret.length > 1 ? jQuery.unique(ret) : ret;
return this.pushStack( ret, "closest", selectors );
},
// Determine the position of an element within
// the matched set of elements
index: function( elem ) {
if ( !elem || typeof elem === "string" ) {
return jQuery.inArray( this[0],
// If it receives a string, the selector is used
// If it receives nothing, the siblings are used
elem ? jQuery( elem ) : this.parent().children() );
}
// Locate the position of the desired element
return jQuery.inArray(
// If it receives a jQuery object, the first element is used
elem.jquery ? elem[0] : elem, this );
},
 
add: function( selector, context ) {
var set = typeof selector === "string" ?
jQuery( selector, context || this.context ) :
jQuery.makeArray( selector ),
all = jQuery.merge( this.get(), set );
 
return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ?
all :
jQuery.unique( all ) );
},
 
andSelf: function() {
return this.add( this.prevObject );
}
});
 
// A painfully simple check to see if an element is disconnected
// from a document (should be improved, where feasible).
function isDisconnected( node ) {
return !node || !node.parentNode || node.parentNode.nodeType === 11;
}
 
jQuery.each({
parent: function( elem ) {
var parent = elem.parentNode;
return parent && parent.nodeType !== 11 ? parent : null;
},
parents: function( elem ) {
return jQuery.dir( elem, "parentNode" );
},
parentsUntil: function( elem, i, until ) {
return jQuery.dir( elem, "parentNode", until );
},
next: function( elem ) {
return jQuery.nth( elem, 2, "nextSibling" );
},
prev: function( elem ) {
return jQuery.nth( elem, 2, "previousSibling" );
},
nextAll: function( elem ) {
return jQuery.dir( elem, "nextSibling" );
},
prevAll: function( elem ) {
return jQuery.dir( elem, "previousSibling" );
},
nextUntil: function( elem, i, until ) {
return jQuery.dir( elem, "nextSibling", until );
},
prevUntil: function( elem, i, until ) {
return jQuery.dir( elem, "previousSibling", until );
},
siblings: function( elem ) {
return jQuery.sibling( elem.parentNode.firstChild, elem );
},
children: function( elem ) {
return jQuery.sibling( elem.firstChild );
},
contents: function( elem ) {
return jQuery.nodeName( elem, "iframe" ) ?
elem.contentDocument || elem.contentWindow.document :
jQuery.makeArray( elem.childNodes );
}
}, function( name, fn ) {
jQuery.fn[ name ] = function( until, selector ) {
var ret = jQuery.map( this, fn, until );
if ( !runtil.test( name ) ) {
selector = until;
}
 
if ( selector && typeof selector === "string" ) {
ret = jQuery.filter( selector, ret );
}
 
ret = this.length > 1 ? jQuery.unique( ret ) : ret;
 
if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) {
ret = ret.reverse();
}
 
return this.pushStack( ret, name, slice.call(arguments).join(",") );
};
});
 
jQuery.extend({
filter: function( expr, elems, not ) {
if ( not ) {
expr = ":not(" + expr + ")";
}
 
return elems.length === 1 ?
jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :
jQuery.find.matches(expr, elems);
},
dir: function( elem, dir, until ) {
var matched = [],
cur = elem[ dir ];
 
while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
if ( cur.nodeType === 1 ) {
matched.push( cur );
}
cur = cur[dir];
}
return matched;
},
 
nth: function( cur, result, dir, elem ) {
result = result || 1;
var num = 0;
 
for ( ; cur; cur = cur[dir] ) {
if ( cur.nodeType === 1 && ++num === result ) {
break;
}
}
 
return cur;
},
 
sibling: function( n, elem ) {
var r = [];
 
for ( ; n; n = n.nextSibling ) {
if ( n.nodeType === 1 && n !== elem ) {
r.push( n );
}
}
 
return r;
}
});
 
// Implement the identical functionality for filter and not
function winnow( elements, qualifier, keep ) {
if ( jQuery.isFunction( qualifier ) ) {
return jQuery.grep(elements, function( elem, i ) {
var retVal = !!qualifier.call( elem, i, elem );
return retVal === keep;
});
 
} else if ( qualifier.nodeType ) {
return jQuery.grep(elements, function( elem, i ) {
return (elem === qualifier) === keep;
});
 
} else if ( typeof qualifier === "string" ) {
var filtered = jQuery.grep(elements, function( elem ) {
return elem.nodeType === 1;
});
 
if ( isSimple.test( qualifier ) ) {
return jQuery.filter(qualifier, filtered, !keep);
} else {
qualifier = jQuery.filter( qualifier, filtered );
}
}
 
return jQuery.grep(elements, function( elem, i ) {
return (jQuery.inArray( elem, qualifier ) >= 0) === keep;
});
}
 
 
 
 
var rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g,
rleadingWhitespace = /^\s+/,
rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,
rtagName = /<([\w:]+)/,
rtbody = /<tbody/i,
rhtml = /<|&#?\w+;/,
rnocache = /<(?:script|object|embed|option|style)/i,
// checked="checked" or checked (html5)
rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
raction = /\=([^="'>\s]+\/)>/g,
wrapMap = {
option: [ 1, "<select multiple='multiple'>", "</select>" ],
legend: [ 1, "<fieldset>", "</fieldset>" ],
thead: [ 1, "<table>", "</table>" ],
tr: [ 2, "<table><tbody>", "</tbody></table>" ],
td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
area: [ 1, "<map>", "</map>" ],
_default: [ 0, "", "" ]
};
 
wrapMap.optgroup = wrapMap.option;
wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
wrapMap.th = wrapMap.td;
 
// IE can't serialize <link> and <script> tags normally
if ( !jQuery.support.htmlSerialize ) {
wrapMap._default = [ 1, "div<div>", "</div>" ];
}
 
jQuery.fn.extend({
text: function( text ) {
if ( jQuery.isFunction(text) ) {
return this.each(function(i) {
var self = jQuery( this );
 
self.text( text.call(this, i, self.text()) );
});
}
 
if ( typeof text !== "object" && text !== undefined ) {
return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );
}
 
return jQuery.text( this );
},
 
wrapAll: function( html ) {
if ( jQuery.isFunction( html ) ) {
return this.each(function(i) {
jQuery(this).wrapAll( html.call(this, i) );
});
}
 
if ( this[0] ) {
// The elements to wrap the target around
var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
 
if ( this[0].parentNode ) {
wrap.insertBefore( this[0] );
}
 
wrap.map(function() {
var elem = this;
 
while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
elem = elem.firstChild;
}
 
return elem;
}).append(this);
}
 
return this;
},
 
wrapInner: function( html ) {
if ( jQuery.isFunction( html ) ) {
return this.each(function(i) {
jQuery(this).wrapInner( html.call(this, i) );
});
}
 
return this.each(function() {
var self = jQuery( this ),
contents = self.contents();
 
if ( contents.length ) {
contents.wrapAll( html );
 
} else {
self.append( html );
}
});
},
 
wrap: function( html ) {
return this.each(function() {
jQuery( this ).wrapAll( html );
});
},
 
unwrap: function() {
return this.parent().each(function() {
if ( !jQuery.nodeName( this, "body" ) ) {
jQuery( this ).replaceWith( this.childNodes );
}
}).end();
},
 
append: function() {
return this.domManip(arguments, true, function( elem ) {
if ( this.nodeType === 1 ) {
this.appendChild( elem );
}
});
},
 
prepend: function() {
return this.domManip(arguments, true, function( elem ) {
if ( this.nodeType === 1 ) {
this.insertBefore( elem, this.firstChild );
}
});
},
 
before: function() {
if ( this[0] && this[0].parentNode ) {
return this.domManip(arguments, false, function( elem ) {
this.parentNode.insertBefore( elem, this );
});
} else if ( arguments.length ) {
var set = jQuery(arguments[0]);
set.push.apply( set, this.toArray() );
return this.pushStack( set, "before", arguments );
}
},
 
after: function() {
if ( this[0] && this[0].parentNode ) {
return this.domManip(arguments, false, function( elem ) {
this.parentNode.insertBefore( elem, this.nextSibling );
});
} else if ( arguments.length ) {
var set = this.pushStack( this, "after", arguments );
set.push.apply( set, jQuery(arguments[0]).toArray() );
return set;
}
},
// keepData is for internal use only--do not document
remove: function( selector, keepData ) {
for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
if ( !selector || jQuery.filter( selector, [ elem ] ).length ) {
if ( !keepData && elem.nodeType === 1 ) {
jQuery.cleanData( elem.getElementsByTagName("*") );
jQuery.cleanData( [ elem ] );
}
 
if ( elem.parentNode ) {
elem.parentNode.removeChild( elem );
}
}
}
return this;
},
 
empty: function() {
for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
// Remove element nodes and prevent memory leaks
if ( elem.nodeType === 1 ) {
jQuery.cleanData( elem.getElementsByTagName("*") );
}
 
// Remove any remaining nodes
while ( elem.firstChild ) {
elem.removeChild( elem.firstChild );
}
}
return this;
},
 
clone: function( events ) {
// Do the clone
var ret = this.map(function() {
if ( !jQuery.support.noCloneEvent && !jQuery.isXMLDoc(this) ) {
// IE copies events bound via attachEvent when
// using cloneNode. Calling detachEvent on the
// clone will also remove the events from the orignal
// In order to get around this, we use innerHTML.
// Unfortunately, this means some modifications to
// attributes in IE that are actually only stored
// as properties will not be copied (such as the
// the name attribute on an input).
var html = this.outerHTML,
ownerDocument = this.ownerDocument;
 
if ( !html ) {
var div = ownerDocument.createElement("div");
div.appendChild( this.cloneNode(true) );
html = div.innerHTML;
}
 
return jQuery.clean([html.replace(rinlinejQuery, "")
// Handle the case in IE 8 where action=/test/> self-closes a tag
.replace(raction, '="$1">')
.replace(rleadingWhitespace, "")], ownerDocument)[0];
} else {
return this.cloneNode(true);
}
});
 
// Copy the events from the original to the clone
if ( events === true ) {
cloneCopyEvent( this, ret );
cloneCopyEvent( this.find("*"), ret.find("*") );
}
 
// Return the cloned set
return ret;
},
 
html: function( value ) {
if ( value === undefined ) {
return this[0] && this[0].nodeType === 1 ?
this[0].innerHTML.replace(rinlinejQuery, "") :
null;
 
// See if we can take a shortcut and just use innerHTML
} else if ( typeof value === "string" && !rnocache.test( value ) &&
(jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value )) &&
!wrapMap[ (rtagName.exec( value ) || ["", ""])[1].toLowerCase() ] ) {
 
value = value.replace(rxhtmlTag, "<$1></$2>");
 
try {
for ( var i = 0, l = this.length; i < l; i++ ) {
// Remove element nodes and prevent memory leaks
if ( this[i].nodeType === 1 ) {
jQuery.cleanData( this[i].getElementsByTagName("*") );
this[i].innerHTML = value;
}
}
 
// If using innerHTML throws an exception, use the fallback method
} catch(e) {
this.empty().append( value );
}
 
} else if ( jQuery.isFunction( value ) ) {
this.each(function(i){
var self = jQuery( this );
 
self.html( value.call(this, i, self.html()) );
});
 
} else {
this.empty().append( value );
}
 
return this;
},
 
replaceWith: function( value ) {
if ( this[0] && this[0].parentNode ) {
// Make sure that the elements are removed from the DOM before they are inserted
// this can help fix replacing a parent with child elements
if ( jQuery.isFunction( value ) ) {
return this.each(function(i) {
var self = jQuery(this), old = self.html();
self.replaceWith( value.call( this, i, old ) );
});
}
 
if ( typeof value !== "string" ) {
value = jQuery( value ).detach();
}
 
return this.each(function() {
var next = this.nextSibling,
parent = this.parentNode;
 
jQuery( this ).remove();
 
if ( next ) {
jQuery(next).before( value );
} else {
jQuery(parent).append( value );
}
});
} else {
return this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value );
}
},
 
detach: function( selector ) {
return this.remove( selector, true );
},
 
domManip: function( args, table, callback ) {
var results, first, fragment, parent,
value = args[0],
scripts = [];
 
// We can't cloneNode fragments that contain checked, in WebKit
if ( !jQuery.support.checkClone && arguments.length === 3 && typeof value === "string" && rchecked.test( value ) ) {
return this.each(function() {
jQuery(this).domManip( args, table, callback, true );
});
}
 
if ( jQuery.isFunction(value) ) {
return this.each(function(i) {
var self = jQuery(this);
args[0] = value.call(this, i, table ? self.html() : undefined);
self.domManip( args, table, callback );
});
}
 
if ( this[0] ) {
parent = value && value.parentNode;
 
// If we're in a fragment, just use that instead of building a new one
if ( jQuery.support.parentNode && parent && parent.nodeType === 11 && parent.childNodes.length === this.length ) {
results = { fragment: parent };
 
} else {
results = jQuery.buildFragment( args, this, scripts );
}
fragment = results.fragment;
if ( fragment.childNodes.length === 1 ) {
first = fragment = fragment.firstChild;
} else {
first = fragment.firstChild;
}
 
if ( first ) {
table = table && jQuery.nodeName( first, "tr" );
 
for ( var i = 0, l = this.length; i < l; i++ ) {
callback.call(
table ?
root(this[i], first) :
this[i],
i > 0 || results.cacheable || this.length > 1 ?
fragment.cloneNode(true) :
fragment
);
}
}
 
if ( scripts.length ) {
jQuery.each( scripts, evalScript );
}
}
 
return this;
}
});
 
function root( elem, cur ) {
return jQuery.nodeName(elem, "table") ?
(elem.getElementsByTagName("tbody")[0] ||
elem.appendChild(elem.ownerDocument.createElement("tbody"))) :
elem;
}
 
function cloneCopyEvent(orig, ret) {
var i = 0;
 
ret.each(function() {
if ( this.nodeName !== (orig[i] && orig[i].nodeName) ) {
return;
}
 
var oldData = jQuery.data( orig[i++] ),
curData = jQuery.data( this, oldData ),
events = oldData && oldData.events;
 
if ( events ) {
delete curData.handle;
curData.events = {};
 
for ( var type in events ) {
for ( var handler in events[ type ] ) {
jQuery.event.add( this, type, events[ type ][ handler ], events[ type ][ handler ].data );
}
}
}
});
}
 
jQuery.buildFragment = function( args, nodes, scripts ) {
var fragment, cacheable, cacheresults,
doc = (nodes && nodes[0] ? nodes[0].ownerDocument || nodes[0] : document);
 
// Only cache "small" (1/2 KB) strings that are associated with the main document
// Cloning options loses the selected state, so don't cache them
// IE 6 doesn't like it when you put <object> or <embed> elements in a fragment
// Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache
if ( args.length === 1 && typeof args[0] === "string" && args[0].length < 512 && doc === document &&
!rnocache.test( args[0] ) && (jQuery.support.checkClone || !rchecked.test( args[0] )) ) {
 
cacheable = true;
cacheresults = jQuery.fragments[ args[0] ];
if ( cacheresults ) {
if ( cacheresults !== 1 ) {
fragment = cacheresults;
}
}
}
 
if ( !fragment ) {
fragment = doc.createDocumentFragment();
jQuery.clean( args, doc, fragment, scripts );
}
 
if ( cacheable ) {
jQuery.fragments[ args[0] ] = cacheresults ? fragment : 1;
}
 
return { fragment: fragment, cacheable: cacheable };
};
 
jQuery.fragments = {};
 
jQuery.each({
appendTo: "append",
prependTo: "prepend",
insertBefore: "before",
insertAfter: "after",
replaceAll: "replaceWith"
}, function( name, original ) {
jQuery.fn[ name ] = function( selector ) {
var ret = [],
insert = jQuery( selector ),
parent = this.length === 1 && this[0].parentNode;
if ( parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1 ) {
insert[ original ]( this[0] );
return this;
} else {
for ( var i = 0, l = insert.length; i < l; i++ ) {
var elems = (i > 0 ? this.clone(true) : this).get();
jQuery( insert[i] )[ original ]( elems );
ret = ret.concat( elems );
}
return this.pushStack( ret, name, insert.selector );
}
};
});
 
jQuery.extend({
clean: function( elems, context, fragment, scripts ) {
context = context || document;
 
// !context.createElement fails in IE with an error but returns typeof 'object'
if ( typeof context.createElement === "undefined" ) {
context = context.ownerDocument || context[0] && context[0].ownerDocument || document;
}
 
var ret = [];
 
for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
if ( typeof elem === "number" ) {
elem += "";
}
 
if ( !elem ) {
continue;
}
 
// Convert html string into DOM nodes
if ( typeof elem === "string" && !rhtml.test( elem ) ) {
elem = context.createTextNode( elem );
 
} else if ( typeof elem === "string" ) {
// Fix "XHTML"-style tags in all browsers
elem = elem.replace(rxhtmlTag, "<$1></$2>");
 
// Trim whitespace, otherwise indexOf won't work as expected
var tag = (rtagName.exec( elem ) || ["", ""])[1].toLowerCase(),
wrap = wrapMap[ tag ] || wrapMap._default,
depth = wrap[0],
div = context.createElement("div");
 
// Go to html and back, then peel off extra wrappers
div.innerHTML = wrap[1] + elem + wrap[2];
 
// Move to the right depth
while ( depth-- ) {
div = div.lastChild;
}
 
// Remove IE's autoinserted <tbody> from table fragments
if ( !jQuery.support.tbody ) {
 
// String was a <table>, *may* have spurious <tbody>
var hasBody = rtbody.test(elem),
tbody = tag === "table" && !hasBody ?
div.firstChild && div.firstChild.childNodes :
 
// String was a bare <thead> or <tfoot>
wrap[1] === "<table>" && !hasBody ?
div.childNodes :
[];
 
for ( var j = tbody.length - 1; j >= 0 ; --j ) {
if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) {
tbody[ j ].parentNode.removeChild( tbody[ j ] );
}
}
 
}
 
// IE completely kills leading whitespace when innerHTML is used
if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild );
}
 
elem = div.childNodes;
}
 
if ( elem.nodeType ) {
ret.push( elem );
} else {
ret = jQuery.merge( ret, elem );
}
}
 
if ( fragment ) {
for ( i = 0; ret[i]; i++ ) {
if ( scripts && jQuery.nodeName( ret[i], "script" ) && (!ret[i].type || ret[i].type.toLowerCase() === "text/javascript") ) {
scripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( ret[i] ) : ret[i] );
} else {
if ( ret[i].nodeType === 1 ) {
ret.splice.apply( ret, [i + 1, 0].concat(jQuery.makeArray(ret[i].getElementsByTagName("script"))) );
}
fragment.appendChild( ret[i] );
}
}
}
 
return ret;
},
cleanData: function( elems ) {
var data, id, cache = jQuery.cache,
special = jQuery.event.special,
deleteExpando = jQuery.support.deleteExpando;
for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {
continue;
}
 
id = elem[ jQuery.expando ];
if ( id ) {
data = cache[ id ];
if ( data && data.events ) {
for ( var type in data.events ) {
if ( special[ type ] ) {
jQuery.event.remove( elem, type );
 
} else {
jQuery.removeEvent( elem, type, data.handle );
}
}
}
if ( deleteExpando ) {
delete elem[ jQuery.expando ];
 
} else if ( elem.removeAttribute ) {
elem.removeAttribute( jQuery.expando );
}
delete cache[ id ];
}
}
}
});
 
function evalScript( i, elem ) {
if ( elem.src ) {
jQuery.ajax({
url: elem.src,
async: false,
dataType: "script"
});
} else {
jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" );
}
 
if ( elem.parentNode ) {
elem.parentNode.removeChild( elem );
}
}
 
 
 
 
var ralpha = /alpha\([^)]*\)/i,
ropacity = /opacity=([^)]*)/,
rdashAlpha = /-([a-z])/ig,
rupper = /([A-Z])/g,
rnumpx = /^-?\d+(?:px)?$/i,
rnum = /^-?\d/,
 
cssShow = { position: "absolute", visibility: "hidden", display: "block" },
cssWidth = [ "Left", "Right" ],
cssHeight = [ "Top", "Bottom" ],
curCSS,
 
getComputedStyle,
currentStyle,
 
fcamelCase = function( all, letter ) {
return letter.toUpperCase();
};
 
jQuery.fn.css = function( name, value ) {
// Setting 'undefined' is a no-op
if ( arguments.length === 2 && value === undefined ) {
return this;
}
 
return jQuery.access( this, name, value, true, function( elem, name, value ) {
return value !== undefined ?
jQuery.style( elem, name, value ) :
jQuery.css( elem, name );
});
};
 
jQuery.extend({
// Add in style property hooks for overriding the default
// behavior of getting and setting a style property
cssHooks: {
opacity: {
get: function( elem, computed ) {
if ( computed ) {
// We should always get a number back from opacity
var ret = curCSS( elem, "opacity", "opacity" );
return ret === "" ? "1" : ret;
 
} else {
return elem.style.opacity;
}
}
}
},
 
// Exclude the following css properties to add px
cssNumber: {
"zIndex": true,
"fontWeight": true,
"opacity": true,
"zoom": true,
"lineHeight": true
},
 
// Add in properties whose names you wish to fix before
// setting or getting the value
cssProps: {
// normalize float css property
"float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat"
},
 
// Get and set the style property on a DOM Node
style: function( elem, name, value, extra ) {
// Don't set styles on text and comment nodes
if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
return;
}
 
// Make sure that we're working with the right name
var ret, origName = jQuery.camelCase( name ),
style = elem.style, hooks = jQuery.cssHooks[ origName ];
 
name = jQuery.cssProps[ origName ] || origName;
 
// Check if we're setting a value
if ( value !== undefined ) {
// Make sure that NaN and null values aren't set. See: #7116
if ( typeof value === "number" && isNaN( value ) || value == null ) {
return;
}
 
// If a number was passed in, add 'px' to the (except for certain CSS properties)
if ( typeof value === "number" && !jQuery.cssNumber[ origName ] ) {
value += "px";
}
 
// If a hook was provided, use that value, otherwise just set the specified value
if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value )) !== undefined ) {
// Wrapped to prevent IE from throwing errors when 'invalid' values are provided
// Fixes bug #5509
try {
style[ name ] = value;
} catch(e) {}
}
 
} else {
// If a hook was provided get the non-computed value from there
if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
return ret;
}
 
// Otherwise just get the value from the style object
return style[ name ];
}
},
 
css: function( elem, name, extra ) {
// Make sure that we're working with the right name
var ret, origName = jQuery.camelCase( name ),
hooks = jQuery.cssHooks[ origName ];
 
name = jQuery.cssProps[ origName ] || origName;
 
// If a hook was provided get the computed value from there
if ( hooks && "get" in hooks && (ret = hooks.get( elem, true, extra )) !== undefined ) {
return ret;
 
// Otherwise, if a way to get the computed value exists, use that
} else if ( curCSS ) {
return curCSS( elem, name, origName );
}
},
 
// A method for quickly swapping in/out CSS properties to get correct calculations
swap: function( elem, options, callback ) {
var old = {};
 
// Remember the old values, and insert the new ones
for ( var name in options ) {
old[ name ] = elem.style[ name ];
elem.style[ name ] = options[ name ];
}
 
callback.call( elem );
 
// Revert the old values
for ( name in options ) {
elem.style[ name ] = old[ name ];
}
},
 
camelCase: function( string ) {
return string.replace( rdashAlpha, fcamelCase );
}
});
 
// DEPRECATED, Use jQuery.css() instead
jQuery.curCSS = jQuery.css;
 
jQuery.each(["height", "width"], function( i, name ) {
jQuery.cssHooks[ name ] = {
get: function( elem, computed, extra ) {
var val;
 
if ( computed ) {
if ( elem.offsetWidth !== 0 ) {
val = getWH( elem, name, extra );
 
} else {
jQuery.swap( elem, cssShow, function() {
val = getWH( elem, name, extra );
});
}
 
if ( val <= 0 ) {
val = curCSS( elem, name, name );
 
if ( val === "0px" && currentStyle ) {
val = currentStyle( elem, name, name );
}
 
if ( val != null ) {
// Should return "auto" instead of 0, use 0 for
// temporary backwards-compat
return val === "" || val === "auto" ? "0px" : val;
}
}
 
if ( val < 0 || val == null ) {
val = elem.style[ name ];
 
// Should return "auto" instead of 0, use 0 for
// temporary backwards-compat
return val === "" || val === "auto" ? "0px" : val;
}
 
return typeof val === "string" ? val : val + "px";
}
},
 
set: function( elem, value ) {
if ( rnumpx.test( value ) ) {
// ignore negative width and height values #1599
value = parseFloat(value);
 
if ( value >= 0 ) {
return value + "px";
}
 
} else {
return value;
}
}
};
});
 
if ( !jQuery.support.opacity ) {
jQuery.cssHooks.opacity = {
get: function( elem, computed ) {
// IE uses filters for opacity
return ropacity.test((computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "") ?
(parseFloat(RegExp.$1) / 100) + "" :
computed ? "1" : "";
},
 
set: function( elem, value ) {
var style = elem.style;
 
// IE has trouble with opacity if it does not have layout
// Force it by setting the zoom level
style.zoom = 1;
 
// Set the alpha filter to set the opacity
var opacity = jQuery.isNaN(value) ?
"" :
"alpha(opacity=" + value * 100 + ")",
filter = style.filter || "";
 
style.filter = ralpha.test(filter) ?
filter.replace(ralpha, opacity) :
style.filter + ' ' + opacity;
}
};
}
 
if ( document.defaultView && document.defaultView.getComputedStyle ) {
getComputedStyle = function( elem, newName, name ) {
var ret, defaultView, computedStyle;
 
name = name.replace( rupper, "-$1" ).toLowerCase();
 
if ( !(defaultView = elem.ownerDocument.defaultView) ) {
return undefined;
}
 
if ( (computedStyle = defaultView.getComputedStyle( elem, null )) ) {
ret = computedStyle.getPropertyValue( name );
if ( ret === "" && !jQuery.contains( elem.ownerDocument.documentElement, elem ) ) {
ret = jQuery.style( elem, name );
}
}
 
return ret;
};
}
 
if ( document.documentElement.currentStyle ) {
currentStyle = function( elem, name ) {
var left, rsLeft,
ret = elem.currentStyle && elem.currentStyle[ name ],
style = elem.style;
 
// From the awesome hack by Dean Edwards
// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
 
// If we're not dealing with a regular pixel number
// but a number that has a weird ending, we need to convert it to pixels
if ( !rnumpx.test( ret ) && rnum.test( ret ) ) {
// Remember the original values
left = style.left;
rsLeft = elem.runtimeStyle.left;
 
// Put in the new values to get a computed value out
elem.runtimeStyle.left = elem.currentStyle.left;
style.left = name === "fontSize" ? "1em" : (ret || 0);
ret = style.pixelLeft + "px";
 
// Revert the changed values
style.left = left;
elem.runtimeStyle.left = rsLeft;
}
 
return ret === "" ? "auto" : ret;
};
}
 
curCSS = getComputedStyle || currentStyle;
 
function getWH( elem, name, extra ) {
var which = name === "width" ? cssWidth : cssHeight,
val = name === "width" ? elem.offsetWidth : elem.offsetHeight;
 
if ( extra === "border" ) {
return val;
}
 
jQuery.each( which, function() {
if ( !extra ) {
val -= parseFloat(jQuery.css( elem, "padding" + this )) || 0;
}
 
if ( extra === "margin" ) {
val += parseFloat(jQuery.css( elem, "margin" + this )) || 0;
 
} else {
val -= parseFloat(jQuery.css( elem, "border" + this + "Width" )) || 0;
}
});
 
return val;
}
 
if ( jQuery.expr && jQuery.expr.filters ) {
jQuery.expr.filters.hidden = function( elem ) {
var width = elem.offsetWidth,
height = elem.offsetHeight;
 
return (width === 0 && height === 0) || (!jQuery.support.reliableHiddenOffsets && (elem.style.display || jQuery.css( elem, "display" )) === "none");
};
 
jQuery.expr.filters.visible = function( elem ) {
return !jQuery.expr.filters.hidden( elem );
};
}
 
 
 
 
var jsc = jQuery.now(),
rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
rselectTextarea = /^(?:select|textarea)/i,
rinput = /^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
rnoContent = /^(?:GET|HEAD)$/,
rbracket = /\[\]$/,
jsre = /\=\?(&|$)/,
rquery = /\?/,
rts = /([?&])_=[^&]*/,
rurl = /^(\w+:)?\/\/([^\/?#]+)/,
r20 = /%20/g,
rhash = /#.*$/,
 
// Keep a copy of the old load method
_load = jQuery.fn.load;
 
jQuery.fn.extend({
load: function( url, params, callback ) {
if ( typeof url !== "string" && _load ) {
return _load.apply( this, arguments );
 
// Don't do a request if no elements are being requested
} else if ( !this.length ) {
return this;
}
 
var off = url.indexOf(" ");
if ( off >= 0 ) {
var selector = url.slice(off, url.length);
url = url.slice(0, off);
}
 
// Default to a GET request
var type = "GET";
 
// If the second parameter was provided
if ( params ) {
// If it's a function
if ( jQuery.isFunction( params ) ) {
// We assume that it's the callback
callback = params;
params = null;
 
// Otherwise, build a param string
} else if ( typeof params === "object" ) {
params = jQuery.param( params, jQuery.ajaxSettings.traditional );
type = "POST";
}
}
 
var self = this;
 
// Request the remote document
jQuery.ajax({
url: url,
type: type,
dataType: "html",
data: params,
complete: function( res, status ) {
// If successful, inject the HTML into all the matched elements
if ( status === "success" || status === "notmodified" ) {
// See if a selector was specified
self.html( selector ?
// Create a dummy div to hold the results
jQuery("<div>")
// inject the contents of the document in, removing the scripts
// to avoid any 'Permission Denied' errors in IE
.append(res.responseText.replace(rscript, ""))
 
// Locate the specified elements
.find(selector) :
 
// If not, just inject the full result
res.responseText );
}
 
if ( callback ) {
self.each( callback, [res.responseText, status, res] );
}
}
});
 
return this;
},
 
serialize: function() {
return jQuery.param(this.serializeArray());
},
 
serializeArray: function() {
return this.map(function() {
return this.elements ? jQuery.makeArray(this.elements) : this;
})
.filter(function() {
return this.name && !this.disabled &&
(this.checked || rselectTextarea.test(this.nodeName) ||
rinput.test(this.type));
})
.map(function( i, elem ) {
var val = jQuery(this).val();
 
return val == null ?
null :
jQuery.isArray(val) ?
jQuery.map( val, function( val, i ) {
return { name: elem.name, value: val };
}) :
{ name: elem.name, value: val };
}).get();
}
});
 
// Attach a bunch of functions for handling common AJAX events
jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), function( i, o ) {
jQuery.fn[o] = function( f ) {
return this.bind(o, f);
};
});
 
jQuery.extend({
get: function( url, data, callback, type ) {
// shift arguments if data argument was omited
if ( jQuery.isFunction( data ) ) {
type = type || callback;
callback = data;
data = null;
}
 
return jQuery.ajax({
type: "GET",
url: url,
data: data,
success: callback,
dataType: type
});
},
 
getScript: function( url, callback ) {
return jQuery.get(url, null, callback, "script");
},
 
getJSON: function( url, data, callback ) {
return jQuery.get(url, data, callback, "json");
},
 
post: function( url, data, callback, type ) {
// shift arguments if data argument was omited
if ( jQuery.isFunction( data ) ) {
type = type || callback;
callback = data;
data = {};
}
 
return jQuery.ajax({
type: "POST",
url: url,
data: data,
success: callback,
dataType: type
});
},
 
ajaxSetup: function( settings ) {
jQuery.extend( jQuery.ajaxSettings, settings );
},
 
ajaxSettings: {
url: location.href,
global: true,
type: "GET",
contentType: "application/x-www-form-urlencoded",
processData: true,
async: true,
/*
timeout: 0,
data: null,
username: null,
password: null,
traditional: false,
*/
// This function can be overriden by calling jQuery.ajaxSetup
xhr: function() {
return new window.XMLHttpRequest();
},
accepts: {
xml: "application/xml, text/xml",
html: "text/html",
script: "text/javascript, application/javascript",
json: "application/json, text/javascript",
text: "text/plain",
_default: "*/*"
}
},
 
ajax: function( origSettings ) {
var s = jQuery.extend(true, {}, jQuery.ajaxSettings, origSettings),
jsonp, status, data, type = s.type.toUpperCase(), noContent = rnoContent.test(type);
 
s.url = s.url.replace( rhash, "" );
 
// Use original (not extended) context object if it was provided
s.context = origSettings && origSettings.context != null ? origSettings.context : s;
 
// convert data if not already a string
if ( s.data && s.processData && typeof s.data !== "string" ) {
s.data = jQuery.param( s.data, s.traditional );
}
 
// Handle JSONP Parameter Callbacks
if ( s.dataType === "jsonp" ) {
if ( type === "GET" ) {
if ( !jsre.test( s.url ) ) {
s.url += (rquery.test( s.url ) ? "&" : "?") + (s.jsonp || "callback") + "=?";
}
} else if ( !s.data || !jsre.test(s.data) ) {
s.data = (s.data ? s.data + "&" : "") + (s.jsonp || "callback") + "=?";
}
s.dataType = "json";
}
 
// Build temporary JSONP function
if ( s.dataType === "json" && (s.data && jsre.test(s.data) || jsre.test(s.url)) ) {
jsonp = s.jsonpCallback || ("jsonp" + jsc++);
 
// Replace the =? sequence both in the query string and the data
if ( s.data ) {
s.data = (s.data + "").replace(jsre, "=" + jsonp + "$1");
}
 
s.url = s.url.replace(jsre, "=" + jsonp + "$1");
 
// We need to make sure
// that a JSONP style response is executed properly
s.dataType = "script";
 
// Handle JSONP-style loading
var customJsonp = window[ jsonp ];
 
window[ jsonp ] = function( tmp ) {
if ( jQuery.isFunction( customJsonp ) ) {
customJsonp( tmp );
 
} else {
// Garbage collect
window[ jsonp ] = undefined;
 
try {
delete window[ jsonp ];
} catch( jsonpError ) {}
}
 
data = tmp;
jQuery.handleSuccess( s, xhr, status, data );
jQuery.handleComplete( s, xhr, status, data );
if ( head ) {
head.removeChild( script );
}
};
}
 
if ( s.dataType === "script" && s.cache === null ) {
s.cache = false;
}
 
if ( s.cache === false && noContent ) {
var ts = jQuery.now();
 
// try replacing _= if it is there
var ret = s.url.replace(rts, "$1_=" + ts);
 
// if nothing was replaced, add timestamp to the end
s.url = ret + ((ret === s.url) ? (rquery.test(s.url) ? "&" : "?") + "_=" + ts : "");
}
 
// If data is available, append data to url for GET/HEAD requests
if ( s.data && noContent ) {
s.url += (rquery.test(s.url) ? "&" : "?") + s.data;
}
 
// Watch for a new set of requests
if ( s.global && jQuery.active++ === 0 ) {
jQuery.event.trigger( "ajaxStart" );
}
 
// Matches an absolute URL, and saves the domain
var parts = rurl.exec( s.url ),
remote = parts && (parts[1] && parts[1].toLowerCase() !== location.protocol || parts[2].toLowerCase() !== location.host);
 
// If we're requesting a remote document
// and trying to load JSON or Script with a GET
if ( s.dataType === "script" && type === "GET" && remote ) {
var head = document.getElementsByTagName("head")[0] || document.documentElement;
var script = document.createElement("script");
if ( s.scriptCharset ) {
script.charset = s.scriptCharset;
}
script.src = s.url;
 
// Handle Script loading
if ( !jsonp ) {
var done = false;
 
// Attach handlers for all browsers
script.onload = script.onreadystatechange = function() {
if ( !done && (!this.readyState ||
this.readyState === "loaded" || this.readyState === "complete") ) {
done = true;
jQuery.handleSuccess( s, xhr, status, data );
jQuery.handleComplete( s, xhr, status, data );
 
// Handle memory leak in IE
script.onload = script.onreadystatechange = null;
if ( head && script.parentNode ) {
head.removeChild( script );
}
}
};
}
 
// Use insertBefore instead of appendChild to circumvent an IE6 bug.
// This arises when a base node is used (#2709 and #4378).
head.insertBefore( script, head.firstChild );
 
// We handle everything using the script element injection
return undefined;
}
 
var requestDone = false;
 
// Create the request object
var xhr = s.xhr();
 
if ( !xhr ) {
return;
}
 
// Open the socket
// Passing null username, generates a login popup on Opera (#2865)
if ( s.username ) {
xhr.open(type, s.url, s.async, s.username, s.password);
} else {
xhr.open(type, s.url, s.async);
}
 
// Need an extra try/catch for cross domain requests in Firefox 3
try {
// Set content-type if data specified and content-body is valid for this type
if ( (s.data != null && !noContent) || (origSettings && origSettings.contentType) ) {
xhr.setRequestHeader("Content-Type", s.contentType);
}
 
// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
if ( s.ifModified ) {
if ( jQuery.lastModified[s.url] ) {
xhr.setRequestHeader("If-Modified-Since", jQuery.lastModified[s.url]);
}
 
if ( jQuery.etag[s.url] ) {
xhr.setRequestHeader("If-None-Match", jQuery.etag[s.url]);
}
}
 
// Set header so the called script knows that it's an XMLHttpRequest
// Only send the header if it's not a remote XHR
if ( !remote ) {
xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
}
 
// Set the Accepts header for the server, depending on the dataType
xhr.setRequestHeader("Accept", s.dataType && s.accepts[ s.dataType ] ?
s.accepts[ s.dataType ] + ", */*; q=0.01" :
s.accepts._default );
} catch( headerError ) {}
 
// Allow custom headers/mimetypes and early abort
if ( s.beforeSend && s.beforeSend.call(s.context, xhr, s) === false ) {
// Handle the global AJAX counter
if ( s.global && jQuery.active-- === 1 ) {
jQuery.event.trigger( "ajaxStop" );
}
 
// close opended socket
xhr.abort();
return false;
}
 
if ( s.global ) {
jQuery.triggerGlobal( s, "ajaxSend", [xhr, s] );
}
 
// Wait for a response to come back
var onreadystatechange = xhr.onreadystatechange = function( isTimeout ) {
// The request was aborted
if ( !xhr || xhr.readyState === 0 || isTimeout === "abort" ) {
// Opera doesn't call onreadystatechange before this point
// so we simulate the call
if ( !requestDone ) {
jQuery.handleComplete( s, xhr, status, data );
}
 
requestDone = true;
if ( xhr ) {
xhr.onreadystatechange = jQuery.noop;
}
 
// The transfer is complete and the data is available, or the request timed out
} else if ( !requestDone && xhr && (xhr.readyState === 4 || isTimeout === "timeout") ) {
requestDone = true;
xhr.onreadystatechange = jQuery.noop;
 
status = isTimeout === "timeout" ?
"timeout" :
!jQuery.httpSuccess( xhr ) ?
"error" :
s.ifModified && jQuery.httpNotModified( xhr, s.url ) ?
"notmodified" :
"success";
 
var errMsg;
 
if ( status === "success" ) {
// Watch for, and catch, XML document parse errors
try {
// process the data (runs the xml through httpData regardless of callback)
data = jQuery.httpData( xhr, s.dataType, s );
} catch( parserError ) {
status = "parsererror";
errMsg = parserError;
}
}
 
// Make sure that the request was successful or notmodified
if ( status === "success" || status === "notmodified" ) {
// JSONP handles its own success callback
if ( !jsonp ) {
jQuery.handleSuccess( s, xhr, status, data );
}
} else {
jQuery.handleError( s, xhr, status, errMsg );
}
 
// Fire the complete handlers
if ( !jsonp ) {
jQuery.handleComplete( s, xhr, status, data );
}
 
if ( isTimeout === "timeout" ) {
xhr.abort();
}
 
// Stop memory leaks
if ( s.async ) {
xhr = null;
}
}
};
 
// Override the abort handler, if we can (IE 6 doesn't allow it, but that's OK)
// Opera doesn't fire onreadystatechange at all on abort
try {
var oldAbort = xhr.abort;
xhr.abort = function() {
if ( xhr ) {
// oldAbort has no call property in IE7 so
// just do it this way, which works in all
// browsers
Function.prototype.call.call( oldAbort, xhr );
}
 
onreadystatechange( "abort" );
};
} catch( abortError ) {}
 
// Timeout checker
if ( s.async && s.timeout > 0 ) {
setTimeout(function() {
// Check to see if the request is still happening
if ( xhr && !requestDone ) {
onreadystatechange( "timeout" );
}
}, s.timeout);
}
 
// Send the data
try {
xhr.send( noContent || s.data == null ? null : s.data );
 
} catch( sendError ) {
jQuery.handleError( s, xhr, null, sendError );
 
// Fire the complete handlers
jQuery.handleComplete( s, xhr, status, data );
}
 
// firefox 1.5 doesn't fire statechange for sync requests
if ( !s.async ) {
onreadystatechange();
}
 
// return XMLHttpRequest to allow aborting the request etc.
return xhr;
},
 
// Serialize an array of form elements or a set of
// key/values into a query string
param: function( a, traditional ) {
var s = [],
add = function( key, value ) {
// If value is a function, invoke it and return its value
value = jQuery.isFunction(value) ? value() : value;
s[ s.length ] = encodeURIComponent(key) + "=" + encodeURIComponent(value);
};
// Set traditional to true for jQuery <= 1.3.2 behavior.
if ( traditional === undefined ) {
traditional = jQuery.ajaxSettings.traditional;
}
// If an array was passed in, assume that it is an array of form elements.
if ( jQuery.isArray(a) || a.jquery ) {
// Serialize the form elements
jQuery.each( a, function() {
add( this.name, this.value );
});
} else {
// If traditional, encode the "old" way (the way 1.3.2 or older
// did it), otherwise encode params recursively.
for ( var prefix in a ) {
buildParams( prefix, a[prefix], traditional, add );
}
}
 
// Return the resulting serialization
return s.join("&").replace(r20, "+");
}
});
 
function buildParams( prefix, obj, traditional, add ) {
if ( jQuery.isArray(obj) && obj.length ) {
// Serialize array item.
jQuery.each( obj, function( i, v ) {
if ( traditional || rbracket.test( prefix ) ) {
// Treat each array item as a scalar.
add( prefix, v );
 
} else {
// If array item is non-scalar (array or object), encode its
// numeric index to resolve deserialization ambiguity issues.
// Note that rack (as of 1.0.0) can't currently deserialize
// nested arrays properly, and attempting to do so may cause
// a server error. Possible fixes are to modify rack's
// deserialization algorithm or to provide an option or flag
// to force array serialization to be shallow.
buildParams( prefix + "[" + ( typeof v === "object" || jQuery.isArray(v) ? i : "" ) + "]", v, traditional, add );
}
});
} else if ( !traditional && obj != null && typeof obj === "object" ) {
if ( jQuery.isEmptyObject( obj ) ) {
add( prefix, "" );
 
// Serialize object item.
} else {
jQuery.each( obj, function( k, v ) {
buildParams( prefix + "[" + k + "]", v, traditional, add );
});
}
} else {
// Serialize scalar item.
add( prefix, obj );
}
}
 
// This is still on the jQuery object... for now
// Want to move this to jQuery.ajax some day
jQuery.extend({
 
// Counter for holding the number of active queries
active: 0,
 
// Last-Modified header cache for next request
lastModified: {},
etag: {},
 
handleError: function( s, xhr, status, e ) {
// If a local callback was specified, fire it
if ( s.error ) {
s.error.call( s.context, xhr, status, e );
}
 
// Fire the global callback
if ( s.global ) {
jQuery.triggerGlobal( s, "ajaxError", [xhr, s, e] );
}
},
 
handleSuccess: function( s, xhr, status, data ) {
// If a local callback was specified, fire it and pass it the data
if ( s.success ) {
s.success.call( s.context, data, status, xhr );
}
 
// Fire the global callback
if ( s.global ) {
jQuery.triggerGlobal( s, "ajaxSuccess", [xhr, s] );
}
},
 
handleComplete: function( s, xhr, status ) {
// Process result
if ( s.complete ) {
s.complete.call( s.context, xhr, status );
}
 
// The request was completed
if ( s.global ) {
jQuery.triggerGlobal( s, "ajaxComplete", [xhr, s] );
}
 
// Handle the global AJAX counter
if ( s.global && jQuery.active-- === 1 ) {
jQuery.event.trigger( "ajaxStop" );
}
},
triggerGlobal: function( s, type, args ) {
(s.context && s.context.url == null ? jQuery(s.context) : jQuery.event).trigger(type, args);
},
 
// Determines if an XMLHttpRequest was successful or not
httpSuccess: function( xhr ) {
try {
// IE error sometimes returns 1223 when it should be 204 so treat it as success, see #1450
return !xhr.status && location.protocol === "file:" ||
xhr.status >= 200 && xhr.status < 300 ||
xhr.status === 304 || xhr.status === 1223;
} catch(e) {}
 
return false;
},
 
// Determines if an XMLHttpRequest returns NotModified
httpNotModified: function( xhr, url ) {
var lastModified = xhr.getResponseHeader("Last-Modified"),
etag = xhr.getResponseHeader("Etag");
 
if ( lastModified ) {
jQuery.lastModified[url] = lastModified;
}
 
if ( etag ) {
jQuery.etag[url] = etag;
}
 
return xhr.status === 304;
},
 
httpData: function( xhr, type, s ) {
var ct = xhr.getResponseHeader("content-type") || "",
xml = type === "xml" || !type && ct.indexOf("xml") >= 0,
data = xml ? xhr.responseXML : xhr.responseText;
 
if ( xml && data.documentElement.nodeName === "parsererror" ) {
jQuery.error( "parsererror" );
}
 
// Allow a pre-filtering function to sanitize the response
// s is checked to keep backwards compatibility
if ( s && s.dataFilter ) {
data = s.dataFilter( data, type );
}
 
// The filter can actually parse the response
if ( typeof data === "string" ) {
// Get the JavaScript object, if JSON is used.
if ( type === "json" || !type && ct.indexOf("json") >= 0 ) {
data = jQuery.parseJSON( data );
 
// If the type is "script", eval it in global context
} else if ( type === "script" || !type && ct.indexOf("javascript") >= 0 ) {
jQuery.globalEval( data );
}
}
 
return data;
}
 
});
 
/*
* Create the request object; Microsoft failed to properly
* implement the XMLHttpRequest in IE7 (can't request local files),
* so we use the ActiveXObject when it is available
* Additionally XMLHttpRequest can be disabled in IE7/IE8 so
* we need a fallback.
*/
if ( window.ActiveXObject ) {
jQuery.ajaxSettings.xhr = function() {
if ( window.location.protocol !== "file:" ) {
try {
return new window.XMLHttpRequest();
} catch(xhrError) {}
}
 
try {
return new window.ActiveXObject("Microsoft.XMLHTTP");
} catch(activeError) {}
};
}
 
// Does this browser support XHR requests?
jQuery.support.ajax = !!jQuery.ajaxSettings.xhr();
 
 
 
 
var elemdisplay = {},
rfxtypes = /^(?:toggle|show|hide)$/,
rfxnum = /^([+\-]=)?([\d+.\-]+)(.*)$/,
timerId,
fxAttrs = [
// height animations
[ "height", "marginTop", "marginBottom", "paddingTop", "paddingBottom" ],
// width animations
[ "width", "marginLeft", "marginRight", "paddingLeft", "paddingRight" ],
// opacity animations
[ "opacity" ]
];
 
jQuery.fn.extend({
show: function( speed, easing, callback ) {
var elem, display;
 
if ( speed || speed === 0 ) {
return this.animate( genFx("show", 3), speed, easing, callback);
 
} else {
for ( var i = 0, j = this.length; i < j; i++ ) {
elem = this[i];
display = elem.style.display;
 
// Reset the inline display of this element to learn if it is
// being hidden by cascaded rules or not
if ( !jQuery.data(elem, "olddisplay") && display === "none" ) {
display = elem.style.display = "";
}
 
// Set elements which have been overridden with display: none
// in a stylesheet to whatever the default browser style is
// for such an element
if ( display === "" && jQuery.css( elem, "display" ) === "none" ) {
jQuery.data(elem, "olddisplay", defaultDisplay(elem.nodeName));
}
}
 
// Set the display of most of the elements in a second loop
// to avoid the constant reflow
for ( i = 0; i < j; i++ ) {
elem = this[i];
display = elem.style.display;
 
if ( display === "" || display === "none" ) {
elem.style.display = jQuery.data(elem, "olddisplay") || "";
}
}
 
return this;
}
},
 
hide: function( speed, easing, callback ) {
if ( speed || speed === 0 ) {
return this.animate( genFx("hide", 3), speed, easing, callback);
 
} else {
for ( var i = 0, j = this.length; i < j; i++ ) {
var display = jQuery.css( this[i], "display" );
 
if ( display !== "none" ) {
jQuery.data( this[i], "olddisplay", display );
}
}
 
// Set the display of the elements in a second loop
// to avoid the constant reflow
for ( i = 0; i < j; i++ ) {
this[i].style.display = "none";
}
 
return this;
}
},
 
// Save the old toggle function
_toggle: jQuery.fn.toggle,
 
toggle: function( fn, fn2, callback ) {
var bool = typeof fn === "boolean";
 
if ( jQuery.isFunction(fn) && jQuery.isFunction(fn2) ) {
this._toggle.apply( this, arguments );
 
} else if ( fn == null || bool ) {
this.each(function() {
var state = bool ? fn : jQuery(this).is(":hidden");
jQuery(this)[ state ? "show" : "hide" ]();
});
 
} else {
this.animate(genFx("toggle", 3), fn, fn2, callback);
}
 
return this;
},
 
fadeTo: function( speed, to, easing, callback ) {
return this.filter(":hidden").css("opacity", 0).show().end()
.animate({opacity: to}, speed, easing, callback);
},
 
animate: function( prop, speed, easing, callback ) {
var optall = jQuery.speed(speed, easing, callback);
 
if ( jQuery.isEmptyObject( prop ) ) {
return this.each( optall.complete );
}
 
return this[ optall.queue === false ? "each" : "queue" ](function() {
// XXX 'this' does not always have a nodeName when running the
// test suite
 
var opt = jQuery.extend({}, optall), p,
isElement = this.nodeType === 1,
hidden = isElement && jQuery(this).is(":hidden"),
self = this;
 
for ( p in prop ) {
var name = jQuery.camelCase( p );
 
if ( p !== name ) {
prop[ name ] = prop[ p ];
delete prop[ p ];
p = name;
}
 
if ( prop[p] === "hide" && hidden || prop[p] === "show" && !hidden ) {
return opt.complete.call(this);
}
 
if ( isElement && ( p === "height" || p === "width" ) ) {
// Make sure that nothing sneaks out
// Record all 3 overflow attributes because IE does not
// change the overflow attribute when overflowX and
// overflowY are set to the same value
opt.overflow = [ this.style.overflow, this.style.overflowX, this.style.overflowY ];
 
// Set display property to inline-block for height/width
// animations on inline elements that are having width/height
// animated
if ( jQuery.css( this, "display" ) === "inline" &&
jQuery.css( this, "float" ) === "none" ) {
if ( !jQuery.support.inlineBlockNeedsLayout ) {
this.style.display = "inline-block";
 
} else {
var display = defaultDisplay(this.nodeName);
 
// inline-level elements accept inline-block;
// block-level elements need to be inline with layout
if ( display === "inline" ) {
this.style.display = "inline-block";
 
} else {
this.style.display = "inline";
this.style.zoom = 1;
}
}
}
}
 
if ( jQuery.isArray( prop[p] ) ) {
// Create (if needed) and add to specialEasing
(opt.specialEasing = opt.specialEasing || {})[p] = prop[p][1];
prop[p] = prop[p][0];
}
}
 
if ( opt.overflow != null ) {
this.style.overflow = "hidden";
}
 
opt.curAnim = jQuery.extend({}, prop);
 
jQuery.each( prop, function( name, val ) {
var e = new jQuery.fx( self, opt, name );
 
if ( rfxtypes.test(val) ) {
e[ val === "toggle" ? hidden ? "show" : "hide" : val ]( prop );
 
} else {
var parts = rfxnum.exec(val),
start = e.cur() || 0;
 
if ( parts ) {
var end = parseFloat( parts[2] ),
unit = parts[3] || "px";
 
// We need to compute starting value
if ( unit !== "px" ) {
jQuery.style( self, name, (end || 1) + unit);
start = ((end || 1) / e.cur()) * start;
jQuery.style( self, name, start + unit);
}
 
// If a +=/-= token was provided, we're doing a relative animation
if ( parts[1] ) {
end = ((parts[1] === "-=" ? -1 : 1) * end) + start;
}
 
e.custom( start, end, unit );
 
} else {
e.custom( start, val, "" );
}
}
});
 
// For JS strict compliance
return true;
});
},
 
stop: function( clearQueue, gotoEnd ) {
var timers = jQuery.timers;
 
if ( clearQueue ) {
this.queue([]);
}
 
this.each(function() {
// go in reverse order so anything added to the queue during the loop is ignored
for ( var i = timers.length - 1; i >= 0; i-- ) {
if ( timers[i].elem === this ) {
if (gotoEnd) {
// force the next step to be the last
timers[i](true);
}
 
timers.splice(i, 1);
}
}
});
 
// start the next in the queue if the last step wasn't forced
if ( !gotoEnd ) {
this.dequeue();
}
 
return this;
}
 
});
 
function genFx( type, num ) {
var obj = {};
 
jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice(0,num)), function() {
obj[ this ] = type;
});
 
return obj;
}
 
// Generate shortcuts for custom animations
jQuery.each({
slideDown: genFx("show", 1),
slideUp: genFx("hide", 1),
slideToggle: genFx("toggle", 1),
fadeIn: { opacity: "show" },
fadeOut: { opacity: "hide" },
fadeToggle: { opacity: "toggle" }
}, function( name, props ) {
jQuery.fn[ name ] = function( speed, easing, callback ) {
return this.animate( props, speed, easing, callback );
};
});
 
jQuery.extend({
speed: function( speed, easing, fn ) {
var opt = speed && typeof speed === "object" ? jQuery.extend({}, speed) : {
complete: fn || !fn && easing ||
jQuery.isFunction( speed ) && speed,
duration: speed,
easing: fn && easing || easing && !jQuery.isFunction(easing) && easing
};
 
opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[opt.duration] : jQuery.fx.speeds._default;
 
// Queueing
opt.old = opt.complete;
opt.complete = function() {
if ( opt.queue !== false ) {
jQuery(this).dequeue();
}
if ( jQuery.isFunction( opt.old ) ) {
opt.old.call( this );
}
};
 
return opt;
},
 
easing: {
linear: function( p, n, firstNum, diff ) {
return firstNum + diff * p;
},
swing: function( p, n, firstNum, diff ) {
return ((-Math.cos(p*Math.PI)/2) + 0.5) * diff + firstNum;
}
},
 
timers: [],
 
fx: function( elem, options, prop ) {
this.options = options;
this.elem = elem;
this.prop = prop;
 
if ( !options.orig ) {
options.orig = {};
}
}
 
});
 
jQuery.fx.prototype = {
// Simple function for setting a style value
update: function() {
if ( this.options.step ) {
this.options.step.call( this.elem, this.now, this );
}
 
(jQuery.fx.step[this.prop] || jQuery.fx.step._default)( this );
},
 
// Get the current size
cur: function() {
if ( this.elem[this.prop] != null && (!this.elem.style || this.elem.style[this.prop] == null) ) {
return this.elem[ this.prop ];
}
 
var r = parseFloat( jQuery.css( this.elem, this.prop ) );
return r && r > -10000 ? r : 0;
},
 
// Start an animation from one number to another
custom: function( from, to, unit ) {
var self = this,
fx = jQuery.fx;
 
this.startTime = jQuery.now();
this.start = from;
this.end = to;
this.unit = unit || this.unit || "px";
this.now = this.start;
this.pos = this.state = 0;
 
function t( gotoEnd ) {
return self.step(gotoEnd);
}
 
t.elem = this.elem;
 
if ( t() && jQuery.timers.push(t) && !timerId ) {
timerId = setInterval(fx.tick, fx.interval);
}
},
 
// Simple 'show' function
show: function() {
// Remember where we started, so that we can go back to it later
this.options.orig[this.prop] = jQuery.style( this.elem, this.prop );
this.options.show = true;
 
// Begin the animation
// Make sure that we start at a small width/height to avoid any
// flash of content
this.custom(this.prop === "width" || this.prop === "height" ? 1 : 0, this.cur());
 
// Start by showing the element
jQuery( this.elem ).show();
},
 
// Simple 'hide' function
hide: function() {
// Remember where we started, so that we can go back to it later
this.options.orig[this.prop] = jQuery.style( this.elem, this.prop );
this.options.hide = true;
 
// Begin the animation
this.custom(this.cur(), 0);
},
 
// Each step of an animation
step: function( gotoEnd ) {
var t = jQuery.now(), done = true;
 
if ( gotoEnd || t >= this.options.duration + this.startTime ) {
this.now = this.end;
this.pos = this.state = 1;
this.update();
 
this.options.curAnim[ this.prop ] = true;
 
for ( var i in this.options.curAnim ) {
if ( this.options.curAnim[i] !== true ) {
done = false;
}
}
 
if ( done ) {
// Reset the overflow
if ( this.options.overflow != null && !jQuery.support.shrinkWrapBlocks ) {
var elem = this.elem,
options = this.options;
 
jQuery.each( [ "", "X", "Y" ], function (index, value) {
elem.style[ "overflow" + value ] = options.overflow[index];
} );
}
 
// Hide the element if the "hide" operation was done
if ( this.options.hide ) {
jQuery(this.elem).hide();
}
 
// Reset the properties, if the item has been hidden or shown
if ( this.options.hide || this.options.show ) {
for ( var p in this.options.curAnim ) {
jQuery.style( this.elem, p, this.options.orig[p] );
}
}
 
// Execute the complete function
this.options.complete.call( this.elem );
}
 
return false;
 
} else {
var n = t - this.startTime;
this.state = n / this.options.duration;
 
// Perform the easing function, defaults to swing
var specialEasing = this.options.specialEasing && this.options.specialEasing[this.prop];
var defaultEasing = this.options.easing || (jQuery.easing.swing ? "swing" : "linear");
this.pos = jQuery.easing[specialEasing || defaultEasing](this.state, n, 0, 1, this.options.duration);
this.now = this.start + ((this.end - this.start) * this.pos);
 
// Perform the next step of the animation
this.update();
}
 
return true;
}
};
 
jQuery.extend( jQuery.fx, {
tick: function() {
var timers = jQuery.timers;
 
for ( var i = 0; i < timers.length; i++ ) {
if ( !timers[i]() ) {
timers.splice(i--, 1);
}
}
 
if ( !timers.length ) {
jQuery.fx.stop();
}
},
 
interval: 13,
 
stop: function() {
clearInterval( timerId );
timerId = null;
},
 
speeds: {
slow: 600,
fast: 200,
// Default speed
_default: 400
},
 
step: {
opacity: function( fx ) {
jQuery.style( fx.elem, "opacity", fx.now );
},
 
_default: function( fx ) {
if ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) {
fx.elem.style[ fx.prop ] = (fx.prop === "width" || fx.prop === "height" ? Math.max(0, fx.now) : fx.now) + fx.unit;
} else {
fx.elem[ fx.prop ] = fx.now;
}
}
}
});
 
if ( jQuery.expr && jQuery.expr.filters ) {
jQuery.expr.filters.animated = function( elem ) {
return jQuery.grep(jQuery.timers, function( fn ) {
return elem === fn.elem;
}).length;
};
}
 
function defaultDisplay( nodeName ) {
if ( !elemdisplay[ nodeName ] ) {
var elem = jQuery("<" + nodeName + ">").appendTo("body"),
display = elem.css("display");
 
elem.remove();
 
if ( display === "none" || display === "" ) {
display = "block";
}
 
elemdisplay[ nodeName ] = display;
}
 
return elemdisplay[ nodeName ];
}
 
 
 
 
var rtable = /^t(?:able|d|h)$/i,
rroot = /^(?:body|html)$/i;
 
if ( "getBoundingClientRect" in document.documentElement ) {
jQuery.fn.offset = function( options ) {
var elem = this[0], box;
 
if ( options ) {
return this.each(function( i ) {
jQuery.offset.setOffset( this, options, i );
});
}
 
if ( !elem || !elem.ownerDocument ) {
return null;
}
 
if ( elem === elem.ownerDocument.body ) {
return jQuery.offset.bodyOffset( elem );
}
 
try {
box = elem.getBoundingClientRect();
} catch(e) {}
 
var doc = elem.ownerDocument,
docElem = doc.documentElement;
 
// Make sure we're not dealing with a disconnected DOM node
if ( !box || !jQuery.contains( docElem, elem ) ) {
return box || { top: 0, left: 0 };
}
 
var body = doc.body,
win = getWindow(doc),
clientTop = docElem.clientTop || body.clientTop || 0,
clientLeft = docElem.clientLeft || body.clientLeft || 0,
scrollTop = (win.pageYOffset || jQuery.support.boxModel && docElem.scrollTop || body.scrollTop ),
scrollLeft = (win.pageXOffset || jQuery.support.boxModel && docElem.scrollLeft || body.scrollLeft),
top = box.top + scrollTop - clientTop,
left = box.left + scrollLeft - clientLeft;
 
return { top: top, left: left };
};
 
} else {
jQuery.fn.offset = function( options ) {
var elem = this[0];
 
if ( options ) {
return this.each(function( i ) {
jQuery.offset.setOffset( this, options, i );
});
}
 
if ( !elem || !elem.ownerDocument ) {
return null;
}
 
if ( elem === elem.ownerDocument.body ) {
return jQuery.offset.bodyOffset( elem );
}
 
jQuery.offset.initialize();
 
var computedStyle,
offsetParent = elem.offsetParent,
prevOffsetParent = elem,
doc = elem.ownerDocument,
docElem = doc.documentElement,
body = doc.body,
defaultView = doc.defaultView,
prevComputedStyle = defaultView ? defaultView.getComputedStyle( elem, null ) : elem.currentStyle,
top = elem.offsetTop,
left = elem.offsetLeft;
 
while ( (elem = elem.parentNode) && elem !== body && elem !== docElem ) {
if ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position === "fixed" ) {
break;
}
 
computedStyle = defaultView ? defaultView.getComputedStyle(elem, null) : elem.currentStyle;
top -= elem.scrollTop;
left -= elem.scrollLeft;
 
if ( elem === offsetParent ) {
top += elem.offsetTop;
left += elem.offsetLeft;
 
if ( jQuery.offset.doesNotAddBorder && !(jQuery.offset.doesAddBorderForTableAndCells && rtable.test(elem.nodeName)) ) {
top += parseFloat( computedStyle.borderTopWidth ) || 0;
left += parseFloat( computedStyle.borderLeftWidth ) || 0;
}
 
prevOffsetParent = offsetParent;
offsetParent = elem.offsetParent;
}
 
if ( jQuery.offset.subtractsBorderForOverflowNotVisible && computedStyle.overflow !== "visible" ) {
top += parseFloat( computedStyle.borderTopWidth ) || 0;
left += parseFloat( computedStyle.borderLeftWidth ) || 0;
}
 
prevComputedStyle = computedStyle;
}
 
if ( prevComputedStyle.position === "relative" || prevComputedStyle.position === "static" ) {
top += body.offsetTop;
left += body.offsetLeft;
}
 
if ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position === "fixed" ) {
top += Math.max( docElem.scrollTop, body.scrollTop );
left += Math.max( docElem.scrollLeft, body.scrollLeft );
}
 
return { top: top, left: left };
};
}
 
jQuery.offset = {
initialize: function() {
var body = document.body, container = document.createElement("div"), innerDiv, checkDiv, table, td, bodyMarginTop = parseFloat( jQuery.css(body, "marginTop") ) || 0,
html = "<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";
 
jQuery.extend( container.style, { position: "absolute", top: 0, left: 0, margin: 0, border: 0, width: "1px", height: "1px", visibility: "hidden" } );
 
container.innerHTML = html;
body.insertBefore( container, body.firstChild );
innerDiv = container.firstChild;
checkDiv = innerDiv.firstChild;
td = innerDiv.nextSibling.firstChild.firstChild;
 
this.doesNotAddBorder = (checkDiv.offsetTop !== 5);
this.doesAddBorderForTableAndCells = (td.offsetTop === 5);
 
checkDiv.style.position = "fixed";
checkDiv.style.top = "20px";
 
// safari subtracts parent border width here which is 5px
this.supportsFixedPosition = (checkDiv.offsetTop === 20 || checkDiv.offsetTop === 15);
checkDiv.style.position = checkDiv.style.top = "";
 
innerDiv.style.overflow = "hidden";
innerDiv.style.position = "relative";
 
this.subtractsBorderForOverflowNotVisible = (checkDiv.offsetTop === -5);
 
this.doesNotIncludeMarginInBodyOffset = (body.offsetTop !== bodyMarginTop);
 
body.removeChild( container );
body = container = innerDiv = checkDiv = table = td = null;
jQuery.offset.initialize = jQuery.noop;
},
 
bodyOffset: function( body ) {
var top = body.offsetTop,
left = body.offsetLeft;
 
jQuery.offset.initialize();
 
if ( jQuery.offset.doesNotIncludeMarginInBodyOffset ) {
top += parseFloat( jQuery.css(body, "marginTop") ) || 0;
left += parseFloat( jQuery.css(body, "marginLeft") ) || 0;
}
 
return { top: top, left: left };
},
setOffset: function( elem, options, i ) {
var position = jQuery.css( elem, "position" );
 
// set position first, in-case top/left are set even on static elem
if ( position === "static" ) {
elem.style.position = "relative";
}
 
var curElem = jQuery( elem ),
curOffset = curElem.offset(),
curCSSTop = jQuery.css( elem, "top" ),
curCSSLeft = jQuery.css( elem, "left" ),
calculatePosition = (position === "absolute" && jQuery.inArray('auto', [curCSSTop, curCSSLeft]) > -1),
props = {}, curPosition = {}, curTop, curLeft;
 
// need to be able to calculate position if either top or left is auto and position is absolute
if ( calculatePosition ) {
curPosition = curElem.position();
}
 
curTop = calculatePosition ? curPosition.top : parseInt( curCSSTop, 10 ) || 0;
curLeft = calculatePosition ? curPosition.left : parseInt( curCSSLeft, 10 ) || 0;
 
if ( jQuery.isFunction( options ) ) {
options = options.call( elem, i, curOffset );
}
 
if (options.top != null) {
props.top = (options.top - curOffset.top) + curTop;
}
if (options.left != null) {
props.left = (options.left - curOffset.left) + curLeft;
}
if ( "using" in options ) {
options.using.call( elem, props );
} else {
curElem.css( props );
}
}
};
 
 
jQuery.fn.extend({
position: function() {
if ( !this[0] ) {
return null;
}
 
var elem = this[0],
 
// Get *real* offsetParent
offsetParent = this.offsetParent(),
 
// Get correct offsets
offset = this.offset(),
parentOffset = rroot.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset();
 
// Subtract element margins
// note: when an element has margin: auto the offsetLeft and marginLeft
// are the same in Safari causing offset.left to incorrectly be 0
offset.top -= parseFloat( jQuery.css(elem, "marginTop") ) || 0;
offset.left -= parseFloat( jQuery.css(elem, "marginLeft") ) || 0;
 
// Add offsetParent borders
parentOffset.top += parseFloat( jQuery.css(offsetParent[0], "borderTopWidth") ) || 0;
parentOffset.left += parseFloat( jQuery.css(offsetParent[0], "borderLeftWidth") ) || 0;
 
// Subtract the two offsets
return {
top: offset.top - parentOffset.top,
left: offset.left - parentOffset.left
};
},
 
offsetParent: function() {
return this.map(function() {
var offsetParent = this.offsetParent || document.body;
while ( offsetParent && (!rroot.test(offsetParent.nodeName) && jQuery.css(offsetParent, "position") === "static") ) {
offsetParent = offsetParent.offsetParent;
}
return offsetParent;
});
}
});
 
 
// Create scrollLeft and scrollTop methods
jQuery.each( ["Left", "Top"], function( i, name ) {
var method = "scroll" + name;
 
jQuery.fn[ method ] = function(val) {
var elem = this[0], win;
if ( !elem ) {
return null;
}
 
if ( val !== undefined ) {
// Set the scroll offset
return this.each(function() {
win = getWindow( this );
 
if ( win ) {
win.scrollTo(
!i ? val : jQuery(win).scrollLeft(),
i ? val : jQuery(win).scrollTop()
);
 
} else {
this[ method ] = val;
}
});
} else {
win = getWindow( elem );
 
// Return the scroll offset
return win ? ("pageXOffset" in win) ? win[ i ? "pageYOffset" : "pageXOffset" ] :
jQuery.support.boxModel && win.document.documentElement[ method ] ||
win.document.body[ method ] :
elem[ method ];
}
};
});
 
function getWindow( elem ) {
return jQuery.isWindow( elem ) ?
elem :
elem.nodeType === 9 ?
elem.defaultView || elem.parentWindow :
false;
}
 
 
 
 
// Create innerHeight, innerWidth, outerHeight and outerWidth methods
jQuery.each([ "Height", "Width" ], function( i, name ) {
 
var type = name.toLowerCase();
 
// innerHeight and innerWidth
jQuery.fn["inner" + name] = function() {
return this[0] ?
parseFloat( jQuery.css( this[0], type, "padding" ) ) :
null;
};
 
// outerHeight and outerWidth
jQuery.fn["outer" + name] = function( margin ) {
return this[0] ?
parseFloat( jQuery.css( this[0], type, margin ? "margin" : "border" ) ) :
null;
};
 
jQuery.fn[ type ] = function( size ) {
// Get window width or height
var elem = this[0];
if ( !elem ) {
return size == null ? null : this;
}
if ( jQuery.isFunction( size ) ) {
return this.each(function( i ) {
var self = jQuery( this );
self[ type ]( size.call( this, i, self[ type ]() ) );
});
}
 
if ( jQuery.isWindow( elem ) ) {
// Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode
return elem.document.compatMode === "CSS1Compat" && elem.document.documentElement[ "client" + name ] ||
elem.document.body[ "client" + name ];
 
// Get document width or height
} else if ( elem.nodeType === 9 ) {
// Either scroll[Width/Height] or offset[Width/Height], whichever is greater
return Math.max(
elem.documentElement["client" + name],
elem.body["scroll" + name], elem.documentElement["scroll" + name],
elem.body["offset" + name], elem.documentElement["offset" + name]
);
 
// Get or set width or height on the element
} else if ( size === undefined ) {
var orig = jQuery.css( elem, type ),
ret = parseFloat( orig );
 
return jQuery.isNaN( ret ) ? orig : ret;
 
// Set the width or height on the element (default to pixels if value is unitless)
} else {
return this.css( type, typeof size === "string" ? size : size + "px" );
}
};
 
});
 
 
})(window);
/trunk/applications/rendu/squelettes/js/jquery_ui/jquery-ui-1.8.9.custom.min.js
New file
0,0 → 1,83
/*!
* jQuery UI 1.8.9
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI
*/
(function(c,j){function k(a){return!c(a).parents().andSelf().filter(function(){return c.curCSS(this,"visibility")==="hidden"||c.expr.filters.hidden(this)}).length}c.ui=c.ui||{};if(!c.ui.version){c.extend(c.ui,{version:"1.8.9",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,
NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});c.fn.extend({_focus:c.fn.focus,focus:function(a,b){return typeof a==="number"?this.each(function(){var d=this;setTimeout(function(){c(d).focus();b&&b.call(d)},a)}):this._focus.apply(this,arguments)},scrollParent:function(){var a;a=c.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(c.curCSS(this,
"position",1))&&/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!a.length?c(document):a},zIndex:function(a){if(a!==j)return this.css("zIndex",a);if(this.length){a=c(this[0]);for(var b;a.length&&a[0]!==document;){b=a.css("position");
if(b==="absolute"||b==="relative"||b==="fixed"){b=parseInt(a.css("zIndex"),10);if(!isNaN(b)&&b!==0)return b}a=a.parent()}}return 0},disableSelection:function(){return this.bind((c.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});c.each(["Width","Height"],function(a,b){function d(f,g,l,m){c.each(e,function(){g-=parseFloat(c.curCSS(f,"padding"+this,true))||0;if(l)g-=parseFloat(c.curCSS(f,
"border"+this+"Width",true))||0;if(m)g-=parseFloat(c.curCSS(f,"margin"+this,true))||0});return g}var e=b==="Width"?["Left","Right"]:["Top","Bottom"],h=b.toLowerCase(),i={innerWidth:c.fn.innerWidth,innerHeight:c.fn.innerHeight,outerWidth:c.fn.outerWidth,outerHeight:c.fn.outerHeight};c.fn["inner"+b]=function(f){if(f===j)return i["inner"+b].call(this);return this.each(function(){c(this).css(h,d(this,f)+"px")})};c.fn["outer"+b]=function(f,g){if(typeof f!=="number")return i["outer"+b].call(this,f);return this.each(function(){c(this).css(h,
d(this,f,true,g)+"px")})}});c.extend(c.expr[":"],{data:function(a,b,d){return!!c.data(a,d[3])},focusable:function(a){var b=a.nodeName.toLowerCase(),d=c.attr(a,"tabindex");if("area"===b){b=a.parentNode;d=b.name;if(!a.href||!d||b.nodeName.toLowerCase()!=="map")return false;a=c("img[usemap=#"+d+"]")[0];return!!a&&k(a)}return(/input|select|textarea|button|object/.test(b)?!a.disabled:"a"==b?a.href||!isNaN(d):!isNaN(d))&&k(a)},tabbable:function(a){var b=c.attr(a,"tabindex");return(isNaN(b)||b>=0)&&c(a).is(":focusable")}});
c(function(){var a=document.body,b=a.appendChild(b=document.createElement("div"));c.extend(b.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});c.support.minHeight=b.offsetHeight===100;c.support.selectstart="onselectstart"in b;a.removeChild(b).style.display="none"});c.extend(c.ui,{plugin:{add:function(a,b,d){a=c.ui[a].prototype;for(var e in d){a.plugins[e]=a.plugins[e]||[];a.plugins[e].push([b,d[e]])}},call:function(a,b,d){if((b=a.plugins[b])&&a.element[0].parentNode)for(var e=0;e<b.length;e++)a.options[b[e][0]]&&
b[e][1].apply(a.element,d)}},contains:function(a,b){return document.compareDocumentPosition?a.compareDocumentPosition(b)&16:a!==b&&a.contains(b)},hasScroll:function(a,b){if(c(a).css("overflow")==="hidden")return false;b=b&&b==="left"?"scrollLeft":"scrollTop";var d=false;if(a[b]>0)return true;a[b]=1;d=a[b]>0;a[b]=0;return d},isOverAxis:function(a,b,d){return a>b&&a<b+d},isOver:function(a,b,d,e,h,i){return c.ui.isOverAxis(a,d,h)&&c.ui.isOverAxis(b,e,i)}})}})(jQuery);
;/*!
* jQuery UI Widget 1.8.9
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Widget
*/
(function(b,j){if(b.cleanData){var k=b.cleanData;b.cleanData=function(a){for(var c=0,d;(d=a[c])!=null;c++)b(d).triggerHandler("remove");k(a)}}else{var l=b.fn.remove;b.fn.remove=function(a,c){return this.each(function(){if(!c)if(!a||b.filter(a,[this]).length)b("*",this).add([this]).each(function(){b(this).triggerHandler("remove")});return l.call(b(this),a,c)})}}b.widget=function(a,c,d){var e=a.split(".")[0],f;a=a.split(".")[1];f=e+"-"+a;if(!d){d=c;c=b.Widget}b.expr[":"][f]=function(h){return!!b.data(h,
a)};b[e]=b[e]||{};b[e][a]=function(h,g){arguments.length&&this._createWidget(h,g)};c=new c;c.options=b.extend(true,{},c.options);b[e][a].prototype=b.extend(true,c,{namespace:e,widgetName:a,widgetEventPrefix:b[e][a].prototype.widgetEventPrefix||a,widgetBaseClass:f},d);b.widget.bridge(a,b[e][a])};b.widget.bridge=function(a,c){b.fn[a]=function(d){var e=typeof d==="string",f=Array.prototype.slice.call(arguments,1),h=this;d=!e&&f.length?b.extend.apply(null,[true,d].concat(f)):d;if(e&&d.charAt(0)==="_")return h;
e?this.each(function(){var g=b.data(this,a),i=g&&b.isFunction(g[d])?g[d].apply(g,f):g;if(i!==g&&i!==j){h=i;return false}}):this.each(function(){var g=b.data(this,a);g?g.option(d||{})._init():b.data(this,a,new c(d,this))});return h}};b.Widget=function(a,c){arguments.length&&this._createWidget(a,c)};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(a,c){b.data(c,this.widgetName,this);this.element=b(c);this.options=b.extend(true,{},this.options,
this._getCreateOptions(),a);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},
widget:function(){return this.element},option:function(a,c){var d=a;if(arguments.length===0)return b.extend({},this.options);if(typeof a==="string"){if(c===j)return this.options[a];d={};d[a]=c}this._setOptions(d);return this},_setOptions:function(a){var c=this;b.each(a,function(d,e){c._setOption(d,e)});return this},_setOption:function(a,c){this.options[a]=c;if(a==="disabled")this.widget()[c?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",c);return this},
enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(a,c,d){var e=this.options[a];c=b.Event(c);c.type=(a===this.widgetEventPrefix?a:this.widgetEventPrefix+a).toLowerCase();d=d||{};if(c.originalEvent){a=b.event.props.length;for(var f;a;){f=b.event.props[--a];c[f]=c.originalEvent[f]}}this.element.trigger(c,d);return!(b.isFunction(e)&&e.call(this.element[0],c,d)===false||c.isDefaultPrevented())}}})(jQuery);
;/*!
* jQuery UI Mouse 1.8.9
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Mouse
*
* Depends:
* jquery.ui.widget.js
*/
(function(c){c.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var a=this;this.element.bind("mousedown."+this.widgetName,function(b){return a._mouseDown(b)}).bind("click."+this.widgetName,function(b){if(true===c.data(b.target,a.widgetName+".preventClickEvent")){c.removeData(b.target,a.widgetName+".preventClickEvent");b.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(a){a.originalEvent=
a.originalEvent||{};if(!a.originalEvent.mouseHandled){this._mouseStarted&&this._mouseUp(a);this._mouseDownEvent=a;var b=this,e=a.which==1,f=typeof this.options.cancel=="string"?c(a.target).parents().add(a.target).filter(this.options.cancel).length:false;if(!e||f||!this._mouseCapture(a))return true;this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet)this._mouseDelayTimer=setTimeout(function(){b.mouseDelayMet=true},this.options.delay);if(this._mouseDistanceMet(a)&&this._mouseDelayMet(a)){this._mouseStarted=
this._mouseStart(a)!==false;if(!this._mouseStarted){a.preventDefault();return true}}this._mouseMoveDelegate=function(d){return b._mouseMove(d)};this._mouseUpDelegate=function(d){return b._mouseUp(d)};c(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);a.preventDefault();return a.originalEvent.mouseHandled=true}},_mouseMove:function(a){if(c.browser.msie&&!(document.documentMode>=9)&&!a.button)return this._mouseUp(a);if(this._mouseStarted){this._mouseDrag(a);
return a.preventDefault()}if(this._mouseDistanceMet(a)&&this._mouseDelayMet(a))(this._mouseStarted=this._mouseStart(this._mouseDownEvent,a)!==false)?this._mouseDrag(a):this._mouseUp(a);return!this._mouseStarted},_mouseUp:function(a){c(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;a.target==this._mouseDownEvent.target&&c.data(a.target,this.widgetName+".preventClickEvent",
true);this._mouseStop(a)}return false},_mouseDistanceMet:function(a){return Math.max(Math.abs(this._mouseDownEvent.pageX-a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return true}})})(jQuery);
;/*
* jQuery UI Slider 1.8.9
*
* Copyright 2011, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Slider
*
* Depends:
* jquery.ui.core.js
* jquery.ui.mouse.js
* jquery.ui.widget.js
*/
(function(d){d.widget("ui.slider",d.ui.mouse,{widgetEventPrefix:"slide",options:{animate:false,distance:0,max:100,min:0,orientation:"horizontal",range:false,step:1,value:0,values:null},_create:function(){var b=this,a=this.options;this._mouseSliding=this._keySliding=false;this._animateOff=true;this._handleIndex=null;this._detectOrientation();this._mouseInit();this.element.addClass("ui-slider ui-slider-"+this.orientation+" ui-widget ui-widget-content ui-corner-all");a.disabled&&this.element.addClass("ui-slider-disabled ui-disabled");
this.range=d([]);if(a.range){if(a.range===true){this.range=d("<div></div>");if(!a.values)a.values=[this._valueMin(),this._valueMin()];if(a.values.length&&a.values.length!==2)a.values=[a.values[0],a.values[0]]}else this.range=d("<div></div>");this.range.appendTo(this.element).addClass("ui-slider-range");if(a.range==="min"||a.range==="max")this.range.addClass("ui-slider-range-"+a.range);this.range.addClass("ui-widget-header")}d(".ui-slider-handle",this.element).length===0&&d("<a href='#'></a>").appendTo(this.element).addClass("ui-slider-handle");
if(a.values&&a.values.length)for(;d(".ui-slider-handle",this.element).length<a.values.length;)d("<a href='#'></a>").appendTo(this.element).addClass("ui-slider-handle");this.handles=d(".ui-slider-handle",this.element).addClass("ui-state-default ui-corner-all");this.handle=this.handles.eq(0);this.handles.add(this.range).filter("a").click(function(c){c.preventDefault()}).hover(function(){a.disabled||d(this).addClass("ui-state-hover")},function(){d(this).removeClass("ui-state-hover")}).focus(function(){if(a.disabled)d(this).blur();
else{d(".ui-slider .ui-state-focus").removeClass("ui-state-focus");d(this).addClass("ui-state-focus")}}).blur(function(){d(this).removeClass("ui-state-focus")});this.handles.each(function(c){d(this).data("index.ui-slider-handle",c)});this.handles.keydown(function(c){var e=true,f=d(this).data("index.ui-slider-handle"),h,g,i;if(!b.options.disabled){switch(c.keyCode){case d.ui.keyCode.HOME:case d.ui.keyCode.END:case d.ui.keyCode.PAGE_UP:case d.ui.keyCode.PAGE_DOWN:case d.ui.keyCode.UP:case d.ui.keyCode.RIGHT:case d.ui.keyCode.DOWN:case d.ui.keyCode.LEFT:e=
false;if(!b._keySliding){b._keySliding=true;d(this).addClass("ui-state-active");h=b._start(c,f);if(h===false)return}break}i=b.options.step;h=b.options.values&&b.options.values.length?(g=b.values(f)):(g=b.value());switch(c.keyCode){case d.ui.keyCode.HOME:g=b._valueMin();break;case d.ui.keyCode.END:g=b._valueMax();break;case d.ui.keyCode.PAGE_UP:g=b._trimAlignValue(h+(b._valueMax()-b._valueMin())/5);break;case d.ui.keyCode.PAGE_DOWN:g=b._trimAlignValue(h-(b._valueMax()-b._valueMin())/5);break;case d.ui.keyCode.UP:case d.ui.keyCode.RIGHT:if(h===
b._valueMax())return;g=b._trimAlignValue(h+i);break;case d.ui.keyCode.DOWN:case d.ui.keyCode.LEFT:if(h===b._valueMin())return;g=b._trimAlignValue(h-i);break}b._slide(c,f,g);return e}}).keyup(function(c){var e=d(this).data("index.ui-slider-handle");if(b._keySliding){b._keySliding=false;b._stop(c,e);b._change(c,e);d(this).removeClass("ui-state-active")}});this._refreshValue();this._animateOff=false},destroy:function(){this.handles.remove();this.range.remove();this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider");
this._mouseDestroy();return this},_mouseCapture:function(b){var a=this.options,c,e,f,h,g;if(a.disabled)return false;this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()};this.elementOffset=this.element.offset();c=this._normValueFromMouse({x:b.pageX,y:b.pageY});e=this._valueMax()-this._valueMin()+1;h=this;this.handles.each(function(i){var j=Math.abs(c-h.values(i));if(e>j){e=j;f=d(this);g=i}});if(a.range===true&&this.values(1)===a.min){g+=1;f=d(this.handles[g])}if(this._start(b,
g)===false)return false;this._mouseSliding=true;h._handleIndex=g;f.addClass("ui-state-active").focus();a=f.offset();this._clickOffset=!d(b.target).parents().andSelf().is(".ui-slider-handle")?{left:0,top:0}:{left:b.pageX-a.left-f.width()/2,top:b.pageY-a.top-f.height()/2-(parseInt(f.css("borderTopWidth"),10)||0)-(parseInt(f.css("borderBottomWidth"),10)||0)+(parseInt(f.css("marginTop"),10)||0)};this.handles.hasClass("ui-state-hover")||this._slide(b,g,c);return this._animateOff=true},_mouseStart:function(){return true},
_mouseDrag:function(b){var a=this._normValueFromMouse({x:b.pageX,y:b.pageY});this._slide(b,this._handleIndex,a);return false},_mouseStop:function(b){this.handles.removeClass("ui-state-active");this._mouseSliding=false;this._stop(b,this._handleIndex);this._change(b,this._handleIndex);this._clickOffset=this._handleIndex=null;return this._animateOff=false},_detectOrientation:function(){this.orientation=this.options.orientation==="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(b){var a;
if(this.orientation==="horizontal"){a=this.elementSize.width;b=b.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)}else{a=this.elementSize.height;b=b.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)}a=b/a;if(a>1)a=1;if(a<0)a=0;if(this.orientation==="vertical")a=1-a;b=this._valueMax()-this._valueMin();return this._trimAlignValue(this._valueMin()+a*b)},_start:function(b,a){var c={handle:this.handles[a],value:this.value()};if(this.options.values&&this.options.values.length){c.value=
this.values(a);c.values=this.values()}return this._trigger("start",b,c)},_slide:function(b,a,c){var e;if(this.options.values&&this.options.values.length){e=this.values(a?0:1);if(this.options.values.length===2&&this.options.range===true&&(a===0&&c>e||a===1&&c<e))c=e;if(c!==this.values(a)){e=this.values();e[a]=c;b=this._trigger("slide",b,{handle:this.handles[a],value:c,values:e});this.values(a?0:1);b!==false&&this.values(a,c,true)}}else if(c!==this.value()){b=this._trigger("slide",b,{handle:this.handles[a],
value:c});b!==false&&this.value(c)}},_stop:function(b,a){var c={handle:this.handles[a],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(a);c.values=this.values()}this._trigger("stop",b,c)},_change:function(b,a){if(!this._keySliding&&!this._mouseSliding){var c={handle:this.handles[a],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(a);c.values=this.values()}this._trigger("change",b,c)}},value:function(b){if(arguments.length){this.options.value=
this._trimAlignValue(b);this._refreshValue();this._change(null,0)}return this._value()},values:function(b,a){var c,e,f;if(arguments.length>1){this.options.values[b]=this._trimAlignValue(a);this._refreshValue();this._change(null,b)}if(arguments.length)if(d.isArray(arguments[0])){c=this.options.values;e=arguments[0];for(f=0;f<c.length;f+=1){c[f]=this._trimAlignValue(e[f]);this._change(null,f)}this._refreshValue()}else return this.options.values&&this.options.values.length?this._values(b):this.value();
else return this._values()},_setOption:function(b,a){var c,e=0;if(d.isArray(this.options.values))e=this.options.values.length;d.Widget.prototype._setOption.apply(this,arguments);switch(b){case "disabled":if(a){this.handles.filter(".ui-state-focus").blur();this.handles.removeClass("ui-state-hover");this.handles.attr("disabled","disabled");this.element.addClass("ui-disabled")}else{this.handles.removeAttr("disabled");this.element.removeClass("ui-disabled")}break;case "orientation":this._detectOrientation();
this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation);this._refreshValue();break;case "value":this._animateOff=true;this._refreshValue();this._change(null,0);this._animateOff=false;break;case "values":this._animateOff=true;this._refreshValue();for(c=0;c<e;c+=1)this._change(null,c);this._animateOff=false;break}},_value:function(){var b=this.options.value;return b=this._trimAlignValue(b)},_values:function(b){var a,c;if(arguments.length){a=this.options.values[b];
return a=this._trimAlignValue(a)}else{a=this.options.values.slice();for(c=0;c<a.length;c+=1)a[c]=this._trimAlignValue(a[c]);return a}},_trimAlignValue:function(b){if(b<=this._valueMin())return this._valueMin();if(b>=this._valueMax())return this._valueMax();var a=this.options.step>0?this.options.step:1,c=(b-this._valueMin())%a;alignValue=b-c;if(Math.abs(c)*2>=a)alignValue+=c>0?a:-a;return parseFloat(alignValue.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},
_refreshValue:function(){var b=this.options.range,a=this.options,c=this,e=!this._animateOff?a.animate:false,f,h={},g,i,j,l;if(this.options.values&&this.options.values.length)this.handles.each(function(k){f=(c.values(k)-c._valueMin())/(c._valueMax()-c._valueMin())*100;h[c.orientation==="horizontal"?"left":"bottom"]=f+"%";d(this).stop(1,1)[e?"animate":"css"](h,a.animate);if(c.options.range===true)if(c.orientation==="horizontal"){if(k===0)c.range.stop(1,1)[e?"animate":"css"]({left:f+"%"},a.animate);
if(k===1)c.range[e?"animate":"css"]({width:f-g+"%"},{queue:false,duration:a.animate})}else{if(k===0)c.range.stop(1,1)[e?"animate":"css"]({bottom:f+"%"},a.animate);if(k===1)c.range[e?"animate":"css"]({height:f-g+"%"},{queue:false,duration:a.animate})}g=f});else{i=this.value();j=this._valueMin();l=this._valueMax();f=l!==j?(i-j)/(l-j)*100:0;h[c.orientation==="horizontal"?"left":"bottom"]=f+"%";this.handle.stop(1,1)[e?"animate":"css"](h,a.animate);if(b==="min"&&this.orientation==="horizontal")this.range.stop(1,
1)[e?"animate":"css"]({width:f+"%"},a.animate);if(b==="max"&&this.orientation==="horizontal")this.range[e?"animate":"css"]({width:100-f+"%"},{queue:false,duration:a.animate});if(b==="min"&&this.orientation==="vertical")this.range.stop(1,1)[e?"animate":"css"]({height:f+"%"},a.animate);if(b==="max"&&this.orientation==="vertical")this.range[e?"animate":"css"]({height:100-f+"%"},{queue:false,duration:a.animate})}}});d.extend(d.ui.slider,{version:"1.8.9"})})(jQuery);
;
/trunk/applications/rendu/squelettes/js/jquery-1.4.4.min.js
New file
0,0 → 1,167
/*!
* jQuery JavaScript Library v1.4.4
* http://jquery.com/
*
* Copyright 2010, John Resig
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* Includes Sizzle.js
* http://sizzlejs.com/
* Copyright 2010, The Dojo Foundation
* Released under the MIT, BSD, and GPL Licenses.
*
* Date: Thu Nov 11 19:04:53 2010 -0500
*/
(function(E,B){function ka(a,b,d){if(d===B&&a.nodeType===1){d=a.getAttribute("data-"+b);if(typeof d==="string"){try{d=d==="true"?true:d==="false"?false:d==="null"?null:!c.isNaN(d)?parseFloat(d):Ja.test(d)?c.parseJSON(d):d}catch(e){}c.data(a,b,d)}else d=B}return d}function U(){return false}function ca(){return true}function la(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function Ka(a){var b,d,e,f,h,l,k,o,x,r,A,C=[];f=[];h=c.data(this,this.nodeType?"events":"__events__");if(typeof h==="function")h=
h.events;if(!(a.liveFired===this||!h||!h.live||a.button&&a.type==="click")){if(a.namespace)A=RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)");a.liveFired=this;var J=h.live.slice(0);for(k=0;k<J.length;k++){h=J[k];h.origType.replace(X,"")===a.type?f.push(h.selector):J.splice(k--,1)}f=c(a.target).closest(f,a.currentTarget);o=0;for(x=f.length;o<x;o++){r=f[o];for(k=0;k<J.length;k++){h=J[k];if(r.selector===h.selector&&(!A||A.test(h.namespace))){l=r.elem;e=null;if(h.preType==="mouseenter"||
h.preType==="mouseleave"){a.type=h.preType;e=c(a.relatedTarget).closest(h.selector)[0]}if(!e||e!==l)C.push({elem:l,handleObj:h,level:r.level})}}}o=0;for(x=C.length;o<x;o++){f=C[o];if(d&&f.level>d)break;a.currentTarget=f.elem;a.data=f.handleObj.data;a.handleObj=f.handleObj;A=f.handleObj.origHandler.apply(f.elem,arguments);if(A===false||a.isPropagationStopped()){d=f.level;if(A===false)b=false;if(a.isImmediatePropagationStopped())break}}return b}}function Y(a,b){return(a&&a!=="*"?a+".":"")+b.replace(La,
"`").replace(Ma,"&")}function ma(a,b,d){if(c.isFunction(b))return c.grep(a,function(f,h){return!!b.call(f,h,f)===d});else if(b.nodeType)return c.grep(a,function(f){return f===b===d});else if(typeof b==="string"){var e=c.grep(a,function(f){return f.nodeType===1});if(Na.test(b))return c.filter(b,e,!d);else b=c.filter(b,e)}return c.grep(a,function(f){return c.inArray(f,b)>=0===d})}function na(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var e=c.data(a[d++]),f=c.data(this,
e);if(e=e&&e.events){delete f.handle;f.events={};for(var h in e)for(var l in e[h])c.event.add(this,h,e[h][l],e[h][l].data)}}})}function Oa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function oa(a,b,d){var e=b==="width"?a.offsetWidth:a.offsetHeight;if(d==="border")return e;c.each(b==="width"?Pa:Qa,function(){d||(e-=parseFloat(c.css(a,"padding"+this))||0);if(d==="margin")e+=parseFloat(c.css(a,
"margin"+this))||0;else e-=parseFloat(c.css(a,"border"+this+"Width"))||0});return e}function da(a,b,d,e){if(c.isArray(b)&&b.length)c.each(b,function(f,h){d||Ra.test(a)?e(a,h):da(a+"["+(typeof h==="object"||c.isArray(h)?f:"")+"]",h,d,e)});else if(!d&&b!=null&&typeof b==="object")c.isEmptyObject(b)?e(a,""):c.each(b,function(f,h){da(a+"["+f+"]",h,d,e)});else e(a,b)}function S(a,b){var d={};c.each(pa.concat.apply([],pa.slice(0,b)),function(){d[this]=a});return d}function qa(a){if(!ea[a]){var b=c("<"+
a+">").appendTo("body"),d=b.css("display");b.remove();if(d==="none"||d==="")d="block";ea[a]=d}return ea[a]}function fa(a){return c.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var t=E.document,c=function(){function a(){if(!b.isReady){try{t.documentElement.doScroll("left")}catch(j){setTimeout(a,1);return}b.ready()}}var b=function(j,s){return new b.fn.init(j,s)},d=E.jQuery,e=E.$,f,h=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/,l=/\S/,k=/^\s+/,o=/\s+$/,x=/\W/,r=/\d/,A=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,
C=/^[\],:{}\s]*$/,J=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,w=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,I=/(?:^|:|,)(?:\s*\[)+/g,L=/(webkit)[ \/]([\w.]+)/,g=/(opera)(?:.*version)?[ \/]([\w.]+)/,i=/(msie) ([\w.]+)/,n=/(mozilla)(?:.*? rv:([\w.]+))?/,m=navigator.userAgent,p=false,q=[],u,y=Object.prototype.toString,F=Object.prototype.hasOwnProperty,M=Array.prototype.push,N=Array.prototype.slice,O=String.prototype.trim,D=Array.prototype.indexOf,R={};b.fn=b.prototype={init:function(j,
s){var v,z,H;if(!j)return this;if(j.nodeType){this.context=this[0]=j;this.length=1;return this}if(j==="body"&&!s&&t.body){this.context=t;this[0]=t.body;this.selector="body";this.length=1;return this}if(typeof j==="string")if((v=h.exec(j))&&(v[1]||!s))if(v[1]){H=s?s.ownerDocument||s:t;if(z=A.exec(j))if(b.isPlainObject(s)){j=[t.createElement(z[1])];b.fn.attr.call(j,s,true)}else j=[H.createElement(z[1])];else{z=b.buildFragment([v[1]],[H]);j=(z.cacheable?z.fragment.cloneNode(true):z.fragment).childNodes}return b.merge(this,
j)}else{if((z=t.getElementById(v[2]))&&z.parentNode){if(z.id!==v[2])return f.find(j);this.length=1;this[0]=z}this.context=t;this.selector=j;return this}else if(!s&&!x.test(j)){this.selector=j;this.context=t;j=t.getElementsByTagName(j);return b.merge(this,j)}else return!s||s.jquery?(s||f).find(j):b(s).find(j);else if(b.isFunction(j))return f.ready(j);if(j.selector!==B){this.selector=j.selector;this.context=j.context}return b.makeArray(j,this)},selector:"",jquery:"1.4.4",length:0,size:function(){return this.length},
toArray:function(){return N.call(this,0)},get:function(j){return j==null?this.toArray():j<0?this.slice(j)[0]:this[j]},pushStack:function(j,s,v){var z=b();b.isArray(j)?M.apply(z,j):b.merge(z,j);z.prevObject=this;z.context=this.context;if(s==="find")z.selector=this.selector+(this.selector?" ":"")+v;else if(s)z.selector=this.selector+"."+s+"("+v+")";return z},each:function(j,s){return b.each(this,j,s)},ready:function(j){b.bindReady();if(b.isReady)j.call(t,b);else q&&q.push(j);return this},eq:function(j){return j===
-1?this.slice(j):this.slice(j,+j+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(N.apply(this,arguments),"slice",N.call(arguments).join(","))},map:function(j){return this.pushStack(b.map(this,function(s,v){return j.call(s,v,s)}))},end:function(){return this.prevObject||b(null)},push:M,sort:[].sort,splice:[].splice};b.fn.init.prototype=b.fn;b.extend=b.fn.extend=function(){var j,s,v,z,H,G=arguments[0]||{},K=1,Q=arguments.length,ga=false;
if(typeof G==="boolean"){ga=G;G=arguments[1]||{};K=2}if(typeof G!=="object"&&!b.isFunction(G))G={};if(Q===K){G=this;--K}for(;K<Q;K++)if((j=arguments[K])!=null)for(s in j){v=G[s];z=j[s];if(G!==z)if(ga&&z&&(b.isPlainObject(z)||(H=b.isArray(z)))){if(H){H=false;v=v&&b.isArray(v)?v:[]}else v=v&&b.isPlainObject(v)?v:{};G[s]=b.extend(ga,v,z)}else if(z!==B)G[s]=z}return G};b.extend({noConflict:function(j){E.$=e;if(j)E.jQuery=d;return b},isReady:false,readyWait:1,ready:function(j){j===true&&b.readyWait--;
if(!b.readyWait||j!==true&&!b.isReady){if(!t.body)return setTimeout(b.ready,1);b.isReady=true;if(!(j!==true&&--b.readyWait>0))if(q){var s=0,v=q;for(q=null;j=v[s++];)j.call(t,b);b.fn.trigger&&b(t).trigger("ready").unbind("ready")}}},bindReady:function(){if(!p){p=true;if(t.readyState==="complete")return setTimeout(b.ready,1);if(t.addEventListener){t.addEventListener("DOMContentLoaded",u,false);E.addEventListener("load",b.ready,false)}else if(t.attachEvent){t.attachEvent("onreadystatechange",u);E.attachEvent("onload",
b.ready);var j=false;try{j=E.frameElement==null}catch(s){}t.documentElement.doScroll&&j&&a()}}},isFunction:function(j){return b.type(j)==="function"},isArray:Array.isArray||function(j){return b.type(j)==="array"},isWindow:function(j){return j&&typeof j==="object"&&"setInterval"in j},isNaN:function(j){return j==null||!r.test(j)||isNaN(j)},type:function(j){return j==null?String(j):R[y.call(j)]||"object"},isPlainObject:function(j){if(!j||b.type(j)!=="object"||j.nodeType||b.isWindow(j))return false;if(j.constructor&&
!F.call(j,"constructor")&&!F.call(j.constructor.prototype,"isPrototypeOf"))return false;for(var s in j);return s===B||F.call(j,s)},isEmptyObject:function(j){for(var s in j)return false;return true},error:function(j){throw j;},parseJSON:function(j){if(typeof j!=="string"||!j)return null;j=b.trim(j);if(C.test(j.replace(J,"@").replace(w,"]").replace(I,"")))return E.JSON&&E.JSON.parse?E.JSON.parse(j):(new Function("return "+j))();else b.error("Invalid JSON: "+j)},noop:function(){},globalEval:function(j){if(j&&
l.test(j)){var s=t.getElementsByTagName("head")[0]||t.documentElement,v=t.createElement("script");v.type="text/javascript";if(b.support.scriptEval)v.appendChild(t.createTextNode(j));else v.text=j;s.insertBefore(v,s.firstChild);s.removeChild(v)}},nodeName:function(j,s){return j.nodeName&&j.nodeName.toUpperCase()===s.toUpperCase()},each:function(j,s,v){var z,H=0,G=j.length,K=G===B||b.isFunction(j);if(v)if(K)for(z in j){if(s.apply(j[z],v)===false)break}else for(;H<G;){if(s.apply(j[H++],v)===false)break}else if(K)for(z in j){if(s.call(j[z],
z,j[z])===false)break}else for(v=j[0];H<G&&s.call(v,H,v)!==false;v=j[++H]);return j},trim:O?function(j){return j==null?"":O.call(j)}:function(j){return j==null?"":j.toString().replace(k,"").replace(o,"")},makeArray:function(j,s){var v=s||[];if(j!=null){var z=b.type(j);j.length==null||z==="string"||z==="function"||z==="regexp"||b.isWindow(j)?M.call(v,j):b.merge(v,j)}return v},inArray:function(j,s){if(s.indexOf)return s.indexOf(j);for(var v=0,z=s.length;v<z;v++)if(s[v]===j)return v;return-1},merge:function(j,
s){var v=j.length,z=0;if(typeof s.length==="number")for(var H=s.length;z<H;z++)j[v++]=s[z];else for(;s[z]!==B;)j[v++]=s[z++];j.length=v;return j},grep:function(j,s,v){var z=[],H;v=!!v;for(var G=0,K=j.length;G<K;G++){H=!!s(j[G],G);v!==H&&z.push(j[G])}return z},map:function(j,s,v){for(var z=[],H,G=0,K=j.length;G<K;G++){H=s(j[G],G,v);if(H!=null)z[z.length]=H}return z.concat.apply([],z)},guid:1,proxy:function(j,s,v){if(arguments.length===2)if(typeof s==="string"){v=j;j=v[s];s=B}else if(s&&!b.isFunction(s)){v=
s;s=B}if(!s&&j)s=function(){return j.apply(v||this,arguments)};if(j)s.guid=j.guid=j.guid||s.guid||b.guid++;return s},access:function(j,s,v,z,H,G){var K=j.length;if(typeof s==="object"){for(var Q in s)b.access(j,Q,s[Q],z,H,v);return j}if(v!==B){z=!G&&z&&b.isFunction(v);for(Q=0;Q<K;Q++)H(j[Q],s,z?v.call(j[Q],Q,H(j[Q],s)):v,G);return j}return K?H(j[0],s):B},now:function(){return(new Date).getTime()},uaMatch:function(j){j=j.toLowerCase();j=L.exec(j)||g.exec(j)||i.exec(j)||j.indexOf("compatible")<0&&n.exec(j)||
[];return{browser:j[1]||"",version:j[2]||"0"}},browser:{}});b.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(j,s){R["[object "+s+"]"]=s.toLowerCase()});m=b.uaMatch(m);if(m.browser){b.browser[m.browser]=true;b.browser.version=m.version}if(b.browser.webkit)b.browser.safari=true;if(D)b.inArray=function(j,s){return D.call(s,j)};if(!/\s/.test("\u00a0")){k=/^[\s\xA0]+/;o=/[\s\xA0]+$/}f=b(t);if(t.addEventListener)u=function(){t.removeEventListener("DOMContentLoaded",u,
false);b.ready()};else if(t.attachEvent)u=function(){if(t.readyState==="complete"){t.detachEvent("onreadystatechange",u);b.ready()}};return E.jQuery=E.$=b}();(function(){c.support={};var a=t.documentElement,b=t.createElement("script"),d=t.createElement("div"),e="script"+c.now();d.style.display="none";d.innerHTML=" <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";var f=d.getElementsByTagName("*"),h=d.getElementsByTagName("a")[0],l=t.createElement("select"),
k=l.appendChild(t.createElement("option"));if(!(!f||!f.length||!h)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(h.getAttribute("style")),hrefNormalized:h.getAttribute("href")==="/a",opacity:/^0.55$/.test(h.style.opacity),cssFloat:!!h.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:k.selected,deleteExpando:true,optDisabled:false,checkClone:false,
scriptEval:false,noCloneEvent:true,boxModel:null,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableHiddenOffsets:true};l.disabled=true;c.support.optDisabled=!k.disabled;b.type="text/javascript";try{b.appendChild(t.createTextNode("window."+e+"=1;"))}catch(o){}a.insertBefore(b,a.firstChild);if(E[e]){c.support.scriptEval=true;delete E[e]}try{delete b.test}catch(x){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function r(){c.support.noCloneEvent=
false;d.detachEvent("onclick",r)});d.cloneNode(true).fireEvent("onclick")}d=t.createElement("div");d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";a=t.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var r=t.createElement("div");r.style.width=r.style.paddingLeft="1px";t.body.appendChild(r);c.boxModel=c.support.boxModel=r.offsetWidth===2;if("zoom"in r.style){r.style.display="inline";r.style.zoom=
1;c.support.inlineBlockNeedsLayout=r.offsetWidth===2;r.style.display="";r.innerHTML="<div style='width:4px;'></div>";c.support.shrinkWrapBlocks=r.offsetWidth!==2}r.innerHTML="<table><tr><td style='padding:0;display:none'></td><td>t</td></tr></table>";var A=r.getElementsByTagName("td");c.support.reliableHiddenOffsets=A[0].offsetHeight===0;A[0].style.display="";A[1].style.display="none";c.support.reliableHiddenOffsets=c.support.reliableHiddenOffsets&&A[0].offsetHeight===0;r.innerHTML="";t.body.removeChild(r).style.display=
"none"});a=function(r){var A=t.createElement("div");r="on"+r;var C=r in A;if(!C){A.setAttribute(r,"return;");C=typeof A[r]==="function"}return C};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=f=h=null}})();var ra={},Ja=/^(?:\{.*\}|\[.*\])$/;c.extend({cache:{},uuid:0,expando:"jQuery"+c.now(),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},data:function(a,b,d){if(c.acceptData(a)){a=a==E?ra:a;var e=a.nodeType,f=e?a[c.expando]:null,h=
c.cache;if(!(e&&!f&&typeof b==="string"&&d===B)){if(e)f||(a[c.expando]=f=++c.uuid);else h=a;if(typeof b==="object")if(e)h[f]=c.extend(h[f],b);else c.extend(h,b);else if(e&&!h[f])h[f]={};a=e?h[f]:h;if(d!==B)a[b]=d;return typeof b==="string"?a[b]:a}}},removeData:function(a,b){if(c.acceptData(a)){a=a==E?ra:a;var d=a.nodeType,e=d?a[c.expando]:a,f=c.cache,h=d?f[e]:e;if(b){if(h){delete h[b];d&&c.isEmptyObject(h)&&c.removeData(a)}}else if(d&&c.support.deleteExpando)delete a[c.expando];else if(a.removeAttribute)a.removeAttribute(c.expando);
else if(d)delete f[e];else for(var l in a)delete a[l]}},acceptData:function(a){if(a.nodeName){var b=c.noData[a.nodeName.toLowerCase()];if(b)return!(b===true||a.getAttribute("classid")!==b)}return true}});c.fn.extend({data:function(a,b){var d=null;if(typeof a==="undefined"){if(this.length){var e=this[0].attributes,f;d=c.data(this[0]);for(var h=0,l=e.length;h<l;h++){f=e[h].name;if(f.indexOf("data-")===0){f=f.substr(5);ka(this[0],f,d[f])}}}return d}else if(typeof a==="object")return this.each(function(){c.data(this,
a)});var k=a.split(".");k[1]=k[1]?"."+k[1]:"";if(b===B){d=this.triggerHandler("getData"+k[1]+"!",[k[0]]);if(d===B&&this.length){d=c.data(this[0],a);d=ka(this[0],a,d)}return d===B&&k[1]?this.data(k[0]):d}else return this.each(function(){var o=c(this),x=[k[0],b];o.triggerHandler("setData"+k[1]+"!",x);c.data(this,a,b);o.triggerHandler("changeData"+k[1]+"!",x)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var e=
c.data(a,b);if(!d)return e||[];if(!e||c.isArray(d))e=c.data(a,b,c.makeArray(d));else e.push(d);return e}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),e=d.shift();if(e==="inprogress")e=d.shift();if(e){b==="fx"&&d.unshift("inprogress");e.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===B)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,
a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var sa=/[\n\t]/g,ha=/\s+/,Sa=/\r/g,Ta=/^(?:href|src|style)$/,Ua=/^(?:button|input)$/i,Va=/^(?:button|input|object|select|textarea)$/i,Wa=/^a(?:rea)?$/i,ta=/^(?:radio|checkbox)$/i;c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",
colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};c.fn.extend({attr:function(a,b){return c.access(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(x){var r=c(this);r.addClass(a.call(this,x,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ha),d=0,e=this.length;d<e;d++){var f=this[d];if(f.nodeType===
1)if(f.className){for(var h=" "+f.className+" ",l=f.className,k=0,o=b.length;k<o;k++)if(h.indexOf(" "+b[k]+" ")<0)l+=" "+b[k];f.className=c.trim(l)}else f.className=a}return this},removeClass:function(a){if(c.isFunction(a))return this.each(function(o){var x=c(this);x.removeClass(a.call(this,o,x.attr("class")))});if(a&&typeof a==="string"||a===B)for(var b=(a||"").split(ha),d=0,e=this.length;d<e;d++){var f=this[d];if(f.nodeType===1&&f.className)if(a){for(var h=(" "+f.className+" ").replace(sa," "),
l=0,k=b.length;l<k;l++)h=h.replace(" "+b[l]+" "," ");f.className=c.trim(h)}else f.className=""}return this},toggleClass:function(a,b){var d=typeof a,e=typeof b==="boolean";if(c.isFunction(a))return this.each(function(f){var h=c(this);h.toggleClass(a.call(this,f,h.attr("class"),b),b)});return this.each(function(){if(d==="string")for(var f,h=0,l=c(this),k=b,o=a.split(ha);f=o[h++];){k=e?k:!l.hasClass(f);l[k?"addClass":"removeClass"](f)}else if(d==="undefined"||d==="boolean"){this.className&&c.data(this,
"__className__",this.className);this.className=this.className||a===false?"":c.data(this,"__className__")||""}})},hasClass:function(a){a=" "+a+" ";for(var b=0,d=this.length;b<d;b++)if((" "+this[b].className+" ").replace(sa," ").indexOf(a)>-1)return true;return false},val:function(a){if(!arguments.length){var b=this[0];if(b){if(c.nodeName(b,"option")){var d=b.attributes.value;return!d||d.specified?b.value:b.text}if(c.nodeName(b,"select")){var e=b.selectedIndex;d=[];var f=b.options;b=b.type==="select-one";
if(e<0)return null;var h=b?e:0;for(e=b?e+1:f.length;h<e;h++){var l=f[h];if(l.selected&&(c.support.optDisabled?!l.disabled:l.getAttribute("disabled")===null)&&(!l.parentNode.disabled||!c.nodeName(l.parentNode,"optgroup"))){a=c(l).val();if(b)return a;d.push(a)}}return d}if(ta.test(b.type)&&!c.support.checkOn)return b.getAttribute("value")===null?"on":b.value;return(b.value||"").replace(Sa,"")}return B}var k=c.isFunction(a);return this.each(function(o){var x=c(this),r=a;if(this.nodeType===1){if(k)r=
a.call(this,o,x.val());if(r==null)r="";else if(typeof r==="number")r+="";else if(c.isArray(r))r=c.map(r,function(C){return C==null?"":C+""});if(c.isArray(r)&&ta.test(this.type))this.checked=c.inArray(x.val(),r)>=0;else if(c.nodeName(this,"select")){var A=c.makeArray(r);c("option",this).each(function(){this.selected=c.inArray(c(this).val(),A)>=0});if(!A.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},
attr:function(a,b,d,e){if(!a||a.nodeType===3||a.nodeType===8)return B;if(e&&b in c.attrFn)return c(a)[b](d);e=a.nodeType!==1||!c.isXMLDoc(a);var f=d!==B;b=e&&c.props[b]||b;var h=Ta.test(b);if((b in a||a[b]!==B)&&e&&!h){if(f){b==="type"&&Ua.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");if(d===null)a.nodeType===1&&a.removeAttribute(b);else a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&
b.specified?b.value:Va.test(a.nodeName)||Wa.test(a.nodeName)&&a.href?0:B;return a[b]}if(!c.support.style&&e&&b==="style"){if(f)a.style.cssText=""+d;return a.style.cssText}f&&a.setAttribute(b,""+d);if(!a.attributes[b]&&a.hasAttribute&&!a.hasAttribute(b))return B;a=!c.support.hrefNormalized&&e&&h?a.getAttribute(b,2):a.getAttribute(b);return a===null?B:a}});var X=/\.(.*)$/,ia=/^(?:textarea|input|select)$/i,La=/\./g,Ma=/ /g,Xa=/[^\w\s.|`]/g,Ya=function(a){return a.replace(Xa,"\\$&")},ua={focusin:0,focusout:0};
c.event={add:function(a,b,d,e){if(!(a.nodeType===3||a.nodeType===8)){if(c.isWindow(a)&&a!==E&&!a.frameElement)a=E;if(d===false)d=U;else if(!d)return;var f,h;if(d.handler){f=d;d=f.handler}if(!d.guid)d.guid=c.guid++;if(h=c.data(a)){var l=a.nodeType?"events":"__events__",k=h[l],o=h.handle;if(typeof k==="function"){o=k.handle;k=k.events}else if(!k){a.nodeType||(h[l]=h=function(){});h.events=k={}}if(!o)h.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,
arguments):B};o.elem=a;b=b.split(" ");for(var x=0,r;l=b[x++];){h=f?c.extend({},f):{handler:d,data:e};if(l.indexOf(".")>-1){r=l.split(".");l=r.shift();h.namespace=r.slice(0).sort().join(".")}else{r=[];h.namespace=""}h.type=l;if(!h.guid)h.guid=d.guid;var A=k[l],C=c.event.special[l]||{};if(!A){A=k[l]=[];if(!C.setup||C.setup.call(a,e,r,o)===false)if(a.addEventListener)a.addEventListener(l,o,false);else a.attachEvent&&a.attachEvent("on"+l,o)}if(C.add){C.add.call(a,h);if(!h.handler.guid)h.handler.guid=
d.guid}A.push(h);c.event.global[l]=true}a=null}}},global:{},remove:function(a,b,d,e){if(!(a.nodeType===3||a.nodeType===8)){if(d===false)d=U;var f,h,l=0,k,o,x,r,A,C,J=a.nodeType?"events":"__events__",w=c.data(a),I=w&&w[J];if(w&&I){if(typeof I==="function"){w=I;I=I.events}if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(f in I)c.event.remove(a,f+b)}else{for(b=b.split(" ");f=b[l++];){r=f;k=f.indexOf(".")<0;o=[];if(!k){o=f.split(".");f=o.shift();x=RegExp("(^|\\.)"+
c.map(o.slice(0).sort(),Ya).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(A=I[f])if(d){r=c.event.special[f]||{};for(h=e||0;h<A.length;h++){C=A[h];if(d.guid===C.guid){if(k||x.test(C.namespace)){e==null&&A.splice(h--,1);r.remove&&r.remove.call(a,C)}if(e!=null)break}}if(A.length===0||e!=null&&A.length===1){if(!r.teardown||r.teardown.call(a,o)===false)c.removeEvent(a,f,w.handle);delete I[f]}}else for(h=0;h<A.length;h++){C=A[h];if(k||x.test(C.namespace)){c.event.remove(a,r,C.handler,h);A.splice(h--,1)}}}if(c.isEmptyObject(I)){if(b=
w.handle)b.elem=null;delete w.events;delete w.handle;if(typeof w==="function")c.removeData(a,J);else c.isEmptyObject(w)&&c.removeData(a)}}}}},trigger:function(a,b,d,e){var f=a.type||a;if(!e){a=typeof a==="object"?a[c.expando]?a:c.extend(c.Event(f),a):c.Event(f);if(f.indexOf("!")>=0){a.type=f=f.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[f]&&c.each(c.cache,function(){this.events&&this.events[f]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===
8)return B;a.result=B;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(e=d.nodeType?c.data(d,"handle"):(c.data(d,"__events__")||{}).handle)&&e.apply(d,b);e=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+f]&&d["on"+f].apply(d,b)===false){a.result=false;a.preventDefault()}}catch(h){}if(!a.isPropagationStopped()&&e)c.event.trigger(a,b,e,true);else if(!a.isDefaultPrevented()){var l;e=a.target;var k=f.replace(X,""),o=c.nodeName(e,"a")&&k===
"click",x=c.event.special[k]||{};if((!x._default||x._default.call(d,a)===false)&&!o&&!(e&&e.nodeName&&c.noData[e.nodeName.toLowerCase()])){try{if(e[k]){if(l=e["on"+k])e["on"+k]=null;c.event.triggered=true;e[k]()}}catch(r){}if(l)e["on"+k]=l;c.event.triggered=false}}},handle:function(a){var b,d,e,f;d=[];var h=c.makeArray(arguments);a=h[0]=c.event.fix(a||E.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive;if(!b){e=a.type.split(".");a.type=e.shift();d=e.slice(0).sort();e=RegExp("(^|\\.)"+
d.join("\\.(?:.*\\.)?")+"(\\.|$)")}a.namespace=a.namespace||d.join(".");f=c.data(this,this.nodeType?"events":"__events__");if(typeof f==="function")f=f.events;d=(f||{})[a.type];if(f&&d){d=d.slice(0);f=0;for(var l=d.length;f<l;f++){var k=d[f];if(b||e.test(k.namespace)){a.handler=k.handler;a.data=k.data;a.handleObj=k;k=k.handler.apply(this,h);if(k!==B){a.result=k;if(k===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}}return a.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
fix:function(a){if(a[c.expando])return a;var b=a;a=c.Event(b);for(var d=this.props.length,e;d;){e=this.props[--d];a[e]=b[e]}if(!a.target)a.target=a.srcElement||t;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=t.documentElement;d=t.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop||
d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(a.which==null&&(a.charCode!=null||a.keyCode!=null))a.which=a.charCode!=null?a.charCode:a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==B)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1E8,proxy:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a){c.event.add(this,Y(a.origType,a.selector),c.extend({},a,{handler:Ka,guid:a.handler.guid}))},remove:function(a){c.event.remove(this,
Y(a.origType,a.selector),a)}},beforeunload:{setup:function(a,b,d){if(c.isWindow(this))this.onbeforeunload=d},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};c.removeEvent=t.removeEventListener?function(a,b,d){a.removeEventListener&&a.removeEventListener(b,d,false)}:function(a,b,d){a.detachEvent&&a.detachEvent("on"+b,d)};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type){this.originalEvent=a;this.type=a.type}else this.type=a;this.timeStamp=
c.now();this[c.expando]=true};c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=ca;var a=this.originalEvent;if(a)if(a.preventDefault)a.preventDefault();else a.returnValue=false},stopPropagation:function(){this.isPropagationStopped=ca;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=ca;this.stopPropagation()},isDefaultPrevented:U,isPropagationStopped:U,isImmediatePropagationStopped:U};
var va=function(a){var b=a.relatedTarget;try{for(;b&&b!==this;)b=b.parentNode;if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}}catch(d){}},wa=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?wa:va,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?wa:va)}}});if(!c.support.submitBubbles)c.event.special.submit={setup:function(){if(this.nodeName.toLowerCase()!==
"form"){c.event.add(this,"click.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="submit"||d==="image")&&c(b).closest("form").length){a.liveFired=B;return la("submit",this,arguments)}});c.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="text"||d==="password")&&c(b).closest("form").length&&a.keyCode===13){a.liveFired=B;return la("submit",this,arguments)}})}else return false},teardown:function(){c.event.remove(this,".specialSubmit")}};if(!c.support.changeBubbles){var V,
xa=function(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex>-1?c.map(a.options,function(e){return e.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},Z=function(a,b){var d=a.target,e,f;if(!(!ia.test(d.nodeName)||d.readOnly)){e=c.data(d,"_change_data");f=xa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",f);if(!(e===B||f===e))if(e!=null||f){a.type="change";a.liveFired=
B;return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:Z,beforedeactivate:Z,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return Z.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return Z.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a,"_change_data",xa(a))}},setup:function(){if(this.type===
"file")return false;for(var a in V)c.event.add(this,a+".specialChange",V[a]);return ia.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return ia.test(this.nodeName)}};V=c.event.special.change.filters;V.focus=V.beforeactivate}t.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(e){e=c.event.fix(e);e.type=b;return c.event.trigger(e,null,e.target)}c.event.special[b]={setup:function(){ua[b]++===0&&t.addEventListener(a,d,true)},teardown:function(){--ua[b]===
0&&t.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,e,f){if(typeof d==="object"){for(var h in d)this[b](h,e,d[h],f);return this}if(c.isFunction(e)||e===false){f=e;e=B}var l=b==="one"?c.proxy(f,function(o){c(this).unbind(o,l);return f.apply(this,arguments)}):f;if(d==="unload"&&b!=="one")this.one(d,e,f);else{h=0;for(var k=this.length;h<k;h++)c.event.add(this[h],d,l,e)}return this}});c.fn.extend({unbind:function(a,b){if(typeof a==="object"&&!a.preventDefault)for(var d in a)this.unbind(d,
a[d]);else{d=0;for(var e=this.length;d<e;d++)c.event.remove(this[d],a,b)}return this},delegate:function(a,b,d,e){return this.live(b,d,e,a)},undelegate:function(a,b,d){return arguments.length===0?this.unbind("live"):this.die(b,null,d,a)},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){var d=c.Event(a);d.preventDefault();d.stopPropagation();c.event.trigger(d,b,this[0]);return d.result}},toggle:function(a){for(var b=arguments,d=
1;d<b.length;)c.proxy(a,b[d++]);return this.click(c.proxy(a,function(e){var f=(c.data(this,"lastToggle"+a.guid)||0)%d;c.data(this,"lastToggle"+a.guid,f+1);e.preventDefault();return b[f].apply(this,arguments)||false}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var ya={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};c.each(["live","die"],function(a,b){c.fn[b]=function(d,e,f,h){var l,k=0,o,x,r=h||this.selector;h=h?this:c(this.context);if(typeof d===
"object"&&!d.preventDefault){for(l in d)h[b](l,e,d[l],r);return this}if(c.isFunction(e)){f=e;e=B}for(d=(d||"").split(" ");(l=d[k++])!=null;){o=X.exec(l);x="";if(o){x=o[0];l=l.replace(X,"")}if(l==="hover")d.push("mouseenter"+x,"mouseleave"+x);else{o=l;if(l==="focus"||l==="blur"){d.push(ya[l]+x);l+=x}else l=(ya[l]||l)+x;if(b==="live"){x=0;for(var A=h.length;x<A;x++)c.event.add(h[x],"live."+Y(l,r),{data:e,selector:r,handler:f,origType:l,origHandler:f,preType:o})}else h.unbind("live."+Y(l,r),f)}}return this}});
c.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),function(a,b){c.fn[b]=function(d,e){if(e==null){e=d;d=null}return arguments.length>0?this.bind(b,d,e):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});E.attachEvent&&!E.addEventListener&&c(E).bind("unload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}});
(function(){function a(g,i,n,m,p,q){p=0;for(var u=m.length;p<u;p++){var y=m[p];if(y){var F=false;for(y=y[g];y;){if(y.sizcache===n){F=m[y.sizset];break}if(y.nodeType===1&&!q){y.sizcache=n;y.sizset=p}if(y.nodeName.toLowerCase()===i){F=y;break}y=y[g]}m[p]=F}}}function b(g,i,n,m,p,q){p=0;for(var u=m.length;p<u;p++){var y=m[p];if(y){var F=false;for(y=y[g];y;){if(y.sizcache===n){F=m[y.sizset];break}if(y.nodeType===1){if(!q){y.sizcache=n;y.sizset=p}if(typeof i!=="string"){if(y===i){F=true;break}}else if(k.filter(i,
[y]).length>0){F=y;break}}y=y[g]}m[p]=F}}}var d=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,e=0,f=Object.prototype.toString,h=false,l=true;[0,0].sort(function(){l=false;return 0});var k=function(g,i,n,m){n=n||[];var p=i=i||t;if(i.nodeType!==1&&i.nodeType!==9)return[];if(!g||typeof g!=="string")return n;var q,u,y,F,M,N=true,O=k.isXML(i),D=[],R=g;do{d.exec("");if(q=d.exec(R)){R=q[3];D.push(q[1]);if(q[2]){F=q[3];
break}}}while(q);if(D.length>1&&x.exec(g))if(D.length===2&&o.relative[D[0]])u=L(D[0]+D[1],i);else for(u=o.relative[D[0]]?[i]:k(D.shift(),i);D.length;){g=D.shift();if(o.relative[g])g+=D.shift();u=L(g,u)}else{if(!m&&D.length>1&&i.nodeType===9&&!O&&o.match.ID.test(D[0])&&!o.match.ID.test(D[D.length-1])){q=k.find(D.shift(),i,O);i=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]}if(i){q=m?{expr:D.pop(),set:C(m)}:k.find(D.pop(),D.length===1&&(D[0]==="~"||D[0]==="+")&&i.parentNode?i.parentNode:i,O);u=q.expr?k.filter(q.expr,
q.set):q.set;if(D.length>0)y=C(u);else N=false;for(;D.length;){q=M=D.pop();if(o.relative[M])q=D.pop();else M="";if(q==null)q=i;o.relative[M](y,q,O)}}else y=[]}y||(y=u);y||k.error(M||g);if(f.call(y)==="[object Array]")if(N)if(i&&i.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&k.contains(i,y[g])))n.push(u[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&n.push(u[g]);else n.push.apply(n,y);else C(y,n);if(F){k(F,p,n,m);k.uniqueSort(n)}return n};k.uniqueSort=function(g){if(w){h=
l;g.sort(w);if(h)for(var i=1;i<g.length;i++)g[i]===g[i-1]&&g.splice(i--,1)}return g};k.matches=function(g,i){return k(g,null,null,i)};k.matchesSelector=function(g,i){return k(i,null,null,[g]).length>0};k.find=function(g,i,n){var m;if(!g)return[];for(var p=0,q=o.order.length;p<q;p++){var u,y=o.order[p];if(u=o.leftMatch[y].exec(g)){var F=u[1];u.splice(1,1);if(F.substr(F.length-1)!=="\\"){u[1]=(u[1]||"").replace(/\\/g,"");m=o.find[y](u,i,n);if(m!=null){g=g.replace(o.match[y],"");break}}}}m||(m=i.getElementsByTagName("*"));
return{set:m,expr:g}};k.filter=function(g,i,n,m){for(var p,q,u=g,y=[],F=i,M=i&&i[0]&&k.isXML(i[0]);g&&i.length;){for(var N in o.filter)if((p=o.leftMatch[N].exec(g))!=null&&p[2]){var O,D,R=o.filter[N];D=p[1];q=false;p.splice(1,1);if(D.substr(D.length-1)!=="\\"){if(F===y)y=[];if(o.preFilter[N])if(p=o.preFilter[N](p,F,n,y,m,M)){if(p===true)continue}else q=O=true;if(p)for(var j=0;(D=F[j])!=null;j++)if(D){O=R(D,p,j,F);var s=m^!!O;if(n&&O!=null)if(s)q=true;else F[j]=false;else if(s){y.push(D);q=true}}if(O!==
B){n||(F=y);g=g.replace(o.match[N],"");if(!q)return[];break}}}if(g===u)if(q==null)k.error(g);else break;u=g}return F};k.error=function(g){throw"Syntax error, unrecognized expression: "+g;};var o=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+\-]*)\))?/,
POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(g){return g.getAttribute("href")}},relative:{"+":function(g,i){var n=typeof i==="string",m=n&&!/\W/.test(i);n=n&&!m;if(m)i=i.toLowerCase();m=0;for(var p=g.length,q;m<p;m++)if(q=g[m]){for(;(q=q.previousSibling)&&q.nodeType!==1;);g[m]=n||q&&q.nodeName.toLowerCase()===
i?q||false:q===i}n&&k.filter(i,g,true)},">":function(g,i){var n,m=typeof i==="string",p=0,q=g.length;if(m&&!/\W/.test(i))for(i=i.toLowerCase();p<q;p++){if(n=g[p]){n=n.parentNode;g[p]=n.nodeName.toLowerCase()===i?n:false}}else{for(;p<q;p++)if(n=g[p])g[p]=m?n.parentNode:n.parentNode===i;m&&k.filter(i,g,true)}},"":function(g,i,n){var m,p=e++,q=b;if(typeof i==="string"&&!/\W/.test(i)){m=i=i.toLowerCase();q=a}q("parentNode",i,p,g,m,n)},"~":function(g,i,n){var m,p=e++,q=b;if(typeof i==="string"&&!/\W/.test(i)){m=
i=i.toLowerCase();q=a}q("previousSibling",i,p,g,m,n)}},find:{ID:function(g,i,n){if(typeof i.getElementById!=="undefined"&&!n)return(g=i.getElementById(g[1]))&&g.parentNode?[g]:[]},NAME:function(g,i){if(typeof i.getElementsByName!=="undefined"){for(var n=[],m=i.getElementsByName(g[1]),p=0,q=m.length;p<q;p++)m[p].getAttribute("name")===g[1]&&n.push(m[p]);return n.length===0?null:n}},TAG:function(g,i){return i.getElementsByTagName(g[1])}},preFilter:{CLASS:function(g,i,n,m,p,q){g=" "+g[1].replace(/\\/g,
"")+" ";if(q)return g;q=0;for(var u;(u=i[q])!=null;q++)if(u)if(p^(u.className&&(" "+u.className+" ").replace(/[\t\n]/g," ").indexOf(g)>=0))n||m.push(u);else if(n)i[q]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},CHILD:function(g){if(g[1]==="nth"){var i=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=i[1]+(i[2]||1)-0;g[3]=i[3]-0}g[0]=e++;return g},ATTR:function(g,i,n,
m,p,q){i=g[1].replace(/\\/g,"");if(!q&&o.attrMap[i])g[1]=o.attrMap[i];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,i,n,m,p){if(g[1]==="not")if((d.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,i);else{g=k.filter(g[3],i,n,true^p);n||m.push.apply(m,g);return false}else if(o.match.POS.test(g[0])||o.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===
true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,i,n){return!!k(n[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===
g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},setFilters:{first:function(g,i){return i===0},last:function(g,i,n,m){return i===m.length-1},even:function(g,i){return i%2===0},odd:function(g,i){return i%2===1},lt:function(g,i,n){return i<n[3]-0},gt:function(g,i,n){return i>n[3]-0},nth:function(g,i,n){return n[3]-
0===i},eq:function(g,i,n){return n[3]-0===i}},filter:{PSEUDO:function(g,i,n,m){var p=i[1],q=o.filters[p];if(q)return q(g,n,i,m);else if(p==="contains")return(g.textContent||g.innerText||k.getText([g])||"").indexOf(i[3])>=0;else if(p==="not"){i=i[3];n=0;for(m=i.length;n<m;n++)if(i[n]===g)return false;return true}else k.error("Syntax error, unrecognized expression: "+p)},CHILD:function(g,i){var n=i[1],m=g;switch(n){case "only":case "first":for(;m=m.previousSibling;)if(m.nodeType===1)return false;if(n===
"first")return true;m=g;case "last":for(;m=m.nextSibling;)if(m.nodeType===1)return false;return true;case "nth":n=i[2];var p=i[3];if(n===1&&p===0)return true;var q=i[0],u=g.parentNode;if(u&&(u.sizcache!==q||!g.nodeIndex)){var y=0;for(m=u.firstChild;m;m=m.nextSibling)if(m.nodeType===1)m.nodeIndex=++y;u.sizcache=q}m=g.nodeIndex-p;return n===0?m===0:m%n===0&&m/n>=0}},ID:function(g,i){return g.nodeType===1&&g.getAttribute("id")===i},TAG:function(g,i){return i==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===
i},CLASS:function(g,i){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(i)>-1},ATTR:function(g,i){var n=i[1];n=o.attrHandle[n]?o.attrHandle[n](g):g[n]!=null?g[n]:g.getAttribute(n);var m=n+"",p=i[2],q=i[4];return n==null?p==="!=":p==="="?m===q:p==="*="?m.indexOf(q)>=0:p==="~="?(" "+m+" ").indexOf(q)>=0:!q?m&&n!==false:p==="!="?m!==q:p==="^="?m.indexOf(q)===0:p==="$="?m.substr(m.length-q.length)===q:p==="|="?m===q||m.substr(0,q.length+1)===q+"-":false},POS:function(g,i,n,m){var p=o.setFilters[i[2]];
if(p)return p(g,n,i,m)}}},x=o.match.POS,r=function(g,i){return"\\"+(i-0+1)},A;for(A in o.match){o.match[A]=RegExp(o.match[A].source+/(?![^\[]*\])(?![^\(]*\))/.source);o.leftMatch[A]=RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[A].source.replace(/\\(\d+)/g,r))}var C=function(g,i){g=Array.prototype.slice.call(g,0);if(i){i.push.apply(i,g);return i}return g};try{Array.prototype.slice.call(t.documentElement.childNodes,0)}catch(J){C=function(g,i){var n=0,m=i||[];if(f.call(g)==="[object Array]")Array.prototype.push.apply(m,
g);else if(typeof g.length==="number")for(var p=g.length;n<p;n++)m.push(g[n]);else for(;g[n];n++)m.push(g[n]);return m}}var w,I;if(t.documentElement.compareDocumentPosition)w=function(g,i){if(g===i){h=true;return 0}if(!g.compareDocumentPosition||!i.compareDocumentPosition)return g.compareDocumentPosition?-1:1;return g.compareDocumentPosition(i)&4?-1:1};else{w=function(g,i){var n,m,p=[],q=[];n=g.parentNode;m=i.parentNode;var u=n;if(g===i){h=true;return 0}else if(n===m)return I(g,i);else if(n){if(!m)return 1}else return-1;
for(;u;){p.unshift(u);u=u.parentNode}for(u=m;u;){q.unshift(u);u=u.parentNode}n=p.length;m=q.length;for(u=0;u<n&&u<m;u++)if(p[u]!==q[u])return I(p[u],q[u]);return u===n?I(g,q[u],-1):I(p[u],i,1)};I=function(g,i,n){if(g===i)return n;for(g=g.nextSibling;g;){if(g===i)return-1;g=g.nextSibling}return 1}}k.getText=function(g){for(var i="",n,m=0;g[m];m++){n=g[m];if(n.nodeType===3||n.nodeType===4)i+=n.nodeValue;else if(n.nodeType!==8)i+=k.getText(n.childNodes)}return i};(function(){var g=t.createElement("div"),
i="script"+(new Date).getTime(),n=t.documentElement;g.innerHTML="<a name='"+i+"'/>";n.insertBefore(g,n.firstChild);if(t.getElementById(i)){o.find.ID=function(m,p,q){if(typeof p.getElementById!=="undefined"&&!q)return(p=p.getElementById(m[1]))?p.id===m[1]||typeof p.getAttributeNode!=="undefined"&&p.getAttributeNode("id").nodeValue===m[1]?[p]:B:[]};o.filter.ID=function(m,p){var q=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&q&&q.nodeValue===p}}n.removeChild(g);
n=g=null})();(function(){var g=t.createElement("div");g.appendChild(t.createComment(""));if(g.getElementsByTagName("*").length>0)o.find.TAG=function(i,n){var m=n.getElementsByTagName(i[1]);if(i[1]==="*"){for(var p=[],q=0;m[q];q++)m[q].nodeType===1&&p.push(m[q]);m=p}return m};g.innerHTML="<a href='#'></a>";if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")o.attrHandle.href=function(i){return i.getAttribute("href",2)};g=null})();t.querySelectorAll&&
function(){var g=k,i=t.createElement("div");i.innerHTML="<p class='TEST'></p>";if(!(i.querySelectorAll&&i.querySelectorAll(".TEST").length===0)){k=function(m,p,q,u){p=p||t;m=m.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!u&&!k.isXML(p))if(p.nodeType===9)try{return C(p.querySelectorAll(m),q)}catch(y){}else if(p.nodeType===1&&p.nodeName.toLowerCase()!=="object"){var F=p.getAttribute("id"),M=F||"__sizzle__";F||p.setAttribute("id",M);try{return C(p.querySelectorAll("#"+M+" "+m),q)}catch(N){}finally{F||
p.removeAttribute("id")}}return g(m,p,q,u)};for(var n in g)k[n]=g[n];i=null}}();(function(){var g=t.documentElement,i=g.matchesSelector||g.mozMatchesSelector||g.webkitMatchesSelector||g.msMatchesSelector,n=false;try{i.call(t.documentElement,"[test!='']:sizzle")}catch(m){n=true}if(i)k.matchesSelector=function(p,q){q=q.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(p))try{if(n||!o.match.PSEUDO.test(q)&&!/!=/.test(q))return i.call(p,q)}catch(u){}return k(q,null,null,[p]).length>0}})();(function(){var g=
t.createElement("div");g.innerHTML="<div class='test e'></div><div class='test'></div>";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){o.order.splice(1,0,"CLASS");o.find.CLASS=function(i,n,m){if(typeof n.getElementsByClassName!=="undefined"&&!m)return n.getElementsByClassName(i[1])};g=null}}})();k.contains=t.documentElement.contains?function(g,i){return g!==i&&(g.contains?g.contains(i):true)}:t.documentElement.compareDocumentPosition?
function(g,i){return!!(g.compareDocumentPosition(i)&16)}:function(){return false};k.isXML=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false};var L=function(g,i){for(var n,m=[],p="",q=i.nodeType?[i]:i;n=o.match.PSEUDO.exec(g);){p+=n[0];g=g.replace(o.match.PSEUDO,"")}g=o.relative[g]?g+"*":g;n=0;for(var u=q.length;n<u;n++)k(g,q[n],m);return k.filter(p,m)};c.find=k;c.expr=k.selectors;c.expr[":"]=c.expr.filters;c.unique=k.uniqueSort;c.text=k.getText;c.isXMLDoc=k.isXML;
c.contains=k.contains})();var Za=/Until$/,$a=/^(?:parents|prevUntil|prevAll)/,ab=/,/,Na=/^.[^:#\[\.,]*$/,bb=Array.prototype.slice,cb=c.expr.match.POS;c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,e=0,f=this.length;e<f;e++){d=b.length;c.find(a,this[e],b);if(e>0)for(var h=d;h<b.length;h++)for(var l=0;l<d;l++)if(b[l]===b[h]){b.splice(h--,1);break}}return b},has:function(a){var b=c(a);return this.filter(function(){for(var d=0,e=b.length;d<e;d++)if(c.contains(this,b[d]))return true})},
not:function(a){return this.pushStack(ma(this,a,false),"not",a)},filter:function(a){return this.pushStack(ma(this,a,true),"filter",a)},is:function(a){return!!a&&c.filter(a,this).length>0},closest:function(a,b){var d=[],e,f,h=this[0];if(c.isArray(a)){var l,k={},o=1;if(h&&a.length){e=0;for(f=a.length;e<f;e++){l=a[e];k[l]||(k[l]=c.expr.match.POS.test(l)?c(l,b||this.context):l)}for(;h&&h.ownerDocument&&h!==b;){for(l in k){e=k[l];if(e.jquery?e.index(h)>-1:c(h).is(e))d.push({selector:l,elem:h,level:o})}h=
h.parentNode;o++}}return d}l=cb.test(a)?c(a,b||this.context):null;e=0;for(f=this.length;e<f;e++)for(h=this[e];h;)if(l?l.index(h)>-1:c.find.matchesSelector(h,a)){d.push(h);break}else{h=h.parentNode;if(!h||!h.ownerDocument||h===b)break}d=d.length>1?c.unique(d):d;return this.pushStack(d,"closest",a)},index:function(a){if(!a||typeof a==="string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var d=typeof a==="string"?c(a,b||this.context):
c.makeArray(a),e=c.merge(this.get(),d);return this.pushStack(!d[0]||!d[0].parentNode||d[0].parentNode.nodeType===11||!e[0]||!e[0].parentNode||e[0].parentNode.nodeType===11?e:c.unique(e))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,
2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,
b){c.fn[a]=function(d,e){var f=c.map(this,b,d);Za.test(a)||(e=d);if(e&&typeof e==="string")f=c.filter(e,f);f=this.length>1?c.unique(f):f;if((this.length>1||ab.test(e))&&$a.test(a))f=f.reverse();return this.pushStack(f,a,bb.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return b.length===1?c.find.matchesSelector(b[0],a)?[b[0]]:[]:c.find.matches(a,b)},dir:function(a,b,d){var e=[];for(a=a[b];a&&a.nodeType!==9&&(d===B||a.nodeType!==1||!c(a).is(d));){a.nodeType===1&&
e.push(a);a=a[b]}return e},nth:function(a,b,d){b=b||1;for(var e=0;a;a=a[d])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var za=/ jQuery\d+="(?:\d+|null)"/g,$=/^\s+/,Aa=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Ba=/<([\w:]+)/,db=/<tbody/i,eb=/<|&#?\w+;/,Ca=/<(?:script|object|embed|option|style)/i,Da=/checked\s*(?:[^=]|=\s*.checked.)/i,fb=/\=([^="'>\s]+\/)>/g,P={option:[1,
"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};P.optgroup=P.option;P.tbody=P.tfoot=P.colgroup=P.caption=P.thead;P.th=P.td;if(!c.support.htmlSerialize)P._default=[1,"div<div>","</div>"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=
c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==B)return this.empty().append((this[0]&&this[0].ownerDocument||t).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},
wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},
prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,
this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,e;(e=this[d])!=null;d++)if(!a||c.filter(a,[e]).length){if(!b&&e.nodeType===1){c.cleanData(e.getElementsByTagName("*"));c.cleanData([e])}e.parentNode&&e.parentNode.removeChild(e)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild);
return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,e=this.ownerDocument;if(!d){d=e.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(za,"").replace(fb,'="$1">').replace($,"")],e)[0]}else return this.cloneNode(true)});if(a===true){na(this,b);na(this.find("*"),b.find("*"))}return b},html:function(a){if(a===B)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(za,""):null;
else if(typeof a==="string"&&!Ca.test(a)&&(c.support.leadingWhitespace||!$.test(a))&&!P[(Ba.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Aa,"<$1></$2>");try{for(var b=0,d=this.length;b<d;b++)if(this[b].nodeType===1){c.cleanData(this[b].getElementsByTagName("*"));this[b].innerHTML=a}}catch(e){this.empty().append(a)}}else c.isFunction(a)?this.each(function(f){var h=c(this);h.html(a.call(this,f,h.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(c.isFunction(a))return this.each(function(b){var d=
c(this),e=d.html();d.replaceWith(a.call(this,b,e))});if(typeof a!=="string")a=c(a).detach();return this.each(function(){var b=this.nextSibling,d=this.parentNode;c(this).remove();b?c(b).before(a):c(d).append(a)})}else return this.pushStack(c(c.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a,true)},domManip:function(a,b,d){var e,f,h,l=a[0],k=[];if(!c.support.checkClone&&arguments.length===3&&typeof l==="string"&&Da.test(l))return this.each(function(){c(this).domManip(a,
b,d,true)});if(c.isFunction(l))return this.each(function(x){var r=c(this);a[0]=l.call(this,x,b?r.html():B);r.domManip(a,b,d)});if(this[0]){e=l&&l.parentNode;e=c.support.parentNode&&e&&e.nodeType===11&&e.childNodes.length===this.length?{fragment:e}:c.buildFragment(a,this,k);h=e.fragment;if(f=h.childNodes.length===1?h=h.firstChild:h.firstChild){b=b&&c.nodeName(f,"tr");f=0;for(var o=this.length;f<o;f++)d.call(b?c.nodeName(this[f],"table")?this[f].getElementsByTagName("tbody")[0]||this[f].appendChild(this[f].ownerDocument.createElement("tbody")):
this[f]:this[f],f>0||e.cacheable||this.length>1?h.cloneNode(true):h)}k.length&&c.each(k,Oa)}return this}});c.buildFragment=function(a,b,d){var e,f,h;b=b&&b[0]?b[0].ownerDocument||b[0]:t;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===t&&!Ca.test(a[0])&&(c.support.checkClone||!Da.test(a[0]))){f=true;if(h=c.fragments[a[0]])if(h!==1)e=h}if(!e){e=b.createDocumentFragment();c.clean(a,b,e,d)}if(f)c.fragments[a[0]]=h?e:1;return{fragment:e,cacheable:f}};c.fragments={};c.each({appendTo:"append",
prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var e=[];d=c(d);var f=this.length===1&&this[0].parentNode;if(f&&f.nodeType===11&&f.childNodes.length===1&&d.length===1){d[b](this[0]);return this}else{f=0;for(var h=d.length;f<h;f++){var l=(f>0?this.clone(true):this).get();c(d[f])[b](l);e=e.concat(l)}return this.pushStack(e,a,d.selector)}}});c.extend({clean:function(a,b,d,e){b=b||t;if(typeof b.createElement==="undefined")b=b.ownerDocument||
b[0]&&b[0].ownerDocument||t;for(var f=[],h=0,l;(l=a[h])!=null;h++){if(typeof l==="number")l+="";if(l){if(typeof l==="string"&&!eb.test(l))l=b.createTextNode(l);else if(typeof l==="string"){l=l.replace(Aa,"<$1></$2>");var k=(Ba.exec(l)||["",""])[1].toLowerCase(),o=P[k]||P._default,x=o[0],r=b.createElement("div");for(r.innerHTML=o[1]+l+o[2];x--;)r=r.lastChild;if(!c.support.tbody){x=db.test(l);k=k==="table"&&!x?r.firstChild&&r.firstChild.childNodes:o[1]==="<table>"&&!x?r.childNodes:[];for(o=k.length-
1;o>=0;--o)c.nodeName(k[o],"tbody")&&!k[o].childNodes.length&&k[o].parentNode.removeChild(k[o])}!c.support.leadingWhitespace&&$.test(l)&&r.insertBefore(b.createTextNode($.exec(l)[0]),r.firstChild);l=r.childNodes}if(l.nodeType)f.push(l);else f=c.merge(f,l)}}if(d)for(h=0;f[h];h++)if(e&&c.nodeName(f[h],"script")&&(!f[h].type||f[h].type.toLowerCase()==="text/javascript"))e.push(f[h].parentNode?f[h].parentNode.removeChild(f[h]):f[h]);else{f[h].nodeType===1&&f.splice.apply(f,[h+1,0].concat(c.makeArray(f[h].getElementsByTagName("script"))));
d.appendChild(f[h])}return f},cleanData:function(a){for(var b,d,e=c.cache,f=c.event.special,h=c.support.deleteExpando,l=0,k;(k=a[l])!=null;l++)if(!(k.nodeName&&c.noData[k.nodeName.toLowerCase()]))if(d=k[c.expando]){if((b=e[d])&&b.events)for(var o in b.events)f[o]?c.event.remove(k,o):c.removeEvent(k,o,b.handle);if(h)delete k[c.expando];else k.removeAttribute&&k.removeAttribute(c.expando);delete e[d]}}});var Ea=/alpha\([^)]*\)/i,gb=/opacity=([^)]*)/,hb=/-([a-z])/ig,ib=/([A-Z])/g,Fa=/^-?\d+(?:px)?$/i,
jb=/^-?\d/,kb={position:"absolute",visibility:"hidden",display:"block"},Pa=["Left","Right"],Qa=["Top","Bottom"],W,Ga,aa,lb=function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){if(arguments.length===2&&b===B)return this;return c.access(this,a,b,true,function(d,e,f){return f!==B?c.style(d,e,f):c.css(d,e)})};c.extend({cssHooks:{opacity:{get:function(a,b){if(b){var d=W(a,"opacity","opacity");return d===""?"1":d}else return a.style.opacity}}},cssNumber:{zIndex:true,fontWeight:true,opacity:true,
zoom:true,lineHeight:true},cssProps:{"float":c.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,d,e){if(!(!a||a.nodeType===3||a.nodeType===8||!a.style)){var f,h=c.camelCase(b),l=a.style,k=c.cssHooks[h];b=c.cssProps[h]||h;if(d!==B){if(!(typeof d==="number"&&isNaN(d)||d==null)){if(typeof d==="number"&&!c.cssNumber[h])d+="px";if(!k||!("set"in k)||(d=k.set(a,d))!==B)try{l[b]=d}catch(o){}}}else{if(k&&"get"in k&&(f=k.get(a,false,e))!==B)return f;return l[b]}}},css:function(a,b,d){var e,f=c.camelCase(b),
h=c.cssHooks[f];b=c.cssProps[f]||f;if(h&&"get"in h&&(e=h.get(a,true,d))!==B)return e;else if(W)return W(a,b,f)},swap:function(a,b,d){var e={},f;for(f in b){e[f]=a.style[f];a.style[f]=b[f]}d.call(a);for(f in b)a.style[f]=e[f]},camelCase:function(a){return a.replace(hb,lb)}});c.curCSS=c.css;c.each(["height","width"],function(a,b){c.cssHooks[b]={get:function(d,e,f){var h;if(e){if(d.offsetWidth!==0)h=oa(d,b,f);else c.swap(d,kb,function(){h=oa(d,b,f)});if(h<=0){h=W(d,b,b);if(h==="0px"&&aa)h=aa(d,b,b);
if(h!=null)return h===""||h==="auto"?"0px":h}if(h<0||h==null){h=d.style[b];return h===""||h==="auto"?"0px":h}return typeof h==="string"?h:h+"px"}},set:function(d,e){if(Fa.test(e)){e=parseFloat(e);if(e>=0)return e+"px"}else return e}}});if(!c.support.opacity)c.cssHooks.opacity={get:function(a,b){return gb.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var d=a.style;d.zoom=1;var e=c.isNaN(b)?"":"alpha(opacity="+b*100+")",f=
d.filter||"";d.filter=Ea.test(f)?f.replace(Ea,e):d.filter+" "+e}};if(t.defaultView&&t.defaultView.getComputedStyle)Ga=function(a,b,d){var e;d=d.replace(ib,"-$1").toLowerCase();if(!(b=a.ownerDocument.defaultView))return B;if(b=b.getComputedStyle(a,null)){e=b.getPropertyValue(d);if(e===""&&!c.contains(a.ownerDocument.documentElement,a))e=c.style(a,d)}return e};if(t.documentElement.currentStyle)aa=function(a,b){var d,e,f=a.currentStyle&&a.currentStyle[b],h=a.style;if(!Fa.test(f)&&jb.test(f)){d=h.left;
e=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;h.left=b==="fontSize"?"1em":f||0;f=h.pixelLeft+"px";h.left=d;a.runtimeStyle.left=e}return f===""?"auto":f};W=Ga||aa;if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=a.offsetHeight;return a.offsetWidth===0&&b===0||!c.support.reliableHiddenOffsets&&(a.style.display||c.css(a,"display"))==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var mb=c.now(),nb=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
ob=/^(?:select|textarea)/i,pb=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,qb=/^(?:GET|HEAD)$/,Ra=/\[\]$/,T=/\=\?(&|$)/,ja=/\?/,rb=/([?&])_=[^&]*/,sb=/^(\w+:)?\/\/([^\/?#]+)/,tb=/%20/g,ub=/#.*$/,Ha=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!=="string"&&Ha)return Ha.apply(this,arguments);else if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var f=a.slice(e,a.length);a=a.slice(0,e)}e="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b===
"object"){b=c.param(b,c.ajaxSettings.traditional);e="POST"}var h=this;c.ajax({url:a,type:e,dataType:"html",data:b,complete:function(l,k){if(k==="success"||k==="notmodified")h.html(f?c("<div>").append(l.responseText.replace(nb,"")).find(f):l.responseText);d&&h.each(d,[l.responseText,k,l])}});return this},serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&
!this.disabled&&(this.checked||ob.test(this.nodeName)||pb.test(this.type))}).map(function(a,b){var d=c(this).val();return d==null?null:c.isArray(d)?c.map(d,function(e){return{name:b.name,value:e}}):{name:b.name,value:d}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,e){if(c.isFunction(b)){e=e||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:e})},
getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,e){if(c.isFunction(b)){e=e||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:e})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return new E.XMLHttpRequest},accepts:{xml:"application/xml, text/xml",html:"text/html",
script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},ajax:function(a){var b=c.extend(true,{},c.ajaxSettings,a),d,e,f,h=b.type.toUpperCase(),l=qb.test(h);b.url=b.url.replace(ub,"");b.context=a&&a.context!=null?a.context:b;if(b.data&&b.processData&&typeof b.data!=="string")b.data=c.param(b.data,b.traditional);if(b.dataType==="jsonp"){if(h==="GET")T.test(b.url)||(b.url+=(ja.test(b.url)?"&":"?")+(b.jsonp||"callback")+"=?");else if(!b.data||
!T.test(b.data))b.data=(b.data?b.data+"&":"")+(b.jsonp||"callback")+"=?";b.dataType="json"}if(b.dataType==="json"&&(b.data&&T.test(b.data)||T.test(b.url))){d=b.jsonpCallback||"jsonp"+mb++;if(b.data)b.data=(b.data+"").replace(T,"="+d+"$1");b.url=b.url.replace(T,"="+d+"$1");b.dataType="script";var k=E[d];E[d]=function(m){if(c.isFunction(k))k(m);else{E[d]=B;try{delete E[d]}catch(p){}}f=m;c.handleSuccess(b,w,e,f);c.handleComplete(b,w,e,f);r&&r.removeChild(A)}}if(b.dataType==="script"&&b.cache===null)b.cache=
false;if(b.cache===false&&l){var o=c.now(),x=b.url.replace(rb,"$1_="+o);b.url=x+(x===b.url?(ja.test(b.url)?"&":"?")+"_="+o:"")}if(b.data&&l)b.url+=(ja.test(b.url)?"&":"?")+b.data;b.global&&c.active++===0&&c.event.trigger("ajaxStart");o=(o=sb.exec(b.url))&&(o[1]&&o[1].toLowerCase()!==location.protocol||o[2].toLowerCase()!==location.host);if(b.dataType==="script"&&h==="GET"&&o){var r=t.getElementsByTagName("head")[0]||t.documentElement,A=t.createElement("script");if(b.scriptCharset)A.charset=b.scriptCharset;
A.src=b.url;if(!d){var C=false;A.onload=A.onreadystatechange=function(){if(!C&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){C=true;c.handleSuccess(b,w,e,f);c.handleComplete(b,w,e,f);A.onload=A.onreadystatechange=null;r&&A.parentNode&&r.removeChild(A)}}}r.insertBefore(A,r.firstChild);return B}var J=false,w=b.xhr();if(w){b.username?w.open(h,b.url,b.async,b.username,b.password):w.open(h,b.url,b.async);try{if(b.data!=null&&!l||a&&a.contentType)w.setRequestHeader("Content-Type",
b.contentType);if(b.ifModified){c.lastModified[b.url]&&w.setRequestHeader("If-Modified-Since",c.lastModified[b.url]);c.etag[b.url]&&w.setRequestHeader("If-None-Match",c.etag[b.url])}o||w.setRequestHeader("X-Requested-With","XMLHttpRequest");w.setRequestHeader("Accept",b.dataType&&b.accepts[b.dataType]?b.accepts[b.dataType]+", */*; q=0.01":b.accepts._default)}catch(I){}if(b.beforeSend&&b.beforeSend.call(b.context,w,b)===false){b.global&&c.active--===1&&c.event.trigger("ajaxStop");w.abort();return false}b.global&&
c.triggerGlobal(b,"ajaxSend",[w,b]);var L=w.onreadystatechange=function(m){if(!w||w.readyState===0||m==="abort"){J||c.handleComplete(b,w,e,f);J=true;if(w)w.onreadystatechange=c.noop}else if(!J&&w&&(w.readyState===4||m==="timeout")){J=true;w.onreadystatechange=c.noop;e=m==="timeout"?"timeout":!c.httpSuccess(w)?"error":b.ifModified&&c.httpNotModified(w,b.url)?"notmodified":"success";var p;if(e==="success")try{f=c.httpData(w,b.dataType,b)}catch(q){e="parsererror";p=q}if(e==="success"||e==="notmodified")d||
c.handleSuccess(b,w,e,f);else c.handleError(b,w,e,p);d||c.handleComplete(b,w,e,f);m==="timeout"&&w.abort();if(b.async)w=null}};try{var g=w.abort;w.abort=function(){w&&Function.prototype.call.call(g,w);L("abort")}}catch(i){}b.async&&b.timeout>0&&setTimeout(function(){w&&!J&&L("timeout")},b.timeout);try{w.send(l||b.data==null?null:b.data)}catch(n){c.handleError(b,w,null,n);c.handleComplete(b,w,e,f)}b.async||L();return w}},param:function(a,b){var d=[],e=function(h,l){l=c.isFunction(l)?l():l;d[d.length]=
encodeURIComponent(h)+"="+encodeURIComponent(l)};if(b===B)b=c.ajaxSettings.traditional;if(c.isArray(a)||a.jquery)c.each(a,function(){e(this.name,this.value)});else for(var f in a)da(f,a[f],b,e);return d.join("&").replace(tb,"+")}});c.extend({active:0,lastModified:{},etag:{},handleError:function(a,b,d,e){a.error&&a.error.call(a.context,b,d,e);a.global&&c.triggerGlobal(a,"ajaxError",[b,a,e])},handleSuccess:function(a,b,d,e){a.success&&a.success.call(a.context,e,d,b);a.global&&c.triggerGlobal(a,"ajaxSuccess",
[b,a])},handleComplete:function(a,b,d){a.complete&&a.complete.call(a.context,b,d);a.global&&c.triggerGlobal(a,"ajaxComplete",[b,a]);a.global&&c.active--===1&&c.event.trigger("ajaxStop")},triggerGlobal:function(a,b,d){(a.context&&a.context.url==null?c(a.context):c.event).trigger(b,d)},httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===1223}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),
e=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(e)c.etag[b]=e;return a.status===304},httpData:function(a,b,d){var e=a.getResponseHeader("content-type")||"",f=b==="xml"||!b&&e.indexOf("xml")>=0;a=f?a.responseXML:a.responseText;f&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b==="json"||!b&&e.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&e.indexOf("javascript")>=0)c.globalEval(a);return a}});
if(E.ActiveXObject)c.ajaxSettings.xhr=function(){if(E.location.protocol!=="file:")try{return new E.XMLHttpRequest}catch(a){}try{return new E.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}};c.support.ajax=!!c.ajaxSettings.xhr();var ea={},vb=/^(?:toggle|show|hide)$/,wb=/^([+\-]=)?([\d+.\-]+)(.*)$/,ba,pa=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b,d){if(a||a===0)return this.animate(S("show",
3),a,b,d);else{d=0;for(var e=this.length;d<e;d++){a=this[d];b=a.style.display;if(!c.data(a,"olddisplay")&&b==="none")b=a.style.display="";b===""&&c.css(a,"display")==="none"&&c.data(a,"olddisplay",qa(a.nodeName))}for(d=0;d<e;d++){a=this[d];b=a.style.display;if(b===""||b==="none")a.style.display=c.data(a,"olddisplay")||""}return this}},hide:function(a,b,d){if(a||a===0)return this.animate(S("hide",3),a,b,d);else{a=0;for(b=this.length;a<b;a++){d=c.css(this[a],"display");d!=="none"&&c.data(this[a],"olddisplay",
d)}for(a=0;a<b;a++)this[a].style.display="none";return this}},_toggle:c.fn.toggle,toggle:function(a,b,d){var e=typeof a==="boolean";if(c.isFunction(a)&&c.isFunction(b))this._toggle.apply(this,arguments);else a==null||e?this.each(function(){var f=e?a:c(this).is(":hidden");c(this)[f?"show":"hide"]()}):this.animate(S("toggle",3),a,b,d);return this},fadeTo:function(a,b,d,e){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,d,e)},animate:function(a,b,d,e){var f=c.speed(b,
d,e);if(c.isEmptyObject(a))return this.each(f.complete);return this[f.queue===false?"each":"queue"](function(){var h=c.extend({},f),l,k=this.nodeType===1,o=k&&c(this).is(":hidden"),x=this;for(l in a){var r=c.camelCase(l);if(l!==r){a[r]=a[l];delete a[l];l=r}if(a[l]==="hide"&&o||a[l]==="show"&&!o)return h.complete.call(this);if(k&&(l==="height"||l==="width")){h.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY];if(c.css(this,"display")==="inline"&&c.css(this,"float")==="none")if(c.support.inlineBlockNeedsLayout)if(qa(this.nodeName)===
"inline")this.style.display="inline-block";else{this.style.display="inline";this.style.zoom=1}else this.style.display="inline-block"}if(c.isArray(a[l])){(h.specialEasing=h.specialEasing||{})[l]=a[l][1];a[l]=a[l][0]}}if(h.overflow!=null)this.style.overflow="hidden";h.curAnim=c.extend({},a);c.each(a,function(A,C){var J=new c.fx(x,h,A);if(vb.test(C))J[C==="toggle"?o?"show":"hide":C](a);else{var w=wb.exec(C),I=J.cur()||0;if(w){var L=parseFloat(w[2]),g=w[3]||"px";if(g!=="px"){c.style(x,A,(L||1)+g);I=(L||
1)/J.cur()*I;c.style(x,A,I+g)}if(w[1])L=(w[1]==="-="?-1:1)*L+I;J.custom(I,L,g)}else J.custom(I,C,"")}});return true})},stop:function(a,b){var d=c.timers;a&&this.queue([]);this.each(function(){for(var e=d.length-1;e>=0;e--)if(d[e].elem===this){b&&d[e](true);d.splice(e,1)}});b||this.dequeue();return this}});c.each({slideDown:S("show",1),slideUp:S("hide",1),slideToggle:S("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){c.fn[a]=function(d,e,f){return this.animate(b,
d,e,f)}});c.extend({speed:function(a,b,d){var e=a&&typeof a==="object"?c.extend({},a):{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};e.duration=c.fx.off?0:typeof e.duration==="number"?e.duration:e.duration in c.fx.speeds?c.fx.speeds[e.duration]:c.fx.speeds._default;e.old=e.complete;e.complete=function(){e.queue!==false&&c(this).dequeue();c.isFunction(e.old)&&e.old.call(this)};return e},easing:{linear:function(a,b,d,e){return d+e*a},swing:function(a,b,d,e){return(-Math.cos(a*
Math.PI)/2+0.5)*e+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]||c.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a=parseFloat(c.css(this.elem,this.prop));return a&&a>-1E4?a:0},custom:function(a,b,d){function e(l){return f.step(l)}
var f=this,h=c.fx;this.startTime=c.now();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start;this.pos=this.state=0;e.elem=this.elem;if(e()&&c.timers.push(e)&&!ba)ba=setInterval(h.tick,h.interval)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;
this.custom(this.cur(),0)},step:function(a){var b=c.now(),d=true;if(a||b>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var e in this.options.curAnim)if(this.options.curAnim[e]!==true)d=false;if(d){if(this.options.overflow!=null&&!c.support.shrinkWrapBlocks){var f=this.elem,h=this.options;c.each(["","X","Y"],function(k,o){f.style["overflow"+o]=h.overflow[k]})}this.options.hide&&c(this.elem).hide();if(this.options.hide||
this.options.show)for(var l in this.options.curAnim)c.style(this.elem,l,this.options.orig[l]);this.options.complete.call(this.elem)}return false}else{a=b-this.startTime;this.state=a/this.options.duration;b=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||b](this.state,a,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=
c.timers,b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length||c.fx.stop()},interval:13,stop:function(){clearInterval(ba);ba=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){c.style(a.elem,"opacity",a.now)},_default:function(a){if(a.elem.style&&a.elem.style[a.prop]!=null)a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit;else a.elem[a.prop]=a.now}}});if(c.expr&&c.expr.filters)c.expr.filters.animated=function(a){return c.grep(c.timers,function(b){return a===
b.elem}).length};var xb=/^t(?:able|d|h)$/i,Ia=/^(?:body|html)$/i;c.fn.offset="getBoundingClientRect"in t.documentElement?function(a){var b=this[0],d;if(a)return this.each(function(l){c.offset.setOffset(this,a,l)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);try{d=b.getBoundingClientRect()}catch(e){}var f=b.ownerDocument,h=f.documentElement;if(!d||!c.contains(h,b))return d||{top:0,left:0};b=f.body;f=fa(f);return{top:d.top+(f.pageYOffset||c.support.boxModel&&
h.scrollTop||b.scrollTop)-(h.clientTop||b.clientTop||0),left:d.left+(f.pageXOffset||c.support.boxModel&&h.scrollLeft||b.scrollLeft)-(h.clientLeft||b.clientLeft||0)}}:function(a){var b=this[0];if(a)return this.each(function(x){c.offset.setOffset(this,a,x)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);c.offset.initialize();var d,e=b.offsetParent,f=b.ownerDocument,h=f.documentElement,l=f.body;d=(f=f.defaultView)?f.getComputedStyle(b,null):b.currentStyle;
for(var k=b.offsetTop,o=b.offsetLeft;(b=b.parentNode)&&b!==l&&b!==h;){if(c.offset.supportsFixedPosition&&d.position==="fixed")break;d=f?f.getComputedStyle(b,null):b.currentStyle;k-=b.scrollTop;o-=b.scrollLeft;if(b===e){k+=b.offsetTop;o+=b.offsetLeft;if(c.offset.doesNotAddBorder&&!(c.offset.doesAddBorderForTableAndCells&&xb.test(b.nodeName))){k+=parseFloat(d.borderTopWidth)||0;o+=parseFloat(d.borderLeftWidth)||0}e=b.offsetParent}if(c.offset.subtractsBorderForOverflowNotVisible&&d.overflow!=="visible"){k+=
parseFloat(d.borderTopWidth)||0;o+=parseFloat(d.borderLeftWidth)||0}d=d}if(d.position==="relative"||d.position==="static"){k+=l.offsetTop;o+=l.offsetLeft}if(c.offset.supportsFixedPosition&&d.position==="fixed"){k+=Math.max(h.scrollTop,l.scrollTop);o+=Math.max(h.scrollLeft,l.scrollLeft)}return{top:k,left:o}};c.offset={initialize:function(){var a=t.body,b=t.createElement("div"),d,e,f,h=parseFloat(c.css(a,"marginTop"))||0;c.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",
height:"1px",visibility:"hidden"});b.innerHTML="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";a.insertBefore(b,a.firstChild);d=b.firstChild;e=d.firstChild;f=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=e.offsetTop!==5;this.doesAddBorderForTableAndCells=
f.offsetTop===5;e.style.position="fixed";e.style.top="20px";this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15;e.style.position=e.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==h;a.removeChild(b);c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.css(a,
"marginTop"))||0;d+=parseFloat(c.css(a,"marginLeft"))||0}return{top:b,left:d}},setOffset:function(a,b,d){var e=c.css(a,"position");if(e==="static")a.style.position="relative";var f=c(a),h=f.offset(),l=c.css(a,"top"),k=c.css(a,"left"),o=e==="absolute"&&c.inArray("auto",[l,k])>-1;e={};var x={};if(o)x=f.position();l=o?x.top:parseInt(l,10)||0;k=o?x.left:parseInt(k,10)||0;if(c.isFunction(b))b=b.call(a,d,h);if(b.top!=null)e.top=b.top-h.top+l;if(b.left!=null)e.left=b.left-h.left+k;"using"in b?b.using.call(a,
e):f.css(e)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),e=Ia.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.css(a,"marginTop"))||0;d.left-=parseFloat(c.css(a,"marginLeft"))||0;e.top+=parseFloat(c.css(b[0],"borderTopWidth"))||0;e.left+=parseFloat(c.css(b[0],"borderLeftWidth"))||0;return{top:d.top-e.top,left:d.left-e.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||t.body;a&&!Ia.test(a.nodeName)&&
c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(e){var f=this[0],h;if(!f)return null;if(e!==B)return this.each(function(){if(h=fa(this))h.scrollTo(!a?e:c(h).scrollLeft(),a?e:c(h).scrollTop());else this[d]=e});else return(h=fa(f))?"pageXOffset"in h?h[a?"pageYOffset":"pageXOffset"]:c.support.boxModel&&h.document.documentElement[d]||h.document.body[d]:f[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();
c.fn["inner"+b]=function(){return this[0]?parseFloat(c.css(this[0],d,"padding")):null};c.fn["outer"+b]=function(e){return this[0]?parseFloat(c.css(this[0],d,e?"margin":"border")):null};c.fn[d]=function(e){var f=this[0];if(!f)return e==null?null:this;if(c.isFunction(e))return this.each(function(l){var k=c(this);k[d](e.call(this,l,k[d]()))});if(c.isWindow(f))return f.document.compatMode==="CSS1Compat"&&f.document.documentElement["client"+b]||f.document.body["client"+b];else if(f.nodeType===9)return Math.max(f.documentElement["client"+
b],f.body["scroll"+b],f.documentElement["scroll"+b],f.body["offset"+b],f.documentElement["offset"+b]);else if(e===B){f=c.css(f,d);var h=parseFloat(f);return c.isNaN(h)?f:h}else return this.css(d,typeof e==="string"?e:e+"px")}})})(window);
/trunk/applications/rendu/squelettes/js/rendu_especes.js
New file
0,0 → 1,206
function viderRegion() {
$('#selecteur_liste_region').val('0');
region = '0';
}
function modifierTableauEspeces() {
 
id_type_espece = $('select#selecteur_liste_types_especes option:selected').val();
 
// cas de tous les types d'espèces
if(id_type_espece == 0) {
chaine_elements_liste = '<div></div>';
$('#conteneur_selecteur_liste_especes').html(chaine_elements_liste);
return;
}
 
elements_liste = tableau_especes[id_type_espece];
 
var nb_couleur = 0;
var nb_especes = (Object.keys(elements_liste)).length;
var diviseur_colonnes = nb_especes < 10 ? 1 : 3;
var division_elements_liste = Math.floor((Object.keys(elements_liste).length)/diviseur_colonnes);
var compteur_division_element_liste = 0;
 
var especes_triees_par_nom = trierTableau(elements_liste);
var noms_especes_a_id = renverserTableauEtHashcoderIndex(elements_liste);
 
chaine_elements_liste = '<div>';
for(i in especes_triees_par_nom) {
if(compteur_division_element_liste > division_elements_liste) {
chaine_elements_liste += '</div>';
chaine_elements_liste += '<div>';
compteur_division_element_liste = 0;
}
 
var nom_espece = especes_triees_par_nom[i];
var id_espece = noms_especes_a_id[nom_espece.hashCode()];
 
// Si on a pas assez de couleur on en génère une au pif
if(typeof tableau_couleurs[nb_couleur] == 'undefined') {
tableau_couleurs[nb_couleur] = getCouleurAleatoire();
}
 
chaine_elements_liste += '<div id="conteneur_espece_numero_'+id_espece+'" class="conteneur_selecteur_espece">';
chaine_elements_liste += '<span class="legende" style="background-color:'+tableau_couleurs[nb_couleur]+'"></span><input class="selecteur_espece" type="checkbox" id="espece_numero_'+id_espece+'" name="selecteur_especes" value="'+id_espece+'" />';
chaine_elements_liste += '<label for="espece_numero_'+id_espece+'">'+nom_espece+' <span class="nb_obs"></span></label><br />';
chaine_elements_liste += '</div>';
compteur_division_element_liste++;
 
tableau_couleurs_en_cours[id_espece] = tableau_couleurs[nb_couleur];
nb_couleur++;
}
chaine_elements_liste += '</div>';
 
$('#conteneur_selecteur_liste_especes').html(chaine_elements_liste);
}
 
function initialiserListeEspeces() {
 
$('.selecteur_espece').live('change', function() {
modifierTableauEvenements();
obtenirObservations();
});
}
 
function getEspecesSelectionnees() {
 
especes_selectionnees = $('.selecteur_espece');
tab_id_especes = new Array();
 
especes_selectionnees.each(function (index, espece) {
if($(espece).attr('checked') == true && $(espece).val() != 0) {
tab_id_especes.push($(espece).val());
}
});
 
return tab_id_especes;
}
 
function modifierTableauEvenements() {
 
especes_selectionnees = getEspecesSelectionnees();
 
elements_liste = new Array();
 
if(especes_selectionnees.length > 0) {
espece = especes_selectionnees.concat(',');
espece = espece.slice(0, -1);
} else {
espece = '0';
}
 
 
for(i in especes_selectionnees) {
evenements_especes = tableau_evenements_especes[especes_selectionnees[i]];
liste_evenements_cette_espece = evenements_especes.split(',');
for(j in liste_evenements_cette_espece) {
elements_liste[j] = liste_evenements_cette_espece[j];
}
}
 
chaine_elements_liste = '';
chaine_elements_liste = '<option value="0" class="espece_type_0" selected="selected"> Tous les ev&egrave;nements </option>';
for(i in elements_liste) {
chaine_elements_liste += '<option value='+elements_liste[i]+'>'+tableau_evenements[elements_liste[i]]+'</option>';
}
 
$('#selecteur_evenements').html(chaine_elements_liste);
}
 
function initialiserListeEvenements() {
 
$('#selecteur_evenements').change(function() {
evenement = $('select#selecteur_evenements option:selected').val();
obtenirObservations();
});
}
 
function initialiserListeAnnees() {
 
$('#selecteur_liste_annees').change(function() {
annee = $('select#selecteur_liste_annees option:selected').val();
obtenirObservations();
});
}
 
function incrementerValeurSlider() {
var valeur_en_cours = $('#slider_date').slider("value");
if($('#slider_date').slider("value") < $('#slider_date').slider("option", "max")) {
valeur_en_cours++;
$('#slider_date').slider("value",valeur_en_cours);
setDateSlider();
} else {
clearInterval(timerSlider);
$('#demarrer_slider').removeAttr('disabled');
}
}
 
function getAnneeSelectionnee() {
return $('select#selecteur_liste_annees option:selected').val();
}
 
function getEspeceSelectionnee() {
var especes_selectionnees = getEspecesSelectionnees();
if(especes_selectionnees.length == 0) {
return 0;
} else {
return getEspecesSelectionnees().join(',');
}
}
 
function afficherObservations() {
 
var nb_total_obs = 0;
var chaine_couleur = '';
 
for(i in tableau_marqueurs) {
id_obs = i;
obs_associees = infos_observations[id_obs];
 
afficher_marqueur = false;
chaine_couleur = '';
 
for(j in obs_associees.obs) {
 
nb_total_obs++;
date_obs = obs_associees.obs[j].date;
afficher_marqueur = dateEstDansIntervalle(date_obs);
 
if(afficher_marqueur) {
 
// cas de toutes les espèces sélectionnées
// donc pas de couleurs disponibles
if(type_espece == 0) {
chaine_couleur = "#FF0000,";
} else {
if(typeof(tableau_couleurs_en_cours[obs_associees.obs[j].id_espece]) != 'undefined') {
chaine_couleur += tableau_couleurs_en_cours[obs_associees.obs[j].id_espece]+",";
}
}
}
}
 
if(afficher_marqueur && chaine_couleur != '') {
chaine_couleur = chaine_couleur.slice(0,chaine_couleur.length - 1);
var image = obtenirImagePourChaineCouleur(chaine_couleur);
tableau_marqueurs[i].setIcon(image);
 
if(!tableau_marqueurs[i].getVisible()) {
tableau_marqueurs[i].setVisible(true);
}
} else {
tableau_marqueurs[i].setVisible(false);
}
}
 
$(".conteneur_selecteur_espece .nb_obs").html("");
for(id_espece in nb_observations_par_espece) {
$("#conteneur_espece_numero_"+id_espece+" .nb_obs").html(" ("+nb_observations_par_espece[id_espece]+") ");
}
 
$(".total_nb_obs").html(nb_total_obs+" Observations d'évènements phénologiques");
 
if(premier_chargement) {
selectionnerParametresDynamiquesParDefaut();
}
}
/trunk/applications/rendu/squelettes/js/rendu_annees.js
New file
0,0 → 1,184
function modifierTableauEspeces() {
 
id_type_espece = $('select#selecteur_liste_types_especes option:selected').val();
espece = 0;
 
elements_liste = tableau_especes[id_type_espece];
 
var especes_triees_par_nom = trierTableau(elements_liste);
var noms_especes_a_id = renverserTableauEtHashcoderIndex(elements_liste);
 
var nb_couleur = 0;
 
chaine_elements_liste = '';
chaine_elements_liste += '<select id="selecteur_liste_especes" name="selecteur_liste_especes">';
chaine_elements_liste += '<option class="option_espece" value="0"> Toutes les espèces </option>';
for(i in especes_triees_par_nom) {
var nom_espece = especes_triees_par_nom[i];
var id_espece = noms_especes_a_id[nom_espece.hashCode()];
chaine_elements_liste += '<option class="option_espece" value="'+id_espece+'"> '+nom_espece+' </option>';
}
chaine_elements_liste += '</select>';
 
$('#conteneur_selecteur_liste_especes').html(chaine_elements_liste);
}
 
function initialiserListeEspeces() {
 
$('#selecteur_liste_especes').live('change', function() {
modifierTableauEvenements();
obtenirObservations();
});
}
 
function getEspeceSelectionnee() {
 
var espece_selectionnee = $('.option_espece:selected').val();
espece = espece_selectionnee;
 
return espece_selectionnee;
}
 
function modifierTableauEvenements() {
 
espece_selectionnee = getEspeceSelectionnee();
evenement = 0;
 
if(espece_selectionnee == 0 ) {
espece_selectionnee = 0;
liste_evenements_cette_espece = new Array();
} else {
evenements_especes = tableau_evenements_especes[espece_selectionnee];
liste_evenements_cette_espece = evenements_especes.split(',');
}
 
elements_liste = new Array();
 
for(j in liste_evenements_cette_espece) {
elements_liste[j] = liste_evenements_cette_espece[j];
}
 
chaine_elements_liste = '';
chaine_elements_liste = '<option value="0" class="espece_type_0" selected="selected"> Tous les ev&egrave;nements </option>';
for(i in elements_liste) {
chaine_elements_liste += '<option value='+elements_liste[i]+'>'+tableau_evenements[elements_liste[i]]+'</option>';
}
 
$('#selecteur_evenements').html(chaine_elements_liste);
}
 
function initialiserListeEvenements() {
 
$('#selecteur_evenements').change(function() {
evenement = $('select#selecteur_evenements option:selected').val();
obtenirObservations();
});
}
 
function initialiserListeAnnees() {
 
var chaine_element_date = '';
var nb_couleur = 0;
 
var diviseur_colonnes = annees_ayant_obs.length < 5 ? 1 : 3;
var division_elements_liste = Math.floor(annees_ayant_obs.length/diviseur_colonnes);
var compteur_division_element_liste = 0;
 
chaine_element_date = '<div class="critere" id="selecteur_liste_annees">';
chaine_element_date += '<div>';
 
for(i in annees_ayant_obs) {
if(compteur_division_element_liste > division_elements_liste) {
chaine_element_date += '</div>';
chaine_element_date += '<div>';
compteur_division_element_liste = 0;
}
 
// Si on a pas assez de couleur on en génère une au pif
if(typeof tableau_couleurs[nb_couleur] == 'undefined') {
tableau_couleurs[nb_couleur] = getCouleurAleatoire();
}
 
var annee_ayant_obs = annees_ayant_obs[i];
chaine_element_date += '<span id="conteneur_annee_numero_'+annee_ayant_obs+'" class="conteneur_annee">';
chaine_element_date += '<span class="legende" style="background-color:'+tableau_couleurs[nb_couleur]+'"></span>';
chaine_element_date += '<input class="selecteur_date" type="checkbox" id="annee_numero_'+annee_ayant_obs+'" name="selecteur_annees" value="'+annee_ayant_obs+'" />';
chaine_element_date += '<label for="annee_numero_'+annee_ayant_obs+'">'+annee_ayant_obs+' <span class="nb_obs"></span></label><br />';
chaine_element_date += '</span>';
 
compteur_division_element_liste++;
 
tableau_couleurs_en_cours[annee_ayant_obs] = tableau_couleurs[nb_couleur];
nb_couleur++;
}
 
chaine_element_date += '</div>';
chaine_element_date += '</div>';
 
$('#conteneur_selecteur_liste_annees').html(chaine_element_date);
 
$('#selecteur_liste_annees').change(function() {
annee = getAnneeSelectionnee();
obtenirObservations();
});
}
 
function getAnneeSelectionnee() {
if($('.selecteur_date:checked').length > 0) {
var annees_selectionnes = $('.selecteur_date:checked').map(function(){
return $(this).val();
}).get();
return annees_selectionnes.join(',');
} else {
return (new Date()).getFullYear();
}
}
 
function afficherObservations() {
 
var nb_total_obs = 0;
var chaine_couleur = '';
for(i in tableau_marqueurs) {
id_obs = i;
obs_associees = infos_observations[id_obs];
 
afficher_marqueur = false;
chaine_couleur = '';
 
for(j in obs_associees.obs) {
 
nb_total_obs++;
date_obs = obs_associees.obs[j].date;
afficher_marqueur = dateEstDansIntervalle(date_obs);
 
if(afficher_marqueur) {
if(typeof(tableau_couleurs_en_cours[date_obs.getFullYear()]) != 'undefined') {
chaine_couleur += tableau_couleurs_en_cours[date_obs.getFullYear()]+",";
}
}
}
 
if(afficher_marqueur && chaine_couleur != '') {
chaine_couleur = chaine_couleur.slice(0,chaine_couleur.length - 1);
var image = obtenirImagePourChaineCouleur(chaine_couleur);
tableau_marqueurs[i].setIcon(image);
 
if(!tableau_marqueurs[i].getVisible()) {
tableau_marqueurs[i].setVisible(true);
}
} else {
tableau_marqueurs[i].setVisible(false);
}
}
 
$(".conteneur_selecteur_liste_annees .nb_obs").html("");
for(annee in nb_observations_par_annee) {
$("#conteneur_annee_numero_"+annee+" .nb_obs").html(" ("+nb_observations_par_annee[annee]+") ");
}
 
$(".total_nb_obs").html(nb_total_obs+" Observations d'évènements phénologiques");
 
if(premier_chargement) {
selectionnerParametresDynamiquesParDefaut();
}
}
/trunk/applications/rendu/squelettes/js/.directory
New file
0,0 → 1,5
[Dolphin]
Timestamp=2011,2,1,14,2,36
 
[Settings]
ShowDotFiles=true
/trunk/applications/rendu/squelettes/cartes/observations_especes.tpl.html
New file
0,0 → 1,204
<!-- ODS_RENDU - DEBUT CARTE OBS -->
<div id="contenu_application">
<?= $script; ?>
 
<div id="conteneur_slider_date" class="criteres">
<div id="slider_date"> </div>
<div id="valeurs_date"> </div>
</div>
 
<span class="conteneur_bouton_sliders">
<input type="button" id="demarrer_slider" value="Demarrer" />
<input type="button" id="arreter_slider" value="Arreter" />
</span>
 
<hr class="separation_invisible" />
 
<div>
<div class="conteneur_criteres">
<span class="criteres">
<span class="selecteur_critere cacher_widget" id="conteneur_selecteur_liste_annees">
<select id="selecteur_liste_annees" name="selecteur_liste_annees">
<?php foreach($annees_ayant_obs as $annee_ayant_obs) { ?>
<option value="<?= $annee_ayant_obs; ?>"> <?= $annee_ayant_obs; ?> </option>
<?php } ?>
</select>
</span>
</span>
 
<span class="selecteur_critere cacher_widget" id="conteneur_selecteur_liste_types_especes">
<select id="selecteur_liste_types_especes">
<option value="0" class="espece_type_0" selected="selected"> Tous les Types d'esp&egrave;ce </option>
<?php foreach($especes as $id_type_espece => $type_espece) : ?>
<option value="<?= $id_type_espece; ?>"> <?= ucfirst($type_espece['nom']); ?> </option>
<?php endforeach; ?>
</select>
</span>
 
<span class="selecteur_critere cacher_widget" id="conteneur_selecteur_liste_evenements">
<select id="selecteur_evenements">
<option value="0" class="espece_type_0" selected="selected"> Tous les ev&egrave;nements </option>
</select>
</span>
 
<br />
 
<span class="selecteur_critere cacher_widget" id="conteneur_selecteur_liste_region">
<select name="region" id="selecteur_liste_region">
<option value="0" selected="selected">Toutes les régions</option>
<option value="42">Alsace</option>
<option value="72">Aquitaine</option>
<option value="83">Auvergne</option>
<option value="25">Basse-Normandie</option>
<option value="26">Bourgogne</option>
<option value="53">Bretagne</option>
<option value="24">Centre</option>
<option value="21">Champagne-Ardenne</option>
<option value="94">Corse</option>
<option value="43">Franche-Comté</option>
<option value="01">Guadeloupe</option>
<option value="03">Guyane</option>
<option value="23">Haute-Normandie</option>
<option value="11">Île-de-France</option>
<option value="04">La Réunion</option>
<option value="91">Languedoc-Roussillon</option>
<option value="74">Limousin</option>
<option value="41">Lorraine</option>
<option value="02">Martinique</option>
<option value="06">Mayotte</option>
<option value="73">Midi-Pyrénées</option>
<option value="31">Nord-Pas-de-Calais</option>
<option value="52">Pays de la Loire</option>
<option value="22">Picardie</option>
<option value="54">Poitou-Charentes</option>
<option value="93">Provence-Alpes-Côte d'Azur</option>
<option value="82">Rhône-Alpes</option>
</select>
</span>
 
<span class="selecteur_critere cacher_widget" id="conteneur_selecteur_liste_departement">
<select name="dep" id="selecteur_liste_departement" onchange="viderRegion()">
<option selected="selected" value="0">Tous les départements</option>
<option value="01">Ain</option>
<option value="02">Aisne</option>
<option value="03">Allier</option>
<option value="04">Alpes de Haute Provence</option>
<option value="05">Hautes Alpes</option>
<option value="06">Alpes Maritimes</option>
<option value="07">Ardèche</option>
<option value="08">Ardennes</option>
<option value="09">Ariège</option>
<option value="10">Aube</option>
<option value="11">Aude</option>
<option value="12">Aveyron</option>
<option value="13">Bouches du Rhône</option>
<option value="14">Calvados</option>
<option value="15">Cantal</option>
<option value="16">Charente</option>
<option value="2A">Corse du Sud</option>
<option value="2B">Haute-Corse</option>
<option value="17">Charente Maritime</option>
<option value="18">Cher</option>
<option value="19">Corrèze</option>
<option value="21">Côte d'Or</option>
<option value="22">Côtes d'Armor</option>
<option value="23">Creuse</option>
<option value="24">Dordogne</option>
<option value="25">Doubs</option>
<option value="26">Drôme</option>
<option value="27">Eure</option>
<option value="28">Eure et Loir</option>
<option value="29">Finistère</option>
<option value="30">Gard</option>
<option value="31">Haute Garonne</option>
<option value="32">Gers</option>
<option value="33">Gironde</option>
<option value="34">Hérault</option>
<option value="35">Ille et Vilaine</option>
<option value="36">Indre</option>
<option value="37">Indre et Loire</option>
<option value="38">Isère</option>
<option value="39">Jura</option>
<option value="40">Landes</option>
<option value="41">Loir et Cher</option>
<option value="42">Loire</option>
<option value="43">Haute Loire</option>
<option value="44">Loire Atlantique</option>
<option value="45">Loiret</option>
<option value="46">Lot</option>
<option value="47">Lot et Garonne</option>
<option value="48">Lozère</option>
<option value="49">Maine et Loire</option>
<option value="50">Manche</option>
<option value="51">Marne</option>
<option value="52">Haute Marne</option>
<option value="53">Mayenne</option>
<option value="54">Meurthe et Moselle</option>
<option value="55">Meuse</option>
<option value="56">Morbihan</option>
<option value="57">Moselle</option>
<option value="58">Nièvre</option>
<option value="59">Nord</option>
<option value="60">Oise</option>
<option value="61">Orne</option>
<option value="62">Pas de Calais</option>
<option value="63">Puy de Dôme</option>
<option value="64">Pyrénées Atlantiques</option>
<option value="65">Hautes Pyrénées</option>
<option value="66">Pyrénées Orientales</option>
<option value="67">Bas Rhin</option>
<option value="68">Haut Rhin</option>
<option value="69">Rhône</option>
<option value="70">Haute Saône</option>
<option value="71">Saône et Loire</option>
<option value="72">Sarthe</option>
<option value="73">Savoie</option>
<option value="74">Haute Savoie</option>
<option value="75">Paris</option>
<option value="76">Seine Maritime</option>
<option value="77">Seine et Marne</option>
<option value="78">Yvelines</option>
<option value="79">Deux Sèvres</option>
<option value="80">Somme</option>
<option value="81">Tarn</option>
<option value="82">Tarn et Garonne</option>
<option value="83">Var</option>
<option value="84">Vaucluse</option>
<option value="85">Vendée</option>
<option value="86">Vienne</option>
<option value="87">Haute Vienne</option>
<option value="88">Vosges</option>
<option value="89">Yonne</option>
<option value="90">Territoire de Belfort</option>
<option value="91">Essonne</option>
<option value="92">Hauts de Seine</option>
<option value="93">Seine Saint Denis</option>
<option value="94">Val de Marne</option>
<option value="95">Val d'Oise</option>
<option value="973">Guyane</option>
<option value="976">Mayotte</option>
<option value="971">Guadeloupe</option>
<option value="972">Martinique</option>
<option value="974">Réunion</option>
<option value="975">Saint Pierre et Miquelon</option>
</select>
</span>
 
<hr class="separation_invisible" />
 
<div class="selecteur_critere conteneur_selecteur_liste_especes" id="conteneur_selecteur_liste_especes">
</div>
 
</div>
 
<div class="conteneur_carte" >
<div id="map_canvas" style="width:100%; height:100%"></div>
</div>
 
<div class="total_nb_obs"></div>
</div>
 
<hr class="separation_invisible" />
<div class="criteres cacher_widget" id="lien_cette_recherche"><a href="<?= $url; ?>">Obtenir le widget de cette recherche </a></div>
</div>
<!-- ODS_RENDU - FIN CARTE OBS -->
/trunk/applications/rendu/squelettes/cartes/observations_annees.tpl.html
New file
0,0 → 1,53
<!-- ODS_RENDU - DEBUT CARTE OBS -->
<div id="contenu_application">
<?= $script; ?>
 
<div id="conteneur_slider_date" class="criteres">
<div id="slider_date"> </div>
<div id="valeurs_date"> </div>
</div>
 
<span class="conteneur_bouton_sliders">
<input type="button" id="demarrer_slider" value="Demarrer" />
<input type="button" id="arreter_slider" value="Arreter" />
</span>
 
<hr class="separation_invisible" />
 
<div>
<div class="criteres">
<span class="selecteur_critere cacher_widget" id="conteneur_selecteur_liste_types_especes">
<select id="selecteur_liste_types_especes">
<option value="0" class="espece_type_0" selected="selected"> Tous les types d'esp&egrave;ce </option>
<?php foreach($especes as $id_type_espece => $type_espece) : ?>
<option value="<?= $id_type_espece; ?>"> <?= ucfirst($type_espece['nom']); ?> </option>
<?php endforeach; ?>
</select>
</span>
 
<span class="selecteur_critere" id="conteneur_selecteur_liste_especes">
</span>
 
<span class="selecteur_critere cacher_widget" id="conteneur_selecteur_liste_evenements">
<select id="selecteur_evenements">
<option value="0" class="espece_type_0" selected="selected"> Tous les ev&egrave;nements </option>
</select>
</span>
 
<hr class="separation_invisible" />
<div class="conteneur_selecteur_liste_annees selecteur_critere cacher_widget" id="conteneur_selecteur_liste_annees">
</div>
</div>
 
<div class="conteneur_carte" >
<div id="map_canvas" style="width:100%; height:100%"></div>
</div>
 
<div class="total_nb_obs"></div>
</div>
 
<hr class="separation_invisible" />
 
<div class="criteres cacher_widget" id="lien_cette_recherche"><a href="<?= $url; ?>">Obtenir le widget de cette recherche </a></div>
</div>
<!-- ODS_RENDU - FIN CARTE OBS -->
/trunk/applications/rendu/controleurs/Liens.php
New file
0,0 → 1,138
<?php
// declare(encoding='UTF-8');
 
/**
* Classe de gestion des liens.
*
* @package ODS_saisie
* @category Php 5.2
* @author Aurélien Peronnet <aurelien@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
* @version SVN: $Id: Fiche.php 152 2010-09-06 16:19:12Z jpm $
*/
class Liens extends aControleur {
 
public static function construireUrl($tableau_params, $conserver_parametres_actuels = false) {
if ($conserver_parametres_actuels) {
return '?'.http_build_query($tableau_params + $_GET);
}
return '?'.http_build_query($tableau_params);
}
public static function getUrlSquelette() {
$url_base = self::getUrlBaseComplete();
$url_base_squelette = $url_base.Config::get('dossier_squelettes').DS;
return $url_base_squelette;
}
public static function getUrlStyle() {
$url_base_style = self::getUrlSquelette().'css'.DS;
return $url_base_style;
}
public static function getUrlScript() {
$url_base_script = self::getUrlSquelette().'js'.DS;
return $url_base_script;
}
public static function getUrlImage() {
$url_base_image = self::getUrlSquelette().'images'.DS;
return $url_base_image;
}
public static function getUrlImageEspece($nom_sci, $format = 'CXS') {
$nom_sci_formate = strtolower(str_replace(' ', '_', $nom_sci));
if(!file_exists(Config::get('dossier_images_especes').$format.'/'.$nom_sci_formate.'.jpg')) {
return Config::get('url_images_especes').$format.'/'.'vide.jpg';
}
return Config::get('url_images_especes').$format.'/'.$nom_sci_formate.'.jpg';
}
public static function getCreditImageEspece($nom_sci) {
$nom_sci_formate = strtolower(str_replace(' ', '_', $nom_sci));
if(!file_exists(Config::get('dossier_images_especes').'/'.$nom_sci_formate.'.txt')) {
$credit = '';
} else {
$credit = file_get_contents(Config::get('dossier_images_especes').'/'.$nom_sci_formate.'.txt');
}
if(trim($credit) != '') {
$credit = 'Crédits : '.$credit;
}
return $credit;
}
public static function getUrlBaseReecrite() {
if(isset($_SERVER['REDIRECT_URL']) && $_SERVER['REDIRECT_URL'] != '') {
}
$base_url_reecrite = 'http://'.$_SERVER['SERVER_NAME'].$_SERVER['REDIRECT_URL'];
$base_url_reecrite .= '/';
return $base_url_reecrite;
}
public static function getUrlBase() {
$base_vrai_chemin = str_replace(realpath($_SERVER['DOCUMENT_ROOT']),'',realpath(Application::getChemin()));
$base_vrai_chemin .= '/';
return $base_vrai_chemin;
}
public static function getUrlBaseComplete() {
return 'http://'.$_SERVER['SERVER_NAME'].str_replace(realpath($_SERVER['DOCUMENT_ROOT']),'',realpath(Application::getChemin())).'/';
}
public static function getUrlConsultationFicheStation($id_station) {
$params = array(
'module' => 'Station',
'action' => 'afficherInformationsStation',
'id_station' => $id_station
);
return self::construireUrl($params);
}
public static function renvoyerStylesInclus() {
$styles = '';
$styles .= '<link href="'.self::getUrlStyle().'rendu.css" rel="stylesheet" type="text/css"/>';
$styles .= '<link href="'.self::getUrlStyle().'jquery_ui/jquery-ui-1.8.9.custom.css" rel="stylesheet" type="text/css"/>';
return $styles;
}
public static function renvoyerScriptsInclus() {
$scripts = '';
$scripts .= '<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false"></script>';
$scripts .= '<script type="text/javascript" src="'.self::getUrlScript().'jquery-1.4.4.min.js"></script>';
$scripts .= '<script type="text/javascript" src="'.self::getUrlScript().'jquery_ui/jquery-ui-1.8.9.custom.min.js"></script>';
$scripts .= '<script type="text/javascript" src="'.self::getUrlScript().'commun.js"></script>';
$scripts .= '<script> var urlBaseJrest = "'.Config::get('url_jrest').'";</script>';
return $scripts;
}
}
?>
/trunk/applications/rendu/controleurs/AppControleur.php
New file
0,0 → 1,237
<?php
// declare(encoding='UTF-8');
/**
* Classe mère des controleurs de l'application.
* Elle repartie les demandes utilisateurs dans les différents modules, executent les actions et redistribue le code
* html dans les différentes fonctions d'affichage.
* C'est une Singleton.
*
* @category PHP 5.2
* @package saisie
* @author Aurélien Peronnet <aurelien@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @license GPL-v3 et CECILL-v2
* @version $Id: AppControleur.php 160 2010-09-13 13:10:41Z aurelien $
*/
 
class AppControleur extends Controleur {
/**
* Instance de la classe pointant sur elle même (pour le pattern singleton)
*/
private static $instance = null;
/**
* Instance de l'utilisateur en cours
*/
private static $utilisateur = null;
/**
* Paramètres
*/
private static $parametres = array();
/**
* Constructeur vide
*/
public function __construct() {
$sortie = array('titre' => '', 'description' => '', 'tags' => '',
'corps' => '', 'tete' => '', 'pied' => '', 'navigation' => '');
$url = new Url(Config::get('url_base_index'));
self::$parametres = array( 'module' => 'Rendu',
'action' => 'executerActionParDefaut',
'sortie' => $sortie,
'url' => $url);
parent::__construct();
}
/**
* Initialisation du controleur principal en fonction des paramètres de l'url.
*/
public static function initialiser() {
self::verifierCreationInstance();
self::gererSession();
if (isset($_GET['module'])) {
self::$parametres['module'] = $_GET['module'];
}
self::$parametres['url']->setVariableRequete('module', self::$parametres['module']);
if (isset($_GET['action'])) {
self::$parametres['action'] = $_GET['action'];
}
self::$parametres['url']->setVariableRequete('action', self::$parametres['action']);
$registre = Registre::getInstance();
$registre->set('parametres', self::$parametres);
$ClasseModule = self::$parametres['module'];
$action = self::$parametres['action'];
$module = new $ClasseModule();
$module->$action();
self::fusionnerSortie($module->getSortie());
}
private static function gererSession() {
if (Config::get('session_demarrage')) {
// Attribution d'un nom à la session
session_name(Config::get('session_nom'));
if(!isset($_SESSION)){
// Démarrage de la session si besoin
session_start();
}
}
}
/**
* Fusionne un tableau de sortie par défaut avec le tableau renvoyé par l'action du module.
* @param array le tableauàfusionner
*/
private static function fusionnerSortie($sortie) {
self::$parametres['sortie'] = array_merge(self::$parametres['sortie'], $sortie);
}
/**
* Vérifie si l'instance de classe été crée, si non la crée.
*/
private static function verifierCreationInstance() {
if (empty(self::$instance)) {
self::$instance = new AppControleur();
}
}
public static function getInstance() {
self::verifierCreationInstance();
return self::$instance;
}
/**
* Retourne le titre du contenu de l'application.
*/
public static function getMetaTitre() {
$sortie = self::$parametres['sortie']['titre'];
if (Config::get('sortie_encodage') != Config::get('appli_encodage')) {
$sortie = mb_convert_encoding($sortie, Config::get('sortie_encodage'), Config::get('appli_encodage'));
}
return $sortie;
}
/**
* Retourne la description du contenu de l'application.
*/
public static function getMetaDescription() {
$sortie = self::$parametres['sortie']['description'];
if (Config::get('sortie_encodage') != Config::get('appli_encodage')) {
$sortie = mb_convert_encoding($sortie, Config::get('sortie_encodage'), Config::get('appli_encodage'));
}
return $sortie;
}
/**
* Retourne les mots-clés (tags) du contenu de l'application.
*/
public static function getMetaTags() {
$sortie = self::$parametres['sortie']['tags'];
if (Config::get('sortie_encodage') != Config::get('appli_encodage')) {
$sortie = mb_convert_encoding($sortie, Config::get('sortie_encodage'), Config::get('appli_encodage'));
}
return $sortie;
}
/**
* Retourne le contenu du corps de l'application.
*/
public static function getContenuCorps() {
$sortie = self::$parametres['sortie']['corps'];
if (Config::get('sortie_encodage') != Config::get('appli_encodage')) {
$sortie = mb_convert_encoding($sortie, Config::get('sortie_encodage'), Config::get('appli_encodage'));
}
return $sortie;
}
/**
* Retourne le contenu de la tête de l'application.
*/
public static function getContenuTete() {
$sortie = self::$parametres['sortie']['tete'];
if (Config::get('sortie_encodage') != Config::get('appli_encodage')) {
$sortie = mb_convert_encoding($sortie, Config::get('sortie_encodage'), Config::get('appli_encodage'));
}
return $sortie;
}
/**
* Retourne le contenu des styles de l'application.
*/
public static function getContenuStyle() {
$sortie = self::$parametres['sortie']['tete'];
if (Config::get('sortie_encodage') != Config::get('appli_encodage')) {
$sortie = mb_convert_encoding($sortie, Config::get('sortie_encodage'), Config::get('appli_encodage'));
}
return $sortie;
}
/**
* Retourne le contenu des script de l'application.
*/
public static function getContenuScript() {
$sortie = self::$parametres['sortie']['script'];
if (Config::get('sortie_encodage') != Config::get('appli_encodage')) {
$sortie = mb_convert_encoding($sortie, Config::get('sortie_encodage'), Config::get('appli_encodage'));
}
return $sortie;
}
/**
* Retourne le contenu du pied de l'application.
*/
public static function getContenuPied() {
$sortie = self::$parametres['sortie']['pied'];
if (Config::get('sortie_encodage') != Config::get('appli_encodage')) {
$sortie = mb_convert_encoding($sortie, Config::get('sortie_encodage'), Config::get('appli_encodage'));
}
return $sortie;
}
/**
* Retourne les éléments de navigation de l'application.
*/
public static function getContenuNavigation() {
$sortie = self::$parametres['sortie']['navigation'];
if (Config::get('sortie_encodage') != Config::get('appli_encodage')) {
$sortie = mb_convert_encoding($sortie, Config::get('sortie_encodage'), Config::get('appli_encodage'));
}
return $sortie;
}
/**
* Retourne les chronos pris dans l'appli
*/
public static function getChrono() {
$sortie = '';
if (Config::get('chronometrage')) {
$chrono = Chronometre::afficherChrono();
$sortie = mb_convert_encoding($chrono, Config::get('sortie_encodage'), Config::get('appli_encodage'));
}
return $sortie;
}
/**
* Retourne les messages d'exceptions et d'erreurs.
*/
public static function getExceptions() {
$sortie = (Config::get('fw_debogage')) ? GestionnaireException::getExceptions() : '';
if (Config::get('sortie_encodage') != Config::get('appli_encodage')) {
$sortie = mb_convert_encoding($sortie, Config::get('sortie_encodage'), Config::get('appli_encodage'));
}
return $sortie;
}
}
 
?>
/trunk/applications/rendu/controleurs/Rendu.php
New file
0,0 → 1,144
<?php
// declare(encoding='UTF-8');
/**
* Classe de gestion des epeces.
*
* @package Collection
* @category Php 5.2
* @author Aurélien PERONNET <aurelien@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
* @version SVN: $Id: Espece.php 152 2010-09-06 16:19:12Z jpm $
*/
class Rendu extends aControleur {
 
public function __construct() {
 
parent::__construct();
$this->initialiser();
}
 
public function executerActionParDefaut() {
return $this->afficherCarte();
}
 
private function initialiser() {
 
}
 
private function mb_ucfirst($str) {
$fc = mb_strtoupper(mb_substr($str, 0, 1));
return $fc.mb_substr($str, 1);
}
 
private function afficherCarte() {
 
$carte = $this->getCarteDemandee();
 
$espece_dao = new EspeceDao();
$especes = $espece_dao->getListeEspecesParType();
 
$evenements_dao = new EvenementDao();
$evenements = $evenements_dao->getListeEvenements();
 
$observations_dao = new ObservationDao();
$annees_ayant_obs = $observations_dao->getAnneesAyantObservations();
 
$chaine_variables_script = '<script type="text/javascript" language="javascript">';
 
$chaine_variables_script .= ' var url_widget = "'.Liens::getUrlBaseComplete().'"; ';
$chaine_variables_script .= ' var tableau_especes = new Array(); ';
$chaine_variables_script .= ' var tableau_evenements_especes = new Array(); ';
$chaine_variables_script .= ' var tableau_evenements = new Array(); ';
$chaine_variables_script .= ' var annees_ayant_obs = '.json_encode($annees_ayant_obs).'; ';
 
foreach($especes as $id_type_espece => $type_espece) {
 
$chaine_variables_script .= 'tableau_especes['.$id_type_espece.'] = new Array();';
 
foreach($type_espece['especes'] as $id_espece => $espece) {
$chaine_variables_script .= 'tableau_especes['.$id_type_espece.']['.$id_espece.'] = "'.$this->mb_ucfirst($espece['nom_vernaculaire']).'";';
$chaine_variables_script .= 'tableau_evenements_especes['.$id_espece.'] = "'.$espece['evenements'].'";';
}
}
 
foreach($evenements as $id_evenement => $evenement) {
$nom_evenement = $this->mb_ucfirst($evenement['nom']);
if(trim($evenement['nom']) != '') {
$nom_evenement .= ' stade '.$evenement['code'];
}
$chaine_variables_script .= 'tableau_evenements['.$id_evenement.'] = "'.$nom_evenement.'";';
}
$url_limites_communales = $this->obtenirUrlsLimitesCommunales();
$chaine_variables_script .= 'var urlsLimitesCommunales = '.$url_limites_communales.';';
 
$chaine_variables_script .= '</script> ';
$chaine_variables_script .= '<script type="text/javascript" src="'.Liens::getUrlScript().'rendu_'.$carte.'.js"></script>';
 
$donnees = array();
$donnees['url'] = Liens::getUrlBaseComplete().'rendu_widget.php?carte='.$carte;
$donnees['script'] = $chaine_variables_script;
$donnees['especes'] = $especes;
$donnees['evenements'] = $evenements;
$donnees['annees_ayant_obs'] = $annees_ayant_obs;
 
$formulaire = $this->getVue('cartes/observations_'.$carte,$donnees);
$this->setSortie(self::RENDU_CORPS, $formulaire);
}
 
private function getCarteDemandee() {
 
$carte = 'especes';
 
if(isset($_GET['carte'])) {
$carte = $_GET['carte'];
}
 
return $carte;
}
 
private function obtenirUrlsLimitesCommunales() {
$urls = null;
if (isset($_GET['departement'])) {
// si on veut afficher les limites départementales on va compter et chercher les noms de fichiers
$fichiersKml = $this->chercherFichierKml();
if (count($fichiersKml) > 0) {
foreach ($fichiersKml as $kml => $dossier){
$url_limites_communales = sprintf(Config::get('limitesCommunaleUrlTpl'), $dossier, $kml);
$urls[] = $url_limites_communales;
}
}
}
$urls = json_encode($urls);
return $urls;
}
 
private function chercherFichierKml(){
$fichiers = array();
$chemins = explode(',', Config::get('communesKmzChemin'));
$departements = explode(',', $_GET['departement']);// plrs code de départements peuvent être demandés séparés par des virgules
$departements_trouves = array();
foreach ($chemins as $dossier_chemin) {
if ($dossier_ressource = opendir($dossier_chemin)) {
while ($element = readdir($dossier_ressource)) {
if ($element != '.' && $element != '..') {
foreach ($departements as $departement) {
$nom_dossier = basename($dossier_chemin);
if (!isset($departements_trouves[$departement]) || $departements_trouves[$departement] == $nom_dossier) {
$dept_protege = preg_quote($departement);
if (!is_dir($dossier_chemin.'/'.$element) && preg_match("/^$dept_protege(?:_[0-9]+|)\.km[lz]$/", $element)) {
$fichiers[$element] = $nom_dossier;
$departements_trouves[$departement] = $nom_dossier;
}
}
}
}
}
closedir($dossier_ressource);
}
}
 
return $fichiers;
}
}
/trunk/applications/rendu/controleurs/aControleur.php
New file
0,0 → 1,232
<?php
// declare(encoding='UTF-8');
/**
* Classe Controleur générale de l'application saisie.
*
* @category php5.2
* @package saisie
* @author Aurélien Peronnet <aurelien@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
* @version SVN: $Id: aControleur.php 152 2010-09-06 16:19:12Z aurelien $
*/
abstract class aControleur extends Controleur {
const FMT_DATE = '%d/%m/%Y';// Supporte les formats de dates non valides (1989-00-00)
const FMT_DATE_TXT = '%A %d %B %Y';
const FMT_DATE_HEURE = '%d/%m/%Y %H:%i:%s';// Supporte les formats de dates non valides (1989-00-00 00:00:00)
const FMT_DATE_HEURE_TXT = '%A %d %B %Yà%H:%M';
const META_TITRE = 'titre';
const META_DESCRIPTION = 'description';
const META_TAGS = 'tags';
const RENDU_TETE = 'tete';
const RENDU_CORPS = 'corps';
const RENDU_PIED = 'pied';
const RENDU_NAVIGATION = 'navigation';
const TYPE_AUTRE = 'AUTRE';
const TYPE_TOTAL = 'TOTAL';
const SEPARATEUR_TYPE_VALEUR = '##';
const SEPARATEUR_VALEURS = ';;';
const SEPARATEUR_DONNEES = '||';
const VALEUR_NULL = 'NC';
private $sortie = array();
private $parametres = array();
protected static $hierarchie_appels = array();
// FIXME : voir s'il est plus intéressant d'utiliser une méthode dans les classes filles
protected $url = null;
public function __construct() {
$registre = Registre::getInstance();
$this->parametres = $registre->get('parametres');
$this->url = $this->parametres['url'];
parent::__construct();
}
/**
* Attribue une position de sortie à un contenu.
*/
protected function setSortie($position, $contenu, $fusionner = false) {
if ($this->verifierExistenceTypeSortie($position)) {
if ($fusionner) {
$this->sortie[$position] .= $contenu;
} else {
$this->sortie[$position] = $contenu;
}
}
}
/**
* Vérifie l'existence du type de sortie indiqué pour son utilisation dans le tableau de sortie.
* @param string le type de sortie à tester.
* @return bool true si le type de sortie est valide, sinon false.
*/
private function verifierExistenceTypeSortie($type) {
$existe = true;
if ($type != self::RENDU_TETE &&
$type != self::RENDU_NAVIGATION &&
$type != self::RENDU_CORPS &&
$type != self::RENDU_PIED &&
$type != self::META_TITRE &&
$type != self::META_DESCRIPTION &&
$type != self::META_TAGS &&
$type != self::STYLES &&
$type != self::SCRIPTS
) {
trigger_error("Le type de sortie '$type' n'est pas une valeur prédéfinie.", E_USER_WARNING);
$existe = false;
}
return $existe;
}
/**
* Retourne le tableau de sortie à utiliser dans le controleur principal de l'application.
*/
public function getSortie() {
return $this->sortie;
}
 
/**
* Execute l'action d'un module donnée et fusionne le résultat avec le tableau de sortie.
*/
protected function executerAction($ClasseModule, $action) {
$module = new $ClasseModule();
$module->$action();
$this->fusionnerSortie($module->getSortie());
}
/**
* Fusionne un tableau de sortie par défaut avec le tableau passé en paramètre.
* @param array le tableau à fusionner
*/
private function fusionnerSortie($sortie) {
$this->sortie = array_merge($this->sortie, $sortie);
}
protected function formaterParenthese($chaine_a_afficher) {
if ($chaine_a_afficher != '') {
$chaine_a_afficher = '('.$chaine_a_afficher.')';
}
return $chaine_a_afficher;
}
protected function formaterSautDeLigne($chaine_a_formater) {
$txt_a_retourner = preg_replace('/\n/', '<br />', $chaine_a_formater);
return $txt_a_retourner;
}
protected function formaterTableauDeTxt($tableau_de_txt, $majuscule = true, $point_final = true) {
$chaine_a_afficher = '';
$taille_du_tableau = count($tableau_de_txt);
if ($taille_du_tableau > 0) {
$index_avt_dernier = $taille_du_tableau - 1;
for ($i = 0; $i < $taille_du_tableau; $i++) {
$mot = $tableau_de_txt[$i];
if ($i != $index_avt_dernier) {
$chaine_a_afficher .= $mot.', ';
} else {
$chaine_a_afficher .= $this->nettoyerPointFinal($mot);
if ($point_final) {
$chaine_a_afficher .= '.';
}
}
}
}
if ($majuscule) {
$chaine_a_afficher = ucfirst($chaine_a_afficher);
}
return $chaine_a_afficher;
}
protected function formaterOuiNon($chaine_a_formater) {
$txt_a_retourner = '';
if ($chaine_a_formater == '0') {
$txt_a_retourner = 'non';
} else if ($chaine_a_formater == '1') {
$txt_a_retourner = 'oui';
}
return $txt_a_retourner;
}
protected function formaterDate($date, $format = self::FMT_DATE_HEURE) {
if ($date == '' || $date == '0000-00-00' || $date == '0000-00-00 00:00:00') {
$date = 'Inconnue';
} else {
if (preg_match('/^([0-9]{4})-([0-9]{2})-([0-9]{2})(?: ([0-9]{2}):([0-9]{2}):([0-9]{2})|)$/', $date, $match)) {// Date Heure
$annee = $match[1];
$mois = $match[2];
$jour = $match[3];
$heure = (isset($match[4])) ? $match[4] : '00';
$minute = (isset($match[5])) ? $match[5] : '00';
$seconde = (isset($match[6])) ? $match[6] : '00';
if ($format == self::FMT_DATE && $jour == '00' && $mois == '00') {
$date = $annee;
} else if ($format == self::FMT_DATE && $jour == '00') {
$date = strftime('%b', mktime(0, 0, 0, $mois, 1)).' '.$annee;
} else {
$timestamp = strtotime($date);
if ($timestamp !== false) {
$date = strftime($format, $timestamp);
}
}
} else {
$e = "La chaine '$date' n'est pas reconnue.";
trigger_error($e, E_USER_WARNING);
}
}
return $date;
}
protected function formaterCourriels($courriels) {
$fmt_courriels = '';
if (!empty($courriels)) {
$courriels = (is_array($courriels)) ? $courriels : array($courriels);
foreach ($courriels as $cle => $courriel) {
$courriel = preg_replace('/@/', ' [arrobase] ', $courriel);
$courriel = preg_replace('/[.]([^.]+)$/', " [point] $1", $courriel);
$fmt_courriels[] = $this->getVue('courriel', array('courriel' => $courriel));
}
$fmt_courriels = implode(', ', $fmt_courriels);
}
return $fmt_courriels;
}
protected function nettoyerPointFinal($mot) {
$mot = preg_replace('/[.]$/', '', $mot);
return $mot;
}
protected function postraiterDonnees(&$tableau) {
if (count($tableau) > 0) {
foreach ($tableau as $cle => &$valeur) {
if ($valeur == '') {
$valeur = '&nbsp;';
} else if (is_string($valeur)) {
$valeur = $this->remplacerEsperluette($valeur);
} else if (is_array($valeur)) {
$this->postraiterDonnees($valeur);
}
}
}
}
private function remplacerEsperluette($txt) {
$txt = preg_replace('/&(?!([a-z]+|#[0-9]+|#x[0-9a-f]+);)/i', '&amp;', $txt, -1);
return $txt;
}
public static function formaterChaineVersClasseCss($chaine) {
return trim(str_replace(' ','_',$chaine));
}
protected function chargerPiedDePage() {
$donnees['appli'] = Application::getInfo();
$this->setSortie(self::RENDU_PIED, $this->getVue('pied', $donnees));
}
}
?>
/trunk/applications/rendu/.directory
New file
0,0 → 1,5
[Dolphin]
Timestamp=2011,2,17,11,45,18
 
[Settings]
ShowDotFiles=true
/trunk/applications/rendu/rendu.php
New file
0,0 → 1,53
<?php
// declare(encoding='UTF-8');
/**
* Application de rendu d'ODS.
* Fichier principal d'initialisation.
*
* @category PHP5
* @package Saisie
* @author Aurélien Peronnet <aurelien@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @license GPL-v3 et CECILL-v2
* @version $Id: collection.php 142 2010-08-30 12:41:00Z aurelien $
*/
// Autoload pour cette application
function __autoload($nom_classe) {
// Tableau des chemins à inclure pour trouver une classe relatif à ce fichier
$chemins = array(
'bibliotheque'.DS.'dao',
'bibliotheque'.DS.'pear',
'bibliotheque'.DS.'utilitaires',
'composants',
'composants'.DS.'cartographie');
foreach ($chemins as $chemin) {
$fichier_a_inclure = dirname(__FILE__).DS.$chemin.DS.$nom_classe.'.php';
if (file_exists($fichier_a_inclure)) {
include_once $fichier_a_inclure;
return null;
}
}
}
 
// Le fichier autoload.inc.php du Framework de Tela Botanica doit être appelée avant tout autre chose dans l'application.
// Sinon, rien ne sera chargé.
// Chemin du fichier chargeant le framework requis
$framework = dirname(__FILE__).'/framework.php';
if (!file_exists($framework)) {
$e = "Veuillez paramétrer l'emplacement et la version du Framework dans le fichier $framework";
trigger_error($e, E_USER_ERROR);
} else {
// Inclusion du Framework
require_once $framework;
// Ajout d'information concernant cette application
Application::setChemin(__FILE__);// Obligatoire
Application::setInfo(Config::get('info'));
// Lancement du débogage si nécessaire
if (Config::get('chronometrage')) {
Chronometre::chrono('Rendu.php - début');
}
// Lancement de l'application
AppControleur::initialiser();
}
?>
/trunk/applications/rendu/rendu_widget.php
New file
0,0 → 1,18
<?php
// declare(encoding='UTF-8');
/** Inclusion du fichier principal de l'application*/
require_once 'rendu.php';
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="Content-language" content="fr" />
<?= Liens::renvoyerStylesInclus() ?>
<?= Liens::renvoyerScriptsInclus() ?>
</head>
<body>
<?= AppControleur::getContenuCorps(); ?>
</body>
</html>
/trunk/applications/rendu
New file
Property changes:
Added: svn:ignore
+framework.php
/trunk/applications/saisie/controleurs/Individu.php
New file
0,0 → 1,290
<?php
// declare(encoding='UTF-8');
/**
* Classe de test des Controleurs.
*
* @package Collection
* @category Php 5.2
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
* @version SVN: $Id: Fiche.php 152 2010-09-06 16:19:12Z jpm $
*/
class Individu extends aControleur {
 
private $id_individu_en_cours = null;
 
public function __construct() {
 
parent::__construct();
$this->initialiser();
}
 
public function initialiser() {
 
if(isset($_GET['id_individu'])) {
$this->id_individu_en_cours = $_GET['id_individu'];
}
$this->setNavigation();
}
 
public function executerActionParDefaut() {
return $this->afficherFormulaireSaisieIndividu();
}
 
public function afficherFormulaireSaisieIndividu($donnees = array()) {
 
$formulaire = $this->getFormulaireSaisieIndividu($donnees);
$this->setSortie(self::RENDU_CORPS, $formulaire);
}
 
public function getFormulaireSaisieIndividu($donnees = array()) {
 
if($donnees == array()) {
$donnees['individu_nom'] = '';
}
 
$donnees['id_station'] = $_GET['id_station'];
 
if(!isset($donnees['id_espece'])) {
$donnees['id_espece'] = $_GET['id_espece'];
}
 
$espece_dao = new EspeceDao();
 
$donnees['informations_espece'] = $espece_dao->getInformationsEspece($donnees['id_espece']);
return $this->getVue('formulaires/individu_saisie',$donnees);
}
 
public function afficherFormulaireModificationIndividu($donnees = array()) {
 
$individu_dao = new IndividuDao();
 
$id_individu = $_GET['id_individu'];
$donnees['infos_individu'] = $individu_dao->getInformationsIndividu($id_individu);
$donnees['id_station'] = $_GET['id_station'];
$donnees['id_espece'] = $_GET['id_espece'];
 
$espece_dao = new EspeceDao();
$donnees['informations_espece'] = $espece_dao->getInformationsEspece($donnees['id_espece']);
 
$this->setSortie(self::RENDU_CORPS,$this->getVue('formulaires/individu_modification',$donnees));
}
 
public function afficherListeIndividu() {
 
$this->setSortie(self::RENDU_CORPS, $this->getListeIndividu());
}
 
public function getListeIndividu() {
 
$id_utilisateur = AppControleur::getUtilisateur()->getIdentifiantNumerique();
 
$id_station = $_GET['id_station'];
$id_espece = $_GET['id_espece'];
 
if(isset($_GET['annee'])) {
$donnees['annee'] = $_GET['annee'];
} else {
$donnees['annee'] = date('Y');
}
 
$espece = new Espece();
$evenements = $espece->getListeEvenementPourEspece($id_espece);
 
$individus = $this->getListeIndividus($id_station, $id_espece);
 
foreach($individus as &$individu) {
 
$observation = new Observation();
 
if(trim($individu['nom']) == '') {
$individu['nom'] = 'Individu sans nom';
}
 
$individu['observations'] = $observation->getListeObservationsPourIndividu($individu['id_individu']);
$individu['url'] = Liens::getUrlConsultationFicheIndividu($id_station, $id_espece, $individu['id_individu']);
}
 
$donnees['evenements'] = $evenements;
$donnees['individus'] = $individus;
$donnees['id_station'] = $_GET['id_station'];
$donnees['id_espece'] = $_GET['id_espece'];
 
return $this->getVue('listes/evenement_liste', $donnees);
}
 
public function afficherInformationsIndividu($donnees = array()) {
 
$id_individu = $_GET['id_individu'];
$id_espece = $_GET['id_espece'];
 
$donnees['infos_individu'] = $this->getInformationsIndividu($id_individu);
$donnees['annees_observations'] = $this->getObservationsPourIndividu($id_individu);
 
$espece_dao = new EspeceDao();
$donnees['infos_espece'] = $espece_dao->getInformationsEspece($id_espece);
 
$this->setSortie(self::RENDU_CORPS, $this->getVue('fiches/individu_fiche', $donnees));
 
}
 
// +---------------------------------------------------------------------------------------------------------------+
// METHODES DE VALIDATION DE FORMULAIRE
public function validerFormulaireSaisieIndividu() {
 
$valeurs_collectees = $this->collecterValeursFormulaireSaisieIndividu();
 
$verification_ou_erreurs = $this->verifierValeursIndividu($valeurs_collectees);
 
if($verification_ou_erreurs !== true) {
 
$donnees = $valeurs_collectees;
 
$donnees['erreurs'] = $verification_ou_erreurs;
$this->afficherFormulaireSaisieIndividu($donnees);
return;
}
 
$valeurs_verifiees = $valeurs_collectees;
 
$individu_dao = new IndividuDao();
$retour_ajout_individu = $individu_dao->ajouterIndividu($valeurs_verifiees);
 
if($id_nouvel_individu = $this->renvoyerIdSiAjoutIndividuEffectue($retour_ajout_individu)) {
$this->afficherListeIndividu();
$this->setNavigation();
} else {
$this->afficherFormulaireSaisieIndividu($donnees);
}
}
 
private function renvoyerIdSiAjoutIndividuEffectue($donnees_retour_dao) {
 
if(isset($donnees_retour_dao['id_nouvel_individu'])) {
return $donnees_retour_dao['id_nouvel_individu'];
}
 
return false;
}
 
private function collecterValeursFormulaireSaisieIndividu() {
 
$valeurs_verifiees['id_station'] = $_POST['station'];
$valeurs_verifiees['id_espece'] = $_POST['espece'];
$valeurs_verifiees['individu_nom'] = $_POST['individu_nom'];
$valeurs_verifiees['individu_commentaire'] = $_POST['individu_commentaire'];
 
return $valeurs_verifiees;
 
}
 
private function collecterValeursFormulaireModificationIndividu() {
 
$valeurs_verifiees['id_station'] = $_POST['id_station'];
$valeurs_verifiees['id_espece'] = $_POST['id_espece'];
$valeurs_verifiees['individu_nom'] = $_POST['individu_nom'];
$valeurs_verifiees['id_individu'] = $_POST['id_individu'];
$valeurs_verifiees['individu_commentaire'] = $_POST['individu_commentaire'];
 
return $valeurs_verifiees;
 
}
 
private function verifierValeursIndividu($valeurs_a_verifier) {
 
$erreurs = array();
 
foreach($valeurs_a_verifier as $champ => $valeur) {
if(trim($valeur) == '' && $champ != 'individu_commentaire') {
$erreurs[$champ] .= ' Ce champ ne peut pas être vide';
}
}
 
if(!empty($erreurs)) {
return $erreurs;
}
 
return true;
}
 
public function validerFormulaireModificationIndividu() {
 
$valeurs_collectees = $this->collecterValeursFormulaireModificationIndividu();
$verification_ou_erreurs = $this->verifierValeursIndividu($valeurs_collectees);
 
if($verification_ou_erreurs !== true) {
$donnees = $valeurs_collectees;
 
$donnees['erreurs'] = $verification_ou_erreurs;
$this->afficherFormulaireModificationIndividu($donnees);
return;
}
 
$valeurs_verifiees = $valeurs_collectees;
$id_individu = $valeurs_collectees['id_individu'];
 
$individu_dao = new IndividuDao();
$retour_modification_individu = $individu_dao->modifierIndividu($id_individu, $valeurs_verifiees);
 
$this->afficherInformationsIndividu();
}
 
public function supprimerIndividu() {
 
$id_individu_a_supprimer = $_POST['id_individu_a_supprimer'];
 
$observations_individu = $this->getObservationsPourIndividu($id_individu_a_supprimer);
 
if(count($observations_individu) > 0) {
$donnees = array();
$donnees['erreurs'] = 'Impossible de supprimer un individu pour lequel on a saisi des données';
 
$this->id_individu_en_cours = $id_individu_a_supprimer;
$this->afficherInformationsIndividu($donnees);
 
} else {
 
$individu_dao = new IndividuDao();
$individu_dao->supprimerIndividu($id_individu_a_supprimer);
 
$gestion_station = new Station();
$_GET['id_station'] = $_POST['id_station'];
 
$this->setSortie(self::RENDU_CORPS, $gestion_station->getFicheInformationsStation());
}
 
}
 
// +---------------------------------------------------------------------------------------------------------------+
// METHODES POUR FABRIQUER LE MENU
public function setNavigation() {
 
$station = new Station();
$this->setSortie(self::RENDU_NAVIGATION, $station->construireMenuNavigation());
}
 
protected function getListeIndividus($id_station, $id_espece) {
 
$individu_dao = new IndividuDao();
return $individu_dao->getListeIndividusPourStationPourEspece($id_station,$id_espece);
 
}
 
private function getInformationsIndividu($id_individu) {
 
$individu_dao = new IndividuDao();
$infos_individu = $individu_dao->getInformationsIndividu($id_individu);
 
return $infos_individu;
}
 
private function getObservationsPourIndividu($id_individu) {
$observation_dao = new ObservationDao();
$liste_observation_pour_individu = $observation_dao->getListeObservationsPourIndividu($id_individu);
 
return $liste_observation_pour_individu;
}
}
?>
/trunk/applications/saisie/controleurs/Observation.php
New file
0,0 → 1,192
<?php
// declare(encoding='UTF-8');
/**
* Classe de gestion des observations.
*
* @package ODS_saisie
* @category Php 5.2
* @author Aurélien Peronnet <aurelien@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
* @version SVN: $Id: Fiche.php 152 2010-09-06 16:19:12Z jpm $
*/
class Observation extends aControleur {
 
private $id_observation_en_cours = null;
 
public function __construct() {
 
parent::__construct();
$this->initialiser();
}
 
public function initialiser() {
 
if(isset($_GET['$id_observation'])) {
$this->id_observation_en_cours = $_GET['id_observation'];
}
$this->setNavigation();
}
 
public function executerActionParDefaut() {
return $this->afficherFormulaireAjoutIndividu();
}
 
 
public function afficherFormulaireAjoutObservation($id_individu) {
$donnees = array();
$formulaire = $this->getVue('formulaires/observation_saisie',$donnees);
$this->setSortie(self::RENDU_CORPS, $formulaire);
}
 
public function afficherFormulaireModificationObservation() {
 
$id_individu_a_modifier_observation = $_GET['id_individu'];
 
$id_espece = $_GET['id_espece'];
$id_station = $_GET['id_station'];
 
$id_utilisateur = AppControleur::getUtilisateur()->getIdentifiantNumerique();
 
$espece = new Espece();
$evenements = $espece->getListeEvenementPourEspece($id_espece);
 
$station = new Station();
 
$individus = $station->getIndividusStationPourEspece($id_station,$id_espece);
foreach($individus as &$individu) {
 
$observation = new Observation();
$individu['observations'] = $observation->getListeObservationsPourIndividu($individu['id_individu']);
$individu['url'] = Liens::getUrlConsultationFicheIndividu($id_station,$id_espece, $individu['id_individu']);
 
}
 
$donnees['evenements'] = $evenements;
$donnees['stades'] = $this->aplatirListeEvenementHierachiseeEnListeParStades($evenements);
$donnees['individus'] = $individus;
$donnees['id_station'] = $_GET['id_station'];
$donnees['id_espece'] = $_GET['id_espece'];
 
if(isset($_GET['annee'])) {
$donnees['annee'] = $_GET['annee'];
} else {
$donnees['annee'] = date('Y');
}
 
$donnees['id_individu_a_modifier_observation'] = $id_individu_a_modifier_observation;
 
$this->setSortie(self::RENDU_CORPS, $this->getVue('formulaires/evenement_modification', $donnees));
}
 
// +---------------------------------------------------------------------------------------------------------------+
// METHODES POUR FABRIQUER LE MENU
public function setNavigation() {
 
$station = new Station();
$this->setSortie(self::RENDU_NAVIGATION, $station->construireMenuNavigation());
}
 
// +---------------------------------------------------------------------------------------------------------------+
// METHODES APPELEES LORS DE LA VALIDATION D'UN FORMULAIRE
public function validerFormulaireAjoutObservation() {
 
$valeurs_formulaires = $_POST;
 
$valeurs_verifiees = array();
 
$observation_dao = new ObservationDao();
$observation_dao->ajouterObservation($valeurs_verifiees);
 
}
 
public function validerFormulaireModificationObservation() {
 
$valeurs_verifiees = $this->collecterValeursFormulaireModificationObservation();
 
$observation_dao = new ObservationDao();
$observation_dao->modifierObservation($valeurs_verifiees['id_individu'], $valeurs_verifiees);
 
$individu = new Individu();
 
$this->setSortie(self::RENDU_CORPS, $individu->getListeIndividu());
 
}
 
public function validerFormulaireModificationObservationAjax() {
 
$valeurs_verifiees = $this->collecterValeursFormulaireModificationObservation();
 
$observation_dao = new ObservationDao();
$data = $observation_dao->modifierObservation($valeurs_verifiees['id_individu'],$valeurs_verifiees);
 
$retour = array('reponse' => 'OK', 'data' => $data);
 
header('Content-type: text/json');
echo json_encode($retour);
exit;
}
 
private function collecterValeursFormulaireModificationObservation() {
 
$valeurs_verifiees = array();
 
$valeurs_verifiees['id_individu'] = $_POST['id_individu'];
$valeurs_verifiees['annee_en_cours'] = $_POST['annee_en_cours'];
 
$valeurs_verifiees['id_evenement'] = $_POST['id_evenement'];
$valeurs_verifiees['date_evenement'] = $_POST['date_evenement'];
 
if(!empty($_POST['id_observation'])) {
$valeurs_verifiees['id_observation'] = $_POST['id_observation'];
}
 
if(!empty($_POST['absence_observation'])) {
$valeurs_verifiees['absence_observation'] = $_POST['absence_observation'];
}
 
return $valeurs_verifiees;
}
 
// +---------------------------------------------------------------------------------------------------------------+
// METHODES DE RECHERCHE DE DONNEES
public function getListeObservationsPourIndividu($id_individu, $annee = null) {
 
$observation_dao = new ObservationDao();
$observations_pour_individu = $observation_dao->getListeObservationsPourIndividu($id_individu, $annee);
 
return $observations_pour_individu;
}
 
 
private function aplatirListeEvenementHierachiseeEnListeParStades($liste_evenements_hierarchisee) {
 
$liste_evenements_plate_par_stade = array();
 
foreach($liste_evenements_hierarchisee as $evenement_hierarchise) {
foreach($evenement_hierarchise['stades'] as $id_stade => $stade) {
$liste_evenements_plate_par_stade[$id_stade] = $stade;
}
}
 
return $liste_evenements_plate_par_stade;
}
 
// +---------------------------------------------------------------------------------------------------------------+
// METHODES UTILITAIRES STATIQUES (UTILES POUR LES FORMULAIRES)
public static function individuAObservationValidePourStade($individu, $annee, $evenement, $id_stade) {
 
return (isset($individu['observations'][$annee][$evenement][$id_stade]) && trim($individu['observations'][$annee][$evenement][$id_stade]) != '');
}
 
public static function renvoyerObservationStadePourIndividu($individu, $annee, $evenement, $id_stade) {
 
if(self::individuAObservationValidePourStade($individu, $annee, $evenement, $id_stade)) {
return $individu['observations'][$annee][$evenement][$id_stade];
}
 
return '';
}
}
?>
/trunk/applications/saisie/controleurs/AppControleur.php
New file
0,0 → 1,315
<?php
// declare(encoding='UTF-8');
/**
* Classe mère des controleurs de l'application.
* Elle repartie les demandes utilisateurs dans les différents modules, executent les actions et redistribue le code
* html dans les différentes fonctions d'affichage.
* C'est une Singleton.
*
* @category PHP 5.2
* @package saisie
* @author Aurélien Peronnet <aurelien@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @license GPL-v3 et CECILL-v2
* @version $Id: AppControleur.php 160 2010-09-13 13:10:41Z aurelien $
*/
 
class AppControleur extends Controleur {
/**
* Instance de la classe pointant sur elle même (pour le pattern singleton)
*/
private static $instance = null;
/**
* Instance de l'utilisateur en cours
*/
private static $utilisateur = null;
/**
* Paramètres
*/
private static $parametres = array();
/**
* Constructeur vide
*/
public function __construct() {
$sortie = array('titre' => '', 'description' => '', 'tags' => '',
'corps' => '', 'tete' => '', 'pied' => '', 'navigation' => '');
$url = new Url(Config::get('url_base_index'));
self::$parametres = array( 'module' => 'Station',
'action' => 'executerActionParDefaut',
'sortie' => $sortie,
'url' => $url);
parent::__construct();
}
/**
* Initialisation du controleur principal en fonction des paramètres de l'url.
*/
public static function initialiser() {
self::verifierCreationInstance();
self::gererSession();
self::gererUtilisateur();
if (isset($_GET['module'])) {
self::$parametres['module'] = $_GET['module'];
}
self::$parametres['url']->setVariableRequete('module', self::$parametres['module']);
if (isset($_GET['action'])) {
self::$parametres['action'] = $_GET['action'];
}
self::$parametres['url']->setVariableRequete('action', self::$parametres['action']);
$registre = Registre::getInstance();
$registre->set('parametres', self::$parametres);
$ClasseModule = self::$parametres['module'];
$action = self::$parametres['action'];
$module = new $ClasseModule();
$module->$action();
if(!self::utilisateurEstIdentifie()) {
self::afficherFormulaireIdentification();
return;
}
self::fusionnerSortie($module->getSortie());
}
private static function gererSession() {
if (Config::get('session_demarrage')) {
// Attribution d'un nom à la session
session_name(Config::get('session_nom'));
if(!isset($_SESSION)){
// Démarrage de la session si besoin
session_start();
}
}
}
private static function gererUtilisateur() {
if(Config::get('identification') == true) {
$classe_utilisateur = Config::get('objet_utilisateur');
if(!class_exists($classe_utilisateur)) {
trigger_error('Aucune classe n\'a été définie pour gérer les utilisateurs', E_USER_ERROR);
}
self::$utilisateur = new $classe_utilisateur();
if(self::$utilisateur->estAdmin()) {
if($nouvelle_identite = self::changementIdentiteDemande()) {
self::getUtilisateur()->setIdentite($nouvelle_identite);
}
self::afficherBarreAdmin();
}
}
}
public static function getUtilisateur() {
if(self::$utilisateur == null) {
self::gererUtilisateur();
}
return self::$utilisateur;
}
public static function utilisateurEstIdentifie() {
return self::getUtilisateur()->estIdentifie();
}
public static function changementIdentiteDemande() {
if(self::getUtilisateur()->estAdmin() && isset($_POST['identite_utilisateur'])) {
return $_POST['identite_utilisateur'];
}
return false;
}
private static function afficherFormulaireIdentification() {
$donnees['formulaire_identification'] = self::getUtilisateur()->getFormulaireidentification();
$donnees['formulaire_inscription'] = self::getUtilisateur()->getFormulaireInscription();
$formulaire = self::$instance->getVue('formulaires/identification', $donnees);
self::$parametres['sortie']['corps'] = $formulaire;
}
private static function afficherBarreAdmin() {
$barre_admin = self::$instance->getVue('navigation/barre_admin', $donnees);
self::$parametres['sortie']['tete'] = $barre_admin;
}
public static function getIdUtilisateur() {
return self::getUtilisateur()->getIdentite();
//return self::getUtilisateur()->getIdentifiantNumerique();
}
public static function getNomUtilisateur() {
return self::getUtilisateur()->getNom();
//return self::getUtilisateur()->getIdentifiantNumerique();
}
public static function changerUtilisateur() {
return self::getUtilisateur()->setIdentite();
}
/**
* Fusionne un tableau de sortie par défaut avec le tableau renvoyé par l'action du module.
* @param array le tableauàfusionner
*/
private static function fusionnerSortie($sortie) {
self::$parametres['sortie'] = array_merge(self::$parametres['sortie'], $sortie);
}
/**
* Vérifie si l'instance de classe été crée, si non la crée.
*/
private static function verifierCreationInstance() {
if (empty(self::$instance)) {
self::$instance = new AppControleur();
}
}
public static function getInstance() {
self::verifierCreationInstance();
return self::$instance;
}
/**
* Retourne le titre du contenu de l'application.
*/
public static function getMetaTitre() {
$sortie = self::$parametres['sortie']['titre'];
if (Config::get('sortie_encodage') != Config::get('appli_encodage')) {
$sortie = mb_convert_encoding($sortie, Config::get('sortie_encodage'), Config::get('appli_encodage'));
}
return $sortie;
}
/**
* Retourne la description du contenu de l'application.
*/
public static function getMetaDescription() {
$sortie = self::$parametres['sortie']['description'];
if (Config::get('sortie_encodage') != Config::get('appli_encodage')) {
$sortie = mb_convert_encoding($sortie, Config::get('sortie_encodage'), Config::get('appli_encodage'));
}
return $sortie;
}
/**
* Retourne les mots-clés (tags) du contenu de l'application.
*/
public static function getMetaTags() {
$sortie = self::$parametres['sortie']['tags'];
if (Config::get('sortie_encodage') != Config::get('appli_encodage')) {
$sortie = mb_convert_encoding($sortie, Config::get('sortie_encodage'), Config::get('appli_encodage'));
}
return $sortie;
}
/**
* Retourne le contenu du corps de l'application.
*/
public static function getContenuCorps() {
$sortie = self::$parametres['sortie']['corps'];
if (Config::get('sortie_encodage') != Config::get('appli_encodage')) {
$sortie = mb_convert_encoding($sortie, Config::get('sortie_encodage'), Config::get('appli_encodage'));
}
return $sortie;
}
/**
* Retourne le contenu de la tête de l'application.
*/
public static function getContenuTete() {
$sortie = self::$parametres['sortie']['tete'];
if (Config::get('sortie_encodage') != Config::get('appli_encodage')) {
$sortie = mb_convert_encoding($sortie, Config::get('sortie_encodage'), Config::get('appli_encodage'));
}
return $sortie;
}
/**
* Retourne le contenu des styles de l'application.
*/
public static function getContenuStyle() {
$sortie = self::$parametres['sortie']['tete'];
if (Config::get('sortie_encodage') != Config::get('appli_encodage')) {
$sortie = mb_convert_encoding($sortie, Config::get('sortie_encodage'), Config::get('appli_encodage'));
}
return $sortie;
}
/**
* Retourne le contenu des script de l'application.
*/
public static function getContenuScript() {
$sortie = self::$parametres['sortie']['script'];
if (Config::get('sortie_encodage') != Config::get('appli_encodage')) {
$sortie = mb_convert_encoding($sortie, Config::get('sortie_encodage'), Config::get('appli_encodage'));
}
return $sortie;
}
/**
* Retourne le contenu du pied de l'application.
*/
public static function getContenuPied() {
$sortie = self::$parametres['sortie']['pied'];
if (Config::get('sortie_encodage') != Config::get('appli_encodage')) {
$sortie = mb_convert_encoding($sortie, Config::get('sortie_encodage'), Config::get('appli_encodage'));
}
return $sortie;
}
/**
* Retourne les éléments de navigation de l'application.
*/
public static function getContenuNavigation() {
$sortie = self::$parametres['sortie']['navigation'];
if (Config::get('sortie_encodage') != Config::get('appli_encodage')) {
$sortie = mb_convert_encoding($sortie, Config::get('sortie_encodage'), Config::get('appli_encodage'));
}
return $sortie;
}
/**
* Retourne les chronos pris dans l'appli
*/
public static function getChrono() {
$sortie = '';
if (Config::get('chronometrage')) {
$chrono = Chronometre::afficherChrono();
$sortie = mb_convert_encoding($chrono, Config::get('sortie_encodage'), Config::get('appli_encodage'));
}
return $sortie;
}
/**
* Retourne les messages d'exceptions et d'erreurs.
*/
public static function getExceptions() {
$sortie = (Config::get('fw_debogage')) ? GestionnaireException::getExceptions() : '';
if (Config::get('sortie_encodage') != Config::get('appli_encodage')) {
$sortie = mb_convert_encoding($sortie, Config::get('sortie_encodage'), Config::get('appli_encodage'));
}
return $sortie;
}
}
 
?>
/trunk/applications/saisie/controleurs/aControleur.php
New file
0,0 → 1,244
<?php
// declare(encoding='UTF-8');
/**
* Classe Controleur générale de l'application saisie.
*
* @category php5.2
* @package saisie
* @author Aurélien Peronnet <aurelien@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
* @version SVN: $Id: aControleur.php 152 2010-09-06 16:19:12Z aurelien $
*/
abstract class aControleur extends Controleur {
const FMT_DATE = '%d/%m/%Y';// Supporte les formats de dates non valides (1989-00-00)
const FMT_DATE_TXT = '%A %d %B %Y';
const FMT_DATE_HEURE = '%d/%m/%Y %H:%i:%s';// Supporte les formats de dates non valides (1989-00-00 00:00:00)
const FMT_DATE_HEURE_TXT = '%A %d %B %Yà%H:%M';
const META_TITRE = 'titre';
const META_DESCRIPTION = 'description';
const META_TAGS = 'tags';
const RENDU_TETE = 'tete';
const RENDU_CORPS = 'corps';
const RENDU_PIED = 'pied';
const RENDU_NAVIGATION = 'navigation';
const TYPE_AUTRE = 'AUTRE';
const TYPE_TOTAL = 'TOTAL';
const SEPARATEUR_TYPE_VALEUR = '##';
const SEPARATEUR_VALEURS = ';;';
const SEPARATEUR_DONNEES = '||';
const VALEUR_NULL = 'NC';
private $sortie = array();
private $parametres = array();
protected static $hierarchie_appels = array();
// FIXME : voir s'il est plus intéressant d'utiliser une méthode dans les classes filles
protected $url = null;
public function __construct() {
$registre = Registre::getInstance();
$this->parametres = $registre->get('parametres');
$this->url = $this->parametres['url'];
parent::__construct();
}
/**
* Attribue une position de sortie à un contenu.
*/
protected function setSortie($position, $contenu, $fusionner = false) {
if ($this->verifierExistenceTypeSortie($position)) {
if ($fusionner) {
$this->sortie[$position] .= $contenu;
} else {
$this->sortie[$position] = $contenu;
}
}
}
/**
* Vérifie l'existence du type de sortie indiqué pour son utilisation dans le tableau de sortie.
* @param string le type de sortie à tester.
* @return bool true si le type de sortie est valide, sinon false.
*/
private function verifierExistenceTypeSortie($type) {
$existe = true;
if ($type != self::RENDU_TETE &&
$type != self::RENDU_NAVIGATION &&
$type != self::RENDU_CORPS &&
$type != self::RENDU_PIED &&
$type != self::META_TITRE &&
$type != self::META_DESCRIPTION &&
$type != self::META_TAGS &&
$type != self::STYLES &&
$type != self::SCRIPTS
) {
trigger_error("Le type de sortie '$type' n'est pas une valeur prédéfinie.", E_USER_WARNING);
$existe = false;
}
return $existe;
}
/**
* Retourne le tableau de sortie à utiliser dans le controleur principal de l'application.
*/
public function getSortie() {
return $this->sortie;
}
 
/**
* Execute l'action d'un module donnée et fusionne le résultat avec le tableau de sortie.
*/
protected function executerAction($ClasseModule, $action) {
$module = new $ClasseModule();
$module->$action();
$this->fusionnerSortie($module->getSortie());
}
/**
* Fusionne un tableau de sortie par défaut avec le tableau passé en paramètre.
* @param array le tableau à fusionner
*/
private function fusionnerSortie($sortie) {
$this->sortie = array_merge($this->sortie, $sortie);
}
protected function formaterParenthese($chaine_a_afficher) {
if ($chaine_a_afficher != '') {
$chaine_a_afficher = '('.$chaine_a_afficher.')';
}
return $chaine_a_afficher;
}
protected function formaterSautDeLigne($chaine_a_formater) {
$txt_a_retourner = preg_replace('/\n/', '<br />', $chaine_a_formater);
return $txt_a_retourner;
}
protected function formaterTableauDeTxt($tableau_de_txt, $majuscule = true, $point_final = true) {
$chaine_a_afficher = '';
$taille_du_tableau = count($tableau_de_txt);
if ($taille_du_tableau > 0) {
$index_avt_dernier = $taille_du_tableau - 1;
for ($i = 0; $i < $taille_du_tableau; $i++) {
$mot = $tableau_de_txt[$i];
if ($i != $index_avt_dernier) {
$chaine_a_afficher .= $mot.', ';
} else {
$chaine_a_afficher .= $this->nettoyerPointFinal($mot);
if ($point_final) {
$chaine_a_afficher .= '.';
}
}
}
}
if ($majuscule) {
$chaine_a_afficher = ucfirst($chaine_a_afficher);
}
return $chaine_a_afficher;
}
protected function formaterOuiNon($chaine_a_formater) {
$txt_a_retourner = '';
if ($chaine_a_formater == '0') {
$txt_a_retourner = 'non';
} else if ($chaine_a_formater == '1') {
$txt_a_retourner = 'oui';
}
return $txt_a_retourner;
}
protected function formaterDate($date, $format = self::FMT_DATE_HEURE) {
if ($date == '' || $date == '0000-00-00' || $date == '0000-00-00 00:00:00') {
$date = 'Inconnue';
} else {
if (preg_match('/^([0-9]{4})-([0-9]{2})-([0-9]{2})(?: ([0-9]{2}):([0-9]{2}):([0-9]{2})|)$/', $date, $match)) {// Date Heure
$annee = $match[1];
$mois = $match[2];
$jour = $match[3];
$heure = (isset($match[4])) ? $match[4] : '00';
$minute = (isset($match[5])) ? $match[5] : '00';
$seconde = (isset($match[6])) ? $match[6] : '00';
if ($format == self::FMT_DATE && $jour == '00' && $mois == '00') {
$date = $annee;
} else if ($format == self::FMT_DATE && $jour == '00') {
$date = strftime('%b', mktime(0, 0, 0, $mois, 1)).' '.$annee;
} else {
$timestamp = strtotime($date);
if ($timestamp !== false) {
$date = strftime($format, $timestamp);
}
}
} else {
$e = "La chaine '$date' n'est pas reconnue.";
trigger_error($e, E_USER_WARNING);
}
}
return $date;
}
protected function formaterCourriels($courriels) {
$fmt_courriels = '';
if (!empty($courriels)) {
$courriels = (is_array($courriels)) ? $courriels : array($courriels);
foreach ($courriels as $cle => $courriel) {
$courriel = preg_replace('/@/', ' [arrobase] ', $courriel);
$courriel = preg_replace('/[.]([^.]+)$/', " [point] $1", $courriel);
$fmt_courriels[] = $this->getVue('courriel', array('courriel' => $courriel));
}
$fmt_courriels = implode(', ', $fmt_courriels);
}
return $fmt_courriels;
}
protected function nettoyerPointFinal($mot) {
$mot = preg_replace('/[.]$/', '', $mot);
return $mot;
}
protected function postraiterDonnees(&$tableau) {
if (count($tableau) > 0) {
foreach ($tableau as $cle => &$valeur) {
if ($valeur == '') {
$valeur = '&nbsp;';
} else if (is_string($valeur)) {
$valeur = $this->remplacerEsperluette($valeur);
} else if (is_array($valeur)) {
$this->postraiterDonnees($valeur);
}
}
}
}
private function remplacerEsperluette($txt) {
$txt = preg_replace('/&(?!([a-z]+|#[0-9]+|#x[0-9a-f]+);)/i', '&amp;', $txt, -1);
return $txt;
}
public static function formaterChaineVersClasseCss($chaine) {
return trim(str_replace(' ','_',$chaine));
}
public static function tronquerChaineSansCouperMot($chaine, $longueur = 120) {
$retour = "";
if (strlen ($chaine) < $longueur) {
$retour = $chaine;
} elseif (preg_match ("/(.{1,$longueur})\s./ms", $chaine, $match)) {
$retour = $match [1] . "...";
} else {
$retour = substr ($chaine, 0, $longueur) . "...";
}
return $retour;
}
protected function chargerPiedDePage() {
$donnees['appli'] = Application::getInfo();
$this->setSortie(self::RENDU_PIED, $this->getVue('pied', $donnees));
}
}
?>
/trunk/applications/saisie/controleurs/Export.php
New file
0,0 → 1,101
<?php
// declare(encoding='UTF-8');
/**
* Classe de gestion des epeces.
*
* @package Collection
* @category Php 5.2
* @author Aurélien PERONNET <aurelien@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
* @version SVN: $Id: Espece.php 152 2010-09-06 16:19:12Z jpm $
*/
class Export extends aControleur {
public function __construct() {
parent::__construct();
$this->initialiser();
}
public function executerActionParDefaut() {
return $this->envoyerFichierCSVExportObservation();
}
public function initialiser() {
}
// +---------------------------------------------------------------------------------------------------------------+
// METHODES D'AFFICHAGE DE FORMULAIRE
public function envoyerFichierCSVExportObservation() {
$donnees = array();
$export_dao = new ExportDao();
$export = $export_dao->getExportObservations();
$csv = $this->convertirTableauAssocVersCSV($export);
$this->envoyerFichier($csv);
}
public function convertirTableauAssocVersCSV($tableau) {
$csv = '';
if(count($tableau > 0)) {
unset($tableau[0]['pseudo_participant']);
unset($tableau[0]['mail_participant']);
$colonnes = array_keys($tableau[0]);
$csv .= implode(';',$colonnes).";\n";
foreach($tableau as $elements) {
unset($elements['pseudo_participant']);
unset($elements['mail_participant']);
$ligne = "";
// parcours des cases de chaque ligne nécessaire car si on utilise implode
// les valeurs vides ne sont pas prises et ça décale les colonnes
foreach ($elements as $element) {
$ligne .= '"'.$element.'";';
}
$csv .= $ligne."\n";
}
}
return $csv;
}
public function envoyerFichier($contenu) {
$nom_fichier = "observations_export.csv";
$chemin_fichier = Config::get('chemin_fichiers_temp').'/'.$nom_fichier;
file_put_contents($chemin_fichier, $contenu);
$contenu = file_get_contents($chemin_fichier);
$taille_fichier = filesize($chemin_fichier);
unlink($chemin_fichier);
ini_set('zlib.output_compression','Off');
header('Pragma: public');
header('Last-Modified: '.gmdate('D, d M Y H:i:s').' GMT');
header('Cache-Control: must-revalidate, pre-check=0, post-check=0, max-age=0');
header('Content-Tranfer-Encoding: none');
header('Content-Type: application/octetstream; name="'.$nom_fichier.'"');
header('Content-Disposition: attachement; filename="'.$nom_fichier.'"');
header('Content-Length: '.$taille_fichier);
echo $contenu;
exit();
}
}
 
?>
/trunk/applications/saisie/controleurs/Station.php
New file
0,0 → 1,333
<?php
// declare(encoding='UTF-8');
/**
* Classe de test des Controleurs.
*
* @package Collection
* @category Php 5.2
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
* @version SVN: $Id: Fiche.php 152 2010-09-06 16:19:12Z jpm $
*/
class Station extends aControleur {
 
private $id_station_en_cours = null;
public function __construct() {
parent::__construct();
$this->initialiser();
}
public function initialiser() {
if(isset($_GET['id_station'])) {
$this->id_station_en_cours = $_GET['id_station'];
}
$this->setNavigation();
}
public function executerActionParDefaut() {
return $this->afficherFormulaireSaisieStation();
}
// +---------------------------------------------------------------------------------------------------------------+
// METHODES D'AFFICHAGE DE FORMULAIRE
public function afficherFormulaireSaisieStation($donnees = array()) {
if($donnees == array()) {
$donnees['station_commune'] = '';
$donnees['station_milieu'] = '';
$donnees['station_nom'] = '';
$donnees['station_lat'] = '';
$donnees['station_lon'] = '';
$donnees['station_alt'] = '';
$donnees['station_code_insee'] = '';
}
$donnees['milieux'] = $this->getListeMilieux();
$donnees['corps_formulaire_saisie_modif'] = $this->getVue('formulaires/station_saisie_modification',$donnees);
$formulaire = $this->getVue('formulaires/station_saisie',$donnees);
$this->setSortie(self::RENDU_CORPS, $formulaire);
}
public function afficherFormulaireModificationStation($donnees = array()) {
$id_station = $this->id_station_en_cours;
if(empty($donnees)) {
$infos_station = $this->getInformationsStation($id_station);
$donnees['station_commune'] = $infos_station['commune'];
$donnees['station_milieu'] = $infos_station['milieu'];
$donnees['station_nom'] = $infos_station['nom'];
$donnees['station_lat'] = $infos_station['latitude'];
$donnees['station_lon'] = $infos_station['longitude'];
$donnees['station_alt'] = $infos_station['altitude'];
$donnees['station_code_insee'] = $infos_station['code_insee'];
}
$donnees['id_station'] = $id_station;
$donnees['milieux'] = $this->getListeMilieux();
$donnees['corps_formulaire_saisie_modif'] = $this->getVue('formulaires/station_saisie_modification',$donnees);
$formulaire = $this->getVue('formulaires/station_modification',$donnees);
$this->setSortie(self::RENDU_CORPS, $formulaire);
}
// +---------------------------------------------------------------------------------------------------------------+
// METHODES APPELEES LORS DE LA VALIDATION D'UN FORMULAIRE
public function validerFormulaireSaisieStation() {
$valeurs_collectees = $this->collecterValeursFormulaireSaisieStation();
$verification_ou_erreurs = $this->verifierValeursStation($valeurs_collectees);
if($verification_ou_erreurs !== true) {
$donnees = $valeurs_collectees;
$donnees['erreurs'] = $verification_ou_erreurs;
$this->afficherFormulaireSaisieStation($donnees);
return;
}
$valeurs_verifiees = $valeurs_collectees;
$station_dao = new StationDao();
$retour_ajout_station = $station_dao->ajouterStation($valeurs_verifiees);
if($id_nouvelle_station = $this->renvoyerIdSiAjoutStationEffectue($retour_ajout_station)) {
$this->id_station_en_cours = $id_nouvelle_station;
$this->afficherInformationsStation();
$this->setNavigation();
}
}
private function renvoyerIdSiAjoutStationEffectue($donnees_retour_dao) {
if(isset($donnees_retour_dao['id_nouvelle_station'])) {
return $donnees_retour_dao['id_nouvelle_station'];
}
return false;
}
private function collecterValeursFormulaireSaisieStation() {
$valeurs_collectees['station_commune'] = $_POST['station_commune'];
$valeurs_collectees['station_milieu'] = $_POST['station_milieu'];
$valeurs_collectees['station_nom'] = $_POST['station_nom'];
$valeurs_collectees['station_lat'] = $_POST['station_lat'];
$valeurs_collectees['station_lon'] = $_POST['station_lon'];
$valeurs_collectees['station_alt'] = $_POST['station_alt'];
// à voir de ce que l'on fait de ce champs qui avait été prévu mais jamais utilisé
//$valeurs_collectees['station_description'] = $_POST['station_description'];
$valeurs_collectees['station_code_insee'] = $_POST['station_code_insee'];
return $valeurs_collectees;
}
private function collecterValeursFormulaireModificationStation() {
$valeurs_collectees = $this->collecterValeursFormulaireSaisieStation();
$valeurs_collectees['id_station'] = $_POST['id_station'];
return $valeurs_collectees;
}
private function verifierValeursStation($valeurs_a_verifier) {
$erreurs = array();
foreach($valeurs_a_verifier as $champ => $valeur) {
if(trim($valeur) == '') {
$erreurs[$champ] .= ' Ce champ ne peut pas être vide.';
}
if($champ == 'station_code_insee' && !$this->estUnCodeInseeOuUnNumDpt($valeur)) {
$erreurs[$champ] .= ' La valeur de ce champ doit être un numéro de département sur 2 chiffres '.
'ou un code INSEE sur 5 chiffres';
}
}
if(!empty($erreurs)) {
return $erreurs;
}
return true;
}
private function estUnCodeInseeOuUnNumDpt($code) {
$lg = strlen($code);
return trim($code) != '' && is_numeric($code) && ($lg == 2 || $lg == 5);
}
public function validerFormulaireModificationStation() {
$valeurs_collectees = $this->collecterValeursFormulaireModificationStation();
$verification_ou_erreurs = $this->verifierValeursStation($valeurs_collectees);
if($verification_ou_erreurs !== true) {
$donnees = $valeurs_collectees;
$donnees['erreurs'] = $verification_ou_erreurs;
$this->afficherFormulaireModificationStation($donnees);
return;
}
$station_dao = new StationDao();
$retour_modification = $station_dao->modifierStation($valeurs_collectees['id_station'], $valeurs_collectees);
if($retour_modification) {
$this->afficherInformationsStation();
$this->setNavigation();
}
}
public function supprimerStation() {
$id_station_a_supprimer = $_POST['id_station_a_supprimer'];
$individus_station = $this->getIndividusStation($id_station_a_supprimer);
if(count($individus_station) > 0) {
$donnees = array();
$donnees['erreurs'] = 'Impossible de supprimer une station qui contient des données';
$this->id_station_en_cours = $id_station_a_supprimer;
$this->afficherInformationsStation($donnees);
} else {
$station_dao = new StationDao();
$retour_suppression = $station_dao->supprimerStation($id_station_a_supprimer);
$this->setNavigation();
$this->executerActionParDefaut();
}
}
// +---------------------------------------------------------------------------------------------------------------+
// METHODES D'AFFICHAGES D'INFORMATION
public function afficherlisteStation($param = null) {
$id_utilisateur = AppControleur::getIdUtilisateur();
$donnees['stations'] = $this->getListeStations($id_utilisateur);
$this->setSortie(self::RENDU_CORPS, $this->getVue('listes/station_liste', $donnees));
}
public function getFicheInformationsStation($donnees = array()) {
$id_station = $this->id_station_en_cours;
$donnees['id_station'] = $id_station;
$donnees['infos_station'] = $this->getInformationsStation($id_station);
$donnees['milieux'] = $this->getListeMilieux();
return $this->getVue('fiches/station_fiche', $donnees);
}
public function afficherInformationsStation($donnees = array()) {
$infos_station = $this->getFicheInformationsStation($donnees);
$this->setSortie(self::RENDU_CORPS, $infos_station);
}
// +---------------------------------------------------------------------------------------------------------------+
// METHODES POUR FABRIQUER LE MENU
public function construireMenuNavigation($id_espece_en_cours = null) {
$id_station_en_cours = $this->id_station_en_cours;
if(isset($_GET['id_espece'])) {
$id_espece_en_cours = $_GET['id_espece'];
}
 
$stations = $this->getListeStations();
foreach($stations as &$station) {
$station['url'] = Liens::getUrlConsultationFicheStation($station['id']);
}
if($id_station_en_cours != null && $id_station_en_cours != 'saisie') {
$especes_station_en_cours = $this->getEspecesStation($id_station_en_cours);
foreach($especes_station_en_cours as &$espece) {
$espece['url'] = Liens::getUrlConsultationEspeceStation($id_station_en_cours, $espece['id_espece']);
}
$stations[$id_station_en_cours]['especes'] = $especes_station_en_cours;
}
$donnees['stations'] = $stations;
$donnees['id_station_en_cours'] = $id_station_en_cours;
 
$donnees['id_espece_en_cours'] = $id_espece_en_cours;
$menu_navigation = $this->getVue('navigation/menu', $donnees);
return $menu_navigation;
}
public function setNavigation() {
$this->setSortie(self::RENDU_NAVIGATION, $this->construireMenuNavigation());
}
// +---------------------------------------------------------------------------------------------------------------+
// METHODE D'APPELS AUX DAOS
protected function getListeStations() {
$station_dao = new StationDao();
return $station_dao->getListeStations();
}
private function getInformationsStation($id_station) {
$station_dao = new StationDao();
$infos_station = $station_dao->getInformationsStation($id_station);
$infos_station['individus'] = $this->getIndividusStation($id_station);
return $infos_station;
}
private function getEspecesStation($id_station) {
$espece_dao = new EspeceDao();
$liste_especes = $espece_dao->getListeEspecesPourStation($id_station);
return $liste_especes;
}
public function getIndividusStation($id_station) {
$individu_dao = new IndividuDao();
$liste_individus = $individu_dao->getListeIndividusPourStation($id_station);
return $liste_individus;
}
public function getIndividusStationPourEspece($id_station,$id_espece) {
$individu_dao = new IndividuDao();
$liste_individus = $individu_dao->getListeIndividusPourStationPourEspece($id_station, $id_espece);
return $liste_individus;
}
public function getListeMilieux() {
$triple_dao = new TripleDao();
$liste_milieux = $triple_dao->getListeMilieux();
return $liste_milieux;
}
}
?>
/trunk/applications/saisie/controleurs/DrupalUtilisateur.php
New file
0,0 → 1,46
<?php
class DrupalUtilisateur extends Utilisateur {
public function getNomUtilisateurPourId($id) {
return db_result(db_query("SELECT name FROM {users} WHERE uid = %d", $id));
}
public function getIdUtilisateurPourNom($nom) {
return db_result(db_query("SELECT uid FROM {users} WHERE name = '%s'", $nom));
}
public function getIdentifiantNumerique() {
return $GLOBALS['user']->uid;
}
public function getEmail() {
return $GLOBALS['user']->mail;
}
public function getNom() {
return $GLOBALS['user']->name;
}
public function getPrenom() {
return '';
}
public function estAdmin() {
return in_array('3',array_keys($GLOBALS['user']->roles)) || in_array('3',array_keys($GLOBALS['user']->roles)) ;
}
public function estIdentifie() {
return user_is_logged_in();
}
public function getFormulaireIdentification() {
return drupal_get_form('user_login_block');
}
public function getFormulaireInscription() {
return drupal_get_form('user_register');
}
}
?>
/trunk/applications/saisie/controleurs/Espece.php
New file
0,0 → 1,128
<?php
// declare(encoding='UTF-8');
/**
* Classe de gestion des epeces.
*
* @package Collection
* @category Php 5.2
* @author Aurélien PERONNET <aurelien@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
* @version SVN: $Id: Espece.php 152 2010-09-06 16:19:12Z jpm $
*/
class Espece extends aControleur {
private $id_espece_en_cours = null;
public function __construct() {
parent::__construct();
$this->initialiser();
}
public function initialiser() {
if(isset($_GET['$id_espece'])) {
$this->id_espece_en_cours = $_GET['$id_espece'];
}
$this->setNavigation();
}
private function setNavigation() {
$station = new Station();
$this->setSortie(self::RENDU_NAVIGATION, $station->construireMenuNavigation());
}
public function executerActionParDefaut() {
return $this->afficherFormulaireSaisieIndividu();
}
// +---------------------------------------------------------------------------------------------------------------+
// METHODES D'AFFICHAGE DE FORMULAIRE
public function afficherFormulaireSaisieEspece() {
$donnees = array();
if(!isset($_GET['id_station'])) {
return;
}
$donnees['id_station'] = $_GET['id_station'];
$donnees['types'] = $this->renvoyerListeEspeceParTypeMoinsEspecePresentesDansStation($donnees['id_station']);
$formulaire = $this->getVue('formulaires/espece_saisie',$donnees);
$this->setSortie(self::RENDU_CORPS, $formulaire);
}
public function validerFormulaireSaisieEspece() {
$valeurs_verifiees = $this->collecterValeursFormulaireSaisieEspece();
 
$individu = new Individu();
$this->setNavigation();
$this->setSortie(self::RENDU_CORPS,$individu->getFormulaireSaisieIndividu($valeurs_verifiees));
}
private function renvoyerListeEspeceParTypeMoinsEspecePresentesDansStation($id_station) {
$espece_dao = new EspeceDao();
return $liste_espece_par_type_complete = $espece_dao->getListeEspecesParType();
$liste_plate_especes_dans_station = $espece_dao->getListeEspecesPourStation($id_station);
$liste_especes_pouvant_etre_ajoutees = array();
foreach($liste_espece_par_type_complete as $type => $especes_pour_type) {
foreach($liste_plate_especes_dans_station as $indice => $espece_dans_station) {
$id_espece = $espece_dans_station['id_espece'];
if($this->especeEstPresenteDansTableauIndexeParId($id_espece, $especes_pour_type)) {
unset($liste_plate_especes_dans_station[$indice]);
unset($especes_pour_type['especes'][$id_espece]);
}
}
$liste_especes_pouvant_etre_ajoutees[$type] = $especes_pour_type;
}
return $liste_especes_pouvant_etre_ajoutee;
}
private function especeEstPresenteDansTableauIndexeParId($id_espece, $tableau_espece) {
return isset($tableau_espece['especes'][$id_espece]);
}
// +---------------------------------------------------------------------------------------------------------------+
// METHODES DE VALIDATION DE FORMULAIRE
private function collecterValeursFormulaireSaisieEspece() {
$valeurs_verifiees['id_espece'] = $_POST['id_espece'];
if(!isset($_POST['id_station'])) {
$valeurs_verifiees['id_station'] = $_GET['id_station'];
} else {
$valeurs_verifiees['id_station'] = $_POST['id_station'];
}
//TODO: verifier valeurs plus complètement
return $valeurs_verifiees;
}
public function getListeEvenementPourEspece($id_espece) {
$evenementDao = new EvenementDao();
$liste_evenements = $evenementDao->getListeEvenementPourEspece($id_espece);
return $liste_evenements;
}
}
?>
/trunk/applications/saisie/controleurs/Administration.php
New file
0,0 → 1,238
<?php
// declare(encoding='UTF-8');
/**
* Classe d'administration de l'application
*
* @package Collection
* @category Php 5.2
* @author Aurélien PERONNET <aurelien@tela-botanica.org>
* @copyright 2013 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
* @version SVN: $Id: Espece.php 152 2010-09-06 16:19:12Z jpm $
*/
class Administration extends aControleur {
public function __construct() {
parent::__construct();
$this->initialiser();
}
public function initialiser() {
 
}
public function executerActionParDefaut() {
$this->afficherListeEspecesAdministrables();
}
public function afficherListeEspecesAdministrables() {
$espece_dao = new EspeceDao();
$donnees['especes'] = $espece_dao->getListeEspecesAdminParType();
$liste = $this->getVue('listes/espece_liste_administration',$donnees);
$this->setSortie(self::RENDU_CORPS, $liste);
}
public function afficherFormulaireAjoutEspeceAdmin($valeurs_precedentes = array()) {
$triple_dao = new TripleDao();
$erreurs = isset($valeurs_precedentes['erreurs']) ? $valeurs_precedentes['erreurs'] : array();
$donnees['types_especes'] = $triple_dao->getListeTypesEspeces();
$donnees['evenements'] = $triple_dao->getListeEvenements();
$donnees['erreurs'] = $erreurs;
$formulaire = $this->getVue('formulaires/espece_ajout_administration',$donnees);
$this->setSortie(self::RENDU_CORPS, $formulaire);
}
public function afficherFormulaireModificationEspeceAdmin($valeurs_precedentes = array()) {
$id_espece = $_GET['id_espece'];
$espece_dao = new EspeceDao();
$erreurs = isset($valeurs_precedentes['erreurs']) ? $valeurs_precedentes['erreurs'] : array();
$donnees['espece'] = $espece_dao->getInformationsEspece($id_espece);
$donnees['espece'] = array_merge($donnees['espece'], $valeurs_precedentes);
$donnees['erreurs'] = $erreurs;
$formulaire = $this->getVue('formulaires/espece_modification_administration',$donnees);
$this->setSortie(self::RENDU_CORPS, $formulaire);
}
public function afficherFormulaireAjoutImageEspeceAdmin($valeurs_precedentes = array()) {
$id_espece = $_GET['id_espece'];
$espece_dao = new EspeceDao();
$erreurs = isset($valeurs_precedentes['erreurs']) ? $valeurs_precedentes['erreurs'] : array();
$donnees['espece'] = $espece_dao->getInformationsEspece($id_espece);
$donnees['espece']['nom_sci_normalise'] = str_replace(' ','_',strtolower($donnees['espece']['nom_scientifique']));
$donnees['espece'] = array_merge($donnees['espece'], $valeurs_precedentes);
$donnees['erreurs'] = $erreurs;
$formulaire = $this->getVue('formulaires/espece_ajout_image_administration',$donnees);
$this->setSortie(self::RENDU_CORPS, $formulaire);
}
// +---------------------------------------------------------------------------------------------------------------+
// METHODES DE VALIDATION DE FORMULAIRE
public function validerFormulaireAjoutImageEspeceAdmin() {
$donnees = $_POST;
unset($donnees['MAX_FILE_SIZE']);
$verification_ou_erreurs = $this->verifierValeursFormulaireImage($donnees);
if($verification_ou_erreurs !== true) {
$donnees['erreurs'] = $verification_ou_erreurs;
$_GET['id_espece'] = $_POST['id_espece'];
$this->afficherFormulaireAjoutImageEspeceAdmin($donnees);
} else {
$chemin_temp = $this->stockerFichierDansDossierEnAttente($_FILES['image_espece']['tmp_name'], $donnees['nom_fichier']);
if(!$chemin_temp) {
$donnees['erreurs']['image_espece'] = 'Impossible de stocker le fichier';
$this->afficherFormulaireModificationEspeceAdmin($donnees);
}
$donnees['chemin'] = $chemin_temp;
$image_dao = new ImageDao();
$retour_ajout = $image_dao->ajoutImageEspece($donnees);
$_GET['id_espece'] = $_POST['id_espece'];
if($retour_ajout) {
$this->afficherFormulaireModificationEspeceAdmin($donnees);
} else {
$this->afficherFormulaireAjoutImageEspeceAdmin($donnees);
}
}
}
private function verifierValeursFormulaireImage($donnees) {
$erreurs = array();
 
if(empty($_FILES['image_espece']) || $_FILES['image_espece']['size'] == 0) {
$erreurs['image_espece'] = 'Ce champ est obligatoire';
}
$type = getimagesize($_FILES['image_espece']['tmp_name']);
if(empty($_FILES['image_espece']) || $type['mime'] != 'image/jpeg') {
$erreurs['image_espece'] = 'Le format de l\'image n\'est pas supporté';
}
if($_FILES['image_espece']['size'] > Config::get('max_taille_fichiers')) {
$erreurs['image_espece'] = 'La taille de l\'image dépasse la taille maximale autorisée';
}
if(trim($donnees['credits']) == '') {
$erreurs['credits'] = 'Ce champ est obligatoire';
}
if(!empty($erreurs)) {
return $erreurs;
}
return true;
}
private function stockerFichierDansDossierEnAttente($chemin, $nom) {
$retour = false;
if(is_uploaded_file($chemin)) {
$destination = Config::get('chemin_fichiers_temp').'/'.$nom.'.jpg';
$stockage = move_uploaded_file($chemin, $destination);
chmod($destination, 0777);
if($stockage) {
$retour = $destination;
}
}
return $retour;
}
public function validerFormulaireModificationEspeceAdmin() {
$donnees = $_POST;
$verification_ou_erreurs = $this->verifierValeursEspece($donnees);
if($verification_ou_erreurs !== true) {
$donnees['erreurs'] = $verification_ou_erreurs;
$this->afficherFormulaireModificationEspeceAdmin($donnees);
return;
}
if(isset($donnees['espece_active'])) {
$donnees['espece_active'] = 1;
} else {
$donnees['espece_active'] = 0;
}
$espece_dao = new EspeceDao();
$id_espece = $donnees['id_espece'];
unset($donnees['id_espece']);
$retour_modif_espece = $espece_dao->modifierEspece($id_espece, $donnees);
if($retour_modif_espece) {
$this->afficherListeEspecesAdministrables();
} else {
$this->afficherFormulaireModificationEspeceAdmin($donnees);
}
}
// METHODES DE VALIDATION DE FORMULAIRE
public function validerFormulaireAjoutEspeceAdmin() {
$donnees = $_POST;
$verification_ou_erreurs = $this->verifierValeursEspece($donnees);
$verifications_supplementaires = $this->verifierPresenceValeurEvenement($donnees);
 
$verification_ou_erreurs = $this->mergerErreurs($verification_ou_erreurs, $verifications_supplementaires);
if($verification_ou_erreurs !== true) {
$donnees['erreurs'] = $verification_ou_erreurs;
$this->afficherFormulaireAjoutEspeceAdmin($donnees);
return;
}
$donnees['espece_ecole'] = (isset($donnees['espece_ecole'])) ? $donnees['espece_ecole'] = 1 : $donnees['espece_ecole'] = 0;
$donnees['espece_active'] = (isset($donnees['espece_active'])) ? $donnees['espece_active'] = 1 : $donnees['espece_active'] = 0;
$donnees['ce_evenements'] = implode(',', $donnees['ce_evenements']);
$espece_dao = new EspeceDao();
$retour_ajout_espece = $espece_dao->ajoutEspece($donnees);
if($retour_ajout_espece) {
$this->afficherListeEspecesAdministrables();
} else {
$this->afficherFormulaireAjoutEspeceAdmin($donnees);
}
}
private function mergerErreurs($verifications_commune, $verifications_specifiques) {
$retour = true;
if(is_array($verifications_commune) && is_array($verifications_specifiques)) {
$retour = array_merge($verifications_commune, $verifications_specifiques);
}
if(is_array($verifications_commune) && !is_array($verifications_specifiques)) {
$retour = $verifications_commune;
}
if(!is_array($verifications_commune) && is_array($verifications_specifiques)) {
$retour = $verifications_specifiques;
}
return $retour;
}
private function verifierPresenceValeurEvenement($donnees) {
$erreurs = array();
if(!(isset($donnees['ce_evenements']) && is_array($donnees['ce_evenements']) && !empty($donnees['ce_evenements']))) {
$erreurs['ce_evenements'] = 'Au moins un évènement doit être sélectionné';
}
if(!empty($erreurs)) {
return $erreurs;
}
return true;
}
private function verifierValeursEspece($donnees) {
$erreurs = array();
foreach($donnees as $champ => $valeur) {
if(!is_array($valeur) && trim($valeur) == '') {
$erreurs[$champ] .= ' Ce champ ne peut pas être vide';
}
}
 
if(!empty($erreurs)) {
return $erreurs;
}
return true;
}
}
?>
/trunk/applications/saisie/controleurs/Liens.php
New file
0,0 → 1,430
<?php
// declare(encoding='UTF-8');
 
/**
* Classe de gestion des liens.
*
* @package ODS_saisie
* @category Php 5.2
* @author Aurélien Peronnet <aurelien@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
* @version SVN: $Id: Fiche.php 152 2010-09-06 16:19:12Z jpm $
*/
class Liens extends aControleur {
 
public static function construireUrl($tableau_params, $conserver_parametres_actuels = false) {
 
if ($conserver_parametres_actuels) {
return '?'.http_build_query($tableau_params + $_GET);
}
return '?'.http_build_query($tableau_params);
}
 
public static function getUrlSquelette() {
 
$url_base = self::getUrlBaseComplete();
$url_base_squelette = $url_base.Config::get('dossier_squelettes').DS;
 
return $url_base_squelette;
}
 
public static function getUrlStyle() {
$url_base_style = self::getUrlSquelette().'css'.DS;
 
return $url_base_style;
}
 
public static function getUrlScript() {
$url_base_script = self::getUrlSquelette().'js'.DS;
 
return $url_base_script;
}
 
public static function getUrlImage() {
$url_base_image = self::getUrlSquelette().'images'.DS;
 
return $url_base_image;
}
 
public static function getUrlImageEspece($nom_sci, $format = 'CXS') {
 
$nom_sci_formate = strtolower(str_replace(' ', '_', $nom_sci));
 
if(!file_exists(Config::get('dossier_images_especes').$format.'/'.$nom_sci_formate.'.jpg')) {
return Config::get('url_images_especes').$format.'/'.'vide.jpg';
}
 
return Config::get('url_images_especes').$format.'/'.$nom_sci_formate.'.jpg';
}
 
public static function getUrlFicheEspece($nom_sci) {
 
$nom_sci_formate = strtolower(str_replace(' ', '_', $nom_sci));
return Config::get('url_fiches_especes').$nom_sci_formate.'/';
}
 
public static function getUrlAdministrationEspeces() {
$params = array(
'module' => 'Administration',
'action' => 'afficherListeEspecesAdministrables'
);
return self::construireUrl($params);
}
 
public static function getCreditImageEspece($nom_sci) {
 
$nom_sci_formate = strtolower(str_replace(' ', '_', $nom_sci));
 
if(!file_exists(Config::get('dossier_images_especes').'/'.$nom_sci_formate.'.txt')) {
$credit = '';
} else {
$credit = file_get_contents(Config::get('dossier_images_especes').'/'.$nom_sci_formate.'.txt');
$credit = htmlentities($credit);
}
 
if(trim($credit) != '') {
$credit = 'Crédits : '.$credit;
}
 
return $credit;
}
 
public static function getUrlBaseReecrite() {
 
if(isset($_SERVER['REDIRECT_URL']) && $_SERVER['REDIRECT_URL'] != '') {
 
}
 
$base_url_reecrite = 'http://'.$_SERVER['SERVER_NAME'].$_SERVER['REDIRECT_URL'];
$base_url_reecrite .= '/';
 
return $base_url_reecrite;
}
 
public static function getUrlBase() {
 
$base_vrai_chemin = str_replace(realpath($_SERVER['DOCUMENT_ROOT']),'',realpath(Application::getChemin()));
$base_vrai_chemin .= '/';
 
return $base_vrai_chemin;
}
 
public static function getUrlBaseComplete() {
return 'http://'.$_SERVER['SERVER_NAME'].str_replace(realpath($_SERVER['DOCUMENT_ROOT']),'',realpath(Application::getChemin())).'/';
}
 
public static function getUrlDefaut() {
 
$params = array();
return self::construireUrl($params);
}
 
public static function getUrlConsultationFicheStation($id_station) {
 
$params = array(
'module' => 'Station',
'action' => 'afficherInformationsStation',
'id_station' => $id_station
);
return self::construireUrl($params);
}
 
public static function getUrlFormulaireSaisieStation() {
 
$params = array(
'module' => 'Station',
'action' => 'afficherFormulaireSaisieStation',
'id_station' => 'saisie'
);
return self::construireUrl($params);
}
 
public static function getUrlValidationFormulaireSaisieStation() {
$params = array(
'module' => 'Station',
'action' => 'validerFormulaireSaisieStation'
);
return self::construireUrl($params);
}
 
public static function getUrlFormulaireModificationStation($id_station) {
$params = array(
'module' => 'Station',
'action' => 'afficherFormulaireModificationStation',
'id_station' => $id_station
);
return self::construireUrl($params);
}
 
public static function getUrlValidationFormulaireModificationStation($id_station) {
$params = array(
'module' => 'Station',
'action' => 'validerFormulaireModificationStation',
'id_station' => $id_station
);
return self::construireUrl($params);
}
 
public static function getUrlFormulaireSuppressionStation() {
 
$params = array(
'module' => 'Station',
'action' => 'supprimerStation'
);
return self::construireUrl($params);
}
 
public static function getUrlFormulaireAjoutEspece($id_station) {
 
$params = array(
'module' => 'Espece',
'action' => 'afficherFormulaireSaisieEspece',
'id_station' => $id_station,
'id_espece' => 'saisie'
);
 
return self::construireUrl($params);
}
 
public static function getUrlValidationFormulaireSaisieEspece($id_station) {
 
$params = array(
'module' => 'Espece',
'action' => 'validerFormulaireSaisieEspece',
'id_station' => $id_station,
'id_espece' => 'saisie'
);
 
return self::construireUrl($params);
}
 
public static function getUrlConsultationFicheIndividu($id_station, $id_espece, $id_individu) {
 
$params = array(
'module' => 'Individu',
'action' => 'afficherInformationsIndividu',
'id_station' => $id_station,
'id_espece' => $id_espece,
'id_individu' => $id_individu
);
return self::construireUrl($params);
 
}
 
public static function getUrlFormulaireSaisieIndividu($id_station, $id_espece) {
 
$params = array(
'module' => 'Individu',
'action' => 'afficherFormulaireSaisieIndividu',
'id_station' => $id_station,
'id_espece' => $id_espece
);
return self::construireUrl($params);
}
 
public static function getUrlValidationFormulaireSaisieIndividu($id_station, $id_espece) {
 
$params = array(
'module' => 'Individu',
'action' => 'validerFormulaireSaisieIndividu',
'id_station' => $id_station,
'id_espece' => $id_espece
);
return self::construireUrl($params);
}
 
public static function getUrlFormulaireModificationIndividu($id_station, $id_espece, $id_individu) {
 
$params = array(
'module' => 'Individu',
'action' => 'afficherFormulaireModificationIndividu',
'id_station' => $id_station,
'id_espece' => $id_espece,
'id_individu' => $id_individu
);
return self::construireUrl($params);
}
 
public static function getUrlValidationFormulaireModificationIndividu($id_station, $id_espece, $id_individu) {
 
$params = array(
'module' => 'Individu',
'action' => 'validerFormulaireModificationIndividu',
'id_station' => $id_station,
'id_espece' => $id_espece,
'id_individu' => $id_individu
);
return self::construireUrl($params);
}
 
public static function getUrlSuppressionIndividu($id_station, $id_espece, $id_individu) {
 
$params = array(
'module' => 'Individu',
'action' => 'supprimerIndividu',
'id_station' => $id_station
);
return self::construireUrl($params);
}
 
public static function getUrlConsultationEspeceStation($id_station, $id_espece, $annee = null) {
 
if($annee == null) {
$annee = date('Y');
}
 
$params = array(
'module' => 'Individu',
'action' => 'afficherListeIndividu',
'id_station' => $id_station,
'id_espece' => $id_espece,
'annee' => $annee
);
 
return self::construireUrl($params);
}
 
public static function getUrlFormulaireModificationObservation($id_station,$id_espece, $id_individu, $annee = null) {
 
if($annee == null) {
$annee = date('Y');
}
 
$params = array(
'module' => 'Observation',
'action' => 'afficherFormulaireModificationObservation',
'id_station' => $id_station,
'id_espece' => $id_espece,
'id_individu' => $id_individu,
'annee' => $annee
);
 
return self::construireUrl($params);
}
 
public static function getUrlValidationFormulaireModificationObservation($id_station,$id_espece, $id_individu, $annee = null) {
 
if($annee == null) {
$annee = date('Y');
}
 
$params = array(
'module' => 'Observation',
'action' => 'validerFormulaireModificationObservation',
'id_station' => $id_station,
'id_espece' => $id_espece,
'id_individu' => $id_individu,
'annee' => $annee
);
 
return self::construireUrl($params);
}
 
public static function getUrlExportDonneesObservations() {
 
return Config::get('url_jrest').'OdsExport/FichierExportObservationCSV/';
}
 
public static function getUrlExportDonneesObservationsPourUtilisateur() {
 
$params = array(
'module' => 'Export',
'action' => 'envoyerFichierCSVExportObservation'
);
 
return self::construireUrl($params);
}
 
public static function getUrlFormulaireAjoutEspeceAdmin() {
 
$params = array(
'module' => 'Administration',
'action' => 'afficherFormulaireAjoutEspeceAdmin',
'id_espece' => $id_espece
);
return self::construireUrl($params);
}
 
public static function getUrlValidationFormulaireAjoutEspeceAdmin() {
$params = array(
'module' => 'Administration',
'action' => 'validerFormulaireAjoutEspeceAdmin',
'id_espece' => $id_espece
);
return self::construireUrl($params);
}
 
public static function getUrlFormulaireModificationEspeceAdmin($id_espece) {
 
$params = array(
'module' => 'Administration',
'action' => 'afficherFormulaireModificationEspeceAdmin',
'id_espece' => $id_espece
);
return self::construireUrl($params);
}
 
public static function getUrlValidationFormulaireModificationEspeceAdmin($id_espece) {
$params = array(
'module' => 'Administration',
'action' => 'validerFormulaireModificationEspeceAdmin',
'id_espece' => $id_espece
);
return self::construireUrl($params);
}
 
public static function getUrlFormulaireAjoutImageEspeceAdmin($id_espece) {
$params = array(
'module' => 'Administration',
'action' => 'afficherFormulaireAjoutImageEspeceAdmin',
'id_espece' => $id_espece
);
return self::construireUrl($params);
}
 
public static function getUrlValidationFormulaireAjoutImageEspeceAdmin($id_espece) {
$params = array(
'module' => 'Administration',
'action' => 'validerFormulaireAjoutImageEspeceAdmin',
'id_espece' => $id_espece
);
return self::construireUrl($params);
}
 
public static function renvoyerStylesInclus() {
 
$styles = '';
$styles .= '<link href="'.self::getUrlStyle().'saisie.css" rel="stylesheet" type="text/css"/>';
$styles .= '<link href="'.self::getUrlStyle().'jquery_ui/jquery-ui-1.8.6.custom.css" rel="stylesheet" type="text/css"/>';
$styles .= '<link href="'.self::getUrlStyle().'jquery_ui/jquery.ui.datepicker.css" rel="stylesheet" type="text/css"/>';
 
return $styles;
}
 
public static function renvoyerScriptsInclus() {
 
$scripts = '<script type="text/javascript">'.
' var urlBaseJrest = "'.Config::get('url_jrest').'"; '.
'</script>';
$scripts .= '<script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false&key=AIzaSyC_HBnP1YDEX1ATgnvylxkW2HImJV485ZQ"></script>';
$scripts .= '<script type="text/javascript" src="'.self::getUrlScript().'jquery-1.4.4.min.js"></script>';
$scripts .= '<script type="text/javascript" src="'.self::getUrlScript().'jquery_ui/jquery-ui-1.8.6.custom.min.js"></script>';
$scripts .= '<script type="text/javascript" src="'.self::getUrlScript().'saisie.js"></script>';
 
if(AppControleur::getUtilisateur()->estAdmin()) {
$scripts .= '<script type="text/javascript" src="'.self::getUrlScript().'saisie_admin.js"></script>';
}
 
$scripts .= '<script type="text/javascript" src="'.self::getUrlScript().'jquery_ui/jquery.ui.datepicker.js"></script>';
$scripts .= '<script type="text/javascript" src="'.self::getUrlScript().'jquery_ui/jquery.ui.datepicker-fr.js"></script>';
 
return $scripts;
 
}
 
 
}
?>
/trunk/applications/saisie/controleurs/Utilisateur.php
New file
0,0 → 1,78
<?php
abstract class Utilisateur extends aControleur {
public function setIdentite($identite) {
$id_identite = $this->getIdUtilisateurPourNom($identite);
if($id_identite) {
$_SESSION['ods_saisie']['identite'] = $id_identite;
} else {
$_SESSION['ods_saisie']['identite'] = $this->getIdentifiantNumerique();
}
}
public function getIdentite() {
if($this->estAdmin()) {
if(!isset($_SESSION['ods_saisie']['identite']) || $_SESSION['ods_saisie']['identite'] == '') {
return $this->getIdentifiantNumerique();
}
return $_SESSION['ods_saisie']['identite'];
} else {
return $this->getIdentifiantNumerique();
}
}
public function getIdentiteNom() {
if($this->estAdmin()) {
if(!isset($_SESSION['ods_saisie']['identite']) || $_SESSION['ods_saisie']['identite'] == '') {
return $this->getNom();
}
return $this->getNomUtilisateurPourId($_SESSION['ods_saisie']['identite']);
} else {
return $this->getNom();
}
}
public function getNomUtilisateurPourId($id) {
return '';
}
public function getIdUtilisateurPourNom($nom) {
return 0;
}
public function getIdentifiantNumerique() {
return 0;
}
public function getEmail() {
return '';
}
public function getNom() {
return '';
}
public function getPrenom() {
return '';
}
public function estIdentifie() {
return false;
}
public function estAdmin() {
return false;
}
public function getFormulaireidentification() {
return '';
}
public function getFormulaireInscription() {
return '';
}
}
?>
/trunk/applications/saisie/i18n/fr.ini
New file
0,0 → 1,3
[saisie]
station = Creation d'un nouvelle station
espece = Création d'un nouvel individu
/trunk/applications/saisie/framework.php
New file
0,0 → 1,5
<?php
// Inclusion du Framework
// Indiquer ci-dessous le chemin vers le fichier autoload.inc.php de la bonne version du Framework
require_once '/home/ods/www/applications/framework/autoload.inc.php';
?>
/trunk/applications/saisie/saisie.php
New file
0,0 → 1,53
<?php
// declare(encoding='UTF-8');
/**
* Application de saisie d'ODS.
* Fichier principal d'initialisation.
*
* @category PHP5
* @package Saisie
* @author Aurélien Peronnet <aurelien@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @license GPL-v3 et CECILL-v2
* @version $Id: collection.php 142 2010-08-30 12:41:00Z aurelien $
*/
// Autoload pour cette application
function __autoload($nom_classe) {
// Tableau des chemins à inclure pour trouver une classe relatif à ce fichier
$chemins = array(
'bibliotheque'.DS.'dao',
'bibliotheque'.DS.'pear',
'bibliotheque'.DS.'utilitaires',
'composants',
'composants'.DS.'cartographie');
foreach ($chemins as $chemin) {
$fichier_a_inclure = dirname(__FILE__).DS.$chemin.DS.$nom_classe.'.php';
if (file_exists($fichier_a_inclure)) {
include_once $fichier_a_inclure;
return null;
}
}
}
 
// Le fichier autoload.inc.php du Framework de Tela Botanica doit être appelée avant tout autre chose dans l'application.
// Sinon, rien ne sera chargé.
// Chemin du fichier chargeant le framework requis
$framework = dirname(__FILE__).'/framework.php';
if (!file_exists($framework)) {
$e = "Veuillez paramétrer l'emplacement et la version du Framework dans le fichier $framework";
trigger_error($e, E_USER_ERROR);
} else {
// Inclusion du Framework
require_once $framework;
// Ajout d'information concernant cette application
Application::setChemin(__FILE__);// Obligatoire
Application::setInfo(Config::get('info'));
// Lancement du débogage si nécessaire
if (Config::get('chronometrage')) {
Chronometre::chrono('Saisie.php - début');
}
// Lancement de l'application
AppControleur::initialiser();
}
?>
/trunk/applications/saisie/configurations/config.ini
New file
0,0 → 1,61
; +------------------------------------------------------------------------------------------------------+
; Général
; Séparateur de dossier
ds = DIRECTORY_SEPARATOR
 
; +------------------------------------------------------------------------------------------------------+
; Info sur l'application
info.nom = Saisie des observations
; Abréviation de l'application
info.abr = SODS
; Code numérique de la version de l'application
info.version.code.num = "0.1"
; Code alphabétique de la version de l'application
info.version.code.alpha = ""
; Nom de la version de l'application
info.version.nom = ""
; Version du Framework nécessaire au fonctionnement de cette application
info.framework.version = 0.2
;Encodage de l'application
appli_encodage = "UTF-8"
; Nom de domaine pour l'URL de base de l'application :
domaine = "www.obs-saisons.fr"
; URL de base de l'application, si elle est laissée vide, l'application fonctionnera en Stand-alone
url_base = ""
; URL de base de l'application avec l'indication du fichier de départ
url_base_index = "{ref:url_base}index.php"
; URL de base où se situe le .htacces réalisant la réecriture d'URL pour les permaliens de l'application
url_base_permalien = "{ref:url_base}"
 
 
; Mettre à true si l'application nécessite de s'identifier.
identification = true
; Nom de la classe à utiliser pour gérer les utilisateurs
objet_utilisateur = DrupalUtilisateur
 
; +------------------------------------------------------------------------------------------------------+
; Paramétrage de la session
; Devons nous démarrer une session : oui (true) ou non (false)
session_demarrage = "php:true"
; Définition du nom de la session à utiliser
session_nom = "ods_saisie"
 
; +------------------------------------------------------------------------------------------------------+
; Débogage
; Indique si oui ou non on veut afficher le débogage.
fw_debogage = true
; Indique si oui ou non on veut lancer le chronométrage
chronometrage = false
 
; +------------------------------------------------------------------------------------------------------+
; Spécifique à l'application
; Url du Jrest utilisé pour les services web fournissant les données à l'application
url_jrest = "http://www.obs-saisons.fr/applications/jrest/"
; Emplacement du dossier de base des images pour illustrer les esp�ces
url_fiches_especes = "http://www.obs-saisons.fr/"
url_images_especes = "http://www.obs-saisons.fr/images/especes_appli/"
dossier_images_especes = "/home/ods/www/images/especes_appli/"
;Emplacement du dossier des fichiers temporaires
chemin_fichiers_temp = /home/ods/www/tmp
; taille maximum des fichiers d'image uploadables par l'admin
max_taille_fichiers = 10097152;
/trunk/applications/saisie/configurations/config.default.ini
New file
0,0 → 1,61
; +------------------------------------------------------------------------------------------------------+
; Général
; Séparateur de dossier
ds = DIRECTORY_SEPARATOR
 
; +------------------------------------------------------------------------------------------------------+
; Info sur l'application
info.nom = Saisie des observations
; Abréviation de l'application
info.abr = SODS
; Code numérique de la version de l'application
info.version.code.num = "0.1"
; Code alphabétique de la version de l'application
info.version.code.alpha = ""
; Nom de la version de l'application
info.version.nom = ""
; Version du Framework nécessaire au fonctionnement de cette application
info.framework.version = 0.2
;Encodage de l'application
appli_encodage = "UTF-8"
; Nom de domaine pour l'URL de base de l'application : localhost
domaine = "www.tela-botanica.org"
; URL de base de l'application, si elle est laissée vide, l'application fonctionnera en Stand-alone
url_base = "http://{ref:domaine}/client/collection/v{ref:info.version.code.num}-{ref:info.version.code.alpha}/"
; URL de base de l'application avec l'indication du fichier de départ
url_base_index = "{ref:url_base}index.php"
; URL de base où se situe le .htacces réalisant la réecriture d'URL pour les permaliens de l'application
url_base_permalien = "{ref:url_base}"
 
 
; Mettre à true si l'application nécessite de s'identifier.
identification = true
; Nom de la classe à utiliser pour gérer les utilisateurs
objet_utilisateur = DrupalUtilisateur
 
; +------------------------------------------------------------------------------------------------------+
; Paramétrage de la session
; Devons nous démarrer une session : oui (true) ou non (false)
session_demarrage = "php:true"
; Définition du nom de la session à utiliser
session_nom = "ods_saisie"
 
; +------------------------------------------------------------------------------------------------------+
; Débogage
; Indique si oui ou non on veut afficher le débogage.
fw_debogage = true
; Indique si oui ou non on veut lancer le chronométrage
chronometrage = false
 
; +------------------------------------------------------------------------------------------------------+
; Spécifique à l'application
; Url du Jrest utilisé pour les services web fournissant les données à l'application
url_jrest = "/jrest/"
; Spécifique à l'application
; Emplacement du dossier de base des images pour illustrer les espèces
dossier_images_especes = "/documents/images_especes/"
url_images_especes = "/documents/images_especes/"
;Emplacement du dossier des fichiers temporaires
chemin_fichiers_temp = /tmp
; taille maximum des fichiers d'image uploadables par l'admin
max_taille_fichiers = 10097152;
/trunk/applications/saisie/framework.defaut.php
New file
0,0 → 1,6
<?php
// Inclusion du Framework
// Renomer ce fichier en "framework.php"
// Indiquer ci-dessous le chemin vers le fichier autoload.inc.php de la bonne version du Framework
require_once '/framework/0.2/autoload.inc.php';
?>
/trunk/applications/saisie/bibliotheque/dao/IndividuDao.php
New file
0,0 → 1,104
<?php
// declare(encoding='UTF-8');
/**
* Modèle d'accès à la base de données de saisies pour le module individus.
*
* @package ODS_saisie
* @category php 5.2
* @author Aurélien Peronnet <aurelien@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
* @version SVN: $Id: StationDao.php 154 2010-09-13 12:15:11Z aurelien $
*
*/
class IndividuDao extends Dao {
 
const SERVICE_INDIVIDU = 'OdsIndividu';
const METHODE_INDIVIDUS_STATION = 'IndividusPourStation';
const METHODE_INDIVIDUS_STATION_ESPECE = 'IndividusPourStationPourEspece';
 
/**
* Retourne l'ensemble des informations d'un individu.
*
* @param integer l'id d'une station.
* @return array un tableau contenant les informations sur les individus de cette station.
*/
public function getListeIndividusPourStation($id_station) {
 
$url = $this->url_jrest.self::SERVICE_INDIVIDU.'/'.self::METHODE_INDIVIDUS_STATION.'/'.$id_station;
$json = $this->envoyerRequeteConsultation($url);
$donnees = json_decode($json, true);
return $donnees;
}
 
public function getListeIndividusPourStationPourEspece($id_station, $id_espece) {
 
$url = $this->url_jrest.self::SERVICE_INDIVIDU.'/'.self::METHODE_INDIVIDUS_STATION_ESPECE.'/'.$id_station.'/'.$id_espece;
$json = $this->envoyerRequeteConsultation($url);
$donnees = json_decode($json, true);
 
return $donnees;
}
 
public function getInformationsIndividu($id_individu) {
 
if (is_numeric($id_individu)) {
$url = $this->url_jrest.self::SERVICE_INDIVIDU."/$id_individu";
$json = $this->envoyerRequeteConsultation($url);
$donnees = json_decode($json, true);
return $donnees;
}
}
 
public function ajouterIndividu($valeurs_individu_verifiees) {
 
$donnees = $valeurs_individu_verifiees;
 
$url = $this->url_jrest.self::SERVICE_INDIVIDU."/";
$json = $this->envoyerRequeteAjout($url, $donnees);
$donnees = json_decode($json, true);
$donnees_retour = json_decode($json, true);
 
return $donnees_retour;
}
 
public function modifierIndividu($id_individu, $valeurs_individu_verifiees) {
 
$donnees = $valeurs_individu_verifiees;
 
if (is_numeric($id_individu)) {
$url = $this->url_jrest.self::SERVICE_INDIVIDU."/$id_individu";
 
$json = $this->envoyerRequeteModif($url, $donnees);
$donnees = json_decode($json, true);
 
if($donnees_retour['reponse'] == 'OK') {
return true;
}
}
 
return false;
}
 
public function supprimerIndividu($id_individu) {
 
$donnees = $valeurs_individu_verifiees;
 
if (is_numeric($id_individu)) {
$url = $this->url_jrest.self::SERVICE_INDIVIDU."/".AppControleur::getIdUtilisateur()."/".$id_individu;
$json = $this->envoyerRequeteSuppression($url, $donnees);
$donnees = json_decode($json, true);
 
$donnees_retour = json_decode($json, true);
 
if($donnees_retour['reponse'] == 'OK') {
return true;
}
 
}
 
return false;
}
}
?>
/trunk/applications/saisie/bibliotheque/dao/ObservationDao.php
New file
0,0 → 1,72
<?php
// declare(encoding='UTF-8');
/**
* Modèle d'accès à la base de données de saisies pour le module observation.
*
* @package ODS_saisie
* @category php 5.2
* @author Aurélien Peronnet <aurelien@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
* @version SVN: $Id: StationDao.php 154 2010-09-13 12:15:11Z aurelien $
*
*/
class ObservationDao extends Dao {
 
const SERVICE_OBSERVATION = 'OdsObservation';
const METHODE_OBSERVATION_INDIVIDU= 'ObservationsPourIndividu';
 
/**
* Retourne l'ensemble des observations d'une station.
*
* @param integer l'id d'une station.
* @return array un tableau contenant les informations sur les observations de cette station.
*/
public function getListeObservationsPourStation($id_station) {
 
$url = $this->url_jrest.self::SERVICE_OBSERVATION."/*/";
$json = $this->envoyerRequeteConsultation($url);
$donnees = json_decode($json, true);
return $donnees;
}
 
public function getListeObservationsPourIndividu($id_individu, $annee = null) {
 
if (is_numeric($id_individu)) {
$url = $this->url_jrest.self::SERVICE_OBSERVATION.'/'.self::METHODE_OBSERVATION_INDIVIDU.'/'.$id_individu;
$json = $this->envoyerRequeteConsultation($url);
$donnees = json_decode($json, true);
 
return $donnees;
}
}
 
public function ajouterObservation($valeurs_observation_verifiees) {
 
$donnees = $valeurs_individu_verifiees;
$donnees['id_participant'] = AppControleur::getIdUtilisateur();
 
$url = $this->url_jrest.self::SERVICE_OBSERVATION."/";
$json = $this->envoyerRequeteAjout($url, $donnees);
$donnees = json_decode($json, true);
 
return true;
}
 
public function modifierObservation($id_individu, $valeurs_observation_verifiees) {
 
$donnees = $valeurs_observation_verifiees;
$donnees['id_participant'] = AppControleur::getIdUtilisateur();
 
if (is_numeric($id_individu)) {
$url = $this->url_jrest.self::SERVICE_OBSERVATION."/$id_individu/";
$json = $this->envoyerRequeteModif($url, $donnees);
 
$donnees = json_decode($json, true);
}
 
return $donnees;
}
}
?>
/trunk/applications/saisie/bibliotheque/dao/Dao.php
New file
0,0 → 1,220
<?php
// declare(encoding='UTF-8');
/**
* Classe modèle spécifique à l'application, donc d'accés au données, elle ne devrait pas être appelée de l'extérieur.
* Elle est abstraite donc doit obligatoirement être étendue.
*
* @category Php5
* @package ODS_saisie
* @author Jean-Pascal MILCENT <jpm@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
* @version SVN: $Id$
*/
abstract class Dao {
const ORDRE_ASCENDANT = 'ASC';
const ORDRE_DESCENDANT = 'DESC';
const HTTP_REQUETE_SEPARATEUR = '&';
protected $distinction = '0';
protected $limite_debut = null;
protected $limite_nbre = null;
protected $ordre = null;
protected $url_jrest = null;
public function __construct() {
$this->url_jrest = Config::get('url_jrest');
}
//+----------------------------------------------------------------------------------------------------------------+
// ACCESSEURS
public function setDistinction($distinct) {
$this->distinction = $distinct;
}
public function getDistinction() {
return $this->distinction;
}
public function viderDistinction() {
$this->distinction = null;
}
 
public function avoirLimitation() {
$limitation = false;
if (!is_null($this->limite_debut) && !is_null($this->limite_nbre)) {
$limitation = true;
}
return $limitation;
}
public function setLimitation($limite_debut, $limite_nbre) {
$this->limite_debut = $limite_debut;
$this->limite_nbre = $limite_nbre;
}
public function getLimiteDebut() {
return $this->limite_debut;
}
public function getLimiteNbre() {
return $this->limite_nbre;
}
public function viderLimite() {
$this->limite_debut = null;
$this->limite_nbre = null;
}
public function addOrdre($champ, $trie = self::ORDRE_ASCENDANT) {
if (!isset($this->ordre[$champ])) {
if (self::ORDRE_ASCENDANT == $trie || self::ORDRE_DESCENDANT == $trie) {
$this->ordre[$champ] = $trie;
} else {
$e = "La valeur pour le tri doit être : {self::ORDRE_ASCENDANT} ou {self::ORDRE_DESCENDANT}.";
trigger_error($e, E_USER_WARNING);
}
} else {
$e = "Le champ $champ existe déjà dans le tableau des ordres.";
trigger_error($e, E_USER_WARNING);
}
}
public function getOrdre() {
$champs = array();
foreach ($this->ordre as $champ => $trie) {
$champs[] = "$champ $trie";
}
return implode(', ', $champs);
}
public function viderOrdre() {
$this->ordre = null;
}
//+----------------------------------------------------------------------------------------------------------------+
// MÉTHODES
protected function envoyerRequeteConsultation($url) {
$url = $this->traiterUrlParametres($url);
$retour = $this->envoyerRequete($url, 'GET');
return $retour;
}
protected function envoyerRequeteAjout($url, Array $donnees) {
$retour = $this->envoyerRequete($url, 'PUT', $donnees);
return $retour;
}
protected function envoyerRequeteModif($url, Array $donnees) {
$retour = $this->envoyerRequete($url, 'POST', $donnees);
return $retour;
}
protected function envoyerRequeteSuppression($url) {
$retour = $this->envoyerRequete($url, 'DELETE');
return $retour;
}
private function envoyerRequete($url, $mode, Array $donnees = array()) {
$contenu = false;
if ($mode != 'GET' && $mode != 'PUT' && $mode != 'POST' && $mode != 'DELETE') {
$e = "Le mode de requête '$mode' n'est pas accepté!";
trigger_error($e, E_USER_WARNING);
} else {
$contexte = stream_context_create(array(
'http' => array(
'method' => $mode,
'header' => "Content-type: application/x-www-form-urlencoded\r\n",
'content' => http_build_query($donnees, null, self::HTTP_REQUETE_SEPARATEUR))));
$flux = @fopen($url, 'r', false, $contexte);
if (!$flux) {
$this->traiterEntete($http_response_header, $url);
$e = "L'ouverture de l'url '$url' par la méthode HTTP '$mode' a échoué!";
trigger_error($e, E_USER_WARNING);
} else {
// Informations sur les en-têtes et métadonnées du flux
$entetes = stream_get_meta_data($flux);
$this->traiterEntete($entetes, $url);
// Contenu actuel de $url
$contenu = stream_get_contents($flux);
fclose($flux);
}
}
$this->reinitialiser();
return $contenu;
}
private function traiterUrlParametres($url) {
$parametres = array();
if (! is_null($this->getLimiteDebut())) {
$parametres[] = 'start='.$this->getLimiteDebut();
}
if (! is_null($this->getLimiteNbre())) {
$parametres[] = 'limit='.$this->getLimiteNbre();
}
if (! is_null($this->ordre)) {
$parametres[] = 'orderby='.urlencode($this->getOrdre());
}
if ($this->getDistinction() != 0) {
$parametres[] = 'distinct='.$this->getDistinction();
}
if (count($parametres) > 0) {
$url_parametres = implode('&', $parametres);
$url = $url.'?'.$url_parametres;
}
return $url;
}
private function traiterEntete($entetes, $uri) {
$infos = $this->analyserEntete($entetes, $uri);
$this->traiterEnteteDebug($infos);
$this->traiterEnteteMessage($infos);
}
private function analyserEntete($entetes, $uri) {
$infos = array('date' => null, 'uri' => $uri, 'debugs' => null, 'messages' => null);
if (isset($entetes['wrapper_data'])) {
$entetes = $entetes['wrapper_data'];
}
foreach ($entetes as $entete) {
if (preg_match('/^X-DebugJrest-Data: (.+)$/', $entete, $match)) {
$infos['debugs'] = json_decode($match[1]);
}
if (preg_match('/^X-MessageJrest-Data: (.+)$/', $entete, $match)) {
$infos['messages'] = json_decode($match[1]);
}
if (preg_match('/^Date: .+ ([012][0-9]:[012345][0-9]:[012345][0-9]) .*$/', $entete, $match)) {
$infos['date'] = $match[1];
}
}
return $infos;
}
private function traiterEnteteDebug($entetes) {
if (isset($entetes['debugs'])) {
$date = $entetes['date'];
$uri = $entetes['uri'];
$debugs = $entetes['debugs'];
foreach ($debugs as $debug) {
Debug::printr("DEBUG : $date - $uri :\n$debug");
}
}
}
private function traiterEnteteMessage($entetes) {
if (isset($entetes['messages'])) {
$date = $entetes['date'];
$uri = $entetes['uri'];
$messages = $entetes['messages'];
foreach ($messages as $message) {
Debug::printr("MESSAGE : $date - $uri :\n$message");
}
}
}
private function reinitialiser() {
$this->viderDistinction();
$this->viderLimite();
$this->viderOrdre();
}
}
?>
/trunk/applications/saisie/bibliotheque/dao/TripleDao.php
New file
0,0 → 1,59
<?php
// declare(encoding='UTF-8');
/**
* Modèle d'accès à la base de données de saisies pour le module triples.
*/
 
class TripleDao extends Dao {
const SERVICE_TRIPLES = 'OdsTriple';
const METHODE_LISTE_MILIEUX = 'environnement';
const METHODE_LISTE_TYPES_ESPECES = 'type_espece';
const METHODE_LISTE_EVENEMENTS = 'evenement';
/**
* Retourne l'ensemble des milieux.
*
* @return array un tableau contenant les informations sur les environnement des stations.
*/
public function getListeMilieux() {
$url = $this->url_jrest.self::SERVICE_TRIPLES.'/'.self::METHODE_LISTE_MILIEUX.'/';
$json = $this->envoyerRequeteConsultation($url);
$donnees = json_decode($json, true);
return $donnees;
}
/**
* Retourne l'ensemble des types d'espèces.
*
* @return array un tableau contenant les informations sur les types des espèces.
*/
public function getListeTypesEspeces() {
$url = $this->url_jrest.self::SERVICE_TRIPLES.'/'.self::METHODE_LISTE_TYPES_ESPECES.'/';
$json = $this->envoyerRequeteConsultation($url);
$donnees = json_decode($json, true);
return $donnees;
}
/**
* Retourne l'ensemble des évenements.
*
* @return array un tableau contenant les informations sur les évenements.
*/
public function getListeEvenements() {
$url = $this->url_jrest.self::SERVICE_TRIPLES.'/'.self::METHODE_LISTE_EVENEMENTS.'/';
$json = $this->envoyerRequeteConsultation($url);
$donnees = json_decode($json, true);
return $donnees;
}
}
 
 
?>
/trunk/applications/saisie/bibliotheque/dao/ExportDao.php
New file
0,0 → 1,33
<?php
// declare(encoding='UTF-8');
/**
* Modèle d'accès à la base de données pour l'export
*
* @package ODS_saisie
* @category php 5.2
* @author Aurélien Peronnet <aurelien@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
* @version SVN: $Id: StationDao.php 154 2010-09-13 12:15:11Z aurelien $
*
*/
class ExportDao extends Dao {
const SERVICE_EXPORT = 'OdsExport';
const METHODE_EXPORT_EVENEMENTS = 'ExportObservationPlat';
 
/**
* Retourne l'ensemble des especes.
*
* @return array un tableau contenant les informations sur les evenement d'une espece.
*/
public function getExportObservations($id_espece) {
$url = $this->url_jrest.self::SERVICE_EXPORT.'/'.self::METHODE_EXPORT_EVENEMENTS.'/?utilisateur='.AppControleur::getIdUtilisateur();
$json = $this->envoyerRequeteConsultation($url);
$donnees = json_decode($json, true);
return $donnees;
}
}
/trunk/applications/saisie/bibliotheque/dao/StationDao.php
New file
0,0 → 1,95
<?php
// declare(encoding='UTF-8');
/**
* Modèle d'accès à la base de données de saisies pour le module stations.
*
* @package ODS_saisie
* @category php 5.2
* @author Aurélien Peronnet <aurelien@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
* @version SVN: $Id: StationDao.php 154 2010-09-13 12:15:11Z aurelien $
*
*/
class StationDao extends Dao {
const SERVICE_STATION = 'OdsStation';
 
/**
* Retourne l'ensemble des stations d'un participant.
*
* @return array un tableau contenant les informations sur les stations du participant.
*/
public function getListeStations() {
$url = $this->url_jrest.self::SERVICE_STATION.'/'.AppControleur::getIdUtilisateur().'/*/';
$json = $this->envoyerRequeteConsultation($url);
$donnees = json_decode($json, true);
return $donnees;
}
public function getInformationsStation($id_station) {
$url = $this->url_jrest.self::SERVICE_STATION.'/'.AppControleur::getIdUtilisateur().'/'.$id_station.'/';
$json = $this->envoyerRequeteConsultation($url);
$donnees = json_decode($json, true);
return $donnees;
}
public function ajouterStation($valeurs_station_verifiees) {
$donnees = $valeurs_station_verifiees;
$donnees['id_participant'] = AppControleur::getIdUtilisateur();
$url = $this->url_jrest.self::SERVICE_STATION."/";
$json = $this->envoyerRequeteAjout($url, $donnees);
$donnees_retour = json_decode($json, true);
return $donnees_retour;
}
public function modifierStation($id_station, $valeurs_station_verifiees) {
$donnees = $valeurs_station_verifiees;
$donnees['id_participant'] = AppControleur::getIdUtilisateur();
if (is_numeric($id_station)) {
$url = $this->url_jrest.self::SERVICE_STATION."/$id_station";
$json = $this->envoyerRequeteModif($url, $donnees);
$donnees_retour = json_decode($json, true);
if($donnees_retour['reponse'] == 'OK') {
return true;
}
}
return false;
}
public function supprimerStation($id_station) {
 
$donnees['id_station'] = $id_station;
$donnees['id_participant'] = AppControleur::getIdUtilisateur();
if (is_numeric($id_station)) {
$url = $this->url_jrest.self::SERVICE_STATION."/".AppControleur::getIdUtilisateur()."/".$id_station;
$json = $this->envoyerRequeteSuppression($url, $donnees);
$donnees_retour = json_decode($json, true);
if($donnees_retour['reponse'] == 'OK') {
return true;
}
}
return false;
}
}
?>
/trunk/applications/saisie/bibliotheque/dao/ImageDao.php
New file
0,0 → 1,18
<?php
// declare(encoding='UTF-8');
/**
* Modèle d'accès aux images
*/
 
class ImageDao extends Dao {
const SERVICE_IMAGE = 'OdsImageEspece';
public function ajoutImageEspece($valeurs_image) {
$url = $this->url_jrest.self::SERVICE_IMAGE."/";
$json = $this->envoyerRequeteAjout($url, $valeurs_image);
$donnees = json_decode($json, true);
return ($donnees == 'ok');
}
}
/trunk/applications/saisie/bibliotheque/dao/EspeceDao.php
New file
0,0 → 1,120
<?php
// declare(encoding='UTF-8');
/**
* Modèle d'accès à la base de données de saisies pour le module espece.
*
* @package ODS_saisie
* @category php 5.2
* @author Aurélien Peronnet <aurelien@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
* @version SVN: $Id: StationDao.php 154 2010-09-13 12:15:11Z aurelien $
*
*/
class EspeceDao extends Dao {
const SERVICE_ESPECE = 'OdsEspece';
const METHODE_ESPECES_STATION = 'EspecesPourStation';
const METHODE_ESPECES_TYPE = 'EspecesParType';
const METHODE_ESPECES_TYPE_ADMIN = 'EspecesParTypeAdmin';
const METHODE_INFOS_ESPECE = 'Espece';
 
/**
* Retourne l'ensemble des especes.
*
* @return array un tableau contenant les informations sur les especes.
*/
public function getListeEspeces() {
$url = $this->url_jrest.self::SERVICE_ESPECE."/*/";
$json = $this->envoyerRequeteConsultation($url);
$donnees = json_decode($json, true);
return $donnees;
}
/**
* Retourne l'ensemble des especes présentes dans une station.
*
* @param integer l'id de de la station.
* @return array un tableau contenant les informations sur les especes de cette station.
*/
public function getListeEspecesPourStation($id_station) {
 
$url = $this->url_jrest.self::SERVICE_ESPECE.'/'.self::METHODE_ESPECES_STATION.'/'.$id_station;
$json = $this->envoyerRequeteConsultation($url);
$donnees = json_decode($json, true);
return $donnees;
}
/**
* Retourne l'ensemble des especes présentes organisées hierarchiquement par type.
* Mais seulement sur les espèces actives
*
* @return array un tableau contenant les informations sur les especes.
*/
public function getListeEspecesParType() {
$url = $this->url_jrest.self::SERVICE_ESPECE.'/'.self::METHODE_ESPECES_TYPE.'/';
$json = $this->envoyerRequeteConsultation($url);
$donnees = json_decode($json, true);
return $donnees;
}
/**
* Retourne l'ensemble des especes présentes organisées hierarchiquement par type,
* ce qui comprend également les espèces inactives
*
* @return array un tableau contenant les informations sur les especes.
*/
public function getListeEspecesAdminParType() {
$url = $this->url_jrest.self::SERVICE_ESPECE.'/'.self::METHODE_ESPECES_TYPE_ADMIN.'/';
$json = $this->envoyerRequeteConsultation($url);
$donnees = json_decode($json, true);
return $donnees;
}
public function getInformationsEspece($id_espece) {
$url = $this->url_jrest.self::SERVICE_ESPECE.'/'.self::METHODE_INFOS_ESPECE.'/'.$id_espece;
$json = $this->envoyerRequeteConsultation($url);
$donnees = json_decode($json, true);
return $donnees;
}
public function ajouterEspeceDansStation($valeurs_espece_station_verifiees) {
$donnees = $valeurs_espece_station_verifiees;
$donnees['id_participant'] = AppControleur::getIdUtilisateur();
$url = $this->url_jrest.self::SERVICE_ESPECE."/";
$json = $this->envoyerRequeteAjout($url, $donnees);
$donnees = json_decode($json, true);
if (true) {
//TODO: verifier ajout
}
return true;
}
public function ajoutEspece($valeurs_espece) {
$url = $this->url_jrest.self::SERVICE_ESPECE."/";
$json = $this->envoyerRequeteAjout($url, $valeurs_espece);
$donnees = json_decode($json, true);
return ($donnees == 'ok');
}
public function modifierEspece($id_espece, $valeurs_espece) {
$url = $this->url_jrest.self::SERVICE_ESPECE."/".$id_espece;
$json = $this->envoyerRequeteModif($url, $valeurs_espece);
$donnees = json_decode($json, true);
return ($donnees == 'ok');
}
}
?>
/trunk/applications/saisie/bibliotheque/dao/EvenementDao.php
New file
0,0 → 1,34
<?php
// declare(encoding='UTF-8');
/**
* Modèle d'accès à la base de données de saisies pour le module evenement.
*
* @package ODS_saisie
* @category php 5.2
* @author Aurélien Peronnet <aurelien@tela-botanica.org>
* @copyright 2010 Tela-Botanica
* @license http://www.cecill.info/licences/Licence_CeCILL_V2-fr.txt Licence CECILL
* @license http://www.gnu.org/licenses/gpl.html Licence GNU-GPL
* @version SVN: $Id: StationDao.php 154 2010-09-13 12:15:11Z aurelien $
*
*/
class EvenementDao extends Dao {
const SERVICE_ESPECE = 'OdsEvenement';
const METHODE_EVENEMENTS_ESPECE = 'EvenementsPourEspece';
 
/**
* Retourne l'ensemble des especes.
*
* @return array un tableau contenant les informations sur les evenement d'une espece.
*/
public function getListeEvenementPourEspece($id_espece) {
$url = $this->url_jrest.self::SERVICE_ESPECE.'/'.self::METHODE_EVENEMENTS_ESPECE.'/'.$id_espece;
$json = $this->envoyerRequeteConsultation($url);
$donnees = json_decode($json, true);
return $donnees;
}
}
?>
/trunk/applications/saisie/index.php
New file
0,0 → 1,73
<?php
// declare(encoding='UTF-8');
/** Inclusion du fichier principal de l'application*/
require_once 'saisie.php';
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<meta http-equiv="Content-style-type" content="text/css" />
<meta http-equiv="Content-script-type" content="text/javascript" />
<meta http-equiv="Content-language" content="fr" />
 
<title><?php echo AppControleur::getMetaTitre(); ?></title>
<meta name="description" content="<?php echo AppControleur::getMetaDescription();?>" />
<meta name="keywords" content="<?php echo AppControleur::getMetaTags();?>" />
<meta name="revisit-after" content="15 days" />
<meta name="robots" content="index,follow" />
<meta name="author" content="Tela Botanica" />
<?= Liens::renvoyerStylesInclus() ?>
<?= Liens::renvoyerScriptsInclus() ?>
 
<link rel="shortcut icon" type="image/x-icon" href="http://www.tela-botanica.org/favicon.ico" />
<link rel="icon" type="image/png" href="http://www.tela-botanica.org/sites/commun/generique/images/favicones/tela_botanica.png" />
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script>
</head>
<body>
<div id="reducteur">
 
<div id="logo_tela">
<a href="/" title="Retour à l'accueil du site">
<img src="http://www.tela-botanica.org/sites/reseau/generique/images/graphisme/logo_jaune.gif" alt="le logo de Tela Botanica"/>
</a>
</div>
<div id="bandeau">
<div id="bandeau_contenu">
<div id="titre_monde">
<h1>Observatoire des saisons</h1>
</div>
</div>
</div>
<div id="droite">
<div id="onglets" class="gauche">
<?php echo AppControleur::getContenuNavigation(); ?>
</div>
<div id="contenu">
<div id="entete">
<?php echo AppControleur::getContenuTete(); ?>
</div>
<div id="texte">
<?php echo AppControleur::getContenuCorps(); ?>
</div>
<div id="pied_texte">
<?php echo AppControleur::getContenuPied(); ?>
</div>
</div>
<div id="pied" style="clear:left">
<div>
<?php echo AppControleur::getChrono(); ?>
<?php echo AppControleur::getExceptions(); ?>
</div>
<p> &copy;<a href="http://www.tela-botanica.org/" accesskey="1">Tela Botanica</a> / 2000-<?=date('Y')?> - Le réseau des Botanistes Francophones</p>
</div>
</div>
</div>
</body>
</html>
/trunk/applications/saisie/squelettes/corps.tpl.html
New file
0,0 → 1,5
<!-- SAISIE - DEBUT CORPS DE PAGE -->
<div id="saisie_corps">
<?= $corps ?>
</div>
<!-- SAISIE - FIN CORPS DE PAGE -->
/trunk/applications/saisie/squelettes/css/jquery_ui/jquery.ui.datepicker.css
New file
0,0 → 1,68
/*
* jQuery UI Datepicker 1.8.6
*
* Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Datepicker#theming
*/
.ui-datepicker { width: 17em; padding: .2em .2em 0; }
.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
.ui-datepicker .ui-datepicker-prev { left:2px; }
.ui-datepicker .ui-datepicker-next { right:2px; }
.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
.ui-datepicker .ui-datepicker-next-hover { right:1px; }
.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; }
.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; }
.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
.ui-datepicker select.ui-datepicker-month,
.ui-datepicker select.ui-datepicker-year { width: 49%;}
.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; }
.ui-datepicker td { border: 0; padding: 1px; }
.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
 
/* with multiple calendars */
.ui-datepicker.ui-datepicker-multi { width:auto; }
.ui-datepicker-multi .ui-datepicker-group { float:left; }
.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
.ui-datepicker-row-break { clear:both; width:100%; }
 
/* RTL support */
.ui-datepicker-rtl { direction: rtl; }
.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
.ui-datepicker-rtl .ui-datepicker-group { float:right; }
.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
 
/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
.ui-datepicker-cover {
display: none; /*sorry for IE5*/
display/**/: block; /*sorry for IE5*/
position: absolute; /*must have*/
z-index: -1; /*must have*/
filter: mask(); /*must have*/
top: -4px; /*must have*/
left: -4px; /*must have*/
width: 200px; /*must have*/
height: 200px; /*must have*/
}
/trunk/applications/saisie/squelettes/css/jquery_ui/jquery-ui-1.8.6.custom.css
New file
0,0 → 1,391
/*
* jQuery UI CSS Framework 1.8.6
*
* Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Theming/API
*/
 
/* Layout helpers
----------------------------------*/
.ui-helper-hidden { display: none; }
.ui-helper-hidden-accessible { position: absolute; left: -99999999px; }
.ui-helper-reset { margin: 0; padding: 0; border: 0; outline: 0; line-height: 1.3; text-decoration: none; font-size: 100%; list-style: none; }
.ui-helper-clearfix:after { content: "."; display: block; height: 0; clear: both; visibility: hidden; }
.ui-helper-clearfix { display: inline-block; }
/* required comment for clearfix to work in Opera \*/
* html .ui-helper-clearfix { height:1%; }
.ui-helper-clearfix { display:block; }
/* end clearfix */
.ui-helper-zfix { width: 100%; height: 100%; top: 0; left: 0; position: absolute; opacity: 0; filter:Alpha(Opacity=0); }
 
 
/* Interaction Cues
----------------------------------*/
.ui-state-disabled { cursor: default !important; }
 
 
/* Icons
----------------------------------*/
 
/* states and images */
.ui-icon { display: block; text-indent: -99999px; overflow: hidden; background-repeat: no-repeat; }
 
 
/* Misc visuals
----------------------------------*/
 
/* Overlays */
.ui-widget-overlay { position: absolute; top: 0; left: 0; width: 100%; height: 100%; }
 
 
/*
* jQuery UI CSS Framework 1.8.6
*
* Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Theming/API
*
* To view and modify this theme, visit http://jqueryui.com/themeroller/?ffDefault=Trebuchet%20MS,%20Tahoma,%20Verdana,%20Arial,%20sans-serif&fwDefault=bold&fsDefault=1.1em&cornerRadius=4px&bgColorHeader=f6a828&bgTextureHeader=12_gloss_wave.png&bgImgOpacityHeader=35&borderColorHeader=e78f08&fcHeader=ffffff&iconColorHeader=ffffff&bgColorContent=eeeeee&bgTextureContent=03_highlight_soft.png&bgImgOpacityContent=100&borderColorContent=dddddd&fcContent=333333&iconColorContent=222222&bgColorDefault=f6f6f6&bgTextureDefault=02_glass.png&bgImgOpacityDefault=100&borderColorDefault=cccccc&fcDefault=1c94c4&iconColorDefault=ef8c08&bgColorHover=fdf5ce&bgTextureHover=02_glass.png&bgImgOpacityHover=100&borderColorHover=fbcb09&fcHover=c77405&iconColorHover=ef8c08&bgColorActive=ffffff&bgTextureActive=02_glass.png&bgImgOpacityActive=65&borderColorActive=fbd850&fcActive=eb8f00&iconColorActive=ef8c08&bgColorHighlight=ffe45c&bgTextureHighlight=03_highlight_soft.png&bgImgOpacityHighlight=75&borderColorHighlight=fed22f&fcHighlight=363636&iconColorHighlight=228ef1&bgColorError=b81900&bgTextureError=08_diagonals_thick.png&bgImgOpacityError=18&borderColorError=cd0a0a&fcError=ffffff&iconColorError=ffd27a&bgColorOverlay=666666&bgTextureOverlay=08_diagonals_thick.png&bgImgOpacityOverlay=20&opacityOverlay=50&bgColorShadow=000000&bgTextureShadow=01_flat.png&bgImgOpacityShadow=10&opacityShadow=20&thicknessShadow=5px&offsetTopShadow=-5px&offsetLeftShadow=-5px&cornerRadiusShadow=5px
*/
 
 
/* Component containers
----------------------------------*/
.ui-widget { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1.1em; }
.ui-widget .ui-widget { font-size: 1em; }
.ui-widget input, .ui-widget select, .ui-widget textarea, .ui-widget button { font-family: Trebuchet MS, Tahoma, Verdana, Arial, sans-serif; font-size: 1em; }
.ui-widget-content { border: 1px solid #dddddd; background: #eeeeee url(images/ui-bg_highlight-soft_100_eeeeee_1x100.png) 50% top repeat-x; color: #333333; }
.ui-widget-content a { color: #333333; }
.ui-widget-header { border: 1px solid #e78f08; background: #f6a828 url(images/ui-bg_gloss-wave_35_f6a828_500x100.png) 50% 50% repeat-x; color: #ffffff; font-weight: bold; }
.ui-widget-header a { color: #ffffff; }
 
/* Interaction states
----------------------------------*/
.ui-state-default, .ui-widget-content .ui-state-default, .ui-widget-header .ui-state-default { border: 1px solid #cccccc; background: #f6f6f6 url(images/ui-bg_glass_100_f6f6f6_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #1c94c4; }
.ui-state-default a, .ui-state-default a:link, .ui-state-default a:visited { color: #1c94c4; text-decoration: none; }
.ui-state-hover, .ui-widget-content .ui-state-hover, .ui-widget-header .ui-state-hover, .ui-state-focus, .ui-widget-content .ui-state-focus, .ui-widget-header .ui-state-focus { border: 1px solid #fbcb09; background: #fdf5ce url(images/ui-bg_glass_100_fdf5ce_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #c77405; }
.ui-state-hover a, .ui-state-hover a:hover { color: #c77405; text-decoration: none; }
.ui-state-active, .ui-widget-content .ui-state-active, .ui-widget-header .ui-state-active { border: 1px solid #fbd850; background: #ffffff url(images/ui-bg_glass_65_ffffff_1x400.png) 50% 50% repeat-x; font-weight: bold; color: #eb8f00; }
.ui-state-active a, .ui-state-active a:link, .ui-state-active a:visited { color: #eb8f00; text-decoration: none; }
.ui-widget :active { outline: none; }
 
/* Interaction Cues
----------------------------------*/
.ui-state-highlight, .ui-widget-content .ui-state-highlight, .ui-widget-header .ui-state-highlight {border: 1px solid #fed22f; background: #ffe45c url(images/ui-bg_highlight-soft_75_ffe45c_1x100.png) 50% top repeat-x; color: #363636; }
.ui-state-highlight a, .ui-widget-content .ui-state-highlight a,.ui-widget-header .ui-state-highlight a { color: #363636; }
.ui-state-error, .ui-widget-content .ui-state-error, .ui-widget-header .ui-state-error {border: 1px solid #cd0a0a; background: #b81900 url(images/ui-bg_diagonals-thick_18_b81900_40x40.png) 50% 50% repeat; color: #ffffff; }
.ui-state-error a, .ui-widget-content .ui-state-error a, .ui-widget-header .ui-state-error a { color: #ffffff; }
.ui-state-error-text, .ui-widget-content .ui-state-error-text, .ui-widget-header .ui-state-error-text { color: #ffffff; }
.ui-priority-primary, .ui-widget-content .ui-priority-primary, .ui-widget-header .ui-priority-primary { font-weight: bold; }
.ui-priority-secondary, .ui-widget-content .ui-priority-secondary, .ui-widget-header .ui-priority-secondary { opacity: .7; filter:Alpha(Opacity=70); font-weight: normal; }
.ui-state-disabled, .ui-widget-content .ui-state-disabled, .ui-widget-header .ui-state-disabled { opacity: .35; filter:Alpha(Opacity=35); background-image: none; }
 
/* Icons
----------------------------------*/
 
/* states and images */
.ui-icon { width: 16px; height: 16px; background-image: url(images/ui-icons_222222_256x240.png); }
.ui-widget-content .ui-icon {background-image: url(images/ui-icons_222222_256x240.png); }
.ui-widget-header .ui-icon {background-image: url(images/ui-icons_ffffff_256x240.png); }
.ui-state-default .ui-icon { background-image: url(images/ui-icons_ef8c08_256x240.png); }
.ui-state-hover .ui-icon, .ui-state-focus .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); }
.ui-state-active .ui-icon {background-image: url(images/ui-icons_ef8c08_256x240.png); }
.ui-state-highlight .ui-icon {background-image: url(images/ui-icons_228ef1_256x240.png); }
.ui-state-error .ui-icon, .ui-state-error-text .ui-icon {background-image: url(images/ui-icons_ffd27a_256x240.png); }
 
/* positioning */
.ui-icon-carat-1-n { background-position: 0 0; }
.ui-icon-carat-1-ne { background-position: -16px 0; }
.ui-icon-carat-1-e { background-position: -32px 0; }
.ui-icon-carat-1-se { background-position: -48px 0; }
.ui-icon-carat-1-s { background-position: -64px 0; }
.ui-icon-carat-1-sw { background-position: -80px 0; }
.ui-icon-carat-1-w { background-position: -96px 0; }
.ui-icon-carat-1-nw { background-position: -112px 0; }
.ui-icon-carat-2-n-s { background-position: -128px 0; }
.ui-icon-carat-2-e-w { background-position: -144px 0; }
.ui-icon-triangle-1-n { background-position: 0 -16px; }
.ui-icon-triangle-1-ne { background-position: -16px -16px; }
.ui-icon-triangle-1-e { background-position: -32px -16px; }
.ui-icon-triangle-1-se { background-position: -48px -16px; }
.ui-icon-triangle-1-s { background-position: -64px -16px; }
.ui-icon-triangle-1-sw { background-position: -80px -16px; }
.ui-icon-triangle-1-w { background-position: -96px -16px; }
.ui-icon-triangle-1-nw { background-position: -112px -16px; }
.ui-icon-triangle-2-n-s { background-position: -128px -16px; }
.ui-icon-triangle-2-e-w { background-position: -144px -16px; }
.ui-icon-arrow-1-n { background-position: 0 -32px; }
.ui-icon-arrow-1-ne { background-position: -16px -32px; }
.ui-icon-arrow-1-e { background-position: -32px -32px; }
.ui-icon-arrow-1-se { background-position: -48px -32px; }
.ui-icon-arrow-1-s { background-position: -64px -32px; }
.ui-icon-arrow-1-sw { background-position: -80px -32px; }
.ui-icon-arrow-1-w { background-position: -96px -32px; }
.ui-icon-arrow-1-nw { background-position: -112px -32px; }
.ui-icon-arrow-2-n-s { background-position: -128px -32px; }
.ui-icon-arrow-2-ne-sw { background-position: -144px -32px; }
.ui-icon-arrow-2-e-w { background-position: -160px -32px; }
.ui-icon-arrow-2-se-nw { background-position: -176px -32px; }
.ui-icon-arrowstop-1-n { background-position: -192px -32px; }
.ui-icon-arrowstop-1-e { background-position: -208px -32px; }
.ui-icon-arrowstop-1-s { background-position: -224px -32px; }
.ui-icon-arrowstop-1-w { background-position: -240px -32px; }
.ui-icon-arrowthick-1-n { background-position: 0 -48px; }
.ui-icon-arrowthick-1-ne { background-position: -16px -48px; }
.ui-icon-arrowthick-1-e { background-position: -32px -48px; }
.ui-icon-arrowthick-1-se { background-position: -48px -48px; }
.ui-icon-arrowthick-1-s { background-position: -64px -48px; }
.ui-icon-arrowthick-1-sw { background-position: -80px -48px; }
.ui-icon-arrowthick-1-w { background-position: -96px -48px; }
.ui-icon-arrowthick-1-nw { background-position: -112px -48px; }
.ui-icon-arrowthick-2-n-s { background-position: -128px -48px; }
.ui-icon-arrowthick-2-ne-sw { background-position: -144px -48px; }
.ui-icon-arrowthick-2-e-w { background-position: -160px -48px; }
.ui-icon-arrowthick-2-se-nw { background-position: -176px -48px; }
.ui-icon-arrowthickstop-1-n { background-position: -192px -48px; }
.ui-icon-arrowthickstop-1-e { background-position: -208px -48px; }
.ui-icon-arrowthickstop-1-s { background-position: -224px -48px; }
.ui-icon-arrowthickstop-1-w { background-position: -240px -48px; }
.ui-icon-arrowreturnthick-1-w { background-position: 0 -64px; }
.ui-icon-arrowreturnthick-1-n { background-position: -16px -64px; }
.ui-icon-arrowreturnthick-1-e { background-position: -32px -64px; }
.ui-icon-arrowreturnthick-1-s { background-position: -48px -64px; }
.ui-icon-arrowreturn-1-w { background-position: -64px -64px; }
.ui-icon-arrowreturn-1-n { background-position: -80px -64px; }
.ui-icon-arrowreturn-1-e { background-position: -96px -64px; }
.ui-icon-arrowreturn-1-s { background-position: -112px -64px; }
.ui-icon-arrowrefresh-1-w { background-position: -128px -64px; }
.ui-icon-arrowrefresh-1-n { background-position: -144px -64px; }
.ui-icon-arrowrefresh-1-e { background-position: -160px -64px; }
.ui-icon-arrowrefresh-1-s { background-position: -176px -64px; }
.ui-icon-arrow-4 { background-position: 0 -80px; }
.ui-icon-arrow-4-diag { background-position: -16px -80px; }
.ui-icon-extlink { background-position: -32px -80px; }
.ui-icon-newwin { background-position: -48px -80px; }
.ui-icon-refresh { background-position: -64px -80px; }
.ui-icon-shuffle { background-position: -80px -80px; }
.ui-icon-transfer-e-w { background-position: -96px -80px; }
.ui-icon-transferthick-e-w { background-position: -112px -80px; }
.ui-icon-folder-collapsed { background-position: 0 -96px; }
.ui-icon-folder-open { background-position: -16px -96px; }
.ui-icon-document { background-position: -32px -96px; }
.ui-icon-document-b { background-position: -48px -96px; }
.ui-icon-note { background-position: -64px -96px; }
.ui-icon-mail-closed { background-position: -80px -96px; }
.ui-icon-mail-open { background-position: -96px -96px; }
.ui-icon-suitcase { background-position: -112px -96px; }
.ui-icon-comment { background-position: -128px -96px; }
.ui-icon-person { background-position: -144px -96px; }
.ui-icon-print { background-position: -160px -96px; }
.ui-icon-trash { background-position: -176px -96px; }
.ui-icon-locked { background-position: -192px -96px; }
.ui-icon-unlocked { background-position: -208px -96px; }
.ui-icon-bookmark { background-position: -224px -96px; }
.ui-icon-tag { background-position: -240px -96px; }
.ui-icon-home { background-position: 0 -112px; }
.ui-icon-flag { background-position: -16px -112px; }
.ui-icon-calendar { background-position: -32px -112px; }
.ui-icon-cart { background-position: -48px -112px; }
.ui-icon-pencil { background-position: -64px -112px; }
.ui-icon-clock { background-position: -80px -112px; }
.ui-icon-disk { background-position: -96px -112px; }
.ui-icon-calculator { background-position: -112px -112px; }
.ui-icon-zoomin { background-position: -128px -112px; }
.ui-icon-zoomout { background-position: -144px -112px; }
.ui-icon-search { background-position: -160px -112px; }
.ui-icon-wrench { background-position: -176px -112px; }
.ui-icon-gear { background-position: -192px -112px; }
.ui-icon-heart { background-position: -208px -112px; }
.ui-icon-star { background-position: -224px -112px; }
.ui-icon-link { background-position: -240px -112px; }
.ui-icon-cancel { background-position: 0 -128px; }
.ui-icon-plus { background-position: -16px -128px; }
.ui-icon-plusthick { background-position: -32px -128px; }
.ui-icon-minus { background-position: -48px -128px; }
.ui-icon-minusthick { background-position: -64px -128px; }
.ui-icon-close { background-position: -80px -128px; }
.ui-icon-closethick { background-position: -96px -128px; }
.ui-icon-key { background-position: -112px -128px; }
.ui-icon-lightbulb { background-position: -128px -128px; }
.ui-icon-scissors { background-position: -144px -128px; }
.ui-icon-clipboard { background-position: -160px -128px; }
.ui-icon-copy { background-position: -176px -128px; }
.ui-icon-contact { background-position: -192px -128px; }
.ui-icon-image { background-position: -208px -128px; }
.ui-icon-video { background-position: -224px -128px; }
.ui-icon-script { background-position: -240px -128px; }
.ui-icon-alert { background-position: 0 -144px; }
.ui-icon-info { background-position: -16px -144px; }
.ui-icon-notice { background-position: -32px -144px; }
.ui-icon-help { background-position: -48px -144px; }
.ui-icon-check { background-position: -64px -144px; }
.ui-icon-bullet { background-position: -80px -144px; }
.ui-icon-radio-off { background-position: -96px -144px; }
.ui-icon-radio-on { background-position: -112px -144px; }
.ui-icon-pin-w { background-position: -128px -144px; }
.ui-icon-pin-s { background-position: -144px -144px; }
.ui-icon-play { background-position: 0 -160px; }
.ui-icon-pause { background-position: -16px -160px; }
.ui-icon-seek-next { background-position: -32px -160px; }
.ui-icon-seek-prev { background-position: -48px -160px; }
.ui-icon-seek-end { background-position: -64px -160px; }
.ui-icon-seek-start { background-position: -80px -160px; }
/* ui-icon-seek-first is deprecated, use ui-icon-seek-start instead */
.ui-icon-seek-first { background-position: -80px -160px; }
.ui-icon-stop { background-position: -96px -160px; }
.ui-icon-eject { background-position: -112px -160px; }
.ui-icon-volume-off { background-position: -128px -160px; }
.ui-icon-volume-on { background-position: -144px -160px; }
.ui-icon-power { background-position: 0 -176px; }
.ui-icon-signal-diag { background-position: -16px -176px; }
.ui-icon-signal { background-position: -32px -176px; }
.ui-icon-battery-0 { background-position: -48px -176px; }
.ui-icon-battery-1 { background-position: -64px -176px; }
.ui-icon-battery-2 { background-position: -80px -176px; }
.ui-icon-battery-3 { background-position: -96px -176px; }
.ui-icon-circle-plus { background-position: 0 -192px; }
.ui-icon-circle-minus { background-position: -16px -192px; }
.ui-icon-circle-close { background-position: -32px -192px; }
.ui-icon-circle-triangle-e { background-position: -48px -192px; }
.ui-icon-circle-triangle-s { background-position: -64px -192px; }
.ui-icon-circle-triangle-w { background-position: -80px -192px; }
.ui-icon-circle-triangle-n { background-position: -96px -192px; }
.ui-icon-circle-arrow-e { background-position: -112px -192px; }
.ui-icon-circle-arrow-s { background-position: -128px -192px; }
.ui-icon-circle-arrow-w { background-position: -144px -192px; }
.ui-icon-circle-arrow-n { background-position: -160px -192px; }
.ui-icon-circle-zoomin { background-position: -176px -192px; }
.ui-icon-circle-zoomout { background-position: -192px -192px; }
.ui-icon-circle-check { background-position: -208px -192px; }
.ui-icon-circlesmall-plus { background-position: 0 -208px; }
.ui-icon-circlesmall-minus { background-position: -16px -208px; }
.ui-icon-circlesmall-close { background-position: -32px -208px; }
.ui-icon-squaresmall-plus { background-position: -48px -208px; }
.ui-icon-squaresmall-minus { background-position: -64px -208px; }
.ui-icon-squaresmall-close { background-position: -80px -208px; }
.ui-icon-grip-dotted-vertical { background-position: 0 -224px; }
.ui-icon-grip-dotted-horizontal { background-position: -16px -224px; }
.ui-icon-grip-solid-vertical { background-position: -32px -224px; }
.ui-icon-grip-solid-horizontal { background-position: -48px -224px; }
.ui-icon-gripsmall-diagonal-se { background-position: -64px -224px; }
.ui-icon-grip-diagonal-se { background-position: -80px -224px; }
 
 
/* Misc visuals
----------------------------------*/
 
/* Corner radius */
.ui-corner-tl { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; }
.ui-corner-tr { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; }
.ui-corner-bl { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
.ui-corner-br { -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
.ui-corner-top { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; }
.ui-corner-bottom { -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
.ui-corner-right { -moz-border-radius-topright: 4px; -webkit-border-top-right-radius: 4px; border-top-right-radius: 4px; -moz-border-radius-bottomright: 4px; -webkit-border-bottom-right-radius: 4px; border-bottom-right-radius: 4px; }
.ui-corner-left { -moz-border-radius-topleft: 4px; -webkit-border-top-left-radius: 4px; border-top-left-radius: 4px; -moz-border-radius-bottomleft: 4px; -webkit-border-bottom-left-radius: 4px; border-bottom-left-radius: 4px; }
.ui-corner-all { -moz-border-radius: 4px; -webkit-border-radius: 4px; border-radius: 4px; }
 
/* Overlays */
.ui-widget-overlay { background: #666666 url(images/ui-bg_diagonals-thick_20_666666_40x40.png) 50% 50% repeat; opacity: .50;filter:Alpha(Opacity=50); }
.ui-widget-shadow { margin: -5px 0 0 -5px; padding: 5px; background: #000000 url(images/ui-bg_flat_10_000000_40x100.png) 50% 50% repeat-x; opacity: .20;filter:Alpha(Opacity=20); -moz-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; }/*
* jQuery UI Resizable 1.8.6
*
* Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Resizable#theming
*/
.ui-resizable { position: relative;}
.ui-resizable-handle { position: absolute;font-size: 0.1px;z-index: 99999; display: block;}
.ui-resizable-disabled .ui-resizable-handle, .ui-resizable-autohide .ui-resizable-handle { display: none; }
.ui-resizable-n { cursor: n-resize; height: 7px; width: 100%; top: -5px; left: 0; }
.ui-resizable-s { cursor: s-resize; height: 7px; width: 100%; bottom: -5px; left: 0; }
.ui-resizable-e { cursor: e-resize; width: 7px; right: -5px; top: 0; height: 100%; }
.ui-resizable-w { cursor: w-resize; width: 7px; left: -5px; top: 0; height: 100%; }
.ui-resizable-se { cursor: se-resize; width: 12px; height: 12px; right: 1px; bottom: 1px; }
.ui-resizable-sw { cursor: sw-resize; width: 9px; height: 9px; left: -5px; bottom: -5px; }
.ui-resizable-nw { cursor: nw-resize; width: 9px; height: 9px; left: -5px; top: -5px; }
.ui-resizable-ne { cursor: ne-resize; width: 9px; height: 9px; right: -5px; top: -5px;}/*
* jQuery UI Selectable 1.8.6
*
* Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Selectable#theming
*/
.ui-selectable-helper { position: absolute; z-index: 100; border:1px dotted black; }
/*
* jQuery UI Datepicker 1.8.6
*
* Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Datepicker#theming
*/
.ui-datepicker { width: 17em; padding: .2em .2em 0; }
.ui-datepicker .ui-datepicker-header { position:relative; padding:.2em 0; }
.ui-datepicker .ui-datepicker-prev, .ui-datepicker .ui-datepicker-next { position:absolute; top: 2px; width: 1.8em; height: 1.8em; }
.ui-datepicker .ui-datepicker-prev-hover, .ui-datepicker .ui-datepicker-next-hover { top: 1px; }
.ui-datepicker .ui-datepicker-prev { left:2px; }
.ui-datepicker .ui-datepicker-next { right:2px; }
.ui-datepicker .ui-datepicker-prev-hover { left:1px; }
.ui-datepicker .ui-datepicker-next-hover { right:1px; }
.ui-datepicker .ui-datepicker-prev span, .ui-datepicker .ui-datepicker-next span { display: block; position: absolute; left: 50%; margin-left: -8px; top: 50%; margin-top: -8px; }
.ui-datepicker .ui-datepicker-title { margin: 0 2.3em; line-height: 1.8em; text-align: center; }
.ui-datepicker .ui-datepicker-title select { font-size:1em; margin:1px 0; }
.ui-datepicker select.ui-datepicker-month-year {width: 100%;}
.ui-datepicker select.ui-datepicker-month,
.ui-datepicker select.ui-datepicker-year { width: 49%;}
.ui-datepicker table {width: 100%; font-size: .9em; border-collapse: collapse; margin:0 0 .4em; }
.ui-datepicker th { padding: .7em .3em; text-align: center; font-weight: bold; border: 0; }
.ui-datepicker td { border: 0; padding: 1px; }
.ui-datepicker td span, .ui-datepicker td a { display: block; padding: .2em; text-align: right; text-decoration: none; }
.ui-datepicker .ui-datepicker-buttonpane { background-image: none; margin: .7em 0 0 0; padding:0 .2em; border-left: 0; border-right: 0; border-bottom: 0; }
.ui-datepicker .ui-datepicker-buttonpane button { float: right; margin: .5em .2em .4em; cursor: pointer; padding: .2em .6em .3em .6em; width:auto; overflow:visible; }
.ui-datepicker .ui-datepicker-buttonpane button.ui-datepicker-current { float:left; }
 
/* with multiple calendars */
.ui-datepicker.ui-datepicker-multi { width:auto; }
.ui-datepicker-multi .ui-datepicker-group { float:left; }
.ui-datepicker-multi .ui-datepicker-group table { width:95%; margin:0 auto .4em; }
.ui-datepicker-multi-2 .ui-datepicker-group { width:50%; }
.ui-datepicker-multi-3 .ui-datepicker-group { width:33.3%; }
.ui-datepicker-multi-4 .ui-datepicker-group { width:25%; }
.ui-datepicker-multi .ui-datepicker-group-last .ui-datepicker-header { border-left-width:0; }
.ui-datepicker-multi .ui-datepicker-group-middle .ui-datepicker-header { border-left-width:0; }
.ui-datepicker-multi .ui-datepicker-buttonpane { clear:left; }
.ui-datepicker-row-break { clear:both; width:100%; }
 
/* RTL support */
.ui-datepicker-rtl { direction: rtl; }
.ui-datepicker-rtl .ui-datepicker-prev { right: 2px; left: auto; }
.ui-datepicker-rtl .ui-datepicker-next { left: 2px; right: auto; }
.ui-datepicker-rtl .ui-datepicker-prev:hover { right: 1px; left: auto; }
.ui-datepicker-rtl .ui-datepicker-next:hover { left: 1px; right: auto; }
.ui-datepicker-rtl .ui-datepicker-buttonpane { clear:right; }
.ui-datepicker-rtl .ui-datepicker-buttonpane button { float: left; }
.ui-datepicker-rtl .ui-datepicker-buttonpane button.ui-datepicker-current { float:right; }
.ui-datepicker-rtl .ui-datepicker-group { float:right; }
.ui-datepicker-rtl .ui-datepicker-group-last .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
.ui-datepicker-rtl .ui-datepicker-group-middle .ui-datepicker-header { border-right-width:0; border-left-width:1px; }
 
/* IE6 IFRAME FIX (taken from datepicker 1.5.3 */
.ui-datepicker-cover {
display: none; /*sorry for IE5*/
display/**/: block; /*sorry for IE5*/
position: absolute; /*must have*/
z-index: -1; /*must have*/
filter: mask(); /*must have*/
top: -4px; /*must have*/
left: -4px; /*must have*/
width: 200px; /*must have*/
height: 200px; /*must have*/
}
/trunk/applications/saisie/squelettes/css/jquery_ui/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/applications/saisie/squelettes/css/jquery_ui/images/ui-bg_highlight-soft_75_ffe45c_1x100.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/applications/saisie/squelettes/css/jquery_ui/images/ui-icons_ffffff_256x240.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/applications/saisie/squelettes/css/jquery_ui/images/ui-icons_ffffff_256x240.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/applications/saisie/squelettes/css/jquery_ui/images/ui-bg_flat_10_000000_40x100.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/applications/saisie/squelettes/css/jquery_ui/images/ui-bg_flat_10_000000_40x100.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/applications/saisie/squelettes/css/jquery_ui/images/ui-bg_glass_100_fdf5ce_1x400.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/applications/saisie/squelettes/css/jquery_ui/images/ui-bg_glass_100_fdf5ce_1x400.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/applications/saisie/squelettes/css/jquery_ui/images/ui-bg_glass_65_ffffff_1x400.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/applications/saisie/squelettes/css/jquery_ui/images/ui-bg_glass_65_ffffff_1x400.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/applications/saisie/squelettes/css/jquery_ui/images/ui-bg_diagonals-thick_20_666666_40x40.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/applications/saisie/squelettes/css/jquery_ui/images/ui-bg_diagonals-thick_20_666666_40x40.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/applications/saisie/squelettes/css/jquery_ui/images/ui-icons_228ef1_256x240.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/applications/saisie/squelettes/css/jquery_ui/images/ui-icons_228ef1_256x240.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/applications/saisie/squelettes/css/jquery_ui/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/applications/saisie/squelettes/css/jquery_ui/images/ui-bg_highlight-soft_100_eeeeee_1x100.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/applications/saisie/squelettes/css/jquery_ui/images/ui-icons_ffd27a_256x240.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/applications/saisie/squelettes/css/jquery_ui/images/ui-icons_ffd27a_256x240.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/applications/saisie/squelettes/css/jquery_ui/images/ui-bg_glass_100_f6f6f6_1x400.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/applications/saisie/squelettes/css/jquery_ui/images/ui-bg_glass_100_f6f6f6_1x400.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/applications/saisie/squelettes/css/jquery_ui/images/ui-icons_222222_256x240.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/applications/saisie/squelettes/css/jquery_ui/images/ui-icons_222222_256x240.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/applications/saisie/squelettes/css/jquery_ui/images/ui-bg_gloss-wave_35_f6a828_500x100.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/applications/saisie/squelettes/css/jquery_ui/images/ui-bg_gloss-wave_35_f6a828_500x100.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/applications/saisie/squelettes/css/jquery_ui/images/ui-icons_ef8c08_256x240.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/applications/saisie/squelettes/css/jquery_ui/images/ui-icons_ef8c08_256x240.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/applications/saisie/squelettes/css/jquery_ui/images/ui-bg_diagonals-thick_18_b81900_40x40.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/applications/saisie/squelettes/css/jquery_ui/images/ui-bg_diagonals-thick_18_b81900_40x40.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/applications/saisie/squelettes/css/saisie.css
New file
0,0 → 1,740
/* =========================== Balises ============================
 
 
 
/* =========================== Style général ============================ */
 
#wrapper #container {
max-width:1650px;
}
 
.gauche {
float:left;
}
 
.droite {
float:right;
}
 
.information {
 
padding-left:40px;
border:1px solid #FF420F;
max-width:600px;
height: 50px;
text-align: center;
font-size: 1.3em;
color: #000000;
background: url("../images/attention.png") no-repeat scroll 1em 0.5em transparent;
background-color:#EF9C86;
}
 
.information div {
margin-top: 15px
}
 
span.erreur {
color: red;
}
 
input.erreur {
border: 1px solid red;
}
 
#center {
width: 720px;
}
 
 
/* =========================== Titres ============================ */
 
.titre_saisie {
padding-bottom: 10px;
}
 
.etape {
color: #9AC343;
padding-bottom:20px;
}
 
 
/* =========================== Menu et navigation ============================ */
 
#saisie_menu ul li {
background: none;
padding-top: 5px;
}
 
#saisie_menu ul li.item_menu_station {
background: url("../images/station.png") no-repeat scroll 0px 0.5em transparent;
}
 
.item_menu_station > a {
padding: 5px;
}
 
#saisie_menu ul li.item_menu_espece {
background: url("../images/espece.png") no-repeat scroll 0px 0.5em transparent;
}
 
.item_menu_espece > a {
padding: 5px
}
 
#saisie_menu ul li.station_ajout {
background: url("../images/ajout.png") no-repeat scroll -9px transparent;
}
 
li.station_en_cours {
padding-top: 10px;
}
 
li.station_en_cours > a {
color: #FFFFFF;
font-weight: bold;
border: solid 1px #FFFFFF;
background-color: #BF3600;
-moz-border-radius: 0.9em;
-webkit-border-radius: 0.9em;
border-radius: 0.9em;
}
 
#retour_au_site {
padding-top: 30px;
}
 
#saisie_menu ul li.espece_ajout {
background: url("../images/ajout.png") no-repeat scroll -9px transparent;
}
 
li.espece_en_cours > a {
color: #FFFFFF;
font-weight: bold;
border: solid 1px #FFFFFF;
background-color: #9AC343;
-moz-border-radius: 0.9em;
-webkit-border-radius: 0.9em;
border-radius: 0.9em;
}
 
ul.liste_annees_observations {
list-style-type: none;
}
 
.liste_annees_observations li {
display: inline;
list-style: none;
background: none;
}
 
#annee_en_cours {
font-size: 1.6em;
color: #9AC343;
}
 
#retour_au_site ul li {
background: url("../images/retour.png") no-repeat scroll 0 30% transparent
}
 
.export_observation {
background: url("../images/csv.png") no-repeat scroll 2px 4px transparent;
padding-left: 17px;
padding-top: 3px;
padding-right: 6px;
}
 
/* =========================== Formulaires d'inscription et d'identification ============================ */
 
#conteneur_formulaire_identification, #conteneur_formulaire_inscription {
 
width:650px;
border: 1px solid grey;
margin-top: 10px;
padding: 10px;
text-align: left !important;
-moz-border-radius: 0.9em;
-webkit-border-radius: 0.9em;
border-radius: 0.9em;
}
 
#conteneur_formulaire_identification form {
text-align: left !important;
}
 
#conteneur_formulaire_identification input {
text-align: left !important;
width: 300px;
}
 
#conteneur_formulaire_inscription input {
text-align: left !important;
width: 300px;
}
 
.message_identification {
font-weight: bold;
padding-top: 5px;
color: #435F06;
font-size: 1.5em;
}
 
 
/* =========================== Formulaires de l'application ============================ */
 
#saisie_station {
width: 700px;
}
 
.element_formulaire label {
font-weight: bold;
width:150px;
}
 
.element_formulaire_en_ligne {
padding-right: 10px;
}
 
.element_formulaire, #conteneur_liens_lat_lon, #conteneur_form_liens_lat_lon {
padding-bottom : 15px;
}
 
.conteneur_carte {
height: 400px;
width: 725px;
}
 
.gros_bouton_validation {
height: 50px;
width: 200px;
font-size: 20px;
margin-top: 10x;
margin-right: 0px;
}
 
#localiser_lat_lon {
background: url("../images/localiser.png") no-repeat scroll 2px transparent;
}
 
#saisie_liste_evenements {
text-align: center;
width:715px;
}
 
#saisie_modif_evenements tr, #saisie_liste_evenements tr {
/*height: 40px;*/
}
 
.icone_s {
height: 30px;
width: 30px;
}
 
.formulaire_en_ligne {
display: inline;
}
 
.valider_formulaire {
cursor: pointer;
background-color: transparent;
background-image: url("../images/valider_s.png");
border: none;
color: rgba(0,0,0,0);
background-position: center;
background-repeat: no-repeat;
padding-top: 2px;
padding-bottom: 3px;
}
 
.valider_formulaire:hover, .lien_modifier:hover {
background-color: #CFCFCF;
}
 
#form_saisie_espece {
margin-right: auto;
margin-left: auto;
}
 
.formulaire_informations_espece_mini {
text-align: center;
height:50px;
width: 500px;
border: solid 1px #999999;
background-color: #CFCFCF;
padding: 10px;
margin-bottom: 10px;
-moz-border-radius: 0.9em;
-webkit-border-radius: 0.9em;
border-radius: 0.9em;
}
 
.formulaire_informations_espece_mini:hover {
background-color: #C0DF7D;
}
 
.formulaire_informations_espece_mini img {
margin-top:-5px;
}
 
#fiche_station {
position: relative;
}
 
#form_afficher_modification {
margin-top: 0px !important;
margin-bottom: 0px !important;
position: absolute;
right: 10px;
bottom: 0;
}
 
.formulaire_suppression_station {
margin-top: 10px;
margin-left: 2px;
}
 
.formulaire_suppression_individu {
margin-left: 2px;
margin-top: 10px;
}
 
/* =========================== Fiches ============================== */
 
.element_fiche {
padding-bottom : 5px;
}
 
.intitule_fiche {
 
}
 
.valeur_fiche {
font-weight: bold;
}
 
.titre_section_fiche {
padding-bottom : 10px;
padding-top : 10px;
}
 
.titre_fiche {
 
}
 
hr.separation_section {
margin-top: 25px;
}
 
.informations_espece img {
margin-top:-35px;
padding: 15px;
}
 
.annee_observation {
padding-left: 10px;
}
 
.observations_individu {
display: table-cell;
height: 400px;
width: 250px;
}
 
.observations_individu {
color: #000000;
}
 
#fiche_individu .observations_individu li {
background: none;
padding-left: 1px;
list-style-type: none;
margin-left: 0px;
padding-left: 0px;
}
 
.observations_individu li div {
-moz-border-radius: 0.9em;
-webkit-border-radius: 0.9em;
border-radius: 0.9em;
}
 
#center .observations_individu h4 {
padding: 5px;
color: black;
}
 
.ajouter_observation .date_observation {
background: url("../images/ajout.png") no-repeat center center transparent;
width: 20px;
}
 
.ajouter_observation .absence_observation {
background: url("../images/absence.png") no-repeat center center transparent;
width: 20px;
}
 
.ajouter_observation.hide,
.ajouter_observation .conteneur_supprimer_observation,
.ajouter_observation .absence_observation.hide {
display: none;
}
 
.conteneur_supprimer_observation {
position: absolute;
right: 0px;
top: 0px;
width: 20px;
height: 100%;
display: flex;
align-items: center;
justify-content: center;
}
 
.supprimer_observation {
background: url("../images/suppression.png") no-repeat center center transparent;
width: 20px;
display: none;
}
 
.date_observation_individu:not(.ajouter_observation):hover .supprimer_observation {
display: block;
}
 
.conteneur_date_observation {
padding: 0;
position: relative;
vertical-align: top;
}
 
.date_observation_individu {
height: 100%;
width: 100%;
display: flex;
align-items: center;
justify-content: center;
flex: 1;
padding-top: 5px;
padding-bottom: 5px;
position: relative;
}
 
.date_observation:not(.icone) {
padding-left: 20px;
padding-right: 20px;
}
 
 
.date_observation_individu .ui-datepicker {
position: absolute;
top: 100%;
left: 0%;
z-index: 1;
}
 
.icone:hover {
filter: grayscale(100%);
}
 
.calendrier {
 
}
 
#fiche_individu {
background-color: #F4F2EB;
padding : 10px;
margin-top: 31px;
position: relative;
}
 
#fiche_individu .commentaire_individu {
font-style: italic;
white-space: pre;
}
 
textarea[name="individu_commentaire"] {
width: 550px;
min-height: 160px;
border-radius: 5px;
height: 75px;
border: 1px solid #ACACAC;
}
 
/* =========================== Tableaux d'évenements ============================ */
 
#saisie_liste_evenements, #saisie_modif_evenements {
text-align: center;
}
 
#saisie_liste_evenements .information_individu, #saisie_modif_evenements.information_individu {
text-align: left;
}
 
tr:nth-child(odd) {
background-color: #CFCFCF ;
}
 
tr:nth-child(1) {
color: #FFFFFF;
}
 
tr:nth-child(1), tr:nth-child(2) {
background-color: #FFFFFF ;
}
 
div.evenement {
text-align: center;
}
 
.stade_evenement {
text-align: center;
}
 
 
/* =========================== Styles des différents stades ============================ */
 
.stade_feuillaison {
background-color: #ACC700;
}
 
.stade_floraison {
background-color: #B549B9;
}
 
.stade_fructification {
background-color: #FF7F00;
}
 
.stade_senescence {
background-color: #BF3600;
}
 
.stade_1ere_apparition {
background-color: #B549B9;
}
 
/* ============ Style pour l'administration ============================== */
 
#barre_admin {
-moz-border-radius: 10px 10px 10px 10px;
background-color: #F4F2EB;
border: 1px solid #D1C6A8;
height: 60px;
margin-bottom: 10px;
padding: 5px;
}
 
#form_changement_identite {
width: 330px;
display: inline;
}
 
.export_observation_admin {
background: url("../images/csv.png") no-repeat scroll 28px 0 transparent;
padding-left: 46px;
padding-top: 3px;
}
 
.gestion_espece_admin {
background: url("../images/espece.png") no-repeat scroll 28px 0 transparent;
padding-left: 46px;
padding-top: 3px;
}
 
.saisie_liste_especes_admin {
width: 100%;
}
 
.saisie_liste_especes_admin tr:nth-child(1) {
color: #494949;
background-color: #CFCFCF;
}
 
.saisie_liste_especes_admin .espece_inactive {
color: #494949;
background-color: #FF7D73;
}
 
#form_modification_espece_admin label {
width: 150px;
padding-right: 50px;
}
 
#form_ajout_espece_admin label.label_checkbox {
font-weight: normal;
}
 
#saisie_espece_admin .illustration_espece {
max-height: 180px;
max-width: 250px;
border: 1px solid grey;
}
 
.lien_annulation {
float: left;
font-size: 1.2em;
margin-left: 439px;
padding: 16px;
}
 
/* ============ Styles créés par des effets javascripts automatiques ===== */
 
.chargement {
background: url("../images/chargement.gif") no-repeat center center #DCDCDC;
}
 
.erreur_valeur {
background-color: red;
}
 
.conteneur_type {
float: right;
align: center;
width: 230px;
}
 
h4.lien_pliage {
text-decoration: underline;
display: inline;
}
 
.pliage {
padding: 5px;
}
 
h4.lien_pliage:hover {
cursor: pointer;
}
 
.element_cliquable {
cursor: pointer;
}
 
.element_cliquable:hover {
background : #9AC343;
}
 
.element_clique {
background: #9AC343;
}
 
#saisie_espece ul.liste_onglets {
margin: 0;
padding: 0;
float: left;
list-style: none;
height: 32px; /*--Set height of tabs--*/
border-bottom: 1px solid #999;
border-left: 1px solid #999;
border-top-left-radius: 10px;
border-top-right-radius: 10px;
}
 
#saisie_espece ul.liste_onglets li {
-moz-border-radius-topleft: 0px;
-moz-border-radius-topright: 0px;
float: left;
margin: 0;
padding: 0;
height: 31px; /*--Subtract 1px from the height of the unordered list--*/
line-height: 31px; /*--Vertically aligns the text within the tab--*/
border: 1px solid #999;
border-left: none;
margin-bottom: -1px; /*--Pull the list item down 1px--*/
overflow: hidden;
position: relative;
background: #e0e0e0;
}
 
#saisie_espece ul.liste_onglets li a {
text-decoration: none;
color: #000;
display: block;
font-size: 1.2em;
padding: 0 20px;
border: 1px solid #fff; /*--Gives the bevel look with a 1px white border inside the list item--*/
outline: none;
}
 
#saisie_espece ul.liste_onglets li a:hover {
background: #ccc;
}
 
html ul.liste_onglets li.active, html ul.tabs li.active a:hover { /*--Makes sure that the active tab does not listen to the hover properties--*/
background: #fff;
border-bottom: 1px solid #fff; /*--Makes the active tab look like it's connected with its content--*/
}
 
#saisie_espece #onglets {
margin-left: 85px;
margin-right: auto;
position: relative;
bottom: -1px;
z-index: 1;
clear:left;
}
 
#saisie_espece .conteneur_onglets {
border: 1px solid #999;
overflow: hidden;
float: left;
background: #fff;
position: relative;
width: 100%;
display: flex;
justify-content: center;
margin-left: 10px;
}
 
#saisie_espece .contenu_onglet {
padding: 20px;
font-size: 1.2em;
}
 
 
.autocompletion {
position:relative;
}
 
.conteneur_suggestions, .conteneur_suggestions_utilisateur {
position: absolute;
left: 107px;
width: 180px;
background-color: #212427;
border: 2px solid #000;
color: #fff;
z-index: 300;
-moz-border-radius: 7px;
-webkit-border-radius: 7px;
border-radius: 7px;
}
 
.conteneur_suggestions_utilisateur {
left: 188px;
}
 
.liste_suggestions {
margin: 0px;
padding: 0px;
}
 
.liste_suggestions li {
margin: 0px 0px 3px 0px;
padding: 3px;
cursor: pointer;
}
 
.liste_suggestions li {
list-style-type: none;
margin-left: 5px;
margin-right: 5px;
}
 
 
.liste_suggestions .element_selectionne {
background-color: #659CD8;
}
 
/* ============ Styles crées spécifiquement pour compenser les faiblesses de certains navigateurs ===== */
 
.clearer {
clear:both;
}
/trunk/applications/saisie/squelettes/formulaires/identification.tpl.html
New file
0,0 → 1,20
<div id="saisie_form_identification">
 
<div class="information">
<div>
L'accès à l'application de saisie nécessite d'être identifié
</div>
</div>
<div id="conteneur_formulaire_identification">
<h3 class="message_identification"> Identifiez-vous : </h3>
<?= $formulaire_identification ?>
</div>
<?php if(isset($formulaire_inscription) && trim($formulaire_inscription) != '') { ?>
<div id="conteneur_formulaire_inscription">
<h3 class="message_identification"> Vous n'avez pas encore de compte sur observation des saisons ? <br /> Inscrivez vous ici : </h3>
<?= $formulaire_inscription ?>
</div>
<?php } ?>
 
</div>
/trunk/applications/saisie/squelettes/formulaires/espece_ajout_administration.tpl.html
New file
0,0 → 1,51
<!-- ODS_SAISIE - DEBUT MODIFICATION ESPECE ADMIN -->
<div id="saisie_espece_admin">
<h2 class="etape"> Ajout d'une espece </h2>
<br/>
<form method="post" action="<?= Liens::getUrlValidationFormulaireAjoutEspeceAdmin() ?>" id="form_ajout_espece_admin">
<div class="element_formulaire">
<label for="nom_scientifique">Type d'espèce</label>
<select id="ce_type" name="ce_type">
<?php foreach($types_especes as $id => $type) : ?>
<option id="ce_type_<?= $id; ?>" value="<?= $id; ?>" ><?= $type; ?></option>
<?php endforeach; ?>
</select>
</div>
<div class="element_formulaire">
<label for="nom_scientifique">Nom scientifique</label><br />
<input type="text" id="nom_scientifique" name="nom_scientifique" value="<?= $espece['nom_scientifique'] ?>" />
<?= isset($erreurs['nom_scientifique']) ? '<span class="erreur"> '.$erreurs['nom_scientifique'].' </span>' : '' ?>
</div>
<div class="element_formulaire">
<label for="nom_vernaculaire">Nom vernaculaire</label><br />
<input type="text" id="nom_vernaculaire" name="nom_vernaculaire" value="<?= $espece['nom_vernaculaire'] ?>" />
<?= isset($erreurs['nom_vernaculaire']) ? '<span class="erreur"> '.$erreurs['nom_vernaculaire'].' </span>' : '' ?>
</div>
<div class="element_formulaire">
<label for="description">Description</label><br />
<textarea cols="50" rows="6" id="description" name="description"><?= $espece['description'] ?></textarea>
<?= isset($erreurs['description']) ? '<span class="erreur"> '.$erreurs['description'].' </span>' : '' ?>
</div>
<div class="element_formulaire">
<label>Evènements</label><br />
<php $saut = 0; ?>
<?php foreach($evenements as $id => $evenement) : ?>
<label class="label_checkbox" for="ce_evenement_<?= $id; ?>"><?= $evenement; ?></label>
<input type="checkbox" id="ce_evenement_<?= $id; ?>" name="ce_evenements[]" value="<?= $id; ?>" />
<?php if($saut != 0) { echo '<br />'; $saut = 0; } else { $saut = 1; } ?>
<?php endforeach; ?>
<?= isset($erreurs['ce_evenements']) ? '<span class="erreur"> '.$erreurs['ce_evenements'].' </span>' : '' ?>
</div>
<div class="element_formulaire">
<label for="espece_active">Espèce active</label>
<input type="checkbox" id="espece_active" name="espece_active" <?= $espece['active'] == 1 ? 'checked="checked"' : '' ?> />
</div>
<div class="element_formulaire">
<label for="espece_ecole">Espèce école</label>
<input type="checkbox" id="espece_ecole" name="espece_ecole" <?= $espece['ecole'] == 1 ? 'checked="checked"' : '' ?> />
</div>
<a class="lien_annulation" href="<?= Liens::getUrlAdministrationEspeces() ?>">Annuler</a>
<input class="droite gros_bouton_validation" type="submit" value="Valider" />
</form>
</div>
<!-- ODS_SAISIE - FIN MODIFICATION ESPECE ADMIN -->
/trunk/applications/saisie/squelettes/formulaires/evenement_modification.tpl.html
New file
0,0 → 1,62
<!-- ODS_SAISIE - DEBUT MODIFICATION EVENEMENTS -->
<div>
<h2> Observations pour l'année <?= $annee ?></h2>
<form id="form_modif_observation" name="form_modif_observation" method="post" action="<?= Liens::getUrlValidationFormulaireModificationObservation($id_station,$id_espece, $id_individu_a_modifier_observation, $annee) ?>" >
<table id="saisie_modif_evenements">
<tr>
<th></th>
<?php foreach($evenements as $evenement) : ?>
<th class="stade_<?=$evenement['abreviation'] ?>" colspan="<?=count($evenement['stades']) ?>">
<div class="evenement"><?= $evenement['nom'] ?></div>
</th>
<?php endforeach; ?>
<th></th>
</tr>
 
<tr>
<th> stades </th>
<?php foreach($evenements as $evenement) : ?>
<?php foreach($evenement['stades'] as $stade) : ?>
<th class="stade_evenement">
<?= $stade ?>
</th>
<?php endforeach; ?>
<?php endforeach; ?>
</tr>
 
<?php foreach ($individus as $individu) : ?>
<tr class="modification_observations_individu" id="modification_observations_individu_<?= $individu['id_individu'] ?>">
<td>
<a title="cliquez pour accéder à la fiche de cet individu" href="<?= Liens::getUrlConsultationFicheIndividu($id_station, $id_espece, $individu['id_individu']); ?>"><?= $individu['nom'] ?></a>
</td>
<?php foreach($evenements as $nom_evenement => $evenement) : ?>
<?php foreach($evenement['stades'] as $id_stade => $stade) : ?>
<td>
<div class="calendrier">
<?php if ($individu['id_individu'] == $id_individu_a_modifier_observation) { ?>
<?php $valeur_stade_individu = Observation::renvoyerObservationStadePourIndividu($individu, $annee, $nom_evenement, $stade); ?>
<input type="text" maxlength="10" size="10" name="observation_<?= $id_stade ?>" id="observation_<?= $id_stade ?>" value="<?= $valeur_stade_individu ?>" />
<?php } else { ?>
<?php if (isset($individu['observations'][$annee][$nom_evenement][$stade])) { ?>
<?= $individu['observations'][$annee][$nom_evenement][$stade]; ?>
<?php } else { ?>
-
<?php } ?>
<?php }?>
</div>
</td>
<?php endforeach; ?>
<?php endforeach; ?>
<td>
<?php if ($individu['id_individu'] == $id_individu_a_modifier_observation) { ?>
<input type="submit" class="valider_formulaire icone_s" value="OK" title="valider" />
<?php } ?>
</td>
</tr>
<?php endforeach; ?>
</table>
<input type="hidden" id="id_individu" name="id_individu" value="<?= $id_individu_a_modifier_observation ?>" />
<input type="hidden" id="annee_en_cours" name="annee_en_cours" value="<?= $annee ?>" />
</form>
</div>
<!-- ODS_SAISIE - FIN MODIFICATION EVENEMENTS -->
/trunk/applications/saisie/squelettes/formulaires/espece_ajout_image_administration.tpl.html
New file
0,0 → 1,25
<!-- ODS_SAISIE - DEBUT MODIFICATION ESPECE ADMIN -->
<div id="saisie_espece_admin">
<h2 class="etape"> Ajout ou modification d'une image d'espece </h2>
<img title="<?= Liens::getCreditImageEspece($espece['nom_scientifique']) ?>" class="illustration_espece droite" alt="image de l'espece" class="droite" src="<?= Liens::getUrlImageEspece($espece['nom_scientifique'], 'M') ?>" />
<br/>
<form enctype="multipart/form-data" method="post" action="<?= Liens::getUrlValidationFormulaireAjoutImageEspeceAdmin() ?>" id="form_ajout_image_espece_admin">
<div class="element_formulaire">
<label for="image_espece">Choisissez une image (format .jpg, max <?= round(Config::get('max_taille_fichiers')/(1024*1024)) ?> mo)</label><br />
<input type="file" id="image_espece" name="image_espece" />
<?= isset($erreurs['image_espece']) ? '<span class="erreur"> '.$erreurs['image_espece'].' </span>' : '' ?>
</div>
<div class="element_formulaire">
<label for="credits">Crédits</label><br />
<textarea cols="40" rows="6" id="credits" name="credits"><?= $espece['credits'] ?></textarea><br />
<?= isset($erreurs['credits']) ? '<span class="erreur"> '.$erreurs['credits'].' </span>' : '' ?>
</div>
<input type="hidden" name="MAX_FILE_SIZE" value="<?= Config::get('max_taille_fichiers') ?>">
<input type="hidden" name="nom_fichier" value="<?= $espece['nom_sci_normalise'] ?>">
<input type="hidden" name="id_espece" value="<?= $espece['id_espece']; ?>">
<a class="lien_annulation" href="<?= Liens::getUrlFormulaireModificationEspeceAdmin($espece['id_espece']) ?>">Annuler</a>
<input class="droite gros_bouton_validation" type="submit" value="Valider" />
</form>
</div>
<!-- ODS_SAISIE - FIN MODIFICATION ESPECE ADMIN -->
/trunk/applications/saisie/squelettes/formulaires/espece_modification_administration.tpl.html
New file
0,0 → 1,33
<!-- ODS_SAISIE - DEBUT MODIFICATION ESPECE ADMIN -->
<div id="saisie_espece_admin">
<h2 class="etape"> Modification de l'espece <?= $espece['nom_scientifique'] ?> </h2>
<a href="<?= Liens::getUrlFormulaireAjoutImageEspeceAdmin($espece['id_espece']);?>" title="Cliquez pour ajouter ou modifier l'image associée à l'espèce" >
<img title="<?= Liens::getCreditImageEspece($espece['nom_scientifique']); ?>" class="illustration_espece droite" alt="image de l'espece" class="droite" src="<?= Liens::getUrlImageEspece($espece['nom_scientifique'], 'M') ?>" />
</a>
<br/>
<form method="post" action="<?= Liens::getUrlValidationFormulaireModificationEspeceAdmin($espece['id_espece'])."#espece_".$espece['id_espece']; ?>" id="form_modification_espece_admin">
<div class="element_formulaire">
<label for="nom_scientifique">Nom scientifique</label><br />
<input type="text" id="nom_scientifique" name="nom_scientifique" value="<?= $espece['nom_scientifique'] ?>" />
<?= isset($erreurs['nom_scientifique']) ? '<span class="erreur"> '.$erreurs['nom_scientifique'].' </span>' : '' ?>
</div>
<div class="element_formulaire">
<label for="nom_vernaculaire">Nom vernaculaire</label><br />
<input type="text" id="nom_vernaculaire" name="nom_vernaculaire" value="<?= $espece['nom_vernaculaire'] ?>" />
<?= isset($erreurs['nom_vernaculaire']) ? '<span class="erreur"> '.$erreurs['nom_vernaculaire'].' </span>' : '' ?>
</div>
<div class="element_formulaire">
<label for="description">Description</label><br />
<textarea cols="50" rows="6" id="description" name="description"><?= $espece['description'] ?></textarea>
<?= isset($erreurs['description']) ? '<span class="erreur"> '.$erreurs['description'].' </span>' : '' ?>
</div>
<div class="element_formulaire">
<label for="espece_active">Espèce active</label>
<input type="checkbox" id="espece_active" name="espece_active" <?= $espece['active'] == 1 ? 'checked="checked"' : '' ?> />
</div>
<input type="hidden" name="id_espece" id="id_espece" value="<?= $espece['id_espece'] ?>" />
<a class="lien_annulation" href="<?= Liens::getUrlAdministrationEspeces() ?>">Annuler</a>
<input class="droite gros_bouton_validation" type="submit" value="Valider" />
</form>
</div>
<!-- ODS_SAISIE - FIN MODIFICATION ESPECE ADMIN -->
/trunk/applications/saisie/squelettes/formulaires/station_saisie.tpl.html
New file
0,0 → 1,9
<!-- ODS_SAISIE - DEBUT SAISIE STATION -->
<div id="saisie_station">
<h2 class="etape"> Etape 1 : placez votre station </h2>
<form class="form_saisie" action="<?= Liens::getUrlValidationFormulaireSaisieStation(); ?>" method="post" id="form_saisie_station">
<?= $corps_formulaire_saisie_modif ?>
<input class="droite gros_bouton_validation" type="submit" value="Valider" />
</form>
</div>
<!-- ODS_SAISIE - FIN SAISIE STATION -->
/trunk/applications/saisie/squelettes/formulaires/individu_modification.tpl.html
New file
0,0 → 1,45
<!-- ODS_SAISIE - DEBUT MODIFICATION INDIVIDU -->
<div id="modification_individu">
<h2 class="etape"> Modification de l'individu <?= $infos_individu['nom']; ?> </h2>
<br/>
<p class="cadre_information"> Vous pourrez modifier ces informations plus tard si vous le désirez.<br />
Pour cela, cliquez sur le nom de votre individu dans la fiche de saisie des observations, puis sur le bouton modifier.
<br /><br />
Le champ commentaire sert à indiquer toute situation particulière de votre individu (si celui-ci a été taillé, s'il est exposé à l'éclairage public, etc...).
Veillez également à indiquer l'année de votre commentaire, même s'il s'agit de l'année en cours.
</p>
<form method="post" action="<?= Liens::getUrlValidationFormulaireModificationIndividu($id_station, $id_espece, $infos_individu['id_individu']) ?>" id="form_modification_individu">
<span class="element_formulaire">
<label for="individu_nom">Nom de l'individu :</label>
<input <?= isset($erreurs['individu_nom']) ? 'class="erreur"' : '' ?> type="text" name="individu_nom" id="individu_nom" value="<?= $infos_individu['nom']; ?>" />
</span>
<br />
<?= isset($erreurs['individu_nom']) ? '<span class="erreur"> '.$erreurs['individu_nom'].' </span>' : '' ?>
<br />
 
<div class="element_formulaire">
<label for="individu_commentaire">Commentaire :</label>
<div>
<textarea placeholder="Optionnel, 100 caractères max, modifiable à tout moment." maxlength="1000"
<?= isset($erreurs['individu_commentaire']) ? 'class="erreur"' : '' ?>
name="individu_commentaire" id="individu_commentaire" ><?= $infos_individu['commentaire']; ?></textarea>
</div>
</div>
<br />
<?= isset($erreurs['individu_commentaire']) ? '<span class="erreur"> '.$erreurs['individu_commentaire'].' </span>' : '' ?>
<br />
 
<h3 class="titre_section_fiche"> Espèce </h3>
<div class="informations_espece">
<img title="<?= Liens::getCreditImageEspece($espece['nom_scientifique']) ?>" alt="image de l'espece" class="droite" height="120" src="<?= Liens::getUrlImageEspece($informations_espece['nom_scientifique'],'M') ?>" />
<span class="intitule_fiche"> <?= $informations_espece['nom_vernaculaire'] ?> </span>
<span class="valeur_fiche"> (<?= $informations_espece['nom_scientifique'] ?>) </span>
</div>
<p class="intitule_fiche description_espece" > <?= $informations_espece['description'] ?></p>
<input type="hidden" id="id_espece" name="id_espece" value="<?= $id_espece; ?>" />
<input type="hidden" id="id_station" name="id_station" value="<?= $id_station; ?>" />
<input type="hidden" id="id_individu" name="id_individu" value="<?= $infos_individu['id_individu']; ?>" />
<input class="droite gros_bouton_validation" type="submit" value="Valider" />
</form>
</div>
<!-- ODS_SAISIE - FIN MODIFICATION INDIVIDU -->
/trunk/applications/saisie/squelettes/formulaires/espece_saisie.tpl.html
New file
0,0 → 1,39
<!-- ODS_SAISIE - DEBUT SAISIE ESPECE -->
<div id="saisie_espece">
<h2 class="etape"> Etape 2 : choisissez une nouvelle espèce </h2>
<form action="<?= Liens::getUrlValidationFormulaireSaisieEspece($id_station); ?>" method="post" id="form_saisie_espece">
<div class="element_formulaire">
<div id="onglets">
<?php foreach($types as $id_type => $type) : ?>
<ul class="liste_onglets">
<li><a href="#espece_type<?= $id_type ?>"><?= ucfirst($type['nom']) ?></a></li>
</ul>
<?php endforeach ?>
</div>
 
<!-- force le retour à la ligne après les onglets -->
<div class="clearer"></div>
 
<div class="conteneur_onglets">
<?php foreach($types as $id_type => $type) : ?>
<div id="espece_type<?= $id_type ?>" class="contenu_onglet">
<h3 class="titre_type" > <?= ucfirst($type['nom']) ?> </h3>
<?php foreach($type['especes'] as $espece) : ?>
<div class="formulaire_informations_espece_mini">
<input type="radio" name="id_espece" id="espece_<?= $espece['id_espece'] ?>" value="<?= $espece['id_espece'] ?>" />
<img title="<?= Liens::getCreditImageEspece($espece['nom_scientifique']) ?>" class="illustration_espece droite" alt="image de l'espece" class="droite" src="<?= Liens::getUrlImageEspece($espece['nom_scientifique']) ?>" />
<span class="valeur_fiche"> <?= ucfirst($espece['nom_vernaculaire']) ?> </span><br />
<span class="intitule_fiche"> <em><?= $espece['nom_scientifique'] ?></em> </span>
</div>
<?php endforeach ?>
</div>
<?php endforeach ?>
</div>
</div>
 
 
<input type="hidden" id="station" name="station" value="<?= $id_station; ?>"/>
<input class="droite gros_bouton_validation" type="submit" value="Suivant" />
</form>
</div>
<!-- ODS_SAISIE - FIN SAISIE ESPECE -->
/trunk/applications/saisie/squelettes/formulaires/station_saisie_modification.tpl.html
New file
0,0 → 1,69
<!-- ODS_SAISIE - DEBUT CONTENU FORMULAIRE SAISIE MODIF STATION -->
<div>
<p class="cadre_information">Pour localiser votre station, renseignez la commune ou la ville où vos observations ont été effectuées.</p><br />
</div>
 
<div class="element_formulaire">
<label for="station_nom">Nom de votre station :</label>
<input <?= isset($erreurs['station_nom']) ? 'class="erreur"' : '' ?> type="text" name="station_nom" id="station_nom" value="<?= $station_nom ?>" />
<br />
<?= isset($erreurs['station_nom']) ? '<span class="erreur"> '.$erreurs['station_nom'].' </span>' : '' ?>
</div>
<div class="element_formulaire rafraichissable">
<span class="element_formulaire element_formulaire_en_ligne">
<label for="station_commune">Commune / ville :</label>
<input <?= isset($erreurs['station_commune']) ? 'class="erreur"' : '' ?> type="text" name="station_commune" id="station_commune" value="<?= $station_commune ?>" />
</span>
<br />
<?= isset($erreurs['station_commune']) ? '<span class="erreur"> '.$erreurs['station_commune'].' </span><br />' : '' ?>
</div>
 
<div class="element_formulaire">
<span class="element_formulaire element_formulaire_en_ligne rafraichissable">
<label for="station_code_insee">N&deg; de département ou code insee :</label>
<input <?= isset($erreurs['station_code_insee']) ? 'class="erreur"' : '' ?> type="text" id="station_code_insee" name="station_code_insee" value="<?= $station_code_insee; ?>" />
</span>
 
<span class="element_formulaire element_formulaire_en_ligne">
<label for="station_milieu">Milieu :</label>
<select name="station_milieu" id="station_milieu">
<?php foreach($milieux as $id_milieu => $milieu) : ?>
<option id="station_milieu_<?= $id_milieu; ?>" value="<?= $id_milieu; ?>" > <?= $milieu ?> </option>
<?php endforeach ?>
</select>
</span>
 
<br />
<?= isset($erreurs['station_code_insee']) ? '<span class="erreur"> '.$erreurs['station_code_insee'].' </span>' : '' ?>
</div>
<div class="element_formulaire rafraichissable">
<label for="station_alt">Altitude :</label>
<input <?= isset($erreurs['station_alt']) ? 'class="erreur"' : '' ?> size="5" type="text" name="station_alt" id="station_alt" value="<?= $station_alt ?>" /> m <br />
<?= isset($erreurs['station_alt']) ? '<span class="erreur"> '.$erreurs['station_alt'].' </span>' : '' ?>
</div>
<div id="conteneur_form_liens_lat_lon" class="rafraichissable">
<div class="element_formulaire">
<label for="station_lat">Latitude :</label>
<input <?= isset($erreurs['station_lat']) ? 'class="erreur"' : '' ?> type="text" name="station_lat" id="station_lat" value="<?= $station_lat ?>" />
<label for="station_lon">Longitude :</label>
<input <?= isset($erreurs['station_lon']) ? 'class="erreur"' : '' ?> type="text" name="station_lon" id="station_lon" value="<?= $station_lon ?>" />
<input type="button" name="localiser_lat_lon" id="localiser_lat_lon" value="" />
<br />
<?= isset($erreurs['station_lon']) ? '<span class="erreur"> '.$erreurs['station_lon'].' </span>' : '' ?>
</div>
</div>
<div>
<p class="cadre_information">Vous devez maintenant localiser précisemment votre station d'observation sur la carte. Pour cela, zoomez sur la carte et déplacez la flèche orange avec la souris.</p><br />
</div>
<div class="element_formulaire conteneur_carte">
<div id="map_canvas" style="width:100%; height:100%"></div>
</div>
<!-- ODS_SAISIE - FIN CONTENU FORMULAIRE SAISIE MODIF STATION -->
/trunk/applications/saisie/squelettes/formulaires/station_modification.tpl.html
New file
0,0 → 1,11
<!-- ODS_SAISIE - DEBUT MODIFICATION STATION -->
<div id="saisie_station">
 
<h2 class="etape"> Modification de la station <?= $station_nom ?> </h2>
<form class="form_saisie" action="<?= Liens::getUrlValidationFormulaireModificationStation($id_station); ?>" method="post" id="form_modif_station">
<?= $corps_formulaire_saisie_modif ?>
<input type="hidden" id="id_station" name="id_station" value="<?= $id_station; ?>" />
<input class="droite gros_bouton_validation" type="submit" value="Valider" />
</form>
</div>
<!-- ODS_SAISIE - FIN MODIFICATION STATION -->
/trunk/applications/saisie/squelettes/formulaires/individu_saisie.tpl.html
New file
0,0 → 1,45
<!-- ODS_SAISIE - DEBUT SAISIE INDIVIDU -->
<div id="saisie_individu">
<h2 class="etape"> Etape 3 : Saisie d'un nouvel individu </h2>
<br/>
<p class="cadre_information"> Vous pourrez modifier ces informations plus tard si vous le désirez.<br />
Pour cela, cliquez sur le nom de votre individu dans la fiche de saisie des observations, puis sur le bouton modifier.
<br /><br />
Le champ commentaire sert à indiquer toute situation particulière de votre individu (si celui-ci a été taillé, s'il est exposé à l'éclairage public, etc...).
Veillez également à indiquer l'année de votre commentaire, même s'il s'agit de l'année en cours.
</p>
<form method="post" action="<?= Liens::getUrlValidationFormulaireSaisieIndividu($id_station,$id_espece) ?>" id="form_saisie_individu">
<span class="element_formulaire">
<label for="individu_nom">Nom de l'individu :</label>
<input <?= isset($erreurs['individu_nom']) ? 'class="erreur"' : '' ?> type="text" name="individu_nom" id="individu_nom" />
</span>
<br />
<?= isset($erreurs['individu_nom']) ? '<span class="erreur"> '.$erreurs['individu_nom'].' </span>' : '' ?>
<br />
 
<div class="element_formulaire">
<label for="individu_commentaire">Commentaire :</label>
<div>
<textarea placeholder="Optionnel, 1000 caractères max, modifiable à tout moment" maxlength="1000"
<?= isset($erreurs['individu_commentaire']) ? 'class="erreur"' : '' ?>
name="individu_commentaire" id="individu_commentaire" ></textarea>
</div>
</div>
<br />
<?= isset($erreurs['individu_commentaire']) ? '<span class="erreur"> '.$erreurs['individu_commentaire'].' </span>' : '' ?>
<br />
 
<h3 class="titre_section_fiche"> Espèce </h3>
<div class="informations_espece">
<img title="<?= Liens::getCreditImageEspece($informations_espece['nom_scientifique']) ?>" alt="image de l'espece" class="droite" height="120px" src="<?= Liens::getUrlImageEspece($informations_espece['nom_scientifique'],'M') ?>" />
<span class="intitule_fiche"> <?= $informations_espece['nom_vernaculaire'] ?> </span>
<span class="valeur_fiche"> (<?= $informations_espece['nom_scientifique'] ?>) </span>
</div>
<div><a class="lien_voir_fiche_espece" href="<?= Liens::getUrlFicheEspece($informations_espece['nom_scientifique']); ?>"> Voir la fiche de cette espece </a></div>
<p class="intitule_fiche description_espece" > <?= $informations_espece['description'] ?></p>
<input type="hidden" id="espece" name="espece" value="<?= $id_espece; ?>" />
<input type="hidden" id="station" name="station" value="<?= $id_station; ?>" />
<input class="droite gros_bouton_validation" type="submit" value="Valider" />
</form>
</div>
<!-- ODS_SAISIE - FIN SAISIE INDIVIDU -->
/trunk/applications/saisie/squelettes/js/saisie.js
New file
0,0 → 1,820
function getUrlBaseJrest() {
return urlBaseJrest;
}
 
/**
************************************************************************************************
************************************************************************************************
 
Fonction permettant de transformer les élements de la classe pliage en accordéon
 
************************************************************************************************
************************************************************************************************
**/
function initialiserElementsPliables() {
 
$('.pliage h4').addClass('lien_pliage');
 
$('.pliage ul').hide();
$('.pliage > ul:first-child').hide();
 
$('.1er_element_date ul').show();
$('.1er_element_date > ul:first-child').show();
 
$('.lien_pliage').bind('click', function() {
 
$(this).nextAll('ul').slideToggle();
return false;
});
}
 
$('.pliage').ready(function() {
initialiserElementsPliables();
});
 
 
/**
************************************************************************************************
************************************************************************************************
 
Fonctions de gestion des onglets du formulaire de saisie d'espèce
 
************************************************************************************************
************************************************************************************************
**/
function initialiserOnglets() {
$(".contenu_onglet").hide();
$("ul.liste_onglets li:first").addClass("active").show();
$(".contenu_onglet:first").show();
 
$("ul.liste_onglets li").click(function() {
 
$("ul.liste_onglets li").removeClass("active");
$(this).addClass("active");
$(".contenu_onglet").hide();
 
var activeTab = $(this).find("a").attr("href");
$(activeTab).fadeIn();
return false;
});
}
 
$('.contenu_onglet').ready(function() {
initialiserOnglets();
});
 
function agrandirZoneClicBoutonsRadios() {
 
$('.formulaire_informations_espece_mini').addClass("element_cliquable");
 
$('#form_saisie_espece').children('input[type="submit"]').hide();
$('.formulaire_informations_espece_mini').children('input[type="radio"]').hide();
$('.titre_type').hide();
 
$('.formulaire_informations_espece_mini').bind('click',function() {
$(this).children('input[type="radio"]').attr('checked','checked');
$('.formulaire_informations_espece_mini').removeClass('element_clique');
$(this).addClass('element_clique');
 
$('#form_saisie_espece').submit();
});
}
 
$('#form_saisie_espece').ready(function() {
agrandirZoneClicBoutonsRadios();
});
 
 
 
 
/**
************************************************************************************************
************************************************************************************************
 
Fonctions permettant de transformer les cases du tableau d'évenements en mini formulaire
 
************************************************************************************************
************************************************************************************************
**/
 
function initialiserLignesCliquables() {
 
$('.conteneur_element_modifier').hide();
 
$(".date_observation_individu").live("click", function(e) {
e.preventDefault();
 
var est_absence_observation = $(e.target).parents('[data-absence-observation="1"]').length > 0;
if($(e.target).hasClass('conteneur_supprimer_observation') ||
$(e.target).hasClass('supprimer_observation') ||
est_absence_observation) {
return;
}
 
$('.element_clique').removeClass('element_clique');
if($(this).hasClass('element_clique')) {
fermerDatePicker();
return false;
} else {
$(this).addClass('element_clique');
afficherSaisieObservation($(this));
return false;
}
});
 
$(".date_observation_individu .conteneur_supprimer_observation").live("click", function(e) {
e.preventDefault();
if(window.confirm('Êtes-vous sûr.e de vouloir supprimer cette observation ?')) {
// les obs ne sont jamais vraiment supprimées
// mais seulement remplacées par des dates au format 00/00/yyyy
envoyerRequeteAjaxSaisieObservation('', $(this).parent('.date_observation_individu'));
}
 
return false;
});
 
$(".date_observation_individu .absence_observation").live("click", function(e) {
e.preventDefault();
var avertissement_absence_evenement = 'Attention ! Vous êtes sur le point de signaler que ce stade n\'a pas eu lieu dans l\'année. '+"\n"+
'C\'est-à-dire que vous êtes certain.e de ne pas l\'avoir raté. '+"\n"+
'Êtes-vous sûr.e ?';
if(window.confirm(avertissement_absence_evenement)) {
$(this).parent('.date_observation_individu').data('absence-observation', '1');
var date_absence_evenement = '';
var dateEnCours = new Date();
if(getAnneeEnCoursDeConsultation() == dateEnCours.getFullYear()) {
date_absence_evenement = dateEnCours.getDate()+'/'+dateEnCours.getMonth()+'/'+dateEnCours.getFullYear();
} else {
date_absence_evenement = '01/01/'+dateEnCours.getFullYear();
}
envoyerRequeteAjaxSaisieObservation(date_absence_evenement, $(this).parent('.date_observation_individu'));
}
 
return false;
});
 
// pour fermer le datepicker sur esc
$(document).keyup(function(e) {
if (e.keyCode === 27) {
$('.element_clique').removeClass('element_clique');
fermerDatePicker(); // esc
}
});
}
 
function afficherSaisieObservation($obs) {
 
fermerDatePicker();
 
var dateMin = getDateMinCalendrier();
var dateMax = getDateMaxCalendrier();
 
var dateCouranteStr = $obs.data('date-observation');
var dateCourante = new Date();
if(!!dateCouranteStr && dateCouranteStr != '' && dateCouranteStr != '+') {
var jour = parseInt(dateCouranteStr.substring(0,2));
var mois = parseInt(dateCouranteStr.substring(3,5));
var annee = parseInt(dateCouranteStr.substring(6,10));
dateCourante = new Date(annee, mois-1, jour);
}
 
$obs.find('.datepicker_container').datepicker({
disabled: true,
constrainInput: true,
altFormat: 'dd/mm/yyyy',
minDate: dateMin,
maxDate: dateMax,
changeMonth: true,
defaultDate: dateCourante,
onSelect: function(dateText, inst) {
validerSaisieObservation(dateText, $obs)
},
beforeShowDay: function(date) {
var dates_a_exclure = getDatesSaisiesPourStadeEtIndividu($obs.data('id-individu'), $obs.data('id-stade-observation'));
var string = jQuery.datepicker.formatDate('dd/mm/yy', date);
return [dates_a_exclure.indexOf(string) == -1]
}
});
 
$obs.datepicker("show");
$('.ui-datepicker').attr("title", "Appuyez sur échap pour annuler l'édition");
}
 
function validerSaisieObservation(dateStr, $obs) {
 
if(estUneDateValide(dateStr)) {
envoyerRequeteAjaxSaisieObservation(dateStr, $obs);
}
}
 
function formaterDonneesObservationPourEnvoi(dateStr, $obs) {
 
if(dateStr == null ) {
return false ;
}
 
var anneeEnCours = getAnneeEnCoursDeConsultation();
if(jQuery.trim(dateStr) == '') {
dateStr = '00/00/'+anneeEnCours;
}
 
donnees_obs = {
"id_individu": $obs.data('id-individu'),
"id_evenement": $obs.data('id-stade-observation'),
"date_evenement": dateStr,
"annee_en_cours": anneeEnCours
};
 
if(!!$obs.data('absence-observation')) {
donnees_obs.absence_observation = $obs.data('absence-observation');
}
 
if(!!$obs.data('id-observation')) {
donnees_obs.id_observation = $obs.data('id-observation');
}
 
return donnees_obs;
}
 
 
/** Fonctions d'envoi et de récupération des élements du formulaire ajax **/
function envoyerRequeteAjaxSaisieObservation(dateStr, $obs) {
 
var est_obs_existante = !!$obs.data('id-observation');
var donnees_obs = formaterDonneesObservationPourEnvoi(dateStr, $obs);
 
url_page_courante = document.URL;
url_page_courante = url_page_courante.replace('module=Individu','module=Observation');
url_page_courante = url_page_courante.replace('action=afficherListeIndividu','action=validerFormulaireModificationObservationAjax');
url_ajax = url_page_courante.replace('action=validerFormulaireSaisieIndividu','action=validerFormulaireModificationObservationAjax');
 
$conteneurAjout = null;
if(!est_obs_existante) {
var id_conteneur_ajout = 'ajouter_observation_individu_'+donnees_obs['id_individu']+'_evenement_'+donnees_obs['id_evenement'];
var $conteneurAjout = $('#'+id_conteneur_ajout).clone();
}
 
if(absenceStadePourIndividuEtAnneeEstSignalee($obs.data('id-individu'), $obs.data('id-stade'))) {
$obs.find('.date-observation').text('Absent');
return;
}
 
var donnees_obs = formaterDonneesObservationPourEnvoi(dateStr, $obs);
donnees_obs['id_participant'] = 3;
$.post(url_ajax, donnees_obs, function(obj_retour) {
 
if(!!obj_retour.data.erreurs) {
var message = 'Une ou plusieurs erreurs se sont produites : '+"\n";
for (var key in obj_retour.data.erreurs) {
if (obj_retour.data.erreurs.hasOwnProperty(key))
message += '- '+obj_retour.data.erreurs[key]+"\n";
}
window.alert(message);
return;
}
 
if(obj_retour.reponse === 'OK') {
 
// les obs ne sont jamais vraiment supprimées
// mais seulement remplacées par des dates au format 00/00/yyyy
if(estUneDateSuppressionObs(dateStr)) {
// si l'on a supprimé le signalement de l'absence d'un stade, alors on peut de nouveau saisir des
// observations pour ce stade (le signalement de l'absence d'un stade pour une année est une observation)
if(estUneAbsenceObservation($obs)) {
afficherOuCacherConteneurAjout($obs.data('id-individu'), $obs.data('id-stade-observation'), true);
afficherOuCacherBoutonSignalerAbsenceObservation($obs.data('id-individu'), $obs.data('id-stade-observation'), true);
}
 
$obs.remove();
delete $obs;
 
// s'il l'on vient de supprimer la dernière obs d'une évènement pour un individu on peut également à nouveau
// saisir des observations pour celui-ci
if(getDatesSaisiesPourStadeEtIndividu($obs.data('id-individu'), $obs.data('id-stade-observation')).length == 0) {
afficherOuCacherBoutonSignalerAbsenceObservation($obs.data('id-individu'), $obs.data('id-stade-observation'), true);
}
 
return;
}
 
if(!!obj_retour.data.id_observation) {
donnees_obs['id_observation'] = obj_retour.data.id_observation;
}
 
// sl'on vient de signaler que la stade n'a pas du tout eu lieu dans l'année
if(estUneAbsenceObservation($obs)) {
// alors on affiche une observation spéciale qui indique que le stade est absent
// et qui bloque la saisie d'autres observations de ce stade pour cet individu et cette année
afficherAbsenceObservationPourIndividuEtAnnee($obs, $conteneurAjout, donnees_obs);
} else {
afficherObservation(dateStr, $obs, $conteneurAjout, donnees_obs, est_obs_existante);
// à partir du moment où l'on a au moins une observation pour un stade et un individu donné
// on ne peut plus signaler que l'évènement n'a pas eu lieu cette année
afficherOuCacherBoutonSignalerAbsenceObservation($obs.data('id-individu'), $obs.data('id-stade-observation'), false);
}
 
$('.element_clique').removeClass('element_clique');
fermerDatePicker();
}
});
}
 
function afficherObservation(dateStr, $obs, $conteneurAjout, donnees_obs, est_obs_existante) {
$obs.find('.date_observation').text(dateStr);
$obs.data('date-observation', dateStr);
 
if(!est_obs_existante) {
$obs.removeClass('ajouter_observation');
$obs.attr('title', 'Cliquez pour modifier la date de cette observation')
$obs.data('id-observation', donnees_obs['id_observation']);
 
var id_conteneur_observation = 'individu_'+donnees_obs['id_individu']+'_evenement_'+donnees_obs['id_evenement']+'_observation_'+donnees_obs['id_observation'];
$obs.attr('id', id_conteneur_observation);
 
$obs.after($conteneurAjout);
}
}
 
function afficherAbsenceObservationPourIndividuEtAnnee($obs, $conteneurAjout, donnees_obs) {
afficherObservation('Absent', $obs, $conteneurAjout, donnees_obs, false);
$obs.attr('title', 'Vous avez indiqué que ce stade n\'a pas été observé pour cette année');
$obs.data('absence-observation', '1');
$obs.attr('data-absence-observation', '1');
// on cache le conteneur d'ajout car une fois l'absence d'un stade signalée pour une année
// et un individu, il est illogique de vouloir signaler des observations de ce stade
afficherOuCacherConteneurAjout(donnees_obs['id_individu'], donnees_obs['id_evenement'], false);
}
 
function afficherOuCacherConteneurAjout(id_individu, id_evenement, afficher) {
var $conteneurAjout = $('#ajouter_observation_individu_'+id_individu+'_evenement_'+id_evenement);
$conteneurAjout.toggleClass('hide', !afficher);
}
 
function afficherOuCacherBoutonSignalerAbsenceObservation(id_individu, id_evenement, afficher) {
var $conteneurSignalementAbsenceObs = $('#ajouter_observation_individu_'+id_individu+'_evenement_'+id_evenement+' .absence_observation');
console.log($conteneurSignalementAbsenceObs);
$conteneurSignalementAbsenceObs.toggleClass('hide', !afficher);
}
 
function estUneAbsenceObservation($obs) {
return $obs.data('absence-observation') == 1;
}
 
function estUneDateSuppressionObs(dateStr) {
var date_vide_pattern = /^00\/00\/\d{4}$/;
return dateStr == '' || date_vide_pattern.test(dateStr);
}
 
function fermerDatePicker() {
if($(".hasDatepicker").length == 0) {
return;
}
 
$(".hasDatepicker").each(function() {
$(this).datepicker("destroy");
$(this).removeClass(".hasDatepicker").removeAttr('id');
});
}
 
function obtenirAttributsData(el) {
return [].filter.call(el.attributes, function(at) { return /^data-/.test(at.name); });
}
 
// vérifie qu'une date est au format d/m/y
// merci stacky https://stackoverflow.com/questions/5812220/how-to-validate-a-date
function estUneDateValide(s) {
var bits = s.split('/');
var d = new Date(bits[2], bits[1] - 1, bits[0]);
return d && (d.getMonth() + 1) == bits[1];
}
 
function absenceStadePourIndividuEtAnneeEstSignalee(id_individu, id_stade) {
var selecteur_data = '[data-id-individu="'+id_individu+'"]'+
'[data-id-stade-observation="'+id_stade+'"]'+
'[data-absence-observation="1"]';
 
return $('.date_observation_individu'+selecteur_data).length >= 1;
}
 
function getDatesSaisiesPourStadeEtIndividu(id_individu, id_stade) {
var selecteur_data = '[data-id-individu="'+id_individu+'"]'+
'[data-id-stade-observation="'+id_stade+'"]';
 
return $('.date_observation_individu'+selecteur_data).map(function() {
return $(this).data("date-observation");
}).get();
}
 
function getAnneeEnCoursDeConsultation() {
 
anneeEnCours = jQuery.trim($("#annee_en_cours").html());
 
if(typeof(anneeEnCours)=='undefined'){
dateCourante = new Date();
anneeEnCours = dateCourante.getFullYear();
}
 
return anneeEnCours;
}
 
function getDateMinCalendrier() {
anneeEnCours = getAnneeEnCoursDeConsultation();
dateMin = '01/01/'+anneeEnCours;
 
return dateMin;
}
 
function getDateMaxCalendrier() {
 
anneeEnCours = getAnneeEnCoursDeConsultation();
 
dateMax = '31/12/'+anneeEnCours;
 
dateCourante = new Date();
 
if(anneeEnCours == dateCourante.getFullYear()) {
dateMax = dateCourante.getDate()+'/'+(dateCourante.getMonth()+ 1)+'/'+anneeEnCours;
}
 
return dateMax;
}
 
$('#saisie_liste_evenements').ready(function() {
initialiserLignesCliquables();
});
 
 
 
 
/**
************************************************************************************************
************************************************************************************************
 
Fonctions concernant la carte permettant de pointer d'afficher l'emplacement des stations
 
************************************************************************************************
************************************************************************************************
**/
var map;
var marker;
var liste_localite_en_cours;
var indice_commune_en_cours;
var liste_auto_completion_a_le_focus;
var timerRequeteAutocompletion;
var timerAffichageAutocompletion;
 
 
function cacherElementsRafraichissables() {
$('.rafraichissable input').attr('disabled', 'disabled');
$('.rafraichissable input[type="text"]').addClass("chargement");
}
 
function montrerElementsRafraichissables() {
$('.rafraichissable input').removeAttr('disabled');
$('.chargement').removeClass("chargement");
}
 
function ajouterAutoCompletionCommune() {
 
$('input#station_commune').after('<div class="conteneur_suggestions"></div>');
$('input#station_commune').parent().addClass('autocompletion');
$('input#station_commune').attr('autocomplete','off');
$('.conteneur_suggestions').hide();
rendreListeAutoCompletionInteractive('input#station_commune');
}
 
function ajouterListenerFormulaireSaisieLatLon() {
 
$('input#localiser_lat_lon').click(function() {
verifierEtLocaliserCoordonnees();
});
}
 
function carteEstEnSaisie() {
return ($('#conteneur_form_liens_lat_lon').length > 0);
}
 
function verifierEtLocaliserCoordonnees() {
 
lat ;
lon;
 
if(carteEstEnSaisie()) {
lat = $('#station_lat').val();
lon = $('#station_lon').val();
 
obtenirInformationsPourCoordonnees(lat, lon);
} else {
var lat = jQuery.trim($('#station_lat').html());
var lon = jQuery.trim($('#station_lon').html());
}
 
if(jQuery.trim(lat) == '' || jQuery.trim(lon) == '') {
return;
}
 
if(!isNaN(lat) && lat.length > 0 && !isNaN(lon) && lon.length > 0) {
 
} else {
window.alert("coordonnées invalides");
}
 
var positionMarker = new google.maps.LatLng(lat, lon);
 
marker.setPosition(positionMarker);
map.setCenter(positionMarker);
map.setZoom(12);
}
 
function obtenirInformationsPourCoordonnees(lat, lon) {
 
lat = jQuery.trim(lat);
lon = jQuery.trim(lon);
 
if(isNaN(lat) || lat.length <= 0 || isNaN(lon) || lon.length <= 0) {
return;
}
 
cacherElementsRafraichissables();
 
$.get(urlBaseJrest+'OdsCommune/informationsPourCoordonnees/?lat='+lat+'&lon='+lon, function(data) {
 
infos_localites = jQuery.parseJSON(data);
$('#station_alt').val(infos_localites.alt);
 
if(infos_localites.commune != null && infos_localites.commune != '') {
$('#station_commune').val(infos_localites.commune);
$('#station_code_insee').val(infos_localites.code_insee);
}
 
montrerElementsRafraichissables();
 
});
 
}
 
function obtenirInformationsPourCommune(nom_commune) {
 
if(jQuery.trim(nom_commune) == '') {
$('.conteneur_suggestions').hide();
return;
}
 
$.get(urlBaseJrest+'OdsCommune/informationsPourCommune/?commune='+nom_commune, function(data) {
 
infos_localites = jQuery.parseJSON(data);
afficherListeAutoCompletion(infos_localites);
});
}
 
function afficherListeAutoCompletion(tableau_localites) {
 
liste_localite_en_cours = tableau_localites;
 
html_liste_localite = '<ul class="liste_suggestions">';
 
for(i = 0; i< tableau_localites.length; i++) {
html_liste_localite += '<li id="commune_'+i+'" class="element_auto_completion_commune">'+tableau_localites[i]['commune']+' ('+tableau_localites[i]['dpt']+')</li>';
}
 
html_liste_localite += '</ul>';
 
$('.conteneur_suggestions').html(html_liste_localite);
 
$('.element_auto_completion_commune').hover(function() {
indice = $(this).attr('id').split('_')[1];
mettreEnSurbrillanceCommune(indice);
});
 
$('.element_auto_completion_commune').click(function() {
indice = $(this).attr('id').split('_')[1];
selectionnerCommune(indice);
});
 
if(tableau_localites.length > 0) {
$('.conteneur_suggestions').show();
 
mettreEnSurbrillanceCommune(0);
}
}
 
function mettreEnSurbrillanceCommune(indice) {
 
if(indice_commune_en_cours != null) {
$('#commune_'+indice_commune_en_cours).removeClass('element_selectionne');
}
$('#commune_'+indice).addClass('element_selectionne');
indice_commune_en_cours = indice;
 
reprogrammerTimerPourCacherListeAutoCompletion();
}
 
function rendreListeAutoCompletionInteractive(selecteur) {
 
$(selecteur).keyup(function(event) {
if(event.which == 8 || (event.which >= 48 && event.which <= 90)) {
 
reprogrammerTimerPourCacherListeAutoCompletion();
reprogrammerTimerPourLancerRequeteCommune();
}
});
 
$(selecteur).keydown(function(event) {
 
reprogrammerTimerPourCacherListeAutoCompletion();
 
// entree
if(event.which==13){
selectionnerCommune(indice_commune_en_cours);
event.preventDefault();
}
 
// haut
if(event.which == 38){
if(indice_commune_en_cours > 0) {
mettreEnSurbrillanceCommune(indice_commune_en_cours - 1);
}
}
 
// bas
if(event.which == 40){
if(indice_commune_en_cours < liste_localite_en_cours.length - 1) {
mettreEnSurbrillanceCommune(indice_commune_en_cours + 1);
}
}
});
 
$('.conteneur_suggestions').blur(function() {
$('.conteneur_suggestions').hide();
});
}
 
function reprogrammerTimerPourCacherListeAutoCompletion() {
 
if(timerAffichageAutocompletion != null) {
window.clearTimeout(timerAffichageAutocompletion);
}
 
timerAffichageAutocompletion = window.setTimeout(function() {
$('.conteneur_suggestions').hide();
}, 2000);
}
 
function reprogrammerTimerPourLancerRequeteCommune() {
 
if(timerRequeteAutocompletion != null) {
window.clearTimeout(timerRequeteAutocompletion);
}
 
timerRequeteAutocompletion = window.setTimeout(function() {
obtenirInformationsPourCommune($('input#station_commune').val());
}, 350);
}
 
function selectionnerCommune(indice) {
 
infos_commune = liste_localite_en_cours[indice];
 
$('input#station_commune').val(infos_commune['commune']);
$('input#station_lat').val(infos_commune['lat']);
$('input#station_lon').val(infos_commune['lon']);
$('input#station_code_insee').val(infos_commune['code_insee']);
 
verifierEtLocaliserCoordonnees();
 
$('.conteneur_suggestions').hide();
}
 
function mettreAJourValeursFormulaire(latlon) {
 
latlon = latlon.toString().split(',');
 
lat = latlon[0].replace('(', '');
lon = latlon[1].replace(')', '');
 
$('#station_lat').val(latlon[0].replace('(', ''));
$('#station_lon').val(latlon[1].replace(')', ''));
 
obtenirInformationsPourCoordonnees(lat, lon);
}
 
function initialiserCarte() {
 
if($('#map_canvas').length == 0) {
return;
}
 
var latlng = new google.maps.LatLng(47.0504, 2.2347);
var myOptions = {
zoom: 6,
center: latlng,
mapTypeId: google.maps.MapTypeId.HYBRID
};
 
map = new google.maps.Map(document.getElementById("map_canvas"),
myOptions);
 
marker = new google.maps.Marker({
position: latlng,
title:""
});
 
if (carteEstEnSaisie()) {
 
marker.setDraggable(true);
 
google.maps.event.addListener(marker, 'dragend', function(event) {
mettreAJourValeursFormulaire(marker.getPosition());
});
$('#conteneur_form_liens_lat_lon').ready(function() {
verifierEtLocaliserCoordonnees();
ajouterListenerFormulaireSaisieLatLon();
ajouterAutoCompletionCommune();
});
} else {
marker.setDraggable(false);
$('#conteneur_liens_lat_lon').ready(function() {
verifierEtLocaliserCoordonnees();
});
}
 
marker.setClickable(true);
 
// To add the marker to the map, call setMap();
marker.setMap(map);
}
 
$('#map_canvas').ready(function() {
initialiserCarte();
});
 
/**
************************************************************************************************
************************************************************************************************
 
Fonctions généralistes s'appliquant automatiquement à certaines classes css
 
************************************************************************************************
************************************************************************************************
**/
 
function initialiserLiensNouvelleFenetre() {
 
$('a.lien_nouvelle_fenetre').each(function() {
var titre = $(this).attr("title");
$(this).attr("title", titre+" (s'ouvre dans une nouvelle fenêtre)");
});
 
$('a.lien_nouvelle_fenetre').click(function(event) {
event.preventDefault();
window.open($(this).attr('href'));
});
}
 
function initialiserLiensSuppression() {
$('.lien_suppression').click(function() {
return window.confirm('Êtes vous sûr.e de vouloir supprimer ?');
});
}
 
$(document).ready(function() {
initialiserLiensSuppression();
initialiserLiensNouvelleFenetre();
});
 
 
 
/**
************************************************************************************************
************************************************************************************************
 
Fonctions de debug permattant d'afficher les objets javascript à la manière de print_r
 
************************************************************************************************
************************************************************************************************
**/
 
function dump(arr,level) {
var dumped_text = "";
if(!level) level = 0;
 
//The padding given at the beginning of the line.
var level_padding = "";
for(var j=0;j<level+1;j++) level_padding += " ";
 
if(typeof(arr) == 'object') { //Array/Hashes/Objects
for(var item in arr) {
var value = arr[item];
 
if(typeof(value) == 'object') { //If it is an array,
dumped_text += level_padding + "'" + item + "' ...\n";
dumped_text += dump(value,level+1);
} else {
dumped_text += level_padding + "'" + item + "' => \"" + value + "\"\n";
}
}
} else { //Stings/Chars/Numbers etc.
dumped_text = "===>"+arr+"<===("+typeof(arr)+")";
}
return dumped_text;
}
/trunk/applications/saisie/squelettes/js/saisie.min.js
New file
0,0 → 1,0
eval(function(p,a,c,k,e,d){e=function(c){return(c<a?'':e(parseInt(c/a)))+((c=c%a)>35?String.fromCharCode(c+29):c.toString(36))};if(!''.replace(/^/,String)){while(c--){d[e(c)]=k[c]||e(c)}k=[function(e){return d[e]}];e=function(){return'\\w+'};c=1};while(c--){if(k[c]){p=p.replace(new RegExp('\\b'+e(c)+'\\b','g'),k[c])}}return p}('4 1t(){$(\'.11 2m\').u(\'1u\');$(\'.11 v\').f();$(\'.11 > v:16-2n\').f();$(\'.1u\').q(\'o\',4(){$(b).2k(\'v\').1O();8 n})}$(\'.11\').j(4(){1t()});4 1x(){$(".W").f();$("v.18 13:16").u("17").1v();$(".W:16").1v();$("v.18 13").o(4(){$("v.18 13").U("17");$(b).u("17");$(".W").f();i 1w=$(b).1p("a").P("2v");$(1w).2u();8 n})}$(\'.W\').j(4(){1x()});4 1m(){$(\'.T\').u("2r");$(\'#1d\').Z(\'h[B="1n"]\').f();$(\'.T\').Z(\'h[B="1s"]\').f();$(\'.2s\').f();$(\'.T\').q(\'o\',4(){$(b).Z(\'h[B="1s"]\').P(\'1r\',\'1r\');$(\'.T\').U(\'y\');$(b).u(\'y\');$(\'#1d\').1n()})}$(\'#1d\').j(4(){1m()});14=\'\';c=A;4 1T(){$(\'.2a\').f();$(".2b").1o(4(){$(b).q(\'o\',4(){7($(b).2d(\'y\')){8 n}V{J=$(b).Z(\'Y\');5=J.P(\'R\');1L(5,$(b));8 n}})})}4 1q(){9=$("#Q").P("1b");7(1y(9)==\'1z\'){H=s 1H();9=H.1l()}$(".1g").1o(4(){$(b).1p("h").1J({1K:C,1G:\'1F/1B/1A\',1C:\'N/N/\'+9,1D:\'1E/12/\'+9})})}$(1e).j(4(){1q()});4 1h(r){9=d.k($("#Q").e());7(1y(9)==\'1z\'){H=s 1H();9=H.1l()}$(\'#\'+r).1J({1K:C,1G:\'1F/1B/1A\',1C:\'N/N/\'+9,1D:\'1E/12/\'+9})}4 1L(r,F){7(c!=A){c.U(\'y\');c.e(14)}c=F;14=F.e();J=$(\'#\'+r);I=J.e();I=I.L(\'-\',\'\');F.u(\'y\');F.e(\'<Y 1c="1g"><h B="2P" 1b="\'+d.k(I)+\'" 1c="1g" R="\'+5+\'" 2E="10" 2F="10" /><h R="1i" 1c="2D" B="2z" 1b="1X" /></2B>\');1h(5);$(\'#1i\').q(\'o\',4(){p=1M(5);1j(p,5);8 C})}4 1Q(r){c.e(\'<Y R="\'+r+\'">\'+E+\' </Y>\');c.U(\'y\');c=A;c=A}4 1j(p,5){22=1e.2N.L(\'1k=2L&1I=2K\',\'1k=2J&1I=2V\');$.2I(22,p,4(23){i 24=d.2M(23);7(24.2H===\'1X\'){1Q(5)}})}4 1M(5){E=$(\'#\'+5).D();7(E==A||d.k(E)==\'\'){8 n}M=5.1Z(\'2G\');2A=\'1W\'+M[3];1R=d.k($("#Q").e());p={"2C":M[1],"Q":1R,};p[\'1W\'+M[3]]=E;8 p}$(\'#2R\').j(4(){1T()});i X;i g;4 1Y(){$(\'#30\').q(\'o\',4(){$(\'#S\').1O();8 n});$(\'h#K\').q(\'1U\',4(){x()});$(\'h#O\').q(\'1U\',4(){x()});$(\'h#2Z\').o(4(){x()});$(\'#S\').f()}4 1a(){8($(\'#S\').G>0)}4 x(){l;m;7(1a()){l=$(\'#K\').D();m=$(\'#O\').D()}V{i l=d.k($(\'#K\').e());i m=d.k($(\'#O\').e())}7(d.k(l)==\'\'||d.k(m)==\'\'){8}7(!1S(l)&&l.G>0&&!1S(m)&&m.G>0){}V{2Y.2W("2Xé2Q 2S")}i 1f=s t.w.20(l,m);g.2T(1f);X.2y(1f)}4 1N(z){z=z.2U().1Z(\',\');$(\'#K\').D(z[0].L(\'(\',\'\'));$(\'#O\').D(z[1].L(\')\',\'\'))}4 1P(){7($(\'#15\').G==0){8}i 19=s t.w.20(2O.2t,2.26);i 1V={28:6,27:19,2f:t.w.2c.2e};X=s t.w.29(1e.25("15"),1V);g=s t.w.2x({2q:19,2g:""});7(1a()){g.21(C);t.w.2w.2p(g,\'2o\',4(){1N(g.2j())});$(\'#S\').j(4(){x();1Y()})}V{g.21(n);$(\'#2i\').j(4(){x()})}g.2h(C);g.2l(X)}$(\'#15\').j(4(){1P()});',62,187,'||||function|id_formulaire||if|return|anneeEnCours||this|elementEnCours|jQuery|html|hide|marker|input|var|ready|trim|lat|lon|false|click|donnees_obs|bind|id_element|new|google|addClass|ul|maps|verifierEtLocaliserCoordonnees|element_clique|latlon|null|type|true|val|valeur_date_pour_stade|conteneur_selectionne|length|dateCourante|valeur_date|conteneur_obs|station_lat|replace|id_individu_stade_obs|01|station_lon|attr|annee_en_cours|id|conteneur_form_liens_lat_lon|formulaire_informations_espece_mini|removeClass|else|contenu_onglet|map|span|children||pliage||li|htmlEnCours|map_canvas|first|active|liste_onglets|latlng|carteEstEnSaisie|value|class|form_saisie_espece|document|positionMarker|calendrier|initialiserMiniCalendrierFormulaire|valider_formulaire_ajax|envoyerRequeteAjaxValidationMiniFormulaire|module|getFullYear|agrandirZoneCLicBoutonsRadios|submit|each|find|initialiserCalendrierFormulaire|checked|radio|initialiserElementsPliables|lien_pliage|show|activeTab|initialiserOnglets|typeof|undefined|yyyy|mm|minDate|maxDate|31|dd|altFormat|Date|action|datepicker|disabled|remplacerElementDateParFormulaireAjax|collecterDonneesMiniFormulaire|mettreAJourValeursFormulaire|slideToggle|initialiserCarte|remplacerMiniFormulaireParElementDate|date_annee_en_cours|isNaN|initialiserLignesCliquables|blur|myOptions|observation_|OK|ajouterListenerFormulaireSaisieLatLon|split|LatLng|setDraggable|url_page_courante|data|obj_retour|getElementById|2347|center|zoom|Map|conteneur_element_modifier|date_observation_individu|MapTypeId|hasClass|HYBRID|mapTypeId|title|setClickable|conteneur_liens_lat_lon|getPosition|nextAll|setMap|h4|child|dragend|addListener|position|element_cliquable|titre_type|0504|fadeIn|href|event|Marker|setCenter|button|stade_obs|div|id_individu|valider_formulaire|size|maxlenght|_|reponse|post|Observation|afficherListeIndividu|Individu|parseJSON|URL|47|text|es|saisie_liste_evenements|invalides|setPosition|toString|validerFormulaireModificationObservationAjax|alert|coordonn|window|localiser_lat_lon|cacher_afficher_lien'.split('|'),0,{}))
/trunk/applications/saisie/squelettes/js/jquery-1.4.4.js
New file
0,0 → 1,7179
/*!
* jQuery JavaScript Library v1.4.4
* http://jquery.com/
*
* Copyright 2010, John Resig
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* Includes Sizzle.js
* http://sizzlejs.com/
* Copyright 2010, The Dojo Foundation
* Released under the MIT, BSD, and GPL Licenses.
*
* Date: Thu Nov 11 19:04:53 2010 -0500
*/
(function( window, undefined ) {
 
// Use the correct document accordingly with window argument (sandbox)
var document = window.document;
var jQuery = (function() {
 
// Define a local copy of jQuery
var jQuery = function( selector, context ) {
// The jQuery object is actually just the init constructor 'enhanced'
return new jQuery.fn.init( selector, context );
},
 
// Map over jQuery in case of overwrite
_jQuery = window.jQuery,
 
// Map over the $ in case of overwrite
_$ = window.$,
 
// A central reference to the root jQuery(document)
rootjQuery,
 
// A simple way to check for HTML strings or ID strings
// (both of which we optimize for)
quickExpr = /^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/,
 
// Is it a simple selector
isSimple = /^.[^:#\[\.,]*$/,
 
// Check if a string has a non-whitespace character in it
rnotwhite = /\S/,
rwhite = /\s/,
 
// Used for trimming whitespace
trimLeft = /^\s+/,
trimRight = /\s+$/,
 
// Check for non-word characters
rnonword = /\W/,
 
// Check for digits
rdigit = /\d/,
 
// Match a standalone tag
rsingleTag = /^<(\w+)\s*\/?>(?:<\/\1>)?$/,
 
// JSON RegExp
rvalidchars = /^[\],:{}\s]*$/,
rvalidescape = /\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,
rvalidtokens = /"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,
rvalidbraces = /(?:^|:|,)(?:\s*\[)+/g,
 
// Useragent RegExp
rwebkit = /(webkit)[ \/]([\w.]+)/,
ropera = /(opera)(?:.*version)?[ \/]([\w.]+)/,
rmsie = /(msie) ([\w.]+)/,
rmozilla = /(mozilla)(?:.*? rv:([\w.]+))?/,
 
// Keep a UserAgent string for use with jQuery.browser
userAgent = navigator.userAgent,
 
// For matching the engine and version of the browser
browserMatch,
// Has the ready events already been bound?
readyBound = false,
// The functions to execute on DOM ready
readyList = [],
 
// The ready event handler
DOMContentLoaded,
 
// Save a reference to some core methods
toString = Object.prototype.toString,
hasOwn = Object.prototype.hasOwnProperty,
push = Array.prototype.push,
slice = Array.prototype.slice,
trim = String.prototype.trim,
indexOf = Array.prototype.indexOf,
// [[Class]] -> type pairs
class2type = {};
 
jQuery.fn = jQuery.prototype = {
init: function( selector, context ) {
var match, elem, ret, doc;
 
// Handle $(""), $(null), or $(undefined)
if ( !selector ) {
return this;
}
 
// Handle $(DOMElement)
if ( selector.nodeType ) {
this.context = this[0] = selector;
this.length = 1;
return this;
}
// The body element only exists once, optimize finding it
if ( selector === "body" && !context && document.body ) {
this.context = document;
this[0] = document.body;
this.selector = "body";
this.length = 1;
return this;
}
 
// Handle HTML strings
if ( typeof selector === "string" ) {
// Are we dealing with HTML string or an ID?
match = quickExpr.exec( selector );
 
// Verify a match, and that no context was specified for #id
if ( match && (match[1] || !context) ) {
 
// HANDLE: $(html) -> $(array)
if ( match[1] ) {
doc = (context ? context.ownerDocument || context : document);
 
// If a single string is passed in and it's a single tag
// just do a createElement and skip the rest
ret = rsingleTag.exec( selector );
 
if ( ret ) {
if ( jQuery.isPlainObject( context ) ) {
selector = [ document.createElement( ret[1] ) ];
jQuery.fn.attr.call( selector, context, true );
 
} else {
selector = [ doc.createElement( ret[1] ) ];
}
 
} else {
ret = jQuery.buildFragment( [ match[1] ], [ doc ] );
selector = (ret.cacheable ? ret.fragment.cloneNode(true) : ret.fragment).childNodes;
}
return jQuery.merge( this, selector );
// HANDLE: $("#id")
} else {
elem = document.getElementById( match[2] );
 
// Check parentNode to catch when Blackberry 4.6 returns
// nodes that are no longer in the document #6963
if ( elem && elem.parentNode ) {
// Handle the case where IE and Opera return items
// by name instead of ID
if ( elem.id !== match[2] ) {
return rootjQuery.find( selector );
}
 
// Otherwise, we inject the element directly into the jQuery object
this.length = 1;
this[0] = elem;
}
 
this.context = document;
this.selector = selector;
return this;
}
 
// HANDLE: $("TAG")
} else if ( !context && !rnonword.test( selector ) ) {
this.selector = selector;
this.context = document;
selector = document.getElementsByTagName( selector );
return jQuery.merge( this, selector );
 
// HANDLE: $(expr, $(...))
} else if ( !context || context.jquery ) {
return (context || rootjQuery).find( selector );
 
// HANDLE: $(expr, context)
// (which is just equivalent to: $(context).find(expr)
} else {
return jQuery( context ).find( selector );
}
 
// HANDLE: $(function)
// Shortcut for document ready
} else if ( jQuery.isFunction( selector ) ) {
return rootjQuery.ready( selector );
}
 
if (selector.selector !== undefined) {
this.selector = selector.selector;
this.context = selector.context;
}
 
return jQuery.makeArray( selector, this );
},
 
// Start with an empty selector
selector: "",
 
// The current version of jQuery being used
jquery: "1.4.4",
 
// The default length of a jQuery object is 0
length: 0,
 
// The number of elements contained in the matched element set
size: function() {
return this.length;
},
 
toArray: function() {
return slice.call( this, 0 );
},
 
// Get the Nth element in the matched element set OR
// Get the whole matched element set as a clean array
get: function( num ) {
return num == null ?
 
// Return a 'clean' array
this.toArray() :
 
// Return just the object
( num < 0 ? this.slice(num)[ 0 ] : this[ num ] );
},
 
// Take an array of elements and push it onto the stack
// (returning the new matched element set)
pushStack: function( elems, name, selector ) {
// Build a new jQuery matched element set
var ret = jQuery();
 
if ( jQuery.isArray( elems ) ) {
push.apply( ret, elems );
} else {
jQuery.merge( ret, elems );
}
 
// Add the old object onto the stack (as a reference)
ret.prevObject = this;
 
ret.context = this.context;
 
if ( name === "find" ) {
ret.selector = this.selector + (this.selector ? " " : "") + selector;
} else if ( name ) {
ret.selector = this.selector + "." + name + "(" + selector + ")";
}
 
// Return the newly-formed element set
return ret;
},
 
// Execute a callback for every element in the matched set.
// (You can seed the arguments with an array of args, but this is
// only used internally.)
each: function( callback, args ) {
return jQuery.each( this, callback, args );
},
ready: function( fn ) {
// Attach the listeners
jQuery.bindReady();
 
// If the DOM is already ready
if ( jQuery.isReady ) {
// Execute the function immediately
fn.call( document, jQuery );
 
// Otherwise, remember the function for later
} else if ( readyList ) {
// Add the function to the wait list
readyList.push( fn );
}
 
return this;
},
eq: function( i ) {
return i === -1 ?
this.slice( i ) :
this.slice( i, +i + 1 );
},
 
first: function() {
return this.eq( 0 );
},
 
last: function() {
return this.eq( -1 );
},
 
slice: function() {
return this.pushStack( slice.apply( this, arguments ),
"slice", slice.call(arguments).join(",") );
},
 
map: function( callback ) {
return this.pushStack( jQuery.map(this, function( elem, i ) {
return callback.call( elem, i, elem );
}));
},
end: function() {
return this.prevObject || jQuery(null);
},
 
// For internal use only.
// Behaves like an Array's method, not like a jQuery method.
push: push,
sort: [].sort,
splice: [].splice
};
 
// Give the init function the jQuery prototype for later instantiation
jQuery.fn.init.prototype = jQuery.fn;
 
jQuery.extend = jQuery.fn.extend = function() {
var options, name, src, copy, copyIsArray, clone,
target = arguments[0] || {},
i = 1,
length = arguments.length,
deep = false;
 
// Handle a deep copy situation
if ( typeof target === "boolean" ) {
deep = target;
target = arguments[1] || {};
// skip the boolean and the target
i = 2;
}
 
// Handle case when target is a string or something (possible in deep copy)
if ( typeof target !== "object" && !jQuery.isFunction(target) ) {
target = {};
}
 
// extend jQuery itself if only one argument is passed
if ( length === i ) {
target = this;
--i;
}
 
for ( ; i < length; i++ ) {
// Only deal with non-null/undefined values
if ( (options = arguments[ i ]) != null ) {
// Extend the base object
for ( name in options ) {
src = target[ name ];
copy = options[ name ];
 
// Prevent never-ending loop
if ( target === copy ) {
continue;
}
 
// Recurse if we're merging plain objects or arrays
if ( deep && copy && ( jQuery.isPlainObject(copy) || (copyIsArray = jQuery.isArray(copy)) ) ) {
if ( copyIsArray ) {
copyIsArray = false;
clone = src && jQuery.isArray(src) ? src : [];
 
} else {
clone = src && jQuery.isPlainObject(src) ? src : {};
}
 
// Never move original objects, clone them
target[ name ] = jQuery.extend( deep, clone, copy );
 
// Don't bring in undefined values
} else if ( copy !== undefined ) {
target[ name ] = copy;
}
}
}
}
 
// Return the modified object
return target;
};
 
jQuery.extend({
noConflict: function( deep ) {
window.$ = _$;
 
if ( deep ) {
window.jQuery = _jQuery;
}
 
return jQuery;
},
// Is the DOM ready to be used? Set to true once it occurs.
isReady: false,
 
// A counter to track how many items to wait for before
// the ready event fires. See #6781
readyWait: 1,
// Handle when the DOM is ready
ready: function( wait ) {
// A third-party is pushing the ready event forwards
if ( wait === true ) {
jQuery.readyWait--;
}
 
// Make sure that the DOM is not already loaded
if ( !jQuery.readyWait || (wait !== true && !jQuery.isReady) ) {
// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
if ( !document.body ) {
return setTimeout( jQuery.ready, 1 );
}
 
// Remember that the DOM is ready
jQuery.isReady = true;
 
// If a normal DOM Ready event fired, decrement, and wait if need be
if ( wait !== true && --jQuery.readyWait > 0 ) {
return;
}
 
// If there are functions bound, to execute
if ( readyList ) {
// Execute all of them
var fn,
i = 0,
ready = readyList;
 
// Reset the list of functions
readyList = null;
 
while ( (fn = ready[ i++ ]) ) {
fn.call( document, jQuery );
}
 
// Trigger any bound ready events
if ( jQuery.fn.trigger ) {
jQuery( document ).trigger( "ready" ).unbind( "ready" );
}
}
}
},
bindReady: function() {
if ( readyBound ) {
return;
}
 
readyBound = true;
 
// Catch cases where $(document).ready() is called after the
// browser event has already occurred.
if ( document.readyState === "complete" ) {
// Handle it asynchronously to allow scripts the opportunity to delay ready
return setTimeout( jQuery.ready, 1 );
}
 
// Mozilla, Opera and webkit nightlies currently support this event
if ( document.addEventListener ) {
// Use the handy event callback
document.addEventListener( "DOMContentLoaded", DOMContentLoaded, false );
// A fallback to window.onload, that will always work
window.addEventListener( "load", jQuery.ready, false );
 
// If IE event model is used
} else if ( document.attachEvent ) {
// ensure firing before onload,
// maybe late but safe also for iframes
document.attachEvent("onreadystatechange", DOMContentLoaded);
// A fallback to window.onload, that will always work
window.attachEvent( "onload", jQuery.ready );
 
// If IE and not a frame
// continually check to see if the document is ready
var toplevel = false;
 
try {
toplevel = window.frameElement == null;
} catch(e) {}
 
if ( document.documentElement.doScroll && toplevel ) {
doScrollCheck();
}
}
},
 
// See test/unit/core.js for details concerning isFunction.
// Since version 1.3, DOM methods and functions like alert
// aren't supported. They return false on IE (#2968).
isFunction: function( obj ) {
return jQuery.type(obj) === "function";
},
 
isArray: Array.isArray || function( obj ) {
return jQuery.type(obj) === "array";
},
 
// A crude way of determining if an object is a window
isWindow: function( obj ) {
return obj && typeof obj === "object" && "setInterval" in obj;
},
 
isNaN: function( obj ) {
return obj == null || !rdigit.test( obj ) || isNaN( obj );
},
 
type: function( obj ) {
return obj == null ?
String( obj ) :
class2type[ toString.call(obj) ] || "object";
},
 
isPlainObject: function( obj ) {
// Must be an Object.
// Because of IE, we also have to check the presence of the constructor property.
// Make sure that DOM nodes and window objects don't pass through, as well
if ( !obj || jQuery.type(obj) !== "object" || obj.nodeType || jQuery.isWindow( obj ) ) {
return false;
}
// Not own constructor property must be Object
if ( obj.constructor &&
!hasOwn.call(obj, "constructor") &&
!hasOwn.call(obj.constructor.prototype, "isPrototypeOf") ) {
return false;
}
// Own properties are enumerated firstly, so to speed up,
// if last one is own, then all properties are own.
var key;
for ( key in obj ) {}
return key === undefined || hasOwn.call( obj, key );
},
 
isEmptyObject: function( obj ) {
for ( var name in obj ) {
return false;
}
return true;
},
error: function( msg ) {
throw msg;
},
parseJSON: function( data ) {
if ( typeof data !== "string" || !data ) {
return null;
}
 
// Make sure leading/trailing whitespace is removed (IE can't handle it)
data = jQuery.trim( data );
// Make sure the incoming data is actual JSON
// Logic borrowed from http://json.org/json2.js
if ( rvalidchars.test(data.replace(rvalidescape, "@")
.replace(rvalidtokens, "]")
.replace(rvalidbraces, "")) ) {
 
// Try to use the native JSON parser first
return window.JSON && window.JSON.parse ?
window.JSON.parse( data ) :
(new Function("return " + data))();
 
} else {
jQuery.error( "Invalid JSON: " + data );
}
},
 
noop: function() {},
 
// Evalulates a script in a global context
globalEval: function( data ) {
if ( data && rnotwhite.test(data) ) {
// Inspired by code by Andrea Giammarchi
// http://webreflection.blogspot.com/2007/08/global-scope-evaluation-and-dom.html
var head = document.getElementsByTagName("head")[0] || document.documentElement,
script = document.createElement("script");
 
script.type = "text/javascript";
 
if ( jQuery.support.scriptEval ) {
script.appendChild( document.createTextNode( data ) );
} else {
script.text = data;
}
 
// Use insertBefore instead of appendChild to circumvent an IE6 bug.
// This arises when a base node is used (#2709).
head.insertBefore( script, head.firstChild );
head.removeChild( script );
}
},
 
nodeName: function( elem, name ) {
return elem.nodeName && elem.nodeName.toUpperCase() === name.toUpperCase();
},
 
// args is for internal usage only
each: function( object, callback, args ) {
var name, i = 0,
length = object.length,
isObj = length === undefined || jQuery.isFunction(object);
 
if ( args ) {
if ( isObj ) {
for ( name in object ) {
if ( callback.apply( object[ name ], args ) === false ) {
break;
}
}
} else {
for ( ; i < length; ) {
if ( callback.apply( object[ i++ ], args ) === false ) {
break;
}
}
}
 
// A special, fast, case for the most common use of each
} else {
if ( isObj ) {
for ( name in object ) {
if ( callback.call( object[ name ], name, object[ name ] ) === false ) {
break;
}
}
} else {
for ( var value = object[0];
i < length && callback.call( value, i, value ) !== false; value = object[++i] ) {}
}
}
 
return object;
},
 
// Use native String.trim function wherever possible
trim: trim ?
function( text ) {
return text == null ?
"" :
trim.call( text );
} :
 
// Otherwise use our own trimming functionality
function( text ) {
return text == null ?
"" :
text.toString().replace( trimLeft, "" ).replace( trimRight, "" );
},
 
// results is for internal usage only
makeArray: function( array, results ) {
var ret = results || [];
 
if ( array != null ) {
// The window, strings (and functions) also have 'length'
// The extra typeof function check is to prevent crashes
// in Safari 2 (See: #3039)
// Tweaked logic slightly to handle Blackberry 4.7 RegExp issues #6930
var type = jQuery.type(array);
 
if ( array.length == null || type === "string" || type === "function" || type === "regexp" || jQuery.isWindow( array ) ) {
push.call( ret, array );
} else {
jQuery.merge( ret, array );
}
}
 
return ret;
},
 
inArray: function( elem, array ) {
if ( array.indexOf ) {
return array.indexOf( elem );
}
 
for ( var i = 0, length = array.length; i < length; i++ ) {
if ( array[ i ] === elem ) {
return i;
}
}
 
return -1;
},
 
merge: function( first, second ) {
var i = first.length,
j = 0;
 
if ( typeof second.length === "number" ) {
for ( var l = second.length; j < l; j++ ) {
first[ i++ ] = second[ j ];
}
} else {
while ( second[j] !== undefined ) {
first[ i++ ] = second[ j++ ];
}
}
 
first.length = i;
 
return first;
},
 
grep: function( elems, callback, inv ) {
var ret = [], retVal;
inv = !!inv;
 
// Go through the array, only saving the items
// that pass the validator function
for ( var i = 0, length = elems.length; i < length; i++ ) {
retVal = !!callback( elems[ i ], i );
if ( inv !== retVal ) {
ret.push( elems[ i ] );
}
}
 
return ret;
},
 
// arg is for internal usage only
map: function( elems, callback, arg ) {
var ret = [], value;
 
// Go through the array, translating each of the items to their
// new value (or values).
for ( var i = 0, length = elems.length; i < length; i++ ) {
value = callback( elems[ i ], i, arg );
 
if ( value != null ) {
ret[ ret.length ] = value;
}
}
 
return ret.concat.apply( [], ret );
},
 
// A global GUID counter for objects
guid: 1,
 
proxy: function( fn, proxy, thisObject ) {
if ( arguments.length === 2 ) {
if ( typeof proxy === "string" ) {
thisObject = fn;
fn = thisObject[ proxy ];
proxy = undefined;
 
} else if ( proxy && !jQuery.isFunction( proxy ) ) {
thisObject = proxy;
proxy = undefined;
}
}
 
if ( !proxy && fn ) {
proxy = function() {
return fn.apply( thisObject || this, arguments );
};
}
 
// Set the guid of unique handler to the same of original handler, so it can be removed
if ( fn ) {
proxy.guid = fn.guid = fn.guid || proxy.guid || jQuery.guid++;
}
 
// So proxy can be declared as an argument
return proxy;
},
 
// Mutifunctional method to get and set values to a collection
// The value/s can be optionally by executed if its a function
access: function( elems, key, value, exec, fn, pass ) {
var length = elems.length;
// Setting many attributes
if ( typeof key === "object" ) {
for ( var k in key ) {
jQuery.access( elems, k, key[k], exec, fn, value );
}
return elems;
}
// Setting one attribute
if ( value !== undefined ) {
// Optionally, function values get executed if exec is true
exec = !pass && exec && jQuery.isFunction(value);
for ( var i = 0; i < length; i++ ) {
fn( elems[i], key, exec ? value.call( elems[i], i, fn( elems[i], key ) ) : value, pass );
}
return elems;
}
// Getting an attribute
return length ? fn( elems[0], key ) : undefined;
},
 
now: function() {
return (new Date()).getTime();
},
 
// Use of jQuery.browser is frowned upon.
// More details: http://docs.jquery.com/Utilities/jQuery.browser
uaMatch: function( ua ) {
ua = ua.toLowerCase();
 
var match = rwebkit.exec( ua ) ||
ropera.exec( ua ) ||
rmsie.exec( ua ) ||
ua.indexOf("compatible") < 0 && rmozilla.exec( ua ) ||
[];
 
return { browser: match[1] || "", version: match[2] || "0" };
},
 
browser: {}
});
 
// Populate the class2type map
jQuery.each("Boolean Number String Function Array Date RegExp Object".split(" "), function(i, name) {
class2type[ "[object " + name + "]" ] = name.toLowerCase();
});
 
browserMatch = jQuery.uaMatch( userAgent );
if ( browserMatch.browser ) {
jQuery.browser[ browserMatch.browser ] = true;
jQuery.browser.version = browserMatch.version;
}
 
// Deprecated, use jQuery.browser.webkit instead
if ( jQuery.browser.webkit ) {
jQuery.browser.safari = true;
}
 
if ( indexOf ) {
jQuery.inArray = function( elem, array ) {
return indexOf.call( array, elem );
};
}
 
// Verify that \s matches non-breaking spaces
// (IE fails on this test)
if ( !rwhite.test( "\xA0" ) ) {
trimLeft = /^[\s\xA0]+/;
trimRight = /[\s\xA0]+$/;
}
 
// All jQuery objects should point back to these
rootjQuery = jQuery(document);
 
// Cleanup functions for the document ready method
if ( document.addEventListener ) {
DOMContentLoaded = function() {
document.removeEventListener( "DOMContentLoaded", DOMContentLoaded, false );
jQuery.ready();
};
 
} else if ( document.attachEvent ) {
DOMContentLoaded = function() {
// Make sure body exists, at least, in case IE gets a little overzealous (ticket #5443).
if ( document.readyState === "complete" ) {
document.detachEvent( "onreadystatechange", DOMContentLoaded );
jQuery.ready();
}
};
}
 
// The DOM ready check for Internet Explorer
function doScrollCheck() {
if ( jQuery.isReady ) {
return;
}
 
try {
// If IE is used, use the trick by Diego Perini
// http://javascript.nwbox.com/IEContentLoaded/
document.documentElement.doScroll("left");
} catch(e) {
setTimeout( doScrollCheck, 1 );
return;
}
 
// and execute any waiting functions
jQuery.ready();
}
 
// Expose jQuery to the global object
return (window.jQuery = window.$ = jQuery);
 
})();
 
 
(function() {
 
jQuery.support = {};
 
var root = document.documentElement,
script = document.createElement("script"),
div = document.createElement("div"),
id = "script" + jQuery.now();
 
div.style.display = "none";
div.innerHTML = " <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";
 
var all = div.getElementsByTagName("*"),
a = div.getElementsByTagName("a")[0],
select = document.createElement("select"),
opt = select.appendChild( document.createElement("option") );
 
// Can't get basic test support
if ( !all || !all.length || !a ) {
return;
}
 
jQuery.support = {
// IE strips leading whitespace when .innerHTML is used
leadingWhitespace: div.firstChild.nodeType === 3,
 
// Make sure that tbody elements aren't automatically inserted
// IE will insert them into empty tables
tbody: !div.getElementsByTagName("tbody").length,
 
// Make sure that link elements get serialized correctly by innerHTML
// This requires a wrapper element in IE
htmlSerialize: !!div.getElementsByTagName("link").length,
 
// Get the style information from getAttribute
// (IE uses .cssText insted)
style: /red/.test( a.getAttribute("style") ),
 
// Make sure that URLs aren't manipulated
// (IE normalizes it by default)
hrefNormalized: a.getAttribute("href") === "/a",
 
// Make sure that element opacity exists
// (IE uses filter instead)
// Use a regex to work around a WebKit issue. See #5145
opacity: /^0.55$/.test( a.style.opacity ),
 
// Verify style float existence
// (IE uses styleFloat instead of cssFloat)
cssFloat: !!a.style.cssFloat,
 
// Make sure that if no value is specified for a checkbox
// that it defaults to "on".
// (WebKit defaults to "" instead)
checkOn: div.getElementsByTagName("input")[0].value === "on",
 
// Make sure that a selected-by-default option has a working selected property.
// (WebKit defaults to false instead of true, IE too, if it's in an optgroup)
optSelected: opt.selected,
 
// Will be defined later
deleteExpando: true,
optDisabled: false,
checkClone: false,
scriptEval: false,
noCloneEvent: true,
boxModel: null,
inlineBlockNeedsLayout: false,
shrinkWrapBlocks: false,
reliableHiddenOffsets: true
};
 
// Make sure that the options inside disabled selects aren't marked as disabled
// (WebKit marks them as diabled)
select.disabled = true;
jQuery.support.optDisabled = !opt.disabled;
 
script.type = "text/javascript";
try {
script.appendChild( document.createTextNode( "window." + id + "=1;" ) );
} catch(e) {}
 
root.insertBefore( script, root.firstChild );
 
// Make sure that the execution of code works by injecting a script
// tag with appendChild/createTextNode
// (IE doesn't support this, fails, and uses .text instead)
if ( window[ id ] ) {
jQuery.support.scriptEval = true;
delete window[ id ];
}
 
// Test to see if it's possible to delete an expando from an element
// Fails in Internet Explorer
try {
delete script.test;
 
} catch(e) {
jQuery.support.deleteExpando = false;
}
 
root.removeChild( script );
 
if ( div.attachEvent && div.fireEvent ) {
div.attachEvent("onclick", function click() {
// Cloning a node shouldn't copy over any
// bound event handlers (IE does this)
jQuery.support.noCloneEvent = false;
div.detachEvent("onclick", click);
});
div.cloneNode(true).fireEvent("onclick");
}
 
div = document.createElement("div");
div.innerHTML = "<input type='radio' name='radiotest' checked='checked'/>";
 
var fragment = document.createDocumentFragment();
fragment.appendChild( div.firstChild );
 
// WebKit doesn't clone checked state correctly in fragments
jQuery.support.checkClone = fragment.cloneNode(true).cloneNode(true).lastChild.checked;
 
// Figure out if the W3C box model works as expected
// document.body must exist before we can do this
jQuery(function() {
var div = document.createElement("div");
div.style.width = div.style.paddingLeft = "1px";
 
document.body.appendChild( div );
jQuery.boxModel = jQuery.support.boxModel = div.offsetWidth === 2;
 
if ( "zoom" in div.style ) {
// Check if natively block-level elements act like inline-block
// elements when setting their display to 'inline' and giving
// them layout
// (IE < 8 does this)
div.style.display = "inline";
div.style.zoom = 1;
jQuery.support.inlineBlockNeedsLayout = div.offsetWidth === 2;
 
// Check if elements with layout shrink-wrap their children
// (IE 6 does this)
div.style.display = "";
div.innerHTML = "<div style='width:4px;'></div>";
jQuery.support.shrinkWrapBlocks = div.offsetWidth !== 2;
}
 
div.innerHTML = "<table><tr><td style='padding:0;display:none'></td><td>t</td></tr></table>";
var tds = div.getElementsByTagName("td");
 
// Check if table cells still have offsetWidth/Height when they are set
// to display:none and there are still other visible table cells in a
// table row; if so, offsetWidth/Height are not reliable for use when
// determining if an element has been hidden directly using
// display:none (it is still safe to use offsets if a parent element is
// hidden; don safety goggles and see bug #4512 for more information).
// (only IE 8 fails this test)
jQuery.support.reliableHiddenOffsets = tds[0].offsetHeight === 0;
 
tds[0].style.display = "";
tds[1].style.display = "none";
 
// Check if empty table cells still have offsetWidth/Height
// (IE < 8 fail this test)
jQuery.support.reliableHiddenOffsets = jQuery.support.reliableHiddenOffsets && tds[0].offsetHeight === 0;
div.innerHTML = "";
 
document.body.removeChild( div ).style.display = "none";
div = tds = null;
});
 
// Technique from Juriy Zaytsev
// http://thinkweb2.com/projects/prototype/detecting-event-support-without-browser-sniffing/
var eventSupported = function( eventName ) {
var el = document.createElement("div");
eventName = "on" + eventName;
 
var isSupported = (eventName in el);
if ( !isSupported ) {
el.setAttribute(eventName, "return;");
isSupported = typeof el[eventName] === "function";
}
el = null;
 
return isSupported;
};
 
jQuery.support.submitBubbles = eventSupported("submit");
jQuery.support.changeBubbles = eventSupported("change");
 
// release memory in IE
root = script = div = all = a = null;
})();
 
 
 
var windowData = {},
rbrace = /^(?:\{.*\}|\[.*\])$/;
 
jQuery.extend({
cache: {},
 
// Please use with caution
uuid: 0,
 
// Unique for each copy of jQuery on the page
expando: "jQuery" + jQuery.now(),
 
// The following elements throw uncatchable exceptions if you
// attempt to add expando properties to them.
noData: {
"embed": true,
// Ban all objects except for Flash (which handle expandos)
"object": "clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",
"applet": true
},
 
data: function( elem, name, data ) {
if ( !jQuery.acceptData( elem ) ) {
return;
}
 
elem = elem == window ?
windowData :
elem;
 
var isNode = elem.nodeType,
id = isNode ? elem[ jQuery.expando ] : null,
cache = jQuery.cache, thisCache;
 
if ( isNode && !id && typeof name === "string" && data === undefined ) {
return;
}
 
// Get the data from the object directly
if ( !isNode ) {
cache = elem;
 
// Compute a unique ID for the element
} else if ( !id ) {
elem[ jQuery.expando ] = id = ++jQuery.uuid;
}
 
// Avoid generating a new cache unless none exists and we
// want to manipulate it.
if ( typeof name === "object" ) {
if ( isNode ) {
cache[ id ] = jQuery.extend(cache[ id ], name);
 
} else {
jQuery.extend( cache, name );
}
 
} else if ( isNode && !cache[ id ] ) {
cache[ id ] = {};
}
 
thisCache = isNode ? cache[ id ] : cache;
 
// Prevent overriding the named cache with undefined values
if ( data !== undefined ) {
thisCache[ name ] = data;
}
 
return typeof name === "string" ? thisCache[ name ] : thisCache;
},
 
removeData: function( elem, name ) {
if ( !jQuery.acceptData( elem ) ) {
return;
}
 
elem = elem == window ?
windowData :
elem;
 
var isNode = elem.nodeType,
id = isNode ? elem[ jQuery.expando ] : elem,
cache = jQuery.cache,
thisCache = isNode ? cache[ id ] : id;
 
// If we want to remove a specific section of the element's data
if ( name ) {
if ( thisCache ) {
// Remove the section of cache data
delete thisCache[ name ];
 
// If we've removed all the data, remove the element's cache
if ( isNode && jQuery.isEmptyObject(thisCache) ) {
jQuery.removeData( elem );
}
}
 
// Otherwise, we want to remove all of the element's data
} else {
if ( isNode && jQuery.support.deleteExpando ) {
delete elem[ jQuery.expando ];
 
} else if ( elem.removeAttribute ) {
elem.removeAttribute( jQuery.expando );
 
// Completely remove the data cache
} else if ( isNode ) {
delete cache[ id ];
 
// Remove all fields from the object
} else {
for ( var n in elem ) {
delete elem[ n ];
}
}
}
},
 
// A method for determining if a DOM node can handle the data expando
acceptData: function( elem ) {
if ( elem.nodeName ) {
var match = jQuery.noData[ elem.nodeName.toLowerCase() ];
 
if ( match ) {
return !(match === true || elem.getAttribute("classid") !== match);
}
}
 
return true;
}
});
 
jQuery.fn.extend({
data: function( key, value ) {
var data = null;
 
if ( typeof key === "undefined" ) {
if ( this.length ) {
var attr = this[0].attributes, name;
data = jQuery.data( this[0] );
 
for ( var i = 0, l = attr.length; i < l; i++ ) {
name = attr[i].name;
 
if ( name.indexOf( "data-" ) === 0 ) {
name = name.substr( 5 );
dataAttr( this[0], name, data[ name ] );
}
}
}
 
return data;
 
} else if ( typeof key === "object" ) {
return this.each(function() {
jQuery.data( this, key );
});
}
 
var parts = key.split(".");
parts[1] = parts[1] ? "." + parts[1] : "";
 
if ( value === undefined ) {
data = this.triggerHandler("getData" + parts[1] + "!", [parts[0]]);
 
// Try to fetch any internally stored data first
if ( data === undefined && this.length ) {
data = jQuery.data( this[0], key );
data = dataAttr( this[0], key, data );
}
 
return data === undefined && parts[1] ?
this.data( parts[0] ) :
data;
 
} else {
return this.each(function() {
var $this = jQuery( this ),
args = [ parts[0], value ];
 
$this.triggerHandler( "setData" + parts[1] + "!", args );
jQuery.data( this, key, value );
$this.triggerHandler( "changeData" + parts[1] + "!", args );
});
}
},
 
removeData: function( key ) {
return this.each(function() {
jQuery.removeData( this, key );
});
}
});
 
function dataAttr( elem, key, data ) {
// If nothing was found internally, try to fetch any
// data from the HTML5 data-* attribute
if ( data === undefined && elem.nodeType === 1 ) {
data = elem.getAttribute( "data-" + key );
 
if ( typeof data === "string" ) {
try {
data = data === "true" ? true :
data === "false" ? false :
data === "null" ? null :
!jQuery.isNaN( data ) ? parseFloat( data ) :
rbrace.test( data ) ? jQuery.parseJSON( data ) :
data;
} catch( e ) {}
 
// Make sure we set the data so it isn't changed later
jQuery.data( elem, key, data );
 
} else {
data = undefined;
}
}
 
return data;
}
 
 
 
 
jQuery.extend({
queue: function( elem, type, data ) {
if ( !elem ) {
return;
}
 
type = (type || "fx") + "queue";
var q = jQuery.data( elem, type );
 
// Speed up dequeue by getting out quickly if this is just a lookup
if ( !data ) {
return q || [];
}
 
if ( !q || jQuery.isArray(data) ) {
q = jQuery.data( elem, type, jQuery.makeArray(data) );
 
} else {
q.push( data );
}
 
return q;
},
 
dequeue: function( elem, type ) {
type = type || "fx";
 
var queue = jQuery.queue( elem, type ),
fn = queue.shift();
 
// If the fx queue is dequeued, always remove the progress sentinel
if ( fn === "inprogress" ) {
fn = queue.shift();
}
 
if ( fn ) {
// Add a progress sentinel to prevent the fx queue from being
// automatically dequeued
if ( type === "fx" ) {
queue.unshift("inprogress");
}
 
fn.call(elem, function() {
jQuery.dequeue(elem, type);
});
}
}
});
 
jQuery.fn.extend({
queue: function( type, data ) {
if ( typeof type !== "string" ) {
data = type;
type = "fx";
}
 
if ( data === undefined ) {
return jQuery.queue( this[0], type );
}
return this.each(function( i ) {
var queue = jQuery.queue( this, type, data );
 
if ( type === "fx" && queue[0] !== "inprogress" ) {
jQuery.dequeue( this, type );
}
});
},
dequeue: function( type ) {
return this.each(function() {
jQuery.dequeue( this, type );
});
},
 
// Based off of the plugin by Clint Helfers, with permission.
// http://blindsignals.com/index.php/2009/07/jquery-delay/
delay: function( time, type ) {
time = jQuery.fx ? jQuery.fx.speeds[time] || time : time;
type = type || "fx";
 
return this.queue( type, function() {
var elem = this;
setTimeout(function() {
jQuery.dequeue( elem, type );
}, time );
});
},
 
clearQueue: function( type ) {
return this.queue( type || "fx", [] );
}
});
 
 
 
 
var rclass = /[\n\t]/g,
rspaces = /\s+/,
rreturn = /\r/g,
rspecialurl = /^(?:href|src|style)$/,
rtype = /^(?:button|input)$/i,
rfocusable = /^(?:button|input|object|select|textarea)$/i,
rclickable = /^a(?:rea)?$/i,
rradiocheck = /^(?:radio|checkbox)$/i;
 
jQuery.props = {
"for": "htmlFor",
"class": "className",
readonly: "readOnly",
maxlength: "maxLength",
cellspacing: "cellSpacing",
rowspan: "rowSpan",
colspan: "colSpan",
tabindex: "tabIndex",
usemap: "useMap",
frameborder: "frameBorder"
};
 
jQuery.fn.extend({
attr: function( name, value ) {
return jQuery.access( this, name, value, true, jQuery.attr );
},
 
removeAttr: function( name, fn ) {
return this.each(function(){
jQuery.attr( this, name, "" );
if ( this.nodeType === 1 ) {
this.removeAttribute( name );
}
});
},
 
addClass: function( value ) {
if ( jQuery.isFunction(value) ) {
return this.each(function(i) {
var self = jQuery(this);
self.addClass( value.call(this, i, self.attr("class")) );
});
}
 
if ( value && typeof value === "string" ) {
var classNames = (value || "").split( rspaces );
 
for ( var i = 0, l = this.length; i < l; i++ ) {
var elem = this[i];
 
if ( elem.nodeType === 1 ) {
if ( !elem.className ) {
elem.className = value;
 
} else {
var className = " " + elem.className + " ",
setClass = elem.className;
 
for ( var c = 0, cl = classNames.length; c < cl; c++ ) {
if ( className.indexOf( " " + classNames[c] + " " ) < 0 ) {
setClass += " " + classNames[c];
}
}
elem.className = jQuery.trim( setClass );
}
}
}
}
 
return this;
},
 
removeClass: function( value ) {
if ( jQuery.isFunction(value) ) {
return this.each(function(i) {
var self = jQuery(this);
self.removeClass( value.call(this, i, self.attr("class")) );
});
}
 
if ( (value && typeof value === "string") || value === undefined ) {
var classNames = (value || "").split( rspaces );
 
for ( var i = 0, l = this.length; i < l; i++ ) {
var elem = this[i];
 
if ( elem.nodeType === 1 && elem.className ) {
if ( value ) {
var className = (" " + elem.className + " ").replace(rclass, " ");
for ( var c = 0, cl = classNames.length; c < cl; c++ ) {
className = className.replace(" " + classNames[c] + " ", " ");
}
elem.className = jQuery.trim( className );
 
} else {
elem.className = "";
}
}
}
}
 
return this;
},
 
toggleClass: function( value, stateVal ) {
var type = typeof value,
isBool = typeof stateVal === "boolean";
 
if ( jQuery.isFunction( value ) ) {
return this.each(function(i) {
var self = jQuery(this);
self.toggleClass( value.call(this, i, self.attr("class"), stateVal), stateVal );
});
}
 
return this.each(function() {
if ( type === "string" ) {
// toggle individual class names
var className,
i = 0,
self = jQuery( this ),
state = stateVal,
classNames = value.split( rspaces );
 
while ( (className = classNames[ i++ ]) ) {
// check each className given, space seperated list
state = isBool ? state : !self.hasClass( className );
self[ state ? "addClass" : "removeClass" ]( className );
}
 
} else if ( type === "undefined" || type === "boolean" ) {
if ( this.className ) {
// store className if set
jQuery.data( this, "__className__", this.className );
}
 
// toggle whole className
this.className = this.className || value === false ? "" : jQuery.data( this, "__className__" ) || "";
}
});
},
 
hasClass: function( selector ) {
var className = " " + selector + " ";
for ( var i = 0, l = this.length; i < l; i++ ) {
if ( (" " + this[i].className + " ").replace(rclass, " ").indexOf( className ) > -1 ) {
return true;
}
}
 
return false;
},
 
val: function( value ) {
if ( !arguments.length ) {
var elem = this[0];
 
if ( elem ) {
if ( jQuery.nodeName( elem, "option" ) ) {
// attributes.value is undefined in Blackberry 4.7 but
// uses .value. See #6932
var val = elem.attributes.value;
return !val || val.specified ? elem.value : elem.text;
}
 
// We need to handle select boxes special
if ( jQuery.nodeName( elem, "select" ) ) {
var index = elem.selectedIndex,
values = [],
options = elem.options,
one = elem.type === "select-one";
 
// Nothing was selected
if ( index < 0 ) {
return null;
}
 
// Loop through all the selected options
for ( var i = one ? index : 0, max = one ? index + 1 : options.length; i < max; i++ ) {
var option = options[ i ];
 
// Don't return options that are disabled or in a disabled optgroup
if ( option.selected && (jQuery.support.optDisabled ? !option.disabled : option.getAttribute("disabled") === null) &&
(!option.parentNode.disabled || !jQuery.nodeName( option.parentNode, "optgroup" )) ) {
 
// Get the specific value for the option
value = jQuery(option).val();
 
// We don't need an array for one selects
if ( one ) {
return value;
}
 
// Multi-Selects return an array
values.push( value );
}
}
 
return values;
}
 
// Handle the case where in Webkit "" is returned instead of "on" if a value isn't specified
if ( rradiocheck.test( elem.type ) && !jQuery.support.checkOn ) {
return elem.getAttribute("value") === null ? "on" : elem.value;
}
 
// Everything else, we just grab the value
return (elem.value || "").replace(rreturn, "");
 
}
 
return undefined;
}
 
var isFunction = jQuery.isFunction(value);
 
return this.each(function(i) {
var self = jQuery(this), val = value;
 
if ( this.nodeType !== 1 ) {
return;
}
 
if ( isFunction ) {
val = value.call(this, i, self.val());
}
 
// Treat null/undefined as ""; convert numbers to string
if ( val == null ) {
val = "";
} else if ( typeof val === "number" ) {
val += "";
} else if ( jQuery.isArray(val) ) {
val = jQuery.map(val, function (value) {
return value == null ? "" : value + "";
});
}
 
if ( jQuery.isArray(val) && rradiocheck.test( this.type ) ) {
this.checked = jQuery.inArray( self.val(), val ) >= 0;
 
} else if ( jQuery.nodeName( this, "select" ) ) {
var values = jQuery.makeArray(val);
 
jQuery( "option", this ).each(function() {
this.selected = jQuery.inArray( jQuery(this).val(), values ) >= 0;
});
 
if ( !values.length ) {
this.selectedIndex = -1;
}
 
} else {
this.value = val;
}
});
}
});
 
jQuery.extend({
attrFn: {
val: true,
css: true,
html: true,
text: true,
data: true,
width: true,
height: true,
offset: true
},
attr: function( elem, name, value, pass ) {
// don't set attributes on text and comment nodes
if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) {
return undefined;
}
 
if ( pass && name in jQuery.attrFn ) {
return jQuery(elem)[name](value);
}
 
var notxml = elem.nodeType !== 1 || !jQuery.isXMLDoc( elem ),
// Whether we are setting (or getting)
set = value !== undefined;
 
// Try to normalize/fix the name
name = notxml && jQuery.props[ name ] || name;
 
// These attributes require special treatment
var special = rspecialurl.test( name );
 
// Safari mis-reports the default selected property of an option
// Accessing the parent's selectedIndex property fixes it
if ( name === "selected" && !jQuery.support.optSelected ) {
var parent = elem.parentNode;
if ( parent ) {
parent.selectedIndex;
 
// Make sure that it also works with optgroups, see #5701
if ( parent.parentNode ) {
parent.parentNode.selectedIndex;
}
}
}
 
// If applicable, access the attribute via the DOM 0 way
// 'in' checks fail in Blackberry 4.7 #6931
if ( (name in elem || elem[ name ] !== undefined) && notxml && !special ) {
if ( set ) {
// We can't allow the type property to be changed (since it causes problems in IE)
if ( name === "type" && rtype.test( elem.nodeName ) && elem.parentNode ) {
jQuery.error( "type property can't be changed" );
}
 
if ( value === null ) {
if ( elem.nodeType === 1 ) {
elem.removeAttribute( name );
}
 
} else {
elem[ name ] = value;
}
}
 
// browsers index elements by id/name on forms, give priority to attributes.
if ( jQuery.nodeName( elem, "form" ) && elem.getAttributeNode(name) ) {
return elem.getAttributeNode( name ).nodeValue;
}
 
// elem.tabIndex doesn't always return the correct value when it hasn't been explicitly set
// http://fluidproject.org/blog/2008/01/09/getting-setting-and-removing-tabindex-values-with-javascript/
if ( name === "tabIndex" ) {
var attributeNode = elem.getAttributeNode( "tabIndex" );
 
return attributeNode && attributeNode.specified ?
attributeNode.value :
rfocusable.test( elem.nodeName ) || rclickable.test( elem.nodeName ) && elem.href ?
0 :
undefined;
}
 
return elem[ name ];
}
 
if ( !jQuery.support.style && notxml && name === "style" ) {
if ( set ) {
elem.style.cssText = "" + value;
}
 
return elem.style.cssText;
}
 
if ( set ) {
// convert the value to a string (all browsers do this but IE) see #1070
elem.setAttribute( name, "" + value );
}
 
// Ensure that missing attributes return undefined
// Blackberry 4.7 returns "" from getAttribute #6938
if ( !elem.attributes[ name ] && (elem.hasAttribute && !elem.hasAttribute( name )) ) {
return undefined;
}
 
var attr = !jQuery.support.hrefNormalized && notxml && special ?
// Some attributes require a special call on IE
elem.getAttribute( name, 2 ) :
elem.getAttribute( name );
 
// Non-existent attributes return null, we normalize to undefined
return attr === null ? undefined : attr;
}
});
 
 
 
 
var rnamespaces = /\.(.*)$/,
rformElems = /^(?:textarea|input|select)$/i,
rperiod = /\./g,
rspace = / /g,
rescape = /[^\w\s.|`]/g,
fcleanup = function( nm ) {
return nm.replace(rescape, "\\$&");
},
focusCounts = { focusin: 0, focusout: 0 };
 
/*
* A number of helper functions used for managing events.
* Many of the ideas behind this code originated from
* Dean Edwards' addEvent library.
*/
jQuery.event = {
 
// Bind an event to an element
// Original by Dean Edwards
add: function( elem, types, handler, data ) {
if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
return;
}
 
// For whatever reason, IE has trouble passing the window object
// around, causing it to be cloned in the process
if ( jQuery.isWindow( elem ) && ( elem !== window && !elem.frameElement ) ) {
elem = window;
}
 
if ( handler === false ) {
handler = returnFalse;
} else if ( !handler ) {
// Fixes bug #7229. Fix recommended by jdalton
return;
}
 
var handleObjIn, handleObj;
 
if ( handler.handler ) {
handleObjIn = handler;
handler = handleObjIn.handler;
}
 
// Make sure that the function being executed has a unique ID
if ( !handler.guid ) {
handler.guid = jQuery.guid++;
}
 
// Init the element's event structure
var elemData = jQuery.data( elem );
 
// If no elemData is found then we must be trying to bind to one of the
// banned noData elements
if ( !elemData ) {
return;
}
 
// Use a key less likely to result in collisions for plain JS objects.
// Fixes bug #7150.
var eventKey = elem.nodeType ? "events" : "__events__",
events = elemData[ eventKey ],
eventHandle = elemData.handle;
if ( typeof events === "function" ) {
// On plain objects events is a fn that holds the the data
// which prevents this data from being JSON serialized
// the function does not need to be called, it just contains the data
eventHandle = events.handle;
events = events.events;
 
} else if ( !events ) {
if ( !elem.nodeType ) {
// On plain objects, create a fn that acts as the holder
// of the values to avoid JSON serialization of event data
elemData[ eventKey ] = elemData = function(){};
}
 
elemData.events = events = {};
}
 
if ( !eventHandle ) {
elemData.handle = eventHandle = function() {
// Handle the second event of a trigger and when
// an event is called after a page has unloaded
return typeof jQuery !== "undefined" && !jQuery.event.triggered ?
jQuery.event.handle.apply( eventHandle.elem, arguments ) :
undefined;
};
}
 
// Add elem as a property of the handle function
// This is to prevent a memory leak with non-native events in IE.
eventHandle.elem = elem;
 
// Handle multiple events separated by a space
// jQuery(...).bind("mouseover mouseout", fn);
types = types.split(" ");
 
var type, i = 0, namespaces;
 
while ( (type = types[ i++ ]) ) {
handleObj = handleObjIn ?
jQuery.extend({}, handleObjIn) :
{ handler: handler, data: data };
 
// Namespaced event handlers
if ( type.indexOf(".") > -1 ) {
namespaces = type.split(".");
type = namespaces.shift();
handleObj.namespace = namespaces.slice(0).sort().join(".");
 
} else {
namespaces = [];
handleObj.namespace = "";
}
 
handleObj.type = type;
if ( !handleObj.guid ) {
handleObj.guid = handler.guid;
}
 
// Get the current list of functions bound to this event
var handlers = events[ type ],
special = jQuery.event.special[ type ] || {};
 
// Init the event handler queue
if ( !handlers ) {
handlers = events[ type ] = [];
 
// Check for a special event handler
// Only use addEventListener/attachEvent if the special
// events handler returns false
if ( !special.setup || special.setup.call( elem, data, namespaces, eventHandle ) === false ) {
// Bind the global event handler to the element
if ( elem.addEventListener ) {
elem.addEventListener( type, eventHandle, false );
 
} else if ( elem.attachEvent ) {
elem.attachEvent( "on" + type, eventHandle );
}
}
}
if ( special.add ) {
special.add.call( elem, handleObj );
 
if ( !handleObj.handler.guid ) {
handleObj.handler.guid = handler.guid;
}
}
 
// Add the function to the element's handler list
handlers.push( handleObj );
 
// Keep track of which events have been used, for global triggering
jQuery.event.global[ type ] = true;
}
 
// Nullify elem to prevent memory leaks in IE
elem = null;
},
 
global: {},
 
// Detach an event or set of events from an element
remove: function( elem, types, handler, pos ) {
// don't do events on text and comment nodes
if ( elem.nodeType === 3 || elem.nodeType === 8 ) {
return;
}
 
if ( handler === false ) {
handler = returnFalse;
}
 
var ret, type, fn, j, i = 0, all, namespaces, namespace, special, eventType, handleObj, origType,
eventKey = elem.nodeType ? "events" : "__events__",
elemData = jQuery.data( elem ),
events = elemData && elemData[ eventKey ];
 
if ( !elemData || !events ) {
return;
}
if ( typeof events === "function" ) {
elemData = events;
events = events.events;
}
 
// types is actually an event object here
if ( types && types.type ) {
handler = types.handler;
types = types.type;
}
 
// Unbind all events for the element
if ( !types || typeof types === "string" && types.charAt(0) === "." ) {
types = types || "";
 
for ( type in events ) {
jQuery.event.remove( elem, type + types );
}
 
return;
}
 
// Handle multiple events separated by a space
// jQuery(...).unbind("mouseover mouseout", fn);
types = types.split(" ");
 
while ( (type = types[ i++ ]) ) {
origType = type;
handleObj = null;
all = type.indexOf(".") < 0;
namespaces = [];
 
if ( !all ) {
// Namespaced event handlers
namespaces = type.split(".");
type = namespaces.shift();
 
namespace = new RegExp("(^|\\.)" +
jQuery.map( namespaces.slice(0).sort(), fcleanup ).join("\\.(?:.*\\.)?") + "(\\.|$)");
}
 
eventType = events[ type ];
 
if ( !eventType ) {
continue;
}
 
if ( !handler ) {
for ( j = 0; j < eventType.length; j++ ) {
handleObj = eventType[ j ];
 
if ( all || namespace.test( handleObj.namespace ) ) {
jQuery.event.remove( elem, origType, handleObj.handler, j );
eventType.splice( j--, 1 );
}
}
 
continue;
}
 
special = jQuery.event.special[ type ] || {};
 
for ( j = pos || 0; j < eventType.length; j++ ) {
handleObj = eventType[ j ];
 
if ( handler.guid === handleObj.guid ) {
// remove the given handler for the given type
if ( all || namespace.test( handleObj.namespace ) ) {
if ( pos == null ) {
eventType.splice( j--, 1 );
}
 
if ( special.remove ) {
special.remove.call( elem, handleObj );
}
}
 
if ( pos != null ) {
break;
}
}
}
 
// remove generic event handler if no more handlers exist
if ( eventType.length === 0 || pos != null && eventType.length === 1 ) {
if ( !special.teardown || special.teardown.call( elem, namespaces ) === false ) {
jQuery.removeEvent( elem, type, elemData.handle );
}
 
ret = null;
delete events[ type ];
}
}
 
// Remove the expando if it's no longer used
if ( jQuery.isEmptyObject( events ) ) {
var handle = elemData.handle;
if ( handle ) {
handle.elem = null;
}
 
delete elemData.events;
delete elemData.handle;
 
if ( typeof elemData === "function" ) {
jQuery.removeData( elem, eventKey );
 
} else if ( jQuery.isEmptyObject( elemData ) ) {
jQuery.removeData( elem );
}
}
},
 
// bubbling is internal
trigger: function( event, data, elem /*, bubbling */ ) {
// Event object or event type
var type = event.type || event,
bubbling = arguments[3];
 
if ( !bubbling ) {
event = typeof event === "object" ?
// jQuery.Event object
event[ jQuery.expando ] ? event :
// Object literal
jQuery.extend( jQuery.Event(type), event ) :
// Just the event type (string)
jQuery.Event(type);
 
if ( type.indexOf("!") >= 0 ) {
event.type = type = type.slice(0, -1);
event.exclusive = true;
}
 
// Handle a global trigger
if ( !elem ) {
// Don't bubble custom events when global (to avoid too much overhead)
event.stopPropagation();
 
// Only trigger if we've ever bound an event for it
if ( jQuery.event.global[ type ] ) {
jQuery.each( jQuery.cache, function() {
if ( this.events && this.events[type] ) {
jQuery.event.trigger( event, data, this.handle.elem );
}
});
}
}
 
// Handle triggering a single element
 
// don't do events on text and comment nodes
if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 ) {
return undefined;
}
 
// Clean up in case it is reused
event.result = undefined;
event.target = elem;
 
// Clone the incoming data, if any
data = jQuery.makeArray( data );
data.unshift( event );
}
 
event.currentTarget = elem;
 
// Trigger the event, it is assumed that "handle" is a function
var handle = elem.nodeType ?
jQuery.data( elem, "handle" ) :
(jQuery.data( elem, "__events__" ) || {}).handle;
 
if ( handle ) {
handle.apply( elem, data );
}
 
var parent = elem.parentNode || elem.ownerDocument;
 
// Trigger an inline bound script
try {
if ( !(elem && elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()]) ) {
if ( elem[ "on" + type ] && elem[ "on" + type ].apply( elem, data ) === false ) {
event.result = false;
event.preventDefault();
}
}
 
// prevent IE from throwing an error for some elements with some event types, see #3533
} catch (inlineError) {}
 
if ( !event.isPropagationStopped() && parent ) {
jQuery.event.trigger( event, data, parent, true );
 
} else if ( !event.isDefaultPrevented() ) {
var old,
target = event.target,
targetType = type.replace( rnamespaces, "" ),
isClick = jQuery.nodeName( target, "a" ) && targetType === "click",
special = jQuery.event.special[ targetType ] || {};
 
if ( (!special._default || special._default.call( elem, event ) === false) &&
!isClick && !(target && target.nodeName && jQuery.noData[target.nodeName.toLowerCase()]) ) {
 
try {
if ( target[ targetType ] ) {
// Make sure that we don't accidentally re-trigger the onFOO events
old = target[ "on" + targetType ];
 
if ( old ) {
target[ "on" + targetType ] = null;
}
 
jQuery.event.triggered = true;
target[ targetType ]();
}
 
// prevent IE from throwing an error for some elements with some event types, see #3533
} catch (triggerError) {}
 
if ( old ) {
target[ "on" + targetType ] = old;
}
 
jQuery.event.triggered = false;
}
}
},
 
handle: function( event ) {
var all, handlers, namespaces, namespace_re, events,
namespace_sort = [],
args = jQuery.makeArray( arguments );
 
event = args[0] = jQuery.event.fix( event || window.event );
event.currentTarget = this;
 
// Namespaced event handlers
all = event.type.indexOf(".") < 0 && !event.exclusive;
 
if ( !all ) {
namespaces = event.type.split(".");
event.type = namespaces.shift();
namespace_sort = namespaces.slice(0).sort();
namespace_re = new RegExp("(^|\\.)" + namespace_sort.join("\\.(?:.*\\.)?") + "(\\.|$)");
}
 
event.namespace = event.namespace || namespace_sort.join(".");
 
events = jQuery.data(this, this.nodeType ? "events" : "__events__");
 
if ( typeof events === "function" ) {
events = events.events;
}
 
handlers = (events || {})[ event.type ];
 
if ( events && handlers ) {
// Clone the handlers to prevent manipulation
handlers = handlers.slice(0);
 
for ( var j = 0, l = handlers.length; j < l; j++ ) {
var handleObj = handlers[ j ];
 
// Filter the functions by class
if ( all || namespace_re.test( handleObj.namespace ) ) {
// Pass in a reference to the handler function itself
// So that we can later remove it
event.handler = handleObj.handler;
event.data = handleObj.data;
event.handleObj = handleObj;
var ret = handleObj.handler.apply( this, args );
 
if ( ret !== undefined ) {
event.result = ret;
if ( ret === false ) {
event.preventDefault();
event.stopPropagation();
}
}
 
if ( event.isImmediatePropagationStopped() ) {
break;
}
}
}
}
 
return event.result;
},
 
props: "altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
 
fix: function( event ) {
if ( event[ jQuery.expando ] ) {
return event;
}
 
// store a copy of the original event object
// and "clone" to set read-only properties
var originalEvent = event;
event = jQuery.Event( originalEvent );
 
for ( var i = this.props.length, prop; i; ) {
prop = this.props[ --i ];
event[ prop ] = originalEvent[ prop ];
}
 
// Fix target property, if necessary
if ( !event.target ) {
// Fixes #1925 where srcElement might not be defined either
event.target = event.srcElement || document;
}
 
// check if target is a textnode (safari)
if ( event.target.nodeType === 3 ) {
event.target = event.target.parentNode;
}
 
// Add relatedTarget, if necessary
if ( !event.relatedTarget && event.fromElement ) {
event.relatedTarget = event.fromElement === event.target ? event.toElement : event.fromElement;
}
 
// Calculate pageX/Y if missing and clientX/Y available
if ( event.pageX == null && event.clientX != null ) {
var doc = document.documentElement,
body = document.body;
 
event.pageX = event.clientX + (doc && doc.scrollLeft || body && body.scrollLeft || 0) - (doc && doc.clientLeft || body && body.clientLeft || 0);
event.pageY = event.clientY + (doc && doc.scrollTop || body && body.scrollTop || 0) - (doc && doc.clientTop || body && body.clientTop || 0);
}
 
// Add which for key events
if ( event.which == null && (event.charCode != null || event.keyCode != null) ) {
event.which = event.charCode != null ? event.charCode : event.keyCode;
}
 
// Add metaKey to non-Mac browsers (use ctrl for PC's and Meta for Macs)
if ( !event.metaKey && event.ctrlKey ) {
event.metaKey = event.ctrlKey;
}
 
// Add which for click: 1 === left; 2 === middle; 3 === right
// Note: button is not normalized, so don't use it
if ( !event.which && event.button !== undefined ) {
event.which = (event.button & 1 ? 1 : ( event.button & 2 ? 3 : ( event.button & 4 ? 2 : 0 ) ));
}
 
return event;
},
 
// Deprecated, use jQuery.guid instead
guid: 1E8,
 
// Deprecated, use jQuery.proxy instead
proxy: jQuery.proxy,
 
special: {
ready: {
// Make sure the ready event is setup
setup: jQuery.bindReady,
teardown: jQuery.noop
},
 
live: {
add: function( handleObj ) {
jQuery.event.add( this,
liveConvert( handleObj.origType, handleObj.selector ),
jQuery.extend({}, handleObj, {handler: liveHandler, guid: handleObj.handler.guid}) );
},
 
remove: function( handleObj ) {
jQuery.event.remove( this, liveConvert( handleObj.origType, handleObj.selector ), handleObj );
}
},
 
beforeunload: {
setup: function( data, namespaces, eventHandle ) {
// We only want to do this special case on windows
if ( jQuery.isWindow( this ) ) {
this.onbeforeunload = eventHandle;
}
},
 
teardown: function( namespaces, eventHandle ) {
if ( this.onbeforeunload === eventHandle ) {
this.onbeforeunload = null;
}
}
}
}
};
 
jQuery.removeEvent = document.removeEventListener ?
function( elem, type, handle ) {
if ( elem.removeEventListener ) {
elem.removeEventListener( type, handle, false );
}
} :
function( elem, type, handle ) {
if ( elem.detachEvent ) {
elem.detachEvent( "on" + type, handle );
}
};
 
jQuery.Event = function( src ) {
// Allow instantiation without the 'new' keyword
if ( !this.preventDefault ) {
return new jQuery.Event( src );
}
 
// Event object
if ( src && src.type ) {
this.originalEvent = src;
this.type = src.type;
// Event type
} else {
this.type = src;
}
 
// timeStamp is buggy for some events on Firefox(#3843)
// So we won't rely on the native value
this.timeStamp = jQuery.now();
 
// Mark it as fixed
this[ jQuery.expando ] = true;
};
 
function returnFalse() {
return false;
}
function returnTrue() {
return true;
}
 
// jQuery.Event is based on DOM3 Events as specified by the ECMAScript Language Binding
// http://www.w3.org/TR/2003/WD-DOM-Level-3-Events-20030331/ecma-script-binding.html
jQuery.Event.prototype = {
preventDefault: function() {
this.isDefaultPrevented = returnTrue;
 
var e = this.originalEvent;
if ( !e ) {
return;
}
// if preventDefault exists run it on the original event
if ( e.preventDefault ) {
e.preventDefault();
 
// otherwise set the returnValue property of the original event to false (IE)
} else {
e.returnValue = false;
}
},
stopPropagation: function() {
this.isPropagationStopped = returnTrue;
 
var e = this.originalEvent;
if ( !e ) {
return;
}
// if stopPropagation exists run it on the original event
if ( e.stopPropagation ) {
e.stopPropagation();
}
// otherwise set the cancelBubble property of the original event to true (IE)
e.cancelBubble = true;
},
stopImmediatePropagation: function() {
this.isImmediatePropagationStopped = returnTrue;
this.stopPropagation();
},
isDefaultPrevented: returnFalse,
isPropagationStopped: returnFalse,
isImmediatePropagationStopped: returnFalse
};
 
// Checks if an event happened on an element within another element
// Used in jQuery.event.special.mouseenter and mouseleave handlers
var withinElement = function( event ) {
// Check if mouse(over|out) are still within the same parent element
var parent = event.relatedTarget;
 
// Firefox sometimes assigns relatedTarget a XUL element
// which we cannot access the parentNode property of
try {
// Traverse up the tree
while ( parent && parent !== this ) {
parent = parent.parentNode;
}
 
if ( parent !== this ) {
// set the correct event type
event.type = event.data;
 
// handle event if we actually just moused on to a non sub-element
jQuery.event.handle.apply( this, arguments );
}
 
// assuming we've left the element since we most likely mousedover a xul element
} catch(e) { }
},
 
// In case of event delegation, we only need to rename the event.type,
// liveHandler will take care of the rest.
delegate = function( event ) {
event.type = event.data;
jQuery.event.handle.apply( this, arguments );
};
 
// Create mouseenter and mouseleave events
jQuery.each({
mouseenter: "mouseover",
mouseleave: "mouseout"
}, function( orig, fix ) {
jQuery.event.special[ orig ] = {
setup: function( data ) {
jQuery.event.add( this, fix, data && data.selector ? delegate : withinElement, orig );
},
teardown: function( data ) {
jQuery.event.remove( this, fix, data && data.selector ? delegate : withinElement );
}
};
});
 
// submit delegation
if ( !jQuery.support.submitBubbles ) {
 
jQuery.event.special.submit = {
setup: function( data, namespaces ) {
if ( this.nodeName.toLowerCase() !== "form" ) {
jQuery.event.add(this, "click.specialSubmit", function( e ) {
var elem = e.target,
type = elem.type;
 
if ( (type === "submit" || type === "image") && jQuery( elem ).closest("form").length ) {
e.liveFired = undefined;
return trigger( "submit", this, arguments );
}
});
jQuery.event.add(this, "keypress.specialSubmit", function( e ) {
var elem = e.target,
type = elem.type;
 
if ( (type === "text" || type === "password") && jQuery( elem ).closest("form").length && e.keyCode === 13 ) {
e.liveFired = undefined;
return trigger( "submit", this, arguments );
}
});
 
} else {
return false;
}
},
 
teardown: function( namespaces ) {
jQuery.event.remove( this, ".specialSubmit" );
}
};
 
}
 
// change delegation, happens here so we have bind.
if ( !jQuery.support.changeBubbles ) {
 
var changeFilters,
 
getVal = function( elem ) {
var type = elem.type, val = elem.value;
 
if ( type === "radio" || type === "checkbox" ) {
val = elem.checked;
 
} else if ( type === "select-multiple" ) {
val = elem.selectedIndex > -1 ?
jQuery.map( elem.options, function( elem ) {
return elem.selected;
}).join("-") :
"";
 
} else if ( elem.nodeName.toLowerCase() === "select" ) {
val = elem.selectedIndex;
}
 
return val;
},
 
testChange = function testChange( e ) {
var elem = e.target, data, val;
 
if ( !rformElems.test( elem.nodeName ) || elem.readOnly ) {
return;
}
 
data = jQuery.data( elem, "_change_data" );
val = getVal(elem);
 
// the current data will be also retrieved by beforeactivate
if ( e.type !== "focusout" || elem.type !== "radio" ) {
jQuery.data( elem, "_change_data", val );
}
if ( data === undefined || val === data ) {
return;
}
 
if ( data != null || val ) {
e.type = "change";
e.liveFired = undefined;
return jQuery.event.trigger( e, arguments[1], elem );
}
};
 
jQuery.event.special.change = {
filters: {
focusout: testChange,
 
beforedeactivate: testChange,
 
click: function( e ) {
var elem = e.target, type = elem.type;
 
if ( type === "radio" || type === "checkbox" || elem.nodeName.toLowerCase() === "select" ) {
return testChange.call( this, e );
}
},
 
// Change has to be called before submit
// Keydown will be called before keypress, which is used in submit-event delegation
keydown: function( e ) {
var elem = e.target, type = elem.type;
 
if ( (e.keyCode === 13 && elem.nodeName.toLowerCase() !== "textarea") ||
(e.keyCode === 32 && (type === "checkbox" || type === "radio")) ||
type === "select-multiple" ) {
return testChange.call( this, e );
}
},
 
// Beforeactivate happens also before the previous element is blurred
// with this event you can't trigger a change event, but you can store
// information
beforeactivate: function( e ) {
var elem = e.target;
jQuery.data( elem, "_change_data", getVal(elem) );
}
},
 
setup: function( data, namespaces ) {
if ( this.type === "file" ) {
return false;
}
 
for ( var type in changeFilters ) {
jQuery.event.add( this, type + ".specialChange", changeFilters[type] );
}
 
return rformElems.test( this.nodeName );
},
 
teardown: function( namespaces ) {
jQuery.event.remove( this, ".specialChange" );
 
return rformElems.test( this.nodeName );
}
};
 
changeFilters = jQuery.event.special.change.filters;
 
// Handle when the input is .focus()'d
changeFilters.focus = changeFilters.beforeactivate;
}
 
function trigger( type, elem, args ) {
args[0].type = type;
return jQuery.event.handle.apply( elem, args );
}
 
// Create "bubbling" focus and blur events
if ( document.addEventListener ) {
jQuery.each({ focus: "focusin", blur: "focusout" }, function( orig, fix ) {
jQuery.event.special[ fix ] = {
setup: function() {
if ( focusCounts[fix]++ === 0 ) {
document.addEventListener( orig, handler, true );
}
},
teardown: function() {
if ( --focusCounts[fix] === 0 ) {
document.removeEventListener( orig, handler, true );
}
}
};
 
function handler( e ) {
e = jQuery.event.fix( e );
e.type = fix;
return jQuery.event.trigger( e, null, e.target );
}
});
}
 
jQuery.each(["bind", "one"], function( i, name ) {
jQuery.fn[ name ] = function( type, data, fn ) {
// Handle object literals
if ( typeof type === "object" ) {
for ( var key in type ) {
this[ name ](key, data, type[key], fn);
}
return this;
}
if ( jQuery.isFunction( data ) || data === false ) {
fn = data;
data = undefined;
}
 
var handler = name === "one" ? jQuery.proxy( fn, function( event ) {
jQuery( this ).unbind( event, handler );
return fn.apply( this, arguments );
}) : fn;
 
if ( type === "unload" && name !== "one" ) {
this.one( type, data, fn );
 
} else {
for ( var i = 0, l = this.length; i < l; i++ ) {
jQuery.event.add( this[i], type, handler, data );
}
}
 
return this;
};
});
 
jQuery.fn.extend({
unbind: function( type, fn ) {
// Handle object literals
if ( typeof type === "object" && !type.preventDefault ) {
for ( var key in type ) {
this.unbind(key, type[key]);
}
 
} else {
for ( var i = 0, l = this.length; i < l; i++ ) {
jQuery.event.remove( this[i], type, fn );
}
}
 
return this;
},
delegate: function( selector, types, data, fn ) {
return this.live( types, data, fn, selector );
},
undelegate: function( selector, types, fn ) {
if ( arguments.length === 0 ) {
return this.unbind( "live" );
} else {
return this.die( types, null, fn, selector );
}
},
trigger: function( type, data ) {
return this.each(function() {
jQuery.event.trigger( type, data, this );
});
},
 
triggerHandler: function( type, data ) {
if ( this[0] ) {
var event = jQuery.Event( type );
event.preventDefault();
event.stopPropagation();
jQuery.event.trigger( event, data, this[0] );
return event.result;
}
},
 
toggle: function( fn ) {
// Save reference to arguments for access in closure
var args = arguments,
i = 1;
 
// link all the functions, so any of them can unbind this click handler
while ( i < args.length ) {
jQuery.proxy( fn, args[ i++ ] );
}
 
return this.click( jQuery.proxy( fn, function( event ) {
// Figure out which function to execute
var lastToggle = ( jQuery.data( this, "lastToggle" + fn.guid ) || 0 ) % i;
jQuery.data( this, "lastToggle" + fn.guid, lastToggle + 1 );
 
// Make sure that clicks stop
event.preventDefault();
 
// and execute the function
return args[ lastToggle ].apply( this, arguments ) || false;
}));
},
 
hover: function( fnOver, fnOut ) {
return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver );
}
});
 
var liveMap = {
focus: "focusin",
blur: "focusout",
mouseenter: "mouseover",
mouseleave: "mouseout"
};
 
jQuery.each(["live", "die"], function( i, name ) {
jQuery.fn[ name ] = function( types, data, fn, origSelector /* Internal Use Only */ ) {
var type, i = 0, match, namespaces, preType,
selector = origSelector || this.selector,
context = origSelector ? this : jQuery( this.context );
if ( typeof types === "object" && !types.preventDefault ) {
for ( var key in types ) {
context[ name ]( key, data, types[key], selector );
}
return this;
}
 
if ( jQuery.isFunction( data ) ) {
fn = data;
data = undefined;
}
 
types = (types || "").split(" ");
 
while ( (type = types[ i++ ]) != null ) {
match = rnamespaces.exec( type );
namespaces = "";
 
if ( match ) {
namespaces = match[0];
type = type.replace( rnamespaces, "" );
}
 
if ( type === "hover" ) {
types.push( "mouseenter" + namespaces, "mouseleave" + namespaces );
continue;
}
 
preType = type;
 
if ( type === "focus" || type === "blur" ) {
types.push( liveMap[ type ] + namespaces );
type = type + namespaces;
 
} else {
type = (liveMap[ type ] || type) + namespaces;
}
 
if ( name === "live" ) {
// bind live handler
for ( var j = 0, l = context.length; j < l; j++ ) {
jQuery.event.add( context[j], "live." + liveConvert( type, selector ),
{ data: data, selector: selector, handler: fn, origType: type, origHandler: fn, preType: preType } );
}
 
} else {
// unbind live handler
context.unbind( "live." + liveConvert( type, selector ), fn );
}
}
return this;
};
});
 
function liveHandler( event ) {
var stop, maxLevel, related, match, handleObj, elem, j, i, l, data, close, namespace, ret,
elems = [],
selectors = [],
events = jQuery.data( this, this.nodeType ? "events" : "__events__" );
 
if ( typeof events === "function" ) {
events = events.events;
}
 
// Make sure we avoid non-left-click bubbling in Firefox (#3861)
if ( event.liveFired === this || !events || !events.live || event.button && event.type === "click" ) {
return;
}
if ( event.namespace ) {
namespace = new RegExp("(^|\\.)" + event.namespace.split(".").join("\\.(?:.*\\.)?") + "(\\.|$)");
}
 
event.liveFired = this;
 
var live = events.live.slice(0);
 
for ( j = 0; j < live.length; j++ ) {
handleObj = live[j];
 
if ( handleObj.origType.replace( rnamespaces, "" ) === event.type ) {
selectors.push( handleObj.selector );
 
} else {
live.splice( j--, 1 );
}
}
 
match = jQuery( event.target ).closest( selectors, event.currentTarget );
 
for ( i = 0, l = match.length; i < l; i++ ) {
close = match[i];
 
for ( j = 0; j < live.length; j++ ) {
handleObj = live[j];
 
if ( close.selector === handleObj.selector && (!namespace || namespace.test( handleObj.namespace )) ) {
elem = close.elem;
related = null;
 
// Those two events require additional checking
if ( handleObj.preType === "mouseenter" || handleObj.preType === "mouseleave" ) {
event.type = handleObj.preType;
related = jQuery( event.relatedTarget ).closest( handleObj.selector )[0];
}
 
if ( !related || related !== elem ) {
elems.push({ elem: elem, handleObj: handleObj, level: close.level });
}
}
}
}
 
for ( i = 0, l = elems.length; i < l; i++ ) {
match = elems[i];
 
if ( maxLevel && match.level > maxLevel ) {
break;
}
 
event.currentTarget = match.elem;
event.data = match.handleObj.data;
event.handleObj = match.handleObj;
 
ret = match.handleObj.origHandler.apply( match.elem, arguments );
 
if ( ret === false || event.isPropagationStopped() ) {
maxLevel = match.level;
 
if ( ret === false ) {
stop = false;
}
if ( event.isImmediatePropagationStopped() ) {
break;
}
}
}
 
return stop;
}
 
function liveConvert( type, selector ) {
return (type && type !== "*" ? type + "." : "") + selector.replace(rperiod, "`").replace(rspace, "&");
}
 
jQuery.each( ("blur focus focusin focusout load resize scroll unload click dblclick " +
"mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave " +
"change select submit keydown keypress keyup error").split(" "), function( i, name ) {
 
// Handle event binding
jQuery.fn[ name ] = function( data, fn ) {
if ( fn == null ) {
fn = data;
data = null;
}
 
return arguments.length > 0 ?
this.bind( name, data, fn ) :
this.trigger( name );
};
 
if ( jQuery.attrFn ) {
jQuery.attrFn[ name ] = true;
}
});
 
// Prevent memory leaks in IE
// Window isn't included so as not to unbind existing unload events
// More info:
// - http://isaacschlueter.com/2006/10/msie-memory-leaks/
if ( window.attachEvent && !window.addEventListener ) {
jQuery(window).bind("unload", function() {
for ( var id in jQuery.cache ) {
if ( jQuery.cache[ id ].handle ) {
// Try/Catch is to handle iframes being unloaded, see #4280
try {
jQuery.event.remove( jQuery.cache[ id ].handle.elem );
} catch(e) {}
}
}
});
}
 
 
/*!
* Sizzle CSS Selector Engine - v1.0
* Copyright 2009, The Dojo Foundation
* Released under the MIT, BSD, and GPL Licenses.
* More information: http://sizzlejs.com/
*/
(function(){
 
var chunker = /((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,
done = 0,
toString = Object.prototype.toString,
hasDuplicate = false,
baseHasDuplicate = true;
 
// Here we check if the JavaScript engine is using some sort of
// optimization where it does not always call our comparision
// function. If that is the case, discard the hasDuplicate value.
// Thus far that includes Google Chrome.
[0, 0].sort(function() {
baseHasDuplicate = false;
return 0;
});
 
var Sizzle = function( selector, context, results, seed ) {
results = results || [];
context = context || document;
 
var origContext = context;
 
if ( context.nodeType !== 1 && context.nodeType !== 9 ) {
return [];
}
if ( !selector || typeof selector !== "string" ) {
return results;
}
 
var m, set, checkSet, extra, ret, cur, pop, i,
prune = true,
contextXML = Sizzle.isXML( context ),
parts = [],
soFar = selector;
// Reset the position of the chunker regexp (start from head)
do {
chunker.exec( "" );
m = chunker.exec( soFar );
 
if ( m ) {
soFar = m[3];
parts.push( m[1] );
if ( m[2] ) {
extra = m[3];
break;
}
}
} while ( m );
 
if ( parts.length > 1 && origPOS.exec( selector ) ) {
 
if ( parts.length === 2 && Expr.relative[ parts[0] ] ) {
set = posProcess( parts[0] + parts[1], context );
 
} else {
set = Expr.relative[ parts[0] ] ?
[ context ] :
Sizzle( parts.shift(), context );
 
while ( parts.length ) {
selector = parts.shift();
 
if ( Expr.relative[ selector ] ) {
selector += parts.shift();
}
set = posProcess( selector, set );
}
}
 
} else {
// Take a shortcut and set the context if the root selector is an ID
// (but not if it'll be faster if the inner selector is an ID)
if ( !seed && parts.length > 1 && context.nodeType === 9 && !contextXML &&
Expr.match.ID.test(parts[0]) && !Expr.match.ID.test(parts[parts.length - 1]) ) {
 
ret = Sizzle.find( parts.shift(), context, contextXML );
context = ret.expr ?
Sizzle.filter( ret.expr, ret.set )[0] :
ret.set[0];
}
 
if ( context ) {
ret = seed ?
{ expr: parts.pop(), set: makeArray(seed) } :
Sizzle.find( parts.pop(), parts.length === 1 && (parts[0] === "~" || parts[0] === "+") && context.parentNode ? context.parentNode : context, contextXML );
 
set = ret.expr ?
Sizzle.filter( ret.expr, ret.set ) :
ret.set;
 
if ( parts.length > 0 ) {
checkSet = makeArray( set );
 
} else {
prune = false;
}
 
while ( parts.length ) {
cur = parts.pop();
pop = cur;
 
if ( !Expr.relative[ cur ] ) {
cur = "";
} else {
pop = parts.pop();
}
 
if ( pop == null ) {
pop = context;
}
 
Expr.relative[ cur ]( checkSet, pop, contextXML );
}
 
} else {
checkSet = parts = [];
}
}
 
if ( !checkSet ) {
checkSet = set;
}
 
if ( !checkSet ) {
Sizzle.error( cur || selector );
}
 
if ( toString.call(checkSet) === "[object Array]" ) {
if ( !prune ) {
results.push.apply( results, checkSet );
 
} else if ( context && context.nodeType === 1 ) {
for ( i = 0; checkSet[i] != null; i++ ) {
if ( checkSet[i] && (checkSet[i] === true || checkSet[i].nodeType === 1 && Sizzle.contains(context, checkSet[i])) ) {
results.push( set[i] );
}
}
 
} else {
for ( i = 0; checkSet[i] != null; i++ ) {
if ( checkSet[i] && checkSet[i].nodeType === 1 ) {
results.push( set[i] );
}
}
}
 
} else {
makeArray( checkSet, results );
}
 
if ( extra ) {
Sizzle( extra, origContext, results, seed );
Sizzle.uniqueSort( results );
}
 
return results;
};
 
Sizzle.uniqueSort = function( results ) {
if ( sortOrder ) {
hasDuplicate = baseHasDuplicate;
results.sort( sortOrder );
 
if ( hasDuplicate ) {
for ( var i = 1; i < results.length; i++ ) {
if ( results[i] === results[ i - 1 ] ) {
results.splice( i--, 1 );
}
}
}
}
 
return results;
};
 
Sizzle.matches = function( expr, set ) {
return Sizzle( expr, null, null, set );
};
 
Sizzle.matchesSelector = function( node, expr ) {
return Sizzle( expr, null, null, [node] ).length > 0;
};
 
Sizzle.find = function( expr, context, isXML ) {
var set;
 
if ( !expr ) {
return [];
}
 
for ( var i = 0, l = Expr.order.length; i < l; i++ ) {
var match,
type = Expr.order[i];
if ( (match = Expr.leftMatch[ type ].exec( expr )) ) {
var left = match[1];
match.splice( 1, 1 );
 
if ( left.substr( left.length - 1 ) !== "\\" ) {
match[1] = (match[1] || "").replace(/\\/g, "");
set = Expr.find[ type ]( match, context, isXML );
 
if ( set != null ) {
expr = expr.replace( Expr.match[ type ], "" );
break;
}
}
}
}
 
if ( !set ) {
set = context.getElementsByTagName( "*" );
}
 
return { set: set, expr: expr };
};
 
Sizzle.filter = function( expr, set, inplace, not ) {
var match, anyFound,
old = expr,
result = [],
curLoop = set,
isXMLFilter = set && set[0] && Sizzle.isXML( set[0] );
 
while ( expr && set.length ) {
for ( var type in Expr.filter ) {
if ( (match = Expr.leftMatch[ type ].exec( expr )) != null && match[2] ) {
var found, item,
filter = Expr.filter[ type ],
left = match[1];
 
anyFound = false;
 
match.splice(1,1);
 
if ( left.substr( left.length - 1 ) === "\\" ) {
continue;
}
 
if ( curLoop === result ) {
result = [];
}
 
if ( Expr.preFilter[ type ] ) {
match = Expr.preFilter[ type ]( match, curLoop, inplace, result, not, isXMLFilter );
 
if ( !match ) {
anyFound = found = true;
 
} else if ( match === true ) {
continue;
}
}
 
if ( match ) {
for ( var i = 0; (item = curLoop[i]) != null; i++ ) {
if ( item ) {
found = filter( item, match, i, curLoop );
var pass = not ^ !!found;
 
if ( inplace && found != null ) {
if ( pass ) {
anyFound = true;
 
} else {
curLoop[i] = false;
}
 
} else if ( pass ) {
result.push( item );
anyFound = true;
}
}
}
}
 
if ( found !== undefined ) {
if ( !inplace ) {
curLoop = result;
}
 
expr = expr.replace( Expr.match[ type ], "" );
 
if ( !anyFound ) {
return [];
}
 
break;
}
}
}
 
// Improper expression
if ( expr === old ) {
if ( anyFound == null ) {
Sizzle.error( expr );
 
} else {
break;
}
}
 
old = expr;
}
 
return curLoop;
};
 
Sizzle.error = function( msg ) {
throw "Syntax error, unrecognized expression: " + msg;
};
 
var Expr = Sizzle.selectors = {
order: [ "ID", "NAME", "TAG" ],
 
match: {
ID: /#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
CLASS: /\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,
NAME: /\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,
ATTR: /\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,
TAG: /^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,
CHILD: /:(only|nth|last|first)-child(?:\((even|odd|[\dn+\-]*)\))?/,
POS: /:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,
PSEUDO: /:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/
},
 
leftMatch: {},
 
attrMap: {
"class": "className",
"for": "htmlFor"
},
 
attrHandle: {
href: function( elem ) {
return elem.getAttribute( "href" );
}
},
 
relative: {
"+": function(checkSet, part){
var isPartStr = typeof part === "string",
isTag = isPartStr && !/\W/.test( part ),
isPartStrNotTag = isPartStr && !isTag;
 
if ( isTag ) {
part = part.toLowerCase();
}
 
for ( var i = 0, l = checkSet.length, elem; i < l; i++ ) {
if ( (elem = checkSet[i]) ) {
while ( (elem = elem.previousSibling) && elem.nodeType !== 1 ) {}
 
checkSet[i] = isPartStrNotTag || elem && elem.nodeName.toLowerCase() === part ?
elem || false :
elem === part;
}
}
 
if ( isPartStrNotTag ) {
Sizzle.filter( part, checkSet, true );
}
},
 
">": function( checkSet, part ) {
var elem,
isPartStr = typeof part === "string",
i = 0,
l = checkSet.length;
 
if ( isPartStr && !/\W/.test( part ) ) {
part = part.toLowerCase();
 
for ( ; i < l; i++ ) {
elem = checkSet[i];
 
if ( elem ) {
var parent = elem.parentNode;
checkSet[i] = parent.nodeName.toLowerCase() === part ? parent : false;
}
}
 
} else {
for ( ; i < l; i++ ) {
elem = checkSet[i];
 
if ( elem ) {
checkSet[i] = isPartStr ?
elem.parentNode :
elem.parentNode === part;
}
}
 
if ( isPartStr ) {
Sizzle.filter( part, checkSet, true );
}
}
},
 
"": function(checkSet, part, isXML){
var nodeCheck,
doneName = done++,
checkFn = dirCheck;
 
if ( typeof part === "string" && !/\W/.test(part) ) {
part = part.toLowerCase();
nodeCheck = part;
checkFn = dirNodeCheck;
}
 
checkFn( "parentNode", part, doneName, checkSet, nodeCheck, isXML );
},
 
"~": function( checkSet, part, isXML ) {
var nodeCheck,
doneName = done++,
checkFn = dirCheck;
 
if ( typeof part === "string" && !/\W/.test( part ) ) {
part = part.toLowerCase();
nodeCheck = part;
checkFn = dirNodeCheck;
}
 
checkFn( "previousSibling", part, doneName, checkSet, nodeCheck, isXML );
}
},
 
find: {
ID: function( match, context, isXML ) {
if ( typeof context.getElementById !== "undefined" && !isXML ) {
var m = context.getElementById(match[1]);
// Check parentNode to catch when Blackberry 4.6 returns
// nodes that are no longer in the document #6963
return m && m.parentNode ? [m] : [];
}
},
 
NAME: function( match, context ) {
if ( typeof context.getElementsByName !== "undefined" ) {
var ret = [],
results = context.getElementsByName( match[1] );
 
for ( var i = 0, l = results.length; i < l; i++ ) {
if ( results[i].getAttribute("name") === match[1] ) {
ret.push( results[i] );
}
}
 
return ret.length === 0 ? null : ret;
}
},
 
TAG: function( match, context ) {
return context.getElementsByTagName( match[1] );
}
},
preFilter: {
CLASS: function( match, curLoop, inplace, result, not, isXML ) {
match = " " + match[1].replace(/\\/g, "") + " ";
 
if ( isXML ) {
return match;
}
 
for ( var i = 0, elem; (elem = curLoop[i]) != null; i++ ) {
if ( elem ) {
if ( not ^ (elem.className && (" " + elem.className + " ").replace(/[\t\n]/g, " ").indexOf(match) >= 0) ) {
if ( !inplace ) {
result.push( elem );
}
 
} else if ( inplace ) {
curLoop[i] = false;
}
}
}
 
return false;
},
 
ID: function( match ) {
return match[1].replace(/\\/g, "");
},
 
TAG: function( match, curLoop ) {
return match[1].toLowerCase();
},
 
CHILD: function( match ) {
if ( match[1] === "nth" ) {
// parse equations like 'even', 'odd', '5', '2n', '3n+2', '4n-1', '-n+6'
var test = /(-?)(\d*)n((?:\+|-)?\d*)/.exec(
match[2] === "even" && "2n" || match[2] === "odd" && "2n+1" ||
!/\D/.test( match[2] ) && "0n+" + match[2] || match[2]);
 
// calculate the numbers (first)n+(last) including if they are negative
match[2] = (test[1] + (test[2] || 1)) - 0;
match[3] = test[3] - 0;
}
 
// TODO: Move to normal caching system
match[0] = done++;
 
return match;
},
 
ATTR: function( match, curLoop, inplace, result, not, isXML ) {
var name = match[1].replace(/\\/g, "");
if ( !isXML && Expr.attrMap[name] ) {
match[1] = Expr.attrMap[name];
}
 
if ( match[2] === "~=" ) {
match[4] = " " + match[4] + " ";
}
 
return match;
},
 
PSEUDO: function( match, curLoop, inplace, result, not ) {
if ( match[1] === "not" ) {
// If we're dealing with a complex expression, or a simple one
if ( ( chunker.exec(match[3]) || "" ).length > 1 || /^\w/.test(match[3]) ) {
match[3] = Sizzle(match[3], null, null, curLoop);
 
} else {
var ret = Sizzle.filter(match[3], curLoop, inplace, true ^ not);
 
if ( !inplace ) {
result.push.apply( result, ret );
}
 
return false;
}
 
} else if ( Expr.match.POS.test( match[0] ) || Expr.match.CHILD.test( match[0] ) ) {
return true;
}
return match;
},
 
POS: function( match ) {
match.unshift( true );
 
return match;
}
},
filters: {
enabled: function( elem ) {
return elem.disabled === false && elem.type !== "hidden";
},
 
disabled: function( elem ) {
return elem.disabled === true;
},
 
checked: function( elem ) {
return elem.checked === true;
},
selected: function( elem ) {
// Accessing this property makes selected-by-default
// options in Safari work properly
elem.parentNode.selectedIndex;
return elem.selected === true;
},
 
parent: function( elem ) {
return !!elem.firstChild;
},
 
empty: function( elem ) {
return !elem.firstChild;
},
 
has: function( elem, i, match ) {
return !!Sizzle( match[3], elem ).length;
},
 
header: function( elem ) {
return (/h\d/i).test( elem.nodeName );
},
 
text: function( elem ) {
return "text" === elem.type;
},
radio: function( elem ) {
return "radio" === elem.type;
},
 
checkbox: function( elem ) {
return "checkbox" === elem.type;
},
 
file: function( elem ) {
return "file" === elem.type;
},
password: function( elem ) {
return "password" === elem.type;
},
 
submit: function( elem ) {
return "submit" === elem.type;
},
 
image: function( elem ) {
return "image" === elem.type;
},
 
reset: function( elem ) {
return "reset" === elem.type;
},
 
button: function( elem ) {
return "button" === elem.type || elem.nodeName.toLowerCase() === "button";
},
 
input: function( elem ) {
return (/input|select|textarea|button/i).test( elem.nodeName );
}
},
setFilters: {
first: function( elem, i ) {
return i === 0;
},
 
last: function( elem, i, match, array ) {
return i === array.length - 1;
},
 
even: function( elem, i ) {
return i % 2 === 0;
},
 
odd: function( elem, i ) {
return i % 2 === 1;
},
 
lt: function( elem, i, match ) {
return i < match[3] - 0;
},
 
gt: function( elem, i, match ) {
return i > match[3] - 0;
},
 
nth: function( elem, i, match ) {
return match[3] - 0 === i;
},
 
eq: function( elem, i, match ) {
return match[3] - 0 === i;
}
},
filter: {
PSEUDO: function( elem, match, i, array ) {
var name = match[1],
filter = Expr.filters[ name ];
 
if ( filter ) {
return filter( elem, i, match, array );
 
} else if ( name === "contains" ) {
return (elem.textContent || elem.innerText || Sizzle.getText([ elem ]) || "").indexOf(match[3]) >= 0;
 
} else if ( name === "not" ) {
var not = match[3];
 
for ( var j = 0, l = not.length; j < l; j++ ) {
if ( not[j] === elem ) {
return false;
}
}
 
return true;
 
} else {
Sizzle.error( "Syntax error, unrecognized expression: " + name );
}
},
 
CHILD: function( elem, match ) {
var type = match[1],
node = elem;
 
switch ( type ) {
case "only":
case "first":
while ( (node = node.previousSibling) ) {
if ( node.nodeType === 1 ) {
return false;
}
}
 
if ( type === "first" ) {
return true;
}
 
node = elem;
 
case "last":
while ( (node = node.nextSibling) ) {
if ( node.nodeType === 1 ) {
return false;
}
}
 
return true;
 
case "nth":
var first = match[2],
last = match[3];
 
if ( first === 1 && last === 0 ) {
return true;
}
var doneName = match[0],
parent = elem.parentNode;
if ( parent && (parent.sizcache !== doneName || !elem.nodeIndex) ) {
var count = 0;
for ( node = parent.firstChild; node; node = node.nextSibling ) {
if ( node.nodeType === 1 ) {
node.nodeIndex = ++count;
}
}
 
parent.sizcache = doneName;
}
var diff = elem.nodeIndex - last;
 
if ( first === 0 ) {
return diff === 0;
 
} else {
return ( diff % first === 0 && diff / first >= 0 );
}
}
},
 
ID: function( elem, match ) {
return elem.nodeType === 1 && elem.getAttribute("id") === match;
},
 
TAG: function( elem, match ) {
return (match === "*" && elem.nodeType === 1) || elem.nodeName.toLowerCase() === match;
},
CLASS: function( elem, match ) {
return (" " + (elem.className || elem.getAttribute("class")) + " ")
.indexOf( match ) > -1;
},
 
ATTR: function( elem, match ) {
var name = match[1],
result = Expr.attrHandle[ name ] ?
Expr.attrHandle[ name ]( elem ) :
elem[ name ] != null ?
elem[ name ] :
elem.getAttribute( name ),
value = result + "",
type = match[2],
check = match[4];
 
return result == null ?
type === "!=" :
type === "=" ?
value === check :
type === "*=" ?
value.indexOf(check) >= 0 :
type === "~=" ?
(" " + value + " ").indexOf(check) >= 0 :
!check ?
value && result !== false :
type === "!=" ?
value !== check :
type === "^=" ?
value.indexOf(check) === 0 :
type === "$=" ?
value.substr(value.length - check.length) === check :
type === "|=" ?
value === check || value.substr(0, check.length + 1) === check + "-" :
false;
},
 
POS: function( elem, match, i, array ) {
var name = match[2],
filter = Expr.setFilters[ name ];
 
if ( filter ) {
return filter( elem, i, match, array );
}
}
}
};
 
var origPOS = Expr.match.POS,
fescape = function(all, num){
return "\\" + (num - 0 + 1);
};
 
for ( var type in Expr.match ) {
Expr.match[ type ] = new RegExp( Expr.match[ type ].source + (/(?![^\[]*\])(?![^\(]*\))/.source) );
Expr.leftMatch[ type ] = new RegExp( /(^(?:.|\r|\n)*?)/.source + Expr.match[ type ].source.replace(/\\(\d+)/g, fescape) );
}
 
var makeArray = function( array, results ) {
array = Array.prototype.slice.call( array, 0 );
 
if ( results ) {
results.push.apply( results, array );
return results;
}
return array;
};
 
// Perform a simple check to determine if the browser is capable of
// converting a NodeList to an array using builtin methods.
// Also verifies that the returned array holds DOM nodes
// (which is not the case in the Blackberry browser)
try {
Array.prototype.slice.call( document.documentElement.childNodes, 0 )[0].nodeType;
 
// Provide a fallback method if it does not work
} catch( e ) {
makeArray = function( array, results ) {
var i = 0,
ret = results || [];
 
if ( toString.call(array) === "[object Array]" ) {
Array.prototype.push.apply( ret, array );
 
} else {
if ( typeof array.length === "number" ) {
for ( var l = array.length; i < l; i++ ) {
ret.push( array[i] );
}
 
} else {
for ( ; array[i]; i++ ) {
ret.push( array[i] );
}
}
}
 
return ret;
};
}
 
var sortOrder, siblingCheck;
 
if ( document.documentElement.compareDocumentPosition ) {
sortOrder = function( a, b ) {
if ( a === b ) {
hasDuplicate = true;
return 0;
}
 
if ( !a.compareDocumentPosition || !b.compareDocumentPosition ) {
return a.compareDocumentPosition ? -1 : 1;
}
 
return a.compareDocumentPosition(b) & 4 ? -1 : 1;
};
 
} else {
sortOrder = function( a, b ) {
var al, bl,
ap = [],
bp = [],
aup = a.parentNode,
bup = b.parentNode,
cur = aup;
 
// The nodes are identical, we can exit early
if ( a === b ) {
hasDuplicate = true;
return 0;
 
// If the nodes are siblings (or identical) we can do a quick check
} else if ( aup === bup ) {
return siblingCheck( a, b );
 
// If no parents were found then the nodes are disconnected
} else if ( !aup ) {
return -1;
 
} else if ( !bup ) {
return 1;
}
 
// Otherwise they're somewhere else in the tree so we need
// to build up a full list of the parentNodes for comparison
while ( cur ) {
ap.unshift( cur );
cur = cur.parentNode;
}
 
cur = bup;
 
while ( cur ) {
bp.unshift( cur );
cur = cur.parentNode;
}
 
al = ap.length;
bl = bp.length;
 
// Start walking down the tree looking for a discrepancy
for ( var i = 0; i < al && i < bl; i++ ) {
if ( ap[i] !== bp[i] ) {
return siblingCheck( ap[i], bp[i] );
}
}
 
// We ended someplace up the tree so do a sibling check
return i === al ?
siblingCheck( a, bp[i], -1 ) :
siblingCheck( ap[i], b, 1 );
};
 
siblingCheck = function( a, b, ret ) {
if ( a === b ) {
return ret;
}
 
var cur = a.nextSibling;
 
while ( cur ) {
if ( cur === b ) {
return -1;
}
 
cur = cur.nextSibling;
}
 
return 1;
};
}
 
// Utility function for retreiving the text value of an array of DOM nodes
Sizzle.getText = function( elems ) {
var ret = "", elem;
 
for ( var i = 0; elems[i]; i++ ) {
elem = elems[i];
 
// Get the text from text nodes and CDATA nodes
if ( elem.nodeType === 3 || elem.nodeType === 4 ) {
ret += elem.nodeValue;
 
// Traverse everything else, except comment nodes
} else if ( elem.nodeType !== 8 ) {
ret += Sizzle.getText( elem.childNodes );
}
}
 
return ret;
};
 
// Check to see if the browser returns elements by name when
// querying by getElementById (and provide a workaround)
(function(){
// We're going to inject a fake input element with a specified name
var form = document.createElement("div"),
id = "script" + (new Date()).getTime(),
root = document.documentElement;
 
form.innerHTML = "<a name='" + id + "'/>";
 
// Inject it into the root element, check its status, and remove it quickly
root.insertBefore( form, root.firstChild );
 
// The workaround has to do additional checks after a getElementById
// Which slows things down for other browsers (hence the branching)
if ( document.getElementById( id ) ) {
Expr.find.ID = function( match, context, isXML ) {
if ( typeof context.getElementById !== "undefined" && !isXML ) {
var m = context.getElementById(match[1]);
 
return m ?
m.id === match[1] || typeof m.getAttributeNode !== "undefined" && m.getAttributeNode("id").nodeValue === match[1] ?
[m] :
undefined :
[];
}
};
 
Expr.filter.ID = function( elem, match ) {
var node = typeof elem.getAttributeNode !== "undefined" && elem.getAttributeNode("id");
 
return elem.nodeType === 1 && node && node.nodeValue === match;
};
}
 
root.removeChild( form );
 
// release memory in IE
root = form = null;
})();
 
(function(){
// Check to see if the browser returns only elements
// when doing getElementsByTagName("*")
 
// Create a fake element
var div = document.createElement("div");
div.appendChild( document.createComment("") );
 
// Make sure no comments are found
if ( div.getElementsByTagName("*").length > 0 ) {
Expr.find.TAG = function( match, context ) {
var results = context.getElementsByTagName( match[1] );
 
// Filter out possible comments
if ( match[1] === "*" ) {
var tmp = [];
 
for ( var i = 0; results[i]; i++ ) {
if ( results[i].nodeType === 1 ) {
tmp.push( results[i] );
}
}
 
results = tmp;
}
 
return results;
};
}
 
// Check to see if an attribute returns normalized href attributes
div.innerHTML = "<a href='#'></a>";
 
if ( div.firstChild && typeof div.firstChild.getAttribute !== "undefined" &&
div.firstChild.getAttribute("href") !== "#" ) {
 
Expr.attrHandle.href = function( elem ) {
return elem.getAttribute( "href", 2 );
};
}
 
// release memory in IE
div = null;
})();
 
if ( document.querySelectorAll ) {
(function(){
var oldSizzle = Sizzle,
div = document.createElement("div"),
id = "__sizzle__";
 
div.innerHTML = "<p class='TEST'></p>";
 
// Safari can't handle uppercase or unicode characters when
// in quirks mode.
if ( div.querySelectorAll && div.querySelectorAll(".TEST").length === 0 ) {
return;
}
Sizzle = function( query, context, extra, seed ) {
context = context || document;
 
// Make sure that attribute selectors are quoted
query = query.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']");
 
// Only use querySelectorAll on non-XML documents
// (ID selectors don't work in non-HTML documents)
if ( !seed && !Sizzle.isXML(context) ) {
if ( context.nodeType === 9 ) {
try {
return makeArray( context.querySelectorAll(query), extra );
} catch(qsaError) {}
 
// qSA works strangely on Element-rooted queries
// We can work around this by specifying an extra ID on the root
// and working up from there (Thanks to Andrew Dupont for the technique)
// IE 8 doesn't work on object elements
} else if ( context.nodeType === 1 && context.nodeName.toLowerCase() !== "object" ) {
var old = context.getAttribute( "id" ),
nid = old || id;
 
if ( !old ) {
context.setAttribute( "id", nid );
}
 
try {
return makeArray( context.querySelectorAll( "#" + nid + " " + query ), extra );
 
} catch(pseudoError) {
} finally {
if ( !old ) {
context.removeAttribute( "id" );
}
}
}
}
return oldSizzle(query, context, extra, seed);
};
 
for ( var prop in oldSizzle ) {
Sizzle[ prop ] = oldSizzle[ prop ];
}
 
// release memory in IE
div = null;
})();
}
 
(function(){
var html = document.documentElement,
matches = html.matchesSelector || html.mozMatchesSelector || html.webkitMatchesSelector || html.msMatchesSelector,
pseudoWorks = false;
 
try {
// This should fail with an exception
// Gecko does not error, returns false instead
matches.call( document.documentElement, "[test!='']:sizzle" );
} catch( pseudoError ) {
pseudoWorks = true;
}
 
if ( matches ) {
Sizzle.matchesSelector = function( node, expr ) {
// Make sure that attribute selectors are quoted
expr = expr.replace(/\=\s*([^'"\]]*)\s*\]/g, "='$1']");
 
if ( !Sizzle.isXML( node ) ) {
try {
if ( pseudoWorks || !Expr.match.PSEUDO.test( expr ) && !/!=/.test( expr ) ) {
return matches.call( node, expr );
}
} catch(e) {}
}
 
return Sizzle(expr, null, null, [node]).length > 0;
};
}
})();
 
(function(){
var div = document.createElement("div");
 
div.innerHTML = "<div class='test e'></div><div class='test'></div>";
 
// Opera can't find a second classname (in 9.6)
// Also, make sure that getElementsByClassName actually exists
if ( !div.getElementsByClassName || div.getElementsByClassName("e").length === 0 ) {
return;
}
 
// Safari caches class attributes, doesn't catch changes (in 3.2)
div.lastChild.className = "e";
 
if ( div.getElementsByClassName("e").length === 1 ) {
return;
}
Expr.order.splice(1, 0, "CLASS");
Expr.find.CLASS = function( match, context, isXML ) {
if ( typeof context.getElementsByClassName !== "undefined" && !isXML ) {
return context.getElementsByClassName(match[1]);
}
};
 
// release memory in IE
div = null;
})();
 
function dirNodeCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
for ( var i = 0, l = checkSet.length; i < l; i++ ) {
var elem = checkSet[i];
 
if ( elem ) {
var match = false;
 
elem = elem[dir];
 
while ( elem ) {
if ( elem.sizcache === doneName ) {
match = checkSet[elem.sizset];
break;
}
 
if ( elem.nodeType === 1 && !isXML ){
elem.sizcache = doneName;
elem.sizset = i;
}
 
if ( elem.nodeName.toLowerCase() === cur ) {
match = elem;
break;
}
 
elem = elem[dir];
}
 
checkSet[i] = match;
}
}
}
 
function dirCheck( dir, cur, doneName, checkSet, nodeCheck, isXML ) {
for ( var i = 0, l = checkSet.length; i < l; i++ ) {
var elem = checkSet[i];
 
if ( elem ) {
var match = false;
elem = elem[dir];
 
while ( elem ) {
if ( elem.sizcache === doneName ) {
match = checkSet[elem.sizset];
break;
}
 
if ( elem.nodeType === 1 ) {
if ( !isXML ) {
elem.sizcache = doneName;
elem.sizset = i;
}
 
if ( typeof cur !== "string" ) {
if ( elem === cur ) {
match = true;
break;
}
 
} else if ( Sizzle.filter( cur, [elem] ).length > 0 ) {
match = elem;
break;
}
}
 
elem = elem[dir];
}
 
checkSet[i] = match;
}
}
}
 
if ( document.documentElement.contains ) {
Sizzle.contains = function( a, b ) {
return a !== b && (a.contains ? a.contains(b) : true);
};
 
} else if ( document.documentElement.compareDocumentPosition ) {
Sizzle.contains = function( a, b ) {
return !!(a.compareDocumentPosition(b) & 16);
};
 
} else {
Sizzle.contains = function() {
return false;
};
}
 
Sizzle.isXML = function( elem ) {
// documentElement is verified for cases where it doesn't yet exist
// (such as loading iframes in IE - #4833)
var documentElement = (elem ? elem.ownerDocument || elem : 0).documentElement;
 
return documentElement ? documentElement.nodeName !== "HTML" : false;
};
 
var posProcess = function( selector, context ) {
var match,
tmpSet = [],
later = "",
root = context.nodeType ? [context] : context;
 
// Position selectors must be done after the filter
// And so must :not(positional) so we move all PSEUDOs to the end
while ( (match = Expr.match.PSEUDO.exec( selector )) ) {
later += match[0];
selector = selector.replace( Expr.match.PSEUDO, "" );
}
 
selector = Expr.relative[selector] ? selector + "*" : selector;
 
for ( var i = 0, l = root.length; i < l; i++ ) {
Sizzle( selector, root[i], tmpSet );
}
 
return Sizzle.filter( later, tmpSet );
};
 
// EXPOSE
jQuery.find = Sizzle;
jQuery.expr = Sizzle.selectors;
jQuery.expr[":"] = jQuery.expr.filters;
jQuery.unique = Sizzle.uniqueSort;
jQuery.text = Sizzle.getText;
jQuery.isXMLDoc = Sizzle.isXML;
jQuery.contains = Sizzle.contains;
 
 
})();
 
 
var runtil = /Until$/,
rparentsprev = /^(?:parents|prevUntil|prevAll)/,
// Note: This RegExp should be improved, or likely pulled from Sizzle
rmultiselector = /,/,
isSimple = /^.[^:#\[\.,]*$/,
slice = Array.prototype.slice,
POS = jQuery.expr.match.POS;
 
jQuery.fn.extend({
find: function( selector ) {
var ret = this.pushStack( "", "find", selector ),
length = 0;
 
for ( var i = 0, l = this.length; i < l; i++ ) {
length = ret.length;
jQuery.find( selector, this[i], ret );
 
if ( i > 0 ) {
// Make sure that the results are unique
for ( var n = length; n < ret.length; n++ ) {
for ( var r = 0; r < length; r++ ) {
if ( ret[r] === ret[n] ) {
ret.splice(n--, 1);
break;
}
}
}
}
}
 
return ret;
},
 
has: function( target ) {
var targets = jQuery( target );
return this.filter(function() {
for ( var i = 0, l = targets.length; i < l; i++ ) {
if ( jQuery.contains( this, targets[i] ) ) {
return true;
}
}
});
},
 
not: function( selector ) {
return this.pushStack( winnow(this, selector, false), "not", selector);
},
 
filter: function( selector ) {
return this.pushStack( winnow(this, selector, true), "filter", selector );
},
is: function( selector ) {
return !!selector && jQuery.filter( selector, this ).length > 0;
},
 
closest: function( selectors, context ) {
var ret = [], i, l, cur = this[0];
 
if ( jQuery.isArray( selectors ) ) {
var match, selector,
matches = {},
level = 1;
 
if ( cur && selectors.length ) {
for ( i = 0, l = selectors.length; i < l; i++ ) {
selector = selectors[i];
 
if ( !matches[selector] ) {
matches[selector] = jQuery.expr.match.POS.test( selector ) ?
jQuery( selector, context || this.context ) :
selector;
}
}
 
while ( cur && cur.ownerDocument && cur !== context ) {
for ( selector in matches ) {
match = matches[selector];
 
if ( match.jquery ? match.index(cur) > -1 : jQuery(cur).is(match) ) {
ret.push({ selector: selector, elem: cur, level: level });
}
}
 
cur = cur.parentNode;
level++;
}
}
 
return ret;
}
 
var pos = POS.test( selectors ) ?
jQuery( selectors, context || this.context ) : null;
 
for ( i = 0, l = this.length; i < l; i++ ) {
cur = this[i];
 
while ( cur ) {
if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) {
ret.push( cur );
break;
 
} else {
cur = cur.parentNode;
if ( !cur || !cur.ownerDocument || cur === context ) {
break;
}
}
}
}
 
ret = ret.length > 1 ? jQuery.unique(ret) : ret;
return this.pushStack( ret, "closest", selectors );
},
// Determine the position of an element within
// the matched set of elements
index: function( elem ) {
if ( !elem || typeof elem === "string" ) {
return jQuery.inArray( this[0],
// If it receives a string, the selector is used
// If it receives nothing, the siblings are used
elem ? jQuery( elem ) : this.parent().children() );
}
// Locate the position of the desired element
return jQuery.inArray(
// If it receives a jQuery object, the first element is used
elem.jquery ? elem[0] : elem, this );
},
 
add: function( selector, context ) {
var set = typeof selector === "string" ?
jQuery( selector, context || this.context ) :
jQuery.makeArray( selector ),
all = jQuery.merge( this.get(), set );
 
return this.pushStack( isDisconnected( set[0] ) || isDisconnected( all[0] ) ?
all :
jQuery.unique( all ) );
},
 
andSelf: function() {
return this.add( this.prevObject );
}
});
 
// A painfully simple check to see if an element is disconnected
// from a document (should be improved, where feasible).
function isDisconnected( node ) {
return !node || !node.parentNode || node.parentNode.nodeType === 11;
}
 
jQuery.each({
parent: function( elem ) {
var parent = elem.parentNode;
return parent && parent.nodeType !== 11 ? parent : null;
},
parents: function( elem ) {
return jQuery.dir( elem, "parentNode" );
},
parentsUntil: function( elem, i, until ) {
return jQuery.dir( elem, "parentNode", until );
},
next: function( elem ) {
return jQuery.nth( elem, 2, "nextSibling" );
},
prev: function( elem ) {
return jQuery.nth( elem, 2, "previousSibling" );
},
nextAll: function( elem ) {
return jQuery.dir( elem, "nextSibling" );
},
prevAll: function( elem ) {
return jQuery.dir( elem, "previousSibling" );
},
nextUntil: function( elem, i, until ) {
return jQuery.dir( elem, "nextSibling", until );
},
prevUntil: function( elem, i, until ) {
return jQuery.dir( elem, "previousSibling", until );
},
siblings: function( elem ) {
return jQuery.sibling( elem.parentNode.firstChild, elem );
},
children: function( elem ) {
return jQuery.sibling( elem.firstChild );
},
contents: function( elem ) {
return jQuery.nodeName( elem, "iframe" ) ?
elem.contentDocument || elem.contentWindow.document :
jQuery.makeArray( elem.childNodes );
}
}, function( name, fn ) {
jQuery.fn[ name ] = function( until, selector ) {
var ret = jQuery.map( this, fn, until );
if ( !runtil.test( name ) ) {
selector = until;
}
 
if ( selector && typeof selector === "string" ) {
ret = jQuery.filter( selector, ret );
}
 
ret = this.length > 1 ? jQuery.unique( ret ) : ret;
 
if ( (this.length > 1 || rmultiselector.test( selector )) && rparentsprev.test( name ) ) {
ret = ret.reverse();
}
 
return this.pushStack( ret, name, slice.call(arguments).join(",") );
};
});
 
jQuery.extend({
filter: function( expr, elems, not ) {
if ( not ) {
expr = ":not(" + expr + ")";
}
 
return elems.length === 1 ?
jQuery.find.matchesSelector(elems[0], expr) ? [ elems[0] ] : [] :
jQuery.find.matches(expr, elems);
},
dir: function( elem, dir, until ) {
var matched = [],
cur = elem[ dir ];
 
while ( cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery( cur ).is( until )) ) {
if ( cur.nodeType === 1 ) {
matched.push( cur );
}
cur = cur[dir];
}
return matched;
},
 
nth: function( cur, result, dir, elem ) {
result = result || 1;
var num = 0;
 
for ( ; cur; cur = cur[dir] ) {
if ( cur.nodeType === 1 && ++num === result ) {
break;
}
}
 
return cur;
},
 
sibling: function( n, elem ) {
var r = [];
 
for ( ; n; n = n.nextSibling ) {
if ( n.nodeType === 1 && n !== elem ) {
r.push( n );
}
}
 
return r;
}
});
 
// Implement the identical functionality for filter and not
function winnow( elements, qualifier, keep ) {
if ( jQuery.isFunction( qualifier ) ) {
return jQuery.grep(elements, function( elem, i ) {
var retVal = !!qualifier.call( elem, i, elem );
return retVal === keep;
});
 
} else if ( qualifier.nodeType ) {
return jQuery.grep(elements, function( elem, i ) {
return (elem === qualifier) === keep;
});
 
} else if ( typeof qualifier === "string" ) {
var filtered = jQuery.grep(elements, function( elem ) {
return elem.nodeType === 1;
});
 
if ( isSimple.test( qualifier ) ) {
return jQuery.filter(qualifier, filtered, !keep);
} else {
qualifier = jQuery.filter( qualifier, filtered );
}
}
 
return jQuery.grep(elements, function( elem, i ) {
return (jQuery.inArray( elem, qualifier ) >= 0) === keep;
});
}
 
 
 
 
var rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g,
rleadingWhitespace = /^\s+/,
rxhtmlTag = /<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,
rtagName = /<([\w:]+)/,
rtbody = /<tbody/i,
rhtml = /<|&#?\w+;/,
rnocache = /<(?:script|object|embed|option|style)/i,
// checked="checked" or checked (html5)
rchecked = /checked\s*(?:[^=]|=\s*.checked.)/i,
raction = /\=([^="'>\s]+\/)>/g,
wrapMap = {
option: [ 1, "<select multiple='multiple'>", "</select>" ],
legend: [ 1, "<fieldset>", "</fieldset>" ],
thead: [ 1, "<table>", "</table>" ],
tr: [ 2, "<table><tbody>", "</tbody></table>" ],
td: [ 3, "<table><tbody><tr>", "</tr></tbody></table>" ],
col: [ 2, "<table><tbody></tbody><colgroup>", "</colgroup></table>" ],
area: [ 1, "<map>", "</map>" ],
_default: [ 0, "", "" ]
};
 
wrapMap.optgroup = wrapMap.option;
wrapMap.tbody = wrapMap.tfoot = wrapMap.colgroup = wrapMap.caption = wrapMap.thead;
wrapMap.th = wrapMap.td;
 
// IE can't serialize <link> and <script> tags normally
if ( !jQuery.support.htmlSerialize ) {
wrapMap._default = [ 1, "div<div>", "</div>" ];
}
 
jQuery.fn.extend({
text: function( text ) {
if ( jQuery.isFunction(text) ) {
return this.each(function(i) {
var self = jQuery( this );
 
self.text( text.call(this, i, self.text()) );
});
}
 
if ( typeof text !== "object" && text !== undefined ) {
return this.empty().append( (this[0] && this[0].ownerDocument || document).createTextNode( text ) );
}
 
return jQuery.text( this );
},
 
wrapAll: function( html ) {
if ( jQuery.isFunction( html ) ) {
return this.each(function(i) {
jQuery(this).wrapAll( html.call(this, i) );
});
}
 
if ( this[0] ) {
// The elements to wrap the target around
var wrap = jQuery( html, this[0].ownerDocument ).eq(0).clone(true);
 
if ( this[0].parentNode ) {
wrap.insertBefore( this[0] );
}
 
wrap.map(function() {
var elem = this;
 
while ( elem.firstChild && elem.firstChild.nodeType === 1 ) {
elem = elem.firstChild;
}
 
return elem;
}).append(this);
}
 
return this;
},
 
wrapInner: function( html ) {
if ( jQuery.isFunction( html ) ) {
return this.each(function(i) {
jQuery(this).wrapInner( html.call(this, i) );
});
}
 
return this.each(function() {
var self = jQuery( this ),
contents = self.contents();
 
if ( contents.length ) {
contents.wrapAll( html );
 
} else {
self.append( html );
}
});
},
 
wrap: function( html ) {
return this.each(function() {
jQuery( this ).wrapAll( html );
});
},
 
unwrap: function() {
return this.parent().each(function() {
if ( !jQuery.nodeName( this, "body" ) ) {
jQuery( this ).replaceWith( this.childNodes );
}
}).end();
},
 
append: function() {
return this.domManip(arguments, true, function( elem ) {
if ( this.nodeType === 1 ) {
this.appendChild( elem );
}
});
},
 
prepend: function() {
return this.domManip(arguments, true, function( elem ) {
if ( this.nodeType === 1 ) {
this.insertBefore( elem, this.firstChild );
}
});
},
 
before: function() {
if ( this[0] && this[0].parentNode ) {
return this.domManip(arguments, false, function( elem ) {
this.parentNode.insertBefore( elem, this );
});
} else if ( arguments.length ) {
var set = jQuery(arguments[0]);
set.push.apply( set, this.toArray() );
return this.pushStack( set, "before", arguments );
}
},
 
after: function() {
if ( this[0] && this[0].parentNode ) {
return this.domManip(arguments, false, function( elem ) {
this.parentNode.insertBefore( elem, this.nextSibling );
});
} else if ( arguments.length ) {
var set = this.pushStack( this, "after", arguments );
set.push.apply( set, jQuery(arguments[0]).toArray() );
return set;
}
},
// keepData is for internal use only--do not document
remove: function( selector, keepData ) {
for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
if ( !selector || jQuery.filter( selector, [ elem ] ).length ) {
if ( !keepData && elem.nodeType === 1 ) {
jQuery.cleanData( elem.getElementsByTagName("*") );
jQuery.cleanData( [ elem ] );
}
 
if ( elem.parentNode ) {
elem.parentNode.removeChild( elem );
}
}
}
return this;
},
 
empty: function() {
for ( var i = 0, elem; (elem = this[i]) != null; i++ ) {
// Remove element nodes and prevent memory leaks
if ( elem.nodeType === 1 ) {
jQuery.cleanData( elem.getElementsByTagName("*") );
}
 
// Remove any remaining nodes
while ( elem.firstChild ) {
elem.removeChild( elem.firstChild );
}
}
return this;
},
 
clone: function( events ) {
// Do the clone
var ret = this.map(function() {
if ( !jQuery.support.noCloneEvent && !jQuery.isXMLDoc(this) ) {
// IE copies events bound via attachEvent when
// using cloneNode. Calling detachEvent on the
// clone will also remove the events from the orignal
// In order to get around this, we use innerHTML.
// Unfortunately, this means some modifications to
// attributes in IE that are actually only stored
// as properties will not be copied (such as the
// the name attribute on an input).
var html = this.outerHTML,
ownerDocument = this.ownerDocument;
 
if ( !html ) {
var div = ownerDocument.createElement("div");
div.appendChild( this.cloneNode(true) );
html = div.innerHTML;
}
 
return jQuery.clean([html.replace(rinlinejQuery, "")
// Handle the case in IE 8 where action=/test/> self-closes a tag
.replace(raction, '="$1">')
.replace(rleadingWhitespace, "")], ownerDocument)[0];
} else {
return this.cloneNode(true);
}
});
 
// Copy the events from the original to the clone
if ( events === true ) {
cloneCopyEvent( this, ret );
cloneCopyEvent( this.find("*"), ret.find("*") );
}
 
// Return the cloned set
return ret;
},
 
html: function( value ) {
if ( value === undefined ) {
return this[0] && this[0].nodeType === 1 ?
this[0].innerHTML.replace(rinlinejQuery, "") :
null;
 
// See if we can take a shortcut and just use innerHTML
} else if ( typeof value === "string" && !rnocache.test( value ) &&
(jQuery.support.leadingWhitespace || !rleadingWhitespace.test( value )) &&
!wrapMap[ (rtagName.exec( value ) || ["", ""])[1].toLowerCase() ] ) {
 
value = value.replace(rxhtmlTag, "<$1></$2>");
 
try {
for ( var i = 0, l = this.length; i < l; i++ ) {
// Remove element nodes and prevent memory leaks
if ( this[i].nodeType === 1 ) {
jQuery.cleanData( this[i].getElementsByTagName("*") );
this[i].innerHTML = value;
}
}
 
// If using innerHTML throws an exception, use the fallback method
} catch(e) {
this.empty().append( value );
}
 
} else if ( jQuery.isFunction( value ) ) {
this.each(function(i){
var self = jQuery( this );
 
self.html( value.call(this, i, self.html()) );
});
 
} else {
this.empty().append( value );
}
 
return this;
},
 
replaceWith: function( value ) {
if ( this[0] && this[0].parentNode ) {
// Make sure that the elements are removed from the DOM before they are inserted
// this can help fix replacing a parent with child elements
if ( jQuery.isFunction( value ) ) {
return this.each(function(i) {
var self = jQuery(this), old = self.html();
self.replaceWith( value.call( this, i, old ) );
});
}
 
if ( typeof value !== "string" ) {
value = jQuery( value ).detach();
}
 
return this.each(function() {
var next = this.nextSibling,
parent = this.parentNode;
 
jQuery( this ).remove();
 
if ( next ) {
jQuery(next).before( value );
} else {
jQuery(parent).append( value );
}
});
} else {
return this.pushStack( jQuery(jQuery.isFunction(value) ? value() : value), "replaceWith", value );
}
},
 
detach: function( selector ) {
return this.remove( selector, true );
},
 
domManip: function( args, table, callback ) {
var results, first, fragment, parent,
value = args[0],
scripts = [];
 
// We can't cloneNode fragments that contain checked, in WebKit
if ( !jQuery.support.checkClone && arguments.length === 3 && typeof value === "string" && rchecked.test( value ) ) {
return this.each(function() {
jQuery(this).domManip( args, table, callback, true );
});
}
 
if ( jQuery.isFunction(value) ) {
return this.each(function(i) {
var self = jQuery(this);
args[0] = value.call(this, i, table ? self.html() : undefined);
self.domManip( args, table, callback );
});
}
 
if ( this[0] ) {
parent = value && value.parentNode;
 
// If we're in a fragment, just use that instead of building a new one
if ( jQuery.support.parentNode && parent && parent.nodeType === 11 && parent.childNodes.length === this.length ) {
results = { fragment: parent };
 
} else {
results = jQuery.buildFragment( args, this, scripts );
}
fragment = results.fragment;
if ( fragment.childNodes.length === 1 ) {
first = fragment = fragment.firstChild;
} else {
first = fragment.firstChild;
}
 
if ( first ) {
table = table && jQuery.nodeName( first, "tr" );
 
for ( var i = 0, l = this.length; i < l; i++ ) {
callback.call(
table ?
root(this[i], first) :
this[i],
i > 0 || results.cacheable || this.length > 1 ?
fragment.cloneNode(true) :
fragment
);
}
}
 
if ( scripts.length ) {
jQuery.each( scripts, evalScript );
}
}
 
return this;
}
});
 
function root( elem, cur ) {
return jQuery.nodeName(elem, "table") ?
(elem.getElementsByTagName("tbody")[0] ||
elem.appendChild(elem.ownerDocument.createElement("tbody"))) :
elem;
}
 
function cloneCopyEvent(orig, ret) {
var i = 0;
 
ret.each(function() {
if ( this.nodeName !== (orig[i] && orig[i].nodeName) ) {
return;
}
 
var oldData = jQuery.data( orig[i++] ),
curData = jQuery.data( this, oldData ),
events = oldData && oldData.events;
 
if ( events ) {
delete curData.handle;
curData.events = {};
 
for ( var type in events ) {
for ( var handler in events[ type ] ) {
jQuery.event.add( this, type, events[ type ][ handler ], events[ type ][ handler ].data );
}
}
}
});
}
 
jQuery.buildFragment = function( args, nodes, scripts ) {
var fragment, cacheable, cacheresults,
doc = (nodes && nodes[0] ? nodes[0].ownerDocument || nodes[0] : document);
 
// Only cache "small" (1/2 KB) strings that are associated with the main document
// Cloning options loses the selected state, so don't cache them
// IE 6 doesn't like it when you put <object> or <embed> elements in a fragment
// Also, WebKit does not clone 'checked' attributes on cloneNode, so don't cache
if ( args.length === 1 && typeof args[0] === "string" && args[0].length < 512 && doc === document &&
!rnocache.test( args[0] ) && (jQuery.support.checkClone || !rchecked.test( args[0] )) ) {
 
cacheable = true;
cacheresults = jQuery.fragments[ args[0] ];
if ( cacheresults ) {
if ( cacheresults !== 1 ) {
fragment = cacheresults;
}
}
}
 
if ( !fragment ) {
fragment = doc.createDocumentFragment();
jQuery.clean( args, doc, fragment, scripts );
}
 
if ( cacheable ) {
jQuery.fragments[ args[0] ] = cacheresults ? fragment : 1;
}
 
return { fragment: fragment, cacheable: cacheable };
};
 
jQuery.fragments = {};
 
jQuery.each({
appendTo: "append",
prependTo: "prepend",
insertBefore: "before",
insertAfter: "after",
replaceAll: "replaceWith"
}, function( name, original ) {
jQuery.fn[ name ] = function( selector ) {
var ret = [],
insert = jQuery( selector ),
parent = this.length === 1 && this[0].parentNode;
if ( parent && parent.nodeType === 11 && parent.childNodes.length === 1 && insert.length === 1 ) {
insert[ original ]( this[0] );
return this;
} else {
for ( var i = 0, l = insert.length; i < l; i++ ) {
var elems = (i > 0 ? this.clone(true) : this).get();
jQuery( insert[i] )[ original ]( elems );
ret = ret.concat( elems );
}
return this.pushStack( ret, name, insert.selector );
}
};
});
 
jQuery.extend({
clean: function( elems, context, fragment, scripts ) {
context = context || document;
 
// !context.createElement fails in IE with an error but returns typeof 'object'
if ( typeof context.createElement === "undefined" ) {
context = context.ownerDocument || context[0] && context[0].ownerDocument || document;
}
 
var ret = [];
 
for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
if ( typeof elem === "number" ) {
elem += "";
}
 
if ( !elem ) {
continue;
}
 
// Convert html string into DOM nodes
if ( typeof elem === "string" && !rhtml.test( elem ) ) {
elem = context.createTextNode( elem );
 
} else if ( typeof elem === "string" ) {
// Fix "XHTML"-style tags in all browsers
elem = elem.replace(rxhtmlTag, "<$1></$2>");
 
// Trim whitespace, otherwise indexOf won't work as expected
var tag = (rtagName.exec( elem ) || ["", ""])[1].toLowerCase(),
wrap = wrapMap[ tag ] || wrapMap._default,
depth = wrap[0],
div = context.createElement("div");
 
// Go to html and back, then peel off extra wrappers
div.innerHTML = wrap[1] + elem + wrap[2];
 
// Move to the right depth
while ( depth-- ) {
div = div.lastChild;
}
 
// Remove IE's autoinserted <tbody> from table fragments
if ( !jQuery.support.tbody ) {
 
// String was a <table>, *may* have spurious <tbody>
var hasBody = rtbody.test(elem),
tbody = tag === "table" && !hasBody ?
div.firstChild && div.firstChild.childNodes :
 
// String was a bare <thead> or <tfoot>
wrap[1] === "<table>" && !hasBody ?
div.childNodes :
[];
 
for ( var j = tbody.length - 1; j >= 0 ; --j ) {
if ( jQuery.nodeName( tbody[ j ], "tbody" ) && !tbody[ j ].childNodes.length ) {
tbody[ j ].parentNode.removeChild( tbody[ j ] );
}
}
 
}
 
// IE completely kills leading whitespace when innerHTML is used
if ( !jQuery.support.leadingWhitespace && rleadingWhitespace.test( elem ) ) {
div.insertBefore( context.createTextNode( rleadingWhitespace.exec(elem)[0] ), div.firstChild );
}
 
elem = div.childNodes;
}
 
if ( elem.nodeType ) {
ret.push( elem );
} else {
ret = jQuery.merge( ret, elem );
}
}
 
if ( fragment ) {
for ( i = 0; ret[i]; i++ ) {
if ( scripts && jQuery.nodeName( ret[i], "script" ) && (!ret[i].type || ret[i].type.toLowerCase() === "text/javascript") ) {
scripts.push( ret[i].parentNode ? ret[i].parentNode.removeChild( ret[i] ) : ret[i] );
} else {
if ( ret[i].nodeType === 1 ) {
ret.splice.apply( ret, [i + 1, 0].concat(jQuery.makeArray(ret[i].getElementsByTagName("script"))) );
}
fragment.appendChild( ret[i] );
}
}
}
 
return ret;
},
cleanData: function( elems ) {
var data, id, cache = jQuery.cache,
special = jQuery.event.special,
deleteExpando = jQuery.support.deleteExpando;
for ( var i = 0, elem; (elem = elems[i]) != null; i++ ) {
if ( elem.nodeName && jQuery.noData[elem.nodeName.toLowerCase()] ) {
continue;
}
 
id = elem[ jQuery.expando ];
if ( id ) {
data = cache[ id ];
if ( data && data.events ) {
for ( var type in data.events ) {
if ( special[ type ] ) {
jQuery.event.remove( elem, type );
 
} else {
jQuery.removeEvent( elem, type, data.handle );
}
}
}
if ( deleteExpando ) {
delete elem[ jQuery.expando ];
 
} else if ( elem.removeAttribute ) {
elem.removeAttribute( jQuery.expando );
}
delete cache[ id ];
}
}
}
});
 
function evalScript( i, elem ) {
if ( elem.src ) {
jQuery.ajax({
url: elem.src,
async: false,
dataType: "script"
});
} else {
jQuery.globalEval( elem.text || elem.textContent || elem.innerHTML || "" );
}
 
if ( elem.parentNode ) {
elem.parentNode.removeChild( elem );
}
}
 
 
 
 
var ralpha = /alpha\([^)]*\)/i,
ropacity = /opacity=([^)]*)/,
rdashAlpha = /-([a-z])/ig,
rupper = /([A-Z])/g,
rnumpx = /^-?\d+(?:px)?$/i,
rnum = /^-?\d/,
 
cssShow = { position: "absolute", visibility: "hidden", display: "block" },
cssWidth = [ "Left", "Right" ],
cssHeight = [ "Top", "Bottom" ],
curCSS,
 
getComputedStyle,
currentStyle,
 
fcamelCase = function( all, letter ) {
return letter.toUpperCase();
};
 
jQuery.fn.css = function( name, value ) {
// Setting 'undefined' is a no-op
if ( arguments.length === 2 && value === undefined ) {
return this;
}
 
return jQuery.access( this, name, value, true, function( elem, name, value ) {
return value !== undefined ?
jQuery.style( elem, name, value ) :
jQuery.css( elem, name );
});
};
 
jQuery.extend({
// Add in style property hooks for overriding the default
// behavior of getting and setting a style property
cssHooks: {
opacity: {
get: function( elem, computed ) {
if ( computed ) {
// We should always get a number back from opacity
var ret = curCSS( elem, "opacity", "opacity" );
return ret === "" ? "1" : ret;
 
} else {
return elem.style.opacity;
}
}
}
},
 
// Exclude the following css properties to add px
cssNumber: {
"zIndex": true,
"fontWeight": true,
"opacity": true,
"zoom": true,
"lineHeight": true
},
 
// Add in properties whose names you wish to fix before
// setting or getting the value
cssProps: {
// normalize float css property
"float": jQuery.support.cssFloat ? "cssFloat" : "styleFloat"
},
 
// Get and set the style property on a DOM Node
style: function( elem, name, value, extra ) {
// Don't set styles on text and comment nodes
if ( !elem || elem.nodeType === 3 || elem.nodeType === 8 || !elem.style ) {
return;
}
 
// Make sure that we're working with the right name
var ret, origName = jQuery.camelCase( name ),
style = elem.style, hooks = jQuery.cssHooks[ origName ];
 
name = jQuery.cssProps[ origName ] || origName;
 
// Check if we're setting a value
if ( value !== undefined ) {
// Make sure that NaN and null values aren't set. See: #7116
if ( typeof value === "number" && isNaN( value ) || value == null ) {
return;
}
 
// If a number was passed in, add 'px' to the (except for certain CSS properties)
if ( typeof value === "number" && !jQuery.cssNumber[ origName ] ) {
value += "px";
}
 
// If a hook was provided, use that value, otherwise just set the specified value
if ( !hooks || !("set" in hooks) || (value = hooks.set( elem, value )) !== undefined ) {
// Wrapped to prevent IE from throwing errors when 'invalid' values are provided
// Fixes bug #5509
try {
style[ name ] = value;
} catch(e) {}
}
 
} else {
// If a hook was provided get the non-computed value from there
if ( hooks && "get" in hooks && (ret = hooks.get( elem, false, extra )) !== undefined ) {
return ret;
}
 
// Otherwise just get the value from the style object
return style[ name ];
}
},
 
css: function( elem, name, extra ) {
// Make sure that we're working with the right name
var ret, origName = jQuery.camelCase( name ),
hooks = jQuery.cssHooks[ origName ];
 
name = jQuery.cssProps[ origName ] || origName;
 
// If a hook was provided get the computed value from there
if ( hooks && "get" in hooks && (ret = hooks.get( elem, true, extra )) !== undefined ) {
return ret;
 
// Otherwise, if a way to get the computed value exists, use that
} else if ( curCSS ) {
return curCSS( elem, name, origName );
}
},
 
// A method for quickly swapping in/out CSS properties to get correct calculations
swap: function( elem, options, callback ) {
var old = {};
 
// Remember the old values, and insert the new ones
for ( var name in options ) {
old[ name ] = elem.style[ name ];
elem.style[ name ] = options[ name ];
}
 
callback.call( elem );
 
// Revert the old values
for ( name in options ) {
elem.style[ name ] = old[ name ];
}
},
 
camelCase: function( string ) {
return string.replace( rdashAlpha, fcamelCase );
}
});
 
// DEPRECATED, Use jQuery.css() instead
jQuery.curCSS = jQuery.css;
 
jQuery.each(["height", "width"], function( i, name ) {
jQuery.cssHooks[ name ] = {
get: function( elem, computed, extra ) {
var val;
 
if ( computed ) {
if ( elem.offsetWidth !== 0 ) {
val = getWH( elem, name, extra );
 
} else {
jQuery.swap( elem, cssShow, function() {
val = getWH( elem, name, extra );
});
}
 
if ( val <= 0 ) {
val = curCSS( elem, name, name );
 
if ( val === "0px" && currentStyle ) {
val = currentStyle( elem, name, name );
}
 
if ( val != null ) {
// Should return "auto" instead of 0, use 0 for
// temporary backwards-compat
return val === "" || val === "auto" ? "0px" : val;
}
}
 
if ( val < 0 || val == null ) {
val = elem.style[ name ];
 
// Should return "auto" instead of 0, use 0 for
// temporary backwards-compat
return val === "" || val === "auto" ? "0px" : val;
}
 
return typeof val === "string" ? val : val + "px";
}
},
 
set: function( elem, value ) {
if ( rnumpx.test( value ) ) {
// ignore negative width and height values #1599
value = parseFloat(value);
 
if ( value >= 0 ) {
return value + "px";
}
 
} else {
return value;
}
}
};
});
 
if ( !jQuery.support.opacity ) {
jQuery.cssHooks.opacity = {
get: function( elem, computed ) {
// IE uses filters for opacity
return ropacity.test((computed && elem.currentStyle ? elem.currentStyle.filter : elem.style.filter) || "") ?
(parseFloat(RegExp.$1) / 100) + "" :
computed ? "1" : "";
},
 
set: function( elem, value ) {
var style = elem.style;
 
// IE has trouble with opacity if it does not have layout
// Force it by setting the zoom level
style.zoom = 1;
 
// Set the alpha filter to set the opacity
var opacity = jQuery.isNaN(value) ?
"" :
"alpha(opacity=" + value * 100 + ")",
filter = style.filter || "";
 
style.filter = ralpha.test(filter) ?
filter.replace(ralpha, opacity) :
style.filter + ' ' + opacity;
}
};
}
 
if ( document.defaultView && document.defaultView.getComputedStyle ) {
getComputedStyle = function( elem, newName, name ) {
var ret, defaultView, computedStyle;
 
name = name.replace( rupper, "-$1" ).toLowerCase();
 
if ( !(defaultView = elem.ownerDocument.defaultView) ) {
return undefined;
}
 
if ( (computedStyle = defaultView.getComputedStyle( elem, null )) ) {
ret = computedStyle.getPropertyValue( name );
if ( ret === "" && !jQuery.contains( elem.ownerDocument.documentElement, elem ) ) {
ret = jQuery.style( elem, name );
}
}
 
return ret;
};
}
 
if ( document.documentElement.currentStyle ) {
currentStyle = function( elem, name ) {
var left, rsLeft,
ret = elem.currentStyle && elem.currentStyle[ name ],
style = elem.style;
 
// From the awesome hack by Dean Edwards
// http://erik.eae.net/archives/2007/07/27/18.54.15/#comment-102291
 
// If we're not dealing with a regular pixel number
// but a number that has a weird ending, we need to convert it to pixels
if ( !rnumpx.test( ret ) && rnum.test( ret ) ) {
// Remember the original values
left = style.left;
rsLeft = elem.runtimeStyle.left;
 
// Put in the new values to get a computed value out
elem.runtimeStyle.left = elem.currentStyle.left;
style.left = name === "fontSize" ? "1em" : (ret || 0);
ret = style.pixelLeft + "px";
 
// Revert the changed values
style.left = left;
elem.runtimeStyle.left = rsLeft;
}
 
return ret === "" ? "auto" : ret;
};
}
 
curCSS = getComputedStyle || currentStyle;
 
function getWH( elem, name, extra ) {
var which = name === "width" ? cssWidth : cssHeight,
val = name === "width" ? elem.offsetWidth : elem.offsetHeight;
 
if ( extra === "border" ) {
return val;
}
 
jQuery.each( which, function() {
if ( !extra ) {
val -= parseFloat(jQuery.css( elem, "padding" + this )) || 0;
}
 
if ( extra === "margin" ) {
val += parseFloat(jQuery.css( elem, "margin" + this )) || 0;
 
} else {
val -= parseFloat(jQuery.css( elem, "border" + this + "Width" )) || 0;
}
});
 
return val;
}
 
if ( jQuery.expr && jQuery.expr.filters ) {
jQuery.expr.filters.hidden = function( elem ) {
var width = elem.offsetWidth,
height = elem.offsetHeight;
 
return (width === 0 && height === 0) || (!jQuery.support.reliableHiddenOffsets && (elem.style.display || jQuery.css( elem, "display" )) === "none");
};
 
jQuery.expr.filters.visible = function( elem ) {
return !jQuery.expr.filters.hidden( elem );
};
}
 
 
 
 
var jsc = jQuery.now(),
rscript = /<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
rselectTextarea = /^(?:select|textarea)/i,
rinput = /^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,
rnoContent = /^(?:GET|HEAD)$/,
rbracket = /\[\]$/,
jsre = /\=\?(&|$)/,
rquery = /\?/,
rts = /([?&])_=[^&]*/,
rurl = /^(\w+:)?\/\/([^\/?#]+)/,
r20 = /%20/g,
rhash = /#.*$/,
 
// Keep a copy of the old load method
_load = jQuery.fn.load;
 
jQuery.fn.extend({
load: function( url, params, callback ) {
if ( typeof url !== "string" && _load ) {
return _load.apply( this, arguments );
 
// Don't do a request if no elements are being requested
} else if ( !this.length ) {
return this;
}
 
var off = url.indexOf(" ");
if ( off >= 0 ) {
var selector = url.slice(off, url.length);
url = url.slice(0, off);
}
 
// Default to a GET request
var type = "GET";
 
// If the second parameter was provided
if ( params ) {
// If it's a function
if ( jQuery.isFunction( params ) ) {
// We assume that it's the callback
callback = params;
params = null;
 
// Otherwise, build a param string
} else if ( typeof params === "object" ) {
params = jQuery.param( params, jQuery.ajaxSettings.traditional );
type = "POST";
}
}
 
var self = this;
 
// Request the remote document
jQuery.ajax({
url: url,
type: type,
dataType: "html",
data: params,
complete: function( res, status ) {
// If successful, inject the HTML into all the matched elements
if ( status === "success" || status === "notmodified" ) {
// See if a selector was specified
self.html( selector ?
// Create a dummy div to hold the results
jQuery("<div>")
// inject the contents of the document in, removing the scripts
// to avoid any 'Permission Denied' errors in IE
.append(res.responseText.replace(rscript, ""))
 
// Locate the specified elements
.find(selector) :
 
// If not, just inject the full result
res.responseText );
}
 
if ( callback ) {
self.each( callback, [res.responseText, status, res] );
}
}
});
 
return this;
},
 
serialize: function() {
return jQuery.param(this.serializeArray());
},
 
serializeArray: function() {
return this.map(function() {
return this.elements ? jQuery.makeArray(this.elements) : this;
})
.filter(function() {
return this.name && !this.disabled &&
(this.checked || rselectTextarea.test(this.nodeName) ||
rinput.test(this.type));
})
.map(function( i, elem ) {
var val = jQuery(this).val();
 
return val == null ?
null :
jQuery.isArray(val) ?
jQuery.map( val, function( val, i ) {
return { name: elem.name, value: val };
}) :
{ name: elem.name, value: val };
}).get();
}
});
 
// Attach a bunch of functions for handling common AJAX events
jQuery.each( "ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "), function( i, o ) {
jQuery.fn[o] = function( f ) {
return this.bind(o, f);
};
});
 
jQuery.extend({
get: function( url, data, callback, type ) {
// shift arguments if data argument was omited
if ( jQuery.isFunction( data ) ) {
type = type || callback;
callback = data;
data = null;
}
 
return jQuery.ajax({
type: "GET",
url: url,
data: data,
success: callback,
dataType: type
});
},
 
getScript: function( url, callback ) {
return jQuery.get(url, null, callback, "script");
},
 
getJSON: function( url, data, callback ) {
return jQuery.get(url, data, callback, "json");
},
 
post: function( url, data, callback, type ) {
// shift arguments if data argument was omited
if ( jQuery.isFunction( data ) ) {
type = type || callback;
callback = data;
data = {};
}
 
return jQuery.ajax({
type: "POST",
url: url,
data: data,
success: callback,
dataType: type
});
},
 
ajaxSetup: function( settings ) {
jQuery.extend( jQuery.ajaxSettings, settings );
},
 
ajaxSettings: {
url: location.href,
global: true,
type: "GET",
contentType: "application/x-www-form-urlencoded",
processData: true,
async: true,
/*
timeout: 0,
data: null,
username: null,
password: null,
traditional: false,
*/
// This function can be overriden by calling jQuery.ajaxSetup
xhr: function() {
return new window.XMLHttpRequest();
},
accepts: {
xml: "application/xml, text/xml",
html: "text/html",
script: "text/javascript, application/javascript",
json: "application/json, text/javascript",
text: "text/plain",
_default: "*/*"
}
},
 
ajax: function( origSettings ) {
var s = jQuery.extend(true, {}, jQuery.ajaxSettings, origSettings),
jsonp, status, data, type = s.type.toUpperCase(), noContent = rnoContent.test(type);
 
s.url = s.url.replace( rhash, "" );
 
// Use original (not extended) context object if it was provided
s.context = origSettings && origSettings.context != null ? origSettings.context : s;
 
// convert data if not already a string
if ( s.data && s.processData && typeof s.data !== "string" ) {
s.data = jQuery.param( s.data, s.traditional );
}
 
// Handle JSONP Parameter Callbacks
if ( s.dataType === "jsonp" ) {
if ( type === "GET" ) {
if ( !jsre.test( s.url ) ) {
s.url += (rquery.test( s.url ) ? "&" : "?") + (s.jsonp || "callback") + "=?";
}
} else if ( !s.data || !jsre.test(s.data) ) {
s.data = (s.data ? s.data + "&" : "") + (s.jsonp || "callback") + "=?";
}
s.dataType = "json";
}
 
// Build temporary JSONP function
if ( s.dataType === "json" && (s.data && jsre.test(s.data) || jsre.test(s.url)) ) {
jsonp = s.jsonpCallback || ("jsonp" + jsc++);
 
// Replace the =? sequence both in the query string and the data
if ( s.data ) {
s.data = (s.data + "").replace(jsre, "=" + jsonp + "$1");
}
 
s.url = s.url.replace(jsre, "=" + jsonp + "$1");
 
// We need to make sure
// that a JSONP style response is executed properly
s.dataType = "script";
 
// Handle JSONP-style loading
var customJsonp = window[ jsonp ];
 
window[ jsonp ] = function( tmp ) {
if ( jQuery.isFunction( customJsonp ) ) {
customJsonp( tmp );
 
} else {
// Garbage collect
window[ jsonp ] = undefined;
 
try {
delete window[ jsonp ];
} catch( jsonpError ) {}
}
 
data = tmp;
jQuery.handleSuccess( s, xhr, status, data );
jQuery.handleComplete( s, xhr, status, data );
if ( head ) {
head.removeChild( script );
}
};
}
 
if ( s.dataType === "script" && s.cache === null ) {
s.cache = false;
}
 
if ( s.cache === false && noContent ) {
var ts = jQuery.now();
 
// try replacing _= if it is there
var ret = s.url.replace(rts, "$1_=" + ts);
 
// if nothing was replaced, add timestamp to the end
s.url = ret + ((ret === s.url) ? (rquery.test(s.url) ? "&" : "?") + "_=" + ts : "");
}
 
// If data is available, append data to url for GET/HEAD requests
if ( s.data && noContent ) {
s.url += (rquery.test(s.url) ? "&" : "?") + s.data;
}
 
// Watch for a new set of requests
if ( s.global && jQuery.active++ === 0 ) {
jQuery.event.trigger( "ajaxStart" );
}
 
// Matches an absolute URL, and saves the domain
var parts = rurl.exec( s.url ),
remote = parts && (parts[1] && parts[1].toLowerCase() !== location.protocol || parts[2].toLowerCase() !== location.host);
 
// If we're requesting a remote document
// and trying to load JSON or Script with a GET
if ( s.dataType === "script" && type === "GET" && remote ) {
var head = document.getElementsByTagName("head")[0] || document.documentElement;
var script = document.createElement("script");
if ( s.scriptCharset ) {
script.charset = s.scriptCharset;
}
script.src = s.url;
 
// Handle Script loading
if ( !jsonp ) {
var done = false;
 
// Attach handlers for all browsers
script.onload = script.onreadystatechange = function() {
if ( !done && (!this.readyState ||
this.readyState === "loaded" || this.readyState === "complete") ) {
done = true;
jQuery.handleSuccess( s, xhr, status, data );
jQuery.handleComplete( s, xhr, status, data );
 
// Handle memory leak in IE
script.onload = script.onreadystatechange = null;
if ( head && script.parentNode ) {
head.removeChild( script );
}
}
};
}
 
// Use insertBefore instead of appendChild to circumvent an IE6 bug.
// This arises when a base node is used (#2709 and #4378).
head.insertBefore( script, head.firstChild );
 
// We handle everything using the script element injection
return undefined;
}
 
var requestDone = false;
 
// Create the request object
var xhr = s.xhr();
 
if ( !xhr ) {
return;
}
 
// Open the socket
// Passing null username, generates a login popup on Opera (#2865)
if ( s.username ) {
xhr.open(type, s.url, s.async, s.username, s.password);
} else {
xhr.open(type, s.url, s.async);
}
 
// Need an extra try/catch for cross domain requests in Firefox 3
try {
// Set content-type if data specified and content-body is valid for this type
if ( (s.data != null && !noContent) || (origSettings && origSettings.contentType) ) {
xhr.setRequestHeader("Content-Type", s.contentType);
}
 
// Set the If-Modified-Since and/or If-None-Match header, if in ifModified mode.
if ( s.ifModified ) {
if ( jQuery.lastModified[s.url] ) {
xhr.setRequestHeader("If-Modified-Since", jQuery.lastModified[s.url]);
}
 
if ( jQuery.etag[s.url] ) {
xhr.setRequestHeader("If-None-Match", jQuery.etag[s.url]);
}
}
 
// Set header so the called script knows that it's an XMLHttpRequest
// Only send the header if it's not a remote XHR
if ( !remote ) {
xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
}
 
// Set the Accepts header for the server, depending on the dataType
xhr.setRequestHeader("Accept", s.dataType && s.accepts[ s.dataType ] ?
s.accepts[ s.dataType ] + ", */*; q=0.01" :
s.accepts._default );
} catch( headerError ) {}
 
// Allow custom headers/mimetypes and early abort
if ( s.beforeSend && s.beforeSend.call(s.context, xhr, s) === false ) {
// Handle the global AJAX counter
if ( s.global && jQuery.active-- === 1 ) {
jQuery.event.trigger( "ajaxStop" );
}
 
// close opended socket
xhr.abort();
return false;
}
 
if ( s.global ) {
jQuery.triggerGlobal( s, "ajaxSend", [xhr, s] );
}
 
// Wait for a response to come back
var onreadystatechange = xhr.onreadystatechange = function( isTimeout ) {
// The request was aborted
if ( !xhr || xhr.readyState === 0 || isTimeout === "abort" ) {
// Opera doesn't call onreadystatechange before this point
// so we simulate the call
if ( !requestDone ) {
jQuery.handleComplete( s, xhr, status, data );
}
 
requestDone = true;
if ( xhr ) {
xhr.onreadystatechange = jQuery.noop;
}
 
// The transfer is complete and the data is available, or the request timed out
} else if ( !requestDone && xhr && (xhr.readyState === 4 || isTimeout === "timeout") ) {
requestDone = true;
xhr.onreadystatechange = jQuery.noop;
 
status = isTimeout === "timeout" ?
"timeout" :
!jQuery.httpSuccess( xhr ) ?
"error" :
s.ifModified && jQuery.httpNotModified( xhr, s.url ) ?
"notmodified" :
"success";
 
var errMsg;
 
if ( status === "success" ) {
// Watch for, and catch, XML document parse errors
try {
// process the data (runs the xml through httpData regardless of callback)
data = jQuery.httpData( xhr, s.dataType, s );
} catch( parserError ) {
status = "parsererror";
errMsg = parserError;
}
}
 
// Make sure that the request was successful or notmodified
if ( status === "success" || status === "notmodified" ) {
// JSONP handles its own success callback
if ( !jsonp ) {
jQuery.handleSuccess( s, xhr, status, data );
}
} else {
jQuery.handleError( s, xhr, status, errMsg );
}
 
// Fire the complete handlers
if ( !jsonp ) {
jQuery.handleComplete( s, xhr, status, data );
}
 
if ( isTimeout === "timeout" ) {
xhr.abort();
}
 
// Stop memory leaks
if ( s.async ) {
xhr = null;
}
}
};
 
// Override the abort handler, if we can (IE 6 doesn't allow it, but that's OK)
// Opera doesn't fire onreadystatechange at all on abort
try {
var oldAbort = xhr.abort;
xhr.abort = function() {
if ( xhr ) {
// oldAbort has no call property in IE7 so
// just do it this way, which works in all
// browsers
Function.prototype.call.call( oldAbort, xhr );
}
 
onreadystatechange( "abort" );
};
} catch( abortError ) {}
 
// Timeout checker
if ( s.async && s.timeout > 0 ) {
setTimeout(function() {
// Check to see if the request is still happening
if ( xhr && !requestDone ) {
onreadystatechange( "timeout" );
}
}, s.timeout);
}
 
// Send the data
try {
xhr.send( noContent || s.data == null ? null : s.data );
 
} catch( sendError ) {
jQuery.handleError( s, xhr, null, sendError );
 
// Fire the complete handlers
jQuery.handleComplete( s, xhr, status, data );
}
 
// firefox 1.5 doesn't fire statechange for sync requests
if ( !s.async ) {
onreadystatechange();
}
 
// return XMLHttpRequest to allow aborting the request etc.
return xhr;
},
 
// Serialize an array of form elements or a set of
// key/values into a query string
param: function( a, traditional ) {
var s = [],
add = function( key, value ) {
// If value is a function, invoke it and return its value
value = jQuery.isFunction(value) ? value() : value;
s[ s.length ] = encodeURIComponent(key) + "=" + encodeURIComponent(value);
};
// Set traditional to true for jQuery <= 1.3.2 behavior.
if ( traditional === undefined ) {
traditional = jQuery.ajaxSettings.traditional;
}
// If an array was passed in, assume that it is an array of form elements.
if ( jQuery.isArray(a) || a.jquery ) {
// Serialize the form elements
jQuery.each( a, function() {
add( this.name, this.value );
});
} else {
// If traditional, encode the "old" way (the way 1.3.2 or older
// did it), otherwise encode params recursively.
for ( var prefix in a ) {
buildParams( prefix, a[prefix], traditional, add );
}
}
 
// Return the resulting serialization
return s.join("&").replace(r20, "+");
}
});
 
function buildParams( prefix, obj, traditional, add ) {
if ( jQuery.isArray(obj) && obj.length ) {
// Serialize array item.
jQuery.each( obj, function( i, v ) {
if ( traditional || rbracket.test( prefix ) ) {
// Treat each array item as a scalar.
add( prefix, v );
 
} else {
// If array item is non-scalar (array or object), encode its
// numeric index to resolve deserialization ambiguity issues.
// Note that rack (as of 1.0.0) can't currently deserialize
// nested arrays properly, and attempting to do so may cause
// a server error. Possible fixes are to modify rack's
// deserialization algorithm or to provide an option or flag
// to force array serialization to be shallow.
buildParams( prefix + "[" + ( typeof v === "object" || jQuery.isArray(v) ? i : "" ) + "]", v, traditional, add );
}
});
} else if ( !traditional && obj != null && typeof obj === "object" ) {
if ( jQuery.isEmptyObject( obj ) ) {
add( prefix, "" );
 
// Serialize object item.
} else {
jQuery.each( obj, function( k, v ) {
buildParams( prefix + "[" + k + "]", v, traditional, add );
});
}
} else {
// Serialize scalar item.
add( prefix, obj );
}
}
 
// This is still on the jQuery object... for now
// Want to move this to jQuery.ajax some day
jQuery.extend({
 
// Counter for holding the number of active queries
active: 0,
 
// Last-Modified header cache for next request
lastModified: {},
etag: {},
 
handleError: function( s, xhr, status, e ) {
// If a local callback was specified, fire it
if ( s.error ) {
s.error.call( s.context, xhr, status, e );
}
 
// Fire the global callback
if ( s.global ) {
jQuery.triggerGlobal( s, "ajaxError", [xhr, s, e] );
}
},
 
handleSuccess: function( s, xhr, status, data ) {
// If a local callback was specified, fire it and pass it the data
if ( s.success ) {
s.success.call( s.context, data, status, xhr );
}
 
// Fire the global callback
if ( s.global ) {
jQuery.triggerGlobal( s, "ajaxSuccess", [xhr, s] );
}
},
 
handleComplete: function( s, xhr, status ) {
// Process result
if ( s.complete ) {
s.complete.call( s.context, xhr, status );
}
 
// The request was completed
if ( s.global ) {
jQuery.triggerGlobal( s, "ajaxComplete", [xhr, s] );
}
 
// Handle the global AJAX counter
if ( s.global && jQuery.active-- === 1 ) {
jQuery.event.trigger( "ajaxStop" );
}
},
triggerGlobal: function( s, type, args ) {
(s.context && s.context.url == null ? jQuery(s.context) : jQuery.event).trigger(type, args);
},
 
// Determines if an XMLHttpRequest was successful or not
httpSuccess: function( xhr ) {
try {
// IE error sometimes returns 1223 when it should be 204 so treat it as success, see #1450
return !xhr.status && location.protocol === "file:" ||
xhr.status >= 200 && xhr.status < 300 ||
xhr.status === 304 || xhr.status === 1223;
} catch(e) {}
 
return false;
},
 
// Determines if an XMLHttpRequest returns NotModified
httpNotModified: function( xhr, url ) {
var lastModified = xhr.getResponseHeader("Last-Modified"),
etag = xhr.getResponseHeader("Etag");
 
if ( lastModified ) {
jQuery.lastModified[url] = lastModified;
}
 
if ( etag ) {
jQuery.etag[url] = etag;
}
 
return xhr.status === 304;
},
 
httpData: function( xhr, type, s ) {
var ct = xhr.getResponseHeader("content-type") || "",
xml = type === "xml" || !type && ct.indexOf("xml") >= 0,
data = xml ? xhr.responseXML : xhr.responseText;
 
if ( xml && data.documentElement.nodeName === "parsererror" ) {
jQuery.error( "parsererror" );
}
 
// Allow a pre-filtering function to sanitize the response
// s is checked to keep backwards compatibility
if ( s && s.dataFilter ) {
data = s.dataFilter( data, type );
}
 
// The filter can actually parse the response
if ( typeof data === "string" ) {
// Get the JavaScript object, if JSON is used.
if ( type === "json" || !type && ct.indexOf("json") >= 0 ) {
data = jQuery.parseJSON( data );
 
// If the type is "script", eval it in global context
} else if ( type === "script" || !type && ct.indexOf("javascript") >= 0 ) {
jQuery.globalEval( data );
}
}
 
return data;
}
 
});
 
/*
* Create the request object; Microsoft failed to properly
* implement the XMLHttpRequest in IE7 (can't request local files),
* so we use the ActiveXObject when it is available
* Additionally XMLHttpRequest can be disabled in IE7/IE8 so
* we need a fallback.
*/
if ( window.ActiveXObject ) {
jQuery.ajaxSettings.xhr = function() {
if ( window.location.protocol !== "file:" ) {
try {
return new window.XMLHttpRequest();
} catch(xhrError) {}
}
 
try {
return new window.ActiveXObject("Microsoft.XMLHTTP");
} catch(activeError) {}
};
}
 
// Does this browser support XHR requests?
jQuery.support.ajax = !!jQuery.ajaxSettings.xhr();
 
 
 
 
var elemdisplay = {},
rfxtypes = /^(?:toggle|show|hide)$/,
rfxnum = /^([+\-]=)?([\d+.\-]+)(.*)$/,
timerId,
fxAttrs = [
// height animations
[ "height", "marginTop", "marginBottom", "paddingTop", "paddingBottom" ],
// width animations
[ "width", "marginLeft", "marginRight", "paddingLeft", "paddingRight" ],
// opacity animations
[ "opacity" ]
];
 
jQuery.fn.extend({
show: function( speed, easing, callback ) {
var elem, display;
 
if ( speed || speed === 0 ) {
return this.animate( genFx("show", 3), speed, easing, callback);
 
} else {
for ( var i = 0, j = this.length; i < j; i++ ) {
elem = this[i];
display = elem.style.display;
 
// Reset the inline display of this element to learn if it is
// being hidden by cascaded rules or not
if ( !jQuery.data(elem, "olddisplay") && display === "none" ) {
display = elem.style.display = "";
}
 
// Set elements which have been overridden with display: none
// in a stylesheet to whatever the default browser style is
// for such an element
if ( display === "" && jQuery.css( elem, "display" ) === "none" ) {
jQuery.data(elem, "olddisplay", defaultDisplay(elem.nodeName));
}
}
 
// Set the display of most of the elements in a second loop
// to avoid the constant reflow
for ( i = 0; i < j; i++ ) {
elem = this[i];
display = elem.style.display;
 
if ( display === "" || display === "none" ) {
elem.style.display = jQuery.data(elem, "olddisplay") || "";
}
}
 
return this;
}
},
 
hide: function( speed, easing, callback ) {
if ( speed || speed === 0 ) {
return this.animate( genFx("hide", 3), speed, easing, callback);
 
} else {
for ( var i = 0, j = this.length; i < j; i++ ) {
var display = jQuery.css( this[i], "display" );
 
if ( display !== "none" ) {
jQuery.data( this[i], "olddisplay", display );
}
}
 
// Set the display of the elements in a second loop
// to avoid the constant reflow
for ( i = 0; i < j; i++ ) {
this[i].style.display = "none";
}
 
return this;
}
},
 
// Save the old toggle function
_toggle: jQuery.fn.toggle,
 
toggle: function( fn, fn2, callback ) {
var bool = typeof fn === "boolean";
 
if ( jQuery.isFunction(fn) && jQuery.isFunction(fn2) ) {
this._toggle.apply( this, arguments );
 
} else if ( fn == null || bool ) {
this.each(function() {
var state = bool ? fn : jQuery(this).is(":hidden");
jQuery(this)[ state ? "show" : "hide" ]();
});
 
} else {
this.animate(genFx("toggle", 3), fn, fn2, callback);
}
 
return this;
},
 
fadeTo: function( speed, to, easing, callback ) {
return this.filter(":hidden").css("opacity", 0).show().end()
.animate({opacity: to}, speed, easing, callback);
},
 
animate: function( prop, speed, easing, callback ) {
var optall = jQuery.speed(speed, easing, callback);
 
if ( jQuery.isEmptyObject( prop ) ) {
return this.each( optall.complete );
}
 
return this[ optall.queue === false ? "each" : "queue" ](function() {
// XXX 'this' does not always have a nodeName when running the
// test suite
 
var opt = jQuery.extend({}, optall), p,
isElement = this.nodeType === 1,
hidden = isElement && jQuery(this).is(":hidden"),
self = this;
 
for ( p in prop ) {
var name = jQuery.camelCase( p );
 
if ( p !== name ) {
prop[ name ] = prop[ p ];
delete prop[ p ];
p = name;
}
 
if ( prop[p] === "hide" && hidden || prop[p] === "show" && !hidden ) {
return opt.complete.call(this);
}
 
if ( isElement && ( p === "height" || p === "width" ) ) {
// Make sure that nothing sneaks out
// Record all 3 overflow attributes because IE does not
// change the overflow attribute when overflowX and
// overflowY are set to the same value
opt.overflow = [ this.style.overflow, this.style.overflowX, this.style.overflowY ];
 
// Set display property to inline-block for height/width
// animations on inline elements that are having width/height
// animated
if ( jQuery.css( this, "display" ) === "inline" &&
jQuery.css( this, "float" ) === "none" ) {
if ( !jQuery.support.inlineBlockNeedsLayout ) {
this.style.display = "inline-block";
 
} else {
var display = defaultDisplay(this.nodeName);
 
// inline-level elements accept inline-block;
// block-level elements need to be inline with layout
if ( display === "inline" ) {
this.style.display = "inline-block";
 
} else {
this.style.display = "inline";
this.style.zoom = 1;
}
}
}
}
 
if ( jQuery.isArray( prop[p] ) ) {
// Create (if needed) and add to specialEasing
(opt.specialEasing = opt.specialEasing || {})[p] = prop[p][1];
prop[p] = prop[p][0];
}
}
 
if ( opt.overflow != null ) {
this.style.overflow = "hidden";
}
 
opt.curAnim = jQuery.extend({}, prop);
 
jQuery.each( prop, function( name, val ) {
var e = new jQuery.fx( self, opt, name );
 
if ( rfxtypes.test(val) ) {
e[ val === "toggle" ? hidden ? "show" : "hide" : val ]( prop );
 
} else {
var parts = rfxnum.exec(val),
start = e.cur() || 0;
 
if ( parts ) {
var end = parseFloat( parts[2] ),
unit = parts[3] || "px";
 
// We need to compute starting value
if ( unit !== "px" ) {
jQuery.style( self, name, (end || 1) + unit);
start = ((end || 1) / e.cur()) * start;
jQuery.style( self, name, start + unit);
}
 
// If a +=/-= token was provided, we're doing a relative animation
if ( parts[1] ) {
end = ((parts[1] === "-=" ? -1 : 1) * end) + start;
}
 
e.custom( start, end, unit );
 
} else {
e.custom( start, val, "" );
}
}
});
 
// For JS strict compliance
return true;
});
},
 
stop: function( clearQueue, gotoEnd ) {
var timers = jQuery.timers;
 
if ( clearQueue ) {
this.queue([]);
}
 
this.each(function() {
// go in reverse order so anything added to the queue during the loop is ignored
for ( var i = timers.length - 1; i >= 0; i-- ) {
if ( timers[i].elem === this ) {
if (gotoEnd) {
// force the next step to be the last
timers[i](true);
}
 
timers.splice(i, 1);
}
}
});
 
// start the next in the queue if the last step wasn't forced
if ( !gotoEnd ) {
this.dequeue();
}
 
return this;
}
 
});
 
function genFx( type, num ) {
var obj = {};
 
jQuery.each( fxAttrs.concat.apply([], fxAttrs.slice(0,num)), function() {
obj[ this ] = type;
});
 
return obj;
}
 
// Generate shortcuts for custom animations
jQuery.each({
slideDown: genFx("show", 1),
slideUp: genFx("hide", 1),
slideToggle: genFx("toggle", 1),
fadeIn: { opacity: "show" },
fadeOut: { opacity: "hide" },
fadeToggle: { opacity: "toggle" }
}, function( name, props ) {
jQuery.fn[ name ] = function( speed, easing, callback ) {
return this.animate( props, speed, easing, callback );
};
});
 
jQuery.extend({
speed: function( speed, easing, fn ) {
var opt = speed && typeof speed === "object" ? jQuery.extend({}, speed) : {
complete: fn || !fn && easing ||
jQuery.isFunction( speed ) && speed,
duration: speed,
easing: fn && easing || easing && !jQuery.isFunction(easing) && easing
};
 
opt.duration = jQuery.fx.off ? 0 : typeof opt.duration === "number" ? opt.duration :
opt.duration in jQuery.fx.speeds ? jQuery.fx.speeds[opt.duration] : jQuery.fx.speeds._default;
 
// Queueing
opt.old = opt.complete;
opt.complete = function() {
if ( opt.queue !== false ) {
jQuery(this).dequeue();
}
if ( jQuery.isFunction( opt.old ) ) {
opt.old.call( this );
}
};
 
return opt;
},
 
easing: {
linear: function( p, n, firstNum, diff ) {
return firstNum + diff * p;
},
swing: function( p, n, firstNum, diff ) {
return ((-Math.cos(p*Math.PI)/2) + 0.5) * diff + firstNum;
}
},
 
timers: [],
 
fx: function( elem, options, prop ) {
this.options = options;
this.elem = elem;
this.prop = prop;
 
if ( !options.orig ) {
options.orig = {};
}
}
 
});
 
jQuery.fx.prototype = {
// Simple function for setting a style value
update: function() {
if ( this.options.step ) {
this.options.step.call( this.elem, this.now, this );
}
 
(jQuery.fx.step[this.prop] || jQuery.fx.step._default)( this );
},
 
// Get the current size
cur: function() {
if ( this.elem[this.prop] != null && (!this.elem.style || this.elem.style[this.prop] == null) ) {
return this.elem[ this.prop ];
}
 
var r = parseFloat( jQuery.css( this.elem, this.prop ) );
return r && r > -10000 ? r : 0;
},
 
// Start an animation from one number to another
custom: function( from, to, unit ) {
var self = this,
fx = jQuery.fx;
 
this.startTime = jQuery.now();
this.start = from;
this.end = to;
this.unit = unit || this.unit || "px";
this.now = this.start;
this.pos = this.state = 0;
 
function t( gotoEnd ) {
return self.step(gotoEnd);
}
 
t.elem = this.elem;
 
if ( t() && jQuery.timers.push(t) && !timerId ) {
timerId = setInterval(fx.tick, fx.interval);
}
},
 
// Simple 'show' function
show: function() {
// Remember where we started, so that we can go back to it later
this.options.orig[this.prop] = jQuery.style( this.elem, this.prop );
this.options.show = true;
 
// Begin the animation
// Make sure that we start at a small width/height to avoid any
// flash of content
this.custom(this.prop === "width" || this.prop === "height" ? 1 : 0, this.cur());
 
// Start by showing the element
jQuery( this.elem ).show();
},
 
// Simple 'hide' function
hide: function() {
// Remember where we started, so that we can go back to it later
this.options.orig[this.prop] = jQuery.style( this.elem, this.prop );
this.options.hide = true;
 
// Begin the animation
this.custom(this.cur(), 0);
},
 
// Each step of an animation
step: function( gotoEnd ) {
var t = jQuery.now(), done = true;
 
if ( gotoEnd || t >= this.options.duration + this.startTime ) {
this.now = this.end;
this.pos = this.state = 1;
this.update();
 
this.options.curAnim[ this.prop ] = true;
 
for ( var i in this.options.curAnim ) {
if ( this.options.curAnim[i] !== true ) {
done = false;
}
}
 
if ( done ) {
// Reset the overflow
if ( this.options.overflow != null && !jQuery.support.shrinkWrapBlocks ) {
var elem = this.elem,
options = this.options;
 
jQuery.each( [ "", "X", "Y" ], function (index, value) {
elem.style[ "overflow" + value ] = options.overflow[index];
} );
}
 
// Hide the element if the "hide" operation was done
if ( this.options.hide ) {
jQuery(this.elem).hide();
}
 
// Reset the properties, if the item has been hidden or shown
if ( this.options.hide || this.options.show ) {
for ( var p in this.options.curAnim ) {
jQuery.style( this.elem, p, this.options.orig[p] );
}
}
 
// Execute the complete function
this.options.complete.call( this.elem );
}
 
return false;
 
} else {
var n = t - this.startTime;
this.state = n / this.options.duration;
 
// Perform the easing function, defaults to swing
var specialEasing = this.options.specialEasing && this.options.specialEasing[this.prop];
var defaultEasing = this.options.easing || (jQuery.easing.swing ? "swing" : "linear");
this.pos = jQuery.easing[specialEasing || defaultEasing](this.state, n, 0, 1, this.options.duration);
this.now = this.start + ((this.end - this.start) * this.pos);
 
// Perform the next step of the animation
this.update();
}
 
return true;
}
};
 
jQuery.extend( jQuery.fx, {
tick: function() {
var timers = jQuery.timers;
 
for ( var i = 0; i < timers.length; i++ ) {
if ( !timers[i]() ) {
timers.splice(i--, 1);
}
}
 
if ( !timers.length ) {
jQuery.fx.stop();
}
},
 
interval: 13,
 
stop: function() {
clearInterval( timerId );
timerId = null;
},
 
speeds: {
slow: 600,
fast: 200,
// Default speed
_default: 400
},
 
step: {
opacity: function( fx ) {
jQuery.style( fx.elem, "opacity", fx.now );
},
 
_default: function( fx ) {
if ( fx.elem.style && fx.elem.style[ fx.prop ] != null ) {
fx.elem.style[ fx.prop ] = (fx.prop === "width" || fx.prop === "height" ? Math.max(0, fx.now) : fx.now) + fx.unit;
} else {
fx.elem[ fx.prop ] = fx.now;
}
}
}
});
 
if ( jQuery.expr && jQuery.expr.filters ) {
jQuery.expr.filters.animated = function( elem ) {
return jQuery.grep(jQuery.timers, function( fn ) {
return elem === fn.elem;
}).length;
};
}
 
function defaultDisplay( nodeName ) {
if ( !elemdisplay[ nodeName ] ) {
var elem = jQuery("<" + nodeName + ">").appendTo("body"),
display = elem.css("display");
 
elem.remove();
 
if ( display === "none" || display === "" ) {
display = "block";
}
 
elemdisplay[ nodeName ] = display;
}
 
return elemdisplay[ nodeName ];
}
 
 
 
 
var rtable = /^t(?:able|d|h)$/i,
rroot = /^(?:body|html)$/i;
 
if ( "getBoundingClientRect" in document.documentElement ) {
jQuery.fn.offset = function( options ) {
var elem = this[0], box;
 
if ( options ) {
return this.each(function( i ) {
jQuery.offset.setOffset( this, options, i );
});
}
 
if ( !elem || !elem.ownerDocument ) {
return null;
}
 
if ( elem === elem.ownerDocument.body ) {
return jQuery.offset.bodyOffset( elem );
}
 
try {
box = elem.getBoundingClientRect();
} catch(e) {}
 
var doc = elem.ownerDocument,
docElem = doc.documentElement;
 
// Make sure we're not dealing with a disconnected DOM node
if ( !box || !jQuery.contains( docElem, elem ) ) {
return box || { top: 0, left: 0 };
}
 
var body = doc.body,
win = getWindow(doc),
clientTop = docElem.clientTop || body.clientTop || 0,
clientLeft = docElem.clientLeft || body.clientLeft || 0,
scrollTop = (win.pageYOffset || jQuery.support.boxModel && docElem.scrollTop || body.scrollTop ),
scrollLeft = (win.pageXOffset || jQuery.support.boxModel && docElem.scrollLeft || body.scrollLeft),
top = box.top + scrollTop - clientTop,
left = box.left + scrollLeft - clientLeft;
 
return { top: top, left: left };
};
 
} else {
jQuery.fn.offset = function( options ) {
var elem = this[0];
 
if ( options ) {
return this.each(function( i ) {
jQuery.offset.setOffset( this, options, i );
});
}
 
if ( !elem || !elem.ownerDocument ) {
return null;
}
 
if ( elem === elem.ownerDocument.body ) {
return jQuery.offset.bodyOffset( elem );
}
 
jQuery.offset.initialize();
 
var computedStyle,
offsetParent = elem.offsetParent,
prevOffsetParent = elem,
doc = elem.ownerDocument,
docElem = doc.documentElement,
body = doc.body,
defaultView = doc.defaultView,
prevComputedStyle = defaultView ? defaultView.getComputedStyle( elem, null ) : elem.currentStyle,
top = elem.offsetTop,
left = elem.offsetLeft;
 
while ( (elem = elem.parentNode) && elem !== body && elem !== docElem ) {
if ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position === "fixed" ) {
break;
}
 
computedStyle = defaultView ? defaultView.getComputedStyle(elem, null) : elem.currentStyle;
top -= elem.scrollTop;
left -= elem.scrollLeft;
 
if ( elem === offsetParent ) {
top += elem.offsetTop;
left += elem.offsetLeft;
 
if ( jQuery.offset.doesNotAddBorder && !(jQuery.offset.doesAddBorderForTableAndCells && rtable.test(elem.nodeName)) ) {
top += parseFloat( computedStyle.borderTopWidth ) || 0;
left += parseFloat( computedStyle.borderLeftWidth ) || 0;
}
 
prevOffsetParent = offsetParent;
offsetParent = elem.offsetParent;
}
 
if ( jQuery.offset.subtractsBorderForOverflowNotVisible && computedStyle.overflow !== "visible" ) {
top += parseFloat( computedStyle.borderTopWidth ) || 0;
left += parseFloat( computedStyle.borderLeftWidth ) || 0;
}
 
prevComputedStyle = computedStyle;
}
 
if ( prevComputedStyle.position === "relative" || prevComputedStyle.position === "static" ) {
top += body.offsetTop;
left += body.offsetLeft;
}
 
if ( jQuery.offset.supportsFixedPosition && prevComputedStyle.position === "fixed" ) {
top += Math.max( docElem.scrollTop, body.scrollTop );
left += Math.max( docElem.scrollLeft, body.scrollLeft );
}
 
return { top: top, left: left };
};
}
 
jQuery.offset = {
initialize: function() {
var body = document.body, container = document.createElement("div"), innerDiv, checkDiv, table, td, bodyMarginTop = parseFloat( jQuery.css(body, "marginTop") ) || 0,
html = "<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";
 
jQuery.extend( container.style, { position: "absolute", top: 0, left: 0, margin: 0, border: 0, width: "1px", height: "1px", visibility: "hidden" } );
 
container.innerHTML = html;
body.insertBefore( container, body.firstChild );
innerDiv = container.firstChild;
checkDiv = innerDiv.firstChild;
td = innerDiv.nextSibling.firstChild.firstChild;
 
this.doesNotAddBorder = (checkDiv.offsetTop !== 5);
this.doesAddBorderForTableAndCells = (td.offsetTop === 5);
 
checkDiv.style.position = "fixed";
checkDiv.style.top = "20px";
 
// safari subtracts parent border width here which is 5px
this.supportsFixedPosition = (checkDiv.offsetTop === 20 || checkDiv.offsetTop === 15);
checkDiv.style.position = checkDiv.style.top = "";
 
innerDiv.style.overflow = "hidden";
innerDiv.style.position = "relative";
 
this.subtractsBorderForOverflowNotVisible = (checkDiv.offsetTop === -5);
 
this.doesNotIncludeMarginInBodyOffset = (body.offsetTop !== bodyMarginTop);
 
body.removeChild( container );
body = container = innerDiv = checkDiv = table = td = null;
jQuery.offset.initialize = jQuery.noop;
},
 
bodyOffset: function( body ) {
var top = body.offsetTop,
left = body.offsetLeft;
 
jQuery.offset.initialize();
 
if ( jQuery.offset.doesNotIncludeMarginInBodyOffset ) {
top += parseFloat( jQuery.css(body, "marginTop") ) || 0;
left += parseFloat( jQuery.css(body, "marginLeft") ) || 0;
}
 
return { top: top, left: left };
},
setOffset: function( elem, options, i ) {
var position = jQuery.css( elem, "position" );
 
// set position first, in-case top/left are set even on static elem
if ( position === "static" ) {
elem.style.position = "relative";
}
 
var curElem = jQuery( elem ),
curOffset = curElem.offset(),
curCSSTop = jQuery.css( elem, "top" ),
curCSSLeft = jQuery.css( elem, "left" ),
calculatePosition = (position === "absolute" && jQuery.inArray('auto', [curCSSTop, curCSSLeft]) > -1),
props = {}, curPosition = {}, curTop, curLeft;
 
// need to be able to calculate position if either top or left is auto and position is absolute
if ( calculatePosition ) {
curPosition = curElem.position();
}
 
curTop = calculatePosition ? curPosition.top : parseInt( curCSSTop, 10 ) || 0;
curLeft = calculatePosition ? curPosition.left : parseInt( curCSSLeft, 10 ) || 0;
 
if ( jQuery.isFunction( options ) ) {
options = options.call( elem, i, curOffset );
}
 
if (options.top != null) {
props.top = (options.top - curOffset.top) + curTop;
}
if (options.left != null) {
props.left = (options.left - curOffset.left) + curLeft;
}
if ( "using" in options ) {
options.using.call( elem, props );
} else {
curElem.css( props );
}
}
};
 
 
jQuery.fn.extend({
position: function() {
if ( !this[0] ) {
return null;
}
 
var elem = this[0],
 
// Get *real* offsetParent
offsetParent = this.offsetParent(),
 
// Get correct offsets
offset = this.offset(),
parentOffset = rroot.test(offsetParent[0].nodeName) ? { top: 0, left: 0 } : offsetParent.offset();
 
// Subtract element margins
// note: when an element has margin: auto the offsetLeft and marginLeft
// are the same in Safari causing offset.left to incorrectly be 0
offset.top -= parseFloat( jQuery.css(elem, "marginTop") ) || 0;
offset.left -= parseFloat( jQuery.css(elem, "marginLeft") ) || 0;
 
// Add offsetParent borders
parentOffset.top += parseFloat( jQuery.css(offsetParent[0], "borderTopWidth") ) || 0;
parentOffset.left += parseFloat( jQuery.css(offsetParent[0], "borderLeftWidth") ) || 0;
 
// Subtract the two offsets
return {
top: offset.top - parentOffset.top,
left: offset.left - parentOffset.left
};
},
 
offsetParent: function() {
return this.map(function() {
var offsetParent = this.offsetParent || document.body;
while ( offsetParent && (!rroot.test(offsetParent.nodeName) && jQuery.css(offsetParent, "position") === "static") ) {
offsetParent = offsetParent.offsetParent;
}
return offsetParent;
});
}
});
 
 
// Create scrollLeft and scrollTop methods
jQuery.each( ["Left", "Top"], function( i, name ) {
var method = "scroll" + name;
 
jQuery.fn[ method ] = function(val) {
var elem = this[0], win;
if ( !elem ) {
return null;
}
 
if ( val !== undefined ) {
// Set the scroll offset
return this.each(function() {
win = getWindow( this );
 
if ( win ) {
win.scrollTo(
!i ? val : jQuery(win).scrollLeft(),
i ? val : jQuery(win).scrollTop()
);
 
} else {
this[ method ] = val;
}
});
} else {
win = getWindow( elem );
 
// Return the scroll offset
return win ? ("pageXOffset" in win) ? win[ i ? "pageYOffset" : "pageXOffset" ] :
jQuery.support.boxModel && win.document.documentElement[ method ] ||
win.document.body[ method ] :
elem[ method ];
}
};
});
 
function getWindow( elem ) {
return jQuery.isWindow( elem ) ?
elem :
elem.nodeType === 9 ?
elem.defaultView || elem.parentWindow :
false;
}
 
 
 
 
// Create innerHeight, innerWidth, outerHeight and outerWidth methods
jQuery.each([ "Height", "Width" ], function( i, name ) {
 
var type = name.toLowerCase();
 
// innerHeight and innerWidth
jQuery.fn["inner" + name] = function() {
return this[0] ?
parseFloat( jQuery.css( this[0], type, "padding" ) ) :
null;
};
 
// outerHeight and outerWidth
jQuery.fn["outer" + name] = function( margin ) {
return this[0] ?
parseFloat( jQuery.css( this[0], type, margin ? "margin" : "border" ) ) :
null;
};
 
jQuery.fn[ type ] = function( size ) {
// Get window width or height
var elem = this[0];
if ( !elem ) {
return size == null ? null : this;
}
if ( jQuery.isFunction( size ) ) {
return this.each(function( i ) {
var self = jQuery( this );
self[ type ]( size.call( this, i, self[ type ]() ) );
});
}
 
if ( jQuery.isWindow( elem ) ) {
// Everyone else use document.documentElement or document.body depending on Quirks vs Standards mode
return elem.document.compatMode === "CSS1Compat" && elem.document.documentElement[ "client" + name ] ||
elem.document.body[ "client" + name ];
 
// Get document width or height
} else if ( elem.nodeType === 9 ) {
// Either scroll[Width/Height] or offset[Width/Height], whichever is greater
return Math.max(
elem.documentElement["client" + name],
elem.body["scroll" + name], elem.documentElement["scroll" + name],
elem.body["offset" + name], elem.documentElement["offset" + name]
);
 
// Get or set width or height on the element
} else if ( size === undefined ) {
var orig = jQuery.css( elem, type ),
ret = parseFloat( orig );
 
return jQuery.isNaN( ret ) ? orig : ret;
 
// Set the width or height on the element (default to pixels if value is unitless)
} else {
return this.css( type, typeof size === "string" ? size : size + "px" );
}
};
 
});
 
 
})(window);
/trunk/applications/saisie/squelettes/js/jquery_ui/jquery.ui.datepicker.js
New file
0,0 → 1,1732
/*
* jQuery UI Datepicker 1.8.6
*
* Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Datepicker
*
* Depends:
* jquery.ui.core.js
*/
(function( $, undefined ) {
 
$.extend($.ui, { datepicker: { version: "1.8.6" } });
 
var PROP_NAME = 'datepicker';
var dpuuid = new Date().getTime();
 
/* Date picker manager.
Use the singleton instance of this class, $.datepicker, to interact with the date picker.
Settings for (groups of) date pickers are maintained in an instance object,
allowing multiple different settings on the same page. */
 
function Datepicker() {
this.debug = false; // Change this to true to start debugging
this._curInst = null; // The current instance in use
this._keyEvent = false; // If the last event was a key event
this._disabledInputs = []; // List of date picker inputs that have been disabled
this._datepickerShowing = false; // True if the popup picker is showing , false if not
this._inDialog = false; // True if showing within a "dialog", false if not
this._mainDivId = 'ui-datepicker-div'; // The ID of the main datepicker division
this._inlineClass = 'ui-datepicker-inline'; // The name of the inline marker class
this._appendClass = 'ui-datepicker-append'; // The name of the append marker class
this._triggerClass = 'ui-datepicker-trigger'; // The name of the trigger marker class
this._dialogClass = 'ui-datepicker-dialog'; // The name of the dialog marker class
this._disableClass = 'ui-datepicker-disabled'; // The name of the disabled covering marker class
this._unselectableClass = 'ui-datepicker-unselectable'; // The name of the unselectable cell marker class
this._currentClass = 'ui-datepicker-current-day'; // The name of the current day marker class
this._dayOverClass = 'ui-datepicker-days-cell-over'; // The name of the day hover marker class
this.regional = []; // Available regional settings, indexed by language code
this.regional[''] = { // Default regional settings
closeText: 'Done', // Display text for close link
prevText: 'Prev', // Display text for previous month link
nextText: 'Next', // Display text for next month link
currentText: 'Today', // Display text for current month link
monthNames: ['January','February','March','April','May','June',
'July','August','September','October','November','December'], // Names of months for drop-down and formatting
monthNamesShort: ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'], // For formatting
dayNames: ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'], // For formatting
dayNamesShort: ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'], // For formatting
dayNamesMin: ['Su','Mo','Tu','We','Th','Fr','Sa'], // Column headings for days starting at Sunday
weekHeader: 'Wk', // Column header for week of the year
dateFormat: 'mm/dd/yy', // See format options on parseDate
firstDay: 0, // The first day of the week, Sun = 0, Mon = 1, ...
isRTL: false, // True if right-to-left language, false if left-to-right
showMonthAfterYear: false, // True if the year select precedes month, false for month then year
yearSuffix: '' // Additional text to append to the year in the month headers
};
this._defaults = { // Global defaults for all the date picker instances
showOn: 'focus', // 'focus' for popup on focus,
// 'button' for trigger button, or 'both' for either
showAnim: 'fadeIn', // Name of jQuery animation for popup
showOptions: {}, // Options for enhanced animations
defaultDate: null, // Used when field is blank: actual date,
// +/-number for offset from today, null for today
appendText: '', // Display text following the input box, e.g. showing the format
buttonText: '...', // Text for trigger button
buttonImage: '', // URL for trigger button image
buttonImageOnly: false, // True if the image appears alone, false if it appears on a button
hideIfNoPrevNext: false, // True to hide next/previous month links
// if not applicable, false to just disable them
navigationAsDateFormat: false, // True if date formatting applied to prev/today/next links
gotoCurrent: false, // True if today link goes back to current selection instead
changeMonth: false, // True if month can be selected directly, false if only prev/next
changeYear: false, // True if year can be selected directly, false if only prev/next
yearRange: 'c-10:c+10', // Range of years to display in drop-down,
// either relative to today's year (-nn:+nn), relative to currently displayed year
// (c-nn:c+nn), absolute (nnnn:nnnn), or a combination of the above (nnnn:-n)
showOtherMonths: false, // True to show dates in other months, false to leave blank
selectOtherMonths: false, // True to allow selection of dates in other months, false for unselectable
showWeek: false, // True to show week of the year, false to not show it
calculateWeek: this.iso8601Week, // How to calculate the week of the year,
// takes a Date and returns the number of the week for it
shortYearCutoff: '+10', // Short year values < this are in the current century,
// > this are in the previous century,
// string value starting with '+' for current year + value
minDate: null, // The earliest selectable date, or null for no limit
maxDate: null, // The latest selectable date, or null for no limit
duration: 'fast', // Duration of display/closure
beforeShowDay: null, // Function that takes a date and returns an array with
// [0] = true if selectable, false if not, [1] = custom CSS class name(s) or '',
// [2] = cell title (optional), e.g. $.datepicker.noWeekends
beforeShow: null, // Function that takes an input field and
// returns a set of custom settings for the date picker
onSelect: null, // Define a callback function when a date is selected
onChangeMonthYear: null, // Define a callback function when the month or year is changed
onClose: null, // Define a callback function when the datepicker is closed
numberOfMonths: 1, // Number of months to show at a time
showCurrentAtPos: 0, // The position in multipe months at which to show the current month (starting at 0)
stepMonths: 1, // Number of months to step back/forward
stepBigMonths: 12, // Number of months to step back/forward for the big links
altField: '', // Selector for an alternate field to store selected dates into
altFormat: '', // The date format to use for the alternate field
constrainInput: true, // The input is constrained by the current date format
showButtonPanel: false, // True to show button panel, false to not show it
autoSize: false // True to size the input for the date format, false to leave as is
};
$.extend(this._defaults, this.regional['']);
this.dpDiv = $('<div id="' + this._mainDivId + '" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all ui-helper-hidden-accessible"></div>');
}
 
$.extend(Datepicker.prototype, {
/* Class name added to elements to indicate already configured with a date picker. */
markerClassName: 'hasDatepicker',
 
/* Debug logging (if enabled). */
log: function () {
if (this.debug)
console.log.apply('', arguments);
},
// TODO rename to "widget" when switching to widget factory
_widgetDatepicker: function() {
return this.dpDiv;
},
 
/* Override the default settings for all instances of the date picker.
@param settings object - the new settings to use as defaults (anonymous object)
@return the manager object */
setDefaults: function(settings) {
extendRemove(this._defaults, settings || {});
return this;
},
 
/* Attach the date picker to a jQuery selection.
@param target element - the target input field or division or span
@param settings object - the new settings to use for this date picker instance (anonymous) */
_attachDatepicker: function(target, settings) {
// check for settings on the control itself - in namespace 'date:'
var inlineSettings = null;
for (var attrName in this._defaults) {
var attrValue = target.getAttribute('date:' + attrName);
if (attrValue) {
inlineSettings = inlineSettings || {};
try {
inlineSettings[attrName] = eval(attrValue);
} catch (err) {
inlineSettings[attrName] = attrValue;
}
}
}
var nodeName = target.nodeName.toLowerCase();
var inline = (nodeName == 'div' || nodeName == 'span');
if (!target.id) {
this.uuid += 1;
target.id = 'dp' + this.uuid;
}
var inst = this._newInst($(target), inline);
inst.settings = $.extend({}, settings || {}, inlineSettings || {});
if (nodeName == 'input') {
this._connectDatepicker(target, inst);
} else if (inline) {
this._inlineDatepicker(target, inst);
}
},
 
/* Create a new instance object. */
_newInst: function(target, inline) {
var id = target[0].id.replace(/([^A-Za-z0-9_-])/g, '\\\\$1'); // escape jQuery meta chars
return {id: id, input: target, // associated target
selectedDay: 0, selectedMonth: 0, selectedYear: 0, // current selection
drawMonth: 0, drawYear: 0, // month being drawn
inline: inline, // is datepicker inline or not
dpDiv: (!inline ? this.dpDiv : // presentation div
$('<div class="' + this._inlineClass + ' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>'))};
},
 
/* Attach the date picker to an input field. */
_connectDatepicker: function(target, inst) {
var input = $(target);
inst.append = $([]);
inst.trigger = $([]);
if (input.hasClass(this.markerClassName))
return;
this._attachments(input, inst);
input.addClass(this.markerClassName).keydown(this._doKeyDown).
keypress(this._doKeyPress).keyup(this._doKeyUp).
bind("setData.datepicker", function(event, key, value) {
inst.settings[key] = value;
}).bind("getData.datepicker", function(event, key) {
return this._get(inst, key);
});
this._autoSize(inst);
$.data(target, PROP_NAME, inst);
},
 
/* Make attachments based on settings. */
_attachments: function(input, inst) {
var appendText = this._get(inst, 'appendText');
var isRTL = this._get(inst, 'isRTL');
if (inst.append)
inst.append.remove();
if (appendText) {
inst.append = $('<span class="' + this._appendClass + '">' + appendText + '</span>');
input[isRTL ? 'before' : 'after'](inst.append);
}
input.unbind('focus', this._showDatepicker);
if (inst.trigger)
inst.trigger.remove();
var showOn = this._get(inst, 'showOn');
if (showOn == 'focus' || showOn == 'both') // pop-up date picker when in the marked field
input.focus(this._showDatepicker);
if (showOn == 'button' || showOn == 'both') { // pop-up date picker when button clicked
var buttonText = this._get(inst, 'buttonText');
var buttonImage = this._get(inst, 'buttonImage');
inst.trigger = $(this._get(inst, 'buttonImageOnly') ?
$('<img/>').addClass(this._triggerClass).
attr({ src: buttonImage, alt: buttonText, title: buttonText }) :
$('<button type="button"></button>').addClass(this._triggerClass).
html(buttonImage == '' ? buttonText : $('<img/>').attr(
{ src:buttonImage, alt:buttonText, title:buttonText })));
input[isRTL ? 'before' : 'after'](inst.trigger);
inst.trigger.click(function() {
if ($.datepicker._datepickerShowing && $.datepicker._lastInput == input[0])
$.datepicker._hideDatepicker();
else
$.datepicker._showDatepicker(input[0]);
return false;
});
}
},
 
/* Apply the maximum length for the date format. */
_autoSize: function(inst) {
if (this._get(inst, 'autoSize') && !inst.inline) {
var date = new Date(2009, 12 - 1, 20); // Ensure double digits
var dateFormat = this._get(inst, 'dateFormat');
if (dateFormat.match(/[DM]/)) {
var findMax = function(names) {
var max = 0;
var maxI = 0;
for (var i = 0; i < names.length; i++) {
if (names[i].length > max) {
max = names[i].length;
maxI = i;
}
}
return maxI;
};
date.setMonth(findMax(this._get(inst, (dateFormat.match(/MM/) ?
'monthNames' : 'monthNamesShort'))));
date.setDate(findMax(this._get(inst, (dateFormat.match(/DD/) ?
'dayNames' : 'dayNamesShort'))) + 20 - date.getDay());
}
inst.input.attr('size', this._formatDate(inst, date).length);
}
},
 
/* Attach an inline date picker to a div. */
_inlineDatepicker: function(target, inst) {
var divSpan = $(target);
if (divSpan.hasClass(this.markerClassName))
return;
divSpan.addClass(this.markerClassName).append(inst.dpDiv).
bind("setData.datepicker", function(event, key, value){
inst.settings[key] = value;
}).bind("getData.datepicker", function(event, key){
return this._get(inst, key);
});
$.data(target, PROP_NAME, inst);
this._setDate(inst, this._getDefaultDate(inst), true);
this._updateDatepicker(inst);
this._updateAlternate(inst);
},
 
/* Pop-up the date picker in a "dialog" box.
@param input element - ignored
@param date string or Date - the initial date to display
@param onSelect function - the function to call when a date is selected
@param settings object - update the dialog date picker instance's settings (anonymous object)
@param pos int[2] - coordinates for the dialog's position within the screen or
event - with x/y coordinates or
leave empty for default (screen centre)
@return the manager object */
_dialogDatepicker: function(input, date, onSelect, settings, pos) {
var inst = this._dialogInst; // internal instance
if (!inst) {
this.uuid += 1;
var id = 'dp' + this.uuid;
this._dialogInput = $('<input type="text" id="' + id +
'" style="position: absolute; top: -100px; width: 0px; z-index: -10;"/>');
this._dialogInput.keydown(this._doKeyDown);
$('body').append(this._dialogInput);
inst = this._dialogInst = this._newInst(this._dialogInput, false);
inst.settings = {};
$.data(this._dialogInput[0], PROP_NAME, inst);
}
extendRemove(inst.settings, settings || {});
date = (date && date.constructor == Date ? this._formatDate(inst, date) : date);
this._dialogInput.val(date);
 
this._pos = (pos ? (pos.length ? pos : [pos.pageX, pos.pageY]) : null);
if (!this._pos) {
var browserWidth = document.documentElement.clientWidth;
var browserHeight = document.documentElement.clientHeight;
var scrollX = document.documentElement.scrollLeft || document.body.scrollLeft;
var scrollY = document.documentElement.scrollTop || document.body.scrollTop;
this._pos = // should use actual width/height below
[(browserWidth / 2) - 100 + scrollX, (browserHeight / 2) - 150 + scrollY];
}
 
// move input on screen for focus, but hidden behind dialog
this._dialogInput.css('left', (this._pos[0] + 20) + 'px').css('top', this._pos[1] + 'px');
inst.settings.onSelect = onSelect;
this._inDialog = true;
this.dpDiv.addClass(this._dialogClass);
this._showDatepicker(this._dialogInput[0]);
if ($.blockUI)
$.blockUI(this.dpDiv);
$.data(this._dialogInput[0], PROP_NAME, inst);
return this;
},
 
/* Detach a datepicker from its control.
@param target element - the target input field or division or span */
_destroyDatepicker: function(target) {
var $target = $(target);
var inst = $.data(target, PROP_NAME);
if (!$target.hasClass(this.markerClassName)) {
return;
}
var nodeName = target.nodeName.toLowerCase();
$.removeData(target, PROP_NAME);
if (nodeName == 'input') {
inst.append.remove();
inst.trigger.remove();
$target.removeClass(this.markerClassName).
unbind('focus', this._showDatepicker).
unbind('keydown', this._doKeyDown).
unbind('keypress', this._doKeyPress).
unbind('keyup', this._doKeyUp);
} else if (nodeName == 'div' || nodeName == 'span')
$target.removeClass(this.markerClassName).empty();
},
 
/* Enable the date picker to a jQuery selection.
@param target element - the target input field or division or span */
_enableDatepicker: function(target) {
var $target = $(target);
var inst = $.data(target, PROP_NAME);
if (!$target.hasClass(this.markerClassName)) {
return;
}
var nodeName = target.nodeName.toLowerCase();
if (nodeName == 'input') {
target.disabled = false;
inst.trigger.filter('button').
each(function() { this.disabled = false; }).end().
filter('img').css({opacity: '1.0', cursor: ''});
}
else if (nodeName == 'div' || nodeName == 'span') {
var inline = $target.children('.' + this._inlineClass);
inline.children().removeClass('ui-state-disabled');
}
this._disabledInputs = $.map(this._disabledInputs,
function(value) { return (value == target ? null : value); }); // delete entry
},
 
/* Disable the date picker to a jQuery selection.
@param target element - the target input field or division or span */
_disableDatepicker: function(target) {
var $target = $(target);
var inst = $.data(target, PROP_NAME);
if (!$target.hasClass(this.markerClassName)) {
return;
}
var nodeName = target.nodeName.toLowerCase();
if (nodeName == 'input') {
target.disabled = true;
inst.trigger.filter('button').
each(function() { this.disabled = true; }).end().
filter('img').css({opacity: '0.5', cursor: 'default'});
}
else if (nodeName == 'div' || nodeName == 'span') {
var inline = $target.children('.' + this._inlineClass);
inline.children().addClass('ui-state-disabled');
}
this._disabledInputs = $.map(this._disabledInputs,
function(value) { return (value == target ? null : value); }); // delete entry
this._disabledInputs[this._disabledInputs.length] = target;
},
 
/* Is the first field in a jQuery collection disabled as a datepicker?
@param target element - the target input field or division or span
@return boolean - true if disabled, false if enabled */
_isDisabledDatepicker: function(target) {
if (!target) {
return false;
}
for (var i = 0; i < this._disabledInputs.length; i++) {
if (this._disabledInputs[i] == target)
return true;
}
return false;
},
 
/* Retrieve the instance data for the target control.
@param target element - the target input field or division or span
@return object - the associated instance data
@throws error if a jQuery problem getting data */
_getInst: function(target) {
try {
return $.data(target, PROP_NAME);
}
catch (err) {
throw 'Missing instance data for this datepicker';
}
},
 
/* Update or retrieve the settings for a date picker attached to an input field or division.
@param target element - the target input field or division or span
@param name object - the new settings to update or
string - the name of the setting to change or retrieve,
when retrieving also 'all' for all instance settings or
'defaults' for all global defaults
@param value any - the new value for the setting
(omit if above is an object or to retrieve a value) */
_optionDatepicker: function(target, name, value) {
var inst = this._getInst(target);
if (arguments.length == 2 && typeof name == 'string') {
return (name == 'defaults' ? $.extend({}, $.datepicker._defaults) :
(inst ? (name == 'all' ? $.extend({}, inst.settings) :
this._get(inst, name)) : null));
}
var settings = name || {};
if (typeof name == 'string') {
settings = {};
settings[name] = value;
}
if (inst) {
if (this._curInst == inst) {
this._hideDatepicker();
}
var date = this._getDateDatepicker(target, true);
extendRemove(inst.settings, settings);
this._attachments($(target), inst);
this._autoSize(inst);
this._setDateDatepicker(target, date);
this._updateDatepicker(inst);
}
},
 
// change method deprecated
_changeDatepicker: function(target, name, value) {
this._optionDatepicker(target, name, value);
},
 
/* Redraw the date picker attached to an input field or division.
@param target element - the target input field or division or span */
_refreshDatepicker: function(target) {
var inst = this._getInst(target);
if (inst) {
this._updateDatepicker(inst);
}
},
 
/* Set the dates for a jQuery selection.
@param target element - the target input field or division or span
@param date Date - the new date */
_setDateDatepicker: function(target, date) {
var inst = this._getInst(target);
if (inst) {
this._setDate(inst, date);
this._updateDatepicker(inst);
this._updateAlternate(inst);
}
},
 
/* Get the date(s) for the first entry in a jQuery selection.
@param target element - the target input field or division or span
@param noDefault boolean - true if no default date is to be used
@return Date - the current date */
_getDateDatepicker: function(target, noDefault) {
var inst = this._getInst(target);
if (inst && !inst.inline)
this._setDateFromField(inst, noDefault);
return (inst ? this._getDate(inst) : null);
},
 
/* Handle keystrokes. */
_doKeyDown: function(event) {
var inst = $.datepicker._getInst(event.target);
var handled = true;
var isRTL = inst.dpDiv.is('.ui-datepicker-rtl');
inst._keyEvent = true;
if ($.datepicker._datepickerShowing)
switch (event.keyCode) {
case 9: $.datepicker._hideDatepicker();
handled = false;
break; // hide on tab out
case 13: var sel = $('td.' + $.datepicker._dayOverClass, inst.dpDiv).
add($('td.' + $.datepicker._currentClass, inst.dpDiv));
if (sel[0])
$.datepicker._selectDay(event.target, inst.selectedMonth, inst.selectedYear, sel[0]);
else
$.datepicker._hideDatepicker();
return false; // don't submit the form
break; // select the value on enter
case 27: $.datepicker._hideDatepicker();
break; // hide on escape
case 33: $.datepicker._adjustDate(event.target, (event.ctrlKey ?
-$.datepicker._get(inst, 'stepBigMonths') :
-$.datepicker._get(inst, 'stepMonths')), 'M');
break; // previous month/year on page up/+ ctrl
case 34: $.datepicker._adjustDate(event.target, (event.ctrlKey ?
+$.datepicker._get(inst, 'stepBigMonths') :
+$.datepicker._get(inst, 'stepMonths')), 'M');
break; // next month/year on page down/+ ctrl
case 35: if (event.ctrlKey || event.metaKey) $.datepicker._clearDate(event.target);
handled = event.ctrlKey || event.metaKey;
break; // clear on ctrl or command +end
case 36: if (event.ctrlKey || event.metaKey) $.datepicker._gotoToday(event.target);
handled = event.ctrlKey || event.metaKey;
break; // current on ctrl or command +home
case 37: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, (isRTL ? +1 : -1), 'D');
handled = event.ctrlKey || event.metaKey;
// -1 day on ctrl or command +left
if (event.originalEvent.altKey) $.datepicker._adjustDate(event.target, (event.ctrlKey ?
-$.datepicker._get(inst, 'stepBigMonths') :
-$.datepicker._get(inst, 'stepMonths')), 'M');
// next month/year on alt +left on Mac
break;
case 38: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, -7, 'D');
handled = event.ctrlKey || event.metaKey;
break; // -1 week on ctrl or command +up
case 39: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, (isRTL ? -1 : +1), 'D');
handled = event.ctrlKey || event.metaKey;
// +1 day on ctrl or command +right
if (event.originalEvent.altKey) $.datepicker._adjustDate(event.target, (event.ctrlKey ?
+$.datepicker._get(inst, 'stepBigMonths') :
+$.datepicker._get(inst, 'stepMonths')), 'M');
// next month/year on alt +right
break;
case 40: if (event.ctrlKey || event.metaKey) $.datepicker._adjustDate(event.target, +7, 'D');
handled = event.ctrlKey || event.metaKey;
break; // +1 week on ctrl or command +down
default: handled = false;
}
else if (event.keyCode == 36 && event.ctrlKey) // display the date picker on ctrl+home
$.datepicker._showDatepicker(this);
else {
handled = false;
}
if (handled) {
event.preventDefault();
event.stopPropagation();
}
},
 
/* Filter entered characters - based on date format. */
_doKeyPress: function(event) {
var inst = $.datepicker._getInst(event.target);
if ($.datepicker._get(inst, 'constrainInput')) {
var chars = $.datepicker._possibleChars($.datepicker._get(inst, 'dateFormat'));
var chr = String.fromCharCode(event.charCode == undefined ? event.keyCode : event.charCode);
return event.ctrlKey || (chr < ' ' || !chars || chars.indexOf(chr) > -1);
}
},
 
/* Synchronise manual entry and field/alternate field. */
_doKeyUp: function(event) {
var inst = $.datepicker._getInst(event.target);
if (inst.input.val() != inst.lastVal) {
try {
var date = $.datepicker.parseDate($.datepicker._get(inst, 'dateFormat'),
(inst.input ? inst.input.val() : null),
$.datepicker._getFormatConfig(inst));
if (date) { // only if valid
$.datepicker._setDateFromField(inst);
$.datepicker._updateAlternate(inst);
$.datepicker._updateDatepicker(inst);
}
}
catch (event) {
$.datepicker.log(event);
}
}
return true;
},
 
/* Pop-up the date picker for a given input field.
@param input element - the input field attached to the date picker or
event - if triggered by focus */
_showDatepicker: function(input) {
input = input.target || input;
if (input.nodeName.toLowerCase() != 'input') // find from button/image trigger
input = $('input', input.parentNode)[0];
if ($.datepicker._isDisabledDatepicker(input) || $.datepicker._lastInput == input) // already here
return;
var inst = $.datepicker._getInst(input);
if ($.datepicker._curInst && $.datepicker._curInst != inst) {
$.datepicker._curInst.dpDiv.stop(true, true);
}
var beforeShow = $.datepicker._get(inst, 'beforeShow');
extendRemove(inst.settings, (beforeShow ? beforeShow.apply(input, [input, inst]) : {}));
inst.lastVal = null;
$.datepicker._lastInput = input;
$.datepicker._setDateFromField(inst);
if ($.datepicker._inDialog) // hide cursor
input.value = '';
if (!$.datepicker._pos) { // position below input
$.datepicker._pos = $.datepicker._findPos(input);
$.datepicker._pos[1] += input.offsetHeight; // add the height
}
var isFixed = false;
$(input).parents().each(function() {
isFixed |= $(this).css('position') == 'fixed';
return !isFixed;
});
if (isFixed && $.browser.opera) { // correction for Opera when fixed and scrolled
$.datepicker._pos[0] -= document.documentElement.scrollLeft;
$.datepicker._pos[1] -= document.documentElement.scrollTop;
}
var offset = {left: $.datepicker._pos[0], top: $.datepicker._pos[1]};
$.datepicker._pos = null;
// determine sizing offscreen
inst.dpDiv.css({position: 'absolute', display: 'block', top: '-1000px'});
$.datepicker._updateDatepicker(inst);
// fix width for dynamic number of date pickers
// and adjust position before showing
offset = $.datepicker._checkOffset(inst, offset, isFixed);
inst.dpDiv.css({position: ($.datepicker._inDialog && $.blockUI ?
'static' : (isFixed ? 'fixed' : 'absolute')), display: 'none',
left: offset.left + 'px', top: offset.top + 'px'});
if (!inst.inline) {
var showAnim = $.datepicker._get(inst, 'showAnim');
var duration = $.datepicker._get(inst, 'duration');
var postProcess = function() {
$.datepicker._datepickerShowing = true;
var borders = $.datepicker._getBorders(inst.dpDiv);
inst.dpDiv.find('iframe.ui-datepicker-cover'). // IE6- only
css({left: -borders[0], top: -borders[1],
width: inst.dpDiv.outerWidth(), height: inst.dpDiv.outerHeight()});
};
inst.dpDiv.zIndex($(input).zIndex()+1);
if ($.effects && $.effects[showAnim])
inst.dpDiv.show(showAnim, $.datepicker._get(inst, 'showOptions'), duration, postProcess);
else
inst.dpDiv[showAnim || 'show']((showAnim ? duration : null), postProcess);
if (!showAnim || !duration)
postProcess();
if (inst.input.is(':visible') && !inst.input.is(':disabled'))
inst.input.focus();
$.datepicker._curInst = inst;
}
},
 
/* Generate the date picker content. */
_updateDatepicker: function(inst) {
var self = this;
var borders = $.datepicker._getBorders(inst.dpDiv);
inst.dpDiv.empty().append(this._generateHTML(inst))
.find('iframe.ui-datepicker-cover') // IE6- only
.css({left: -borders[0], top: -borders[1],
width: inst.dpDiv.outerWidth(), height: inst.dpDiv.outerHeight()})
.end()
.find('button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a')
.bind('mouseout', function(){
$(this).removeClass('ui-state-hover');
if(this.className.indexOf('ui-datepicker-prev') != -1) $(this).removeClass('ui-datepicker-prev-hover');
if(this.className.indexOf('ui-datepicker-next') != -1) $(this).removeClass('ui-datepicker-next-hover');
})
.bind('mouseover', function(){
if (!self._isDisabledDatepicker( inst.inline ? inst.dpDiv.parent()[0] : inst.input[0])) {
$(this).parents('.ui-datepicker-calendar').find('a').removeClass('ui-state-hover');
$(this).addClass('ui-state-hover');
if(this.className.indexOf('ui-datepicker-prev') != -1) $(this).addClass('ui-datepicker-prev-hover');
if(this.className.indexOf('ui-datepicker-next') != -1) $(this).addClass('ui-datepicker-next-hover');
}
})
.end()
.find('.' + this._dayOverClass + ' a')
.trigger('mouseover')
.end();
var numMonths = this._getNumberOfMonths(inst);
var cols = numMonths[1];
var width = 17;
if (cols > 1)
inst.dpDiv.addClass('ui-datepicker-multi-' + cols).css('width', (width * cols) + 'em');
else
inst.dpDiv.removeClass('ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4').width('');
inst.dpDiv[(numMonths[0] != 1 || numMonths[1] != 1 ? 'add' : 'remove') +
'Class']('ui-datepicker-multi');
inst.dpDiv[(this._get(inst, 'isRTL') ? 'add' : 'remove') +
'Class']('ui-datepicker-rtl');
if (inst == $.datepicker._curInst && $.datepicker._datepickerShowing && inst.input &&
inst.input.is(':visible') && !inst.input.is(':disabled'))
inst.input.focus();
},
 
/* Retrieve the size of left and top borders for an element.
@param elem (jQuery object) the element of interest
@return (number[2]) the left and top borders */
_getBorders: function(elem) {
var convert = function(value) {
return {thin: 1, medium: 2, thick: 3}[value] || value;
};
return [parseFloat(convert(elem.css('border-left-width'))),
parseFloat(convert(elem.css('border-top-width')))];
},
 
/* Check positioning to remain on screen. */
_checkOffset: function(inst, offset, isFixed) {
var dpWidth = inst.dpDiv.outerWidth();
var dpHeight = inst.dpDiv.outerHeight();
var inputWidth = inst.input ? inst.input.outerWidth() : 0;
var inputHeight = inst.input ? inst.input.outerHeight() : 0;
var viewWidth = document.documentElement.clientWidth + $(document).scrollLeft();
var viewHeight = document.documentElement.clientHeight + $(document).scrollTop();
 
offset.left -= (this._get(inst, 'isRTL') ? (dpWidth - inputWidth) : 0);
offset.left -= (isFixed && offset.left == inst.input.offset().left) ? $(document).scrollLeft() : 0;
offset.top -= (isFixed && offset.top == (inst.input.offset().top + inputHeight)) ? $(document).scrollTop() : 0;
 
// now check if datepicker is showing outside window viewport - move to a better place if so.
offset.left -= Math.min(offset.left, (offset.left + dpWidth > viewWidth && viewWidth > dpWidth) ?
Math.abs(offset.left + dpWidth - viewWidth) : 0);
offset.top -= Math.min(offset.top, (offset.top + dpHeight > viewHeight && viewHeight > dpHeight) ?
Math.abs(dpHeight + inputHeight) : 0);
 
return offset;
},
 
/* Find an object's position on the screen. */
_findPos: function(obj) {
var inst = this._getInst(obj);
var isRTL = this._get(inst, 'isRTL');
while (obj && (obj.type == 'hidden' || obj.nodeType != 1)) {
obj = obj[isRTL ? 'previousSibling' : 'nextSibling'];
}
var position = $(obj).offset();
return [position.left, position.top];
},
 
/* Hide the date picker from view.
@param input element - the input field attached to the date picker */
_hideDatepicker: function(input) {
var inst = this._curInst;
if (!inst || (input && inst != $.data(input, PROP_NAME)))
return;
if (this._datepickerShowing) {
var showAnim = this._get(inst, 'showAnim');
var duration = this._get(inst, 'duration');
var postProcess = function() {
$.datepicker._tidyDialog(inst);
this._curInst = null;
};
if ($.effects && $.effects[showAnim])
inst.dpDiv.hide(showAnim, $.datepicker._get(inst, 'showOptions'), duration, postProcess);
else
inst.dpDiv[(showAnim == 'slideDown' ? 'slideUp' :
(showAnim == 'fadeIn' ? 'fadeOut' : 'hide'))]((showAnim ? duration : null), postProcess);
if (!showAnim)
postProcess();
var onClose = this._get(inst, 'onClose');
if (onClose)
onClose.apply((inst.input ? inst.input[0] : null),
[(inst.input ? inst.input.val() : ''), inst]); // trigger custom callback
this._datepickerShowing = false;
this._lastInput = null;
if (this._inDialog) {
this._dialogInput.css({ position: 'absolute', left: '0', top: '-100px' });
if ($.blockUI) {
$.unblockUI();
$('body').append(this.dpDiv);
}
}
this._inDialog = false;
}
},
 
/* Tidy up after a dialog display. */
_tidyDialog: function(inst) {
inst.dpDiv.removeClass(this._dialogClass).unbind('.ui-datepicker-calendar');
},
 
/* Close date picker if clicked elsewhere. */
_checkExternalClick: function(event) {
if (!$.datepicker._curInst)
return;
var $target = $(event.target);
if ($target[0].id != $.datepicker._mainDivId &&
$target.parents('#' + $.datepicker._mainDivId).length == 0 &&
!$target.hasClass($.datepicker.markerClassName) &&
!$target.hasClass($.datepicker._triggerClass) &&
$.datepicker._datepickerShowing && !($.datepicker._inDialog && $.blockUI))
$.datepicker._hideDatepicker();
},
 
/* Adjust one of the date sub-fields. */
_adjustDate: function(id, offset, period) {
var target = $(id);
var inst = this._getInst(target[0]);
if (this._isDisabledDatepicker(target[0])) {
return;
}
this._adjustInstDate(inst, offset +
(period == 'M' ? this._get(inst, 'showCurrentAtPos') : 0), // undo positioning
period);
this._updateDatepicker(inst);
},
 
/* Action for current link. */
_gotoToday: function(id) {
var target = $(id);
var inst = this._getInst(target[0]);
if (this._get(inst, 'gotoCurrent') && inst.currentDay) {
inst.selectedDay = inst.currentDay;
inst.drawMonth = inst.selectedMonth = inst.currentMonth;
inst.drawYear = inst.selectedYear = inst.currentYear;
}
else {
var date = new Date();
inst.selectedDay = date.getDate();
inst.drawMonth = inst.selectedMonth = date.getMonth();
inst.drawYear = inst.selectedYear = date.getFullYear();
}
this._notifyChange(inst);
this._adjustDate(target);
},
 
/* Action for selecting a new month/year. */
_selectMonthYear: function(id, select, period) {
var target = $(id);
var inst = this._getInst(target[0]);
inst._selectingMonthYear = false;
inst['selected' + (period == 'M' ? 'Month' : 'Year')] =
inst['draw' + (period == 'M' ? 'Month' : 'Year')] =
parseInt(select.options[select.selectedIndex].value,10);
this._notifyChange(inst);
this._adjustDate(target);
},
 
/* Restore input focus after not changing month/year. */
_clickMonthYear: function(id) {
var target = $(id);
var inst = this._getInst(target[0]);
if (inst.input && inst._selectingMonthYear) {
setTimeout(function() {
inst.input.focus();
}, 0);
}
inst._selectingMonthYear = !inst._selectingMonthYear;
},
 
/* Action for selecting a day. */
_selectDay: function(id, month, year, td) {
var target = $(id);
if ($(td).hasClass(this._unselectableClass) || this._isDisabledDatepicker(target[0])) {
return;
}
var inst = this._getInst(target[0]);
inst.selectedDay = inst.currentDay = $('a', td).html();
inst.selectedMonth = inst.currentMonth = month;
inst.selectedYear = inst.currentYear = year;
this._selectDate(id, this._formatDate(inst,
inst.currentDay, inst.currentMonth, inst.currentYear));
},
 
/* Erase the input field and hide the date picker. */
_clearDate: function(id) {
var target = $(id);
var inst = this._getInst(target[0]);
this._selectDate(target, '');
},
 
/* Update the input field with the selected date. */
_selectDate: function(id, dateStr) {
var target = $(id);
var inst = this._getInst(target[0]);
dateStr = (dateStr != null ? dateStr : this._formatDate(inst));
if (inst.input)
inst.input.val(dateStr);
this._updateAlternate(inst);
var onSelect = this._get(inst, 'onSelect');
if (onSelect)
onSelect.apply((inst.input ? inst.input[0] : null), [dateStr, inst]); // trigger custom callback
else if (inst.input)
inst.input.trigger('change'); // fire the change event
if (inst.inline)
this._updateDatepicker(inst);
else {
this._hideDatepicker();
this._lastInput = inst.input[0];
if (typeof(inst.input[0]) != 'object')
inst.input.focus(); // restore focus
this._lastInput = null;
}
},
 
/* Update any alternate field to synchronise with the main field. */
_updateAlternate: function(inst) {
var altField = this._get(inst, 'altField');
if (altField) { // update alternate field too
var altFormat = this._get(inst, 'altFormat') || this._get(inst, 'dateFormat');
var date = this._getDate(inst);
var dateStr = this.formatDate(altFormat, date, this._getFormatConfig(inst));
$(altField).each(function() { $(this).val(dateStr); });
}
},
 
/* Set as beforeShowDay function to prevent selection of weekends.
@param date Date - the date to customise
@return [boolean, string] - is this date selectable?, what is its CSS class? */
noWeekends: function(date) {
var day = date.getDay();
return [(day > 0 && day < 6), ''];
},
 
/* Set as calculateWeek to determine the week of the year based on the ISO 8601 definition.
@param date Date - the date to get the week for
@return number - the number of the week within the year that contains this date */
iso8601Week: function(date) {
var checkDate = new Date(date.getTime());
// Find Thursday of this week starting on Monday
checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7));
var time = checkDate.getTime();
checkDate.setMonth(0); // Compare with Jan 1
checkDate.setDate(1);
return Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1;
},
 
/* Parse a string value into a date object.
See formatDate below for the possible formats.
 
@param format string - the expected format of the date
@param value string - the date in the above format
@param settings Object - attributes include:
shortYearCutoff number - the cutoff year for determining the century (optional)
dayNamesShort string[7] - abbreviated names of the days from Sunday (optional)
dayNames string[7] - names of the days from Sunday (optional)
monthNamesShort string[12] - abbreviated names of the months (optional)
monthNames string[12] - names of the months (optional)
@return Date - the extracted date value or null if value is blank */
parseDate: function (format, value, settings) {
if (format == null || value == null)
throw 'Invalid arguments';
value = (typeof value == 'object' ? value.toString() : value + '');
if (value == '')
return null;
var shortYearCutoff = (settings ? settings.shortYearCutoff : null) || this._defaults.shortYearCutoff;
var dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort;
var dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames;
var monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort;
var monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames;
var year = -1;
var month = -1;
var day = -1;
var doy = -1;
var literal = false;
// Check whether a format character is doubled
var lookAhead = function(match) {
var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match);
if (matches)
iFormat++;
return matches;
};
// Extract a number from the string value
var getNumber = function(match) {
lookAhead(match);
var size = (match == '@' ? 14 : (match == '!' ? 20 :
(match == 'y' ? 4 : (match == 'o' ? 3 : 2))));
var digits = new RegExp('^\\d{1,' + size + '}');
var num = value.substring(iValue).match(digits);
if (!num)
throw 'Missing number at position ' + iValue;
iValue += num[0].length;
return parseInt(num[0], 10);
};
// Extract a name from the string value and convert to an index
var getName = function(match, shortNames, longNames) {
var names = (lookAhead(match) ? longNames : shortNames);
for (var i = 0; i < names.length; i++) {
if (value.substr(iValue, names[i].length).toLowerCase() == names[i].toLowerCase()) {
iValue += names[i].length;
return i + 1;
}
}
throw 'Unknown name at position ' + iValue;
};
// Confirm that a literal character matches the string value
var checkLiteral = function() {
if (value.charAt(iValue) != format.charAt(iFormat))
throw 'Unexpected literal at position ' + iValue;
iValue++;
};
var iValue = 0;
for (var iFormat = 0; iFormat < format.length; iFormat++) {
if (literal)
if (format.charAt(iFormat) == "'" && !lookAhead("'"))
literal = false;
else
checkLiteral();
else
switch (format.charAt(iFormat)) {
case 'd':
day = getNumber('d');
break;
case 'D':
getName('D', dayNamesShort, dayNames);
break;
case 'o':
doy = getNumber('o');
break;
case 'm':
month = getNumber('m');
break;
case 'M':
month = getName('M', monthNamesShort, monthNames);
break;
case 'y':
year = getNumber('y');
break;
case '@':
var date = new Date(getNumber('@'));
year = date.getFullYear();
month = date.getMonth() + 1;
day = date.getDate();
break;
case '!':
var date = new Date((getNumber('!') - this._ticksTo1970) / 10000);
year = date.getFullYear();
month = date.getMonth() + 1;
day = date.getDate();
break;
case "'":
if (lookAhead("'"))
checkLiteral();
else
literal = true;
break;
default:
checkLiteral();
}
}
if (year == -1)
year = new Date().getFullYear();
else if (year < 100)
year += new Date().getFullYear() - new Date().getFullYear() % 100 +
(year <= shortYearCutoff ? 0 : -100);
if (doy > -1) {
month = 1;
day = doy;
do {
var dim = this._getDaysInMonth(year, month - 1);
if (day <= dim)
break;
month++;
day -= dim;
} while (true);
}
var date = this._daylightSavingAdjust(new Date(year, month - 1, day));
if (date.getFullYear() != year || date.getMonth() + 1 != month || date.getDate() != day)
throw 'Invalid date'; // E.g. 31/02/*
return date;
},
 
/* Standard date formats. */
ATOM: 'yy-mm-dd', // RFC 3339 (ISO 8601)
COOKIE: 'D, dd M yy',
ISO_8601: 'yy-mm-dd',
RFC_822: 'D, d M y',
RFC_850: 'DD, dd-M-y',
RFC_1036: 'D, d M y',
RFC_1123: 'D, d M yy',
RFC_2822: 'D, d M yy',
RSS: 'D, d M y', // RFC 822
TICKS: '!',
TIMESTAMP: '@',
W3C: 'yy-mm-dd', // ISO 8601
 
_ticksTo1970: (((1970 - 1) * 365 + Math.floor(1970 / 4) - Math.floor(1970 / 100) +
Math.floor(1970 / 400)) * 24 * 60 * 60 * 10000000),
 
/* Format a date object into a string value.
The format can be combinations of the following:
d - day of month (no leading zero)
dd - day of month (two digit)
o - day of year (no leading zeros)
oo - day of year (three digit)
D - day name short
DD - day name long
m - month of year (no leading zero)
mm - month of year (two digit)
M - month name short
MM - month name long
y - year (two digit)
yy - year (four digit)
@ - Unix timestamp (ms since 01/01/1970)
! - Windows ticks (100ns since 01/01/0001)
'...' - literal text
'' - single quote
 
@param format string - the desired format of the date
@param date Date - the date value to format
@param settings Object - attributes include:
dayNamesShort string[7] - abbreviated names of the days from Sunday (optional)
dayNames string[7] - names of the days from Sunday (optional)
monthNamesShort string[12] - abbreviated names of the months (optional)
monthNames string[12] - names of the months (optional)
@return string - the date in the above format */
formatDate: function (format, date, settings) {
if (!date)
return '';
var dayNamesShort = (settings ? settings.dayNamesShort : null) || this._defaults.dayNamesShort;
var dayNames = (settings ? settings.dayNames : null) || this._defaults.dayNames;
var monthNamesShort = (settings ? settings.monthNamesShort : null) || this._defaults.monthNamesShort;
var monthNames = (settings ? settings.monthNames : null) || this._defaults.monthNames;
// Check whether a format character is doubled
var lookAhead = function(match) {
var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match);
if (matches)
iFormat++;
return matches;
};
// Format a number, with leading zero if necessary
var formatNumber = function(match, value, len) {
var num = '' + value;
if (lookAhead(match))
while (num.length < len)
num = '0' + num;
return num;
};
// Format a name, short or long as requested
var formatName = function(match, value, shortNames, longNames) {
return (lookAhead(match) ? longNames[value] : shortNames[value]);
};
var output = '';
var literal = false;
if (date)
for (var iFormat = 0; iFormat < format.length; iFormat++) {
if (literal)
if (format.charAt(iFormat) == "'" && !lookAhead("'"))
literal = false;
else
output += format.charAt(iFormat);
else
switch (format.charAt(iFormat)) {
case 'd':
output += formatNumber('d', date.getDate(), 2);
break;
case 'D':
output += formatName('D', date.getDay(), dayNamesShort, dayNames);
break;
case 'o':
output += formatNumber('o',
(date.getTime() - new Date(date.getFullYear(), 0, 0).getTime()) / 86400000, 3);
break;
case 'm':
output += formatNumber('m', date.getMonth() + 1, 2);
break;
case 'M':
output += formatName('M', date.getMonth(), monthNamesShort, monthNames);
break;
case 'y':
output += (lookAhead('y') ? date.getFullYear() :
(date.getYear() % 100 < 10 ? '0' : '') + date.getYear() % 100);
break;
case '@':
output += date.getTime();
break;
case '!':
output += date.getTime() * 10000 + this._ticksTo1970;
break;
case "'":
if (lookAhead("'"))
output += "'";
else
literal = true;
break;
default:
output += format.charAt(iFormat);
}
}
return output;
},
 
/* Extract all possible characters from the date format. */
_possibleChars: function (format) {
var chars = '';
var literal = false;
// Check whether a format character is doubled
var lookAhead = function(match) {
var matches = (iFormat + 1 < format.length && format.charAt(iFormat + 1) == match);
if (matches)
iFormat++;
return matches;
};
for (var iFormat = 0; iFormat < format.length; iFormat++)
if (literal)
if (format.charAt(iFormat) == "'" && !lookAhead("'"))
literal = false;
else
chars += format.charAt(iFormat);
else
switch (format.charAt(iFormat)) {
case 'd': case 'm': case 'y': case '@':
chars += '0123456789';
break;
case 'D': case 'M':
return null; // Accept anything
case "'":
if (lookAhead("'"))
chars += "'";
else
literal = true;
break;
default:
chars += format.charAt(iFormat);
}
return chars;
},
 
/* Get a setting value, defaulting if necessary. */
_get: function(inst, name) {
return inst.settings[name] !== undefined ?
inst.settings[name] : this._defaults[name];
},
 
/* Parse existing date and initialise date picker. */
_setDateFromField: function(inst, noDefault) {
if (inst.input.val() == inst.lastVal) {
return;
}
var dateFormat = this._get(inst, 'dateFormat');
var dates = inst.lastVal = inst.input ? inst.input.val() : null;
var date, defaultDate;
date = defaultDate = this._getDefaultDate(inst);
var settings = this._getFormatConfig(inst);
try {
date = this.parseDate(dateFormat, dates, settings) || defaultDate;
} catch (event) {
this.log(event);
dates = (noDefault ? '' : dates);
}
inst.selectedDay = date.getDate();
inst.drawMonth = inst.selectedMonth = date.getMonth();
inst.drawYear = inst.selectedYear = date.getFullYear();
inst.currentDay = (dates ? date.getDate() : 0);
inst.currentMonth = (dates ? date.getMonth() : 0);
inst.currentYear = (dates ? date.getFullYear() : 0);
this._adjustInstDate(inst);
},
 
/* Retrieve the default date shown on opening. */
_getDefaultDate: function(inst) {
return this._restrictMinMax(inst,
this._determineDate(inst, this._get(inst, 'defaultDate'), new Date()));
},
 
/* A date may be specified as an exact value or a relative one. */
_determineDate: function(inst, date, defaultDate) {
var offsetNumeric = function(offset) {
var date = new Date();
date.setDate(date.getDate() + offset);
return date;
};
var offsetString = function(offset) {
try {
return $.datepicker.parseDate($.datepicker._get(inst, 'dateFormat'),
offset, $.datepicker._getFormatConfig(inst));
}
catch (e) {
// Ignore
}
var date = (offset.toLowerCase().match(/^c/) ?
$.datepicker._getDate(inst) : null) || new Date();
var year = date.getFullYear();
var month = date.getMonth();
var day = date.getDate();
var pattern = /([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g;
var matches = pattern.exec(offset);
while (matches) {
switch (matches[2] || 'd') {
case 'd' : case 'D' :
day += parseInt(matches[1],10); break;
case 'w' : case 'W' :
day += parseInt(matches[1],10) * 7; break;
case 'm' : case 'M' :
month += parseInt(matches[1],10);
day = Math.min(day, $.datepicker._getDaysInMonth(year, month));
break;
case 'y': case 'Y' :
year += parseInt(matches[1],10);
day = Math.min(day, $.datepicker._getDaysInMonth(year, month));
break;
}
matches = pattern.exec(offset);
}
return new Date(year, month, day);
};
date = (date == null ? defaultDate : (typeof date == 'string' ? offsetString(date) :
(typeof date == 'number' ? (isNaN(date) ? defaultDate : offsetNumeric(date)) : date)));
date = (date && date.toString() == 'Invalid Date' ? defaultDate : date);
if (date) {
date.setHours(0);
date.setMinutes(0);
date.setSeconds(0);
date.setMilliseconds(0);
}
return this._daylightSavingAdjust(date);
},
 
/* Handle switch to/from daylight saving.
Hours may be non-zero on daylight saving cut-over:
> 12 when midnight changeover, but then cannot generate
midnight datetime, so jump to 1AM, otherwise reset.
@param date (Date) the date to check
@return (Date) the corrected date */
_daylightSavingAdjust: function(date) {
if (!date) return null;
date.setHours(date.getHours() > 12 ? date.getHours() + 2 : 0);
return date;
},
 
/* Set the date(s) directly. */
_setDate: function(inst, date, noChange) {
var clear = !(date);
var origMonth = inst.selectedMonth;
var origYear = inst.selectedYear;
date = this._restrictMinMax(inst, this._determineDate(inst, date, new Date()));
inst.selectedDay = inst.currentDay = date.getDate();
inst.drawMonth = inst.selectedMonth = inst.currentMonth = date.getMonth();
inst.drawYear = inst.selectedYear = inst.currentYear = date.getFullYear();
if ((origMonth != inst.selectedMonth || origYear != inst.selectedYear) && !noChange)
this._notifyChange(inst);
this._adjustInstDate(inst);
if (inst.input) {
inst.input.val(clear ? '' : this._formatDate(inst));
}
},
 
/* Retrieve the date(s) directly. */
_getDate: function(inst) {
var startDate = (!inst.currentYear || (inst.input && inst.input.val() == '') ? null :
this._daylightSavingAdjust(new Date(
inst.currentYear, inst.currentMonth, inst.currentDay)));
return startDate;
},
 
/* Generate the HTML for the current state of the date picker. */
_generateHTML: function(inst) {
var today = new Date();
today = this._daylightSavingAdjust(
new Date(today.getFullYear(), today.getMonth(), today.getDate())); // clear time
var isRTL = this._get(inst, 'isRTL');
var showButtonPanel = this._get(inst, 'showButtonPanel');
var hideIfNoPrevNext = this._get(inst, 'hideIfNoPrevNext');
var navigationAsDateFormat = this._get(inst, 'navigationAsDateFormat');
var numMonths = this._getNumberOfMonths(inst);
var showCurrentAtPos = this._get(inst, 'showCurrentAtPos');
var stepMonths = this._get(inst, 'stepMonths');
var isMultiMonth = (numMonths[0] != 1 || numMonths[1] != 1);
var currentDate = this._daylightSavingAdjust((!inst.currentDay ? new Date(9999, 9, 9) :
new Date(inst.currentYear, inst.currentMonth, inst.currentDay)));
var minDate = this._getMinMaxDate(inst, 'min');
var maxDate = this._getMinMaxDate(inst, 'max');
var drawMonth = inst.drawMonth - showCurrentAtPos;
var drawYear = inst.drawYear;
if (drawMonth < 0) {
drawMonth += 12;
drawYear--;
}
if (maxDate) {
var maxDraw = this._daylightSavingAdjust(new Date(maxDate.getFullYear(),
maxDate.getMonth() - (numMonths[0] * numMonths[1]) + 1, maxDate.getDate()));
maxDraw = (minDate && maxDraw < minDate ? minDate : maxDraw);
while (this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1)) > maxDraw) {
drawMonth--;
if (drawMonth < 0) {
drawMonth = 11;
drawYear--;
}
}
}
inst.drawMonth = drawMonth;
inst.drawYear = drawYear;
var prevText = this._get(inst, 'prevText');
prevText = (!navigationAsDateFormat ? prevText : this.formatDate(prevText,
this._daylightSavingAdjust(new Date(drawYear, drawMonth - stepMonths, 1)),
this._getFormatConfig(inst)));
var prev = (this._canAdjustMonth(inst, -1, drawYear, drawMonth) ?
'<a class="ui-datepicker-prev ui-corner-all" onclick="DP_jQuery_' + dpuuid +
'.datepicker._adjustDate(\'#' + inst.id + '\', -' + stepMonths + ', \'M\');"' +
' title="' + prevText + '"><span class="ui-icon ui-icon-circle-triangle-' + ( isRTL ? 'e' : 'w') + '">' + prevText + '</span></a>' :
(hideIfNoPrevNext ? '' : '<a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="'+ prevText +'"><span class="ui-icon ui-icon-circle-triangle-' + ( isRTL ? 'e' : 'w') + '">' + prevText + '</span></a>'));
var nextText = this._get(inst, 'nextText');
nextText = (!navigationAsDateFormat ? nextText : this.formatDate(nextText,
this._daylightSavingAdjust(new Date(drawYear, drawMonth + stepMonths, 1)),
this._getFormatConfig(inst)));
var next = (this._canAdjustMonth(inst, +1, drawYear, drawMonth) ?
'<a class="ui-datepicker-next ui-corner-all" onclick="DP_jQuery_' + dpuuid +
'.datepicker._adjustDate(\'#' + inst.id + '\', +' + stepMonths + ', \'M\');"' +
' title="' + nextText + '"><span class="ui-icon ui-icon-circle-triangle-' + ( isRTL ? 'w' : 'e') + '">' + nextText + '</span></a>' :
(hideIfNoPrevNext ? '' : '<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="'+ nextText + '"><span class="ui-icon ui-icon-circle-triangle-' + ( isRTL ? 'w' : 'e') + '">' + nextText + '</span></a>'));
var currentText = this._get(inst, 'currentText');
var gotoDate = (this._get(inst, 'gotoCurrent') && inst.currentDay ? currentDate : today);
currentText = (!navigationAsDateFormat ? currentText :
this.formatDate(currentText, gotoDate, this._getFormatConfig(inst)));
var controls = (!inst.inline ? '<button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all" onclick="DP_jQuery_' + dpuuid +
'.datepicker._hideDatepicker();">' + this._get(inst, 'closeText') + '</button>' : '');
var buttonPanel = (showButtonPanel) ? '<div class="ui-datepicker-buttonpane ui-widget-content">' + (isRTL ? controls : '') +
(this._isInRange(inst, gotoDate) ? '<button type="button" class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all" onclick="DP_jQuery_' + dpuuid +
'.datepicker._gotoToday(\'#' + inst.id + '\');"' +
'>' + currentText + '</button>' : '') + (isRTL ? '' : controls) + '</div>' : '';
var firstDay = parseInt(this._get(inst, 'firstDay'),10);
firstDay = (isNaN(firstDay) ? 0 : firstDay);
var showWeek = this._get(inst, 'showWeek');
var dayNames = this._get(inst, 'dayNames');
var dayNamesShort = this._get(inst, 'dayNamesShort');
var dayNamesMin = this._get(inst, 'dayNamesMin');
var monthNames = this._get(inst, 'monthNames');
var monthNamesShort = this._get(inst, 'monthNamesShort');
var beforeShowDay = this._get(inst, 'beforeShowDay');
var showOtherMonths = this._get(inst, 'showOtherMonths');
var selectOtherMonths = this._get(inst, 'selectOtherMonths');
var calculateWeek = this._get(inst, 'calculateWeek') || this.iso8601Week;
var defaultDate = this._getDefaultDate(inst);
var html = '';
for (var row = 0; row < numMonths[0]; row++) {
var group = '';
for (var col = 0; col < numMonths[1]; col++) {
var selectedDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, inst.selectedDay));
var cornerClass = ' ui-corner-all';
var calender = '';
if (isMultiMonth) {
calender += '<div class="ui-datepicker-group';
if (numMonths[1] > 1)
switch (col) {
case 0: calender += ' ui-datepicker-group-first';
cornerClass = ' ui-corner-' + (isRTL ? 'right' : 'left'); break;
case numMonths[1]-1: calender += ' ui-datepicker-group-last';
cornerClass = ' ui-corner-' + (isRTL ? 'left' : 'right'); break;
default: calender += ' ui-datepicker-group-middle'; cornerClass = ''; break;
}
calender += '">';
}
calender += '<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix' + cornerClass + '">' +
(/all|left/.test(cornerClass) && row == 0 ? (isRTL ? next : prev) : '') +
(/all|right/.test(cornerClass) && row == 0 ? (isRTL ? prev : next) : '') +
this._generateMonthYearHeader(inst, drawMonth, drawYear, minDate, maxDate,
row > 0 || col > 0, monthNames, monthNamesShort) + // draw month headers
'</div><table class="ui-datepicker-calendar"><thead>' +
'<tr>';
var thead = (showWeek ? '<th class="ui-datepicker-week-col">' + this._get(inst, 'weekHeader') + '</th>' : '');
for (var dow = 0; dow < 7; dow++) { // days of the week
var day = (dow + firstDay) % 7;
thead += '<th' + ((dow + firstDay + 6) % 7 >= 5 ? ' class="ui-datepicker-week-end"' : '') + '>' +
'<span title="' + dayNames[day] + '">' + dayNamesMin[day] + '</span></th>';
}
calender += thead + '</tr></thead><tbody>';
var daysInMonth = this._getDaysInMonth(drawYear, drawMonth);
if (drawYear == inst.selectedYear && drawMonth == inst.selectedMonth)
inst.selectedDay = Math.min(inst.selectedDay, daysInMonth);
var leadDays = (this._getFirstDayOfMonth(drawYear, drawMonth) - firstDay + 7) % 7;
var numRows = (isMultiMonth ? 6 : Math.ceil((leadDays + daysInMonth) / 7)); // calculate the number of rows to generate
var printDate = this._daylightSavingAdjust(new Date(drawYear, drawMonth, 1 - leadDays));
for (var dRow = 0; dRow < numRows; dRow++) { // create date picker rows
calender += '<tr>';
var tbody = (!showWeek ? '' : '<td class="ui-datepicker-week-col">' +
this._get(inst, 'calculateWeek')(printDate) + '</td>');
for (var dow = 0; dow < 7; dow++) { // create date picker days
var daySettings = (beforeShowDay ?
beforeShowDay.apply((inst.input ? inst.input[0] : null), [printDate]) : [true, '']);
var otherMonth = (printDate.getMonth() != drawMonth);
var unselectable = (otherMonth && !selectOtherMonths) || !daySettings[0] ||
(minDate && printDate < minDate) || (maxDate && printDate > maxDate);
tbody += '<td class="' +
((dow + firstDay + 6) % 7 >= 5 ? ' ui-datepicker-week-end' : '') + // highlight weekends
(otherMonth ? ' ui-datepicker-other-month' : '') + // highlight days from other months
((printDate.getTime() == selectedDate.getTime() && drawMonth == inst.selectedMonth && inst._keyEvent) || // user pressed key
(defaultDate.getTime() == printDate.getTime() && defaultDate.getTime() == selectedDate.getTime()) ?
// or defaultDate is current printedDate and defaultDate is selectedDate
' ' + this._dayOverClass : '') + // highlight selected day
(unselectable ? ' ' + this._unselectableClass + ' ui-state-disabled': '') + // highlight unselectable days
(otherMonth && !showOtherMonths ? '' : ' ' + daySettings[1] + // highlight custom dates
(printDate.getTime() == currentDate.getTime() ? ' ' + this._currentClass : '') + // highlight selected day
(printDate.getTime() == today.getTime() ? ' ui-datepicker-today' : '')) + '"' + // highlight today (if different)
((!otherMonth || showOtherMonths) && daySettings[2] ? ' title="' + daySettings[2] + '"' : '') + // cell title
(unselectable ? '' : ' onclick="DP_jQuery_' + dpuuid + '.datepicker._selectDay(\'#' +
inst.id + '\',' + printDate.getMonth() + ',' + printDate.getFullYear() + ', this);return false;"') + '>' + // actions
(otherMonth && !showOtherMonths ? '&#xa0;' : // display for other months
(unselectable ? '<span class="ui-state-default">' + printDate.getDate() + '</span>' : '<a class="ui-state-default' +
(printDate.getTime() == today.getTime() ? ' ui-state-highlight' : '') +
(printDate.getTime() == currentDate.getTime() ? ' ui-state-active' : '') + // highlight selected day
(otherMonth ? ' ui-priority-secondary' : '') + // distinguish dates from other months
'" href="#">' + printDate.getDate() + '</a>')) + '</td>'; // display selectable date
printDate.setDate(printDate.getDate() + 1);
printDate = this._daylightSavingAdjust(printDate);
}
calender += tbody + '</tr>';
}
drawMonth++;
if (drawMonth > 11) {
drawMonth = 0;
drawYear++;
}
calender += '</tbody></table>' + (isMultiMonth ? '</div>' +
((numMonths[0] > 0 && col == numMonths[1]-1) ? '<div class="ui-datepicker-row-break"></div>' : '') : '');
group += calender;
}
html += group;
}
html += buttonPanel + ($.browser.msie && parseInt($.browser.version,10) < 7 && !inst.inline ?
'<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>' : '');
inst._keyEvent = false;
return html;
},
 
/* Generate the month and year header. */
_generateMonthYearHeader: function(inst, drawMonth, drawYear, minDate, maxDate,
secondary, monthNames, monthNamesShort) {
var changeMonth = this._get(inst, 'changeMonth');
var changeYear = this._get(inst, 'changeYear');
var showMonthAfterYear = this._get(inst, 'showMonthAfterYear');
var html = '<div class="ui-datepicker-title">';
var monthHtml = '';
// month selection
if (secondary || !changeMonth)
monthHtml += '<span class="ui-datepicker-month">' + monthNames[drawMonth] + '</span>';
else {
var inMinYear = (minDate && minDate.getFullYear() == drawYear);
var inMaxYear = (maxDate && maxDate.getFullYear() == drawYear);
monthHtml += '<select class="ui-datepicker-month" ' +
'onchange="DP_jQuery_' + dpuuid + '.datepicker._selectMonthYear(\'#' + inst.id + '\', this, \'M\');" ' +
'onclick="DP_jQuery_' + dpuuid + '.datepicker._clickMonthYear(\'#' + inst.id + '\');"' +
'>';
for (var month = 0; month < 12; month++) {
if ((!inMinYear || month >= minDate.getMonth()) &&
(!inMaxYear || month <= maxDate.getMonth()))
monthHtml += '<option value="' + month + '"' +
(month == drawMonth ? ' selected="selected"' : '') +
'>' + monthNamesShort[month] + '</option>';
}
monthHtml += '</select>';
}
if (!showMonthAfterYear)
html += monthHtml + (secondary || !(changeMonth && changeYear) ? '&#xa0;' : '');
// year selection
if (secondary || !changeYear)
html += '<span class="ui-datepicker-year">' + drawYear + '</span>';
else {
// determine range of years to display
var years = this._get(inst, 'yearRange').split(':');
var thisYear = new Date().getFullYear();
var determineYear = function(value) {
var year = (value.match(/c[+-].*/) ? drawYear + parseInt(value.substring(1), 10) :
(value.match(/[+-].*/) ? thisYear + parseInt(value, 10) :
parseInt(value, 10)));
return (isNaN(year) ? thisYear : year);
};
var year = determineYear(years[0]);
var endYear = Math.max(year, determineYear(years[1] || ''));
year = (minDate ? Math.max(year, minDate.getFullYear()) : year);
endYear = (maxDate ? Math.min(endYear, maxDate.getFullYear()) : endYear);
html += '<select class="ui-datepicker-year" ' +
'onchange="DP_jQuery_' + dpuuid + '.datepicker._selectMonthYear(\'#' + inst.id + '\', this, \'Y\');" ' +
'onclick="DP_jQuery_' + dpuuid + '.datepicker._clickMonthYear(\'#' + inst.id + '\');"' +
'>';
for (; year <= endYear; year++) {
html += '<option value="' + year + '"' +
(year == drawYear ? ' selected="selected"' : '') +
'>' + year + '</option>';
}
html += '</select>';
}
html += this._get(inst, 'yearSuffix');
if (showMonthAfterYear)
html += (secondary || !(changeMonth && changeYear) ? '&#xa0;' : '') + monthHtml;
html += '</div>'; // Close datepicker_header
return html;
},
 
/* Adjust one of the date sub-fields. */
_adjustInstDate: function(inst, offset, period) {
var year = inst.drawYear + (period == 'Y' ? offset : 0);
var month = inst.drawMonth + (period == 'M' ? offset : 0);
var day = Math.min(inst.selectedDay, this._getDaysInMonth(year, month)) +
(period == 'D' ? offset : 0);
var date = this._restrictMinMax(inst,
this._daylightSavingAdjust(new Date(year, month, day)));
inst.selectedDay = date.getDate();
inst.drawMonth = inst.selectedMonth = date.getMonth();
inst.drawYear = inst.selectedYear = date.getFullYear();
if (period == 'M' || period == 'Y')
this._notifyChange(inst);
},
 
/* Ensure a date is within any min/max bounds. */
_restrictMinMax: function(inst, date) {
var minDate = this._getMinMaxDate(inst, 'min');
var maxDate = this._getMinMaxDate(inst, 'max');
date = (minDate && date < minDate ? minDate : date);
date = (maxDate && date > maxDate ? maxDate : date);
return date;
},
 
/* Notify change of month/year. */
_notifyChange: function(inst) {
var onChange = this._get(inst, 'onChangeMonthYear');
if (onChange)
onChange.apply((inst.input ? inst.input[0] : null),
[inst.selectedYear, inst.selectedMonth + 1, inst]);
},
 
/* Determine the number of months to show. */
_getNumberOfMonths: function(inst) {
var numMonths = this._get(inst, 'numberOfMonths');
return (numMonths == null ? [1, 1] : (typeof numMonths == 'number' ? [1, numMonths] : numMonths));
},
 
/* Determine the current maximum date - ensure no time components are set. */
_getMinMaxDate: function(inst, minMax) {
return this._determineDate(inst, this._get(inst, minMax + 'Date'), null);
},
 
/* Find the number of days in a given month. */
_getDaysInMonth: function(year, month) {
return 32 - new Date(year, month, 32).getDate();
},
 
/* Find the day of the week of the first of a month. */
_getFirstDayOfMonth: function(year, month) {
return new Date(year, month, 1).getDay();
},
 
/* Determines if we should allow a "next/prev" month display change. */
_canAdjustMonth: function(inst, offset, curYear, curMonth) {
var numMonths = this._getNumberOfMonths(inst);
var date = this._daylightSavingAdjust(new Date(curYear,
curMonth + (offset < 0 ? offset : numMonths[0] * numMonths[1]), 1));
if (offset < 0)
date.setDate(this._getDaysInMonth(date.getFullYear(), date.getMonth()));
return this._isInRange(inst, date);
},
 
/* Is the given date in the accepted range? */
_isInRange: function(inst, date) {
var minDate = this._getMinMaxDate(inst, 'min');
var maxDate = this._getMinMaxDate(inst, 'max');
return ((!minDate || date.getTime() >= minDate.getTime()) &&
(!maxDate || date.getTime() <= maxDate.getTime()));
},
 
/* Provide the configuration settings for formatting/parsing. */
_getFormatConfig: function(inst) {
var shortYearCutoff = this._get(inst, 'shortYearCutoff');
shortYearCutoff = (typeof shortYearCutoff != 'string' ? shortYearCutoff :
new Date().getFullYear() % 100 + parseInt(shortYearCutoff, 10));
return {shortYearCutoff: shortYearCutoff,
dayNamesShort: this._get(inst, 'dayNamesShort'), dayNames: this._get(inst, 'dayNames'),
monthNamesShort: this._get(inst, 'monthNamesShort'), monthNames: this._get(inst, 'monthNames')};
},
 
/* Format the given date for display. */
_formatDate: function(inst, day, month, year) {
if (!day) {
inst.currentDay = inst.selectedDay;
inst.currentMonth = inst.selectedMonth;
inst.currentYear = inst.selectedYear;
}
var date = (day ? (typeof day == 'object' ? day :
this._daylightSavingAdjust(new Date(year, month, day))) :
this._daylightSavingAdjust(new Date(inst.currentYear, inst.currentMonth, inst.currentDay)));
return this.formatDate(this._get(inst, 'dateFormat'), date, this._getFormatConfig(inst));
}
});
 
/* jQuery extend now ignores nulls! */
function extendRemove(target, props) {
$.extend(target, props);
for (var name in props)
if (props[name] == null || props[name] == undefined)
target[name] = props[name];
return target;
};
 
/* Determine whether an object is an array. */
function isArray(a) {
return (a && (($.browser.safari && typeof a == 'object' && a.length) ||
(a.constructor && a.constructor.toString().match(/\Array\(\)/))));
};
 
/* Invoke the datepicker functionality.
@param options string - a command, optionally followed by additional parameters or
Object - settings for attaching new datepicker functionality
@return jQuery object */
$.fn.datepicker = function(options){
 
/* Initialise the date picker. */
if (!$.datepicker.initialized) {
$(document).mousedown($.datepicker._checkExternalClick).
find('body').append($.datepicker.dpDiv);
$.datepicker.initialized = true;
}
 
var otherArgs = Array.prototype.slice.call(arguments, 1);
if (typeof options == 'string' && (options == 'isDisabled' || options == 'getDate' || options == 'widget'))
return $.datepicker['_' + options + 'Datepicker'].
apply($.datepicker, [this[0]].concat(otherArgs));
if (options == 'option' && arguments.length == 2 && typeof arguments[1] == 'string')
return $.datepicker['_' + options + 'Datepicker'].
apply($.datepicker, [this[0]].concat(otherArgs));
return this.each(function() {
typeof options == 'string' ?
$.datepicker['_' + options + 'Datepicker'].
apply($.datepicker, [this].concat(otherArgs)) :
$.datepicker._attachDatepicker(this, options);
});
};
 
$.datepicker = new Datepicker(); // singleton instance
$.datepicker.initialized = false;
$.datepicker.uuid = new Date().getTime();
$.datepicker.version = "1.8.6";
 
// Workaround for #4055
// Add another global to avoid noConflict issues with inline event handlers
window['DP_jQuery_' + dpuuid] = $;
 
})(jQuery);
/trunk/applications/saisie/squelettes/js/jquery_ui/jquery.ui.datepicker-fr.js
New file
0,0 → 1,23
/* French initialisation for the jQuery UI date picker plugin. */
/* Written by Keith Wood (kbwood{at}iinet.com.au) and Stéphane Nahmani (sholby@sholby.net). */
jQuery(function($){
$.datepicker.regional['fr'] = {
closeText: 'Fermer',
prevText: '&#x3c;Préc',
nextText: 'Suiv&#x3e;',
currentText: 'Courant',
monthNames: ['Janvier','Février','Mars','Avril','Mai','Juin',
'Juillet','Août','Septembre','Octobre','Novembre','Décembre'],
monthNamesShort: ['Jan','Fév','Mar','Avr','Mai','Jun',
'Jul','Aoû','Sep','Oct','Nov','Déc'],
dayNames: ['Dimanche','Lundi','Mardi','Mercredi','Jeudi','Vendredi','Samedi'],
dayNamesShort: ['Dim','Lun','Mar','Mer','Jeu','Ven','Sam'],
dayNamesMin: ['Di','Lu','Ma','Me','Je','Ve','Sa'],
weekHeader: 'Sm',
dateFormat: 'dd/mm/yy',
firstDay: 1,
isRTL: false,
showMonthAfterYear: false,
yearSuffix: ''};
$.datepicker.setDefaults($.datepicker.regional['fr']);
});
/trunk/applications/saisie/squelettes/js/jquery_ui/jquery-ui-1.8.6.custom.min.js
New file
0,0 → 1,778
/*!
* jQuery UI 1.8.6
*
* Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI
*/
(function(c,j){function k(a){return!c(a).parents().andSelf().filter(function(){return c.curCSS(this,"visibility")==="hidden"||c.expr.filters.hidden(this)}).length}c.ui=c.ui||{};if(!c.ui.version){c.extend(c.ui,{version:"1.8.6",keyCode:{ALT:18,BACKSPACE:8,CAPS_LOCK:20,COMMA:188,COMMAND:91,COMMAND_LEFT:91,COMMAND_RIGHT:93,CONTROL:17,DELETE:46,DOWN:40,END:35,ENTER:13,ESCAPE:27,HOME:36,INSERT:45,LEFT:37,MENU:93,NUMPAD_ADD:107,NUMPAD_DECIMAL:110,NUMPAD_DIVIDE:111,NUMPAD_ENTER:108,NUMPAD_MULTIPLY:106,
NUMPAD_SUBTRACT:109,PAGE_DOWN:34,PAGE_UP:33,PERIOD:190,RIGHT:39,SHIFT:16,SPACE:32,TAB:9,UP:38,WINDOWS:91}});c.fn.extend({_focus:c.fn.focus,focus:function(a,b){return typeof a==="number"?this.each(function(){var d=this;setTimeout(function(){c(d).focus();b&&b.call(d)},a)}):this._focus.apply(this,arguments)},scrollParent:function(){var a;a=c.browser.msie&&/(static|relative)/.test(this.css("position"))||/absolute/.test(this.css("position"))?this.parents().filter(function(){return/(relative|absolute|fixed)/.test(c.curCSS(this,
"position",1))&&/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0):this.parents().filter(function(){return/(auto|scroll)/.test(c.curCSS(this,"overflow",1)+c.curCSS(this,"overflow-y",1)+c.curCSS(this,"overflow-x",1))}).eq(0);return/fixed/.test(this.css("position"))||!a.length?c(document):a},zIndex:function(a){if(a!==j)return this.css("zIndex",a);if(this.length){a=c(this[0]);for(var b;a.length&&a[0]!==document;){b=a.css("position");
if(b==="absolute"||b==="relative"||b==="fixed"){b=parseInt(a.css("zIndex"),10);if(!isNaN(b)&&b!==0)return b}a=a.parent()}}return 0},disableSelection:function(){return this.bind((c.support.selectstart?"selectstart":"mousedown")+".ui-disableSelection",function(a){a.preventDefault()})},enableSelection:function(){return this.unbind(".ui-disableSelection")}});c.each(["Width","Height"],function(a,b){function d(f,g,l,m){c.each(e,function(){g-=parseFloat(c.curCSS(f,"padding"+this,true))||0;if(l)g-=parseFloat(c.curCSS(f,
"border"+this+"Width",true))||0;if(m)g-=parseFloat(c.curCSS(f,"margin"+this,true))||0});return g}var e=b==="Width"?["Left","Right"]:["Top","Bottom"],h=b.toLowerCase(),i={innerWidth:c.fn.innerWidth,innerHeight:c.fn.innerHeight,outerWidth:c.fn.outerWidth,outerHeight:c.fn.outerHeight};c.fn["inner"+b]=function(f){if(f===j)return i["inner"+b].call(this);return this.each(function(){c(this).css(h,d(this,f)+"px")})};c.fn["outer"+b]=function(f,g){if(typeof f!=="number")return i["outer"+b].call(this,f);return this.each(function(){c(this).css(h,
d(this,f,true,g)+"px")})}});c.extend(c.expr[":"],{data:function(a,b,d){return!!c.data(a,d[3])},focusable:function(a){var b=a.nodeName.toLowerCase(),d=c.attr(a,"tabindex");if("area"===b){b=a.parentNode;d=b.name;if(!a.href||!d||b.nodeName.toLowerCase()!=="map")return false;a=c("img[usemap=#"+d+"]")[0];return!!a&&k(a)}return(/input|select|textarea|button|object/.test(b)?!a.disabled:"a"==b?a.href||!isNaN(d):!isNaN(d))&&k(a)},tabbable:function(a){var b=c.attr(a,"tabindex");return(isNaN(b)||b>=0)&&c(a).is(":focusable")}});
c(function(){var a=document.body,b=a.appendChild(b=document.createElement("div"));c.extend(b.style,{minHeight:"100px",height:"auto",padding:0,borderWidth:0});c.support.minHeight=b.offsetHeight===100;c.support.selectstart="onselectstart"in b;a.removeChild(b).style.display="none"});c.extend(c.ui,{plugin:{add:function(a,b,d){a=c.ui[a].prototype;for(var e in d){a.plugins[e]=a.plugins[e]||[];a.plugins[e].push([b,d[e]])}},call:function(a,b,d){if((b=a.plugins[b])&&a.element[0].parentNode)for(var e=0;e<b.length;e++)a.options[b[e][0]]&&
b[e][1].apply(a.element,d)}},contains:function(a,b){return document.compareDocumentPosition?a.compareDocumentPosition(b)&16:a!==b&&a.contains(b)},hasScroll:function(a,b){if(c(a).css("overflow")==="hidden")return false;b=b&&b==="left"?"scrollLeft":"scrollTop";var d=false;if(a[b]>0)return true;a[b]=1;d=a[b]>0;a[b]=0;return d},isOverAxis:function(a,b,d){return a>b&&a<b+d},isOver:function(a,b,d,e,h,i){return c.ui.isOverAxis(a,d,h)&&c.ui.isOverAxis(b,e,i)}})}})(jQuery);
;/*!
* jQuery UI Widget 1.8.6
*
* Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Widget
*/
(function(b,j){if(b.cleanData){var k=b.cleanData;b.cleanData=function(a){for(var c=0,d;(d=a[c])!=null;c++)b(d).triggerHandler("remove");k(a)}}else{var l=b.fn.remove;b.fn.remove=function(a,c){return this.each(function(){if(!c)if(!a||b.filter(a,[this]).length)b("*",this).add([this]).each(function(){b(this).triggerHandler("remove")});return l.call(b(this),a,c)})}}b.widget=function(a,c,d){var e=a.split(".")[0],f;a=a.split(".")[1];f=e+"-"+a;if(!d){d=c;c=b.Widget}b.expr[":"][f]=function(h){return!!b.data(h,
a)};b[e]=b[e]||{};b[e][a]=function(h,g){arguments.length&&this._createWidget(h,g)};c=new c;c.options=b.extend(true,{},c.options);b[e][a].prototype=b.extend(true,c,{namespace:e,widgetName:a,widgetEventPrefix:b[e][a].prototype.widgetEventPrefix||a,widgetBaseClass:f},d);b.widget.bridge(a,b[e][a])};b.widget.bridge=function(a,c){b.fn[a]=function(d){var e=typeof d==="string",f=Array.prototype.slice.call(arguments,1),h=this;d=!e&&f.length?b.extend.apply(null,[true,d].concat(f)):d;if(e&&d.charAt(0)==="_")return h;
e?this.each(function(){var g=b.data(this,a),i=g&&b.isFunction(g[d])?g[d].apply(g,f):g;if(i!==g&&i!==j){h=i;return false}}):this.each(function(){var g=b.data(this,a);g?g.option(d||{})._init():b.data(this,a,new c(d,this))});return h}};b.Widget=function(a,c){arguments.length&&this._createWidget(a,c)};b.Widget.prototype={widgetName:"widget",widgetEventPrefix:"",options:{disabled:false},_createWidget:function(a,c){b.data(c,this.widgetName,this);this.element=b(c);this.options=b.extend(true,{},this.options,
this._getCreateOptions(),a);var d=this;this.element.bind("remove."+this.widgetName,function(){d.destroy()});this._create();this._trigger("create");this._init()},_getCreateOptions:function(){return b.metadata&&b.metadata.get(this.element[0])[this.widgetName]},_create:function(){},_init:function(){},destroy:function(){this.element.unbind("."+this.widgetName).removeData(this.widgetName);this.widget().unbind("."+this.widgetName).removeAttr("aria-disabled").removeClass(this.widgetBaseClass+"-disabled ui-state-disabled")},
widget:function(){return this.element},option:function(a,c){var d=a;if(arguments.length===0)return b.extend({},this.options);if(typeof a==="string"){if(c===j)return this.options[a];d={};d[a]=c}this._setOptions(d);return this},_setOptions:function(a){var c=this;b.each(a,function(d,e){c._setOption(d,e)});return this},_setOption:function(a,c){this.options[a]=c;if(a==="disabled")this.widget()[c?"addClass":"removeClass"](this.widgetBaseClass+"-disabled ui-state-disabled").attr("aria-disabled",c);return this},
enable:function(){return this._setOption("disabled",false)},disable:function(){return this._setOption("disabled",true)},_trigger:function(a,c,d){var e=this.options[a];c=b.Event(c);c.type=(a===this.widgetEventPrefix?a:this.widgetEventPrefix+a).toLowerCase();d=d||{};if(c.originalEvent){a=b.event.props.length;for(var f;a;){f=b.event.props[--a];c[f]=c.originalEvent[f]}}this.element.trigger(c,d);return!(b.isFunction(e)&&e.call(this.element[0],c,d)===false||c.isDefaultPrevented())}}})(jQuery);
;/*!
* jQuery UI Mouse 1.8.6
*
* Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Mouse
*
* Depends:
* jquery.ui.widget.js
*/
(function(c){c.widget("ui.mouse",{options:{cancel:":input,option",distance:1,delay:0},_mouseInit:function(){var a=this;this.element.bind("mousedown."+this.widgetName,function(b){return a._mouseDown(b)}).bind("click."+this.widgetName,function(b){if(a._preventClickEvent){a._preventClickEvent=false;b.stopImmediatePropagation();return false}});this.started=false},_mouseDestroy:function(){this.element.unbind("."+this.widgetName)},_mouseDown:function(a){a.originalEvent=a.originalEvent||{};if(!a.originalEvent.mouseHandled){this._mouseStarted&&
this._mouseUp(a);this._mouseDownEvent=a;var b=this,e=a.which==1,f=typeof this.options.cancel=="string"?c(a.target).parents().add(a.target).filter(this.options.cancel).length:false;if(!e||f||!this._mouseCapture(a))return true;this.mouseDelayMet=!this.options.delay;if(!this.mouseDelayMet)this._mouseDelayTimer=setTimeout(function(){b.mouseDelayMet=true},this.options.delay);if(this._mouseDistanceMet(a)&&this._mouseDelayMet(a)){this._mouseStarted=this._mouseStart(a)!==false;if(!this._mouseStarted){a.preventDefault();
return true}}this._mouseMoveDelegate=function(d){return b._mouseMove(d)};this._mouseUpDelegate=function(d){return b._mouseUp(d)};c(document).bind("mousemove."+this.widgetName,this._mouseMoveDelegate).bind("mouseup."+this.widgetName,this._mouseUpDelegate);a.preventDefault();return a.originalEvent.mouseHandled=true}},_mouseMove:function(a){if(c.browser.msie&&!(document.documentMode>=9)&&!a.button)return this._mouseUp(a);if(this._mouseStarted){this._mouseDrag(a);return a.preventDefault()}if(this._mouseDistanceMet(a)&&
this._mouseDelayMet(a))(this._mouseStarted=this._mouseStart(this._mouseDownEvent,a)!==false)?this._mouseDrag(a):this._mouseUp(a);return!this._mouseStarted},_mouseUp:function(a){c(document).unbind("mousemove."+this.widgetName,this._mouseMoveDelegate).unbind("mouseup."+this.widgetName,this._mouseUpDelegate);if(this._mouseStarted){this._mouseStarted=false;this._preventClickEvent=a.target==this._mouseDownEvent.target;this._mouseStop(a)}return false},_mouseDistanceMet:function(a){return Math.max(Math.abs(this._mouseDownEvent.pageX-
a.pageX),Math.abs(this._mouseDownEvent.pageY-a.pageY))>=this.options.distance},_mouseDelayMet:function(){return this.mouseDelayMet},_mouseStart:function(){},_mouseDrag:function(){},_mouseStop:function(){},_mouseCapture:function(){return true}})})(jQuery);
;/*
* jQuery UI Position 1.8.6
*
* Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Position
*/
(function(c){c.ui=c.ui||{};var n=/left|center|right/,o=/top|center|bottom/,t=c.fn.position,u=c.fn.offset;c.fn.position=function(b){if(!b||!b.of)return t.apply(this,arguments);b=c.extend({},b);var a=c(b.of),d=a[0],g=(b.collision||"flip").split(" "),e=b.offset?b.offset.split(" "):[0,0],h,k,j;if(d.nodeType===9){h=a.width();k=a.height();j={top:0,left:0}}else if(d.setTimeout){h=a.width();k=a.height();j={top:a.scrollTop(),left:a.scrollLeft()}}else if(d.preventDefault){b.at="left top";h=k=0;j={top:b.of.pageY,
left:b.of.pageX}}else{h=a.outerWidth();k=a.outerHeight();j=a.offset()}c.each(["my","at"],function(){var f=(b[this]||"").split(" ");if(f.length===1)f=n.test(f[0])?f.concat(["center"]):o.test(f[0])?["center"].concat(f):["center","center"];f[0]=n.test(f[0])?f[0]:"center";f[1]=o.test(f[1])?f[1]:"center";b[this]=f});if(g.length===1)g[1]=g[0];e[0]=parseInt(e[0],10)||0;if(e.length===1)e[1]=e[0];e[1]=parseInt(e[1],10)||0;if(b.at[0]==="right")j.left+=h;else if(b.at[0]==="center")j.left+=h/2;if(b.at[1]==="bottom")j.top+=
k;else if(b.at[1]==="center")j.top+=k/2;j.left+=e[0];j.top+=e[1];return this.each(function(){var f=c(this),l=f.outerWidth(),m=f.outerHeight(),p=parseInt(c.curCSS(this,"marginLeft",true))||0,q=parseInt(c.curCSS(this,"marginTop",true))||0,v=l+p+parseInt(c.curCSS(this,"marginRight",true))||0,w=m+q+parseInt(c.curCSS(this,"marginBottom",true))||0,i=c.extend({},j),r;if(b.my[0]==="right")i.left-=l;else if(b.my[0]==="center")i.left-=l/2;if(b.my[1]==="bottom")i.top-=m;else if(b.my[1]==="center")i.top-=m/2;
i.left=parseInt(i.left);i.top=parseInt(i.top);r={left:i.left-p,top:i.top-q};c.each(["left","top"],function(s,x){c.ui.position[g[s]]&&c.ui.position[g[s]][x](i,{targetWidth:h,targetHeight:k,elemWidth:l,elemHeight:m,collisionPosition:r,collisionWidth:v,collisionHeight:w,offset:e,my:b.my,at:b.at})});c.fn.bgiframe&&f.bgiframe();f.offset(c.extend(i,{using:b.using}))})};c.ui.position={fit:{left:function(b,a){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();b.left=d>0?
b.left-d:Math.max(b.left-a.collisionPosition.left,b.left)},top:function(b,a){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();b.top=d>0?b.top-d:Math.max(b.top-a.collisionPosition.top,b.top)}},flip:{left:function(b,a){if(a.at[0]!=="center"){var d=c(window);d=a.collisionPosition.left+a.collisionWidth-d.width()-d.scrollLeft();var g=a.my[0]==="left"?-a.elemWidth:a.my[0]==="right"?a.elemWidth:0,e=a.at[0]==="left"?a.targetWidth:-a.targetWidth,h=-2*a.offset[0];b.left+=
a.collisionPosition.left<0?g+e+h:d>0?g+e+h:0}},top:function(b,a){if(a.at[1]!=="center"){var d=c(window);d=a.collisionPosition.top+a.collisionHeight-d.height()-d.scrollTop();var g=a.my[1]==="top"?-a.elemHeight:a.my[1]==="bottom"?a.elemHeight:0,e=a.at[1]==="top"?a.targetHeight:-a.targetHeight,h=-2*a.offset[1];b.top+=a.collisionPosition.top<0?g+e+h:d>0?g+e+h:0}}}};if(!c.offset.setOffset){c.offset.setOffset=function(b,a){if(/static/.test(c.curCSS(b,"position")))b.style.position="relative";var d=c(b),
g=d.offset(),e=parseInt(c.curCSS(b,"top",true),10)||0,h=parseInt(c.curCSS(b,"left",true),10)||0;g={top:a.top-g.top+e,left:a.left-g.left+h};"using"in a?a.using.call(b,g):d.css(g)};c.fn.offset=function(b){var a=this[0];if(!a||!a.ownerDocument)return null;if(b)return this.each(function(){c.offset.setOffset(this,b)});return u.call(this)}}})(jQuery);
;/*
* jQuery UI Draggable 1.8.6
*
* Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Draggables
*
* Depends:
* jquery.ui.core.js
* jquery.ui.mouse.js
* jquery.ui.widget.js
*/
(function(d){d.widget("ui.draggable",d.ui.mouse,{widgetEventPrefix:"drag",options:{addClasses:true,appendTo:"parent",axis:false,connectToSortable:false,containment:false,cursor:"auto",cursorAt:false,grid:false,handle:false,helper:"original",iframeFix:false,opacity:false,refreshPositions:false,revert:false,revertDuration:500,scope:"default",scroll:true,scrollSensitivity:20,scrollSpeed:20,snap:false,snapMode:"both",snapTolerance:20,stack:false,zIndex:false},_create:function(){if(this.options.helper==
"original"&&!/^(?:r|a|f)/.test(this.element.css("position")))this.element[0].style.position="relative";this.options.addClasses&&this.element.addClass("ui-draggable");this.options.disabled&&this.element.addClass("ui-draggable-disabled");this._mouseInit()},destroy:function(){if(this.element.data("draggable")){this.element.removeData("draggable").unbind(".draggable").removeClass("ui-draggable ui-draggable-dragging ui-draggable-disabled");this._mouseDestroy();return this}},_mouseCapture:function(a){var b=
this.options;if(this.helper||b.disabled||d(a.target).is(".ui-resizable-handle"))return false;this.handle=this._getHandle(a);if(!this.handle)return false;return true},_mouseStart:function(a){var b=this.options;this.helper=this._createHelper(a);this._cacheHelperProportions();if(d.ui.ddmanager)d.ui.ddmanager.current=this;this._cacheMargins();this.cssPosition=this.helper.css("position");this.scrollParent=this.helper.scrollParent();this.offset=this.positionAbs=this.element.offset();this.offset={top:this.offset.top-
this.margins.top,left:this.offset.left-this.margins.left};d.extend(this.offset,{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this.position=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=a.pageY;b.cursorAt&&this._adjustOffsetFromHelper(b.cursorAt);b.containment&&this._setContainment();if(this._trigger("start",a)===false){this._clear();return false}this._cacheHelperProportions();
d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a);this.helper.addClass("ui-draggable-dragging");this._mouseDrag(a,true);return true},_mouseDrag:function(a,b){this.position=this._generatePosition(a);this.positionAbs=this._convertPositionTo("absolute");if(!b){b=this._uiHash();if(this._trigger("drag",a,b)===false){this._mouseUp({});return false}this.position=b.position}if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+"px";if(!this.options.axis||
this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";d.ui.ddmanager&&d.ui.ddmanager.drag(this,a);return false},_mouseStop:function(a){var b=false;if(d.ui.ddmanager&&!this.options.dropBehaviour)b=d.ui.ddmanager.drop(this,a);if(this.dropped){b=this.dropped;this.dropped=false}if(!this.element[0]||!this.element[0].parentNode)return false;if(this.options.revert=="invalid"&&!b||this.options.revert=="valid"&&b||this.options.revert===true||d.isFunction(this.options.revert)&&this.options.revert.call(this.element,
b)){var c=this;d(this.helper).animate(this.originalPosition,parseInt(this.options.revertDuration,10),function(){c._trigger("stop",a)!==false&&c._clear()})}else this._trigger("stop",a)!==false&&this._clear();return false},cancel:function(){this.helper.is(".ui-draggable-dragging")?this._mouseUp({}):this._clear();return this},_getHandle:function(a){var b=!this.options.handle||!d(this.options.handle,this.element).length?true:false;d(this.options.handle,this.element).find("*").andSelf().each(function(){if(this==
a.target)b=true});return b},_createHelper:function(a){var b=this.options;a=d.isFunction(b.helper)?d(b.helper.apply(this.element[0],[a])):b.helper=="clone"?this.element.clone():this.element;a.parents("body").length||a.appendTo(b.appendTo=="parent"?this.element[0].parentNode:b.appendTo);a[0]!=this.element[0]&&!/(fixed|absolute)/.test(a.css("position"))&&a.css("position","absolute");return a},_adjustOffsetFromHelper:function(a){if(typeof a=="string")a=a.split(" ");if(d.isArray(a))a={left:+a[0],top:+a[1]||
0};if("left"in a)this.offset.click.left=a.left+this.margins.left;if("right"in a)this.offset.click.left=this.helperProportions.width-a.right+this.margins.left;if("top"in a)this.offset.click.top=a.top+this.margins.top;if("bottom"in a)this.offset.click.top=this.helperProportions.height-a.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var a=this.offsetParent.offset();if(this.cssPosition=="absolute"&&this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],
this.offsetParent[0])){a.left+=this.scrollParent.scrollLeft();a.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&d.browser.msie)a={top:0,left:0};return{top:a.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:a.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition=="relative"){var a=this.element.position();return{top:a.top-
(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.element.css("marginLeft"),10)||0,top:parseInt(this.element.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},_setContainment:function(){var a=this.options;if(a.containment==
"parent")a.containment=this.helper[0].parentNode;if(a.containment=="document"||a.containment=="window")this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,d(a.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(d(a.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-this.margins.top];if(!/^(document|window|parent)$/.test(a.containment)&&
a.containment.constructor!=Array){var b=d(a.containment)[0];if(b){a=d(a.containment).offset();var c=d(b).css("overflow")!="hidden";this.containment=[a.left+(parseInt(d(b).css("borderLeftWidth"),10)||0)+(parseInt(d(b).css("paddingLeft"),10)||0)-this.margins.left,a.top+(parseInt(d(b).css("borderTopWidth"),10)||0)+(parseInt(d(b).css("paddingTop"),10)||0)-this.margins.top,a.left+(c?Math.max(b.scrollWidth,b.offsetWidth):b.offsetWidth)-(parseInt(d(b).css("borderLeftWidth"),10)||0)-(parseInt(d(b).css("paddingRight"),
10)||0)-this.helperProportions.width-this.margins.left,a.top+(c?Math.max(b.scrollHeight,b.offsetHeight):b.offsetHeight)-(parseInt(d(b).css("borderTopWidth"),10)||0)-(parseInt(d(b).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}}else if(a.containment.constructor==Array)this.containment=a.containment},_convertPositionTo:function(a,b){if(!b)b=this.position;a=a=="absolute"?1:-1;var c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],
this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName);return{top:b.top+this.offset.relative.top*a+this.offset.parent.top*a-(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():f?0:c.scrollTop())*a),left:b.left+this.offset.relative.left*a+this.offset.parent.left*a-(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():
f?0:c.scrollLeft())*a)}},_generatePosition:function(a){var b=this.options,c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,f=/(html|body)/i.test(c[0].tagName),e=a.pageX,g=a.pageY;if(this.originalPosition){if(this.containment){if(a.pageX-this.offset.click.left<this.containment[0])e=this.containment[0]+this.offset.click.left;if(a.pageY-this.offset.click.top<this.containment[1])g=this.containment[1]+
this.offset.click.top;if(a.pageX-this.offset.click.left>this.containment[2])e=this.containment[2]+this.offset.click.left;if(a.pageY-this.offset.click.top>this.containment[3])g=this.containment[3]+this.offset.click.top}if(b.grid){g=this.originalPageY+Math.round((g-this.originalPageY)/b.grid[1])*b.grid[1];g=this.containment?!(g-this.offset.click.top<this.containment[1]||g-this.offset.click.top>this.containment[3])?g:!(g-this.offset.click.top<this.containment[1])?g-b.grid[1]:g+b.grid[1]:g;e=this.originalPageX+
Math.round((e-this.originalPageX)/b.grid[0])*b.grid[0];e=this.containment?!(e-this.offset.click.left<this.containment[0]||e-this.offset.click.left>this.containment[2])?e:!(e-this.offset.click.left<this.containment[0])?e-b.grid[0]:e+b.grid[0]:e}}return{top:g-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():f?0:c.scrollTop()),left:e-this.offset.click.left-
this.offset.relative.left-this.offset.parent.left+(d.browser.safari&&d.browser.version<526&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():f?0:c.scrollLeft())}},_clear:function(){this.helper.removeClass("ui-draggable-dragging");this.helper[0]!=this.element[0]&&!this.cancelHelperRemoval&&this.helper.remove();this.helper=null;this.cancelHelperRemoval=false},_trigger:function(a,b,c){c=c||this._uiHash();d.ui.plugin.call(this,a,[b,c]);if(a=="drag")this.positionAbs=
this._convertPositionTo("absolute");return d.Widget.prototype._trigger.call(this,a,b,c)},plugins:{},_uiHash:function(){return{helper:this.helper,position:this.position,originalPosition:this.originalPosition,offset:this.positionAbs}}});d.extend(d.ui.draggable,{version:"1.8.6"});d.ui.plugin.add("draggable","connectToSortable",{start:function(a,b){var c=d(this).data("draggable"),f=c.options,e=d.extend({},b,{item:c.element});c.sortables=[];d(f.connectToSortable).each(function(){var g=d.data(this,"sortable");
if(g&&!g.options.disabled){c.sortables.push({instance:g,shouldRevert:g.options.revert});g._refreshItems();g._trigger("activate",a,e)}})},stop:function(a,b){var c=d(this).data("draggable"),f=d.extend({},b,{item:c.element});d.each(c.sortables,function(){if(this.instance.isOver){this.instance.isOver=0;c.cancelHelperRemoval=true;this.instance.cancelHelperRemoval=false;if(this.shouldRevert)this.instance.options.revert=true;this.instance._mouseStop(a);this.instance.options.helper=this.instance.options._helper;
c.options.helper=="original"&&this.instance.currentItem.css({top:"auto",left:"auto"})}else{this.instance.cancelHelperRemoval=false;this.instance._trigger("deactivate",a,f)}})},drag:function(a,b){var c=d(this).data("draggable"),f=this;d.each(c.sortables,function(){this.instance.positionAbs=c.positionAbs;this.instance.helperProportions=c.helperProportions;this.instance.offset.click=c.offset.click;if(this.instance._intersectsWith(this.instance.containerCache)){if(!this.instance.isOver){this.instance.isOver=
1;this.instance.currentItem=d(f).clone().appendTo(this.instance.element).data("sortable-item",true);this.instance.options._helper=this.instance.options.helper;this.instance.options.helper=function(){return b.helper[0]};a.target=this.instance.currentItem[0];this.instance._mouseCapture(a,true);this.instance._mouseStart(a,true,true);this.instance.offset.click.top=c.offset.click.top;this.instance.offset.click.left=c.offset.click.left;this.instance.offset.parent.left-=c.offset.parent.left-this.instance.offset.parent.left;
this.instance.offset.parent.top-=c.offset.parent.top-this.instance.offset.parent.top;c._trigger("toSortable",a);c.dropped=this.instance.element;c.currentItem=c.element;this.instance.fromOutside=c}this.instance.currentItem&&this.instance._mouseDrag(a)}else if(this.instance.isOver){this.instance.isOver=0;this.instance.cancelHelperRemoval=true;this.instance.options.revert=false;this.instance._trigger("out",a,this.instance._uiHash(this.instance));this.instance._mouseStop(a,true);this.instance.options.helper=
this.instance.options._helper;this.instance.currentItem.remove();this.instance.placeholder&&this.instance.placeholder.remove();c._trigger("fromSortable",a);c.dropped=false}})}});d.ui.plugin.add("draggable","cursor",{start:function(){var a=d("body"),b=d(this).data("draggable").options;if(a.css("cursor"))b._cursor=a.css("cursor");a.css("cursor",b.cursor)},stop:function(){var a=d(this).data("draggable").options;a._cursor&&d("body").css("cursor",a._cursor)}});d.ui.plugin.add("draggable","iframeFix",{start:function(){var a=
d(this).data("draggable").options;d(a.iframeFix===true?"iframe":a.iframeFix).each(function(){d('<div class="ui-draggable-iframeFix" style="background: #fff;"></div>').css({width:this.offsetWidth+"px",height:this.offsetHeight+"px",position:"absolute",opacity:"0.001",zIndex:1E3}).css(d(this).offset()).appendTo("body")})},stop:function(){d("div.ui-draggable-iframeFix").each(function(){this.parentNode.removeChild(this)})}});d.ui.plugin.add("draggable","opacity",{start:function(a,b){a=d(b.helper);b=d(this).data("draggable").options;
if(a.css("opacity"))b._opacity=a.css("opacity");a.css("opacity",b.opacity)},stop:function(a,b){a=d(this).data("draggable").options;a._opacity&&d(b.helper).css("opacity",a._opacity)}});d.ui.plugin.add("draggable","scroll",{start:function(){var a=d(this).data("draggable");if(a.scrollParent[0]!=document&&a.scrollParent[0].tagName!="HTML")a.overflowOffset=a.scrollParent.offset()},drag:function(a){var b=d(this).data("draggable"),c=b.options,f=false;if(b.scrollParent[0]!=document&&b.scrollParent[0].tagName!=
"HTML"){if(!c.axis||c.axis!="x")if(b.overflowOffset.top+b.scrollParent[0].offsetHeight-a.pageY<c.scrollSensitivity)b.scrollParent[0].scrollTop=f=b.scrollParent[0].scrollTop+c.scrollSpeed;else if(a.pageY-b.overflowOffset.top<c.scrollSensitivity)b.scrollParent[0].scrollTop=f=b.scrollParent[0].scrollTop-c.scrollSpeed;if(!c.axis||c.axis!="y")if(b.overflowOffset.left+b.scrollParent[0].offsetWidth-a.pageX<c.scrollSensitivity)b.scrollParent[0].scrollLeft=f=b.scrollParent[0].scrollLeft+c.scrollSpeed;else if(a.pageX-
b.overflowOffset.left<c.scrollSensitivity)b.scrollParent[0].scrollLeft=f=b.scrollParent[0].scrollLeft-c.scrollSpeed}else{if(!c.axis||c.axis!="x")if(a.pageY-d(document).scrollTop()<c.scrollSensitivity)f=d(document).scrollTop(d(document).scrollTop()-c.scrollSpeed);else if(d(window).height()-(a.pageY-d(document).scrollTop())<c.scrollSensitivity)f=d(document).scrollTop(d(document).scrollTop()+c.scrollSpeed);if(!c.axis||c.axis!="y")if(a.pageX-d(document).scrollLeft()<c.scrollSensitivity)f=d(document).scrollLeft(d(document).scrollLeft()-
c.scrollSpeed);else if(d(window).width()-(a.pageX-d(document).scrollLeft())<c.scrollSensitivity)f=d(document).scrollLeft(d(document).scrollLeft()+c.scrollSpeed)}f!==false&&d.ui.ddmanager&&!c.dropBehaviour&&d.ui.ddmanager.prepareOffsets(b,a)}});d.ui.plugin.add("draggable","snap",{start:function(){var a=d(this).data("draggable"),b=a.options;a.snapElements=[];d(b.snap.constructor!=String?b.snap.items||":data(draggable)":b.snap).each(function(){var c=d(this),f=c.offset();this!=a.element[0]&&a.snapElements.push({item:this,
width:c.outerWidth(),height:c.outerHeight(),top:f.top,left:f.left})})},drag:function(a,b){for(var c=d(this).data("draggable"),f=c.options,e=f.snapTolerance,g=b.offset.left,n=g+c.helperProportions.width,m=b.offset.top,o=m+c.helperProportions.height,h=c.snapElements.length-1;h>=0;h--){var i=c.snapElements[h].left,k=i+c.snapElements[h].width,j=c.snapElements[h].top,l=j+c.snapElements[h].height;if(i-e<g&&g<k+e&&j-e<m&&m<l+e||i-e<g&&g<k+e&&j-e<o&&o<l+e||i-e<n&&n<k+e&&j-e<m&&m<l+e||i-e<n&&n<k+e&&j-e<o&&
o<l+e){if(f.snapMode!="inner"){var p=Math.abs(j-o)<=e,q=Math.abs(l-m)<=e,r=Math.abs(i-n)<=e,s=Math.abs(k-g)<=e;if(p)b.position.top=c._convertPositionTo("relative",{top:j-c.helperProportions.height,left:0}).top-c.margins.top;if(q)b.position.top=c._convertPositionTo("relative",{top:l,left:0}).top-c.margins.top;if(r)b.position.left=c._convertPositionTo("relative",{top:0,left:i-c.helperProportions.width}).left-c.margins.left;if(s)b.position.left=c._convertPositionTo("relative",{top:0,left:k}).left-c.margins.left}var t=
p||q||r||s;if(f.snapMode!="outer"){p=Math.abs(j-m)<=e;q=Math.abs(l-o)<=e;r=Math.abs(i-g)<=e;s=Math.abs(k-n)<=e;if(p)b.position.top=c._convertPositionTo("relative",{top:j,left:0}).top-c.margins.top;if(q)b.position.top=c._convertPositionTo("relative",{top:l-c.helperProportions.height,left:0}).top-c.margins.top;if(r)b.position.left=c._convertPositionTo("relative",{top:0,left:i}).left-c.margins.left;if(s)b.position.left=c._convertPositionTo("relative",{top:0,left:k-c.helperProportions.width}).left-c.margins.left}if(!c.snapElements[h].snapping&&
(p||q||r||s||t))c.options.snap.snap&&c.options.snap.snap.call(c.element,a,d.extend(c._uiHash(),{snapItem:c.snapElements[h].item}));c.snapElements[h].snapping=p||q||r||s||t}else{c.snapElements[h].snapping&&c.options.snap.release&&c.options.snap.release.call(c.element,a,d.extend(c._uiHash(),{snapItem:c.snapElements[h].item}));c.snapElements[h].snapping=false}}}});d.ui.plugin.add("draggable","stack",{start:function(){var a=d(this).data("draggable").options;a=d.makeArray(d(a.stack)).sort(function(c,f){return(parseInt(d(c).css("zIndex"),
10)||0)-(parseInt(d(f).css("zIndex"),10)||0)});if(a.length){var b=parseInt(a[0].style.zIndex)||0;d(a).each(function(c){this.style.zIndex=b+c});this[0].style.zIndex=b+a.length}}});d.ui.plugin.add("draggable","zIndex",{start:function(a,b){a=d(b.helper);b=d(this).data("draggable").options;if(a.css("zIndex"))b._zIndex=a.css("zIndex");a.css("zIndex",b.zIndex)},stop:function(a,b){a=d(this).data("draggable").options;a._zIndex&&d(b.helper).css("zIndex",a._zIndex)}})})(jQuery);
;/*
* jQuery UI Droppable 1.8.6
*
* Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Droppables
*
* Depends:
* jquery.ui.core.js
* jquery.ui.widget.js
* jquery.ui.mouse.js
* jquery.ui.draggable.js
*/
(function(d){d.widget("ui.droppable",{widgetEventPrefix:"drop",options:{accept:"*",activeClass:false,addClasses:true,greedy:false,hoverClass:false,scope:"default",tolerance:"intersect"},_create:function(){var a=this.options,b=a.accept;this.isover=0;this.isout=1;this.accept=d.isFunction(b)?b:function(c){return c.is(b)};this.proportions={width:this.element[0].offsetWidth,height:this.element[0].offsetHeight};d.ui.ddmanager.droppables[a.scope]=d.ui.ddmanager.droppables[a.scope]||[];d.ui.ddmanager.droppables[a.scope].push(this);
a.addClasses&&this.element.addClass("ui-droppable")},destroy:function(){for(var a=d.ui.ddmanager.droppables[this.options.scope],b=0;b<a.length;b++)a[b]==this&&a.splice(b,1);this.element.removeClass("ui-droppable ui-droppable-disabled").removeData("droppable").unbind(".droppable");return this},_setOption:function(a,b){if(a=="accept")this.accept=d.isFunction(b)?b:function(c){return c.is(b)};d.Widget.prototype._setOption.apply(this,arguments)},_activate:function(a){var b=d.ui.ddmanager.current;this.options.activeClass&&
this.element.addClass(this.options.activeClass);b&&this._trigger("activate",a,this.ui(b))},_deactivate:function(a){var b=d.ui.ddmanager.current;this.options.activeClass&&this.element.removeClass(this.options.activeClass);b&&this._trigger("deactivate",a,this.ui(b))},_over:function(a){var b=d.ui.ddmanager.current;if(!(!b||(b.currentItem||b.element)[0]==this.element[0]))if(this.accept.call(this.element[0],b.currentItem||b.element)){this.options.hoverClass&&this.element.addClass(this.options.hoverClass);
this._trigger("over",a,this.ui(b))}},_out:function(a){var b=d.ui.ddmanager.current;if(!(!b||(b.currentItem||b.element)[0]==this.element[0]))if(this.accept.call(this.element[0],b.currentItem||b.element)){this.options.hoverClass&&this.element.removeClass(this.options.hoverClass);this._trigger("out",a,this.ui(b))}},_drop:function(a,b){var c=b||d.ui.ddmanager.current;if(!c||(c.currentItem||c.element)[0]==this.element[0])return false;var e=false;this.element.find(":data(droppable)").not(".ui-draggable-dragging").each(function(){var g=
d.data(this,"droppable");if(g.options.greedy&&!g.options.disabled&&g.options.scope==c.options.scope&&g.accept.call(g.element[0],c.currentItem||c.element)&&d.ui.intersect(c,d.extend(g,{offset:g.element.offset()}),g.options.tolerance)){e=true;return false}});if(e)return false;if(this.accept.call(this.element[0],c.currentItem||c.element)){this.options.activeClass&&this.element.removeClass(this.options.activeClass);this.options.hoverClass&&this.element.removeClass(this.options.hoverClass);this._trigger("drop",
a,this.ui(c));return this.element}return false},ui:function(a){return{draggable:a.currentItem||a.element,helper:a.helper,position:a.position,offset:a.positionAbs}}});d.extend(d.ui.droppable,{version:"1.8.6"});d.ui.intersect=function(a,b,c){if(!b.offset)return false;var e=(a.positionAbs||a.position.absolute).left,g=e+a.helperProportions.width,f=(a.positionAbs||a.position.absolute).top,h=f+a.helperProportions.height,i=b.offset.left,k=i+b.proportions.width,j=b.offset.top,l=j+b.proportions.height;
switch(c){case "fit":return i<=e&&g<=k&&j<=f&&h<=l;case "intersect":return i<e+a.helperProportions.width/2&&g-a.helperProportions.width/2<k&&j<f+a.helperProportions.height/2&&h-a.helperProportions.height/2<l;case "pointer":return d.ui.isOver((a.positionAbs||a.position.absolute).top+(a.clickOffset||a.offset.click).top,(a.positionAbs||a.position.absolute).left+(a.clickOffset||a.offset.click).left,j,i,b.proportions.height,b.proportions.width);case "touch":return(f>=j&&f<=l||h>=j&&h<=l||f<j&&h>l)&&(e>=
i&&e<=k||g>=i&&g<=k||e<i&&g>k);default:return false}};d.ui.ddmanager={current:null,droppables:{"default":[]},prepareOffsets:function(a,b){var c=d.ui.ddmanager.droppables[a.options.scope]||[],e=b?b.type:null,g=(a.currentItem||a.element).find(":data(droppable)").andSelf(),f=0;a:for(;f<c.length;f++)if(!(c[f].options.disabled||a&&!c[f].accept.call(c[f].element[0],a.currentItem||a.element))){for(var h=0;h<g.length;h++)if(g[h]==c[f].element[0]){c[f].proportions.height=0;continue a}c[f].visible=c[f].element.css("display")!=
"none";if(c[f].visible){c[f].offset=c[f].element.offset();c[f].proportions={width:c[f].element[0].offsetWidth,height:c[f].element[0].offsetHeight};e=="mousedown"&&c[f]._activate.call(c[f],b)}}},drop:function(a,b){var c=false;d.each(d.ui.ddmanager.droppables[a.options.scope]||[],function(){if(this.options){if(!this.options.disabled&&this.visible&&d.ui.intersect(a,this,this.options.tolerance))c=c||this._drop.call(this,b);if(!this.options.disabled&&this.visible&&this.accept.call(this.element[0],a.currentItem||
a.element)){this.isout=1;this.isover=0;this._deactivate.call(this,b)}}});return c},drag:function(a,b){a.options.refreshPositions&&d.ui.ddmanager.prepareOffsets(a,b);d.each(d.ui.ddmanager.droppables[a.options.scope]||[],function(){if(!(this.options.disabled||this.greedyChild||!this.visible)){var c=d.ui.intersect(a,this,this.options.tolerance);if(c=!c&&this.isover==1?"isout":c&&this.isover==0?"isover":null){var e;if(this.options.greedy){var g=this.element.parents(":data(droppable):eq(0)");if(g.length){e=
d.data(g[0],"droppable");e.greedyChild=c=="isover"?1:0}}if(e&&c=="isover"){e.isover=0;e.isout=1;e._out.call(e,b)}this[c]=1;this[c=="isout"?"isover":"isout"]=0;this[c=="isover"?"_over":"_out"].call(this,b);if(e&&c=="isout"){e.isout=0;e.isover=1;e._over.call(e,b)}}}})}}})(jQuery);
;/*
* jQuery UI Resizable 1.8.6
*
* Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Resizables
*
* Depends:
* jquery.ui.core.js
* jquery.ui.mouse.js
* jquery.ui.widget.js
*/
(function(e){e.widget("ui.resizable",e.ui.mouse,{widgetEventPrefix:"resize",options:{alsoResize:false,animate:false,animateDuration:"slow",animateEasing:"swing",aspectRatio:false,autoHide:false,containment:false,ghost:false,grid:false,handles:"e,s,se",helper:false,maxHeight:null,maxWidth:null,minHeight:10,minWidth:10,zIndex:1E3},_create:function(){var b=this,a=this.options;this.element.addClass("ui-resizable");e.extend(this,{_aspectRatio:!!a.aspectRatio,aspectRatio:a.aspectRatio,originalElement:this.element,
_proportionallyResizeElements:[],_helper:a.helper||a.ghost||a.animate?a.helper||"ui-resizable-helper":null});if(this.element[0].nodeName.match(/canvas|textarea|input|select|button|img/i)){/relative/.test(this.element.css("position"))&&e.browser.opera&&this.element.css({position:"relative",top:"auto",left:"auto"});this.element.wrap(e('<div class="ui-wrapper" style="overflow: hidden;"></div>').css({position:this.element.css("position"),width:this.element.outerWidth(),height:this.element.outerHeight(),
top:this.element.css("top"),left:this.element.css("left")}));this.element=this.element.parent().data("resizable",this.element.data("resizable"));this.elementIsWrapper=true;this.element.css({marginLeft:this.originalElement.css("marginLeft"),marginTop:this.originalElement.css("marginTop"),marginRight:this.originalElement.css("marginRight"),marginBottom:this.originalElement.css("marginBottom")});this.originalElement.css({marginLeft:0,marginTop:0,marginRight:0,marginBottom:0});this.originalResizeStyle=
this.originalElement.css("resize");this.originalElement.css("resize","none");this._proportionallyResizeElements.push(this.originalElement.css({position:"static",zoom:1,display:"block"}));this.originalElement.css({margin:this.originalElement.css("margin")});this._proportionallyResize()}this.handles=a.handles||(!e(".ui-resizable-handle",this.element).length?"e,s,se":{n:".ui-resizable-n",e:".ui-resizable-e",s:".ui-resizable-s",w:".ui-resizable-w",se:".ui-resizable-se",sw:".ui-resizable-sw",ne:".ui-resizable-ne",
nw:".ui-resizable-nw"});if(this.handles.constructor==String){if(this.handles=="all")this.handles="n,e,s,w,se,sw,ne,nw";var c=this.handles.split(",");this.handles={};for(var d=0;d<c.length;d++){var f=e.trim(c[d]),g=e('<div class="ui-resizable-handle '+("ui-resizable-"+f)+'"></div>');/sw|se|ne|nw/.test(f)&&g.css({zIndex:++a.zIndex});"se"==f&&g.addClass("ui-icon ui-icon-gripsmall-diagonal-se");this.handles[f]=".ui-resizable-"+f;this.element.append(g)}}this._renderAxis=function(h){h=h||this.element;for(var i in this.handles){if(this.handles[i].constructor==
String)this.handles[i]=e(this.handles[i],this.element).show();if(this.elementIsWrapper&&this.originalElement[0].nodeName.match(/textarea|input|select|button/i)){var j=e(this.handles[i],this.element),k=0;k=/sw|ne|nw|se|n|s/.test(i)?j.outerHeight():j.outerWidth();j=["padding",/ne|nw|n/.test(i)?"Top":/se|sw|s/.test(i)?"Bottom":/^e$/.test(i)?"Right":"Left"].join("");h.css(j,k);this._proportionallyResize()}e(this.handles[i])}};this._renderAxis(this.element);this._handles=e(".ui-resizable-handle",this.element).disableSelection();
this._handles.mouseover(function(){if(!b.resizing){if(this.className)var h=this.className.match(/ui-resizable-(se|sw|ne|nw|n|e|s|w)/i);b.axis=h&&h[1]?h[1]:"se"}});if(a.autoHide){this._handles.hide();e(this.element).addClass("ui-resizable-autohide").hover(function(){e(this).removeClass("ui-resizable-autohide");b._handles.show()},function(){if(!b.resizing){e(this).addClass("ui-resizable-autohide");b._handles.hide()}})}this._mouseInit()},destroy:function(){this._mouseDestroy();var b=function(c){e(c).removeClass("ui-resizable ui-resizable-disabled ui-resizable-resizing").removeData("resizable").unbind(".resizable").find(".ui-resizable-handle").remove()};
if(this.elementIsWrapper){b(this.element);var a=this.element;a.after(this.originalElement.css({position:a.css("position"),width:a.outerWidth(),height:a.outerHeight(),top:a.css("top"),left:a.css("left")})).remove()}this.originalElement.css("resize",this.originalResizeStyle);b(this.originalElement);return this},_mouseCapture:function(b){var a=false;for(var c in this.handles)if(e(this.handles[c])[0]==b.target)a=true;return!this.options.disabled&&a},_mouseStart:function(b){var a=this.options,c=this.element.position(),
d=this.element;this.resizing=true;this.documentScroll={top:e(document).scrollTop(),left:e(document).scrollLeft()};if(d.is(".ui-draggable")||/absolute/.test(d.css("position")))d.css({position:"absolute",top:c.top,left:c.left});e.browser.opera&&/relative/.test(d.css("position"))&&d.css({position:"relative",top:"auto",left:"auto"});this._renderProxy();c=m(this.helper.css("left"));var f=m(this.helper.css("top"));if(a.containment){c+=e(a.containment).scrollLeft()||0;f+=e(a.containment).scrollTop()||0}this.offset=
this.helper.offset();this.position={left:c,top:f};this.size=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalSize=this._helper?{width:d.outerWidth(),height:d.outerHeight()}:{width:d.width(),height:d.height()};this.originalPosition={left:c,top:f};this.sizeDiff={width:d.outerWidth()-d.width(),height:d.outerHeight()-d.height()};this.originalMousePosition={left:b.pageX,top:b.pageY};this.aspectRatio=typeof a.aspectRatio=="number"?a.aspectRatio:
this.originalSize.width/this.originalSize.height||1;a=e(".ui-resizable-"+this.axis).css("cursor");e("body").css("cursor",a=="auto"?this.axis+"-resize":a);d.addClass("ui-resizable-resizing");this._propagate("start",b);return true},_mouseDrag:function(b){var a=this.helper,c=this.originalMousePosition,d=this._change[this.axis];if(!d)return false;c=d.apply(this,[b,b.pageX-c.left||0,b.pageY-c.top||0]);if(this._aspectRatio||b.shiftKey)c=this._updateRatio(c,b);c=this._respectSize(c,b);this._propagate("resize",
b);a.css({top:this.position.top+"px",left:this.position.left+"px",width:this.size.width+"px",height:this.size.height+"px"});!this._helper&&this._proportionallyResizeElements.length&&this._proportionallyResize();this._updateCache(c);this._trigger("resize",b,this.ui());return false},_mouseStop:function(b){this.resizing=false;var a=this.options,c=this;if(this._helper){var d=this._proportionallyResizeElements,f=d.length&&/textarea/i.test(d[0].nodeName);d=f&&e.ui.hasScroll(d[0],"left")?0:c.sizeDiff.height;
f={width:c.size.width-(f?0:c.sizeDiff.width),height:c.size.height-d};d=parseInt(c.element.css("left"),10)+(c.position.left-c.originalPosition.left)||null;var g=parseInt(c.element.css("top"),10)+(c.position.top-c.originalPosition.top)||null;a.animate||this.element.css(e.extend(f,{top:g,left:d}));c.helper.height(c.size.height);c.helper.width(c.size.width);this._helper&&!a.animate&&this._proportionallyResize()}e("body").css("cursor","auto");this.element.removeClass("ui-resizable-resizing");this._propagate("stop",
b);this._helper&&this.helper.remove();return false},_updateCache:function(b){this.offset=this.helper.offset();if(l(b.left))this.position.left=b.left;if(l(b.top))this.position.top=b.top;if(l(b.height))this.size.height=b.height;if(l(b.width))this.size.width=b.width},_updateRatio:function(b){var a=this.position,c=this.size,d=this.axis;if(b.height)b.width=c.height*this.aspectRatio;else if(b.width)b.height=c.width/this.aspectRatio;if(d=="sw"){b.left=a.left+(c.width-b.width);b.top=null}if(d=="nw"){b.top=
a.top+(c.height-b.height);b.left=a.left+(c.width-b.width)}return b},_respectSize:function(b){var a=this.options,c=this.axis,d=l(b.width)&&a.maxWidth&&a.maxWidth<b.width,f=l(b.height)&&a.maxHeight&&a.maxHeight<b.height,g=l(b.width)&&a.minWidth&&a.minWidth>b.width,h=l(b.height)&&a.minHeight&&a.minHeight>b.height;if(g)b.width=a.minWidth;if(h)b.height=a.minHeight;if(d)b.width=a.maxWidth;if(f)b.height=a.maxHeight;var i=this.originalPosition.left+this.originalSize.width,j=this.position.top+this.size.height,
k=/sw|nw|w/.test(c);c=/nw|ne|n/.test(c);if(g&&k)b.left=i-a.minWidth;if(d&&k)b.left=i-a.maxWidth;if(h&&c)b.top=j-a.minHeight;if(f&&c)b.top=j-a.maxHeight;if((a=!b.width&&!b.height)&&!b.left&&b.top)b.top=null;else if(a&&!b.top&&b.left)b.left=null;return b},_proportionallyResize:function(){if(this._proportionallyResizeElements.length)for(var b=this.helper||this.element,a=0;a<this._proportionallyResizeElements.length;a++){var c=this._proportionallyResizeElements[a];if(!this.borderDif){var d=[c.css("borderTopWidth"),
c.css("borderRightWidth"),c.css("borderBottomWidth"),c.css("borderLeftWidth")],f=[c.css("paddingTop"),c.css("paddingRight"),c.css("paddingBottom"),c.css("paddingLeft")];this.borderDif=e.map(d,function(g,h){g=parseInt(g,10)||0;h=parseInt(f[h],10)||0;return g+h})}e.browser.msie&&(e(b).is(":hidden")||e(b).parents(":hidden").length)||c.css({height:b.height()-this.borderDif[0]-this.borderDif[2]||0,width:b.width()-this.borderDif[1]-this.borderDif[3]||0})}},_renderProxy:function(){var b=this.options;this.elementOffset=
this.element.offset();if(this._helper){this.helper=this.helper||e('<div style="overflow:hidden;"></div>');var a=e.browser.msie&&e.browser.version<7,c=a?1:0;a=a?2:-1;this.helper.addClass(this._helper).css({width:this.element.outerWidth()+a,height:this.element.outerHeight()+a,position:"absolute",left:this.elementOffset.left-c+"px",top:this.elementOffset.top-c+"px",zIndex:++b.zIndex});this.helper.appendTo("body").disableSelection()}else this.helper=this.element},_change:{e:function(b,a){return{width:this.originalSize.width+
a}},w:function(b,a){return{left:this.originalPosition.left+a,width:this.originalSize.width-a}},n:function(b,a,c){return{top:this.originalPosition.top+c,height:this.originalSize.height-c}},s:function(b,a,c){return{height:this.originalSize.height+c}},se:function(b,a,c){return e.extend(this._change.s.apply(this,arguments),this._change.e.apply(this,[b,a,c]))},sw:function(b,a,c){return e.extend(this._change.s.apply(this,arguments),this._change.w.apply(this,[b,a,c]))},ne:function(b,a,c){return e.extend(this._change.n.apply(this,
arguments),this._change.e.apply(this,[b,a,c]))},nw:function(b,a,c){return e.extend(this._change.n.apply(this,arguments),this._change.w.apply(this,[b,a,c]))}},_propagate:function(b,a){e.ui.plugin.call(this,b,[a,this.ui()]);b!="resize"&&this._trigger(b,a,this.ui())},plugins:{},ui:function(){return{originalElement:this.originalElement,element:this.element,helper:this.helper,position:this.position,size:this.size,originalSize:this.originalSize,originalPosition:this.originalPosition}}});e.extend(e.ui.resizable,
{version:"1.8.6"});e.ui.plugin.add("resizable","alsoResize",{start:function(){var b=e(this).data("resizable").options,a=function(c){e(c).each(function(){var d=e(this);d.data("resizable-alsoresize",{width:parseInt(d.width(),10),height:parseInt(d.height(),10),left:parseInt(d.css("left"),10),top:parseInt(d.css("top"),10),position:d.css("position")})})};if(typeof b.alsoResize=="object"&&!b.alsoResize.parentNode)if(b.alsoResize.length){b.alsoResize=b.alsoResize[0];a(b.alsoResize)}else e.each(b.alsoResize,
function(c){a(c)});else a(b.alsoResize)},resize:function(b,a){var c=e(this).data("resizable");b=c.options;var d=c.originalSize,f=c.originalPosition,g={height:c.size.height-d.height||0,width:c.size.width-d.width||0,top:c.position.top-f.top||0,left:c.position.left-f.left||0},h=function(i,j){e(i).each(function(){var k=e(this),q=e(this).data("resizable-alsoresize"),p={},r=j&&j.length?j:k.parents(a.originalElement[0]).length?["width","height"]:["width","height","top","left"];e.each(r,function(n,o){if((n=
(q[o]||0)+(g[o]||0))&&n>=0)p[o]=n||null});if(e.browser.opera&&/relative/.test(k.css("position"))){c._revertToRelativePosition=true;k.css({position:"absolute",top:"auto",left:"auto"})}k.css(p)})};typeof b.alsoResize=="object"&&!b.alsoResize.nodeType?e.each(b.alsoResize,function(i,j){h(i,j)}):h(b.alsoResize)},stop:function(){var b=e(this).data("resizable"),a=b.options,c=function(d){e(d).each(function(){var f=e(this);f.css({position:f.data("resizable-alsoresize").position})})};if(b._revertToRelativePosition){b._revertToRelativePosition=
false;typeof a.alsoResize=="object"&&!a.alsoResize.nodeType?e.each(a.alsoResize,function(d){c(d)}):c(a.alsoResize)}e(this).removeData("resizable-alsoresize")}});e.ui.plugin.add("resizable","animate",{stop:function(b){var a=e(this).data("resizable"),c=a.options,d=a._proportionallyResizeElements,f=d.length&&/textarea/i.test(d[0].nodeName),g=f&&e.ui.hasScroll(d[0],"left")?0:a.sizeDiff.height;f={width:a.size.width-(f?0:a.sizeDiff.width),height:a.size.height-g};g=parseInt(a.element.css("left"),10)+(a.position.left-
a.originalPosition.left)||null;var h=parseInt(a.element.css("top"),10)+(a.position.top-a.originalPosition.top)||null;a.element.animate(e.extend(f,h&&g?{top:h,left:g}:{}),{duration:c.animateDuration,easing:c.animateEasing,step:function(){var i={width:parseInt(a.element.css("width"),10),height:parseInt(a.element.css("height"),10),top:parseInt(a.element.css("top"),10),left:parseInt(a.element.css("left"),10)};d&&d.length&&e(d[0]).css({width:i.width,height:i.height});a._updateCache(i);a._propagate("resize",
b)}})}});e.ui.plugin.add("resizable","containment",{start:function(){var b=e(this).data("resizable"),a=b.element,c=b.options.containment;if(a=c instanceof e?c.get(0):/parent/.test(c)?a.parent().get(0):c){b.containerElement=e(a);if(/document/.test(c)||c==document){b.containerOffset={left:0,top:0};b.containerPosition={left:0,top:0};b.parentData={element:e(document),left:0,top:0,width:e(document).width(),height:e(document).height()||document.body.parentNode.scrollHeight}}else{var d=e(a),f=[];e(["Top",
"Right","Left","Bottom"]).each(function(i,j){f[i]=m(d.css("padding"+j))});b.containerOffset=d.offset();b.containerPosition=d.position();b.containerSize={height:d.innerHeight()-f[3],width:d.innerWidth()-f[1]};c=b.containerOffset;var g=b.containerSize.height,h=b.containerSize.width;h=e.ui.hasScroll(a,"left")?a.scrollWidth:h;g=e.ui.hasScroll(a)?a.scrollHeight:g;b.parentData={element:a,left:c.left,top:c.top,width:h,height:g}}}},resize:function(b){var a=e(this).data("resizable"),c=a.options,d=a.containerOffset,
f=a.position;b=a._aspectRatio||b.shiftKey;var g={top:0,left:0},h=a.containerElement;if(h[0]!=document&&/static/.test(h.css("position")))g=d;if(f.left<(a._helper?d.left:0)){a.size.width+=a._helper?a.position.left-d.left:a.position.left-g.left;if(b)a.size.height=a.size.width/c.aspectRatio;a.position.left=c.helper?d.left:0}if(f.top<(a._helper?d.top:0)){a.size.height+=a._helper?a.position.top-d.top:a.position.top;if(b)a.size.width=a.size.height*c.aspectRatio;a.position.top=a._helper?d.top:0}a.offset.left=
a.parentData.left+a.position.left;a.offset.top=a.parentData.top+a.position.top;c=Math.abs((a._helper?a.offset.left-g.left:a.offset.left-g.left)+a.sizeDiff.width);d=Math.abs((a._helper?a.offset.top-g.top:a.offset.top-d.top)+a.sizeDiff.height);f=a.containerElement.get(0)==a.element.parent().get(0);g=/relative|absolute/.test(a.containerElement.css("position"));if(f&&g)c-=a.parentData.left;if(c+a.size.width>=a.parentData.width){a.size.width=a.parentData.width-c;if(b)a.size.height=a.size.width/a.aspectRatio}if(d+
a.size.height>=a.parentData.height){a.size.height=a.parentData.height-d;if(b)a.size.width=a.size.height*a.aspectRatio}},stop:function(){var b=e(this).data("resizable"),a=b.options,c=b.containerOffset,d=b.containerPosition,f=b.containerElement,g=e(b.helper),h=g.offset(),i=g.outerWidth()-b.sizeDiff.width;g=g.outerHeight()-b.sizeDiff.height;b._helper&&!a.animate&&/relative/.test(f.css("position"))&&e(this).css({left:h.left-d.left-c.left,width:i,height:g});b._helper&&!a.animate&&/static/.test(f.css("position"))&&
e(this).css({left:h.left-d.left-c.left,width:i,height:g})}});e.ui.plugin.add("resizable","ghost",{start:function(){var b=e(this).data("resizable"),a=b.options,c=b.size;b.ghost=b.originalElement.clone();b.ghost.css({opacity:0.25,display:"block",position:"relative",height:c.height,width:c.width,margin:0,left:0,top:0}).addClass("ui-resizable-ghost").addClass(typeof a.ghost=="string"?a.ghost:"");b.ghost.appendTo(b.helper)},resize:function(){var b=e(this).data("resizable");b.ghost&&b.ghost.css({position:"relative",
height:b.size.height,width:b.size.width})},stop:function(){var b=e(this).data("resizable");b.ghost&&b.helper&&b.helper.get(0).removeChild(b.ghost.get(0))}});e.ui.plugin.add("resizable","grid",{resize:function(){var b=e(this).data("resizable"),a=b.options,c=b.size,d=b.originalSize,f=b.originalPosition,g=b.axis;a.grid=typeof a.grid=="number"?[a.grid,a.grid]:a.grid;var h=Math.round((c.width-d.width)/(a.grid[0]||1))*(a.grid[0]||1);a=Math.round((c.height-d.height)/(a.grid[1]||1))*(a.grid[1]||1);if(/^(se|s|e)$/.test(g)){b.size.width=
d.width+h;b.size.height=d.height+a}else if(/^(ne)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a;b.position.top=f.top-a}else{if(/^(sw)$/.test(g)){b.size.width=d.width+h;b.size.height=d.height+a}else{b.size.width=d.width+h;b.size.height=d.height+a;b.position.top=f.top-a}b.position.left=f.left-h}}});var m=function(b){return parseInt(b,10)||0},l=function(b){return!isNaN(parseInt(b,10))}})(jQuery);
;/*
* jQuery UI Selectable 1.8.6
*
* Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Selectables
*
* Depends:
* jquery.ui.core.js
* jquery.ui.mouse.js
* jquery.ui.widget.js
*/
(function(e){e.widget("ui.selectable",e.ui.mouse,{options:{appendTo:"body",autoRefresh:true,distance:0,filter:"*",tolerance:"touch"},_create:function(){var c=this;this.element.addClass("ui-selectable");this.dragged=false;var f;this.refresh=function(){f=e(c.options.filter,c.element[0]);f.each(function(){var d=e(this),b=d.offset();e.data(this,"selectable-item",{element:this,$element:d,left:b.left,top:b.top,right:b.left+d.outerWidth(),bottom:b.top+d.outerHeight(),startselected:false,selected:d.hasClass("ui-selected"),
selecting:d.hasClass("ui-selecting"),unselecting:d.hasClass("ui-unselecting")})})};this.refresh();this.selectees=f.addClass("ui-selectee");this._mouseInit();this.helper=e("<div class='ui-selectable-helper'></div>")},destroy:function(){this.selectees.removeClass("ui-selectee").removeData("selectable-item");this.element.removeClass("ui-selectable ui-selectable-disabled").removeData("selectable").unbind(".selectable");this._mouseDestroy();return this},_mouseStart:function(c){var f=this;this.opos=[c.pageX,
c.pageY];if(!this.options.disabled){var d=this.options;this.selectees=e(d.filter,this.element[0]);this._trigger("start",c);e(d.appendTo).append(this.helper);this.helper.css({left:c.clientX,top:c.clientY,width:0,height:0});d.autoRefresh&&this.refresh();this.selectees.filter(".ui-selected").each(function(){var b=e.data(this,"selectable-item");b.startselected=true;if(!c.metaKey){b.$element.removeClass("ui-selected");b.selected=false;b.$element.addClass("ui-unselecting");b.unselecting=true;f._trigger("unselecting",
c,{unselecting:b.element})}});e(c.target).parents().andSelf().each(function(){var b=e.data(this,"selectable-item");if(b){var g=!c.metaKey||!b.$element.hasClass("ui-selected");b.$element.removeClass(g?"ui-unselecting":"ui-selected").addClass(g?"ui-selecting":"ui-unselecting");b.unselecting=!g;b.selecting=g;(b.selected=g)?f._trigger("selecting",c,{selecting:b.element}):f._trigger("unselecting",c,{unselecting:b.element});return false}})}},_mouseDrag:function(c){var f=this;this.dragged=true;if(!this.options.disabled){var d=
this.options,b=this.opos[0],g=this.opos[1],h=c.pageX,i=c.pageY;if(b>h){var j=h;h=b;b=j}if(g>i){j=i;i=g;g=j}this.helper.css({left:b,top:g,width:h-b,height:i-g});this.selectees.each(function(){var a=e.data(this,"selectable-item");if(!(!a||a.element==f.element[0])){var k=false;if(d.tolerance=="touch")k=!(a.left>h||a.right<b||a.top>i||a.bottom<g);else if(d.tolerance=="fit")k=a.left>b&&a.right<h&&a.top>g&&a.bottom<i;if(k){if(a.selected){a.$element.removeClass("ui-selected");a.selected=false}if(a.unselecting){a.$element.removeClass("ui-unselecting");
a.unselecting=false}if(!a.selecting){a.$element.addClass("ui-selecting");a.selecting=true;f._trigger("selecting",c,{selecting:a.element})}}else{if(a.selecting)if(c.metaKey&&a.startselected){a.$element.removeClass("ui-selecting");a.selecting=false;a.$element.addClass("ui-selected");a.selected=true}else{a.$element.removeClass("ui-selecting");a.selecting=false;if(a.startselected){a.$element.addClass("ui-unselecting");a.unselecting=true}f._trigger("unselecting",c,{unselecting:a.element})}if(a.selected)if(!c.metaKey&&
!a.startselected){a.$element.removeClass("ui-selected");a.selected=false;a.$element.addClass("ui-unselecting");a.unselecting=true;f._trigger("unselecting",c,{unselecting:a.element})}}}});return false}},_mouseStop:function(c){var f=this;this.dragged=false;e(".ui-unselecting",this.element[0]).each(function(){var d=e.data(this,"selectable-item");d.$element.removeClass("ui-unselecting");d.unselecting=false;d.startselected=false;f._trigger("unselected",c,{unselected:d.element})});e(".ui-selecting",this.element[0]).each(function(){var d=
e.data(this,"selectable-item");d.$element.removeClass("ui-selecting").addClass("ui-selected");d.selecting=false;d.selected=true;d.startselected=true;f._trigger("selected",c,{selected:d.element})});this._trigger("stop",c);this.helper.remove();return false}});e.extend(e.ui.selectable,{version:"1.8.6"})})(jQuery);
;/*
* jQuery UI Sortable 1.8.6
*
* Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Sortables
*
* Depends:
* jquery.ui.core.js
* jquery.ui.mouse.js
* jquery.ui.widget.js
*/
(function(d){d.widget("ui.sortable",d.ui.mouse,{widgetEventPrefix:"sort",options:{appendTo:"parent",axis:false,connectWith:false,containment:false,cursor:"auto",cursorAt:false,dropOnEmpty:true,forcePlaceholderSize:false,forceHelperSize:false,grid:false,handle:false,helper:"original",items:"> *",opacity:false,placeholder:false,revert:false,scroll:true,scrollSensitivity:20,scrollSpeed:20,scope:"default",tolerance:"intersect",zIndex:1E3},_create:function(){this.containerCache={};this.element.addClass("ui-sortable");
this.refresh();this.floating=this.items.length?/left|right/.test(this.items[0].item.css("float")):false;this.offset=this.element.offset();this._mouseInit()},destroy:function(){this.element.removeClass("ui-sortable ui-sortable-disabled").removeData("sortable").unbind(".sortable");this._mouseDestroy();for(var a=this.items.length-1;a>=0;a--)this.items[a].item.removeData("sortable-item");return this},_setOption:function(a,b){if(a==="disabled"){this.options[a]=b;this.widget()[b?"addClass":"removeClass"]("ui-sortable-disabled")}else d.Widget.prototype._setOption.apply(this,
arguments)},_mouseCapture:function(a,b){if(this.reverting)return false;if(this.options.disabled||this.options.type=="static")return false;this._refreshItems(a);var c=null,e=this;d(a.target).parents().each(function(){if(d.data(this,"sortable-item")==e){c=d(this);return false}});if(d.data(a.target,"sortable-item")==e)c=d(a.target);if(!c)return false;if(this.options.handle&&!b){var f=false;d(this.options.handle,c).find("*").andSelf().each(function(){if(this==a.target)f=true});if(!f)return false}this.currentItem=
c;this._removeCurrentsFromItems();return true},_mouseStart:function(a,b,c){b=this.options;var e=this;this.currentContainer=this;this.refreshPositions();this.helper=this._createHelper(a);this._cacheHelperProportions();this._cacheMargins();this.scrollParent=this.helper.scrollParent();this.offset=this.currentItem.offset();this.offset={top:this.offset.top-this.margins.top,left:this.offset.left-this.margins.left};this.helper.css("position","absolute");this.cssPosition=this.helper.css("position");d.extend(this.offset,
{click:{left:a.pageX-this.offset.left,top:a.pageY-this.offset.top},parent:this._getParentOffset(),relative:this._getRelativeOffset()});this.originalPosition=this._generatePosition(a);this.originalPageX=a.pageX;this.originalPageY=a.pageY;b.cursorAt&&this._adjustOffsetFromHelper(b.cursorAt);this.domPosition={prev:this.currentItem.prev()[0],parent:this.currentItem.parent()[0]};this.helper[0]!=this.currentItem[0]&&this.currentItem.hide();this._createPlaceholder();b.containment&&this._setContainment();
if(b.cursor){if(d("body").css("cursor"))this._storedCursor=d("body").css("cursor");d("body").css("cursor",b.cursor)}if(b.opacity){if(this.helper.css("opacity"))this._storedOpacity=this.helper.css("opacity");this.helper.css("opacity",b.opacity)}if(b.zIndex){if(this.helper.css("zIndex"))this._storedZIndex=this.helper.css("zIndex");this.helper.css("zIndex",b.zIndex)}if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML")this.overflowOffset=this.scrollParent.offset();this._trigger("start",
a,this._uiHash());this._preserveHelperProportions||this._cacheHelperProportions();if(!c)for(c=this.containers.length-1;c>=0;c--)this.containers[c]._trigger("activate",a,e._uiHash(this));if(d.ui.ddmanager)d.ui.ddmanager.current=this;d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a);this.dragging=true;this.helper.addClass("ui-sortable-helper");this._mouseDrag(a);return true},_mouseDrag:function(a){this.position=this._generatePosition(a);this.positionAbs=this._convertPositionTo("absolute");
if(!this.lastPositionAbs)this.lastPositionAbs=this.positionAbs;if(this.options.scroll){var b=this.options,c=false;if(this.scrollParent[0]!=document&&this.scrollParent[0].tagName!="HTML"){if(this.overflowOffset.top+this.scrollParent[0].offsetHeight-a.pageY<b.scrollSensitivity)this.scrollParent[0].scrollTop=c=this.scrollParent[0].scrollTop+b.scrollSpeed;else if(a.pageY-this.overflowOffset.top<b.scrollSensitivity)this.scrollParent[0].scrollTop=c=this.scrollParent[0].scrollTop-b.scrollSpeed;if(this.overflowOffset.left+
this.scrollParent[0].offsetWidth-a.pageX<b.scrollSensitivity)this.scrollParent[0].scrollLeft=c=this.scrollParent[0].scrollLeft+b.scrollSpeed;else if(a.pageX-this.overflowOffset.left<b.scrollSensitivity)this.scrollParent[0].scrollLeft=c=this.scrollParent[0].scrollLeft-b.scrollSpeed}else{if(a.pageY-d(document).scrollTop()<b.scrollSensitivity)c=d(document).scrollTop(d(document).scrollTop()-b.scrollSpeed);else if(d(window).height()-(a.pageY-d(document).scrollTop())<b.scrollSensitivity)c=d(document).scrollTop(d(document).scrollTop()+
b.scrollSpeed);if(a.pageX-d(document).scrollLeft()<b.scrollSensitivity)c=d(document).scrollLeft(d(document).scrollLeft()-b.scrollSpeed);else if(d(window).width()-(a.pageX-d(document).scrollLeft())<b.scrollSensitivity)c=d(document).scrollLeft(d(document).scrollLeft()+b.scrollSpeed)}c!==false&&d.ui.ddmanager&&!b.dropBehaviour&&d.ui.ddmanager.prepareOffsets(this,a)}this.positionAbs=this._convertPositionTo("absolute");if(!this.options.axis||this.options.axis!="y")this.helper[0].style.left=this.position.left+
"px";if(!this.options.axis||this.options.axis!="x")this.helper[0].style.top=this.position.top+"px";for(b=this.items.length-1;b>=0;b--){c=this.items[b];var e=c.item[0],f=this._intersectsWithPointer(c);if(f)if(e!=this.currentItem[0]&&this.placeholder[f==1?"next":"prev"]()[0]!=e&&!d.ui.contains(this.placeholder[0],e)&&(this.options.type=="semi-dynamic"?!d.ui.contains(this.element[0],e):true)){this.direction=f==1?"down":"up";if(this.options.tolerance=="pointer"||this._intersectsWithSides(c))this._rearrange(a,
c);else break;this._trigger("change",a,this._uiHash());break}}this._contactContainers(a);d.ui.ddmanager&&d.ui.ddmanager.drag(this,a);this._trigger("sort",a,this._uiHash());this.lastPositionAbs=this.positionAbs;return false},_mouseStop:function(a,b){if(a){d.ui.ddmanager&&!this.options.dropBehaviour&&d.ui.ddmanager.drop(this,a);if(this.options.revert){var c=this;b=c.placeholder.offset();c.reverting=true;d(this.helper).animate({left:b.left-this.offset.parent.left-c.margins.left+(this.offsetParent[0]==
document.body?0:this.offsetParent[0].scrollLeft),top:b.top-this.offset.parent.top-c.margins.top+(this.offsetParent[0]==document.body?0:this.offsetParent[0].scrollTop)},parseInt(this.options.revert,10)||500,function(){c._clear(a)})}else this._clear(a,b);return false}},cancel:function(){var a=this;if(this.dragging){this._mouseUp();this.options.helper=="original"?this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper"):this.currentItem.show();for(var b=this.containers.length-1;b>=0;b--){this.containers[b]._trigger("deactivate",
null,a._uiHash(this));if(this.containers[b].containerCache.over){this.containers[b]._trigger("out",null,a._uiHash(this));this.containers[b].containerCache.over=0}}}this.placeholder[0].parentNode&&this.placeholder[0].parentNode.removeChild(this.placeholder[0]);this.options.helper!="original"&&this.helper&&this.helper[0].parentNode&&this.helper.remove();d.extend(this,{helper:null,dragging:false,reverting:false,_noFinalSort:null});this.domPosition.prev?d(this.domPosition.prev).after(this.currentItem):
d(this.domPosition.parent).prepend(this.currentItem);return this},serialize:function(a){var b=this._getItemsAsjQuery(a&&a.connected),c=[];a=a||{};d(b).each(function(){var e=(d(a.item||this).attr(a.attribute||"id")||"").match(a.expression||/(.+)[-=_](.+)/);if(e)c.push((a.key||e[1]+"[]")+"="+(a.key&&a.expression?e[1]:e[2]))});!c.length&&a.key&&c.push(a.key+"=");return c.join("&")},toArray:function(a){var b=this._getItemsAsjQuery(a&&a.connected),c=[];a=a||{};b.each(function(){c.push(d(a.item||this).attr(a.attribute||
"id")||"")});return c},_intersectsWith:function(a){var b=this.positionAbs.left,c=b+this.helperProportions.width,e=this.positionAbs.top,f=e+this.helperProportions.height,g=a.left,h=g+a.width,i=a.top,k=i+a.height,j=this.offset.click.top,l=this.offset.click.left;j=e+j>i&&e+j<k&&b+l>g&&b+l<h;return this.options.tolerance=="pointer"||this.options.forcePointerForContainers||this.options.tolerance!="pointer"&&this.helperProportions[this.floating?"width":"height"]>a[this.floating?"width":"height"]?j:g<b+
this.helperProportions.width/2&&c-this.helperProportions.width/2<h&&i<e+this.helperProportions.height/2&&f-this.helperProportions.height/2<k},_intersectsWithPointer:function(a){var b=d.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,a.top,a.height);a=d.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,a.left,a.width);b=b&&a;a=this._getDragVerticalDirection();var c=this._getDragHorizontalDirection();if(!b)return false;return this.floating?c&&c=="right"||a=="down"?2:1:a&&(a=="down"?
2:1)},_intersectsWithSides:function(a){var b=d.ui.isOverAxis(this.positionAbs.top+this.offset.click.top,a.top+a.height/2,a.height);a=d.ui.isOverAxis(this.positionAbs.left+this.offset.click.left,a.left+a.width/2,a.width);var c=this._getDragVerticalDirection(),e=this._getDragHorizontalDirection();return this.floating&&e?e=="right"&&a||e=="left"&&!a:c&&(c=="down"&&b||c=="up"&&!b)},_getDragVerticalDirection:function(){var a=this.positionAbs.top-this.lastPositionAbs.top;return a!=0&&(a>0?"down":"up")},
_getDragHorizontalDirection:function(){var a=this.positionAbs.left-this.lastPositionAbs.left;return a!=0&&(a>0?"right":"left")},refresh:function(a){this._refreshItems(a);this.refreshPositions();return this},_connectWith:function(){var a=this.options;return a.connectWith.constructor==String?[a.connectWith]:a.connectWith},_getItemsAsjQuery:function(a){var b=[],c=[],e=this._connectWith();if(e&&a)for(a=e.length-1;a>=0;a--)for(var f=d(e[a]),g=f.length-1;g>=0;g--){var h=d.data(f[g],"sortable");if(h&&h!=
this&&!h.options.disabled)c.push([d.isFunction(h.options.items)?h.options.items.call(h.element):d(h.options.items,h.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),h])}c.push([d.isFunction(this.options.items)?this.options.items.call(this.element,null,{options:this.options,item:this.currentItem}):d(this.options.items,this.element).not(".ui-sortable-helper").not(".ui-sortable-placeholder"),this]);for(a=c.length-1;a>=0;a--)c[a][0].each(function(){b.push(this)});return d(b)},_removeCurrentsFromItems:function(){for(var a=
this.currentItem.find(":data(sortable-item)"),b=0;b<this.items.length;b++)for(var c=0;c<a.length;c++)a[c]==this.items[b].item[0]&&this.items.splice(b,1)},_refreshItems:function(a){this.items=[];this.containers=[this];var b=this.items,c=[[d.isFunction(this.options.items)?this.options.items.call(this.element[0],a,{item:this.currentItem}):d(this.options.items,this.element),this]],e=this._connectWith();if(e)for(var f=e.length-1;f>=0;f--)for(var g=d(e[f]),h=g.length-1;h>=0;h--){var i=d.data(g[h],"sortable");
if(i&&i!=this&&!i.options.disabled){c.push([d.isFunction(i.options.items)?i.options.items.call(i.element[0],a,{item:this.currentItem}):d(i.options.items,i.element),i]);this.containers.push(i)}}for(f=c.length-1;f>=0;f--){a=c[f][1];e=c[f][0];h=0;for(g=e.length;h<g;h++){i=d(e[h]);i.data("sortable-item",a);b.push({item:i,instance:a,width:0,height:0,left:0,top:0})}}},refreshPositions:function(a){if(this.offsetParent&&this.helper)this.offset.parent=this._getParentOffset();for(var b=this.items.length-1;b>=
0;b--){var c=this.items[b],e=this.options.toleranceElement?d(this.options.toleranceElement,c.item):c.item;if(!a){c.width=e.outerWidth();c.height=e.outerHeight()}e=e.offset();c.left=e.left;c.top=e.top}if(this.options.custom&&this.options.custom.refreshContainers)this.options.custom.refreshContainers.call(this);else for(b=this.containers.length-1;b>=0;b--){e=this.containers[b].element.offset();this.containers[b].containerCache.left=e.left;this.containers[b].containerCache.top=e.top;this.containers[b].containerCache.width=
this.containers[b].element.outerWidth();this.containers[b].containerCache.height=this.containers[b].element.outerHeight()}return this},_createPlaceholder:function(a){var b=a||this,c=b.options;if(!c.placeholder||c.placeholder.constructor==String){var e=c.placeholder;c.placeholder={element:function(){var f=d(document.createElement(b.currentItem[0].nodeName)).addClass(e||b.currentItem[0].className+" ui-sortable-placeholder").removeClass("ui-sortable-helper")[0];if(!e)f.style.visibility="hidden";return f},
update:function(f,g){if(!(e&&!c.forcePlaceholderSize)){g.height()||g.height(b.currentItem.innerHeight()-parseInt(b.currentItem.css("paddingTop")||0,10)-parseInt(b.currentItem.css("paddingBottom")||0,10));g.width()||g.width(b.currentItem.innerWidth()-parseInt(b.currentItem.css("paddingLeft")||0,10)-parseInt(b.currentItem.css("paddingRight")||0,10))}}}}b.placeholder=d(c.placeholder.element.call(b.element,b.currentItem));b.currentItem.after(b.placeholder);c.placeholder.update(b,b.placeholder)},_contactContainers:function(a){for(var b=
null,c=null,e=this.containers.length-1;e>=0;e--)if(!d.ui.contains(this.currentItem[0],this.containers[e].element[0]))if(this._intersectsWith(this.containers[e].containerCache)){if(!(b&&d.ui.contains(this.containers[e].element[0],b.element[0]))){b=this.containers[e];c=e}}else if(this.containers[e].containerCache.over){this.containers[e]._trigger("out",a,this._uiHash(this));this.containers[e].containerCache.over=0}if(b)if(this.containers.length===1){this.containers[c]._trigger("over",a,this._uiHash(this));
this.containers[c].containerCache.over=1}else if(this.currentContainer!=this.containers[c]){b=1E4;e=null;for(var f=this.positionAbs[this.containers[c].floating?"left":"top"],g=this.items.length-1;g>=0;g--)if(d.ui.contains(this.containers[c].element[0],this.items[g].item[0])){var h=this.items[g][this.containers[c].floating?"left":"top"];if(Math.abs(h-f)<b){b=Math.abs(h-f);e=this.items[g]}}if(e||this.options.dropOnEmpty){this.currentContainer=this.containers[c];e?this._rearrange(a,e,null,true):this._rearrange(a,
null,this.containers[c].element,true);this._trigger("change",a,this._uiHash());this.containers[c]._trigger("change",a,this._uiHash(this));this.options.placeholder.update(this.currentContainer,this.placeholder);this.containers[c]._trigger("over",a,this._uiHash(this));this.containers[c].containerCache.over=1}}},_createHelper:function(a){var b=this.options;a=d.isFunction(b.helper)?d(b.helper.apply(this.element[0],[a,this.currentItem])):b.helper=="clone"?this.currentItem.clone():this.currentItem;a.parents("body").length||
d(b.appendTo!="parent"?b.appendTo:this.currentItem[0].parentNode)[0].appendChild(a[0]);if(a[0]==this.currentItem[0])this._storedCSS={width:this.currentItem[0].style.width,height:this.currentItem[0].style.height,position:this.currentItem.css("position"),top:this.currentItem.css("top"),left:this.currentItem.css("left")};if(a[0].style.width==""||b.forceHelperSize)a.width(this.currentItem.width());if(a[0].style.height==""||b.forceHelperSize)a.height(this.currentItem.height());return a},_adjustOffsetFromHelper:function(a){if(typeof a==
"string")a=a.split(" ");if(d.isArray(a))a={left:+a[0],top:+a[1]||0};if("left"in a)this.offset.click.left=a.left+this.margins.left;if("right"in a)this.offset.click.left=this.helperProportions.width-a.right+this.margins.left;if("top"in a)this.offset.click.top=a.top+this.margins.top;if("bottom"in a)this.offset.click.top=this.helperProportions.height-a.bottom+this.margins.top},_getParentOffset:function(){this.offsetParent=this.helper.offsetParent();var a=this.offsetParent.offset();if(this.cssPosition==
"absolute"&&this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0])){a.left+=this.scrollParent.scrollLeft();a.top+=this.scrollParent.scrollTop()}if(this.offsetParent[0]==document.body||this.offsetParent[0].tagName&&this.offsetParent[0].tagName.toLowerCase()=="html"&&d.browser.msie)a={top:0,left:0};return{top:a.top+(parseInt(this.offsetParent.css("borderTopWidth"),10)||0),left:a.left+(parseInt(this.offsetParent.css("borderLeftWidth"),10)||0)}},_getRelativeOffset:function(){if(this.cssPosition==
"relative"){var a=this.currentItem.position();return{top:a.top-(parseInt(this.helper.css("top"),10)||0)+this.scrollParent.scrollTop(),left:a.left-(parseInt(this.helper.css("left"),10)||0)+this.scrollParent.scrollLeft()}}else return{top:0,left:0}},_cacheMargins:function(){this.margins={left:parseInt(this.currentItem.css("marginLeft"),10)||0,top:parseInt(this.currentItem.css("marginTop"),10)||0}},_cacheHelperProportions:function(){this.helperProportions={width:this.helper.outerWidth(),height:this.helper.outerHeight()}},
_setContainment:function(){var a=this.options;if(a.containment=="parent")a.containment=this.helper[0].parentNode;if(a.containment=="document"||a.containment=="window")this.containment=[0-this.offset.relative.left-this.offset.parent.left,0-this.offset.relative.top-this.offset.parent.top,d(a.containment=="document"?document:window).width()-this.helperProportions.width-this.margins.left,(d(a.containment=="document"?document:window).height()||document.body.parentNode.scrollHeight)-this.helperProportions.height-
this.margins.top];if(!/^(document|window|parent)$/.test(a.containment)){var b=d(a.containment)[0];a=d(a.containment).offset();var c=d(b).css("overflow")!="hidden";this.containment=[a.left+(parseInt(d(b).css("borderLeftWidth"),10)||0)+(parseInt(d(b).css("paddingLeft"),10)||0)-this.margins.left,a.top+(parseInt(d(b).css("borderTopWidth"),10)||0)+(parseInt(d(b).css("paddingTop"),10)||0)-this.margins.top,a.left+(c?Math.max(b.scrollWidth,b.offsetWidth):b.offsetWidth)-(parseInt(d(b).css("borderLeftWidth"),
10)||0)-(parseInt(d(b).css("paddingRight"),10)||0)-this.helperProportions.width-this.margins.left,a.top+(c?Math.max(b.scrollHeight,b.offsetHeight):b.offsetHeight)-(parseInt(d(b).css("borderTopWidth"),10)||0)-(parseInt(d(b).css("paddingBottom"),10)||0)-this.helperProportions.height-this.margins.top]}},_convertPositionTo:function(a,b){if(!b)b=this.position;a=a=="absolute"?1:-1;var c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?
this.offsetParent:this.scrollParent,e=/(html|body)/i.test(c[0].tagName);return{top:b.top+this.offset.relative.top*a+this.offset.parent.top*a-(d.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollTop():e?0:c.scrollTop())*a),left:b.left+this.offset.relative.left*a+this.offset.parent.left*a-(d.browser.safari&&this.cssPosition=="fixed"?0:(this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():e?0:c.scrollLeft())*a)}},_generatePosition:function(a){var b=
this.options,c=this.cssPosition=="absolute"&&!(this.scrollParent[0]!=document&&d.ui.contains(this.scrollParent[0],this.offsetParent[0]))?this.offsetParent:this.scrollParent,e=/(html|body)/i.test(c[0].tagName);if(this.cssPosition=="relative"&&!(this.scrollParent[0]!=document&&this.scrollParent[0]!=this.offsetParent[0]))this.offset.relative=this._getRelativeOffset();var f=a.pageX,g=a.pageY;if(this.originalPosition){if(this.containment){if(a.pageX-this.offset.click.left<this.containment[0])f=this.containment[0]+
this.offset.click.left;if(a.pageY-this.offset.click.top<this.containment[1])g=this.containment[1]+this.offset.click.top;if(a.pageX-this.offset.click.left>this.containment[2])f=this.containment[2]+this.offset.click.left;if(a.pageY-this.offset.click.top>this.containment[3])g=this.containment[3]+this.offset.click.top}if(b.grid){g=this.originalPageY+Math.round((g-this.originalPageY)/b.grid[1])*b.grid[1];g=this.containment?!(g-this.offset.click.top<this.containment[1]||g-this.offset.click.top>this.containment[3])?
g:!(g-this.offset.click.top<this.containment[1])?g-b.grid[1]:g+b.grid[1]:g;f=this.originalPageX+Math.round((f-this.originalPageX)/b.grid[0])*b.grid[0];f=this.containment?!(f-this.offset.click.left<this.containment[0]||f-this.offset.click.left>this.containment[2])?f:!(f-this.offset.click.left<this.containment[0])?f-b.grid[0]:f+b.grid[0]:f}}return{top:g-this.offset.click.top-this.offset.relative.top-this.offset.parent.top+(d.browser.safari&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollTop():
e?0:c.scrollTop()),left:f-this.offset.click.left-this.offset.relative.left-this.offset.parent.left+(d.browser.safari&&this.cssPosition=="fixed"?0:this.cssPosition=="fixed"?-this.scrollParent.scrollLeft():e?0:c.scrollLeft())}},_rearrange:function(a,b,c,e){c?c[0].appendChild(this.placeholder[0]):b.item[0].parentNode.insertBefore(this.placeholder[0],this.direction=="down"?b.item[0]:b.item[0].nextSibling);this.counter=this.counter?++this.counter:1;var f=this,g=this.counter;window.setTimeout(function(){g==
f.counter&&f.refreshPositions(!e)},0)},_clear:function(a,b){this.reverting=false;var c=[];!this._noFinalSort&&this.currentItem[0].parentNode&&this.placeholder.before(this.currentItem);this._noFinalSort=null;if(this.helper[0]==this.currentItem[0]){for(var e in this._storedCSS)if(this._storedCSS[e]=="auto"||this._storedCSS[e]=="static")this._storedCSS[e]="";this.currentItem.css(this._storedCSS).removeClass("ui-sortable-helper")}else this.currentItem.show();this.fromOutside&&!b&&c.push(function(f){this._trigger("receive",
f,this._uiHash(this.fromOutside))});if((this.fromOutside||this.domPosition.prev!=this.currentItem.prev().not(".ui-sortable-helper")[0]||this.domPosition.parent!=this.currentItem.parent()[0])&&!b)c.push(function(f){this._trigger("update",f,this._uiHash())});if(!d.ui.contains(this.element[0],this.currentItem[0])){b||c.push(function(f){this._trigger("remove",f,this._uiHash())});for(e=this.containers.length-1;e>=0;e--)if(d.ui.contains(this.containers[e].element[0],this.currentItem[0])&&!b){c.push(function(f){return function(g){f._trigger("receive",
g,this._uiHash(this))}}.call(this,this.containers[e]));c.push(function(f){return function(g){f._trigger("update",g,this._uiHash(this))}}.call(this,this.containers[e]))}}for(e=this.containers.length-1;e>=0;e--){b||c.push(function(f){return function(g){f._trigger("deactivate",g,this._uiHash(this))}}.call(this,this.containers[e]));if(this.containers[e].containerCache.over){c.push(function(f){return function(g){f._trigger("out",g,this._uiHash(this))}}.call(this,this.containers[e]));this.containers[e].containerCache.over=
0}}this._storedCursor&&d("body").css("cursor",this._storedCursor);this._storedOpacity&&this.helper.css("opacity",this._storedOpacity);if(this._storedZIndex)this.helper.css("zIndex",this._storedZIndex=="auto"?"":this._storedZIndex);this.dragging=false;if(this.cancelHelperRemoval){if(!b){this._trigger("beforeStop",a,this._uiHash());for(e=0;e<c.length;e++)c[e].call(this,a);this._trigger("stop",a,this._uiHash())}return false}b||this._trigger("beforeStop",a,this._uiHash());this.placeholder[0].parentNode.removeChild(this.placeholder[0]);
this.helper[0]!=this.currentItem[0]&&this.helper.remove();this.helper=null;if(!b){for(e=0;e<c.length;e++)c[e].call(this,a);this._trigger("stop",a,this._uiHash())}this.fromOutside=false;return true},_trigger:function(){d.Widget.prototype._trigger.apply(this,arguments)===false&&this.cancel()},_uiHash:function(a){var b=a||this;return{helper:b.helper,placeholder:b.placeholder||d([]),position:b.position,originalPosition:b.originalPosition,offset:b.positionAbs,item:b.currentItem,sender:a?a.element:null}}});
d.extend(d.ui.sortable,{version:"1.8.6"})})(jQuery);
;/*
* jQuery UI Accordion 1.8.6
*
* Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Accordion
*
* Depends:
* jquery.ui.core.js
* jquery.ui.widget.js
*/
(function(c){c.widget("ui.accordion",{options:{active:0,animated:"slide",autoHeight:true,clearStyle:false,collapsible:false,event:"click",fillSpace:false,header:"> li > :first-child,> :not(li):even",icons:{header:"ui-icon-triangle-1-e",headerSelected:"ui-icon-triangle-1-s"},navigation:false,navigationFilter:function(){return this.href.toLowerCase()===location.href.toLowerCase()}},_create:function(){var a=this,b=a.options;a.running=0;a.element.addClass("ui-accordion ui-widget ui-helper-reset").children("li").addClass("ui-accordion-li-fix");
a.headers=a.element.find(b.header).addClass("ui-accordion-header ui-helper-reset ui-state-default ui-corner-all").bind("mouseenter.accordion",function(){b.disabled||c(this).addClass("ui-state-hover")}).bind("mouseleave.accordion",function(){b.disabled||c(this).removeClass("ui-state-hover")}).bind("focus.accordion",function(){b.disabled||c(this).addClass("ui-state-focus")}).bind("blur.accordion",function(){b.disabled||c(this).removeClass("ui-state-focus")});a.headers.next().addClass("ui-accordion-content ui-helper-reset ui-widget-content ui-corner-bottom");
if(b.navigation){var d=a.element.find("a").filter(b.navigationFilter).eq(0);if(d.length){var f=d.closest(".ui-accordion-header");a.active=f.length?f:d.closest(".ui-accordion-content").prev()}}a.active=a._findActive(a.active||b.active).addClass("ui-state-default ui-state-active").toggleClass("ui-corner-all").toggleClass("ui-corner-top");a.active.next().addClass("ui-accordion-content-active");a._createIcons();a.resize();a.element.attr("role","tablist");a.headers.attr("role","tab").bind("keydown.accordion",
function(g){return a._keydown(g)}).next().attr("role","tabpanel");a.headers.not(a.active||"").attr({"aria-expanded":"false",tabIndex:-1}).next().hide();a.active.length?a.active.attr({"aria-expanded":"true",tabIndex:0}):a.headers.eq(0).attr("tabIndex",0);c.browser.safari||a.headers.find("a").attr("tabIndex",-1);b.event&&a.headers.bind(b.event.split(" ").join(".accordion ")+".accordion",function(g){a._clickHandler.call(a,g,this);g.preventDefault()})},_createIcons:function(){var a=this.options;if(a.icons){c("<span></span>").addClass("ui-icon "+
a.icons.header).prependTo(this.headers);this.active.children(".ui-icon").toggleClass(a.icons.header).toggleClass(a.icons.headerSelected);this.element.addClass("ui-accordion-icons")}},_destroyIcons:function(){this.headers.children(".ui-icon").remove();this.element.removeClass("ui-accordion-icons")},destroy:function(){var a=this.options;this.element.removeClass("ui-accordion ui-widget ui-helper-reset").removeAttr("role");this.headers.unbind(".accordion").removeClass("ui-accordion-header ui-accordion-disabled ui-helper-reset ui-state-default ui-corner-all ui-state-active ui-state-disabled ui-corner-top").removeAttr("role").removeAttr("aria-expanded").removeAttr("tabIndex");
this.headers.find("a").removeAttr("tabIndex");this._destroyIcons();var b=this.headers.next().css("display","").removeAttr("role").removeClass("ui-helper-reset ui-widget-content ui-corner-bottom ui-accordion-content ui-accordion-content-active ui-accordion-disabled ui-state-disabled");if(a.autoHeight||a.fillHeight)b.css("height","");return c.Widget.prototype.destroy.call(this)},_setOption:function(a,b){c.Widget.prototype._setOption.apply(this,arguments);a=="active"&&this.activate(b);if(a=="icons"){this._destroyIcons();
b&&this._createIcons()}if(a=="disabled")this.headers.add(this.headers.next())[b?"addClass":"removeClass"]("ui-accordion-disabled ui-state-disabled")},_keydown:function(a){if(!(this.options.disabled||a.altKey||a.ctrlKey)){var b=c.ui.keyCode,d=this.headers.length,f=this.headers.index(a.target),g=false;switch(a.keyCode){case b.RIGHT:case b.DOWN:g=this.headers[(f+1)%d];break;case b.LEFT:case b.UP:g=this.headers[(f-1+d)%d];break;case b.SPACE:case b.ENTER:this._clickHandler({target:a.target},a.target);
a.preventDefault()}if(g){c(a.target).attr("tabIndex",-1);c(g).attr("tabIndex",0);g.focus();return false}return true}},resize:function(){var a=this.options,b;if(a.fillSpace){if(c.browser.msie){var d=this.element.parent().css("overflow");this.element.parent().css("overflow","hidden")}b=this.element.parent().height();c.browser.msie&&this.element.parent().css("overflow",d);this.headers.each(function(){b-=c(this).outerHeight(true)});this.headers.next().each(function(){c(this).height(Math.max(0,b-c(this).innerHeight()+
c(this).height()))}).css("overflow","auto")}else if(a.autoHeight){b=0;this.headers.next().each(function(){b=Math.max(b,c(this).height("").height())}).height(b)}return this},activate:function(a){this.options.active=a;a=this._findActive(a)[0];this._clickHandler({target:a},a);return this},_findActive:function(a){return a?typeof a==="number"?this.headers.filter(":eq("+a+")"):this.headers.not(this.headers.not(a)):a===false?c([]):this.headers.filter(":eq(0)")},_clickHandler:function(a,b){var d=this.options;
if(!d.disabled)if(a.target){a=c(a.currentTarget||b);b=a[0]===this.active[0];d.active=d.collapsible&&b?false:this.headers.index(a);if(!(this.running||!d.collapsible&&b)){this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header);if(!b){a.removeClass("ui-state-default ui-corner-all").addClass("ui-state-active ui-corner-top").children(".ui-icon").removeClass(d.icons.header).addClass(d.icons.headerSelected);
a.next().addClass("ui-accordion-content-active")}h=a.next();f=this.active.next();g={options:d,newHeader:b&&d.collapsible?c([]):a,oldHeader:this.active,newContent:b&&d.collapsible?c([]):h,oldContent:f};d=this.headers.index(this.active[0])>this.headers.index(a[0]);this.active=b?c([]):a;this._toggle(h,f,g,b,d)}}else if(d.collapsible){this.active.removeClass("ui-state-active ui-corner-top").addClass("ui-state-default ui-corner-all").children(".ui-icon").removeClass(d.icons.headerSelected).addClass(d.icons.header);
this.active.next().addClass("ui-accordion-content-active");var f=this.active.next(),g={options:d,newHeader:c([]),oldHeader:d.active,newContent:c([]),oldContent:f},h=this.active=c([]);this._toggle(h,f,g)}},_toggle:function(a,b,d,f,g){var h=this,e=h.options;h.toShow=a;h.toHide=b;h.data=d;var j=function(){if(h)return h._completed.apply(h,arguments)};h._trigger("changestart",null,h.data);h.running=b.size()===0?a.size():b.size();if(e.animated){d={};d=e.collapsible&&f?{toShow:c([]),toHide:b,complete:j,
down:g,autoHeight:e.autoHeight||e.fillSpace}:{toShow:a,toHide:b,complete:j,down:g,autoHeight:e.autoHeight||e.fillSpace};if(!e.proxied)e.proxied=e.animated;if(!e.proxiedDuration)e.proxiedDuration=e.duration;e.animated=c.isFunction(e.proxied)?e.proxied(d):e.proxied;e.duration=c.isFunction(e.proxiedDuration)?e.proxiedDuration(d):e.proxiedDuration;f=c.ui.accordion.animations;var i=e.duration,k=e.animated;if(k&&!f[k]&&!c.easing[k])k="slide";f[k]||(f[k]=function(l){this.slide(l,{easing:k,duration:i||700})});
f[k](d)}else{if(e.collapsible&&f)a.toggle();else{b.hide();a.show()}j(true)}b.prev().attr({"aria-expanded":"false",tabIndex:-1}).blur();a.prev().attr({"aria-expanded":"true",tabIndex:0}).focus()},_completed:function(a){this.running=a?0:--this.running;if(!this.running){this.options.clearStyle&&this.toShow.add(this.toHide).css({height:"",overflow:""});this.toHide.removeClass("ui-accordion-content-active");this._trigger("change",null,this.data)}}});c.extend(c.ui.accordion,{version:"1.8.6",animations:{slide:function(a,
b){a=c.extend({easing:"swing",duration:300},a,b);if(a.toHide.size())if(a.toShow.size()){var d=a.toShow.css("overflow"),f=0,g={},h={},e;b=a.toShow;e=b[0].style.width;b.width(parseInt(b.parent().width(),10)-parseInt(b.css("paddingLeft"),10)-parseInt(b.css("paddingRight"),10)-(parseInt(b.css("borderLeftWidth"),10)||0)-(parseInt(b.css("borderRightWidth"),10)||0));c.each(["height","paddingTop","paddingBottom"],function(j,i){h[i]="hide";j=(""+c.css(a.toShow[0],i)).match(/^([\d+-.]+)(.*)$/);g[i]={value:j[1],
unit:j[2]||"px"}});a.toShow.css({height:0,overflow:"hidden"}).show();a.toHide.filter(":hidden").each(a.complete).end().filter(":visible").animate(h,{step:function(j,i){if(i.prop=="height")f=i.end-i.start===0?0:(i.now-i.start)/(i.end-i.start);a.toShow[0].style[i.prop]=f*g[i.prop].value+g[i.prop].unit},duration:a.duration,easing:a.easing,complete:function(){a.autoHeight||a.toShow.css("height","");a.toShow.css({width:e,overflow:d});a.complete()}})}else a.toHide.animate({height:"hide",paddingTop:"hide",
paddingBottom:"hide"},a);else a.toShow.animate({height:"show",paddingTop:"show",paddingBottom:"show"},a)},bounceslide:function(a){this.slide(a,{easing:a.down?"easeOutBounce":"swing",duration:a.down?1E3:200})}}})})(jQuery);
;/*
* jQuery UI Autocomplete 1.8.6
*
* Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Autocomplete
*
* Depends:
* jquery.ui.core.js
* jquery.ui.widget.js
* jquery.ui.position.js
*/
(function(e){e.widget("ui.autocomplete",{options:{appendTo:"body",delay:300,minLength:1,position:{my:"left top",at:"left bottom",collision:"none"},source:null},_create:function(){var a=this,b=this.element[0].ownerDocument,f;this.element.addClass("ui-autocomplete-input").attr("autocomplete","off").attr({role:"textbox","aria-autocomplete":"list","aria-haspopup":"true"}).bind("keydown.autocomplete",function(c){if(!(a.options.disabled||a.element.attr("readonly"))){f=false;var d=e.ui.keyCode;switch(c.keyCode){case d.PAGE_UP:a._move("previousPage",
c);break;case d.PAGE_DOWN:a._move("nextPage",c);break;case d.UP:a._move("previous",c);c.preventDefault();break;case d.DOWN:a._move("next",c);c.preventDefault();break;case d.ENTER:case d.NUMPAD_ENTER:if(a.menu.active){f=true;c.preventDefault()}case d.TAB:if(!a.menu.active)return;a.menu.select(c);break;case d.ESCAPE:a.element.val(a.term);a.close(c);break;default:clearTimeout(a.searching);a.searching=setTimeout(function(){if(a.term!=a.element.val()){a.selectedItem=null;a.search(null,c)}},a.options.delay);
break}}}).bind("keypress.autocomplete",function(c){if(f){f=false;c.preventDefault()}}).bind("focus.autocomplete",function(){if(!a.options.disabled){a.selectedItem=null;a.previous=a.element.val()}}).bind("blur.autocomplete",function(c){if(!a.options.disabled){clearTimeout(a.searching);a.closing=setTimeout(function(){a.close(c);a._change(c)},150)}});this._initSource();this.response=function(){return a._response.apply(a,arguments)};this.menu=e("<ul></ul>").addClass("ui-autocomplete").appendTo(e(this.options.appendTo||
"body",b)[0]).mousedown(function(c){var d=a.menu.element[0];e(c.target).closest(".ui-menu-item").length||setTimeout(function(){e(document).one("mousedown",function(g){g.target!==a.element[0]&&g.target!==d&&!e.ui.contains(d,g.target)&&a.close()})},1);setTimeout(function(){clearTimeout(a.closing)},13)}).menu({focus:function(c,d){d=d.item.data("item.autocomplete");false!==a._trigger("focus",c,{item:d})&&/^key/.test(c.originalEvent.type)&&a.element.val(d.value)},selected:function(c,d){d=d.item.data("item.autocomplete");
var g=a.previous;if(a.element[0]!==b.activeElement){a.element.focus();a.previous=g;setTimeout(function(){a.previous=g},1)}false!==a._trigger("select",c,{item:d})&&a.element.val(d.value);a.term=a.element.val();a.close(c);a.selectedItem=d},blur:function(){a.menu.element.is(":visible")&&a.element.val()!==a.term&&a.element.val(a.term)}}).zIndex(this.element.zIndex()+1).css({top:0,left:0}).hide().data("menu");e.fn.bgiframe&&this.menu.element.bgiframe()},destroy:function(){this.element.removeClass("ui-autocomplete-input").removeAttr("autocomplete").removeAttr("role").removeAttr("aria-autocomplete").removeAttr("aria-haspopup");
this.menu.element.remove();e.Widget.prototype.destroy.call(this)},_setOption:function(a,b){e.Widget.prototype._setOption.apply(this,arguments);a==="source"&&this._initSource();if(a==="appendTo")this.menu.element.appendTo(e(b||"body",this.element[0].ownerDocument)[0])},_initSource:function(){var a=this,b,f;if(e.isArray(this.options.source)){b=this.options.source;this.source=function(c,d){d(e.ui.autocomplete.filter(b,c.term))}}else if(typeof this.options.source==="string"){f=this.options.source;this.source=
function(c,d){a.xhr&&a.xhr.abort();a.xhr=e.getJSON(f,c,function(g,i,h){h===a.xhr&&d(g);a.xhr=null})}}else this.source=this.options.source},search:function(a,b){a=a!=null?a:this.element.val();this.term=this.element.val();if(a.length<this.options.minLength)return this.close(b);clearTimeout(this.closing);if(this._trigger("search",b)!==false)return this._search(a)},_search:function(a){this.element.addClass("ui-autocomplete-loading");this.source({term:a},this.response)},_response:function(a){if(a&&a.length){a=
this._normalize(a);this._suggest(a);this._trigger("open")}else this.close();this.element.removeClass("ui-autocomplete-loading")},close:function(a){clearTimeout(this.closing);if(this.menu.element.is(":visible")){this._trigger("close",a);this.menu.element.hide();this.menu.deactivate()}},_change:function(a){this.previous!==this.element.val()&&this._trigger("change",a,{item:this.selectedItem})},_normalize:function(a){if(a.length&&a[0].label&&a[0].value)return a;return e.map(a,function(b){if(typeof b===
"string")return{label:b,value:b};return e.extend({label:b.label||b.value,value:b.value||b.label},b)})},_suggest:function(a){this._renderMenu(this.menu.element.empty().zIndex(this.element.zIndex()+1),a);this.menu.deactivate();this.menu.refresh();this.menu.element.show().position(e.extend({of:this.element},this.options.position));this._resizeMenu()},_resizeMenu:function(){var a=this.menu.element;a.outerWidth(Math.max(a.width("").outerWidth(),this.element.outerWidth()))},_renderMenu:function(a,b){var f=
this;e.each(b,function(c,d){f._renderItem(a,d)})},_renderItem:function(a,b){return e("<li></li>").data("item.autocomplete",b).append(e("<a></a>").text(b.label)).appendTo(a)},_move:function(a,b){if(this.menu.element.is(":visible"))if(this.menu.first()&&/^previous/.test(a)||this.menu.last()&&/^next/.test(a)){this.element.val(this.term);this.menu.deactivate()}else this.menu[a](b);else this.search(null,b)},widget:function(){return this.menu.element}});e.extend(e.ui.autocomplete,{escapeRegex:function(a){return a.replace(/[-[\]{}()*+?.,\\^$|#\s]/g,
"\\$&")},filter:function(a,b){var f=new RegExp(e.ui.autocomplete.escapeRegex(b),"i");return e.grep(a,function(c){return f.test(c.label||c.value||c)})}})})(jQuery);
(function(e){e.widget("ui.menu",{_create:function(){var a=this;this.element.addClass("ui-menu ui-widget ui-widget-content ui-corner-all").attr({role:"listbox","aria-activedescendant":"ui-active-menuitem"}).click(function(b){if(e(b.target).closest(".ui-menu-item a").length){b.preventDefault();a.select(b)}});this.refresh()},refresh:function(){var a=this;this.element.children("li:not(.ui-menu-item):has(a)").addClass("ui-menu-item").attr("role","menuitem").children("a").addClass("ui-corner-all").attr("tabindex",
-1).mouseenter(function(b){a.activate(b,e(this).parent())}).mouseleave(function(){a.deactivate()})},activate:function(a,b){this.deactivate();if(this.hasScroll()){var f=b.offset().top-this.element.offset().top,c=this.element.attr("scrollTop"),d=this.element.height();if(f<0)this.element.attr("scrollTop",c+f);else f>=d&&this.element.attr("scrollTop",c+f-d+b.height())}this.active=b.eq(0).children("a").addClass("ui-state-hover").attr("id","ui-active-menuitem").end();this._trigger("focus",a,{item:b})},
deactivate:function(){if(this.active){this.active.children("a").removeClass("ui-state-hover").removeAttr("id");this._trigger("blur");this.active=null}},next:function(a){this.move("next",".ui-menu-item:first",a)},previous:function(a){this.move("prev",".ui-menu-item:last",a)},first:function(){return this.active&&!this.active.prevAll(".ui-menu-item").length},last:function(){return this.active&&!this.active.nextAll(".ui-menu-item").length},move:function(a,b,f){if(this.active){a=this.active[a+"All"](".ui-menu-item").eq(0);
a.length?this.activate(f,a):this.activate(f,this.element.children(b))}else this.activate(f,this.element.children(b))},nextPage:function(a){if(this.hasScroll())if(!this.active||this.last())this.activate(a,this.element.children(".ui-menu-item:first"));else{var b=this.active.offset().top,f=this.element.height(),c=this.element.children(".ui-menu-item").filter(function(){var d=e(this).offset().top-b-f+e(this).height();return d<10&&d>-10});c.length||(c=this.element.children(".ui-menu-item:last"));this.activate(a,
c)}else this.activate(a,this.element.children(".ui-menu-item").filter(!this.active||this.last()?":first":":last"))},previousPage:function(a){if(this.hasScroll())if(!this.active||this.first())this.activate(a,this.element.children(".ui-menu-item:last"));else{var b=this.active.offset().top,f=this.element.height();result=this.element.children(".ui-menu-item").filter(function(){var c=e(this).offset().top-b+f-e(this).height();return c<10&&c>-10});result.length||(result=this.element.children(".ui-menu-item:first"));
this.activate(a,result)}else this.activate(a,this.element.children(".ui-menu-item").filter(!this.active||this.first()?":last":":first"))},hasScroll:function(){return this.element.height()<this.element.attr("scrollHeight")},select:function(a){this._trigger("selected",a,{item:this.active})}})})(jQuery);
;/*
* jQuery UI Button 1.8.6
*
* Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Button
*
* Depends:
* jquery.ui.core.js
* jquery.ui.widget.js
*/
(function(a){var g,i=function(b){a(":ui-button",b.target.form).each(function(){var c=a(this).data("button");setTimeout(function(){c.refresh()},1)})},h=function(b){var c=b.name,d=b.form,e=a([]);if(c)e=d?a(d).find("[name='"+c+"']"):a("[name='"+c+"']",b.ownerDocument).filter(function(){return!this.form});return e};a.widget("ui.button",{options:{disabled:null,text:true,label:null,icons:{primary:null,secondary:null}},_create:function(){this.element.closest("form").unbind("reset.button").bind("reset.button",
i);if(typeof this.options.disabled!=="boolean")this.options.disabled=this.element.attr("disabled");this._determineButtonType();this.hasTitle=!!this.buttonElement.attr("title");var b=this,c=this.options,d=this.type==="checkbox"||this.type==="radio",e="ui-state-hover"+(!d?" ui-state-active":"");if(c.label===null)c.label=this.buttonElement.html();if(this.element.is(":disabled"))c.disabled=true;this.buttonElement.addClass("ui-button ui-widget ui-state-default ui-corner-all").attr("role","button").bind("mouseenter.button",
function(){if(!c.disabled){a(this).addClass("ui-state-hover");this===g&&a(this).addClass("ui-state-active")}}).bind("mouseleave.button",function(){c.disabled||a(this).removeClass(e)}).bind("focus.button",function(){a(this).addClass("ui-state-focus")}).bind("blur.button",function(){a(this).removeClass("ui-state-focus")});d&&this.element.bind("change.button",function(){b.refresh()});if(this.type==="checkbox")this.buttonElement.bind("click.button",function(){if(c.disabled)return false;a(this).toggleClass("ui-state-active");
b.buttonElement.attr("aria-pressed",b.element[0].checked)});else if(this.type==="radio")this.buttonElement.bind("click.button",function(){if(c.disabled)return false;a(this).addClass("ui-state-active");b.buttonElement.attr("aria-pressed",true);var f=b.element[0];h(f).not(f).map(function(){return a(this).button("widget")[0]}).removeClass("ui-state-active").attr("aria-pressed",false)});else{this.buttonElement.bind("mousedown.button",function(){if(c.disabled)return false;a(this).addClass("ui-state-active");
g=this;a(document).one("mouseup",function(){g=null})}).bind("mouseup.button",function(){if(c.disabled)return false;a(this).removeClass("ui-state-active")}).bind("keydown.button",function(f){if(c.disabled)return false;if(f.keyCode==a.ui.keyCode.SPACE||f.keyCode==a.ui.keyCode.ENTER)a(this).addClass("ui-state-active")}).bind("keyup.button",function(){a(this).removeClass("ui-state-active")});this.buttonElement.is("a")&&this.buttonElement.keyup(function(f){f.keyCode===a.ui.keyCode.SPACE&&a(this).click()})}this._setOption("disabled",
c.disabled)},_determineButtonType:function(){this.type=this.element.is(":checkbox")?"checkbox":this.element.is(":radio")?"radio":this.element.is("input")?"input":"button";if(this.type==="checkbox"||this.type==="radio"){this.buttonElement=this.element.parents().last().find("label[for="+this.element.attr("id")+"]");this.element.addClass("ui-helper-hidden-accessible");var b=this.element.is(":checked");b&&this.buttonElement.addClass("ui-state-active");this.buttonElement.attr("aria-pressed",b)}else this.buttonElement=
this.element},widget:function(){return this.buttonElement},destroy:function(){this.element.removeClass("ui-helper-hidden-accessible");this.buttonElement.removeClass("ui-button ui-widget ui-state-default ui-corner-all ui-state-hover ui-state-active ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only").removeAttr("role").removeAttr("aria-pressed").html(this.buttonElement.find(".ui-button-text").html());this.hasTitle||
this.buttonElement.removeAttr("title");a.Widget.prototype.destroy.call(this)},_setOption:function(b,c){a.Widget.prototype._setOption.apply(this,arguments);if(b==="disabled")c?this.element.attr("disabled",true):this.element.removeAttr("disabled");this._resetButton()},refresh:function(){var b=this.element.is(":disabled");b!==this.options.disabled&&this._setOption("disabled",b);if(this.type==="radio")h(this.element[0]).each(function(){a(this).is(":checked")?a(this).button("widget").addClass("ui-state-active").attr("aria-pressed",
true):a(this).button("widget").removeClass("ui-state-active").attr("aria-pressed",false)});else if(this.type==="checkbox")this.element.is(":checked")?this.buttonElement.addClass("ui-state-active").attr("aria-pressed",true):this.buttonElement.removeClass("ui-state-active").attr("aria-pressed",false)},_resetButton:function(){if(this.type==="input")this.options.label&&this.element.val(this.options.label);else{var b=this.buttonElement.removeClass("ui-button-icons-only ui-button-icon-only ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary ui-button-text-only"),
c=a("<span></span>").addClass("ui-button-text").html(this.options.label).appendTo(b.empty()).text(),d=this.options.icons,e=d.primary&&d.secondary;if(d.primary||d.secondary){b.addClass("ui-button-text-icon"+(e?"s":d.primary?"-primary":"-secondary"));d.primary&&b.prepend("<span class='ui-button-icon-primary ui-icon "+d.primary+"'></span>");d.secondary&&b.append("<span class='ui-button-icon-secondary ui-icon "+d.secondary+"'></span>");if(!this.options.text){b.addClass(e?"ui-button-icons-only":"ui-button-icon-only").removeClass("ui-button-text-icons ui-button-text-icon-primary ui-button-text-icon-secondary");
this.hasTitle||b.attr("title",c)}}else b.addClass("ui-button-text-only")}}});a.widget("ui.buttonset",{_create:function(){this.element.addClass("ui-buttonset")},_init:function(){this.refresh()},_setOption:function(b,c){b==="disabled"&&this.buttons.button("option",b,c);a.Widget.prototype._setOption.apply(this,arguments)},refresh:function(){this.buttons=this.element.find(":button, :submit, :reset, :checkbox, :radio, a, :data(button)").filter(":ui-button").button("refresh").end().not(":ui-button").button().end().map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-all ui-corner-left ui-corner-right").filter(":visible").filter(":first").addClass("ui-corner-left").end().filter(":last").addClass("ui-corner-right").end().end().end()},
destroy:function(){this.element.removeClass("ui-buttonset");this.buttons.map(function(){return a(this).button("widget")[0]}).removeClass("ui-corner-left ui-corner-right").end().button("destroy");a.Widget.prototype.destroy.call(this)}})})(jQuery);
;/*
* jQuery UI Dialog 1.8.6
*
* Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Dialog
*
* Depends:
* jquery.ui.core.js
* jquery.ui.widget.js
* jquery.ui.button.js
* jquery.ui.draggable.js
* jquery.ui.mouse.js
* jquery.ui.position.js
* jquery.ui.resizable.js
*/
(function(c,j){var k={buttons:true,height:true,maxHeight:true,maxWidth:true,minHeight:true,minWidth:true,width:true},l={maxHeight:true,maxWidth:true,minHeight:true,minWidth:true};c.widget("ui.dialog",{options:{autoOpen:true,buttons:{},closeOnEscape:true,closeText:"close",dialogClass:"",draggable:true,hide:null,height:"auto",maxHeight:false,maxWidth:false,minHeight:150,minWidth:150,modal:false,position:{my:"center",at:"center",of:window,collision:"fit",using:function(a){var b=c(this).css(a).offset().top;
b<0&&c(this).css("top",a.top-b)}},resizable:true,show:null,stack:true,title:"",width:300,zIndex:1E3},_create:function(){this.originalTitle=this.element.attr("title");if(typeof this.originalTitle!=="string")this.originalTitle="";this.options.title=this.options.title||this.originalTitle;var a=this,b=a.options,d=b.title||"&#160;",e=c.ui.dialog.getTitleId(a.element),g=(a.uiDialog=c("<div></div>")).appendTo(document.body).hide().addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+b.dialogClass).css({zIndex:b.zIndex}).attr("tabIndex",
-1).css("outline",0).keydown(function(i){if(b.closeOnEscape&&i.keyCode&&i.keyCode===c.ui.keyCode.ESCAPE){a.close(i);i.preventDefault()}}).attr({role:"dialog","aria-labelledby":e}).mousedown(function(i){a.moveToTop(false,i)});a.element.show().removeAttr("title").addClass("ui-dialog-content ui-widget-content").appendTo(g);var f=(a.uiDialogTitlebar=c("<div></div>")).addClass("ui-dialog-titlebar ui-widget-header ui-corner-all ui-helper-clearfix").prependTo(g),h=c('<a href="#"></a>').addClass("ui-dialog-titlebar-close ui-corner-all").attr("role",
"button").hover(function(){h.addClass("ui-state-hover")},function(){h.removeClass("ui-state-hover")}).focus(function(){h.addClass("ui-state-focus")}).blur(function(){h.removeClass("ui-state-focus")}).click(function(i){a.close(i);return false}).appendTo(f);(a.uiDialogTitlebarCloseText=c("<span></span>")).addClass("ui-icon ui-icon-closethick").text(b.closeText).appendTo(h);c("<span></span>").addClass("ui-dialog-title").attr("id",e).html(d).prependTo(f);if(c.isFunction(b.beforeclose)&&!c.isFunction(b.beforeClose))b.beforeClose=
b.beforeclose;f.find("*").add(f).disableSelection();b.draggable&&c.fn.draggable&&a._makeDraggable();b.resizable&&c.fn.resizable&&a._makeResizable();a._createButtons(b.buttons);a._isOpen=false;c.fn.bgiframe&&g.bgiframe()},_init:function(){this.options.autoOpen&&this.open()},destroy:function(){var a=this;a.overlay&&a.overlay.destroy();a.uiDialog.hide();a.element.unbind(".dialog").removeData("dialog").removeClass("ui-dialog-content ui-widget-content").hide().appendTo("body");a.uiDialog.remove();a.originalTitle&&
a.element.attr("title",a.originalTitle);return a},widget:function(){return this.uiDialog},close:function(a){var b=this,d;if(false!==b._trigger("beforeClose",a)){b.overlay&&b.overlay.destroy();b.uiDialog.unbind("keypress.ui-dialog");b._isOpen=false;if(b.options.hide)b.uiDialog.hide(b.options.hide,function(){b._trigger("close",a)});else{b.uiDialog.hide();b._trigger("close",a)}c.ui.dialog.overlay.resize();if(b.options.modal){d=0;c(".ui-dialog").each(function(){if(this!==b.uiDialog[0])d=Math.max(d,c(this).css("z-index"))});
c.ui.dialog.maxZ=d}return b}},isOpen:function(){return this._isOpen},moveToTop:function(a,b){var d=this,e=d.options;if(e.modal&&!a||!e.stack&&!e.modal)return d._trigger("focus",b);if(e.zIndex>c.ui.dialog.maxZ)c.ui.dialog.maxZ=e.zIndex;if(d.overlay){c.ui.dialog.maxZ+=1;d.overlay.$el.css("z-index",c.ui.dialog.overlay.maxZ=c.ui.dialog.maxZ)}a={scrollTop:d.element.attr("scrollTop"),scrollLeft:d.element.attr("scrollLeft")};c.ui.dialog.maxZ+=1;d.uiDialog.css("z-index",c.ui.dialog.maxZ);d.element.attr(a);
d._trigger("focus",b);return d},open:function(){if(!this._isOpen){var a=this,b=a.options,d=a.uiDialog;a.overlay=b.modal?new c.ui.dialog.overlay(a):null;a._size();a._position(b.position);d.show(b.show);a.moveToTop(true);b.modal&&d.bind("keypress.ui-dialog",function(e){if(e.keyCode===c.ui.keyCode.TAB){var g=c(":tabbable",this),f=g.filter(":first");g=g.filter(":last");if(e.target===g[0]&&!e.shiftKey){f.focus(1);return false}else if(e.target===f[0]&&e.shiftKey){g.focus(1);return false}}});c(a.element.find(":tabbable").get().concat(d.find(".ui-dialog-buttonpane :tabbable").get().concat(d.get()))).eq(0).focus();
a._isOpen=true;a._trigger("open");return a}},_createButtons:function(a){var b=this,d=false,e=c("<div></div>").addClass("ui-dialog-buttonpane ui-widget-content ui-helper-clearfix"),g=c("<div></div>").addClass("ui-dialog-buttonset").appendTo(e);b.uiDialog.find(".ui-dialog-buttonpane").remove();typeof a==="object"&&a!==null&&c.each(a,function(){return!(d=true)});if(d){c.each(a,function(f,h){h=c.isFunction(h)?{click:h,text:f}:h;f=c('<button type="button"></button>').attr(h,true).unbind("click").click(function(){h.click.apply(b.element[0],
arguments)}).appendTo(g);c.fn.button&&f.button()});e.appendTo(b.uiDialog)}},_makeDraggable:function(){function a(f){return{position:f.position,offset:f.offset}}var b=this,d=b.options,e=c(document),g;b.uiDialog.draggable({cancel:".ui-dialog-content, .ui-dialog-titlebar-close",handle:".ui-dialog-titlebar",containment:"document",start:function(f,h){g=d.height==="auto"?"auto":c(this).height();c(this).height(c(this).height()).addClass("ui-dialog-dragging");b._trigger("dragStart",f,a(h))},drag:function(f,
h){b._trigger("drag",f,a(h))},stop:function(f,h){d.position=[h.position.left-e.scrollLeft(),h.position.top-e.scrollTop()];c(this).removeClass("ui-dialog-dragging").height(g);b._trigger("dragStop",f,a(h));c.ui.dialog.overlay.resize()}})},_makeResizable:function(a){function b(f){return{originalPosition:f.originalPosition,originalSize:f.originalSize,position:f.position,size:f.size}}a=a===j?this.options.resizable:a;var d=this,e=d.options,g=d.uiDialog.css("position");a=typeof a==="string"?a:"n,e,s,w,se,sw,ne,nw";
d.uiDialog.resizable({cancel:".ui-dialog-content",containment:"document",alsoResize:d.element,maxWidth:e.maxWidth,maxHeight:e.maxHeight,minWidth:e.minWidth,minHeight:d._minHeight(),handles:a,start:function(f,h){c(this).addClass("ui-dialog-resizing");d._trigger("resizeStart",f,b(h))},resize:function(f,h){d._trigger("resize",f,b(h))},stop:function(f,h){c(this).removeClass("ui-dialog-resizing");e.height=c(this).height();e.width=c(this).width();d._trigger("resizeStop",f,b(h));c.ui.dialog.overlay.resize()}}).css("position",
g).find(".ui-resizable-se").addClass("ui-icon ui-icon-grip-diagonal-se")},_minHeight:function(){var a=this.options;return a.height==="auto"?a.minHeight:Math.min(a.minHeight,a.height)},_position:function(a){var b=[],d=[0,0],e;if(a){if(typeof a==="string"||typeof a==="object"&&"0"in a){b=a.split?a.split(" "):[a[0],a[1]];if(b.length===1)b[1]=b[0];c.each(["left","top"],function(g,f){if(+b[g]===b[g]){d[g]=b[g];b[g]=f}});a={my:b.join(" "),at:b.join(" "),offset:d.join(" ")}}a=c.extend({},c.ui.dialog.prototype.options.position,
a)}else a=c.ui.dialog.prototype.options.position;(e=this.uiDialog.is(":visible"))||this.uiDialog.show();this.uiDialog.css({top:0,left:0}).position(a);e||this.uiDialog.hide()},_setOptions:function(a){var b=this,d={},e=false;c.each(a,function(g,f){b._setOption(g,f);if(g in k)e=true;if(g in l)d[g]=f});e&&this._size();this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option",d)},_setOption:function(a,b){var d=this,e=d.uiDialog;switch(a){case "beforeclose":a="beforeClose";break;case "buttons":d._createButtons(b);
break;case "closeText":d.uiDialogTitlebarCloseText.text(""+b);break;case "dialogClass":e.removeClass(d.options.dialogClass).addClass("ui-dialog ui-widget ui-widget-content ui-corner-all "+b);break;case "disabled":b?e.addClass("ui-dialog-disabled"):e.removeClass("ui-dialog-disabled");break;case "draggable":var g=e.is(":data(draggable)");g&&!b&&e.draggable("destroy");!g&&b&&d._makeDraggable();break;case "position":d._position(b);break;case "resizable":(g=e.is(":data(resizable)"))&&!b&&e.resizable("destroy");
g&&typeof b==="string"&&e.resizable("option","handles",b);!g&&b!==false&&d._makeResizable(b);break;case "title":c(".ui-dialog-title",d.uiDialogTitlebar).html(""+(b||"&#160;"));break}c.Widget.prototype._setOption.apply(d,arguments)},_size:function(){var a=this.options,b,d;this.element.show().css({width:"auto",minHeight:0,height:0});if(a.minWidth>a.width)a.width=a.minWidth;b=this.uiDialog.css({height:"auto",width:a.width}).height();d=Math.max(0,a.minHeight-b);if(a.height==="auto")if(c.support.minHeight)this.element.css({minHeight:d,
height:"auto"});else{this.uiDialog.show();a=this.element.css("height","auto").height();this.uiDialog.hide();this.element.height(Math.max(a,d))}else this.element.height(Math.max(a.height-b,0));this.uiDialog.is(":data(resizable)")&&this.uiDialog.resizable("option","minHeight",this._minHeight())}});c.extend(c.ui.dialog,{version:"1.8.6",uuid:0,maxZ:0,getTitleId:function(a){a=a.attr("id");if(!a){this.uuid+=1;a=this.uuid}return"ui-dialog-title-"+a},overlay:function(a){this.$el=c.ui.dialog.overlay.create(a)}});
c.extend(c.ui.dialog.overlay,{instances:[],oldInstances:[],maxZ:0,events:c.map("focus,mousedown,mouseup,keydown,keypress,click".split(","),function(a){return a+".dialog-overlay"}).join(" "),create:function(a){if(this.instances.length===0){setTimeout(function(){c.ui.dialog.overlay.instances.length&&c(document).bind(c.ui.dialog.overlay.events,function(d){if(c(d.target).zIndex()<c.ui.dialog.overlay.maxZ)return false})},1);c(document).bind("keydown.dialog-overlay",function(d){if(a.options.closeOnEscape&&
d.keyCode&&d.keyCode===c.ui.keyCode.ESCAPE){a.close(d);d.preventDefault()}});c(window).bind("resize.dialog-overlay",c.ui.dialog.overlay.resize)}var b=(this.oldInstances.pop()||c("<div></div>").addClass("ui-widget-overlay")).appendTo(document.body).css({width:this.width(),height:this.height()});c.fn.bgiframe&&b.bgiframe();this.instances.push(b);return b},destroy:function(a){this.oldInstances.push(this.instances.splice(c.inArray(a,this.instances),1)[0]);this.instances.length===0&&c([document,window]).unbind(".dialog-overlay");
a.remove();var b=0;c.each(this.instances,function(){b=Math.max(b,this.css("z-index"))});this.maxZ=b},height:function(){var a,b;if(c.browser.msie&&c.browser.version<7){a=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight);b=Math.max(document.documentElement.offsetHeight,document.body.offsetHeight);return a<b?c(window).height()+"px":a+"px"}else return c(document).height()+"px"},width:function(){var a,b;if(c.browser.msie&&c.browser.version<7){a=Math.max(document.documentElement.scrollWidth,
document.body.scrollWidth);b=Math.max(document.documentElement.offsetWidth,document.body.offsetWidth);return a<b?c(window).width()+"px":a+"px"}else return c(document).width()+"px"},resize:function(){var a=c([]);c.each(c.ui.dialog.overlay.instances,function(){a=a.add(this)});a.css({width:0,height:0}).css({width:c.ui.dialog.overlay.width(),height:c.ui.dialog.overlay.height()})}});c.extend(c.ui.dialog.overlay.prototype,{destroy:function(){c.ui.dialog.overlay.destroy(this.$el)}})})(jQuery);
;/*
* jQuery UI Slider 1.8.6
*
* Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Slider
*
* Depends:
* jquery.ui.core.js
* jquery.ui.mouse.js
* jquery.ui.widget.js
*/
(function(d){d.widget("ui.slider",d.ui.mouse,{widgetEventPrefix:"slide",options:{animate:false,distance:0,max:100,min:0,orientation:"horizontal",range:false,step:1,value:0,values:null},_create:function(){var a=this,b=this.options;this._mouseSliding=this._keySliding=false;this._animateOff=true;this._handleIndex=null;this._detectOrientation();this._mouseInit();this.element.addClass("ui-slider ui-slider-"+this.orientation+" ui-widget ui-widget-content ui-corner-all");b.disabled&&this.element.addClass("ui-slider-disabled ui-disabled");
this.range=d([]);if(b.range){if(b.range===true){this.range=d("<div></div>");if(!b.values)b.values=[this._valueMin(),this._valueMin()];if(b.values.length&&b.values.length!==2)b.values=[b.values[0],b.values[0]]}else this.range=d("<div></div>");this.range.appendTo(this.element).addClass("ui-slider-range");if(b.range==="min"||b.range==="max")this.range.addClass("ui-slider-range-"+b.range);this.range.addClass("ui-widget-header")}d(".ui-slider-handle",this.element).length===0&&d("<a href='#'></a>").appendTo(this.element).addClass("ui-slider-handle");
if(b.values&&b.values.length)for(;d(".ui-slider-handle",this.element).length<b.values.length;)d("<a href='#'></a>").appendTo(this.element).addClass("ui-slider-handle");this.handles=d(".ui-slider-handle",this.element).addClass("ui-state-default ui-corner-all");this.handle=this.handles.eq(0);this.handles.add(this.range).filter("a").click(function(c){c.preventDefault()}).hover(function(){b.disabled||d(this).addClass("ui-state-hover")},function(){d(this).removeClass("ui-state-hover")}).focus(function(){if(b.disabled)d(this).blur();
else{d(".ui-slider .ui-state-focus").removeClass("ui-state-focus");d(this).addClass("ui-state-focus")}}).blur(function(){d(this).removeClass("ui-state-focus")});this.handles.each(function(c){d(this).data("index.ui-slider-handle",c)});this.handles.keydown(function(c){var e=true,f=d(this).data("index.ui-slider-handle"),h,g,i;if(!a.options.disabled){switch(c.keyCode){case d.ui.keyCode.HOME:case d.ui.keyCode.END:case d.ui.keyCode.PAGE_UP:case d.ui.keyCode.PAGE_DOWN:case d.ui.keyCode.UP:case d.ui.keyCode.RIGHT:case d.ui.keyCode.DOWN:case d.ui.keyCode.LEFT:e=
false;if(!a._keySliding){a._keySliding=true;d(this).addClass("ui-state-active");h=a._start(c,f);if(h===false)return}break}i=a.options.step;h=a.options.values&&a.options.values.length?(g=a.values(f)):(g=a.value());switch(c.keyCode){case d.ui.keyCode.HOME:g=a._valueMin();break;case d.ui.keyCode.END:g=a._valueMax();break;case d.ui.keyCode.PAGE_UP:g=a._trimAlignValue(h+(a._valueMax()-a._valueMin())/5);break;case d.ui.keyCode.PAGE_DOWN:g=a._trimAlignValue(h-(a._valueMax()-a._valueMin())/5);break;case d.ui.keyCode.UP:case d.ui.keyCode.RIGHT:if(h===
a._valueMax())return;g=a._trimAlignValue(h+i);break;case d.ui.keyCode.DOWN:case d.ui.keyCode.LEFT:if(h===a._valueMin())return;g=a._trimAlignValue(h-i);break}a._slide(c,f,g);return e}}).keyup(function(c){var e=d(this).data("index.ui-slider-handle");if(a._keySliding){a._keySliding=false;a._stop(c,e);a._change(c,e);d(this).removeClass("ui-state-active")}});this._refreshValue();this._animateOff=false},destroy:function(){this.handles.remove();this.range.remove();this.element.removeClass("ui-slider ui-slider-horizontal ui-slider-vertical ui-slider-disabled ui-widget ui-widget-content ui-corner-all").removeData("slider").unbind(".slider");
this._mouseDestroy();return this},_mouseCapture:function(a){var b=this.options,c,e,f,h,g;if(b.disabled)return false;this.elementSize={width:this.element.outerWidth(),height:this.element.outerHeight()};this.elementOffset=this.element.offset();c=this._normValueFromMouse({x:a.pageX,y:a.pageY});e=this._valueMax()-this._valueMin()+1;h=this;this.handles.each(function(i){var j=Math.abs(c-h.values(i));if(e>j){e=j;f=d(this);g=i}});if(b.range===true&&this.values(1)===b.min){g+=1;f=d(this.handles[g])}if(this._start(a,
g)===false)return false;this._mouseSliding=true;h._handleIndex=g;f.addClass("ui-state-active").focus();b=f.offset();this._clickOffset=!d(a.target).parents().andSelf().is(".ui-slider-handle")?{left:0,top:0}:{left:a.pageX-b.left-f.width()/2,top:a.pageY-b.top-f.height()/2-(parseInt(f.css("borderTopWidth"),10)||0)-(parseInt(f.css("borderBottomWidth"),10)||0)+(parseInt(f.css("marginTop"),10)||0)};this._slide(a,g,c);return this._animateOff=true},_mouseStart:function(){return true},_mouseDrag:function(a){var b=
this._normValueFromMouse({x:a.pageX,y:a.pageY});this._slide(a,this._handleIndex,b);return false},_mouseStop:function(a){this.handles.removeClass("ui-state-active");this._mouseSliding=false;this._stop(a,this._handleIndex);this._change(a,this._handleIndex);this._clickOffset=this._handleIndex=null;return this._animateOff=false},_detectOrientation:function(){this.orientation=this.options.orientation==="vertical"?"vertical":"horizontal"},_normValueFromMouse:function(a){var b;if(this.orientation==="horizontal"){b=
this.elementSize.width;a=a.x-this.elementOffset.left-(this._clickOffset?this._clickOffset.left:0)}else{b=this.elementSize.height;a=a.y-this.elementOffset.top-(this._clickOffset?this._clickOffset.top:0)}b=a/b;if(b>1)b=1;if(b<0)b=0;if(this.orientation==="vertical")b=1-b;a=this._valueMax()-this._valueMin();return this._trimAlignValue(this._valueMin()+b*a)},_start:function(a,b){var c={handle:this.handles[b],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(b);
c.values=this.values()}return this._trigger("start",a,c)},_slide:function(a,b,c){var e;if(this.options.values&&this.options.values.length){e=this.values(b?0:1);if(this.options.values.length===2&&this.options.range===true&&(b===0&&c>e||b===1&&c<e))c=e;if(c!==this.values(b)){e=this.values();e[b]=c;a=this._trigger("slide",a,{handle:this.handles[b],value:c,values:e});this.values(b?0:1);a!==false&&this.values(b,c,true)}}else if(c!==this.value()){a=this._trigger("slide",a,{handle:this.handles[b],value:c});
a!==false&&this.value(c)}},_stop:function(a,b){var c={handle:this.handles[b],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(b);c.values=this.values()}this._trigger("stop",a,c)},_change:function(a,b){if(!this._keySliding&&!this._mouseSliding){var c={handle:this.handles[b],value:this.value()};if(this.options.values&&this.options.values.length){c.value=this.values(b);c.values=this.values()}this._trigger("change",a,c)}},value:function(a){if(arguments.length){this.options.value=
this._trimAlignValue(a);this._refreshValue();this._change(null,0)}return this._value()},values:function(a,b){var c,e,f;if(arguments.length>1){this.options.values[a]=this._trimAlignValue(b);this._refreshValue();this._change(null,a)}if(arguments.length)if(d.isArray(arguments[0])){c=this.options.values;e=arguments[0];for(f=0;f<c.length;f+=1){c[f]=this._trimAlignValue(e[f]);this._change(null,f)}this._refreshValue()}else return this.options.values&&this.options.values.length?this._values(a):this.value();
else return this._values()},_setOption:function(a,b){var c,e=0;if(d.isArray(this.options.values))e=this.options.values.length;d.Widget.prototype._setOption.apply(this,arguments);switch(a){case "disabled":if(b){this.handles.filter(".ui-state-focus").blur();this.handles.removeClass("ui-state-hover");this.handles.attr("disabled","disabled");this.element.addClass("ui-disabled")}else{this.handles.removeAttr("disabled");this.element.removeClass("ui-disabled")}break;case "orientation":this._detectOrientation();
this.element.removeClass("ui-slider-horizontal ui-slider-vertical").addClass("ui-slider-"+this.orientation);this._refreshValue();break;case "value":this._animateOff=true;this._refreshValue();this._change(null,0);this._animateOff=false;break;case "values":this._animateOff=true;this._refreshValue();for(c=0;c<e;c+=1)this._change(null,c);this._animateOff=false;break}},_value:function(){var a=this.options.value;return a=this._trimAlignValue(a)},_values:function(a){var b,c;if(arguments.length){b=this.options.values[a];
return b=this._trimAlignValue(b)}else{b=this.options.values.slice();for(c=0;c<b.length;c+=1)b[c]=this._trimAlignValue(b[c]);return b}},_trimAlignValue:function(a){if(a<this._valueMin())return this._valueMin();if(a>this._valueMax())return this._valueMax();var b=this.options.step>0?this.options.step:1,c=a%b;a=a-c;if(Math.abs(c)*2>=b)a+=c>0?b:-b;return parseFloat(a.toFixed(5))},_valueMin:function(){return this.options.min},_valueMax:function(){return this.options.max},_refreshValue:function(){var a=
this.options.range,b=this.options,c=this,e=!this._animateOff?b.animate:false,f,h={},g,i,j,l;if(this.options.values&&this.options.values.length)this.handles.each(function(k){f=(c.values(k)-c._valueMin())/(c._valueMax()-c._valueMin())*100;h[c.orientation==="horizontal"?"left":"bottom"]=f+"%";d(this).stop(1,1)[e?"animate":"css"](h,b.animate);if(c.options.range===true)if(c.orientation==="horizontal"){if(k===0)c.range.stop(1,1)[e?"animate":"css"]({left:f+"%"},b.animate);if(k===1)c.range[e?"animate":"css"]({width:f-
g+"%"},{queue:false,duration:b.animate})}else{if(k===0)c.range.stop(1,1)[e?"animate":"css"]({bottom:f+"%"},b.animate);if(k===1)c.range[e?"animate":"css"]({height:f-g+"%"},{queue:false,duration:b.animate})}g=f});else{i=this.value();j=this._valueMin();l=this._valueMax();f=l!==j?(i-j)/(l-j)*100:0;h[c.orientation==="horizontal"?"left":"bottom"]=f+"%";this.handle.stop(1,1)[e?"animate":"css"](h,b.animate);if(a==="min"&&this.orientation==="horizontal")this.range.stop(1,1)[e?"animate":"css"]({width:f+"%"},
b.animate);if(a==="max"&&this.orientation==="horizontal")this.range[e?"animate":"css"]({width:100-f+"%"},{queue:false,duration:b.animate});if(a==="min"&&this.orientation==="vertical")this.range.stop(1,1)[e?"animate":"css"]({height:f+"%"},b.animate);if(a==="max"&&this.orientation==="vertical")this.range[e?"animate":"css"]({height:100-f+"%"},{queue:false,duration:b.animate})}}});d.extend(d.ui.slider,{version:"1.8.6"})})(jQuery);
;/*
* jQuery UI Tabs 1.8.6
*
* Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Tabs
*
* Depends:
* jquery.ui.core.js
* jquery.ui.widget.js
*/
(function(d,p){function u(){return++v}function w(){return++x}var v=0,x=0;d.widget("ui.tabs",{options:{add:null,ajaxOptions:null,cache:false,cookie:null,collapsible:false,disable:null,disabled:[],enable:null,event:"click",fx:null,idPrefix:"ui-tabs-",load:null,panelTemplate:"<div></div>",remove:null,select:null,show:null,spinner:"<em>Loading&#8230;</em>",tabTemplate:"<li><a href='#{href}'><span>#{label}</span></a></li>"},_create:function(){this._tabify(true)},_setOption:function(b,e){if(b=="selected")this.options.collapsible&&
e==this.options.selected||this.select(e);else{this.options[b]=e;this._tabify()}},_tabId:function(b){return b.title&&b.title.replace(/\s/g,"_").replace(/[^\w\u00c0-\uFFFF-]/g,"")||this.options.idPrefix+u()},_sanitizeSelector:function(b){return b.replace(/:/g,"\\:")},_cookie:function(){var b=this.cookie||(this.cookie=this.options.cookie.name||"ui-tabs-"+w());return d.cookie.apply(null,[b].concat(d.makeArray(arguments)))},_ui:function(b,e){return{tab:b,panel:e,index:this.anchors.index(b)}},_cleanup:function(){this.lis.filter(".ui-state-processing").removeClass("ui-state-processing").find("span:data(label.tabs)").each(function(){var b=
d(this);b.html(b.data("label.tabs")).removeData("label.tabs")})},_tabify:function(b){function e(g,f){g.css("display","");!d.support.opacity&&f.opacity&&g[0].style.removeAttribute("filter")}var a=this,c=this.options,h=/^#.+/;this.list=this.element.find("ol,ul").eq(0);this.lis=d(" > li:has(a[href])",this.list);this.anchors=this.lis.map(function(){return d("a",this)[0]});this.panels=d([]);this.anchors.each(function(g,f){var i=d(f).attr("href"),l=i.split("#")[0],q;if(l&&(l===location.toString().split("#")[0]||
(q=d("base")[0])&&l===q.href)){i=f.hash;f.href=i}if(h.test(i))a.panels=a.panels.add(a._sanitizeSelector(i));else if(i&&i!=="#"){d.data(f,"href.tabs",i);d.data(f,"load.tabs",i.replace(/#.*$/,""));i=a._tabId(f);f.href="#"+i;f=d("#"+i);if(!f.length){f=d(c.panelTemplate).attr("id",i).addClass("ui-tabs-panel ui-widget-content ui-corner-bottom").insertAfter(a.panels[g-1]||a.list);f.data("destroy.tabs",true)}a.panels=a.panels.add(f)}else c.disabled.push(g)});if(b){this.element.addClass("ui-tabs ui-widget ui-widget-content ui-corner-all");
this.list.addClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.lis.addClass("ui-state-default ui-corner-top");this.panels.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom");if(c.selected===p){location.hash&&this.anchors.each(function(g,f){if(f.hash==location.hash){c.selected=g;return false}});if(typeof c.selected!=="number"&&c.cookie)c.selected=parseInt(a._cookie(),10);if(typeof c.selected!=="number"&&this.lis.filter(".ui-tabs-selected").length)c.selected=
this.lis.index(this.lis.filter(".ui-tabs-selected"));c.selected=c.selected||(this.lis.length?0:-1)}else if(c.selected===null)c.selected=-1;c.selected=c.selected>=0&&this.anchors[c.selected]||c.selected<0?c.selected:0;c.disabled=d.unique(c.disabled.concat(d.map(this.lis.filter(".ui-state-disabled"),function(g){return a.lis.index(g)}))).sort();d.inArray(c.selected,c.disabled)!=-1&&c.disabled.splice(d.inArray(c.selected,c.disabled),1);this.panels.addClass("ui-tabs-hide");this.lis.removeClass("ui-tabs-selected ui-state-active");
if(c.selected>=0&&this.anchors.length){d(a._sanitizeSelector(a.anchors[c.selected].hash)).removeClass("ui-tabs-hide");this.lis.eq(c.selected).addClass("ui-tabs-selected ui-state-active");a.element.queue("tabs",function(){a._trigger("show",null,a._ui(a.anchors[c.selected],d(a._sanitizeSelector(a.anchors[c.selected].hash))))});this.load(c.selected)}d(window).bind("unload",function(){a.lis.add(a.anchors).unbind(".tabs");a.lis=a.anchors=a.panels=null})}else c.selected=this.lis.index(this.lis.filter(".ui-tabs-selected"));
this.element[c.collapsible?"addClass":"removeClass"]("ui-tabs-collapsible");c.cookie&&this._cookie(c.selected,c.cookie);b=0;for(var j;j=this.lis[b];b++)d(j)[d.inArray(b,c.disabled)!=-1&&!d(j).hasClass("ui-tabs-selected")?"addClass":"removeClass"]("ui-state-disabled");c.cache===false&&this.anchors.removeData("cache.tabs");this.lis.add(this.anchors).unbind(".tabs");if(c.event!=="mouseover"){var k=function(g,f){f.is(":not(.ui-state-disabled)")&&f.addClass("ui-state-"+g)},n=function(g,f){f.removeClass("ui-state-"+
g)};this.lis.bind("mouseover.tabs",function(){k("hover",d(this))});this.lis.bind("mouseout.tabs",function(){n("hover",d(this))});this.anchors.bind("focus.tabs",function(){k("focus",d(this).closest("li"))});this.anchors.bind("blur.tabs",function(){n("focus",d(this).closest("li"))})}var m,o;if(c.fx)if(d.isArray(c.fx)){m=c.fx[0];o=c.fx[1]}else m=o=c.fx;var r=o?function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.hide().removeClass("ui-tabs-hide").animate(o,o.duration||"normal",
function(){e(f,o);a._trigger("show",null,a._ui(g,f[0]))})}:function(g,f){d(g).closest("li").addClass("ui-tabs-selected ui-state-active");f.removeClass("ui-tabs-hide");a._trigger("show",null,a._ui(g,f[0]))},s=m?function(g,f){f.animate(m,m.duration||"normal",function(){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");e(f,m);a.element.dequeue("tabs")})}:function(g,f){a.lis.removeClass("ui-tabs-selected ui-state-active");f.addClass("ui-tabs-hide");a.element.dequeue("tabs")};
this.anchors.bind(c.event+".tabs",function(){var g=this,f=d(g).closest("li"),i=a.panels.filter(":not(.ui-tabs-hide)"),l=d(a._sanitizeSelector(g.hash));if(f.hasClass("ui-tabs-selected")&&!c.collapsible||f.hasClass("ui-state-disabled")||f.hasClass("ui-state-processing")||a.panels.filter(":animated").length||a._trigger("select",null,a._ui(this,l[0]))===false){this.blur();return false}c.selected=a.anchors.index(this);a.abort();if(c.collapsible)if(f.hasClass("ui-tabs-selected")){c.selected=-1;c.cookie&&
a._cookie(c.selected,c.cookie);a.element.queue("tabs",function(){s(g,i)}).dequeue("tabs");this.blur();return false}else if(!i.length){c.cookie&&a._cookie(c.selected,c.cookie);a.element.queue("tabs",function(){r(g,l)});a.load(a.anchors.index(this));this.blur();return false}c.cookie&&a._cookie(c.selected,c.cookie);if(l.length){i.length&&a.element.queue("tabs",function(){s(g,i)});a.element.queue("tabs",function(){r(g,l)});a.load(a.anchors.index(this))}else throw"jQuery UI Tabs: Mismatching fragment identifier.";
d.browser.msie&&this.blur()});this.anchors.bind("click.tabs",function(){return false})},_getIndex:function(b){if(typeof b=="string")b=this.anchors.index(this.anchors.filter("[href$="+b+"]"));return b},destroy:function(){var b=this.options;this.abort();this.element.unbind(".tabs").removeClass("ui-tabs ui-widget ui-widget-content ui-corner-all ui-tabs-collapsible").removeData("tabs");this.list.removeClass("ui-tabs-nav ui-helper-reset ui-helper-clearfix ui-widget-header ui-corner-all");this.anchors.each(function(){var e=
d.data(this,"href.tabs");if(e)this.href=e;var a=d(this).unbind(".tabs");d.each(["href","load","cache"],function(c,h){a.removeData(h+".tabs")})});this.lis.unbind(".tabs").add(this.panels).each(function(){d.data(this,"destroy.tabs")?d(this).remove():d(this).removeClass("ui-state-default ui-corner-top ui-tabs-selected ui-state-active ui-state-hover ui-state-focus ui-state-disabled ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide")});b.cookie&&this._cookie(null,b.cookie);return this},add:function(b,
e,a){if(a===p)a=this.anchors.length;var c=this,h=this.options;e=d(h.tabTemplate.replace(/#\{href\}/g,b).replace(/#\{label\}/g,e));b=!b.indexOf("#")?b.replace("#",""):this._tabId(d("a",e)[0]);e.addClass("ui-state-default ui-corner-top").data("destroy.tabs",true);var j=d("#"+b);j.length||(j=d(h.panelTemplate).attr("id",b).data("destroy.tabs",true));j.addClass("ui-tabs-panel ui-widget-content ui-corner-bottom ui-tabs-hide");if(a>=this.lis.length){e.appendTo(this.list);j.appendTo(this.list[0].parentNode)}else{e.insertBefore(this.lis[a]);
j.insertBefore(this.panels[a])}h.disabled=d.map(h.disabled,function(k){return k>=a?++k:k});this._tabify();if(this.anchors.length==1){h.selected=0;e.addClass("ui-tabs-selected ui-state-active");j.removeClass("ui-tabs-hide");this.element.queue("tabs",function(){c._trigger("show",null,c._ui(c.anchors[0],c.panels[0]))});this.load(0)}this._trigger("add",null,this._ui(this.anchors[a],this.panels[a]));return this},remove:function(b){b=this._getIndex(b);var e=this.options,a=this.lis.eq(b).remove(),c=this.panels.eq(b).remove();
if(a.hasClass("ui-tabs-selected")&&this.anchors.length>1)this.select(b+(b+1<this.anchors.length?1:-1));e.disabled=d.map(d.grep(e.disabled,function(h){return h!=b}),function(h){return h>=b?--h:h});this._tabify();this._trigger("remove",null,this._ui(a.find("a")[0],c[0]));return this},enable:function(b){b=this._getIndex(b);var e=this.options;if(d.inArray(b,e.disabled)!=-1){this.lis.eq(b).removeClass("ui-state-disabled");e.disabled=d.grep(e.disabled,function(a){return a!=b});this._trigger("enable",null,
this._ui(this.anchors[b],this.panels[b]));return this}},disable:function(b){b=this._getIndex(b);var e=this.options;if(b!=e.selected){this.lis.eq(b).addClass("ui-state-disabled");e.disabled.push(b);e.disabled.sort();this._trigger("disable",null,this._ui(this.anchors[b],this.panels[b]))}return this},select:function(b){b=this._getIndex(b);if(b==-1)if(this.options.collapsible&&this.options.selected!=-1)b=this.options.selected;else return this;this.anchors.eq(b).trigger(this.options.event+".tabs");return this},
load:function(b){b=this._getIndex(b);var e=this,a=this.options,c=this.anchors.eq(b)[0],h=d.data(c,"load.tabs");this.abort();if(!h||this.element.queue("tabs").length!==0&&d.data(c,"cache.tabs"))this.element.dequeue("tabs");else{this.lis.eq(b).addClass("ui-state-processing");if(a.spinner){var j=d("span",c);j.data("label.tabs",j.html()).html(a.spinner)}this.xhr=d.ajax(d.extend({},a.ajaxOptions,{url:h,success:function(k,n){d(e._sanitizeSelector(c.hash)).html(k);e._cleanup();a.cache&&d.data(c,"cache.tabs",
true);e._trigger("load",null,e._ui(e.anchors[b],e.panels[b]));try{a.ajaxOptions.success(k,n)}catch(m){}},error:function(k,n){e._cleanup();e._trigger("load",null,e._ui(e.anchors[b],e.panels[b]));try{a.ajaxOptions.error(k,n,b,c)}catch(m){}}}));e.element.dequeue("tabs");return this}},abort:function(){this.element.queue([]);this.panels.stop(false,true);this.element.queue("tabs",this.element.queue("tabs").splice(-2,2));if(this.xhr){this.xhr.abort();delete this.xhr}this._cleanup();return this},url:function(b,
e){this.anchors.eq(b).removeData("cache.tabs").data("load.tabs",e);return this},length:function(){return this.anchors.length}});d.extend(d.ui.tabs,{version:"1.8.6"});d.extend(d.ui.tabs.prototype,{rotation:null,rotate:function(b,e){var a=this,c=this.options,h=a._rotate||(a._rotate=function(j){clearTimeout(a.rotation);a.rotation=setTimeout(function(){var k=c.selected;a.select(++k<a.anchors.length?k:0)},b);j&&j.stopPropagation()});e=a._unrotate||(a._unrotate=!e?function(j){j.clientX&&a.rotate(null)}:
function(){t=c.selected;h()});if(b){this.element.bind("tabsshow",h);this.anchors.bind(c.event+".tabs",e);h()}else{clearTimeout(a.rotation);this.element.unbind("tabsshow",h);this.anchors.unbind(c.event+".tabs",e);delete this._rotate;delete this._unrotate}return this}})})(jQuery);
;/*
* jQuery UI Datepicker 1.8.6
*
* Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Datepicker
*
* Depends:
* jquery.ui.core.js
*/
(function(d,G){function K(){this.debug=false;this._curInst=null;this._keyEvent=false;this._disabledInputs=[];this._inDialog=this._datepickerShowing=false;this._mainDivId="ui-datepicker-div";this._inlineClass="ui-datepicker-inline";this._appendClass="ui-datepicker-append";this._triggerClass="ui-datepicker-trigger";this._dialogClass="ui-datepicker-dialog";this._disableClass="ui-datepicker-disabled";this._unselectableClass="ui-datepicker-unselectable";this._currentClass="ui-datepicker-current-day";this._dayOverClass=
"ui-datepicker-days-cell-over";this.regional=[];this.regional[""]={closeText:"Done",prevText:"Prev",nextText:"Next",currentText:"Today",monthNames:["January","February","March","April","May","June","July","August","September","October","November","December"],monthNamesShort:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],dayNames:["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"],dayNamesShort:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],dayNamesMin:["Su",
"Mo","Tu","We","Th","Fr","Sa"],weekHeader:"Wk",dateFormat:"mm/dd/yy",firstDay:0,isRTL:false,showMonthAfterYear:false,yearSuffix:""};this._defaults={showOn:"focus",showAnim:"fadeIn",showOptions:{},defaultDate:null,appendText:"",buttonText:"...",buttonImage:"",buttonImageOnly:false,hideIfNoPrevNext:false,navigationAsDateFormat:false,gotoCurrent:false,changeMonth:false,changeYear:false,yearRange:"c-10:c+10",showOtherMonths:false,selectOtherMonths:false,showWeek:false,calculateWeek:this.iso8601Week,shortYearCutoff:"+10",
minDate:null,maxDate:null,duration:"fast",beforeShowDay:null,beforeShow:null,onSelect:null,onChangeMonthYear:null,onClose:null,numberOfMonths:1,showCurrentAtPos:0,stepMonths:1,stepBigMonths:12,altField:"",altFormat:"",constrainInput:true,showButtonPanel:false,autoSize:false};d.extend(this._defaults,this.regional[""]);this.dpDiv=d('<div id="'+this._mainDivId+'" class="ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all ui-helper-hidden-accessible"></div>')}function E(a,b){d.extend(a,
b);for(var c in b)if(b[c]==null||b[c]==G)a[c]=b[c];return a}d.extend(d.ui,{datepicker:{version:"1.8.6"}});var y=(new Date).getTime();d.extend(K.prototype,{markerClassName:"hasDatepicker",log:function(){this.debug&&console.log.apply("",arguments)},_widgetDatepicker:function(){return this.dpDiv},setDefaults:function(a){E(this._defaults,a||{});return this},_attachDatepicker:function(a,b){var c=null;for(var e in this._defaults){var f=a.getAttribute("date:"+e);if(f){c=c||{};try{c[e]=eval(f)}catch(h){c[e]=
f}}}e=a.nodeName.toLowerCase();f=e=="div"||e=="span";if(!a.id){this.uuid+=1;a.id="dp"+this.uuid}var i=this._newInst(d(a),f);i.settings=d.extend({},b||{},c||{});if(e=="input")this._connectDatepicker(a,i);else f&&this._inlineDatepicker(a,i)},_newInst:function(a,b){return{id:a[0].id.replace(/([^A-Za-z0-9_-])/g,"\\\\$1"),input:a,selectedDay:0,selectedMonth:0,selectedYear:0,drawMonth:0,drawYear:0,inline:b,dpDiv:!b?this.dpDiv:d('<div class="'+this._inlineClass+' ui-datepicker ui-widget ui-widget-content ui-helper-clearfix ui-corner-all"></div>')}},
_connectDatepicker:function(a,b){var c=d(a);b.append=d([]);b.trigger=d([]);if(!c.hasClass(this.markerClassName)){this._attachments(c,b);c.addClass(this.markerClassName).keydown(this._doKeyDown).keypress(this._doKeyPress).keyup(this._doKeyUp).bind("setData.datepicker",function(e,f,h){b.settings[f]=h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});this._autoSize(b);d.data(a,"datepicker",b)}},_attachments:function(a,b){var c=this._get(b,"appendText"),e=this._get(b,"isRTL");b.append&&
b.append.remove();if(c){b.append=d('<span class="'+this._appendClass+'">'+c+"</span>");a[e?"before":"after"](b.append)}a.unbind("focus",this._showDatepicker);b.trigger&&b.trigger.remove();c=this._get(b,"showOn");if(c=="focus"||c=="both")a.focus(this._showDatepicker);if(c=="button"||c=="both"){c=this._get(b,"buttonText");var f=this._get(b,"buttonImage");b.trigger=d(this._get(b,"buttonImageOnly")?d("<img/>").addClass(this._triggerClass).attr({src:f,alt:c,title:c}):d('<button type="button"></button>').addClass(this._triggerClass).html(f==
""?c:d("<img/>").attr({src:f,alt:c,title:c})));a[e?"before":"after"](b.trigger);b.trigger.click(function(){d.datepicker._datepickerShowing&&d.datepicker._lastInput==a[0]?d.datepicker._hideDatepicker():d.datepicker._showDatepicker(a[0]);return false})}},_autoSize:function(a){if(this._get(a,"autoSize")&&!a.inline){var b=new Date(2009,11,20),c=this._get(a,"dateFormat");if(c.match(/[DM]/)){var e=function(f){for(var h=0,i=0,g=0;g<f.length;g++)if(f[g].length>h){h=f[g].length;i=g}return i};b.setMonth(e(this._get(a,
c.match(/MM/)?"monthNames":"monthNamesShort")));b.setDate(e(this._get(a,c.match(/DD/)?"dayNames":"dayNamesShort"))+20-b.getDay())}a.input.attr("size",this._formatDate(a,b).length)}},_inlineDatepicker:function(a,b){var c=d(a);if(!c.hasClass(this.markerClassName)){c.addClass(this.markerClassName).append(b.dpDiv).bind("setData.datepicker",function(e,f,h){b.settings[f]=h}).bind("getData.datepicker",function(e,f){return this._get(b,f)});d.data(a,"datepicker",b);this._setDate(b,this._getDefaultDate(b),
true);this._updateDatepicker(b);this._updateAlternate(b)}},_dialogDatepicker:function(a,b,c,e,f){a=this._dialogInst;if(!a){this.uuid+=1;this._dialogInput=d('<input type="text" id="'+("dp"+this.uuid)+'" style="position: absolute; top: -100px; width: 0px; z-index: -10;"/>');this._dialogInput.keydown(this._doKeyDown);d("body").append(this._dialogInput);a=this._dialogInst=this._newInst(this._dialogInput,false);a.settings={};d.data(this._dialogInput[0],"datepicker",a)}E(a.settings,e||{});b=b&&b.constructor==
Date?this._formatDate(a,b):b;this._dialogInput.val(b);this._pos=f?f.length?f:[f.pageX,f.pageY]:null;if(!this._pos)this._pos=[document.documentElement.clientWidth/2-100+(document.documentElement.scrollLeft||document.body.scrollLeft),document.documentElement.clientHeight/2-150+(document.documentElement.scrollTop||document.body.scrollTop)];this._dialogInput.css("left",this._pos[0]+20+"px").css("top",this._pos[1]+"px");a.settings.onSelect=c;this._inDialog=true;this.dpDiv.addClass(this._dialogClass);this._showDatepicker(this._dialogInput[0]);
d.blockUI&&d.blockUI(this.dpDiv);d.data(this._dialogInput[0],"datepicker",a);return this},_destroyDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();d.removeData(a,"datepicker");if(e=="input"){c.append.remove();c.trigger.remove();b.removeClass(this.markerClassName).unbind("focus",this._showDatepicker).unbind("keydown",this._doKeyDown).unbind("keypress",this._doKeyPress).unbind("keyup",this._doKeyUp)}else if(e=="div"||e=="span")b.removeClass(this.markerClassName).empty()}},
_enableDatepicker:function(a){var b=d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();if(e=="input"){a.disabled=false;c.trigger.filter("button").each(function(){this.disabled=false}).end().filter("img").css({opacity:"1.0",cursor:""})}else if(e=="div"||e=="span")b.children("."+this._inlineClass).children().removeClass("ui-state-disabled");this._disabledInputs=d.map(this._disabledInputs,function(f){return f==a?null:f})}},_disableDatepicker:function(a){var b=
d(a),c=d.data(a,"datepicker");if(b.hasClass(this.markerClassName)){var e=a.nodeName.toLowerCase();if(e=="input"){a.disabled=true;c.trigger.filter("button").each(function(){this.disabled=true}).end().filter("img").css({opacity:"0.5",cursor:"default"})}else if(e=="div"||e=="span")b.children("."+this._inlineClass).children().addClass("ui-state-disabled");this._disabledInputs=d.map(this._disabledInputs,function(f){return f==a?null:f});this._disabledInputs[this._disabledInputs.length]=a}},_isDisabledDatepicker:function(a){if(!a)return false;
for(var b=0;b<this._disabledInputs.length;b++)if(this._disabledInputs[b]==a)return true;return false},_getInst:function(a){try{return d.data(a,"datepicker")}catch(b){throw"Missing instance data for this datepicker";}},_optionDatepicker:function(a,b,c){var e=this._getInst(a);if(arguments.length==2&&typeof b=="string")return b=="defaults"?d.extend({},d.datepicker._defaults):e?b=="all"?d.extend({},e.settings):this._get(e,b):null;var f=b||{};if(typeof b=="string"){f={};f[b]=c}if(e){this._curInst==e&&
this._hideDatepicker();var h=this._getDateDatepicker(a,true);E(e.settings,f);this._attachments(d(a),e);this._autoSize(e);this._setDateDatepicker(a,h);this._updateDatepicker(e)}},_changeDatepicker:function(a,b,c){this._optionDatepicker(a,b,c)},_refreshDatepicker:function(a){(a=this._getInst(a))&&this._updateDatepicker(a)},_setDateDatepicker:function(a,b){if(a=this._getInst(a)){this._setDate(a,b);this._updateDatepicker(a);this._updateAlternate(a)}},_getDateDatepicker:function(a,b){(a=this._getInst(a))&&
!a.inline&&this._setDateFromField(a,b);return a?this._getDate(a):null},_doKeyDown:function(a){var b=d.datepicker._getInst(a.target),c=true,e=b.dpDiv.is(".ui-datepicker-rtl");b._keyEvent=true;if(d.datepicker._datepickerShowing)switch(a.keyCode){case 9:d.datepicker._hideDatepicker();c=false;break;case 13:c=d("td."+d.datepicker._dayOverClass,b.dpDiv).add(d("td."+d.datepicker._currentClass,b.dpDiv));c[0]?d.datepicker._selectDay(a.target,b.selectedMonth,b.selectedYear,c[0]):d.datepicker._hideDatepicker();
return false;case 27:d.datepicker._hideDatepicker();break;case 33:d.datepicker._adjustDate(a.target,a.ctrlKey?-d.datepicker._get(b,"stepBigMonths"):-d.datepicker._get(b,"stepMonths"),"M");break;case 34:d.datepicker._adjustDate(a.target,a.ctrlKey?+d.datepicker._get(b,"stepBigMonths"):+d.datepicker._get(b,"stepMonths"),"M");break;case 35:if(a.ctrlKey||a.metaKey)d.datepicker._clearDate(a.target);c=a.ctrlKey||a.metaKey;break;case 36:if(a.ctrlKey||a.metaKey)d.datepicker._gotoToday(a.target);c=a.ctrlKey||
a.metaKey;break;case 37:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,e?+1:-1,"D");c=a.ctrlKey||a.metaKey;if(a.originalEvent.altKey)d.datepicker._adjustDate(a.target,a.ctrlKey?-d.datepicker._get(b,"stepBigMonths"):-d.datepicker._get(b,"stepMonths"),"M");break;case 38:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,-7,"D");c=a.ctrlKey||a.metaKey;break;case 39:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,e?-1:+1,"D");c=a.ctrlKey||a.metaKey;if(a.originalEvent.altKey)d.datepicker._adjustDate(a.target,
a.ctrlKey?+d.datepicker._get(b,"stepBigMonths"):+d.datepicker._get(b,"stepMonths"),"M");break;case 40:if(a.ctrlKey||a.metaKey)d.datepicker._adjustDate(a.target,+7,"D");c=a.ctrlKey||a.metaKey;break;default:c=false}else if(a.keyCode==36&&a.ctrlKey)d.datepicker._showDatepicker(this);else c=false;if(c){a.preventDefault();a.stopPropagation()}},_doKeyPress:function(a){var b=d.datepicker._getInst(a.target);if(d.datepicker._get(b,"constrainInput")){b=d.datepicker._possibleChars(d.datepicker._get(b,"dateFormat"));
var c=String.fromCharCode(a.charCode==G?a.keyCode:a.charCode);return a.ctrlKey||c<" "||!b||b.indexOf(c)>-1}},_doKeyUp:function(a){a=d.datepicker._getInst(a.target);if(a.input.val()!=a.lastVal)try{if(d.datepicker.parseDate(d.datepicker._get(a,"dateFormat"),a.input?a.input.val():null,d.datepicker._getFormatConfig(a))){d.datepicker._setDateFromField(a);d.datepicker._updateAlternate(a);d.datepicker._updateDatepicker(a)}}catch(b){d.datepicker.log(b)}return true},_showDatepicker:function(a){a=a.target||
a;if(a.nodeName.toLowerCase()!="input")a=d("input",a.parentNode)[0];if(!(d.datepicker._isDisabledDatepicker(a)||d.datepicker._lastInput==a)){var b=d.datepicker._getInst(a);d.datepicker._curInst&&d.datepicker._curInst!=b&&d.datepicker._curInst.dpDiv.stop(true,true);var c=d.datepicker._get(b,"beforeShow");E(b.settings,c?c.apply(a,[a,b]):{});b.lastVal=null;d.datepicker._lastInput=a;d.datepicker._setDateFromField(b);if(d.datepicker._inDialog)a.value="";if(!d.datepicker._pos){d.datepicker._pos=d.datepicker._findPos(a);
d.datepicker._pos[1]+=a.offsetHeight}var e=false;d(a).parents().each(function(){e|=d(this).css("position")=="fixed";return!e});if(e&&d.browser.opera){d.datepicker._pos[0]-=document.documentElement.scrollLeft;d.datepicker._pos[1]-=document.documentElement.scrollTop}c={left:d.datepicker._pos[0],top:d.datepicker._pos[1]};d.datepicker._pos=null;b.dpDiv.css({position:"absolute",display:"block",top:"-1000px"});d.datepicker._updateDatepicker(b);c=d.datepicker._checkOffset(b,c,e);b.dpDiv.css({position:d.datepicker._inDialog&&
d.blockUI?"static":e?"fixed":"absolute",display:"none",left:c.left+"px",top:c.top+"px"});if(!b.inline){c=d.datepicker._get(b,"showAnim");var f=d.datepicker._get(b,"duration"),h=function(){d.datepicker._datepickerShowing=true;var i=d.datepicker._getBorders(b.dpDiv);b.dpDiv.find("iframe.ui-datepicker-cover").css({left:-i[0],top:-i[1],width:b.dpDiv.outerWidth(),height:b.dpDiv.outerHeight()})};b.dpDiv.zIndex(d(a).zIndex()+1);d.effects&&d.effects[c]?b.dpDiv.show(c,d.datepicker._get(b,"showOptions"),f,
h):b.dpDiv[c||"show"](c?f:null,h);if(!c||!f)h();b.input.is(":visible")&&!b.input.is(":disabled")&&b.input.focus();d.datepicker._curInst=b}}},_updateDatepicker:function(a){var b=this,c=d.datepicker._getBorders(a.dpDiv);a.dpDiv.empty().append(this._generateHTML(a)).find("iframe.ui-datepicker-cover").css({left:-c[0],top:-c[1],width:a.dpDiv.outerWidth(),height:a.dpDiv.outerHeight()}).end().find("button, .ui-datepicker-prev, .ui-datepicker-next, .ui-datepicker-calendar td a").bind("mouseout",function(){d(this).removeClass("ui-state-hover");
this.className.indexOf("ui-datepicker-prev")!=-1&&d(this).removeClass("ui-datepicker-prev-hover");this.className.indexOf("ui-datepicker-next")!=-1&&d(this).removeClass("ui-datepicker-next-hover")}).bind("mouseover",function(){if(!b._isDisabledDatepicker(a.inline?a.dpDiv.parent()[0]:a.input[0])){d(this).parents(".ui-datepicker-calendar").find("a").removeClass("ui-state-hover");d(this).addClass("ui-state-hover");this.className.indexOf("ui-datepicker-prev")!=-1&&d(this).addClass("ui-datepicker-prev-hover");
this.className.indexOf("ui-datepicker-next")!=-1&&d(this).addClass("ui-datepicker-next-hover")}}).end().find("."+this._dayOverClass+" a").trigger("mouseover").end();c=this._getNumberOfMonths(a);var e=c[1];e>1?a.dpDiv.addClass("ui-datepicker-multi-"+e).css("width",17*e+"em"):a.dpDiv.removeClass("ui-datepicker-multi-2 ui-datepicker-multi-3 ui-datepicker-multi-4").width("");a.dpDiv[(c[0]!=1||c[1]!=1?"add":"remove")+"Class"]("ui-datepicker-multi");a.dpDiv[(this._get(a,"isRTL")?"add":"remove")+"Class"]("ui-datepicker-rtl");
a==d.datepicker._curInst&&d.datepicker._datepickerShowing&&a.input&&a.input.is(":visible")&&!a.input.is(":disabled")&&a.input.focus()},_getBorders:function(a){var b=function(c){return{thin:1,medium:2,thick:3}[c]||c};return[parseFloat(b(a.css("border-left-width"))),parseFloat(b(a.css("border-top-width")))]},_checkOffset:function(a,b,c){var e=a.dpDiv.outerWidth(),f=a.dpDiv.outerHeight(),h=a.input?a.input.outerWidth():0,i=a.input?a.input.outerHeight():0,g=document.documentElement.clientWidth+d(document).scrollLeft(),
k=document.documentElement.clientHeight+d(document).scrollTop();b.left-=this._get(a,"isRTL")?e-h:0;b.left-=c&&b.left==a.input.offset().left?d(document).scrollLeft():0;b.top-=c&&b.top==a.input.offset().top+i?d(document).scrollTop():0;b.left-=Math.min(b.left,b.left+e>g&&g>e?Math.abs(b.left+e-g):0);b.top-=Math.min(b.top,b.top+f>k&&k>f?Math.abs(f+i):0);return b},_findPos:function(a){for(var b=this._get(this._getInst(a),"isRTL");a&&(a.type=="hidden"||a.nodeType!=1);)a=a[b?"previousSibling":"nextSibling"];
a=d(a).offset();return[a.left,a.top]},_hideDatepicker:function(a){var b=this._curInst;if(!(!b||a&&b!=d.data(a,"datepicker")))if(this._datepickerShowing){a=this._get(b,"showAnim");var c=this._get(b,"duration"),e=function(){d.datepicker._tidyDialog(b);this._curInst=null};d.effects&&d.effects[a]?b.dpDiv.hide(a,d.datepicker._get(b,"showOptions"),c,e):b.dpDiv[a=="slideDown"?"slideUp":a=="fadeIn"?"fadeOut":"hide"](a?c:null,e);a||e();if(a=this._get(b,"onClose"))a.apply(b.input?b.input[0]:null,[b.input?b.input.val():
"",b]);this._datepickerShowing=false;this._lastInput=null;if(this._inDialog){this._dialogInput.css({position:"absolute",left:"0",top:"-100px"});if(d.blockUI){d.unblockUI();d("body").append(this.dpDiv)}}this._inDialog=false}},_tidyDialog:function(a){a.dpDiv.removeClass(this._dialogClass).unbind(".ui-datepicker-calendar")},_checkExternalClick:function(a){if(d.datepicker._curInst){a=d(a.target);a[0].id!=d.datepicker._mainDivId&&a.parents("#"+d.datepicker._mainDivId).length==0&&!a.hasClass(d.datepicker.markerClassName)&&
!a.hasClass(d.datepicker._triggerClass)&&d.datepicker._datepickerShowing&&!(d.datepicker._inDialog&&d.blockUI)&&d.datepicker._hideDatepicker()}},_adjustDate:function(a,b,c){a=d(a);var e=this._getInst(a[0]);if(!this._isDisabledDatepicker(a[0])){this._adjustInstDate(e,b+(c=="M"?this._get(e,"showCurrentAtPos"):0),c);this._updateDatepicker(e)}},_gotoToday:function(a){a=d(a);var b=this._getInst(a[0]);if(this._get(b,"gotoCurrent")&&b.currentDay){b.selectedDay=b.currentDay;b.drawMonth=b.selectedMonth=b.currentMonth;
b.drawYear=b.selectedYear=b.currentYear}else{var c=new Date;b.selectedDay=c.getDate();b.drawMonth=b.selectedMonth=c.getMonth();b.drawYear=b.selectedYear=c.getFullYear()}this._notifyChange(b);this._adjustDate(a)},_selectMonthYear:function(a,b,c){a=d(a);var e=this._getInst(a[0]);e._selectingMonthYear=false;e["selected"+(c=="M"?"Month":"Year")]=e["draw"+(c=="M"?"Month":"Year")]=parseInt(b.options[b.selectedIndex].value,10);this._notifyChange(e);this._adjustDate(a)},_clickMonthYear:function(a){var b=
this._getInst(d(a)[0]);b.input&&b._selectingMonthYear&&setTimeout(function(){b.input.focus()},0);b._selectingMonthYear=!b._selectingMonthYear},_selectDay:function(a,b,c,e){var f=d(a);if(!(d(e).hasClass(this._unselectableClass)||this._isDisabledDatepicker(f[0]))){f=this._getInst(f[0]);f.selectedDay=f.currentDay=d("a",e).html();f.selectedMonth=f.currentMonth=b;f.selectedYear=f.currentYear=c;this._selectDate(a,this._formatDate(f,f.currentDay,f.currentMonth,f.currentYear))}},_clearDate:function(a){a=
d(a);this._getInst(a[0]);this._selectDate(a,"")},_selectDate:function(a,b){a=this._getInst(d(a)[0]);b=b!=null?b:this._formatDate(a);a.input&&a.input.val(b);this._updateAlternate(a);var c=this._get(a,"onSelect");if(c)c.apply(a.input?a.input[0]:null,[b,a]);else a.input&&a.input.trigger("change");if(a.inline)this._updateDatepicker(a);else{this._hideDatepicker();this._lastInput=a.input[0];typeof a.input[0]!="object"&&a.input.focus();this._lastInput=null}},_updateAlternate:function(a){var b=this._get(a,
"altField");if(b){var c=this._get(a,"altFormat")||this._get(a,"dateFormat"),e=this._getDate(a),f=this.formatDate(c,e,this._getFormatConfig(a));d(b).each(function(){d(this).val(f)})}},noWeekends:function(a){a=a.getDay();return[a>0&&a<6,""]},iso8601Week:function(a){a=new Date(a.getTime());a.setDate(a.getDate()+4-(a.getDay()||7));var b=a.getTime();a.setMonth(0);a.setDate(1);return Math.floor(Math.round((b-a)/864E5)/7)+1},parseDate:function(a,b,c){if(a==null||b==null)throw"Invalid arguments";b=typeof b==
"object"?b.toString():b+"";if(b=="")return null;for(var e=(c?c.shortYearCutoff:null)||this._defaults.shortYearCutoff,f=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,h=(c?c.dayNames:null)||this._defaults.dayNames,i=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort,g=(c?c.monthNames:null)||this._defaults.monthNames,k=c=-1,l=-1,u=-1,j=false,o=function(p){(p=z+1<a.length&&a.charAt(z+1)==p)&&z++;return p},m=function(p){o(p);p=new RegExp("^\\d{1,"+(p=="@"?14:p=="!"?20:p=="y"?4:p=="o"?
3:2)+"}");p=b.substring(s).match(p);if(!p)throw"Missing number at position "+s;s+=p[0].length;return parseInt(p[0],10)},n=function(p,w,H){p=o(p)?H:w;for(w=0;w<p.length;w++)if(b.substr(s,p[w].length).toLowerCase()==p[w].toLowerCase()){s+=p[w].length;return w+1}throw"Unknown name at position "+s;},r=function(){if(b.charAt(s)!=a.charAt(z))throw"Unexpected literal at position "+s;s++},s=0,z=0;z<a.length;z++)if(j)if(a.charAt(z)=="'"&&!o("'"))j=false;else r();else switch(a.charAt(z)){case "d":l=m("d");
break;case "D":n("D",f,h);break;case "o":u=m("o");break;case "m":k=m("m");break;case "M":k=n("M",i,g);break;case "y":c=m("y");break;case "@":var v=new Date(m("@"));c=v.getFullYear();k=v.getMonth()+1;l=v.getDate();break;case "!":v=new Date((m("!")-this._ticksTo1970)/1E4);c=v.getFullYear();k=v.getMonth()+1;l=v.getDate();break;case "'":if(o("'"))r();else j=true;break;default:r()}if(c==-1)c=(new Date).getFullYear();else if(c<100)c+=(new Date).getFullYear()-(new Date).getFullYear()%100+(c<=e?0:-100);if(u>
-1){k=1;l=u;do{e=this._getDaysInMonth(c,k-1);if(l<=e)break;k++;l-=e}while(1)}v=this._daylightSavingAdjust(new Date(c,k-1,l));if(v.getFullYear()!=c||v.getMonth()+1!=k||v.getDate()!=l)throw"Invalid date";return v},ATOM:"yy-mm-dd",COOKIE:"D, dd M yy",ISO_8601:"yy-mm-dd",RFC_822:"D, d M y",RFC_850:"DD, dd-M-y",RFC_1036:"D, d M y",RFC_1123:"D, d M yy",RFC_2822:"D, d M yy",RSS:"D, d M y",TICKS:"!",TIMESTAMP:"@",W3C:"yy-mm-dd",_ticksTo1970:(718685+Math.floor(492.5)-Math.floor(19.7)+Math.floor(4.925))*24*
60*60*1E7,formatDate:function(a,b,c){if(!b)return"";var e=(c?c.dayNamesShort:null)||this._defaults.dayNamesShort,f=(c?c.dayNames:null)||this._defaults.dayNames,h=(c?c.monthNamesShort:null)||this._defaults.monthNamesShort;c=(c?c.monthNames:null)||this._defaults.monthNames;var i=function(o){(o=j+1<a.length&&a.charAt(j+1)==o)&&j++;return o},g=function(o,m,n){m=""+m;if(i(o))for(;m.length<n;)m="0"+m;return m},k=function(o,m,n,r){return i(o)?r[m]:n[m]},l="",u=false;if(b)for(var j=0;j<a.length;j++)if(u)if(a.charAt(j)==
"'"&&!i("'"))u=false;else l+=a.charAt(j);else switch(a.charAt(j)){case "d":l+=g("d",b.getDate(),2);break;case "D":l+=k("D",b.getDay(),e,f);break;case "o":l+=g("o",(b.getTime()-(new Date(b.getFullYear(),0,0)).getTime())/864E5,3);break;case "m":l+=g("m",b.getMonth()+1,2);break;case "M":l+=k("M",b.getMonth(),h,c);break;case "y":l+=i("y")?b.getFullYear():(b.getYear()%100<10?"0":"")+b.getYear()%100;break;case "@":l+=b.getTime();break;case "!":l+=b.getTime()*1E4+this._ticksTo1970;break;case "'":if(i("'"))l+=
"'";else u=true;break;default:l+=a.charAt(j)}return l},_possibleChars:function(a){for(var b="",c=false,e=function(h){(h=f+1<a.length&&a.charAt(f+1)==h)&&f++;return h},f=0;f<a.length;f++)if(c)if(a.charAt(f)=="'"&&!e("'"))c=false;else b+=a.charAt(f);else switch(a.charAt(f)){case "d":case "m":case "y":case "@":b+="0123456789";break;case "D":case "M":return null;case "'":if(e("'"))b+="'";else c=true;break;default:b+=a.charAt(f)}return b},_get:function(a,b){return a.settings[b]!==G?a.settings[b]:this._defaults[b]},
_setDateFromField:function(a,b){if(a.input.val()!=a.lastVal){var c=this._get(a,"dateFormat"),e=a.lastVal=a.input?a.input.val():null,f,h;f=h=this._getDefaultDate(a);var i=this._getFormatConfig(a);try{f=this.parseDate(c,e,i)||h}catch(g){this.log(g);e=b?"":e}a.selectedDay=f.getDate();a.drawMonth=a.selectedMonth=f.getMonth();a.drawYear=a.selectedYear=f.getFullYear();a.currentDay=e?f.getDate():0;a.currentMonth=e?f.getMonth():0;a.currentYear=e?f.getFullYear():0;this._adjustInstDate(a)}},_getDefaultDate:function(a){return this._restrictMinMax(a,
this._determineDate(a,this._get(a,"defaultDate"),new Date))},_determineDate:function(a,b,c){var e=function(h){var i=new Date;i.setDate(i.getDate()+h);return i},f=function(h){try{return d.datepicker.parseDate(d.datepicker._get(a,"dateFormat"),h,d.datepicker._getFormatConfig(a))}catch(i){}var g=(h.toLowerCase().match(/^c/)?d.datepicker._getDate(a):null)||new Date,k=g.getFullYear(),l=g.getMonth();g=g.getDate();for(var u=/([+-]?[0-9]+)\s*(d|D|w|W|m|M|y|Y)?/g,j=u.exec(h);j;){switch(j[2]||"d"){case "d":case "D":g+=
parseInt(j[1],10);break;case "w":case "W":g+=parseInt(j[1],10)*7;break;case "m":case "M":l+=parseInt(j[1],10);g=Math.min(g,d.datepicker._getDaysInMonth(k,l));break;case "y":case "Y":k+=parseInt(j[1],10);g=Math.min(g,d.datepicker._getDaysInMonth(k,l));break}j=u.exec(h)}return new Date(k,l,g)};if(b=(b=b==null?c:typeof b=="string"?f(b):typeof b=="number"?isNaN(b)?c:e(b):b)&&b.toString()=="Invalid Date"?c:b){b.setHours(0);b.setMinutes(0);b.setSeconds(0);b.setMilliseconds(0)}return this._daylightSavingAdjust(b)},
_daylightSavingAdjust:function(a){if(!a)return null;a.setHours(a.getHours()>12?a.getHours()+2:0);return a},_setDate:function(a,b,c){var e=!b,f=a.selectedMonth,h=a.selectedYear;b=this._restrictMinMax(a,this._determineDate(a,b,new Date));a.selectedDay=a.currentDay=b.getDate();a.drawMonth=a.selectedMonth=a.currentMonth=b.getMonth();a.drawYear=a.selectedYear=a.currentYear=b.getFullYear();if((f!=a.selectedMonth||h!=a.selectedYear)&&!c)this._notifyChange(a);this._adjustInstDate(a);if(a.input)a.input.val(e?
"":this._formatDate(a))},_getDate:function(a){return!a.currentYear||a.input&&a.input.val()==""?null:this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay))},_generateHTML:function(a){var b=new Date;b=this._daylightSavingAdjust(new Date(b.getFullYear(),b.getMonth(),b.getDate()));var c=this._get(a,"isRTL"),e=this._get(a,"showButtonPanel"),f=this._get(a,"hideIfNoPrevNext"),h=this._get(a,"navigationAsDateFormat"),i=this._getNumberOfMonths(a),g=this._get(a,"showCurrentAtPos"),k=
this._get(a,"stepMonths"),l=i[0]!=1||i[1]!=1,u=this._daylightSavingAdjust(!a.currentDay?new Date(9999,9,9):new Date(a.currentYear,a.currentMonth,a.currentDay)),j=this._getMinMaxDate(a,"min"),o=this._getMinMaxDate(a,"max");g=a.drawMonth-g;var m=a.drawYear;if(g<0){g+=12;m--}if(o){var n=this._daylightSavingAdjust(new Date(o.getFullYear(),o.getMonth()-i[0]*i[1]+1,o.getDate()));for(n=j&&n<j?j:n;this._daylightSavingAdjust(new Date(m,g,1))>n;){g--;if(g<0){g=11;m--}}}a.drawMonth=g;a.drawYear=m;n=this._get(a,
"prevText");n=!h?n:this.formatDate(n,this._daylightSavingAdjust(new Date(m,g-k,1)),this._getFormatConfig(a));n=this._canAdjustMonth(a,-1,m,g)?'<a class="ui-datepicker-prev ui-corner-all" onclick="DP_jQuery_'+y+".datepicker._adjustDate('#"+a.id+"', -"+k+", 'M');\" title=\""+n+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"e":"w")+'">'+n+"</span></a>":f?"":'<a class="ui-datepicker-prev ui-corner-all ui-state-disabled" title="'+n+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"e":"w")+'">'+
n+"</span></a>";var r=this._get(a,"nextText");r=!h?r:this.formatDate(r,this._daylightSavingAdjust(new Date(m,g+k,1)),this._getFormatConfig(a));f=this._canAdjustMonth(a,+1,m,g)?'<a class="ui-datepicker-next ui-corner-all" onclick="DP_jQuery_'+y+".datepicker._adjustDate('#"+a.id+"', +"+k+", 'M');\" title=\""+r+'"><span class="ui-icon ui-icon-circle-triangle-'+(c?"w":"e")+'">'+r+"</span></a>":f?"":'<a class="ui-datepicker-next ui-corner-all ui-state-disabled" title="'+r+'"><span class="ui-icon ui-icon-circle-triangle-'+
(c?"w":"e")+'">'+r+"</span></a>";k=this._get(a,"currentText");r=this._get(a,"gotoCurrent")&&a.currentDay?u:b;k=!h?k:this.formatDate(k,r,this._getFormatConfig(a));h=!a.inline?'<button type="button" class="ui-datepicker-close ui-state-default ui-priority-primary ui-corner-all" onclick="DP_jQuery_'+y+'.datepicker._hideDatepicker();">'+this._get(a,"closeText")+"</button>":"";e=e?'<div class="ui-datepicker-buttonpane ui-widget-content">'+(c?h:"")+(this._isInRange(a,r)?'<button type="button" class="ui-datepicker-current ui-state-default ui-priority-secondary ui-corner-all" onclick="DP_jQuery_'+
y+".datepicker._gotoToday('#"+a.id+"');\">"+k+"</button>":"")+(c?"":h)+"</div>":"";h=parseInt(this._get(a,"firstDay"),10);h=isNaN(h)?0:h;k=this._get(a,"showWeek");r=this._get(a,"dayNames");this._get(a,"dayNamesShort");var s=this._get(a,"dayNamesMin"),z=this._get(a,"monthNames"),v=this._get(a,"monthNamesShort"),p=this._get(a,"beforeShowDay"),w=this._get(a,"showOtherMonths"),H=this._get(a,"selectOtherMonths");this._get(a,"calculateWeek");for(var L=this._getDefaultDate(a),I="",C=0;C<i[0];C++){for(var M=
"",D=0;D<i[1];D++){var N=this._daylightSavingAdjust(new Date(m,g,a.selectedDay)),t=" ui-corner-all",x="";if(l){x+='<div class="ui-datepicker-group';if(i[1]>1)switch(D){case 0:x+=" ui-datepicker-group-first";t=" ui-corner-"+(c?"right":"left");break;case i[1]-1:x+=" ui-datepicker-group-last";t=" ui-corner-"+(c?"left":"right");break;default:x+=" ui-datepicker-group-middle";t="";break}x+='">'}x+='<div class="ui-datepicker-header ui-widget-header ui-helper-clearfix'+t+'">'+(/all|left/.test(t)&&C==0?c?
f:n:"")+(/all|right/.test(t)&&C==0?c?n:f:"")+this._generateMonthYearHeader(a,g,m,j,o,C>0||D>0,z,v)+'</div><table class="ui-datepicker-calendar"><thead><tr>';var A=k?'<th class="ui-datepicker-week-col">'+this._get(a,"weekHeader")+"</th>":"";for(t=0;t<7;t++){var q=(t+h)%7;A+="<th"+((t+h+6)%7>=5?' class="ui-datepicker-week-end"':"")+'><span title="'+r[q]+'">'+s[q]+"</span></th>"}x+=A+"</tr></thead><tbody>";A=this._getDaysInMonth(m,g);if(m==a.selectedYear&&g==a.selectedMonth)a.selectedDay=Math.min(a.selectedDay,
A);t=(this._getFirstDayOfMonth(m,g)-h+7)%7;A=l?6:Math.ceil((t+A)/7);q=this._daylightSavingAdjust(new Date(m,g,1-t));for(var O=0;O<A;O++){x+="<tr>";var P=!k?"":'<td class="ui-datepicker-week-col">'+this._get(a,"calculateWeek")(q)+"</td>";for(t=0;t<7;t++){var F=p?p.apply(a.input?a.input[0]:null,[q]):[true,""],B=q.getMonth()!=g,J=B&&!H||!F[0]||j&&q<j||o&&q>o;P+='<td class="'+((t+h+6)%7>=5?" ui-datepicker-week-end":"")+(B?" ui-datepicker-other-month":"")+(q.getTime()==N.getTime()&&g==a.selectedMonth&&
a._keyEvent||L.getTime()==q.getTime()&&L.getTime()==N.getTime()?" "+this._dayOverClass:"")+(J?" "+this._unselectableClass+" ui-state-disabled":"")+(B&&!w?"":" "+F[1]+(q.getTime()==u.getTime()?" "+this._currentClass:"")+(q.getTime()==b.getTime()?" ui-datepicker-today":""))+'"'+((!B||w)&&F[2]?' title="'+F[2]+'"':"")+(J?"":' onclick="DP_jQuery_'+y+".datepicker._selectDay('#"+a.id+"',"+q.getMonth()+","+q.getFullYear()+', this);return false;"')+">"+(B&&!w?"&#xa0;":J?'<span class="ui-state-default">'+q.getDate()+
"</span>":'<a class="ui-state-default'+(q.getTime()==b.getTime()?" ui-state-highlight":"")+(q.getTime()==u.getTime()?" ui-state-active":"")+(B?" ui-priority-secondary":"")+'" href="#">'+q.getDate()+"</a>")+"</td>";q.setDate(q.getDate()+1);q=this._daylightSavingAdjust(q)}x+=P+"</tr>"}g++;if(g>11){g=0;m++}x+="</tbody></table>"+(l?"</div>"+(i[0]>0&&D==i[1]-1?'<div class="ui-datepicker-row-break"></div>':""):"");M+=x}I+=M}I+=e+(d.browser.msie&&parseInt(d.browser.version,10)<7&&!a.inline?'<iframe src="javascript:false;" class="ui-datepicker-cover" frameborder="0"></iframe>':
"");a._keyEvent=false;return I},_generateMonthYearHeader:function(a,b,c,e,f,h,i,g){var k=this._get(a,"changeMonth"),l=this._get(a,"changeYear"),u=this._get(a,"showMonthAfterYear"),j='<div class="ui-datepicker-title">',o="";if(h||!k)o+='<span class="ui-datepicker-month">'+i[b]+"</span>";else{i=e&&e.getFullYear()==c;var m=f&&f.getFullYear()==c;o+='<select class="ui-datepicker-month" onchange="DP_jQuery_'+y+".datepicker._selectMonthYear('#"+a.id+"', this, 'M');\" onclick=\"DP_jQuery_"+y+".datepicker._clickMonthYear('#"+
a.id+"');\">";for(var n=0;n<12;n++)if((!i||n>=e.getMonth())&&(!m||n<=f.getMonth()))o+='<option value="'+n+'"'+(n==b?' selected="selected"':"")+">"+g[n]+"</option>";o+="</select>"}u||(j+=o+(h||!(k&&l)?"&#xa0;":""));if(h||!l)j+='<span class="ui-datepicker-year">'+c+"</span>";else{g=this._get(a,"yearRange").split(":");var r=(new Date).getFullYear();i=function(s){s=s.match(/c[+-].*/)?c+parseInt(s.substring(1),10):s.match(/[+-].*/)?r+parseInt(s,10):parseInt(s,10);return isNaN(s)?r:s};b=i(g[0]);g=Math.max(b,
i(g[1]||""));b=e?Math.max(b,e.getFullYear()):b;g=f?Math.min(g,f.getFullYear()):g;for(j+='<select class="ui-datepicker-year" onchange="DP_jQuery_'+y+".datepicker._selectMonthYear('#"+a.id+"', this, 'Y');\" onclick=\"DP_jQuery_"+y+".datepicker._clickMonthYear('#"+a.id+"');\">";b<=g;b++)j+='<option value="'+b+'"'+(b==c?' selected="selected"':"")+">"+b+"</option>";j+="</select>"}j+=this._get(a,"yearSuffix");if(u)j+=(h||!(k&&l)?"&#xa0;":"")+o;j+="</div>";return j},_adjustInstDate:function(a,b,c){var e=
a.drawYear+(c=="Y"?b:0),f=a.drawMonth+(c=="M"?b:0);b=Math.min(a.selectedDay,this._getDaysInMonth(e,f))+(c=="D"?b:0);e=this._restrictMinMax(a,this._daylightSavingAdjust(new Date(e,f,b)));a.selectedDay=e.getDate();a.drawMonth=a.selectedMonth=e.getMonth();a.drawYear=a.selectedYear=e.getFullYear();if(c=="M"||c=="Y")this._notifyChange(a)},_restrictMinMax:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");b=c&&b<c?c:b;return b=a&&b>a?a:b},_notifyChange:function(a){var b=this._get(a,
"onChangeMonthYear");if(b)b.apply(a.input?a.input[0]:null,[a.selectedYear,a.selectedMonth+1,a])},_getNumberOfMonths:function(a){a=this._get(a,"numberOfMonths");return a==null?[1,1]:typeof a=="number"?[1,a]:a},_getMinMaxDate:function(a,b){return this._determineDate(a,this._get(a,b+"Date"),null)},_getDaysInMonth:function(a,b){return 32-(new Date(a,b,32)).getDate()},_getFirstDayOfMonth:function(a,b){return(new Date(a,b,1)).getDay()},_canAdjustMonth:function(a,b,c,e){var f=this._getNumberOfMonths(a);
c=this._daylightSavingAdjust(new Date(c,e+(b<0?b:f[0]*f[1]),1));b<0&&c.setDate(this._getDaysInMonth(c.getFullYear(),c.getMonth()));return this._isInRange(a,c)},_isInRange:function(a,b){var c=this._getMinMaxDate(a,"min");a=this._getMinMaxDate(a,"max");return(!c||b.getTime()>=c.getTime())&&(!a||b.getTime()<=a.getTime())},_getFormatConfig:function(a){var b=this._get(a,"shortYearCutoff");b=typeof b!="string"?b:(new Date).getFullYear()%100+parseInt(b,10);return{shortYearCutoff:b,dayNamesShort:this._get(a,
"dayNamesShort"),dayNames:this._get(a,"dayNames"),monthNamesShort:this._get(a,"monthNamesShort"),monthNames:this._get(a,"monthNames")}},_formatDate:function(a,b,c,e){if(!b){a.currentDay=a.selectedDay;a.currentMonth=a.selectedMonth;a.currentYear=a.selectedYear}b=b?typeof b=="object"?b:this._daylightSavingAdjust(new Date(e,c,b)):this._daylightSavingAdjust(new Date(a.currentYear,a.currentMonth,a.currentDay));return this.formatDate(this._get(a,"dateFormat"),b,this._getFormatConfig(a))}});d.fn.datepicker=
function(a){if(!d.datepicker.initialized){d(document).mousedown(d.datepicker._checkExternalClick).find("body").append(d.datepicker.dpDiv);d.datepicker.initialized=true}var b=Array.prototype.slice.call(arguments,1);if(typeof a=="string"&&(a=="isDisabled"||a=="getDate"||a=="widget"))return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this[0]].concat(b));if(a=="option"&&arguments.length==2&&typeof arguments[1]=="string")return d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this[0]].concat(b));
return this.each(function(){typeof a=="string"?d.datepicker["_"+a+"Datepicker"].apply(d.datepicker,[this].concat(b)):d.datepicker._attachDatepicker(this,a)})};d.datepicker=new K;d.datepicker.initialized=false;d.datepicker.uuid=(new Date).getTime();d.datepicker.version="1.8.6";window["DP_jQuery_"+y]=d})(jQuery);
;/*
* jQuery UI Progressbar 1.8.6
*
* Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Progressbar
*
* Depends:
* jquery.ui.core.js
* jquery.ui.widget.js
*/
(function(b,c){b.widget("ui.progressbar",{options:{value:0},min:0,max:100,_create:function(){this.element.addClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").attr({role:"progressbar","aria-valuemin":this.min,"aria-valuemax":this.max,"aria-valuenow":this._value()});this.valueDiv=b("<div class='ui-progressbar-value ui-widget-header ui-corner-left'></div>").appendTo(this.element);this._refreshValue()},destroy:function(){this.element.removeClass("ui-progressbar ui-widget ui-widget-content ui-corner-all").removeAttr("role").removeAttr("aria-valuemin").removeAttr("aria-valuemax").removeAttr("aria-valuenow");
this.valueDiv.remove();b.Widget.prototype.destroy.apply(this,arguments)},value:function(a){if(a===c)return this._value();this._setOption("value",a);return this},_setOption:function(a,d){if(a==="value"){this.options.value=d;this._refreshValue();this._trigger("change");this._value()===this.max&&this._trigger("complete")}b.Widget.prototype._setOption.apply(this,arguments)},_value:function(){var a=this.options.value;if(typeof a!=="number")a=0;return Math.min(this.max,Math.max(this.min,a))},_refreshValue:function(){var a=
this.value();this.valueDiv.toggleClass("ui-corner-right",a===this.max).width(a+"%");this.element.attr("aria-valuenow",a)}});b.extend(b.ui.progressbar,{version:"1.8.6"})})(jQuery);
;/*
* jQuery UI Effects 1.8.6
*
* Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Effects/
*/
jQuery.effects||function(f,j){function m(c){var a;if(c&&c.constructor==Array&&c.length==3)return c;if(a=/rgb\(\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*,\s*([0-9]{1,3})\s*\)/.exec(c))return[parseInt(a[1],10),parseInt(a[2],10),parseInt(a[3],10)];if(a=/rgb\(\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*,\s*([0-9]+(?:\.[0-9]+)?)\%\s*\)/.exec(c))return[parseFloat(a[1])*2.55,parseFloat(a[2])*2.55,parseFloat(a[3])*2.55];if(a=/#([a-fA-F0-9]{2})([a-fA-F0-9]{2})([a-fA-F0-9]{2})/.exec(c))return[parseInt(a[1],
16),parseInt(a[2],16),parseInt(a[3],16)];if(a=/#([a-fA-F0-9])([a-fA-F0-9])([a-fA-F0-9])/.exec(c))return[parseInt(a[1]+a[1],16),parseInt(a[2]+a[2],16),parseInt(a[3]+a[3],16)];if(/rgba\(0, 0, 0, 0\)/.exec(c))return n.transparent;return n[f.trim(c).toLowerCase()]}function s(c,a){var b;do{b=f.curCSS(c,a);if(b!=""&&b!="transparent"||f.nodeName(c,"body"))break;a="backgroundColor"}while(c=c.parentNode);return m(b)}function o(){var c=document.defaultView?document.defaultView.getComputedStyle(this,null):this.currentStyle,
a={},b,d;if(c&&c.length&&c[0]&&c[c[0]])for(var e=c.length;e--;){b=c[e];if(typeof c[b]=="string"){d=b.replace(/\-(\w)/g,function(g,h){return h.toUpperCase()});a[d]=c[b]}}else for(b in c)if(typeof c[b]==="string")a[b]=c[b];return a}function p(c){var a,b;for(a in c){b=c[a];if(b==null||f.isFunction(b)||a in t||/scrollbar/.test(a)||!/color/i.test(a)&&isNaN(parseFloat(b)))delete c[a]}return c}function u(c,a){var b={_:0},d;for(d in a)if(c[d]!=a[d])b[d]=a[d];return b}function k(c,a,b,d){if(typeof c=="object"){d=
a;b=null;a=c;c=a.effect}if(f.isFunction(a)){d=a;b=null;a={}}if(typeof a=="number"||f.fx.speeds[a]){d=b;b=a;a={}}if(f.isFunction(b)){d=b;b=null}a=a||{};b=b||a.duration;b=f.fx.off?0:typeof b=="number"?b:f.fx.speeds[b]||f.fx.speeds._default;d=d||a.complete;return[c,a,b,d]}function l(c){if(!c||typeof c==="number"||f.fx.speeds[c])return true;if(typeof c==="string"&&!f.effects[c])return true;return false}f.effects={};f.each(["backgroundColor","borderBottomColor","borderLeftColor","borderRightColor","borderTopColor",
"borderColor","color","outlineColor"],function(c,a){f.fx.step[a]=function(b){if(!b.colorInit){b.start=s(b.elem,a);b.end=m(b.end);b.colorInit=true}b.elem.style[a]="rgb("+Math.max(Math.min(parseInt(b.pos*(b.end[0]-b.start[0])+b.start[0],10),255),0)+","+Math.max(Math.min(parseInt(b.pos*(b.end[1]-b.start[1])+b.start[1],10),255),0)+","+Math.max(Math.min(parseInt(b.pos*(b.end[2]-b.start[2])+b.start[2],10),255),0)+")"}});var n={aqua:[0,255,255],azure:[240,255,255],beige:[245,245,220],black:[0,0,0],blue:[0,
0,255],brown:[165,42,42],cyan:[0,255,255],darkblue:[0,0,139],darkcyan:[0,139,139],darkgrey:[169,169,169],darkgreen:[0,100,0],darkkhaki:[189,183,107],darkmagenta:[139,0,139],darkolivegreen:[85,107,47],darkorange:[255,140,0],darkorchid:[153,50,204],darkred:[139,0,0],darksalmon:[233,150,122],darkviolet:[148,0,211],fuchsia:[255,0,255],gold:[255,215,0],green:[0,128,0],indigo:[75,0,130],khaki:[240,230,140],lightblue:[173,216,230],lightcyan:[224,255,255],lightgreen:[144,238,144],lightgrey:[211,211,211],
lightpink:[255,182,193],lightyellow:[255,255,224],lime:[0,255,0],magenta:[255,0,255],maroon:[128,0,0],navy:[0,0,128],olive:[128,128,0],orange:[255,165,0],pink:[255,192,203],purple:[128,0,128],violet:[128,0,128],red:[255,0,0],silver:[192,192,192],white:[255,255,255],yellow:[255,255,0],transparent:[255,255,255]},q=["add","remove","toggle"],t={border:1,borderBottom:1,borderColor:1,borderLeft:1,borderRight:1,borderTop:1,borderWidth:1,margin:1,padding:1};f.effects.animateClass=function(c,a,b,d){if(f.isFunction(b)){d=
b;b=null}return this.each(function(){var e=f(this),g=e.attr("style")||" ",h=p(o.call(this)),r,v=e.attr("className");f.each(q,function(w,i){c[i]&&e[i+"Class"](c[i])});r=p(o.call(this));e.attr("className",v);e.animate(u(h,r),a,b,function(){f.each(q,function(w,i){c[i]&&e[i+"Class"](c[i])});if(typeof e.attr("style")=="object"){e.attr("style").cssText="";e.attr("style").cssText=g}else e.attr("style",g);d&&d.apply(this,arguments)})})};f.fn.extend({_addClass:f.fn.addClass,addClass:function(c,a,b,d){return a?
f.effects.animateClass.apply(this,[{add:c},a,b,d]):this._addClass(c)},_removeClass:f.fn.removeClass,removeClass:function(c,a,b,d){return a?f.effects.animateClass.apply(this,[{remove:c},a,b,d]):this._removeClass(c)},_toggleClass:f.fn.toggleClass,toggleClass:function(c,a,b,d,e){return typeof a=="boolean"||a===j?b?f.effects.animateClass.apply(this,[a?{add:c}:{remove:c},b,d,e]):this._toggleClass(c,a):f.effects.animateClass.apply(this,[{toggle:c},a,b,d])},switchClass:function(c,a,b,d,e){return f.effects.animateClass.apply(this,
[{add:a,remove:c},b,d,e])}});f.extend(f.effects,{version:"1.8.6",save:function(c,a){for(var b=0;b<a.length;b++)a[b]!==null&&c.data("ec.storage."+a[b],c[0].style[a[b]])},restore:function(c,a){for(var b=0;b<a.length;b++)a[b]!==null&&c.css(a[b],c.data("ec.storage."+a[b]))},setMode:function(c,a){if(a=="toggle")a=c.is(":hidden")?"show":"hide";return a},getBaseline:function(c,a){var b;switch(c[0]){case "top":b=0;break;case "middle":b=0.5;break;case "bottom":b=1;break;default:b=c[0]/a.height}switch(c[1]){case "left":c=
0;break;case "center":c=0.5;break;case "right":c=1;break;default:c=c[1]/a.width}return{x:c,y:b}},createWrapper:function(c){if(c.parent().is(".ui-effects-wrapper"))return c.parent();var a={width:c.outerWidth(true),height:c.outerHeight(true),"float":c.css("float")},b=f("<div></div>").addClass("ui-effects-wrapper").css({fontSize:"100%",background:"transparent",border:"none",margin:0,padding:0});c.wrap(b);b=c.parent();if(c.css("position")=="static"){b.css({position:"relative"});c.css({position:"relative"})}else{f.extend(a,
{position:c.css("position"),zIndex:c.css("z-index")});f.each(["top","left","bottom","right"],function(d,e){a[e]=c.css(e);if(isNaN(parseInt(a[e],10)))a[e]="auto"});c.css({position:"relative",top:0,left:0})}return b.css(a).show()},removeWrapper:function(c){if(c.parent().is(".ui-effects-wrapper"))return c.parent().replaceWith(c);return c},setTransition:function(c,a,b,d){d=d||{};f.each(a,function(e,g){unit=c.cssUnit(g);if(unit[0]>0)d[g]=unit[0]*b+unit[1]});return d}});f.fn.extend({effect:function(c){var a=
k.apply(this,arguments),b={options:a[1],duration:a[2],callback:a[3]};a=b.options.mode;var d=f.effects[c];if(f.fx.off||!d)return a?this[a](b.duration,b.callback):this.each(function(){b.callback&&b.callback.call(this)});return d.call(this,b)},_show:f.fn.show,show:function(c){if(l(c))return this._show.apply(this,arguments);else{var a=k.apply(this,arguments);a[1].mode="show";return this.effect.apply(this,a)}},_hide:f.fn.hide,hide:function(c){if(l(c))return this._hide.apply(this,arguments);else{var a=
k.apply(this,arguments);a[1].mode="hide";return this.effect.apply(this,a)}},__toggle:f.fn.toggle,toggle:function(c){if(l(c)||typeof c==="boolean"||f.isFunction(c))return this.__toggle.apply(this,arguments);else{var a=k.apply(this,arguments);a[1].mode="toggle";return this.effect.apply(this,a)}},cssUnit:function(c){var a=this.css(c),b=[];f.each(["em","px","%","pt"],function(d,e){if(a.indexOf(e)>0)b=[parseFloat(a),e]});return b}});f.easing.jswing=f.easing.swing;f.extend(f.easing,{def:"easeOutQuad",swing:function(c,
a,b,d,e){return f.easing[f.easing.def](c,a,b,d,e)},easeInQuad:function(c,a,b,d,e){return d*(a/=e)*a+b},easeOutQuad:function(c,a,b,d,e){return-d*(a/=e)*(a-2)+b},easeInOutQuad:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a+b;return-d/2*(--a*(a-2)-1)+b},easeInCubic:function(c,a,b,d,e){return d*(a/=e)*a*a+b},easeOutCubic:function(c,a,b,d,e){return d*((a=a/e-1)*a*a+1)+b},easeInOutCubic:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a+b;return d/2*((a-=2)*a*a+2)+b},easeInQuart:function(c,a,b,d,e){return d*
(a/=e)*a*a*a+b},easeOutQuart:function(c,a,b,d,e){return-d*((a=a/e-1)*a*a*a-1)+b},easeInOutQuart:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a+b;return-d/2*((a-=2)*a*a*a-2)+b},easeInQuint:function(c,a,b,d,e){return d*(a/=e)*a*a*a*a+b},easeOutQuint:function(c,a,b,d,e){return d*((a=a/e-1)*a*a*a*a+1)+b},easeInOutQuint:function(c,a,b,d,e){if((a/=e/2)<1)return d/2*a*a*a*a*a+b;return d/2*((a-=2)*a*a*a*a+2)+b},easeInSine:function(c,a,b,d,e){return-d*Math.cos(a/e*(Math.PI/2))+d+b},easeOutSine:function(c,
a,b,d,e){return d*Math.sin(a/e*(Math.PI/2))+b},easeInOutSine:function(c,a,b,d,e){return-d/2*(Math.cos(Math.PI*a/e)-1)+b},easeInExpo:function(c,a,b,d,e){return a==0?b:d*Math.pow(2,10*(a/e-1))+b},easeOutExpo:function(c,a,b,d,e){return a==e?b+d:d*(-Math.pow(2,-10*a/e)+1)+b},easeInOutExpo:function(c,a,b,d,e){if(a==0)return b;if(a==e)return b+d;if((a/=e/2)<1)return d/2*Math.pow(2,10*(a-1))+b;return d/2*(-Math.pow(2,-10*--a)+2)+b},easeInCirc:function(c,a,b,d,e){return-d*(Math.sqrt(1-(a/=e)*a)-1)+b},easeOutCirc:function(c,
a,b,d,e){return d*Math.sqrt(1-(a=a/e-1)*a)+b},easeInOutCirc:function(c,a,b,d,e){if((a/=e/2)<1)return-d/2*(Math.sqrt(1-a*a)-1)+b;return d/2*(Math.sqrt(1-(a-=2)*a)+1)+b},easeInElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e)==1)return b+d;g||(g=e*0.3);if(h<Math.abs(d)){h=d;c=g/4}else c=g/(2*Math.PI)*Math.asin(d/h);return-(h*Math.pow(2,10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g))+b},easeOutElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e)==1)return b+
d;g||(g=e*0.3);if(h<Math.abs(d)){h=d;c=g/4}else c=g/(2*Math.PI)*Math.asin(d/h);return h*Math.pow(2,-10*a)*Math.sin((a*e-c)*2*Math.PI/g)+d+b},easeInOutElastic:function(c,a,b,d,e){c=1.70158;var g=0,h=d;if(a==0)return b;if((a/=e/2)==2)return b+d;g||(g=e*0.3*1.5);if(h<Math.abs(d)){h=d;c=g/4}else c=g/(2*Math.PI)*Math.asin(d/h);if(a<1)return-0.5*h*Math.pow(2,10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g)+b;return h*Math.pow(2,-10*(a-=1))*Math.sin((a*e-c)*2*Math.PI/g)*0.5+d+b},easeInBack:function(c,a,b,d,e,g){if(g==
j)g=1.70158;return d*(a/=e)*a*((g+1)*a-g)+b},easeOutBack:function(c,a,b,d,e,g){if(g==j)g=1.70158;return d*((a=a/e-1)*a*((g+1)*a+g)+1)+b},easeInOutBack:function(c,a,b,d,e,g){if(g==j)g=1.70158;if((a/=e/2)<1)return d/2*a*a*(((g*=1.525)+1)*a-g)+b;return d/2*((a-=2)*a*(((g*=1.525)+1)*a+g)+2)+b},easeInBounce:function(c,a,b,d,e){return d-f.easing.easeOutBounce(c,e-a,0,d,e)+b},easeOutBounce:function(c,a,b,d,e){return(a/=e)<1/2.75?d*7.5625*a*a+b:a<2/2.75?d*(7.5625*(a-=1.5/2.75)*a+0.75)+b:a<2.5/2.75?d*(7.5625*
(a-=2.25/2.75)*a+0.9375)+b:d*(7.5625*(a-=2.625/2.75)*a+0.984375)+b},easeInOutBounce:function(c,a,b,d,e){if(a<e/2)return f.easing.easeInBounce(c,a*2,0,d,e)*0.5+b;return f.easing.easeOutBounce(c,a*2-e,0,d,e)*0.5+d*0.5+b}})}(jQuery);
;/*
* jQuery UI Effects Blind 1.8.6
*
* Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Effects/Blind
*
* Depends:
* jquery.effects.core.js
*/
(function(b){b.effects.blind=function(c){return this.queue(function(){var a=b(this),g=["position","top","left"],f=b.effects.setMode(a,c.options.mode||"hide"),d=c.options.direction||"vertical";b.effects.save(a,g);a.show();var e=b.effects.createWrapper(a).css({overflow:"hidden"}),h=d=="vertical"?"height":"width";d=d=="vertical"?e.height():e.width();f=="show"&&e.css(h,0);var i={};i[h]=f=="show"?d:0;e.animate(i,c.duration,c.options.easing,function(){f=="hide"&&a.hide();b.effects.restore(a,g);b.effects.removeWrapper(a);
c.callback&&c.callback.apply(a[0],arguments);a.dequeue()})})}})(jQuery);
;/*
* jQuery UI Effects Bounce 1.8.6
*
* Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Effects/Bounce
*
* Depends:
* jquery.effects.core.js
*/
(function(e){e.effects.bounce=function(b){return this.queue(function(){var a=e(this),l=["position","top","left"],h=e.effects.setMode(a,b.options.mode||"effect"),d=b.options.direction||"up",c=b.options.distance||20,m=b.options.times||5,i=b.duration||250;/show|hide/.test(h)&&l.push("opacity");e.effects.save(a,l);a.show();e.effects.createWrapper(a);var f=d=="up"||d=="down"?"top":"left";d=d=="up"||d=="left"?"pos":"neg";c=b.options.distance||(f=="top"?a.outerHeight({margin:true})/3:a.outerWidth({margin:true})/
3);if(h=="show")a.css("opacity",0).css(f,d=="pos"?-c:c);if(h=="hide")c/=m*2;h!="hide"&&m--;if(h=="show"){var g={opacity:1};g[f]=(d=="pos"?"+=":"-=")+c;a.animate(g,i/2,b.options.easing);c/=2;m--}for(g=0;g<m;g++){var j={},k={};j[f]=(d=="pos"?"-=":"+=")+c;k[f]=(d=="pos"?"+=":"-=")+c;a.animate(j,i/2,b.options.easing).animate(k,i/2,b.options.easing);c=h=="hide"?c*2:c/2}if(h=="hide"){g={opacity:0};g[f]=(d=="pos"?"-=":"+=")+c;a.animate(g,i/2,b.options.easing,function(){a.hide();e.effects.restore(a,l);e.effects.removeWrapper(a);
b.callback&&b.callback.apply(this,arguments)})}else{j={};k={};j[f]=(d=="pos"?"-=":"+=")+c;k[f]=(d=="pos"?"+=":"-=")+c;a.animate(j,i/2,b.options.easing).animate(k,i/2,b.options.easing,function(){e.effects.restore(a,l);e.effects.removeWrapper(a);b.callback&&b.callback.apply(this,arguments)})}a.queue("fx",function(){a.dequeue()});a.dequeue()})}})(jQuery);
;/*
* jQuery UI Effects Clip 1.8.6
*
* Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Effects/Clip
*
* Depends:
* jquery.effects.core.js
*/
(function(b){b.effects.clip=function(e){return this.queue(function(){var a=b(this),i=["position","top","left","height","width"],f=b.effects.setMode(a,e.options.mode||"hide"),c=e.options.direction||"vertical";b.effects.save(a,i);a.show();var d=b.effects.createWrapper(a).css({overflow:"hidden"});d=a[0].tagName=="IMG"?d:a;var g={size:c=="vertical"?"height":"width",position:c=="vertical"?"top":"left"};c=c=="vertical"?d.height():d.width();if(f=="show"){d.css(g.size,0);d.css(g.position,c/2)}var h={};h[g.size]=
f=="show"?c:0;h[g.position]=f=="show"?0:c/2;d.animate(h,{queue:false,duration:e.duration,easing:e.options.easing,complete:function(){f=="hide"&&a.hide();b.effects.restore(a,i);b.effects.removeWrapper(a);e.callback&&e.callback.apply(a[0],arguments);a.dequeue()}})})}})(jQuery);
;/*
* jQuery UI Effects Drop 1.8.6
*
* Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Effects/Drop
*
* Depends:
* jquery.effects.core.js
*/
(function(c){c.effects.drop=function(d){return this.queue(function(){var a=c(this),h=["position","top","left","opacity"],e=c.effects.setMode(a,d.options.mode||"hide"),b=d.options.direction||"left";c.effects.save(a,h);a.show();c.effects.createWrapper(a);var f=b=="up"||b=="down"?"top":"left";b=b=="up"||b=="left"?"pos":"neg";var g=d.options.distance||(f=="top"?a.outerHeight({margin:true})/2:a.outerWidth({margin:true})/2);if(e=="show")a.css("opacity",0).css(f,b=="pos"?-g:g);var i={opacity:e=="show"?1:
0};i[f]=(e=="show"?b=="pos"?"+=":"-=":b=="pos"?"-=":"+=")+g;a.animate(i,{queue:false,duration:d.duration,easing:d.options.easing,complete:function(){e=="hide"&&a.hide();c.effects.restore(a,h);c.effects.removeWrapper(a);d.callback&&d.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
;/*
* jQuery UI Effects Explode 1.8.6
*
* Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Effects/Explode
*
* Depends:
* jquery.effects.core.js
*/
(function(j){j.effects.explode=function(a){return this.queue(function(){var c=a.options.pieces?Math.round(Math.sqrt(a.options.pieces)):3,d=a.options.pieces?Math.round(Math.sqrt(a.options.pieces)):3;a.options.mode=a.options.mode=="toggle"?j(this).is(":visible")?"hide":"show":a.options.mode;var b=j(this).show().css("visibility","hidden"),g=b.offset();g.top-=parseInt(b.css("marginTop"),10)||0;g.left-=parseInt(b.css("marginLeft"),10)||0;for(var h=b.outerWidth(true),i=b.outerHeight(true),e=0;e<c;e++)for(var f=
0;f<d;f++)b.clone().appendTo("body").wrap("<div></div>").css({position:"absolute",visibility:"visible",left:-f*(h/d),top:-e*(i/c)}).parent().addClass("ui-effects-explode").css({position:"absolute",overflow:"hidden",width:h/d,height:i/c,left:g.left+f*(h/d)+(a.options.mode=="show"?(f-Math.floor(d/2))*(h/d):0),top:g.top+e*(i/c)+(a.options.mode=="show"?(e-Math.floor(c/2))*(i/c):0),opacity:a.options.mode=="show"?0:1}).animate({left:g.left+f*(h/d)+(a.options.mode=="show"?0:(f-Math.floor(d/2))*(h/d)),top:g.top+
e*(i/c)+(a.options.mode=="show"?0:(e-Math.floor(c/2))*(i/c)),opacity:a.options.mode=="show"?1:0},a.duration||500);setTimeout(function(){a.options.mode=="show"?b.css({visibility:"visible"}):b.css({visibility:"visible"}).hide();a.callback&&a.callback.apply(b[0]);b.dequeue();j("div.ui-effects-explode").remove()},a.duration||500)})}})(jQuery);
;/*
* jQuery UI Effects Fade 1.8.6
*
* Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Effects/Fade
*
* Depends:
* jquery.effects.core.js
*/
(function(b){b.effects.fade=function(a){return this.queue(function(){var c=b(this),d=b.effects.setMode(c,a.options.mode||"hide");c.animate({opacity:d},{queue:false,duration:a.duration,easing:a.options.easing,complete:function(){a.callback&&a.callback.apply(this,arguments);c.dequeue()}})})}})(jQuery);
;/*
* jQuery UI Effects Fold 1.8.6
*
* Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Effects/Fold
*
* Depends:
* jquery.effects.core.js
*/
(function(c){c.effects.fold=function(a){return this.queue(function(){var b=c(this),j=["position","top","left"],d=c.effects.setMode(b,a.options.mode||"hide"),g=a.options.size||15,h=!!a.options.horizFirst,k=a.duration?a.duration/2:c.fx.speeds._default/2;c.effects.save(b,j);b.show();var e=c.effects.createWrapper(b).css({overflow:"hidden"}),f=d=="show"!=h,l=f?["width","height"]:["height","width"];f=f?[e.width(),e.height()]:[e.height(),e.width()];var i=/([0-9]+)%/.exec(g);if(i)g=parseInt(i[1],10)/100*
f[d=="hide"?0:1];if(d=="show")e.css(h?{height:0,width:g}:{height:g,width:0});h={};i={};h[l[0]]=d=="show"?f[0]:g;i[l[1]]=d=="show"?f[1]:0;e.animate(h,k,a.options.easing).animate(i,k,a.options.easing,function(){d=="hide"&&b.hide();c.effects.restore(b,j);c.effects.removeWrapper(b);a.callback&&a.callback.apply(b[0],arguments);b.dequeue()})})}})(jQuery);
;/*
* jQuery UI Effects Highlight 1.8.6
*
* Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Effects/Highlight
*
* Depends:
* jquery.effects.core.js
*/
(function(b){b.effects.highlight=function(c){return this.queue(function(){var a=b(this),e=["backgroundImage","backgroundColor","opacity"],d=b.effects.setMode(a,c.options.mode||"show"),f={backgroundColor:a.css("backgroundColor")};if(d=="hide")f.opacity=0;b.effects.save(a,e);a.show().css({backgroundImage:"none",backgroundColor:c.options.color||"#ffff99"}).animate(f,{queue:false,duration:c.duration,easing:c.options.easing,complete:function(){d=="hide"&&a.hide();b.effects.restore(a,e);d=="show"&&!b.support.opacity&&
this.style.removeAttribute("filter");c.callback&&c.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
;/*
* jQuery UI Effects Pulsate 1.8.6
*
* Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Effects/Pulsate
*
* Depends:
* jquery.effects.core.js
*/
(function(d){d.effects.pulsate=function(a){return this.queue(function(){var b=d(this),c=d.effects.setMode(b,a.options.mode||"show");times=(a.options.times||5)*2-1;duration=a.duration?a.duration/2:d.fx.speeds._default/2;isVisible=b.is(":visible");animateTo=0;if(!isVisible){b.css("opacity",0).show();animateTo=1}if(c=="hide"&&isVisible||c=="show"&&!isVisible)times--;for(c=0;c<times;c++){b.animate({opacity:animateTo},duration,a.options.easing);animateTo=(animateTo+1)%2}b.animate({opacity:animateTo},duration,
a.options.easing,function(){animateTo==0&&b.hide();a.callback&&a.callback.apply(this,arguments)});b.queue("fx",function(){b.dequeue()}).dequeue()})}})(jQuery);
;/*
* jQuery UI Effects Scale 1.8.6
*
* Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Effects/Scale
*
* Depends:
* jquery.effects.core.js
*/
(function(c){c.effects.puff=function(b){return this.queue(function(){var a=c(this),e=c.effects.setMode(a,b.options.mode||"hide"),g=parseInt(b.options.percent,10)||150,h=g/100,i={height:a.height(),width:a.width()};c.extend(b.options,{fade:true,mode:e,percent:e=="hide"?g:100,from:e=="hide"?i:{height:i.height*h,width:i.width*h}});a.effect("scale",b.options,b.duration,b.callback);a.dequeue()})};c.effects.scale=function(b){return this.queue(function(){var a=c(this),e=c.extend(true,{},b.options),g=c.effects.setMode(a,
b.options.mode||"effect"),h=parseInt(b.options.percent,10)||(parseInt(b.options.percent,10)==0?0:g=="hide"?0:100),i=b.options.direction||"both",f=b.options.origin;if(g!="effect"){e.origin=f||["middle","center"];e.restore=true}f={height:a.height(),width:a.width()};a.from=b.options.from||(g=="show"?{height:0,width:0}:f);h={y:i!="horizontal"?h/100:1,x:i!="vertical"?h/100:1};a.to={height:f.height*h.y,width:f.width*h.x};if(b.options.fade){if(g=="show"){a.from.opacity=0;a.to.opacity=1}if(g=="hide"){a.from.opacity=
1;a.to.opacity=0}}e.from=a.from;e.to=a.to;e.mode=g;a.effect("size",e,b.duration,b.callback);a.dequeue()})};c.effects.size=function(b){return this.queue(function(){var a=c(this),e=["position","top","left","width","height","overflow","opacity"],g=["position","top","left","overflow","opacity"],h=["width","height","overflow"],i=["fontSize"],f=["borderTopWidth","borderBottomWidth","paddingTop","paddingBottom"],k=["borderLeftWidth","borderRightWidth","paddingLeft","paddingRight"],p=c.effects.setMode(a,
b.options.mode||"effect"),n=b.options.restore||false,m=b.options.scale||"both",l=b.options.origin,j={height:a.height(),width:a.width()};a.from=b.options.from||j;a.to=b.options.to||j;if(l){l=c.effects.getBaseline(l,j);a.from.top=(j.height-a.from.height)*l.y;a.from.left=(j.width-a.from.width)*l.x;a.to.top=(j.height-a.to.height)*l.y;a.to.left=(j.width-a.to.width)*l.x}var d={from:{y:a.from.height/j.height,x:a.from.width/j.width},to:{y:a.to.height/j.height,x:a.to.width/j.width}};if(m=="box"||m=="both"){if(d.from.y!=
d.to.y){e=e.concat(f);a.from=c.effects.setTransition(a,f,d.from.y,a.from);a.to=c.effects.setTransition(a,f,d.to.y,a.to)}if(d.from.x!=d.to.x){e=e.concat(k);a.from=c.effects.setTransition(a,k,d.from.x,a.from);a.to=c.effects.setTransition(a,k,d.to.x,a.to)}}if(m=="content"||m=="both")if(d.from.y!=d.to.y){e=e.concat(i);a.from=c.effects.setTransition(a,i,d.from.y,a.from);a.to=c.effects.setTransition(a,i,d.to.y,a.to)}c.effects.save(a,n?e:g);a.show();c.effects.createWrapper(a);a.css("overflow","hidden").css(a.from);
if(m=="content"||m=="both"){f=f.concat(["marginTop","marginBottom"]).concat(i);k=k.concat(["marginLeft","marginRight"]);h=e.concat(f).concat(k);a.find("*[width]").each(function(){child=c(this);n&&c.effects.save(child,h);var o={height:child.height(),width:child.width()};child.from={height:o.height*d.from.y,width:o.width*d.from.x};child.to={height:o.height*d.to.y,width:o.width*d.to.x};if(d.from.y!=d.to.y){child.from=c.effects.setTransition(child,f,d.from.y,child.from);child.to=c.effects.setTransition(child,
f,d.to.y,child.to)}if(d.from.x!=d.to.x){child.from=c.effects.setTransition(child,k,d.from.x,child.from);child.to=c.effects.setTransition(child,k,d.to.x,child.to)}child.css(child.from);child.animate(child.to,b.duration,b.options.easing,function(){n&&c.effects.restore(child,h)})})}a.animate(a.to,{queue:false,duration:b.duration,easing:b.options.easing,complete:function(){a.to.opacity===0&&a.css("opacity",a.from.opacity);p=="hide"&&a.hide();c.effects.restore(a,n?e:g);c.effects.removeWrapper(a);b.callback&&
b.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
;/*
* jQuery UI Effects Shake 1.8.6
*
* Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Effects/Shake
*
* Depends:
* jquery.effects.core.js
*/
(function(d){d.effects.shake=function(a){return this.queue(function(){var b=d(this),j=["position","top","left"];d.effects.setMode(b,a.options.mode||"effect");var c=a.options.direction||"left",e=a.options.distance||20,l=a.options.times||3,f=a.duration||a.options.duration||140;d.effects.save(b,j);b.show();d.effects.createWrapper(b);var g=c=="up"||c=="down"?"top":"left",h=c=="up"||c=="left"?"pos":"neg";c={};var i={},k={};c[g]=(h=="pos"?"-=":"+=")+e;i[g]=(h=="pos"?"+=":"-=")+e*2;k[g]=(h=="pos"?"-=":"+=")+
e*2;b.animate(c,f,a.options.easing);for(e=1;e<l;e++)b.animate(i,f,a.options.easing).animate(k,f,a.options.easing);b.animate(i,f,a.options.easing).animate(c,f/2,a.options.easing,function(){d.effects.restore(b,j);d.effects.removeWrapper(b);a.callback&&a.callback.apply(this,arguments)});b.queue("fx",function(){b.dequeue()});b.dequeue()})}})(jQuery);
;/*
* jQuery UI Effects Slide 1.8.6
*
* Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Effects/Slide
*
* Depends:
* jquery.effects.core.js
*/
(function(c){c.effects.slide=function(d){return this.queue(function(){var a=c(this),h=["position","top","left"],e=c.effects.setMode(a,d.options.mode||"show"),b=d.options.direction||"left";c.effects.save(a,h);a.show();c.effects.createWrapper(a).css({overflow:"hidden"});var f=b=="up"||b=="down"?"top":"left";b=b=="up"||b=="left"?"pos":"neg";var g=d.options.distance||(f=="top"?a.outerHeight({margin:true}):a.outerWidth({margin:true}));if(e=="show")a.css(f,b=="pos"?-g:g);var i={};i[f]=(e=="show"?b=="pos"?
"+=":"-=":b=="pos"?"-=":"+=")+g;a.animate(i,{queue:false,duration:d.duration,easing:d.options.easing,complete:function(){e=="hide"&&a.hide();c.effects.restore(a,h);c.effects.removeWrapper(a);d.callback&&d.callback.apply(this,arguments);a.dequeue()}})})}})(jQuery);
;/*
* jQuery UI Effects Transfer 1.8.6
*
* Copyright 2010, AUTHORS.txt (http://jqueryui.com/about)
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* http://docs.jquery.com/UI/Effects/Transfer
*
* Depends:
* jquery.effects.core.js
*/
(function(e){e.effects.transfer=function(a){return this.queue(function(){var b=e(this),c=e(a.options.to),d=c.offset();c={top:d.top,left:d.left,height:c.innerHeight(),width:c.innerWidth()};d=b.offset();var f=e('<div class="ui-effects-transfer"></div>').appendTo(document.body).addClass(a.options.className).css({top:d.top,left:d.left,height:b.innerHeight(),width:b.innerWidth(),position:"absolute"}).animate(c,a.duration,a.options.easing,function(){f.remove();a.callback&&a.callback.apply(b[0],arguments);
b.dequeue()})})}})(jQuery);
;
/trunk/applications/saisie/squelettes/js/jquery-1.4.4.min.js
New file
0,0 → 1,167
/*!
* jQuery JavaScript Library v1.4.4
* http://jquery.com/
*
* Copyright 2010, John Resig
* Dual licensed under the MIT or GPL Version 2 licenses.
* http://jquery.org/license
*
* Includes Sizzle.js
* http://sizzlejs.com/
* Copyright 2010, The Dojo Foundation
* Released under the MIT, BSD, and GPL Licenses.
*
* Date: Thu Nov 11 19:04:53 2010 -0500
*/
(function(E,B){function ka(a,b,d){if(d===B&&a.nodeType===1){d=a.getAttribute("data-"+b);if(typeof d==="string"){try{d=d==="true"?true:d==="false"?false:d==="null"?null:!c.isNaN(d)?parseFloat(d):Ja.test(d)?c.parseJSON(d):d}catch(e){}c.data(a,b,d)}else d=B}return d}function U(){return false}function ca(){return true}function la(a,b,d){d[0].type=a;return c.event.handle.apply(b,d)}function Ka(a){var b,d,e,f,h,l,k,o,x,r,A,C=[];f=[];h=c.data(this,this.nodeType?"events":"__events__");if(typeof h==="function")h=
h.events;if(!(a.liveFired===this||!h||!h.live||a.button&&a.type==="click")){if(a.namespace)A=RegExp("(^|\\.)"+a.namespace.split(".").join("\\.(?:.*\\.)?")+"(\\.|$)");a.liveFired=this;var J=h.live.slice(0);for(k=0;k<J.length;k++){h=J[k];h.origType.replace(X,"")===a.type?f.push(h.selector):J.splice(k--,1)}f=c(a.target).closest(f,a.currentTarget);o=0;for(x=f.length;o<x;o++){r=f[o];for(k=0;k<J.length;k++){h=J[k];if(r.selector===h.selector&&(!A||A.test(h.namespace))){l=r.elem;e=null;if(h.preType==="mouseenter"||
h.preType==="mouseleave"){a.type=h.preType;e=c(a.relatedTarget).closest(h.selector)[0]}if(!e||e!==l)C.push({elem:l,handleObj:h,level:r.level})}}}o=0;for(x=C.length;o<x;o++){f=C[o];if(d&&f.level>d)break;a.currentTarget=f.elem;a.data=f.handleObj.data;a.handleObj=f.handleObj;A=f.handleObj.origHandler.apply(f.elem,arguments);if(A===false||a.isPropagationStopped()){d=f.level;if(A===false)b=false;if(a.isImmediatePropagationStopped())break}}return b}}function Y(a,b){return(a&&a!=="*"?a+".":"")+b.replace(La,
"`").replace(Ma,"&")}function ma(a,b,d){if(c.isFunction(b))return c.grep(a,function(f,h){return!!b.call(f,h,f)===d});else if(b.nodeType)return c.grep(a,function(f){return f===b===d});else if(typeof b==="string"){var e=c.grep(a,function(f){return f.nodeType===1});if(Na.test(b))return c.filter(b,e,!d);else b=c.filter(b,e)}return c.grep(a,function(f){return c.inArray(f,b)>=0===d})}function na(a,b){var d=0;b.each(function(){if(this.nodeName===(a[d]&&a[d].nodeName)){var e=c.data(a[d++]),f=c.data(this,
e);if(e=e&&e.events){delete f.handle;f.events={};for(var h in e)for(var l in e[h])c.event.add(this,h,e[h][l],e[h][l].data)}}})}function Oa(a,b){b.src?c.ajax({url:b.src,async:false,dataType:"script"}):c.globalEval(b.text||b.textContent||b.innerHTML||"");b.parentNode&&b.parentNode.removeChild(b)}function oa(a,b,d){var e=b==="width"?a.offsetWidth:a.offsetHeight;if(d==="border")return e;c.each(b==="width"?Pa:Qa,function(){d||(e-=parseFloat(c.css(a,"padding"+this))||0);if(d==="margin")e+=parseFloat(c.css(a,
"margin"+this))||0;else e-=parseFloat(c.css(a,"border"+this+"Width"))||0});return e}function da(a,b,d,e){if(c.isArray(b)&&b.length)c.each(b,function(f,h){d||Ra.test(a)?e(a,h):da(a+"["+(typeof h==="object"||c.isArray(h)?f:"")+"]",h,d,e)});else if(!d&&b!=null&&typeof b==="object")c.isEmptyObject(b)?e(a,""):c.each(b,function(f,h){da(a+"["+f+"]",h,d,e)});else e(a,b)}function S(a,b){var d={};c.each(pa.concat.apply([],pa.slice(0,b)),function(){d[this]=a});return d}function qa(a){if(!ea[a]){var b=c("<"+
a+">").appendTo("body"),d=b.css("display");b.remove();if(d==="none"||d==="")d="block";ea[a]=d}return ea[a]}function fa(a){return c.isWindow(a)?a:a.nodeType===9?a.defaultView||a.parentWindow:false}var t=E.document,c=function(){function a(){if(!b.isReady){try{t.documentElement.doScroll("left")}catch(j){setTimeout(a,1);return}b.ready()}}var b=function(j,s){return new b.fn.init(j,s)},d=E.jQuery,e=E.$,f,h=/^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/,l=/\S/,k=/^\s+/,o=/\s+$/,x=/\W/,r=/\d/,A=/^<(\w+)\s*\/?>(?:<\/\1>)?$/,
C=/^[\],:{}\s]*$/,J=/\\(?:["\\\/bfnrt]|u[0-9a-fA-F]{4})/g,w=/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[eE][+\-]?\d+)?/g,I=/(?:^|:|,)(?:\s*\[)+/g,L=/(webkit)[ \/]([\w.]+)/,g=/(opera)(?:.*version)?[ \/]([\w.]+)/,i=/(msie) ([\w.]+)/,n=/(mozilla)(?:.*? rv:([\w.]+))?/,m=navigator.userAgent,p=false,q=[],u,y=Object.prototype.toString,F=Object.prototype.hasOwnProperty,M=Array.prototype.push,N=Array.prototype.slice,O=String.prototype.trim,D=Array.prototype.indexOf,R={};b.fn=b.prototype={init:function(j,
s){var v,z,H;if(!j)return this;if(j.nodeType){this.context=this[0]=j;this.length=1;return this}if(j==="body"&&!s&&t.body){this.context=t;this[0]=t.body;this.selector="body";this.length=1;return this}if(typeof j==="string")if((v=h.exec(j))&&(v[1]||!s))if(v[1]){H=s?s.ownerDocument||s:t;if(z=A.exec(j))if(b.isPlainObject(s)){j=[t.createElement(z[1])];b.fn.attr.call(j,s,true)}else j=[H.createElement(z[1])];else{z=b.buildFragment([v[1]],[H]);j=(z.cacheable?z.fragment.cloneNode(true):z.fragment).childNodes}return b.merge(this,
j)}else{if((z=t.getElementById(v[2]))&&z.parentNode){if(z.id!==v[2])return f.find(j);this.length=1;this[0]=z}this.context=t;this.selector=j;return this}else if(!s&&!x.test(j)){this.selector=j;this.context=t;j=t.getElementsByTagName(j);return b.merge(this,j)}else return!s||s.jquery?(s||f).find(j):b(s).find(j);else if(b.isFunction(j))return f.ready(j);if(j.selector!==B){this.selector=j.selector;this.context=j.context}return b.makeArray(j,this)},selector:"",jquery:"1.4.4",length:0,size:function(){return this.length},
toArray:function(){return N.call(this,0)},get:function(j){return j==null?this.toArray():j<0?this.slice(j)[0]:this[j]},pushStack:function(j,s,v){var z=b();b.isArray(j)?M.apply(z,j):b.merge(z,j);z.prevObject=this;z.context=this.context;if(s==="find")z.selector=this.selector+(this.selector?" ":"")+v;else if(s)z.selector=this.selector+"."+s+"("+v+")";return z},each:function(j,s){return b.each(this,j,s)},ready:function(j){b.bindReady();if(b.isReady)j.call(t,b);else q&&q.push(j);return this},eq:function(j){return j===
-1?this.slice(j):this.slice(j,+j+1)},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},slice:function(){return this.pushStack(N.apply(this,arguments),"slice",N.call(arguments).join(","))},map:function(j){return this.pushStack(b.map(this,function(s,v){return j.call(s,v,s)}))},end:function(){return this.prevObject||b(null)},push:M,sort:[].sort,splice:[].splice};b.fn.init.prototype=b.fn;b.extend=b.fn.extend=function(){var j,s,v,z,H,G=arguments[0]||{},K=1,Q=arguments.length,ga=false;
if(typeof G==="boolean"){ga=G;G=arguments[1]||{};K=2}if(typeof G!=="object"&&!b.isFunction(G))G={};if(Q===K){G=this;--K}for(;K<Q;K++)if((j=arguments[K])!=null)for(s in j){v=G[s];z=j[s];if(G!==z)if(ga&&z&&(b.isPlainObject(z)||(H=b.isArray(z)))){if(H){H=false;v=v&&b.isArray(v)?v:[]}else v=v&&b.isPlainObject(v)?v:{};G[s]=b.extend(ga,v,z)}else if(z!==B)G[s]=z}return G};b.extend({noConflict:function(j){E.$=e;if(j)E.jQuery=d;return b},isReady:false,readyWait:1,ready:function(j){j===true&&b.readyWait--;
if(!b.readyWait||j!==true&&!b.isReady){if(!t.body)return setTimeout(b.ready,1);b.isReady=true;if(!(j!==true&&--b.readyWait>0))if(q){var s=0,v=q;for(q=null;j=v[s++];)j.call(t,b);b.fn.trigger&&b(t).trigger("ready").unbind("ready")}}},bindReady:function(){if(!p){p=true;if(t.readyState==="complete")return setTimeout(b.ready,1);if(t.addEventListener){t.addEventListener("DOMContentLoaded",u,false);E.addEventListener("load",b.ready,false)}else if(t.attachEvent){t.attachEvent("onreadystatechange",u);E.attachEvent("onload",
b.ready);var j=false;try{j=E.frameElement==null}catch(s){}t.documentElement.doScroll&&j&&a()}}},isFunction:function(j){return b.type(j)==="function"},isArray:Array.isArray||function(j){return b.type(j)==="array"},isWindow:function(j){return j&&typeof j==="object"&&"setInterval"in j},isNaN:function(j){return j==null||!r.test(j)||isNaN(j)},type:function(j){return j==null?String(j):R[y.call(j)]||"object"},isPlainObject:function(j){if(!j||b.type(j)!=="object"||j.nodeType||b.isWindow(j))return false;if(j.constructor&&
!F.call(j,"constructor")&&!F.call(j.constructor.prototype,"isPrototypeOf"))return false;for(var s in j);return s===B||F.call(j,s)},isEmptyObject:function(j){for(var s in j)return false;return true},error:function(j){throw j;},parseJSON:function(j){if(typeof j!=="string"||!j)return null;j=b.trim(j);if(C.test(j.replace(J,"@").replace(w,"]").replace(I,"")))return E.JSON&&E.JSON.parse?E.JSON.parse(j):(new Function("return "+j))();else b.error("Invalid JSON: "+j)},noop:function(){},globalEval:function(j){if(j&&
l.test(j)){var s=t.getElementsByTagName("head")[0]||t.documentElement,v=t.createElement("script");v.type="text/javascript";if(b.support.scriptEval)v.appendChild(t.createTextNode(j));else v.text=j;s.insertBefore(v,s.firstChild);s.removeChild(v)}},nodeName:function(j,s){return j.nodeName&&j.nodeName.toUpperCase()===s.toUpperCase()},each:function(j,s,v){var z,H=0,G=j.length,K=G===B||b.isFunction(j);if(v)if(K)for(z in j){if(s.apply(j[z],v)===false)break}else for(;H<G;){if(s.apply(j[H++],v)===false)break}else if(K)for(z in j){if(s.call(j[z],
z,j[z])===false)break}else for(v=j[0];H<G&&s.call(v,H,v)!==false;v=j[++H]);return j},trim:O?function(j){return j==null?"":O.call(j)}:function(j){return j==null?"":j.toString().replace(k,"").replace(o,"")},makeArray:function(j,s){var v=s||[];if(j!=null){var z=b.type(j);j.length==null||z==="string"||z==="function"||z==="regexp"||b.isWindow(j)?M.call(v,j):b.merge(v,j)}return v},inArray:function(j,s){if(s.indexOf)return s.indexOf(j);for(var v=0,z=s.length;v<z;v++)if(s[v]===j)return v;return-1},merge:function(j,
s){var v=j.length,z=0;if(typeof s.length==="number")for(var H=s.length;z<H;z++)j[v++]=s[z];else for(;s[z]!==B;)j[v++]=s[z++];j.length=v;return j},grep:function(j,s,v){var z=[],H;v=!!v;for(var G=0,K=j.length;G<K;G++){H=!!s(j[G],G);v!==H&&z.push(j[G])}return z},map:function(j,s,v){for(var z=[],H,G=0,K=j.length;G<K;G++){H=s(j[G],G,v);if(H!=null)z[z.length]=H}return z.concat.apply([],z)},guid:1,proxy:function(j,s,v){if(arguments.length===2)if(typeof s==="string"){v=j;j=v[s];s=B}else if(s&&!b.isFunction(s)){v=
s;s=B}if(!s&&j)s=function(){return j.apply(v||this,arguments)};if(j)s.guid=j.guid=j.guid||s.guid||b.guid++;return s},access:function(j,s,v,z,H,G){var K=j.length;if(typeof s==="object"){for(var Q in s)b.access(j,Q,s[Q],z,H,v);return j}if(v!==B){z=!G&&z&&b.isFunction(v);for(Q=0;Q<K;Q++)H(j[Q],s,z?v.call(j[Q],Q,H(j[Q],s)):v,G);return j}return K?H(j[0],s):B},now:function(){return(new Date).getTime()},uaMatch:function(j){j=j.toLowerCase();j=L.exec(j)||g.exec(j)||i.exec(j)||j.indexOf("compatible")<0&&n.exec(j)||
[];return{browser:j[1]||"",version:j[2]||"0"}},browser:{}});b.each("Boolean Number String Function Array Date RegExp Object".split(" "),function(j,s){R["[object "+s+"]"]=s.toLowerCase()});m=b.uaMatch(m);if(m.browser){b.browser[m.browser]=true;b.browser.version=m.version}if(b.browser.webkit)b.browser.safari=true;if(D)b.inArray=function(j,s){return D.call(s,j)};if(!/\s/.test("\u00a0")){k=/^[\s\xA0]+/;o=/[\s\xA0]+$/}f=b(t);if(t.addEventListener)u=function(){t.removeEventListener("DOMContentLoaded",u,
false);b.ready()};else if(t.attachEvent)u=function(){if(t.readyState==="complete"){t.detachEvent("onreadystatechange",u);b.ready()}};return E.jQuery=E.$=b}();(function(){c.support={};var a=t.documentElement,b=t.createElement("script"),d=t.createElement("div"),e="script"+c.now();d.style.display="none";d.innerHTML=" <link/><table></table><a href='/a' style='color:red;float:left;opacity:.55;'>a</a><input type='checkbox'/>";var f=d.getElementsByTagName("*"),h=d.getElementsByTagName("a")[0],l=t.createElement("select"),
k=l.appendChild(t.createElement("option"));if(!(!f||!f.length||!h)){c.support={leadingWhitespace:d.firstChild.nodeType===3,tbody:!d.getElementsByTagName("tbody").length,htmlSerialize:!!d.getElementsByTagName("link").length,style:/red/.test(h.getAttribute("style")),hrefNormalized:h.getAttribute("href")==="/a",opacity:/^0.55$/.test(h.style.opacity),cssFloat:!!h.style.cssFloat,checkOn:d.getElementsByTagName("input")[0].value==="on",optSelected:k.selected,deleteExpando:true,optDisabled:false,checkClone:false,
scriptEval:false,noCloneEvent:true,boxModel:null,inlineBlockNeedsLayout:false,shrinkWrapBlocks:false,reliableHiddenOffsets:true};l.disabled=true;c.support.optDisabled=!k.disabled;b.type="text/javascript";try{b.appendChild(t.createTextNode("window."+e+"=1;"))}catch(o){}a.insertBefore(b,a.firstChild);if(E[e]){c.support.scriptEval=true;delete E[e]}try{delete b.test}catch(x){c.support.deleteExpando=false}a.removeChild(b);if(d.attachEvent&&d.fireEvent){d.attachEvent("onclick",function r(){c.support.noCloneEvent=
false;d.detachEvent("onclick",r)});d.cloneNode(true).fireEvent("onclick")}d=t.createElement("div");d.innerHTML="<input type='radio' name='radiotest' checked='checked'/>";a=t.createDocumentFragment();a.appendChild(d.firstChild);c.support.checkClone=a.cloneNode(true).cloneNode(true).lastChild.checked;c(function(){var r=t.createElement("div");r.style.width=r.style.paddingLeft="1px";t.body.appendChild(r);c.boxModel=c.support.boxModel=r.offsetWidth===2;if("zoom"in r.style){r.style.display="inline";r.style.zoom=
1;c.support.inlineBlockNeedsLayout=r.offsetWidth===2;r.style.display="";r.innerHTML="<div style='width:4px;'></div>";c.support.shrinkWrapBlocks=r.offsetWidth!==2}r.innerHTML="<table><tr><td style='padding:0;display:none'></td><td>t</td></tr></table>";var A=r.getElementsByTagName("td");c.support.reliableHiddenOffsets=A[0].offsetHeight===0;A[0].style.display="";A[1].style.display="none";c.support.reliableHiddenOffsets=c.support.reliableHiddenOffsets&&A[0].offsetHeight===0;r.innerHTML="";t.body.removeChild(r).style.display=
"none"});a=function(r){var A=t.createElement("div");r="on"+r;var C=r in A;if(!C){A.setAttribute(r,"return;");C=typeof A[r]==="function"}return C};c.support.submitBubbles=a("submit");c.support.changeBubbles=a("change");a=b=d=f=h=null}})();var ra={},Ja=/^(?:\{.*\}|\[.*\])$/;c.extend({cache:{},uuid:0,expando:"jQuery"+c.now(),noData:{embed:true,object:"clsid:D27CDB6E-AE6D-11cf-96B8-444553540000",applet:true},data:function(a,b,d){if(c.acceptData(a)){a=a==E?ra:a;var e=a.nodeType,f=e?a[c.expando]:null,h=
c.cache;if(!(e&&!f&&typeof b==="string"&&d===B)){if(e)f||(a[c.expando]=f=++c.uuid);else h=a;if(typeof b==="object")if(e)h[f]=c.extend(h[f],b);else c.extend(h,b);else if(e&&!h[f])h[f]={};a=e?h[f]:h;if(d!==B)a[b]=d;return typeof b==="string"?a[b]:a}}},removeData:function(a,b){if(c.acceptData(a)){a=a==E?ra:a;var d=a.nodeType,e=d?a[c.expando]:a,f=c.cache,h=d?f[e]:e;if(b){if(h){delete h[b];d&&c.isEmptyObject(h)&&c.removeData(a)}}else if(d&&c.support.deleteExpando)delete a[c.expando];else if(a.removeAttribute)a.removeAttribute(c.expando);
else if(d)delete f[e];else for(var l in a)delete a[l]}},acceptData:function(a){if(a.nodeName){var b=c.noData[a.nodeName.toLowerCase()];if(b)return!(b===true||a.getAttribute("classid")!==b)}return true}});c.fn.extend({data:function(a,b){var d=null;if(typeof a==="undefined"){if(this.length){var e=this[0].attributes,f;d=c.data(this[0]);for(var h=0,l=e.length;h<l;h++){f=e[h].name;if(f.indexOf("data-")===0){f=f.substr(5);ka(this[0],f,d[f])}}}return d}else if(typeof a==="object")return this.each(function(){c.data(this,
a)});var k=a.split(".");k[1]=k[1]?"."+k[1]:"";if(b===B){d=this.triggerHandler("getData"+k[1]+"!",[k[0]]);if(d===B&&this.length){d=c.data(this[0],a);d=ka(this[0],a,d)}return d===B&&k[1]?this.data(k[0]):d}else return this.each(function(){var o=c(this),x=[k[0],b];o.triggerHandler("setData"+k[1]+"!",x);c.data(this,a,b);o.triggerHandler("changeData"+k[1]+"!",x)})},removeData:function(a){return this.each(function(){c.removeData(this,a)})}});c.extend({queue:function(a,b,d){if(a){b=(b||"fx")+"queue";var e=
c.data(a,b);if(!d)return e||[];if(!e||c.isArray(d))e=c.data(a,b,c.makeArray(d));else e.push(d);return e}},dequeue:function(a,b){b=b||"fx";var d=c.queue(a,b),e=d.shift();if(e==="inprogress")e=d.shift();if(e){b==="fx"&&d.unshift("inprogress");e.call(a,function(){c.dequeue(a,b)})}}});c.fn.extend({queue:function(a,b){if(typeof a!=="string"){b=a;a="fx"}if(b===B)return c.queue(this[0],a);return this.each(function(){var d=c.queue(this,a,b);a==="fx"&&d[0]!=="inprogress"&&c.dequeue(this,a)})},dequeue:function(a){return this.each(function(){c.dequeue(this,
a)})},delay:function(a,b){a=c.fx?c.fx.speeds[a]||a:a;b=b||"fx";return this.queue(b,function(){var d=this;setTimeout(function(){c.dequeue(d,b)},a)})},clearQueue:function(a){return this.queue(a||"fx",[])}});var sa=/[\n\t]/g,ha=/\s+/,Sa=/\r/g,Ta=/^(?:href|src|style)$/,Ua=/^(?:button|input)$/i,Va=/^(?:button|input|object|select|textarea)$/i,Wa=/^a(?:rea)?$/i,ta=/^(?:radio|checkbox)$/i;c.props={"for":"htmlFor","class":"className",readonly:"readOnly",maxlength:"maxLength",cellspacing:"cellSpacing",rowspan:"rowSpan",
colspan:"colSpan",tabindex:"tabIndex",usemap:"useMap",frameborder:"frameBorder"};c.fn.extend({attr:function(a,b){return c.access(this,a,b,true,c.attr)},removeAttr:function(a){return this.each(function(){c.attr(this,a,"");this.nodeType===1&&this.removeAttribute(a)})},addClass:function(a){if(c.isFunction(a))return this.each(function(x){var r=c(this);r.addClass(a.call(this,x,r.attr("class")))});if(a&&typeof a==="string")for(var b=(a||"").split(ha),d=0,e=this.length;d<e;d++){var f=this[d];if(f.nodeType===
1)if(f.className){for(var h=" "+f.className+" ",l=f.className,k=0,o=b.length;k<o;k++)if(h.indexOf(" "+b[k]+" ")<0)l+=" "+b[k];f.className=c.trim(l)}else f.className=a}return this},removeClass:function(a){if(c.isFunction(a))return this.each(function(o){var x=c(this);x.removeClass(a.call(this,o,x.attr("class")))});if(a&&typeof a==="string"||a===B)for(var b=(a||"").split(ha),d=0,e=this.length;d<e;d++){var f=this[d];if(f.nodeType===1&&f.className)if(a){for(var h=(" "+f.className+" ").replace(sa," "),
l=0,k=b.length;l<k;l++)h=h.replace(" "+b[l]+" "," ");f.className=c.trim(h)}else f.className=""}return this},toggleClass:function(a,b){var d=typeof a,e=typeof b==="boolean";if(c.isFunction(a))return this.each(function(f){var h=c(this);h.toggleClass(a.call(this,f,h.attr("class"),b),b)});return this.each(function(){if(d==="string")for(var f,h=0,l=c(this),k=b,o=a.split(ha);f=o[h++];){k=e?k:!l.hasClass(f);l[k?"addClass":"removeClass"](f)}else if(d==="undefined"||d==="boolean"){this.className&&c.data(this,
"__className__",this.className);this.className=this.className||a===false?"":c.data(this,"__className__")||""}})},hasClass:function(a){a=" "+a+" ";for(var b=0,d=this.length;b<d;b++)if((" "+this[b].className+" ").replace(sa," ").indexOf(a)>-1)return true;return false},val:function(a){if(!arguments.length){var b=this[0];if(b){if(c.nodeName(b,"option")){var d=b.attributes.value;return!d||d.specified?b.value:b.text}if(c.nodeName(b,"select")){var e=b.selectedIndex;d=[];var f=b.options;b=b.type==="select-one";
if(e<0)return null;var h=b?e:0;for(e=b?e+1:f.length;h<e;h++){var l=f[h];if(l.selected&&(c.support.optDisabled?!l.disabled:l.getAttribute("disabled")===null)&&(!l.parentNode.disabled||!c.nodeName(l.parentNode,"optgroup"))){a=c(l).val();if(b)return a;d.push(a)}}return d}if(ta.test(b.type)&&!c.support.checkOn)return b.getAttribute("value")===null?"on":b.value;return(b.value||"").replace(Sa,"")}return B}var k=c.isFunction(a);return this.each(function(o){var x=c(this),r=a;if(this.nodeType===1){if(k)r=
a.call(this,o,x.val());if(r==null)r="";else if(typeof r==="number")r+="";else if(c.isArray(r))r=c.map(r,function(C){return C==null?"":C+""});if(c.isArray(r)&&ta.test(this.type))this.checked=c.inArray(x.val(),r)>=0;else if(c.nodeName(this,"select")){var A=c.makeArray(r);c("option",this).each(function(){this.selected=c.inArray(c(this).val(),A)>=0});if(!A.length)this.selectedIndex=-1}else this.value=r}})}});c.extend({attrFn:{val:true,css:true,html:true,text:true,data:true,width:true,height:true,offset:true},
attr:function(a,b,d,e){if(!a||a.nodeType===3||a.nodeType===8)return B;if(e&&b in c.attrFn)return c(a)[b](d);e=a.nodeType!==1||!c.isXMLDoc(a);var f=d!==B;b=e&&c.props[b]||b;var h=Ta.test(b);if((b in a||a[b]!==B)&&e&&!h){if(f){b==="type"&&Ua.test(a.nodeName)&&a.parentNode&&c.error("type property can't be changed");if(d===null)a.nodeType===1&&a.removeAttribute(b);else a[b]=d}if(c.nodeName(a,"form")&&a.getAttributeNode(b))return a.getAttributeNode(b).nodeValue;if(b==="tabIndex")return(b=a.getAttributeNode("tabIndex"))&&
b.specified?b.value:Va.test(a.nodeName)||Wa.test(a.nodeName)&&a.href?0:B;return a[b]}if(!c.support.style&&e&&b==="style"){if(f)a.style.cssText=""+d;return a.style.cssText}f&&a.setAttribute(b,""+d);if(!a.attributes[b]&&a.hasAttribute&&!a.hasAttribute(b))return B;a=!c.support.hrefNormalized&&e&&h?a.getAttribute(b,2):a.getAttribute(b);return a===null?B:a}});var X=/\.(.*)$/,ia=/^(?:textarea|input|select)$/i,La=/\./g,Ma=/ /g,Xa=/[^\w\s.|`]/g,Ya=function(a){return a.replace(Xa,"\\$&")},ua={focusin:0,focusout:0};
c.event={add:function(a,b,d,e){if(!(a.nodeType===3||a.nodeType===8)){if(c.isWindow(a)&&a!==E&&!a.frameElement)a=E;if(d===false)d=U;else if(!d)return;var f,h;if(d.handler){f=d;d=f.handler}if(!d.guid)d.guid=c.guid++;if(h=c.data(a)){var l=a.nodeType?"events":"__events__",k=h[l],o=h.handle;if(typeof k==="function"){o=k.handle;k=k.events}else if(!k){a.nodeType||(h[l]=h=function(){});h.events=k={}}if(!o)h.handle=o=function(){return typeof c!=="undefined"&&!c.event.triggered?c.event.handle.apply(o.elem,
arguments):B};o.elem=a;b=b.split(" ");for(var x=0,r;l=b[x++];){h=f?c.extend({},f):{handler:d,data:e};if(l.indexOf(".")>-1){r=l.split(".");l=r.shift();h.namespace=r.slice(0).sort().join(".")}else{r=[];h.namespace=""}h.type=l;if(!h.guid)h.guid=d.guid;var A=k[l],C=c.event.special[l]||{};if(!A){A=k[l]=[];if(!C.setup||C.setup.call(a,e,r,o)===false)if(a.addEventListener)a.addEventListener(l,o,false);else a.attachEvent&&a.attachEvent("on"+l,o)}if(C.add){C.add.call(a,h);if(!h.handler.guid)h.handler.guid=
d.guid}A.push(h);c.event.global[l]=true}a=null}}},global:{},remove:function(a,b,d,e){if(!(a.nodeType===3||a.nodeType===8)){if(d===false)d=U;var f,h,l=0,k,o,x,r,A,C,J=a.nodeType?"events":"__events__",w=c.data(a),I=w&&w[J];if(w&&I){if(typeof I==="function"){w=I;I=I.events}if(b&&b.type){d=b.handler;b=b.type}if(!b||typeof b==="string"&&b.charAt(0)==="."){b=b||"";for(f in I)c.event.remove(a,f+b)}else{for(b=b.split(" ");f=b[l++];){r=f;k=f.indexOf(".")<0;o=[];if(!k){o=f.split(".");f=o.shift();x=RegExp("(^|\\.)"+
c.map(o.slice(0).sort(),Ya).join("\\.(?:.*\\.)?")+"(\\.|$)")}if(A=I[f])if(d){r=c.event.special[f]||{};for(h=e||0;h<A.length;h++){C=A[h];if(d.guid===C.guid){if(k||x.test(C.namespace)){e==null&&A.splice(h--,1);r.remove&&r.remove.call(a,C)}if(e!=null)break}}if(A.length===0||e!=null&&A.length===1){if(!r.teardown||r.teardown.call(a,o)===false)c.removeEvent(a,f,w.handle);delete I[f]}}else for(h=0;h<A.length;h++){C=A[h];if(k||x.test(C.namespace)){c.event.remove(a,r,C.handler,h);A.splice(h--,1)}}}if(c.isEmptyObject(I)){if(b=
w.handle)b.elem=null;delete w.events;delete w.handle;if(typeof w==="function")c.removeData(a,J);else c.isEmptyObject(w)&&c.removeData(a)}}}}},trigger:function(a,b,d,e){var f=a.type||a;if(!e){a=typeof a==="object"?a[c.expando]?a:c.extend(c.Event(f),a):c.Event(f);if(f.indexOf("!")>=0){a.type=f=f.slice(0,-1);a.exclusive=true}if(!d){a.stopPropagation();c.event.global[f]&&c.each(c.cache,function(){this.events&&this.events[f]&&c.event.trigger(a,b,this.handle.elem)})}if(!d||d.nodeType===3||d.nodeType===
8)return B;a.result=B;a.target=d;b=c.makeArray(b);b.unshift(a)}a.currentTarget=d;(e=d.nodeType?c.data(d,"handle"):(c.data(d,"__events__")||{}).handle)&&e.apply(d,b);e=d.parentNode||d.ownerDocument;try{if(!(d&&d.nodeName&&c.noData[d.nodeName.toLowerCase()]))if(d["on"+f]&&d["on"+f].apply(d,b)===false){a.result=false;a.preventDefault()}}catch(h){}if(!a.isPropagationStopped()&&e)c.event.trigger(a,b,e,true);else if(!a.isDefaultPrevented()){var l;e=a.target;var k=f.replace(X,""),o=c.nodeName(e,"a")&&k===
"click",x=c.event.special[k]||{};if((!x._default||x._default.call(d,a)===false)&&!o&&!(e&&e.nodeName&&c.noData[e.nodeName.toLowerCase()])){try{if(e[k]){if(l=e["on"+k])e["on"+k]=null;c.event.triggered=true;e[k]()}}catch(r){}if(l)e["on"+k]=l;c.event.triggered=false}}},handle:function(a){var b,d,e,f;d=[];var h=c.makeArray(arguments);a=h[0]=c.event.fix(a||E.event);a.currentTarget=this;b=a.type.indexOf(".")<0&&!a.exclusive;if(!b){e=a.type.split(".");a.type=e.shift();d=e.slice(0).sort();e=RegExp("(^|\\.)"+
d.join("\\.(?:.*\\.)?")+"(\\.|$)")}a.namespace=a.namespace||d.join(".");f=c.data(this,this.nodeType?"events":"__events__");if(typeof f==="function")f=f.events;d=(f||{})[a.type];if(f&&d){d=d.slice(0);f=0;for(var l=d.length;f<l;f++){var k=d[f];if(b||e.test(k.namespace)){a.handler=k.handler;a.data=k.data;a.handleObj=k;k=k.handler.apply(this,h);if(k!==B){a.result=k;if(k===false){a.preventDefault();a.stopPropagation()}}if(a.isImmediatePropagationStopped())break}}}return a.result},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode layerX layerY metaKey newValue offsetX offsetY pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),
fix:function(a){if(a[c.expando])return a;var b=a;a=c.Event(b);for(var d=this.props.length,e;d;){e=this.props[--d];a[e]=b[e]}if(!a.target)a.target=a.srcElement||t;if(a.target.nodeType===3)a.target=a.target.parentNode;if(!a.relatedTarget&&a.fromElement)a.relatedTarget=a.fromElement===a.target?a.toElement:a.fromElement;if(a.pageX==null&&a.clientX!=null){b=t.documentElement;d=t.body;a.pageX=a.clientX+(b&&b.scrollLeft||d&&d.scrollLeft||0)-(b&&b.clientLeft||d&&d.clientLeft||0);a.pageY=a.clientY+(b&&b.scrollTop||
d&&d.scrollTop||0)-(b&&b.clientTop||d&&d.clientTop||0)}if(a.which==null&&(a.charCode!=null||a.keyCode!=null))a.which=a.charCode!=null?a.charCode:a.keyCode;if(!a.metaKey&&a.ctrlKey)a.metaKey=a.ctrlKey;if(!a.which&&a.button!==B)a.which=a.button&1?1:a.button&2?3:a.button&4?2:0;return a},guid:1E8,proxy:c.proxy,special:{ready:{setup:c.bindReady,teardown:c.noop},live:{add:function(a){c.event.add(this,Y(a.origType,a.selector),c.extend({},a,{handler:Ka,guid:a.handler.guid}))},remove:function(a){c.event.remove(this,
Y(a.origType,a.selector),a)}},beforeunload:{setup:function(a,b,d){if(c.isWindow(this))this.onbeforeunload=d},teardown:function(a,b){if(this.onbeforeunload===b)this.onbeforeunload=null}}}};c.removeEvent=t.removeEventListener?function(a,b,d){a.removeEventListener&&a.removeEventListener(b,d,false)}:function(a,b,d){a.detachEvent&&a.detachEvent("on"+b,d)};c.Event=function(a){if(!this.preventDefault)return new c.Event(a);if(a&&a.type){this.originalEvent=a;this.type=a.type}else this.type=a;this.timeStamp=
c.now();this[c.expando]=true};c.Event.prototype={preventDefault:function(){this.isDefaultPrevented=ca;var a=this.originalEvent;if(a)if(a.preventDefault)a.preventDefault();else a.returnValue=false},stopPropagation:function(){this.isPropagationStopped=ca;var a=this.originalEvent;if(a){a.stopPropagation&&a.stopPropagation();a.cancelBubble=true}},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=ca;this.stopPropagation()},isDefaultPrevented:U,isPropagationStopped:U,isImmediatePropagationStopped:U};
var va=function(a){var b=a.relatedTarget;try{for(;b&&b!==this;)b=b.parentNode;if(b!==this){a.type=a.data;c.event.handle.apply(this,arguments)}}catch(d){}},wa=function(a){a.type=a.data;c.event.handle.apply(this,arguments)};c.each({mouseenter:"mouseover",mouseleave:"mouseout"},function(a,b){c.event.special[a]={setup:function(d){c.event.add(this,b,d&&d.selector?wa:va,a)},teardown:function(d){c.event.remove(this,b,d&&d.selector?wa:va)}}});if(!c.support.submitBubbles)c.event.special.submit={setup:function(){if(this.nodeName.toLowerCase()!==
"form"){c.event.add(this,"click.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="submit"||d==="image")&&c(b).closest("form").length){a.liveFired=B;return la("submit",this,arguments)}});c.event.add(this,"keypress.specialSubmit",function(a){var b=a.target,d=b.type;if((d==="text"||d==="password")&&c(b).closest("form").length&&a.keyCode===13){a.liveFired=B;return la("submit",this,arguments)}})}else return false},teardown:function(){c.event.remove(this,".specialSubmit")}};if(!c.support.changeBubbles){var V,
xa=function(a){var b=a.type,d=a.value;if(b==="radio"||b==="checkbox")d=a.checked;else if(b==="select-multiple")d=a.selectedIndex>-1?c.map(a.options,function(e){return e.selected}).join("-"):"";else if(a.nodeName.toLowerCase()==="select")d=a.selectedIndex;return d},Z=function(a,b){var d=a.target,e,f;if(!(!ia.test(d.nodeName)||d.readOnly)){e=c.data(d,"_change_data");f=xa(d);if(a.type!=="focusout"||d.type!=="radio")c.data(d,"_change_data",f);if(!(e===B||f===e))if(e!=null||f){a.type="change";a.liveFired=
B;return c.event.trigger(a,b,d)}}};c.event.special.change={filters:{focusout:Z,beforedeactivate:Z,click:function(a){var b=a.target,d=b.type;if(d==="radio"||d==="checkbox"||b.nodeName.toLowerCase()==="select")return Z.call(this,a)},keydown:function(a){var b=a.target,d=b.type;if(a.keyCode===13&&b.nodeName.toLowerCase()!=="textarea"||a.keyCode===32&&(d==="checkbox"||d==="radio")||d==="select-multiple")return Z.call(this,a)},beforeactivate:function(a){a=a.target;c.data(a,"_change_data",xa(a))}},setup:function(){if(this.type===
"file")return false;for(var a in V)c.event.add(this,a+".specialChange",V[a]);return ia.test(this.nodeName)},teardown:function(){c.event.remove(this,".specialChange");return ia.test(this.nodeName)}};V=c.event.special.change.filters;V.focus=V.beforeactivate}t.addEventListener&&c.each({focus:"focusin",blur:"focusout"},function(a,b){function d(e){e=c.event.fix(e);e.type=b;return c.event.trigger(e,null,e.target)}c.event.special[b]={setup:function(){ua[b]++===0&&t.addEventListener(a,d,true)},teardown:function(){--ua[b]===
0&&t.removeEventListener(a,d,true)}}});c.each(["bind","one"],function(a,b){c.fn[b]=function(d,e,f){if(typeof d==="object"){for(var h in d)this[b](h,e,d[h],f);return this}if(c.isFunction(e)||e===false){f=e;e=B}var l=b==="one"?c.proxy(f,function(o){c(this).unbind(o,l);return f.apply(this,arguments)}):f;if(d==="unload"&&b!=="one")this.one(d,e,f);else{h=0;for(var k=this.length;h<k;h++)c.event.add(this[h],d,l,e)}return this}});c.fn.extend({unbind:function(a,b){if(typeof a==="object"&&!a.preventDefault)for(var d in a)this.unbind(d,
a[d]);else{d=0;for(var e=this.length;d<e;d++)c.event.remove(this[d],a,b)}return this},delegate:function(a,b,d,e){return this.live(b,d,e,a)},undelegate:function(a,b,d){return arguments.length===0?this.unbind("live"):this.die(b,null,d,a)},trigger:function(a,b){return this.each(function(){c.event.trigger(a,b,this)})},triggerHandler:function(a,b){if(this[0]){var d=c.Event(a);d.preventDefault();d.stopPropagation();c.event.trigger(d,b,this[0]);return d.result}},toggle:function(a){for(var b=arguments,d=
1;d<b.length;)c.proxy(a,b[d++]);return this.click(c.proxy(a,function(e){var f=(c.data(this,"lastToggle"+a.guid)||0)%d;c.data(this,"lastToggle"+a.guid,f+1);e.preventDefault();return b[f].apply(this,arguments)||false}))},hover:function(a,b){return this.mouseenter(a).mouseleave(b||a)}});var ya={focus:"focusin",blur:"focusout",mouseenter:"mouseover",mouseleave:"mouseout"};c.each(["live","die"],function(a,b){c.fn[b]=function(d,e,f,h){var l,k=0,o,x,r=h||this.selector;h=h?this:c(this.context);if(typeof d===
"object"&&!d.preventDefault){for(l in d)h[b](l,e,d[l],r);return this}if(c.isFunction(e)){f=e;e=B}for(d=(d||"").split(" ");(l=d[k++])!=null;){o=X.exec(l);x="";if(o){x=o[0];l=l.replace(X,"")}if(l==="hover")d.push("mouseenter"+x,"mouseleave"+x);else{o=l;if(l==="focus"||l==="blur"){d.push(ya[l]+x);l+=x}else l=(ya[l]||l)+x;if(b==="live"){x=0;for(var A=h.length;x<A;x++)c.event.add(h[x],"live."+Y(l,r),{data:e,selector:r,handler:f,origType:l,origHandler:f,preType:o})}else h.unbind("live."+Y(l,r),f)}}return this}});
c.each("blur focus focusin focusout load resize scroll unload click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup error".split(" "),function(a,b){c.fn[b]=function(d,e){if(e==null){e=d;d=null}return arguments.length>0?this.bind(b,d,e):this.trigger(b)};if(c.attrFn)c.attrFn[b]=true});E.attachEvent&&!E.addEventListener&&c(E).bind("unload",function(){for(var a in c.cache)if(c.cache[a].handle)try{c.event.remove(c.cache[a].handle.elem)}catch(b){}});
(function(){function a(g,i,n,m,p,q){p=0;for(var u=m.length;p<u;p++){var y=m[p];if(y){var F=false;for(y=y[g];y;){if(y.sizcache===n){F=m[y.sizset];break}if(y.nodeType===1&&!q){y.sizcache=n;y.sizset=p}if(y.nodeName.toLowerCase()===i){F=y;break}y=y[g]}m[p]=F}}}function b(g,i,n,m,p,q){p=0;for(var u=m.length;p<u;p++){var y=m[p];if(y){var F=false;for(y=y[g];y;){if(y.sizcache===n){F=m[y.sizset];break}if(y.nodeType===1){if(!q){y.sizcache=n;y.sizset=p}if(typeof i!=="string"){if(y===i){F=true;break}}else if(k.filter(i,
[y]).length>0){F=y;break}}y=y[g]}m[p]=F}}}var d=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^\[\]]*\]|['"][^'"]*['"]|[^\[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?((?:.|\r|\n)*)/g,e=0,f=Object.prototype.toString,h=false,l=true;[0,0].sort(function(){l=false;return 0});var k=function(g,i,n,m){n=n||[];var p=i=i||t;if(i.nodeType!==1&&i.nodeType!==9)return[];if(!g||typeof g!=="string")return n;var q,u,y,F,M,N=true,O=k.isXML(i),D=[],R=g;do{d.exec("");if(q=d.exec(R)){R=q[3];D.push(q[1]);if(q[2]){F=q[3];
break}}}while(q);if(D.length>1&&x.exec(g))if(D.length===2&&o.relative[D[0]])u=L(D[0]+D[1],i);else for(u=o.relative[D[0]]?[i]:k(D.shift(),i);D.length;){g=D.shift();if(o.relative[g])g+=D.shift();u=L(g,u)}else{if(!m&&D.length>1&&i.nodeType===9&&!O&&o.match.ID.test(D[0])&&!o.match.ID.test(D[D.length-1])){q=k.find(D.shift(),i,O);i=q.expr?k.filter(q.expr,q.set)[0]:q.set[0]}if(i){q=m?{expr:D.pop(),set:C(m)}:k.find(D.pop(),D.length===1&&(D[0]==="~"||D[0]==="+")&&i.parentNode?i.parentNode:i,O);u=q.expr?k.filter(q.expr,
q.set):q.set;if(D.length>0)y=C(u);else N=false;for(;D.length;){q=M=D.pop();if(o.relative[M])q=D.pop();else M="";if(q==null)q=i;o.relative[M](y,q,O)}}else y=[]}y||(y=u);y||k.error(M||g);if(f.call(y)==="[object Array]")if(N)if(i&&i.nodeType===1)for(g=0;y[g]!=null;g++){if(y[g]&&(y[g]===true||y[g].nodeType===1&&k.contains(i,y[g])))n.push(u[g])}else for(g=0;y[g]!=null;g++)y[g]&&y[g].nodeType===1&&n.push(u[g]);else n.push.apply(n,y);else C(y,n);if(F){k(F,p,n,m);k.uniqueSort(n)}return n};k.uniqueSort=function(g){if(w){h=
l;g.sort(w);if(h)for(var i=1;i<g.length;i++)g[i]===g[i-1]&&g.splice(i--,1)}return g};k.matches=function(g,i){return k(g,null,null,i)};k.matchesSelector=function(g,i){return k(i,null,null,[g]).length>0};k.find=function(g,i,n){var m;if(!g)return[];for(var p=0,q=o.order.length;p<q;p++){var u,y=o.order[p];if(u=o.leftMatch[y].exec(g)){var F=u[1];u.splice(1,1);if(F.substr(F.length-1)!=="\\"){u[1]=(u[1]||"").replace(/\\/g,"");m=o.find[y](u,i,n);if(m!=null){g=g.replace(o.match[y],"");break}}}}m||(m=i.getElementsByTagName("*"));
return{set:m,expr:g}};k.filter=function(g,i,n,m){for(var p,q,u=g,y=[],F=i,M=i&&i[0]&&k.isXML(i[0]);g&&i.length;){for(var N in o.filter)if((p=o.leftMatch[N].exec(g))!=null&&p[2]){var O,D,R=o.filter[N];D=p[1];q=false;p.splice(1,1);if(D.substr(D.length-1)!=="\\"){if(F===y)y=[];if(o.preFilter[N])if(p=o.preFilter[N](p,F,n,y,m,M)){if(p===true)continue}else q=O=true;if(p)for(var j=0;(D=F[j])!=null;j++)if(D){O=R(D,p,j,F);var s=m^!!O;if(n&&O!=null)if(s)q=true;else F[j]=false;else if(s){y.push(D);q=true}}if(O!==
B){n||(F=y);g=g.replace(o.match[N],"");if(!q)return[];break}}}if(g===u)if(q==null)k.error(g);else break;u=g}return F};k.error=function(g){throw"Syntax error, unrecognized expression: "+g;};var o=k.selectors={order:["ID","NAME","TAG"],match:{ID:/#((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,CLASS:/\.((?:[\w\u00c0-\uFFFF\-]|\\.)+)/,NAME:/\[name=['"]*((?:[\w\u00c0-\uFFFF\-]|\\.)+)['"]*\]/,ATTR:/\[\s*((?:[\w\u00c0-\uFFFF\-]|\\.)+)\s*(?:(\S?=)\s*(['"]*)(.*?)\3|)\s*\]/,TAG:/^((?:[\w\u00c0-\uFFFF\*\-]|\\.)+)/,CHILD:/:(only|nth|last|first)-child(?:\((even|odd|[\dn+\-]*)\))?/,
POS:/:(nth|eq|gt|lt|first|last|even|odd)(?:\((\d*)\))?(?=[^\-]|$)/,PSEUDO:/:((?:[\w\u00c0-\uFFFF\-]|\\.)+)(?:\((['"]?)((?:\([^\)]+\)|[^\(\)]*)+)\2\))?/},leftMatch:{},attrMap:{"class":"className","for":"htmlFor"},attrHandle:{href:function(g){return g.getAttribute("href")}},relative:{"+":function(g,i){var n=typeof i==="string",m=n&&!/\W/.test(i);n=n&&!m;if(m)i=i.toLowerCase();m=0;for(var p=g.length,q;m<p;m++)if(q=g[m]){for(;(q=q.previousSibling)&&q.nodeType!==1;);g[m]=n||q&&q.nodeName.toLowerCase()===
i?q||false:q===i}n&&k.filter(i,g,true)},">":function(g,i){var n,m=typeof i==="string",p=0,q=g.length;if(m&&!/\W/.test(i))for(i=i.toLowerCase();p<q;p++){if(n=g[p]){n=n.parentNode;g[p]=n.nodeName.toLowerCase()===i?n:false}}else{for(;p<q;p++)if(n=g[p])g[p]=m?n.parentNode:n.parentNode===i;m&&k.filter(i,g,true)}},"":function(g,i,n){var m,p=e++,q=b;if(typeof i==="string"&&!/\W/.test(i)){m=i=i.toLowerCase();q=a}q("parentNode",i,p,g,m,n)},"~":function(g,i,n){var m,p=e++,q=b;if(typeof i==="string"&&!/\W/.test(i)){m=
i=i.toLowerCase();q=a}q("previousSibling",i,p,g,m,n)}},find:{ID:function(g,i,n){if(typeof i.getElementById!=="undefined"&&!n)return(g=i.getElementById(g[1]))&&g.parentNode?[g]:[]},NAME:function(g,i){if(typeof i.getElementsByName!=="undefined"){for(var n=[],m=i.getElementsByName(g[1]),p=0,q=m.length;p<q;p++)m[p].getAttribute("name")===g[1]&&n.push(m[p]);return n.length===0?null:n}},TAG:function(g,i){return i.getElementsByTagName(g[1])}},preFilter:{CLASS:function(g,i,n,m,p,q){g=" "+g[1].replace(/\\/g,
"")+" ";if(q)return g;q=0;for(var u;(u=i[q])!=null;q++)if(u)if(p^(u.className&&(" "+u.className+" ").replace(/[\t\n]/g," ").indexOf(g)>=0))n||m.push(u);else if(n)i[q]=false;return false},ID:function(g){return g[1].replace(/\\/g,"")},TAG:function(g){return g[1].toLowerCase()},CHILD:function(g){if(g[1]==="nth"){var i=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(g[2]==="even"&&"2n"||g[2]==="odd"&&"2n+1"||!/\D/.test(g[2])&&"0n+"+g[2]||g[2]);g[2]=i[1]+(i[2]||1)-0;g[3]=i[3]-0}g[0]=e++;return g},ATTR:function(g,i,n,
m,p,q){i=g[1].replace(/\\/g,"");if(!q&&o.attrMap[i])g[1]=o.attrMap[i];if(g[2]==="~=")g[4]=" "+g[4]+" ";return g},PSEUDO:function(g,i,n,m,p){if(g[1]==="not")if((d.exec(g[3])||"").length>1||/^\w/.test(g[3]))g[3]=k(g[3],null,null,i);else{g=k.filter(g[3],i,n,true^p);n||m.push.apply(m,g);return false}else if(o.match.POS.test(g[0])||o.match.CHILD.test(g[0]))return true;return g},POS:function(g){g.unshift(true);return g}},filters:{enabled:function(g){return g.disabled===false&&g.type!=="hidden"},disabled:function(g){return g.disabled===
true},checked:function(g){return g.checked===true},selected:function(g){return g.selected===true},parent:function(g){return!!g.firstChild},empty:function(g){return!g.firstChild},has:function(g,i,n){return!!k(n[3],g).length},header:function(g){return/h\d/i.test(g.nodeName)},text:function(g){return"text"===g.type},radio:function(g){return"radio"===g.type},checkbox:function(g){return"checkbox"===g.type},file:function(g){return"file"===g.type},password:function(g){return"password"===g.type},submit:function(g){return"submit"===
g.type},image:function(g){return"image"===g.type},reset:function(g){return"reset"===g.type},button:function(g){return"button"===g.type||g.nodeName.toLowerCase()==="button"},input:function(g){return/input|select|textarea|button/i.test(g.nodeName)}},setFilters:{first:function(g,i){return i===0},last:function(g,i,n,m){return i===m.length-1},even:function(g,i){return i%2===0},odd:function(g,i){return i%2===1},lt:function(g,i,n){return i<n[3]-0},gt:function(g,i,n){return i>n[3]-0},nth:function(g,i,n){return n[3]-
0===i},eq:function(g,i,n){return n[3]-0===i}},filter:{PSEUDO:function(g,i,n,m){var p=i[1],q=o.filters[p];if(q)return q(g,n,i,m);else if(p==="contains")return(g.textContent||g.innerText||k.getText([g])||"").indexOf(i[3])>=0;else if(p==="not"){i=i[3];n=0;for(m=i.length;n<m;n++)if(i[n]===g)return false;return true}else k.error("Syntax error, unrecognized expression: "+p)},CHILD:function(g,i){var n=i[1],m=g;switch(n){case "only":case "first":for(;m=m.previousSibling;)if(m.nodeType===1)return false;if(n===
"first")return true;m=g;case "last":for(;m=m.nextSibling;)if(m.nodeType===1)return false;return true;case "nth":n=i[2];var p=i[3];if(n===1&&p===0)return true;var q=i[0],u=g.parentNode;if(u&&(u.sizcache!==q||!g.nodeIndex)){var y=0;for(m=u.firstChild;m;m=m.nextSibling)if(m.nodeType===1)m.nodeIndex=++y;u.sizcache=q}m=g.nodeIndex-p;return n===0?m===0:m%n===0&&m/n>=0}},ID:function(g,i){return g.nodeType===1&&g.getAttribute("id")===i},TAG:function(g,i){return i==="*"&&g.nodeType===1||g.nodeName.toLowerCase()===
i},CLASS:function(g,i){return(" "+(g.className||g.getAttribute("class"))+" ").indexOf(i)>-1},ATTR:function(g,i){var n=i[1];n=o.attrHandle[n]?o.attrHandle[n](g):g[n]!=null?g[n]:g.getAttribute(n);var m=n+"",p=i[2],q=i[4];return n==null?p==="!=":p==="="?m===q:p==="*="?m.indexOf(q)>=0:p==="~="?(" "+m+" ").indexOf(q)>=0:!q?m&&n!==false:p==="!="?m!==q:p==="^="?m.indexOf(q)===0:p==="$="?m.substr(m.length-q.length)===q:p==="|="?m===q||m.substr(0,q.length+1)===q+"-":false},POS:function(g,i,n,m){var p=o.setFilters[i[2]];
if(p)return p(g,n,i,m)}}},x=o.match.POS,r=function(g,i){return"\\"+(i-0+1)},A;for(A in o.match){o.match[A]=RegExp(o.match[A].source+/(?![^\[]*\])(?![^\(]*\))/.source);o.leftMatch[A]=RegExp(/(^(?:.|\r|\n)*?)/.source+o.match[A].source.replace(/\\(\d+)/g,r))}var C=function(g,i){g=Array.prototype.slice.call(g,0);if(i){i.push.apply(i,g);return i}return g};try{Array.prototype.slice.call(t.documentElement.childNodes,0)}catch(J){C=function(g,i){var n=0,m=i||[];if(f.call(g)==="[object Array]")Array.prototype.push.apply(m,
g);else if(typeof g.length==="number")for(var p=g.length;n<p;n++)m.push(g[n]);else for(;g[n];n++)m.push(g[n]);return m}}var w,I;if(t.documentElement.compareDocumentPosition)w=function(g,i){if(g===i){h=true;return 0}if(!g.compareDocumentPosition||!i.compareDocumentPosition)return g.compareDocumentPosition?-1:1;return g.compareDocumentPosition(i)&4?-1:1};else{w=function(g,i){var n,m,p=[],q=[];n=g.parentNode;m=i.parentNode;var u=n;if(g===i){h=true;return 0}else if(n===m)return I(g,i);else if(n){if(!m)return 1}else return-1;
for(;u;){p.unshift(u);u=u.parentNode}for(u=m;u;){q.unshift(u);u=u.parentNode}n=p.length;m=q.length;for(u=0;u<n&&u<m;u++)if(p[u]!==q[u])return I(p[u],q[u]);return u===n?I(g,q[u],-1):I(p[u],i,1)};I=function(g,i,n){if(g===i)return n;for(g=g.nextSibling;g;){if(g===i)return-1;g=g.nextSibling}return 1}}k.getText=function(g){for(var i="",n,m=0;g[m];m++){n=g[m];if(n.nodeType===3||n.nodeType===4)i+=n.nodeValue;else if(n.nodeType!==8)i+=k.getText(n.childNodes)}return i};(function(){var g=t.createElement("div"),
i="script"+(new Date).getTime(),n=t.documentElement;g.innerHTML="<a name='"+i+"'/>";n.insertBefore(g,n.firstChild);if(t.getElementById(i)){o.find.ID=function(m,p,q){if(typeof p.getElementById!=="undefined"&&!q)return(p=p.getElementById(m[1]))?p.id===m[1]||typeof p.getAttributeNode!=="undefined"&&p.getAttributeNode("id").nodeValue===m[1]?[p]:B:[]};o.filter.ID=function(m,p){var q=typeof m.getAttributeNode!=="undefined"&&m.getAttributeNode("id");return m.nodeType===1&&q&&q.nodeValue===p}}n.removeChild(g);
n=g=null})();(function(){var g=t.createElement("div");g.appendChild(t.createComment(""));if(g.getElementsByTagName("*").length>0)o.find.TAG=function(i,n){var m=n.getElementsByTagName(i[1]);if(i[1]==="*"){for(var p=[],q=0;m[q];q++)m[q].nodeType===1&&p.push(m[q]);m=p}return m};g.innerHTML="<a href='#'></a>";if(g.firstChild&&typeof g.firstChild.getAttribute!=="undefined"&&g.firstChild.getAttribute("href")!=="#")o.attrHandle.href=function(i){return i.getAttribute("href",2)};g=null})();t.querySelectorAll&&
function(){var g=k,i=t.createElement("div");i.innerHTML="<p class='TEST'></p>";if(!(i.querySelectorAll&&i.querySelectorAll(".TEST").length===0)){k=function(m,p,q,u){p=p||t;m=m.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!u&&!k.isXML(p))if(p.nodeType===9)try{return C(p.querySelectorAll(m),q)}catch(y){}else if(p.nodeType===1&&p.nodeName.toLowerCase()!=="object"){var F=p.getAttribute("id"),M=F||"__sizzle__";F||p.setAttribute("id",M);try{return C(p.querySelectorAll("#"+M+" "+m),q)}catch(N){}finally{F||
p.removeAttribute("id")}}return g(m,p,q,u)};for(var n in g)k[n]=g[n];i=null}}();(function(){var g=t.documentElement,i=g.matchesSelector||g.mozMatchesSelector||g.webkitMatchesSelector||g.msMatchesSelector,n=false;try{i.call(t.documentElement,"[test!='']:sizzle")}catch(m){n=true}if(i)k.matchesSelector=function(p,q){q=q.replace(/\=\s*([^'"\]]*)\s*\]/g,"='$1']");if(!k.isXML(p))try{if(n||!o.match.PSEUDO.test(q)&&!/!=/.test(q))return i.call(p,q)}catch(u){}return k(q,null,null,[p]).length>0}})();(function(){var g=
t.createElement("div");g.innerHTML="<div class='test e'></div><div class='test'></div>";if(!(!g.getElementsByClassName||g.getElementsByClassName("e").length===0)){g.lastChild.className="e";if(g.getElementsByClassName("e").length!==1){o.order.splice(1,0,"CLASS");o.find.CLASS=function(i,n,m){if(typeof n.getElementsByClassName!=="undefined"&&!m)return n.getElementsByClassName(i[1])};g=null}}})();k.contains=t.documentElement.contains?function(g,i){return g!==i&&(g.contains?g.contains(i):true)}:t.documentElement.compareDocumentPosition?
function(g,i){return!!(g.compareDocumentPosition(i)&16)}:function(){return false};k.isXML=function(g){return(g=(g?g.ownerDocument||g:0).documentElement)?g.nodeName!=="HTML":false};var L=function(g,i){for(var n,m=[],p="",q=i.nodeType?[i]:i;n=o.match.PSEUDO.exec(g);){p+=n[0];g=g.replace(o.match.PSEUDO,"")}g=o.relative[g]?g+"*":g;n=0;for(var u=q.length;n<u;n++)k(g,q[n],m);return k.filter(p,m)};c.find=k;c.expr=k.selectors;c.expr[":"]=c.expr.filters;c.unique=k.uniqueSort;c.text=k.getText;c.isXMLDoc=k.isXML;
c.contains=k.contains})();var Za=/Until$/,$a=/^(?:parents|prevUntil|prevAll)/,ab=/,/,Na=/^.[^:#\[\.,]*$/,bb=Array.prototype.slice,cb=c.expr.match.POS;c.fn.extend({find:function(a){for(var b=this.pushStack("","find",a),d=0,e=0,f=this.length;e<f;e++){d=b.length;c.find(a,this[e],b);if(e>0)for(var h=d;h<b.length;h++)for(var l=0;l<d;l++)if(b[l]===b[h]){b.splice(h--,1);break}}return b},has:function(a){var b=c(a);return this.filter(function(){for(var d=0,e=b.length;d<e;d++)if(c.contains(this,b[d]))return true})},
not:function(a){return this.pushStack(ma(this,a,false),"not",a)},filter:function(a){return this.pushStack(ma(this,a,true),"filter",a)},is:function(a){return!!a&&c.filter(a,this).length>0},closest:function(a,b){var d=[],e,f,h=this[0];if(c.isArray(a)){var l,k={},o=1;if(h&&a.length){e=0;for(f=a.length;e<f;e++){l=a[e];k[l]||(k[l]=c.expr.match.POS.test(l)?c(l,b||this.context):l)}for(;h&&h.ownerDocument&&h!==b;){for(l in k){e=k[l];if(e.jquery?e.index(h)>-1:c(h).is(e))d.push({selector:l,elem:h,level:o})}h=
h.parentNode;o++}}return d}l=cb.test(a)?c(a,b||this.context):null;e=0;for(f=this.length;e<f;e++)for(h=this[e];h;)if(l?l.index(h)>-1:c.find.matchesSelector(h,a)){d.push(h);break}else{h=h.parentNode;if(!h||!h.ownerDocument||h===b)break}d=d.length>1?c.unique(d):d;return this.pushStack(d,"closest",a)},index:function(a){if(!a||typeof a==="string")return c.inArray(this[0],a?c(a):this.parent().children());return c.inArray(a.jquery?a[0]:a,this)},add:function(a,b){var d=typeof a==="string"?c(a,b||this.context):
c.makeArray(a),e=c.merge(this.get(),d);return this.pushStack(!d[0]||!d[0].parentNode||d[0].parentNode.nodeType===11||!e[0]||!e[0].parentNode||e[0].parentNode.nodeType===11?e:c.unique(e))},andSelf:function(){return this.add(this.prevObject)}});c.each({parent:function(a){return(a=a.parentNode)&&a.nodeType!==11?a:null},parents:function(a){return c.dir(a,"parentNode")},parentsUntil:function(a,b,d){return c.dir(a,"parentNode",d)},next:function(a){return c.nth(a,2,"nextSibling")},prev:function(a){return c.nth(a,
2,"previousSibling")},nextAll:function(a){return c.dir(a,"nextSibling")},prevAll:function(a){return c.dir(a,"previousSibling")},nextUntil:function(a,b,d){return c.dir(a,"nextSibling",d)},prevUntil:function(a,b,d){return c.dir(a,"previousSibling",d)},siblings:function(a){return c.sibling(a.parentNode.firstChild,a)},children:function(a){return c.sibling(a.firstChild)},contents:function(a){return c.nodeName(a,"iframe")?a.contentDocument||a.contentWindow.document:c.makeArray(a.childNodes)}},function(a,
b){c.fn[a]=function(d,e){var f=c.map(this,b,d);Za.test(a)||(e=d);if(e&&typeof e==="string")f=c.filter(e,f);f=this.length>1?c.unique(f):f;if((this.length>1||ab.test(e))&&$a.test(a))f=f.reverse();return this.pushStack(f,a,bb.call(arguments).join(","))}});c.extend({filter:function(a,b,d){if(d)a=":not("+a+")";return b.length===1?c.find.matchesSelector(b[0],a)?[b[0]]:[]:c.find.matches(a,b)},dir:function(a,b,d){var e=[];for(a=a[b];a&&a.nodeType!==9&&(d===B||a.nodeType!==1||!c(a).is(d));){a.nodeType===1&&
e.push(a);a=a[b]}return e},nth:function(a,b,d){b=b||1;for(var e=0;a;a=a[d])if(a.nodeType===1&&++e===b)break;return a},sibling:function(a,b){for(var d=[];a;a=a.nextSibling)a.nodeType===1&&a!==b&&d.push(a);return d}});var za=/ jQuery\d+="(?:\d+|null)"/g,$=/^\s+/,Aa=/<(?!area|br|col|embed|hr|img|input|link|meta|param)(([\w:]+)[^>]*)\/>/ig,Ba=/<([\w:]+)/,db=/<tbody/i,eb=/<|&#?\w+;/,Ca=/<(?:script|object|embed|option|style)/i,Da=/checked\s*(?:[^=]|=\s*.checked.)/i,fb=/\=([^="'>\s]+\/)>/g,P={option:[1,
"<select multiple='multiple'>","</select>"],legend:[1,"<fieldset>","</fieldset>"],thead:[1,"<table>","</table>"],tr:[2,"<table><tbody>","</tbody></table>"],td:[3,"<table><tbody><tr>","</tr></tbody></table>"],col:[2,"<table><tbody></tbody><colgroup>","</colgroup></table>"],area:[1,"<map>","</map>"],_default:[0,"",""]};P.optgroup=P.option;P.tbody=P.tfoot=P.colgroup=P.caption=P.thead;P.th=P.td;if(!c.support.htmlSerialize)P._default=[1,"div<div>","</div>"];c.fn.extend({text:function(a){if(c.isFunction(a))return this.each(function(b){var d=
c(this);d.text(a.call(this,b,d.text()))});if(typeof a!=="object"&&a!==B)return this.empty().append((this[0]&&this[0].ownerDocument||t).createTextNode(a));return c.text(this)},wrapAll:function(a){if(c.isFunction(a))return this.each(function(d){c(this).wrapAll(a.call(this,d))});if(this[0]){var b=c(a,this[0].ownerDocument).eq(0).clone(true);this[0].parentNode&&b.insertBefore(this[0]);b.map(function(){for(var d=this;d.firstChild&&d.firstChild.nodeType===1;)d=d.firstChild;return d}).append(this)}return this},
wrapInner:function(a){if(c.isFunction(a))return this.each(function(b){c(this).wrapInner(a.call(this,b))});return this.each(function(){var b=c(this),d=b.contents();d.length?d.wrapAll(a):b.append(a)})},wrap:function(a){return this.each(function(){c(this).wrapAll(a)})},unwrap:function(){return this.parent().each(function(){c.nodeName(this,"body")||c(this).replaceWith(this.childNodes)}).end()},append:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.appendChild(a)})},
prepend:function(){return this.domManip(arguments,true,function(a){this.nodeType===1&&this.insertBefore(a,this.firstChild)})},before:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,this)});else if(arguments.length){var a=c(arguments[0]);a.push.apply(a,this.toArray());return this.pushStack(a,"before",arguments)}},after:function(){if(this[0]&&this[0].parentNode)return this.domManip(arguments,false,function(b){this.parentNode.insertBefore(b,
this.nextSibling)});else if(arguments.length){var a=this.pushStack(this,"after",arguments);a.push.apply(a,c(arguments[0]).toArray());return a}},remove:function(a,b){for(var d=0,e;(e=this[d])!=null;d++)if(!a||c.filter(a,[e]).length){if(!b&&e.nodeType===1){c.cleanData(e.getElementsByTagName("*"));c.cleanData([e])}e.parentNode&&e.parentNode.removeChild(e)}return this},empty:function(){for(var a=0,b;(b=this[a])!=null;a++)for(b.nodeType===1&&c.cleanData(b.getElementsByTagName("*"));b.firstChild;)b.removeChild(b.firstChild);
return this},clone:function(a){var b=this.map(function(){if(!c.support.noCloneEvent&&!c.isXMLDoc(this)){var d=this.outerHTML,e=this.ownerDocument;if(!d){d=e.createElement("div");d.appendChild(this.cloneNode(true));d=d.innerHTML}return c.clean([d.replace(za,"").replace(fb,'="$1">').replace($,"")],e)[0]}else return this.cloneNode(true)});if(a===true){na(this,b);na(this.find("*"),b.find("*"))}return b},html:function(a){if(a===B)return this[0]&&this[0].nodeType===1?this[0].innerHTML.replace(za,""):null;
else if(typeof a==="string"&&!Ca.test(a)&&(c.support.leadingWhitespace||!$.test(a))&&!P[(Ba.exec(a)||["",""])[1].toLowerCase()]){a=a.replace(Aa,"<$1></$2>");try{for(var b=0,d=this.length;b<d;b++)if(this[b].nodeType===1){c.cleanData(this[b].getElementsByTagName("*"));this[b].innerHTML=a}}catch(e){this.empty().append(a)}}else c.isFunction(a)?this.each(function(f){var h=c(this);h.html(a.call(this,f,h.html()))}):this.empty().append(a);return this},replaceWith:function(a){if(this[0]&&this[0].parentNode){if(c.isFunction(a))return this.each(function(b){var d=
c(this),e=d.html();d.replaceWith(a.call(this,b,e))});if(typeof a!=="string")a=c(a).detach();return this.each(function(){var b=this.nextSibling,d=this.parentNode;c(this).remove();b?c(b).before(a):c(d).append(a)})}else return this.pushStack(c(c.isFunction(a)?a():a),"replaceWith",a)},detach:function(a){return this.remove(a,true)},domManip:function(a,b,d){var e,f,h,l=a[0],k=[];if(!c.support.checkClone&&arguments.length===3&&typeof l==="string"&&Da.test(l))return this.each(function(){c(this).domManip(a,
b,d,true)});if(c.isFunction(l))return this.each(function(x){var r=c(this);a[0]=l.call(this,x,b?r.html():B);r.domManip(a,b,d)});if(this[0]){e=l&&l.parentNode;e=c.support.parentNode&&e&&e.nodeType===11&&e.childNodes.length===this.length?{fragment:e}:c.buildFragment(a,this,k);h=e.fragment;if(f=h.childNodes.length===1?h=h.firstChild:h.firstChild){b=b&&c.nodeName(f,"tr");f=0;for(var o=this.length;f<o;f++)d.call(b?c.nodeName(this[f],"table")?this[f].getElementsByTagName("tbody")[0]||this[f].appendChild(this[f].ownerDocument.createElement("tbody")):
this[f]:this[f],f>0||e.cacheable||this.length>1?h.cloneNode(true):h)}k.length&&c.each(k,Oa)}return this}});c.buildFragment=function(a,b,d){var e,f,h;b=b&&b[0]?b[0].ownerDocument||b[0]:t;if(a.length===1&&typeof a[0]==="string"&&a[0].length<512&&b===t&&!Ca.test(a[0])&&(c.support.checkClone||!Da.test(a[0]))){f=true;if(h=c.fragments[a[0]])if(h!==1)e=h}if(!e){e=b.createDocumentFragment();c.clean(a,b,e,d)}if(f)c.fragments[a[0]]=h?e:1;return{fragment:e,cacheable:f}};c.fragments={};c.each({appendTo:"append",
prependTo:"prepend",insertBefore:"before",insertAfter:"after",replaceAll:"replaceWith"},function(a,b){c.fn[a]=function(d){var e=[];d=c(d);var f=this.length===1&&this[0].parentNode;if(f&&f.nodeType===11&&f.childNodes.length===1&&d.length===1){d[b](this[0]);return this}else{f=0;for(var h=d.length;f<h;f++){var l=(f>0?this.clone(true):this).get();c(d[f])[b](l);e=e.concat(l)}return this.pushStack(e,a,d.selector)}}});c.extend({clean:function(a,b,d,e){b=b||t;if(typeof b.createElement==="undefined")b=b.ownerDocument||
b[0]&&b[0].ownerDocument||t;for(var f=[],h=0,l;(l=a[h])!=null;h++){if(typeof l==="number")l+="";if(l){if(typeof l==="string"&&!eb.test(l))l=b.createTextNode(l);else if(typeof l==="string"){l=l.replace(Aa,"<$1></$2>");var k=(Ba.exec(l)||["",""])[1].toLowerCase(),o=P[k]||P._default,x=o[0],r=b.createElement("div");for(r.innerHTML=o[1]+l+o[2];x--;)r=r.lastChild;if(!c.support.tbody){x=db.test(l);k=k==="table"&&!x?r.firstChild&&r.firstChild.childNodes:o[1]==="<table>"&&!x?r.childNodes:[];for(o=k.length-
1;o>=0;--o)c.nodeName(k[o],"tbody")&&!k[o].childNodes.length&&k[o].parentNode.removeChild(k[o])}!c.support.leadingWhitespace&&$.test(l)&&r.insertBefore(b.createTextNode($.exec(l)[0]),r.firstChild);l=r.childNodes}if(l.nodeType)f.push(l);else f=c.merge(f,l)}}if(d)for(h=0;f[h];h++)if(e&&c.nodeName(f[h],"script")&&(!f[h].type||f[h].type.toLowerCase()==="text/javascript"))e.push(f[h].parentNode?f[h].parentNode.removeChild(f[h]):f[h]);else{f[h].nodeType===1&&f.splice.apply(f,[h+1,0].concat(c.makeArray(f[h].getElementsByTagName("script"))));
d.appendChild(f[h])}return f},cleanData:function(a){for(var b,d,e=c.cache,f=c.event.special,h=c.support.deleteExpando,l=0,k;(k=a[l])!=null;l++)if(!(k.nodeName&&c.noData[k.nodeName.toLowerCase()]))if(d=k[c.expando]){if((b=e[d])&&b.events)for(var o in b.events)f[o]?c.event.remove(k,o):c.removeEvent(k,o,b.handle);if(h)delete k[c.expando];else k.removeAttribute&&k.removeAttribute(c.expando);delete e[d]}}});var Ea=/alpha\([^)]*\)/i,gb=/opacity=([^)]*)/,hb=/-([a-z])/ig,ib=/([A-Z])/g,Fa=/^-?\d+(?:px)?$/i,
jb=/^-?\d/,kb={position:"absolute",visibility:"hidden",display:"block"},Pa=["Left","Right"],Qa=["Top","Bottom"],W,Ga,aa,lb=function(a,b){return b.toUpperCase()};c.fn.css=function(a,b){if(arguments.length===2&&b===B)return this;return c.access(this,a,b,true,function(d,e,f){return f!==B?c.style(d,e,f):c.css(d,e)})};c.extend({cssHooks:{opacity:{get:function(a,b){if(b){var d=W(a,"opacity","opacity");return d===""?"1":d}else return a.style.opacity}}},cssNumber:{zIndex:true,fontWeight:true,opacity:true,
zoom:true,lineHeight:true},cssProps:{"float":c.support.cssFloat?"cssFloat":"styleFloat"},style:function(a,b,d,e){if(!(!a||a.nodeType===3||a.nodeType===8||!a.style)){var f,h=c.camelCase(b),l=a.style,k=c.cssHooks[h];b=c.cssProps[h]||h;if(d!==B){if(!(typeof d==="number"&&isNaN(d)||d==null)){if(typeof d==="number"&&!c.cssNumber[h])d+="px";if(!k||!("set"in k)||(d=k.set(a,d))!==B)try{l[b]=d}catch(o){}}}else{if(k&&"get"in k&&(f=k.get(a,false,e))!==B)return f;return l[b]}}},css:function(a,b,d){var e,f=c.camelCase(b),
h=c.cssHooks[f];b=c.cssProps[f]||f;if(h&&"get"in h&&(e=h.get(a,true,d))!==B)return e;else if(W)return W(a,b,f)},swap:function(a,b,d){var e={},f;for(f in b){e[f]=a.style[f];a.style[f]=b[f]}d.call(a);for(f in b)a.style[f]=e[f]},camelCase:function(a){return a.replace(hb,lb)}});c.curCSS=c.css;c.each(["height","width"],function(a,b){c.cssHooks[b]={get:function(d,e,f){var h;if(e){if(d.offsetWidth!==0)h=oa(d,b,f);else c.swap(d,kb,function(){h=oa(d,b,f)});if(h<=0){h=W(d,b,b);if(h==="0px"&&aa)h=aa(d,b,b);
if(h!=null)return h===""||h==="auto"?"0px":h}if(h<0||h==null){h=d.style[b];return h===""||h==="auto"?"0px":h}return typeof h==="string"?h:h+"px"}},set:function(d,e){if(Fa.test(e)){e=parseFloat(e);if(e>=0)return e+"px"}else return e}}});if(!c.support.opacity)c.cssHooks.opacity={get:function(a,b){return gb.test((b&&a.currentStyle?a.currentStyle.filter:a.style.filter)||"")?parseFloat(RegExp.$1)/100+"":b?"1":""},set:function(a,b){var d=a.style;d.zoom=1;var e=c.isNaN(b)?"":"alpha(opacity="+b*100+")",f=
d.filter||"";d.filter=Ea.test(f)?f.replace(Ea,e):d.filter+" "+e}};if(t.defaultView&&t.defaultView.getComputedStyle)Ga=function(a,b,d){var e;d=d.replace(ib,"-$1").toLowerCase();if(!(b=a.ownerDocument.defaultView))return B;if(b=b.getComputedStyle(a,null)){e=b.getPropertyValue(d);if(e===""&&!c.contains(a.ownerDocument.documentElement,a))e=c.style(a,d)}return e};if(t.documentElement.currentStyle)aa=function(a,b){var d,e,f=a.currentStyle&&a.currentStyle[b],h=a.style;if(!Fa.test(f)&&jb.test(f)){d=h.left;
e=a.runtimeStyle.left;a.runtimeStyle.left=a.currentStyle.left;h.left=b==="fontSize"?"1em":f||0;f=h.pixelLeft+"px";h.left=d;a.runtimeStyle.left=e}return f===""?"auto":f};W=Ga||aa;if(c.expr&&c.expr.filters){c.expr.filters.hidden=function(a){var b=a.offsetHeight;return a.offsetWidth===0&&b===0||!c.support.reliableHiddenOffsets&&(a.style.display||c.css(a,"display"))==="none"};c.expr.filters.visible=function(a){return!c.expr.filters.hidden(a)}}var mb=c.now(),nb=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi,
ob=/^(?:select|textarea)/i,pb=/^(?:color|date|datetime|email|hidden|month|number|password|range|search|tel|text|time|url|week)$/i,qb=/^(?:GET|HEAD)$/,Ra=/\[\]$/,T=/\=\?(&|$)/,ja=/\?/,rb=/([?&])_=[^&]*/,sb=/^(\w+:)?\/\/([^\/?#]+)/,tb=/%20/g,ub=/#.*$/,Ha=c.fn.load;c.fn.extend({load:function(a,b,d){if(typeof a!=="string"&&Ha)return Ha.apply(this,arguments);else if(!this.length)return this;var e=a.indexOf(" ");if(e>=0){var f=a.slice(e,a.length);a=a.slice(0,e)}e="GET";if(b)if(c.isFunction(b)){d=b;b=null}else if(typeof b===
"object"){b=c.param(b,c.ajaxSettings.traditional);e="POST"}var h=this;c.ajax({url:a,type:e,dataType:"html",data:b,complete:function(l,k){if(k==="success"||k==="notmodified")h.html(f?c("<div>").append(l.responseText.replace(nb,"")).find(f):l.responseText);d&&h.each(d,[l.responseText,k,l])}});return this},serialize:function(){return c.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?c.makeArray(this.elements):this}).filter(function(){return this.name&&
!this.disabled&&(this.checked||ob.test(this.nodeName)||pb.test(this.type))}).map(function(a,b){var d=c(this).val();return d==null?null:c.isArray(d)?c.map(d,function(e){return{name:b.name,value:e}}):{name:b.name,value:d}}).get()}});c.each("ajaxStart ajaxStop ajaxComplete ajaxError ajaxSuccess ajaxSend".split(" "),function(a,b){c.fn[b]=function(d){return this.bind(b,d)}});c.extend({get:function(a,b,d,e){if(c.isFunction(b)){e=e||d;d=b;b=null}return c.ajax({type:"GET",url:a,data:b,success:d,dataType:e})},
getScript:function(a,b){return c.get(a,null,b,"script")},getJSON:function(a,b,d){return c.get(a,b,d,"json")},post:function(a,b,d,e){if(c.isFunction(b)){e=e||d;d=b;b={}}return c.ajax({type:"POST",url:a,data:b,success:d,dataType:e})},ajaxSetup:function(a){c.extend(c.ajaxSettings,a)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return new E.XMLHttpRequest},accepts:{xml:"application/xml, text/xml",html:"text/html",
script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},ajax:function(a){var b=c.extend(true,{},c.ajaxSettings,a),d,e,f,h=b.type.toUpperCase(),l=qb.test(h);b.url=b.url.replace(ub,"");b.context=a&&a.context!=null?a.context:b;if(b.data&&b.processData&&typeof b.data!=="string")b.data=c.param(b.data,b.traditional);if(b.dataType==="jsonp"){if(h==="GET")T.test(b.url)||(b.url+=(ja.test(b.url)?"&":"?")+(b.jsonp||"callback")+"=?");else if(!b.data||
!T.test(b.data))b.data=(b.data?b.data+"&":"")+(b.jsonp||"callback")+"=?";b.dataType="json"}if(b.dataType==="json"&&(b.data&&T.test(b.data)||T.test(b.url))){d=b.jsonpCallback||"jsonp"+mb++;if(b.data)b.data=(b.data+"").replace(T,"="+d+"$1");b.url=b.url.replace(T,"="+d+"$1");b.dataType="script";var k=E[d];E[d]=function(m){if(c.isFunction(k))k(m);else{E[d]=B;try{delete E[d]}catch(p){}}f=m;c.handleSuccess(b,w,e,f);c.handleComplete(b,w,e,f);r&&r.removeChild(A)}}if(b.dataType==="script"&&b.cache===null)b.cache=
false;if(b.cache===false&&l){var o=c.now(),x=b.url.replace(rb,"$1_="+o);b.url=x+(x===b.url?(ja.test(b.url)?"&":"?")+"_="+o:"")}if(b.data&&l)b.url+=(ja.test(b.url)?"&":"?")+b.data;b.global&&c.active++===0&&c.event.trigger("ajaxStart");o=(o=sb.exec(b.url))&&(o[1]&&o[1].toLowerCase()!==location.protocol||o[2].toLowerCase()!==location.host);if(b.dataType==="script"&&h==="GET"&&o){var r=t.getElementsByTagName("head")[0]||t.documentElement,A=t.createElement("script");if(b.scriptCharset)A.charset=b.scriptCharset;
A.src=b.url;if(!d){var C=false;A.onload=A.onreadystatechange=function(){if(!C&&(!this.readyState||this.readyState==="loaded"||this.readyState==="complete")){C=true;c.handleSuccess(b,w,e,f);c.handleComplete(b,w,e,f);A.onload=A.onreadystatechange=null;r&&A.parentNode&&r.removeChild(A)}}}r.insertBefore(A,r.firstChild);return B}var J=false,w=b.xhr();if(w){b.username?w.open(h,b.url,b.async,b.username,b.password):w.open(h,b.url,b.async);try{if(b.data!=null&&!l||a&&a.contentType)w.setRequestHeader("Content-Type",
b.contentType);if(b.ifModified){c.lastModified[b.url]&&w.setRequestHeader("If-Modified-Since",c.lastModified[b.url]);c.etag[b.url]&&w.setRequestHeader("If-None-Match",c.etag[b.url])}o||w.setRequestHeader("X-Requested-With","XMLHttpRequest");w.setRequestHeader("Accept",b.dataType&&b.accepts[b.dataType]?b.accepts[b.dataType]+", */*; q=0.01":b.accepts._default)}catch(I){}if(b.beforeSend&&b.beforeSend.call(b.context,w,b)===false){b.global&&c.active--===1&&c.event.trigger("ajaxStop");w.abort();return false}b.global&&
c.triggerGlobal(b,"ajaxSend",[w,b]);var L=w.onreadystatechange=function(m){if(!w||w.readyState===0||m==="abort"){J||c.handleComplete(b,w,e,f);J=true;if(w)w.onreadystatechange=c.noop}else if(!J&&w&&(w.readyState===4||m==="timeout")){J=true;w.onreadystatechange=c.noop;e=m==="timeout"?"timeout":!c.httpSuccess(w)?"error":b.ifModified&&c.httpNotModified(w,b.url)?"notmodified":"success";var p;if(e==="success")try{f=c.httpData(w,b.dataType,b)}catch(q){e="parsererror";p=q}if(e==="success"||e==="notmodified")d||
c.handleSuccess(b,w,e,f);else c.handleError(b,w,e,p);d||c.handleComplete(b,w,e,f);m==="timeout"&&w.abort();if(b.async)w=null}};try{var g=w.abort;w.abort=function(){w&&Function.prototype.call.call(g,w);L("abort")}}catch(i){}b.async&&b.timeout>0&&setTimeout(function(){w&&!J&&L("timeout")},b.timeout);try{w.send(l||b.data==null?null:b.data)}catch(n){c.handleError(b,w,null,n);c.handleComplete(b,w,e,f)}b.async||L();return w}},param:function(a,b){var d=[],e=function(h,l){l=c.isFunction(l)?l():l;d[d.length]=
encodeURIComponent(h)+"="+encodeURIComponent(l)};if(b===B)b=c.ajaxSettings.traditional;if(c.isArray(a)||a.jquery)c.each(a,function(){e(this.name,this.value)});else for(var f in a)da(f,a[f],b,e);return d.join("&").replace(tb,"+")}});c.extend({active:0,lastModified:{},etag:{},handleError:function(a,b,d,e){a.error&&a.error.call(a.context,b,d,e);a.global&&c.triggerGlobal(a,"ajaxError",[b,a,e])},handleSuccess:function(a,b,d,e){a.success&&a.success.call(a.context,e,d,b);a.global&&c.triggerGlobal(a,"ajaxSuccess",
[b,a])},handleComplete:function(a,b,d){a.complete&&a.complete.call(a.context,b,d);a.global&&c.triggerGlobal(a,"ajaxComplete",[b,a]);a.global&&c.active--===1&&c.event.trigger("ajaxStop")},triggerGlobal:function(a,b,d){(a.context&&a.context.url==null?c(a.context):c.event).trigger(b,d)},httpSuccess:function(a){try{return!a.status&&location.protocol==="file:"||a.status>=200&&a.status<300||a.status===304||a.status===1223}catch(b){}return false},httpNotModified:function(a,b){var d=a.getResponseHeader("Last-Modified"),
e=a.getResponseHeader("Etag");if(d)c.lastModified[b]=d;if(e)c.etag[b]=e;return a.status===304},httpData:function(a,b,d){var e=a.getResponseHeader("content-type")||"",f=b==="xml"||!b&&e.indexOf("xml")>=0;a=f?a.responseXML:a.responseText;f&&a.documentElement.nodeName==="parsererror"&&c.error("parsererror");if(d&&d.dataFilter)a=d.dataFilter(a,b);if(typeof a==="string")if(b==="json"||!b&&e.indexOf("json")>=0)a=c.parseJSON(a);else if(b==="script"||!b&&e.indexOf("javascript")>=0)c.globalEval(a);return a}});
if(E.ActiveXObject)c.ajaxSettings.xhr=function(){if(E.location.protocol!=="file:")try{return new E.XMLHttpRequest}catch(a){}try{return new E.ActiveXObject("Microsoft.XMLHTTP")}catch(b){}};c.support.ajax=!!c.ajaxSettings.xhr();var ea={},vb=/^(?:toggle|show|hide)$/,wb=/^([+\-]=)?([\d+.\-]+)(.*)$/,ba,pa=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];c.fn.extend({show:function(a,b,d){if(a||a===0)return this.animate(S("show",
3),a,b,d);else{d=0;for(var e=this.length;d<e;d++){a=this[d];b=a.style.display;if(!c.data(a,"olddisplay")&&b==="none")b=a.style.display="";b===""&&c.css(a,"display")==="none"&&c.data(a,"olddisplay",qa(a.nodeName))}for(d=0;d<e;d++){a=this[d];b=a.style.display;if(b===""||b==="none")a.style.display=c.data(a,"olddisplay")||""}return this}},hide:function(a,b,d){if(a||a===0)return this.animate(S("hide",3),a,b,d);else{a=0;for(b=this.length;a<b;a++){d=c.css(this[a],"display");d!=="none"&&c.data(this[a],"olddisplay",
d)}for(a=0;a<b;a++)this[a].style.display="none";return this}},_toggle:c.fn.toggle,toggle:function(a,b,d){var e=typeof a==="boolean";if(c.isFunction(a)&&c.isFunction(b))this._toggle.apply(this,arguments);else a==null||e?this.each(function(){var f=e?a:c(this).is(":hidden");c(this)[f?"show":"hide"]()}):this.animate(S("toggle",3),a,b,d);return this},fadeTo:function(a,b,d,e){return this.filter(":hidden").css("opacity",0).show().end().animate({opacity:b},a,d,e)},animate:function(a,b,d,e){var f=c.speed(b,
d,e);if(c.isEmptyObject(a))return this.each(f.complete);return this[f.queue===false?"each":"queue"](function(){var h=c.extend({},f),l,k=this.nodeType===1,o=k&&c(this).is(":hidden"),x=this;for(l in a){var r=c.camelCase(l);if(l!==r){a[r]=a[l];delete a[l];l=r}if(a[l]==="hide"&&o||a[l]==="show"&&!o)return h.complete.call(this);if(k&&(l==="height"||l==="width")){h.overflow=[this.style.overflow,this.style.overflowX,this.style.overflowY];if(c.css(this,"display")==="inline"&&c.css(this,"float")==="none")if(c.support.inlineBlockNeedsLayout)if(qa(this.nodeName)===
"inline")this.style.display="inline-block";else{this.style.display="inline";this.style.zoom=1}else this.style.display="inline-block"}if(c.isArray(a[l])){(h.specialEasing=h.specialEasing||{})[l]=a[l][1];a[l]=a[l][0]}}if(h.overflow!=null)this.style.overflow="hidden";h.curAnim=c.extend({},a);c.each(a,function(A,C){var J=new c.fx(x,h,A);if(vb.test(C))J[C==="toggle"?o?"show":"hide":C](a);else{var w=wb.exec(C),I=J.cur()||0;if(w){var L=parseFloat(w[2]),g=w[3]||"px";if(g!=="px"){c.style(x,A,(L||1)+g);I=(L||
1)/J.cur()*I;c.style(x,A,I+g)}if(w[1])L=(w[1]==="-="?-1:1)*L+I;J.custom(I,L,g)}else J.custom(I,C,"")}});return true})},stop:function(a,b){var d=c.timers;a&&this.queue([]);this.each(function(){for(var e=d.length-1;e>=0;e--)if(d[e].elem===this){b&&d[e](true);d.splice(e,1)}});b||this.dequeue();return this}});c.each({slideDown:S("show",1),slideUp:S("hide",1),slideToggle:S("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"},fadeToggle:{opacity:"toggle"}},function(a,b){c.fn[a]=function(d,e,f){return this.animate(b,
d,e,f)}});c.extend({speed:function(a,b,d){var e=a&&typeof a==="object"?c.extend({},a):{complete:d||!d&&b||c.isFunction(a)&&a,duration:a,easing:d&&b||b&&!c.isFunction(b)&&b};e.duration=c.fx.off?0:typeof e.duration==="number"?e.duration:e.duration in c.fx.speeds?c.fx.speeds[e.duration]:c.fx.speeds._default;e.old=e.complete;e.complete=function(){e.queue!==false&&c(this).dequeue();c.isFunction(e.old)&&e.old.call(this)};return e},easing:{linear:function(a,b,d,e){return d+e*a},swing:function(a,b,d,e){return(-Math.cos(a*
Math.PI)/2+0.5)*e+d}},timers:[],fx:function(a,b,d){this.options=b;this.elem=a;this.prop=d;if(!b.orig)b.orig={}}});c.fx.prototype={update:function(){this.options.step&&this.options.step.call(this.elem,this.now,this);(c.fx.step[this.prop]||c.fx.step._default)(this)},cur:function(){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null))return this.elem[this.prop];var a=parseFloat(c.css(this.elem,this.prop));return a&&a>-1E4?a:0},custom:function(a,b,d){function e(l){return f.step(l)}
var f=this,h=c.fx;this.startTime=c.now();this.start=a;this.end=b;this.unit=d||this.unit||"px";this.now=this.start;this.pos=this.state=0;e.elem=this.elem;if(e()&&c.timers.push(e)&&!ba)ba=setInterval(h.tick,h.interval)},show:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.show=true;this.custom(this.prop==="width"||this.prop==="height"?1:0,this.cur());c(this.elem).show()},hide:function(){this.options.orig[this.prop]=c.style(this.elem,this.prop);this.options.hide=true;
this.custom(this.cur(),0)},step:function(a){var b=c.now(),d=true;if(a||b>=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;for(var e in this.options.curAnim)if(this.options.curAnim[e]!==true)d=false;if(d){if(this.options.overflow!=null&&!c.support.shrinkWrapBlocks){var f=this.elem,h=this.options;c.each(["","X","Y"],function(k,o){f.style["overflow"+o]=h.overflow[k]})}this.options.hide&&c(this.elem).hide();if(this.options.hide||
this.options.show)for(var l in this.options.curAnim)c.style(this.elem,l,this.options.orig[l]);this.options.complete.call(this.elem)}return false}else{a=b-this.startTime;this.state=a/this.options.duration;b=this.options.easing||(c.easing.swing?"swing":"linear");this.pos=c.easing[this.options.specialEasing&&this.options.specialEasing[this.prop]||b](this.state,a,0,1,this.options.duration);this.now=this.start+(this.end-this.start)*this.pos;this.update()}return true}};c.extend(c.fx,{tick:function(){for(var a=
c.timers,b=0;b<a.length;b++)a[b]()||a.splice(b--,1);a.length||c.fx.stop()},interval:13,stop:function(){clearInterval(ba);ba=null},speeds:{slow:600,fast:200,_default:400},step:{opacity:function(a){c.style(a.elem,"opacity",a.now)},_default:function(a){if(a.elem.style&&a.elem.style[a.prop]!=null)a.elem.style[a.prop]=(a.prop==="width"||a.prop==="height"?Math.max(0,a.now):a.now)+a.unit;else a.elem[a.prop]=a.now}}});if(c.expr&&c.expr.filters)c.expr.filters.animated=function(a){return c.grep(c.timers,function(b){return a===
b.elem}).length};var xb=/^t(?:able|d|h)$/i,Ia=/^(?:body|html)$/i;c.fn.offset="getBoundingClientRect"in t.documentElement?function(a){var b=this[0],d;if(a)return this.each(function(l){c.offset.setOffset(this,a,l)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);try{d=b.getBoundingClientRect()}catch(e){}var f=b.ownerDocument,h=f.documentElement;if(!d||!c.contains(h,b))return d||{top:0,left:0};b=f.body;f=fa(f);return{top:d.top+(f.pageYOffset||c.support.boxModel&&
h.scrollTop||b.scrollTop)-(h.clientTop||b.clientTop||0),left:d.left+(f.pageXOffset||c.support.boxModel&&h.scrollLeft||b.scrollLeft)-(h.clientLeft||b.clientLeft||0)}}:function(a){var b=this[0];if(a)return this.each(function(x){c.offset.setOffset(this,a,x)});if(!b||!b.ownerDocument)return null;if(b===b.ownerDocument.body)return c.offset.bodyOffset(b);c.offset.initialize();var d,e=b.offsetParent,f=b.ownerDocument,h=f.documentElement,l=f.body;d=(f=f.defaultView)?f.getComputedStyle(b,null):b.currentStyle;
for(var k=b.offsetTop,o=b.offsetLeft;(b=b.parentNode)&&b!==l&&b!==h;){if(c.offset.supportsFixedPosition&&d.position==="fixed")break;d=f?f.getComputedStyle(b,null):b.currentStyle;k-=b.scrollTop;o-=b.scrollLeft;if(b===e){k+=b.offsetTop;o+=b.offsetLeft;if(c.offset.doesNotAddBorder&&!(c.offset.doesAddBorderForTableAndCells&&xb.test(b.nodeName))){k+=parseFloat(d.borderTopWidth)||0;o+=parseFloat(d.borderLeftWidth)||0}e=b.offsetParent}if(c.offset.subtractsBorderForOverflowNotVisible&&d.overflow!=="visible"){k+=
parseFloat(d.borderTopWidth)||0;o+=parseFloat(d.borderLeftWidth)||0}d=d}if(d.position==="relative"||d.position==="static"){k+=l.offsetTop;o+=l.offsetLeft}if(c.offset.supportsFixedPosition&&d.position==="fixed"){k+=Math.max(h.scrollTop,l.scrollTop);o+=Math.max(h.scrollLeft,l.scrollLeft)}return{top:k,left:o}};c.offset={initialize:function(){var a=t.body,b=t.createElement("div"),d,e,f,h=parseFloat(c.css(a,"marginTop"))||0;c.extend(b.style,{position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",
height:"1px",visibility:"hidden"});b.innerHTML="<div style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;'><div></div></div><table style='position:absolute;top:0;left:0;margin:0;border:5px solid #000;padding:0;width:1px;height:1px;' cellpadding='0' cellspacing='0'><tr><td></td></tr></table>";a.insertBefore(b,a.firstChild);d=b.firstChild;e=d.firstChild;f=d.nextSibling.firstChild.firstChild;this.doesNotAddBorder=e.offsetTop!==5;this.doesAddBorderForTableAndCells=
f.offsetTop===5;e.style.position="fixed";e.style.top="20px";this.supportsFixedPosition=e.offsetTop===20||e.offsetTop===15;e.style.position=e.style.top="";d.style.overflow="hidden";d.style.position="relative";this.subtractsBorderForOverflowNotVisible=e.offsetTop===-5;this.doesNotIncludeMarginInBodyOffset=a.offsetTop!==h;a.removeChild(b);c.offset.initialize=c.noop},bodyOffset:function(a){var b=a.offsetTop,d=a.offsetLeft;c.offset.initialize();if(c.offset.doesNotIncludeMarginInBodyOffset){b+=parseFloat(c.css(a,
"marginTop"))||0;d+=parseFloat(c.css(a,"marginLeft"))||0}return{top:b,left:d}},setOffset:function(a,b,d){var e=c.css(a,"position");if(e==="static")a.style.position="relative";var f=c(a),h=f.offset(),l=c.css(a,"top"),k=c.css(a,"left"),o=e==="absolute"&&c.inArray("auto",[l,k])>-1;e={};var x={};if(o)x=f.position();l=o?x.top:parseInt(l,10)||0;k=o?x.left:parseInt(k,10)||0;if(c.isFunction(b))b=b.call(a,d,h);if(b.top!=null)e.top=b.top-h.top+l;if(b.left!=null)e.left=b.left-h.left+k;"using"in b?b.using.call(a,
e):f.css(e)}};c.fn.extend({position:function(){if(!this[0])return null;var a=this[0],b=this.offsetParent(),d=this.offset(),e=Ia.test(b[0].nodeName)?{top:0,left:0}:b.offset();d.top-=parseFloat(c.css(a,"marginTop"))||0;d.left-=parseFloat(c.css(a,"marginLeft"))||0;e.top+=parseFloat(c.css(b[0],"borderTopWidth"))||0;e.left+=parseFloat(c.css(b[0],"borderLeftWidth"))||0;return{top:d.top-e.top,left:d.left-e.left}},offsetParent:function(){return this.map(function(){for(var a=this.offsetParent||t.body;a&&!Ia.test(a.nodeName)&&
c.css(a,"position")==="static";)a=a.offsetParent;return a})}});c.each(["Left","Top"],function(a,b){var d="scroll"+b;c.fn[d]=function(e){var f=this[0],h;if(!f)return null;if(e!==B)return this.each(function(){if(h=fa(this))h.scrollTo(!a?e:c(h).scrollLeft(),a?e:c(h).scrollTop());else this[d]=e});else return(h=fa(f))?"pageXOffset"in h?h[a?"pageYOffset":"pageXOffset"]:c.support.boxModel&&h.document.documentElement[d]||h.document.body[d]:f[d]}});c.each(["Height","Width"],function(a,b){var d=b.toLowerCase();
c.fn["inner"+b]=function(){return this[0]?parseFloat(c.css(this[0],d,"padding")):null};c.fn["outer"+b]=function(e){return this[0]?parseFloat(c.css(this[0],d,e?"margin":"border")):null};c.fn[d]=function(e){var f=this[0];if(!f)return e==null?null:this;if(c.isFunction(e))return this.each(function(l){var k=c(this);k[d](e.call(this,l,k[d]()))});if(c.isWindow(f))return f.document.compatMode==="CSS1Compat"&&f.document.documentElement["client"+b]||f.document.body["client"+b];else if(f.nodeType===9)return Math.max(f.documentElement["client"+
b],f.body["scroll"+b],f.documentElement["scroll"+b],f.body["offset"+b],f.documentElement["offset"+b]);else if(e===B){f=c.css(f,d);var h=parseFloat(f);return c.isNaN(h)?f:h}else return this.css(d,typeof e==="string"?e:e+"px")}})})(window);
/trunk/applications/saisie/squelettes/js/saisie_admin.js
New file
0,0 → 1,154
 
/**
************************************************************************************************
************************************************************************************************
 
Fonctions pour l'administration
 
************************************************************************************************
************************************************************************************************
**/
 
var liste_utilisateurs_en_cours;
var indice_utilisateur_en_cours;
var timerRequeteAutocompletion;
var timerAffichageAutocompletion;
 
function ajouterAutoCompletionUtilisateurs() {
$('input#identite_utilisateur').after('<div class="conteneur_suggestions_utilisateur"></div>');
$('input#identite_utilisateur').parent().addClass('autocompletion');
$('input#identite_utilisateur').attr('autocomplete','off');
$('.conteneur_suggestions_utilisateur').hide();
rendreListeAutoCompletionUtilisateursInteractive('input#identite_utilisateur');
}
 
function obtenirInformationsUtilisateur(nom_utilisateur) {
if(jQuery.trim(nom_utilisateur) == '') {
$('.conteneur_suggestions_utilisateur').hide();
return;
}
$.get(getUrlBaseJrest()+'OdsUtilisateur/'+nom_utilisateur, function(data) {
infos_utilisateurs = jQuery.parseJSON(data);
afficherListeAutoCompletionUtilisateur(infos_utilisateurs);
});
}
 
 
function afficherListeAutoCompletionUtilisateur(tableau_utilisateur) {
liste_utilisateurs_en_cours = tableau_utilisateur;
html_liste_utilisateurs = '<ul class="liste_suggestions">';
for(i = 0; i < tableau_utilisateur.length; i++) {
html_liste_utilisateurs += '<li id="utilisateur_'+i+'" class="element_auto_completion_utilisateur">'+tableau_utilisateur[i]['nom']+'</li>';
}
html_liste_utilisateurs += '</ul>';
$('.conteneur_suggestions_utilisateur').html(html_liste_utilisateurs);
$('.element_auto_completion_utilisateur').hover(function() {
indice = $(this).attr('id').split('_')[1];
mettreEnSurbrillanceUtilisateur(indice);
});
$('.element_auto_completion_utilisateur').click(function() {
$('#identite_utilisateur').val($(this).val());
$('#form_changement_identite').submit();
});
if(tableau_utilisateur.length > 0) {
$('.conteneur_suggestions_utilisateur').show();
mettreEnSurbrillanceUtilisateur(0);
}
}
 
function mettreEnSurbrillanceUtilisateur(indice) {
if(indice_utilisateur_en_cours != null) {
$('#utilisateur_'+indice_utilisateur_en_cours).removeClass('element_selectionne');
}
$('#utilisateur_'+indice).addClass('element_selectionne');
indice_utilisateur_en_cours = indice;
reprogrammerTimerPourCacherListeAutoCompletion();
}
 
function rendreListeAutoCompletionUtilisateursInteractive(selecteur) {
$(selecteur).keyup(function(event) {
if(event.which == 8 || (event.which >= 48 && event.which <= 90)) {
reprogrammerTimerPourCacherListeAutoCompletion();
reprogrammerTimerPourLancerRequeteUtilisateur();
}
});
$(selecteur).keydown(function(event) {
reprogrammerTimerPourCacherListeAutoCompletion();
// entree
if(event.which==13){
selectionnerUtilisateur(indice_utilisateur_en_cours);
}
// haut
if(event.which == 38){
if(indice_utilisateur_en_cours > 0) {
mettreEnSurbrillanceUtilisateur(indice_utilisateur_en_cours - 1);
}
}
// bas
if(event.which == 40){
if(indice_utilisateur_en_cours < liste_utilisateurs_en_cours.length - 1) {
mettreEnSurbrillanceUtilisateur(indice_utilisateur_en_cours + 1);
}
}
});
$('.conteneur_suggestions_utilisateur').blur(function() {
$('.conteneur_suggestions_utilisateur').hide();
});
}
 
function reprogrammerTimerPourCacherListeAutoCompletion() {
if(timerAffichageAutocompletion != null) {
window.clearTimeout(timerAffichageAutocompletion);
}
timerAffichageAutocompletion = window.setTimeout(function() {
$('.conteneur_suggestions_utilisateur').hide();
}, 2000);
}
 
function reprogrammerTimerPourLancerRequeteUtilisateur() {
if(timerRequeteAutocompletion != null) {
window.clearTimeout(timerRequeteAutocompletion);
}
timerRequeteAutocompletion = window.setTimeout(function() {
obtenirInformationsUtilisateur($('input#identite_utilisateur').val());
}, 350);
}
 
function selectionnerUtilisateur(indice) {
infos_utilisateur = liste_utilisateurs_en_cours[indice];
$('input#identite_utilisateur').val(infos_utilisateur['nom']);
$('.conteneur_suggestions_utilisateur').hide();
}
 
$('#identite_utilisateur').ready(function() {
ajouterAutoCompletionUtilisateurs();
});
/trunk/applications/saisie/squelettes/js/.directory
New file
0,0 → 1,3
[Dolphin]
ShowPreview=true
Timestamp=2010,12,1,15,3,34
/trunk/applications/saisie/squelettes/navigation/barre_admin.tpl.html
New file
0,0 → 1,13
<!-- ODS_SAISIE - DEBUT BARRE ADMIN -->
<div id="barre_admin">
<form action="<?= Liens::getUrlDefaut(); ?>" id="form_changement_identite" method="post">
Vous regardez les données de : <input type="text" id="identite_utilisateur" size="10" name="identite_utilisateur" value="<?= AppControleur::getUtilisateur()->getIdentiteNom(); ?>" />
</form>
<div class="export_observation_admin">
<a href="<?= Liens::getUrlExportDonneesObservations() ?>" id="lien_export_observation"> Exporter les observations des membres </a>
</div>
<div class="gestion_espece_admin">
<a href="<?= Liens::getUrlAdministrationEspeces() ?>" id="lien_admin_especes"> Administrer les espèces </a>
</div>
</div>
<!-- ODS_SAISIE - FIN MENU NAVIGATION -->
/trunk/applications/saisie/squelettes/navigation/menu.tpl.html
New file
0,0 → 1,43
<!-- ODS_SAISIE - DEBUT MENU NAVIGATION -->
<div id="retour_au_site">
<ul>
<li>
<a href="<?= $GLOBALS['base_url'];?>/node/13"> Retour au site </a>
</li>
</ul>
</div>
 
<div id="saisie_menu">
<ul class="ods_menu">
<?php if (isset($stations)) : ?>
<?php foreach ($stations as $station) : ?>
<li class="item_menu_station <?= ($station['id'] == $id_station_en_cours) ? 'station_en_cours' : '' ?>">
<a href="<?= $station['url'] ?>"><?=$station['nom']?></a>
<?php if (isset($station['especes']) && $station['id'] == $id_station_en_cours) : ?>
<ul>
<?php foreach (($station['especes']) as $espece) : ?>
<li class="item_menu_espece <?= ($espece['id_espece'] == $id_espece_en_cours) ? 'espece_en_cours' : '' ?>">
<a href="<?= $espece['url'] ?>"><?= $espece['nom_vernaculaire']?></a></li>
<?php endforeach; ?>
<li class="item_menu_espece espece_ajout <?= ($id_espece_en_cours == 'saisie') ? 'espece_en_cours"' : '' ?>">
<a href="<?= Liens::getUrlFormulaireAjoutEspece($station['id']) ?>"> Nouvelle espèce </a>
</li>
</ul>
<?php endif; ?>
</li>
<?php endforeach; ?>
<?php endif; ?>
<li class="item_menu_station station_ajout <?= ($id_station_en_cours == 'saisie') ? 'station_en_cours' : '' ?>">
<a href="<?= Liens::getUrlFormulaireSaisieStation() ?>"> Nouvelle station </a>
</li>
<li>
<div class="export_observation">
<a href="<?= Liens::getUrlExportDonneesObservationsPourUtilisateur(); ?>" > Exporter mes obs </a>
</div>
</li>
</ul>
</div>
<!-- ODS_SAISIE - FIN MENU NAVIGATION -->
/trunk/applications/saisie/squelettes/navigation/fil_ariane.tpl.html
New file
0,0 → 1,6
<ul class="liste_fil_ariane">
<?php foreach($elements_fil as $element) ?>
<li class="element_fil"><a href=""></a></li>
<?php if($element != array_pop($element)) { ?> > <?php } ?>
<?php endforeach ?>
</ul>
/trunk/applications/saisie/squelettes/fiches/evenement_fiche.tpl.html
--- trunk/applications/saisie/squelettes/fiches/individu_fiche.tpl.html (revision 0)
+++ trunk/applications/saisie/squelettes/fiches/individu_fiche.tpl.html (revision 344)
@@ -0,0 +1,77 @@
+<!-- ODS_SAISIE - DEBUT FICHE INDIVIDU -->
+<div id="fiche_individu">
+ <h2 class="titre_fiche"><?= $infos_individu['nom'] ?></h2>
+
+ <hr class="separation_section" />
+
+ <h3 class="titre_section_fiche" > Commentaire sur cet individu </h3>
+ <?php if(!empty($infos_individu['commentaire'])) { ?>
+ <p class="commentaire_individu">&laquo; <?= $infos_individu['commentaire'] ?> &raquo;</p>
+ <?php } ?>
+
+ <hr class="separation_section" />
+
+ <h3 class="titre_section_fiche"> Espèce </h3>
+ <div class="informations_espece">
+ <img title="<?= Liens::getCreditImageEspece($espece['nom_scientifique']) ?>" alt="image de l'espece" class="droite" height="120" src="<?= Liens::getUrlImageEspece($infos_espece['nom_scientifique'],'M') ?>" />
+ <span class="intitule_fiche"> <?= $infos_espece['nom_vernaculaire'] ?> </span>
+ <span class="valeur_fiche"> (<?= $infos_espece['nom_scientifique'] ?>) </span>
+ </div>
+
+ <p class="intitule_fiche description_espece" > <?= $infos_espece['description'] ?></p>
+
+ <hr class="separation_section" />
+
+ <h3 class="titre_section_fiche" > Observations réalisées </h3>
+ <? $premier_element_date = true; ?>
+ <?php foreach ($annees_observations as $annee => $observations) : ?>
+ <span class="pliage observations_individu <?= ($premier_element_date) ? '1er_element_date' : ''; ?>">
+ <? $premier_element_date = false; ?>
+ <h4 id="observation_annee_<?= $annee; ?>" class="annee_observation"> année <?= $annee; ?></h4>
+ <ul>
+ <?php foreach($observations as $stade => $observation) : ?>
+ <li>
+ <div class="pliage stade_<?= aControleur::formaterChaineVersClasseCss($stade);?>">
+ <h4><?= $stade ?></h4>
+ <ul>
+ <?php foreach($observation as $num_stade => $dates) : ?>
+ <li>
+ <?= ' stade '.$num_stade.': ' ?>
+ <?php foreach($dates as $date) : ?>
+ <?php if($date['absence_evenement'] == 0) { ?>
+ <?= $date['date'] ?>
+ <?php } else { ?>
+ Absence
+ <?php } ?>
+ <?php endforeach; ?>
+ </li>
+ <?php endforeach; ?>
+ </ul>
+ </div>
+ </li>
+ <?php endforeach; ?>
+ </ul>
+ </span>
+ <?php endforeach; ?>
+ <?php if(empty($annees_observations)) { ?>
+ <div class="informations"> Aucune observation enregistrée pour cet individu</div>
+ <?php } ?>
+
+ <form class="bouton_formulaire_modification" method="post" action="<?= Liens::getUrlFormulaireModificationIndividu($infos_individu['id_station'], $infos_individu['id_espece'], $infos_individu['id_individu']); ?>" id="form_afficher_modification">
+ <input class=" droite gros_bouton_validation" title="Modifier le nom ou le commentaire de cet individu" type="submit" value="Modifier" />
+ </form>
+
+ <hr class="separation_invisible" />
+
+ <?php if(empty($annees_observations)) { ?>
+ <form class="bouton_formulaire_suppression formulaire_suppression_individu droite" method="post" action="<?= Liens::getUrlSuppressionIndividu($infos_individu['id_station'], $infos_individu['id_espece'], $infos_individu['id_individu']); ?>" id="form_supprimer_individu">
+ <input type="hidden" id="id_individu_a_supprimer" name="id_individu_a_supprimer" value="<?= $infos_individu['id_individu']; ?>" />
+ <input class="gauche gros_bouton_validation lien_suppression" type="submit" value="Supprimer" />
+ </form>
+ <?php } ?>
+
+ <?php if(isset($donnees['erreurs'])) { ?>
+ <p class="attention"> <?= $donnees['erreurs']; ?> </p>
+ <?php } ?>
+</div>
+<!-- ODS_SAISIE - FIN FICHE INDIVIDU -->
/trunk/applications/saisie/squelettes/fiches/station_fiche.tpl.html
New file
0,0 → 1,55
<!-- ODS_SAISIE - DEBUT FICHE STATION -->
<div id="fiche_station">
<h2 id="titre_station"> <?= $infos_station['nom'] ?></h2>
<div class="element_fiche">
<span class="intitule_fiche">Commune / ville :</span>
<span class="valeur_fiche"> <?= $infos_station['commune'] ?> </span>
</div>
<div class="element_fiche">
<span class="intitule_fiche">Milieu :</span>
<span class="valeur_fiche"> <?= $infos_station['milieu'] ?> </span>
</div>
<div class="element_fiche">
<span class="intitule_fiche">Altitude :</span>
<span class="valeur_fiche"> <?= $infos_station['altitude'] ?> m </span>
</div>
<!-- <p> <?= $infos_station['description']; ?> </p> -->
<div id="conteneur_liens_lat_lon" class="element_fiche" >
<span class="intitule_fiche">Latitude :</span>
<span id="station_lat" class="valeur_fiche"> <?= $infos_station['latitude'] ?> </span>
<span class="intitule_fiche">Longitude :</span>
<span id="station_lon" class="valeur_fiche"> <?= $infos_station['longitude'] ?> </span>
</div>
<div class="conteneur_carte element_fiche" >
<div id="map_canvas" style="width:100%; height:100%"></div>
</div>
<form class="formulaire_en_ligne" method="post" action="<?= Liens::getUrlFormulaireAjoutEspece($id_station); ?>" id="form_afficher_saisie_espece">
<input class="gauche gros_bouton_validation" type="submit" value="Nouvelle espèce" />
</form>
<form class="formulaire_en_ligne" method="post" action="<?= Liens::getUrlFormulaireModificationStation($id_station); ?>" id="form_afficher_modification">
<input class=" droite gros_bouton_validation" type="submit" value="Modifier la station" />
</form>
<hr class="separation_invisible" />
<!-- <?php if(count($infos_station['individus']) == 0) { ?> -->
<form class="formulaire_suppression_station droite" method="post" action="<?= Liens::getUrlFormulaireSuppressionStation(); ?>" id="form_supprimer_station">
<input type="hidden" id="id_station_a_supprimer" name="id_station_a_supprimer" value="<?= $infos_station['id']; ?>" />
<input class="gauche gros_bouton_validation lien_suppression" type="submit" value="Supprimer" />
</form>
<!--<?php } ?> -->
<?php if(isset($donnees['erreurs'])) { ?>
<p class="attention"> <?= $donnees['erreurs']; ?> </p>
<?php } ?>
</div>
<!-- ODS_SAISIE - FIN FICHE STATION -->
/trunk/applications/saisie/squelettes/pied.tpl.html
New file
0,0 → 1,22
<!-- SAISIE - DEBUT PIED DE PAGE -->
<div id="saisie_pied">
<script type="text/javascript">
$(document).ready(function() {
$('span.courriel').courriel();
});
</script>
<p>
Pour plus d'informations ou nous faire part d'une erreur dans les informations affichées, veuillez nous contacter à l'adresse <br />
<span class="courriel">contact [arrobase] obs-saisons [point] fr</span>.
</p>
<p>
Merci de signaler
<a href="http://www.tela-botanica.net/suivi/index.php?do=newtask&project=32" class="lien_ext">
les bogues et améliorations pour l'application
<span class="saisie-appli-info">
Application de saisie D'ODS
</span>
</a>.
</p>
</div>
<!-- SAISIE - FIN PIED DE PAGE -->
/trunk/applications/saisie/squelettes/tete.tpl.html
New file
0,0 → 1,5
<!-- SAISIE - DEBUT TETE DE PAGE -->
<div id="saisie_tete">
</div>
<!-- SAISIE - FIN TETE DE PAGE -->
/trunk/applications/saisie/squelettes/listes/station_liste.tpl.html
New file
0,0 → 1,13
<!-- ODS_SAISIE - DEBUT LISTE STATIONS -->
<div id="saisie_liste_station">
<?php if (isset($stations)) : ?>
<ul class=saisie_liste">
<li><a href=""> Nouvelle station </a> </li>
<?php foreach ($stations as $station) : ?>
<li><a href=""><?=$station['nom']?></a>
</li>
<?php endforeach; ?>
</ul>
<?php endif; ?>
</div>
<!-- ODS_SAISIE - FIN LISTE STATIONS -->
/trunk/applications/saisie/squelettes/listes/evenement_liste.tpl.html
New file
0,0 → 1,116
<!-- ODS_SAISIE - DEBUT LISTE EVENEMENTS -->
<div>
<h2> Observations pour l'année <?= $annee ?> </h2>
 
<p class="cadre_information">Pour ajouter ou modifier une observation, cliquez sur la case correspondante et sélectionnez une date dans le calendrier
(vous pouvez annuler l'édition en appuyant sur la touche échap). <br />
Pour la supprimer, cliquez sur la croix à droite de la date.
</p>
 
<ul class="liste_annees_observations">
<?php for($annees_avant_celle_ci = date('Y') ; $annees_avant_celle_ci >= date('Y') - 5 ; $annees_avant_celle_ci--) : ?>
<?php if ($annees_avant_celle_ci == $annee) { ?>
<li id="annee_en_cours"><?= $annees_avant_celle_ci ?></li>
<?php } else { ?>
<li><a href="<?= Liens::getUrlConsultationEspeceStation($id_station, $id_espece,$annees_avant_celle_ci);?>"> <?= $annees_avant_celle_ci ?> </a></li>
<?php } ?>
<?php if ($annees_avant_celle_ci != date('Y') - 5) { ?>
<li> | </li>
<?php } ?>
<?php endfor; ?>
</ul>
<table id="saisie_liste_evenements">
<tr>
<th></th>
<?php foreach($evenements as $evenement) : ?>
<th class="stade_<?= $evenement['abreviation']; ?>" colspan="<?=count($evenement['stades']) ?>">
<div class="evenement"><?= $evenement['nom'] ?></div>
</th>
<?php endforeach; ?>
<th></th>
</tr>
 
<tr>
<th> stades </th>
<?php foreach($evenements as $evenement) : ?>
<?php foreach($evenement['stades'] as $id_stade => $stade) : ?>
<th title="<?= $evenement['description'][$id_stade]; ?>" class="stade_evenement">
<?= $stade ?>
</th>
<?php endforeach; ?>
<?php endforeach; ?>
</tr>
 
<?php foreach ($individus as $individu) : ?>
<tr class="liste_observations_individu" id="observations_individu_<?= $individu['id_individu'] ?>">
<td class="information_individu">
<a title="cliquez pour accéder à la fiche de cet individu" href="<?= Liens::getUrlConsultationFicheIndividu($id_station,$id_espece, $individu['id_individu']); ?>">
<?= $individu['nom'] ?>
</a>
</td>
<?php foreach($evenements as $nom_evenement => $evenement) : ?>
<?php foreach($evenement['stades'] as $id_stade => $stade) : ?>
<td class="conteneur_date_observation">
<?php $stade_absent_cette_annee = false; ?>
<?php if (!empty($individu['observations'][$annee][$nom_evenement][$stade])) { ?>
<?php foreach($individu['observations'][$annee][$nom_evenement][$stade] as $id_observation => $observation) : ?>
<?php if($observation['absence_evenement'] == 0) { ?>
<div class="date_observation_individu element_cliquable"
title="Cliquez pour modifier la date de cette observation"
data-id-stade-observation="<?=$id_stade?>"
data-id-observation="<?=$id_observation?>"
data-id-individu="<?=$individu['id_individu']?>"
data-date-observation="<?= $observation['date'] ?>"
id="individu_<?=$individu['id_individu']?>_evenement_<?=$id_stade?>_observation_<?=$id_observation?>">
<span class="date_observation"><?= $observation['date'] ?></span>
<span class="datepicker_container"></span>
<div class="conteneur_supprimer_observation">
<span title="Cliquez pour supprimer cette observation" class="icone supprimer_observation">&nbsp;</span>
</div>
</div>
<?php } else { ?>
<?php $stade_absent_cette_annee = true; ?>
<div class="date_observation_individu element_cliquable"
title="Vous avez indiqué que ce stade n'a pas été observé pour cette année"
data-id-stade-observation="<?=$id_stade?>"
data-id-observation="<?=$id_observation?>"
data-id-individu="<?=$individu['id_individu']?>"
data-date-observation="<?= $observation['date'] ?>"
data-absence-observation="1"
id="individu_<?=$individu['id_individu']?>_evenement_<?=$id_stade?>_observation_<?=$id_observation?>">
<span class="date_observation">Absent</span>
<div class="conteneur_supprimer_observation">
<span title="Cliquez pour supprimer cette observation" class="icone supprimer_observation">&nbsp;</span>
</div>
</div>
<?php } ?>
<?php endforeach; ?>
<?php } ?>
<div class="ajouter_observation date_observation_individu element_cliquable <?= $stade_absent_cette_annee ? 'hide' : '' ?>"
data-id-stade-observation="<?=$id_stade?>"
data-id-individu="<?=$individu['id_individu']?>"
title="Cliquez pour ajouter une nouvelle observation de ce stade"
id="ajouter_observation_individu_<?=$individu['id_individu']?>_evenement_<?=$id_stade?>">
<span class="icone date_observation">&nbsp;</span>
<?php $pas_encore_stade_pour_annee = empty($individu['observations'][$annee][$nom_evenement][$stade]); ?>
<span title="Cliquez pour signaler l'absence de cet évènement pour cette année"
class="icone absence_observation <?= $pas_encore_stade_pour_annee ? '' : 'hide' ?>">&nbsp;</span>
<span class="datepicker_container"></span>
<div class="conteneur_supprimer_observation">
<span title="Cliquez pour supprimer cette observation" class="icone supprimer_observation">&nbsp;</span>
</div>
</td>
<?php endforeach; ?>
<?php endforeach; ?>
<td class="conteneur_element_modifier">
<a class="lien_modifier" href="<?= Liens::getUrlFormulaireModificationObservation($id_station,$id_espece, $individu['id_individu'], $annee); ?>">
<img alt="modifier" src="<?= Liens::getUrlImage(); ?>modification.png" />
</a>
</td>
</tr>
<?php endforeach; ?>
</table>
 
<a id="lien_ajout_individu" href="<?= Liens::getUrlFormulaireSaisieIndividu($id_station,$id_espece); ?>"> Nouvel individu </a>
</div>
<!-- ODS_SAISIE - FIN LISTE EVENEMENTS -->
/trunk/applications/saisie/squelettes/listes/espece_liste_administration.tpl.html
New file
0,0 → 1,36
<!-- ODS_SAISIE - DEBUT LISTE ESPECES ADMIN -->
<div id="saisie_liste_especes_admin">
<div id="conteneur_lien_nouvelle_espece">
<a href="<?= Liens::getUrlFormulaireAjoutEspeceAdmin(); ?>" >Ajouter une nouvelle espèce</a>
</div>
<?php if (isset($especes)) : ?>
<table class="saisie_liste_especes_admin">
<tr>
<th></th>
<th>Nom scientifique</th>
<th>Nom vernaculaire</th>
<th>Espèce école</th>
<th>Description</th>
<th>Active</th>
</tr>
<?php foreach ($especes as $type) : ?>
<tr><td colspan="6"><h2><?= $type['nom'] ?></h2></td>
<?php foreach ($type['especes'] as $id => $espece) : ?>
<tr id="espece_<?= $id; ?>" <?=$espece['active'] == 0 ? 'class="espece_inactive"' : '' ?>>
<td>
<a href="<?= Liens::getUrlFormulaireModificationEspeceAdmin($id) ?>">
<img title="<?= Liens::getCreditImageEspece($espece['nom_scientifique']) ?>" class="illustration_espece droite" alt="editer" src="<?= Liens::getUrlImageEspece($espece['nom_scientifique']) ?>" />
</a>
</td>
<td><?=$espece['nom_scientifique']?></td>
<td><?=$espece['nom_vernaculaire']?></td>
<td><?= $espece['espece_ecole'] == 1 ? 'oui' : 'non' ?></td>
<td><?= aControleur::tronquerChaineSansCouperMot($espece['description']); ?></td>
<td><?=$espece['active'] == 1 ? 'oui' : 'non' ?></td>
</tr>
<?php endforeach; ?>
<?php endforeach; ?>
</table>
<?php endif; ?>
</div>
<!-- ODS_SAISIE - FIN LISTE ESPECES ADMIN -->
/trunk/applications/saisie/squelettes/listes/individu_liste.tpl.html
New file
0,0 → 1,13
<!-- ODS_SAISIE - DEBUT LISTE INDIVIDUS -->
<div id="saisie_liste_individus">
<?php if (isset($individus)) : ?>
<ul class=saisie_liste">
<li><a href=""> Nouvel individu </a> </li>
<?php foreach ($individus as $individu) : ?>
<li><a href="<?= $individu['url']?>"><?= $individu['nom']?></a>
</li>
<?php endforeach; ?>
</ul>
<?php endif; ?>
</div>
<!-- ODS_SAISIE - FIN LISTE INDIVIDUS -->
/trunk/applications/saisie/squelettes/images/voir_champs.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/applications/saisie/squelettes/images/voir_champs.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/applications/saisie/squelettes/images/voir_fiche.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/applications/saisie/squelettes/images/voir_fiche.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/applications/saisie/squelettes/images/localiser.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/applications/saisie/squelettes/images/localiser.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/applications/saisie/squelettes/images/retour.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/applications/saisie/squelettes/images/retour.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/applications/saisie/squelettes/images/station.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/applications/saisie/squelettes/images/station.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/applications/saisie/squelettes/images/ajout.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/applications/saisie/squelettes/images/ajout.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/applications/saisie/squelettes/images/voir_details_liste.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/applications/saisie/squelettes/images/voir_details_liste.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/applications/saisie/squelettes/images/valider.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/applications/saisie/squelettes/images/valider.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/applications/saisie/squelettes/images/suppression.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/applications/saisie/squelettes/images/suppression.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/applications/saisie/squelettes/images/csv.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/applications/saisie/squelettes/images/csv.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/applications/saisie/squelettes/images/cadenas.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/applications/saisie/squelettes/images/cadenas.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/applications/saisie/squelettes/images/chargement.gif
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/applications/saisie/squelettes/images/chargement.gif
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/applications/saisie/squelettes/images/absence.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
/trunk/applications/saisie/squelettes/images/absence.png
New file
Property changes:
Added: svn:mime-type
+application/octet-stream
\ No newline at end of property
/trunk/applications/saisie/squelettes/images/espece.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/applications/saisie/squelettes/images/espece.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/applications/saisie/squelettes/images/attention.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/applications/saisie/squelettes/images/attention.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/applications/saisie/squelettes/images/modification.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/applications/saisie/squelettes/images/modification.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/applications/saisie/squelettes/images/afficher.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/applications/saisie/squelettes/images/afficher.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/applications/saisie/squelettes/images/valider_s.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
/trunk/applications/saisie/squelettes/images/valider_s.png
New file
Property changes:
Added: svn:mime-type
+image/png
\ No newline at end of property
/trunk/applications
New file
Property changes:
Added: svn:ignore
+.directory
/trunk
New file
Property changes:
Added: svn:ignore
+bdd
+includes
+misc
+modules
+profiles
+scripts
+sites
+themes
+.directory
+.htaccess
+.project
+CHANGELOG.txt
+CONTRIBUTORS.fr.txt
+COPYRIGHT.txt
+cron.php
+index.php
+INSTALL.mysql.txt
+INSTALL.pgsql.txt
+install.php
+INSTALL.txt
+LICENSE.fr.txt
+LICENSE.txt
+MAINTAINERS.txt
+README.fr.txt
+robots.txt
+STATUS.fr.txt
+update.php
+UPGRADE.txt
+xmlrpc.php
+.settings
+documents