| @@ -1,22 +1,19 @@ | |||||
| //****************************************************************************** | //****************************************************************************** | ||||
| // LAYERS parameter: config_a_b_c | |||||
| // a = 1 for depth in meters, 2 for depth in feet, 3 for fathoms | |||||
| // b = 1 for 1 m safety depth (beginning of blue coloring) (unit equal to that set by a) | |||||
| // c = 0 for pristine Navionics charts, 1 for Sonar Charts | |||||
| // | |||||
| // TRANSPARENT parameter: | |||||
| // FALSE for non-layer | |||||
| // TRUE for layer | |||||
| // | |||||
| // transparent true/false | |||||
| // ugc - garmin active captain | |||||
| // layer - 0 Seachart, 1 Sonarchart | |||||
| // du - unit 1 for depth in meters, 2 for depth in feet, 3 for fathoms | |||||
| // sd - safe depth | |||||
| // sa ? | |||||
| //****************************************************************************** | //****************************************************************************** | ||||
| const | const | ||||
| cReqParams = 'LAYERS=config_1_1_1&TRANSPARENT=TRUE&theme=0'; | |||||
| cReqParams = 'transparent=true&ugc=true&layer=1&du=1&sd=2&sa=false'; | |||||
| //****************************************************************************** | //****************************************************************************** | ||||
| const | const | ||||
| cTTL = 24*60*60; // 24 hour | |||||
| cTTL = 10*60; // 10 Minutes | |||||
| function CheckTTL(const ATimeStamp: Integer): Boolean; | function CheckTTL(const ATimeStamp: Integer): Boolean; | ||||
| begin | begin | ||||
| @@ -25,7 +22,7 @@ end; | |||||
| function GetNavToken: AnsiString; | function GetNavToken: AnsiString; | ||||
| var | var | ||||
| VNavToken: AnsiString; | |||||
| VNavTokensJson: AnsiString; | |||||
| VTimeStamp: Integer; | VTimeStamp: Integer; | ||||
| VResponseCode: Cardinal; | VResponseCode: Cardinal; | ||||
| VResponseHeader, VResponseData: AnsiString; | VResponseHeader, VResponseData: AnsiString; | ||||
| @@ -36,15 +33,15 @@ begin | |||||
| Global.Lock; | Global.Lock; | ||||
| try | try | ||||
| if Global.Exists(0) and Global.Exists(1) then begin | if Global.Exists(0) and Global.Exists(1) then begin | ||||
| VNavToken := Global.GetVar(0); | |||||
| VNavTokensJson := Global.GetVar(0); | |||||
| VTimeStamp := Global.GetVar(1); | VTimeStamp := Global.GetVar(1); | ||||
| if (VNavToken <> '') and (VTimeStamp <> 0) and CheckTTL(VTimeStamp) then begin | |||||
| Result := VNavToken; | |||||
| if (VNavTokensJson <> '') and (VTimeStamp <> 0) and CheckTTL(VTimeStamp) then begin | |||||
| Result := VNavTokensJson; | |||||
| end; | end; | ||||
| end; | end; | ||||
| if (Result = '') and Assigned(Downloader) then begin | |||||
| VRequestUrl := 'https://tile1.navionics.com/tile/get_key/Navionics_webapi_04041/maps.garmin.com'; | |||||
| if (Result = '') and Assigned(Downloader) then begin | |||||
| VRequestUrl := 'https://maps.garmin.com/marine/api/getNavionicsTokens'; | |||||
| VRequestHeader := 'Origin: https://maps.garmin.com' + #13#10 + 'Referer: https://maps.garmin.com/'; | VRequestHeader := 'Origin: https://maps.garmin.com' + #13#10 + 'Referer: https://maps.garmin.com/'; | ||||
| VResponseHeader := ''; | VResponseHeader := ''; | ||||
| VResponseData := ''; | VResponseData := ''; | ||||
| @@ -64,11 +61,18 @@ end; | |||||
| //****************************************************************************** | //****************************************************************************** | ||||
| var | var | ||||
| VBuf : AnsiString; | |||||
| VNavToken: AnsiString; | VNavToken: AnsiString; | ||||
| VNavBearer: AnsiString; | |||||
| begin | begin | ||||
| VNavToken := GetNavToken; | |||||
| VBuf := GetNavToken; | |||||
| VNavToken := RegExprGetMatchSubStr(VBuf, '"configuration_token":"(.*)"', 1); | |||||
| VNavBearer := RegExprGetMatchSubStr(VBuf, '"access_token":"(.*)",', 1); | |||||
| if VNavToken <> '' then begin | if VNavToken <> '' then begin | ||||
| ResultURL := TemplateToUrl(GetURLBase) + '?' + cReqParams + '&' + 'navtoken=' + VNavToken; | |||||
| ResultURL := TemplateToUrl(GetURLBase) + '?' + 'config=' + VNavToken + '&' + cReqParams; | |||||
| RequestHead:= 'Referer: https://maps.garmin.com/' + #13#10 + | |||||
| 'Origin: https://maps.garmin.com' + #13#10 + | |||||
| 'Authorization: Bearer '+ VNavBearer; | |||||
| end else begin | end else begin | ||||
| ResultURL := ''; | ResultURL := ''; | ||||
| end; | end; | ||||
| @@ -5,7 +5,7 @@ ParentSubMenu_ru=Водные карты | |||||
| ParentSubMenu_uk=Водні карти | ParentSubMenu_uk=Водні карти | ||||
| ParentSubMenu=Water maps | ParentSubMenu=Water maps | ||||
| asLayer=1 | asLayer=1 | ||||
| DefURLBase=https://tile{s}.navionics.com/tile/{z}/{x}/{y} | |||||
| DefURLBase=https://tile{s}.navionics.com/viewer/api/v1/tile/{z}/{x}/{y} | |||||
| ServerNames=1,2,3,4,5 | ServerNames=1,2,3,4,5 | ||||
| NameInCache=navionics_sonarchart_layer | NameInCache=navionics_sonarchart_layer | ||||
| Ext=.png | Ext=.png | ||||
| @@ -14,4 +14,3 @@ projection=1 | |||||
| sradiusa=6378137 | sradiusa=6378137 | ||||
| sradiusb=6378137 | sradiusb=6378137 | ||||
| IsUseDownloaderInScript=1 | IsUseDownloaderInScript=1 | ||||
| RequestHead=Referer: https://maps.garmin.com/ | |||||
| @@ -1,22 +1,19 @@ | |||||
| //****************************************************************************** | //****************************************************************************** | ||||
| // LAYERS parameter: config_a_b_c | |||||
| // a = 1 for depth in meters, 2 for depth in feet, 3 for fathoms | |||||
| // b = 1 for 1 m safety depth (beginning of blue coloring) (unit equal to that set by a) | |||||
| // c = 0 for pristine Navionics charts, 1 for Sonar Charts | |||||
| // | |||||
| // TRANSPARENT parameter: | |||||
| // FALSE for non-layer | |||||
| // TRUE for layer | |||||
| // | |||||
| // transparent true/false | |||||
| // ugc - garmin active captain | |||||
| // layer - 0 Seachart, 1 Sonarchart | |||||
| // du - unit 1 for depth in meters, 2 for depth in feet, 3 for fathoms | |||||
| // sd - safe depth | |||||
| // sa ? | |||||
| //****************************************************************************** | //****************************************************************************** | ||||
| const | const | ||||
| cReqParams = 'LAYERS=config_1_1_1&TRANSPARENT=FALSE&theme=0'; | |||||
| cReqParams = 'transparent=false&ugc=true&layer=1&du=1&sd=2&sa=false'; | |||||
| //****************************************************************************** | //****************************************************************************** | ||||
| const | const | ||||
| cTTL = 24*60*60; // 24 hour | |||||
| cTTL = 10*60; // 10 Minutes | |||||
| function CheckTTL(const ATimeStamp: Integer): Boolean; | function CheckTTL(const ATimeStamp: Integer): Boolean; | ||||
| begin | begin | ||||
| @@ -25,7 +22,7 @@ end; | |||||
| function GetNavToken: AnsiString; | function GetNavToken: AnsiString; | ||||
| var | var | ||||
| VNavToken: AnsiString; | |||||
| VNavTokensJson: AnsiString; | |||||
| VTimeStamp: Integer; | VTimeStamp: Integer; | ||||
| VResponseCode: Cardinal; | VResponseCode: Cardinal; | ||||
| VResponseHeader, VResponseData: AnsiString; | VResponseHeader, VResponseData: AnsiString; | ||||
| @@ -36,15 +33,15 @@ begin | |||||
| Global.Lock; | Global.Lock; | ||||
| try | try | ||||
| if Global.Exists(0) and Global.Exists(1) then begin | if Global.Exists(0) and Global.Exists(1) then begin | ||||
| VNavToken := Global.GetVar(0); | |||||
| VNavTokensJson := Global.GetVar(0); | |||||
| VTimeStamp := Global.GetVar(1); | VTimeStamp := Global.GetVar(1); | ||||
| if (VNavToken <> '') and (VTimeStamp <> 0) and CheckTTL(VTimeStamp) then begin | |||||
| Result := VNavToken; | |||||
| if (VNavTokensJson <> '') and (VTimeStamp <> 0) and CheckTTL(VTimeStamp) then begin | |||||
| Result := VNavTokensJson; | |||||
| end; | end; | ||||
| end; | end; | ||||
| if (Result = '') and Assigned(Downloader) then begin | |||||
| VRequestUrl := 'https://tile1.navionics.com/tile/get_key/Navionics_webapi_04041/maps.garmin.com'; | |||||
| if (Result = '') and Assigned(Downloader) then begin | |||||
| VRequestUrl := 'https://maps.garmin.com/marine/api/getNavionicsTokens'; | |||||
| VRequestHeader := 'Origin: https://maps.garmin.com' + #13#10 + 'Referer: https://maps.garmin.com/'; | VRequestHeader := 'Origin: https://maps.garmin.com' + #13#10 + 'Referer: https://maps.garmin.com/'; | ||||
| VResponseHeader := ''; | VResponseHeader := ''; | ||||
| VResponseData := ''; | VResponseData := ''; | ||||
| @@ -64,11 +61,18 @@ end; | |||||
| //****************************************************************************** | //****************************************************************************** | ||||
| var | var | ||||
| VBuf : AnsiString; | |||||
| VNavToken: AnsiString; | VNavToken: AnsiString; | ||||
| VNavBearer: AnsiString; | |||||
| begin | begin | ||||
| VNavToken := GetNavToken; | |||||
| VBuf := GetNavToken; | |||||
| VNavToken := RegExprGetMatchSubStr(VBuf, '"configuration_token":"(.*)"', 1); | |||||
| VNavBearer := RegExprGetMatchSubStr(VBuf, '"access_token":"(.*)",', 1); | |||||
| if VNavToken <> '' then begin | if VNavToken <> '' then begin | ||||
| ResultURL := TemplateToUrl(GetURLBase) + '?' + cReqParams + '&' + 'navtoken=' + VNavToken; | |||||
| ResultURL := TemplateToUrl(GetURLBase) + '?' + 'config=' + VNavToken + '&' + cReqParams; | |||||
| RequestHead:= 'Referer: https://maps.garmin.com/' + #13#10 + | |||||
| 'Origin: https://maps.garmin.com' + #13#10 + | |||||
| 'Authorization: Bearer '+ VNavBearer; | |||||
| end else begin | end else begin | ||||
| ResultURL := ''; | ResultURL := ''; | ||||
| end; | end; | ||||
| @@ -4,7 +4,7 @@ name=Navionics SonarChart(TM) | |||||
| ParentSubMenu_ru=Водные карты | ParentSubMenu_ru=Водные карты | ||||
| ParentSubMenu_uk=Водні карти | ParentSubMenu_uk=Водні карти | ||||
| ParentSubMenu=Water maps | ParentSubMenu=Water maps | ||||
| DefURLBase=https://tile{s}.navionics.com/tile/{z}/{x}/{y} | |||||
| DefURLBase=https://tile{s}.navionics.com/viewer/api/v1/tile/{z}/{x}/{y} | |||||
| ServerNames=1,2,3,4,5 | ServerNames=1,2,3,4,5 | ||||
| NameInCache=navionics_sonarchart | NameInCache=navionics_sonarchart | ||||
| Ext=.png | Ext=.png | ||||
| @@ -13,4 +13,3 @@ projection=1 | |||||
| sradiusa=6378137 | sradiusa=6378137 | ||||
| sradiusb=6378137 | sradiusb=6378137 | ||||
| IsUseDownloaderInScript=1 | IsUseDownloaderInScript=1 | ||||
| RequestHead=Referer: https://maps.garmin.com/ | |||||
| @@ -1,22 +1,19 @@ | |||||
| //****************************************************************************** | //****************************************************************************** | ||||
| // LAYERS parameter: config_a_b_c | |||||
| // a = 1 for depth in meters, 2 for depth in feet, 3 for fathoms | |||||
| // b = 1 for 1 m safety depth (beginning of blue coloring) (unit equal to that set by a) | |||||
| // c = 0 for pristine Navionics charts, 1 for Sonar Charts | |||||
| // | |||||
| // TRANSPARENT parameter: | |||||
| // FALSE for non-layer | |||||
| // TRUE for layer | |||||
| // | |||||
| // transparent true/false | |||||
| // ugc - garmin active captain | |||||
| // layer - 0 Seachart, 1 Sonarchart | |||||
| // du - unit 1 for depth in meters, 2 for depth in feet, 3 for fathoms | |||||
| // sd - safe depth | |||||
| // sa ? | |||||
| //****************************************************************************** | //****************************************************************************** | ||||
| const | const | ||||
| cReqParams = 'LAYERS=config_1_1_0&TRANSPARENT=TRUE&theme=0'; | |||||
| cReqParams = 'transparent=true&ugc=true&layer=0&du=1&sd=2&sa=false'; | |||||
| //****************************************************************************** | //****************************************************************************** | ||||
| const | const | ||||
| cTTL = 24*60*60; // 24 hour | |||||
| cTTL = 10*60; // 10 Minutes | |||||
| function CheckTTL(const ATimeStamp: Integer): Boolean; | function CheckTTL(const ATimeStamp: Integer): Boolean; | ||||
| begin | begin | ||||
| @@ -25,7 +22,7 @@ end; | |||||
| function GetNavToken: AnsiString; | function GetNavToken: AnsiString; | ||||
| var | var | ||||
| VNavToken: AnsiString; | |||||
| VNavTokensJson: AnsiString; | |||||
| VTimeStamp: Integer; | VTimeStamp: Integer; | ||||
| VResponseCode: Cardinal; | VResponseCode: Cardinal; | ||||
| VResponseHeader, VResponseData: AnsiString; | VResponseHeader, VResponseData: AnsiString; | ||||
| @@ -36,15 +33,15 @@ begin | |||||
| Global.Lock; | Global.Lock; | ||||
| try | try | ||||
| if Global.Exists(0) and Global.Exists(1) then begin | if Global.Exists(0) and Global.Exists(1) then begin | ||||
| VNavToken := Global.GetVar(0); | |||||
| VNavTokensJson := Global.GetVar(0); | |||||
| VTimeStamp := Global.GetVar(1); | VTimeStamp := Global.GetVar(1); | ||||
| if (VNavToken <> '') and (VTimeStamp <> 0) and CheckTTL(VTimeStamp) then begin | |||||
| Result := VNavToken; | |||||
| if (VNavTokensJson <> '') and (VTimeStamp <> 0) and CheckTTL(VTimeStamp) then begin | |||||
| Result := VNavTokensJson; | |||||
| end; | end; | ||||
| end; | end; | ||||
| if (Result = '') and Assigned(Downloader) then begin | |||||
| VRequestUrl := 'https://tile1.navionics.com/tile/get_key/Navionics_webapi_04041/maps.garmin.com'; | |||||
| if (Result = '') and Assigned(Downloader) then begin | |||||
| VRequestUrl := 'https://maps.garmin.com/marine/api/getNavionicsTokens'; | |||||
| VRequestHeader := 'Origin: https://maps.garmin.com' + #13#10 + 'Referer: https://maps.garmin.com/'; | VRequestHeader := 'Origin: https://maps.garmin.com' + #13#10 + 'Referer: https://maps.garmin.com/'; | ||||
| VResponseHeader := ''; | VResponseHeader := ''; | ||||
| VResponseData := ''; | VResponseData := ''; | ||||
| @@ -64,11 +61,18 @@ end; | |||||
| //****************************************************************************** | //****************************************************************************** | ||||
| var | var | ||||
| VBuf : AnsiString; | |||||
| VNavToken: AnsiString; | VNavToken: AnsiString; | ||||
| VNavBearer: AnsiString; | |||||
| begin | begin | ||||
| VNavToken := GetNavToken; | |||||
| VBuf := GetNavToken; | |||||
| VNavToken := RegExprGetMatchSubStr(VBuf, '"configuration_token":"(.*)"', 1); | |||||
| VNavBearer := RegExprGetMatchSubStr(VBuf, '"access_token":"(.*)",', 1); | |||||
| if VNavToken <> '' then begin | if VNavToken <> '' then begin | ||||
| ResultURL := TemplateToUrl(GetURLBase) + '?' + cReqParams + '&' + 'navtoken=' + VNavToken; | |||||
| ResultURL := TemplateToUrl(GetURLBase) + '?' + 'config=' + VNavToken + '&' + cReqParams; | |||||
| RequestHead:= 'Referer: https://maps.garmin.com/' + #13#10 + | |||||
| 'Origin: https://maps.garmin.com' + #13#10 + | |||||
| 'Authorization: Bearer '+ VNavBearer; | |||||
| end else begin | end else begin | ||||
| ResultURL := ''; | ResultURL := ''; | ||||
| end; | end; | ||||
| @@ -5,7 +5,7 @@ ParentSubMenu_uk=Водні карти | |||||
| ParentSubMenu=Water maps | ParentSubMenu=Water maps | ||||
| name=Navionics Marine Charts | name=Navionics Marine Charts | ||||
| asLayer=1 | asLayer=1 | ||||
| DefURLBase=https://tile{s}.navionics.com/tile/{z}/{x}/{y} | |||||
| DefURLBase=https://tile{s}.navionics.com/viewer/api/v1/tile/{z}/{x}/{y} | |||||
| ServerNames=1,2,3,4,5 | ServerNames=1,2,3,4,5 | ||||
| NameInCache=navionics_layer | NameInCache=navionics_layer | ||||
| Ext=.png | Ext=.png | ||||
| @@ -14,4 +14,3 @@ projection=1 | |||||
| sradiusa=6378137 | sradiusa=6378137 | ||||
| sradiusb=6378137 | sradiusb=6378137 | ||||
| IsUseDownloaderInScript=1 | IsUseDownloaderInScript=1 | ||||
| RequestHead=Referer: https://maps.garmin.com/ | |||||
| @@ -1,22 +1,19 @@ | |||||
| //****************************************************************************** | //****************************************************************************** | ||||
| // LAYERS parameter: config_a_b_c | |||||
| // a = 1 for depth in meters, 2 for depth in feet, 3 for fathoms | |||||
| // b = 1 for 1 m safety depth (beginning of blue coloring) (unit equal to that set by a) | |||||
| // c = 0 for pristine Navionics charts, 1 for Sonar Charts | |||||
| // | |||||
| // TRANSPARENT parameter: | |||||
| // FALSE for non-layer | |||||
| // TRUE for layer | |||||
| // | |||||
| // transparent true/false | |||||
| // ugc - garmin active captain | |||||
| // layer - 0 Seachart, 1 Sonarchart | |||||
| // du - unit 1 for depth in meters, 2 for depth in feet, 3 for fathoms | |||||
| // sd - safe depth | |||||
| // sa ? | |||||
| //****************************************************************************** | //****************************************************************************** | ||||
| const | const | ||||
| cReqParams = 'LAYERS=config_1_1_0&TRANSPARENT=FALSE&theme=0'; | |||||
| cReqParams = 'transparent=false&ugc=true&layer=0&du=1&sd=2&sa=false'; | |||||
| //****************************************************************************** | //****************************************************************************** | ||||
| const | const | ||||
| cTTL = 24*60*60; // 24 hour | |||||
| cTTL = 10*60; // 10 Minutes | |||||
| function CheckTTL(const ATimeStamp: Integer): Boolean; | function CheckTTL(const ATimeStamp: Integer): Boolean; | ||||
| begin | begin | ||||
| @@ -25,7 +22,7 @@ end; | |||||
| function GetNavToken: AnsiString; | function GetNavToken: AnsiString; | ||||
| var | var | ||||
| VNavToken: AnsiString; | |||||
| VNavTokensJson: AnsiString; | |||||
| VTimeStamp: Integer; | VTimeStamp: Integer; | ||||
| VResponseCode: Cardinal; | VResponseCode: Cardinal; | ||||
| VResponseHeader, VResponseData: AnsiString; | VResponseHeader, VResponseData: AnsiString; | ||||
| @@ -36,15 +33,15 @@ begin | |||||
| Global.Lock; | Global.Lock; | ||||
| try | try | ||||
| if Global.Exists(0) and Global.Exists(1) then begin | if Global.Exists(0) and Global.Exists(1) then begin | ||||
| VNavToken := Global.GetVar(0); | |||||
| VNavTokensJson := Global.GetVar(0); | |||||
| VTimeStamp := Global.GetVar(1); | VTimeStamp := Global.GetVar(1); | ||||
| if (VNavToken <> '') and (VTimeStamp <> 0) and CheckTTL(VTimeStamp) then begin | |||||
| Result := VNavToken; | |||||
| if (VNavTokensJson <> '') and (VTimeStamp <> 0) and CheckTTL(VTimeStamp) then begin | |||||
| Result := VNavTokensJson; | |||||
| end; | end; | ||||
| end; | end; | ||||
| if (Result = '') and Assigned(Downloader) then begin | |||||
| VRequestUrl := 'https://tile1.navionics.com/tile/get_key/Navionics_webapi_04041/maps.garmin.com'; | |||||
| if (Result = '') and Assigned(Downloader) then begin | |||||
| VRequestUrl := 'https://maps.garmin.com/marine/api/getNavionicsTokens'; | |||||
| VRequestHeader := 'Origin: https://maps.garmin.com' + #13#10 + 'Referer: https://maps.garmin.com/'; | VRequestHeader := 'Origin: https://maps.garmin.com' + #13#10 + 'Referer: https://maps.garmin.com/'; | ||||
| VResponseHeader := ''; | VResponseHeader := ''; | ||||
| VResponseData := ''; | VResponseData := ''; | ||||
| @@ -64,11 +61,18 @@ end; | |||||
| //****************************************************************************** | //****************************************************************************** | ||||
| var | var | ||||
| VBuf : AnsiString; | |||||
| VNavToken: AnsiString; | VNavToken: AnsiString; | ||||
| VNavBearer: AnsiString; | |||||
| begin | begin | ||||
| VNavToken := GetNavToken; | |||||
| VBuf := GetNavToken; | |||||
| VNavToken := RegExprGetMatchSubStr(VBuf, '"configuration_token":"(.*)"', 1); | |||||
| VNavBearer := RegExprGetMatchSubStr(VBuf, '"access_token":"(.*)",', 1); | |||||
| if VNavToken <> '' then begin | if VNavToken <> '' then begin | ||||
| ResultURL := TemplateToUrl(GetURLBase) + '?' + cReqParams + '&' + 'navtoken=' + VNavToken; | |||||
| ResultURL := TemplateToUrl(GetURLBase) + '?' + 'config=' + VNavToken + '&' + cReqParams; | |||||
| RequestHead:= 'Referer: https://maps.garmin.com/' + #13#10 + | |||||
| 'Origin: https://maps.garmin.com' + #13#10 + | |||||
| 'Authorization: Bearer '+ VNavBearer; | |||||
| end else begin | end else begin | ||||
| ResultURL := ''; | ResultURL := ''; | ||||
| end; | end; | ||||
| @@ -4,7 +4,7 @@ name=Navionics Marine Charts | |||||
| ParentSubMenu_ru=Водные карты | ParentSubMenu_ru=Водные карты | ||||
| ParentSubMenu_uk=Водні карти | ParentSubMenu_uk=Водні карти | ||||
| ParentSubMenu=Water maps | ParentSubMenu=Water maps | ||||
| DefURLBase=https://tile{s}.navionics.com/tile/{z}/{x}/{y} | |||||
| DefURLBase=https://tile{s}.navionics.com/viewer/api/v1/tile/{z}/{x}/{y} | |||||
| ServerNames=1,2,3,4,5 | ServerNames=1,2,3,4,5 | ||||
| NameInCache=navionics | NameInCache=navionics | ||||
| Ext=.png | Ext=.png | ||||
| @@ -13,4 +13,3 @@ projection=1 | |||||
| sradiusa=6378137 | sradiusa=6378137 | ||||
| sradiusb=6378137 | sradiusb=6378137 | ||||
| IsUseDownloaderInScript=1 | IsUseDownloaderInScript=1 | ||||
| RequestHead=Referer: https://maps.garmin.com/ | |||||