Board logo

标题: CLGO脚本语言 [打印本页]

作者: happy886rr    时间: 2017-1-10 21:00     标题: CLGO脚本语言

C、C++、Java、js都是别人发明的语言,感觉不是很合自己的胃口。为什么不按照自己的口味,创造一个语法规则,建造一门脚本语言。于是、花费少许时间,CLGO语言问世了,有很深的LOGO语言的影子,当然也有很深的C语言的影子。没办法,if、for、while这些关键词我总不能换成别的词吧,就好比三角函数sin我总不能用S来表示吧,个别关键词只是同名,但这绝对是门独立的语言与其他语言的工作原理完全不一样。另外这些关键词随着加载的库的不同可以发挥不同的作用,如果加载了正则库,那他就是类似gawk的正则脚本,加载了gdi他就是一门绘图脚本语言,加载了文件流库,那就是文本处理语言类似sed,加载了其他库就具有其他的功能,加载了按键模拟那就是类似ahk的脚本语言。初版默认只加载绘图库,也是为了压缩包能控制在25KB以下。
CLGO SCRIPT
_____________________________________________________________________________
CLGO SCRIPT控制台绘图脚本语言,具有类似C语言的函数定义、函数调用、递归、循环、
逻辑判断等语法功能。在内存中解释运行,速度迅猛。同时,CLGO语言具有非常简单的
语法结构、关键词、非常适合快速上手。简短的语句就能绘出美妙的画面。
_____________________________________________________________________________
下载:[attach]10383[/attach]










命令:
-----------------------------------------------------------------------------
关键词(不区分大小写)        中文释义                    用法说明
-----------------------------------------------------------------------------
___________________________________全局变量__________________________________
$PENX                       横坐标
$PENY                       纵坐标
$PENW                       笔宽                        取值0-255
$PENC                       笔色                        取值0-15
$PENB                       笔背景色                    取值0-15
$PENS                       笔光滑度                    取值0-6
$PENA                       笔透明度                    取值0-255
$HEADING                    笔头角度                    取值0-360
$RANDOM                     随机数                      取值随机
$YEAR、$MONTH、$DAY、$HOUR、$MINUTE、$SECOND            时间变量
$TP0 - $TP9                 用户变量                    供用户使用的全局变量
___________________________________绘图命令___________________________________
FD                          前进                        FD 100    //前进100步
BK                          后退                        BK 100    //后退100步
LT                          左转                        LT 90     //左转 90度
RT                          右转                        RT 90           //右转 90度
PU                          抬笔                        PU        //抬笔
PD                          落笔                        PD        //落笔
PE                          笔擦                        PE        //笔擦
HOME                        回家                        笔归位至中央、笔头朝上
CLEAN                       清图                        清除绘图区
___________________________________语句命令___________________________________
IF~ELIF                     如果~再则                  条件指令
REPEAT                      重复                        RP 4[循环体]
WHILE                       当                          WHILE 条件[循环体]
FOR                         循环                        FOR 变量 初值 终值[循环体]步长
___________________________________语句词语___________________________________
NOT                         逻辑否
AND                         逻辑与
OR                          逻辑或
___________________________________扩展命令___________________________________
PAUSE                       暂停                        请按任意键继续
WAIT                        等待                        WAIT 3000 //等待3秒
STOP                        停止                        停止子过程
EXIT                        退出                        退出整个脚本
FILL                        颜色填充                    用颜色填充笔所在的封闭区域
ECHO                        显示字符                    ECHO 你好
EVAL                        计算表达式值                EVAL sin(pi/6)+cos(pi/3)
READ                        获取按键                    
OVAL                        画椭圆                      OVAL 100 50  //画横向半径为100,纵向半径为50的椭圆
RECT                        画矩形                      RECT 100 50  //画横向长度为100,纵向长度为50的矩形
ROTE                        旋转                        ROTE 30   //画布旋转30度
MEMUSE                      启用内存画布
MEMSEE                      查看内存画布
MEMOUT                      抛弃内存画布
-----------------------------------------------------------------------------


释符:          
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
行注释  //        行内容
段注释  /*     
                段内容
        */
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


数学类关键词(必须小写):
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
常数类
        pi    3.1415926535897932
        e     2.7182818284590452
通用类
        round 四舍五入
        floor 整取
        abs   绝对值
        ceil  向上舍入
        deg   角度转弧度
        exp   e的次幂
        sqrt  开方
        fac   阶乘
        lg    常用对数,以10为底
        ln    自然对数
        +     加
        -     减
        *     乘
        /     除
        %     取余数
        ^     次方
        !     阶乘

三角函数类
        sin、cos、tan   
        arcsin、arccos、arctan
双曲函数类
        sinh、cosh、tanh
        arcsinh、arccosh、arctanh
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


十六色系:
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
        {  0,  0,  0,RGB(  0,  0,  0)}, //黑色
        {  0,  0,255,RGB(  0,  0,255)}, //蓝色
        {  0,255,  0,RGB(  0,255,  0)}, //绿色
        {  0,255,255,RGB(  0,255,255)}, //青色
        {255,  0,  0,RGB(255,  0,  0)}, //红色
        {238,130,238,RGB(238,130,238)}, //紫兰
        {165, 42, 42,RGB(165, 42, 42)}, //棕色
        {211,211,211,RGB(211,211,211)}, //浅灰
        {169,169,169,RGB(169,169,169)}, //深灰
        {173,216,230,RGB(173,216,230)}, //淡蓝
        {144,238,144,RGB(144,238,144)}, //浅绿
        {224,255,255,RGB(224,255,255)}, //淡青
        {248, 29, 56,RGB(248, 29, 56)}, //亮红
        {255,  0,255,RGB(255,  0,255)}, //洋紫
        {255,255,  0,RGB(255,255,  0)}, //黄色
        {255,255,255,RGB(255,255,255)}  //白色
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


