From 678c4b311980bea9dbed23b177062246c0afec90 Mon Sep 17 00:00:00 2001 From: Mihajlo Medjedovic Date: Wed, 27 Jul 2022 13:40:36 +0200 Subject: [PATCH] init --- 3magiclines.txt | 3 + README.md | 92 + rebuild-ng.sh | 13 + rebuild.sh | 13 + runme.sas | 8390 +++++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 8511 insertions(+) create mode 100755 3magiclines.txt create mode 100755 README.md create mode 100755 rebuild-ng.sh create mode 100755 rebuild.sh create mode 100755 runme.sas diff --git a/3magiclines.txt b/3magiclines.txt new file mode 100755 index 0000000..898a98a --- /dev/null +++ b/3magiclines.txt @@ -0,0 +1,3 @@ +%let apploc=/Projects/app/dc; +filename dc url "https://git.4gl.io/medjedovic/tmp/-/raw/main/runme.sas"; +%include dc; diff --git a/README.md b/README.md new file mode 100755 index 0000000..43108fc --- /dev/null +++ b/README.md @@ -0,0 +1,92 @@ +# Tmp + + + +## Getting started + +To make it easy for you to get started with GitLab, here's a list of recommended next steps. + +Already a pro? Just edit this README.md and make it your own. Want to make it easy? [Use the template at the bottom](#editing-this-readme)! + +## Add your files + +- [ ] [Create](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#create-a-file) or [upload](https://docs.gitlab.com/ee/user/project/repository/web_editor.html#upload-a-file) files +- [ ] [Add files using the command line](https://docs.gitlab.com/ee/gitlab-basics/add-file.html#add-a-file-using-the-command-line) or push an existing Git repository with the following command: + +``` +cd existing_repo +git remote add origin https://git.4gl.io/allan/tmp.git +git branch -M main +git push -uf origin main +``` + +## Integrate with your tools + +- [ ] [Set up project integrations](https://git.4gl.io/allan/tmp/-/settings/integrations) + +## Collaborate with your team + +- [ ] [Invite team members and collaborators](https://docs.gitlab.com/ee/user/project/members/) +- [ ] [Create a new merge request](https://docs.gitlab.com/ee/user/project/merge_requests/creating_merge_requests.html) +- [ ] [Automatically close issues from merge requests](https://docs.gitlab.com/ee/user/project/issues/managing_issues.html#closing-issues-automatically) +- [ ] [Enable merge request approvals](https://docs.gitlab.com/ee/user/project/merge_requests/approvals/) +- [ ] [Automatically merge when pipeline succeeds](https://docs.gitlab.com/ee/user/project/merge_requests/merge_when_pipeline_succeeds.html) + +## Test and Deploy + +Use the built-in continuous integration in GitLab. + +- [ ] [Get started with GitLab CI/CD](https://docs.gitlab.com/ee/ci/quick_start/index.html) +- [ ] [Analyze your code for known vulnerabilities with Static Application Security Testing(SAST)](https://docs.gitlab.com/ee/user/application_security/sast/) +- [ ] [Deploy to Kubernetes, Amazon EC2, or Amazon ECS using Auto Deploy](https://docs.gitlab.com/ee/topics/autodevops/requirements.html) +- [ ] [Use pull-based deployments for improved Kubernetes management](https://docs.gitlab.com/ee/user/clusters/agent/) +- [ ] [Set up protected environments](https://docs.gitlab.com/ee/ci/environments/protected_environments.html) + +*** + +# Editing this README + +When you're ready to make this README your own, just edit this file and use the handy template below (or feel free to structure it however you want - this is just a starting point!). Thank you to [makeareadme.com](https://www.makeareadme.com/) for this template. + +## Suggestions for a good README +Every project is different, so consider which of these sections apply to yours. The sections used in the template are suggestions for most open source projects. Also keep in mind that while a README can be too long and detailed, too long is better than too short. If you think your README is too long, consider utilizing another form of documentation rather than cutting out information. + +## Name +Choose a self-explaining name for your project. + +## Description +Let people know what your project can do specifically. Provide context and add a link to any reference visitors might be unfamiliar with. A list of Features or a Background subsection can also be added here. If there are alternatives to your project, this is a good place to list differentiating factors. + +## Badges +On some READMEs, you may see small images that convey metadata, such as whether or not all the tests are passing for the project. You can use Shields to add some to your README. Many services also have instructions for adding a badge. + +## Visuals +Depending on what you are making, it can be a good idea to include screenshots or even a video (you'll frequently see GIFs rather than actual videos). Tools like ttygif can help, but check out Asciinema for a more sophisticated method. + +## Installation +Within a particular ecosystem, there may be a common way of installing things, such as using Yarn, NuGet, or Homebrew. However, consider the possibility that whoever is reading your README is a novice and would like more guidance. Listing specific steps helps remove ambiguity and gets people to using your project as quickly as possible. If it only runs in a specific context like a particular programming language version or operating system or has dependencies that have to be installed manually, also add a Requirements subsection. + +## Usage +Use examples liberally, and show the expected output if you can. It's helpful to have inline the smallest example of usage that you can demonstrate, while providing links to more sophisticated examples if they are too long to reasonably include in the README. + +## Support +Tell people where they can go to for help. It can be any combination of an issue tracker, a chat room, an email address, etc. + +## Roadmap +If you have ideas for releases in the future, it is a good idea to list them in the README. + +## Contributing +State if you are open to contributions and what your requirements are for accepting them. + +For people who want to make changes to your project, it's helpful to have some documentation on how to get started. Perhaps there is a script that they should run or some environment variables that they need to set. Make these steps explicit. These instructions could also be useful to your future self. + +You can also document commands to lint the code or run tests. These steps help to ensure high code quality and reduce the likelihood that the changes inadvertently break something. Having instructions for running tests is especially helpful if it requires external setup, such as starting a Selenium server for testing in a browser. + +## Authors and acknowledgment +Show your appreciation to those who have contributed to the project. + +## License +For open source projects, say how it is licensed. + +## Project status +If you have run out of energy or time for your project, put a note at the top of the README saying that development has slowed down or stopped completely. Someone may choose to fork your project or volunteer to step in as a maintainer or owner, allowing your project to keep going. You can also make an explicit request for maintainers. diff --git a/rebuild-ng.sh b/rebuild-ng.sh new file mode 100755 index 0000000..24e8b04 --- /dev/null +++ b/rebuild-ng.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash + +cd /home/mihajlo/external-projects/allan/sasjs/angular-seed-app +npm run build +cd sasjs +sasjs c -t sas9 +rm -rf sasjsbuild/tests +sasjs b -t sas9 +cp ../sasjsbuild/sas9.sas /home/mihajlo/external-projects/allan/4gl/tmp/runme.sas +cd /home/mihajlo/external-projects/allan/4gl/tmp +git add . +git commit -m "update" +git push diff --git a/rebuild.sh b/rebuild.sh new file mode 100755 index 0000000..95f1c8f --- /dev/null +++ b/rebuild.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash + +cd /home/mihajlo/external-projects/allan/datacontroller/client +npm run build +cd /home/mihajlo/external-projects/allan/datacontroller/sas +sasjs c -t sas9 +rm -rf sasjsbuild/tests +sasjs b -t sas9 +cp sasjsbuild/mysas9deploy.sas /home/mihajlo/external-projects/allan/4gl/tmp/runme.sas +cd /home/mihajlo/external-projects/allan/4gl/tmp +git add . +git commit -m "update" +git push diff --git a/runme.sas b/runme.sas new file mode 100755 index 0000000..0edc6f5 --- /dev/null +++ b/runme.sas @@ -0,0 +1,8390 @@ +%global appLoc serverName; +%let compiled_apploc=/Public/app/angular-seed-app; +%let serverName=SASApp; +%let appLoc=%sysfunc(coalescec(&appLoc,&compiled_apploc)); +%let sasjs_clickmeservice=clickme; +%let syscc=0; +options ps=max nonotes nosgen nomprint nomlogic nosource2 nosource noquotelenmax; +/* user supplied build vars */ +/* user supplied build vars end */ +/* system macro dependencies for build process */ +%macro mf_getattrn( + libds + ,attr +)/*/STORE SOURCE*/; + %local dsid rc; + %let dsid=%sysfunc(open(&libds,is)); + %if &dsid = 0 %then %do; + %put %str(WARN)ING: Cannot open %trim(&libds), system message below; + %put %sysfunc(sysmsg()); + -1 + %end; + %else %do; + %sysfunc(attrn(&dsid,&attr)) + %let rc=%sysfunc(close(&dsid)); + %end; +%mend mf_getattrn; +%macro mf_nobs(libds +)/*/STORE SOURCE*/; + %mf_getattrn(&libds,NLOBS) +%mend mf_nobs; +%macro mf_abort(mac=mf_abort.sas, msg=, iftrue=%str(1=1) +)/*/STORE SOURCE*/; + %if not(%eval(%unquote(&iftrue))) %then %return; + %put NOTE: /// mf_abort macro executing //; + %if %length(&mac)>0 %then %put NOTE- called by &mac; + %put NOTE - &msg; + %abort; +%mend mf_abort; +/** @endcond */ +%macro mf_verifymacvars( + verifyVars /* list of macro variable NAMES */ + ,makeUpcase=NO /* set to YES to make all the variable VALUES uppercase */ + ,mAbort=SOFT +)/*/STORE SOURCE*/; + %local verifyIterator verifyVar abortmsg; + %do verifyIterator=1 %to %sysfunc(countw(&verifyVars,%str( ))); + %let verifyVar=%qscan(&verifyVars,&verifyIterator,%str( )); + %if not %symexist(&verifyvar) %then %do; + %let abortmsg= Variable &verifyVar is MISSING; + %goto exit_err; + %end; + %if %length(%trim(&&&verifyVar))=0 %then %do; + %let abortmsg= Variable &verifyVar is EMPTY; + %goto exit_err; + %end; + %if &makeupcase=YES %then %do; + %let &verifyVar=%upcase(&&&verifyvar); + %end; + %end; + %goto exit_success; + %exit_err: + %put &abortmsg; + %mf_abort(iftrue=(&mabort ne SOFT), + mac=mf_verifymacvars, + msg=%str(&abortmsg) + ) + 0 + %return; + %exit_success: + 1 +%mend mf_verifymacvars; +%macro mm_getDirectories( + path= + ,outds=work.mm_getDirectories + ,mDebug=0 +)/*/STORE SOURCE*/; +%local mD; +%if &mDebug=1 %then %let mD=; +%else %let mD=%str(*); +%&mD.put Executing mm_getDirectories.sas; +%&mD.put _local_; +data &outds (keep=directoryuri name directoryname directorydesc ); + length directoryuri name directoryname directorydesc $256; + call missing(of _all_); + __i+1; +%if %length(&path)=0 %then %do; + do while + (metadata_getnobj("omsobj:Directory?@Id contains '.'",__i,directoryuri)>0); +%end; %else %do; + do while( + metadata_getnobj("omsobj:Directory?@DirectoryName='&path'",__i,directoryuri) + >0 + ); +%end; + __rc1=metadata_getattr(directoryuri, "Name", name); + __rc2=metadata_getattr(directoryuri, "DirectoryName", directoryname); + __rc3=metadata_getattr(directoryuri, "Desc", directorydesc); + &mD.putlog (_all_) (=); + drop __:; + __i+1; + if sum(of __rc1-__rc3)=0 then output; + end; +run; +%mend mm_getDirectories; +%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767); + %local rc fname; + %if &prefix=0 %then %do; + %let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl)); + %if &rc %then %put %sysfunc(sysmsg()); + &fname + %end; + %else %do; + %local x len; + %let len=%eval(8-%length(&prefix)); + %let x=0; + %do x=0 %to &maxtries; + %let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len); + %if %sysfunc(fileref(&fname)) > 0 %then %do; + %let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl)); + %if &rc %then %put %sysfunc(sysmsg()); + &fname + %return; + %end; + %end; + %put unable to find available fileref after &maxtries attempts; + %end; +%mend mf_getuniquefileref; +%macro mm_updatestpsourcecode(stp= + ,stpcode= + ,minify=NO + ,mdebug=0 +); +/* first, check if STP exists */ +%local tsuri; +%let tsuri=stopifempty ; +data _null_; + format type uri tsuri value $200.; + call missing (of _all_); + path="&stp.(StoredProcess)"; + /* first, find the STP ID */ + if metadata_pathobj("",path,"StoredProcess",type,uri)>0 then do; + /* get sourcecode */ + cnt=1; + do while (metadata_getnasn(uri,"Notes",cnt,tsuri)>0); + rc=metadata_getattr(tsuri,"Name",value); + put tsuri= value=; + if value="SourceCode" then do; + /* found it! */ + rc=metadata_getattr(tsuri,"Id",value); + call symputx('tsuri',value,'l'); + stop; + end; + cnt+1; + end; + end; + else put (_all_)(=); +run; +%if &tsuri=stopifempty %then %do; + %put %str(WARN)ING: &stp.(StoredProcess) not found!; + %return; +%end; +%if %length(&stpcode)<2 %then %do; + %put %str(WARN)ING: No SAS code supplied!!; + %return; +%end; +%local frefin frefout; +%let frefin=%mf_getuniquefileref(); +%let frefout=%mf_getuniquefileref(); +/* write header XML */ +data _null_; + file &frefin; + put "$METAREPOSITORY + ','>'); + outstr=tranwrd(outstr,"'",'''); + outstr=tranwrd(outstr,'"','"'); + outstr=tranwrd(outstr,'0A'x,' '); + outstr=tranwrd(outstr,'0D'x,' '); + outstr=tranwrd(outstr,'$','$'); + %if &minify=YES %then %do; + outstr=cats(outstr); + if outstr ne ''; + if not (outstr=:'/*' and subpad(left(reverse(outstr)),1,2)='/*'); + %end; + outstr=trim(outstr); + put outstr ' '; + run; +%end; +data _null_; + file &frefin mod; + put "'>SAS268435456 + "; +run; +proc metadata in= &frefin out=&frefout; +run; +%if &mdebug=1 %then %do; + /* write the response to the log for debugging */ + data _null_; + infile &frefout lrecl=32767; + input; + put _infile_; + run; +%end; +%else %do; + filename &frefin clear; + filename &frefout clear; +%end; +%mend mm_updatestpsourcecode; +%macro mm_getrepos( + outds=work.mm_getrepos +)/*/STORE SOURCE*/; +* use a temporary fileref to hold the response; +filename response temp; +/* get list of libraries */ +proc metadata in= + "1" + out=response; +run; +/* write the response to the log for debugging */ +/* create an XML map to read the response */ +filename sxlemap temp; +data _null_; + file sxlemap; + put ''; + put "/GetRepositories/Repositories/Repository"; + put ""; + put ''; + put "/GetRepositories/Repositories/Repository/@Id"; + put ""; + put "characterstring200"; + put ''; + put ''; + put "/GetRepositories/Repositories/Repository/@Name"; + put ""; + put "characterstring200"; + put ''; + put ''; + put "/GetRepositories/Repositories/Repository/@Desc"; + put ""; + put "characterstring200"; + put ''; + put ''; + put ""; + put "/GetRepositories/Repositories/Repository/@DefaultNS"; + put "characterstring200"; + put ''; + put ''; + put ""; + put "/GetRepositories/Repositories/Repository/@RepositoryType"; + put "characterstring20"; + put ''; + put ''; + put ""; + put "/GetRepositories/Repositories/Repository/@RepositoryFormat"; + put "characterstring10"; + put ''; + put ''; + put ""; + put "/GetRepositories/Repositories/Repository/@Access"; + put "characterstring16"; + put ''; + put ''; + put ""; + put "/GetRepositories/Repositories/Repository/@CurrentAccess"; + put "characterstring16"; + put ''; + put ''; + put ""; + put "/GetRepositories/Repositories/Repository/@PauseState"; + put "characterstring16"; + put ''; + put ''; + put "/GetRepositories/Repositories/Repository/@Path"; + put ""; + put "characterstring256"; + put ''; + put ''; + put "/GetRepositories/Repositories/Repository/@Engine"; + put ""; + put "characterstring8"; + put ''; + put ''; + put "/GetRepositories/Repositories/Repository/@Options"; + put ""; + put "characterstring32"; + put ''; + put ''; + put ""; + put "/GetRepositories/Repositories/Repository/@MetadataCreated"; + put "characterstring24"; + put ''; + put ''; + put ""; + put "/GetRepositories/Repositories/Repository/@MetadataUpdated"; + put "characterstring24"; + put ''; + put '
'; +run; +libname _XML_ xml xmlfileref=response xmlmap=sxlemap; +proc sort data= _XML_.SASRepos out=&outds; + by name; +run; +/* clear references */ +filename sxlemap clear; +filename response clear; +libname _XML_ clear; +%mend mm_getrepos; +%macro mm_getservercontexts( + outds=work.mm_getrepos +)/*/STORE SOURCE*/; +%local repo repocnt x; +%let repo=%sysfunc(getoption(metarepository)); +/* first get list of available repos */ +%mm_getrepos(outds=work.repos) +%let repocnt=0; +data _null_; + set repos; + where repositorytype in('CUSTOM','FOUNDATION'); + keep id name ; + call symputx(cats('repo',_n_),name,'l'); + call symputx('repocnt',_n_,'l'); +run; +filename __mc1 temp; +filename __mc2 temp; +data &outds; + length serveruri servername $200; + call missing (of _all_); + stop; +run; +%do x=1 %to &repocnt; + options metarepository=&&repo&x; + proc metadata in= + "$METAREPOSITORY + ServerContextSAS + 0" + out=__mc1; + run; + /* + data _null_; + infile __mc1 lrecl=1048576; + input; + put _infile_; + run; + */ + data _null_; + file __mc2; + put ''; + put "/GetMetadataObjects/Objects/ServerContext"; + put ""; + put ''; + put "/GetMetadataObjects/Objects/ServerContext/@Id"; + put ""; + put "characterstring200"; + put ''; + put ''; + put "/GetMetadataObjects/Objects/ServerContext/@Name"; + put ""; + put "characterstring200"; + put ''; + put '
'; + run; + libname __mc3 xml xmlfileref=__mc1 xmlmap=__mc2; + proc append base=&outds data=__mc3.SASContexts;run; + libname __mc3 clear; +%end; +options metarepository=&repo; +filename __mc1 clear; +filename __mc2 clear; +%mend mm_getservercontexts; +%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1) + , errds=work.mp_abort_errds + , mode=REGULAR +)/*/STORE SOURCE*/; +%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode; +%local fref fid i; +%if not(%eval(%unquote(&iftrue))) %then %return; +%put NOTE: /// mp_abort macro executing //; +%if %length(&mac)>0 %then %put NOTE- called by &mac; +%put NOTE - &msg; +%if %symexist(_SYSINCLUDEFILEDEVICE) +/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */ +and %superq(SYSPROCESSNAME) ne %str(Compute Server) +%then %do; + %if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do; + data &errds; + iftrue='1=1'; + length mac $100 msg $5000; + mac=symget('mac'); + msg=symget('msg'); + run; + data _null_; + abort cancel FILE; + run; + %return; + %end; +%end; +/* Web App Context */ +%if %symexist(_PROGRAM) + or %superq(SYSPROCESSNAME) = %str(Compute Server) + or &mode=INCLUDE +%then %do; + options obs=max replace mprint; + %if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5" + %then %do; + options nosyntaxcheck; + %end; + %if &mode=INCLUDE %then %do; + %if %sysfunc(exist(&errds))=1 %then %do; + data _null_; + set &errds; + call symputx('iftrue',iftrue,'l'); + call symputx('mac',mac,'l'); + call symputx('msg',msg,'l'); + putlog (_all_)(=); + run; + %if (&iftrue)=0 %then %return; + %end; + %else %do; + %put &sysmacroname: No include errors found; + %return; + %end; + %end; + /* extract log errs / warns, if exist */ + %local logloc logline; + %global logmsg; /* capture global messages */ + %if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG; + %else %let logloc=%qsysfunc(getoption(LOG)); + proc printto log=log;run; + %let logline=0; + %if %length(&logloc)>0 %then %do; + data _null_; + infile &logloc lrecl=5000; + input; putlog _infile_; + i=1; + retain logonce 0; + if ( + _infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR" + ) and logonce=0 then + do; + call symputx('logline',_n_); + logonce+1; + end; + run; + /* capture log including lines BEFORE the err */ + %if &logline>0 %then %do; + data _null_; + infile &logloc lrecl=5000; + input; + i=1; + stoploop=0; + if _n_ ge &logline-15 and stoploop=0 then do until (i>22); + call symputx('logmsg',catx('\n',symget('logmsg'),_infile_)); + input; + i+1; + stoploop=1; + end; + if stoploop=1 then stop; + run; + %end; + %end; + %if %symexist(SYS_JES_JOB_URI) %then %do; + /* setup webout for Viya */ + options nobomfile; + %if "X&SYS_JES_JOB_URI.X"="XX" %then %do; + filename _webout temp lrecl=999999 mod; + %end; + %else %do; + filename _webout filesrvc parenturi="&SYS_JES_JOB_URI" + name="_webout.json" lrecl=999999 mod; + %end; + %end; + %else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do; + options nobomfile; + /* set up http header for SASjs Server */ + %let fid=%sysfunc(fopen(&fref,A)); + %if &fid=0 %then %do; + %put %str(ERR)OR: %sysfunc(sysmsg()); + %return; + %end; + %let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json))); + %let rc=%sysfunc(fwrite(&fid)); + %let rc=%sysfunc(fclose(&fid)); + %let rc=%sysfunc(filename(&fref)); + %end; + /* send response in SASjs JSON format */ + data _null_; + file _webout mod lrecl=32000 encoding='utf-8'; + length msg syswarningtext syserrortext $32767 mode $10 ; + sasdatetime=datetime(); + msg=symget('msg'); + %if &logline>0 %then %do; + msg=cats(msg,'\n\nLog Extract:\n',symget('logmsg')); + %end; + /* escape the escapes */ + msg=tranwrd(msg,'\','\\'); + /* escape the quotes */ + msg=tranwrd(msg,'"','\"'); + /* ditch the CRLFs as chrome complains */ + msg=compress(msg,,'kw'); + /* quote without quoting the quotes (which are escaped instead) */ + msg=cats('"',msg,'"'); + if symexist('_debug') then debug=quote(trim(symget('_debug'))); + else debug='""'; + if symget('sasjsprocessmode')='Stored Program' then mode='SASJS'; + if mode ne 'SASJS' then put '>>weboutBEGIN<<'; + put '{"SYSDATE" : "' "&SYSDATE" '"'; + put ',"SYSTIME" : "' "&SYSTIME" '"'; + put ',"sasjsAbort" : [{'; + put ' "MSG":' msg ; + put ' ,"MAC": "' "&mac" '"}]'; + put ",""SYSUSERID"" : ""&sysuserid"" "; + put ',"_DEBUG":' debug ; + if symexist('_metauser') then do; + _METAUSER=quote(trim(symget('_METAUSER'))); + put ",""_METAUSER"": " _METAUSER; + _METAPERSON=quote(trim(symget('_METAPERSON'))); + put ',"_METAPERSON": ' _METAPERSON; + end; + if symexist('SYS_JES_JOB_URI') then do; + SYS_JES_JOB_URI=quote(trim(symget('SYS_JES_JOB_URI'))); + put ',"SYS_JES_JOB_URI": ' SYS_JES_JOB_URI; + end; + _PROGRAM=quote(trim(resolve(symget('_PROGRAM')))); + put ',"_PROGRAM" : ' _PROGRAM ; + put ",""SYSCC"" : ""&syscc"" "; + syserrortext=quote(trim(symget('syserrortext'))); + put ",""SYSERRORTEXT"" : " syserrortext; + put ",""SYSHOSTNAME"" : ""&syshostname"" "; + put ",""SYSJOBID"" : ""&sysjobid"" "; + put ",""SYSSCPL"" : ""&sysscpl"" "; + put ",""SYSSITE"" : ""&syssite"" "; + sysvlong=quote(trim(symget('sysvlong'))); + put ',"SYSVLONG" : ' sysvlong; + syswarningtext=quote(trim(symget('syswarningtext'))); + put ",""SYSWARNINGTEXT"" : " syswarningtext; + put ',"END_DTTM" : "' "%sysfunc(datetime(),E8601DT26.6)" '" '; + put "}" ; + if mode ne 'SASJS' then put '>>weboutEND<<'; + run; + %put _all_; + %if "&sysprocessmode " = "SAS Stored Process Server " %then %do; + data _null_; + putlog 'stpsrvset program err and syscc'; + rc=stpsrvset('program error', 0); + call symputx("syscc",0,"g"); + run; + %if &sysscp=WIN + and "%substr(%str(&sysvlong ),1,8)"="9.04.01M" + and "%substr(%str(&sysvlong ),9,1)">"5" %then %do; + /* skip approach (below) does not work in windows m6+ envs */ + endsas; + %end; + %else %do; + /** + * endsas kills 9.4m3 deployments by orphaning multibridges. + * Abort variants are ungraceful (non zero return code) + * This approach lets SAS run silently until the end :-) + * Caution - fails when called within a %include within a macro + * Use mp_include() to handle this. + */ + filename skip temp; + data _null_; + file skip; + put '%macro skip();'; + comment '%mend skip; -> fix lint '; + put '%macro skippy();'; + comment '%mend skippy; -> fix lint '; + run; + %inc skip; + %end; + %end; + %else %if "&sysprocessmode " = "SAS Compute Server " %then %do; + /* endsas kills the session making it harder to fetch results */ + data _null_; + syswarningtext=symget('syswarningtext'); + syserrortext=symget('syserrortext'); + abort_msg=symget('msg'); + syscc=symget('syscc'); + sysuserid=symget('sysuserid'); + iftrue=symget('iftrue'); + put (_all_)(/=); + call symputx('syscc',0); + abort cancel nolist; + run; + %end; + %else %do; + %abort cancel; + %end; +%end; +%else %do; + %put _all_; + %abort cancel; +%end; +%mend mp_abort; +/** @endcond */ +%macro mf_isblank(param +)/*/STORE SOURCE*/; + %sysevalf(%superq(param)=,boolean) +%mend mf_isblank; +%macro mp_dropmembers( + list /* space separated list of datasets / views */ + ,libref=WORK /* can only drop from a single library at a time */ + ,iftrue=%str(1=1) +)/*/STORE SOURCE*/; + %if not(%eval(%unquote(&iftrue))) %then %return; + %if %mf_isblank(&list) %then %do; + %put NOTE: nothing to drop!; + %return; + %end; + proc datasets lib=&libref nolist; + delete &list; + delete &list /mtype=view; + run; +%mend mp_dropmembers; +%macro mm_createstp( + stpname=Macro People STP + ,stpdesc=This stp was created automatically by the mm_createstp macro + ,filename=mm_createstp.sas + ,directory=SASEnvironment/SASCode + ,tree=/User Folders/sasdemo + ,package=false + ,streaming=true + ,outds=work.mm_createstp + ,mDebug=0 + ,server=SASApp + ,stptype=1 + ,minify=NO + ,frefin=mm_in + ,frefout=mm_out +)/*/STORE SOURCE*/; +%local mD; +%if &mDebug=1 %then %let mD=; +%else %let mD=%str(*); +%&mD.put Executing mm_CreateSTP.sas; +%&mD.put _local_; +%mp_abort( + iftrue=(%mf_verifymacvars(stpname filename directory tree)=0) + ,mac=&sysmacroname + ,msg=%str(Empty inputs: stpname filename directory tree) +) +%mp_dropmembers(%scan(&outds,2,.)) +data _null_; + length type uri $256; + rc=metadata_pathobj("","&tree","Folder",type,uri); + call symputx('foldertype',type,'l'); + call symputx('treeuri',uri,'l'); +run; +%if &foldertype ne Tree %then %do; + %put %str(WARN)ING: Tree &tree does not exist!; + %return; +%end; +%local cmtype; +data _null_; + length type uri $256; + rc=metadata_pathobj("","&tree/&stpname",'StoredProcess',type,uri); + call symputx('cmtype',type,'l'); + call symputx('stpuri',uri,'l'); +run; +%if &cmtype = ClassifierMap %then %do; + %put %str(WARN)ING: Stored Process &stpname already exists in &tree!; + %return; +%end; +%if %sysfunc(fileexist(&directory/&filename)) ne 1 %then %do; + %put %str(WARN)ING: FILE *&directory/&filename* NOT FOUND!; + %return; +%end; +%if &stptype=1 %then %do; + /* type 1 STP - where code is stored on filesystem */ + %if %sysevalf(&sysver lt 9.2) %then %do; + %put %str(WARN)ING: Version 9.2 or later required; + %return; + %end; + /* check directory object (where 9.2 source code reference is stored) */ + data _null_; + length id $20 dirtype $256; + rc=metadata_resolve("&directory",dirtype,id); + call symputx('checkdirtype',dirtype,'l'); + run; + %if &checkdirtype ne Directory %then %do; + %mm_getdirectories(path=&directory,outds=&outds ,mDebug=&mDebug) + %if %mf_nobs(&outds)=0 or %sysfunc(exist(&outds))=0 %then %do; + %put %str(WARN)ING: The directory object does not exist for &directory; + %return; + %end; + %end; + %else %do; + data &outds; + directoryuri="&directory"; + run; + %end; + data &outds (keep=stpuri prompturi fileuri texturi); + length stpuri prompturi fileuri texturi serveruri $256 ; + if _n_=1 then call missing (of _all_); + set &outds; + /* final checks on uris */ + length id $20 type $256; + __rc=metadata_resolve("&treeuri",type,id); + if type ne 'Tree' then do; + putlog "%str(WARN)ING: Invalid tree URI: &treeuri"; + stopme=1; + end; + __rc=metadata_resolve(directoryuri,type,id); + if type ne 'Directory' then do; + putlog "%str(WARN)ING: Invalid directory URI: " directoryuri; + stopme=1; + end; + /* get server info */ + __rc=metadata_resolve("&server",type,serveruri); + if type ne 'LogicalServer' then do; + __rc=metadata_getnobj("omsobj:LogicalServer?@Name='&server'",1,serveruri); + if serveruri='' then do; + putlog "%str(WARN)ING: Invalid server: &server"; + stopme=1; + end; + end; + if stopme=1 then do; + putlog (_all_)(=); + stop; + end; + /* create empty prompt */ + rc1=METADATA_NEWOBJ('PromptGroup',prompturi,'Parameters'); + rc2=METADATA_SETATTR(prompturi, 'UsageVersion', '1000000'); + rc3=METADATA_SETATTR(prompturi, 'GroupType','2'); + rc4=METADATA_SETATTR(prompturi, 'Name','Parameters'); + rc5=METADATA_SETATTR(prompturi, 'PublicType','Embedded:PromptGroup'); + GroupInfo= + ""; + rc6 = METADATA_SETATTR(prompturi, 'GroupInfo',groupinfo); + if sum(of rc1-rc6) ne 0 then do; + putlog "%str(WARN)ING: Issue creating prompt."; + if prompturi ne . then do; + putlog ' Removing orphan: ' prompturi; + rc = METADATA_DELOBJ(prompturi); + put rc=; + end; + stop; + end; + /* create a file uri */ + rc7=METADATA_NEWOBJ('File',fileuri,'SP Source File'); + rc8=METADATA_SETATTR(fileuri, 'FileName',"&filename"); + rc9=METADATA_SETATTR(fileuri, 'IsARelativeName','1'); + rc10=METADATA_SETASSN(fileuri, 'Directories','MODIFY',directoryuri); + if sum(of rc7-rc10) ne 0 then do; + putlog "%str(WARN)ING: Issue creating file."; + if fileuri ne . then do; + putlog ' Removing orphans:' prompturi fileuri; + rc = METADATA_DELOBJ(prompturi); + rc = METADATA_DELOBJ(fileuri); + put (_all_)(=); + end; + stop; + end; + /* create a TextStore object */ + rc11= METADATA_NEWOBJ('TextStore',texturi,'Stored Process'); + rc12= METADATA_SETATTR(texturi, 'TextRole','StoredProcessConfiguration'); + rc13= METADATA_SETATTR(texturi, 'TextType','XML'); + storedtext='' + !!"" + !!""; + rc14= METADATA_SETATTR(texturi, 'StoredText',storedtext); + if sum(of rc11-rc14) ne 0 then do; + putlog "%str(WARN)ING: Issue creating TextStore."; + if texturi ne . then do; + putlog ' Removing orphans: ' prompturi fileuri texturi; + rc = METADATA_DELOBJ(prompturi); + rc = METADATA_DELOBJ(fileuri); + rc = METADATA_DELOBJ(texturi); + put (_all_)(=); + end; + stop; + end; + /* create meta obj */ + rc15= METADATA_NEWOBJ('ClassifierMap',stpuri,"&stpname"); + rc16= METADATA_SETASSN(stpuri, 'Trees','MODIFY',treeuri); + rc17= METADATA_SETASSN(stpuri, 'ComputeLocations','MODIFY',serveruri); + rc18= METADATA_SETASSN(stpuri, 'SourceCode','MODIFY',fileuri); + rc19= METADATA_SETASSN(stpuri, 'Prompts','MODIFY',prompturi); + rc20= METADATA_SETASSN(stpuri, 'Notes','MODIFY',texturi); + rc21= METADATA_SETATTR(stpuri, 'PublicType', 'StoredProcess'); + rc22= METADATA_SETATTR(stpuri, 'TransformRole', 'StoredProcess'); + rc23= METADATA_SETATTR(stpuri, 'UsageVersion', '1000000'); + rc24= METADATA_SETATTR(stpuri, 'Desc', "&stpdesc"); + /* tidy up if err */ + if sum(of rc15-rc24) ne 0 then do; + putlog "%str(WARN)ING: Issue creating STP."; + if stpuri ne . then do; + putlog ' Removing orphans: ' prompturi fileuri texturi stpuri; + rc = METADATA_DELOBJ(prompturi); + rc = METADATA_DELOBJ(fileuri); + rc = METADATA_DELOBJ(texturi); + rc = METADATA_DELOBJ(stpuri); + put (_all_)(=); + end; + end; + else do; + fullpath=cats('_program=',treepath,"/&stpname"); + putlog "NOTE: Stored Process Created!"; + putlog "NOTE- "; putlog "NOTE-"; putlog "NOTE-" fullpath; + putlog "NOTE- "; putlog "NOTE-"; + end; + output; + stop; + run; +%end; +%else %if &stptype=2 %then %do; + /* type 2 stp - code is stored in metadata */ + %if %sysevalf(&sysver lt 9.3) %then %do; + %put %str(WARN)ING: SAS version 9.3 or later required to create type2 STPs; + %return; + %end; + /* check we have the correct ServerContext */ + %mm_getservercontexts(outds=contexts) + %local serveruri; %let serveruri=NOTFOUND; + data _null_; + set contexts; + where upcase(servername)="%upcase(&server)"; + call symputx('serveruri',serveruri); + run; + %if &serveruri=NOTFOUND %then %do; + %put %str(WARN)ING: ServerContext *&server* not found!; + %return; + %end; + /** + * First, create a Hello World type 2 stored process + */ + filename &frefin temp; + data _null_; + file &frefin; + treeuri=quote(symget('treeuri')); + serveruri=quote(symget('serveruri')); + stpdesc=quote(symget('stpdesc')); + stpname=quote(symget('stpname')); + put "$METAREPOSITORY "/ + ''/ + " "/ + " "/ + " "/ + " "/ + ' '/ + ' ' / + " "/ + " "/ + ' '/ + " "/ + ""/ + "SAS"/ + "268435456"; + run; + filename &frefout temp; + proc metadata in= &frefin out=&frefout ; + run; + %if &mdebug=1 %then %do; + /* write the response to the log for debugging */ + data _null_; + infile &frefout lrecl=1048576; + input; + put _infile_; + run; + %end; + /** + * Next, add the source code + */ + %mm_updatestpsourcecode(stp=&tree/&stpname + ,stpcode="&directory/&filename" + ,mdebug=&mdebug + ,minify=&minify) +%end; +%else %do; + %put %str(WARN)ING: STPTYPE=*&stptype* not recognised!; +%end; +%mend mm_createstp; +%macro mf_getuser( +)/*/STORE SOURCE*/; + %local user; + %if %symexist(_sasjs_username) %then %let user=&_sasjs_username; + %else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do; + %let user=&SYS_COMPUTE_SESSION_OWNER; + %end; + %else %if %symexist(_metaperson) %then %do; + %if %length(&_metaperson)=0 %then %let user=&sysuserid; + /* sometimes SAS will add @domain extension - remove for consistency */ + /* but be sure to quote in case of usernames with commas */ + %else %let user=%unquote(%scan(%quote(&_metaperson),1,@)); + %end; + %else %let user=&sysuserid; + %quote(&user) +%mend mf_getuser; +%macro mm_createfolder(path=,mDebug=0); +%put &sysmacroname: execution started for &path; +%local dbg errorcheck; +%if &mDebug=0 %then %let dbg=*; +%local parentFolderObjId child errorcheck paths; +%let paths=0; +%let errorcheck=1; +%if &syscc ge 4 %then %do; + %put SYSCC=&syscc - this macro requires a clean session; + %return; +%end; +data _null_; + length objId parentId objType parent child $200 + folderPath $1000; + call missing (of _all_); + folderPath = "%trim(&path)"; + * remove any trailing slash ; + if ( substr(folderPath,length(folderPath),1) = '/' ) then + folderPath=substr(folderPath,1,length(folderPath)-1); + * name must not be blank; + if ( folderPath = '' ) then do; + put "%str(ERR)OR: &sysmacroname PATH parameter value must be non-blank"; + end; + * must have a starting slash ; + if ( substr(folderPath,1,1) ne '/' ) then do; + put "%str(ERR)OR: &sysmacroname PATH param value must have starting slash"; + stop; + end; + * check if folder already exists ; + rc=metadata_pathobj('',cats(folderPath,"(Folder)"),"",objType,objId); + if rc ge 1 then do; + put "NOTE: Folder " folderPath " already exists!"; + stop; + end; + * do not create a root (one level) folder ; + if countc(folderPath,'/')=1 then do; + put "%str(ERR)OR: &sysmacroname will not create a new ROOT folder"; + stop; + end; + * check that root folder exists ; + root=cats('/',scan(folderpath,1,'/'),"(Folder)"); + if metadata_pathobj('',root,"",objType,parentId)<1 then do; + put "%str(ERR)OR: " root " does not exist!"; + stop; + end; + * check that parent folder exists ; + child=scan(folderPath,-1,'/'); + parent=substr(folderpath,1,length(folderpath)-length(child)-1); + rc=metadata_pathobj('',cats(parent,"(Folder)"),"",objType,parentId); + if rc<1 then do; + putlog 'The following folders will be created:'; + /* folder does not exist - so start from top and work down */ + length newpath $1000; + paths=0; + do x=2 to countw(folderpath,'/'); + newpath=''; + do i=1 to x; + newpath=cats(newpath,'/',scan(folderpath,i,'/')); + end; + rc=metadata_pathobj('',cats(newpath,"(Folder)"),"",objType,parentId); + if rc<1 then do; + paths+1; + call symputx(cats('path',paths),newpath); + putlog newpath; + end; + call symputx('paths',paths); + end; + end; + else putlog "parent " parent " exists"; + call symputx('parentFolderObjId',parentId,'l'); + call symputx('child',child,'l'); + call symputx('errorcheck',0,'l'); + &dbg put (_all_)(=); +run; +%if &errorcheck=1 or &syscc ge 4 %then %return; +%if &paths>0 %then %do x=1 %to &paths; + %put executing recursive call for &&path&x; + %mm_createfolder(path=&&path&x) +%end; +%else %do; + filename __newdir temp; + options noquotelenmax; + %local inmeta; + %put creating: &path; + %let inmeta=$METAREPOSITORY + + SAS268435456 + ; + proc metadata in="&inmeta" out=__newdir verbose; + run ; + /* check it was successful */ + data _null_; + length objId parentId objType parent child $200 ; + call missing (of _all_); + rc=metadata_pathobj('',cats("&path","(Folder)"),"",objType,objId); + if rc ge 1 then do; + putlog "SUCCCESS! &path created."; + end; + else do; + putlog "%str(ERR)OR: unsuccessful attempt to create &path"; + call symputx('syscc',8); + end; + run; + /* write the response to the log for debugging */ + %if &mDebug ne 0 %then %do; + data _null_; + infile __newdir lrecl=32767; + input; + put _infile_; + run; + %end; + filename __newdir clear; +%end; +%put &sysmacroname: execution finished for &path; +%mend mm_createfolder; +%macro mm_deletestp( + target= +)/*/STORE SOURCE*/; +%local cmtype; +data _null_; + length type uri $256; + rc=metadata_pathobj("","&target",'StoredProcess',type,uri); + call symputx('cmtype',type,'l'); + call symputx('stpuri',uri,'l'); +run; +%if &cmtype ne ClassifierMap %then %do; + %put NOTE: No Stored Process found at ⌖ + %return; +%end; +filename __in temp lrecl=10000; +filename __out temp lrecl=10000; +data _null_ ; + file __in ; + put ""; + put "SAS268436480"; + put ""; +run ; +proc metadata in=__in out=__out verbose;run; +/* list the result */ +data _null_;infile __out; input; list; run; +filename __in clear; +filename __out clear; +%local isgone; +data _null_; + length type uri $256; + call missing (of _all_); + rc=metadata_pathobj("","&target",'Note',type,uri); + call symputx('isgone',type,'l'); +run; +%if &isgone = ClassifierMap %then %do; + %put %str(ERR)OR: STP not deleted from ⌖ + %let syscc=4; + %return; +%end; +%mend mm_deletestp; +/* system macro dependencies for build process end*/ +/* system macros for build process */ +%macro mm_createwebservice(path= + ,name=initService + ,precode= + ,code=ft15f001 + ,desc=This stp was created automagically by the mm_createwebservice macro + ,mDebug=0 + ,server=SASApp + ,replace=YES + ,adapter=sasjs +)/*/STORE SOURCE*/; +%if &syscc ge 4 %then %do; + %put &=syscc - &sysmacroname will not execute in this state; + %return; +%end; +%local mD; +%if &mDebug=1 %then %let mD=; +%else %let mD=%str(*); +%&mD.put Executing mm_createwebservice.sas; +%&mD.put _local_; +* remove any trailing slash ; +%if "%substr(&path,%length(&path),1)" = "/" %then + %let path=%substr(&path,1,%length(&path)-1); +filename sasjs temp; +data _null_; + file sasjs lrecl=3000 ; + put "/* Created on %sysfunc(datetime(),datetime19.) by %mf_getuser() */"; +/* WEBOUT BEGIN */ + put ' '; + put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y '; + put ' ,engine=DATASTEP '; + put ' ,missing=NULL '; + put ' ,showmeta=NO '; + put ')/*/STORE SOURCE*/; '; + put '%local tempds colinfo fmtds i numcols; '; + put '%let numcols=0; '; + put ' '; + put '%if &action=OPEN %then %do; '; + put ' options nobomfile; '; + put ' data _null_;file &jref encoding=''utf-8'' lrecl=200; '; + put ' put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"''; '; + put ' run; '; + put '%end; '; + put '%else %if (&action=ARR or &action=OBJ) %then %do; '; + put ' /* force variable names to always be uppercase in the JSON */ '; + put ' options validvarname=upcase; '; + put ' /* To avoid issues with _webout on EBI - such as encoding diffs and truncation '; + put ' (https://support.sas.com/kb/49/325.html) we use temporary files */ '; + put ' filename _sjs1 temp lrecl=200 ; '; + put ' data _null_; file _sjs1 encoding=''utf-8''; '; + put ' put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":"; '; + put ' run; '; + put ' /* now write to _webout 1 char at a time */ '; + put ' data _null_; '; + put ' infile _sjs1 lrecl=1 recfm=n; '; + put ' file &jref mod lrecl=1 recfm=n; '; + put ' input sourcechar $char1. @@; '; + put ' format sourcechar hex2.; '; + put ' put sourcechar char1. @@; '; + put ' run; '; + put ' filename _sjs1 clear; '; + put ' '; + put ' /* grab col defs */ '; + put ' proc contents noprint data=&ds '; + put ' out=_data_(keep=name type length format formatl formatd varnum label); '; + put ' run; '; + put ' %let colinfo=%scan(&syslast,2,.); '; + put ' proc sort data=&colinfo; '; + put ' by varnum; '; + put ' run; '; + put ' /* move meta to mac vars */ '; + put ' data _null_; '; + put ' if _n_=1 then call symputx(''numcols'',nobs,''l''); '; + put ' set &colinfo end=last nobs=nobs; '; + put ' name=upcase(name); '; + put ' /* fix formats */ '; + put ' if type=2 or type=6 then do; '; + put ' typelong=''char''; '; + put ' length fmt $49.; '; + put ' if format='''' then fmt=cats(''$'',length,''.''); '; + put ' else if formatl=0 then fmt=cats(format,''.''); '; + put ' else fmt=cats(format,formatl,''.''); '; + put ' newlen=max(formatl,length); '; + put ' end; '; + put ' else do; '; + put ' typelong=''num''; '; + put ' if format='''' then fmt=''best.''; '; + put ' else if formatl=0 then fmt=cats(format,''.''); '; + put ' else if formatd=0 then fmt=cats(format,formatl,''.''); '; + put ' else fmt=cats(format,formatl,''.'',formatd); '; + put ' /* needs to be wide, for datetimes etc */ '; + put ' newlen=max(length,formatl,24); '; + put ' end; '; + put ' /* 32 char unique name */ '; + put ' newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27); '; + put ' '; + put ' call symputx(cats(''name'',_n_),name,''l''); '; + put ' call symputx(cats(''newname'',_n_),newname,''l''); '; + put ' call symputx(cats(''len'',_n_),newlen,''l''); '; + put ' call symputx(cats(''length'',_n_),length,''l''); '; + put ' call symputx(cats(''fmt'',_n_),fmt,''l''); '; + put ' call symputx(cats(''type'',_n_),type,''l''); '; + put ' call symputx(cats(''typelong'',_n_),typelong,''l''); '; + put ' call symputx(cats(''label'',_n_),coalescec(label,name),''l''); '; + put ' run; '; + put ' '; + put ' %let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32); '; + put ' '; + put ' %if &engine=PROCJSON %then %do; '; + put ' %if &missing=STRING %then %do; '; + put ' %put &sysmacroname: Special Missings not supported in proc json.; '; + put ' %put &sysmacroname: Switching to DATASTEP engine; '; + put ' %goto datastep; '; + put ' %end; '; + put ' data &tempds;set &ds; '; + put ' %if &fmt=N %then format _numeric_ best32.;; '; + put ' /* PRETTY is necessary to avoid line truncation in large files */ '; + put ' filename _sjs2 temp lrecl=131068 encoding=''utf-8''; '; + put ' proc json out=_sjs2 pretty '; + put ' %if &action=ARR %then nokeys ; '; + put ' ;export &tempds / nosastags fmtnumeric; '; + put ' run; '; + put ' /* send back to webout */ '; + put ' data _null_; '; + put ' infile _sjs2 lrecl=1 recfm=n; '; + put ' file &jref mod lrecl=1 recfm=n; '; + put ' input sourcechar $char1. @@; '; + put ' format sourcechar hex2.; '; + put ' put sourcechar char1. @@; '; + put ' run; '; + put ' filename _sjs2 clear; '; + put ' %end; '; + put ' %else %if &engine=DATASTEP %then %do; '; + put ' %datastep: '; + put ' %if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1 '; + put ' %then %do; '; + put ' %put &sysmacroname: &ds NOT FOUND!!!; '; + put ' %return; '; + put ' %end; '; + put ' '; + put ' %if &fmt=Y %then %do; '; + put ' data _data_; '; + put ' /* rename on entry */ '; + put ' set &ds(rename=( '; + put ' %do i=1 %to &numcols; '; + put ' &&name&i=&&newname&i '; + put ' %end; '; + put ' )); '; + put ' %do i=1 %to &numcols; '; + put ' length &&name&i $&&len&i; '; + put ' %if &&typelong&i=num %then %do; '; + put ' &&name&i=left(put(&&newname&i,&&fmt&i)); '; + put ' %end; '; + put ' %else %do; '; + put ' &&name&i=put(&&newname&i,&&fmt&i); '; + put ' %end; '; + put ' drop &&newname&i; '; + put ' %end; '; + put ' if _error_ then call symputx(''syscc'',1012); '; + put ' run; '; + put ' %let fmtds=&syslast; '; + put ' %end; '; + put ' '; + put ' proc format; /* credit yabwon for special null removal */ '; + put ' value bart (default=40) '; + put ' %if &missing=NULL %then %do; '; + put ' ._ - .z = null '; + put ' %end; '; + put ' %else %do; '; + put ' ._ = [quote()] '; + put ' . = null '; + put ' .a - .z = [quote()] '; + put ' %end; '; + put ' other = [best.]; '; + put ' '; + put ' data &tempds; '; + put ' attrib _all_ label=''''; '; + put ' %do i=1 %to &numcols; '; + put ' %if &&typelong&i=char or &fmt=Y %then %do; '; + put ' length &&name&i $32767; '; + put ' format &&name&i $32767.; '; + put ' %end; '; + put ' %end; '; + put ' %if &fmt=Y %then %do; '; + put ' set &fmtds; '; + put ' %end; '; + put ' %else %do; '; + put ' set &ds; '; + put ' %end; '; + put ' format _numeric_ bart.; '; + put ' %do i=1 %to &numcols; '; + put ' %if &&typelong&i=char or &fmt=Y %then %do; '; + put ' if findc(&&name&i,''"\''!!''0A0D09000E0F01021011''x) then do; '; + put ' &&name&i=''"''!!trim( '; + put ' prxchange(''s/"/\\"/'',-1, /* double quote */ '; + put ' prxchange(''s/\x0A/\n/'',-1, /* new line */ '; + put ' prxchange(''s/\x0D/\r/'',-1, /* carriage return */ '; + put ' prxchange(''s/\x09/\\t/'',-1, /* tab */ '; + put ' prxchange(''s/\x00/\\u0000/'',-1, /* NUL */ '; + put ' prxchange(''s/\x0E/\\u000E/'',-1, /* SS */ '; + put ' prxchange(''s/\x0F/\\u000F/'',-1, /* SF */ '; + put ' prxchange(''s/\x01/\\u0001/'',-1, /* SOH */ '; + put ' prxchange(''s/\x02/\\u0002/'',-1, /* STX */ '; + put ' prxchange(''s/\x10/\\u0010/'',-1, /* DLE */ '; + put ' prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */ '; + put ' prxchange(''s/\\/\\\\/'',-1,&&name&i) '; + put ' ))))))))))))!!''"''; '; + put ' end; '; + put ' else &&name&i=quote(cats(&&name&i)); '; + put ' %end; '; + put ' %end; '; + put ' run; '; + put ' '; + put ' filename _sjs3 temp lrecl=131068 ; '; + put ' data _null_; '; + put ' file _sjs3 encoding=''utf-8''; '; + put ' if _n_=1 then put "["; '; + put ' set &tempds; '; + put ' if _n_>1 then put "," @; put '; + put ' %if &action=ARR %then "[" ; %else "{" ; '; + put ' %do i=1 %to &numcols; '; + put ' %if &i>1 %then "," ; '; + put ' %if &action=OBJ %then """&&name&i"":" ; '; + put ' "&&name&i"n /* name literal for reserved variable names */ '; + put ' %end; '; + put ' %if &action=ARR %then "]" ; %else "}" ; ; '; + put ' '; + put ' /* close out the table */ '; + put ' data _null_; '; + put ' file _sjs3 mod encoding=''utf-8''; '; + put ' put '']''; '; + put ' run; '; + put ' data _null_; '; + put ' infile _sjs3 lrecl=1 recfm=n; '; + put ' file &jref mod lrecl=1 recfm=n; '; + put ' input sourcechar $char1. @@; '; + put ' format sourcechar hex2.; '; + put ' put sourcechar char1. @@; '; + put ' run; '; + put ' filename _sjs3 clear; '; + put ' %end; '; + put ' '; + put ' proc sql; '; + put ' drop table &colinfo, &tempds; '; + put ' '; + put ' %if &showmeta=YES %then %do; '; + put ' filename _sjs4 temp lrecl=131068 encoding=''utf-8''; '; + put ' data _null_; '; + put ' file _sjs4; '; + put ' put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{"; '; + put ' do i=1 to &numcols; '; + put ' name=quote(trim(symget(cats(''name'',i)))); '; + put ' format=quote(trim(symget(cats(''fmt'',i)))); '; + put ' label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i))))); '; + put ' length=quote(trim(symget(cats(''length'',i)))); '; + put ' type=quote(trim(symget(cats(''typelong'',i)))); '; + put ' if i>1 then put "," @@; '; + put ' put name '':{"format":'' format '',"label":'' label '; + put ' '',"length":'' length '',"type":'' type ''}''; '; + put ' end; '; + put ' put ''}}''; '; + put ' run; '; + put ' /* send back to webout */ '; + put ' data _null_; '; + put ' infile _sjs4 lrecl=1 recfm=n; '; + put ' file &jref mod lrecl=1 recfm=n; '; + put ' input sourcechar $char1. @@; '; + put ' format sourcechar hex2.; '; + put ' put sourcechar char1. @@; '; + put ' run; '; + put ' filename _sjs4 clear; '; + put ' %end; '; + put '%end; '; + put ' '; + put '%else %if &action=CLOSE %then %do; '; + put ' data _null_; file &jref encoding=''utf-8'' mod ; '; + put ' put "}"; '; + put ' run; '; + put '%end; '; + put '%mend mp_jsonout; '; + put ' '; + put '%macro mf_getuser( '; + put ')/*/STORE SOURCE*/; '; + put ' %local user; '; + put ' '; + put ' %if %symexist(_sasjs_username) %then %let user=&_sasjs_username; '; + put ' %else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do; '; + put ' %let user=&SYS_COMPUTE_SESSION_OWNER; '; + put ' %end; '; + put ' %else %if %symexist(_metaperson) %then %do; '; + put ' %if %length(&_metaperson)=0 %then %let user=&sysuserid; '; + put ' /* sometimes SAS will add @domain extension - remove for consistency */ '; + put ' /* but be sure to quote in case of usernames with commas */ '; + put ' %else %let user=%unquote(%scan(%quote(&_metaperson),1,@)); '; + put ' %end; '; + put ' %else %let user=&sysuserid; '; + put ' '; + put ' %quote(&user) '; + put ' '; + put '%mend mf_getuser; '; + put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=Y,missing=NULL '; + put ' ,showmeta=NO '; + put '); '; + put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug '; + put ' sasjs_tables; '; + put '%local i tempds jsonengine; '; + put ' '; + put '/* see https://github.com/sasjs/core/issues/41 */ '; + put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON; '; + put '%else %let jsonengine=DATASTEP; '; + put ' '; + put ' '; + put '%if &action=FETCH %then %do; '; + put ' %if %str(&_debug) ge 131 %then %do; '; + put ' options mprint notes mprintnest; '; + put ' %end; '; + put ' %let _webin_file_count=%eval(&_webin_file_count+0); '; + put ' /* now read in the data */ '; + put ' %do i=1 %to &_webin_file_count; '; + put ' %if &_webin_file_count=1 %then %do; '; + put ' %let _webin_fileref1=&_webin_fileref; '; + put ' %let _webin_name1=&_webin_name; '; + put ' %end; '; + put ' data _null_; '; + put ' infile &&_webin_fileref&i termstr=crlf; '; + put ' input; '; + put ' call symputx(''input_statement'',_infile_); '; + put ' putlog "&&_webin_name&i input statement: " _infile_; '; + put ' stop; '; + put ' data &&_webin_name&i; '; + put ' infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8''; '; + put ' input &input_statement; '; + put ' %if %str(&_debug) ge 131 %then %do; '; + put ' if _n_<20 then putlog _infile_; '; + put ' %end; '; + put ' run; '; + put ' %let sasjs_tables=&sasjs_tables &&_webin_name&i; '; + put ' %end; '; + put '%end; '; + put ' '; + put '%else %if &action=OPEN %then %do; '; + put ' /* fix encoding */ '; + put ' OPTIONS NOBOMFILE; '; + put ' '; + put ' /** '; + put ' * check xengine type to avoid the below err message: '; + put ' * > Function is only valid for filerefs using the CACHE access method. '; + put ' */ '; + put ' data _null_; '; + put ' set sashelp.vextfl(where=(fileref="_WEBOUT")); '; + put ' if xengine=''STREAM'' then do; '; + put ' rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8"); '; + put ' end; '; + put ' run; '; + put ' '; + put ' /* setup json */ '; + put ' data _null_;file &fref encoding=''utf-8''; '; + put ' %if %str(&_debug) ge 131 %then %do; '; + put ' put ''>>weboutBEGIN<<''; '; + put ' %end; '; + put ' put ''{"SYSDATE" : "'' "&SYSDATE" ''"''; '; + put ' put '',"SYSTIME" : "'' "&SYSTIME" ''"''; '; + put ' run; '; + put ' '; + put '%end; '; + put ' '; + put '%else %if &action=ARR or &action=OBJ %then %do; '; + put ' %mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref '; + put ' ,engine=&jsonengine,missing=&missing,showmeta=&showmeta '; + put ' ) '; + put '%end; '; + put '%else %if &action=CLOSE %then %do; '; + put ' /* To avoid issues with _webout on EBI we use a temporary file */ '; + put ' filename _sjsref temp lrecl=131068; '; + put ' %if %str(&_debug) ge 131 %then %do; '; + put ' /* if debug mode, send back first 10 records of each work table also */ '; + put ' options obs=10; '; + put ' data;run;%let tempds=%scan(&syslast,2,.); '; + put ' ods output Members=&tempds; '; + put ' proc datasets library=WORK memtype=data; '; + put ' %local wtcnt;%let wtcnt=0; '; + put ' data _null_; '; + put ' set &tempds; '; + put ' if not (upcase(name) =:"DATA"); /* ignore temp datasets */ '; + put ' i+1; '; + put ' call symputx(cats(''wt'',i),name,''l''); '; + put ' call symputx(''wtcnt'',i,''l''); '; + put ' data _null_; file _sjsref mod encoding=''utf-8''; '; + put ' put ",""WORK"":{"; '; + put ' %do i=1 %to &wtcnt; '; + put ' %let wt=&&wt&i; '; + put ' data _null_; file _sjsref mod encoding=''utf-8''; '; + put ' dsid=open("WORK.&wt",''is''); '; + put ' nlobs=attrn(dsid,''NLOBS''); '; + put ' nvars=attrn(dsid,''NVARS''); '; + put ' rc=close(dsid); '; + put ' if &i>1 then put '',''@; '; + put ' put " ""&wt"" : {"; '; + put ' put ''"nlobs":'' nlobs; '; + put ' put '',"nvars":'' nvars; '; + put ' %mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=YES) '; + put ' data _null_; file _sjsref mod encoding=''utf-8''; '; + put ' put "}"; '; + put ' %end; '; + put ' data _null_; file _sjsref mod encoding=''utf-8''; '; + put ' put "}"; '; + put ' run; '; + put ' %end; '; + put ' /* close off json */ '; + put ' data _null_;file _sjsref mod encoding=''utf-8''; '; + put ' _PROGRAM=quote(trim(resolve(symget(''_PROGRAM'')))); '; + put ' put ",""SYSUSERID"" : ""&sysuserid"" "; '; + put ' put ",""MF_GETUSER"" : ""%mf_getuser()"" "; '; + put ' put ",""_DEBUG"" : ""&_debug"" "; '; + put ' _METAUSER=quote(trim(symget(''_METAUSER''))); '; + put ' put ",""_METAUSER"": " _METAUSER; '; + put ' _METAPERSON=quote(trim(symget(''_METAPERSON''))); '; + put ' put '',"_METAPERSON": '' _METAPERSON; '; + put ' put '',"_PROGRAM" : '' _PROGRAM ; '; + put ' put ",""SYSCC"" : ""&syscc"" "; '; + put ' put ",""SYSENCODING"" : ""&sysencoding"" "; '; + put ' syserrortext=quote(cats(symget(''SYSERRORTEXT''))); '; + put ' put '',"SYSERRORTEXT" : '' syserrortext; '; + put ' put ",""SYSHOSTNAME"" : ""&syshostname"" "; '; + put ' put ",""SYSJOBID"" : ""&sysjobid"" "; '; + put ' put ",""SYSSCPL"" : ""&sysscpl"" "; '; + put ' put ",""SYSSITE"" : ""&syssite"" "; '; + put ' sysvlong=quote(trim(symget(''sysvlong''))); '; + put ' put '',"SYSVLONG" : '' sysvlong; '; + put ' syswarningtext=quote(cats(symget(''SYSWARNINGTEXT''))); '; + put ' put '',"SYSWARNINGTEXT" : '' syswarningtext; '; + put ' put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" ''; '; + put ' length memsize $32; '; + put ' memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)"; '; + put ' memsize=quote(cats(memsize)); '; + put ' put '',"MEMSIZE" : '' memsize; '; + put ' put "}" @; '; + put ' %if %str(&_debug) ge 131 %then %do; '; + put ' put ''>>weboutEND<<''; '; + put ' %end; '; + put ' run; '; + put ' /* now write to _webout 1 char at a time */ '; + put ' data _null_; '; + put ' infile _sjsref lrecl=1 recfm=n; '; + put ' file &fref mod lrecl=1 recfm=n; '; + put ' input sourcechar $char1. @@; '; + put ' format sourcechar hex2.; '; + put ' put sourcechar char1. @@; '; + put ' run; '; + put ' filename _sjsref clear; '; + put ' '; + put '%end; '; + put ' '; + put '%mend mm_webout; '; +/* WEBOUT END */ + put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO);'; + put ' %mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt,missing=&missing'; + put ' ,showmeta=&showmeta'; + put ' )'; + put '%mend;'; +run; +/* add precode and code */ +%local work tmpfile; +%let work=%sysfunc(pathname(work)); +%let tmpfile=__mm_createwebservice.temp; +%local x fref freflist mod; +%let freflist= &adapter &precode &code ; +%do x=1 %to %sysfunc(countw(&freflist)); + %if &x>1 %then %let mod=mod; + %let fref=%scan(&freflist,&x); + %&mD.put &sysmacroname: adding &fref; + data _null_; + file "&work/&tmpfile" lrecl=3000 &mod; + infile &fref; + input; + put _infile_; + run; +%end; +/* create the metadata folder if not already there */ +%mm_createfolder(path=&path) +%if &syscc ge 4 %then %return; +%if %upcase(&replace)=YES %then %do; + %mm_deletestp(target=&path/&name) +%end; +/* create the web service */ +%mm_createstp(stpname=&name + ,filename=&tmpfile + ,directory=&work + ,tree=&path + ,stpdesc=&desc + ,mDebug=&mdebug + ,server=&server + ,stptype=2) +/* find the web app url */ +%local url; +%let url=localhost/SASStoredProcess; +data _null_; + length url $128; + rc=METADATA_GETURI("Stored Process Web App",url); + if rc=0 then call symputx('url',url,'l'); +run; +%put &sysmacroname: STP &name successfully created in &path; +%put Check it out here:; +%put ;%put ;%put ; +%put &url?_PROGRAM=&path/&name; +%put ;%put ;%put ; +%mend mm_createwebservice; +/* system macros for build process end */ +%let path=services; +%let path=services/common; +%let service=appinit; +filename sascode temp lrecl=32767; +data _null_; +file sascode; + put '%macro mf_getuser('; + put ')/*/STORE SOURCE*/;'; + put '%local user;'; + put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; + put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; + put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; + put '%end;'; + put '%else %if %symexist(_metaperson) %then %do;'; + put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; + put '/* sometimes SAS will add @domain extension - remove for consistency */'; + put '/* but be sure to quote in case of usernames with commas */'; + put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; + put '%end;'; + put '%else %let user=&sysuserid;'; + put '%quote(&user)'; + put '%mend mf_getuser;'; + put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; + put ',engine=DATASTEP'; + put ',missing=NULL'; + put ',showmeta=NO'; + put ')/*/STORE SOURCE*/;'; + put '%local tempds colinfo fmtds i numcols;'; + put '%let numcols=0;'; + put '%if &action=OPEN %then %do;'; + put 'options nobomfile;'; + put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; + put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; + put 'run;'; + put '%end;'; + put '%else %if (&action=ARR or &action=OBJ) %then %do;'; + put '/* force variable names to always be uppercase in the JSON */'; + put 'options validvarname=upcase;'; + put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; + put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; + put 'filename _sjs1 temp lrecl=200 ;'; + put 'data _null_; file _sjs1 encoding=''utf-8'';'; + put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; + put 'run;'; + put '/* now write to _webout 1 char at a time */'; + put 'data _null_;'; + put 'infile _sjs1 lrecl=1 recfm=n;'; + put 'file &jref mod lrecl=1 recfm=n;'; + put 'input sourcechar $char1. @@;'; + put 'format sourcechar hex2.;'; + put 'put sourcechar char1. @@;'; + put 'run;'; + put 'filename _sjs1 clear;'; + put '/* grab col defs */'; + put 'proc contents noprint data=&ds'; + put 'out=_data_(keep=name type length format formatl formatd varnum label);'; + put 'run;'; + put '%let colinfo=%scan(&syslast,2,.);'; + put 'proc sort data=&colinfo;'; + put 'by varnum;'; + put 'run;'; + put '/* move meta to mac vars */'; + put 'data _null_;'; + put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; + put 'set &colinfo end=last nobs=nobs;'; + put 'name=upcase(name);'; + put '/* fix formats */'; + put 'if type=2 or type=6 then do;'; + put 'typelong=''char'';'; + put 'length fmt $49.;'; + put 'if format='''' then fmt=cats(''$'',length,''.'');'; + put 'else if formatl=0 then fmt=cats(format,''.'');'; + put 'else fmt=cats(format,formatl,''.'');'; + put 'newlen=max(formatl,length);'; + put 'end;'; + put 'else do;'; + put 'typelong=''num'';'; + put 'if format='''' then fmt=''best.'';'; + put 'else if formatl=0 then fmt=cats(format,''.'');'; + put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; + put 'else fmt=cats(format,formatl,''.'',formatd);'; + put '/* needs to be wide, for datetimes etc */'; + put 'newlen=max(length,formatl,24);'; + put 'end;'; + put '/* 32 char unique name */'; + put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; + put 'call symputx(cats(''name'',_n_),name,''l'');'; + put 'call symputx(cats(''newname'',_n_),newname,''l'');'; + put 'call symputx(cats(''len'',_n_),newlen,''l'');'; + put 'call symputx(cats(''length'',_n_),length,''l'');'; + put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; + put 'call symputx(cats(''type'',_n_),type,''l'');'; + put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; + put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; + put 'run;'; + put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; + put '%if &engine=PROCJSON %then %do;'; + put '%if &missing=STRING %then %do;'; + put '%put &sysmacroname: Special Missings not supported in proc json.;'; + put '%put &sysmacroname: Switching to DATASTEP engine;'; + put '%goto datastep;'; + put '%end;'; + put 'data &tempds;set &ds;'; + put '%if &fmt=N %then format _numeric_ best32.;;'; + put '/* PRETTY is necessary to avoid line truncation in large files */'; + put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; + put 'proc json out=_sjs2 pretty'; + put '%if &action=ARR %then nokeys ;'; + put ';export &tempds / nosastags fmtnumeric;'; + put 'run;'; + put '/* send back to webout */'; + put 'data _null_;'; + put 'infile _sjs2 lrecl=1 recfm=n;'; + put 'file &jref mod lrecl=1 recfm=n;'; + put 'input sourcechar $char1. @@;'; + put 'format sourcechar hex2.;'; + put 'put sourcechar char1. @@;'; + put 'run;'; + put 'filename _sjs2 clear;'; + put '%end;'; + put '%else %if &engine=DATASTEP %then %do;'; + put '%datastep:'; + put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; + put '%then %do;'; + put '%put &sysmacroname: &ds NOT FOUND!!!;'; + put '%return;'; + put '%end;'; + put '%if &fmt=Y %then %do;'; + put 'data _data_;'; + put '/* rename on entry */'; + put 'set &ds(rename=('; + put '%do i=1 %to &numcols;'; + put '&&name&i=&&newname&i'; + put '%end;'; + put '));'; + put '%do i=1 %to &numcols;'; + put 'length &&name&i $&&len&i;'; + put '%if &&typelong&i=num %then %do;'; + put '&&name&i=left(put(&&newname&i,&&fmt&i));'; + put '%end;'; + put '%else %do;'; + put '&&name&i=put(&&newname&i,&&fmt&i);'; + put '%end;'; + put 'drop &&newname&i;'; + put '%end;'; + put 'if _error_ then call symputx(''syscc'',1012);'; + put 'run;'; + put '%let fmtds=&syslast;'; + put '%end;'; + put 'proc format; /* credit yabwon for special null removal */'; + put 'value bart (default=40)'; + put '%if &missing=NULL %then %do;'; + put '._ - .z = null'; + put '%end;'; + put '%else %do;'; + put '._ = [quote()]'; + put '. = null'; + put '.a - .z = [quote()]'; + put '%end;'; + put 'other = [best.];'; + put 'data &tempds;'; + put 'attrib _all_ label='''';'; + put '%do i=1 %to &numcols;'; + put '%if &&typelong&i=char or &fmt=Y %then %do;'; + put 'length &&name&i $32767;'; + put 'format &&name&i $32767.;'; + put '%end;'; + put '%end;'; + put '%if &fmt=Y %then %do;'; + put 'set &fmtds;'; + put '%end;'; + put '%else %do;'; + put 'set &ds;'; + put '%end;'; + put 'format _numeric_ bart.;'; + put '%do i=1 %to &numcols;'; + put '%if &&typelong&i=char or &fmt=Y %then %do;'; + put 'if findc(&&name&i,''"\''!!''0A0D09000E0F01021011''x) then do;'; + put '&&name&i=''"''!!trim('; + put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; + put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; + put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; + put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; + put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; + put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; + put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; + put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; + put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; + put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; + put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; + put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; + put '))))))))))))!!''"'';'; + put 'end;'; + put 'else &&name&i=quote(cats(&&name&i));'; + put '%end;'; + put '%end;'; + put 'run;'; + put 'filename _sjs3 temp lrecl=131068 ;'; + put 'data _null_;'; + put 'file _sjs3 encoding=''utf-8'';'; + put 'if _n_=1 then put "[";'; + put 'set &tempds;'; + put 'if _n_>1 then put "," @; put'; + put '%if &action=ARR %then "[" ; %else "{" ;'; + put '%do i=1 %to &numcols;'; + put '%if &i>1 %then "," ;'; + put '%if &action=OBJ %then """&&name&i"":" ;'; + put '"&&name&i"n /* name literal for reserved variable names */'; + put '%end;'; + put '%if &action=ARR %then "]" ; %else "}" ; ;'; + put '/* close out the table */'; + put 'data _null_;'; + put 'file _sjs3 mod encoding=''utf-8'';'; + put 'put '']'';'; + put 'run;'; + put 'data _null_;'; + put 'infile _sjs3 lrecl=1 recfm=n;'; + put 'file &jref mod lrecl=1 recfm=n;'; + put 'input sourcechar $char1. @@;'; + put 'format sourcechar hex2.;'; + put 'put sourcechar char1. @@;'; + put 'run;'; + put 'filename _sjs3 clear;'; + put '%end;'; + put 'proc sql;'; + put 'drop table &colinfo, &tempds;'; + put '%if &showmeta=YES %then %do;'; + put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; + put 'data _null_;'; + put 'file _sjs4;'; + put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; + put 'do i=1 to &numcols;'; + put 'name=quote(trim(symget(cats(''name'',i))));'; + put 'format=quote(trim(symget(cats(''fmt'',i))));'; + put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; + put 'length=quote(trim(symget(cats(''length'',i))));'; + put 'type=quote(trim(symget(cats(''typelong'',i))));'; + put 'if i>1 then put "," @@;'; + put 'put name '':{"format":'' format '',"label":'' label'; + put ''',"length":'' length '',"type":'' type ''}'';'; + put 'end;'; + put 'put ''}}'';'; + put 'run;'; + put '/* send back to webout */'; + put 'data _null_;'; + put 'infile _sjs4 lrecl=1 recfm=n;'; + put 'file &jref mod lrecl=1 recfm=n;'; + put 'input sourcechar $char1. @@;'; + put 'format sourcechar hex2.;'; + put 'put sourcechar char1. @@;'; + put 'run;'; + put 'filename _sjs4 clear;'; + put '%end;'; + put '%end;'; + put '%else %if &action=CLOSE %then %do;'; + put 'data _null_; file &jref encoding=''utf-8'' mod ;'; + put 'put "}";'; + put 'run;'; + put '%end;'; + put '%mend mp_jsonout;'; + put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=Y,missing=NULL'; + put ',showmeta=NO'; + put ');'; + put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; + put 'sasjs_tables;'; + put '%local i tempds jsonengine;'; + put '/* see https://github.com/sasjs/core/issues/41 */'; + put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; + put '%else %let jsonengine=DATASTEP;'; + put '%if &action=FETCH %then %do;'; + put '%if %str(&_debug) ge 131 %then %do;'; + put 'options mprint notes mprintnest;'; + put '%end;'; + put '%let _webin_file_count=%eval(&_webin_file_count+0);'; + put '/* now read in the data */'; + put '%do i=1 %to &_webin_file_count;'; + put '%if &_webin_file_count=1 %then %do;'; + put '%let _webin_fileref1=&_webin_fileref;'; + put '%let _webin_name1=&_webin_name;'; + put '%end;'; + put 'data _null_;'; + put 'infile &&_webin_fileref&i termstr=crlf;'; + put 'input;'; + put 'call symputx(''input_statement'',_infile_);'; + put 'putlog "&&_webin_name&i input statement: " _infile_;'; + put 'stop;'; + put 'data &&_webin_name&i;'; + put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; + put 'input &input_statement;'; + put '%if %str(&_debug) ge 131 %then %do;'; + put 'if _n_<20 then putlog _infile_;'; + put '%end;'; + put 'run;'; + put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; + put '%end;'; + put '%end;'; + put '%else %if &action=OPEN %then %do;'; + put '/* fix encoding */'; + put 'OPTIONS NOBOMFILE;'; + put '/**'; + put '* check xengine type to avoid the below err message:'; + put '* > Function is only valid for filerefs using the CACHE access method.'; + put '*/'; + put 'data _null_;'; + put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; + put 'if xengine=''STREAM'' then do;'; + put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; + put 'end;'; + put 'run;'; + put '/* setup json */'; + put 'data _null_;file &fref encoding=''utf-8'';'; + put '%if %str(&_debug) ge 131 %then %do;'; + put 'put ''>>weboutBEGIN<<'';'; + put '%end;'; + put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; + put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; + put 'run;'; + put '%end;'; + put '%else %if &action=ARR or &action=OBJ %then %do;'; + put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; + put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta'; + put ')'; + put '%end;'; + put '%else %if &action=CLOSE %then %do;'; + put '/* To avoid issues with _webout on EBI we use a temporary file */'; + put 'filename _sjsref temp lrecl=131068;'; + put '%if %str(&_debug) ge 131 %then %do;'; + put '/* if debug mode, send back first 10 records of each work table also */'; + put 'options obs=10;'; + put 'data;run;%let tempds=%scan(&syslast,2,.);'; + put 'ods output Members=&tempds;'; + put 'proc datasets library=WORK memtype=data;'; + put '%local wtcnt;%let wtcnt=0;'; + put 'data _null_;'; + put 'set &tempds;'; + put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; + put 'i+1;'; + put 'call symputx(cats(''wt'',i),name,''l'');'; + put 'call symputx(''wtcnt'',i,''l'');'; + put 'data _null_; file _sjsref mod encoding=''utf-8'';'; + put 'put ",""WORK"":{";'; + put '%do i=1 %to &wtcnt;'; + put '%let wt=&&wt&i;'; + put 'data _null_; file _sjsref mod encoding=''utf-8'';'; + put 'dsid=open("WORK.&wt",''is'');'; + put 'nlobs=attrn(dsid,''NLOBS'');'; + put 'nvars=attrn(dsid,''NVARS'');'; + put 'rc=close(dsid);'; + put 'if &i>1 then put '',''@;'; + put 'put " ""&wt"" : {";'; + put 'put ''"nlobs":'' nlobs;'; + put 'put '',"nvars":'' nvars;'; + put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=YES)'; + put 'data _null_; file _sjsref mod encoding=''utf-8'';'; + put 'put "}";'; + put '%end;'; + put 'data _null_; file _sjsref mod encoding=''utf-8'';'; + put 'put "}";'; + put 'run;'; + put '%end;'; + put '/* close off json */'; + put 'data _null_;file _sjsref mod encoding=''utf-8'';'; + put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; + put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; + put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; + put 'put ",""_DEBUG"" : ""&_debug"" ";'; + put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; + put 'put ",""_METAUSER"": " _METAUSER;'; + put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; + put 'put '',"_METAPERSON": '' _METAPERSON;'; + put 'put '',"_PROGRAM" : '' _PROGRAM ;'; + put 'put ",""SYSCC"" : ""&syscc"" ";'; + put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; + put 'syserrortext=quote(cats(symget(''SYSERRORTEXT'')));'; + put 'put '',"SYSERRORTEXT" : '' syserrortext;'; + put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; + put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; + put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; + put 'put ",""SYSSITE"" : ""&syssite"" ";'; + put 'sysvlong=quote(trim(symget(''sysvlong'')));'; + put 'put '',"SYSVLONG" : '' sysvlong;'; + put 'syswarningtext=quote(cats(symget(''SYSWARNINGTEXT'')));'; + put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; + put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; + put 'length memsize $32;'; + put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; + put 'memsize=quote(cats(memsize));'; + put 'put '',"MEMSIZE" : '' memsize;'; + put 'put "}" @;'; + put '%if %str(&_debug) ge 131 %then %do;'; + put 'put ''>>weboutEND<<'';'; + put '%end;'; + put 'run;'; + put '/* now write to _webout 1 char at a time */'; + put 'data _null_;'; + put 'infile _sjsref lrecl=1 recfm=n;'; + put 'file &fref mod lrecl=1 recfm=n;'; + put 'input sourcechar $char1. @@;'; + put 'format sourcechar hex2.;'; + put 'put sourcechar char1. @@;'; + put 'run;'; + put 'filename _sjsref clear;'; + put '%end;'; + put '%mend mm_webout;'; + put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO);'; + put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; + put ',missing=&missing'; + put ',showmeta=&showmeta'; + put ') %mend;'; + put '/* provide additional debug info */'; + put '%global _program;'; + put '%put &=syscc;'; + put '%put user=%mf_getuser();'; + put '%put pgm=&_program;'; + put '%put timestamp=%sysfunc(datetime(),datetime19.);'; + put '* Service Variables start;'; + put '* Service Variables end;'; + put '* SAS Macros start;'; + put '* SAS Macros end;'; + put '* SAS Includes start;'; + put '* SAS Includes end;'; + put '* Binary Files start;'; + put '* Binary Files end;'; + put '* ServiceInit start;'; + put 'libname mydb (work);'; + put 'data mydb.springs ;'; + put 'attrib'; + put 'Latitude length= 8'; + put 'Longitude length= 8'; + put 'Name length= $34'; + put 'Area length= $14'; + put 'Type length= $9'; + put 'Farenheit length= 8'; + put 'Celsius length= 8'; + put ';'; + put 'infile cards dsd;'; + put 'input'; + put 'Latitude'; + put 'Longitude'; + put 'Name :$char.'; + put 'Area :$char.'; + put 'Type :$char.'; + put 'Farenheit'; + put 'Celsius'; + put ';'; + put 'missing a b c d e f g h i j k l m n o p q r s t u v w x y z _;'; + put 'datalines4;'; + put '51.925,-177.16,Fumaroles on Kanaga Island,Adak,Hotspring,219,104'; + put '65.858,-164.71,Serpentine Hot Springs,Bendeleben,Hotspring,171,77'; + put '53.851,-166.918,Hot Springs Near Makushin Volcano,Unalaska,Hotspring,H,H'; + put '53.877,-166.448,Hot Springs Near Summer Bay,Unalaska,Hotspring,H,H'; + put '52.27,-174.042,Hot Springs on Atka Island,Atka,Hotspring,H,H'; + put '52.34,-174.26,Hot Springs on Atka Island,Atka,Hotspring,H,H'; + put '52.358,-172.317,Hot Spring on Seguam Island,Seguam,Hotspring,H,H'; + put '52.84,-169.9,Chuginadak Hot Springs,Samalga Island,Hotspring,H,H'; + put '52.96,-169.71,Hot Spring on Kagamil Island,Samalga Island,Hotspring,H,H'; + put '51.94,-178.5,Hot Spring on Little Sitkin Island,Rat Islands,Hotspring,H,H'; + put '51.963,-178.491,Fumaroles on Little Sitkin Island,Rat Islands,Hotspring,H,H'; + put '51.775,-178.793,Fumaroles on Gareloi Island,Gareloi Island,Hotspring,H,H'; + put '53.207,-168.445,Hot Springs Near Geyser Bight,Umnak,Hotspring,H,H'; + put '53.892,-166.93,Makushin Volcano Fumaroles,Unalaska,Hotspring,310,154'; + put '54.9,-162.885,Hot Spring on Amagat Island,False Pass,Hotspring,H,H'; + put '53.213,-168.463,Hot Springs Near Geyser Bight,Umnak,Hotspring,216,102'; + put '53.223,-168.477,Hot Springs Near Geyser Bight,Umnak,Hotspring,214,101'; + put '53.443,-168.092,Thermal Springs In Okmok Caldera,Umnak,Hotspring,212,100'; + put '52.042,-176.108,Hot Springs on Great Sitkin Island,Adak,Hotspring,210,99'; + put '55.983,-131.661,Bailey Hot Spring,Ketchikan,Hotspring,198,92'; + put '53.242,-168.365,Hot Springs Near Hot Springs Cove,Umnak,Hotspring,192,89'; + put '54.157,-165.85,Hot Springs Near Hot Springs Bay,Unimak,Hotspring,181,83'; + put '58.033,-136.017,Hot Springs North End Tenakee Inle,Mt. Fairweathe,Hotspring,180,82'; + put '65.093,-164.922,Pilgrim Springs,Bendeleben,Hotspring,178,81'; + put '57.831,-156.513,W Ukinek Spring,Ugashik,Hotspring,178,81'; + put '65.459,-153.312,Little Melozitna Hot Springs,Melozitna,Hotspring,176,80'; + put '51.81,-177.79,Hot Spring on Tanaga Island,Adak,Hotspring,H,H'; + put '65.233,-144.483,Hot Springs on Big Windy Creek,Circle,Hotspring,H,H'; + put '55.334,-162.137,Hot Spring at West End Emmons Lake,Cold Bay,Hotspring,68,20'; + put '66.197,-154.006,Tunalkten Lake Hot Spring,Hughes,Hotspring,.,.'; + put '67.403,-153.883,Hot Spring Near Arrigetch Peaks,Survey Pass,Hotspring,W,W'; + put '65.047,-142.848,Hot Spring on Flat Creek,Charley River,Hotspring,W,W'; + put '63.683,-151.233,Hot Springs Near Glacier,Mt. Mckinley,Hotspring,W,W'; + put '63.883,-150.717,Hot Springs East of Diamond,Mt. Mckinley,Hotspring,W,W'; + put '62.45,-157.933,Hot Spring Near Flat,Iditarod,Hotspring,W,W'; + put '60.837,-142.42,Hot Spring on Twelvemile Creek,Bering Glacier,Hotspring,W,W'; + put '56.58,-132.18,South Stikine Spring,Petersburg,Hotspring,W,W'; + put '52.87,-173.13,Hot Spring on Attu Island,Attu,Hotspring,W,W'; + put '65.908,-154.993,Deniktow Ridge Hot Springs,Melozitna,Hotspring,H,H'; + put '53.95,-168.037,Hot Springs on Bogoslof Island,Umnak,Hotspring,H,H'; + put '65.45,-150,Hot Spring Near Little Minook Cr,Tanana,Hotspring,H,H'; + put '51.967,-178.444,Fumaroles on Little Sitkin Island,Rat Islands,Hotspring,H,H'; + put '64.002,-156.3,Hot Spring on Tributary of Innoko,Nulato,Hotspring,H,H'; + put '61.058,-160.692,Hot Spring Near Tuluksak River,Russian Missio,Hotspring,H,H'; + put '61.363,-157.733,Hot Springs on Upper Chuilnuk Rive,Sleetmute,Hotspring,H,H'; + put '61.267,-151.238,Hot Lake In Bottom of Crater Peak,Tyonek,Hotspring,H,H'; + put '58.24,-155.09,Hot Spring Near Katmai Pass,Mt. Katmai,Hotspring,H,H'; + put '58.27,-154.89,Hot Springs Near Mt Katmai,Mt. Katmai,Hotspring,H,H'; + put '58.92,-153.98,Hot Spring West of Cape Douglas,Afognak,Hotspring,H,H'; + put '55.368,-161.961,Fumarole,Port Moller,Hotspring,H,H'; + put '54.18,-165.41,Hot Springs on Akun Island,Unimak,Hotspring,H,H'; + put '54.23,-165.66,Hot Springs on Akun Island,Unimak,Hotspring,H,H'; + put '54.66,-164.55,Hot Spring on Unimak Island,Unimak,Hotspring,H,H'; + put '65.97,-154.033,Pocahontas Hot Springs,Melozitna,Hotspring,H,H'; + put '65.216,-149.993,Hutlinana Hot Springs,Livengood,Hotspring,109,43'; + put '57.085,-134.839,Baranof Warm Springs,Sitka,Hotspring,124,51'; + put '67.283,-155.067,Reed River Hot Spring,Survey Pass,Hotspring,122,50'; + put '66.15,-157.117,Hot Springs Near South Bm,Shungnak,Hotspring,122,50'; + put '66.233,-157.583,Hot Springs on Hawk River,Shungnak,Hotspring,122,50'; + put '65.81,-151.237,Kilo Hot Spring,Tanana,Hotspring,122,50'; + put '56.717,-132.005,Chief Shakes Hot Springs,Petersburg,Hotspring,122,50'; + put '69.33,-144.044,Okpilak Springs,Mt. Michelson,Hotspring,119,49'; + put '65.367,-161.25,Granite Mountain Hot Springs,Candle,Hotspring,120,49'; + put '57.644,-135.333,Nylen Hot Springs,Sitka,Hotspring,120,49'; + put '65.963,-150.919,Ray River Hot Spring,Tanana,Hotspring,117,47'; + put '64.924,-154.837,Horner Hot Springs,Ruby,Hotspring,117,47'; + put '65.267,-155.28,Hot Springs Near Dulbi River,Melozitna,Hotspring,126,52'; + put '57.807,-136.341,White Sulphur Springs (Hooniah H S,Sitka,Hotspring,111,44'; + put '57.781,-135.217,Tenakee Hot Springs,Sitka,Hotspring,109,43'; + put '52.19,-174.25,Hot Springs on Atka Island,Atka,Hotspring,167,75'; + put '55.334,-133.641,Dalton (Craig) Hot Springs,Craig,Hotspring,109,43'; + put '51.944,-178.547,Fumaroles on Little Sitkin Island,Rat Islands,Hotspring,H,H'; + put '57.771,-135.82,Hot Spring North Arm Peril Strait,Sitka,Hotspring,100,38'; + put '53.848,-166.873,Hot Springs Near Makushin Volcano,Unalaska,Hotspring,94,34'; + put '69.627,-146.027,Red Hill Spring,Mt. Michelson,Hotspring,91,33'; + put '62.081,-145.007,Upper Klawasi Warm Springs,Gulkana,Hotspring,86,30'; + put '62.058,-145.222,Mineral Spring (Lower Klawasi Cone,Gulkana,Hotspring,82,28'; + put '56.68,-131.882,Barnes Lake Hot Springs,Bradfield Cana,Hotspring,79,26'; + put '56.928,-158.12,Surprise Lake Hot Spring,Chignik,Hotspring,73,23'; + put '56.667,-132.28,Twin Lakes Hot Springs,Petersburg,Hotspring,70,21'; + put '66.383,-157.517,Warm Spring Near Purcell Mountain,Shungnak,Hotspring,68,20'; + put '57.348,-135.385,Hot Spring Near Fish Bay,Sitka,Hotspring,117,47'; + put '65.983,-150.56,Hot Springs on Lower Ray River,Tanana,Hotspring,142,61'; + put '55.863,-160.493,Hot Spring Near Port Moller,Port Moller,Hotspring,160,71'; + put '53.253,-168.358,Hot Springs Near Hot Springs Cove,Umnak,Hotspring,158,70'; + put '51.97,-176.61,Hot Springs on Adak Island,Adak,Hotspring,154,68'; + put '65.053,-146.057,Chena Hot Springs,Circle,Hotspring,153,67'; + put '58.37,-137.09,Hot Springs Near Icy Point,Mt. Fairweathe,Hotspring,153,67'; + put '56.836,-135.374,Goddard Hot Springs,Port Alexander,Hotspring,153,67'; + put '66.342,-150.85,Kanuti Hot Springs,Bettles,Hotspring,151,66'; + put '64.85,-162.3,Clear Creek Hot Springs,Solomon,Hotspring,149,65'; + put '53.233,-168.3,Hot Spring on Umnak Island,Umnak,Hotspring,149,65'; + put '61.2,-159.863,Hot Springs Near Ophir Creek,Russian Missio,Hotspring,145,63'; + put '57.865,-156.499,Gas Rocks Hot Spring,Ugashik,Hotspring,127,53'; + put '51.762,-178.77,Fumaroles on Gareloi Island,Gareloi Island,Hotspring,144,62'; + put '66.367,-156.767,Hot Springs Near Division Bm,Shungnak,Hotspring,140,60'; + put '64.7,-162.467,Hot Spring Near Kwiniuk River,Solomon,Hotspring,106,41'; + put '65.274,-148.847,Tolovana Hot Springs,Livengood,Hotspring,140,60'; + put '55.933,-131.559,Bell Island Hot Springs,Ketchikan,Hotspring,165,74'; + put '57.178,-157.015,Hot Spring Near Mother Goose Lake,Ugashik,Hotspring,138,59'; + put '65.483,-144.637,Circle Hot Springs,Circle,Hotspring,135,57'; + put '56.233,-131.267,Bradfield Canal Hot Springs,Bradfield Cana,Hotspring,135,57'; + put '65.006,-150.633,Manley Hot Springs,Tanana,Hotspring,133,56'; + put '65.129,-154.692,Melozi (Melozitna) Springs,Melozitna,Hotspring,131,55'; + put '66.217,-149.547,Dall Hot Springs,Beaver,Hotspring,129,54'; + put '55.217,-162.483,Hot Springs East of Cold Bay,Cold Bay,Hotspring,129,54'; + put '65.217,-162.9,Hot Springs Near Lava Creek,Bendeleben,Hotspring,127,53'; + put '54.944,-163.251,Hot Springs Near Morzhovoi,False Pass,Hotspring,145,63'; + put '36.48,-91.053,Warm Springs,Poplar Bluff,Hotspring,82,28'; + put '34.384,-93.607,Caddo Gap Springs,Little Rock,Hotspring,95,35'; + put '34.321,-93.739,Spring on Redland Mountain,Little Rock,Hotspring,77,25'; + put '34.406,-93.908,Spring on Little Missouri River,Little Rock,Hotspring,74,23'; + put '34.542,-93.024,Big Chalybeate Spring,Little Rock,Hotspring,79,26'; + put '34.513,-93.053,Hot Springs,Little Rock,Hotspring,147,64'; + put '33.008,-109.778,Grapevine Spring,Clifton,Hotspring,91,33'; + put '32.984,-113.324,Agua Caliente Springs,Ajo,Hotspring,102,39'; + put '34.563,-113.497,Kaiser Hot Spring,Prescott,Hotspring,99,37'; + put '34.076,-111.708,Spring (Hot),Holbrook,Hotspring,99,37'; + put '33.17,-110.528,Coolidge Dam Warm Spring,Mesa,Hotspring,99,37'; + put '34.695,-113.572,Cofer Hot Spring,Prescott,Hotspring,97,36'; + put '33.209,-110.818,Pioneer Spring,Mesa,Hotspring,91,33'; + put '33.988,-112.362,Castle Hot Springs,Phoenix,Hotspring,115,46'; + put '32.345,-110.247,Warm Springs,Tucson,Hotspring,91,33'; + put '36.196,-113.081,Lava Warm Springs,Grand Canyon,Hotspring,90,32'; + put '33.068,-109.975,Warm Spring,Clifton,Hotspring,90,32'; + put '31.943,-113.013,Quitobaquito Springs,Lukeville,Hotspring,90,32'; + put '31.695,-110.963,Agua Caliente Spring,Nogales,Hotspring,90,32'; + put '33.075,-109.298,Seep,Clifton,Hotspring,95,35'; + put '34.357,-111.71,Verde Hot Springs,Holbrook,Hotspring,104,40'; + put '32.998,-109.901,Indian Hot Springs,Silver City,Hotspring,118,48'; + put '33.669,-111.165,Roosevelt Dam Springs,Mesa,Hotspring,118,48'; + put '32.336,-110.24,Hookers Hot Springs,Tucson,Hotspring,127,53'; + put '33.4,-109.152,Hannah Hot Spring,Clifton,Hotspring,133,56'; + put '33.08,-109.303,Hot Spring,Clifton,Hotspring,138,59'; + put '32.741,-114.068,Radium Hot Springs,El Centro,Hotspring,140,60'; + put '32.971,-109.35,Gillard Hot Springs,Silver City,Hotspring,180,82'; + put '35.984,-114.742,Hot Spring,Kingman,Hotspring,H,H'; + put '33.78,-110.317,Warm Spring,Mesa,Hotspring,W,W'; + put '36.418,-113.956,Pakoon Springs,Grand Canyon,Hotspring,86,30'; + put '33.493,-112.94,El Dorado Hot Springs,Phoenix South,Hotspring,112,44'; + put '34.896,-114.308,Oatman Warm Springs,Needles,Hotspring,91,33'; + put '33.055,-109.295,Clifton Hot Springs,Clifton,Hotspring,102,39'; + put '34.445,-112.693,Spring,Prescott,Hotspring,72,22'; + put '32.337,-110.708,Mercer Spring,Tucson,Hotspring,77,25'; + put '34.649,-111.744,Soda Spring,Holbrook,Hotspring,75,24'; + put '33.253,-110.703,Spring,Mesa,Hotspring,75,24'; + put '31.362,-109.265,Astin Spring,Douglas,Hotspring,75,24'; + put '35.169,-113.851,Frost Mine Spring,Williams,Hotspring,70,21'; + put '31.673,-109.902,Antelope Spring,Douglas,Hotspring,79,26'; + put '35.213,-113.425,Casa Grande Spring,Williams,Hotspring,72,22'; + put '33.51,-110.403,Cassadore Spring,Mesa,Hotspring,73,23'; + put '34.32,-111.453,Tonto Natural Bridge Spring,Holbrook,Hotspring,72,22'; + put '34.405,-111.602,Spring,Holbrook,Hotspring,72,22'; + put '34.436,-109.402,Salado Springs,Saint Johns,Hotspring,72,22'; + put '31.592,-109.51,Lewis Spring,Douglas,Hotspring,68,20'; + put '33.046,-109.44,Eagle Creek Hot Springs,Clifton,Hotspring,97,36'; + put '36.509,-111.852,Colorado Pool,Marble Canyon,Hotspring,86,30'; + put '33.062,-109.482,Warm Spring,Clifton,Hotspring,73,23'; + put '31.637,-110.703,Monkey Spring,Nogales,Hotspring,82,28'; + put '32.281,-110.73,Agua Caliente,Tucson,Hotspring,86,30'; + put '32.327,-110.228,N-O Spring,Tucson,Hotspring,73,23'; + put '32.983,-110.373,Warm Spring,Tucson,Hotspring,79,26'; + put '33.152,-110.639,Mescal Warm Spring,Mesa,Hotspring,84,29'; + put '33.163,-110.662,Spring,Mesa,Hotspring,82,28'; + put '35.077,-113.267,Trout Creek Spring,Williams,Hotspring,81,27'; + put '33.438,-110.213,Warm Springs,Mesa,Hotspring,86,30'; + put '36.895,-113.913,Springs,Grand Canyon,Hotspring,79,26'; + put '35.96,-114.725,Hot Spring,Kingman,Hotspring,86,30'; + put '34.925,-114.221,Caliche Spring,Needles,Hotspring,79,26'; + put '33.915,-112.332,Mitchell Spring,Phoenix,Hotspring,79,26'; + put '33.831,-110.574,Salt Banks,Mesa,Hotspring,78,26'; + put '34.91,-113.608,Tom Brown Warm Spring,Prescott,Hotspring,82,28'; + put '38.873,-122.689,Seigler Springs,Santa Rosa,Hotspring,126,52'; + put '36.814,-117.763,Palm Spring,Death Valley,Hotspring,120,49'; + put '34.498,-119.341,Stingleys Hot Springs,Los Angeles,Hotspring,123,51'; + put '33.67,-117.325,"Wrenden Hot Sprs, Elsinore Hot Spr",Santa Ana,Hotspring,125,52'; + put '37.253,-118.373,Keough Hot Springs,Mariposa,Hotspring,124,51'; + put '36.229,-118.302,Jordan Hot Springs,Fresno,Hotspring,124,51'; + put '34.502,-119.346,Vickers Hot Springs,Los Angeles,Hotspring,124,51'; + put '36.123,-121.64,Slates Hot Springs,Santa Cruz,Hotspring,122,50'; + put '35.881,-118.67,California Hot Springs,Bakersfield,Hotspring,122,50'; + put '38.788,-122.777,Sulphur Creek,Santa Rosa,Hotspring,120,49'; + put '37.648,-118.806,Hot Springs,Mariposa,Hotspring,129,54'; + put '36.703,-120.86,Mercey Hot Springs,Santa Cruz,Hotspring,119,48'; + put '33.589,-117.511,San Juan Hot Springs,Santa Ana,Hotspring,120,49'; + put '38.785,-122.655,Harbin Springs,Santa Rosa,Hotspring,120,49'; + put '37.677,-118.79,Dehy Hot Spring,Mariposa,Hotspring,134,57'; + put '39.183,-122.7,Bartlett Springs,Ukiah,Hotspring,144,62'; + put '36.234,-121.546,Tassajara Hot Springs,Santa Cruz,Hotspring,144,62'; + put '36.144,-120.555,Coalinga Mineral Springs,Santa Cruz,Hotspring,112,44'; + put '39.033,-122.445,Jones Fountain of Life Spring,Ukiah,Hotspring,142,61'; + put '35.575,-118.534,"Miracle Hot Sprs, Hobo Hot Sprs",Bakersfield,Hotspring,119,48'; + put '33.284,-116.631,Warner Hot Spring,Santa Ana,Hotspring,138,59'; + put '38.237,-119.326,Buckeye Hot Spring,Walker Lake,Hotspring,140,60'; + put '41.266,-120.08,Hot Springs (Menlo Baths),Alturas,Hotspring,135,57'; + put '33.753,-117.495,Glen Ivy Hot Springs,Santa Ana,Hotspring,131,55'; + put '37.802,-118.532,Benton Hot Springs,Mariposa,Hotspring,134,57'; + put '38.691,-123.024,Skaggs Springs,Santa Rosa,Hotspring,135,56'; + put '35.62,-118.473,Scovern Hot Springs,Bakersfield,Hotspring,133,56'; + put '34.538,-119.56,Agua Caliente Spring,Los Angeles,Hotspring,133,56'; + put '33.558,-117.154,Murrietta Hot Springs,Santa Ana,Hotspring,132,56'; + put '39.226,-120.01,Brockway Hot Springs,Chico,Hotspring,131,55'; + put '41.036,-121.926,Hunt Hot Spring,Alturas,Hotspring,136,58'; + put '34.582,-119.044,Willett Hot Springs,Los Angeles,Hotspring,108,42'; + put '37.234,-118.881,Blaney Meadows Hot Springs,Mariposa,Hotspring,109,43'; + put '36.477,-118.404,Kern Hot Spring,Fresno,Hotspring,109,43'; + put '36.806,-117.771,Lower Warm Springs,Death Valley,Hotspring,110,43'; + put '34.482,-119.302,Matilija Hot Springs,Los Angeles,Hotspring,109,43'; + put '34.537,-119.879,San Marcos Hot Spring,Los Angeles,Hotspring,110,43'; + put '33.896,-117.057,Eden Hot Springs,Santa Ana,Hotspring,109,43'; + put '39.573,-120.348,Campbell Hot Springs,Chico,Hotspring,111,44'; + put '38.994,-122.742,Horseshoe Spring,Santa Rosa,Hotspring,108,42'; + put '33.969,-116.942,Highland Springs,Santa Ana,Hotspring,112,44'; + put '34.34,-117.173,"Warm Spring, Hot Spring",San Bernardino,Hotspring,108,42'; + put '41.219,-120.066,Squaw Baths,Alturas,Hotspring,106,41'; + put '40.142,-120.935,Indian Valley Hot Springs,Susanville,Hotspring,106,41'; + put '39.292,-122.821,Crabtree Hot Springs,Ukiah,Hotspring,106,41'; + put '37.108,-121.478,Gilroy Hot Springs,San Jose,Hotspring,106,41'; + put '39.227,-123.362,Orrs Springs,Ukiah,Hotspring,104,40'; + put '38.773,-122.705,Anderson Springs,Santa Rosa,Hotspring,108,42'; + put '38.858,-122.671,Howard Springs,Santa Rosa,Hotspring,113,45'; + put '34.461,-119.637,Montecito Hot Springs,Los Angeles,Hotspring,118,48'; + put '33.551,-117.167,Temecula Hot Springs,Santa Ana,Hotspring,116,47'; + put '33.835,-116.988,Gilman Hot Springs,Santa Ana,Hotspring,117,47'; + put '37.618,-119.074,Reds Meadow Hot Springs,Mariposa,Hotspring,115,46'; + put '35.528,-118.665,Democrat Hot Springs,Bakersfield,Hotspring,115,46'; + put '33.731,-118.348,Whites Point Hot Springs,Long Beach,Hotspring,115,46'; + put '37.532,-119.025,Fish Creek Hot Springs,Mariposa,Hotspring,110,43'; + put '39.032,-122.432,"Blank Spring, Manzanita Mine Sprs",Ukiah,Hotspring,112,45'; + put '37.327,-119.018,Mono Hot Springs,Mariposa,Hotspring,109,43'; + put '38.225,-119.217,The Hot Springs,Walker Lake,Hotspring,113,45'; + put '35.727,-118.408,Hot Spring,Bakersfield,Hotspring,113,45'; + put '41.6,-120.088,Leonards Hot Springs,Alturas,Hotspring,144,62'; + put '38.874,-123.518,Point Arena Hot Springs,Santa Rosa,Hotspring,111,44'; + put '41.126,-121.028,Kellog Hot Springs,Alturas,Hotspring,172,78'; + put '35.558,-118.612,Delonegha Hot Springs,Bakersfield,Hotspring,112,44'; + put '35.871,-116.23,Tecopa Hot Springs,Trona,Hotspring,118,48'; + put '41.86,-120.158,Fort Bidwell Hot Spring,Alturas,Hotspring,113,45'; + put '41.534,-120.078,Hot Springs (Surprise Valley),Alturas,Hotspring,208,98'; + put '33.345,-115.588,Mud Volcanoes,Salton Sea,Hotspring,W,W'; + put '41.012,-121.274,Hot Springs,Alturas,Hotspring,H,H'; + put '39.922,-120.024,Zamboni Hot Springs,Chico,Hotspring,H,H'; + put '38.979,-122.659,Fumarole,Santa Rosa,Hotspring,H,H'; + put '37.622,-119.028,Fumaroles,Mariposa,Hotspring,H,H'; + put '40.364,-120.243,Hot Spring,Susanville,Hotspring,204,96'; + put '38.767,-122.748,Little Geysers,Santa Rosa,Hotspring,210,99'; + put '33.328,-115.583,Mud Volcanoes,Salton Sea,Hotspring,W,W'; + put '41.67,-120.206,Lake City Hot Springs,Alturas,Hotspring,207,97'; + put '36.036,-117.802,Devils Kitchen,Death Valley,Hotspring,207,97'; + put '36.045,-117.769,Coso Hot Springs,Death Valley,Hotspring,207,97'; + put '40.382,-121.513,Morgan Hot Spring,Susanville,Hotspring,205,96'; + put '40.421,-121.375,Terminal Geyser,Susanville,Hotspring,205,96'; + put '41.19,-120.383,West Valley Reservoir Hot Spring,Alturas,Hotspring,171,77'; + put '38.802,-122.81,The Geysers,Santa Rosa,Hotspring,214,101'; + put '35.888,-116.258,Springs,Trona,Hotspring,W,W'; + put '34.185,-117.262,"Arrowhead Springs, Waterman Hot Sp",San Bernardino,Hotspring,194,90'; + put '33.823,-116.542,Palm Springs (Agua Caliente Spring,Santa Ana,Hotspring,104,40'; + put '41.196,-120.475,Springs,Alturas,Hotspring,W,W'; + put '41.959,-120.936,Warm Spring,Alturas,Hotspring,W,W'; + put '37.929,-121.965,Springs,San Jose,Hotspring,W,W'; + put '36.83,-117.736,Upper Warm Spring,Death Valley,Hotspring,W,W'; + put '33.343,-115.573,Mud Volcanoes,Salton Sea,Hotspring,W,W'; + put '35.536,-118.651,Spring (Hot),Bakersfield,Hotspring,W,W'; + put '33.332,-115.575,Mud Volcanoes,Salton Sea,Hotspring,W,W'; + put '35.967,-116.931,Warm Spring,Trona,Hotspring,W,W'; + put '33.28,-115.592,Mud Volcanoes,Salton Sea,Hotspring,W,W'; + put '33.288,-115.575,Mud Volcanoes,Salton Sea,Hotspring,W,W'; + put '33.312,-115.577,Mud Volcanoes,Salton Sea,Hotspring,W,W'; + put '33.313,-115.605,Mud Volcanoes,Salton Sea,Hotspring,W,W'; + put '40.393,-121.507,Growler Hot Spring,Susanville,Hotspring,203,95'; + put '35.148,-118.783,Warm Spring,Bakersfield,Hotspring,W,W'; + put '41.973,-122.202,Klamath Hot Spring,Weed,Hotspring,156,69'; + put '41.143,-121.11,Bassett Hot Springs,Alturas,Hotspring,174,79'; + put '38.58,-122.575,Calistoga Hot Springs,Santa Rosa,Hotspring,172,78'; + put '37.656,-118.834,Hot Creek Springs,Mariposa,Hotspring,171,77'; + put '41.229,-121.405,Little Hot Spring,Alturas,Hotspring,169,76'; + put '37.664,-118.802,The Tub,Mariposa,Hotspring,167,75'; + put '40.355,-120.257,Wendel Hot Springs,Susanville,Hotspring,205,96'; + put '38.768,-122.717,Castle Rock Springs,Santa Rosa,Hotspring,163,73'; + put '38.245,-119.205,Travertine Hot Springs,Walker Lake,Hotspring,180,82'; + put '39.002,-122.664,Sulphur Bank,Ukiah,Hotspring,156,69'; + put '39.057,-122.475,Elgin Mine,Ukiah,Hotspring,156,69'; + put '39.039,-122.421,Wilbur Springs,Ukiah,Hotspring,153,67'; + put '40.444,-121.409,Drakesbad,Susanville,Hotspring,151,66'; + put '40.457,-121.545,Mill Creek Springs,Susanville,Hotspring,150,66'; + put '38.048,-119.081,Hot Spring,Walker Lake,Hotspring,151,66'; + put '37.647,-118.859,Casa Diablo Hot Pool,Mariposa,Hotspring,165,74'; + put '41.607,-121.523,Hot Spot,Alturas,Hotspring,191,88'; + put '40.44,-121.434,Devils Kitchen,Susanville,Hotspring,203,95'; + put '40.302,-120.195,Amedee Hot Springs,Susanville,Hotspring,203,95'; + put '36.031,-117.833,Fumarole,Death Valley,Hotspring,203,95'; + put '40.447,-121.536,"Sulphur Works, Tophet Hot Springs",Susanville,Hotspring,199,93'; + put '40.455,-121.501,Bumpass Hell,Susanville,Hotspring,199,93'; + put '37.648,-118.914,Casa Diablo Hot Springs And Geyser,Mariposa,Hotspring,199,93'; + put '37.692,-118.839,Little Hot Creek Spring,Mariposa,Hotspring,180,82'; + put '34.596,-118.998,Sespe Hot Springs,Los Angeles,Hotspring,194,90'; + put '38.348,-119.4,Fales Hot Springs,Walker Lake,Hotspring,180,82'; + put '40.434,-121.399,Boiling Springs Lake,Susanville,Hotspring,190,88'; + put '41.615,-120.102,Seyferth Hot Springs,Alturas,Hotspring,185,85'; + put '41.407,-122.197,"Hot Spring, Fumaroles",Weed,Hotspring,183,84'; + put '37.993,-119.028,Paoha Island Springs,Mariposa,Hotspring,181,83'; + put '41.025,-121.924,Big Bend Hot Springs,Alturas,Hotspring,180,82'; + put '38.699,-119.846,Grovers Hot Springs,Walker Lake,Hotspring,147,64'; + put '37.665,-118.828,Hot Creek Gorge Springs,Mariposa,Hotspring,199,93'; + put '39.43,-122.538,"Sulphur Spring, Salt Spring",Ukiah,Hotspring,75,24'; + put '38.925,-122.77,Hildebrande Spring,Santa Rosa,Hotspring,77,25'; + put '38.203,-119.118,Warm Spring,Walker Lake,Hotspring,77,25'; + put '36.938,-121.565,Sargent Estate Warm Spring,Santa Cruz,Hotspring,77,25'; + put '34.826,-116.677,Newberry Spring,San Bernardino,Hotspring,77,25'; + put '41.919,-122.369,Bogus Soda Springs,Weed,Hotspring,76,24'; + put '39.053,-122.597,Quigley Soda Spring,Ukiah,Hotspring,82,28'; + put '41.252,-120.521,Warm Spring,Alturas,Hotspring,75,24'; + put '38.85,-122.693,Pine Cone Spring,Santa Rosa,Hotspring,78,26'; + put '38.339,-122.259,Napa Vichy Springs,Santa Rosa,Hotspring,76,24'; + put '38.892,-122.533,Baker Soda Spring,Santa Rosa,Hotspring,76,24'; + put '38.897,-122.882,England Springs,Santa Rosa,Hotspring,76,24'; + put '38.916,-122.799,Carlsbad Spring,Santa Rosa,Hotspring,76,24'; + put '38.192,-120.827,Valley Springs,Sacramento,Hotspring,75,24'; + put '38.85,-120.025,Myers Warm Spring,Sacramento,Hotspring,75,24'; + put '37.708,-118.813,Hot Spring,Mariposa,Hotspring,68,20'; + put '36.122,-117.217,Warm Sulphur Springs,Death Valley,Hotspring,80,27'; + put '35.682,-116.422,Saratoga Spring,Trona,Hotspring,82,28'; + put '33.733,-114.907,Mccoy Spring,Salton Sea,Hotspring,82,28'; + put '41.484,-120.764,Spring,Alturas,Hotspring,81,27'; + put '39.657,-123.585,Jackson Valley Mud Springs,Ukiah,Hotspring,80,27'; + put '39.198,-122.505,Pseudo Complexion Spring,Ukiah,Hotspring,81,27'; + put '38.85,-122.667,Bad Creek Spring,Santa Rosa,Hotspring,81,27'; + put '32.97,-116.423,Vallecitos Spring,San Diego,Hotspring,79,26'; + put '36.765,-120.901,Spring,Santa Cruz,Hotspring,81,27'; + put '34.159,-118.499,El Encino Springs,Los Angeles,Hotspring,79,26'; + put '35.879,-116.153,Resting Spring,Trona,Hotspring,80,27'; + put '41.828,-120.917,Pothole Spring,Alturas,Hotspring,78,26'; + put '39.348,-122.668,Fouts Springs,Ukiah,Hotspring,79,26'; + put '38.519,-122.26,"Napa Rock Soda Spring, Phillips So",Santa Rosa,Hotspring,78,26'; + put '38.838,-122.653,Spiers Springs,Santa Rosa,Hotspring,79,26'; + put '35.141,-116.101,Soda Station Springs,Trona,Hotspring,75,24'; + put '37.503,-121.904,Alameda Warm Springs,San Jose,Hotspring,80,27'; + put '39.429,-123.308,Muir Springs,Ukiah,Hotspring,68,20'; + put '37.924,-122.046,Sulphur Spring,San Francisco,Hotspring,75,24'; + put '40.58,-120.265,Tipton Springs,Susanville,Hotspring,70,21'; + put '39.697,-123.478,Pinches Spring,Ukiah,Hotspring,70,21'; + put '38.755,-122.285,Zim Zim Spring,Santa Rosa,Hotspring,70,21'; + put '37.083,-121.042,Spring In Oneill Forebay,San Jose,Hotspring,70,21'; + put '37.632,-121.762,Crohare Spring,San Jose,Hotspring,70,21'; + put '33.625,-115.325,Corn Spring,Salton Sea,Hotspring,72,22'; + put '36.117,-118.776,Ward Spring,Fresno,Hotspring,70,21'; + put '34.423,-119.538,Boron Spring,Los Angeles,Hotspring,72,22'; + put '39.002,-122.498,Grizzly Spring,Ukiah,Hotspring,68,20'; + put '39.088,-122.525,Sulphur Spring,Ukiah,Hotspring,68,20'; + put '38.125,-122.188,Vallejo White Sulphur Springs,Santa Rosa,Hotspring,68,20'; + put '38.31,-122.053,Tolenas Springs,Santa Rosa,Hotspring,68,20'; + put '41.45,-120.834,Kelly Hot Spring,Alturas,Hotspring,198,92'; + put '36.512,-116.821,Nevares Springs,Death Valley,Hotspring,102,39'; + put '37.888,-118.487,Bertrand Ranch Springs,Mariposa,Hotspring,70,21'; + put '35.483,-119.917,Mize Spring,Bakersfield,Hotspring,73,23'; + put '36.698,-117.848,Little Hunter Canyon Springs,Death Valley,Hotspring,81,27'; + put '38.995,-122.642,Davis Soda Spring,Santa Rosa,Hotspring,73,23'; + put '37.432,-121.308,Salt Grass Springs,San Jose,Hotspring,73,23'; + put '37.573,-121.445,Lone Tree Mineral Spring,San Jose,Hotspring,73,23'; + put '37.638,-118.887,Chance Spring,Mariposa,Hotspring,73,23'; + put '36.295,-120.985,Sulphur Springs,Santa Cruz,Hotspring,73,23'; + put '41.16,-120.403,Warm Spring,Alturas,Hotspring,70,21'; + put '35.4,-120.25,Cameta Warm Spring,San Luis Obisp,Hotspring,73,23'; + put '37.719,-118.735,Springs,Mariposa,Hotspring,75,24'; + put '35.588,-116.359,Sheep Creek Spring,Trona,Hotspring,73,23'; + put '40.568,-120.325,Sellicks Springs,Susanville,Hotspring,72,22'; + put '38.833,-122.357,One Shot Mining Co,Santa Rosa,Hotspring,72,22'; + put '38.95,-122.572,Soda Spring In Cache Formation,Santa Rosa,Hotspring,72,22'; + put '37.635,-118.72,Springs,Mariposa,Hotspring,72,22'; + put '36.13,-118.816,Soda Spring,Fresno,Hotspring,72,22'; + put '36.773,-120.898,Iridat Spring,Santa Cruz,Hotspring,73,23'; + put '33.545,-115.654,Canyon Spring,Salton Sea,Hotspring,97,36'; + put '36.675,-116.923,Keane Wonder Spring,Death Valley,Hotspring,93,34'; + put '36.331,-121.367,Paraiso Springs (Sulphur Spring),Santa Cruz,Hotspring,98,37'; + put '35.122,-120.542,Newsom Springs,San Luis Obisp,Hotspring,99,37'; + put '34.503,-120.219,Las Cruces Hot Springs,Santa Maria,Hotspring,99,37'; + put '38.49,-122.498,St Helena White Sulphur Spring,Santa Rosa,Hotspring,97,36'; + put '35.946,-116.189,Chappo Spring,Trona,Hotspring,80,27'; + put '40.019,-121.036,Spring,Susanville,Hotspring,99,37'; + put '40.44,-121.42,Hot Springs Valley,Susanville,Hotspring,83,28'; + put '32.947,-116.305,Agua Caliente Springs,San Diego,Hotspring,101,38'; + put '39.196,-122.714,Newman Springs,Ukiah,Hotspring,94,35'; + put '37.63,-118.808,Whitmore Hot Springs,Mariposa,Hotspring,95,35'; + put '35.269,-120.851,Pecho Warm Springs,San Luis Obisp,Hotspring,95,35'; + put '33.514,-117.604,Spring,Santa Ana,Hotspring,95,35'; + put '38.958,-122.701,Riviera Beach Spring,Santa Rosa,Hotspring,93,34'; + put '36.33,-117.948,Dirty Socks Hot Spring,Death Valley,Hotspring,93,34'; + put '37.847,-121.635,Byron Hot Springs,San Jose,Hotspring,96,36'; + put '35.433,-118.478,Yates Hot Springs,Bakersfield,Hotspring,100,38'; + put '35.663,-120.692,Paso Robles Artesian Spring,San Luis Obisp,Hotspring,102,39'; + put '34.507,-119.291,Wheeler Springs,Los Angeles,Hotspring,102,39'; + put '33.8,-116.927,Soboda Hot Springs,Santa Ana,Hotspring,102,39'; + put '40.223,-122.747,Stinking Springs,Redding,Hotspring,101,38'; + put '38.8,-123.17,Hoods Hot Springs,Santa Rosa,Hotspring,100,38'; + put '37.029,-117.383,Grapevine Springs,Goldfield,Hotspring,100,38'; + put '36.084,-121.584,Dolans Hot Spring,Santa Cruz,Hotspring,98,37'; + put '36.21,-118.176,Soda Springs,Fresno,Hotspring,100,38'; + put '33.664,-117.913,Fairview Hot Spring,Santa Ana,Hotspring,96,36'; + put '35.143,-116.813,Paradise Spring,Trona,Hotspring,100,38'; + put '33.837,-117.145,Lakeview Hot Springs,Santa Ana,Hotspring,100,38'; + put '33.201,-115.577,Mud Pots,Salton Sea,Hotspring,100,38'; + put '33.212,-115.591,Mud Pots,Salton Sea,Hotspring,100,38'; + put '33.217,-115.58,Wister Mud Pot,Salton Sea,Hotspring,100,38'; + put '32.617,-116.189,Jacumba Hot Springs,San Diego,Hotspring,101,38'; + put '36.618,-121.845,Sulphur Hot Spring,Santa Cruz,Hotspring,100,38'; + put '36.495,-117.893,Springs,Death Valley,Hotspring,86,30'; + put '38.033,-118.902,Mono Basin Warm Springs,Walker Lake,Hotspring,88,31'; + put '35.908,-120.367,Table Mountain (Spring),San Luis Obisp,Hotspring,88,31'; + put '34.271,-116.838,Pan Hot Springs,San Bernardino,Hotspring,88,31'; + put '40.238,-122.11,Tuscan Springs,Redding,Hotspring,86,30'; + put '40.245,-120.007,High Rock Spring,Susanville,Hotspring,86,30'; + put '38.55,-122.72,Mark West Springs,Santa Rosa,Hotspring,88,31'; + put '43.513,-119.903,Springs at Tecolote Tunnel,Los Angeles,Hotspring,93,34'; + put '39.728,-120.547,Mclear Warm Springs,Chico,Hotspring,86,30'; + put '38.835,-122.731,Gordon Warm Springs,Santa Rosa,Hotspring,97,36'; + put '39.166,-123.159,Vichy Springs,Ukiah,Hotspring,85,29'; + put '38.936,-122.907,Highland Springs,Santa Rosa,Hotspring,84,29'; + put '37.398,-121.794,Mineral Springs,San Jose,Hotspring,84,29'; + put '33.436,-117.324,De Luz Warm Springs,Santa Ana,Hotspring,85,29'; + put '33.512,-115.827,Dos Palmas Spring,Salton Sea,Hotspring,84,29'; + put '39.022,-122.444,Abbott Mine,Ukiah,Hotspring,86,30'; + put '34.605,-118.561,Warm Spring,Los Angeles,Hotspring,92,33'; + put '41.659,-123.319,Sulphur Springs,Weed,Hotspring,84,29'; + put '38.394,-122.552,Los Guilicos Warm Springs,Santa Rosa,Hotspring,88,31'; + put '41.492,-120.7,Essex Springs,Alturas,Hotspring,91,33'; + put '38.654,-122.484,Aetna Springs,Santa Rosa,Hotspring,91,33'; + put '35.842,-117.38,Bainter Spring,Trona,Hotspring,92,33'; + put '34.228,-117.483,Tylers Bath Spring,San Bernardino,Hotspring,92,33'; + put '33.363,-117.017,Agua Tibia Spring,Santa Ana,Hotspring,92,33'; + put '41.167,-120.032,Bare Ranch Spring,Alturas,Hotspring,90,32'; + put '35.978,-116.273,Shoshone Spring,Trona,Hotspring,90,32'; + put '33.407,-116.035,Fish Springs,Santa Ana,Hotspring,90,32'; + put '35.582,-120.666,Santa Ysabel Springs (Sulphur Spr),San Luis Obisp,Hotspring,92,33'; + put '34.537,-119.613,Little Caliente Spring,Los Angeles,Hotspring,90,32'; + put '39.006,-122.787,Big Soda Spring,Ukiah,Hotspring,90,32'; + put '35.439,-119.846,Carneros Spring,Bakersfield,Hotspring,90,32'; + put '36.441,-116.829,Travertine Springs,Death Valley,Hotspring,90,32'; + put '37.88,-122.627,Rocky Point Springs,San Francisco,Hotspring,90,32'; + put '39.227,-107.224,Penny Hot Springs,Leadville,Hotspring,133,56'; + put '38.732,-106.178,Hortense Hot Spring,Montrose,Hotspring,181,83'; + put '37.4,-107.849,Tripp Hot Springs,Durango,Hotspring,111,44'; + put '40.073,-106.113,Hot Sulphur Springs,Craig,Hotspring,111,44'; + put '39.739,-105.512,Idaho Springs,Denver,Hotspring,115,46'; + put '39.552,-107.412,South Canyon Hot Springs,Leadville,Hotspring,118,48'; + put '39.548,-107.322,Glenwood Springs,Leadville,Hotspring,124,51'; + put '38.133,-107.736,Orvis Hot Spring,Montrose,Hotspring,126,52'; + put '39.017,-105.793,Hartsel Hot Springs,Denver,Hotspring,126,52'; + put '38.733,-106.162,Mount Princeton Hot Springs,Montrose,Hotspring,133,56'; + put '37.752,-108.131,Paradise Warm Spring,Cortez,Hotspring,115,46'; + put '37.747,-106.831,Wagon Wheel Gap Hot Springs,Durango,Hotspring,135,57'; + put '37.263,-107.011,Pagosa Springs,Durango,Hotspring,136,58'; + put '38.812,-106.226,Cottonwood Hot Springs,Montrose,Hotspring,136,58'; + put '38.168,-105.924,Mineral Hot Springs,Pueblo,Hotspring,140,60'; + put '40.559,-106.849,Routt Hot Springs,Craig,Hotspring,147,64'; + put '38.021,-107.672,Ouray Hot Springs,Montrose,Hotspring,156,69'; + put '38.498,-106.076,Poncha Hot Springs,Montrose,Hotspring,160,71'; + put '38.514,-106.508,Upper Waunita Hot Springs,Montrose,Hotspring,176,80'; + put '38.272,-107.1,Cebolla Hot Springs,Montrose,Hotspring,106,41'; + put '37.313,-107.344,Piedra River Hot Springs,Durango,Hotspring,108,42'; + put '38.517,-106.515,Lower Waunita Hot Springs,Montrose,Hotspring,167,75'; + put '38.816,-106.873,Ranger Hot Spring,Montrose,Hotspring,81,27'; + put '37.294,-105.784,Dexter Spring,Trinidad,Hotspring,68,20'; + put '38.634,-106.072,Browns Grotto Warm Spring,Montrose,Hotspring,73,23'; + put '39.164,-106.062,Rhodes Warm Spring,Leadville,Hotspring,75,24'; + put '38.836,-106.825,Cement Creek Hot Spring,Montrose,Hotspring,77,25'; + put '38.653,-106.056,Browns Canyon Warm Spring,Montrose,Hotspring,77,25'; + put '37.033,-106.805,Stinking Springs,Durango,Hotspring,81,27'; + put '37.747,-108.117,Geyser Warm Spring,Cortez,Hotspring,82,28'; + put '38.479,-105.891,Swissvale Warm Springs,Pueblo,Hotspring,82,28'; + put '37.751,-106.317,Shaw Springs,Durango,Hotspring,86,30'; + put '37.728,-107.054,Birdsie Warm Spring,Durango,Hotspring,86,30'; + put '37.741,-107.034,Antelope Spring,Durango,Hotspring,90,32'; + put '39.628,-107.106,Dotsero Warm Springs,Leadville,Hotspring,90,32'; + put '38.485,-105.91,Wellsville Warm Spring,Pueblo,Hotspring,91,33'; + put '38.014,-108.054,Lemon Hot Spring,Moab,Hotspring,91,33'; + put '37.391,-107.846,"Trimble Hot Spr, Stratten Warm Spr",Durango,Hotspring,97,36'; + put '38.192,-105.816,Valley View Hot Springs,Pueblo,Hotspring,99,37'; + put '38.433,-105.261,Canon City Hot Springs,Pueblo,Hotspring,104,40'; + put '39.012,-106.891,Conundrum Hot Springs,Leadville,Hotspring,100,38'; + put '37.511,-106.945,Rainbow Hot Springs,Durango,Hotspring,104,40'; + put '40.467,-107.952,Juniper Hot Springs,Craig,Hotspring,100,38'; + put '40.483,-106.827,Steamboat Springs,Craig,Hotspring,102,39'; + put '37.771,-108.091,Dunton Hot Spring,Cortez,Hotspring,108,42'; + put '37.453,-107.803,Pinkerton Hot Springs,Durango,Hotspring,90,32'; + put '39.932,-105.277,Eldorado Springs,Denver,Hotspring,79,26'; + put '27.074,-82.233,Little Salt Spring,Tampa,Hotspring,81,27'; + put '27.06,-82.261,Warm Mineral Springs (Big Salt Spr,Tampa,Hotspring,86,30'; + put '32.92,-84.438,Barker Spring,Phenix City,Hotspring,73,23'; + put '32.964,-84.499,Thundering Spring,Phenix City,Hotspring,75,24'; + put '33.018,-84.327,Taylor Spring,Atlanta,Hotspring,75,24'; + put '32.862,-84.65,Parkman Spring,Phenix City,Hotspring,77,25'; + put '33.037,-84.374,Lifsey Spring,Atlanta,Hotspring,79,26'; + put '32.893,-84.69,Warm Springs,Phenix City,Hotspring,88,31'; + put '32.873,-84.547,Tom Brown Spring,Phenix City,Hotspring,68,20'; + put '19.407,-155.277,Steam Vents,Hawaii,Hotspring,H,H'; + put '19.46,-154.847,Isaac Hale Park Spring,Hawaii,Hotspring,97,36'; + put '19.496,-154.876,Warm Vapor,Hawaii,Hotspring,W,W'; + put '19.373,-155.188,Steam Vents,Hawaii,Hotspring,H,H'; + put '19.39,-155.311,Steam Vents,Hawaii,Hotspring,H,H'; + put '19.434,-155.272,Steam Vents,Hawaii,Hotspring,H,H'; + put '19.486,-155.598,Steam Vents,Hawaii,Hotspring,H,H'; + put '19.466,-154.943,Steam Vents,Hawaii,Hotspring,H,H'; + put '19.421,-155.62,Steam Vents,Hawaii,Hotspring,H,H'; + put '19.201,-155.384,Waiwelawela Point Spring,Hawaii,Hotspring,90,32'; + put '19.593,-154.928,Akins Spring,Hawaii,Hotspring,84,29'; + put '44.721,-115.01,Thomas Creek Ranch Hot Spring,Challis,Hotspring,138,59'; + put '45.431,-116.015,Cow Flats Hot Spring,Grangeville,Hotspring,138,59'; + put '44.062,-115.685,Pine Flat Hot Springs,Challis,Hotspring,138,59'; + put '44.382,-115.841,Dash Creek Hot Springs,Challis,Hotspring,138,59'; + put '44.077,-115.553,Haven Lodge Hot Spring,Challis,Hotspring,147,64'; + put '43.647,-114.816,Skillern Hot Springs,Hailey,Hotspring,140,60'; + put '43.789,-115.434,Dutch Frank Hot Spring,Hailey,Hotspring,149,65'; + put '43.54,-115.288,Bridge Hot Springs,Hailey,Hotspring,138,59'; + put '43.72,-115.617,Smith Cabin Hot Spring,Hailey,Hotspring,138,59'; + put '42.688,-114.826,Banbury Hot Spring,Twin Falls,Hotspring,138,59'; + put '45.035,-115.561,Sheep Creek Hot Spring,Elk City,Hotspring,136,58'; + put '44.245,-114.885,Elkhorn Hot Spring,Challis,Hotspring,136,58'; + put '44.642,-115.693,Mollys Hot Spring,Challis,Hotspring,138,59'; + put '43.811,-115.116,Atlanta Hot Springs,Hailey,Hotspring,140,60'; + put '44.679,-116.231,White Licks Hot Spring,Baker,Hotspring,140,60'; + put '45.512,-115.046,Barth Hot Springs,Elk City,Hotspring,140,60'; + put '43.696,-115.658,Sheep Creek Bridge Hot Spring,Hailey,Hotspring,142,61'; + put '44.914,-115.722,Teapot Hot Spring,Challis,Hotspring,142,61'; + put '43.788,-115.444,Straight Creek Hot Spring,Hailey,Hotspring,144,62'; + put '43.116,-115.305,Latty Hot Spring,Hailey,Hotspring,144,62'; + put '45.039,-116.291,Zims Resort Hot Springs,Grangeville,Hotspring,144,62'; + put '43.049,-114.952,White Arrow Hot Spring,Hailey,Hotspring,145,63'; + put '44.645,-114.739,Upper Loon Creek Hot Springs,Challis,Hotspring,145,63'; + put '43.383,-114.931,Wardrop Hot Spring,Hailey,Hotspring,147,64'; + put '44.531,-116.754,Fairchild Hot Spring,Baker,Hotspring,126,52'; + put '44.661,-114.652,Foster Ranch Hot Springs,Challis,Hotspring,135,57'; + put '44.051,-115.829,Dan Hodges Hot Spring,Challis,Hotspring,140,60'; + put '43.506,-114.354,Hailey Hot Springs,Hailey,Hotspring,131,55'; + put '43.982,-114.486,West Pass Hot Spring,Hailey,Hotspring,124,51'; + put '43.641,-114.487,Warfield Hot Spring,Hailey,Hotspring,124,51'; + put '44.145,-112.554,Lidy Hot Springs,Dubois,Hotspring,124,51'; + put '44.054,-115.907,Hot Spring Campground,Challis,Hotspring,124,51'; + put '42.032,-115.363,Murphy Hot Springs,Twin Falls,Hotspring,126,52'; + put '43.561,-114.415,Clarendon Hot Springs,Hailey,Hotspring,126,52'; + put '43.423,-114.627,Elk Creek Hot Spring,Hailey,Hotspring,126,52'; + put '43.553,-115.267,Paradise Hot Springs,Hailey,Hotspring,126,52'; + put '42.308,-111.707,Maple Grove Hot Springs,Preston,Hotspring,172,78'; + put '45.013,-113.605,Sharkey Hot Spring,Dillon,Hotspring,126,52'; + put '44.73,-114.993,Sunflower Hot Springs,Challis,Hotspring,149,65'; + put '43.974,-114.499,Lower Bowery Hot Spring,Hailey,Hotspring,129,54'; + put '43.724,-115.604,Loftus Hot Spring,Hailey,Hotspring,129,54'; + put '44.676,-115.943,Gold Fork Hot Spring,Challis,Hotspring,127,53'; + put '44.044,-115.851,Donlay Ranch Hot Spring,Challis,Hotspring,131,55'; + put '44.264,-114.818,Basin Creek Hot Spring,Challis,Hotspring,133,56'; + put '44.652,-114.734,Owen Cabin Hot Spring,Challis,Hotspring,133,56'; + put '43.605,-115.664,Rattlesnake Hot Spring,Hailey,Hotspring,133,56'; + put '43.605,-114.948,Lightfoot Hot Springs,Hailey,Hotspring,133,56'; + put '45.788,-115.198,Red River Hot Springs,Elk City,Hotspring,131,55'; + put '44.632,-115.697,South Fork Plunge,Challis,Hotspring,129,54'; + put '44.853,-116.442,Starkey Hot Springs,Baker,Hotspring,131,55'; + put '42.692,-114.859,Hot Sulphur (Miracle Hot) Springs,Twin Falls,Hotspring,131,55'; + put '44.045,-115.842,Corder Hot Spring,Challis,Hotspring,131,55'; + put '44.247,-114.676,Robinson Bar Hot Springs,Challis,Hotspring,131,55'; + put '44.785,-114.855,Cox Hot Springs,Challis,Hotspring,131,55'; + put '43.637,-115.13,Willow Creek Hot Spring,Hailey,Hotspring,131,55'; + put '43.803,-115.401,Granite Creek Hot Spring,Hailey,Hotspring,131,55'; + put '43.129,-115.34,Coyote Hot Spring,Hailey,Hotspring,135,57'; + put '44.211,-116.71,Cove Creek Hot Spring,Baker,Hotspring,131,55'; + put '44.16,-115.167,Grandjean Hot Spring,Challis,Hotspring,H,H'; + put '43.755,-115.571,Ninemeyer Hot Springs,Hailey,Hotspring,169,76'; + put '43.701,-114.738,Big Smokey Hot Spring,Hailey,Hotspring,H,H'; + put '43.831,-115.192,Queens River Hot Spring,Hailey,Hotspring,H,H'; + put '43.817,-115.046,Leggit Creek Hot Spring,Hailey,Hotspring,H,H'; + put '43.718,-115.563,Basset Hot Spring,Hailey,Hotspring,H,H'; + put '43.588,-115.988,Mores Creek Hot Spring,Hailey,Hotspring,H,H'; + put '44.951,-114.704,Mormon Ranch Warm Spring,Challis,Hotspring,H,H'; + put '44.896,-114.563,Forge Creek Hot Springs,Challis,Hotspring,H,H'; + put '44.77,-115.663,Billy Hot Spring,Challis,Hotspring,H,H'; + put '44.628,-115.197,Sheepeater Hot Springs,Challis,Hotspring,H,H'; + put '44.585,-115.072,Sulphur Creek Hot Spring,Challis,Hotspring,H,H'; + put '44.554,-115.301,Sulphur Creek Hot Spring,Challis,Hotspring,H,H'; + put '42.107,-113.39,Blm Well (Frazier Hot Spring),Pocatello,Hotspring,203,95'; + put '44.4,-115.82,Goat Hot Springs,Challis,Hotspring,H,H'; + put '45.307,-114.338,Big Creek Hot Springs,Elk City,Hotspring,199,93'; + put '44.583,-116.112,Cascade Reservoir Hot Spring,Baker,Hotspring,H,H'; + put '45.17,-115.807,Secesh Hot Spring,Elk City,Hotspring,H,H'; + put '46.235,-114.707,Prospector Hot Springs,Hamilton,Hotspring,H,H'; + put '46.138,-115.09,Stuart Hot Springs,Hamilton,Hotspring,H,H'; + put '46.006,-115.021,Marten Hot Springs,Hamilton,Hotspring,H,H'; + put '42.374,-111.726,Mound Valley Warm Spring,Preston,Hotspring,W,W'; + put '43.255,-114.829,Mormon Reservoir Warm Spring,Hailey,Hotspring,W,W'; + put '44.639,-115.671,Warm Lake Springs,Challis,Hotspring,W,W'; + put '44.445,-115.239,Bear Valley Hot Spring,Challis,Hotspring,W,W'; + put '44.354,-117.071,Old Homestead Warm Spring,Baker,Hotspring,W,W'; + put '43.327,-113.918,Condie Hot Springs,Idaho Falls,Hotspring,124,51'; + put '43.038,-112.004,Alkali Flats Warm Spring,Idaho Falls,Hotspring,93,34'; + put '44.43,-115.762,Bull Creek Hot Springs,Challis,Hotspring,H,H'; + put '42.119,-111.928,Squaw Hot Springs,Preston,Hotspring,163,73'; + put '42.333,-111.716,Cleveland Hot Springs,Preston,Hotspring,151,66'; + put '43.671,-115.696,Twin Springs,Hailey,Hotspring,151,66'; + put '43.951,-116.353,Roystone Hot Springs,Boise,Hotspring,151,66'; + put '42.704,-114.856,Salmon Falls Hot Spring,Twin Falls,Hotspring,153,67'; + put '44.16,-115.177,Sacajawea Hot Springs,Challis,Hotspring,153,67'; + put '43.738,-115.583,Vaughn Hot Spring,Hailey,Hotspring,154,68'; + put '44.669,-116.305,Council Mtn Hot Springs,Baker,Hotspring,154,68'; + put '44.831,-115.215,Kwiskwis Hot Spring,Challis,Hotspring,156,69'; + put '43.684,-114.41,Guyer Hot Springs,Hailey,Hotspring,158,70'; + put '43.155,-115.518,Hot Springs,Hailey,Hotspring,158,70'; + put '44.586,-116.63,Lakey Hot Spring,Baker,Hotspring,158,70'; + put '42.333,-115.65,Indian Hot Springs,Twin Falls,Hotspring,160,71'; + put '42.637,-114.892,Poison Springs,Twin Falls,Hotspring,H,H'; + put '44.813,-115.123,Middle Fork Indian Creek Hot Sprin,Challis,Hotspring,162,72'; + put '44.072,-115.543,Kirkham Hot Springs,Challis,Hotspring,149,65'; + put '43.328,-114.399,Magic Hot Springs,Hailey,Hotspring,163,73'; + put '43.293,-114.908,Barrons Hot Spring,Hailey,Hotspring,167,75'; + put '44.154,-115.993,Warm Springs Creek Hot Springs,Challis,Hotspring,167,75'; + put '44.268,-114.748,Sunbeam Hot Springs,Challis,Hotspring,169,76'; + put '44.092,-116.052,Deer Hot Springs,Baker,Hotspring,176,80'; + put '43.563,-114.798,Worswick Hot Springs,Hailey,Hotspring,180,82'; + put '42.133,-111.928,Battle Creek Hot Springs,Preston,Hotspring,183,84'; + put '44.364,-115.856,Boiling Springs,Challis,Hotspring,185,85'; + put '44.157,-115.314,Bonneville Hot Springs,Challis,Hotspring,185,85'; + put '44.799,-115.129,Indian Creek Hot Spring,Challis,Hotspring,190,88'; + put '44.568,-115.695,Vulcan Hot Springs,Challis,Hotspring,190,88'; + put '44.306,-116.745,Crane Creek Hot Springs,Baker,Hotspring,198,92'; + put '44.416,-116.031,Cabarton Hot Spring,Baker,Hotspring,160,71'; + put '42.781,-111.983,Portneuf River Warm Spring,Preston,Hotspring,93,34'; + put '44.621,-115.985,Badley Warm Spring,Challis,Hotspring,100,38'; + put '45.201,-116.312,Boulder Creek Spring,Grangeville,Hotspring,82,28'; + put '42.24,-113.588,Sears Spring,Pocatello,Hotspring,84,29'; + put '44.257,-112.639,Warm Springs,Dubois,Hotspring,84,29'; + put '42.911,-111.556,Henry Warm Spring,Preston,Hotspring,86,30'; + put '43.021,-111.695,Wilson Lake Warm Spring,Driggs,Hotspring,86,30'; + put '44.495,-116.732,Keithly Warm Spring,Baker,Hotspring,86,30'; + put '42.655,-111.643,Steamboat Hot Spring,Preston,Hotspring,88,31'; + put '45.152,-116.296,Stinky Warm Spring,Grangeville,Hotspring,88,31'; + put '42.725,-112.872,Indian Springs,Pocatello,Hotspring,90,32'; + put '43.114,-112.167,Yandell Springs,Idaho Falls,Hotspring,90,32'; + put '44.64,-116.045,Arling Hot Spring,Baker,Hotspring,90,32'; + put '42.657,-111.604,Soda Springs,Preston,Hotspring,82,28'; + put '45.07,-115.826,Lick Creek Warm Spring,Elk City,Hotspring,91,33'; + put '42.337,-111.726,Treasureton Hot Springs,Preston,Hotspring,95,35'; + put '44.382,-114.088,Little Antelope Flat Warm Spring,Challis,Hotspring,93,34'; + put '43.21,-111.495,Brockman Creek Hot Spring,Driggs,Hotspring,95,35'; + put '44.398,-115.149,Cape Horn Warm Springs,Challis,Hotspring,95,35'; + put '42.337,-114.509,Nat-Soo-Pah Warm Spring,Twin Falls,Hotspring,97,36'; + put '44.9,-115.505,Hot Creek Warm Spring,Challis,Hotspring,97,36'; + put '42.405,-114.142,Artesian City Hot Springs,Twin Falls,Hotspring,99,37'; + put '42.762,-115.739,Indian Bathtub Hot Springs,Twin Falls,Hotspring,99,37'; + put '43.227,-111.109,Alpine Warm Spring,Driggs,Hotspring,99,37'; + put '42.545,-112.906,Rockland Warm Springs,Pocatello,Hotspring,100,38'; + put '43.805,-114.585,Russian John Hot Spring,Hailey,Hotspring,100,38'; + put '43.779,-114.539,Easley Hot Springs,Hailey,Hotspring,100,38'; + put '44.26,-114.838,Mormon Bend Hot Spring,Challis,Hotspring,100,38'; + put '44.64,-113.504,Big Eightmile Creek Warm Spring,Dubois,Hotspring,91,33'; + put '42.339,-112.436,Kent Warm Spring,Pocatello,Hotspring,75,24'; + put '42.957,-112.458,Tadpole Warm Spring,Pocatello,Hotspring,68,20'; + put '43.607,-111.189,Taylor Springs,Driggs,Hotspring,68,20'; + put '43.972,-116.325,Sweet Warm Spring,Boise,Hotspring,68,20'; + put '44.717,-115.703,Dollar Creek Warm Spring,Challis,Hotspring,68,20'; + put '42.625,-113.107,Lake Walcott Hot Spring,Pocatello,Hotspring,70,21'; + put '42.015,-114.237,Thoroughbred Warm Springs,Twin Falls,Hotspring,69,21'; + put '42.928,-111.592,Blackfoot Reservoir Warm Spring,Preston,Hotspring,72,22'; + put '42.286,-113.446,"Rice Spring, Ward Spring",Pocatello,Hotspring,72,22'; + put '42.085,-113.564,Grape Creek Warm Spring,Pocatello,Hotspring,72,22'; + put '43.66,-111.715,Elkhorn Warm Spring,Driggs,Hotspring,72,22'; + put '43.367,-113.884,Rush Warm Spring,Idaho Falls,Hotspring,72,22'; + put '44.306,-117.042,Weiser Warm Springs,Baker,Hotspring,72,22'; + put '45.344,-114.463,Owl Creek Hot Springs,Elk City,Hotspring,122,50'; + put '44.454,-112.696,Big Spring,Dubois,Hotspring,73,23'; + put '44.269,-113.449,Barney Hot Springs,Dubois,Hotspring,82,28'; + put '43.5,-115.308,Towne Creek Warm Spring,Hailey,Hotspring,75,24'; + put '43.161,-116.332,Thomas Flats Warm Spring,Boise,Hotspring,75,24'; + put '44.612,-113.363,Whittaker Warm Springs,Dubois,Hotspring,75,24'; + put '42.173,-112.239,Malad Warm Spring,Pocatello,Hotspring,77,25'; + put '42.156,-112.348,Pleasantview Warm Springs,Pocatello,Hotspring,77,25'; + put '42.025,-112.226,Prices Warm Spring,Pocatello,Hotspring,77,25'; + put '42.865,-116.368,Lower Birch Spring,Jordan Valley,Hotspring,77,25'; + put '43.423,-111.414,Fall Creek Mineral Springs,Driggs,Hotspring,77,25'; + put '42.986,-111.743,Blackfoot River Warm Spring,Preston,Hotspring,79,26'; + put '42.426,-111.378,Pescadero Warm Spring,Preston,Hotspring,79,26'; + put '44.091,-111.458,Ashton Warm Spring,Ashton,Hotspring,79,26'; + put '42.056,-112.246,Woodruff Hot Spring,Pocatello,Hotspring,81,27'; + put '43.831,-116.396,Highland Land Co Warm Spring,Boise,Hotspring,73,23'; + put '44.847,-115.696,Holdover Hot Spring,Challis,Hotspring,117,47'; + put '43.047,-114.929,Hot Sulphur Lake,Hailey,Hotspring,81,27'; + put '43.603,-115.07,Baumgartner Hot Spring,Hailey,Hotspring,111,44'; + put '44.465,-116.037,Belvidere Hot Spring,Baker,Hotspring,111,44'; + put '42.621,-112.008,Lava Hot Springs,Pocatello,Hotspring,113,45'; + put '43.823,-115.327,Weatherby Hot Spring,Hailey,Hotspring,113,45'; + put '43.335,-115.044,Wolf Hot Spring,Hailey,Hotspring,113,45'; + put '44.905,-113.929,Goldbug Hot Spring,Dubois,Hotspring,113,45'; + put '45.095,-113.836,Salmon Hot Spring,Dillon,Hotspring,113,45'; + put '45.277,-115.912,Burgdorf Hot Springs,Elk City,Hotspring,113,45'; + put '44.836,-114.79,Hospital Hot Spring,Challis,Hotspring,115,46'; + put '44.72,-114.016,Cronks Canyon Hot Spring,Challis,Hotspring,115,46'; + put '44.721,-115.207,Pistol Creek Hot Springs,Challis,Hotspring,115,46'; + put '43.791,-111.435,Pincock (Green Canyon) Hot Springs,Driggs,Hotspring,111,44'; + put '43.414,-116.707,Givens Hot Springs,Boise,Hotspring,117,47'; + put '45.503,-114.463,Horse Creek Hot Springs,Elk City,Hotspring,109,43'; + put '46.464,-115.035,Weir Creek Hot Springs,Hamilton,Hotspring,117,47'; + put '42.115,-111.264,Bear Lake Hot Springs,Preston,Hotspring,118,48'; + put '42.173,-113.861,Oakley Hot Spring,Pocatello,Hotspring,118,48'; + put '46.463,-114.872,Jerry Johnson Hot Springs,Hamilton,Hotspring,118,48'; + put '43.644,-111.687,Heise Hot Springs,Driggs,Hotspring,120,49'; + put '44.799,-114.806,Lower Loon Creek Hot Spring,Challis,Hotspring,120,49'; + put '44.253,-115.891,Rocky Canyon Hot Springs,Challis,Hotspring,120,49'; + put '46.316,-115.258,Stanley Hot Springs,Hamilton,Hotspring,120,49'; + put '43.779,-115.486,Brown Creek Hot Spring,Hailey,Hotspring,122,50'; + put '44.628,-114.601,Shower Bath Springs,Challis,Hotspring,122,50'; + put '44.171,-114.624,Slate Creek Hot Spring,Challis,Hotspring,122,50'; + put '44.392,-115.834,Ground Hog Hot Springs,Challis,Hotspring,100,38'; + put '42.797,-115.723,"Bat Hot Spring, Pence Hot Spring",Twin Falls,Hotspring,117,47'; + put '42.767,-115.725,Lower Indian Bathtub Hot Springs,Twin Falls,Hotspring,108,42'; + put '42.102,-113.632,Durfee Spring,Pocatello,Hotspring,102,39'; + put '44.33,-115.802,Silver Creek Hot Spring,Challis,Hotspring,102,39'; + put '42.447,-113.523,Marsh Creek Hot Spring,Pocatello,Hotspring,104,40'; + put '42.449,-113.511,Marsh Gully Hot Springs,Pocatello,Hotspring,106,41'; + put '42.798,-115.742,Bruneau Hot Spring,Twin Falls,Hotspring,106,41'; + put '43.576,-114.83,Preis Hot Spring,Hailey,Hotspring,106,41'; + put '43.677,-116.208,Terteling Hot Springs,Boise,Hotspring,106,41'; + put '44.254,-114.443,Sullivan Hot Springs,Challis,Hotspring,106,41'; + put '44.224,-114.929,Stanley Hot Spring,Challis,Hotspring,106,41'; + put '44.101,-114.865,Rosalys Warm Spring,Challis,Hotspring,106,41'; + put '44.06,-115.819,Danskin Creek Hot Spring,Challis,Hotspring,106,41'; + put '45.852,-114.937,Running Warm Springs,Elk City,Hotspring,106,41'; + put '43.363,-113.779,Milford Sweat Hot Spring,Idaho Falls,Hotspring,111,44'; + put '46.466,-114.939,Colgate Warm Springs,Hamilton,Hotspring,106,41'; + put '44.626,-115.749,Trail Creek Hot Spring,Challis,Hotspring,122,50'; + put '43.816,-115.863,Warm Springs,Hailey,Hotspring,108,42'; + put '43.76,-115.56,Pool Creek Hot Spring,Hailey,Hotspring,108,42'; + put '45.042,-114.616,Snowshoe Johnsons Hot Spring,Elk City,Hotspring,108,42'; + put '42.388,-112.085,Downata Hot Springs,Pocatello,Hotspring,109,43'; + put '42.013,-114.504,Magic Hot Springs,Twin Falls,Hotspring,109,43'; + put '42.779,-115.715,Buckaroo Hot Spring,Twin Falls,Hotspring,109,43'; + put '43.99,-114.8,Pierson Hot Springs,Hailey,Hotspring,109,43'; + put '43.038,-114.988,Tschanne Hot Spring,Hailey,Hotspring,109,43'; + put '44.523,-114.173,Beardsley Hot Springs,Challis,Hotspring,109,43'; + put '44.733,-115.018,Sunflower Flat Hot Spring,Challis,Hotspring,109,43'; + put '44.516,-115.295,Dagger Creek Hot Spring,Challis,Hotspring,110,43'; + put '44.971,-116.203,Krigbaum Hot Springs,Baker,Hotspring,109,43'; + put '45.416,-116.172,Riggins Hot Springs,Grangeville,Hotspring,106,41'; + put '42.735,-73.2,Sand Spring,Albany,Hotspring,75,24'; + put '46.106,-114.004,Sleeping Child Hot Springs,Hamilton,Hotspring,122,50'; + put '45.697,-114.365,Blue Joint Hot Springs 2,Elk City,Hotspring,84,29'; + put '44.769,-111.649,Sloan Cow Camp Spring,Ashton,Hotspring,86,30'; + put '47.632,-112.855,Medicine (Sun River) Springs,Choteau,Hotspring,86,30'; + put '45.75,-113.938,Gallogly Spring,Dillon,Hotspring,100,38'; + put '47.33,-114.789,Quinns Hot Springs,Wallace,Hotspring,109,43'; + put '45.171,-112.153,Puller Hot Springs,Dillon,Hotspring,111,44'; + put '46.728,-114.533,"Lolo Hot Springs, Granite Springs",Hamilton,Hotspring,111,44'; + put '45.337,-110.691,Chico Hot Springs,Bozeman,Hotspring,113,45'; + put '47.607,-114.663,Camas Hot Springs,Wallace,Hotspring,113,45'; + put '45.841,-114.038,Medicine Hot Springs,Elk City,Hotspring,117,47'; + put '45.458,-113.109,Elkhorn Hot Springs,Dillon,Hotspring,118,48'; + put '45.027,-112.844,Mcmenomey Ranch Spring,Dillon,Hotspring,68,20'; + put '45.792,-112.126,Renova Hot Springs,Dillon,Hotspring,122,50'; + put '44.701,-111.878,Staudenmeyer Springs,Ashton,Hotspring,82,28'; + put '45.602,-111.9,Potosi Warm Springs,Bozeman,Hotspring,124,51'; + put '45.575,-111.683,Norris Hot Springs,Bozeman,Hotspring,127,53'; + put '45.462,-112.475,New Biltmore Hot Springs,Dillon,Hotspring,127,53'; + put '45.66,-111.186,Bozeman Hot Springs,Bozeman,Hotspring,131,55'; + put '45.896,-112.233,Pipestone Hot Springs,Dillon,Hotspring,135,57'; + put '46.547,-110.903,White Sulphur Springs,White Sulphur,Hotspring,136,58'; + put '46.448,-111.982,Alhambra Hot Springs,White Sulphur,Hotspring,138,59'; + put '45.757,-110.256,Hunters Hot Springs,Bozeman,Hotspring,140,60'; + put '45.368,-113.403,Jardine Hot Spring,Dillon,Hotspring,140,60'; + put '46.596,-112.108,Broadwater (Helena) Hot Springs,Butte,Hotspring,151,66'; + put '44.984,-111.613,Wolf Creek Hot Springs,Ashton,Hotspring,154,68'; + put '45.685,-112.295,Silver Star Hot Springs,Dillon,Hotspring,163,73'; + put '45.59,-111.899,Potosi Hot Springs,Bozeman,Hotspring,122,50'; + put '45.105,-112.751,Browns Springs,Dillon,Hotspring,75,24'; + put '46.718,-113.306,Bearmouth Warm Spring 2,Butte,Hotspring,68,20'; + put '46.717,-113.32,Bearmouth Warm Spring 1,Butte,Hotspring,68,20'; + put '47.217,-109.471,Brooks Warm Spring,Lewistown,Hotspring,68,20'; + put '45.708,-110.976,Bridger Canyon Warm Spring,Bozeman,Hotspring,70,21'; + put '46.795,-108.883,Durfee Creek Springs,Roundup,Hotspring,70,21'; + put '46.704,-113.452,Nimrod Springs,Butte,Hotspring,70,21'; + put '47.876,-108.656,Landusky Springs,Lewistown,Hotspring,70,21'; + put '45.032,-110.667,Bear Creek Springs,Bozeman,Hotspring,72,22'; + put '45.111,-112.714,Lovells Hot Spring,Dillon,Hotspring,72,22'; + put '46.106,-112.903,Anaconda Hot Springs,Butte,Hotspring,72,22'; + put '45.235,-112.135,Trudau Warm Springs,Dillon,Hotspring,73,23'; + put '45.698,-114.382,Blue Joint Hot Spring 1,Elk City,Hotspring,84,29'; + put '45.037,-111.953,Vigilante Spring,Bozeman,Hotspring,75,24'; + put '45.608,-110.571,Carter Bridge Warm Springs,Bozeman,Hotspring,82,28'; + put '46.355,-111.565,Bedford Hot Springs,White Sulphur,Hotspring,74,24'; + put '45.553,-110.142,Anderson Springs,Bozeman,Hotspring,77,25'; + put '45.42,-112.692,Apex Warm Spring,Dillon,Hotspring,77,25'; + put '46.607,-112.776,Garrison Warm Springs,Butte,Hotspring,77,25'; + put '47.843,-108.598,The (Landusky) Plunge,Lewistown,Hotspring,77,25'; + put '44.785,-111.649,West Fork Swimming Hole,Ashton,Hotspring,79,26'; + put '46.61,-112.555,Avon Warm Spring,Butte,Hotspring,79,26'; + put '46.334,-112.886,Deerlodge Prison Ranch Springs,Butte,Hotspring,79,26'; + put '47.994,-108.445,Lodgepole (Big Warm) Springs,Lewistown,Hotspring,79,26'; + put '47.451,-114.648,Green Springs,Wallace,Hotspring,79,26'; + put '45.392,-112.452,Beaverhead Rock Spring,Dillon,Hotspring,81,27'; + put '44.704,-111.892,Andersons Pasture Springs,Ashton,Hotspring,82,28'; + put '47.971,-108.395,Little Warm Springs,Lewistown,Hotspring,73,23'; + put '46.198,-112.094,Boulder Hot Springs,Butte,Hotspring,169,76'; + put '46.178,-112.794,Warm Springs (State Hospital),Butte,Hotspring,172,78'; + put '45.367,-111.726,Ennis Hot Springs,Bozeman,Hotspring,181,83'; + put '46.044,-112.811,Gregson Hot Springs,Butte,Hotspring,158,70'; + put '45.09,-110.774,Laduke (Corwin) Hot Spring,Bozeman,Hotspring,154,68'; + put '35.897,-82.826,Hot Springs,Knoxville,Hotspring,108,42'; + put '32.644,-108.128,Apache Tejo Warm Spring,Silver City,Hotspring,97,36'; + put '33.135,-107.254,Truth Or Consequences,Tularosa,Hotspring,113,45'; + put '36.305,-106.053,Ojo Caliente (Arsenic Spring),Aztec,Hotspring,111,44'; + put '33.162,-108.209,Spring (Hot),Clifton,Hotspring,111,44'; + put '36.508,-105.722,Manby Hot Springs,Raton,Hotspring,100,38'; + put '35.849,-106.629,Spence Hot Springs,Albuquerque,Hotspring,100,38'; + put '35.972,-106.56,San Antonio Warm Spring,Albuquerque,Hotspring,101,38'; + put '35.82,-106.627,Mccauley Hot Springs,Albuquerque,Hotspring,99,37'; + put '35.793,-106.685,Soda Dam Hot Springs,Albuquerque,Hotspring,117,47'; + put '33.831,-108.8,(Upper) Frisco Hot Spring,Clifton,Hotspring,98,37'; + put '35.646,-106.888,Warm Springs,Albuquerque,Hotspring,129,54'; + put '36.324,-105.606,Ponce De Leon Springs,Raton,Hotspring,93,34'; + put '34.038,-106.94,"Socorro Spring, Sedillo Spring",Socorro,Hotspring,93,34'; + put '33.293,-108.282,"Spring Mfg Two, Spring Mfg Three",Clifton,Hotspring,99,37'; + put '35.592,-106.753,Indian Springs,Albuquerque,Hotspring,123,51'; + put '32.501,-106.926,Radium Springs,Las Cruces,Hotspring,127,53'; + put '33.274,-108.25,Spring Mfg Four,Clifton,Hotspring,93,34'; + put '35.938,-106.646,San Antonio Hot Spring,Albuquerque,Hotspring,129,54'; + put '33.244,-108.88,San Francisco Hot Springs,Clifton,Hotspring,120,49'; + put '32.748,-107.836,Mimbres Hot Springs,Las Cruces,Hotspring,136,58'; + put '35.653,-105.29,Montezuma Hot Springs,Santa Fe,Hotspring,138,59'; + put '33.233,-108.235,Spring (Hot),Clifton,Hotspring,149,65'; + put '33.199,-108.209,Gila Hot Springs,Clifton,Hotspring,151,66'; + put '33.108,-108.483,Turkey Creek Hot Spring,Clifton,Hotspring,165,74'; + put '35.772,-106.69,Jemez Springs,Albuquerque,Hotspring,169,76'; + put '35.908,-106.615,Sulphur Springs,Albuquerque,Hotspring,189,87'; + put '33.237,-108.88,Hot Springs,Clifton,Hotspring,H,H'; + put '32.562,-108.027,Kennecott Warm Springs,Silver City,Hotspring,W,W'; + put '32.554,-107.994,Faywood Hot Springs,Las Cruces,Hotspring,129,54'; + put '33.898,-108.501,Aragon Springs,Clifton,Hotspring,70,21'; + put '34.847,-107.091,Spring (Salt),Socorro,Hotspring,76,24'; + put '34.903,-107.085,El Ojo Escondido,Socorro,Hotspring,73,23'; + put '35.06,-107.133,Alamos Spring,Albuquerque,Hotspring,72,22'; + put '34.912,-108.951,Rainbow Spring,Saint Johns,Hotspring,71,22'; + put '34.698,-107.129,Spring,Socorro,Hotspring,71,22'; + put '32.455,-104.489,Indian Big Spring,Carlsbad,Hotspring,79,26'; + put '34.995,-106.454,Clear Water Spring,Socorro,Hotspring,69,21'; + put '32.821,-108.408,Ash Spring,Silver City,Hotspring,72,22'; + put '32.83,-109.047,Goat Camp Spring,Silver City,Hotspring,69,21'; + put '35.548,-106.827,San Ysidro Warm Springs,Albuquerque,Hotspring,68,20'; + put '34.116,-106.98,Ojitos Springs,Socorro,Hotspring,68,20'; + put '32.248,-104.411,Mosley Spring,Carlsbad,Hotspring,68,20'; + put '33.708,-109.025,Frieborn Canyon Spring,Clifton,Hotspring,92,33'; + put '33.192,-108.18,Lyons Hunting Lodge Hot Springs,Clifton,Hotspring,126,52'; + put '35.601,-106.86,Phillips Springs,Albuquerque,Hotspring,70,21'; + put '33.285,-108.262,Spring Mfg One,Clifton,Hotspring,88,31'; + put '33.306,-108.324,The Meadows Warm Spring,Clifton,Hotspring,91,33'; + put '34.049,-106.939,Cook Spring,Socorro,Hotspring,70,21'; + put '32.795,-107.276,Derry Warm Springs,Las Cruces,Hotspring,92,33'; + put '32.884,-108.358,Allen Springs,Silver City,Hotspring,78,26'; + put '33.279,-107.563,Warm Springs,Tularosa,Hotspring,87,31'; + put '32.606,-107.19,Souse Springs,Las Cruces,Hotspring,88,31'; + put '34.808,-107.091,Spring (Salt),Socorro,Hotspring,86,30'; + put '35.54,-106.854,San Ysidro Hot Springs,Albuquerque,Hotspring,85,29'; + put '36.368,-106.059,Statue Spring,Aztec,Hotspring,83,28'; + put '34.833,-107.091,Laguna Pueblo Seeps,Socorro,Hotspring,82,28'; + put '33.572,-107.593,Ojo Caliente,Tularosa,Hotspring,83,28'; + put '34.854,-107.088,Laguna Pueblo Springs,Socorro,Hotspring,80,27'; + put '32.843,-108.512,Mangas Springs,Silver City,Hotspring,81,27'; + put '34.769,-107.085,Spring (Salt),Socorro,Hotspring,78,26'; + put '34.032,-106.777,Ojo De Las Canas,Socorro,Hotspring,79,26'; + put '40.972,-119.007,Black Rock Hot Spring,Lovelock,Hotspring,136,58'; + put '38.899,-119.41,Nevada (Hinds) Hot Springs,Walker Lake,Hotspring,144,62'; + put '38.922,-118.198,Wedell Hot Springs,Walker Lake,Hotspring,144,62'; + put '41.183,-114.991,Hot Springs,Wells,Hotspring,142,61'; + put '38.437,-116.277,Hot Creek Valley Spring,Tonopah,Hotspring,142,61'; + put '41.788,-114.735,Mineral Hot Spring,Wells,Hotspring,140,60'; + put '37.825,-117.337,Alkali Hot Spring,Goldfield,Hotspring,140,60'; + put '41.412,-114.675,Wine Cup Ranch Springs,Wells,Hotspring,138,59'; + put '40.404,-116.517,Crescent Valley Hot Springs,Winnemucca,Hotspring,138,59'; + put '40.417,-116.507,Crescent Valley Hot Springs,Winnemucca,Hotspring,138,59'; + put '40.603,-116.463,Horseshoe Ranch Springs,Winnemucca,Hotspring,136,58'; + put '41.378,-119.182,Springs (Hot),Vya,Hotspring,136,58'; + put '39.883,-114.893,Cherry Creek Hot Springs,Ely,Hotspring,144,62'; + put '40.922,-117.108,Hot Pot (Blossom Hot Springs),Winnemucca,Hotspring,136,58'; + put '41.721,-118.505,Howard Hot Spring,Vya,Hotspring,135,57'; + put '41.421,-117.388,The Hot Springs,Mcdermitt,Hotspring,135,57'; + put '40.418,-117.415,Buffalo Springs,Winnemucca,Hotspring,162,72'; + put '39.031,-116.666,Dianas Punch Bowl,Millett,Hotspring,138,59'; + put '39.404,-116.347,Klobe (Bartholomae) Hot Spring,Millett,Hotspring,156,69'; + put '36.975,-116.721,Hicks Hot Springs,Death Valley,Hotspring,109,43'; + put '40.178,-117.496,Home Station Ranch Hot Spring,Winnemucca,Hotspring,135,57'; + put '39.797,-118.067,Dixie Hot Springs,Reno,Hotspring,162,72'; + put '39.904,-116.588,Walti Hot Springs,Millett,Hotspring,162,72'; + put '38.981,-119.833,Walleys Hot Springs,Walker Lake,Hotspring,160,71'; + put '38.464,-115.792,Chimney Warm Spring,Lund,Hotspring,160,71'; + put '39.328,-116.858,Spencer Hot Springs,Millett,Hotspring,162,72'; + put '41.108,-117.578,Hot Springs,Mcdermitt,Hotspring,158,70'; + put '36.002,-114.742,Spring,Las Vegas,Hotspring,145,63'; + put '41.576,-115.181,Hot Creek Springs,Wells,Hotspring,151,66'; + put '40.954,-117.488,Golconda Hot Spring (South),Winnemucca,Hotspring,151,66'; + put '40.22,-116.068,Bruffeys Hot Springs,Winnemucca,Hotspring,149,65'; + put '40.249,-115.409,Smith Ranch Springs,Elko,Hotspring,149,65'; + put '41.867,-114.692,San Jacinto Ranch Spring,Wells,Hotspring,148,64'; + put '40.765,-116.04,Hot Sulphur Springs,Winnemucca,Hotspring,147,64'; + put '38.188,-116.373,Warm Springs,Tonopah,Hotspring,145,63'; + put '41.567,-118.564,Dyke Hot Springs,Vya,Hotspring,158,70'; + put '38.365,-115.867,Abel Spring,Lund,Hotspring,115,46'; + put '41.929,-114.071,Nile Spring,Wells,Hotspring,109,43'; + put '39.193,-119.752,Carson Hot Springs,Reno,Hotspring,120,49'; + put '39.512,-119.907,Lawton Hot Springs,Reno,Hotspring,120,49'; + put '39.944,-119.509,Anaho Island Spring,Reno,Hotspring,120,49'; + put '37.761,-117.632,Silverpeak Hot Spring,Goldfield,Hotspring,118,48'; + put '37.621,-114.51,Caliente Hot Springs,Caliente,Hotspring,118,48'; + put '39.058,-119.742,Saratoga Hot Spring,Reno,Hotspring,122,50'; + put '39.308,-117.552,Hot Springs,Millett,Hotspring,115,46'; + put '40.673,-116.838,Hot Springs,Winnemucca,Hotspring,122,50'; + put '39.08,-116.639,Potts Ranch Hot Springs,Millett,Hotspring,113,45'; + put '38.388,-115.866,Coyote Hole Spring,Lund,Hotspring,113,45'; + put '41.753,-118.841,Warm Springs,Vya,Hotspring,112,44'; + put '41.386,-114.165,Spring (Hot),Wells,Hotspring,111,44'; + put '40.961,-117.494,Golconda Hot Spring (North),Winnemucca,Hotspring,165,74'; + put '40.313,-117.07,Mound Springs,Winnemucca,Hotspring,109,43'; + put '40.585,-115.285,Sulphur Hot Springs,Elko,Hotspring,205,96'; + put '39.059,-119.815,Hobo Hot Springs,Reno,Hotspring,114,46'; + put '40.191,-117.107,Hot Springs,Winnemucca,Hotspring,127,53'; + put '40.819,-115.777,Hot Hole,Elko,Hotspring,133,56'; + put '39.286,-119.84,Bowers Mansion Hot Spring,Reno,Hotspring,133,56'; + put '41.809,-118.861,Painted Hills Mine,Vya,Hotspring,131,55'; + put '41.925,-118.805,Bog Hot Springs,Vya,Hotspring,131,55'; + put '41.647,-115.775,Wild Horse Hot Springs,Wells,Hotspring,129,54'; + put '40.183,-117.102,Hot Springs Ranch,Winnemucca,Hotspring,129,54'; + put '40.08,-117.604,Mccoy Springs,Winnemucca,Hotspring,120,49'; + put '41.353,-119.216,Spring (Hot),Vya,Hotspring,127,53'; + put '41.357,-119.188,Springs (Hot),Vya,Hotspring,133,56'; + put '40.198,-117.103,Hot Springs,Winnemucca,Hotspring,127,53'; + put '39.42,-119.738,Dimonte Spring,Reno,Hotspring,127,53'; + put '38.952,-115.23,Williams Hot Spring,Lund,Hotspring,127,53'; + put '41.261,-115.305,Hot Springs,Wells,Hotspring,126,52'; + put '39.041,-116.663,Hot Spring,Millett,Hotspring,124,51'; + put '41.365,-119.221,Spring (Hot),Vya,Hotspring,122,50'; + put '41.159,-114.986,"Threemile Spring, Sulphur Hot Spr",Wells,Hotspring,122,50'; + put '41.339,-119.192,Springs (Hot),Vya,Hotspring,127,53'; + put '39.893,-116.649,Little Hot Springs,Millett,Hotspring,H,H'; + put '39.787,-119.011,Bradys Hot Springs,Reno,Hotspring,209,98'; + put '41.175,-115.278,Hot Spring,Wells,Hotspring,H,H'; + put '41.145,-114.994,Hot Spring,Wells,Hotspring,H,H'; + put '40.864,-117.349,Sulphur Spring,Winnemucca,Hotspring,H,H'; + put '39.733,-119.039,Eagle Salt Works Spring,Reno,Hotspring,H,H'; + put '39.281,-118.42,Sand Springs,Reno,Hotspring,H,H'; + put '38.81,-116.397,Fish Springs,Tonopah,Hotspring,W,W'; + put '39.559,-117.427,Petersons Mill Hot Spring,Millett,Hotspring,H,H'; + put '38.339,-116.662,Warm Spring,Tonopah,Hotspring,W,W'; + put '38.859,-119.175,Hot Spring,Walker Lake,Hotspring,H,H'; + put '39.995,-117.854,Senator Fumaroles,Millett,Hotspring,B,B'; + put '39.565,-118.856,(Soda Lake Area),Reno,Hotspring,210,99'; + put '40.141,-119.687,The Needle Rocks Hot Springs,Lovelock,Hotspring,208,98'; + put '40.146,-119.673,The Needle Rocks Hot Spring,Lovelock,Hotspring,208,98'; + put '40.662,-119.365,Great Boiling Spring (Gerlach),Lovelock,Hotspring,208,98'; + put '39.388,-119.743,Steamboat Springs,Reno,Hotspring,205,96'; + put '39.866,-118.017,Dixie Comstock Mine,Reno,Hotspring,H,H'; + put '40.746,-116.689,White House Spring,Winnemucca,Hotspring,W,W'; + put '39.98,-119.502,Pyramid Island Hot Spring,Reno,Hotspring,.,.'; + put '41.934,-118.808,Warm Springs,Vya,Hotspring,W,W'; + put '41.385,-116.058,Petaini Springs,Mcdermitt,Hotspring,W,W'; + put '41.064,-115.389,Warm Springs,Wells,Hotspring,W,W'; + put '41.066,-114.99,Spring,Wells,Hotspring,W,W'; + put '41.355,-114.133,Warm Springs,Wells,Hotspring,W,W'; + put '41.148,-116.733,Hot Lake,Mcdermitt,Hotspring,H,H'; + put '40.684,-116.153,Ellison Ranch Warm Spring,Winnemucca,Hotspring,W,W'; + put '40.604,-117.648,Leach Hot Springs,Winnemucca,Hotspring,207,97'; + put '40.751,-115.035,Warm Springs,Elko,Hotspring,W,W'; + put '40.782,-115.363,Warm Spring,Elko,Hotspring,W,W'; + put '39.529,-116.388,Warm Spring,Millett,Hotspring,W,W'; + put '39.072,-115.635,Big Blue Spring,Ely,Hotspring,W,W'; + put '38.95,-119.388,Spring,Walker Lake,Hotspring,W,W'; + put '38.965,-118.689,Double Spring,Walker Lake,Hotspring,W,W'; + put '38.458,-117.303,Indian Springs,Tonopah,Hotspring,W,W'; + put '40.592,-116.157,Raine Ranch Springs,Winnemucca,Hotspring,W,W'; + put '39.941,-116.681,Hot Springs,Millett,Hotspring,180,82'; + put '40.567,-116.588,Beowawe Hot Springs (The Geysers),Winnemucca,Hotspring,208,98'; + put '40.761,-117.492,Hot Springs,Winnemucca,Hotspring,185,85'; + put '40.653,-119.378,Mud Springs,Lovelock,Hotspring,184,84'; + put '38.768,-119.174,Wilson Hot Spring,Walker Lake,Hotspring,183,84'; + put '41.921,-118.709,Baltazor Hot Spring,Vya,Hotspring,181,83'; + put '40.857,-119.328,Fly Ranch (Wards) Hot Springs,Lovelock,Hotspring,180,82'; + put '39.597,-119.11,Patua Hot Springs (Fernley),Reno,Hotspring,187,86'; + put '39.028,-117.136,Mcleod Ranch Hot Spring,Millett,Hotspring,180,82'; + put '40.316,-116.433,Hot Spring,Winnemucca,Hotspring,186,86'; + put '38.521,-116.365,Hot Creek Ranch Hot Spring,Tonopah,Hotspring,180,82'; + put '41.051,-119.028,Double Hot Springs,Vya,Hotspring,178,81'; + put '40.003,-117.718,Hyder Hot Springs,Winnemucca,Hotspring,176,80'; + put '39.665,-114.807,Monte Neva Hot Springs,Ely,Hotspring,176,80'; + put '40.368,-117.327,Buffalo Valley Hot Springs,Winnemucca,Hotspring,174,79'; + put '40.699,-116.133,Hot Springs (Carlin),Winnemucca,Hotspring,174,79'; + put '41.052,-118.717,Macfarlane Hot Spring,Vya,Hotspring,170,77'; + put '39.342,-118.578,Borax Spring,Reno,Hotspring,180,82'; + put '39.484,-119.804,Moana Springs,Reno,Hotspring,199,93'; + put '41.243,-114.947,Twelvemile Spring,Wells,Hotspring,102,39'; + put '39.38,-119.74,Steamboat Springs,Reno,Hotspring,205,96'; + put '39.558,-116.36,Bartine Hot Springs,Millett,Hotspring,108,42'; + put '39.954,-117.917,Fumaroles,Millett,Hotspring,204,96'; + put '40.389,-119.402,Hot Seeps (San Emidio Desert),Lovelock,Hotspring,203,95'; + put '38.822,-117.183,Darroughs Hot Springs,Tonopah,Hotspring,203,95'; + put '40.088,-117.725,Sou (Seven Devils) Hot Springs,Winnemucca,Hotspring,185,85'; + put '41.363,-118.788,Pinto Hot Springs,Vya,Hotspring,199,93'; + put '40.408,-117.883,Kyle Hot Springs,Winnemucca,Hotspring,171,77'; + put '41.357,-118.809,West Pinto Hot Spring,Vya,Hotspring,198,92'; + put '39.316,-117.549,Hot Springs,Millett,Hotspring,198,92'; + put '41.468,-116.15,Hot Sulphur Springs (Tuscarora),Mcdermitt,Hotspring,194,90'; + put '40.813,-115.778,Elko Hot Spring,Elko,Hotspring,190,88'; + put '39.208,-118.723,"Lee Hot Springs, Allen Springs",Reno,Hotspring,190,88'; + put '40.262,-119.379,Boiling Springs,Lovelock,Hotspring,187,86'; + put '40.77,-119.113,Butte Springs (Trego Hot Springs),Lovelock,Hotspring,187,86'; + put '39.161,-119.183,Wabuska Hot Springs,Reno,Hotspring,201,94'; + put '39.814,-115.612,Giocoecha Warm Springs,Ely,Hotspring,76,24'; + put '36.389,-114.433,Blue Point Spring,Las Vegas,Hotspring,82,28'; + put '37.016,-117.211,Seep,Goldfield,Hotspring,77,25'; + put '37.751,-116.274,Cedar Spring,Goldfield,Hotspring,77,25'; + put '37.896,-114.227,Flatnose Ranch Spring,Caliente,Hotspring,77,25'; + put '36.207,-115.983,Pahrump (Bennetts) Spring,Las Vegas,Hotspring,77,25'; + put '41.775,-115.921,Rizzi Ranch Hot Spring,Wells,Hotspring,106,41'; + put '35.944,-114.731,Hot Spring,Kingman,Hotspring,78,26'; + put '41.884,-114.117,Gambles Hole,Wells,Hotspring,104,40'; + put '36.565,-115.671,Indian Springs,Las Vegas,Hotspring,78,26'; + put '39.547,-114.915,Campbell Ranch Springs,Ely,Hotspring,76,24'; + put '38.423,-115.022,Flag Springs,Lund,Hotspring,75,24'; + put '38.44,-115.011,Butterfield Springs,Lund,Hotspring,75,24'; + put '37.997,-118.039,Fish Spring,Mariposa,Hotspring,75,24'; + put '37.029,-116.719,Springs,Goldfield,Hotspring,75,24'; + put '36.426,-116.411,Ash Tree Spring,Death Valley,Hotspring,75,24'; + put '36.033,-115.888,Browns Spring,Las Vegas,Hotspring,75,24'; + put '41.322,-119.206,Springs,Vya,Hotspring,75,24'; + put '41.706,-118.261,Ninemile Springs,Vya,Hotspring,79,26'; + put '35.964,-114.743,Hot Spring,Kingman,Hotspring,82,28'; + put '41.763,-118.279,Fivemile Spring,Vya,Hotspring,81,27'; + put '39.457,-119.722,Huffaker Springs,Reno,Hotspring,81,27'; + put '38.992,-117.042,Charnock (Big Blue) Springs,Tonopah,Hotspring,80,27'; + put '36.402,-116.302,Davis Ranch Springs,Death Valley,Hotspring,81,27'; + put '36.45,-116.313,Spring,Death Valley,Hotspring,81,27'; + put '39.792,-114.692,Lower Shellbourne Spring,Ely,Hotspring,77,25'; + put '41.338,-119.168,Springs,Vya,Hotspring,79,26'; + put '41.022,-119.275,Caine Spring,Vya,Hotspring,73,23'; + put '41.05,-117.1,Hot Springs Ranch Springs,Mcdermitt,Hotspring,79,26'; + put '40.079,-116.035,Flynn Ranch Springs,Winnemucca,Hotspring,78,26'; + put '40.325,-116.058,Hot Springs,Winnemucca,Hotspring,79,26'; + put '36.414,-116.292,Spring,Death Valley,Hotspring,79,26'; + put '36.173,-115.191,Las Vegas Springs,Las Vegas,Hotspring,79,26'; + put '36.174,-115.479,White Rock Spring,Las Vegas,Hotspring,78,26'; + put '36.565,-115.623,Spring,Las Vegas,Hotspring,79,26'; + put '36.491,-116.342,"Fairbanks Spring, Soda Spring",Death Valley,Hotspring,81,27'; + put '38.654,-114.633,Geyser Ranch Springs,Lund,Hotspring,70,21'; + put '36.363,-116.271,Bole Spring,Death Valley,Hotspring,72,22'; + put '36.999,-116.706,Spring,Death Valley,Hotspring,72,22'; + put '36.942,-115.425,Ash Creek Spring,Las Vegas,Hotspring,72,22'; + put '38.796,-119.65,Doud Springs,Walker Lake,Hotspring,70,21'; + put '38.622,-115.047,Emigrant Springs,Lund,Hotspring,70,21'; + put '38.927,-115.082,Preston Springs,Lund,Hotspring,70,21'; + put '36.147,-115.893,Manse Ranch Spring,Las Vegas,Hotspring,75,24'; + put '38.645,-114.632,Geyser Ranch Springs,Lund,Hotspring,70,21'; + put '38.574,-115.522,Tom Spring,Lund,Hotspring,72,22'; + put '38.671,-114.628,Geyser Ranch Springs,Lund,Hotspring,70,21'; + put '37.783,-114.528,Bennett Springs,Caliente,Hotspring,70,21'; + put '37.86,-114.321,Delmues Springs,Caliente,Hotspring,70,21'; + put '36.408,-116.313,Davis Ranch Spring,Death Valley,Hotspring,70,21'; + put '36.567,-114.446,Seep,Las Vegas,Hotspring,70,21'; + put '41.369,-114.187,Gamble Spring,Wells,Hotspring,69,20'; + put '39.901,-115.868,Thompson Ranch Spring,Ely,Hotspring,68,20'; + put '38.633,-114.638,Wambolt Springs,Lund,Hotspring,70,21'; + put '37.906,-118.171,Sand Spring,Mariposa,Hotspring,74,23'; + put '36.486,-114.329,Springs,Las Vegas,Hotspring,77,25'; + put '41.354,-119.116,Mustang Springs,Vya,Hotspring,73,23'; + put '41.746,-119.791,Warm Springs,Vya,Hotspring,73,23'; + put '41.258,-118.937,Cane Springs,Vya,Hotspring,74,23'; + put '40.103,-119.884,Fish Springs,Lovelock,Hotspring,73,23'; + put '39.853,-119.719,Spring,Reno,Hotspring,73,23'; + put '39.832,-116.069,Sulphur Spring,Millett,Hotspring,74,23'; + put '36.363,-116.263,Spring,Death Valley,Hotspring,72,22'; + put '38.554,-115.531,Kate Spring,Lund,Hotspring,73,23'; + put '37.074,-116.691,Spring,Goldfield,Hotspring,72,22'; + put '37.979,-117.993,Gap Spring,Goldfield,Hotspring,73,23'; + put '41.591,-119.862,Twin (Vya) Spring,Vya,Hotspring,71,22'; + put '40.763,-119.172,Coyote Spring,Lovelock,Hotspring,72,22'; + put '40.127,-116.884,Springs,Winnemucca,Hotspring,72,22'; + put '40.187,-116.805,Spring,Winnemucca,Hotspring,72,22'; + put '40.967,-114.515,Johnson Ranch Springs,Elko,Hotspring,72,22'; + put '36.205,-115.141,Kyle Spring,Las Vegas,Hotspring,75,24'; + put '39.8,-114.653,Upper Shellbourne Spring,Ely,Hotspring,74,23'; + put '36.428,-116.303,Button Springs,Death Valley,Hotspring,93,34'; + put '38.383,-115.153,Hot Creek Ranch Spring,Lund,Hotspring,90,32'; + put '39.283,-114.866,Lackawanna Hot Springs,Ely,Hotspring,95,35'; + put '38.532,-116.465,Upper Warm Spring,Tonopah,Hotspring,95,35'; + put '38.823,-116.717,South Mosquito Creek Ranch Springs,Tonopah,Hotspring,95,35'; + put '40.829,-117.306,Brooks Spring,Winnemucca,Hotspring,93,34'; + put '40.992,-117.763,Spring,Winnemucca,Hotspring,93,34'; + put '41.971,-114.574,Warm Springs,Wells,Hotspring,95,35'; + put '38.95,-115.7,Big Warm Spring,Lund,Hotspring,93,34'; + put '37.463,-115.192,Ash Springs,Caliente,Hotspring,97,36'; + put '36.464,-116.319,Parent Springs,Death Valley,Hotspring,93,34'; + put '38.352,-115.181,Moon River Spring,Lund,Hotspring,92,33'; + put '36.402,-116.274,"Point of Rocks Springs, King Sprin",Death Valley,Hotspring,91,33'; + put '36.421,-116.322,Crystal Pool,Death Valley,Hotspring,91,33'; + put '36.425,-116.291,Devils Hole,Death Valley,Hotspring,92,33'; + put '39.068,-119.786,Springs,Reno,Hotspring,90,32'; + put '38.954,-117.049,Big Blue (A) Spring,Tonopah,Hotspring,90,32'; + put '40.087,-114.647,Collar And Elbow Spring,Elko,Hotspring,93,34'; + put '36.378,-114.443,Rogers Spring,Las Vegas,Hotspring,82,28'; + put '39.943,-116.073,Shipley Hot Spring,Millett,Hotspring,106,41'; + put '38.698,-116.435,"Upper Warm Spring, Warm Spring",Tonopah,Hotspring,106,41'; + put '41.53,-118.57,Spring,Vya,Hotspring,104,40'; + put '41.877,-115.628,Rowland Hot Springs,Wells,Hotspring,104,40'; + put '40.035,-117.604,Lower Ranch Hot Springs,Winnemucca,Hotspring,104,40'; + put '40.187,-116.79,Chillis Hot Spring,Winnemucca,Hotspring,102,39'; + put '39.988,-116.044,Siri Ranch Spring,Millett,Hotspring,95,35'; + put '39.421,-119.758,Zolezzi Spring,Reno,Hotspring,102,39'; + put '38.531,-116.405,Old Dugan Ranch Hot Springs,Tonopah,Hotspring,102,39'; + put '36.968,-116.723,Burrell Hot Spring,Death Valley,Hotspring,102,39'; + put '38.343,-118.103,Soda Springs,Walker Lake,Hotspring,100,38'; + put '38.556,-115.767,"Lockes Big Spring, Hay Corral Spr",Lund,Hotspring,100,38'; + put '38.594,-115.138,Moorman Spring,Lund,Hotspring,100,38'; + put '38.398,-115.862,Storm Spring,Lund,Hotspring,99,37'; + put '41.19,-115.287,Hot Spring,Wells,Hotspring,97,36'; + put '37.822,-117.48,Pearl Hot Springs,Goldfield,Hotspring,97,36'; + put '39.159,-119.737,Nevada State Prison Spring,Reno,Hotspring,75,24'; + put '40.025,-117.646,Spring,Winnemucca,Hotspring,83,28'; + put '40.83,-119.538,Springs,Lovelock,Hotspring,84,29'; + put '39.442,-119.743,Double Diamond Spring,Reno,Hotspring,84,29'; + put '39.413,-114.779,Mcgill Spring,Ely,Hotspring,84,29'; + put '39.458,-114.756,Schoolhouse Spring,Ely,Hotspring,84,29'; + put '36.375,-116.274,Big (Ash Meadows) Spring,Death Valley,Hotspring,83,28'; + put '38.292,-114.272,Hammond Ranch Spring,Lund,Hotspring,84,29'; + put '41.398,-119.165,Spring,Vya,Hotspring,84,29'; + put '41.732,-119.785,Seeps (Hills Warm Spring),Vya,Hotspring,83,28'; + put '38.563,-115.528,Blue Eagle Springs,Lund,Hotspring,84,29'; + put '40.873,-117.937,Rose Creek Spring,Winnemucca,Hotspring,83,28'; + put '39.917,-114.667,Spring,Ely,Hotspring,83,28'; + put '36.39,-116.278,Jack Rabbit Spring,Death Valley,Hotspring,82,28'; + put '36.437,-116.206,Spring,Death Valley,Hotspring,82,28'; + put '38.937,-115.695,Little Warm Spring,Lund,Hotspring,90,32'; + put '36.479,-116.326,Rogers Spring,Death Valley,Hotspring,82,28'; + put '40.29,-116.049,Carlotti Ranch Springs,Winnemucca,Hotspring,102,39'; + put '36.468,-116.325,Longstreet Spring,Death Valley,Hotspring,82,28'; + put '36.722,-114.716,Muddy Spring,Las Vegas,Hotspring,90,32'; + put '37.532,-115.233,Crystal Springs,Caliente,Hotspring,90,32'; + put '37.598,-115.215,Hiko Spring,Caliente,Hotspring,90,32'; + put '36.404,-116.383,Spring,Death Valley,Hotspring,90,32'; + put '37.996,-116.389,Reveille Mill Spring,Goldfield,Hotspring,84,29'; + put '36.71,-114.714,Moapa Warm Springs,Las Vegas,Hotspring,90,32'; + put '35.982,-114.748,Hot Springs,Kingman,Hotspring,86,30'; + put '40.929,-116.895,Izzenhood Ranch Springs,Winnemucca,Hotspring,88,31'; + put '37.807,-114.38,Panaca Spring,Caliente,Hotspring,88,31'; + put '36.942,-116.729,Spring,Death Valley,Hotspring,88,31'; + put '41.98,-114.376,Hot Spring,Wells,Hotspring,86,30'; + put '36.433,-116.308,Scruggs Springs,Death Valley,Hotspring,86,30'; + put '40.952,-114.751,Ralphs Warm Springs,Elko,Hotspring,86,30'; + put '39.526,-118.876,Soda Lake,Reno,Hotspring,86,30'; + put '38.027,-116.683,Spring,Tonopah,Hotspring,86,30'; + put '37.741,-115.753,Sand Spring,Caliente,Hotspring,86,30'; + put '36.918,-116.744,Beatty Municipal Spring,Death Valley,Hotspring,88,31'; + put '38.255,-116.829,Saulsbury Warm Spring,Tonopah,Hotspring,86,30'; + put '42.48,-73.37,Lebanon Spring,Albany,Hotspring,72,22'; + put '44.241,-122.058,Bigelow Hot Springs,Salem,Hotspring,142,61'; + put '44.862,-121.201,Kahneeta Hot Springs,Bend,Hotspring,126,52'; + put '44.927,-117.939,Radium Hot Springs,Baker,Hotspring,135,57'; + put '44.354,-118.574,Blue Mountain Hot Springs,Canyon City,Hotspring,136,58'; + put '44.936,-122.173,Bagby Hot Springs,Salem,Hotspring,136,58'; + put '43.944,-118.136,Beulah Hot Springs,Burns,Hotspring,140,60'; + put '43.763,-117.156,Mitchell Butte Hot Spring,Boise,Hotspring,144,62'; + put '42.116,-121.287,Oregon Hot Springs (Big Hot Spring,Klamath Falls,Hotspring,142,61'; + put '45.151,-118.659,Lehman Springs,Pendleton,Hotspring,142,61'; + put '43.719,-121.209,East Lake Hot Springs,Crescent,Hotspring,144,62'; + put '43.469,-118.202,Luce Hot Springs,Burns,Hotspring,145,63'; + put '45.018,-117.625,Medical Hot Springs,Grangeville,Hotspring,140,60'; + put '44.867,-121.228,Springs,Bend,Hotspring,125,52'; + put '42.188,-118.383,Flagstaff Butte Hot Spring,Adel,Hotspring,126,52'; + put '44.451,-119.105,Mount Vernon Hot Springs,Canyon City,Hotspring,121,49'; + put '42.977,-117.061,Canters Hot Spring,Jordan Valley,Hotspring,120,49'; + put '43.294,-122.367,Umpqua Hot Springs,Roseburg,Hotspring,117,47'; + put '44.002,-119.647,Weberg Hot Spring,Canyon City,Hotspring,115,46'; + put '43.739,-117.178,Deer Butte Hot Spring,Boise,Hotspring,115,46'; + put '43.795,-117.958,Jonesboro Warm Spring,Boise,Hotspring,112,45'; + put '42.075,-119.927,Hallinan Spring,Adel,Hotspring,113,45'; + put '42.297,-119.776,Fisher Hot Springs,Adel,Hotspring,154,68'; + put '45.013,-117.885,Kropp Hot Spring,Grangeville,Hotspring,109,43'; + put '42.221,-120.368,Hunters Hot Springs,Klamath Falls,Hotspring,205,96'; + put '44.083,-122.233,Cougar Reservoir Hot Springs,Salem,Hotspring,111,44'; + put '44.023,-117.46,Neal Hot Springs,Baker,Hotspring,189,87'; + put '42.431,-121.963,Eagle Point Spring,Klamath Falls,Hotspring,95,35'; + put '43.689,-122.372,Kitson Hot Springs,Roseburg,Hotspring,109,43'; + put '44.813,-117.765,Spring (Hot),Baker,Hotspring,W,W'; + put '43.776,-118.047,Warm Spring,Burns,Hotspring,W,W'; + put '43.793,-118.472,Sitz Warm Spring,Burns,Hotspring,W,W'; + put '43.86,-118.288,Altnow Hot Spring,Burns,Hotspring,W,W'; + put '43.893,-117.596,Springs,Boise,Hotspring,W,W'; + put '45.206,-117.912,Union Station Hot Springs,Grangeville,Hotspring,H,H'; + put '44.208,-117.455,Jamieson Hot Springs,Baker,Hotspring,H,H'; + put '42.338,-118.602,Hot Springs,Adel,Hotspring,207,97'; + put '44.782,-121.975,Breitenbush Hot Springs,Bend,Hotspring,198,92'; + put '42.219,-119.877,Warner Valley Ranch,Adel,Hotspring,198,92'; + put '42.156,-120.345,Barry Ranch Hot Springs,Klamath Falls,Hotspring,190,88'; + put '44.193,-122.049,Belknap Springs,Salem,Hotspring,160,71'; + put '45.021,-122.009,Austin Hot Springs,Vancouver,Hotspring,186,86'; + put '42.676,-118.344,Mickey Springs,Adel,Hotspring,187,86'; + put '44.153,-122.098,Foley Springs,Salem,Hotspring,178,81'; + put '45.244,-117.958,Hot Lake Springs,Grangeville,Hotspring,176,80'; + put '42.544,-118.533,Alvord Hot Springs,Adel,Hotspring,174,79'; + put '43.441,-118.638,Crane Hot Springs,Burns,Hotspring,172,78'; + put '42.226,-119.881,Crump Geyser (Crump Spring),Adel,Hotspring,172,78'; + put '43.727,-117.203,Snively Hot Spring,Boise,Hotspring,170,77'; + put '42.174,-121.615,Olene Gap Hot Springs,Klamath Falls,Hotspring,165,74'; + put '43.708,-122.288,Mccredie Springs,Roseburg,Hotspring,163,73'; + put '43.982,-117.233,Vale Hot Springs,Boise,Hotspring,163,73'; + put '42.162,-120.344,Leithead Hot Spring,Klamath Falls,Hotspring,162,72'; + put '45.372,-121.697,Mount Hood Fumaroles,The Dalles,Hotspring,194,90'; + put '43.264,-119.015,Dunn Spring,Burns,Hotspring,70,21'; + put '42.873,-122.167,Annie Spring,Medford,Hotspring,77,25'; + put '42.133,-121.219,Wilkersons Hot Spring,Klamath Falls,Hotspring,76,24'; + put '43.272,-119.293,Basque Spring,Burns,Hotspring,74,23'; + put '43.276,-119.34,Double O Spring,Burns,Hotspring,74,23'; + put '44.073,-119.427,Brisbois Ranch Springs,Canyon City,Hotspring,72,22'; + put '43.265,-119.276,Johnson Spring,Burns,Hotspring,72,22'; + put '43.281,-119.311,Double O Barnyard Spring,Burns,Hotspring,72,22'; + put '43.501,-119.091,Roadland Spring,Burns,Hotspring,72,22'; + put '43.529,-119.081,Goodman Spring,Burns,Hotspring,72,22'; + put '43.703,-117.19,South Black Willow Spring,Boise,Hotspring,71,22'; + put '42.307,-119.875,Moss Ranch Spring,Adel,Hotspring,72,22'; + put '43.758,-118.067,Juntura Warm Spring 1,Burns,Hotspring,77,25'; + put '43.732,-121.252,Paulina Springs,Crescent,Hotspring,70,21'; + put '42.176,-121.828,Howard Holiday,Klamath Falls,Hotspring,77,25'; + put '43.477,-119.075,Baker Spring,Burns,Hotspring,70,21'; + put '42.178,-121.801,Hardboard Spring,Klamath Falls,Hotspring,70,21'; + put '42.325,-120.327,White Rock Ranch Hot Spring,Klamath Falls,Hotspring,71,21'; + put '43.252,-119.258,Hughet Spring,Burns,Hotspring,68,20'; + put '42.38,-120.33,Bean Hot Spring,Klamath Falls,Hotspring,69,20'; + put '42.933,-120.642,Lost Cabin Spring,Klamath Falls,Hotspring,68,20'; + put '42.998,-120.725,Buckhorn Creek Springs,Klamath Falls,Hotspring,68,20'; + put '42.688,-117.905,Tudors Spring,Jordan Valley,Hotspring,68,20'; + put '42.756,-117.55,Scott Spring,Jordan Valley,Hotspring,68,20'; + put '42.725,-120.646,Summer Lake Hot Spring,Klamath Falls,Hotspring,109,43'; + put '43.757,-118.092,Juntura Warm Spring 2,Burns,Hotspring,95,35'; + put '44.374,-118.738,Limekiln Hot Spring,Canyon City,Hotspring,70,21'; + put '42.221,-122.742,Jackson Hot Springs,Medford,Hotspring,95,35'; + put '44.892,-119.141,Ritter Hot Springs,Canyon City,Hotspring,106,41'; + put '43.808,-122.309,Wall Creek Warm Springs,Roseburg,Hotspring,106,41'; + put '43.395,-118.308,Springs (Hot),Burns,Hotspring,106,41'; + put '43.302,-117.383,Hot Spring,Boise,Hotspring,106,41'; + put '44.28,-118.956,Joaquin Miller Hot Springs,Canyon City,Hotspring,104,40'; + put '42.501,-119.693,Antelope Hot Springs,Adel,Hotspring,104,40'; + put '45.129,-118.738,Hidaway Springs,Pendleton,Hotspring,100,38'; + put '44.975,-118.044,Fisher Hot Springs,Canyon City,Hotspring,99,37'; + put '44.033,-117.449,Bully Creek Spring,Baker,Hotspring,99,37'; + put '42.93,-120.798,Pardon Warm Spring,Klamath Falls,Hotspring,76,24'; + put '42.327,-118.602,Borax Lake (Hot Lake),Adel,Hotspring,97,36'; + put '42.161,-121.627,Crystal Spring,Klamath Falls,Hotspring,78,26'; + put '45.741,-118.233,Bingham Springs,Pendleton,Hotspring,93,34'; + put '42.889,-118.898,Fivemile Spring (Hoghouse Hot Sprs,Adel,Hotspring,80,27'; + put '43.54,-119.081,Millpond Hot Spring,Burns,Hotspring,79,26'; + put '45.891,-116.873,Cook Creek Hot Spring,Grangeville,Hotspring,97,36'; + put '45.295,-121.731,Swim Warm Springs,The Dalles,Hotspring,79,26'; + put '42.04,-120.924,Warm Spring,Klamath Falls,Hotspring,92,33'; + put '44.779,-117.811,Sam O Spring,Baker,Hotspring,80,27'; + put '44.538,-117.417,Nelson Spring,Baker,Hotspring,80,27'; + put '45.631,-119.703,Well Spring,Pendleton,Hotspring,80,27'; + put '42.287,-119.867,Moss Ranch Springs,Adel,Hotspring,83,28'; + put '45.061,-118.455,Warm Mineral Spring,Pendleton,Hotspring,83,28'; + put '43.95,-119.634,Warm Springs,Burns,Hotspring,84,29'; + put '45.295,-117.806,Warm Spring,Grangeville,Hotspring,85,29'; + put '42.815,-118.899,Warm Springs,Adel,Hotspring,89,32'; + put '43.452,-103.508,Hot Brook Springs,Hot Springs,Hotspring,75,24'; + put '43.442,-103.481,Hot Springs,Hot Springs,Hotspring,87,31'; + put '29.178,-102.953,Rio Grande Village Spring,Emory Peak,Hotspring,97,36'; + put '30.823,-105.315,Indian Hot Springs,Marfa,Hotspring,117,47'; + put '30.038,-104.598,Ruidosa Hot Springs,Marfa,Hotspring,113,45'; + put '29.182,-102.992,Hot Springs,Emory Peak,Hotspring,106,41'; + put '30.21,-104.562,Capote Springs,Marfa,Hotspring,99,37'; + put '30.133,-104.602,Nixon Spring,Marfa,Hotspring,90,32'; + put '29.787,-104.462,Springs (Las Cienegas),Presidio,Hotspring,86,30'; + put '30.861,-105.34,Red Bull Spring,Marfa,Hotspring,99,37'; + put '38.85,-112.49,Hatton Hot Spring,Richfield,Hotspring,100,38'; + put '40.176,-111.801,Bird Island,Salt Lake City,Hotspring,86,30'; + put '41.917,-111.958,Gancheff Spring,Ogden,Hotspring,88,31'; + put '37.942,-112.438,Lefevre,Cedar City,Hotspring,90,32'; + put '37.335,-113.687,Veyo Hot Spring,Cedar City,Hotspring,90,32'; + put '40.332,-111.891,Fault Zone Spring,Salt Lake City,Hotspring,90,32'; + put '40.146,-111.806,Lincoln Point Warm Springs,Salt Lake City,Hotspring,90,32'; + put '38.186,-112.912,Us Blm,Richfield,Hotspring,91,33'; + put '41.833,-112.454,Blue Creek Spring,Brigham City,Hotspring,82,28'; + put '40.526,-111.488,Midway Hot Springs,Salt Lake City,Hotspring,100,38'; + put '40.525,-111.468,Midway Hot Springs,Salt Lake City,Hotspring,104,40'; + put '40.038,-111.529,Castilla Springs,Salt Lake City,Hotspring,104,40'; + put '38.217,-112.904,Dotsons (Radium) Warm Spring,Richfield,Hotspring,91,33'; + put '40.465,-109.221,Split Mountain Warm Springs,Vernal,Hotspring,86,30'; + put '40.788,-112.017,Hobo Warm Spring,Tooele,Hotspring,84,29'; + put '40.788,-111.899,Wasatch Hot Springs,Salt Lake City,Hotspring,108,42'; + put '39.35,-113.515,Tule Spring,Delta,Hotspring,82,28'; + put '39.424,-113.485,Coyote Spring,Delta,Hotspring,82,28'; + put '39.842,-113.392,Fish Springs,Delta,Hotspring,82,28'; + put '39.887,-113.413,North Springs,Delta,Hotspring,82,28'; + put '41.756,-113.603,Warm Spring,Brigham City,Hotspring,81,27'; + put '41.038,-111.656,Como Springs,Ogden,Hotspring,81,27'; + put '40.397,-112.421,Morgans Warm Spring,Tooele,Hotspring,80,27'; + put '39.464,-114.038,Gandy Warm Springs,Ely,Hotspring,81,27'; + put '40.447,-110.828,Warm Springs,Salt Lake City,Hotspring,79,26'; + put '37.7,-110.421,Warm Spring,Escalante,Hotspring,79,26'; + put '40.502,-114.038,Blue Lake Spring,Elko,Hotspring,84,29'; + put '38.503,-112.849,Roosevelt Hot Springs,Richfield,Hotspring,133,56'; + put '38.774,-112.096,Richfield Warm Springs,Richfield,Hotspring,73,23'; + put '40.488,-111.911,Crystal Hot Springs,Salt Lake City,Hotspring,187,86'; + put '38.186,-113.197,Thermo Hot Springs,Richfield,Hotspring,185,85'; + put '38.172,-113.204,Thermo Hot Springs,Richfield,Hotspring,181,83'; + put '39.613,-112.729,"Baker (Abraham, Crater) Hot Spring",Delta,Hotspring,180,82'; + put '38.639,-112.098,Red Hill Hot Spring,Richfield,Hotspring,171,77'; + put '38.633,-112.107,Monroe (Cooper) Hot Springs,Richfield,Hotspring,169,76'; + put '38.613,-112.202,Joseph Hot Springs,Richfield,Hotspring,147,64'; + put '39.906,-113.43,Wilson Health Springs,Delta,Hotspring,142,61'; + put '41.138,-112.175,Hooper Hot Springs,Brigham City,Hotspring,140,60'; + put '41.338,-112.031,Utah Hot Springs,Brigham City,Hotspring,138,59'; + put '38.864,-112.506,Meadow Hot Springs,Richfield,Hotspring,106,41'; + put '40.815,-111.918,Becks Hot Spring,Salt Lake City,Hotspring,133,56'; + put '37.189,-113.272,Dixie (Laverkin) Hot Springs,Cedar City,Hotspring,108,42'; + put '41.659,-112.087,Crystal (Madsens) Hot Springs,Brigham City,Hotspring,129,54'; + put '41.855,-112.158,Udy Hot Springs,Brigham City,Hotspring,124,51'; + put '41.578,-112.23,Stinking Hot Springs,Brigham City,Hotspring,118,48'; + put '40.517,-111.475,Midway Hot Spring,Salt Lake City,Hotspring,115,46'; + put '40.536,-111.478,Warm Ditch Spring,Salt Lake City,Hotspring,115,46'; + put '40.35,-111.905,Saratoga Hot Springs,Salt Lake City,Hotspring,111,44'; + put '40.353,-111.895,Crater Hot Spring,Salt Lake City,Hotspring,111,44'; + put '41.901,-112.999,Coyote Spring,Brigham City,Hotspring,109,43'; + put '41.687,-113.986,Spring (Hot),Brigham City,Hotspring,108,42'; + put '41.582,-112.256,Little Mountain Hot Spring,Brigham City,Hotspring,108,42'; + put '41.822,-113.263,L.G. Carter Springs,Brigham City,Hotspring,77,25'; + put '41.236,-111.924,Ogden Hot Spring,Ogden,Hotspring,135,57'; + put '37.178,-113.634,Snow Spring,Cedar City,Hotspring,70,21'; + put '38.34,-113.22,Woodhouse Spring,Richfield,Hotspring,72,22'; + put '38.155,-112.901,Willow Spring,Richfield,Hotspring,72,22'; + put '38.56,-112.578,Sulphurdale,Richfield,Hotspring,72,22'; + put '38.981,-111.829,Salt Spring,Salina,Hotspring,72,22'; + put '37.174,-112.535,Red Canyon,Cedar City,Hotspring,72,22'; + put '41.808,-113.327,W.R. Carter Springs,Brigham City,Hotspring,70,21'; + put '41.818,-113.311,Larson Springs,Brigham City,Hotspring,70,21'; + put '41.829,-113.654,Head Spring,Brigham City,Hotspring,70,21'; + put '40.653,-112.907,Redlum Spring,Tooele,Hotspring,70,21'; + put '40.458,-111.929,Camp Williams,Salt Lake City,Hotspring,70,21'; + put '40.647,-112.524,Grantsville Warm Springs,Tooele,Hotspring,77,25'; + put '39.183,-111.691,Sterling (Peacock) Warm Spring,Price,Hotspring,72,22'; + put '39.246,-111.645,Livingston Warm Springs,Price,Hotspring,73,23'; + put '38.138,-112.863,Big Maple Spring,Richfield,Hotspring,70,21'; + put '37.393,-113.61,Irvine Spring,Cedar City,Hotspring,70,21'; + put '41.563,-113.954,Kimber (Rose) Spring,Brigham City,Hotspring,68,20'; + put '41.614,-113.613,Warm Spring,Brigham City,Hotspring,68,20'; + put '41.328,-111.826,Patio Springs,Ogden,Hotspring,68,20'; + put '40.172,-112.426,Davis,Tooele,Hotspring,68,20'; + put '40.118,-111.337,Diamond Fork Warm Springs,Salt Lake City,Hotspring,68,20'; + put '39.249,-113.877,Knoll Springs,Delta,Hotspring,68,20'; + put '39.403,-113.863,Twin Springs,Delta,Hotspring,68,20'; + put '39.788,-111.881,Ray Lunt Spring,Price,Hotspring,68,20'; + put '38.762,-112.87,Springs,Richfield,Hotspring,68,20'; + put '38.77,-112.871,Coyote Spring,Richfield,Hotspring,68,20'; + put '37.937,-112.424,Tebbs,Cedar City,Hotspring,68,20'; + put '37.096,-113.447,Warner Valley Spring,Cedar City,Hotspring,70,21'; + put '40.565,-112.738,Deseret Livestock South Springs,Tooele,Hotspring,73,23'; + put '37.158,-113.399,Virgin River Spring,Cedar City,Hotspring,70,21'; + put '39.899,-112.045,Springs,Delta,Hotspring,72,22'; + put '38.603,-112.111,Johnson Warm Spring,Richfield,Hotspring,77,25'; + put '41.722,-112.266,Bothwell Warm Springs,Brigham City,Hotspring,75,24'; + put '40.538,-112.747,Deseret Livestock,Tooele,Hotspring,75,24'; + put '40.733,-112.621,Utah Fish And Game Dept,Tooele,Hotspring,75,24'; + put '40.228,-111.867,Warm Springs,Salt Lake City,Hotspring,75,24'; + put '37.137,-113.513,Warm Spring,Cedar City,Hotspring,75,24'; + put '37.138,-113.528,Green Spring,Cedar City,Hotspring,75,24'; + put '37.166,-113.383,Berry Springs,Cedar City,Hotspring,75,24'; + put '41.834,-112.054,Cutler Warm Spring,Brigham City,Hotspring,73,23'; + put '40.614,-112.709,Horseshoe Springs,Tooele,Hotspring,73,23'; + put '41.239,-112.413,Compton Spring,Brigham City,Hotspring,72,22'; + put '40.743,-112.642,Big Warm Springs,Tooele,Hotspring,72,22'; + put '40.558,-112.739,Deseret Livestock South Spring,Tooele,Hotspring,72,22'; + put '40.39,-112.424,Russells Warm Springs,Tooele,Hotspring,72,22'; + put '41.831,-113.391,Pugsley,Brigham City,Hotspring,73,23'; + put '41.449,-112.442,Poulsen Spring (Salt),Brigham City,Hotspring,72,22'; + put '40.167,-111.622,Wood Springs,Salt Lake City,Hotspring,73,23'; + put '40.234,-111.865,Warm Springs,Salt Lake City,Hotspring,77,25'; + put '39.955,-111.858,Goshen Warm Srings,Price,Hotspring,73,23'; + put '39.334,-113.518,South Tule Spring,Delta,Hotspring,77,25'; + put '39.616,-112.803,Fumarole Butte,Delta,Hotspring,73,23'; + put '40.545,-111.928,East Jordan Canal,Salt Lake City,Hotspring,73,23'; + put '41.643,-112.281,Springs,Brigham City,Hotspring,72,22'; + put '37.29,-80.619,New River White Sulphur Springs,Bluefield,Hotspring,85,29'; + put '37.997,-79.83,Hot Springs,Roanoke,Hotspring,106,41'; + put '37.898,-79.462,Rockbridge Baths,Roanoke,Hotspring,72,22'; + put '38.055,-79.78,Warm Springs,Charlottesvill,Hotspring,95,35'; + put '37.963,-79.861,Healing Springs,Roanoke,Hotspring,86,30'; + put '38.238,-79.65,Bragg Spring,Charlottesvill,Hotspring,75,24'; + put '37.645,-80.238,Sweet Chalybeate Spring,Bluefield,Hotspring,75,24'; + put '38.218,-79.673,Bolar Spring,Charlottesvill,Hotspring,73,23'; + put '37.86,-79.988,Layton Spring,Roanoke,Hotspring,72,22'; + put '37.87,-79.933,Falling Spring,Roanoke,Hotspring,77,25'; + put '37.16,-80.806,Alum Springs,Bluefield,Hotspring,72,22'; + put '46.852,-121.758,Mt Rainier Fumaroles,Yakima,Hotspring,162,72'; + put '46.738,-121.562,Ohanapecosh Hot Springs,Yakima,Hotspring,122,50'; + put '47.707,-121.155,Scenic Hot Springs,Wenatchee,Hotspring,122,50'; + put '47.969,-123.864,Sol Duc Hot Springs,Seattle,Hotspring,122,50'; + put '48.974,-119.475,Hot Lake,Okanogan,Hotspring,122,50'; + put '45.658,-121.962,Moffetts (Bonneville) Hot Springs,The Dalles,Hotspring,97,36'; + put '48.906,-119.455,Poison Lake,Okanogan,Hotspring,122,50'; + put '45.701,-121.728,Collins Hot Springs,The Dalles,Hotspring,122,50'; + put '47.484,-121.391,Goldmeyer Hot Springs,Wenatchee,Hotspring,127,53'; + put '46.202,-121.492,Mount Adams Fumaroles,Yakima,Hotspring,150,66'; + put '46.198,-122.197,Mt St Helens Fumaroles,Hoquiam,Hotspring,190,88'; + put '48.789,-121.804,Dorr Fumarole Field,Concrete,Hotspring,194,90'; + put '48.77,-121.813,Sherman Crater Fumaroles,Concrete,Hotspring,266,130'; + put '45.723,-121.927,Rock Creek Hot Springs,The Dalles,Hotspring,H,H'; + put '48.15,-121.062,Gamma Hot Springs,Concrete,Hotspring,140,60'; + put '46.378,-122.265,Green River Soda Spring,Hoquiam,Hotspring,86,30'; + put '46.575,-121.706,Packwood Hot Spring,Yakima,Hotspring,100,38'; + put '47.201,-121.536,Lester Hot Springs,Wenatchee,Hotspring,120,49'; + put '46.024,-118.771,Warm Springs Canyon Warm Spring,Walla Walla,Hotspring,72,22'; + put '46.345,-121.6,Orr Creek Warm Springs,Yakima,Hotspring,72,22'; + put '46.041,-121.181,Fish Hatchery Warm Spring,Yakima,Hotspring,75,24'; + put '46.752,-121.814,Longmire Mineral Springs,Yakima,Hotspring,77,25'; + put '47.892,-121.342,Garland Mineral Springs,Wenatchee,Hotspring,84,29'; + put '46.452,-120.956,Simcoe Soda Springs,Yakima,Hotspring,90,32'; + put '48.254,-121.17,Sulphur Creek Hot Springs,Concrete,Hotspring,99,37'; + put '48.118,-121.192,Kennedy Hot Spring,Concrete,Hotspring,100,38'; + put '48.763,-121.667,Baker Hot Spring,Concrete,Hotspring,108,42'; + put '47.977,-123.682,Olympic Hot Springs,Seattle,Hotspring,118,48'; + put '45.728,-121.8,St Martins Hot Springs,The Dalles,Hotspring,120,49'; + put '45.821,-121.133,Klickitat Mineral Springs,The Dalles,Hotspring,81,27'; + put '38.163,-79.975,Minnehaha Springs,Charlottesvill,Hotspring,70,21'; + put '37.63,-80.24,Old Sweet Spring,Bluefield,Hotspring,73,23'; + put '39.618,-78.23,Berkeley Springs,Cumberland,Hotspring,72,22'; + put '38.605,-79.353,Thorn Spring,Charlottesvill,Hotspring,72,22'; + put '39.471,-77.877,Swan Pond Spring,Baltimore,Hotspring,72,22'; + put '44.29,-110.504,"Hot Springs,heart Lake Geyser Basi",Ashton,Hotspring,201,94'; + put '44.691,-110.728,Geyser Springs Group,Ashton,Hotspring,201,94'; + put '44.554,-110.812,Fountain Group,Ashton,Hotspring,201,94'; + put '44.543,-110.859,Fairy Springs,Ashton,Hotspring,201,94'; + put '44.485,-110.852,"Biscuit Basin, Sapphire Pool",Ashton,Hotspring,201,94'; + put '44.48,-110.85,Cascade Group,Ashton,Hotspring,201,94'; + put '44.46,-110.844,Black Sand Basin,Ashton,Hotspring,201,94'; + put '44.459,-110.835,Myriad Group,Ashton,Hotspring,201,94'; + put '44.307,-110.526,"Hot Springs,heart Lake Geyser Basi",Ashton,Hotspring,201,94'; + put '44.354,-110.8,Shoshone Geyser Basin,Ashton,Hotspring,203,95'; + put '44.568,-110.805,Quagmire Group,Ashton,Hotspring,203,95'; + put '44.537,-110.801,"White Dome Geyser, Surprise Pool",Ashton,Hotspring,203,95'; + put '44.52,-110.828,Flood Group,Ashton,Hotspring,203,95'; + put '44.471,-110.843,"Daisy Group, Sentinel Geysers",Ashton,Hotspring,203,95'; + put '44.466,-110.839,"Middle Group,tortoise Shell,inkwel",Ashton,Hotspring,203,95'; + put '44.46,-110.828,"Geyser Hill Group, Old Faithful Ge",Ashton,Hotspring,203,95'; + put '44.908,-110.393,Calcite Springs,Ashton,Hotspring,201,94'; + put '44.417,-110.57,West Thumb Geyser Basin,Ashton,Hotspring,203,95'; + put '44.459,-110.817,Southeastern Group,Ashton,Hotspring,198,92'; + put '44.433,-110.581,Potts Hot Spring Basin,Ashton,Hotspring,203,95'; + put '44.421,-110.952,Smoke Jumper Hot Springs,Ashton,Hotspring,198,92'; + put '44.684,-110.753,Monument Geyser Basin,Ashton,Hotspring,197,92'; + put '44.679,-110.746,Beryl Spring,Ashton,Hotspring,198,92'; + put '44.544,-110.258,Turbid Springs,Ashton,Hotspring,198,92'; + put '44.53,-110.297,Steamboat Springs,Ashton,Hotspring,198,92'; + put '44.518,-110.813,"Hot Springs, Rabbit Creek Group",Ashton,Hotspring,198,92'; + put '44.514,-110.828,Rabbit Creek Group,Ashton,Hotspring,198,92'; + put '44.484,-110.873,Mystic Falls Springs,Ashton,Hotspring,198,92'; + put '44.739,-110.324,Josephs Coat Springs,Ashton,Hotspring,199,93'; + put '44.75,-110.714,Gas Vent,Ashton,Hotspring,H,H'; + put '44.282,-110.506,Rustic Geyser,Ashton,Hotspring,199,93'; + put '44.571,-110.811,Morning Mist Springs,Ashton,Hotspring,205,96'; + put '44.733,-110.703,Cistern Spring,Ashton,Hotspring,199,93'; + put '44.697,-110.724,Gibbon Hill Geyser,Ashton,Hotspring,199,93'; + put '44.693,-110.738,Artists Paintpots,Ashton,Hotspring,199,93'; + put '44.69,-110.384,Hot Springs on Bog Creek,Ashton,Hotspring,199,93'; + put '44.526,-110.835,Excelsior Geyser Crater,Ashton,Hotspring,199,93'; + put '44.418,-110.805,Lone Star Geyser,Ashton,Hotspring,199,93'; + put '44.309,-110.654,Hot Springs on Lewis Lake,Ashton,Hotspring,199,93'; + put '44.469,-110.828,Solitary Geyser,Ashton,Hotspring,198,92'; + put '44.433,-110.813,Hot Springs,Ashton,Hotspring,H,H'; + put '44.766,-110.3,Hot Springs,Ashton,Hotspring,H,H'; + put '44.61,-110.438,Hot Springs,Ashton,Hotspring,H,H'; + put '44.607,-110.617,Hot Springs East of Mary Lake,Ashton,Hotspring,H,H'; + put '44.601,-110.632,Gas Vent East of Mary Lake,Ashton,Hotspring,H,H'; + put '44.595,-110.622,Gas Vents Southeast of Mary Lake,Ashton,Hotspring,H,H'; + put '44.572,-110.691,Hot Springs,Ashton,Hotspring,H,H'; + put '44.553,-110.301,Beach Springs,Ashton,Hotspring,H,H'; + put '44.551,-110.85,Springs on Fairy Creek,Ashton,Hotspring,H,H'; + put '44.616,-110.616,Highland Hot Springs,Ashton,Hotspring,H,H'; + put '44.438,-110.977,Hot Springs on Continental Divide,Ashton,Hotspring,H,H'; + put '44.617,-110.432,Mud Geysers,Ashton,Hotspring,H,H'; + put '44.404,-110.824,Hot Springs on Upper Firehole Rive,Ashton,Hotspring,H,H'; + put '44.498,-109.193,Buffalo Bill Reservoir Springs,Cody,Hotspring,W,W'; + put '44.495,-109.222,Buffalo Bill Reservoir Springs,Cody,Hotspring,W,W'; + put '44.482,-109.204,Buffalo Bill Reservoir Springs,Cody,Hotspring,W,W'; + put '44.841,-110.167,"Hot, on Lamar River",Ashton,Hotspring,W,W'; + put '44.734,-110.029,Hot Springs,Ashton,Hotspring,W,W'; + put '44.708,-110.471,Warm Spring,Ashton,Hotspring,W,W'; + put '44.701,-110.036,Hot Springs,Ashton,Hotspring,W,W'; + put '44.508,-110.832,Midway Picnic Ground,Ashton,Hotspring,H,H'; + put '44.715,-110.555,Gas Vents,Ashton,Hotspring,H,H'; + put '44.563,-110.834,River Group,Ashton,Hotspring,205,96'; + put '44.544,-110.788,"Black Warrior Group, Shelf Spring",Ashton,Hotspring,205,96'; + put '44.115,-110.684,Huckleberry Hot Springs,Ashton,Hotspring,B,B'; + put '44.842,-110.732,Apollinaris Spring,Ashton,Hotspring,H,H'; + put '44.825,-110.675,Gas Vents at Horseshoe Hill,Ashton,Hotspring,H,H'; + put '44.781,-110.738,Steam Vents at Roaring Mountain,Ashton,Hotspring,H,H'; + put '44.743,-110.242,Hot Spring Basin Group,Ashton,Hotspring,198,92'; + put '44.752,-110.256,Hot Spring,Ashton,Hotspring,H,H'; + put '44.612,-110.618,Gas Vent,Ashton,Hotspring,H,H'; + put '44.741,-110.699,Gas Vent,Ashton,Hotspring,H,H'; + put '44.566,-110.871,"Flat Cone Spring, Steep Cone",Ashton,Hotspring,205,96'; + put '44.711,-110.468,Hot Springs,Ashton,Hotspring,H,H'; + put '44.708,-110.461,Forest Springs,Ashton,Hotspring,H,H'; + put '44.672,-110.236,Hot Springs,Ashton,Hotspring,H,H'; + put '44.667,-110.282,Hot Springs,Ashton,Hotspring,H,H'; + put '44.656,-110.572,Violet Springs,Ashton,Hotspring,H,H'; + put '44.642,-110.238,Hot Spring,Ashton,Hotspring,H,H'; + put '44.634,-110.234,The Mudkettles,Ashton,Hotspring,H,H'; + put '44.634,-110.226,The Mushpots,Ashton,Hotspring,H,H'; + put '44.532,-110.874,"Imperial Geyser, Spray Geyser",Ashton,Hotspring,192,89'; + put '42.545,-106.725,Alcova Hot Springs,Casper,Hotspring,129,54'; + put '42.75,-109.616,Steele Hot Springs,Lander,Hotspring,102,39'; + put '43.37,-110.445,Granite Hot Spring,Driggs,Hotspring,106,41'; + put '43.008,-108.835,Washakie Mineral Hot Springs,Thermopolis,Hotspring,111,44'; + put '43.907,-110.198,North Buffalo Fork Springs,Driggs,Hotspring,113,45'; + put '43.365,-110.443,Granite Falls Hot Springs,Driggs,Hotspring,112,45'; + put '42.817,-110.997,Johnson Springs,Preston,Hotspring,115,46'; + put '44.723,-110.358,Hot Spring on Moss Creek,Ashton,Hotspring,115,46'; + put '44.681,-110.326,Hot Springs on Upper Sour Creek,Ashton,Hotspring,194,90'; + put '41.45,-106.804,Saratoga Hot Springs,Rawlins,Hotspring,129,54'; + put '44.671,-110.786,Secret Valley Hot Springs,Ashton,Hotspring,95,35'; + put '44.625,-110.433,Mud Volcano,Ashton,Hotspring,131,55'; + put '43.654,-108.194,Thermopolis Hot Springs,Thermopolis,Hotspring,133,56'; + put '44.985,-110.689,Hot River,Ashton,Hotspring,136,58'; + put '44.588,-110.341,Ebro Springs,Ashton,Hotspring,136,58'; + put '44.55,-110.805,Fountain Paint Pot,Ashton,Hotspring,136,58'; + put '44.169,-110.583,Snake Hot Springs,Ashton,Hotspring,136,58'; + put '44.157,-110.699,Crawfish Creek Hot Springs,Ashton,Hotspring,136,58'; + put '44.165,-110.723,Crawfish Creek Hot Springs,Ashton,Hotspring,138,59'; + put '44.711,-110.741,Chocolate Pots,Ashton,Hotspring,124,51'; + put '43.56,-109.732,Geyser (Warm Spring Creek Springs),Thermopolis,Hotspring,84,29'; + put '43.489,-109.605,Jakeys Fork Spring,Thermopolis,Hotspring,68,20'; + put '44.749,-108.188,Little Sheep Mountain Spring,Cody,Hotspring,68,20'; + put '42.249,-104.781,Warm Springs (Immigrants Washtub),Torrington,Hotspring,70,21'; + put '44.608,-108.138,Sheep Mountain Springs,Cody,Hotspring,70,21'; + put '43.583,-108.213,Wind River Canyon Spring,Thermopolis,Hotspring,72,22'; + put '42.702,-107.105,Horse Creek Springs,Casper,Hotspring,75,24'; + put '44.511,-109.156,Needle Hot Springs,Cody,Hotspring,75,24'; + put '43.52,-109.669,Little Warm Spring,Thermopolis,Hotspring,77,25'; + put '43.3,-110.775,Astoria Mineral Hot Springs,Driggs,Hotspring,99,37'; + put '43.543,-110.741,Abercrombie Warm Springs,Driggs,Hotspring,81,27'; + put '44.513,-109.115,De Maris Springs,Cody,Hotspring,97,36'; + put '42.665,-105.394,Douglas Hot Springs,Torrington,Hotspring,86,30'; + put '43.471,-110.835,Boyles Hill Springs,Driggs,Hotspring,86,30'; + put '43.282,-110.019,Kendall Warm Spring,Driggs,Hotspring,86,30'; + put '44.662,-110.768,Iron Spring,Ashton,Hotspring,86,30'; + put '42.492,-108.172,Sweetwater Station Warm Springs,Lander,Hotspring,90,32'; + put '44.742,-110.579,Wolf Lake Springs,Ashton,Hotspring,91,33'; + put '44.513,-109.129,Shoshone Hot Springs,Cody,Hotspring,95,35'; + put '42.828,-110.999,Auburn Hot Springs,Preston,Hotspring,144,62'; + put '43.639,-110.615,Kelly Warm Spring,Driggs,Hotspring,81,27'; + put '44.532,-110.796,Five Sisters Springs,Ashton,Hotspring,192,89'; + put '44.582,-110.314,Vermilion Springs,Ashton,Hotspring,140,60'; + put '44.521,-110.275,Butte Springs,Ashton,Hotspring,187,86'; + put '44.478,-110.867,Hillside Springs,Ashton,Hotspring,187,86'; + put '44.752,-110.418,Hot Springs at Sevenmile Hole,Ashton,Hotspring,189,87'; + put '44.401,-110.936,Hot Springs on Continental Divide,Ashton,Hotspring,189,87'; + put '44.769,-110.269,Rainbow Springs,Ashton,Hotspring,190,88'; + put '44.628,-110.433,Sulphur Caldron,Ashton,Hotspring,190,88'; + put '44.702,-110.767,Sylvan Springs,Ashton,Hotspring,192,89'; + put '44.529,-110.791,White Creek Group,Ashton,Hotspring,185,85'; + put '44.564,-110.869,Queens Laundry,Ashton,Hotspring,192,89'; + put '44.697,-110.375,Hot Springs on Bog Creek,Ashton,Hotspring,185,85'; + put '44.285,-110.9,Bechler River Hot Springs,Ashton,Hotspring,194,90'; + put '44.797,-110.725,Amphitheater Springs,Ashton,Hotspring,196,91'; + put '44.766,-110.429,Washburn Hot Springs,Ashton,Hotspring,196,91'; + put '44.756,-110.308,Coffee Pot Hot Springs,Ashton,Hotspring,196,91'; + put '44.591,-110.321,Hot Springs at Sulphur Hills,Ashton,Hotspring,196,91'; + put '44.556,-110.832,River Group,Ashton,Hotspring,196,91'; + put '44.422,-110.574,West Thumb Geyser Basin,Ashton,Hotspring,196,91'; + put '44.786,-110.74,Semi-Centennial Geyser,Ashton,Hotspring,198,92'; + put '44.653,-110.482,Sulphur Springs,Ashton,Hotspring,194,89'; + put '44.41,-110.953,Summit Lake Hot Springs,Ashton,Hotspring,162,72'; + put '44.761,-110.73,Bijah Spring,Ashton,Hotspring,198,92'; + put '44.781,-110.699,Whiterock Springs,Ashton,Hotspring,144,62'; + put '44.739,-110.258,Hot Spring Basin Group,Ashton,Hotspring,153,67'; + put '44.754,-110.403,Sevenmile Hole,Ashton,Hotspring,154,68'; + put '44.276,-110.636,Hot Springs on Lewis Lake,Ashton,Hotspring,154,68'; + put '44.598,-110.236,Hot Springs In Pelican Valley,Ashton,Hotspring,156,69'; + put '44.142,-110.656,South Entrance Hot Springs,Ashton,Hotspring,156,69'; + put '44.753,-110.724,"Roadside Springs, Frying Pan Sprin",Ashton,Hotspring,158,70'; + put '44.733,-110.712,Horseshoe Spring,Ashton,Hotspring,187,86'; + put '43.958,-110.696,Jackson Lake Hot Springs,Driggs,Hotspring,162,72'; + put '44.187,-110.726,Hot Springs,Ashton,Hotspring,142,61'; + put '44.967,-110.708,Mammoth Hot Springs,Ashton,Hotspring,163,73'; + put '44.475,-110.843,Morning Glory Pool,Ashton,Hotspring,163,73'; + put '44.204,-110.486,Hot Springs on Upper Snake River,Ashton,Hotspring,167,75'; + put '44.299,-110.517,"Heart Lake Geyser Basin, Middle Gr",Ashton,Hotspring,174,79'; + put '44.671,-110.29,Ponuntpa Springs Group,Ashton,Hotspring,180,82'; + put '44.244,-111.022,Boundary Creek Hot Springs,Ashton,Hotspring,181,83'; + put '44.414,-110.817,"Lone Star Geyser Basin, Footbridge",Ashton,Hotspring,183,84'; + put '44.722,-110.701,Echinus Geyser,Ashton,Hotspring,185,85'; + put '44.461,-110.854,Emerald Pool,Ashton,Hotspring,158,70'; + put ';;;;'; + put 'run;'; + put '* ServiceInit end;'; + put '* Service start;'; + put 'proc sql;'; + put 'create table areas as select distinct area'; + put 'from mydb.springs;'; + put '%webout(OPEN)'; + put '%webout(OBJ,areas)'; + put '%webout(CLOSE)'; + put '* Service end;'; +run; +%mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) +filename sascode clear; +%let service=getdata; +filename sascode temp lrecl=32767; +data _null_; +file sascode; + put '%macro mf_getuser('; + put ')/*/STORE SOURCE*/;'; + put '%local user;'; + put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; + put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; + put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; + put '%end;'; + put '%else %if %symexist(_metaperson) %then %do;'; + put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; + put '/* sometimes SAS will add @domain extension - remove for consistency */'; + put '/* but be sure to quote in case of usernames with commas */'; + put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; + put '%end;'; + put '%else %let user=&sysuserid;'; + put '%quote(&user)'; + put '%mend mf_getuser;'; + put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; + put ',engine=DATASTEP'; + put ',missing=NULL'; + put ',showmeta=NO'; + put ')/*/STORE SOURCE*/;'; + put '%local tempds colinfo fmtds i numcols;'; + put '%let numcols=0;'; + put '%if &action=OPEN %then %do;'; + put 'options nobomfile;'; + put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; + put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; + put 'run;'; + put '%end;'; + put '%else %if (&action=ARR or &action=OBJ) %then %do;'; + put '/* force variable names to always be uppercase in the JSON */'; + put 'options validvarname=upcase;'; + put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; + put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; + put 'filename _sjs1 temp lrecl=200 ;'; + put 'data _null_; file _sjs1 encoding=''utf-8'';'; + put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; + put 'run;'; + put '/* now write to _webout 1 char at a time */'; + put 'data _null_;'; + put 'infile _sjs1 lrecl=1 recfm=n;'; + put 'file &jref mod lrecl=1 recfm=n;'; + put 'input sourcechar $char1. @@;'; + put 'format sourcechar hex2.;'; + put 'put sourcechar char1. @@;'; + put 'run;'; + put 'filename _sjs1 clear;'; + put '/* grab col defs */'; + put 'proc contents noprint data=&ds'; + put 'out=_data_(keep=name type length format formatl formatd varnum label);'; + put 'run;'; + put '%let colinfo=%scan(&syslast,2,.);'; + put 'proc sort data=&colinfo;'; + put 'by varnum;'; + put 'run;'; + put '/* move meta to mac vars */'; + put 'data _null_;'; + put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; + put 'set &colinfo end=last nobs=nobs;'; + put 'name=upcase(name);'; + put '/* fix formats */'; + put 'if type=2 or type=6 then do;'; + put 'typelong=''char'';'; + put 'length fmt $49.;'; + put 'if format='''' then fmt=cats(''$'',length,''.'');'; + put 'else if formatl=0 then fmt=cats(format,''.'');'; + put 'else fmt=cats(format,formatl,''.'');'; + put 'newlen=max(formatl,length);'; + put 'end;'; + put 'else do;'; + put 'typelong=''num'';'; + put 'if format='''' then fmt=''best.'';'; + put 'else if formatl=0 then fmt=cats(format,''.'');'; + put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; + put 'else fmt=cats(format,formatl,''.'',formatd);'; + put '/* needs to be wide, for datetimes etc */'; + put 'newlen=max(length,formatl,24);'; + put 'end;'; + put '/* 32 char unique name */'; + put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; + put 'call symputx(cats(''name'',_n_),name,''l'');'; + put 'call symputx(cats(''newname'',_n_),newname,''l'');'; + put 'call symputx(cats(''len'',_n_),newlen,''l'');'; + put 'call symputx(cats(''length'',_n_),length,''l'');'; + put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; + put 'call symputx(cats(''type'',_n_),type,''l'');'; + put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; + put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; + put 'run;'; + put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; + put '%if &engine=PROCJSON %then %do;'; + put '%if &missing=STRING %then %do;'; + put '%put &sysmacroname: Special Missings not supported in proc json.;'; + put '%put &sysmacroname: Switching to DATASTEP engine;'; + put '%goto datastep;'; + put '%end;'; + put 'data &tempds;set &ds;'; + put '%if &fmt=N %then format _numeric_ best32.;;'; + put '/* PRETTY is necessary to avoid line truncation in large files */'; + put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; + put 'proc json out=_sjs2 pretty'; + put '%if &action=ARR %then nokeys ;'; + put ';export &tempds / nosastags fmtnumeric;'; + put 'run;'; + put '/* send back to webout */'; + put 'data _null_;'; + put 'infile _sjs2 lrecl=1 recfm=n;'; + put 'file &jref mod lrecl=1 recfm=n;'; + put 'input sourcechar $char1. @@;'; + put 'format sourcechar hex2.;'; + put 'put sourcechar char1. @@;'; + put 'run;'; + put 'filename _sjs2 clear;'; + put '%end;'; + put '%else %if &engine=DATASTEP %then %do;'; + put '%datastep:'; + put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; + put '%then %do;'; + put '%put &sysmacroname: &ds NOT FOUND!!!;'; + put '%return;'; + put '%end;'; + put '%if &fmt=Y %then %do;'; + put 'data _data_;'; + put '/* rename on entry */'; + put 'set &ds(rename=('; + put '%do i=1 %to &numcols;'; + put '&&name&i=&&newname&i'; + put '%end;'; + put '));'; + put '%do i=1 %to &numcols;'; + put 'length &&name&i $&&len&i;'; + put '%if &&typelong&i=num %then %do;'; + put '&&name&i=left(put(&&newname&i,&&fmt&i));'; + put '%end;'; + put '%else %do;'; + put '&&name&i=put(&&newname&i,&&fmt&i);'; + put '%end;'; + put 'drop &&newname&i;'; + put '%end;'; + put 'if _error_ then call symputx(''syscc'',1012);'; + put 'run;'; + put '%let fmtds=&syslast;'; + put '%end;'; + put 'proc format; /* credit yabwon for special null removal */'; + put 'value bart (default=40)'; + put '%if &missing=NULL %then %do;'; + put '._ - .z = null'; + put '%end;'; + put '%else %do;'; + put '._ = [quote()]'; + put '. = null'; + put '.a - .z = [quote()]'; + put '%end;'; + put 'other = [best.];'; + put 'data &tempds;'; + put 'attrib _all_ label='''';'; + put '%do i=1 %to &numcols;'; + put '%if &&typelong&i=char or &fmt=Y %then %do;'; + put 'length &&name&i $32767;'; + put 'format &&name&i $32767.;'; + put '%end;'; + put '%end;'; + put '%if &fmt=Y %then %do;'; + put 'set &fmtds;'; + put '%end;'; + put '%else %do;'; + put 'set &ds;'; + put '%end;'; + put 'format _numeric_ bart.;'; + put '%do i=1 %to &numcols;'; + put '%if &&typelong&i=char or &fmt=Y %then %do;'; + put 'if findc(&&name&i,''"\''!!''0A0D09000E0F01021011''x) then do;'; + put '&&name&i=''"''!!trim('; + put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; + put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; + put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; + put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; + put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; + put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; + put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; + put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; + put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; + put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; + put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; + put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; + put '))))))))))))!!''"'';'; + put 'end;'; + put 'else &&name&i=quote(cats(&&name&i));'; + put '%end;'; + put '%end;'; + put 'run;'; + put 'filename _sjs3 temp lrecl=131068 ;'; + put 'data _null_;'; + put 'file _sjs3 encoding=''utf-8'';'; + put 'if _n_=1 then put "[";'; + put 'set &tempds;'; + put 'if _n_>1 then put "," @; put'; + put '%if &action=ARR %then "[" ; %else "{" ;'; + put '%do i=1 %to &numcols;'; + put '%if &i>1 %then "," ;'; + put '%if &action=OBJ %then """&&name&i"":" ;'; + put '"&&name&i"n /* name literal for reserved variable names */'; + put '%end;'; + put '%if &action=ARR %then "]" ; %else "}" ; ;'; + put '/* close out the table */'; + put 'data _null_;'; + put 'file _sjs3 mod encoding=''utf-8'';'; + put 'put '']'';'; + put 'run;'; + put 'data _null_;'; + put 'infile _sjs3 lrecl=1 recfm=n;'; + put 'file &jref mod lrecl=1 recfm=n;'; + put 'input sourcechar $char1. @@;'; + put 'format sourcechar hex2.;'; + put 'put sourcechar char1. @@;'; + put 'run;'; + put 'filename _sjs3 clear;'; + put '%end;'; + put 'proc sql;'; + put 'drop table &colinfo, &tempds;'; + put '%if &showmeta=YES %then %do;'; + put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; + put 'data _null_;'; + put 'file _sjs4;'; + put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; + put 'do i=1 to &numcols;'; + put 'name=quote(trim(symget(cats(''name'',i))));'; + put 'format=quote(trim(symget(cats(''fmt'',i))));'; + put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; + put 'length=quote(trim(symget(cats(''length'',i))));'; + put 'type=quote(trim(symget(cats(''typelong'',i))));'; + put 'if i>1 then put "," @@;'; + put 'put name '':{"format":'' format '',"label":'' label'; + put ''',"length":'' length '',"type":'' type ''}'';'; + put 'end;'; + put 'put ''}}'';'; + put 'run;'; + put '/* send back to webout */'; + put 'data _null_;'; + put 'infile _sjs4 lrecl=1 recfm=n;'; + put 'file &jref mod lrecl=1 recfm=n;'; + put 'input sourcechar $char1. @@;'; + put 'format sourcechar hex2.;'; + put 'put sourcechar char1. @@;'; + put 'run;'; + put 'filename _sjs4 clear;'; + put '%end;'; + put '%end;'; + put '%else %if &action=CLOSE %then %do;'; + put 'data _null_; file &jref encoding=''utf-8'' mod ;'; + put 'put "}";'; + put 'run;'; + put '%end;'; + put '%mend mp_jsonout;'; + put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=Y,missing=NULL'; + put ',showmeta=NO'; + put ');'; + put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; + put 'sasjs_tables;'; + put '%local i tempds jsonengine;'; + put '/* see https://github.com/sasjs/core/issues/41 */'; + put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; + put '%else %let jsonengine=DATASTEP;'; + put '%if &action=FETCH %then %do;'; + put '%if %str(&_debug) ge 131 %then %do;'; + put 'options mprint notes mprintnest;'; + put '%end;'; + put '%let _webin_file_count=%eval(&_webin_file_count+0);'; + put '/* now read in the data */'; + put '%do i=1 %to &_webin_file_count;'; + put '%if &_webin_file_count=1 %then %do;'; + put '%let _webin_fileref1=&_webin_fileref;'; + put '%let _webin_name1=&_webin_name;'; + put '%end;'; + put 'data _null_;'; + put 'infile &&_webin_fileref&i termstr=crlf;'; + put 'input;'; + put 'call symputx(''input_statement'',_infile_);'; + put 'putlog "&&_webin_name&i input statement: " _infile_;'; + put 'stop;'; + put 'data &&_webin_name&i;'; + put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; + put 'input &input_statement;'; + put '%if %str(&_debug) ge 131 %then %do;'; + put 'if _n_<20 then putlog _infile_;'; + put '%end;'; + put 'run;'; + put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; + put '%end;'; + put '%end;'; + put '%else %if &action=OPEN %then %do;'; + put '/* fix encoding */'; + put 'OPTIONS NOBOMFILE;'; + put '/**'; + put '* check xengine type to avoid the below err message:'; + put '* > Function is only valid for filerefs using the CACHE access method.'; + put '*/'; + put 'data _null_;'; + put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; + put 'if xengine=''STREAM'' then do;'; + put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; + put 'end;'; + put 'run;'; + put '/* setup json */'; + put 'data _null_;file &fref encoding=''utf-8'';'; + put '%if %str(&_debug) ge 131 %then %do;'; + put 'put ''>>weboutBEGIN<<'';'; + put '%end;'; + put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; + put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; + put 'run;'; + put '%end;'; + put '%else %if &action=ARR or &action=OBJ %then %do;'; + put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; + put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta'; + put ')'; + put '%end;'; + put '%else %if &action=CLOSE %then %do;'; + put '/* To avoid issues with _webout on EBI we use a temporary file */'; + put 'filename _sjsref temp lrecl=131068;'; + put '%if %str(&_debug) ge 131 %then %do;'; + put '/* if debug mode, send back first 10 records of each work table also */'; + put 'options obs=10;'; + put 'data;run;%let tempds=%scan(&syslast,2,.);'; + put 'ods output Members=&tempds;'; + put 'proc datasets library=WORK memtype=data;'; + put '%local wtcnt;%let wtcnt=0;'; + put 'data _null_;'; + put 'set &tempds;'; + put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; + put 'i+1;'; + put 'call symputx(cats(''wt'',i),name,''l'');'; + put 'call symputx(''wtcnt'',i,''l'');'; + put 'data _null_; file _sjsref mod encoding=''utf-8'';'; + put 'put ",""WORK"":{";'; + put '%do i=1 %to &wtcnt;'; + put '%let wt=&&wt&i;'; + put 'data _null_; file _sjsref mod encoding=''utf-8'';'; + put 'dsid=open("WORK.&wt",''is'');'; + put 'nlobs=attrn(dsid,''NLOBS'');'; + put 'nvars=attrn(dsid,''NVARS'');'; + put 'rc=close(dsid);'; + put 'if &i>1 then put '',''@;'; + put 'put " ""&wt"" : {";'; + put 'put ''"nlobs":'' nlobs;'; + put 'put '',"nvars":'' nvars;'; + put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=YES)'; + put 'data _null_; file _sjsref mod encoding=''utf-8'';'; + put 'put "}";'; + put '%end;'; + put 'data _null_; file _sjsref mod encoding=''utf-8'';'; + put 'put "}";'; + put 'run;'; + put '%end;'; + put '/* close off json */'; + put 'data _null_;file _sjsref mod encoding=''utf-8'';'; + put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; + put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; + put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; + put 'put ",""_DEBUG"" : ""&_debug"" ";'; + put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; + put 'put ",""_METAUSER"": " _METAUSER;'; + put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; + put 'put '',"_METAPERSON": '' _METAPERSON;'; + put 'put '',"_PROGRAM" : '' _PROGRAM ;'; + put 'put ",""SYSCC"" : ""&syscc"" ";'; + put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; + put 'syserrortext=quote(cats(symget(''SYSERRORTEXT'')));'; + put 'put '',"SYSERRORTEXT" : '' syserrortext;'; + put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; + put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; + put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; + put 'put ",""SYSSITE"" : ""&syssite"" ";'; + put 'sysvlong=quote(trim(symget(''sysvlong'')));'; + put 'put '',"SYSVLONG" : '' sysvlong;'; + put 'syswarningtext=quote(cats(symget(''SYSWARNINGTEXT'')));'; + put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; + put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; + put 'length memsize $32;'; + put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; + put 'memsize=quote(cats(memsize));'; + put 'put '',"MEMSIZE" : '' memsize;'; + put 'put "}" @;'; + put '%if %str(&_debug) ge 131 %then %do;'; + put 'put ''>>weboutEND<<'';'; + put '%end;'; + put 'run;'; + put '/* now write to _webout 1 char at a time */'; + put 'data _null_;'; + put 'infile _sjsref lrecl=1 recfm=n;'; + put 'file &fref mod lrecl=1 recfm=n;'; + put 'input sourcechar $char1. @@;'; + put 'format sourcechar hex2.;'; + put 'put sourcechar char1. @@;'; + put 'run;'; + put 'filename _sjsref clear;'; + put '%end;'; + put '%mend mm_webout;'; + put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO);'; + put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; + put ',missing=&missing'; + put ',showmeta=&showmeta'; + put ') %mend;'; + put '/* provide additional debug info */'; + put '%global _program;'; + put '%put &=syscc;'; + put '%put user=%mf_getuser();'; + put '%put pgm=&_program;'; + put '%put timestamp=%sysfunc(datetime(),datetime19.);'; + put '* Service Variables start;'; + put '* Service Variables end;'; + put '* SAS Macros start;'; + put '* SAS Macros end;'; + put '* SAS Includes start;'; + put '* SAS Includes end;'; + put '* Binary Files start;'; + put '* Binary Files end;'; + put '* ServiceInit start;'; + put 'libname mydb (work);'; + put 'data mydb.springs ;'; + put 'attrib'; + put 'Latitude length= 8'; + put 'Longitude length= 8'; + put 'Name length= $34'; + put 'Area length= $14'; + put 'Type length= $9'; + put 'Farenheit length= 8'; + put 'Celsius length= 8'; + put ';'; + put 'infile cards dsd;'; + put 'input'; + put 'Latitude'; + put 'Longitude'; + put 'Name :$char.'; + put 'Area :$char.'; + put 'Type :$char.'; + put 'Farenheit'; + put 'Celsius'; + put ';'; + put 'missing a b c d e f g h i j k l m n o p q r s t u v w x y z _;'; + put 'datalines4;'; + put '51.925,-177.16,Fumaroles on Kanaga Island,Adak,Hotspring,219,104'; + put '65.858,-164.71,Serpentine Hot Springs,Bendeleben,Hotspring,171,77'; + put '53.851,-166.918,Hot Springs Near Makushin Volcano,Unalaska,Hotspring,H,H'; + put '53.877,-166.448,Hot Springs Near Summer Bay,Unalaska,Hotspring,H,H'; + put '52.27,-174.042,Hot Springs on Atka Island,Atka,Hotspring,H,H'; + put '52.34,-174.26,Hot Springs on Atka Island,Atka,Hotspring,H,H'; + put '52.358,-172.317,Hot Spring on Seguam Island,Seguam,Hotspring,H,H'; + put '52.84,-169.9,Chuginadak Hot Springs,Samalga Island,Hotspring,H,H'; + put '52.96,-169.71,Hot Spring on Kagamil Island,Samalga Island,Hotspring,H,H'; + put '51.94,-178.5,Hot Spring on Little Sitkin Island,Rat Islands,Hotspring,H,H'; + put '51.963,-178.491,Fumaroles on Little Sitkin Island,Rat Islands,Hotspring,H,H'; + put '51.775,-178.793,Fumaroles on Gareloi Island,Gareloi Island,Hotspring,H,H'; + put '53.207,-168.445,Hot Springs Near Geyser Bight,Umnak,Hotspring,H,H'; + put '53.892,-166.93,Makushin Volcano Fumaroles,Unalaska,Hotspring,310,154'; + put '54.9,-162.885,Hot Spring on Amagat Island,False Pass,Hotspring,H,H'; + put '53.213,-168.463,Hot Springs Near Geyser Bight,Umnak,Hotspring,216,102'; + put '53.223,-168.477,Hot Springs Near Geyser Bight,Umnak,Hotspring,214,101'; + put '53.443,-168.092,Thermal Springs In Okmok Caldera,Umnak,Hotspring,212,100'; + put '52.042,-176.108,Hot Springs on Great Sitkin Island,Adak,Hotspring,210,99'; + put '55.983,-131.661,Bailey Hot Spring,Ketchikan,Hotspring,198,92'; + put '53.242,-168.365,Hot Springs Near Hot Springs Cove,Umnak,Hotspring,192,89'; + put '54.157,-165.85,Hot Springs Near Hot Springs Bay,Unimak,Hotspring,181,83'; + put '58.033,-136.017,Hot Springs North End Tenakee Inle,Mt. Fairweathe,Hotspring,180,82'; + put '65.093,-164.922,Pilgrim Springs,Bendeleben,Hotspring,178,81'; + put '57.831,-156.513,W Ukinek Spring,Ugashik,Hotspring,178,81'; + put '65.459,-153.312,Little Melozitna Hot Springs,Melozitna,Hotspring,176,80'; + put '51.81,-177.79,Hot Spring on Tanaga Island,Adak,Hotspring,H,H'; + put '65.233,-144.483,Hot Springs on Big Windy Creek,Circle,Hotspring,H,H'; + put '55.334,-162.137,Hot Spring at West End Emmons Lake,Cold Bay,Hotspring,68,20'; + put '66.197,-154.006,Tunalkten Lake Hot Spring,Hughes,Hotspring,.,.'; + put '67.403,-153.883,Hot Spring Near Arrigetch Peaks,Survey Pass,Hotspring,W,W'; + put '65.047,-142.848,Hot Spring on Flat Creek,Charley River,Hotspring,W,W'; + put '63.683,-151.233,Hot Springs Near Glacier,Mt. Mckinley,Hotspring,W,W'; + put '63.883,-150.717,Hot Springs East of Diamond,Mt. Mckinley,Hotspring,W,W'; + put '62.45,-157.933,Hot Spring Near Flat,Iditarod,Hotspring,W,W'; + put '60.837,-142.42,Hot Spring on Twelvemile Creek,Bering Glacier,Hotspring,W,W'; + put '56.58,-132.18,South Stikine Spring,Petersburg,Hotspring,W,W'; + put '52.87,-173.13,Hot Spring on Attu Island,Attu,Hotspring,W,W'; + put '65.908,-154.993,Deniktow Ridge Hot Springs,Melozitna,Hotspring,H,H'; + put '53.95,-168.037,Hot Springs on Bogoslof Island,Umnak,Hotspring,H,H'; + put '65.45,-150,Hot Spring Near Little Minook Cr,Tanana,Hotspring,H,H'; + put '51.967,-178.444,Fumaroles on Little Sitkin Island,Rat Islands,Hotspring,H,H'; + put '64.002,-156.3,Hot Spring on Tributary of Innoko,Nulato,Hotspring,H,H'; + put '61.058,-160.692,Hot Spring Near Tuluksak River,Russian Missio,Hotspring,H,H'; + put '61.363,-157.733,Hot Springs on Upper Chuilnuk Rive,Sleetmute,Hotspring,H,H'; + put '61.267,-151.238,Hot Lake In Bottom of Crater Peak,Tyonek,Hotspring,H,H'; + put '58.24,-155.09,Hot Spring Near Katmai Pass,Mt. Katmai,Hotspring,H,H'; + put '58.27,-154.89,Hot Springs Near Mt Katmai,Mt. Katmai,Hotspring,H,H'; + put '58.92,-153.98,Hot Spring West of Cape Douglas,Afognak,Hotspring,H,H'; + put '55.368,-161.961,Fumarole,Port Moller,Hotspring,H,H'; + put '54.18,-165.41,Hot Springs on Akun Island,Unimak,Hotspring,H,H'; + put '54.23,-165.66,Hot Springs on Akun Island,Unimak,Hotspring,H,H'; + put '54.66,-164.55,Hot Spring on Unimak Island,Unimak,Hotspring,H,H'; + put '65.97,-154.033,Pocahontas Hot Springs,Melozitna,Hotspring,H,H'; + put '65.216,-149.993,Hutlinana Hot Springs,Livengood,Hotspring,109,43'; + put '57.085,-134.839,Baranof Warm Springs,Sitka,Hotspring,124,51'; + put '67.283,-155.067,Reed River Hot Spring,Survey Pass,Hotspring,122,50'; + put '66.15,-157.117,Hot Springs Near South Bm,Shungnak,Hotspring,122,50'; + put '66.233,-157.583,Hot Springs on Hawk River,Shungnak,Hotspring,122,50'; + put '65.81,-151.237,Kilo Hot Spring,Tanana,Hotspring,122,50'; + put '56.717,-132.005,Chief Shakes Hot Springs,Petersburg,Hotspring,122,50'; + put '69.33,-144.044,Okpilak Springs,Mt. Michelson,Hotspring,119,49'; + put '65.367,-161.25,Granite Mountain Hot Springs,Candle,Hotspring,120,49'; + put '57.644,-135.333,Nylen Hot Springs,Sitka,Hotspring,120,49'; + put '65.963,-150.919,Ray River Hot Spring,Tanana,Hotspring,117,47'; + put '64.924,-154.837,Horner Hot Springs,Ruby,Hotspring,117,47'; + put '65.267,-155.28,Hot Springs Near Dulbi River,Melozitna,Hotspring,126,52'; + put '57.807,-136.341,White Sulphur Springs (Hooniah H S,Sitka,Hotspring,111,44'; + put '57.781,-135.217,Tenakee Hot Springs,Sitka,Hotspring,109,43'; + put '52.19,-174.25,Hot Springs on Atka Island,Atka,Hotspring,167,75'; + put '55.334,-133.641,Dalton (Craig) Hot Springs,Craig,Hotspring,109,43'; + put '51.944,-178.547,Fumaroles on Little Sitkin Island,Rat Islands,Hotspring,H,H'; + put '57.771,-135.82,Hot Spring North Arm Peril Strait,Sitka,Hotspring,100,38'; + put '53.848,-166.873,Hot Springs Near Makushin Volcano,Unalaska,Hotspring,94,34'; + put '69.627,-146.027,Red Hill Spring,Mt. Michelson,Hotspring,91,33'; + put '62.081,-145.007,Upper Klawasi Warm Springs,Gulkana,Hotspring,86,30'; + put '62.058,-145.222,Mineral Spring (Lower Klawasi Cone,Gulkana,Hotspring,82,28'; + put '56.68,-131.882,Barnes Lake Hot Springs,Bradfield Cana,Hotspring,79,26'; + put '56.928,-158.12,Surprise Lake Hot Spring,Chignik,Hotspring,73,23'; + put '56.667,-132.28,Twin Lakes Hot Springs,Petersburg,Hotspring,70,21'; + put '66.383,-157.517,Warm Spring Near Purcell Mountain,Shungnak,Hotspring,68,20'; + put '57.348,-135.385,Hot Spring Near Fish Bay,Sitka,Hotspring,117,47'; + put '65.983,-150.56,Hot Springs on Lower Ray River,Tanana,Hotspring,142,61'; + put '55.863,-160.493,Hot Spring Near Port Moller,Port Moller,Hotspring,160,71'; + put '53.253,-168.358,Hot Springs Near Hot Springs Cove,Umnak,Hotspring,158,70'; + put '51.97,-176.61,Hot Springs on Adak Island,Adak,Hotspring,154,68'; + put '65.053,-146.057,Chena Hot Springs,Circle,Hotspring,153,67'; + put '58.37,-137.09,Hot Springs Near Icy Point,Mt. Fairweathe,Hotspring,153,67'; + put '56.836,-135.374,Goddard Hot Springs,Port Alexander,Hotspring,153,67'; + put '66.342,-150.85,Kanuti Hot Springs,Bettles,Hotspring,151,66'; + put '64.85,-162.3,Clear Creek Hot Springs,Solomon,Hotspring,149,65'; + put '53.233,-168.3,Hot Spring on Umnak Island,Umnak,Hotspring,149,65'; + put '61.2,-159.863,Hot Springs Near Ophir Creek,Russian Missio,Hotspring,145,63'; + put '57.865,-156.499,Gas Rocks Hot Spring,Ugashik,Hotspring,127,53'; + put '51.762,-178.77,Fumaroles on Gareloi Island,Gareloi Island,Hotspring,144,62'; + put '66.367,-156.767,Hot Springs Near Division Bm,Shungnak,Hotspring,140,60'; + put '64.7,-162.467,Hot Spring Near Kwiniuk River,Solomon,Hotspring,106,41'; + put '65.274,-148.847,Tolovana Hot Springs,Livengood,Hotspring,140,60'; + put '55.933,-131.559,Bell Island Hot Springs,Ketchikan,Hotspring,165,74'; + put '57.178,-157.015,Hot Spring Near Mother Goose Lake,Ugashik,Hotspring,138,59'; + put '65.483,-144.637,Circle Hot Springs,Circle,Hotspring,135,57'; + put '56.233,-131.267,Bradfield Canal Hot Springs,Bradfield Cana,Hotspring,135,57'; + put '65.006,-150.633,Manley Hot Springs,Tanana,Hotspring,133,56'; + put '65.129,-154.692,Melozi (Melozitna) Springs,Melozitna,Hotspring,131,55'; + put '66.217,-149.547,Dall Hot Springs,Beaver,Hotspring,129,54'; + put '55.217,-162.483,Hot Springs East of Cold Bay,Cold Bay,Hotspring,129,54'; + put '65.217,-162.9,Hot Springs Near Lava Creek,Bendeleben,Hotspring,127,53'; + put '54.944,-163.251,Hot Springs Near Morzhovoi,False Pass,Hotspring,145,63'; + put '36.48,-91.053,Warm Springs,Poplar Bluff,Hotspring,82,28'; + put '34.384,-93.607,Caddo Gap Springs,Little Rock,Hotspring,95,35'; + put '34.321,-93.739,Spring on Redland Mountain,Little Rock,Hotspring,77,25'; + put '34.406,-93.908,Spring on Little Missouri River,Little Rock,Hotspring,74,23'; + put '34.542,-93.024,Big Chalybeate Spring,Little Rock,Hotspring,79,26'; + put '34.513,-93.053,Hot Springs,Little Rock,Hotspring,147,64'; + put '33.008,-109.778,Grapevine Spring,Clifton,Hotspring,91,33'; + put '32.984,-113.324,Agua Caliente Springs,Ajo,Hotspring,102,39'; + put '34.563,-113.497,Kaiser Hot Spring,Prescott,Hotspring,99,37'; + put '34.076,-111.708,Spring (Hot),Holbrook,Hotspring,99,37'; + put '33.17,-110.528,Coolidge Dam Warm Spring,Mesa,Hotspring,99,37'; + put '34.695,-113.572,Cofer Hot Spring,Prescott,Hotspring,97,36'; + put '33.209,-110.818,Pioneer Spring,Mesa,Hotspring,91,33'; + put '33.988,-112.362,Castle Hot Springs,Phoenix,Hotspring,115,46'; + put '32.345,-110.247,Warm Springs,Tucson,Hotspring,91,33'; + put '36.196,-113.081,Lava Warm Springs,Grand Canyon,Hotspring,90,32'; + put '33.068,-109.975,Warm Spring,Clifton,Hotspring,90,32'; + put '31.943,-113.013,Quitobaquito Springs,Lukeville,Hotspring,90,32'; + put '31.695,-110.963,Agua Caliente Spring,Nogales,Hotspring,90,32'; + put '33.075,-109.298,Seep,Clifton,Hotspring,95,35'; + put '34.357,-111.71,Verde Hot Springs,Holbrook,Hotspring,104,40'; + put '32.998,-109.901,Indian Hot Springs,Silver City,Hotspring,118,48'; + put '33.669,-111.165,Roosevelt Dam Springs,Mesa,Hotspring,118,48'; + put '32.336,-110.24,Hookers Hot Springs,Tucson,Hotspring,127,53'; + put '33.4,-109.152,Hannah Hot Spring,Clifton,Hotspring,133,56'; + put '33.08,-109.303,Hot Spring,Clifton,Hotspring,138,59'; + put '32.741,-114.068,Radium Hot Springs,El Centro,Hotspring,140,60'; + put '32.971,-109.35,Gillard Hot Springs,Silver City,Hotspring,180,82'; + put '35.984,-114.742,Hot Spring,Kingman,Hotspring,H,H'; + put '33.78,-110.317,Warm Spring,Mesa,Hotspring,W,W'; + put '36.418,-113.956,Pakoon Springs,Grand Canyon,Hotspring,86,30'; + put '33.493,-112.94,El Dorado Hot Springs,Phoenix South,Hotspring,112,44'; + put '34.896,-114.308,Oatman Warm Springs,Needles,Hotspring,91,33'; + put '33.055,-109.295,Clifton Hot Springs,Clifton,Hotspring,102,39'; + put '34.445,-112.693,Spring,Prescott,Hotspring,72,22'; + put '32.337,-110.708,Mercer Spring,Tucson,Hotspring,77,25'; + put '34.649,-111.744,Soda Spring,Holbrook,Hotspring,75,24'; + put '33.253,-110.703,Spring,Mesa,Hotspring,75,24'; + put '31.362,-109.265,Astin Spring,Douglas,Hotspring,75,24'; + put '35.169,-113.851,Frost Mine Spring,Williams,Hotspring,70,21'; + put '31.673,-109.902,Antelope Spring,Douglas,Hotspring,79,26'; + put '35.213,-113.425,Casa Grande Spring,Williams,Hotspring,72,22'; + put '33.51,-110.403,Cassadore Spring,Mesa,Hotspring,73,23'; + put '34.32,-111.453,Tonto Natural Bridge Spring,Holbrook,Hotspring,72,22'; + put '34.405,-111.602,Spring,Holbrook,Hotspring,72,22'; + put '34.436,-109.402,Salado Springs,Saint Johns,Hotspring,72,22'; + put '31.592,-109.51,Lewis Spring,Douglas,Hotspring,68,20'; + put '33.046,-109.44,Eagle Creek Hot Springs,Clifton,Hotspring,97,36'; + put '36.509,-111.852,Colorado Pool,Marble Canyon,Hotspring,86,30'; + put '33.062,-109.482,Warm Spring,Clifton,Hotspring,73,23'; + put '31.637,-110.703,Monkey Spring,Nogales,Hotspring,82,28'; + put '32.281,-110.73,Agua Caliente,Tucson,Hotspring,86,30'; + put '32.327,-110.228,N-O Spring,Tucson,Hotspring,73,23'; + put '32.983,-110.373,Warm Spring,Tucson,Hotspring,79,26'; + put '33.152,-110.639,Mescal Warm Spring,Mesa,Hotspring,84,29'; + put '33.163,-110.662,Spring,Mesa,Hotspring,82,28'; + put '35.077,-113.267,Trout Creek Spring,Williams,Hotspring,81,27'; + put '33.438,-110.213,Warm Springs,Mesa,Hotspring,86,30'; + put '36.895,-113.913,Springs,Grand Canyon,Hotspring,79,26'; + put '35.96,-114.725,Hot Spring,Kingman,Hotspring,86,30'; + put '34.925,-114.221,Caliche Spring,Needles,Hotspring,79,26'; + put '33.915,-112.332,Mitchell Spring,Phoenix,Hotspring,79,26'; + put '33.831,-110.574,Salt Banks,Mesa,Hotspring,78,26'; + put '34.91,-113.608,Tom Brown Warm Spring,Prescott,Hotspring,82,28'; + put '38.873,-122.689,Seigler Springs,Santa Rosa,Hotspring,126,52'; + put '36.814,-117.763,Palm Spring,Death Valley,Hotspring,120,49'; + put '34.498,-119.341,Stingleys Hot Springs,Los Angeles,Hotspring,123,51'; + put '33.67,-117.325,"Wrenden Hot Sprs, Elsinore Hot Spr",Santa Ana,Hotspring,125,52'; + put '37.253,-118.373,Keough Hot Springs,Mariposa,Hotspring,124,51'; + put '36.229,-118.302,Jordan Hot Springs,Fresno,Hotspring,124,51'; + put '34.502,-119.346,Vickers Hot Springs,Los Angeles,Hotspring,124,51'; + put '36.123,-121.64,Slates Hot Springs,Santa Cruz,Hotspring,122,50'; + put '35.881,-118.67,California Hot Springs,Bakersfield,Hotspring,122,50'; + put '38.788,-122.777,Sulphur Creek,Santa Rosa,Hotspring,120,49'; + put '37.648,-118.806,Hot Springs,Mariposa,Hotspring,129,54'; + put '36.703,-120.86,Mercey Hot Springs,Santa Cruz,Hotspring,119,48'; + put '33.589,-117.511,San Juan Hot Springs,Santa Ana,Hotspring,120,49'; + put '38.785,-122.655,Harbin Springs,Santa Rosa,Hotspring,120,49'; + put '37.677,-118.79,Dehy Hot Spring,Mariposa,Hotspring,134,57'; + put '39.183,-122.7,Bartlett Springs,Ukiah,Hotspring,144,62'; + put '36.234,-121.546,Tassajara Hot Springs,Santa Cruz,Hotspring,144,62'; + put '36.144,-120.555,Coalinga Mineral Springs,Santa Cruz,Hotspring,112,44'; + put '39.033,-122.445,Jones Fountain of Life Spring,Ukiah,Hotspring,142,61'; + put '35.575,-118.534,"Miracle Hot Sprs, Hobo Hot Sprs",Bakersfield,Hotspring,119,48'; + put '33.284,-116.631,Warner Hot Spring,Santa Ana,Hotspring,138,59'; + put '38.237,-119.326,Buckeye Hot Spring,Walker Lake,Hotspring,140,60'; + put '41.266,-120.08,Hot Springs (Menlo Baths),Alturas,Hotspring,135,57'; + put '33.753,-117.495,Glen Ivy Hot Springs,Santa Ana,Hotspring,131,55'; + put '37.802,-118.532,Benton Hot Springs,Mariposa,Hotspring,134,57'; + put '38.691,-123.024,Skaggs Springs,Santa Rosa,Hotspring,135,56'; + put '35.62,-118.473,Scovern Hot Springs,Bakersfield,Hotspring,133,56'; + put '34.538,-119.56,Agua Caliente Spring,Los Angeles,Hotspring,133,56'; + put '33.558,-117.154,Murrietta Hot Springs,Santa Ana,Hotspring,132,56'; + put '39.226,-120.01,Brockway Hot Springs,Chico,Hotspring,131,55'; + put '41.036,-121.926,Hunt Hot Spring,Alturas,Hotspring,136,58'; + put '34.582,-119.044,Willett Hot Springs,Los Angeles,Hotspring,108,42'; + put '37.234,-118.881,Blaney Meadows Hot Springs,Mariposa,Hotspring,109,43'; + put '36.477,-118.404,Kern Hot Spring,Fresno,Hotspring,109,43'; + put '36.806,-117.771,Lower Warm Springs,Death Valley,Hotspring,110,43'; + put '34.482,-119.302,Matilija Hot Springs,Los Angeles,Hotspring,109,43'; + put '34.537,-119.879,San Marcos Hot Spring,Los Angeles,Hotspring,110,43'; + put '33.896,-117.057,Eden Hot Springs,Santa Ana,Hotspring,109,43'; + put '39.573,-120.348,Campbell Hot Springs,Chico,Hotspring,111,44'; + put '38.994,-122.742,Horseshoe Spring,Santa Rosa,Hotspring,108,42'; + put '33.969,-116.942,Highland Springs,Santa Ana,Hotspring,112,44'; + put '34.34,-117.173,"Warm Spring, Hot Spring",San Bernardino,Hotspring,108,42'; + put '41.219,-120.066,Squaw Baths,Alturas,Hotspring,106,41'; + put '40.142,-120.935,Indian Valley Hot Springs,Susanville,Hotspring,106,41'; + put '39.292,-122.821,Crabtree Hot Springs,Ukiah,Hotspring,106,41'; + put '37.108,-121.478,Gilroy Hot Springs,San Jose,Hotspring,106,41'; + put '39.227,-123.362,Orrs Springs,Ukiah,Hotspring,104,40'; + put '38.773,-122.705,Anderson Springs,Santa Rosa,Hotspring,108,42'; + put '38.858,-122.671,Howard Springs,Santa Rosa,Hotspring,113,45'; + put '34.461,-119.637,Montecito Hot Springs,Los Angeles,Hotspring,118,48'; + put '33.551,-117.167,Temecula Hot Springs,Santa Ana,Hotspring,116,47'; + put '33.835,-116.988,Gilman Hot Springs,Santa Ana,Hotspring,117,47'; + put '37.618,-119.074,Reds Meadow Hot Springs,Mariposa,Hotspring,115,46'; + put '35.528,-118.665,Democrat Hot Springs,Bakersfield,Hotspring,115,46'; + put '33.731,-118.348,Whites Point Hot Springs,Long Beach,Hotspring,115,46'; + put '37.532,-119.025,Fish Creek Hot Springs,Mariposa,Hotspring,110,43'; + put '39.032,-122.432,"Blank Spring, Manzanita Mine Sprs",Ukiah,Hotspring,112,45'; + put '37.327,-119.018,Mono Hot Springs,Mariposa,Hotspring,109,43'; + put '38.225,-119.217,The Hot Springs,Walker Lake,Hotspring,113,45'; + put '35.727,-118.408,Hot Spring,Bakersfield,Hotspring,113,45'; + put '41.6,-120.088,Leonards Hot Springs,Alturas,Hotspring,144,62'; + put '38.874,-123.518,Point Arena Hot Springs,Santa Rosa,Hotspring,111,44'; + put '41.126,-121.028,Kellog Hot Springs,Alturas,Hotspring,172,78'; + put '35.558,-118.612,Delonegha Hot Springs,Bakersfield,Hotspring,112,44'; + put '35.871,-116.23,Tecopa Hot Springs,Trona,Hotspring,118,48'; + put '41.86,-120.158,Fort Bidwell Hot Spring,Alturas,Hotspring,113,45'; + put '41.534,-120.078,Hot Springs (Surprise Valley),Alturas,Hotspring,208,98'; + put '33.345,-115.588,Mud Volcanoes,Salton Sea,Hotspring,W,W'; + put '41.012,-121.274,Hot Springs,Alturas,Hotspring,H,H'; + put '39.922,-120.024,Zamboni Hot Springs,Chico,Hotspring,H,H'; + put '38.979,-122.659,Fumarole,Santa Rosa,Hotspring,H,H'; + put '37.622,-119.028,Fumaroles,Mariposa,Hotspring,H,H'; + put '40.364,-120.243,Hot Spring,Susanville,Hotspring,204,96'; + put '38.767,-122.748,Little Geysers,Santa Rosa,Hotspring,210,99'; + put '33.328,-115.583,Mud Volcanoes,Salton Sea,Hotspring,W,W'; + put '41.67,-120.206,Lake City Hot Springs,Alturas,Hotspring,207,97'; + put '36.036,-117.802,Devils Kitchen,Death Valley,Hotspring,207,97'; + put '36.045,-117.769,Coso Hot Springs,Death Valley,Hotspring,207,97'; + put '40.382,-121.513,Morgan Hot Spring,Susanville,Hotspring,205,96'; + put '40.421,-121.375,Terminal Geyser,Susanville,Hotspring,205,96'; + put '41.19,-120.383,West Valley Reservoir Hot Spring,Alturas,Hotspring,171,77'; + put '38.802,-122.81,The Geysers,Santa Rosa,Hotspring,214,101'; + put '35.888,-116.258,Springs,Trona,Hotspring,W,W'; + put '34.185,-117.262,"Arrowhead Springs, Waterman Hot Sp",San Bernardino,Hotspring,194,90'; + put '33.823,-116.542,Palm Springs (Agua Caliente Spring,Santa Ana,Hotspring,104,40'; + put '41.196,-120.475,Springs,Alturas,Hotspring,W,W'; + put '41.959,-120.936,Warm Spring,Alturas,Hotspring,W,W'; + put '37.929,-121.965,Springs,San Jose,Hotspring,W,W'; + put '36.83,-117.736,Upper Warm Spring,Death Valley,Hotspring,W,W'; + put '33.343,-115.573,Mud Volcanoes,Salton Sea,Hotspring,W,W'; + put '35.536,-118.651,Spring (Hot),Bakersfield,Hotspring,W,W'; + put '33.332,-115.575,Mud Volcanoes,Salton Sea,Hotspring,W,W'; + put '35.967,-116.931,Warm Spring,Trona,Hotspring,W,W'; + put '33.28,-115.592,Mud Volcanoes,Salton Sea,Hotspring,W,W'; + put '33.288,-115.575,Mud Volcanoes,Salton Sea,Hotspring,W,W'; + put '33.312,-115.577,Mud Volcanoes,Salton Sea,Hotspring,W,W'; + put '33.313,-115.605,Mud Volcanoes,Salton Sea,Hotspring,W,W'; + put '40.393,-121.507,Growler Hot Spring,Susanville,Hotspring,203,95'; + put '35.148,-118.783,Warm Spring,Bakersfield,Hotspring,W,W'; + put '41.973,-122.202,Klamath Hot Spring,Weed,Hotspring,156,69'; + put '41.143,-121.11,Bassett Hot Springs,Alturas,Hotspring,174,79'; + put '38.58,-122.575,Calistoga Hot Springs,Santa Rosa,Hotspring,172,78'; + put '37.656,-118.834,Hot Creek Springs,Mariposa,Hotspring,171,77'; + put '41.229,-121.405,Little Hot Spring,Alturas,Hotspring,169,76'; + put '37.664,-118.802,The Tub,Mariposa,Hotspring,167,75'; + put '40.355,-120.257,Wendel Hot Springs,Susanville,Hotspring,205,96'; + put '38.768,-122.717,Castle Rock Springs,Santa Rosa,Hotspring,163,73'; + put '38.245,-119.205,Travertine Hot Springs,Walker Lake,Hotspring,180,82'; + put '39.002,-122.664,Sulphur Bank,Ukiah,Hotspring,156,69'; + put '39.057,-122.475,Elgin Mine,Ukiah,Hotspring,156,69'; + put '39.039,-122.421,Wilbur Springs,Ukiah,Hotspring,153,67'; + put '40.444,-121.409,Drakesbad,Susanville,Hotspring,151,66'; + put '40.457,-121.545,Mill Creek Springs,Susanville,Hotspring,150,66'; + put '38.048,-119.081,Hot Spring,Walker Lake,Hotspring,151,66'; + put '37.647,-118.859,Casa Diablo Hot Pool,Mariposa,Hotspring,165,74'; + put '41.607,-121.523,Hot Spot,Alturas,Hotspring,191,88'; + put '40.44,-121.434,Devils Kitchen,Susanville,Hotspring,203,95'; + put '40.302,-120.195,Amedee Hot Springs,Susanville,Hotspring,203,95'; + put '36.031,-117.833,Fumarole,Death Valley,Hotspring,203,95'; + put '40.447,-121.536,"Sulphur Works, Tophet Hot Springs",Susanville,Hotspring,199,93'; + put '40.455,-121.501,Bumpass Hell,Susanville,Hotspring,199,93'; + put '37.648,-118.914,Casa Diablo Hot Springs And Geyser,Mariposa,Hotspring,199,93'; + put '37.692,-118.839,Little Hot Creek Spring,Mariposa,Hotspring,180,82'; + put '34.596,-118.998,Sespe Hot Springs,Los Angeles,Hotspring,194,90'; + put '38.348,-119.4,Fales Hot Springs,Walker Lake,Hotspring,180,82'; + put '40.434,-121.399,Boiling Springs Lake,Susanville,Hotspring,190,88'; + put '41.615,-120.102,Seyferth Hot Springs,Alturas,Hotspring,185,85'; + put '41.407,-122.197,"Hot Spring, Fumaroles",Weed,Hotspring,183,84'; + put '37.993,-119.028,Paoha Island Springs,Mariposa,Hotspring,181,83'; + put '41.025,-121.924,Big Bend Hot Springs,Alturas,Hotspring,180,82'; + put '38.699,-119.846,Grovers Hot Springs,Walker Lake,Hotspring,147,64'; + put '37.665,-118.828,Hot Creek Gorge Springs,Mariposa,Hotspring,199,93'; + put '39.43,-122.538,"Sulphur Spring, Salt Spring",Ukiah,Hotspring,75,24'; + put '38.925,-122.77,Hildebrande Spring,Santa Rosa,Hotspring,77,25'; + put '38.203,-119.118,Warm Spring,Walker Lake,Hotspring,77,25'; + put '36.938,-121.565,Sargent Estate Warm Spring,Santa Cruz,Hotspring,77,25'; + put '34.826,-116.677,Newberry Spring,San Bernardino,Hotspring,77,25'; + put '41.919,-122.369,Bogus Soda Springs,Weed,Hotspring,76,24'; + put '39.053,-122.597,Quigley Soda Spring,Ukiah,Hotspring,82,28'; + put '41.252,-120.521,Warm Spring,Alturas,Hotspring,75,24'; + put '38.85,-122.693,Pine Cone Spring,Santa Rosa,Hotspring,78,26'; + put '38.339,-122.259,Napa Vichy Springs,Santa Rosa,Hotspring,76,24'; + put '38.892,-122.533,Baker Soda Spring,Santa Rosa,Hotspring,76,24'; + put '38.897,-122.882,England Springs,Santa Rosa,Hotspring,76,24'; + put '38.916,-122.799,Carlsbad Spring,Santa Rosa,Hotspring,76,24'; + put '38.192,-120.827,Valley Springs,Sacramento,Hotspring,75,24'; + put '38.85,-120.025,Myers Warm Spring,Sacramento,Hotspring,75,24'; + put '37.708,-118.813,Hot Spring,Mariposa,Hotspring,68,20'; + put '36.122,-117.217,Warm Sulphur Springs,Death Valley,Hotspring,80,27'; + put '35.682,-116.422,Saratoga Spring,Trona,Hotspring,82,28'; + put '33.733,-114.907,Mccoy Spring,Salton Sea,Hotspring,82,28'; + put '41.484,-120.764,Spring,Alturas,Hotspring,81,27'; + put '39.657,-123.585,Jackson Valley Mud Springs,Ukiah,Hotspring,80,27'; + put '39.198,-122.505,Pseudo Complexion Spring,Ukiah,Hotspring,81,27'; + put '38.85,-122.667,Bad Creek Spring,Santa Rosa,Hotspring,81,27'; + put '32.97,-116.423,Vallecitos Spring,San Diego,Hotspring,79,26'; + put '36.765,-120.901,Spring,Santa Cruz,Hotspring,81,27'; + put '34.159,-118.499,El Encino Springs,Los Angeles,Hotspring,79,26'; + put '35.879,-116.153,Resting Spring,Trona,Hotspring,80,27'; + put '41.828,-120.917,Pothole Spring,Alturas,Hotspring,78,26'; + put '39.348,-122.668,Fouts Springs,Ukiah,Hotspring,79,26'; + put '38.519,-122.26,"Napa Rock Soda Spring, Phillips So",Santa Rosa,Hotspring,78,26'; + put '38.838,-122.653,Spiers Springs,Santa Rosa,Hotspring,79,26'; + put '35.141,-116.101,Soda Station Springs,Trona,Hotspring,75,24'; + put '37.503,-121.904,Alameda Warm Springs,San Jose,Hotspring,80,27'; + put '39.429,-123.308,Muir Springs,Ukiah,Hotspring,68,20'; + put '37.924,-122.046,Sulphur Spring,San Francisco,Hotspring,75,24'; + put '40.58,-120.265,Tipton Springs,Susanville,Hotspring,70,21'; + put '39.697,-123.478,Pinches Spring,Ukiah,Hotspring,70,21'; + put '38.755,-122.285,Zim Zim Spring,Santa Rosa,Hotspring,70,21'; + put '37.083,-121.042,Spring In Oneill Forebay,San Jose,Hotspring,70,21'; + put '37.632,-121.762,Crohare Spring,San Jose,Hotspring,70,21'; + put '33.625,-115.325,Corn Spring,Salton Sea,Hotspring,72,22'; + put '36.117,-118.776,Ward Spring,Fresno,Hotspring,70,21'; + put '34.423,-119.538,Boron Spring,Los Angeles,Hotspring,72,22'; + put '39.002,-122.498,Grizzly Spring,Ukiah,Hotspring,68,20'; + put '39.088,-122.525,Sulphur Spring,Ukiah,Hotspring,68,20'; + put '38.125,-122.188,Vallejo White Sulphur Springs,Santa Rosa,Hotspring,68,20'; + put '38.31,-122.053,Tolenas Springs,Santa Rosa,Hotspring,68,20'; + put '41.45,-120.834,Kelly Hot Spring,Alturas,Hotspring,198,92'; + put '36.512,-116.821,Nevares Springs,Death Valley,Hotspring,102,39'; + put '37.888,-118.487,Bertrand Ranch Springs,Mariposa,Hotspring,70,21'; + put '35.483,-119.917,Mize Spring,Bakersfield,Hotspring,73,23'; + put '36.698,-117.848,Little Hunter Canyon Springs,Death Valley,Hotspring,81,27'; + put '38.995,-122.642,Davis Soda Spring,Santa Rosa,Hotspring,73,23'; + put '37.432,-121.308,Salt Grass Springs,San Jose,Hotspring,73,23'; + put '37.573,-121.445,Lone Tree Mineral Spring,San Jose,Hotspring,73,23'; + put '37.638,-118.887,Chance Spring,Mariposa,Hotspring,73,23'; + put '36.295,-120.985,Sulphur Springs,Santa Cruz,Hotspring,73,23'; + put '41.16,-120.403,Warm Spring,Alturas,Hotspring,70,21'; + put '35.4,-120.25,Cameta Warm Spring,San Luis Obisp,Hotspring,73,23'; + put '37.719,-118.735,Springs,Mariposa,Hotspring,75,24'; + put '35.588,-116.359,Sheep Creek Spring,Trona,Hotspring,73,23'; + put '40.568,-120.325,Sellicks Springs,Susanville,Hotspring,72,22'; + put '38.833,-122.357,One Shot Mining Co,Santa Rosa,Hotspring,72,22'; + put '38.95,-122.572,Soda Spring In Cache Formation,Santa Rosa,Hotspring,72,22'; + put '37.635,-118.72,Springs,Mariposa,Hotspring,72,22'; + put '36.13,-118.816,Soda Spring,Fresno,Hotspring,72,22'; + put '36.773,-120.898,Iridat Spring,Santa Cruz,Hotspring,73,23'; + put '33.545,-115.654,Canyon Spring,Salton Sea,Hotspring,97,36'; + put '36.675,-116.923,Keane Wonder Spring,Death Valley,Hotspring,93,34'; + put '36.331,-121.367,Paraiso Springs (Sulphur Spring),Santa Cruz,Hotspring,98,37'; + put '35.122,-120.542,Newsom Springs,San Luis Obisp,Hotspring,99,37'; + put '34.503,-120.219,Las Cruces Hot Springs,Santa Maria,Hotspring,99,37'; + put '38.49,-122.498,St Helena White Sulphur Spring,Santa Rosa,Hotspring,97,36'; + put '35.946,-116.189,Chappo Spring,Trona,Hotspring,80,27'; + put '40.019,-121.036,Spring,Susanville,Hotspring,99,37'; + put '40.44,-121.42,Hot Springs Valley,Susanville,Hotspring,83,28'; + put '32.947,-116.305,Agua Caliente Springs,San Diego,Hotspring,101,38'; + put '39.196,-122.714,Newman Springs,Ukiah,Hotspring,94,35'; + put '37.63,-118.808,Whitmore Hot Springs,Mariposa,Hotspring,95,35'; + put '35.269,-120.851,Pecho Warm Springs,San Luis Obisp,Hotspring,95,35'; + put '33.514,-117.604,Spring,Santa Ana,Hotspring,95,35'; + put '38.958,-122.701,Riviera Beach Spring,Santa Rosa,Hotspring,93,34'; + put '36.33,-117.948,Dirty Socks Hot Spring,Death Valley,Hotspring,93,34'; + put '37.847,-121.635,Byron Hot Springs,San Jose,Hotspring,96,36'; + put '35.433,-118.478,Yates Hot Springs,Bakersfield,Hotspring,100,38'; + put '35.663,-120.692,Paso Robles Artesian Spring,San Luis Obisp,Hotspring,102,39'; + put '34.507,-119.291,Wheeler Springs,Los Angeles,Hotspring,102,39'; + put '33.8,-116.927,Soboda Hot Springs,Santa Ana,Hotspring,102,39'; + put '40.223,-122.747,Stinking Springs,Redding,Hotspring,101,38'; + put '38.8,-123.17,Hoods Hot Springs,Santa Rosa,Hotspring,100,38'; + put '37.029,-117.383,Grapevine Springs,Goldfield,Hotspring,100,38'; + put '36.084,-121.584,Dolans Hot Spring,Santa Cruz,Hotspring,98,37'; + put '36.21,-118.176,Soda Springs,Fresno,Hotspring,100,38'; + put '33.664,-117.913,Fairview Hot Spring,Santa Ana,Hotspring,96,36'; + put '35.143,-116.813,Paradise Spring,Trona,Hotspring,100,38'; + put '33.837,-117.145,Lakeview Hot Springs,Santa Ana,Hotspring,100,38'; + put '33.201,-115.577,Mud Pots,Salton Sea,Hotspring,100,38'; + put '33.212,-115.591,Mud Pots,Salton Sea,Hotspring,100,38'; + put '33.217,-115.58,Wister Mud Pot,Salton Sea,Hotspring,100,38'; + put '32.617,-116.189,Jacumba Hot Springs,San Diego,Hotspring,101,38'; + put '36.618,-121.845,Sulphur Hot Spring,Santa Cruz,Hotspring,100,38'; + put '36.495,-117.893,Springs,Death Valley,Hotspring,86,30'; + put '38.033,-118.902,Mono Basin Warm Springs,Walker Lake,Hotspring,88,31'; + put '35.908,-120.367,Table Mountain (Spring),San Luis Obisp,Hotspring,88,31'; + put '34.271,-116.838,Pan Hot Springs,San Bernardino,Hotspring,88,31'; + put '40.238,-122.11,Tuscan Springs,Redding,Hotspring,86,30'; + put '40.245,-120.007,High Rock Spring,Susanville,Hotspring,86,30'; + put '38.55,-122.72,Mark West Springs,Santa Rosa,Hotspring,88,31'; + put '43.513,-119.903,Springs at Tecolote Tunnel,Los Angeles,Hotspring,93,34'; + put '39.728,-120.547,Mclear Warm Springs,Chico,Hotspring,86,30'; + put '38.835,-122.731,Gordon Warm Springs,Santa Rosa,Hotspring,97,36'; + put '39.166,-123.159,Vichy Springs,Ukiah,Hotspring,85,29'; + put '38.936,-122.907,Highland Springs,Santa Rosa,Hotspring,84,29'; + put '37.398,-121.794,Mineral Springs,San Jose,Hotspring,84,29'; + put '33.436,-117.324,De Luz Warm Springs,Santa Ana,Hotspring,85,29'; + put '33.512,-115.827,Dos Palmas Spring,Salton Sea,Hotspring,84,29'; + put '39.022,-122.444,Abbott Mine,Ukiah,Hotspring,86,30'; + put '34.605,-118.561,Warm Spring,Los Angeles,Hotspring,92,33'; + put '41.659,-123.319,Sulphur Springs,Weed,Hotspring,84,29'; + put '38.394,-122.552,Los Guilicos Warm Springs,Santa Rosa,Hotspring,88,31'; + put '41.492,-120.7,Essex Springs,Alturas,Hotspring,91,33'; + put '38.654,-122.484,Aetna Springs,Santa Rosa,Hotspring,91,33'; + put '35.842,-117.38,Bainter Spring,Trona,Hotspring,92,33'; + put '34.228,-117.483,Tylers Bath Spring,San Bernardino,Hotspring,92,33'; + put '33.363,-117.017,Agua Tibia Spring,Santa Ana,Hotspring,92,33'; + put '41.167,-120.032,Bare Ranch Spring,Alturas,Hotspring,90,32'; + put '35.978,-116.273,Shoshone Spring,Trona,Hotspring,90,32'; + put '33.407,-116.035,Fish Springs,Santa Ana,Hotspring,90,32'; + put '35.582,-120.666,Santa Ysabel Springs (Sulphur Spr),San Luis Obisp,Hotspring,92,33'; + put '34.537,-119.613,Little Caliente Spring,Los Angeles,Hotspring,90,32'; + put '39.006,-122.787,Big Soda Spring,Ukiah,Hotspring,90,32'; + put '35.439,-119.846,Carneros Spring,Bakersfield,Hotspring,90,32'; + put '36.441,-116.829,Travertine Springs,Death Valley,Hotspring,90,32'; + put '37.88,-122.627,Rocky Point Springs,San Francisco,Hotspring,90,32'; + put '39.227,-107.224,Penny Hot Springs,Leadville,Hotspring,133,56'; + put '38.732,-106.178,Hortense Hot Spring,Montrose,Hotspring,181,83'; + put '37.4,-107.849,Tripp Hot Springs,Durango,Hotspring,111,44'; + put '40.073,-106.113,Hot Sulphur Springs,Craig,Hotspring,111,44'; + put '39.739,-105.512,Idaho Springs,Denver,Hotspring,115,46'; + put '39.552,-107.412,South Canyon Hot Springs,Leadville,Hotspring,118,48'; + put '39.548,-107.322,Glenwood Springs,Leadville,Hotspring,124,51'; + put '38.133,-107.736,Orvis Hot Spring,Montrose,Hotspring,126,52'; + put '39.017,-105.793,Hartsel Hot Springs,Denver,Hotspring,126,52'; + put '38.733,-106.162,Mount Princeton Hot Springs,Montrose,Hotspring,133,56'; + put '37.752,-108.131,Paradise Warm Spring,Cortez,Hotspring,115,46'; + put '37.747,-106.831,Wagon Wheel Gap Hot Springs,Durango,Hotspring,135,57'; + put '37.263,-107.011,Pagosa Springs,Durango,Hotspring,136,58'; + put '38.812,-106.226,Cottonwood Hot Springs,Montrose,Hotspring,136,58'; + put '38.168,-105.924,Mineral Hot Springs,Pueblo,Hotspring,140,60'; + put '40.559,-106.849,Routt Hot Springs,Craig,Hotspring,147,64'; + put '38.021,-107.672,Ouray Hot Springs,Montrose,Hotspring,156,69'; + put '38.498,-106.076,Poncha Hot Springs,Montrose,Hotspring,160,71'; + put '38.514,-106.508,Upper Waunita Hot Springs,Montrose,Hotspring,176,80'; + put '38.272,-107.1,Cebolla Hot Springs,Montrose,Hotspring,106,41'; + put '37.313,-107.344,Piedra River Hot Springs,Durango,Hotspring,108,42'; + put '38.517,-106.515,Lower Waunita Hot Springs,Montrose,Hotspring,167,75'; + put '38.816,-106.873,Ranger Hot Spring,Montrose,Hotspring,81,27'; + put '37.294,-105.784,Dexter Spring,Trinidad,Hotspring,68,20'; + put '38.634,-106.072,Browns Grotto Warm Spring,Montrose,Hotspring,73,23'; + put '39.164,-106.062,Rhodes Warm Spring,Leadville,Hotspring,75,24'; + put '38.836,-106.825,Cement Creek Hot Spring,Montrose,Hotspring,77,25'; + put '38.653,-106.056,Browns Canyon Warm Spring,Montrose,Hotspring,77,25'; + put '37.033,-106.805,Stinking Springs,Durango,Hotspring,81,27'; + put '37.747,-108.117,Geyser Warm Spring,Cortez,Hotspring,82,28'; + put '38.479,-105.891,Swissvale Warm Springs,Pueblo,Hotspring,82,28'; + put '37.751,-106.317,Shaw Springs,Durango,Hotspring,86,30'; + put '37.728,-107.054,Birdsie Warm Spring,Durango,Hotspring,86,30'; + put '37.741,-107.034,Antelope Spring,Durango,Hotspring,90,32'; + put '39.628,-107.106,Dotsero Warm Springs,Leadville,Hotspring,90,32'; + put '38.485,-105.91,Wellsville Warm Spring,Pueblo,Hotspring,91,33'; + put '38.014,-108.054,Lemon Hot Spring,Moab,Hotspring,91,33'; + put '37.391,-107.846,"Trimble Hot Spr, Stratten Warm Spr",Durango,Hotspring,97,36'; + put '38.192,-105.816,Valley View Hot Springs,Pueblo,Hotspring,99,37'; + put '38.433,-105.261,Canon City Hot Springs,Pueblo,Hotspring,104,40'; + put '39.012,-106.891,Conundrum Hot Springs,Leadville,Hotspring,100,38'; + put '37.511,-106.945,Rainbow Hot Springs,Durango,Hotspring,104,40'; + put '40.467,-107.952,Juniper Hot Springs,Craig,Hotspring,100,38'; + put '40.483,-106.827,Steamboat Springs,Craig,Hotspring,102,39'; + put '37.771,-108.091,Dunton Hot Spring,Cortez,Hotspring,108,42'; + put '37.453,-107.803,Pinkerton Hot Springs,Durango,Hotspring,90,32'; + put '39.932,-105.277,Eldorado Springs,Denver,Hotspring,79,26'; + put '27.074,-82.233,Little Salt Spring,Tampa,Hotspring,81,27'; + put '27.06,-82.261,Warm Mineral Springs (Big Salt Spr,Tampa,Hotspring,86,30'; + put '32.92,-84.438,Barker Spring,Phenix City,Hotspring,73,23'; + put '32.964,-84.499,Thundering Spring,Phenix City,Hotspring,75,24'; + put '33.018,-84.327,Taylor Spring,Atlanta,Hotspring,75,24'; + put '32.862,-84.65,Parkman Spring,Phenix City,Hotspring,77,25'; + put '33.037,-84.374,Lifsey Spring,Atlanta,Hotspring,79,26'; + put '32.893,-84.69,Warm Springs,Phenix City,Hotspring,88,31'; + put '32.873,-84.547,Tom Brown Spring,Phenix City,Hotspring,68,20'; + put '19.407,-155.277,Steam Vents,Hawaii,Hotspring,H,H'; + put '19.46,-154.847,Isaac Hale Park Spring,Hawaii,Hotspring,97,36'; + put '19.496,-154.876,Warm Vapor,Hawaii,Hotspring,W,W'; + put '19.373,-155.188,Steam Vents,Hawaii,Hotspring,H,H'; + put '19.39,-155.311,Steam Vents,Hawaii,Hotspring,H,H'; + put '19.434,-155.272,Steam Vents,Hawaii,Hotspring,H,H'; + put '19.486,-155.598,Steam Vents,Hawaii,Hotspring,H,H'; + put '19.466,-154.943,Steam Vents,Hawaii,Hotspring,H,H'; + put '19.421,-155.62,Steam Vents,Hawaii,Hotspring,H,H'; + put '19.201,-155.384,Waiwelawela Point Spring,Hawaii,Hotspring,90,32'; + put '19.593,-154.928,Akins Spring,Hawaii,Hotspring,84,29'; + put '44.721,-115.01,Thomas Creek Ranch Hot Spring,Challis,Hotspring,138,59'; + put '45.431,-116.015,Cow Flats Hot Spring,Grangeville,Hotspring,138,59'; + put '44.062,-115.685,Pine Flat Hot Springs,Challis,Hotspring,138,59'; + put '44.382,-115.841,Dash Creek Hot Springs,Challis,Hotspring,138,59'; + put '44.077,-115.553,Haven Lodge Hot Spring,Challis,Hotspring,147,64'; + put '43.647,-114.816,Skillern Hot Springs,Hailey,Hotspring,140,60'; + put '43.789,-115.434,Dutch Frank Hot Spring,Hailey,Hotspring,149,65'; + put '43.54,-115.288,Bridge Hot Springs,Hailey,Hotspring,138,59'; + put '43.72,-115.617,Smith Cabin Hot Spring,Hailey,Hotspring,138,59'; + put '42.688,-114.826,Banbury Hot Spring,Twin Falls,Hotspring,138,59'; + put '45.035,-115.561,Sheep Creek Hot Spring,Elk City,Hotspring,136,58'; + put '44.245,-114.885,Elkhorn Hot Spring,Challis,Hotspring,136,58'; + put '44.642,-115.693,Mollys Hot Spring,Challis,Hotspring,138,59'; + put '43.811,-115.116,Atlanta Hot Springs,Hailey,Hotspring,140,60'; + put '44.679,-116.231,White Licks Hot Spring,Baker,Hotspring,140,60'; + put '45.512,-115.046,Barth Hot Springs,Elk City,Hotspring,140,60'; + put '43.696,-115.658,Sheep Creek Bridge Hot Spring,Hailey,Hotspring,142,61'; + put '44.914,-115.722,Teapot Hot Spring,Challis,Hotspring,142,61'; + put '43.788,-115.444,Straight Creek Hot Spring,Hailey,Hotspring,144,62'; + put '43.116,-115.305,Latty Hot Spring,Hailey,Hotspring,144,62'; + put '45.039,-116.291,Zims Resort Hot Springs,Grangeville,Hotspring,144,62'; + put '43.049,-114.952,White Arrow Hot Spring,Hailey,Hotspring,145,63'; + put '44.645,-114.739,Upper Loon Creek Hot Springs,Challis,Hotspring,145,63'; + put '43.383,-114.931,Wardrop Hot Spring,Hailey,Hotspring,147,64'; + put '44.531,-116.754,Fairchild Hot Spring,Baker,Hotspring,126,52'; + put '44.661,-114.652,Foster Ranch Hot Springs,Challis,Hotspring,135,57'; + put '44.051,-115.829,Dan Hodges Hot Spring,Challis,Hotspring,140,60'; + put '43.506,-114.354,Hailey Hot Springs,Hailey,Hotspring,131,55'; + put '43.982,-114.486,West Pass Hot Spring,Hailey,Hotspring,124,51'; + put '43.641,-114.487,Warfield Hot Spring,Hailey,Hotspring,124,51'; + put '44.145,-112.554,Lidy Hot Springs,Dubois,Hotspring,124,51'; + put '44.054,-115.907,Hot Spring Campground,Challis,Hotspring,124,51'; + put '42.032,-115.363,Murphy Hot Springs,Twin Falls,Hotspring,126,52'; + put '43.561,-114.415,Clarendon Hot Springs,Hailey,Hotspring,126,52'; + put '43.423,-114.627,Elk Creek Hot Spring,Hailey,Hotspring,126,52'; + put '43.553,-115.267,Paradise Hot Springs,Hailey,Hotspring,126,52'; + put '42.308,-111.707,Maple Grove Hot Springs,Preston,Hotspring,172,78'; + put '45.013,-113.605,Sharkey Hot Spring,Dillon,Hotspring,126,52'; + put '44.73,-114.993,Sunflower Hot Springs,Challis,Hotspring,149,65'; + put '43.974,-114.499,Lower Bowery Hot Spring,Hailey,Hotspring,129,54'; + put '43.724,-115.604,Loftus Hot Spring,Hailey,Hotspring,129,54'; + put '44.676,-115.943,Gold Fork Hot Spring,Challis,Hotspring,127,53'; + put '44.044,-115.851,Donlay Ranch Hot Spring,Challis,Hotspring,131,55'; + put '44.264,-114.818,Basin Creek Hot Spring,Challis,Hotspring,133,56'; + put '44.652,-114.734,Owen Cabin Hot Spring,Challis,Hotspring,133,56'; + put '43.605,-115.664,Rattlesnake Hot Spring,Hailey,Hotspring,133,56'; + put '43.605,-114.948,Lightfoot Hot Springs,Hailey,Hotspring,133,56'; + put '45.788,-115.198,Red River Hot Springs,Elk City,Hotspring,131,55'; + put '44.632,-115.697,South Fork Plunge,Challis,Hotspring,129,54'; + put '44.853,-116.442,Starkey Hot Springs,Baker,Hotspring,131,55'; + put '42.692,-114.859,Hot Sulphur (Miracle Hot) Springs,Twin Falls,Hotspring,131,55'; + put '44.045,-115.842,Corder Hot Spring,Challis,Hotspring,131,55'; + put '44.247,-114.676,Robinson Bar Hot Springs,Challis,Hotspring,131,55'; + put '44.785,-114.855,Cox Hot Springs,Challis,Hotspring,131,55'; + put '43.637,-115.13,Willow Creek Hot Spring,Hailey,Hotspring,131,55'; + put '43.803,-115.401,Granite Creek Hot Spring,Hailey,Hotspring,131,55'; + put '43.129,-115.34,Coyote Hot Spring,Hailey,Hotspring,135,57'; + put '44.211,-116.71,Cove Creek Hot Spring,Baker,Hotspring,131,55'; + put '44.16,-115.167,Grandjean Hot Spring,Challis,Hotspring,H,H'; + put '43.755,-115.571,Ninemeyer Hot Springs,Hailey,Hotspring,169,76'; + put '43.701,-114.738,Big Smokey Hot Spring,Hailey,Hotspring,H,H'; + put '43.831,-115.192,Queens River Hot Spring,Hailey,Hotspring,H,H'; + put '43.817,-115.046,Leggit Creek Hot Spring,Hailey,Hotspring,H,H'; + put '43.718,-115.563,Basset Hot Spring,Hailey,Hotspring,H,H'; + put '43.588,-115.988,Mores Creek Hot Spring,Hailey,Hotspring,H,H'; + put '44.951,-114.704,Mormon Ranch Warm Spring,Challis,Hotspring,H,H'; + put '44.896,-114.563,Forge Creek Hot Springs,Challis,Hotspring,H,H'; + put '44.77,-115.663,Billy Hot Spring,Challis,Hotspring,H,H'; + put '44.628,-115.197,Sheepeater Hot Springs,Challis,Hotspring,H,H'; + put '44.585,-115.072,Sulphur Creek Hot Spring,Challis,Hotspring,H,H'; + put '44.554,-115.301,Sulphur Creek Hot Spring,Challis,Hotspring,H,H'; + put '42.107,-113.39,Blm Well (Frazier Hot Spring),Pocatello,Hotspring,203,95'; + put '44.4,-115.82,Goat Hot Springs,Challis,Hotspring,H,H'; + put '45.307,-114.338,Big Creek Hot Springs,Elk City,Hotspring,199,93'; + put '44.583,-116.112,Cascade Reservoir Hot Spring,Baker,Hotspring,H,H'; + put '45.17,-115.807,Secesh Hot Spring,Elk City,Hotspring,H,H'; + put '46.235,-114.707,Prospector Hot Springs,Hamilton,Hotspring,H,H'; + put '46.138,-115.09,Stuart Hot Springs,Hamilton,Hotspring,H,H'; + put '46.006,-115.021,Marten Hot Springs,Hamilton,Hotspring,H,H'; + put '42.374,-111.726,Mound Valley Warm Spring,Preston,Hotspring,W,W'; + put '43.255,-114.829,Mormon Reservoir Warm Spring,Hailey,Hotspring,W,W'; + put '44.639,-115.671,Warm Lake Springs,Challis,Hotspring,W,W'; + put '44.445,-115.239,Bear Valley Hot Spring,Challis,Hotspring,W,W'; + put '44.354,-117.071,Old Homestead Warm Spring,Baker,Hotspring,W,W'; + put '43.327,-113.918,Condie Hot Springs,Idaho Falls,Hotspring,124,51'; + put '43.038,-112.004,Alkali Flats Warm Spring,Idaho Falls,Hotspring,93,34'; + put '44.43,-115.762,Bull Creek Hot Springs,Challis,Hotspring,H,H'; + put '42.119,-111.928,Squaw Hot Springs,Preston,Hotspring,163,73'; + put '42.333,-111.716,Cleveland Hot Springs,Preston,Hotspring,151,66'; + put '43.671,-115.696,Twin Springs,Hailey,Hotspring,151,66'; + put '43.951,-116.353,Roystone Hot Springs,Boise,Hotspring,151,66'; + put '42.704,-114.856,Salmon Falls Hot Spring,Twin Falls,Hotspring,153,67'; + put '44.16,-115.177,Sacajawea Hot Springs,Challis,Hotspring,153,67'; + put '43.738,-115.583,Vaughn Hot Spring,Hailey,Hotspring,154,68'; + put '44.669,-116.305,Council Mtn Hot Springs,Baker,Hotspring,154,68'; + put '44.831,-115.215,Kwiskwis Hot Spring,Challis,Hotspring,156,69'; + put '43.684,-114.41,Guyer Hot Springs,Hailey,Hotspring,158,70'; + put '43.155,-115.518,Hot Springs,Hailey,Hotspring,158,70'; + put '44.586,-116.63,Lakey Hot Spring,Baker,Hotspring,158,70'; + put '42.333,-115.65,Indian Hot Springs,Twin Falls,Hotspring,160,71'; + put '42.637,-114.892,Poison Springs,Twin Falls,Hotspring,H,H'; + put '44.813,-115.123,Middle Fork Indian Creek Hot Sprin,Challis,Hotspring,162,72'; + put '44.072,-115.543,Kirkham Hot Springs,Challis,Hotspring,149,65'; + put '43.328,-114.399,Magic Hot Springs,Hailey,Hotspring,163,73'; + put '43.293,-114.908,Barrons Hot Spring,Hailey,Hotspring,167,75'; + put '44.154,-115.993,Warm Springs Creek Hot Springs,Challis,Hotspring,167,75'; + put '44.268,-114.748,Sunbeam Hot Springs,Challis,Hotspring,169,76'; + put '44.092,-116.052,Deer Hot Springs,Baker,Hotspring,176,80'; + put '43.563,-114.798,Worswick Hot Springs,Hailey,Hotspring,180,82'; + put '42.133,-111.928,Battle Creek Hot Springs,Preston,Hotspring,183,84'; + put '44.364,-115.856,Boiling Springs,Challis,Hotspring,185,85'; + put '44.157,-115.314,Bonneville Hot Springs,Challis,Hotspring,185,85'; + put '44.799,-115.129,Indian Creek Hot Spring,Challis,Hotspring,190,88'; + put '44.568,-115.695,Vulcan Hot Springs,Challis,Hotspring,190,88'; + put '44.306,-116.745,Crane Creek Hot Springs,Baker,Hotspring,198,92'; + put '44.416,-116.031,Cabarton Hot Spring,Baker,Hotspring,160,71'; + put '42.781,-111.983,Portneuf River Warm Spring,Preston,Hotspring,93,34'; + put '44.621,-115.985,Badley Warm Spring,Challis,Hotspring,100,38'; + put '45.201,-116.312,Boulder Creek Spring,Grangeville,Hotspring,82,28'; + put '42.24,-113.588,Sears Spring,Pocatello,Hotspring,84,29'; + put '44.257,-112.639,Warm Springs,Dubois,Hotspring,84,29'; + put '42.911,-111.556,Henry Warm Spring,Preston,Hotspring,86,30'; + put '43.021,-111.695,Wilson Lake Warm Spring,Driggs,Hotspring,86,30'; + put '44.495,-116.732,Keithly Warm Spring,Baker,Hotspring,86,30'; + put '42.655,-111.643,Steamboat Hot Spring,Preston,Hotspring,88,31'; + put '45.152,-116.296,Stinky Warm Spring,Grangeville,Hotspring,88,31'; + put '42.725,-112.872,Indian Springs,Pocatello,Hotspring,90,32'; + put '43.114,-112.167,Yandell Springs,Idaho Falls,Hotspring,90,32'; + put '44.64,-116.045,Arling Hot Spring,Baker,Hotspring,90,32'; + put '42.657,-111.604,Soda Springs,Preston,Hotspring,82,28'; + put '45.07,-115.826,Lick Creek Warm Spring,Elk City,Hotspring,91,33'; + put '42.337,-111.726,Treasureton Hot Springs,Preston,Hotspring,95,35'; + put '44.382,-114.088,Little Antelope Flat Warm Spring,Challis,Hotspring,93,34'; + put '43.21,-111.495,Brockman Creek Hot Spring,Driggs,Hotspring,95,35'; + put '44.398,-115.149,Cape Horn Warm Springs,Challis,Hotspring,95,35'; + put '42.337,-114.509,Nat-Soo-Pah Warm Spring,Twin Falls,Hotspring,97,36'; + put '44.9,-115.505,Hot Creek Warm Spring,Challis,Hotspring,97,36'; + put '42.405,-114.142,Artesian City Hot Springs,Twin Falls,Hotspring,99,37'; + put '42.762,-115.739,Indian Bathtub Hot Springs,Twin Falls,Hotspring,99,37'; + put '43.227,-111.109,Alpine Warm Spring,Driggs,Hotspring,99,37'; + put '42.545,-112.906,Rockland Warm Springs,Pocatello,Hotspring,100,38'; + put '43.805,-114.585,Russian John Hot Spring,Hailey,Hotspring,100,38'; + put '43.779,-114.539,Easley Hot Springs,Hailey,Hotspring,100,38'; + put '44.26,-114.838,Mormon Bend Hot Spring,Challis,Hotspring,100,38'; + put '44.64,-113.504,Big Eightmile Creek Warm Spring,Dubois,Hotspring,91,33'; + put '42.339,-112.436,Kent Warm Spring,Pocatello,Hotspring,75,24'; + put '42.957,-112.458,Tadpole Warm Spring,Pocatello,Hotspring,68,20'; + put '43.607,-111.189,Taylor Springs,Driggs,Hotspring,68,20'; + put '43.972,-116.325,Sweet Warm Spring,Boise,Hotspring,68,20'; + put '44.717,-115.703,Dollar Creek Warm Spring,Challis,Hotspring,68,20'; + put '42.625,-113.107,Lake Walcott Hot Spring,Pocatello,Hotspring,70,21'; + put '42.015,-114.237,Thoroughbred Warm Springs,Twin Falls,Hotspring,69,21'; + put '42.928,-111.592,Blackfoot Reservoir Warm Spring,Preston,Hotspring,72,22'; + put '42.286,-113.446,"Rice Spring, Ward Spring",Pocatello,Hotspring,72,22'; + put '42.085,-113.564,Grape Creek Warm Spring,Pocatello,Hotspring,72,22'; + put '43.66,-111.715,Elkhorn Warm Spring,Driggs,Hotspring,72,22'; + put '43.367,-113.884,Rush Warm Spring,Idaho Falls,Hotspring,72,22'; + put '44.306,-117.042,Weiser Warm Springs,Baker,Hotspring,72,22'; + put '45.344,-114.463,Owl Creek Hot Springs,Elk City,Hotspring,122,50'; + put '44.454,-112.696,Big Spring,Dubois,Hotspring,73,23'; + put '44.269,-113.449,Barney Hot Springs,Dubois,Hotspring,82,28'; + put '43.5,-115.308,Towne Creek Warm Spring,Hailey,Hotspring,75,24'; + put '43.161,-116.332,Thomas Flats Warm Spring,Boise,Hotspring,75,24'; + put '44.612,-113.363,Whittaker Warm Springs,Dubois,Hotspring,75,24'; + put '42.173,-112.239,Malad Warm Spring,Pocatello,Hotspring,77,25'; + put '42.156,-112.348,Pleasantview Warm Springs,Pocatello,Hotspring,77,25'; + put '42.025,-112.226,Prices Warm Spring,Pocatello,Hotspring,77,25'; + put '42.865,-116.368,Lower Birch Spring,Jordan Valley,Hotspring,77,25'; + put '43.423,-111.414,Fall Creek Mineral Springs,Driggs,Hotspring,77,25'; + put '42.986,-111.743,Blackfoot River Warm Spring,Preston,Hotspring,79,26'; + put '42.426,-111.378,Pescadero Warm Spring,Preston,Hotspring,79,26'; + put '44.091,-111.458,Ashton Warm Spring,Ashton,Hotspring,79,26'; + put '42.056,-112.246,Woodruff Hot Spring,Pocatello,Hotspring,81,27'; + put '43.831,-116.396,Highland Land Co Warm Spring,Boise,Hotspring,73,23'; + put '44.847,-115.696,Holdover Hot Spring,Challis,Hotspring,117,47'; + put '43.047,-114.929,Hot Sulphur Lake,Hailey,Hotspring,81,27'; + put '43.603,-115.07,Baumgartner Hot Spring,Hailey,Hotspring,111,44'; + put '44.465,-116.037,Belvidere Hot Spring,Baker,Hotspring,111,44'; + put '42.621,-112.008,Lava Hot Springs,Pocatello,Hotspring,113,45'; + put '43.823,-115.327,Weatherby Hot Spring,Hailey,Hotspring,113,45'; + put '43.335,-115.044,Wolf Hot Spring,Hailey,Hotspring,113,45'; + put '44.905,-113.929,Goldbug Hot Spring,Dubois,Hotspring,113,45'; + put '45.095,-113.836,Salmon Hot Spring,Dillon,Hotspring,113,45'; + put '45.277,-115.912,Burgdorf Hot Springs,Elk City,Hotspring,113,45'; + put '44.836,-114.79,Hospital Hot Spring,Challis,Hotspring,115,46'; + put '44.72,-114.016,Cronks Canyon Hot Spring,Challis,Hotspring,115,46'; + put '44.721,-115.207,Pistol Creek Hot Springs,Challis,Hotspring,115,46'; + put '43.791,-111.435,Pincock (Green Canyon) Hot Springs,Driggs,Hotspring,111,44'; + put '43.414,-116.707,Givens Hot Springs,Boise,Hotspring,117,47'; + put '45.503,-114.463,Horse Creek Hot Springs,Elk City,Hotspring,109,43'; + put '46.464,-115.035,Weir Creek Hot Springs,Hamilton,Hotspring,117,47'; + put '42.115,-111.264,Bear Lake Hot Springs,Preston,Hotspring,118,48'; + put '42.173,-113.861,Oakley Hot Spring,Pocatello,Hotspring,118,48'; + put '46.463,-114.872,Jerry Johnson Hot Springs,Hamilton,Hotspring,118,48'; + put '43.644,-111.687,Heise Hot Springs,Driggs,Hotspring,120,49'; + put '44.799,-114.806,Lower Loon Creek Hot Spring,Challis,Hotspring,120,49'; + put '44.253,-115.891,Rocky Canyon Hot Springs,Challis,Hotspring,120,49'; + put '46.316,-115.258,Stanley Hot Springs,Hamilton,Hotspring,120,49'; + put '43.779,-115.486,Brown Creek Hot Spring,Hailey,Hotspring,122,50'; + put '44.628,-114.601,Shower Bath Springs,Challis,Hotspring,122,50'; + put '44.171,-114.624,Slate Creek Hot Spring,Challis,Hotspring,122,50'; + put '44.392,-115.834,Ground Hog Hot Springs,Challis,Hotspring,100,38'; + put '42.797,-115.723,"Bat Hot Spring, Pence Hot Spring",Twin Falls,Hotspring,117,47'; + put '42.767,-115.725,Lower Indian Bathtub Hot Springs,Twin Falls,Hotspring,108,42'; + put '42.102,-113.632,Durfee Spring,Pocatello,Hotspring,102,39'; + put '44.33,-115.802,Silver Creek Hot Spring,Challis,Hotspring,102,39'; + put '42.447,-113.523,Marsh Creek Hot Spring,Pocatello,Hotspring,104,40'; + put '42.449,-113.511,Marsh Gully Hot Springs,Pocatello,Hotspring,106,41'; + put '42.798,-115.742,Bruneau Hot Spring,Twin Falls,Hotspring,106,41'; + put '43.576,-114.83,Preis Hot Spring,Hailey,Hotspring,106,41'; + put '43.677,-116.208,Terteling Hot Springs,Boise,Hotspring,106,41'; + put '44.254,-114.443,Sullivan Hot Springs,Challis,Hotspring,106,41'; + put '44.224,-114.929,Stanley Hot Spring,Challis,Hotspring,106,41'; + put '44.101,-114.865,Rosalys Warm Spring,Challis,Hotspring,106,41'; + put '44.06,-115.819,Danskin Creek Hot Spring,Challis,Hotspring,106,41'; + put '45.852,-114.937,Running Warm Springs,Elk City,Hotspring,106,41'; + put '43.363,-113.779,Milford Sweat Hot Spring,Idaho Falls,Hotspring,111,44'; + put '46.466,-114.939,Colgate Warm Springs,Hamilton,Hotspring,106,41'; + put '44.626,-115.749,Trail Creek Hot Spring,Challis,Hotspring,122,50'; + put '43.816,-115.863,Warm Springs,Hailey,Hotspring,108,42'; + put '43.76,-115.56,Pool Creek Hot Spring,Hailey,Hotspring,108,42'; + put '45.042,-114.616,Snowshoe Johnsons Hot Spring,Elk City,Hotspring,108,42'; + put '42.388,-112.085,Downata Hot Springs,Pocatello,Hotspring,109,43'; + put '42.013,-114.504,Magic Hot Springs,Twin Falls,Hotspring,109,43'; + put '42.779,-115.715,Buckaroo Hot Spring,Twin Falls,Hotspring,109,43'; + put '43.99,-114.8,Pierson Hot Springs,Hailey,Hotspring,109,43'; + put '43.038,-114.988,Tschanne Hot Spring,Hailey,Hotspring,109,43'; + put '44.523,-114.173,Beardsley Hot Springs,Challis,Hotspring,109,43'; + put '44.733,-115.018,Sunflower Flat Hot Spring,Challis,Hotspring,109,43'; + put '44.516,-115.295,Dagger Creek Hot Spring,Challis,Hotspring,110,43'; + put '44.971,-116.203,Krigbaum Hot Springs,Baker,Hotspring,109,43'; + put '45.416,-116.172,Riggins Hot Springs,Grangeville,Hotspring,106,41'; + put '42.735,-73.2,Sand Spring,Albany,Hotspring,75,24'; + put '46.106,-114.004,Sleeping Child Hot Springs,Hamilton,Hotspring,122,50'; + put '45.697,-114.365,Blue Joint Hot Springs 2,Elk City,Hotspring,84,29'; + put '44.769,-111.649,Sloan Cow Camp Spring,Ashton,Hotspring,86,30'; + put '47.632,-112.855,Medicine (Sun River) Springs,Choteau,Hotspring,86,30'; + put '45.75,-113.938,Gallogly Spring,Dillon,Hotspring,100,38'; + put '47.33,-114.789,Quinns Hot Springs,Wallace,Hotspring,109,43'; + put '45.171,-112.153,Puller Hot Springs,Dillon,Hotspring,111,44'; + put '46.728,-114.533,"Lolo Hot Springs, Granite Springs",Hamilton,Hotspring,111,44'; + put '45.337,-110.691,Chico Hot Springs,Bozeman,Hotspring,113,45'; + put '47.607,-114.663,Camas Hot Springs,Wallace,Hotspring,113,45'; + put '45.841,-114.038,Medicine Hot Springs,Elk City,Hotspring,117,47'; + put '45.458,-113.109,Elkhorn Hot Springs,Dillon,Hotspring,118,48'; + put '45.027,-112.844,Mcmenomey Ranch Spring,Dillon,Hotspring,68,20'; + put '45.792,-112.126,Renova Hot Springs,Dillon,Hotspring,122,50'; + put '44.701,-111.878,Staudenmeyer Springs,Ashton,Hotspring,82,28'; + put '45.602,-111.9,Potosi Warm Springs,Bozeman,Hotspring,124,51'; + put '45.575,-111.683,Norris Hot Springs,Bozeman,Hotspring,127,53'; + put '45.462,-112.475,New Biltmore Hot Springs,Dillon,Hotspring,127,53'; + put '45.66,-111.186,Bozeman Hot Springs,Bozeman,Hotspring,131,55'; + put '45.896,-112.233,Pipestone Hot Springs,Dillon,Hotspring,135,57'; + put '46.547,-110.903,White Sulphur Springs,White Sulphur,Hotspring,136,58'; + put '46.448,-111.982,Alhambra Hot Springs,White Sulphur,Hotspring,138,59'; + put '45.757,-110.256,Hunters Hot Springs,Bozeman,Hotspring,140,60'; + put '45.368,-113.403,Jardine Hot Spring,Dillon,Hotspring,140,60'; + put '46.596,-112.108,Broadwater (Helena) Hot Springs,Butte,Hotspring,151,66'; + put '44.984,-111.613,Wolf Creek Hot Springs,Ashton,Hotspring,154,68'; + put '45.685,-112.295,Silver Star Hot Springs,Dillon,Hotspring,163,73'; + put '45.59,-111.899,Potosi Hot Springs,Bozeman,Hotspring,122,50'; + put '45.105,-112.751,Browns Springs,Dillon,Hotspring,75,24'; + put '46.718,-113.306,Bearmouth Warm Spring 2,Butte,Hotspring,68,20'; + put '46.717,-113.32,Bearmouth Warm Spring 1,Butte,Hotspring,68,20'; + put '47.217,-109.471,Brooks Warm Spring,Lewistown,Hotspring,68,20'; + put '45.708,-110.976,Bridger Canyon Warm Spring,Bozeman,Hotspring,70,21'; + put '46.795,-108.883,Durfee Creek Springs,Roundup,Hotspring,70,21'; + put '46.704,-113.452,Nimrod Springs,Butte,Hotspring,70,21'; + put '47.876,-108.656,Landusky Springs,Lewistown,Hotspring,70,21'; + put '45.032,-110.667,Bear Creek Springs,Bozeman,Hotspring,72,22'; + put '45.111,-112.714,Lovells Hot Spring,Dillon,Hotspring,72,22'; + put '46.106,-112.903,Anaconda Hot Springs,Butte,Hotspring,72,22'; + put '45.235,-112.135,Trudau Warm Springs,Dillon,Hotspring,73,23'; + put '45.698,-114.382,Blue Joint Hot Spring 1,Elk City,Hotspring,84,29'; + put '45.037,-111.953,Vigilante Spring,Bozeman,Hotspring,75,24'; + put '45.608,-110.571,Carter Bridge Warm Springs,Bozeman,Hotspring,82,28'; + put '46.355,-111.565,Bedford Hot Springs,White Sulphur,Hotspring,74,24'; + put '45.553,-110.142,Anderson Springs,Bozeman,Hotspring,77,25'; + put '45.42,-112.692,Apex Warm Spring,Dillon,Hotspring,77,25'; + put '46.607,-112.776,Garrison Warm Springs,Butte,Hotspring,77,25'; + put '47.843,-108.598,The (Landusky) Plunge,Lewistown,Hotspring,77,25'; + put '44.785,-111.649,West Fork Swimming Hole,Ashton,Hotspring,79,26'; + put '46.61,-112.555,Avon Warm Spring,Butte,Hotspring,79,26'; + put '46.334,-112.886,Deerlodge Prison Ranch Springs,Butte,Hotspring,79,26'; + put '47.994,-108.445,Lodgepole (Big Warm) Springs,Lewistown,Hotspring,79,26'; + put '47.451,-114.648,Green Springs,Wallace,Hotspring,79,26'; + put '45.392,-112.452,Beaverhead Rock Spring,Dillon,Hotspring,81,27'; + put '44.704,-111.892,Andersons Pasture Springs,Ashton,Hotspring,82,28'; + put '47.971,-108.395,Little Warm Springs,Lewistown,Hotspring,73,23'; + put '46.198,-112.094,Boulder Hot Springs,Butte,Hotspring,169,76'; + put '46.178,-112.794,Warm Springs (State Hospital),Butte,Hotspring,172,78'; + put '45.367,-111.726,Ennis Hot Springs,Bozeman,Hotspring,181,83'; + put '46.044,-112.811,Gregson Hot Springs,Butte,Hotspring,158,70'; + put '45.09,-110.774,Laduke (Corwin) Hot Spring,Bozeman,Hotspring,154,68'; + put '35.897,-82.826,Hot Springs,Knoxville,Hotspring,108,42'; + put '32.644,-108.128,Apache Tejo Warm Spring,Silver City,Hotspring,97,36'; + put '33.135,-107.254,Truth Or Consequences,Tularosa,Hotspring,113,45'; + put '36.305,-106.053,Ojo Caliente (Arsenic Spring),Aztec,Hotspring,111,44'; + put '33.162,-108.209,Spring (Hot),Clifton,Hotspring,111,44'; + put '36.508,-105.722,Manby Hot Springs,Raton,Hotspring,100,38'; + put '35.849,-106.629,Spence Hot Springs,Albuquerque,Hotspring,100,38'; + put '35.972,-106.56,San Antonio Warm Spring,Albuquerque,Hotspring,101,38'; + put '35.82,-106.627,Mccauley Hot Springs,Albuquerque,Hotspring,99,37'; + put '35.793,-106.685,Soda Dam Hot Springs,Albuquerque,Hotspring,117,47'; + put '33.831,-108.8,(Upper) Frisco Hot Spring,Clifton,Hotspring,98,37'; + put '35.646,-106.888,Warm Springs,Albuquerque,Hotspring,129,54'; + put '36.324,-105.606,Ponce De Leon Springs,Raton,Hotspring,93,34'; + put '34.038,-106.94,"Socorro Spring, Sedillo Spring",Socorro,Hotspring,93,34'; + put '33.293,-108.282,"Spring Mfg Two, Spring Mfg Three",Clifton,Hotspring,99,37'; + put '35.592,-106.753,Indian Springs,Albuquerque,Hotspring,123,51'; + put '32.501,-106.926,Radium Springs,Las Cruces,Hotspring,127,53'; + put '33.274,-108.25,Spring Mfg Four,Clifton,Hotspring,93,34'; + put '35.938,-106.646,San Antonio Hot Spring,Albuquerque,Hotspring,129,54'; + put '33.244,-108.88,San Francisco Hot Springs,Clifton,Hotspring,120,49'; + put '32.748,-107.836,Mimbres Hot Springs,Las Cruces,Hotspring,136,58'; + put '35.653,-105.29,Montezuma Hot Springs,Santa Fe,Hotspring,138,59'; + put '33.233,-108.235,Spring (Hot),Clifton,Hotspring,149,65'; + put '33.199,-108.209,Gila Hot Springs,Clifton,Hotspring,151,66'; + put '33.108,-108.483,Turkey Creek Hot Spring,Clifton,Hotspring,165,74'; + put '35.772,-106.69,Jemez Springs,Albuquerque,Hotspring,169,76'; + put '35.908,-106.615,Sulphur Springs,Albuquerque,Hotspring,189,87'; + put '33.237,-108.88,Hot Springs,Clifton,Hotspring,H,H'; + put '32.562,-108.027,Kennecott Warm Springs,Silver City,Hotspring,W,W'; + put '32.554,-107.994,Faywood Hot Springs,Las Cruces,Hotspring,129,54'; + put '33.898,-108.501,Aragon Springs,Clifton,Hotspring,70,21'; + put '34.847,-107.091,Spring (Salt),Socorro,Hotspring,76,24'; + put '34.903,-107.085,El Ojo Escondido,Socorro,Hotspring,73,23'; + put '35.06,-107.133,Alamos Spring,Albuquerque,Hotspring,72,22'; + put '34.912,-108.951,Rainbow Spring,Saint Johns,Hotspring,71,22'; + put '34.698,-107.129,Spring,Socorro,Hotspring,71,22'; + put '32.455,-104.489,Indian Big Spring,Carlsbad,Hotspring,79,26'; + put '34.995,-106.454,Clear Water Spring,Socorro,Hotspring,69,21'; + put '32.821,-108.408,Ash Spring,Silver City,Hotspring,72,22'; + put '32.83,-109.047,Goat Camp Spring,Silver City,Hotspring,69,21'; + put '35.548,-106.827,San Ysidro Warm Springs,Albuquerque,Hotspring,68,20'; + put '34.116,-106.98,Ojitos Springs,Socorro,Hotspring,68,20'; + put '32.248,-104.411,Mosley Spring,Carlsbad,Hotspring,68,20'; + put '33.708,-109.025,Frieborn Canyon Spring,Clifton,Hotspring,92,33'; + put '33.192,-108.18,Lyons Hunting Lodge Hot Springs,Clifton,Hotspring,126,52'; + put '35.601,-106.86,Phillips Springs,Albuquerque,Hotspring,70,21'; + put '33.285,-108.262,Spring Mfg One,Clifton,Hotspring,88,31'; + put '33.306,-108.324,The Meadows Warm Spring,Clifton,Hotspring,91,33'; + put '34.049,-106.939,Cook Spring,Socorro,Hotspring,70,21'; + put '32.795,-107.276,Derry Warm Springs,Las Cruces,Hotspring,92,33'; + put '32.884,-108.358,Allen Springs,Silver City,Hotspring,78,26'; + put '33.279,-107.563,Warm Springs,Tularosa,Hotspring,87,31'; + put '32.606,-107.19,Souse Springs,Las Cruces,Hotspring,88,31'; + put '34.808,-107.091,Spring (Salt),Socorro,Hotspring,86,30'; + put '35.54,-106.854,San Ysidro Hot Springs,Albuquerque,Hotspring,85,29'; + put '36.368,-106.059,Statue Spring,Aztec,Hotspring,83,28'; + put '34.833,-107.091,Laguna Pueblo Seeps,Socorro,Hotspring,82,28'; + put '33.572,-107.593,Ojo Caliente,Tularosa,Hotspring,83,28'; + put '34.854,-107.088,Laguna Pueblo Springs,Socorro,Hotspring,80,27'; + put '32.843,-108.512,Mangas Springs,Silver City,Hotspring,81,27'; + put '34.769,-107.085,Spring (Salt),Socorro,Hotspring,78,26'; + put '34.032,-106.777,Ojo De Las Canas,Socorro,Hotspring,79,26'; + put '40.972,-119.007,Black Rock Hot Spring,Lovelock,Hotspring,136,58'; + put '38.899,-119.41,Nevada (Hinds) Hot Springs,Walker Lake,Hotspring,144,62'; + put '38.922,-118.198,Wedell Hot Springs,Walker Lake,Hotspring,144,62'; + put '41.183,-114.991,Hot Springs,Wells,Hotspring,142,61'; + put '38.437,-116.277,Hot Creek Valley Spring,Tonopah,Hotspring,142,61'; + put '41.788,-114.735,Mineral Hot Spring,Wells,Hotspring,140,60'; + put '37.825,-117.337,Alkali Hot Spring,Goldfield,Hotspring,140,60'; + put '41.412,-114.675,Wine Cup Ranch Springs,Wells,Hotspring,138,59'; + put '40.404,-116.517,Crescent Valley Hot Springs,Winnemucca,Hotspring,138,59'; + put '40.417,-116.507,Crescent Valley Hot Springs,Winnemucca,Hotspring,138,59'; + put '40.603,-116.463,Horseshoe Ranch Springs,Winnemucca,Hotspring,136,58'; + put '41.378,-119.182,Springs (Hot),Vya,Hotspring,136,58'; + put '39.883,-114.893,Cherry Creek Hot Springs,Ely,Hotspring,144,62'; + put '40.922,-117.108,Hot Pot (Blossom Hot Springs),Winnemucca,Hotspring,136,58'; + put '41.721,-118.505,Howard Hot Spring,Vya,Hotspring,135,57'; + put '41.421,-117.388,The Hot Springs,Mcdermitt,Hotspring,135,57'; + put '40.418,-117.415,Buffalo Springs,Winnemucca,Hotspring,162,72'; + put '39.031,-116.666,Dianas Punch Bowl,Millett,Hotspring,138,59'; + put '39.404,-116.347,Klobe (Bartholomae) Hot Spring,Millett,Hotspring,156,69'; + put '36.975,-116.721,Hicks Hot Springs,Death Valley,Hotspring,109,43'; + put '40.178,-117.496,Home Station Ranch Hot Spring,Winnemucca,Hotspring,135,57'; + put '39.797,-118.067,Dixie Hot Springs,Reno,Hotspring,162,72'; + put '39.904,-116.588,Walti Hot Springs,Millett,Hotspring,162,72'; + put '38.981,-119.833,Walleys Hot Springs,Walker Lake,Hotspring,160,71'; + put '38.464,-115.792,Chimney Warm Spring,Lund,Hotspring,160,71'; + put '39.328,-116.858,Spencer Hot Springs,Millett,Hotspring,162,72'; + put '41.108,-117.578,Hot Springs,Mcdermitt,Hotspring,158,70'; + put '36.002,-114.742,Spring,Las Vegas,Hotspring,145,63'; + put '41.576,-115.181,Hot Creek Springs,Wells,Hotspring,151,66'; + put '40.954,-117.488,Golconda Hot Spring (South),Winnemucca,Hotspring,151,66'; + put '40.22,-116.068,Bruffeys Hot Springs,Winnemucca,Hotspring,149,65'; + put '40.249,-115.409,Smith Ranch Springs,Elko,Hotspring,149,65'; + put '41.867,-114.692,San Jacinto Ranch Spring,Wells,Hotspring,148,64'; + put '40.765,-116.04,Hot Sulphur Springs,Winnemucca,Hotspring,147,64'; + put '38.188,-116.373,Warm Springs,Tonopah,Hotspring,145,63'; + put '41.567,-118.564,Dyke Hot Springs,Vya,Hotspring,158,70'; + put '38.365,-115.867,Abel Spring,Lund,Hotspring,115,46'; + put '41.929,-114.071,Nile Spring,Wells,Hotspring,109,43'; + put '39.193,-119.752,Carson Hot Springs,Reno,Hotspring,120,49'; + put '39.512,-119.907,Lawton Hot Springs,Reno,Hotspring,120,49'; + put '39.944,-119.509,Anaho Island Spring,Reno,Hotspring,120,49'; + put '37.761,-117.632,Silverpeak Hot Spring,Goldfield,Hotspring,118,48'; + put '37.621,-114.51,Caliente Hot Springs,Caliente,Hotspring,118,48'; + put '39.058,-119.742,Saratoga Hot Spring,Reno,Hotspring,122,50'; + put '39.308,-117.552,Hot Springs,Millett,Hotspring,115,46'; + put '40.673,-116.838,Hot Springs,Winnemucca,Hotspring,122,50'; + put '39.08,-116.639,Potts Ranch Hot Springs,Millett,Hotspring,113,45'; + put '38.388,-115.866,Coyote Hole Spring,Lund,Hotspring,113,45'; + put '41.753,-118.841,Warm Springs,Vya,Hotspring,112,44'; + put '41.386,-114.165,Spring (Hot),Wells,Hotspring,111,44'; + put '40.961,-117.494,Golconda Hot Spring (North),Winnemucca,Hotspring,165,74'; + put '40.313,-117.07,Mound Springs,Winnemucca,Hotspring,109,43'; + put '40.585,-115.285,Sulphur Hot Springs,Elko,Hotspring,205,96'; + put '39.059,-119.815,Hobo Hot Springs,Reno,Hotspring,114,46'; + put '40.191,-117.107,Hot Springs,Winnemucca,Hotspring,127,53'; + put '40.819,-115.777,Hot Hole,Elko,Hotspring,133,56'; + put '39.286,-119.84,Bowers Mansion Hot Spring,Reno,Hotspring,133,56'; + put '41.809,-118.861,Painted Hills Mine,Vya,Hotspring,131,55'; + put '41.925,-118.805,Bog Hot Springs,Vya,Hotspring,131,55'; + put '41.647,-115.775,Wild Horse Hot Springs,Wells,Hotspring,129,54'; + put '40.183,-117.102,Hot Springs Ranch,Winnemucca,Hotspring,129,54'; + put '40.08,-117.604,Mccoy Springs,Winnemucca,Hotspring,120,49'; + put '41.353,-119.216,Spring (Hot),Vya,Hotspring,127,53'; + put '41.357,-119.188,Springs (Hot),Vya,Hotspring,133,56'; + put '40.198,-117.103,Hot Springs,Winnemucca,Hotspring,127,53'; + put '39.42,-119.738,Dimonte Spring,Reno,Hotspring,127,53'; + put '38.952,-115.23,Williams Hot Spring,Lund,Hotspring,127,53'; + put '41.261,-115.305,Hot Springs,Wells,Hotspring,126,52'; + put '39.041,-116.663,Hot Spring,Millett,Hotspring,124,51'; + put '41.365,-119.221,Spring (Hot),Vya,Hotspring,122,50'; + put '41.159,-114.986,"Threemile Spring, Sulphur Hot Spr",Wells,Hotspring,122,50'; + put '41.339,-119.192,Springs (Hot),Vya,Hotspring,127,53'; + put '39.893,-116.649,Little Hot Springs,Millett,Hotspring,H,H'; + put '39.787,-119.011,Bradys Hot Springs,Reno,Hotspring,209,98'; + put '41.175,-115.278,Hot Spring,Wells,Hotspring,H,H'; + put '41.145,-114.994,Hot Spring,Wells,Hotspring,H,H'; + put '40.864,-117.349,Sulphur Spring,Winnemucca,Hotspring,H,H'; + put '39.733,-119.039,Eagle Salt Works Spring,Reno,Hotspring,H,H'; + put '39.281,-118.42,Sand Springs,Reno,Hotspring,H,H'; + put '38.81,-116.397,Fish Springs,Tonopah,Hotspring,W,W'; + put '39.559,-117.427,Petersons Mill Hot Spring,Millett,Hotspring,H,H'; + put '38.339,-116.662,Warm Spring,Tonopah,Hotspring,W,W'; + put '38.859,-119.175,Hot Spring,Walker Lake,Hotspring,H,H'; + put '39.995,-117.854,Senator Fumaroles,Millett,Hotspring,B,B'; + put '39.565,-118.856,(Soda Lake Area),Reno,Hotspring,210,99'; + put '40.141,-119.687,The Needle Rocks Hot Springs,Lovelock,Hotspring,208,98'; + put '40.146,-119.673,The Needle Rocks Hot Spring,Lovelock,Hotspring,208,98'; + put '40.662,-119.365,Great Boiling Spring (Gerlach),Lovelock,Hotspring,208,98'; + put '39.388,-119.743,Steamboat Springs,Reno,Hotspring,205,96'; + put '39.866,-118.017,Dixie Comstock Mine,Reno,Hotspring,H,H'; + put '40.746,-116.689,White House Spring,Winnemucca,Hotspring,W,W'; + put '39.98,-119.502,Pyramid Island Hot Spring,Reno,Hotspring,.,.'; + put '41.934,-118.808,Warm Springs,Vya,Hotspring,W,W'; + put '41.385,-116.058,Petaini Springs,Mcdermitt,Hotspring,W,W'; + put '41.064,-115.389,Warm Springs,Wells,Hotspring,W,W'; + put '41.066,-114.99,Spring,Wells,Hotspring,W,W'; + put '41.355,-114.133,Warm Springs,Wells,Hotspring,W,W'; + put '41.148,-116.733,Hot Lake,Mcdermitt,Hotspring,H,H'; + put '40.684,-116.153,Ellison Ranch Warm Spring,Winnemucca,Hotspring,W,W'; + put '40.604,-117.648,Leach Hot Springs,Winnemucca,Hotspring,207,97'; + put '40.751,-115.035,Warm Springs,Elko,Hotspring,W,W'; + put '40.782,-115.363,Warm Spring,Elko,Hotspring,W,W'; + put '39.529,-116.388,Warm Spring,Millett,Hotspring,W,W'; + put '39.072,-115.635,Big Blue Spring,Ely,Hotspring,W,W'; + put '38.95,-119.388,Spring,Walker Lake,Hotspring,W,W'; + put '38.965,-118.689,Double Spring,Walker Lake,Hotspring,W,W'; + put '38.458,-117.303,Indian Springs,Tonopah,Hotspring,W,W'; + put '40.592,-116.157,Raine Ranch Springs,Winnemucca,Hotspring,W,W'; + put '39.941,-116.681,Hot Springs,Millett,Hotspring,180,82'; + put '40.567,-116.588,Beowawe Hot Springs (The Geysers),Winnemucca,Hotspring,208,98'; + put '40.761,-117.492,Hot Springs,Winnemucca,Hotspring,185,85'; + put '40.653,-119.378,Mud Springs,Lovelock,Hotspring,184,84'; + put '38.768,-119.174,Wilson Hot Spring,Walker Lake,Hotspring,183,84'; + put '41.921,-118.709,Baltazor Hot Spring,Vya,Hotspring,181,83'; + put '40.857,-119.328,Fly Ranch (Wards) Hot Springs,Lovelock,Hotspring,180,82'; + put '39.597,-119.11,Patua Hot Springs (Fernley),Reno,Hotspring,187,86'; + put '39.028,-117.136,Mcleod Ranch Hot Spring,Millett,Hotspring,180,82'; + put '40.316,-116.433,Hot Spring,Winnemucca,Hotspring,186,86'; + put '38.521,-116.365,Hot Creek Ranch Hot Spring,Tonopah,Hotspring,180,82'; + put '41.051,-119.028,Double Hot Springs,Vya,Hotspring,178,81'; + put '40.003,-117.718,Hyder Hot Springs,Winnemucca,Hotspring,176,80'; + put '39.665,-114.807,Monte Neva Hot Springs,Ely,Hotspring,176,80'; + put '40.368,-117.327,Buffalo Valley Hot Springs,Winnemucca,Hotspring,174,79'; + put '40.699,-116.133,Hot Springs (Carlin),Winnemucca,Hotspring,174,79'; + put '41.052,-118.717,Macfarlane Hot Spring,Vya,Hotspring,170,77'; + put '39.342,-118.578,Borax Spring,Reno,Hotspring,180,82'; + put '39.484,-119.804,Moana Springs,Reno,Hotspring,199,93'; + put '41.243,-114.947,Twelvemile Spring,Wells,Hotspring,102,39'; + put '39.38,-119.74,Steamboat Springs,Reno,Hotspring,205,96'; + put '39.558,-116.36,Bartine Hot Springs,Millett,Hotspring,108,42'; + put '39.954,-117.917,Fumaroles,Millett,Hotspring,204,96'; + put '40.389,-119.402,Hot Seeps (San Emidio Desert),Lovelock,Hotspring,203,95'; + put '38.822,-117.183,Darroughs Hot Springs,Tonopah,Hotspring,203,95'; + put '40.088,-117.725,Sou (Seven Devils) Hot Springs,Winnemucca,Hotspring,185,85'; + put '41.363,-118.788,Pinto Hot Springs,Vya,Hotspring,199,93'; + put '40.408,-117.883,Kyle Hot Springs,Winnemucca,Hotspring,171,77'; + put '41.357,-118.809,West Pinto Hot Spring,Vya,Hotspring,198,92'; + put '39.316,-117.549,Hot Springs,Millett,Hotspring,198,92'; + put '41.468,-116.15,Hot Sulphur Springs (Tuscarora),Mcdermitt,Hotspring,194,90'; + put '40.813,-115.778,Elko Hot Spring,Elko,Hotspring,190,88'; + put '39.208,-118.723,"Lee Hot Springs, Allen Springs",Reno,Hotspring,190,88'; + put '40.262,-119.379,Boiling Springs,Lovelock,Hotspring,187,86'; + put '40.77,-119.113,Butte Springs (Trego Hot Springs),Lovelock,Hotspring,187,86'; + put '39.161,-119.183,Wabuska Hot Springs,Reno,Hotspring,201,94'; + put '39.814,-115.612,Giocoecha Warm Springs,Ely,Hotspring,76,24'; + put '36.389,-114.433,Blue Point Spring,Las Vegas,Hotspring,82,28'; + put '37.016,-117.211,Seep,Goldfield,Hotspring,77,25'; + put '37.751,-116.274,Cedar Spring,Goldfield,Hotspring,77,25'; + put '37.896,-114.227,Flatnose Ranch Spring,Caliente,Hotspring,77,25'; + put '36.207,-115.983,Pahrump (Bennetts) Spring,Las Vegas,Hotspring,77,25'; + put '41.775,-115.921,Rizzi Ranch Hot Spring,Wells,Hotspring,106,41'; + put '35.944,-114.731,Hot Spring,Kingman,Hotspring,78,26'; + put '41.884,-114.117,Gambles Hole,Wells,Hotspring,104,40'; + put '36.565,-115.671,Indian Springs,Las Vegas,Hotspring,78,26'; + put '39.547,-114.915,Campbell Ranch Springs,Ely,Hotspring,76,24'; + put '38.423,-115.022,Flag Springs,Lund,Hotspring,75,24'; + put '38.44,-115.011,Butterfield Springs,Lund,Hotspring,75,24'; + put '37.997,-118.039,Fish Spring,Mariposa,Hotspring,75,24'; + put '37.029,-116.719,Springs,Goldfield,Hotspring,75,24'; + put '36.426,-116.411,Ash Tree Spring,Death Valley,Hotspring,75,24'; + put '36.033,-115.888,Browns Spring,Las Vegas,Hotspring,75,24'; + put '41.322,-119.206,Springs,Vya,Hotspring,75,24'; + put '41.706,-118.261,Ninemile Springs,Vya,Hotspring,79,26'; + put '35.964,-114.743,Hot Spring,Kingman,Hotspring,82,28'; + put '41.763,-118.279,Fivemile Spring,Vya,Hotspring,81,27'; + put '39.457,-119.722,Huffaker Springs,Reno,Hotspring,81,27'; + put '38.992,-117.042,Charnock (Big Blue) Springs,Tonopah,Hotspring,80,27'; + put '36.402,-116.302,Davis Ranch Springs,Death Valley,Hotspring,81,27'; + put '36.45,-116.313,Spring,Death Valley,Hotspring,81,27'; + put '39.792,-114.692,Lower Shellbourne Spring,Ely,Hotspring,77,25'; + put '41.338,-119.168,Springs,Vya,Hotspring,79,26'; + put '41.022,-119.275,Caine Spring,Vya,Hotspring,73,23'; + put '41.05,-117.1,Hot Springs Ranch Springs,Mcdermitt,Hotspring,79,26'; + put '40.079,-116.035,Flynn Ranch Springs,Winnemucca,Hotspring,78,26'; + put '40.325,-116.058,Hot Springs,Winnemucca,Hotspring,79,26'; + put '36.414,-116.292,Spring,Death Valley,Hotspring,79,26'; + put '36.173,-115.191,Las Vegas Springs,Las Vegas,Hotspring,79,26'; + put '36.174,-115.479,White Rock Spring,Las Vegas,Hotspring,78,26'; + put '36.565,-115.623,Spring,Las Vegas,Hotspring,79,26'; + put '36.491,-116.342,"Fairbanks Spring, Soda Spring",Death Valley,Hotspring,81,27'; + put '38.654,-114.633,Geyser Ranch Springs,Lund,Hotspring,70,21'; + put '36.363,-116.271,Bole Spring,Death Valley,Hotspring,72,22'; + put '36.999,-116.706,Spring,Death Valley,Hotspring,72,22'; + put '36.942,-115.425,Ash Creek Spring,Las Vegas,Hotspring,72,22'; + put '38.796,-119.65,Doud Springs,Walker Lake,Hotspring,70,21'; + put '38.622,-115.047,Emigrant Springs,Lund,Hotspring,70,21'; + put '38.927,-115.082,Preston Springs,Lund,Hotspring,70,21'; + put '36.147,-115.893,Manse Ranch Spring,Las Vegas,Hotspring,75,24'; + put '38.645,-114.632,Geyser Ranch Springs,Lund,Hotspring,70,21'; + put '38.574,-115.522,Tom Spring,Lund,Hotspring,72,22'; + put '38.671,-114.628,Geyser Ranch Springs,Lund,Hotspring,70,21'; + put '37.783,-114.528,Bennett Springs,Caliente,Hotspring,70,21'; + put '37.86,-114.321,Delmues Springs,Caliente,Hotspring,70,21'; + put '36.408,-116.313,Davis Ranch Spring,Death Valley,Hotspring,70,21'; + put '36.567,-114.446,Seep,Las Vegas,Hotspring,70,21'; + put '41.369,-114.187,Gamble Spring,Wells,Hotspring,69,20'; + put '39.901,-115.868,Thompson Ranch Spring,Ely,Hotspring,68,20'; + put '38.633,-114.638,Wambolt Springs,Lund,Hotspring,70,21'; + put '37.906,-118.171,Sand Spring,Mariposa,Hotspring,74,23'; + put '36.486,-114.329,Springs,Las Vegas,Hotspring,77,25'; + put '41.354,-119.116,Mustang Springs,Vya,Hotspring,73,23'; + put '41.746,-119.791,Warm Springs,Vya,Hotspring,73,23'; + put '41.258,-118.937,Cane Springs,Vya,Hotspring,74,23'; + put '40.103,-119.884,Fish Springs,Lovelock,Hotspring,73,23'; + put '39.853,-119.719,Spring,Reno,Hotspring,73,23'; + put '39.832,-116.069,Sulphur Spring,Millett,Hotspring,74,23'; + put '36.363,-116.263,Spring,Death Valley,Hotspring,72,22'; + put '38.554,-115.531,Kate Spring,Lund,Hotspring,73,23'; + put '37.074,-116.691,Spring,Goldfield,Hotspring,72,22'; + put '37.979,-117.993,Gap Spring,Goldfield,Hotspring,73,23'; + put '41.591,-119.862,Twin (Vya) Spring,Vya,Hotspring,71,22'; + put '40.763,-119.172,Coyote Spring,Lovelock,Hotspring,72,22'; + put '40.127,-116.884,Springs,Winnemucca,Hotspring,72,22'; + put '40.187,-116.805,Spring,Winnemucca,Hotspring,72,22'; + put '40.967,-114.515,Johnson Ranch Springs,Elko,Hotspring,72,22'; + put '36.205,-115.141,Kyle Spring,Las Vegas,Hotspring,75,24'; + put '39.8,-114.653,Upper Shellbourne Spring,Ely,Hotspring,74,23'; + put '36.428,-116.303,Button Springs,Death Valley,Hotspring,93,34'; + put '38.383,-115.153,Hot Creek Ranch Spring,Lund,Hotspring,90,32'; + put '39.283,-114.866,Lackawanna Hot Springs,Ely,Hotspring,95,35'; + put '38.532,-116.465,Upper Warm Spring,Tonopah,Hotspring,95,35'; + put '38.823,-116.717,South Mosquito Creek Ranch Springs,Tonopah,Hotspring,95,35'; + put '40.829,-117.306,Brooks Spring,Winnemucca,Hotspring,93,34'; + put '40.992,-117.763,Spring,Winnemucca,Hotspring,93,34'; + put '41.971,-114.574,Warm Springs,Wells,Hotspring,95,35'; + put '38.95,-115.7,Big Warm Spring,Lund,Hotspring,93,34'; + put '37.463,-115.192,Ash Springs,Caliente,Hotspring,97,36'; + put '36.464,-116.319,Parent Springs,Death Valley,Hotspring,93,34'; + put '38.352,-115.181,Moon River Spring,Lund,Hotspring,92,33'; + put '36.402,-116.274,"Point of Rocks Springs, King Sprin",Death Valley,Hotspring,91,33'; + put '36.421,-116.322,Crystal Pool,Death Valley,Hotspring,91,33'; + put '36.425,-116.291,Devils Hole,Death Valley,Hotspring,92,33'; + put '39.068,-119.786,Springs,Reno,Hotspring,90,32'; + put '38.954,-117.049,Big Blue (A) Spring,Tonopah,Hotspring,90,32'; + put '40.087,-114.647,Collar And Elbow Spring,Elko,Hotspring,93,34'; + put '36.378,-114.443,Rogers Spring,Las Vegas,Hotspring,82,28'; + put '39.943,-116.073,Shipley Hot Spring,Millett,Hotspring,106,41'; + put '38.698,-116.435,"Upper Warm Spring, Warm Spring",Tonopah,Hotspring,106,41'; + put '41.53,-118.57,Spring,Vya,Hotspring,104,40'; + put '41.877,-115.628,Rowland Hot Springs,Wells,Hotspring,104,40'; + put '40.035,-117.604,Lower Ranch Hot Springs,Winnemucca,Hotspring,104,40'; + put '40.187,-116.79,Chillis Hot Spring,Winnemucca,Hotspring,102,39'; + put '39.988,-116.044,Siri Ranch Spring,Millett,Hotspring,95,35'; + put '39.421,-119.758,Zolezzi Spring,Reno,Hotspring,102,39'; + put '38.531,-116.405,Old Dugan Ranch Hot Springs,Tonopah,Hotspring,102,39'; + put '36.968,-116.723,Burrell Hot Spring,Death Valley,Hotspring,102,39'; + put '38.343,-118.103,Soda Springs,Walker Lake,Hotspring,100,38'; + put '38.556,-115.767,"Lockes Big Spring, Hay Corral Spr",Lund,Hotspring,100,38'; + put '38.594,-115.138,Moorman Spring,Lund,Hotspring,100,38'; + put '38.398,-115.862,Storm Spring,Lund,Hotspring,99,37'; + put '41.19,-115.287,Hot Spring,Wells,Hotspring,97,36'; + put '37.822,-117.48,Pearl Hot Springs,Goldfield,Hotspring,97,36'; + put '39.159,-119.737,Nevada State Prison Spring,Reno,Hotspring,75,24'; + put '40.025,-117.646,Spring,Winnemucca,Hotspring,83,28'; + put '40.83,-119.538,Springs,Lovelock,Hotspring,84,29'; + put '39.442,-119.743,Double Diamond Spring,Reno,Hotspring,84,29'; + put '39.413,-114.779,Mcgill Spring,Ely,Hotspring,84,29'; + put '39.458,-114.756,Schoolhouse Spring,Ely,Hotspring,84,29'; + put '36.375,-116.274,Big (Ash Meadows) Spring,Death Valley,Hotspring,83,28'; + put '38.292,-114.272,Hammond Ranch Spring,Lund,Hotspring,84,29'; + put '41.398,-119.165,Spring,Vya,Hotspring,84,29'; + put '41.732,-119.785,Seeps (Hills Warm Spring),Vya,Hotspring,83,28'; + put '38.563,-115.528,Blue Eagle Springs,Lund,Hotspring,84,29'; + put '40.873,-117.937,Rose Creek Spring,Winnemucca,Hotspring,83,28'; + put '39.917,-114.667,Spring,Ely,Hotspring,83,28'; + put '36.39,-116.278,Jack Rabbit Spring,Death Valley,Hotspring,82,28'; + put '36.437,-116.206,Spring,Death Valley,Hotspring,82,28'; + put '38.937,-115.695,Little Warm Spring,Lund,Hotspring,90,32'; + put '36.479,-116.326,Rogers Spring,Death Valley,Hotspring,82,28'; + put '40.29,-116.049,Carlotti Ranch Springs,Winnemucca,Hotspring,102,39'; + put '36.468,-116.325,Longstreet Spring,Death Valley,Hotspring,82,28'; + put '36.722,-114.716,Muddy Spring,Las Vegas,Hotspring,90,32'; + put '37.532,-115.233,Crystal Springs,Caliente,Hotspring,90,32'; + put '37.598,-115.215,Hiko Spring,Caliente,Hotspring,90,32'; + put '36.404,-116.383,Spring,Death Valley,Hotspring,90,32'; + put '37.996,-116.389,Reveille Mill Spring,Goldfield,Hotspring,84,29'; + put '36.71,-114.714,Moapa Warm Springs,Las Vegas,Hotspring,90,32'; + put '35.982,-114.748,Hot Springs,Kingman,Hotspring,86,30'; + put '40.929,-116.895,Izzenhood Ranch Springs,Winnemucca,Hotspring,88,31'; + put '37.807,-114.38,Panaca Spring,Caliente,Hotspring,88,31'; + put '36.942,-116.729,Spring,Death Valley,Hotspring,88,31'; + put '41.98,-114.376,Hot Spring,Wells,Hotspring,86,30'; + put '36.433,-116.308,Scruggs Springs,Death Valley,Hotspring,86,30'; + put '40.952,-114.751,Ralphs Warm Springs,Elko,Hotspring,86,30'; + put '39.526,-118.876,Soda Lake,Reno,Hotspring,86,30'; + put '38.027,-116.683,Spring,Tonopah,Hotspring,86,30'; + put '37.741,-115.753,Sand Spring,Caliente,Hotspring,86,30'; + put '36.918,-116.744,Beatty Municipal Spring,Death Valley,Hotspring,88,31'; + put '38.255,-116.829,Saulsbury Warm Spring,Tonopah,Hotspring,86,30'; + put '42.48,-73.37,Lebanon Spring,Albany,Hotspring,72,22'; + put '44.241,-122.058,Bigelow Hot Springs,Salem,Hotspring,142,61'; + put '44.862,-121.201,Kahneeta Hot Springs,Bend,Hotspring,126,52'; + put '44.927,-117.939,Radium Hot Springs,Baker,Hotspring,135,57'; + put '44.354,-118.574,Blue Mountain Hot Springs,Canyon City,Hotspring,136,58'; + put '44.936,-122.173,Bagby Hot Springs,Salem,Hotspring,136,58'; + put '43.944,-118.136,Beulah Hot Springs,Burns,Hotspring,140,60'; + put '43.763,-117.156,Mitchell Butte Hot Spring,Boise,Hotspring,144,62'; + put '42.116,-121.287,Oregon Hot Springs (Big Hot Spring,Klamath Falls,Hotspring,142,61'; + put '45.151,-118.659,Lehman Springs,Pendleton,Hotspring,142,61'; + put '43.719,-121.209,East Lake Hot Springs,Crescent,Hotspring,144,62'; + put '43.469,-118.202,Luce Hot Springs,Burns,Hotspring,145,63'; + put '45.018,-117.625,Medical Hot Springs,Grangeville,Hotspring,140,60'; + put '44.867,-121.228,Springs,Bend,Hotspring,125,52'; + put '42.188,-118.383,Flagstaff Butte Hot Spring,Adel,Hotspring,126,52'; + put '44.451,-119.105,Mount Vernon Hot Springs,Canyon City,Hotspring,121,49'; + put '42.977,-117.061,Canters Hot Spring,Jordan Valley,Hotspring,120,49'; + put '43.294,-122.367,Umpqua Hot Springs,Roseburg,Hotspring,117,47'; + put '44.002,-119.647,Weberg Hot Spring,Canyon City,Hotspring,115,46'; + put '43.739,-117.178,Deer Butte Hot Spring,Boise,Hotspring,115,46'; + put '43.795,-117.958,Jonesboro Warm Spring,Boise,Hotspring,112,45'; + put '42.075,-119.927,Hallinan Spring,Adel,Hotspring,113,45'; + put '42.297,-119.776,Fisher Hot Springs,Adel,Hotspring,154,68'; + put '45.013,-117.885,Kropp Hot Spring,Grangeville,Hotspring,109,43'; + put '42.221,-120.368,Hunters Hot Springs,Klamath Falls,Hotspring,205,96'; + put '44.083,-122.233,Cougar Reservoir Hot Springs,Salem,Hotspring,111,44'; + put '44.023,-117.46,Neal Hot Springs,Baker,Hotspring,189,87'; + put '42.431,-121.963,Eagle Point Spring,Klamath Falls,Hotspring,95,35'; + put '43.689,-122.372,Kitson Hot Springs,Roseburg,Hotspring,109,43'; + put '44.813,-117.765,Spring (Hot),Baker,Hotspring,W,W'; + put '43.776,-118.047,Warm Spring,Burns,Hotspring,W,W'; + put '43.793,-118.472,Sitz Warm Spring,Burns,Hotspring,W,W'; + put '43.86,-118.288,Altnow Hot Spring,Burns,Hotspring,W,W'; + put '43.893,-117.596,Springs,Boise,Hotspring,W,W'; + put '45.206,-117.912,Union Station Hot Springs,Grangeville,Hotspring,H,H'; + put '44.208,-117.455,Jamieson Hot Springs,Baker,Hotspring,H,H'; + put '42.338,-118.602,Hot Springs,Adel,Hotspring,207,97'; + put '44.782,-121.975,Breitenbush Hot Springs,Bend,Hotspring,198,92'; + put '42.219,-119.877,Warner Valley Ranch,Adel,Hotspring,198,92'; + put '42.156,-120.345,Barry Ranch Hot Springs,Klamath Falls,Hotspring,190,88'; + put '44.193,-122.049,Belknap Springs,Salem,Hotspring,160,71'; + put '45.021,-122.009,Austin Hot Springs,Vancouver,Hotspring,186,86'; + put '42.676,-118.344,Mickey Springs,Adel,Hotspring,187,86'; + put '44.153,-122.098,Foley Springs,Salem,Hotspring,178,81'; + put '45.244,-117.958,Hot Lake Springs,Grangeville,Hotspring,176,80'; + put '42.544,-118.533,Alvord Hot Springs,Adel,Hotspring,174,79'; + put '43.441,-118.638,Crane Hot Springs,Burns,Hotspring,172,78'; + put '42.226,-119.881,Crump Geyser (Crump Spring),Adel,Hotspring,172,78'; + put '43.727,-117.203,Snively Hot Spring,Boise,Hotspring,170,77'; + put '42.174,-121.615,Olene Gap Hot Springs,Klamath Falls,Hotspring,165,74'; + put '43.708,-122.288,Mccredie Springs,Roseburg,Hotspring,163,73'; + put '43.982,-117.233,Vale Hot Springs,Boise,Hotspring,163,73'; + put '42.162,-120.344,Leithead Hot Spring,Klamath Falls,Hotspring,162,72'; + put '45.372,-121.697,Mount Hood Fumaroles,The Dalles,Hotspring,194,90'; + put '43.264,-119.015,Dunn Spring,Burns,Hotspring,70,21'; + put '42.873,-122.167,Annie Spring,Medford,Hotspring,77,25'; + put '42.133,-121.219,Wilkersons Hot Spring,Klamath Falls,Hotspring,76,24'; + put '43.272,-119.293,Basque Spring,Burns,Hotspring,74,23'; + put '43.276,-119.34,Double O Spring,Burns,Hotspring,74,23'; + put '44.073,-119.427,Brisbois Ranch Springs,Canyon City,Hotspring,72,22'; + put '43.265,-119.276,Johnson Spring,Burns,Hotspring,72,22'; + put '43.281,-119.311,Double O Barnyard Spring,Burns,Hotspring,72,22'; + put '43.501,-119.091,Roadland Spring,Burns,Hotspring,72,22'; + put '43.529,-119.081,Goodman Spring,Burns,Hotspring,72,22'; + put '43.703,-117.19,South Black Willow Spring,Boise,Hotspring,71,22'; + put '42.307,-119.875,Moss Ranch Spring,Adel,Hotspring,72,22'; + put '43.758,-118.067,Juntura Warm Spring 1,Burns,Hotspring,77,25'; + put '43.732,-121.252,Paulina Springs,Crescent,Hotspring,70,21'; + put '42.176,-121.828,Howard Holiday,Klamath Falls,Hotspring,77,25'; + put '43.477,-119.075,Baker Spring,Burns,Hotspring,70,21'; + put '42.178,-121.801,Hardboard Spring,Klamath Falls,Hotspring,70,21'; + put '42.325,-120.327,White Rock Ranch Hot Spring,Klamath Falls,Hotspring,71,21'; + put '43.252,-119.258,Hughet Spring,Burns,Hotspring,68,20'; + put '42.38,-120.33,Bean Hot Spring,Klamath Falls,Hotspring,69,20'; + put '42.933,-120.642,Lost Cabin Spring,Klamath Falls,Hotspring,68,20'; + put '42.998,-120.725,Buckhorn Creek Springs,Klamath Falls,Hotspring,68,20'; + put '42.688,-117.905,Tudors Spring,Jordan Valley,Hotspring,68,20'; + put '42.756,-117.55,Scott Spring,Jordan Valley,Hotspring,68,20'; + put '42.725,-120.646,Summer Lake Hot Spring,Klamath Falls,Hotspring,109,43'; + put '43.757,-118.092,Juntura Warm Spring 2,Burns,Hotspring,95,35'; + put '44.374,-118.738,Limekiln Hot Spring,Canyon City,Hotspring,70,21'; + put '42.221,-122.742,Jackson Hot Springs,Medford,Hotspring,95,35'; + put '44.892,-119.141,Ritter Hot Springs,Canyon City,Hotspring,106,41'; + put '43.808,-122.309,Wall Creek Warm Springs,Roseburg,Hotspring,106,41'; + put '43.395,-118.308,Springs (Hot),Burns,Hotspring,106,41'; + put '43.302,-117.383,Hot Spring,Boise,Hotspring,106,41'; + put '44.28,-118.956,Joaquin Miller Hot Springs,Canyon City,Hotspring,104,40'; + put '42.501,-119.693,Antelope Hot Springs,Adel,Hotspring,104,40'; + put '45.129,-118.738,Hidaway Springs,Pendleton,Hotspring,100,38'; + put '44.975,-118.044,Fisher Hot Springs,Canyon City,Hotspring,99,37'; + put '44.033,-117.449,Bully Creek Spring,Baker,Hotspring,99,37'; + put '42.93,-120.798,Pardon Warm Spring,Klamath Falls,Hotspring,76,24'; + put '42.327,-118.602,Borax Lake (Hot Lake),Adel,Hotspring,97,36'; + put '42.161,-121.627,Crystal Spring,Klamath Falls,Hotspring,78,26'; + put '45.741,-118.233,Bingham Springs,Pendleton,Hotspring,93,34'; + put '42.889,-118.898,Fivemile Spring (Hoghouse Hot Sprs,Adel,Hotspring,80,27'; + put '43.54,-119.081,Millpond Hot Spring,Burns,Hotspring,79,26'; + put '45.891,-116.873,Cook Creek Hot Spring,Grangeville,Hotspring,97,36'; + put '45.295,-121.731,Swim Warm Springs,The Dalles,Hotspring,79,26'; + put '42.04,-120.924,Warm Spring,Klamath Falls,Hotspring,92,33'; + put '44.779,-117.811,Sam O Spring,Baker,Hotspring,80,27'; + put '44.538,-117.417,Nelson Spring,Baker,Hotspring,80,27'; + put '45.631,-119.703,Well Spring,Pendleton,Hotspring,80,27'; + put '42.287,-119.867,Moss Ranch Springs,Adel,Hotspring,83,28'; + put '45.061,-118.455,Warm Mineral Spring,Pendleton,Hotspring,83,28'; + put '43.95,-119.634,Warm Springs,Burns,Hotspring,84,29'; + put '45.295,-117.806,Warm Spring,Grangeville,Hotspring,85,29'; + put '42.815,-118.899,Warm Springs,Adel,Hotspring,89,32'; + put '43.452,-103.508,Hot Brook Springs,Hot Springs,Hotspring,75,24'; + put '43.442,-103.481,Hot Springs,Hot Springs,Hotspring,87,31'; + put '29.178,-102.953,Rio Grande Village Spring,Emory Peak,Hotspring,97,36'; + put '30.823,-105.315,Indian Hot Springs,Marfa,Hotspring,117,47'; + put '30.038,-104.598,Ruidosa Hot Springs,Marfa,Hotspring,113,45'; + put '29.182,-102.992,Hot Springs,Emory Peak,Hotspring,106,41'; + put '30.21,-104.562,Capote Springs,Marfa,Hotspring,99,37'; + put '30.133,-104.602,Nixon Spring,Marfa,Hotspring,90,32'; + put '29.787,-104.462,Springs (Las Cienegas),Presidio,Hotspring,86,30'; + put '30.861,-105.34,Red Bull Spring,Marfa,Hotspring,99,37'; + put '38.85,-112.49,Hatton Hot Spring,Richfield,Hotspring,100,38'; + put '40.176,-111.801,Bird Island,Salt Lake City,Hotspring,86,30'; + put '41.917,-111.958,Gancheff Spring,Ogden,Hotspring,88,31'; + put '37.942,-112.438,Lefevre,Cedar City,Hotspring,90,32'; + put '37.335,-113.687,Veyo Hot Spring,Cedar City,Hotspring,90,32'; + put '40.332,-111.891,Fault Zone Spring,Salt Lake City,Hotspring,90,32'; + put '40.146,-111.806,Lincoln Point Warm Springs,Salt Lake City,Hotspring,90,32'; + put '38.186,-112.912,Us Blm,Richfield,Hotspring,91,33'; + put '41.833,-112.454,Blue Creek Spring,Brigham City,Hotspring,82,28'; + put '40.526,-111.488,Midway Hot Springs,Salt Lake City,Hotspring,100,38'; + put '40.525,-111.468,Midway Hot Springs,Salt Lake City,Hotspring,104,40'; + put '40.038,-111.529,Castilla Springs,Salt Lake City,Hotspring,104,40'; + put '38.217,-112.904,Dotsons (Radium) Warm Spring,Richfield,Hotspring,91,33'; + put '40.465,-109.221,Split Mountain Warm Springs,Vernal,Hotspring,86,30'; + put '40.788,-112.017,Hobo Warm Spring,Tooele,Hotspring,84,29'; + put '40.788,-111.899,Wasatch Hot Springs,Salt Lake City,Hotspring,108,42'; + put '39.35,-113.515,Tule Spring,Delta,Hotspring,82,28'; + put '39.424,-113.485,Coyote Spring,Delta,Hotspring,82,28'; + put '39.842,-113.392,Fish Springs,Delta,Hotspring,82,28'; + put '39.887,-113.413,North Springs,Delta,Hotspring,82,28'; + put '41.756,-113.603,Warm Spring,Brigham City,Hotspring,81,27'; + put '41.038,-111.656,Como Springs,Ogden,Hotspring,81,27'; + put '40.397,-112.421,Morgans Warm Spring,Tooele,Hotspring,80,27'; + put '39.464,-114.038,Gandy Warm Springs,Ely,Hotspring,81,27'; + put '40.447,-110.828,Warm Springs,Salt Lake City,Hotspring,79,26'; + put '37.7,-110.421,Warm Spring,Escalante,Hotspring,79,26'; + put '40.502,-114.038,Blue Lake Spring,Elko,Hotspring,84,29'; + put '38.503,-112.849,Roosevelt Hot Springs,Richfield,Hotspring,133,56'; + put '38.774,-112.096,Richfield Warm Springs,Richfield,Hotspring,73,23'; + put '40.488,-111.911,Crystal Hot Springs,Salt Lake City,Hotspring,187,86'; + put '38.186,-113.197,Thermo Hot Springs,Richfield,Hotspring,185,85'; + put '38.172,-113.204,Thermo Hot Springs,Richfield,Hotspring,181,83'; + put '39.613,-112.729,"Baker (Abraham, Crater) Hot Spring",Delta,Hotspring,180,82'; + put '38.639,-112.098,Red Hill Hot Spring,Richfield,Hotspring,171,77'; + put '38.633,-112.107,Monroe (Cooper) Hot Springs,Richfield,Hotspring,169,76'; + put '38.613,-112.202,Joseph Hot Springs,Richfield,Hotspring,147,64'; + put '39.906,-113.43,Wilson Health Springs,Delta,Hotspring,142,61'; + put '41.138,-112.175,Hooper Hot Springs,Brigham City,Hotspring,140,60'; + put '41.338,-112.031,Utah Hot Springs,Brigham City,Hotspring,138,59'; + put '38.864,-112.506,Meadow Hot Springs,Richfield,Hotspring,106,41'; + put '40.815,-111.918,Becks Hot Spring,Salt Lake City,Hotspring,133,56'; + put '37.189,-113.272,Dixie (Laverkin) Hot Springs,Cedar City,Hotspring,108,42'; + put '41.659,-112.087,Crystal (Madsens) Hot Springs,Brigham City,Hotspring,129,54'; + put '41.855,-112.158,Udy Hot Springs,Brigham City,Hotspring,124,51'; + put '41.578,-112.23,Stinking Hot Springs,Brigham City,Hotspring,118,48'; + put '40.517,-111.475,Midway Hot Spring,Salt Lake City,Hotspring,115,46'; + put '40.536,-111.478,Warm Ditch Spring,Salt Lake City,Hotspring,115,46'; + put '40.35,-111.905,Saratoga Hot Springs,Salt Lake City,Hotspring,111,44'; + put '40.353,-111.895,Crater Hot Spring,Salt Lake City,Hotspring,111,44'; + put '41.901,-112.999,Coyote Spring,Brigham City,Hotspring,109,43'; + put '41.687,-113.986,Spring (Hot),Brigham City,Hotspring,108,42'; + put '41.582,-112.256,Little Mountain Hot Spring,Brigham City,Hotspring,108,42'; + put '41.822,-113.263,L.G. Carter Springs,Brigham City,Hotspring,77,25'; + put '41.236,-111.924,Ogden Hot Spring,Ogden,Hotspring,135,57'; + put '37.178,-113.634,Snow Spring,Cedar City,Hotspring,70,21'; + put '38.34,-113.22,Woodhouse Spring,Richfield,Hotspring,72,22'; + put '38.155,-112.901,Willow Spring,Richfield,Hotspring,72,22'; + put '38.56,-112.578,Sulphurdale,Richfield,Hotspring,72,22'; + put '38.981,-111.829,Salt Spring,Salina,Hotspring,72,22'; + put '37.174,-112.535,Red Canyon,Cedar City,Hotspring,72,22'; + put '41.808,-113.327,W.R. Carter Springs,Brigham City,Hotspring,70,21'; + put '41.818,-113.311,Larson Springs,Brigham City,Hotspring,70,21'; + put '41.829,-113.654,Head Spring,Brigham City,Hotspring,70,21'; + put '40.653,-112.907,Redlum Spring,Tooele,Hotspring,70,21'; + put '40.458,-111.929,Camp Williams,Salt Lake City,Hotspring,70,21'; + put '40.647,-112.524,Grantsville Warm Springs,Tooele,Hotspring,77,25'; + put '39.183,-111.691,Sterling (Peacock) Warm Spring,Price,Hotspring,72,22'; + put '39.246,-111.645,Livingston Warm Springs,Price,Hotspring,73,23'; + put '38.138,-112.863,Big Maple Spring,Richfield,Hotspring,70,21'; + put '37.393,-113.61,Irvine Spring,Cedar City,Hotspring,70,21'; + put '41.563,-113.954,Kimber (Rose) Spring,Brigham City,Hotspring,68,20'; + put '41.614,-113.613,Warm Spring,Brigham City,Hotspring,68,20'; + put '41.328,-111.826,Patio Springs,Ogden,Hotspring,68,20'; + put '40.172,-112.426,Davis,Tooele,Hotspring,68,20'; + put '40.118,-111.337,Diamond Fork Warm Springs,Salt Lake City,Hotspring,68,20'; + put '39.249,-113.877,Knoll Springs,Delta,Hotspring,68,20'; + put '39.403,-113.863,Twin Springs,Delta,Hotspring,68,20'; + put '39.788,-111.881,Ray Lunt Spring,Price,Hotspring,68,20'; + put '38.762,-112.87,Springs,Richfield,Hotspring,68,20'; + put '38.77,-112.871,Coyote Spring,Richfield,Hotspring,68,20'; + put '37.937,-112.424,Tebbs,Cedar City,Hotspring,68,20'; + put '37.096,-113.447,Warner Valley Spring,Cedar City,Hotspring,70,21'; + put '40.565,-112.738,Deseret Livestock South Springs,Tooele,Hotspring,73,23'; + put '37.158,-113.399,Virgin River Spring,Cedar City,Hotspring,70,21'; + put '39.899,-112.045,Springs,Delta,Hotspring,72,22'; + put '38.603,-112.111,Johnson Warm Spring,Richfield,Hotspring,77,25'; + put '41.722,-112.266,Bothwell Warm Springs,Brigham City,Hotspring,75,24'; + put '40.538,-112.747,Deseret Livestock,Tooele,Hotspring,75,24'; + put '40.733,-112.621,Utah Fish And Game Dept,Tooele,Hotspring,75,24'; + put '40.228,-111.867,Warm Springs,Salt Lake City,Hotspring,75,24'; + put '37.137,-113.513,Warm Spring,Cedar City,Hotspring,75,24'; + put '37.138,-113.528,Green Spring,Cedar City,Hotspring,75,24'; + put '37.166,-113.383,Berry Springs,Cedar City,Hotspring,75,24'; + put '41.834,-112.054,Cutler Warm Spring,Brigham City,Hotspring,73,23'; + put '40.614,-112.709,Horseshoe Springs,Tooele,Hotspring,73,23'; + put '41.239,-112.413,Compton Spring,Brigham City,Hotspring,72,22'; + put '40.743,-112.642,Big Warm Springs,Tooele,Hotspring,72,22'; + put '40.558,-112.739,Deseret Livestock South Spring,Tooele,Hotspring,72,22'; + put '40.39,-112.424,Russells Warm Springs,Tooele,Hotspring,72,22'; + put '41.831,-113.391,Pugsley,Brigham City,Hotspring,73,23'; + put '41.449,-112.442,Poulsen Spring (Salt),Brigham City,Hotspring,72,22'; + put '40.167,-111.622,Wood Springs,Salt Lake City,Hotspring,73,23'; + put '40.234,-111.865,Warm Springs,Salt Lake City,Hotspring,77,25'; + put '39.955,-111.858,Goshen Warm Srings,Price,Hotspring,73,23'; + put '39.334,-113.518,South Tule Spring,Delta,Hotspring,77,25'; + put '39.616,-112.803,Fumarole Butte,Delta,Hotspring,73,23'; + put '40.545,-111.928,East Jordan Canal,Salt Lake City,Hotspring,73,23'; + put '41.643,-112.281,Springs,Brigham City,Hotspring,72,22'; + put '37.29,-80.619,New River White Sulphur Springs,Bluefield,Hotspring,85,29'; + put '37.997,-79.83,Hot Springs,Roanoke,Hotspring,106,41'; + put '37.898,-79.462,Rockbridge Baths,Roanoke,Hotspring,72,22'; + put '38.055,-79.78,Warm Springs,Charlottesvill,Hotspring,95,35'; + put '37.963,-79.861,Healing Springs,Roanoke,Hotspring,86,30'; + put '38.238,-79.65,Bragg Spring,Charlottesvill,Hotspring,75,24'; + put '37.645,-80.238,Sweet Chalybeate Spring,Bluefield,Hotspring,75,24'; + put '38.218,-79.673,Bolar Spring,Charlottesvill,Hotspring,73,23'; + put '37.86,-79.988,Layton Spring,Roanoke,Hotspring,72,22'; + put '37.87,-79.933,Falling Spring,Roanoke,Hotspring,77,25'; + put '37.16,-80.806,Alum Springs,Bluefield,Hotspring,72,22'; + put '46.852,-121.758,Mt Rainier Fumaroles,Yakima,Hotspring,162,72'; + put '46.738,-121.562,Ohanapecosh Hot Springs,Yakima,Hotspring,122,50'; + put '47.707,-121.155,Scenic Hot Springs,Wenatchee,Hotspring,122,50'; + put '47.969,-123.864,Sol Duc Hot Springs,Seattle,Hotspring,122,50'; + put '48.974,-119.475,Hot Lake,Okanogan,Hotspring,122,50'; + put '45.658,-121.962,Moffetts (Bonneville) Hot Springs,The Dalles,Hotspring,97,36'; + put '48.906,-119.455,Poison Lake,Okanogan,Hotspring,122,50'; + put '45.701,-121.728,Collins Hot Springs,The Dalles,Hotspring,122,50'; + put '47.484,-121.391,Goldmeyer Hot Springs,Wenatchee,Hotspring,127,53'; + put '46.202,-121.492,Mount Adams Fumaroles,Yakima,Hotspring,150,66'; + put '46.198,-122.197,Mt St Helens Fumaroles,Hoquiam,Hotspring,190,88'; + put '48.789,-121.804,Dorr Fumarole Field,Concrete,Hotspring,194,90'; + put '48.77,-121.813,Sherman Crater Fumaroles,Concrete,Hotspring,266,130'; + put '45.723,-121.927,Rock Creek Hot Springs,The Dalles,Hotspring,H,H'; + put '48.15,-121.062,Gamma Hot Springs,Concrete,Hotspring,140,60'; + put '46.378,-122.265,Green River Soda Spring,Hoquiam,Hotspring,86,30'; + put '46.575,-121.706,Packwood Hot Spring,Yakima,Hotspring,100,38'; + put '47.201,-121.536,Lester Hot Springs,Wenatchee,Hotspring,120,49'; + put '46.024,-118.771,Warm Springs Canyon Warm Spring,Walla Walla,Hotspring,72,22'; + put '46.345,-121.6,Orr Creek Warm Springs,Yakima,Hotspring,72,22'; + put '46.041,-121.181,Fish Hatchery Warm Spring,Yakima,Hotspring,75,24'; + put '46.752,-121.814,Longmire Mineral Springs,Yakima,Hotspring,77,25'; + put '47.892,-121.342,Garland Mineral Springs,Wenatchee,Hotspring,84,29'; + put '46.452,-120.956,Simcoe Soda Springs,Yakima,Hotspring,90,32'; + put '48.254,-121.17,Sulphur Creek Hot Springs,Concrete,Hotspring,99,37'; + put '48.118,-121.192,Kennedy Hot Spring,Concrete,Hotspring,100,38'; + put '48.763,-121.667,Baker Hot Spring,Concrete,Hotspring,108,42'; + put '47.977,-123.682,Olympic Hot Springs,Seattle,Hotspring,118,48'; + put '45.728,-121.8,St Martins Hot Springs,The Dalles,Hotspring,120,49'; + put '45.821,-121.133,Klickitat Mineral Springs,The Dalles,Hotspring,81,27'; + put '38.163,-79.975,Minnehaha Springs,Charlottesvill,Hotspring,70,21'; + put '37.63,-80.24,Old Sweet Spring,Bluefield,Hotspring,73,23'; + put '39.618,-78.23,Berkeley Springs,Cumberland,Hotspring,72,22'; + put '38.605,-79.353,Thorn Spring,Charlottesvill,Hotspring,72,22'; + put '39.471,-77.877,Swan Pond Spring,Baltimore,Hotspring,72,22'; + put '44.29,-110.504,"Hot Springs,heart Lake Geyser Basi",Ashton,Hotspring,201,94'; + put '44.691,-110.728,Geyser Springs Group,Ashton,Hotspring,201,94'; + put '44.554,-110.812,Fountain Group,Ashton,Hotspring,201,94'; + put '44.543,-110.859,Fairy Springs,Ashton,Hotspring,201,94'; + put '44.485,-110.852,"Biscuit Basin, Sapphire Pool",Ashton,Hotspring,201,94'; + put '44.48,-110.85,Cascade Group,Ashton,Hotspring,201,94'; + put '44.46,-110.844,Black Sand Basin,Ashton,Hotspring,201,94'; + put '44.459,-110.835,Myriad Group,Ashton,Hotspring,201,94'; + put '44.307,-110.526,"Hot Springs,heart Lake Geyser Basi",Ashton,Hotspring,201,94'; + put '44.354,-110.8,Shoshone Geyser Basin,Ashton,Hotspring,203,95'; + put '44.568,-110.805,Quagmire Group,Ashton,Hotspring,203,95'; + put '44.537,-110.801,"White Dome Geyser, Surprise Pool",Ashton,Hotspring,203,95'; + put '44.52,-110.828,Flood Group,Ashton,Hotspring,203,95'; + put '44.471,-110.843,"Daisy Group, Sentinel Geysers",Ashton,Hotspring,203,95'; + put '44.466,-110.839,"Middle Group,tortoise Shell,inkwel",Ashton,Hotspring,203,95'; + put '44.46,-110.828,"Geyser Hill Group, Old Faithful Ge",Ashton,Hotspring,203,95'; + put '44.908,-110.393,Calcite Springs,Ashton,Hotspring,201,94'; + put '44.417,-110.57,West Thumb Geyser Basin,Ashton,Hotspring,203,95'; + put '44.459,-110.817,Southeastern Group,Ashton,Hotspring,198,92'; + put '44.433,-110.581,Potts Hot Spring Basin,Ashton,Hotspring,203,95'; + put '44.421,-110.952,Smoke Jumper Hot Springs,Ashton,Hotspring,198,92'; + put '44.684,-110.753,Monument Geyser Basin,Ashton,Hotspring,197,92'; + put '44.679,-110.746,Beryl Spring,Ashton,Hotspring,198,92'; + put '44.544,-110.258,Turbid Springs,Ashton,Hotspring,198,92'; + put '44.53,-110.297,Steamboat Springs,Ashton,Hotspring,198,92'; + put '44.518,-110.813,"Hot Springs, Rabbit Creek Group",Ashton,Hotspring,198,92'; + put '44.514,-110.828,Rabbit Creek Group,Ashton,Hotspring,198,92'; + put '44.484,-110.873,Mystic Falls Springs,Ashton,Hotspring,198,92'; + put '44.739,-110.324,Josephs Coat Springs,Ashton,Hotspring,199,93'; + put '44.75,-110.714,Gas Vent,Ashton,Hotspring,H,H'; + put '44.282,-110.506,Rustic Geyser,Ashton,Hotspring,199,93'; + put '44.571,-110.811,Morning Mist Springs,Ashton,Hotspring,205,96'; + put '44.733,-110.703,Cistern Spring,Ashton,Hotspring,199,93'; + put '44.697,-110.724,Gibbon Hill Geyser,Ashton,Hotspring,199,93'; + put '44.693,-110.738,Artists Paintpots,Ashton,Hotspring,199,93'; + put '44.69,-110.384,Hot Springs on Bog Creek,Ashton,Hotspring,199,93'; + put '44.526,-110.835,Excelsior Geyser Crater,Ashton,Hotspring,199,93'; + put '44.418,-110.805,Lone Star Geyser,Ashton,Hotspring,199,93'; + put '44.309,-110.654,Hot Springs on Lewis Lake,Ashton,Hotspring,199,93'; + put '44.469,-110.828,Solitary Geyser,Ashton,Hotspring,198,92'; + put '44.433,-110.813,Hot Springs,Ashton,Hotspring,H,H'; + put '44.766,-110.3,Hot Springs,Ashton,Hotspring,H,H'; + put '44.61,-110.438,Hot Springs,Ashton,Hotspring,H,H'; + put '44.607,-110.617,Hot Springs East of Mary Lake,Ashton,Hotspring,H,H'; + put '44.601,-110.632,Gas Vent East of Mary Lake,Ashton,Hotspring,H,H'; + put '44.595,-110.622,Gas Vents Southeast of Mary Lake,Ashton,Hotspring,H,H'; + put '44.572,-110.691,Hot Springs,Ashton,Hotspring,H,H'; + put '44.553,-110.301,Beach Springs,Ashton,Hotspring,H,H'; + put '44.551,-110.85,Springs on Fairy Creek,Ashton,Hotspring,H,H'; + put '44.616,-110.616,Highland Hot Springs,Ashton,Hotspring,H,H'; + put '44.438,-110.977,Hot Springs on Continental Divide,Ashton,Hotspring,H,H'; + put '44.617,-110.432,Mud Geysers,Ashton,Hotspring,H,H'; + put '44.404,-110.824,Hot Springs on Upper Firehole Rive,Ashton,Hotspring,H,H'; + put '44.498,-109.193,Buffalo Bill Reservoir Springs,Cody,Hotspring,W,W'; + put '44.495,-109.222,Buffalo Bill Reservoir Springs,Cody,Hotspring,W,W'; + put '44.482,-109.204,Buffalo Bill Reservoir Springs,Cody,Hotspring,W,W'; + put '44.841,-110.167,"Hot, on Lamar River",Ashton,Hotspring,W,W'; + put '44.734,-110.029,Hot Springs,Ashton,Hotspring,W,W'; + put '44.708,-110.471,Warm Spring,Ashton,Hotspring,W,W'; + put '44.701,-110.036,Hot Springs,Ashton,Hotspring,W,W'; + put '44.508,-110.832,Midway Picnic Ground,Ashton,Hotspring,H,H'; + put '44.715,-110.555,Gas Vents,Ashton,Hotspring,H,H'; + put '44.563,-110.834,River Group,Ashton,Hotspring,205,96'; + put '44.544,-110.788,"Black Warrior Group, Shelf Spring",Ashton,Hotspring,205,96'; + put '44.115,-110.684,Huckleberry Hot Springs,Ashton,Hotspring,B,B'; + put '44.842,-110.732,Apollinaris Spring,Ashton,Hotspring,H,H'; + put '44.825,-110.675,Gas Vents at Horseshoe Hill,Ashton,Hotspring,H,H'; + put '44.781,-110.738,Steam Vents at Roaring Mountain,Ashton,Hotspring,H,H'; + put '44.743,-110.242,Hot Spring Basin Group,Ashton,Hotspring,198,92'; + put '44.752,-110.256,Hot Spring,Ashton,Hotspring,H,H'; + put '44.612,-110.618,Gas Vent,Ashton,Hotspring,H,H'; + put '44.741,-110.699,Gas Vent,Ashton,Hotspring,H,H'; + put '44.566,-110.871,"Flat Cone Spring, Steep Cone",Ashton,Hotspring,205,96'; + put '44.711,-110.468,Hot Springs,Ashton,Hotspring,H,H'; + put '44.708,-110.461,Forest Springs,Ashton,Hotspring,H,H'; + put '44.672,-110.236,Hot Springs,Ashton,Hotspring,H,H'; + put '44.667,-110.282,Hot Springs,Ashton,Hotspring,H,H'; + put '44.656,-110.572,Violet Springs,Ashton,Hotspring,H,H'; + put '44.642,-110.238,Hot Spring,Ashton,Hotspring,H,H'; + put '44.634,-110.234,The Mudkettles,Ashton,Hotspring,H,H'; + put '44.634,-110.226,The Mushpots,Ashton,Hotspring,H,H'; + put '44.532,-110.874,"Imperial Geyser, Spray Geyser",Ashton,Hotspring,192,89'; + put '42.545,-106.725,Alcova Hot Springs,Casper,Hotspring,129,54'; + put '42.75,-109.616,Steele Hot Springs,Lander,Hotspring,102,39'; + put '43.37,-110.445,Granite Hot Spring,Driggs,Hotspring,106,41'; + put '43.008,-108.835,Washakie Mineral Hot Springs,Thermopolis,Hotspring,111,44'; + put '43.907,-110.198,North Buffalo Fork Springs,Driggs,Hotspring,113,45'; + put '43.365,-110.443,Granite Falls Hot Springs,Driggs,Hotspring,112,45'; + put '42.817,-110.997,Johnson Springs,Preston,Hotspring,115,46'; + put '44.723,-110.358,Hot Spring on Moss Creek,Ashton,Hotspring,115,46'; + put '44.681,-110.326,Hot Springs on Upper Sour Creek,Ashton,Hotspring,194,90'; + put '41.45,-106.804,Saratoga Hot Springs,Rawlins,Hotspring,129,54'; + put '44.671,-110.786,Secret Valley Hot Springs,Ashton,Hotspring,95,35'; + put '44.625,-110.433,Mud Volcano,Ashton,Hotspring,131,55'; + put '43.654,-108.194,Thermopolis Hot Springs,Thermopolis,Hotspring,133,56'; + put '44.985,-110.689,Hot River,Ashton,Hotspring,136,58'; + put '44.588,-110.341,Ebro Springs,Ashton,Hotspring,136,58'; + put '44.55,-110.805,Fountain Paint Pot,Ashton,Hotspring,136,58'; + put '44.169,-110.583,Snake Hot Springs,Ashton,Hotspring,136,58'; + put '44.157,-110.699,Crawfish Creek Hot Springs,Ashton,Hotspring,136,58'; + put '44.165,-110.723,Crawfish Creek Hot Springs,Ashton,Hotspring,138,59'; + put '44.711,-110.741,Chocolate Pots,Ashton,Hotspring,124,51'; + put '43.56,-109.732,Geyser (Warm Spring Creek Springs),Thermopolis,Hotspring,84,29'; + put '43.489,-109.605,Jakeys Fork Spring,Thermopolis,Hotspring,68,20'; + put '44.749,-108.188,Little Sheep Mountain Spring,Cody,Hotspring,68,20'; + put '42.249,-104.781,Warm Springs (Immigrants Washtub),Torrington,Hotspring,70,21'; + put '44.608,-108.138,Sheep Mountain Springs,Cody,Hotspring,70,21'; + put '43.583,-108.213,Wind River Canyon Spring,Thermopolis,Hotspring,72,22'; + put '42.702,-107.105,Horse Creek Springs,Casper,Hotspring,75,24'; + put '44.511,-109.156,Needle Hot Springs,Cody,Hotspring,75,24'; + put '43.52,-109.669,Little Warm Spring,Thermopolis,Hotspring,77,25'; + put '43.3,-110.775,Astoria Mineral Hot Springs,Driggs,Hotspring,99,37'; + put '43.543,-110.741,Abercrombie Warm Springs,Driggs,Hotspring,81,27'; + put '44.513,-109.115,De Maris Springs,Cody,Hotspring,97,36'; + put '42.665,-105.394,Douglas Hot Springs,Torrington,Hotspring,86,30'; + put '43.471,-110.835,Boyles Hill Springs,Driggs,Hotspring,86,30'; + put '43.282,-110.019,Kendall Warm Spring,Driggs,Hotspring,86,30'; + put '44.662,-110.768,Iron Spring,Ashton,Hotspring,86,30'; + put '42.492,-108.172,Sweetwater Station Warm Springs,Lander,Hotspring,90,32'; + put '44.742,-110.579,Wolf Lake Springs,Ashton,Hotspring,91,33'; + put '44.513,-109.129,Shoshone Hot Springs,Cody,Hotspring,95,35'; + put '42.828,-110.999,Auburn Hot Springs,Preston,Hotspring,144,62'; + put '43.639,-110.615,Kelly Warm Spring,Driggs,Hotspring,81,27'; + put '44.532,-110.796,Five Sisters Springs,Ashton,Hotspring,192,89'; + put '44.582,-110.314,Vermilion Springs,Ashton,Hotspring,140,60'; + put '44.521,-110.275,Butte Springs,Ashton,Hotspring,187,86'; + put '44.478,-110.867,Hillside Springs,Ashton,Hotspring,187,86'; + put '44.752,-110.418,Hot Springs at Sevenmile Hole,Ashton,Hotspring,189,87'; + put '44.401,-110.936,Hot Springs on Continental Divide,Ashton,Hotspring,189,87'; + put '44.769,-110.269,Rainbow Springs,Ashton,Hotspring,190,88'; + put '44.628,-110.433,Sulphur Caldron,Ashton,Hotspring,190,88'; + put '44.702,-110.767,Sylvan Springs,Ashton,Hotspring,192,89'; + put '44.529,-110.791,White Creek Group,Ashton,Hotspring,185,85'; + put '44.564,-110.869,Queens Laundry,Ashton,Hotspring,192,89'; + put '44.697,-110.375,Hot Springs on Bog Creek,Ashton,Hotspring,185,85'; + put '44.285,-110.9,Bechler River Hot Springs,Ashton,Hotspring,194,90'; + put '44.797,-110.725,Amphitheater Springs,Ashton,Hotspring,196,91'; + put '44.766,-110.429,Washburn Hot Springs,Ashton,Hotspring,196,91'; + put '44.756,-110.308,Coffee Pot Hot Springs,Ashton,Hotspring,196,91'; + put '44.591,-110.321,Hot Springs at Sulphur Hills,Ashton,Hotspring,196,91'; + put '44.556,-110.832,River Group,Ashton,Hotspring,196,91'; + put '44.422,-110.574,West Thumb Geyser Basin,Ashton,Hotspring,196,91'; + put '44.786,-110.74,Semi-Centennial Geyser,Ashton,Hotspring,198,92'; + put '44.653,-110.482,Sulphur Springs,Ashton,Hotspring,194,89'; + put '44.41,-110.953,Summit Lake Hot Springs,Ashton,Hotspring,162,72'; + put '44.761,-110.73,Bijah Spring,Ashton,Hotspring,198,92'; + put '44.781,-110.699,Whiterock Springs,Ashton,Hotspring,144,62'; + put '44.739,-110.258,Hot Spring Basin Group,Ashton,Hotspring,153,67'; + put '44.754,-110.403,Sevenmile Hole,Ashton,Hotspring,154,68'; + put '44.276,-110.636,Hot Springs on Lewis Lake,Ashton,Hotspring,154,68'; + put '44.598,-110.236,Hot Springs In Pelican Valley,Ashton,Hotspring,156,69'; + put '44.142,-110.656,South Entrance Hot Springs,Ashton,Hotspring,156,69'; + put '44.753,-110.724,"Roadside Springs, Frying Pan Sprin",Ashton,Hotspring,158,70'; + put '44.733,-110.712,Horseshoe Spring,Ashton,Hotspring,187,86'; + put '43.958,-110.696,Jackson Lake Hot Springs,Driggs,Hotspring,162,72'; + put '44.187,-110.726,Hot Springs,Ashton,Hotspring,142,61'; + put '44.967,-110.708,Mammoth Hot Springs,Ashton,Hotspring,163,73'; + put '44.475,-110.843,Morning Glory Pool,Ashton,Hotspring,163,73'; + put '44.204,-110.486,Hot Springs on Upper Snake River,Ashton,Hotspring,167,75'; + put '44.299,-110.517,"Heart Lake Geyser Basin, Middle Gr",Ashton,Hotspring,174,79'; + put '44.671,-110.29,Ponuntpa Springs Group,Ashton,Hotspring,180,82'; + put '44.244,-111.022,Boundary Creek Hot Springs,Ashton,Hotspring,181,83'; + put '44.414,-110.817,"Lone Star Geyser Basin, Footbridge",Ashton,Hotspring,183,84'; + put '44.722,-110.701,Echinus Geyser,Ashton,Hotspring,185,85'; + put '44.461,-110.854,Emerald Pool,Ashton,Hotspring,158,70'; + put ';;;;'; + put 'run;'; + put '* ServiceInit end;'; + put '* Service start;'; + put '/* this macro converts the JS input to a WORK table - work.areas */'; + put '%webout(FETCH)'; + put 'proc sql;'; + put 'create table springs as select *'; + put 'from mydb.springs'; + put 'where area in (select area from work.areas);'; + put '/* these macros open the JSON, send the table back, and close the JSON */'; + put '%webout(OPEN)'; + put '%webout(OBJ,springs)'; + put '%webout(CLOSE)'; + put '* Service end;'; +run; +%mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) +filename sascode clear; +%let path=services/files; +%let service=upload; +filename sascode temp lrecl=32767; +data _null_; +file sascode; + put '%macro mf_getuser('; + put ')/*/STORE SOURCE*/;'; + put '%local user;'; + put '%if %symexist(_sasjs_username) %then %let user=&_sasjs_username;'; + put '%else %if %symexist(SYS_COMPUTE_SESSION_OWNER) %then %do;'; + put '%let user=&SYS_COMPUTE_SESSION_OWNER;'; + put '%end;'; + put '%else %if %symexist(_metaperson) %then %do;'; + put '%if %length(&_metaperson)=0 %then %let user=&sysuserid;'; + put '/* sometimes SAS will add @domain extension - remove for consistency */'; + put '/* but be sure to quote in case of usernames with commas */'; + put '%else %let user=%unquote(%scan(%quote(&_metaperson),1,@));'; + put '%end;'; + put '%else %let user=&sysuserid;'; + put '%quote(&user)'; + put '%mend mf_getuser;'; + put '%macro mp_jsonout(action,ds,jref=_webout,dslabel=,fmt=Y'; + put ',engine=DATASTEP'; + put ',missing=NULL'; + put ',showmeta=NO'; + put ')/*/STORE SOURCE*/;'; + put '%local tempds colinfo fmtds i numcols;'; + put '%let numcols=0;'; + put '%if &action=OPEN %then %do;'; + put 'options nobomfile;'; + put 'data _null_;file &jref encoding=''utf-8'' lrecl=200;'; + put 'put ''{"PROCESSED_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''"'';'; + put 'run;'; + put '%end;'; + put '%else %if (&action=ARR or &action=OBJ) %then %do;'; + put '/* force variable names to always be uppercase in the JSON */'; + put 'options validvarname=upcase;'; + put '/* To avoid issues with _webout on EBI - such as encoding diffs and truncation'; + put '(https://support.sas.com/kb/49/325.html) we use temporary files */'; + put 'filename _sjs1 temp lrecl=200 ;'; + put 'data _null_; file _sjs1 encoding=''utf-8'';'; + put 'put ", ""%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":";'; + put 'run;'; + put '/* now write to _webout 1 char at a time */'; + put 'data _null_;'; + put 'infile _sjs1 lrecl=1 recfm=n;'; + put 'file &jref mod lrecl=1 recfm=n;'; + put 'input sourcechar $char1. @@;'; + put 'format sourcechar hex2.;'; + put 'put sourcechar char1. @@;'; + put 'run;'; + put 'filename _sjs1 clear;'; + put '/* grab col defs */'; + put 'proc contents noprint data=&ds'; + put 'out=_data_(keep=name type length format formatl formatd varnum label);'; + put 'run;'; + put '%let colinfo=%scan(&syslast,2,.);'; + put 'proc sort data=&colinfo;'; + put 'by varnum;'; + put 'run;'; + put '/* move meta to mac vars */'; + put 'data _null_;'; + put 'if _n_=1 then call symputx(''numcols'',nobs,''l'');'; + put 'set &colinfo end=last nobs=nobs;'; + put 'name=upcase(name);'; + put '/* fix formats */'; + put 'if type=2 or type=6 then do;'; + put 'typelong=''char'';'; + put 'length fmt $49.;'; + put 'if format='''' then fmt=cats(''$'',length,''.'');'; + put 'else if formatl=0 then fmt=cats(format,''.'');'; + put 'else fmt=cats(format,formatl,''.'');'; + put 'newlen=max(formatl,length);'; + put 'end;'; + put 'else do;'; + put 'typelong=''num'';'; + put 'if format='''' then fmt=''best.'';'; + put 'else if formatl=0 then fmt=cats(format,''.'');'; + put 'else if formatd=0 then fmt=cats(format,formatl,''.'');'; + put 'else fmt=cats(format,formatl,''.'',formatd);'; + put '/* needs to be wide, for datetimes etc */'; + put 'newlen=max(length,formatl,24);'; + put 'end;'; + put '/* 32 char unique name */'; + put 'newname=''sasjs''!!substr(cats(put(md5(name),$hex32.)),1,27);'; + put 'call symputx(cats(''name'',_n_),name,''l'');'; + put 'call symputx(cats(''newname'',_n_),newname,''l'');'; + put 'call symputx(cats(''len'',_n_),newlen,''l'');'; + put 'call symputx(cats(''length'',_n_),length,''l'');'; + put 'call symputx(cats(''fmt'',_n_),fmt,''l'');'; + put 'call symputx(cats(''type'',_n_),type,''l'');'; + put 'call symputx(cats(''typelong'',_n_),typelong,''l'');'; + put 'call symputx(cats(''label'',_n_),coalescec(label,name),''l'');'; + put 'run;'; + put '%let tempds=%substr(_%sysfunc(compress(%sysfunc(uuidgen()),-)),1,32);'; + put '%if &engine=PROCJSON %then %do;'; + put '%if &missing=STRING %then %do;'; + put '%put &sysmacroname: Special Missings not supported in proc json.;'; + put '%put &sysmacroname: Switching to DATASTEP engine;'; + put '%goto datastep;'; + put '%end;'; + put 'data &tempds;set &ds;'; + put '%if &fmt=N %then format _numeric_ best32.;;'; + put '/* PRETTY is necessary to avoid line truncation in large files */'; + put 'filename _sjs2 temp lrecl=131068 encoding=''utf-8'';'; + put 'proc json out=_sjs2 pretty'; + put '%if &action=ARR %then nokeys ;'; + put ';export &tempds / nosastags fmtnumeric;'; + put 'run;'; + put '/* send back to webout */'; + put 'data _null_;'; + put 'infile _sjs2 lrecl=1 recfm=n;'; + put 'file &jref mod lrecl=1 recfm=n;'; + put 'input sourcechar $char1. @@;'; + put 'format sourcechar hex2.;'; + put 'put sourcechar char1. @@;'; + put 'run;'; + put 'filename _sjs2 clear;'; + put '%end;'; + put '%else %if &engine=DATASTEP %then %do;'; + put '%datastep:'; + put '%if %sysfunc(exist(&ds)) ne 1 & %sysfunc(exist(&ds,VIEW)) ne 1'; + put '%then %do;'; + put '%put &sysmacroname: &ds NOT FOUND!!!;'; + put '%return;'; + put '%end;'; + put '%if &fmt=Y %then %do;'; + put 'data _data_;'; + put '/* rename on entry */'; + put 'set &ds(rename=('; + put '%do i=1 %to &numcols;'; + put '&&name&i=&&newname&i'; + put '%end;'; + put '));'; + put '%do i=1 %to &numcols;'; + put 'length &&name&i $&&len&i;'; + put '%if &&typelong&i=num %then %do;'; + put '&&name&i=left(put(&&newname&i,&&fmt&i));'; + put '%end;'; + put '%else %do;'; + put '&&name&i=put(&&newname&i,&&fmt&i);'; + put '%end;'; + put 'drop &&newname&i;'; + put '%end;'; + put 'if _error_ then call symputx(''syscc'',1012);'; + put 'run;'; + put '%let fmtds=&syslast;'; + put '%end;'; + put 'proc format; /* credit yabwon for special null removal */'; + put 'value bart (default=40)'; + put '%if &missing=NULL %then %do;'; + put '._ - .z = null'; + put '%end;'; + put '%else %do;'; + put '._ = [quote()]'; + put '. = null'; + put '.a - .z = [quote()]'; + put '%end;'; + put 'other = [best.];'; + put 'data &tempds;'; + put 'attrib _all_ label='''';'; + put '%do i=1 %to &numcols;'; + put '%if &&typelong&i=char or &fmt=Y %then %do;'; + put 'length &&name&i $32767;'; + put 'format &&name&i $32767.;'; + put '%end;'; + put '%end;'; + put '%if &fmt=Y %then %do;'; + put 'set &fmtds;'; + put '%end;'; + put '%else %do;'; + put 'set &ds;'; + put '%end;'; + put 'format _numeric_ bart.;'; + put '%do i=1 %to &numcols;'; + put '%if &&typelong&i=char or &fmt=Y %then %do;'; + put 'if findc(&&name&i,''"\''!!''0A0D09000E0F01021011''x) then do;'; + put '&&name&i=''"''!!trim('; + put 'prxchange(''s/"/\\"/'',-1, /* double quote */'; + put 'prxchange(''s/\x0A/\n/'',-1, /* new line */'; + put 'prxchange(''s/\x0D/\r/'',-1, /* carriage return */'; + put 'prxchange(''s/\x09/\\t/'',-1, /* tab */'; + put 'prxchange(''s/\x00/\\u0000/'',-1, /* NUL */'; + put 'prxchange(''s/\x0E/\\u000E/'',-1, /* SS */'; + put 'prxchange(''s/\x0F/\\u000F/'',-1, /* SF */'; + put 'prxchange(''s/\x01/\\u0001/'',-1, /* SOH */'; + put 'prxchange(''s/\x02/\\u0002/'',-1, /* STX */'; + put 'prxchange(''s/\x10/\\u0010/'',-1, /* DLE */'; + put 'prxchange(''s/\x11/\\u0011/'',-1, /* DC1 */'; + put 'prxchange(''s/\\/\\\\/'',-1,&&name&i)'; + put '))))))))))))!!''"'';'; + put 'end;'; + put 'else &&name&i=quote(cats(&&name&i));'; + put '%end;'; + put '%end;'; + put 'run;'; + put 'filename _sjs3 temp lrecl=131068 ;'; + put 'data _null_;'; + put 'file _sjs3 encoding=''utf-8'';'; + put 'if _n_=1 then put "[";'; + put 'set &tempds;'; + put 'if _n_>1 then put "," @; put'; + put '%if &action=ARR %then "[" ; %else "{" ;'; + put '%do i=1 %to &numcols;'; + put '%if &i>1 %then "," ;'; + put '%if &action=OBJ %then """&&name&i"":" ;'; + put '"&&name&i"n /* name literal for reserved variable names */'; + put '%end;'; + put '%if &action=ARR %then "]" ; %else "}" ; ;'; + put '/* close out the table */'; + put 'data _null_;'; + put 'file _sjs3 mod encoding=''utf-8'';'; + put 'put '']'';'; + put 'run;'; + put 'data _null_;'; + put 'infile _sjs3 lrecl=1 recfm=n;'; + put 'file &jref mod lrecl=1 recfm=n;'; + put 'input sourcechar $char1. @@;'; + put 'format sourcechar hex2.;'; + put 'put sourcechar char1. @@;'; + put 'run;'; + put 'filename _sjs3 clear;'; + put '%end;'; + put 'proc sql;'; + put 'drop table &colinfo, &tempds;'; + put '%if &showmeta=YES %then %do;'; + put 'filename _sjs4 temp lrecl=131068 encoding=''utf-8'';'; + put 'data _null_;'; + put 'file _sjs4;'; + put 'put ", ""$%lowcase(%sysfunc(coalescec(&dslabel,&ds)))"":{""vars"":{";'; + put 'do i=1 to &numcols;'; + put 'name=quote(trim(symget(cats(''name'',i))));'; + put 'format=quote(trim(symget(cats(''fmt'',i))));'; + put 'label=quote(prxchange(''s/\\/\\\\/'',-1,trim(symget(cats(''label'',i)))));'; + put 'length=quote(trim(symget(cats(''length'',i))));'; + put 'type=quote(trim(symget(cats(''typelong'',i))));'; + put 'if i>1 then put "," @@;'; + put 'put name '':{"format":'' format '',"label":'' label'; + put ''',"length":'' length '',"type":'' type ''}'';'; + put 'end;'; + put 'put ''}}'';'; + put 'run;'; + put '/* send back to webout */'; + put 'data _null_;'; + put 'infile _sjs4 lrecl=1 recfm=n;'; + put 'file &jref mod lrecl=1 recfm=n;'; + put 'input sourcechar $char1. @@;'; + put 'format sourcechar hex2.;'; + put 'put sourcechar char1. @@;'; + put 'run;'; + put 'filename _sjs4 clear;'; + put '%end;'; + put '%end;'; + put '%else %if &action=CLOSE %then %do;'; + put 'data _null_; file &jref encoding=''utf-8'' mod ;'; + put 'put "}";'; + put 'run;'; + put '%end;'; + put '%mend mp_jsonout;'; + put '%macro mm_webout(action,ds,dslabel=,fref=_webout,fmt=Y,missing=NULL'; + put ',showmeta=NO'; + put ');'; + put '%global _webin_file_count _webin_fileref1 _webin_name1 _program _debug'; + put 'sasjs_tables;'; + put '%local i tempds jsonengine;'; + put '/* see https://github.com/sasjs/core/issues/41 */'; + put '%if "%upcase(&SYSENCODING)" ne "UTF-8" %then %let jsonengine=PROCJSON;'; + put '%else %let jsonengine=DATASTEP;'; + put '%if &action=FETCH %then %do;'; + put '%if %str(&_debug) ge 131 %then %do;'; + put 'options mprint notes mprintnest;'; + put '%end;'; + put '%let _webin_file_count=%eval(&_webin_file_count+0);'; + put '/* now read in the data */'; + put '%do i=1 %to &_webin_file_count;'; + put '%if &_webin_file_count=1 %then %do;'; + put '%let _webin_fileref1=&_webin_fileref;'; + put '%let _webin_name1=&_webin_name;'; + put '%end;'; + put 'data _null_;'; + put 'infile &&_webin_fileref&i termstr=crlf;'; + put 'input;'; + put 'call symputx(''input_statement'',_infile_);'; + put 'putlog "&&_webin_name&i input statement: " _infile_;'; + put 'stop;'; + put 'data &&_webin_name&i;'; + put 'infile &&_webin_fileref&i firstobs=2 dsd termstr=crlf encoding=''utf-8'';'; + put 'input &input_statement;'; + put '%if %str(&_debug) ge 131 %then %do;'; + put 'if _n_<20 then putlog _infile_;'; + put '%end;'; + put 'run;'; + put '%let sasjs_tables=&sasjs_tables &&_webin_name&i;'; + put '%end;'; + put '%end;'; + put '%else %if &action=OPEN %then %do;'; + put '/* fix encoding */'; + put 'OPTIONS NOBOMFILE;'; + put '/**'; + put '* check xengine type to avoid the below err message:'; + put '* > Function is only valid for filerefs using the CACHE access method.'; + put '*/'; + put 'data _null_;'; + put 'set sashelp.vextfl(where=(fileref="_WEBOUT"));'; + put 'if xengine=''STREAM'' then do;'; + put 'rc=stpsrv_header(''Content-type'',"text/html; encoding=utf-8");'; + put 'end;'; + put 'run;'; + put '/* setup json */'; + put 'data _null_;file &fref encoding=''utf-8'';'; + put '%if %str(&_debug) ge 131 %then %do;'; + put 'put ''>>weboutBEGIN<<'';'; + put '%end;'; + put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; + put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; + put 'run;'; + put '%end;'; + put '%else %if &action=ARR or &action=OBJ %then %do;'; + put '%mp_jsonout(&action,&ds,dslabel=&dslabel,fmt=&fmt,jref=&fref'; + put ',engine=&jsonengine,missing=&missing,showmeta=&showmeta'; + put ')'; + put '%end;'; + put '%else %if &action=CLOSE %then %do;'; + put '/* To avoid issues with _webout on EBI we use a temporary file */'; + put 'filename _sjsref temp lrecl=131068;'; + put '%if %str(&_debug) ge 131 %then %do;'; + put '/* if debug mode, send back first 10 records of each work table also */'; + put 'options obs=10;'; + put 'data;run;%let tempds=%scan(&syslast,2,.);'; + put 'ods output Members=&tempds;'; + put 'proc datasets library=WORK memtype=data;'; + put '%local wtcnt;%let wtcnt=0;'; + put 'data _null_;'; + put 'set &tempds;'; + put 'if not (upcase(name) =:"DATA"); /* ignore temp datasets */'; + put 'i+1;'; + put 'call symputx(cats(''wt'',i),name,''l'');'; + put 'call symputx(''wtcnt'',i,''l'');'; + put 'data _null_; file _sjsref mod encoding=''utf-8'';'; + put 'put ",""WORK"":{";'; + put '%do i=1 %to &wtcnt;'; + put '%let wt=&&wt&i;'; + put 'data _null_; file _sjsref mod encoding=''utf-8'';'; + put 'dsid=open("WORK.&wt",''is'');'; + put 'nlobs=attrn(dsid,''NLOBS'');'; + put 'nvars=attrn(dsid,''NVARS'');'; + put 'rc=close(dsid);'; + put 'if &i>1 then put '',''@;'; + put 'put " ""&wt"" : {";'; + put 'put ''"nlobs":'' nlobs;'; + put 'put '',"nvars":'' nvars;'; + put '%mp_jsonout(OBJ,&wt,jref=_sjsref,dslabel=first10rows,showmeta=YES)'; + put 'data _null_; file _sjsref mod encoding=''utf-8'';'; + put 'put "}";'; + put '%end;'; + put 'data _null_; file _sjsref mod encoding=''utf-8'';'; + put 'put "}";'; + put 'run;'; + put '%end;'; + put '/* close off json */'; + put 'data _null_;file _sjsref mod encoding=''utf-8'';'; + put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; + put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; + put 'put ",""MF_GETUSER"" : ""%mf_getuser()"" ";'; + put 'put ",""_DEBUG"" : ""&_debug"" ";'; + put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; + put 'put ",""_METAUSER"": " _METAUSER;'; + put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; + put 'put '',"_METAPERSON": '' _METAPERSON;'; + put 'put '',"_PROGRAM" : '' _PROGRAM ;'; + put 'put ",""SYSCC"" : ""&syscc"" ";'; + put 'put ",""SYSENCODING"" : ""&sysencoding"" ";'; + put 'syserrortext=quote(cats(symget(''SYSERRORTEXT'')));'; + put 'put '',"SYSERRORTEXT" : '' syserrortext;'; + put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; + put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; + put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; + put 'put ",""SYSSITE"" : ""&syssite"" ";'; + put 'sysvlong=quote(trim(symget(''sysvlong'')));'; + put 'put '',"SYSVLONG" : '' sysvlong;'; + put 'syswarningtext=quote(cats(symget(''SYSWARNINGTEXT'')));'; + put 'put '',"SYSWARNINGTEXT" : '' syswarningtext;'; + put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; + put 'length memsize $32;'; + put 'memsize="%sysfunc(INPUTN(%sysfunc(getoption(memsize)), best.),sizekmg.)";'; + put 'memsize=quote(cats(memsize));'; + put 'put '',"MEMSIZE" : '' memsize;'; + put 'put "}" @;'; + put '%if %str(&_debug) ge 131 %then %do;'; + put 'put ''>>weboutEND<<'';'; + put '%end;'; + put 'run;'; + put '/* now write to _webout 1 char at a time */'; + put 'data _null_;'; + put 'infile _sjsref lrecl=1 recfm=n;'; + put 'file &fref mod lrecl=1 recfm=n;'; + put 'input sourcechar $char1. @@;'; + put 'format sourcechar hex2.;'; + put 'put sourcechar char1. @@;'; + put 'run;'; + put 'filename _sjsref clear;'; + put '%end;'; + put '%mend mm_webout;'; + put '%macro webout(action,ds,dslabel=,fmt=,missing=NULL,showmeta=NO);'; + put '%mm_webout(&action,ds=&ds,dslabel=&dslabel,fmt=&fmt'; + put ',missing=&missing'; + put ',showmeta=&showmeta'; + put ') %mend;'; + put '/* provide additional debug info */'; + put '%global _program;'; + put '%put &=syscc;'; + put '%put user=%mf_getuser();'; + put '%put pgm=&_program;'; + put '%put timestamp=%sysfunc(datetime(),datetime19.);'; + put '* Service Variables start;'; + put '* Service Variables end;'; + put '* SAS Macros start;'; + put '%macro mp_abort(mac=mp_abort.sas, type=, msg=, iftrue=%str(1=1)'; + put ', errds=work.mp_abort_errds'; + put ', mode=REGULAR'; + put ')/*/STORE SOURCE*/;'; + put '%global sysprocessmode sysprocessname sasjs_stpsrv_header_loc sasjsprocessmode;'; + put '%local fref fid i;'; + put '%if not(%eval(%unquote(&iftrue))) %then %return;'; + put '%put NOTE: /// mp_abort macro executing //;'; + put '%if %length(&mac)>0 %then %put NOTE- called by &mac;'; + put '%put NOTE - &msg;'; + put '%if %symexist(_SYSINCLUDEFILEDEVICE)'; + put '/* abort cancel FILE does not restart outside the INCLUDE on Viya 3.5 */'; + put 'and %superq(SYSPROCESSNAME) ne %str(Compute Server)'; + put '%then %do;'; + put '%if "*&_SYSINCLUDEFILEDEVICE*" ne "**" %then %do;'; + put 'data &errds;'; + put 'iftrue=''1=1'';'; + put 'length mac $100 msg $5000;'; + put 'mac=symget(''mac'');'; + put 'msg=symget(''msg'');'; + put 'run;'; + put 'data _null_;'; + put 'abort cancel FILE;'; + put 'run;'; + put '%return;'; + put '%end;'; + put '%end;'; + put '/* Web App Context */'; + put '%if %symexist(_PROGRAM)'; + put 'or %superq(SYSPROCESSNAME) = %str(Compute Server)'; + put 'or &mode=INCLUDE'; + put '%then %do;'; + put 'options obs=max replace mprint;'; + put '%if "%substr(&sysver,1,1)" ne "4" and "%substr(&sysver,1,1)" ne "5"'; + put '%then %do;'; + put 'options nosyntaxcheck;'; + put '%end;'; + put '%if &mode=INCLUDE %then %do;'; + put '%if %sysfunc(exist(&errds))=1 %then %do;'; + put 'data _null_;'; + put 'set &errds;'; + put 'call symputx(''iftrue'',iftrue,''l'');'; + put 'call symputx(''mac'',mac,''l'');'; + put 'call symputx(''msg'',msg,''l'');'; + put 'putlog (_all_)(=);'; + put 'run;'; + put '%if (&iftrue)=0 %then %return;'; + put '%end;'; + put '%else %do;'; + put '%put &sysmacroname: No include errors found;'; + put '%return;'; + put '%end;'; + put '%end;'; + put '/* extract log errs / warns, if exist */'; + put '%local logloc logline;'; + put '%global logmsg; /* capture global messages */'; + put '%if %symexist(SYSPRINTTOLOG) %then %let logloc=&SYSPRINTTOLOG;'; + put '%else %let logloc=%qsysfunc(getoption(LOG));'; + put 'proc printto log=log;run;'; + put '%let logline=0;'; + put '%if %length(&logloc)>0 %then %do;'; + put 'data _null_;'; + put 'infile &logloc lrecl=5000;'; + put 'input; putlog _infile_;'; + put 'i=1;'; + put 'retain logonce 0;'; + put 'if ('; + put '_infile_=:"%str(WARN)ING" or _infile_=:"%str(ERR)OR"'; + put ') and logonce=0 then'; + put 'do;'; + put 'call symputx(''logline'',_n_);'; + put 'logonce+1;'; + put 'end;'; + put 'run;'; + put '/* capture log including lines BEFORE the err */'; + put '%if &logline>0 %then %do;'; + put 'data _null_;'; + put 'infile &logloc lrecl=5000;'; + put 'input;'; + put 'i=1;'; + put 'stoploop=0;'; + put 'if _n_ ge &logline-15 and stoploop=0 then do until (i>22);'; + put 'call symputx(''logmsg'',catx(''\n'',symget(''logmsg''),_infile_));'; + put 'input;'; + put 'i+1;'; + put 'stoploop=1;'; + put 'end;'; + put 'if stoploop=1 then stop;'; + put 'run;'; + put '%end;'; + put '%end;'; + put '%if %symexist(SYS_JES_JOB_URI) %then %do;'; + put '/* setup webout for Viya */'; + put 'options nobomfile;'; + put '%if "X&SYS_JES_JOB_URI.X"="XX" %then %do;'; + put 'filename _webout temp lrecl=999999 mod;'; + put '%end;'; + put '%else %do;'; + put 'filename _webout filesrvc parenturi="&SYS_JES_JOB_URI"'; + put 'name="_webout.json" lrecl=999999 mod;'; + put '%end;'; + put '%end;'; + put '%else %if %sysfunc(filename(fref,&sasjs_stpsrv_header_loc))=0 %then %do;'; + put 'options nobomfile;'; + put '/* set up http header for SASjs Server */'; + put '%let fid=%sysfunc(fopen(&fref,A));'; + put '%if &fid=0 %then %do;'; + put '%put %str(ERR)OR: %sysfunc(sysmsg());'; + put '%return;'; + put '%end;'; + put '%let rc=%sysfunc(fput(&fid,%str(Content-Type: application/json)));'; + put '%let rc=%sysfunc(fwrite(&fid));'; + put '%let rc=%sysfunc(fclose(&fid));'; + put '%let rc=%sysfunc(filename(&fref));'; + put '%end;'; + put '/* send response in SASjs JSON format */'; + put 'data _null_;'; + put 'file _webout mod lrecl=32000 encoding=''utf-8'';'; + put 'length msg syswarningtext syserrortext $32767 mode $10 ;'; + put 'sasdatetime=datetime();'; + put 'msg=symget(''msg'');'; + put '%if &logline>0 %then %do;'; + put 'msg=cats(msg,''\n\nLog Extract:\n'',symget(''logmsg''));'; + put '%end;'; + put '/* escape the escapes */'; + put 'msg=tranwrd(msg,''\'',''\\'');'; + put '/* escape the quotes */'; + put 'msg=tranwrd(msg,''"'',''\"'');'; + put '/* ditch the CRLFs as chrome complains */'; + put 'msg=compress(msg,,''kw'');'; + put '/* quote without quoting the quotes (which are escaped instead) */'; + put 'msg=cats(''"'',msg,''"'');'; + put 'if symexist(''_debug'') then debug=quote(trim(symget(''_debug'')));'; + put 'else debug=''""'';'; + put 'if symget(''sasjsprocessmode'')=''Stored Program'' then mode=''SASJS'';'; + put 'if mode ne ''SASJS'' then put ''>>weboutBEGIN<<'';'; + put 'put ''{"SYSDATE" : "'' "&SYSDATE" ''"'';'; + put 'put '',"SYSTIME" : "'' "&SYSTIME" ''"'';'; + put 'put '',"sasjsAbort" : [{'';'; + put 'put '' "MSG":'' msg ;'; + put 'put '' ,"MAC": "'' "&mac" ''"}]'';'; + put 'put ",""SYSUSERID"" : ""&sysuserid"" ";'; + put 'put '',"_DEBUG":'' debug ;'; + put 'if symexist(''_metauser'') then do;'; + put '_METAUSER=quote(trim(symget(''_METAUSER'')));'; + put 'put ",""_METAUSER"": " _METAUSER;'; + put '_METAPERSON=quote(trim(symget(''_METAPERSON'')));'; + put 'put '',"_METAPERSON": '' _METAPERSON;'; + put 'end;'; + put 'if symexist(''SYS_JES_JOB_URI'') then do;'; + put 'SYS_JES_JOB_URI=quote(trim(symget(''SYS_JES_JOB_URI'')));'; + put 'put '',"SYS_JES_JOB_URI": '' SYS_JES_JOB_URI;'; + put 'end;'; + put '_PROGRAM=quote(trim(resolve(symget(''_PROGRAM''))));'; + put 'put '',"_PROGRAM" : '' _PROGRAM ;'; + put 'put ",""SYSCC"" : ""&syscc"" ";'; + put 'syserrortext=quote(trim(symget(''syserrortext'')));'; + put 'put ",""SYSERRORTEXT"" : " syserrortext;'; + put 'put ",""SYSHOSTNAME"" : ""&syshostname"" ";'; + put 'put ",""SYSJOBID"" : ""&sysjobid"" ";'; + put 'put ",""SYSSCPL"" : ""&sysscpl"" ";'; + put 'put ",""SYSSITE"" : ""&syssite"" ";'; + put 'sysvlong=quote(trim(symget(''sysvlong'')));'; + put 'put '',"SYSVLONG" : '' sysvlong;'; + put 'syswarningtext=quote(trim(symget(''syswarningtext'')));'; + put 'put ",""SYSWARNINGTEXT"" : " syswarningtext;'; + put 'put '',"END_DTTM" : "'' "%sysfunc(datetime(),E8601DT26.6)" ''" '';'; + put 'put "}" ;'; + put 'if mode ne ''SASJS'' then put ''>>weboutEND<<'';'; + put 'run;'; + put '%put _all_;'; + put '%if "&sysprocessmode " = "SAS Stored Process Server " %then %do;'; + put 'data _null_;'; + put 'putlog ''stpsrvset program err and syscc'';'; + put 'rc=stpsrvset(''program error'', 0);'; + put 'call symputx("syscc",0,"g");'; + put 'run;'; + put '%if &sysscp=WIN'; + put 'and "%substr(%str(&sysvlong ),1,8)"="9.04.01M"'; + put 'and "%substr(%str(&sysvlong ),9,1)">"5" %then %do;'; + put '/* skip approach (below) does not work in windows m6+ envs */'; + put 'endsas;'; + put '%end;'; + put '%else %do;'; + put '/**'; + put '* endsas kills 9.4m3 deployments by orphaning multibridges.'; + put '* Abort variants are ungraceful (non zero return code)'; + put '* This approach lets SAS run silently until the end :-)'; + put '* Caution - fails when called within a %include within a macro'; + put '* Use mp_include() to handle this.'; + put '*/'; + put 'filename skip temp;'; + put 'data _null_;'; + put 'file skip;'; + put 'put ''%macro skip();'';'; + put 'comment ''%mend skip; -> fix lint '';'; + put 'put ''%macro skippy();'';'; + put 'comment ''%mend skippy; -> fix lint '';'; + put 'run;'; + put '%inc skip;'; + put '%end;'; + put '%end;'; + put '%else %if "&sysprocessmode " = "SAS Compute Server " %then %do;'; + put '/* endsas kills the session making it harder to fetch results */'; + put 'data _null_;'; + put 'syswarningtext=symget(''syswarningtext'');'; + put 'syserrortext=symget(''syserrortext'');'; + put 'abort_msg=symget(''msg'');'; + put 'syscc=symget(''syscc'');'; + put 'sysuserid=symget(''sysuserid'');'; + put 'iftrue=symget(''iftrue'');'; + put 'put (_all_)(/=);'; + put 'call symputx(''syscc'',0);'; + put 'abort cancel nolist;'; + put 'run;'; + put '%end;'; + put '%else %do;'; + put '%abort cancel;'; + put '%end;'; + put '%end;'; + put '%else %do;'; + put '%put _all_;'; + put '%abort cancel;'; + put '%end;'; + put '%mend mp_abort;'; + put '/** @endcond */'; + put '%macro mf_isdir(path'; + put ')/*/STORE SOURCE*/;'; + put '%local rc did is_directory fref_t;'; + put '%let is_directory = 0;'; + put '%let rc = %sysfunc(filename(fref_t, %superq(path)));'; + put '%let did = %sysfunc(dopen(&fref_t.));'; + put '%if &did. ^= 0 %then %do;'; + put '%let is_directory = 1;'; + put '%let rc = %sysfunc(dclose(&did.));'; + put '%end;'; + put '%let rc = %sysfunc(filename(fref_t));'; + put '&is_directory'; + put '%mend mf_isdir;'; + put '%macro mf_existds(libds'; + put ')/*/STORE SOURCE*/;'; + put '%if %sysfunc(exist(&libds)) ne 1 & %sysfunc(exist(&libds,VIEW)) ne 1 %then 0;'; + put '%else 1;'; + put '%mend mf_existds;'; + put '%macro mf_getvarlist(libds'; + put ',dlm=%str( )'; + put ',quote=no'; + put ',typefilter=A'; + put ')/*/STORE SOURCE*/;'; + put '/* declare local vars */'; + put '%local outvar dsid nvars x rc dlm q var vtype;'; + put '/* credit Rowland Hale - byte34 is double quote, 39 is single quote */'; + put '%if %upcase("e)=DOUBLE %then %let q=%qsysfunc(byte(34));'; + put '%else %if %upcase("e)=SINGLE %then %let q=%qsysfunc(byte(39));'; + put '/* open dataset in macro */'; + put '%let dsid=%sysfunc(open(&libds));'; + put '%if &dsid %then %do;'; + put '%let nvars=%sysfunc(attrn(&dsid,NVARS));'; + put '%if &nvars>0 %then %do;'; + put '/* add variables with supplied delimeter */'; + put '%do x=1 %to &nvars;'; + put '/* get variable type */'; + put '%let vtype=%sysfunc(vartype(&dsid,&x));'; + put '%if &vtype=&typefilter or &typefilter=A %then %do;'; + put '%let var=&q.%sysfunc(varname(&dsid,&x))&q.;'; + put '%if &var=&q&q %then %do;'; + put '%put &sysmacroname: Empty column found in &libds!;'; + put '%let var=&q. &q.;'; + put '%end;'; + put '%if %quote(&outvar)=%quote() %then %let outvar=&var;'; + put '%else %let outvar=&outvar.&dlm.&var.;'; + put '%end;'; + put '%end;'; + put '%end;'; + put '%let rc=%sysfunc(close(&dsid));'; + put '%end;'; + put '%else %do;'; + put '%put &sysmacroname: Unable to open &libds (rc=&dsid);'; + put '%put &sysmacroname: SYSMSG= %sysfunc(sysmsg());'; + put '%let rc=%sysfunc(close(&dsid));'; + put '%end;'; + put '%do;%unquote(&outvar)%end;'; + put '%mend mf_getvarlist;'; + put '%macro mf_wordsInStr1ButNotStr2('; + put 'Str1= /* string containing words to extract */'; + put ',Str2= /* used to compare with the extract string */'; + put ')/*/STORE SOURCE*/;'; + put '%local count_base count_extr i i2 extr_word base_word match outvar;'; + put '%if %length(&str1)=0 or %length(&str2)=0 %then %do;'; + put '%put base string (str1)= &str1;'; + put '%put compare string (str2) = &str2;'; + put '%return;'; + put '%end;'; + put '%let count_base=%sysfunc(countw(&Str2));'; + put '%let count_extr=%sysfunc(countw(&Str1));'; + put '%do i=1 %to &count_extr;'; + put '%let extr_word=%scan(&Str1,&i,%str( ));'; + put '%let match=0;'; + put '%do i2=1 %to &count_base;'; + put '%let base_word=%scan(&Str2,&i2,%str( ));'; + put '%if &extr_word=&base_word %then %let match=1;'; + put '%end;'; + put '%if &match=0 %then %let outvar=&outvar &extr_word;'; + put '%end;'; + put '&outvar'; + put '%mend mf_wordsInStr1ButNotStr2;'; + put '%macro mf_isblank(param'; + put ')/*/STORE SOURCE*/;'; + put '%sysevalf(%superq(param)=,boolean)'; + put '%mend mf_isblank;'; + put '%macro mp_dropmembers('; + put 'list /* space separated list of datasets / views */'; + put ',libref=WORK /* can only drop from a single library at a time */'; + put ',iftrue=%str(1=1)'; + put ')/*/STORE SOURCE*/;'; + put '%if not(%eval(%unquote(&iftrue))) %then %return;'; + put '%if %mf_isblank(&list) %then %do;'; + put '%put NOTE: nothing to drop!;'; + put '%return;'; + put '%end;'; + put 'proc datasets lib=&libref nolist;'; + put 'delete &list;'; + put 'delete &list /mtype=view;'; + put 'run;'; + put '%mend mp_dropmembers;'; + put '%macro mp_dirlist(path=%sysfunc(pathname(work))'; + put ', fref=0'; + put ', outds=work.mp_dirlist'; + put ', getattrs=NO'; + put ', maxdepth=0'; + put ', level=0 /* The level of recursion to perform. For internal use only. */'; + put ')/*/STORE SOURCE*/;'; + put '%let getattrs=%upcase(&getattrs)XX;'; + put '/* temp table */'; + put '%local out_ds;'; + put 'data;run;'; + put '%let out_ds=%str(&syslast);'; + put '/* drop main (top) table if it exists */'; + put '%if &level=0 %then %do;'; + put '%mp_dropmembers(%scan(&outds,-1,.), libref=WORK)'; + put '%end;'; + put 'data &out_ds(compress=no'; + put 'keep=file_or_folder filepath filename ext msg directory level'; + put ');'; + put 'length directory filepath $500 fref fref2 $8 file_or_folder $6 filename $80'; + put 'ext $20 msg $200 foption $16;'; + put 'if _n_=1 then call missing(of _all_);'; + put 'retain level &level;'; + put '%if &fref=0 %then %do;'; + put 'rc = filename(fref, "&path");'; + put '%end;'; + put '%else %do;'; + put 'fref="&fref";'; + put 'rc=0;'; + put '%end;'; + put 'if rc = 0 then do;'; + put 'did = dopen(fref);'; + put 'if did=0 then do;'; + put 'putlog "NOTE: This directory is empty, or does not exist - &path";'; + put 'msg=sysmsg();'; + put 'put msg;'; + put 'put _all_;'; + put 'stop;'; + put 'end;'; + put '/* attribute is OS-dependent - could be "Directory" or "Directory Name" */'; + put 'numopts=doptnum(did);'; + put 'do i=1 to numopts;'; + put 'foption=doptname(did,i);'; + put 'if foption=:''Directory'' then i=numopts;'; + put 'end;'; + put 'directory=dinfo(did,foption);'; + put 'rc = filename(fref);'; + put 'end;'; + put 'else do;'; + put 'msg=sysmsg();'; + put 'put _all_;'; + put 'stop;'; + put 'end;'; + put 'dnum = dnum(did);'; + put 'do i = 1 to dnum;'; + put 'filename = dread(did, i);'; + put 'filepath=cats(directory,''/'',filename);'; + put 'rc = filename(fref2,filepath);'; + put 'midd=dopen(fref2);'; + put 'dmsg=sysmsg();'; + put 'if did > 0 then file_or_folder=''folder'';'; + put 'rc=dclose(midd);'; + put 'midf=fopen(fref2);'; + put 'fmsg=sysmsg();'; + put 'if midf > 0 then file_or_folder=''file'';'; + put 'rc=fclose(midf);'; + put 'if index(fmsg,''File is in use'') or index(dmsg,''is not a directory'')'; + put 'then file_or_folder=''file'';'; + put 'else if index(fmsg,''Insufficient authorization'') then file_or_folder=''file'';'; + put 'else if file_or_folder='''' then file_or_folder=''locked'';'; + put 'if file_or_folder=''file'' then do;'; + put 'ext = prxchange(''s/.*\.{1,1}(.*)/$1/'', 1, filename);'; + put 'if filename = ext then ext = '' '';'; + put 'end;'; + put 'else do;'; + put 'ext='''';'; + put 'file_or_folder=''folder'';'; + put 'end;'; + put 'output;'; + put 'end;'; + put 'rc = dclose(did);'; + put 'stop;'; + put 'run;'; + put '%if %substr(&getattrs,1,1)=Y %then %do;'; + put 'data &out_ds;'; + put 'set &out_ds;'; + put 'length infoname infoval $60 fref $8;'; + put 'if _n_=1 then call missing(fref);'; + put 'rc=filename(fref,filepath);'; + put 'drop rc infoname fid i close fref;'; + put 'if file_or_folder=''file'' then do;'; + put 'fid=fopen(fref);'; + put 'if fid le 0 then do;'; + put 'msg=sysmsg();'; + put 'putlog "Could not open file:" filepath fid= ;'; + put 'sasname=''_MCNOTVALID_'';'; + put 'output;'; + put 'end;'; + put 'else do i=1 to foptnum(fid);'; + put 'infoname=foptname(fid,i);'; + put 'infoval=finfo(fid,infoname);'; + put 'sasname=compress(infoname, ''_'', ''adik'');'; + put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));'; + put 'if upcase(sasname) ne ''FILENAME'' then output;'; + put 'end;'; + put 'close=fclose(fid);'; + put 'end;'; + put 'else do;'; + put 'fid=dopen(fref);'; + put 'if fid le 0 then do;'; + put 'msg=sysmsg();'; + put 'putlog "Could not open folder:" filepath fid= ;'; + put 'sasname=''_MCNOTVALID_'';'; + put 'output;'; + put 'end;'; + put 'else do i=1 to doptnum(fid);'; + put 'infoname=doptname(fid,i);'; + put 'infoval=dinfo(fid,infoname);'; + put 'sasname=compress(infoname, ''_'', ''adik'');'; + put 'if anydigit(sasname)=1 then sasname=substr(sasname,anyalpha(sasname));'; + put 'if upcase(sasname) ne ''FILENAME'' then output;'; + put 'end;'; + put 'close=dclose(fid);'; + put 'end;'; + put 'run;'; + put 'proc sort;'; + put 'by filepath sasname;'; + put 'proc transpose data=&out_ds out=&out_ds(drop=_:);'; + put 'id sasname;'; + put 'var infoval;'; + put 'by filepath file_or_folder filename ext ;'; + put 'run;'; + put '%end;'; + put 'data &out_ds;'; + put 'set &out_ds(where=(filepath ne ''''));'; + put 'run;'; + put '%if %mf_existds(&outds) %then %do;'; + put '%local basevars appvars newvars;'; + put '%let basevars=%mf_getvarlist(&outds);'; + put '%let appvars=%mf_getvarlist(&out_ds);'; + put '%let newvars=%length(%mf_wordsinstr1butnotstr2(Str1=&appvars,Str2=&basevars));'; + put '%if &newvars>0 %then %do;'; + put 'data &outds;'; + put 'set &outds &out_ds;'; + put 'run;'; + put '%end;'; + put '%else %do;'; + put 'proc append base=&outds data=&out_ds force nowarn;'; + put 'run;'; + put '%end;'; + put '%end;'; + put '%else %do;'; + put 'proc append base=&outds data=&out_ds;'; + put 'run;'; + put '%end;'; + put '/* recursive call */'; + put '%if &maxdepth>&level or &maxdepth=MAX %then %do;'; + put 'data _null_;'; + put 'set &out_ds;'; + put 'where file_or_folder=''folder'';'; + put 'length code $10000;'; + put 'code=cats(''%nrstr(%mp_dirlist(path='',filepath,",outds=&outds"'; + put ',",getattrs=&getattrs,level=%eval(&level+1),maxdepth=&maxdepth))");'; + put 'put code=;'; + put 'call execute(code);'; + put 'run;'; + put '%end;'; + put '/* tidy up */'; + put 'proc sql;'; + put 'drop table &out_ds;'; + put '%mend mp_dirlist;'; + put '%macro mp_binarycopy('; + put 'inloc= /* full path and filename of the object to be copied */'; + put ',outloc= /* full path and filename of object to be created */'; + put ',inref=____in /* override default to use own filerefs */'; + put ',outref=____out /* override default to use own filerefs */'; + put ',mode=CREATE'; + put ')/*/STORE SOURCE*/;'; + put '%local mod;'; + put '%if &mode=APPEND %then %let mod=mod;'; + put '/* these IN and OUT filerefs can point to anything */'; + put '%if &inref = ____in %then %do;'; + put 'filename &inref &inloc lrecl=1048576 ;'; + put '%end;'; + put '%if &outref=____out %then %do;'; + put 'filename &outref &outloc lrecl=1048576 &mod;'; + put '%end;'; + put '/* copy the file byte-for-byte */'; + put 'data _null_;'; + put 'infile &inref lrecl=1 recfm=n;'; + put 'file &outref &mod recfm=n;'; + put 'input sourcechar $char1. @@;'; + put 'format sourcechar hex2.;'; + put 'put sourcechar char1. @@;'; + put 'run;'; + put '%if &inref = ____in %then %do;'; + put 'filename &inref clear;'; + put '%end;'; + put '%if &outref=____out %then %do;'; + put 'filename &outref clear;'; + put '%end;'; + put '%mend mp_binarycopy;'; + put '%macro mf_mval(var);'; + put '%if %symexist(&var) %then %do;'; + put '%superq(&var)'; + put '%end;'; + put '%mend mf_mval;'; + put '%macro mf_trimstr(basestr,trimstr);'; + put '%local baselen trimlen trimval;'; + put '/* return if basestr is shorter than trimstr (or 0) */'; + put '%let baselen=%length(%superq(basestr));'; + put '%let trimlen=%length(%superq(trimstr));'; + put '%if &baselen < &trimlen or &baselen=0 %then %return;'; + put '/* obtain the characters from the end of basestr */'; + put '%let trimval=%qsubstr(%superq(basestr)'; + put ',%length(%superq(basestr))-&trimlen+1'; + put ',&trimlen);'; + put '/* compare and if matching, chop it off! */'; + put '%if %superq(basestr)=%superq(trimstr) %then %do;'; + put '%return;'; + put '%end;'; + put '%else %if %superq(trimval)=%superq(trimstr) %then %do;'; + put '%qsubstr(%superq(basestr),1,%length(%superq(basestr))-&trimlen)'; + put '%end;'; + put '%else %do;'; + put '&basestr'; + put '%end;'; + put '%mend mf_trimstr;'; + put '%macro mf_getplatform(switch'; + put ')/*/STORE SOURCE*/;'; + put '%local a b c;'; + put '%if &switch.NONE=NONE %then %do;'; + put '%if %symexist(sasjsprocessmode) %then %do;'; + put '%if &sasjsprocessmode=Stored Program %then %do;'; + put 'SASJS'; + put '%return;'; + put '%end;'; + put '%end;'; + put '%if %symexist(sysprocessmode) %then %do;'; + put '%if "&sysprocessmode"="SAS Object Server"'; + put 'or "&sysprocessmode"= "SAS Compute Server" %then %do;'; + put 'SASVIYA'; + put '%end;'; + put '%else %if "&sysprocessmode"="SAS Stored Process Server"'; + put 'or "&sysprocessmode"="SAS Workspace Server"'; + put '%then %do;'; + put 'SASMETA'; + put '%return;'; + put '%end;'; + put '%else %do;'; + put 'BASESAS'; + put '%return;'; + put '%end;'; + put '%end;'; + put '%else %if %symexist(_metaport) or %symexist(_metauser) %then %do;'; + put 'SASMETA'; + put '%return;'; + put '%end;'; + put '%else %do;'; + put 'BASESAS'; + put '%return;'; + put '%end;'; + put '%end;'; + put '%else %if &switch=SASSTUDIO %then %do;'; + put '/* return the version of SAS Studio else 0 */'; + put '%if %mf_mval(_CLIENTAPP)=%str(SAS Studio) %then %do;'; + put '%let a=%mf_mval(_CLIENTVERSION);'; + put '%let b=%scan(&a,1,.);'; + put '%if %eval(&b >2) %then %do;'; + put '&b'; + put '%end;'; + put '%else 0;'; + put '%end;'; + put '%else 0;'; + put '%end;'; + put '%else %if &switch=VIYARESTAPI %then %do;'; + put '%mf_trimstr(%sysfunc(getoption(servicesbaseurl)),/)'; + put '%end;'; + put '%mend mf_getplatform;'; + put '%macro mf_getuniquefileref(prefix=_,maxtries=1000,lrecl=32767);'; + put '%local rc fname;'; + put '%if &prefix=0 %then %do;'; + put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; + put '%if &rc %then %put %sysfunc(sysmsg());'; + put '&fname'; + put '%end;'; + put '%else %do;'; + put '%local x len;'; + put '%let len=%eval(8-%length(&prefix));'; + put '%let x=0;'; + put '%do x=0 %to &maxtries;'; + put '%let fname=&prefix%substr(%sysfunc(ranuni(0)),3,&len);'; + put '%if %sysfunc(fileref(&fname)) > 0 %then %do;'; + put '%let rc=%sysfunc(filename(fname,,temp,lrecl=&lrecl));'; + put '%if &rc %then %put %sysfunc(sysmsg());'; + put '&fname'; + put '%return;'; + put '%end;'; + put '%end;'; + put '%put unable to find available fileref after &maxtries attempts;'; + put '%end;'; + put '%mend mf_getuniquefileref;'; + put '%macro mp_webin();'; + put '/* prepare global variables */'; + put '%global _webin_file_count'; + put '_webin_filename _webin_filename1'; + put '_webin_fileref _webin_fileref1'; + put '_webin_fileuri _webin_fileuri1'; + put '_webin_name _webin_name1'; + put ';'; + put '/* create initial versions */'; + put '%let _webin_file_count=%eval(&_webin_file_count+0);'; + put '%let _webin_filename1=%sysfunc(coalescec(&_webin_filename1,&_webin_filename));'; + put '%let _webin_fileref1=%sysfunc(coalescec(&_webin_fileref1,&_webin_fileref));'; + put '%let _webin_fileuri1=%sysfunc(coalescec(&_webin_fileuri1,&_webin_fileuri));'; + put '%let _webin_name1=%sysfunc(coalescec(&_webin_name1,&_webin_name));'; + put '/* If Viya, create temporary fileref(s) */'; + put '%local i;'; + put '%if %mf_getplatform()=SASVIYA %then %do i=1 %to &_webin_file_count;'; + put '%let _webin_fileref&i=%mf_getuniquefileref();'; + put 'filename &&_webin_fileref&i filesrvc "&&_webin_fileuri&i";'; + put '%end;'; + put '%mend mp_webin;'; + put '* SAS Macros end;'; + put '* SAS Includes start;'; + put '* SAS Includes end;'; + put '* Binary Files start;'; + put '* Binary Files end;'; + put '* ServiceInit start;'; + put 'libname mydb (work);'; + put 'data mydb.springs ;'; + put 'attrib'; + put 'Latitude length= 8'; + put 'Longitude length= 8'; + put 'Name length= $34'; + put 'Area length= $14'; + put 'Type length= $9'; + put 'Farenheit length= 8'; + put 'Celsius length= 8'; + put ';'; + put 'infile cards dsd;'; + put 'input'; + put 'Latitude'; + put 'Longitude'; + put 'Name :$char.'; + put 'Area :$char.'; + put 'Type :$char.'; + put 'Farenheit'; + put 'Celsius'; + put ';'; + put 'missing a b c d e f g h i j k l m n o p q r s t u v w x y z _;'; + put 'datalines4;'; + put '51.925,-177.16,Fumaroles on Kanaga Island,Adak,Hotspring,219,104'; + put '65.858,-164.71,Serpentine Hot Springs,Bendeleben,Hotspring,171,77'; + put '53.851,-166.918,Hot Springs Near Makushin Volcano,Unalaska,Hotspring,H,H'; + put '53.877,-166.448,Hot Springs Near Summer Bay,Unalaska,Hotspring,H,H'; + put '52.27,-174.042,Hot Springs on Atka Island,Atka,Hotspring,H,H'; + put '52.34,-174.26,Hot Springs on Atka Island,Atka,Hotspring,H,H'; + put '52.358,-172.317,Hot Spring on Seguam Island,Seguam,Hotspring,H,H'; + put '52.84,-169.9,Chuginadak Hot Springs,Samalga Island,Hotspring,H,H'; + put '52.96,-169.71,Hot Spring on Kagamil Island,Samalga Island,Hotspring,H,H'; + put '51.94,-178.5,Hot Spring on Little Sitkin Island,Rat Islands,Hotspring,H,H'; + put '51.963,-178.491,Fumaroles on Little Sitkin Island,Rat Islands,Hotspring,H,H'; + put '51.775,-178.793,Fumaroles on Gareloi Island,Gareloi Island,Hotspring,H,H'; + put '53.207,-168.445,Hot Springs Near Geyser Bight,Umnak,Hotspring,H,H'; + put '53.892,-166.93,Makushin Volcano Fumaroles,Unalaska,Hotspring,310,154'; + put '54.9,-162.885,Hot Spring on Amagat Island,False Pass,Hotspring,H,H'; + put '53.213,-168.463,Hot Springs Near Geyser Bight,Umnak,Hotspring,216,102'; + put '53.223,-168.477,Hot Springs Near Geyser Bight,Umnak,Hotspring,214,101'; + put '53.443,-168.092,Thermal Springs In Okmok Caldera,Umnak,Hotspring,212,100'; + put '52.042,-176.108,Hot Springs on Great Sitkin Island,Adak,Hotspring,210,99'; + put '55.983,-131.661,Bailey Hot Spring,Ketchikan,Hotspring,198,92'; + put '53.242,-168.365,Hot Springs Near Hot Springs Cove,Umnak,Hotspring,192,89'; + put '54.157,-165.85,Hot Springs Near Hot Springs Bay,Unimak,Hotspring,181,83'; + put '58.033,-136.017,Hot Springs North End Tenakee Inle,Mt. Fairweathe,Hotspring,180,82'; + put '65.093,-164.922,Pilgrim Springs,Bendeleben,Hotspring,178,81'; + put '57.831,-156.513,W Ukinek Spring,Ugashik,Hotspring,178,81'; + put '65.459,-153.312,Little Melozitna Hot Springs,Melozitna,Hotspring,176,80'; + put '51.81,-177.79,Hot Spring on Tanaga Island,Adak,Hotspring,H,H'; + put '65.233,-144.483,Hot Springs on Big Windy Creek,Circle,Hotspring,H,H'; + put '55.334,-162.137,Hot Spring at West End Emmons Lake,Cold Bay,Hotspring,68,20'; + put '66.197,-154.006,Tunalkten Lake Hot Spring,Hughes,Hotspring,.,.'; + put '67.403,-153.883,Hot Spring Near Arrigetch Peaks,Survey Pass,Hotspring,W,W'; + put '65.047,-142.848,Hot Spring on Flat Creek,Charley River,Hotspring,W,W'; + put '63.683,-151.233,Hot Springs Near Glacier,Mt. Mckinley,Hotspring,W,W'; + put '63.883,-150.717,Hot Springs East of Diamond,Mt. Mckinley,Hotspring,W,W'; + put '62.45,-157.933,Hot Spring Near Flat,Iditarod,Hotspring,W,W'; + put '60.837,-142.42,Hot Spring on Twelvemile Creek,Bering Glacier,Hotspring,W,W'; + put '56.58,-132.18,South Stikine Spring,Petersburg,Hotspring,W,W'; + put '52.87,-173.13,Hot Spring on Attu Island,Attu,Hotspring,W,W'; + put '65.908,-154.993,Deniktow Ridge Hot Springs,Melozitna,Hotspring,H,H'; + put '53.95,-168.037,Hot Springs on Bogoslof Island,Umnak,Hotspring,H,H'; + put '65.45,-150,Hot Spring Near Little Minook Cr,Tanana,Hotspring,H,H'; + put '51.967,-178.444,Fumaroles on Little Sitkin Island,Rat Islands,Hotspring,H,H'; + put '64.002,-156.3,Hot Spring on Tributary of Innoko,Nulato,Hotspring,H,H'; + put '61.058,-160.692,Hot Spring Near Tuluksak River,Russian Missio,Hotspring,H,H'; + put '61.363,-157.733,Hot Springs on Upper Chuilnuk Rive,Sleetmute,Hotspring,H,H'; + put '61.267,-151.238,Hot Lake In Bottom of Crater Peak,Tyonek,Hotspring,H,H'; + put '58.24,-155.09,Hot Spring Near Katmai Pass,Mt. Katmai,Hotspring,H,H'; + put '58.27,-154.89,Hot Springs Near Mt Katmai,Mt. Katmai,Hotspring,H,H'; + put '58.92,-153.98,Hot Spring West of Cape Douglas,Afognak,Hotspring,H,H'; + put '55.368,-161.961,Fumarole,Port Moller,Hotspring,H,H'; + put '54.18,-165.41,Hot Springs on Akun Island,Unimak,Hotspring,H,H'; + put '54.23,-165.66,Hot Springs on Akun Island,Unimak,Hotspring,H,H'; + put '54.66,-164.55,Hot Spring on Unimak Island,Unimak,Hotspring,H,H'; + put '65.97,-154.033,Pocahontas Hot Springs,Melozitna,Hotspring,H,H'; + put '65.216,-149.993,Hutlinana Hot Springs,Livengood,Hotspring,109,43'; + put '57.085,-134.839,Baranof Warm Springs,Sitka,Hotspring,124,51'; + put '67.283,-155.067,Reed River Hot Spring,Survey Pass,Hotspring,122,50'; + put '66.15,-157.117,Hot Springs Near South Bm,Shungnak,Hotspring,122,50'; + put '66.233,-157.583,Hot Springs on Hawk River,Shungnak,Hotspring,122,50'; + put '65.81,-151.237,Kilo Hot Spring,Tanana,Hotspring,122,50'; + put '56.717,-132.005,Chief Shakes Hot Springs,Petersburg,Hotspring,122,50'; + put '69.33,-144.044,Okpilak Springs,Mt. Michelson,Hotspring,119,49'; + put '65.367,-161.25,Granite Mountain Hot Springs,Candle,Hotspring,120,49'; + put '57.644,-135.333,Nylen Hot Springs,Sitka,Hotspring,120,49'; + put '65.963,-150.919,Ray River Hot Spring,Tanana,Hotspring,117,47'; + put '64.924,-154.837,Horner Hot Springs,Ruby,Hotspring,117,47'; + put '65.267,-155.28,Hot Springs Near Dulbi River,Melozitna,Hotspring,126,52'; + put '57.807,-136.341,White Sulphur Springs (Hooniah H S,Sitka,Hotspring,111,44'; + put '57.781,-135.217,Tenakee Hot Springs,Sitka,Hotspring,109,43'; + put '52.19,-174.25,Hot Springs on Atka Island,Atka,Hotspring,167,75'; + put '55.334,-133.641,Dalton (Craig) Hot Springs,Craig,Hotspring,109,43'; + put '51.944,-178.547,Fumaroles on Little Sitkin Island,Rat Islands,Hotspring,H,H'; + put '57.771,-135.82,Hot Spring North Arm Peril Strait,Sitka,Hotspring,100,38'; + put '53.848,-166.873,Hot Springs Near Makushin Volcano,Unalaska,Hotspring,94,34'; + put '69.627,-146.027,Red Hill Spring,Mt. Michelson,Hotspring,91,33'; + put '62.081,-145.007,Upper Klawasi Warm Springs,Gulkana,Hotspring,86,30'; + put '62.058,-145.222,Mineral Spring (Lower Klawasi Cone,Gulkana,Hotspring,82,28'; + put '56.68,-131.882,Barnes Lake Hot Springs,Bradfield Cana,Hotspring,79,26'; + put '56.928,-158.12,Surprise Lake Hot Spring,Chignik,Hotspring,73,23'; + put '56.667,-132.28,Twin Lakes Hot Springs,Petersburg,Hotspring,70,21'; + put '66.383,-157.517,Warm Spring Near Purcell Mountain,Shungnak,Hotspring,68,20'; + put '57.348,-135.385,Hot Spring Near Fish Bay,Sitka,Hotspring,117,47'; + put '65.983,-150.56,Hot Springs on Lower Ray River,Tanana,Hotspring,142,61'; + put '55.863,-160.493,Hot Spring Near Port Moller,Port Moller,Hotspring,160,71'; + put '53.253,-168.358,Hot Springs Near Hot Springs Cove,Umnak,Hotspring,158,70'; + put '51.97,-176.61,Hot Springs on Adak Island,Adak,Hotspring,154,68'; + put '65.053,-146.057,Chena Hot Springs,Circle,Hotspring,153,67'; + put '58.37,-137.09,Hot Springs Near Icy Point,Mt. Fairweathe,Hotspring,153,67'; + put '56.836,-135.374,Goddard Hot Springs,Port Alexander,Hotspring,153,67'; + put '66.342,-150.85,Kanuti Hot Springs,Bettles,Hotspring,151,66'; + put '64.85,-162.3,Clear Creek Hot Springs,Solomon,Hotspring,149,65'; + put '53.233,-168.3,Hot Spring on Umnak Island,Umnak,Hotspring,149,65'; + put '61.2,-159.863,Hot Springs Near Ophir Creek,Russian Missio,Hotspring,145,63'; + put '57.865,-156.499,Gas Rocks Hot Spring,Ugashik,Hotspring,127,53'; + put '51.762,-178.77,Fumaroles on Gareloi Island,Gareloi Island,Hotspring,144,62'; + put '66.367,-156.767,Hot Springs Near Division Bm,Shungnak,Hotspring,140,60'; + put '64.7,-162.467,Hot Spring Near Kwiniuk River,Solomon,Hotspring,106,41'; + put '65.274,-148.847,Tolovana Hot Springs,Livengood,Hotspring,140,60'; + put '55.933,-131.559,Bell Island Hot Springs,Ketchikan,Hotspring,165,74'; + put '57.178,-157.015,Hot Spring Near Mother Goose Lake,Ugashik,Hotspring,138,59'; + put '65.483,-144.637,Circle Hot Springs,Circle,Hotspring,135,57'; + put '56.233,-131.267,Bradfield Canal Hot Springs,Bradfield Cana,Hotspring,135,57'; + put '65.006,-150.633,Manley Hot Springs,Tanana,Hotspring,133,56'; + put '65.129,-154.692,Melozi (Melozitna) Springs,Melozitna,Hotspring,131,55'; + put '66.217,-149.547,Dall Hot Springs,Beaver,Hotspring,129,54'; + put '55.217,-162.483,Hot Springs East of Cold Bay,Cold Bay,Hotspring,129,54'; + put '65.217,-162.9,Hot Springs Near Lava Creek,Bendeleben,Hotspring,127,53'; + put '54.944,-163.251,Hot Springs Near Morzhovoi,False Pass,Hotspring,145,63'; + put '36.48,-91.053,Warm Springs,Poplar Bluff,Hotspring,82,28'; + put '34.384,-93.607,Caddo Gap Springs,Little Rock,Hotspring,95,35'; + put '34.321,-93.739,Spring on Redland Mountain,Little Rock,Hotspring,77,25'; + put '34.406,-93.908,Spring on Little Missouri River,Little Rock,Hotspring,74,23'; + put '34.542,-93.024,Big Chalybeate Spring,Little Rock,Hotspring,79,26'; + put '34.513,-93.053,Hot Springs,Little Rock,Hotspring,147,64'; + put '33.008,-109.778,Grapevine Spring,Clifton,Hotspring,91,33'; + put '32.984,-113.324,Agua Caliente Springs,Ajo,Hotspring,102,39'; + put '34.563,-113.497,Kaiser Hot Spring,Prescott,Hotspring,99,37'; + put '34.076,-111.708,Spring (Hot),Holbrook,Hotspring,99,37'; + put '33.17,-110.528,Coolidge Dam Warm Spring,Mesa,Hotspring,99,37'; + put '34.695,-113.572,Cofer Hot Spring,Prescott,Hotspring,97,36'; + put '33.209,-110.818,Pioneer Spring,Mesa,Hotspring,91,33'; + put '33.988,-112.362,Castle Hot Springs,Phoenix,Hotspring,115,46'; + put '32.345,-110.247,Warm Springs,Tucson,Hotspring,91,33'; + put '36.196,-113.081,Lava Warm Springs,Grand Canyon,Hotspring,90,32'; + put '33.068,-109.975,Warm Spring,Clifton,Hotspring,90,32'; + put '31.943,-113.013,Quitobaquito Springs,Lukeville,Hotspring,90,32'; + put '31.695,-110.963,Agua Caliente Spring,Nogales,Hotspring,90,32'; + put '33.075,-109.298,Seep,Clifton,Hotspring,95,35'; + put '34.357,-111.71,Verde Hot Springs,Holbrook,Hotspring,104,40'; + put '32.998,-109.901,Indian Hot Springs,Silver City,Hotspring,118,48'; + put '33.669,-111.165,Roosevelt Dam Springs,Mesa,Hotspring,118,48'; + put '32.336,-110.24,Hookers Hot Springs,Tucson,Hotspring,127,53'; + put '33.4,-109.152,Hannah Hot Spring,Clifton,Hotspring,133,56'; + put '33.08,-109.303,Hot Spring,Clifton,Hotspring,138,59'; + put '32.741,-114.068,Radium Hot Springs,El Centro,Hotspring,140,60'; + put '32.971,-109.35,Gillard Hot Springs,Silver City,Hotspring,180,82'; + put '35.984,-114.742,Hot Spring,Kingman,Hotspring,H,H'; + put '33.78,-110.317,Warm Spring,Mesa,Hotspring,W,W'; + put '36.418,-113.956,Pakoon Springs,Grand Canyon,Hotspring,86,30'; + put '33.493,-112.94,El Dorado Hot Springs,Phoenix South,Hotspring,112,44'; + put '34.896,-114.308,Oatman Warm Springs,Needles,Hotspring,91,33'; + put '33.055,-109.295,Clifton Hot Springs,Clifton,Hotspring,102,39'; + put '34.445,-112.693,Spring,Prescott,Hotspring,72,22'; + put '32.337,-110.708,Mercer Spring,Tucson,Hotspring,77,25'; + put '34.649,-111.744,Soda Spring,Holbrook,Hotspring,75,24'; + put '33.253,-110.703,Spring,Mesa,Hotspring,75,24'; + put '31.362,-109.265,Astin Spring,Douglas,Hotspring,75,24'; + put '35.169,-113.851,Frost Mine Spring,Williams,Hotspring,70,21'; + put '31.673,-109.902,Antelope Spring,Douglas,Hotspring,79,26'; + put '35.213,-113.425,Casa Grande Spring,Williams,Hotspring,72,22'; + put '33.51,-110.403,Cassadore Spring,Mesa,Hotspring,73,23'; + put '34.32,-111.453,Tonto Natural Bridge Spring,Holbrook,Hotspring,72,22'; + put '34.405,-111.602,Spring,Holbrook,Hotspring,72,22'; + put '34.436,-109.402,Salado Springs,Saint Johns,Hotspring,72,22'; + put '31.592,-109.51,Lewis Spring,Douglas,Hotspring,68,20'; + put '33.046,-109.44,Eagle Creek Hot Springs,Clifton,Hotspring,97,36'; + put '36.509,-111.852,Colorado Pool,Marble Canyon,Hotspring,86,30'; + put '33.062,-109.482,Warm Spring,Clifton,Hotspring,73,23'; + put '31.637,-110.703,Monkey Spring,Nogales,Hotspring,82,28'; + put '32.281,-110.73,Agua Caliente,Tucson,Hotspring,86,30'; + put '32.327,-110.228,N-O Spring,Tucson,Hotspring,73,23'; + put '32.983,-110.373,Warm Spring,Tucson,Hotspring,79,26'; + put '33.152,-110.639,Mescal Warm Spring,Mesa,Hotspring,84,29'; + put '33.163,-110.662,Spring,Mesa,Hotspring,82,28'; + put '35.077,-113.267,Trout Creek Spring,Williams,Hotspring,81,27'; + put '33.438,-110.213,Warm Springs,Mesa,Hotspring,86,30'; + put '36.895,-113.913,Springs,Grand Canyon,Hotspring,79,26'; + put '35.96,-114.725,Hot Spring,Kingman,Hotspring,86,30'; + put '34.925,-114.221,Caliche Spring,Needles,Hotspring,79,26'; + put '33.915,-112.332,Mitchell Spring,Phoenix,Hotspring,79,26'; + put '33.831,-110.574,Salt Banks,Mesa,Hotspring,78,26'; + put '34.91,-113.608,Tom Brown Warm Spring,Prescott,Hotspring,82,28'; + put '38.873,-122.689,Seigler Springs,Santa Rosa,Hotspring,126,52'; + put '36.814,-117.763,Palm Spring,Death Valley,Hotspring,120,49'; + put '34.498,-119.341,Stingleys Hot Springs,Los Angeles,Hotspring,123,51'; + put '33.67,-117.325,"Wrenden Hot Sprs, Elsinore Hot Spr",Santa Ana,Hotspring,125,52'; + put '37.253,-118.373,Keough Hot Springs,Mariposa,Hotspring,124,51'; + put '36.229,-118.302,Jordan Hot Springs,Fresno,Hotspring,124,51'; + put '34.502,-119.346,Vickers Hot Springs,Los Angeles,Hotspring,124,51'; + put '36.123,-121.64,Slates Hot Springs,Santa Cruz,Hotspring,122,50'; + put '35.881,-118.67,California Hot Springs,Bakersfield,Hotspring,122,50'; + put '38.788,-122.777,Sulphur Creek,Santa Rosa,Hotspring,120,49'; + put '37.648,-118.806,Hot Springs,Mariposa,Hotspring,129,54'; + put '36.703,-120.86,Mercey Hot Springs,Santa Cruz,Hotspring,119,48'; + put '33.589,-117.511,San Juan Hot Springs,Santa Ana,Hotspring,120,49'; + put '38.785,-122.655,Harbin Springs,Santa Rosa,Hotspring,120,49'; + put '37.677,-118.79,Dehy Hot Spring,Mariposa,Hotspring,134,57'; + put '39.183,-122.7,Bartlett Springs,Ukiah,Hotspring,144,62'; + put '36.234,-121.546,Tassajara Hot Springs,Santa Cruz,Hotspring,144,62'; + put '36.144,-120.555,Coalinga Mineral Springs,Santa Cruz,Hotspring,112,44'; + put '39.033,-122.445,Jones Fountain of Life Spring,Ukiah,Hotspring,142,61'; + put '35.575,-118.534,"Miracle Hot Sprs, Hobo Hot Sprs",Bakersfield,Hotspring,119,48'; + put '33.284,-116.631,Warner Hot Spring,Santa Ana,Hotspring,138,59'; + put '38.237,-119.326,Buckeye Hot Spring,Walker Lake,Hotspring,140,60'; + put '41.266,-120.08,Hot Springs (Menlo Baths),Alturas,Hotspring,135,57'; + put '33.753,-117.495,Glen Ivy Hot Springs,Santa Ana,Hotspring,131,55'; + put '37.802,-118.532,Benton Hot Springs,Mariposa,Hotspring,134,57'; + put '38.691,-123.024,Skaggs Springs,Santa Rosa,Hotspring,135,56'; + put '35.62,-118.473,Scovern Hot Springs,Bakersfield,Hotspring,133,56'; + put '34.538,-119.56,Agua Caliente Spring,Los Angeles,Hotspring,133,56'; + put '33.558,-117.154,Murrietta Hot Springs,Santa Ana,Hotspring,132,56'; + put '39.226,-120.01,Brockway Hot Springs,Chico,Hotspring,131,55'; + put '41.036,-121.926,Hunt Hot Spring,Alturas,Hotspring,136,58'; + put '34.582,-119.044,Willett Hot Springs,Los Angeles,Hotspring,108,42'; + put '37.234,-118.881,Blaney Meadows Hot Springs,Mariposa,Hotspring,109,43'; + put '36.477,-118.404,Kern Hot Spring,Fresno,Hotspring,109,43'; + put '36.806,-117.771,Lower Warm Springs,Death Valley,Hotspring,110,43'; + put '34.482,-119.302,Matilija Hot Springs,Los Angeles,Hotspring,109,43'; + put '34.537,-119.879,San Marcos Hot Spring,Los Angeles,Hotspring,110,43'; + put '33.896,-117.057,Eden Hot Springs,Santa Ana,Hotspring,109,43'; + put '39.573,-120.348,Campbell Hot Springs,Chico,Hotspring,111,44'; + put '38.994,-122.742,Horseshoe Spring,Santa Rosa,Hotspring,108,42'; + put '33.969,-116.942,Highland Springs,Santa Ana,Hotspring,112,44'; + put '34.34,-117.173,"Warm Spring, Hot Spring",San Bernardino,Hotspring,108,42'; + put '41.219,-120.066,Squaw Baths,Alturas,Hotspring,106,41'; + put '40.142,-120.935,Indian Valley Hot Springs,Susanville,Hotspring,106,41'; + put '39.292,-122.821,Crabtree Hot Springs,Ukiah,Hotspring,106,41'; + put '37.108,-121.478,Gilroy Hot Springs,San Jose,Hotspring,106,41'; + put '39.227,-123.362,Orrs Springs,Ukiah,Hotspring,104,40'; + put '38.773,-122.705,Anderson Springs,Santa Rosa,Hotspring,108,42'; + put '38.858,-122.671,Howard Springs,Santa Rosa,Hotspring,113,45'; + put '34.461,-119.637,Montecito Hot Springs,Los Angeles,Hotspring,118,48'; + put '33.551,-117.167,Temecula Hot Springs,Santa Ana,Hotspring,116,47'; + put '33.835,-116.988,Gilman Hot Springs,Santa Ana,Hotspring,117,47'; + put '37.618,-119.074,Reds Meadow Hot Springs,Mariposa,Hotspring,115,46'; + put '35.528,-118.665,Democrat Hot Springs,Bakersfield,Hotspring,115,46'; + put '33.731,-118.348,Whites Point Hot Springs,Long Beach,Hotspring,115,46'; + put '37.532,-119.025,Fish Creek Hot Springs,Mariposa,Hotspring,110,43'; + put '39.032,-122.432,"Blank Spring, Manzanita Mine Sprs",Ukiah,Hotspring,112,45'; + put '37.327,-119.018,Mono Hot Springs,Mariposa,Hotspring,109,43'; + put '38.225,-119.217,The Hot Springs,Walker Lake,Hotspring,113,45'; + put '35.727,-118.408,Hot Spring,Bakersfield,Hotspring,113,45'; + put '41.6,-120.088,Leonards Hot Springs,Alturas,Hotspring,144,62'; + put '38.874,-123.518,Point Arena Hot Springs,Santa Rosa,Hotspring,111,44'; + put '41.126,-121.028,Kellog Hot Springs,Alturas,Hotspring,172,78'; + put '35.558,-118.612,Delonegha Hot Springs,Bakersfield,Hotspring,112,44'; + put '35.871,-116.23,Tecopa Hot Springs,Trona,Hotspring,118,48'; + put '41.86,-120.158,Fort Bidwell Hot Spring,Alturas,Hotspring,113,45'; + put '41.534,-120.078,Hot Springs (Surprise Valley),Alturas,Hotspring,208,98'; + put '33.345,-115.588,Mud Volcanoes,Salton Sea,Hotspring,W,W'; + put '41.012,-121.274,Hot Springs,Alturas,Hotspring,H,H'; + put '39.922,-120.024,Zamboni Hot Springs,Chico,Hotspring,H,H'; + put '38.979,-122.659,Fumarole,Santa Rosa,Hotspring,H,H'; + put '37.622,-119.028,Fumaroles,Mariposa,Hotspring,H,H'; + put '40.364,-120.243,Hot Spring,Susanville,Hotspring,204,96'; + put '38.767,-122.748,Little Geysers,Santa Rosa,Hotspring,210,99'; + put '33.328,-115.583,Mud Volcanoes,Salton Sea,Hotspring,W,W'; + put '41.67,-120.206,Lake City Hot Springs,Alturas,Hotspring,207,97'; + put '36.036,-117.802,Devils Kitchen,Death Valley,Hotspring,207,97'; + put '36.045,-117.769,Coso Hot Springs,Death Valley,Hotspring,207,97'; + put '40.382,-121.513,Morgan Hot Spring,Susanville,Hotspring,205,96'; + put '40.421,-121.375,Terminal Geyser,Susanville,Hotspring,205,96'; + put '41.19,-120.383,West Valley Reservoir Hot Spring,Alturas,Hotspring,171,77'; + put '38.802,-122.81,The Geysers,Santa Rosa,Hotspring,214,101'; + put '35.888,-116.258,Springs,Trona,Hotspring,W,W'; + put '34.185,-117.262,"Arrowhead Springs, Waterman Hot Sp",San Bernardino,Hotspring,194,90'; + put '33.823,-116.542,Palm Springs (Agua Caliente Spring,Santa Ana,Hotspring,104,40'; + put '41.196,-120.475,Springs,Alturas,Hotspring,W,W'; + put '41.959,-120.936,Warm Spring,Alturas,Hotspring,W,W'; + put '37.929,-121.965,Springs,San Jose,Hotspring,W,W'; + put '36.83,-117.736,Upper Warm Spring,Death Valley,Hotspring,W,W'; + put '33.343,-115.573,Mud Volcanoes,Salton Sea,Hotspring,W,W'; + put '35.536,-118.651,Spring (Hot),Bakersfield,Hotspring,W,W'; + put '33.332,-115.575,Mud Volcanoes,Salton Sea,Hotspring,W,W'; + put '35.967,-116.931,Warm Spring,Trona,Hotspring,W,W'; + put '33.28,-115.592,Mud Volcanoes,Salton Sea,Hotspring,W,W'; + put '33.288,-115.575,Mud Volcanoes,Salton Sea,Hotspring,W,W'; + put '33.312,-115.577,Mud Volcanoes,Salton Sea,Hotspring,W,W'; + put '33.313,-115.605,Mud Volcanoes,Salton Sea,Hotspring,W,W'; + put '40.393,-121.507,Growler Hot Spring,Susanville,Hotspring,203,95'; + put '35.148,-118.783,Warm Spring,Bakersfield,Hotspring,W,W'; + put '41.973,-122.202,Klamath Hot Spring,Weed,Hotspring,156,69'; + put '41.143,-121.11,Bassett Hot Springs,Alturas,Hotspring,174,79'; + put '38.58,-122.575,Calistoga Hot Springs,Santa Rosa,Hotspring,172,78'; + put '37.656,-118.834,Hot Creek Springs,Mariposa,Hotspring,171,77'; + put '41.229,-121.405,Little Hot Spring,Alturas,Hotspring,169,76'; + put '37.664,-118.802,The Tub,Mariposa,Hotspring,167,75'; + put '40.355,-120.257,Wendel Hot Springs,Susanville,Hotspring,205,96'; + put '38.768,-122.717,Castle Rock Springs,Santa Rosa,Hotspring,163,73'; + put '38.245,-119.205,Travertine Hot Springs,Walker Lake,Hotspring,180,82'; + put '39.002,-122.664,Sulphur Bank,Ukiah,Hotspring,156,69'; + put '39.057,-122.475,Elgin Mine,Ukiah,Hotspring,156,69'; + put '39.039,-122.421,Wilbur Springs,Ukiah,Hotspring,153,67'; + put '40.444,-121.409,Drakesbad,Susanville,Hotspring,151,66'; + put '40.457,-121.545,Mill Creek Springs,Susanville,Hotspring,150,66'; + put '38.048,-119.081,Hot Spring,Walker Lake,Hotspring,151,66'; + put '37.647,-118.859,Casa Diablo Hot Pool,Mariposa,Hotspring,165,74'; + put '41.607,-121.523,Hot Spot,Alturas,Hotspring,191,88'; + put '40.44,-121.434,Devils Kitchen,Susanville,Hotspring,203,95'; + put '40.302,-120.195,Amedee Hot Springs,Susanville,Hotspring,203,95'; + put '36.031,-117.833,Fumarole,Death Valley,Hotspring,203,95'; + put '40.447,-121.536,"Sulphur Works, Tophet Hot Springs",Susanville,Hotspring,199,93'; + put '40.455,-121.501,Bumpass Hell,Susanville,Hotspring,199,93'; + put '37.648,-118.914,Casa Diablo Hot Springs And Geyser,Mariposa,Hotspring,199,93'; + put '37.692,-118.839,Little Hot Creek Spring,Mariposa,Hotspring,180,82'; + put '34.596,-118.998,Sespe Hot Springs,Los Angeles,Hotspring,194,90'; + put '38.348,-119.4,Fales Hot Springs,Walker Lake,Hotspring,180,82'; + put '40.434,-121.399,Boiling Springs Lake,Susanville,Hotspring,190,88'; + put '41.615,-120.102,Seyferth Hot Springs,Alturas,Hotspring,185,85'; + put '41.407,-122.197,"Hot Spring, Fumaroles",Weed,Hotspring,183,84'; + put '37.993,-119.028,Paoha Island Springs,Mariposa,Hotspring,181,83'; + put '41.025,-121.924,Big Bend Hot Springs,Alturas,Hotspring,180,82'; + put '38.699,-119.846,Grovers Hot Springs,Walker Lake,Hotspring,147,64'; + put '37.665,-118.828,Hot Creek Gorge Springs,Mariposa,Hotspring,199,93'; + put '39.43,-122.538,"Sulphur Spring, Salt Spring",Ukiah,Hotspring,75,24'; + put '38.925,-122.77,Hildebrande Spring,Santa Rosa,Hotspring,77,25'; + put '38.203,-119.118,Warm Spring,Walker Lake,Hotspring,77,25'; + put '36.938,-121.565,Sargent Estate Warm Spring,Santa Cruz,Hotspring,77,25'; + put '34.826,-116.677,Newberry Spring,San Bernardino,Hotspring,77,25'; + put '41.919,-122.369,Bogus Soda Springs,Weed,Hotspring,76,24'; + put '39.053,-122.597,Quigley Soda Spring,Ukiah,Hotspring,82,28'; + put '41.252,-120.521,Warm Spring,Alturas,Hotspring,75,24'; + put '38.85,-122.693,Pine Cone Spring,Santa Rosa,Hotspring,78,26'; + put '38.339,-122.259,Napa Vichy Springs,Santa Rosa,Hotspring,76,24'; + put '38.892,-122.533,Baker Soda Spring,Santa Rosa,Hotspring,76,24'; + put '38.897,-122.882,England Springs,Santa Rosa,Hotspring,76,24'; + put '38.916,-122.799,Carlsbad Spring,Santa Rosa,Hotspring,76,24'; + put '38.192,-120.827,Valley Springs,Sacramento,Hotspring,75,24'; + put '38.85,-120.025,Myers Warm Spring,Sacramento,Hotspring,75,24'; + put '37.708,-118.813,Hot Spring,Mariposa,Hotspring,68,20'; + put '36.122,-117.217,Warm Sulphur Springs,Death Valley,Hotspring,80,27'; + put '35.682,-116.422,Saratoga Spring,Trona,Hotspring,82,28'; + put '33.733,-114.907,Mccoy Spring,Salton Sea,Hotspring,82,28'; + put '41.484,-120.764,Spring,Alturas,Hotspring,81,27'; + put '39.657,-123.585,Jackson Valley Mud Springs,Ukiah,Hotspring,80,27'; + put '39.198,-122.505,Pseudo Complexion Spring,Ukiah,Hotspring,81,27'; + put '38.85,-122.667,Bad Creek Spring,Santa Rosa,Hotspring,81,27'; + put '32.97,-116.423,Vallecitos Spring,San Diego,Hotspring,79,26'; + put '36.765,-120.901,Spring,Santa Cruz,Hotspring,81,27'; + put '34.159,-118.499,El Encino Springs,Los Angeles,Hotspring,79,26'; + put '35.879,-116.153,Resting Spring,Trona,Hotspring,80,27'; + put '41.828,-120.917,Pothole Spring,Alturas,Hotspring,78,26'; + put '39.348,-122.668,Fouts Springs,Ukiah,Hotspring,79,26'; + put '38.519,-122.26,"Napa Rock Soda Spring, Phillips So",Santa Rosa,Hotspring,78,26'; + put '38.838,-122.653,Spiers Springs,Santa Rosa,Hotspring,79,26'; + put '35.141,-116.101,Soda Station Springs,Trona,Hotspring,75,24'; + put '37.503,-121.904,Alameda Warm Springs,San Jose,Hotspring,80,27'; + put '39.429,-123.308,Muir Springs,Ukiah,Hotspring,68,20'; + put '37.924,-122.046,Sulphur Spring,San Francisco,Hotspring,75,24'; + put '40.58,-120.265,Tipton Springs,Susanville,Hotspring,70,21'; + put '39.697,-123.478,Pinches Spring,Ukiah,Hotspring,70,21'; + put '38.755,-122.285,Zim Zim Spring,Santa Rosa,Hotspring,70,21'; + put '37.083,-121.042,Spring In Oneill Forebay,San Jose,Hotspring,70,21'; + put '37.632,-121.762,Crohare Spring,San Jose,Hotspring,70,21'; + put '33.625,-115.325,Corn Spring,Salton Sea,Hotspring,72,22'; + put '36.117,-118.776,Ward Spring,Fresno,Hotspring,70,21'; + put '34.423,-119.538,Boron Spring,Los Angeles,Hotspring,72,22'; + put '39.002,-122.498,Grizzly Spring,Ukiah,Hotspring,68,20'; + put '39.088,-122.525,Sulphur Spring,Ukiah,Hotspring,68,20'; + put '38.125,-122.188,Vallejo White Sulphur Springs,Santa Rosa,Hotspring,68,20'; + put '38.31,-122.053,Tolenas Springs,Santa Rosa,Hotspring,68,20'; + put '41.45,-120.834,Kelly Hot Spring,Alturas,Hotspring,198,92'; + put '36.512,-116.821,Nevares Springs,Death Valley,Hotspring,102,39'; + put '37.888,-118.487,Bertrand Ranch Springs,Mariposa,Hotspring,70,21'; + put '35.483,-119.917,Mize Spring,Bakersfield,Hotspring,73,23'; + put '36.698,-117.848,Little Hunter Canyon Springs,Death Valley,Hotspring,81,27'; + put '38.995,-122.642,Davis Soda Spring,Santa Rosa,Hotspring,73,23'; + put '37.432,-121.308,Salt Grass Springs,San Jose,Hotspring,73,23'; + put '37.573,-121.445,Lone Tree Mineral Spring,San Jose,Hotspring,73,23'; + put '37.638,-118.887,Chance Spring,Mariposa,Hotspring,73,23'; + put '36.295,-120.985,Sulphur Springs,Santa Cruz,Hotspring,73,23'; + put '41.16,-120.403,Warm Spring,Alturas,Hotspring,70,21'; + put '35.4,-120.25,Cameta Warm Spring,San Luis Obisp,Hotspring,73,23'; + put '37.719,-118.735,Springs,Mariposa,Hotspring,75,24'; + put '35.588,-116.359,Sheep Creek Spring,Trona,Hotspring,73,23'; + put '40.568,-120.325,Sellicks Springs,Susanville,Hotspring,72,22'; + put '38.833,-122.357,One Shot Mining Co,Santa Rosa,Hotspring,72,22'; + put '38.95,-122.572,Soda Spring In Cache Formation,Santa Rosa,Hotspring,72,22'; + put '37.635,-118.72,Springs,Mariposa,Hotspring,72,22'; + put '36.13,-118.816,Soda Spring,Fresno,Hotspring,72,22'; + put '36.773,-120.898,Iridat Spring,Santa Cruz,Hotspring,73,23'; + put '33.545,-115.654,Canyon Spring,Salton Sea,Hotspring,97,36'; + put '36.675,-116.923,Keane Wonder Spring,Death Valley,Hotspring,93,34'; + put '36.331,-121.367,Paraiso Springs (Sulphur Spring),Santa Cruz,Hotspring,98,37'; + put '35.122,-120.542,Newsom Springs,San Luis Obisp,Hotspring,99,37'; + put '34.503,-120.219,Las Cruces Hot Springs,Santa Maria,Hotspring,99,37'; + put '38.49,-122.498,St Helena White Sulphur Spring,Santa Rosa,Hotspring,97,36'; + put '35.946,-116.189,Chappo Spring,Trona,Hotspring,80,27'; + put '40.019,-121.036,Spring,Susanville,Hotspring,99,37'; + put '40.44,-121.42,Hot Springs Valley,Susanville,Hotspring,83,28'; + put '32.947,-116.305,Agua Caliente Springs,San Diego,Hotspring,101,38'; + put '39.196,-122.714,Newman Springs,Ukiah,Hotspring,94,35'; + put '37.63,-118.808,Whitmore Hot Springs,Mariposa,Hotspring,95,35'; + put '35.269,-120.851,Pecho Warm Springs,San Luis Obisp,Hotspring,95,35'; + put '33.514,-117.604,Spring,Santa Ana,Hotspring,95,35'; + put '38.958,-122.701,Riviera Beach Spring,Santa Rosa,Hotspring,93,34'; + put '36.33,-117.948,Dirty Socks Hot Spring,Death Valley,Hotspring,93,34'; + put '37.847,-121.635,Byron Hot Springs,San Jose,Hotspring,96,36'; + put '35.433,-118.478,Yates Hot Springs,Bakersfield,Hotspring,100,38'; + put '35.663,-120.692,Paso Robles Artesian Spring,San Luis Obisp,Hotspring,102,39'; + put '34.507,-119.291,Wheeler Springs,Los Angeles,Hotspring,102,39'; + put '33.8,-116.927,Soboda Hot Springs,Santa Ana,Hotspring,102,39'; + put '40.223,-122.747,Stinking Springs,Redding,Hotspring,101,38'; + put '38.8,-123.17,Hoods Hot Springs,Santa Rosa,Hotspring,100,38'; + put '37.029,-117.383,Grapevine Springs,Goldfield,Hotspring,100,38'; + put '36.084,-121.584,Dolans Hot Spring,Santa Cruz,Hotspring,98,37'; + put '36.21,-118.176,Soda Springs,Fresno,Hotspring,100,38'; + put '33.664,-117.913,Fairview Hot Spring,Santa Ana,Hotspring,96,36'; + put '35.143,-116.813,Paradise Spring,Trona,Hotspring,100,38'; + put '33.837,-117.145,Lakeview Hot Springs,Santa Ana,Hotspring,100,38'; + put '33.201,-115.577,Mud Pots,Salton Sea,Hotspring,100,38'; + put '33.212,-115.591,Mud Pots,Salton Sea,Hotspring,100,38'; + put '33.217,-115.58,Wister Mud Pot,Salton Sea,Hotspring,100,38'; + put '32.617,-116.189,Jacumba Hot Springs,San Diego,Hotspring,101,38'; + put '36.618,-121.845,Sulphur Hot Spring,Santa Cruz,Hotspring,100,38'; + put '36.495,-117.893,Springs,Death Valley,Hotspring,86,30'; + put '38.033,-118.902,Mono Basin Warm Springs,Walker Lake,Hotspring,88,31'; + put '35.908,-120.367,Table Mountain (Spring),San Luis Obisp,Hotspring,88,31'; + put '34.271,-116.838,Pan Hot Springs,San Bernardino,Hotspring,88,31'; + put '40.238,-122.11,Tuscan Springs,Redding,Hotspring,86,30'; + put '40.245,-120.007,High Rock Spring,Susanville,Hotspring,86,30'; + put '38.55,-122.72,Mark West Springs,Santa Rosa,Hotspring,88,31'; + put '43.513,-119.903,Springs at Tecolote Tunnel,Los Angeles,Hotspring,93,34'; + put '39.728,-120.547,Mclear Warm Springs,Chico,Hotspring,86,30'; + put '38.835,-122.731,Gordon Warm Springs,Santa Rosa,Hotspring,97,36'; + put '39.166,-123.159,Vichy Springs,Ukiah,Hotspring,85,29'; + put '38.936,-122.907,Highland Springs,Santa Rosa,Hotspring,84,29'; + put '37.398,-121.794,Mineral Springs,San Jose,Hotspring,84,29'; + put '33.436,-117.324,De Luz Warm Springs,Santa Ana,Hotspring,85,29'; + put '33.512,-115.827,Dos Palmas Spring,Salton Sea,Hotspring,84,29'; + put '39.022,-122.444,Abbott Mine,Ukiah,Hotspring,86,30'; + put '34.605,-118.561,Warm Spring,Los Angeles,Hotspring,92,33'; + put '41.659,-123.319,Sulphur Springs,Weed,Hotspring,84,29'; + put '38.394,-122.552,Los Guilicos Warm Springs,Santa Rosa,Hotspring,88,31'; + put '41.492,-120.7,Essex Springs,Alturas,Hotspring,91,33'; + put '38.654,-122.484,Aetna Springs,Santa Rosa,Hotspring,91,33'; + put '35.842,-117.38,Bainter Spring,Trona,Hotspring,92,33'; + put '34.228,-117.483,Tylers Bath Spring,San Bernardino,Hotspring,92,33'; + put '33.363,-117.017,Agua Tibia Spring,Santa Ana,Hotspring,92,33'; + put '41.167,-120.032,Bare Ranch Spring,Alturas,Hotspring,90,32'; + put '35.978,-116.273,Shoshone Spring,Trona,Hotspring,90,32'; + put '33.407,-116.035,Fish Springs,Santa Ana,Hotspring,90,32'; + put '35.582,-120.666,Santa Ysabel Springs (Sulphur Spr),San Luis Obisp,Hotspring,92,33'; + put '34.537,-119.613,Little Caliente Spring,Los Angeles,Hotspring,90,32'; + put '39.006,-122.787,Big Soda Spring,Ukiah,Hotspring,90,32'; + put '35.439,-119.846,Carneros Spring,Bakersfield,Hotspring,90,32'; + put '36.441,-116.829,Travertine Springs,Death Valley,Hotspring,90,32'; + put '37.88,-122.627,Rocky Point Springs,San Francisco,Hotspring,90,32'; + put '39.227,-107.224,Penny Hot Springs,Leadville,Hotspring,133,56'; + put '38.732,-106.178,Hortense Hot Spring,Montrose,Hotspring,181,83'; + put '37.4,-107.849,Tripp Hot Springs,Durango,Hotspring,111,44'; + put '40.073,-106.113,Hot Sulphur Springs,Craig,Hotspring,111,44'; + put '39.739,-105.512,Idaho Springs,Denver,Hotspring,115,46'; + put '39.552,-107.412,South Canyon Hot Springs,Leadville,Hotspring,118,48'; + put '39.548,-107.322,Glenwood Springs,Leadville,Hotspring,124,51'; + put '38.133,-107.736,Orvis Hot Spring,Montrose,Hotspring,126,52'; + put '39.017,-105.793,Hartsel Hot Springs,Denver,Hotspring,126,52'; + put '38.733,-106.162,Mount Princeton Hot Springs,Montrose,Hotspring,133,56'; + put '37.752,-108.131,Paradise Warm Spring,Cortez,Hotspring,115,46'; + put '37.747,-106.831,Wagon Wheel Gap Hot Springs,Durango,Hotspring,135,57'; + put '37.263,-107.011,Pagosa Springs,Durango,Hotspring,136,58'; + put '38.812,-106.226,Cottonwood Hot Springs,Montrose,Hotspring,136,58'; + put '38.168,-105.924,Mineral Hot Springs,Pueblo,Hotspring,140,60'; + put '40.559,-106.849,Routt Hot Springs,Craig,Hotspring,147,64'; + put '38.021,-107.672,Ouray Hot Springs,Montrose,Hotspring,156,69'; + put '38.498,-106.076,Poncha Hot Springs,Montrose,Hotspring,160,71'; + put '38.514,-106.508,Upper Waunita Hot Springs,Montrose,Hotspring,176,80'; + put '38.272,-107.1,Cebolla Hot Springs,Montrose,Hotspring,106,41'; + put '37.313,-107.344,Piedra River Hot Springs,Durango,Hotspring,108,42'; + put '38.517,-106.515,Lower Waunita Hot Springs,Montrose,Hotspring,167,75'; + put '38.816,-106.873,Ranger Hot Spring,Montrose,Hotspring,81,27'; + put '37.294,-105.784,Dexter Spring,Trinidad,Hotspring,68,20'; + put '38.634,-106.072,Browns Grotto Warm Spring,Montrose,Hotspring,73,23'; + put '39.164,-106.062,Rhodes Warm Spring,Leadville,Hotspring,75,24'; + put '38.836,-106.825,Cement Creek Hot Spring,Montrose,Hotspring,77,25'; + put '38.653,-106.056,Browns Canyon Warm Spring,Montrose,Hotspring,77,25'; + put '37.033,-106.805,Stinking Springs,Durango,Hotspring,81,27'; + put '37.747,-108.117,Geyser Warm Spring,Cortez,Hotspring,82,28'; + put '38.479,-105.891,Swissvale Warm Springs,Pueblo,Hotspring,82,28'; + put '37.751,-106.317,Shaw Springs,Durango,Hotspring,86,30'; + put '37.728,-107.054,Birdsie Warm Spring,Durango,Hotspring,86,30'; + put '37.741,-107.034,Antelope Spring,Durango,Hotspring,90,32'; + put '39.628,-107.106,Dotsero Warm Springs,Leadville,Hotspring,90,32'; + put '38.485,-105.91,Wellsville Warm Spring,Pueblo,Hotspring,91,33'; + put '38.014,-108.054,Lemon Hot Spring,Moab,Hotspring,91,33'; + put '37.391,-107.846,"Trimble Hot Spr, Stratten Warm Spr",Durango,Hotspring,97,36'; + put '38.192,-105.816,Valley View Hot Springs,Pueblo,Hotspring,99,37'; + put '38.433,-105.261,Canon City Hot Springs,Pueblo,Hotspring,104,40'; + put '39.012,-106.891,Conundrum Hot Springs,Leadville,Hotspring,100,38'; + put '37.511,-106.945,Rainbow Hot Springs,Durango,Hotspring,104,40'; + put '40.467,-107.952,Juniper Hot Springs,Craig,Hotspring,100,38'; + put '40.483,-106.827,Steamboat Springs,Craig,Hotspring,102,39'; + put '37.771,-108.091,Dunton Hot Spring,Cortez,Hotspring,108,42'; + put '37.453,-107.803,Pinkerton Hot Springs,Durango,Hotspring,90,32'; + put '39.932,-105.277,Eldorado Springs,Denver,Hotspring,79,26'; + put '27.074,-82.233,Little Salt Spring,Tampa,Hotspring,81,27'; + put '27.06,-82.261,Warm Mineral Springs (Big Salt Spr,Tampa,Hotspring,86,30'; + put '32.92,-84.438,Barker Spring,Phenix City,Hotspring,73,23'; + put '32.964,-84.499,Thundering Spring,Phenix City,Hotspring,75,24'; + put '33.018,-84.327,Taylor Spring,Atlanta,Hotspring,75,24'; + put '32.862,-84.65,Parkman Spring,Phenix City,Hotspring,77,25'; + put '33.037,-84.374,Lifsey Spring,Atlanta,Hotspring,79,26'; + put '32.893,-84.69,Warm Springs,Phenix City,Hotspring,88,31'; + put '32.873,-84.547,Tom Brown Spring,Phenix City,Hotspring,68,20'; + put '19.407,-155.277,Steam Vents,Hawaii,Hotspring,H,H'; + put '19.46,-154.847,Isaac Hale Park Spring,Hawaii,Hotspring,97,36'; + put '19.496,-154.876,Warm Vapor,Hawaii,Hotspring,W,W'; + put '19.373,-155.188,Steam Vents,Hawaii,Hotspring,H,H'; + put '19.39,-155.311,Steam Vents,Hawaii,Hotspring,H,H'; + put '19.434,-155.272,Steam Vents,Hawaii,Hotspring,H,H'; + put '19.486,-155.598,Steam Vents,Hawaii,Hotspring,H,H'; + put '19.466,-154.943,Steam Vents,Hawaii,Hotspring,H,H'; + put '19.421,-155.62,Steam Vents,Hawaii,Hotspring,H,H'; + put '19.201,-155.384,Waiwelawela Point Spring,Hawaii,Hotspring,90,32'; + put '19.593,-154.928,Akins Spring,Hawaii,Hotspring,84,29'; + put '44.721,-115.01,Thomas Creek Ranch Hot Spring,Challis,Hotspring,138,59'; + put '45.431,-116.015,Cow Flats Hot Spring,Grangeville,Hotspring,138,59'; + put '44.062,-115.685,Pine Flat Hot Springs,Challis,Hotspring,138,59'; + put '44.382,-115.841,Dash Creek Hot Springs,Challis,Hotspring,138,59'; + put '44.077,-115.553,Haven Lodge Hot Spring,Challis,Hotspring,147,64'; + put '43.647,-114.816,Skillern Hot Springs,Hailey,Hotspring,140,60'; + put '43.789,-115.434,Dutch Frank Hot Spring,Hailey,Hotspring,149,65'; + put '43.54,-115.288,Bridge Hot Springs,Hailey,Hotspring,138,59'; + put '43.72,-115.617,Smith Cabin Hot Spring,Hailey,Hotspring,138,59'; + put '42.688,-114.826,Banbury Hot Spring,Twin Falls,Hotspring,138,59'; + put '45.035,-115.561,Sheep Creek Hot Spring,Elk City,Hotspring,136,58'; + put '44.245,-114.885,Elkhorn Hot Spring,Challis,Hotspring,136,58'; + put '44.642,-115.693,Mollys Hot Spring,Challis,Hotspring,138,59'; + put '43.811,-115.116,Atlanta Hot Springs,Hailey,Hotspring,140,60'; + put '44.679,-116.231,White Licks Hot Spring,Baker,Hotspring,140,60'; + put '45.512,-115.046,Barth Hot Springs,Elk City,Hotspring,140,60'; + put '43.696,-115.658,Sheep Creek Bridge Hot Spring,Hailey,Hotspring,142,61'; + put '44.914,-115.722,Teapot Hot Spring,Challis,Hotspring,142,61'; + put '43.788,-115.444,Straight Creek Hot Spring,Hailey,Hotspring,144,62'; + put '43.116,-115.305,Latty Hot Spring,Hailey,Hotspring,144,62'; + put '45.039,-116.291,Zims Resort Hot Springs,Grangeville,Hotspring,144,62'; + put '43.049,-114.952,White Arrow Hot Spring,Hailey,Hotspring,145,63'; + put '44.645,-114.739,Upper Loon Creek Hot Springs,Challis,Hotspring,145,63'; + put '43.383,-114.931,Wardrop Hot Spring,Hailey,Hotspring,147,64'; + put '44.531,-116.754,Fairchild Hot Spring,Baker,Hotspring,126,52'; + put '44.661,-114.652,Foster Ranch Hot Springs,Challis,Hotspring,135,57'; + put '44.051,-115.829,Dan Hodges Hot Spring,Challis,Hotspring,140,60'; + put '43.506,-114.354,Hailey Hot Springs,Hailey,Hotspring,131,55'; + put '43.982,-114.486,West Pass Hot Spring,Hailey,Hotspring,124,51'; + put '43.641,-114.487,Warfield Hot Spring,Hailey,Hotspring,124,51'; + put '44.145,-112.554,Lidy Hot Springs,Dubois,Hotspring,124,51'; + put '44.054,-115.907,Hot Spring Campground,Challis,Hotspring,124,51'; + put '42.032,-115.363,Murphy Hot Springs,Twin Falls,Hotspring,126,52'; + put '43.561,-114.415,Clarendon Hot Springs,Hailey,Hotspring,126,52'; + put '43.423,-114.627,Elk Creek Hot Spring,Hailey,Hotspring,126,52'; + put '43.553,-115.267,Paradise Hot Springs,Hailey,Hotspring,126,52'; + put '42.308,-111.707,Maple Grove Hot Springs,Preston,Hotspring,172,78'; + put '45.013,-113.605,Sharkey Hot Spring,Dillon,Hotspring,126,52'; + put '44.73,-114.993,Sunflower Hot Springs,Challis,Hotspring,149,65'; + put '43.974,-114.499,Lower Bowery Hot Spring,Hailey,Hotspring,129,54'; + put '43.724,-115.604,Loftus Hot Spring,Hailey,Hotspring,129,54'; + put '44.676,-115.943,Gold Fork Hot Spring,Challis,Hotspring,127,53'; + put '44.044,-115.851,Donlay Ranch Hot Spring,Challis,Hotspring,131,55'; + put '44.264,-114.818,Basin Creek Hot Spring,Challis,Hotspring,133,56'; + put '44.652,-114.734,Owen Cabin Hot Spring,Challis,Hotspring,133,56'; + put '43.605,-115.664,Rattlesnake Hot Spring,Hailey,Hotspring,133,56'; + put '43.605,-114.948,Lightfoot Hot Springs,Hailey,Hotspring,133,56'; + put '45.788,-115.198,Red River Hot Springs,Elk City,Hotspring,131,55'; + put '44.632,-115.697,South Fork Plunge,Challis,Hotspring,129,54'; + put '44.853,-116.442,Starkey Hot Springs,Baker,Hotspring,131,55'; + put '42.692,-114.859,Hot Sulphur (Miracle Hot) Springs,Twin Falls,Hotspring,131,55'; + put '44.045,-115.842,Corder Hot Spring,Challis,Hotspring,131,55'; + put '44.247,-114.676,Robinson Bar Hot Springs,Challis,Hotspring,131,55'; + put '44.785,-114.855,Cox Hot Springs,Challis,Hotspring,131,55'; + put '43.637,-115.13,Willow Creek Hot Spring,Hailey,Hotspring,131,55'; + put '43.803,-115.401,Granite Creek Hot Spring,Hailey,Hotspring,131,55'; + put '43.129,-115.34,Coyote Hot Spring,Hailey,Hotspring,135,57'; + put '44.211,-116.71,Cove Creek Hot Spring,Baker,Hotspring,131,55'; + put '44.16,-115.167,Grandjean Hot Spring,Challis,Hotspring,H,H'; + put '43.755,-115.571,Ninemeyer Hot Springs,Hailey,Hotspring,169,76'; + put '43.701,-114.738,Big Smokey Hot Spring,Hailey,Hotspring,H,H'; + put '43.831,-115.192,Queens River Hot Spring,Hailey,Hotspring,H,H'; + put '43.817,-115.046,Leggit Creek Hot Spring,Hailey,Hotspring,H,H'; + put '43.718,-115.563,Basset Hot Spring,Hailey,Hotspring,H,H'; + put '43.588,-115.988,Mores Creek Hot Spring,Hailey,Hotspring,H,H'; + put '44.951,-114.704,Mormon Ranch Warm Spring,Challis,Hotspring,H,H'; + put '44.896,-114.563,Forge Creek Hot Springs,Challis,Hotspring,H,H'; + put '44.77,-115.663,Billy Hot Spring,Challis,Hotspring,H,H'; + put '44.628,-115.197,Sheepeater Hot Springs,Challis,Hotspring,H,H'; + put '44.585,-115.072,Sulphur Creek Hot Spring,Challis,Hotspring,H,H'; + put '44.554,-115.301,Sulphur Creek Hot Spring,Challis,Hotspring,H,H'; + put '42.107,-113.39,Blm Well (Frazier Hot Spring),Pocatello,Hotspring,203,95'; + put '44.4,-115.82,Goat Hot Springs,Challis,Hotspring,H,H'; + put '45.307,-114.338,Big Creek Hot Springs,Elk City,Hotspring,199,93'; + put '44.583,-116.112,Cascade Reservoir Hot Spring,Baker,Hotspring,H,H'; + put '45.17,-115.807,Secesh Hot Spring,Elk City,Hotspring,H,H'; + put '46.235,-114.707,Prospector Hot Springs,Hamilton,Hotspring,H,H'; + put '46.138,-115.09,Stuart Hot Springs,Hamilton,Hotspring,H,H'; + put '46.006,-115.021,Marten Hot Springs,Hamilton,Hotspring,H,H'; + put '42.374,-111.726,Mound Valley Warm Spring,Preston,Hotspring,W,W'; + put '43.255,-114.829,Mormon Reservoir Warm Spring,Hailey,Hotspring,W,W'; + put '44.639,-115.671,Warm Lake Springs,Challis,Hotspring,W,W'; + put '44.445,-115.239,Bear Valley Hot Spring,Challis,Hotspring,W,W'; + put '44.354,-117.071,Old Homestead Warm Spring,Baker,Hotspring,W,W'; + put '43.327,-113.918,Condie Hot Springs,Idaho Falls,Hotspring,124,51'; + put '43.038,-112.004,Alkali Flats Warm Spring,Idaho Falls,Hotspring,93,34'; + put '44.43,-115.762,Bull Creek Hot Springs,Challis,Hotspring,H,H'; + put '42.119,-111.928,Squaw Hot Springs,Preston,Hotspring,163,73'; + put '42.333,-111.716,Cleveland Hot Springs,Preston,Hotspring,151,66'; + put '43.671,-115.696,Twin Springs,Hailey,Hotspring,151,66'; + put '43.951,-116.353,Roystone Hot Springs,Boise,Hotspring,151,66'; + put '42.704,-114.856,Salmon Falls Hot Spring,Twin Falls,Hotspring,153,67'; + put '44.16,-115.177,Sacajawea Hot Springs,Challis,Hotspring,153,67'; + put '43.738,-115.583,Vaughn Hot Spring,Hailey,Hotspring,154,68'; + put '44.669,-116.305,Council Mtn Hot Springs,Baker,Hotspring,154,68'; + put '44.831,-115.215,Kwiskwis Hot Spring,Challis,Hotspring,156,69'; + put '43.684,-114.41,Guyer Hot Springs,Hailey,Hotspring,158,70'; + put '43.155,-115.518,Hot Springs,Hailey,Hotspring,158,70'; + put '44.586,-116.63,Lakey Hot Spring,Baker,Hotspring,158,70'; + put '42.333,-115.65,Indian Hot Springs,Twin Falls,Hotspring,160,71'; + put '42.637,-114.892,Poison Springs,Twin Falls,Hotspring,H,H'; + put '44.813,-115.123,Middle Fork Indian Creek Hot Sprin,Challis,Hotspring,162,72'; + put '44.072,-115.543,Kirkham Hot Springs,Challis,Hotspring,149,65'; + put '43.328,-114.399,Magic Hot Springs,Hailey,Hotspring,163,73'; + put '43.293,-114.908,Barrons Hot Spring,Hailey,Hotspring,167,75'; + put '44.154,-115.993,Warm Springs Creek Hot Springs,Challis,Hotspring,167,75'; + put '44.268,-114.748,Sunbeam Hot Springs,Challis,Hotspring,169,76'; + put '44.092,-116.052,Deer Hot Springs,Baker,Hotspring,176,80'; + put '43.563,-114.798,Worswick Hot Springs,Hailey,Hotspring,180,82'; + put '42.133,-111.928,Battle Creek Hot Springs,Preston,Hotspring,183,84'; + put '44.364,-115.856,Boiling Springs,Challis,Hotspring,185,85'; + put '44.157,-115.314,Bonneville Hot Springs,Challis,Hotspring,185,85'; + put '44.799,-115.129,Indian Creek Hot Spring,Challis,Hotspring,190,88'; + put '44.568,-115.695,Vulcan Hot Springs,Challis,Hotspring,190,88'; + put '44.306,-116.745,Crane Creek Hot Springs,Baker,Hotspring,198,92'; + put '44.416,-116.031,Cabarton Hot Spring,Baker,Hotspring,160,71'; + put '42.781,-111.983,Portneuf River Warm Spring,Preston,Hotspring,93,34'; + put '44.621,-115.985,Badley Warm Spring,Challis,Hotspring,100,38'; + put '45.201,-116.312,Boulder Creek Spring,Grangeville,Hotspring,82,28'; + put '42.24,-113.588,Sears Spring,Pocatello,Hotspring,84,29'; + put '44.257,-112.639,Warm Springs,Dubois,Hotspring,84,29'; + put '42.911,-111.556,Henry Warm Spring,Preston,Hotspring,86,30'; + put '43.021,-111.695,Wilson Lake Warm Spring,Driggs,Hotspring,86,30'; + put '44.495,-116.732,Keithly Warm Spring,Baker,Hotspring,86,30'; + put '42.655,-111.643,Steamboat Hot Spring,Preston,Hotspring,88,31'; + put '45.152,-116.296,Stinky Warm Spring,Grangeville,Hotspring,88,31'; + put '42.725,-112.872,Indian Springs,Pocatello,Hotspring,90,32'; + put '43.114,-112.167,Yandell Springs,Idaho Falls,Hotspring,90,32'; + put '44.64,-116.045,Arling Hot Spring,Baker,Hotspring,90,32'; + put '42.657,-111.604,Soda Springs,Preston,Hotspring,82,28'; + put '45.07,-115.826,Lick Creek Warm Spring,Elk City,Hotspring,91,33'; + put '42.337,-111.726,Treasureton Hot Springs,Preston,Hotspring,95,35'; + put '44.382,-114.088,Little Antelope Flat Warm Spring,Challis,Hotspring,93,34'; + put '43.21,-111.495,Brockman Creek Hot Spring,Driggs,Hotspring,95,35'; + put '44.398,-115.149,Cape Horn Warm Springs,Challis,Hotspring,95,35'; + put '42.337,-114.509,Nat-Soo-Pah Warm Spring,Twin Falls,Hotspring,97,36'; + put '44.9,-115.505,Hot Creek Warm Spring,Challis,Hotspring,97,36'; + put '42.405,-114.142,Artesian City Hot Springs,Twin Falls,Hotspring,99,37'; + put '42.762,-115.739,Indian Bathtub Hot Springs,Twin Falls,Hotspring,99,37'; + put '43.227,-111.109,Alpine Warm Spring,Driggs,Hotspring,99,37'; + put '42.545,-112.906,Rockland Warm Springs,Pocatello,Hotspring,100,38'; + put '43.805,-114.585,Russian John Hot Spring,Hailey,Hotspring,100,38'; + put '43.779,-114.539,Easley Hot Springs,Hailey,Hotspring,100,38'; + put '44.26,-114.838,Mormon Bend Hot Spring,Challis,Hotspring,100,38'; + put '44.64,-113.504,Big Eightmile Creek Warm Spring,Dubois,Hotspring,91,33'; + put '42.339,-112.436,Kent Warm Spring,Pocatello,Hotspring,75,24'; + put '42.957,-112.458,Tadpole Warm Spring,Pocatello,Hotspring,68,20'; + put '43.607,-111.189,Taylor Springs,Driggs,Hotspring,68,20'; + put '43.972,-116.325,Sweet Warm Spring,Boise,Hotspring,68,20'; + put '44.717,-115.703,Dollar Creek Warm Spring,Challis,Hotspring,68,20'; + put '42.625,-113.107,Lake Walcott Hot Spring,Pocatello,Hotspring,70,21'; + put '42.015,-114.237,Thoroughbred Warm Springs,Twin Falls,Hotspring,69,21'; + put '42.928,-111.592,Blackfoot Reservoir Warm Spring,Preston,Hotspring,72,22'; + put '42.286,-113.446,"Rice Spring, Ward Spring",Pocatello,Hotspring,72,22'; + put '42.085,-113.564,Grape Creek Warm Spring,Pocatello,Hotspring,72,22'; + put '43.66,-111.715,Elkhorn Warm Spring,Driggs,Hotspring,72,22'; + put '43.367,-113.884,Rush Warm Spring,Idaho Falls,Hotspring,72,22'; + put '44.306,-117.042,Weiser Warm Springs,Baker,Hotspring,72,22'; + put '45.344,-114.463,Owl Creek Hot Springs,Elk City,Hotspring,122,50'; + put '44.454,-112.696,Big Spring,Dubois,Hotspring,73,23'; + put '44.269,-113.449,Barney Hot Springs,Dubois,Hotspring,82,28'; + put '43.5,-115.308,Towne Creek Warm Spring,Hailey,Hotspring,75,24'; + put '43.161,-116.332,Thomas Flats Warm Spring,Boise,Hotspring,75,24'; + put '44.612,-113.363,Whittaker Warm Springs,Dubois,Hotspring,75,24'; + put '42.173,-112.239,Malad Warm Spring,Pocatello,Hotspring,77,25'; + put '42.156,-112.348,Pleasantview Warm Springs,Pocatello,Hotspring,77,25'; + put '42.025,-112.226,Prices Warm Spring,Pocatello,Hotspring,77,25'; + put '42.865,-116.368,Lower Birch Spring,Jordan Valley,Hotspring,77,25'; + put '43.423,-111.414,Fall Creek Mineral Springs,Driggs,Hotspring,77,25'; + put '42.986,-111.743,Blackfoot River Warm Spring,Preston,Hotspring,79,26'; + put '42.426,-111.378,Pescadero Warm Spring,Preston,Hotspring,79,26'; + put '44.091,-111.458,Ashton Warm Spring,Ashton,Hotspring,79,26'; + put '42.056,-112.246,Woodruff Hot Spring,Pocatello,Hotspring,81,27'; + put '43.831,-116.396,Highland Land Co Warm Spring,Boise,Hotspring,73,23'; + put '44.847,-115.696,Holdover Hot Spring,Challis,Hotspring,117,47'; + put '43.047,-114.929,Hot Sulphur Lake,Hailey,Hotspring,81,27'; + put '43.603,-115.07,Baumgartner Hot Spring,Hailey,Hotspring,111,44'; + put '44.465,-116.037,Belvidere Hot Spring,Baker,Hotspring,111,44'; + put '42.621,-112.008,Lava Hot Springs,Pocatello,Hotspring,113,45'; + put '43.823,-115.327,Weatherby Hot Spring,Hailey,Hotspring,113,45'; + put '43.335,-115.044,Wolf Hot Spring,Hailey,Hotspring,113,45'; + put '44.905,-113.929,Goldbug Hot Spring,Dubois,Hotspring,113,45'; + put '45.095,-113.836,Salmon Hot Spring,Dillon,Hotspring,113,45'; + put '45.277,-115.912,Burgdorf Hot Springs,Elk City,Hotspring,113,45'; + put '44.836,-114.79,Hospital Hot Spring,Challis,Hotspring,115,46'; + put '44.72,-114.016,Cronks Canyon Hot Spring,Challis,Hotspring,115,46'; + put '44.721,-115.207,Pistol Creek Hot Springs,Challis,Hotspring,115,46'; + put '43.791,-111.435,Pincock (Green Canyon) Hot Springs,Driggs,Hotspring,111,44'; + put '43.414,-116.707,Givens Hot Springs,Boise,Hotspring,117,47'; + put '45.503,-114.463,Horse Creek Hot Springs,Elk City,Hotspring,109,43'; + put '46.464,-115.035,Weir Creek Hot Springs,Hamilton,Hotspring,117,47'; + put '42.115,-111.264,Bear Lake Hot Springs,Preston,Hotspring,118,48'; + put '42.173,-113.861,Oakley Hot Spring,Pocatello,Hotspring,118,48'; + put '46.463,-114.872,Jerry Johnson Hot Springs,Hamilton,Hotspring,118,48'; + put '43.644,-111.687,Heise Hot Springs,Driggs,Hotspring,120,49'; + put '44.799,-114.806,Lower Loon Creek Hot Spring,Challis,Hotspring,120,49'; + put '44.253,-115.891,Rocky Canyon Hot Springs,Challis,Hotspring,120,49'; + put '46.316,-115.258,Stanley Hot Springs,Hamilton,Hotspring,120,49'; + put '43.779,-115.486,Brown Creek Hot Spring,Hailey,Hotspring,122,50'; + put '44.628,-114.601,Shower Bath Springs,Challis,Hotspring,122,50'; + put '44.171,-114.624,Slate Creek Hot Spring,Challis,Hotspring,122,50'; + put '44.392,-115.834,Ground Hog Hot Springs,Challis,Hotspring,100,38'; + put '42.797,-115.723,"Bat Hot Spring, Pence Hot Spring",Twin Falls,Hotspring,117,47'; + put '42.767,-115.725,Lower Indian Bathtub Hot Springs,Twin Falls,Hotspring,108,42'; + put '42.102,-113.632,Durfee Spring,Pocatello,Hotspring,102,39'; + put '44.33,-115.802,Silver Creek Hot Spring,Challis,Hotspring,102,39'; + put '42.447,-113.523,Marsh Creek Hot Spring,Pocatello,Hotspring,104,40'; + put '42.449,-113.511,Marsh Gully Hot Springs,Pocatello,Hotspring,106,41'; + put '42.798,-115.742,Bruneau Hot Spring,Twin Falls,Hotspring,106,41'; + put '43.576,-114.83,Preis Hot Spring,Hailey,Hotspring,106,41'; + put '43.677,-116.208,Terteling Hot Springs,Boise,Hotspring,106,41'; + put '44.254,-114.443,Sullivan Hot Springs,Challis,Hotspring,106,41'; + put '44.224,-114.929,Stanley Hot Spring,Challis,Hotspring,106,41'; + put '44.101,-114.865,Rosalys Warm Spring,Challis,Hotspring,106,41'; + put '44.06,-115.819,Danskin Creek Hot Spring,Challis,Hotspring,106,41'; + put '45.852,-114.937,Running Warm Springs,Elk City,Hotspring,106,41'; + put '43.363,-113.779,Milford Sweat Hot Spring,Idaho Falls,Hotspring,111,44'; + put '46.466,-114.939,Colgate Warm Springs,Hamilton,Hotspring,106,41'; + put '44.626,-115.749,Trail Creek Hot Spring,Challis,Hotspring,122,50'; + put '43.816,-115.863,Warm Springs,Hailey,Hotspring,108,42'; + put '43.76,-115.56,Pool Creek Hot Spring,Hailey,Hotspring,108,42'; + put '45.042,-114.616,Snowshoe Johnsons Hot Spring,Elk City,Hotspring,108,42'; + put '42.388,-112.085,Downata Hot Springs,Pocatello,Hotspring,109,43'; + put '42.013,-114.504,Magic Hot Springs,Twin Falls,Hotspring,109,43'; + put '42.779,-115.715,Buckaroo Hot Spring,Twin Falls,Hotspring,109,43'; + put '43.99,-114.8,Pierson Hot Springs,Hailey,Hotspring,109,43'; + put '43.038,-114.988,Tschanne Hot Spring,Hailey,Hotspring,109,43'; + put '44.523,-114.173,Beardsley Hot Springs,Challis,Hotspring,109,43'; + put '44.733,-115.018,Sunflower Flat Hot Spring,Challis,Hotspring,109,43'; + put '44.516,-115.295,Dagger Creek Hot Spring,Challis,Hotspring,110,43'; + put '44.971,-116.203,Krigbaum Hot Springs,Baker,Hotspring,109,43'; + put '45.416,-116.172,Riggins Hot Springs,Grangeville,Hotspring,106,41'; + put '42.735,-73.2,Sand Spring,Albany,Hotspring,75,24'; + put '46.106,-114.004,Sleeping Child Hot Springs,Hamilton,Hotspring,122,50'; + put '45.697,-114.365,Blue Joint Hot Springs 2,Elk City,Hotspring,84,29'; + put '44.769,-111.649,Sloan Cow Camp Spring,Ashton,Hotspring,86,30'; + put '47.632,-112.855,Medicine (Sun River) Springs,Choteau,Hotspring,86,30'; + put '45.75,-113.938,Gallogly Spring,Dillon,Hotspring,100,38'; + put '47.33,-114.789,Quinns Hot Springs,Wallace,Hotspring,109,43'; + put '45.171,-112.153,Puller Hot Springs,Dillon,Hotspring,111,44'; + put '46.728,-114.533,"Lolo Hot Springs, Granite Springs",Hamilton,Hotspring,111,44'; + put '45.337,-110.691,Chico Hot Springs,Bozeman,Hotspring,113,45'; + put '47.607,-114.663,Camas Hot Springs,Wallace,Hotspring,113,45'; + put '45.841,-114.038,Medicine Hot Springs,Elk City,Hotspring,117,47'; + put '45.458,-113.109,Elkhorn Hot Springs,Dillon,Hotspring,118,48'; + put '45.027,-112.844,Mcmenomey Ranch Spring,Dillon,Hotspring,68,20'; + put '45.792,-112.126,Renova Hot Springs,Dillon,Hotspring,122,50'; + put '44.701,-111.878,Staudenmeyer Springs,Ashton,Hotspring,82,28'; + put '45.602,-111.9,Potosi Warm Springs,Bozeman,Hotspring,124,51'; + put '45.575,-111.683,Norris Hot Springs,Bozeman,Hotspring,127,53'; + put '45.462,-112.475,New Biltmore Hot Springs,Dillon,Hotspring,127,53'; + put '45.66,-111.186,Bozeman Hot Springs,Bozeman,Hotspring,131,55'; + put '45.896,-112.233,Pipestone Hot Springs,Dillon,Hotspring,135,57'; + put '46.547,-110.903,White Sulphur Springs,White Sulphur,Hotspring,136,58'; + put '46.448,-111.982,Alhambra Hot Springs,White Sulphur,Hotspring,138,59'; + put '45.757,-110.256,Hunters Hot Springs,Bozeman,Hotspring,140,60'; + put '45.368,-113.403,Jardine Hot Spring,Dillon,Hotspring,140,60'; + put '46.596,-112.108,Broadwater (Helena) Hot Springs,Butte,Hotspring,151,66'; + put '44.984,-111.613,Wolf Creek Hot Springs,Ashton,Hotspring,154,68'; + put '45.685,-112.295,Silver Star Hot Springs,Dillon,Hotspring,163,73'; + put '45.59,-111.899,Potosi Hot Springs,Bozeman,Hotspring,122,50'; + put '45.105,-112.751,Browns Springs,Dillon,Hotspring,75,24'; + put '46.718,-113.306,Bearmouth Warm Spring 2,Butte,Hotspring,68,20'; + put '46.717,-113.32,Bearmouth Warm Spring 1,Butte,Hotspring,68,20'; + put '47.217,-109.471,Brooks Warm Spring,Lewistown,Hotspring,68,20'; + put '45.708,-110.976,Bridger Canyon Warm Spring,Bozeman,Hotspring,70,21'; + put '46.795,-108.883,Durfee Creek Springs,Roundup,Hotspring,70,21'; + put '46.704,-113.452,Nimrod Springs,Butte,Hotspring,70,21'; + put '47.876,-108.656,Landusky Springs,Lewistown,Hotspring,70,21'; + put '45.032,-110.667,Bear Creek Springs,Bozeman,Hotspring,72,22'; + put '45.111,-112.714,Lovells Hot Spring,Dillon,Hotspring,72,22'; + put '46.106,-112.903,Anaconda Hot Springs,Butte,Hotspring,72,22'; + put '45.235,-112.135,Trudau Warm Springs,Dillon,Hotspring,73,23'; + put '45.698,-114.382,Blue Joint Hot Spring 1,Elk City,Hotspring,84,29'; + put '45.037,-111.953,Vigilante Spring,Bozeman,Hotspring,75,24'; + put '45.608,-110.571,Carter Bridge Warm Springs,Bozeman,Hotspring,82,28'; + put '46.355,-111.565,Bedford Hot Springs,White Sulphur,Hotspring,74,24'; + put '45.553,-110.142,Anderson Springs,Bozeman,Hotspring,77,25'; + put '45.42,-112.692,Apex Warm Spring,Dillon,Hotspring,77,25'; + put '46.607,-112.776,Garrison Warm Springs,Butte,Hotspring,77,25'; + put '47.843,-108.598,The (Landusky) Plunge,Lewistown,Hotspring,77,25'; + put '44.785,-111.649,West Fork Swimming Hole,Ashton,Hotspring,79,26'; + put '46.61,-112.555,Avon Warm Spring,Butte,Hotspring,79,26'; + put '46.334,-112.886,Deerlodge Prison Ranch Springs,Butte,Hotspring,79,26'; + put '47.994,-108.445,Lodgepole (Big Warm) Springs,Lewistown,Hotspring,79,26'; + put '47.451,-114.648,Green Springs,Wallace,Hotspring,79,26'; + put '45.392,-112.452,Beaverhead Rock Spring,Dillon,Hotspring,81,27'; + put '44.704,-111.892,Andersons Pasture Springs,Ashton,Hotspring,82,28'; + put '47.971,-108.395,Little Warm Springs,Lewistown,Hotspring,73,23'; + put '46.198,-112.094,Boulder Hot Springs,Butte,Hotspring,169,76'; + put '46.178,-112.794,Warm Springs (State Hospital),Butte,Hotspring,172,78'; + put '45.367,-111.726,Ennis Hot Springs,Bozeman,Hotspring,181,83'; + put '46.044,-112.811,Gregson Hot Springs,Butte,Hotspring,158,70'; + put '45.09,-110.774,Laduke (Corwin) Hot Spring,Bozeman,Hotspring,154,68'; + put '35.897,-82.826,Hot Springs,Knoxville,Hotspring,108,42'; + put '32.644,-108.128,Apache Tejo Warm Spring,Silver City,Hotspring,97,36'; + put '33.135,-107.254,Truth Or Consequences,Tularosa,Hotspring,113,45'; + put '36.305,-106.053,Ojo Caliente (Arsenic Spring),Aztec,Hotspring,111,44'; + put '33.162,-108.209,Spring (Hot),Clifton,Hotspring,111,44'; + put '36.508,-105.722,Manby Hot Springs,Raton,Hotspring,100,38'; + put '35.849,-106.629,Spence Hot Springs,Albuquerque,Hotspring,100,38'; + put '35.972,-106.56,San Antonio Warm Spring,Albuquerque,Hotspring,101,38'; + put '35.82,-106.627,Mccauley Hot Springs,Albuquerque,Hotspring,99,37'; + put '35.793,-106.685,Soda Dam Hot Springs,Albuquerque,Hotspring,117,47'; + put '33.831,-108.8,(Upper) Frisco Hot Spring,Clifton,Hotspring,98,37'; + put '35.646,-106.888,Warm Springs,Albuquerque,Hotspring,129,54'; + put '36.324,-105.606,Ponce De Leon Springs,Raton,Hotspring,93,34'; + put '34.038,-106.94,"Socorro Spring, Sedillo Spring",Socorro,Hotspring,93,34'; + put '33.293,-108.282,"Spring Mfg Two, Spring Mfg Three",Clifton,Hotspring,99,37'; + put '35.592,-106.753,Indian Springs,Albuquerque,Hotspring,123,51'; + put '32.501,-106.926,Radium Springs,Las Cruces,Hotspring,127,53'; + put '33.274,-108.25,Spring Mfg Four,Clifton,Hotspring,93,34'; + put '35.938,-106.646,San Antonio Hot Spring,Albuquerque,Hotspring,129,54'; + put '33.244,-108.88,San Francisco Hot Springs,Clifton,Hotspring,120,49'; + put '32.748,-107.836,Mimbres Hot Springs,Las Cruces,Hotspring,136,58'; + put '35.653,-105.29,Montezuma Hot Springs,Santa Fe,Hotspring,138,59'; + put '33.233,-108.235,Spring (Hot),Clifton,Hotspring,149,65'; + put '33.199,-108.209,Gila Hot Springs,Clifton,Hotspring,151,66'; + put '33.108,-108.483,Turkey Creek Hot Spring,Clifton,Hotspring,165,74'; + put '35.772,-106.69,Jemez Springs,Albuquerque,Hotspring,169,76'; + put '35.908,-106.615,Sulphur Springs,Albuquerque,Hotspring,189,87'; + put '33.237,-108.88,Hot Springs,Clifton,Hotspring,H,H'; + put '32.562,-108.027,Kennecott Warm Springs,Silver City,Hotspring,W,W'; + put '32.554,-107.994,Faywood Hot Springs,Las Cruces,Hotspring,129,54'; + put '33.898,-108.501,Aragon Springs,Clifton,Hotspring,70,21'; + put '34.847,-107.091,Spring (Salt),Socorro,Hotspring,76,24'; + put '34.903,-107.085,El Ojo Escondido,Socorro,Hotspring,73,23'; + put '35.06,-107.133,Alamos Spring,Albuquerque,Hotspring,72,22'; + put '34.912,-108.951,Rainbow Spring,Saint Johns,Hotspring,71,22'; + put '34.698,-107.129,Spring,Socorro,Hotspring,71,22'; + put '32.455,-104.489,Indian Big Spring,Carlsbad,Hotspring,79,26'; + put '34.995,-106.454,Clear Water Spring,Socorro,Hotspring,69,21'; + put '32.821,-108.408,Ash Spring,Silver City,Hotspring,72,22'; + put '32.83,-109.047,Goat Camp Spring,Silver City,Hotspring,69,21'; + put '35.548,-106.827,San Ysidro Warm Springs,Albuquerque,Hotspring,68,20'; + put '34.116,-106.98,Ojitos Springs,Socorro,Hotspring,68,20'; + put '32.248,-104.411,Mosley Spring,Carlsbad,Hotspring,68,20'; + put '33.708,-109.025,Frieborn Canyon Spring,Clifton,Hotspring,92,33'; + put '33.192,-108.18,Lyons Hunting Lodge Hot Springs,Clifton,Hotspring,126,52'; + put '35.601,-106.86,Phillips Springs,Albuquerque,Hotspring,70,21'; + put '33.285,-108.262,Spring Mfg One,Clifton,Hotspring,88,31'; + put '33.306,-108.324,The Meadows Warm Spring,Clifton,Hotspring,91,33'; + put '34.049,-106.939,Cook Spring,Socorro,Hotspring,70,21'; + put '32.795,-107.276,Derry Warm Springs,Las Cruces,Hotspring,92,33'; + put '32.884,-108.358,Allen Springs,Silver City,Hotspring,78,26'; + put '33.279,-107.563,Warm Springs,Tularosa,Hotspring,87,31'; + put '32.606,-107.19,Souse Springs,Las Cruces,Hotspring,88,31'; + put '34.808,-107.091,Spring (Salt),Socorro,Hotspring,86,30'; + put '35.54,-106.854,San Ysidro Hot Springs,Albuquerque,Hotspring,85,29'; + put '36.368,-106.059,Statue Spring,Aztec,Hotspring,83,28'; + put '34.833,-107.091,Laguna Pueblo Seeps,Socorro,Hotspring,82,28'; + put '33.572,-107.593,Ojo Caliente,Tularosa,Hotspring,83,28'; + put '34.854,-107.088,Laguna Pueblo Springs,Socorro,Hotspring,80,27'; + put '32.843,-108.512,Mangas Springs,Silver City,Hotspring,81,27'; + put '34.769,-107.085,Spring (Salt),Socorro,Hotspring,78,26'; + put '34.032,-106.777,Ojo De Las Canas,Socorro,Hotspring,79,26'; + put '40.972,-119.007,Black Rock Hot Spring,Lovelock,Hotspring,136,58'; + put '38.899,-119.41,Nevada (Hinds) Hot Springs,Walker Lake,Hotspring,144,62'; + put '38.922,-118.198,Wedell Hot Springs,Walker Lake,Hotspring,144,62'; + put '41.183,-114.991,Hot Springs,Wells,Hotspring,142,61'; + put '38.437,-116.277,Hot Creek Valley Spring,Tonopah,Hotspring,142,61'; + put '41.788,-114.735,Mineral Hot Spring,Wells,Hotspring,140,60'; + put '37.825,-117.337,Alkali Hot Spring,Goldfield,Hotspring,140,60'; + put '41.412,-114.675,Wine Cup Ranch Springs,Wells,Hotspring,138,59'; + put '40.404,-116.517,Crescent Valley Hot Springs,Winnemucca,Hotspring,138,59'; + put '40.417,-116.507,Crescent Valley Hot Springs,Winnemucca,Hotspring,138,59'; + put '40.603,-116.463,Horseshoe Ranch Springs,Winnemucca,Hotspring,136,58'; + put '41.378,-119.182,Springs (Hot),Vya,Hotspring,136,58'; + put '39.883,-114.893,Cherry Creek Hot Springs,Ely,Hotspring,144,62'; + put '40.922,-117.108,Hot Pot (Blossom Hot Springs),Winnemucca,Hotspring,136,58'; + put '41.721,-118.505,Howard Hot Spring,Vya,Hotspring,135,57'; + put '41.421,-117.388,The Hot Springs,Mcdermitt,Hotspring,135,57'; + put '40.418,-117.415,Buffalo Springs,Winnemucca,Hotspring,162,72'; + put '39.031,-116.666,Dianas Punch Bowl,Millett,Hotspring,138,59'; + put '39.404,-116.347,Klobe (Bartholomae) Hot Spring,Millett,Hotspring,156,69'; + put '36.975,-116.721,Hicks Hot Springs,Death Valley,Hotspring,109,43'; + put '40.178,-117.496,Home Station Ranch Hot Spring,Winnemucca,Hotspring,135,57'; + put '39.797,-118.067,Dixie Hot Springs,Reno,Hotspring,162,72'; + put '39.904,-116.588,Walti Hot Springs,Millett,Hotspring,162,72'; + put '38.981,-119.833,Walleys Hot Springs,Walker Lake,Hotspring,160,71'; + put '38.464,-115.792,Chimney Warm Spring,Lund,Hotspring,160,71'; + put '39.328,-116.858,Spencer Hot Springs,Millett,Hotspring,162,72'; + put '41.108,-117.578,Hot Springs,Mcdermitt,Hotspring,158,70'; + put '36.002,-114.742,Spring,Las Vegas,Hotspring,145,63'; + put '41.576,-115.181,Hot Creek Springs,Wells,Hotspring,151,66'; + put '40.954,-117.488,Golconda Hot Spring (South),Winnemucca,Hotspring,151,66'; + put '40.22,-116.068,Bruffeys Hot Springs,Winnemucca,Hotspring,149,65'; + put '40.249,-115.409,Smith Ranch Springs,Elko,Hotspring,149,65'; + put '41.867,-114.692,San Jacinto Ranch Spring,Wells,Hotspring,148,64'; + put '40.765,-116.04,Hot Sulphur Springs,Winnemucca,Hotspring,147,64'; + put '38.188,-116.373,Warm Springs,Tonopah,Hotspring,145,63'; + put '41.567,-118.564,Dyke Hot Springs,Vya,Hotspring,158,70'; + put '38.365,-115.867,Abel Spring,Lund,Hotspring,115,46'; + put '41.929,-114.071,Nile Spring,Wells,Hotspring,109,43'; + put '39.193,-119.752,Carson Hot Springs,Reno,Hotspring,120,49'; + put '39.512,-119.907,Lawton Hot Springs,Reno,Hotspring,120,49'; + put '39.944,-119.509,Anaho Island Spring,Reno,Hotspring,120,49'; + put '37.761,-117.632,Silverpeak Hot Spring,Goldfield,Hotspring,118,48'; + put '37.621,-114.51,Caliente Hot Springs,Caliente,Hotspring,118,48'; + put '39.058,-119.742,Saratoga Hot Spring,Reno,Hotspring,122,50'; + put '39.308,-117.552,Hot Springs,Millett,Hotspring,115,46'; + put '40.673,-116.838,Hot Springs,Winnemucca,Hotspring,122,50'; + put '39.08,-116.639,Potts Ranch Hot Springs,Millett,Hotspring,113,45'; + put '38.388,-115.866,Coyote Hole Spring,Lund,Hotspring,113,45'; + put '41.753,-118.841,Warm Springs,Vya,Hotspring,112,44'; + put '41.386,-114.165,Spring (Hot),Wells,Hotspring,111,44'; + put '40.961,-117.494,Golconda Hot Spring (North),Winnemucca,Hotspring,165,74'; + put '40.313,-117.07,Mound Springs,Winnemucca,Hotspring,109,43'; + put '40.585,-115.285,Sulphur Hot Springs,Elko,Hotspring,205,96'; + put '39.059,-119.815,Hobo Hot Springs,Reno,Hotspring,114,46'; + put '40.191,-117.107,Hot Springs,Winnemucca,Hotspring,127,53'; + put '40.819,-115.777,Hot Hole,Elko,Hotspring,133,56'; + put '39.286,-119.84,Bowers Mansion Hot Spring,Reno,Hotspring,133,56'; + put '41.809,-118.861,Painted Hills Mine,Vya,Hotspring,131,55'; + put '41.925,-118.805,Bog Hot Springs,Vya,Hotspring,131,55'; + put '41.647,-115.775,Wild Horse Hot Springs,Wells,Hotspring,129,54'; + put '40.183,-117.102,Hot Springs Ranch,Winnemucca,Hotspring,129,54'; + put '40.08,-117.604,Mccoy Springs,Winnemucca,Hotspring,120,49'; + put '41.353,-119.216,Spring (Hot),Vya,Hotspring,127,53'; + put '41.357,-119.188,Springs (Hot),Vya,Hotspring,133,56'; + put '40.198,-117.103,Hot Springs,Winnemucca,Hotspring,127,53'; + put '39.42,-119.738,Dimonte Spring,Reno,Hotspring,127,53'; + put '38.952,-115.23,Williams Hot Spring,Lund,Hotspring,127,53'; + put '41.261,-115.305,Hot Springs,Wells,Hotspring,126,52'; + put '39.041,-116.663,Hot Spring,Millett,Hotspring,124,51'; + put '41.365,-119.221,Spring (Hot),Vya,Hotspring,122,50'; + put '41.159,-114.986,"Threemile Spring, Sulphur Hot Spr",Wells,Hotspring,122,50'; + put '41.339,-119.192,Springs (Hot),Vya,Hotspring,127,53'; + put '39.893,-116.649,Little Hot Springs,Millett,Hotspring,H,H'; + put '39.787,-119.011,Bradys Hot Springs,Reno,Hotspring,209,98'; + put '41.175,-115.278,Hot Spring,Wells,Hotspring,H,H'; + put '41.145,-114.994,Hot Spring,Wells,Hotspring,H,H'; + put '40.864,-117.349,Sulphur Spring,Winnemucca,Hotspring,H,H'; + put '39.733,-119.039,Eagle Salt Works Spring,Reno,Hotspring,H,H'; + put '39.281,-118.42,Sand Springs,Reno,Hotspring,H,H'; + put '38.81,-116.397,Fish Springs,Tonopah,Hotspring,W,W'; + put '39.559,-117.427,Petersons Mill Hot Spring,Millett,Hotspring,H,H'; + put '38.339,-116.662,Warm Spring,Tonopah,Hotspring,W,W'; + put '38.859,-119.175,Hot Spring,Walker Lake,Hotspring,H,H'; + put '39.995,-117.854,Senator Fumaroles,Millett,Hotspring,B,B'; + put '39.565,-118.856,(Soda Lake Area),Reno,Hotspring,210,99'; + put '40.141,-119.687,The Needle Rocks Hot Springs,Lovelock,Hotspring,208,98'; + put '40.146,-119.673,The Needle Rocks Hot Spring,Lovelock,Hotspring,208,98'; + put '40.662,-119.365,Great Boiling Spring (Gerlach),Lovelock,Hotspring,208,98'; + put '39.388,-119.743,Steamboat Springs,Reno,Hotspring,205,96'; + put '39.866,-118.017,Dixie Comstock Mine,Reno,Hotspring,H,H'; + put '40.746,-116.689,White House Spring,Winnemucca,Hotspring,W,W'; + put '39.98,-119.502,Pyramid Island Hot Spring,Reno,Hotspring,.,.'; + put '41.934,-118.808,Warm Springs,Vya,Hotspring,W,W'; + put '41.385,-116.058,Petaini Springs,Mcdermitt,Hotspring,W,W'; + put '41.064,-115.389,Warm Springs,Wells,Hotspring,W,W'; + put '41.066,-114.99,Spring,Wells,Hotspring,W,W'; + put '41.355,-114.133,Warm Springs,Wells,Hotspring,W,W'; + put '41.148,-116.733,Hot Lake,Mcdermitt,Hotspring,H,H'; + put '40.684,-116.153,Ellison Ranch Warm Spring,Winnemucca,Hotspring,W,W'; + put '40.604,-117.648,Leach Hot Springs,Winnemucca,Hotspring,207,97'; + put '40.751,-115.035,Warm Springs,Elko,Hotspring,W,W'; + put '40.782,-115.363,Warm Spring,Elko,Hotspring,W,W'; + put '39.529,-116.388,Warm Spring,Millett,Hotspring,W,W'; + put '39.072,-115.635,Big Blue Spring,Ely,Hotspring,W,W'; + put '38.95,-119.388,Spring,Walker Lake,Hotspring,W,W'; + put '38.965,-118.689,Double Spring,Walker Lake,Hotspring,W,W'; + put '38.458,-117.303,Indian Springs,Tonopah,Hotspring,W,W'; + put '40.592,-116.157,Raine Ranch Springs,Winnemucca,Hotspring,W,W'; + put '39.941,-116.681,Hot Springs,Millett,Hotspring,180,82'; + put '40.567,-116.588,Beowawe Hot Springs (The Geysers),Winnemucca,Hotspring,208,98'; + put '40.761,-117.492,Hot Springs,Winnemucca,Hotspring,185,85'; + put '40.653,-119.378,Mud Springs,Lovelock,Hotspring,184,84'; + put '38.768,-119.174,Wilson Hot Spring,Walker Lake,Hotspring,183,84'; + put '41.921,-118.709,Baltazor Hot Spring,Vya,Hotspring,181,83'; + put '40.857,-119.328,Fly Ranch (Wards) Hot Springs,Lovelock,Hotspring,180,82'; + put '39.597,-119.11,Patua Hot Springs (Fernley),Reno,Hotspring,187,86'; + put '39.028,-117.136,Mcleod Ranch Hot Spring,Millett,Hotspring,180,82'; + put '40.316,-116.433,Hot Spring,Winnemucca,Hotspring,186,86'; + put '38.521,-116.365,Hot Creek Ranch Hot Spring,Tonopah,Hotspring,180,82'; + put '41.051,-119.028,Double Hot Springs,Vya,Hotspring,178,81'; + put '40.003,-117.718,Hyder Hot Springs,Winnemucca,Hotspring,176,80'; + put '39.665,-114.807,Monte Neva Hot Springs,Ely,Hotspring,176,80'; + put '40.368,-117.327,Buffalo Valley Hot Springs,Winnemucca,Hotspring,174,79'; + put '40.699,-116.133,Hot Springs (Carlin),Winnemucca,Hotspring,174,79'; + put '41.052,-118.717,Macfarlane Hot Spring,Vya,Hotspring,170,77'; + put '39.342,-118.578,Borax Spring,Reno,Hotspring,180,82'; + put '39.484,-119.804,Moana Springs,Reno,Hotspring,199,93'; + put '41.243,-114.947,Twelvemile Spring,Wells,Hotspring,102,39'; + put '39.38,-119.74,Steamboat Springs,Reno,Hotspring,205,96'; + put '39.558,-116.36,Bartine Hot Springs,Millett,Hotspring,108,42'; + put '39.954,-117.917,Fumaroles,Millett,Hotspring,204,96'; + put '40.389,-119.402,Hot Seeps (San Emidio Desert),Lovelock,Hotspring,203,95'; + put '38.822,-117.183,Darroughs Hot Springs,Tonopah,Hotspring,203,95'; + put '40.088,-117.725,Sou (Seven Devils) Hot Springs,Winnemucca,Hotspring,185,85'; + put '41.363,-118.788,Pinto Hot Springs,Vya,Hotspring,199,93'; + put '40.408,-117.883,Kyle Hot Springs,Winnemucca,Hotspring,171,77'; + put '41.357,-118.809,West Pinto Hot Spring,Vya,Hotspring,198,92'; + put '39.316,-117.549,Hot Springs,Millett,Hotspring,198,92'; + put '41.468,-116.15,Hot Sulphur Springs (Tuscarora),Mcdermitt,Hotspring,194,90'; + put '40.813,-115.778,Elko Hot Spring,Elko,Hotspring,190,88'; + put '39.208,-118.723,"Lee Hot Springs, Allen Springs",Reno,Hotspring,190,88'; + put '40.262,-119.379,Boiling Springs,Lovelock,Hotspring,187,86'; + put '40.77,-119.113,Butte Springs (Trego Hot Springs),Lovelock,Hotspring,187,86'; + put '39.161,-119.183,Wabuska Hot Springs,Reno,Hotspring,201,94'; + put '39.814,-115.612,Giocoecha Warm Springs,Ely,Hotspring,76,24'; + put '36.389,-114.433,Blue Point Spring,Las Vegas,Hotspring,82,28'; + put '37.016,-117.211,Seep,Goldfield,Hotspring,77,25'; + put '37.751,-116.274,Cedar Spring,Goldfield,Hotspring,77,25'; + put '37.896,-114.227,Flatnose Ranch Spring,Caliente,Hotspring,77,25'; + put '36.207,-115.983,Pahrump (Bennetts) Spring,Las Vegas,Hotspring,77,25'; + put '41.775,-115.921,Rizzi Ranch Hot Spring,Wells,Hotspring,106,41'; + put '35.944,-114.731,Hot Spring,Kingman,Hotspring,78,26'; + put '41.884,-114.117,Gambles Hole,Wells,Hotspring,104,40'; + put '36.565,-115.671,Indian Springs,Las Vegas,Hotspring,78,26'; + put '39.547,-114.915,Campbell Ranch Springs,Ely,Hotspring,76,24'; + put '38.423,-115.022,Flag Springs,Lund,Hotspring,75,24'; + put '38.44,-115.011,Butterfield Springs,Lund,Hotspring,75,24'; + put '37.997,-118.039,Fish Spring,Mariposa,Hotspring,75,24'; + put '37.029,-116.719,Springs,Goldfield,Hotspring,75,24'; + put '36.426,-116.411,Ash Tree Spring,Death Valley,Hotspring,75,24'; + put '36.033,-115.888,Browns Spring,Las Vegas,Hotspring,75,24'; + put '41.322,-119.206,Springs,Vya,Hotspring,75,24'; + put '41.706,-118.261,Ninemile Springs,Vya,Hotspring,79,26'; + put '35.964,-114.743,Hot Spring,Kingman,Hotspring,82,28'; + put '41.763,-118.279,Fivemile Spring,Vya,Hotspring,81,27'; + put '39.457,-119.722,Huffaker Springs,Reno,Hotspring,81,27'; + put '38.992,-117.042,Charnock (Big Blue) Springs,Tonopah,Hotspring,80,27'; + put '36.402,-116.302,Davis Ranch Springs,Death Valley,Hotspring,81,27'; + put '36.45,-116.313,Spring,Death Valley,Hotspring,81,27'; + put '39.792,-114.692,Lower Shellbourne Spring,Ely,Hotspring,77,25'; + put '41.338,-119.168,Springs,Vya,Hotspring,79,26'; + put '41.022,-119.275,Caine Spring,Vya,Hotspring,73,23'; + put '41.05,-117.1,Hot Springs Ranch Springs,Mcdermitt,Hotspring,79,26'; + put '40.079,-116.035,Flynn Ranch Springs,Winnemucca,Hotspring,78,26'; + put '40.325,-116.058,Hot Springs,Winnemucca,Hotspring,79,26'; + put '36.414,-116.292,Spring,Death Valley,Hotspring,79,26'; + put '36.173,-115.191,Las Vegas Springs,Las Vegas,Hotspring,79,26'; + put '36.174,-115.479,White Rock Spring,Las Vegas,Hotspring,78,26'; + put '36.565,-115.623,Spring,Las Vegas,Hotspring,79,26'; + put '36.491,-116.342,"Fairbanks Spring, Soda Spring",Death Valley,Hotspring,81,27'; + put '38.654,-114.633,Geyser Ranch Springs,Lund,Hotspring,70,21'; + put '36.363,-116.271,Bole Spring,Death Valley,Hotspring,72,22'; + put '36.999,-116.706,Spring,Death Valley,Hotspring,72,22'; + put '36.942,-115.425,Ash Creek Spring,Las Vegas,Hotspring,72,22'; + put '38.796,-119.65,Doud Springs,Walker Lake,Hotspring,70,21'; + put '38.622,-115.047,Emigrant Springs,Lund,Hotspring,70,21'; + put '38.927,-115.082,Preston Springs,Lund,Hotspring,70,21'; + put '36.147,-115.893,Manse Ranch Spring,Las Vegas,Hotspring,75,24'; + put '38.645,-114.632,Geyser Ranch Springs,Lund,Hotspring,70,21'; + put '38.574,-115.522,Tom Spring,Lund,Hotspring,72,22'; + put '38.671,-114.628,Geyser Ranch Springs,Lund,Hotspring,70,21'; + put '37.783,-114.528,Bennett Springs,Caliente,Hotspring,70,21'; + put '37.86,-114.321,Delmues Springs,Caliente,Hotspring,70,21'; + put '36.408,-116.313,Davis Ranch Spring,Death Valley,Hotspring,70,21'; + put '36.567,-114.446,Seep,Las Vegas,Hotspring,70,21'; + put '41.369,-114.187,Gamble Spring,Wells,Hotspring,69,20'; + put '39.901,-115.868,Thompson Ranch Spring,Ely,Hotspring,68,20'; + put '38.633,-114.638,Wambolt Springs,Lund,Hotspring,70,21'; + put '37.906,-118.171,Sand Spring,Mariposa,Hotspring,74,23'; + put '36.486,-114.329,Springs,Las Vegas,Hotspring,77,25'; + put '41.354,-119.116,Mustang Springs,Vya,Hotspring,73,23'; + put '41.746,-119.791,Warm Springs,Vya,Hotspring,73,23'; + put '41.258,-118.937,Cane Springs,Vya,Hotspring,74,23'; + put '40.103,-119.884,Fish Springs,Lovelock,Hotspring,73,23'; + put '39.853,-119.719,Spring,Reno,Hotspring,73,23'; + put '39.832,-116.069,Sulphur Spring,Millett,Hotspring,74,23'; + put '36.363,-116.263,Spring,Death Valley,Hotspring,72,22'; + put '38.554,-115.531,Kate Spring,Lund,Hotspring,73,23'; + put '37.074,-116.691,Spring,Goldfield,Hotspring,72,22'; + put '37.979,-117.993,Gap Spring,Goldfield,Hotspring,73,23'; + put '41.591,-119.862,Twin (Vya) Spring,Vya,Hotspring,71,22'; + put '40.763,-119.172,Coyote Spring,Lovelock,Hotspring,72,22'; + put '40.127,-116.884,Springs,Winnemucca,Hotspring,72,22'; + put '40.187,-116.805,Spring,Winnemucca,Hotspring,72,22'; + put '40.967,-114.515,Johnson Ranch Springs,Elko,Hotspring,72,22'; + put '36.205,-115.141,Kyle Spring,Las Vegas,Hotspring,75,24'; + put '39.8,-114.653,Upper Shellbourne Spring,Ely,Hotspring,74,23'; + put '36.428,-116.303,Button Springs,Death Valley,Hotspring,93,34'; + put '38.383,-115.153,Hot Creek Ranch Spring,Lund,Hotspring,90,32'; + put '39.283,-114.866,Lackawanna Hot Springs,Ely,Hotspring,95,35'; + put '38.532,-116.465,Upper Warm Spring,Tonopah,Hotspring,95,35'; + put '38.823,-116.717,South Mosquito Creek Ranch Springs,Tonopah,Hotspring,95,35'; + put '40.829,-117.306,Brooks Spring,Winnemucca,Hotspring,93,34'; + put '40.992,-117.763,Spring,Winnemucca,Hotspring,93,34'; + put '41.971,-114.574,Warm Springs,Wells,Hotspring,95,35'; + put '38.95,-115.7,Big Warm Spring,Lund,Hotspring,93,34'; + put '37.463,-115.192,Ash Springs,Caliente,Hotspring,97,36'; + put '36.464,-116.319,Parent Springs,Death Valley,Hotspring,93,34'; + put '38.352,-115.181,Moon River Spring,Lund,Hotspring,92,33'; + put '36.402,-116.274,"Point of Rocks Springs, King Sprin",Death Valley,Hotspring,91,33'; + put '36.421,-116.322,Crystal Pool,Death Valley,Hotspring,91,33'; + put '36.425,-116.291,Devils Hole,Death Valley,Hotspring,92,33'; + put '39.068,-119.786,Springs,Reno,Hotspring,90,32'; + put '38.954,-117.049,Big Blue (A) Spring,Tonopah,Hotspring,90,32'; + put '40.087,-114.647,Collar And Elbow Spring,Elko,Hotspring,93,34'; + put '36.378,-114.443,Rogers Spring,Las Vegas,Hotspring,82,28'; + put '39.943,-116.073,Shipley Hot Spring,Millett,Hotspring,106,41'; + put '38.698,-116.435,"Upper Warm Spring, Warm Spring",Tonopah,Hotspring,106,41'; + put '41.53,-118.57,Spring,Vya,Hotspring,104,40'; + put '41.877,-115.628,Rowland Hot Springs,Wells,Hotspring,104,40'; + put '40.035,-117.604,Lower Ranch Hot Springs,Winnemucca,Hotspring,104,40'; + put '40.187,-116.79,Chillis Hot Spring,Winnemucca,Hotspring,102,39'; + put '39.988,-116.044,Siri Ranch Spring,Millett,Hotspring,95,35'; + put '39.421,-119.758,Zolezzi Spring,Reno,Hotspring,102,39'; + put '38.531,-116.405,Old Dugan Ranch Hot Springs,Tonopah,Hotspring,102,39'; + put '36.968,-116.723,Burrell Hot Spring,Death Valley,Hotspring,102,39'; + put '38.343,-118.103,Soda Springs,Walker Lake,Hotspring,100,38'; + put '38.556,-115.767,"Lockes Big Spring, Hay Corral Spr",Lund,Hotspring,100,38'; + put '38.594,-115.138,Moorman Spring,Lund,Hotspring,100,38'; + put '38.398,-115.862,Storm Spring,Lund,Hotspring,99,37'; + put '41.19,-115.287,Hot Spring,Wells,Hotspring,97,36'; + put '37.822,-117.48,Pearl Hot Springs,Goldfield,Hotspring,97,36'; + put '39.159,-119.737,Nevada State Prison Spring,Reno,Hotspring,75,24'; + put '40.025,-117.646,Spring,Winnemucca,Hotspring,83,28'; + put '40.83,-119.538,Springs,Lovelock,Hotspring,84,29'; + put '39.442,-119.743,Double Diamond Spring,Reno,Hotspring,84,29'; + put '39.413,-114.779,Mcgill Spring,Ely,Hotspring,84,29'; + put '39.458,-114.756,Schoolhouse Spring,Ely,Hotspring,84,29'; + put '36.375,-116.274,Big (Ash Meadows) Spring,Death Valley,Hotspring,83,28'; + put '38.292,-114.272,Hammond Ranch Spring,Lund,Hotspring,84,29'; + put '41.398,-119.165,Spring,Vya,Hotspring,84,29'; + put '41.732,-119.785,Seeps (Hills Warm Spring),Vya,Hotspring,83,28'; + put '38.563,-115.528,Blue Eagle Springs,Lund,Hotspring,84,29'; + put '40.873,-117.937,Rose Creek Spring,Winnemucca,Hotspring,83,28'; + put '39.917,-114.667,Spring,Ely,Hotspring,83,28'; + put '36.39,-116.278,Jack Rabbit Spring,Death Valley,Hotspring,82,28'; + put '36.437,-116.206,Spring,Death Valley,Hotspring,82,28'; + put '38.937,-115.695,Little Warm Spring,Lund,Hotspring,90,32'; + put '36.479,-116.326,Rogers Spring,Death Valley,Hotspring,82,28'; + put '40.29,-116.049,Carlotti Ranch Springs,Winnemucca,Hotspring,102,39'; + put '36.468,-116.325,Longstreet Spring,Death Valley,Hotspring,82,28'; + put '36.722,-114.716,Muddy Spring,Las Vegas,Hotspring,90,32'; + put '37.532,-115.233,Crystal Springs,Caliente,Hotspring,90,32'; + put '37.598,-115.215,Hiko Spring,Caliente,Hotspring,90,32'; + put '36.404,-116.383,Spring,Death Valley,Hotspring,90,32'; + put '37.996,-116.389,Reveille Mill Spring,Goldfield,Hotspring,84,29'; + put '36.71,-114.714,Moapa Warm Springs,Las Vegas,Hotspring,90,32'; + put '35.982,-114.748,Hot Springs,Kingman,Hotspring,86,30'; + put '40.929,-116.895,Izzenhood Ranch Springs,Winnemucca,Hotspring,88,31'; + put '37.807,-114.38,Panaca Spring,Caliente,Hotspring,88,31'; + put '36.942,-116.729,Spring,Death Valley,Hotspring,88,31'; + put '41.98,-114.376,Hot Spring,Wells,Hotspring,86,30'; + put '36.433,-116.308,Scruggs Springs,Death Valley,Hotspring,86,30'; + put '40.952,-114.751,Ralphs Warm Springs,Elko,Hotspring,86,30'; + put '39.526,-118.876,Soda Lake,Reno,Hotspring,86,30'; + put '38.027,-116.683,Spring,Tonopah,Hotspring,86,30'; + put '37.741,-115.753,Sand Spring,Caliente,Hotspring,86,30'; + put '36.918,-116.744,Beatty Municipal Spring,Death Valley,Hotspring,88,31'; + put '38.255,-116.829,Saulsbury Warm Spring,Tonopah,Hotspring,86,30'; + put '42.48,-73.37,Lebanon Spring,Albany,Hotspring,72,22'; + put '44.241,-122.058,Bigelow Hot Springs,Salem,Hotspring,142,61'; + put '44.862,-121.201,Kahneeta Hot Springs,Bend,Hotspring,126,52'; + put '44.927,-117.939,Radium Hot Springs,Baker,Hotspring,135,57'; + put '44.354,-118.574,Blue Mountain Hot Springs,Canyon City,Hotspring,136,58'; + put '44.936,-122.173,Bagby Hot Springs,Salem,Hotspring,136,58'; + put '43.944,-118.136,Beulah Hot Springs,Burns,Hotspring,140,60'; + put '43.763,-117.156,Mitchell Butte Hot Spring,Boise,Hotspring,144,62'; + put '42.116,-121.287,Oregon Hot Springs (Big Hot Spring,Klamath Falls,Hotspring,142,61'; + put '45.151,-118.659,Lehman Springs,Pendleton,Hotspring,142,61'; + put '43.719,-121.209,East Lake Hot Springs,Crescent,Hotspring,144,62'; + put '43.469,-118.202,Luce Hot Springs,Burns,Hotspring,145,63'; + put '45.018,-117.625,Medical Hot Springs,Grangeville,Hotspring,140,60'; + put '44.867,-121.228,Springs,Bend,Hotspring,125,52'; + put '42.188,-118.383,Flagstaff Butte Hot Spring,Adel,Hotspring,126,52'; + put '44.451,-119.105,Mount Vernon Hot Springs,Canyon City,Hotspring,121,49'; + put '42.977,-117.061,Canters Hot Spring,Jordan Valley,Hotspring,120,49'; + put '43.294,-122.367,Umpqua Hot Springs,Roseburg,Hotspring,117,47'; + put '44.002,-119.647,Weberg Hot Spring,Canyon City,Hotspring,115,46'; + put '43.739,-117.178,Deer Butte Hot Spring,Boise,Hotspring,115,46'; + put '43.795,-117.958,Jonesboro Warm Spring,Boise,Hotspring,112,45'; + put '42.075,-119.927,Hallinan Spring,Adel,Hotspring,113,45'; + put '42.297,-119.776,Fisher Hot Springs,Adel,Hotspring,154,68'; + put '45.013,-117.885,Kropp Hot Spring,Grangeville,Hotspring,109,43'; + put '42.221,-120.368,Hunters Hot Springs,Klamath Falls,Hotspring,205,96'; + put '44.083,-122.233,Cougar Reservoir Hot Springs,Salem,Hotspring,111,44'; + put '44.023,-117.46,Neal Hot Springs,Baker,Hotspring,189,87'; + put '42.431,-121.963,Eagle Point Spring,Klamath Falls,Hotspring,95,35'; + put '43.689,-122.372,Kitson Hot Springs,Roseburg,Hotspring,109,43'; + put '44.813,-117.765,Spring (Hot),Baker,Hotspring,W,W'; + put '43.776,-118.047,Warm Spring,Burns,Hotspring,W,W'; + put '43.793,-118.472,Sitz Warm Spring,Burns,Hotspring,W,W'; + put '43.86,-118.288,Altnow Hot Spring,Burns,Hotspring,W,W'; + put '43.893,-117.596,Springs,Boise,Hotspring,W,W'; + put '45.206,-117.912,Union Station Hot Springs,Grangeville,Hotspring,H,H'; + put '44.208,-117.455,Jamieson Hot Springs,Baker,Hotspring,H,H'; + put '42.338,-118.602,Hot Springs,Adel,Hotspring,207,97'; + put '44.782,-121.975,Breitenbush Hot Springs,Bend,Hotspring,198,92'; + put '42.219,-119.877,Warner Valley Ranch,Adel,Hotspring,198,92'; + put '42.156,-120.345,Barry Ranch Hot Springs,Klamath Falls,Hotspring,190,88'; + put '44.193,-122.049,Belknap Springs,Salem,Hotspring,160,71'; + put '45.021,-122.009,Austin Hot Springs,Vancouver,Hotspring,186,86'; + put '42.676,-118.344,Mickey Springs,Adel,Hotspring,187,86'; + put '44.153,-122.098,Foley Springs,Salem,Hotspring,178,81'; + put '45.244,-117.958,Hot Lake Springs,Grangeville,Hotspring,176,80'; + put '42.544,-118.533,Alvord Hot Springs,Adel,Hotspring,174,79'; + put '43.441,-118.638,Crane Hot Springs,Burns,Hotspring,172,78'; + put '42.226,-119.881,Crump Geyser (Crump Spring),Adel,Hotspring,172,78'; + put '43.727,-117.203,Snively Hot Spring,Boise,Hotspring,170,77'; + put '42.174,-121.615,Olene Gap Hot Springs,Klamath Falls,Hotspring,165,74'; + put '43.708,-122.288,Mccredie Springs,Roseburg,Hotspring,163,73'; + put '43.982,-117.233,Vale Hot Springs,Boise,Hotspring,163,73'; + put '42.162,-120.344,Leithead Hot Spring,Klamath Falls,Hotspring,162,72'; + put '45.372,-121.697,Mount Hood Fumaroles,The Dalles,Hotspring,194,90'; + put '43.264,-119.015,Dunn Spring,Burns,Hotspring,70,21'; + put '42.873,-122.167,Annie Spring,Medford,Hotspring,77,25'; + put '42.133,-121.219,Wilkersons Hot Spring,Klamath Falls,Hotspring,76,24'; + put '43.272,-119.293,Basque Spring,Burns,Hotspring,74,23'; + put '43.276,-119.34,Double O Spring,Burns,Hotspring,74,23'; + put '44.073,-119.427,Brisbois Ranch Springs,Canyon City,Hotspring,72,22'; + put '43.265,-119.276,Johnson Spring,Burns,Hotspring,72,22'; + put '43.281,-119.311,Double O Barnyard Spring,Burns,Hotspring,72,22'; + put '43.501,-119.091,Roadland Spring,Burns,Hotspring,72,22'; + put '43.529,-119.081,Goodman Spring,Burns,Hotspring,72,22'; + put '43.703,-117.19,South Black Willow Spring,Boise,Hotspring,71,22'; + put '42.307,-119.875,Moss Ranch Spring,Adel,Hotspring,72,22'; + put '43.758,-118.067,Juntura Warm Spring 1,Burns,Hotspring,77,25'; + put '43.732,-121.252,Paulina Springs,Crescent,Hotspring,70,21'; + put '42.176,-121.828,Howard Holiday,Klamath Falls,Hotspring,77,25'; + put '43.477,-119.075,Baker Spring,Burns,Hotspring,70,21'; + put '42.178,-121.801,Hardboard Spring,Klamath Falls,Hotspring,70,21'; + put '42.325,-120.327,White Rock Ranch Hot Spring,Klamath Falls,Hotspring,71,21'; + put '43.252,-119.258,Hughet Spring,Burns,Hotspring,68,20'; + put '42.38,-120.33,Bean Hot Spring,Klamath Falls,Hotspring,69,20'; + put '42.933,-120.642,Lost Cabin Spring,Klamath Falls,Hotspring,68,20'; + put '42.998,-120.725,Buckhorn Creek Springs,Klamath Falls,Hotspring,68,20'; + put '42.688,-117.905,Tudors Spring,Jordan Valley,Hotspring,68,20'; + put '42.756,-117.55,Scott Spring,Jordan Valley,Hotspring,68,20'; + put '42.725,-120.646,Summer Lake Hot Spring,Klamath Falls,Hotspring,109,43'; + put '43.757,-118.092,Juntura Warm Spring 2,Burns,Hotspring,95,35'; + put '44.374,-118.738,Limekiln Hot Spring,Canyon City,Hotspring,70,21'; + put '42.221,-122.742,Jackson Hot Springs,Medford,Hotspring,95,35'; + put '44.892,-119.141,Ritter Hot Springs,Canyon City,Hotspring,106,41'; + put '43.808,-122.309,Wall Creek Warm Springs,Roseburg,Hotspring,106,41'; + put '43.395,-118.308,Springs (Hot),Burns,Hotspring,106,41'; + put '43.302,-117.383,Hot Spring,Boise,Hotspring,106,41'; + put '44.28,-118.956,Joaquin Miller Hot Springs,Canyon City,Hotspring,104,40'; + put '42.501,-119.693,Antelope Hot Springs,Adel,Hotspring,104,40'; + put '45.129,-118.738,Hidaway Springs,Pendleton,Hotspring,100,38'; + put '44.975,-118.044,Fisher Hot Springs,Canyon City,Hotspring,99,37'; + put '44.033,-117.449,Bully Creek Spring,Baker,Hotspring,99,37'; + put '42.93,-120.798,Pardon Warm Spring,Klamath Falls,Hotspring,76,24'; + put '42.327,-118.602,Borax Lake (Hot Lake),Adel,Hotspring,97,36'; + put '42.161,-121.627,Crystal Spring,Klamath Falls,Hotspring,78,26'; + put '45.741,-118.233,Bingham Springs,Pendleton,Hotspring,93,34'; + put '42.889,-118.898,Fivemile Spring (Hoghouse Hot Sprs,Adel,Hotspring,80,27'; + put '43.54,-119.081,Millpond Hot Spring,Burns,Hotspring,79,26'; + put '45.891,-116.873,Cook Creek Hot Spring,Grangeville,Hotspring,97,36'; + put '45.295,-121.731,Swim Warm Springs,The Dalles,Hotspring,79,26'; + put '42.04,-120.924,Warm Spring,Klamath Falls,Hotspring,92,33'; + put '44.779,-117.811,Sam O Spring,Baker,Hotspring,80,27'; + put '44.538,-117.417,Nelson Spring,Baker,Hotspring,80,27'; + put '45.631,-119.703,Well Spring,Pendleton,Hotspring,80,27'; + put '42.287,-119.867,Moss Ranch Springs,Adel,Hotspring,83,28'; + put '45.061,-118.455,Warm Mineral Spring,Pendleton,Hotspring,83,28'; + put '43.95,-119.634,Warm Springs,Burns,Hotspring,84,29'; + put '45.295,-117.806,Warm Spring,Grangeville,Hotspring,85,29'; + put '42.815,-118.899,Warm Springs,Adel,Hotspring,89,32'; + put '43.452,-103.508,Hot Brook Springs,Hot Springs,Hotspring,75,24'; + put '43.442,-103.481,Hot Springs,Hot Springs,Hotspring,87,31'; + put '29.178,-102.953,Rio Grande Village Spring,Emory Peak,Hotspring,97,36'; + put '30.823,-105.315,Indian Hot Springs,Marfa,Hotspring,117,47'; + put '30.038,-104.598,Ruidosa Hot Springs,Marfa,Hotspring,113,45'; + put '29.182,-102.992,Hot Springs,Emory Peak,Hotspring,106,41'; + put '30.21,-104.562,Capote Springs,Marfa,Hotspring,99,37'; + put '30.133,-104.602,Nixon Spring,Marfa,Hotspring,90,32'; + put '29.787,-104.462,Springs (Las Cienegas),Presidio,Hotspring,86,30'; + put '30.861,-105.34,Red Bull Spring,Marfa,Hotspring,99,37'; + put '38.85,-112.49,Hatton Hot Spring,Richfield,Hotspring,100,38'; + put '40.176,-111.801,Bird Island,Salt Lake City,Hotspring,86,30'; + put '41.917,-111.958,Gancheff Spring,Ogden,Hotspring,88,31'; + put '37.942,-112.438,Lefevre,Cedar City,Hotspring,90,32'; + put '37.335,-113.687,Veyo Hot Spring,Cedar City,Hotspring,90,32'; + put '40.332,-111.891,Fault Zone Spring,Salt Lake City,Hotspring,90,32'; + put '40.146,-111.806,Lincoln Point Warm Springs,Salt Lake City,Hotspring,90,32'; + put '38.186,-112.912,Us Blm,Richfield,Hotspring,91,33'; + put '41.833,-112.454,Blue Creek Spring,Brigham City,Hotspring,82,28'; + put '40.526,-111.488,Midway Hot Springs,Salt Lake City,Hotspring,100,38'; + put '40.525,-111.468,Midway Hot Springs,Salt Lake City,Hotspring,104,40'; + put '40.038,-111.529,Castilla Springs,Salt Lake City,Hotspring,104,40'; + put '38.217,-112.904,Dotsons (Radium) Warm Spring,Richfield,Hotspring,91,33'; + put '40.465,-109.221,Split Mountain Warm Springs,Vernal,Hotspring,86,30'; + put '40.788,-112.017,Hobo Warm Spring,Tooele,Hotspring,84,29'; + put '40.788,-111.899,Wasatch Hot Springs,Salt Lake City,Hotspring,108,42'; + put '39.35,-113.515,Tule Spring,Delta,Hotspring,82,28'; + put '39.424,-113.485,Coyote Spring,Delta,Hotspring,82,28'; + put '39.842,-113.392,Fish Springs,Delta,Hotspring,82,28'; + put '39.887,-113.413,North Springs,Delta,Hotspring,82,28'; + put '41.756,-113.603,Warm Spring,Brigham City,Hotspring,81,27'; + put '41.038,-111.656,Como Springs,Ogden,Hotspring,81,27'; + put '40.397,-112.421,Morgans Warm Spring,Tooele,Hotspring,80,27'; + put '39.464,-114.038,Gandy Warm Springs,Ely,Hotspring,81,27'; + put '40.447,-110.828,Warm Springs,Salt Lake City,Hotspring,79,26'; + put '37.7,-110.421,Warm Spring,Escalante,Hotspring,79,26'; + put '40.502,-114.038,Blue Lake Spring,Elko,Hotspring,84,29'; + put '38.503,-112.849,Roosevelt Hot Springs,Richfield,Hotspring,133,56'; + put '38.774,-112.096,Richfield Warm Springs,Richfield,Hotspring,73,23'; + put '40.488,-111.911,Crystal Hot Springs,Salt Lake City,Hotspring,187,86'; + put '38.186,-113.197,Thermo Hot Springs,Richfield,Hotspring,185,85'; + put '38.172,-113.204,Thermo Hot Springs,Richfield,Hotspring,181,83'; + put '39.613,-112.729,"Baker (Abraham, Crater) Hot Spring",Delta,Hotspring,180,82'; + put '38.639,-112.098,Red Hill Hot Spring,Richfield,Hotspring,171,77'; + put '38.633,-112.107,Monroe (Cooper) Hot Springs,Richfield,Hotspring,169,76'; + put '38.613,-112.202,Joseph Hot Springs,Richfield,Hotspring,147,64'; + put '39.906,-113.43,Wilson Health Springs,Delta,Hotspring,142,61'; + put '41.138,-112.175,Hooper Hot Springs,Brigham City,Hotspring,140,60'; + put '41.338,-112.031,Utah Hot Springs,Brigham City,Hotspring,138,59'; + put '38.864,-112.506,Meadow Hot Springs,Richfield,Hotspring,106,41'; + put '40.815,-111.918,Becks Hot Spring,Salt Lake City,Hotspring,133,56'; + put '37.189,-113.272,Dixie (Laverkin) Hot Springs,Cedar City,Hotspring,108,42'; + put '41.659,-112.087,Crystal (Madsens) Hot Springs,Brigham City,Hotspring,129,54'; + put '41.855,-112.158,Udy Hot Springs,Brigham City,Hotspring,124,51'; + put '41.578,-112.23,Stinking Hot Springs,Brigham City,Hotspring,118,48'; + put '40.517,-111.475,Midway Hot Spring,Salt Lake City,Hotspring,115,46'; + put '40.536,-111.478,Warm Ditch Spring,Salt Lake City,Hotspring,115,46'; + put '40.35,-111.905,Saratoga Hot Springs,Salt Lake City,Hotspring,111,44'; + put '40.353,-111.895,Crater Hot Spring,Salt Lake City,Hotspring,111,44'; + put '41.901,-112.999,Coyote Spring,Brigham City,Hotspring,109,43'; + put '41.687,-113.986,Spring (Hot),Brigham City,Hotspring,108,42'; + put '41.582,-112.256,Little Mountain Hot Spring,Brigham City,Hotspring,108,42'; + put '41.822,-113.263,L.G. Carter Springs,Brigham City,Hotspring,77,25'; + put '41.236,-111.924,Ogden Hot Spring,Ogden,Hotspring,135,57'; + put '37.178,-113.634,Snow Spring,Cedar City,Hotspring,70,21'; + put '38.34,-113.22,Woodhouse Spring,Richfield,Hotspring,72,22'; + put '38.155,-112.901,Willow Spring,Richfield,Hotspring,72,22'; + put '38.56,-112.578,Sulphurdale,Richfield,Hotspring,72,22'; + put '38.981,-111.829,Salt Spring,Salina,Hotspring,72,22'; + put '37.174,-112.535,Red Canyon,Cedar City,Hotspring,72,22'; + put '41.808,-113.327,W.R. Carter Springs,Brigham City,Hotspring,70,21'; + put '41.818,-113.311,Larson Springs,Brigham City,Hotspring,70,21'; + put '41.829,-113.654,Head Spring,Brigham City,Hotspring,70,21'; + put '40.653,-112.907,Redlum Spring,Tooele,Hotspring,70,21'; + put '40.458,-111.929,Camp Williams,Salt Lake City,Hotspring,70,21'; + put '40.647,-112.524,Grantsville Warm Springs,Tooele,Hotspring,77,25'; + put '39.183,-111.691,Sterling (Peacock) Warm Spring,Price,Hotspring,72,22'; + put '39.246,-111.645,Livingston Warm Springs,Price,Hotspring,73,23'; + put '38.138,-112.863,Big Maple Spring,Richfield,Hotspring,70,21'; + put '37.393,-113.61,Irvine Spring,Cedar City,Hotspring,70,21'; + put '41.563,-113.954,Kimber (Rose) Spring,Brigham City,Hotspring,68,20'; + put '41.614,-113.613,Warm Spring,Brigham City,Hotspring,68,20'; + put '41.328,-111.826,Patio Springs,Ogden,Hotspring,68,20'; + put '40.172,-112.426,Davis,Tooele,Hotspring,68,20'; + put '40.118,-111.337,Diamond Fork Warm Springs,Salt Lake City,Hotspring,68,20'; + put '39.249,-113.877,Knoll Springs,Delta,Hotspring,68,20'; + put '39.403,-113.863,Twin Springs,Delta,Hotspring,68,20'; + put '39.788,-111.881,Ray Lunt Spring,Price,Hotspring,68,20'; + put '38.762,-112.87,Springs,Richfield,Hotspring,68,20'; + put '38.77,-112.871,Coyote Spring,Richfield,Hotspring,68,20'; + put '37.937,-112.424,Tebbs,Cedar City,Hotspring,68,20'; + put '37.096,-113.447,Warner Valley Spring,Cedar City,Hotspring,70,21'; + put '40.565,-112.738,Deseret Livestock South Springs,Tooele,Hotspring,73,23'; + put '37.158,-113.399,Virgin River Spring,Cedar City,Hotspring,70,21'; + put '39.899,-112.045,Springs,Delta,Hotspring,72,22'; + put '38.603,-112.111,Johnson Warm Spring,Richfield,Hotspring,77,25'; + put '41.722,-112.266,Bothwell Warm Springs,Brigham City,Hotspring,75,24'; + put '40.538,-112.747,Deseret Livestock,Tooele,Hotspring,75,24'; + put '40.733,-112.621,Utah Fish And Game Dept,Tooele,Hotspring,75,24'; + put '40.228,-111.867,Warm Springs,Salt Lake City,Hotspring,75,24'; + put '37.137,-113.513,Warm Spring,Cedar City,Hotspring,75,24'; + put '37.138,-113.528,Green Spring,Cedar City,Hotspring,75,24'; + put '37.166,-113.383,Berry Springs,Cedar City,Hotspring,75,24'; + put '41.834,-112.054,Cutler Warm Spring,Brigham City,Hotspring,73,23'; + put '40.614,-112.709,Horseshoe Springs,Tooele,Hotspring,73,23'; + put '41.239,-112.413,Compton Spring,Brigham City,Hotspring,72,22'; + put '40.743,-112.642,Big Warm Springs,Tooele,Hotspring,72,22'; + put '40.558,-112.739,Deseret Livestock South Spring,Tooele,Hotspring,72,22'; + put '40.39,-112.424,Russells Warm Springs,Tooele,Hotspring,72,22'; + put '41.831,-113.391,Pugsley,Brigham City,Hotspring,73,23'; + put '41.449,-112.442,Poulsen Spring (Salt),Brigham City,Hotspring,72,22'; + put '40.167,-111.622,Wood Springs,Salt Lake City,Hotspring,73,23'; + put '40.234,-111.865,Warm Springs,Salt Lake City,Hotspring,77,25'; + put '39.955,-111.858,Goshen Warm Srings,Price,Hotspring,73,23'; + put '39.334,-113.518,South Tule Spring,Delta,Hotspring,77,25'; + put '39.616,-112.803,Fumarole Butte,Delta,Hotspring,73,23'; + put '40.545,-111.928,East Jordan Canal,Salt Lake City,Hotspring,73,23'; + put '41.643,-112.281,Springs,Brigham City,Hotspring,72,22'; + put '37.29,-80.619,New River White Sulphur Springs,Bluefield,Hotspring,85,29'; + put '37.997,-79.83,Hot Springs,Roanoke,Hotspring,106,41'; + put '37.898,-79.462,Rockbridge Baths,Roanoke,Hotspring,72,22'; + put '38.055,-79.78,Warm Springs,Charlottesvill,Hotspring,95,35'; + put '37.963,-79.861,Healing Springs,Roanoke,Hotspring,86,30'; + put '38.238,-79.65,Bragg Spring,Charlottesvill,Hotspring,75,24'; + put '37.645,-80.238,Sweet Chalybeate Spring,Bluefield,Hotspring,75,24'; + put '38.218,-79.673,Bolar Spring,Charlottesvill,Hotspring,73,23'; + put '37.86,-79.988,Layton Spring,Roanoke,Hotspring,72,22'; + put '37.87,-79.933,Falling Spring,Roanoke,Hotspring,77,25'; + put '37.16,-80.806,Alum Springs,Bluefield,Hotspring,72,22'; + put '46.852,-121.758,Mt Rainier Fumaroles,Yakima,Hotspring,162,72'; + put '46.738,-121.562,Ohanapecosh Hot Springs,Yakima,Hotspring,122,50'; + put '47.707,-121.155,Scenic Hot Springs,Wenatchee,Hotspring,122,50'; + put '47.969,-123.864,Sol Duc Hot Springs,Seattle,Hotspring,122,50'; + put '48.974,-119.475,Hot Lake,Okanogan,Hotspring,122,50'; + put '45.658,-121.962,Moffetts (Bonneville) Hot Springs,The Dalles,Hotspring,97,36'; + put '48.906,-119.455,Poison Lake,Okanogan,Hotspring,122,50'; + put '45.701,-121.728,Collins Hot Springs,The Dalles,Hotspring,122,50'; + put '47.484,-121.391,Goldmeyer Hot Springs,Wenatchee,Hotspring,127,53'; + put '46.202,-121.492,Mount Adams Fumaroles,Yakima,Hotspring,150,66'; + put '46.198,-122.197,Mt St Helens Fumaroles,Hoquiam,Hotspring,190,88'; + put '48.789,-121.804,Dorr Fumarole Field,Concrete,Hotspring,194,90'; + put '48.77,-121.813,Sherman Crater Fumaroles,Concrete,Hotspring,266,130'; + put '45.723,-121.927,Rock Creek Hot Springs,The Dalles,Hotspring,H,H'; + put '48.15,-121.062,Gamma Hot Springs,Concrete,Hotspring,140,60'; + put '46.378,-122.265,Green River Soda Spring,Hoquiam,Hotspring,86,30'; + put '46.575,-121.706,Packwood Hot Spring,Yakima,Hotspring,100,38'; + put '47.201,-121.536,Lester Hot Springs,Wenatchee,Hotspring,120,49'; + put '46.024,-118.771,Warm Springs Canyon Warm Spring,Walla Walla,Hotspring,72,22'; + put '46.345,-121.6,Orr Creek Warm Springs,Yakima,Hotspring,72,22'; + put '46.041,-121.181,Fish Hatchery Warm Spring,Yakima,Hotspring,75,24'; + put '46.752,-121.814,Longmire Mineral Springs,Yakima,Hotspring,77,25'; + put '47.892,-121.342,Garland Mineral Springs,Wenatchee,Hotspring,84,29'; + put '46.452,-120.956,Simcoe Soda Springs,Yakima,Hotspring,90,32'; + put '48.254,-121.17,Sulphur Creek Hot Springs,Concrete,Hotspring,99,37'; + put '48.118,-121.192,Kennedy Hot Spring,Concrete,Hotspring,100,38'; + put '48.763,-121.667,Baker Hot Spring,Concrete,Hotspring,108,42'; + put '47.977,-123.682,Olympic Hot Springs,Seattle,Hotspring,118,48'; + put '45.728,-121.8,St Martins Hot Springs,The Dalles,Hotspring,120,49'; + put '45.821,-121.133,Klickitat Mineral Springs,The Dalles,Hotspring,81,27'; + put '38.163,-79.975,Minnehaha Springs,Charlottesvill,Hotspring,70,21'; + put '37.63,-80.24,Old Sweet Spring,Bluefield,Hotspring,73,23'; + put '39.618,-78.23,Berkeley Springs,Cumberland,Hotspring,72,22'; + put '38.605,-79.353,Thorn Spring,Charlottesvill,Hotspring,72,22'; + put '39.471,-77.877,Swan Pond Spring,Baltimore,Hotspring,72,22'; + put '44.29,-110.504,"Hot Springs,heart Lake Geyser Basi",Ashton,Hotspring,201,94'; + put '44.691,-110.728,Geyser Springs Group,Ashton,Hotspring,201,94'; + put '44.554,-110.812,Fountain Group,Ashton,Hotspring,201,94'; + put '44.543,-110.859,Fairy Springs,Ashton,Hotspring,201,94'; + put '44.485,-110.852,"Biscuit Basin, Sapphire Pool",Ashton,Hotspring,201,94'; + put '44.48,-110.85,Cascade Group,Ashton,Hotspring,201,94'; + put '44.46,-110.844,Black Sand Basin,Ashton,Hotspring,201,94'; + put '44.459,-110.835,Myriad Group,Ashton,Hotspring,201,94'; + put '44.307,-110.526,"Hot Springs,heart Lake Geyser Basi",Ashton,Hotspring,201,94'; + put '44.354,-110.8,Shoshone Geyser Basin,Ashton,Hotspring,203,95'; + put '44.568,-110.805,Quagmire Group,Ashton,Hotspring,203,95'; + put '44.537,-110.801,"White Dome Geyser, Surprise Pool",Ashton,Hotspring,203,95'; + put '44.52,-110.828,Flood Group,Ashton,Hotspring,203,95'; + put '44.471,-110.843,"Daisy Group, Sentinel Geysers",Ashton,Hotspring,203,95'; + put '44.466,-110.839,"Middle Group,tortoise Shell,inkwel",Ashton,Hotspring,203,95'; + put '44.46,-110.828,"Geyser Hill Group, Old Faithful Ge",Ashton,Hotspring,203,95'; + put '44.908,-110.393,Calcite Springs,Ashton,Hotspring,201,94'; + put '44.417,-110.57,West Thumb Geyser Basin,Ashton,Hotspring,203,95'; + put '44.459,-110.817,Southeastern Group,Ashton,Hotspring,198,92'; + put '44.433,-110.581,Potts Hot Spring Basin,Ashton,Hotspring,203,95'; + put '44.421,-110.952,Smoke Jumper Hot Springs,Ashton,Hotspring,198,92'; + put '44.684,-110.753,Monument Geyser Basin,Ashton,Hotspring,197,92'; + put '44.679,-110.746,Beryl Spring,Ashton,Hotspring,198,92'; + put '44.544,-110.258,Turbid Springs,Ashton,Hotspring,198,92'; + put '44.53,-110.297,Steamboat Springs,Ashton,Hotspring,198,92'; + put '44.518,-110.813,"Hot Springs, Rabbit Creek Group",Ashton,Hotspring,198,92'; + put '44.514,-110.828,Rabbit Creek Group,Ashton,Hotspring,198,92'; + put '44.484,-110.873,Mystic Falls Springs,Ashton,Hotspring,198,92'; + put '44.739,-110.324,Josephs Coat Springs,Ashton,Hotspring,199,93'; + put '44.75,-110.714,Gas Vent,Ashton,Hotspring,H,H'; + put '44.282,-110.506,Rustic Geyser,Ashton,Hotspring,199,93'; + put '44.571,-110.811,Morning Mist Springs,Ashton,Hotspring,205,96'; + put '44.733,-110.703,Cistern Spring,Ashton,Hotspring,199,93'; + put '44.697,-110.724,Gibbon Hill Geyser,Ashton,Hotspring,199,93'; + put '44.693,-110.738,Artists Paintpots,Ashton,Hotspring,199,93'; + put '44.69,-110.384,Hot Springs on Bog Creek,Ashton,Hotspring,199,93'; + put '44.526,-110.835,Excelsior Geyser Crater,Ashton,Hotspring,199,93'; + put '44.418,-110.805,Lone Star Geyser,Ashton,Hotspring,199,93'; + put '44.309,-110.654,Hot Springs on Lewis Lake,Ashton,Hotspring,199,93'; + put '44.469,-110.828,Solitary Geyser,Ashton,Hotspring,198,92'; + put '44.433,-110.813,Hot Springs,Ashton,Hotspring,H,H'; + put '44.766,-110.3,Hot Springs,Ashton,Hotspring,H,H'; + put '44.61,-110.438,Hot Springs,Ashton,Hotspring,H,H'; + put '44.607,-110.617,Hot Springs East of Mary Lake,Ashton,Hotspring,H,H'; + put '44.601,-110.632,Gas Vent East of Mary Lake,Ashton,Hotspring,H,H'; + put '44.595,-110.622,Gas Vents Southeast of Mary Lake,Ashton,Hotspring,H,H'; + put '44.572,-110.691,Hot Springs,Ashton,Hotspring,H,H'; + put '44.553,-110.301,Beach Springs,Ashton,Hotspring,H,H'; + put '44.551,-110.85,Springs on Fairy Creek,Ashton,Hotspring,H,H'; + put '44.616,-110.616,Highland Hot Springs,Ashton,Hotspring,H,H'; + put '44.438,-110.977,Hot Springs on Continental Divide,Ashton,Hotspring,H,H'; + put '44.617,-110.432,Mud Geysers,Ashton,Hotspring,H,H'; + put '44.404,-110.824,Hot Springs on Upper Firehole Rive,Ashton,Hotspring,H,H'; + put '44.498,-109.193,Buffalo Bill Reservoir Springs,Cody,Hotspring,W,W'; + put '44.495,-109.222,Buffalo Bill Reservoir Springs,Cody,Hotspring,W,W'; + put '44.482,-109.204,Buffalo Bill Reservoir Springs,Cody,Hotspring,W,W'; + put '44.841,-110.167,"Hot, on Lamar River",Ashton,Hotspring,W,W'; + put '44.734,-110.029,Hot Springs,Ashton,Hotspring,W,W'; + put '44.708,-110.471,Warm Spring,Ashton,Hotspring,W,W'; + put '44.701,-110.036,Hot Springs,Ashton,Hotspring,W,W'; + put '44.508,-110.832,Midway Picnic Ground,Ashton,Hotspring,H,H'; + put '44.715,-110.555,Gas Vents,Ashton,Hotspring,H,H'; + put '44.563,-110.834,River Group,Ashton,Hotspring,205,96'; + put '44.544,-110.788,"Black Warrior Group, Shelf Spring",Ashton,Hotspring,205,96'; + put '44.115,-110.684,Huckleberry Hot Springs,Ashton,Hotspring,B,B'; + put '44.842,-110.732,Apollinaris Spring,Ashton,Hotspring,H,H'; + put '44.825,-110.675,Gas Vents at Horseshoe Hill,Ashton,Hotspring,H,H'; + put '44.781,-110.738,Steam Vents at Roaring Mountain,Ashton,Hotspring,H,H'; + put '44.743,-110.242,Hot Spring Basin Group,Ashton,Hotspring,198,92'; + put '44.752,-110.256,Hot Spring,Ashton,Hotspring,H,H'; + put '44.612,-110.618,Gas Vent,Ashton,Hotspring,H,H'; + put '44.741,-110.699,Gas Vent,Ashton,Hotspring,H,H'; + put '44.566,-110.871,"Flat Cone Spring, Steep Cone",Ashton,Hotspring,205,96'; + put '44.711,-110.468,Hot Springs,Ashton,Hotspring,H,H'; + put '44.708,-110.461,Forest Springs,Ashton,Hotspring,H,H'; + put '44.672,-110.236,Hot Springs,Ashton,Hotspring,H,H'; + put '44.667,-110.282,Hot Springs,Ashton,Hotspring,H,H'; + put '44.656,-110.572,Violet Springs,Ashton,Hotspring,H,H'; + put '44.642,-110.238,Hot Spring,Ashton,Hotspring,H,H'; + put '44.634,-110.234,The Mudkettles,Ashton,Hotspring,H,H'; + put '44.634,-110.226,The Mushpots,Ashton,Hotspring,H,H'; + put '44.532,-110.874,"Imperial Geyser, Spray Geyser",Ashton,Hotspring,192,89'; + put '42.545,-106.725,Alcova Hot Springs,Casper,Hotspring,129,54'; + put '42.75,-109.616,Steele Hot Springs,Lander,Hotspring,102,39'; + put '43.37,-110.445,Granite Hot Spring,Driggs,Hotspring,106,41'; + put '43.008,-108.835,Washakie Mineral Hot Springs,Thermopolis,Hotspring,111,44'; + put '43.907,-110.198,North Buffalo Fork Springs,Driggs,Hotspring,113,45'; + put '43.365,-110.443,Granite Falls Hot Springs,Driggs,Hotspring,112,45'; + put '42.817,-110.997,Johnson Springs,Preston,Hotspring,115,46'; + put '44.723,-110.358,Hot Spring on Moss Creek,Ashton,Hotspring,115,46'; + put '44.681,-110.326,Hot Springs on Upper Sour Creek,Ashton,Hotspring,194,90'; + put '41.45,-106.804,Saratoga Hot Springs,Rawlins,Hotspring,129,54'; + put '44.671,-110.786,Secret Valley Hot Springs,Ashton,Hotspring,95,35'; + put '44.625,-110.433,Mud Volcano,Ashton,Hotspring,131,55'; + put '43.654,-108.194,Thermopolis Hot Springs,Thermopolis,Hotspring,133,56'; + put '44.985,-110.689,Hot River,Ashton,Hotspring,136,58'; + put '44.588,-110.341,Ebro Springs,Ashton,Hotspring,136,58'; + put '44.55,-110.805,Fountain Paint Pot,Ashton,Hotspring,136,58'; + put '44.169,-110.583,Snake Hot Springs,Ashton,Hotspring,136,58'; + put '44.157,-110.699,Crawfish Creek Hot Springs,Ashton,Hotspring,136,58'; + put '44.165,-110.723,Crawfish Creek Hot Springs,Ashton,Hotspring,138,59'; + put '44.711,-110.741,Chocolate Pots,Ashton,Hotspring,124,51'; + put '43.56,-109.732,Geyser (Warm Spring Creek Springs),Thermopolis,Hotspring,84,29'; + put '43.489,-109.605,Jakeys Fork Spring,Thermopolis,Hotspring,68,20'; + put '44.749,-108.188,Little Sheep Mountain Spring,Cody,Hotspring,68,20'; + put '42.249,-104.781,Warm Springs (Immigrants Washtub),Torrington,Hotspring,70,21'; + put '44.608,-108.138,Sheep Mountain Springs,Cody,Hotspring,70,21'; + put '43.583,-108.213,Wind River Canyon Spring,Thermopolis,Hotspring,72,22'; + put '42.702,-107.105,Horse Creek Springs,Casper,Hotspring,75,24'; + put '44.511,-109.156,Needle Hot Springs,Cody,Hotspring,75,24'; + put '43.52,-109.669,Little Warm Spring,Thermopolis,Hotspring,77,25'; + put '43.3,-110.775,Astoria Mineral Hot Springs,Driggs,Hotspring,99,37'; + put '43.543,-110.741,Abercrombie Warm Springs,Driggs,Hotspring,81,27'; + put '44.513,-109.115,De Maris Springs,Cody,Hotspring,97,36'; + put '42.665,-105.394,Douglas Hot Springs,Torrington,Hotspring,86,30'; + put '43.471,-110.835,Boyles Hill Springs,Driggs,Hotspring,86,30'; + put '43.282,-110.019,Kendall Warm Spring,Driggs,Hotspring,86,30'; + put '44.662,-110.768,Iron Spring,Ashton,Hotspring,86,30'; + put '42.492,-108.172,Sweetwater Station Warm Springs,Lander,Hotspring,90,32'; + put '44.742,-110.579,Wolf Lake Springs,Ashton,Hotspring,91,33'; + put '44.513,-109.129,Shoshone Hot Springs,Cody,Hotspring,95,35'; + put '42.828,-110.999,Auburn Hot Springs,Preston,Hotspring,144,62'; + put '43.639,-110.615,Kelly Warm Spring,Driggs,Hotspring,81,27'; + put '44.532,-110.796,Five Sisters Springs,Ashton,Hotspring,192,89'; + put '44.582,-110.314,Vermilion Springs,Ashton,Hotspring,140,60'; + put '44.521,-110.275,Butte Springs,Ashton,Hotspring,187,86'; + put '44.478,-110.867,Hillside Springs,Ashton,Hotspring,187,86'; + put '44.752,-110.418,Hot Springs at Sevenmile Hole,Ashton,Hotspring,189,87'; + put '44.401,-110.936,Hot Springs on Continental Divide,Ashton,Hotspring,189,87'; + put '44.769,-110.269,Rainbow Springs,Ashton,Hotspring,190,88'; + put '44.628,-110.433,Sulphur Caldron,Ashton,Hotspring,190,88'; + put '44.702,-110.767,Sylvan Springs,Ashton,Hotspring,192,89'; + put '44.529,-110.791,White Creek Group,Ashton,Hotspring,185,85'; + put '44.564,-110.869,Queens Laundry,Ashton,Hotspring,192,89'; + put '44.697,-110.375,Hot Springs on Bog Creek,Ashton,Hotspring,185,85'; + put '44.285,-110.9,Bechler River Hot Springs,Ashton,Hotspring,194,90'; + put '44.797,-110.725,Amphitheater Springs,Ashton,Hotspring,196,91'; + put '44.766,-110.429,Washburn Hot Springs,Ashton,Hotspring,196,91'; + put '44.756,-110.308,Coffee Pot Hot Springs,Ashton,Hotspring,196,91'; + put '44.591,-110.321,Hot Springs at Sulphur Hills,Ashton,Hotspring,196,91'; + put '44.556,-110.832,River Group,Ashton,Hotspring,196,91'; + put '44.422,-110.574,West Thumb Geyser Basin,Ashton,Hotspring,196,91'; + put '44.786,-110.74,Semi-Centennial Geyser,Ashton,Hotspring,198,92'; + put '44.653,-110.482,Sulphur Springs,Ashton,Hotspring,194,89'; + put '44.41,-110.953,Summit Lake Hot Springs,Ashton,Hotspring,162,72'; + put '44.761,-110.73,Bijah Spring,Ashton,Hotspring,198,92'; + put '44.781,-110.699,Whiterock Springs,Ashton,Hotspring,144,62'; + put '44.739,-110.258,Hot Spring Basin Group,Ashton,Hotspring,153,67'; + put '44.754,-110.403,Sevenmile Hole,Ashton,Hotspring,154,68'; + put '44.276,-110.636,Hot Springs on Lewis Lake,Ashton,Hotspring,154,68'; + put '44.598,-110.236,Hot Springs In Pelican Valley,Ashton,Hotspring,156,69'; + put '44.142,-110.656,South Entrance Hot Springs,Ashton,Hotspring,156,69'; + put '44.753,-110.724,"Roadside Springs, Frying Pan Sprin",Ashton,Hotspring,158,70'; + put '44.733,-110.712,Horseshoe Spring,Ashton,Hotspring,187,86'; + put '43.958,-110.696,Jackson Lake Hot Springs,Driggs,Hotspring,162,72'; + put '44.187,-110.726,Hot Springs,Ashton,Hotspring,142,61'; + put '44.967,-110.708,Mammoth Hot Springs,Ashton,Hotspring,163,73'; + put '44.475,-110.843,Morning Glory Pool,Ashton,Hotspring,163,73'; + put '44.204,-110.486,Hot Springs on Upper Snake River,Ashton,Hotspring,167,75'; + put '44.299,-110.517,"Heart Lake Geyser Basin, Middle Gr",Ashton,Hotspring,174,79'; + put '44.671,-110.29,Ponuntpa Springs Group,Ashton,Hotspring,180,82'; + put '44.244,-111.022,Boundary Creek Hot Springs,Ashton,Hotspring,181,83'; + put '44.414,-110.817,"Lone Star Geyser Basin, Footbridge",Ashton,Hotspring,183,84'; + put '44.722,-110.701,Echinus Geyser,Ashton,Hotspring,185,85'; + put '44.461,-110.854,Emerald Pool,Ashton,Hotspring,158,70'; + put ';;;;'; + put 'run;'; + put '* ServiceInit end;'; + put '* Service start;'; + put '%mp_abort(iftrue= (%mf_isdir(&path) = 0)'; + put ',mac=&_program..sas'; + put ',msg=%str(File path (&path) is not a valid directory)'; + put ')'; + put '%mp_webin()'; + put '/* setup the output destination */'; + put '%let outloc=&path/&_webin_filename1;'; + put 'filename fileout "&outloc";'; + put '/* send the data */'; + put '%mp_binarycopy(inref=&_webin_fileref1, outref=fileout)'; + put '%mp_abort(iftrue= (&syscc ge 4)'; + put ',mac=&_program..sas'; + put ',msg=%str(Error occurred reading &_webin_fileref1 and writing to &outloc)'; + put ')'; + put '/* success - lets create a directory listing */'; + put '%mp_dirlist(path=&path,outds=dirlist)'; + put 'proc sort data=dirlist;'; + put 'by filepath;'; + put 'run;'; + put '/* now send it back to the frontend */'; + put '%webout(OPEN)'; + put '%webout(OBJ,dirlist)'; + put '%webout(CLOSE)'; + put '* Service end;'; +run; +%mm_createwebservice(path=&appLoc/&path, name=&service, code=sascode, server=&serverName, replace=yes) +filename sascode clear; \ No newline at end of file