Dateien hochladen nach „“

This commit is contained in:
Mario Voigt 2019-11-17 21:17:11 +01:00
parent 5cf9d87806
commit 4b217fb1ee
5 changed files with 2648 additions and 0 deletions

649
1602.c Normal file
View File

@ -0,0 +1,649 @@
//==========================================================================
// LCR表驱动程序 V1.0
// xjw01 于莆田 2011.10
//==========================================================================
//==========================================================================
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
#include <reg52.h>
#include <math.h>
//==========================================================================
// 项目LCD1602 四线驱动程序
// 设计要点:
// LCD1602 的运行速度慢,而单片机运行的速度快,因此容易因为速度不
// 匹配造成调试失败。因此调试之前应准确测试lcd_delay() 延时函数
// 准确的延时量,如果不能满足注释中的要求,则应调整循次数。每步操
// 作所需的延时量,按照数据手册指标指行,同时留下足够的时间余量。
// 硬件连接:
// 至少需要9条线电源线2条7条信号线。信号线详见程序中的接口定义。
// 清注意对LCD1602比对的调节否则无显示。
// 设计:许剑伟,于莆田,2010.12
//==========================================================================
sbit lcd_RS = P0^6; //数据命令控制位,0命令1数据
sbit lcd_RW = P0^5; //读写位,0写1读
sbit lcd_EN = P0^4; //使能位,下降沿触发
sbit lcd_D4 = P0^3; //数据端口D4
sbit lcd_D5 = P0^2; //数据端口D5
sbit lcd_D6 = P0^1; //数据端口D6
sbit lcd_D7 = P0^0; //数据端口D7
//==========================================================================
void lcd_delay(int n){ //LCD专用延时函数
//32MHz钟频下约循环3000次延迟1毫秒
int i,j;
if(n<0) { for(i=0;i< 30;i++); return; } //10us
if(n== 0) { for(i=0;i<150;i++); return; } //50us
for(;n;n--){ for (j=0;j<3000;j++); } //n毫秒
}
//==========================================================================
void lcd_B(char f, uchar c, char t){ //控制四线式接口LCD的7个脚
//f=0写命令字, f=1写RAM数据, f=2读RAM数据, f=3读RAM数据
lcd_EN = 0;
lcd_RS = f%2;
lcd_RW = f/2%2;
//移入高四位
lcd_D4 = c & 16;
lcd_D5 = c & 32;
lcd_D6 = c & 64;
lcd_D7 = c & 128;
lcd_EN = 1; lcd_delay(-1); lcd_EN = 0; //使能脉冲
if(f==4) { lcd_delay(t); return; }
//移入低四位
lcd_D4 = c & 1;
lcd_D5 = c & 2;
lcd_D6 = c & 4;
lcd_D7 = c & 8;
lcd_EN = 1; lcd_delay(-1); lcd_EN = 0; //使能脉冲
lcd_delay(t); //不同的命令,响应时间不同,清零命令需要2ms
}
//==========================================================================
void lcd_init(){ //LCD1602 初始化
//启动四线模式须势行9个步骤初始化所须耗时较长约65ms时限不可减
lcd_delay(20); //启动lcd之前须延时大于15ms直到VDD大于4.5V
lcd_B(4, 0x30, 9); //置8线模式,须延时大于4.1ms
lcd_B(4, 0x30, 5); //置8线模式,须延时大于100us
lcd_B(4, 0x30, 5); //置8线模式,手册中未指定延时
lcd_B(4, 0x20, 5); //进入四线模式
lcd_B(0, 0x28, 5); //四线模式双行显示
lcd_B(0, 0x0C, 5); //打开显示器
lcd_B(0, 0x80, 5); //RAM指针定位
lcd_B(0, 0x01, 5); //启动清屏命初始化LCD
}
//==========================================================================
//=========================几个功能常用函数=================================
void lcd_cls() { lcd_B(0, 0x01+0, 2); } //清屏
void lcd_cur0() { lcd_B(0, 0x0C+0, 0); } //隐藏光标
void lcd_goto1(uchar x){ lcd_B(0, 0x80+x, 0); } //设置DDRAM地址,第1行x位
void lcd_goto2(uchar x){ lcd_B(0, 0xC0+x, 0); } //设置DDRAM地址,第2行x位
void lcd_putc(uchar d) { lcd_B(1, 0x00+d, 0); } //字符输出
void lcd_puts(uchar *s){ for(; *s; s++) lcd_B(1,*s,0); } //字串输出
//==========================================================================
//===============================延时函数===================================
void delay(uint loop) { uint i; for(i=0;i<loop;i++); } //延时函数
void delay2(uint k) { for(;k>0;k--) delay(10000); } //长延时,k=100大约对应1秒
//==========================================================================
//=================================AD转换===================================
sfr P1ASF = 0x9D; //将P1置为模拟口寄存器(使能),各位中为1的有效
sfr ADC_CONTR = 0xBC; //A/D转换控制寄存器
sfr ADC_res = 0xBD; //A/D转换结果寄存器
sfr ADC_resl = 0xBE; //A/D转换结果寄存器
void set_channel(char channel){
P1ASF = 1<<channel;
ADC_CONTR = channel+128; //最高位是电源开关,低3位通道选择
delay(1); //首次打开电源应延迟,使输入稳定
}
uint getAD2(){
ADC_CONTR |= 0x08; //00001000,置ADC_START=1启动A/D 转换
while ( !(ADC_CONTR & 0x10) ); //等待A/D转换结束(ADC_FLAG==0)
ADC_CONTR &= 0xE7; //11100111,置ADC_FLAG=0清除结束标记, 置ADC_START=0关闭A/D 转换
return ADC_res*4 + ADC_resl;
}
/*
uchar get_AD(){
ADC_CONTR |= 0x08; //00001000,置ADC_START=1启动A/D 转换
while( !(ADC_CONTR & 0x10) ); //等待A/D转换结束(ADC_FLAG==0)
ADC_CONTR &= 0xE7; //11100111,置ADC_FLAG=0清除结束标记, 置ADC_START=0关闭A/D 转换
return ADC_res;
}
*/
uint getAD10() reentrant { //10次采样
char i;
uint c = 0;
for(i=0;i<10;i++) c += getAD2();
return c;
}
//==========================================================================
//==================================EEPROW偏程==============================
sfr IAP_data = 0xC2;
sfr IAP_addrH = 0xC3;
sfr IAP_addrL = 0xC4;
sfr IAP_cmd = 0xC5;
sfr IAP_trig = 0xC6;
sfr IAP_contr = 0xC7;
/********************
1001使01
*********************/
void saEEP(){ //EEP保护
IAP_cmd = 0; //关闭令,保护
IAP_contr = 0; //关EEPROM保护
IAP_trig = 0;
IAP_addrL = 255; //设置读取地址的低字节,地址改变才需要设置
IAP_addrH = 255; //设置读取地址的高字节,地址改变才需要设置
}
uchar readEEP(uint k){ //读取
IAP_addrL = k; //设置读取地址的低字节,地址改变才需要设置
IAP_addrH = k>>8; //设置读取地址的高字节,地址改变才需要设置
IAP_contr = 0x81; //设置等待时间1MHz以下取72M以下取63M取56M取412M取320M取224M取130M取0前导1表示许档IAP
IAP_cmd = 1; //读取值1写取2擦除取3擦除时按所在字节整个扇区撺除
IAP_trig = 0x5A; //先送5A
IAP_trig = 0xA5; //先送5A再送A5立即触发
saEEP(); //保护
return IAP_data;
}
void writeEEP(uint k, uchar da){ //写入
IAP_data = da; //传入数据
IAP_addrL = k; //设置读取地址的低字节,地址改变才需要设置
IAP_addrH = k>>8; //设置读取地址的高字节,地址改变才需要设置
IAP_contr = 0x81; //设置等待时间1MHz以下取72M以下取63M取56M取412M取320M取224M取130M取0前导1表示许档IAP
IAP_cmd = 2; //读取值1写取2擦除取3擦除时按所在字节整个扇区撺除
IAP_trig = 0x5A; //先送5A
IAP_trig = 0xA5; //先送5A再送A5立即触发
saEEP(); //保护
}
void eraseEEP(uint k){ //擦除
IAP_addrL = k; //设置读取地址的低字节,地址改变才需要设置
IAP_addrH = k>>8; //设置读取地址的高字节,地址改变才需要设置
IAP_contr = 0x81; //设置等待时间1MHz以下取72M以下取63M取56M取412M取320M取224M取130M取0前导1表示许档IAP
IAP_cmd = 3; //读取值1写取2擦除取3擦除时按所在字节整个扇区撺除
IAP_trig = 0x5A; //先送5A
IAP_trig = 0xA5; //先送5A再送A5立即触发
saEEP(); //保护
}
xdata struct Ida{
char zo[3];//三个频率下的零点改正值
char j1; //相位补偿(3倍档)
char j2; //相位补偿(10倍档)
char J[4]; //相位补偿(V/I变换器)
char R[4]; //下臂电阻修正(20,1k,10k,100k)
char g1; //增益修正(3倍档)
char g2; //增益修正(10倍档)
} cs;
void cs_RW(char rw){
uchar i,*p = &cs;
if(rw){
eraseEEP(0);
for(i=0;i<sizeof(cs);i++) writeEEP(i,p[i]);
}else{
for(i=0;i<sizeof(cs);i++) p[i]=readEEP(i);
}
}
//==========================================================================
//==================================LCR主程序===============================
//==========================================================================
sfr P1M1=0x91; //P1端口设置寄存器
sfr P1M0=0x92; //P1端口设置寄存器
sfr P0M1=0x93; //P0端口设置寄存器
sfr P0M0=0x94; //P0端口设置寄存器
sfr P2M1=0x95; //P2端口设置寄存器
sfr P2M0=0x96; //P2端口设置寄存器
sfr P3M1=0xB1; //P3端口设置寄存器
sfr P3M0=0xB2; //P3端口设置寄存器
sbit spk=P2^3; //蜂鸣器
sbit Kb=P2^1; //量程开关B
sbit Ka=P2^2; //量程开关A
sbit DDS2=P1^2;//移相方波输出口
sbit K3=P1^7;
sbit K4=P1^6;
sbit K5=P1^5; //7.8kHz滤波开关
sbit K6=P1^4;
sbit K8=P2^0; //100Hz滤波开关
xdata uchar menu=1,menu2=0; //菜单变量
//==============字符显示函数====================
#define digW 4 //数字显示位数宏
void lcd_putp(float a,float b,char bo,char n, float qmin){ //带单位显示复数,n是单位下限,qmin是最小位权值(用于限定有效数字)
code uchar dwB[] = {'p','n','u','m','o','k','M','G'}; //单位表
char i,j, c=0, h=digW-1, fh[2]={' ','+'};
long d,q,Q=1; //D最高位权
float f,g=1;
if(a<0) fh[0] = '-', a = -a;
if(b<0) fh[1] = '-', b = -b;
if(a>b) f = a; else f = b;
if(qmin) {
a += qmin/2, a -= fmod(a,qmin)-qmin/1000;
b += qmin/2; b -= fmod(b,qmin)-qmin/1000;
}
for(i=1;i<digW;i++) Q *= 10;
for(i=0;i<3;i++){ if(f*g >= 1000) g/=1000, c++; } //以3位为单位移动小数点,右移
for(i=0;i<n;i++){ if(f*g < 1) g*=1000, c--; } //以3位为单位移动小数点,左移
for(i=1;i<digW && f*g<Q;i++) g*=10,h--; //继续移动小数点,使之满字
for(i=0;i<2;i++){
if(i) d = b*g; //取出实部
else d = a*g; //取出虚部
q = Q;
lcd_putc(fh[i]); //显示符号
for(j=0; j<digW; j++){ //数字输出
lcd_putc(d/q+48); //数字
if(j==h) lcd_putc('.');//小数点
d %= q, q /= 10;
}
if(!bo) break; //不显示虚部
}
lcd_putc(dwB[c+4]); //单位
}
void lcd_putf(float a, char n, float qmin) //带单位显示浮点数,n是单位下限
{ lcd_putp(a,0,0,n,qmin); }
void lcd_int(uint a,char w){ //定宽显示正整数
char i=0, s[5] = {' ',' ',' ',' ',' '};
for(;a;i++){ s[i] = a%10+48, a /= 10; }
for(;w;w--) lcd_putc(s[w-1]);
}
//==============低频信号DDS====================
//PCA相关寄存器
sfr CMOD = 0xD9; //钟源选择控制等
sfr CH = 0xF9; //PCA的计数器
sfr CL = 0xE9; //PCA的计数器
sfr CCON = 0xD8; //PCA控制寄存器
sfr CCPAM0 = 0xDA; //PCA模块0工作模式寄存器
sfr CCPAM1 = 0xDB; //PCA模块1工作模式寄存器
sfr CCAP0L = 0xEA; //模块0捕获寄存器低位
sfr CCAP0H = 0xFA; //模块0捕获寄存器高位
sbit PPCA = IP^7; //PCA的中断优先级设置
sbit CCF0 = CCON^0; //PCA的模块0中断标志
sbit CCF1 = CCON^1; //PCA的模块1中断标志
sbit CR = CCON^6; //PCA计数器使能
void PWM_init(){ //把PCA置为PWM
CMOD = 2; //0000 0010 计数源选择,钟源取fosc/2
CL = CH = 0;
CCAP0L = CCAP0H = 192; //占空比为25%
//CCPAM0=0x42;//0100 0010,PCA的模块0设置为PWM模式,无中断
CCPAM0=0x53;//0101 0011,PCA的模块0设置为PWM模式,有中断,下降沿中断
PPCA = 1; //优先中断
//CR = 1; //开始计数
EA = 1; //开总中断
}
uint ph=0, phM=256, feq=1000; //相位,phM相位步进值
xdata float feqX=1000; //实际输出频率
uchar code sinB[256]={
//查询表中不可装载零值,否则会造成无中断产生
255,255,255,255,255,255,254,254,253,252,252,251,250,249,248,247,246,245,243,242,240,239,237,236,234,232,230,229,227,225,222,220,
218,216,214,211,209,206,204,201,199,196,194,191,188,185,183,180,177,174,171,168,165,162,159,156,153,150,147,144,140,137,134,131,
128,125,122,119,116,112,109,106,103,100, 97, 94, 91, 88, 85, 82, 79, 76, 73, 71, 68, 65, 62, 60, 57, 55, 52, 50, 47, 45, 42, 40,
38, 36, 34, 31, 29, 27, 26, 24, 22, 20, 19, 17, 16, 14, 13, 11, 10, 9, 8, 7, 6, 5, 4, 4, 3, 2, 2, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 2, 2, 3, 4, 4, 5, 6, 7, 8, 9, 10, 11, 13, 14, 16, 17, 19, 20, 22, 24, 26, 27, 29, 31, 34, 36,
38, 40, 42, 45, 47, 50, 52, 55, 57, 60, 62, 65, 68, 71, 73, 76, 79, 82, 85, 88, 91, 94, 97,100,103,106,109,112,116,119,122,125,
128,131,134,137,140,144,147,150,153,156,159,162,165,168,171,174,177,180,183,185,188,191,194,196,199,201,204,206,209,211,214,216,
218,220,222,225,227,229,230,232,234,236,237,239,240,242,243,245,246,247,248,249,250,251,252,252,253,254,254,255,255,255,255,255
};
uchar code fbB[256]={ //方波DDS查询表
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
};
uchar chuX=0; //方波DDS初相
void PCAinter(void) interrupt 7 {//PCA中断
uchar x,y;
CCF0=0; //清除中断请求,以免反复中断
x = ph >> 8; //截断正弦相位累加器,取高8位
y = x + chuX; //方波相位
CCAP0H = sinB[x];//正弦DDS输出
DDS2 = fbB[y]; //方波DDS输出
ph += phM; //相位累加
}
void setDDS(uint f){ //参考时钟是c=(fosc/2)/256=32000000/2/256=62500,频率f=c*phM/2^16
feq = f;
phM=f*65536.0/62500; //phM=f*2^16/62500
feqX = 62500.0*phM/65536; //实际输出频率
ph = 0; //高频时,使波形对称
if(!f) CR=0; else CR=1;
}
//相位控制函数
xdata char xw=0; //相位
void set90(char k){ //设置方波的相位差
k %= 4;
if(k<0) k += 4;
if(k==0) chuX=0; //移相0度
if(k==1) chuX=64; //移相90度
if(k==2) chuX=128; //移相180度
if(k==3) chuX=192; //移相270度
xw = k;
}
void set902() { set90(xw+1); } //相位步进
//==============量程控制函数====================
xdata char rng=1; //量程
void setRng(char k){//切换量程
if(k==0) Ka=0,Kb=0; //100欧
if(k==1) Ka=0,Kb=1; //1k欧
if(k==2) Ka=1,Kb=0; //10k欧
if(k==3) Ka=1,Kb=1; //100k欧
rng = k;
}
void setRng2(){ setRng( (rng+1)%4); } //量程步进
//==============增益控制函数====================
char curGain=1; //当前增益索引号
void setGain(char k){ //设置电路增益
if(k>3) k=3;
if(k<0) k=0;
if(k==0) K4=0,K6=0; //1倍
if(k==1) K4=0,K6=1; //3倍
if(k==2) K4=1,K6=0; //10倍
if(k==3) K4=1,K6=1; //30倍
curGain = k;
}
void setGain2(){ setGain((curGain+1)%4); }
//==============LCR测量====================
xdata int Vxy[4]={0,0,0,0}; //Vxy[Vx1,Vy1,Vx2,Vy2]
xdata char Sxw[4]={0,1,0,1}; //保存正确相位
xdata char Vga[4]={1,1,1,1}; //上下臂增益记录表
xdata uchar tim=0,tims=0;
xdata char pau=0; //暂停坐标自动旋转
#define Vfull 9600
#define gad (9600/30)
uchar mT = 6; //测量速度,mT取值为6或12或24时可以消除数字噪声尾数不动但不利于于取平均
//==============设置频率====================
xdata char feqK=1; //频率索引号
void setF(char k){
if(k==-1){ //步进
k = 0;
if(feq==100) k=1;
if(feq==1000) k=2;
if(feq==7813) k=0;
}
feqK = k;
if(k==0) { setDDS(100); K5=0; K8=1; mT=12; } //置为100Hz
if(k==1) { setDDS(1000); K5=0; K8=0; mT=6; } //置为1kHz
if(k==2) { setDDS(7813); K5=1; K8=0; mT=6; } //置为7.8125kHz
TH1 = 47, TL1 = 171; //置为20ms
tims = 0;
tim = 0;
ph = 0;
}
int absMax(int a,int b){ //取两个数绝对值最大者
if(a<0) a = -a;
if(b<0) b = -b;
if(b>a) a = b;
return a;
}
#define avn 4 //求平无个数
xdata float vq[3][avn]; //数据缓存,用于求平均
void LCRcalc(int *v,char *g){ //LCR计算
code float ga[4] = { 1, 3, 9, 27 }; //增益表
code float dwR[4] = { 20, 1e3, 1e4, 1e5 }; //各档电阻表
xdata int g12 = (int)cs.g1+cs.g2; //增益最大补偿
xdata int j12 = (int)cs.j1+cs.j2; //相位最大补偿
xdata float JD = 0,cJD, G = 0; //补偿变量
xdata float a,b,c,e;
char i;
a = +( 1.0*v[2]*v[2] + 1.0*v[3]*v[3] );
b = -( 1.0*v[0]*v[2] + 1.0*v[1]*v[3] );
c = -( 1.0*v[2]*v[1] - 1.0*v[0]*v[3] );
a *= ga[g[0]] / ga[g[2]];
a /= dwR[rng]*(1+cs.R[rng]/10000.0); //除以下臂电阻阻值
//可控增益单元的增益修正、相位补偿量
if(g[0] == 1) JD += cs.j1, G += cs.g1;
if(g[0] == 2) JD += cs.j2, G += cs.g2;
if(g[0] == 3) JD += j12, G += g12;
if(g[2] == 1) JD -= cs.j1, G -= cs.g1;
if(g[2] == 2) JD -= cs.j2, G -= cs.g2;
if(g[2] == 3) JD -= j12, G -= g12;
JD -= cs.J[rng];
JD *= feqX/7813/1000;
cJD = 1 - JD*JD/2;
a *= 1+G/10000; //增益补偿
e = b*cJD - c*JD; //相位补偿
c = b*JD + c*cJD; //相位补偿
b = e;
//入队
for(i=1;i<avn;i++){
vq[0][i] = vq[0][i-1];
vq[1][i] = vq[1][i-1];
vq[2][i] = vq[2][i-1];
}
vq[0][0]=a, vq[1][0]=b, vq[2][0]=c;
}
void timerInter1(void) interrupt 3 {//T1中断,LCR数据采集
char g; int c=0;
tims++;
if(tims>=mT) tims = 0, tim++, c = 1;
if(tim>=4) tim=0;
if(pau) return;
if(c){ //tim进位触发
c = getAD10(); //读取电压值
c -= cs.zo[feqK];
Vxy[tim] = xw<2 ? c : -c; //保存当前电压
Vga[tim] = curGain; //保存当前增益
Sxw[tim] += c<0 ? 2 : 0; //相位翻转(预测下次的相位采用值)
Sxw[tim] %= 4;
if(tim==1||tim==3){ //上下臂切换
//电压模值才能反应运放的输出幅度,所以增益切换判断得用模值
if(tim==1) K3=1, c = absMax(Vxy[2],Vxy[3]), g=Vga[2]; //切换到下臂
if(tim==3) K3=0, c = absMax(Vxy[0],Vxy[1]), g=Vga[0]; //切换到上臂
if(c>Vfull) g--;
else if(c<gad*1 ) g += 3; //增加27倍
else if(c<gad*3 ) g += 2; //增加9倍
else if(c<gad*9) g++; //增加3倍
setGain(g);
}
set90( Sxw[ (tim+1)%4 ] ); //相位旋转
LCRcalc(Vxy,Vga);
}
}
void showR(char binLian){ //显示LCR
char i;
xdata float a=0,b=0,c=0,e,w;
for(i=0;i<avn;i++)
a += vq[0][i]/avn,
b += vq[1][i]/avn,
c += vq[2][i]/avn;
//电学量显示 if(!a) { lcd_cls(); lcd_puts("DIV 0"); return; }
w = 2*3.1415926*feqX;
lcd_goto2(0); //显示频率
if(feq==100) lcd_putc('A');
if(feq==1000) lcd_putc('B');
if(feq==7813) lcd_putc('C');
lcd_putc(rng+49); //显示量程
if(binLian){ //并联
e = (b*b+c*c)/a;
lcd_goto1(0);
lcd_puts("Zp");
lcd_putf(e/b, 1, 1e-4); //显示并联复阻抗,显示到毫欧
lcd_putf(e/c, 1, 1e-4); //显示并联复阻抗,显示到毫欧
lcd_goto2(2);
if(c<0) { lcd_putf(-c/e/w, 4, 1e-14); lcd_putc('F'); } //显示并联C值,显示到pF
else { lcd_putf(+e/c/w, 2, 1e-8 ); lcd_putc('H'); } //显示并联L值,显示到uH
}else{ //串联
e = a;
lcd_goto1(0);
lcd_puts("Zs");
lcd_putp(b/e, c/e, 1, 1, 1e-4); lcd_putc(244); //显示串联复阻抗,显示到毫欧
lcd_goto2(2);
if(c<0) { lcd_putf(-e/c/w, 4, 1e-14); lcd_putc('F'); } //显示C值,显示到pF
else { lcd_putf(+c/e/w, 2, 1e-8 ); lcd_putc('H'); } //显示L值,显示到uH
}
if(b){ c = fabs(c/b); if(c>999) c=999; } //计算Q
else c = 999;
lcd_putf(c,0,0); //显示Q
}
//void timerInter(void) interrupt 1 {}//T0中断
main(){
uchar i=0,kn=0,key=0;
uchar dispN=0; //显示扫描索引
uchar spkN=0; //蜂鸣器发声时长
uint nn=0;
uchar binLian=0;
lcd_init(); //初始化LCD
lcd_cur0(); //隐藏光标
lcd_puts("LCR 2.0");
lcd_goto2(0);
lcd_puts("XJW Putian,2011");
delay2(80); //启动延时
cs_RW(0); //读EEPROM
TCON=0, TMOD=0x12; //将T0置为自动重装定时器T1置为定时器
TH1 = 0, TL1 = 0;
TR1=1; //T1开始计数
TR0=0; //T0暂停计数
ET1=1; //T1开中断
ET0=1; //T1开中断
EA=1; //开总中断
PT0=1; //设置优先级
set_channel(0); //设置AD转换通道
P2M0 = 0xFF; //P2.01234567置为推勉输出
P1M0 = 0xFC; //P1.234567置为推换口
P1M1 = 0x03; //P1.0置为高阻抗
P2 = 0x0F;
PWM_init();//DDS初始化
set90(2); //初始设置相位
setRng(1); //初始设置量程
setGain(1); //初始设置增益
setF(1); //DDS初始设置为1kHz
while(1){
//显示disp
nn++;
//扫描键盘
key = ~P3;
if(key&&kn<255) kn++; else kn=0;
for(i=0;key;i++) key/=2; key=i;
if(kn==4) spkN=10; else key=0; //当按下一定时间后key才有效。spkN发声时长设置
if(spkN) spkN--, spk=0; else spk=1; //键盘发声
//菜单系统
if(key==8){//菜单键
lcd_cls(); lcd_puts("Menu: 1 LCR");
lcd_goto2(0); lcd_puts("3 Test,7 Set");
menu=0; key=0;
}
if(menu>=1 && menu<=4){
if(key==7) setRng2(); //量程步进
if(key==6) setF(-1); //设置频率
}
if(menu==0){ //显示量程和菜单
if(key) lcd_cls();
if(key>=1 && key<=7) menu = key, menu2 = 0;
key = 0;
}
if(menu==1){ //LCR测量(串联)
pau = 0;
if(key==1) binLian = (binLian+1)%2; //串并联切换
showR(binLian);
}
if(menu==2){
lcd_goto1(0);
lcd_puts("up:"); lcd_putc(Vga[0]+48);
lcd_puts(" dw:"); lcd_putc(Vga[2]+48);
}
if(menu==3){ //手动调试
pau = 1;
if(key==1) setGain2();//增益控制
if(key==2) { };
if(key==3) K3=~K3; //切换上下臂
if(key==4) set902(); //相位旋转
lcd_goto1(0);
lcd_puts(" xw="); lcd_putc(xw+48); //相位索引号
lcd_puts(" K3="); lcd_putc(K3?49:48); //K3状态
lcd_puts(" Ga="); lcd_putc(curGain+48); //增益索引号
lcd_goto2(0);
if(nn%32==0) lcd_int(getAD10(),5);
}
if(menu==7){ //设置零点偏移数
code char *csR[15] = {
"Z0 : 20", "Z1 : 20","Z2 : 20",
"R1X: 20", "R2X: 1k", "R3X:10k", "R4X:.1M", "G1X:3k3", "G2X:10k",
"R1 : 20", "R2 : 1k", "R3 :10k", "R4 :.1M", "G1 :3k3", "G2 :10k"};
char *p,bc=1, feqD=1,rngD=1;
static char kc=0, mo=0;
if(menu2==0) p = cs.zo+0, feqD=0, rngD=2; //100Hz零点校准,接入10欧电阻
if(menu2==1) p = cs.zo+1, feqD=1, rngD=2; //1kHz零点校准,接入10欧电阻
if(menu2==2) p = cs.zo+2, feqD=2, rngD=2; //7.8kHz零点校准,接入10欧电阻
if(menu2==3) p = cs.J+0, feqD=2, rngD=0; //VI变换器相位校准,接入20电阻
if(menu2==4) p = cs.J+1, feqD=2, rngD=1; //VI变换器相位校准,接入1k电阻
if(menu2==5) p = cs.J+2, feqD=2, rngD=2; //VI变换器相位校准,接入10k电阻
if(menu2==6) p = cs.J+3, feqD=2, rngD=3; //VI变换器相位校准,接入100k电阻
if(menu2==7) p = &cs.j1, feqD=2, rngD=1; //运放3倍档相位校准,接入3.3k欧电阻
if(menu2==8) p = &cs.j2, feqD=2, rngD=1; //运放10倍档相位校准,接入10k欧电阻
if(menu2==9) p = cs.R+0, bc=2, feqD=1, rngD=0; //VI变换器模值校准,接入20欧
if(menu2==10) p = cs.R+1, bc=2, feqD=1, rngD=1; //VI变换器模值校准,接入1k欧
if(menu2==11) p = cs.R+2, bc=2, feqD=1, rngD=2; //VI变换器模值校准,接入10k欧
if(menu2==12) p = cs.R+3, bc=2, feqD=1, rngD=3; //VI变换器模值校准,接入100k欧
if(menu2==13) p = &cs.g1, bc=2, feqD=1, rngD=1; //运放3倍增益校准,接入2k欧电阻
if(menu2==14) p = &cs.g2, bc=2, feqD=1, rngD=1; //运放10倍增益校准,接入10k欧电阻
if(key==1) *p += bc; //X键增
if(key==2) *p -= bc; //R键减
if(key==3) { cs_RW(1); setF(feqK); } //L键保存
if(key==4) *p = 0; //C键清除
if(key==5) { if(menu2==0) menu2=14; else menu2--; mo=0; }
if(key==6) { if(menu2==14)menu2=0; else menu2++; mo=0; }
if(key==7) mo = (mo+1)%2;
if(key==4){ //恢复到默认值
if(++kc==5){
kc = 0;
cs.j1 = 16, cs.j2 = 18;
cs.g1 = 0, cs.g2 = 0;
cs.zo[0] = 20;
cs.zo[1] = 19;
cs.zo[2] = 14;
cs.J[0] = cs.J[1] = cs.J[2] = 0, cs.J[3] = 20;
cs.R[0] = cs.R[1] = cs.R[2] = cs.R[3] = 0;
}
}
else { if(key) kc=0; }
//显示
if(mo){
if(feqD!=feqK) setF(feqD);
if(rngD!=rng) setRng(rngD);
showR(1);
}else{
lcd_cls();
lcd_goto1(0);
lcd_puts(csR[menu2]); //输出参数名称
lcd_goto2(0);
lcd_putf(*p,0,0);
lcd_puts("X:+ R:-");
}
}
delay(20000);
}//while end
}
//==========================================================================