核心代码
  1. /*
  2. CLGO SCRIPT, COPYRIGHT@2017~2019 BY HAPPY, VERSION 1.0
  3. CLGO.EXE
  4. LINK: -lline -L./ -lgdi32 -lgdiplus
  5. */
  6. #include    <stdio.h>
  7. #include   <stdlib.h>
  8. #include   <string.h>
  9. #include    <ctype.h>
  10. #include  <stdbool.h>
  11. #include  <windows.h>
  12. #include   <wincon.h>
  13. #include       <io.h>
  14. #include    <conio.h>
  15. #include     <math.h>
  16. #include     <time.h>
  17. #include   <unistd.h>
  18. #include <gdiplus\gdiplus.h>
  19. /***************定义宏变量***************/
  20. //堆栈尺寸
  21. #define STACK_SIZE         1024
  22. //循环体最大层数
  23. #define LOOP_LEVELS        64
  24. //变量名最大长度
  25. #define MAX_WORDS_SIZE     64
  26. //定义变量值最大长度
  27. #define MAX_VALUE_SIZE     16
  28. //绘图系关键词数
  29. #define KEY_SIZE           20
  30. //循环系关键词数
  31. #define CYC_SIZE           5
  32. //逻辑系关键词
  33. #define LGC_SIZE           3
  34. //全局变量解释数
  35. #define GLOBAL_SIZE        25
  36. /***************全局类变量***************/
  37. //主窗句柄
  38. HWND  hCMD;
  39. HWND  hWND2;
  40. HWND  hWND3;
  41. //主窗区域
  42. RECT  winRECT={0};
  43. LPRECT lrRECT;
  44. //画布句柄
  45. HDC   hDC;
  46. HDC   hDC1;
  47. HDC   hDC2;
  48. HDC   hDC3;
  49. //内存变量
  50. char* tRAM;
  51. //缓存容器
  52. char  cacheTain[1025]={0};
  53. //画线可见,可见即PD,不可见即PU
  54. BOOL  penMODE=TRUE;
  55. //启用内存背景
  56. BOOL  memMODE=FALSE;
  57. /***************关键词类目***************/
  58. //运算符栈
  59. char   STACK1[STACK_SIZE]={0};
  60. //逆波兰栈
  61. char   STACK2[STACK_SIZE]={0};
  62. //浮点数栈
  63. double STACK3[STACK_SIZE]={0};
  64. //数学函数关键词
  65. static const char* MATH_WORDS[]={"e", "pi", "sqrt", "lg", "ln", "sin", "cos", "tan", "arcsin", "arccos", "arctan", "deg", "abs", "round", "floor", "ceil", "exp", "sinh", "cosh", "tanh", "arcsinh", "arccosh", "arctanh", NULL};
  66. //绘图系关键词
  67. static const char* KEY_WORDS[]={"FD", "BK", "LT", "RT", "PU", "PD", "PE", "CLEAN", "ECHO", "HOME", "STOP", "EXIT", "FILL", "PAUSE", "WAIT", "ROTE", "MEMUSE", "MEMSEE", "MEMOUT", "EVAL"};
  68. static const char  KEY_LLENS[]={   2,    2,    2,    2,    2,    2,    2,       5,      4,      4,      4,      4,      4,       5,      4,      4,        6,        6,        6,      4};
  69. //循环系关键词
  70. static const char* CYC_WORDS[]={"IF", "REPEAT", "WHILE", "FOR", "ELIF"};
  71. static const char  CYC_LLENS[]={   2,        6,       5,     3,      4};
  72. //逻辑系关键词
  73. static const char* LGC_WORDS[]={"NOT", "AND", "OR"};
  74. static const char  LGC_LLENS[]={   3,      3,    2};
  75. //定义解释器全局变量
  76. static const char* GLOBAL_WORDS[]={"$PENX", "$PENY", "$HEADING", "$PENB", "$PENW", "$PENC", "$PENS", "$PENA", "$RANDOM", "$YEAR", "$MONTH", "$DAY", "$HOUR", "$MINUTE", "$SECOND", "$TP0", "$TP1", "$TP2", "$TP3", "$TP4", "$TP5", "$TP6", "$TP7", "$TP8", "$TP9"};
  77. static const char  GLOBAL_LLENS[]={      5,       5,          8,       5,       5,       5,       5,       5,         7,       5,        6,      4,       5,         7,         7,      4,      4,      4,      4,      4,      4,      4,      4,      4,      4};
  78.            double  GLOBAL_VALUE[]={      0,       0,          0,       0,       1,       15,      0,     255,         0,       0,        0,      0,       0,         0,         0,      0,      0,      0,      0,      0,      0,      0,      0,      0,      0};
  79. /***************申明函数类***************/
  80. HWND    WINAPI GetConsoleWindow();
  81. float   EvalLine(const char* exp, int PRO_NUM, char** WORDS, char** VALUE, const char* endstring);
  82. /***************RGB 结构体***************/
  83. typedef struct{
  84. BYTE R;
  85. BYTE G;
  86. BYTE B;
  87. COLORREF VALUE;
  88. }STRGB;
  89. //十六色系数组
  90. STRGB LOGO_RGB[16]={
  91. {  0,  0,  0,RGB(  0,  0,  0)}, //黑色
  92. {  0,  0,255,RGB(  0,  0,255)}, //蓝色
  93. {  0,255,  0,RGB(  0,255,  0)}, //绿色
  94. {  0,255,255,RGB(  0,255,255)}, //青色
  95. {255,  0,  0,RGB(255,  0,  0)}, //红色
  96. {238,130,238,RGB(238,130,238)}, //紫兰
  97. {165, 42, 42,RGB(165, 42, 42)}, //棕色
  98. {211,211,211,RGB(211,211,211)}, //浅灰
  99. {169,169,169,RGB(169,169,169)}, //深灰
  100. {173,216,230,RGB(173,216,230)}, //淡蓝
  101. {144,238,144,RGB(144,238,144)}, //浅绿
  102. {224,255,255,RGB(224,255,255)}, //淡青
  103. {248, 29, 56,RGB(248, 29, 56)}, //亮红
  104. {255,  0,255,RGB(255,  0,255)}, //洋紫
  105. {255,255,  0,RGB(255,255,  0)}, //黄色
  106. {255,255,255,RGB(255,255,255)}  //白色
  107. };
  108. /***************计算函数群***************/
  109. //阶乘函数
  110. long long fact(long long n)
  111. {
  112. return (n<2) ?1 :n*(fact(n-1));
  113. }
  114. //逆波兰核心
  115. double RevPolishCore(const char* expression)
  116. {
  117. STACK3[0]=0;
  118. char   *op=(char*)expression, *S1=STACK1, *S2=STACK2, **key, *cp, *kp;
  119. double *S3=STACK3, di, ni;
  120. //生成逆波兰
  121. while(*op!='\0'){
  122. switch(*op){
  123. case ' ' :
  124. case '\t':
  125. case '\r':
  126. case '\n':
  127. //过滤空字符
  128. op++;
  129. continue;
  130. case 'a':
  131. case 'b':
  132. case 'c':
  133. case 'd':
  134. case 'e':
  135. case 'f':
  136. case 'g':
  137. case 'h':
  138. case 'i':
  139. case 'j':
  140. case 'k':
  141. case 'l':
  142. case 'm':
  143. case 'n':
  144. case 'o':
  145. case 'p':
  146. case 'q':
  147. case 'r':
  148. case 's':
  149. case 't':
  150. case 'u':
  151. case 'v':
  152. case 'w':
  153. case 'x':
  154. case 'y':
  155. case 'z':
  156. //识别数学函数关键词
  157. key=(char**)MATH_WORDS;
  158. while(*key !=NULL){
  159. cp=op, kp=*key;
  160. //比对关键词字母
  161. while(*cp==*kp && *kp!='\0'){
  162. cp++, kp++;
  163. }
  164. //验证关键词结尾
  165. if((*cp<'a'||*cp>'z') && (*kp=='\0')){
  166. op=cp;
  167. break;
  168. }
  169. key++;
  170. }
  171. //构建伪双目
  172. if(*key !=NULL){
  173. *(S2++)='.';
  174. *(S2++)=' ';
  175. //伪双目入栈
  176. while('A'<=(*S1) && (*S1)<='Z'){
  177. *(S2++)=*(S1--);
  178. }
  179. *(++S1)=key-(char**)MATH_WORDS+65;
  180. continue;
  181. }else{
  182. //无法识别的数学函数
  183. fputs("Unrecognized math function\n", stderr);
  184. exit(1);
  185. }
  186. break;
  187. case '(':
  188. *(++S1)=*op;
  189. if(*(op+1)=='-' || *(op+1)=='+'){
  190. *(S2++)='0', *(S2++)=' ';
  191. }
  192. break;
  193. case ')':
  194. while(*S1!='(')
  195. {
  196. *(S2++)=*(S1--);
  197. }
  198. //舍弃'('
  199. S1--;
  200. break;
  201. case '+':
  202. case '-':
  203. while(S1!=STACK1 && *S1!='(')
  204. {
  205. *(S2++)=*(S1--);
  206. }
  207. *(++S1)=*op;
  208. break;
  209. case '^':
  210. //指数符
  211. while('A'<=(*S1) && (*S1)<='Z')
  212. {
  213. *(S2++)=*(S1--);
  214. }
  215. *(++S1)=*op;
  216. break;
  217. case '!':
  218. //阶乘符
  219. *(S2++)=*op;
  220. break;
  221. case '%':
  222. case '*':
  223. case '/':
  224. while(('A'<=(*S1) && (*S1)<='Z') ||*S1=='%' ||*S1=='*' ||*S1=='/' ||*S1=='^'){
  225. *(S2++)=*(S1--);
  226. }
  227. *(++S1)=*op;
  228. break;
  229. default :
  230. if((*op<'0' || *op>'9') && (*op!='.')){
  231. //无法识别的运算符
  232. fputs("Unrecognized operator\n", stderr);
  233. exit(1);
  234. }
  235. //浮点数入栈
  236. while(('0'<=*op && *op<='9') ||*op=='.'){
  237. *(S2++)=*(op++);
  238. }
  239. op--;
  240. *(S2++)=' ';
  241. break;
  242. }
  243. op++;
  244. }
  245. //收尾逆波兰
  246. while(S1 !=STACK1){*(S2++)=*(S1--);}
  247. *S2=' ';
  248. //计算逆波兰
  249. op=STACK2;
  250. while(*op!=' '){
  251. switch(*op){
  252. case 'A':
  253. *S3=2.7182818284590452;
  254. break;
  255. case 'B':
  256. *S3=3.1415926535897932;
  257. break;
  258. case 'C':
  259. if(*S3 <0){
  260. //负数没有平方根
  261. fputs("Negative numbers have no square root\n", stderr);
  262. exit(1);
  263. }
  264. *(S3-1)=sqrt(*S3);
  265. S3--;
  266. break;
  267. case 'D':
  268. if(*S3 <0){
  269. //负数没有对数
  270. fputs("Negative numbers are not logarithmic\n", stderr);
  271. exit(1);
  272. }
  273. *(S3-1)=log10(*S3);
  274. S3--;
  275. break;
  276. case 'E':
  277. if(*S3 <0){
  278. //负数没有自然对数
  279. fputs("Negative numbers have no natural logarithms\n", stderr);
  280. exit(1);
  281. }
  282. *(S3-1)=log(*S3);
  283. S3--;
  284. break;
  285. case 'F':
  286. *(S3-1)=sin(*S3);
  287. S3--;
  288. break;
  289. case 'G':
  290. *(S3-1)=cos(*S3);
  291. S3--;
  292. break;
  293. case 'H':
  294. if(*S3==3.1415926535897932/2){
  295. //π/2没有正切值
  296. fputs("The pi/2 has no tangent\n", stderr);
  297. exit(1);
  298. }
  299. *(S3-1)=tan(*S3);
  300. S3--;
  301. break;
  302. case 'I':
  303. *(S3-1)=asin(*S3);
  304. S3--;
  305. break;
  306. case 'J':
  307. *(S3-1)=acos(*S3);
  308. S3--;
  309. break;
  310. case 'K':
  311. *(S3-1)=atan(*S3);
  312. S3--;
  313. break;
  314. case 'L':
  315. *(S3-1)=(*S3)*3.1415926535897932/180.0;
  316. S3--;
  317. break;
  318. case 'M':
  319. *(S3-1)=(*S3<0)?(-(*S3)):(*S3);
  320. S3--;
  321. break;
  322. case 'N':
  323. *(S3-1)=round(*S3);
  324. S3--;
  325. break;
  326. case 'O':
  327. *(S3-1)=floor(*S3);
  328. S3--;
  329. break;
  330. case 'P':
  331. *(S3-1)=ceil(*S3);
  332. S3--;
  333. break;
  334. case 'Q':
  335. *(S3-1)=exp(*S3);
  336. S3--;
  337. break;
  338. case 'R':
  339. *(S3-1)=sinh(*S3);
  340. S3--;
  341. break;
  342. case 'S':
  343. *(S3-1)=cosh(*S3);
  344. S3--;
  345. break;
  346. case 'T':
  347. *(S3-1)=tanh(*S3);
  348. S3--;
  349. break;
  350. case 'U':
  351. *(S3-1)=asinh(*S3);
  352. S3--;
  353. break;
  354. case 'V':
  355. *(S3-1)=acosh(*S3);
  356. S3--;
  357. break;
  358. case 'W':
  359. *(S3-1)=atanh(*S3);
  360. S3--;
  361. break;
  362. case '+':
  363. *(S3-1)+=*S3;
  364. S3--;
  365. break;
  366. case '-':
  367.        *(S3-1)-=*S3;
  368.        S3--;
  369. break;
  370. case '*':
  371. *(S3-1)*=*S3;
  372. S3--;
  373. break;
  374. case '%':
  375. case '/':
  376. if(*S3 !=0){
  377. if(*op=='%'){
  378. //取余数
  379. *(S3-1)=(int)*(S3-1) % (int)*S3;
  380. }else{
  381. *(S3-1)/=*S3;
  382. }
  383. }else{
  384. //除数不能为零
  385. fputs("Divisor is zero error\n", stderr);
  386. exit(1);
  387. }
  388. S3--;
  389. break;
  390. case '^':
  391. if(*(S3-1)==0 && *S3<0){
  392. //除数不能为零
  393. fputs("Function pow's divisor is zero error\n", stderr);
  394. exit(1);
  395. }
  396. *(S3-1)=pow(*(S3-1), *S3);
  397. S3--;
  398. break;
  399. case '!':
  400. if(*S3 <0){
  401. //负数没有阶乘
  402. fputs("Negative numbers have no factorial\n", stderr);
  403. exit(1);
  404. }
  405. *S3=fact((long long)(*S3));
  406. break;
  407. default :
  408. //字符串转浮点
  409. di=0, ni=1;
  410. while('0'<=*op && *op<='9'){
  411. di=10*di+(*op)-'0';
  412. op++;
  413. }
  414. if(*op=='.'){
  415. op++;
  416. while('0'<=*op && *op<='9'){
  417. di=10*di+(*op)-'0';
  418. op++, ni*=10;
  419. }
  420. }
  421. *(++S3)=di/ni;
  422. break;
  423. }
  424. op++;
  425. }
  426. //返回计算结果
  427. return *S3;
  428. }
  429. /***************辅助函数群***************/
  430. //获取时间
  431. inline int getTIME(int i)
  432. {
  433. time_t timep;  
  434. struct tm *p;  
  435. time(&timep);  
  436. p=localtime(&timep);
  437. switch(i){
  438. case  9:
  439. return p->tm_year+1900;
  440. case 10:
  441. return p->tm_mon+1;
  442. case 11:
  443. return p->tm_mday;
  444. case 12:
  445. return p->tm_hour;
  446. case 13:
  447. return p->tm_min;
  448. case 14:
  449. return p->tm_sec;
  450. default:
  451. return -1;
  452. }
  453. return -1;
  454. }
  455. //测空字符
  456. inline BOOL isEND(const char c,const char* endstring)
  457. {
  458. if(c=='\0'){return TRUE;}
  459. while(*endstring!='\0'){
  460. if(c==*(endstring++)){
  461. return TRUE;
  462. }
  463. }
  464. return FALSE;
  465. }
  466. //过滤行TAB缩进或前空格
  467. char* passNULL(char* Str)
  468. {
  469. if(Str!=NULL){
  470. while(*Str=='\t' ||*Str==' '){Str++;}
  471. }
  472. return Str;
  473. }
  474. //识别关键字
  475. BOOL isKEY(char* Line, char* key, const char* endstring)
  476. {
  477. char *op=Line, *kp=key;
  478. while(*kp!='\0'){
  479. if((('a'<= *op && *op<='z')?*op-32:*op) != (('a'<= *kp && *kp<='z')?*kp-32:*kp)){break;}
  480. op++;kp++;
  481. }
  482. if(
  483. *kp=='\0' &&
  484. isEND(*op, endstring)
  485. ){
  486. return TRUE;
  487. }
  488. return FALSE;
  489. }
  490. //切分变量名
  491. int ARGS(char* Str, char** WORDS, int PRO_NUM, int LineNUM, char* Line)
  492. {
  493. if(PRO_NUM==0){return 0;}
  494. //过滤回车符
  495. Str[strlen(Str)-2]='\0';
  496. int  i=0;
  497. char* lp=Str;
  498. char* tp;
  499. strtok(lp, " ");
  500. while(i<PRO_NUM){
  501. WORDS[i]=(char*)calloc(MAX_WORDS_SIZE, sizeof(char));
  502. if((tp=strtok(NULL, " "))==NULL){break;}
  503. strcpy(WORDS[i++], tp);
  504. }
  505. if(i==0){WORDS[i]=(char*)calloc(MAX_WORDS_SIZE, sizeof(char)); return 1;}
  506. if(i<PRO_NUM){fprintf(stdout, "[%d]:Missing Parameter %s\n", LineNUM, Line);exit(1);}
  507. return i;
  508. }
  509. //切分参数
  510. int ARGP(char* Str, char** WORDS, int PRO_NUM, char** PRO_WORDS, char** PRO_VALUE)
  511. {
  512. int i=-1;
  513. char* tp;
  514. strtok(Str, " ");
  515. while((tp=strtok(NULL, " "))!=NULL && *tp!='\r'){
  516. WORDS[++i]=(char*)calloc(MAX_VALUE_SIZE, sizeof(char));
  517. itoa(EvalLine(tp, PRO_NUM, PRO_WORDS, PRO_VALUE, "()+-*%/ \t\r\n"), WORDS[i], 10);
  518. }
  519. if(i==-1){WORDS[++i]=(char*)calloc(MAX_VALUE_SIZE, sizeof(char));}
  520. return i+1;
  521. }
  522. //关键词解析函数
  523. int Identify_KeyWords(char* Line, int SENSITIVE_NUM, char** WORDS, const char* endstring)
  524. {
  525. int i, SN;
  526. for(SN=0; SN<SENSITIVE_NUM; SN++){
  527. char *op=Line, *kp=WORDS[SN];
  528. while(*kp!='\0'){
  529. if(
  530. (('a'<= *op && *op<='z')?*op-32:*op) != (('a'<= *kp && *kp<='z')?*kp-32:*kp)
  531. ){
  532. break;
  533. }
  534. op++;kp++;
  535. }
  536. if(
  537. *kp=='\0' &&
  538. isEND(*op, endstring)
  539. ){
  540. return SN;
  541. }
  542. }
  543. return -1;
  544. }
  545. //计算含变量表达式函数
  546. float EvalLine(const char* exp, int PRO_NUM, char** WORDS, char** VALUE, const char* endstring)
  547. {
  548. char* op=cacheTain;
  549. char* cp=(char*)exp;
  550. char* Line_Cache=op;
  551. int   i=-1;
  552. while(!isEND(*cp, " \t\r\n\0")){
  553. if(!isEND(*cp, ":$ \t\r\n\0")){
  554. *(op++)=*(cp++);
  555. continue;
  556. }
  557. if((*cp==':') && (i=Identify_KeyWords(cp, PRO_NUM, WORDS, endstring))!=-1){
  558. char* tmp=VALUE[i];
  559. *op++='(';
  560. while(*tmp!='\0'){*(op++)=*(tmp++);}
  561. *op++=')';
  562. cp+=strlen(WORDS[i]);
  563. }else if((*cp=='$') && (i=Identify_KeyWords(cp, GLOBAL_SIZE, (char**)GLOBAL_WORDS, endstring))!=-1){
  564. //准备临时容器
  565. char* tmp=(char*)calloc(16, sizeof(char));
  566. //解析变量名
  567. switch(i){
  568. case 8:
  569. itoa(rand(), tmp, 10);
  570. break;
  571. case 9:
  572. case 10:
  573. case 11:
  574. case 12:
  575. case 13:
  576. case 14:
  577. itoa(getTIME(i), tmp, 10);
  578. break;
  579. default:
  580. _gcvt(GLOBAL_VALUE[i], 10, tmp);
  581. break;
  582. }
  583. *op++='(';
  584. while(*tmp!='\0'){*(op++)=*(tmp++);}
  585. *op++=')';
  586. free(tmp);
  587. cp+=GLOBAL_LLENS[i];
  588. }
  589. }
  590. *op='\0' ;
  591. return (float)RevPolishCore(Line_Cache);
  592. }
  593. //赋值函数
  594. BOOL AssignMent(const char* exp, int PRO_NUM, char** WORDS, char** VALUE, const char* endstring)
  595. {
  596. char *gp=(char*)exp, *cp=gp;
  597. while(!isEND(*cp, "=")){
  598. cp++;
  599. }
  600. cp++;
  601. int i=-1;
  602. if(gp[0]==':'){
  603. if(gp[1]==':'){return TRUE;}
  604. i=Identify_KeyWords(gp, PRO_NUM, WORDS, " \t=");
  605. itoa(EvalLine(cp, PRO_NUM, WORDS, VALUE, endstring), VALUE[i], 10);
  606. }else if(gp[0]=='$'){
  607. i=Identify_KeyWords(gp, GLOBAL_SIZE, (char**)GLOBAL_WORDS, " \t=");
  608. GLOBAL_VALUE[i]=EvalLine(cp, PRO_NUM, WORDS, VALUE, endstring);
  609. switch(i){
  610. case 3:
  611. GLOBAL_VALUE[i]=(GLOBAL_VALUE[i]>=0) ?(int)GLOBAL_VALUE[i]%16 :16+(int)GLOBAL_VALUE[i]%16;
  612. STRGB* bgRGB=&LOGO_RGB[(int)GLOBAL_VALUE[i]];
  613. //创建画刷
  614. HBRUSH m_brush=CreateSolidBrush(bgRGB->VALUE);
  615. //填充背景
  616. FillRect(hDC1, lrRECT, m_brush);
  617. //删除画刷
  618. DeleteObject(m_brush);
  619. break;
  620. break;
  621. case 4:
  622. if(GLOBAL_VALUE[i]<0){GLOBAL_VALUE[i]=-GLOBAL_VALUE[i];}
  623. break;
  624. case 5:
  625. GLOBAL_VALUE[i]=(GLOBAL_VALUE[i]>=0) ?(int)GLOBAL_VALUE[i]%16 :360+(int)GLOBAL_VALUE[i]%16;
  626. break;
  627. case 6:
  628. GLOBAL_VALUE[i]=(GLOBAL_VALUE[i]>=0) ?(int)GLOBAL_VALUE[i]%6 :(0-(int)GLOBAL_VALUE[i])%6;
  629. break;
  630. case 7:
  631. GLOBAL_VALUE[i]=(GLOBAL_VALUE[i]>=0) ?(int)GLOBAL_VALUE[i]%255 :(0-(int)GLOBAL_VALUE[i])%255;
  632. break;
  633. default:
  634. break;
  635. }
  636. }
  637. return TRUE;
  638. }
  639. //批量赋值
  640. BOOL MoreAssignMent(const char* Line, int PRO_NUM, char** WORDS, char** VALUE, const char* endstring)
  641. {
  642. char *gp=(char*)Line;
  643. while(isEND(*gp, ":$")){
  644. AssignMent(gp, PRO_NUM, WORDS, VALUE, endstring);
  645. gp++;
  646. while(!isEND(*gp, " \t\0")){
  647. gp++;
  648. }
  649. while(!isEND(*gp, ":$\0")){gp++;}
  650. if(*gp=='\0'){return TRUE;}
  651. }
  652. return TRUE;
  653. }
  654. //测FOR循环
  655. inline BOOL isForTrue(const char* Line, int PRO_NUM, char** WORDS, char** VALUE, int CYC)
  656. {
  657. if(CYC ==0){return TRUE;}
  658. int i=-1;
  659. if((i=Identify_KeyWords(strtok((char*)Line, " "), PRO_NUM, WORDS, " \t")) !=-1){
  660. int staNUM=EvalLine(strtok(NULL, " "), PRO_NUM, WORDS, VALUE, "()+-*%/ \t\r\n");
  661. int endNUM=EvalLine(strtok(NULL, " "), PRO_NUM, WORDS, VALUE, "()+-*%/ \t\r\n");
  662. int var   =atoi(VALUE[i]);
  663. if(staNUM-endNUM<0){return (var<=endNUM)?TRUE:FALSE;}
  664. return (var>=endNUM)?TRUE:FALSE;
  665. }
  666. return FALSE;
  667. }
  668. //真值条件判断
  669. BOOL JudgMent(const char* exp, int PRO_NUM, char** WORDS, char** VALUE, const char* endstring)
  670. {
  671. char* op=cacheTain;
  672. char* cp=(char*)exp;
  673. //过滤行TAB缩进或空格
  674. while(*cp=='\t'|| *cp==' '){cp++;}
  675. if(isEND(*cp, "\r\n\0")){
  676. return TRUE;
  677. }
  678. char* Line_Cache=op;
  679. int   i=-1, flag=0;
  680. while(!isEND(*cp, " \t\r\n\0")){
  681. if      (*cp=='>'){
  682. flag+=4;
  683. *(op++)='-';
  684. *(op++)='(';
  685. cp++;
  686. continue;
  687. }else if(*cp=='<'){
  688. flag+=2;
  689. *(op++)='-';
  690. *(op++)='(';
  691. cp++;
  692. continue;
  693. }else if(*cp=='='){
  694. flag+=1;
  695. if(flag==1){
  696. *(op++)='-';
  697. *(op++)='(';
  698. }
  699. cp++;
  700. continue;
  701. }else if(*cp!=':'&& *cp!='$'){
  702. *(op++)=*(cp++);
  703. continue;
  704. }
  705. if((*cp==':') && (i=Identify_KeyWords(cp, PRO_NUM, WORDS, endstring))!=-1){
  706. char* tmp=VALUE[i];
  707. *op++='(';
  708. while(*tmp!='\0'){*(op++)=*(tmp++);}
  709. *op++=')';
  710. cp+=strlen(WORDS[i]);
  711. }else if((*cp=='$') && (i=Identify_KeyWords(cp, PRO_NUM, WORDS, endstring))!=-1){
  712. char* tmp=(char*)calloc(16, sizeof(char));
  713. if(i==8){
  714. itoa(rand(), tmp, 10);
  715. }else if(9<=i && i<=14){
  716. itoa(getTIME(i), tmp, 10);
  717. }else{
  718. _gcvt(GLOBAL_VALUE[i], 10, tmp);
  719. }
  720. *op++='(';
  721. while(*tmp!='\0'){*(op++)=*(tmp++);}
  722. *op++=')';
  723. cp+=GLOBAL_LLENS[i];
  724. }else{
  725. return FALSE;
  726. }
  727. }
  728. *(op++)=')';
  729. *op='\0' ;
  730. int m=(int)RevPolishCore(Line_Cache);
  731. if(
  732. (m >0 && (flag==4||flag==5 )) ||
  733. (m <0 && (flag==2||flag==3 )) ||
  734. (m==0 && (flag==1||flag==3||flag==5||flag==0))
  735. ){
  736. return TRUE;
  737. }
  738. return FALSE;
  739. }
  740. //批量真值判断
  741. BOOL MoreJudgMent(const char* Line, int PRO_NUM, char** WORDS, char** VALUE, const char* endstring)
  742. {
  743. char *gp=(char*)Line;
  744. int li=Identify_KeyWords(gp, LGC_SIZE, (char**)LGC_WORDS, " \t");
  745. if(li !=-1){gp+=LGC_LLENS[li];}
  746. do{
  747. while(isEND(*gp, " \t")){
  748. gp++;
  749. }
  750. if(JudgMent(gp, PRO_NUM, WORDS, VALUE, endstring)){
  751. switch(li){
  752. case 0:
  753. return FALSE;
  754. case 1:
  755. break;
  756. case 2:
  757. return TRUE;
  758. default:
  759. return TRUE;
  760. }
  761. }else{
  762. switch(li){
  763. case 0:
  764. break;
  765. case 1:
  766. return FALSE;
  767. case 2:
  768. break;
  769. default:
  770. return FALSE;
  771. }
  772. }
  773. while(!isEND(*gp, " \t\0"  )){gp++;}
  774. if(*gp=='\0'){return TRUE;}
  775. while( isEND(*gp, " \t\r\n")){gp++;}
  776. }while(*gp !='\0');
  777. }
  778. /***************绘图函数群***************/
  779. //隐藏光标
  780. BOOL SizeCursor(int size)
  781. {
  782.     CONSOLE_CURSOR_INFO cursor_info = {(DWORD)((size==0)?25:size), (size==0)?FALSE:TRUE};
  783.     return SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE), &cursor_info);
  784. }
  785. //平滑画线函数,C++连接库
  786. void drawSMOOTHLINE(HDC hDC, int penWith, int mode, BYTE alpha, STRGB* penRGB, float x1, float y1, float x2, float y2);
  787. //封闭区域填充函数,C++连接库
  788. void fillAREA(HDC hDC, BYTE alpha, STRGB* penRGB, float fill_X, float fill_Y);
  789. //快速画线函数
  790. BOOL drawLINE(HDC hDC, int d)
  791. {
  792. float x1=GLOBAL_VALUE[0], y1=GLOBAL_VALUE[1];
  793. GLOBAL_VALUE[0]+=d * sin(GLOBAL_VALUE[2]*0.017453292519943);
  794. GLOBAL_VALUE[1]+=d * cos(GLOBAL_VALUE[2]*0.017453292519943);
  795. //当为PU抬笔时,不做绘图
  796. if(!penMODE){
  797. return FALSE;
  798. }
  799. STRGB* penRGB=&LOGO_RGB[(int)GLOBAL_VALUE[5]];
  800. drawSMOOTHLINE(hDC, (int)GLOBAL_VALUE[4], (int)GLOBAL_VALUE[6], (int)GLOBAL_VALUE[7], penRGB, lrRECT->right/2+x1, lrRECT->bottom/2-y1, lrRECT->right/2+GLOBAL_VALUE[0], lrRECT->bottom/2-GLOBAL_VALUE[1]);
  801. return TRUE;
  802. }
  803. //退步函数,实现BK
  804. void backWARD(int d)
  805. {
  806. GLOBAL_VALUE[0]-=d * sin(GLOBAL_VALUE[2]*0.017453292519943);
  807. GLOBAL_VALUE[1]-=d * cos(GLOBAL_VALUE[2]*0.017453292519943);
  808. }
  809. //图形旋转
  810. int RotateDC(HDC hDC, int angle)  
  811. {
  812. if(angle==0){return 1;}
  813. XFORM Matrix;
  814. double rad =-angle * 0.017453292519943;
  815. Matrix.eM11 = (float)cos(rad);  
  816. Matrix.eM12 = (float)sin(rad);  
  817. Matrix.eM21 =-(float)sin(rad);
  818. Matrix.eM22 = (float)cos(rad);  
  819. Matrix.eDx  = (float)(GLOBAL_VALUE[0]-cos(rad)*GLOBAL_VALUE[0]+sin(rad)*GLOBAL_VALUE[1]);  
  820. Matrix.eDy  = (float)(GLOBAL_VALUE[1]-cos(rad)*GLOBAL_VALUE[1]-sin(rad)*GLOBAL_VALUE[0]);
  821. SetGraphicsMode(hDC, GM_ADVANCED);
  822. SetWorldTransform(hDC, &Matrix);
  823. return 0;
  824. }
  825. /***************解析函数群***************/
  826. //脚本解析函数
  827. int FileScript(char* prossName, int PRO_NUM, char** PRO_VALUE)
  828. {
  829. //初始参数,其中KLevel为当前循环层号;
  830. int i=0, j=0, KLevel=0, SN=-1, Line_LEN=0, fcolor=-1, BASE_VAR_NUM=PRO_NUM;
  831. char* prepos=NULL;
  832. //定义过程变量存储容器,即定义 :A型变量,后接 ::A型变量
  833. char** PRO_WORDS=(char**)calloc(LOOP_LEVELS, sizeof(char*));
  834. //初始化开关参数,SFLAG[0]==1开始;
  835. char* SFLAG=(char*)calloc(8, sizeof(char));
  836. SFLAG[2]=-1;
  837. //初始化循环参量数组
  838. int*   FORI_CYCL=(int  *)calloc(LOOP_LEVELS,   sizeof(int  ));
  839. int*   FORI_LNUM=(int  *)calloc(LOOP_LEVELS,   sizeof(int  ));
  840. char** FORI_FTEL=(char**)calloc(LOOP_LEVELS,   sizeof(char*));
  841. char** FORI_FEND=(char**)calloc(LOOP_LEVELS,   sizeof(char*));
  842. BOOL*  FORI_IFOT=(BOOL *)calloc(LOOP_LEVELS,   sizeof(BOOL ));
  843. //分配行容器
  844. char* LCache=(char*)calloc(1025, sizeof(char));
  845. //辅助行指针
  846. char* Line;
  847. //辅助流指针
  848. char* tmpfp=tRAM;
  849. while(*tmpfp !='\0'){
  850. //记录位置
  851. char* prepos=tmpfp;
  852. //指针置换
  853. Line=LCache;
  854. while(*tmpfp !='\n' && *tmpfp !='\0'){
  855. *(Line++)=*(tmpfp++);
  856. }
  857. if(*tmpfp =='\n'){*(Line++)=*(tmpfp++);}
  858. *Line='\0';
  859. //指针回首
  860. Line=LCache;
  861. //行计数器
  862. i++;
  863. //过滤行TAB缩进或前空格
  864. while(*Line=='\t'|| *Line==' '){Line++;}
  865. //过滤空行或行注释
  866. if(
  867. (Line[0]=='\r')                ||
  868. (Line[0]=='\n')                ||
  869. (Line[0]=='/' && Line[1]=='/')
  870. ){
  871. continue;
  872. }
  873. //过滤段间注释
  874. if(
  875. (Line[0]=='/' &&Line[1]=='*')
  876. ){
  877. SFLAG[0]=0;
  878. continue;
  879. }else if(
  880. (Line[0]=='*' &&Line[1]=='/')
  881. ){
  882. SFLAG[0]=1;
  883. continue;
  884. }
  885. //识别子过程名
  886. if(
  887. (isEND(Line[2], " \t\r\n\0") )  &&
  888. (Line[0]=='T' || Line[0]=='t')  &&
  889. (Line[1]=='O' || Line[1]=='o')
  890. ){
  891. Line+=2;
  892. //过滤TO后TAB缩进,或TO后空格
  893. while(*Line=='\t'|| *Line==' '){Line++;}
  894. if(isKEY(Line, prossName, " \t\r\n\0")){
  895. SFLAG[0]=1;
  896. ARGS(Line, PRO_WORDS, PRO_NUM, i, Line);
  897. }else{
  898. SFLAG[0]=0;
  899. }
  900. continue;
  901. }
  902. //开始开关未打开,或遇到空行
  903. if(
  904. SFLAG[0]==0     ||
  905. isEND(Line[0], "\r\n[")
  906. ){continue;}
  907. //IF...ELIF连带性分析
  908. if(
  909. (FORI_IFOT[KLevel+1]       )   &&
  910. (Line[0]!='E'&&Line[0]!='e')   &&
  911. (Line[1]!='L'&&Line[1]!='l')   &&
  912. (Line[2]!='I'&&Line[2]!='i')   &&
  913. (Line[3]!='F'&&Line[3]!='f')
  914. ){
  915. FORI_IFOT[KLevel+1]=FALSE;
  916. }
  917. //解析循环结束标签,循环加速
  918. if(Line[0]==']'){
  919. if(KLevel>SFLAG[1]){
  920. if(FORI_CYCL[KLevel] <0){
  921. int tpadd=EvalLine(Line+1, PRO_NUM, PRO_WORDS, PRO_VALUE, "()+-*%/ \t\r\n");
  922. if(tpadd==0){tpadd=1;}
  923. itoa(atoi(PRO_VALUE[0-FORI_CYCL[KLevel]])+tpadd, PRO_VALUE[0-FORI_CYCL[KLevel]], 10);
  924. }
  925. if(FORI_FEND[KLevel]==NULL){FORI_FEND[KLevel]=tmpfp;}
  926. tmpfp=FORI_FTEL[KLevel];
  927. i=FORI_LNUM[KLevel]-1;
  928. }else{
  929. FORI_FTEL[KLevel]=NULL;
  930. FORI_FEND[KLevel]=NULL;
  931. FORI_CYCL[KLevel]=0;
  932. SFLAG[1]=0;
  933. }
  934. KLevel--;
  935. continue;
  936. }else{
  937. int ki =Identify_KeyWords(Line, CYC_SIZE, (char**)CYC_WORDS, " \t\r\n\0");
  938. if( ki!=-1){
  939. Line=passNULL(Line+CYC_LLENS[ki]);
  940. KLevel++;
  941. //解析循环
  942. if(
  943. ki==0 && FORI_CYCL[KLevel]<1 && MoreJudgMent(Line, PRO_NUM, PRO_WORDS, PRO_VALUE, "()+-*/><= \t\r\n") ||
  944. ki==1 && FORI_CYCL[KLevel]<EvalLine(Line, PRO_NUM, PRO_WORDS, PRO_VALUE, "()+-*%/ \t\r\n"   )         ||
  945. ki==2 && MoreJudgMent(Line, PRO_NUM, PRO_WORDS, PRO_VALUE, "()+-*/><= \t\r\n")                        ||
  946. ki==3 && isForTrue(Line, PRO_NUM, PRO_WORDS, PRO_VALUE,  FORI_CYCL[KLevel])                           ||
  947. ki==4 && (FORI_IFOT[KLevel]) && FORI_CYCL[KLevel]<1 && MoreJudgMent(Line, PRO_NUM, PRO_WORDS, PRO_VALUE, "()+-*/><= \t\r\n")
  948. ){
  949. if( FORI_FTEL[KLevel]==NULL ){
  950. FORI_FTEL[KLevel]=prepos;
  951. FORI_LNUM[KLevel]=i+1;
  952. if(ki==3){
  953. char *tp1, *tp2;
  954. //提取瞬时变量名
  955. if((tp1=strtok(Line, " "))==NULL){fprintf(stdout, "[%d]:Missing Parameter %s\n", i, Line);exit(1);}
  956. PRO_WORDS[PRO_NUM]=(char*)calloc(MAX_WORDS_SIZE, sizeof(char));
  957. strcpy(PRO_WORDS[PRO_NUM], tp1);
  958. //提取始步
  959. if((tp2=strtok(NULL, " "))==NULL){fprintf(stdout, "[%d]:Missing Parameter %s\n", i, Line);exit(1);}
  960. PRO_VALUE[PRO_NUM]=(char*)calloc(MAX_VALUE_SIZE, sizeof(char));
  961. itoa(EvalLine(tp2, PRO_NUM, PRO_WORDS, PRO_VALUE, "()+-*%/ \t\r\n"), PRO_VALUE[PRO_NUM], 10);
  962. FORI_CYCL[KLevel] =0-PRO_NUM;
  963. PRO_NUM++;
  964. }
  965. if(ki==0 || ki==4){
  966. FORI_IFOT[KLevel]=FALSE;
  967. }
  968. }
  969. if(ki !=3){FORI_CYCL[KLevel]  ++;}
  970. }else{
  971. if((ki==0||ki==4) && FORI_CYCL[KLevel]==0){
  972. FORI_IFOT[KLevel]=TRUE;
  973. }
  974. if(FORI_FEND[KLevel] !=NULL){
  975. if(FORI_CYCL[KLevel] <0){
  976. free(PRO_WORDS[PRO_NUM]);
  977. free(PRO_VALUE[PRO_NUM]);
  978. PRO_NUM-=1;
  979. }
  980. tmpfp=FORI_FEND[KLevel];
  981. i=FORI_LNUM[KLevel]-1;
  982. FORI_FTEL[KLevel]=NULL;
  983. FORI_FEND[KLevel]=NULL;
  984. FORI_CYCL[KLevel]=0;
  985. KLevel--;
  986. }else{
  987. SFLAG[1]=KLevel;
  988. }
  989. }
  990. continue;
  991. }
  992. }
  993. //语句块循环开关
  994. if(SFLAG[1]!=0){continue;}
  995. //变量赋值
  996. if(Line[0]==':'||Line[0]=='$'){
  997. MoreAssignMent(Line, PRO_NUM, PRO_WORDS, PRO_VALUE, "()+-*%/ \t\r\n");
  998. continue;
  999. }
  1000. //调用子过程
  1001. if(Line[0]=='.'){
  1002. //定义过程传参容器
  1003. char** PAR_VALUE=(char**)calloc(LOOP_LEVELS, sizeof(char*));
  1004. int PAR_NUM=ARGP(Line, PAR_VALUE, PRO_NUM, PRO_WORDS, PRO_VALUE);
  1005. FileScript(Line+1, PAR_NUM, PAR_VALUE);
  1006. free(PAR_VALUE);
  1007. continue;
  1008. }
  1009. //过滤回车符
  1010. if((Line_LEN=strlen(Line))==2){
  1011. continue;
  1012. }else{
  1013. Line[Line_LEN-2]='\0';
  1014. }
  1015. //解析命令行
  1016. if((SN=Identify_KeyWords(Line, KEY_SIZE, (char**)KEY_WORDS, " \t\r\n\0")) !=-1){
  1017. Line=passNULL(Line+KEY_LLENS[SN]);
  1018. }else{
  1019. printf("[%d]:EEEOR LINE \"%s\"\n", i, Line);
  1020. exit(1);
  1021. }
  1022. switch(SN)
  1023. {
  1024. case  0:
  1025. //FD
  1026. drawLINE(hDC, EvalLine(Line, PRO_NUM, PRO_WORDS, PRO_VALUE, "()+-*%/ \t\r\n"));
  1027. break;
  1028. case  1:
  1029. //BK
  1030. backWARD(EvalLine(Line, PRO_NUM, PRO_WORDS, PRO_VALUE, "()+-*%/ \t\r\n"));
  1031. break;
  1032. case  2:
  1033. //LT
  1034. GLOBAL_VALUE[2]-=EvalLine(Line, PRO_NUM, PRO_WORDS, PRO_VALUE, "()+-*%/ \t\r\n");
  1035. break;
  1036. case  3:
  1037. //RT
  1038. GLOBAL_VALUE[2]+=EvalLine(Line, PRO_NUM, PRO_WORDS, PRO_VALUE, "()+-*%/ \t\r\n");
  1039. break;
  1040. case  4:
  1041. //PU
  1042. penMODE=FALSE;
  1043. break;
  1044. case  5:
  1045. //PD
  1046. if(SFLAG[2] !=-1){
  1047. GLOBAL_VALUE[5]=SFLAG[2];
  1048. SFLAG[2] =-1;
  1049. }
  1050. penMODE=TRUE;
  1051. break;
  1052. case  6:
  1053. //PE
  1054. if(SFLAG[2] ==-1){
  1055. SFLAG[2]=GLOBAL_VALUE[5];
  1056. GLOBAL_VALUE[5]=GLOBAL_VALUE[3];
  1057. }
  1058. break;
  1059. case  7:
  1060. //CLEAN
  1061. InvalidateRect(hCMD,NULL,FALSE);
  1062. break;
  1063. case  8:
  1064. //ECHO, 输出字符串
  1065. printf("%s\n", Line);
  1066. break;
  1067. case  9:
  1068. //HOME
  1069. GLOBAL_VALUE[0]=GLOBAL_VALUE[1]=GLOBAL_VALUE[2]=0;
  1070. break;
  1071. case 10:
  1072. //STOP
  1073. return 0;
  1074. case 11:
  1075. //EXIT
  1076. exit(0);
  1077. case 12:
  1078. //FILL
  1079. if((fcolor=EvalLine(Line, PRO_NUM, PRO_WORDS, PRO_VALUE, "()+-*%/ \t\r\n")) !=-1){
  1080. fillAREA(hDC,  (BYTE)((int)GLOBAL_VALUE[7]&0xFF), &LOGO_RGB[fcolor],  lrRECT->right/2+GLOBAL_VALUE[0],  lrRECT->bottom/2-GLOBAL_VALUE[1]);
  1081. }
  1082. break;
  1083. case 13:
  1084. //PAUSE
  1085. getch();
  1086. break;
  1087. case 14:
  1088. //WAIT
  1089. Sleep(EvalLine(Line, PRO_NUM, PRO_WORDS, PRO_VALUE, "()+-*%/ \t\r\n"));
  1090. break;
  1091. case 15:
  1092. //ROTE
  1093. //将内存画布拷屏到CMD窗口
  1094. //BitBlt(hDC,0,0,WINDOW_WIDTH,WINDOW_HEIGHT, hDC1,0,0,SRCCOPY);
  1095. RotateDC(hDC, EvalLine(Line, PRO_NUM, PRO_WORDS, PRO_VALUE, "()+-*%/ \t\r\n"));
  1096. break;
  1097. case 16:
  1098. //MEMUSE,开辟内存画布
  1099. if(!memMODE){
  1100. BitBlt(hDC3,0,0,lrRECT->right,lrRECT->bottom, hDC1,0,0,SRCCOPY);
  1101. memMODE=TRUE;
  1102. }
  1103. BitBlt(hDC2,0,0,lrRECT->right,lrRECT->bottom, hDC3,0,0,SRCCOPY);
  1104. hDC=hDC2;
  1105. break;
  1106. case 17:
  1107. //MEMSEE,展示内存画布
  1108. BitBlt(hDC1,0,0,lrRECT->right,lrRECT->bottom, hDC2,0,0,SRCCOPY);
  1109. BitBlt(hDC2,0,0,lrRECT->right,lrRECT->bottom, hDC3,0,0,SRCCOPY);
  1110. break;
  1111. case 18:
  1112. //MEMOUT,丢弃内存画布
  1113. memMODE=FALSE;
  1114. hDC=hDC1;
  1115. break;
  1116. case 19:
  1117. //EVAL,表达式计算输出
  1118. printf("%.12g\n", EvalLine(Line, PRO_NUM, PRO_WORDS, PRO_VALUE, "()+-*%/ \t\r\n"));
  1119. break;
  1120. default:
  1121. printf("[%d]:EEEOR LINE 。\n", i);
  1122. exit(1);
  1123. break;
  1124. }
  1125. }
  1126. free(PRO_WORDS);
  1127. free(SFLAG);
  1128. free(FORI_CYCL);
  1129. free(FORI_LNUM);
  1130. free(FORI_FTEL);
  1131. free(FORI_FEND);
  1132. free(FORI_IFOT);
  1133. free(LCache);
  1134. return 0;
  1135. }
  1136. /*************MAIN主函数入口*************/
  1137. int main(int argc, char** argv)
  1138. {
  1139. if(argc==2){
  1140. //隐藏光标
  1141. SizeCursor(0);
  1142. //初始化变量
  1143. int fsize=0;
  1144. //初始化随机种子
  1145. srand((unsigned)time(NULL));
  1146. //读文件流
  1147. FILE* fp;
  1148. if( (fp=fopen(argv[1], "rb"))==NULL ){
  1149. fputs("Failed to read file.", stdout);
  1150. return 2;
  1151. }
  1152. //测量尺寸
  1153. fseek(fp, 0, SEEK_END);
  1154. fsize=ftell(fp);
  1155. //超过1M的脚本,拒绝执行
  1156. if(fsize > 1*1024*1024){
  1157. fputs("File size is too large, out of memory.", stdout);
  1158. return 1;
  1159. //小于10字节的,拒绝执行
  1160. }else if(fsize < 10){
  1161. fputs("File size is too small,  in of memory.", stdout);
  1162. return 1;
  1163. }
  1164. //指针复原
  1165. fseek(fp, 0, SEEK_SET);
  1166. //读入内存
  1167. tRAM=(char*)calloc(fsize+3, sizeof(char));
  1168. tRAM[fsize]='\r', tRAM[fsize+1]='\n', tRAM[fsize+2]='\0';
  1169. fread(tRAM, fsize, 1, fp);
  1170. //释放文件
  1171. fclose(fp);
  1172. //获取CMD窗口句柄
  1173. hCMD=GetConsoleWindow();
  1174. //获取CMD窗口大小
  1175. lrRECT=&winRECT;
  1176. GetClientRect(hCMD, lrRECT);
  1177. //CMD画布
  1178. hDC1=GetDC(hCMD);
  1179. HBITMAP hBitmap1=CreateCompatibleBitmap(hDC1, lrRECT->right, lrRECT->bottom);
  1180. SelectObject(hDC1, hBitmap1);
  1181. //内存画布
  1182. hWND2=NULL;
  1183. hDC2=CreateCompatibleDC(GetDC(hWND2));
  1184. HBITMAP hBitmap2=CreateCompatibleBitmap(hDC1, lrRECT->right, lrRECT->bottom);
  1185. SelectObject(hDC2, hBitmap2);
  1186. //辅助画布
  1187. hWND3=NULL;
  1188. hDC3=CreateCompatibleDC(GetDC(hWND3));
  1189. HBITMAP hBitmap3=CreateCompatibleBitmap(hDC1, lrRECT->right, lrRECT->bottom);
  1190. SelectObject(hDC3, hBitmap3);
  1191. //运行脚本
  1192. char** PAR_VALUE=(char**)calloc(LOOP_LEVELS, sizeof(char*));
  1193. //主DC选择CMD画布
  1194. hDC=hDC1;
  1195. //寻找主函数入口点
  1196. FileScript("MAIN", 1, PAR_VALUE);
  1197. //释放DC
  1198. ReleaseDC(NULL, hDC3);
  1199. ReleaseDC(NULL, hDC2);
  1200. ReleaseDC(hCMD, hDC1);
  1201. DeleteDC(hDC3);
  1202. DeleteDC(hDC2);
  1203. DeleteDC(hDC1);
  1204. DeleteObject(hBitmap3);
  1205. DeleteObject(hBitmap2);
  1206. DeleteObject(hBitmap1);
  1207. //释放内存
  1208. free(PAR_VALUE);
  1209. free(tRAM);
  1210. return 0;
  1211. }
  1212. //异常则抛出使用说明
  1213. fputs("COPYRIGHT@2017~2019 BY HAPPY, VERSION 1.0\nUSAGE: CLGO [FILE]\n", stdout);
  1214. return 1;
  1215. }
