android+linux: add head tracking and gestures

This commit is contained in:
Kavish Devar
2025-03-14 17:32:47 +05:30
parent 55d06d2f65
commit 22d5ae60b6
54 changed files with 3532 additions and 1483 deletions

View File

@@ -348,27 +348,34 @@ The packets sent (based on the previous states) are as follows:
> *i do hate apple for not hardcoding these, like there are literally only 4^2 - ${\binom{4}{1}}$ - $\binom{4}{2}$*
# Miscellaneous/Unknown
# Head Tracking
## Request something (Probably Head Positions)
## Start Tracking
This packet initiates head tracking. When sent, the AirPods begin streaming head tracking data (e.g. orientation and acceleration) for live plotting and analysis.
```plaintext
<!-- 04 00 04 00 17 00 00 00 10 00 11 00 08 7C 10 02 42 0B 08 4E 10 02 1A 05 01 40 9C 00 00 -->
OR
04 00 04 00 17 00 00 00 10 00 10 00 08 A1 02 42 0B 08 0E 10 02 1A 05 01 40 9C 00 00
```
Example packet
## Stop Tracking
```plaintext
04 00 04 00 17 00 00 00 10 00 43 00 08 ec 07 10 01 1a 3c 0e 00 01 90 95 5d af 86 19 00 00 03 04 43 94 04 9e 6b 01 00 00 00 d5 a2 06 13 eb 13 03 00 f0 ff 01 00 67 83 67 83 67 83 fe ff fd ff 07 00 b3 01 9c 03 65 00 48 74 2c 37 fd 1e 00 00
```
## Stop whatever was requested
This packet stops the head tracking data stream.
```plaintext
04 00 04 00 17 00 00 00 10 00 11 00 08 7E 10 02 42 0B 08 4E 10 02 1A 05 01 00 00 00 00
```
## Received Head Tracking Sensor Data
Once tracking is active, the AirPods stream sensor packets with the following common structure:
| Field | Offset | Length (bytes) |
|--------------------------|--------|----------------|
| orientation 1 | 43 | 2 |
| orientation 2 | 45 | 2 |
| orientation 3 | 47 | 2 |
| Horizontal Acceleration | 51 | 2 |
| Vertical Acceleration | 53 | 2 |
# LICENSE

View File

@@ -64,4 +64,4 @@ dependencies {
androidTestImplementation(libs.androidx.ui.test.junit4)
debugImplementation(libs.androidx.ui.tooling)
debugImplementation(libs.androidx.ui.test.manifest)
}
}

View File

@@ -24,6 +24,8 @@
tools:ignore="UnusedAttribute" />
<uses-permission android:name="android.permission.BLUETOOTH_ADVERTISE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ANSWER_PHONE_CALLS" />
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
<application
android:allowBackup="true"

View File

@@ -64,9 +64,11 @@ import com.google.accompanist.permissions.rememberMultiplePermissionsState
import me.kavishdevar.aln.screens.AirPodsSettingsScreen
import me.kavishdevar.aln.screens.AppSettingsScreen
import me.kavishdevar.aln.screens.DebugScreen
import me.kavishdevar.aln.screens.HeadTrackingScreen
import me.kavishdevar.aln.screens.LongPress
import me.kavishdevar.aln.screens.RenameScreen
import me.kavishdevar.aln.services.AirPodsService
import me.kavishdevar.aln.services.ServiceManager
import me.kavishdevar.aln.ui.theme.ALNTheme
import me.kavishdevar.aln.utils.AirPodsNotifications
import me.kavishdevar.aln.utils.CrossDevice
@@ -135,7 +137,9 @@ fun Main() {
"android.permission.BLUETOOTH_SCAN",
"android.permission.BLUETOOTH_ADVERTISE",
"android.permission.POST_NOTIFICATIONS",
"android.permission.READ_PHONE_STATE"
"android.permission.READ_PHONE_STATE",
"android.permission.ANSWER_PHONE_CALLS",
"android.permission.MODIFY_AUDIO_SETTINGS"
)
)
val airPodsService = remember { mutableStateOf<AirPodsService?>(null) }
@@ -250,6 +254,9 @@ fun Main() {
composable("app_settings") {
AppSettingsScreen(navController)
}
composable("head_tracking") {
HeadTrackingScreen(navController)
}
}
}
serviceConnection = remember {

View File

@@ -1,17 +1,17 @@
/*
* AirPods like Normal (ALN) - Bringing Apple-only features to Linux and Android for seamless AirPods functionality!
*
*
* Copyright (C) 2024 Kavish Devar
*
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published
* by the Free Software Foundation, either version 3 of the License.
*
*
* 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 Affero General Public License for more details.
*
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
@@ -48,7 +48,7 @@ import androidx.compose.ui.unit.sp
import me.kavishdevar.aln.services.AirPodsService
@Composable
fun IndependentToggle(name: String, service: AirPodsService, functionName: String, sharedPreferences: SharedPreferences, default: Boolean = false) {
fun IndependentToggle(name: String, service: AirPodsService? = null, functionName: String? = null, sharedPreferences: SharedPreferences, default: Boolean = false) {
val isDarkTheme = isSystemInDarkTheme()
val textColor = if (isDarkTheme) Color.White else Color.Black
@@ -77,9 +77,10 @@ fun IndependentToggle(name: String, service: AirPodsService, functionName: Strin
.edit()
.putBoolean(snakeCasedName, checked)
.apply()
val method = service::class.java.getMethod(functionName, Boolean::class.java)
method.invoke(service, checked)
if (functionName != null && service != null) {
val method = service::class.java.getMethod(functionName, Boolean::class.java)
method.invoke(service, checked)
}
}
)
},
@@ -98,8 +99,11 @@ fun IndependentToggle(name: String, service: AirPodsService, functionName: Strin
onCheckedChange = {
checked = it
sharedPreferences.edit().putBoolean(snakeCasedName, it).apply()
val method = service::class.java.getMethod(functionName, Boolean::class.java)
method.invoke(service, it)
if (functionName != null && service != null) {
val method =
service::class.java.getMethod(functionName, Boolean::class.java)
method.invoke(service, it)
}
},
)
}
@@ -110,4 +114,4 @@ fun IndependentToggle(name: String, service: AirPodsService, functionName: Strin
@Composable
fun IndependentTogglePreview() {
IndependentToggle("Test", AirPodsService(), "test", LocalContext.current.getSharedPreferences("preview", 0), true)
}
}

View File

@@ -1,17 +1,17 @@
/*
* AirPods like Normal (ALN) - Bringing Apple-only features to Linux and Android for seamless AirPods functionality!
*
*
* Copyright (C) 2024 Kavish Devar
*
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published
* by the Free Software Foundation, either version 3 of the License.
*
*
* 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 Affero General Public License for more details.
*
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
@@ -81,6 +81,8 @@ fun PressAndHoldSettings(navController: NavController) {
modifier = Modifier.padding(8.dp, bottom = 2.dp)
)
Spacer(modifier = Modifier.height(1.dp))
Column(
modifier = Modifier
.fillMaxWidth()

View File

@@ -305,6 +305,21 @@ fun AirPodsSettingsScreen(dev: BluetoothDevice?, service: AirPodsService,
Spacer(modifier = Modifier.height(32.dp))
NoiseControlSettings(service = service)
Spacer(modifier = Modifier.height(16.dp))
Text(
text = stringResource(R.string.head_gestures).uppercase(),
style = TextStyle(
fontSize = 14.sp,
fontWeight = FontWeight.Light,
color = (if (isSystemInDarkTheme()) Color.White else Color.Black).copy(alpha = 0.6f),
fontFamily = FontFamily(Font(R.font.sf_pro))
),
modifier = Modifier.padding(8.dp, bottom = 2.dp)
)
Spacer(modifier = Modifier.height(2.dp))
NavigationButton(to = "head_tracking", "Head Tracking", navController)
Spacer(modifier = Modifier.height(16.dp))
PressAndHoldSettings(navController = navController)

View File

@@ -1,17 +1,17 @@
/*
* AirPods like Normal (ALN) - Bringing Apple-only features to Linux and Android for seamless AirPods functionality!
*
*
* Copyright (C) 2024 Kavish Devar
*
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published
* by the Free Software Foundation, either version 3 of the License.
*
*
* 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 Affero General Public License for more details.
*
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
@@ -22,6 +22,8 @@ package me.kavishdevar.aln.screens
import android.annotation.SuppressLint
import android.content.Context
import android.os.Build
import androidx.annotation.RequiresApi
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
import androidx.compose.foundation.isSystemInDarkTheme
@@ -32,7 +34,6 @@ import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.imePadding
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
import androidx.compose.foundation.layout.width
@@ -86,6 +87,7 @@ import kotlinx.coroutines.flow.MutableStateFlow
import me.kavishdevar.aln.R
import me.kavishdevar.aln.services.ServiceManager
@RequiresApi(Build.VERSION_CODES.Q)
@OptIn(ExperimentalMaterial3Api::class, ExperimentalLayoutApi::class)
@SuppressLint("UnusedMaterial3ScaffoldPaddingParameter", "UnspecifiedRegisterReceiverFlag")
@Composable
@@ -154,7 +156,7 @@ fun DebugScreen(navController: NavController) {
Column(
modifier = Modifier
.fillMaxSize()
.imePadding()
// .imePadding()
.haze(hazeState)
.padding(top = paddingValues.calculateTopPadding())
) {
@@ -198,7 +200,7 @@ fun DebugScreen(navController: NavController) {
Column {
Text(
text =
if (isSent) message.substring(5).take(60) + (if (message.substring(5).length > 60) "..." else "")
if (isSent) message.substring(5).take(60) + (if (message.substring(5).length > 60) "..." else "")
else message.substring(9).take(60) + (if (message.substring(9).length > 60) "..." else ""),
style = MaterialTheme.typography.bodySmall,
)
@@ -261,4 +263,4 @@ fun DebugScreen(navController: NavController) {
}
}
}
}
}

View File

@@ -0,0 +1,808 @@
/*
* AirPods like Normal (ALN) - Bringing Apple-only features to Linux and Android for seamless AirPods functionality!
*
* Copyright (C) 2024 Kavish Devar
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as published
* by the Free Software Foundation, either version 3 of the License.
*
* 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <https://www.gnu.org/licenses/>.
*/
package me.kavishdevar.aln.screens
import android.content.Context
import android.os.Build
import android.util.Log
import androidx.annotation.RequiresApi
import androidx.compose.animation.AnimatedContent
import androidx.compose.animation.ExperimentalAnimationApi
import androidx.compose.animation.core.tween
import androidx.compose.animation.fadeIn
import androidx.compose.animation.fadeOut
import androidx.compose.animation.slideInVertically
import androidx.compose.animation.togetherWith
import androidx.compose.foundation.Canvas
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
import androidx.compose.foundation.layout.aspectRatio
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.filled.KeyboardArrowLeft
import androidx.compose.material.icons.filled.PlayArrow
import androidx.compose.material3.Button
import androidx.compose.material3.ButtonDefaults
import androidx.compose.material3.Card
import androidx.compose.material3.CardDefaults
import androidx.compose.material3.CenterAlignedTopAppBar
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.Scaffold
import androidx.compose.material3.Text
import androidx.compose.material3.TextButton
import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.runtime.Composable
import androidx.compose.runtime.DisposableEffect
import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.collectAsState
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableFloatStateOf
import androidx.compose.runtime.mutableLongStateOf
import androidx.compose.runtime.mutableStateListOf
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.setValue
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.scale
import androidx.compose.ui.geometry.CornerRadius
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.geometry.Size
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.Path
import androidx.compose.ui.graphics.SolidColor
import androidx.compose.ui.graphics.StrokeCap
import androidx.compose.ui.graphics.asAndroidPath
import androidx.compose.ui.graphics.drawscope.Stroke
import androidx.compose.ui.graphics.nativeCanvas
import androidx.compose.ui.graphics.toArgb
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.graphics.vector.path
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.TextStyle
import androidx.compose.ui.text.drawText
import androidx.compose.ui.text.font.Font
import androidx.compose.ui.text.font.FontFamily
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.rememberTextMeasurer
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.navigation.NavController
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import me.kavishdevar.aln.R
import me.kavishdevar.aln.composables.IndependentToggle
import me.kavishdevar.aln.services.ServiceManager
import me.kavishdevar.aln.utils.HeadTracking
import kotlin.math.abs
import kotlin.math.cos
import kotlin.math.sin
import kotlin.random.Random
@RequiresApi(Build.VERSION_CODES.Q)
@OptIn(ExperimentalMaterial3Api::class, ExperimentalAnimationApi::class)
@Composable
fun HeadTrackingScreen(navController: NavController) {
DisposableEffect(Unit) {
ServiceManager.getService()?.startHeadTracking()
onDispose {
ServiceManager.getService()?.stopHeadTracking()
}
}
val sharedPreferences = LocalContext.current.getSharedPreferences("settings", Context.MODE_PRIVATE)
val isDarkTheme = isSystemInDarkTheme()
val backgroundColor = if (isDarkTheme) Color(0xFF1C1C1E) else Color(0xFFFFFFFF)
val textColor = if (isDarkTheme) Color.White else Color.Black
Scaffold(
topBar = {
CenterAlignedTopAppBar(
title = {
Text(
stringResource(R.string.head_tracking),
fontFamily = FontFamily(Font(R.font.sf_pro)),
)
},
navigationIcon = {
TextButton(
onClick = {
navController.popBackStack()
if (ServiceManager.getService()?.isHeadTrackingActive == true) ServiceManager.getService()?.stopHeadTracking()
},
shape = RoundedCornerShape(8.dp),
) {
Icon(
Icons.AutoMirrored.Filled.KeyboardArrowLeft,
contentDescription = "Back",
tint = if (isDarkTheme) Color(0xFF007AFF) else Color(0xFF3C6DF5),
modifier = Modifier.scale(1.5f)
)
Text(
sharedPreferences.getString("name", "AirPods")!!,
style = TextStyle(
fontSize = 18.sp,
fontWeight = FontWeight.Medium,
color = if (isDarkTheme) Color(0xFF007AFF) else Color(0xFF3C6DF5),
fontFamily = FontFamily(Font(R.font.sf_pro))
),
)
}
},
colors = TopAppBarDefaults.topAppBarColors(
containerColor = Color.Transparent
),
actions = {
var isActive by remember { mutableStateOf(ServiceManager.getService()?.isHeadTrackingActive == true) }
IconButton(
onClick = {
if (ServiceManager.getService()?.isHeadTrackingActive == false) {
ServiceManager.getService()?.startHeadTracking()
Log.d("HeadTrackingScreen", "Head tracking started")
isActive = true
} else {
ServiceManager.getService()?.stopHeadTracking()
Log.d("HeadTrackingScreen", "Head tracking stopped")
isActive = false
}
},
) {
Icon(
if (isActive) {
ImageVector.Builder(
name = "Pause",
defaultWidth = 24.dp,
defaultHeight = 24.dp,
viewportWidth = 24f,
viewportHeight = 24f
).apply {
path(
fill = SolidColor(Color.Black),
pathBuilder = {
moveTo(6f, 5f)
lineTo(10f, 5f)
lineTo(10f, 19f)
lineTo(6f, 19f)
lineTo(6f, 5f)
moveTo(14f, 5f)
lineTo(18f, 5f)
lineTo(18f, 19f)
lineTo(14f, 19f)
lineTo(14f, 5f)
}
)
}.build()
} else Icons.Filled.PlayArrow,
contentDescription = "Start",
tint = if (isDarkTheme) Color(0xFF007AFF) else Color(0xFF3C6DF5),
modifier = Modifier.scale(1.5f)
)
}
}
)
},
containerColor = if (isSystemInDarkTheme()) Color(0xFF000000)
else Color(0xFFF2F2F7),
) { paddingValues ->
Column (
modifier = Modifier
.fillMaxSize()
.padding(paddingValues = paddingValues)
.padding(horizontal = 16.dp)
.padding(top = 8.dp)
) {
val sharedPreferences =
LocalContext.current.getSharedPreferences("settings", Context.MODE_PRIVATE)
var gestureText by remember { mutableStateOf("") }
val coroutineScope = rememberCoroutineScope()
IndependentToggle(name = "Head Gestures", sharedPreferences = sharedPreferences)
Spacer(modifier = Modifier.height(2.dp))
Text(
stringResource(R.string.head_gestures_details),
style = TextStyle(
fontSize = 14.sp,
fontWeight = FontWeight.Normal,
fontFamily = FontFamily(Font(R.font.sf_pro)),
color = textColor.copy(0.6f)
),
modifier = Modifier.padding(start = 4.dp)
)
Spacer(modifier = Modifier.height(16.dp))
Text(
"Head Orientation",
style = TextStyle(
fontSize = 18.sp,
fontWeight = FontWeight.Medium,
fontFamily = FontFamily(Font(R.font.sf_pro)),
color = textColor
),
modifier = Modifier.padding(start = 4.dp, bottom = 8.dp, top = 8.dp)
)
HeadVisualization()
Spacer(modifier = Modifier.height(16.dp))
Text(
"Acceleration",
style = TextStyle(
fontSize = 18.sp,
fontWeight = FontWeight.Medium,
fontFamily = FontFamily(Font(R.font.sf_pro)),
color = textColor
),
modifier = Modifier.padding(start = 4.dp, bottom = 8.dp, top = 8.dp)
)
AccelerationPlot()
Spacer(modifier = Modifier.height(16.dp))
Button (
onClick = {
gestureText = "Shake your head or nod!"
coroutineScope.launch {
val accepted = ServiceManager.getService()?.testHeadGestures() ?: false
gestureText = if (accepted) "\"Yes\" gesture detected." else "\"No\" gesture detected."
}
},
modifier = Modifier
.fillMaxWidth()
.height(55.dp),
colors = ButtonDefaults.buttonColors(
containerColor = backgroundColor
),
shape = RoundedCornerShape(8.dp)
) {
Text(
"Test Head Gestures",
style = TextStyle(
fontSize = 16.sp,
fontWeight = FontWeight.Medium,
fontFamily = FontFamily(Font(R.font.sf_pro)),
color = textColor
),
)
}
var lastClickTime by remember { mutableLongStateOf(0L) }
var shouldExplode by remember { mutableStateOf(false) }
LaunchedEffect(gestureText) {
if (gestureText.isNotEmpty()) {
lastClickTime = System.currentTimeMillis()
delay(3000)
if (System.currentTimeMillis() - lastClickTime >= 3000) {
shouldExplode = true
}
}
}
Box(
contentAlignment = Alignment.Center,
modifier = Modifier.padding(top = 12.dp)
) {
AnimatedContent(
targetState = gestureText,
transitionSpec = {
(fadeIn(
animationSpec = tween(300)
) + slideInVertically(
initialOffsetY = { 40 },
animationSpec = tween(300)
)).togetherWith(fadeOut(animationSpec = tween(150)))
}
) { text ->
if (shouldExplode) {
LaunchedEffect(Unit) {
CoroutineScope(coroutineScope.coroutineContext).launch {
delay(750)
gestureText = ""
}
}
ParticleText(
text = text,
style = TextStyle(
fontSize = 20.sp,
fontWeight = FontWeight.Medium,
fontFamily = FontFamily(Font(R.font.sf_pro)),
color = textColor,
textAlign = TextAlign.Center
),
onAnimationComplete = {
shouldExplode = false
},
)
} else {
Text(
text = text,
style = TextStyle(
fontSize = 20.sp,
fontWeight = FontWeight.Medium,
fontFamily = FontFamily(Font(R.font.sf_pro)),
color = textColor,
textAlign = TextAlign.Center
),
modifier = Modifier
.fillMaxWidth()
)
}
}
}
}
}
}
private data class Particle(
val initialPosition: Offset,
val velocity: Offset,
var alpha: Float = 1f
)
@Composable
private fun ParticleText(
text: String,
style: TextStyle,
onAnimationComplete: () -> Unit,
) {
val particles = remember { mutableStateListOf<Particle>() }
val textMeasurer = rememberTextMeasurer()
var isAnimating by remember { mutableStateOf(true) }
var textVisible by remember { mutableStateOf(true) }
Canvas(modifier = Modifier.fillMaxWidth()) {
val textLayoutResult = textMeasurer.measure(text, style)
val textBounds = textLayoutResult.size
val centerX = (size.width - textBounds.width) / 2
val centerY = size.height / 2
if (textVisible && particles.isEmpty()) {
drawText(
textMeasurer = textMeasurer,
text = text,
style = style,
topLeft = Offset(centerX, centerY - textBounds.height / 2)
)
}
if (particles.isEmpty()) {
val random = Random(System.currentTimeMillis())
for (i in 0..100) {
val x = centerX + random.nextFloat() * textBounds.width
val y = centerY - textBounds.height / 2 + random.nextFloat() * textBounds.height
val vx = (random.nextFloat() - 0.5f) * 20
val vy = (random.nextFloat() - 0.5f) * 20
particles.add(Particle(Offset(x, y), Offset(vx, vy)))
}
textVisible = false
}
particles.forEach { particle ->
drawCircle(
color = style.color.copy(alpha = particle.alpha),
radius = 0.5.dp.toPx(),
center = particle.initialPosition
)
}
}
LaunchedEffect(text) {
while (isAnimating) {
delay(16)
particles.forEachIndexed { index, particle ->
particles[index] = particle.copy(
initialPosition = particle.initialPosition + particle.velocity,
alpha = (particle.alpha - 0.02f).coerceAtLeast(0f)
)
}
if (particles.all { it.alpha <= 0f }) {
isAnimating = false
onAnimationComplete()
}
}
}
}
@Composable
private fun HeadVisualization() {
val orientation by HeadTracking.orientation.collectAsState()
val darkTheme = isSystemInDarkTheme()
val backgroundColor = if (darkTheme) Color(0xFF1C1C1E) else Color.White
val strokeColor = if (darkTheme) Color.White else Color.Black
Card(
modifier = Modifier
.fillMaxWidth()
.aspectRatio(2f),
colors = CardDefaults.cardColors(
containerColor = backgroundColor
)
) {
Box(
modifier = Modifier.fillMaxSize(),
contentAlignment = Alignment.Center
) {
Canvas(
modifier = Modifier
.fillMaxSize()
.padding(16.dp)
) {
val width = size.width
val height = size.height
val center = Offset(width / 2, height / 2)
val faceRadius = height * 0.35f
val pitch = Math.toRadians(orientation.pitch.toDouble())
val yaw = Math.toRadians(orientation.yaw.toDouble())
val cosY = cos(yaw).toFloat()
val sinY = sin(yaw).toFloat()
val cosP = cos(pitch).toFloat()
val sinP = sin(pitch).toFloat()
fun rotate3D(point: Triple<Float, Float, Float>): Triple<Float, Float, Float> {
val (x, y, z) = point
val x1 = x * cosY - z * sinY
val y1 = y
val z1 = x * sinY + z * cosY
val x2 = x1
val y2 = y1 * cosP - z1 * sinP
val z2 = y1 * sinP + z1 * cosP
return Triple(x2, y2, z2)
}
fun project(point: Triple<Float, Float, Float>): Pair<Float, Float> {
val (x, y, z) = point
val scale = 1f + (z / width)
return Pair(center.x + x * scale, center.y + y * scale)
}
val earWidth = height * 0.08f
val earHeight = height * 0.2f
val earOffsetX = height * 0.4f
val earOffsetY = 0f
val earZ = 0f
for (xSign in listOf(-1f, 1f)) {
val rotated = rotate3D(Triple(earOffsetX * xSign, earOffsetY, earZ))
val (earX, earY) = project(rotated)
drawRoundRect(
color = strokeColor,
topLeft = Offset(earX - earWidth/2, earY - earHeight/2),
size = Size(earWidth, earHeight),
cornerRadius = CornerRadius(earWidth/2),
style = Stroke(width = 4.dp.toPx())
)
}
val spherePath = Path()
val firstPoint = project(rotate3D(Triple(faceRadius, 0f, 0f)))
spherePath.moveTo(firstPoint.first, firstPoint.second)
for (i in 1..32) {
val angle = (i * 2 * Math.PI / 32).toFloat()
val point = project(rotate3D(Triple(
cos(angle) * faceRadius,
sin(angle) * faceRadius,
0f
)))
spherePath.lineTo(point.first, point.second)
}
spherePath.close()
drawContext.canvas.nativeCanvas.apply {
val paint = android.graphics.Paint().apply {
style = android.graphics.Paint.Style.FILL
shader = android.graphics.RadialGradient(
center.x + sinY * faceRadius * 0.3f,
center.y - sinP * faceRadius * 0.3f,
faceRadius * 1.4f,
intArrayOf(
backgroundColor.copy(alpha = 1f).toArgb(),
backgroundColor.copy(alpha = 0.95f).toArgb(),
backgroundColor.copy(alpha = 0.9f).toArgb(),
backgroundColor.copy(alpha = 0.8f).toArgb(),
backgroundColor.copy(alpha = 0.7f).toArgb()
),
floatArrayOf(0.3f, 0.5f, 0.7f, 0.8f, 1f),
android.graphics.Shader.TileMode.CLAMP
)
}
drawPath(spherePath.asAndroidPath(), paint)
val highlightPaint = android.graphics.Paint().apply {
style = android.graphics.Paint.Style.FILL
shader = android.graphics.RadialGradient(
center.x - faceRadius * 0.4f - sinY * faceRadius * 0.5f,
center.y - faceRadius * 0.4f - sinP * faceRadius * 0.5f,
faceRadius * 0.9f,
intArrayOf(
android.graphics.Color.WHITE,
android.graphics.Color.argb(100, 255, 255, 255),
android.graphics.Color.TRANSPARENT
),
floatArrayOf(0f, 0.3f, 1f),
android.graphics.Shader.TileMode.CLAMP
)
alpha = if (darkTheme) 30 else 60
}
drawPath(spherePath.asAndroidPath(), highlightPaint)
val secondaryHighlightPaint = android.graphics.Paint().apply {
style = android.graphics.Paint.Style.FILL
shader = android.graphics.RadialGradient(
center.x + faceRadius * 0.3f + sinY * faceRadius * 0.3f,
center.y + faceRadius * 0.3f - sinP * faceRadius * 0.3f,
faceRadius * 0.7f,
intArrayOf(
android.graphics.Color.WHITE,
android.graphics.Color.TRANSPARENT
),
floatArrayOf(0f, 1f),
android.graphics.Shader.TileMode.CLAMP
)
alpha = if (darkTheme) 15 else 30
}
drawPath(spherePath.asAndroidPath(), secondaryHighlightPaint)
val shadowPaint = android.graphics.Paint().apply {
style = android.graphics.Paint.Style.FILL
shader = android.graphics.RadialGradient(
center.x + sinY * faceRadius * 0.5f,
center.y - sinP * faceRadius * 0.5f,
faceRadius * 1.1f,
intArrayOf(
android.graphics.Color.TRANSPARENT,
android.graphics.Color.BLACK
),
floatArrayOf(0.7f, 1f),
android.graphics.Shader.TileMode.CLAMP
)
alpha = if (darkTheme) 40 else 20
}
drawPath(spherePath.asAndroidPath(), shadowPaint)
}
drawPath(
path = spherePath,
color = strokeColor,
style = Stroke(width = 4.dp.toPx())
)
val smileRadius = faceRadius * 0.5f
val smileStartAngle = -340f
val smileSweepAngle = 140f
val smileOffsetY = faceRadius * 0.1f
val smilePath = Path()
for (i in 0..32) {
val angle = Math.toRadians(smileStartAngle + (smileSweepAngle * i / 32.0))
val x = cos(angle.toFloat()) * smileRadius
val y = sin(angle.toFloat()) * smileRadius + smileOffsetY
val rotated = rotate3D(Triple(x, y, 0f))
val projected = project(rotated)
if (i == 0) {
smilePath.moveTo(projected.first, projected.second)
} else {
smilePath.lineTo(projected.first, projected.second)
}
}
drawPath(
path = smilePath,
color = strokeColor,
style = Stroke(
width = 4.dp.toPx(),
cap = StrokeCap.Round
)
)
val eyeOffsetX = height * 0.15f
val eyeOffsetY = height * 0.1f
val eyeLength = height * 0.08f
for (xSign in listOf(-1f, 1f)) {
val rotated = rotate3D(Triple(eyeOffsetX * xSign, -eyeOffsetY, 0f))
val (eyeX, eyeY) = project(rotated)
drawLine(
color = strokeColor,
start = Offset(eyeX, eyeY - eyeLength/2),
end = Offset(eyeX, eyeY + eyeLength/2),
strokeWidth = 4.dp.toPx(),
cap = StrokeCap.Round
)
}
drawContext.canvas.nativeCanvas.apply {
val paint = android.graphics.Paint().apply {
color = if (darkTheme) android.graphics.Color.WHITE else android.graphics.Color.BLACK
textSize = 12.sp.toPx()
textAlign = android.graphics.Paint.Align.RIGHT
typeface = android.graphics.Typeface.create(
"SF Pro",
android.graphics.Typeface.NORMAL
)
}
val pitch = orientation.pitch.toInt()
val yaw = orientation.yaw.toInt()
val text = "Pitch: ${pitch}° Yaw: ${yaw}°"
drawText(
text,
width - 8.dp.toPx(),
height - 8.dp.toPx(),
paint
)
}
}
}
}
}
@Composable
private fun AccelerationPlot() {
val acceleration by HeadTracking.acceleration.collectAsState()
val maxPoints = 100
val points = remember { mutableStateListOf<Pair<Float, Float>>() }
val darkTheme = isSystemInDarkTheme()
var maxAbs by remember { mutableFloatStateOf(1000f) }
LaunchedEffect(acceleration) {
points.add(Pair(acceleration.horizontal, acceleration.vertical))
if (points.size > maxPoints) {
points.removeAt(0)
}
val currentMax = points.maxOf { maxOf(abs(it.first), abs(it.second)) }
maxAbs = maxOf(currentMax * 1.2f, 1000f)
}
Card(
modifier = Modifier
.fillMaxWidth()
.height(300.dp),
colors = CardDefaults.cardColors(
containerColor = if (darkTheme) Color(0xFF1C1C1E) else Color.White
)
) {
Box(
modifier = Modifier
.fillMaxSize()
.padding(16.dp)
) {
Canvas(
modifier = Modifier.fillMaxSize()
) {
val width = size.width
val height = size.height
val xScale = width / maxPoints
val yScale = (height - 40.dp.toPx()) / (maxAbs * 2)
val zeroY = height / 2
val gridColor = if (darkTheme) Color.White.copy(alpha = 0.1f) else Color.Black.copy(alpha = 0.1f)
for (i in 0..maxPoints step 10) {
val x = i * xScale
drawLine(
color = gridColor,
start = Offset(x, 0f),
end = Offset(x, height),
strokeWidth = 1.dp.toPx()
)
}
val gridStep = maxAbs / 4
for (value in (-maxAbs.toInt()..maxAbs.toInt()) step gridStep.toInt()) {
val y = zeroY - value * yScale
drawLine(
color = gridColor,
start = Offset(0f, y),
end = Offset(width, y),
strokeWidth = 1.dp.toPx()
)
}
drawLine(
color = if (darkTheme) Color.White.copy(alpha = 0.3f) else Color.Black.copy(alpha = 0.3f),
start = Offset(0f, zeroY),
end = Offset(width, zeroY),
strokeWidth = 1.5f.dp.toPx()
)
if (points.size > 1) {
for (i in 0 until points.size - 1) {
val x1 = i * xScale
val x2 = (i + 1) * xScale
drawLine(
color = Color(0xFF007AFF),
start = Offset(x1, zeroY - points[i].first * yScale),
end = Offset(x2, zeroY - points[i + 1].first * yScale),
strokeWidth = 2.dp.toPx()
)
drawLine(
color = Color(0xFFFF3B30),
start = Offset(x1, zeroY - points[i].second * yScale),
end = Offset(x2, zeroY - points[i + 1].second * yScale),
strokeWidth = 2.dp.toPx()
)
}
}
drawContext.canvas.nativeCanvas.apply {
val paint = android.graphics.Paint().apply {
color = if (darkTheme) android.graphics.Color.WHITE else android.graphics.Color.BLACK
textSize = 12.sp.toPx()
textAlign = android.graphics.Paint.Align.RIGHT
}
drawText("${maxAbs.toInt()}", 30.dp.toPx(), 20.dp.toPx(), paint)
drawText("0", 30.dp.toPx(), height/2, paint)
drawText("-${maxAbs.toInt()}", 30.dp.toPx(), height - 10.dp.toPx(), paint)
}
val legendY = 15.dp.toPx()
val textOffsetY = legendY + 5.dp.toPx() / 2
drawCircle(Color(0xFF007AFF), 5.dp.toPx(), Offset(width - 150.dp.toPx(), legendY))
drawContext.canvas.nativeCanvas.apply {
val paint = android.graphics.Paint().apply {
color = if (darkTheme) android.graphics.Color.WHITE else android.graphics.Color.BLACK
textSize = 12.sp.toPx()
textAlign = android.graphics.Paint.Align.LEFT
}
drawText("Horizontal", width - 140.dp.toPx(), textOffsetY, paint)
}
drawCircle(Color(0xFFFF3B30), 5.dp.toPx(), Offset(width - 70.dp.toPx(), legendY))
drawContext.canvas.nativeCanvas.apply {
val paint = android.graphics.Paint().apply {
color = if (darkTheme) android.graphics.Color.WHITE else android.graphics.Color.BLACK
textSize = 12.sp.toPx()
textAlign = android.graphics.Paint.Align.LEFT
}
drawText("Vertical", width - 60.dp.toPx(), textOffsetY, paint)
}
}
}
}
}
@RequiresApi(Build.VERSION_CODES.Q)
@Preview
@Composable
fun HeadTrackingScreenPreview() {
HeadTrackingScreen(navController = NavController(LocalContext.current))
}

View File

@@ -216,7 +216,7 @@ fun LongPressElement(name: String, checked: MutableState<Boolean>, id: String, e
sharedPreferences.getBoolean("long_press_adaptive", false)
)
ServiceManager.getService()
?.updateLongPress(originalLongPressArray, newLongPressArray)
?.updateLongPress(originalLongPressArray, newLongPressArray, offListeningMode)
}
val shape = when {
isFirst -> RoundedCornerShape(topStart = 14.dp, topEnd = 14.dp)

View File

@@ -36,6 +36,7 @@ import android.content.Context
import android.content.Intent
import android.content.IntentFilter
import android.content.SharedPreferences
import android.content.pm.PackageManager
import android.content.res.Resources
import android.media.AudioManager
import android.os.BatteryManager
@@ -45,22 +46,27 @@ import android.os.Handler
import android.os.IBinder
import android.os.Looper
import android.os.ParcelUuid
import android.telecom.TelecomManager
import android.telephony.PhoneStateListener
import android.telephony.TelephonyManager
import android.util.Log
import android.util.TypedValue
import android.view.View
import android.widget.RemoteViews
import android.widget.Toast
import androidx.annotation.RequiresApi
import androidx.annotation.RequiresPermission
import androidx.compose.material3.ExperimentalMaterial3Api
import androidx.core.app.NotificationCompat
import androidx.core.content.edit
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.delay
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.launch
import kotlinx.coroutines.suspendCancellableCoroutine
import me.kavishdevar.aln.MainActivity
import me.kavishdevar.aln.R
import me.kavishdevar.aln.utils.AirPodsNotifications
@@ -70,15 +76,19 @@ import me.kavishdevar.aln.utils.BatteryStatus
import me.kavishdevar.aln.utils.CrossDevice
import me.kavishdevar.aln.utils.CrossDevicePackets
import me.kavishdevar.aln.utils.Enums
import me.kavishdevar.aln.utils.GestureDetector
import me.kavishdevar.aln.utils.HeadTracking
import me.kavishdevar.aln.utils.IslandType
import me.kavishdevar.aln.utils.IslandWindow
import me.kavishdevar.aln.utils.LongPressMode
import me.kavishdevar.aln.utils.LongPressPackets
import me.kavishdevar.aln.utils.MediaController
import me.kavishdevar.aln.utils.PopupWindow
import me.kavishdevar.aln.utils.determinePacket
import me.kavishdevar.aln.utils.isHeadTrackingData
import me.kavishdevar.aln.widgets.BatteryWidget
import me.kavishdevar.aln.widgets.NoiseControlWidget
import org.lsposed.hiddenapibypass.HiddenApiBypass
import java.nio.ByteBuffer
import java.nio.ByteOrder
object ServiceManager {
private var service: AirPodsService? = null
@@ -152,7 +162,7 @@ class AirPodsService : Service() {
}
fun clearLogs() {
clearPacketLogs() // Expose a method to clear logs
clearPacketLogs()
_packetLogsFlow.value = emptySet()
}
@@ -160,6 +170,18 @@ class AirPodsService : Service() {
return LocalBinder()
}
private var gestureDetector: GestureDetector? = null
private var isInCall = false
private var callNumber: String? = null
@RequiresApi(Build.VERSION_CODES.Q)
private fun initGestureDetector() {
if (gestureDetector == null) {
gestureDetector = GestureDetector(this)
}
}
var popupShown = false
fun showPopup(service: Service, name: String) {
@@ -525,6 +547,98 @@ class AirPodsService : Service() {
notificationManager.notify(1, updatedNotification)
}
@RequiresApi(Build.VERSION_CODES.Q)
fun handleIncomingCall() {
if (isInCall) return
initGestureDetector()
gestureDetector?.startDetection { accepted ->
if (accepted) {
answerCall()
} else {
rejectCall()
}
}
}
@OptIn(ExperimentalCoroutinesApi::class)
@RequiresApi(Build.VERSION_CODES.Q)
suspend fun testHeadGestures(): Boolean {
return suspendCancellableCoroutine { continuation ->
gestureDetector?.startDetection(doNotStop = true) { accepted ->
if (continuation.isActive) {
continuation.resume(accepted) {
gestureDetector?.stopDetection()
}
}
}
}
}
private fun answerCall() {
try {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
val telecomManager = getSystemService(TELECOM_SERVICE) as TelecomManager
if (checkSelfPermission(Manifest.permission.ANSWER_PHONE_CALLS) == PackageManager.PERMISSION_GRANTED) {
telecomManager.acceptRingingCall()
}
} else {
val telephonyService = getSystemService(TELEPHONY_SERVICE) as TelephonyManager
val telephonyClass = Class.forName(telephonyService.javaClass.name)
val method = telephonyClass.getDeclaredMethod("getITelephony")
method.isAccessible = true
val telephonyInterface = method.invoke(telephonyService)
val answerCallMethod = telephonyInterface.javaClass.getDeclaredMethod("answerRingingCall")
answerCallMethod.invoke(telephonyInterface)
}
sendToast("Call answered via head gesture")
} catch (e: Exception) {
e.printStackTrace()
sendToast("Failed to answer call: ${e.message}")
} finally {
islandWindow?.close()
}
}
private fun rejectCall() {
try {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
val telecomManager = getSystemService(Context.TELECOM_SERVICE) as TelecomManager
if (checkSelfPermission(Manifest.permission.ANSWER_PHONE_CALLS) == PackageManager.PERMISSION_GRANTED) {
telecomManager.endCall()
}
} else {
val telephonyService = getSystemService(Context.TELEPHONY_SERVICE) as TelephonyManager
val telephonyClass = Class.forName(telephonyService.javaClass.name)
val method = telephonyClass.getDeclaredMethod("getITelephony")
method.isAccessible = true
val telephonyInterface = method.invoke(telephonyService)
val endCallMethod = telephonyInterface.javaClass.getDeclaredMethod("endCall")
endCallMethod.invoke(telephonyInterface)
}
sendToast("Call rejected via head gesture")
} catch (e: Exception) {
e.printStackTrace()
sendToast("Failed to reject call: ${e.message}")
} finally {
islandWindow?.close()
}
}
fun sendToast(message: String) {
Handler(Looper.getMainLooper()).post {
Toast.makeText(applicationContext, message, Toast.LENGTH_SHORT).show()
}
}
@RequiresApi(Build.VERSION_CODES.R)
fun processHeadTrackingData(data: ByteArray) {
val horizontal = ByteBuffer.wrap(data, 51, 2).order(ByteOrder.LITTLE_ENDIAN).short.toInt()
val vertical = ByteBuffer.wrap(data, 53, 2).order(ByteOrder.LITTLE_ENDIAN).short.toInt()
gestureDetector?.processHeadOrientation(horizontal, vertical)
}
private lateinit var connectionReceiver: BroadcastReceiver
private lateinit var disconnectionReceiver: BroadcastReceiver
@@ -533,6 +647,7 @@ class AirPodsService : Service() {
Log.d("AirPodsService", "Service started")
ServiceManager.setService(this)
startForegroundNotification()
initGestureDetector()
val audioManager =
this@AirPodsService.getSystemService(AUDIO_SERVICE) as AudioManager
MediaController.initialize(
@@ -559,9 +674,19 @@ class AirPodsService : Service() {
when (state) {
TelephonyManager.CALL_STATE_RINGING -> {
if (CrossDevice.isAvailable && !isConnectedLocally && earDetectionNotification.status.contains(0x00)) takeOver()
if (sharedPreferences.getBoolean("head_gestures", false)) {
callNumber = phoneNumber
handleIncomingCall()
}
}
TelephonyManager.CALL_STATE_OFFHOOK -> {
if (CrossDevice.isAvailable && !isConnectedLocally && earDetectionNotification.status.contains(0x00)) takeOver()
isInCall = true
}
TelephonyManager.CALL_STATE_IDLE -> {
isInCall = false
callNumber = null
gestureDetector?.stopDetection()
}
}
}
@@ -711,7 +836,7 @@ class AirPodsService : Service() {
}
if (!isConnectedLocally && !CrossDevice.isAvailable) {
clearPacketLogs() // Clear logs when device is not available
clearPacketLogs()
}
return START_STICKY
@@ -729,6 +854,7 @@ class AirPodsService : Service() {
}
}
@RequiresApi(Build.VERSION_CODES.R)
@SuppressLint("MissingPermission")
fun takeOver() {
Log.d("AirPodsService", "Taking over audio")
@@ -750,6 +876,7 @@ class AirPodsService : Service() {
CrossDevice.isAvailable = false
}
@RequiresApi(Build.VERSION_CODES.R)
@SuppressLint("MissingPermission", "UnspecifiedRegisterReceiverFlag")
fun connectToSocket(device: BluetoothDevice) {
HiddenApiBypass.addHiddenApiExemptions("Landroid/bluetooth/BluetoothSocket;")
@@ -824,7 +951,6 @@ class AirPodsService : Service() {
var data: ByteArray = byteArrayOf()
if (bytesRead > 0) {
data = buffer.copyOfRange(0, bytesRead)
logPacket(data, "AirPods")
sendBroadcast(Intent(AirPodsNotifications.Companion.AIRPODS_DATA).apply {
putExtra("data", buffer.copyOfRange(0, bytesRead))
})
@@ -836,7 +962,10 @@ class AirPodsService : Service() {
sharedPreferences.getString("name", device.name),
batteryNotification.getBattery()
)
Log.d("AirPods Data", "Data received: $formattedHex")
if (!isHeadTrackingData(data)) {
Log.d("AirPods Data", "Data received: $formattedHex")
logPacket(data, "AirPods")
}
} else if (bytesRead == -1) {
Log.d("AirPods Service", "Socket closed (bytesRead = -1)")
sendBroadcast(Intent(AirPodsNotifications.Companion.AIRPODS_DISCONNECTED))
@@ -844,6 +973,7 @@ class AirPodsService : Service() {
}
var inEar = false
var inEarData = listOf<Boolean>()
processData(data)
if (earDetectionNotification.isEarDetectionData(data)) {
earDetectionNotification.setStatus(data)
sendBroadcast(Intent(AirPodsNotifications.Companion.EAR_DETECTION_DATA).apply {
@@ -1042,7 +1172,9 @@ class AirPodsService : Service() {
"AirPods Parser",
"Conversation Awareness: ${conversationAwarenessNotification.status}"
)
} else {
}
else if (isHeadTrackingData(data)) {
processHeadTrackingData(data)
}
}
}
@@ -1391,27 +1523,136 @@ class AirPodsService : Service() {
fun updateLongPress(
oldLongPressArray: BooleanArray,
newLongPressArray: BooleanArray,
offListeningMode: Boolean
) {
if (oldLongPressArray.contentEquals(newLongPressArray)) {
return
}
val oldModes = mutableSetOf<LongPressMode>()
val newModes = mutableSetOf<LongPressMode>()
val oldOffEnabled = oldLongPressArray[0]
val oldAncEnabled = oldLongPressArray[1]
val oldTransparencyEnabled = oldLongPressArray[2]
val oldAdaptiveEnabled = oldLongPressArray[3]
if (oldLongPressArray[0]) oldModes.add(LongPressMode.OFF)
if (oldLongPressArray[1]) oldModes.add(LongPressMode.ANC)
if (oldLongPressArray[2]) oldModes.add(LongPressMode.TRANSPARENCY)
if (oldLongPressArray[3]) oldModes.add(LongPressMode.ADAPTIVE)
if (newLongPressArray[0]) newModes.add(LongPressMode.OFF)
if (newLongPressArray[1]) newModes.add(LongPressMode.ANC)
if (newLongPressArray[2]) newModes.add(LongPressMode.TRANSPARENCY)
if (newLongPressArray[3]) newModes.add(LongPressMode.ADAPTIVE)
val newOffEnabled = newLongPressArray[0]
val newAncEnabled = newLongPressArray[1]
val newTransparencyEnabled = newLongPressArray[2]
val newAdaptiveEnabled = newLongPressArray[3]
val changedIndex = findChangedIndex(oldLongPressArray, newLongPressArray)
val newEnabled = newLongPressArray[changedIndex]
Log.d("AirPodsService", "changedIndex: $changedIndex")
var packet: ByteArray? = null
if (offListeningMode) {
packet = when (changedIndex) {
0 -> {
if (newOffEnabled) {
when {
oldAncEnabled && oldTransparencyEnabled && oldAdaptiveEnabled -> LongPressPackets.ENABLE_EVERYTHING.value
oldAncEnabled && oldTransparencyEnabled -> LongPressPackets.ENABLE_OFF_FROM_TRANSPARENCY_AND_ANC.value
oldAncEnabled && oldAdaptiveEnabled -> LongPressPackets.ENABLE_OFF_FROM_ADAPTIVE_AND_ANC.value
oldTransparencyEnabled && oldAdaptiveEnabled -> LongPressPackets.ENABLE_OFF_FROM_TRANSPARENCY_AND_ADAPTIVE.value
else -> null
}
} else {
when {
oldAncEnabled && oldTransparencyEnabled && oldAdaptiveEnabled -> LongPressPackets.DISABLE_OFF_FROM_EVERYTHING.value
oldAncEnabled && oldTransparencyEnabled -> LongPressPackets.DISABLE_OFF_FROM_TRANSPARENCY_AND_ANC.value
oldAncEnabled && oldAdaptiveEnabled -> LongPressPackets.DISABLE_OFF_FROM_ADAPTIVE_AND_ANC.value
oldTransparencyEnabled && oldAdaptiveEnabled -> LongPressPackets.DISABLE_OFF_FROM_TRANSPARENCY_AND_ADAPTIVE.value
else -> null
}
}
}
val packet = determinePacket(changedIndex, newEnabled, oldModes, newModes)
1 -> {
if (newAncEnabled) {
when {
oldOffEnabled && oldTransparencyEnabled && oldAdaptiveEnabled -> LongPressPackets.ENABLE_EVERYTHING.value
oldOffEnabled && oldTransparencyEnabled -> LongPressPackets.ENABLE_ANC_FROM_OFF_AND_TRANSPARENCY.value
oldOffEnabled && oldAdaptiveEnabled -> LongPressPackets.ENABLE_ANC_FROM_OFF_AND_ADAPTIVE.value
oldTransparencyEnabled && oldAdaptiveEnabled -> LongPressPackets.ENABLE_OFF_FROM_TRANSPARENCY_AND_ADAPTIVE.value
else -> null
}
} else {
when {
oldOffEnabled && oldTransparencyEnabled && oldAdaptiveEnabled -> LongPressPackets.DISABLE_ANC_FROM_EVERYTHING.value
oldOffEnabled && oldTransparencyEnabled -> LongPressPackets.DISABLE_ANC_FROM_OFF_AND_TRANSPARENCY.value
oldOffEnabled && oldAdaptiveEnabled -> LongPressPackets.DISABLE_ANC_FROM_OFF_AND_ADAPTIVE.value
oldTransparencyEnabled && oldAdaptiveEnabled -> LongPressPackets.DISABLE_OFF_FROM_TRANSPARENCY_AND_ADAPTIVE.value
else -> null
}
}
}
2 -> {
if (newTransparencyEnabled) {
when {
oldOffEnabled && oldAncEnabled && oldAdaptiveEnabled -> LongPressPackets.ENABLE_EVERYTHING.value
oldOffEnabled && oldAncEnabled -> LongPressPackets.ENABLE_TRANSPARENCY_FROM_OFF_AND_ANC.value
oldOffEnabled && oldAdaptiveEnabled -> LongPressPackets.ENABLE_TRANSPARENCY_FROM_OFF_AND_ADAPTIVE.value
oldAncEnabled && oldAdaptiveEnabled -> LongPressPackets.ENABLE_TRANSPARENCY_FROM_ADAPTIVE_AND_ANC.value
else -> null
}
} else {
when {
oldOffEnabled && oldAncEnabled && oldAdaptiveEnabled -> LongPressPackets.DISABLE_TRANSPARENCY_FROM_EVERYTHING.value
oldOffEnabled && oldAncEnabled -> LongPressPackets.DISABLE_TRANSPARENCY_FROM_OFF_AND_ANC.value
oldOffEnabled && oldAdaptiveEnabled -> LongPressPackets.DISABLE_TRANSPARENCY_FROM_OFF_AND_ADAPTIVE.value
oldAncEnabled && oldAdaptiveEnabled -> LongPressPackets.DISABLE_TRANSPARENCY_FROM_ADAPTIVE_AND_ANC.value
else -> null
}
}
}
3 -> {
if (newAdaptiveEnabled) {
when {
oldOffEnabled && oldAncEnabled && oldTransparencyEnabled -> LongPressPackets.ENABLE_EVERYTHING.value
oldOffEnabled && oldAncEnabled -> LongPressPackets.ENABLE_ADAPTIVE_FROM_OFF_AND_ANC.value
oldOffEnabled && oldTransparencyEnabled -> LongPressPackets.ENABLE_ADAPTIVE_FROM_OFF_AND_TRANSPARENCY.value
oldAncEnabled && oldTransparencyEnabled -> LongPressPackets.ENABLE_ADAPTIVE_FROM_TRANSPARENCY_AND_ANC.value
else -> null
}
} else {
when {
oldOffEnabled && oldAncEnabled && oldTransparencyEnabled -> LongPressPackets.DISABLE_ADAPTIVE_FROM_EVERYTHING.value
oldOffEnabled && oldAncEnabled -> LongPressPackets.DISABLE_ADAPTIVE_FROM_OFF_AND_ANC.value
oldOffEnabled && oldTransparencyEnabled -> LongPressPackets.DISABLE_ADAPTIVE_FROM_OFF_AND_TRANSPARENCY.value
oldAncEnabled && oldTransparencyEnabled -> LongPressPackets.DISABLE_ADAPTIVE_FROM_TRANSPARENCY_AND_ANC.value
else -> null
}
}
}
else -> null
}
} else {
when (changedIndex) {
1 -> {
packet = if (newLongPressArray[1]) {
LongPressPackets.ENABLE_EVERYTHING_OFF_DISABLED.value
} else {
LongPressPackets.DISABLE_ANC_OFF_DISABLED.value
}
}
2 -> {
packet = if (newLongPressArray[2]) {
LongPressPackets.ENABLE_EVERYTHING_OFF_DISABLED.value
} else {
LongPressPackets.DISABLE_TRANSPARENCY_OFF_DISABLED.value
}
}
3 -> {
packet = if (newLongPressArray[3]) {
LongPressPackets.ENABLE_EVERYTHING_OFF_DISABLED.value
} else {
LongPressPackets.DISABLE_ADAPTIVE_OFF_DISABLED.value
}
}
}
}
packet?.let {
Log.d("AirPodsService", "Sending packet: ${it.joinToString(" ") { "%02X".format(it) }}")
sendPacket(it)
@@ -1442,11 +1683,29 @@ class AirPodsService : Service() {
e.printStackTrace()
}
telephonyManager.listen(phoneStateListener, PhoneStateListener.LISTEN_NONE)
// Reset state variables
isConnectedLocally = false
CrossDevice.isAvailable = true
super.onDestroy()
}
var isHeadTrackingActive = false
fun startHeadTracking() {
isHeadTrackingActive = true
socket.outputStream.write(Enums.START_HEAD_TRACKING.value)
HeadTracking.reset()
}
fun stopHeadTracking() {
socket.outputStream.write(Enums.STOP_HEAD_TRACKING.value)
isHeadTrackingActive = false
}
fun processData(data: ByteArray) {
if (isHeadTrackingActive && isHeadTrackingData(data)) {
HeadTracking.processPacket(data)
}
}
}
private fun Int.dpToPx(): Int {

View File

@@ -143,9 +143,7 @@ object CrossDevice {
}
fun sendReceivedPacket(packet: ByteArray) {
Log.d("CrossDevice", "Sending packet to remote device")
if (clientSocket == null || clientSocket!!.outputStream != null) {
Log.d("CrossDevice", "Client socket is null")
return
}
clientSocket?.outputStream?.write(CrossDevicePackets.AIRPODS_DATA_HEADER.packet + packet)
@@ -257,7 +255,6 @@ object CrossDevice {
fun sendRemotePacket(byteArray: ByteArray) {
if (clientSocket == null || clientSocket!!.outputStream == null) {
Log.d("CrossDevice", "Client socket is null")
return
}
clientSocket?.outputStream?.write(byteArray)

View File

@@ -0,0 +1,441 @@
package me.kavishdevar.aln.utils
import android.os.Build
import android.util.Log
import androidx.annotation.RequiresApi
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import me.kavishdevar.aln.services.AirPodsService
import me.kavishdevar.aln.services.ServiceManager
import java.util.Collections
import java.util.concurrent.CopyOnWriteArrayList
import kotlin.math.abs
import kotlin.math.max
import kotlin.math.min
import kotlin.math.pow
@RequiresApi(Build.VERSION_CODES.Q)
class GestureDetector(
private val airPodsService: AirPodsService,
) {
companion object {
private const val TAG = "GestureDetector"
private const val START_CMD = "04 00 04 00 17 00 00 00 10 00 10 00 08 A1 02 42 0B 08 0E 10 02 1A 05 01 40 9C 00 00"
private const val STOP_CMD = "04 00 04 00 17 00 00 00 10 00 11 00 08 7E 10 02 42 0B 08 4E 10 02 1A 05 01 00 00 00 00"
private const val IMMEDIATE_FEEDBACK_THRESHOLD = 600
private const val DIRECTION_CHANGE_SENSITIVITY = 150
private const val FAST_MOVEMENT_THRESHOLD = 300.0
private const val MIN_REQUIRED_EXTREMES = 3
private const val MAX_REQUIRED_EXTREMES = 4
}
val audio = GestureFeedback(ServiceManager.getService()?.baseContext!!)
private val horizontalBuffer = Collections.synchronizedList(ArrayList<Double>())
private val verticalBuffer = Collections.synchronizedList(ArrayList<Double>())
private val horizontalAvgBuffer = Collections.synchronizedList(ArrayList<Double>())
private val verticalAvgBuffer = Collections.synchronizedList(ArrayList<Double>())
private var prevHorizontal: Double = 0.0
private var prevVertical: Double = 0.0
private val horizontalPeaks = CopyOnWriteArrayList<Triple<Int, Double, Long>>()
private val horizontalTroughs = CopyOnWriteArrayList<Triple<Int, Double, Long>>()
private val verticalPeaks = CopyOnWriteArrayList<Triple<Int, Double, Long>>()
private val verticalTroughs = CopyOnWriteArrayList<Triple<Int, Double, Long>>()
private var lastPeakTime: Long = 0
private val peakIntervals = Collections.synchronizedList(ArrayList<Double>())
private val movementSpeedIntervals = Collections.synchronizedList(ArrayList<Long>())
private val peakThreshold = 400
private val directionChangeThreshold = DIRECTION_CHANGE_SENSITIVITY
private val rhythmConsistencyThreshold = 0.5
private var horizontalIncreasing: Boolean? = null
private var verticalIncreasing: Boolean? = null
private var detectionTimeout = 15000L
private val minConfidenceThreshold = 0.7
private var isRunning = false
private var detectionJob: Job? = null
private var gestureDetectedCallback: ((Boolean) -> Unit)? = null
private var significantMotion = false
private var lastSignificantMotionTime = 0L
init {
while (horizontalAvgBuffer.size < 3) horizontalAvgBuffer.add(0.0)
while (verticalAvgBuffer.size < 3) verticalAvgBuffer.add(0.0)
}
/**
* Start head gesture detection
*/
fun startDetection(doNotStop: Boolean = false, onGestureDetected: (Boolean) -> Unit) {
if (isRunning) return
Log.d(TAG, "Starting gesture detection...")
isRunning = true
gestureDetectedCallback = onGestureDetected
clearData()
prevHorizontal = 0.0
prevVertical = 0.0
airPodsService.sendPacket(START_CMD)
detectionJob = CoroutineScope(Dispatchers.Default).launch {
val startTime = System.currentTimeMillis()
while (isRunning && (System.currentTimeMillis() - startTime < detectionTimeout)) {
delay(50)
val gesture = detectGestures()
if (gesture != null) {
withContext(Dispatchers.Main) {
audio.playConfirmation(gesture)
gestureDetectedCallback?.invoke(gesture)
stopDetection(doNotStop)
}
break
}
}
if (isRunning) {
Log.d(TAG, "Gesture detection timed out")
withContext(Dispatchers.Main) {
stopDetection(doNotStop)
}
}
}
}
/**
* Stop head gesture detection
*/
fun stopDetection(doNotStop: Boolean = false) {
if (!isRunning) return
Log.d(TAG, "Stopping gesture detection")
isRunning = false
if (!doNotStop) airPodsService.sendPacket(STOP_CMD)
detectionJob?.cancel()
detectionJob = null
gestureDetectedCallback = null
}
/**
* Process head orientation data received from AirPods
*/
@RequiresApi(Build.VERSION_CODES.R)
fun processHeadOrientation(horizontal: Int, vertical: Int) {
if (!isRunning) return
val horizontalDelta = horizontal - prevHorizontal
val verticalDelta = vertical - prevVertical
val significantHorizontal = abs(horizontalDelta) > IMMEDIATE_FEEDBACK_THRESHOLD
val significantVertical = abs(verticalDelta) > IMMEDIATE_FEEDBACK_THRESHOLD
if (significantHorizontal && (!significantVertical || abs(horizontalDelta) > abs(verticalDelta))) {
CoroutineScope(Dispatchers.Main).launch {
audio.playDirectional(isVertical = false, value = horizontalDelta)
}
significantMotion = true
lastSignificantMotionTime = System.currentTimeMillis()
Log.d(TAG, "Significant HORIZONTAL movement: $horizontalDelta")
}
else if (significantVertical) {
CoroutineScope(Dispatchers.Main).launch {
audio.playDirectional(isVertical = true, value = verticalDelta)
}
significantMotion = true
lastSignificantMotionTime = System.currentTimeMillis()
Log.d(TAG, "Significant VERTICAL movement: $verticalDelta")
}
else if (significantMotion &&
(System.currentTimeMillis() - lastSignificantMotionTime) > 300) {
significantMotion = false
}
prevHorizontal = horizontal.toDouble()
prevVertical = vertical.toDouble()
val smoothHorizontal = applySmoothing(horizontal.toDouble(), horizontalAvgBuffer)
val smoothVertical = applySmoothing(vertical.toDouble(), verticalAvgBuffer)
synchronized(horizontalBuffer) {
horizontalBuffer.add(smoothHorizontal)
if (horizontalBuffer.size > 100) horizontalBuffer.removeAt(0)
}
synchronized(verticalBuffer) {
verticalBuffer.add(smoothVertical)
if (verticalBuffer.size > 100) verticalBuffer.removeAt(0)
}
detectPeaksAndTroughs()
}
/**
* Apply moving average smoothing
*/
private fun applySmoothing(newValue: Double, buffer: MutableList<Double>): Double {
synchronized(buffer) {
buffer.add(newValue)
if (buffer.size > 3) buffer.removeAt(0)
return buffer.average()
}
}
/**
* Detect motion direction changes
*/
private fun detectPeaksAndTroughs() {
if (horizontalBuffer.size < 4 || verticalBuffer.size < 4) return
val hValues = horizontalBuffer.takeLast(4)
val vValues = verticalBuffer.takeLast(4)
val hVariance = calculateVariance(hValues)
val vVariance = calculateVariance(vValues)
processDirectionChanges(
horizontalBuffer,
horizontalIncreasing,
hVariance,
horizontalPeaks,
horizontalTroughs
)?.let { horizontalIncreasing = it }
processDirectionChanges(
verticalBuffer,
verticalIncreasing,
vVariance,
verticalPeaks,
verticalTroughs
)?.let { verticalIncreasing = it }
}
/**
* Process direction changes and detect peaks/troughs
*/
private fun processDirectionChanges(
buffer: List<Double>,
isIncreasing: Boolean?,
variance: Double,
peaks: MutableList<Triple<Int, Double, Long>>,
troughs: MutableList<Triple<Int, Double, Long>>
): Boolean? {
if (buffer.size < 2) return isIncreasing
val current = buffer.last()
val prev = buffer[buffer.size - 2]
var increasing = isIncreasing ?: (current > prev)
val dynamicThreshold = max(50.0, min(directionChangeThreshold.toDouble(), variance / 3))
val now = System.currentTimeMillis()
if (increasing && current < prev - dynamicThreshold) {
if (abs(prev) > peakThreshold) {
peaks.add(Triple(buffer.size - 1, prev, now))
if (lastPeakTime > 0) {
val interval = (now - lastPeakTime) / 1000.0
val timeDiff = now - lastPeakTime
synchronized(peakIntervals) {
peakIntervals.add(interval)
if (peakIntervals.size > 5) peakIntervals.removeAt(0)
}
synchronized(movementSpeedIntervals) {
movementSpeedIntervals.add(timeDiff)
if (movementSpeedIntervals.size > 5) movementSpeedIntervals.removeAt(0)
}
}
lastPeakTime = now
}
increasing = false
} else if (!increasing && current > prev + dynamicThreshold) {
if (abs(prev) > peakThreshold) {
troughs.add(Triple(buffer.size - 1, prev, now))
if (lastPeakTime > 0) {
val interval = (now - lastPeakTime) / 1000.0
val timeDiff = now - lastPeakTime
synchronized(peakIntervals) {
peakIntervals.add(interval)
if (peakIntervals.size > 5) peakIntervals.removeAt(0)
}
synchronized(movementSpeedIntervals) {
movementSpeedIntervals.add(timeDiff)
if (movementSpeedIntervals.size > 5) movementSpeedIntervals.removeAt(0)
}
}
lastPeakTime = now
}
increasing = true
}
return increasing
}
/**
* Calculate variance of a list of values
*/
private fun calculateVariance(values: List<Double>): Double {
if (values.size <= 1) return 0.0
val mean = values.average()
val squaredDiffs = values.map { (it - mean) * (it - mean) }
return squaredDiffs.average()
}
/**
* Calculate how consistent the timing between peaks is
*/
private fun calculateRhythmConsistency(): Double {
if (peakIntervals.size < 2) return 0.0
val meanInterval = peakIntervals.average()
if (meanInterval == 0.0) return 0.0
val variances = peakIntervals.map { (it / meanInterval - 1.0).pow(2) }
val consistency = 1.0 - min(1.0, variances.average() / rhythmConsistencyThreshold)
return max(0.0, consistency)
}
/**
* Calculate confidence score for gesture detection
*/
private fun calculateConfidenceScore(extremes: List<Triple<Int, Double, Long>>, isVertical: Boolean): Double {
if (extremes.size < getRequiredExtremes()) return 0.0
val sortedExtremes = extremes.sortedBy { it.first }
val recent = sortedExtremes.takeLast(getRequiredExtremes())
val avgAmplitude = recent.map { abs(it.second) }.average()
val amplitudeFactor = min(1.0, avgAmplitude / 600)
val rhythmFactor = calculateRhythmConsistency()
val signs = recent.map { if (it.second > 0) 1 else -1 }
val alternating = (1 until signs.size).all { signs[it] != signs[it - 1] }
val alternationFactor = if (alternating) 1.0 else 0.5
val isolationFactor = if (isVertical) {
val vertAmplitude = recent.map { abs(it.second) }.average()
val horizVals = horizontalBuffer.takeLast(recent.size * 2)
val horizAmplitude = horizVals.map { abs(it) }.average()
min(1.0, vertAmplitude / (horizAmplitude + 0.1) * 1.2)
} else {
val horizAmplitude = recent.map { abs(it.second) }.average()
val vertVals = verticalBuffer.takeLast(recent.size * 2)
val vertAmplitude = vertVals.map { abs(it) }.average()
min(1.0, horizAmplitude / (vertAmplitude + 0.1) * 1.2)
}
return (
amplitudeFactor * 0.4 +
rhythmFactor * 0.2 +
alternationFactor * 0.2 +
isolationFactor * 0.2
)
}
/**
* Calculate the required number of extremes based on movement speed
* - Fast movements (short intervals) require more evidence (5 extremes)
* - Slow, deliberate movements need fewer evidence points (3 extremes)
*/
private fun getRequiredExtremes(): Int {
if (movementSpeedIntervals.isEmpty()) return MIN_REQUIRED_EXTREMES
val avgInterval = movementSpeedIntervals.average()
Log.d(TAG, "Average movement interval: $avgInterval ms")
return if (avgInterval < FAST_MOVEMENT_THRESHOLD) {
MAX_REQUIRED_EXTREMES
} else {
MIN_REQUIRED_EXTREMES
}
}
/**
* Detect gestures based on collected motion data
*/
private fun detectGestures(): Boolean? {
val requiredExtremes = getRequiredExtremes()
Log.d(TAG, "Current required extremes: $requiredExtremes")
if (verticalPeaks.size + verticalTroughs.size >= requiredExtremes) {
val allExtremes = (verticalPeaks + verticalTroughs).sortedBy { it.first }
val confidence = calculateConfidenceScore(allExtremes, isVertical = true)
Log.d(TAG, "Vertical motion confidence: $confidence (need $minConfidenceThreshold)")
if (confidence >= minConfidenceThreshold) {
Log.d(TAG, "\"Yes\" Gesture Detected (confidence: $confidence, extremes: ${allExtremes.size}/$requiredExtremes)")
return true
}
}
if (horizontalPeaks.size + horizontalTroughs.size >= requiredExtremes) {
val allExtremes = (horizontalPeaks + horizontalTroughs).sortedBy { it.first }
val confidence = calculateConfidenceScore(allExtremes, isVertical = false)
Log.d(TAG, "Horizontal motion confidence: $confidence (need $minConfidenceThreshold)")
if (confidence >= minConfidenceThreshold) {
Log.d(TAG, "\"No\" Gesture Detected (confidence: $confidence, extremes: ${allExtremes.size}/$requiredExtremes)")
return false
}
}
return null
}
/**
* Clear all buffers and tracking data
*/
private fun clearData() {
horizontalBuffer.clear()
verticalBuffer.clear()
horizontalPeaks.clear()
horizontalTroughs.clear()
verticalPeaks.clear()
verticalTroughs.clear()
peakIntervals.clear()
movementSpeedIntervals.clear()
horizontalIncreasing = null
verticalIncreasing = null
lastPeakTime = 0
significantMotion = false
lastSignificantMotionTime = 0L
}
/**
* Extension function for power calculation
*/
private fun Double.pow(exponent: Int): Double = this.pow(exponent.toDouble())
}

View File

@@ -0,0 +1,228 @@
@file:Suppress("PrivatePropertyName")
package me.kavishdevar.aln.utils
import android.content.Context
import android.media.AudioAttributes
import android.media.AudioDeviceInfo
import android.media.AudioFocusRequest
import android.media.AudioManager
import android.media.SoundPool
import android.os.Build
import android.os.SystemClock
import android.util.Log
import androidx.annotation.RequiresApi
import me.kavishdevar.aln.R
import java.util.concurrent.atomic.AtomicBoolean
/**
* Audio feedback for head gestures using efficient SoundPool API
* - Simple audio cues for direction
* - Strict channel separation for clarity
* - Optimized for low latency
*/
@RequiresApi(Build.VERSION_CODES.Q)
class GestureFeedback(private val context: Context) {
private val TAG = "GestureFeedback"
private val soundsLoaded = AtomicBoolean(false)
private fun forceBluetoothRouting(audioManager: AudioManager) {
try {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
val devices = audioManager.getDevices(AudioManager.GET_DEVICES_OUTPUTS)
val bluetoothDevice = devices.find {
it.type == AudioDeviceInfo.TYPE_BLUETOOTH_A2DP ||
it.type == AudioDeviceInfo.TYPE_BLUETOOTH_SCO
}
bluetoothDevice?.let { device ->
val focusRequest = AudioFocusRequest.Builder(AudioManager.AUDIOFOCUS_GAIN_TRANSIENT_EXCLUSIVE)
.setAudioAttributes(AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_ASSISTANCE_ACCESSIBILITY)
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
.build())
.build()
audioManager.requestAudioFocus(focusRequest)
if (!audioManager.isBluetoothScoOn) {
audioManager.isBluetoothScoOn = true
audioManager.startBluetoothSco()
}
Log.d(TAG, "Forced audio routing to Bluetooth device")
}
} else {
if (!audioManager.isBluetoothScoOn) {
audioManager.isBluetoothScoOn = true
audioManager.startBluetoothSco()
Log.d(TAG, "Started Bluetooth SCO")
}
}
} catch (e: Exception) {
Log.e(TAG, "Failed to force Bluetooth routing", e)
}
}
private val soundPool = SoundPool.Builder()
.setMaxStreams(3)
.setAudioAttributes(
AudioAttributes.Builder()
.setUsage(AudioAttributes.USAGE_ASSISTANCE_ACCESSIBILITY)
.setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
.setFlags(AudioAttributes.FLAG_LOW_LATENCY or
AudioAttributes.FLAG_AUDIBILITY_ENFORCED)
.build()
)
.build()
private var soundId = 0
private var confirmYesId = 0
private var confirmNoId = 0
private var lastHorizontalTime = 0L
private var lastLeftTime = 0L
private var lastRightTime = 0L
private var lastVerticalTime = 0L
private var lastUpTime = 0L
private var lastDownTime = 0L
private val MIN_TIME_BETWEEN_SOUNDS = 150L
private val MIN_TIME_BETWEEN_DIRECTION = 200L
private var currentHorizontalStreamId = 0
private var currentVerticalStreamId = 0
private val LEFT_VOLUME = Pair(1.0f, 0.0f)
private val RIGHT_VOLUME = Pair(0.0f, 1.0f)
private val VERTICAL_VOLUME = Pair(1.0f, 1.0f)
init {
soundId = soundPool.load(context, R.raw.blip_no, 1)
confirmYesId = soundPool.load(context, R.raw.confirm_yes, 1)
confirmNoId = soundPool.load(context, R.raw.confirm_no, 1)
soundPool.setOnLoadCompleteListener { _, _, _ ->
Log.d(TAG, "Sounds loaded")
soundsLoaded.set(true)
soundPool.play(soundId, 0.0f, 0.0f, 1, 0, 1.0f)
}
}
/**
* Play directional feedback sound with appropriate channel separation
* Optimized for minimal latency
*/
@RequiresApi(Build.VERSION_CODES.R)
fun playDirectional(isVertical: Boolean, value: Double) {
if (!soundsLoaded.get()) {
Log.d(TAG, "Sounds not yet loaded, skipping playback")
return
}
val now = SystemClock.uptimeMillis()
if (isVertical) {
val isUp = value > 0
if (now - lastVerticalTime < MIN_TIME_BETWEEN_SOUNDS) {
Log.d(TAG, "Skipping vertical sound due to general vertical debounce")
return
}
if (isUp && now - lastUpTime < MIN_TIME_BETWEEN_DIRECTION) {
Log.d(TAG, "Skipping UP sound due to direction debounce")
return
}
if (!isUp && now - lastDownTime < MIN_TIME_BETWEEN_DIRECTION) {
Log.d(TAG, "Skipping DOWN sound due to direction debounce")
return
}
if (currentVerticalStreamId > 0) {
soundPool.stop(currentVerticalStreamId)
}
val (leftVol, rightVol) = VERTICAL_VOLUME
currentVerticalStreamId = soundPool.play(soundId, leftVol, rightVol, 1, 0, 1.0f)
Log.d(TAG, "Playing VERTICAL sound: ${if (isUp) "UP" else "DOWN"} - streamID=$currentVerticalStreamId")
lastVerticalTime = now
if (isUp) {
lastUpTime = now
} else {
lastDownTime = now
}
} else {
if (now - lastHorizontalTime < MIN_TIME_BETWEEN_SOUNDS) {
Log.d(TAG, "Skipping horizontal sound due to general horizontal debounce")
return
}
val isRight = value > 0
if (isRight && now - lastRightTime < MIN_TIME_BETWEEN_DIRECTION) {
Log.d(TAG, "Skipping RIGHT sound due to direction debounce")
return
}
if (!isRight && now - lastLeftTime < MIN_TIME_BETWEEN_DIRECTION) {
Log.d(TAG, "Skipping LEFT sound due to direction debounce")
return
}
if (currentHorizontalStreamId > 0) {
soundPool.stop(currentHorizontalStreamId)
}
val (leftVol, rightVol) = if (isRight) RIGHT_VOLUME else LEFT_VOLUME
currentHorizontalStreamId = soundPool.play(soundId, leftVol, rightVol, 1, 0, 1.0f)
Log.d(TAG, "Playing HORIZONTAL sound: ${if (isRight) "RIGHT" else "LEFT"} - streamID=$currentHorizontalStreamId")
lastHorizontalTime = now
if (isRight) {
lastRightTime = now
} else {
lastLeftTime = now
}
}
}
/**
* Play confirmation sound for completed gesture
*/
fun playConfirmation(isYes: Boolean) {
if (currentHorizontalStreamId > 0) {
soundPool.stop(currentHorizontalStreamId)
}
if (currentVerticalStreamId > 0) {
soundPool.stop(currentVerticalStreamId)
}
val soundId = if (isYes) confirmYesId else confirmNoId
if (soundId != 0 && soundsLoaded.get()) {
val streamId = soundPool.play(soundId, 1.0f, 1.0f, 1, 0, 1.0f)
Log.d(TAG, "Playing ${if (isYes) "YES" else "NO"} confirmation - streamID=$streamId")
}
}
/**
* Clean up resources
*/
fun release() {
try {
soundPool.release()
} catch (e: Exception) {
Log.e(TAG, "Error releasing resources", e)
}
}
}

View File

@@ -0,0 +1,84 @@
package me.kavishdevar.aln.utils
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlin.math.roundToInt
data class Orientation(val pitch: Float = 0f, val yaw: Float = 0f)
data class Acceleration(val vertical: Float = 0f, val horizontal: Float = 0f)
object HeadTracking {
private val _orientation = MutableStateFlow(Orientation())
val orientation = _orientation.asStateFlow()
private val _acceleration = MutableStateFlow(Acceleration())
val acceleration = _acceleration.asStateFlow()
private val calibrationSamples = mutableListOf<Triple<Int, Int, Int>>()
private var isCalibrated = false
private var o1Neutral = 19000
private var o2Neutral = 0
private var o3Neutral = 0
private const val CALIBRATION_SAMPLE_COUNT = 10
private const val ORIENTATION_OFFSET = 5500
fun processPacket(packet: ByteArray) {
val o1 = bytesToInt(packet[43], packet[44])
val o2 = bytesToInt(packet[45], packet[46])
val o3 = bytesToInt(packet[47], packet[48])
val horizontalAccel = bytesToInt(packet[51], packet[52]).toFloat()
val verticalAccel = bytesToInt(packet[53], packet[54]).toFloat()
if (!isCalibrated) {
calibrationSamples.add(Triple(o1, o2, o3))
if (calibrationSamples.size >= CALIBRATION_SAMPLE_COUNT) {
calibrate()
}
return
}
val orientation = calculateOrientation(o1, o2, o3)
_orientation.value = orientation
_acceleration.value = Acceleration(verticalAccel, horizontalAccel)
}
private fun calibrate() {
if (calibrationSamples.size < 3) return
// Add offset during calibration
o1Neutral = calibrationSamples.map { it.first + ORIENTATION_OFFSET }.average().roundToInt()
o2Neutral = calibrationSamples.map { it.second + ORIENTATION_OFFSET }.average().roundToInt()
o3Neutral = calibrationSamples.map { it.third + ORIENTATION_OFFSET }.average().roundToInt()
isCalibrated = true
}
@Suppress("UnusedVariable")
private fun calculateOrientation(o1: Int, o2: Int, o3: Int): Orientation {
if (!isCalibrated) return Orientation()
// Add offset before normalizationval
val o1Norm = (o1 + ORIENTATION_OFFSET) - o1Neutral
val o2Norm = (o2 + ORIENTATION_OFFSET) - o2Neutral
val o3Norm = (o3 + ORIENTATION_OFFSET) - o3Neutral
val pitch = (o2Norm + o3Norm) / 2f / 32000f * 180f
val yaw = (o2Norm - o3Norm) / 2f / 32000f * 180f
return Orientation(pitch, yaw)
}
private fun bytesToInt(b1: Byte, b2: Byte): Int {
return (b2.toInt() shl 8) or (b1.toInt() and 0xFF)
}
fun reset() {
calibrationSamples.clear()
isCalibrated = false
_orientation.value = Orientation()
_acceleration.value = Acceleration()
}
}

View File

@@ -45,7 +45,8 @@ import me.kavishdevar.aln.services.ServiceManager
enum class IslandType {
CONNECTED,
TAKING_OVER,
MOVED_TO_REMOTE
MOVED_TO_REMOTE,
// CALL_GESTURE
}
class IslandWindow(context: Context) {
@@ -84,14 +85,20 @@ class IslandWindow(context: Context) {
close()
}
if (type == IslandType.TAKING_OVER) {
islandView.findViewById<TextView>(R.id.island_connected_text).text = getString(context, R.string.island_taking_over_text)
} else if (type == IslandType.MOVED_TO_REMOTE) {
islandView.findViewById<TextView>(R.id.island_connected_text).text = getString(context, R.string.island_moved_to_remote_text)
} else if (CrossDevice.isAvailable) {
islandView.findViewById<TextView>(R.id.island_connected_text).text = getString(context, R.string.island_connected_remote_text)
} else if (type == IslandType.CONNECTED) {
islandView.findViewById<TextView>(R.id.island_connected_text).text = getString(context, R.string.island_connected_text)
when (type) {
IslandType.CONNECTED -> {
islandView.findViewById<TextView>(R.id.island_connected_text).text = getString(context, R.string.island_connected_text)
}
IslandType.TAKING_OVER -> {
islandView.findViewById<TextView>(R.id.island_connected_text).text = getString(context, R.string.island_taking_over_text)
}
IslandType.MOVED_TO_REMOTE -> {
islandView.findViewById<TextView>(R.id.island_connected_text).text = getString(context, R.string.island_moved_to_remote_text)
}
// IslandType.CALL_GESTURE -> {
// islandView.findViewById<TextView>(R.id.island_connected_text).text = "Incoming Call from $name"
// islandView.findViewById<TextView>(R.id.island_device_name).text = "Use Head Gestures to answer."
// }
}
val batteryProgressBar = islandView.findViewById<ProgressBar>(R.id.island_battery_progress)

View File

@@ -45,7 +45,9 @@ enum class Enums(val value: ByteArray) {
NOISE_CANCELLATION_ADAPTIVE(NOISE_CANCELLATION_PREFIX.value + Capabilities.NoiseCancellation.ADAPTIVE.value + SUFFIX.value),
SET_CONVERSATION_AWARENESS_OFF(PREFIX.value + SETTINGS.value + CONVERSATION_AWARENESS.value + Capabilities.ConversationAwareness.OFF.value + SUFFIX.value),
SET_CONVERSATION_AWARENESS_ON(PREFIX.value + SETTINGS.value + CONVERSATION_AWARENESS.value + Capabilities.ConversationAwareness.ON.value + SUFFIX.value),
CONVERSATION_AWARENESS_RECEIVE_PREFIX(PREFIX.value + byteArrayOf(0x4b, 0x00, 0x02, 0x00));
CONVERSATION_AWARENESS_RECEIVE_PREFIX(PREFIX.value + byteArrayOf(0x4b, 0x00, 0x02, 0x00)),
START_HEAD_TRACKING(byteArrayOf(0x04, 0x00, 0x04, 0x00, 0x17, 0x00, 0x00, 0x00, 0x10, 0x00, 0x10, 0x00, 0x08, 0xA1.toByte(), 0x02, 0x42, 0x0B, 0x08, 0x0E, 0x10, 0x02, 0x1A, 0x05, 0x01, 0x40, 0x9C.toByte(), 0x00, 0x00)),
STOP_HEAD_TRACKING(byteArrayOf(0x04, 0x00, 0x04, 0x00, 0x17, 0x00, 0x00, 0x00, 0x10, 0x00, 0x11, 0x00, 0x08, 0x7E.toByte(), 0x10, 0x02, 0x42, 0x0B, 0x08, 0x4E.toByte(), 0x10, 0x02, 0x1A, 0x05, 0x01, 0x00, 0x00, 0x00, 0x00));
}
object BatteryComponent {
@@ -241,36 +243,105 @@ class Capabilities {
}
}
enum class LongPressMode {
OFF, TRANSPARENCY, ADAPTIVE, ANC
enum class LongPressPackets(val value: ByteArray) {
ENABLE_EVERYTHING(byteArrayOf(0x04, 0x00, 0x04, 0x00, 0x09, 0x00, 0x1A, 0x0F, 0x00, 0x00, 0x00)),
DISABLE_OFF_FROM_EVERYTHING(byteArrayOf(0x04, 0x00, 0x04, 0x00, 0x09, 0x00, 0x1A, 0x0e, 0x00, 0x00, 0x00)),
DISABLE_OFF_FROM_TRANSPARENCY_AND_ADAPTIVE(byteArrayOf(0x04, 0x00, 0x04, 0x00, 0x09, 0x00, 0x1A, 0x0c, 0x00, 0x00, 0x00)),
DISABLE_OFF_FROM_TRANSPARENCY_AND_ANC(byteArrayOf(0x04, 0x00, 0x04, 0x00, 0x09, 0x00, 0x1A, 0x06, 0x00, 0x00, 0x00)),
DISABLE_OFF_FROM_ADAPTIVE_AND_ANC(byteArrayOf(0x04, 0x00, 0x04, 0x00, 0x09, 0x00, 0x1A, 0x0a, 0x00, 0x00, 0x00)),
ENABLE_OFF_FROM_TRANSPARENCY_AND_ANC(byteArrayOf(0x04, 0x00, 0x04, 0x00, 0x09, 0x00, 0x1A, 0x07, 0x00, 0x00, 0x00)),
ENABLE_OFF_FROM_ADAPTIVE_AND_ANC(byteArrayOf(0x04, 0x00, 0x04, 0x00, 0x09, 0x00, 0x1A, 0x0b, 0x00, 0x00, 0x00)),
ENABLE_OFF_FROM_TRANSPARENCY_AND_ADAPTIVE(byteArrayOf(0x04, 0x00, 0x04, 0x00, 0x09, 0x00, 0x1A, 0x0d, 0x00, 0x00, 0x00)),
DISABLE_TRANSPARENCY_FROM_EVERYTHING(byteArrayOf(0x04, 0x00, 0x04, 0x00, 0x09, 0x00, 0x1A, 0x0b, 0x00, 0x00, 0x00)),
DISABLE_TRANSPARENCY_FROM_OFF_AND_ANC(byteArrayOf(0x04, 0x00, 0x04, 0x00, 0x09, 0x00, 0x1A, 0x03, 0x00, 0x00, 0x00)),
DISABLE_TRANSPARENCY_FROM_ADAPTIVE_AND_ANC(byteArrayOf(0x04, 0x00, 0x04, 0x00, 0x09, 0x00, 0x1A, 0x0a, 0x00, 0x00, 0x00)),
DISABLE_TRANSPARENCY_FROM_OFF_AND_ADAPTIVE(byteArrayOf(0x04, 0x00, 0x04, 0x00, 0x09, 0x00, 0x1A, 0x09, 0x00, 0x00, 0x00)),
ENABLE_TRANSPARENCY_FROM_OFF_AND_ANC(byteArrayOf(0x04, 0x00, 0x04, 0x00, 0x09, 0x00, 0x1A, 0x07, 0x00, 0x00, 0x00)),
ENABLE_TRANSPARENCY_FROM_ADAPTIVE_AND_ANC(byteArrayOf(0x04, 0x00, 0x04, 0x00, 0x09, 0x00, 0x1A, 0x0e, 0x00, 0x00, 0x00)),
ENABLE_TRANSPARENCY_FROM_OFF_AND_ADAPTIVE(byteArrayOf(0x04, 0x00, 0x04, 0x00, 0x09, 0x00, 0x1A, 0x0d, 0x00, 0x00, 0x00)),
DISABLE_ANC_FROM_EVERYTHING(byteArrayOf(0x04, 0x00, 0x04, 0x00, 0x09, 0x00, 0x1A, 0x0D, 0x00, 0x00, 0x00)),
DISABLE_ANC_FROM_OFF_AND_TRANSPARENCY(byteArrayOf(0x04, 0x00, 0x04, 0x00, 0x09, 0x00, 0x1A, 0x05, 0x00, 0x00, 0x00)),
DISABLE_ANC_FROM_ADAPTIVE_AND_TRANSPARENCY(byteArrayOf(0x04, 0x00, 0x04, 0x00, 0x09, 0x00, 0x1A, 0x0c, 0x00, 0x00, 0x00)),
DISABLE_ANC_FROM_OFF_AND_ADAPTIVE(byteArrayOf(0x04, 0x00, 0x04, 0x00, 0x09, 0x00, 0x1A, 0x09, 0x00, 0x00, 0x00)),
ENABLE_ANC_FROM_OFF_AND_TRANSPARENCY(byteArrayOf(0x04, 0x00, 0x04, 0x00, 0x09, 0x00, 0x1A, 0x07, 0x00, 0x00, 0x00)),
ENABLE_ANC_FROM_ADAPTIVE_AND_TRANSPARENCY(byteArrayOf(0x04, 0x00, 0x04, 0x00, 0x09, 0x00, 0x1A, 0x0e, 0x00, 0x00, 0x00)),
ENABLE_ANC_FROM_OFF_AND_ADAPTIVE(byteArrayOf(0x04, 0x00, 0x04, 0x00, 0x09, 0x00, 0x1A, 0x0b, 0x00, 0x00, 0x00)),
DISABLE_ADAPTIVE_FROM_EVERYTHING(byteArrayOf(0x04, 0x00, 0x04, 0x00, 0x09, 0x00, 0x1A, 0x07, 0x00, 0x00, 0x00)),
DISABLE_ADAPTIVE_FROM_OFF_AND_TRANSPARENCY(byteArrayOf(0x04, 0x00, 0x04, 0x00, 0x09, 0x00, 0x1A, 0x05, 0x00, 0x00, 0x00)),
DISABLE_ADAPTIVE_FROM_TRANSPARENCY_AND_ANC(byteArrayOf(0x04, 0x00, 0x04, 0x00, 0x09, 0x00, 0x1A, 0x06, 0x00, 0x00, 0x00)),
DISABLE_ADAPTIVE_FROM_OFF_AND_ANC(byteArrayOf(0x04, 0x00, 0x04, 0x00, 0x09, 0x00, 0x1A, 0x03, 0x00, 0x00, 0x00)),
ENABLE_ADAPTIVE_FROM_OFF_AND_TRANSPARENCY(byteArrayOf(0x04, 0x00, 0x04, 0x00, 0x09, 0x00, 0x1A, 0x0d, 0x00, 0x00, 0x00)),
ENABLE_ADAPTIVE_FROM_TRANSPARENCY_AND_ANC(byteArrayOf(0x04, 0x00, 0x04, 0x00, 0x09, 0x00, 0x1A, 0x0e, 0x00, 0x00, 0x00)),
ENABLE_ADAPTIVE_FROM_OFF_AND_ANC(byteArrayOf(0x04, 0x00, 0x04, 0x00, 0x09, 0x00, 0x1A, 0x0b, 0x00, 0x00, 0x00)),
ENABLE_EVERYTHING_OFF_DISABLED(byteArrayOf(0x04, 0x00, 0x04, 0x00, 0x09, 0x00, 0x1A, 0x0E, 0x00, 0x00, 0x00)),
DISABLE_TRANSPARENCY_OFF_DISABLED(byteArrayOf(0x04, 0x00, 0x04, 0x00, 0x09, 0x00, 0x1A, 0x0A, 0x00, 0x00, 0x00)),
DISABLE_ADAPTIVE_OFF_DISABLED(byteArrayOf(0x04, 0x00, 0x04, 0x00, 0x09, 0x00, 0x1A, 0x06, 0x00, 0x00, 0x00)),
DISABLE_ANC_OFF_DISABLED(byteArrayOf(0x04, 0x00, 0x04, 0x00, 0x09, 0x00, 0x1A, 0x0C, 0x00, 0x00, 0x00)),
}
data class LongPressPacket(val modes: Set<LongPressMode>) {
val value: ByteArray
get() {
val baseArray = byteArrayOf(0x04, 0x00, 0x04, 0x00, 0x09, 0x00, 0x1A)
val modeByte = calculateModeByte()
return baseArray + byteArrayOf(modeByte, 0x00, 0x00, 0x00)
}
//enum class LongPressMode {
// OFF, TRANSPARENCY, ADAPTIVE, ANC
//}
//
//data class LongPressPacket(val modes: Set<LongPressMode>) {
// val value: ByteArray
// get() {
// val baseArray = byteArrayOf(0x04, 0x00, 0x04, 0x00, 0x09, 0x00, 0x1A)
// val modeByte = calculateModeByte()
// return baseArray + byteArrayOf(modeByte, 0x00, 0x00, 0x00)
// }
//
// private fun calculateModeByte(): Byte {
// var modeByte: Byte = 0x00
// modes.forEach { mode ->
// modeByte = when (mode) {
// LongPressMode.OFF -> (modeByte + 0x01).toByte()
// LongPressMode.TRANSPARENCY -> (modeByte + 0x02).toByte()
// LongPressMode.ADAPTIVE -> (modeByte + 0x04).toByte()
// LongPressMode.ANC -> (modeByte + 0x08).toByte()
// }
// }
// return modeByte
// }
//}
//
//fun determinePacket(changedIndex: Int, newEnabled: Boolean, oldModes: Set<LongPressMode>, newModes: Set<LongPressMode>): ByteArray? {
// return if (newEnabled) {
// LongPressPacket(oldModes + newModes.elementAt(changedIndex)).value
// } else {
// LongPressPacket(oldModes - newModes.elementAt(changedIndex)).value
// }
//}
private fun calculateModeByte(): Byte {
var modeByte: Byte = 0x00
modes.forEach { mode ->
modeByte = when (mode) {
LongPressMode.OFF -> (modeByte + 0x01).toByte()
LongPressMode.TRANSPARENCY -> (modeByte + 0x02).toByte()
LongPressMode.ADAPTIVE -> (modeByte + 0x04).toByte()
LongPressMode.ANC -> (modeByte + 0x08).toByte()
}
}
return modeByte
fun isHeadTrackingData(data: ByteArray): Boolean {
// Check minimum size requirement first for efficiency
if (data.size <= 60) return false
// Check if the first 10 bytes match
val prefixPattern = byteArrayOf(
0x04, 0x00, 0x04, 0x00, 0x17, 0x00, 0x00, 0x00,
0x10, 0x00
)
// Check prefix (first 10 bytes)
for (i in prefixPattern.indices) {
if (data[i] != prefixPattern[i].toByte()) return false
}
}
fun determinePacket(changedIndex: Int, newEnabled: Boolean, oldModes: Set<LongPressMode>, newModes: Set<LongPressMode>): ByteArray? {
return if (newEnabled) {
LongPressPacket(oldModes + newModes.elementAt(changedIndex)).value
} else {
LongPressPacket(oldModes - newModes.elementAt(changedIndex)).value
}
// Check if byte 11 is either 0x44 or 0x45
if (data[10] != 0x44.toByte() && data[10] != 0x45.toByte()) return false
// Check byte 12
if (data[11] != 0x00.toByte()) return false
return true
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@@ -17,6 +17,7 @@
<string name="adaptive">Adaptive</string>
<string name="noise_cancellation">Noise Cancellation</string>
<string name="press_and_hold_airpods">Press and Hold AirPods</string>
<string name="head_gestures">Head Gestures</string>
<string name="left">Left</string>
<string name="right">Right</string>
<string name="adjusts_volume">Adjusts the volume of media in response to your environment</string>
@@ -46,4 +47,6 @@
<string name="island_connected_remote_text">Connected to Linux</string>
<string name="island_taking_over_text">Moved to phone</string>
<string name="island_moved_to_remote_text">Moved to Linux</string>
<string name="head_tracking">Head Tracking</string>
<string name="head_gestures_details">Nod to answer calls, and shake your head to decline.</string>
</resources>

View File

@@ -1,6 +1,6 @@
[versions]
accompanistPermissions = "0.36.0"
agp = "8.8.0"
agp = "8.8.2"
hiddenapibypass = "4.3"
kotlin = "2.0.0"
coreKtx = "1.15.0"

View File

@@ -1 +0,0 @@
imgs

Binary file not shown.

Before

Width:  |  Height:  |  Size: 93 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 53 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 115 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 147 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 97 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 168 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 156 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 45 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 85 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 97 KiB

View File

@@ -1,237 +0,0 @@
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 D5 01 10 07 1A 3A 0E 00 01 C0 92 F4 B0 7A 14 00 00 06 04 83 A7 F2 99 76 00 00 00 00 DD 9B 6A E8 A7 DD FC FF F2 FF 05 00 23 83 00 0E 27 08 02 00 FD FF 00 00 84 FD E7 02 22 01 91 E3 1A 38 27 06 00 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 D6 01 10 07 1A 3A 0E 00 01 F0 5B 58 B3 7A 14 00 00 06 04 83 45 8F 9A 76 00 00 00 00 D9 9B 67 E8 B0 DD F5 FF F3 FF 00 00 23 83 00 0E 27 08 00 00 F9 FF 01 00 84 FD E7 02 22 01 31 B4 1B 38 2F 06 3C 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 D7 01 10 07 1A 3A 0E 00 01 20 25 BC B5 7A 14 00 00 06 04 83 E3 2B 9B 76 00 00 00 00 D4 9B 5F E8 AD DD F8 FF F9 FF FA FF 23 83 00 0E 27 08 FE FF 01 00 03 00 85 FD E8 02 23 01 A0 6E E5 37 37 06 5A 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 D8 01 10 07 1A 3A 0E 00 01 50 EE 1F B8 7A 14 00 00 06 04 43 81 C8 9B 76 00 00 00 00 D1 9B 56 E8 A7 DD 02 00 FB FF 01 00 23 83 00 0E 27 08 00 00 00 00 06 00 85 FD E8 02 24 01 C3 A0 3C 37 3F 06 78 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 D9 01 10 07 1A 3A 0E 00 01 80 B7 83 BA 7A 14 00 00 06 04 43 1F 65 9C 76 00 00 00 00 CA 9B 4E E8 B4 DD FF FF EF FF 06 00 23 83 00 0E 27 08 FB FF 00 00 00 00 85 FD E8 02 25 01 55 CB 2C 37 47 06 95 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 DA 01 10 07 1A 3A 0E 00 01 B0 80 E7 BC 7A 14 00 00 06 04 43 BD 01 9D 76 00 00 00 00 C1 9B 53 E8 BE DD FC FF 05 00 0B 00 23 83 00 0E 27 08 FA FF FE FF FD FF 85 FD E8 02 25 01 C7 BB 3E 37 4F 06 A4 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 DB 01 10 07 1A 3A 0E 00 01 E0 49 4B BF 7A 14 00 00 06 04 43 5B 9E 9D 76 00 00 00 00 BB 9B 63 E8 BB DD F8 FF 04 00 0F 00 23 83 00 0E 27 08 01 00 00 00 00 00 85 FD E8 02 26 01 37 5F 21 37 57 06 A3 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 DC 01 10 07 1A 3A 0E 00 01 F8 16 AF C1 7A 14 00 00 06 04 43 FA 3A 9E 76 00 00 00 00 BA 9B 6C E8 B9 DD FF FF FA FF 12 00 23 83 00 0E 27 08 00 00 01 00 00 00 85 FD E9 02 26 01 DA 2E 06 37 5F 06 9E 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 DD 01 10 07 1A 3A 0E 00 01 28 E0 12 C4 7A 14 00 00 06 04 43 98 D7 9E 76 00 00 00 00 B4 9B 77 E8 C6 DD 00 00 FD FF 0F 00 24 83 00 0E 27 08 00 00 00 00 00 00 86 FD E9 02 27 01 38 93 E2 36 67 06 A3 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 DE 01 10 07 1A 3A 0E 00 01 58 A9 76 C6 7A 14 00 00 06 04 43 36 74 9F 76 00 00 00 00 AC 9B 80 E8 D2 DD F9 FF 00 00 06 00 24 83 00 0E 27 08 FE FF FF FF 00 00 86 FD E9 02 27 01 3D 55 AF 36 6F 06 A4 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 DF 01 10 07 1A 3A 0E 00 01 88 72 DA C8 7A 14 00 00 06 04 43 D4 10 A0 76 00 00 00 00 AB 9B 86 E8 D5 DD FA FF F6 FF FF FF 24 83 00 0E 27 08 0B 00 F5 FF 05 00 87 FD E9 02 28 01 B9 28 81 37 77 06 A0 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 E0 01 10 07 1A 3A 0E 00 01 B8 3B 3E CB 7A 14 00 00 06 04 83 72 AD A0 76 00 00 00 00 A8 9B 7B E8 E0 DD 0E 00 FE FF 09 00 24 83 00 0E 27 08 FA FF 05 00 01 00 87 FD EA 02 28 01 CD 10 F0 37 7F 06 9F 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 E1 01 10 07 1A 3A 0E 00 01 E8 04 A2 CD 7A 14 00 00 06 04 83 10 4A A1 76 00 00 00 00 A8 9B 7E E8 EC DD 08 00 FD FF 0B 00 24 83 00 0E 27 08 FE FF 00 00 FD FF 87 FD EA 02 29 01 A1 90 F5 37 87 06 A2 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 E2 01 10 07 1A 3A 0E 00 01 18 CE 05 D0 7A 14 00 00 06 04 83 AE E6 A1 76 00 00 00 00 A8 9B 98 E8 EC DD F9 FF 16 00 16 00 24 83 00 0E 27 08 FF FF FA FF FE FF 88 FD EA 02 29 01 17 76 01 38 8F 06 A4 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 E3 01 10 07 1A 3A 0E 00 01 30 9B 69 D2 7A 14 00 00 06 04 83 4D 83 A2 76 00 00 00 00 9D 9B BE E8 E5 DD EB FF 09 00 18 00 24 83 00 0E 27 08 02 00 02 00 04 00 88 FD EA 02 29 01 E8 4E 0E 38 97 06 A1 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 E4 01 10 07 1A 3A 0E 00 01 60 64 CD D4 7A 14 00 00 06 04 83 EB 1F A3 76 00 00 00 00 93 9B D6 E8 E6 DD FB FF FC FF 10 00 24 83 00 0E 27 08 02 00 07 00 05 00 89 FD EB 02 2A 01 85 7F 11 38 9F 06 A0 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 E5 01 10 07 1A 3A 0E 00 01 90 2D 31 D7 7A 14 00 00 06 04 83 89 BC A3 76 00 00 00 00 8F 9B DD E8 F7 DD 08 00 F4 FF 09 00 24 83 00 0E 27 08 05 00 00 00 02 00 8A FD EB 02 2B 01 F2 37 09 38 A7 06 A5 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 E6 01 10 07 1A 3A 0E 00 01 C0 F6 94 D9 7A 14 00 00 06 04 43 27 59 A4 76 00 00 00 00 8B 9B DB E8 12 DE 05 00 FA FF 0B 00 24 83 00 0E 27 08 FC FF 01 00 FD FF 8A FD EC 02 2B 01 55 45 5F 37 AF 06 A4 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 E7 01 10 07 1A 3A 0E 00 01 F0 BF F8 DB 7A 14 00 00 06 04 43 C5 F5 A4 76 00 00 00 00 84 9B E4 E8 23 DE F8 FF FA FF 0D 00 24 83 00 0E 27 08 00 00 FF FF FD FF 8B FD EC 02 2B 01 B5 DE 2F 37 B7 06 A3 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 E8 01 10 07 1A 3A 0E 00 01 20 89 5C DE 7A 14 00 00 06 04 43 63 92 A5 76 00 00 00 00 78 9B F2 E8 2D DE F0 FF FE FF 0C 00 24 83 00 0E 27 08 00 00 00 00 FD FF 8B FD EC 02 2B 01 18 EF 55 37 BF 06 9E 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 E9 01 10 07 1A 3A 0E 00 01 50 52 C0 E0 7A 14 00 00 06 04 43 01 2F A6 76 00 00 00 00 6D 9B FF E8 35 DE F8 FF F9 FF 0E 00 25 83 00 0E 27 08 00 00 06 00 00 00 8C FD ED 02 2C 01 C3 5C 2B 37 C7 06 A6 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 EA 01 10 07 1A 3A 0E 00 01 80 1B 24 E3 7A 14 00 00 06 04 43 9F CB A6 76 00 00 00 00 65 9B 0F E9 41 DE F9 FF 00 00 10 00 25 83 00 0E 27 08 00 00 00 00 FD FF 8C FD ED 02 2C 01 34 5C 0F 37 CF 06 A4 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 EB 01 10 07 1A 3A 0E 00 01 98 E8 87 E5 7A 14 00 00 06 04 43 3E 68 A7 76 00 00 00 00 5F 9B 1B E9 3E DE F3 FF 0D 00 FC FF 25 83 00 0E 27 08 00 00 F8 FF FD FF 8D FD ED 02 2C 01 B8 BE 4C 37 D7 06 A0 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 EC 01 10 07 1A 3A 0E 00 01 C8 B1 EB E7 7A 14 00 00 06 04 43 DC 04 A8 76 00 00 00 00 5C 9B 20 E9 29 DE F8 FF 06 00 FC FF 25 83 00 0E 27 08 03 00 03 00 05 00 8E FD EE 02 2C 01 DC B4 66 37 DF 06 9F 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 ED 01 10 07 1A 3A 0E 00 01 F8 7A 4F EA 7A 14 00 00 06 04 43 7A A1 A8 76 00 00 00 00 57 9B 18 E9 29 DE 00 00 EE FF 04 00 25 83 00 0E 27 08 00 00 05 00 06 00 8E FD EE 02 2D 01 43 74 87 37 E7 06 A4 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 EE 01 10 07 1A 3A 0E 00 01 28 44 B3 EC 7A 14 00 00 06 04 43 18 3E A9 76 00 00 00 00 4F 9B 0D E9 41 DE FC FF E7 FF 00 00 25 83 00 0E 27 08 F5 FF 04 00 FF FF 8E FD EE 02 2E 01 CE B2 9B 37 EF 06 A3 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 EF 01 10 07 1A 3A 0E 00 01 58 0D 17 EF 7A 14 00 00 06 04 83 B6 DA A9 76 00 00 00 00 49 9B 12 E9 5B DE 00 00 FE FF 16 00 25 83 00 0E 27 08 F5 FF 03 00 01 00 8E FD EF 02 2E 01 8C 9C 3C 38 F7 06 A1 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 F0 01 10 07 1A 3A 0E 00 01 88 D6 7A F1 7A 14 00 00 06 04 83 54 77 AA 76 00 00 00 00 3F 9B 25 E9 78 DE 02 00 F1 FF 21 00 25 83 00 0E 27 08 FC FF 00 00 01 00 8F FD F0 02 2F 01 58 2C 51 38 FF 06 9F 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 F1 01 10 07 1A 3A 0E 00 01 B8 9F DE F3 7A 14 00 00 06 04 83 F2 13 AB 76 00 00 00 00 3C 9B 36 E9 8A DE FF FF 08 00 0E 00 25 83 00 0E 27 08 03 00 F7 FF FB FF 8F FD EF 02 2F 01 EB 6C 60 38 07 07 A5 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 F2 01 10 07 1A 3A 0E 00 01 D0 6C 42 F6 7A 14 00 00 06 04 83 91 B0 AB 76 00 00 00 00 38 9B 46 E9 86 DE F7 FF 03 00 09 00 25 83 00 0E 27 08 0C 00 FD FF 02 00 90 FD F0 02 2F 01 D6 9B 86 38 0F 07 A4 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 F3 01 10 07 1A 3A 0E 00 01 00 36 A6 F8 7A 14 00 00 06 04 83 2F 4D AC 76 00 00 00 00 2C 9B 52 E9 90 DE F7 FF F2 FF 10 00 25 83 00 0E 27 08 07 00 00 00 04 00 92 FD F0 02 30 01 78 07 8A 38 17 07 A1 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 F4 01 10 07 1A 3A 0E 00 01 30 FF 09 FB 7A 14 00 00 06 04 83 CD E9 AC 76 00 00 00 00 1C 9B 58 E9 A6 DE FF FF F5 FF 0A 00 25 83 00 0E 27 08 00 00 05 00 03 00 92 FD F1 02 31 01 10 43 89 38 1F 07 9E 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 F5 01 10 07 1A 3A 0E 00 01 60 C8 6D FD 7A 14 00 00 06 04 83 6B 86 AD 76 00 00 00 00 14 9B 60 E9 B7 DE 01 00 F7 FF 0E 00 26 83 00 0E 27 08 01 00 06 00 06 00 93 FD F1 02 31 01 3E 37 34 38 27 07 A5 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 F6 01 10 07 1A 3A 0E 00 01 90 91 D1 FF 7A 14 00 00 06 04 83 09 23 AE 76 00 00 00 00 0C 9B 67 E9 CD DE FF FF FA FF 0E 00 26 83 00 0E 27 08 00 00 01 00 00 00 94 FD F2 02 32 01 4A 35 0D 38 2F 07 A4 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 F7 01 10 07 1A 3A 0E 00 01 C0 5A 35 02 7B 14 00 00 06 04 83 A7 BF AE 76 00 00 00 00 07 9B 76 E9 D6 DE FD FF 05 00 0B 00 26 83 00 0E 27 08 00 00 00 00 00 00 94 FD F2 02 32 01 97 17 F9 37 37 07 A0 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 F8 01 10 07 1A 3A 0E 00 01 F0 23 99 04 7B 14 00 00 06 04 43 45 5C AF 76 00 00 00 00 05 9B 86 E9 D6 DE FD FF 05 00 08 00 26 83 00 0E 27 08 04 00 01 00 01 00 95 FD F3 02 33 01 78 A3 77 37 3F 07 9E 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 F9 01 10 07 1A 3A 0E 00 01 08 F1 FC 06 7B 14 00 00 06 04 43 E4 F8 AF 76 00 00 00 00 02 9B 92 E9 DC DE 01 00 FC FF 0F 00 26 83 00 0E 27 08 02 00 04 00 03 00 96 FD F3 02 34 01 05 E7 1C 37 47 07 A4 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 FA 01 10 07 1A 3A 0E 00 01 38 BA 60 09 7B 14 00 00 06 04 43 82 95 B0 76 00 00 00 00 F9 9A 9D E9 F3 DE FE FF F2 FF 13 00 26 83 00 0E 27 08 00 00 02 00 FE FF 97 FD F4 02 34 01 BE C7 EE 36 4F 07 A4 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 FB 01 10 07 1A 3A 0E 00 01 68 83 C4 0B 7B 14 00 00 06 04 43 20 32 B1 76 00 00 00 00 F0 9A AD E9 07 DF F7 FF FE FF 10 00 26 83 00 0E 27 08 00 00 FC FF FC FF 98 FD F4 02 34 01 E0 8B 83 36 57 07 A1 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 FC 01 10 07 1A 3A 0E 00 01 98 4C 28 0E 7B 14 00 00 06 04 43 BE CE B1 76 00 00 00 00 E7 9A BD E9 13 DF 04 00 00 00 0D 00 26 83 00 0E 27 08 07 00 F9 FF FE FF 98 FD F5 02 34 01 24 D0 FD 36 5F 07 9F 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 FD 01 10 07 1A 3A 0E 00 01 C8 15 8C 10 7B 14 00 00 06 04 83 5C 6B B2 76 00 00 00 00 E0 9A B8 E9 12 DF 00 00 FE FF FF FF 26 83 00 0E 27 08 FA FF 0E 00 01 00 99 FD F5 02 35 01 45 A0 1C 38 67 07 A5 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 FE 01 10 07 1A 3A 0E 00 01 F8 DE EF 12 7B 14 00 00 06 04 83 FA 07 B3 76 00 00 00 00 E6 9A BE E9 0C DF 00 00 02 00 00 00 26 83 00 0E 27 08 08 00 00 00 05 00 9A FD F5 02 35 01 E7 22 35 38 6F 07 A4 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 FF 01 10 07 1A 3A 0E 00 01 28 A8 53 15 7B 14 00 00 06 04 83 98 A4 B3 76 00 00 00 00 E1 9A B5 E9 1C DF FD FF EC FF 00 00 26 83 00 0E 27 08 03 00 FF FF 01 00 9B FD F6 02 36 01 6F F8 37 38 77 07 A1 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 80 02 10 07 1A 3A 0E 00 01 40 75 B7 17 7B 14 00 00 06 04 83 37 41 B4 76 00 00 00 00 DC 9A AE E9 28 DF FE FF F9 FF 00 00 27 83 00 0E 27 08 01 00 FF FF 02 00 9C FD F6 02 37 01 12 6B 35 38 7F 07 9C 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 81 02 10 07 1A 3A 0E 00 01 70 3E 1B 1A 7B 14 00 00 06 04 83 D5 DD B4 76 00 00 00 00 D4 9A AD E9 31 DF FB FF F7 FF 01 00 27 83 00 0E 27 08 01 00 00 00 05 00 9C FD F7 02 37 01 18 63 38 38 87 07 A6 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 82 02 10 07 1A 3A 0E 00 01 A0 07 7F 1C 7B 14 00 00 06 04 83 73 7A B5 76 00 00 00 00 D0 9A AE E9 38 DF FC FF FE FF FE FF 27 83 00 0E 27 08 00 00 FB FF 01 00 9D FD F7 02 38 01 6E 7B 38 38 8F 07 A2 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 83 02 10 07 1A 3A 0E 00 01 D0 D0 E2 1E 7B 14 00 00 06 04 43 11 17 B6 76 00 00 00 00 D0 9A AE E9 30 DF 02 00 07 00 FC FF 27 83 00 0E 27 08 FF FF 00 00 01 00 9D FD F7 02 38 01 6D 09 A1 37 97 07 91 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 84 02 10 07 1A 3A 0E 00 01 00 9A 46 21 7B 14 00 00 06 04 43 AF B3 B6 76 00 00 00 00 D3 9A B1 E9 24 DF FD FF 01 00 FD FF 27 83 00 0E 27 08 01 00 FD FF 02 00 9D FD F7 02 39 01 11 78 B8 36 9F 07 9E 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 85 02 10 07 1A 3A 0E 00 01 30 63 AA 23 7B 14 00 00 06 04 43 4D 50 B7 76 00 00 00 00 D1 9A B0 E9 1F DF FD FF 05 00 FF FF 27 83 03 0E 27 08 FE FF FF FF FF FF 9E FD F7 02 39 01 BD EA 90 36 A7 07 A4 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 86 02 10 07 1A 3A 0E 00 01 48 30 0E 26 7B 14 00 00 06 04 43 EC EC B7 76 00 00 00 00 CF 9A B3 E9 1A DF FD FF 01 00 03 00 27 83 03 0E 27 08 00 00 00 00 03 00 9E FD F7 02 39 01 0D 28 8B 36 AF 07 A3 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 87 02 10 07 1A 3A 0E 00 01 78 F9 71 28 7B 14 00 00 06 04 43 8A 89 B8 76 00 00 00 00 CA 9A B4 E9 21 DF 01 00 F9 FF 06 00 27 83 03 0E 27 08 FE FF 02 00 02 00 9F FD F8 02 3A 01 58 E0 A5 36 B7 07 A0 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 88 02 10 07 1A 3A 0E 00 01 A8 C2 D5 2A 7B 14 00 00 06 04 43 28 26 B9 76 00 00 00 00 C8 9A B5 E9 29 DF 04 00 00 00 01 00 27 83 03 0E 27 08 FD FF FF FF FF FF 9F FD F8 02 3A 01 A8 63 8F 36 BF 07 9E 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 89 02 10 07 1A 3A 0E 00 01 D8 8B 39 2D 7B 14 00 00 06 04 43 C6 C2 B9 76 00 00 00 00 CA 9A B7 E9 2A DF 02 00 08 00 04 00 27 83 03 0E 27 08 FA FF 00 00 FB FF 9F FD F8 02 3A 01 5C CE 41 36 C7 07 A5 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 8A 02 10 07 1A 3A 0E 00 01 08 55 9D 2F 7B 14 00 00 06 04 43 64 5F BA 76 00 00 00 00 CA 9A CA E9 21 DF FC FF 10 00 11 00 27 83 03 0E 27 08 FD FF 07 00 00 00 9F FD F8 02 3A 01 E5 FF C3 36 CF 07 A4 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 8B 02 10 07 1A 3A 0E 00 01 38 1E 01 32 7B 14 00 00 06 04 43 02 FC BA 76 00 00 00 00 CA 9A E0 E9 1F DF F4 FF 01 00 01 00 27 83 03 0E 27 08 05 00 F8 FF 00 00 A0 FD F8 02 3A 01 24 22 97 37 D7 07 A1 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 8C 02 10 07 1A 3A 0E 00 01 68 E7 64 34 7B 14 00 00 06 04 43 A0 98 BB 76 00 00 00 00 CB 9A E6 E9 1F DF 06 00 07 00 09 00 28 83 03 0E 27 08 00 00 06 00 00 00 A0 FD F9 02 3B 01 68 90 D8 37 DF 07 9C 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 8D 02 10 07 1A 3A 0E 00 01 80 B4 C8 36 7B 14 00 00 06 04 43 3F 35 BC 76 00 00 00 00 CB 9A ED E9 2E DF 06 00 F0 FF 10 00 28 83 03 0E 27 08 07 00 01 00 01 00 A1 FD F9 02 3B 01 56 4A D7 37 E7 07 A6 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 8E 02 10 07 1A 3A 0E 00 01 B0 7D 2C 39 7B 14 00 00 06 04 83 DD D1 BC 76 00 00 00 00 C4 9A EA E9 4B DF FF FF E6 FF 02 00 28 83 03 0E 27 08 04 00 FC FF FB FF A1 FD F9 02 3B 01 DC 7E 08 38 EF 07 A0 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 8F 02 10 07 1A 3A 0E 00 01 E0 46 90 3B 7B 14 00 00 06 04 83 7B 6E BD 76 00 00 00 00 BB 9A DD E9 5A DF F4 FF F6 FF F4 FF 28 83 03 0E 27 08 05 00 FD FF FC FF A2 FD F9 02 3B 01 E8 4C 2C 38 F7 07 A0 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 90 02 10 07 1A 3A 0E 00 01 10 10 F4 3D 7B 14 00 00 06 04 83 19 0B BE 76 00 00 00 00 B0 9A CC E9 5E DF F9 FF EE FF F8 FF 28 83 03 0E 27 08 02 00 03 00 01 00 A3 FD FA 02 3B 01 A5 31 29 38 FF 07 9F 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 91 02 10 07 1A 3A 0E 00 01 40 D9 57 40 7B 14 00 00 06 04 83 B7 A7 BE 76 00 00 00 00 AA 9A B6 E9 67 DF FA FF F2 FF F1 FF 28 83 03 0E 27 08 FA FF 00 00 02 00 A3 FD FA 02 3C 01 68 B1 FC 37 07 08 A4 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 92 02 10 07 1A 3A 0E 00 01 70 A2 BB 42 7B 14 00 00 06 04 83 55 44 BF 76 00 00 00 00 AA 9A A4 E9 68 DF 04 00 00 00 F9 FF 28 83 03 0E 27 08 F8 FF 05 00 00 00 A3 FD FA 02 3C 01 12 83 00 38 0F 08 A3 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 93 02 10 07 1A 3A 0E 00 01 88 6F 1F 45 7B 14 00 00 06 04 83 F4 E0 BF 76 00 00 00 00 AD 9A A3 E9 64 DF 01 00 07 00 01 00 28 83 03 0E 27 08 FB FF 00 00 00 00 A3 FD FA 02 3C 01 92 9E 0A 38 17 08 A1 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 94 02 10 07 1A 3A 0E 00 01 B8 38 83 47 7B 14 00 00 06 04 83 92 7D C0 76 00 00 00 00 AF 9A AD E9 5C DF FC FF 0F 00 04 00 28 83 03 0E 27 08 FD FF FF FF FD FF A3 FD FA 02 3D 01 19 28 E5 37 1F 08 9F 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 95 02 10 07 1A 3A 0E 00 01 E8 01 E7 49 7B 14 00 00 06 04 43 30 1A C1 76 00 00 00 00 B1 9A BF E9 4D DF FA FF 0C 00 07 00 28 83 03 0E 27 08 02 00 FF FF 00 00 A3 FD FA 02 3D 01 30 94 9D 37 27 08 A5 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 96 02 10 07 1A 3A 0E 00 01 18 CB 4A 4C 7B 14 00 00 06 04 43 CE B6 C1 76 00 00 00 00 AD 9A CD E9 48 DF FE FF 03 00 08 00 28 83 03 0E 27 08 00 00 00 00 00 00 A3 FD FA 02 3D 01 C3 FF 90 37 2F 08 A3 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 97 02 10 07 1A 3A 0E 00 01 48 94 AE 4E 7B 14 00 00 06 04 43 6C 53 C2 76 00 00 00 00 AB 9A D3 E9 43 DF F9 FF 05 00 FC FF 28 83 03 0E 27 08 FF FF FE FF FE FF A3 FD FA 02 3D 01 3C 6C 9D 37 37 08 A1 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 98 02 10 07 1A 3A 0E 00 01 78 5D 12 51 7B 14 00 00 06 04 43 0A F0 C2 76 00 00 00 00 A8 9A D8 E9 3B DF FA FF 06 00 01 00 29 83 03 0E 27 08 00 00 00 00 00 00 A4 FD FA 02 3D 01 0E 05 31 37 3F 08 9E 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 99 02 10 07 1A 3A 0E 00 01 90 2A 76 53 7B 14 00 00 06 04 43 A9 8C C3 76 00 00 00 00 A0 9A DF E9 36 DF F8 FF 00 00 04 00 29 83 03 0E 27 08 01 00 FE FF 00 00 A4 FD FA 02 3E 01 F1 81 AB 36 47 08 A5 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 9A 02 10 07 1A 3A 0E 00 01 C0 F3 D9 55 7B 14 00 00 06 04 43 47 29 C4 76 00 00 00 00 98 9A DC E9 33 DF F4 FF FC FF F6 FF 29 83 03 0E 27 08 FA FF 06 00 00 00 A4 FD FA 02 3E 01 5B 10 5D 37 4F 08 A1 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 9B 02 10 07 1A 3A 0E 00 01 F0 BC 3D 58 7B 14 00 00 06 04 83 E5 C5 C4 76 00 00 00 00 9B 9A DE E9 2F DF 07 00 06 00 05 00 29 83 03 0E 27 08 FE FF 04 00 04 00 A4 FD FA 02 3E 01 85 2E 02 38 57 08 A0 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 9C 02 10 07 1A 3A 0E 00 01 20 86 A1 5A 7B 14 00 00 06 04 83 83 62 C5 76 00 00 00 00 9C 9A DF E9 3A DF 01 00 F9 FF 04 00 29 83 03 0E 27 08 00 00 FE FF 01 00 A4 FD FA 02 3F 01 DA 50 03 38 5F 08 9E 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 9D 02 10 07 1A 3A 0E 00 01 50 4F 05 5D 7B 14 00 00 06 04 83 21 FF C5 76 00 00 00 00 9B 9A E1 E9 42 DF 01 00 04 00 05 00 29 83 03 0E 27 08 FF FF 00 00 FE FF A4 FD FA 02 3F 01 8E 5B F6 37 67 08 A5 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 9E 02 10 07 1A 3A 0E 00 01 80 18 69 5F 7B 14 00 00 06 04 83 BF 9B C6 76 00 00 00 00 99 9A E5 E9 42 DF FA FF FF FF 00 00 29 83 03 0E 27 08 05 00 FC FF 01 00 A4 FD FA 02 3F 01 14 D2 05 38 6F 08 A4 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 9F 02 10 07 1A 3A 0E 00 01 98 E5 CC 61 7B 14 00 00 06 04 83 5E 38 C7 76 00 00 00 00 95 9A E2 E9 45 DF 00 00 FA FF 00 00 29 83 03 0E 27 08 00 00 00 00 01 00 A5 FD FA 02 3F 01 6D 6A 03 38 77 08 A1 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 A0 02 10 07 1A 3A 0E 00 01 C8 AE 30 64 7B 14 00 00 06 04 83 FC D4 C7 76 00 00 00 00 90 9A D7 E9 46 DF FD FF 00 00 F3 FF 29 83 03 0E 27 08 FE FF FF FF FF FF A5 FD FA 02 3F 01 A2 B0 DB 37 7F 08 9F 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 A1 02 10 07 1A 3A 0E 00 01 F8 77 94 66 7B 14 00 00 06 04 43 9A 71 C8 76 00 00 00 00 92 9A CF E9 3A DF FC FF 04 00 F7 FF 29 83 03 0E 27 08 00 00 00 00 03 00 A5 FD FA 02 40 01 EE 73 F3 36 87 08 A3 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 A2 02 10 07 1A 3A 0E 00 01 28 41 F8 68 7B 14 00 00 06 04 43 38 0E C9 76 00 00 00 00 8F 9A CD E9 34 DF F8 FF FE FF FF FF 29 83 03 0E 27 08 FE FF 01 00 02 00 A5 FD FA 02 40 01 A4 32 C0 36 8F 08 A4 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 A3 02 10 07 1A 3A 0E 00 01 58 0A 5C 6B 7B 14 00 00 06 04 43 D6 AA C9 76 00 00 00 00 8C 9A D0 E9 32 DF FF FF 05 00 01 00 2A 83 03 0E 27 08 FF FF FD FF 02 00 A5 FD FA 02 40 01 47 7D F3 36 97 08 9D 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 A4 02 10 07 1A 3A 0E 00 01 88 D3 BF 6D 7B 14 00 00 06 04 43 74 47 CA 76 00 00 00 00 8B 9A D4 E9 30 DF FF FF 00 00 01 00 2A 83 03 0E 27 08 00 00 01 00 04 00 A5 FD FA 02 41 01 68 53 DB 36 9F 08 9E 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 A5 02 10 07 1A 3A 0E 00 01 A0 A0 23 70 7B 14 00 00 06 04 43 13 E4 CA 76 00 00 00 00 8C 9A D6 E9 35 DF 05 00 00 00 07 00 2A 83 03 0E 27 08 FD FF FE FF FF FF A4 FD FA 02 41 01 6C CE 06 37 A7 08 A4 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 A6 02 10 07 1A 3A 0E 00 01 D0 69 87 72 7B 14 00 00 06 04 43 B1 80 CB 76 00 00 00 00 8E 9A DD E9 32 DF FC FF 06 00 00 00 2A 83 03 0E 27 08 01 00 FA FF FE FF A5 FD FA 02 41 01 17 D8 2C 37 AF 08 A1 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 A7 02 10 07 1A 3A 0E 00 01 00 33 EB 74 7B 14 00 00 06 04 43 4F 1D CC 76 00 00 00 00 8D 9A E5 E9 2B DF F8 FF 01 00 02 00 2A 83 03 0E 27 08 00 00 00 00 00 00 A5 FD FA 02 41 01 37 8E 30 37 B7 08 A0 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 A8 02 10 07 1A 3A 0E 00 01 30 FC 4E 77 7B 14 00 00 06 04 43 ED B9 CC 76 00 00 00 00 8C 9A EF E9 2B DF 00 00 FE FF 02 00 2A 83 03 0E 27 08 06 00 F6 FF 00 00 A5 FD FA 02 41 01 6D 5D 9A 37 BF 08 9F 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 A9 02 10 07 1A 3A 0E 00 01 60 C5 B2 79 7B 14 00 00 06 04 83 8B 56 CD 76 00 00 00 00 86 9A E7 E9 2F DF 03 00 00 00 02 00 2A 83 03 0E 27 08 F6 FF 08 00 FF FF A5 FD FA 02 41 01 48 62 EB 37 C7 08 A4 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 AA 02 10 07 1A 3A 0E 00 01 90 8E 16 7C 7B 14 00 00 06 04 83 29 F3 CD 76 00 00 00 00 88 9A EE E9 31 DF 00 00 FA FF 0A 00 2A 83 03 0E 27 08 01 00 01 00 03 00 A5 FD FA 02 42 01 8A 3E 00 38 CF 08 A4 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 AB 02 10 07 1A 3A 0E 00 01 A8 5B 7A 7E 7B 14 00 00 06 04 83 C8 8F CE 76 00 00 00 00 80 9A F3 E9 41 DF F7 FF F9 FF 0A 00 2A 83 03 0E 27 08 FC FF FF FF FD FF A5 FD FA 02 42 01 24 FD E6 37 D7 08 A1 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 AC 02 10 07 1A 3A 0E 00 01 D8 24 DE 80 7B 14 00 00 06 04 83 66 2C CF 76 00 00 00 00 7B 9A 00 EA 41 DF FA FF 08 00 06 00 2A 83 03 0E 27 08 FF FF 00 00 01 00 A5 FD FA 02 42 01 48 E2 DA 37 DF 08 9F 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 AD 02 10 07 1A 3A 0E 00 01 08 EE 41 83 7B 14 00 00 06 04 43 04 C9 CF 76 00 00 00 00 78 9A 0B EA 3D DF FC FF 02 00 04 00 2A 83 03 0E 27 08 00 00 01 00 03 00 A5 FD FA 02 42 01 14 FF C8 37 E7 08 A5 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 AE 02 10 07 1A 3A 0E 00 01 38 B7 A5 85 7B 14 00 00 06 04 43 A2 65 D0 76 00 00 00 00 76 9A 13 EA 3C DF F9 FF FF FF 00 00 2A 83 03 0E 27 08 07 00 FC FF 01 00 A6 FD FA 02 42 01 CA 6A CA 37 EF 08 A4 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 AF 02 10 07 1A 3A 0E 00 01 68 80 09 88 7B 14 00 00 06 04 43 40 02 D1 76 00 00 00 00 74 9A 13 EA 39 DF 02 00 09 00 FE FF 2B 83 03 0E 27 08 FE FF 00 00 00 00 A6 FD FA 02 43 01 C4 34 54 37 F7 08 9F 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 B0 02 10 07 1A 3A 0E 00 01 98 49 6D 8A 7B 14 00 00 06 04 43 DE 9E D1 76 00 00 00 00 78 9A 14 EA 2F DF FE FF 03 00 FA FF 2B 83 03 0E 27 08 01 00 FD FF FF FF A6 FD FA 02 43 01 48 3F C9 36 FF 08 9B 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 B1 02 10 07 1A 3A 0E 00 01 B0 16 D1 8C 7B 14 00 00 06 04 43 7D 3B D2 76 00 00 00 00 76 9A 14 EA 27 DF FC FF 00 00 01 00 2B 83 03 0E 27 08 FF FF 01 00 FF FF A6 FD FA 02 43 01 87 EA D7 36 07 09 A5 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 B2 02 10 07 1A 3A 0E 00 01 E0 DF 34 8F 7B 14 00 00 06 04 43 1B D8 D2 76 00 00 00 00 74 9A 1A EA 22 DF FF FF 04 00 00 00 2B 83 03 0E 27 08 00 00 00 00 02 00 A6 FD FA 02 43 01 F6 A7 DC 36 0F 09 A1 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 B3 02 10 07 1A 3A 0E 00 01 10 A9 98 91 7B 14 00 00 06 04 43 B9 74 D3 76 00 00 00 00 73 9A 18 EA 20 DF FE FF 00 00 FD FF 2B 83 03 0E 27 08 00 00 02 00 01 00 A6 FD FA 02 43 01 9A 79 E4 36 17 09 A0 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 B4 02 10 07 1A 3A 0E 00 01 40 72 FC 93 7B 14 00 00 06 04 43 57 11 D4 76 00 00 00 00 73 9A 14 EA 20 DF 03 00 FF FF FF FF 2B 83 03 0E 27 08 FE FF 00 00 FF FF A6 FD FA 02 43 01 CB 4F D2 36 1F 09 9F 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 B5 02 10 07 1A 3A 0E 00 01 70 3B 60 96 7B 14 00 00 06 04 43 F5 AD D4 76 00 00 00 00 75 9A 10 EA 1C DF FD FF 04 00 F8 FF 2B 83 03 0E 27 08 FF FF FC FF 00 00 A6 FD FA 02 43 01 98 22 B1 36 27 09 A5 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 B6 02 10 07 1A 3A 0E 00 01 A0 04 C4 98 7B 14 00 00 06 04 43 93 4A D5 76 00 00 00 00 74 9A 0C EA 15 DF FF FF 00 00 00 00 2B 83 03 0E 27 08 FD FF 01 00 01 00 A6 FD FA 02 43 01 44 83 CF 36 2F 09 A4 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 B7 02 10 07 1A 3A 0E 00 01 B8 D1 27 9B 7B 14 00 00 06 04 43 32 E7 D5 76 00 00 00 00 73 9A 0C EA 11 DF 02 00 05 00 03 00 2B 83 03 0E 27 08 FF FF 00 00 00 00 A6 FD FA 02 43 01 12 0A D5 36 37 09 A1 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 B8 02 10 07 1A 3A 0E 00 01 E8 9A 8B 9D 7B 14 00 00 06 04 43 D0 83 D6 76 00 00 00 00 74 9A 0A EA 0B DF F9 FF 01 00 F6 FF 2B 83 03 0E 27 08 F8 FF 04 00 00 00 A6 FD F9 02 43 01 C2 B9 5E 37 3F 09 9D 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 B9 02 10 07 1A 3A 0E 00 01 18 64 EF 9F 7B 14 00 00 06 04 83 6E 20 D7 76 00 00 00 00 78 9A 11 EA 04 DF 00 00 0E 00 08 00 2B 83 03 0E 27 08 FA FF 00 00 01 00 A5 FD FA 02 44 01 D3 75 E1 37 47 09 A5 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 BA 02 10 07 1A 3A 0E 00 01 48 2D 53 A2 7B 14 00 00 06 04 83 0C BD D7 76 00 00 00 00 79 9A 1E EA 08 DF 00 00 00 00 0C 00 2C 83 03 0E 27 08 01 00 FC FF FF FF A5 FD FA 02 44 01 46 F5 E8 37 4F 09 A3 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 BB 02 10 07 1A 3A 0E 00 01 78 F6 B6 A4 7B 14 00 00 06 04 43 AA 59 D8 76 00 00 00 00 77 9A 2E EA 08 DF 01 00 0C 00 0B 00 2C 83 03 0E 27 08 00 00 00 00 00 00 A5 FD FA 02 44 01 1F C0 DF 37 57 09 A0 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 BC 02 10 07 1A 3A 0E 00 01 A8 BF 1A A7 7B 14 00 00 06 04 43 48 F6 D8 76 00 00 00 00 77 9A 3C EA 07 DF 00 00 01 00 09 00 2C 83 03 0E 27 08 04 00 03 00 03 00 A6 FD FA 02 44 01 9E 29 D6 37 5F 09 9E 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 BD 02 10 07 1A 3A 0E 00 01 C0 8C 7E A9 7B 14 00 00 06 04 43 E7 92 D9 76 00 00 00 00 77 9A 3E EA 0D DF 04 00 FA FF 02 00 2C 83 03 0E 27 08 04 00 FF FF 01 00 A6 FD FA 02 44 01 D6 89 CA 37 67 09 A5 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 BE 02 10 07 1A 3A 0E 00 01 F0 55 E2 AB 7B 14 00 00 06 04 83 85 2F DA 76 00 00 00 00 75 9A 34 EA 0F DF FC FF FE FF F1 FF 2C 83 03 0E 27 08 04 00 FE FF FC FF A6 FD FA 02 44 01 90 A7 DC 37 6F 09 A1 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 BF 02 10 07 1A 3A 0E 00 01 20 1F 46 AE 7B 14 00 00 06 04 43 23 CC DA 76 00 00 00 00 78 9A 27 EA 04 DF 03 00 03 00 F2 FF 2C 83 03 0E 27 08 01 00 00 00 03 00 A6 FD FA 02 44 01 24 73 3B 37 77 09 A0 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 C0 02 10 07 1A 3A 0E 00 01 50 E8 A9 B0 7B 14 00 00 06 04 43 C1 68 DB 76 00 00 00 00 7B 9A 18 EA FF DE 00 00 FA FF F6 FF 2C 83 03 0E 27 08 FE FF 00 00 02 00 A6 FD FA 02 44 01 1D 19 26 37 7F 09 9F 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 C1 02 10 07 1A 3A 0E 00 01 80 B1 0D B3 7B 14 00 00 06 04 43 5F 05 DC 76 00 00 00 00 7C 9A 12 EA FE DE 04 00 04 00 00 00 2C 83 03 0E 27 08 FC FF FF FF 00 00 A6 FD FA 02 44 01 39 75 3C 37 87 09 A3 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 C2 02 10 07 1A 3A 0E 00 01 98 7E 71 B5 7B 14 00 00 06 04 43 FE A1 DC 76 00 00 00 00 7D 9A 13 EA FE DE 00 00 02 00 01 00 2C 83 03 0E 27 08 FD FF FD FF 00 00 A6 FD F9 02 44 01 E5 EA 45 37 8F 09 A3 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 C3 02 10 07 1A 3A 0E 00 01 C8 47 D5 B7 7B 14 00 00 06 04 43 9C 3E DD 76 00 00 00 00 7D 9A 1A EA FC DE 01 00 06 00 08 00 2C 83 03 0E 27 08 F9 FF 00 00 FF FF A5 FD F9 02 44 01 DA 97 68 37 97 09 A1 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 C4 02 10 07 1A 3A 0E 00 01 F8 10 39 BA 7B 14 00 00 06 04 43 3A DB DD 76 00 00 00 00 81 9A 2A EA F5 DE 00 00 0B 00 09 00 2C 83 03 0E 27 08 01 00 FE FF 01 00 A5 FD F9 02 44 01 12 7A 10 37 9F 09 9C 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 C5 02 10 07 1A 3A 0E 00 01 28 DA 9C BC 7B 14 00 00 06 04 43 D8 77 DE 76 00 00 00 00 81 9A 35 EA F5 DE 04 00 00 00 09 00 2C 83 03 0E 27 08 00 00 01 00 00 00 A5 FD F9 02 44 01 92 33 EC 36 A7 09 A5 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 C6 02 10 07 1A 3A 0E 00 01 58 A3 00 BF 7B 14 00 00 06 04 43 76 14 DF 76 00 00 00 00 85 9A 3A EA FD DE 0A 00 02 00 04 00 2D 83 03 0E 27 08 FC FF 00 00 FB FF A5 FD F9 02 44 01 D8 CE 06 37 AF 09 A3 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 C7 02 10 07 1A 3A 0E 00 01 88 6C 64 C1 7B 14 00 00 06 04 43 14 B1 DF 76 00 00 00 00 8B 9A 3D EA F4 DE 03 00 0E 00 FE FF 2D 83 03 0E 27 08 00 00 FF FF FD FF A5 FD F9 02 43 01 25 A8 D6 36 B7 09 9F 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 C8 02 10 07 1A 3A 0E 00 01 A0 39 C8 C3 7B 14 00 00 06 04 43 B3 4D E0 76 00 00 00 00 91 9A 3B EA EC DE F8 FF FB FF F4 FF 2D 83 03 0E 27 08 03 00 F8 FF FE FF A5 FD F9 02 43 01 E4 B1 A0 37 BF 09 9E 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 C9 02 10 07 1A 3A 0E 00 01 D0 02 2C C6 7B 14 00 00 06 04 83 51 EA E0 76 00 00 00 00 92 9A 30 EA E9 DE 05 00 03 00 00 00 2D 83 03 0E 27 08 FB FF 03 00 00 00 A5 FD F9 02 43 01 E3 99 D9 37 C7 09 A5 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 CA 02 10 07 1A 3A 0E 00 01 00 CC 8F C8 7B 14 00 00 06 04 43 EF 86 E1 76 00 00 00 00 92 9A 2C EA F1 DE 01 00 F3 FF 05 00 2D 83 03 0E 27 08 01 00 00 00 02 00 A5 FD F9 02 43 01 C4 9A D1 37 CF 09 A1 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 CB 02 10 07 1A 3A 0E 00 01 30 95 F3 CA 7B 14 00 00 06 04 83 8D 23 E2 76 00 00 00 00 8E 9A 2C EA 03 DF 05 00 FB FF 0C 00 2D 83 03 0E 27 08 FC FF FE FF FE FF A5 FD F9 02 43 01 F3 64 D5 37 D7 09 A0 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 CC 02 10 07 1A 3A 0E 00 01 60 5E 57 CD 7B 14 00 00 06 04 83 2B C0 E2 76 00 00 00 00 8B 9A 33 EA 08 DF F7 FF 02 00 04 00 2D 83 03 0E 27 08 00 00 FD FF FF FF A5 FD F9 02 43 01 3A 44 E0 37 DF 09 A6 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 CD 02 10 07 1A 3A 0E 00 01 78 2B BB CF 7B 14 00 00 06 04 83 CA 5C E3 76 00 00 00 00 86 9A 3E EA 07 DF FD FF 04 00 08 00 2D 83 03 0E 27 08 FD FF 03 00 FF FF A5 FD F9 02 43 01 0E C9 E4 37 E7 09 A5 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 CE 02 10 07 1A 3A 0E 00 01 A8 F4 1E D2 7B 14 00 00 06 04 43 68 F9 E3 76 00 00 00 00 87 9A 4B EA FC DE FA FF 13 00 FC FF 2D 83 03 0E 27 08 00 00 FC FF FD FF A5 FD F9 02 42 01 85 9A B3 37 EF 09 A4 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 CF 02 10 07 1A 3A 0E 00 01 D8 BD 82 D4 7B 14 00 00 06 04 43 06 96 E4 76 00 00 00 00 8B 9A 51 EA E2 DE F8 FF 13 00 F9 FF 2D 83 03 0E 27 08 FF FF 02 00 FE FF A5 FD F9 02 42 01 A0 A9 42 37 F7 09 A1 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 D0 02 10 07 1A 3A 0E 00 01 08 87 E6 D6 7B 14 00 00 06 04 43 A4 32 E5 76 00 00 00 00 8E 9A 58 EA CE DE F7 FF 0A 00 00 00 2D 83 03 0E 27 08 01 00 02 00 00 00 A5 FD FA 02 42 01 09 DC 57 37 FF 09 9E 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 D1 02 10 07 1A 3A 0E 00 01 38 50 4A D9 7B 14 00 00 06 04 43 42 CF E5 76 00 00 00 00 85 9A 68 EA CD DE F2 FF FF FF 0F 00 2D 83 03 0E 27 08 01 00 05 00 00 00 A5 FD FA 02 42 01 74 E1 79 37 07 0A A5 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 D2 02 10 07 1A 3A 0E 00 01 68 19 AE DB 7B 14 00 00 06 04 43 E0 6B E6 76 00 00 00 00 78 9A 80 EA DB DE F8 FF FB FF 14 00 2E 83 03 0E 27 08 01 00 03 00 01 00 A5 FD FA 02 42 01 73 73 75 37 0F 0A A4 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 D3 02 10 07 1A 3A 0E 00 01 80 E6 11 DE 7B 14 00 00 06 04 43 7F 08 E7 76 00 00 00 00 71 9A 90 EA EA DE FF FF FE FF 0D 00 2E 83 03 0E 27 08 02 00 FF FF FE FF A5 FD FA 02 42 01 FD 64 76 37 17 0A A0 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 D4 02 10 07 1A 3A 0E 00 01 B0 AF 75 E0 7B 14 00 00 06 04 43 1D A5 E7 76 00 00 00 00 6E 9A 96 EA F1 DE 03 00 00 00 03 00 2E 83 03 0E 27 08 00 00 00 00 00 00 A6 FD FA 02 42 01 85 02 43 37 1F 0A 9E 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 D5 02 10 07 1A 3A 0E 00 01 E0 78 D9 E2 7B 14 00 00 06 04 43 BB 41 E8 76 00 00 00 00 6F 9A 8E EA F0 DE 00 00 FE FF F4 FF 2E 83 03 0E 27 08 00 00 FE FF FF FF A6 FD FA 02 42 01 50 1D 52 37 27 0A A3 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 D6 02 10 07 1A 3A 0E 00 01 10 42 3D E5 7B 14 00 00 06 04 43 59 DE E8 76 00 00 00 00 71 9A 7F EA F1 DE 05 00 F5 FF F9 FF 2E 83 03 0E 27 08 00 00 FF FF FF FF A6 FD FA 02 42 01 45 B6 2A 37 2F 0A A3 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 D7 02 10 07 1A 3A 0E 00 01 40 0B A1 E7 7B 14 00 00 06 04 43 F7 7A E9 76 00 00 00 00 70 9A 74 EA F9 DE 0A 00 F9 FF 01 00 2E 83 03 0E 27 08 FC FF FC FF FE FF A6 FD FA 02 42 01 E4 9F 39 37 37 0A A0 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 D8 02 10 07 1A 3A 0E 00 01 58 D8 04 EA 7B 14 00 00 06 04 43 96 17 EA 76 00 00 00 00 6C 9A 66 EA F8 DE F4 FF F9 FF EF FF 2E 83 03 0E 27 08 F7 FF 01 00 FB FF A6 FD FA 02 42 01 D8 CC E5 37 3F 0A A6 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 D9 02 10 07 1A 3A 0E 00 01 88 A1 68 EC 7B 14 00 00 06 04 83 34 B4 EA 76 00 00 00 00 6E 9A 67 EA EF DE FC FF 01 00 01 00 2E 83 03 0E 27 08 00 00 03 00 05 00 A6 FD FA 02 42 01 75 41 28 38 47 0A A4 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 DA 02 10 07 1A 3A 0E 00 01 B8 6A CC EE 7B 14 00 00 06 04 83 D2 50 EB 76 00 00 00 00 6A 9A 60 EA FF DE 00 00 F0 FF 01 00 2E 83 03 0E 27 08 00 00 F9 FF 00 00 A6 FD FA 02 42 01 7A 2B 2C 38 4F 0A A0 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 DB 02 10 07 1A 3A 0E 00 01 E8 33 30 F1 7B 14 00 00 06 04 83 70 ED EB 76 00 00 00 00 65 9A 5D EA 08 DF 00 00 00 00 06 00 2E 83 03 0E 27 08 FC FF FF FF FF FF A6 FD FA 02 42 01 D7 03 26 38 57 0A A1 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 DC 02 10 07 1A 3A 0E 00 01 18 FD 93 F3 7B 14 00 00 06 04 83 0E 8A EC 76 00 00 00 00 5E 9A 69 EA 0A DF F6 FF 00 00 09 00 2E 83 03 0E 27 08 00 00 00 00 04 00 A6 FD FA 02 43 01 F1 AB 23 38 5F 0A 9C 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 DD 02 10 07 1A 3A 0E 00 01 30 CA F7 F5 7B 14 00 00 06 04 83 AD 26 ED 76 00 00 00 00 58 9A 74 EA 0F DF 00 00 02 00 0D 00 2F 83 03 0E 27 08 01 00 FC FF 03 00 A6 FD FA 02 43 01 2A 43 1A 38 67 0A A5 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 DE 02 10 07 1A 3A 0E 00 01 60 93 5B F8 7B 14 00 00 06 04 43 4B C3 ED 76 00 00 00 00 54 9A 7B EA 11 DF 02 00 01 00 07 00 2F 83 03 0E 27 08 FD FF 04 00 02 00 A6 FD FA 02 43 01 80 4C BC 37 6F 0A A3 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 DF 02 10 07 1A 3A 0E 00 01 90 5C BF FA 7B 14 00 00 06 04 43 E9 5F EE 76 00 00 00 00 55 9A 86 EA 18 DF 06 00 04 00 10 00 2F 83 03 0E 27 08 FE FF 00 00 00 00 A6 FD FA 02 43 01 B6 51 49 37 77 0A A0 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 E0 02 10 07 1A 3A 0E 00 01 C0 25 23 FD 7B 14 00 00 06 04 43 87 FC EE 76 00 00 00 00 54 9A 96 EA 1F DF FF FF 07 00 12 00 2F 83 03 0E 27 08 FC FF 01 00 FF FF A6 FD FA 02 43 01 45 7E 2F 37 7F 0A 9B 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 E1 02 10 07 1A 3A 0E 00 01 F0 EE 86 FF 7B 14 00 00 06 04 43 25 99 EF 76 00 00 00 00 52 9A AC EA 21 DF FF FF 05 00 0E 00 2F 83 03 0E 27 08 02 00 00 00 01 00 A6 FD FA 02 43 01 14 1E 0A 37 87 0A A3 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 E2 02 10 07 1A 3A 0E 00 01 20 B8 EA 01 7C 14 00 00 06 04 43 C3 35 F0 76 00 00 00 00 4E 9A B4 EA 26 DF FC FF FC FF 05 00 2F 83 03 0E 27 08 01 00 00 00 00 00 A7 FD FB 02 44 01 E7 E1 25 37 8F 0A A3 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 E3 02 10 07 1A 3A 0E 00 01 38 85 4E 04 7C 14 00 00 06 04 43 62 D2 F0 76 00 00 00 00 4B 9A B4 EA 2E DF FF FF FA FF 01 00 2F 83 03 0E 27 08 00 00 FE FF 00 00 A7 FD FB 02 44 01 50 23 1F 37 97 0A 91 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 E4 02 10 07 1A 3A 0E 00 01 68 4E B2 06 7C 14 00 00 06 04 43 00 6F F1 76 00 00 00 00 47 9A AE EA 36 DF FD FF F7 FF FD FF 2F 83 03 0E 27 08 FE FF FF FF 00 00 A8 FD FB 02 44 01 DC 57 07 37 9F 0A A6 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 E5 02 10 07 1A 3A 0E 00 01 98 17 16 09 7C 14 00 00 06 04 43 9E 0B F2 76 00 00 00 00 44 9A A6 EA 39 DF 00 00 FD FF FE FF 2F 83 03 0E 27 08 FE FF 01 00 01 00 A8 FD FB 02 44 01 CB E1 93 36 A7 0A A5 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 E6 02 10 07 1A 3A 0E 00 01 C8 E0 79 0B 7C 14 00 00 06 04 43 3C A8 F2 76 00 00 00 00 40 9A A4 EA 3A DF 07 00 04 00 0A 00 2F 83 03 0E 27 08 FC FF 03 00 01 00 A8 FD FB 02 44 01 1E 35 16 37 AF 0A A4 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 E7 02 10 07 1A 3A 0E 00 01 F8 A9 DD 0D 7C 14 00 00 06 04 43 DA 44 F3 76 00 00 00 00 3E 9A A3 EA 39 DF EF FF FD FF F3 FF 2F 83 03 0E 27 08 FA FF FE FF 00 00 A8 FD FB 02 44 01 0F F8 D8 37 B7 0A A1 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 E8 02 10 07 1A 3A 0E 00 01 10 77 41 10 7C 14 00 00 06 04 83 79 E1 F3 76 00 00 00 00 41 9A A6 EA 29 DF 01 00 14 00 00 00 2F 83 03 0E 27 08 FE FF 04 00 04 00 A8 FD FB 02 45 01 17 BB 3E 38 BF 0A 9E 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 E9 02 10 07 1A 3A 0E 00 01 40 40 A5 12 7C 14 00 00 06 04 83 17 7E F4 76 00 00 00 00 45 9A A5 EA 2E DF 0A 00 F4 FF 08 00 30 83 03 0E 27 08 03 00 FF FF 03 00 A8 FD FC 02 45 01 AC D9 40 38 C7 0A A5 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 EA 02 10 07 1A 3A 0E 00 01 70 09 09 15 7C 14 00 00 06 04 83 B5 1A F5 76 00 00 00 00 45 9A A0 EA 3E DF 07 00 F9 FF 06 00 30 83 03 0E 27 08 FB FF FF FF FD FF A9 FD FB 02 45 01 2A 13 46 38 CF 0A A1 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 EB 02 10 07 1A 3A 0E 00 01 A0 D2 6C 17 7C 14 00 00 06 04 83 53 B7 F5 76 00 00 00 00 42 9A A5 EA 42 DF FA FF 04 00 03 00 30 83 03 0E 27 08 FF FF FD FF FD FF A9 FD FB 02 45 01 58 03 4C 38 D7 0A 9F 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 EC 02 10 07 1A 3A 0E 00 01 D0 9B D0 19 7C 14 00 00 06 04 83 F1 53 F6 76 00 00 00 00 3D 9A A9 EA 42 DF FF FF 03 00 04 00 30 83 03 0E 27 08 FC FF 03 00 00 00 A9 FD FB 02 45 01 62 22 45 38 DF 0A 9E 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 ED 02 10 07 1A 3A 0E 00 01 E8 68 34 1C 7C 14 00 00 06 04 83 90 F0 F6 76 00 00 00 00 3E 9A A6 EA 3B DF FF FF 04 00 F8 FF 30 83 03 0E 27 08 FF FF 03 00 00 00 A9 FD FC 02 45 01 8F 58 F8 37 E7 0A A5 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 EE 02 10 07 1A 3A 0E 00 01 18 32 98 1E 7C 14 00 00 06 04 43 2E 8D F7 76 00 00 00 00 44 9A A2 EA 34 DF 03 00 02 00 FE FF 30 83 03 0E 27 08 FE FF 01 00 01 00 A9 FD FC 02 45 01 EA B8 3E 37 EF 0A A0 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 EF 02 10 07 1A 3A 0E 00 01 48 FB FB 20 7C 14 00 00 06 04 43 CC 29 F8 76 00 00 00 00 48 9A A1 EA 35 DF 02 00 01 00 02 00 30 83 03 0E 27 08 FE FF FB FF FD FF A9 FD FC 02 45 01 0F 85 43 37 F7 0A A0 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 F0 02 10 07 1A 3A 0E 00 01 78 C4 5F 23 7C 14 00 00 06 04 43 6A C6 F8 76 00 00 00 00 49 9A A6 EA 31 DF FC FF 09 00 00 00 30 83 03 0E 27 08 00 00 FA FF FD FF A9 FD FC 02 45 01 7E 66 65 37 FF 0A A6 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 F1 02 10 07 1A 3A 0E 00 01 A8 8D C3 25 7C 14 00 00 06 04 43 08 63 F9 76 00 00 00 00 44 9A AE EA 2D DF F6 FF FB FF 07 00 30 83 03 0E 27 08 01 00 02 00 00 00 AA FD FC 02 45 01 FF 03 55 37 07 0B A5 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 F2 02 10 07 1A 3A 0E 00 01 D8 56 27 28 7C 14 00 00 06 04 43 A6 FF F9 76 00 00 00 00 3F 9A B7 EA 38 DF 02 00 FD FF 0B 00 30 83 03 0E 27 08 00 00 FF FF FF FF AA FD FC 02 45 01 68 B0 82 37 0F 0B A3 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 F3 02 10 07 1A 3A 0E 00 01 F0 23 8B 2A 7C 14 00 00 06 04 43 45 9C FA 76 00 00 00 00 3A 9A BB EA 3B DF FC FF FD FF 01 00 30 83 03 0E 27 08 FD FF 03 00 00 00 AA FD FC 02 45 01 D1 D2 8C 37 17 0B A1 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 F4 02 10 07 1A 3A 0E 00 01 20 ED EE 2C 7C 14 00 00 06 04 43 E3 38 FB 76 00 00 00 00 37 9A BD EA 3E DF FF FF 02 00 02 00 30 83 03 0E 27 08 FF FF 02 00 00 00 AA FD FC 02 45 01 30 73 93 37 1F 0B 9C 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 F5 02 10 07 1A 3A 0E 00 01 50 B6 52 2F 7C 14 00 00 06 04 43 81 D5 FB 76 00 00 00 00 35 9A BD EA 3B DF 06 00 03 00 02 00 31 83 03 0E 27 08 01 00 00 00 02 00 AA FD FC 02 45 01 34 C4 8E 37 27 0B A5 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 F6 02 10 07 1A 3A 0E 00 01 80 7F B6 31 7C 14 00 00 06 04 83 1F 72 FC 76 00 00 00 00 35 9A B2 EA 3A DF 00 00 F5 FF F6 FF 31 83 03 0E 27 08 FA FF 07 00 00 00 AA FD FC 02 46 01 98 63 F8 37 2F 0B A1 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 F7 02 10 07 1A 3A 0E 00 01 B0 48 1A 34 7C 14 00 00 06 04 83 BD 0E FD 76 00 00 00 00 3F 9A AE EA 3B DF 09 00 08 00 01 00 31 83 03 0E 27 08 01 00 FE FF 01 00 AA FD FC 02 46 01 8C 32 2C 38 37 0B 9C 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 F8 02 10 07 1A 3A 0E 00 01 C8 15 7E 36 7C 14 00 00 06 04 83 5C AB FD 76 00 00 00 00 3A 9A AC EA 4B DF FA FF E7 FF 07 00 31 83 03 0E 27 08 01 00 00 00 00 00 AB FD FC 02 46 01 A0 A9 26 38 3F 0B 9E 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 F9 02 10 07 1A 3A 0E 00 01 F8 DE E1 38 7C 14 00 00 06 04 83 FA 47 FE 76 00 00 00 00 31 9A AB EA 66 DF 00 00 04 00 08 00 31 83 03 0E 27 08 F6 FF FA FF F6 FF AA FD FC 02 46 01 6F 98 2B 38 47 0B A4 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 FA 02 10 07 1A 3A 0E 00 01 28 A8 45 3B 7C 14 00 00 06 04 83 98 E4 FE 76 00 00 00 00 2E 9A B0 EA 5C DF F6 FF 00 00 FB FF 31 83 03 0E 27 08 03 00 01 00 00 00 AA FD FC 02 46 01 28 CB 2F 38 4F 0B A3 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 FB 02 10 07 1A 3A 0E 00 01 58 71 A9 3D 7C 14 00 00 06 04 83 36 81 FF 76 00 00 00 00 2E 9A A9 EA 59 DF 05 00 FD FF 00 00 31 83 03 0E 27 08 FD FF 01 00 01 00 AB FD FC 02 46 01 50 B5 2F 38 57 0B A0 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 FC 02 10 07 1A 3A 0E 00 01 88 3A 0D 40 7C 14 00 00 06 04 83 D4 1D 00 77 00 00 00 00 2F 9A 9F EA 55 DF FF FF 00 00 F5 FF 31 83 03 0E 27 08 FE FF 01 00 00 00 AB FD FC 02 46 01 4C BA 05 38 5F 0B A6 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 FD 02 10 07 1A 3A 0E 00 01 A0 07 71 42 7C 14 00 00 06 04 43 73 BA 00 77 00 00 00 00 31 9A 9A EA 50 DF 01 00 03 00 01 00 31 83 03 0E 27 08 FB FF 01 00 00 00 AB FD FC 02 46 01 CD 66 8C 37 67 0B A5 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 FE 02 10 07 1A 3A 0E 00 01 D0 D0 D4 44 7C 14 00 00 06 04 43 11 57 01 77 00 00 00 00 33 9A 9C EA 52 DF 01 00 02 00 04 00 31 83 03 0E 27 08 FF FF FC FF 01 00 AB FD FC 02 46 01 53 35 78 37 6F 0B A3 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 FF 02 10 07 1A 3A 0E 00 01 00 9A 38 47 7C 14 00 00 06 04 43 AF F3 01 77 00 00 00 00 31 9A A1 EA 4F DF FA FF 03 00 03 00 31 83 03 0E 27 08 FE FF FE FF 00 00 AB FD FC 02 46 01 D8 9D 59 37 77 0B A1 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 80 03 10 07 1A 3A 0E 00 01 30 63 9C 49 7C 14 00 00 06 04 43 4D 90 02 77 00 00 00 00 2A 9A AA EA 52 DF F5 FF FA FF 08 00 32 83 03 0E 27 08 FC FF 00 00 00 00 AB FD FC 02 47 01 86 4A 18 37 7F 0B 9A 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 81 03 10 07 1A 3A 0E 00 01 60 2C 00 4C 7C 14 00 00 06 04 43 EB 2C 03 77 00 00 00 00 23 9A B4 EA 56 DF FE FF 09 00 05 00 32 83 03 0E 27 08 FB FF FD FF FD FF AA FD FC 02 47 01 CC E5 22 37 87 0B A5 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 82 03 10 07 1A 3A 0E 00 01 78 F9 63 4E 7C 14 00 00 06 04 43 8A C9 03 77 00 00 00 00 24 9A B8 EA 4F DF 01 00 FB FF 00 00 32 83 03 0E 27 08 03 00 00 00 03 00 AB FD FC 02 47 01 6E 46 FE 36 8F 0B 9F 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 83 03 10 07 1A 3A 0E 00 01 A8 C2 C7 50 7C 14 00 00 06 04 43 28 66 04 77 00 00 00 00 24 9A B3 EA 59 DF 01 00 F5 FF 04 00 32 83 03 0E 27 08 00 00 FE FF FF FF AB FD FC 02 47 01 54 C5 CE 36 97 0B 9F 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 84 03 10 07 1A 3A 0E 00 01 D8 8B 2B 53 7C 14 00 00 06 04 43 C6 02 05 77 00 00 00 00 20 9A B3 EA 5F DF 03 00 08 00 04 00 32 83 03 0E 27 08 FF FF F8 FF FA FF AB FD FC 02 47 01 A3 DE E5 36 9F 0B 9E 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 85 03 10 07 1A 3A 0E 00 01 08 55 8F 55 7C 14 00 00 06 04 83 64 9F 05 77 00 00 00 00 1B 9A B0 EA 58 DF F7 FF FC FF FA FF 32 83 03 0E 27 08 F9 FF 0B 00 00 00 AB FD FC 02 47 01 6C 63 DA 37 A7 0B A4 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 86 03 10 07 1A 3A 0E 00 01 38 1E F3 57 7C 14 00 00 06 04 83 02 3C 06 77 00 00 00 00 1D 9A B6 EA 54 DF 02 00 03 00 05 00 32 83 03 0E 27 08 00 00 00 00 03 00 AB FD FC 02 47 01 7F 7F 37 38 AF 0B A1 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 87 03 10 07 1A 3A 0E 00 01 50 EB 56 5A 7C 14 00 00 06 04 83 A1 D8 06 77 00 00 00 00 1B 9A B9 EA 5F DF F9 FF F8 FF 02 00 32 83 03 0E 27 08 00 00 FE FF FF FF AB FD FC 02 48 01 50 82 34 38 B7 0B 9F 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 88 03 10 07 1A 3A 0E 00 01 80 B4 BA 5C 7C 14 00 00 06 04 83 3F 75 07 77 00 00 00 00 1A 9A C0 EA 61 DF FE FF 06 00 04 00 32 83 03 0E 27 08 02 00 FA FF 01 00 AC FD FC 02 48 01 1D D2 3C 38 BF 0B A6 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 89 03 10 07 1A 3A 0E 00 01 B0 7D 1E 5F 7C 14 00 00 06 04 83 DD 11 08 77 00 00 00 00 12 9A C6 EA 5F DF F3 FF FE FF 01 00 32 83 03 0E 27 08 01 00 00 00 02 00 AC FD FC 02 48 01 62 D5 45 38 C7 0B A5 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 8A 03 10 07 1A 3A 0E 00 01 E0 46 82 61 7C 14 00 00 06 04 83 7B AE 08 77 00 00 00 00 0E 9A C8 EA 64 DF 04 00 FD FF 04 00 32 83 03 0E 27 08 00 00 FE FF 00 00 AC FD FD 02 48 01 4F 78 51 38 CF 0B A4 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 8B 03 10 07 1A 3A 0E 00 01 10 10 E6 63 7C 14 00 00 06 04 83 19 4B 09 77 00 00 00 00 0B 9A C4 EA 66 DF FF FF FD FF FC FF 32 83 03 0E 27 08 00 00 00 00 01 00 AC FD FC 02 49 01 C1 A9 16 38 D7 0B A0 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 8C 03 10 07 1A 3A 0E 00 01 28 DD 49 66 7C 14 00 00 06 04 43 B8 E7 09 77 00 00 00 00 09 9A C1 EA 69 DF 06 00 FF FF 05 00 33 83 03 0E 27 08 FC FF 02 00 01 00 AC FD FD 02 49 01 5E 93 8F 37 DF 0B 9E 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 8D 03 10 07 1A 3A 0E 00 01 58 A6 AD 68 7C 14 00 00 06 04 43 56 84 0A 77 00 00 00 00 09 9A C3 EA 6A DF FB FF 00 00 FF FF 33 83 03 0E 27 08 00 00 FB FF 00 00 AC FD FC 02 49 01 18 B5 9F 37 E7 0B A5 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 8E 03 10 07 1A 3A 0E 00 01 88 6F 11 6B 7C 14 00 00 06 04 43 F4 20 0B 77 00 00 00 00 04 9A C3 EA 68 DF F9 FF FB FF 00 00 33 83 03 0E 27 08 00 00 00 00 01 00 AD FD FC 02 49 01 8C 97 9F 37 EF 0B A1 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 8F 03 10 07 1A 3A 0E 00 01 B8 38 75 6D 7C 14 00 00 06 04 43 92 BD 0B 77 00 00 00 00 FF 99 C1 EA 6D DF FC FF FA FF FF FF 33 83 03 0E 27 08 00 00 FE FF 00 00 AD FD FC 02 49 01 3D C8 8E 37 F7 0B A0 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 90 03 10 07 1A 3A 0E 00 01 E8 01 D9 6F 7C 14 00 00 06 04 43 30 5A 0C 77 00 00 00 00 FA 99 BC EA 71 DF FD FF FC FF 00 00 33 83 03 0E 27 08 FD FF 01 00 01 00 AD FD FC 02 4A 01 39 33 7C 37 FF 0B 9E 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 91 03 10 07 1A 3A 0E 00 01 00 CF 3C 72 7C 14 00 00 06 04 43 CF F6 0C 77 00 00 00 00 F5 99 BD EA 74 DF F8 FF FC FF 00 00 33 83 03 0E 27 08 FC FF FD FF 00 00 AD FD FC 02 4A 01 04 9C 5B 37 07 0C A4 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 92 03 10 07 1A 3A 0E 00 01 30 98 A0 74 7C 14 00 00 06 04 43 6D 93 0D 77 00 00 00 00 F2 99 C6 EA 77 DF FF FF 03 00 0A 00 33 83 03 0E 27 08 FF FF FF FF 01 00 AC FD FC 02 4A 01 7C E5 38 37 0F 0C A0 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 93 03 10 07 1A 3A 0E 00 01 60 61 04 77 7C 14 00 00 06 04 43 0B 30 0E 77 00 00 00 00 ED 99 D4 EA 7B DF 04 00 03 00 14 00 33 83 03 0E 27 08 FF FF 01 00 02 00 AD FD FC 02 4A 01 64 D7 28 37 17 0C A0 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 94 03 10 07 1A 3A 0E 00 01 90 2A 68 79 7C 14 00 00 06 04 43 A9 CC 0E 77 00 00 00 00 EA 99 DC EA 81 DF FB FF FF FF 03 00 33 83 03 0E 27 08 FA FF 04 00 FD FF AD FD FC 02 4A 01 3E 36 A1 37 1F 0C A6 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 95 03 10 07 1A 3A 0E 00 01 C0 F3 CB 7B 7C 14 00 00 06 04 43 47 69 0F 77 00 00 00 00 EC 99 EC EA 7E DF 00 00 10 00 0C 00 33 83 03 0E 27 08 00 00 03 00 01 00 AD FD FD 02 4B 01 5A 4D D8 37 27 0C A4 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 96 03 10 07 1A 3A 0E 00 01 D8 C0 2F 7E 7C 14 00 00 06 04 43 E6 05 10 77 00 00 00 00 EA 99 FA EA 86 DF FC FF F7 FF 0C 00 33 83 03 0E 27 08 03 00 FF FF 01 00 AD FD FD 02 4B 01 44 04 DE 37 2F 0C A1 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 97 03 10 07 1A 3A 0E 00 01 08 8A 93 80 7C 14 00 00 06 04 43 84 A2 10 77 00 00 00 00 E6 99 05 EB 94 DF 04 00 02 00 0D 00 33 83 03 0E 27 08 FF FF FF FF FD FF AE FD FD 02 4B 01 F4 D2 D7 37 37 0C 9E 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 98 03 10 07 1A 3A 0E 00 01 38 53 F7 82 7C 14 00 00 06 04 83 22 3F 11 77 00 00 00 00 E2 99 10 EB 9B DF F7 FF FD FF 04 00 34 83 03 0E 27 08 05 00 FF FF 02 00 AE FD FD 02 4B 01 83 36 E0 37 3F 0C 9E 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 99 03 10 07 1A 3A 0E 00 01 68 1C 5B 85 7C 14 00 00 06 04 83 C0 DB 11 77 00 00 00 00 DC 99 13 EB A2 DF 04 00 FC FF 05 00 34 83 03 0E 27 08 00 00 03 00 01 00 AF FD FD 02 4C 01 68 05 DB 37 47 0C A5 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 9A 03 10 07 1A 3A 0E 00 01 80 E9 BE 87 7C 14 00 00 06 04 43 5F 78 12 77 00 00 00 00 DA 99 0F EB A7 DF FC FF FE FF FB FF 34 83 03 0E 27 08 FA FF FE FF FC FF AF FD FD 02 4C 01 06 7B 90 37 4F 0C A0 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 9B 03 10 07 1A 3A 0E 00 01 B0 B2 22 8A 7C 14 00 00 06 04 43 FD 14 13 77 00 00 00 00 D9 99 13 EB A0 DF FF FF 0C 00 04 00 34 83 03 0E 27 08 FA FF 02 00 FD FF AF FD FE 02 4C 01 A4 70 3D 37 57 0C A0 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 9C 03 10 07 1A 3A 0E 00 01 E0 7B 86 8C 7C 14 00 00 06 04 43 9B B1 13 77 00 00 00 00 D9 99 23 EB 92 DF F3 FF 0C 00 04 00 34 83 03 0E 27 08 00 00 FD FF FE FF AF FD FD 02 4C 01 A6 E2 37 37 5F 0C 9A 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 9D 03 10 07 1A 3A 0E 00 01 10 45 EA 8E 7C 14 00 00 06 04 43 39 4E 14 77 00 00 00 00 D5 99 35 EB 85 DF FC FF 0A 00 08 00 34 83 03 0E 27 08 00 00 04 00 02 00 AF FD FE 02 4C 01 92 9A 39 37 67 0C A4 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 9E 03 10 07 1A 3A 0E 00 01 40 0E 4E 91 7C 14 00 00 06 04 43 D7 EA 14 77 00 00 00 00 D6 99 3D EB 84 DF FF FF 02 00 03 00 34 83 03 0E 27 08 01 00 FE FF 00 00 B0 FD FE 02 4C 01 6B FD 15 37 6F 0C A3 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 9F 03 10 07 1A 3A 0E 00 01 58 DB B1 93 7C 14 00 00 06 04 43 76 87 15 77 00 00 00 00 D4 99 3F EB 83 DF 03 00 00 00 00 00 34 83 03 0E 27 08 05 00 06 00 03 00 B0 FD FE 02 4C 01 76 6B 0D 37 77 0C A0 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 A0 03 10 07 1A 3A 0E 00 01 88 A4 15 96 7C 14 00 00 06 04 43 14 24 16 77 00 00 00 00 DA 99 29 EB 8C DF 0B 00 E5 FF E9 FF 34 83 03 0E 27 08 0C 00 FF FF 01 00 B1 FD FE 02 4D 01 BF 8D 54 37 7F 0C A6 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 A1 03 10 07 1A 3A 0E 00 01 B8 6D 79 98 7C 14 00 00 06 04 43 B2 C0 16 77 00 00 00 00 E1 99 FA EA 95 DF 0E 00 F6 FF E5 FF 34 83 03 0E 27 08 FE FF FD FF FA FF B1 FD FE 02 4D 01 6C 52 38 37 87 0C A5 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 A2 03 10 07 1A 3A 0E 00 01 E8 36 DD 9A 7C 14 00 00 06 04 43 50 5D 17 77 00 00 00 00 E4 99 DB EA 93 DF 04 00 F7 FF F0 FF 34 83 03 0E 27 08 F7 FF 02 00 01 00 B1 FD FE 02 4D 01 29 8A 67 37 8F 0C A3 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 A3 03 10 07 1A 3A 0E 00 01 18 00 41 9D 7C 14 00 00 06 04 43 EE F9 17 77 00 00 00 00 E5 99 C6 EA 94 DF F7 FF F3 FF ED FF 35 83 03 0E 27 08 F8 FF FB FF FF FF B1 FD FE 02 4D 01 74 A0 8D 37 97 0C 9F 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 A4 03 10 07 1A 3A 0E 00 01 30 CD A4 9F 7C 14 00 00 06 04 83 8D 96 18 77 00 00 00 00 E8 99 BC EA 92 DF 08 00 0E 00 05 00 35 83 03 0E 27 08 F2 FF 02 00 FD FF B0 FD FE 02 4D 01 55 E6 28 38 9F 0C 9C 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 A5 03 10 07 1A 3A 0E 00 01 60 96 08 A2 7C 14 00 00 06 04 83 2B 33 19 77 00 00 00 00 EC 99 C7 EA 90 DF 08 00 00 00 14 00 35 83 03 0E 27 08 FE FF 00 00 02 00 B0 FD FE 02 4D 01 EE 98 2F 38 A7 0C A4 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 A6 03 10 07 1A 3A 0E 00 01 90 5F 6C A4 7C 14 00 00 06 04 83 C9 CF 19 77 00 00 00 00 ED 99 D5 EA 9C DF 06 00 00 00 11 00 35 83 03 0E 27 08 FD FF FA FF FB FF B0 FD FE 02 4D 01 FB 8D 29 38 AF 0C A1 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 A7 03 10 07 1A 3A 0E 00 01 C0 28 D0 A6 7C 14 00 00 06 04 83 67 6C 1A 77 00 00 00 00 EE 99 E2 EA 9E DF FF FF 08 00 0A 00 35 83 03 0E 27 08 02 00 FC FF 00 00 B0 FD FD 02 4D 01 42 77 2C 38 B7 0C A0 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 A8 03 10 07 1A 3A 0E 00 01 F0 F1 33 A9 7C 14 00 00 06 04 83 05 09 1B 77 00 00 00 00 EA 99 ED EA A5 DF FD FF F5 FF 0D 00 35 83 03 0E 27 08 02 00 03 00 03 00 B0 FD FE 02 4D 01 C9 49 28 38 BF 0C 9E 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 A9 03 10 07 1A 3A 0E 00 01 08 BF 97 AB 7C 14 00 00 06 04 83 A4 A5 1B 77 00 00 00 00 E4 99 ED EA B6 DF FB FF F3 FF 01 00 35 83 03 0E 27 08 FE FF FF FF 01 00 B0 FD FE 02 4D 01 EA AE 15 38 C7 0C A5 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 AA 03 10 07 1A 3A 0E 00 01 38 88 FB AD 7C 14 00 00 06 04 43 42 42 1C 77 00 00 00 00 E1 99 E9 EA C3 DF 05 00 FF FF 08 00 35 83 03 0E 27 08 FA FF 04 00 01 00 B0 FD FE 02 4D 01 D2 77 B1 37 CF 0C A3 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 AB 03 10 07 1A 3A 0E 00 01 68 51 5F B0 7C 14 00 00 06 04 43 E0 DE 1C 77 00 00 00 00 E0 99 EE EA CF DF FC FF FE FF 0A 00 35 83 03 0E 27 08 FE FF FF FF 00 00 B1 FD FE 02 4D 01 BC D2 88 37 D7 0C A0 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 AC 03 10 07 1A 3A 0E 00 01 98 1A C3 B2 7C 14 00 00 06 04 43 7E 7B 1D 77 00 00 00 00 DA 99 FF EA D9 DF FE FF 01 00 12 00 35 83 03 0E 27 08 FD FF 00 00 01 00 B1 FD FE 02 4E 01 85 3E 83 37 DF 0C A6 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 AD 03 10 07 1A 3A 0E 00 01 C8 E3 26 B5 7C 14 00 00 06 04 43 1C 18 1E 77 00 00 00 00 D9 99 12 EB DD DF 00 00 05 00 0B 00 35 83 03 0E 27 08 02 00 FD FF FF FF B1 FD FE 02 4E 01 B1 61 5B 37 E7 0C A5 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 AE 03 10 07 1A 3A 0E 00 01 E0 B0 8A B7 7C 14 00 00 06 04 43 BB B4 1E 77 00 00 00 00 DA 99 1F EB DB DF 02 00 05 00 07 00 35 83 03 0E 27 08 03 00 02 00 00 00 B2 FD FF 02 4E 01 15 00 47 37 EF 0C A3 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 AF 03 10 07 1A 3A 0E 00 01 10 7A EE B9 7C 14 00 00 06 04 43 59 51 1F 77 00 00 00 00 DD 99 21 EB E0 DF 07 00 FD FF 00 00 36 83 03 0E 27 08 00 00 00 00 FF FF B2 FD FF 02 4E 01 0D 18 2F 37 F7 0C 9F 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 B0 03 10 07 1A 3A 0E 00 01 40 43 52 BC 7C 14 00 00 06 04 43 F7 ED 1F 77 00 00 00 00 E0 99 19 EB E4 DF 03 00 FC FF FD FF 36 83 03 0E 27 08 00 00 FF FF FD FF B2 FD FF 02 4D 01 94 CE C7 36 FF 0C 9B 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 B1 03 10 07 1A 3A 0E 00 01 70 0C B6 BE 7C 14 00 00 06 04 43 95 8A 20 77 00 00 00 00 DE 99 15 EB E8 DF FA FF 00 00 03 00 36 83 03 0E 27 08 F8 FF 02 00 FD FF B2 FD FF 02 4D 01 D5 65 A1 36 07 0D A5 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 B2 03 10 07 1A 3A 0E 00 01 88 D9 19 C1 7C 14 00 00 06 04 43 34 27 21 77 00 00 00 00 DC 99 16 EB EC DF F6 FF F7 FF F8 FF 36 83 03 0E 27 08 02 00 F2 FF FC FF B3 FD FF 02 4D 01 BF 8D 85 37 0F 0D A1 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 B3 03 10 07 1A 3A 0E 00 01 B8 A2 7D C3 7C 14 00 00 06 04 83 D2 C3 21 77 00 00 00 00 DA 99 0F EB E5 DF 04 00 0F 00 03 00 36 83 03 0E 27 08 F8 FF 06 00 00 00 B2 FD 00 03 4D 01 23 71 07 38 17 0D A0 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 B4 03 10 07 1A 3A 0E 00 01 E8 6B E1 C5 7C 14 00 00 06 04 83 70 60 22 77 00 00 00 00 DC 99 18 EB E7 DF 09 00 F1 FF 10 00 36 83 03 0E 27 08 02 00 01 00 06 00 B3 FD 00 03 4E 01 77 EB 12 38 1F 0D A5 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 B5 03 10 07 1A 3A 0E 00 01 18 35 45 C8 7C 14 00 00 06 04 83 0E FD 22 77 00 00 00 00 DA 99 1B EB FB DF 02 00 FB FF 0B 00 36 83 03 0E 27 08 FB FF FD FF FE FF B3 FD 00 03 4E 01 0B 1A 16 38 27 0D A5 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 B6 03 10 07 1A 3A 0E 00 01 48 FE A8 CA 7C 14 00 00 06 04 83 AC 99 23 77 00 00 00 00 D7 99 25 EB 04 E0 00 00 01 00 0C 00 36 83 03 0E 27 08 FE FF FE FF 00 00 B3 FD 00 03 4E 01 57 B6 14 38 2F 0D A3 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 B7 03 10 07 1A 3A 0E 00 01 60 CB 0C CD 7C 14 00 00 06 04 83 4B 36 24 77 00 00 00 00 D2 99 31 EB 0B E0 FC FF FC FF 08 00 36 83 03 0E 27 08 01 00 00 00 01 00 B4 FD 00 03 4E 01 3B 73 17 38 37 0D A0 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 B8 03 10 07 1A 3A 0E 00 01 90 94 70 CF 7C 14 00 00 06 04 83 E9 D2 24 77 00 00 00 00 CE 99 34 EB 12 E0 FB FF FC FF 01 00 36 83 03 0E 27 08 FC FF 00 00 FF FF B4 FD 00 03 4E 01 03 A4 07 38 3F 0D A6 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 B9 03 10 07 1A 3A 0E 00 01 C0 5D D4 D1 7C 14 00 00 06 04 43 87 6F 25 77 00 00 00 00 CE 99 36 EB 17 E0 06 00 01 00 07 00 36 83 03 0E 27 08 FC FF 02 00 00 00 B4 FD 01 03 4E 01 B6 31 7D 37 47 0D A5 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 BA 03 10 07 1A 3A 0E 00 01 F0 26 38 D4 7C 14 00 00 06 04 43 25 0C 26 77 00 00 00 00 D2 99 3C EB 1C E0 02 00 FF FF 05 00 37 83 03 0E 27 08 FE FF FE FF FF FF B5 FD 01 03 4E 01 D8 E1 05 37 4F 0D A3 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 BB 03 10 07 1A 3A 0E 00 01 20 F0 9B D6 7C 14 00 00 06 04 43 C3 A8 26 77 00 00 00 00 D3 99 44 EB 1E E0 FE FF 0B 00 06 00 37 83 03 0E 27 08 FA FF FD FF FA FF B5 FD 01 03 4E 01 E1 8A F3 36 57 0D 9F 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 BC 03 10 07 1A 3A 0E 00 01 38 BD FF D8 7C 14 00 00 06 04 43 62 45 27 77 00 00 00 00 D2 99 55 EB 18 E0 00 00 05 00 0D 00 37 83 03 0E 27 08 00 00 00 00 01 00 B5 FD 01 03 4E 01 D2 5C FB 36 5F 0D 9C 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 BD 03 10 07 1A 3A 0E 00 01 68 86 63 DB 7C 14 00 00 06 04 43 00 E2 27 77 00 00 00 00 D1 99 61 EB 1E E0 05 00 FE FF 0B 00 37 83 03 0E 27 08 FE FF FF FF 00 00 B5 FD 01 03 4E 01 06 78 E6 36 67 0D A3 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 BE 03 10 07 1A 3A 0E 00 01 98 4F C7 DD 7C 14 00 00 06 04 43 9E 7E 28 77 00 00 00 00 D4 99 67 EB 1F E0 04 00 08 00 01 00 37 83 03 0E 27 08 FD FF FF FF 00 00 B6 FD 01 03 4E 01 51 EF C4 36 6F 0D A1 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 BF 03 10 07 1A 3A 0E 00 01 C8 18 2B E0 7C 14 00 00 06 04 43 3C 1B 29 77 00 00 00 00 D6 99 6D EB 1E E0 01 00 01 00 07 00 37 83 03 0E 27 08 FF FF FE FF 00 00 B6 FD 02 03 4E 01 62 B9 57 36 77 0D A0 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 C0 03 10 07 1A 3A 0E 00 01 F8 E1 8E E2 7C 14 00 00 06 04 43 DA B7 29 77 00 00 00 00 D4 99 79 EB 27 E0 12 00 00 00 18 00 37 83 03 0E 27 08 00 00 00 00 04 00 B6 FD 02 03 4E 01 0F 45 5C 37 7F 0D A5 00
4F 00 0B 05 04 00 04 00 17 00 00 00 10 00 43 00 08 C1 03 10 07 1A 3A 0E 00 01 10 AF F2 E4 7C 14 00 00 06 04 83 79 54 2A 77 00 00 00 00 D3 99 79 EB 33 E0 FF FF F5 FF 00 00 37 83 03 0E 27 08 F7 FF 06 00 FF FF B7 FD 02 03 4E 01 5F 84 22 38 87 0D A4 00

46
head-tracking/README.md Normal file
View File

@@ -0,0 +1,46 @@
# AirPods Head Tracking Project
This project implements head tracking with AirPods by gathering sensor data over Bluetooth, processing orientation and acceleration values, and detecting head gestures. The codebase is split into the following components:
- **Connection and Data Collection**
The project uses a custom ConnectionManager (imported in multiple files) to connect via Bluetooth to AirPods. Once connected, sensor packets are received in raw hex format. An AirPodsTracker class (in `plot.py`) handles the start/stop of tracking, logging of raw data, and parsing of packets into useful fields.
- **Orientation Calculation and Visualization**
The `HeadOrientation` class (in `head_orientation.py`) is responsible for:
- **Calibration:**
A set number of samples (default 10) are collected to calculate the neutral (baseline) values for the sensors. For example:
`o1_neutral = np.mean(samples[:, 0])`
- **Calculating Angles:**
For each new packet, the raw orientation values are normalized by subtracting the neutral baseline. Then:
- **Pitch** is computed as:
```
pitch = (o2_norm + o3_norm) / 2 / 32000 * 180
```
This averages the deviations from neutral, scales the result to degrees (assuming a sensor range around 32000), thus giving a smooth estimation of up/down tilt.
- **Yaw** is computed as:
```
yaw = (o2_norm - o3_norm) / 2 / 32000 * 180
```
Here, the difference between the two sensor axes is used to detect left/right rotation.
- **ASCII Visualization:**
Based on the calculated pitch and yaw, an ASCII art "face" is generated. The algorithm rotates points on a circle using simple trigonometric formulas (with scaling factors based on sensor depth) to build an approximate visual representation of head orientation.
- **Live Plotting and Interactive Commands**
The code offers both terminal-based plotting and graphical plotting via matplotlib. The AirPodsTracker manages live plotting by maintaining a buffer of recent packets. When in terminal mode, the code uses libraries like `asciichartpy` and `drawille` to render charts; in graphical mode, it creates live-updating plots.
- **Gesture Detection**
The `GestureDetector` class (in `gestures.py`) processes the head tracking data to detect nodding ("Yes") or head shaking ("No"):
- **Smoothing:**
Raw horizontal and vertical sensor data undergo moving-average smoothing using small fixed-size buffers. This reduces noise and provides a steadier signal.
- **Peak and Trough Detection:**
The code monitors small sections (e.g. the last 4 values) to compute variance and dynamically determine thresholds for direction changes. When a significant reversal (e.g. from increasing to decreasing) is detected that surpasses the dynamic threshold value (derived partly from a fixed threshold and variance), a peak or trough is recorded.
- **Rhythm Consistency:**
Time intervals between detected peaks are captured. The consistency of these intervals (by comparing them to their mean and computing relative variance) is used to evaluate whether the movement is rhythmic—a trait of intentional gestures.
- **Confidence Calculation:**
Multiple factors are considered:
- **Amplitude Factor:** Compares the average detected peak amplitude with a constant (like 600) to provide a normalized measure.
- **Rhythm Factor:** Derived from the consistency of the time intervals of the peaks.
- **Alternation Factor:** Verifies that the signal alternates (for instance, switching between positive and negative values).
- **Isolation Factor:** Checks that movement on the target axis (vertical for nodding, horizontal for shaking) dominates over the non-target axis.
A weighted sum of these factors forms a confidence score which, if above a predefined threshold (e.g. 0.7), confirms a detected gesture.

View File

@@ -1,123 +0,0 @@
04 00 04 00 17 00 00 00 10 00 45 00 08 F2 17 10 03 3A 3E 08 0E 1A 3A 01 F8 DE 9D 78 66 06 00 00 03 00 40 67 07 A1 5D 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 62 10 62 10 62 10 2F 03 CC FF 6E 06 2F 03 CE FF 6C 02 29 48 D7 36 21 5E 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 F3 17 10 03 3A 3E 08 0E 1A 3A 01 B8 90 01 7B 66 06 00 00 03 00 42 FF A3 A1 5D 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 03 00 03 00 03 00 2E 03 CD FF 6D 06 2F 03 CE FF 6C 02 66 4A E3 36 29 5E 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 F4 17 10 03 3A 3E 08 0E 1A 3A 01 90 3E 65 7D 66 06 00 00 03 00 42 96 40 A2 5D 00 00 00 00 00 00 00 00 00 00 00 00 01 00 00 00 03 00 03 00 03 00 2E 03 CD FF 6F 06 2F 03 CE FF 6C 02 79 7C BF 36 31 5E 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 F5 17 10 03 3A 3E 08 0E 1A 3A 01 50 F0 C8 7F 66 06 00 00 03 00 43 2E DD A2 5D 00 00 00 00 3B 07 79 72 00 00 00 00 00 00 00 00 03 00 03 00 03 00 01 00 00 00 02 00 2F 03 CE FF 6C 02 06 02 B4 36 39 5E 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 F6 17 10 03 3A 3E 08 0E 1A 3A 01 10 A2 2C 82 66 06 00 00 03 00 43 C6 79 A3 5D 00 00 00 00 3B 07 79 72 00 00 00 00 00 00 00 00 03 00 03 00 03 00 02 00 00 00 02 00 2F 03 CE FF 6C 02 AB 08 B6 36 41 5E 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 F7 17 10 03 3A 3E 08 0E 1A 3A 01 D0 53 90 84 66 06 00 00 03 00 43 5E 16 A4 5D 00 00 00 00 3E 07 84 72 02 00 00 00 00 00 00 00 03 00 03 00 03 00 03 00 00 00 00 00 2F 03 CE FF 6D 02 C0 F3 CA 36 49 5E 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 F8 17 10 03 3A 3E 08 0E 1A 3A 01 90 05 F4 86 66 06 00 00 03 00 43 F6 B2 A4 5D 00 00 00 00 3D 07 81 72 01 00 00 00 00 00 00 00 03 00 03 00 03 00 02 00 00 00 01 00 2F 03 CE FF 6D 02 AA BF C3 36 51 5E 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 F9 17 10 03 3A 3E 08 0E 1A 3A 01 50 B7 57 89 66 06 00 00 03 00 43 8E 4F A5 5D 00 00 00 00 3C 07 7F 72 00 00 00 00 00 00 00 00 03 00 03 00 03 00 02 00 00 00 00 00 2F 03 CE FF 6D 02 AD 91 A3 36 59 5E 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 FA 17 10 03 3A 3E 08 0E 1A 3A 01 10 69 BB 8B 66 06 00 00 03 00 43 26 EC A5 5D 00 00 00 00 3C 07 80 72 FF FF 00 00 00 00 00 00 04 00 04 00 04 00 01 00 00 00 00 00 2F 03 CE FF 6D 02 1D 91 AA 36 61 5E 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 FB 17 10 03 3A 3E 08 0E 1A 3A 01 D0 1A 1F 8E 66 06 00 00 03 00 43 BE 88 A6 5D 00 00 00 00 3D 07 7F 72 00 00 01 00 00 00 00 00 04 00 04 00 04 00 02 00 00 00 01 00 2F 03 CE FF 6D 02 BA F4 B0 36 69 5E 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 FC 17 10 03 3A 3E 08 0E 1A 3A 01 A8 C8 82 90 66 06 00 00 03 00 43 55 25 A7 5D 00 00 00 00 3E 07 7F 72 01 00 00 00 01 00 01 00 04 00 04 00 04 00 02 00 00 00 00 00 2F 03 CE FF 6D 02 33 B8 9C 36 71 5E 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 FD 17 10 03 3A 3E 08 0E 1A 3A 01 68 7A E6 92 66 06 00 00 03 00 43 ED C1 A7 5D 00 00 00 00 3D 07 7D 72 00 00 00 00 00 00 00 00 04 00 04 00 04 00 02 00 00 00 01 00 2F 03 CE FF 6D 02 BB 96 99 36 79 5E 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 FE 17 10 03 3A 3E 08 0E 1A 3A 01 28 2C 4A 95 66 06 00 00 03 00 43 85 5E A8 5D 00 00 00 00 3E 07 7D 72 01 00 00 00 00 00 00 00 04 00 04 00 04 00 01 00 00 00 02 00 2F 03 CE FF 6D 02 A0 A1 AC 36 81 5E 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 FF 17 10 03 3A 3E 08 0E 1A 3A 01 E8 DD AD 97 66 06 00 00 03 00 43 1D FB A8 5D 00 00 00 00 3E 07 7D 72 00 00 01 00 01 00 01 00 04 00 04 00 04 00 01 00 00 00 01 00 2F 03 CE FF 6D 02 93 AE B9 36 89 5E 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 80 18 10 03 3A 3E 08 0E 1A 3A 01 A8 8F 11 9A 66 06 00 00 03 00 43 B5 97 A9 5D 00 00 00 00 3F 07 7D 72 00 00 00 00 00 00 00 00 04 00 04 00 04 00 02 00 00 00 02 00 2F 03 CD FF 6D 02 51 EF BD 36 91 5E 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 81 18 10 03 3A 3E 08 0E 1A 3A 01 80 3D 75 9C 66 06 00 00 03 00 43 4C 34 AA 5D 00 00 00 00 3E 07 7D 72 00 00 00 00 00 00 00 00 04 00 04 00 04 00 00 00 FF FF 00 00 2E 03 CD FF 6D 02 D2 88 BB 36 99 5E 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 82 18 10 03 3A 3E 08 0E 1A 3A 01 40 EF D8 9E 66 06 00 00 03 00 43 E4 D0 AA 5D 00 00 00 00 3F 07 7C 72 00 00 01 00 01 00 00 00 04 00 04 00 04 00 01 00 00 00 00 00 2E 03 CD FF 6D 02 67 34 B9 36 A1 5E 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 83 18 10 03 3A 3E 08 0E 1A 3A 01 00 A1 3C A1 66 06 00 00 03 00 43 7C 6D AB 5D 00 00 00 00 3F 07 7D 72 FF FF 00 00 00 00 00 00 04 00 04 00 04 00 00 00 FF FF 00 00 2E 03 CD FF 6D 02 A9 31 AE 36 A9 5E 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 84 18 10 03 3A 3E 08 0E 1A 3A 01 C0 52 A0 A3 66 06 00 00 03 00 43 14 0A AC 5D 00 00 00 00 40 07 7D 72 FF FF FF FF 01 00 00 00 04 00 04 00 04 00 03 00 00 00 01 00 2E 03 CD FF 6D 02 95 47 CA 36 B1 5E 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 85 18 10 03 3A 3E 08 0E 1A 3A 01 80 04 04 A6 66 06 00 00 03 00 43 AC A6 AC 5D 00 00 00 00 40 07 7C 72 00 00 00 00 00 00 00 00 04 00 04 00 04 00 00 00 FF FF 00 00 2E 03 CD FF 6D 02 BB B3 BF 36 B9 5E 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 86 18 10 03 3A 3E 08 0E 1A 3A 01 58 B2 67 A8 66 06 00 00 03 00 43 43 43 AD 5D 00 00 00 00 40 07 7C 72 00 00 00 00 00 00 00 00 04 00 04 00 04 00 01 00 00 00 00 00 2E 03 CD FF 6D 02 06 0F C6 36 C1 5E 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 87 18 10 03 3A 3E 08 0E 1A 3A 01 18 64 CB AA 66 06 00 00 03 00 43 DB DF AD 5D 00 00 00 00 40 07 7C 72 00 00 00 00 FF FF 00 00 04 00 04 00 04 00 01 00 00 00 01 00 2E 03 CD FF 6D 02 7B EE BD 36 C9 5E 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 88 18 10 03 3A 3E 08 0E 1A 3A 01 D8 15 2F AD 66 06 00 00 03 00 43 73 7C AE 5D 00 00 00 00 40 07 7B 72 00 00 00 00 00 00 00 00 04 00 04 00 04 00 02 00 00 00 00 00 2E 03 CD FF 6D 02 DF 9B DA 36 D1 5E 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 89 18 10 03 3A 3E 08 0E 1A 3A 01 98 C7 92 AF 66 06 00 00 03 00 43 0B 19 AF 5D 00 00 00 00 41 07 7C 72 01 00 00 00 00 00 00 00 04 00 04 00 04 00 03 00 00 00 01 00 2E 03 CD FF 6D 02 8F CB E2 36 D9 5E 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 8A 18 10 03 3A 3E 08 0E 1A 3A 01 70 75 F6 B1 66 06 00 00 03 00 43 A2 B5 AF 5D 00 00 00 00 41 07 7B 72 00 00 00 00 00 00 00 00 04 00 04 00 04 00 02 00 00 00 00 00 2E 03 CD FF 6D 02 26 7A DE 36 E1 5E 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 8B 18 10 03 3A 3E 08 0E 1A 3A 01 30 27 5A B4 66 06 00 00 03 00 43 3A 52 B0 5D 00 00 00 00 41 07 7B 72 00 00 00 00 00 00 00 00 04 00 04 00 04 00 01 00 00 00 00 00 2E 03 CD FF 6D 02 99 BC BD 36 E9 5E 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 8C 18 10 03 3A 3E 08 0E 1A 3A 01 F0 D8 BD B6 66 06 00 00 03 00 43 D2 EE B0 5D 00 00 00 00 41 07 7B 72 00 00 00 00 00 00 00 00 04 00 04 00 04 00 01 00 00 00 01 00 2E 03 CD FF 6D 02 6D 51 BA 36 F1 5E 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 8D 18 10 03 3A 3E 08 0E 1A 3A 01 B0 8A 21 B9 66 06 00 00 03 00 43 6A 8B B1 5D 00 00 00 00 41 07 7B 72 FF FF 00 00 01 00 00 00 04 00 04 00 04 00 02 00 00 00 02 00 2E 03 CD FF 6E 02 C5 03 D4 36 F9 5E 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 8E 18 10 03 3A 3E 08 0E 1A 3A 01 88 38 85 BB 66 06 00 00 03 00 43 01 28 B2 5D 00 00 00 00 41 07 7B 72 FF FF 00 00 FF FF 00 00 03 00 03 00 03 00 01 00 01 00 01 00 2E 03 CD FF 6E 02 E8 E5 C9 36 01 5F 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 8F 18 10 03 3A 3E 08 0E 1A 3A 01 48 EA E8 BD 66 06 00 00 03 00 43 99 C4 B2 5D 00 00 00 00 41 07 7B 72 00 00 00 00 00 00 00 00 03 00 03 00 03 00 00 00 00 00 00 00 2E 03 CD FF 6E 02 C8 5F B9 36 09 5F 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 90 18 10 03 3A 3E 08 0E 1A 3A 01 08 9C 4C C0 66 06 00 00 03 00 43 31 61 B3 5D 00 00 00 00 40 07 7B 72 FF FF FF FF 00 00 00 00 03 00 03 00 03 00 01 00 00 00 01 00 2E 03 CD FF 6E 02 83 C4 9D 36 11 5F 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 91 18 10 03 3A 3E 08 0E 1A 3A 01 C8 4D B0 C2 66 06 00 00 03 00 43 C9 FD B3 5D 00 00 00 00 41 07 7B 72 FF FF 00 00 00 00 00 00 03 00 03 00 03 00 02 00 01 00 00 00 2E 03 CD FF 6E 02 F9 0A 9E 36 19 5F 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 92 18 10 03 3A 3E 08 0E 1A 3A 01 A0 FB 13 C5 66 06 00 00 03 00 43 60 9A B4 5D 00 00 00 00 41 07 7B 72 FF FF FF FF 00 00 00 00 03 00 03 00 03 00 02 00 00 00 00 00 2E 03 CD FF 6E 02 54 B2 96 36 21 5F 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 93 18 10 03 3A 3E 08 0E 1A 3A 01 60 AD 77 C7 66 06 00 00 03 00 43 F8 36 B5 5D 00 00 00 00 40 07 7B 72 FE FF 00 00 00 00 00 00 03 00 03 00 03 00 01 00 00 00 02 00 2E 03 CD FF 6E 02 FB 64 A2 36 29 5F 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 94 18 10 03 3A 3E 08 0E 1A 3A 01 20 5F DB C9 66 06 00 00 03 00 43 90 D3 B5 5D 00 00 00 00 40 07 7B 72 FF FF 00 00 00 00 00 00 03 00 03 00 03 00 01 00 00 00 01 00 2E 03 CD FF 6E 02 21 48 9D 36 31 5F 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 95 18 10 03 3A 3E 08 0E 1A 3A 01 E0 10 3F CC 66 06 00 00 03 00 43 28 70 B6 5D 00 00 00 00 40 07 7A 72 FF FF 00 00 00 00 00 00 03 00 03 00 03 00 03 00 00 00 00 00 2E 03 CD FF 6E 02 93 25 AC 36 39 5F 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 96 18 10 03 3A 3E 08 0E 1A 3A 01 B8 BE A2 CE 66 06 00 00 03 00 43 BF 0C B7 5D 00 00 00 00 40 07 7B 72 FF FF 00 00 00 00 00 00 03 00 03 00 03 00 02 00 00 00 02 00 2E 03 CD FF 6E 02 7B 3B CB 36 41 5F 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 97 18 10 03 3A 3E 08 0E 1A 3A 01 78 70 06 D1 66 06 00 00 03 00 43 57 A9 B7 5D 00 00 00 00 40 07 7A 72 FF FF 00 00 00 00 00 00 03 00 03 00 03 00 02 00 00 00 02 00 2E 03 CD FF 6E 02 9C 2B E3 36 49 5F 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 98 18 10 03 3A 3E 08 0E 1A 3A 01 38 22 6A D3 66 06 00 00 03 00 43 EF 45 B8 5D 00 00 00 00 40 07 7A 72 FF FF 00 00 00 00 00 00 03 00 03 00 03 00 01 00 FF FF 02 00 2E 03 CD FF 6E 02 F1 0D E8 36 51 5F 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 99 18 10 03 3A 3E 08 0E 1A 3A 01 F8 D3 CD D5 66 06 00 00 03 00 43 87 E2 B8 5D 00 00 00 00 40 07 7A 72 FF FF 00 00 00 00 00 00 03 00 03 00 03 00 01 00 00 00 02 00 2E 03 CD FF 6E 02 F0 1A DF 36 59 5F 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 9A 18 10 03 3A 3E 08 0E 1A 3A 01 D0 81 31 D8 66 06 00 00 03 00 43 1E 7F B9 5D 00 00 00 00 40 07 7A 72 FF FF 00 00 00 00 00 00 03 00 03 00 03 00 01 00 FF FF 01 00 2E 03 CD FF 6E 02 BB 9A CB 36 61 5F 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 9B 18 10 03 3A 3E 08 0E 1A 3A 01 90 33 95 DA 66 06 00 00 03 00 43 B6 1B BA 5D 00 00 00 00 40 07 7A 72 FF FF 00 00 FF FF 00 00 03 00 03 00 03 00 02 00 00 00 00 00 2E 03 CD FF 6E 02 85 AF D3 36 69 5F 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 9C 18 10 03 3A 3E 08 0E 1A 3A 01 50 E5 F8 DC 66 06 00 00 03 00 43 4E B8 BA 5D 00 00 00 00 40 07 7A 72 FF FF 00 00 00 00 00 00 03 00 03 00 03 00 01 00 00 00 01 00 2E 03 CD FF 6E 02 47 33 C4 36 71 5F 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 9D 18 10 03 3A 3E 08 0E 1A 3A 01 10 97 5C DF 66 06 00 00 03 00 43 E6 54 BB 5D 00 00 00 00 41 07 7A 72 FE FF 00 00 00 00 00 00 03 00 03 00 03 00 00 00 00 00 00 00 2E 03 CD FF 6E 02 5D 2C 9C 36 79 5F 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 9E 18 10 03 3A 3E 08 0E 1A 3A 01 E8 44 C0 E1 66 06 00 00 03 00 43 7D F1 BB 5D 00 00 00 00 42 07 7A 72 FE FF 00 00 00 00 00 00 03 00 03 00 03 00 01 00 FF FF 01 00 2E 03 CD FF 6E 02 0B 5E A3 36 81 5F 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 9F 18 10 03 3A 3E 08 0E 1A 3A 01 A8 F6 23 E4 66 06 00 00 03 00 43 15 8E BC 5D 00 00 00 00 42 07 7A 72 FE FF 00 00 FF FF 00 00 03 00 03 00 03 00 01 00 00 00 02 00 2E 03 CD FF 6E 02 D9 21 A3 36 89 5F 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 A0 18 10 03 3A 3E 08 0E 1A 3A 01 68 A8 87 E6 66 06 00 00 03 00 43 AD 2A BD 5D 00 00 00 00 41 07 79 72 FE FF 00 00 00 00 00 00 03 00 03 00 03 00 01 00 00 00 00 00 2E 03 CD FF 6E 02 82 84 A9 36 91 5F 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 A1 18 10 03 3A 3E 08 0E 1A 3A 01 40 56 EB E8 66 06 00 00 03 00 43 44 C7 BD 5D 00 00 00 00 42 07 7A 72 FE FF 00 00 00 00 00 00 03 00 03 00 03 00 02 00 00 00 00 00 2E 03 CD FF 6E 02 44 90 A7 36 99 5F 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 A2 18 10 03 3A 3E 08 0E 1A 3A 01 00 08 4F EB 66 06 00 00 03 00 43 DC 63 BE 5D 00 00 00 00 42 07 7A 72 FE FF 00 00 00 00 00 00 03 00 03 00 03 00 02 00 00 00 02 00 2E 03 CD FF 6E 02 FD 3C BA 36 A1 5F 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 A3 18 10 03 3A 3E 08 0E 1A 3A 01 C0 B9 B2 ED 66 06 00 00 03 00 43 74 00 BF 5D 00 00 00 00 42 07 7A 72 FE FF 00 00 01 00 00 00 03 00 03 00 03 00 02 00 00 00 01 00 2E 03 CD FF 6E 02 D2 05 C7 36 A9 5F 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 A4 18 10 03 3A 3E 08 0E 1A 3A 01 80 6B 16 F0 66 06 00 00 03 00 43 0C 9D BF 5D 00 00 00 00 41 07 7A 72 FF FF 00 00 01 00 00 00 03 00 03 00 03 00 02 00 00 00 00 00 2E 03 CD FF 6E 02 AB 49 BF 36 B1 5F 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 A5 18 10 03 3A 3E 08 0E 1A 3A 01 58 19 7A F2 66 06 00 00 03 00 43 A3 39 C0 5D 00 00 00 00 41 07 7A 72 FF FF 00 00 00 00 00 00 03 00 03 00 03 00 01 00 00 00 02 00 2E 03 CD FF 6E 02 31 2E CD 36 B9 5F 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 A6 18 10 03 3A 3E 08 0E 1A 3A 01 18 CB DD F4 66 06 00 00 03 00 43 3B D6 C0 5D 00 00 00 00 41 07 7A 72 FF FF 00 00 00 00 00 00 03 00 03 00 03 00 01 00 00 00 00 00 2E 03 CD FF 6E 02 09 DB B5 36 C1 5F 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 A7 18 10 03 3A 3E 08 0E 1A 3A 01 D8 7C 41 F7 66 06 00 00 03 00 43 D3 72 C1 5D 00 00 00 00 41 07 7A 72 FF FF 00 00 FF FF 00 00 03 00 03 00 03 00 03 00 00 00 01 00 2E 03 CD FF 6E 02 C9 F9 CA 36 C9 5F 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 A8 18 10 03 3A 3E 08 0E 1A 3A 01 98 2E A5 F9 66 06 00 00 03 00 43 6B 0F C2 5D 00 00 00 00 42 07 7A 72 FF FF 00 00 01 00 00 00 03 00 03 00 03 00 01 00 00 00 02 00 2E 03 CD FF 6E 02 5E 1C C2 36 D1 5F 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 A9 18 10 03 3A 3E 08 0E 1A 3A 01 70 DC 08 FC 66 06 00 00 03 00 43 02 AC C2 5D 00 00 00 00 42 07 7A 72 FF FF FF FF 00 00 00 00 03 00 03 00 03 00 02 00 00 00 00 00 2E 03 CD FF 6E 02 85 D9 B3 36 D9 5F 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 AA 18 10 03 3A 3E 08 0E 1A 3A 01 30 8E 6C FE 66 06 00 00 03 00 43 9A 48 C3 5D 00 00 00 00 42 07 7A 72 00 00 00 00 00 00 00 00 03 00 03 00 03 00 01 00 01 00 00 00 2E 03 CD FF 6E 02 89 F5 D3 36 E1 5F 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 AB 18 10 03 3A 3E 08 0E 1A 3A 01 F0 3F D0 00 67 06 00 00 03 00 43 32 E5 C3 5D 00 00 00 00 42 07 7A 72 FF FF 00 00 00 00 00 00 03 00 03 00 03 00 02 00 00 00 02 00 2E 03 CD FF 6E 02 5E 85 D3 36 E9 5F 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 AC 18 10 03 3A 3E 08 0E 1A 3A 01 C8 ED 33 03 67 06 00 00 03 00 43 C9 81 C4 5D 00 00 00 00 42 07 7A 72 FF FF 00 00 01 00 00 00 03 00 03 00 03 00 01 00 FF FF 02 00 2E 03 CD FF 6E 02 26 22 DF 36 F1 5F 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 AD 18 10 03 3A 3E 08 0E 1A 3A 01 88 9F 97 05 67 06 00 00 03 00 43 61 1E C5 5D 00 00 00 00 43 07 7A 72 FF FF 00 00 00 00 00 00 03 00 03 00 03 00 01 00 00 00 01 00 2E 03 CD FF 6E 02 06 95 DB 36 F9 5F 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 AE 18 10 03 3A 3E 08 0E 1A 3A 01 48 51 FB 07 67 06 00 00 03 00 43 F9 BA C5 5D 00 00 00 00 42 07 7A 72 FF FF 00 00 00 00 00 00 03 00 03 00 03 00 03 00 00 00 00 00 2E 03 CD FF 6E 02 66 B7 D2 36 01 60 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 AF 18 10 03 3A 3E 08 0E 1A 3A 01 08 03 5F 0A 67 06 00 00 03 00 43 91 57 C6 5D 00 00 00 00 42 07 7A 72 FE FF FF FF 00 00 00 00 03 00 03 00 03 00 01 00 00 00 01 00 2E 03 CD FF 6E 02 FE 66 EE 36 09 60 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 B0 18 10 03 3A 3E 08 0E 1A 3A 01 E0 B0 C2 0C 67 06 00 00 03 00 43 28 F4 C6 5D 00 00 00 00 42 07 7A 72 FE FF 00 00 00 00 00 00 03 00 03 00 03 00 01 00 00 00 01 00 2E 03 CD FF 6E 02 13 B3 DB 36 11 60 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 B1 18 10 03 3A 3E 08 0E 1A 3A 01 A0 62 26 0F 67 06 00 00 03 00 43 C0 90 C7 5D 00 00 00 00 42 07 79 72 FF FF 00 00 00 00 00 00 03 00 03 00 03 00 01 00 00 00 01 00 2E 03 CD FF 6E 02 B1 04 E7 36 19 60 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 B2 18 10 03 3A 3E 08 0E 1A 3A 01 60 14 8A 11 67 06 00 00 03 00 43 58 2D C8 5D 00 00 00 00 42 07 79 72 FE FF 00 00 00 00 00 00 03 00 03 00 03 00 02 00 00 00 02 00 2E 03 CD FF 6E 02 1A BE E6 36 21 60 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 B3 18 10 03 3A 3E 08 0E 1A 3A 01 38 C2 ED 13 67 06 00 00 03 00 43 EF C9 C8 5D 00 00 00 00 42 07 79 72 FE FF FF FF 00 00 00 00 03 00 03 00 03 00 01 00 00 00 00 00 2E 03 CD FF 6E 02 CE A4 E7 36 29 60 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 B4 18 10 03 3A 3E 08 0E 1A 3A 01 F8 73 51 16 67 06 00 00 03 00 43 87 66 C9 5D 00 00 00 00 42 07 79 72 FE FF 00 00 00 00 FF FF 03 00 03 00 03 00 03 00 00 00 00 00 2E 03 CD FF 6E 02 1E DF F0 36 31 60 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 B5 18 10 03 3A 3E 08 0E 1A 3A 01 B8 25 B5 18 67 06 00 00 03 00 43 1F 03 CA 5D 00 00 00 00 42 07 79 72 FE FF FF FF 00 00 00 00 03 00 03 00 03 00 02 00 FF FF 01 00 2E 03 CD FF 6E 02 1A 2D E4 36 39 60 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 B6 18 10 03 3A 3E 08 0E 1A 3A 01 78 D7 18 1B 67 06 00 00 03 00 43 B7 9F CA 5D 00 00 00 00 42 07 79 72 FD FF 00 00 00 00 00 00 03 00 03 00 03 00 02 00 00 00 01 00 2E 03 CD FF 6E 02 E2 B0 D6 36 41 60 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 B7 18 10 03 3A 3E 08 0E 1A 3A 01 50 85 7C 1D 67 06 00 00 03 00 43 4E 3C CB 5D 00 00 00 00 42 07 79 72 FD FF 00 00 00 00 00 00 03 00 03 00 03 00 01 00 00 00 00 00 2E 03 CD FF 6E 02 23 5D C1 36 49 60 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 B8 18 10 03 3A 3E 08 0E 1A 3A 01 10 37 E0 1F 67 06 00 00 03 00 43 E6 D8 CB 5D 00 00 00 00 42 07 79 72 FD FF 00 00 00 00 00 00 03 00 03 00 03 00 02 00 00 00 01 00 2E 03 CD FF 6E 02 92 5E CD 36 51 60 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 B9 18 10 03 3A 3E 08 0E 1A 3A 01 D0 E8 43 22 67 06 00 00 03 00 43 7E 75 CC 5D 00 00 00 00 42 07 79 72 FD FF 00 00 00 00 00 00 03 00 03 00 03 00 02 00 00 00 00 00 2E 03 CD FF 6E 02 8B E6 C4 36 59 60 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 BA 18 10 03 3A 3E 08 0E 1A 3A 01 A8 96 A7 24 67 06 00 00 03 00 43 15 12 CD 5D 00 00 00 00 42 07 79 72 FD FF FF FF 00 00 00 00 03 00 03 00 03 00 02 00 00 00 00 00 2E 03 CD FF 6E 02 B1 27 DE 36 61 60 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 BB 18 10 03 3A 3E 08 0E 1A 3A 01 68 48 0B 27 67 06 00 00 03 00 43 AD AE CD 5D 00 00 00 00 42 07 79 72 FD FF 00 00 00 00 00 00 03 00 03 00 03 00 00 00 00 00 00 00 2E 03 CD FF 6E 02 A1 EC C8 36 69 60 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 BC 18 10 03 3A 3E 08 0E 1A 3A 01 28 FA 6E 29 67 06 00 00 03 00 43 45 4B CE 5D 00 00 00 00 42 07 79 72 FD FF 01 00 00 00 00 00 03 00 03 00 03 00 03 00 00 00 02 00 2E 03 CD FF 6E 02 50 61 D8 36 71 60 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 BD 18 10 03 3A 3E 08 0E 1A 3A 01 E8 AB D2 2B 67 06 00 00 03 00 43 DD E7 CE 5D 00 00 00 00 42 07 79 72 FC FF 00 00 00 00 00 00 03 00 03 00 03 00 02 00 00 00 01 00 2E 03 CD FF 6E 02 CE C8 DA 36 79 60 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 BE 18 10 03 3A 3E 08 0E 1A 3A 01 C0 59 36 2E 67 06 00 00 03 00 43 74 84 CF 5D 00 00 00 00 42 07 79 72 FC FF 01 00 01 00 00 00 03 00 03 00 03 00 02 00 01 00 02 00 2E 03 CD FF 6E 02 9A 6D DA 36 81 60 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 BF 18 10 03 3A 3E 08 0E 1A 3A 01 80 0B 9A 30 67 06 00 00 03 00 43 0C 21 D0 5D 00 00 00 00 42 07 79 72 FC FF 00 00 00 00 FF FF 03 00 03 00 03 00 02 00 00 00 02 00 2E 03 CD FF 6E 02 89 9B D5 36 89 60 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 C0 18 10 03 3A 3E 08 0E 1A 3A 01 40 BD FD 32 67 06 00 00 03 00 43 A4 BD D0 5D 00 00 00 00 41 07 79 72 FC FF 00 00 00 00 00 00 03 00 03 00 03 00 02 00 00 00 00 00 2E 03 CD FF 6E 02 72 06 B4 36 91 60 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 C1 18 10 03 3A 3E 08 0E 1A 3A 01 18 6B 61 35 67 06 00 00 03 00 43 3B 5A D1 5D 00 00 00 00 42 07 79 72 FC FF 00 00 00 00 00 00 03 00 03 00 03 00 02 00 00 00 00 00 2E 03 CD FF 6E 02 55 DF C2 36 99 60 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 C2 18 10 03 3A 3E 08 0E 1A 3A 01 D8 1C C5 37 67 06 00 00 03 00 43 D3 F6 D1 5D 00 00 00 00 41 07 79 72 FC FF 00 00 01 00 00 00 03 00 03 00 03 00 02 00 00 00 01 00 2E 03 CD FF 6E 02 74 F7 D0 36 A1 60 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 C3 18 10 03 3A 3E 08 0E 1A 3A 01 98 CE 28 3A 67 06 00 00 03 00 43 6B 93 D2 5D 00 00 00 00 41 07 79 72 FC FF 00 00 00 00 00 00 03 00 03 00 03 00 03 00 00 00 01 00 2E 03 CD FF 6E 02 71 C0 C4 36 A9 60 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 C4 18 10 03 3A 3E 08 0E 1A 3A 01 58 80 8C 3C 67 06 00 00 03 00 43 03 30 D3 5D 00 00 00 00 41 07 79 72 FC FF 00 00 00 00 00 00 03 00 03 00 03 00 01 00 00 00 02 00 2E 03 CD FF 6E 02 21 D3 B6 36 B1 60 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 C5 18 10 03 3A 3E 08 0E 1A 3A 01 30 2E F0 3E 67 06 00 00 03 00 43 9A CC D3 5D 00 00 00 00 41 07 79 72 FC FF 00 00 00 00 00 00 03 00 03 00 03 00 03 00 00 00 00 00 2E 03 CD FF 6E 02 CF C1 B8 36 B9 60 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 C6 18 10 03 3A 3E 08 0E 1A 3A 01 F0 DF 53 41 67 06 00 00 03 00 43 32 69 D4 5D 00 00 00 00 41 07 79 72 FC FF 01 00 00 00 00 00 03 00 03 00 03 00 01 00 00 00 01 00 2E 03 CD FF 6E 02 D4 88 B7 36 C1 60 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 C7 18 10 03 3A 3E 08 0E 1A 3A 01 B0 91 B7 43 67 06 00 00 03 00 43 CA 05 D5 5D 00 00 00 00 41 07 79 72 FC FF 00 00 00 00 FF FF 03 00 03 00 03 00 02 00 01 00 00 00 2E 03 CD FF 6E 02 A8 80 AB 36 C9 60 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 C8 18 10 03 3A 3E 08 0E 1A 3A 01 88 3F 1B 46 67 06 00 00 03 00 43 61 A2 D5 5D 00 00 00 00 40 07 79 72 FC FF 00 00 00 00 00 00 03 00 03 00 03 00 02 00 00 00 00 00 2E 03 CD FF 6E 02 6C D8 B9 36 D1 60 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 C9 18 10 03 3A 3E 08 0E 1A 3A 01 48 F1 7E 48 67 06 00 00 03 00 43 F9 3E D6 5D 00 00 00 00 41 07 79 72 FC FF 00 00 00 00 00 00 03 00 03 00 03 00 02 00 00 00 00 00 2E 03 CD FF 6E 02 23 46 C4 36 D9 60 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 CA 18 10 03 3A 3E 08 0E 1A 3A 01 08 A3 E2 4A 67 06 00 00 03 00 43 91 DB D6 5D 00 00 00 00 41 07 79 72 FC FF 00 00 00 00 00 00 03 00 03 00 03 00 02 00 00 00 02 00 2E 03 CD FF 6E 02 33 F8 D9 36 E1 60 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 CB 18 10 03 3A 3E 08 0E 1A 3A 01 E0 50 46 4D 67 06 00 00 03 00 43 28 78 D7 5D 00 00 00 00 42 07 79 72 FC FF 00 00 00 00 00 00 03 00 03 00 03 00 02 00 00 00 01 00 2E 03 CD FF 6E 02 DA 2F DD 36 E9 60 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 CC 18 10 03 3A 3E 08 0E 1A 3A 01 A0 02 AA 4F 67 06 00 00 03 00 43 C0 14 D8 5D 00 00 00 00 41 07 79 72 FC FF 00 00 FF FF 00 00 03 00 03 00 03 00 02 00 00 00 00 00 2E 03 CD FF 6E 02 31 13 DC 36 F1 60 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 CD 18 10 03 3A 3E 08 0E 1A 3A 01 60 B4 0D 52 67 06 00 00 03 00 43 58 B1 D8 5D 00 00 00 00 41 07 79 72 FC FF 00 00 FF FF 00 00 03 00 03 00 03 00 01 00 00 00 00 00 2E 03 CD FF 6E 02 22 72 DF 36 F9 60 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 CE 18 10 03 3A 3E 08 0E 1A 3A 01 20 66 71 54 67 06 00 00 03 00 43 F0 4D D9 5D 00 00 00 00 41 07 79 72 FC FF 00 00 00 00 00 00 03 00 03 00 03 00 00 00 00 00 00 00 2E 03 CD FF 6E 02 73 6E CA 36 01 61 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 CF 18 10 03 3A 3E 08 0E 1A 3A 01 F8 13 D5 56 67 06 00 00 03 00 43 87 EA D9 5D 00 00 00 00 41 07 79 72 FC FF 00 00 00 00 01 00 03 00 03 00 03 00 02 00 00 00 01 00 2E 03 CD FF 6D 02 07 0A C4 36 09 61 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 D0 18 10 03 3A 3E 08 0E 1A 3A 01 B8 C5 38 59 67 06 00 00 03 00 43 1F 87 DA 5D 00 00 00 00 41 07 79 72 FB FF 00 00 00 00 00 00 03 00 03 00 03 00 02 00 00 00 01 00 2E 03 CD FF 6D 02 F6 BA 9E 36 11 61 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 D1 18 10 03 3A 3E 08 0E 1A 3A 01 78 77 9C 5B 67 06 00 00 03 00 43 B7 23 DB 5D 00 00 00 00 41 07 79 72 FB FF FF FF 00 00 00 00 03 00 03 00 03 00 02 00 00 00 00 00 2E 03 CD FF 6D 02 F0 20 B7 36 19 61 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 D2 18 10 03 3A 3E 08 0E 1A 3A 01 50 25 00 5E 67 06 00 00 03 00 43 4E C0 DB 5D 00 00 00 00 42 07 79 72 FB FF 00 00 00 00 00 00 03 00 03 00 03 00 01 00 00 00 01 00 2E 03 CD FF 6D 02 D1 7E 9C 36 21 61 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 D3 18 10 03 3A 3E 08 0E 1A 3A 01 10 D7 63 60 67 06 00 00 03 00 43 E6 5C DC 5D 00 00 00 00 42 07 79 72 FB FF 00 00 01 00 00 00 03 00 03 00 03 00 01 00 00 00 01 00 2E 03 CD FF 6D 02 8B 94 A3 36 29 61 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 D4 18 10 03 3A 3E 08 0E 1A 3A 01 D0 88 C7 62 67 06 00 00 03 00 43 7E F9 DC 5D 00 00 00 00 42 07 79 72 FB FF 00 00 00 00 00 00 03 00 03 00 03 00 01 00 00 00 01 00 2E 03 CD FF 6E 02 C9 DA B9 36 31 61 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 D5 18 10 03 3A 3E 08 0E 1A 3A 01 A8 36 2B 65 67 06 00 00 03 00 43 15 96 DD 5D 00 00 00 00 42 07 79 72 FB FF 00 00 00 00 00 00 03 00 03 00 03 00 01 00 01 00 01 00 2E 03 CD FF 6E 02 22 07 D8 36 39 61 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 D6 18 10 03 3A 3E 08 0E 1A 3A 01 68 E8 8E 67 67 06 00 00 03 00 43 AD 32 DE 5D 00 00 00 00 43 07 79 72 FB FF 00 00 00 00 00 00 03 00 03 00 03 00 01 00 00 00 02 00 2E 03 CD FF 6E 02 4E CE E7 36 41 61 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 D7 18 10 03 3A 3E 08 0E 1A 3A 01 28 9A F2 69 67 06 00 00 03 00 43 45 CF DE 5D 00 00 00 00 43 07 78 72 FB FF 00 00 00 00 00 00 03 00 03 00 03 00 01 00 00 00 00 00 2E 03 CD FF 6E 02 CB 69 CC 36 49 61 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 D8 18 10 03 3A 3E 08 0E 1A 3A 01 E8 4B 56 6C 67 06 00 00 03 00 43 DD 6B DF 5D 00 00 00 00 43 07 78 72 FB FF 00 00 00 00 01 00 03 00 03 00 03 00 01 00 00 00 02 00 2E 03 CD FF 6E 02 D6 F8 E0 36 51 61 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 D9 18 10 03 3A 3E 08 0E 1A 3A 01 C0 F9 B9 6E 67 06 00 00 03 00 43 74 08 E0 5D 00 00 00 00 43 07 78 72 FB FF 00 00 00 00 00 00 03 00 03 00 03 00 02 00 00 00 01 00 2E 03 CD FF 6E 02 EC AA DD 36 59 61 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 DA 18 10 03 3A 3E 08 0E 1A 3A 01 80 AB 1D 71 67 06 00 00 03 00 43 0C A5 E0 5D 00 00 00 00 43 07 78 72 FB FF 00 00 00 00 00 00 03 00 03 00 03 00 00 00 00 00 00 00 2E 03 CD FF 6E 02 55 EF D3 36 61 61 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 DB 18 10 03 3A 3E 08 0E 1A 3A 01 40 5D 81 73 67 06 00 00 03 00 43 A4 41 E1 5D 00 00 00 00 43 07 78 72 FB FF 01 00 00 00 00 00 03 00 03 00 03 00 03 00 00 00 00 00 2E 03 CD FF 6E 02 48 1A D8 36 69 61 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 DC 18 10 03 3A 3E 08 0E 1A 3A 01 18 0B E5 75 67 06 00 00 03 00 43 3B DE E1 5D 00 00 00 00 42 07 78 72 FB FF 00 00 00 00 00 00 03 00 03 00 03 00 01 00 00 00 02 00 2E 03 CD FF 6E 02 13 D6 D0 36 71 61 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 DD 18 10 03 3A 3E 08 0E 1A 3A 01 D8 BC 48 78 67 06 00 00 03 00 43 D3 7A E2 5D 00 00 00 00 42 07 78 72 FB FF 00 00 00 00 00 00 03 00 03 00 03 00 01 00 00 00 03 00 2E 03 CD FF 6E 02 29 20 DB 36 79 61 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 DE 18 10 03 3A 3E 08 0E 1A 3A 01 98 6E AC 7A 67 06 00 00 03 00 43 6B 17 E3 5D 00 00 00 00 42 07 78 72 FB FF 00 00 00 00 00 00 03 00 03 00 03 00 02 00 00 00 01 00 2E 03 CD FF 6E 02 E1 CD D8 36 81 61 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 DF 18 10 03 3A 3E 08 0E 1A 3A 01 70 1C 10 7D 67 06 00 00 03 00 43 02 B4 E3 5D 00 00 00 00 43 07 78 72 FB FF 00 00 00 00 01 00 03 00 03 00 03 00 01 00 00 00 02 00 2E 03 CD FF 6E 02 D7 F4 DB 36 89 61 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 E0 18 10 03 3A 3E 08 0E 1A 3A 01 30 CE 73 7F 67 06 00 00 03 00 43 9A 50 E4 5D 00 00 00 00 43 07 78 72 FB FF 00 00 00 00 00 00 03 00 03 00 03 00 02 00 00 00 02 00 2E 03 CD FF 6E 02 C1 54 D8 36 91 61 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 E1 18 10 03 3A 3E 08 0E 1A 3A 01 F0 7F D7 81 67 06 00 00 03 00 43 32 ED E4 5D 00 00 00 00 43 07 78 72 FB FF 00 00 00 00 00 00 03 00 03 00 03 00 01 00 00 00 00 00 2E 03 CD FF 6E 02 5F 88 C6 36 99 61 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 E2 18 10 03 3A 3E 08 0E 1A 3A 01 C8 2D 3B 84 67 06 00 00 03 00 43 C9 89 E5 5D 00 00 00 00 43 07 78 72 FB FF 00 00 00 00 00 00 03 00 03 00 03 00 01 00 00 00 02 00 2E 03 CD FF 6E 02 A7 D9 C9 36 A1 61 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 E3 18 10 03 3A 3E 08 0E 1A 3A 01 88 DF 9E 86 67 06 00 00 03 00 43 61 26 E6 5D 00 00 00 00 43 07 78 72 FB FF 00 00 00 00 00 00 03 00 03 00 03 00 01 00 00 00 01 00 2E 03 CD FF 6E 02 64 E3 B4 36 A9 61 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 E4 18 10 03 3A 3E 08 0E 1A 3A 01 48 91 02 89 67 06 00 00 03 00 43 F9 C2 E6 5D 00 00 00 00 43 07 78 72 FB FF 00 00 00 00 00 00 03 00 03 00 03 00 03 00 00 00 01 00 2E 03 CD FF 6E 02 EC D3 C4 36 B1 61 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 E5 18 10 03 3A 3E 08 0E 1A 3A 01 08 43 66 8B 67 06 00 00 03 00 43 91 5F E7 5D 00 00 00 00 42 07 78 72 FB FF 00 00 00 00 00 00 03 00 03 00 03 00 01 00 FF FF 01 00 2E 03 CD FF 6E 02 01 E4 C2 36 B9 61 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 E6 18 10 03 3A 3E 08 0E 1A 3A 01 E0 F0 C9 8D 67 06 00 00 03 00 43 28 FC E7 5D 00 00 00 00 41 07 78 72 FC FF 00 00 FF FF FF FF 03 00 03 00 03 00 06 00 02 00 03 00 2E 03 CD FF 6D 02 EF 0F 33 37 C1 61 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 E7 18 10 03 3A 3E 08 0E 1A 3A 01 A0 A2 2D 90 67 06 00 00 03 00 43 C0 98 E8 5D 00 00 00 00 41 07 78 72 FC FF 00 00 00 00 00 00 03 00 03 00 03 00 03 00 FE FF 04 00 2E 03 CD FF 6E 02 29 5F 74 37 C9 61 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 E8 18 10 03 3A 3E 08 0E 1A 3A 01 60 54 91 92 67 06 00 00 03 00 43 58 35 E9 5D 00 00 00 00 41 07 78 72 FC FF 00 00 00 00 00 00 03 00 03 00 03 00 02 00 00 00 01 00 2E 03 CD FF 6E 02 FB B7 79 37 D1 61 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 E9 18 10 03 3A 3E 08 0E 1A 3A 01 38 02 F5 94 67 06 00 00 03 00 43 EF D1 E9 5D 00 00 00 00 41 07 78 72 FC FF 00 00 00 00 00 00 03 00 03 00 03 00 02 00 00 00 02 00 2E 03 CD FF 6E 02 12 03 81 37 D9 61 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 EA 18 10 03 3A 3E 08 0E 1A 3A 01 F8 B3 58 97 67 06 00 00 03 00 43 87 6E EA 5D 00 00 00 00 40 07 77 72 FC FF FF FF 00 00 00 00 03 00 03 00 03 00 01 00 00 00 00 00 2E 03 CD FF 6E 02 A0 67 7D 37 E1 61 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 EB 18 10 03 3A 3E 08 0E 1A 3A 01 B8 65 BC 99 67 06 00 00 03 00 43 1F 0B EB 5D 00 00 00 00 40 07 78 72 FD FF 00 00 00 00 00 00 03 00 03 00 03 00 03 00 00 00 03 00 2E 03 CD FF 6E 02 5B 04 94 37 E9 61 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 EC 18 10 03 3A 3E 08 0E 1A 3A 01 90 13 20 9C 67 06 00 00 03 00 43 B6 A7 EB 5D 00 00 00 00 40 07 77 72 FD FF 00 00 00 00 00 00 03 00 03 00 03 00 02 00 00 00 00 00 2E 03 CD FF 6E 02 86 E3 73 37 F1 61 00 00

View File

@@ -1,82 +0,0 @@
# AirPods like Normal (ALN) - Bringing Apple-only features to Linux and Android for seamless AirPods functionality!
#
# Copyright (C) 2024 Kavish Devar
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published
# by the Free Software Foundation, either version 3 of the License.
#
# 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 Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
import matplotlib.pyplot as plt
import mplcursors
import bluetooth
import threading
import time
from matplotlib.animation import FuncAnimation
sock = bluetooth.BluetoothSocket(bluetooth.L2CAP)
bt_addr = "28:2D:7F:C2:05:5B"
psm = 0x1001
sock.connect((bt_addr, psm))
running = threading.Event()
data = []
def hex_to_base10(hex_string):
hex_values = hex_string.split()
base10_values = [int(hex_value, 16) for hex_value in hex_values]
return base10_values
def listen():
global running, data
while not running.is_set():
res = sock.recv(1024)
if len(res.hex()) == 162:
hex_string = " ".join(res.hex()[i:i+2].upper() for i in range(0, len(res.hex()), 2))
base10_values = hex_to_base10(hex_string)
data.append(base10_values)
t = threading.Thread(target=listen)
t.start()
try:
byts = bytes(int(b, 16) for b in "00 00 04 00 01 00 02 00 00 00 00 00 00 00 00 00".split(" "))
sock.send(byts)
byts = bytes(int(b, 16) for b in "04 00 04 00 0F 00 FF FF FE FF".split(" "))
sock.send(byts)
byts = bytes(int(b, 16) for b in "04 00 04 00 17 00 00 00 10 00 11 00 08 7C 10 02 42 0B 08 4E 10 02 1A 05 01 40 9C 00 00".split(" "))
sock.send(byts)
except:
...
def update(frame):
plt.clf()
plt.title('Bluetooth Data')
# columns = [33, 69, 44, 46, 48, 67, 69, 71, 78]
columns = [34]
# columns_to_remove = [0, 1, 2, 3, 4, 5, 6, 8, 10, 12, 13, 14, 15, 16, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 32, 35, 36, 37, 38, 43, 45, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 59, 46, 61, 62, 63, 64, 65, 66, 67, 68, 70,71, 73, 74, 75, 77, 78]
# columns_to_remove = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 35, 36, 37, 38, 39, 40, 41, 42, 43, 45, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 46, 60, 61, 62, 63, 64, 65, 66, 67, 68, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80]
for i in range(len(data[0])):
if i in columns:
plt.plot([row[i] for row in data], label=f'Column {i}', alpha=1, linewidth=1.2)
# plt.legend()
plt.xlabel('Time')
plt.ylabel('Value')
mplcursors.cursor(hover=True, highlight=True)
fig = plt.figure()
ani = FuncAnimation(fig, update, interval=0.5, repeat=True, cache_frame_data=False)
plt.show()
running.set()
sock.close()

View File

@@ -0,0 +1,62 @@
import bluetooth
import logging
class ConnectionManager:
INIT_CMD = "00 00 04 00 01 00 02 00 00 00 00 00 00 00 00 00"
START_CMD = "04 00 04 00 17 00 00 00 10 00 10 00 08 A1 02 42 0B 08 0E 10 02 1A 05 01 40 9C 00 00"
STOP_CMD = "04 00 04 00 17 00 00 00 10 00 11 00 08 7E 10 02 42 0B 08 4E 10 02 1A 05 01 00 00 00 00"
def __init__(self, bt_addr="28:2D:7F:C2:05:5B", psm=0x1001, logger=None):
self.bt_addr = bt_addr
self.psm = psm
self.logger = logger if logger else logging.getLogger(__name__)
self.sock = None
self.connected = False
self.started = False
def connect(self):
self.logger.info(f"Connecting to {self.bt_addr} on PSM {self.psm:#04x}...")
try:
self.sock = bluetooth.BluetoothSocket(bluetooth.L2CAP)
self.sock.connect((self.bt_addr, self.psm))
self.connected = True
self.logger.info("Connected to AirPods.")
self.sock.send(bytes.fromhex(self.INIT_CMD))
self.logger.info("Initialization complete.")
except Exception as e:
self.logger.error(f"Connection failed: {e}")
self.connected = False
return self.connected
def send_start(self):
if not self.connected:
self.logger.error("Not connected. Cannot send START command.")
return False
if not self.started:
self.sock.send(bytes.fromhex(self.START_CMD))
self.started = True
self.logger.info("START command sent.")
else:
self.logger.info("START command has already been sent.")
return True
def send_stop(self):
if self.connected and self.started:
try:
self.sock.send(bytes.fromhex(self.STOP_CMD))
self.logger.info("STOP command sent.")
self.started = False
except Exception as e:
self.logger.error(f"Error sending STOP command: {e}")
else:
self.logger.info("Cannot send STOP; not started or not connected.")
def disconnect(self):
if self.sock:
try:
self.sock.close()
self.logger.info("Disconnected from AirPods.")
except Exception as e:
self.logger.error(f"Error during disconnect: {e}")
self.connected = False
self.started = False

View File

@@ -1 +0,0 @@
./yes

View File

@@ -1,117 +0,0 @@
# AirPods like Normal (ALN) - Bringing Apple-only features to Linux and Android for seamless AirPods functionality!
#
# Copyright (C) 2024 Kavish Devar
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published
# by the Free Software Foundation, either version 3 of the License.
#
# 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 Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
import bluetooth
import threading
import time
sock = bluetooth.BluetoothSocket(bluetooth.L2CAP)
bt_addr = "28:2D:7F:C2:05:5B"
psm = 0x1001
sock.connect((bt_addr, psm))
running = threading.Event()
data = []
def hex_to_base10(hex_string):
hex_values = hex_string.split()
base10_values = [int(hex_value, 16) for hex_value in hex_values]
return base10_values
def listen():
global running, data
while not running.is_set():
res = sock.recv(1024)
if len(res.hex()) == 162:
hex_string = " ".join(res.hex()[i:i+2].upper() for i in range(0, len(res.hex()), 2))
base10_values = hex_to_base10(hex_string)
data.append(base10_values)
t = threading.Thread(target=listen)
t.start()
try:
byts = bytes(int(b, 16) for b in "00 00 04 00 01 00 02 00 00 00 00 00 00 00 00 00".split(" "))
sock.send(byts)
byts = bytes(int(b, 16) for b in "04 00 04 00 0F 00 FF FF FE FF".split(" "))
sock.send(byts)
byts = bytes(int(b, 16) for b in "04 00 04 00 17 00 00 00 10 00 11 00 08 7C 10 02 42 0B 08 4E 10 02 1A 05 01 40 9C 00 00".split(" "))
sock.send(byts)
except:
...
start_time = time.time()
timeout = 10 # seconds
vertical_count = 0
horizontal_count = 0
horizontal_fluctuation_count = 0
initial_131_sequence = True
while time.time() - start_time < timeout:
if len(data) > 0:
column_34_data = [row[34] for row in data]
for i in range(len(column_34_data)):
print(column_34_data[i])
if initial_131_sequence:
if column_34_data[i] == 131:
if i >= 4:
continue
else:
initial_131_sequence = False
if column_34_data[i] == 131 and not initial_131_sequence:
vertical_count += 1
horizontal_count = 0
if vertical_count >= 45:
print("vertical")
running.set()
sock.close()
exit()
elif column_34_data[i] == 3:
horizontal_count += 1
vertical_count = 0
if horizontal_count >= 40:
print("horizontal")
running.set()
sock.close()
exit()
else:
vertical_count = 0
horizontal_count = 0
# Check for horizontal nodding (fluctuation between 3 and 67 or higher)
fluctuation_window = 40
if len(column_34_data) >= fluctuation_window:
fluctuation_count = 0
for i in range(len(column_34_data) - fluctuation_window + 1):
segment = column_34_data[i:i+fluctuation_window]
if any(value == 3 for value in segment) and any(value >= 67 for value in segment):
count_67 = segment.count(67)
if count_67 <= 10:
fluctuation_count += 1
if fluctuation_count >= 10:
print("horizontal")
running.set()
sock.close()
exit()
print("unknown")
running.set()
sock.close()

381
head-tracking/gestures.py Normal file
View File

@@ -0,0 +1,381 @@
import bluetooth
import threading
import time
import logging
import statistics
from collections import deque
class Colors:
RESET = "\033[0m"
BOLD = "\033[1m"
RED = "\033[91m"
GREEN = "\033[92m"
YELLOW = "\033[93m"
BLUE = "\033[94m"
MAGENTA = "\033[95m"
CYAN = "\033[96m"
WHITE = "\033[97m"
BG_BLACK = "\033[40m"
class ColorFormatter(logging.Formatter):
FORMATS = {
logging.DEBUG: Colors.BLUE + "[%(levelname)s] %(message)s" + Colors.RESET,
logging.INFO: Colors.GREEN + "%(message)s" + Colors.RESET,
logging.WARNING: Colors.YELLOW + "%(message)s" + Colors.RESET,
logging.ERROR: Colors.RED + "[%(levelname)s] %(message)s" + Colors.RESET,
logging.CRITICAL: Colors.RED + Colors.BOLD + "[%(levelname)s] %(message)s" + Colors.RESET
}
def format(self, record):
log_fmt = self.FORMATS.get(record.levelno)
formatter = logging.Formatter(log_fmt, datefmt="%H:%M:%S")
return formatter.format(record)
handler = logging.StreamHandler()
handler.setFormatter(ColorFormatter())
log = logging.getLogger(__name__)
log.setLevel(logging.INFO)
log.addHandler(handler)
log.propagate = False
class GestureDetector:
INIT_CMD = "00 00 04 00 01 00 02 00 00 00 00 00 00 00 00 00"
START_CMD = "04 00 04 00 17 00 00 00 10 00 10 00 08 A1 02 42 0B 08 0E 10 02 1A 05 01 40 9C 00 00"
STOP_CMD = "04 00 04 00 17 00 00 00 10 00 11 00 08 7E 10 02 42 0B 08 4E 10 02 1A 05 01 00 00 00 00"
def __init__(self, conn=None):
self.sock = None
self.bt_addr = "28:2D:7F:C2:05:5B"
self.psm = 0x1001
self.running = False
self.data_lock = threading.Lock()
self.horiz_buffer = deque(maxlen=100)
self.vert_buffer = deque(maxlen=100)
self.horiz_avg_buffer = deque(maxlen=5)
self.vert_avg_buffer = deque(maxlen=5)
self.horiz_peaks = []
self.horiz_troughs = []
self.vert_peaks = []
self.vert_troughs = []
self.last_peak_time = 0
self.peak_intervals = deque(maxlen=5)
self.peak_threshold = 400
self.direction_change_threshold = 175
self.rhythm_consistency_threshold = 0.5
self.horiz_increasing = None
self.vert_increasing = None
self.required_extremes = 3
self.detection_timeout = 15
self.min_confidence_threshold = 0.7
self.conn = conn
def connect(self):
try:
log.info(f"Connecting to AirPods at {self.bt_addr}...")
if self.conn is None:
from connection_manager import ConnectionManager
self.conn = ConnectionManager(self.bt_addr, self.psm, logger=log)
if not self.conn.connect():
return False
else:
if not self.conn.connected:
if not self.conn.connect():
return False
self.sock = self.conn.sock
log.info(f"{Colors.GREEN}✓ Connected to AirPods via ConnectionManager{Colors.RESET}")
return True
except Exception as e:
log.error(f"{Colors.RED}Connection failed: {e}{Colors.RESET}")
return False
def process_data(self):
"""Process incoming head tracking data."""
self.conn.send_start()
log.info(f"{Colors.GREEN}✓ Head tracking activated{Colors.RESET}")
self.running = True
start_time = time.time()
log.info(f"{Colors.GREEN}Ready! Make a YES or NO gesture{Colors.RESET}")
log.info(f"{Colors.YELLOW}Tip: Use natural, moderate speed head movements{Colors.RESET}")
while self.running:
if time.time() - start_time > self.detection_timeout:
log.warning(f"{Colors.YELLOW}⚠️ Detection timeout reached. No gesture detected.{Colors.RESET}")
self.running = False
break
try:
if not self.sock:
log.error("Socket not available.")
break
data = self.sock.recv(1024)
formatted = self.format_hex(data)
if self.is_valid_tracking_packet(formatted):
raw_bytes = bytes.fromhex(formatted.replace(" ", ""))
horizontal, vertical = self.extract_orientation_values(raw_bytes)
if horizontal is not None and vertical is not None:
smooth_h, smooth_v = self.apply_smoothing(horizontal, vertical)
with self.data_lock:
self.horiz_buffer.append(smooth_h)
self.vert_buffer.append(smooth_v)
self.detect_peaks_and_troughs()
gesture = self.detect_gestures()
if gesture:
self.running = False
break
except Exception as e:
if self.running:
log.error(f"Data processing error: {e}")
break
def disconnect(self):
"""Disconnect from socket."""
self.conn.disconnect()
def format_hex(self, data):
"""Format binary data to readable hex string."""
hex_str = data.hex()
return ' '.join(hex_str[i:i+2] for i in range(0, len(hex_str), 2))
def is_valid_tracking_packet(self, hex_string):
"""Verify packet is a valid head tracking packet."""
standard_header = "04 00 04 00 17 00 00 00 10 00 45 00"
alternate_header = "04 00 04 00 17 00 00 00 10 00 44 00"
if not hex_string.startswith(standard_header) and not hex_string.startswith(alternate_header):
return False
if len(hex_string.split()) < 80:
return False
return True
def extract_orientation_values(self, raw_bytes):
"""Extract head orientation data from packet."""
try:
horizontal = int.from_bytes(raw_bytes[51:53], byteorder='little', signed=True)
vertical = int.from_bytes(raw_bytes[53:55], byteorder='little', signed=True)
return horizontal, vertical
except Exception as e:
log.debug(f"Failed to extract orientation: {e}")
return None, None
def apply_smoothing(self, horizontal, vertical):
"""Apply moving average smoothing (Apple-like filtering)."""
self.horiz_avg_buffer.append(horizontal)
self.vert_avg_buffer.append(vertical)
smooth_horiz = sum(self.horiz_avg_buffer) / len(self.horiz_avg_buffer)
smooth_vert = sum(self.vert_avg_buffer) / len(self.vert_avg_buffer)
return smooth_horiz, smooth_vert
def detect_peaks_and_troughs(self):
"""Detect motion direction changes with Apple-like refinements."""
if len(self.horiz_buffer) < 4 or len(self.vert_buffer) < 4:
return
h_values = list(self.horiz_buffer)[-4:]
v_values = list(self.vert_buffer)[-4:]
h_variance = statistics.variance(h_values) if len(h_values) > 1 else 0
v_variance = statistics.variance(v_values) if len(v_values) > 1 else 0
current = self.horiz_buffer[-1]
prev = self.horiz_buffer[-2]
if self.horiz_increasing is None:
self.horiz_increasing = current > prev
dynamic_h_threshold = max(100, min(self.direction_change_threshold, h_variance / 3))
if self.horiz_increasing and current < prev - dynamic_h_threshold:
if abs(prev) > self.peak_threshold:
self.horiz_peaks.append((len(self.horiz_buffer)-1, prev, time.time()))
direction = "➡️ " if prev > 0 else "⬅️ "
log.info(f"{Colors.CYAN}{direction} Horizontal max: {prev} (threshold: {dynamic_h_threshold:.1f}){Colors.RESET}")
now = time.time()
if self.last_peak_time > 0:
interval = now - self.last_peak_time
self.peak_intervals.append(interval)
self.last_peak_time = now
self.horiz_increasing = False
elif not self.horiz_increasing and current > prev + dynamic_h_threshold:
if abs(prev) > self.peak_threshold:
self.horiz_troughs.append((len(self.horiz_buffer)-1, prev, time.time()))
direction = "➡️ " if prev > 0 else "⬅️ "
log.info(f"{Colors.CYAN}{direction} Horizontal max: {prev} (threshold: {dynamic_h_threshold:.1f}){Colors.RESET}")
now = time.time()
if self.last_peak_time > 0:
interval = now - self.last_peak_time
self.peak_intervals.append(interval)
self.last_peak_time = now
self.horiz_increasing = True
current = self.vert_buffer[-1]
prev = self.vert_buffer[-2]
if self.vert_increasing is None:
self.vert_increasing = current > prev
dynamic_v_threshold = max(100, min(self.direction_change_threshold, v_variance / 3))
if self.vert_increasing and current < prev - dynamic_v_threshold:
if abs(prev) > self.peak_threshold:
self.vert_peaks.append((len(self.vert_buffer)-1, prev, time.time()))
direction = "⬆️ " if prev > 0 else "⬇️ "
log.info(f"{Colors.MAGENTA}{direction} Vertical max: {prev} (threshold: {dynamic_v_threshold:.1f}){Colors.RESET}")
now = time.time()
if self.last_peak_time > 0:
interval = now - self.last_peak_time
self.peak_intervals.append(interval)
self.last_peak_time = now
self.vert_increasing = False
elif not self.vert_increasing and current > prev + dynamic_v_threshold:
if abs(prev) > self.peak_threshold:
self.vert_troughs.append((len(self.vert_buffer)-1, prev, time.time()))
direction = "⬆️ " if prev > 0 else "⬇️ "
log.info(f"{Colors.MAGENTA}{direction} Vertical max: {prev} (threshold: {dynamic_v_threshold:.1f}){Colors.RESET}")
now = time.time()
if self.last_peak_time > 0:
interval = now - self.last_peak_time
self.peak_intervals.append(interval)
self.last_peak_time = now
self.vert_increasing = True
def calculate_rhythm_consistency(self):
"""Calculate how consistent the timing between peaks is (Apple-like)."""
if len(self.peak_intervals) < 2:
return 0
mean_interval = statistics.mean(self.peak_intervals)
if mean_interval == 0:
return 0
variances = [(i/mean_interval - 1.0) ** 2 for i in self.peak_intervals]
consistency = 1.0 - min(1.0, statistics.mean(variances) / self.rhythm_consistency_threshold)
return max(0, consistency)
def calculate_confidence_score(self, extremes, is_vertical=True):
"""Calculate confidence score for gesture detection (Apple-like)."""
if len(extremes) < self.required_extremes:
return 0.0
sorted_extremes = sorted(extremes, key=lambda x: x[0])
recent = sorted_extremes[-self.required_extremes:]
avg_amplitude = sum(abs(val) for _, val, _ in recent) / len(recent)
amplitude_factor = min(1.0, avg_amplitude / 600)
rhythm_factor = self.calculate_rhythm_consistency()
signs = [1 if val > 0 else -1 for _, val, _ in recent]
alternating = all(signs[i] != signs[i-1] for i in range(1, len(signs)))
alternation_factor = 1.0 if alternating else 0.5
if is_vertical:
vert_amp = sum(abs(val) for _, val, _ in recent) / len(recent)
horiz_vals = list(self.horiz_buffer)[-len(recent)*2:]
horiz_amp = sum(abs(val) for val in horiz_vals) / len(horiz_vals) if horiz_vals else 0
isolation_factor = min(1.0, vert_amp / (horiz_amp + 0.1) * 1.2)
else:
horiz_amp = sum(abs(val) for _, val, _ in recent)
vert_vals = list(self.vert_buffer)[-len(recent)*2:]
vert_amp = sum(abs(val) for val in vert_vals) / len(vert_vals) if vert_vals else 0
isolation_factor = min(1.0, horiz_amp / (vert_amp + 0.1) * 1.2)
confidence = (
amplitude_factor * 0.4 +
rhythm_factor * 0.2 +
alternation_factor * 0.2 +
isolation_factor * 0.2
)
return confidence
def detect_gestures(self):
"""Recognize head gesture patterns with Apple-like intelligence."""
if len(self.vert_peaks) + len(self.vert_troughs) >= self.required_extremes:
all_extremes = sorted(self.vert_peaks + self.vert_troughs, key=lambda x: x[0])
confidence = self.calculate_confidence_score(all_extremes, is_vertical=True)
log.info(f"Vertical motion confidence: {confidence:.2f} (need {self.min_confidence_threshold:.2f})")
if confidence >= self.min_confidence_threshold:
log.info(f"{Colors.GREEN}🎯 \"Yes\" Gesture Detected (confidence: {confidence:.2f}){Colors.RESET}")
return "YES"
if len(self.horiz_peaks) + len(self.horiz_troughs) >= self.required_extremes:
all_extremes = sorted(self.horiz_peaks + self.horiz_troughs, key=lambda x: x[0])
confidence = self.calculate_confidence_score(all_extremes, is_vertical=False)
log.info(f"Horizontal motion confidence: {confidence:.2f} (need {self.min_confidence_threshold:.2f})")
if confidence >= self.min_confidence_threshold:
log.info(f"{Colors.GREEN}🎯 \"No\" gesture detected (confidence: {confidence:.2f}){Colors.RESET}")
return "NO"
return None
def start_detection(self):
"""Begin gesture detection process."""
log.info(f"{Colors.BOLD}{Colors.WHITE}Starting gesture detection...{Colors.RESET}")
if not self.connect():
log.error(f"{Colors.RED}Failed to connect to AirPods.{Colors.RESET}")
return
data_thread = threading.Thread(target=self.process_data)
data_thread.daemon = True
data_thread.start()
try:
data_thread.join(timeout=self.detection_timeout + 2)
if data_thread.is_alive():
log.warning(f"{Colors.YELLOW}⚠️ Timeout reached. Stopping detection.{Colors.RESET}")
self.running = False
except KeyboardInterrupt:
log.info(f"{Colors.YELLOW}Detection canceled by user.{Colors.RESET}")
self.running = False
if __name__ == "__main__":
self.disconnect()
log.info(f"{Colors.GREEN}Gesture detection complete.{Colors.RESET}")
if __name__ == "__main__":
print(f"{Colors.BG_BLACK}{Colors.CYAN}╔════════════════════════════════════════╗{Colors.RESET}")
print(f"{Colors.BG_BLACK}{Colors.CYAN}║ AirPods Head Gesture Detector ║{Colors.RESET}")
print(f"{Colors.BG_BLACK}{Colors.CYAN}╚════════════════════════════════════════╝{Colors.RESET}")
print(f"\n{Colors.WHITE}This program detects head gestures using AirPods:{Colors.RESET}")
print(f"{Colors.GREEN}• YES: {Colors.WHITE}nodding head up and down{Colors.RESET}")
print(f"{Colors.RED}• NO: {Colors.WHITE}shaking head left and right{Colors.RESET}\n")
detector = GestureDetector()
detector.start_detection()

View File

@@ -0,0 +1,142 @@
import math
import drawille
import numpy as np
import logging
import os
class Colors:
RESET = "\033[0m"
BOLD = "\033[1m"
RED = "\033[91m"
GREEN = "\033[92m"
YELLOW = "\033[93m"
BLUE = "\033[94m"
MAGENTA = "\033[95m"
CYAN = "\033[96m"
WHITE = "\033[97m"
BG_BLACK = "\033[40m"
class ColorFormatter(logging.Formatter):
FORMATS = {
logging.DEBUG: Colors.BLUE + "[%(levelname)s] %(message)s" + Colors.RESET,
logging.INFO: Colors.GREEN + "%(message)s" + Colors.RESET,
logging.WARNING: Colors.YELLOW + "%(message)s" + Colors.RESET,
logging.ERROR: Colors.RED + "[%(levelname)s] %(message)s" + Colors.RESET,
logging.CRITICAL: Colors.RED + Colors.BOLD + "[%(levelname)s] %(message)s" + Colors.RESET
}
def format(self, record):
log_fmt = self.FORMATS.get(record.levelno)
formatter = logging.Formatter(log_fmt, datefmt="%H:%M:%S")
return formatter.format(record)
handler = logging.StreamHandler()
handler.setFormatter(ColorFormatter())
log = logging.getLogger(__name__)
log.setLevel(logging.INFO)
log.addHandler(handler)
log.propagate = False
class HeadOrientation:
def __init__(self, use_terminal=False):
self.orientation_offset = 5500
self.o1_neutral = 19000
self.o2_neutral = 0
self.o3_neutral = 0
self.calibration_samples = []
self.calibration_complete = False
self.calibration_sample_count = 10
self.fig = None
self.ax = None
self.arrow = None
self.animation = None
self.use_terminal = use_terminal
def reset_calibration(self):
self.calibration_samples = []
self.calibration_complete = False
def add_calibration_sample(self, orientation_values):
if len(self.calibration_samples) < self.calibration_sample_count:
self.calibration_samples.append(orientation_values)
return False
if not self.calibration_complete:
self._calculate_calibration()
return True
return True
def _calculate_calibration(self):
if len(self.calibration_samples) < 3:
log.warning("Not enough calibration samples")
return
samples = np.array(self.calibration_samples)
self.o1_neutral = np.mean(samples[:, 0])
avg_o2 = np.mean(samples[:, 1])
avg_o3 = np.mean(samples[:, 2])
self.o2_neutral = avg_o2
self.o3_neutral = avg_o3
log.info("Calibration complete: o1_neutral=%.2f, o2_neutral=%.2f, o3_neutral=%.2f",
self.o1_neutral, self.o2_neutral, self.o3_neutral)
self.calibration_complete = True
def calculate_orientation(self, o1, o2, o3):
if not self.calibration_complete:
return {'pitch': 0, 'yaw': 0}
o1_norm = o1 - self.o1_neutral
o2_norm = o2 - self.o2_neutral
o3_norm = o3 - self.o3_neutral
pitch = (o2_norm + o3_norm) / 2 / 32000 * 180
yaw = (o2_norm - o3_norm) / 2 / 32000 * 180
return {'pitch': pitch, 'yaw': yaw}
def create_face_art(self, pitch, yaw):
if self.use_terminal:
try:
ts = os.get_terminal_size()
width, height = ts.columns, ts.lines * 2
except Exception:
width, height = 80, 40
else:
width, height = 80, 40
center_x, center_y = width // 2, height // 2
radius = (min(width, height) // 2 - 2) // 2
pitch_rad = math.radians(pitch)
yaw_rad = math.radians(yaw)
canvas = drawille.Canvas()
def rotate_point(x, y, z, pitch_r, yaw_r):
cos_y, sin_y = math.cos(yaw_r), math.sin(yaw_r)
cos_p, sin_p = math.cos(pitch_r), math.sin(pitch_r)
x1 = x * cos_y - z * sin_y
z1 = x * sin_y + z * cos_y
y1 = y * cos_p - z1 * sin_p
z2 = y * sin_p + z1 * cos_p
scale = 1 + (z2 / width)
return int(center_x + x1 * scale), int(center_y + y1 * scale)
for angle in range(0, 360, 2):
rad = math.radians(angle)
x = radius * math.cos(rad)
y = radius * math.sin(rad)
x1, y1 = rotate_point(x, y, 0, pitch_rad, yaw_rad)
canvas.set(x1, y1)
for eye in [(-radius//2, -radius//3, 2), (radius//2, -radius//3, 2)]:
ex, ey, ez = eye
x1, y1 = rotate_point(ex, ey, ez, pitch_rad, yaw_rad)
for dx in [-1, 0, 1]:
for dy in [-1, 0, 1]:
canvas.set(x1 + dx, y1 + dy)
nx, ny = rotate_point(0, 0, 1, pitch_rad, yaw_rad)
for dx in [-1, 0, 1]:
for dy in [-1, 0, 1]:
canvas.set(nx + dx, ny + dy)
smile_depth = radius // 8
mouth_local_y = radius // 4
mouth_length = radius
for x_offset in range(-mouth_length // 2, mouth_length // 2 + 1):
norm = abs(x_offset) / (mouth_length / 2)
y_offset = int((1 - norm ** 2) * smile_depth)
local_x = x_offset
local_y = mouth_local_y + y_offset
mx, my = rotate_point(local_x, local_y, 0, pitch_rad, yaw_rad)
canvas.set(mx, my)
return canvas.frame()

View File

@@ -1,65 +0,0 @@
# AirPods like Normal (ALN) - Bringing Apple-only features to Linux and Android for seamless AirPods functionality!
#
# Copyright (C) 2024 Kavish Devar
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published
# by the Free Software Foundation, either version 3 of the License.
#
# 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 Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
import os
import matplotlib.pyplot as plt
import mplcursors
def hex_to_base10(hex_string):
hex_values = hex_string.split()
base10_values = [int(hex_value, 16) for hex_value in hex_values]
return base10_values
def convert_file(input_filepath):
data = []
with open(input_filepath, 'r') as infile:
for line in infile:
base10_line = hex_to_base10(line.strip())
data.append(base10_line)
return data
def plot_data(data, title, directory):
plt.figure()
plt.title(title)
# columns_to_remove = [0, 1, 2, 3, 4, 5, 6, 8, 10, 12, 13, 14, 15, 16, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 29, 32, 35, 36, 37, 38, 43, 45, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 59, 46, 61, 63, 64, 65, 67, 68, 70, 71, 73, 74, 75, 77]
columns_to_remove = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18 ]
for i in range(len(data[0])):
if i in columns_to_remove:
continue
plt.plot([row[i] for row in data], label=f'Column {i}', alpha=1, linewidth=1.2)
plt.legend()
plt.xlabel('Time')
plt.ylabel('Value')
# Add interactive cursor
mplcursors.cursor(hover=True)
plt.show()
plt.close()
def process_files(directory):
for filename in os.listdir(directory):
if filename.endswith('.txt'):
input_filepath = os.path.join(directory, filename)
data = convert_file(input_filepath)
plot_data(data, f'{filename}', directory)
# Directory containing the files
directory = 'yes'
# Process each file in the directory
process_files(directory)

View File

@@ -1,122 +0,0 @@
04 00 04 00 17 00 00 00 10 00 45 00 08 E2 1C 10 03 3A 3E 08 0E 1A 3A 01 08 ED A4 83 29 09 00 00 03 00 42 81 04 A2 12 01 00 00 00 00 00 00 00 00 00 FF FF 04 00 04 00 1C 83 1C 83 1C 83 83 FE B2 03 47 04 86 FE B1 03 4A 00 5F 94 03 37 44 71 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 E3 1C 10 03 3A 3E 08 0E 1A 3A 01 50 B2 08 86 29 09 00 00 03 00 42 1E A1 A2 12 01 00 00 00 00 00 00 00 00 00 FC FF 08 00 0A 00 1D 83 1D 83 1D 83 85 FE B5 03 49 04 86 FE B2 03 4A 00 4C 29 E0 36 4C 71 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 E4 1C 10 03 3A 3E 08 0E 1A 3A 01 80 7B 6C 88 29 09 00 00 03 00 43 BC 3D A3 12 01 00 00 00 C3 A3 99 EF 42 EE FE FF 0D 00 0C 00 1D 83 1D 83 1D 83 00 00 02 00 01 00 86 FE B2 03 4A 00 3F 26 F3 36 54 71 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 E5 1C 10 03 3A 3E 08 0E 1A 3A 01 B0 44 D0 8A 29 09 00 00 03 00 43 5A DA A3 12 01 00 00 00 BF A3 9F EF 3D EE FA FF 00 00 FC FF 1D 83 1D 83 1D 83 00 00 FD FF 02 00 86 FE B2 03 4A 00 D2 34 5D 37 5C 71 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 E6 1C 10 03 3A 3E 08 0E 1A 3A 01 F8 09 34 8D 29 09 00 00 03 00 43 F7 76 A4 12 01 00 00 00 B7 A3 B6 EF 44 EE FF FF 18 00 09 00 1D 83 1D 83 1D 83 FA FF 01 00 FD FF 86 FE B2 03 4A 00 B4 44 70 37 64 71 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 E7 1C 10 03 3A 3E 08 0E 1A 3A 01 28 D3 97 8F 29 09 00 00 03 00 43 95 13 A5 12 01 00 00 00 95 A3 C3 EF 47 EE 01 00 F9 FF 0F 00 1D 83 1D 83 1D 83 07 00 05 00 06 00 86 FE B2 03 4A 00 81 F0 4F 37 6C 71 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 E8 1C 10 03 3A 3E 08 0E 1A 3A 01 58 9C FB 91 29 09 00 00 03 00 43 33 B0 A5 12 01 00 00 00 C0 A3 A6 EF 43 EE 1A 00 DC FF 07 00 1D 83 1D 83 1D 83 0F 00 02 00 11 00 86 FE B2 03 4B 00 9C 7C 5C 37 74 71 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 E9 1C 10 03 3A 3E 08 0E 1A 3A 01 A0 61 5F 94 29 09 00 00 03 00 83 D0 4C A6 12 01 00 00 00 DC A3 49 EF B5 EE B4 00 64 FF 23 00 1D 83 1D 83 1D 83 26 00 52 00 41 00 89 FE B5 03 4D 00 70 21 85 39 7C 71 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 EA 1C 10 03 3A 3E 08 0E 1A 3A 01 D0 2A C3 96 29 09 00 00 03 00 03 6E E9 A6 12 01 00 00 00 A4 A4 2D EE 43 F0 24 02 DB FD 45 00 1D 83 1D 83 1D 83 80 00 A9 00 D7 00 8F FE BC 03 56 00 31 B5 F7 3A 84 71 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 EB 1C 10 03 3A 3E 08 0E 1A 3A 01 00 F4 26 99 29 09 00 00 03 00 03 0C 86 A7 12 01 00 00 00 18 A7 1C EB 18 F5 97 04 E8 FA 3D 01 1D 83 1D 83 1D 83 5D 00 8E 00 1E 01 97 FE C8 03 64 00 48 3B F2 3B 8C 71 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 EC 1C 10 03 3A 3E 08 0E 1A 3A 01 30 BD 8A 9B 29 09 00 00 03 00 83 AA 22 A8 12 01 00 00 00 0F AB 8A E6 F8 FC B7 05 F0 F8 CE 01 1D 83 1D 83 1D 83 14 00 18 00 41 01 9C FE CB 03 6F 00 2E EA 0B 3C 94 71 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 ED 1C 10 03 3A 3E 08 0E 1A 3A 01 78 82 EE 9D 29 09 00 00 03 00 83 47 BF A8 12 01 00 00 00 4B B0 C6 E0 49 07 22 06 41 F7 3C 02 1D 83 1D 83 1D 83 3F FF 73 FF 3C 00 99 FE C8 03 71 00 58 20 0F 3C 9C 71 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 EE 1C 10 03 3A 3E 08 0E 1A 3A 01 A8 4B 52 A0 29 09 00 00 03 00 83 E5 5B A9 12 01 00 00 00 46 B4 BA DC E7 0E 4C 01 8E FD 93 00 1D 83 1D 83 1D 83 53 FE 32 FE F5 FD 85 FE B1 03 4C 00 4D 8B 14 3C A4 71 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 EF 1C 10 03 3A 3E 08 0E 1A 3A 01 D8 14 B6 A2 29 09 00 00 03 00 83 83 F8 A9 12 01 00 00 00 EF B2 44 DD D5 0D 1A FC C2 03 2C FF 1E 83 1E 83 1E 83 7F FE 45 FE F2 FD 72 FE 97 03 1D 00 72 29 29 3C AC 71 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 F0 1C 10 03 3A 3E 08 0E 1A 3A 01 20 DA 19 A5 29 09 00 00 03 00 83 20 95 AA 12 01 00 00 00 66 AD B8 E1 D3 05 96 F9 FD 07 C5 FE 1E 83 1E 83 1E 83 8A FE 40 FF 65 FF 61 FE 89 03 03 00 90 35 1E 3C B4 71 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 F1 1C 10 03 3A 3E 08 0E 1A 3A 01 50 A3 7D A7 29 09 00 00 03 00 83 BE 31 AB 12 01 00 00 00 43 A7 11 E9 E3 FA 08 F8 D1 0A 68 FE 1E 83 1E 83 1E 83 4F FE C0 FE 23 00 4F FE 7E 03 00 00 31 1E 88 3B BC 71 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 F2 1C 10 03 3A 3E 08 0E 1A 3A 01 80 6C E1 A9 29 09 00 00 03 00 83 5C CE AB 12 01 00 00 00 85 A1 AF F2 12 ED E4 F6 22 0C 52 FE 1E 83 1E 83 1E 83 BD FE 35 FF 44 01 3D FE 72 03 12 00 62 25 2D 3B C4 71 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 F3 1C 10 03 3A 3E 08 0E 1A 3A 01 B0 35 45 AC 29 09 00 00 03 00 03 FA 6A AC 12 01 00 00 00 C1 9D EB FC 55 E0 26 F8 7E 0A 41 FF 1E 83 1E 83 1E 83 03 00 F4 FF 60 02 38 FE 71 03 39 00 D6 50 0C 3C CC 71 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 F4 1C 10 03 3A 3E 08 0E 1A 3A 01 F8 FA A8 AE 29 09 00 00 03 00 03 97 07 AD 12 01 00 00 00 99 9B E7 02 7D D8 BF FC 7D 02 21 FF 1E 83 1E 83 1E 83 0A 02 49 02 E2 02 4F FE 83 03 71 00 6E A5 52 3D D4 71 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 F5 1C 10 03 3A 3E 08 0E 1A 3A 01 28 C4 0C B1 29 09 00 00 03 00 03 35 A4 AD 12 01 00 00 00 E2 9B 5A 02 4F DA A9 04 91 FB 9F 01 1E 83 1E 83 1E 83 C0 01 53 02 5B 02 6B FE AC 03 A0 00 0F 22 16 3E DC 71 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 F6 1C 10 03 3A 3E 08 0E 1A 3A 01 58 8D 70 B3 29 09 00 00 03 00 03 D3 40 AE 12 01 00 00 00 CE 9E 31 FD 90 E3 6A 09 44 F6 E9 03 1E 83 1E 83 1E 83 72 00 55 01 56 02 7A FE C6 03 C6 00 7A 27 48 3E E4 71 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 F7 1C 10 03 3A 3E 08 0E 1A 3A 01 A0 52 D4 B5 29 09 00 00 03 00 03 70 DD AE 12 01 00 00 00 00 A5 89 F5 E0 F2 52 0B 5F F2 73 04 1E 83 1E 83 1E 83 00 FF D3 FE 72 01 78 FE C5 03 E0 00 34 37 53 3E EC 71 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 F8 1C 10 03 3A 3E 08 0E 1A 3A 01 D0 1B 38 B8 29 09 00 00 03 00 03 0E 7A AF 12 01 00 00 00 E3 AA 24 EE 35 FF 82 03 AB FA 73 00 1E 83 1E 83 1E 83 7D FD E6 FC 4A FD 5E FE 9C 03 BB 00 85 DB 55 3E F4 71 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 F9 1C 10 03 3A 3E 08 0E 1A 3A 01 00 E5 9B BA 29 09 00 00 03 00 03 AC 16 B0 12 01 00 00 00 E4 A9 4E EF 3A FD BE FA F3 06 2D FE 1E 83 1E 83 1E 83 64 FD 3C FD 6F FD 3B FE 73 03 78 00 F0 41 66 3E FC 71 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 FA 1C 10 03 3A 3E 08 0E 1A 3A 01 48 AA FF BC 29 09 00 00 03 00 03 49 B3 B0 12 01 00 00 00 F3 A3 BD F6 5A F1 30 F6 0A 0C D4 FD 1F 83 1F 83 1F 83 41 FE 9B FE 18 00 28 FE 5B 03 62 00 28 58 4D 3E 04 72 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 FB 1C 10 03 3A 3E 08 0E 1A 3A 01 78 73 63 BF 29 09 00 00 03 00 03 E7 4F B1 12 01 00 00 00 33 9E C4 FF B3 E4 18 F7 AF 07 E0 FC 1F 83 1F 83 1F 83 EC 00 43 00 AB 02 2F FE 5B 03 84 00 5C 20 D8 3D 0C 72 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 FC 1C 10 03 3A 3E 08 0E 1A 3A 01 A8 3C C7 C1 29 09 00 00 03 00 03 85 EC B1 12 01 00 00 00 F5 9B 09 02 CA DF 90 01 65 FE 21 00 1F 83 1F 83 1F 83 9E 02 B4 03 9E 03 53 FE 8A 03 B9 00 27 3E 3D 3E 14 72 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 FD 1C 10 03 3A 3E 08 0E 1A 3A 01 D8 05 2B C4 29 09 00 00 03 00 03 23 89 B2 12 01 00 00 00 6E 9E 9F FD D8 E6 EE 07 1B F7 24 03 1F 83 1F 83 1F 83 FB 00 CC 01 96 02 73 FE B6 03 EA 00 7C 4B 94 3E 1C 72 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 FE 1C 10 03 3A 3E 08 0E 1A 3A 01 20 CB 8E C6 29 09 00 00 03 00 03 C0 25 B3 12 01 00 00 00 B5 A3 5B F6 20 F5 D3 09 A2 F2 23 04 1F 83 1F 83 1F 83 61 FF 59 FF A0 01 7B FE BC 03 04 01 62 85 9A 3E 24 72 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 FF 1C 10 03 3A 3E 08 0E 1A 3A 01 50 94 F2 C8 29 09 00 00 03 00 03 5E C2 B3 12 01 00 00 00 B8 A9 3F EE A8 02 33 04 67 FA D2 00 1F 83 1F 83 1F 83 F4 FC 46 FD 37 FD 64 FE 9C 03 E2 00 07 B4 92 3E 2C 72 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 80 1D 10 03 3A 3E 08 0E 1A 3A 01 80 5D 56 CB 29 09 00 00 03 00 03 FC 5E B4 12 01 00 00 00 25 A9 7E EE 15 01 E9 FA 62 06 B2 FD 1F 83 1F 83 1F 83 60 FD 34 FD 59 FD 44 FE 72 03 A1 00 38 C0 97 3E 34 72 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 81 1D 10 03 3A 3E 08 0E 1A 3A 01 B0 26 BA CD 29 09 00 00 03 00 03 9A FB B4 12 01 00 00 00 10 A3 C0 F4 0E F5 54 F6 97 0B 99 FD 1F 83 1F 83 1F 83 41 FE C1 FE 09 00 31 FE 5C 03 88 00 E0 59 97 3E 3C 72 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 82 1D 10 03 3A 3E 08 0E 1A 3A 01 F8 EB 1D D0 29 09 00 00 03 00 03 37 98 B5 12 01 00 00 00 3E 9D B6 FC 24 E8 7C F7 54 07 14 FC 1F 83 1F 83 1F 83 5D 01 98 00 B3 02 3C FE 5E 03 A8 00 19 81 5D 3E 44 72 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 83 1D 10 03 3A 3E 08 0E 1A 3A 01 28 B5 81 D2 29 09 00 00 03 00 03 D5 34 B6 12 01 00 00 00 C4 9B 3B FD CA E4 BD 03 B9 FC E8 00 1F 83 1F 83 1F 83 46 02 ED 03 83 03 63 FE 98 03 DF 00 7D 19 72 3E 4C 72 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 84 1D 10 03 3A 3E 08 0E 1A 3A 01 58 7E E5 D4 29 09 00 00 03 00 03 73 D1 B6 12 01 00 00 00 44 9F 34 F8 13 ED 89 08 5C F6 0F 03 1F 83 1F 83 1F 83 A5 00 3D 01 43 02 7E FE B9 03 07 01 48 27 94 3E 54 72 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 85 1D 10 03 3A 3E 08 0E 1A 3A 01 A0 43 49 D7 29 09 00 00 03 00 03 10 6E B7 12 01 00 00 00 4B A5 70 F0 73 FB 5A 07 08 F6 42 02 1F 83 1F 83 1F 83 D4 FD FD FD 16 FF 78 FE B0 03 04 01 D4 D8 94 3E 5C 72 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 86 1D 10 03 3A 3E 08 0E 1A 3A 01 D0 0C AD D9 29 09 00 00 03 00 03 AE 0A B8 12 01 00 00 00 3B A8 E0 EE 20 FF 59 FE F1 03 3B FF 20 83 20 83 20 83 E6 FC 70 FC 30 FD 52 FE 87 03 CA 00 8E 08 93 3E 64 72 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 87 1D 10 03 3A 3E 08 0E 1A 3A 01 00 D6 10 DC 29 09 00 00 03 00 03 4C A7 B8 12 01 00 00 00 7E A3 53 F4 34 F4 25 F6 D4 0B 7B FC 20 83 20 83 20 83 B8 FD E9 FD 3C FF 36 FE 5F 03 A4 00 D8 07 93 3E 6C 72 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 88 1D 10 03 3A 3E 08 0E 1A 3A 01 30 9F 74 DE 29 09 00 00 03 00 03 EA 43 B9 12 01 00 00 00 8A 9D EF FD 5D E5 A4 F6 1B 09 3B FD 20 83 20 83 20 83 EA 00 3F 00 EC 02 35 FE 5D 03 BC 00 B2 CE 95 3E 74 72 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 89 1D 10 03 3A 3E 08 0E 1A 3A 01 78 64 D8 E0 29 09 00 00 03 00 03 87 E0 B9 12 01 00 00 00 E7 9A D2 00 CA DF 20 00 AB FF D3 FF 20 83 20 83 20 83 64 02 5D 03 1A 03 59 FE 86 03 ED 00 07 1C 88 3E 7C 72 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 8A 1D 10 03 3A 3E 08 0E 1A 3A 01 A8 2D 3C E3 29 09 00 00 03 00 03 25 7D BA 12 01 00 00 00 DA 9C CD FC 14 E5 80 07 9C F7 DA 01 20 83 20 83 20 83 67 01 EE 01 9F 02 7B FE B0 03 1B 01 24 A6 80 3E 84 72 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 8B 1D 10 03 3A 3E 08 0E 1A 3A 01 D8 F6 9F E5 29 09 00 00 03 00 03 C3 19 BB 12 01 00 00 00 96 A1 FE F4 59 F2 F2 09 64 F3 44 03 20 83 20 83 20 83 40 FF 9E FF 1B 01 82 FE BA 03 2E 01 60 CD 82 3E 8C 72 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 8C 1D 10 03 3A 3E 08 0E 1A 3A 01 08 C0 03 E8 29 09 00 00 03 00 03 61 B6 BB 12 01 00 00 00 0D A7 0E EE F3 FD B7 04 1A FC 25 01 20 83 20 83 20 83 F3 FC CF FD 6C FD 65 FE 9F 03 0A 01 25 0E 81 3E 94 72 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 8D 1D 10 03 3A 3E 08 0E 1A 3A 01 50 85 67 EA 29 09 00 00 03 00 03 FE 52 BC 12 01 00 00 00 BC A6 DB EF 5F FB 52 FA DB 07 4E FD 20 83 20 83 20 83 54 FD D5 FC B0 FD 41 FE 72 03 CE 00 4C 28 84 3E 9C 72 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 8E 1D 10 03 3A 3E 08 0E 1A 3A 01 80 4E CB EC 29 09 00 00 03 00 03 9C EF BC 12 01 00 00 00 18 A1 93 F7 FC ED 35 F6 8F 0C D9 FD 20 83 20 83 20 83 C1 FE F5 FE D0 00 2E FE 5D 03 BE 00 52 47 83 3E A4 72 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 8F 1D 10 03 3A 3E 08 0E 1A 3A 01 B0 17 2F EF 29 09 00 00 03 00 03 3A 8C BD 12 01 00 00 00 4C 9C 8C FE B5 E2 72 F9 36 04 0C FD 20 83 20 83 20 83 11 02 78 01 B3 02 45 FE 66 03 E5 00 9D 45 53 3E AC 72 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 90 1D 10 03 3A 3E 08 0E 1A 3A 01 E0 E0 92 F1 29 09 00 00 03 00 03 D8 28 BE 12 01 00 00 00 6B 9B BE FD 3C E2 42 04 6E FB 6B 00 20 83 20 83 20 83 35 02 18 03 FC 02 6A FE 99 03 13 01 66 25 54 3E B4 72 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 91 1D 10 03 3A 3E 08 0E 1A 3A 01 28 A6 F6 F3 29 09 00 00 03 00 03 75 C5 BE 12 01 00 00 00 75 9E B8 F7 E0 EA D9 07 78 F6 45 02 21 83 21 83 21 83 81 00 FB 00 E0 01 7F FE B4 03 31 01 90 7E 66 3E BC 72 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 92 1D 10 03 3A 3E 08 0E 1A 3A 01 58 6F 5A F6 29 09 00 00 03 00 03 13 62 BF 12 01 00 00 00 A1 A3 29 F0 43 F8 35 09 30 F4 BE 02 21 83 21 83 21 83 FE FE 45 FF B5 00 7D FE B5 03 3B 01 BF E5 69 3E C4 72 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 93 1D 10 03 3A 3E 08 0E 1A 3A 01 88 38 BE F8 29 09 00 00 03 00 03 B1 FE BF 12 01 00 00 00 F9 A8 15 EA 6D 02 42 03 63 FD 2A 00 21 83 21 83 21 83 2C FD 91 FD 66 FD 60 FE 98 03 12 01 02 3F 61 3E CC 72 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 94 1D 10 03 3A 3E 08 0E 1A 3A 01 D0 FD 21 FB 29 09 00 00 03 00 03 4E 9B C0 12 01 00 00 00 2D A8 D6 EB D1 FE 36 FB 2D 07 E1 FD 21 83 21 83 21 83 A9 FD A4 FD DE FD 42 FE 74 03 D8 00 86 2C 65 3E D4 72 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 95 1D 10 03 3A 3E 08 0E 1A 3A 01 00 C7 85 FD 29 09 00 00 03 00 03 EC 37 C1 12 01 00 00 00 D1 A2 E7 F2 8F F2 D7 F6 11 0C 02 FE 21 83 21 83 21 83 73 FE C5 FE 3A 00 2F FE 60 03 C1 00 23 91 5E 3E DC 72 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 96 1D 10 03 3A 3E 08 0E 1A 3A 01 30 90 E9 FF 29 09 00 00 03 00 03 8A D4 C1 12 01 00 00 00 A3 9D 37 FB B6 E5 E1 F7 CA 06 4D FC 21 83 21 83 21 83 BD 01 6A 00 BB 02 3D FE 5F 03 DF 00 50 90 D3 3D E4 72 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 97 1D 10 03 3A 3E 08 0E 1A 3A 01 60 59 4D 02 2A 09 00 00 03 00 03 28 71 C2 12 01 00 00 00 D9 9B 8F FB 97 E2 BB 02 06 FD 64 00 21 83 21 83 21 83 21 02 75 03 01 03 62 FE 90 03 0D 01 5C 40 1C 3E EC 72 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 98 1D 10 03 3A 3E 08 0E 1A 3A 01 A8 1E B1 04 2A 09 00 00 03 00 03 C5 0D C3 12 01 00 00 00 14 9E 8A F6 8B E9 BA 06 7B F7 DC 01 21 83 21 83 21 83 D6 00 45 01 CC 01 7A FE AD 03 2C 01 2C 46 4C 3E F4 72 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 99 1D 10 03 3A 3E 08 0E 1A 3A 01 D8 E7 14 07 2A 09 00 00 03 00 03 63 AA C3 12 01 00 00 00 53 A2 77 EF 3F F6 7B 08 17 F5 85 02 21 83 21 83 21 83 CB FE 5D FF 0A 00 78 FE B1 03 31 01 B8 99 50 3E FC 72 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 9A 1D 10 03 3A 3E 08 0E 1A 3A 01 08 B1 78 09 2A 09 00 00 03 00 03 01 47 C4 12 01 00 00 00 51 A6 C6 EB 7E FD 54 01 F6 00 F6 FF 21 83 21 83 21 83 1E FD 63 FD 7E FD 56 FE 93 03 02 01 AE 71 4F 3E 04 73 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 9B 1D 10 03 3A 3E 08 0E 1A 3A 01 38 7A DC 0B 2A 09 00 00 03 00 03 9F E3 C4 12 01 00 00 00 81 A4 FA EE 0A F7 01 FA 3E 08 99 FD 21 83 21 83 21 83 F7 FD 03 FE 88 FE 3C FE 71 03 D6 00 F7 68 4F 3E 0C 73 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 9C 1D 10 03 3A 3E 08 0E 1A 3A 01 80 3F 40 0E 2A 09 00 00 03 00 03 3C 80 C5 12 01 00 00 00 D5 9F D8 F6 51 EA 09 F8 97 0A 7E FE 21 83 21 83 21 83 B8 FF 8A FF 6C 01 32 FE 66 03 D3 00 58 A6 4E 3E 14 73 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 9D 1D 10 03 3A 3E 08 0E 1A 3A 01 B0 08 A4 10 2A 09 00 00 03 00 03 DA 1C C6 12 01 00 00 00 28 9C CE FB 98 E1 25 FB D9 02 D9 FD 22 83 22 83 22 83 FA 01 95 01 31 02 4C FE 71 03 F4 00 5C D3 FE 3D 1C 73 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 9E 1D 10 03 3A 3E 08 0E 1A 3A 01 E0 D1 07 13 2A 09 00 00 03 00 03 78 B9 C6 12 01 00 00 00 9B 9B F9 F9 3E E2 21 04 E7 FA 11 00 22 83 22 83 22 83 F7 01 74 02 5B 02 6E FE 9B 03 1A 01 14 19 00 3E 24 73 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 9F 1D 10 03 3A 3E 08 0E 1A 3A 01 10 9B 6B 15 2A 09 00 00 03 00 03 16 56 C7 12 01 00 00 00 FB 9D 6F F3 CF EA D7 06 C4 F6 67 01 22 83 22 83 22 83 3B 00 B1 00 05 01 7C FE AF 03 2E 01 75 27 0E 3E 2C 73 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 A0 1D 10 03 3A 3E 08 0E 1A 3A 01 58 60 CF 17 2A 09 00 00 03 00 03 B3 F2 C7 12 01 00 00 00 C0 A1 E9 EC 73 F5 83 05 D3 F9 8F 01 22 83 22 83 22 83 1D FE 0F FF 15 FF 6D FE AA 03 22 01 C1 EB 0B 3E 34 73 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 A1 1D 10 03 3A 3E 08 0E 1A 3A 01 88 29 33 1A 2A 09 00 00 03 00 03 51 8F C8 12 01 00 00 00 15 A4 4B EB 17 F9 A4 00 26 01 20 00 22 83 22 83 22 83 06 FE 0D FE 44 FE 53 FE 93 03 FE 00 B4 9B 0A 3E 3C 73 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 A2 1D 10 03 3A 3E 08 0E 1A 3A 01 B8 F2 96 1C 2A 09 00 00 03 00 03 EF 2B C9 12 01 00 00 00 B6 A2 1F EE 02 F4 8B FB B9 06 B4 FE 22 83 22 83 22 83 9D FE A4 FE F4 FE 41 FE 7B 03 DE 00 D0 4D 0B 3E 44 73 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 A3 1D 10 03 3A 3E 08 0E 1A 3A 01 E8 BB FA 1E 2A 09 00 00 03 00 03 8D C8 C9 12 01 00 00 00 AB 9F D7 F3 38 EB 97 FA FF 05 5C FE 22 83 22 83 22 83 94 00 A6 FF 06 01 42 FE 74 03 DD 00 02 34 06 3E 4C 73 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 A4 1D 10 03 3A 3E 08 0E 1A 3A 01 30 81 5E 21 2A 09 00 00 03 00 03 2A 65 CA 12 01 00 00 00 9E 9D E5 F5 10 E6 DF FE 0F 01 65 FF 22 83 22 83 22 83 58 01 B5 01 56 01 57 FE 87 03 EE 00 2C 71 81 3D 54 73 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 A5 1D 10 03 3A 3E 08 0E 1A 3A 01 60 4A C2 23 2A 09 00 00 03 00 03 C8 01 CB 12 01 00 00 00 16 9E 6E F4 3A E7 DA 02 00 FD 92 00 22 83 22 83 22 83 F3 00 15 01 CA 00 6A FE 9E 03 FD 00 8A B7 22 3D 5C 73 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 A6 1D 10 03 3A 3E 08 0E 1A 3A 01 90 13 26 26 2A 09 00 00 03 00 03 66 9E CB 12 01 00 00 00 8E 9F 3D F1 CB EB 24 03 68 FC B0 00 22 83 22 83 22 83 D1 FF E1 FF B1 FF 6F FE A3 03 FA 00 AB FF 1B 3D 64 73 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 A7 1D 10 03 3A 3E 08 0E 1A 3A 01 C0 DC 89 28 2A 09 00 00 03 00 03 04 3B CC 12 01 00 00 00 97 A0 4B EF 08 EE AB 00 A2 FF C7 FF 22 83 22 83 22 83 63 FF 49 FF 38 FF 67 FE 9A 03 E9 00 72 B8 1D 3D 6C 73 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 A8 1D 10 03 3A 3E 08 0E 1A 3A 01 08 A2 ED 2A 2A 09 00 00 03 00 03 A1 D7 CC 12 01 00 00 00 5D A0 57 EF BC EC D7 FE 67 01 69 FF 22 83 22 83 22 83 D9 FF A1 FF 99 FF 62 FE 92 03 DB 00 2C 49 1F 3D 74 73 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 A9 1D 10 03 3A 3E 08 0E 1A 3A 01 38 6B 51 2D 2A 09 00 00 03 00 03 3F 74 CD 12 01 00 00 00 9B 9F C0 EF D3 EA 27 FF A9 00 A8 FF 23 83 23 83 23 83 47 00 63 00 F0 FF 65 FE 94 03 D5 00 0C 2F 1B 3D 7C 73 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 AA 1D 10 03 3A 3E 08 0E 1A 3A 01 68 34 B5 2F 2A 09 00 00 03 00 03 DD 10 CE 12 01 00 00 00 6C 9F D0 EF 55 EA 5C 00 E7 FF 2B 00 23 83 23 83 23 83 5D 00 72 00 F3 FF 69 FE 9C 03 D2 00 C1 28 02 3D 84 73 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 AB 1D 10 03 3A 3E 08 0E 1A 3A 01 98 FD 18 32 2A 09 00 00 03 00 83 7B AD CE 12 01 00 00 00 BD 9F C3 EF 46 EB AB 00 68 FF 5D 00 23 83 23 83 23 83 32 00 14 00 CA FF 6D FE 9F 03 CE 00 FC 82 EA 3B 8C 73 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 AC 1D 10 03 3A 3E 08 0E 1A 3A 01 E0 C2 7C 34 2A 09 00 00 03 00 83 18 4A CF 12 01 00 00 00 C1 9F 52 F0 DA EC 22 00 D7 FF 32 00 23 83 23 83 23 83 EC FF DA FF A6 FF 6E FE 9E 03 C6 00 1D 5A 7A 3B 94 73 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 AD 1D 10 03 3A 3E 08 0E 1A 3A 01 10 8C E0 36 2A 09 00 00 03 00 83 B6 E6 CF 12 01 00 00 00 B4 9F DA F0 19 ED 93 FF 57 00 E3 FF 23 83 23 83 23 83 EF FF D5 FF BE FF 6E FE 9C 03 BF 00 3F D4 69 3B 9C 73 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 AE 1D 10 03 3A 3E 08 0E 1A 3A 01 40 55 44 39 2A 09 00 00 03 00 83 54 83 D0 12 01 00 00 00 D0 9F EC F0 3A EC 98 FF 54 00 C3 FF 23 83 23 83 23 83 0B 00 17 00 DB FF 6F FE 9C 03 BB 00 19 74 1E 3B A4 73 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 AF 1D 10 03 3A 3E 08 0E 1A 3A 01 70 1E A8 3B 2A 09 00 00 03 00 83 F2 1F D1 12 01 00 00 00 06 A0 F5 F0 83 EB ED FF 44 00 ED FF 23 83 23 83 23 83 1A 00 34 00 E9 FF 70 FE 9F 03 B7 00 C8 C1 0B 3B AC 73 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 B0 1D 10 03 3A 3E 08 0E 1A 3A 01 A0 E7 0B 3E 2A 09 00 00 03 00 83 90 BC D1 12 01 00 00 00 41 A0 23 F1 62 EB 29 00 0B 00 0F 00 23 83 23 83 23 83 22 00 21 00 ED FF 73 FE A2 03 B4 00 E9 73 97 3A B4 73 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 B1 1D 10 03 3A 3E 08 0E 1A 3A 01 E8 AC 6F 40 2A 09 00 00 03 00 83 2D 59 D2 12 01 00 00 00 78 A0 51 F1 A6 EB 37 00 F9 FF 1E 00 23 83 23 83 23 83 0F 00 09 00 D9 FF 74 FE A3 03 B0 00 89 99 4F 3A BC 73 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 B2 1D 10 03 3A 3E 08 0E 1A 3A 01 18 76 D3 42 2A 09 00 00 03 00 83 CB F5 D2 12 01 00 00 00 9F A0 87 F1 DE EB 2C 00 02 00 0F 00 23 83 23 83 23 83 11 00 03 00 E4 FF 75 FE A4 03 AC 00 9E AB 30 3A C4 73 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 B3 1D 10 03 3A 3E 08 0E 1A 3A 01 48 3F 37 45 2A 09 00 00 03 00 83 69 92 D3 12 01 00 00 00 EC A0 80 F1 2B EC 92 00 BE FF 23 00 23 83 23 83 23 83 0E 00 25 00 EE FF 77 FE A6 03 A8 00 0B 2C EA 39 CC 73 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 B4 1D 10 03 3A 3E 08 0E 1A 3A 01 78 08 9B 47 2A 09 00 00 03 00 83 07 2F D4 12 01 00 00 00 7A A1 4D F1 98 EC A2 00 D3 FF 13 00 24 83 24 83 24 83 01 00 00 00 DF FF 78 FE A7 03 A4 00 C8 82 B1 39 D4 73 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 B5 1D 10 03 3A 3E 08 0E 1A 3A 01 C0 CD FE 49 2A 09 00 00 03 00 83 A4 CB D4 12 01 00 00 00 D4 A1 48 F1 D7 EC 39 00 FE FF FE FF 24 83 24 83 24 83 0F 00 E0 FF E2 FF 79 FE A6 03 9F 00 46 62 B4 39 DC 73 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 B6 1D 10 03 3A 3E 08 0E 1A 3A 01 F0 96 62 4C 2A 09 00 00 03 00 83 42 68 D5 12 01 00 00 00 EC A1 3F F1 D3 EC F8 FF FB FF FC FF 24 83 24 83 24 83 0E 00 00 00 DF FF 7B FE A6 03 9A 00 01 0B A5 39 E4 73 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 B7 1D 10 03 3A 3E 08 0E 1A 3A 01 20 60 C6 4E 2A 09 00 00 03 00 83 E0 04 D6 12 01 00 00 00 EE A1 5E F1 BE EC D5 FF 28 00 0E 00 24 83 24 83 24 83 08 00 00 00 DC FF 7C FE A7 03 95 00 B5 AB 9B 39 EC 73 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 B8 1D 10 03 3A 3E 08 0E 1A 3A 01 50 29 2A 51 2A 09 00 00 03 00 83 7E A1 D6 12 01 00 00 00 D8 A1 AB F1 96 EC CC FF 34 00 0B 00 24 83 24 83 24 83 12 00 07 00 F3 FF 7D FE A8 03 91 00 85 00 9A 39 F4 73 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 B9 1D 10 03 3A 3E 08 0E 1A 3A 01 98 EE 8D 53 2A 09 00 00 03 00 83 1B 3E D7 12 01 00 00 00 D7 A1 D9 F1 7B EC F7 FF 0E 00 0B 00 24 83 24 83 24 83 11 00 13 00 F4 FF 7F FE A9 03 8E 00 1A 2F 8D 39 FC 73 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 BA 1D 10 03 3A 3E 08 0E 1A 3A 01 C8 B7 F1 55 2A 09 00 00 03 00 83 B9 DA D7 12 01 00 00 00 E8 A1 FB F1 78 EC 0B 00 15 00 0D 00 24 83 24 83 24 83 0D 00 0D 00 ED FF 81 FE AB 03 8B 00 DD 24 70 39 04 74 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 BB 1D 10 03 3A 3E 08 0E 1A 3A 01 F8 80 55 58 2A 09 00 00 03 00 83 57 77 D8 12 01 00 00 00 F5 A1 24 F2 81 EC 08 00 10 00 0C 00 24 83 24 83 24 83 0B 00 03 00 EB FF 82 FE AC 03 88 00 D9 AD 3D 39 0C 74 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 BC 1D 10 03 3A 3E 08 0E 1A 3A 01 28 4A B9 5A 2A 09 00 00 03 00 43 F5 13 D9 12 01 00 00 00 0D A2 46 F2 86 EC 21 00 01 00 0F 00 24 83 24 83 24 83 10 00 06 00 F8 FF 83 FE AD 03 85 00 03 4E DB 37 14 74 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 BD 1D 10 03 3A 3E 08 0E 1A 3A 01 70 0F 1D 5D 2A 09 00 00 03 00 43 92 B0 D9 12 01 00 00 00 33 A2 46 F2 A5 EC 29 00 F2 FF 0C 00 24 83 24 83 24 83 07 00 03 00 ED FF 85 FE AD 03 82 00 D4 2C C8 37 1C 74 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 BE 1D 10 03 3A 3E 08 0E 1A 3A 01 A0 D8 80 5F 2A 09 00 00 03 00 43 30 4D DA 12 01 00 00 00 52 A2 4C F2 C8 EC 13 00 FA FF 10 00 24 83 24 83 24 83 04 00 FB FF E9 FF 86 FE AE 03 7F 00 9F 1C D3 37 24 74 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 BF 1D 10 03 3A 3E 08 0E 1A 3A 01 D0 A1 E4 61 2A 09 00 00 03 00 83 CE E9 DA 12 01 00 00 00 56 A2 61 F2 DB EC F2 FF 09 00 0D 00 24 83 24 83 24 83 03 00 F8 FF EB FF 86 FE AE 03 7B 00 B9 5B 18 38 2C 74 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 C0 1D 10 03 3A 3E 08 0E 1A 3A 01 00 6B 48 64 2A 09 00 00 03 00 43 6C 86 DB 12 01 00 00 00 4D A2 79 F2 D0 EC E7 FF 10 00 07 00 25 83 25 83 25 83 06 00 03 00 EC FF 88 FE AE 03 78 00 F8 19 01 38 34 74 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 C1 1D 10 03 3A 3E 08 0E 1A 3A 01 48 30 AC 66 2A 09 00 00 03 00 43 09 23 DC 12 01 00 00 00 46 A2 93 F2 BE EC EA FF 19 00 03 00 25 83 25 83 25 83 00 00 03 00 E9 FF 88 FE AF 03 76 00 86 35 F2 37 3C 74 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 C2 1D 10 03 3A 3E 08 0E 1A 3A 01 78 F9 0F 69 2A 09 00 00 03 00 43 A7 BF DC 12 01 00 00 00 3E A2 C4 F2 9A EC D2 FF 4F 00 0A 00 25 83 25 83 25 83 E8 FF F8 FF C6 FF 88 FE B0 03 72 00 C5 E5 EC 37 44 74 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 C3 1D 10 03 3A 3E 08 0E 1A 3A 01 A8 C2 73 6B 2A 09 00 00 03 00 83 45 5C DD 12 01 00 00 00 07 A2 9E F3 E0 EB 2A FF 4F 01 22 00 25 83 25 83 25 83 D0 FF D3 FF C1 FF 86 FE AE 03 6C 00 C0 05 8F 38 4C 74 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 C4 1D 10 03 3A 3E 08 0E 1A 3A 01 D8 8B D7 6D 2A 09 00 00 03 00 83 E3 F8 DD 12 01 00 00 00 4D A1 41 F5 97 EA 7C FE EE 00 41 00 25 83 25 83 25 83 6C 00 E2 FF 63 00 89 FE AC 03 6E 00 7C FA C4 39 54 74 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 C5 1D 10 03 3A 3E 08 0E 1A 3A 01 20 51 3B 70 2A 09 00 00 03 00 83 80 95 DE 12 01 00 00 00 17 A0 DA F5 12 EB 1A FF FA FE D2 00 25 83 25 83 25 83 3E 00 61 00 21 00 91 FE B0 03 74 00 76 2F 3D 3A 5C 74 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 C6 1D 10 03 3A 3E 08 0E 1A 3A 01 50 1A 9F 72 2A 09 00 00 03 00 83 1E 32 DF 12 01 00 00 00 92 9F CF F5 CA EC 2A 00 04 FF 81 00 25 83 25 83 25 83 F9 FF 0D 00 D9 FF 92 FE B4 03 75 00 EA 09 A8 3A 64 74 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 C7 1D 10 03 3A 3E 08 0E 1A 3A 01 80 E3 02 75 2A 09 00 00 03 00 83 BC CE DF 12 01 00 00 00 8F 9F 70 F5 E2 ED 44 00 99 FF 02 00 25 83 25 83 25 83 D6 FF F5 FF C5 FF 93 FE B4 03 74 00 93 20 A8 3A 6C 74 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 C8 1D 10 03 3A 3E 08 0E 1A 3A 01 B0 AC 66 77 2A 09 00 00 03 00 83 5A 6B E0 12 01 00 00 00 B6 9F 42 F5 FF ED 0C 00 F5 FF F3 FF 25 83 25 83 25 83 F3 FF FC FF EF FF 94 FE B4 03 74 00 F2 55 A8 3A 74 74 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 C9 1D 10 03 3A 3E 08 0E 1A 3A 01 F8 71 CA 79 2A 09 00 00 03 00 83 F7 07 E1 12 01 00 00 00 C4 9F 47 F5 D1 ED F2 FF 30 00 04 00 25 83 25 83 25 83 FC FF 0C 00 F9 FF 95 FE B5 03 75 00 41 DA A7 3A 7C 74 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 CA 1D 10 03 3A 3E 08 0E 1A 3A 01 28 3B 2E 7C 2A 09 00 00 03 00 83 95 A4 E1 12 01 00 00 00 D1 9F 6E F5 B0 ED 01 00 15 00 16 00 25 83 25 83 25 83 0B 00 07 00 FF FF 98 FE B7 03 77 00 DA 94 88 3A 84 74 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 CB 1D 10 03 3A 3E 08 0E 1A 3A 01 58 04 92 7E 2A 09 00 00 03 00 83 33 41 E2 12 01 00 00 00 DE 9F 85 F5 B7 ED 11 00 F8 FF 18 00 25 83 25 83 25 83 10 00 03 00 00 00 9B FE B7 03 78 00 EA D4 59 3A 8C 74 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 CC 1D 10 03 3A 3E 08 0E 1A 3A 01 88 CD F5 80 2A 09 00 00 03 00 83 D1 DD E2 12 01 00 00 00 E8 9F 90 F5 D1 ED 0D 00 03 00 07 00 26 83 26 83 26 83 07 00 FA FF F8 FF 9D FE B8 03 79 00 BF ED 2B 38 94 74 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 CD 1D 10 03 3A 3E 08 0E 1A 3A 01 D0 92 59 83 2A 09 00 00 03 00 83 6E 7A E3 12 01 00 00 00 EE 9F 9A F5 D4 ED 01 00 04 00 FA FF 26 83 26 83 26 83 09 00 FA FF F4 FF A0 FE B8 03 7A 00 A6 7A 57 38 9C 74 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 CE 1D 10 03 3A 3E 08 0E 1A 3A 01 00 5C BD 85 2A 09 00 00 03 00 83 0C 17 E4 12 01 00 00 00 F2 9F 98 F5 C3 ED 00 00 08 00 F2 FF 26 83 26 83 26 83 04 00 06 00 F2 FF A2 FE B8 03 7A 00 29 B1 59 38 A4 74 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 CF 1D 10 03 3A 3E 08 0E 1A 3A 01 30 25 21 88 2A 09 00 00 03 00 83 AA B3 E4 12 01 00 00 00 FC 9F 94 F5 BB ED 05 00 FB FF F7 FF 26 83 26 83 26 83 0C 00 04 00 F9 FF A3 FE B9 03 7B 00 57 BD 57 38 AC 74 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 D0 1D 10 03 3A 3E 08 0E 1A 3A 01 60 EE 84 8A 2A 09 00 00 03 00 83 48 50 E5 12 01 00 00 00 02 A0 8C F5 C4 ED 08 00 F5 FF 0A 00 26 83 26 83 26 83 05 00 08 00 F5 FF A5 FE BA 03 7B 00 83 EA 00 38 B4 74 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 D1 1D 10 03 3A 3E 08 0E 1A 3A 01 90 B7 E8 8C 2A 09 00 00 03 00 83 E6 EC E5 12 01 00 00 00 05 A0 8D F5 D4 ED 01 00 F8 FF 01 00 26 83 26 83 26 83 03 00 FF FF F5 FF A7 FE BA 03 7C 00 1A C4 08 38 BC 74 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 D2 1D 10 03 3A 3E 08 0E 1A 3A 01 D8 7C 4C 8F 2A 09 00 00 03 00 83 83 89 E6 12 01 00 00 00 07 A0 8A F5 D5 ED F9 FF 08 00 F5 FF 26 83 26 83 26 83 00 00 FD FF F5 FF A8 FE BB 03 7C 00 55 51 0A 38 C4 74 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 D3 1D 10 03 3A 3E 08 0E 1A 3A 01 08 46 B0 91 2A 09 00 00 03 00 43 21 26 E7 12 01 00 00 00 09 A0 8B F5 C2 ED FB FF 06 00 F1 FF 26 83 26 83 26 83 06 00 00 00 FF FF AA FE BB 03 7D 00 CB CF 9E 37 CC 74 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 D4 1D 10 03 3A 3E 08 0E 1A 3A 01 38 0F 14 94 2A 09 00 00 03 00 43 BF C2 E7 12 01 00 00 00 11 A0 75 F5 B3 ED 16 00 F5 FF E0 FF 26 83 26 83 26 83 02 00 08 00 FF FF AB FE BB 03 7E 00 A6 9C 78 37 D4 74 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 D5 1D 10 03 3A 3E 08 0E 1A 3A 01 68 D8 77 96 2A 09 00 00 03 00 83 5D 5F E8 12 01 00 00 00 41 A0 37 F5 9A ED 58 00 E8 FF C8 FF 26 83 26 83 26 83 0D 00 15 00 06 00 AC FE BD 03 7F 00 13 BA 1A 38 DC 74 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 D6 1D 10 03 3A 3E 08 0E 1A 3A 01 B0 9D DB 98 2A 09 00 00 03 00 83 FA FB E8 12 01 00 00 00 96 A0 F1 F4 9B ED 54 00 12 00 DF FF 26 83 26 83 26 83 F6 FF 01 00 E9 FF AC FE BE 03 7E 00 78 26 8F 38 E4 74 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 D7 1D 10 03 3A 3E 08 0E 1A 3A 01 E0 66 3F 9B 2A 09 00 00 03 00 83 98 98 E9 12 01 00 00 00 C6 A0 01 F5 64 ED 0A 00 44 00 F2 FF 27 83 27 83 27 83 FC FF F4 FF F1 FF AC FE BD 03 7D 00 14 65 9A 38 EC 74 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 D8 1D 10 03 3A 3E 08 0E 1A 3A 01 10 30 A3 9D 2A 09 00 00 03 00 83 36 35 EA 12 01 00 00 00 C5 A0 2F F5 13 ED E0 FF 35 00 F4 FF 27 83 27 83 27 83 0B 00 FB FF FE FF AD FE BD 03 7C 00 67 C3 E9 38 F4 74 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 D9 1D 10 03 3A 3E 08 0E 1A 3A 01 40 F9 06 A0 2A 09 00 00 03 00 83 D4 D1 EA 12 01 00 00 00 BE A0 44 F5 F0 EC F9 FF 00 00 05 00 27 83 27 83 27 83 0D 00 06 00 02 00 AE FE BD 03 7C 00 ED 89 EB 38 FC 74 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 DA 1D 10 03 3A 3E 08 0E 1A 3A 01 88 BE 6A A2 2A 09 00 00 03 00 83 71 6E EB 12 01 00 00 00 C1 A0 3E F5 0D ED 10 00 DE FF 06 00 27 83 27 83 27 83 07 00 FF FF FD FF AF FE BD 03 7C 00 92 04 EC 38 04 75 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 DB 1D 10 03 3A 3E 08 0E 1A 3A 01 B8 87 CE A4 2A 09 00 00 03 00 83 0F 0B EC 12 01 00 00 00 C6 A0 1D F5 31 ED 07 00 E5 FF EB FF 27 83 27 83 27 83 FC FF F8 FF F0 FF AF FE BD 03 7C 00 61 0B E3 38 0C 75 00 00

View File

@@ -1,123 +0,0 @@
04 00 04 00 17 00 00 00 10 00 45 00 08 E9 1A 10 03 3A 3E 08 0E 1A 3A 01 B8 95 C7 C5 2C 07 00 00 03 00 40 EE FA 64 90 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 62 10 62 10 62 10 A3 FD 3D 03 20 04 A6 FD 36 03 23 00 73 3A BB 37 99 69 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 EA 1A 10 03 3A 3E 08 0E 1A 3A 01 60 4B 2B C8 2C 07 00 00 03 00 42 87 97 65 90 00 00 00 00 00 00 00 00 00 00 00 00 01 00 09 00 18 00 18 00 18 00 A7 FD 3A 03 22 04 A6 FD 36 03 23 00 58 50 AC 37 A1 69 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 EB 1A 10 03 3A 3E 08 0E 1A 3A 01 20 FD 8E CA 2C 07 00 00 03 00 42 1F 34 66 90 00 00 00 00 00 00 00 00 00 00 FE FF 01 00 09 00 18 00 18 00 18 00 A7 FD 3C 03 25 04 A6 FD 37 03 23 00 3C 70 7A 37 A9 69 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 EC 1A 10 03 3A 3E 08 0E 1A 3A 01 C8 B2 F2 CC 2C 07 00 00 03 00 43 B8 D0 66 90 00 00 00 00 1D A8 9D E4 66 E3 FF FF 04 00 07 00 18 00 18 00 18 00 00 00 00 00 00 00 A6 FD 37 03 23 00 57 9B 51 37 B1 69 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 ED 1A 10 03 3A 3E 08 0E 1A 3A 01 70 68 56 CF 2C 07 00 00 03 00 43 51 6D 67 90 00 00 00 00 1C A8 A3 E4 69 E3 00 00 FF FF 01 00 18 00 18 00 18 00 03 00 FF FF 00 00 A6 FD 37 03 23 00 68 8E D6 36 B9 69 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 EE 1A 10 03 3A 3E 08 0E 1A 3A 01 18 1E BA D1 2C 07 00 00 03 00 43 EA 09 68 90 00 00 00 00 1E A8 A0 E4 6F E3 05 00 F8 FF 00 00 18 00 18 00 18 00 05 00 FF FF FF FF A6 FD 37 03 23 00 BB 1C E4 36 C1 69 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 EF 1A 10 03 3A 3E 08 0E 1A 3A 01 C0 D3 1D D4 2C 07 00 00 03 00 43 83 A6 68 90 00 00 00 00 1A A8 AA E4 89 E3 FF FF F6 FF 02 00 18 00 18 00 18 00 00 00 FE FF FE FF A6 FD 37 03 23 00 2D 37 EB 36 C9 69 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 F0 1A 10 03 3A 3E 08 0E 1A 3A 01 80 85 81 D6 2C 07 00 00 03 00 43 1B 43 69 90 00 00 00 00 15 A8 AA E4 98 E3 FC FF F3 FF 04 00 18 00 18 00 18 00 00 00 FF FF 00 00 A7 FD 38 03 23 00 5B 7B E1 36 D1 69 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 F1 1A 10 03 3A 3E 08 0E 1A 3A 01 28 3B E5 D8 2C 07 00 00 03 00 43 B4 DF 69 90 00 00 00 00 15 A8 A2 E4 A4 E3 02 00 F1 FF 0E 00 18 00 18 00 18 00 FE FF 02 00 00 00 A7 FD 38 03 23 00 D4 7D FB 36 D9 69 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 F2 1A 10 03 3A 3E 08 0E 1A 3A 01 D0 F0 48 DB 2C 07 00 00 03 00 43 4D 7C 6A 90 00 00 00 00 14 A8 9C E4 B7 E3 FF FF EC FF 0A 00 18 00 18 00 18 00 01 00 00 00 02 00 A7 FD 38 03 23 00 49 81 05 37 E1 69 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 F3 1A 10 03 3A 3E 08 0E 1A 3A 01 78 A6 AC DD 2C 07 00 00 03 00 43 E6 18 6B 90 00 00 00 00 11 A8 93 E4 D4 E3 07 00 E5 FF 0B 00 18 00 18 00 18 00 04 00 FE FF 04 00 A7 FD 38 03 23 00 02 C7 11 37 E9 69 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 F4 1A 10 03 3A 3E 08 0E 1A 3A 01 20 5C 10 E0 2C 07 00 00 03 00 43 7F B5 6B 90 00 00 00 00 0D A8 7D E4 01 E4 14 00 D7 FF 15 00 19 00 19 00 19 00 01 00 09 00 00 00 A7 FD 39 03 23 00 89 6A 2D 37 F1 69 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 F5 1A 10 03 3A 3E 08 0E 1A 3A 01 C8 11 74 E2 2C 07 00 00 03 00 83 18 52 6C 90 00 00 00 00 16 A8 72 E4 46 E4 39 00 E4 FF 34 00 19 00 19 00 19 00 FC FF 15 00 02 00 A7 FD 3B 03 23 00 FC 50 79 38 F9 69 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 F6 1A 10 03 3A 3E 08 0E 1A 3A 01 88 C3 D7 E4 2C 07 00 00 03 00 83 B0 EE 6C 90 00 00 00 00 37 A8 6B E4 BC E4 5E 00 BB FF 44 00 19 00 19 00 19 00 0A 00 06 00 0D 00 A8 FD 3C 03 24 00 09 E4 93 38 01 6A 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 F7 1A 10 03 3A 3E 08 0E 1A 3A 01 30 79 3B E7 2C 07 00 00 03 00 83 49 8B 6D 90 00 00 00 00 64 A8 39 E4 5E E5 75 00 94 FF 41 00 19 00 19 00 19 00 0C 00 06 00 0B 00 AA FD 3D 03 24 00 8A E8 96 38 09 6A 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 F8 1A 10 03 3A 3E 08 0E 1A 3A 01 D8 2E 9F E9 2C 07 00 00 03 00 83 E2 27 6E 90 00 00 00 00 99 A8 DB E3 37 E6 AA 00 6A FF 41 00 19 00 19 00 19 00 0D 00 0F 00 10 00 AC FD 3E 03 25 00 18 A5 98 38 11 6A 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 F9 1A 10 03 3A 3E 08 0E 1A 3A 01 80 E4 02 EC 2C 07 00 00 03 00 83 7B C4 6E 90 00 00 00 00 FA A8 37 E3 60 E7 0B 01 02 FF 4E 00 19 00 19 00 19 00 20 00 28 00 28 00 AE FD 41 03 26 00 F8 CE C6 38 19 6A 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 FA 1A 10 03 3A 3E 08 0E 1A 3A 01 28 9A 66 EE 2C 07 00 00 03 00 83 14 61 6F 90 00 00 00 00 A3 A9 38 E2 2D E9 9C 01 9E FE 72 00 19 00 19 00 19 00 20 00 31 00 38 00 B1 FD 45 03 28 00 4A 24 52 39 21 6A 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 FB 1A 10 03 3A 3E 08 0E 1A 3A 01 D0 4F CA F0 2C 07 00 00 03 00 83 AD FD 6F 90 00 00 00 00 BA AA C0 E0 C0 EB 3D 02 05 FE A6 00 19 00 19 00 19 00 0F 00 2C 00 2F 00 B5 FD 49 03 2A 00 27 4D 92 39 29 6A 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 FC 1A 10 03 3A 3E 08 0E 1A 3A 01 78 05 2E F3 2C 07 00 00 03 00 83 46 9A 70 90 00 00 00 00 32 AC 27 DF DF EE 5B 02 05 FE CB 00 19 00 19 00 19 00 EC FF F6 FF 0C 00 B6 FD 4A 03 29 00 EC 15 9C 39 31 6A 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 FD 1A 10 03 3A 3E 08 0E 1A 3A 01 38 B7 91 F5 2C 07 00 00 03 00 83 DE 36 71 90 00 00 00 00 A3 AD C2 DD ED F1 07 02 3D FE C6 00 19 00 19 00 19 00 D6 FF C8 FF F2 FF B7 FD 4A 03 24 00 A7 8C AD 39 39 6A 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 FE 1A 10 03 3A 3E 08 0E 1A 3A 01 E0 6C F5 F7 2C 07 00 00 03 00 83 77 D3 71 90 00 00 00 00 C1 AE B4 DC 6B F4 55 01 C2 FE 9F 00 19 00 19 00 19 00 BE FF AF FF CA FF B7 FD 47 03 1E 00 00 2E ED 39 41 6A 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 FF 1A 10 03 3A 3E 08 0E 1A 3A 01 88 22 59 FA 2C 07 00 00 03 00 83 10 70 72 90 00 00 00 00 4E AF 3F DC E9 F5 76 00 86 FF 65 00 19 00 19 00 19 00 C1 FF A5 FF C7 FF B7 FD 44 03 15 00 C4 E2 1E 3A 49 6A 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 80 1B 10 03 3A 3E 08 0E 1A 3A 01 30 D8 BC FC 2C 07 00 00 03 00 83 A9 0C 73 90 00 00 00 00 3C AF 44 DC 5E F6 B1 FF 0A 00 30 00 1A 00 1A 00 1A 00 CE FF BA FF D4 FF B9 FD 43 03 0E 00 28 3A 3A 3A 51 6A 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 81 1B 10 03 3A 3E 08 0E 1A 3A 01 D8 8D 20 FF 2C 07 00 00 03 00 83 42 A9 73 90 00 00 00 00 B3 AE B7 DC 00 F6 35 FF 99 00 0A 00 1A 00 1A 00 1A 00 D0 FF D3 FF DA FF BA FD 43 03 08 00 36 11 28 3A 59 6A 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 82 1B 10 03 3A 3E 08 0E 1A 3A 01 80 43 84 01 2D 07 00 00 03 00 83 DB 45 74 90 00 00 00 00 03 AE 76 DD E0 F4 DF FE FC 00 EA FF 1A 00 1A 00 1A 00 DA FF D9 FF E9 FF BC FD 43 03 03 00 7B 0A 19 3A 61 6A 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 83 1B 10 03 3A 3E 08 0E 1A 3A 01 28 F9 E7 03 2D 07 00 00 03 00 83 74 E2 74 90 00 00 00 00 37 AD 75 DE 27 F3 90 FE 51 01 D0 FF 1A 00 1A 00 1A 00 E6 FF E2 FF F9 FF BF FD 44 03 00 00 EC 66 1B 3A 69 6A 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 84 1B 10 03 3A 3E 08 0E 1A 3A 01 E8 AA 4B 06 2D 07 00 00 03 00 83 0C 7F 75 90 00 00 00 00 31 AC BB DF 1A F1 4C FE 7C 01 BF FF 1A 00 1A 00 1A 00 F2 FF E5 FF 02 00 C1 FD 45 03 00 00 82 87 06 3A 71 6A 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 85 1B 10 03 3A 3E 08 0E 1A 3A 01 90 60 AF 08 2D 07 00 00 03 00 83 A5 1B 76 90 00 00 00 00 F9 AA 2A E1 DE EE F5 FD D3 01 A5 FF 1A 00 1A 00 1A 00 D8 FF D2 FF EC FF C2 FD 46 03 FF FF E0 E9 D4 39 79 6A 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 86 1B 10 03 3A 3E 08 0E 1A 3A 01 38 16 13 0B 2D 07 00 00 03 00 43 3E B8 76 90 00 00 00 00 76 A9 18 E3 1E EC 87 FD 21 02 B9 FF 1A 00 1A 00 1A 00 E2 FF D5 FF FE FF C3 FD 46 03 FF FF 6C B9 6C 39 81 6A 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 87 1B 10 03 3A 3E 08 0E 1A 3A 01 E0 CB 76 0D 2D 07 00 00 03 00 43 D7 54 77 90 00 00 00 00 A0 A7 7E E5 09 E9 DE FC DE 02 BF FF 1A 00 1A 00 1A 00 AD FF C2 FF D8 FF C1 FD 44 03 FF FF CD DA 54 39 89 6A 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 88 1B 10 03 3A 3E 08 0E 1A 3A 01 88 81 DA 0F 2D 07 00 00 03 00 43 70 F1 77 90 00 00 00 00 9D A5 C9 E8 1E E5 6A FC 51 03 BE FF 1A 00 1A 00 1A 00 DB FF CB FF 17 00 C0 FD 42 03 02 00 5A E4 79 39 91 6A 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 89 1B 10 03 3A 3E 08 0E 1A 3A 01 30 37 3E 12 2D 07 00 00 03 00 83 09 8E 78 90 00 00 00 00 9A A3 60 EC 0E E1 52 FC 63 03 D3 FF 1A 00 1A 00 1A 00 EB FF FB FF 2F 00 C0 FD 42 03 09 00 07 D8 7E 39 99 6A 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 8A 1B 10 03 3A 3E 08 0E 1A 3A 01 D8 EC A1 14 2D 07 00 00 03 00 83 A2 2A 79 90 00 00 00 00 ED A1 11 F0 44 DD 9E FC 44 03 F3 FF 1A 00 1A 00 1A 00 F6 FF F8 FF 39 00 C1 FD 43 03 12 00 E1 14 84 39 A1 6A 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 8B 1B 10 03 3A 3E 08 0E 1A 3A 01 98 9E 05 17 2D 07 00 00 03 00 83 3A C7 79 90 00 00 00 00 90 A0 B6 F3 B6 D9 C8 FC 0C 03 02 00 1A 00 1A 00 1A 00 0D 00 FC FF 4B 00 C1 FD 43 03 1D 00 8A 01 66 39 A9 6A 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 8C 1B 10 03 3A 3E 08 0E 1A 3A 01 40 54 69 19 2D 07 00 00 03 00 83 D3 63 7A 90 00 00 00 00 71 9F 22 F7 98 D6 14 FD F1 02 10 00 1B 00 1B 00 1B 00 F5 FF 05 00 28 00 C1 FD 43 03 27 00 2E A6 59 39 B1 6A 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 8D 1B 10 03 3A 3E 08 0E 1A 3A 01 E8 09 CD 1B 2D 07 00 00 03 00 83 6C 00 7B 90 00 00 00 00 AF 9E 7F FA 86 D3 45 FD D1 02 00 00 1B 00 1B 00 1B 00 21 00 12 00 52 00 C1 FD 43 03 32 00 2F 73 32 39 B9 6A 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 8E 1B 10 03 3A 3E 08 0E 1A 3A 01 90 BF 30 1E 2D 07 00 00 03 00 83 05 9D 7B 90 00 00 00 00 18 9E 59 FD 18 D1 E0 FD 0D 02 16 00 1B 00 1B 00 1B 00 35 00 3D 00 4F 00 C3 FD 45 03 3F 00 7D 5F 85 39 C1 6A 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 8F 1B 10 03 3A 3E 08 0E 1A 3A 01 38 75 94 20 2D 07 00 00 03 00 83 9E 39 7C 90 00 00 00 00 D1 9D 7A FF 5D CF C4 FE 7E 01 1C 00 1B 00 1B 00 1B 00 44 00 5A 00 4D 00 C5 FD 48 03 4B 00 54 52 17 3A C9 6A 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 90 1B 10 03 3A 3E 08 0E 1A 3A 01 E0 2A F8 22 2D 07 00 00 03 00 83 37 D6 7C 90 00 00 00 00 D2 9D B6 00 6B CE AC FF A7 00 3B 00 1B 00 1B 00 1B 00 4C 00 69 00 4B 00 C8 FD 4C 03 56 00 B7 1F 85 3A D1 6A 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 91 1B 10 03 3A 3E 08 0E 1A 3A 01 88 E0 5B 25 2D 07 00 00 03 00 83 D0 72 7D 90 00 00 00 00 00 9E 17 01 69 CE 87 00 BC FF 62 00 1B 00 1B 00 1B 00 5A 00 65 00 4F 00 CB FD 50 03 60 00 EE 97 BD 3A D9 6A 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 92 1B 10 03 3A 3E 08 0E 1A 3A 01 30 96 BF 27 2D 07 00 00 03 00 83 69 0F 7E 90 00 00 00 00 46 9E 9C 00 6E CF 56 01 DB FE 89 00 1B 00 1B 00 1B 00 48 00 54 00 40 00 CF FD 54 03 69 00 1C 76 EA 3A E1 6A 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 93 1B 10 03 3A 3E 08 0E 1A 3A 01 F0 47 23 2A 2D 07 00 00 03 00 83 01 AC 7E 90 00 00 00 00 BF 9E 69 FF 3A D1 0E 02 4B FE A6 00 1B 00 1B 00 1B 00 36 00 45 00 3A 00 D1 FD 57 03 70 00 2A E1 05 3B E9 6A 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 94 1B 10 03 3A 3E 08 0E 1A 3A 01 98 FD 86 2C 2D 07 00 00 03 00 83 9A 48 7F 90 00 00 00 00 74 9F 8A FD BC D3 A5 02 83 FD AC 00 1B 00 1B 00 1B 00 3B 00 2A 00 5B 00 D4 FD 59 03 77 00 20 AB 08 3B F1 6A 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 95 1B 10 03 3A 3E 08 0E 1A 3A 01 40 B3 EA 2E 2D 07 00 00 03 00 83 33 E5 7F 90 00 00 00 00 54 A0 D0 FA 1E D7 33 03 BE FC A7 00 1B 00 1B 00 1B 00 2E 00 1D 00 58 00 D8 FD 5B 03 7D 00 03 A8 EE 3A F9 6A 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 96 1B 10 03 3A 3E 08 0E 1A 3A 01 E8 68 4E 31 2D 07 00 00 03 00 83 CC 81 80 90 00 00 00 00 8B A1 54 F7 3E DB B5 03 25 FC 91 00 1B 00 1B 00 1B 00 17 00 0B 00 4E 00 DC FD 5D 03 81 00 A3 89 B7 3A 01 6B 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 97 1B 10 03 3A 3E 08 0E 1A 3A 01 90 1E B2 33 2D 07 00 00 03 00 83 65 1E 81 90 00 00 00 00 34 A3 4F F3 DD DF 0C 04 D6 FB 8F 00 1B 00 1B 00 1B 00 07 00 04 00 4E 00 DF FD 5F 03 83 00 ED E5 78 3A 09 6B 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 98 1B 10 03 3A 3E 08 0E 1A 3A 01 38 D4 15 36 2D 07 00 00 03 00 83 FE BA 81 90 00 00 00 00 45 A5 08 EF FA E4 39 04 76 FB A8 00 1C 00 1C 00 1C 00 FC FF F2 FF 58 00 E3 FD 61 03 84 00 99 24 16 3A 11 6B 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 99 1B 10 03 3A 3E 08 0E 1A 3A 01 E0 89 79 38 2D 07 00 00 03 00 83 97 57 82 90 00 00 00 00 AD A7 AA EA 7D EA 38 04 5E FB B4 00 1C 00 1C 00 1C 00 E9 FF E5 FF 5B 00 E5 FD 62 03 82 00 8E A3 92 39 19 6B 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 9A 1B 10 03 3A 3E 08 0E 1A 3A 01 88 3F DD 3A 2D 07 00 00 03 00 83 30 F4 82 90 00 00 00 00 61 AA 63 E6 22 F0 24 04 78 FB BC 00 1C 00 1C 00 1C 00 D3 FF DE FF 3F 00 E8 FD 63 03 7E 00 5C 8E 08 39 21 6B 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 9B 1B 10 03 3A 3E 08 0E 1A 3A 01 30 F5 40 3D 2D 07 00 00 03 00 83 C9 90 83 90 00 00 00 00 48 AD 74 E2 86 F5 C9 03 D7 FB 8B 00 1C 00 1C 00 1C 00 C9 FF BC FF 2E 00 EA FD 62 03 76 00 B2 12 47 39 29 6B 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 9C 1B 10 03 3A 3E 08 0E 1A 3A 01 F0 A6 A4 3F 2D 07 00 00 03 00 83 61 2D 84 90 00 00 00 00 2A B0 DA DE 43 FA 4E 03 4F FC 4E 00 1C 00 1C 00 1C 00 C1 FF B1 FF 1C 00 EB FD 61 03 6C 00 D1 B2 BA 39 31 6B 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 9D 1B 10 03 3A 3E 08 0E 1A 3A 01 98 5C 08 42 2D 07 00 00 03 00 83 FA C9 84 90 00 00 00 00 D8 B2 B0 DB 26 FE CD 02 FC FC 22 00 1C 00 1C 00 1C 00 B7 FF CB FF FF FF EC FD 60 03 60 00 95 BB E8 39 39 6B 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 9E 1B 10 03 3A 3E 08 0E 1A 3A 01 40 12 6C 44 2D 07 00 00 03 00 83 93 66 85 90 00 00 00 00 45 B5 2F D9 45 01 4D 02 AD FD 17 00 1C 00 1C 00 1C 00 B4 FF CE FF E9 FF EC FD 5F 03 51 00 CA AA EB 39 41 6B 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 9F 1B 10 03 3A 3E 08 0E 1A 3A 01 E8 C7 CF 46 2D 07 00 00 03 00 83 2C 03 86 90 00 00 00 00 40 B7 93 D7 A2 03 D6 01 A1 FE 38 00 1C 00 1C 00 1C 00 AC FF D3 FF E0 FF EB FD 5F 03 41 00 73 6A F0 39 49 6B 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 A0 1B 10 03 3A 3E 08 0E 1A 3A 01 90 7D 33 49 2D 07 00 00 03 00 83 C5 9F 86 90 00 00 00 00 BE B8 F5 D6 45 05 43 01 70 FF 51 00 1C 00 1C 00 1C 00 BF FF B8 FF EA FF EB FD 5E 03 31 00 A6 3A FD 39 51 6B 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 A1 1B 10 03 3A 3E 08 0E 1A 3A 01 38 33 97 4B 2D 07 00 00 03 00 83 5E 3C 87 90 00 00 00 00 6D B9 ED D6 06 06 48 00 1B 00 2C 00 1C 00 1C 00 1C 00 C8 FF AA FF DA FF ED FD 5B 03 21 00 E0 A0 28 3A 59 6B 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 A2 1B 10 03 3A 3E 08 0E 1A 3A 01 E0 E8 FA 4D 2D 07 00 00 03 00 83 F7 D8 87 90 00 00 00 00 1C B9 69 D7 B1 05 32 FF C2 00 05 00 1C 00 1C 00 1C 00 D6 FF AA FF CA FF EF FD 58 03 10 00 39 FF 40 3A 61 6B 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 A3 1B 10 03 3A 3E 08 0E 1A 3A 01 88 9E 5E 50 2D 07 00 00 03 00 83 90 75 88 90 00 00 00 00 CD B7 61 D8 59 04 54 FE 6B 01 ED FF 1C 00 1C 00 1C 00 C4 FF C4 FF C3 FF F1 FD 57 03 01 00 9C 7B 32 3A 69 6B 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 A4 1B 10 03 3A 3E 08 0E 1A 3A 01 30 54 C2 52 2D 07 00 00 03 00 83 29 12 89 90 00 00 00 00 C0 B5 00 DA 14 02 6C FD 31 02 BE FF 1D 00 1D 00 1D 00 C5 FF 9C FF C6 FF F2 FD 55 03 F4 FF 8C 81 52 3A 71 6B 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 A5 1B 10 03 3A 3E 08 0E 1A 3A 01 F0 05 26 55 2D 07 00 00 03 00 83 C1 AE 89 90 00 00 00 00 D9 B2 0D DC 8F FE 4A FC CF 02 60 FF 1D 00 1D 00 1D 00 CB FF 98 FF D7 FF F4 FD 52 03 EA FF AE DB B9 3A 79 6B 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 A6 1B 10 03 3A 3E 08 0E 1A 3A 01 98 BB 89 57 2D 07 00 00 03 00 83 5A 4B 8A 90 00 00 00 00 43 AF BA DE F9 F9 6A FB A9 03 56 FF 1D 00 1D 00 1D 00 B2 FF 9F FF F9 FF F4 FD 50 03 E4 FF E9 C0 DE 3A 81 6B 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 A7 1B 10 03 3A 3E 08 0E 1A 3A 01 40 71 ED 59 2D 07 00 00 03 00 83 F3 E7 8A 90 00 00 00 00 49 AB 0A E2 8C F4 D7 FA C8 03 28 FF 1D 00 1D 00 1D 00 E1 FF B8 FF 41 00 F6 FD 4F 03 E6 FF 44 A3 04 3B 89 6B 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 A8 1B 10 03 3A 3E 08 0E 1A 3A 01 E8 26 51 5C 2D 07 00 00 03 00 83 8C 84 8B 90 00 00 00 00 79 A7 8A E5 0B EF D8 FA 17 04 4C FF 1D 00 1D 00 1D 00 BA FF D9 FF 35 00 F5 FD 50 03 ED FF DC AF EB 3A 91 6B 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 A9 1B 10 03 3A 3E 08 0E 1A 3A 01 90 DC B4 5E 2D 07 00 00 03 00 83 25 21 8C 90 00 00 00 00 16 A4 A5 E9 60 E9 EF FA 42 04 73 FF 1D 00 1D 00 1D 00 DB FF E7 FF 67 00 F4 FD 51 03 F7 FF E8 66 D6 3A 99 6B 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 AA 1B 10 03 3A 3E 08 0E 1A 3A 01 38 92 18 61 2D 07 00 00 03 00 83 BE BD 8C 90 00 00 00 00 48 A1 C9 ED 1E E4 67 FB FC 03 94 FF 1D 00 1D 00 1D 00 FB FF 0A 00 72 00 F4 FD 53 03 05 00 72 5D DD 3A A1 6B 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 AB 1B 10 03 3A 3E 08 0E 1A 3A 01 E0 47 7C 63 2D 07 00 00 03 00 83 57 5A 8D 90 00 00 00 00 3A 9F A3 F1 99 DF 3F FC A5 03 CF FF 1D 00 1D 00 1D 00 FB FF 37 00 54 00 F4 FD 56 03 14 00 0A 6C CB 3A A9 6B 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 AC 1B 10 03 3A 3E 08 0E 1A 3A 01 88 FD DF 65 2D 07 00 00 03 00 83 F0 F6 8D 90 00 00 00 00 FB 9D 55 F5 CC DB 2B FD 32 03 1F 00 1D 00 1D 00 1D 00 12 00 22 00 51 00 F4 FD 59 03 24 00 C4 5B E7 3A B1 6B 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 AD 1B 10 03 3A 3E 08 0E 1A 3A 01 30 B3 43 68 2D 07 00 00 03 00 83 89 93 8E 90 00 00 00 00 1D 9D A6 F8 86 D8 27 FD 07 03 EC FF 1D 00 1D 00 1D 00 09 00 F3 FF 41 00 F3 FD 58 03 32 00 AE D5 A4 3A B9 6B 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 AE 1B 10 03 3A 3E 08 0E 1A 3A 01 D8 68 A7 6A 2D 07 00 00 03 00 83 22 30 8F 90 00 00 00 00 50 9C B2 FB 54 D5 F6 FC DD 02 AF FF 1D 00 1D 00 1D 00 10 00 E3 FF 27 00 F2 FD 55 03 3F 00 6B D7 9A 3A C1 6B 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 AF 1B 10 03 3A 3E 08 0E 1A 3A 01 98 1A 0B 6D 2D 07 00 00 03 00 83 BA CC 8F 90 00 00 00 00 8A 9B AF FE 2D D2 F1 FC D2 02 C0 FF 1D 00 1D 00 1D 00 0F 00 0D 00 3C 00 F0 FD 52 03 4C 00 E6 A0 9C 3A C9 6B 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 B0 1B 10 03 3A 3E 08 0E 1A 3A 01 40 D0 6E 6F 2D 07 00 00 03 00 83 53 69 90 90 00 00 00 00 ED 9A 6F 01 6B CF 5F FD 49 02 C3 FF 1E 00 1E 00 1E 00 31 00 42 00 5C 00 EE FD 51 03 5C 00 D0 3E B1 3A D1 6B 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 B1 1B 10 03 3A 3E 08 0E 1A 3A 01 E8 85 D2 71 2D 07 00 00 03 00 03 EC 05 91 90 00 00 00 00 8F 9A 5E 03 8F CD B2 FE 1E 01 F2 FF 1E 00 1E 00 1E 00 60 00 96 00 7B 00 EE FD 54 03 6D 00 1D 67 11 3B D9 6B 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 B2 1B 10 03 3A 3E 08 0E 1A 3A 01 90 3B 36 74 2D 07 00 00 03 00 03 85 A2 91 90 00 00 00 00 96 9A 10 04 01 CD 53 00 27 00 3D 00 1E 00 1E 00 1E 00 5C 00 AE 00 66 00 EE FD 5A 03 7D 00 10 F7 6C 3B E1 6B 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 B3 1B 10 03 3A 3E 08 0E 1A 3A 01 38 F1 99 76 2D 07 00 00 03 00 83 1E 3F 92 90 00 00 00 00 0F 9B C4 03 A3 CD CD 01 0B FF B4 00 1E 00 1E 00 1E 00 5F 00 91 00 6F 00 EF FD 5F 03 8C 00 ED A9 B2 3B E9 6B 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 B4 1B 10 03 3A 3E 08 0E 1A 3A 01 E0 A6 FD 78 2D 07 00 00 03 00 83 B7 DB 92 90 00 00 00 00 CF 9B 7E 02 8B CF E7 02 04 FE E9 00 1E 00 1E 00 1E 00 54 00 74 00 7D 00 F1 FD 62 03 99 00 E2 F3 D4 3B F1 6B 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 B5 1B 10 03 3A 3E 08 0E 1A 3A 01 88 5C 61 7B 2D 07 00 00 03 00 83 50 78 93 90 00 00 00 00 E2 9C 24 00 C4 D2 0F 04 C0 FC 0F 01 1E 00 1E 00 1E 00 4D 00 56 00 A0 00 F3 FD 66 03 A6 00 84 96 F5 3B F9 6B 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 B6 1B 10 03 3A 3E 08 0E 1A 3A 01 30 12 C5 7D 2D 07 00 00 03 00 83 E9 14 94 90 00 00 00 00 6D 9E 8B FC 6F D7 33 05 8D FB 40 01 1E 00 1E 00 1E 00 27 00 4E 00 A7 00 F6 FD 69 03 B1 00 F1 09 09 3C 01 6C 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 B7 1B 10 03 3A 3E 08 0E 1A 3A 01 D8 C7 28 80 2D 07 00 00 03 00 83 82 B1 94 90 00 00 00 00 D5 A0 2E F8 5D DD 0A 06 1E FB 7D 01 1E 00 1E 00 1E 00 E5 FF 10 00 97 00 F7 FD 6C 03 B8 00 D8 F3 06 3C 09 6C 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 B8 1B 10 03 3A 3E 08 0E 1A 3A 01 80 7D 8C 82 2D 07 00 00 03 00 83 1B 4E 95 90 00 00 00 00 27 A4 8E F3 F7 E3 52 06 DE FA 92 01 1E 00 1E 00 1E 00 C8 FF D3 FF 8D 00 F8 FD 6D 03 BA 00 7A 37 D1 3B 11 6C 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 B9 1B 10 03 3A 3E 08 0E 1A 3A 01 28 33 F0 84 2D 07 00 00 03 00 83 B4 EA 95 90 00 00 00 00 0E A8 EB EE CE EA 25 06 D9 FA 4F 01 1E 00 1E 00 1E 00 B9 FF 9B FF 8C 00 F9 FD 6B 03 B8 00 9E DD 92 3B 19 6C 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 BA 1B 10 03 3A 3E 08 0E 1A 3A 01 E8 E4 53 87 2D 07 00 00 03 00 83 4C 87 96 90 00 00 00 00 B3 AC AA E9 41 F1 90 06 BD FA 45 00 1E 00 1E 00 1E 00 E9 FF BE FF B8 00 FD FD 69 03 B2 00 F0 BB 7E 3B 21 6C 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 BB 1B 10 03 3A 3E 08 0E 1A 3A 01 90 9A B7 89 2D 07 00 00 03 00 83 E5 23 97 90 00 00 00 00 AA B2 90 E3 E0 F7 62 07 EA F9 AD 00 1E 00 1E 00 1E 00 CD FF 08 00 E0 00 02 FE 6B 03 AC 00 2C CF 3E 3B 29 6C 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 BC 1B 10 03 3A 3E 08 0E 1A 3A 01 38 50 1B 8C 2D 07 00 00 03 00 83 7E C0 97 90 00 00 00 00 41 B9 26 DE 9C FF A7 06 C8 FA 4E 01 1F 00 1F 00 1F 00 42 FF 57 FF 0E 00 FE FD 67 03 9A 00 7A 9B 0A 3B 31 6C 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 BD 1B 10 03 3A 3E 08 0E 1A 3A 01 E0 05 7F 8E 2D 07 00 00 03 00 83 17 5D 98 90 00 00 00 00 85 BE B7 DA 7E 05 D1 03 E1 FC A1 00 1F 00 1F 00 1F 00 36 FF B5 FE 86 FF F7 FD 56 03 7B 00 71 E8 05 3B 39 6C 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 BE 1B 10 03 3A 3E 08 0E 1A 3A 01 88 BB E2 90 2D 07 00 00 03 00 83 B0 F9 98 90 00 00 00 00 B3 C0 EE D8 B0 07 7C 00 2B FF D7 FF 1F 00 1F 00 1F 00 6C FF 0D FF 64 FF F1 FD 44 03 56 00 08 5A 1D 3B 41 6C 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 BF 1B 10 03 3A 3E 08 0E 1A 3A 01 30 71 46 93 2D 07 00 00 03 00 83 49 96 99 90 00 00 00 00 6D C0 B4 D8 71 07 1B FF 77 00 E0 FF 1F 00 1F 00 1F 00 B0 FF C1 FF BB FF EF FD 3E 03 36 00 9E 1A 1A 3B 49 6C 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 C0 1B 10 03 3A 3E 08 0E 1A 3A 01 D8 26 AA 95 2D 07 00 00 03 00 83 E2 32 9A 90 00 00 00 00 57 BF 4A D9 A3 06 E9 FE D8 00 12 00 1F 00 1F 00 1F 00 C9 FF E9 FF D6 FF F1 FD 3F 03 1D 00 C5 D9 F3 3A 51 6C 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 C1 1B 10 03 3A 3E 08 0E 1A 3A 01 80 DC 0D 98 2D 07 00 00 03 00 83 7B CF 9A 90 00 00 00 00 E4 BD 52 DA 41 05 6A FE 4F 01 C6 FF 1F 00 1F 00 1F 00 EE FF DA FF EC FF F4 FD 3F 03 07 00 4C F1 DD 3A 59 6C 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 C2 1B 10 03 3A 3E 08 0E 1A 3A 01 28 92 71 9A 2D 07 00 00 03 00 83 14 6C 9B 90 00 00 00 00 1C BC 71 DB 48 03 D6 FD 9D 01 9E FF 1F 00 1F 00 1F 00 D2 FF CB FF D3 FF F8 FD 3F 03 F4 FF A7 43 DA 3A 61 6C 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 C3 1B 10 03 3A 3E 08 0E 1A 3A 01 D0 47 D5 9C 2D 07 00 00 03 00 83 AD 08 9C 90 00 00 00 00 96 B9 30 DD 90 00 DD FC 41 02 7E FF 1F 00 1F 00 1F 00 DB FF 96 FF E9 FF FA FD 3D 03 E2 FF 4A DC A8 3A 69 6C 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 C4 1B 10 03 3A 3E 08 0E 1A 3A 01 78 FD 38 9F 2D 07 00 00 03 00 83 46 A5 9C 90 00 00 00 00 1A B6 65 DF FE FC E2 FB AD 02 77 FF 1F 00 1F 00 1F 00 E4 FF 9D FF 09 00 FD FD 3B 03 D6 FF 4A B3 9C 3A 71 6C 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 C5 1B 10 03 3A 3E 08 0E 1A 3A 01 20 B3 9C A1 2D 07 00 00 03 00 83 DF 41 9D 90 00 00 00 00 F8 B1 F2 E1 D9 F8 12 FB 2E 03 69 FF 1F 00 1F 00 1F 00 AD FF 9F FF E6 FF FE FD 3A 03 CD FF E8 E4 E0 3A 79 6C 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 C6 1B 10 03 3A 3E 08 0E 1A 3A 01 E0 64 00 A4 2D 07 00 00 03 00 83 77 DE 9D 90 00 00 00 00 91 AD 63 E5 C7 F3 95 FA F7 03 3A FF 1F 00 1F 00 1F 00 D1 FF AC FF 3A 00 FF FD 3A 03 CB FF E6 7B 03 3B 81 6C 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 C7 1B 10 03 3A 3E 08 0E 1A 3A 01 88 1A 64 A6 2D 07 00 00 03 00 83 10 7B 9E 90 00 00 00 00 44 A9 04 E9 86 EE 79 FA 9C 03 55 FF 1F 00 1F 00 1F 00 F2 FF D8 FF 5A 00 02 FE 3D 03 D1 FF 16 8F 17 3B 89 6C 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 C8 1B 10 03 3A 3E 08 0E 1A 3A 01 30 D0 C7 A8 2D 07 00 00 03 00 83 A9 17 9F 90 00 00 00 00 65 A5 9C EC AD E9 C2 FA A0 03 65 FF 20 00 20 00 20 00 D5 FF 00 00 3E 00 04 FE 41 03 DA FF 75 CC 14 3B 91 6C 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 C9 1B 10 03 3A 3E 08 0E 1A 3A 01 D8 85 2B AB 2D 07 00 00 03 00 83 42 B4 9F 90 00 00 00 00 41 A2 6F F0 F2 E4 50 FB 9A 03 79 FF 20 00 20 00 20 00 14 00 0A 00 86 00 06 FE 46 03 E8 FF BA 24 16 3B 99 6C 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 CA 1B 10 03 3A 3E 08 0E 1A 3A 01 80 3B 8F AD 2D 07 00 00 03 00 83 DB 50 A0 90 00 00 00 00 D5 9F 4E F3 09 E1 73 FC 57 02 6B FF 20 00 20 00 20 00 23 00 6E 00 68 00 0A FE 4D 03 FA FF 92 47 18 3B A1 6C 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 CB 1B 10 03 3A 3E 08 0E 1A 3A 01 28 F1 F2 AF 2D 07 00 00 03 00 83 74 ED A0 90 00 00 00 00 58 9E 96 F5 1B DE 7E FD 3C 02 AC FF 20 00 20 00 20 00 19 00 64 00 3C 00 0B FE 56 03 08 00 31 5D 44 3B A9 6C 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 CC 1B 10 03 3A 3E 08 0E 1A 3A 01 D0 A6 56 B2 2D 07 00 00 03 00 83 0D 8A A1 90 00 00 00 00 7A 9D 9C F7 C3 DB 0E FE C5 01 C0 FF 20 00 20 00 20 00 38 00 2D 00 5B 00 0D FE 5A 03 18 00 F1 03 50 3B B1 6C 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 CD 1B 10 03 3A 3E 08 0E 1A 3A 01 78 5C BA B4 2D 07 00 00 03 00 83 A6 26 A2 90 00 00 00 00 DB 9C C7 F8 2C DA 05 FF D6 00 CB FF 20 00 20 00 20 00 2F 00 6C 00 44 00 0F FE 5F 03 28 00 84 04 5E 3B B9 6C 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 CE 1B 10 03 3A 3E 08 0E 1A 3A 01 20 12 1E B7 2D 07 00 00 03 00 83 3F C3 A2 90 00 00 00 00 C7 9C 64 F9 3C D9 D7 FF A4 00 E3 FF 20 00 20 00 20 00 38 00 5E 00 3C 00 0F FE 64 03 36 00 84 A6 89 3B C1 6C 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 CF 1B 10 03 3A 3E 08 0E 1A 3A 01 C8 C7 81 B9 2D 07 00 00 03 00 83 D8 5F A3 90 00 00 00 00 01 9D 80 F9 FB D8 82 00 F6 FF 17 00 20 00 20 00 20 00 34 00 4D 00 33 00 10 FE 67 03 43 00 8E 7A 95 3B C9 6C 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 D0 1B 10 03 3A 3E 08 0E 1A 3A 01 70 7D E5 BB 2D 07 00 00 03 00 83 71 FC A3 90 00 00 00 00 7A 9D 3A F9 47 D9 EB 00 C6 FF 23 00 20 00 20 00 20 00 1C 00 1D 00 15 00 10 FE 69 03 4D 00 43 04 91 3B D1 6C 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 D1 1B 10 03 3A 3E 08 0E 1A 3A 01 18 33 49 BE 2D 07 00 00 03 00 83 0A 99 A4 90 00 00 00 00 FA 9D CA F8 CA D9 EB 00 AD FF 03 00 20 00 20 00 20 00 15 00 FD FF 12 00 0F FE 68 03 55 00 CD C5 3E 3B D9 6C 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 D2 1B 10 03 3A 3E 08 0E 1A 3A 01 C0 E8 AC C0 2D 07 00 00 03 00 83 A3 35 A5 90 00 00 00 00 69 9E 30 F8 61 DA F0 00 78 FF FE FF 20 00 20 00 20 00 18 00 05 00 13 00 0E FE 67 03 5B 00 FB 08 10 3B E1 6C 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 D3 1B 10 03 3A 3E 08 0E 1A 3A 01 68 9E 10 C3 2D 07 00 00 03 00 83 3C D2 A5 90 00 00 00 00 D2 9E 6A F7 1C DB 01 01 51 FF 01 00 20 00 20 00 20 00 1B 00 0E 00 18 00 0E FE 67 03 61 00 B4 52 EA 3A E9 6C 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 D4 1B 10 03 3A 3E 08 0E 1A 3A 01 10 54 74 C5 2D 07 00 00 03 00 83 D5 6E A6 90 00 00 00 00 48 9F 7E F6 17 DC 30 01 2D FF 10 00 21 00 21 00 21 00 0C 00 12 00 0F 00 0D FE 68 03 66 00 C4 29 5D 3A F1 6C 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 D5 1B 10 03 3A 3E 08 0E 1A 3A 01 D0 05 D8 C7 2D 07 00 00 03 00 83 6D 0B A7 90 00 00 00 00 D7 9F 86 F5 2E DD 59 01 1D FF 1F 00 21 00 21 00 21 00 16 00 18 00 2D 00 0D FE 69 03 6B 00 DE CC AC 39 F9 6C 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 D6 1B 10 03 3A 3E 08 0E 1A 3A 01 78 BB 3B CA 2D 07 00 00 03 00 83 06 A8 A7 90 00 00 00 00 86 A0 2D F4 9C DE BF 01 84 FE 20 00 21 00 21 00 21 00 22 00 33 00 2E 00 0F FE 6B 03 70 00 DE 8A 2B 39 01 6D 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 D7 1B 10 03 3A 3E 08 0E 1A 3A 01 20 71 9F CC 2D 07 00 00 03 00 83 9F 44 A8 90 00 00 00 00 85 A1 95 F2 71 E0 21 02 A3 FE 3E 00 21 00 21 00 21 00 FC FF 25 00 0B 00 0E FE 6E 03 72 00 2E 4E CB 39 09 6D 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 D8 1B 10 03 3A 3E 08 0E 1A 3A 01 C8 26 03 CF 2D 07 00 00 03 00 83 38 E1 A8 90 00 00 00 00 D1 A2 0A F1 56 E2 43 02 AA FE 39 00 21 00 21 00 21 00 E5 FF F1 FF F9 FF 0D FE 6F 03 71 00 53 F0 E7 39 11 6D 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 D9 1B 10 03 3A 3E 08 0E 1A 3A 01 70 DC 66 D1 2D 07 00 00 03 00 83 D1 7D A9 90 00 00 00 00 32 A4 96 EF D3 E3 EB 01 F3 FE 00 00 21 00 21 00 21 00 F3 FF CE FF 00 00 0C FE 6E 03 6E 00 3C 77 0A 3A 19 6D 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 DA 1B 10 03 3A 3E 08 0E 1A 3A 01 18 92 CA D3 2D 07 00 00 03 00 83 6A 1A AA 90 00 00 00 00 4F A5 12 EE 12 E5 7A 01 C3 FE D5 FF 21 00 21 00 21 00 FB FF CD FF FA FF 0C FE 6C 03 6B 00 68 5A 61 3A 21 6D 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 DB 1B 10 03 3A 3E 08 0E 1A 3A 01 C0 47 2E D6 2D 07 00 00 03 00 83 03 B7 AA 90 00 00 00 00 2B A6 AB EC 1F E6 0B 01 30 FF BF FF 21 00 21 00 21 00 E0 FF C2 FF DA FF 0B FE 6A 03 64 00 46 28 80 3A 29 6D 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 DC 1B 10 03 3A 3E 08 0E 1A 3A 01 68 FD 91 D8 2D 07 00 00 03 00 83 9C 53 AB 90 00 00 00 00 BC A6 91 EB A7 E6 9B 00 4D FF A7 FF 21 00 21 00 21 00 F4 FF D2 FF ED FF 0A FE 68 03 5E 00 D8 E4 94 3A 31 6D 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 DD 1B 10 03 3A 3E 08 0E 1A 3A 01 10 B3 F5 DA 2D 07 00 00 03 00 83 35 F0 AB 90 00 00 00 00 12 A7 8F EA F0 E6 49 00 76 FF 9D FF 21 00 21 00 21 00 ED FF D5 FF E9 FF 08 FE 66 03 58 00 9C 62 88 3A 39 6D 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 DE 1B 10 03 3A 3E 08 0E 1A 3A 01 B8 68 59 DD 2D 07 00 00 03 00 83 CE 8C AC 90 00 00 00 00 31 A7 C5 E9 06 E7 07 00 A2 FF AE FF 21 00 21 00 21 00 E7 FF E8 FF EB FF 06 FE 65 03 53 00 55 F1 7C 3A 41 6D 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 DF 1B 10 03 3A 3E 08 0E 1A 3A 01 60 1E BD DF 2D 07 00 00 03 00 83 67 29 AD 90 00 00 00 00 2C A7 37 E9 01 E7 E3 FF B0 FF B9 FF 21 00 21 00 21 00 F6 FF EF FF FD FF 05 FE 64 03 4F 00 06 20 78 3A 49 6D 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 E0 1B 10 03 3A 3E 08 0E 1A 3A 01 08 D4 20 E2 2D 07 00 00 03 00 83 00 C6 AD 90 00 00 00 00 1A A7 B4 E8 FD E6 EB FF 9F FF BB FF 22 00 22 00 22 00 08 00 00 00 0B 00 04 FE 65 03 4C 00 88 25 24 3A 51 6D 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 E1 1B 10 03 3A 3E 08 0E 1A 3A 01 B0 89 84 E4 2D 07 00 00 03 00 83 99 62 AE 90 00 00 00 00 16 A7 16 E8 25 E7 16 00 92 FF C9 FF 22 00 22 00 22 00 F7 FF 0E 00 FE FF 02 FE 66 03 4A 00 91 6C F9 39 59 6D 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 E2 1B 10 03 3A 3E 08 0E 1A 3A 01 58 3F E8 E6 2D 07 00 00 03 00 83 32 FF AE 90 00 00 00 00 2A A7 9F E7 56 E7 29 00 BE FF DE FF 22 00 22 00 22 00 F1 FF 02 00 FD FF 00 FE 66 03 47 00 B3 52 9F 39 61 6D 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 E3 1B 10 03 3A 3E 08 0E 1A 3A 01 00 F5 4B E9 2D 07 00 00 03 00 83 CB 9B AF 90 00 00 00 00 3F A7 50 E7 7C E7 17 00 D6 FF E7 FF 22 00 22 00 22 00 F0 FF F0 FF FF FF FD FD 66 03 45 00 03 8E 21 39 69 6D 00 00

860
head-tracking/plot.py Normal file
View File

@@ -0,0 +1,860 @@
import struct
import bluetooth
import threading
import time
from datetime import datetime
import numpy as np
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
import os
import asciichartpy as acp
from rich.live import Live
from rich.layout import Layout
from rich.panel import Panel
from rich.console import Console
import drawille
from head_orientation import HeadOrientation
import logging
from connection_manager import ConnectionManager
class Colors:
RESET = "\033[0m"
BOLD = "\033[1m"
RED = "\033[91m"
GREEN = "\033[92m"
YELLOW = "\033[93m"
BLUE = "\033[94m"
MAGENTA = "\033[95m"
CYAN = "\033[96m"
WHITE = "\033[97m"
BG_BLACK = "\033[40m"
class ColorFormatter(logging.Formatter):
FORMATS = {
logging.DEBUG: Colors.BLUE + "[%(levelname)s] %(message)s" + Colors.RESET,
logging.INFO: Colors.GREEN + "%(message)s" + Colors.RESET,
logging.WARNING: Colors.YELLOW + "%(message)s" + Colors.RESET,
logging.ERROR: Colors.RED + "[%(levelname)s] %(message)s" + Colors.RESET,
logging.CRITICAL: Colors.RED + Colors.BOLD + "[%(levelname)s] %(message)s" + Colors.RESET
}
def format(self, record):
log_fmt = self.FORMATS.get(record.levelno)
formatter = logging.Formatter(log_fmt, datefmt="%H:%M:%S")
return formatter.format(record)
handler = logging.StreamHandler()
handler.setFormatter(ColorFormatter())
logger = logging.getLogger("airpods-head-tracking")
logger.setLevel(logging.INFO)
logger.addHandler(handler)
logger.propagate = True
INIT_CMD = "00 00 04 00 01 00 02 00 00 00 00 00 00 00 00 00"
NOTIF_CMD = "04 00 04 00 0F 00 FF FF FE FF"
START_CMD = "04 00 04 00 17 00 00 00 10 00 10 00 08 A1 02 42 0B 08 0E 10 02 1A 05 01 40 9C 00 00"
STOP_CMD = "04 00 04 00 17 00 00 00 10 00 11 00 08 7E 10 02 42 0B 08 4E 10 02 1A 05 01 00 00 00 00"
KEY_FIELDS = {
"orientation 1": (43, 2),
"orientation 2": (45, 2),
"orientation 3": (47, 2),
"Horizontal Acceleration": (51, 2),
"Vertical Acceleration": (53, 2),
"unkown 1": (61, 2),
"unkown 2 ": (49, 2),
}
class AirPodsTracker:
def __init__(self):
self.sock = None
self.recording = False
self.log_file = None
self.listener_thread = None
self.bt_addr = "28:2D:7F:C2:05:5B"
self.psm = 0x1001
self.raw_packets = []
self.parsed_packets = []
self.live_data = []
self.live_plotting = False
self.animation = None
self.fig = None
self.axes = None
self.lines = {}
self.selected_fields = []
self.data_lock = threading.Lock()
self.orientation_offset = 5500
self.use_terminal = True # '--terminal' in sys.argv
self.orientation_visualizer = HeadOrientation(use_terminal=self.use_terminal)
self.conn = None
def connect(self):
try:
logger.info("Trying to connect to %s on PSM 0x%04X...", self.bt_addr, self.psm)
self.conn = ConnectionManager(self.bt_addr, self.psm, logger=logger)
if not self.conn.connect():
logger.error("Connection failed via ConnectionManager.")
return False
self.sock = self.conn.sock
self.sock.send(bytes.fromhex(NOTIF_CMD))
logger.info("Sent initialization command.")
self.listener_thread = threading.Thread(target=self.listen, daemon=True)
self.listener_thread.start()
return True
except Exception as e:
logger.error("Connection error: %s", e)
return False
def start_tracking(self, duration=None):
if not self.recording:
self.conn.send_start()
filename = "head_tracking_" + datetime.now().strftime("%Y%m%d_%H%M%S") + ".log"
self.log_file = open(filename, "w")
self.recording = True
logger.info("Recording started. Saving data to %s", filename)
if duration is not None and duration > 0:
def auto_stop():
time.sleep(duration)
if self.recording:
self.stop_tracking()
logger.info("Recording automatically stopped after %s seconds.", duration)
timer_thread = threading.Thread(target=auto_stop, daemon=True)
timer_thread.start()
logger.info("Will automatically stop recording after %s seconds.", duration)
else:
logger.info("Already recording.")
def stop_tracking(self):
if self.recording:
self.conn.send_stop()
self.recording = False
if self.log_file is not None:
self.log_file.close()
self.log_file = None
logger.info("Recording stopped.")
else:
logger.info("Not currently recording.")
def format_hex(self, data):
hex_str = data.hex()
return ' '.join(hex_str[i:i + 2] for i in range(0, len(hex_str), 2))
def parse_raw_packet(self, hex_string):
return bytes.fromhex(hex_string.replace(" ", ""))
def interpret_bytes(self, raw_bytes, start, length, data_type="signed_short"):
if start + length > len(raw_bytes):
return None
if data_type == "signed_short":
return int.from_bytes(raw_bytes[start:start + 2], byteorder='little', signed=True)
elif data_type == "unsigned_short":
return int.from_bytes(raw_bytes[start:start + 2], byteorder='little', signed=False)
elif data_type == "signed_short_be":
return int.from_bytes(raw_bytes[start:start + 2], byteorder='big', signed=True)
elif data_type == "float_le":
if start + 4 <= len(raw_bytes):
return struct.unpack('<f', raw_bytes[start:start + 4])[0]
elif data_type == "float_be":
if start + 4 <= len(raw_bytes):
return struct.unpack('>f', raw_bytes[start:start + 4])[0]
return None
def normalize_orientation(self, value, field_name):
if 'orientation' in field_name.lower():
return value + self.orientation_offset
return value
def parse_packet_all_fields(self, raw_bytes):
packet = {}
packet["seq_num"] = int.from_bytes(raw_bytes[12:14], byteorder='little')
for field_name, (start, length) in KEY_FIELDS.items():
if field_name == "float_val" and start + 4 <= len(raw_bytes):
packet[field_name] = self.interpret_bytes(raw_bytes, start, 4, "float_le")
else:
raw_value = self.interpret_bytes(raw_bytes, start, length, "signed_short")
if raw_value is not None:
packet[field_name] = self.normalize_orientation(raw_value, field_name)
for i in range(30, min(90, len(raw_bytes) - 1), 2):
field_name = f"byte_{i:02d}"
raw_value = self.interpret_bytes(raw_bytes, i, 2, "signed_short")
if raw_value is not None:
packet[field_name] = self.normalize_orientation(raw_value, field_name)
return packet
def apply_dark_theme(self, fig, axes):
fig.patch.set_facecolor('#1e1e1e')
for ax in axes:
ax.set_facecolor('#2d2d2d')
ax.title.set_color('white')
ax.xaxis.label.set_color('white')
ax.yaxis.label.set_color('white')
ax.tick_params(colors='white')
ax.tick_params(axis='x', colors='white')
ax.tick_params(axis='y', colors='white')
ax.grid(True, color='#555555', alpha=0.3, linestyle='--')
for spine in ax.spines.values():
spine.set_color('#555555')
legend = ax.get_legend()
if (legend):
legend.get_frame().set_facecolor('#2d2d2d')
legend.get_frame().set_alpha(0.7)
for text in legend.get_texts():
text.set_color('white')
def listen(self):
while True:
try:
data = self.sock.recv(1024)
formatted = self.format_hex(data)
timestamp = datetime.now().isoformat()
is_valid = self.is_valid_tracking_packet(formatted)
if not self.live_plotting:
if is_valid:
logger.info("%s - Response: %s...", timestamp, formatted[:60])
else:
logger.info("%s - Skipped non-tracking packet.", timestamp)
if is_valid:
if self.recording and self.log_file is not None:
self.log_file.write(formatted + "\n")
self.log_file.flush()
try:
raw_bytes = self.parse_raw_packet(formatted)
packet = self.parse_packet_all_fields(raw_bytes)
with self.data_lock:
self.live_data.append(packet)
if len(self.live_data) > 300:
self.live_data.pop(0)
except Exception as e:
logger.error(f"Error parsing packet: {e}")
except Exception as e:
logger.error("Error receiving data: %s", e)
break
def load_log_file(self, filepath):
self.raw_packets = []
self.parsed_packets = []
try:
with open(filepath, 'r') as f:
for line in f:
line = line.strip()
if line:
try:
raw_bytes = self.parse_raw_packet(line)
self.raw_packets.append(raw_bytes)
packet = self.parse_packet_all_fields(raw_bytes)
min_seq_num = min(
[parsed_packet["seq_num"] for parsed_packet in self.parsed_packets], default=0
)
if packet["seq_num"] > min_seq_num:
self.parsed_packets.append(packet)
except Exception as e:
logger.error(f"Error parsing line: {e}")
logger.info(f"Loaded {len(self.parsed_packets)} packets from {filepath}")
return True
except Exception as e:
logger.error(f"Error loading log file: {e}")
return False
def extract_field_values(self, field_name, data_source='loaded'):
if data_source == 'loaded':
data = self.parsed_packets
else:
with self.data_lock:
data = self.live_data.copy()
values = [packet.get(field_name, 0) for packet in data if field_name in packet]
if data_source == 'live' and len(values) > 5:
try:
values = np.array(values, dtype=float)
values = np.convolve(values, np.ones(5) / 5, mode='valid')
except Exception as e:
logger.warning(f"Smoothing error (non-critical): {e}")
return values
def is_valid_tracking_packet(self, hex_string):
standard_header = "04 00 04 00 17 00 00 00 10 00"
if not hex_string.startswith(standard_header):
if self.live_plotting:
logger.warning("Invalid packet header: %s", hex_string[:30])
return False
if len(hex_string.split()) < 80:
if self.live_plotting:
logger.warning("Invalid packet length: %s", hex_string[:30])
return False
return True
def plot_fields(self, field_names=None):
if not self.parsed_packets:
logger.error("No data to plot. Load a log file first.")
return
if field_names is None:
field_names = list(KEY_FIELDS.keys())
if not self.orientation_visualizer.calibration_complete:
if len(self.parsed_packets) < self.orientation_visualizer.calibration_sample_count:
logger.error("Not enough packets for calibration. Need at least 10 packets.")
return
for packet in self.parsed_packets[:self.orientation_visualizer.calibration_sample_count]:
self.orientation_visualizer.add_calibration_sample([
packet.get('orientation 1', 0),
packet.get('orientation 2', 0),
packet.get('orientation 3', 0)
])
if self.use_terminal:
self._plot_fields_terminal(field_names)
else:
acceleration_fields = [f for f in field_names if 'acceleration' in f.lower()]
orientation_fields = [f for f in field_names if 'orientation' in f.lower()]
other_fields = [f for f in field_names if f not in acceleration_fields + orientation_fields]
fig, axes = plt.subplots(3, 1, figsize=(14, 12), sharex=True)
self.apply_dark_theme(fig, axes)
acceleration_colors = ['#FFFF00', '#00FFFF']
orientation_colors = ['#FF00FF', '#00FF00', '#FFA500']
other_colors = ['#52b788', '#f4a261', '#e76f51', '#2a9d8f']
if acceleration_fields:
for i, field in enumerate(acceleration_fields):
values = self.extract_field_values(field)
axes[0].plot(values, label=field, color=acceleration_colors[i % len(acceleration_colors)], linewidth=2)
axes[0].set_title("Acceleration Data", fontsize=14)
axes[0].legend()
if orientation_fields:
for i, field in enumerate(orientation_fields):
values = self.extract_field_values(field)
axes[1].plot(values, label=field, color=orientation_colors[i % len(orientation_colors)], linewidth=2)
axes[1].set_title("Orientation Data", fontsize=14)
axes[1].legend()
if other_fields:
for i, field in enumerate(other_fields):
values = self.extract_field_values(field)
axes[2].plot(values, label=field, color=other_colors[i % len(other_colors)], linewidth=2)
axes[2].set_title("Other Fields", fontsize=14)
axes[2].legend()
plt.xlabel("Packet Index", fontsize=12)
plt.tight_layout()
plt.show()
def _plot_fields_terminal(self, field_names):
"""Internal method for terminal-based plotting"""
terminal_width = os.get_terminal_size().columns
plot_width = min(terminal_width - 10, 120)
plot_height = 15
acceleration_fields = [f for f in field_names if 'acceleration' in f.lower()]
orientation_fields = [f for f in field_names if 'orientation' in f.lower()]
other_fields = [f for f in field_names if f not in acceleration_fields + orientation_fields]
def plot_group(fields, title):
if not fields:
return
print(f"\n{title}")
print("=" * len(title))
for field in fields:
values = self.extract_field_values(field)
if len(values) > plot_width:
values = values[-plot_width:]
if title == "Acceleration Data":
chart = acp.plot(values, {'height': plot_height})
print(chart)
else:
chart = acp.plot(values, {'height': plot_height})
print(chart)
print(f"Min: {min(values):.2f}, Max: {max(values):.2f}, " +
f"Mean: {np.mean(values):.2f}")
print()
plot_group(acceleration_fields, "Acceleration Data")
plot_group(orientation_fields, "Orientation Data")
plot_group(other_fields, "Other Fields")
def create_braille_plot(self, values, width=80, height=20, y_label=True, fixed_y_min=None, fixed_y_max=None):
canvas = drawille.Canvas()
if fixed_y_min is None or fixed_y_max is None:
local_min, local_max = min(values), max(values)
else:
local_min, local_max = fixed_y_min, fixed_y_max
y_range = local_max - local_min or 1
x_step = max(1, len(values) // width)
for i, v in enumerate(values[::x_step]):
y = int(((v - local_min) / y_range) * (height * 2 - 1))
canvas.set(i, y)
frame = canvas.frame()
if y_label:
lines = frame.split('\n')
labeled_lines = []
for idx, line in enumerate(lines):
if idx == 0:
labeled_lines.append(f"{local_max:6.0f} {line}")
elif idx == len(lines)-1:
labeled_lines.append(f"{local_min:6.0f} {line}")
else:
labeled_lines.append(" " + line)
frame = "\n".join(labeled_lines)
return frame
def _start_live_plotting_terminal(self, record_data=False, duration=None):
import sys, select, tty, termios
old_settings = termios.tcgetattr(sys.stdin)
tty.setcbreak(sys.stdin.fileno())
console = Console()
term_width = console.width
plot_width = round(min(term_width / 2 - 15, 120))
ori_height = 10
def make_compact_layout():
layout = Layout()
layout.split_column(
Layout(name="header", size=3),
Layout(name="main", ratio=1),
)
layout["main"].split_row(
Layout(name="accelerations", ratio=1),
Layout(name="orientations", ratio=1)
)
layout["accelerations"].split_column(
Layout(name="vertical", ratio=1),
Layout(name="horizontal", ratio=1)
)
layout["orientations"].split_column(
Layout(name="face", ratio=1),
Layout(name="raw", ratio=1)
)
return layout
layout = make_compact_layout()
try:
import time
with Live(layout, refresh_per_second=20, screen=True) as live:
while True:
if sys.stdin in select.select([sys.stdin], [], [], 0)[0]:
ch = sys.stdin.read(1)
if ch == 'p':
self.paused = not self.paused
logger.info("Paused" if self.paused else "Resumed")
if self.paused:
time.sleep(0.1)
rec_str = " [red][REC][/red]" if record_data else ""
left = "AirPods Head Tracking - v1.0.0"
right = "Ctrl+C - Close | p - Pause" + rec_str
status = "[bold red]Paused[/bold red]"
header = list(" " * term_width)
header[0:len(left)] = list(left)
header[term_width - len(right):] = list(right)
start = (term_width - len(status)) // 2
header[start:start+len(status)] = list(status)
header_text = "".join(header)
layout["header"].update(Panel(header_text, style="bold white on black"))
continue
with self.data_lock:
if len(self.live_data) < 1:
continue
latest = self.live_data[-1]
data = self.live_data[-plot_width:]
if not self.orientation_visualizer.calibration_complete:
sample = [
latest.get('orientation 1', 0),
latest.get('orientation 2', 0),
latest.get('orientation 3', 0)
]
self.orientation_visualizer.add_calibration_sample(sample)
time.sleep(0.05)
rec_str = " [red][REC][/red]" if record_data else ""
left = "AirPods Head Tracking - v1.0.0"
status = "[bold yellow]Calibrating...[/bold yellow]"
right = "Ctrl+C - Close | p - Pause"
remaining = max(term_width - len(left) - len(right), 0)
header_text = f"{left}{status.center(remaining)}{right}{rec_str}"
layout["header"].update(Panel(header_text, style="bold white on black"))
live.refresh()
continue
o1 = latest.get('orientation 1', 0)
o2 = latest.get('orientation 2', 0)
o3 = latest.get('orientation 3', 0)
orientation = self.orientation_visualizer.calculate_orientation(o1, o2, o3)
pitch = orientation['pitch']
yaw = orientation['yaw']
h_accel = [p.get('Horizontal Acceleration', 0) for p in data]
v_accel = [p.get('Vertical Acceleration', 0) for p in data]
if len(h_accel) > plot_width:
h_accel = h_accel[-plot_width:]
if len(v_accel) > plot_width:
v_accel = v_accel[-plot_width:]
global_min = min(min(v_accel), min(h_accel))
global_max = max(max(v_accel), max(h_accel))
config_acc = {'height': 20, 'min': global_min, 'max': global_max}
vert_plot = acp.plot(v_accel, config_acc)
horiz_plot = acp.plot(h_accel, config_acc)
rec_str = " [red][REC][/red]" if record_data else ""
left = "AirPods Head Tracking - v1.0.0"
right = "Ctrl+C - Close | p - Pause" + rec_str
status = "[bold green]Live[/bold green]"
header = list(" " * term_width)
header[0:len(left)] = list(left)
header[term_width - len(right):] = list(right)
start = (term_width - len(status)) // 2
header[start:start+len(status)] = list(status)
header_text = "".join(header)
layout["header"].update(Panel(header_text, style="bold white on black"))
face_art = self.orientation_visualizer.create_face_art(pitch, yaw)
layout["accelerations"]["vertical"].update(Panel(
"[bold yellow]Vertical Acceleration[/]\n" +
vert_plot + "\n" +
f"Cur: {v_accel[-1]:6.1f} | Min: {min(v_accel):6.1f} | Max: {max(v_accel):6.1f}",
style="yellow"
))
layout["accelerations"]["horizontal"].update(Panel(
"[bold cyan]Horizontal Acceleration[/]\n" +
horiz_plot + "\n" +
f"Cur: {h_accel[-1]:6.1f} | Min: {min(h_accel):6.1f} | Max: {max(h_accel):6.1f}",
style="cyan"
))
layout["orientations"]["face"].update(Panel(face_art, title="[green]Orientation - Visualization[/]", style="green"))
o2_values = [p.get('orientation 2', 0) for p in data[-plot_width:]]
o3_values = [p.get('orientation 3', 0) for p in data[-plot_width:]]
o2_values = o2_values[:plot_width]
o3_values = o3_values[:plot_width]
common_min = min(min(o2_values), min(o3_values))
common_max = max(max(o2_values), max(o3_values))
config_ori = {'height': ori_height, 'min': common_min, 'max': common_max, 'format': "{:6.0f}"}
chart_o2 = acp.plot(o2_values, config_ori)
chart_o3 = acp.plot(o3_values, config_ori)
layout["orientations"]["raw"].update(Panel(
"[bold yellow]Orientation 1:[/]\n" + chart_o2 + "\n" +
f"Cur: {o2_values[-1]:6.1f} | Min: {min(o2_values):6.1f} | Max: {max(o2_values):6.1f}\n\n" +
"[bold green]Orientation 2:[/]\n" + chart_o3 + "\n" +
f"Cur: {o3_values[-1]:6.1f} | Min: {min(o3_values):6.1f} | Max: {max(o3_values):6.1f}",
title="[cyan]Orientation Raw[/]", style="yellow"
))
live.refresh()
time.sleep(0.05)
except KeyboardInterrupt:
logger.info("\nStopped.")
if record_data:
self.stop_tracking()
else:
if self.sock:
self.sock.send(bytes.fromhex(STOP_CMD))
finally:
termios.tcsetattr(sys.stdin, termios.TCSADRAIN, old_settings)
def _start_live_plotting(self, record_data=False, duration=None):
terminal_width = os.get_terminal_size().columns
plot_width = min(terminal_width - 10, 80)
plot_height = 10
try:
while True:
os.system('clear' if os.name == 'posix' else 'cls')
with self.data_lock:
if len(self.live_data) == 0:
print("\nWaiting for data...")
time.sleep(0.1)
continue
data = self.live_data[-plot_width:]
acceleration_fields = [f for f in KEY_FIELDS.keys() if 'acceleration' in f.lower()]
orientation_fields = [f for f in KEY_FIELDS.keys() if 'orientation' in f.lower()]
other_fields = [f for f in KEY_FIELDS.keys() if f not in acceleration_fields + orientation_fields]
def plot_group(fields, title):
if not fields:
return
print(f"\n{title}")
print("=" * len(title))
for field in fields:
values = [packet.get(field, 0) for packet in data if field in packet]
if len(values) > 0:
chart = acp.plot(values, {'height': plot_height})
print(chart)
print(f"Current: {values[-1]:.2f}, " +
f"Min: {min(values):.2f}, Max: {max(values):.2f}")
print()
plot_group(acceleration_fields, "Acceleration Data")
plot_group(orientation_fields, "Orientation Data")
plot_group(other_fields, "Other Fields")
print("\nPress Ctrl+C to stop plotting")
time.sleep(0.1)
except KeyboardInterrupt:
logger.info("\nLive plotting stopped.")
self.sock.send(bytes.fromhex(STOP_CMD))
if record_data:
self.stop_tracking()
self.live_plotting = False
def start_live_plotting(self, record_data=False, duration=None):
if self.sock is None:
if not self.connect():
logger.error("Could not connect to AirPods. Live plotting aborted.")
return
if not self.recording and record_data:
self.start_tracking(duration)
logger.info("Recording enabled during live plotting")
elif not self.recording:
self.sock.send(bytes.fromhex(START_CMD))
logger.info("Head tracking started (not recording to file)")
with self.data_lock:
self.live_data = []
self.live_plotting = True
self.paused = False
if self.use_terminal:
self._start_live_plotting_terminal(record_data, duration)
else:
from matplotlib.gridspec import GridSpec, GridSpecFromSubplotSpec
fig = plt.figure(figsize=(14, 6))
gs = GridSpec(1, 2, width_ratios=[1, 1])
ax_accel = fig.add_subplot(gs[0])
subgs = GridSpecFromSubplotSpec(2, 1, subplot_spec=gs[1], height_ratios=[2, 1])
ax_head_top = fig.add_subplot(subgs[0], projection='3d')
ax_ori = fig.add_subplot(subgs[1])
ax_accel.set_title("Acceleration Data")
ax_accel.set_xlabel("Packet Index")
ax_accel.set_ylabel("Acceleration")
ax_accel.legend(loc='upper right', framealpha=0.7)
fig.patch.set_facecolor('#1e1e1e')
ax_accel.set_facecolor('#2d2d2d')
self.apply_dark_theme(fig, [ax_accel, ax_head_top, ax_ori])
plt.ion()
def update_plot(_):
with self.data_lock:
data = self.live_data.copy()
if len(data) == 0:
return
latest = data[-1]
if not self.orientation_visualizer.calibration_complete:
sample = [
latest.get('orientation 1', 0),
latest.get('orientation 2', 0),
latest.get('orientation 3', 0)
]
self.orientation_visualizer.add_calibration_sample(sample)
ax_head_top.cla()
ax_head_top.text(0.5, 0.5, "Calibrating... please wait", horizontalalignment='center', verticalalignment='center', transform=ax_head_top.transAxes, color='white')
fig.canvas.draw_idle()
return
h_accel = [p.get('Horizontal Acceleration', 0) for p in data]
v_accel = [p.get('Vertical Acceleration', 0) for p in data]
x_vals = list(range(len(h_accel)))
ax_accel.cla()
ax_accel.plot(x_vals, v_accel, label='Vertical Acceleration', color='#FFFF00', linewidth=2)
ax_accel.plot(x_vals, h_accel, label='Horizontal Acceleration', color='#00FFFF', linewidth=2)
ax_accel.set_title("Acceleration Data")
ax_accel.set_xlabel("Packet Index")
ax_accel.set_ylabel("Acceleration")
ax_accel.legend(loc='upper right', framealpha=0.7)
ax_accel.set_facecolor('#2d2d2d')
ax_accel.title.set_color('white')
ax_accel.xaxis.label.set_color('white')
ax_accel.yaxis.label.set_color('white')
latest = data[-1]
o1 = latest.get('orientation 1', 0)
o2 = latest.get('orientation 2', 0)
o3 = latest.get('orientation 3', 0)
orientation = self.orientation_visualizer.calculate_orientation(o1, o2, o3)
pitch = orientation['pitch']
yaw = orientation['yaw']
ax_head_top.cla()
ax_head_top.set_title("Head Orientation")
ax_head_top.set_xlim([-1, 1])
ax_head_top.set_ylim([-1, 1])
ax_head_top.set_zlim([-1, 1])
ax_head_top.set_facecolor('#2d2d2d')
pitch_rad = np.radians(pitch)
yaw_rad = np.radians(yaw)
Rz = np.array([
[np.cos(yaw_rad), np.sin(yaw_rad), 0],
[-np.sin(yaw_rad), np.cos(yaw_rad), 0],
[0, 0, 1]
])
Ry = np.array([
[np.cos(pitch_rad), 0, np.sin(pitch_rad)],
[0, 1, 0],
[-np.sin(pitch_rad), 0, np.cos(pitch_rad)]
])
R = Rz @ Ry
dir_vec = R @ np.array([1, 0, 0])
ax_head_top.quiver(0, 0, 0, dir_vec[0], dir_vec[1], dir_vec[2],
color='r', length=0.8, linewidth=3)
ax_ori.cla()
o2_values = [p.get('orientation 2', 0) for p in data]
o3_values = [p.get('orientation 3', 0) for p in data]
x_range = list(range(len(o2_values)))
ax_ori.plot(x_range, o2_values, label='Orientation 1', color='red', linewidth=2)
ax_ori.plot(x_range, o3_values, label='Orientation 2', color='green', linewidth=2)
ax_ori.set_facecolor('#2d2d2d')
ax_ori.tick_params(colors='white')
ax_ori.set_title("Orientation Raw")
ax_ori.legend(facecolor='#2d2d2d', edgecolor='#555555',
labelcolor='white', loc='upper right')
ax_ori.text(0.95, 0.9, f"Pitch: {pitch:.1f}°\nYaw: {yaw:.1f}°",
transform=ax_ori.transAxes, color='white',
ha='right', va='top', bbox=dict(facecolor='#2d2d2d', alpha=0.5))
fig.canvas.draw_idle()
self.animation = FuncAnimation(
fig, update_plot,
interval=20,
blit=False,
cache_frame_data=False
)
plt.show(block=True)
self.sock.send(bytes.fromhex(STOP_CMD))
logger.info("Stopping head tracking AirPods.")
if self.recording and record_data:
self.stop_tracking()
logger.info("Recording stopped after sending close command")
else:
logger.info("Live plotting ended (no recording to stop).")
self.live_plotting = False
self.animation = None
plt.ioff()
def interactive_mode(self):
from prompt_toolkit import PromptSession
session = PromptSession("> ")
logger.info("\nAirPods Head Tracking Analyzer")
print("------------------------------")
logger.info("Commands:")
print(" connect - connect to your AirPods")
print(" start [seconds] - start recording head tracking data, optionally for specified duration")
print(" stop - stop recording")
print(" load <file> - load and parse a log file")
print(" plot - plot all sensor data fields")
print(" live [seconds] - start live plotting (without recording), optionally stop recording after seconds")
print(" liver [seconds] - start live plotting with recording, optionally stop recording after seconds")
print(" gestures - start gesture detection")
print(" quit - exit the program")
while True:
try:
cmd_input = session.prompt("> ")
cmd_parts = cmd_input.strip().split()
if not cmd_parts:
continue
cmd = cmd_parts[0].lower()
if cmd == "connect":
self.connect()
elif cmd == "start":
duration = float(cmd_parts[1]) if len(cmd_parts) > 1 else None
self.start_tracking(duration)
elif cmd == "stop":
self.stop_tracking()
elif cmd == "load" and len(cmd_parts) > 1:
self.load_log_file(cmd_parts[1])
elif cmd == "plot":
self.plot_fields()
elif cmd == "live":
duration = float(cmd_parts[1]) if len(cmd_parts) > 1 else None
logger.info("Starting live plotting mode (without recording)%s.",
f" for {duration} seconds" if duration else "")
self.start_live_plotting(record_data=False, duration=duration)
elif cmd == "liver":
duration = float(cmd_parts[1]) if len(cmd_parts) > 1 else None
logger.info("Starting live plotting mode WITH recording%s.",
f" for {duration} seconds" if duration else "")
self.start_live_plotting(record_data=True, duration=duration)
elif cmd == "gestures":
from gestures import GestureDetector
if self.conn is not None:
detector = GestureDetector(conn=self.conn)
else:
detector = GestureDetector()
detector.start_detection()
elif cmd == "quit":
logger.info("Exiting.")
if self.conn != None:
self.conn.disconnect()
break
elif cmd == "help":
logger.info("\nAirPods Head Tracking Analyzer")
logger.info("------------------------------")
logger.info("Commands:")
logger.info(" connect - connect to your AirPods")
logger.info(" start [seconds] - start recording head tracking data, optionally for specified duration")
logger.info(" stop - stop recording")
logger.info(" load <file> - load and parse a log file")
logger.info(" plot - plot all sensor data fields")
logger.info(" live [seconds] - start live plotting (without recording), optionally stop recording after seconds")
logger.info(" liver [seconds] - start live plotting with recording, optionally stop recording after seconds")
logger.info(" gestures - start gesture detection")
logger.info(" quit - exit the program")
else:
logger.info("Unknown command. Type 'help' to see available commands.")
except KeyboardInterrupt:
logger.info("Use 'quit' to exit.")
except EOFError:
logger.info("Exiting.")
if self.conn != None:
self.conn.disconnect()
break
if __name__ == "__main__":
import sys
tracker = AirPodsTracker()
tracker.interactive_mode()

View File

@@ -0,0 +1,6 @@
drawille
numpy
pybluez
matplotlib
asciichartpy
rich

View File

@@ -1,92 +0,0 @@
# AirPods like Normal (ALN) - Bringing Apple-only features to Linux and Android for seamless AirPods functionality!
#
# Copyright (C) 2024 Kavish Devar
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published
# by the Free Software Foundation, either version 3 of the License.
#
# 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 Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
import matplotlib.pyplot as plt
import mplcursors
import bluetooth
import threading
import time
from matplotlib.animation import FuncAnimation
sock = bluetooth.BluetoothSocket(bluetooth.L2CAP)
bt_addr = "28:2D:7F:C2:05:5B"
psm = 0x1001
sock.connect((bt_addr, psm))
running = threading.Event()
data = []
start_column = 0
columns_per_view = 5
paused = False
def hex_to_base10(hex_string):
hex_values = hex_string.split()
base10_values = [int(hex_value, 16) for hex_value in hex_values]
return base10_values
def listen():
global running, data
while not running.is_set():
res = sock.recv(1024)
if len(res.hex()) == 162:
hex_string = " ".join(res.hex()[i:i+2].upper() for i in range(0, len(res.hex()), 2))
base10_values = hex_to_base10(hex_string)
data.append(base10_values)
t = threading.Thread(target=listen)
t.start()
try:
byts = bytes(int(b, 16) for b in "00 00 04 00 01 00 02 00 00 00 00 00 00 00 00 00".split(" "))
sock.send(byts)
byts = bytes(int(b, 16) for b in "04 00 04 00 0F 00 FF FF FE FF".split(" "))
sock.send(byts)
byts = bytes(int(b, 16) for b in "04 00 04 00 17 00 00 00 10 00 11 00 08 7C 10 02 42 0B 08 4E 10 02 1A 05 01 40 9C 00 00".split(" "))
sock.send(byts)
except:
...
def update(frame):
if not paused:
plt.clf()
plt.title('Bluetooth Data')
end_column = start_column + columns_per_view
for i in range(start_column, min(end_column, len(data[0]))):
plt.plot([row[i] for row in data], label=f'Column {i}', alpha=0.6, linewidth=1.2)
plt.xlabel('Time')
plt.ylabel('Value')
mplcursors.cursor(hover=True, highlight=True)
def on_key(event):
global start_column, paused
if event.key == ' ':
start_column += columns_per_view
if start_column >= len(data[0]):
start_column = 0
elif event.key == 'p':
paused = not paused
fig = plt.figure()
fig.tight_layout()
fig.canvas.mpl_connect('key_press_event', on_key)
ani = FuncAnimation(fig, update, interval=0.5, repeat=True, cache_frame_data=False)
plt.show()
running.set()
sock.close()

View File

@@ -1,52 +0,0 @@
# AirPods like Normal (ALN) - Bringing Apple-only features to Linux and Android for seamless AirPods functionality!
#
# Copyright (C) 2024 Kavish Devar
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published
# by the Free Software Foundation, either version 3 of the License.
#
# 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 Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
import bluetooth
import threading
sock = bluetooth.BluetoothSocket(bluetooth.L2CAP)
bt_addr = "28:2D:7F:C2:05:5B"
psm = 0x1001
sock.connect((bt_addr, psm))
running = threading.Event()
def listen():
global running
while not running.is_set():
res = sock.recv(1024)
if len(res.hex()) == 162:
print(" ".join(res.hex()[i:i+2].upper() for i in range(0, len(res.hex()), 2)))
t = threading.Thread(target=listen)
t.start()
try:
byts = bytes(int(b, 16) for b in "00 00 04 00 01 00 02 00 00 00 00 00 00 00 00 00".split(" "))
sock.send(byts)
byts = bytes(int(b, 16) for b in "04 00 04 00 0F 00 FF FF FE FF".split(" "))
sock.send(byts)
byts = bytes(int(b, 16) for b in "04 00 04 00 17 00 00 00 10 00 11 00 08 7C 10 02 42 0B 08 4E 10 02 1A 05 01 40 9C 00 00".split(" "))
sock.send(byts)
import time
time.sleep(5)
byts = bytes(int(b, 16) for b in "04 00 04 00 17 00 00 00 10 00 11 00 08 7E 10 02 42 0B 08 4E 10 02 1A 05 01 00 00 00 00".split(" "))
sock.send(byts)
except:
...
running.set()
sock.close()

View File

@@ -1,120 +0,0 @@
# AirPods like Normal (ALN) - Bringing Apple-only features to Linux and Android for seamless AirPods functionality!
#
# Copyright (C) 2024 Kavish Devar
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License as published
# by the Free Software Foundation, either version 3 of the License.
#
# 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 Affero General Public License for more details.
#
# You should have received a copy of the GNU Affero General Public License
# along with this program. If not, see <https://www.gnu.org/licenses/>.
import matplotlib.pyplot as plt
import mplcursors
import bluetooth
import threading
import time
from matplotlib.animation import FuncAnimation
import tkinter as tk
from tkinter import ttk
sock = bluetooth.BluetoothSocket(bluetooth.L2CAP)
bt_addr = "28:2D:7F:C2:05:5B"
psm = 0x1001
sock.connect((bt_addr, psm))
running = threading.Event()
data = []
selected_columns = list(range(80))
def hex_to_base10(hex_string):
hex_values = hex_string.split()
base10_values = [int(hex_value, 16) for hex_value in hex_values]
return base10_values
def listen():
global running, data
while not running.is_set():
res = sock.recv(1024)
if len(res.hex()) == 162:
hex_string = " ".join(res.hex()[i:i+2].upper() for i in range(0, len(res.hex()), 2))
base10_values = hex_to_base10(hex_string)
data.append(base10_values)
t = threading.Thread(target=listen)
t.start()
try:
byts = bytes(int(b, 16) for b in "00 00 04 00 01 00 02 00 00 00 00 00 00 00 00 00".split(" "))
sock.send(byts)
byts = bytes(int(b, 16) for b in "04 00 04 00 0F 00 FF FF FE FF".split(" "))
sock.send(byts)
byts = bytes(int(b, 16) for b in "04 00 04 00 17 00 00 00 10 00 11 00 08 7C 10 02 42 0B 08 4E 10 02 1A 05 01 40 9C 00 00".split(" "))
sock.send(byts)
except:
...
def update(frame):
plt.clf()
plt.title('Bluetooth Data')
for i in range(len(data[0])):
if i in selected_columns:
plt.plot([row[i] for row in data], label=f'Column {i}', alpha=1, linewidth=1.2)
plt.xlabel('Time')
plt.ylabel('Value')
mplcursors.cursor(hover=True, highlight=True)
def on_checkbox_change():
global selected_columns
selected_columns = [i for i, var in enumerate(checkbox_vars) if var.get()]
def create_checkbox_window():
root = tk.Tk()
root.title("Select Columns")
frame = ttk.Frame(root)
frame.pack(fill=tk.BOTH, expand=True)
canvas = tk.Canvas(frame)
scrollbar = ttk.Scrollbar(frame, orient="vertical", command=canvas.yview)
scrollable_frame = ttk.Frame(canvas)
scrollable_frame.bind(
"<Configure>",
lambda e: canvas.configure(
scrollregion=canvas.bbox("all")
)
)
canvas.create_window((0, 0), window=scrollable_frame, anchor="nw")
canvas.configure(yscrollcommand=scrollbar.set)
global checkbox_vars
checkbox_vars = []
for i in range(80):
var = tk.BooleanVar(value=True)
checkbox = ttk.Checkbutton(scrollable_frame, text=f"Column {i}", variable=var, command=on_checkbox_change)
checkbox.pack(anchor='w')
checkbox_vars.append(var)
canvas.pack(side="left", fill=tk.BOTH, expand=True)
scrollbar.pack(side="right", fill="y")
root.mainloop()
checkbox_thread = threading.Thread(target=create_checkbox_window)
checkbox_thread.start()
fig = plt.figure()
fig.tight_layout()
ani = FuncAnimation(fig, update, interval=500, repeat=True, cache_frame_data=False)
plt.show()
running.set()
sock.close()

View File

@@ -1,125 +0,0 @@
04 00 04 00 17 00 00 00 10 00 45 00 08 98 1D 10 01 3A 3E 08 0E 1A 3A 01 A8 E4 00 50 A9 23 00 00 03 04 43 C6 2A 22 58 00 00 00 00 0A B0 24 3A 4C F0 EB FF 14 00 F8 FF 51 8F 51 8F 51 8F 0A 00 00 00 FE FF A9 01 8F 03 BE 00 8A 97 95 36 19 74 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 99 1D 10 01 3A 3E 08 0E 1A 3A 01 C0 C9 60 52 A9 23 00 00 03 04 43 65 C6 22 58 00 00 00 00 F4 AF 24 3A 47 F0 E9 FF FF FF F4 FF 51 8F 51 8F 51 8F 02 00 FF FF FF FF AA 01 8F 03 BE 00 19 B0 D2 36 21 74 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 9A 1D 10 01 3A 3E 08 0E 1A 3A 01 D8 AE C0 54 A9 23 00 00 03 04 43 04 62 23 58 00 00 00 00 DF AF 1D 3A 4C F0 EF FF 04 00 F4 FF 51 8F 51 8F 51 8F F8 FF 00 00 04 00 A9 01 8F 03 BF 00 52 5C CF 36 29 74 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 9B 1D 10 01 3A 3E 08 0E 1A 3A 01 F0 93 20 57 A9 23 00 00 03 04 43 A3 FD 23 58 00 00 00 00 D1 AF 1E 3A 42 F0 FC FF 12 00 ED FF 51 8F 51 8F 51 8F FC FF 09 00 01 00 A8 01 90 03 C0 00 1C 97 29 37 31 74 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 9C 1D 10 01 3A 3E 08 0E 1A 3A 01 08 79 80 59 A9 23 00 00 03 04 43 42 99 24 58 00 00 00 00 C3 AF 16 3A 1C F0 02 00 15 00 DD FF 51 8F 51 8F 51 8F 00 00 03 00 00 00 A8 01 90 03 C1 00 F9 C3 88 37 39 74 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 9D 1D 10 01 3A 3E 08 0E 1A 3A 01 38 5A E0 5B A9 23 00 00 03 04 43 E0 34 25 58 00 00 00 00 AB AF 0B 3A E7 EF F4 FF 24 00 D2 FF 52 8F 52 8F 52 8F F9 FF FF FF 01 00 A7 01 90 03 C1 00 16 BD 83 37 41 74 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 9E 1D 10 01 3A 3E 08 0E 1A 3A 01 50 3F 40 5E A9 23 00 00 03 04 43 7F D0 25 58 00 00 00 00 73 AF F1 39 8F EF D9 FF 2B 00 76 FF 52 8F 52 8F 52 8F FF FF 0C 00 08 00 A6 01 91 03 C2 00 73 61 0D 38 49 74 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 9F 1D 10 01 3A 3E 08 0E 1A 3A 01 68 24 A0 60 A9 23 00 00 03 04 83 1E 6C 26 58 00 00 00 00 DE AE 8F 39 D9 EE BB FF 59 00 DA FE 52 8F 52 8F 52 8F FA FF 18 00 06 00 A5 01 93 03 C4 00 92 0D D6 38 51 74 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 A0 1D 10 01 3A 3E 08 0E 1A 3A 01 80 09 00 63 A9 23 00 00 03 04 83 BD 07 27 58 00 00 00 00 E6 AD D3 38 92 ED 9C FF 92 00 41 FE 52 8F 52 8F 52 8F FB FF 14 00 04 00 A1 01 95 03 C6 00 F8 8C 18 39 59 74 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 A1 1D 10 01 3A 3E 08 0E 1A 3A 01 B0 EA 5F 65 A9 23 00 00 03 00 83 5B A3 27 58 00 00 00 00 8B AC BF 37 AC EB 94 FF D7 00 A8 FD 52 8F 52 8F 52 8F 0A 00 0D 00 08 00 9D 01 97 03 C8 00 DE D9 63 39 61 74 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 A2 1D 10 01 3A 3E 08 0E 1A 3A 01 C8 CF BF 67 A9 23 00 00 03 00 83 FA 3E 28 58 00 00 00 00 F7 AA 7C 36 6C E9 2B FF BC 00 9C FD 52 8F 52 8F 52 8F 11 00 E7 FF 1B 00 97 01 98 03 CB 00 86 84 71 39 69 74 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 A3 1D 10 01 3A 3E 08 0E 1A 3A 01 E0 B4 1F 6A A9 23 00 00 03 00 83 99 DA 28 58 00 00 00 00 62 A9 98 35 34 E7 40 FF A8 01 D9 FD 52 8F 52 8F 52 8F F6 FF F8 FF 0E 00 8C 01 9A 03 D1 00 2E 72 71 39 71 74 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 A4 1D 10 01 3A 3E 08 0E 1A 3A 01 F8 99 7F 6C A9 23 00 00 03 00 83 38 76 29 58 00 00 00 00 5D A8 39 35 D3 E4 83 FF 16 01 94 FE 52 8F 52 8F 52 8F 24 00 C8 FF BB FF 81 01 9A 03 D3 00 CE 4E 14 3A 79 74 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 A5 1D 10 01 3A 3E 08 0E 1A 3A 01 28 7B DF 6E A9 23 00 00 03 00 83 D6 11 2A 58 00 00 00 00 BF A7 E7 34 E2 E3 D2 FF 3F 00 6B FF 52 8F 52 8F 52 8F FD FF 0B 00 F5 FF 75 01 9C 03 D6 00 CF CC 1F 3A 81 74 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 A6 1D 10 01 3A 3E 08 0E 1A 3A 01 40 60 3F 71 A9 23 00 00 03 00 83 75 AD 2A 58 00 00 00 00 A0 A7 CF 34 AF E3 06 00 F1 FF 31 00 52 8F 52 8F 52 8F FC FF FC FF 00 00 67 01 9F 03 DB 00 A3 68 13 3A 89 74 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 A7 1D 10 01 3A 3E 08 0E 1A 3A 01 58 45 9F 73 A9 23 00 00 03 00 83 14 49 2B 58 00 00 00 00 F5 A7 15 35 39 E4 4C 00 8D FF F6 00 52 8F 52 8F 52 8F 10 00 F8 FF F2 FF 5B 01 A1 03 DF 00 95 C1 00 3A 91 74 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 A8 1D 10 01 3A 3E 08 0E 1A 3A 01 70 2A FF 75 A9 23 00 00 03 04 83 B3 E4 2B 58 00 00 00 00 CC A8 A8 35 95 E5 97 00 29 FF B8 01 53 8F 53 8F 53 8F FE FF 09 00 0A 00 52 01 A4 03 E3 00 F2 CA F7 39 99 74 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 A9 1D 10 01 3A 3E 08 0E 1A 3A 01 A0 0B 5F 78 A9 23 00 00 03 00 83 51 80 2C 58 00 00 00 00 4E AA C1 36 4C E7 FA 00 86 FF 86 02 53 8F 53 8F 53 8F 16 00 F5 FF 0C 00 4B 01 A5 03 E7 00 C1 EB FC 39 A1 74 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 AA 1D 10 01 3A 3E 08 0E 1A 3A 01 B8 F0 BE 7A A9 23 00 00 03 00 83 F0 1B 2D 58 00 00 00 00 AC AC 9E 38 AA E9 EF 00 CD FE C6 03 53 8F 53 8F 53 8F 03 00 EC FF ED FF 4A 01 A4 03 E7 00 79 2F C5 39 A9 74 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 AB 1D 10 01 3A 3E 08 0E 1A 3A 01 D0 D5 1E 7D A9 23 00 00 03 00 83 8F B7 2D 58 00 00 00 00 4D AF AE 3A B6 EC 16 01 63 FF 25 03 53 8F 53 8F 53 8F B7 FF 56 00 18 00 48 01 A8 03 E8 00 B0 84 F9 39 B1 74 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 AC 1D 10 01 3A 3E 08 0E 1A 3A 01 E8 BA 7E 7F A9 23 00 00 03 00 83 2E 53 2E 58 00 00 00 00 B8 B1 54 3C 41 EE 24 01 F9 FF 0B 02 53 8F 53 8F 53 8F C6 FF 1E 00 19 00 49 01 AA 03 E8 00 29 E2 17 3A B9 74 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 AD 1D 10 01 3A 3E 08 0E 1A 3A 01 00 A0 DE 81 A9 23 00 00 03 00 83 CD EE 2E 58 00 00 00 00 77 B3 8A 3D B0 EE C1 00 61 00 07 01 53 8F 53 8F 53 8F F8 FF F3 FF 06 00 4E 01 A8 03 E6 00 0F C0 19 3A C1 74 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 AE 1D 10 01 3A 3E 08 0E 1A 3A 01 30 81 3E 84 A9 23 00 00 03 00 83 6B 8A 2F 58 00 00 00 00 45 B4 37 3E 8C EE 2F 00 60 00 0C 00 53 8F 53 8F 53 8F 0D 00 F5 FF F0 FF 56 01 A4 03 E2 00 E7 FD 21 3A C9 74 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 AF 1D 10 01 3A 3E 08 0E 1A 3A 01 48 66 9E 86 A9 23 00 00 03 00 83 0A 26 30 58 00 00 00 00 DC B3 FF 3D D6 ED C0 FF 7B 00 A1 FE 53 8F 53 8F 53 8F F5 FF 03 00 FF FF 5D 01 A3 03 DF 00 A3 46 1D 3A D1 74 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 B0 1D 10 01 3A 3E 08 0E 1A 3A 01 60 4B FE 88 A9 23 00 00 03 00 83 A9 C1 30 58 00 00 00 00 44 B2 EB 3C 42 EC 43 FF 96 00 6B FD 53 8F 53 8F 53 8F DF FF 03 00 07 00 60 01 A2 03 DD 00 C6 DA 0C 3A D9 74 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 B1 1D 10 01 3A 3E 08 0E 1A 3A 01 78 30 5E 8B A9 23 00 00 03 00 83 48 5D 31 58 00 00 00 00 E4 AF 4D 3B 18 EA B7 FE 7B 00 05 FD 53 8F 53 8F 53 8F F0 FF EE FF 04 00 61 01 A0 03 DC 00 34 0D E6 39 E1 74 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 B2 1D 10 01 3A 3E 08 0E 1A 3A 01 A8 11 BE 8D A9 23 00 00 03 00 83 E6 F8 31 58 00 00 00 00 4C AD 8D 39 06 E8 F6 FE 93 00 ED FC 53 8F 53 8F 53 8F 2D 00 1F 00 DC FF 5F 01 A3 03 DC 00 36 55 BA 39 E9 74 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 B3 1D 10 01 3A 3E 08 0E 1A 3A 01 C0 F6 1D 90 A9 23 00 00 03 00 83 85 94 32 58 00 00 00 00 3D AB C8 37 60 E6 4B FF DB FF FB FD 53 8F 53 8F 53 8F 4F 00 F2 FF D2 FF 5E 01 A5 03 DB 00 C4 AB C7 39 F1 74 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 B4 1D 10 01 3A 3E 08 0E 1A 3A 01 D8 DB 7D 92 A9 23 00 00 03 00 83 24 30 33 58 00 00 00 00 F3 A9 74 36 0B E6 9D FF 76 FF 25 FF 54 8F 54 8F 54 8F 05 00 11 00 0A 00 59 01 A7 03 DE 00 42 72 BD 39 F9 74 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 B5 1D 10 01 3A 3E 08 0E 1A 3A 01 F0 C0 DD 94 A9 23 00 00 03 00 83 C3 CB 33 58 00 00 00 00 7B A9 BB 35 12 E6 10 00 BE FF D9 FF 54 8F 54 8F 54 8F E8 FF 03 00 17 00 4F 01 A9 03 E2 00 10 E3 D2 39 01 75 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 B6 1D 10 01 3A 3E 08 0E 1A 3A 01 08 A6 3D 97 A9 23 00 00 03 00 83 62 67 34 58 00 00 00 00 AB A9 AB 35 51 E6 53 00 B6 FF 87 00 54 8F 54 8F 54 8F F2 FF 00 00 02 00 47 01 AB 03 E5 00 90 F4 D0 39 09 75 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 B7 1D 10 01 3A 3E 08 0E 1A 3A 01 38 87 9D 99 A9 23 00 00 03 04 83 00 03 35 58 00 00 00 00 61 AA 0F 36 03 E7 9B 00 A2 FF 4A 01 54 8F 54 8F 54 8F 0C 00 E4 FF F3 FF 41 01 AC 03 E7 00 CC 5D B1 39 11 75 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 B8 1D 10 01 3A 3E 08 0E 1A 3A 01 50 6C FD 9B A9 23 00 00 03 00 83 9F 9E 35 58 00 00 00 00 BC AB 1B 37 4C E8 BE 00 7E FF 7A 02 54 8F 54 8F 54 8F 30 00 C1 FF E4 FF 3F 01 AA 03 E7 00 34 79 04 3A 19 75 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 B9 1D 10 01 3A 3E 08 0E 1A 3A 01 68 51 5D 9E A9 23 00 00 03 00 83 3E 3A 36 58 00 00 00 00 AD AD BE 38 EF EA AB 00 0A FF 3E 03 54 8F 54 8F 54 8F F9 FF 0B 00 FA FF 3F 01 A9 03 E5 00 FB 14 04 3A 21 75 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 BA 1D 10 01 3A 3E 08 0E 1A 3A 01 80 36 BD A0 A9 23 00 00 03 00 83 DD D5 36 58 00 00 00 00 AD AF 51 3A DF ED 74 00 E8 FE CB 02 54 8F 54 8F 54 8F D5 FF 41 00 16 00 41 01 AC 03 E5 00 52 E4 36 3A 29 75 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 BB 1D 10 01 3A 3E 08 0E 1A 3A 01 B0 17 1D A3 A9 23 00 00 03 00 83 7B 71 37 58 00 00 00 00 27 B1 4D 3B E8 EF 58 00 92 FF 85 01 54 8F 54 8F 54 8F B6 FF 2C 00 30 00 43 01 AE 03 E5 00 B9 14 73 3A 31 75 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 BC 1D 10 01 3A 3E 08 0E 1A 3A 01 C8 FC 7C A5 A9 23 00 00 03 00 83 1A 0D 38 58 00 00 00 00 E1 B1 E5 3B 8E F0 23 00 17 00 4D 00 54 8F 54 8F 54 8F DC FF 15 00 18 00 48 01 AD 03 E5 00 EB 13 82 3A 39 75 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 BD 1D 10 01 3A 3E 08 0E 1A 3A 01 E0 E1 DC A7 A9 23 00 00 03 00 83 B9 A8 38 58 00 00 00 00 CD B1 E7 3B 39 F0 0E 00 81 00 47 FF 54 8F 54 8F 54 8F EB FF 10 00 11 00 4D 01 AC 03 E4 00 7B B8 81 3A 41 75 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 BE 1D 10 01 3A 3E 08 0E 1A 3A 01 F8 C6 3C AA A9 23 00 00 03 00 83 58 44 39 58 00 00 00 00 38 B1 77 3B 07 EF D1 FF 65 00 AB FE 54 8F 54 8F 54 8F 07 00 EC FF F8 FF 54 01 AA 03 E1 00 BD 5F 4A 3A 49 75 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 BF 1D 10 01 3A 3E 08 0E 1A 3A 01 28 A8 9C AC A9 23 00 00 03 04 83 F6 DF 39 58 00 00 00 00 17 B0 96 3A A9 ED 80 FF 6E 00 3D FE 55 8F 55 8F 55 8F FF FF E4 FF F7 FF 58 01 A7 03 DF 00 91 04 30 3A 51 75 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 C0 1D 10 01 3A 3E 08 0E 1A 3A 01 40 8D FC AE A9 23 00 00 03 00 83 95 7B 3A 58 00 00 00 00 9C AE 81 39 34 EC 5D FF 6F 00 CE FD 55 8F 55 8F 55 8F 17 00 05 00 F0 FF 5A 01 A7 03 DD 00 C8 43 19 3A 59 75 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 C1 1D 10 01 3A 3E 08 0E 1A 3A 01 58 72 5C B1 A9 23 00 00 03 04 83 34 17 3B 58 00 00 00 00 E1 AC 23 38 A5 EA 14 FF 47 00 C4 FD 55 8F 55 8F 55 8F 15 00 07 00 F7 FF 5B 01 A7 03 DD 00 58 9B 6B 39 61 75 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 C2 1D 10 01 3A 3E 08 0E 1A 3A 01 70 57 BC B3 A9 23 00 00 03 00 83 D3 B2 3B 58 00 00 00 00 03 AB 99 36 0E E9 62 FF 78 00 65 FD 55 8F 55 8F 55 8F 1A 00 24 00 EC FF 58 01 AA 03 DD 00 F4 88 C9 39 69 75 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 C3 1D 10 01 3A 3E 08 0E 1A 3A 01 88 3C 1C B6 A9 23 00 00 03 00 83 72 4E 3C 58 00 00 00 00 7A A9 FC 34 1D E7 90 FF 39 00 FE FD 55 8F 55 8F 55 8F 38 00 DB FF DA FF 55 01 AA 03 DD 00 E8 76 F6 39 71 75 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 C4 1D 10 01 3A 3E 08 0E 1A 3A 01 B8 1D 7C B8 A9 23 00 00 03 00 83 10 EA 3C 58 00 00 00 00 6F A8 B0 33 0A E6 E1 FF E7 FF C6 FE 55 8F 55 8F 55 8F 01 00 E2 FF FF FF 4E 01 AA 03 DF 00 9C 94 06 3A 79 75 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 C5 1D 10 01 3A 3E 08 0E 1A 3A 01 D0 02 DC BA A9 23 00 00 03 00 83 AF 85 3D 58 00 00 00 00 F8 A7 02 33 AE E5 F4 FF DE FF B7 FF 55 8F 55 8F 55 8F E7 FF FE FF 07 00 44 01 AB 03 E2 00 BD C9 10 3A 81 75 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 C6 1D 10 01 3A 3E 08 0E 1A 3A 01 E8 E7 3B BD A9 23 00 00 03 00 83 4E 21 3E 58 00 00 00 00 02 A8 EF 32 D5 E5 2C 00 C2 FF 6E 00 55 8F 55 8F 55 8F F5 FF 0A 00 00 00 3A 01 AE 03 E5 00 72 58 07 3A 89 75 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 C7 1D 10 01 3A 3E 08 0E 1A 3A 01 00 CD 9B BF A9 23 00 00 03 04 83 ED BC 3E 58 00 00 00 00 8E A8 4E 33 7E E6 78 00 9D FF 35 01 55 8F 55 8F 55 8F 0F 00 FD FF F6 FF 32 01 B0 03 E7 00 77 D5 06 3A 91 75 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 C8 1D 10 01 3A 3E 08 0E 1A 3A 01 30 AE FB C1 A9 23 00 00 03 00 83 8B 58 3F 58 00 00 00 00 BD A9 3B 34 DD E7 C8 00 5A FF 5A 02 55 8F 55 8F 55 8F 19 00 F5 FF F3 FF 2E 01 B1 03 E7 00 5C A1 A7 39 99 75 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 C9 1D 10 01 3A 3E 08 0E 1A 3A 01 48 93 5B C4 A9 23 00 00 03 00 83 2A F4 3F 58 00 00 00 00 9D AB C6 35 49 EA DE 00 FB FE EF 02 55 8F 55 8F 55 8F 00 00 39 00 FD FF 2D 01 B3 03 E6 00 FB 6D CA 39 A1 75 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 CA 1D 10 01 3A 3E 08 0E 1A 3A 01 60 78 BB C6 A9 23 00 00 03 00 83 C9 8F 40 58 00 00 00 00 85 AD FF 36 89 EC BB 00 3F FF 3A 02 55 8F 55 8F 55 8F C3 FF 00 00 12 00 2C 01 B5 03 E6 00 A0 BA 08 3A A9 75 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 CB 1D 10 01 3A 3E 08 0E 1A 3A 01 78 5D 1B C9 A9 23 00 00 03 00 83 68 2B 41 58 00 00 00 00 BE AE EC 37 37 EE 2E 00 87 FF 5E 01 56 8F 56 8F 56 8F D4 FF 11 00 0F 00 2D 01 B5 03 E5 00 31 46 D7 39 B1 75 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 CC 1D 10 01 3A 3E 08 0E 1A 3A 01 90 42 7B CB A9 23 00 00 03 00 83 07 C7 41 58 00 00 00 00 35 AF 3A 38 3D EF F4 FF 93 FF 60 00 56 8F 56 8F 56 8F D8 FF 0A 00 12 00 30 01 B5 03 E4 00 C4 F1 DF 39 B9 75 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 CD 1D 10 01 3A 3E 08 0E 1A 3A 01 C0 23 DB CD A9 23 00 00 03 00 83 A5 62 42 58 00 00 00 00 0F AF 0B 38 60 EF ED FF 14 00 78 FF 56 8F 56 8F 56 8F FB FF 04 00 FB FF 34 01 B5 03 E2 00 8F 57 DE 39 C1 75 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 CE 1D 10 01 3A 3E 08 0E 1A 3A 01 D8 08 3B D0 A9 23 00 00 03 00 83 44 FE 42 58 00 00 00 00 6F AE 65 37 BC EE B2 FF 22 00 D9 FE 56 8F 56 8F 56 8F F0 FF E6 FF FE FF 38 01 B2 03 DF 00 2A 60 FD 39 C9 75 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 CF 1D 10 01 3A 3E 08 0E 1A 3A 01 F0 ED 9A D2 A9 23 00 00 03 04 83 E3 99 43 58 00 00 00 00 50 AD 7B 36 B3 ED 4D FF 40 00 4E FE 56 8F 56 8F 56 8F E5 FF F4 FF F8 FF 3A 01 B1 03 DD 00 55 5A 03 3A D1 75 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 D0 1D 10 01 3A 3E 08 0E 1A 3A 01 28 AA F9 D4 A9 23 00 00 03 00 83 82 35 44 58 00 00 00 00 B5 AB 3F 35 4B EC 29 FF 80 00 96 FD 56 8F 56 8F 56 8F E9 FF 1A 00 00 00 39 01 B2 03 DC 00 8F 5D 74 39 D9 75 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 D1 1D 10 01 3A 3E 08 0E 1A 3A 01 58 8B 59 D7 A9 23 00 00 03 00 83 20 D1 44 58 00 00 00 00 D0 A9 A6 33 2C EA 44 FF AA 00 29 FD 56 8F 56 8F 56 8F 17 00 26 00 EB FF 38 01 B5 03 DC 00 A8 DE D0 39 E1 75 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 D2 1D 10 01 3A 3E 08 0E 1A 3A 01 70 70 B9 D9 A9 23 00 00 03 00 83 BF 6C 45 58 00 00 00 00 2D A8 D1 31 C7 E7 DF FF 97 00 64 FD 56 8F 56 8F 56 8F 31 00 0F 00 E8 FF 34 01 B8 03 DC 00 26 DE 0D 3A E9 75 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 D3 1D 10 01 3A 3E 08 0E 1A 3A 01 88 55 19 DC A9 23 00 00 03 00 83 5E 08 46 58 00 00 00 00 76 A7 6F 30 F4 E5 17 00 07 00 32 FF 56 8F 56 8F 56 8F 22 00 AA FF 00 00 2F 01 B6 03 DD 00 D4 E5 93 3A F1 75 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 D4 1D 10 01 3A 3E 08 0E 1A 3A 01 A0 3A 79 DE A9 23 00 00 03 00 83 FD A3 46 58 00 00 00 00 7D A7 42 30 EB E5 35 00 F6 FF 64 00 56 8F 56 8F 56 8F D1 FF 0B 00 17 00 25 01 B7 03 E0 00 49 A9 9B 3A F9 75 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 D5 1D 10 01 3A 3E 08 0E 1A 3A 01 D0 1B D9 E0 A9 23 00 00 03 00 83 9B 3F 47 58 00 00 00 00 FA A7 B7 30 3F E6 57 00 00 00 B8 00 56 8F 56 8F 56 8F ED FF 1C 00 FA FF 1B 01 BA 03 E1 00 95 D2 98 3A 01 76 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 D6 1D 10 01 3A 3E 08 0E 1A 3A 01 E8 00 39 E3 A9 23 00 00 03 00 83 3A DB 47 58 00 00 00 00 A8 A8 4E 31 D6 E6 61 00 C8 FF 15 01 56 8F 56 8F 56 8F 03 00 FA FF F3 FF 15 01 BC 03 E1 00 62 9C 96 3A 09 76 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 D7 1D 10 01 3A 3E 08 0E 1A 3A 01 00 E6 98 E5 A9 23 00 00 03 04 83 D9 76 48 58 00 00 00 00 82 A9 20 32 BE E7 7A 00 C2 FF D0 01 57 8F 57 8F 57 8F 23 00 DA FF E8 FF 12 01 BC 03 E0 00 DA B6 8F 3A 11 76 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 D8 1D 10 01 3A 3E 08 0E 1A 3A 01 18 CB F8 E7 A9 23 00 00 03 00 83 78 12 49 58 00 00 00 00 0A AB A7 33 79 E9 C2 00 9B FF E6 02 57 8F 57 8F 57 8F 36 00 DB FF DF FF 13 01 BB 03 DE 00 6C 02 80 3A 19 76 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 D9 1D 10 01 3A 3E 08 0E 1A 3A 01 30 B0 58 EA A9 23 00 00 03 00 83 17 AE 49 58 00 00 00 00 4A AD CA 35 28 EC D3 00 1A FF 8C 03 57 8F 57 8F 57 8F 29 00 F9 FF D5 FF 18 01 BA 03 DA 00 B8 49 1B 3A 21 76 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 DA 1D 10 01 3A 3E 08 0E 1A 3A 01 60 91 B8 EC A9 23 00 00 03 00 83 B5 49 4A 58 00 00 00 00 6E AF 83 37 40 EF 73 00 09 FF D5 02 57 8F 57 8F 57 8F A4 FF 27 00 28 00 1B 01 BA 03 D8 00 CA 59 A0 39 29 76 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 DB 1D 10 01 3A 3E 08 0E 1A 3A 01 78 76 18 EF A9 23 00 00 03 00 83 54 E5 4A 58 00 00 00 00 CD B0 B8 38 04 F1 51 00 EE FF 14 01 57 8F 57 8F 57 8F C0 FF 4C 00 29 00 1E 01 BC 03 D8 00 F6 30 14 3A 31 76 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 DC 1D 10 01 3A 3E 08 0E 1A 3A 01 90 5B 78 F1 A9 23 00 00 03 00 83 F3 80 4B 58 00 00 00 00 17 B1 09 39 27 F1 D7 FF 54 00 BA FF 57 8F 57 8F 57 8F D7 FF 16 00 21 00 24 01 BC 03 D7 00 FD CA 1F 3A 39 76 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 DD 1D 10 01 3A 3E 08 0E 1A 3A 01 A8 40 D8 F3 A9 23 00 00 03 00 83 92 1C 4C 58 00 00 00 00 AF B0 FD 38 3D F0 D9 FF 67 00 20 FF 57 8F 57 8F 57 8F 2F 00 D1 FF E3 FF 2E 01 B9 03 D4 00 4D 17 1D 3A 41 76 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 DE 1D 10 01 3A 3E 08 0E 1A 3A 01 D8 21 38 F6 A9 23 00 00 03 00 83 30 B8 4C 58 00 00 00 00 11 B0 A5 38 B5 EF A2 FF 1F 00 67 FF 57 8F 57 8F 57 8F 08 00 E0 FF F0 FF 36 01 B4 03 D0 00 B0 7E 32 3A 49 76 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 DF 1D 10 01 3A 3E 08 0E 1A 3A 01 F0 06 98 F8 A9 23 00 00 03 04 83 CF 53 4D 58 00 00 00 00 A7 AF 80 38 99 EF B2 FF 03 00 AC FF 57 8F 57 8F 57 8F 00 00 06 00 F4 FF 3C 01 B2 03 CD 00 B2 0B 33 3A 51 76 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 E0 1D 10 01 3A 3E 08 0E 1A 3A 01 08 EC F7 FA A9 23 00 00 03 04 83 6E EF 4D 58 00 00 00 00 70 AF 6B 38 96 EF D3 FF 1D 00 C9 FF 57 8F 57 8F 57 8F ED FF 16 00 0D 00 40 01 B1 03 CC 00 28 29 38 3A 59 76 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 E1 1D 10 01 3A 3E 08 0E 1A 3A 01 20 D1 57 FD A9 23 00 00 03 04 83 0D 8B 4E 58 00 00 00 00 55 AF 6F 38 65 EF F2 FF 32 00 E1 FF 57 8F 57 8F 57 8F F6 FF 15 00 08 00 44 01 B1 03 CC 00 75 E4 06 3A 61 76 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 E2 1D 10 01 3A 3E 08 0E 1A 3A 01 38 B6 B7 FF A9 23 00 00 03 04 83 AC 26 4F 58 00 00 00 00 43 AF 7A 38 1D EF 00 00 35 00 E4 FF 58 8F 58 8F 58 8F F9 FF 0B 00 08 00 48 01 B1 03 CB 00 04 CD BC 39 69 76 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 E3 1D 10 01 3A 3E 08 0E 1A 3A 01 68 97 17 02 AA 23 00 00 03 04 83 4A C2 4F 58 00 00 00 00 34 AF 85 38 DC EE 00 00 2C 00 E7 FF 58 8F 58 8F 58 8F FE FF 0A 00 01 00 4C 01 B1 03 CB 00 48 17 BB 39 71 76 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 E4 1D 10 01 3A 3E 08 0E 1A 3A 01 80 7C 77 04 AA 23 00 00 03 04 83 E9 5D 50 58 00 00 00 00 25 AF 83 38 A6 EE FE FF 10 00 DE FF 58 8F 58 8F 58 8F 01 00 FD FF FA FF 4F 01 B0 03 CA 00 51 A4 3F 39 79 76 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 E5 1D 10 01 3A 3E 08 0E 1A 3A 01 98 61 D7 06 AA 23 00 00 03 04 83 88 F9 50 58 00 00 00 00 0C AF 6C 38 89 EE F0 FF 01 00 D9 FF 58 8F 58 8F 58 8F FD FF F7 FF FB FF 52 01 AF 03 C9 00 35 C6 01 39 81 76 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 E6 1D 10 01 3A 3E 08 0E 1A 3A 01 B0 46 37 09 AA 23 00 00 03 04 83 27 95 51 58 00 00 00 00 DE AE 4A 38 74 EE E6 FF 06 00 BF FF 58 8F 58 8F 58 8F 00 00 08 00 FC FF 55 01 AE 03 C8 00 52 4E FD 38 89 76 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 E7 1D 10 01 3A 3E 08 0E 1A 3A 01 E0 27 97 0B AA 23 00 00 03 04 83 C5 30 52 58 00 00 00 00 AE AE 0B 38 4A EE F9 FF F2 FF C3 FF 58 8F 58 8F 58 8F F7 FF FB FF 00 00 57 01 AD 03 C8 00 5B 82 B4 38 91 76 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 E8 1D 10 01 3A 3E 08 0E 1A 3A 01 F8 0C F7 0D AA 23 00 00 03 04 83 64 CC 52 58 00 00 00 00 8E AE D7 37 35 EE 00 00 EE FF D9 FF 58 8F 58 8F 58 8F F7 FF 06 00 03 00 58 01 AD 03 C8 00 B5 0C 3A 38 99 76 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 E9 1D 10 01 3A 3E 08 0E 1A 3A 01 10 F2 56 10 AA 23 00 00 03 04 83 03 68 53 58 00 00 00 00 82 AE B8 37 21 EE 07 00 00 00 EB FF 58 8F 58 8F 58 8F F7 FF 02 00 00 00 59 01 AD 03 C7 00 5C 2D 09 38 A1 76 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 EA 1D 10 01 3A 3E 08 0E 1A 3A 01 28 D7 B6 12 AA 23 00 00 03 04 83 A2 03 54 58 00 00 00 00 7D AE AC 37 1B EE 06 00 FC FF 02 00 58 8F 58 8F 58 8F F3 FF 02 00 FF FF 5A 01 AD 03 C7 00 DD 2C D4 37 A9 76 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 EB 1D 10 01 3A 3E 08 0E 1A 3A 01 40 BC 16 15 AA 23 00 00 03 04 43 41 9F 54 58 00 00 00 00 84 AE B0 37 1D EE 06 00 00 00 0A 00 58 8F 58 8F 58 8F F4 FF 04 00 02 00 5B 01 AD 03 C7 00 20 42 BF 37 B1 76 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 EC 1D 10 01 3A 3E 08 0E 1A 3A 01 70 9D 76 17 AA 23 00 00 03 04 43 DF 3A 55 58 00 00 00 00 8C AE BC 37 14 EE 00 00 13 00 05 00 58 8F 58 8F 58 8F F5 FF 05 00 04 00 5C 01 AC 03 C7 00 69 E7 83 37 B9 76 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 ED 1D 10 01 3A 3E 08 0E 1A 3A 01 88 82 D6 19 AA 23 00 00 03 04 43 7E D6 55 58 00 00 00 00 93 AE D4 37 FD ED 00 00 1F 00 0A 00 58 8F 58 8F 58 8F FC FF 02 00 FE FF 5D 01 AC 03 C7 00 56 C0 11 37 C1 76 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 EE 1D 10 01 3A 3E 08 0E 1A 3A 01 A0 67 36 1C AA 23 00 00 03 04 43 1D 72 56 58 00 00 00 00 9B AE DD 37 E7 ED 0E 00 06 00 00 00 59 8F 59 8F 59 8F FD FF 00 00 FE FF 5E 01 AC 03 C6 00 E0 72 1B 37 C9 76 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 EF 1D 10 01 3A 3E 08 0E 1A 3A 01 B8 4C 96 1E AA 23 00 00 03 04 43 BC 0D 57 58 00 00 00 00 A0 AE DB 37 D8 ED 0B 00 00 00 FA FF 59 8F 59 8F 59 8F 01 00 04 00 FB FF 5F 01 AC 03 C6 00 E4 89 FD 36 D1 76 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 F0 1D 10 01 3A 3E 08 0E 1A 3A 01 E8 2D F6 20 AA 23 00 00 03 04 43 5A A9 57 58 00 00 00 00 9E AE C8 37 D1 ED 02 00 F2 FF F4 FF 59 8F 59 8F 59 8F FF FF 00 00 FA FF 60 01 AC 03 C5 00 4A C1 09 37 D9 76 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 F1 1D 10 01 3A 3E 08 0E 1A 3A 01 00 13 56 23 AA 23 00 00 03 04 43 F9 44 58 58 00 00 00 00 94 AE B5 37 D0 ED FC FF F8 FF F6 FF 59 8F 59 8F 59 8F F9 FF 00 00 F9 FF 61 01 AC 03 C4 00 9E 6E 02 37 E1 76 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 F2 1D 10 01 3A 3E 08 0E 1A 3A 01 18 F8 B5 25 AA 23 00 00 03 04 43 98 E0 58 58 00 00 00 00 8F AE A8 37 CF ED FF FF 04 00 00 00 59 8F 59 8F 59 8F F5 FF FB FF FE FF 61 01 AB 03 C4 00 7B D9 43 37 E9 76 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 F3 1D 10 01 3A 3E 08 0E 1A 3A 01 30 DD 15 28 AA 23 00 00 03 04 43 37 7C 59 58 00 00 00 00 92 AE B2 37 CA ED 03 00 0E 00 0A 00 59 8F 59 8F 59 8F FD FF FE FF FA FF 62 01 AB 03 C3 00 7E 65 57 37 F1 76 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 F4 1D 10 01 3A 3E 08 0E 1A 3A 01 48 C2 75 2A AA 23 00 00 03 04 43 D6 17 5A 58 00 00 00 00 A4 AE CE 37 D1 ED F7 FF 05 00 32 00 59 8F 59 8F 59 8F 00 00 F5 FF F5 FF 62 01 AA 03 C2 00 49 7B ED 37 F9 76 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 F5 1D 10 01 3A 3E 08 0E 1A 3A 01 78 A3 D5 2C AA 23 00 00 03 04 43 74 B3 5A 58 00 00 00 00 B4 AE F1 37 02 EE F1 FF FA FF 2F 00 59 8F 59 8F 59 8F FA FF 08 00 00 00 63 01 AA 03 C2 00 9E 05 FF 37 01 77 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 F6 1D 10 01 3A 3E 08 0E 1A 3A 01 90 88 35 2F AA 23 00 00 03 04 83 13 4F 5B 58 00 00 00 00 BF AE 0B 38 20 EE F8 FF 04 00 14 00 59 8F 59 8F 59 8F F7 FF 09 00 01 00 64 01 AB 03 C2 00 39 7A 1C 38 09 77 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 F7 1D 10 01 3A 3E 08 0E 1A 3A 01 A8 6D 95 31 AA 23 00 00 03 04 83 B2 EA 5B 58 00 00 00 00 C2 AE 17 38 20 EE FF FF 07 00 00 00 59 8F 59 8F 59 8F FC FF 07 00 FE FF 65 01 AB 03 C2 00 E8 BC 36 38 11 77 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 F8 1D 10 01 3A 3E 08 0E 1A 3A 01 C0 52 F5 33 AA 23 00 00 03 04 83 51 86 5C 58 00 00 00 00 BB AE 12 38 0D EE 00 00 0D 00 EF FF 59 8F 59 8F 59 8F FA FF 03 00 01 00 65 01 AB 03 C2 00 2F 07 3D 38 19 77 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 F9 1D 10 01 3A 3E 08 0E 1A 3A 01 F0 33 55 36 AA 23 00 00 03 04 83 EF 21 5D 58 00 00 00 00 B0 AE 0A 38 EE ED FB FF 09 00 E7 FF 59 8F 59 8F 59 8F 01 00 FE FF FB FF 66 01 AB 03 C2 00 2C 03 2D 38 21 77 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 FA 1D 10 01 3A 3E 08 0E 1A 3A 01 08 19 B5 38 AA 23 00 00 03 04 83 8E BD 5D 58 00 00 00 00 9C AE FB 37 DE ED F2 FF FC FF F4 FF 5A 8F 5A 8F 5A 8F FA FF F8 FF F9 FF 67 01 AA 03 C2 00 06 FE 0C 38 29 77 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 FB 1D 10 01 3A 3E 08 0E 1A 3A 01 20 FE 14 3B AA 23 00 00 03 04 83 2D 59 5E 58 00 00 00 00 8A AE F1 37 E4 ED F5 FF FF FF F2 FF 5A 8F 5A 8F 5A 8F F9 FF 05 00 04 00 67 01 AA 03 C2 00 A9 FA 02 38 31 77 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 FC 1D 10 01 3A 3E 08 0E 1A 3A 01 38 E3 74 3D AA 23 00 00 03 04 43 CC F4 5E 58 00 00 00 00 7E AE F0 37 D5 ED FD FF 12 00 F2 FF 5A 8F 5A 8F 5A 8F FD FF 06 00 00 00 68 01 AA 03 C2 00 FE C0 F8 37 39 77 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 FD 1D 10 01 3A 3E 08 0E 1A 3A 01 50 C8 D4 3F AA 23 00 00 03 04 43 6B 90 5F 58 00 00 00 00 7A AE F4 37 C8 ED FF FF 05 00 00 00 5A 8F 5A 8F 5A 8F FE FF 03 00 FD FF 68 01 AA 03 C2 00 D3 A5 BF 37 41 77 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 FE 1D 10 01 3A 3E 08 0E 1A 3A 01 80 A9 34 42 AA 23 00 00 03 04 43 09 2C 60 58 00 00 00 00 79 AE F7 37 C7 ED 00 00 03 00 02 00 5A 8F 5A 8F 5A 8F FA FF 03 00 00 00 68 01 AA 03 C2 00 95 29 9C 37 49 77 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 FF 1D 10 01 3A 3E 08 0E 1A 3A 01 98 8E 94 44 AA 23 00 00 03 04 43 A8 C7 60 58 00 00 00 00 78 AE F9 37 C3 ED FE FF 04 00 FF FF 5A 8F 5A 8F 5A 8F FC FF 00 00 00 00 69 01 AA 03 C3 00 73 B0 9C 37 51 77 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 80 1E 10 01 3A 3E 08 0E 1A 3A 01 B0 73 F4 46 AA 23 00 00 03 04 43 47 63 61 58 00 00 00 00 74 AE F7 37 C0 ED FC FF 01 00 FD FF 5A 8F 5A 8F 5A 8F FA FF 03 00 00 00 69 01 AA 03 C3 00 FC 53 89 37 59 77 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 81 1E 10 01 3A 3E 08 0E 1A 3A 01 C8 58 54 49 AA 23 00 00 03 04 43 E6 FE 61 58 00 00 00 00 6F AE F7 37 BA ED 00 00 03 00 FC FF 5A 8F 5A 8F 5A 8F FC FF 02 00 FE FF 69 01 AA 03 C3 00 9C C0 26 37 61 77 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 82 1E 10 01 3A 3E 08 0E 1A 3A 01 F8 39 B4 4B AA 23 00 00 03 04 43 84 9A 62 58 00 00 00 00 6C AE F5 37 B5 ED FC FF 08 00 02 00 5A 8F 5A 8F 5A 8F FA FF 00 00 01 00 69 01 AA 03 C3 00 4F C5 AA 36 69 77 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 83 1E 10 01 3A 3E 08 0E 1A 3A 01 10 1F 14 4E AA 23 00 00 03 04 43 23 36 63 58 00 00 00 00 6A AE FC 37 AE ED FE FF 09 00 00 00 5A 8F 5A 8F 5A 8F FB FF 00 00 00 00 69 01 AA 03 C3 00 38 D1 66 36 71 77 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 84 1E 10 01 3A 3E 08 0E 1A 3A 01 28 04 74 50 AA 23 00 00 03 04 43 C2 D1 63 58 00 00 00 00 68 AE 02 38 A9 ED FF FF 06 00 00 00 5A 8F 5A 8F 5A 8F FD FF 03 00 01 00 69 01 AA 03 C4 00 B6 66 74 36 79 77 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 85 1E 10 01 3A 3E 08 0E 1A 3A 01 40 E9 D3 52 AA 23 00 00 03 04 43 61 6D 64 58 00 00 00 00 69 AE 0C 38 A4 ED FF FF 07 00 07 00 5B 8F 5B 8F 5B 8F 00 00 01 00 00 00 69 01 AA 03 C4 00 4E E8 6D 36 81 77 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 86 1E 10 01 3A 3E 08 0E 1A 3A 01 58 CE 33 55 AA 23 00 00 03 04 43 00 09 65 58 00 00 00 00 6E AE 18 38 A5 ED FF FF 05 00 0D 00 5B 8F 5B 8F 5B 8F 00 00 01 00 00 00 69 01 AA 03 C4 00 4D 1E 75 36 89 77 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 87 1E 10 01 3A 3E 08 0E 1A 3A 01 88 AF 93 57 AA 23 00 00 03 04 43 9E A4 65 58 00 00 00 00 72 AE 1F 38 AB ED 00 00 FF FF 06 00 5B 8F 5B 8F 5B 8F FD FF 02 00 00 00 6A 01 AA 03 C4 00 9C BA 8C 36 91 77 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 88 1E 10 01 3A 3E 08 0E 1A 3A 01 A0 94 F3 59 AA 23 00 00 03 04 43 3D 40 66 58 00 00 00 00 75 AE 23 38 B0 ED FF FF 00 00 08 00 5B 8F 5B 8F 5B 8F FE FF 00 00 00 00 6A 01 A9 03 C5 00 4E C6 5B 36 99 77 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 89 1E 10 01 3A 3E 08 0E 1A 3A 01 B8 79 53 5C AA 23 00 00 03 04 43 DC DB 66 58 00 00 00 00 79 AE 27 38 B4 ED 03 00 FE FF 07 00 5B 8F 5B 8F 5B 8F FD FF FD FF FC FF 6A 01 A9 03 C5 00 1E 75 7C 36 A1 77 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 8A 1E 10 01 3A 3E 08 0E 1A 3A 01 D0 5E B3 5E AA 23 00 00 03 04 43 7B 77 67 58 00 00 00 00 7E AE 27 38 BB ED 02 00 F9 FF 00 00 5B 8F 5B 8F 5B 8F FE FF 00 00 01 00 6A 01 A9 03 C5 00 09 01 94 36 A9 77 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 8B 1E 10 01 3A 3E 08 0E 1A 3A 01 00 40 13 61 AA 23 00 00 03 04 43 19 13 68 58 00 00 00 00 7D AE 27 38 B9 ED 00 00 0C 00 FA FF 5B 8F 5B 8F 5B 8F FD FF 08 00 02 00 6B 01 A9 03 C5 00 9B 3A 1F 37 B1 77 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 8C 1E 10 01 3A 3E 08 0E 1A 3A 01 18 25 73 63 AA 23 00 00 03 04 43 B8 AE 68 58 00 00 00 00 7E AE 2B 38 A8 ED 00 00 0A 00 FF FF 5B 8F 5B 8F 5B 8F FD FF 00 00 02 00 6B 01 A9 03 C5 00 0C B8 33 37 B9 77 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 8D 1E 10 01 3A 3E 08 0E 1A 3A 01 30 0A D3 65 AA 23 00 00 03 04 43 57 4A 69 58 00 00 00 00 80 AE 30 38 9E ED 01 00 07 00 00 00 5B 8F 5B 8F 5B 8F FC FF 00 00 00 00 6B 01 A9 03 C6 00 E2 ED 23 37 C1 77 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 8E 1E 10 01 3A 3E 08 0E 1A 3A 01 48 EF 32 68 AA 23 00 00 03 04 43 F6 E5 69 58 00 00 00 00 82 AE 31 38 9B ED 06 00 FC FF FF FF 5B 8F 5B 8F 5B 8F FD FF 04 00 FF FF 6B 01 A9 03 C6 00 4A 8D 33 37 C9 77 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 8F 1E 10 01 3A 3E 08 0E 1A 3A 01 60 D4 92 6A AA 23 00 00 03 04 43 95 81 6A 58 00 00 00 00 84 AE 2C 38 9B ED 00 00 FE FF 05 00 5B 8F 5B 8F 5B 8F FA FF 00 00 03 00 6B 01 A9 03 C6 00 6C 59 3A 37 D1 77 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 90 1E 10 01 3A 3E 08 0E 1A 3A 01 90 B5 F2 6C AA 23 00 00 03 04 43 33 1D 6B 58 00 00 00 00 89 AE 33 38 9D ED 00 00 01 00 0B 00 5B 8F 5B 8F 5B 8F FF FF 01 00 FB FF 6B 01 A9 03 C6 00 49 60 2A 37 D9 77 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 91 1E 10 01 3A 3E 08 0E 1A 3A 01 A8 9A 52 6F AA 23 00 00 03 04 43 D2 B8 6B 58 00 00 00 00 8E AE 34 38 A5 ED 00 00 00 00 0D 00 5C 8F 5C 8F 5C 8F FC FF FE FF FF FF 6B 01 A9 03 C6 00 6E 4F FC 36 E1 77 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 92 1E 10 01 3A 3E 08 0E 1A 3A 01 C0 7F B2 71 AA 23 00 00 03 04 43 71 54 6C 58 00 00 00 00 90 AE 39 38 A9 ED 01 00 03 00 03 00 5C 8F 5C 8F 5C 8F FC FF 01 00 FE FF 6B 01 A9 03 C6 00 09 8D BA 36 E9 77 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 93 1E 10 01 3A 3E 08 0E 1A 3A 01 D8 64 12 74 AA 23 00 00 03 04 43 10 F0 6C 58 00 00 00 00 92 AE 3B 38 AA ED 00 00 02 00 03 00 5C 8F 5C 8F 5C 8F FA FF FF FF 00 00 6B 01 A9 03 C6 00 5D AD BB 36 F1 77 00 00
04 00 04 00 17 00 00 00 10 00 45 00 08 94 1E 10 01 3A 3E 08 0E 1A 3A 01 08 46 72 76 AA 23 00 00 03 04 43 AE 8B 6D 58 00 00 00 00 96 AE 47 38 A7 ED FF FF 07 00 05 00 5C 8F 5C 8F 5C 8F 00 00 00 00 FD FF 6C 01 A8 03 C6 00 6C E2 B0 36 F9 77 00 00

View File

@@ -1,125 +0,0 @@
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,152 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,168 ,228 , 0 , 80 ,169 ,35 ,0 ,0 ,3 ,4 , 67 ,198 , 42 , 34 ,88 ,0 ,0 ,0 ,0 , 10 ,176 , 36 ,58 , 76 ,240 ,235 ,255 , 20 , 0 ,248 ,255 ,81 ,143 ,81 ,143 ,81 ,143 , 10 , 0 , 0 , 0 ,254 ,255 ,169 ,1 ,143 ,3 ,190 ,0 ,138 ,151 ,149 ,54 , 25 ,116 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,153 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,192 ,201 , 96 , 82 ,169 ,35 ,0 ,0 ,3 ,4 , 67 ,101 ,198 , 34 ,88 ,0 ,0 ,0 ,0 ,244 ,175 , 36 ,58 , 71 ,240 ,233 ,255 ,255 ,255 ,244 ,255 ,81 ,143 ,81 ,143 ,81 ,143 , 2 , 0 ,255 ,255 ,255 ,255 ,170 ,1 ,143 ,3 ,190 ,0 , 25 ,176 ,210 ,54 , 33 ,116 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,154 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,216 ,174 ,192 , 84 ,169 ,35 ,0 ,0 ,3 ,4 , 67 , 4 , 98 , 35 ,88 ,0 ,0 ,0 ,0 ,223 ,175 , 29 ,58 , 76 ,240 ,239 ,255 , 4 , 0 ,244 ,255 ,81 ,143 ,81 ,143 ,81 ,143 ,248 ,255 , 0 , 0 , 4 , 0 ,169 ,1 ,143 ,3 ,191 ,0 , 82 , 92 ,207 ,54 , 41 ,116 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,155 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,240 ,147 , 32 , 87 ,169 ,35 ,0 ,0 ,3 ,4 , 67 ,163 ,253 , 35 ,88 ,0 ,0 ,0 ,0 ,209 ,175 , 30 ,58 , 66 ,240 ,252 ,255 , 18 , 0 ,237 ,255 ,81 ,143 ,81 ,143 ,81 ,143 ,252 ,255 , 9 , 0 , 1 , 0 ,168 ,1 ,144 ,3 ,192 ,0 , 28 ,151 , 41 ,55 , 49 ,116 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,156 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 , 8 ,121 ,128 , 89 ,169 ,35 ,0 ,0 ,3 ,4 , 67 , 66 ,153 , 36 ,88 ,0 ,0 ,0 ,0 ,195 ,175 , 22 ,58 , 28 ,240 , 2 , 0 , 21 , 0 ,221 ,255 ,81 ,143 ,81 ,143 ,81 ,143 , 0 , 0 , 3 , 0 , 0 , 0 ,168 ,1 ,144 ,3 ,193 ,0 ,249 ,195 ,136 ,55 , 57 ,116 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,157 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 , 56 , 90 ,224 , 91 ,169 ,35 ,0 ,0 ,3 ,4 , 67 ,224 , 52 , 37 ,88 ,0 ,0 ,0 ,0 ,171 ,175 , 11 ,58 ,231 ,239 ,244 ,255 , 36 , 0 ,210 ,255 ,82 ,143 ,82 ,143 ,82 ,143 ,249 ,255 ,255 ,255 , 1 , 0 ,167 ,1 ,144 ,3 ,193 ,0 , 22 ,189 ,131 ,55 , 65 ,116 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,158 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 , 80 , 63 , 64 , 94 ,169 ,35 ,0 ,0 ,3 ,4 , 67 ,127 ,208 , 37 ,88 ,0 ,0 ,0 ,0 ,115 ,175 ,241 ,57 ,143 ,239 ,217 ,255 , 43 , 0 ,118 ,255 ,82 ,143 ,82 ,143 ,82 ,143 ,255 ,255 , 12 , 0 , 8 , 0 ,166 ,1 ,145 ,3 ,194 ,0 ,115 , 97 , 13 ,56 , 73 ,116 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,159 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,104 , 36 ,160 , 96 ,169 ,35 ,0 ,0 ,3 ,4 ,131 , 30 ,108 , 38 ,88 ,0 ,0 ,0 ,0 ,222 ,174 ,143 ,57 ,217 ,238 ,187 ,255 , 89 , 0 ,218 ,254 ,82 ,143 ,82 ,143 ,82 ,143 ,250 ,255 , 24 , 0 , 6 , 0 ,165 ,1 ,147 ,3 ,196 ,0 ,146 , 13 ,214 ,56 , 81 ,116 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,160 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,128 , 9 , 0 , 99 ,169 ,35 ,0 ,0 ,3 ,4 ,131 ,189 , 7 , 39 ,88 ,0 ,0 ,0 ,0 ,230 ,173 ,211 ,56 ,146 ,237 ,156 ,255 ,146 , 0 , 65 ,254 ,82 ,143 ,82 ,143 ,82 ,143 ,251 ,255 , 20 , 0 , 4 , 0 ,161 ,1 ,149 ,3 ,198 ,0 ,248 ,140 , 24 ,57 , 89 ,116 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,161 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,176 ,234 , 95 ,101 ,169 ,35 ,0 ,0 ,3 ,0 ,131 , 91 ,163 , 39 ,88 ,0 ,0 ,0 ,0 ,139 ,172 ,191 ,55 ,172 ,235 ,148 ,255 ,215 , 0 ,168 ,253 ,82 ,143 ,82 ,143 ,82 ,143 , 10 , 0 , 13 , 0 , 8 , 0 ,157 ,1 ,151 ,3 ,200 ,0 ,222 ,217 , 99 ,57 , 97 ,116 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,162 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,200 ,207 ,191 ,103 ,169 ,35 ,0 ,0 ,3 ,0 ,131 ,250 , 62 , 40 ,88 ,0 ,0 ,0 ,0 ,247 ,170 ,124 ,54 ,108 ,233 , 43 ,255 ,188 , 0 ,156 ,253 ,82 ,143 ,82 ,143 ,82 ,143 , 17 , 0 ,231 ,255 , 27 , 0 ,151 ,1 ,152 ,3 ,203 ,0 ,134 ,132 ,113 ,57 ,105 ,116 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,163 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,224 ,180 , 31 ,106 ,169 ,35 ,0 ,0 ,3 ,0 ,131 ,153 ,218 , 40 ,88 ,0 ,0 ,0 ,0 , 98 ,169 ,152 ,53 , 52 ,231 , 64 ,255 ,168 , 1 ,217 ,253 ,82 ,143 ,82 ,143 ,82 ,143 ,246 ,255 ,248 ,255 , 14 , 0 ,140 ,1 ,154 ,3 ,209 ,0 , 46 ,114 ,113 ,57 ,113 ,116 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,164 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,248 ,153 ,127 ,108 ,169 ,35 ,0 ,0 ,3 ,0 ,131 , 56 ,118 , 41 ,88 ,0 ,0 ,0 ,0 , 93 ,168 , 57 ,53 ,211 ,228 ,131 ,255 , 22 , 1 ,148 ,254 ,82 ,143 ,82 ,143 ,82 ,143 , 36 , 0 ,200 ,255 ,187 ,255 ,129 ,1 ,154 ,3 ,211 ,0 ,206 , 78 , 20 ,58 ,121 ,116 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,165 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 , 40 ,123 ,223 ,110 ,169 ,35 ,0 ,0 ,3 ,0 ,131 ,214 , 17 , 42 ,88 ,0 ,0 ,0 ,0 ,191 ,167 ,231 ,52 ,226 ,227 ,210 ,255 , 63 , 0 ,107 ,255 ,82 ,143 ,82 ,143 ,82 ,143 ,253 ,255 , 11 , 0 ,245 ,255 ,117 ,1 ,156 ,3 ,214 ,0 ,207 ,204 , 31 ,58 ,129 ,116 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,166 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 , 64 , 96 , 63 ,113 ,169 ,35 ,0 ,0 ,3 ,0 ,131 ,117 ,173 , 42 ,88 ,0 ,0 ,0 ,0 ,160 ,167 ,207 ,52 ,175 ,227 , 6 , 0 ,241 ,255 , 49 , 0 ,82 ,143 ,82 ,143 ,82 ,143 ,252 ,255 ,252 ,255 , 0 , 0 ,103 ,1 ,159 ,3 ,219 ,0 ,163 ,104 , 19 ,58 ,137 ,116 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,167 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 , 88 , 69 ,159 ,115 ,169 ,35 ,0 ,0 ,3 ,0 ,131 , 20 , 73 , 43 ,88 ,0 ,0 ,0 ,0 ,245 ,167 , 21 ,53 , 57 ,228 , 76 , 0 ,141 ,255 ,246 , 0 ,82 ,143 ,82 ,143 ,82 ,143 , 16 , 0 ,248 ,255 ,242 ,255 , 91 ,1 ,161 ,3 ,223 ,0 ,149 ,193 , 0 ,58 ,145 ,116 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,168 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,112 , 42 ,255 ,117 ,169 ,35 ,0 ,0 ,3 ,4 ,131 ,179 ,228 , 43 ,88 ,0 ,0 ,0 ,0 ,204 ,168 ,168 ,53 ,149 ,229 ,151 , 0 , 41 ,255 ,184 , 1 ,83 ,143 ,83 ,143 ,83 ,143 ,254 ,255 , 9 , 0 , 10 , 0 , 82 ,1 ,164 ,3 ,227 ,0 ,242 ,202 ,247 ,57 ,153 ,116 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,169 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,160 , 11 , 95 ,120 ,169 ,35 ,0 ,0 ,3 ,0 ,131 , 81 ,128 , 44 ,88 ,0 ,0 ,0 ,0 , 78 ,170 ,193 ,54 , 76 ,231 ,250 , 0 ,134 ,255 ,134 , 2 ,83 ,143 ,83 ,143 ,83 ,143 , 22 , 0 ,245 ,255 , 12 , 0 , 75 ,1 ,165 ,3 ,231 ,0 ,193 ,235 ,252 ,57 ,161 ,116 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,170 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,184 ,240 ,190 ,122 ,169 ,35 ,0 ,0 ,3 ,0 ,131 ,240 , 27 , 45 ,88 ,0 ,0 ,0 ,0 ,172 ,172 ,158 ,56 ,170 ,233 ,239 , 0 ,205 ,254 ,198 , 3 ,83 ,143 ,83 ,143 ,83 ,143 , 3 , 0 ,236 ,255 ,237 ,255 , 74 ,1 ,164 ,3 ,231 ,0 ,121 , 47 ,197 ,57 ,169 ,116 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,171 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,208 ,213 , 30 ,125 ,169 ,35 ,0 ,0 ,3 ,0 ,131 ,143 ,183 , 45 ,88 ,0 ,0 ,0 ,0 , 77 ,175 ,174 ,58 ,182 ,236 , 22 , 1 , 99 ,255 , 37 , 3 ,83 ,143 ,83 ,143 ,83 ,143 ,183 ,255 , 86 , 0 , 24 , 0 , 72 ,1 ,168 ,3 ,232 ,0 ,176 ,132 ,249 ,57 ,177 ,116 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,172 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,232 ,186 ,126 ,127 ,169 ,35 ,0 ,0 ,3 ,0 ,131 , 46 , 83 , 46 ,88 ,0 ,0 ,0 ,0 ,184 ,177 , 84 ,60 , 65 ,238 , 36 , 1 ,249 ,255 , 11 , 2 ,83 ,143 ,83 ,143 ,83 ,143 ,198 ,255 , 30 , 0 , 25 , 0 , 73 ,1 ,170 ,3 ,232 ,0 , 41 ,226 , 23 ,58 ,185 ,116 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,173 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 , 0 ,160 ,222 ,129 ,169 ,35 ,0 ,0 ,3 ,0 ,131 ,205 ,238 , 46 ,88 ,0 ,0 ,0 ,0 ,119 ,179 ,138 ,61 ,176 ,238 ,193 , 0 , 97 , 0 , 7 , 1 ,83 ,143 ,83 ,143 ,83 ,143 ,248 ,255 ,243 ,255 , 6 , 0 , 78 ,1 ,168 ,3 ,230 ,0 , 15 ,192 , 25 ,58 ,193 ,116 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,174 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 , 48 ,129 , 62 ,132 ,169 ,35 ,0 ,0 ,3 ,0 ,131 ,107 ,138 , 47 ,88 ,0 ,0 ,0 ,0 , 69 ,180 , 55 ,62 ,140 ,238 , 47 , 0 , 96 , 0 , 12 , 0 ,83 ,143 ,83 ,143 ,83 ,143 , 13 , 0 ,245 ,255 ,240 ,255 , 86 ,1 ,164 ,3 ,226 ,0 ,231 ,253 , 33 ,58 ,201 ,116 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,175 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 , 72 ,102 ,158 ,134 ,169 ,35 ,0 ,0 ,3 ,0 ,131 , 10 , 38 , 48 ,88 ,0 ,0 ,0 ,0 ,220 ,179 ,255 ,61 ,214 ,237 ,192 ,255 ,123 , 0 ,161 ,254 ,83 ,143 ,83 ,143 ,83 ,143 ,245 ,255 , 3 , 0 ,255 ,255 , 93 ,1 ,163 ,3 ,223 ,0 ,163 , 70 , 29 ,58 ,209 ,116 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,176 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 , 96 , 75 ,254 ,136 ,169 ,35 ,0 ,0 ,3 ,0 ,131 ,169 ,193 , 48 ,88 ,0 ,0 ,0 ,0 , 68 ,178 ,235 ,60 , 66 ,236 , 67 ,255 ,150 , 0 ,107 ,253 ,83 ,143 ,83 ,143 ,83 ,143 ,223 ,255 , 3 , 0 , 7 , 0 , 96 ,1 ,162 ,3 ,221 ,0 ,198 ,218 , 12 ,58 ,217 ,116 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,177 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,120 , 48 , 94 ,139 ,169 ,35 ,0 ,0 ,3 ,0 ,131 , 72 , 93 , 49 ,88 ,0 ,0 ,0 ,0 ,228 ,175 , 77 ,59 , 24 ,234 ,183 ,254 ,123 , 0 , 5 ,253 ,83 ,143 ,83 ,143 ,83 ,143 ,240 ,255 ,238 ,255 , 4 , 0 , 97 ,1 ,160 ,3 ,220 ,0 , 52 , 13 ,230 ,57 ,225 ,116 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,178 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,168 , 17 ,190 ,141 ,169 ,35 ,0 ,0 ,3 ,0 ,131 ,230 ,248 , 49 ,88 ,0 ,0 ,0 ,0 , 76 ,173 ,141 ,57 , 6 ,232 ,246 ,254 ,147 , 0 ,237 ,252 ,83 ,143 ,83 ,143 ,83 ,143 , 45 , 0 , 31 , 0 ,220 ,255 , 95 ,1 ,163 ,3 ,220 ,0 , 54 , 85 ,186 ,57 ,233 ,116 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,179 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,192 ,246 , 29 ,144 ,169 ,35 ,0 ,0 ,3 ,0 ,131 ,133 ,148 , 50 ,88 ,0 ,0 ,0 ,0 , 61 ,171 ,200 ,55 , 96 ,230 , 75 ,255 ,219 ,255 ,251 ,253 ,83 ,143 ,83 ,143 ,83 ,143 , 79 , 0 ,242 ,255 ,210 ,255 , 94 ,1 ,165 ,3 ,219 ,0 ,196 ,171 ,199 ,57 ,241 ,116 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,180 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,216 ,219 ,125 ,146 ,169 ,35 ,0 ,0 ,3 ,0 ,131 , 36 , 48 , 51 ,88 ,0 ,0 ,0 ,0 ,243 ,169 ,116 ,54 , 11 ,230 ,157 ,255 ,118 ,255 , 37 ,255 ,84 ,143 ,84 ,143 ,84 ,143 , 5 , 0 , 17 , 0 , 10 , 0 , 89 ,1 ,167 ,3 ,222 ,0 , 66 ,114 ,189 ,57 ,249 ,116 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,181 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,240 ,192 ,221 ,148 ,169 ,35 ,0 ,0 ,3 ,0 ,131 ,195 ,203 , 51 ,88 ,0 ,0 ,0 ,0 ,123 ,169 ,187 ,53 , 18 ,230 , 16 , 0 ,190 ,255 ,217 ,255 ,84 ,143 ,84 ,143 ,84 ,143 ,232 ,255 , 3 , 0 , 23 , 0 , 79 ,1 ,169 ,3 ,226 ,0 , 16 ,227 ,210 ,57 , 1 ,117 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,182 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 , 8 ,166 , 61 ,151 ,169 ,35 ,0 ,0 ,3 ,0 ,131 , 98 ,103 , 52 ,88 ,0 ,0 ,0 ,0 ,171 ,169 ,171 ,53 , 81 ,230 , 83 , 0 ,182 ,255 ,135 , 0 ,84 ,143 ,84 ,143 ,84 ,143 ,242 ,255 , 0 , 0 , 2 , 0 , 71 ,1 ,171 ,3 ,229 ,0 ,144 ,244 ,208 ,57 , 9 ,117 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,183 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 , 56 ,135 ,157 ,153 ,169 ,35 ,0 ,0 ,3 ,4 ,131 , 0 , 3 , 53 ,88 ,0 ,0 ,0 ,0 , 97 ,170 , 15 ,54 , 3 ,231 ,155 , 0 ,162 ,255 , 74 , 1 ,84 ,143 ,84 ,143 ,84 ,143 , 12 , 0 ,228 ,255 ,243 ,255 , 65 ,1 ,172 ,3 ,231 ,0 ,204 , 93 ,177 ,57 , 17 ,117 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,184 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 , 80 ,108 ,253 ,155 ,169 ,35 ,0 ,0 ,3 ,0 ,131 ,159 ,158 , 53 ,88 ,0 ,0 ,0 ,0 ,188 ,171 , 27 ,55 , 76 ,232 ,190 , 0 ,126 ,255 ,122 , 2 ,84 ,143 ,84 ,143 ,84 ,143 , 48 , 0 ,193 ,255 ,228 ,255 , 63 ,1 ,170 ,3 ,231 ,0 , 52 ,121 , 4 ,58 , 25 ,117 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,185 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,104 , 81 , 93 ,158 ,169 ,35 ,0 ,0 ,3 ,0 ,131 , 62 , 58 , 54 ,88 ,0 ,0 ,0 ,0 ,173 ,173 ,190 ,56 ,239 ,234 ,171 , 0 , 10 ,255 , 62 , 3 ,84 ,143 ,84 ,143 ,84 ,143 ,249 ,255 , 11 , 0 ,250 ,255 , 63 ,1 ,169 ,3 ,229 ,0 ,251 , 20 , 4 ,58 , 33 ,117 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,186 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,128 , 54 ,189 ,160 ,169 ,35 ,0 ,0 ,3 ,0 ,131 ,221 ,213 , 54 ,88 ,0 ,0 ,0 ,0 ,173 ,175 , 81 ,58 ,223 ,237 ,116 , 0 ,232 ,254 ,203 , 2 ,84 ,143 ,84 ,143 ,84 ,143 ,213 ,255 , 65 , 0 , 22 , 0 , 65 ,1 ,172 ,3 ,229 ,0 , 82 ,228 , 54 ,58 , 41 ,117 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,187 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,176 , 23 , 29 ,163 ,169 ,35 ,0 ,0 ,3 ,0 ,131 ,123 ,113 , 55 ,88 ,0 ,0 ,0 ,0 , 39 ,177 , 77 ,59 ,232 ,239 , 88 , 0 ,146 ,255 ,133 , 1 ,84 ,143 ,84 ,143 ,84 ,143 ,182 ,255 , 44 , 0 , 48 , 0 , 67 ,1 ,174 ,3 ,229 ,0 ,185 , 20 ,115 ,58 , 49 ,117 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,188 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,200 ,252 ,124 ,165 ,169 ,35 ,0 ,0 ,3 ,0 ,131 , 26 , 13 , 56 ,88 ,0 ,0 ,0 ,0 ,225 ,177 ,229 ,59 ,142 ,240 , 35 , 0 , 23 , 0 , 77 , 0 ,84 ,143 ,84 ,143 ,84 ,143 ,220 ,255 , 21 , 0 , 24 , 0 , 72 ,1 ,173 ,3 ,229 ,0 ,235 , 19 ,130 ,58 , 57 ,117 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,189 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,224 ,225 ,220 ,167 ,169 ,35 ,0 ,0 ,3 ,0 ,131 ,185 ,168 , 56 ,88 ,0 ,0 ,0 ,0 ,205 ,177 ,231 ,59 , 57 ,240 , 14 , 0 ,129 , 0 , 71 ,255 ,84 ,143 ,84 ,143 ,84 ,143 ,235 ,255 , 16 , 0 , 17 , 0 , 77 ,1 ,172 ,3 ,228 ,0 ,123 ,184 ,129 ,58 , 65 ,117 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,190 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,248 ,198 , 60 ,170 ,169 ,35 ,0 ,0 ,3 ,0 ,131 , 88 , 68 , 57 ,88 ,0 ,0 ,0 ,0 , 56 ,177 ,119 ,59 , 7 ,239 ,209 ,255 ,101 , 0 ,171 ,254 ,84 ,143 ,84 ,143 ,84 ,143 , 7 , 0 ,236 ,255 ,248 ,255 , 84 ,1 ,170 ,3 ,225 ,0 ,189 , 95 , 74 ,58 , 73 ,117 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,191 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 , 40 ,168 ,156 ,172 ,169 ,35 ,0 ,0 ,3 ,4 ,131 ,246 ,223 , 57 ,88 ,0 ,0 ,0 ,0 , 23 ,176 ,150 ,58 ,169 ,237 ,128 ,255 ,110 , 0 , 61 ,254 ,85 ,143 ,85 ,143 ,85 ,143 ,255 ,255 ,228 ,255 ,247 ,255 , 88 ,1 ,167 ,3 ,223 ,0 ,145 , 4 , 48 ,58 , 81 ,117 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,192 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 , 64 ,141 ,252 ,174 ,169 ,35 ,0 ,0 ,3 ,0 ,131 ,149 ,123 , 58 ,88 ,0 ,0 ,0 ,0 ,156 ,174 ,129 ,57 , 52 ,236 , 93 ,255 ,111 , 0 ,206 ,253 ,85 ,143 ,85 ,143 ,85 ,143 , 23 , 0 , 5 , 0 ,240 ,255 , 90 ,1 ,167 ,3 ,221 ,0 ,200 , 67 , 25 ,58 , 89 ,117 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,193 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 , 88 ,114 , 92 ,177 ,169 ,35 ,0 ,0 ,3 ,4 ,131 , 52 , 23 , 59 ,88 ,0 ,0 ,0 ,0 ,225 ,172 , 35 ,56 ,165 ,234 , 20 ,255 , 71 , 0 ,196 ,253 ,85 ,143 ,85 ,143 ,85 ,143 , 21 , 0 , 7 , 0 ,247 ,255 , 91 ,1 ,167 ,3 ,221 ,0 , 88 ,155 ,107 ,57 , 97 ,117 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,194 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,112 , 87 ,188 ,179 ,169 ,35 ,0 ,0 ,3 ,0 ,131 ,211 ,178 , 59 ,88 ,0 ,0 ,0 ,0 , 3 ,171 ,153 ,54 , 14 ,233 , 98 ,255 ,120 , 0 ,101 ,253 ,85 ,143 ,85 ,143 ,85 ,143 , 26 , 0 , 36 , 0 ,236 ,255 , 88 ,1 ,170 ,3 ,221 ,0 ,244 ,136 ,201 ,57 ,105 ,117 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,195 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,136 , 60 , 28 ,182 ,169 ,35 ,0 ,0 ,3 ,0 ,131 ,114 , 78 , 60 ,88 ,0 ,0 ,0 ,0 ,122 ,169 ,252 ,52 , 29 ,231 ,144 ,255 , 57 , 0 ,254 ,253 ,85 ,143 ,85 ,143 ,85 ,143 , 56 , 0 ,219 ,255 ,218 ,255 , 85 ,1 ,170 ,3 ,221 ,0 ,232 ,118 ,246 ,57 ,113 ,117 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,196 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,184 , 29 ,124 ,184 ,169 ,35 ,0 ,0 ,3 ,0 ,131 , 16 ,234 , 60 ,88 ,0 ,0 ,0 ,0 ,111 ,168 ,176 ,51 , 10 ,230 ,225 ,255 ,231 ,255 ,198 ,254 ,85 ,143 ,85 ,143 ,85 ,143 , 1 , 0 ,226 ,255 ,255 ,255 , 78 ,1 ,170 ,3 ,223 ,0 ,156 ,148 , 6 ,58 ,121 ,117 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,197 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,208 , 2 ,220 ,186 ,169 ,35 ,0 ,0 ,3 ,0 ,131 ,175 ,133 , 61 ,88 ,0 ,0 ,0 ,0 ,248 ,167 , 2 ,51 ,174 ,229 ,244 ,255 ,222 ,255 ,183 ,255 ,85 ,143 ,85 ,143 ,85 ,143 ,231 ,255 ,254 ,255 , 7 , 0 , 68 ,1 ,171 ,3 ,226 ,0 ,189 ,201 , 16 ,58 ,129 ,117 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,198 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,232 ,231 , 59 ,189 ,169 ,35 ,0 ,0 ,3 ,0 ,131 , 78 , 33 , 62 ,88 ,0 ,0 ,0 ,0 , 2 ,168 ,239 ,50 ,213 ,229 , 44 , 0 ,194 ,255 ,110 , 0 ,85 ,143 ,85 ,143 ,85 ,143 ,245 ,255 , 10 , 0 , 0 , 0 , 58 ,1 ,174 ,3 ,229 ,0 ,114 , 88 , 7 ,58 ,137 ,117 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,199 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 , 0 ,205 ,155 ,191 ,169 ,35 ,0 ,0 ,3 ,4 ,131 ,237 ,188 , 62 ,88 ,0 ,0 ,0 ,0 ,142 ,168 , 78 ,51 ,126 ,230 ,120 , 0 ,157 ,255 , 53 , 1 ,85 ,143 ,85 ,143 ,85 ,143 , 15 , 0 ,253 ,255 ,246 ,255 , 50 ,1 ,176 ,3 ,231 ,0 ,119 ,213 , 6 ,58 ,145 ,117 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,200 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 , 48 ,174 ,251 ,193 ,169 ,35 ,0 ,0 ,3 ,0 ,131 ,139 , 88 , 63 ,88 ,0 ,0 ,0 ,0 ,189 ,169 , 59 ,52 ,221 ,231 ,200 , 0 , 90 ,255 , 90 , 2 ,85 ,143 ,85 ,143 ,85 ,143 , 25 , 0 ,245 ,255 ,243 ,255 , 46 ,1 ,177 ,3 ,231 ,0 , 92 ,161 ,167 ,57 ,153 ,117 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,201 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 , 72 ,147 , 91 ,196 ,169 ,35 ,0 ,0 ,3 ,0 ,131 , 42 ,244 , 63 ,88 ,0 ,0 ,0 ,0 ,157 ,171 ,198 ,53 , 73 ,234 ,222 , 0 ,251 ,254 ,239 , 2 ,85 ,143 ,85 ,143 ,85 ,143 , 0 , 0 , 57 , 0 ,253 ,255 , 45 ,1 ,179 ,3 ,230 ,0 ,251 ,109 ,202 ,57 ,161 ,117 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,202 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 , 96 ,120 ,187 ,198 ,169 ,35 ,0 ,0 ,3 ,0 ,131 ,201 ,143 , 64 ,88 ,0 ,0 ,0 ,0 ,133 ,173 ,255 ,54 ,137 ,236 ,187 , 0 , 63 ,255 , 58 , 2 ,85 ,143 ,85 ,143 ,85 ,143 ,195 ,255 , 0 , 0 , 18 , 0 , 44 ,1 ,181 ,3 ,230 ,0 ,160 ,186 , 8 ,58 ,169 ,117 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,203 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,120 , 93 , 27 ,201 ,169 ,35 ,0 ,0 ,3 ,0 ,131 ,104 , 43 , 65 ,88 ,0 ,0 ,0 ,0 ,190 ,174 ,236 ,55 , 55 ,238 , 46 , 0 ,135 ,255 , 94 , 1 ,86 ,143 ,86 ,143 ,86 ,143 ,212 ,255 , 17 , 0 , 15 , 0 , 45 ,1 ,181 ,3 ,229 ,0 , 49 , 70 ,215 ,57 ,177 ,117 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,204 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,144 , 66 ,123 ,203 ,169 ,35 ,0 ,0 ,3 ,0 ,131 , 7 ,199 , 65 ,88 ,0 ,0 ,0 ,0 , 53 ,175 , 58 ,56 , 61 ,239 ,244 ,255 ,147 ,255 , 96 , 0 ,86 ,143 ,86 ,143 ,86 ,143 ,216 ,255 , 10 , 0 , 18 , 0 , 48 ,1 ,181 ,3 ,228 ,0 ,196 ,241 ,223 ,57 ,185 ,117 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,205 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,192 , 35 ,219 ,205 ,169 ,35 ,0 ,0 ,3 ,0 ,131 ,165 , 98 , 66 ,88 ,0 ,0 ,0 ,0 , 15 ,175 , 11 ,56 , 96 ,239 ,237 ,255 , 20 , 0 ,120 ,255 ,86 ,143 ,86 ,143 ,86 ,143 ,251 ,255 , 4 , 0 ,251 ,255 , 52 ,1 ,181 ,3 ,226 ,0 ,143 , 87 ,222 ,57 ,193 ,117 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,206 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,216 , 8 , 59 ,208 ,169 ,35 ,0 ,0 ,3 ,0 ,131 , 68 ,254 , 66 ,88 ,0 ,0 ,0 ,0 ,111 ,174 ,101 ,55 ,188 ,238 ,178 ,255 , 34 , 0 ,217 ,254 ,86 ,143 ,86 ,143 ,86 ,143 ,240 ,255 ,230 ,255 ,254 ,255 , 56 ,1 ,178 ,3 ,223 ,0 , 42 , 96 ,253 ,57 ,201 ,117 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,207 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,240 ,237 ,154 ,210 ,169 ,35 ,0 ,0 ,3 ,4 ,131 ,227 ,153 , 67 ,88 ,0 ,0 ,0 ,0 , 80 ,173 ,123 ,54 ,179 ,237 , 77 ,255 , 64 , 0 , 78 ,254 ,86 ,143 ,86 ,143 ,86 ,143 ,229 ,255 ,244 ,255 ,248 ,255 , 58 ,1 ,177 ,3 ,221 ,0 , 85 , 90 , 3 ,58 ,209 ,117 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,208 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 , 40 ,170 ,249 ,212 ,169 ,35 ,0 ,0 ,3 ,0 ,131 ,130 , 53 , 68 ,88 ,0 ,0 ,0 ,0 ,181 ,171 , 63 ,53 , 75 ,236 , 41 ,255 ,128 , 0 ,150 ,253 ,86 ,143 ,86 ,143 ,86 ,143 ,233 ,255 , 26 , 0 , 0 , 0 , 57 ,1 ,178 ,3 ,220 ,0 ,143 , 93 ,116 ,57 ,217 ,117 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,209 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 , 88 ,139 , 89 ,215 ,169 ,35 ,0 ,0 ,3 ,0 ,131 , 32 ,209 , 68 ,88 ,0 ,0 ,0 ,0 ,208 ,169 ,166 ,51 , 44 ,234 , 68 ,255 ,170 , 0 , 41 ,253 ,86 ,143 ,86 ,143 ,86 ,143 , 23 , 0 , 38 , 0 ,235 ,255 , 56 ,1 ,181 ,3 ,220 ,0 ,168 ,222 ,208 ,57 ,225 ,117 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,210 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,112 ,112 ,185 ,217 ,169 ,35 ,0 ,0 ,3 ,0 ,131 ,191 ,108 , 69 ,88 ,0 ,0 ,0 ,0 , 45 ,168 ,209 ,49 ,199 ,231 ,223 ,255 ,151 , 0 ,100 ,253 ,86 ,143 ,86 ,143 ,86 ,143 , 49 , 0 , 15 , 0 ,232 ,255 , 52 ,1 ,184 ,3 ,220 ,0 , 38 ,222 , 13 ,58 ,233 ,117 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,211 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,136 , 85 , 25 ,220 ,169 ,35 ,0 ,0 ,3 ,0 ,131 , 94 , 8 , 70 ,88 ,0 ,0 ,0 ,0 ,118 ,167 ,111 ,48 ,244 ,229 , 23 , 0 , 7 , 0 , 50 ,255 ,86 ,143 ,86 ,143 ,86 ,143 , 34 , 0 ,170 ,255 , 0 , 0 , 47 ,1 ,182 ,3 ,221 ,0 ,212 ,229 ,147 ,58 ,241 ,117 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,212 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,160 , 58 ,121 ,222 ,169 ,35 ,0 ,0 ,3 ,0 ,131 ,253 ,163 , 70 ,88 ,0 ,0 ,0 ,0 ,125 ,167 , 66 ,48 ,235 ,229 , 53 , 0 ,246 ,255 ,100 , 0 ,86 ,143 ,86 ,143 ,86 ,143 ,209 ,255 , 11 , 0 , 23 , 0 , 37 ,1 ,183 ,3 ,224 ,0 , 73 ,169 ,155 ,58 ,249 ,117 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,213 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,208 , 27 ,217 ,224 ,169 ,35 ,0 ,0 ,3 ,0 ,131 ,155 , 63 , 71 ,88 ,0 ,0 ,0 ,0 ,250 ,167 ,183 ,48 , 63 ,230 , 87 , 0 , 0 , 0 ,184 , 0 ,86 ,143 ,86 ,143 ,86 ,143 ,237 ,255 , 28 , 0 ,250 ,255 , 27 ,1 ,186 ,3 ,225 ,0 ,149 ,210 ,152 ,58 , 1 ,118 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,214 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,232 , 0 , 57 ,227 ,169 ,35 ,0 ,0 ,3 ,0 ,131 , 58 ,219 , 71 ,88 ,0 ,0 ,0 ,0 ,168 ,168 , 78 ,49 ,214 ,230 , 97 , 0 ,200 ,255 , 21 , 1 ,86 ,143 ,86 ,143 ,86 ,143 , 3 , 0 ,250 ,255 ,243 ,255 , 21 ,1 ,188 ,3 ,225 ,0 , 98 ,156 ,150 ,58 , 9 ,118 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,215 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 , 0 ,230 ,152 ,229 ,169 ,35 ,0 ,0 ,3 ,4 ,131 ,217 ,118 , 72 ,88 ,0 ,0 ,0 ,0 ,130 ,169 , 32 ,50 ,190 ,231 ,122 , 0 ,194 ,255 ,208 , 1 ,87 ,143 ,87 ,143 ,87 ,143 , 35 , 0 ,218 ,255 ,232 ,255 , 18 ,1 ,188 ,3 ,224 ,0 ,218 ,182 ,143 ,58 , 17 ,118 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,216 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 , 24 ,203 ,248 ,231 ,169 ,35 ,0 ,0 ,3 ,0 ,131 ,120 , 18 , 73 ,88 ,0 ,0 ,0 ,0 , 10 ,171 ,167 ,51 ,121 ,233 ,194 , 0 ,155 ,255 ,230 , 2 ,87 ,143 ,87 ,143 ,87 ,143 , 54 , 0 ,219 ,255 ,223 ,255 , 19 ,1 ,187 ,3 ,222 ,0 ,108 , 2 ,128 ,58 , 25 ,118 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,217 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 , 48 ,176 , 88 ,234 ,169 ,35 ,0 ,0 ,3 ,0 ,131 , 23 ,174 , 73 ,88 ,0 ,0 ,0 ,0 , 74 ,173 ,202 ,53 , 40 ,236 ,211 , 0 , 26 ,255 ,140 , 3 ,87 ,143 ,87 ,143 ,87 ,143 , 41 , 0 ,249 ,255 ,213 ,255 , 24 ,1 ,186 ,3 ,218 ,0 ,184 , 73 , 27 ,58 , 33 ,118 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,218 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 , 96 ,145 ,184 ,236 ,169 ,35 ,0 ,0 ,3 ,0 ,131 ,181 , 73 , 74 ,88 ,0 ,0 ,0 ,0 ,110 ,175 ,131 ,55 , 64 ,239 ,115 , 0 , 9 ,255 ,213 , 2 ,87 ,143 ,87 ,143 ,87 ,143 ,164 ,255 , 39 , 0 , 40 , 0 , 27 ,1 ,186 ,3 ,216 ,0 ,202 , 89 ,160 ,57 , 41 ,118 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,219 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,120 ,118 , 24 ,239 ,169 ,35 ,0 ,0 ,3 ,0 ,131 , 84 ,229 , 74 ,88 ,0 ,0 ,0 ,0 ,205 ,176 ,184 ,56 , 4 ,241 , 81 , 0 ,238 ,255 , 20 , 1 ,87 ,143 ,87 ,143 ,87 ,143 ,192 ,255 , 76 , 0 , 41 , 0 , 30 ,1 ,188 ,3 ,216 ,0 ,246 , 48 , 20 ,58 , 49 ,118 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,220 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,144 , 91 ,120 ,241 ,169 ,35 ,0 ,0 ,3 ,0 ,131 ,243 ,128 , 75 ,88 ,0 ,0 ,0 ,0 , 23 ,177 , 9 ,57 , 39 ,241 ,215 ,255 , 84 , 0 ,186 ,255 ,87 ,143 ,87 ,143 ,87 ,143 ,215 ,255 , 22 , 0 , 33 , 0 , 36 ,1 ,188 ,3 ,215 ,0 ,253 ,202 , 31 ,58 , 57 ,118 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,221 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,168 , 64 ,216 ,243 ,169 ,35 ,0 ,0 ,3 ,0 ,131 ,146 , 28 , 76 ,88 ,0 ,0 ,0 ,0 ,175 ,176 ,253 ,56 , 61 ,240 ,217 ,255 ,103 , 0 , 32 ,255 ,87 ,143 ,87 ,143 ,87 ,143 , 47 , 0 ,209 ,255 ,227 ,255 , 46 ,1 ,185 ,3 ,212 ,0 , 77 , 23 , 29 ,58 , 65 ,118 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,222 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,216 , 33 , 56 ,246 ,169 ,35 ,0 ,0 ,3 ,0 ,131 , 48 ,184 , 76 ,88 ,0 ,0 ,0 ,0 , 17 ,176 ,165 ,56 ,181 ,239 ,162 ,255 , 31 , 0 ,103 ,255 ,87 ,143 ,87 ,143 ,87 ,143 , 8 , 0 ,224 ,255 ,240 ,255 , 54 ,1 ,180 ,3 ,208 ,0 ,176 ,126 , 50 ,58 , 73 ,118 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,223 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,240 , 6 ,152 ,248 ,169 ,35 ,0 ,0 ,3 ,4 ,131 ,207 , 83 , 77 ,88 ,0 ,0 ,0 ,0 ,167 ,175 ,128 ,56 ,153 ,239 ,178 ,255 , 3 , 0 ,172 ,255 ,87 ,143 ,87 ,143 ,87 ,143 , 0 , 0 , 6 , 0 ,244 ,255 , 60 ,1 ,178 ,3 ,205 ,0 ,178 , 11 , 51 ,58 , 81 ,118 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,224 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 , 8 ,236 ,247 ,250 ,169 ,35 ,0 ,0 ,3 ,4 ,131 ,110 ,239 , 77 ,88 ,0 ,0 ,0 ,0 ,112 ,175 ,107 ,56 ,150 ,239 ,211 ,255 , 29 , 0 ,201 ,255 ,87 ,143 ,87 ,143 ,87 ,143 ,237 ,255 , 22 , 0 , 13 , 0 , 64 ,1 ,177 ,3 ,204 ,0 , 40 , 41 , 56 ,58 , 89 ,118 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,225 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 , 32 ,209 , 87 ,253 ,169 ,35 ,0 ,0 ,3 ,4 ,131 , 13 ,139 , 78 ,88 ,0 ,0 ,0 ,0 , 85 ,175 ,111 ,56 ,101 ,239 ,242 ,255 , 50 , 0 ,225 ,255 ,87 ,143 ,87 ,143 ,87 ,143 ,246 ,255 , 21 , 0 , 8 , 0 , 68 ,1 ,177 ,3 ,204 ,0 ,117 ,228 , 6 ,58 , 97 ,118 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,226 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 , 56 ,182 ,183 ,255 ,169 ,35 ,0 ,0 ,3 ,4 ,131 ,172 , 38 , 79 ,88 ,0 ,0 ,0 ,0 , 67 ,175 ,122 ,56 , 29 ,239 , 0 , 0 , 53 , 0 ,228 ,255 ,88 ,143 ,88 ,143 ,88 ,143 ,249 ,255 , 11 , 0 , 8 , 0 , 72 ,1 ,177 ,3 ,203 ,0 , 4 ,205 ,188 ,57 ,105 ,118 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,227 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,104 ,151 , 23 , 2 ,170 ,35 ,0 ,0 ,3 ,4 ,131 , 74 ,194 , 79 ,88 ,0 ,0 ,0 ,0 , 52 ,175 ,133 ,56 ,220 ,238 , 0 , 0 , 44 , 0 ,231 ,255 ,88 ,143 ,88 ,143 ,88 ,143 ,254 ,255 , 10 , 0 , 1 , 0 , 76 ,1 ,177 ,3 ,203 ,0 , 72 , 23 ,187 ,57 ,113 ,118 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,228 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,128 ,124 ,119 , 4 ,170 ,35 ,0 ,0 ,3 ,4 ,131 ,233 , 93 , 80 ,88 ,0 ,0 ,0 ,0 , 37 ,175 ,131 ,56 ,166 ,238 ,254 ,255 , 16 , 0 ,222 ,255 ,88 ,143 ,88 ,143 ,88 ,143 , 1 , 0 ,253 ,255 ,250 ,255 , 79 ,1 ,176 ,3 ,202 ,0 , 81 ,164 , 63 ,57 ,121 ,118 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,229 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,152 , 97 ,215 , 6 ,170 ,35 ,0 ,0 ,3 ,4 ,131 ,136 ,249 , 80 ,88 ,0 ,0 ,0 ,0 , 12 ,175 ,108 ,56 ,137 ,238 ,240 ,255 , 1 , 0 ,217 ,255 ,88 ,143 ,88 ,143 ,88 ,143 ,253 ,255 ,247 ,255 ,251 ,255 , 82 ,1 ,175 ,3 ,201 ,0 , 53 ,198 , 1 ,57 ,129 ,118 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,230 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,176 , 70 , 55 , 9 ,170 ,35 ,0 ,0 ,3 ,4 ,131 , 39 ,149 , 81 ,88 ,0 ,0 ,0 ,0 ,222 ,174 , 74 ,56 ,116 ,238 ,230 ,255 , 6 , 0 ,191 ,255 ,88 ,143 ,88 ,143 ,88 ,143 , 0 , 0 , 8 , 0 ,252 ,255 , 85 ,1 ,174 ,3 ,200 ,0 , 82 , 78 ,253 ,56 ,137 ,118 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,231 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,224 , 39 ,151 , 11 ,170 ,35 ,0 ,0 ,3 ,4 ,131 ,197 , 48 , 82 ,88 ,0 ,0 ,0 ,0 ,174 ,174 , 11 ,56 , 74 ,238 ,249 ,255 ,242 ,255 ,195 ,255 ,88 ,143 ,88 ,143 ,88 ,143 ,247 ,255 ,251 ,255 , 0 , 0 , 87 ,1 ,173 ,3 ,200 ,0 , 91 ,130 ,180 ,56 ,145 ,118 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,232 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,248 , 12 ,247 , 13 ,170 ,35 ,0 ,0 ,3 ,4 ,131 ,100 ,204 , 82 ,88 ,0 ,0 ,0 ,0 ,142 ,174 ,215 ,55 , 53 ,238 , 0 , 0 ,238 ,255 ,217 ,255 ,88 ,143 ,88 ,143 ,88 ,143 ,247 ,255 , 6 , 0 , 3 , 0 , 88 ,1 ,173 ,3 ,200 ,0 ,181 , 12 , 58 ,56 ,153 ,118 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,233 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 , 16 ,242 , 86 , 16 ,170 ,35 ,0 ,0 ,3 ,4 ,131 , 3 ,104 , 83 ,88 ,0 ,0 ,0 ,0 ,130 ,174 ,184 ,55 , 33 ,238 , 7 , 0 , 0 , 0 ,235 ,255 ,88 ,143 ,88 ,143 ,88 ,143 ,247 ,255 , 2 , 0 , 0 , 0 , 89 ,1 ,173 ,3 ,199 ,0 , 92 , 45 , 9 ,56 ,161 ,118 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,234 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 , 40 ,215 ,182 , 18 ,170 ,35 ,0 ,0 ,3 ,4 ,131 ,162 , 3 , 84 ,88 ,0 ,0 ,0 ,0 ,125 ,174 ,172 ,55 , 27 ,238 , 6 , 0 ,252 ,255 , 2 , 0 ,88 ,143 ,88 ,143 ,88 ,143 ,243 ,255 , 2 , 0 ,255 ,255 , 90 ,1 ,173 ,3 ,199 ,0 ,221 , 44 ,212 ,55 ,169 ,118 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,235 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 , 64 ,188 , 22 , 21 ,170 ,35 ,0 ,0 ,3 ,4 , 67 , 65 ,159 , 84 ,88 ,0 ,0 ,0 ,0 ,132 ,174 ,176 ,55 , 29 ,238 , 6 , 0 , 0 , 0 , 10 , 0 ,88 ,143 ,88 ,143 ,88 ,143 ,244 ,255 , 4 , 0 , 2 , 0 , 91 ,1 ,173 ,3 ,199 ,0 , 32 , 66 ,191 ,55 ,177 ,118 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,236 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,112 ,157 ,118 , 23 ,170 ,35 ,0 ,0 ,3 ,4 , 67 ,223 , 58 , 85 ,88 ,0 ,0 ,0 ,0 ,140 ,174 ,188 ,55 , 20 ,238 , 0 , 0 , 19 , 0 , 5 , 0 ,88 ,143 ,88 ,143 ,88 ,143 ,245 ,255 , 5 , 0 , 4 , 0 , 92 ,1 ,172 ,3 ,199 ,0 ,105 ,231 ,131 ,55 ,185 ,118 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,237 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,136 ,130 ,214 , 25 ,170 ,35 ,0 ,0 ,3 ,4 , 67 ,126 ,214 , 85 ,88 ,0 ,0 ,0 ,0 ,147 ,174 ,212 ,55 ,253 ,237 , 0 , 0 , 31 , 0 , 10 , 0 ,88 ,143 ,88 ,143 ,88 ,143 ,252 ,255 , 2 , 0 ,254 ,255 , 93 ,1 ,172 ,3 ,199 ,0 , 86 ,192 , 17 ,55 ,193 ,118 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,238 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,160 ,103 , 54 , 28 ,170 ,35 ,0 ,0 ,3 ,4 , 67 , 29 ,114 , 86 ,88 ,0 ,0 ,0 ,0 ,155 ,174 ,221 ,55 ,231 ,237 , 14 , 0 , 6 , 0 , 0 , 0 ,89 ,143 ,89 ,143 ,89 ,143 ,253 ,255 , 0 , 0 ,254 ,255 , 94 ,1 ,172 ,3 ,198 ,0 ,224 ,114 , 27 ,55 ,201 ,118 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,239 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,184 , 76 ,150 , 30 ,170 ,35 ,0 ,0 ,3 ,4 , 67 ,188 , 13 , 87 ,88 ,0 ,0 ,0 ,0 ,160 ,174 ,219 ,55 ,216 ,237 , 11 , 0 , 0 , 0 ,250 ,255 ,89 ,143 ,89 ,143 ,89 ,143 , 1 , 0 , 4 , 0 ,251 ,255 , 95 ,1 ,172 ,3 ,198 ,0 ,228 ,137 ,253 ,54 ,209 ,118 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,240 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,232 , 45 ,246 , 32 ,170 ,35 ,0 ,0 ,3 ,4 , 67 , 90 ,169 , 87 ,88 ,0 ,0 ,0 ,0 ,158 ,174 ,200 ,55 ,209 ,237 , 2 , 0 ,242 ,255 ,244 ,255 ,89 ,143 ,89 ,143 ,89 ,143 ,255 ,255 , 0 , 0 ,250 ,255 , 96 ,1 ,172 ,3 ,197 ,0 , 74 ,193 , 9 ,55 ,217 ,118 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,241 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 , 0 , 19 , 86 , 35 ,170 ,35 ,0 ,0 ,3 ,4 , 67 ,249 , 68 , 88 ,88 ,0 ,0 ,0 ,0 ,148 ,174 ,181 ,55 ,208 ,237 ,252 ,255 ,248 ,255 ,246 ,255 ,89 ,143 ,89 ,143 ,89 ,143 ,249 ,255 , 0 , 0 ,249 ,255 , 97 ,1 ,172 ,3 ,196 ,0 ,158 ,110 , 2 ,55 ,225 ,118 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,242 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 , 24 ,248 ,181 , 37 ,170 ,35 ,0 ,0 ,3 ,4 , 67 ,152 ,224 , 88 ,88 ,0 ,0 ,0 ,0 ,143 ,174 ,168 ,55 ,207 ,237 ,255 ,255 , 4 , 0 , 0 , 0 ,89 ,143 ,89 ,143 ,89 ,143 ,245 ,255 ,251 ,255 ,254 ,255 , 97 ,1 ,171 ,3 ,196 ,0 ,123 ,217 , 67 ,55 ,233 ,118 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,243 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 , 48 ,221 , 21 , 40 ,170 ,35 ,0 ,0 ,3 ,4 , 67 , 55 ,124 , 89 ,88 ,0 ,0 ,0 ,0 ,146 ,174 ,178 ,55 ,202 ,237 , 3 , 0 , 14 , 0 , 10 , 0 ,89 ,143 ,89 ,143 ,89 ,143 ,253 ,255 ,254 ,255 ,250 ,255 , 98 ,1 ,171 ,3 ,195 ,0 ,126 ,101 , 87 ,55 ,241 ,118 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,244 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 , 72 ,194 ,117 , 42 ,170 ,35 ,0 ,0 ,3 ,4 , 67 ,214 , 23 , 90 ,88 ,0 ,0 ,0 ,0 ,164 ,174 ,206 ,55 ,209 ,237 ,247 ,255 , 5 , 0 , 50 , 0 ,89 ,143 ,89 ,143 ,89 ,143 , 0 , 0 ,245 ,255 ,245 ,255 , 98 ,1 ,170 ,3 ,194 ,0 , 73 ,123 ,237 ,55 ,249 ,118 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,245 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,120 ,163 ,213 , 44 ,170 ,35 ,0 ,0 ,3 ,4 , 67 ,116 ,179 , 90 ,88 ,0 ,0 ,0 ,0 ,180 ,174 ,241 ,55 , 2 ,238 ,241 ,255 ,250 ,255 , 47 , 0 ,89 ,143 ,89 ,143 ,89 ,143 ,250 ,255 , 8 , 0 , 0 , 0 , 99 ,1 ,170 ,3 ,194 ,0 ,158 , 5 ,255 ,55 , 1 ,119 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,246 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,144 ,136 , 53 , 47 ,170 ,35 ,0 ,0 ,3 ,4 ,131 , 19 , 79 , 91 ,88 ,0 ,0 ,0 ,0 ,191 ,174 , 11 ,56 , 32 ,238 ,248 ,255 , 4 , 0 , 20 , 0 ,89 ,143 ,89 ,143 ,89 ,143 ,247 ,255 , 9 , 0 , 1 , 0 ,100 ,1 ,171 ,3 ,194 ,0 , 57 ,122 , 28 ,56 , 9 ,119 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,247 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,168 ,109 ,149 , 49 ,170 ,35 ,0 ,0 ,3 ,4 ,131 ,178 ,234 , 91 ,88 ,0 ,0 ,0 ,0 ,194 ,174 , 23 ,56 , 32 ,238 ,255 ,255 , 7 , 0 , 0 , 0 ,89 ,143 ,89 ,143 ,89 ,143 ,252 ,255 , 7 , 0 ,254 ,255 ,101 ,1 ,171 ,3 ,194 ,0 ,232 ,188 , 54 ,56 , 17 ,119 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,248 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,192 , 82 ,245 , 51 ,170 ,35 ,0 ,0 ,3 ,4 ,131 , 81 ,134 , 92 ,88 ,0 ,0 ,0 ,0 ,187 ,174 , 18 ,56 , 13 ,238 , 0 , 0 , 13 , 0 ,239 ,255 ,89 ,143 ,89 ,143 ,89 ,143 ,250 ,255 , 3 , 0 , 1 , 0 ,101 ,1 ,171 ,3 ,194 ,0 , 47 , 7 , 61 ,56 , 25 ,119 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,249 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,240 , 51 , 85 , 54 ,170 ,35 ,0 ,0 ,3 ,4 ,131 ,239 , 33 , 93 ,88 ,0 ,0 ,0 ,0 ,176 ,174 , 10 ,56 ,238 ,237 ,251 ,255 , 9 , 0 ,231 ,255 ,89 ,143 ,89 ,143 ,89 ,143 , 1 , 0 ,254 ,255 ,251 ,255 ,102 ,1 ,171 ,3 ,194 ,0 , 44 , 3 , 45 ,56 , 33 ,119 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,250 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 , 8 , 25 ,181 , 56 ,170 ,35 ,0 ,0 ,3 ,4 ,131 ,142 ,189 , 93 ,88 ,0 ,0 ,0 ,0 ,156 ,174 ,251 ,55 ,222 ,237 ,242 ,255 ,252 ,255 ,244 ,255 ,90 ,143 ,90 ,143 ,90 ,143 ,250 ,255 ,248 ,255 ,249 ,255 ,103 ,1 ,170 ,3 ,194 ,0 , 6 ,254 , 12 ,56 , 41 ,119 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,251 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 , 32 ,254 , 20 , 59 ,170 ,35 ,0 ,0 ,3 ,4 ,131 , 45 , 89 , 94 ,88 ,0 ,0 ,0 ,0 ,138 ,174 ,241 ,55 ,228 ,237 ,245 ,255 ,255 ,255 ,242 ,255 ,90 ,143 ,90 ,143 ,90 ,143 ,249 ,255 , 5 , 0 , 4 , 0 ,103 ,1 ,170 ,3 ,194 ,0 ,169 ,250 , 2 ,56 , 49 ,119 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,252 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 , 56 ,227 ,116 , 61 ,170 ,35 ,0 ,0 ,3 ,4 , 67 ,204 ,244 , 94 ,88 ,0 ,0 ,0 ,0 ,126 ,174 ,240 ,55 ,213 ,237 ,253 ,255 , 18 , 0 ,242 ,255 ,90 ,143 ,90 ,143 ,90 ,143 ,253 ,255 , 6 , 0 , 0 , 0 ,104 ,1 ,170 ,3 ,194 ,0 ,254 ,192 ,248 ,55 , 57 ,119 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,253 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 , 80 ,200 ,212 , 63 ,170 ,35 ,0 ,0 ,3 ,4 , 67 ,107 ,144 , 95 ,88 ,0 ,0 ,0 ,0 ,122 ,174 ,244 ,55 ,200 ,237 ,255 ,255 , 5 , 0 , 0 , 0 ,90 ,143 ,90 ,143 ,90 ,143 ,254 ,255 , 3 , 0 ,253 ,255 ,104 ,1 ,170 ,3 ,194 ,0 ,211 ,165 ,191 ,55 , 65 ,119 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,254 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,128 ,169 , 52 , 66 ,170 ,35 ,0 ,0 ,3 ,4 , 67 , 9 , 44 , 96 ,88 ,0 ,0 ,0 ,0 ,121 ,174 ,247 ,55 ,199 ,237 , 0 , 0 , 3 , 0 , 2 , 0 ,90 ,143 ,90 ,143 ,90 ,143 ,250 ,255 , 3 , 0 , 0 , 0 ,104 ,1 ,170 ,3 ,194 ,0 ,149 , 41 ,156 ,55 , 73 ,119 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,255 ,29 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,152 ,142 ,148 , 68 ,170 ,35 ,0 ,0 ,3 ,4 , 67 ,168 ,199 , 96 ,88 ,0 ,0 ,0 ,0 ,120 ,174 ,249 ,55 ,195 ,237 ,254 ,255 , 4 , 0 ,255 ,255 ,90 ,143 ,90 ,143 ,90 ,143 ,252 ,255 , 0 , 0 , 0 , 0 ,105 ,1 ,170 ,3 ,195 ,0 ,115 ,176 ,156 ,55 , 81 ,119 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,128 ,30 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,176 ,115 ,244 , 70 ,170 ,35 ,0 ,0 ,3 ,4 , 67 , 71 , 99 , 97 ,88 ,0 ,0 ,0 ,0 ,116 ,174 ,247 ,55 ,192 ,237 ,252 ,255 , 1 , 0 ,253 ,255 ,90 ,143 ,90 ,143 ,90 ,143 ,250 ,255 , 3 , 0 , 0 , 0 ,105 ,1 ,170 ,3 ,195 ,0 ,252 , 83 ,137 ,55 , 89 ,119 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,129 ,30 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,200 , 88 , 84 , 73 ,170 ,35 ,0 ,0 ,3 ,4 , 67 ,230 ,254 , 97 ,88 ,0 ,0 ,0 ,0 ,111 ,174 ,247 ,55 ,186 ,237 , 0 , 0 , 3 , 0 ,252 ,255 ,90 ,143 ,90 ,143 ,90 ,143 ,252 ,255 , 2 , 0 ,254 ,255 ,105 ,1 ,170 ,3 ,195 ,0 ,156 ,192 , 38 ,55 , 97 ,119 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,130 ,30 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,248 , 57 ,180 , 75 ,170 ,35 ,0 ,0 ,3 ,4 , 67 ,132 ,154 , 98 ,88 ,0 ,0 ,0 ,0 ,108 ,174 ,245 ,55 ,181 ,237 ,252 ,255 , 8 , 0 , 2 , 0 ,90 ,143 ,90 ,143 ,90 ,143 ,250 ,255 , 0 , 0 , 1 , 0 ,105 ,1 ,170 ,3 ,195 ,0 , 79 ,197 ,170 ,54 ,105 ,119 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,131 ,30 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 , 16 , 31 , 20 , 78 ,170 ,35 ,0 ,0 ,3 ,4 , 67 , 35 , 54 , 99 ,88 ,0 ,0 ,0 ,0 ,106 ,174 ,252 ,55 ,174 ,237 ,254 ,255 , 9 , 0 , 0 , 0 ,90 ,143 ,90 ,143 ,90 ,143 ,251 ,255 , 0 , 0 , 0 , 0 ,105 ,1 ,170 ,3 ,195 ,0 , 56 ,209 ,102 ,54 ,113 ,119 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,132 ,30 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 , 40 , 4 ,116 , 80 ,170 ,35 ,0 ,0 ,3 ,4 , 67 ,194 ,209 , 99 ,88 ,0 ,0 ,0 ,0 ,104 ,174 , 2 ,56 ,169 ,237 ,255 ,255 , 6 , 0 , 0 , 0 ,90 ,143 ,90 ,143 ,90 ,143 ,253 ,255 , 3 , 0 , 1 , 0 ,105 ,1 ,170 ,3 ,196 ,0 ,182 ,102 ,116 ,54 ,121 ,119 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,133 ,30 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 , 64 ,233 ,211 , 82 ,170 ,35 ,0 ,0 ,3 ,4 , 67 , 97 ,109 ,100 ,88 ,0 ,0 ,0 ,0 ,105 ,174 , 12 ,56 ,164 ,237 ,255 ,255 , 7 , 0 , 7 , 0 ,91 ,143 ,91 ,143 ,91 ,143 , 0 , 0 , 1 , 0 , 0 , 0 ,105 ,1 ,170 ,3 ,196 ,0 , 78 ,232 ,109 ,54 ,129 ,119 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,134 ,30 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 , 88 ,206 , 51 , 85 ,170 ,35 ,0 ,0 ,3 ,4 , 67 , 0 , 9 ,101 ,88 ,0 ,0 ,0 ,0 ,110 ,174 , 24 ,56 ,165 ,237 ,255 ,255 , 5 , 0 , 13 , 0 ,91 ,143 ,91 ,143 ,91 ,143 , 0 , 0 , 1 , 0 , 0 , 0 ,105 ,1 ,170 ,3 ,196 ,0 , 77 , 30 ,117 ,54 ,137 ,119 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,135 ,30 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,136 ,175 ,147 , 87 ,170 ,35 ,0 ,0 ,3 ,4 , 67 ,158 ,164 ,101 ,88 ,0 ,0 ,0 ,0 ,114 ,174 , 31 ,56 ,171 ,237 , 0 , 0 ,255 ,255 , 6 , 0 ,91 ,143 ,91 ,143 ,91 ,143 ,253 ,255 , 2 , 0 , 0 , 0 ,106 ,1 ,170 ,3 ,196 ,0 ,156 ,186 ,140 ,54 ,145 ,119 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,136 ,30 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,160 ,148 ,243 , 89 ,170 ,35 ,0 ,0 ,3 ,4 , 67 , 61 , 64 ,102 ,88 ,0 ,0 ,0 ,0 ,117 ,174 , 35 ,56 ,176 ,237 ,255 ,255 , 0 , 0 , 8 , 0 ,91 ,143 ,91 ,143 ,91 ,143 ,254 ,255 , 0 , 0 , 0 , 0 ,106 ,1 ,169 ,3 ,197 ,0 , 78 ,198 , 91 ,54 ,153 ,119 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,137 ,30 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,184 ,121 , 83 , 92 ,170 ,35 ,0 ,0 ,3 ,4 , 67 ,220 ,219 ,102 ,88 ,0 ,0 ,0 ,0 ,121 ,174 , 39 ,56 ,180 ,237 , 3 , 0 ,254 ,255 , 7 , 0 ,91 ,143 ,91 ,143 ,91 ,143 ,253 ,255 ,253 ,255 ,252 ,255 ,106 ,1 ,169 ,3 ,197 ,0 , 30 ,117 ,124 ,54 ,161 ,119 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,138 ,30 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,208 , 94 ,179 , 94 ,170 ,35 ,0 ,0 ,3 ,4 , 67 ,123 ,119 ,103 ,88 ,0 ,0 ,0 ,0 ,126 ,174 , 39 ,56 ,187 ,237 , 2 , 0 ,249 ,255 , 0 , 0 ,91 ,143 ,91 ,143 ,91 ,143 ,254 ,255 , 0 , 0 , 1 , 0 ,106 ,1 ,169 ,3 ,197 ,0 , 9 , 1 ,148 ,54 ,169 ,119 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,139 ,30 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 , 0 , 64 , 19 , 97 ,170 ,35 ,0 ,0 ,3 ,4 , 67 , 25 , 19 ,104 ,88 ,0 ,0 ,0 ,0 ,125 ,174 , 39 ,56 ,185 ,237 , 0 , 0 , 12 , 0 ,250 ,255 ,91 ,143 ,91 ,143 ,91 ,143 ,253 ,255 , 8 , 0 , 2 , 0 ,107 ,1 ,169 ,3 ,197 ,0 ,155 , 58 , 31 ,55 ,177 ,119 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,140 ,30 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 , 24 , 37 ,115 , 99 ,170 ,35 ,0 ,0 ,3 ,4 , 67 ,184 ,174 ,104 ,88 ,0 ,0 ,0 ,0 ,126 ,174 , 43 ,56 ,168 ,237 , 0 , 0 , 10 , 0 ,255 ,255 ,91 ,143 ,91 ,143 ,91 ,143 ,253 ,255 , 0 , 0 , 2 , 0 ,107 ,1 ,169 ,3 ,197 ,0 , 12 ,184 , 51 ,55 ,185 ,119 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,141 ,30 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 , 48 , 10 ,211 ,101 ,170 ,35 ,0 ,0 ,3 ,4 , 67 , 87 , 74 ,105 ,88 ,0 ,0 ,0 ,0 ,128 ,174 , 48 ,56 ,158 ,237 , 1 , 0 , 7 , 0 , 0 , 0 ,91 ,143 ,91 ,143 ,91 ,143 ,252 ,255 , 0 , 0 , 0 , 0 ,107 ,1 ,169 ,3 ,198 ,0 ,226 ,237 , 35 ,55 ,193 ,119 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,142 ,30 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 , 72 ,239 , 50 ,104 ,170 ,35 ,0 ,0 ,3 ,4 , 67 ,246 ,229 ,105 ,88 ,0 ,0 ,0 ,0 ,130 ,174 , 49 ,56 ,155 ,237 , 6 , 0 ,252 ,255 ,255 ,255 ,91 ,143 ,91 ,143 ,91 ,143 ,253 ,255 , 4 , 0 ,255 ,255 ,107 ,1 ,169 ,3 ,198 ,0 , 74 ,141 , 51 ,55 ,201 ,119 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,143 ,30 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 , 96 ,212 ,146 ,106 ,170 ,35 ,0 ,0 ,3 ,4 , 67 ,149 ,129 ,106 ,88 ,0 ,0 ,0 ,0 ,132 ,174 , 44 ,56 ,155 ,237 , 0 , 0 ,254 ,255 , 5 , 0 ,91 ,143 ,91 ,143 ,91 ,143 ,250 ,255 , 0 , 0 , 3 , 0 ,107 ,1 ,169 ,3 ,198 ,0 ,108 , 89 , 58 ,55 ,209 ,119 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,144 ,30 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,144 ,181 ,242 ,108 ,170 ,35 ,0 ,0 ,3 ,4 , 67 , 51 , 29 ,107 ,88 ,0 ,0 ,0 ,0 ,137 ,174 , 51 ,56 ,157 ,237 , 0 , 0 , 1 , 0 , 11 , 0 ,91 ,143 ,91 ,143 ,91 ,143 ,255 ,255 , 1 , 0 ,251 ,255 ,107 ,1 ,169 ,3 ,198 ,0 , 73 , 96 , 42 ,55 ,217 ,119 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,145 ,30 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,168 ,154 , 82 ,111 ,170 ,35 ,0 ,0 ,3 ,4 , 67 ,210 ,184 ,107 ,88 ,0 ,0 ,0 ,0 ,142 ,174 , 52 ,56 ,165 ,237 , 0 , 0 , 0 , 0 , 13 , 0 ,92 ,143 ,92 ,143 ,92 ,143 ,252 ,255 ,254 ,255 ,255 ,255 ,107 ,1 ,169 ,3 ,198 ,0 ,110 , 79 ,252 ,54 ,225 ,119 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,146 ,30 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,192 ,127 ,178 ,113 ,170 ,35 ,0 ,0 ,3 ,4 , 67 ,113 , 84 ,108 ,88 ,0 ,0 ,0 ,0 ,144 ,174 , 57 ,56 ,169 ,237 , 1 , 0 , 3 , 0 , 3 , 0 ,92 ,143 ,92 ,143 ,92 ,143 ,252 ,255 , 1 , 0 ,254 ,255 ,107 ,1 ,169 ,3 ,198 ,0 , 9 ,141 ,186 ,54 ,233 ,119 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,147 ,30 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 ,216 ,100 , 18 ,116 ,170 ,35 ,0 ,0 ,3 ,4 , 67 , 16 ,240 ,108 ,88 ,0 ,0 ,0 ,0 ,146 ,174 , 59 ,56 ,170 ,237 , 0 , 0 , 2 , 0 , 3 , 0 ,92 ,143 ,92 ,143 ,92 ,143 ,250 ,255 ,255 ,255 , 0 , 0 ,107 ,1 ,169 ,3 ,198 ,0 , 93 ,173 ,187 ,54 ,241 ,119 ,0 ,0 ,
4 ,0 ,4 ,0 ,23 ,0 ,0 ,0 ,16 ,0 ,69 ,0 ,8 ,148 ,30 ,16 ,1 ,58 ,62 ,8 ,14 ,26 ,58 ,1 , 8 , 70 ,114 ,118 ,170 ,35 ,0 ,0 ,3 ,4 , 67 ,174 ,139 ,109 ,88 ,0 ,0 ,0 ,0 ,150 ,174 , 71 ,56 ,167 ,237 ,255 ,255 , 7 , 0 , 5 , 0 ,92 ,143 ,92 ,143 ,92 ,143 , 0 , 0 , 0 , 0 ,253 ,255 ,108 ,1 ,168 ,3 ,198 ,0 ,108 ,226 ,176 ,54 ,249 ,119 ,0 ,0 ,