4ccf33da61239996702db7af0d93018806b2d38e
angie
  Fri Feb 22 14:04:22 2019 -0800
lastPosition is set by cartHtmlShell* -- but not by other cart openers e.g. cartAndCookie or cartEmptyShell.  CGIs that use the latter must set lastPosition after determining db and position.  refs #22945

diff --git src/hg/hgVai/hgVai.c src/hg/hgVai/hgVai.c
index 41a6287..c4f3862 100644
--- src/hg/hgVai/hgVai.c
+++ src/hg/hgVai/hgVai.c
@@ -3023,30 +3023,32 @@
 if (startsWith("virt:", cartUsualString(cart, "position", "")))
     cartSetString(cart, "position", cartUsualString(cart, "nonVirtPosition", ""));
 
 /* Set up global variables. */
 getDbAndGenome(cart, &database, &genome, oldVars);
 initGenbankTableNames(database);
 regionType = cartUsualString(cart, hgvaRegionType, hgvaRegionTypeGenome);
 if (isEmpty(cartOptionalString(cart, hgvaRange)))
     cartSetString(cart, hgvaRange, hDefaultPos(database));
 
 int timeout = cartUsualInt(cart, "udcTimeout", 300);
 if (udcCacheTimeout() < timeout)
     udcSetCacheTimeout(timeout);
 knetUdcInstall();
 
+char *range = trimSpaces(windowsToAscii(cartUsualString(cart, hgvaRange, "")));
+cartSetLastPosition(cart, range, oldVars);
 cartTrackDbInit(cart, &fullTrackList, &fullGroupList, TRUE);
 if (lookupPosition(cart, hgvaRange))
     {
     if (startQuery)
 	doQuery();
     else if (! isCommandLine)
 	doUi();
     }
 else
     {
     // Revert to lastPosition if we have multiple matches or warnings,
     // especially in case user manually edits browser location as in #13009:
     char *position = cartUsualString(cart, "lastPosition", hDefaultPos(database));
     cartSetString(cart, hgvaRange, position);
     if (webGotWarnings())