BIN
LCR.lay Normal file

Binary file not shown.

576
led.c Normal file
View File

@ -0,0 +1,576 @@
/*************************************
LCR表驱动程序 V1.0
xjw01 2011.10
**************************************/
//====================================
#define uchar unsigned char
#define uint unsigned int
#define ulong unsigned long
#include <reg52.h>
#include <math.h>
void delay(uint loop) { uint i; for(i=0;i<loop;i++); } //延时函数
void delay2(uint k){ for(;k>0;k--) delay(10000); } //长延时,k=100大约对应1秒
//========================AD转换=============================
sfr P1ASF = 0x9D; //将P1置为模拟口寄存器(使能),各位中为1的有效
sfr ADC_CONTR = 0xBC; //A/D转换控制寄存器
sfr ADC_res = 0xBD; //A/D转换结果寄存器
sfr ADC_resl = 0xBE; //A/D转换结果寄存器
void set_channel(char channel){
P1ASF = 1<<channel;
ADC_CONTR = channel+128; //最高位是电源开关,低3位通道选择
delay(1); //首次打开电源应延迟,使输入稳定
}
uint getAD2(){
ADC_CONTR |= 0x08; //00001000,置ADC_START=1启动A/D 转换
while ( !(ADC_CONTR & 0x10) ); //等待A/D转换结束(ADC_FLAG==0)
ADC_CONTR &= 0xE7; //11100111,置ADC_FLAG=0清除结束标记, 置ADC_START=0关闭A/D 转换
return ADC_res*4 + ADC_resl;
}
/*
uchar get_AD(){
ADC_CONTR |= 0x08; //00001000,置ADC_START=1启动A/D 转换
while( !(ADC_CONTR & 0x10) ); //等待A/D转换结束(ADC_FLAG==0)
ADC_CONTR &= 0xE7; //11100111,置ADC_FLAG=0清除结束标记, 置ADC_START=0关闭A/D 转换
return ADC_res;
}
*/
uint getAD10() reentrant { //10次采样
char i;
uint c = 0;
for(i=0;i<10;i++) c += getAD2();
return c;
}
//============================EEPROW偏程=========================
sfr IAP_data = 0xC2;
sfr IAP_addrH = 0xC3;
sfr IAP_addrL = 0xC4;
sfr IAP_cmd = 0xC5;
sfr IAP_trig = 0xC6;
sfr IAP_contr = 0xC7;
/********************
1001使01
*********************/
void saEEP(){ //EEP保护
IAP_cmd = 0; //关闭令,保护
IAP_contr = 0; //关EEPROM保护
IAP_trig = 0;
IAP_addrL = 255; //设置读取地址的低字节,地址改变才需要设置
IAP_addrH = 255; //设置读取地址的高字节,地址改变才需要设置
}
uchar readEEP(uint k){ //读取
IAP_addrL = k; //设置读取地址的低字节,地址改变才需要设置
IAP_addrH = k>>8; //设置读取地址的高字节,地址改变才需要设置
IAP_contr = 0x81; //设置等待时间1MHz以下取72M以下取63M取56M取412M取320M取224M取130M取0前导1表示许档IAP
IAP_cmd = 1; //读取值1写取2擦除取3擦除时按所在字节整个扇区撺除
IAP_trig = 0x5A; //先送5A
IAP_trig = 0xA5; //先送5A再送A5立即触发
saEEP(); //保护
return IAP_data;
}
void writeEEP(uint k, uchar da){ //写入
IAP_data = da; //传入数据
IAP_addrL = k; //设置读取地址的低字节,地址改变才需要设置
IAP_addrH = k>>8; //设置读取地址的高字节,地址改变才需要设置
IAP_contr = 0x81; //设置等待时间1MHz以下取72M以下取63M取56M取412M取320M取224M取130M取0前导1表示许档IAP
IAP_cmd = 2; //读取值1写取2擦除取3擦除时按所在字节整个扇区撺除
IAP_trig = 0x5A; //先送5A
IAP_trig = 0xA5; //先送5A再送A5立即触发
saEEP(); //保护
}
void eraseEEP(uint k){ //擦除
IAP_addrL = k; //设置读取地址的低字节,地址改变才需要设置
IAP_addrH = k>>8; //设置读取地址的高字节,地址改变才需要设置
IAP_contr = 0x81; //设置等待时间1MHz以下取72M以下取63M取56M取412M取320M取224M取130M取0前导1表示许档IAP
IAP_cmd = 3; //读取值1写取2擦除取3擦除时按所在字节整个扇区撺除
IAP_trig = 0x5A; //先送5A
IAP_trig = 0xA5; //先送5A再送A5立即触发
saEEP(); //保护
}
xdata struct Ida{
char zo[3];//三个频率下的零点改正值
char j1; //相位补偿(3倍档)
char j2; //相位补偿(10倍档)
char J[4]; //相位补偿(V/I变换器)
char R[4]; //下臂电阻修正(20,1k,10k,100k)
char g1; //增益修正(3倍档)
char g2; //增益修正(10倍档)
} cs;
void cs_RW(char rw){
uchar i,*p = &cs;
if(rw){
eraseEEP(0);
for(i=0;i<sizeof(cs);i++) writeEEP(i,p[i]);
}else{
for(i=0;i<sizeof(cs);i++) p[i]=readEEP(i);
}
}
/**********
32
-
64| | 128
- 16
1| | 8
_. 4
2
**********/
uchar code zk[20]={235,136,179,186,216,122,123,168,251,250, 59,201,2,18,50}; //字库,0-9,10,11,12,13,14
uchar code zk2[8]={241,25,11,233,27,50,155,107};//p,n,u,m,0,k,M,G
uchar disp[6]={168,251,250}; char cx=-1; //显示缓存,cx光标位置
sfr P1M1=0x91; //P1端口设置寄存器
sfr P1M0=0x92; //P1端口设置寄存器
sfr P0M1=0x93; //P0端口设置寄存器
sfr P0M0=0x94; //P0端口设置寄存器
sfr P2M1=0x95; //P2端口设置寄存器
sfr P2M0=0x96; //P2端口设置寄存器
sfr P3M1=0xB1; //P3端口设置寄存器
sfr P3M0=0xB2; //P3端口设置寄存器
sbit ds3=P2^4; //数码管扫描口
sbit ds2=P2^5; //数码管扫描口
sbit ds1=P2^6; //数码管扫描口
sbit ds0=P2^7; //数码管扫描口
sbit spk=P2^3; //蜂鸣器
sbit Kb=P2^1; //量程开关B
sbit Ka=P2^2; //量程开关A
sbit DDS2=P1^2;//移相方波输出口
sbit K3=P1^7;
sbit K4=P1^6;
sbit K5=P1^5; //7.8kHz滤波开关
sbit K6=P1^4;
sbit K8=P2^0; //100Hz滤波开关
//==============字符显示函数====================
xdata uchar menu=1,menu2=0;
void cls(){ char i; for(i=0;i<6;i++) disp[i]=0; } //清屏
void showDig(long f){ //显示数字
uchar i;
cls();
for(i=0;i<6;i++) { disp[i]=zk[f%10], f/=10; if(!f) break; }
}
void showDig2(float f,char n,char dw){ //显示浮点数,nL是单位下限控制,如n=2时最小显示到u单位
char i,b=0,b2=0,fh=0;
if(f<0) fh=1,f=-f;
for(i=0;i<3;i++){ if(f>=1000) f/=1000, b++; } //以3位为单位移动小数点把大数转粉0至999,小数点在末字
for(i=0;i<n;i++){ if(f<1) f*=1000, b--; } //以3位为单位移动小数点把小数转粉0至999,小数点在末字
for(i=0;i<3;i++){ if(f<1000) f*=10, b2++; } //对小于1000结果连同小数点整体移位使首位移到最左边
showDig(f+10000); //加10000是为了补零
disp[b2] += 4; //小数点
if(!dw) return;
disp[0] = zk2[b+4]; //显示单位
if(fh) disp[0] += 4; //显示符号
}
//==============低频信号DDS====================
//PCA相关寄存器
sfr CMOD = 0xD9; //钟源选择控制等
sfr CH = 0xF9; //PCA的计数器
sfr CL = 0xE9; //PCA的计数器
sfr CCON = 0xD8; //PCA控制寄存器
sfr CCPAM0 = 0xDA; //PCA模块0工作模式寄存器
sfr CCPAM1 = 0xDB; //PCA模块1工作模式寄存器
sfr CCAP0L = 0xEA; //模块0捕获寄存器低位
sfr CCAP0H = 0xFA; //模块0捕获寄存器高位
sbit PPCA = IP^7; //PCA的中断优先级设置
sbit CCF0 = CCON^0; //PCA的模块0中断标志
sbit CCF1 = CCON^1; //PCA的模块1中断标志
sbit CR = CCON^6; //PCA计数器使能
void PWM_init(){ //把PCA置为PWM
CMOD = 2; //0000 0010 计数源选择,钟源取fosc/2
CL = CH = 0;
CCAP0L = CCAP0H = 192; //占空比为25%
//CCPAM0=0x42;//0100 0010,PCA的模块0设置为PWM模式,无中断
CCPAM0=0x53;//0101 0011,PCA的模块0设置为PWM模式,有中断,下降沿中断
PPCA = 1; //优先中断
//CR = 1; //开始计数
EA = 1; //开总中断
}
uint ph=0, phM=256, feq=1000; //相位,phM相位步进值
xdata float feqX=1000; //实际输出频率
uchar code sinB[256]={
//查询表中不可装载零值,否则会造成无中断产生
255,255,255,255,255,255,254,254,253,252,252,251,250,249,248,247,246,245,243,242,240,239,237,236,234,232,230,229,227,225,222,220,
218,216,214,211,209,206,204,201,199,196,194,191,188,185,183,180,177,174,171,168,165,162,159,156,153,150,147,144,140,137,134,131,
128,125,122,119,116,112,109,106,103,100, 97, 94, 91, 88, 85, 82, 79, 76, 73, 71, 68, 65, 62, 60, 57, 55, 52, 50, 47, 45, 42, 40,
38, 36, 34, 31, 29, 27, 26, 24, 22, 20, 19, 17, 16, 14, 13, 11, 10, 9, 8, 7, 6, 5, 4, 4, 3, 2, 2, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 2, 2, 3, 4, 4, 5, 6, 7, 8, 9, 10, 11, 13, 14, 16, 17, 19, 20, 22, 24, 26, 27, 29, 31, 34, 36,
38, 40, 42, 45, 47, 50, 52, 55, 57, 60, 62, 65, 68, 71, 73, 76, 79, 82, 85, 88, 91, 94, 97,100,103,106,109,112,116,119,122,125,
128,131,134,137,140,144,147,150,153,156,159,162,165,168,171,174,177,180,183,185,188,191,194,196,199,201,204,206,209,211,214,216,
218,220,222,225,227,229,230,232,234,236,237,239,240,242,243,245,246,247,248,249,250,251,252,252,253,254,254,255,255,255,255,255
};
uchar code fbB[256]={ //方波DDS查询表
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
};
uchar chuX=0; //方波DDS初相
void PCAinter(void) interrupt 7 {//PCA中断
uchar x,y;
CCF0=0; //清除中断请求,以免反复中断
x = ph >> 8; //截断正弦相位累加器,取高8位
y = x + chuX; //方波相位
CCAP0H = sinB[x];//正弦DDS输出
DDS2 = fbB[y]; //方波DDS输出
ph += phM; //相位累加
}
void setDDS(uint f){ //参考时钟是c=(fosc/2)/256=32000000/2/256=62500,频率f=c*phM/2^16
feq = f;
phM=f*65536.0/62500; //phM=f*2^16/62500
feqX = 62500.0*phM/65536; //实际输出频率
ph = 0; //高频时,使波形对称
if(!f) CR=0; else CR=1;
}
//相位控制函数
xdata char xw=0; //相位
void set90(char k){ //设置方波的相位差
k %= 4;
if(k<0) k += 4;
if(k==0) chuX=0; //移相0度
if(k==1) chuX=64; //移相90度
if(k==2) chuX=128; //移相180度
if(k==3) chuX=192; //移相270度
xw = k;
}
void set902() { set90(xw+1); } //相位步进
//==============量程控制函数====================
xdata char rng=1; //量程
void setRng(char k){//切换量程
if(k==0) Ka=0,Kb=0; //100欧
if(k==1) Ka=0,Kb=1; //1k欧
if(k==2) Ka=1,Kb=0; //10k欧
if(k==3) Ka=1,Kb=1; //100k欧
rng = k;
}
void setRng2(){ setRng( (rng+1)%4); } //量程步进
//==============增益控制函数====================
char curGain=1; //当前增益索引号
void setGain(char k){ //设置电路增益
if(k>3) k=3;
if(k<0) k=0;
if(k==0) K4=0,K6=0; //1倍
if(k==1) K4=0,K6=1; //3倍
if(k==2) K4=1,K6=0; //10倍
if(k==3) K4=1,K6=1; //30倍
curGain = k;
}
void setGain2(){ setGain((curGain+1)%4); }
//==============LCR测量====================
xdata int Vxy[4]={0,0,0,0}; //Vxy[Vx1,Vy1,Vx2,Vy2]
xdata char Sxw[4]={0,1,0,1}; //保存正确相位
xdata char Vga[4]={1,1,1,1}; //上下臂增益记录表
xdata uchar tim=0,tims=0;
xdata char pau=0; //暂停坐标自动旋转
#define Vfull 9600
#define gad (9600/30)
uchar mT = 6; //测量速度
//==============设置频率====================
xdata char feqK=1; //频率索引号
void setF(char k){
if(k==-1){ //步进
k = 0;
if(feq==100) k=1;
if(feq==1000) k=2;
if(feq==7813) k=0;
}
if(k==0) { setDDS(100); K5=0; K8=1; mT=15; } //置为100Hz
if(k==1) { setDDS(1000); K5=0; K8=0; mT=6; } //置为1kHz
if(k==2) { setDDS(7813); K5=1; K8=0; mT=6; } //置为7.8125kHz
feqK=k;
TH1 = 47, TL1 = 171; //置为20ms
tims = 0;
tim = 0;
ph = 0;
}
int absMax(int a,int b){ //取两个数绝对值最大者
if(a<0) a = -a;
if(b<0) b = -b;
if(b>a) a = b;
return a;
}
#define avn 4 //求平无个数
xdata float vq[3][avn]; //数据缓存,用于求平均
void LCRcalc(int *v,char *g){ //LCR计算
code float ga[4] = { 1, 3, 9, 27 }; //增益表
code float dwR[4] = { 20, 1e3, 1e4, 1e5 }; //各档电阻表
xdata int g12 = (int)cs.g1+cs.g2; //增益最大补偿
xdata int j12 = (int)cs.j1+cs.j2; //相位最大补偿
xdata float JD = 0,cJD, G = 0; //补偿变量
xdata float a,b,c,e;
char i;
a = +( 1.0*v[2]*v[2] + 1.0*v[3]*v[3] );
b = -( 1.0*v[0]*v[2] + 1.0*v[1]*v[3] );
c = -( 1.0*v[2]*v[1] - 1.0*v[0]*v[3] );
a *= ga[g[0]] / ga[g[2]];
a /= dwR[rng]*(1+cs.R[rng]/10000.0); //除以下臂电阻阻值
//可控增益单元的增益修正、相位补偿量
if(g[0] == 1) JD += cs.j1, G += cs.g1;
if(g[0] == 2) JD += cs.j2, G += cs.g2;
if(g[0] == 3) JD += j12, G += g12;
if(g[2] == 1) JD -= cs.j1, G -= cs.g1;
if(g[2] == 2) JD -= cs.j2, G -= cs.g2;
if(g[2] == 3) JD -= j12, G -= g12;
JD -= cs.J[rng];
JD *= feqX/7813/1000;
cJD = 1 - JD*JD/2;
a *= 1+G/10000; //增益补偿
e = b*cJD - c*JD; //相位补偿
c = b*JD + c*cJD; //相位补偿
b = e;
//入队
for(i=1;i<avn;i++){
vq[0][i] = vq[0][i-1];
vq[1][i] = vq[1][i-1];
vq[2][i] = vq[2][i-1];
}
vq[0][0]=a, vq[1][0]=b, vq[2][0]=c;
}
void timerInter1(void) interrupt 3 {//T1中断
char g; int c;
if(pau) return;
tims++;
if(tims>=mT){ //tim进位触发
tims = 0, tim++;
if(tim>=4) tim=0;
c = getAD10(); //读取电压值
c -= cs.zo[feqK];
Vxy[tim] = xw<2 ? c : -c; //保存当前电压
Vga[tim] = curGain; //保存当前增益
Sxw[tim] += c<0 ? 2 : 0; //相位翻转(预测下次的相位采用值)
Sxw[tim] %= 4;
if(tim==1||tim==3){ //上下臂切换
//电压模值才能反应运放的输出幅度,所以增益切换判断得用模值
if(tim==1) K3=1, c = absMax(Vxy[2],Vxy[3]), g=Vga[2]; //切换到下臂
if(tim==3) K3=0, c = absMax(Vxy[0],Vxy[1]), g=Vga[0]; //切换到上臂
if(c>Vfull) g--;
else if(c<gad*1 ) g += 3; //增加27倍
else if(c<gad*3 ) g += 2; //增加9倍
else if(c<gad*9) g++; //增加3倍
setGain(g);
}
set90( Sxw[ (tim+1)%4 ] ); //相位旋转
LCRcalc(Vxy,Vga);
}
}
char sfdw=1; //是否显示单位
void showR(char xm, char binLian){ //显示LCR
char i;
xdata float a=0,b=0,c=0,e,w;
for(i=0;i<avn;i++)
a += vq[0][i]/avn,
b += vq[1][i]/avn,
c += vq[2][i]/avn;
//电学量显示
if(!a) { cls(); disp[3]=115;disp[2]=disp[1]=97; return; }
w = 2*3.1415926*feqX;
if(!binLian){ //串联
e = a;
if(xm==0){ showDig2(c/e,1, sfdw); }//显示X值,显示到毫欧
if(xm==1){ showDig2(b/e,1, sfdw); }//显示R值,显示到毫欧
if(xm==2){
if(c<0) showDig2(e/c/w,4, sfdw); //显示C值,显示到pF
else showDig2(c/e/w,2, sfdw); //显示L值,显示到uH
}
}else{ //并联
e = (b*b+c*c)/a;
if(xm==0){ showDig2(e/c,1, sfdw); }//显示并联X值,显示到毫欧
if(xm==1){ showDig2(e/b,1, sfdw); }//显示并联R值,显示到毫欧
if(xm==2){
if(c<0) showDig2(c/e/w,4, sfdw);//显示并联C值,显示到pF
else showDig2(e/c/w,2, sfdw);//显示并联L值,显示到uH
}
}
if(xm==3){ //显示Q值
if(!b) { showDig(9999); return; }
c = fabs(c/b);
if (c>=1000) { showDig(999 ); }
else if(c>=100 ) { showDig(c ); }
else if(c>=10 ) { showDig(c*10 ); disp[1] += 4; }
else if(c>=1 ) { showDig(c*100 ); disp[2] += 4; }
else { showDig(c*1000); disp[3] += 4; }
}
}
//void timerInter(void) interrupt 1 {}//T0中断
void showMsg(uchar a){ //临时跳出信息
P0 = ~a;
ds0=1, ds1=ds2=ds3=0;
delay2(50);
}
main(){
uchar i=0,kn=0,key=0;
uchar dispN=0; //显示扫描索引
uchar spkN=0; //蜂鸣器发声时长
uint nn=0;
uchar XRQ=1;
char binLian=0; //并联1,串联0
delay2(80); //启动延时
cs_RW(0); //读EEPROM
TCON=0, TMOD=0x12; //将T0置为自动重装定时器T1置为定时器
TH1 = 0, TL1 = 0;
TR1=1; //T1开始计数
TR0=0; //T0暂停计数
ET1=1; //T1开中断
ET0=1; //T1开中断
EA=1; //开总中断
PT0=1; //设置优先级
set_channel(0); //设置AD转换通道
P2M0 = 0xFF; //P2.01234567置为推勉输出
P1M0 = 0xFC; //P1.234567置为推换口
P1M1 = 0x03; //P1.0置为高阻抗
//请注意启动延时0.5秒方可读取cs_RW
//cs_RW(0); //读取比值基数(调零时已做开机延时确保电压上升到可读取EEPROW)
PWM_init();//DDS初始化
set90(2); //初始设置相位
setRng(1); //初始设置量程
setGain(1); //初始设置增益
setF(1); //DDS初始设置为1kHz
while(1){
//显示disp
nn++;
dispN=(++dispN)%4; //扫描器移动
ds0=ds1=ds2=ds3=0;
if(dispN==0) ds0=1;
if(dispN==1) ds1=1;
if(dispN==2) ds2=1;
if(dispN==3) ds3=1;
P0=~disp[dispN]; //显示
//扫描键盘
//键盘响应
//key = (~P3)&0xfc;
key = ~P3;
if(key&&kn<255) kn++; else kn=0;
for(i=0;key;i++) key/=2; key=i;
if(kn==20) spkN=50; else key=0; //当按下一定时间后key才有效否则无效。spkN发声时长设置
if(spkN) spkN--, spk=0; else spk=1; //键盘发声
//菜单系统
if(key==8) { menu=0; key=0; XRQ=-1;} //菜单键
if(menu>=1&&menu<=4){
if(key==7) setRng2(); //量程步进
if(key==6) setF(-1); //设置频率
}
if(menu==0){ //显示量程和菜单
showDig(10000);
if(key>=1 && key<=7) menu = key, menu2 = 0;
key = 0;
}
if(menu==1){ //自动LCR测量(串联)
pau = 0;
if(XRQ==-1) XRQ=1, sfdw=1;
if(key==4) { //串并联切换
if(binLian) { binLian=0; showMsg(122); } //转为串联
else { binLian=1; showMsg(241); } //转为并联
}
if(key==1) { if(XRQ==0) sfdw++; else sfdw=1; XRQ = 0; }
if(key==2) { if(XRQ==1) sfdw++; else sfdw=1; XRQ = 1; }
if(key==3) { if(XRQ==2) sfdw++; else sfdw=1; XRQ = 2; }
if(key==5) XRQ = 3;
sfdw %= 2;
showR(XRQ,binLian);
if(binLian && nn%512<50) { for(i=0;i<4;i++) disp[i] |= 4; }
}
if(menu==2){ //显示增益档位
showDig(Vga[0]*100+Vga[2]+10000);
disp[1]=disp[3]=0;
}
if(menu==3){ //手动调试
pau = 1;
if(key==1) { setGain2(); showMsg( zk[curGain] );} //增益控制
if(key==2) { };
if(key==3) { K3=~K3; showMsg(zk[K3]); } //切换上下臂
if(key==4) { set902(); showMsg(zk[xw]); } //相位旋转
if(nn%64==0) { showDig( getAD10()); disp[1]+=4; }
}
if(menu==7){ //设置零点偏移数
char *p,bc=1, feqD=1,rngD=1;
static char kc=0, mo=0;
if(menu2==0) p = cs.zo+0, feqD=0, rngD=2; //100Hz零点校准,接入10欧电阻
if(menu2==1) p = cs.zo+1, feqD=1, rngD=2; //1kHz零点校准,接入10欧电阻
if(menu2==2) p = cs.zo+2, feqD=2, rngD=2; //7.8kHz零点校准,接入10欧电阻
if(menu2==3) p = cs.J+0, feqD=2, rngD=0; //VI变换器相位校准,接入20电阻
if(menu2==4) p = cs.J+1, feqD=2, rngD=1; //VI变换器相位校准,接入1k电阻
if(menu2==5) p = cs.J+2, feqD=2, rngD=2; //VI变换器相位校准,接入10k电阻
if(menu2==6) p = cs.J+3, feqD=2, rngD=3; //VI变换器相位校准,接入100k电阻
if(menu2==7) p = &cs.j1, feqD=2, rngD=1; //运放3倍档相位校准,接入3.3k电阻
if(menu2==8) p = &cs.j2, feqD=2, rngD=1; //运放10倍档相位校准,接入10k电阻
if(menu2==9) p = cs.R+0, bc=2, feqD=1, rngD=0; //VI变换器模值校准,接入20欧
if(menu2==10) p = cs.R+1, bc=2, feqD=1, rngD=1; //VI变换器模值校准,接入1k欧
if(menu2==11) p = cs.R+2, bc=2, feqD=1, rngD=2; //VI变换器模值校准,接入10k欧
if(menu2==12) p = cs.R+3, bc=2, feqD=1, rngD=3; //VI变换器模值校准,接入100k欧
if(menu2==13) p = &cs.g1, bc=2, feqD=1, rngD=1; //运放3倍增益校准,接入2k欧电阻
if(menu2==14) p = &cs.g2, bc=2, feqD=1, rngD=1; //运放10倍增益校准,接入10k欧电阻
if(key==1) *p += bc; //X键增
if(key==2) *p -= bc; //R键减
if(key==3) { cs_RW(1); setF(feqK); } //L键保存
if(key==4) *p = 0; //C键清除
if(key==5) { if(menu2==0) menu2=14; else menu2--; mo=0; showMsg(menu2<9?zk[menu2]:zk[menu2-6]+4); }
if(key==6) { if(menu2==14)menu2=0; else menu2++; mo=0; showMsg(menu2<9?zk[menu2]:zk[menu2-6]+4); }
if(key==7) mo = (mo+1)%2;
if(key==4){ //恢复到默认值
if(++kc==5){
kc = 0;
cs.j1 = 16, cs.j2 = 18;
cs.g1 = 0, cs.g2 = 0;
cs.zo[0] = 15;
cs.zo[1] = 17;
cs.zo[2] = 15;
cs.J[0] = cs.J[1] = cs.J[2] = 0, cs.J[3] = 20;
cs.R[0] = cs.R[1] = cs.R[2] = cs.R[3] = 0;
}
}
else { if(key) kc=0; }
if(mo){
if(feqD!=feqK) setF(feqD);
if(rngD!=rng) setRng(rngD);
if(menu2>=3 && menu2<=8) showR(3,1); //显示Q
else showR(1,1); //显示电阻
}else{
sfdw = 0;
showDig(abs(*p));
if(*p<0) disp[3] = 16;
}
}
delay(4000);
}//while end
}

