TMF8801激光测距芯片驱动程序

TMF8801激光测距芯片驱动程序TMF8801 一 芯片介绍 TMF8801 是今年艾迈斯半导体推出的用于测量直接飞行时间 dToF 距离的集成式模块 号称全球体积最小 表示怀疑 不过体积确实非常小

大家好,欢迎来到IT知识分享网。

TMF8801激光测距芯片驱动程序

一、芯片介绍

TMF8801是2019年艾迈斯半导体推出的用于测量直接飞行时间(dToF)距离的集成式模块,号称全球体积最小(表示怀疑,不过体积确实非常小)。这个传感器可以精准测量0.02m至2.5m范围,我实际测试在较亮的环境下能达到2.4m(我站在2.4m的位置,1s检测一次,测试了几分钟,大概有百分五十的概率能检测到),暗环境下能够测量到2.5m,2m以内基本都能检测到。相比于我们熟知的VL53L0X测距模块,测量距离和精度确实要好很多。关于芯片的介绍我就不多说了,感兴趣的同学可以去查一下。

二、引脚定义

在这里插入图片描述

引脚号 引脚名称 信号类型 描述
1 VCCD 电源 供电电压3V;接一个0.1uF电容到地
2 GNDC 电源负极
3 GPIO0 IO 通用IO口,如果不用,请保持开路
4 INT 输出 中断输出,如果不用,请接到地
5 SCL 输入 IIC时钟引脚
6 SDA IO IIC数据引脚
7 VDD 电源 供电电压3V;接一个0.1uF电容到地
8 GND 电源负极
9 EN 输入 启用输入有效高电平;设置为低电平强制器件关闭,所有内存内容都会丢失;如果未使用,则连接至VDD
10 GPIO1 IO 通用IO口,如果不用,请保持开路
11 GNDV 电源负极
12 VDDV 电源 供电电压3V;接一个0.1uF电容到地

三、驱动流程

1、IIC引脚初始化
2、模块初始化

1)复位(寄存器地址:0xE0)
2)初始化下载 HW(寄存器地址:0x08)
3)设置写 RAM 地址(寄存器首地址:0x08)
4)写 RAM数据(寄存器首地址:0x08)
5)重映射 RAM 到地址 0 并复位
6)获取 TMF8801 信息
6.1)读取APP0 主版本号(寄存器地址:0x01)
6.2)读取次版本号和修订版本号(寄存器地址:0x12)
6.3)读取芯片修订 ID(寄存器地址:0xE4)
6.4)生成序列号(寄存器地址:0x10)
6.5)读取序列号(寄存器地址:0x1E)
7)使能检测中断
3、配置APP0
写入校准数据(寄存器地址:0x20)
4、检测中断
5、获取结果















四、驱动程序

驱动的程序我这里以stm32的为例
1、IIC驱动部分(用IO口模拟IIC时序)

#include "tmf8801_iic.h" #include "math.h" #define TMF8001_Address 0x82//器件地址 /* * 名称: iic_delay_us * 功能: 用于IIC通讯延时 * 形参: 无 * 返回: 无 * 说明: 直接用软件延时,延时的时间和主频有关,如要移植到别的单片机 * 可能需要修改i的次数以确保延时时间足够 */ void iic_delay_us(u8 time) { 
    u8 i; while(time --) { 
    for(i=0;i<6;i++); } } /* * 名称: TMF8001_I2C_Init * 功能: I2C引脚初始化 * 形参: 无 * 返回: 无 * 说明: 无 */ void TMF8001_I2C_Init(void) { 
    GPIO_InitTypeDef GPIO_InitStructure; RCC_APB2PeriphClockCmd(TMF8001_I2C_RCC, ENABLE); GPIO_InitStructure.GPIO_Pin = TMF8001_I2C_SCL_PIN | TMF8001_I2C_SDA_PIN; GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP ; GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; GPIO_Init(TMF8001_I2C_PORT, &GPIO_InitStructure); TMF8001_I2C_SCL_HIGHT; TMF8001_I2C_SDA_HIGHT; } /* * 名称: TMF8001_I2C_Start * 功能: 模拟I2C的起始条件 * 形参: 无 * 返回: 无 * 说明: 标准的I2C协议I2C起始条件:SCL为高时,SDA由高变低 */ void TMF8001_I2C_Start(void) { 
    TMF8001_I2C_SDA_Out; TMF8001_I2C_SCL_HIGHT; TMF8001_I2C_SDA_HIGHT; iic_delay_us(4); TMF8001_I2C_SDA_LOW; //标准的I2C协议I2C起始条件:SCL为高时,SDA由高变低 iic_delay_us(4); TMF8001_I2C_SCL_LOW;//钳住I2C总线,准备发送或接收数据  } /* * 名称: TMF8001_I2C_Stop * 功能: 模拟I2C的停止条件 * 形参: 无 * 返回: 无 * 说明: 标准的I2C协议I2C停止条件:SCL为高时,SDA由低变高 */ void TMF8001_I2C_Stop(void) { 
    TMF8001_I2C_SDA_Out; TMF8001_I2C_SCL_LOW; TMF8001_I2C_SDA_LOW; iic_delay_us(4); TMF8001_I2C_SCL_HIGHT; TMF8001_I2C_SDA_HIGHT; iic_delay_us(4); } /* * 名称: TMF8001_I2C_Wait_Ack * 功能: 等待应答信号 * 形参: 无 * 返回: 0:接收成功 1:接收失败 * 说明: 无 */ u8 TMF8001_I2C_Wait_Ack(void) { 
    u8 ucErrTime=0; TMF8001_I2C_SDA_In; TMF8001_I2C_SDA_HIGHT; iic_delay_us(4); TMF8001_I2C_SCL_HIGHT; iic_delay_us(4); while(Get_TMF8001_I2C_SDA) { 
    ucErrTime ++; if(ucErrTime > 250) { 
    TMF8001_I2C_Stop(); return 1; } } TMF8001_I2C_SCL_LOW; return 0; } /* * 名称: TMF8001_I2C_Ack * 功能: 模拟I2C的应答 * 形参: 无 * 返回: 无 * 说明: 根据标准的I2C协议,从I2C从器件读1个byte后 也就是在第9个CLK的时候,I2C主设备的SDA要变低 表示I2C主器件已经接收完一个字节byte,I2C从器件 继续发送数据 */ void TMF8001_I2C_Ack(void) { 
    TMF8001_I2C_SCL_LOW; TMF8001_I2C_SDA_Out; TMF8001_I2C_SDA_LOW; iic_delay_us(4); TMF8001_I2C_SCL_HIGHT; iic_delay_us(4); TMF8001_I2C_SCL_LOW; } /* * 名称: TMF8001_I2C_NAck * 功能: 模拟I2C的不应答 * 形参: 无 * 返回: 无 * 说明: */ void TMF8001_I2C_NAck(void) { 
    TMF8001_I2C_SCL_LOW; TMF8001_I2C_SDA_Out; TMF8001_I2C_SDA_HIGHT; iic_delay_us(4); TMF8001_I2C_SCL_HIGHT; iic_delay_us(4); TMF8001_I2C_SCL_LOW; } /* * 名称: TMF8001_I2C_Send_Byte * 功能: 模拟I2C发送一个字节 * 形参: Byte * 返回: 无 * 说明: */ void TMF8001_I2C_Send_Byte(u8 Byte) { 
    u8 bit; TMF8001_I2C_SDA_Out; TMF8001_I2C_SCL_LOW; for(bit=0;bit<8;bit++) { 
    if((Byte&0x80)>>7) { 
    TMF8001_I2C_SDA_HIGHT; } else { 
    TMF8001_I2C_SDA_LOW; } Byte<<=1; //iic_delay_us(4); TMF8001_I2C_SCL_HIGHT; iic_delay_us(4); TMF8001_I2C_SCL_LOW; iic_delay_us(4); } } / * 名称: TMF8001_I2C_Read_Byte * 功能: 模拟I2C读取一个字节 * 形参: 无 * 返回: 1个字节 * 说明: 无 / u8 TMF8001_I2C_Read_Byte(u8 ack) { 
    u8 bit,Receive_Byte=0; TMF8001_I2C_SDA_In; for(bit=0;bit<8;bit++) { 
    TMF8001_I2C_SCL_LOW; iic_delay_us(4); TMF8001_I2C_SCL_HIGHT; Receive_Byte<<=1;//把上一时刻的值左移一位 if(Get_TMF8001_I2C_SDA) { 
    Receive_Byte|=0x01; } iic_delay_us(4); } if(!ack) { 
    TMF8001_I2C_NAck(); } else { 
    TMF8001_I2C_Ack(); } return Receive_Byte; } /* * 名称: I2C_TMF8001_WriteByte * 功能: 通过I2C协议向TMF8001写入1个字节 * 形参: Data_com -> 要写入的数据 * 返回: 无 * 说明: 无 / void I2C_TMF8001_WriteByte(u8 Addr, u8 *Data_Com, u8 Len) { 
    u8 i; TMF8001_I2C_Start(); /*I2C Start*/ TMF8001_I2C_Send_Byte(TMF8001_Address); /*Send TMF8001 Driver address*/ TMF8001_I2C_Ack(); TMF8001_I2C_Send_Byte(Addr); /*Send byte*/ TMF8001_I2C_Ack(); for(i=0;i<Len;i++) { 
    TMF8001_I2C_Send_Byte(Data_Com[i]); /*Send byte*/ TMF8001_I2C_Ack(); } TMF8001_I2C_Stop(); /*I2C Stop*/ } /* * 名称: I2C_TMF8001_ReadByte * 功能: 通过I2C协议从TMF8001读取6个字节 * 形参: Addr -> 写入寄存器地址 *Read_Buf -> 存数据的数组地址 * 返回: 1个字节数据 * 说明: 无 / u8 I2C_TMF8001_ReadByte(u8 Addr, u8 *Read_Buf, u8 Len) { 
    u8 i; TMF8001_I2C_Start();/*I2C start*/ TMF8001_I2C_Send_Byte(TMF8001_Address); /*Send TMF8001 Driver address*/ TMF8001_I2C_Ack(); TMF8001_I2C_Send_Byte(Addr); /*Send byte*/ TMF8001_I2C_Ack(); TMF8001_I2C_Start();/*I2C start*/ TMF8001_I2C_Send_Byte(TMF8001_Address|0x01);/*Send ReadCommand*/ TMF8001_I2C_Ack(); for(i=0;i<Len;i++) { 
    if(i == (Len - 1)) { 
    Read_Buf[i] = TMF8001_I2C_Read_Byte(0);/*I2C ReadByte*/ } else { 
    Read_Buf[i] = TMF8001_I2C_Read_Byte(1);/*I2C ReadByte*/ } } TMF8001_I2C_Stop();/*I2C Stop*/ // printf("Read_Buf0: %02X ",Read_Buf[0]); } 

2、TMF8001驱动部分

