From a0da203b14bc6dabec9e9568c82bc524d3f7b69b Mon Sep 17 00:00:00 2001 From: Larry Finger Date: Wed, 21 Aug 2013 22:33:50 -0500 Subject: staging: r8188eu: Add files for new driver - part 8 This commit adds files hal/Hal8188EFWImg_CE.c, hal/Hal8188EPwrSeq.c, and hal/Hal8188ERateAdaptive.c. Signed-off-by: Larry Finger Signed-off-by: Greg Kroah-Hartman diff --git a/drivers/staging/rtl8188eu/hal/Hal8188EFWImg_CE.c b/drivers/staging/rtl8188eu/hal/Hal8188EFWImg_CE.c new file mode 100644 index 0000000..95759be --- /dev/null +++ b/drivers/staging/rtl8188eu/hal/Hal8188EFWImg_CE.c @@ -0,0 +1,1761 @@ +/****************************************************************************** +* +* Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. +* +* This program is free software; you can redistribute it and/or modify it +* under the terms of version 2 of the GNU General Public License as +* published by the Free Software Foundation. +* +* This program is distributed in the hope that it will be useful, but WITHOUT +* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for +* more details. +* +* You should have received a copy of the GNU General Public License along with +* this program; if not, write to the Free Software Foundation, Inc., +* 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA +* +* +******************************************************************************/ +#include "odm_precomp.h" + +const u8 Rtl8188EFwImgArray[Rtl8188EFWImgArrayLength] = { + 0xE1, 0x88, 0x10, 0x00, 0x0B, 0x00, 0x01, 0x00, + 0x01, 0x21, 0x11, 0x27, 0x30, 0x36, 0x00, 0x00, + 0x2D, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x02, 0x45, 0x4E, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xC1, 0x6F, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0xA1, 0xE6, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x02, 0x56, 0xF7, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0xC2, 0xAF, 0x80, 0xFE, 0x32, 0x12, 0x42, 0x04, + 0x85, 0xD0, 0x0B, 0x75, 0xD0, 0x08, 0xAA, 0xE0, + 0xC2, 0x8C, 0xE5, 0x8A, 0x24, 0x67, 0xF5, 0x8A, + 0xE5, 0x8C, 0x34, 0x79, 0xF5, 0x8C, 0xD2, 0x8C, + 0xEC, 0x24, 0x89, 0xF8, 0xE6, 0xBC, 0x03, 0x02, + 0x74, 0xFF, 0xC3, 0x95, 0x81, 0xB4, 0x40, 0x00, + 0x40, 0xCE, 0x79, 0x04, 0x78, 0x80, 0x16, 0xE6, + 0x08, 0x70, 0x0B, 0xC2, 0xAF, 0xE6, 0x30, 0xE1, + 0x03, 0x44, 0x18, 0xF6, 0xD2, 0xAF, 0x08, 0xD9, + 0xED, 0xEA, 0x8B, 0xD0, 0x22, 0xE5, 0x0C, 0xFF, + 0x23, 0x24, 0x81, 0xF8, 0x0F, 0x08, 0x08, 0xBF, + 0x04, 0x04, 0x7F, 0x00, 0x78, 0x81, 0xE6, 0x30, + 0xE4, 0xF2, 0x00, 0xE5, 0x0C, 0xC3, 0x9F, 0x50, + 0x20, 0x05, 0x0C, 0x74, 0x88, 0x25, 0x0C, 0xF8, + 0xE6, 0xFD, 0xA6, 0x81, 0x08, 0xE6, 0xAE, 0x0C, + 0xBE, 0x03, 0x02, 0x74, 0xFF, 0xCD, 0xF8, 0xE8, + 0x6D, 0x60, 0xE0, 0x08, 0xE6, 0xC0, 0xE0, 0x80, + 0xF6, 0xE5, 0x0C, 0xD3, 0x9F, 0x40, 0x27, 0xE5, + 0x0C, 0x24, 0x89, 0xF8, 0xE6, 0xAE, 0x0C, 0xBE, + 0x03, 0x02, 0x74, 0xFF, 0xFD, 0x18, 0xE6, 0xCD, + 0xF8, 0xE5, 0x81, 0x6D, 0x60, 0x06, 0xD0, 0xE0, + 0xF6, 0x18, 0x80, 0xF5, 0xE5, 0x0C, 0x24, 0x88, + 0xC8, 0xF6, 0x15, 0x0C, 0x80, 0xD3, 0xE5, 0x0C, + 0x23, 0x24, 0x81, 0xF8, 0x7F, 0x04, 0xC2, 0xAF, + 0xE6, 0x30, 0xE0, 0x03, 0x10, 0xE2, 0x0C, 0x7F, + 0x00, 0x30, 0xE1, 0x07, 0x30, 0xE3, 0x04, 0x7F, + 0x08, 0x54, 0xF4, 0x54, 0x7C, 0xC6, 0xD2, 0xAF, + 0x54, 0x80, 0x42, 0x07, 0x22, 0x78, 0x88, 0xA6, + 0x81, 0x74, 0x03, 0x60, 0x06, 0xFF, 0x08, 0x76, + 0xFF, 0xDF, 0xFB, 0x7F, 0x04, 0xE4, 0x78, 0x80, + 0xF6, 0x08, 0xF6, 0x08, 0xDF, 0xFA, 0x78, 0x81, + 0x76, 0x30, 0x90, 0x45, 0xDE, 0x74, 0x01, 0x93, + 0xC0, 0xE0, 0xE4, 0x93, 0xC0, 0xE0, 0x43, 0x89, + 0x01, 0x75, 0x8A, 0x60, 0x75, 0x8C, 0x79, 0xD2, + 0x8C, 0xD2, 0xAF, 0x22, 0x03, 0xEF, 0xD3, 0x94, + 0x03, 0x40, 0x03, 0x7F, 0xFF, 0x22, 0x74, 0x81, + 0x2F, 0x2F, 0xF8, 0xE6, 0x20, 0xE5, 0xF4, 0xC2, + 0xAF, 0xE6, 0x44, 0x30, 0xF6, 0xD2, 0xAF, 0xAE, + 0x0C, 0xEE, 0xC3, 0x9F, 0x50, 0x21, 0x0E, 0x74, + 0x88, 0x2E, 0xF8, 0xE6, 0xF9, 0x08, 0xE6, 0x18, + 0xBE, 0x03, 0x02, 0x74, 0xFF, 0xFD, 0xED, 0x69, + 0x60, 0x09, 0x09, 0xE7, 0x19, 0x19, 0xF7, 0x09, + 0x09, 0x80, 0xF3, 0x16, 0x16, 0x80, 0xDA, 0xEE, + 0xD3, 0x9F, 0x40, 0x04, 0x05, 0x81, 0x05, 0x81, + 0xEE, 0xD3, 0x9F, 0x40, 0x22, 0x74, 0x88, 0x2E, + 0xF8, 0x08, 0xE6, 0xF9, 0xEE, 0xB5, 0x0C, 0x02, + 0xA9, 0x81, 0x18, 0x06, 0x06, 0xE6, 0xFD, 0xED, + 0x69, 0x60, 0x09, 0x19, 0x19, 0xE7, 0x09, 0x09, + 0xF7, 0x19, 0x80, 0xF3, 0x1E, 0x80, 0xD9, 0xEF, + 0x24, 0x88, 0xF8, 0xE6, 0x04, 0xF8, 0xEF, 0x2F, + 0x04, 0x90, 0x45, 0xDE, 0x93, 0xF6, 0x08, 0xEF, + 0x2F, 0x93, 0xF6, 0x7F, 0x00, 0x22, 0xEF, 0xD3, + 0x94, 0x03, 0x40, 0x03, 0x7F, 0xFF, 0x22, 0xEF, + 0x23, 0x24, 0x81, 0xF8, 0xE6, 0x30, 0xE5, 0xF4, + 0xC2, 0xAF, 0xE6, 0x54, 0x8C, 0xF6, 0xD2, 0xAF, + 0xE5, 0x0C, 0xB5, 0x07, 0x0A, 0x74, 0x88, 0x2F, + 0xF8, 0xE6, 0xF5, 0x81, 0x02, 0x42, 0x4D, 0x50, + 0x2E, 0x74, 0x89, 0x2F, 0xF8, 0xE6, 0xBF, 0x03, + 0x02, 0x74, 0xFF, 0xFD, 0x18, 0xE6, 0xF9, 0x74, + 0x88, 0x2F, 0xF8, 0xFB, 0xE6, 0xFC, 0xE9, 0x6C, + 0x60, 0x08, 0xA8, 0x05, 0xE7, 0xF6, 0x1D, 0x19, + 0x80, 0xF4, 0xA8, 0x03, 0xA6, 0x05, 0x1F, 0xE5, + 0x0C, 0xB5, 0x07, 0xE3, 0x7F, 0x00, 0x22, 0x74, + 0x89, 0x2F, 0xF8, 0xE6, 0xFD, 0x18, 0x86, 0x01, + 0x0F, 0x74, 0x88, 0x2F, 0xF8, 0xA6, 0x01, 0x08, + 0x86, 0x04, 0xE5, 0x0C, 0xB5, 0x07, 0x02, 0xAC, + 0x81, 0xED, 0x6C, 0x60, 0x08, 0x0D, 0x09, 0xA8, + 0x05, 0xE6, 0xF7, 0x80, 0xF4, 0xE5, 0x0C, 0xB5, + 0x07, 0xDE, 0x89, 0x81, 0x7F, 0x00, 0x22, 0xEF, + 0xD3, 0x94, 0x03, 0x40, 0x03, 0x7F, 0xFF, 0x22, + 0xEF, 0x23, 0x24, 0x81, 0xF8, 0xC2, 0xAF, 0xE6, + 0x30, 0xE5, 0x05, 0x30, 0xE0, 0x02, 0xD2, 0xE4, + 0xD2, 0xE2, 0xC6, 0xD2, 0xAF, 0x7F, 0x00, 0x30, + 0xE2, 0x01, 0x0F, 0x02, 0x42, 0x4C, 0x8F, 0xF0, + 0xE4, 0xFF, 0xFE, 0xE5, 0x0C, 0x23, 0x24, 0x80, + 0xF8, 0xC2, 0xA9, 0x30, 0xF7, 0x0D, 0x7F, 0x08, + 0xE6, 0x60, 0x0B, 0x2D, 0xF6, 0x60, 0x30, 0x50, + 0x2E, 0x80, 0x07, 0x30, 0xF1, 0x06, 0xED, 0xF6, + 0x60, 0x25, 0x7E, 0x02, 0x08, 0x30, 0xF0, 0x10, + 0xC2, 0xAF, 0xE6, 0x10, 0xE7, 0x23, 0x0E, 0x30, + 0xE2, 0x0C, 0xD2, 0xAF, 0x7F, 0x04, 0x80, 0x12, + 0xC2, 0xAF, 0xE6, 0x10, 0xE7, 0x13, 0x54, 0xEC, + 0x4E, 0xF6, 0xD2, 0xAF, 0x02, 0x42, 0x4D, 0x7F, + 0x08, 0x08, 0xEF, 0x44, 0x83, 0xF4, 0xC2, 0xAF, + 0x56, 0xC6, 0xD2, 0xAF, 0x54, 0x80, 0x4F, 0xFF, + 0x22, 0xC5, 0xF0, 0xF8, 0xA3, 0xE0, 0x28, 0xF0, + 0xC5, 0xF0, 0xF8, 0xE5, 0x82, 0x15, 0x82, 0x70, + 0x02, 0x15, 0x83, 0xE0, 0x38, 0xF0, 0x22, 0xEF, + 0x5B, 0xFF, 0xEE, 0x5A, 0xFE, 0xED, 0x59, 0xFD, + 0xEC, 0x58, 0xFC, 0x22, 0xEF, 0x4B, 0xFF, 0xEE, + 0x4A, 0xFE, 0xED, 0x49, 0xFD, 0xEC, 0x48, 0xFC, + 0x22, 0xE0, 0xFC, 0xA3, 0xE0, 0xFD, 0xA3, 0xE0, + 0xFE, 0xA3, 0xE0, 0xFF, 0x22, 0xE2, 0xFC, 0x08, + 0xE2, 0xFD, 0x08, 0xE2, 0xFE, 0x08, 0xE2, 0xFF, + 0x22, 0xE2, 0xFB, 0x08, 0xE2, 0xF9, 0x08, 0xE2, + 0xFA, 0x08, 0xE2, 0xCB, 0xF8, 0x22, 0xEC, 0xF2, + 0x08, 0xED, 0xF2, 0x08, 0xEE, 0xF2, 0x08, 0xEF, + 0xF2, 0x22, 0xA4, 0x25, 0x82, 0xF5, 0x82, 0xE5, + 0xF0, 0x35, 0x83, 0xF5, 0x83, 0x22, 0xE0, 0xFB, + 0xA3, 0xE0, 0xFA, 0xA3, 0xE0, 0xF9, 0x22, 0xEB, + 0xF0, 0xA3, 0xEA, 0xF0, 0xA3, 0xE9, 0xF0, 0x22, + 0xD0, 0x83, 0xD0, 0x82, 0xF8, 0xE4, 0x93, 0x70, + 0x12, 0x74, 0x01, 0x93, 0x70, 0x0D, 0xA3, 0xA3, + 0x93, 0xF8, 0x74, 0x01, 0x93, 0xF5, 0x82, 0x88, + 0x83, 0xE4, 0x73, 0x74, 0x02, 0x93, 0x68, 0x60, + 0xEF, 0xA3, 0xA3, 0xA3, 0x80, 0xDF, 0x02, 0x45, + 0x8C, 0x02, 0x42, 0xDD, 0xE4, 0x93, 0xA3, 0xF8, + 0xE4, 0x93, 0xA3, 0x40, 0x03, 0xF6, 0x80, 0x01, + 0xF2, 0x08, 0xDF, 0xF4, 0x80, 0x29, 0xE4, 0x93, + 0xA3, 0xF8, 0x54, 0x07, 0x24, 0x0C, 0xC8, 0xC3, + 0x33, 0xC4, 0x54, 0x0F, 0x44, 0x20, 0xC8, 0x83, + 0x40, 0x04, 0xF4, 0x56, 0x80, 0x01, 0x46, 0xF6, + 0xDF, 0xE4, 0x80, 0x0B, 0x01, 0x02, 0x04, 0x08, + 0x10, 0x20, 0x40, 0x80, 0x90, 0x45, 0xD1, 0xE4, + 0x7E, 0x01, 0x93, 0x60, 0xBC, 0xA3, 0xFF, 0x54, + 0x3F, 0x30, 0xE5, 0x09, 0x54, 0x1F, 0xFE, 0xE4, + 0x93, 0xA3, 0x60, 0x01, 0x0E, 0xCF, 0x54, 0xC0, + 0x25, 0xE0, 0x60, 0xA8, 0x40, 0xB8, 0xE4, 0x93, + 0xA3, 0xFA, 0xE4, 0x93, 0xA3, 0xF8, 0xE4, 0x93, + 0xA3, 0xC8, 0xC5, 0x82, 0xC8, 0xCA, 0xC5, 0x83, + 0xCA, 0xF0, 0xA3, 0xC8, 0xC5, 0x82, 0xC8, 0xCA, + 0xC5, 0x83, 0xCA, 0xDF, 0xE9, 0xDE, 0xE7, 0x80, + 0xBE, 0x00, 0x41, 0x82, 0x09, 0x00, 0x41, 0x82, + 0x0A, 0x00, 0x41, 0x82, 0x17, 0x00, 0x59, 0xE2, + 0x5C, 0x24, 0x5E, 0x5D, 0x5F, 0xA1, 0xC0, 0xE0, + 0xC0, 0xF0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, 0xD0, + 0x75, 0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01, 0xC0, + 0x02, 0xC0, 0x03, 0xC0, 0x04, 0xC0, 0x05, 0xC0, + 0x06, 0xC0, 0x07, 0x90, 0x01, 0xC4, 0x74, 0xE6, + 0xF0, 0x74, 0x45, 0xA3, 0xF0, 0xD1, 0x35, 0x74, + 0xE6, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x45, + 0xA3, 0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05, + 0xD0, 0x04, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, + 0xD0, 0x00, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, + 0xD0, 0xF0, 0xD0, 0xE0, 0x32, 0x90, 0x00, 0x54, + 0xE0, 0x55, 0x35, 0xF5, 0x39, 0xA3, 0xE0, 0x55, + 0x36, 0xF5, 0x3A, 0xA3, 0xE0, 0x55, 0x37, 0xF5, + 0x3B, 0xA3, 0xE0, 0x55, 0x38, 0xF5, 0x3C, 0xAD, + 0x39, 0x7F, 0x54, 0x12, 0x32, 0x1E, 0xAD, 0x3A, + 0x7F, 0x55, 0x12, 0x32, 0x1E, 0xAD, 0x3B, 0x7F, + 0x56, 0x12, 0x32, 0x1E, 0xAD, 0x3C, 0x7F, 0x57, + 0x12, 0x32, 0x1E, 0x53, 0x91, 0xEF, 0x22, 0xC0, + 0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, + 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01, + 0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04, 0xC0, 0x05, + 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x01, 0xC4, 0x74, + 0x6F, 0xF0, 0x74, 0x46, 0xA3, 0xF0, 0x12, 0x6C, + 0x78, 0xE5, 0x41, 0x30, 0xE4, 0x04, 0x7F, 0x02, + 0x91, 0x27, 0xE5, 0x41, 0x30, 0xE6, 0x03, 0x12, + 0x6C, 0xD5, 0xE5, 0x43, 0x30, 0xE0, 0x03, 0x12, + 0x51, 0xC2, 0xE5, 0x43, 0x30, 0xE1, 0x03, 0x12, + 0x4D, 0x0C, 0xE5, 0x43, 0x30, 0xE2, 0x03, 0x12, + 0x4C, 0xC1, 0xE5, 0x43, 0x30, 0xE3, 0x03, 0x12, + 0x6C, 0xE2, 0xE5, 0x43, 0x30, 0xE4, 0x03, 0x12, + 0x6D, 0x04, 0xE5, 0x43, 0x30, 0xE5, 0x03, 0x12, + 0x6D, 0x33, 0xE5, 0x43, 0x30, 0xE6, 0x02, 0xF1, + 0x0F, 0xE5, 0x44, 0x30, 0xE1, 0x03, 0x12, 0x51, + 0x7F, 0x74, 0x6F, 0x04, 0x90, 0x01, 0xC4, 0xF0, + 0x74, 0x46, 0xA3, 0xF0, 0xD0, 0x07, 0xD0, 0x06, + 0xD0, 0x05, 0xD0, 0x04, 0xD0, 0x03, 0xD0, 0x02, + 0xD0, 0x01, 0xD0, 0x00, 0xD0, 0xD0, 0xD0, 0x82, + 0xD0, 0x83, 0xD0, 0xF0, 0xD0, 0xE0, 0x32, 0x90, + 0x80, 0xDE, 0xE0, 0xB4, 0x01, 0x13, 0x90, 0x81, + 0x27, 0xE0, 0x60, 0x0D, 0x90, 0x81, 0x2B, 0xE0, + 0x54, 0xFE, 0xF0, 0x54, 0x07, 0x70, 0x02, 0xF1, + 0x2A, 0x22, 0x90, 0x81, 0x1F, 0xE0, 0x90, 0x81, + 0x29, 0x30, 0xE0, 0x05, 0xE0, 0xFF, 0x02, 0x74, + 0x8F, 0xE0, 0xFF, 0x7D, 0x01, 0xD3, 0x10, 0xAF, + 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x82, 0x13, 0xED, + 0xF0, 0x90, 0x81, 0x2A, 0xE0, 0x90, 0x82, 0x14, + 0xF0, 0x90, 0x81, 0x24, 0xE0, 0xFE, 0xC4, 0x13, + 0x13, 0x54, 0x03, 0x30, 0xE0, 0x03, 0x02, 0x48, + 0xA0, 0xEE, 0xC4, 0x13, 0x13, 0x13, 0x54, 0x01, + 0x30, 0xE0, 0x03, 0x02, 0x48, 0xA0, 0x90, 0x82, + 0x14, 0xE0, 0xFE, 0x6F, 0x70, 0x03, 0x02, 0x48, + 0xA0, 0xEF, 0x70, 0x03, 0x02, 0x48, 0x17, 0x24, + 0xFE, 0x70, 0x03, 0x02, 0x48, 0x50, 0x24, 0xFE, + 0x60, 0x51, 0x24, 0xFC, 0x70, 0x03, 0x02, 0x48, + 0x8B, 0x24, 0xFC, 0x60, 0x03, 0x02, 0x48, 0xA0, + 0xEE, 0xB4, 0x0E, 0x03, 0x12, 0x49, 0x5E, 0x90, + 0x82, 0x14, 0xE0, 0x70, 0x05, 0x7F, 0x01, 0x12, + 0x49, 0x93, 0x90, 0x82, 0x14, 0xE0, 0xB4, 0x06, + 0x03, 0x12, 0x49, 0x34, 0x90, 0x82, 0x14, 0xE0, + 0xB4, 0x04, 0x0F, 0x90, 0x82, 0x13, 0xE0, 0xFF, + 0x60, 0x05, 0x12, 0x73, 0x75, 0x80, 0x03, 0x12, + 0x66, 0x26, 0x90, 0x82, 0x14, 0xE0, 0x64, 0x08, + 0x60, 0x03, 0x02, 0x48, 0xA0, 0x12, 0x73, 0xD3, + 0x02, 0x48, 0xA0, 0x90, 0x82, 0x14, 0xE0, 0x70, + 0x05, 0x7F, 0x01, 0x12, 0x49, 0x93, 0x90, 0x82, + 0x14, 0xE0, 0xB4, 0x06, 0x03, 0x12, 0x49, 0x34, + 0x90, 0x82, 0x14, 0xE0, 0xB4, 0x0E, 0x09, 0x12, + 0x48, 0xA5, 0xBF, 0x01, 0x03, 0x12, 0x49, 0x5E, + 0x90, 0x82, 0x14, 0xE0, 0x64, 0x0C, 0x60, 0x02, + 0x01, 0xA0, 0x11, 0xA5, 0xEF, 0x64, 0x01, 0x60, + 0x02, 0x01, 0xA0, 0x11, 0xFA, 0x01, 0xA0, 0x90, + 0x82, 0x14, 0xE0, 0xB4, 0x0E, 0x07, 0x11, 0xA5, + 0xBF, 0x01, 0x02, 0x31, 0x5E, 0x90, 0x82, 0x14, + 0xE0, 0xB4, 0x06, 0x02, 0x31, 0x34, 0x90, 0x82, + 0x14, 0xE0, 0xB4, 0x0C, 0x07, 0x11, 0xA5, 0xBF, + 0x01, 0x02, 0x11, 0xFA, 0x90, 0x82, 0x14, 0xE0, + 0x64, 0x04, 0x70, 0x5C, 0x12, 0x72, 0xF5, 0xEF, + 0x64, 0x01, 0x70, 0x54, 0x31, 0xBE, 0x80, 0x50, + 0x90, 0x82, 0x14, 0xE0, 0xB4, 0x0E, 0x07, 0x11, + 0xA5, 0xBF, 0x01, 0x02, 0x31, 0x5E, 0x90, 0x82, + 0x14, 0xE0, 0xB4, 0x06, 0x02, 0x31, 0x34, 0x90, + 0x82, 0x14, 0xE0, 0xB4, 0x0C, 0x07, 0x11, 0xA5, + 0xBF, 0x01, 0x02, 0x11, 0xFA, 0x90, 0x82, 0x14, + 0xE0, 0x70, 0x04, 0x7F, 0x01, 0x31, 0x93, 0x90, + 0x82, 0x14, 0xE0, 0xB4, 0x04, 0x1A, 0x12, 0x73, + 0xBB, 0x80, 0x15, 0x90, 0x82, 0x14, 0xE0, 0xB4, + 0x0C, 0x0E, 0x90, 0x81, 0x25, 0xE0, 0xFF, 0x13, + 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x02, 0x31, 0xB1, + 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD1, 0xAB, 0xEF, + 0x64, 0x01, 0x60, 0x08, 0x90, 0x01, 0xB8, 0x74, + 0x01, 0xF0, 0x80, 0x3D, 0x90, 0x81, 0x24, 0xE0, + 0xFF, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x30, 0xE0, + 0x08, 0x90, 0x01, 0xB8, 0x74, 0x02, 0xF0, 0x80, + 0x28, 0xEF, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x08, + 0x90, 0x01, 0xB8, 0x74, 0x04, 0xF0, 0x80, 0x19, + 0x90, 0x81, 0x29, 0xE0, 0xD3, 0x94, 0x04, 0x40, + 0x08, 0x90, 0x01, 0xB8, 0x74, 0x08, 0xF0, 0x80, + 0x08, 0x90, 0x01, 0xB8, 0xE4, 0xF0, 0x7F, 0x01, + 0x22, 0x90, 0x01, 0xB9, 0x74, 0x02, 0xF0, 0x7F, + 0x00, 0x22, 0x90, 0x80, 0xDE, 0xE0, 0x64, 0x01, + 0x70, 0x31, 0x90, 0x81, 0x25, 0xE0, 0x54, 0xFD, + 0xF0, 0x90, 0x05, 0x22, 0x74, 0x6F, 0xF0, 0x7F, + 0x01, 0xF1, 0x0D, 0xBF, 0x01, 0x12, 0x90, 0x81, + 0x24, 0xE0, 0x44, 0x80, 0xF0, 0x90, 0x81, 0x2A, + 0x74, 0x0E, 0xF0, 0x90, 0x81, 0x23, 0xF0, 0x22, + 0x90, 0x01, 0xB9, 0x74, 0x01, 0xF0, 0x90, 0x01, + 0xB8, 0x04, 0xF0, 0x22, 0x90, 0x81, 0x25, 0xE0, + 0x90, 0x06, 0x04, 0x20, 0xE0, 0x0C, 0xE0, 0x44, + 0x40, 0xF0, 0x90, 0x81, 0x2A, 0x74, 0x04, 0xF0, + 0x80, 0x0E, 0xE0, 0x54, 0x7F, 0xF0, 0x90, 0x81, + 0x2A, 0x74, 0x0C, 0xF0, 0x90, 0x81, 0x23, 0xF0, + 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x22, 0x90, 0x81, + 0x25, 0xE0, 0xC3, 0x13, 0x20, 0xE0, 0x08, 0x90, + 0x81, 0x2A, 0x74, 0x0C, 0xF0, 0x80, 0x1E, 0x90, + 0x06, 0x04, 0xE0, 0x44, 0x40, 0xF0, 0xE0, 0x44, + 0x80, 0xF0, 0x90, 0x81, 0x2A, 0x74, 0x04, 0xF0, + 0x90, 0x05, 0x27, 0xE0, 0x44, 0x80, 0xF0, 0x90, + 0x81, 0x23, 0x74, 0x04, 0xF0, 0x90, 0x05, 0x22, + 0xE4, 0xF0, 0x22, 0x90, 0x82, 0x15, 0xEF, 0xF0, + 0x12, 0x54, 0x65, 0x90, 0x82, 0x15, 0xE0, 0x60, + 0x05, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x81, + 0x2A, 0x74, 0x04, 0xF0, 0x90, 0x81, 0x23, 0xF0, + 0x22, 0x31, 0xE3, 0x90, 0x81, 0x2A, 0x74, 0x08, + 0xF0, 0x90, 0x81, 0x23, 0xF0, 0x22, 0x90, 0x05, + 0x22, 0x74, 0xFF, 0xF0, 0xF1, 0x3A, 0x90, 0x01, + 0x37, 0x74, 0x02, 0xF0, 0xFD, 0x7F, 0x03, 0x51, + 0x57, 0x31, 0xE3, 0xE4, 0x90, 0x81, 0x2A, 0xF0, + 0x90, 0x81, 0x23, 0xF0, 0x22, 0x90, 0x05, 0x22, + 0x74, 0xFF, 0xF0, 0xF1, 0x3A, 0x90, 0x85, 0xBB, + 0x12, 0x20, 0xDA, 0xCC, 0xF0, 0x00, 0xC0, 0x7F, + 0x8C, 0x7E, 0x08, 0x12, 0x2E, 0xA2, 0x90, 0x85, + 0xBB, 0x12, 0x20, 0xDA, 0x00, 0x00, 0x00, 0x14, + 0x7F, 0x70, 0x7E, 0x0E, 0x12, 0x2E, 0xA2, 0x90, + 0x81, 0xF9, 0x12, 0x20, 0xDA, 0x00, 0x00, 0x00, + 0x00, 0xE4, 0xFD, 0xFF, 0x12, 0x55, 0x1C, 0x7F, + 0x7C, 0x7E, 0x08, 0x12, 0x2D, 0x5C, 0xEC, 0x44, + 0x80, 0xFC, 0x90, 0x82, 0x05, 0x12, 0x20, 0xCE, + 0x90, 0x82, 0x05, 0x12, 0x44, 0xD9, 0x90, 0x85, + 0xBB, 0x12, 0x20, 0xCE, 0x7F, 0x7C, 0x7E, 0x08, + 0x12, 0x2E, 0xA2, 0x90, 0x01, 0x00, 0x74, 0x3F, + 0xF0, 0xA3, 0xE0, 0x54, 0xFD, 0xF0, 0x90, 0x05, + 0x53, 0xE0, 0x44, 0x20, 0xF0, 0x22, 0x90, 0x01, + 0x34, 0x74, 0x40, 0xF0, 0xFD, 0xE4, 0xFF, 0x74, + 0x3D, 0x2F, 0xF8, 0xE6, 0x4D, 0xFE, 0xF6, 0x74, + 0x30, 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x01, 0xF5, + 0x83, 0xEE, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, + 0xC3, 0xC0, 0xD0, 0xE4, 0x90, 0x81, 0xCB, 0xF0, + 0x12, 0x1F, 0xA4, 0xFF, 0x54, 0x01, 0xFE, 0x90, + 0x81, 0x1F, 0xE0, 0x54, 0xFE, 0x4E, 0xFE, 0xF0, + 0xEF, 0x54, 0x02, 0xFF, 0xEE, 0x54, 0xFD, 0x4F, + 0xFF, 0xF0, 0x12, 0x1F, 0xA4, 0xFE, 0x54, 0x04, + 0xFD, 0xEF, 0x54, 0xFB, 0x4D, 0xFF, 0x90, 0x81, + 0x1F, 0xF0, 0xEE, 0x54, 0x08, 0xFE, 0xEF, 0x54, + 0xF7, 0x4E, 0xFF, 0xF0, 0x12, 0x1F, 0xA4, 0xFE, + 0x54, 0x10, 0xFD, 0xEF, 0x54, 0xEF, 0x4D, 0xFF, + 0x90, 0x81, 0x1F, 0xF0, 0xEE, 0x54, 0x20, 0xFE, + 0xEF, 0x54, 0xDF, 0x4E, 0xF0, 0x12, 0x1F, 0xA4, + 0xC3, 0x13, 0x20, 0xE0, 0x02, 0x61, 0x5E, 0x90, + 0x81, 0x1F, 0xE0, 0xFF, 0x30, 0xE0, 0x6D, 0x90, + 0x81, 0xCB, 0x74, 0x21, 0xF0, 0xEF, 0x13, 0x13, + 0x54, 0x3F, 0x30, 0xE0, 0x0B, 0x51, 0x4E, 0x90, + 0x81, 0xCB, 0xE0, 0x44, 0x08, 0xF0, 0x80, 0x0C, + 0xE4, 0x90, 0x81, 0x20, 0xF0, 0xA3, 0xF0, 0x7D, + 0x40, 0xFF, 0x91, 0x26, 0x90, 0x81, 0x1F, 0xE0, + 0xFD, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x30, 0xE0, + 0x07, 0x90, 0x81, 0xCB, 0xE0, 0x44, 0x12, 0xF0, + 0xED, 0xC4, 0x54, 0x0F, 0x30, 0xE0, 0x07, 0x90, + 0x81, 0xCB, 0xE0, 0x44, 0x14, 0xF0, 0x90, 0x81, + 0x1F, 0xE0, 0xC4, 0x13, 0x54, 0x07, 0x30, 0xE0, + 0x07, 0x90, 0x81, 0xCB, 0xE0, 0x44, 0x80, 0xF0, + 0x90, 0x81, 0xCB, 0xE0, 0x90, 0x05, 0x27, 0xF0, + 0x90, 0x81, 0x22, 0xE0, 0x60, 0x02, 0x81, 0x17, + 0x7F, 0x01, 0x80, 0x15, 0x90, 0x81, 0xCB, 0x74, + 0x01, 0xF0, 0x90, 0x05, 0x27, 0xF0, 0x90, 0x81, + 0x22, 0xE0, 0x64, 0x04, 0x60, 0x02, 0x81, 0x17, + 0xFF, 0x12, 0x53, 0x0E, 0x81, 0x17, 0x90, 0x81, + 0x1F, 0xE0, 0xFF, 0x20, 0xE0, 0x02, 0x61, 0xE7, + 0x90, 0x81, 0xCB, 0x74, 0x31, 0xF0, 0xEF, 0x13, + 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x0B, 0x51, 0x4E, + 0x90, 0x81, 0xCB, 0xE0, 0x44, 0x08, 0xF0, 0x80, + 0x06, 0x7D, 0x40, 0xE4, 0xFF, 0x91, 0x26, 0x90, + 0x81, 0x1F, 0xE0, 0xFD, 0x13, 0x13, 0x13, 0x54, + 0x1F, 0x30, 0xE0, 0x07, 0x90, 0x81, 0xCB, 0xE0, + 0x44, 0x02, 0xF0, 0xED, 0xC4, 0x54, 0x0F, 0x30, + 0xE0, 0x07, 0x90, 0x81, 0xCB, 0xE0, 0x44, 0x04, + 0xF0, 0x90, 0x81, 0xCB, 0xE0, 0x90, 0x05, 0x27, + 0xF0, 0x90, 0x81, 0x23, 0xE0, 0x64, 0x02, 0x70, + 0x1D, 0xFD, 0x7F, 0x04, 0x12, 0x47, 0x3D, 0x12, + 0x51, 0x73, 0xBF, 0x01, 0x09, 0x90, 0x81, 0x29, + 0xE0, 0xFF, 0x7D, 0x01, 0x80, 0x03, 0xE4, 0xFD, + 0xFF, 0x12, 0x47, 0x3D, 0x80, 0x41, 0x90, 0x81, + 0x2A, 0xE0, 0x90, 0x81, 0x23, 0xF0, 0x90, 0x05, + 0x27, 0xE0, 0x44, 0x40, 0xF0, 0x80, 0x30, 0x90, + 0x81, 0xCB, 0x74, 0x01, 0xF0, 0x90, 0x05, 0x27, + 0xF0, 0x90, 0x81, 0x23, 0xE0, 0xB4, 0x02, 0x06, + 0x7D, 0x01, 0x7F, 0x04, 0x80, 0x0B, 0x90, 0x81, + 0x23, 0xE0, 0xB4, 0x08, 0x07, 0x7D, 0x01, 0x7F, + 0x0C, 0x12, 0x47, 0x3D, 0xD1, 0x34, 0x90, 0x81, + 0x29, 0x12, 0x47, 0x39, 0x12, 0x5A, 0xA7, 0xD0, + 0xD0, 0x92, 0xAF, 0x22, 0x7D, 0x02, 0x7F, 0x02, + 0x91, 0x26, 0x7D, 0x01, 0x7F, 0x02, 0x74, 0x3D, + 0x2F, 0xF8, 0xE6, 0xFE, 0xED, 0xF4, 0x5E, 0xFE, + 0xF6, 0x74, 0x30, 0x2F, 0xF5, 0x82, 0xE4, 0x34, + 0x01, 0xF5, 0x83, 0xEE, 0xF0, 0x22, 0xEF, 0x70, + 0x37, 0x7D, 0x78, 0x7F, 0x02, 0x91, 0x26, 0x7D, + 0x02, 0x7F, 0x03, 0x91, 0x26, 0x7D, 0xC8, 0x7F, + 0x02, 0x12, 0x71, 0x8F, 0x90, 0x01, 0x57, 0xE4, + 0xF0, 0x90, 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x7D, + 0x01, 0x7F, 0x0C, 0x12, 0x47, 0x3D, 0x90, 0x81, + 0x24, 0xE0, 0x54, 0xF7, 0xF0, 0x54, 0xEF, 0xF0, + 0x90, 0x06, 0x0A, 0xE0, 0x54, 0xF8, 0xF0, 0x22, + 0x90, 0x01, 0x36, 0x74, 0x78, 0xF0, 0xA3, 0x74, + 0x02, 0xF0, 0x7D, 0x78, 0xFF, 0x51, 0x57, 0x7D, + 0x02, 0x7F, 0x03, 0x51, 0x57, 0x90, 0x06, 0x0A, + 0xE0, 0x44, 0x07, 0xF0, 0x90, 0x81, 0x32, 0xA3, + 0xE0, 0x90, 0x05, 0x58, 0xF0, 0x90, 0x80, 0xDE, + 0xE0, 0xB4, 0x01, 0x15, 0x90, 0x81, 0x25, 0xE0, + 0x54, 0xFB, 0xF0, 0x90, 0x81, 0x2A, 0xE0, 0x20, + 0xE2, 0x0E, 0x7D, 0x01, 0x7F, 0x04, 0x02, 0x47, + 0x3D, 0x90, 0x81, 0x25, 0xE0, 0x44, 0x04, 0xF0, + 0x22, 0x90, 0x81, 0x1F, 0xE0, 0xFF, 0x30, 0xE0, + 0x08, 0x90, 0x81, 0x23, 0xE0, 0x64, 0x02, 0x60, + 0x3A, 0x90, 0x81, 0x27, 0xE0, 0x70, 0x04, 0xEF, + 0x30, 0xE0, 0x0A, 0x90, 0x81, 0x2A, 0xE0, 0x64, + 0x02, 0x60, 0x28, 0xB1, 0x83, 0x90, 0x81, 0x25, + 0xE0, 0x13, 0x13, 0x13, 0x54, 0x1F, 0x30, 0xE0, + 0x14, 0x90, 0x81, 0x2D, 0xE0, 0xFF, 0xA3, 0xE0, + 0x6F, 0x70, 0x0A, 0xF1, 0xCD, 0x91, 0x1C, 0x90, + 0x81, 0x2E, 0xE0, 0x14, 0xF0, 0x90, 0x01, 0xE6, + 0xE0, 0x04, 0xF0, 0x22, 0x90, 0x81, 0x1F, 0xE0, + 0x30, 0xE0, 0x06, 0x90, 0x81, 0x21, 0x74, 0x01, + 0xF0, 0x90, 0x81, 0x27, 0xE0, 0x60, 0x45, 0x90, + 0x81, 0x25, 0xE0, 0xFF, 0x13, 0x13, 0x13, 0x54, + 0x1F, 0x30, 0xE0, 0x12, 0x90, 0x01, 0x3B, 0xE0, + 0x30, 0xE4, 0x0B, 0x91, 0x1C, 0x90, 0x81, 0x2D, + 0xE0, 0x14, 0x90, 0x05, 0x73, 0xF0, 0x90, 0x82, + 0x0B, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x44, 0xA9, + 0xC3, 0x90, 0x82, 0x0C, 0xE0, 0x94, 0x80, 0x90, + 0x82, 0x0B, 0xE0, 0x64, 0x80, 0x94, 0x80, 0x40, + 0x0B, 0x90, 0x01, 0x98, 0xE0, 0x54, 0xFE, 0xF0, + 0xE0, 0x44, 0x01, 0xF0, 0x12, 0x75, 0xF8, 0xD1, + 0xD6, 0x90, 0x81, 0x3F, 0xE0, 0x30, 0xE0, 0x0C, + 0xE4, 0xF5, 0x1D, 0xA3, 0xF1, 0xFB, 0x90, 0x01, + 0x57, 0x74, 0x05, 0xF0, 0x90, 0x01, 0xBE, 0xE0, + 0x04, 0xF0, 0x22, 0x90, 0x80, 0xDE, 0xE0, 0x64, + 0x01, 0x60, 0x02, 0xC1, 0x23, 0x90, 0x81, 0x27, + 0xE0, 0x70, 0x02, 0xC1, 0x23, 0x90, 0x81, 0x26, + 0xE0, 0xC4, 0x54, 0x0F, 0x64, 0x01, 0x70, 0x22, + 0x90, 0x06, 0xAB, 0xE0, 0x90, 0x81, 0x2E, 0xF0, + 0x90, 0x06, 0xAA, 0xE0, 0x90, 0x81, 0x2D, 0xF0, + 0xA3, 0xE0, 0xFF, 0x70, 0x08, 0x90, 0x81, 0x2D, + 0xE0, 0xFE, 0xFF, 0x80, 0x00, 0x90, 0x81, 0x2E, + 0xEF, 0xF0, 0x90, 0x81, 0x25, 0xE0, 0x44, 0x04, + 0xF0, 0xE4, 0x90, 0x81, 0x30, 0xF0, 0x90, 0x81, + 0x32, 0xA3, 0xE0, 0x90, 0x05, 0x58, 0xF0, 0x90, + 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, + 0x02, 0xF0, 0x90, 0x81, 0x2B, 0xE0, 0x54, 0xFD, + 0xF0, 0x54, 0xEF, 0xF0, 0x90, 0x81, 0x26, 0xE0, + 0xFF, 0xC4, 0x54, 0x0F, 0x24, 0xFD, 0x50, 0x02, + 0x80, 0x0F, 0x90, 0x81, 0x1F, 0xE0, 0x30, 0xE0, + 0x05, 0x12, 0x6D, 0xF2, 0x80, 0x03, 0x12, 0x6E, + 0xC9, 0x90, 0x81, 0x25, 0xE0, 0x13, 0x13, 0x13, + 0x54, 0x1F, 0x30, 0xE0, 0x0E, 0x90, 0x81, 0x2D, + 0xE0, 0xFF, 0xA3, 0xE0, 0xB5, 0x07, 0x04, 0xF1, + 0xCD, 0x91, 0x22, 0x90, 0x81, 0x1F, 0xE0, 0xC3, + 0x13, 0x20, 0xE0, 0x07, 0x90, 0x81, 0x25, 0xE0, + 0x44, 0x04, 0xF0, 0x22, 0xD1, 0xAB, 0xEF, 0x70, + 0x02, 0xD1, 0x3C, 0x22, 0x90, 0x81, 0x27, 0xE0, + 0x64, 0x01, 0x70, 0x66, 0x90, 0x81, 0x26, 0xE0, + 0x54, 0x0F, 0x60, 0x51, 0x90, 0x81, 0x2A, 0xE0, + 0x70, 0x03, 0xFF, 0x31, 0x93, 0x90, 0x81, 0x2A, + 0xE0, 0x64, 0x0C, 0x60, 0x03, 0x12, 0x66, 0x26, + 0x90, 0x01, 0x5B, 0xE4, 0xF0, 0x90, 0x01, 0x3C, + 0x74, 0x04, 0xF0, 0xD1, 0xAB, 0xEF, 0x64, 0x01, + 0x60, 0x38, 0xE4, 0xF5, 0x1D, 0x90, 0x81, 0x3A, + 0xE0, 0xC3, 0x13, 0x54, 0x7F, 0xF5, 0x1E, 0xE4, + 0xFB, 0xFD, 0x7F, 0x58, 0x7E, 0x01, 0x12, 0x50, + 0x05, 0x90, 0x01, 0x5B, 0x74, 0x05, 0xF0, 0x90, + 0x06, 0x92, 0x74, 0x01, 0xF0, 0x90, 0x81, 0x24, + 0xE0, 0x44, 0x08, 0xF0, 0x22, 0x90, 0x81, 0x2A, + 0xE0, 0x70, 0x07, 0x7D, 0x01, 0x7F, 0x04, 0x12, + 0x47, 0x3D, 0x22, 0x90, 0x04, 0x1A, 0xE0, 0xF4, + 0x60, 0x03, 0x7F, 0x00, 0x22, 0x90, 0x04, 0x1B, + 0xE0, 0x54, 0x07, 0x64, 0x07, 0x7F, 0x01, 0x60, + 0x02, 0x7F, 0x00, 0x22, 0x12, 0x50, 0x60, 0x90, + 0x81, 0x2D, 0xE0, 0x14, 0x90, 0x05, 0x73, 0xF0, + 0x7D, 0x02, 0x7F, 0x02, 0x51, 0x57, 0x90, 0x81, + 0x42, 0xE0, 0x30, 0xE0, 0x2D, 0x90, 0x80, 0xDE, + 0xE0, 0xB4, 0x01, 0x26, 0x90, 0x82, 0x17, 0xE0, + 0x04, 0xF0, 0xE0, 0xB4, 0x0A, 0x0B, 0x90, 0x81, + 0x44, 0xE0, 0x04, 0xF0, 0xE4, 0x90, 0x82, 0x17, + 0xF0, 0x90, 0x81, 0x44, 0xE0, 0xFF, 0x90, 0x81, + 0x43, 0xE0, 0xB5, 0x07, 0x05, 0xE4, 0xA3, 0xF0, + 0xF1, 0x0B, 0x22, 0xE4, 0xFF, 0x8F, 0x53, 0x90, + 0x04, 0x1D, 0xE0, 0x60, 0x19, 0x90, 0x05, 0x22, + 0xE0, 0xF5, 0x56, 0x74, 0xFF, 0xF0, 0xF1, 0x3A, + 0xBF, 0x01, 0x03, 0x12, 0x74, 0xFB, 0x90, 0x05, + 0x22, 0xE5, 0x56, 0xF0, 0x80, 0x03, 0x12, 0x74, + 0xFB, 0x90, 0x04, 0x1F, 0x74, 0x20, 0xF0, 0x7F, + 0x01, 0x22, 0xE4, 0x90, 0x82, 0x0F, 0xF0, 0xA3, + 0xF0, 0x90, 0x05, 0xF8, 0xE0, 0x70, 0x0F, 0xA3, + 0xE0, 0x70, 0x0B, 0xA3, 0xE0, 0x70, 0x07, 0xA3, + 0xE0, 0x70, 0x03, 0x7F, 0x01, 0x22, 0xD3, 0x90, + 0x82, 0x10, 0xE0, 0x94, 0xE8, 0x90, 0x82, 0x0F, + 0xE0, 0x94, 0x03, 0x40, 0x0A, 0x90, 0x01, 0xC0, + 0xE0, 0x44, 0x20, 0xF0, 0x7F, 0x00, 0x22, 0x7F, + 0x32, 0x7E, 0x00, 0x12, 0x32, 0xAA, 0x90, 0x82, + 0x0F, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x44, 0xA9, + 0x80, 0xBF, 0x74, 0x1F, 0x2D, 0xF5, 0x82, 0xE4, + 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0x3F, 0xF0, + 0xEF, 0x60, 0x1D, 0x74, 0x21, 0x2D, 0xF5, 0x82, + 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x10, + 0xF0, 0x74, 0x1F, 0x2D, 0xF5, 0x82, 0xE4, 0x34, + 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x80, 0xF0, 0x22, + 0x74, 0x21, 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, + 0xF5, 0x83, 0xE0, 0x54, 0xEF, 0xF0, 0x74, 0x1F, + 0x2D, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, + 0xE0, 0x44, 0x40, 0xF0, 0x22, 0xEF, 0x14, 0x90, + 0x05, 0x73, 0xF0, 0x90, 0x01, 0x3F, 0x74, 0x10, + 0xF0, 0xFD, 0x7F, 0x03, 0x74, 0x45, 0x2F, 0xF8, + 0xE6, 0x4D, 0xFE, 0xF6, 0x74, 0x38, 0x2F, 0xF5, + 0x82, 0xE4, 0x34, 0x01, 0xF5, 0x83, 0xEE, 0xF0, + 0x22, 0xE0, 0x44, 0x02, 0xF0, 0xE4, 0xF5, 0x1D, + 0x90, 0x81, 0x39, 0xE0, 0xF5, 0x1E, 0xE4, 0xFB, + 0xFD, 0x7F, 0x54, 0x7E, 0x01, 0x8E, 0x19, 0x8F, + 0x1A, 0xE5, 0x1E, 0x54, 0x07, 0xC4, 0x33, 0x54, + 0xE0, 0x85, 0x19, 0x83, 0x85, 0x1A, 0x82, 0xF0, + 0xE5, 0x1D, 0x54, 0x07, 0xC4, 0x33, 0x54, 0xE0, + 0xFF, 0xE5, 0x1E, 0x13, 0x13, 0x13, 0x54, 0x1F, + 0x4F, 0xA3, 0xF0, 0xEB, 0x54, 0x07, 0xC4, 0x33, + 0x54, 0xE0, 0xFF, 0xE5, 0x1D, 0x13, 0x13, 0x13, + 0x54, 0x1F, 0x4F, 0x85, 0x1A, 0x82, 0x85, 0x19, + 0x83, 0xA3, 0xA3, 0xF0, 0xBD, 0x01, 0x0C, 0x85, + 0x1A, 0x82, 0x8E, 0x83, 0xA3, 0xA3, 0xA3, 0x74, + 0x03, 0xF0, 0x22, 0x85, 0x1A, 0x82, 0x85, 0x19, + 0x83, 0xA3, 0xA3, 0xA3, 0x74, 0x01, 0xF0, 0x22, + 0xE4, 0x90, 0x81, 0x4D, 0xF0, 0x90, 0x81, 0x27, + 0xE0, 0x60, 0x58, 0x90, 0x80, 0xDE, 0xE0, 0x64, + 0x01, 0x70, 0x50, 0x90, 0x81, 0x4D, 0x04, 0xF0, + 0xE4, 0x90, 0x81, 0x2E, 0xF0, 0x90, 0x81, 0x1F, + 0xE0, 0x30, 0xE0, 0x15, 0x90, 0x81, 0x23, 0xE0, + 0xB4, 0x02, 0x05, 0xE4, 0x90, 0x81, 0x4D, 0xF0, + 0x31, 0x73, 0xEF, 0x70, 0x04, 0x90, 0x81, 0x4D, + 0xF0, 0x90, 0x81, 0x4D, 0xE0, 0x60, 0x24, 0x90, + 0x81, 0x2B, 0xE0, 0x44, 0x10, 0xF0, 0xE4, 0xF5, + 0x1D, 0x90, 0x81, 0x2F, 0x12, 0x4F, 0xFB, 0x90, + 0x01, 0x57, 0x74, 0x05, 0xF0, 0x90, 0x81, 0x2A, + 0xE0, 0x20, 0xE2, 0x07, 0x7D, 0x01, 0x7F, 0x04, + 0x12, 0x47, 0x3D, 0x22, 0xE4, 0x90, 0x81, 0x4C, + 0xF0, 0x90, 0x81, 0x27, 0xE0, 0x70, 0x02, 0x21, + 0x72, 0x90, 0x80, 0xDE, 0xE0, 0x64, 0x01, 0x60, + 0x02, 0x21, 0x72, 0x90, 0x81, 0x26, 0xE0, 0xFF, + 0xC4, 0x54, 0x0F, 0x60, 0x22, 0x24, 0xFE, 0x60, + 0x03, 0x04, 0x70, 0x21, 0x90, 0x81, 0x2E, 0xE0, + 0x14, 0xF0, 0xE0, 0xFF, 0x60, 0x06, 0x90, 0x81, + 0x30, 0xE0, 0x60, 0x11, 0xEF, 0x70, 0x08, 0x90, + 0x81, 0x2D, 0xE0, 0xA3, 0xF0, 0x80, 0x00, 0x90, + 0x81, 0x4C, 0x74, 0x01, 0xF0, 0x90, 0x81, 0x1F, + 0xE0, 0x30, 0xE0, 0x15, 0x90, 0x81, 0x23, 0xE0, + 0xB4, 0x02, 0x05, 0xE4, 0x90, 0x81, 0x4C, 0xF0, + 0x31, 0x73, 0xEF, 0x70, 0x04, 0x90, 0x81, 0x4C, + 0xF0, 0x90, 0x81, 0x4C, 0xE0, 0x60, 0x43, 0x90, + 0x81, 0x2B, 0xE0, 0x44, 0x10, 0xF0, 0x90, 0x81, + 0x30, 0xE0, 0x60, 0x03, 0xB4, 0x01, 0x09, 0xE4, + 0xF5, 0x1D, 0x90, 0x81, 0x30, 0xE0, 0x80, 0x0D, + 0xE4, 0xF5, 0x1D, 0x90, 0x81, 0x30, 0xE0, 0x75, + 0xF0, 0x03, 0xA4, 0x24, 0xFE, 0xFF, 0x90, 0x81, + 0x2F, 0xE0, 0x2F, 0x12, 0x4F, 0xFC, 0x90, 0x01, + 0x57, 0x74, 0x05, 0xF0, 0x90, 0x81, 0x2A, 0xE0, + 0x20, 0xE2, 0x07, 0x7D, 0x01, 0x7F, 0x04, 0x12, + 0x47, 0x3D, 0x22, 0x90, 0x05, 0x43, 0xE0, 0x7F, + 0x00, 0x30, 0xE7, 0x02, 0x7F, 0x01, 0x22, 0x90, + 0x81, 0x27, 0xE0, 0x70, 0x07, 0x90, 0x81, 0x1F, + 0xE0, 0x30, 0xE0, 0x11, 0x90, 0x81, 0x1F, 0xE0, + 0x30, 0xE0, 0x07, 0x31, 0x73, 0xBF, 0x01, 0x05, + 0x41, 0x5B, 0x12, 0x4E, 0x3C, 0x22, 0xD3, 0x10, + 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x81, 0x1E, + 0xE0, 0xB4, 0x01, 0x04, 0x7F, 0x04, 0x80, 0x0B, + 0x31, 0x73, 0xBF, 0x01, 0x04, 0x7F, 0x01, 0x80, + 0x02, 0x7F, 0x02, 0x71, 0x0E, 0xD0, 0xD0, 0x92, + 0xAF, 0x22, 0x90, 0x81, 0x4B, 0xE0, 0x60, 0x0F, + 0xE4, 0xF0, 0x90, 0x05, 0x53, 0xE0, 0x44, 0x02, + 0xF0, 0x90, 0x05, 0xFC, 0xE0, 0x04, 0xF0, 0x90, + 0x81, 0x1F, 0xE0, 0x30, 0xE0, 0x10, 0xA3, 0x74, + 0x01, 0xF0, 0x90, 0x81, 0x1F, 0xE0, 0xFF, 0xC3, + 0x13, 0x30, 0xE0, 0x02, 0x31, 0x9E, 0x11, 0xC4, + 0x90, 0x81, 0x3F, 0xE0, 0x30, 0xE0, 0x07, 0x91, + 0x65, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x22, 0x90, + 0x81, 0x1F, 0xE0, 0xFF, 0x30, 0xE0, 0x3D, 0x90, + 0x81, 0x23, 0xE0, 0x7E, 0x00, 0xB4, 0x02, 0x02, + 0x7E, 0x01, 0x90, 0x81, 0x22, 0xE0, 0x7D, 0x00, + 0xB4, 0x04, 0x02, 0x7D, 0x01, 0xED, 0x4E, 0x70, + 0x23, 0xEF, 0xC3, 0x13, 0x30, 0xE0, 0x02, 0x21, + 0x9E, 0x51, 0x45, 0x90, 0x81, 0x23, 0xE0, 0xB4, + 0x08, 0x06, 0xE4, 0xFD, 0x7F, 0x0C, 0x80, 0x09, + 0x90, 0x81, 0x23, 0xE0, 0x70, 0x06, 0xFD, 0x7F, + 0x04, 0x12, 0x47, 0x3D, 0x22, 0x90, 0x81, 0x1E, + 0xE0, 0xB4, 0x01, 0x0F, 0x90, 0x81, 0x23, 0xE0, + 0x64, 0x02, 0x60, 0x07, 0x7D, 0x01, 0x7F, 0x02, + 0x12, 0x47, 0x3D, 0x90, 0x81, 0x27, 0xE0, 0x64, + 0x02, 0x60, 0x14, 0x90, 0x81, 0x26, 0xE0, 0x54, + 0x0F, 0x60, 0x0C, 0x12, 0x4E, 0xAB, 0xEF, 0x70, + 0x06, 0xFD, 0x7F, 0x0C, 0x12, 0x47, 0x3D, 0x22, + 0x90, 0x81, 0x1F, 0xE0, 0xFF, 0x30, 0xE0, 0x3F, + 0x90, 0x81, 0x23, 0xE0, 0x7E, 0x00, 0xB4, 0x02, + 0x02, 0x7E, 0x01, 0x90, 0x81, 0x22, 0xE0, 0x7D, + 0x00, 0xB4, 0x04, 0x02, 0x7D, 0x01, 0xED, 0x4E, + 0x70, 0x25, 0xEF, 0xC3, 0x13, 0x30, 0xE0, 0x02, + 0x21, 0x9E, 0x12, 0x74, 0xAC, 0x90, 0x81, 0x23, + 0xE0, 0xB4, 0x0C, 0x06, 0xE4, 0xFD, 0x7F, 0x08, + 0x80, 0x0A, 0x90, 0x81, 0x23, 0xE0, 0xB4, 0x04, + 0x06, 0xE4, 0xFD, 0xFF, 0x12, 0x47, 0x3D, 0x22, + 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, + 0x81, 0xCB, 0x12, 0x45, 0x1F, 0x12, 0x1F, 0xA4, + 0xFF, 0x90, 0x81, 0x1E, 0xF0, 0xBF, 0x01, 0x12, + 0x90, 0x81, 0xCB, 0x12, 0x45, 0x16, 0x90, 0x00, + 0x01, 0x12, 0x1F, 0xBD, 0x64, 0x01, 0x60, 0x21, + 0x80, 0x1D, 0x90, 0x81, 0xCB, 0x12, 0x45, 0x16, + 0x90, 0x00, 0x01, 0x12, 0x1F, 0xBD, 0x64, 0x01, + 0x60, 0x0F, 0x90, 0x81, 0x1F, 0xE0, 0x20, 0xE0, + 0x06, 0xE4, 0xFF, 0x71, 0x0E, 0x80, 0x02, 0x31, + 0x9E, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, + 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x81, 0x22, + 0xE0, 0x90, 0x82, 0x16, 0xF0, 0x6F, 0x70, 0x02, + 0x81, 0x04, 0xEF, 0x14, 0x60, 0x3E, 0x14, 0x60, + 0x62, 0x14, 0x70, 0x02, 0x61, 0xB8, 0x14, 0x70, + 0x02, 0x61, 0xDF, 0x24, 0x04, 0x60, 0x02, 0x81, + 0x04, 0x90, 0x82, 0x16, 0xE0, 0xFF, 0xB4, 0x04, + 0x04, 0x91, 0x41, 0x81, 0x04, 0xEF, 0xB4, 0x02, + 0x04, 0x91, 0x50, 0x81, 0x04, 0x90, 0x82, 0x16, + 0xE0, 0xFF, 0xB4, 0x03, 0x04, 0x91, 0x54, 0x81, + 0x04, 0xEF, 0x64, 0x01, 0x60, 0x02, 0x81, 0x04, + 0x91, 0x43, 0x81, 0x04, 0x90, 0x82, 0x16, 0xE0, + 0xFF, 0xB4, 0x04, 0x04, 0x91, 0xF3, 0x81, 0x04, + 0xEF, 0xB4, 0x02, 0x04, 0x91, 0x58, 0x81, 0x04, + 0x90, 0x82, 0x16, 0xE0, 0xFF, 0xB4, 0x03, 0x04, + 0x91, 0xE8, 0x81, 0x04, 0xEF, 0x70, 0x7D, 0x91, + 0x2B, 0x80, 0x79, 0x90, 0x82, 0x16, 0xE0, 0xB4, + 0x04, 0x05, 0x12, 0x74, 0x60, 0x80, 0x6D, 0x90, + 0x82, 0x16, 0xE0, 0xB4, 0x01, 0x04, 0x91, 0x21, + 0x80, 0x62, 0x90, 0x82, 0x16, 0xE0, 0xB4, 0x03, + 0x05, 0x12, 0x74, 0x71, 0x80, 0x56, 0x90, 0x82, + 0x16, 0xE0, 0x70, 0x50, 0x91, 0x1F, 0x80, 0x4C, + 0x90, 0x82, 0x16, 0xE0, 0xFF, 0xB4, 0x04, 0x05, + 0x12, 0x74, 0x4C, 0x80, 0x3F, 0xEF, 0xB4, 0x01, + 0x04, 0x91, 0x34, 0x80, 0x37, 0xEF, 0xB4, 0x02, + 0x04, 0x91, 0xDF, 0x80, 0x2F, 0x90, 0x82, 0x16, + 0xE0, 0x70, 0x29, 0x91, 0x32, 0x80, 0x25, 0x90, + 0x82, 0x16, 0xE0, 0xFF, 0xB4, 0x03, 0x05, 0x12, + 0x74, 0x7B, 0x80, 0x18, 0xEF, 0xB4, 0x01, 0x04, + 0x91, 0x0B, 0x80, 0x10, 0xEF, 0xB4, 0x02, 0x04, + 0xB1, 0x06, 0x80, 0x08, 0x90, 0x82, 0x16, 0xE0, + 0x70, 0x02, 0x91, 0x09, 0xD0, 0xD0, 0x92, 0xAF, + 0x22, 0x91, 0x2B, 0x90, 0x05, 0x22, 0x74, 0x6F, + 0xF0, 0x90, 0x05, 0x27, 0xE0, 0x54, 0xBF, 0xF0, + 0x90, 0x81, 0x22, 0x74, 0x04, 0xF0, 0x22, 0x91, + 0x2B, 0x12, 0x49, 0xDD, 0x90, 0x81, 0x22, 0x74, + 0x02, 0xF0, 0x22, 0x90, 0x81, 0x22, 0x74, 0x01, + 0xF0, 0x22, 0x91, 0x2B, 0x90, 0x05, 0x22, 0x74, + 0xFF, 0xF0, 0x90, 0x81, 0x22, 0x74, 0x03, 0xF0, + 0x22, 0x91, 0xF3, 0x90, 0x05, 0x27, 0xE0, 0x54, + 0xBF, 0xF0, 0xE4, 0x90, 0x81, 0x22, 0xF0, 0x22, + 0x91, 0x58, 0x80, 0xEF, 0x91, 0xE8, 0x80, 0xEB, + 0x91, 0x65, 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, + 0x81, 0x22, 0x04, 0xF0, 0x22, 0xD3, 0x10, 0xAF, + 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x01, 0x01, 0xE0, + 0x44, 0x02, 0xF0, 0x90, 0x01, 0x00, 0x74, 0xFF, + 0xF0, 0x90, 0x06, 0xB7, 0x74, 0x09, 0xF0, 0x90, + 0x06, 0xB4, 0x74, 0x86, 0xF0, 0x7F, 0x7C, 0x7E, + 0x08, 0x12, 0x2D, 0x5C, 0xEC, 0x54, 0x7F, 0xFC, + 0x90, 0x82, 0x01, 0x12, 0x20, 0xCE, 0x90, 0x82, + 0x01, 0x12, 0x44, 0xD9, 0x90, 0x85, 0xBB, 0x12, + 0x20, 0xCE, 0x7F, 0x7C, 0x7E, 0x08, 0x12, 0x2E, + 0xA2, 0x90, 0x85, 0xBB, 0x12, 0x20, 0xDA, 0xCC, + 0xC0, 0x00, 0xC0, 0x7F, 0x8C, 0x7E, 0x08, 0x12, + 0x2E, 0xA2, 0x90, 0x85, 0xBB, 0x12, 0x20, 0xDA, + 0x00, 0xC0, 0x00, 0x14, 0x7F, 0x70, 0x7E, 0x0E, + 0x12, 0x2E, 0xA2, 0x90, 0x81, 0xF9, 0x12, 0x20, + 0xDA, 0x00, 0x03, 0x3E, 0x60, 0xE4, 0xFD, 0xFF, + 0xB1, 0x1C, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x91, + 0x65, 0x90, 0x81, 0x22, 0x74, 0x03, 0xF0, 0x22, + 0x90, 0x05, 0x22, 0xE4, 0xF0, 0x90, 0x81, 0x22, + 0x04, 0xF0, 0x22, 0x90, 0x05, 0x22, 0xE4, 0xF0, + 0x90, 0x05, 0x27, 0xE0, 0x44, 0x40, 0xF0, 0x90, + 0x81, 0x22, 0x74, 0x01, 0xF0, 0x22, 0x91, 0x65, + 0x90, 0x05, 0x22, 0x74, 0x6F, 0xF0, 0x90, 0x05, + 0x27, 0xE0, 0x54, 0xBF, 0xF0, 0x90, 0x81, 0x22, + 0x74, 0x04, 0xF0, 0x22, 0xD3, 0x10, 0xAF, 0x01, + 0xC3, 0xC0, 0xD0, 0xC0, 0x07, 0xC0, 0x05, 0x90, + 0x81, 0xF9, 0x12, 0x44, 0xD9, 0x90, 0x81, 0xE5, + 0x12, 0x20, 0xCE, 0xD0, 0x05, 0xD0, 0x07, 0x12, + 0x60, 0xF5, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, + 0x81, 0xC8, 0x12, 0x45, 0x1F, 0xEF, 0x12, 0x45, + 0x28, 0x55, 0x71, 0x00, 0x55, 0x7A, 0x01, 0x55, + 0x83, 0x02, 0x55, 0x8B, 0x03, 0x55, 0x94, 0x04, + 0x55, 0x9C, 0x20, 0x55, 0xA4, 0x21, 0x55, 0xAD, + 0x23, 0x55, 0xB5, 0x24, 0x55, 0xBE, 0x25, 0x55, + 0xC7, 0x26, 0x55, 0xCF, 0xC0, 0x00, 0x00, 0x55, + 0xD8, 0x90, 0x81, 0xC8, 0x12, 0x45, 0x16, 0x02, + 0x6A, 0xB0, 0x90, 0x81, 0xC8, 0x12, 0x45, 0x16, + 0x02, 0x65, 0x81, 0x90, 0x81, 0xC8, 0x12, 0x45, + 0x16, 0x41, 0xC0, 0x90, 0x81, 0xC8, 0x12, 0x45, + 0x16, 0x02, 0x75, 0xD8, 0x90, 0x81, 0xC8, 0x12, + 0x45, 0x16, 0x80, 0x44, 0x90, 0x81, 0xC8, 0x12, + 0x45, 0x16, 0xC1, 0x4B, 0x90, 0x81, 0xC8, 0x12, + 0x45, 0x16, 0x02, 0x6A, 0xF8, 0x90, 0x81, 0xC8, + 0x12, 0x45, 0x16, 0xE1, 0xE1, 0x90, 0x81, 0xC8, + 0x12, 0x45, 0x16, 0x02, 0x4A, 0x6C, 0x90, 0x81, + 0xC8, 0x12, 0x45, 0x16, 0x02, 0x6B, 0x3E, 0x90, + 0x81, 0xC8, 0x12, 0x45, 0x16, 0x80, 0x3E, 0x90, + 0x81, 0xC8, 0x12, 0x45, 0x16, 0x02, 0x6B, 0x4E, + 0x90, 0x01, 0xC0, 0xE0, 0x44, 0x01, 0xF0, 0x22, + 0x12, 0x5A, 0x4B, 0x12, 0x1F, 0xA4, 0xFF, 0x54, + 0x01, 0xFE, 0x90, 0x81, 0x45, 0xE0, 0x54, 0xFE, + 0x4E, 0xF0, 0xEF, 0xC3, 0x13, 0x30, 0xE0, 0x14, + 0x90, 0x00, 0x01, 0x12, 0x1F, 0xBD, 0x90, 0x81, + 0x46, 0xF0, 0x90, 0x00, 0x02, 0x12, 0x1F, 0xBD, + 0x90, 0x81, 0x47, 0xF0, 0x22, 0x12, 0x1F, 0xA4, + 0xFF, 0x54, 0x01, 0xFE, 0x90, 0x81, 0x3F, 0xE0, + 0x54, 0xFE, 0x4E, 0xF0, 0x90, 0x00, 0x01, 0x12, + 0x1F, 0xBD, 0xFE, 0x90, 0x05, 0x54, 0xE0, 0xC3, + 0x9E, 0x90, 0x81, 0x40, 0xF0, 0xEF, 0x20, 0xE0, + 0x07, 0x91, 0x65, 0x90, 0x05, 0x22, 0xE4, 0xF0, + 0x90, 0x81, 0x3F, 0xE0, 0x54, 0x01, 0x90, 0x01, + 0xBC, 0xF0, 0x90, 0x81, 0x40, 0xE0, 0x90, 0x01, + 0xBD, 0xF0, 0x22, 0x12, 0x1F, 0xA4, 0xFF, 0x54, + 0x7F, 0x90, 0x81, 0x27, 0xF0, 0xEF, 0xC4, 0x13, + 0x13, 0x13, 0x54, 0x01, 0xA3, 0xF0, 0x90, 0x00, + 0x01, 0x12, 0x1F, 0xBD, 0xFF, 0x54, 0xF0, 0xC4, + 0x54, 0x0F, 0xFE, 0x90, 0x81, 0x26, 0xE0, 0x54, + 0xF0, 0x4E, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, + 0xBD, 0x54, 0x01, 0x25, 0xE0, 0xFE, 0x90, 0x81, + 0x24, 0xE0, 0x54, 0xFD, 0x4E, 0xF0, 0xEF, 0x54, + 0x0F, 0xC4, 0x54, 0xF0, 0xFF, 0x90, 0x81, 0x26, + 0xE0, 0x54, 0x0F, 0x4F, 0xF0, 0x90, 0x00, 0x04, + 0x12, 0x1F, 0xBD, 0x90, 0x81, 0x29, 0xF0, 0xD1, + 0xC6, 0x90, 0x01, 0xB9, 0x74, 0x01, 0xF0, 0x90, + 0x01, 0xB8, 0xF0, 0x90, 0x81, 0x27, 0xE0, 0x90, + 0x01, 0xBA, 0xF0, 0x90, 0x81, 0x29, 0xE0, 0x90, + 0x01, 0xBB, 0xF0, 0x90, 0x81, 0x26, 0xE0, 0x54, + 0x0F, 0x90, 0x01, 0xBE, 0xF0, 0x22, 0x90, 0x81, + 0xCB, 0x12, 0x45, 0x1F, 0x12, 0x72, 0xB3, 0x90, + 0x81, 0x27, 0xE0, 0xFF, 0x12, 0x4C, 0x3E, 0x90, + 0x81, 0x27, 0xE0, 0x60, 0x19, 0x90, 0x81, 0xCB, + 0x12, 0x45, 0x16, 0x90, 0x00, 0x01, 0x12, 0x1F, + 0xBD, 0x54, 0x0F, 0xFF, 0x90, 0x00, 0x02, 0x12, + 0x1F, 0xBD, 0xFD, 0x12, 0x72, 0xC4, 0x22, 0xC0, + 0xE0, 0xC0, 0xF0, 0xC0, 0x83, 0xC0, 0x82, 0xC0, + 0xD0, 0x75, 0xD0, 0x00, 0xC0, 0x00, 0xC0, 0x01, + 0xC0, 0x02, 0xC0, 0x03, 0xC0, 0x04, 0xC0, 0x05, + 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x01, 0xC4, 0x74, + 0xF7, 0xF0, 0x74, 0x56, 0xA3, 0xF0, 0x12, 0x6C, + 0xA5, 0xE5, 0x49, 0x30, 0xE1, 0x03, 0x12, 0x6F, + 0x79, 0xE5, 0x49, 0x30, 0xE2, 0x02, 0xF1, 0xA5, + 0xE5, 0x49, 0x30, 0xE3, 0x03, 0x12, 0x6F, 0x8D, + 0xE5, 0x4A, 0x30, 0xE0, 0x03, 0x12, 0x6F, 0xC9, + 0xE5, 0x4A, 0x30, 0xE4, 0x03, 0x12, 0x70, 0x22, + 0xE5, 0x4B, 0x30, 0xE1, 0x02, 0x51, 0x78, 0xE5, + 0x4B, 0x30, 0xE0, 0x02, 0x31, 0xFF, 0xE5, 0x4B, + 0x30, 0xE3, 0x02, 0xF1, 0xE0, 0xE5, 0x4C, 0x30, + 0xE1, 0x05, 0x7F, 0x03, 0x12, 0x44, 0x27, 0xE5, + 0x4C, 0x30, 0xE4, 0x03, 0x12, 0x4E, 0xC4, 0xE5, + 0x4C, 0x30, 0xE5, 0x03, 0x12, 0x70, 0x38, 0xE5, + 0x4C, 0x30, 0xE6, 0x03, 0x12, 0x70, 0xCE, 0x74, + 0xF7, 0x04, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x56, + 0xA3, 0xF0, 0xD0, 0x07, 0xD0, 0x06, 0xD0, 0x05, + 0xD0, 0x04, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, + 0xD0, 0x00, 0xD0, 0xD0, 0xD0, 0x82, 0xD0, 0x83, + 0xD0, 0xF0, 0xD0, 0xE0, 0x32, 0x90, 0x81, 0x27, + 0xE0, 0x60, 0x34, 0x90, 0x06, 0x92, 0xE0, 0x30, + 0xE0, 0x23, 0xE4, 0xF5, 0x1D, 0x90, 0x81, 0x3A, + 0xE0, 0xC3, 0x13, 0x54, 0x7F, 0xF5, 0x1E, 0xE4, + 0xFB, 0xFD, 0x7F, 0x58, 0x7E, 0x01, 0x11, 0x05, + 0x90, 0x01, 0x5B, 0x74, 0x05, 0xF0, 0x90, 0x06, + 0x92, 0x74, 0x01, 0xF0, 0x22, 0x90, 0x81, 0x24, + 0xE0, 0x54, 0xF7, 0xF0, 0x12, 0x47, 0x2A, 0x22, + 0x22, 0x12, 0x1F, 0xA4, 0x90, 0x81, 0x31, 0xF0, + 0x22, 0x90, 0x01, 0xC8, 0xE4, 0xF0, 0xA3, 0xF0, + 0xA3, 0xF0, 0x7B, 0x01, 0x7A, 0x81, 0x79, 0x51, + 0x7F, 0xFF, 0xFE, 0x12, 0x2B, 0x27, 0xBF, 0x01, + 0x09, 0x90, 0x81, 0x51, 0xE0, 0x64, 0x03, 0x60, + 0x03, 0x22, 0x01, 0xAB, 0xE4, 0x90, 0x81, 0x56, + 0xF0, 0x90, 0x81, 0x56, 0xE0, 0xFF, 0xC3, 0x94, + 0x02, 0x40, 0x02, 0x01, 0xE6, 0xC3, 0x74, 0xFE, + 0x9F, 0xFF, 0xE4, 0x94, 0x00, 0xFE, 0x7B, 0x01, + 0x7A, 0x81, 0x79, 0x52, 0x12, 0x2B, 0x27, 0xEF, + 0x64, 0x01, 0x70, 0x77, 0x90, 0x81, 0x52, 0xE0, + 0xFF, 0x54, 0xC0, 0xFE, 0x60, 0x05, 0xEF, 0x54, + 0x0C, 0x70, 0x16, 0x90, 0x81, 0x52, 0xE0, 0xFF, + 0x54, 0x30, 0x60, 0x67, 0xEF, 0x54, 0x03, 0x60, + 0x62, 0x90, 0x81, 0x53, 0x74, 0x01, 0xF0, 0x80, + 0x05, 0xE4, 0x90, 0x81, 0x53, 0xF0, 0x90, 0x81, + 0x53, 0xE0, 0x90, 0x81, 0x52, 0x70, 0x16, 0xE0, + 0xFF, 0xEE, 0x13, 0x13, 0x54, 0x3F, 0x90, 0x81, + 0x54, 0xF0, 0xEF, 0x54, 0x0C, 0x13, 0x13, 0x54, + 0x3F, 0xA3, 0xF0, 0x80, 0x0D, 0xE0, 0xFE, 0x54, + 0x30, 0x90, 0x81, 0x54, 0xF0, 0xEE, 0x54, 0x03, + 0xA3, 0xF0, 0x90, 0x81, 0x54, 0xE0, 0x64, 0x30, + 0x70, 0x54, 0xA3, 0xE0, 0x64, 0x02, 0x70, 0x4E, + 0x90, 0x00, 0xF5, 0xE0, 0x54, 0x40, 0x90, 0x81, + 0x57, 0xF0, 0xE0, 0x70, 0x41, 0xA3, 0x74, 0x02, + 0xF0, 0x80, 0x10, 0x90, 0x81, 0x58, 0x74, 0x01, + 0xF0, 0x80, 0x08, 0x90, 0x81, 0x56, 0xE0, 0x04, + 0xF0, 0x01, 0x11, 0x90, 0x01, 0xC4, 0x74, 0xE9, + 0xF0, 0x74, 0x57, 0xA3, 0xF0, 0x90, 0x81, 0x58, + 0xE0, 0x90, 0x01, 0xC8, 0xF0, 0x90, 0x81, 0x52, + 0xE0, 0x90, 0x01, 0xC9, 0xF0, 0x90, 0x81, 0x53, + 0xE0, 0x90, 0x01, 0xCA, 0xF0, 0xE4, 0xFD, 0x7F, + 0x1F, 0x12, 0x32, 0x1E, 0x80, 0xD5, 0x22, 0x90, + 0x00, 0xF7, 0xE0, 0x20, 0xE7, 0x09, 0xE0, 0x7F, + 0x01, 0x20, 0xE6, 0x0C, 0x7F, 0x02, 0x22, 0x90, + 0x00, 0xF7, 0xE0, 0x30, 0xE6, 0x02, 0x7F, 0x03, + 0x22, 0x11, 0xE7, 0x90, 0x80, 0x3C, 0xEF, 0xF0, + 0x31, 0x13, 0x90, 0x01, 0x64, 0x74, 0x01, 0xF0, + 0x02, 0x2D, 0xA7, 0x31, 0x81, 0x31, 0xB1, 0x31, + 0x40, 0x31, 0x5F, 0xE4, 0xF5, 0x35, 0xF5, 0x36, + 0xF5, 0x37, 0xF5, 0x38, 0xAD, 0x35, 0x7F, 0x50, + 0x12, 0x32, 0x1E, 0xAD, 0x36, 0x7F, 0x51, 0x12, + 0x32, 0x1E, 0xAD, 0x37, 0x7F, 0x52, 0x12, 0x32, + 0x1E, 0xAD, 0x38, 0x7F, 0x53, 0x02, 0x32, 0x1E, + 0x75, 0x3D, 0x10, 0xE4, 0xF5, 0x3E, 0x75, 0x3F, + 0x07, 0x75, 0x40, 0x02, 0x90, 0x01, 0x30, 0xE5, + 0x3D, 0xF0, 0xA3, 0xE5, 0x3E, 0xF0, 0xA3, 0xE5, + 0x3F, 0xF0, 0xA3, 0xE5, 0x40, 0xF0, 0x22, 0x75, + 0x45, 0x0E, 0x75, 0x46, 0x01, 0x43, 0x46, 0x10, + 0x75, 0x47, 0x03, 0x75, 0x48, 0x62, 0x90, 0x01, + 0x38, 0xE5, 0x45, 0xF0, 0xA3, 0xE5, 0x46, 0xF0, + 0xA3, 0xE5, 0x47, 0xF0, 0xA3, 0xE5, 0x48, 0xF0, + 0x22, 0x90, 0x01, 0x30, 0xE4, 0xF0, 0xA3, 0xF0, + 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0x38, 0xF0, + 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xFD, 0x7F, + 0x50, 0x12, 0x32, 0x1E, 0xE4, 0xFD, 0x7F, 0x51, + 0x12, 0x32, 0x1E, 0xE4, 0xFD, 0x7F, 0x52, 0x12, + 0x32, 0x1E, 0xE4, 0xFD, 0x7F, 0x53, 0x02, 0x32, + 0x1E, 0x90, 0x01, 0x34, 0x74, 0xFF, 0xF0, 0xA3, + 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0x3C, + 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0xF0, 0xFD, + 0x7F, 0x54, 0x12, 0x32, 0x1E, 0x7D, 0xFF, 0x7F, + 0x55, 0x12, 0x32, 0x1E, 0x7D, 0xFF, 0x7F, 0x56, + 0x12, 0x32, 0x1E, 0x7D, 0xFF, 0x7F, 0x57, 0x02, + 0x32, 0x1E, 0x90, 0x00, 0x80, 0xE0, 0x44, 0x80, + 0xFD, 0x7F, 0x80, 0x12, 0x32, 0x1E, 0x90, 0xFD, + 0x00, 0xE0, 0x54, 0xBF, 0xF0, 0x12, 0x57, 0xE9, + 0x51, 0x77, 0x12, 0x32, 0x77, 0x51, 0xC9, 0x51, + 0x5E, 0x7F, 0x01, 0x12, 0x43, 0x15, 0x90, 0x81, + 0x41, 0x74, 0x02, 0xF0, 0xFF, 0x12, 0x43, 0x15, + 0x90, 0x81, 0x41, 0xE0, 0x04, 0xF0, 0x7F, 0x03, + 0x12, 0x43, 0x15, 0x90, 0x81, 0x41, 0xE0, 0x04, + 0xF0, 0x31, 0x01, 0x51, 0x3F, 0x90, 0x00, 0x80, + 0xE0, 0x44, 0x40, 0xFD, 0x7F, 0x80, 0x12, 0x32, + 0x1E, 0x75, 0x20, 0xFF, 0x51, 0x68, 0x51, 0xF9, + 0x51, 0x7F, 0xE4, 0xFF, 0x02, 0x43, 0x9E, 0x51, + 0x62, 0x51, 0x6F, 0x51, 0xA7, 0x71, 0x4F, 0x51, + 0x8A, 0x51, 0x95, 0x90, 0x81, 0x45, 0xE0, 0x54, + 0xFE, 0xF0, 0xA3, 0x74, 0x03, 0xF0, 0xA3, 0xF0, + 0xE4, 0xA3, 0xF0, 0xA3, 0xF0, 0x22, 0xE4, 0xF5, + 0x4D, 0x22, 0xE4, 0x90, 0x80, 0xDE, 0xF0, 0x22, + 0x75, 0xE8, 0x03, 0x75, 0xA8, 0x84, 0x22, 0xE4, + 0x90, 0x80, 0xD8, 0xF0, 0xA3, 0xF0, 0x22, 0x90, + 0x01, 0x94, 0xE0, 0x44, 0x01, 0xF0, 0x22, 0x90, + 0x01, 0xE4, 0x74, 0x0B, 0xF0, 0xA3, 0x74, 0x01, + 0xF0, 0x22, 0x90, 0x81, 0x3F, 0xE0, 0x54, 0xFE, + 0xF0, 0xE4, 0xA3, 0xF0, 0x22, 0x90, 0x81, 0x42, + 0xE0, 0x54, 0xFE, 0xF0, 0x54, 0x7F, 0xF0, 0xA3, + 0x74, 0x0A, 0xF0, 0xE4, 0xA3, 0xF0, 0x22, 0x90, + 0x81, 0x1F, 0xE0, 0x54, 0xFE, 0xF0, 0x54, 0xFD, + 0xF0, 0x54, 0xFB, 0xF0, 0x54, 0xF7, 0xF0, 0x54, + 0xEF, 0xF0, 0x54, 0xDF, 0xF0, 0xE4, 0xA3, 0xF0, + 0xA3, 0xF0, 0xA3, 0xF0, 0xA3, 0x74, 0x0C, 0xF0, + 0x22, 0x90, 0x01, 0x01, 0xE0, 0x44, 0x04, 0xF0, + 0x90, 0x01, 0x9C, 0x74, 0x7E, 0xF0, 0xA3, 0x74, + 0x92, 0xF0, 0xA3, 0x74, 0xA0, 0xF0, 0xA3, 0x74, + 0x24, 0xF0, 0x90, 0x01, 0x9B, 0x74, 0x49, 0xF0, + 0x90, 0x01, 0x9A, 0x74, 0xE0, 0xF0, 0x90, 0x01, + 0x99, 0xE4, 0xF0, 0x90, 0x01, 0x98, 0x04, 0xF0, + 0x22, 0xE4, 0x90, 0x81, 0x51, 0xF0, 0xA3, 0xF0, + 0x90, 0x01, 0x98, 0xE0, 0x7F, 0x00, 0x30, 0xE4, + 0x02, 0x7F, 0x01, 0xEF, 0x64, 0x01, 0x60, 0x3E, + 0xC3, 0x90, 0x81, 0x52, 0xE0, 0x94, 0x88, 0x90, + 0x81, 0x51, 0xE0, 0x94, 0x13, 0x40, 0x08, 0x90, + 0x01, 0xC1, 0xE0, 0x44, 0x10, 0xF0, 0x22, 0x90, + 0x81, 0x51, 0xE4, 0x75, 0xF0, 0x01, 0x12, 0x44, + 0xA9, 0x7F, 0x14, 0x7E, 0x00, 0x12, 0x32, 0xAA, + 0xD3, 0x90, 0x81, 0x52, 0xE0, 0x94, 0x32, 0x90, + 0x81, 0x51, 0xE0, 0x94, 0x00, 0x40, 0xB9, 0x90, + 0x01, 0xC6, 0xE0, 0x30, 0xE3, 0xB2, 0x22, 0xE4, + 0x90, 0x81, 0x27, 0xF0, 0xA3, 0xF0, 0x90, 0x81, + 0x26, 0xE0, 0x54, 0x0F, 0xF0, 0x54, 0xF0, 0xF0, + 0x90, 0x81, 0x24, 0xE0, 0x54, 0xFD, 0xF0, 0x54, + 0xF7, 0xF0, 0x54, 0xEF, 0xF0, 0x90, 0x81, 0x2D, + 0x74, 0x01, 0xF0, 0xA3, 0xF0, 0x90, 0x81, 0x24, + 0xE0, 0x54, 0xFB, 0xF0, 0xA3, 0xE0, 0x54, 0xFB, + 0xF0, 0xE4, 0x90, 0x81, 0x30, 0xF0, 0x90, 0x81, + 0x2F, 0x74, 0x07, 0xF0, 0x90, 0x81, 0x32, 0xE4, + 0xF0, 0xA3, 0x74, 0x02, 0xF0, 0xE4, 0x90, 0x81, + 0x2B, 0xF0, 0x90, 0x81, 0x24, 0xE0, 0x54, 0xFE, + 0xF0, 0x90, 0x81, 0x29, 0x74, 0x0C, 0xF0, 0x90, + 0x81, 0x24, 0xE0, 0x54, 0xDF, 0xF0, 0x90, 0x81, + 0x2A, 0x74, 0x0C, 0xF0, 0x90, 0x81, 0x24, 0xE0, + 0x54, 0xBF, 0xF0, 0x54, 0x7F, 0xF0, 0xA3, 0xE0, + 0x54, 0xFE, 0xF0, 0x54, 0xFD, 0xF0, 0x54, 0xF7, + 0xF0, 0x90, 0x81, 0x34, 0x12, 0x20, 0xDA, 0x00, + 0x00, 0x00, 0x00, 0x90, 0x80, 0x3C, 0xE0, 0xB4, + 0x01, 0x08, 0x90, 0x81, 0x31, 0x74, 0x99, 0xF0, + 0x80, 0x12, 0x90, 0x80, 0x3C, 0xE0, 0x90, 0x81, + 0x31, 0xB4, 0x03, 0x05, 0x74, 0x90, 0xF0, 0x80, + 0x03, 0x74, 0x40, 0xF0, 0x90, 0x81, 0x38, 0x74, + 0x01, 0xF0, 0xA3, 0x74, 0x05, 0xF0, 0xA3, 0xE0, + 0x54, 0x01, 0x44, 0x28, 0xF0, 0xA3, 0x74, 0x05, + 0xF0, 0xE4, 0xA3, 0xF0, 0xA3, 0xE0, 0x54, 0xFD, + 0xF0, 0x54, 0xFB, 0xF0, 0x54, 0xF7, 0xF0, 0x54, + 0xEF, 0xF0, 0x54, 0xDF, 0xF0, 0x54, 0xBF, 0xF0, + 0xE4, 0xA3, 0xF0, 0x22, 0xE4, 0x90, 0x81, 0x59, + 0xF0, 0x90, 0x81, 0x59, 0xE0, 0x64, 0x01, 0xF0, + 0x24, 0x24, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x5C, + 0xA3, 0xF0, 0x90, 0x81, 0x2A, 0xE0, 0xFF, 0x90, + 0x81, 0x29, 0xE0, 0x6F, 0x60, 0x03, 0x12, 0x47, + 0x2A, 0xD1, 0x08, 0xBF, 0x01, 0x02, 0x91, 0x5F, + 0xB1, 0xF2, 0x12, 0x32, 0x9E, 0xBF, 0x01, 0x02, + 0xB1, 0x67, 0x12, 0x42, 0x4D, 0x80, 0xCA, 0xD3, + 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x81, + 0x24, 0xE0, 0x30, 0xE0, 0x24, 0x90, 0x81, 0x1F, + 0xE0, 0xFF, 0x30, 0xE0, 0x1A, 0xC3, 0x13, 0x30, + 0xE0, 0x07, 0xB1, 0xFB, 0xBF, 0x01, 0x12, 0x80, + 0x0A, 0x90, 0x81, 0x23, 0xE0, 0xFF, 0x60, 0x03, + 0xB4, 0x08, 0x06, 0x91, 0x96, 0x80, 0x02, 0x91, + 0xA6, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, + 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0xB1, 0x22, 0x91, + 0xBA, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x90, 0x81, + 0x2A, 0xE0, 0x70, 0x0D, 0xD1, 0x2F, 0xBF, 0x01, + 0x08, 0x91, 0x96, 0x90, 0x01, 0xE5, 0xE0, 0x04, + 0xF0, 0x22, 0xB1, 0xF3, 0x90, 0x00, 0x08, 0xE0, + 0x54, 0xEF, 0xFD, 0x7F, 0x08, 0x12, 0x32, 0x1E, + 0xE4, 0xFF, 0x8F, 0x50, 0xE4, 0x90, 0x81, 0x5A, + 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0x09, 0xE0, 0x7F, + 0x00, 0x30, 0xE7, 0x02, 0x7F, 0x01, 0xEF, 0x65, + 0x50, 0x60, 0x3E, 0xC3, 0x90, 0x81, 0x5B, 0xE0, + 0x94, 0x88, 0x90, 0x81, 0x5A, 0xE0, 0x94, 0x13, + 0x40, 0x08, 0x90, 0x01, 0xC0, 0xE0, 0x44, 0x10, + 0xF0, 0x22, 0x90, 0x81, 0x5A, 0xE4, 0x75, 0xF0, + 0x01, 0x12, 0x44, 0xA9, 0x7F, 0x14, 0x7E, 0x00, + 0x12, 0x32, 0xAA, 0xD3, 0x90, 0x81, 0x5B, 0xE0, + 0x94, 0x32, 0x90, 0x81, 0x5A, 0xE0, 0x94, 0x00, + 0x40, 0xB9, 0x90, 0x01, 0xC6, 0xE0, 0x30, 0xE0, + 0xB2, 0x22, 0x90, 0x81, 0x31, 0xE0, 0xFD, 0x7F, + 0x93, 0x12, 0x32, 0x1E, 0x90, 0x81, 0x28, 0xE0, + 0x60, 0x12, 0x90, 0x01, 0x2F, 0xE0, 0x30, 0xE7, + 0x05, 0x74, 0x10, 0xF0, 0x80, 0x06, 0x90, 0x01, + 0x2F, 0x74, 0x90, 0xF0, 0x90, 0x00, 0x08, 0xE0, + 0x44, 0x10, 0xFD, 0x7F, 0x08, 0x12, 0x32, 0x1E, + 0x7F, 0x01, 0x91, 0xCA, 0x90, 0x00, 0x90, 0xE0, + 0x44, 0x01, 0xFD, 0x7F, 0x90, 0x12, 0x32, 0x1E, + 0x7F, 0x14, 0x7E, 0x00, 0x02, 0x32, 0xAA, 0xD3, + 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x12, 0x2D, + 0xA7, 0xE4, 0xF5, 0x52, 0x12, 0x32, 0x9E, 0xEF, + 0x60, 0x73, 0x63, 0x52, 0x01, 0xE5, 0x52, 0x24, + 0x67, 0x90, 0x01, 0xC4, 0xF0, 0x74, 0x5D, 0xA3, + 0xF0, 0x90, 0x00, 0x88, 0xE0, 0xF5, 0x50, 0xF5, + 0x51, 0x54, 0x0F, 0x60, 0xDF, 0xE5, 0x50, 0x30, + 0xE0, 0x0B, 0x20, 0xE4, 0x03, 0x12, 0x29, 0xC5, + 0x53, 0x51, 0xEE, 0x80, 0x3F, 0xE5, 0x50, 0x30, + 0xE1, 0x16, 0x20, 0xE5, 0x0E, 0x12, 0x11, 0xBD, + 0xEF, 0x70, 0x03, 0x43, 0x51, 0x20, 0x90, 0x01, + 0x06, 0xE4, 0xF0, 0x53, 0x51, 0xFD, 0x80, 0x24, + 0xE5, 0x50, 0x30, 0xE2, 0x0B, 0x20, 0xE6, 0x03, + 0x12, 0x67, 0x06, 0x53, 0x51, 0xFB, 0x80, 0x14, + 0xE5, 0x50, 0x30, 0xE3, 0x0F, 0x20, 0xE7, 0x09, + 0x12, 0x61, 0x6E, 0xEF, 0x70, 0x03, 0x43, 0x51, + 0x80, 0x53, 0x51, 0xF7, 0xAD, 0x51, 0x7F, 0x88, + 0x12, 0x32, 0x1E, 0x80, 0x87, 0xD0, 0xD0, 0x92, + 0xAF, 0x22, 0x22, 0x90, 0x00, 0x90, 0xE0, 0x20, + 0xE0, 0xF9, 0x22, 0x90, 0x81, 0x22, 0xE0, 0x64, + 0x02, 0x7F, 0x01, 0x60, 0x02, 0x7F, 0x00, 0x22, + 0x7F, 0x02, 0x90, 0x81, 0x41, 0xE0, 0xFE, 0xEF, + 0xC3, 0x9E, 0x50, 0x18, 0xEF, 0x25, 0xE0, 0x24, + 0x81, 0xF8, 0xE6, 0x30, 0xE4, 0x0B, 0x90, 0x01, + 0xB8, 0x74, 0x08, 0xF0, 0xA3, 0xF0, 0x7F, 0x00, + 0x22, 0x0F, 0x80, 0xDE, 0x7F, 0x01, 0x22, 0x90, + 0x02, 0x87, 0xE0, 0x60, 0x08, 0x90, 0x01, 0xB8, + 0x74, 0x01, 0xF0, 0x80, 0x17, 0x90, 0x02, 0x86, + 0xE0, 0x20, 0xE1, 0x08, 0x90, 0x01, 0xB8, 0x74, + 0x04, 0xF0, 0x80, 0x08, 0x90, 0x01, 0xB8, 0xE4, + 0xF0, 0x7F, 0x01, 0x22, 0x90, 0x01, 0xB9, 0x74, + 0x08, 0xF0, 0x7F, 0x00, 0x22, 0xE4, 0xFB, 0xFA, + 0xFD, 0x7F, 0x01, 0x12, 0x44, 0x4E, 0x90, 0x81, + 0xBD, 0xEF, 0xF0, 0x60, 0xF0, 0xD1, 0x71, 0x80, + 0xEC, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, + 0x90, 0x01, 0xCC, 0xE0, 0x54, 0x0F, 0x90, 0x81, + 0xBE, 0xF0, 0x90, 0x81, 0xBE, 0xE0, 0xFD, 0x70, + 0x02, 0xE1, 0x9C, 0x90, 0x82, 0x09, 0xE0, 0xFF, + 0x74, 0x01, 0x7E, 0x00, 0xA8, 0x07, 0x08, 0x80, + 0x05, 0xC3, 0x33, 0xCE, 0x33, 0xCE, 0xD8, 0xF9, + 0xFF, 0xEF, 0x5D, 0x70, 0x02, 0xE1, 0x95, 0x90, + 0x82, 0x09, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, + 0xD0, 0x12, 0x45, 0x0A, 0xE0, 0x90, 0x81, 0xBF, + 0xF0, 0x75, 0x13, 0x01, 0x75, 0x14, 0x81, 0x75, + 0x15, 0xBF, 0x75, 0x16, 0x01, 0x7B, 0x01, 0x7A, + 0x81, 0x79, 0xC0, 0x12, 0x2B, 0xED, 0x90, 0x82, + 0x09, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xD1, + 0x12, 0x45, 0x0A, 0xE0, 0x90, 0x81, 0xC1, 0xF0, + 0x90, 0x82, 0x09, 0xE0, 0x75, 0xF0, 0x04, 0x90, + 0x01, 0xD2, 0x12, 0x45, 0x0A, 0xE0, 0x90, 0x81, + 0xC2, 0xF0, 0x90, 0x82, 0x09, 0xE0, 0x75, 0xF0, + 0x04, 0x90, 0x01, 0xD3, 0x12, 0x45, 0x0A, 0xE0, + 0x90, 0x81, 0xC3, 0xF0, 0x90, 0x82, 0x09, 0xE0, + 0x75, 0xF0, 0x04, 0x90, 0x01, 0xF0, 0x12, 0x45, + 0x0A, 0xE0, 0x90, 0x81, 0xC4, 0xF0, 0x90, 0x82, + 0x09, 0xE0, 0x75, 0xF0, 0x04, 0x90, 0x01, 0xF1, + 0x12, 0x45, 0x0A, 0xE0, 0x90, 0x81, 0xC5, 0xF0, + 0x90, 0x82, 0x09, 0xE0, 0x75, 0xF0, 0x04, 0x90, + 0x01, 0xF2, 0x12, 0x45, 0x0A, 0xE0, 0x90, 0x81, + 0xC6, 0xF0, 0x90, 0x82, 0x09, 0xE0, 0x75, 0xF0, + 0x04, 0x90, 0x01, 0xF3, 0x12, 0x45, 0x0A, 0xE0, + 0x90, 0x81, 0xC7, 0xF0, 0x90, 0x81, 0xBE, 0xE0, + 0xFF, 0x90, 0x82, 0x09, 0xE0, 0xFE, 0x74, 0x01, + 0xA8, 0x06, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, + 0xFC, 0xF4, 0x5F, 0x90, 0x81, 0xBE, 0xF0, 0x90, + 0x82, 0x09, 0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, + 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0x90, + 0x01, 0xCC, 0xF0, 0x90, 0x81, 0xC0, 0xE0, 0xFF, + 0x7B, 0x01, 0x7A, 0x81, 0x79, 0xC1, 0x12, 0x55, + 0x3F, 0x90, 0x82, 0x09, 0xE0, 0x04, 0xF0, 0xE0, + 0x54, 0x03, 0xF0, 0xC1, 0x82, 0x90, 0x01, 0xC0, + 0xE0, 0x44, 0x02, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, + 0x22, 0xE4, 0xFB, 0xFA, 0xFD, 0x7F, 0x01, 0x12, + 0x44, 0x4E, 0x90, 0x81, 0xD0, 0xEF, 0xF0, 0x60, + 0xF0, 0x12, 0x6C, 0x19, 0x80, 0xEB, 0x90, 0x81, + 0xD4, 0xEF, 0xF0, 0xA3, 0xED, 0xF0, 0xA3, 0x12, + 0x20, 0xDA, 0x00, 0x00, 0x00, 0x00, 0xE4, 0x90, + 0x81, 0xE2, 0xF0, 0x7F, 0x24, 0x7E, 0x08, 0x12, + 0x2D, 0x5C, 0x90, 0x81, 0xDA, 0x12, 0x20, 0xCE, + 0x90, 0x81, 0xD4, 0xE0, 0xFB, 0x70, 0x08, 0x90, + 0x81, 0xDA, 0x12, 0x44, 0xD9, 0x80, 0x16, 0xEB, + 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x62, 0xF5, 0x82, + 0xE4, 0x34, 0x87, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, + 0xE0, 0xFF, 0x12, 0x2D, 0x5C, 0x90, 0x81, 0xDE, + 0x12, 0x20, 0xCE, 0x90, 0x81, 0xD5, 0xE0, 0xFF, + 0xE4, 0xFC, 0xFD, 0xFE, 0x78, 0x17, 0x12, 0x20, + 0xBB, 0xA8, 0x04, 0xA9, 0x05, 0xAA, 0x06, 0xAB, + 0x07, 0x90, 0x81, 0xDE, 0x12, 0x44, 0xD9, 0xED, + 0x54, 0x7F, 0xFD, 0xEC, 0x54, 0x80, 0xFC, 0x12, + 0x44, 0xCC, 0xEC, 0x44, 0x80, 0xFC, 0x90, 0x81, + 0xDE, 0x12, 0x20, 0xCE, 0x90, 0x81, 0xDA, 0x12, + 0x44, 0xD9, 0xEC, 0x54, 0x7F, 0xFC, 0x90, 0x85, + 0xBB, 0x12, 0x20, 0xCE, 0x7F, 0x24, 0x7E, 0x08, + 0x12, 0x2E, 0xA2, 0x90, 0x81, 0xD4, 0xE0, 0x75, + 0xF0, 0x08, 0xA4, 0x24, 0x62, 0xF5, 0x82, 0xE4, + 0x34, 0x87, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, + 0xFF, 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x81, 0xDE, + 0x12, 0x44, 0xD9, 0x90, 0x85, 0xBB, 0x12, 0x20, + 0xCE, 0xD0, 0x07, 0xD0, 0x06, 0x12, 0x2E, 0xA2, + 0x90, 0x81, 0xDA, 0x12, 0x44, 0xD9, 0xEC, 0x44, + 0x80, 0xFC, 0x90, 0x85, 0xBB, 0x12, 0x20, 0xCE, + 0x7F, 0x24, 0x7E, 0x08, 0x12, 0x2E, 0xA2, 0x90, + 0x81, 0xD4, 0xE0, 0x70, 0x04, 0x7F, 0x20, 0x80, + 0x09, 0x90, 0x81, 0xD4, 0xE0, 0xB4, 0x01, 0x16, + 0x7F, 0x28, 0x7E, 0x08, 0x12, 0x2D, 0x5C, 0x78, + 0x08, 0x12, 0x20, 0xA8, 0xEF, 0x54, 0x01, 0xFF, + 0xE4, 0x90, 0x81, 0xE2, 0xEF, 0xF0, 0x90, 0x81, + 0xE2, 0xE0, 0x90, 0x81, 0xD4, 0x60, 0x0E, 0xE0, + 0x75, 0xF0, 0x08, 0xA4, 0x24, 0x66, 0xF5, 0x82, + 0xE4, 0x34, 0x87, 0x80, 0x0C, 0xE0, 0x75, 0xF0, + 0x08, 0xA4, 0x24, 0x64, 0xF5, 0x82, 0xE4, 0x34, + 0x87, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, + 0x12, 0x2D, 0x5C, 0xED, 0x54, 0x0F, 0xFD, 0xE4, + 0xFC, 0x90, 0x81, 0xD6, 0x12, 0x20, 0xCE, 0x90, + 0x81, 0xD6, 0x02, 0x44, 0xD9, 0x90, 0x81, 0xE3, + 0xEF, 0xF0, 0xAB, 0x05, 0x90, 0x81, 0xE9, 0x12, + 0x20, 0xDA, 0x00, 0x00, 0x00, 0x00, 0xAF, 0x03, + 0xE4, 0xFC, 0xFD, 0xFE, 0x78, 0x14, 0x12, 0x20, + 0xBB, 0xA8, 0x04, 0xA9, 0x05, 0xAA, 0x06, 0xAB, + 0x07, 0x90, 0x81, 0xE5, 0x12, 0x44, 0xD9, 0xED, + 0x54, 0x0F, 0xFD, 0xE4, 0xFC, 0x12, 0x44, 0xCC, + 0xEC, 0x54, 0x0F, 0xFC, 0x90, 0x81, 0xE9, 0x12, + 0x20, 0xCE, 0x90, 0x81, 0xE3, 0xE0, 0x75, 0xF0, + 0x08, 0xA4, 0x24, 0x60, 0xF5, 0x82, 0xE4, 0x34, + 0x87, 0xF5, 0x83, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, + 0xC0, 0x06, 0xC0, 0x07, 0x90, 0x81, 0xE9, 0x12, + 0x44, 0xD9, 0x90, 0x85, 0xBB, 0x12, 0x20, 0xCE, + 0xD0, 0x07, 0xD0, 0x06, 0x02, 0x2E, 0xA2, 0xD3, + 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x12, 0x5F, + 0xB6, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0x78, 0x10, + 0x74, 0x01, 0xF2, 0x90, 0x02, 0x09, 0xE0, 0x78, + 0x00, 0xF2, 0x08, 0x74, 0x20, 0xF2, 0x18, 0xE2, + 0xFF, 0x30, 0xE0, 0x05, 0x08, 0xE2, 0x24, 0x80, + 0xF2, 0xEF, 0xC3, 0x13, 0x90, 0xFD, 0x10, 0xF0, + 0x78, 0x01, 0xE2, 0x24, 0x00, 0xF5, 0x82, 0xE4, + 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x78, 0x03, 0xF2, + 0x64, 0x04, 0x60, 0x0D, 0xE2, 0xFF, 0x64, 0x08, + 0x60, 0x07, 0xEF, 0x64, 0x0C, 0x60, 0x02, 0x61, + 0xDE, 0xE4, 0x78, 0x02, 0xF2, 0x78, 0x03, 0xE2, + 0xFF, 0x18, 0xE2, 0xC3, 0x9F, 0x50, 0x2D, 0xE2, + 0xFD, 0x18, 0xE2, 0x2D, 0x90, 0x81, 0x5A, 0xF0, + 0xE0, 0xFF, 0x24, 0x00, 0xF5, 0x82, 0xE4, 0x34, + 0xFC, 0xF5, 0x83, 0xE0, 0xFE, 0x74, 0x04, 0x2D, + 0xF8, 0xEE, 0xF2, 0xEF, 0xB4, 0xFF, 0x06, 0x90, + 0xFD, 0x10, 0xE0, 0x04, 0xF0, 0x78, 0x02, 0xE2, + 0x04, 0xF2, 0x80, 0xC9, 0x78, 0x04, 0xE2, 0x78, + 0x12, 0xF2, 0xFF, 0x78, 0x05, 0xE2, 0x78, 0x11, + 0xF2, 0x78, 0x06, 0xE2, 0x78, 0x13, 0xF2, 0x78, + 0x07, 0xE2, 0x78, 0x14, 0xF2, 0x78, 0x08, 0xE2, + 0x78, 0x33, 0xF2, 0x78, 0x09, 0xE2, 0x78, 0x34, + 0xF2, 0x78, 0x0A, 0xE2, 0x78, 0x35, 0xF2, 0x78, + 0x0B, 0xE2, 0x78, 0x36, 0xF2, 0x78, 0x0C, 0xE2, + 0x78, 0x37, 0xF2, 0x78, 0x0D, 0xE2, 0x78, 0x38, + 0xF2, 0x78, 0x0E, 0xE2, 0x78, 0x39, 0xF2, 0x78, + 0x0F, 0xE2, 0x78, 0x3A, 0xF2, 0xE4, 0x78, 0x15, + 0xF2, 0xEF, 0x24, 0xF8, 0x60, 0x75, 0x24, 0xFC, + 0x60, 0x6C, 0x24, 0x08, 0x60, 0x02, 0x61, 0xC0, + 0x78, 0x11, 0xE2, 0xB4, 0x01, 0x05, 0x12, 0x29, + 0xC5, 0x61, 0xC5, 0x78, 0x11, 0xE2, 0xB4, 0x02, + 0x05, 0x12, 0x11, 0xBD, 0x61, 0xC5, 0x78, 0x11, + 0xE2, 0xB4, 0x03, 0x04, 0xF1, 0x06, 0x61, 0xC5, + 0x78, 0x11, 0xE2, 0xB4, 0x10, 0x17, 0x78, 0x14, + 0xE2, 0xFE, 0x18, 0xE2, 0xFD, 0xED, 0xFF, 0x78, + 0x16, 0xEE, 0xF2, 0xFE, 0x08, 0xEF, 0xF2, 0xFF, + 0x12, 0x32, 0xAA, 0x61, 0xC5, 0x78, 0x11, 0xE2, + 0xB4, 0x11, 0x17, 0x78, 0x14, 0xE2, 0xFE, 0x18, + 0xE2, 0xFD, 0xED, 0xFF, 0x78, 0x16, 0xEE, 0xF2, + 0xFE, 0x08, 0xEF, 0xF2, 0xFF, 0x12, 0x32, 0x06, + 0x61, 0xC5, 0x78, 0x11, 0xE2, 0xF4, 0x60, 0x02, + 0x61, 0xC5, 0x18, 0xF2, 0x61, 0xC5, 0x78, 0x15, + 0x74, 0x01, 0xF2, 0x78, 0x11, 0xE2, 0x64, 0x07, + 0x60, 0x02, 0x61, 0xAA, 0x78, 0x34, 0xE2, 0xFF, + 0xE4, 0xFC, 0xFD, 0xFE, 0x78, 0x08, 0x12, 0x20, + 0xBB, 0xC0, 0x04, 0xA9, 0x05, 0xAA, 0x06, 0xAB, + 0x07, 0x78, 0x33, 0xE2, 0xFF, 0xE4, 0xFC, 0xFD, + 0xFE, 0xD0, 0x00, 0x12, 0x44, 0xCC, 0xC0, 0x04, + 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x78, 0x35, + 0xE2, 0xFF, 0xE4, 0xFC, 0xFD, 0xFE, 0x78, 0x10, + 0x12, 0x20, 0xBB, 0xD0, 0x03, 0xD0, 0x02, 0xD0, + 0x01, 0xD0, 0x00, 0x12, 0x44, 0xCC, 0x78, 0x18, + 0x12, 0x44, 0xFE, 0x78, 0x15, 0xE2, 0x70, 0x02, + 0x61, 0x93, 0x18, 0xE2, 0xFF, 0x18, 0xE2, 0xFD, + 0x31, 0x5F, 0x78, 0x1C, 0x12, 0x44, 0xFE, 0x78, + 0x38, 0xE2, 0xFF, 0xE4, 0xFC, 0xFD, 0xFE, 0x78, + 0x08, 0x12, 0x20, 0xBB, 0xC0, 0x04, 0xA9, 0x05, + 0xAA, 0x06, 0xAB, 0x07, 0x78, 0x37, 0xE2, 0xFF, + 0xE4, 0xFC, 0xFD, 0xFE, 0xD0, 0x00, 0x12, 0x44, + 0xCC, 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, + 0x07, 0x78, 0x39, 0xE2, 0xFF, 0xE4, 0xFC, 0xFD, + 0xFE, 0x78, 0x10, 0x12, 0x20, 0xBB, 0xD0, 0x03, + 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, 0x12, 0x44, + 0xCC, 0x78, 0x20, 0x12, 0x44, 0xFE, 0x78, 0x20, + 0x12, 0x44, 0xE5, 0x12, 0x20, 0x9B, 0x78, 0x1C, + 0x12, 0x44, 0xF1, 0x12, 0x44, 0xBF, 0xC0, 0x04, + 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, 0x78, 0x18, + 0x12, 0x44, 0xE5, 0x78, 0x20, 0x12, 0x44, 0xF1, + 0x12, 0x44, 0xBF, 0xD0, 0x03, 0xD0, 0x02, 0xD0, + 0x01, 0xD0, 0x00, 0x12, 0x44, 0xCC, 0x78, 0x18, + 0x12, 0x44, 0xFE, 0x78, 0x18, 0x12, 0x44, 0xE5, + 0x90, 0x81, 0xF9, 0x12, 0x20, 0xCE, 0x78, 0x13, + 0xE2, 0xFD, 0x08, 0xE2, 0xFF, 0x12, 0x55, 0x1C, + 0x80, 0x1B, 0x78, 0x13, 0xE2, 0xFF, 0x08, 0xE2, + 0xFD, 0x78, 0x11, 0xE2, 0xFB, 0x78, 0x15, 0xE2, + 0x90, 0x81, 0xBC, 0xF0, 0x71, 0xE1, 0x80, 0x05, + 0x78, 0x10, 0x74, 0x02, 0xF2, 0x78, 0x10, 0xE2, + 0xFF, 0xC3, 0x94, 0x02, 0x50, 0x10, 0xEF, 0x60, + 0x0A, 0x78, 0x02, 0xE2, 0xFF, 0x18, 0xE2, 0x2F, + 0xF2, 0x21, 0x90, 0x7F, 0x01, 0x22, 0x7F, 0x00, + 0x22, 0xAC, 0x07, 0xED, 0xAD, 0x04, 0x78, 0x24, + 0xF2, 0xED, 0x08, 0xF2, 0xEB, 0xB4, 0x04, 0x07, + 0x78, 0x27, 0x74, 0x01, 0xF2, 0x80, 0x0E, 0xEB, + 0x78, 0x27, 0xB4, 0x05, 0x05, 0x74, 0x02, 0xF2, + 0x80, 0x03, 0x74, 0x04, 0xF2, 0xD3, 0x78, 0x25, + 0xE2, 0x94, 0xFF, 0x18, 0xE2, 0x94, 0x00, 0x50, + 0x63, 0xE4, 0x78, 0x26, 0xF2, 0x78, 0x27, 0xE2, + 0xFF, 0x18, 0xE2, 0xFE, 0xC3, 0x9F, 0x40, 0x02, + 0xA1, 0x7F, 0x74, 0x33, 0x2E, 0xF8, 0xE2, 0x78, + 0x28, 0xF2, 0x90, 0x81, 0xBC, 0xE0, 0x60, 0x2D, + 0x74, 0x37, 0x2E, 0xF8, 0xE2, 0x78, 0x32, 0xF2, + 0xEE, 0xFF, 0x78, 0x25, 0xE2, 0x2F, 0xFF, 0x18, + 0xE2, 0x34, 0x00, 0x8F, 0x82, 0xF5, 0x83, 0xE0, + 0x78, 0x29, 0xF2, 0x78, 0x32, 0xE2, 0xFF, 0xF4, + 0xFE, 0x78, 0x29, 0xE2, 0x5E, 0xFE, 0x18, 0xE2, + 0xFD, 0xEF, 0x5D, 0x4E, 0xF2, 0x78, 0x24, 0x08, + 0xE2, 0xFF, 0x08, 0xE2, 0x2F, 0xFF, 0x78, 0x28, + 0xE2, 0xFD, 0x12, 0x32, 0x1E, 0x78, 0x26, 0xE2, + 0x04, 0xF2, 0x80, 0xA1, 0xD3, 0x78, 0x25, 0xE2, + 0x94, 0xFF, 0x18, 0xE2, 0x94, 0x07, 0x50, 0x69, + 0xE4, 0x78, 0x26, 0xF2, 0x78, 0x27, 0xE2, 0xFF, + 0x18, 0xE2, 0xFE, 0xC3, 0x9F, 0x40, 0x02, 0xA1, + 0x7F, 0x74, 0x33, 0x2E, 0xF8, 0xE2, 0x78, 0x28, + 0xF2, 0x90, 0x81, 0xBC, 0xE0, 0x60, 0x2D, 0x78, + 0x26, 0xE2, 0xFF, 0xFD, 0x18, 0xE2, 0x2D, 0xFD, + 0x18, 0xE2, 0x34, 0x00, 0x8D, 0x82, 0xF5, 0x83, + 0xE0, 0x78, 0x29, 0xF2, 0x74, 0x37, 0x2F, 0xF8, + 0xE2, 0x78, 0x32, 0xF2, 0xE2, 0xFF, 0xF4, 0xFE, + 0x78, 0x29, 0xE2, 0x5E, 0xFE, 0x18, 0xE2, 0xFD, + 0xEF, 0x5D, 0x4E, 0xF2, 0x78, 0x28, 0xE2, 0xFF, + 0x78, 0x26, 0xE2, 0xFD, 0x18, 0xE2, 0x2D, 0xFD, + 0x18, 0xE2, 0x34, 0x00, 0x8D, 0x82, 0xF5, 0x83, + 0xEF, 0xF0, 0x78, 0x26, 0xE2, 0x04, 0xF2, 0x80, + 0x9B, 0x90, 0x81, 0xBC, 0xE0, 0x60, 0x0F, 0x78, + 0x24, 0xE2, 0xFE, 0x08, 0xE2, 0xFF, 0x12, 0x2D, + 0x5C, 0x78, 0x2E, 0x12, 0x44, 0xFE, 0xE4, 0x78, + 0x26, 0xF2, 0x78, 0x27, 0xE2, 0xFF, 0x18, 0xE2, + 0xFE, 0xC3, 0x9F, 0x50, 0x5D, 0x74, 0x33, 0x2E, + 0xF8, 0xE2, 0x78, 0x28, 0xF2, 0x90, 0x81, 0xBC, + 0xE0, 0x60, 0x2B, 0x78, 0x2E, 0x12, 0x44, 0xE5, + 0x78, 0x26, 0xE2, 0xFB, 0x75, 0xF0, 0x08, 0xA4, + 0xF9, 0xF8, 0x12, 0x20, 0xA8, 0x78, 0x29, 0xEF, + 0xF2, 0x74, 0x37, 0x2B, 0xF8, 0xE2, 0x78, 0x32, + 0xF2, 0xE2, 0xFE, 0xF4, 0x5F, 0xFF, 0x78, 0x28, + 0xE2, 0xFD, 0xEE, 0x5D, 0x4F, 0xF2, 0x78, 0x28, + 0xE2, 0xFF, 0x78, 0x26, 0xE2, 0xFD, 0xC3, 0x74, + 0x03, 0x9D, 0xFD, 0xE4, 0x94, 0x00, 0xFC, 0x7B, + 0xFE, 0x74, 0x2A, 0x2D, 0xF9, 0x74, 0x80, 0x3C, + 0xFA, 0xEF, 0x12, 0x1F, 0xEA, 0xE2, 0x04, 0xF2, + 0x80, 0x98, 0x78, 0x2A, 0x12, 0x44, 0xE5, 0x90, + 0x85, 0xBB, 0x12, 0x20, 0xCE, 0x78, 0x24, 0xE2, + 0xFE, 0x08, 0xE2, 0xFF, 0x12, 0x2E, 0xA2, 0x22, + 0x22, 0x90, 0x81, 0xCB, 0x12, 0x45, 0x1F, 0x90, + 0x00, 0x01, 0x12, 0x1F, 0xBD, 0xFF, 0xFE, 0x12, + 0x1F, 0xA4, 0xFD, 0xC3, 0x13, 0x30, 0xE0, 0x12, + 0x90, 0x81, 0xCB, 0x12, 0x45, 0x16, 0x90, 0x00, + 0x02, 0x12, 0x1F, 0xBD, 0x90, 0x81, 0xCF, 0xF0, + 0x80, 0x05, 0x90, 0x81, 0xCF, 0xEF, 0xF0, 0x90, + 0x81, 0xCE, 0xEE, 0xF0, 0x90, 0x81, 0xCF, 0xE0, + 0xFE, 0x90, 0x81, 0xCE, 0xE0, 0xFF, 0xD3, 0x9E, + 0x50, 0x38, 0x90, 0x81, 0xCB, 0x12, 0x45, 0x16, + 0x12, 0x1F, 0xA4, 0x54, 0x01, 0xFE, 0x74, 0xDE, + 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x80, 0xF5, 0x83, + 0xEE, 0xF0, 0x74, 0xDE, 0x2F, 0xF5, 0x82, 0xE4, + 0x34, 0x80, 0xF5, 0x83, 0xE0, 0x70, 0x04, 0xD1, + 0x25, 0x80, 0x07, 0x90, 0x81, 0xCE, 0xE0, 0xFF, + 0xB1, 0x80, 0x90, 0x81, 0xCE, 0xE0, 0x04, 0xF0, + 0x80, 0xBA, 0x90, 0x80, 0xDE, 0xE0, 0x70, 0x24, + 0x90, 0x81, 0x2A, 0xE0, 0x70, 0x04, 0xFF, 0x12, + 0x49, 0x93, 0x90, 0x81, 0x2A, 0xE0, 0x64, 0x0C, + 0x60, 0x02, 0xD1, 0x26, 0x90, 0x81, 0x24, 0xE0, + 0x54, 0xF7, 0xF0, 0x54, 0xEF, 0xF0, 0x54, 0xBF, + 0xF0, 0x54, 0x7F, 0xF0, 0x22, 0x22, 0x90, 0x06, + 0x04, 0xE0, 0x54, 0x7F, 0xF0, 0x90, 0x05, 0x22, + 0xE4, 0xF0, 0x90, 0x81, 0x2A, 0x74, 0x0C, 0xF0, + 0x22, 0x90, 0x81, 0xED, 0xEF, 0xF0, 0xA3, 0xED, + 0xF0, 0xAD, 0x03, 0xAC, 0x02, 0xE4, 0x90, 0x81, + 0xF5, 0xF0, 0xA3, 0xF0, 0x90, 0x01, 0xC4, 0x74, + 0x39, 0xF0, 0x74, 0x66, 0xA3, 0xF0, 0xEC, 0x54, + 0x3F, 0xFC, 0x90, 0x01, 0x40, 0xED, 0xF0, 0xAE, + 0x04, 0xEE, 0xA3, 0xF0, 0x90, 0x81, 0xED, 0xE0, + 0x24, 0x81, 0x60, 0x34, 0x24, 0xDA, 0x60, 0x1C, + 0x24, 0x3C, 0x70, 0x41, 0x90, 0x81, 0xEE, 0xE0, + 0xC4, 0x33, 0x33, 0x33, 0x54, 0x80, 0x90, 0x81, + 0xF2, 0xF0, 0xA3, 0x74, 0x69, 0xF0, 0xA3, 0x74, + 0x80, 0xF0, 0x80, 0x2C, 0x90, 0x81, 0xEE, 0xE0, + 0x54, 0x01, 0x90, 0x81, 0xF2, 0xF0, 0xA3, 0x74, + 0xA5, 0xF0, 0xA3, 0x74, 0x01, 0xF0, 0x80, 0x18, + 0x90, 0x81, 0xEE, 0xE0, 0xC4, 0x54, 0x10, 0x90, + 0x81, 0xF2, 0xF0, 0xA3, 0x74, 0x7F, 0xF0, 0xA3, + 0x74, 0x10, 0xF0, 0x80, 0x03, 0x7F, 0x00, 0x22, + 0x90, 0x81, 0xF3, 0xE0, 0x90, 0x01, 0x06, 0xF0, + 0x90, 0x81, 0xF2, 0xE0, 0x60, 0x0E, 0x90, 0x01, + 0x42, 0xF0, 0x90, 0x81, 0xF1, 0xE0, 0x90, 0x01, + 0x43, 0xF0, 0x80, 0x0D, 0x90, 0x01, 0x43, 0xE4, + 0xF0, 0x90, 0x81, 0xF2, 0xE0, 0x90, 0x01, 0x42, + 0xF0, 0x90, 0x81, 0xF4, 0xE0, 0xFF, 0x90, 0x01, + 0x42, 0xE0, 0x5F, 0xFF, 0x90, 0x81, 0xF2, 0xE0, + 0x6F, 0x60, 0xEE, 0x74, 0x39, 0x04, 0x90, 0x01, + 0xC4, 0xF0, 0x74, 0x66, 0xA3, 0xF0, 0x90, 0x01, + 0x43, 0xE4, 0xF0, 0x7F, 0x01, 0x22, 0xE4, 0x90, + 0x81, 0x6A, 0xF0, 0x90, 0x87, 0x5F, 0xE0, 0x90, + 0x81, 0x69, 0xF0, 0xE4, 0x90, 0x81, 0x76, 0xF0, + 0x90, 0x81, 0x66, 0xF0, 0x90, 0x81, 0x66, 0xE0, + 0xFF, 0xC3, 0x94, 0x40, 0x50, 0x15, 0x74, 0x79, + 0x2F, 0xF5, 0x82, 0xE4, 0x34, 0x81, 0xF5, 0x83, + 0x74, 0xFF, 0xF0, 0x90, 0x81, 0x66, 0xE0, 0x04, + 0xF0, 0x80, 0xE1, 0xE4, 0x90, 0x81, 0x66, 0xF0, + 0x90, 0x81, 0x69, 0xE0, 0xFF, 0x90, 0x81, 0x66, + 0xE0, 0xFE, 0xC3, 0x9F, 0x40, 0x03, 0x02, 0x68, + 0x12, 0x74, 0xDF, 0x2E, 0xF9, 0xE4, 0x34, 0x86, + 0x75, 0x13, 0x01, 0xF5, 0x14, 0x89, 0x15, 0x75, + 0x16, 0x0A, 0x7B, 0x01, 0x7A, 0x81, 0x79, 0x5B, + 0x12, 0x2B, 0xED, 0x90, 0x81, 0x5C, 0xE0, 0xFF, + 0x12, 0x2F, 0x27, 0xEF, 0x04, 0x90, 0x81, 0x76, + 0xF0, 0x90, 0x81, 0x5B, 0xE0, 0xFF, 0xA3, 0xE0, + 0xFD, 0x12, 0x31, 0xEA, 0xEF, 0x24, 0xC8, 0x90, + 0x81, 0x78, 0xF0, 0x75, 0xF0, 0x08, 0xA4, 0xF0, + 0x90, 0x81, 0x5C, 0xE0, 0x54, 0x0F, 0x90, 0x81, + 0x77, 0xF0, 0xE4, 0x90, 0x81, 0x65, 0xF0, 0x90, + 0x81, 0x67, 0xF0, 0x90, 0x81, 0x67, 0xE0, 0xFF, + 0xC3, 0x94, 0x04, 0x50, 0x57, 0x90, 0x81, 0x77, + 0xE0, 0xFE, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, + 0x13, 0xD8, 0xFC, 0x20, 0xE0, 0x3E, 0x90, 0x81, + 0x67, 0xE0, 0x25, 0xE0, 0xFF, 0x90, 0x81, 0x78, + 0xE0, 0x2F, 0x24, 0x79, 0xF9, 0xE4, 0x34, 0x81, + 0xFA, 0x7B, 0x01, 0xC0, 0x03, 0xC0, 0x01, 0x90, + 0x81, 0x65, 0xE0, 0x75, 0xF0, 0x02, 0xA4, 0x24, + 0x5D, 0xF9, 0x74, 0x81, 0x35, 0xF0, 0x8B, 0x13, + 0xF5, 0x14, 0x89, 0x15, 0x75, 0x16, 0x02, 0xD0, + 0x01, 0xD0, 0x03, 0x12, 0x2B, 0xED, 0x90, 0x81, + 0x65, 0xE0, 0x04, 0xF0, 0x90, 0x81, 0x67, 0xE0, + 0x04, 0xF0, 0x80, 0x9F, 0x90, 0x81, 0x76, 0xE0, + 0xFF, 0x90, 0x81, 0x66, 0xE0, 0x2F, 0xF0, 0x02, + 0x67, 0x40, 0xE4, 0x90, 0x81, 0x6A, 0xF0, 0x90, + 0x81, 0x6A, 0xE0, 0xC3, 0x94, 0x40, 0x40, 0x02, + 0x41, 0xAF, 0xE0, 0xFF, 0x24, 0x79, 0xF5, 0x82, + 0xE4, 0x34, 0x81, 0xF5, 0x83, 0xE0, 0x90, 0x81, + 0x6C, 0xF0, 0xE0, 0xFE, 0x54, 0xF0, 0xC4, 0x54, + 0x0F, 0xFD, 0x90, 0x81, 0x6B, 0xF0, 0xEE, 0x54, + 0x0F, 0xFE, 0xA3, 0xF0, 0x74, 0x7A, 0x2F, 0xF5, + 0x82, 0xE4, 0x34, 0x81, 0xF5, 0x83, 0xE0, 0x90, + 0x81, 0x6D, 0xF0, 0xFC, 0xEE, 0xFE, 0xEC, 0xFB, + 0xEB, 0xFF, 0x90, 0x81, 0x72, 0xEE, 0xF0, 0xA3, + 0xEF, 0xF0, 0xED, 0x12, 0x45, 0x28, 0x68, 0x8B, + 0x00, 0x68, 0xC2, 0x01, 0x69, 0x73, 0x02, 0x6A, + 0xA0, 0x03, 0x69, 0x8E, 0x04, 0x69, 0xAF, 0x05, + 0x69, 0xAF, 0x06, 0x69, 0xAF, 0x07, 0x69, 0xAF, + 0x08, 0x6A, 0x33, 0x09, 0x6A, 0x69, 0x0A, 0x00, + 0x00, 0x6A, 0xAF, 0x90, 0x81, 0x6A, 0xE0, 0xFD, + 0x24, 0x7C, 0xF5, 0x82, 0xE4, 0x34, 0x81, 0xF5, + 0x83, 0xE0, 0xFE, 0x74, 0x7B, 0x2D, 0xF5, 0x82, + 0xE4, 0x34, 0x81, 0xF5, 0x83, 0xE0, 0xFD, 0xED, + 0xFF, 0x90, 0x81, 0x74, 0xEE, 0xF0, 0xFC, 0xA3, + 0xEF, 0xF0, 0x90, 0x81, 0x6D, 0xE0, 0xFF, 0x12, + 0x2F, 0x96, 0x90, 0x81, 0x68, 0x74, 0x02, 0xF0, + 0x41, 0xA0, 0x90, 0x81, 0x6A, 0xE0, 0x24, 0x7C, + 0xF5, 0x82, 0xE4, 0x34, 0x81, 0xF5, 0x83, 0xE0, + 0xFF, 0xE4, 0xFC, 0xFD, 0xFE, 0x78, 0x08, 0x12, + 0x20, 0xBB, 0xA8, 0x04, 0xA9, 0x05, 0xAA, 0x06, + 0xAB, 0x07, 0x90, 0x81, 0x6A, 0xE0, 0x24, 0x7B, + 0xF5, 0x82, 0xE4, 0x34, 0x81, 0xF5, 0x83, 0xE0, + 0xFF, 0xE4, 0xFC, 0xFD, 0xFE, 0x12, 0x44, 0xCC, + 0xC0, 0x04, 0xC0, 0x05, 0xC0, 0x06, 0xC0, 0x07, + 0x90, 0x81, 0x6A, 0xE0, 0x24, 0x7D, 0xF5, 0x82, + 0xE4, 0x34, 0x81, 0xF5, 0x83, 0xE0, 0xFF, 0xE4, + 0xFC, 0xFD, 0xFE, 0x78, 0x10, 0x12, 0x20, 0xBB, + 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, 0x00, + 0x12, 0x44, 0xCC, 0xC0, 0x04, 0xC0, 0x05, 0xC0, + 0x06, 0xC0, 0x07, 0x90, 0x81, 0x6A, 0xE0, 0x24, + 0x7E, 0xF5, 0x82, 0xE4, 0x34, 0x81, 0xF5, 0x83, + 0xE0, 0xFF, 0xE4, 0xFC, 0xFD, 0xFE, 0x78, 0x18, + 0x12, 0x20, 0xBB, 0xD0, 0x03, 0xD0, 0x02, 0xD0, + 0x01, 0xD0, 0x00, 0x12, 0x44, 0xCC, 0x90, 0x81, + 0x6E, 0x12, 0x20, 0xCE, 0x90, 0x81, 0x6E, 0x12, + 0x44, 0xD9, 0x90, 0x85, 0x96, 0x12, 0x20, 0xCE, + 0x90, 0x81, 0x72, 0xE0, 0xFE, 0xA3, 0xE0, 0xFF, + 0x12, 0x2E, 0xE4, 0x90, 0x81, 0x68, 0x74, 0x04, + 0xF0, 0x41, 0xA0, 0x90, 0x81, 0x6D, 0xE0, 0xFD, + 0x90, 0x81, 0x6A, 0xE0, 0x24, 0x7B, 0xF5, 0x82, + 0xE4, 0x34, 0x81, 0xF5, 0x83, 0xE0, 0xFB, 0xE4, + 0xFF, 0x12, 0x30, 0xC7, 0x80, 0x19, 0x90, 0x81, + 0x6D, 0xE0, 0xFD, 0x90, 0x81, 0x6A, 0xE0, 0x24, + 0x7B, 0xF5, 0x82, 0xE4, 0x34, 0x81, 0xF5, 0x83, + 0xE0, 0xFB, 0xE4, 0xFF, 0x12, 0x30, 0x6A, 0x90, + 0x81, 0x68, 0x74, 0x01, 0xF0, 0x41, 0xA0, 0x90, + 0x81, 0x68, 0x74, 0x02, 0xF0, 0x90, 0x81, 0x6A, + 0xE0, 0x24, 0x7C, 0xF5, 0x82, 0xE4, 0x34, 0x81, + 0xF5, 0x83, 0xE0, 0xFF, 0xE4, 0xFC, 0xFD, 0xFE, + 0x78, 0x08, 0x12, 0x20, 0xBB, 0xA8, 0x04, 0xA9, + 0x05, 0xAA, 0x06, 0xAB, 0x07, 0x90, 0x81, 0x6A, + 0xE0, 0x24, 0x7B, 0xF5, 0x82, 0xE4, 0x34, 0x81, + 0xF5, 0x83, 0xE0, 0xFF, 0xE4, 0xFC, 0xFD, 0xFE, + 0x12, 0x44, 0xCC, 0xC0, 0x04, 0xC0, 0x05, 0xC0, + 0x06, 0xC0, 0x07, 0x90, 0x81, 0x6C, 0xE0, 0xFF, + 0xE4, 0xFC, 0xFD, 0xFE, 0x78, 0x10, 0x12, 0x20, + 0xBB, 0xD0, 0x03, 0xD0, 0x02, 0xD0, 0x01, 0xD0, + 0x00, 0x12, 0x44, 0xCC, 0x90, 0x81, 0x6E, 0x12, + 0x20, 0xCE, 0x90, 0x81, 0x6B, 0xE0, 0x24, 0xFB, + 0xFF, 0xC0, 0x07, 0x90, 0x81, 0x6E, 0x12, 0x44, + 0xD9, 0x90, 0x81, 0xF9, 0x12, 0x20, 0xCE, 0x90, + 0x81, 0x6D, 0xE0, 0xFD, 0xD0, 0x07, 0x12, 0x55, + 0x1C, 0x80, 0x6D, 0x90, 0x81, 0x68, 0x74, 0x01, + 0xF0, 0x90, 0x81, 0x6A, 0xE0, 0x24, 0x7B, 0xF9, + 0xE4, 0x34, 0x81, 0x75, 0x13, 0x01, 0xF5, 0x14, + 0x89, 0x15, 0x75, 0x16, 0x01, 0x7B, 0xFE, 0x7A, + 0x80, 0x79, 0x33, 0x12, 0x2B, 0xED, 0x90, 0x81, + 0x6D, 0xE0, 0xFF, 0x90, 0x81, 0x6C, 0xE0, 0xFD, + 0xE4, 0x90, 0x81, 0xBC, 0xF0, 0x7B, 0x04, 0x80, + 0x34, 0x90, 0x81, 0x68, 0x74, 0x04, 0xF0, 0x90, + 0x81, 0x6A, 0xE0, 0x24, 0x7B, 0xF9, 0xE4, 0x34, + 0x81, 0x75, 0x13, 0x01, 0xF5, 0x14, 0x89, 0x15, + 0x75, 0x16, 0x04, 0x7B, 0xFE, 0x7A, 0x80, 0x79, + 0x33, 0x12, 0x2B, 0xED, 0x90, 0x81, 0x6D, 0xE0, + 0xFF, 0x90, 0x81, 0x6C, 0xE0, 0xFD, 0xE4, 0x90, + 0x81, 0xBC, 0xF0, 0x7B, 0x06, 0x12, 0x63, 0xE1, + 0x90, 0x81, 0x68, 0xE0, 0x24, 0x02, 0xFF, 0x90, + 0x81, 0x6A, 0xE0, 0x2F, 0xF0, 0x01, 0x17, 0x22, + 0x90, 0x02, 0x09, 0xE0, 0xFD, 0x12, 0x1F, 0xA4, + 0xFE, 0xAF, 0x05, 0xED, 0x2E, 0x90, 0x80, 0x3D, + 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0xBD, 0xFF, + 0xED, 0x2F, 0x90, 0x80, 0x3E, 0xF0, 0x90, 0x00, + 0x02, 0x12, 0x1F, 0xBD, 0xFF, 0xED, 0x2F, 0x90, + 0x80, 0x3F, 0xF0, 0x90, 0x00, 0x03, 0x12, 0x1F, + 0xBD, 0xFF, 0xED, 0x2F, 0x90, 0x80, 0x40, 0xF0, + 0x90, 0x00, 0x04, 0x12, 0x1F, 0xBD, 0xFF, 0xAE, + 0x05, 0xED, 0x2F, 0x90, 0x80, 0x41, 0xF0, 0x22, + 0x90, 0x00, 0x02, 0x12, 0x1F, 0xBD, 0xFF, 0x30, + 0xE0, 0x26, 0x12, 0x1F, 0xA4, 0x90, 0x81, 0x38, + 0xF0, 0x90, 0x00, 0x01, 0x12, 0x1F, 0xBD, 0x90, + 0x81, 0x39, 0xF0, 0xEF, 0x54, 0xFE, 0xFF, 0xA3, + 0xE0, 0x54, 0x01, 0x4F, 0xF0, 0x90, 0x00, 0x03, + 0x12, 0x1F, 0xBD, 0x90, 0x81, 0x3B, 0xF0, 0x22, + 0x90, 0x81, 0x38, 0x74, 0x01, 0xF0, 0xA3, 0x74, + 0x05, 0xF0, 0xA3, 0xE0, 0x54, 0x01, 0x44, 0x28, + 0xF0, 0xA3, 0x74, 0x05, 0xF0, 0x22, 0x12, 0x1F, + 0xA4, 0x90, 0x81, 0x3E, 0xF0, 0x90, 0x81, 0x3E, + 0xE0, 0x90, 0x01, 0xE7, 0xF0, 0x22, 0x12, 0x1F, + 0xA4, 0x90, 0x81, 0x4A, 0xF0, 0x90, 0x00, 0x01, + 0x12, 0x1F, 0xBD, 0x90, 0x81, 0x4B, 0xF0, 0x22, + 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, + 0x81, 0xFD, 0xEE, 0xF0, 0xA3, 0xEF, 0xF0, 0xE4, + 0xA3, 0xF0, 0xA3, 0xF0, 0x90, 0x81, 0xFD, 0xE0, + 0xFE, 0xA3, 0xE0, 0xF5, 0x82, 0x8E, 0x83, 0xE0, + 0x60, 0x2D, 0xC3, 0x90, 0x82, 0x00, 0xE0, 0x94, + 0xE8, 0x90, 0x81, 0xFF, 0xE0, 0x94, 0x03, 0x40, + 0x0B, 0x90, 0x01, 0xC0, 0xE0, 0x44, 0x80, 0xF0, + 0x7F, 0x00, 0x80, 0x15, 0x90, 0x81, 0xFF, 0xE4, + 0x75, 0xF0, 0x01, 0x12, 0x44, 0xA9, 0x7F, 0x0A, + 0x7E, 0x00, 0x12, 0x32, 0xAA, 0x80, 0xC5, 0x7F, + 0x01, 0xD0, 0xD0, 0x92, 0xAF, 0x22, 0xD3, 0x10, + 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x81, 0xD1, + 0x12, 0x45, 0x1F, 0x90, 0x82, 0x0A, 0xE0, 0xFF, + 0x04, 0xF0, 0x90, 0x00, 0x01, 0xEF, 0x12, 0x1F, + 0xFC, 0x7F, 0xAF, 0x7E, 0x01, 0x71, 0x60, 0xEF, + 0x60, 0x3A, 0x90, 0x81, 0xD1, 0x12, 0x45, 0x16, + 0x8B, 0x13, 0x8A, 0x14, 0x89, 0x15, 0x90, 0x00, + 0x0E, 0x12, 0x1F, 0xBD, 0x24, 0x02, 0xF5, 0x16, + 0x7B, 0x01, 0x7A, 0x01, 0x79, 0xA0, 0x12, 0x2B, + 0xED, 0x90, 0x81, 0xD1, 0x12, 0x45, 0x16, 0x90, + 0x00, 0x0E, 0x12, 0x1F, 0xBD, 0x90, 0x01, 0xAE, + 0xF0, 0xA3, 0x74, 0xFF, 0xF0, 0x90, 0x01, 0xCB, + 0xE0, 0x64, 0x80, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, + 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, + 0xE4, 0xFF, 0x90, 0x80, 0xD9, 0xE0, 0xFE, 0x90, + 0x80, 0xD8, 0xE0, 0xFD, 0xB5, 0x06, 0x04, 0x7E, + 0x01, 0x80, 0x02, 0x7E, 0x00, 0xEE, 0x64, 0x01, + 0x60, 0x32, 0x90, 0x01, 0xAF, 0xE0, 0x70, 0x13, + 0xED, 0x75, 0xF0, 0x0F, 0xA4, 0x24, 0x42, 0xF9, + 0x74, 0x80, 0x35, 0xF0, 0xFA, 0x7B, 0x01, 0x71, + 0xB6, 0x7F, 0x01, 0xEF, 0x60, 0x16, 0x90, 0x80, + 0xD8, 0xE0, 0x04, 0xF0, 0xE0, 0x7F, 0x00, 0xB4, + 0x0A, 0x02, 0x7F, 0x01, 0xEF, 0x60, 0x05, 0xE4, + 0x90, 0x80, 0xD8, 0xF0, 0xD0, 0xD0, 0x92, 0xAF, + 0x22, 0x8F, 0x0D, 0x22, 0x8F, 0x0E, 0x22, 0x22, + 0x90, 0x01, 0x34, 0xE0, 0x55, 0x3D, 0xF5, 0x41, + 0xA3, 0xE0, 0x55, 0x3E, 0xF5, 0x42, 0xA3, 0xE0, + 0x55, 0x3F, 0xF5, 0x43, 0xA3, 0xE0, 0x55, 0x40, + 0xF5, 0x44, 0x90, 0x01, 0x34, 0xE5, 0x41, 0xF0, + 0xA3, 0xE5, 0x42, 0xF0, 0xA3, 0xE5, 0x43, 0xF0, + 0xA3, 0xE5, 0x44, 0xF0, 0x22, 0x90, 0x01, 0x3C, + 0xE0, 0x55, 0x45, 0xF5, 0x49, 0xA3, 0xE0, 0x55, + 0x46, 0xF5, 0x4A, 0xA3, 0xE0, 0x55, 0x47, 0xF5, + 0x4B, 0xA3, 0xE0, 0x55, 0x48, 0xF5, 0x4C, 0x90, + 0x01, 0x3C, 0xE5, 0x49, 0xF0, 0xA3, 0xE5, 0x4A, + 0xF0, 0xA3, 0xE5, 0x4B, 0xF0, 0xA3, 0xE5, 0x4C, + 0xF0, 0x53, 0x91, 0xDF, 0x22, 0x90, 0x81, 0x1F, + 0xE0, 0x30, 0xE0, 0x05, 0xE4, 0xA3, 0xF0, 0xA3, + 0xF0, 0x22, 0x90, 0x80, 0xDE, 0xE0, 0x64, 0x01, + 0x70, 0x19, 0x90, 0x81, 0x27, 0xE0, 0x60, 0x13, + 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, 0x01, 0x3C, + 0x74, 0x02, 0x12, 0x4F, 0xF4, 0x90, 0x01, 0x57, + 0x74, 0x05, 0xF0, 0x22, 0x90, 0x80, 0xDE, 0xE0, + 0x64, 0x01, 0x70, 0x26, 0x90, 0x81, 0x27, 0xE0, + 0x60, 0x20, 0x90, 0x01, 0x57, 0xE4, 0xF0, 0x90, + 0x01, 0x3C, 0x74, 0x02, 0xF0, 0x90, 0x81, 0x24, + 0xE0, 0x54, 0xFB, 0xF0, 0x90, 0x81, 0x2B, 0xE0, + 0x54, 0xFD, 0xF0, 0x54, 0x07, 0x70, 0x03, 0x12, + 0x47, 0x2A, 0x22, 0x90, 0x80, 0xDE, 0xE0, 0xB4, + 0x01, 0x14, 0x90, 0x81, 0x27, 0xE0, 0x60, 0x0E, + 0x90, 0x81, 0x26, 0xE0, 0x54, 0x0F, 0x64, 0x02, + 0x60, 0x02, 0x80, 0x03, 0xD1, 0x7F, 0x22, 0x90, + 0x04, 0x1D, 0xE0, 0x70, 0x13, 0x90, 0x80, 0x3E, + 0xE0, 0xFF, 0xE4, 0xFD, 0xB1, 0x69, 0x8E, 0x4E, + 0x8F, 0x4F, 0x90, 0x04, 0x1F, 0x74, 0x20, 0xF0, + 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, + 0x90, 0x82, 0x0E, 0xED, 0xF0, 0x90, 0x82, 0x0D, + 0xEF, 0xF0, 0xE4, 0xFD, 0xFC, 0xF1, 0x37, 0x7C, + 0x00, 0xAD, 0x07, 0x90, 0x82, 0x0D, 0xE0, 0x90, + 0x04, 0x25, 0xF0, 0x90, 0x82, 0x0E, 0xE0, 0x60, + 0x0E, 0x74, 0x0F, 0x2F, 0xF5, 0x82, 0xE4, 0x34, + 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x80, 0xF0, 0xAF, + 0x05, 0x74, 0x08, 0x2F, 0xF5, 0x82, 0xE4, 0x34, + 0xFC, 0xF5, 0x83, 0xE4, 0xF0, 0x74, 0x09, 0x2F, + 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, + 0x54, 0xF0, 0xF0, 0x74, 0x21, 0x2D, 0xF5, 0x82, + 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x54, 0xF7, + 0xF0, 0xAE, 0x04, 0xAF, 0x05, 0xD0, 0xD0, 0x92, + 0xAF, 0x22, 0x8F, 0x4E, 0xF1, 0x4B, 0xBF, 0x01, + 0x18, 0x90, 0x80, 0x40, 0xE0, 0xFF, 0x7D, 0x01, + 0xB1, 0x69, 0xAD, 0x07, 0xAC, 0x06, 0xAF, 0x4E, + 0x12, 0x4F, 0x82, 0x90, 0x04, 0x1F, 0x74, 0x20, + 0xF0, 0x22, 0x90, 0x06, 0xA9, 0xE0, 0x90, 0x81, + 0x4C, 0xF0, 0xE0, 0xFD, 0x54, 0xC0, 0x70, 0x09, + 0x90, 0x81, 0x2B, 0xE0, 0x54, 0xFE, 0xF0, 0x80, + 0x72, 0xED, 0x30, 0xE6, 0x4B, 0x90, 0x81, 0x27, + 0xE0, 0x64, 0x02, 0x70, 0x2A, 0x90, 0x81, 0x24, + 0xE0, 0xFF, 0xC3, 0x13, 0x20, 0xE0, 0x09, 0x90, + 0x81, 0x2B, 0xE0, 0x44, 0x01, 0xF0, 0x80, 0x28, + 0x90, 0x81, 0x26, 0xE0, 0x54, 0x0F, 0x64, 0x01, + 0x70, 0x2D, 0x90, 0x81, 0x2B, 0xE0, 0x44, 0x04, + 0xF0, 0x7F, 0x01, 0xB1, 0xD2, 0x80, 0x20, 0x90, + 0x81, 0x2B, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x81, + 0x26, 0xE0, 0x54, 0x0F, 0x64, 0x02, 0x60, 0x04, + 0xB1, 0x4F, 0x80, 0x0B, 0xD1, 0x7F, 0x80, 0x07, + 0x90, 0x81, 0x2B, 0xE0, 0x54, 0xFE, 0xF0, 0x90, + 0x81, 0x4C, 0xE0, 0x90, 0x81, 0x2B, 0x30, 0xE7, + 0x11, 0x12, 0x4F, 0xF1, 0x90, 0x01, 0x57, 0x74, + 0x05, 0xF0, 0x90, 0x81, 0x24, 0xE0, 0x44, 0x04, + 0xF0, 0x22, 0xE0, 0x54, 0xFD, 0xF0, 0x22, 0x90, + 0x01, 0x5F, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, + 0x08, 0xF0, 0xE4, 0xF5, 0x1D, 0x90, 0x81, 0x3A, + 0xE0, 0xC3, 0x13, 0x54, 0x7F, 0xF5, 0x1E, 0xE4, + 0xFB, 0xFD, 0x7F, 0x5C, 0x7E, 0x01, 0x12, 0x50, + 0x05, 0x90, 0x01, 0x5F, 0x74, 0x05, 0xF0, 0x90, + 0x06, 0x92, 0x74, 0x02, 0xF0, 0x90, 0x81, 0x24, + 0xE0, 0x44, 0x10, 0xF0, 0x90, 0x81, 0x2A, 0xE0, + 0x64, 0x0C, 0x60, 0x0C, 0xE4, 0xFD, 0x7F, 0x0C, + 0x12, 0x47, 0x3D, 0xE4, 0xFF, 0x12, 0x4F, 0x0D, + 0x22, 0xE4, 0x90, 0x81, 0x4C, 0xF0, 0x90, 0x06, + 0xA9, 0xE0, 0x90, 0x81, 0x4C, 0xF0, 0xE0, 0x54, + 0xC0, 0x70, 0x0D, 0x90, 0x81, 0x2B, 0xE0, 0x54, + 0xFE, 0xF0, 0x54, 0xFD, 0xF0, 0x02, 0x47, 0x2A, + 0x90, 0x81, 0x4C, 0xE0, 0x30, 0xE6, 0x21, 0x90, + 0x81, 0x27, 0xE0, 0x64, 0x01, 0x70, 0x20, 0x90, + 0x81, 0x2B, 0xE0, 0x44, 0x01, 0xF0, 0x90, 0x81, + 0x26, 0xE0, 0x54, 0x0F, 0x64, 0x02, 0x60, 0x04, + 0xB1, 0x4F, 0x80, 0x0B, 0xD1, 0x7F, 0x80, 0x07, + 0x90, 0x81, 0x2B, 0xE0, 0x54, 0xFE, 0xF0, 0x90, + 0x81, 0x4C, 0xE0, 0x90, 0x81, 0x2B, 0x30, 0xE7, + 0x11, 0x12, 0x4F, 0xF1, 0x90, 0x01, 0x57, 0x74, + 0x05, 0xF0, 0x90, 0x81, 0x24, 0xE0, 0x44, 0x04, + 0xF0, 0x22, 0xE0, 0x54, 0xFD, 0xF0, 0x22, 0xE4, + 0xFE, 0xEF, 0xC3, 0x13, 0xFD, 0xEF, 0x30, 0xE0, + 0x02, 0x7E, 0x80, 0x90, 0xFD, 0x10, 0xED, 0xF0, + 0xAF, 0x06, 0x22, 0xD3, 0x10, 0xAF, 0x01, 0xC3, + 0xC0, 0xD0, 0x90, 0x04, 0x1D, 0xE0, 0x60, 0x1A, + 0x90, 0x05, 0x22, 0xE0, 0x54, 0x90, 0x60, 0x07, + 0x90, 0x01, 0xC0, 0xE0, 0x44, 0x08, 0xF0, 0x90, + 0x01, 0xC6, 0xE0, 0x30, 0xE1, 0xE4, 0x7F, 0x00, + 0x80, 0x02, 0x7F, 0x01, 0xD0, 0xD0, 0x92, 0xAF, + 0x22, 0x90, 0x81, 0x27, 0xE0, 0x60, 0x03, 0x12, + 0x73, 0xE1, 0x90, 0x81, 0x3F, 0xE0, 0x30, 0xE0, + 0x03, 0x12, 0x49, 0xDD, 0x22, 0x90, 0x81, 0x27, + 0xE0, 0x60, 0x35, 0x90, 0x06, 0x92, 0xE0, 0x30, + 0xE1, 0x24, 0xE4, 0xF5, 0x1D, 0x90, 0x81, 0x3A, + 0xE0, 0xC3, 0x13, 0x54, 0x7F, 0xF5, 0x1E, 0xE4, + 0xFB, 0xFD, 0x7F, 0x5C, 0x7E, 0x01, 0x12, 0x50, + 0x05, 0x90, 0x01, 0x5F, 0x74, 0x05, 0xF0, 0x90, + 0x06, 0x92, 0x74, 0x02, 0xF0, 0x22, 0x90, 0x81, + 0x24, 0xE0, 0x54, 0xEF, 0xF0, 0x12, 0x47, 0x2A, + 0x22, 0x12, 0x71, 0x48, 0x90, 0x81, 0x4D, 0xEF, + 0xF0, 0x90, 0x81, 0x24, 0x30, 0xE0, 0x06, 0xE0, + 0x44, 0x01, 0xF0, 0x80, 0x04, 0xE0, 0x54, 0xFE, + 0xF0, 0x90, 0x81, 0x4D, 0xE0, 0x30, 0xE6, 0x11, + 0x90, 0x01, 0x2F, 0xE0, 0x30, 0xE7, 0x04, 0xE4, + 0xF0, 0x80, 0x06, 0x90, 0x01, 0x2F, 0x74, 0x80, + 0xF0, 0x90, 0x81, 0x24, 0xE0, 0x30, 0xE0, 0x1A, + 0x90, 0x81, 0x32, 0xE4, 0xF0, 0xA3, 0x74, 0x07, + 0xF0, 0x90, 0x81, 0x32, 0xA3, 0xE0, 0x90, 0x05, + 0x58, 0xF0, 0x90, 0x04, 0xEC, 0xE0, 0x54, 0xDD, + 0xF0, 0x22, 0x90, 0x04, 0xEC, 0xE0, 0x44, 0x22, + 0xF0, 0x22, 0x90, 0x81, 0x4A, 0xE0, 0x60, 0x0F, + 0xE4, 0xF0, 0x90, 0x05, 0x53, 0xE0, 0x44, 0x01, + 0xF0, 0x90, 0x05, 0xFD, 0xE0, 0x04, 0xF0, 0x22, + 0x90, 0x81, 0x24, 0xE0, 0xFF, 0xC4, 0x13, 0x13, + 0x54, 0x03, 0x30, 0xE0, 0x27, 0xEF, 0x54, 0xBF, + 0xF0, 0x90, 0x04, 0xE0, 0xE0, 0x90, 0x81, 0x25, + 0x30, 0xE0, 0x06, 0xE0, 0x44, 0x01, 0xF0, 0x80, + 0x10, 0xE0, 0x54, 0xFE, 0xF0, 0x90, 0x01, 0xB9, + 0x74, 0x01, 0xF0, 0x90, 0x01, 0xB8, 0x74, 0x04, + 0xF0, 0x12, 0x47, 0x2A, 0xE4, 0xFF, 0x90, 0x81, + 0x45, 0xE0, 0x30, 0xE0, 0x48, 0x90, 0x81, 0x49, + 0xE0, 0xFD, 0x60, 0x41, 0x74, 0x01, 0x7E, 0x00, + 0xA8, 0x07, 0x08, 0x80, 0x05, 0xC3, 0x33, 0xCE, + 0x33, 0xCE, 0xD8, 0xF9, 0xFF, 0x90, 0x04, 0xE0, + 0xE0, 0xFB, 0xEF, 0x5B, 0x60, 0x06, 0xE4, 0x90, + 0x81, 0x49, 0xF0, 0x22, 0x90, 0x81, 0x47, 0xE0, + 0xD3, 0x9D, 0x50, 0x10, 0x90, 0x01, 0xC7, 0x74, + 0x10, 0xF0, 0x11, 0xBE, 0x90, 0x81, 0x45, 0xE0, + 0x54, 0xFE, 0xF0, 0x22, 0x12, 0x4F, 0x0B, 0x90, + 0x81, 0x49, 0xE0, 0x04, 0xF0, 0x22, 0x90, 0x80, + 0x3C, 0xE0, 0x64, 0x02, 0x60, 0x07, 0x90, 0x06, + 0x90, 0xE0, 0x44, 0x01, 0xF0, 0x22, 0x90, 0x81, + 0x24, 0xE0, 0xFF, 0xC4, 0x13, 0x13, 0x13, 0x54, + 0x01, 0x30, 0xE0, 0x2C, 0xEF, 0x54, 0x7F, 0xF0, + 0x90, 0x04, 0xE0, 0xE0, 0x90, 0x81, 0x25, 0x30, + 0xE1, 0x06, 0xE0, 0x44, 0x02, 0xF0, 0x80, 0x0F, + 0xE0, 0x54, 0xFD, 0xF0, 0x90, 0x01, 0xB9, 0x74, + 0x01, 0xF0, 0x90, 0x01, 0xB8, 0x04, 0xF0, 0x90, + 0x81, 0x27, 0xE0, 0x60, 0x03, 0x12, 0x47, 0x2A, + 0x7F, 0x01, 0x01, 0x6E, 0xC3, 0xEE, 0x94, 0x01, + 0x40, 0x0A, 0x0D, 0xED, 0x13, 0x90, 0xFD, 0x10, + 0xF0, 0xE4, 0x2F, 0xFF, 0x22, 0xC3, 0xEE, 0x94, + 0x01, 0x40, 0x24, 0x90, 0xFD, 0x11, 0xE0, 0x6D, + 0x70, 0x1A, 0x90, 0x01, 0x17, 0xE0, 0xB5, 0x05, + 0x0D, 0x90, 0x01, 0xE4, 0x74, 0x77, 0xF0, 0x90, + 0xFD, 0x11, 0xE4, 0xF0, 0x80, 0x06, 0xED, 0x04, + 0x90, 0xFD, 0x11, 0xF0, 0xE4, 0x2F, 0xFF, 0x22, + 0xE4, 0x90, 0x81, 0x4E, 0xF0, 0xA3, 0xF0, 0xA3, + 0xF0, 0x90, 0x00, 0x83, 0xE0, 0x90, 0x81, 0x4E, + 0xF0, 0x90, 0x00, 0x83, 0xE0, 0xFE, 0x90, 0x81, + 0x4E, 0xE0, 0xFF, 0xB5, 0x06, 0x01, 0x22, 0xC3, + 0x90, 0x81, 0x50, 0xE0, 0x94, 0x64, 0x90, 0x81, + 0x4F, 0xE0, 0x94, 0x00, 0x40, 0x0D, 0x90, 0x01, + 0xC0, 0xE0, 0x44, 0x40, 0xF0, 0x90, 0x81, 0x4E, + 0xE0, 0xFF, 0x22, 0x90, 0x81, 0x4F, 0xE4, 0x75, + 0xF0, 0x01, 0x12, 0x44, 0xA9, 0x80, 0xC2, 0x74, + 0x45, 0x2F, 0xF8, 0xE6, 0xFE, 0xED, 0xF4, 0x5E, + 0xFE, 0xF6, 0x74, 0x38, 0x2F, 0xF5, 0x82, 0xE4, + 0x34, 0x01, 0xF5, 0x83, 0xEE, 0xF0, 0x22, 0xD3, + 0x10, 0xAF, 0x01, 0xC3, 0xC0, 0xD0, 0x90, 0x82, + 0x12, 0xED, 0xF0, 0x90, 0x82, 0x11, 0xEF, 0xF0, + 0xD3, 0x94, 0x07, 0x50, 0x70, 0xE0, 0xFF, 0x74, + 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, + 0xD8, 0xFC, 0xF4, 0xFF, 0x90, 0x00, 0x47, 0xE0, + 0x5F, 0xFD, 0x7F, 0x47, 0x12, 0x32, 0x1E, 0x90, + 0x82, 0x11, 0xE0, 0xFF, 0x74, 0x01, 0xA8, 0x07, + 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, 0xFF, + 0x90, 0x00, 0x46, 0xE0, 0x4F, 0xFD, 0x7F, 0x46, + 0x12, 0x32, 0x1E, 0x90, 0x82, 0x12, 0xE0, 0x60, + 0x18, 0x90, 0x82, 0x11, 0xE0, 0xFF, 0x74, 0x01, + 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, + 0xFC, 0xFF, 0x90, 0x00, 0x45, 0xE0, 0x4F, 0x80, + 0x17, 0x90, 0x82, 0x11, 0xE0, 0xFF, 0x74, 0x01, + 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, + 0xFC, 0xF4, 0xFF, 0x90, 0x00, 0x45, 0xE0, 0x5F, + 0xFD, 0x7F, 0x45, 0x80, 0x7E, 0x90, 0x82, 0x11, + 0xE0, 0x24, 0xF8, 0xF0, 0xE0, 0x24, 0x04, 0xFF, + 0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, + 0x33, 0xD8, 0xFC, 0xF4, 0xFF, 0x90, 0x00, 0x43, + 0xE0, 0x5F, 0xFD, 0x7F, 0x43, 0x12, 0x32, 0x1E, + 0x90, 0x82, 0x11, 0xE0, 0xFF, 0x74, 0x01, 0xA8, + 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, 0xFC, + 0xFF, 0x90, 0x00, 0x43, 0xE0, 0x4F, 0xFD, 0x7F, + 0x43, 0x12, 0x32, 0x1E, 0x90, 0x82, 0x12, 0xE0, + 0x60, 0x1D, 0x90, 0x82, 0x11, 0xE0, 0x24, 0x04, + 0xFF, 0x74, 0x01, 0xA8, 0x07, 0x08, 0x80, 0x02, + 0xC3, 0x33, 0xD8, 0xFC, 0xFF, 0x90, 0x00, 0x42, + 0xE0, 0x4F, 0xFD, 0x7F, 0x42, 0x80, 0x1C, 0x90, + 0x82, 0x11, 0xE0, 0x24, 0x04, 0xFF, 0x74, 0x01, + 0xA8, 0x07, 0x08, 0x80, 0x02, 0xC3, 0x33, 0xD8, + 0xFC, 0xF4, 0xFF, 0x90, 0x00, 0x42, 0xE0, 0x5F, + 0xFD, 0x7F, 0x42, 0x12, 0x32, 0x1E, 0xD0, 0xD0, + 0x92, 0xAF, 0x22, 0x90, 0x81, 0x24, 0xE0, 0x54, + 0xFB, 0xF0, 0xE4, 0x90, 0x81, 0x30, 0xF0, 0x90, + 0x81, 0x2B, 0xF0, 0x22, 0xEF, 0x24, 0xFE, 0x60, + 0x0C, 0x04, 0x70, 0x28, 0x90, 0x81, 0x2D, 0x74, + 0x01, 0xF0, 0xA3, 0xF0, 0x22, 0xED, 0x70, 0x0A, + 0x90, 0x81, 0x3B, 0xE0, 0x90, 0x81, 0x2D, 0xF0, + 0x80, 0x05, 0x90, 0x81, 0x2D, 0xED, 0xF0, 0x90, + 0x81, 0x2D, 0xE0, 0xA3, 0xF0, 0x90, 0x81, 0x25, + 0xE0, 0x44, 0x08, 0xF0, 0x22, 0x12, 0x4E, 0xAB, + 0xEF, 0x64, 0x01, 0x60, 0x08, 0x90, 0x01, 0xB8, + 0x74, 0x01, 0xF0, 0x80, 0x67, 0x90, 0x81, 0x2B, + 0xE0, 0xFF, 0x54, 0x03, 0x60, 0x08, 0x90, 0x01, + 0xB8, 0x74, 0x02, 0xF0, 0x80, 0x56, 0x90, 0x81, + 0x29, 0xE0, 0xFE, 0xE4, 0xC3, 0x9E, 0x50, 0x08, + 0x90, 0x01, 0xB8, 0x74, 0x04, 0xF0, 0x80, 0x44, + 0xEF, 0x30, 0xE2, 0x08, 0x90, 0x01, 0xB8, 0x74, + 0x08, 0xF0, 0x80, 0x38, 0x90, 0x81, 0x2B, 0xE0, + 0x30, 0xE4, 0x08, 0x90, 0x01, 0xB8, 0x74, 0x10, + 0xF0, 0x80, 0x29, 0x90, 0x81, 0x25, 0xE0, 0x13, + 0x13, 0x54, 0x3F, 0x20, 0xE0, 0x08, 0x90, 0x01, + 0xB8, 0x74, 0x20, 0xF0, 0x80, 0x16, 0x90, 0x81, + 0x3E, 0xE0, 0x60, 0x08, 0x90, 0x01, 0xB8, 0x74, + 0x80, 0xF0, 0x80, 0x08, 0x90, 0x01, 0xB8, 0xE4, + 0xF0, 0x7F, 0x01, 0x22, 0x90, 0x01, 0xB9, 0x74, + 0x04, 0xF0, 0x7F, 0x00, 0x22, 0xEF, 0x60, 0x42, + 0x90, 0x80, 0xDE, 0xE0, 0x64, 0x01, 0x70, 0x3A, + 0x90, 0x81, 0x25, 0xE0, 0x54, 0xFE, 0xF0, 0x90, + 0x05, 0x22, 0x74, 0x0F, 0xF0, 0x90, 0x06, 0x04, + 0xE0, 0x54, 0xBF, 0xF0, 0xE4, 0xFF, 0x12, 0x4F, + 0x0D, 0xBF, 0x01, 0x12, 0x90, 0x81, 0x24, 0xE0, + 0x44, 0x40, 0xF0, 0x90, 0x81, 0x2A, 0x74, 0x06, + 0xF0, 0x90, 0x81, 0x23, 0xF0, 0x22, 0x90, 0x01, + 0xB9, 0x74, 0x01, 0xF0, 0x90, 0x01, 0xB8, 0x74, + 0x08, 0xF0, 0x22, 0x90, 0x05, 0x22, 0x74, 0x6F, + 0xF0, 0x90, 0x05, 0x27, 0xE0, 0x54, 0xBF, 0xF0, + 0x90, 0x81, 0x2A, 0x74, 0x02, 0xF0, 0x90, 0x81, + 0x23, 0xF0, 0x22, 0x12, 0x54, 0x65, 0x90, 0x81, + 0x2A, 0x74, 0x0C, 0xF0, 0x90, 0x81, 0x23, 0xF0, + 0x22, 0x90, 0x81, 0x24, 0xE0, 0xFF, 0x13, 0x13, + 0x54, 0x3F, 0x30, 0xE0, 0x11, 0xEF, 0x54, 0xFB, + 0xF0, 0x90, 0x81, 0x2B, 0xE0, 0x54, 0xFD, 0xF0, + 0x54, 0x07, 0x70, 0x42, 0x80, 0x3D, 0x90, 0x81, + 0x30, 0xE0, 0x04, 0xF0, 0x90, 0x81, 0x2B, 0xE0, + 0x54, 0xEF, 0xF0, 0x90, 0x81, 0x30, 0xE0, 0xFF, + 0xB4, 0x01, 0x02, 0x80, 0x04, 0xEF, 0xB4, 0x02, + 0x06, 0x90, 0x05, 0x58, 0xE0, 0x04, 0xF0, 0x90, + 0x81, 0x38, 0xE0, 0xFF, 0x90, 0x81, 0x30, 0xE0, + 0xD3, 0x9F, 0x40, 0x0F, 0x90, 0x80, 0xDE, 0xE0, + 0xB4, 0x01, 0x0B, 0x90, 0x81, 0x25, 0xE0, 0x54, + 0xFB, 0xF0, 0x22, 0x12, 0x47, 0x2A, 0x22, 0x22, + 0x90, 0x05, 0x2B, 0xE0, 0x7F, 0x00, 0x30, 0xE7, + 0x02, 0x7F, 0x01, 0x22, 0x90, 0x05, 0x22, 0x74, + 0xFF, 0xF0, 0x90, 0x05, 0x27, 0xE0, 0x44, 0x40, + 0xF0, 0x90, 0x81, 0x22, 0x74, 0x03, 0xF0, 0x22, + 0x90, 0x05, 0x27, 0xE0, 0x44, 0x40, 0xF0, 0x12, + 0x49, 0xDD, 0x90, 0x81, 0x22, 0x74, 0x02, 0xF0, + 0x22, 0x12, 0x49, 0xE3, 0x90, 0x81, 0x22, 0x74, + 0x02, 0xF0, 0x22, 0x90, 0x05, 0x22, 0x74, 0x6F, + 0xF0, 0x90, 0x05, 0x27, 0xE0, 0x54, 0xBF, 0xF0, + 0x90, 0x81, 0x22, 0x74, 0x04, 0xF0, 0x22, 0xAE, + 0x07, 0x12, 0x51, 0x73, 0xBF, 0x01, 0x12, 0x90, + 0x81, 0x23, 0xE0, 0x64, 0x02, 0x60, 0x0A, 0xAF, + 0x06, 0x7D, 0x01, 0x12, 0x47, 0x3D, 0x7F, 0x01, + 0x22, 0x7F, 0x00, 0x22, 0x90, 0x01, 0x57, 0xE0, + 0x60, 0x48, 0xE4, 0xF0, 0x90, 0x01, 0x3C, 0x74, + 0x02, 0xF0, 0x90, 0x81, 0x24, 0xE0, 0xFF, 0x13, + 0x13, 0x54, 0x3F, 0x30, 0xE0, 0x0C, 0xEF, 0x54, + 0xFB, 0xF0, 0x90, 0x81, 0x2B, 0xE0, 0x54, 0xFD, + 0xF0, 0x22, 0x90, 0x81, 0x30, 0xE0, 0x04, 0xF0, + 0x90, 0x81, 0x2B, 0xE0, 0x54, 0xEF, 0xF0, 0x90, + 0x81, 0x38, 0xE0, 0xFF, 0x90, 0x81, 0x30, 0xE0, + 0xD3, 0x9F, 0x40, 0x0E, 0x90, 0x80, 0xDE, 0xE0, + 0xB4, 0x01, 0x07, 0x90, 0x81, 0x25, 0xE0, 0x54, + 0xFB, 0xF0, 0x22, 0x90, 0x80, 0x3F, 0xE0, 0xFF, + 0x7D, 0x01, 0x12, 0x6D, 0x69, 0x8E, 0x54, 0x8F, + 0x55, 0xAD, 0x55, 0xAC, 0x54, 0xAF, 0x53, 0x12, + 0x4F, 0x82, 0xAF, 0x55, 0xAE, 0x54, 0x90, 0x04, + 0x80, 0xE0, 0x54, 0x0F, 0xFD, 0xAC, 0x07, 0x74, + 0x11, 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, + 0x83, 0xE0, 0x44, 0x01, 0xF0, 0x74, 0x11, 0x2C, + 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, + 0x54, 0xFB, 0xF0, 0xAC, 0x07, 0x74, 0x16, 0x2C, + 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, + 0x44, 0xFA, 0xF0, 0x74, 0x15, 0x2C, 0xF5, 0x82, + 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x1F, + 0xF0, 0xAC, 0x07, 0x74, 0x06, 0x2C, 0xF5, 0x82, + 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xE0, 0x44, 0x0F, + 0xF0, 0x90, 0x04, 0x53, 0xE4, 0xF0, 0x90, 0x04, + 0x52, 0xF0, 0x90, 0x04, 0x51, 0x74, 0xFF, 0xF0, + 0x90, 0x04, 0x50, 0x74, 0xFD, 0xF0, 0x74, 0x14, + 0x2C, 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, + 0xE0, 0x54, 0xC0, 0x4D, 0xFD, 0x74, 0x14, 0x2F, + 0xF5, 0x82, 0xE4, 0x34, 0xFC, 0xF5, 0x83, 0xED, + 0xF0, 0x22, 0xAB, 0x07, 0xAA, 0x06, 0xED, 0x2B, + 0xFB, 0xE4, 0x3A, 0xFA, 0xC3, 0x90, 0x80, 0xDB, + 0xE0, 0x9B, 0x90, 0x80, 0xDA, 0xE0, 0x9A, 0x50, + 0x13, 0xA3, 0xE0, 0x24, 0x01, 0xFF, 0x90, 0x80, + 0xDA, 0xE0, 0x34, 0x00, 0xFE, 0xC3, 0xEB, 0x9F, + 0xFB, 0xEA, 0x9E, 0xFA, 0xEA, 0x90, 0xFD, 0x11, + 0xF0, 0xAF, 0x03, 0x74, 0x00, 0x2F, 0xF5, 0x82, + 0xE4, 0x34, 0xFB, 0xF5, 0x83, 0xE0, 0xFF, 0x22, + 0x12, 0x1F, 0xA4, 0xFF, 0x54, 0x01, 0xFE, 0x90, + 0x81, 0x42, 0xE0, 0x54, 0xFE, 0x4E, 0xF0, 0xEF, + 0xC3, 0x13, 0x30, 0xE0, 0x0A, 0x90, 0x00, 0x01, + 0x12, 0x1F, 0xBD, 0x90, 0x81, 0x43, 0xF0, 0x22, + 0x90, 0x81, 0x45, 0xE0, 0x30, 0xE0, 0x2D, 0x90, + 0x81, 0x48, 0xE0, 0x04, 0xF0, 0xE0, 0xFF, 0x90, + 0x81, 0x46, 0xE0, 0xB5, 0x07, 0x1E, 0x90, 0x06, + 0x92, 0xE0, 0x54, 0x1C, 0x70, 0x0B, 0x12, 0x4F, + 0x0B, 0x90, 0x81, 0x49, 0xE0, 0x04, 0xF0, 0x80, + 0x06, 0x90, 0x06, 0x92, 0x74, 0x1C, 0xF0, 0xE4, + 0x90, 0x81, 0x48, 0xF0, 0x22, 0x00, 0xBB, 0x8E, +}; diff --git a/drivers/staging/rtl8188eu/hal/Hal8188EPwrSeq.c b/drivers/staging/rtl8188eu/hal/Hal8188EPwrSeq.c new file mode 100644 index 0000000..fc23bf1 --- /dev/null +++ b/drivers/staging/rtl8188eu/hal/Hal8188EPwrSeq.c @@ -0,0 +1,86 @@ +/****************************************************************************** + * + * Copyright(c) 2007 - 2011 Realtek Corporation. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of version 2 of the GNU General Public License as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License along with + * this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110, USA + * + * + ******************************************************************************/ + +#include "Hal8188EPwrSeq.h" +#include + +/* + drivers should parse below arrays and do the corresponding actions +*/ +/* 3 Power on Array */ +struct wl_pwr_cfg rtl8188E_power_on_flow[RTL8188E_TRANS_CARDEMU_TO_ACT_STEPS + RTL8188E_TRANS_END_STEPS] = { + RTL8188E_TRANS_CARDEMU_TO_ACT + RTL8188E_TRANS_END +}; + +/* 3Radio off Array */ +struct wl_pwr_cfg rtl8188E_radio_off_flow[RTL8188E_TRANS_ACT_TO_CARDEMU_STEPS + RTL8188E_TRANS_END_STEPS] = { + RTL8188E_TRANS_ACT_TO_CARDEMU + RTL8188E_TRANS_END +}; + +/* 3Card Disable Array */ +struct wl_pwr_cfg rtl8188E_card_disable_flow[RTL8188E_TRANS_ACT_TO_CARDEMU_STEPS + RTL8188E_TRANS_CARDEMU_TO_PDN_STEPS + RTL8188E_TRANS_END_STEPS] = { + RTL8188E_TRANS_ACT_TO_CARDEMU + RTL8188E_TRANS_CARDEMU_TO_CARDDIS + RTL8188E_TRANS_END +}; + +/* 3 Card Enable Array */ +struct wl_pwr_cfg rtl8188E_card_enable_flow[RTL8188E_TRANS_ACT_TO_CARDEMU_STEPS + RTL8188E_TRANS_CARDEMU_TO_PDN_STEPS + RTL8188E_TRANS_END_STEPS] = { + RTL8188E_TRANS_CARDDIS_TO_CARDEMU + RTL8188E_TRANS_CARDEMU_TO_ACT + RTL8188E_TRANS_END +}; + +/* 3Suspend Array */ +struct wl_pwr_cfg rtl8188E_suspend_flow[RTL8188E_TRANS_ACT_TO_CARDEMU_STEPS + RTL8188E_TRANS_CARDEMU_TO_SUS_STEPS + RTL8188E_TRANS_END_STEPS] = { + RTL8188E_TRANS_ACT_TO_CARDEMU + RTL8188E_TRANS_CARDEMU_TO_SUS + RTL8188E_TRANS_END +}; + +/* 3 Resume Array */ +struct wl_pwr_cfg rtl8188E_resume_flow[RTL8188E_TRANS_ACT_TO_CARDEMU_STEPS + RTL8188E_TRANS_CARDEMU_TO_SUS_STEPS + RTL8188E_TRANS_END_STEPS] = { + RTL8188E_TRANS_SUS_TO_CARDEMU + RTL8188E_TRANS_CARDEMU_TO_ACT + RTL8188E_TRANS_END +}; + +/* 3HWPDN Array */ +struct wl_pwr_cfg rtl8188E_hwpdn_flow[RTL8188E_TRANS_ACT_TO_CARDEMU_STEPS + RTL8188E_TRANS_CARDEMU_TO_PDN_STEPS + RTL8188E_TRANS_END_STEPS] = { + RTL8188E_TRANS_ACT_TO_CARDEMU + RTL8188E_TRANS_CARDEMU_TO_PDN + RTL8188E_TRANS_END +}; + +/* 3 Enter LPS */ +struct wl_pwr_cfg rtl8188E_enter_lps_flow[RTL8188E_TRANS_ACT_TO_LPS_STEPS + RTL8188E_TRANS_END_STEPS] = { + /* FW behavior */ + RTL8188E_TRANS_ACT_TO_LPS + RTL8188E_TRANS_END +}; + +/* 3 Leave LPS */ +struct wl_pwr_cfg rtl8188E_leave_lps_flow[RTL8188E_TRANS_LPS_TO_ACT_STEPS + RTL8188E_TRANS_END_STEPS] = { + /* FW behavior */ + RTL8188E_TRANS_LPS_TO_ACT + RTL8188E_TRANS_END +}; diff --git a/drivers/staging/rtl8188eu/hal/Hal8188ERateAdaptive.c b/drivers/staging/rtl8188eu/hal/Hal8188ERateAdaptive.c new file mode 100644 index 0000000..aaa2617 --- /dev/null +++ b/drivers/staging/rtl8188eu/hal/Hal8188ERateAdaptive.c @@ -0,0 +1,760 @@ +/*++ +Copyright (c) Realtek Semiconductor Corp. All rights reserved. + +Module Name: + RateAdaptive.c + +Abstract: + Implement Rate Adaptive functions for common operations. + +Major Change History: + When Who What + ---------- --------------- ------------------------------- + 2011-08-12 Page Create. + +--*/ +#include "odm_precomp.h" + +/* Rate adaptive parameters */ + +static u8 RETRY_PENALTY[PERENTRY][RETRYSIZE+1] = { + {5, 4, 3, 2, 0, 3}, /* 92 , idx = 0 */ + {6, 5, 4, 3, 0, 4}, /* 86 , idx = 1 */ + {6, 5, 4, 2, 0, 4}, /* 81 , idx = 2 */ + {8, 7, 6, 4, 0, 6}, /* 75 , idx = 3 */ + {10, 9, 8, 6, 0, 8}, /* 71 , idx = 4 */ + {10, 9, 8, 4, 0, 8}, /* 66 , idx = 5 */ + {10, 9, 8, 2, 0, 8}, /* 62 , idx = 6 */ + {10, 9, 8, 0, 0, 8}, /* 59 , idx = 7 */ + {18, 17, 16, 8, 0, 16}, /* 53 , idx = 8 */ + {26, 25, 24, 16, 0, 24}, /* 50 , idx = 9 */ + {34, 33, 32, 24, 0, 32}, /* 47 , idx = 0x0a */ + {34, 31, 28, 20, 0, 32}, /* 43 , idx = 0x0b */ + {34, 31, 27, 18, 0, 32}, /* 40 , idx = 0x0c */ + {34, 31, 26, 16, 0, 32}, /* 37 , idx = 0x0d */ + {34, 30, 22, 16, 0, 32}, /* 32 , idx = 0x0e */ + {34, 30, 24, 16, 0, 32}, /* 26 , idx = 0x0f */ + {49, 46, 40, 16, 0, 48}, /* 20 , idx = 0x10 */ + {49, 45, 32, 0, 0, 48}, /* 17 , idx = 0x11 */ + {49, 45, 22, 18, 0, 48}, /* 15 , idx = 0x12 */ + {49, 40, 24, 16, 0, 48}, /* 12 , idx = 0x13 */ + {49, 32, 18, 12, 0, 48}, /* 9 , idx = 0x14 */ + {49, 22, 18, 14, 0, 48}, /* 6 , idx = 0x15 */ + {49, 16, 16, 0, 0, 48} + }; /* 3, idx = 0x16 */ + +static u8 PT_PENALTY[RETRYSIZE+1] = {34, 31, 30, 24, 0, 32}; + +/* wilson modify */ +static u8 RETRY_PENALTY_IDX[2][RATESIZE] = { + {4, 4, 4, 5, 4, 4, 5, 7, 7, 7, 8, 0x0a, /* SS>TH */ + 4, 4, 4, 4, 6, 0x0a, 0x0b, 0x0d, + 5, 5, 7, 7, 8, 0x0b, 0x0d, 0x0f}, /* 0329 R01 */ + {0x0a, 0x0a, 0x0b, 0x0c, 0x0a, + 0x0a, 0x0b, 0x0c, 0x0d, 0x10, 0x13, 0x14, /* SSTH */ + 0x0f, 0x10, 0x10, 0x12, 0x12, 0x13, 0x14, 0x15, + 0x11, 0x11, 0x12, 0x13, 0x13, 0x13, 0x14, 0x15}; + +static u8 RSSI_THRESHOLD[RATESIZE] = { + 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0x24, 0x26, 0x2a, + 0x18, 0x1a, 0x1d, 0x1f, 0x21, 0x27, 0x29, 0x2a, + 0, 0, 0, 0x1f, 0x23, 0x28, 0x2a, 0x2c}; + +static u16 N_THRESHOLD_HIGH[RATESIZE] = { + 4, 4, 8, 16, + 24, 36, 48, 72, 96, 144, 192, 216, + 60, 80, 100, 160, 240, 400, 560, 640, + 300, 320, 480, 720, 1000, 1200, 1600, 2000}; +static u16 N_THRESHOLD_LOW[RATESIZE] = { + 2, 2, 4, 8, + 12, 18, 24, 36, 48, 72, 96, 108, + 30, 40, 50, 80, 120, 200, 280, 320, + 150, 160, 240, 360, 500, 600, 800, 1000}; + +static u8 DROPING_NECESSARY[RATESIZE] = { + 1, 1, 1, 1, + 1, 2, 3, 4, 5, 6, 7, 8, + 1, 2, 3, 4, 5, 6, 7, 8, + 5, 6, 7, 8, 9, 10, 11, 12}; + +static u8 PendingForRateUpFail[5] = {2, 10, 24, 40, 60}; +static u16 DynamicTxRPTTiming[6] = { + 0x186a, 0x30d4, 0x493e, 0x61a8, 0x7a12 , 0x927c}; /* 200ms-1200ms */ + +/* End Rate adaptive parameters */ + +static void odm_SetTxRPTTiming_8188E( + struct odm_dm_struct *dm_odm, + struct odm_ra_info *pRaInfo, + u8 extend + ) +{ + u8 idx = 0; + + for (idx = 0; idx < 5; idx++) + if (DynamicTxRPTTiming[idx] == pRaInfo->RptTime) + break; + + if (extend == 0) { /* back to default timing */ + idx = 0; /* 200ms */ + } else if (extend == 1) {/* increase the timing */ + idx += 1; + if (idx > 5) + idx = 5; + } else if (extend == 2) {/* decrease the timing */ + if (idx != 0) + idx -= 1; + } + pRaInfo->RptTime = DynamicTxRPTTiming[idx]; + + ODM_RT_TRACE(dm_odm, ODM_COMP_RATE_ADAPTIVE, ODM_DBG_LOUD, ("pRaInfo->RptTime = 0x%x\n", pRaInfo->RptTime)); +} + +static int odm_RateDown_8188E(struct odm_dm_struct *dm_odm, struct odm_ra_info *pRaInfo) +{ + u8 RateID, LowestRate, HighestRate; + u8 i; + + ODM_RT_TRACE(dm_odm, ODM_COMP_RATE_ADAPTIVE, ODM_DBG_TRACE, ("=====>odm_RateDown_8188E()\n")); + if (NULL == pRaInfo) { + ODM_RT_TRACE(dm_odm, ODM_COMP_RATE_ADAPTIVE, ODM_DBG_LOUD, ("odm_RateDown_8188E(): pRaInfo is NULL\n")); + return -1; + } + RateID = pRaInfo->PreRate; + LowestRate = pRaInfo->LowestRate; + HighestRate = pRaInfo->HighestRate; + + ODM_RT_TRACE(dm_odm, ODM_COMP_RATE_ADAPTIVE, ODM_DBG_TRACE, + (" RateID =%d LowestRate =%d HighestRate =%d RateSGI =%d\n", + RateID, LowestRate, HighestRate, pRaInfo->RateSGI)); + if (RateID > HighestRate) { + RateID = HighestRate; + } else if (pRaInfo->RateSGI) { + pRaInfo->RateSGI = 0; + } else if (RateID > LowestRate) { + if (RateID > 0) { + for (i = RateID-1; i > LowestRate; i--) { + if (pRaInfo->RAUseRate & BIT(i)) { + RateID = i; + goto RateDownFinish; + } + } + } + } else if (RateID <= LowestRate) { + RateID = LowestRate; + } +RateDownFinish: + if (pRaInfo->RAWaitingCounter == 1) { + pRaInfo->RAWaitingCounter += 1; + pRaInfo->RAPendingCounter += 1; + } else if (pRaInfo->RAWaitingCounter == 0) { + ; + } else { + pRaInfo->RAWaitingCounter = 0; + pRaInfo->RAPendingCounter = 0; + } + + if (pRaInfo->RAPendingCounter >= 4) + pRaInfo->RAPendingCounter = 4; + + pRaInfo->DecisionRate = RateID; + odm_SetTxRPTTiming_8188E(dm_odm, pRaInfo, 2); + ODM_RT_TRACE(dm_odm, ODM_COMP_RATE_ADAPTIVE, ODM_DBG_LOUD, ("Rate down, RPT Timing default\n")); + ODM_RT_TRACE(dm_odm, ODM_COMP_RATE_ADAPTIVE, ODM_DBG_TRACE, ("RAWaitingCounter %d, RAPendingCounter %d", pRaInfo->RAWaitingCounter, pRaInfo->RAPendingCounter)); + ODM_RT_TRACE(dm_odm, ODM_COMP_RATE_ADAPTIVE, ODM_DBG_LOUD, ("Rate down to RateID %d RateSGI %d\n", RateID, pRaInfo->RateSGI)); + ODM_RT_TRACE(dm_odm, ODM_COMP_RATE_ADAPTIVE, ODM_DBG_TRACE, ("<===== odm_RateDown_8188E()\n")); + return 0; +} + +static int odm_RateUp_8188E( + struct odm_dm_struct *dm_odm, + struct odm_ra_info *pRaInfo + ) +{ + u8 RateID, HighestRate; + u8 i; + + ODM_RT_TRACE(dm_odm, ODM_COMP_RATE_ADAPTIVE, ODM_DBG_TRACE, ("=====>odm_RateUp_8188E()\n")); + if (NULL == pRaInfo) { + ODM_RT_TRACE(dm_odm, ODM_COMP_RATE_ADAPTIVE, ODM_DBG_LOUD, ("odm_RateUp_8188E(): pRaInfo is NULL\n")); + return -1; + } + RateID = pRaInfo->PreRate; + HighestRate = pRaInfo->HighestRate; + ODM_RT_TRACE(dm_odm, ODM_COMP_RATE_ADAPTIVE, ODM_DBG_TRACE, + (" RateID =%d HighestRate =%d\n", + RateID, HighestRate)); + if (pRaInfo->RAWaitingCounter == 1) { + pRaInfo->RAWaitingCounter = 0; + pRaInfo->RAPendingCounter = 0; + } else if (pRaInfo->RAWaitingCounter > 1) { + pRaInfo->PreRssiStaRA = pRaInfo->RssiStaRA; + goto RateUpfinish; + } + odm_SetTxRPTTiming_8188E(dm_odm, pRaInfo, 0); + ODM_RT_TRACE(dm_odm, ODM_COMP_RATE_ADAPTIVE, ODM_DBG_LOUD, ("odm_RateUp_8188E():Decrease RPT Timing\n")); + + if (RateID < HighestRate) { + for (i = RateID+1; i <= HighestRate; i++) { + if (pRaInfo->RAUseRate & BIT(i)) { + RateID = i; + goto RateUpfinish; + } + } + } else if (RateID == HighestRate) { + if (pRaInfo->SGIEnable && (pRaInfo->RateSGI != 1)) + pRaInfo->RateSGI = 1; + else if ((pRaInfo->SGIEnable) != 1) + pRaInfo->RateSGI = 0; + } else { + RateID = HighestRate; + } +RateUpfinish: + if (pRaInfo->RAWaitingCounter == (4+PendingForRateUpFail[pRaInfo->RAPendingCounter])) + pRaInfo->RAWaitingCounter = 0; + else + pRaInfo->RAWaitingCounter++; + + pRaInfo->DecisionRate = RateID; + ODM_RT_TRACE(dm_odm, ODM_COMP_RATE_ADAPTIVE, ODM_DBG_LOUD, ("Rate up to RateID %d\n", RateID)); + ODM_RT_TRACE(dm_odm, ODM_COMP_RATE_ADAPTIVE, ODM_DBG_TRACE, ("RAWaitingCounter %d, RAPendingCounter %d", pRaInfo->RAWaitingCounter, pRaInfo->RAPendingCounter)); + ODM_RT_TRACE(dm_odm, ODM_COMP_RATE_ADAPTIVE, ODM_DBG_TRACE, ("<===== odm_RateUp_8188E()\n")); + return 0; +} + +static void odm_ResetRaCounter_8188E(struct odm_ra_info *pRaInfo) +{ + u8 RateID; + + RateID = pRaInfo->DecisionRate; + pRaInfo->NscUp = (N_THRESHOLD_HIGH[RateID]+N_THRESHOLD_LOW[RateID])>>1; + pRaInfo->NscDown = (N_THRESHOLD_HIGH[RateID]+N_THRESHOLD_LOW[RateID])>>1; +} + +static void odm_RateDecision_8188E(struct odm_dm_struct *dm_odm, + struct odm_ra_info *pRaInfo + ) +{ + u8 RateID = 0, RtyPtID = 0, PenaltyID1 = 0, PenaltyID2 = 0; + /* u32 pool_retry; */ + static u8 DynamicTxRPTTimingCounter; + + ODM_RT_TRACE(dm_odm, ODM_COMP_RATE_ADAPTIVE, ODM_DBG_TRACE, ("=====>odm_RateDecision_8188E()\n")); + + if (pRaInfo->Active && (pRaInfo->TOTAL > 0)) { /* STA used and data packet exits */ + if ((pRaInfo->RssiStaRA < (pRaInfo->PreRssiStaRA - 3)) || + (pRaInfo->RssiStaRA > (pRaInfo->PreRssiStaRA + 3))) { + pRaInfo->RAWaitingCounter = 0; + pRaInfo->RAPendingCounter = 0; + } + /* Start RA decision */ + if (pRaInfo->PreRate > pRaInfo->HighestRate) + RateID = pRaInfo->HighestRate; + else + RateID = pRaInfo->PreRate; + if (pRaInfo->RssiStaRA > RSSI_THRESHOLD[RateID]) + RtyPtID = 0; + else + RtyPtID = 1; + PenaltyID1 = RETRY_PENALTY_IDX[RtyPtID][RateID]; /* TODO by page */ + + ODM_RT_TRACE(dm_odm, ODM_COMP_RATE_ADAPTIVE, ODM_DBG_TRACE, + (" NscDown init is %d\n", pRaInfo->NscDown)); + pRaInfo->NscDown += pRaInfo->RTY[0] * RETRY_PENALTY[PenaltyID1][0]; + pRaInfo->NscDown += pRaInfo->RTY[1] * RETRY_PENALTY[PenaltyID1][1]; + pRaInfo->NscDown += pRaInfo->RTY[2] * RETRY_PENALTY[PenaltyID1][2]; + pRaInfo->NscDown += pRaInfo->RTY[3] * RETRY_PENALTY[PenaltyID1][3]; + pRaInfo->NscDown += pRaInfo->RTY[4] * RETRY_PENALTY[PenaltyID1][4]; + ODM_RT_TRACE(dm_odm, ODM_COMP_RATE_ADAPTIVE, ODM_DBG_TRACE, + (" NscDown is %d, total*penalty[5] is %d\n", + pRaInfo->NscDown, (pRaInfo->TOTAL * RETRY_PENALTY[PenaltyID1][5]))); + if (pRaInfo->NscDown > (pRaInfo->TOTAL * RETRY_PENALTY[PenaltyID1][5])) + pRaInfo->NscDown -= pRaInfo->TOTAL * RETRY_PENALTY[PenaltyID1][5]; + else + pRaInfo->NscDown = 0; + + /* rate up */ + PenaltyID2 = RETRY_PENALTY_UP_IDX[RateID]; + ODM_RT_TRACE(dm_odm, ODM_COMP_RATE_ADAPTIVE, ODM_DBG_TRACE, + (" NscUp init is %d\n", pRaInfo->NscUp)); + pRaInfo->NscUp += pRaInfo->RTY[0] * RETRY_PENALTY[PenaltyID2][0]; + pRaInfo->NscUp += pRaInfo->RTY[1] * RETRY_PENALTY[PenaltyID2][1]; + pRaInfo->NscUp += pRaInfo->RTY[2] * RETRY_PENALTY[PenaltyID2][2]; + pRaInfo->NscUp += pRaInfo->RTY[3] * RETRY_PENALTY[PenaltyID2][3]; + pRaInfo->NscUp += pRaInfo->RTY[4] * RETRY_PENALTY[PenaltyID2][4]; + ODM_RT_TRACE(dm_odm, ODM_COMP_RATE_ADAPTIVE, ODM_DBG_TRACE, + ("NscUp is %d, total*up[5] is %d\n", + pRaInfo->NscUp, (pRaInfo->TOTAL * RETRY_PENALTY[PenaltyID2][5]))); + if (pRaInfo->NscUp > (pRaInfo->TOTAL * RETRY_PENALTY[PenaltyID2][5])) + pRaInfo->NscUp -= pRaInfo->TOTAL * RETRY_PENALTY[PenaltyID2][5]; + else + pRaInfo->NscUp = 0; + + ODM_RT_TRACE(dm_odm, ODM_COMP_RATE_ADAPTIVE|ODM_COMP_INIT, ODM_DBG_LOUD, + (" RssiStaRa = %d RtyPtID =%d PenaltyID1 = 0x%x PenaltyID2 = 0x%x RateID =%d NscDown =%d NscUp =%d SGI =%d\n", + pRaInfo->RssiStaRA, RtyPtID, PenaltyID1, PenaltyID2, RateID, pRaInfo->NscDown, pRaInfo->NscUp, pRaInfo->RateSGI)); + if ((pRaInfo->NscDown < N_THRESHOLD_LOW[RateID]) || + (pRaInfo->DROP > DROPING_NECESSARY[RateID])) + odm_RateDown_8188E(dm_odm, pRaInfo); + else if (pRaInfo->NscUp > N_THRESHOLD_HIGH[RateID]) + odm_RateUp_8188E(dm_odm, pRaInfo); + + if (pRaInfo->DecisionRate > pRaInfo->HighestRate) + pRaInfo->DecisionRate = pRaInfo->HighestRate; + + if ((pRaInfo->DecisionRate) == (pRaInfo->PreRate)) + DynamicTxRPTTimingCounter += 1; + else + DynamicTxRPTTimingCounter = 0; + + if (DynamicTxRPTTimingCounter >= 4) { + odm_SetTxRPTTiming_8188E(dm_odm, pRaInfo, 1); + ODM_RT_TRACE(dm_odm, ODM_COMP_RATE_ADAPTIVE, + ODM_DBG_LOUD, ("<===== Rate don't change 4 times, Extend RPT Timing\n")); + DynamicTxRPTTimingCounter = 0; + } + + pRaInfo->PreRate = pRaInfo->DecisionRate; /* YJ, add, 120120 */ + + odm_ResetRaCounter_8188E(pRaInfo); + } + ODM_RT_TRACE(dm_odm, ODM_COMP_RATE_ADAPTIVE, ODM_DBG_TRACE, ("<===== odm_RateDecision_8188E()\n")); +} + +static int odm_ARFBRefresh_8188E(struct odm_dm_struct *dm_odm, struct odm_ra_info *pRaInfo) +{ /* Wilson 2011/10/26 */ + u32 MaskFromReg; + s8 i; + + switch (pRaInfo->RateID) { + case RATR_INX_WIRELESS_NGB: + pRaInfo->RAUseRate = (pRaInfo->RateMask)&0x0f8ff015; + break; + case RATR_INX_WIRELESS_NG: + pRaInfo->RAUseRate = (pRaInfo->RateMask)&0x0f8ff010; + break; + case RATR_INX_WIRELESS_NB: + pRaInfo->RAUseRate = (pRaInfo->RateMask)&0x0f8ff005; + break; + case RATR_INX_WIRELESS_N: + pRaInfo->RAUseRate = (pRaInfo->RateMask)&0x0f8ff000; + break; + case RATR_INX_WIRELESS_GB: + pRaInfo->RAUseRate = (pRaInfo->RateMask)&0x00000ff5; + break; + case RATR_INX_WIRELESS_G: + pRaInfo->RAUseRate = (pRaInfo->RateMask)&0x00000ff0; + break; + case RATR_INX_WIRELESS_B: + pRaInfo->RAUseRate = (pRaInfo->RateMask)&0x0000000d; + break; + case 12: + MaskFromReg = ODM_Read4Byte(dm_odm, REG_ARFR0); + pRaInfo->RAUseRate = (pRaInfo->RateMask)&MaskFromReg; + break; + case 13: + MaskFromReg = ODM_Read4Byte(dm_odm, REG_ARFR1); + pRaInfo->RAUseRate = (pRaInfo->RateMask)&MaskFromReg; + break; + case 14: + MaskFromReg = ODM_Read4Byte(dm_odm, REG_ARFR2); + pRaInfo->RAUseRate = (pRaInfo->RateMask)&MaskFromReg; + break; + case 15: + MaskFromReg = ODM_Read4Byte(dm_odm, REG_ARFR3); + pRaInfo->RAUseRate = (pRaInfo->RateMask)&MaskFromReg; + break; + default: + pRaInfo->RAUseRate = (pRaInfo->RateMask); + break; + } + /* Highest rate */ + if (pRaInfo->RAUseRate) { + for (i = RATESIZE; i >= 0; i--) { + if ((pRaInfo->RAUseRate)&BIT(i)) { + pRaInfo->HighestRate = i; + break; + } + } + } else { + pRaInfo->HighestRate = 0; + } + /* Lowest rate */ + if (pRaInfo->RAUseRate) { + for (i = 0; i < RATESIZE; i++) { + if ((pRaInfo->RAUseRate) & BIT(i)) { + pRaInfo->LowestRate = i; + break; + } + } + } else { + pRaInfo->LowestRate = 0; + } + if (pRaInfo->HighestRate > 0x13) + pRaInfo->PTModeSS = 3; + else if (pRaInfo->HighestRate > 0x0b) + pRaInfo->PTModeSS = 2; + else if (pRaInfo->HighestRate > 0x0b) + pRaInfo->PTModeSS = 1; + else + pRaInfo->PTModeSS = 0; + ODM_RT_TRACE(dm_odm, ODM_COMP_RATE_ADAPTIVE, ODM_DBG_LOUD, + ("ODM_ARFBRefresh_8188E(): PTModeSS =%d\n", pRaInfo->PTModeSS)); + + if (pRaInfo->DecisionRate > pRaInfo->HighestRate) + pRaInfo->DecisionRate = pRaInfo->HighestRate; + + ODM_RT_TRACE(dm_odm, ODM_COMP_RATE_ADAPTIVE, ODM_DBG_LOUD, + ("ODM_ARFBRefresh_8188E(): RateID =%d RateMask =%8.8x RAUseRate =%8.8x HighestRate =%d, DecisionRate =%d\n", + pRaInfo->RateID, pRaInfo->RateMask, pRaInfo->RAUseRate, pRaInfo->HighestRate, pRaInfo->DecisionRate)); + return 0; +} + +static void odm_PTTryState_8188E(struct odm_ra_info *pRaInfo) +{ + pRaInfo->PTTryState = 0; + switch (pRaInfo->PTModeSS) { + case 3: + if (pRaInfo->DecisionRate >= 0x19) + pRaInfo->PTTryState = 1; + break; + case 2: + if (pRaInfo->DecisionRate >= 0x11) + pRaInfo->PTTryState = 1; + break; + case 1: + if (pRaInfo->DecisionRate >= 0x0a) + pRaInfo->PTTryState = 1; + break; + case 0: + if (pRaInfo->DecisionRate >= 0x03) + pRaInfo->PTTryState = 1; + break; + default: + pRaInfo->PTTryState = 0; + break; + } + + if (pRaInfo->RssiStaRA < 48) { + pRaInfo->PTStage = 0; + } else if (pRaInfo->PTTryState == 1) { + if ((pRaInfo->PTStopCount >= 10) || + (pRaInfo->PTPreRssi > pRaInfo->RssiStaRA + 5) || + (pRaInfo->PTPreRssi < pRaInfo->RssiStaRA - 5) || + (pRaInfo->DecisionRate != pRaInfo->PTPreRate)) { + if (pRaInfo->PTStage == 0) + pRaInfo->PTStage = 1; + else if (pRaInfo->PTStage == 1) + pRaInfo->PTStage = 3; + else + pRaInfo->PTStage = 5; + + pRaInfo->PTPreRssi = pRaInfo->RssiStaRA; + pRaInfo->PTStopCount = 0; + } else { + pRaInfo->RAstage = 0; + pRaInfo->PTStopCount++; + } + } else { + pRaInfo->PTStage = 0; + pRaInfo->RAstage = 0; + } + pRaInfo->PTPreRate = pRaInfo->DecisionRate; +} + +static void odm_PTDecision_8188E(struct odm_ra_info *pRaInfo) +{ + u8 j; + u8 temp_stage; + u32 numsc; + u32 num_total; + u8 stage_id; + + numsc = 0; + num_total = pRaInfo->TOTAL * PT_PENALTY[5]; + for (j = 0; j <= 4; j++) { + numsc += pRaInfo->RTY[j] * PT_PENALTY[j]; + if (numsc > num_total) + break; + } + + j = j >> 1; + temp_stage = (pRaInfo->PTStage + 1) >> 1; + if (temp_stage > j) + stage_id = temp_stage-j; + else + stage_id = 0; + + pRaInfo->PTSmoothFactor = (pRaInfo->PTSmoothFactor>>1) + (pRaInfo->PTSmoothFactor>>2) + stage_id*16+2; + if (pRaInfo->PTSmoothFactor > 192) + pRaInfo->PTSmoothFactor = 192; + stage_id = pRaInfo->PTSmoothFactor >> 6; + temp_stage = stage_id*2; + if (temp_stage != 0) + temp_stage -= 1; + if (pRaInfo->DROP > 3) + temp_stage = 0; + pRaInfo->PTStage = temp_stage; +} + +static void +odm_RATxRPTTimerSetting( + struct odm_dm_struct *dm_odm, + u16 minRptTime +) +{ + ODM_RT_TRACE(dm_odm, ODM_COMP_RATE_ADAPTIVE, ODM_DBG_TRACE, (" =====>odm_RATxRPTTimerSetting()\n")); + + if (dm_odm->CurrminRptTime != minRptTime) { + ODM_RT_TRACE(dm_odm, ODM_COMP_RATE_ADAPTIVE, ODM_DBG_LOUD, + (" CurrminRptTime = 0x%04x minRptTime = 0x%04x\n", dm_odm->CurrminRptTime, minRptTime)); + rtw_rpt_timer_cfg_cmd(dm_odm->Adapter, minRptTime); + dm_odm->CurrminRptTime = minRptTime; + } + ODM_RT_TRACE(dm_odm, ODM_COMP_RATE_ADAPTIVE, ODM_DBG_TRACE, (" <===== odm_RATxRPTTimerSetting()\n")); +} + +void +ODM_RASupport_Init( + struct odm_dm_struct *dm_odm + ) +{ + ODM_RT_TRACE(dm_odm, ODM_COMP_RATE_ADAPTIVE, ODM_DBG_LOUD, ("=====>ODM_RASupport_Init()\n")); + + /* 2012/02/14 MH Be noticed, the init must be after IC type is recognized!!!!! */ + if (dm_odm->SupportICType == ODM_RTL8188E) + dm_odm->RaSupport88E = true; +} + +int ODM_RAInfo_Init(struct odm_dm_struct *dm_odm, u8 macid) +{ + struct odm_ra_info *pRaInfo = &dm_odm->RAInfo[macid]; + u8 WirelessMode = 0xFF; /* invalid value */ + u8 max_rate_idx = 0x13; /* MCS7 */ + if (dm_odm->pWirelessMode != NULL) + WirelessMode = *(dm_odm->pWirelessMode); + + if (WirelessMode != 0xFF) { + if (WirelessMode & ODM_WM_N24G) + max_rate_idx = 0x13; + else if (WirelessMode & ODM_WM_G) + max_rate_idx = 0x0b; + else if (WirelessMode & ODM_WM_B) + max_rate_idx = 0x03; + } + + ODM_RT_TRACE(dm_odm, ODM_COMP_RATE_ADAPTIVE, ODM_DBG_LOUD, + ("ODM_RAInfo_Init(): WirelessMode:0x%08x , max_raid_idx:0x%02x\n", + WirelessMode, max_rate_idx)); + + pRaInfo->DecisionRate = max_rate_idx; + pRaInfo->PreRate = max_rate_idx; + pRaInfo->HighestRate = max_rate_idx; + pRaInfo->LowestRate = 0; + pRaInfo->RateID = 0; + pRaInfo->RateMask = 0xffffffff; + pRaInfo->RssiStaRA = 0; + pRaInfo->PreRssiStaRA = 0; + pRaInfo->SGIEnable = 0; + pRaInfo->RAUseRate = 0xffffffff; + pRaInfo->NscDown = (N_THRESHOLD_HIGH[0x13]+N_THRESHOLD_LOW[0x13])/2; + pRaInfo->NscUp = (N_THRESHOLD_HIGH[0x13]+N_THRESHOLD_LOW[0x13])/2; + pRaInfo->RateSGI = 0; + pRaInfo->Active = 1; /* Active is not used at present. by page, 110819 */ + pRaInfo->RptTime = 0x927c; + pRaInfo->DROP = 0; + pRaInfo->RTY[0] = 0; + pRaInfo->RTY[1] = 0; + pRaInfo->RTY[2] = 0; + pRaInfo->RTY[3] = 0; + pRaInfo->RTY[4] = 0; + pRaInfo->TOTAL = 0; + pRaInfo->RAWaitingCounter = 0; + pRaInfo->RAPendingCounter = 0; + pRaInfo->PTActive = 1; /* Active when this STA is use */ + pRaInfo->PTTryState = 0; + pRaInfo->PTStage = 5; /* Need to fill into HW_PWR_STATUS */ + pRaInfo->PTSmoothFactor = 192; + pRaInfo->PTStopCount = 0; + pRaInfo->PTPreRate = 0; + pRaInfo->PTPreRssi = 0; + pRaInfo->PTModeSS = 0; + pRaInfo->RAstage = 0; + return 0; +} + +int ODM_RAInfo_Init_all(struct odm_dm_struct *dm_odm) +{ + u8 macid = 0; + + ODM_RT_TRACE(dm_odm, ODM_COMP_RATE_ADAPTIVE, ODM_DBG_LOUD, ("=====>\n")); + dm_odm->CurrminRptTime = 0; + + for (macid = 0; macid < ODM_ASSOCIATE_ENTRY_NUM; macid++) + ODM_RAInfo_Init(dm_odm, macid); + + return 0; +} + +u8 ODM_RA_GetShortGI_8188E(struct odm_dm_struct *dm_odm, u8 macid) +{ + if ((NULL == dm_odm) || (macid >= ASSOCIATE_ENTRY_NUM)) + return 0; + ODM_RT_TRACE(dm_odm, ODM_COMP_RATE_ADAPTIVE, ODM_DBG_TRACE, + ("macid =%d SGI =%d\n", macid, dm_odm->RAInfo[macid].RateSGI)); + return dm_odm->RAInfo[macid].RateSGI; +} + +u8 ODM_RA_GetDecisionRate_8188E(struct odm_dm_struct *dm_odm, u8 macid) +{ + u8 DecisionRate = 0; + + if ((NULL == dm_odm) || (macid >= ASSOCIATE_ENTRY_NUM)) + return 0; + DecisionRate = (dm_odm->RAInfo[macid].DecisionRate); + ODM_RT_TRACE(dm_odm, ODM_COMP_RATE_ADAPTIVE, ODM_DBG_TRACE, + (" macid =%d DecisionRate = 0x%x\n", macid, DecisionRate)); + return DecisionRate; +} + +u8 ODM_RA_GetHwPwrStatus_8188E(struct odm_dm_struct *dm_odm, u8 macid) +{ + u8 PTStage = 5; + + if ((NULL == dm_odm) || (macid >= ASSOCIATE_ENTRY_NUM)) + return 0; + PTStage = (dm_odm->RAInfo[macid].PTStage); + ODM_RT_TRACE(dm_odm, ODM_COMP_RATE_ADAPTIVE, ODM_DBG_TRACE, + ("macid =%d PTStage = 0x%x\n", macid, PTStage)); + return PTStage; +} + +void ODM_RA_UpdateRateInfo_8188E(struct odm_dm_struct *dm_odm, u8 macid, u8 RateID, u32 RateMask, u8 SGIEnable) +{ + struct odm_ra_info *pRaInfo = NULL; + + ODM_RT_TRACE(dm_odm, ODM_COMP_RATE_ADAPTIVE, ODM_DBG_LOUD, + ("macid =%d RateID = 0x%x RateMask = 0x%x SGIEnable =%d\n", + macid, RateID, RateMask, SGIEnable)); + if ((NULL == dm_odm) || (macid >= ASSOCIATE_ENTRY_NUM)) + return; + + pRaInfo = &(dm_odm->RAInfo[macid]); + pRaInfo->RateID = RateID; + pRaInfo->RateMask = RateMask; + pRaInfo->SGIEnable = SGIEnable; + odm_ARFBRefresh_8188E(dm_odm, pRaInfo); +} + +void ODM_RA_SetRSSI_8188E(struct odm_dm_struct *dm_odm, u8 macid, u8 Rssi) +{ + struct odm_ra_info *pRaInfo = NULL; + + ODM_RT_TRACE(dm_odm, ODM_COMP_RATE_ADAPTIVE, ODM_DBG_TRACE, + (" macid =%d Rssi =%d\n", macid, Rssi)); + if ((NULL == dm_odm) || (macid >= ASSOCIATE_ENTRY_NUM)) + return; + + pRaInfo = &(dm_odm->RAInfo[macid]); + pRaInfo->RssiStaRA = Rssi; +} + +void ODM_RA_Set_TxRPT_Time(struct odm_dm_struct *dm_odm, u16 minRptTime) +{ + ODM_Write2Byte(dm_odm, REG_TX_RPT_TIME, minRptTime); +} + +void ODM_RA_TxRPT2Handle_8188E(struct odm_dm_struct *dm_odm, u8 *TxRPT_Buf, u16 TxRPT_Len, u32 macid_entry0, u32 macid_entry1) +{ + struct odm_ra_info *pRAInfo = NULL; + u8 MacId = 0; + u8 *pBuffer = NULL; + u32 valid = 0, ItemNum = 0; + u16 minRptTime = 0x927c; + + ODM_RT_TRACE(dm_odm, ODM_COMP_RATE_ADAPTIVE, ODM_DBG_LOUD, + ("=====>ODM_RA_TxRPT2Handle_8188E(): valid0 =%d valid1 =%d BufferLength =%d\n", + macid_entry0, macid_entry1, TxRPT_Len)); + + ItemNum = TxRPT_Len >> 3; + pBuffer = TxRPT_Buf; + + do { + if (MacId >= ASSOCIATE_ENTRY_NUM) + valid = 0; + else if (MacId >= 32) + valid = (1 << (MacId - 32)) & macid_entry1; + else + valid = (1 << MacId) & macid_entry0; + + pRAInfo = &(dm_odm->RAInfo[MacId]); + if (valid) { + pRAInfo->RTY[0] = (u16)GET_TX_REPORT_TYPE1_RERTY_0(pBuffer); + pRAInfo->RTY[1] = (u16)GET_TX_REPORT_TYPE1_RERTY_1(pBuffer); + pRAInfo->RTY[2] = (u16)GET_TX_REPORT_TYPE1_RERTY_2(pBuffer); + pRAInfo->RTY[3] = (u16)GET_TX_REPORT_TYPE1_RERTY_3(pBuffer); + pRAInfo->RTY[4] = (u16)GET_TX_REPORT_TYPE1_RERTY_4(pBuffer); + pRAInfo->DROP = (u16)GET_TX_REPORT_TYPE1_DROP_0(pBuffer); + pRAInfo->TOTAL = pRAInfo->RTY[0] + pRAInfo->RTY[1] + + pRAInfo->RTY[2] + pRAInfo->RTY[3] + + pRAInfo->RTY[4] + pRAInfo->DROP; + if (pRAInfo->TOTAL != 0) { + ODM_RT_TRACE(dm_odm, ODM_COMP_RATE_ADAPTIVE, ODM_DBG_LOUD, + ("macid =%d Total =%d R0 =%d R1 =%d R2 =%d R3 =%d R4 =%d D0 =%d valid0 =%x valid1 =%x\n", + MacId, pRAInfo->TOTAL, + pRAInfo->RTY[0], pRAInfo->RTY[1], + pRAInfo->RTY[2], pRAInfo->RTY[3], + pRAInfo->RTY[4], pRAInfo->DROP, + macid_entry0 , macid_entry1)); + if (pRAInfo->PTActive) { + if (pRAInfo->RAstage < 5) + odm_RateDecision_8188E(dm_odm, pRAInfo); + else if (pRAInfo->RAstage == 5) /* Power training try state */ + odm_PTTryState_8188E(pRAInfo); + else /* RAstage == 6 */ + odm_PTDecision_8188E(pRAInfo); + + /* Stage_RA counter */ + if (pRAInfo->RAstage <= 5) + pRAInfo->RAstage++; + else + pRAInfo->RAstage = 0; + } else { + odm_RateDecision_8188E(dm_odm, pRAInfo); + } + ODM_RT_TRACE(dm_odm, ODM_COMP_INIT, ODM_DBG_LOUD, + ("macid =%d R0 =%d R1 =%d R2 =%d R3 =%d R4 =%d drop =%d valid0 =%x RateID =%d SGI =%d\n", + MacId, + pRAInfo->RTY[0], + pRAInfo->RTY[1], + pRAInfo->RTY[2], + pRAInfo->RTY[3], + pRAInfo->RTY[4], + pRAInfo->DROP, + macid_entry0, + pRAInfo->DecisionRate, + pRAInfo->RateSGI)); + } else { + ODM_RT_TRACE(dm_odm, ODM_COMP_RATE_ADAPTIVE, ODM_DBG_LOUD, (" TOTAL = 0!!!!\n")); + } + } + + if (minRptTime > pRAInfo->RptTime) + minRptTime = pRAInfo->RptTime; + + pBuffer += TX_RPT2_ITEM_SIZE; + MacId++; + } while (MacId < ItemNum); + + odm_RATxRPTTimerSetting(dm_odm, minRptTime); + + ODM_RT_TRACE(dm_odm, ODM_COMP_RATE_ADAPTIVE, ODM_DBG_LOUD, ("<===== ODM_RA_TxRPT2Handle_8188E()\n")); +} -- cgit v0.10.2