781
uu1602.hex Normal file
View File

@ -0,0 +1,781 @@
:102050005A70005A73004C435220322E3000584AB6
:10206000572050757469616E2C32303131004D65E6
:102070006E753A202031204C435200332054657352
:10208000742C37205365740075703A002064773AD9
:10209000002078773D00204B333D002047613D0014
:1020A0005A30203A203230005A31203A2032300063
:1020B0005A32203A203230005231583A2032300021
:1020C0005232583A20316B005233583A31306B005B
:1020D0005234583A2E314D004731583A336B330061
:1020E0004732583A31306B005231203A20323000BA
:1020F0005232203A20316B005233203A31306B009B
:102100005234203A2E314D004731203A336B3300A0
:102110004732203A31306B00583A2B20523A2D008A
:10212000706E756D6F6B4D47202B2020202020FF97
:10213000FFFFFFFFFFFEFEFDFCFCFBFAF9F8F7F6E0
:10214000F5F3F2F0EFEDECEAE8E6E5E3E1DEDCDA08
:10215000D8D6D3D1CECCC9C7C4C2BFBCB9B7B4B12D
:10216000AEABA8A5A29F9C999693908C89868380FC
:102170007D7A7774706D6A6764615E5B5855524F03
:102180004C494744413E3C393734322F2D2A2826CA
:1021900024221F1D1B1A1816141311100E0D0B0AE2
:1021A00009080706050404030202010101010101F7
:1021B0000101010101020203040405060708090ADE
:1021C0000B0D0E1011131416181A1B1D1F22242696
:1021D000282A2D2F323437393C3E414447494C4F51
:1021E0005255585B5E6164676A6D7074777A7D8062
:1021F0008386898C909396999C9FA2A5A8ABAEB13B
:10220000B4B7B9BCBFC2C4C7C9CCCED1D3D6D8DA53
:10221000DCDEE1E3E5E6E8EAECEDEFF0F2F3F5F61B
:10222000F7F8F9FAFBFCFCFDFEFEFFFFFFFFFF00E5
:10223000000000000000000000000000000000009E
:10224000000000000000000000000000000000008E
:10225000000000000000000000000000000000007E
:10226000000000000000000000000000000000006E
:10227000000000000000000000000000000000005E
:10228000000000000000000000000000000000004E
:10229000000000000000000000000000000000003E
:1022A000000000000000000000000000000000012D
:1022B000010101010101010101010101010101010E
:1022C00001010101010101010101010101010101FE
:1022D00001010101010101010101010101010101EE
:1022E00001010101010101010101010101010101DE
:1022F00001010101010101010101010101010101CE
:1023000001010101010101010101010101010101BD
:1023100001010101010101010101010101010101AD
:102320000101010101010101010101010101013F5F
:10233000800000404000004110000041D8000041F2
:10234000A00000447A0000461C400047C35000FF34
:1023500020A0FF20A8FF20B0FF20B8FF20C0FF2052
:10236000C8FF20D0FF20D8FF20E0FF20E8FF20F0AA
:0C237000FF20F8FF2100FF2108FF2110D2
:10294F00410078014100C8008209000082030100A4
:10295F00820503E8440070447A00008102004100C0
:10296F00C9004100870181080148007F0000000075
:10297F000000000044007A000100014400740101CE
:10298F000101410088004100790041007E0081076C
:0B299F000641006F0181000081010073
:082A51009280D28474FFFFFEA5
:102A5900C3EE64809480500FE4FCFD0DBD00010CB1
:102A6900ED641E4C70F522EF4E700EFCFD0DBD009D
:102A7900010CED64964C70F522EF4E6015E4FBFAFB
:102A89000BBB00010ABA0BF8BBB8F5EF1F70EA1EC1
:022A990080E7D4
:012A9B002218
:062872007B057D307F04B0
:102878007854EFF208EBF2A905C28418E2FF75F06C
:1028880002120E3FAEF0EE24FF9286EFA2E713FF8E
:1028980075F002120E3FAFF0EF24FF9285E9A2E433
:1028A8009283A2E59282A2E6928133122A51C284CF
:1028B8007854E2B40403088016E9139283E9A2E18C
:1028C8009282A2E29281A2E3122A51C2847855E24E
:0928D800FF3395E0FE122A59229B
:102AE0007F147E00122A597B091228741228721250
:102AF00028727B057D207F041228787B057D28E4E1
:102B0000FF1228787B057D0CE4FF1228787B057D79
:0F2B100080E4FF1228787B057D01E4FF0228781E
:092D84007B027D01E4FF022878C6
:082D9600E4FB7D0CFF0228782C
:082D0D009000F612105DE4FFD6
:0A2D1500EF2480FDE4FBFF022878A4
:0A2D7A00EF24C0FDE4FBFF022878FF
:042D6000E02430FF3C
:092D6400AD07E4FB7F01022878B1
:102C44007823EBF208EAF208E9F27823E2FB08E2DF
:102C5400FA08E2F9120E61FD6014E4FB7F01122808
:0F2C6400787825E22401F218E23400F280DC22B5
:102D1F00E4FDFCC3ED9FEC9E50070DBD00010C8040
:012D2F00F2B1
:012D30002280
:102C9800AB07AA06D3EB9400EA9400400E7F107E9F
:0C2CA80027122D1FEB1B70EC1A80E92294
:102CB4007401A807088002C333D8FCF59DEF248073
:092CC400F5BC7F017E00022D1F0A
:10001E0043BC08E5BC30E4FB53BCE7AFBDEF75F065
:0D002E0004A4ADBE7C002DFFEC35F0FE22D9
:062B1F0015081508150859
:102B2500A80808E4F208F2A808F2A808E2C364803D
:102B3500948A501512001EA8080808E22FF218E220
:102B45003EF2A808E204F280E1A80808E2FE08E2E5
:012B5500FF80
:072B5600050805080508222F
:0E2D5200E4F5C5F5C7F5C675C4FF75C3FF22CD
:100003008FC4EEF5C375C78175C50175C65A75C62C
:07001300A5122D52AFC2221D
:102CCD008DC28FC4EEF5C375C78175C50275C65A21
:062CDD0075C6A5022D5290
:102CF9008FC4EEF5C375C78175C50375C65A75C608
:042D0900A5022D52A0
:1029AB0078217401F2087400F2087489F2EF602840
:1029BB00E4FFFE122CF9E4FCECFF7E007821E2FB35
:1029CB0008E2FA08E2F98C82758300120E7AFD1286
:1029DB002CCD0CECB40FE122E4FCECFF7E001200DA
:1029EB00037821E2FB08E2FA08E2F98C8275830096
:0929FB00EF120EDB0CECB40FE14D
:012A040022AF
:0516D500782C121069E1
:1016DA00E4783CF2087403F2087C007DFE7BFF7A12
:1016EA002179287E007F02120E1978481210A6006E
:1016FA0000000178501210A63F800000E4FFFEFDB2
:10170A00FC782CE2FB08E2F908E2FA08E2CBF812CC
:10171A000C0C501A783E742DF2782CE2FC08E2FD8B
:10172A0008E2FE08E2FF120C79782C121069E4FF35
:10173A00FEFDFC7830E2FB08E2F908E2FA08E2CBA7
:10174A00F8120C0C501A783F742DF27830E2FC082B
:10175A00E2FD08E2FE08E2FF120C79783012106905
:10176A007830E2FC08E2FD08E2FE08E2FF782CE2AB
:10177A00FB08E2F908E2FA08E2CBF8120C0C600660
:10178A004004782C80027830E2FC08E2FD08E2FE90
:10179A0008E2FF784C1210697836E2FC08E2FD088C
:1017AA00E2FE08E2FFEC4D4E4F7003021942782C1C
:1017BA00E2FB08E2F908E2FA08E2CBF8C000C0014D
:1017CA00C002C003E4FBFAF97840C0007836E2FCB4
:1017DA0008E2FD08E2FE08E2FFD000120B6FD00318
:1017EA00D002D001D000120975782C121069782C19
:1017FA00E2FC08E2FD08E2FE08E2FFC004C005C000
:10180A0006C0077836E2FC08E2FD08E2FE08E2FFBD
:10181A007858121069782CE2FC08E2FD08E2FE080A
:10182A00E2FF122613C004C005C006C007E4FBFA93
:10183A00797A7844C0007836E2FC08E2FD08E2FED4
:10184A0008E2FFD000120B6FA804A905AA06AB078D
:10185A00D007D006D005D004120971A804A905AA98
:10186A0006AB07D007D006D005D004120971782C30
:10187A001210697830E2FB08E2F908E2FA08E2CBD2
:10188A00F8C000C001C002C003E4FBFAF97840C006
:10189A00007836E2FC08E2FD08E2FE08E2FFD0002A
:1018AA00120B6FD003D002D001D000120975783024
:1018BA001210697830E2FC08E2FD08E2FE08E2FF55
:1018CA00C004C005C006C0077836E2FC08E2FD087D
:1018DA00E2FE08E2FF78581210697830E2FC08E26A
:1018EA00FD08E2FE08E2FF122613C004C005C00686
:1018FA00C007E4FBFA797A7844C0007836E2FC083B
:10190A00E2FD08E2FE08E2FFD000120B6FA804A96C
:10191A0005AA06AB07D007D006D005D00412097174
:10192A00A804A905AA06AB07D007D006D005D0049B
:10193A001209717830121069783A7401F27848E223
:10194A00FC08E2FD08E2FE08E2FFE47B0AFAF9F885
:10195A00120FB57848121069783AE204F2E2B40438
:10196A00DCE4783AF27850E2FC08E2FD08E2FE088C
:10197A00E2FF784CE2FB08E2F908E2FA08E2CBF867
:10198A00120A66E4FBFA797A7844120C0C60025067
:10199A00217850E2FC08E2FD08E2FE08E2FFE4FBDF
:1019AA00FA797A7844120B6F7850121069783CE20F
:1019BA0004F2783AE204F2E2B403AAE4783AF2785A
:1019CA0035E2FF783AE2FEC3EF6480F8EE6480986D
:1019DA0050547850E2FC08E2FD08E2FE08E2FF7883
:1019EA004CE2FB08E2F908E2FA08E2CBF8120A66CE
:1019FA00E4FBFA7980783F120C0C6023402178507E
:101A0A00E2FC08E2FD08E2FE08E2FFE4FBFA797A6A
:101A1A007844120A667850121069783CE214F27817
:101A2A003AE204F28099783A7401F27850E2FC08BA
:101A3A00E2FD08E2FE08E2FF784CE2FB08E2F90860
:101A4A00E2FA08E2CBF8120A66C004C005C006C072
:101A5A00077848E2FC08E2FD08E2FE08E2FFEC1221
:101A6A000C8AA804A905AA06AB07D007D006D00598
:101A7A00D004120C0C602D402B7850E2FC08E2FDD9
:101A8A0008E2FE08E2FFE4FBFA79207841120A66CE
:101A9A007850121069783DE214F2783AE204F2E2E0
:101AAA0064047087E4783AF2783AE2FFC364809477
:101ABA00824003021BB3EF7850600FE2FC08E2FD9C
:101ACA0008E2FE08E2FF7830800DE2FC08E2FD0839
:101ADA00E2FE08E2FF782CE2FB08E2F908E2FA08E3
:101AEA00E2CBF8120A66120CC878401210697848DC
:101AFA00E2FC08E2FD08E2FE08E2FF7844121069FF
:101B0A00783AE2243EF8E2FF122D64E4783BF27858
:101B1A0044E2FB08E2F908E2FA08E2CBF8C00078EE
:101B2A0040E2FC08E2FD08E2FE08E2FFD000122AC9
:101B3A009CEF2430FF122D64783DE2FF783BE2B53A
:101B4A0007057F2E122D647840E2FC08E2FD08E2C8
:101B5A00FE08E2FF08E2FB08E2F908E2FA08E2CB33
:101B6A00F8122A9CAC00AD01AE02AF037840121005
:101B7A00697844E2FC08E2FD08E2FE08E2FFE47B41
:101B8A000AFAF9F8122A9C7844121069783BE2049E
:101B9A00F2E2C3648094845003021B197834E26031
:101BAA0008783AE204F2021AB2783CE2FF3395E08E
:101BBA00FE74242FF58274213EF583E493FF022DEF
:011BCA0064B6
:102BD400C004C005C006C00778301210A60000006B
:102BE40000E47834F27827E27835F27828E2FC08B9
:102BF400E2FD08E2FE08E2FF7836121069D007D041
:082C040006D005D0040216D52C
:0A2800007821EEF208EFF208EDF285
:10280A00E408F2087C007DFE7BFF7A21792AFE7FAC
:10281A0005120E197822E2700218E260367821E277
:10282A00FA08E2FB7C007D0AFFAE02120EFDED24DF
:10283A0030FF7824E22425F8EFF27C007D0AAF030A
:10284A00AE02120EFD7821EEF208EFF27824E204CD
:10285A00F280C17823E2600F2424F8E2FF122D648B
:07286A007823E214F280EC78
:012871002244
:102CE30075D902E4F5F9F5E975FAC075EAC075DA44
:062CF30053D2BFD2AF2254
:03003B00022A0591
:102A0500C0E0C083C082C0D075D000C000C006C081
:012A150007B9
:102A1600C2D87809E2FF7802E22FFEEF90212F93C9
:102A2600F5FAAF06EF90222F9324FF929208E2FE6A
:0C2A360008E2FF780AE22FF218E23EF2FC
:0F2A4200D007D006D000D0D0D082D083D0E032E1
:1028E1007822EEF208EFF218E2FC08E2FD7805EC3E
:1028F100F208EDF2E4120C8FE4FBFA7980784712CA
:102901000A667B007A2479747847120B6F120CC81F
:102911007803EEF208EFF2FDAC06E4120C8F7B00B7
:102921007A2479747847120A66E4FBFA7980784749
:10293100120B6F90007012105DE47809F208F278C2
:0E29410023E2700218E27003C2DE22D2DE2210
:102B5D00EF75F004120E3FAFF0C3EF648094805018
:102B6D000474042FFFEF70037802F2EFB4010578BF
:102B7D00027440F2EFB4020578027480F2EFB403F0
:0C2B8D0005780274C0F29000C9EFF0223D
:092D8D009000C9E004FF022B5D77
:102C7300EF7004C2A2C2A1EFB40104C2A2D2A1EFB9
:102C8300B40204D2A2C2A1EFB40304D2A2D2A1908F
:052C93000087EFF022B4
:102D3100900087E004FF75F004120E3FAFF0022C03
:012D4100731E
:102C0C00D3EF6480948340027F03C3EF648094808D
:102C1C005002E4FFEF7004C296C294EFB40104C2F8
:102C2C0096D294EFB40204D296C294EFB40304D2B9
:082C3C0096D2947808EFF22211
:102D42007808E204FF75F004120E3FAFF0022C0C7B
:102779007821EFF2BFFF27E4F27805E2FE08E2FFD5
:1027890064644E7004782104F2BE0308BFE805783A
:10279900217402F2BE1E07BF8504E47821F2782174
:1027A900E290006FF0700F7F64FE1228E1C295D2AB
:1027B900A07807740CF27821E2B401107FE87E0357
:1027C9001228E1C295C2A078077406F27821E2B412
:1027D90002107F857E1E1228E1D295C2A078077467
:1027E90006F2758D2F758BABE4900079F090008817
:0727F900F07809F208F2225A
:0B2B9900E0FEA3E0FFA3E0FCA3E0FDD2
:102BA400C3EE648094805007C3E49FFFE49EFEC399
:102BB400EC648094805007C3E49DFDE49CFCD3ED59
:102BC4009FEE6480F8EC6480984004AE04AF052264
:0A003E00780CEBF208EAF208E9F290
:10004800900096E0FF3395E0FEA3E0FD3395E0FCD9
:10005800EF2DFFEE3C9000CAF0A3EFF090008CE08B
:10006800FF3395E0FEA3E0FD3395E0FCEF2DFFEEB6
:100078003C9000CCF0A3EFF0A31210750000000034
:100088009000D612107500000000780CE2FB08E220
:10009800FA08E2F9900006120F7DFDACF0EC120CA4
:1000A8008FC004C005C006C007780CE2FB08E2FA5E
:1000B80008E2F9900006120F7DFDACF0EC120C8FEF
:1000C800D003D002D001D000120A66C004C005C017
:1000D80006C007780CE2FB08E2FA08E2F99000048F
:1000E800120F7DFDACF0EC120C8FC004C005C006E9
:1000F800C007780CE2FB08E2FA08E2F99000041263
:100108000F7DFDACF0EC120C8FD003D002D001D0E3
:1001180000120A66D003D002D001D00012097590EF
:1001280000DA12105D780CE2FB08E2FA08E2F990B6
:100138000006120F7DFDACF0EC120C8FC004C00558
:10014800C006C007780CE2FB08E2FA08E2F9900062
:1001580002120F7DFDACF0EC120C8FD003D002D050
:1001680001D000120A66C004C005C006C007780C9A
:10017800E2FB08E2FA08E2F9900004120F7DFDACF8
:10018800F0EC120C8FC004C005C006C007780CE262
:10019800FB08E2FA08E2F9120F52FDACF0EC120C7F
:1001A8008FD003D002D001D000120A66D003D0024B
:1001B800D001D000120975120C799000DE12105D82
:1001C800780CE2FB08E2FA08E2F9900002120F7DCF
:1001D800FDACF0EC120C8FC004C005C006C0077857
:1001E8000CE2FB08E2FA08E2F9900004120F7DFD28
:1001F800ACF0EC120C8FD003D002D001D000120A60
:1002080066C004C005C006C007780CE2FB08E2FA25
:1002180008E2F9900006120F7DFDACF0EC120C8F8D
:10022800C004C005C006C007780CE2FB08E2FA0863
:10023800E2F9120F52FDACF0EC120C8FD003D00291
:10024800D001D000120A66A804A905AA06AB07D0F7
:1002580007D006D005D004120971120C799000E27B
:1002680012105D9000DAE0F8A3E0F9A3E0FAA3E049
:10027800FBC000C001C002C003780FE2FB08E2FA2D
:1002880008E2F9900002120E7AFF3395E0FEEF784B
:1002980002C333CE33CED8F9242FF58274233EF52A
:1002A8008312104DC000C001C002C003780FE2FBEA
:1002B80008E2FA08E2F9120E61FF3395E0FEEF78E2
:1002C80002C333CE33CED8F9242FF58274233EF5FA
:1002D8008312103DD003D002D001D000120B6FD092
:1002E80003D002D001D000120A669000DA12105D25
:1002F8009000DAE0FCA3E0FDA3E0FEA3E0FFC00469
:10030800C005C006C007900087E0FF3395E0FE7483
:10031800922FF58274003EF583E0FC120C947B006A
:100328007A40791C7846120B6FE4FBFA7980783FA3
:10033800120975C004C005C006C007900087E0FF19
:100348003395E0FEEF7802C333CE33CED8F9243F9D
:10035800F58274233EF58312104DD007D006D005E0
:10036800D004120A66A804A905AA06AB07D007D0CC
:1003780006D005D004120B6F9000DA12105D780FCA
:10038800E2FB08E2FA08E2F9120E61B4015E90009D
:10039800CEE0F8A3E0F9A3E0FAA3E0FBC000C001B7
:1003A800C002C00390008CE0FC120C94D003D00271
:1003B800D001D0001209759000CE12105D9000D6C1
:1003C800E0F8A3E0F9A3E0FAA3E0FBC000C001C095
:1003D80002C003900096E0FC120C94D003D002D027
:1003E80001D0001209759000D612105D780FE2FB5B
:1003F80008E2FA08E2F9120E61B4025E9000CEE05B
:10040800F8A3E0F9A3E0FAA3E0FBC000C001C00232
:10041800C00390008DE0FC120C94D003D002D001F0
:10042800D0001209759000CE12105D9000D6E0F849
:10043800A3E0F9A3E0FAA3E0FBC000C001C002C03A
:1004480003900097E0FC120C94D003D002D001D0A6
:10045800001209759000D612105D780FE2FB08E2D1
:10046800FA08E2F9120E61B403669000CEE0F8A330
:10047800E0F9A3E0FAA3E0FBC000C001C002C0039A
:100488009000CCE0FCA3E0FDEC120C8FD003D0026E
:10049800D001D0001209759000CE12105D9000D6E0
:1004A800E0F8A3E0F9A3E0FAA3E0FBC000C001C0B4
:1004B80002C0039000CAE0FCA3E0FDEC120C8FD050
:1004C80003D002D001D0001209759000D612105D39
:1004D800780FE2FB08E2FA08E2F9900002120E7ABD
:1004E800B4016E9000CEE0FCA3E0FDA3E0FEA3E023
:1004F800FFC004C005C006C00790008CE0FC120CC9
:1005080094A804A905AA06AB07D007D006D005D041
:10051800041209719000CE12105D9000D6E0FCA381
:10052800E0FDA3E0FEA3E0FFC004C005C006C007CD
:10053800900096E0FC120C94A804A905AA06AB0743
:10054800D007D006D005D0041209719000D6121039
:100558005D780FE2FB08E2FA08E2F9900002120E59
:100568007AB4026E9000CEE0FCA3E0FDA3E0FEA307
:10057800E0FFC004C005C006C00790008DE0FC1273
:100588000C94A804A905AA06AB07D007D006D00585
:10059800D0041209719000CE12105D9000D6E0FCD4
:1005A800A3E0FDA3E0FEA3E0FFC004C005C006C0B1
:1005B80007900097E0FC120C94A804A905AA06ABC2
:1005C80007D007D006D005D0041209719000D612C2
:1005D800105D780FE2FB08E2FA08E2F990000212D7
:1005E8000E7AB403769000CEE0FCA3E0FDA3E0FE13
:1005F800A3E0FFC004C005C006C0079000CCE0FC23
:10060800A3E0FDEC120C8FA804A905AA06AB07D03D
:1006180007D006D005D0041209719000CE12105DE3
:100628009000D6E0FCA3E0FDA3E0FEA3E0FFC00439
:10063800C005C006C0079000CAE0FCA3E0FDEC12AC
:100648000C8FA804A905AA06AB07D007D006D005C9
:10065800D0041209719000D612105D9000CEE0FC13
:10066800A3E0FDA3E0FEA3E0FFC004C005C006C0F0
:1006780007900087E0FF3395E0FE748E2FF58274B3
:10068800003EF583E0FC120C94A804A905AA06AB69
:1006980007D007D006D005D0041209719000CE12F9
:1006A800105D9000CEE0F8A3E0F9A3E0FAA3E0FB28
:1006B800C000C001C002C0037B007A2879F47845E5
:1006C800900070E0FCA3E0FDA3E0FEA3E0FF120BA6
:1006D8006FE4FBFA797A7844120B6FD003D002D01A
:1006E80001D000120A669000CE12105D9000CEE094
:1006F800FCA3E0FDA3E0FEA3E0FFA804A905AA0669
:10070800FB120A66E4FBFAF97840120B6FA804A9F9
:1007180005AA06AB07E4FFFE7D807C3F12097190B5
:1007280000D212105D9000DAE0F8A3E0F9A3E0FA35
:10073800A3E0FBC000C001C002C0037B007A40797F
:100748001C78469000D6E0FCA3E0FDA3E0FEA3E001
:10075800FF120B6FE4FBFA7980783F120975D0031A
:10076800D002D001D000120A669000DA12105D9013
:1007780000CEE0FCA3E0FDA3E0FEA3E0FF9000E2D2
:10078800E0F8A3E0F9A3E0FAA3E0FB120A66C004CC
:10079800C005C006C0079000D2E0FCA3E0FDA3E0BE
:1007A800FEA3E0FF9000DEE0F8A3E0F9A3E0FAA3DF
:1007B800E0FB120A66D003D002D001D00012097102
:1007C8009000E612105D9000D2E0FCA3E0FDA3E0EB
:1007D800FEA3E0FF9000E2E0F8A3E0F9A3E0FAA3AB
:1007E800E0FB120A66C004C005C006C0079000CE30
:1007F800E0FCA3E0FDA3E0FEA3E0FF9000DEE0F84C
:10080800A3E0F9A3E0FAA3E0FB120A66D003D00242
:10081800D001D0001209759000E212105D9000E638
:10082800E0FCA3E0FDA3E0FEA3E0FF9000DE1210D1
:100838005D78127401F27812E2F9C36480948440FE
:1008480003020932E9FF3395E0FEEF7802C333CEA5
:1008580033CED8F92494F58274003EF583E0FCA3E6
:10086800E0FDA3E0FEA3E0FFC004C005C006C0078A
:100878007812E2FF3395E0FEEF7802C333CE33CE31
:10088800D8F9FBAA062498F58274003AF583D007B4
:10089800D006D005D00412105D74A42BF582740024
:1008A8003AF583E0FCA3E0FDA3E0FEA3E0FFC0046B
:1008B800C005C006C0077812E2FF3395E0FEEF7866
:1008C80002C333CE33CED8F9FBAA0624A8F5827426
:1008D800003AF583D007D006D005D00412105D7415
:1008E800B42BF58274003AF583E0FCA3E0FDA3E0A5
:1008F800FEA3E0FFC004C005C006C0077812E2FFEF
:100908003395E0FEEF7802C333CE33CED8F924B85E
:10091800F58274003EF583D007D006D005D00412C6
:10092800105D7812E204F202083E9000DAE0FCA3BF
:10093800E0FDA3E0FEA3E0FF90009812105D900098
:10094800DEE0FCA3E0FDA3E0FEA3E0FF9000A81218
:10095800105D9000E2E0FCA3E0FDA3E0FEA3E0FF51
:060968009000B802105DD2
:03001B0002237C41
:10237C00C0E0C0F0C083C082C0D075D000C000C027
:0D238C0001C002C003C004C005C006C007A8
:10239900E4FFFE900079E004F07807E2FDE0C39DD8
:1023A9004009E4F0900088E004F00F900088E0C351
:1023B90094044002E4F090007EE06003022514EFEB
:1023C9004E7003022514122B1F90006FE0FD339508
:1023D900E0FC74892DF58274003CF583E0FD3395AA
:1023E900E0FCC3EF9DFFEE9CFE9000C9E0C3648052
:1023F90094825006AC06AD078007C3E49FFDE49EB6
:10240900FC900088E0FB25E0247FF582E43400F5A8
:1024190083ECF0A3EDF07808E2FD74742BF582E407
:102429003400F583EDF0C3EE6480948050047D029E
:1024390080027D00900088E0FC247AF582E4340073
:10244900F583E02DF0747A2CF582E43400F583E00D
:10245900FD75F004120E3FADF0EDF0EC640160057E
:10246900EC6403707B900088E0B4010FD297900070
:1024790083122B99900076E0780BF2900088E0B4F3
:10248900030FC29790007F122B99900074E0780B8C
:10249900F2D3EF9480EE648094A54007780BE214A0
:1024A900F28036C3EF9440EE648094815008780B33
:1024B900E22403F28023C3EF94C0EE648094835036
:1024C90008780BE22402F28010C3EF9440EE648096
:1024D900948B5005780BE204F2780BE2FF122C0C76
:1024E900900088E0045403247AF582E43400F583EB
:1024F900E0FF122B5D780F7401F2087400F2087482
:0B25090074F27B017A00797F12003E23
:10251400D007D006D005D004D003D002D001D0001B
:0B252400D0D0D082D083D0F0D0E032C5
:041BCB007821EFF29C
:101BCF009000EA121075000000009000EE121075E0
:101BDF00000000009000F212107500000000E47881
:101BEF0022F29000EAE0F8A3E0F9A3E0FAA3E0FB09
:101BFF00C000C001C002C0037822E2FF3395E0FEAF
:101C0F00EF7802C333CE33CED8F92498F58274001F
:101C1F003EF583E0FCA3E0FDA3E0FEA3E0FFE4FBC1
:101C2F00FA79807840120B6FD003D002D001D00028
:101C3F001209759000EA12105D9000EEE0F8A3E033
:101C4F00F9A3E0FAA3E0FBC000C001C002C0037813
:101C5F0022E2FF3395E0FEEF7802C333CE33CED8C6
:101C6F00F924A8F58274003EF583E0FCA3E0FDA300
:101C7F00E0FEA3E0FFE4FBFA79807840120B6FD00F
:101C8F0003D002D001D0001209759000EE12105D42
:101C9F009000F2E0F8A3E0F9A3E0FAA3E0FBC000A4
:101CAF00C001C002C0037822E2FF3395E0FEEF7857
:101CBF0002C333CE33CED8F924B8F58274003EF583
:101CCF0083E0FCA3E0FDA3E0FEA3E0FFE4FBFA79D1
:101CDF00807840120B6FD003D002D001D0001209D0
:101CEF00759000F212105D7822E204F2E264046053
:101CFF0003021BF17FDA7E0F7DC97C40900070E0FC
:101D0F00F8A3E0F9A3E0FAA3E0FB120A669000FA49
:101D1F0012105DE4FF122D7A7806E26464700218E7
:101D2F00E270057F41122D647806E2B4E80A18E2EA
:101D3F00B403057F42122D647806E2B4850A18E2D7
:101D4F00B41E057F43122D64900087E02431FF12EB
:101D5F002D647821E27003021E879000F2E0FCA34D
:101D6F00E0FDA3E0FEA3E0FFA804A905AA06FB126D
:101D7F000A66C004C005C006C0079000EEE0FCA3D1
:101D8F00E0FDA3E0FEA3E0FFA804A905AA06FB124D
:101D9F000A66D003D002D001D0001209759000EA74
:101DAF00E0F8A3E0F9A3E0FAA3E0FB120B6F122D0A
:101DBF000D7BFF7A207950122C449000EEE0F8A3AF
:101DCF00E0F9A3E0FAA3E0FB9000F6E0FCA3E0FD4E
:101DDF00A3E0FEA3E0FF120B6FC004C005C006C056
:101DEF000778277401F2081210A638D1B717D00759
:101DFF00D006D005D004122BD49000F2E0F8A3E067
:101E0F00F9A3E0FAA3E0FBA3E0FCA3E0FDA3E0FE4F
:101E1F00A3E0FF120B6FC004C005C006C0077827F0
:101E2F007401F2081210A638D1B717D007D006D018
:101E3F0005D004122BD47F02122D7AE4FFFEFDFC95
:101E4F009000F2E0F8A3E0F9A3E0FAA3E0FB120C94
:101E5F000C9000F2E05013FCA3E0FDA3E0FEA3E022
:101E6F00FF120C799000F6021F3CF8A3E0F9A3E0F3
:101E7F00FAA3E0FBA3021F8C9000EAE0FCA3E0FDB5
:101E8F00A3E0FEA3E0FF122D0D7BFF7A2079531202
:101E9F002C449000F6E0F8A3E0F9A3E0FAA3E0FBEE
:101EAF009000EEE0FCA3E0FDA3E0FEA3E0FF120B29
:101EBF006FC004C005C006C0079000F6E0F8A3E0AD
:101ECF00F9A3E0FAA3E0FB9000F2E0FCA3E0FDA38E
:101EDF00E0FEA3E0FF120B6F7830121069783474B4
:101EEF0001F208F2081210A638D1B717D007D006A2
:101EFF00D005D0041216D57FF4122D647F02122D57
:101F0F007AE4FFFEFDFC9000F2E0F8A3E0F9A3E015
:101F1F00FAA3E0FB120C0C9000F6E05053FCA3E088
:101F2F00FDA3E0FEA3E0FF120C799000F2E0F8A30E
:101F3F00E0F9A3E0FAA3E0FB120B6F9000FAE0F8D0
:101F4F00A3E0F9A3E0FAA3E0FB120B6FC004C005F6
:101F5F00C006C00778277404F2081210A62834248C
:101F6F00DCD007D006D005D004122BD47F46804E8C
:101F7F00F8A3E0F9A3E0FAA3E0FB9000F2E0FCA3E2
:101F8F00E0FDA3E0FEA3E0FF120B6F9000FAE0F874
:101F9F00A3E0F9A3E0FAA3E0FB120B6FC004C005A6
:101FAF00C006C00778277402F2081210A6322BCC95
:101FBF0077D007D006D005D004122BD47F48122D2E
:101FCF00649000EEE0FCA3E0FDA3E0FEA3E0FFECD5
:101FDF004D4E4F60459000EEE0F8A3E0F9A3E0FA14
:101FEF00A3E0FBA3E0FCA3E0FDA3E0FEA3E0FF1250
:101FFF000B6F122D6D9000F212105D7F007EC07D71
:10200F00797C449000F2E0F8A3E0F9A3E0FAA3E0B2
:10201F00FB120C0C600E400C80009000F212107539
:10202F004479C000E47827F2081210A600000000DF
:10203F009000F2E0FCA3E0FDA3E0FEA3E0FF022B83
:01204F00D4BC
:10119900E47813F208F208F208F208F208F208F209
:1011A90008F2122AE0122D967BFF7A207956122C2A
:1011B90044E4FF122D7A7BFF7A20795E122C447F5A
:1011C900507E00122C98E4FF1229ABE4F58875894A
:1011D90012F58DF58BD28EC28CD2ABD2A9D2AFD2F9
:1011E900B9FF122CB47596FF7592FC75910375A021
:1011F9000F122CE37F02122B5D7F01122C73122C2C
:101209000C7F011227797819E22401F218E23400DF
:10121900F2E5B0F47815F2E2600C18E2C394FF50DD
:1012290005E204F28004E47814F2E47813F2781504
:10123900E2FF600AC313F27813E204F280F0781334
:10124900E27815F218E2B404077817740AF28004F8
:10125900E47815F27817E26007E214F2C2A380027B
:10126900D2A37815E2B40822122D847BFF7A207963
:101279006E122C44E4FF122D7A7BFF7A20797B12BF
:101289002C44E4900078F07815F2900078E0FFC3E0
:101299009401401AEFD3940450147815E2B407036B
:1012A900122D317815E2B406057FFF1227799000D7
:1012B90078E070257815E26003122D847815E2FF35
:1012C900C394014010EFD39407500A900078EFF0CF
:1012D900E49000C8F0E47815F2900078E0B40119C0
:1012E900E490007EF07815E2B40107781AE204541C
:1012F90001F2781AE2FF121BCB900078E0640270C9
:1013090022FF122D157BFF7A207988122C44900038
:1013190074122D607BFF7A20798C122C4490007610
:10132900122D60900078E06403706D90007E04F0E7
:101339007815E2B40103122D427815E2FFB40302D5
:10134900B297EFB40403122D8DE4FF122D157BFF24
:101359007A207991122C449000C9122D607BFF7A72
:10136900207996122C443097047F3180027F301205
:101379002D647BFF7A20799B122C447808E2243073
:10138900FF122D64E4FF122D7A7819E2541F7008B8
:10139900122B1F7D05122800900078E06407600376
:0313A9000216CB5E
:1013AC00781E04F208F208F29000C8E0FF70167B79
:1013BC0001781B04F2087400F2087489F2E4781FB7
:1013CC00F2087402F2EFB40115781B7401F2087480
:1013DC0000F208748AF2781F7401F20804F2EFB478
:1013EC000214781B7401F2087400F208748BF27802
:1013FC001F7402F208F2EFB40315781B7401F208A3
:10140C007400F208748EF2781F7402F2E408F2EFA2
:10141C00B40415781B7401F2087400F208748FF28E
:10142C00781F7402F20814F2EFB40514781B7401DF
:10143C00F2087400F2087490F2781F7402F208F249
:10144C00EFB40615781B7401F2087400F20874915D
:10145C00F2781F7402F20804F2EFB40715781B74CB
:10146C0001F2087400F208748CF2781F7402F2080E
:10147C0014F2EFB40815781B7401F2087400F2082A
:10148C00748DF2781F7402F20814F2EFB409177815
:10149C001B7401F2087400F2087492F2087402F2E0
:1014AC000814F2E408F2EFB40A16781B7401F2087F
:1014BC007400F2087493F2087402F20814F208F241
:1014CC00EFB40B17781B7401F2087400F2087494D3
:1014DC00F2087402F20814F20804F2EFB40C187853
:1014EC001B7401F2087400F2087495F2087402F28D
:1014FC000814F2087403F2EFB40D16781B7401F2A1
:10150C00087400F2087496F2087402F20814F208D7
:10151C00F2EFB40E16781B7401F2087400F2087422
:10152C0097F2087402F20814F208F27815E2B4018A
:10153C0012781EE2FF781BE2FB08E2FA08E2F9EFF0
:10154C00120EA77815E2B40217781BE2FB08E2FA38
:10155C0008E2F9120E61FF08E2FEC3EF9E120EC9FB
:10156C007815E2B4030D7F011229AB90006FE0FFF8
:10157C001227797815E2B4040E781BE2FB08E2FA24
:10158C0008E2F9E4120EC97815E2FFB405159000D3
:10159C00C8E07005740EF080069000C8E014F0E40A
:1015AC007801F2EFB406159000C8E0B40E04E4F034
:1015BC0080069000C8E004F0E47801F27815E2B4FB
:1015CC0007117801E204FF75F002120E3FAFF078BC
:1015DC0001EFF27815E2FF6404704E7800E204F239
:1015EC006405704CF290008C7410F0A37412F0E44B
:1015FC00900096F0A3F09000897414F0A314F0A35B
:10160C00740EF0E4900090F090008FF090008EF04B
:10161C009000917414F0E4900095F0900094F09088
:10162C000093F0900092F08007EF6004E47800F2F1
:10163C007801E2602590006FE0FE781FE2FF6E609B
:10164C0003122779900087E0FE7820E2FF6E60039A
:10165C00122C737F01121BCB8065122D84E4FF12B8
:10166C002D159000C8E075F003A4244FF582E434E6
:10167C0023F583E493FB740193FA740293F9122C0F
:10168C0044E4FF122D7A781BE2FB08E2FA08E2F937
:10169C00120E61FC120C94C004C005C006C007E415
:1016AC007827F2081210A600000000D007D006D050
:0F16BC0005D004122BD47BFF7A217918122C440D
:0A16CB007F207E4E122D1F02120F29
:10096E00020D34E86480F8E933E83360110460F076
:10097E00ED33EC337009E8FCE9FDEAFEEBFF2204EF
:10098E0060DED3EB9FEA9EE99DE8C2E78CF0C2F7EA
:10099E0095F0400CE8CCF8E9CDF9EACEFAEBCFFBB6
:1009AE00120CFF85D0F05804700320D5B3E8047004
:1009BE00075002B2D5020D3E92D5EC0460F7E4CC9E
:1009CE00C0E0C398F8603B94186008400DD0E0FB7F
:1009DE00020D16E4FBFAC9FC8028E830E406E4C9EF
:1009EE00FBE4CAFCE830E305E4C9CACBFCE85407D3
:1009FE006010F8C3E913F9EA13FAEB13FBEC13FCDE
:100A0E00D8F130F52FC3E49CFCEF9BFFEE9AFEED80
:100A1E0099FDD0E0FBEF4E4D4C701222DB03020D20
:100A2E003BEC2CFCEF33FFEE33FEED33FDED30E708
:100A3E00EB020D16EF2BFFEE3AFEED39FDD0E0FB8B
:100A4E0050130BBB0003020D3EED13FDEE13FEEF34
:080A5E0013FFEC13FC020D165E
:100A6600EC4D6011E8497017ED33EC3304600DE48A
:100A7600FCFFFEFD22E933E8330470F8020D341260
:100A86000CFF58046009E4CC248150062850090262
:100A96000D3E284003020D3BC0E0EB4A7044B9808E
:100AA60006D0E0FB020D2AEF4E701CBD8008EBFF5E
:100AB600EAFEE9FD80EBE98DF0A4FEE5F0020B4FBE
:100AC600E9CDF9EAFEEBFFEF89F0A4FCE5F0CE896B
:100AD600F0A42EFFE435F0CD89F0A42DFEE435F028
:100AE6008067EF4E7005BD80D780C3EF8BF0A4AC56
:100AF600F0EE8BF0A42CFCE435F0F8EF8AF0A42C91
:100B0600E5F038FCE433CB8DF0A42CFCE5F03BF8A3
:100B1600EE8AF0A42CFCE5F038F8E433CF89F0A493
:100B26002CFCE5F038CF3400CE89F0A42FFFE5F099
:100B36003EFEE433C98DF0A42EFEE5F039CD8AF0F1
:100B4600A42FFFE5F03EFEE43DFD33D0E0FB500769
:100B56000BBB000F020D3EEC2CFCEF33FFEE33FE19
:060B6600ED33FD020D1647
:100B6C00020D3EEC5D046005E859047003020D347F
:100B7C00120CFF580460F6EC4860F2EC7004FDFEB9
:100B8C00FF22C860DB2481C85009C398600250065C
:100B9C00020D3B9850CAF582E9294B4A7005AB828D
:100BAC00020D2A75F0007C1A7880C3EF9BEE9AED4B
:100BBC0099400DC3EF9BFFEE9AFEED99FDE842F0D4
:100BCC00DC23ACF0D0E0FFD0E0FED0E0FDAB822027
:100BDC00E7101BEB60BAEC2CFCEF33FFEE33FEEDB1
:100BEC0033FD020D16E803F830E705C0F075F00090
:100BFC00EF2FFFEE33FEED33FD40B830E7C280AA95
:100C0C0074F8CC6480CCC86480C8F582046043C39B
:100C1C00EB9FF5F0EA9E42F0E99D42F0E89C45F02E
:100C2C0060305018E5825FFFE582F42B5582FB5053
:100C3C00210ABA001D09B90019088016E5825BFB70
:100C4C00E582F42F5582FF50090EBE00050DBD0044
:100C5C00010CC3EB9FF5F0EA9E42F0E99D42F0E8EF
:0D0C6C009C45F06007CC4820E701B3EC2266
:100C7900ED33EC33600A047003BD8004ECB2E7FC89
:010C89002248
:100C8A0075F020800E75F010800575F0087D007EE5
:100C9A00007F003392D530D503121004EC33401094
:100CAA00EF33FFEE33FEED33FDEC33FCD5F0ED22EE
:0E0CBA00E5F0247EA2D513CC92E7CDCEFF222A
:100CC800EDD2E7CD33EC3392D524814006E4FFFE24
:100CD800FDFC22FCE4CFCECDCC24E0501174FF8083
:100CE800EDC3CC13CCCD13CDCE13CECF13CF047020
:070CF800F030D5DE0210040C
:0D2D6D00ED33EC3360065004EC6480FC2272
:102613007854121069E4FFFEFDFC7858E2FB08E2EF
:10262300F908E2FA08E2CBF8120C0C70030226E870
:102633007858E2FC08E2FD08E2FE08E2FF122D6D85
:1026430078601210697854E2FC08E2FD08E2FE08A3
:10265300E2FF122D6D785C121069785CE2FC08E2EF
:10266300FD08E2FE08E2FF08E2FB08E2F908E2FAED
:1026730008E2CBF8120C0C700E7854E2FC08E2FD71
:1026830008E2FE08E2FF22785CE2FC08E2FD08E2D1
:10269300FE08E2FF08E2FB08E2F908E2FA08E2CBEF
:1026A300F8120C0C503E7858E2FB08E2F908E2FA03
:1026B30008E2CBF8E8C0E07854E2FC08E2FD08E267
:1026C300FE08E2FFD0E0F8120B6F7BFE7A00795C24
:1026D30012252F7858E2FB08E2F908E2FA08E2CB68
:0A26E300F8020A66E4FFFEFDFC2287
:100CFF00E9D2E7C933E833F892D5EDD2E7CD33EC3B
:070D0F0033FC5002B2D522B3
:100D1600EC30E7100FBF000C0EBE00080DBD00043E
:100D26000BEB6014A2D5EB13FCED92E7FD2274FFEA
:100D3600FCFDFEFF22E480F8A2D574FF13FC7D8043
:030D4600E480EF57
:10252F0078641210697868EBF208EAF208E9F2743D
:10253F00FFFFFEFDFC7864E2FB08E2F908E2FA080F
:10254F00E2CBF8C312101260387F807E967D187C24
:10255F004B7864E2FB08E2F908E2FA08E2CBF812E2
:10256F000C0C6002501B7F807E967D187CCB7864AC
:10257F00E2FB08E2F908E2FA08E2CBF8120C0C5081
:10258F001F7864E2FC08E2FD08E2FE08E2FF08E2C1
:10259F00FB08E2FA08E2F9121023E4FFFEFDFC2229
:1025AF007864E2FC08E2FD08E2FE08E2FF120CC8C4
:1025BF00786B121069786BE2FC08E2FD08E2FE0806
:1025CF00E2FFEC120C8A7868E2FB08E2FA08E2F903
:1025DF00121023786BE2FC08E2FD08E2FE08E2FF2E
:1025EF00EC120C8AECC0E0C9EDC9CAEECACBEFCB36
:1025FF007864E2FC08E2FD08E2FE08E2FFD0E0F8B2
:04260F001209712219
:030000000226EDE8
:0C26ED00787FE4F6D8FD758108022734E0
:100D4900E709F608DFFA8046E709F208DFFA803E8C
:100D590088828C83E709F0A3DFFA8032E309F60879
:100D6900DFFA8078E309F208DFFA807088828C83E1
:100D7900E309F0A3DFFA806489828A83E0A3F60895
:100D8900DFFA805889828A83E0A3F208DFFA804C6F
:100D990080D280FA80C680D4806980F28033801046
:100DA90080A680EA809A80A880DA80E280CA8033AF
:100DB90089828A83ECFAE493A3C8C582C8CCC58327
:100DC900CCF0A3C8C582C8CCC583CCDFE9DEE780F7
:100DD9000D89828A83E493A3F608DFF9ECFAA9F076
:100DE900EDFB2289828A83ECFAE0A3C8C582C8CCCC
:100DF900C583CCF0A3C8C582C8CCC583CCDFEADEE5
:100E0900E880DB89828A83E493A3F208DFF980CC46
:100E190088F0EF60010E4E60C388F0ED2402B4043F
:100E29000050B9F582EB2402B4040050AF232345E6
:060E39008223900D997365
:100E3F00C2D530F707B2D563F0FF05F030E70CB23B
:100E4F00D5F4048463F0FF05F080018430D502F4FB
:020E5F0004226B
:100E6100BB010689828A83E0225002E722BBFE028F
:090E7100E32289828A83E49322C2
:100E7A00BB010CE58229F582E5833AF583E022502D
:100E8A0006E92582F8E622BBFE06E92582F8E22277
:0D0E9A00E58229F582E5833AF583E4932291
:100EA700BB010989828A83F8E028F022500327F7DB
:100EB70022BBFE05F8E328F3228A838982F8E493AC
:020EC7002822DF
:100EC900BB010689828A83F0225002F722BBFE0108
:020ED900F32202
:100EDB00F8BB010DE58229F582E5833AF583E8F04D
:100EEB00225006E92582C8F622BBFE05E92582C8F9
:020EFB00F222E1
:100EFD00BC000BBE0029EF8DF084FFADF022E4CCD9
:100F0D00F875F008EF2FFFEE33FEEC33FCEE9DECA1
:100F1D00984005FCEE9DFE0FD5F0E9E4CEFD22EDE7
:100F2D00F8F5F0EE8420D21CFEADF075F008EF2F31
:100F3D00FFED33FD4007985006D5F0F222C398FD22
:050F4D000FD5F0EA22BF
:100F5200BB010A89828A83E0F5F0A3E0225006876A
:100F6200F009E71922BBFE07E3F5F009E31922892C
:0B0F7200828A83E493F5F0740193225F
:100F7D00BB0110E58229F582E5833AF583E0F5F0B2
:100F8D00A3E0225009E92582F886F008E622BBFE8F
:100F9D000AE92582F8E2F5F008E222E5832AF583D5
:080FAD00E993F5F0A3E993229A
:100FB500E88FF0A4CC8BF0A42CFCE98EF0A42CFCDB
:100FC5008AF0EDA42CFCEA8EF0A4CDA8F08BF0A459
:100FD5002DCC3825F0FDE98FF0A42CCD35F0FCEBB8
:100FE5008EF0A4FEA9F0EB8FF0A4CFC5F02ECD397D
:0F0FF500FEE43CFCEAA42DCE35F0FDE43CFC22EA
:102A9C00C2D5E830E70FB2D5E4C39BFBE49AFAE465
:102AAC0099F9E498F8EC30E717B2D5122AD2121043
:102ABC00FBE4C39BFBE49AFAE499F9E498F88003ED
:102ACC001210FB30D50DE4C39FFFE49EFEE49DFD88
:042ADC00E49CFC2258
:0E100400C3E49FFFE49EFEE49DFDE49CFC22FD
:10101200EB9FF5F0EA9E42F0E99D42F0E89C45F034
:0110220022AB
:10102300BB010789828A8302105D5005E9F802112A
:0A1033008DBBFE05E9F802106922EA
:10103D00E493FC740193FD740293FE740393FF22F9
:10104D00E493F8740193F9740293FA740393FB22F9
:0C105D00ECF0A3EDF0A3EEF0A3EFF02206
:0C106900ECF208EDF208EEF208EFF222C3
:10107500A8828583F0D083D08212108C12108C1236
:10108500108C12108CE473E493A3C583C5F0C5835B
:10109500C8C582C8F0A3C583C5F0C583C8C582C8C5
:0110A5002228
:1010A600D083D082E493F208740193F20874029319
:0910B600F208740393F274047350
:1026F900021199E493A3F8E493A34003F68001F24D
:1027090008DFF48029E493A3F85407240CC8C333E1
:10271900C4540F4420C8834004F456800146F6DFB0
:10272900E4800B010204081020408090294FE47EC8
:10273900019360BCA3FF543F30E509541FFEE493A5
:10274900A360010ECF54C025E060A840B8E493A36C
:10275900FAE493A3F8E493A3C8C582C8CAC583CA97
:10276900F0A3C8C582C8CAC583CADFE9DEE780BE4F
:0129AA00002C
:1010BF0075F008758200EF2FFFEE33FECD33CDCCE8
:1010CF0033CCC58233C5829BED9AEC99E58298406B
:1010DF000CF582EE9BFEED9AFDEC99FC0FD5F0D648
:1010EF00E4CEFBE4CDFAE4CCF9A88222B800C1B972
:1010FF000059BA002DEC8BF084CFCECDFCE5F0CBB0
:10110F00F97818EF2FFFEE33FEED33FDEC33FCEBE8
:10111F0033FB10D703994004EB99FB0FD8E5E4F9A3
:10112F00FA227818EF2FFFEE33FEED33FDEC33FC90
:10113F00C933C910D7059BE99A4007EC9BFCE99A84
:10114F00F90FD8E0E4C9FAE4CCFB2275F010EF2FC9
:10115F00FFEE33FEED33FDCC33CCC833C810D707C9
:10116F009BEC9AE899400AED9BFDEC9AFCE899F804
:0E117F000FD5F0DAE4CDFBE4CCFAE4C8F92297
:0C118D00ECF608EDF608EEF608EFF6228E
:00000001FF