#include "tmf8801.h" #include "tmf8801_iic.h" //TMF8x01 寄存器地址定义  #define TMF8x01_REGADDR_COMMAND 0x10 #define TMF8x01_REGADDR_STATUS 0x1D  #define TMF8x01_REGADDR_CONTENTS 0x1E #define TMF8x01_REGADDR_TID 0x1F #define TMF8x01_REGADDR_ENABLE 0xE0 //RAM数据缓存 const uint8_t app_buf[] = { 
    0x6D, 0xC9, 0x41, 0x85, 0x3D, 0x15, 0xAA, 0x51, 0xF4, 0xD2, 0x9E, 0xA8, 0xA7, 0xAC, 0x77, 0xE9, 0xF9, 0xEC, 0x20, 0x24, 0x63, 0xB8, 0xF1, 0xA5, 0x0B, 0xA7, 0x65, 0xB4, 0x32, 0xB8, 0x18, 0xD7, 0x5C, 0xF4, 0x00, 0xD0, 0xDC, 0xFD, 0xD9, 0xD5, 0x98, 0xAF, 0x6F, 0x40, 0x96, 0x0A, 0xB2, 0xFA, 0x9E, 0x13, 0x44, 0xF8, 0x6F, 0x5B, 0xF1, 0x65, 0xA6, 0x88, 0x67, 0xD7, 0x75, 0x0A, 0x4A, 0x7F, 0x81, 0x9C, 0xF6, 0x91, 0x7B, 0xCF, 0xF2, 0x7C, 0xC1, 0x83, 0xF3, 0xA5, 0xF6, 0xEB, 0xD2, 0xFA, 0x14, 0x01, 0x7B, 0x81, 0x6D, 0xA9, 0x31, 0x0B, 0x79, 0x14, 0x9D, 0xFE, 0xAA, 0x24, 0x5A, 0x5A, 0x77, 0xF0, 0x00, 0x00, 0x88, 0x76, 0xBA, 0x20, 0xD1, 0x33, 0xB2, 0x66, 0xCF, 0xD9, 0x67, 0xDD, 0x4C, 0xF8, 0x5E, 0xAD, 0x6C, 0xF5, 0xF4, 0x7A, 0x60, 0x3D, 0xFB, 0x05, 0x4B, 0xB9, 0x26, 0xA5, 0xDF, 0xF1, 0xE3, 0xC7, 0x7E, 0x55, 0xEC, 0x50, 0x9C, 0xE3, 0xC9, 0xDA, 0x91, 0xAE, 0x5E, 0x9F, 0x13, 0x0E, 0x96, 0x52, 0x27, 0x8E, 0x06, 0x22, 0x63, 0x69, 0xAC, 0x61, 0x9C, 0x23, 0xF1, 0x38, 0x5F, 0x3A, 0x1D, 0x03, 0xBD, 0xCA, 0xDA, 0x42, 0xBB, 0x21, 0x55, 0x35, 0xC8, 0x30, 0x50, 0x6D, 0x09, 0xBF, 0x32, 0x39, 0x7D, 0xF1, 0x4B, 0x9C, 0x09, 0x33, 0xF0, 0xA1, 0xBD, 0x1B, 0x89, 0xCD, 0xFC, 0x75, 0xCD, 0x92, 0x52, 0x8E, 0xA8, 0xD1, 0xD2, 0xED, 0x6B, 0x63, 0x41, 0x38, 0x0F, 0x22, 0xFF, 0xA6, 0x6A, 0xE3, 0xE0, 0x78, 0x83, 0xF5, 0x95, 0xC2, 0x88, 0x77, 0x5C, 0x4B, 0x9C, 0xAD, 0x32, 0xE4, 0x39, 0x85, 0xBF, 0x4E, 0x2C, 0x21, 0xCF, 0x19, 0x9D, 0x93, 0xFD, 0x9B, 0xFA, 0x15, 0x2D, 0xB5, 0x7C, 0xD1, 0x43, 0x83, 0x58, 0x4F, 0x8C, 0x66, 0x3E, 0xAA, 0xD2, 0xD2, 0x66, 0xA1, 0x56, 0x80, 0xD8, 0xF1, 0xED, 0x1F, 0x4D, 0x45, 0x06, 0x64, 0x9A, 0x02, 0xF9, 0x69, 0x6B, 0xCE, 0xA0, 0x84, 0xD2, 0x67, 0x85, 0xE1, 0xE7, 0x8D, 0xE2, 0xEF, 0x11, 0x5B, 0xDD, 0x27, 0x5A, 0x9E, 0x34, 0x9D, 0x66, 0x66, 0xE3, 0xA5, 0xD4, 0xC7, 0x6E, 0x80, 0x0D, 0xC6, 0x9C, 0x36, 0x86, 0x19, 0x32, 0xD0, 0x16, 0x67, 0x45, 0x2D, 0xE5, 0x09, 0x89, 0xC5, 0x80, 0x0F, 0x71, 0x2C, 0x9F, 0xB1, 0x38, 0x4A, 0x0B, 0xFD, 0x6F, 0x27, 0x69, 0xCD, 0x8B, 0x0F, 0x4B, 0x62, 0xF0, 0xC5, 0xC1, 0x96, 0xFD, 0xD2, 0x06, 0xCE, 0x01, 0xC4, 0x16, 0x84, 0x42, 0xEA, 0x01, 0x06, 0x16, 0xD9, 0x2C, 0x10, 0x7B, 0x6D, 0x95, 0xA0, 0x3C, 0x90, 0x7E, 0x83, 0x91, 0xF0, 0x9B, 0x51, 0x2E, 0xD8, 0x87, 0x81, 0x69, 0x54, 0x9C, 0xD9, 0x7F, 0x99, 0x11, 0x65, 0x85, 0xAA, 0xC7, 0x65, 0xDA, 0x00, 0xE4, 0xDA, 0x94, 0xDD, 0xCB, 0xEE, 0x04, 0xD6, 0xB5, 0xBD, 0x2D, 0x30, 0xFC, 0x20, 0x4F, 0x15, 0x7C, 0x9E, 0xD3, 0x2F, 0x39, 0xFC, 0xA6, 0xFB, 0xB5, 0x83, 0xD1, 0xDE, 0x43, 0x3A, 0x72, 0x51, 0x4A, 0xE2, 0x15, 0xCC, 0x63, 0x70, 0x88, 0x72, 0x52, 0x84, 0x86, 0x35, 0x05, 0xCF, 0xEF, 0x5D, 0x51, 0xFA, 0x95, 0x39, 0x0D, 0x37, 0xA1, 0xDD, 0x51, 0xDF, 0x54, 0x39, 0xC6, 0xFB, 0x76, 0x4C, 0x0B, 0xD6, 0x62, 0xEA, 0x84, 0x95, 0x56, 0xDF, 0xF8, 0x7F, 0xAA, 0x76, 0xDE, 0xDE, 0x5E, 0xA0, 0xA6, 0x56, 0x93, 0x31, 0xB3, 0x06, 0x34, 0x7B, 0xEC, 0x71, 0xB5, 0x47, 0xEF, 0x3E, 0xD4, 0x8B, 0x0A, 0xB2, 0xB1, 0xC7, 0x5F, 0xC5, 0x9B, 0xB0, 0x72, 0x38, 0xFF, 0x6C, 0x2E, 0x2E, 0xCF, 0x04, 0x00, 0x3C, 0xFC, 0x07, 0x9F, 0xF0, 0x6F, 0xB0, 0x14, 0xAD, 0x7B, 0x4D, 0xAC, 0x71, 0x53, 0xD8, 0xD1, 0x08, 0x5F, 0x11, 0xD8, 0x24, 0xD9, 0xB5, 0xA2, 0x0B, 0xFE, 0x8C, 0xDA, 0x83, 0x25, 0xC5, 0x2A, 0xCA, 0x97, 0x31, 0x3C, 0x4E, 0x53, 0xA6, 0x65, 0x3E, 0x59, 0xC5, 0xFE, 0x92, 0x8E, 0xA8, 0xE9, 0x93, 0xB6, 0xDF, 0xB8, 0x3A, 0xFE, 0xE9, 0x1C, 0x29, 0x60, 0x42, 0xA6, 0xC4, 0xE0, 0x0A, 0x04, 0xDC, 0xC5, 0x97, 0xCF, 0x79, 0x94, 0x67, 0x6D, 0x78, 0x7B, 0x88, 0xBA, 0x71, 0x96, 0xC1, 0xB9, 0x2D, 0xB6, 0x79, 0xFA, 0xC0, 0x00, 0x46, 0xE5, 0x11, 0x96, 0x13, 0xB0, 0x15, 0x48, 0x06, 0x5A, 0x94, 0x2C, 0x05, 0x01, 0xCF, 0x21, 0x7C, 0x7E, 0x47, 0xA1, 0x1E, 0x68, 0xD7, 0x84, 0x45, 0x1B, 0x1B, 0x1B, 0x03, 0x78, 0xD9, 0x2C, 0x58, 0xEF, 0xB5, 0xCC, 0x88, 0xF5, 0x0D, 0xCD, 0xC3, 0xD5, 0xF6, 0x26, 0x18, 0xCE, 0x53, 0x7C, 0x90, 0x34, 0x0D, 0xF1, 0x43, 0x70, 0x0F, 0xF1, 0x70, 0x77, 0xB0, 0x71, 0x4B, 0x83, 0x3D, 0xCC, 0xA3, 0x16, 0xAA, 0x8D, 0x96, 0xFF, 0x00, 0xB5, 0xC5, 0xB4, 0x52, 0x90, 0xDE, 0x1F, 0xB5, 0x7A, 0x8F, 0x6C, 0xA0, 0x22, 0xD5, 0x76, 0x48, 0xE5, 0x10, 0xE6, 0x59, 0xC2, 0xB7, 0xF7, 0x16, 0x13, 0x8E, 0x35, 0xFF, 0xCE, 0x34, 0x96, 0x7C, 0xFD, 0x18, 0x61, 0xA2, 0x5A, 0x88, 0x88, 0x2C, 0xE6, 0x66, 0x26, 0xB6, 0xA0, 0xDE, 0x04, 0x6D, 0x71, 0x46, 0xDB, 0xCE, 0xFC, 0x2D, 0x4C, 0xAF, 0x1B, 0xCE, 0xE2, 0x18, 0xCA, 0x96, 0x3D, 0xDF, 0x2B, 0xFC, 0x57, 0x29, 0xF4, 0x07, 0xC3, 0xB6, 0x5A, 0x37, 0x00, 0x44, 0xF7, 0x1F, 0x54, 0x8D, 0x38, 0x5D, 0xA0, 0xBC, 0xF8, 0x34, 0x7B, 0x9C, 0xFD, 0xCB, 0x42, 0x62, 0x0F, 0xC3, 0xBF, 0x5C, 0xE6, 0x3F, 0x8D, 0xBD, 0xDD, 0x3C, 0xA8, 0xE6, 0x21, 0x24, 0xF1, 0x38, 0x58, 0xF5, 0xF0, 0x9B, 0xB3, 0xA2, 0xE1, 0x40, 0xDC, 0xAB, 0xFD, 0xD3, 0xFB, 0x78, 0x26, 0x50, 0x93, 0x5A, 0xE4, 0x72, 0x6F, 0x2C, 0xC4, 0x4F, 0xD7, 0x77, 0xD9, 0xE4, 0xBC, 0x86, 0x2B, 0x0B, 0x36, 0xE4, 0xC2, 0x7F, 0x3E, 0x4B, 0xB5, 0xBA, 0xDD, 0xDA, 0xDE, 0x7F, 0xEE, 0x71, 0x51, 0xAF, 0x55, 0x6A, 0xD4, 0x45, 0xEC, 0x21, 0x0A, 0x94, 0x08, 0xAE, 0x1B, 0x0D, 0x68, 0x1A, 0x81, 0x0A, 0x5B, 0x3C, 0xDA, 0xC6, 0xF2, 0x78, 0x4E, 0xAF, 0x79, 0x06, 0x6A, 0xEB, 0x00, 0x67, 0xCE, 0x2E, 0xBC, 0xDF, 0xB9, 0xAF, 0x2F, 0x99, 0x30, 0x51, 0x78, 0x56, 0x89, 0x86, 0xDB, 0x5D, 0x9C, 0x0A, 0x68, 0xC2, 0x41, 0x01, 0x68, 0xC5, 0x1D, 0x9E, 0x47, 0xDC, 0x78, 0xDD, 0xF5, 0x1B, 0x9E, 0x75, 0x0D, 0x31, 0x59, 0xCE, 0xB3, 0xA1, 0x7D, 0x27, 0xF9, 0x3A, 0xC3, 0x96, 0xCD, 0x4B, 0x88, 0xE8, 0x8E, 0xC0, 0xC5, 0x06, 0x0B, 0xE6, 0x5E, 0x5E, 0xA1, 0xFA, 0xB5, 0x05, 0xD4, 0xF7, 0x6A, 0x10, 0xCF, 0xFE, 0x2E, 0xE0, 0xF8, 0x83, 0x6C, 0x6B, 0x51, 0xBE, 0x10, 0x4E, 0x64, 0x3B, 0x14, 0x4C, 0x9B, 0xA6, 0xD0, 0x53, 0x1F, 0x48, 0x68, 0xDC, 0x49, 0x38, 0x0B, 0x28, 0x59, 0xA6, 0x41, 0xD4, 0xC5, 0xC9, 0x69, 0x91, 0xA1, 0x49, 0x89, 0x10, 0xF8, 0xA6, 0x50, 0xDE, 0xCB, 0xB5, 0x7B, 0x00, 0x23, 0x6A, 0x23, 0x48, 0xDE, 0xBB, 0x9E, 0x67, 0x22, 0x37, 0x8B, 0x80, 0xC6, 0xD3, 0x78, 0x66, 0x48, 0x1D, 0xAE, 0x1C, 0x23, 0x6C, 0xEB, 0xDF, 0x68, 0x72, 0xFA, 0xEF, 0x0A, 0x29, 0x5D, 0xB1, 0xA9, 0x8B, 0xB7, 0xC9, 0xBF, 0xCB, 0x7F, 0x99, 0x4A, 0x7F, 0xB9, 0x15, 0x17, 0xCE, 0x14, 0xC8, 0xCC, 0xC1, 0xC3, 0x53, 0x5A, 0xBB, 0x05, 0x32, 0x79, 0xBC, 0xB9, 0x27, 0x2B, 0x7C, 0x93, 0x2F, 0xAA, 0xC0, 0x8F, 0xB0, 0x5A, 0xD1, 0x37, 0xF8, 0x37, 0x4D, 0x2C, 0x1B, 0xD4, 0x23, 0x8D, 0x06, 0xA1, 0xF5, 0x49, 0xFC, 0x11, 0x6A, 0x0D, 0x1B, 0x51, 0x75, 0x4B, 0xEE, 0xD4, 0xB1, 0xEF, 0xDD, 0x4C, 0xDB, 0x55, 0xAD, 0xF9, 0x4B, 0x45, 0x0D, 0x57, 0xC4, 0x5C, 0x91, 0xD2, 0x9A, 0xD0, 0xA9, 0x4D, 0x5D, 0xC9, 0x86, 0x67, 0xEF, 0x0E, 0x70, 0x42, 0x1F, 0x39, 0x15, 0x6F, 0x11, 0x61, 0xFE, 0xE5, 0x39, 0xA4, 0xE6, 0x20, 0xB6, 0x1E, 0x8B, 0xC6, 0xBC, 0xB1, 0xFA, 0x95, 0xA2, 0x39, 0xA5, 0x16, 0x7D, 0xC8, 0x3E, 0xA3, 0x10, 0x5E, 0x21, 0x34, 0x6D, 0x20, 0x4E, 0x98, 0xFF, 0xA7, 0x04, 0xCA, 0x81, 0x3B, 0x8C, 0x57, 0x4C, 0x74, 0x05, 0xCE, 0x2F, 0xEA, 0xFE, 0x84, 0xFC, 0xD7, 0x5E, 0x46, 0x2E, 0xF9, 0x63, 0xF9, 0x6A, 0x9C, 0x34, 0xAB, 0x96, 0xD6, 0xE5, 0xC1, 0xF3, 0x20, 0x4B, 0x74, 0x0D, 0x6B, 0x97, 0x54, 0xC4, 0x05, 0xE0, 0xC7, 0xDC, 0xE2, 0xF0, 0x80, 0xD4, 0xF7, 0xD0, 0xF4, 0xFE, 0x96, 0x5E, 0xC1, 0x2D, 0x6D, 0xBF, 0xC5, 0xC7, 0xC7, 0x9F, 0x12, 0x27, 0x6D, 0xD8, 0xD2, 0x25, 0x9F, 0xE3, 0x69, 0xFD, 0xF9, 0xBC, 0xE0, 0x40, 0x9A, 0x92, 0xE6, 0x5F, 0xD1, 0x2C, 0xDA, 0x67, 0x23, 0xC5, 0x48, 0x62, 0x55, 0xE9, 0x61, 0x99, 0x57, 0x34, 0xA2, 0xD3, 0x44, 0xDD, 0xBA, 0x92, 0xF1, 0xE5, 0x9A, 0xE5, 0xE1, 0x25, 0x99, 0xAE, 0x43, 0x0C, 0xFA, 0xA9, 0xF6, 0xE9, 0x56, 0x12, 0x8A, 0xB6, 0x4F, 0xD6, 0x9B, 0xC4, 0x51, 0xC9, 0x10, 0xFB, 0xB6, 0x4E, 0x58, 0x57, 0x44, 0xA9, 0xD1, 0x21, 0xC2, 0xA7, 0x04, 0x9A, 0xC4, 0xCB, 0x10, 0xC8, 0x37, 0xAD, 0x50, 0x67, 0x78, 0x15, 0xB7, 0x6A, 0xE4, 0xE3, 0xB0, 0xEC, 0x7C, 0x80, 0xDA, 0xAF, 0x93, 0xC4, 0x9A, 0xF1, 0xBA, 0xE1, 0x32, 0x6B, 0xAC, 0x2F, 0xF7, 0x8E, 0x1A, 0x13, 0x17, 0x19, 0x55, 0x48, 0x7D, 0xC3, 0x16, 0xA3, 0xE5, 0x88, 0xB7, 0xAC, 0xEF, 0x9E, 0x6B, 0x9F, 0x45, 0xB9, 0x36, 0xB6, 0x13, 0x8F, 0xA0, 0x9B, 0xBF, 0xCE, 0xC2, 0x9B, 0x60, 0x5C, 0x04, 0x1C, 0x72, 0xE7, 0xCA, 0x29, 0x8A, 0x51, 0x98, 0x26, 0x31, 0x10, 0xFB, 0x47, 0x04, 0x86, 0x1F, 0x78, 0x7B, 0xE5, 0x8C, 0xCA, 0x96, 0x18, 0xBD, 0xC9, 0x6E, 0xC4, 0xE2, 0xE8, 0xF1, 0xD2, 0xA6, 0x2C, 0x6C, 0x24, 0x48, 0x7D, 0x76, 0xB1, 0x57, 0x56, 0xD9, 0x38, 0xCA, 0xC6, 0x63, 0xAB, 0x57, 0x7E, 0xE1, 0xEF, 0x4B, 0xD9, 0x7C, 0x26, 0x17, 0x30, 0x31, 0xCE, 0xB1, 0xBB, 0x1D, 0xAC, 0xB9, 0x49, 0x52, 0xFF, 0x4F, 0xC5, 0x21, 0xC2, 0x5C, 0x38, 0x78, 0xE8, 0x00, 0xE6, 0xFC, 0x91, 0x4C, 0x49, 0x16, 0x4A, 0x70, 0xFF, 0x70, 0x51, 0xBA, 0xB0, 0x03, 0x60, 0xEB, 0x44, 0xF0, 0xBC, 0xD3, 0xEA, 0xD5, 0x18, 0x6E, 0xFA, 0xE0, 0x6F, 0xB0, 0x42, 0xF0, 0xDB, 0xAF, 0xE9, 0x8D, 0x43, 0x1B, 0x93, 0x3D, 0xCE, 0x44, 0xDC, 0xFB, 0xCD, 0x05, 0xE4, 0xD6, 0x89, 0xB2, 0x4A, 0xBE, 0x86, 0x51, 0x9B, 0x50, 0xF7, 0x70, 0x15, 0xF9, 0x34, 0xFE, 0x3D, 0x7B, 0x06, 0xF2, 0x24, 0x72, 0xB1, 0x52, 0xC5, 0x95, 0x34, 0xA4, 0x9C, 0xE0, 0x0A, 0x31, 0x80, 0x40, 0x83, 0x6E, 0xC7, 0x02, 0x38, 0xA1, 0x0C, 0x17, 0xDC, 0xEA, 0x74, 0x09, 0x31, 0xDF, 0xB6, 0x2A, 0x29, 0xDC, 0xF3, 0x2F, 0x12, 0x0E, 0x73, 0x23, 0x5F, 0xAD, 0xC8, 0x76, 0x05, 0xA2, 0x5B, 0x94, 0xFE, 0x91, 0xBF, 0x6B, 0x74, 0x00, 0xF8, 0x30, 0x20, 0x50, 0x1E, 0x93, 0xC2, 0xD8, 0xC6, 0x0A, 0xE4, 0x91, 0x84, 0x78, 0xC7, 0x91, 0xCF, 0x6D, 0xE8, 0x2E, 0x43, 0xE4, 0xF8, 0xB6, 0xE3, 0xE4, 0xDD, 0xBC, 0x8C, 0xD4, 0x1F, 0xDA, 0x3D, 0xD4, 0xDC, 0x45, 0x16, 0x35, 0xA5, 0xB2, 0x26, 0xFC, 0x6E, 0x73, 0x0E, 0xDB, 0xA8, 0xA9, 0x05, 0x33, 0xCA, 0xF2, 0x37, 0x34, 0x9F, 0x93, 0x01, 0x67, 0x0B, 0xAF, 0x03, 0xDF, 0x71, 0x07, 0x79, 0xFA, 0xAF, 0x4F, 0x4E, 0xCC, 0xD8, 0x9F, 0x4C, 0xD7, 0x34, 0x48, 0xD6, 0xF6, 0xCB, 0x84, 0x01, 0x1C, 0xB4, 0xC7, 0xBE, 0x0D, 0x51, 0xC1, 0x43, 0xF8, 0x4A, 0x34, 0x5B, 0xA5, 0x3F, 0xCC, 0x42, 0x1F, 0xCA, 0x47, 0x0F, 0x36, 0xFC, 0x22, 0xD1, 0x87, 0x76, 0x97, 0xB1, 0x2D, 0x91, 0x12, 0xCE, 0xD4, 0xC9, 0xED, 0x6F, 0x59, 0x2C, 0x87, 0x57, 0x01, 0x86, 0x10, 0x27, 0xE9, 0x57, 0x87, 0xA3, 0x4F, 0x21, 0x97, 0x77, 0x9B, 0x52, 0xF3, 0xA1, 0xE8, 0x7B, 0xCA, 0x4A, 0x60, 0x36, 0x3D, 0x65, 0xE1, 0x0B, 0x11, 0x2C, 0xB9, 0x06, 0xBA, 0xC5, 0xCF, 0x2C, 0xD8, 0x5E, 0xB7, 0x0E, 0x14, 0xC3, 0x04, 0x2B, 0xF9, 0x4C, 0x5A, 0xF0, 0xED, 0x87, 0xFC, 0x71, 0xF6, 0xC9, 0x1C, 0x56, 0x62, 0xBD, 0x09, 0x1F, 0x77, 0xD9, 0x53, 0x47, 0xA9, 0x6C, 0x96, 0x06, 0x92, 0xB8, 0x51, 0xCB, 0xFA, 0x86, 0x27, 0x8D, 0xF6, 0x55, 0x64, 0xE4, 0xB4, 0x69, 0xB8, 0xE6, 0xD0, 0x20, 0xA4, 0x43, 0x5A, 0x1C, 0x36, 0x19, 0x99, 0x0E, 0x78, 0x25, 0x92, 0x00, 0xAC, 0x49, 0x99, 0xF4, 0x68, 0x8F, 0xE5, 0xD6, 0xB4, 0xF5, 0xB4, 0x48, 0x8D, 0x7B, 0x66, 0x1D, 0x22, 0xB5, 0xCE, 0xA1, 0xC8, 0x61, 0x68, 0x51, 0xEC, 0x30, 0x5A, 0x69, 0xB4, 0x1C, 0x15, 0x76, 0xB9, 0x51, 0xF1, 0x19, 0xC6, 0xCB, 0x37, 0x12, 0x4E, 0x07, 0xB5, 0xDA, 0xF7, 0x0D, 0xCE, 0x63, 0x0F, 0x61, 0x55, 0x75, 0x37, 0x1D, 0x1D, 0xA4, 0x0F, 0x6A, 0x8C, 0x29, 0x70, 0xFC, 0x53, 0x6C, 0x59, 0xEC, 0xC0, 0xEE, 0xF3, 0xB6, 0x3C, 0xB1, 0xCF, 0x9F, 0x7E, 0x17, 0x77, 0xC6, 0x8D, 0x37, 0x7F, 0x2D, 0x7F, 0x14, 0x36, 0x44, 0xEE, 0x4A, 0xC3, 0x7A, 0x1E, 0x15, 0x19, 0xBB, 0x70, 0x45, 0x25, 0xC9, 0x5F, 0x21, 0xC5, 0xC5, 0xC5, 0x26, 0x54, 0xCB, 0x8C, 0xE1, 0x7E, 0x01, 0x9E, 0x3D, 0x29, 0xC2, 0x6D, 0xF0, 0xBD, 0x4B, 0x97, 0x12, 0x79, 0xAE, 0x27, 0xD3, 0x7F, 0x7F, 0xF2, 0x02, 0x29, 0xD3, 0x5E, 0x87, 0x5F, 0x20, 0x02, 0x55, 0x27, 0xCE, 0xF1, 0x1E, 0x99, 0xFD, 0x52, 0xC2, 0xF5, 0xB3, 0xE5, 0x43, 0xC5, 0x48, 0xC2, 0xFE, 0x45, 0x19, 0x6B, 0xD7, 0x7B, 0x80, 0x42, 0x7F, 0x74, 0x80, 0xF0, 0x36, 0x24, 0xFF, 0xB3, 0x81, 0xBC, 0x75, 0x43, 0x59, 0x64, 0x55, 0x55, 0xBA, 0xC3, 0xE6, 0xAC, 0x24, 0x7A, 0x86, 0x63, 0x46, 0xD8, 0xF7, 0x56, 0xAD, 0xAA, 0xA5, 0xF0, 0x65, 0x8D, 0xA0, 0xF5, 0xD6, 0xB2, 0x0C, 0x74, 0x11, 0x16, 0x60, 0xF0, 0xCC, 0xD3, 0x83, 0xE5, 0xC9, 0xC7, 0x69, 0x0D, 0x25, 0x25, 0x83, 0xB5, 0xAE, 0xA1, 0xC3, 0x75, 0x37, 0x6F, 0x3C, 0x2B, 0x81, 0x19, 0x49, 0x37, 0x02, 0x35, 0xA3, 0xF7, 0x6C, 0x09, 0xB1, 0x29, 0xB1, 0x98, 0x67, 0x2F, 0xBC, 0xE2, 0xB9, 0x9C, 0x27, 0x54, 0x12, 0x7D, 0xAE, 0x55, 0x48, 0xD5, 0x54, 0xC9, 0x9C, 0xDF, 0x51, 0x49, 0x1B, 0x0B, 0x9B, 0x56, 0xE5, 0x12, 0xEE, 0x5C, 0x45, 0xE8, 0xB9, 0xD0, 0xE1, 0xB1, 0xCC, 0x05, 0xFC, 0x24, 0xA5, 0x1B, 0x1B, 0xB4, 0x76, 0xCF, 0x19, 0x5A, 0x85, 0x13, 0xBC, 0x3B, 0xCC, 0x4A, 0x37, 0xFA, 0xBA, 0x1A, 0x17, 0xAA, 0x7A, 0x03, 0xDB, 0x18, 0x7D, 0xBD, 0x52, 0xFC, 0xDE, 0x89, 0xFE, 0x97, 0x9D, 0xD8, 0x65, 0xF9, 0xF3, 0xDC, 0x16, 0x0C, 0xD5, 0x1A, 0x7F, 0x7A, 0x9D, 0x45, 0xDE, 0x35, 0x8E, 0xD8, 0xD7, 0xA8, 0x9A, 0x16, 0xE4, 0x9A, 0xAD, 0x62, 0x45, 0x78, 0xE0, 0xA5, 0xBB, 0x4A, 0x2C, 0xD5, 0xDF, 0x07, 0xD2, 0xA0, 0xA8, 0x85, 0x9F, 0x14, 0x5F, 0xE1, 0x65, 0x3B, 0xA9, 0x9F, 0x45, 0xDF, 0x4C, 0xB8, 0x44, 0xF7, 0xEF, 0x67, 0x41, 0xD6, 0xE2, 0xF3, 0xBF, 0x87, 0x1E, 0x44, 0xA4, 0x95, 0xD4, 0x72, 0xE2, 0x16, 0x83, 0xC5, 0x2F, 0x96, 0xE8, 0x4A, 0x00, 0x7A, 0xE2, 0xA5, 0x57, 0xF4, 0xF4, 0x32, 0x34, 0x5F, 0x94, 0x8C, 0x17, 0x4A, 0xF0, 0xB7, 0xE7, 0xFA, 0xF0, 0xB5, 0x1E, 0x6B, 0x55, 0x2D, 0x6F, 0x5E, 0xCD, 0xCF, 0xD3, 0x10, 0xBE, 0x17, 0xC7, 0x6E, 0x97, 0xA0, 0xCA, 0x48, 0x08, 0xBD, 0x24, 0x5C, 0xE2, 0x41, 0x38, 0x3A, 0x34, 0xF5, 0x3D, 0xAC, 0x3C, 0xD1, 0x79, 0xAD, 0x55, 0x8B, 0x3B, 0x0E, 0x6E, 0xB1, 0x06, 0xA3, 0x2A, 0xF6, 0x7A, 0x97, 0xAA, 0x99, 0xD9, 0x9D, 0x2B, 0x2F, 0xFA, 0xF9, 0x65, 0xC5, 0x8C, 0x44, 0x8C, 0x0D, 0x8F, 0x8A, 0x77, 0x2D, 0xED, 0x2A, 0xDD, 0x90, 0x45, 0xAF, 0xBC, 0x75, 0x61, 0x94, 0xD5, 0xF8, 0x25, 0x77, 0x2E, 0xB5, 0xC0, 0xEB, 0xA2, 0x14, 0x47, 0x80, 0x35, 0x3C, 0xBF, 0x93, 0x26, 0x93, 0x68, 0xBD, 0x1F, 0xF7, 0x72, 0x0B, 0x21, 0x1B, 0xE7, 0x5D, 0xE0, 0xA8, 0xAE, 0x7B, 0xCE, 0x53, 0xF4, 0x27, 0x25, 0x92, 0x7D, 0xE8, 0xF7, 0x60, 0xA4, 0x8A, 0x99, 0x15, 0xB0, 0x89, 0x6C, 0x73, 0x09, 0x50, 0xC3, 0x32, 0x6D, 0x8C, 0x17, 0x63, 0x63, 0xFB, 0xE2, 0x35, 0x35, 0xC5, 0x64, 0x4B, 0x85, 0xB5, 0xAF, 0x45, 0xF4, 0xB4, 0xDD, 0xF6, 0xDE, 0xAD, 0x99, 0xD8, 0xFA, 0xBA, 0x45, 0xC0, 0x80, 0xB8, 0x41, 0x3C, 0x92, 0x3B, 0xF0, 0xBE, 0xBB, 0x34, 0x78, 0x01, 0x8A, 0xA1, 0x92, 0x5A, 0x04, 0x8B, 0x0B, 0xDA, 0x92, 0xC9, 0xB6, 0x5C, 0xD0, 0x54, 0x5B, 0xB9, 0x41, 0xD3, 0xDF, 0x10, 0x2C, 0x22, 0xF9, 0x25, 0xC2, 0x05, 0xD5, 0xCB, 0x0A, 0xC2, 0x9C, 0xAA, 0xC4, 0x23, 0x49, 0x9C, 0x47, 0x53, 0xBC, 0x1D, 0xB1, 0x88, 0x92, 0xE5, 0xFC, 0x9A, 0xE0, 0x4F, 0x03, 0x4A, 0x44, 0xE9, 0x68, 0x7D, 0xC1, 0x16, 0xC2, 0xDC, 0xA2, 0xEC, 0xC6, 0x02, 0x06, 0x91, 0x21, 0x3F, 0x54, 0xA4, 0xF7, 0x5A, 0x70, 0x7D, 0x5D, 0xA6, 0xA8, 0x33, 0x9A, 0x42, 0x6D, 0x1C, 0xDE, 0x12, 0x41, 0xC3, 0x32, 0x80, 0x78, 0xA7, 0x1A, 0x4F, 0xDE, 0x08, 0x18, 0xF6, 0x7B, 0x65, 0x95, 0x49, 0xC6, 0xCD, 0x1B, 0x65, 0x8C, 0x29, 0x3C, 0x3A, 0x54, 0x49, 0xE5, 0x62, 0x90, 0x36, 0x6C, 0x76, 0x1D, 0x00, 0xA9, 0x94, 0x43, 0xD6, 0x55, 0x5E, 0xBA, 0x5B, 0x1C, 0xA2, 0xF8, 0x27, 0x96, 0x9C, 0xAA, 0xE9, 0xED, 0x7A, 0x98, 0xC5, 0x84, 0xF0, 0xE1, 0xFF, 0x00, 0xDD, 0x7C, 0x1C, 0xAA, 0x58, 0x91, 0x16, 0x61, 0x3E, 0x8C, 0x11, 0xA6, 0x05, 0x29, 0x51, 0xFB, 0x14, 0xDD, 0xA3, 0x82, 0xD2, 0x39, 0xBD, 0xC4, 0x42, 0x69, 0x4F, 0x56, 0x51, 0x88, 0x5F, 0x4A, 0x7D, 0xC6, 0xE4, 0x45, 0x43, 0x27, 0x4C, 0x6E, 0x3A, 0xAE, 0xDE, 0xC6, 0xEF, 0x58, 0xAB, 0xF0, 0x5C, 0x62, 0x53, 0x94, 0x4A, 0x71, 0xA5, 0x6B, 0x7C, 0x50, 0x48, 0xB5, 0xAF, 0xE7, 0xA5, 0xB8, 0x56, 0x65, 0x94, 0x5D, 0x69, 0xCE, 0x5E, 0x1B, 0xF5, 0x04, 0x5C, 0x3F, 0x74, 0x4A, 0x80, 0xB6, 0x4C, 0x56, 0xE8, 0x97, 0x1A, 0xFF, 0xB8, 0x30, 0x5A, 0x7A, 0x13, 0xD9, 0x02, 0x34, 0x57, 0x4C, 0x40, 0xC4, 0xAC, 0xEF, 0xDC, 0x5F, 0xF4, 0x88, 0xC2, 0x4A, 0x50, 0xF0, 0xF3, 0xEF, 0xB0, 0x20, 0xAF, 0xD2, 0x8B, 0x2E, 0xBE, 0xF5, 0xF4, 0xC0, 0xF1, 0x3C, 0x4B, 0x34, 0x9B, 0x86, 0x8A, 0xDA, 0x33, 0x64, 0x08, 0x28, 0xFB, 0xC0, 0x81, 0x8D, 0x6A, 0x6D, 0x01, 0xEE, 0x63, 0x84, 0x83, 0xAB, 0xFC, 0x21, 0xF9, 0x33, 0x76, 0xCF, 0xBA, 0x01, 0x0D, 0x20, 0x1E, 0x87, 0x94, 0x42, 0x96, 0x9F, 0x8A, 0xA2, 0xC1, 0xBC, 0x83, 0x22, 0x2A, 0xFF, 0x6E, 0x6D, 0x67, 0x94, 0xF1, 0x4C, 0xE8, 0xD1, 0x4E, 0x58, 0x1E, 0xE9, 0xE2, 0x9F, 0xA9, 0x72, 0x2E, 0x0D, 0x98, 0xA8, 0x40, 0xA9, 0x52, 0x9E, 0xF6, 0x3B, 0xBE, 0xC5, 0x71, 0x4C, 0xE6, 0x56, 0x86, 0x76, 0x17, 0xD5, 0x48, 0xF9, 0x5A, 0xCB, 0x84, 0x30, 0xA9, 0xFA, 0xC8, 0x5E, 0xD9, 0xA9, 0x19, 0xA7, 0xB6, 0xE7, 0xAA, 0x5B, 0x4F, 0x11, 0xB8, 0x15, 0x57, 0x6C, 0x25, 0x32, 0x94, 0xD2, 0xCD, 0x1E, 0x84, 0xD4, 0x2F, 0xAA, 0xB3, 0xF6, 0x62, 0x74, 0xD0, 0x6F, 0x2F, 0x08, 0x25, 0xF7, 0x0C, 0x04, 0x4E, 0xB7, 0x57, 0xCC, 0x61, 0x37, 0x7A, 0x23, 0x4F, 0x15, 0x85, 0x91, 0xBC, 0x4D, 0xA4, 0x74, 0x79, 0xFD, 0x03, 0xE5, 0x11, 0xEA, 0xEC, 0xB6, 0x07, 0x92, 0x22, 0xE9, 0x91, 0x9D, 0x3F, 0xD4, 0x2E, 0x39, 0xFD, 0xAB, 0x41, 0xBE, 0xEC, 0x0D, 0xCA, 0x59, 0x83, 0x37, 0x8D, 0x35, 0xCF, 0x73, 0xC7, 0x95, 0xFD, 0x71, 0xE9, 0x01, 0x16, 0x2D, 0xB6, 0x96, 0x49, 0x5E, 0x92, 0xC7, 0x35, 0xBD, 0x7E, 0x8D, 0x52, 0x13, 0xCE, 0x69, 0x9B, 0x27, 0x57, 0xBD, 0x2A, 0xB1, 0x24, 0xD6, 0x7C, 0x04, 0x0E, 0x43, 0xF5, 0x25, 0x1D, 0xB3, 0xC7, 0xBF, 0x05, 0xBB, 0x0F, 0x18, 0x1B, 0x70, 0x3A, 0x85, 0xB8, 0x91, 0xF8, 0xA2, 0xE0, 0x15, 0x43, 0xAA, 0x7C, 0xD9, 0xD7, 0x3C, 0x50, 0xEB, 0x64, 0x46, 0xF1, 0xDC, 0x49, 0xBC, 0x75, 0x5D, 0x70, 0x00, 0x04, 0xE9, 0xEE, 0x9D, 0xF2, 0xD9, 0xBF, 0x04, 0xA8, 0x05, 0xE3, 0x40, 0x9A, 0xA3, 0x93, 0x76, 0x44, 0xFB, 0x4A, 0x07, 0x3B, 0xD1, 0x07, 0x1F, 0x03, 0xCC, 0x0E, 0xC0, 0x5D, 0xE2, 0x9B, 0xB5, 0x9F, 0xA9, 0xAF, 0x5B, 0x06, 0x60, 0x5F, 0x13, 0xA4, 0xA7, 0x9C, 0x21, 0x3E, 0x3F, 0x69, 0xCD, 0xCA, 0xB5, 0x55, 0x4F, 0xC1, 0x3C, 0xF3, 0x29, 0xD5, 0x60, 0xDD, 0x1F, 0x7F, 0x98, 0x27, 0x8A, 0xEC, 0x46, 0xFD, 0xAA, 0x76, 0xFE, 0x38, 0x85, 0xA9, 0x0D, 0xE0, 0x94, 0x62, 0x14, 0x78, 0x58, 0xAC, 0x83, 0xB1, 0x54, 0x8B, 0x7C, 0x1C, 0x0E, 0xF4, 0xA7, 0x06, 0x86, 0x1F, 0xA5, 0x4B, 0x0A, 0xF7, 0x9A, 0x15, 0xF9, 0x8D, 0x6D, 0x54, 0xC1, 0x5D, 0x5F, 0x0A, 0xC6, 0x1C, 0xB2, 0x46, 0x34, 0xE8, 0xBC, 0x4B, 0x44, 0xB6, 0xD7, 0xF6, 0xA7, 0xF0, 0xE1, 0x89, 0xAA, 0x6D, 0x67, 0xC0, 0x4F, 0xD0, 0xE0, 0xA0, 0x90, 0x3B, 0x07, 0x00, 0xB0, 0xCF, 0x6C, 0x14, 0xF2, 0x7A, 0x67, 0xE3, 0x16, 0x85, 0x3D, 0xE0, 0x60, 0x56, 0xD8, 0x7C, 0xC8, 0xD0, 0x6B, 0xA0, 0xAB, 0x04, 0x94, 0x14, 0xB7, 0xFF, 0x1F, 0x05, 0x2B, 0x78, 0x08, 0xD2, 0x2A, 0x54, 0xD4, 0xF5, 0xCA, 0xDC, 0xC2, 0x89, 0x77, 0xEA, 0x60, 0x83, 0x73, 0xB6, 0xA6, 0xDB, 0xA6, 0xCE, 0xAE, 0xCA, 0x8F, 0xCB, 0x10, 0xF0, 0x7F, 0x93, 0x5E, 0xEE, 0x4E, 0x15, 0xBB, 0xDD, 0x23, 0x28, 0x2F, 0x2C, 0x3E, 0xB5, 0xFA, 0x7F, 0x5F, 0x3D, 0xF1, 0x30, 0xDC, 0x92, 0xF7, 0xC8, 0xC8, 0x48, 0x98, 0x03, 0xAF, 0x84, 0xF5, 0xD1, 0xBD, 0x1E, 0x01, 0xBD, 0xCD, 0x85, 0x2B, 0xBD, 0x95, 0x5E, 0xB0, 0xDC, 0x7D, 0x3B, 0xF5, 0x01, 0x6A, 0x47, 0x90, 0x77, 0xB7, 0x02, 0x05, 0xA8, 0x79, 0x00, 0x91, 0x8C, 0x86, 0x97, 0x7B, 0x27, 0x4A, 0xB8, 0x33, 0x28, 0xC5, 0x75, 0x05, 0xC7, 0xCE, 0x96, 0x95, 0xE6, 0x99, 0xB6, 0xCC, 0x0D, 0x34, 0xB8, 0x10, 0xC3, 0x2D, 0xCB, 0x04, 0xCA, 0x9F, 0x23, 0x30, 0x35, 0xD5, 0xF6, 0x3B, 0x23, 0xEA, 0x15, 0x7D, 0x9D, 0x6D, 0xB6, 0x68, 0xB0, 0x31, 0x88, 0x0E, 0x35, 0xF1, 0x72, 0xC0, 0xF3, 0xC5, 0xFF, 0x7A, 0x52, 0x90, 0x70, 0xE7, 0xB9, 0x29, 0x25, 0x8B, 0x5C, 0x5D, 0xF4, 0x15, 0x2D, 0x92, 0xAF, 0x86, 0x72, 0x58, 0x3B, 0x2A, 0x09, 0x25, 0x29, 0xC0, 0x41, 0xE0, 0xA1, 0x4C, 0x76, 0x69, 0x63, 0x93, 0x65, 0x08, 0x75, 0x18, 0xA9, 0x09, 0xA8, 0xBF, 0x2A, 0x90, 0xFC, 0x95, 0x4E, 0x50, 0xD5, 0xA9, 0xB1, 0x87, 0x33, 0x94, 0xCC, 0x49, 0x69, 0x2A, 0xDE, 0x86, 0x06, 0xB5, 0x3F, 0xF6, 0xC2, 0xBB, 0x52, 0xF5, 0xED, 0x22, 0x6B, 0x38, 0xE7, 0x5B, 0x03, 0x63, 0x31, 0x44, 0x47, 0x25, 0xE4, 0x34, 0xF0, 0x03, 0xDD, 0xDC, 0x20, 0xDC, 0x70, 0xCA, 0xCC, 0xD9, 0xBA, 0x5F, 0x68, 0xC4, 0x91, 0x5B, 0x49, 0x6D, 0xB3, 0xAA, 0xEA, 0x34, 0x2A, 0xC9, 0xE6, 0x46, 0x41, 0x4A, 0x8F, 0xD0, 0xF5, 0xC7, 0x99, 0xB3, 0x2A, 0x5A, 0xE1, 0x17, 0x4D, 0xC8, 0x24, 0xDC, 0x20, 0x86, 0x4A, 0x25, 0x3F, 0x0C, 0xCC, 0x14, 0x07, 0xAD, 0x5C, 0x12, 0xC0, 0x50, 0x57, 0x41, 0x4A, 0x48, 0x2F, 0x4D, 0x18, 0x08, 0x79, 0x35, 0x20, 0xA7, 0x5F, 0xB9, 0x83, 0x5E, 0x93, 0x91, 0xE2, 0xCB, 0xAB, 0x8B, 0xAB, 0xF1, 0x92, 0x19, 0x52, 0xF1, 0x33, 0x3F, 0x0A, 0xB8, 0x61, 0xD5, 0x5C, 0xC8, 0x6F, 0x05, 0x6C, 0x69, 0x0E, 0x3D, 0x99, 0xE2, 0xD2, 0xD2, 0x08, 0x76, 0x64, 0xEB, 0x1B, 0xBC, 0x79, 0xB6, 0xE4, 0xA9, 0x82, 0xF1, 0x77, 0x59, 0x78, 0xC0, 0x80, 0xAD, 0xD2, 0x7D, 0xC2, 0xC7, 0x6C, 0xF1, 0x2A, 0x6E, 0xDE, 0x0C, 0x9F, 0xE0, 0x77, 0x91, 0xF2, 0xE8, 0xE4, 0x7B, 0xA7, 0xEF, 0xDA, 0xD0, 0x78, 0xCD, 0x29, 0x3E, 0x59, 0x05, 0x68, 0xBA, 0x6A, 0x7A, 0x17, 0x7E, 0x37, 0xF0, 0x21, 0xF8, 0x4E, 0xC7, 0xD8, 0xDE, 0x13, 0x43, 0x55, 0x0F, 0x41, 0x5A, 0x6E, 0x98, 0x6B, 0xD0, 0x24, 0xC1, 0x0E, 0xA9, 0x6B, 0x63, 0xA9, 0xAF, 0x8C, 0x66, 0x9C, 0xA0, 0x43, 0xCB, 0x2E, 0xEF, 0xA0, 0x20, 0x49, 0xEA, 0x11, 0x06, 0x2D, 0xDB, 0xDD, 0x2F, 0x5F, 0xB7, 0x5B, 0x06, 0xD5, 0xA4, 0xFE, 0xEA, 0xE8, 0x76, 0xEA, 0x29, 0xD3, 0x21, 0x52, 0x0D, 0x96, 0xA4, 0xF7, 0x58, 0x74, 0xAF, 0xAD, 0xB8, 0x29, 0xDB, 0x5D, 0x0A, 0xC2, 0x89, 0xEF, 0xF6, 0x35, 0x2A, 0xD6, 0xEB, 0x03, 0xDD, 0x73, 0x41, 0x6D, 0xBB, 0x52, 0xFA, 0xC0, 0x5E, 0xFD, 0xFF, 0xF2, 0x64, 0x2E, 0x42, 0xCB, 0x95, 0x40, 0xA7, 0xDD, 0x2E, 0x7C, 0xEF, 0x2A, 0x18, 0x97, 0x53, 0x67, 0xDB, 0x00, 0xC5, 0x94, 0xFD, 0x2F, 0xD9, 0xF7, 0x10, 0xA6, 0xC1, 0x0B, 0x20, 0x4C, 0xE0, 0x2E, 0x72, 0x6D, 0xE9, 0x00, 0x23, 0xE4, 0x63, 0xD3, 0x03, 0x16, 0x8C, 0x71, 0x35, 0x95, 0xAE, 0x99, 0x88, 0xA4, 0x40, 0x9D, 0x3C, 0xCB, 0x58, 0x4E, 0x78, 0xF4, 0x9E, 0xBD, 0x17, 0xDD, 0x6E, 0x08, 0xDF, 0xD9, 0x66, 0xEB, 0xD9, 0x2F, 0x7E, 0x41, 0x29, 0xCB, 0xD3, 0xEA, 0x3B, 0xF0, 0x57, 0xAE, 0xD9, 0x64, 0x8E, 0x75, 0xE7, 0x48, 0x71, 0x22, 0xD9, 0x68, 0xC7, 0x49, 0x41, 0x9B, 0x78, 0xCE, 0x05, 0x1C, 0xA8, 0xFF, 0x66, 0x4A, 0xE1, 0x56, 0x13, 0x47, 0x9A, 0x1E, 0x99, 0xC4, 0x00, 0xE4, 0xF3, 0xBD, 0x00, 0x9B, 0x58, 0xA0, 0xC7, 0xDC, 0x9B, 0x53, 0xE7, 0x81, 0xF6, 0xDE, 0x8E, 0x82, 0x35, 0x77, 0xB4, 0x47, 0x44, 0x6B, 0x7E, 0xDA, 0x6D, 0x49, 0xD6, 0x1C, 0x7A, 0xFB, 0x83, 0xA7, 0xCE, 0xA7, 0x0C, 0xE8, 0xAD, 0xBA, 0x94, 0xBF, 0xB0, 0xD9, 0xEC, 0x7D, 0x7A, 0xC5, 0x73, 0x38, 0xAA, 0x61, 0xDE, 0x25, 0xAE, 0x86, 0x18, 0x78, 0x04, 0x5C, 0x9A, 0x2C, 0x58, 0x54, 0xD2, 0x8D, 0x01, 0x30, 0x3F, 0xE1, 0xBA, 0x6D, 0x18, 0x9D, 0x01, 0x98, 0x94, 0x19, 0xE0, 0x46, 0x91, 0xFC, 0xAF, 0x9B, 0x88, 0x2A, 0xB9, 0x3E, 0x97, 0x1D, 0xA1, 0x0D, 0x2A, 0x57, 0xE7, 0xBF, 0x8F, 0xE8, 0x82, 0xDC, 0x5F, 0xF9, 0xD6, 0x3B, 0x1A, 0x8C, 0x10, 0xCF, 0x17, 0x48, 0x13, 0x09, 0x1D, 0x0D, 0xC6, 0x16, 0x75, 0x59, 0xD2, 0x28, 0x08, 0xE6, 0x03, 0x3C, 0x47, 0xED, 0xC0, 0x9C, 0x0F, 0xD2, 0x24, 0x1E, 0xD2, 0xAF, 0x20, 0x05, 0xEF, 0x88, 0x8C, 0xC0, 0x8F, 0x7C, 0xA4, 0xF7, 0xB6, 0xC5, 0x26, 0xBC, 0xF8, 0xDB, 0xF3, 0xC1, 0xEE, 0x63, 0x76, 0xBC, 0xBC, 0xB1, 0x90, 0xE0, 0x1C, 0x13, 0xF4, 0x6D, 0x03, 0x44, 0x2D, 0xE4, 0xFB, 0x43, 0x78, 0x05, 0x00, 0xEA, 0x2C, 0xBC, 0x86, 0xA4, 0x72, 0x1B, 0xC8, 0x0D, 0xC0, 0x6E, 0xD4, 0x87, 0x16, 0x0F, 0x55, 0xE6, 0x02, 0x88, 0x9C, 0xC5, 0x99, 0x85, 0x8C, 0x8A, 0x6A, 0x38, 0xCD, 0xE8, 0x57, 0xF1, 0x80, 0x60, 0x52, 0xB8, 0xEB, 0xB0, 0xC2, 0xC4, 0xA9, 0x53, 0x19, 0xDC, 0x53, 0xCE, 0x66, 0xDB, 0xFA, 0x4D, 0x17, 0x39, 0xA4, 0xEA, 0x9D, 0xE8, 0x14, 0x77, 0xCA, 0x62, 0xDD, 0x26, 0xEA, 0x76, 0x08, 0xF5, 0xFF, 0xEE, 0xD5, 0x23, 0x8D, 0xF1, 0xFE, 0x8E, 0x93, 0xEA, 0x22, 0xF8, 0xE9, 0xE8, 0x61, 0xE6, 0x32, 0xB9, 0x7E, 0xB3, 0x5D, 0x16, 0xE2, 0xED, 0x96, 0xEC, 0x89, 0x60, 0xE6, 0x44, 0x1C, 0x4B, 0xFC, 0x49, 0x08, 0x73, 0x08, 0xC1, 0x13, 0xA7, 0xCB, 0xAD, 0xEA, 0x24, 0x09, 0xA9, 0x12, 0x48, 0x7A, 0x19, 0xC5, 0x0C, 0x6D, 0x91, 0xBE, 0xC3, 0x65, 0xD3, 0x46, 0xCF, 0xCE, 0x81, 0xFC, 0x9E, 0xA9, 0x51, 0xD9, 0x9D, 0xC1, 0x85, 0x36, 0xED, 0xDB, 0xC7, 0x09, 0x16, 0xC5, 0xD0, 0xF1, 0xB7, 0x4C, 0x80, 0x5F, 0x40, 0x7A, 0xB3, 0xEE, 0x07, 0xE7, 0xF5, 0x50, 0xC3, 0xF0, 0xE7, 0xEB, 0x89, 0xF6, 0x0F, 0x9E, 0x36, 0x42, 0x52, 0x1A, 0x41, 0xDF, 0x5C, 0xEC, 0x27, 0xC1, 0x92, 0x14, 0xE8, 0x58, 0xFA, 0xF6, 0x6F, 0x1D, 0x5D, 0xE9, 0x80, 0xBD, 0x83, 0xD6, 0x50, 0xA4, 0x5B, 0xF2, 0xBD, 0xDA, 0xB4, 0x3A, 0x19, 0x51, 0x1B, 0xC7, 0x2E, 0x17, 0xD4, 0x19, 0x78, 0x9F, 0x18, 0xFB, 0xD7, 0x20, 0x3B, 0x70, 0x30, 0xE1, 0x4C, 0x36, 0x83, 0xD8, 0x9F, 0xB9, 0x57, 0x4F, 0xDF, 0x66, 0x54, 0x37, 0xB4, 0xDD, 0xB3, 0xB6, 0x52, 0x2D, 0x1D, 0x30, 0x19, 0x60, 0x6A, 0x7A, 0x85, 0x7D, 0xC3, 0xB3, 0xDC, 0x1D, 0xAB, 0xB4, 0xE5, 0x3F, 0x72, 0x12, 0xBB, 0x46, 0xEC, 0x28, 0xFC, 0x2B, 0x9E, 0x36, 0xD0, 0x92, 0x07, 0x59, 0x59, 0xFE, 0x3C, 0x9C, 0x52, 0x1B, 0x91, 0x43, 0xA1, 0xFD, 0xF6, 0x79, 0xB4, 0x5C, 0xEE, 0xCB, 0x00, 0xA4, 0xB2, 0xFF, 0xD1, 0xDA, 0xF4, 0x8A, 0x24, 0xF9, 0xCF, 0x61, 0xA5, 0x9D, 0xEC, 0x6D, 0xC3, 0xCF, 0xEC, 0xC6, 0x9A, 0x12, 0x2B, 0x9A, 0xFF, 0xDC, 0x61, 0x2E, 0x4D, 0x5D, 0xA5, 0x53, 0x6C, 0x34, 0x8E, 0x62, 0x23, 0x85, 0x55, 0x40, 0xC1, 0x89, 0x1D, 0x7F, 0x65, 0xF3, 0x03, 0xCE, 0xA1, 0xFF, 0x37, 0xD6, 0xFD, 0x1F, 0x68, 0x1A, 0xFF, 0xBD, 0xB4, 0xEC, 0x77, 0xE4, 0xF8, 0x01, 0xE6, 0x30, 0xBB, 0xC3, 0x69, 0xC7, 0xDE, 0xAE, 0xA6, 0x4F, 0x66, 0xCE, 0xCF, 0xB6, 0xF0, 0x82, 0x94, 0x6C, 0x8D, 0xBE, 0xD7, 0xF9, 0x0B, 0xDD, 0xD6, 0x0A, 0x93, 0xF0, 0xF3, 0xC0, 0xFC, 0xD5, 0x16, 0xDE, 0x12, 0xF3, 0x0D, 0xFF, 0x1F, 0xCE, 0xD7, 0xFD, 0x8F, 0x3A, 0xF6, 0xFA, 0x8B, 0xA4, 0x00, 0xF3, 0x92, 0x48, 0x88, 0x7C, 0xD0, 0x0C, 0xDE, 0xC0, 0xE2, 0x84, 0xA9, 0x05, 0xE2, 0x8E, 0xD2, 0xDA, 0x00, 0xA8, 0x20, 0x3E, 0x89, 0xEC, 0x81, 0xE5, 0xE4, 0xED, 0xFA, 0x37, 0xCC, 0x2A, 0x78, 0xC8, 0x49, 0xF4, 0xE4, 0xF3, 0x98, 0x56, 0x0A, 0x86, 0x49, 0x78, 0x3A, 0xEC, 0x64, 0xAA, 0xBC, 0x39, 0x95, 0xAC, 0xD5, 0xA8, 0x2A, 0x23, 0x49, 0x5A, 0xE0, 0xB0, 0xFB, 0x8A, 0x45, 0xE1, 0x2A, 0xBA, 0xA3, 0x39, 0x87, 0x91, 0x1C, 0xF9, 0x0D, 0x9F, 0x27, 0x4A, 0x0C, 0x5B, 0x73, 0x41, 0xB8, 0xF3, 0x8C, 0x05, 0x4F, 0x97, 0x46, 0x4E, 0x19, 0x2C, 0x91, 0xA2, 0xFD, 0xE3, 0x3B, 0x76, 0x1B, 0xE0, 0xEB, 0x8E, 0x08, 0xFC, 0x6A, 0xBD, 0x53, 0x5A, 0x93, 0x6B, 0x6E, 0xCF, 0x63, 0xF0, 0x9D, 0xE3, 0xC4, 0x8F, 0xBE, 0x19, 0xD2, 0x25, 0x50, 0xC4, 0x87, 0x02, 0xD6, 0xFC, 0xC3, 0x69, 0x97, 0xB5, 0x26, 0x9D, 0x7A, 0xBE, 0x61, 0x92, 0xA8, 0x08, 0x19, 0x25, 0xF4, 0x77, 0xD6, 0x1B, 0x75, 0x51, 0x43, 0xBF, 0x58, 0x1F, 0x4B, 0xD2, 0x57, 0x7E, 0xA5, 0x51, 0xD4, 0x6A, 0x56, 0x46, 0x9E, 0x61, 0xFB, 0xB7, 0xD2, 0x9B, 0xEA, 0x8E, 0xB9, 0x69, 0xAC, 0xEC, 0xB3, 0x80, 0x03, 0x31, 0xD5, 0x8A, 0x40, 0xA5, 0x20, 0x48, 0x58, 0xD1, 0xEE, 0x10, 0xBA, 0x91, 0xAC, 0xEA, 0xDC, 0x15, 0xB6, 0xFF, 0xE6, 0xD4, 0x25, 0xDB, 0xD3, 0x36, 0x86, 0xE2, 0x65, 0xDD, 0x40, 0x3A, 0xC2, 0x31, 0x31, 0x9F, 0x7E, 0x6C, 0xFA, 0xF8, 0x57, 0x0E, 0x49, 0x80, 0x1E, 0xED, 0x64, 0xF6, 0x53, 0xD0, 0xEF, 0x75, 0x82, 0x98, 0x28, 0xEE, 0xE1, 0x74, 0x09, 0xA6, 0x7A, 0x84, 0x73, 0x91, 0x96, 0xBC, 0x8B, 0x1F, 0x99, 0x46, 0xE5, 0x4A, 0xC3, 0x99, 0x3D, 0x99, 0xC3, 0x49, 0x1F, 0xA6, 0x1F, 0xA5, 0x3C, 0x19, 0x4D, 0x9E, 0x5A, 0x65, 0xFA, 0x79, 0xFC, 0x89, 0x77, 0xB8, 0xF8, 0x11, 0x56, 0x5E, 0xEE, 0x64, 0xD3, 0x96, 0xAF, 0x76, 0x4D, 0xA7, 0x51, 0x7C, 0xDA, 0x82, 0x21, 0xF1, 0x36, 0x51, 0x9C, 0xE0, 0x09, 0x16, 0x01, 0x4F, 0xEC, 0x3C, 0x43, 0xAB, 0xA0, 0x21, 0xC1, 0xE5, 0x32, 0x7D, 0xA1, 0x64, 0x31, 0x22, 0xB0, 0xD0, 0x7A, 0x86, 0x74, 0xA4, 0x94, 0x5E, 0xB4, 0x1E, 0xF6, 0xDC, 0x47, 0xBF, 0x28, 0x10, 0xDD, 0x6D, 0x09, 0x4B, 0xC4, 0x8B, 0x08, 0x0A, 0x3A, 0x10, 0xC1, 0xC9, 0x6C, 0xCA, 0x1A, 0xEB, 0x99, 0x62, 0x5B, 0xA0, 0xF9, 0x57, 0x2C, 0x32, 0x4B, 0x76, 0x0E, 0x40, 0xE7, 0x92, 0xFA, 0x37, 0xE6, 0x64, 0xF2, 0x49, 0x35, 0x52, 0x64, 0x17, 0xD1, 0xFE, 0xF3, 0xF4, 0x5D, 0xC6, 0xBE, 0x83, 0x6B, 0x82, 0x3D, 0xB8, 0x4D, 0x43, 0xC4, 0xBB, 0xAD, 0x26, 0xD5, 0x5E, 0xB1, 0xAF, 0x80, 0x8A, 0x7A, 0xD0, 0x7C, 0xAA, 0x8A, 0xE6, 0x16, 0x91, 0x31, 0x9C, 0xF2, 0xE1, 0x1A, 0x85, 0x80, 0x5C, 0x3A, 0x65, 0x70, 0xC0, 0xEF, 0x90, 0x79, 0xED, 0x59, 0x07, 0xDD, 0xE8, 0xAF, 0xFE, 0x9B, 0x94, 0x51, 0x0D, 0xA6, 0x11, 0x47, 0xD8, 0xE7, 0x81, 0xDB, 0x65, 0x7A, 0x35, 0x32, 0xFB, 0x36, 0x14, 0x67, 0x2F, 0xA6, 0x98, 0x70, 0xF3, 0x2F, 0xB5, 0xD0, 0x12, 0x46, 0x3F, 0x2C, 0x44, 0x87, 0xC0, 0xF8, 0xDB, 0xB9, 0xF9, 0x76, 0x9E, 0xB8, 0x87, 0x44, 0x39, 0x4A, 0xCF, 0xFC, 0xCE, 0xD1, 0x7C, 0x4D, 0xDF, 0x73, 0x0F, 0xA7, 0x62, 0x6B, 0xD1, 0xC2, 0x6F, 0x16, 0xF1, 0xBA, 0xF3, 0x8C, 0xD5, 0xB9, 0xE1, 0x96, 0x87, 0xF3, 0xF4, 0x80, 0x79, 0x34, 0x09, 0xB1, 0x8A, 0x65, 0xC5, 0x15, 0xD4, 0xCC, 0x45, 0x99, 0xCB, 0x2E, 0x6D, 0x65, 0xBB, 0xFF, 0x01, 0x00, 0x33, 0xCB, 0x16, 0x86, 0x78, 0xF0, 0x39, 0x17, 0x05, 0xC4, 0x9D, 0x7C, 0xBE, 0xAA, 0x23, 0x6A, 0xF9, 0xC3, 0x91, 0xA0, 0x76, 0xCC, 0x39, 0xA2, 0x61, 0xE1, 0x13, 0xCD, 0xF8, 0xEC, 0xE6, 0x19, 0x3E, 0xD9, 0x1C, 0x7B, 0x2E, 0x20, 0xCA, 0x1F, 0xB0, 0xAE, 0xB2, 0xDE, 0xFC, 0xF6, 0x9C, 0xDC, 0xFC, 0xB5, 0xB0, 0xBD, 0x8E, 0x90, 0xE6, 0x64, 0x05, 0x80, 0xD8, 0x28, 0xF8, 0x99, 0xAF, 0x91, 0x2A, 0xEE, 0x74, 0x6E, 0x0B, 0x31, 0xD0, 0xAE, 0x92, 0x6B, 0xC8, 0xB8, 0x32, 0xA9, 0xED, 0x4E, 0x70, 0x2F, 0x7E, 0xB6, 0xB4, 0xA1, 0x8F, 0x7C, 0x33, 0xCF, 0xC5, 0x5E, 0xB0, 0x98, 0x03, 0x7C, 0x06, 0x40, 0x6A, 0x38, 0xB3, 0x69, 0x6B, 0x69, 0xD7, 0x52, 0x77, 0xAA, 0x23, 0x70, 0x0C, 0xE6, 0x0D, 0x26, 0x12, 0x7D, 0xF3, 0xA0, 0x2D, 0xE3, 0x42, 0xC7, 0x5D, 0xFF, 0x2E, 0x49, 0xAE, 0x5E, 0xEC, 0x0C, 0x7A, 0x08, 0x0B, 0xE4, 0x13, 0xF6, 0x65, 0x75, 0xA7, 0x76, 0x02, 0xF6, 0xAA, 0x5C, 0xF1, 0x6B, 0xAB, 0xA6, 0x39, 0x2D, 0x1C, 0xC5, 0x5E, 0x1B, 0x75, 0x29, 0xA2, 0x8D, 0xD0, 0xF5, 0xB3, 0x9D, 0x3C, 0xBA, 0xBD, 0xCB, 0x1F, 0xEF, 0x20, 0xC5, 0xE3, 0x88, 0xC5, 0x44, 0x58, 0x1F, 0xFC, 0x7B, 0x39, 0x6E, 0x3F, 0xA3, 0x30, 0x3A, 0x1A, 0xE5, 0x67, 0xE0, 0x44, 0xF0, 0x7C, 0x50, 0x7F, 0x66, 0x54, 0x1B, 0x5D, 0xD5, 0x75, 0x7D, 0xE1, 0x9B, 0x77, 0x38, 0x46, 0xBC, 0x8C, 0x37, 0x1D, 0xA8, 0xA7, 0x2B, 0xC0, 0x07, 0xDB, 0xE6, 0x6C, 0x63, 0x42, 0x4B, 0x6E, 0xEB, 0x42, 0xF2, 0x65, 0xEB, 0xEE, 0x85, 0x09, 0xDC, 0x6D, 0x11, 0xDE, 0x08, 0xD6, 0x1E, 0x97, 0x09, 0x85, 0x36, 0x5E, 0x5A, 0xDA, 0x8D, 0x54, 0x99, 0x6C, 0x8C, 0xAC, 0xE4, 0xD7, 0x6D, 0x27, 0x93, 0x05, 0x41, 0xCF, 0xB1, 0x41, 0x64, 0x05, 0xCC, 0x0B, 0xDD, 0x65, 0xF2, 0x00, 0xFE, 0x5A, 0xD2, 0xD1, 0x0C, 0x60, 0x6B, 0x1F, 0xAF, 0x3C, 0x1F, 0x1D, 0xED, 0xF5, 0xB9, 0xBA, 0xB8, 0xA7, 0xD6, 0x44, 0xA3, 0xFE, 0xCB, 0xB1, 0x30, 0xE1, 0xED, 0xDA, 0xDF, 0x38, 0xD1, 0x79, 0x90, 0x7A, 0x62, 0x5E, 0x74, 0x61, 0xC6, 0xC4, 0x07, 0x40, 0x0F, 0x1E, 0x2A, 0x53, 0x9F, 0xB1, 0x8E, 0x00, 0x9B, 0xB1, 0xAC, 0xA0, 0x12, 0x9D, 0x7E, 0xC6, 0xBA, 0xAF, 0x48, 0xE1, 0xA7, 0xF9, 0xC1, 0x02, 0x63, 0x42, 0xA7, 0x96, 0xCC, 0x46, 0x2A, 0xA8, 0xD6, 0x16, 0x5F, 0x53, 0x2D, 0x2A, 0xC4, 0x41, 0xA3, 0xBA, 0x6D, 0x7F, 0x80, 0x17, 0x6B, 0xDD, 0xC5, 0xEB, 0x91, 0x02, 0x8C, 0x62, 0x52, 0xAF, 0xE0, 0x62, 0xAD, 0x63, 0xE2, 0x41, 0xE3, 0x13, 0xEA, 0x26, 0xB2, 0x5A, 0xE5, 0xB2, 0xF6, 0x7B, 0xA5, 0x3C, 0xCD, 0xB2, 0xDB, 0xBC, 0x74, 0xCA, 0xD5, 0xEE, 0x8E, 0xF8, 0xD4, 0x92, 0x35, 0x7B, 0x11, 0x82, 0x13, 0x13, 0xEF, 0xCB, 0xA5, 0xE5, 0xD0, 0x07, 0x8E, 0x7D, 0xBD, 0x81, 0x35, 0xBF, 0x14, 0x4B, 0xAD, 0x8A, 0x55, 0x65, 0xFB, 0x5D, 0x54, 0xC3, 0xE9, 0x65, 0x7C, 0x22, 0x6E, 0x4E, 0x48, 0x46, 0xAB, 0x2E, 0x6A, 0x93, 0xB5, 0x7E, 0x3F, 0x1E, 0x9F, 0x6E, 0xC9, 0x11, 0xF1, 0xC9, 0x38, 0xE0, 0x8F, 0xAD, 0x83, 0x1F, 0x6D, 0xD2, 0xD6, 0x86, 0x98, 0x3C, 0x25, 0xA3, 0x9A, 0x49, 0xE3, 0x02, 0xC6, 0xD6, 0x2A, 0x09, 0x8B, 0x1F, 0xCD, 0x0A, 0x2B, 0x8D, 0x49, 0x46, 0xB8, 0x15, 0x45, 0x90, 0x71, 0x10, 0x4C, 0xAE, 0x5C, 0x3D, 0x6A, 0x54, 0x82, 0xEE, 0x88, 0x24, 0x69, 0x8D, 0x99, 0x7F, 0x05, 0xDC, 0x46, 0x5D, 0x69, 0xC1, 0x6C, 0x9D, 0xB7, 0x9F, 0x12, 0x75, 0xB2, 0x36, 0xA5, 0xD4, 0xCB, 0xBD, 0x2F, 0xB4, 0xB0, 0x88, 0x79, 0x9A, 0x34, 0x21, 0xB9, 0x29, 0x7C, 0xB1, 0x6F, 0x21, 0xFB, 0xD6, 0xB8, 0x86, 0xF8, 0xE0, 0x45, 0xE8, 0x7F, 0x07, 0x9B, 0x7B, 0xC9, 0x38, 0x48, 0x2E, 0x9E, 0xBB, 0x7B, 0x9C, 0x7C, 0xB2, 0x86, 0xE1, 0x2E, 0xA0, 0x8F, 0xB0, 0x32, 0xF2, 0xF0, 0xAA, 0x18, 0x53, 0x78, 0xEB, 0x71, 0x60, 0x4E, 0xF9, 0x6E, 0x70, 0xD6, 0x4A, 0x08, 0x3E, 0x09, 0xCB, 0xA1, 0x8B, 0xC3, 0xD3, 0xFC, 0xE8, 0xC8, 0xC6, 0x9A, 0xC3, 0xAB, 0x8C, 0xD8, 0x1F, 0x7F, 0x17, 0xC8, 0x92, 0x6E, 0x6A, 0x9C, 0x27, 0xA5, 0xF4, 0xA4, 0x51, 0x08, 0x61, 0xA7, 0x76, 0x23, 0x33, 0x6F, 0xAA, 0xE2, 0x76, 0x46, 0xFE, 0x7D, 0xDA, 0xCE, 0xF8, 0x07, 0xDD, 0xED, 0xE9, 0x38, 0xE0, 0x41, 0x23, 0x7B, 0x7C, 0x4B, 0x3D, 0x6C, 0x63, 0x55, 0xEF, 0xB0, 0x37, 0x75, 0x3D, 0x52, 0x97, 0x0E, 0x4A, 0xBF, 0x4E, 0x00, 0x4A, 0xDD, 0xFF, 0x14, 0x9D, 0xE4, 0xAD, 0x59, 0x4F, 0xEA, 0x23, 0x95, 0x06, 0x2B, 0xF5, 0x0B, 0x0A, 0x28, 0x89, 0x78, 0x9B, 0x82, 0xDE, 0x51, 0x6A, 0x9A, 0x7B, 0xCA, 0x94, 0xCC, 0x5A, 0xD5, 0x5D, 0x54, 0x02, 0xAC, 0x2E, 0x94, 0x3D, 0x29, 0x50, 0xFE, 0x42, 0xB2, 0x01, 0x1F, 0x07, 0x91, 0xAB, 0xEA, 0x49, 0x8C, 0xF4, 0x36, 0xD3, 0x38, 0xB3, 0x9F, 0xDF, 0x04, 0x07, 0x51, 0xCF, 0x17, 0xEE, 0xA6, 0x43, 0x0C, 0xFC, 0xA8, 0xEA, 0x56, 0x92, 0x91, 0x99, 0x59, 0xBE, 0xEA, 0x2A, 0xD2, 0xD8, 0x64, 0x38, 0xC0, 0xD5, 0x87, 0x4D, 0xC4, 0x15, 0xB1, 0x4C, 0xAE, 0x32, 0x3B, 0xCD, 0x8B, 0x2A, 0xF9, 0x3A, 0x0E, 0xC2, 0x24, 0x1E, 0xEF, 0x94, 0xFB, 0x58, 0xB6, 0x6C, 0x5E, 0x97, 0xD6, 0x9B, 0xDF, 0xCB, 0xFF, 0xC5, 0xF8, 0xE5, 0xD8, 0x3E, 0x76, 0x5D, 0x1D, 0xA2, 0x63, 0xB2, 0xF0, 0x63, 0x9B, 0xB4, 0x6D, 0x15, 0xF7, 0xFE, 0xA2, 0xDD, 0x83, 0x7F, 0x85, 0x1E, 0x8B, 0x3E, 0x53, 0xD7, 0x51, 0xEE, 0xE1, 0x0B, 0x4F, 0xA2, 0x9D, 0x82, 0x04, 0x36, 0x68, 0x20, 0x7D, 0x9F, 0xDF, 0x62, 0x59, 0x71, 0xEF, 0x4A, 0x1E, 0x68, 0x72, 0xFB, 0xDF, 0x53, 0x56, 0x63, 0xA0, 0x2B, 0xC6, 0xD2, 0x51, 0xA3, 0x5D, 0x4D, 0xD3, 0x0A, 0xA8, 0xF7, 0x90, 0xA3, 0xFF, 0xFD, 0xA3, 0xB8, 0x9D, 0x1E, 0xD9, 0x1E, 0x94, 0x73, 0x5E, 0xFE, 0x5F, 0xDD, 0x9D, 0x2D, 0x81, 0x82, 0x0A, 0x19, 0xBA, 0xDB, 0x37, 0xE0, 0xE1, 0x88, 0x24, 0xCC, 0x1E, 0xC8, 0xE4, 0xC4, 0xDE, 0xB2, 0x34, 0x9B, 0x88, 0x60, 0x2E, 0xFF, 0x57, 0x01, 0x65, 0x74, 0x13, 0xCC, 0xE9, 0x01, 0x25, 0xAE, 0x49, 0x51, 0x4C, 0x40, 0x85, 0xA1, 0x28, 0xD4, 0x37, 0x0E, 0x83, 0x86, 0x60, 0x2E, 0x52, 0x93, 0x76, 0xE2, 0x7A, 0x66, 0x2D, 0x7A, 0x0C, 0xEB, 0xAB, 0x27, 0x1F, 0xC5, 0xE7, 0xD3, 0xA2, 0x1C, 0x50, 0xCA, 0x59, 0x4A, 0x56, 0x10, 0xC8, 0xF0, 0xA3, 0xEF, 0x1B, 0x98, 0xE3, 0xDF, 0xAA, 0xA9, 0x3E, 0x32, 0x27, 0xA0, 0x90, 0xC7, 0x74, 0xC6, 0xD3, 0xBD, 0x8F, 0x47, 0x59, 0x19, 0xC8, 0xFB, 0xD8, 0xED, 0x8A, 0xDF, 0xE4, 0x40, 0xF0, 0x28, 0xC6, 0x7E, 0x13, 0x9E, 0xC6, 0x2E, 0x57, 0x6C, 0xAC, 0x88, 0xA9, 0x1F, 0x52, 0xB8, 0xDB, 0xDA, 0x01, 0x05, 0x02, 0xAC, 0x44, 0x29, 0xAD, 0xAF, 0x06, 0x74, 0x11, 0x51, 0x62, 0xEA, 0x69, 0x8C, 0xF4, 0xEE, 0xE2, 0x1B, 0x97, 0xEF, 0x7C, 0x17, 0xEC, 0x3A, 0xA4, 0x1D, 0xD6, 0xB5, 0xD4, 0xEF, 0xF2, 0x97, 0xD0, 0xF3, 0x34, 0xAA, 0xBB, 0x60, 0x17, 0x03, 0x02, 0x55, 0x83, 0xC3, 0xCE, 0xCE, 0x5A, 0xE9, 0xD1, 0xF6, 0x44, 0x50, 0x28, 0x26, 0x43, 0x5A, 0xD6, 0x79, 0xB9, 0x24, 0xCC, 0x1B, 0x3A, 0x78, 0x43, 0x0D, 0x47, 0xE7, 0x38, 0x01, 0xA2, 0xD8, 0xE3, 0x67, 0xBF, 0x8D, 0x2A, 0x3C, 0x53, 0xA8, 0x87, 0x84, 0x2E, 0x42, 0xD9, 0x6A, 0x8C, 0x62, 0xF1, 0x12, 0x3A, 0xAF, 0x1D, 0x38, 0x8D, 0x51, 0x9D, 0xEA, 0xBC, 0x35, 0x90, 0xF0, 0x94, 0xA0, 0x42, 0xD9, 0xC0, 0x91, 0xFB, 0x58, 0x73, 0x0B, 0xEE, 0xA0, 0xF4, 0xB5, 0xFD, 0x38, 0x4C, 0xB1, 0xA9, 0x49, 0x28, 0x74, 0x7E, 0xC1, 0xFA, 0xCC, 0x0C, 0xAD, 0xE9, 0xE6, 0x9A, 0xA5, 0x92, 0xEE, 0xC4, 0xC6, 0x1C, 0xAF, 0x80, 0x11, 0x49, 0x9C, 0x2F, 0x45, 0xC2, 0xF1, 0x1E, 0x03, 0x12, 0x23, 0xE6, 0xB4, 0x9C, 0x65, 0xA9, 0xE6, 0x43, 0x6E, 0xF0, 0x7E, 0xFB, 0x94, 0xF8, 0x9E, 0x23, 0x59, 0xF8, 0x7C, 0xFC, 0x0A, 0x03, 0xF8, 0xAA, 0x2D, 0x6D, 0x92, 0xEF, 0xEC, 0xA4, 0x32, 0x28, 0xA7, 0xA2, 0xA5, 0xF5, 0xE0, 0x29, 0x66, 0x8C, 0x8C, 0xA5, 0xEB, 0x08, 0x95, 0x11, 0x87, 0x63, 0x88, 0xF8, 0x5E, 0x08, 0xFD, 0x6F, 0xEA, 0x43, 0x55, 0x9D, 0xB2, 0x35, 0xC6, 0xAF, 0xDF, 0xE2, 0xCF, 0xCB, 0x7A, 0xCB, 0x21, 0x9E, 0xDD, 0xDD, 0x2F, 0x9B, 0xCB, 0xD7, 0x1E, 0x11, 0x67, 0xD4, 0xA9, 0x58, 0x95, 0xD2, 0xAD, 0x24, 0xF4, 0x11, 0xF6, 0xE3, 0x77, 0x2F, 0xB3, 0xAD, 0xA4, 0x45, 0xB8, 0x54, 0x3E, 0x6F, 0x22, 0x1D, 0x1F, 0xA2, 0xC4, 0xCA, 0x81, 0xC8, 0x24, 0x03, 0xCB, 0x34, 0x38, 0x0E, 0xF5, 0xCF, 0x68, 0x57, 0x5C, 0x5E, 0x3C, 0xF2, 0x39, 0xB7, 0xAA, 0xE0, 0x0B, 0xF3, 0x87, 0x13, 0x27, 0x99, 0x5C, 0x33, 0xBB, 0xAE, 0x87, 0x9A, 0xA2, 0xD0, 0x6B, 0x63, 0xFB, 0x94, 0xF7, 0x33, 0x13, 0x25, 0xC4, 0x97, 0x9E, 0x1F, 0x49, 0xB8, 0x44, 0x63, 0xD7, 0x1D, 0x97, 0x48, 0xE7, 0x91, 0xE9, 0x62, 0xDC, 0x2B, 0xD6, 0xC1, 0xE1, 0x57, 0x68, 0xE2, 0x59, 0xE3, 0xFA, 0x0D, 0xEB, 0x01, 0x57, 0xCF, 0xD1, 0x67, 0xB6, 0x60, 0xAC, 0x7B, 0x1D, 0x4C, 0x15, 0xB0, 0xD0, 0x0F, 0x17, 0xF8, 0xF3, 0xD5, 0x85, 0xDE, 0xFF, 0x12, 0xE6, 0x21, 0x06, 0xE4, 0x71, 0x71, 0x44, 0xD0, 0x73, 0x3F, 0x23, 0x17, 0xDC, 0x82, 0x24, 0x52, 0xA8, 0x4D, 0x73, 0x94, 0xB4, 0x95, 0xAB, 0x0B, 0xF5, 0xEB, 0x70, 0x90, 0xFF, 0x5F, 0xFA, 0xB2, 0xFC, 0x47, 0xA3, 0x2D, 0x57, 0xF8, 0xB6, 0xFD, 0xF4, 0xF6, 0xAE, 0xC6, 0x35, 0x13, 0x4A, 0xBF, 0x3D, 0xDA, 0x6F, 0xFE, 0x30, 0x52, 0x1E, 0x7F, 0x28, 0x31, 0x41, 0xC0, 0xC9, 0x7F, 0x57, 0xE7, 0x1F, 0x6D, 0x57, 0xD6, 0x09, 0x14, 0xDC, 0x62, 0xCE, 0x3B, 0xEB, 0x66, 0x1C, 0xA4, 0xFA, 0x67, 0x9D, 0x3B, 0x4B, 0x76, 0x65, 0x94, 0xDE, 0xA0, 0x31, 0x82, 0x80, 0xD3, 0x73, 0x73, 0x68, 0x38, 0x1D, 0x54, 0xB1, 0xE1, 0xDC, 0x24, 0xBE, 0xA7, 0xCD, 0xC6, 0x45, 0x6F, 0xC1, 0x49, 0xC5, 0xB7, 0xC4, 0x80, 0xA3, 0x57, 0x89, 0x0C, 0xC6, 0x5E, 0x80, 0x3F, 0x78, 0xB6, 0x17, 0x4E, 0x92, 0x77, 0xB4, 0xFF, 0xF2, 0x34, 0x4F, 0xBF, 0x50, 0x8B, 0x38, 0x22, 0x60, 0x43, 0x55, 0xE8, 0x53, 0x0C, 0x42, 0xE0, 0xA9, 0x10, 0xB6, 0x89, 0x85, 0x9B, 0xC3, 0xF1, 0x84, 0xE5, 0xBE, 0x4F, 0x76, 0xBA, 0x07, 0x32, 0xF7, 0x20, 0x41, 0xE7, 0x7A, 0xF2, 0x87, 0x52, 0x3A, 0xF2, 0x2C, 0x88, 0x8E, 0x97, 0x05, 0xFF, 0xE4, 0xD6, 0xCF, 0x28, 0x30, 0xC0, 0xB5, 0x6E, 0x89, 0xFA, 0x61, 0x5C, 0xFF, 0x54, 0x30, 0x4F, 0xDD, 0xF6, 0x49, 0x49, 0xB8, 0x97, 0x22, 0x33, 0xC2, 0x75, 0x2A, 0x5A, 0xE4, 0x46, 0xCA, 0x16, 0xEA, 0x83, 0x7C, 0x85, 0xB1, 0x6B, 0x82, 0xC6, 0x93, 0xF0, 0xFD, 0xB7, 0x8A, 0x17, 0x0E, 0x8E, 0xD8, 0x71, 0xD6, 0xEF, 0x8A, 0xC9, 0x85, 0xDB, 0x47, 0x08, 0x7A, 0x3E, 0xF0, 0x34, 0x9B, 0x8C, 0x8B, 0xD4, 0x5D, 0x33, 0xFF, 0xDD, 0x89, 0x67, 0x9C, 0x90, 0x6B, 0x78, 0x54, 0xDF, 0x1C, 0xA6, 0x2E, 0x1B, 0xDE, 0x0D, 0x44, 0xB9, 0x6C, 0xF9, 0xF6, 0x4C, 0x57, 0xAA, 0x1E, 0xC3, 0x0E, 0x2A, 0xFC, 0x0D, 0xA6, 0x0F, 0x0E, 0xD6, 0xA7, 0xDC, 0x97, 0x85, 0x30, 0x3E, 0x1D, 0x6D, 0xD9, 0x28, 0x44, 0xA3, 0x58, 0xF4, 0x2E, 0xDA, 0xBB, 0xC9, 0xF2, 0x2F, 0xF6, 0xDB, 0xF2, 0xB9, 0xFD, 0x7D, 0x95, 0x5B, 0x26, 0x43, 0x64, 0x25, 0x66, 0xAD, 0x7A, 0x3A, 0xFB, 0x7B, 0x51, 0x0A, 0x33, 0xFD, 0x24, 0xB4, 0x45, 0x3D, 0x2E, 0xD4, 0xD8, 0xF6, 0x34, 0x5A, 0x3D, 0xFF, 0x08, 0x5F, 0x62, 0x53, 0x59, 0xFE, 0xA1, 0x9E, 0x8D, 0x04, 0xE3, 0xEF, 0x00, 0x49, 0x98, 0xD8, 0xAE, 0x8E, 0x7E, 0x92, 0x7F, 0x09, 0xE7, 0xA6, 0xEE, 0x85, 0xA9, 0x26, 0x73, 0x64, 0x74, 0x94, 0x36, 0x7D, 0x75, 0xA5, 0x69, 0x5B, 0x65, 0xC4, 0xC6, 0x20, 0xB6, 0xA8, 0x31, 0xFB, 0x70, 0x0D, 0x2D, 0x31, 0x9F, 0x16, 0xB5, 0xBF, 0x6A, 0x25, 0x52, 0x77, 0x79, 0xDA, 0xEC, 0x56, 0x57, 0x4C, 0x3C, 0xCB, 0x81, 0x08, 0x04, 0xF1, 0xA5, 0x51, 0x66, 0x6A, 0xA9, 0x96, 0xA4, 0x08, 0xDB, 0x10, 0x78, 0xD0, 0x15, 0x1B, 0x6A, 0x0A, 0xC2, 0xF2, 0x81, 0x61, 0x3E, 0x80, 0x15, 0x77, 0x24, 0x54, 0xE7, 0x86, 0xA0, 0xA7, 0x48, 0xE8, 0x15, 0xB4, 0xBD, 0x66, 0x24, 0x16, 0xBC, 0xDB, 0xF2, 0x98, 0x4C, 0x9E, 0xD5, 0xB4, 0x26, 0x20, 0x13, 0x5A, 0x86, 0x9E, 0xC3, 0xFB, 0xC7, 0xC1, 0xE6, 0xE7, 0x52, 0x12, 0xD4, 0x2C, 0x68, 0x6E, 0x69, 0x1E, 0x6D, 0xCA, 0xAB, 0x32, 0x16, 0x89, 0x0E, 0x43, 0x17, 0xCC, 0xE2, 0x66, 0xB0, 0x77, 0x7A, 0x31, 0x90, 0xBA, 0x31, 0xFB, 0x16, 0x28, 0xEC, 0x8F, 0xF7, 0x52, 0xF0, 0x64, 0xC1, 0x0C, 0x08, 0x37, 0x51, 0x8A, 0x59, 0x8B, 0x19, 0xE9, 0x42, 0x3A, 0x4A, 0x7C, 0x41, 0xA9, 0x19, 0xC9, 0xA8, 0x15, 0x6D, 0x02, 0x24, 0x41, 0x2C, 0xA5, 0xDF, 0xF3, 0xD9, 0x5E, 0xDC, 0x2A, 0x3D, 0xB1, 0x94, 0x5C, 0xB8, 0x6C, 0x8D, 0x25, 0xC3, 0xFE, 0xA9, 0x2F, 0x6F, 0x61, 0x14, 0x89, 0xB3, 0x8A, 0x7E, 0x72, 0x72, 0xC6, 0x76, 0xDE, 0x1B, 0x79, 0x31, 0x5D, 0x3D, 0xAD, 0xA9, 0x2E, 0xBF, 0x2A, 0x42, 0x32, 0x4E, 0x3B, 0x23, 0xE5, 0x8A, 0x0F, 0x58, 0x4A, 0x5A, 0x29, 0xDD, 0x20, 0x3E, 0x92, 0xE4, 0x87, 0x9C, 0x63, 0x75, 0x00, 0xDD, 0xF4, 0xF9, 0xF2, 0x35, 0x2E, 0x5D, 0xB9, 0x02, 0xEC, 0xCF, 0xBE, 0x00, 0x61, 0x58, 0xF7, 0x52, 0x40, 0x90, 0xEA, 0x28, 0x56, 0x6F, 0x13, 0xF6, 0xCF, 0xCA, 0xBF, 0x8A, 0xC9, 0x9D, 0x40, 0x30, 0xC3, 0xBE, 0xCC, 0xE4, 0xF4, 0xBE, 0xE4, 0xF7, 0xB7, 0xD9, 0x30, 0xEE, 0x34, 0x7F, 0x52, 0x25, 0xDA, 0x50, 0x42, 0x6E, 0x56, 0xBD, 0x83, 0x51, 0x2F, 0x0B, 0x26, 0xC9, 0x6B, 0x1A, 0xAC, 0x47, 0x4B, 0xD5, 0xDF, 0x7F, 0x1B, 0xF0, 0x76, 0x54, 0x74, 0x88, 0xA5, 0xB7, 0xE0, 0x13, 0x92, 0xAA, 0xD7, 0x25, 0xFF, 0x81, 0x7A, 0xB4, 0xFB, 0x40, 0xE1, 0xC3, 0x66, 0xA8, 0x2F, 0x2C, 0xA3, 0xEE, 0xC1, 0x92, 0x05, 0x92, 0xF6, 0x72, 0x9D, 0x8C, 0x6E, 0xD8, 0x03, 0xD4, 0xE9, 0xA7, 0x0A, 0xF2, 0x92, 0x7C, 0x61, 0x5E, 0xAC, 0x8F, 0xE3, 0xE4, 0x0F, 0xE1, 0xB1, 0xC8, 0xD0, 0x15, 0xDF, 0x5E, 0x80, 0x80, 0x16, 0x2D, 0x24, 0xC2, 0xB8, 0xE4, 0x4F, 0x5E, 0xEC, 0x7A, 0x9B, 0x28, 0xE2, 0xF8, 0x0E, 0x92, 0x55, 0x0C, 0x21, 0x9B, 0x4E, 0x0B, 0xC0, 0xC2, 0x91, 0xB3, 0xF6, 0x8B, 0xE0, 0xD2, 0xFF, 0xEB, 0x7E, 0x60, 0x74, 0x62, 0xD8, 0xFB, 0x59, 0x86, 0xE0, 0x0A, 0x03, 0xCB, 0xBB, 0x05, 0xEE, 0x11, 0x49, 0xA5, 0xEC, 0xBB, 0x9C, 0x20, 0x7E, 0x4E, 0xAF, 0x4C, 0x5D, 0xCA, 0x45, 0xAB, 0x14, 0xD0, 0x0C, 0xFD, 0x42, 0x6E, 0x2F, 0x12, 0xAB, 0x4B, 0x71, 0xF7, 0xD6, 0x60, 0x4E, 0x5A, 0x7B, 0xA7, 0x78, 0x30, 0xA1, 0x4E, 0x3F, 0x9D, 0x89, 0x1D, 0x8B, 0x86, 0x50, 0x81, 0xFD, 0x1E, 0xA3, 0x31, 0xA0, 0xCE, 0x06, 0xA3, 0x0D, 0x51, 0x4B, 0x84, 0x2A, 0x49, 0xDF, 0xCE, 0xB7, 0x2A, 0x2D, 0x08, 0x08, 0x5F, 0x06, 0x27, 0x5A, 0x4F, 0x65, 0x12, 0xF0, 0x9C, 0xCE, 0xA0, 0xF5, 0x8B, 0xCC, 0x31, 0x4B, 0xB8, 0xFD, 0x4A, 0x05, 0xC6, 0x10, 0x15, 0x60, 0x00, 0x89, 0x85, 0x3B, 0xB0, 0x7F, 0x66, 0x1D, 0x19, 0xF7, 0x8D, 0xC0, 0x59, 0x0F, 0x40, 0xE2, 0xE5, 0xCC, 0xAC, 0x08, 0xAA, 0xE5, 0x4A, 0x27, 0x59, 0x44, 0x2F, 0x94, 0x0C, 0xCB, 0x5F, 0xFB, 0xBF, 0x96, 0x34, 0x19, 0x81, 0x0B, 0xE5, 0x1B, 0xDC, 0x30, 0xB8, 0xEA, 0x91, 0xC8, 0xBE, 0xED, 0x62, 0xF2, 0x37, 0x51, 0x7A, 0x09, 0xB3, 0xD5, 0x16, 0xF9, 0x11, 0xDC, 0xD1, 0x0C, 0xF7, 0xC4, 0x08, 0x06, 0x84, 0xF8, 0x4F, 0x10, 0x76, 0xDA, 0xC0, 0xEB, 0x60, 0xF9, 0x5F, 0x27, 0x3E, 0xCB, 0x4A, 0x40, 0xD7, 0xFC, 0x55, 0x90, 0x36, 0x45, 0xFC, 0xF0, 0xE3, 0x76, 0x29, 0x64, 0xAC, 0xEE, 0x31, 0xAF, 0xA1, 0xD1, 0x53, 0x2C, 0x5C, 0xC6, 0xBF, 0x6E, 0x36, 0x98, 0x6E, 0x8A, 0x27, 0x97, 0x46, 0x89, 0x2F, 0xB9, 0x29, 0x14, 0xCF, 0x9F, 0x97, 0x80, 0x13, 0xA2, 0x4C, 0x80, 0xFD, 0x26, 0x46, 0x7C, 0xBE, 0xE4, 0x54, 0x98, 0x62, 0x6E, 0x0E, 0xA4, 0xB5, 0xC1, 0xF0, 0x02, 0xA6, 0x32, 0x65, 0x3A, 0x62, 0x92, 0x6E, 0x74, 0xDD, 0xE9, 0x3F, 0x16, 0xAE, 0xF4, 0x82, 0x91, 0xD9, 0xF0, 0x2F, 0x50, 0x0F, 0x8E, 0x4B, 0xB5, 0x41, 0xF3, 0x66, 0x92, 0xE0, 0x9B, 0xC0, 0xE5, 0x2F, 0x38, 0x72, 0x71, 0x75, 0x0A, 0xD3, 0xBE, 0x63, 0x84, 0x6A, 0x42, 0x0A, 0x55, 0x67, 0xDF, 0xF4, 0xC7, 0x04, 0xD1, 0x6B, 0xAA, 0x78, 0x22, 0x8F, 0x3A, 0x2C, 0xD1, 0xD3, 0x39, 0x51, 0x5A, 0x03, 0x6A, 0x0A, 0x33, 0x67, 0x9B, 0x50, 0xA8, 0x60, 0x91, 0xF0, 0x42, 0xAA, 0x7F, 0x3E, 0x5D, 0x2F, 0xC9, 0x61, 0xFF, 0xF0, 0x7C, 0x68, 0x9F, 0xF5, 0x32, 0x34, 0x00, 0x87, 0x2A, 0xCD, 0xD4, 0x30, 0x48, 0xED, 0x26, 0x19, 0x34, 0xDD, 0xFA, 0x71, 0x0C, 0x0D, 0xCB, 0x1F, 0xC8, 0xB0, 0xDC, 0xED, 0x64, 0xA0, 0xEA, 0xF7, 0x9C, 0x88, 0x33, 0xD3, 0xBD, 0x06, 0x9E, 0x1B, 0x61, 0x6E, 0x45, 0x65, 0xEB, 0xD6, 0xCE, 0x1A, 0x94, 0x10, 0x8B, 0x11, 0x05, 0xDC, 0x43, 0x5B, 0x87, 0x9D, 0xE0, 0x1A, 0xAA, 0xF9, 0x76, 0x57, 0x9F, 0xF2, 0x48, 0x07, 0x35, 0x92, 0x57, 0x98, 0x7B, 0xAF, 0x82, 0x02, 0x50, 0x94, 0x07, 0xF5, 0xFD, 0x71, 0x77, 0x61, 0x12, 0xEB, 0x09, 0xE2, 0xC6, 0xDF, 0xC2, 0x5F, 0xB5, 0x4F, 0xE8, 0x56, 0xDB, 0xF5, 0x1E, 0xC2, 0xD5, 0xF0, 0x00, 0xC3, 0x1D, 0x0A, 0xBA, 0xCE, 0x43, 0x4A, 0xF0, 0x21, 0xFE, 0xEC, 0x91, 0x27, 0x65, 0xB1, 0xC3, 0xCA, 0x92, 0xA2, 0xD1, 0x1F, 0xE7, 0x6E, 0x03, 0xB6, 0xDB, 0x02, 0x12, 0x70, 0x9C, 0xE3, 0x65, 0xF6, 0x97, 0x3E, 0x0C, 0x9B, 0xC8, 0x6D, 0x24, 0x72, 0x5C, 0xAD, 0xCD, 0xBE, 0x97, 0x53, 0x83, 0x99, 0x6A, 0xF2, 0x23, 0xA0, 0x3A, 0x38, 0xC2, 0xBE, 0x40, 0xF6, 0x00, 0x50, 0xF3, 0xF9, 0x7D, 0xF8, 0x28, 0xE5, 0x00, 0x52, 0xFD, 0x46, 0x4E, 0xE5, 0xDC, 0x68, 0x81, 0x48, 0xA3, 0x4C, 0x30, 0x60, 0x58, 0x43, 0xCC, 0x5C, 0x65, 0x3A, 0xBE, 0x8B, 0x31, 0x91, 0xD6, 0xE7, 0xF4, 0x01, 0x33, 0xFD, 0x96, 0xD8, 0xBA, 0x8C, 0x7A, 0x97, 0xBE, 0xBB, 0x0F, 0x10, 0x6E, 0x91, 0x32, 0x01, 0x8C, 0xE3, 0xBD, 0xDD, 0xA7, 0x1A, 0xE8, 0x5E, 0x6E, 0xF3, 0x88, 0xE4, 0x06, 0x4E, 0xB6, 0x3C, 0xA4, 0x82, 0xF5, 0x05, 0x59, 0xCB, 0xD7, 0xFB, 0x72, 0xF3, 0x4B, 0x26, 0x4A, 0x4C, 0x75, 0x6A, 0x88, 0x6D, 0x95, 0x7A, 0x33, 0x58, 0xC0, 0x1D, 0x02, 0xB6, 0x66, 0x6B, 0x12, 0xB1, 0x81, 0x6B, 0xAB, 0x5D, 0x4B, 0xF4, 0xDE, 0x76, 0x46, 0x91, 0xCD, 0xDB, 0x71, 0x3A, 0x10, 0x72, 0x6A, 0x54, 0x93, 0x8D, 0x70, 0x5E, 0x3A, 0x52, 0x2D, 0x68, 0xE1, 0x7B, 0x84, 0x3F, 0xEC, 0xD9, 0x74, 0x5D, 0x39, 0x6B, 0x58, 0x6A, 0xE6, 0xF8, 0x89, 0x4A, 0xA2, 0x27, 0x67, 0x0D, 0x5D, 0x92, 0x74, 0x40, 0xE9, 0x82, 0xFE, 0x23, 0x67, 0xB3, 0x94, 0xE0, 0xFB, 0xB5, 0xB1, 0xD2, 0xBA, 0xCD, 0xFC, 0xC1, 0x14, 0xD0, 0xBF, 0x7C, 0xF8, 0xD0, 0x9F, 0x0A, 0xD0, 0x22, 0xE3, 0xB3, 0x1F, 0xBD, 0xFA, 0xC5, 0xFE, 0xFE, 0x2F, 0x95, 0xB6, 0xEE, 0x22, 0x74, 0xD1, 0x8A, 0xA1, 0x45, 0xED, 0x8D, 0xB2, 0x02, 0xE1, 0x5C, 0x5D, 0x3A, 0xA5, 0x0E, 0xC5, 0xE4, 0x5D, 0x93, 0xE9, 0x05, 0xCD, 0xE8, 0xE5, 0xC7, 0xDE, 0x3D, 0xD6, 0x30, 0xDE, 0x0E, 0x8C, 0x3C, 0xA0, 0x1A, 0xE9, 0xE5, 0x77, 0x01, 0x5B, 0x4C, 0xAA, 0x7B, 0x21, 0x7A, 0x27, 0xED, 0x5E, 0x6B, 0x74, 0xED, 0x58, 0x17, 0xAC, 0x83, 0x82, 0x31, 0xCA, 0x04, 0x8A, 0xFA, 0x1E, 0x19, 0xE3, 0xDA, 0xFD, 0x5B, 0xC6, 0xD1, 0x83, 0x8B, 0x2B, 0x09, 0x60, 0x89, 0x1B, 0x47, 0x94, 0x25, 0xFD, 0xBC, 0x1D, 0x80, 0xBE, 0x3D, 0x7E, 0x5A, 0x2F, 0xAA, 0x7B, 0xBE, 0x61, 0x16, 0xA1, 0x12, 0xAB, 0xF9, 0xAB, 0x5C, 0xDA, 0x3D, 0x69, 0xB0, 0x97, 0x79, 0x00, 0x95, 0x8F, 0xD0, 0xC4, 0x99, 0x10, 0xE1, 0x6F, 0xC5, 0x7C, 0x02, 0x2E, 0xA2, 0xAB, 0x60, 0xEC, 0x88, 0xEA, 0x45, 0x81, 0x52, 0x3B, 0x2E, 0x95, 0x17, 0xD9, 0x47, 0x30, 0xC2, 0x9B, 0x26, 0xE0, 0xD8, 0x03, 0x14, 0x58, 0xE1, 0xDB, 0x53, 0xA8, 0xC2, 0x3F, 0xB1, 0xF5, 0xC5, 0x36, 0x4E, 0xF3, 0x30, 0xBA, 0xD0, 0x0B, 0x1F, 0xFC, 0x59, 0x0A, 0x0C, 0x0F, 0xB4, 0xA3, 0x01, 0xEF, 0xCE, 0xA6, 0xDE, 0xF0, 0x2F, 0x98, 0x82, 0xAC, 0xB2, 0xC3, 0xF5, 0xB1, 0xC1, 0xEA, 0xDF, 0xFD, 0xE0, 0x39, 0x3E, 0x23, 0x8D, 0xFE, 0x2B, 0x86, 0x2F, 0x5D, 0xAA, 0x76, 0x47, 0x79, 0x5A, 0x34, 0x95, 0xA2, 0x4D, 0x64, 0x5A, 0x6C, 0xC5, 0xF6, 0x51, 0x53, 0x5B, 0xF7, 0x60, 0x65, 0x9D, 0x31, 0x72, 0xB1, 0x62, 0xD2, 0x45, 0xE4, 0xAD, 0xE4, 0xB2, 0x6C, 0xDF, 0x94, 0xE8, 0xDA, 0x21, 0x44, 0x02, 0xDE, 0xBD, 0x03, 0x1C, 0x9F, 0x2B, 0x7E, 0x63, 0x75, 0x44, 0x97, 0x08, 0x0F, 0x58, 0x03, 0x92, 0xA5, 0x4F, 0x2B, 0xC7, 0x8C, 0xCD, 0xF6, 0x28, 0x8D, 0x0C, 0xA6, 0x5C, 0x65, 0xBE, 0xD2, 0x0F, 0x77, 0x5F, 0x39, 0x56, 0x78, 0x16, 0x29, 0x4D, 0x9B, 0x14, 0x34, 0xEF, 0xED, 0xF8, 0xDB, 0x13, 0x91, 0x39, 0xDF, 0x09, 0x8F, 0x3D, 0x1B, 0x8A, 0x43, 0xEB, 0xEB, 0x10, 0xBB, 0x78, 0x05, 0x3C, 0x45, 0x4B, 0x95, 0xF0, 0x95, 0xA9, 0x82, 0x07, 0x8A, 0x76, 0x95, 0xE1, 0x0E, 0xE7, 0x35, 0xF5, 0x6A, 0xE5, 0x4D, 0x88, 0x20, 0x3D, 0x6E, 0x18, 0x73, 0x2A, 0xF1, 0x42, 0xA6, 0x66, 0xEE, 0xC1, 0xE7, 0x65, 0xCC, 0x11, 0x2E, 0xB9, 0x79, 0x9B, 0x22, 0x1B, 0x7A, 0x67, 0xEC, 0xF5, 0x9D, 0xD8, 0x52, 0x6C, 0xDD, 0x41, 0x2B, 0x8B, 0xE6, 0x1A, 0x69, 0xDA, 0x97, 0xB1, 0x10, 0x4E, 0xD1, 0x4B, 0x5C, 0xCE, 0x18, 0xD9, 0xFE, 0x87, 0x3E, 0x6C, 0x09, 0x87, 0x90, 0x57, 0x08, 0xC1, 0x15, 0x21, 0xEA, 0x09, 0x19, 0x13, 0x62, 0xD9, 0x65, 0xE3, 0x92, 0x17, 0xD2, 0x33, 0x4C, 0xBD, 0x52, 0xCB, 0x9D, 0x3A, 0xF2, 0x79, 0x4F, 0x0B, 0x54, 0x0E, 0x59, 0xC0, 0xF7, 0x50, 0x16, 0xF5, 0x33, 0xDC, 0xB7, 0xD8, 0x8F, 0x4A, 0xC8, 0xB1, 0x92, 0x46, 0xFE, 0xE2, 0xB7, 0x50, 0xA0, 0x60, 0x15, 0x65, 0x6C, 0x54, 0x46, 0x65, 0xFE, 0x3D, 0xB7, 0x99, 0x93, 0xF3, 0x42, 0x8A, 0xCA, 0x39, 0x03, 0xA6, 0x9E, 0xFF, 0x7C, 0x8C, 0x94, 0xA1, 0x21, 0xA3, 0xE2, 0xC6, 0x15, 0x1E, 0xED, 0x23, 0x61, 0x0B, 0x43, 0x70, 0x1C, 0xAD, 0xC7, 0x9D, 0xE2, 0xB4, 0x3A, 0xB1, 0x96, 0x23, 0xC0, 0xFB, 0x88, 0x60, 0x89, 0xF7, 0x3A, 0x59, 0xB6, 0x76, 0x52, 0xE8, 0xB5, 0xA6, 0xEF, 0x0F, 0x16, 0x0F, 0x02, 0x1E, 0x6E, 0xDB, 0x9F, 0x30, 0xAC, 0x4F, 0x8C, 0xAA, 0x1F, 0x93, 0xBB, 0xC4, 0x1E, 0x54, 0x11, 0xEF, 0x4A, 0xFB, 0x3E, 0x6C, 0x98, 0x4A, 0xE7, 0x1D, 0xD9, 0x03, 0x59, 0x81, 0xA1, 0x07, 0xBA, 0x17, 0x80, 0x38, 0x08, 0x93, 0xE0, 0xBF, 0x61, 0xAF, 0x1F, 0x0D, 0xB1, 0x63, 0x8C, 0xD4, 0x24, 0xA3, 0xDC, 0x3D, 0x18, 0x1F, 0x02, 0x4C, 0xE8, 0x03, 0x1E, 0xFF, 0x6F, 0xC7, 0x1F, 0x1A, 0x9A, 0xB8, 0x48, 0x35, 0xDB, 0x7A, 0x62, 0x02, 0x1E, 0x4D, 0x64, 0x33, 0x14, 0xC7, 0xF5, 0x32, 0x7B, 0x3F, 0x50, 0x2B, 0x7F, 0xC4, 0xBF, 0x5E, 0xCD, 0x62, 0x23, 0x5F, 0xC6, 0x7F, 0x6F, 0x64, 0x1B, 0xA7, 0x63, 0x67, 0xCD, 0x69, 0x02, 0xA0, 0xBB, 0xAB, 0x27, 0x9C, 0xDB, 0xAC, 0x76, 0x15, 0xF7, 0x08, 0x04, 0x45, 0x79, 0x2E, 0x4B, 0xF5, 0x94, 0xDB, 0xB0, 0xD3, 0x51, 0x02, 0x7F, 0x25, 0x99, 0xDF, 0xE4, 0x14, 0x97, 0xA6, 0x22, 0x5D, 0x3E, 0xE6, 0xF8, 0x98, 0x59, 0x8A, 0xB4, 0x0A, 0x70, 0x19, 0x09, 0xF6, 0x42, 0x8B, 0x61, 0x9F, 0x22, 0x8D, 0x03, 0x77, 0xC1, 0x81, 0x05, 0xA2, 0xA8, 0x16, 0x00, 0xEF, 0xE4, 0x15, 0x70, 0x88, 0xCB, 0x02, 0xF8, 0xE7, 0xD2, 0xD6, 0x6F, 0x5D, 0x57, 0xB7, 0x5C, 0xAD, 0x6C, 0x6A, 0x79, 0x22, 0x60, 0x30, 0xBD, 0x8B, 0x9C, 0xE4, 0x78, 0x97, 0x6E, 0x5E, 0x49, 0x25, 0xB1, 0x9A, 0x74, 0x6B, 0x74, 0xB9, 0xDA, 0xBE, 0x1F, 0x81, 0xD2, 0xE3, 0x46, 0x2A, 0x54, 0xD8, 0x5B, 0x8F, 0x90, 0x28, 0xC0, 0xAD, 0xBE, 0xEA, 0x14, 0x6E, 0xD7, 0xFE, 0x89, 0xB8, 0x2E, 0xE6, 0xAA, 0x44, 0x57, 0xBA, 0xF3, 0xEC, 0xBE, 0x05, 0x83, 0x09, 0x5D, 0x11, 0x8F, 0x8E, 0x87, 0x21, 0x57, 0x8C, 0x9C, 0x1F, 0x24, 0x3F, 0x47, 0x9D, 0x41, 0x54, 0xD9, 0x83, 0xAF, 0xC2, 0x6F, 0xC5, 0x86, 0x40, 0xB9, 0x86, 0x70, 0x14, 0xB0, 0x37, 0xC4, 0x0B, 0xAC, 0x85, 0x2A, 0x39, 0xCF, 0x5E, 0xD4, 0xC2, 0x21, 0x7B, 0x49, 0x1E, 0x3D, 0x65, 0xCB, 0xA9, 0xF8, 0xCE, 0xF5, 0xB3, 0x0D, 0x3D, 0x13, 0xB3, 0x9A, 0xDB, 0x35, 0x21, 0x7A, 0xA7, 0xE3, 0xFF, 0xD4, 0x42, 0xA6, 0x04, 0x86, 0xAC, 0x44, 0x2A, 0xAF, 0xA0, 0x8A, 0x01, 0x16, 0x5E, 0xE0, 0x72, 0xCD, 0xA3, 0xE8, 0xC7, 0xF2, 0x73, 0x71, 0x7C, 0x61, 0xF5, 0xA7, 0xFC, 0xC7, 0x6B, 0x68, 0xC8, 0x51, 0xE2, 0xF8, 0x20, 0x93, 0xB0, 0x5E, 0xD3, 0x5B, 0x11, 0x4C, 0x3E, 0xDD, 0x7C, 0xA7, 0x5F, 0x2F, 0xAD, 0x99, 0x5C, 0xF5, 0x57, 0xF5, 0x38, 0x67, 0x8D, 0xD4, 0x2B, 0x73, 0x64, 0xAC, 0x58, 0x76, 0xFA, 0x0F, 0x43, 0x97, 0xC1, 0x68, 0x2F, 0xE6, 0x61, 0x3D, 0x89, 0x70, 0xB4, 0x85, 0xB1, 0x65, 0xA1, 0x0E, 0xC8, 0xAB, 0x22, 0x2D, 0xD1, 0xB6, 0xBC, 0x77, 0x49, 0xD6, 0x22, 0xE0, 0x0C, 0xA2, 0x6B, 0xD8, 0x45, 0xA6, 0x80, 0xE2, 0x1A, 0x7C, 0x6D, 0x4D, 0x7C, 0x6B, 0xF8, 0x40, 0x62, 0xDD, 0xD6, 0x32, 0xB4, 0x52, 0x9B, 0x3C, 0x4E, 0xD0, 0x29, 0x87, 0x3D, 0x41, 0xE4, 0x35, 0x20, 0xF0, 0x4F, 0x61, 0xD4, 0x18, 0x64, 0x39, 0x87, 0x90, 0x64, 0xF5, 0xCE, 0xA9, 0xAA, 0x18, 0xBE, 0x66, 0x53, 0xA9, 0x23, 0xF9, 0xF4, 0x53, 0x3F, 0xEA, 0x25, 0xD9, 0xD4, 0x79, 0x2C, 0xD4, 0x64, 0x0B, 0xAE, 0xDF, 0xDE, 0xCE, 0xCD, 0xC5, 0x91, 0xE2, 0xB9, 0x94, 0x17, 0xF3, 0xC7, 0x6F, 0x01, 0xF8, 0xCD, 0xE7, 0x0C, 0x30, 0xDF, 0x58, 0x34, 0x3D, 0x20, 0x61, 0xD8, 0xF9, 0x0A, 0x2F, 0x3D, 0xA7, 0xE9, 0x5C, 0x7A, 0x52, 0xDB, 0xEE, 0x45, 0x47, 0x7A, 0x2E, 0x1D, 0xE3, 0x2D, 0x6C, 0xA4, 0xBD, 0xED, 0x65, 0x5C, 0x0E, 0x09, 0x67, 0x0B, 0x77, 0x27, 0x51, 0x9B, 0x38, 0x72, 0xD3, 0x9A, 0xEA, 0x21, 0x71, 0x75, 0x2B, 0x0F, 0xC7, 0xD0, 0x35, 0x08, 0x02, 0x19, 0xF5, 0x97, 0xEB, 0xF4, 0xB9, 0x39, 0x30, 0x10, 0x52, 0xA3, 0x50, 0x09, 0x89, 0xF8, 0xF1, 0xA8, 0x31, 0xB2, 0xEF, 0x6B, 0x85, 0x35, 0x45, 0xF7, 0x89, 0x58, 0x8D, 0x6A, 0xD3, 0x5C, 0x57, 0xA3, 0x43, 0x18, 0xB5, 0x09, 0x08, 0xD8, 0x24, 0x8C, 0xD3, 0xFA, 0xAC, 0x6D, 0xEE, 0x4F, 0xB4, 0x77, 0xF3, 0x46, 0xE9, 0x1E, 0xB3, 0x40, 0x8E, 0xC7, 0x85, 0xEA, 0xEF, 0xD9, 0xF4, 0xB5, 0xFF, 0x90, 0x03, 0xA0, 0x61, 0x65, 0x83, 0x2C, 0x6D, 0x66, 0x98, 0x67, 0x1E, 0x41, 0x41, 0x66, 0xBC, 0x28, 0x8A, 0x76, 0x8A, 0x0E, 0xF6, 0x0B, 0xD9, 0x7C, 0x51, 0x90, 0xD2, 0x28, 0x77, 0xA0, 0x9B, 0xE6, 0xBB, 0x3C, 0xA1, 0x53, 0xDB, 0xE7, 0x75, 0xCD, 0x3D, 0x0E, 0x1C, 0x11, 0x3E, 0xD8, 0x7A, 0x09, 0xE1, 0x12, 0x5E, 0x1D, 0x9A, 0x29, 0x06, 0x79, 0xFD, 0x8D, 0x49, 0xB9, 0xD3, 0x0E, 0xB7, 0x7D, 0x69, 0x83, 0x81, 0x56, 0x82, 0x58, 0x2F, 0xEA, 0xCF, 0x66, 0xD8, 0x34, 0x16, 0x17, 0x27, 0x18, 0xEF, 0x65, 0xBE, 0x01, 0x65, 0xBF, 0x6F, 0xAE, 0x21, 0xA4, 0xA3, 0xA2, 0x95, 0xBC, 0x0B, 0x83, 0x30, 0xEA, 0x46, 0xC0, 0xAB, 0xA8, 0xA4, 0xCB, 0x22, 0x53, 0xAD, 0xC7, 0x8C, 0x03, 0x6B, 0x35, 0xB9, 0xB0, 0x69, 0xA0, 0xB9, 0xE0, 0x68, 0xB6, 0x4E, 0xE7, 0x91, 0x67, 0x05, 0x9C, 0x81, 0x47, 0xD3, 0x36, 0x06, 0xEE, 0xE3, 0x06, 0x04, 0xDB, 0x29, 0xFA, 0x62, 0x1F, 0xC7, 0xD6, 0xF4, 0x63, 0x75, 0x46, 0xD9, 0x1D, 0x17, 0x7C, 0x94, 0x81, 0x05, 0xA8, 0x92, 0x99, 0xD4, 0x5F, 0xB8, 0xF7, 0x21, 0x6D, 0x3D, 0x2B, 0x47, 0x04, 0xF9, 0x17, 0xC9, 0xDC, 0x2D, 0xC0, 0xB8, 0x1B, 0x0C, 0xF9, 0xBA, 0x35, 0x63, 0xD8, 0xF5, 0xAF, 0x52, 0x67, 0x02, 0x47, 0x1F, 0x0A, 0x93, 0x19, 0x8A, 0x40, 0x5B, 0x58, 0xA8, 0x9B, 0x4B, 0x93, 0x44, 0x30, 0xB1, 0x14, 0x1B, 0x66, 0xD4, 0x58, 0x4C, 0xD0, 0x0A, 0x2C, 0xD2, 0x91, 0xBF, 0x69, 0xEC, 0xFB, 0x10, 0xBF, 0x84, 0x13, 0x24, 0x25, 0xD7, 0x8E, 0x78, 0x8A, 0xF5, 0xD2, 0x24, 0x8B, 0x4C, 0xD6, 0x26, 0x92, 0x56, 0x6B, 0xF5, 0x8D, 0x67, 0x51, 0x1B, 0xDE, 0xFD, 0xE9, 0x8F, 0x27, 0x6C, 0x07, 0x41, 0xD5, 0x0A, 0x85, 0xA8, 0xA7, 0x55, 0x82, 0x38, 0x8C, 0x38, 0x60, 0x18, 0xDA, 0xFC, 0xD5, 0xC4, 0x9A, 0x20, 0x14, 0xBF, 0x91, 0x4E, 0x97, 0xE9, 0xF2, 0x54, 0xB7, 0x1E, 0x5B, 0x43, 0x59, 0x5E, 0xA3, 0x29, 0xDF, 0xE5, 0x55, 0x21, 0x7B, 0x2B, 0x16, 0x6C, 0x35, 0x12, 0xCB, 0xB0, 0x4B, 0xCB, 0xF3, 0x8C, 0x89, 0xDD, 0xCA, 0xCB, 0x66, 0xF2, 0x2B, 0xC2, 0x4E, 0x24, 0xBA, 0xD1, 0x94, 0xA6, 0xA3, 0x01, 0x9B, 0xB3, 0xFA, 0xCD, 0x26, 0x2B, 0x51, 0x78, 0x54, 0x2F, 0x90, 0xF9, 0xAA, 0x45, 0x0A, 0xCA, 0x16, 0x41, 0xD4, 0xA2, 0xFE, 0xA5, 0x9D, 0x0B, 0x8E, 0x29, 0xB7, 0xE4, 0xE8, 0xDE, 0x29, 0x76, 0xC7, 0xA6, 0x74, 0x48, 0x9D, 0x75, 0x69, 0xBA, 0xB9, 0xFD, 0x3C, 0x44, 0x28, 0x7D, 0x8E, 0xDC, 0xE0, 0xCB, 0xC9, 0x25, 0x26, 0x55, 0x80, 0x84, 0xA8, 0xB8, 0x80, 0x9B, 0x57, 0x0E, 0x61, 0xFB, 0x06, 0xFF, 0x87, 0xA1, 0x8D, 0xF0, 0x33, 0xDD, 0xED, 0x06, 0x96, 0x90, 0xED, 0x42, 0x2D, 0xEE, 0x85, 0x06, 0x1A, 0x9F, 0xAC, 0x74, 0x79, 0xA2, 0x95, 0xE9, 0x5E, 0x14, 0x7B, 0xC3, 0xCF, 0xEE, 0x48, 0xEC, 0xD6, 0x9D, 0x3E, 0x66, 0x9E, 0x30, 0xAB, 0x8C, 0xCF, 0x11, 0xE2, 0x22, 0x69, 0x5B, 0x45, 0xA8, 0xC8, 0x87, 0x90, 0xE4, 0x9E, 0xB7, 0x9A, 0x41, 0x6E, 0x1D, 0x83, 0xDE, 0x9C, 0xFB, 0xC6, 0xCC, 0x0C, 0x79, 0x8F, 0xFF, 0xC0, 0xF4, 0xE9, 0x38, 0xA5, 0xC6, 0x96, 0x5A, 0xE6, 0xA8, 0xAA, 0xA8, 0x8B, 0xCF, 0x0C, 0x1B, 0x08, 0xDC, 0x07, 0xB0, 0xF5, 0xEA, 0xAC, 0xB5, 0x90, 0x97, 0x95, 0xCA, 0x41, 0x49, 0x90, 0xF2, 0x84, 0x32, 0xF3, 0x60, 0x47, 0xF1, 0xEA, 0x1A, 0xA3, 0x79, 0x14, 0x00, 0x2E, 0xEB, 0xEC, 0xBC, 0x80, 0x05, 0x8B, 0xDE, 0xD7, 0xE6, 0x17, 0xF9, 0xF1, 0xD4, 0xD1, 0xFD, 0xA7, 0x14, 0xDA, 0x07, 0xB9, 0x2A, 0x6B, 0x7D, 0x4D, 0xD2, 0x5F, 0x14, 0xD5, 0x23, 0x5B, 0x9B, 0x3C, 0xD2, 0xCE, 0x9F, 0xE8, 0x31, 0x2E, 0x6F, 0xF5, 0x72, 0x11, 0xD1, 0x81, 0x19, 0xDC, 0x6E, 0xA2, 0xD2, 0xDA, 0xD2, 0xD5, 0xE3, 0x3D, 0x3E, 0xB4, 0x41, 0x16, 0xE7, 0x52, 0x03, 0xE2, 0x81, 0xBB, 0x49, 0x85, 0xAF, 0xEC, 0x6D, 0x31, 0x27, 0xC4, 0x46, 0x71, 0xAA, 0xCD, 0x5C, 0x21, 0xD1, 0x61, 0x8B, 0x02, 0xFA, 0xF3, 0x4E, 0x56, 0x54, 0xB9, 0x4F, 0x0F, 0x80, 0x7A, 0xA7, 0x72, 0x6F, 0x40, 0x57, 0xF8, 0xBC, 0x15, 0x29, 0x33, 0x9E, 0x4A, 0x0C, 0xDB, 0x7B, 0x37, 0x55, 0x90, 0xD7, 0x73, 0xAD, 0x19, 0x77, 0xD2, 0xEB, 0x95, 0x51, 0x57, 0xF4, 0xBC, 0x37, 0xD2, 0x64, 0xAE, 0xF7, 0xC6, 0x02, 0xD8, 0x31, 0x7F, 0xC4, 0xB0, 0x50, 0x64, 0x8C, 0x95, 0xBE, 0xCF, 0x53, 0x68, 0x7C, 0xDA, 0x3D, 0x85, 0xBB, 0xEE, 0x2E, 0xCD, 0xF1, 0xF5, 0x09, 0x3C, 0x2D, 0x2E, 0x2E, 0xBE, 0x68, 0x35, 0x70, 0x99, 0x00, 0x0B, 0x71, 0x86, 0x52, 0x9D, 0x09, 0x48, 0x9B, 0x5D, 0xFD, 0xAA, 0xB4, 0xC9, 0x75, 0xB3, 0x45, 0xC8, 0x41, 0x14, 0x6F, 0x71, 0x45, 0x0D, 0x16, 0x1F, 0x2F, 0xB2, 0x25, 0x52, 0x46, 0x3B, 0x72, 0x00, 0x04, 0x3E, 0x09, 0x6A, 0x86, 0x5C, 0x59, 0x0C, 0x36, 0x4B, 0x98, 0xDD, 0x0D, 0x98, 0xB0, 0xF1, 0x48, 0xE3, 0xC7, 0x2B, 0xC8, 0xBB, 0x1B, 0x23, 0xCC, 0xDD, 0x24, 0x5B, 0xAE, 0xF9, 0xAC, 0xE5, 0xD1, 0xB1, 0x7D, 0x13, 0xA3, 0xC3, 0xBC, 0x86, 0xB2, 0xBC, 0xC5, 0x50, 0x94, 0x6C, 0xED, 0xDB, 0x13, 0xB8, 0x11, 0x1B, 0x63, 0x19, 0x85, 0xE3, 0xF3, 0x24, 0x59, 0xDD, 0xB3, 0x9D, 0x37, 0xF9, 0x5A, 0x89, 0xD3, 0x34, 0xEE, 0x37, 0xCA, 0x00, 0x55, 0xC6, 0x59, 0x33, 0x87, 0x32, 0xC9, 0xB2, 0x73, 0x7E, 0x8B, 0x2B, 0x63, 0x5F, 0x9E, 0x49, 0x1A, 0x0C, 0xCE, 0x24, 0x4B, 0xE7, 0xC3, 0x7D, 0xF8, 0x90, 0xD7, 0xA1, 0xBE, 0x07, 0x8B, 0xB7, 0x7D, 0x91, 0xBD, 0xD3, 0x50, 0xB9, 0x66, 0xEA, 0x5A, 0x11, 0x24, 0x42, 0xBD, 0x72, 0x02, 0x98, 0x7F, 0xCF, 0x13, 0x56, 0xE0, 0x00, 0x24, 0x59, 0x84, 0xAE, 0xA1, 0x89, 0x83, 0xEB, 0xA9, 0x73, 0x94, 0x4C, 0xD2, 0xEE, 0xB6, 0x94, 0xC2, 0xDA, 0xBB, 0x3F, 0x66, 0x5E, 0x5C, 0x9A, 0x05, 0xF6, 0x94, 0x44, 0x86, 0x45, 0xEE, 0xBA, 0xF0, 0x29, 0x97, 0x16, 0x2E, 0xB0, 0xB4, 0x67, 0x1E, 0xF9, 0x37, 0x4D, 0x47, 0x15, 0x43, 0xBE, 0xBB, 0xFC, 0xA1, 0x9B, 0xB9, 0xA6, 0xA1, 0x49, 0x34, 0xF5, 0x99, 0xAB, 0x11, 0x5F, 0x4F, 0xE2, 0x3C, 0xAA, 0xAF, 0xED, 0x64, 0xC6, 0x06, 0x25, 0xB7, 0xCA, 0xEB, 0xF5, 0xE9, 0xBD, 0xF2, 0x50, 0x0F, 0xC2, 0x90, 0x2C, 0xE3, 0xDD, 0xE5, 0xD9, 0x07, 0x14, 0xB4, 0x6D, 0xE8, 0x22, 0x1A, 0xB8, 0xAD, 0xFB, 0xC0, 0x86, 0x5E, 0x54, 0xC2, 0x78, 0x9B, 0xC2, 0x84, 0x1C, 0x82, 0x07, 0x16, 0x39, 0xB4, 0x11, 0x20, 0x6F, 0xA2, 0x70, 0x8A, 0xB5, 0xAF, 0xD3, 0x37, 0x10, 0xCC, 0x81, 0xEF, 0x8C, 0x1E, 0x8E, 0x5E, 0xAC, 0x39, 0xB7, 0x46, 0x86, 0x88, 0x34, 0x0E, 0x39, 0x58, 0xE0, 0xCB, 0x3B, 0x03, 0x93, 0x42, 0xCB, 0x29, 0x51, 0x9D, 0xDA, 0xE2, 0xC3, 0x42, 0xEA, 0x4C, 0x03, 0x05, 0xEB, 0x63, 0x0D, 0xEC, 0x4B, 0x9C, 0x7F, 0x31, 0xE3, 0x59, 0x4A, 0x6F, 0xBD, 0xD8, 0x9A, 0x30, 0x2E, 0x1F, 0x0B, 0x13, 0x8F, 0xF5, 0xD9, 0xD2, 0x22, 0xF3, 0xA8, 0x6C, 0x71, 0xC1, 0x18, 0x24, 0x34, 0x86, 0x40, 0xF8, 0x17, 0xEA, 0xBA, 0x32, 0x9E, 0x64, 0xAD, 0xFC, 0x32, 0x50, 0x25, 0x5E, 0x2E, 0x5D, 0xDD, 0x8D, 0x8B, 0x1C, 0xAB, 0xCB, 0x33, 0x67, 0x37, 0x17, 0x56, 0xFC, 0x10, 0x58, 0x67, 0x9E, 0x53, 0xF1, 0x48, 0x6B, 0xBC, 0x07, 0x68, 0x9E, 0x0E, 0xF1, 0xE1, 0xD9, 0x80, 0x49, 0x62, 0x39, 0xB0, 0x3A, 0xF5, 0x79, 0xF1, 0x36, 0xE6, 0x71, 0xC2, 0x24, 0x98, 0xE2, 0x6A, 0x60, 0x53, 0xEC, 0x48, 0x00, 0xA6, 0xEB, 0x23, 0xB3, 0xF9, 0x2D, 0xAD, 0xF2, 0x51, 0xCC, 0x90, 0x1D, 0x9B, 0x71, 0x5F, 0x22, 0xE1, 0x80, 0x4D, 0xB9, 0x51, 0x3B, 0xB0, 0xEB, 0xDF, 0x0A, 0x88, 0xC1, 0x06, 0x7D, 0xB5, 0x36, 0x27, 0x40, 0x04, 0x72, 0xBA, 0xE6, 0xE5, 0x20, 0x9B, 0xB1, 0xDC, 0x11, 0x04, 0x98, 0x75, 0x51, 0x5E, 0x66, 0x7E, 0xE8, 0xAB, 0xC1, 0x6E, 0x9E, 0x61, 0xBA, 0x88, 0x1C, 0xB0, 0x4A, 0x5D, 0xAC, 0x37, 0x63, 0x65, 0x2F, 0x2F, 0x11, 0x5D, 0x32, 0x3D, 0x71, 0x7E, 0x61, 0x98, 0xC0, 0x0C, 0xCB, 0x34, 0x81, 0x48, 0x81, 0x66, 0xE0, 0xAD, 0xC9, 0x43, 0x00, 0x8B, 0xCF, 0x8D, 0xEF, 0xA4, 0xFC, 0xD4, 0x67, 0xE9, 0xEF, 0xDB, 0x45, 0x2A, 0x59, 0x2F, 0xEE, 0xC2, 0xDB, 0x5A, 0x07, 0xD0, 0x53, 0x41, 0x66, 0x81, 0xC3, 0x30, 0xB4, 0xE3, 0x7F, 0x8B, 0xBD, 0xB4, 0x84, 0xC4, 0xEE, 0xEE, 0xFE, 0x2D, 0x71, 0x3A, 0x39, 0x5A, 0xED, 0xE5, 0xF3, 0xF0, 0xE5, 0xB1, 0x0C, 0x53, 0x2A, 0x37, 0xCF, 0x04, 0xF9, 0xFE, 0x70, 0xBF, 0x5A, 0x68, 0x57, 0x0B, 0x54, 0x98, 0x48, 0x8D, 0xDB, 0x80, 0xC9, 0x4C, 0xB7, 0x14, 0x45, 0x4C, 0xA3, 0xA2, 0x0C, 0x11, 0xDB, 0x02, 0x4D, 0xE9, 0xA6, 0xA6, 0x03, 0x63, 0x41, 0xD9, 0xCB, 0xE5, 0x8A, 0xA5, 0xEF, 0x09, 0xCA, 0xF9, 0x92, 0x4D, 0x75, 0xF8, 0xB7, 0x10, 0x78, 0x5D, 0x59, 0x3D, 0x75, 0x6A, 0xE6, 0xFD, 0x8E, 0xC2, 0x5F, 0x7A, 0xCA, 0x03, 0xAB, 0x95, 0x61, 0x79, 0x9F, 0x4F, 0x8F, 0xEF, 0x45, 0x07, 0xBB, 0x7E, 0x12, 0x43, 0x1A, 0xA7, 0x87, 0x33, 0x61, 0x71, 0x3A, 0x74, 0x6D, 0x98, 0x59, 0xF5, 0x47, 0xA6, 0x07, 0x03, 0x41, 0x45, 0x09, 0xB1, 0x0A, 0x45, 0xBA, 0x82, 0xAA, 0x6E, 0xCB, 0xD8, 0xDA, 0x4D, 0x83, 0xE2, 0x6B, 0x13, 0x96, 0x33, 0xA3, 0xC0, 0xF9, 0x10, 0x8E, 0x01, 0x1E, 0xAD, 0xD7, 0xB9, 0x6F, 0xB4, 0x69, 0x79, 0x3D, 0x36, 0x45, 0xEA, 0x48, 0x19, 0x46, 0xDC, 0x1E, 0x42, 0x65, 0x28, 0x70, 0x08, 0x06, 0xA8, 0x82, 0xA5, 0x7B, 0xDE, 0xEC, 0x1E, 0x97, 0x0D, 0xE0, 0xCC, 0x6D, 0x1B, 0x57, 0xE5, 0xCA, 0x60, 0xC2, 0xF8, 0xBD, 0x39, 0xAA, 0xA9, 0x91, 0x5E, 0x8E, 0x12, 0x84, 0x2E, 0x0C, 0xE8, 0xD3, 0x5E, 0xE6, 0x15, 0xB8, 0x53, 0x4A, 0x89, 0xB3, 0x0E, 0xCF, 0x4D, 0x90, 0x1B, 0x9A, 0x9E, 0x32, 0x6C, 0xAF, 0xE3, 0x35, 0xE1, 0xC1, 0xFB, 0x66, 0x1C, 0x5F, 0xD6, 0xA2, 0x83, 0x33, 0xEE, 0xE5, 0x14, 0x0D, 0x92, 0xF6, 0xB4, 0x7D, 0x8C, 0x67, 0xA2, 0xC8, 0xFB, 0x26, 0x09, 0x30, 0x10, 0x37, 0x4F, 0x73, 0x97, 0xE7, 0x43, 0x4B, 0xE2, 0xEB, 0x8F, 0x90, 0x85, 0x50, 0xFF, 0x65, 0xFF, 0x1E, 0x45, 0x5B, 0xF8, 0xFD, 0x87, 0xEE, 0xE2, 0xA4, 0x75, 0x1A, 0xF6, 0x18, 0x44, 0x37, 0xE4, 0xF5, 0xEB, 0x77, 0x9E, 0xED, 0x64, 0xC5, 0x82, 0xF6, 0x19, 0x06, 0x31, 0xC2, 0xCD, 0x18, 0x52, 0x01, 0xB7, 0x67, 0x6E, 0x1D, 0xCD, 0x38, 0xDF, 0xCE, 0x56, 0xAC, 0x7F, 0x66, 0xED, 0x2D, 0xD1, 0x20, 0xE1, 0xB8, 0x6D, 0xA8, 0x8B, 0x7D, 0x6C, 0x14, 0x10, 0xFE, 0x3A, 0xCA, 0xBA, 0x5C, 0xD6, 0x02, 0xA9, 0xCC, 0x2E, 0xC4, 0xB4, 0xCE, 0x31, 0x91, 0x81, 0x50, 0xCA, 0x6F, 0x36, 0xF9, 0xF4, 0xC4, 0x5F, 0xE9, 0x98, 0xA6, 0x67, 0x09, 0x07, 0x0C, 0x7A, 0x04, 0x3F, 0xAE, 0x20, 0xF9, 0x41, 0x25, 0xA6, 0x0D, 0xD7, 0x78, 0x08, 0xA0, 0x51, 0xE3, 0x72, 0xD6, 0x6F, 0xB2, 0x4C, 0x33, 0x8A, 0x4D, 0xC7, 0x17, 0xA3, 0x33, 0xC3, 0x44, 0xE3, 0x92, 0xDA, 0x33, 0xA5, 0x4B, 0x88, 0xF3, 0x7C, 0x85, 0x2E, 0xC2, 0x7D, 0x19, 0x1E, 0x9C, 0x40, 0xA9, 0x09, 0x2B, 0xF8, 0xD5, 0x91, 0xFD, 0x8A, 0xC4, 0xBD, 0x25, 0x23, 0x43, 0xB7, 0x37, 0x9A, 0x89, 0xA9, 0x7C, 0xEB, 0x2E, 0x47, 0x38, 0x00, 0xEC, 0x6A, 0x94, 0xB7, 0xA9, 0x60, 0xEF, 0xCD, 0x4A, 0x2A, 0xA5, 0x40, 0xA5, 0x40, 0x2B, 0x1C, 0xFA, 0x48, 0xA1, 0x71, 0xC6, 0xA2, 0x79, 0x76, 0x5D, 0x74, 0xE6, 0x09, 0x05, 0x1C, 0x97, 0xED, 0x15, 0x37, 0x61, 0xE5, 0x9F, 0xDA, 0xAA, 0x79, 0x4A, 0x7F, 0x85, 0x71, 0x29, 0x62, 0x1B, 0x56, 0x89, 0x23, 0xC1, 0xC4, 0xBB, 0x32, 0x5A, 0x3B, 0xAE, 0x5F, 0xC2, 0x3A, 0x90, 0xAD, 0xE6, 0x72, 0x36, 0xB5, 0xB3, 0x25, 0xDB, 0x78, 0x5D, 0x24, 0xD7, 0x20, 0x32, 0x88, 0xC9, 0x01, 0x29, 0x41, 0xE3, 0x20, 0x3A, 0xC1, 0x6D, 0xD8, 0x7C, 0xB5, 0xCB, 0x54, 0x69, 0xE6, 0x65, 0xA3, 0xE2, 0x61, 0xF7, 0x7A, 0x79, 0x89, 0xB6, 0xE6, 0x4F, 0x82, 0x20, 0x30, 0x6F, 0x11, 0x56, 0xB1, 0x9E, 0xC1, 0xFD, 0x1F, 0xF0, 0x7A, 0xF5, 0x10, 0x3F, 0x33, 0x64, 0xEE, 0x16, 0x26, 0x94, 0x5A, 0xDB, 0xFC, 0x02, 0xB4, 0x7F, 0xC6, 0x4B, 0xAF, 0x88, 0xAB, 0x06, 0xBA, 0x5B, 0x70, 0xD4, 0xAD, 0x90, 0xBB, 0x7E, 0x71, 0x45, 0x3C, 0x62, 0xF0, 0xD9, 0xDE, 0xBC, 0x3C, 0x61, 0x7F, 0x50, 0x65, 0x8D, 0x1E, 0x72, 0x88, 0x69, 0xF4, 0xD5, 0xDA, 0x1F, 0x2B, 0x65, 0x9A, 0xEA, 0x05, 0x0A, 0x30, 0xC0, 0x56, 0x20, 0x01, 0x27, 0xCD, 0xDD, 0xF4, 0xBD, 0x37, 0x87, 0x58, 0x4F, 0x6D, 0x52, 0x12, 0xDC, 0xD7, 0x25, 0xCD, 0x21, 0xEF, 0x77, 0x78, 0x61, 0x06, 0x6B, 0x63, 0xC5, 0xCC, 0x9A, 0x36, 0x27, 0x5A, 0xF9, 0xC6, 0xDF, 0x28, 0x58, 0x38, 0xD9, 0x62, 0x98, 0x7E, 0x79, 0x4A, 0x6F, 0xD0, 0xBF, 0x6D, 0x20, 0x1D, 0x78, 0x5C, 0xF3, 0xAD, 0x4A, 0x31, 0xB4, 0xDD, 0xCD, 0xFC, 0xF2, 0x9C, 0x66, 0xEF, 0xC4, 0x46, 0xDB, 0xA8, 0x39, 0xDF, 0x6B, 0x78, 0x6F, 0xB5, 0xC2, 0xE0, 0xB2, 0xE4, 0x82, 0xF4, 0xAC, 0x26, 0xB6, 0xEA, 0xEF, 0xDD, 0xEB, 0xE9, 0x04, 0x39, 0x7E, 0x43, 0xD6, 0x7A, 0xF2, 0xE4, 0x26, 0xDB, 0x42, 0xBB, 0x0C, 0xDB, 0xB9, 0x00, 0xF2, 0x07, 0x7A, 0xED, 0xCC, 0x32, 0xFE, 0xEB, 0x12, 0x8D, 0x8E, 0x9D, 0x5B, 0xCF, 0x36, 0x4A, 0xB2, 0x90, 0xAE, 0xAE, 0xC3, 0x46, 0x94, 0x2B, 0x67, 0xD9, 0x0D, 0x88, 0x22, 0x74, 0x42, 0x90, 0x80, 0x24, 0xDD, 0x11, 0xE0, 0xC2, 0x20, 0xAC, 0xD1, 0x90, 0x5E, 0x18, 0x70, 0x5C, 0xB1, 0x2E, 0xA5, 0x6B, 0xC5, 0x0F, 0x7E, 0xFF, 0x86, 0x91, 0x26, 0x09, 0x76, 0x5F, 0x8A, 0xB6, 0xAC, 0xFA, 0x84, 0x6C, 0x5C, 0x4F, 0x1F, 0x45, 0x45, 0x45, 0xE8, 0x0A, 0x5B, 0x95, 0x05, 0x1F, 0xFC, 0xD7, 0x72, 0xA9, 0xA0, 0x2E, 0x1D, 0x7F, 0xE3, 0xF6, 0xC1, 0xBF, 0x64, 0xA1, 0x11, 0x1C, 0x9F, 0xDA, 0x64, 0x78, 0x1A, 0x5A, 0xC8, 0x1D, 0x85, 0xD3, 0xC5, 0x70, 0xCE, 0x7E, 0xAB, 0x94, 0x92, 0xCE, 0xF5, 0x20, 0xD3, 0x59, 0xD5, 0x43, 0xDE, 0xC7, 0x40, 0x1E, 0x1F, 0x1B, 0xFC, 0x06, 0xD3, 0xE5, 0x81, 0xE6, 0xDC, 0x75, 0x13, 0xF5, 0xD7, 0x95, 0x3A, 0xC3, 0x2F, 0xBE, 0xD5, 0x27, 0xEB, 0xE9, 0x82, 0x55, 0x74, 0x2A, 0x30, 0x50, 0xB4, 0xAD, 0x06, 0xB2, 0xE6, 0x4C, 0xAF, 0x1E, 0x8B, 0x6B, 0xB4, 0x76, 0x89, 0x37, 0x38, 0x23, 0x2C, 0xA2, 0xAF, 0x7E, 0xA0, 0x60, 0x1A, 0xFA, 0xD5, 0xB4, 0xD1, 0x66, 0x5F, 0xBB, 0x03, 0x8A, 0x09, 0x26, 0xAE, 0xE5, 0x0C, 0xF7, 0xF8, 0x02, 0xA6, 0xC4, 0x75, 0x37, 0xD4, 0x90, 0x58, 0xD0, 0x44, 0xFC, 0x57, 0xD6, 0xF3, 0x85, 0x9A, 0xEF, 0x44, 0xC3, 0xF3, 0xE3, 0xDE, 0x38, 0xFE, 0xA6, 0x48, 0x96, 0x9A, 0xB4, 0xB7, 0x9D, 0x0B, 0x3A, 0x2C, 0xCE, 0xD5, 0x37, 0xA0, 0xB7, 0x9E, 0x6B, 0x5F, 0xDE, 0x04, 0x52, 0x81, 0xC4, 0x92, 0xE6, 0xDC, 0x56, 0x08, 0xF2, 0x11, 0x98, 0x3E, 0xFF, 0x31, 0x3C, 0x54, 0xD2, 0xB5, 0xAF, 0x69, 0x51, 0x06, 0xB4, 0xF3, 0x54, 0xAF, 0xC4, 0x3B, 0x8D, 0x94, 0xC3, 0x05, 0x4D, 0x5F, 0xD8, 0x06, 0xA0, 0x90, 0xEB, 0xEC, 0xFB, 0x6E, 0x7B, 0xA5, 0xBE, 0x94, 0xAD, 0xFF, 0x32, 0x9E, 0x59, 0xF4, 0x6C, 0x55, 0x17, 0x6A, 0xE9, 0xA8, 0x5A, 0x14, 0xAA, 0x7C, 0x1B, 0xD3, 0xBB, 0xA4, 0x7E, 0x80, 0xCE, 0x02, 0xDF, 0xA2, 0x93, 0x07, 0xF3, 0xD9, 0xDB, 0x96, 0x5F, 0xA8, 0xC7, 0xF8, 0xE7, 0x5D, 0xB6, 0x52, 0xC7, 0x3B, 0x6D, 0xE0, 0xAF, 0x4F, 0x19, 0xEB, 0x77, 0xE9, 0x7D, 0xDB, 0x51, 0xEE, 0x60, 0xC9, 0x94, 0x5B, 0x4D, 0x4B, 0x6B, 0x59, 0x97, 0x8D, 0xB6, 0x06, 0x30, 0x57, 0x0D, 0xB6, 0x70, 0xC9, 0xDC, 0x54, 0x68, 0xB4, 0xF1, 0x8B, 0x3B, 0xB0, 0x09, 0xD7, 0x20, 0x21, 0x12, 0x29, 0x87, 0x4C, 0x35, 0x01, 0xB3, 0x76, 0xB6, 0x99, 0xD1, 0x4B, 0x2C, 0x3C, 0xED, 0xF9, 0xC0, 0x78, 0x97, 0x19, 0xF3, 0x9F, 0x73, 0x9D, 0xF7, 0xCC, 0x06, 0x6A, 0x9B, 0xEC, 0x94, 0xD7, 0xD1, 0x77, 0x20, 0xC3, 0xA2, 0x8B, 0x74, 0xCA, 0x96, 0x9F, 0x69, 0x6D, 0xAD, 0xE3, 0x62, 0x98, 0xEB, 0x86, 0x7E, 0xAC, 0xB9, 0x8B, 0x17, 0xA9, 0x4F, 0x07, 0xBB, 0x0C, 0xE3, 0x82, 0xDD, 0x40, 0xFF, 0x22, 0x7A, 0xF2, 0x46, 0x80, 0x5A, 0x8D, 0x5A, 0xF6, 0xCC, 0x3E, 0xC5, 0x34, 0x02, 0x0D, 0xAC, 0xDC, 0xE9, 0xC1, 0x1A, 0xC6, 0x5E, 0x68, 0xEE, 0x05, 0x1B, 0x6A, 0x6D, 0x39, 0x3F, 0x10, 0xF8, 0xEB, 0x43, 0x6F, 0x52, 0x81, 0x49, 0x6C, 0x0A, 0x23, 0x30, 0x24, 0x25, 0xF9, 0xB4, 0xF3, 0x95, 0x74, 0x23, 0x51, 0x6E, 0x27, 0xEC, 0x1C, 0x84, 0xB5, 0xD1, 0x0D, 0x8D, 0x17, 0x53, 0xCA, 0xB7, 0x1E, 0x3F, 0xA4, 0x5F, 0x07, 0x58, 0xB1, 0x6D, 0x94, 0xAE, 0x60, 0x23, 0x3F, 0x51, 0xAF, 0x7A, 0x45, 0xC3, 0x3B, 0x76, 0xE4, 0x9A, 0x5B, 0xB3, 0x5C, 0xBA, 0x64, 0xB9, 0x25, 0x92, 0xAB, 0x60, 0xB6, 0x2E, 0xF5, 0xCF, 0x85, 0xEB, 0x3E, 0xAB, 0xD4, 0x6B, 0x47, 0xDC, 0x8D, 0x69, 0x3C, 0x53, 0x51, 0x64, 0x7B, 0x22, 0xBE, 0xC8, 0xB0, 0x61, 0xD7, 0x89, 0xF6, 0xCA, 0xCF, 0x1D, 0x29, 0x18, 0xF2, 0x71, 0x5C, 0x58, 0xD7, 0x18, 0xEF, 0xDB, 0xE1, 0xD6, 0x83, 0xC3, 0x26, 0x1A, 0xBE, 0xF2, 0x7F, 0xDB, 0x0E, 0x99, 0x9F, 0x8C, 0x56, 0xD7, 0x6E, 0xD6, 0xCA, 0x55, 0x52, 0x66, }; / \brief 校准数据 */ uint8_t g_cali_buf[14] = { 
    0x81, 0x47, 0x00, 0xf5, 0x94, 0x3f, 0xc3, 0x07, 0x0b, 0x08, 0x32, 0x6c, 0x00, 0x04,}; / \brief 状态数据 */ uint8_t g_state_buf[11] = { 
    0xB1, 0xD3, 0x04, 0x00, 0x37, 0x70, 0x02, 0x00, 0x00, 0x00, 0x00}; / \brief 存储 TOF 获取的结果 */ result_info_t g_tof_result = { 
   0}; / * \brief 读取 TMF8801 状态标志位 * * \retval TMF8x01_OK : 操作成功 * \retval TMF8x01_NK : 操作失败 */ static int8_t __tmf8801_status_read (void) { 
    uint8_t sta_buf[3] = { 
   0}; /* 读状态寄存器 */ I2C_TMF8001_ReadByte(0x08, sta_buf, 3); if (sta_buf[0] != 0x00 || sta_buf[1] != 0x00 || sta_buf[2] != 0xFF) { 
    // printf("Error\r\n"); return TMF8x01_NK; } return TMF8x01_OK; } / * \brief 初始化下载 HW */ static int8_t __tmf8801_download_init (void) { 
    /* * cmd_buf[0] : 初始化下载 HW 命令(0x14) * cmd_buf[1] : 数据长度(0x01) * cmd_buf[3] : 1个字节数据 * cmd_buf[4] : 校验字节 */ uint8_t cmd_buf[] = { 
   0x14, 0x01, 0x29, 0xC1}; uint32_t tick = 0; I2C_TMF8001_WriteByte(0x08, cmd_buf, 4); while (1) { 
    if (__tmf8801_status_read() == TMF8x01_OK) { 
    break; } tick ++; if (tick >= 10) { 
    printf("__tmf8801_download_init tmo!\r\n"); return TMF8x01_NK; } } return TMF8x01_OK; } / * \brief 设置写 RAM 地址 */ static int8_t __tmf8801_set_ram_addr (uint16_t addr) { 
    /* * cmd_buf[0] : 写 RAM 地址命令(0x43) * cmd_buf[1] : 数据长度(0x02) * cmd_buf[4:3] : 2个字节数据 * cmd_buf[5] : 校验字节 */ uint8_t cmd_buf[5] = { 
   0}; uint32_t tick = 0; cmd_buf[0] = 0x43; cmd_buf[1] = 0x02; cmd_buf[2] = (uint8_t)addr; /* 地址低 8 位 */ cmd_buf[3] = (uint8_t)(addr >> 8); /* 地址高 8 位 */ cmd_buf[4] = (cmd_buf[0] /* 校验字节 */ + cmd_buf[1] + cmd_buf[2] + cmd_buf[3]) ^ 0xFF; I2C_TMF8001_WriteByte(0x08, cmd_buf, 5); while (1) { 
    if (__tmf8801_status_read() == TMF8x01_OK) { 
    break; } tick ++; if (tick >= 10) { 
    printf("__tmf8801_set_ram_addr tmo!\r\n"); return TMF8x01_NK; } } return TMF8x01_OK; } / * \brief 写 RAM */ static int8_t __tmf8801_write_ram (void) { 
    /* * cmd_buf[0] : 命令(0x41) * cmd_buf[1] : 数据长度(0x10) * cmd_buf[17:2] : 16个字节数据 * cmd_buf[18] : 校验字节 */ uint8_t cmd_buf[19] = { 
   0}; uint16_t buf_length = 0; /* app_buf 总字节个数 */ uint16_t buf_line = 0; /* app_buf 行地址 */ uint32_t tick = 0; uint16_t i = 0; uint16_t j = 0; buf_length = sizeof(app_buf) / sizeof(app_buf[0]); buf_line = buf_length / 16; cmd_buf[0] = 0x41; /* 写 RAM */ cmd_buf[1] = 0x10; /* 待写数据长度:16字节 */ for (i = 0; i < buf_line; i++) { 
    /* 装载命令数据缓存区 */ for (j = 0; j < 16; j++) { 
    /* 16字节 */ cmd_buf[2+j] = app_buf[16 * i + j]; } /* 计算校验字节 */ cmd_buf[18] = 0; /* 清零校验字节 */ for (j = 0; j < 18; j++) { 
    /* 累加 */ cmd_buf[18] += cmd_buf[j]; } cmd_buf[18] ^= 0xFF; /* 异或 0xFF */ /* 写 RAM */ I2C_TMF8001_WriteByte(0x08, cmd_buf, 19); /* 读状态寄存器 */ while (1) { 
    if (__tmf8801_status_read() == TMF8x01_OK) { 
    break; } tick ++; if (tick >= 10) { 
    printf("__tmf8801_write_ram tmo!\r\n"); return TMF8x01_NK; } } } return TMF8x01_OK; } / * \brief 重映射 RAM 到地址 0 并复位 */ static int8_t __tmf8801_ram_remap_rst (void) { 
    /* * cmd_buf[0] : RAM 地址重映射并复位命令(0x11) * cmd_buf[1] : 数据长度(0x00) * cmd_buf[2] : 校验字节 */ uint8_t cmd_buf[] = { 
   0x11, 0x00, 0xEE}; uint8_t regval = 0; uint32_t tick = 0; I2C_TMF8001_WriteByte(0x08, cmd_buf, 3); while (1) { 
    /* wait CPU ready */ I2C_TMF8001_ReadByte(0xE0, &regval, 1); if (regval == 0x41) { 
    break; } tick ++; if (tick >= 10) { 
    printf("__tmf8801_ram_remap_rst tmo!\r\n"); return TMF8x01_NK; } } return TMF8x01_OK; } / * \brief TMF8801 复位 */ static int8_t __tmf8801_rst (void) { 
    uint8_t regval = 0; uint32_t tick = 0; regval = 0x81; I2C_TMF8001_WriteByte(0xE0, &regval, 1); while (1) { 
   /* wait CPU ready */ I2C_TMF8001_ReadByte(0xE0, &regval , 1); if (regval == 0x41) { 
    break; } tick ++; if (tick >= 100) { 
    printf("__tmf8801_rst tmo!\r\n"); return TMF8x01_NK; } } return TMF8x01_OK; } / * \brief 获取 TMF8801 信息 */ static int8_t __tmf8801_info_read (void) { 
    uint8_t app0_rev_num[3] = { 
   0}; uint8_t chip_rev_id = 0; uint8_t serial_num[4] = { 
   0}; uint8_t regval = 0; uint32_t tick = 0; /* APP0 主版本号 */ I2C_TMF8001_ReadByte(0x01, &app0_rev_num[0], 1); /* 次版本号和修订版本号 */ I2C_TMF8001_ReadByte(0x12, &app0_rev_num[1], 2); /* 芯片修订 ID */ I2C_TMF8001_ReadByte(0xE4, &chip_rev_id, 1); /* 序列号 */ regval = 0x47; /* 发送读序列号命令 */ I2C_TMF8001_WriteByte(0x10, &regval, 1); while (1) { 
    /* 等待序列号生成完毕 */ I2C_TMF8001_ReadByte(0x1E, &regval, 1); if (regval == 0x47) { 
    break; } tick ++; if (tick >= 10) { 
    printf("__tmf8801_info_read tmo!\r\n"); return TMF8x01_NK; } } I2C_TMF8001_ReadByte(0x28, serial_num, 4); /* 打印 */ printf("Serial Number: %02x-%02x-%02x-%02x\r\n", serial_num[0], serial_num[1], serial_num[2], serial_num[3]); printf("App0 Revision: %d.%d.%d\r\n", app0_rev_num[0], app0_rev_num[1], app0_rev_num[2]); printf("Chip Revision: %d\r\n", chip_rev_id); return TMF8x01_OK; } // int8_t tmf8801_init (void) { 
    /* TMF8801 复位 */ if (__tmf8801_rst() == TMF8x01_NK) { 
    return TMF8x01_NK; } /* 补丁下载初始化 */ if (__tmf8801_download_init() == TMF8x01_NK) { 
    return TMF8x01_NK; } /* 设置写 RAM 地址 */ if (__tmf8801_set_ram_addr(0x00) == TMF8x01_NK) { 
    return TMF8x01_NK; } /* 写 RAM */ if (__tmf8801_write_ram() == TMF8x01_NK) { 
    return TMF8x01_NK; } /* 复位 RAM */ if (__tmf8801_ram_remap_rst() == TMF8x01_NK) { 
    return TMF8x01_NK; } delay_ms(100); /* 获取 TMF8801 芯片信息 */ if (__tmf8801_info_read() == TMF8x01_NK) { 
    return TMF8x01_NK; } /* 使能检测中断 */ tmf8801_intx_enable(); return TMF8x01_OK; } // int8_t tmf8801_app0_start (app0_init_config_t *p_config) { 
    /* * cmd_data7=03 Algorithm state and factory calibration is provided * cmd_data6=23 * cmd_data5=00 No GPIO control used * cmd_data4=00 No GPIO control used * cmd_data3=00 Object detection threshold * cmd_data2=64 Repetition period in ms 64 hex = 100ms * cmd_data1=84 Number of iterations, low byte; 1 LSB=1 k * cmd_data0=03 Number of iterations, high byte; Set to 900k iterations * command =02 Set flag to perform target distance measurement with 8 * bytes of data containing where including setting of * calibration (and algorithm state) configuration. */ uint8_t cmd_buf[9] = { 
   0x00, 0xA3, 0x00, 0x00, 0x00, 0x64, 0x84, 0x03, 0x02}; uint8_t cali_ok = 0; uint8_t regval = 0; uint8_t i = 0; I2C_TMF8001_ReadByte(0xE0, &regval, 1); if (regval != 0x41) { 
   /* CPU 没准备好与主机 IIC 通信 */ return TMF8x01_NK; } /* 配置 APP0 相关参数 */ cmd_buf[0] = p_config->calibration_state_mask; cmd_buf[2] = p_config->gpio_control; cmd_buf[3] = p_config->gpio_output_control; cmd_buf[5] = p_config->repetition_period_ms; cmd_buf[6] = p_config->iterations & 0xFF; cmd_buf[7] = (p_config->iterations >> 8) & 0xFF; /* 预装载工厂校准数据或算法状态数据 */ if (cmd_buf[0] & FACTORY_CALIBRATION_PROVIDE) { 
   /* 提供了工厂校准数据 */ #if 0 if (eepromRead(CALI_STA_ADDR, &cali_ok, 1) != EE_SUCCESS) { 
    return TMF8x01_NK; } if (cali_ok == 0xAA) { 
   /* 执行过工厂校准 */ if (eepromRead(CALI_DATA_ADDR, g_cali_buf, 14) != EE_SUCCESS)/* 读取工厂校准数据 */ { 
    return TMF8x01_NK; } } #endif I2C_TMF8001_WriteByte(0x20, g_cali_buf, 14);/* 写入 14 字节校准数据 */ if (cmd_buf[0] & ALGORITHM_STATE_PROVIDE) { 
   /* 提供了算法状态数据 */ I2C_TMF8001_WriteByte(0x2E, g_state_buf, 11);/* 写入 11 字节算法状态数据 */ } } else if (cmd_buf[0] & ALGORITHM_STATE_PROVIDE) { 
   /* 提供了算法状态数据 */ I2C_TMF8001_WriteByte(0x20, g_state_buf, 11);/* 写入 11 字节算法状态数据 */ } I2C_TMF8001_WriteByte(0x08, cmd_buf, 9);/* 配置 TOF 功能并启动 */ printf("配置并启动APP0:\r\n"); /* 回显打印 */ for (i = 0; i < 9; i++) { 
    printf("%02x ", cmd_buf[i]); } printf("\r\n"); return TMF8x01_OK; } // int8_t tof_timestamp_get (uint8_t *timestamp) { 
    uint8_t status = 0; /* * 一定要从ToF_REGADDR_STATUS开始读,并判断ToF_REGADDR_CONTENTS中的值为0x55 * 否则可能读出时间戳为0!!! */ I2C_TMF8001_ReadByte(TMF8x01_REGADDR_STATUS, &status, 1); printf("TMF8x01_REGADDR_STATUS: %x\r\n", status); I2C_TMF8001_ReadByte(TMF8x01_REGADDR_CONTENTS, &status, 1); printf("TMF8x01_REGADDR_CONTENTS: %x\r\n", status); if (status != 0x55) { 
   /* 未生成结果数据 */ return TMF8x01_ENORES; } I2C_TMF8001_ReadByte(0x24, timestamp, 4); /* 读取时间戳 */ printf("timestamp: %d\r\n", *timestamp); return TMF8x01_OK; } // int8_t tmf8801_result_get (result_info_t *p_res) { 
    uint8_t result_buf[0x3A - 0x20 + 1] = { 
   0}; uint8_t regval = 0; uint8_t i = 0; I2C_TMF8001_ReadByte(TMF8x01_REGADDR_STATUS, &regval, 1); I2C_TMF8001_ReadByte(TMF8x01_REGADDR_CONTENTS, &regval, 1); if (regval != 0x55) { 
   /* 未生成结果数据 */ return TMF8x01_ENORES; } /* 读取结果数据 */ I2C_TMF8001_ReadByte(0x20, result_buf, 0x3A - 0x20 + 1); p_res->result_num = result_buf[0x20 - 0x20]; p_res->reliability = result_buf[0x21 - 0x20] & 0x3F; p_res->distance_peak = ((uint16_t)result_buf[0x23 - 0x20] << 8) + result_buf[0x22 - 0x20]; p_res->time_stamp = ((uint32_t)result_buf[0x27 - 0x20] << 24) | ((uint32_t)result_buf[0x26 - 0x20] << 16) | ((uint32_t)result_buf[0x25 - 0x20] << 8) | ((uint32_t)result_buf[0x24 - 0x20] << 0); p_res->reference_hits = ((uint32_t)result_buf[0x36 - 0x20] << 24) | ((uint32_t)result_buf[0x35 - 0x20] << 16) | ((uint32_t)result_buf[0x34 - 0x20] << 8) | ((uint32_t)result_buf[0x33 - 0x20] << 0); p_res->object_hits = ((uint32_t)result_buf[0x3A - 0x20] << 24) | ((uint32_t)result_buf[0x39 - 0x20] << 16) | ((uint32_t)result_buf[0x38 - 0x20] << 8) | ((uint32_t)result_buf[0x37 - 0x20] << 0); /* 备份算法状态数据 */ for (i = 0; i < 11; i++) { 
    g_state_buf[i] = result_buf[0x28 - 0x20 + i]; } return TMF8x01_OK; } // void tmf8801_result_display (result_info_t result) { 
    printf("Result number:%d\r\n", result.result_num); printf("Distance(mm):%d\r\n", result.distance_peak); printf("Reliability:%d\r\n", result.reliability); printf("Timestamp(100us):%d\r\n", result.time_stamp); printf("State data:%02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x\r\n", g_state_buf[0], g_state_buf[1], g_state_buf[2], g_state_buf[3], g_state_buf[4], g_state_buf[5], g_state_buf[6], g_state_buf[7], g_state_buf[8], g_state_buf[9], g_state_buf[10]); printf("Reference hits:%d\r\n", result.reference_hits); printf("Object hits:%d\r\n", result.object_hits); } // int8_t tmf8801_app0_stop (void) { 
    uint32_t tick = 0; uint8_t regval = 0xFF; I2C_TMF8001_WriteByte(TMF8x01_REGADDR_COMMAND, &regval, 1); while (1) { 
   /* wait CPU ready */ I2C_TMF8001_ReadByte(0xE0, &regval, 1); if (regval == 0x41) { 
    break; } tick ++; if (tick >= 5) { 
    /* 重新发送停止命令 */ I2C_TMF8001_WriteByte(TMF8x01_REGADDR_COMMAND, &regval, 1); } if (tick >= 10) { 
    /* 超时 */ printf("tmf8801_app0_stop err!\r\n"); return TMF8x01_NK; } } return TMF8x01_OK; } // int8_t tmf8801_factory_calibration (void) { 
    uint8_t cali_ok = 0; uint8_t regval = 0; uint32_t tick = 0; uint8_t i = 0; I2C_TMF8001_ReadByte(TMF8x01_REGADDR_ENABLE, &regval, 1); if (regval != 0x41) { 
   /* 传感器忙 */ return TMF8x01_ENOTREADY; } regval = 0x0A; I2C_TMF8001_WriteByte(TMF8x01_REGADDR_COMMAND, &regval, 1); /* 执行工厂校准命令 */ while (1) { 
    /* 等待校准数据生成完毕 */ I2C_TMF8001_ReadByte(0x1E, &regval, 1); if (regval == 0x0A) { 
    break; } tick ++; if (tick >= 10) { 
    printf("tmf8801_factory_calibration tmo!\r\n"); return TMF8x01_NK; } } /* 读取14字节的校验数据 */ I2C_TMF8001_ReadByte(0x20, g_cali_buf, 14); cali_ok = 0xAA; /* 标志已经执行过工厂校准 */ #if 0 /* 备份工厂校准数据 */ if (eepromRead(0, g_sys_para, SYSPARA_BUF_LEN) != EE_SUCCESS) { 
    return TMF8x01_NK; } for (i = 0; i < 14; i++) { 
    g_sys_para[i] = g_cali_buf[i]; } g_sys_para[CALI_STA_ADDR] = cali_ok; if (eepromWriteNByte(0, g_sys_para, SYSPARA_BUF_LEN) != EE_SUCCESS) { 
    return TMF8x01_NK; } #endif printf("工厂校准数据: "); for (i = 0; i < 14; i++) { 
    printf("0x%02x, ", g_cali_buf[i]); } printf("\r\n"); return TMF8x01_OK; } // void tmf8801_app0_get_default_config (app0_init_config_t *p_config) { 
    /* 不提供工厂校准数据和算法状态数据 */ p_config->calibration_state_mask = NO_DATA_PROVIDE; /* GPIO0, GPIO1 均作输入(复位值) */ p_config->gpio_control = GPIO0_INPUT | GPIO1_INPUT; /* 无信号输出 */ p_config->gpio_output_control = 0; /* 重复测量周期为 6ms */ p_config->repetition_period_ms = 6; /* 迭代次数 900k */ p_config->iterations = 900; } // int8_t tmf8801_app0_osc_trim (int32_t change) { 
    uint8_t regval = 0; uint8_t fuse3 = 0; uint8_t fuse6 = 0; int32_t trim_val = 0; uint32_t tick = 0; regval = 0x29; I2C_TMF8001_WriteByte(0x06, &regval, 1); regval = 0x00; /* PON = 0 */ I2C_TMF8001_WriteByte(0xE0, &regval, 1); while (1) { 
    /* 等待进入待机模式 */ I2C_TMF8001_ReadByte(0xE0, &regval, 1); { 
    if (regval == 0x00) { 
    break; } } tick ++; if (tick >= 10) { 
    printf("tmf8801_app0_osc_trim tmo!\r\n"); return TMF8x01_NK; } } I2C_TMF8001_ReadByte(0x03, &fuse3, 1); I2C_TMF8001_ReadByte(0x06, &fuse6, 1); trim_val = (((int32_t)fuse3) << 1) | ((fuse6 & (0x01 << 6)) >> 6); trim_val += change; trim_val &= 0x1FF; fuse6 &= ~(0x01 << 6); fuse6 |= ((trim_val & 0x01) << 6); fuse3 = ((trim_val >> 1) & 0xFF); I2C_TMF8001_WriteByte(0x03, &fuse3, 1); I2C_TMF8001_WriteByte(0x06, &fuse6, 1); regval = 0x01; /* PON = 1 */ I2C_TMF8001_WriteByte(0xE0, &regval, 1); while (1) { 
   /* 等待进入空闲模式 */ I2C_TMF8001_ReadByte(0xE0, &regval, 1); { 
    if (regval == 0x41) { 
    break; } } tick ++; if (tick >= 10) { 
    printf("tmf8801_app0_osc_trim tmo!\r\n"); return TMF8x01_NK; } } return TMF8x01_OK; } // void tmf8801_intx_enable (void) { 
    uint8_t regval = 0x01; I2C_TMF8001_WriteByte(0xE2, &regval, 1); } // uint8_t tmf8801_int_status_get (void) { 
    uint8_t status = 0; I2C_TMF8001_ReadByte(0xE1, &status, 1); return status; } // void tmf8801_int_status_clr (void) { 
    uint8_t regval = 0x01; I2C_TMF8001_WriteByte(0xE1, &regval, 1); } // int8_t tmf8801_handle_irq (void) { 
    uint8_t status = 0; uint32_t tick = 0; status = tmf8801_int_status_get(); if (status & 0x01) { 
    /* 发生检测中断 */ tmf8801_int_status_clr(); while (1) { 
    if (tmf8801_result_get(&g_tof_result) == TMF8x01_OK) { 
    break; } tick ++; if (tick >= 10) { 
    printf("tmf8801_result_get tmo!\r\n"); return TMF8x01_NK; } } } return TMF8x01_OK; } 

