home *** CD-ROM | disk | FTP | other *** search
/ PC Open 48 / pcopen48.iso / Internet / HtTrack / DATA1.CAB / Sources / src / httrack.h < prev    next >
Encoding:
C/C++ Source or Header  |  2001-01-21  |  19.7 KB  |  399 lines

  1. /* ------------------------------------------------------------ */
  2. /*
  3. HTTrack Website Copier, Offline Browser for Windows and Unix
  4. Copyright (C) Xavier Roche, Yann Philippot
  5.  
  6. This program is free software; you can redistribute it and/or
  7. modify it under the terms of the GNU General Public License
  8. as published by the Free Software Foundation; either version 2
  9. of the License, or any later version.
  10.  
  11. This program is distributed in the hope that it will be useful,
  12. but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14. GNU General Public License for more details.
  15.  
  16. You should have received a copy of the GNU General Public License
  17. along with this program; if not, write to the Free Software
  18. Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  19.  
  20.  
  21. Important notes:
  22.  
  23. - We hereby ask people using this source NOT to use it in purpose of grabbing
  24. emails addresses, or collecting any other private information on persons.
  25. This would disgrace our work, and spoil the many hours we spent on it.
  26.  
  27.  
  28. This project has been developed by Xavier Roche and Yann Philippot,
  29. from the company Serianet at Caen, France (http://www.serianet.com)
  30.  
  31. Please visit our Website: http://www.httrack.com
  32. */
  33.  
  34.  
  35. /* ------------------------------------------------------------ */
  36. /* File: Main file .h                                           */
  37. /* Author: Xavier Roche                                         */
  38. /* ------------------------------------------------------------ */
  39.  
  40. // Fichier librairie .h
  41. #ifndef HTTRACK_DEFH
  42. #define HTTRACK_DEFH
  43.  
  44.  
  45. #include "htsglobal.h"
  46.  
  47. /* specific definitions */
  48. #include "htsbase.h"
  49. // Includes & dΘfinitions
  50. #include <stdio.h>
  51. #include <stdlib.h>
  52. #include <string.h>
  53. #include <sys/types.h>
  54. #include <sys/stat.h>
  55. #ifdef _WIN32
  56. #include <conio.h>
  57. #include <signal.h>
  58. #include <direct.h>
  59. #else
  60. #include <signal.h>
  61. #include <unistd.h>
  62. #endif
  63. /* END specific definitions */
  64.  
  65.  
  66. // Include htslib.h for all types
  67. #include "htslib.h"
  68.  
  69. #include "htsopt.h"
  70.  
  71. // structure d'un lien
  72. typedef struct {
  73.   char firstblock;      // flag 1=premier malloc 
  74.   char link_import;     // lien importΘ α la suite d'un moved - ne pas appliquer les rΦgles classiques up/down
  75.   short int prio;       // prioritΘ du lien ; >0 forte 0=faible
  76.   short int pass2;      // traiter aprΦs les autres, seconde passe
  77.   int premier;          // pointeur sur le premier lien qui a donnΘ lieu aux autres liens du domaine
  78.   int precedent;        // pointeur sur le lien qui a donnΘ lieu α ce lien prΘcis
  79.   //int moved;            // pointeur sur moved
  80.   short int retry;      // nombre de retry restants
  81.   short int testmode;   // mode test uniquement, envoyer juste un head!
  82.   char* adr;            // adresse
  83.   char* fil;            // nom du fichier distant
  84.   char* sav;            // nom α sauver sur disque (avec chemin Θventuel)
  85.   char* cod;            // chemin codebase Θventuel si classe java
  86.   char* former_adr;     // adresse initiale (avant Θventuel moved), peut Ωtre nulle
  87.   char* former_fil;     // nom du fichier distant initial (avant Θventuel moved), peut Ωtre nul
  88.   // pour optimisation:
  89. #if HTS_HASH
  90.   int hash_next[3];     // prochain lien avec mΩme valeur hash
  91. #else
  92.   int sav_len;          // taille de sav
  93. #endif
  94. } lien_url;
  95.  
  96. // chargement de fichiers en 'arriΦre plan'
  97. typedef struct {
  98. #if DEBUG_CHECKINT
  99.   char magic;
  100. #endif
  101.   int status;           // status (-1=non utilisΘ, 0: prΩt, >0: opΘration en cours)
  102.   int testmode;         // mode de test
  103.   char url_adr[HTS_URLMAXSIZE*2];     // adresse
  104.   char url_fil[HTS_URLMAXSIZE*2];     // nom du fichier distant
  105.   char url_sav[HTS_URLMAXSIZE*2];     // nom α sauver sur disque (avec chemin Θventuel)
  106.   char referer_adr[HTS_URLMAXSIZE*2]; // adresse host page referer
  107.   char referer_fil[HTS_URLMAXSIZE*2]; // fichier page referer
  108.   int timeout;            // gΘrer des timeouts? (!=0  : nombre de secondes)
  109.   double timeout_refresh; // si oui, time refresh
  110.   int rateout;            // timeout refresh? (!=0 : taux minimum tolΘrΘ en octets/s)
  111.   double rateout_time;    // si oui, date de dΘpart
  112.   LLint maxfile_nonhtml;  // taille max d'un fichier non html
  113.   LLint maxfile_html;     // idem pour un ficheir html
  114.   char location_buffer[HTS_URLMAXSIZE*2];  // "location" en cas de "moved" (302,..)
  115.   htsblk r;               // structure htsblk de chaque objet en background 
  116.   char send_too[1024];    // donnΘes α envoyer en mΩme temps que le header
  117.   int head_request;       // requΦte HEAD?
  118.   LLint range_req_size;   // range utilisΘ
  119.   //
  120.   int http11;             // L'en tΩte doit Ωtre signΘ HTTP/1.1 et non HTTP/1.0
  121.   int is_chunk;           // chunk?
  122.   char* chunk_adr;        // adresse chunk en cours de chargement
  123.   LLint chunk_size;       // taille chunk en cours de chargement
  124.   //
  125.   char info[256];       // Θventuel status pour le ftp
  126.   int stop_ftp;         // flag stop pour ftp
  127. #if DEBUG_CHECKINT
  128.   char magic2;
  129. #endif
  130. } lien_back;
  131.  
  132. // cache
  133. typedef struct {
  134.   int version;        // 0 ou 1
  135.   /* */
  136.   int type;
  137.   FILE *dat,*ndx,*olddat;
  138.   char *use;      // liste des adr+fil
  139.   FILE *lst;      // liste des fichiers pour la "purge"
  140.   char lastmodified[256];
  141.   // HASH
  142.   void** hash;
  143.   int hash_size;
  144.   // fichiers log optionnels
  145.   FILE* log;
  146.   FILE* errlog;
  147.   // variables
  148.   int ptr_ant;      // pointeur pour anticiper
  149.   int ptr_last;     // pointeur pour anticiper
  150. } cache_back;
  151.  
  152. typedef struct {
  153.   lien_url** liens;                     // pointeur sur liens
  154.   int max_lien;                         // indice le plus grand rencontrΘ
  155.   int hash[3][HTS_HASH_SIZE];           // tables pour sav/adr-fil/former_adr-former_fil
  156. } hash_struct;
  157.  
  158. #if HTS_HASH
  159. #else
  160. #define hash_write(A,B)
  161. #endif
  162.  
  163. typedef struct {
  164.   FILE* lst;
  165.   char path[HTS_URLMAXSIZE*2];
  166. } filecreate_params;
  167.  
  168.  
  169. // Fonctions
  170.  
  171. // INCLUDES .H PARTIES DE CODE HTTRACK
  172.  
  173. // routine main
  174. #include "htsmain.h"
  175.  
  176. // divers outils pour httrack.c
  177. #include "htstools.h"
  178.  
  179. // aide pour la version en ligne de commande
  180. #include "htshelp.h"
  181.  
  182. // gΘnΘration du nom de fichier α sauver
  183. #include "htsname.h"
  184.  
  185. // gestion ftp
  186. #include "htsftp.h"
  187.  
  188. // routine parser java
  189. #include "htsjava.h"
  190.  
  191. // gestion interception d'URL
  192. #include "htscatchurl.h"
  193.  
  194. // gestion robots.txt
  195. #include "htsrobots.h"
  196.  
  197. // routines d'acceptation de liens
  198. #include "htswizard.h"
  199.  
  200. // routines de regexp
  201. #include "htsfilters.h"
  202.  
  203. // gestion backing
  204. #include "htsback.h"
  205.  
  206. // gestion cache
  207. #include "htscache.h"
  208.  
  209. // gestion hashage
  210. #include "htshash.h"
  211.  
  212. // INCLUDES .H PARTIES DE CODE HTTRACK
  213.  
  214. //
  215.  
  216. // demande d'interaction avec le shell
  217. #if HTS_ANALYSTE==2
  218. //char HTbuff[1024];
  219. void  hts_htmlcheck_init(void);
  220. void  hts_htmlcheck_uninit(void);
  221. int   hts_htmlcheck_start(void);
  222. int   hts_htmlcheck_end(void);
  223. int   hts_htmlcheck(char* html,int len,char* url_adresse,char* url_fichier);
  224. char* hts_htmlcheck_query(char* question);
  225. char* hts_htmlcheck_query2(char* question);
  226. char* hts_htmlcheck_query3(char* question);
  227. int   hts_htmlcheck_loop(lien_back* back,int back_max,int back_index,int lien_tot,int lien_ntot,LLint stat_bytes,LLint stat_bytes_recv,int stat_time,int stat_nsocket, LLint stat_written, int stat_updated, int stat_errors);
  228. int   hts_htmlcheck_check(char* adr,char* fil,int status);
  229. //
  230. int hts_is_parsing(int flag);
  231. int hts_is_testing(void);
  232. int hts_setopt(httrackp* opt);
  233. int hts_addurl(char** url);
  234. int hts_resetaddurl(void);
  235. int copy_htsopt(httrackp* from,httrackp* to);
  236. char* hts_errmsg(void);
  237. int hts_setpause(int);      // pause transfer
  238. //
  239. char* hts_cancel_file(char * s);
  240. void hts_cancel_test(void);
  241. void hts_cancel_parsing(void);
  242. //
  243. // Variables globales
  244. extern int _hts_in_html_parsing;
  245. extern int _hts_in_html_done;  // % rΘalisΘs
  246. extern int _hts_in_html_poll;  // parsing
  247. extern char _hts_errmsg[1100];
  248. extern int _hts_setpause;
  249. extern httrackp* _hts_setopt;
  250. extern char** _hts_addurl;
  251. extern int _hts_cancel;
  252. #endif
  253.  
  254.  
  255.  
  256. //
  257.  
  258.  
  259. //int httpmirror(char* url,int level,httrackp opt);
  260. int httpmirror(char* url1,int level1,httrackp opt);
  261. int filesave(char* adr,int len,char* s);
  262. void host_ban(httrackp* opt,lien_url** liens,int ptr,int lien_tot,lien_back* back,int back_max,char** filters,int filter_max,int* filptr,char* host);
  263. FILE* filecreate(char* s);
  264. int filenote(char* s,filecreate_params* params);
  265. HTS_INLINE void usercommand(int exe,char* cmd,char* file);
  266. void usercommand_exe(char* cmd,char* file);
  267. int structcheck(char* s);
  268. HTS_INLINE int fspc(FILE* fp,char* type);
  269. char* next_token(char* p,int flag);
  270. //
  271. char* lirefichier(char* fil);
  272. void check_rate(double stat_timestart,int maxrate);
  273.  
  274. // liens
  275. int liens_record(char* adr,char* fil,char* save,char* former_adr,char* former_fil,char* codebase);
  276.  
  277.  
  278. // backing, routines externes
  279. int back_fill(lien_back* back,int back_max,httrackp* opt,cache_back* cache,lien_url** liens,int ptr,int numero_passe,int lien_tot);
  280. int back_fillmax(lien_back* back,int back_max,httrackp* opt,cache_back* cache,lien_url** liens,int ptr,int numero_passe,int lien_tot);
  281.  
  282. // cancel file
  283. #if HTS_ANALYSTE==2
  284. char* hts_cancel_file(char * s);
  285. void hts_cancel_test(void);
  286. void hts_cancel_parsing(void);
  287. #endif
  288.  
  289. int ask_continue(void);
  290. int nombre_digit(int n);
  291.  
  292. // Java
  293. int hts_add_file(char* file,int file_position);
  294.  
  295. // Polling
  296. #if HTS_POLL
  297. HTS_INLINE int check_flot(T_SOC s);
  298. HTS_INLINE int check_stdin(void);
  299. int read_stdin(char* s,int max);
  300. #endif
  301.  
  302. void sig_finish( int code );     // finir et quitter
  303. void sig_term( int code );       // quitter
  304. #if HTS_WIN
  305. void sig_ask( int code );        // demander
  306. #else
  307. void sig_back( int code );       // ignorer et mettre en backing 
  308. void sig_ask( int code );        // demander
  309. void sig_ignore( int code );     // ignorer signal
  310. void sig_doback(int);            // mettre en arriΦre plan
  311. #endif
  312.  
  313. // Void
  314. void voidf(void);
  315.  
  316.  
  317.  
  318.  
  319. #define HTS_TOPINDEX "TOP_INDEX_HTTRACK"
  320.  
  321. #define HTS_DATA_UNKNOWN_HTML "<html>"LF\
  322. "<head>"LF\
  323. "<title>Page not retrieved!</title>"LF\
  324. "</head>"LF\
  325. "<body background=\"backblue.gif\">"LF\
  326. "<h1><strong><u>Oops!...</u></strong></h1>"LF\
  327. "<h3>This page has <font color=\"red\"><em>not</em></font> been retrieved by HTTrack Website Copier. </h3>"LF\
  328. "<script language=\"Javascript\">"LF\
  329. "<!--"LF\
  330. "  var loc=document.location.toString();"LF\
  331. "  if (loc) {"LF\
  332. "    var pos=loc.indexOf('link=');"LF\
  333. "    if (pos>0) {"LF\
  334. "      document.write('Clic to the link <b>below</b> to go to the online location!<br><a href=\"http://'+loc.substring(pos+5)+'\">http://'+loc.substring(pos+5)+'</a><br>');"LF\
  335. "    } else"LF\
  336. "      document.write('(no location defined)');"LF\
  337. "  }"LF\
  338. "// -->"LF\
  339. "</script>"LF\
  340. "<h6 align=\"right\">Mirror by HTTrack Website Copier</h6>"LF\
  341. "</body>"LF\
  342. "</html>"LF
  343. #define HTS_DATA_UNKNOWN_HTML_LEN 0
  344.  
  345. #define HTS_DATA_ERROR_HTML "<html>"LF\
  346. "<head>"LF\
  347. "<title>Page not retrieved!</title>"LF\
  348. "</head>"LF\
  349. "<body background=\"backblue.gif\">"LF\
  350. "<h1><strong><u>Oops!...</u></strong></h1>"LF\
  351. "<h3>This page has <font color=\"red\"><em>not</em></font> been retrieved by HTTrack Website Copier (%s). </h3>"LF\
  352. "<script language=\"Javascript\">"LF\
  353. "<!--"LF\
  354. "  var loc=document.location.toString();"LF\
  355. "  if (loc) {"LF\
  356. "    var pos=loc.indexOf('link=');"LF\
  357. "    if (pos>0) {"LF\
  358. "      document.write('Clic to the link <b>below</b> to go to the online location!<br><a href=\"http://'+loc.substring(pos+5)+'\">http://'+loc.substring(pos+5)+'</a><br>');"LF\
  359. "    } else"LF\
  360. "      document.write('(no location defined)');"LF\
  361. "  }"LF\
  362. "// -->"LF\
  363. "</script>"LF\
  364. "<h6 align=\"right\">Mirror by HTTrack Website Copier</h6>"LF\
  365. "</body>"LF\
  366. "</html>"LF
  367.  
  368. // image gif "unknown"
  369. #define HTS_DATA_UNKNOWN_GIF "\x47\x49\x46\x38\x39\x61\x20\x0\x20\x0\xf7\xff\x0\xc0\xc0\xc0\xff\x0\x0\xfc\x3\x0\xf8\x6\x0\xf6\x9\x0\xf2\xc\x0\xf0\xf\x0\xf0\xe\x0\xed\x11\x0\xec\x13\x0\xeb\x14\x0\xe9\x15\x0\xe8\x18\x0\xe6\x18\x0\xe5\x1a\x0\xe3\x1c\x0\xe2\x1d\x0\xe1\x1e\x0\xdf\x20\x0\xdd\x23\x0\xdd\x22\x0\xdb\x23\x0\xda\x25\x0\xd9\x25\x0\xd8\x27\x0\xd6\x29\x0\xd5\x2a\x0\xd3\x2c\x0\xd2\x2d\x0"\
  370. "\xd1\x2d\x0\xd0\x2f\x0\xcf\x30\x0\xce\x31\x0\xcb\x34\x0\xcb\x33\x0\xc8\x36\x0\xc5\x3b\x0\xc2\x3c\x0\xc0\x3f\x0\xbc\x43\x0\xba\x45\x0\xb7\x48\x0\xb4\x4c\x0\xb1\x4e\x0\xad\x51\x0\xaa\x55\x0\xa8\x58\x0\xa4\x5a\x0\xa1\x5e\x0\x9f\x60\x0\x99\x66\x0\x96\x68\x0\x93\x6c\x0\x90\x6e\x0\x8d\x72\x0\x8b\x74\x0\x8a\x75\x0\x88\x78\x0\x85\x79\x0\x82\x7d\x0\x7e\x80\x0\x7d\x82\x0\x79"\
  371. "\x86\x0\x77\x88\x0\x73\x8b\x0\x72\x8d\x0\x70\x8e\x0\x6e\x91\x0\x6a\x95\x0\x68\x97\x0\x65\x9a\x0\x63\x9d\x0\x62\x9e\x0\x60\xa0\x0\x5d\xa2\x0\x5c\xa3\x0\x5a\xa5\x0\x57\xa9\x0\x57\xa7\x0\x54\xab\x0\x53\xac\x0\x52\xad\x0\x51\xae\x0\x4f\xb0\x0\x4e\xb1\x0\x4d\xb2\x0\x4c\xb4\x0\x49\xb6\x0\x48\xb8\x0\x46\xba\x0\x45\xbb\x0\x43\xbd\x0\x43\xbc\x0\x40\xbf\x0\x3f\xc0\x0\x3e\xc1"\
  372. "\x0\x3d\xc2\x0\x3a\xc5\x0\x39\xc5\x0\x38\xc7\x0\x37\xc8\x0\x35\xca\x0\x34\xcb\x0\x32\xcc\x0\x31\xce\x0\x30\xd0\x0\x30\xce\x0\x2f\xd1\x0\x2e\xd1\x0\x2c\xd2\x0\x2b\xd4\x0\x2a\xd5\x0\x29\xd6\x0\x27\xd8\x0\x26\xda\x0\x26\xd8\x0\x25\xdb\x0\x24\xdc\x0\x21\xde\x0\x20\xdf\x0\x1f\xe1\x0\x1e\xe1\x0\x1c\xe3\x0\x1b\xe5\x0\x19\xe6\x0\x18\xe7\x0\x15\xeb\x0\x15\xea\x0\x14\xec\x0"\
  373. "\x12\xed\x0\x10\xef\x0\xf\xf0\x0\xd\xf2\x0\xa\xf5\x0\x9\xf6\x0\x7\xf8\x0\x5\xfa\x0\x3\xfb\x0\x1\xfd\x0\x0\xfe\x2\x0\xfb\x4\x0\xf8\x7\x0\xf6\xa\x0\xf3\xd\x0\xee\x12\x0\xaa\x54\x0\xa5\x5a\x0\xa2\x5d\x0\xa0\x60\x0\x9c\x62\x0\x99\x66\x0\x98\x67\x0\x94\x6b\x0\x92\x6d\x0\x91\x6e\x0\x8f\x70\x0\x8c\x74\x0\x8a\x75\x0\x86\x79\x0\x83\x7c\x0\x81\x7e\x0\x7e\x82\x0"\
  374. "\x7b\x83\x0\x79\x87\x0\x76\x8a\x0\x73\x8c\x0\x70\x8f\x0\x6a\x95\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0"\
  375. "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0"\
  376. "\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x0\x21\xf9\x4\x1\x0\x0\x0\x0\x2c\x0\x0\x0\x0\x20\x0\x20\x0\x40\x8"\
  377. "\xff\x0\x1\x8\x1c\x48\xb0\x60\x82\x7\x16\x3a\x8c\x30\x91\x82\xc5\x8b\x82\x10\x23\xa\xa4\x81\x83\xa0\x92\x27\x56\xb6\x88\x51\x23\xb1\xa3\xc0\x38\x78\xfe\x10\x4a\xe4\xb1\xa4\xc9\x93\x1e\xf\x30\x90\x90\x41\xa2\x8e\x1e\x40\x88\x20\x41\x29\xf1\x4b\x99\x36\x75\xf6\xd0\x8c\xe8\x8\xd2\xce\x92\x94\x2e\x6d\xf2\x14\x8a\xd4\xcf\x92\x1\x4\x14\x58\x10\x1\xc3\x87\x82\x32\x6a\xe4\xe0\x81\x72\xc2\x86\x10"\
  378. "\x1d\x83\x14\x49\xd2\x84\x8a\x96\xa3\x5\xa3\x5c\xe9\x42\x66\x8d\x1c\xb0\x4\xcf\xbc\xb1\xd3\x67\x10\x5a\x82\x80\xa\x29\x6a\xf4\xb6\xee\xce\x48\x93\x2c\x69\xb2\x4b\x50\x54\xa9\x53\x7c\x25\x6\x18\x60\xa0\x1\x5\xd\x22\x4a\xa0\x58\xe1\x22\xc6\xc\x1b\x34\x3\x10\x40\xe0\xa0\x2\x87\x88\x37\x76\xf8\x10\x82\x52\x1\x84\xb\x1e\x3a\xfe\x18\x62\x64\x9\x14\x94\x20\x48\x9c\x50\xd1\x2\x6\xc4\x23\x4c"\
  379. "\xa4\x60\xf1\x12\xd8\xc9\x94\x2c\x60\xcc\xb8\xe1\x5b\x85\x4b\x18\x34\x70\xee\x4\x1e\x93\x66\x4e\x1e\x3f\x81\xd9\xd0\xd1\x13\xc8\x50\x60\x0\x7c\x4\x1d\x5a\xf4\x1c\x0\x22\x46\x8f\xaa\x6b\xdf\xce\xbd\xa3\xa4\x4a\x98\x38\x7d\xb\x7a\x9e\xa9\x13\xa8\x51\xa6\xba\xbf\xd\x8\x0\x3b\xff"
  380. #define HTS_DATA_UNKNOWN_GIF_LEN 1070
  381.  
  382. #define HTS_DATA_BACK_GIF "\x47\x49\x46\x38\x39\x61\x40\x6\x4\x0\xf7\x0\x0\xb5\xc6\xff\xb5\xce\xff\xbd\xce\xff\xbd\xd6\xff\xc6\xd6\xff\xce\xd6\xff\xce\xde\xff\xd6\xde\xff\xd6\xe7\xff\xde\xe7\xff\xde\xef\xff\xe7\xef\xff\xef\xef\xff\xef\xf7\xff\xf7\xf7\xff\xf7\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"\
  383. "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"\
  384. "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"\
  385. "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"\
  386. "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"\
  387. "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"\
  388. "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff"\
  389. "\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\xff\x21\xf9\x4\x1\x0\x0\x10\x0\x2c\x0\x0\x0\x0\x40\x6\x4\x0\x40\x8"\
  390. "\xfe\x0\x1\x8\x1c\x48\x90\x60\x80\x83\x8\x13\x6\x10\xb0\x50\x80\xc3\x87\x10\x1d\x12\x10\x40\xa0\xa2\xc5\x8b\x18\xd\x10\xd0\x68\xa0\xa3\x47\x8f\x7\x42\x8a\x44\x70\x0\x1\x49\x93\x28\x4d\x26\x40\xb0\x32\x81\xcb\x97\x30\x5d\x2e\x48\x30\x73\x81\xcd\x9b\x38\x17\x30\xd0\xa9\x93\x81\x4f\x6\xd\x80\x2\x6d\xd0\xc0\x41\xd1\xa2\xe\x92\x2a\x5d\xca\xb4\xa9\xd3\xa7\x50\xa3\x4a\x9d\x4a\xb5\xaa\xd5\xab"\
  391. "\x58\xb3\x6a\xdd\xca\xb5\xab\xd7\xaf\x60\xc3\x8a\x1d\x4b\xb6\xac\xd9\xb3\x68\xd3\xaa\x5d\xcb\xb6\xad\xdb\xb7\x70\xe3\xca\x9d\x4b\xb7\xae\xdd\xbb\x78\xf3\xea\xdd\xcb\x97\x6c\xc1\x81\xa\x1\x1c\x14\x2c\x0\x0\xc3\xc3\x11\x1f\x4e\x84\x38\x11\xe3\x45\x8e\x1b\xb\x44\xfe\x8\xd2\xc0\x1\xcb\x22\x33\x8b\x4c\x70\x80\xb3\xcb\xce\x31\x5f\xce\xa4\x49\x3a\x27\xce\x9d\x3c\x75\x6\x5d\x2d\xf4\xa8\x6b\xa3\x7d"\
  392. "\x63\xcb\x9e\x4d\xbb\xb6\xed\xdb\xb8\x73\xeb\xde\xcd\xbb\xb7\xef\xdf\xc0\x83\xb\x1f\x4e\xbc\xf8\xdc\xbf\xc8\x7\x27\x4c\xcc\x5c\xa2\xe3\xc6\xcf\x39\x52\x9e\xde\xf1\x32\x2\x3\xd7\xb3\x97\x2c\x49\xb2\x65\xe8\xef\x35\x4d\x5f\x8b\xdf\xf9\xf3\xe7\x6a\xa2\x44\x19\xc0\x36\xce\xbe\xbd\xfb\xf7\xf0\xe3\xcb\x9f\x4f\xbf\xbe\xfd\xfb\xf8\xf3\xeb\xdf\xdf\x16\xb9\x60\xc0\x86\x19\x56\x58\x73\x14\x51\x54\x91\x81"\
  393. "\xcf\x25\xb8\x51\x45\xd3\x15\x30\xdd\x65\x9a\x45\x18\x12\x67\xa0\x7d\x27\x5a\x69\xe1\x8d\xd7\x13\x79\xaa\xb5\x6\xd4\x7a\xfc\x85\x28\xe2\x88\x24\x96\x68\xe2\x89\x28\xa6\xa8\xe2\x8a\x2c\xb6\x38\x5c\x40\x0\x0\x3b\xff"
  394. #define HTS_DATA_BACK_GIF_LEN 1153
  395.  
  396. #endif
  397.  
  398.  
  399.