642
uuLED.hex Normal file
View File

@ -0,0 +1,642 @@
:101A4200EB88B3BAD87A7BA8FBFA3BC90212320000
:101A520000000000F1190BE91B329B6BFFFFFFFF37
:101A6200FFFFFEFEFDFCFCFBFAF9F8F7F6F5F3F2D8
:101A7200F0EFEDECEAE8E6E5E3E1DEDCDAD8D6D336
:101A8200D1CECCC9C7C4C2BFBCB9B7B4B1AEABA882
:101A9200A5A29F9C999693908C898683807D7A7764
:101AA20074706D6A6764615E5B5855524F4C49476A
:101AB20044413E3C393734322F2D2A282624221F16
:101AC2001D1B1A1816141311100E0D0B0A09080704
:101AD20006050404030202010101010101010101E1
:101AE2000101020203040405060708090A0B0D0E90
:101AF2001011131416181A1B1D1F222426282A2D12
:101B02002F323437393C3E414447494C4F525558A5
:101B12005B5E6164676A6D7074777A7D80838689A3
:101B22008C909396999C9FA2A5A8ABAEB1B4B7B97D
:101B3200BCBFC2C4C7C9CCCED1D3D6D8DADCDEE1B1
:101B4200E3E5E6E8EAECEDEFF0F2F3F5F6F7F8F9A3
:101B5200FAFBFCFCFDFEFEFFFFFFFFFF00000000A2
:101B62000000000000000000000000000000000073
:101B72000000000000000000000000000000000063
:101B82000000000000000000000000000000000053
:101B92000000000000000000000000000000000043
:101BA2000000000000000000000000000000000033
:101BB2000000000000000000000000000000000023
:101BC2000000000000000000000000000000000013
:101BD20000000000000000000000000001010101FF
:101BE20001010101010101010101010101010101E3
:101BF20001010101010101010101010101010101D3
:101C020001010101010101010101010101010101C2
:101C120001010101010101010101010101010101B2
:101C220001010101010101010101010101010101A2
:101C32000101010101010101010101010101010192
:101C42000101010101010101010101010101010182
:101C52000101010101010101010101013F800000B7
:101C6200404000004110000041D8000041A00000A7
:0C1C7200447A0000461C400047C35000AC
:1021C2008605A8FBFA0000008112FF41004501418B
:1021D2000095008210000082030100820C03E84493
:1021E200003D447A00008102004100960041005403
:1021F20001810F0148004C00000000000000004473
:102202000047000100014400410101010141005564
:10221200004100460041004B00810E0641003C0196
:09222200810B0181000081010023
:1024C200E4FDFCC3ED9FEC9E50070DBD00010C80A6
:0124D200F217
:0124D30022E6
:10244D00AB07AA06D3EB9400EA9400400E7F107EF2
:0C245D00271224C2EB1B70EC1A80E9224D
:102469007401A807088002C333D8FCF59DEF2480C6
:09247900F5BC7F017E000224C2C3
:10001E0043BC08E5BC30E4FB53BCE7AFBDEF75F065
:0D002E0004A4ADBE7C002DFFEC35F0FE22D9
:062316001508150815086A
:10231C00A80808E4F208F2A808F2A808E2C364804E
:10232C00948A501512001EA8080808E22FF218E231
:10233C003EF2A808E204F280E1A80808E2FE08E2F6
:01234C00FF91
:07234D000508050805082240
:0E250700E4F5C5F5C7F5C675C4FF75C3FF2220
:100003008FC4EEF5C375C78175C50175C65A75C62C
:07001300A5122507AFC22270
:102482008DC28FC4EEF5C375C78175C50275C65A74
:0624920075C6A502250736
:1024AE008FC4EEF5C375C78175C50375C65A75C65B
:0424BE00A502250747
:10222C00782A7401F2087400F2087456F2EF6028F0
:10223C00E4FFFE1224AEE4FCECFF7E00782AE2FB05
:10224C0008E2FA08E2F98C82758300120D84FD1203
:10225C0024820CECB40FE122E4FCECFF7E001200B3
:10226C0003782AE2FB08E2FA08E2F98C8275830013
:09227C00EF120DE50CECB40FE1CA
:012285002236
:092522007F067805E4F208DFFCF5
:01252B00228D
:1020CD009000BFE0F8A3E0F9A3E0FAA3E0FB120A49
:0420DD0066120CC8B3
:0520E1007837120EB675
:1020E600122522E4783BF2E47B0AFAF9F8C000787C
:1020F60037E2FC08E2FD08E2FE08E2FFD000122209
:10210600D274422BF582741A3AF583E493FF783B36
:10211600E22405F8EFF27837E2FC08E2FD08E2FE79
:1021260008E2FFE47B0AFAF9F81222D27837120E97
:10213600B67837E2FC08E2FD08E2FE08E2FFEC4D65
:0D2146004E4F6009783BE204F2E2B4069AC5
:012153002269
:101E2500FBE0FCA3E0FDA3E0FEA3E0FF120B6F784F
:0A1E3500317401F2780BE27832F20A
:051E3F00782D120EB623
:101E4400E47834F208F208F2FFFEFDFC782DE2FBA0
:101E540008E2F908E2FA08E2CBF8120C0C501A78FE
:101E6400367401F2782DE2FC08E2FD08E2FE08E295
:101E7400FF120C79782D120EB6E47833F2E4FFFEEB
:101E84007D7A7C44782DE2FB08E2F908E2FA08E264
:101E9400CBF8120C0C4021782DE2FC08E2FD08E29C
:101EA400FE08E2FFE4FBFA797A7844120B6F782D8E
:101EB400120EB67834E204F27833E204F2E2B403A8
:101EC400BCE47833F27831E2FF7833E2FEC3EF64A6
:101ED40080F8EE6480985042E4FFFE7D807C3F7879
:101EE4002DE2FB08E2F908E2FA08E2CBF8120C0C46
:101EF4005021782DE2FC08E2FD08E2FE08E2FFE44E
:101F0400FBFA797A7844120A66782D120EB6783480
:101F1400E214F27833E204F280ABE47833F2E4FFC3
:101F2400FE7D7A7C44782DE2FB08E2F908E2FA08A7
:101F3400E2CBF8120C0C5021782DE2FC08E2FD08EB
:101F4400E2FE08E2FFE4FBFA79207841120A66789F
:101F54002D120EB67835E204F27833E204F2E2B4DC
:101F640003BC7F007E407D1C7C46782DE2FB08E2AA
:101F7400F908E2FA08E2CBF8120975120CC812202B
:101F8400E17835E22405F8E22404F27832E26022B2
:101F94007834E2FF3395E0FE745A2FF582741A3ECA
:101FA400F583E4937805F27836E260067805E22456
:021FB40004F235
:011FB6002208
:1024980075D902E4F5F9F5E975FAC075EAC075DA97
:0624A80053D2BFD2AF22A7
:03003B0002228618
:10228600C0E0C083C082C0D075D000C000C006C008
:012296000740
:10229700C2D87810E2FF7802E22FFEEF901A5E9321
:1022A700F5FAAF06EF901B5E9324FF929208E2FEC9
:0C22B70008E2FF7811E22FF218E23EF27C
:0F22C300D007D006D000D0D0D082D083D0E03268
:10215400782BEEF208EFF218E2FC08E2FD780CECC2
:10216400F208EDF2E4120C8FE4FBFA79807847125E
:102174000A667B007A2479747847120B6F120CC8B4
:102184007803EEF208EFF2FDAC06E4120C8F7B004C
:102194007A2479747847120A66E4FBFA79807847DE
:1021A400120B6F90003D120EAAE47810F208F27838
:0E21B4002CE2700218E27003C2DE22D2DE229C
:10235400EF75F004120D49AFF0C3EF648094805020
:102364000474042FFFEF70037802F2EFB4010578D0
:10237400027440F2EFB4020578027480F2EFB40301
:0C23840005780274C0F2900096EFF02281
:09252C00900096E004FF02235424
:10240300EF7004C2A2C2A1EFB40104C2A2D2A1EF31
:10241300B40204D2A2C2A1EFB40304D2A2D2A19007
:052423000054EFF0225F
:1024E600900054E004FF75F004120D49AFF0022489
:0124F60003E2
:1023CB00D3EF6480948340027F03C3EF64809480D7
:1023DB005002E4FFEF7004C296C294EFB40104C242
:1023EB0096D294EFB40204D296C294EFB40304D203
:0823FB0096D294780FEFF22254
:1024F700780FE204FF75F004120D49AFF00223CB09
:10204300782AEFF2BFFF27E4F2780CE2FE08E2FF02
:1020530064644E7004782A04F2BE0308BFE805786E
:102063002A7402F2BE1E07BF8504E4782AF2782A96
:10207300E2700F7F64FE122154C295D2A0780E74D1
:102083000FF2782AE2B401107FE87E03122154C2D2
:1020930095C2A0780E7406F2782AE2B402107F8506
:1020A3007E1E122154D295C2A0780E7406F2782AAD
:1020B300E290003CF0758D2F758BABE4900046F0F9
:0A20C300900055F07810F208F222A8
:0B239000E0FEA3E0FFA3E0FCA3E0FDE3
:10239B00C3EE648094805007C3E49FFFE49EFEC3AA
:1023AB00EC648094805007C3E49DFDE49CFCD3ED6A
:1023BB009FEE6480F8EC6480984004AE04AF052275
:0A003E007814EBF208EAF208E9F288
:10004800900063E0FF3395E0FEA3E0FD3395E0FC0C
:10005800EF2DFFEE3C900097F0A3EFF0900059E0F1
:10006800FF3395E0FEA3E0FD3395E0FCEF2DFFEEB6
:100078003C900099F0A3EFF0A3120EC2000000001C
:100088009000A3120EC2000000007814E2FB08E200
:10009800FA08E2F9900006120E44FDACF0EC120CDE
:1000A8008FC004C005C006C0077814E2FB08E2FA56
:1000B80008E2F9900006120E44FDACF0EC120C8F29
:1000C800D003D002D001D000120A66C004C005C017
:1000D80006C0077814E2FB08E2FA08E2F990000487
:1000E800120E44FDACF0EC120C8FC004C005C00623
:1000F800C0077814E2FB08E2FA08E2F9900004125B
:100108000E44FDACF0EC120C8FD003D002D001D01D
:1001180000120A66D003D002D001D00012097590EF
:1001280000A7120EAA7814E2FB08E2FA08E2F99096
:100138000006120E44FDACF0EC120C8FC004C00592
:10014800C006C0077814E2FB08E2FA08E2F990005A
:1001580002120E44FDACF0EC120C8FD003D002D08A
:1001680001D000120A66C004C005C006C007781492
:10017800E2FB08E2FA08E2F9900004120E44FDAC32
:10018800F0EC120C8FC004C005C006C0077814E25A
:10019800FB08E2FA08E2F9120E19FDACF0EC120CB9
:1001A8008FD003D002D001D000120A66D003D0024B
:1001B800D001D000120975120C799000AB120EAA6A
:1001C8007814E2FB08E2FA08E2F9900002120E4401
:1001D800FDACF0EC120C8FC004C005C006C0077857
:1001E80014E2FB08E2FA08E2F9900004120E44FD5A
:1001F800ACF0EC120C8FD003D002D001D000120A60
:1002080066C004C005C006C0077814E2FB08E2FA1D
:1002180008E2F9900006120E44FDACF0EC120C8FC7
:10022800C004C005C006C0077814E2FB08E2FA085B
:10023800E2F9120E19FDACF0EC120C8FD003D002CB
:10024800D001D000120A66A804A905AA06AB07D0F7
:1002580007D006D005D004120971120C799000AFAE
:10026800120EAA9000A7E0F8A3E0F9A3E0FAA3E031
:10027800FBC000C001C002C0037817E2FB08E2FA25
:1002880008E2F9900002120D84FF3395E0FEEF7842
:1002980002C333CE33CED8F9245EF582741C3EF502
:1002A80083120E9AC000C001C002C0037817E2FB97
:1002B80008E2FA08E2F9120D6BFF3395E0FEEF78D9
:1002C80002C333CE33CED8F9245EF582741C3EF5D2
:1002D80083120E8AD003D002D001D000120B6FD047
:1002E80003D002D001D000120A669000A7120EAA0D
:1002F8009000A7E0FCA3E0FDA3E0FEA3E0FFC0049C
:10030800C005C006C007900054E0FF3395E0FE74B6
:100318005F2FF58274003EF583E0FC120C947B009D
:100328007A40791C7846120B6FE4FBFA7980783FA3
:10033800120975C004C005C006C007900054E0FF4C
:100348003395E0FEEF7802C333CE33CED8F9246E6E
:10035800F582741C3EF583120E9AD007D006D0059C
:10036800D004120A66A804A905AA06AB07D007D0CC
:1003780006D005D004120B6F9000A7120EAA7817AA
:10038800E2FB08E2FA08E2F9120D6BB4015E900094
:100398009BE0F8A3E0F9A3E0FAA3E0FBC000C001EA
:1003A800C002C003900059E0FC120C94D003D002A4
:1003B800D001D00012097590009B120EAA9000A3DC
:1003C800E0F8A3E0F9A3E0FAA3E0FBC000C001C095
:1003D80002C003900063E0FC120C94D003D002D05A
:1003E80001D0001209759000A3120EAA7817E2FB3B
:1003F80008E2FA08E2F9120D6BB4025E90009BE085
:10040800F8A3E0F9A3E0FAA3E0FBC000C001C00232
:10041800C00390005AE0FC120C94D003D002D00123
:10042800D00012097590009B120EAA9000A3E0F864
:10043800A3E0F9A3E0FAA3E0FBC000C001C002C03A
:1004480003900064E0FC120C94D003D002D001D0D9
:10045800001209759000A3120EAA7817E2FB08E2B1
:10046800FA08E2F9120D6BB4036690009BE0F8A35A
:10047800E0F9A3E0FAA3E0FBC000C001C002C0039A
:10048800900099E0FCA3E0FDEC120C8FD003D002A1
:10049800D001D00012097590009B120EAA9000A3FB
:1004A800E0F8A3E0F9A3E0FAA3E0FBC000C001C0B4
:1004B80002C003900097E0FCA3E0FDEC120C8FD083
:1004C80003D002D001D0001209759000A3120EAA21
:1004D8007817E2FB08E2FA08E2F9900002120D84AC
:1004E800B4016E90009BE0FCA3E0FDA3E0FEA3E056
:1004F800FFC004C005C006C007900059E0FC120CFC
:1005080094A804A905AA06AB07D007D006D005D041
:100518000412097190009B120EAA9000A3E0FCA39C
:10052800E0FDA3E0FEA3E0FFC004C005C006C007CD
:10053800900063E0FC120C94A804A905AA06AB0776
:10054800D007D006D005D0041209719000A3120E6E
:10055800AA7817E2FB08E2FA08E2F9900002120D05
:1005680084B4026E90009BE0FCA3E0FDA3E0FEA330
:10057800E0FFC004C005C006C00790005AE0FC12A6
:100588000C94A804A905AA06AB07D007D006D00585
:10059800D00412097190009B120EAA9000A3E0FCEF
:1005A800A3E0FDA3E0FEA3E0FFC004C005C006C0B1
:1005B80007900064E0FC120C94A804A905AA06ABF5
:1005C80007D007D006D005D0041209719000A312F5
:1005D8000EAA7817E2FB08E2FA08E2F99000021284
:1005E8000D84B4037690009BE0FCA3E0FDA3E0FE3D
:1005F800A3E0FFC004C005C006C007900099E0FC56
:10060800A3E0FDEC120C8FA804A905AA06AB07D03D
:1006180007D006D005D00412097190009B120EAACB
:100628009000A3E0FCA3E0FDA3E0FEA3E0FFC0046C
:10063800C005C006C007900097E0FCA3E0FDEC12DF
:100648000C8FA804A905AA06AB07D007D006D005C9
:10065800D0041209719000A3120EAA90009BE0FC2E
:10066800A3E0FDA3E0FEA3E0FFC004C005C006C0F0
:1006780007900054E0FF3395E0FE745B2FF5827419
:10068800003EF583E0FC120C94A804A905AA06AB69
:1006980007D007D006D005D00412097190009B122C
:1006A8000EAA90009BE0F8A3E0F9A3E0FAA3E0FB10
:1006B800C000C001C002C0037B007A2879F47845E5
:1006C80090003DE0FCA3E0FDA3E0FEA3E0FF120BD9
:1006D8006FE4FBFA797A7844120B6FD003D002D01A
:1006E80001D000120A6690009B120EAA90009BE0AF
:1006F800FCA3E0FDA3E0FEA3E0FFA804A905AA0669
:10070800FB120A66E4FBFAF97840120B6FA804A9F9
:1007180005AA06AB07E4FFFE7D807C3F12097190B5
:10072800009F120EAA9000A7E0F8A3E0F9A3E0FA50
:10073800A3E0FBC000C001C002C0037B007A40797F
:100748001C78469000A3E0FCA3E0FDA3E0FEA3E034
:10075800FF120B6FE4FBFA7980783F120975D0031A
:10076800D002D001D000120A669000A7120EAA90FB
:10077800009BE0FCA3E0FDA3E0FEA3E0FF9000AF38
:10078800E0F8A3E0F9A3E0FAA3E0FB120A66C004CC
:10079800C005C006C00790009FE0FCA3E0FDA3E0F1
:1007A800FEA3E0FF9000ABE0F8A3E0F9A3E0FAA312
:1007B800E0FB120A66D003D002D001D00012097102
:1007C8009000B3120EAA90009FE0FCA3E0FDA3E006
:1007D800FEA3E0FF9000AFE0F8A3E0F9A3E0FAA3DE
:1007E800E0FB120A66C004C005C006C00790009B63
:1007F800E0FCA3E0FDA3E0FEA3E0FF9000ABE0F87F
:10080800A3E0F9A3E0FAA3E0FB120A66D003D00242
:10081800D001D0001209759000AF120EAA9000B353
:10082800E0FCA3E0FDA3E0FEA3E0FF9000AB120E06
:10083800AA781A7401F2781AE2F9C36480948440A1
:1008480003020932E9FF3395E0FEEF7802C333CEA5
:1008580033CED8F92461F58274003EF583E0FCA319
:10086800E0FDA3E0FEA3E0FFC004C005C006C0078A
:10087800781AE2FF3395E0FEEF7802C333CE33CE29
:10088800D8F9FBAA062465F58274003AF583D007E7
:10089800D006D005D004120EAA74712BF58274000C
:1008A8003AF583E0FCA3E0FDA3E0FEA3E0FFC0046B
:1008B800C005C006C007781AE2FF3395E0FEEF785E
:1008C80002C333CE33CED8F9FBAA062475F5827459
:1008D800003AF583D007D006D005D004120EAA74CA
:1008E800812BF58274003AF583E0FCA3E0FDA3E0D8
:1008F800FEA3E0FFC004C005C006C007781AE2FFE7
:100908003395E0FEEF7802C333CE33CED8F9248591
:10091800F58274003EF583D007D006D005D00412C6
:100928000EAA781AE204F202083E9000A7E0FCA39F
:10093800E0FDA3E0FEA3E0FF900065120EAA900080
:10094800ABE0FCA3E0FDA3E0FEA3E0FF900075127E
:100958000EAA9000AFE0FCA3E0FDA3E0FEA3E0FF39
:06096800900085020EAABA
:03001B00021C7E46
:101C7E00C0E0C0F0C083C082C0D075D000C000C02C
:0D1C8E0001C002C003C004C005C006C007AD
:101C9B0090004BE06003021E0A900046E004F078CF
:101CAB000EE2FFE0C39F5003021E0AE4F0900055C2
:101CBB00E004F0E094044002E4F012231690003CA0
:101CCB00E0FD3395E0FC74562DF58274003CF583F2
:101CDB00E0FD3395E0FCC3EF9DFFEE9CFE9000967C
:101CEB00E0C3648094825006AC06AD078007C3E462
:101CFB009FFDE49EFC900055E0FB25E0244CF58213
:101D0B00E43400F583ECF0A3EDF0780FE2FD7441C1
:101D1B002BF582E43400F583EDF0C3EE6480948000
:101D2B0050047D0280027D00900055E0FC2447F5B5
:101D3B0082E43400F583E02DF074472CF582E43413
:101D4B0000F583E0FD75F004120D49ADF0EDF0ECFC
:101D5B0064016005EC6403707B900055E0B4010FE7
:101D6B00D297900050122390900043E07813F2909A
:101D7B000055E0B4030FC29790004C1223909000D3
:101D8B0041E07813F2D3EF9480EE648094A5400782
:101D9B007813E214F28036C3EF9440EE64809481A2
:101DAB0050087813E22403F28023C3EF94C0EE644F
:101DBB0080948350087813E22402F28010C3EF94CE
:101DCB0040EE6480948B50057813E204F27813E2B2
:101DDB00FF1223CB900055E00454032447F582E413
:101DEB003400F583E0FF12235478177401F2087462
:0F1DFB0000F2087441F27B017A00794C12003E2D
:101E0A00D007D006D005D004D003D002D001D0002C
:0B1E1A00D0D0D082D083D0F0D0E032D6
:0715D700782AEFF208EDF2A3
:1015DE009000B7120EC2000000009000BB120EC2A7
:1015EE00000000009000BF120EC200000000E47860
:1015FE002CF29000B7E0F8A3E0F9A3E0FAA3E0FB29
:10160E00C000C001C002C003782CE2FF3395E0FE9B
:10161E00EF7802C333CE33CED8F92465F582740049
:10162E003EF583E0FCA3E0FDA3E0FEA3E0FFE4FBB8
:10163E00FA79807840120B6FD003D002D001D0001F
:10164E001209759000B7120EAA9000BBE0F8A3E045
:10165E00F9A3E0FAA3E0FBC000C001C002C003780A
:10166E002CE2FF3395E0FEEF7802C333CE33CED8B3
:10167E00F92475F58274003EF583E0FCA3E0FDA32A
:10168E00E0FEA3E0FFE4FBFA79807840120B6FD006
:10169E0003D002D001D0001209759000BB120EAA21
:1016AE009000BFE0F8A3E0F9A3E0FAA3E0FBC000CE
:1016BE00C001C002C003782CE2FF3395E0FEEF7844
:1016CE0002C333CE33CED8F92485F58274003EF5AD
:1016DE0083E0FCA3E0FDA3E0FEA3E0FFE4FBFA79C8
:1016EE00807840120B6FD003D002D001D0001209C7
:1016FE00759000BF120EAA782CE204F2E264046028
:10170E00030216009000B7E0FCA3E0FDA3E0FEA3E9
:10171E00E0FFEC4D4E4F701012252278087473F2D4
:10172E0078067461F208F2227FDA7E0F7DC97C4062
:10173E0090003DE0F8A3E0F9A3E0FAA3E0FB120A63
:10174E00669000C7120EAA782BE2600302182F9043
:10175E0000B7E0FCA3E0FDA3E0FEA3E0FF9000C312
:10176E00120EAA782AE270139000C3E0F8A3E0F9F3
:10177E00A3E0FAA3E09000BF121E25782AE2B4017E
:10178E00139000C3E0F8A3E0F9A3E0FAA3E0900001
:10179E00BB121E25782AE264026003021946FFFE80
:1017AE00FDFC9000BFE0F8A3E0F9A3E0FAA3E0FB94
:1017BE00120C0C50359000BFE0F8A3E0F9A3E0FA4C
:1017CE00A3E0FBA3E0FCA3E0FDA3E0FEA3E0FF1279
:1017DE000B6F9000C7E0F8A3E0F9A3E0FAA3E0FBDB
:1017EE00120B6F783174040219439000C3E0F8A312
:1017FE00E0F9A3E0FAA3E0FB9000BFE0FCA3E0FD5C
:10180E00A3E0FEA3E0FF120B6F9000C7E0F8A3E089
:10181E00F9A3E0FAA3E0FB120B6F78317402021900
:10182E00439000BFE0FCA3E0FDA3E0FEA3E0FFA811
:10183E0004A905AA06FB120A66C004C005C006C0AC
:10184E00079000BBE0FCA3E0FDA3E0FEA3E0FFA831
:10185E0004A905AA06FB120A66D003D002D001D055
:10186E00001209759000B7E0F8A3E0F9A3E0FAA31F
:10187E00E0FB120B6F9000C3120EAA782AE27012D0
:10188E009000BFE0F8A3E0F9A3E0FAA3E0FBA312F7
:10189E001E26782AE2B401149000BBE0F8A3E0F90A
:1018AE00A3E0FAA3E0FB9000C3121E26782AE2649E
:1018BE00026003021946FFFEFDFC9000BFE0F8A394
:1018CE00E0F9A3E0FAA3E0FB120C0C50369000C333
:1018DE00E0F8A3E0F9A3E0FAA3E0FB9000BFE0FC80
:1018EE00A3E0FDA3E0FEA3E0FF120B6F9000C7E0A4
:1018FE00F8A3E0F9A3E0FAA3E0FB120B6F783174C2
:10190E000480329000BFE0F8A3E0F9A3E0FAA3E070
:10191E00FBA3E0FCA3E0FDA3E0FEA3E0FF120B6F30
:10192E009000C7E0F8A3E0F9A3E0FAA3E0FB120BE6
:10193E006F78317402121E38782AE2640360030253
:10194E001A419000BBE0FCA3E0FDA3E0FEA3E0FF84
:10195E00EC4D4E4F70087F0F7E27FDFC807590007A
:10196E00BBE0F8A3E0F9A3E0FAA3E0FBA3E0FCA33D
:10197E00E0FDA3E0FEA3E0FF120B6F122515900011
:10198E00BF120EAAE4FFFE7D7A7C449000BFE0F801
:10199E00A3E0F9A3E0FAA3E0FB120C0C400A7FE7E8
:1019AE007E037D007C00802BE4FFFE7DC87C429090
:1019BE0000BFE0F8A3E0F9A3E0FAA3E0FB120C0CE1
:1019CE0040149000BFE0FCA3E0FDA3E0FEA3E0FF07
:1019DE00120CC80220E1E4FFFE7D207C419000BF86
:1019EE00E0F8A3E0F9A3E0FAA3E0FB120C0C400E22
:1019FE00E4FFFE7D207C411220CD78068031E4FF8D
:101A0E00FE7D807C3F9000BFE0F8A3E0F9A3E0FAF2
:101A1E00A3E0FB120C0CE4FFFE400B7DC87C4212CF
:101A2E0020CD780780097D7A7C441220CD7808E29B
:031A3E002404F28B
:011A41002282
:10242800FF3395E0FE74422FF582741A3EF583E47B
:0224380093FF10
:10243A00EFF4F580D2A7C2A4C2A5C2A67F327E005D
:03244A0002244D1C
:100FC100E4781BF208F208F208F208F208F208F2DB
:100FD1000804F2E408F27F50FE12244DE4FF1222CD
:100FE1002CE4F588758912F58DF58BD28EC28CD2E1
:100FF100ABD2A9D2AFD2B9FF1224697596FF75920F
:10100100FC7591031224987F021223547F0112244C
:10101100031223CB7F011220437821E22401F2182D
:10102100E23400F2781EE204F25403F2C2A4C2A533
:10103100C2A6C2A7E2FF7002D2A7EFB40102D2A6F4
:10104100EFB40202D2A5EFB40302D2A474052FF8C3
:10105100E2F4F580E5B0F4781DF2E2600C18E2C329
:1010610094FF5005E204F28004E4781CF2E4781B5A
:10107100F2781DE2600AC313F2781BE204F280F1F8
:10108100781BE2781DF218E2B41407781F7432F26B
:101091008004E4781DF2781FE26007E214F2C2A333
:1010A1008002D2A3781DE2B4080BE4900045F0F26F
:1010B100782274FFF2900045E0FFC39401401AEFDB
:1010C100D394045014781DE2B407031224E6781D6A
:1010D100E2B406057FFF122043900045E070267FB1
:1010E100107E27FDFC1220E1781DE2FFC394014030
:1010F10010EFD39407500A900045EFF0E49000956B
:10110100F0E4781DF2900045E0640160030211E013
:1011110090004BF07822E2B4FF067401F2780BF2F2
:10112100781DE2B404157823E26006E4F27F7A8048
:101131000778237401F27FF112243A781DE2FFB49B
:1011410001137822E2780B7005E204F28003740146
:10115100F2E47822F2EFB402157822E2780BB401BE
:1011610005E204F280037401F278227401F2781D21
:10117100E2B403157822E2780BB40205E204F280AE
:10118100037401F278227402F2781DE2B405057845
:10119100227403F2780BE2FF75F002120D49AFF0F1
:1011A100780BEFF27822E2FF08E2FD1215D77823DF
:1011B100E2602C7820E25401FE08E2C39432EE94FE
:1011C10000501CE4781BF2781BE2FFC39404500F1B
:1011D10074052FF8E24404F2781BE204F280E890EF
:1011E1000045E0B40234900041E0FF3395E0FE7C1D
:1011F100007D64120E07900043E0FD3395E0FCEFA3
:101201002DFFEE3CCF2410CF3427FE3395E0FDFCBB
:101211001220E1E47808F27806F2900045E06403D8
:10122100704E90004B04F0781DE2B401091224F7CE
:10123100780FE2122428781DE2B4030EB297A29728
:10124100E433901A4293FF12243A781DE2B4040A5F
:1012510012252C900096E01224287821E2543F7048
:101261000F122316E4FCFD1220E17806E22404F2B9
:0B127100900045E0640760030215CD0B
:10127C00782704F208F208F2900095E0FF70167BD4
:10128C0001782404F2087400F2087456F2E4782809
:10129C00F2087402F2EFB4011578247401F20874A8
:1012AC0000F2087457F278287401F20804F2EFB4D3
:1012BC00021478247401F2087400F2087458F2785D
:1012CC00287402F208F2EFB4031578247401F208C2
:1012DC007400F208745BF278287402F2E408F2EFFE
:1012EC00B4041578247401F2087400F208745CF2EA
:1012FC0078287402F20814F2EFB4051478247401FF
:10130C00F2087400F208745DF278287402F208F2A4
:10131C00EFB4061578247401F2087400F208745EB8
:10132C00F278287402F20804F2EFB40715782474EA
:10133C0001F2087400F2087459F278287402F20869
:10134C0014F2EFB4081578247401F2087400F20852
:10135C00745AF278287402F20814F2EFB409177870
:10136C00247401F2087400F208745FF2087402F23B
:10137C000814F2E408F2EFB40A1678247401F208A7
:10138C007400F2087460F2087402F20814F208F2A5
:10139C00EFB40B1778247401F2087400F20874612E
:1013AC00F2087402F20814F20804F2EFB40C187884
:1013BC00247401F2087400F2087462F2087402F2E8
:1013CC000814F2087403F2EFB40D1678247401F2C9
:1013DC00087400F2087463F2087402F20814F2083C
:1013EC00F2EFB40E1678247401F2087400F208744B
:1013FC0064F2087402F20814F208F2781DE2B401E7
:10140C00127827E2FF7824E2FB08E2FA08E2F9EF0F
:10141C00120DB1781DE2B402177824E2FB08E2FA4F
:10142C0008E2F9120D6BFF08E2FEC3EF9E120DD31A
:10143C00781DE2B4030D7F0112222C90003CE0FFDA
:10144C00122043781DE2B4040E7824E2FB08E2FA81
:10145C0008E2F9E4120DD3781DE2640570359000B2
:10146C0095E07005740EF08006900095E014F0E4A1
:10147C007801F2900095E0FFC394095008EF901AA0
:10148C004293FF800B900095E0901A3C932404FF4C
:10149C0012243A781DE264067035900095E0B40E83
:1014AC0004E4F08006900095E004F0E47801F290FA
:1014BC000095E0FFC394095008EF901A4293FF8007
:1014CC000B900095E0901A3C932404FF12243A7878
:1014DC001DE2FFB407117801E204FE75F002120D53
:1014EC0049AEF07801EEF2EF6404704F7800E2043C
:1014FC00F26405704FF29000597410F0A37412F05E
:10150C00E4900063F0A3F0900056740FF0A37411F4
:10151C00F0A3740FF0E490005DF090005CF090008C
:10152C005BF090005E7414F0E4900062F090006147
:10153C00F0900060F090005FF08009781DE260048C
:10154C00E47800F27801E2603D90003CE0FE7828FF
:10155C00E2FF6E6003122043900054E0FE7829E213
:10156C00FF6E6003122403900095E0FFC3940340C8
:10157C000CEFD3940850067D017F0380047D017F1E
:10158C00011215D7803BE4780BF27824E2FB08E2D9
:10159C00FA08E2F9120D6BFF3395E0FE1224D4EE3B
:1015AC003395E0FDFC1220E17824E2FB08E2FA0816
:1015BC00E2F9120D6BC364809480500578087410A6
:0115CC00F22C
:0A15CD007FA07E0F1224C202101A44
:10096E00020D34E86480F8E933E83360110460F076
:10097E00ED33EC337009E8FCE9FDEAFEEBFF2204EF
:10098E0060DED3EB9FEA9EE99DE8C2E78CF0C2F7EA
:10099E0095F0400CE8CCF8E9CDF9EACEFAEBCFFBB6
:1009AE00120CFF85D0F05804700320D5B3E8047004
:1009BE00075002B2D5020D3E92D5EC0460F7E4CC9E
:1009CE00C0E0C398F8603B94186008400DD0E0FB7F
:1009DE00020D16E4FBFAC9FC8028E830E406E4C9EF
:1009EE00FBE4CAFCE830E305E4C9CACBFCE85407D3
:1009FE006010F8C3E913F9EA13FAEB13FBEC13FCDE
:100A0E00D8F130F52FC3E49CFCEF9BFFEE9AFEED80
:100A1E0099FDD0E0FBEF4E4D4C701222DB03020D20
:100A2E003BEC2CFCEF33FFEE33FEED33FDED30E708
:100A3E00EB020D16EF2BFFEE3AFEED39FDD0E0FB8B
:100A4E0050130BBB0003020D3EED13FDEE13FEEF34
:080A5E0013FFEC13FC020D165E
:100A6600EC4D6011E8497017ED33EC3304600DE48A
:100A7600FCFFFEFD22E933E8330470F8020D341260
:100A86000CFF58046009E4CC248150062850090262
:100A96000D3E284003020D3BC0E0EB4A7044B9808E
:100AA60006D0E0FB020D2AEF4E701CBD8008EBFF5E
:100AB600EAFEE9FD80EBE98DF0A4FEE5F0020B4FBE
:100AC600E9CDF9EAFEEBFFEF89F0A4FCE5F0CE896B
:100AD600F0A42EFFE435F0CD89F0A42DFEE435F028
:100AE6008067EF4E7005BD80D780C3EF8BF0A4AC56
:100AF600F0EE8BF0A42CFCE435F0F8EF8AF0A42C91
:100B0600E5F038FCE433CB8DF0A42CFCE5F03BF8A3
:100B1600EE8AF0A42CFCE5F038F8E433CF89F0A493
:100B26002CFCE5F038CF3400CE89F0A42FFFE5F099
:100B36003EFEE433C98DF0A42EFEE5F039CD8AF0F1
:100B4600A42FFFE5F03EFEE43DFD33D0E0FB500769
:100B56000BBB000F020D3EEC2CFCEF33FFEE33FE19
:060B6600ED33FD020D1647
:100B6C00020D3EEC5D046005E859047003020D347F
:100B7C00120CFF580460F6EC4860F2EC7004FDFEB9
:100B8C00FF22C860DB2481C85009C398600250065C
:100B9C00020D3B9850CAF582E9294B4A7005AB828D
:100BAC00020D2A75F0007C1A7880C3EF9BEE9AED4B
:100BBC0099400DC3EF9BFFEE9AFEED99FDE842F0D4
:100BCC00DC23ACF0D0E0FFD0E0FED0E0FDAB822027
:100BDC00E7101BEB60BAEC2CFCEF33FFEE33FEEDB1
:100BEC0033FD020D16E803F830E705C0F075F00090
:100BFC00EF2FFFEE33FEED33FD40B830E7C280AA95
:100C0C0074F8CC6480CCC86480C8F582046043C39B
:100C1C00EB9FF5F0EA9E42F0E99D42F0E89C45F02E
:100C2C0060305018E5825FFFE582F42B5582FB5053
:100C3C00210ABA001D09B90019088016E5825BFB70
:100C4C00E582F42F5582FF50090EBE00050DBD0044
:100C5C00010CC3EB9FF5F0EA9E42F0E99D42F0E8EF
:0D0C6C009C45F06007CC4820E701B3EC2266
:100C7900ED33EC33600A047003BD8004ECB2E7FC89
:010C89002248
:100C8A0075F020800E75F010800575F0087D007EE5
:100C9A00007F003392D530D503120E7CEC3340101E
:100CAA00EF33FFEE33FEED33FDEC33FCD5F0ED22EE
:0E0CBA00E5F0247EA2D513CC92E7CDCEFF222A
:100CC800EDD2E7CD33EC3392D524814006E4FFFE24
:100CD800FDFC22FCE4CFCECDCC24E0501174FF8083
:100CE800EDC3CC13CCCD13CDCE13CECF13CF047020
:070CF800F030D5DE020E7C96
:0D251500ED33EC3360065004EC6480FC22D2
:100CFF00E9D2E7C933E833F892D5EDD2E7CD33EC3B
:070D0F0033FC5002B2D522B3
:100D1600EC30E7100FBF000C0EBE00080DBD00043E
:100D26000BEB6014A2D5EB13FCED92E7FD2274FFEA
:100D3600FCFDFEFF22E480F8A2D574FF13FC7D8043
:030D4600E480EF57
:03000000021FB725
:0C1FB700787FE4F6D8FD758108021FFE5B
:100D4900C2D530F707B2D563F0FF05F030E70CB232
:100D5900D5F4048463F0FF05F080018430D502F4F2
:020D6900042262
:100D6B00BB010689828A83E0225002E722BBFE0286
:090D7B00E32289828A83E49322B9
:100D8400BB010CE58229F582E5833AF583E0225024
:100D940006E92582F8E622BBFE06E92582F8E2226E
:0D0DA400E58229F582E5833AF583E4932288
:100DB100BB010989828A83F8E028F022500327F7D2
:100DC10022BBFE05F8E328F3228A838982F8E493A3
:020DD1002822D6
:100DD300BB010689828A83F0225002F722BBFE01FF
:020DE300F322F9
:100DE500F8BB010DE58229F582E5833AF583E8F044
:100DF500225006E92582C8F622BBFE05E92582C8F0
:020E0500F222D7
:100E0700EF8DF0A4A8F0CF8CF0A428CE8DF0A42EFF
:020E1700FE22B9
:100E1900BB010A89828A83E0F5F0A3E022500687A4
:100E2900F009E71922BBFE07E3F5F009E319228966
:0B0E3900828A83E493F5F07401932299
:100E4400BB0110E58229F582E5833AF583E0F5F0EC
:100E5400A3E0225009E92582F886F008E622BBFEC9
:100E64000AE92582F8E2F5F008E222E5832AF5830F
:080E7400E993F5F0A3E99322D4
:1022D200C2D5E830E70FB2D5E4C39BFBE49AFAE437
:1022E20099F9E498F8EC30E717B2D5122308120FE7
:1022F2002FE4C39BFBE49AFAE499F9E498F880038B
:10230200120F2F30D50DE4C39FFFE49EFEE49DFD26
:04231200E49CFC2229
:0E0E7C00C3E49FFFE49EFEE49DFDE49CFC2287
:100E8A00E493FC740193FD740293FE740393FF22AE
:100E9A00E493F8740193F9740293FA740393FB22AE
:0C0EAA00ECF0A3EDF0A3EEF0A3EFF022BB
:0C0EB600ECF208EDF208EEF208EFF22278
:100EC200A8828583F0D083D082120ED9120ED91255
:100ED2000ED9120ED9E473E493A3C583C5F0C5837A
:100EE200C8C582C8F0A3C583C5F0C583C8C582C87A
:010EF20022DD
:1024D400C3EE6480948040028007C3E49FFFE49EBF
:0224E400FE22D6
:101FC300020FC1E493A3F8E493A34003F68001F264
:101FD30008DFF48029E493A3F85407240CC8C3331F
:101FE300C4540F4420C8834004F456800146F6DFEE
:101FF300E4800B01020408102040809021C2E47E9B
:10200300019360BCA3FF543F30E509541FFEE493E2
:10201300A360010ECF54C025E060A840B8E493A3A9
:10202300FAE493A3F8E493A3C8C582C8CAC583CAD4
:10203300F0A3C8C582C8CAC583CADFE9DEE780BE8C
:01222B0000B2
:100EF30075F008758200EF2FFFEE33FECD33CDCCB6
:100F030033CCC58233C5829BED9AEC99E582984038
:100F13000CF582EE9BFEED9AFDEC99FC0FD5F0D615
:100F2300E4CEFBE4CDFAE4CCF9A88222B800C1B93F
:100F33000059BA002DEC8BF084CFCECDFCE5F0CB7D
:100F4300F97818EF2FFFEE33FEED33FDEC33FCEBB6
:100F530033FB10D703994004EB99FB0FD8E5E4F971
:100F6300FA227818EF2FFFEE33FEED33FDEC33FC5E
:100F7300C933C910D7059BE99A4007EC9BFCE99A52
:100F8300F90FD8E0E4C9FAE4CCFB2275F010EF2F97
:100F9300FFEE33FEED33FDCC33CCC833C810D70797
:100FA3009BEC9AE899400AED9BFDEC9AFCE899F8D2
:0E0FB3000FD5F0DAE4CDFBE4CCFAE4C8F92265
:00000001FF