3、main函数

//有些变量是全局变量关系比较复杂,我这里就不写出来了,你们看一下TMF8801配置的流程就行了 int main(void) { 
    u8 tof_timestamp[4]; static uint32_t tof_timestamp_t1 = { 
   0}; static uint32_t tof_timestamp_t0 = { 
   0}; static uint8_t cnt = 0; app0_init_config_t config = { 
   0}; uart_init(); TIM3_Int_Init(10,36000);//5ms定时,实际测量5MS TMF8001_I2C_Init(); //初始化TMF8x01 if (tmf8801_init() == TMF8x01_NK) { 
    printf("tmf8801_init err!\r\n"); } //配置APP0 config.calibration_state_mask = FACTORY_CALIBRATION_PROVIDE;//提供了工厂校准数据 config.repetition_period_ms = 100;//重复测量周期为100ms config.iterations = 900;//迭代次数 900k if (tmf8801_app0_start(&config) == TMF8x01_NK)//配置APP0  { 
    printf("tmf8801_app0_start err!\r\n"); } while(1) { 
    if(System_Tick > 200) { 
    System_Tick = 0; tmf8801_handle_irq(); printf("num:%3d 测量距离(mm):%4d 可信度:%2d", g_tof_result.result_num, g_tof_result.distance_peak, g_tof_result.reliability); } } } 

五、测试

1、正常运行时串口打印的数据:
在这里插入图片描述
2、单片机和TMF8801通讯有问题时串口打印的数据:
在这里插入图片描述
好了,关于这款传感器的介绍就到这里,想要完整的驱动程序,可以在下面的链接下载,有stm8/stm32的驱动程序,也有立功科技的一个demo板的原理图和程序,用的是LPC824主控。如果还有什么问题可以留言给我,如果发现文章有误,请一定要指出来,谢谢!!!



程序下载链接:https://download.csdn.net/download/ShenZhen_zixian/

免责声明:本站所有文章内容,图片,视频等均是来源于用户投稿和互联网及文摘转载整编而成,不代表本站观点,不承担相关法律责任。其著作权各归其原作者或其出版社所有。如发现本站有涉嫌抄袭侵权/违法违规的内容,侵犯到您的权益,请在线联系站长,一经查实,本站将立刻删除。 本文来自网络,若有侵权,请联系删除,如若转载,请注明出处:https://haidsoft.com/132107.html

(0)
上一篇 2025-08-02 21:20
下一篇 2025-08-02 21:26

相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注微信