复制代码
批处理调用示例
  1. /*
  2. @ECHO OFF&CLS&COLOR 0F&MODE CON COLS=100 LINES=30&CLGO "%~F0"&PAUSE>NUL&EXIT /B
  3. COPYRIGHT@2017~2019 BY HAPPY
  4. */
  5. TO MAIN
  6. $PENX=-36 $PENY=126 $PENS=2 $PENW=2 $PENA=180 $HEADING=12
  7. //MEMUSE
  8. REPEAT 12
  9. [
  10. $PENC=$RANDOM%15+1
  11. REPEAT 75
  12. [
  13. FD 100
  14. BK 100
  15. RT 2
  16. ]
  17. FD 250
  18. ]
  19. //MEMSEE
  20. //MEMOUT
复制代码
CLGO语言能绘图、能计算、能做动画、能开发游戏、能制作窗体菜单,1.0版由于时间仓促功能不是很多,bug也在所难免,但之后的版本会发生质的改变,敬请期待。
作者: 老刘1号    时间: 2017-2-13 22:41

直接存批运行,Clogo已内嵌,解内嵌需WinVista或更高
非常强大的绘图语言,赞一个!
  1. @echo off
  2. Rem 我的第一个Clogo绘图程序
  3. set rand=%random%
  4. certutil -decode "%~f0" "%tmp%\%rand%.exe"
  5. MODE CON COLS=100 LINES=30&"%tmp%\%rand%.exe" "%~F0"&PAUSE>NUL&EXIT /B
  6. to First :x :y :w :c :a :循环 :旋转角度
  7. repeat 20 [
  8. make :PENX=rand(:x)
  9. make :PENY=rand(:y)
  10. make :PENW=rand(:w)
  11. make :PENC=rand(:c)
  12. make :HEADING=rand(:a)
  13. make :旋转角度=rand(:旋转角度)
  14. REPEAT 100 [
  15. make :循环=:循环+10
  16. pd
  17. fd :循环
  18. pu
  19. bk :循环
  20. LT :旋转角度
  21. wait 1
  22. ]
  23. ]
  24. TO MAIN
  25. First 150 100 3 15 180 0 30
  26. -----BEGIN BASE64-----
  27. TVqQAAMAAAAEAAAA//8AALgAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  28. AAAAAAAAAAAAAAAA8AAAAA4fug4AtAnNIbgBTM0hVGhpcyBwcm9ncmFtIGNhbm5v
  29. dCBiZSBydW4gaW4gRE9TIG1vZGUuDQ0KJAAAAAAAAADpzEdsra0pP62tKT+trSk/
  30. wtu1P6+tKT8+47E/rq0pP8Lbtz+prSk/wtuDP7mtKT+k1bo/pK0pP62tKD/frSk/
  31. wtuCP6itKT/C27M/rK0pP8LbtD+srSk/UmljaK2tKT8AAAAAAAAAAAAAAAAAAAAA
  32. UEUAAEwBBQCCMqFYAAAAAAAAAADgAAIBCwEKAAA8AAAAWgAAAAAAABdEAAAAEAAA
  33. AFAAAAAAQAAAEAAAAAIAAAUAAQAAAAAABQABAAAAAAAA0AAAAAQAAAAAAAADAECB
  34. AAAQAAAQAAAAABAAABAAAAAAAAAQAAAAAAAAAAAAAACEXAAAeAAAAACwAAD4AQAA
  35. AAAAAAAAAAAAAAAAAAAAAADAAACYBgAAAFIAABwAAAAAAAAAAAAAAAAAAAAAAAAA
  36. AAAAAAAAAAAQWgAAQAAAAAAAAAAAAAAAAFAAANwBAAAAAAAAAAAAAAAAAAAAAAAA
  37. AAAAAAAAAAAudGV4dAAAADo6AAAAEAAAADwAAAAEAAAAAAAAAAAAAAAAAAAgAABg
  38. LnJkYXRhAABaFgAAAFAAAAAYAAAAQAAAAAAAAAAAAAAAAAAAQAAAQC5kYXRhAAAA
  39. 4DYAAABwAAAABAAAAFgAAAAAAAAAAAAAAAAAAEAAAMAucnNyYwAAAPgBAAAAsAAA
  40. AAIAAABcAAAAAAAAAAAAAAAAAABAAABALnJlbG9jAACABwAAAMAAAAAIAAAAXgAA
  41. AAAAAAAAAAAAAAAAQAAAQgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  42. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  43. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  44. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  45. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  46. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  47. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  48. AAAAAAAAAAAAAAAAAAAAAFWL7I1F+IPsCFD/FchQQACNTfhR/xXEUEAAi00Ig8QI
  49. g/kFdzL/JI1cEEAAi0AUBWwHAACL5V3Di0AQQIvlXcOLQAyL5V3Di0AIi+Vdw4tA
  50. BIvlXcOLAIvlXcOQLBBAADgQQABAEEAARxBAAE4QQABVEEAAzMzMzMzMzMzMzMzM
  51. VYvsVot1DFeLfQiF9n8SfAWD/wJzC1+4AQAAADPSXl3Di8eD6AGLzoPZAFFQ6M7/
  52. //+DxAhWV1JQ6LIvAABfXl3DzMzMzMzMzMzMzMzMzMxVi+yKVQiE0nUHuAEAAABd
  53. w4tNDIoBhMB0EY2bAAAAAEE60HTligGEwHX1M8Bdw8xVi+yLRQiFwHQVjZsAAAAA
  54. igiA+Ql0BYD5IHUDQOvxXcPMzMzMzMzMzMzMzMzMzMxVi+yLDRxzQACFyXQQjUkA
  55. igE8CXQEPCB1A0Hr84tFCFGLDfRyQABQUWhEVEAA/xXcUEAAg8BAUP8V2FBAAIPE
  56. FGoB/xXUUEAAzMzMzMzMzFWL7ItFDItVCFaL8IoAhMB0OYoKgPlhfA2A+Xp/CA++
  57. yYPpIOsDD77JPGF8DDx6fwgPvsCD6CDrAw++wDvIdQuKRgFGQoTAdcnrBYA+AHUc
  58. igqLRRCEyXQYgDgAdA6L/4oQQDrKdAqAOAB19DPAXl3DuAEAAABeXcPMzMzMzMzM
  59. VYvsVot1EIX2dQUzwF5dw4tNCFOLwVeNeAGNmwAAAACKEECE0nX5K8dobFRAAFGI
  60. VAj+/xXkUEAAix3gUEAAagFqQP/Ti00MiQFmixVoVEAAZokQig1qVEAAvwEAAACD
  61. xBCISAI7935HjaQkAAAAAGhsVEAAagD/FeRQQACL8IPECIX2dDFqAWpA/9OLVQyJ
  62. BLqDxAiLzovQjaQkAAAAAIoBiAJBQoTAdfZHO30QfMCLx19bXl3DO30QffRoVFRA
  63. AOhq/v//zMzMzMzMzMzMzFWL7FMzwFZXOUUMfmyNSQCLTRCLNIGKDot9CITJdDqQ
  64. iheA+mF8DYD6en8ID77Sg+og6wMPvtKNWZ8PvsmA+xl3A4PpIDvRdQuKTgFGR4TJ
  65. dc7rBYA+AHUaiheLTRSE0nQagDkAdAyKGUE603QOgDkAdfRAO0UMfJeDyP9fXltd
  66. w8zMzMzMzMzMzMzMzMzMzFWL7IPsGItFCNnuU90VcINAAIA4AFZXi/jHRfQAAAAA
  67. iX0IvnB7QAC5cH9AAMdF/HCDQAAPhJYCAACKB4sdGHBAADwgD4Q6AgAAPAkPhDIC
  68. AAAPvtCDwveD+nEPh/EBAAAPtpJkHUAA/ySVQB1AAMdF8BhwQACF2w+EGAIAAIvD
  69. iheJRfiKADrQdA0PvtgPvtKDwyA703ULhMB0B4tF+EdA692KBzxBfAw8Wn4EPGF8
  70. BDx6fgiLRfiAOAB0GItF8IPABIlF8IsAhcAPhMYBAACLfQjrq4tV8IM6AIl9CA+E
  71. sgEAAIoGZscBLiCDwQI8QXwOPFp/Ck6IAYoGQTxBffKLfQiB6hhwQABGwfoCgMJB
  72. iBbpZAEAAP9F9EaIBopHATwtdAg8Kw+FSwEAAGbHATAgg8EC6T4BAACKBv9N9Dwo
  73. dApOiAGKBkE8KHX2TuklAQAAgf5we0AAdBKKBjwodAyIAU5Bgf5we0AAde6KF0aI
  74. FukBAQAAigY8QXwOPFp/Ck6IAYoGQTxBffKKB0aIBunjAAAAigY8QXwEPFp+EDwl
  75. dAw8KnQIPC90BDxedb6IAUFO6+CLXQxLiV3wg/vuD4zeAAAAjRSdBAAAALjwcEAA
  76. K8KJReiLfQiF23kEiwDrBotVEIsEmolF+ItV+IoCihc60HQQD77YD77Sg8MgO9OL
  77. XfB1CoTAdAZH/0X469uKBzxBfAw8Wn4EPGF8BDx6fgiLRfiAOAB0EoNF6ARLiV3w
  78. g/vufG2LRejrm0+JfQiD++58X8YBOohZAcZBAiCDwQPrJTwwfAQ8OX4EPC51UIoH
  79. PDB8BDw5fgQ8LnUGiAFBR+vsT8YBIEFHiX0IgD8AD4W2/f//g330AHQwaFxWQADd
  80. 2Og6+///aEBWQADd2Ogu+///aCxWQADd2Ogi+///aBhWQADd2OgW+///gf5we0AA
  81. dA6KFogRTkGB/nB7QAB18sYBIIA9cH9AACDHRQhwf0AAD4TpBgAA3QUQVkAAi338
  82. 3QUIVkAAi10I2ejdBQBWQADdBfhVQADrLY2kJAAAAADdBRBWQADdBQhWQADZ6N0F
  83. AFZAAN0F+FVAANnu2c3ZzNnL2crZyYoLD77Bg8Dbg/g5D4e7BQAAD7aAXB5AAP8k
  84. hdgdQADd2t3Y3djd2N3Y3B/f4PbEQQ+EFAYAAN0F8FVAANwf3+D2xAUPiwEGAADd
  85. B+jKKQAAUOgU+f//iUUI20UIg8QEg8f43R/pxgUAAN3d3dnd2N3a3dnptQUAAN3a
  86. 3djd2N3Y3djcH9/g9sRBD4TFBQAA3QeDx/jZ+t0f6ZIFAADd2t3Y3djd2N3Y3B/f
  87. 4PbEQQ+EqgUAAN0Hg8f42ezZydnx3R/paQUAAN3a3djd2N3Y3djcH9/g9sRBD4SL
  88. BQAA3QeDx/jZ7dnJ2fHdH+lABQAA3d2Dx/jd2d3Y3drd2d3Y3UcI2f7dH+klBQAA
  89. 3d2Dx/jd2d3Y3drd2d3Y3UcI2f/dH+kKBQAA3d3d2d3Y3drd2d3Y3QfdBehVQADa
  90. 6d/g9sRED4ssBQAA3QeDx/jZ8t3Y3R/p2QQAAN3d3dnd2N3a3dnd2N0H6HUpAADd
  91. X/iDx/jpuwQAAN3d3dnd2N3a3dnd2N0H6FEpAADdX/iDx/jpnQQAAN3dg8f43dnd
  92. 2N3a3dnd2Nno3UcI2cnZ890f6X4EAADd3YPH+N3Z3djd2t3Z3E8I3A3gVUAA3R/p
  93. YQQAAN3dg8f43dnd2N3a3dnd2N1HCNnh3R/pRgQAAN3a3djd2N3Z2cncH9/g9sQB
  94. dQTcL+sC3AfoEygAAIlFCNtFCIPH+N0f6RgEAADd3d3Z3djd2t3Z3djdB9nh6O4n
  95. AACL8P8VzFBAAIvYjWQkAP8VVFFAAIXAdSP/FcxQQAArwzvGfOqLXQjHRej/////
  96. 20Xog8f43R/pyAMAAP8ViFBAAIP4YX0Dg8Agi10IiUXo20Xog8f43R/ppwMAAN3d
  97. g+wI3dnd2N3a3dnd2N0H3Rwk/xXsUEAA3V/4g8QIg8f46X8DAADd3YPH+N3Z3djd
  98. 2t3Z3djZ6txPCNnA2fzZydjh2fDZ6N7B2f3d2d0f6VIDAADd3d3Z3djd2t3Z3djd
  99. B+jiJwAA3V/4g8f46TQDAADd3d3Z3djd2t3Z3djdB+i+JwAA3V/4g8f46RYDAADd
  100. 3d3Z3djd2t3Z3djdB+iaJwAA3V/4g8f46fgCAADd3d3Y3dvd2N3Y3QfcyN7B2fqD
  101. x/jcRwjZ7dnJ2fHdH+nTAgAA3d3d2N3b3djd2N0H3Mje4evZ3d2Dx/jd2N3b3dnd
  102. RwjYwtnK3GcI3vrZ7dnJ2crZ8d7J3R/pmQIAAN3a3djd2N3Y3djcH9/g9sRBD4TP
  103. AgAA3QXYVUAA3B/f4PbEQXUq/xXoUEAAJf8DAIB5B0gNAPz//0CJRQjbRQiDx/jc
  104. DdBVQADdH+lJAgAA/xXoUEAA3QeL8OglJgAAi8iLxpn3+YPH+IlVCNtFCN0f6SMC
  105. AADd3d3Z3djd2t3Z3djdB+j7JQAAiUUI20UIg8f43R/pAAIAAN3a3djd2N3Y3djc
  106. H9/g9sRBD4RAAgAA3QfoAyYAAIvyi9iF9n8lfAWD+wJzHotdCMdF7AEAAADHRfAA
  107. AAAA323sg8f43R/ptQEAAIvTg+oBi8aD2ABQUuhf9f//g8QIVlNSUOhDJQAAi10I
  108. iUXsiVXw323sg8f43R/pggEAAN3dg8f43dnd2N3a3dnd2N1HCNwH3R/pZwEAAN3d
  109. g8f43dnd2N3a3dnd2N0H3GcI3R/pTAEAAN3dg8f43dnd2N3a3dnd2N1HCNwP3R/p
  110. MQEAAN3a3djd2N3Y3djdB9rp3+D2xEQPi3kBAACNd/iA+SV1It0H6PQkAADdBov4
  111. 6OskAACZ9/+L/olVCNtFCN0e6e4AAADdBtw3i/7dHunhAAAA3drd2N3Y3djd2N1H
  112. +NnB2unf4PbERHoT3B/f4PbEQXUMaKhVQADoIfX//93Y3Uf43QfoiSQAAN1f+IPH
  113. +OmfAAAAikMB3d3d2Q++yN3Y3drd2d3YhMB5GI0UzQgAAAC4OHFAACvC3QCDxwiD
  114. wwLrb4tVFN0EyoPHCIPDAuth3dvd24D5MHwhgPk5fxwPvsHZy4pLAdjKiUUIQ9tF
  115. CN7B2OHZy4D5MH3fgDsudSmKQwFDPDB8ITw5fx0PvsjZy4pDAdjKiU0IQ9tFCN7B
  116. 2OHZy9jKPDB9393ag8cI3dje+d0fQ4A7IIldCA+Fnvn//4vX3QKJffxfXluL5V3D
  117. aHxVQADoRvT//2hUVUAA6Dz0//9oLFVAAOgy9P//aABVQADoKPT//2joVEAA6B70
  118. //9orFRAAOgU9P//aIhUQADoCvT//2hwVEAA6AD0//+LVfzd2N0CX15bi+Vdw4v/
  119. 1xVAAPQUQAB3FEAAmRRAALIUQAAUFUAAzxNAANYUQACyFUAAAAAICAAICAgICAgI
  120. CAgICAgICAgICAgACAgICAEICAIDAQQIBAgBCAgICAgICAgICAUICAgICAgGBgYG
  121. BgYGBgYGBgYGBgYGBgYGBgYGBgYGBggICAcICAYGBgYGBgYGBgYGBgYGBgYGBgYG
  122. BgYGBgYGi/+UG0AAeRtAAEMbQABeG0AAJhxAALUWQAD/FkAADhdAADMXQABcF0AA
  123. hRdAAKAXQAC7F0AA7BdAAAoYQAAoGEAARxhAAGQYQAB/GEAArRhAAB4ZQABGGUAA
  124. cxlAAJEZQACvGUAAzRlAAPIZQAAEGkAALBpAAKIaQADFGkAA5BtAAGIcQAAAICAg
  125. IAECIAMgACAgICAgICAgICAEICAgICAgBQYHCAkKCwwNDg8QERITFBUWFxgZGhsc
  126. HR4gICAfzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzMzM
  127. VYvsg+wIU4tdCFbrA41JAIoLuFxYQACEyXUHuAEAAADrDooQQDrKdPKAOAB19DPA
  128. Q4XAdNuLRQiAODqJXfgPhfwBAACAeAE6dQpoMFhAAOgc8v//V4t9DE+D/+58Z40M
  129. vQQAAAC48HBAACvBiUX86wOLRfyLVQiF/3kEizDrBotFEIs0uIoKigY6yHQQD77Y
  130. D77Jg8MgO8uLXfh1CITAdARCRuvgihKA+iB0CoD6CXQFgPo9dQWAPgB0FINF/ARP
  131. g//ufaxoLFZAAOih8f//g//ufPGF/w+JPQEAAItVFItFEItNDFJQUYPO/1Mr9+it
  132. 8///3RT1OHFAAIPG/YPEEIP+BA+HNAEAAP8ktQwhQADZ7tjZ3+D2xEF0Ut0FKFhA
  133. ANjZ3+D2xAV7Q+jBIAAAixTFzHFAAI0ExchxQABS/xUkUEAAiw0gc0AAi/ChGHNA
  134. AFZQUf8VbFFAAFb/FShQQABfuAEAAABeW4vlXcNo2FdAAN3Y6Pfw///Z7tjZ3+D2
  135. xEF0E9wd0FdAAN/g9sRBD4WqAAAA6wLd2GiAV0AA6M3w///Z7tjZ3+D2xEF0E9wd
  136. KFhAAN/g9sRBD4WAAAAA6wLd2GgwV0AA6KPw///Z7tjZ3+D2xEF0D9wd8FVAAN/g
  137. 9sRBdVrrAt3YaOBWQADoffD//9nu2Nnf4PbEQXQP3B3YVkAA3+D2xEF1NOsC3dho
  138. iFZAAOhX8P//i3UUi1UQi0UMVlJQU+h18v//3Rz+g8QQX7gBAAAAXluL5V3D3dhf
  139. XrgBAAAAW4vlXcOQ0B9AADkgQABjIEAAjSBAALMgQABVi+xTVot1CIA+Old0Cmgs
  140. VkAA6Pjv//+LfRiLXRSL/4oOuGhYQACEyXQb6wONSQCKEEA6ynQPgDgAdfRfXrgB
  141. AAAAW13Di0UQi00MV1NQUVboSv3//4PEFIpOAUa4ZFhAAITJdA6KEEA6ynQHgDgA
  142. dfTr5YoOuGBYQACEyXQQkIoQQDrKdAiAOAB19Ebr5YA+AHWMX164AQAAAFtdw8zM
  143. VYvsUYN9GAB1CbgBAAAAi+Vdw4tFCFNWV4s95FBAAGhsVEAAUP/XaGxUQABqAIlF
  144. GP/XaGxUQABqAIvw/9eDxBiJRfyFwA+EiQAAAItdEItNDItVGGiEWEAAU1FS6K7w
  145. //+DxBCJRRiD+P91CmgsVkAA6Pnu//+LfRSLRQxXU1BW6Brx///oZR4AAItNDItV
  146. /FdTUVKL8OgE8f//g8Qg6EweAACL2ItFGN0Ex+g/HgAAK/N5EDPJO8MPnsFfXluL
  147. wYvlXcMz0jvDD53CX15bi8KL5V3DaGxYQADoke7//8xVi+xTi10IVrhoc0AAjUkA
  148. iguA+Ql0BYD5IHUDQ+vxigu+nFhAAITJdFWNmwAAAACKFkY6ynRIgD4AdfRXM/+Q
  149. igu+lFhAAITJD4SOAAAAkIoWRjrKD4SCAAAAgD4AdfAPvtGDwt+D+h13aQ+2kkQk
  150. QAD/JJUwJEAAD4qmAAAAXrgBAAAAW13Dg8cIQ+uyhf90BYP/CHUIZscALSiDwAKD
  151. xwRD65uF/3QFg/8IdQhmxwAtKIPAAoPHAkPrhIX/dAWD/wh1CGbHAC0og8ACR0Pp
  152. bP///4gIQEPpY////4tVFIP/CA+Uwf7JgOEpiAiLTQxSxkABAItFEFBRaGhzQADo
  153. vO///41H/4PEEF+D+At3c/8khWQkQADZ7trp3+D2xETpVP///14zwFtdw9nu3tnf
  154. 4PbEBelA////2e7e2d/g9sRBdeFeuAEAAABbXcPZ7t7Z3+D2xAF1zV64AQAAAFtd
  155. w9nu3tnf4PbEQekK////2e7a6d/g9sREe6teuAEAAABbXcNoiFhAAN3Y6AHt//+Q
  156. KCNAAEUjQABcI0AALiNAAHQjQAAABAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQB
  157. AgOL/7cjQADZI0AA7SNAAMsjQAABJEAADyRAACMkQAC3I0AADyRAAAEkQAAjJEAA
  158. 7SNAAMzMzMzMzMzMzMzMzFWL7FNWV4t9CGiEWEAAaIRwQABqA1eL9+gT7v//i9iD
  159. xBCD+/90CQ++szRUQAAD94t9GIoOuIRYQACEyXRBi/+KEEA6ynQ4gDgAdfSLRRSL
  160. TRCLVQxXUFFSVuih/f//g8QUhcCLw3Qag+gAD4R8AAAASHQcSF9euAEAAABbXcNG
  161. 67GD6AB0CUh0Y0h1YI1JAIoOuGRYQACEyXQU6wONSQCKEEA6ynQIgDgAdfRG6+GA
  162. PgB1DYvDg+gAdLpIdLdIdCyKDrigWEAAhMl0Ho1kJACKEEA6ynQTgDgAdfSAPgAP
  163. hU7///9fXltdw0br1F9eM8BbXcPMzMzMzMzMzMzMzMxVi+xTi10UVleLfQi+aHdA
  164. AIoPuJxYQACEyQ+E+gAAAIoQQDrKD4TvAAAAgDgAdfCA+Vx0eYD5e3QGiA5GR+vR
  165. ikcBR7loc0AAhMB0EY1JADx9dBRHiAGKB0GEwHXyaMxYQADoKOv//4A/AHTxi0UQ
  166. U8YBAItNDFBRaGhzQADoPe3//91cJAiDxAhoxFhAAFb/FQxRQACDxBCNpCQAAAAA
  167. ihZGhNJ1+U5H6WP///+KRwFHD77Ig8G+g/k7d1MPtokEJ0AA/ySN5CZAAMYGCEZH
  168. 6Tz////GBgBGR+ky////xgYNRkfpKP///8YGCkZH6R7////GBglGR+kU////iAZG
  169. R+kL////xgZcRkfpAf///2ioWEAA6Hbq//9mxwYKAP8V3FBAAIPAIFBoaHdAAP8V
  170. CFFAAIPECF9euAEAAABbXcONSQBrJkAAdSZAAIkmQAB/JkAAkyZAAKYmQACdJkAA
  171. sCZAAAAHBwEHBwcHBwcHBwIHBwcDBwQHBwcHBwcHBQcHBwcHAAcHAQcHBwcHBwcH
  172. AgcHBwMHBAcHBwcHBwYHBlWL7N0FSHFAANwN2FhAANnA2f7ZRQjZwN7K3QU4cUAA
  173. 3uLZyd0dOHFAANnJ2f/eydwtQHFAAN0dQHFAAF3DzMxVi+yD7Byh0HJAADPFiUX8
  174. 3UUMVot1CNnA2e7a6d/g9sREehbd2LgBAAAAXotN/DPN6MQZAACL5V3D3A3gWEAA
  175. agLdBThxQABW3AXockAA3QUAc0AA3CVAcUAA2cLZ/9nA2VXk2czZ/tnA2VXo2eDZ
  176. XezZzNld8NnA2MvY69nE2Mvewdld9NjJ3unZyt7J3unZXfj/FRxQQACNReRQVv8V
  177. IFBAAItN/DPNM8Be6EkZAACL5V3DzMzMzMzMzMzMzMxVi+xWi/GLRgRQxwY8VEAA
  178. 6DcXAAD2RQgBdAZW6DEXAACLxl5dwgQAzMzMzMzMzMxVi+yLRQhWV4s95FBAAGhs
  179. VEAAUDP2/9dobFRAAFb/14PEEIXAdDVTi10Y6wONSQCAOA10JotNFItVEFNRUlBG
  180. 6Kvq//+LRQxobFRAAN0c8GoA/9eDxBiFwHXVW1+NRgFeXcPMzMzMzMzMzMzMzMzM
  181. VYvsg+w8i00IU1ZXjUX8UDP2UYl1/OjfFgAAi1X8ix1EUEAAiUXsi0UMiVXoO8Z1
  182. BDP/6zJWVmr/UGoBVv/Ti/CNRDYBUP8V0FBAAItNDIPEBFaL+Fdq/1FqAWoA/9Mz
  183. 0maJFHcz9o1F8FBWV4l18OhbFgAA20UUi1XwjU0MUWoCagFR2RwkUolF9Il1DOiR
  184. FgAA3QVgcUAAiUXki0UMiUXg6CkXAADdBXBxQACNDMXIcUAA2X0OD7dFDg0ADAAA
  185. iUX8x0XcBgAAANlt/MdF1OxYQACJdRTbXfyKVfwPtsIPthHZbQ7B4AgLwg+2UQEP
  186. tkkCweAIC8LB4AiNVRQLwVJQ6O0VAACJRdzdBThxQACLRRTcBehyQACJRdiLRRDZ
  187. XfjdBQBzQADcJUBxQADZXfw7xnUEM//rMlZWav9QagFW/9OL8I1MNgFR/xXQUEAA
  188. i1UQg8QEVov4V2r/UmoBagD/0zPAZokEdzP2i03Y2UX4i0Xg2V3E2UX8UYtN6Nld
  189. yNnuVo1VxNlVzFLZXdBQav9XUeiGFQAAO8Z0A4lF7Is1KFBAAI1V1FL/1o1F4FD/
  190. 1o1N8FH/1o1V6FL/1otF2FDHRdQ8VEAA6N8UAACLTeBR6AYVAACLVfBS6PcUAACL
  191. RehQ6OIUAABfXluL5V3DzFWL7FFWi/GLTgSNRfxQUcdF/AAAAADoHxUAAIXAdAOJ
  192. RghqDOifFAAAhcB0F4t2CItN/IlwCMcAPFRAAIlIBF6L5V3Di1X8UjP26G0UAACL
  193. xl6L5V3DzMzMzMzMzMzMzFWL7IPsDItNCFeNRfxQUcdF/AAAAADojxQAAItVEItF
  194. /FJQi/johhQAANlFDItNHA+2EQ+2RRjB4AgLwg+2UQEPtkkCweAIC8KNVfRSagDB
  195. 4AhRC8HHRfQAAAAA2RwkUOgJFAAAiUX42UUw2e7a6d/g2UUk2UUg9sREe29W3dmN
  196. RRjd2FDHRRgAAAAA6AEUAADZRSSLdRhqAIPsCNlcJATZRSDZHCRW6PITAADZRTBq
  197. AFHZHCRW6N0TAADZRSRqANngg+wI2VwkBNlFINng2RwkVujHEwAAVlfo2BMAAFbo
  198. chMAANlFJNlFIF4PtkUUg+gAdHJIdDtID4WOAAAA2UUoi0303OmD7BDZRSzc69kF
  199. 9FhAANzK3snZXCQM2VwkCNnJ2VwkBNkcJFFX6JITAADrXtlFKItV9Nzpg+wQ2UUs
  200. 3OvZBfRYQADcyt7J2VwkDNlcJAjZydlcJATZHCRSV+hkEwAA6yrZRSyLRfSD7BDZ
  201. XCQM2UUo2VwkCNnJ2VwkBNkcJFBX6DITAADrBN3Z3diNTfRR/xUoUEAAi1X0UujR
  202. EgAAV+jREgAAX4vlXcPMzFWL7FGDPQBwQAAA3QU4cUAA2cDdBUBxQADZwN0FSHFA
  203. ANwN2FhAANnA2f7ZRQzZwN7K2cnextnN3RU4cUAA2cnZ/97N2czewtnJ3RVAcUAA
  204. dQ7d2DPA3drd2N3Yi+Vdw9nug+wU2VwkEN0FAHNAANnA3uLZydlcJAzdBehyQADZ
  205. wN7F2czZXCQI3uHZXCQE3sHZHCTdBWBxQADoMRMAAN0FcHFAAI0ExchxQADZfQ5Q
  206. D7dFDg0ADAAAiUX82W382138ik38D7bRUtltDmoA3QVocUAA6PcSAADdBVhxQABQ
  207. i0UIUdkcJFDoY/3//4PELLgBAAAAi+Vdw8zMzMzMzMxVi+yD7EBTVos14FBAAFcz
  208. wGoEakCJReSJRfT/1moBagiJRfj/1ov4agRqQIl98MZHAv//1moEakCJRez/1moE
  209. akCJRdD/1moEakCJRdz/1moEakCJRcz/1moBaAEEAACJRdj/1osdEFFAAIvwofhy
  210. QACJNRxzQACJReiKAIPEQIl1yITAD4SQDAAAi10Mi9frA4tV8It96Il94IvOPAp0
  211. GITAdAxHiAGKB0E8CnXy6wiAPwqJfeh1CYoHiAFBR4l96ItF5EDGAQCJReSj9HJA
  212. AIoGPAl0BDwgdQNG6/OKDoD5DQ+EGQwAAID5Cg+EEAwAAID5L3UYikYBOsEPhAAM
  213. AAA8KnUJxkIDAenzCwAAgPkqdQ+AfgEvdQnGQgMA6d8LAACKTgK4lFhAAIhN/4TJ
  214. D4QOAQAAighAOE3/D4QCAQAAgDgAde+LffCAPwAPhK8LAACAfwMBD4SlCwAAD7YG
  215. aEhZQABQ6IXh//+DxAiFwA+FjAsAAItF9ItV2IN8ggQAdBKAfwEAdQyKDoD5RXQF
  216. gPlldSeKTgGA+Ux0BYD5bHUaik3/gPlJdAWA+Wl1DYpOA4D5RnQNgPlmdAjHRIIE
  217. AAAAAIA+XQ+FEgEAAA++TwE7wQ+O2wAAAItV7Is8goX/eTeLRRCLTfhQUVNGVuiN
  218. 4///2cDZ7oPEENrp3+D2xER6BN3Y2eiLRRCNFP0AAAAAK8LcAN0Yi0X0i03MgzyB
  219. AHUGi1XoiRSBi03cixSBi03QiVXoixSBSIlV5IlF9Om+CgAAigY8VHQIPHQPhfX+
  220. //+KRgE8T3QIPG8Pheb+//+DxgKKBjwJdAQ8IHUDRuvzi1UIaJRYQABSVugg4f//
  221. g8QMhcB0IotF8ItN+FbGAAHGQAQBi0XkUFNRVuh/4f//g8QU6VkKAACLVfDGAgDp
  222. TgoAAItN3ItVzMcEgQAAAACLTezHBIIAAAAAxwSBAAAAAEjGRwEAiUX06SMKAABo
  223. lFhAAGgEcEAAagVW6P/h//+L+IPEEIP//w+EYAIAAA++lyxUQAAD1lLoEuD//4vw
  224. i0X0QIPEBIlF9IX/dUOLTeyLDIGJTdSD+QF9JYtVEItF+Gg4WUAAUlBTVuiA8///
  225. g8QUhcAPhTsBAACLTdSLRfSFyXVqi1XYxwSCAQAAAOteg/8BdS6LTeyLVfTbBJGL
  226. RRCLTfhQUd1dwFNW6P/h///cXcCDxBDf4PbEQQ+E9AAAAOsog/8CD4WEAAAAi1UQ
  227. i0X4aDhZQABSUFNW6A/z//+DxBSFwA+FygAAAItF9ItNzIs0gYX2D4SHAQAAi1Xs
  228. gzyCAH0Xi0X4iwyYUf8VEFFAAItF9IPEBEuJXQyLVdCLDIKLVcxJiU3ki03cxwSB
  229. AAAAAItN7McEggAAAADHBIEAAAAASIl16IlF9OnhCAAAg/8DdR6LTeyLVfSLBJGL
  230. TRCLVfhQUVJTVuih7///6W3///+D/wQPhXL///+LTdiDPIEAD4Rl////i1XsgzyC
  231. AQ+NWP///4tFEItN+Gg4WUAAUFFTVuhF8v//g8QUhcAPhDb///+LTdyLRfSDPIEA
  232. D4WnAAAAi1XgiRSBi03ki1XQSYkMgoP/A3V/aGxUQABW/xXkUEAAi/CDxAiF9g+E
  233. aggAAGoBakD/FeBQQACLffiDxAiJBJ+LzovQ6wONSQCKAYgCQUKEwHX2aGxUQABq
  234. AP8V5FBAAIPECIXAD4QsCAAAi3UQVldTUOhy4P//3Rzei03si1X0i8P32IPEEEOJ
  235. BJGJXQzp2AcAAIX/dAWD/wR1CotN2McEgQAAAACD/wMPhLwHAACLTeyLRfT/BIHp
  236. rgcAAItV8IhCAemjBwAAi0XwgHgBAA+**cAAIvGjVABighAhMl1+SvCg/**4R/
  237. BwAAaJRYQABokHBAAGoXVohMBv7oV9///4vQg8QQg/r/D4QcBwAAg/oIdQWDxgPr
  238. HQ++ihRUQAADzlHoYN3//4PEBIvwg/oWD4e7BwAA/ySV2DtAAItVEItF+FJQU1bo
  239. nN///9lcJAyLDRRzQACDxAxR6An5//+DxAjpAwcAAItVEItF+FJQU1boct///9lc
  240. JAyDxAzoRvP//+ngBgAAi00Qi1X4UVJTVuhS3///3C1IcUAAg8QQ3R1IcUAA6cAG
  241. AACLRRCLTfhQUVNW6C/f///cBUhxQACDxBDdHUhxQADpnQYAAMcFAHBAAAAAAADp
  242. jgYAAItN8IpBAjz/dBMPvtCJVdTGQQL/20XU3R1gcUAAxwUAcEAAAQAAAOliBgAA
  243. i0XwgHgC/w+FVQYAAN0FYHFAAOgYDAAA3QVQcUAAi03w3R1gcUAAiEEC6TMGAACL
  244. FQhzQABqAGoAUv8VXFFAANnu3RVIcUAA3RVAcUAA3R04cUAA6QkGAACLRRCLTfho
  245. LFlAAFBRU1bos/D//4PEFOntBQAAi1UQi0X4UlBTVuhc3v//g8QQ6KQLAACD+P8P
  246. hM0FAACLDMXMcUAAUf8VJFBAAIsVIHNAAIvwVlL/FRBQQADdBQBzQADcJUBxQABq
  247. AehqCwAA3QXockAA3AU4cUAAUOhYCwAAUKEgc0AAUP8VFFBAAN0FAHNAANwlQHFA
  248. AFDoOQsAAN0F6HJAANwFOHFAAFDoJwsAAIsNIHNAAFBR/xUAUEAAVv8VKFBAAOk/
  249. BQAAaGxUQABWizXkUEAA/9ZobFRAAGoAi/j/1mhsVEAAagCJRdT/1oPEGIXAD4SM
  250. BQAAi1UQi034UlFTUOh+3f//6MkKAACLVdRQoRRzQABSV1Do6PL//4PEIOniBAAA
  251. i00Qi1X4UVJTVuhR3f//2e7Y2YPEEN/g9sQFeifZff4Pt0X+DQAMAACJRdTZbdTf
  252. fcCLRcBQ2W3+/xVMUEAA6Z4EAADd2P8ViFBAAOmRBAAAi00Qi1X4UVJTVugA3f//
  253. 3VwkCKEgc0AAg8QIUOgO8f//g8QM6WgEAACDPWh7QAAAdTiLDSBzQAChGHNAAItQ
  254. DItACGggAMwAagBqAFGLDfxyQABSUGoAagBR/xUYUEAAxwVoe0AAAQAAAKEYc0AA
  255. ixX8ckAAi0gMaCAAzABqAGoAUotQCKEMc0AAUVJqAGoAUP8VGFBAAIsNDHNAAIkN
  256. FHNAAOnpAwAAoRhzQACLFQxzQACLSAyLNRhQQABoIADMAGoAagBSi1AIoSBzQABR
  257. UmoAagBQ/9aLDfxyQAChGHNAAItQDItACGggAMwAagBqAFGLDQxzQABSUGoAagBR
  258. /9bpiwMAAIsVIHNAAMcFaHtAAAAAAACJFRRzQADpcAMAAItFEItN+GgsWUAAUFFT
  259. Vuh62f//g8QEUOiR6f//g8QU6UsDAABobFRAAFaLNeRQQAD/1mhsVEAAagCL+P/W
  260. i/CDxBCF9g+EogMAAItVEItF+FJQU1folNv//9ld4ItNEItV+FFSU1bogtv//9lV
  261. 1IPEIIM9AHBAAAAPhKAAAADZ7oPsFNlcJBDdBQBzQADZwN7i2cnZXCQM2UXg3QXo
  262. ckAA3MHZydlcJAjZydwlQHFAANlcJATcBThxQADZHCTdBWBxQADodQgAAN0FcHFA
  263. AI0ExchxQADZff5QD7dF/g0ADAAAiUXE2W3E213Eik3ED7bRUtlt/moA3QVocUAA
  264. 6DsIAADdBVhxQABQoRRzQABR2RwkUOil8v//2UXUg8Qs2UXg3R04cUAA3R1AcUAA
  265. 6T0CAABobFRAAFaLNeRQQAD/1mhsVEAAagCJRcT/1mhsVEAAagCJRdT/1ovwg8QY
  266. hfYPhIcCAACLfRCLTfiLVcRXUVNS6Hba///ZXeCLRfiLTdRXUFNR6GTa///ZXdSL
  267. VfhXUlNW6FXa///ZXCQs2UXUg8Qc2VwkDNlF4NlcJAjdBQBzQADcJUBxQADZXCQE
  268. 3QXockAA3AU4cUAA2Rwk3QVgcUAA6GYHAADdBXBxQACNBMXIcUAA2X3+UA+3Rf4N
  269. AAwAAIlFxNltxNtdxIpNxA+20VLZbf5qAd0FaHFAAOgsBwAA3QVYcUAAUKEUc0AA
  270. UdkcJFDolvH//4PELOlAAQAAaGxUQABWizXkUEAA/9ZobFRAAGoAi/j/1mhsVEAA
  271. agCL2P/Wi/CDxBiF9g+EjAEAAItNEItV+ItFDFFSUFfoe9n//9ld4ItNEItV+It9
  272. DFFSV1PoZtn//9ld1ItFEItN+FBRV1boVNn//9lcJCzZRdSDxBzZXCQM2UXg2Vwk
  273. CN0FAHNAANwlQHFAANlcJATdBehyQADcBThxQADZHCTdBWBxQADoZQYAAN0FcHFA
  274. AI0UxchxQADZff4Pt0X+DQAMAACJRcRS2W3E213EikXED7bIUdlt/moC3QVocUAA
  275. 6CsGAADdBVhxQACLFRRzQABQUdkcJFLolPD//4PELIvf6z9qCGpA/xXgUEAAi034
  276. g8QIi/iLRRBXUFFTV1bore3//4PEFFBW6BPz//+DxAyFwA+EmwAAAFf/FRBRQACD
  277. xASLVeiKAot1yITAD4WA8///ix0QUUAAi33wgH8EAA+FnwAAAF9eM8Bbi+Vdw2hU
  278. VEAA6BjW//+LRfiLNRBRQABQ/9aLTfBR/9aLVexS/9aLRdBQ/9aLTdxR/9aLVdhS
  279. /9aLRchQ/9aDxBxfXrgBAAAAW4vlXcNqAP8V1FBAAGhsWEAA6MfV//9oIFlAAOi9
  280. 1f//i03IUeiE1f//i1Xkg8QEUFJo+FhAAP8V3FBAAIPAQFD/FdhQQACDxBBqAf8V
  281. 1FBAAItF+FD/01f/04tN7FH/04tV0FL/04tF3FD/04tN2FH/01b/04PEHF9euAEA
  282. AABbi+Vdw5C1M0AA3zNAAP8zQAAiNEAARTRAAFQ0QACANEAArzRAANk0QADANEAA
  283. GDtAAFc7QAD1NEAAozVAAAA2QABRNkAAejZAAPk2QABXN0AAcjdAAJc3QAClOEAA
  284. ojlAAMzMzMzMzMzMzMzMzFWL7IPsHIN9CAJ0If8V3FBAAIPAIFBowFlAAP8VCFFA
  285. AIPECLgBAAAAi+Vdw4tFDItIBFNXaLxZQABR/xUoUUAAi/gz24PECDv7dSH/FdxQ
  286. QACDwCBQaKRZQAD/FQhRQACDxAhfjUMCW4vlXcNWjVX4Umr1x0X4GQAAAIld/P8V
  287. UFBAAFD/FVRQQABqAlNX/xUkUUAAV/8VIFFAAFNTV4vw/xUkUUAAg8Qcgf4AABAA
  288. fiT/FdxQQACDwCBQaHxZQAD/FQhRQACDxAheX7gBAAAAW4vlXcOD/gp9JP8V3FBA
  289. AIPAIFBoVFlAAP8VCFFAAIPECF5fuAEAAABbi+Vdw41GA2oBUP8V4FBAAKP4ckAA
  290. xgQwDYsN+HJAAMZEMQEKixX4ckAAV2oBiFwyAqH4ckAAVlD/FRxRQABX/xUYUUAA
  291. U/8VyFBAAFD/FRRRQACDxCRTjU3kUY1V9FLHReQBAAAAiV3oiV3siV3w6GcCAAD/
  292. FUhQQABoWHNAAFCjCHNAAMcFGHNAAFhzQAD/FWhRQACLNRhzQACLRgiZK8LR+IlF
  293. CNtFCN0V6HJAAItGDJkrwtH4iUUI20UI3R0Ac0AA3QXYVUAA3MnZyeijAgAAiUYI
  294. 3A0Ac0AA6JUCAACLDRhzQACLNWRRQACJQQyLFQhzQABS/9aLDRhzQACLPQRQQACj
  295. IHNAAItRDItJCFJRUP/XixUgc0AAUFKJRfz/FRBQQABTiR3wckAA/9ZQ/xUIUEAA
  296. owxzQAChGHNAAItIDItQCKEgc0AAUVJQ/9eLDQxzQABQUYlFCP8VEFBAAFOJHRBz
  297. QAD/1lD/FQhQQACLDSBzQACj/HJAAKEYc0AAi1AMi0AIUlBR/9eLFfxyQACL8FZS
  298. /xUQUEAAaghqQP8V4FBAAIv4oSBzQABXagFoTFlAAKMUc0AA6Ofu//+LDfxyQACD
  299. xBRRU/8VYFFAAIsVDHNAAFJTix1gUUAA/9OhIHNAAIsNCHNAAFBR/9OLFfxyQACL
  300. HQxQQABS/9OhDHNAAFD/04sNIHNAAFH/01aLNShQQAD/1otVCFL/1otF/FD/1os1
  301. EFFAAFf/1osN+HJAAFH/1otV9IPECFLolAAAAF5fM8Bbi+Vdw8z/JbxRQAD/JbhR
  302. QAD/JbRRQAD/JbBRQAD/JaxRQAD/JahRQAD/JaRRQAD/JaBRQAD/JZxRQAD/JdRR
  303. QAD/JZRRQAD/JZBRQAD/JYxRQAD/JYhRQAD/JYRRQAD/JYBRQAD/JXxRQAD/JXhR
  304. QAD/JXRRQAD/JZhRQAD/JcBRQAD/JcRRQAD/JchRQAD/JcxRQAD/JdBRQADMzMzM
  305. i/9Vi+z2RQgCV4v5dCVWaApKQACNd/z/NmoMV+hFBAAA9kUIAXQHVujVAwAAWYvG
  306. XusU6LIJAAD2RQgBdAdX6L4DAABZi8dfXcIEAMzMzMyLRCQIi0wkEAvIi0wkDHUJ
  307. i0QkBPfhwhAAU/fhi9iLRCQI92QkFAPYi0QkCPfhA9NbwhAA/yXwUEAAzMzMzMzM
  308. gz3UpkAAAHQtVYvsg+wIg+T43Rwk8g8sBCTJw4M91KZAAAB0EYPsBNk8JFhmg+B/
  309. ZoP4f3TTVYvsg+wgg+Tw2cDZVCQY33wkEN9sJBCLVCQYi0QkEIXAdDze6YXSeR7Z
  310. HCSLDCSB8QAAAICBwf///3+D0ACLVCQUg9IA6yzZHCSLDCSBwf///3+D2ACLVCQU
  311. g9oA6xSLVCQU98L///9/dbjZXCQY2VwkGMnDzP8l9FBAAP8l+FBAAP8l/FBAAP8l
  312. AFFAAP8lBFFAADsN0HJAAHUC88PpcAMAAGg0R0AA6GQFAAChuKZAAMcEJISjQAD/
  313. NbSmQACjhKNAAGh0o0AAaHijQABocKNAAP8VNFFAAIPEFKOAo0AAhcB5CGoI6H4E
  314. AABZw2oQaOhbQADo4AYAADPbOR3YpkAAdQtTU2oBU/8VfFBAAIld/GShGAAAAItw
  315. BIld5L/IpkAAU1ZX/xVAUEAAO8N0GTvGdQgz9kaJdeTrEGjoAwAA/xVMUEAA69oz
  316. 9kahxKZAADvGdQpqH+gOBAAAWes7ocSmQACFwHUsiTXEpkAAaPhRQABo6FFAAOhP
  317. BgAAWVmFwHQXx0X8/v///7j/AAAA6d0AAACJNYyjQAChxKZAADvGdRto5FFAAGjc
  318. UUAA6BQGAABZWccFxKZAAAIAAAA5XeR1CFNX/xWAUEAAOR3cpkAAdBlo3KZAAOgt
  319. BQAAWYXAdApTagJT/xXcpkAAoXSjQACLDURRQACJAf81dKNAAP81eKNAAP81cKNA
  320. AOhK+f//g8QMo4ijQAA5HXyjQAB1N1D/FdRQQACLReyLCIsJiU3gUFHoPAQAAFlZ
  321. w4tl6ItF4KOIo0AAM9s5HXyjQAB1B1D/FTxRQAA5HYyjQAB1Bv8VOFFAAMdF/P7/
  322. //+hiKNAAOipBQAAw7hNWgAAZjkFAABAAHQEM8DrNaE8AEAAgbgAAEAAUEUAAHXr
  323. uQsBAABmOYgYAEAAdd2DuHQAQAAOdtQzyTmI6ABAAA+VwYvBagGjfKNAAP8VtFBA
  324. AFlq//8VeFBAAIsNwKZAAKPMpkAAo9CmQAChuFBAAIkIobxQQACLDbymQACJCOgr
  325. AwAA6H4FAACDPeRyQAAAdQxoZklAAP8VwFBAAFnoPAUAAIM94HJAAP91CWr//xVQ
  326. UUAAWTPAw+hNBQAA6bP9///M/yUsUUAAahRoCFxAAOiMBAAAg2X8AP9NEHg6i00I
  327. K00MiU0I/1UU6+2LReyJReSLReSLAIlF4ItF4IE4Y3Nt4HQLx0XcAAAAAItF3MPo
  328. kAUAAItl6MdF/P7////oggQAAMIQAGoMaChcQADoLgQAAINl5ACLdQyLxg+vRRAB
  329. RQiDZfwA/00QeAspdQiLTQj/VRTr8MdF5AEAAADHRfz+////6AgAAADoNwQAAMIQ
  330. AIN95AB1Ef91FP91EP91DP91COhA////w2oK/xV0UEAAo9SmQAAzwMOL/1WL7IHs
  331. KAMAAKOYpEAAiQ2UpEAAiRWQpEAAiR2MpEAAiTWIpEAAiT2EpEAAZowVsKRAAGaM
  332. DaSkQABmjB2ApEAAZowFfKRAAGaMJXikQABmjC10pEAAnI8FqKRAAItFAKOcpEAA
  333. i0UEo6CkQACNRQijrKRAAIuF4Pz//8cF6KNAAAEAAQChoKRAAKOco0AAxwWQo0AA
  334. CQQAwMcFlKNAAAEAAACh0HJAAImF2Pz//6HUckAAiYXc/P///xVgUEAAo+CjQABq
  335. AehKBAAAWWoA/xVkUEAAaAhaQAD/FWhQQACDPeCjQAAAdQhqAegmBAAAWWgJBADA
  336. /xVsUEAAUP8VcFBAAMnDi/9Vi+yLRQiLAIE4Y3Nt4HUqg3gQA3Uki0AUPSAFkxl0
  337. FT0hBZMZdA49IgWTGXQHPQBAmQF1BejJAwAAM8BdwgQAaP9FQAD/FWRQQAAzwMPM
  338. /yUwUUAAahRoSFxAAOheAgAA/zXQpkAAizVcUEAA/9aJReSD+P91DP91CP8VmFBA
  339. AFnrZGoI6JcDAABZg2X8AP810KZAAP/WiUXk/zXMpkAA/9aJReCNReBQjUXkUP91
  340. CIs1eFBAAP/WUOhdAwAAg8QMiUXc/3Xk/9aj0KZAAP914P/Wo8ymQADHRfz+////
  341. 6AkAAACLRdzoGAIAAMNqCOghAwAAWcOL/1WL7P91COhS////99gbwPfYWUhdw4v/
  342. VrjYW0AAvthbQABXi/g7xnMPiweFwHQC/9CDxwQ7/nLxX17Di/9WuOBbQAC+4FtA
  343. AFeL+DvGcw+LB4XAdAL/0IPHBDv+cvFfXsP/JUBRQACL/1WL7ItNCLhNWgAAZjkB
  344. dAQzwF3Di0E8A8GBOFBFAAB17zPSuQsBAABmOUgYD5TCi8Jdw8zMzMzMzMzMzMzM
  345. i/9Vi+yLRQiLSDwDyA+3QRRTVg+3cQYz0leNRAgYhfZ0G4t9DItIDDv5cgmLWAgD
  346. 2Tv7cgpCg8AoO9Zy6DPAX15bXcPMzMzMzMzMzMzMzMyL/1WL7Gr+aGhcQABoGUlA
  347. AGShAAAAAFCD7AhTVleh0HJAADFF+DPFUI1F8GSjAAAAAIll6MdF/AAAAABoAABA
  348. AOgq////g8QEhcB0VItFCC0AAEAAUGgAAEAA6FD///+DxAiFwHQ6i0Akwegf99CD
  349. 4AHHRfz+////i03wZIkNAAAAAFlfXluL5V3Di0Xsiwgz0oE5BQAAwA+UwovCw4tl
  350. 6MdF/P7///8zwItN8GSJDQAAAABZX15bi+Vdw/8lSFFAAP8lTFFAAMzMzMzMzMzM
  351. aBlJQABk/zUAAAAAi0QkEIlsJBCNbCQQK+BTVleh0HJAADFF/DPFUIll6P91+ItF
  352. /MdF/P7///+JRfiNRfBkowAAAADDi03wZIkNAAAAAFlfX15bi+VdUcOL/1WL7P91
  353. FP91EP91DP91CGh6QUAAaNByQADo7wAAAIPEGF3Di/9WaAAAAwBoAAABADP2Vujh
  354. AAAAg8QMhcB0ClZWVlZW6MoAAABewzPAw4v/VYvsg+wQodByQACDZfgAg2X8AFNX
  355. v07mQLu7AAD//zvHdA2Fw3QJ99Cj1HJAAOtlVo1F+FD/FTxQQACLdfwzdfj/FThQ
  356. QAAz8P8VNFBAADPw/xUwUEAAM/CNRfBQ/xVYUEAAi0X0M0XwM/A793UHvk/mQLvr
  357. EIXzdQyLxg0RRwAAweAQC/CJNdByQAD31ok11HJAAF5fW8nD/yWwUEAA/yWsUEAA
  358. /yWoUEAA/yWkUEAA/yWgUEAA/yWcUEAA/yWUUEAA/yWQUEAA/yWMUEAAAAAAAAAA
  359. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  360. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  361. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  362. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  363. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  364. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  365. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  366. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  367. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  368. AAAAAAAAAAAAAAAAAAAAAOJfAAAwYAAAGmAAAA5gAAD+XwAA8l8AANhfAADGXwAA
  369. sl8AAJ5fAACOXwAAAAAAAPBlAAAAZgAAFmYAACxmAADwZAAA2F4AAB5fAAAWXwAA
  370. Bl8AAO5eAADWZQAAxmUAALJlAACUZQAAeGUAAGRlAABQZQAANGUAACRlAAAOZQAA
  371. 2mQAAAAAAABGZgAAymQAALhkAACeZAAAlGQAAIxkAAB+ZAAAdGQAAF5kAAAoZAAA
  372. FGQAAAJkAAD4YwAA7GMAANhjAABIYgAAWGIAAGJiAABqYgAAdGIAAHxiAACGYgAA
  373. lGIAAJ5iAACoYgAAsGIAALhiAADCYgAAzGIAANZiAADgYgAA6mIAAPRiAAD8YgAA
  374. BmMAAA5jAAAWYwAAIGMAAChjAAAwYwAAOGMAAE5jAABeYwAAbGMAAHxjAACGYwAA
  375. jmMAAJxjAACoYwAAtGMAAMJjAABQZgAAAAAAAExfAABeXwAAal8AAHJfAABAXwAA
  376. AAAAALxhAACsYQAAlGEAAHxhAABoYQAAUmEAADxhAAAoYQAAFGEAANBhAADqYAAA
  377. ymAAALRgAACkYAAAkmAAAIZgAAB6YAAAaGAAAFRgAADiYQAA9GEAAAZiAAAYYgAA
  378. KmIAAAJhAAAAAAAAAAAAAIlBQAAAAAAAAAAAAF1DQADpREAAQUZAAAAAAAAAAAAA
  379. AAAAAIIyoVgAAAAAAgAAADgAAABYWgAAWEoAADpQRU45AAAAOlBFTjgAAAA6UEVO
  380. NwAAADpQRU42AAAAOlBFTjUAAAA6UEVONAAAADpQRU4zAAAAOlBFTjIAAAA6UEVO
  381. MQAAADpQRU4wAAAAOlBFTkEAAAA6UEVOUwAAADpQRU5DAAAAOlBFTlcAAAA6UEVO
  382. QgAAADpIRUFESU5HAAAAADpQRU5ZAAAAOlBFTlgAAABPUgAAQU5EAE5PVABFTElG
  383. AAAAAEZPUgBXSElMRQAAAFJFUEVBVAAASUYAAFJFQ1QAAAAAT1ZBTAAAAABTRVRY
  384. WQAAAE1BS0UAAAAATUVNT1VUAABNRU1TRUUAAE1FTVVTRQAAUk9URQAAAABXQUlU
  385. AAAAAFRFWFQAAAAARklMTAAAAABFWElUAAAAAFNUT1AAAAAASE0AAFBSAABDUwAA
  386. UEUAAFBEAABQVQAAUlQAAExUAABCSwAARkQAAEZBQ1QAAAAASU5UAFJBTkQAAAAA
  387. QVJDVEFOSABBUkNDT1NIAEFSQ1NJTkgAVEFOSAAAAABDT1NIAAAAAFNJTkgAAAAA
  388. RVhQAENFSUwAAAAAUkVBRAAAAABST1VORAAAAEFCUwBERUcAQVJDVEFOAABBUkND
  389. T1MAAEFSQ1NJTgAAVEFOAENPUwBTSU4ATE4AAExHAABTUVJUAAAAAFBJAABUSU1F
  390. AAAAAAICAgICAgICAgIEBAQEBAQEBAQEBQQEAAIGBQMEAAAAAwMCAJBaQABAKEAA
  391. 0CpAAFslZF06JXMgICAgJyVzCgBNaXNzaW5nIHBhcmFtZXRlcgAAADoKAAAgAAAA
  392. RGl2aXNvciBpcyB6ZXJvIGVycm9yAAAATmVnYXRpdmUgbnVtYmVycyBoYXZlIG5v
  393. IGZhY3RvcmlhbAAAQSBuZWdhdGl2ZSBudW1iZXIgY2FuIG5vdCBiZSB1c2VkIGFz
  394. IGEgcmFuZG9tIHVwcGVyIGJvdW5kAAAAVGhlIHBpLzIgaGFzIG5vIHRhbmdlbnQA
  395. TmVnYXRpdmUgbnVtYmVycyBoYXZlIG5vIG5hdHVyYWwgbG9nYXJpdGhtcwBOZWdh
  396. dGl2ZSBudW1iZXJzIGFyZSBub3QgbG9nYXJpdGhtaWMAAAAATmVnYXRpdmUgbnVt
  397. YmVycyBoYXZlIG5vIHNxdWFyZSByb290AAAAAFRoZSAndGltZShuKScgcmVxdWly
  398. ZXMgJ24nIGJldHdlZW4gMCB0byA1AAAARnVuY3Rpb24gcG93J3MgZGl2aXNvciBp
  399. cyB6ZXJvIGVycm9yAAAAAAAAAAAAAFA/AAAAAAAAAEAXbMEWbMF2PxgtRFT7Ifk/
  400. AAAAAAAAFEAAAAAAAABIQAAAAAAAACRAAAAAAAAA4D8YLURU+yEJQFVucmVjb2du
  401. aXplZCBudW1iZXIAVmFyaWFibGUgIG5vdCBleGlzdABVbnJlY29nbml6ZWQgbWF0
  402. aCBmdW5jdGlvbgAAVGhlIGJyYWNrZXRzICcoJyBvciAnKScgYXJlIG5vdCBjbG9z
  403. ZWQAAAAAAABUaGUgJzpQRU5BJyByZXByZXNlbnRzIHRoZSBhbHBoYSBvZiB0aGUg
  404. cGVuLCBhbmQgb25seSBiZSBiZXR3ZWVuIDAgdG8gMjU1AAAAAAAAAAAAAAAA4G9A
  405. VGhlICc6UEVOUycgcmVwcmVzZW50cyB0aGUgc21vb3RoIG9mIHRoZSBwZW4sIGFu
  406. ZCBvbmx5IGJlIGJldHdlZW4gMCB0byA1AAAAAAAAAABUaGUgJzpQRU5DJyByZXBy
  407. ZXNlbnRzIHRoZSBjb2xvciBvZiB0aGUgcGVuLCBhbmQgb25seSBiZSBiZXR3ZWVu
  408. IDAgdG8gMTUAAAAAAAAAAFRoZSAnOlBFTlcnIHJlcHJlc2VudHMgdGhlIHdpZHRo
  409. IG9mIHRoZSBwZW4sIGFuZCBvbmx5IGJlIGJldHdlZW4gMCB0byA5OQAAAAAAAAAA
  410. AAAAAADAWEBUaGUgJzpQRU5CJyByZXByZXNlbnRzIHRoZSBiYWNrZ3JvdW5kIGNv
  411. bG9yLCBhbmQgb25seSBiZSBiZXR3ZWVuIDAgdG8gMTUAAAAAAAAAAAAAAAAAAC5A
  412. VGhlIGxvb3AgdmFyaWFibGVzICc6OicgYXJlIG5vdCBhc3NpZ25hYmxlAAA9AAAA
  413. OgAAACAJAAA6AAAATmVlZHMgbW9yZSBwYXJhbWV0ZXJzAAAAIAkAAFdyb25nIGxv
  414. Z2ljACAJDQoAAAAADQoAACAJDQoAAAAAVW5pbnRlcnByZXRlZCBjaGFyYWN0ZXJz
  415. AAAAACUuMTJnAAAATWlzc2luZyAnfScA5JxSokbfkT/knFKiRt+RvyxbQABAKEAA
  416. 0CpAAAAAAEBbJWRdOlVuZGVmaW5lZCBwcm9jZWR1cmUgbmFtZSAgICAnJXMKAAAA
  417. RXJyb3IgbGluZQAAKCkrLSolLyAJDQoAKCkrLSovPjw9IAkNCgAAAA0KWwBNQUlO
  418. AAAAAEZpbGUgc2l6ZSBpcyB0b28gc21hbGwsICBpbiBvZiBtZW1vcnkuAABGaWxl
  419. IHNpemUgaXMgdG9vIGxhcmdlLCBvdXQgb2YgbWVtb3J5LgAARmFpbGVkIHRvIHJl
  420. YWQgZmlsZS4AAAAAcmIAAENPUFlSSUdIVEAyMDE3fjIwMTkgQlkgSEFQUFksIFZF
  421. UlNJT04gMy4wClVTQUdFOiBDTEdPIFtGSUxFXQoAAAB8W0AAIEBAAJCjQADoo0AA
  422. SAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  423. AAAAAAAAAAAAAAAA0HJAANBbQAABAAAAUlNEU614Yp0GrBZBt7VKVO1bUYUCAAAA
  424. RTpcbGlcZGVza1zmlrBcUmVsZWFzZVxDTEdPLnBkYgAAAAAAAAAAAAAAAABIckAA
  425. pFpAAAAAAAAAAAAAAgAAALRaQADAWkAA3FpAAAAAAABIckAAAQAAAAAAAAD/////
  426. AAAAAEAAAACkWkAAZHJAAAAAAAAEAAAA/////wAAAABAAAAA+FpAAAAAAAAAAAAA
  427. AQAAAAhbQAAQW0AAAAAAAGRyQAAAAAAAAAAAAP////8AAAAAQAAAAPhaQAAAAAAA
  428. AAAAAAAAAACIckAAQFtAAAAAAAAAAAAAAwAAAFBbQABgW0AAwFpAANxaQAAAAAAA
  429. iHJAAAIAAAAAAAAA/////wAAAABAAAAAQFtAAAAAAAAAAAAAAAAAALByQACQW0AA
  430. AAAAAAAAAAABAAAAoFtAAKhbQAAAAAAAsHJAAAAAAAAAAAAA/////wAAAABAAAAA
  431. kFtAAAAAAAAAAAAAAAAAABlJAAAAAAAAAAAAAAAAAAAAAAAAAAAAAP7///8AAAAA
  432. 0P///wAAAAD+////DUNAACFDQAAAAAAA/v///wAAAADM////AAAAAP7///9LREAA
  433. dERAAAAAAAD+////AAAAANT///8AAAAA/v///wAAAADRREAAAAAAAP7///8AAAAA
  434. zP///wAAAAD+////AAAAAO5GQAAAAAAA/v///wAAAADY////AAAAAP7///97SEAA
  435. jkhAACxdAAAAAAAAAAAAADJfAAAwUAAAWF4AAAAAAAAAAAAAgl8AAFxRAAD8XAAA
  436. AAAAAAAAAABKYAAAAFAAAHBeAAAAAAAAAAAAADxiAAB0UQAAhF0AAAAAAAAAAAAA
  437. QGMAAIhQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOJfAAAwYAAAGmAAAA5gAAD+XwAA
  438. 8l8AANhfAADGXwAAsl8AAJ5fAACOXwAAAAAAAPBlAAAAZgAAFmYAACxmAADwZAAA
  439. 2F4AAB5fAAAWXwAABl8AAO5eAADWZQAAxmUAALJlAACUZQAAeGUAAGRlAABQZQAA
  440. NGUAACRlAAAOZQAA2mQAAAAAAABGZgAAymQAALhkAACeZAAAlGQAAIxkAAB+ZAAA
  441. dGQAAF5kAAAoZAAAFGQAAAJkAAD4YwAA7GMAANhjAABIYgAAWGIAAGJiAABqYgAA
  442. dGIAAHxiAACGYgAAlGIAAJ5iAACoYgAAsGIAALhiAADCYgAAzGIAANZiAADgYgAA
  443. 6mIAAPRiAAD8YgAABmMAAA5jAAAWYwAAIGMAAChjAAAwYwAAOGMAAE5jAABeYwAA
  444. bGMAAHxjAACGYwAAjmMAAJxjAACoYwAAtGMAAMJjAABQZgAAAAAAAExfAABeXwAA
  445. al8AAHJfAABAXwAAAAAAALxhAACsYQAAlGEAAHxhAABoYQAAUmEAADxhAAAoYQAA
  446. FGEAANBhAADqYAAAymAAALRgAACkYAAAkmAAAIZgAAB6YAAAaGAAAFRgAADiYQAA
  447. 9GEAAAZiAAAYYgAAKmIAAAJhAAAAAAAAZwNNdWx0aUJ5dGVUb1dpZGVDaGFyAC8E
  448. U2V0Q29uc29sZUN1cnNvckluZm8AAGQCR2V0U3RkSGFuZGxlAACyBFNsZWVwALcB
  449. R2V0Q29uc29sZVdpbmRvdwAAS0VSTkVMMzIuZGxsAAD2AEZpbGxSZWN0AAC+AUlu
  450. dmFsaWRhdGVSZWN0AABlAlJlbGVhc2VEQwAhAUdldERDABQBR2V0Q2xpZW50UmVj
  451. dABVU0VSMzIuZGxsAADmAERlbGV0ZU9iamVjdAAAVABDcmVhdGVTb2xpZEJydXNo
  452. AACuAlNldFdvcmxkVHJhbnNmb3JtAI0CU2V0R3JhcGhpY3NNb2RlABMAQml0Qmx0
  453. AAA1AUV4dEZsb29kRmlsbAAABAJHZXRQaXhlbAAAdwJTZWxlY3RPYmplY3QAAOMA
  454. RGVsZXRlREMAADAAQ3JlYXRlQ29tcGF0aWJsZURDAAAvAENyZWF0ZUNvbXBhdGli
  455. bGVCaXRtYXAAAEdESTMyLmRsbACRAEdkaXBEZWxldGVNYXRyaXgAAIoAR2RpcERl
  456. bGV0ZUJydXNoAO0AR2RpcEZyZWUAACEAR2RpcEFsbG9jAHoAR2RpcENyZWF0ZVBl
  457. bjEAAJQAR2RpcERlbGV0ZVBlbgCQAEdkaXBEZWxldGVHcmFwaGljcwAAVwBHZGlw
  458. Q3JlYXRlRm9udEZhbWlseUZyb21OYW1lAACPAEdkaXBEZWxldGVGb250RmFtaWx5
  459. AACOAEdkaXBEZWxldGVGb250AABqAEdkaXBDcmVhdGVNYXRyaXgAAOgBR2RpcFJv
  460. dGF0ZU1hdHJpeAAAZgJHZGlwVHJhbnNsYXRlTWF0cml4AIIAR2RpcENyZWF0ZVNv
  461. bGlkRmlsbABbAEdkaXBDcmVhdGVGcm9tSERDAEkCR2RpcFNldFNtb290aGluZ01v
  462. ZGUAAFcCR2RpcFNldFdvcmxkVHJhbnNmb3JtALsAR2RpcERyYXdMaW5lAADEAEdk
  463. aXBEcmF3UmVjdGFuZ2xlAKwAR2RpcERyYXdFbGxpcHNlAMgAR2RpcERyYXdTdHJp
  464. bmcAAFYAR2RpcENyZWF0ZUZvbnQAADIAR2RpcENsb25lQnJ1c2gAAHQCR2RpcGx1
  465. c1NodXRkb3duAHUCR2RpcGx1c1N0YXJ0dXAAAGdkaXBsdXMuZGxsACEDX2xvY2Fs
  466. dGltZTY0AABxBF90aW1lNjQAbwVjbG9jawDEBW1hbGxvYwAAcwVleGl0AACDBWZw
  467. cmludGYAZQFfX2lvYl9mdW5jAABrBWNhbGxvYwAADAZzdHJ0b2sAAOEFcmFuZAAA
  468. bAVjZWlsAAAYAV9DSXBvdwAAHQFfQ0l0YW5oABMBX0NJY29zaAAaAV9DSXNpbmgA
  469. DgFfQ0lhY29zAA8BX0NJYXNpbgCGBWZwdXRzAO8Fc3ByaW50ZgCLBWZyZWUAAPIF
  470. c3JhbmQAdgVmY2xvc2UAAIkFZnJlYWQAkwVmdGVsbACRBWZzZWVrAIEFZm9wZW4A
  471. TVNWQ1IxMDAuZGxsAABlAD8/M0BZQVhQQVhAWgAAxQFfYW1zZ19leGl0AABjAV9f
  472. Z2V0bWFpbmFyZ3MA3AFfY2V4aXQAACoCX2V4aXQALQFfWGNwdEZpbHRlcgBkAV9f
  473. aW5pdGVudgCwAl9pbml0dGVybQCxAl9pbml0dGVybV9lAOwBX2NvbmZpZ3RocmVh
  474. ZGxvY2FsZQCiAV9fc2V0dXNlcm1hdGhlcnIAAOsBX2NvbW1vZGUAAEUCX2Ztb2Rl
  475. AACfAV9fc2V0X2FwcF90eXBlAAACAT90ZXJtaW5hdGVAQFlBWFhaAO4AP190eXBl
  476. X2luZm9fZHRvcl9pbnRlcm5hbF9tZXRob2RAdHlwZV9pbmZvQEBRQUVYWFoAAPsB
  477. X2NydF9kZWJ1Z2dlcl9ob29rAACNBF91bmxvY2sAWwFfX2RsbG9uZXhpdAAjA19s
  478. b2NrAMkDX29uZXhpdAAhAl9leGNlcHRfaGFuZGxlcjRfY29tbW9uALgCX2ludm9r
  479. ZV93YXRzb24AAO8BX2NvbnRyb2xmcF9zAADsAkludGVybG9ja2VkRXhjaGFuZ2UA
  480. 6QJJbnRlcmxvY2tlZENvbXBhcmVFeGNoYW5nZQAA0wJIZWFwU2V0SW5mb3JtYXRp
  481. b24AAOoARW5jb2RlUG9pbnRlcgAEA0lzUHJvY2Vzc29yRmVhdHVyZVByZXNlbnQA
  482. wARUZXJtaW5hdGVQcm9jZXNzAADAAUdldEN1cnJlbnRQcm9jZXNzANMEVW5oYW5k
  483. bGVkRXhjZXB0aW9uRmlsdGVyAAClBFNldFVuaGFuZGxlZEV4Y2VwdGlvbkZpbHRl
  484. cgAAA0lzRGVidWdnZXJQcmVzZW50AMoARGVjb2RlUG9pbnRlcgCnA1F1ZXJ5UGVy
  485. Zm9ybWFuY2VDb3VudGVyAJMCR2V0VGlja0NvdW50AADFAUdldEN1cnJlbnRUaHJl
  486. YWRJZAAAwQFHZXRDdXJyZW50UHJvY2Vzc0lkAHkCR2V0U3lzdGVtVGltZUFzRmls
  487. ZVRpbWUAhwJfZ2V0Y2gAABkDX2tiaGl0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  488. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  489. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  490. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  491. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  492. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  493. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  494. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  495. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  496. AAAAAAAAAAAAAAAAAAAAAAEAAADYUkAA0FJAAMhSQADEUkAAvFJAAAxUQAAIVEAA
  497. AFRAAPxTQAD4U0AA9FNAAPBTQADsU0AA5FNAANxTQADUU0AA0FNAAMxTQADEU0AA
  498. vFNAALRTQACwU0AAqFNAAKBTQACYU0AAkFNAAIhTQACAU0AAeFNAAHRTQABsU0AA
  499. AAAAALhSQAC0UkAAsFJAAGhTQABkU0AAYFNAAFxTQABYU0AAVFNAAFBTQABMU0AA
  500. SFNAAERTQAA8U0AANFNAACxTQAAkU0AAHFNAABRTQAAMU0AABFNAAPxSQAD0UkAA
  501. 7FJAAORSQADcUkAAAAAAAKhSQACgUkAAlFJAAIxSQACEUkAAfFJAAHRSQABsUkAA
  502. ZFJAAFxSQABUUkAATFJAAERSQAA8UkAANFJAACxSQAAkUkAAHFJAAAAAAAAAAAAA
  503. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8D8AAAAAAAAuQAAAAAAAAAAA
  504. AAAAAADgb0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  505. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  506. AAD/AAAA/wAA/wAAAP8AAAD//wAA//8A/wAAAP8AAADugu4A7oLuAKUqKgClKioA
  507. 09PTANPT0wCpqakAqampAK3Y5gCt2OYAkO6QAJDukADg//8A4P//APgdOAD4HTgA
  508. /wD/AP8A/wD//wAA//8AAP///wD///8ABFpAAAAAAAAuP0FWQnJ1c2hAR2RpcGx1
  509. c0BAAARaQAAAAAAALj9BVkdkaXBsdXNCYXNlQEdkaXBsdXNAQAAAAARaQAAAAAAA
  510. Lj9BVlNvbGlkQnJ1c2hAR2RpcGx1c0BAAAAAAAAAAAAEWkAAAAAAAC4/QVZ0eXBl
  511. X2luZm9AQAAAAAAAAAAAAE7mQLuxGb9E///////////+////AQAAAAAAAAAAAAAA
  512. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  513. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  514. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  515. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  516. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  517. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEA
  518. GAAAABgAAIAAAAAAAAAAAAAAAAAAAAEAAQAAADAAAIAAAAAAAAAAAAAAAAAAAAEA
  519. CQQAAEgAAABgsAAAlgEAAAAAAAAAAAAAAAAAAAAAAADvu788P3htbCB2ZXJzaW9u
  520. PSIxLjAiIGVuY29kaW5nPSJVVEYtOCIgc3RhbmRhbG9uZT0ieWVzIj8+DQo8YXNz
  521. ZW1ibHkgeG1sbnM9InVybjpzY2hlbWFzLW1pY3Jvc29mdC1jb206YXNtLnYxIiBt
  522. YW5pZmVzdFZlcnNpb249IjEuMCI+DQogIDx0cnVzdEluZm8geG1sbnM9InVybjpz
  523. Y2hlbWFzLW1pY3Jvc29mdC1jb206YXNtLnYzIj4NCiAgICA8c2VjdXJpdHk+DQog
  524. ICAgICA8cmVxdWVzdGVkUHJpdmlsZWdlcz4NCiAgICAgICAgPHJlcXVlc3RlZEV4
  525. ZWN1dGlvbkxldmVsIGxldmVsPSJhc0ludm9rZXIiIHVpQWNjZXNzPSJmYWxzZSI+
  526. PC9yZXF1ZXN0ZWRFeGVjdXRpb25MZXZlbD4NCiAgICAgIDwvcmVxdWVzdGVkUHJp
  527. dmlsZWdlcz4NCiAgICA8L3NlY3VyaXR5Pg0KICA8L3RydXN0SW5mbz4NCjwvYXNz
  528. ZW1ibHk+AAAAAAAAAAAAAAAQAAAEAQAADDAWMCgwXDBgMGQwaDBsMHAwNTFTMVox
  529. YDFqMXUxKjI1MjsyTTJWMnEyeTK9Mm4zhDOJM5AznjPEM8sz0jNlNLQ0xjQsNes1
  530. 9zUDNg82HDYqNjU2PTZJNlI2XTZjNnI2eDaANoY2qjaxNs42yzdZOMY40jjcOP84
  531. NDlFOlQ6cTp+OgY8RDzhPOs89Tz/PAk9Ez0dPSc9QD1EPUg9TD1QPVQ9WD1cPWA9
  532. 2D3cPeA95D3oPew98D30Pfg9/D0APgQ+CD4MPhA+FD4YPhw+ID4kPig+LD4wPjQ+
  533. OD48PkA+RD5IPkw+UD5UPlg+0z4LPyY/hj+2P8w/3T/yP/k/ACAAACABAAAAMAYw
  534. DTAWMB0wLjBGMFowcDCEMJowqjDAMNAwDDEQMRQxGDEcMS8xQzF+MZcx2zHgMegx
  535. 9DEWMi4yljKpMsIy4zIOMxUzmzOzMyQ0MDQ0NDg0PDRANGQ0aDRsNHA0dDR4NHw0
  536. gDSENIg0jDSQNKo0rzTKNNY0MzVkNa01tDXlNf81GjYrNjI2YDZnNrE2wTbKNtA2
  537. 5DboNuw28Db0Nvg2/DYAN0U3SzdcN2Y3cjd4N4c3vDfEN8s30TfXNxU4IDhMOHo4
  538. fziJOLk4ADkoOXU5iTmQObA57Dn1OQQ6CjosOoE6pDoIO0A8dDzGPOY87Tz1PP08
  539. Az0aPSw9Sz1bPXY9gT2IPbA9uz3qPUc+Tj5UPq0+Bz9BPwAAADAAABACAABVMMAw
  540. xTDiMBMxhDG/MU4yjDKTMqoyyzLTMmQzaTOUM7EzyjMQNBk0MzQ8NEc0bTRzNI80
  541. mjSjNLE0vDTENMo00DTgNBg1HzUlNS81NTU7NUg1TjVaNWE1ZzVtNXk1fzWLNZM1
  542. mjWkNas1sjW9New1OzZINmU2fDaFNoo2oDatNrM2vDbCNtc25DbqNvA2+jYANwk3
  543. GzcqNy83RTdZN183aTd5N5g3nzemN+Y3/DcPOB84KTgyOD04RDhsOHc4fTiWOJw4
  544. pjitOLQ4wDgiOSg5Mjk4OUE5TDlTOXs5hjmMOaM5qjmxObw5IzopOjM6OTpCOk06
  545. VDp8Ooc6jTqpOts69DoPOx07WztgO2o7hTuLO5U7oDvYO9w74DvkO+g77DvwO/Q7
  546. +Dv8OwA8BDwIPAw8EDwUPBg8HDwgPCQ8KDwsPDA8TjxXPF08djx9PI48lzydPMA8
  547. xzzRPNg84zz0PP08Az0dPSY9LD1HPUw9Vj1hPW09dT18PYM9ij2xPbY9vD3CPcY9
  548. zD3SPeY9+j0APhI+HT4jPiw+NT47PkA+UT5cPmM+bD5xPnY+gT6MPpc+nj6nPq0+
  549. sj63Psg+0j7cPuM+6z7wPvs+Bj8MPxQ/Gz8hPys/MT85P0I/TD9gP2k/iD+OP5Q/
  550. mj+gP6Y/rD+yP7g/vj/EP8o/0D/WP9w/4j/oP+4/9D/6PwAAAEAAAEwBAAAAMAYw
  551. DDASMBgwMDCmMLIwzjBeMWQxajFwMXYxfDGKMZQxmzGhMaYxqzGwMbUxuzHDMdcx
  552. 5DHxMQUyDjIpMjMyRjJQMlUyWjJ8MoEyijKPMpwyrTKzMroyzjLTMtky4TLnMu0y
  553. +jIAMwkzKDMwMzkzPzNHM1MzZTNwM3YziDOQM5szpzOtM7YzvDPBM8YzyzPSM9gz
  554. 6jPyM/gzBDQPNCQ0KzSJNO008jQFNQs1ETUXNR01IzUqNTE1ODU/NUY1TTVUNVw1
  555. ZDVsNXg1gTWGNYw1ljWfNao1tjW7Ncs10DXWNdw18jX5NUI2SDZSNlk2ZDZqNn02
  556. kjadNrM2yzbVNhI3Fzc4Nz03XDf4N/03DzgtOEE4RziuOLQ4wTjeOCs5MDlyOZU5
  557. ojmuObY5vjnKOfM5+zkGOgw6EjoYOh46JDoqOjA6NjoAUAAAcAAAAOAx7DHwMfQx
  558. ODQ8NEA06DjsOPA4ADoEOgg6DDpMOlA6nDqgOrA6tDq4OsA62DrcOvQ6BDsIOxA7
  559. KDs4Ozw7TDtQO1Q7WDtgO3g7iDuMO5w7oDuoO8A7/DsAPBw8IDxAPGA8fDyAPAAA
  560. AHAAAKgAAAAEMAgwDDAQMBQwGDAcMCAwJDAoMCwwMDA0MDgwPDBAMEQwSDBMMFAw
  561. VDBYMFwwYDBkMGgwbDBwMHQweDB8MIQwiDCMMJAwlDCYMJwwoDCkMKgwrDCwMLQw
  562. uDC8MMAwxDDIMMww0DDUMNgw3DDgMOQw6DDwMPQw+DD8MAAxBDEIMQwxEDEUMRgx
  563. HDEgMSQxKDEsMTAxNDFIMmQyiDKwMgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  564. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  565. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  566. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  567. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  568. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  569. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  570. AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
  571. -----END BASE64-----
复制代码





欢迎光临 批处理之家 (http://www.bathome.net/) Powered by Discuz! 7.2