const cErrorFlag = 'e'; function _RequestVersion(out AVersion: AnsiString): Boolean; var VCode: Cardinal; VVer, VHeader, VData: AnsiString; begin Result := False; AVersion := cErrorFlag; if Assigned(Downloader) then begin VCode := Downloader.DoHttpRequest( 'https://maps.googleapis.com/maps/api/js', '', '', VHeader, VData ); if VCode = 200 then begin VVer := RegExprGetMatchSubStr( VData, 'https://khms\d+.googleapis\.com/kh\?v=(\d+)', 1 ); Result := VVer <> ''; if Result then begin AVersion := VVer; end; end else if (VCode = 0) or (VCode >= 500) then begin // internet connection or server error AVersion := ''; end else begin // fatal request error WriteLn(IntToStr(VCode)); end; end; end; function _GetVersion(out AVersion: AnsiString): Boolean; begin if ScriptBuffer = '' then begin Global.Lock; try if Global.Exists(0) then begin ScriptBuffer := Global.GetVar(0); if ScriptBuffer = '' then begin // this should never happen ScriptBuffer := cErrorFlag; end; end else begin if _RequestVersion(ScriptBuffer) then begin Global.SetVar(0, ScriptBuffer); end; end; finally Global.Unlock; end; end; if (ScriptBuffer <> '') and (ScriptBuffer <> cErrorFlag) then begin AVersion := ScriptBuffer; end else begin AVersion := Version; // fallback to the Version from Params.txt end; Result := AVersion <> ''; end; var VSatVer: AnsiString; begin if _GetVersion(VSatVer) then begin ResultURL := Format( 'https://khms%d.google.com/kh/v=%s&src=app&x=%d&y=%d&z=%d', [Random(4), VSatVer, GetX, GetY, GetZ-1] ); end else begin ResultURL := Format( 'https://mt%d.google.com/vt/lyrs=s&hl=%s&x=%d&y=%d&z=%d', [Random(4), Lang, GetX, GetY, GetZ-1] ); end; end.